[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 4\nindent_style = space\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.md]\ntrim_trailing_whitespace = false\n\n[*.{yml,yaml}]\nindent_size = 2\n\n[docker-compose.yml]\nindent_size = 4\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto eol=lf\n\n*.blade.php diff=html\n*.css diff=css\n*.html diff=html\n*.md diff=markdown\n*.php diff=php\n\n/.github export-ignore\nCHANGELOG.md export-ignore\n.styleci.yml export-ignore\n"
  },
  {
    "path": ".gitignore",
    "content": "/.phpunit.cache\n/node_modules\n/public/build\n/public/hot\n/public/storage\n/storage/*.key\n/vendor\n.env\n.env.backup\n.env.production\n.phpunit.result.cache\nHomestead.json\nHomestead.yaml\nauth.json\nnpm-debug.log\nyarn-error.log\n/.fleet\n/.idea\n/.vscode\n\n"
  },
  {
    "path": "README.md",
    "content": "# [Buy Me a Coffee](https://buymeacoffee.com/eraufi)\n# My Laravel Projects\n\nWelcome to my collection of Laravel projects! Below is a table of the projects I've worked on, each with a brief description and a link to its corresponding YouTube video.\n\n| Number | Project Name                            | YouTube Link                          |\n|--------|-----------------------------------------|---------------------------------------|\n| 1      | Full Calendar                           | [Video](https://youtu.be/KzZR9A7Xk14) |\n| 2      | Drop Zone                               | [Video](https://youtu.be/SdwA3YKW35g) |\n| 3      | Auto-Suggest Search                     | [Video](https://youtu.be/7nvN0q77P-k) |\n| 4      | Lazy Load                               | [Video](https://youtu.be/5eG3PIriMgU) |\n| 5      | Excel Import and Export                 | [Video](https://youtu.be/BKPkN7XEwxA) |\n| 6      | PDF Generate                            | [Video](https://youtu.be/my9XgQHQoKM) |\n| 7      | CRUD                                    | [Video](https://youtu.be/gVP0EIS5j5A) |\n| 8      | CSV Import and Export                   | [Video](https://youtu.be/6tEsCSatPXE) |\n| 9      | Login using Name, Email or Phone number | [Video](https://youtu.be/ktTK2LZcyk4) |\n| 10     | Weather                                 | [Video](https://youtu.be/Hyw8w65Ru5U) |\n| 11     | Encrypt and Decrypt                     | [Video](https://youtu.be/E40z1dDL0YY) |\n| 12     | Form Builder                            | [Video](https://youtu.be/VXFSe-D5SCA) |\n| 13     | Image Cropper                           | [Video](https://youtu.be/zT3somYJGAE) |\n| 14     | Laravel Dusk Test                       | [Video](https://youtu.be/wNQxHo7Xj6M) |\n| 15     | Jquery Datatable                        | [Video](https://youtu.be/RRS7zW2SwIg) |\n| 16     | Change Language                         | [Video](https://youtu.be/ZrabCjtIaCg) |\n| 17     | Laravel SSE (Real time Notification)    | [Video](https://youtu.be/A7I8r3Fhrww) |\n| 18     | Chat Application                        | [Video](https://youtu.be/Dcnud0U5-6E) |\n| 19     | Custom Helper                           | [Video](https://youtu.be/5F_gRvkCoNM) |\n| 20     | Push Notification                       | [Video](https://youtu.be/AOLigc0T5tc) |\n| 21     | Roles And Permission                    | [Video](https://youtu.be/EiZPls4UcH4) |\n| 22     | File Management                         | [Video](https://youtu.be/tt4HOOQ-rCc) |\n| 23     | Auto Complete Search                    | [Video](https://youtu.be/s362UfaMKtg) |\n| 23     | Live Dashboard                          | [Video](https://youtu.be/QPD3CRqSpPM) |\n| 24     | Kanban Board                            | [Video](https://youtu.be/VLsnsLz4iwU) |\n| 25     | Select2                                 | [Video](https://youtu.be/fXdbiTIcXpw) |\n| 26     | Multi Database Connection               | [Video](https://youtu.be/kj-SjBFcxl4) |\n| 27     | Array And Object Validations            | [Video](https://youtu.be/1B66fjZvGEE) |\n| 28     | Log and Debug SQL Queries in Laravel    | [Video](https://youtu.be/9dDLp7uISjU) |\n"
  },
  {
    "path": "app/CustomHelper.php",
    "content": "<?php\n\n// Format phone number to a specific format\nif (!function_exists('formatPhoneNumber')) {\n    /**\n     * Format phone number to a specific format.\n     *\n     * @param string $phoneNumber The phone number to format.\n     * @return string The formatted phone number.\n     */\n    function formatPhoneNumber($phoneNumber)\n    {\n        return '(' . substr($phoneNumber, 0, 3) . ') ' . substr($phoneNumber, 3, 3) . '-' . substr($phoneNumber, 6);\n    }\n}\n\n// Generate a random string of specified length\nif (!function_exists('generateRandomString')) {\n    /**\n     * Generate a random string of specified length.\n     *\n     * @param int $length The length of the random string.\n     * @return string The generated random string.\n     */\n    function generateRandomString($length = 10)\n    {\n        return substr(str_shuffle(str_repeat($x = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length / strlen($x)))), 1, $length);\n    }\n}\n\n// Format a number as currency with a specified symbol and precision\nif (!function_exists('formatCurrency')) {\n    /**\n     * Format a number as currency with a specified symbol and precision.\n     *\n     * @param float $amount The amount to format.\n     * @param string $symbol The currency symbol.\n     * @param int $precision The number of decimal places.\n     * @return string The formatted currency string.\n     */\n    function formatCurrency($amount, $symbol = '$', $precision = 2)\n    {\n        return $symbol . number_format($amount, $precision);\n    }\n}\n\n// Truncate a text to a specified length and append ellipsis\nif (!function_exists('truncateText')) {\n    /**\n     * Truncate a text to a specified length and append ellipsis.\n     *\n     * @param string $text The text to truncate.\n     * @param int $length The maximum length of the truncated text.\n     * @param string $append The text to append if the text is truncated.\n     * @return string The truncated text.\n     */\n    function truncateText($text, $length = 100, $append = '...')\n    {\n        return strlen($text) > $length ? substr($text, 0, $length) . $append : $text;\n    }\n}\n\n// Format a date string to a specified format\nif (!function_exists('formatDate')) {\n    /**\n     * Format a date string to a specified format.\n     *\n     * @param string $date The date string to format.\n     * @param string $format The format to apply.\n     * @return string The formatted date string.\n     */\n    function formatDate($date, $format = 'Y-m-d')\n    {\n        return date($format, strtotime($date));\n    }\n}\n\n// Check if a string contains another string\nif (!function_exists('containsString')) {\n    /**\n     * Check if a string contains another string.\n     *\n     * @param string $haystack The string to search in.\n     * @param string $needle The string to search for.\n     * @return bool True if the needle is found in the haystack, false otherwise.\n     */\n    function containsString($haystack, $needle)\n    {\n        return strpos($haystack, $needle) !== false;\n    }\n}\n\n// Generate a unique code based on timestamp and random string\nif (!function_exists('generateUniqueCode')) {\n    /**\n     * Generate a unique code based on timestamp and random string.\n     *\n     * @return string The generated unique code.\n     */\n    function generateUniqueCode()\n    {\n        return time() . '-' . generateRandomString(6);\n    }\n}\n\n// Format bytes to human-readable format (KB, MB, GB, etc.)\nif (!function_exists('formatBytes')) {\n    /**\n     * Format bytes to human-readable format (KB, MB, GB, etc.).\n     *\n     * @param int $bytes The number of bytes.\n     * @param int $precision The number of decimal places.\n     * @return string The formatted bytes string.\n     */\n    function formatBytes($bytes, $precision = 2)\n    {\n        $units = ['B', 'KB', 'MB', 'GB', 'TB'];\n\n        $bytes = max($bytes, 0);\n        $pow = floor(($bytes ? log($bytes) : 0) / log(1024));\n        $pow = min($pow, count($units) - 1);\n\n        $bytes /= (1 << (10 * $pow));\n\n        return round($bytes, $precision) . ' ' . $units[$pow];\n    }\n}\n\n// Convert minutes to hours and minutes format\nif (!function_exists('convertMinutesToHoursMinutes')) {\n    /**\n     * Convert minutes to hours and minutes format.\n     *\n     * @param int $minutes The number of minutes.\n     * @return string The formatted time string (HH:MM).\n     */\n    function convertMinutesToHoursMinutes($minutes)\n    {\n        $hours = floor($minutes / 60);\n        $remainingMinutes = $minutes % 60;\n        return sprintf(\"%02d:%02d\", $hours, $remainingMinutes);\n    }\n}\n\n// Calculate age from the provided date of birth\nif (!function_exists('calculateAge')) {\n    /**\n     * Calculate age from the provided date of birth.\n     *\n     * @param string $dob The date of birth (YYYY-MM-DD).\n     * @return int The calculated age.\n     */\n    function calculateAge($dob)\n    {\n        $dob = new DateTime($dob);\n        $now = new DateTime();\n        $age = $dob->diff($now);\n        return $age->y;\n    }\n}\n\n// Generate a random hexadecimal color code\nif (!function_exists('generateRandomColorCode')) {\n    /**\n     * Generate a random hexadecimal color code.\n     *\n     * @return string The generated color code.\n     */\n    function generateRandomColorCode()\n    {\n        return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);\n    }\n}\n\n// Format integer currency\nif (!function_exists('formatIntegerCurrency')) {\n    /**\n     * Format an integer value as currency.\n     *\n     * @param int $amount The amount to format.\n     * @return string The formatted currency string.\n     */\n    function formatIntegerCurrency($amount)\n    {\n        return '$' . number_format($amount, 2);\n    }\n}\n\n// Format integer weight\nif (!function_exists('formatIntegerWeight')) {\n    /**\n     * Format an integer value as weight.\n     *\n     * @param int $weight The weight value.\n     * @return string The formatted weight string.\n     */\n    function formatIntegerWeight($weight)\n    {\n        return $weight . ' kg';\n    }\n}\n\n// Generate image URL\nif (!function_exists('generateImageUrl')) {\n    /**\n     * Generate a full URL for the image based on the provided image file name.\n     *\n     * @param string $imageName The image file name.\n     * @return string The generated image URL.\n     */\n    function generateImageUrl($imageName)\n    {\n        return asset('images/' . $imageName);\n    }\n}\n\n// Convert grams to kilograms\nif (!function_exists('convertGramsToKilograms')) {\n    /**\n     * Convert grams to kilograms.\n     *\n     * @param int $grams The weight in grams.\n     * @return float The weight in kilograms.\n     */\n    function convertGramsToKilograms($grams)\n    {\n        return $grams / 1000;\n    }\n}\n\n// Convert kilograms to grams\nif (!function_exists('convertKilogramsToGrams')) {\n    /**\n     * Convert kilograms to grams.\n     *\n     * @param float $kilograms The weight in kilograms.\n     * @return int The weight in grams.\n     */\n    function convertKilogramsToGrams($kilograms)\n    {\n        return $kilograms * 1000;\n    }\n}\n\n\n// Generate unique image name\nif (!function_exists('generateUniqueImageName')) {\n    /**\n     * Generate a unique name for the uploaded image file.\n     *\n     * @param string $originalName The original name of the image file.\n     * @return string The generated unique image name.\n     */\n    function generateUniqueImageName($originalName)\n    {\n        $extension = pathinfo($originalName, PATHINFO_EXTENSION);\n        return uniqid() . '.' . $extension;\n    }\n}\n\n// Format description\nif (!function_exists('formatDescription')) {\n    /**\n     * Format the description text (e.g., limit characters, add ellipsis).\n     *\n     * @param string $description The description text.\n     * @param int $maxLength The maximum length of the description.\n     * @param string $append The text to append if the description is truncated.\n     * @return string The formatted description text.\n     */\n    function formatDescription($description, $maxLength = 100, $append = '...')\n    {\n        return strlen($description) > $maxLength ? substr($description, 0, $maxLength) . $append : $description;\n    }\n}\n\n// Convert quantity to string\nif (!function_exists('convertQuantityToString')) {\n    /**\n     * Convert quantity to a string representation (e.g., \"10 items\").\n     *\n     * @param int $quantity The quantity.\n     * @return string The string representation of the quantity.\n     */\n    function convertQuantityToString($quantity)\n    {\n        return $quantity . ' items';\n    }\n}\n\n// Format date for display\nif (!function_exists('formatDateForDisplay')) {\n    /**\n     * Format the timestamp for display (e.g., \"2022-01-01\" to \"January 1, 2022\").\n     *\n     * @param string $date The date string.\n     * @return string The formatted date for display.\n     */\n    function formatDateForDisplay($date)\n    {\n        return date('F j, Y', strtotime($date));\n    }\n}\n"
  },
  {
    "path": "app/Exports/ProductExport.php",
    "content": "<?php\n\nnamespace App\\Exports;\n\nuse App\\Models\\Products;\nuse Maatwebsite\\Excel\\Concerns\\FromCollection;\nuse Maatwebsite\\Excel\\Concerns\\WithHeadings;\nuse Maatwebsite\\Excel\\Concerns\\Exportable;\n\nclass ProductExport implements FromCollection, WithHeadings\n{\n    use Exportable;\n\n    public function collection()\n    {\n        return Products::all(['name', 'quantity', 'buyingPrice', 'sellingPrice', 'description']);\n    }\n\n    public function headings(): array\n    {\n        return [\n            'Name',\n            'Quantity',\n            'Buying Price',\n            'Selling Price',\n            'Description',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/ArrayValidationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\n\nclass ArrayValidationController extends Controller\n{\n    //\n\n    /**\n     * Validate that 'emails' is an array with 2-5 elements\n     *\n     * Demo JSON:\n     * {\n     *   \"emails\": [\"test1@example.com\", \"test2@example.com\"]\n     * }\n     */\n    public function validateEmailsArray(Request $request)\n    {\n        $validated = $request->validate([\n            'emails' => 'required|array|min:2|max:5',\n        ]);\n\n        return response()->json(['message' => 'Validation passed!', 'data' => $validated]);\n    }\n\n    /**\n     * Validate 'emails' array, each element must be unique and a valid email\n     *\n     * Demo JSON:\n     * {\n     *   \"emails\": [\"test1@example.com\", \"test2@example.com\", \"test3@example.com\"]\n     * }\n     */\n    public function validateUniqueEmailsArray(Request $request)\n    {\n        $validated = $request->validate([\n            'emails' => 'required|array|min:2|max:5',\n            'emails.*' => 'required|email|distinct',\n        ]);\n\n        return response()->json(['message' => 'Validation passed!', 'data' => $validated]);\n    }\n\n    /**\n     * Validate each email in the 'emails' array with custom error messages\n     *\n     * Demo JSON:\n     * {\n     *   \"emails\": [\"valid@example.com\", \"invalid-email\"]\n     * }\n     */\n    public function validateEmailsCustomMessages(Request $request)\n    {\n        $validated = $request->validate([\n            'emails' => 'required|array|min:2|max:5',\n            'emails.*' => 'required|email',\n        ], [\n            'emails.required' => 'Please provide at least one email address.',\n            'emails.*.email' => 'Each email address must be valid.',\n        ]);\n\n        return response()->json(['message' => 'Validation passed!', 'data' => $validated]);\n    }\n\n    /**\n     * Validate 'items' array with custom position-based error messages\n     *\n     * Demo JSON:\n     * {\n     *   \"items\": [1, -2, \"three\"]\n     * }\n     */\n    public function validateItemsWithPosition(Request $request)\n    {\n        $validated = $request->validate([\n            'items' => ['required', 'array'],\n            'items.*' => ['integer', 'min:1'],\n        ], [\n            'items.*.integer' => 'The :attribute at position :position must be an integer.',\n            'items.*.min' => 'The :attribute at position :position must be at least :min.',\n        ]);\n\n        return response()->json(['message' => 'Validation passed!', 'data' => $validated]);\n    }\n\n    /**\n     * Validate 'settings' object with nested keys\n     *\n     * Demo JSON:\n     * {\n     *   \"settings\": {\n     *     \"email\": \"user@example.com\",\n     *     \"notification\": true\n     *   }\n     * }\n     */\n    public function validateSettings(Request $request)\n    {\n        $validated = $request->validate([\n            'settings' => 'required|array',\n            'settings.email' => 'required|email',\n            'settings.notification' => 'required|boolean',\n        ]);\n\n        return response()->json(['message' => 'Validation passed!', 'data' => $validated]);\n    }\n\n    /**\n     * Validate 'products' array with nested objects\n     *\n     * Demo JSON:\n     * {\n     *   \"products\": [\n     *     {\n     *       \"name\": \"Product 1\",\n     *       \"price\": 100,\n     *       \"quantity\": 2\n     *     },\n     *     {\n     *       \"name\": \"Product 2\",\n     *       \"price\": -50,\n     *       \"quantity\": 0\n     *     }\n     *   ]\n     * }\n     */\n    public function validateProducts(Request $request)\n    {\n        $validated = $request->validate([\n            'products' => 'required|array',\n            'products.*.name' => 'required|string',\n            'products.*.price' => 'required|numeric|min:0',\n            'products.*.quantity' => 'required|integer|min:1',\n        ]);\n\n        return response()->json(['message' => 'Validation passed!', 'data' => $validated]);\n    }\n\n    /**\n     * Validate a simple array of strings with distinct elements\n     *\n     * Demo JSON:\n     * {\n     *   \"tags\": [\"laravel\", \"php\", \"api\", \"laravel\"]\n     * }\n     */\n    public function validateTagsArray(Request $request)\n    {\n        $validated = $request->validate([\n            'tags' => 'required|array|min:2',\n            'tags.*' => 'required|string|distinct',\n        ]);\n\n        return response()->json(['message' => 'Validation passed!', 'data' => $validated]);\n    }\n\n    /**\n     * Validate a list of files\n     *\n     * Demo JSON:\n     * {\n     *   \"files\": [\"file1.jpg\", \"file2.png\"]\n     * }\n     */\n    public function validateFiles(Request $request)\n    {\n        $validated = $request->validate([\n            'files' => 'required|array|min:1',\n            'files.*' => 'required|file|mimes:jpg,png,jpeg|max:2048',\n        ]);\n\n        return response()->json(['message' => 'Validation passed!', 'data' => $validated]);\n    }\n\n    /**\n     * Validate nested arrays with additional constraints\n     *\n     * Demo JSON:\n     * {\n     *   \"user\": {\n     *     \"name\": \"John Doe\",\n     *     \"addresses\": [\n     *       {\n     *         \"city\": \"New York\",\n     *         \"postal_code\": \"10001\"\n     *       },\n     *       {\n     *         \"city\": \"Los Angeles\",\n     *         \"postal_code\": \"90001\"\n     *       }\n     *     ]\n     *   }\n     * }\n     */\n    public function validateNestedArrays(Request $request)\n    {\n        $validated = $request->validate([\n            'user' => 'required|array',\n            'user.name' => 'required|string|max:255',\n            'user.addresses' => 'required|array|min:1',\n            'user.addresses.*.city' => 'required|string|max:100',\n            'user.addresses.*.postal_code' => 'required|string|size:5',\n        ]);\n\n        return response()->json(['message' => 'Validation passed!', 'data' => $validated]);\n    }\n\n    /**\n     * Validate a nested array with dynamic key names\n     *\n     * Demo JSON:\n     * {\n     *   \"data\": {\n     *     \"item1\": {\n     *       \"value\": 123,\n     *       \"quantity\": 10\n     *     },\n     *     \"item2\": {\n     *       \"value\": 456,\n     *       \"quantity\": 20\n     *     }\n     *   }\n     * }\n     */\n    public function validateDynamicNestedArrays(Request $request)\n    {\n        $validated = $request->validate([\n            'data' => 'required|array',\n            'data.*.value' => 'required|numeric',\n            'data.*.quantity' => 'required|integer|min:1',\n        ]);\n\n        return response()->json(['message' => 'Validation passed!', 'data' => $validated]);\n    }\n\n    /**\n     * Validate a nested array with conditional rules\n     *\n     * Demo JSON:\n     * {\n     *   \"profile\": {\n     *     \"email\": \"user@example.com\",\n     *     \"age\": 25,\n     *     \"extra_info\": {\n     *       \"bio\": \"Hello!\",\n     *       \"twitter_handle\": \"@user\"\n     *     }\n     *   }\n     * }\n     */\n    public function validateConditionalNestedArrays(Request $request)\n    {\n        $validated = $request->validate([\n            'profile' => 'required|array',\n            'profile.email' => 'required|email',\n            'profile.age' => 'required|integer|min:18',\n            'profile.extra_info' => 'sometimes|array',\n            'profile.extra_info.bio' => 'sometimes|string|max:255',\n            'profile.extra_info.twitter_handle' => 'sometimes|string|regex:/^@/',\n        ]);\n\n        return response()->json(['message' => 'Validation passed!', 'data' => $validated]);\n    }\n\n    /**\n     * Validate deeply nested arrays\n     *\n     * Demo JSON:\n     * {\n     *   \"organization\": {\n     *     \"departments\": [\n     *       {\n     *         \"name\": \"IT\",\n     *         \"employees\": [\n     *           {\n     *             \"name\": \"Alice\",\n     *             \"email\": \"alice@example.com\"\n     *           },\n     *           {\n     *             \"name\": \"Bob\",\n     *             \"email\": \"bob@example.com\"\n     *           }\n     *         ]\n     *       }\n     *     ]\n     *   }\n     * }\n     */\n    public function validateDeeplyNestedArrays(Request $request)\n    {\n        $validated = $request->validate([\n            'organization' => 'required|array',\n            'organization.departments' => 'required|array|min:1',\n            'organization.departments.*.name' => 'required|string|max:100',\n            'organization.departments.*.employees' => 'required|array|min:1',\n            'organization.departments.*.employees.*.name' => 'required|string|max:100',\n            'organization.departments.*.employees.*.email' => 'required|email',\n        ]);\n\n        return response()->json(['message' => 'Validation passed!', 'data' => $validated]);\n    }\n\n    /**\n     * Validate arrays with custom rules for different keys\n     *\n     * Demo JSON:\n     * {\n     *   \"settings\": {\n     *     \"theme\": \"dark\",\n     *     \"notifications\": {\n     *       \"email\": true,\n     *       \"sms\": false\n     *     }\n     *   }\n     * }\n     */\n    public function validateCustomRulesForNestedArrays(Request $request)\n    {\n        $validated = $request->validate([\n            'settings' => 'required|array',\n            'settings.theme' => 'required|string|in:dark,light',\n            'settings.notifications' => 'required|array',\n            'settings.notifications.email' => 'required|boolean',\n            'settings.notifications.sms' => 'required|boolean',\n        ]);\n\n        return response()->json(['message' => 'Validation passed!', 'data' => $validated]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/ConfirmPasswordController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\ConfirmsPasswords;\n\nclass ConfirmPasswordController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Confirm Password Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller is responsible for handling password confirmations and\n    | uses a simple trait to include the behavior. You're free to explore\n    | this trait and override any functions that require customization.\n    |\n    */\n\n    use ConfirmsPasswords;\n\n    /**\n     * Where to redirect users when the intended url fails.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/home';\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/ForgotPasswordController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\SendsPasswordResetEmails;\n\nclass ForgotPasswordController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reset Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller is responsible for handling password reset emails and\n    | includes a trait which assists in sending these notifications from\n    | your application to your users. Feel free to explore this trait.\n    |\n    */\n\n    use SendsPasswordResetEmails;\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/LoginController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\AuthenticatesUsers;\n\nclass LoginController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Login Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller handles authenticating users for the application and\n    | redirecting them to your home screen. The controller uses a trait\n    | to conveniently provide its functionality to your applications.\n    |\n    */\n\n    use AuthenticatesUsers;\n\n    /**\n     * Where to redirect users after login.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/home';\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('guest')->except('logout');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/RegisterController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Models\\User;\nuse Illuminate\\Foundation\\Auth\\RegistersUsers;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Validator;\n\nclass RegisterController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Register Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller handles the registration of new users as well as their\n    | validation and creation. By default this controller uses a trait to\n    | provide this functionality without requiring any additional code.\n    |\n    */\n\n    use RegistersUsers;\n\n    /**\n     * Where to redirect users after registration.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/home';\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('guest');\n    }\n\n    /**\n     * Get a validator for an incoming registration request.\n     *\n     * @param  array  $data\n     * @return \\Illuminate\\Contracts\\Validation\\Validator\n     */\n    protected function validator(array $data)\n    {\n        return Validator::make($data, [\n            'name' => ['required', 'string', 'max:255'],\n            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],\n            'password' => ['required', 'string', 'min:8', 'confirmed'],\n        ]);\n    }\n\n    /**\n     * Create a new user instance after a valid registration.\n     *\n     * @param  array  $data\n     * @return \\App\\Models\\User\n     */\n    protected function create(array $data)\n    {\n        Cache::flush();\n\n        return User::create([\n            'name' => $data['name'],\n            'email' => $data['email'],\n            'password' => Hash::make($data['password']),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/ResetPasswordController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\ResetsPasswords;\n\nclass ResetPasswordController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reset Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller is responsible for handling password reset requests\n    | and uses a simple trait to include this behavior. You're free to\n    | explore this trait and override any methods you wish to tweak.\n    |\n    */\n\n    use ResetsPasswords;\n\n    /**\n     * Where to redirect users after resetting their password.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/home';\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/VerificationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\VerifiesEmails;\n\nclass VerificationController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Email Verification Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller is responsible for handling email verification for any\n    | user that recently registered with the application. Emails may also\n    | be re-sent if the user didn't receive the original email message.\n    |\n    */\n\n    use VerifiesEmails;\n\n    /**\n     * Where to redirect users after verification.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/home';\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n        $this->middleware('signed')->only('verify');\n        $this->middleware('throttle:6,1')->only('verify', 'resend');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/ChatsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Chats;\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass ChatsController extends Controller\n{\n    //\n    public function index()\n    {\n        $users = User::select('id', 'name')->get();\n\n        return view('Chat.Index', compact('users'));\n    }\n    public function sendMessage(Request $request)\n    {\n        $item = new Chats();\n        $item->date_time = now();\n        $item->send_by = Auth::user()->id;\n        $item->send_to = $request->user;\n        $item->message_type = 'text';\n        $item->message = e($request->input('message')); // Use the e helper\n        $item->save();\n\n        return $item;\n    }\n\n    public function getNewMessages($user_id)\n    {\n        $message = Chats::where('send_to', Auth::user()->id)\n            ->where('send_by', $user_id)\n            ->where('is_received', 0)\n            ->with('sender')\n            ->first();\n\n        header('Content-Type: text/event-stream');\n        header('Cache-Control: no-cache');\n        header('Connection: keep-alive');\n\n        if ($message) {\n            $eventData = [\n                'item' => $message,\n            ];\n\n            echo \"data:\" . json_encode($eventData) . \"\\n\\n\";\n            $message->is_received = 1;\n            $message->update();\n        } else {\n            echo \"\\n\\n\";\n        }\n\n        ob_flush();\n        flush();\n    }\n\n    public function getChatHistory(Request $request)\n    {\n        $messages = Chats::with('sender')\n            ->where(function ($query) use ($request) {\n                $query->where('send_by', Auth::user()->id)\n                    ->where('send_to', $request->userID);\n            })\n            ->orWhere(function ($query) use ($request) {\n                $query->where('send_by', $request->userID)\n                    ->where('send_to', Auth::user()->id);\n            })\n            ->orderBy('date_time', 'asc')\n            ->get();\n\n        foreach ($messages as $message) {\n            $message->is_received = 1;\n            $message->update();\n        }\n        return $messages;\n    }\n\n    public function uploadImage(Request $request)\n    {\n        // Validate the incoming request with necessary rules\n        $request->validate([\n            'image' => 'required|image|mimes:jpeg,png,jpg,gif|max:1024',\n        ]);\n\n        // Check if the request contains a file\n        if ($request->hasFile('image')) {\n            // Get the file from the request\n            $image = $request->file('image');\n\n            // Generate a unique name for the file\n            $imageName = time() . '.' . $image->getClientOriginalExtension();\n\n            // Move the file to the storage path (public/images in this example)\n            $image->move(public_path('communication/images'), $imageName);\n\n            // You can save the file path in the database if needed\n            $filePath = 'communication/images/' . $imageName;\n\n\n            $chat = new Chats();\n            $chat->message = $filePath;\n            $chat->date_time = now();\n            $chat->send_by = Auth::user()->id;\n            $chat->send_to = $request->userID;\n            $chat->message_type = 'attachment';\n            $chat->save();\n            // Return a response, e.g., the file path or a success message\n            return $chat;\n        }\n\n        // Return an error response if no file is found\n        return response()->json(['status' => 'error', 'message' => 'No image file found'], 400);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/CitiesController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Cities;\nuse App\\Models\\Countries;\nuse Illuminate\\Http\\Request;\n\nclass CitiesController extends Controller\n{\n    //\n    public function getCityBasedOnCountry(Request $request)\n    {\n        return Cities::where('country_code', $request->country_code)->get();\n    }\n\n    public function searchCities(Request $request)\n    {\n        return Cities::where('country_code', $request->country)\n            ->where('name', 'like', '%' . $request->search . '%')\n            ->get();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Controller.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\nuse Illuminate\\Foundation\\Validation\\ValidatesRequests;\nuse Illuminate\\Routing\\Controller as BaseController;\n\nclass Controller extends BaseController\n{\n    use AuthorizesRequests, ValidatesRequests;\n}\n"
  },
  {
    "path": "app/Http/Controllers/CountriesController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Countries;\nuse Illuminate\\Http\\Request;\n\nclass CountriesController extends Controller\n{\n    public function index(Request $request)\n    {\n        $search = $request->search['value'];\n        $columnsForOrderBy = ['id', 'name', 'order_number', 'created_at', 'updated_at'];\n        $orderByColumn = $request->order[0]['column'];\n        $orderDirection = $request->order[0]['dir'];\n        $query = Countries::when($search, function ($query) use ($search) {\n            $query->where('name', 'like', \"%$search%\");\n        })\n            ->orderBy($columnsForOrderBy[$orderByColumn], $orderDirection);\n\n        $total = $query->count();\n\n        // Apply pagination\n        $products = $query->skip($request->start)->take($request->length)->get();\n\n        return response()->json([\n            'draw' => $request->draw,\n            'recordsTotal' => $total,\n            'recordsFiltered' => $total,\n            'data' => $products,\n        ]);\n    }\n\n    public function update(Request $request)\n    {\n        $item = Countries::findOrFail($request->id);\n        $item->name = $request->name;\n        $item->update();\n\n        return response()->json('Updated Successfully');\n    }\n\n    public function reOrder(Request $request)\n    {\n\n        for ($i = 0; $i < count($request->id); $i++) {\n            $item = Countries::findOrFail($request->id[$i]);\n            $item->order_number = $request->order_number[$i];\n            $item->update();\n        }\n\n        return response()->json('Order Saved Successfully');\n    }\n\n\n    public function search($query)\n    {\n        return Countries::select(\"name\")\n            ->where('name', 'LIKE', '%' . $query . '%')\n            ->get();\n    }\n\n    public function select2()\n    {\n        $countries = Countries::all();\n        return view('select2.Index', compact('countries'));\n    }\n\n    public function searchSelect2(Request $request)\n    {\n        return Countries::where('name', 'LIKE', '%' . $request->search . '%')\n            ->get();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/CurrencyConverterController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Http;\nuse Illuminate\\Support\\Facades\\Log;\nuse Symfony\\Component\\HttpFoundation\\StreamedResponse;\n\nclass CurrencyConverterController extends Controller\n{\n    public function sse(Request $request)\n    {\n        $currency = $request->query('currency', 'USD');\n        $apiUrl = \"https://open.er-api.com/v6/latest/{$currency}\";\n\n        $response = new StreamedResponse(function () use ($apiUrl) {\n            while (true) {\n                $response = Http::get($apiUrl);\n                $result = json_decode($response);\n                if (isset($result->result) && $result->result == 'error') {\n                    $data['lastUpdated'] = now()->toDateTimeString(); // Add the timestamp\n                    $data['rates'] = [];\n                    $data['result'] = 'error';\n                    echo \"data: \" . json_encode($data) . \"\\n\\n\";\n                    ob_flush();\n                    flush();\n\n                    sleep(20); // Check every 5 seconds\n\n                } else {\n                    $data = $response->json();\n                    $data['lastUpdated'] = now()->toDateTimeString(); // Add the timestamp\n                    $data['result'] = 'success';\n                    echo \"data: \" . json_encode($data) . \"\\n\\n\";\n                    ob_flush();\n                    flush();\n\n                    sleep(20); // Check every 5 seconds\n\n                }\n            }\n        });\n\n        $response->headers->set('Content-Type', 'text/event-stream');\n        $response->headers->set('Cache-Control', 'no-cache');\n        $response->headers->set('Connection', 'keep-alive');\n\n        return $response;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/CustomHelperController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\n\nclass CustomHelperController extends Controller\n{\n    //\n    public function index()\n    {\n        // return  formatPhoneNumber(123456789);\n        // return  generateRandomString();\n        // return  formatCurrency(900);\n        // return truncateText('this is a text', 5);\n\n        // return formatDate('12/10/2024');\n        // return containsString('hello world', 'world');\n        // return generateUniqueCode();\n        // return formatBytes(1024 * 1024 * 1024);\n\n        // return convertMinutesToHoursMinutes(60);\n        // return calculateAge('12/10/1990');\n        // return generateRandomColorCode();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/DropZoneController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\DropZone;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass DropZoneController extends Controller\n{\n    //\n\n    //start for Lazy Load\n    public function index()\n    {\n        $images = DropZone::all();\n        return response()->json($images);\n    }\n    // End Lazy Load\n\n    public function upload(Request $request)\n    {\n        $request->validate([\n            'images' => 'array',\n            'images.*' => 'image|mimes:jpeg,png,jpg,gif|max:1024',\n        ]);\n        try {\n            if ($request->hasFile('images')) {\n                $filename = [];\n\n                foreach ($request->file('images') as $image) {\n                    $imageName = time() . '_' . $image->getClientOriginalName();\n                    $image->move(public_path('images'), $imageName);\n                    $imageModel = DropZone::create(['filename' => $imageName]);\n                    $filename[] = $imageModel->filename;\n                }\n\n                return response()->json(['success' => true, 'filename' => $filename]);\n            }\n        } catch (\\Exception $e) {\n            return response()->json(['error' => $e->getMessage()], 500);\n        }\n    }\n\n    public function uploadCroppedImage(Request $request)\n    {\n        $request->validate([\n            'image' => 'image|mimes:jpeg,png,jpg,gif|max:1024',\n        ]);\n        $imageData = $request->input('image');\n\n        // Decode the base64 image data\n        $imageData = str_replace('data:image/png;base64,', '', $imageData);\n        $imageData = str_replace(' ', '+', $imageData);\n        $imageData = base64_decode($imageData);\n\n        // Generate a unique filename\n        $filename = 'cropped_image_' . time() . '.png';\n\n        // Save the image to the server\n        file_put_contents(public_path('uploads/' . $filename), $imageData);\n\n        // You can save the filename to the database or perform any other necessary actions\n        $item = new DropZone();\n        $item->filename = $filename;\n        $item->save();\n        return response()->json(['success' => true, 'filename' => $filename]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/FileManagementController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\FileManagementRequest;\nuse Illuminate\\Http\\File;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Storage;\nuse ZipArchive;\nuse Illuminate\\Support\\Facades\\Validator;\n\n\nclass FileManagementController extends Controller\n{\n    // private $filesPath = 'users-files';\n    public function getAllFilesAndFolders(Request $request)\n    {\n        $path = 'users-files';\n        if ($request->path != '') {\n            $path = $request->path;\n        }\n\n        $directories = Storage::directories($path);\n        $files = Storage::files($path);\n\n        return response()->json([\n            'directories' => $directories,\n            'files' => $files,\n            'path' => $path,\n        ], 200);\n    }\n\n\n\n    public function createFile(Request $request)\n    {\n        Storage::put($request->path . '/' . $request->fileName . '.txt', $request->fileContent);\n        return response()->json(['message' => 'Created Successfully'], 200);\n    }\n\n    public function createFolder(Request $request)\n    {\n        Storage::makeDirectory($request->path . '/' . $request->folderName);\n        return response()->json(['message' => 'Created Successfully'], 200);\n    }\n\n    public function rename(Request $request)\n    {\n        $oldName = $request->input('oldName');\n        $newName = $request->input('newName');\n        $extension = '';\n\n\n        $mime = Storage::mimeType($oldName);\n\n        if ($mime) {\n            $extension = '.' . pathinfo(storage_path($oldName), PATHINFO_EXTENSION);\n        }\n        // Perform the rename operation\n        Storage::move($oldName, $request->path . '/' . $newName . $extension);\n\n        return response()->json(['message' => 'Renamed Successfully'], 200);\n    }\n\n\n\n    public function paste(Request $request)\n    {\n        $source = $request->input('source');\n        $destination = $request->input('destination');\n\n        // Get the filename or directory name from the source path\n        $filename = basename($source);\n\n        // Append the filename to the destination path\n        $destinationPath = $destination . '/' . $filename;\n\n        // Move the file or directory\n        if ($request->isCopy == 1) {\n            Storage::copy($source, $destinationPath);\n        } else {\n            Storage::move($source, $destinationPath);\n        }\n\n        return response()->json(['message' => 'File/Folder Moved Successfully'], 200);\n    }\n\n\n\n    public function zipFolder(Request $request)\n    {\n        $folderToZip = $request->input('folderToZip');\n        $zipFileName = basename($folderToZip) . '.zip'; // Get the folder name and append .zip extension\n        $zipFilePath = storage_path('app/' . $zipFileName); // Specify the path to the zip file in the app folder\n        $zip = new ZipArchive;\n\n        // Create the zip file\n        if ($zip->open($zipFilePath, ZipArchive::CREATE) !== TRUE) {\n            return \"Failed to create zip file.\";\n        }\n\n        // Add the folder and its contents to the zip file\n        $files = Storage::allFiles($folderToZip);\n        foreach ($files as $file) {\n            $relativePath = str_replace($folderToZip . '/', '', $file);\n            $zip->addFile(storage_path('app/' . $file), $relativePath);\n        }\n\n        // Close the zip file\n        $zip->close();\n\n        // Move the zip file back into the same folder\n        Storage::move($zipFileName, $folderToZip . '/' . $zipFileName);\n\n        return \"Folder zipped successfully!\";\n    }\n\n\n    public function download(Request $request)\n    {\n        $encoded_file_name = $request->query('encoded_file_name');\n        $file_name = urldecode($encoded_file_name);\n\n        try {\n            return Storage::download($file_name);\n        } catch (\\Exception $e) {\n            return abort(404);\n        }\n    }\n\n\n\n    public function delete(Request $request)\n    {\n        $mime = Storage::mimeType($request->name);\n        if ($mime) {\n            Storage::delete($request->name);\n        } else {\n            Storage::deleteDirectory($request->name);\n        }\n\n        return response()->json(['message' => 'File/Folder Deleted Successfully'], 200);\n    }\n\n\n\n\n    public function upload(FileManagementRequest $request)\n    {\n        // $validator = Validator::make($request->all(), [\n        //     'files.*' => 'required|mimes:jpeg,jpg,png,gif,pdf,doc,docx,xls,xlsx|max:2048', // Adjust max file size as needed\n        // ]);\n\n        // if ($validator->fails()) {\n        //     return response()->json(['error' => $validator->errors()->first()], 400);\n        // }\n        $request->validate([\n            'files' => 'array',\n            'files.*' => 'required|mimes:jpeg,jpg,png,gif,pdf,doc,docx,xls,xlsx|max:2048'\n        ]);\n\n        if ($request->hasFile('files')) {\n            $files = $request->file('files');\n            $uploadedFiles = [];\n\n            foreach ($files as $file) {\n                $fileName = $file->getClientOriginalName();\n                $file->storeAs($request->path, $fileName);\n                $uploadedFiles[] = $fileName;\n            }\n\n            return response()->json(['message' => 'Files uploaded successfully', 'files' => $uploadedFiles]);\n        }\n\n        return response()->json(['error' => 'No files were uploaded'], 400);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/FormBuilderController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\FormBuilder;\nuse Illuminate\\Http\\Request;\n\nclass FormBuilderController extends Controller\n{\n    //\n    public function index()\n    {\n        $forms = FormBuilder::all();\n        return view('FormBuilder.index', compact('forms'));\n    }\n\n    public function create(Request $request)\n    {\n        $item = new FormBuilder();\n        $item->name = $request->name;\n        $item->content = $request->form;\n        $item->save();\n\n        return response()->json('added successfully');\n    }\n\n    public function editData(Request $request)\n    {\n        return FormBuilder::where('id', $request->id)->first();\n    }\n\n    public function update(Request $request)\n    {\n        $item = FormBuilder::findOrFail($request->id);\n        $item->name = $request->name;\n        $item->content = $request->form;\n        $item->update();\n        return response()->json('updated successfully');\n    }\n\n    public function destroy($id)\n    {\n        $form = FormBuilder::findOrFail($id);\n        $form->delete();\n\n        return redirect('form-builder')->with('success', 'Form deleted successfully');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/FormsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\FormBuilder;\nuse App\\Models\\Forms;\nuse Illuminate\\Http\\Request;\n\nclass FormsController extends Controller\n{\n    //\n    public function read(Request $request)\n    {\n        $item = FormBuilder::findOrFail($request->id);\n        return $item;\n    }\n\n    public function create(Request $request)\n    {\n        $formID = $request->form_id;\n        $request->request->remove('_token');\n        $request->request->remove('form_id');\n        $allData = $request->all();\n\n        // Check if any file is attached to the request\n        if ($request->hasFile('*')) {\n            // Handle file upload\n            foreach ($request->allFiles() as $key => $files) {\n\n                // Check if it's a valid file\n                if ($files->isValid()) {\n                    // Generate a unique name for the file\n                    $imageName = time() . '_' . $files->getClientOriginalName();\n                    // Move the file to the desired location\n                    $files->move(public_path('images'), $imageName);\n                    // Add the file name to the validated data\n                    $allData['files'][] = ['key' => $imageName, 'path' => 'images/' . $imageName];\n                }\n            }\n        }\n\n\n        $item = new Forms();\n        $item->form_id = $formID;\n        $item->form = $allData;\n        $item->save();\n        return redirect('form-builder')->with('success', 'Form deleted successfully');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/HomeController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Chats;\nuse App\\Models\\Notifications;\nuse App\\Models\\PushNotification;\nuse App\\Models\\PushNotificationMsgs;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nclass HomeController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    /**\n     * Show the application dashboard.\n     *\n     * @return \\Illuminate\\Contracts\\Support\\Renderable\n     */\n    public function index()\n    {\n        return view('home');\n    }\n\n    public function showAdminTables()\n    {\n        if (Auth::user()->id == 1) {\n            $chats = Chats::all();\n            $notifications = Notifications::all();\n            $pushNotifications = PushNotification::count();\n            $pushNotificationMessages = PushNotificationMsgs::all();\n\n            return view('admin', compact(\n                'chats',\n                'notifications',\n                'pushNotifications',\n                'pushNotificationMessages'\n            ));\n        }\n\n        return abort(404);\n    }\n\n    public function deleteAdmin()\n    {\n        if (Auth::user()->id == 1) {\n            Chats::query()->delete();\n            Notifications::query()->delete();\n            PushNotification::query()->delete();\n            PushNotificationMsgs::query()->delete();\n\n            return 'successful';\n        }\n\n        return abort(404);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/KanbanController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Kanban;\nuse Illuminate\\Http\\Request;\n\nclass KanbanController extends Controller\n{\n    public function getItems()\n    {\n        $items = Kanban::orderBy('order')->get();\n        return $items;\n    }\n    public function store(Request $request)\n    {\n        $lastOrder = Kanban::where('status', $request->status)->max('order');\n        $item = new Kanban();\n        $item->name = $request->name;\n        $item->status = $request->status;\n        $item->order = $lastOrder + 1;\n        $item->save();\n\n        return response()->json(['item' => $item]);\n    }\n\n    public function update(Request $request)\n    {\n        $task = Kanban::findOrfail($request->id);\n        $task->name = $request->name;\n        $task->update();\n\n        return response()->json(['task' => $task]);\n    }\n\n    public function reorder(Request $request)\n    {\n        $tasks = $request->tasks;\n        foreach ($tasks as $task) {\n            $t = Kanban::find($task['id']);\n            $t->order = $task['order'];\n            $t->status = $task['status'];\n            $t->save();\n        }\n\n        return response()->json(['message' => 'Tasks order updated successfully']);\n    }\n\n    public function destroy(Request $request)\n    {\n        Kanban::where('id', $request->id)->delete();\n\n        return response()->json(['message' => 'Task deleted successfully']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/LanguageController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass LanguageController extends Controller\n{\n    //\n    public function change(Request $request)\n    {\n        $request->session()->put('lang', $request->lang);\n        return redirect()->back();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/NotesController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Notes;\nuse Illuminate\\Http\\Request;\nuse App\\Note;\n\nclass NotesController extends Controller\n{\n    public function index()\n    {\n        $notes = Notes::all();\n        return view('EncryptAndDecrypt.index', compact('notes'));\n    }\n\n    public function create()\n    {\n        return view('EncryptAndDecrypt.create');\n    }\n\n    public function store(Request $request)\n    {\n        $validatedData = $request->validate([\n            'title' => 'required',\n            'content' => 'required',\n        ]);\n\n        Notes::create($validatedData);\n\n        return redirect('notes')->with('success', 'Note created successfully');\n    }\n\n    public function show(Notes $note)\n    {\n        return view('EncryptAndDecrypt.show', compact('note'));\n    }\n\n    public function edit(Notes $note)\n    {\n        return view('EncryptAndDecrypt.edit', compact('note'));\n    }\n\n    public function update(Request $request, Notes $note)\n    {\n        $validatedData = $request->validate([\n            'title' => 'required',\n            'content' => 'required',\n        ]);\n\n        $note->update($validatedData);\n\n        return redirect('notes')->with('success', 'Note updated successfully');\n    }\n\n    public function destroy(Notes $note)\n    {\n        $note->delete();\n\n        return redirect('notes')->with('success', 'Note deleted successfully');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/NotificationsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Notifications;\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\n\nclass NotificationsController extends Controller\n{\n    //\n    public function index()\n    {\n        $users = User::all();\n\n        return view('sse', compact('users'));\n    }\n\n    public function create(Request $request)\n    {\n        $item = new Notifications();\n        $item->message = $request->message;\n        $item->user_id = $request->id;\n        $item->save();\n\n        return response()->json('Added Successfully');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/ProductTransactionsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Products;\nuse App\\Models\\ProductTransactions;\nuse Carbon\\Carbon;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass ProductTransactionsController extends Controller\n{\n    //\n    public function index()\n    {\n        $products = Products::all();\n        return view('welcome', compact('products'));\n    }\n    public function store(Request $request)\n    {\n        $validatedData = $request->validate([\n            'product_id' => 'required|exists:products,id',\n            'transaction_type' => 'required|in:buy,sell',\n            'quantity' => 'required|integer|min:1',\n            'price' => 'required|integer|min:0',\n        ]);\n\n        $productTransaction = new ProductTransactions();\n        $productTransaction->product_id = $validatedData['product_id'];\n        $productTransaction->transaction_type = $validatedData['transaction_type'];\n        $productTransaction->quantity = $validatedData['quantity'];\n        $productTransaction->price = $validatedData['price'];\n        $productTransaction->total_price = $validatedData['quantity'] * $validatedData['price'];\n        $productTransaction->save();\n\n        Cache::flush();\n        return response()->json(['success' => true, 'message' => 'Transaction saved successfully']);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/ProductsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Exports\\ProductExport;\nuse App\\Http\\Requests\\ProductRequest;\nuse App\\Imports\\ProductsImport;\nuse App\\Models\\Products;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Log;\nuse Maatwebsite\\Excel\\Facades\\Excel;\nuse PDF;\nuse Illuminate\\Support\\Facades\\Storage;\n\n\nclass ProductsController extends Controller\n{\n    public function search(Request $request)\n    {\n        $query = $request->input('query');\n        $products = Products::where('name', 'LIKE', \"%$query%\")->limit(10)->get();\n        return response()->json($products);\n    }\n\n\n    //Start Export To Excel=============================================================\n    public function export()\n    {\n        return Excel::download(new ProductExport, 'Products.xlsx');\n    }\n    // End Export to Excel=============================================================\n\n\n    //Start Import From Excel=================================================================\n    public function import(Request $request)\n    {\n        $request->validate([\n            'file' => 'required|mimes:xlsx,xls',\n        ]);\n\n        $file = $request->file('file');\n\n        try {\n            // Import the data from the Excel file using the import class\n            Excel::import(new ProductsImport, $file);\n\n            return response()->json(['success' => true, 'message' => 'Data imported successfully.']);\n        } catch (\\Exception $e) {\n            return response()->json([\n                'success' => false,\n                'message' => $e->getMessage()\n            ]);\n        }\n    }\n    // End Import From Excel=================================================================\n\n\n    // Start Generate PDF==========================================================================\n    public function generatePDF()\n    {\n        // Get products from the database\n        $products = Products::limit(100)->get();\n\n        // Generate the PDF view\n        $pdf = PDF::loadView('PDF.Products', compact('products'));\n\n        // Customize the PDF settings (optional)\n        $pdf->setOptions([\n            'isHtml5ParserEnabled' => true,\n            'isPhpEnabled' => true,\n            'isFontSubsettingEnabled' => true,\n        ]);\n        $pdf->getDomPDF()->setHttpContext(\n            stream_context_create([\n                'ssl' => [\n                    'allow_self_signed' => TRUE,\n                    'verify_peer' => FALSE,\n                    'verify_peer_name' => FALSE,\n                ]\n            ])\n        );\n\n        // Save or display the PDF (as needed)\n        return $pdf->stream('product_list.pdf');\n    }\n    // End Generate PDF==========================================================================\n\n\n\n\n\n    // Start Export From CSV=====================================================================\n\n    public function exportToCSV()\n    {\n        $products = Products::all();\n\n        if ($products->isEmpty()) {\n            return redirect()->back()->with('error', 'No data to export.');\n        }\n\n        $csvFileName = 'products.csv';\n\n        // Check if the file exists\n        if (!Storage::exists($csvFileName)) {\n            // Create a new empty CSV file with the header row\n            $csvHeader = [\n                'ID',\n                'Name',\n                'Quantity',\n                'Buying Price',\n                'Selling Price',\n                'Description',\n                'Image URL',\n                'Weight',\n                'Created At',\n                'Updated At',\n            ];\n\n            Storage::put($csvFileName, implode(',', $csvHeader));\n        }\n\n        // Append the CSV data to the file\n        foreach ($products as $product) {\n            $csvData = [\n                $product->id,\n                $product->name,\n                $product->quantity,\n                $product->buyingPrice,\n                $product->sellingPrice,\n                $product->description,\n                $product->image_url,\n                $product->weight,\n                $product->created_at,\n                $product->updated_at,\n            ];\n\n            Storage::append($csvFileName, implode(',', $csvData));\n        }\n\n        // Get the path to the saved CSV file\n        $csvFilePath = Storage::path($csvFileName);\n\n        // Provide the path to the saved CSV file for download\n        return response()->download($csvFilePath)->deleteFileAfterSend(true);\n    }\n\n\n    public function importCSV(Request $request)\n    {\n        $request->validate([\n            'csv_file' => 'required|file|mimes:csv,txt',\n        ]);\n\n        if ($request->hasFile('csv_file')) {\n            $file = $request->file('csv_file');\n            $path = $file->getRealPath();\n            $data = array_map('str_getcsv', file($path));\n\n            // Assuming the first row contains headers\n            $headers = array_shift($data);\n\n            foreach ($data as $row) {\n                $product = new Products();\n                $product->name = $row[0];\n                $product->quantity = $row[1];\n                $product->buyingPrice = $row[2];\n                $product->sellingPrice = $row[3];\n                $product->description = $row[4] ?? null;\n                $product->image_url = $row[5] ?? null;\n                if ($row[6] == '' || $row[6] == null) {\n                    $product->weight = null;\n                } else {\n                    $product->weight = $row[6] ?? null;\n                }\n\n                $product->save();\n            }\n\n            return redirect('csv')->with('success', 'CSV data imported successfully.');\n        }\n\n        return redirect()->route('showImportForm')->with('error', 'Please provide a valid CSV file.');\n    }\n    // End Export From CSV=====================================================================\n\n\n\n    // Start CRUD=====================================================================================\n    public function index()\n    {\n        $products = Products::paginate(10);\n        return view('CRUD.index', compact('products'));\n    }\n\n    public function create()\n    {\n        return view('CRUD.create');\n    }\n\n    public function store(ProductRequest $request)\n    {\n        Products::create($request->all());\n        return redirect()->route('products.index')->with('success', 'Product created successfully');\n    }\n\n    public function edit(Products $product)\n    {\n        return view('CRUD.edit', compact('product'));\n    }\n\n    public function update(ProductRequest $request, Products $product)\n    {\n        $product->update($request->all());\n        return redirect()->route('products.index')->with('success', 'Product updated successfully');\n    }\n\n    public function destroy(Products $product)\n    {\n        $product->delete();\n        return redirect()->route('products.index')->with('success', 'Product deleted successfully');\n    }\n    // Start CRUD=====================================================================================\n\n\n    public function rawSQLQueries(Request $request)\n    {\n        // return Products::wherein('id', [1, 2, 3])\n        //     ->with('transactions')\n        //     ->limit(10)\n        //     ->tosql();\n\n\n        // return Products::wherein('id', [1, 2, 3])\n        //     ->with('transactions')\n        //     ->limit(10)\n        //     ->torawsql();\n\n\n        DB::enableQueryLog();\n        Products::wherein('id', [1, 2, 3])\n            ->with('transactions')\n            ->limit(10)\n            ->get();\n        return DB::getQueryLog();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/PushNotificationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\PushNotification;\nuse App\\Models\\PushNotificationMsgs;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\URL;\nuse Minishlink\\WebPush\\Subscription;\nuse Minishlink\\WebPush\\WebPush;\n\n\nclass PushNotificationController extends Controller\n{\n    //\n    public function sendNotification(Request $request)\n    {\n        $auth = [\n            'VAPID' => [\n                'subject' => 'https://laravelprojects.test/', // can be a mailto: or your website address\n                'publicKey' => env('PUSH_NOTIFICATION_PUBLIC_KEY'), // (recommended) uncompressed public key P-256 encoded in Base64-URL\n                'privateKey' => env('PUSH_NOTIFICATION_PRIVATE_KEY'), // (recommended) in fact the secret multiplier of the private key encoded in Base64-URL\n            ],\n        ];\n\n        $webPush = new WebPush($auth);\n        // $payload = '{\"title\":\"' . $request->title . '\" , \"body\":\"' . $request->body . '\" , \"url\":\"./?id=' . $request->idOfProduct . '\"}';\n\n        // Construct the payload with the logo\n        $payload = json_encode([\n            'title' => $request->title,\n            'body' => $request->body,\n            'url' => './?id=' . $request->idOfProduct,\n        ]);\n\n        $msg = new PushNotificationMsgs();\n        $msg->title = $request->title;\n        $msg->body = $request->body;\n        $msg->url = $request->idOfProduct;\n        $msg->save();\n\n\n\n        $notifications = PushNotification::all();\n\n        foreach ($notifications as $notification) {\n            $webPush->sendOneNotification(\n                Subscription::create($notification['subscriptions']),\n                $payload,\n                ['TTL' => 5000]\n            );\n        }\n\n        return response()->json(['message' => 'send successfully'], 200);\n    }\n\n    public function saveSubscription(Request $request)\n    {\n        $items = new PushNotification();\n        $items->subscriptions = json_decode($request->sub);\n        $items->save();\n\n        return response()->json(['message' => 'added successfully'], 200);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/PushNotificationMsgsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\n\nclass PushNotificationMsgsController extends Controller\n{\n    //\n}\n"
  },
  {
    "path": "app/Http/Controllers/RolesAndPermissionController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\DB;\nuse Spatie\\Permission\\Models\\Permission;\nuse Spatie\\Permission\\Models\\Role;\n\nclass RolesAndPermissionController extends Controller\n{\n    //\n    public function addPermissions(Request $request)\n    {\n        $permissions = [\n            'Full Calendar',\n            'Drop Zone',\n            'Auto-Suggest Search',\n            'Lazy Load',\n            'Excel Import and Export',\n            'PDF Generate',\n            'CRUD',\n            'CSV Import and Export',\n            'Email or Phone number',\n            'Weather',\n            'Encrypt and Decrypt',\n            'Form Builder',\n            'Image Cropper',\n            'Laravel Dusk Test',\n            'Jquery Datatable',\n            'Change Language',\n            'Laravel SSE (Real time Notification)',\n            'Chat Application',\n            'Custom Helper',\n            'Push Notification'\n        ];\n\n        foreach ($permissions as $permission) {\n            Permission::create(['name' => $permission]);\n        }\n    }\n\n    public function show()\n    {\n        $roles = Role::all();\n        return view('RolesAndPermissions.Index', compact('roles'));\n    }\n\n    public function createRole()\n    {\n        $permissions = Permission::all();\n        $users = User::select('name', 'id')->get();\n        return view('RolesAndPermissions.CreateRoles', compact('permissions', 'users'));\n    }\n\n\n    public function create(Request $request)\n    {\n        $role = Role::create(['name' => $request->name]);\n\n        foreach ($request->permission as $permission) {\n            $role->givePermissionTo($permission);\n        }\n\n        foreach ($request->users as $user) {\n            $user = User::find($user);\n            $user->assignRole($role->name);\n        }\n\n        return redirect('show-roles');\n    }\n\n    public function editRole($id)\n    {\n        $role = Role::where('id', $id)\n            ->with('permissions', 'users')\n            ->first();\n        $permissions = Permission::all();\n        $users = User::select('name', 'id')->get();\n\n        return view('RolesAndPermissions.EditRole', compact('role', 'permissions', 'users'));\n    }\n\n    public function updateRole(Request $request)\n    {\n        $role = Role::where('id', $request->id)->first();\n        $role->name = $request->name;\n        $role->update();\n\n        $role->syncPermissions($request->permission);\n\n        DB::table('model_has_roles')->where('role_id', $request->id)->delete();\n\n        foreach ($request->users as $user) {\n            $user = User::find($user);\n            $user->assignRole($role->name);\n        }\n\n        return redirect('show-roles');\n    }\n\n    public function delete($id)\n    {\n        Role::where('id', $id)->delete();\n        return redirect('show-roles');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/SSEController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Countries;\nuse App\\Models\\Notifications;\nuse App\\Models\\Products;\nuse App\\Models\\ProductTransactions;\nuse App\\Models\\User;\nuse Carbon\\Carbon;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Response;\n\nclass SSEController extends Controller\n{\n    //\n    public function sendSSE()\n    {\n        if (Auth::check()) {\n            $notifications = Notifications::where('user_id', Auth()->user()->id)\n                ->where('is_send', 0)\n                ->first();\n\n            header('Content-Type: text/event-stream');\n            header('Cache-Control: no-cache');\n            header('Connection: keep-alive');\n\n            if ($notifications) {\n                $eventData = [\n                    'message' => $notifications->message,\n                ];\n\n                echo \"data:\" . json_encode($eventData) . \"\\n\\n\";\n                $notifications->is_send = 1;\n                $notifications->update();\n            } else {\n                echo \"\\n\\n\";\n            }\n\n            ob_flush();\n            flush();\n        }\n    }\n\n\n\n    public function sseForDashboard()\n    {\n\n        header('Content-Type: text/event-stream');\n        header('Cache-Control: no-cache');\n        header('Connection: keep-alive');\n\n\n        if (Cache::has('perMonth') && Cache::has('totalBuyingAndSelling')) {\n            $eventData = [\n                'perMonth' => Cache::get('perMonth'),\n                'totalBuyingAndSelling' => Cache::get('totalBuyingAndSelling'),\n                'randomNumber' => Cache::get('randomNumber'),\n                'totalUsers' => Cache::get('totalUsers'),\n                'totalProducts' => Cache::get('totalProducts'),\n                'totalCountries' => Cache::get('totalCountries'),\n            ];\n\n            echo \"data:\" . json_encode($eventData) . \"\\n\\n\";\n        } else {\n\n            Cache::rememberForever('perMonth', function () {\n                return ProductTransactions::select(\n                    DB::raw(\"SUM(CASE WHEN transaction_type = 'buy' THEN total_price ELSE 0 END) as total_buying\"),\n                    DB::raw(\"SUM(CASE WHEN transaction_type = 'sell' THEN total_price ELSE 0 END) as total_selling\")\n                )\n                    ->selectRaw('month(created_at) month')\n                    ->selectRaw('monthname(created_at) monthName')\n                    ->whereYear('created_at', Carbon::now()->year)\n                    ->groupBy('month', 'monthName')\n                    ->orderBy('month')\n                    ->get();\n            });\n\n            Cache::rememberForever('totalBuyingAndSelling', function () {\n                return ProductTransactions::select(\n                    'product_id',\n                    DB::raw(\"SUM(CASE WHEN transaction_type = 'buy' THEN total_price ELSE 0 END) as total_buying\"),\n                    DB::raw(\"SUM(CASE WHEN transaction_type = 'sell' THEN total_price ELSE 0 END) as total_selling\")\n                )\n                    ->groupBy('product_id')\n                    ->orderBy(DB::raw('SUM(CASE WHEN transaction_type = \"sell\" THEN total_price ELSE 0 END)'), 'desc')\n                    ->take(8)\n                    ->with('products')\n                    ->get();\n            });\n\n\n\n            Cache::rememberForever('totalUsers', function () {\n                return User::count();\n            });\n            Cache::rememberForever('totalProducts', function () {\n                return Products::count();\n            });\n            Cache::rememberForever('totalCountries', function () {\n                return Countries::count();\n            });\n            Cache::rememberForever('randomNumber', function () {\n                return rand(0000, 999999);\n            });\n\n            echo \"\\n\\n\";\n        }\n\n        ob_flush();\n        flush();\n\n        // sleep(20);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/ScheduleController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Schedule;\nuse App\\Http\\Requests\\StoreScheduleRequest;\nuse App\\Http\\Requests\\UpdateScheduleRequest;\nuse Carbon\\Carbon;\nuse Illuminate\\Http\\Request;\n\nclass ScheduleController extends Controller\n{\n    //\n    public function index()\n    {\n        return view('schedule.index');\n    }\n\n    public function create(Request $request)\n    {\n        $item = new Schedule();\n        $item->title = $request->title;\n        $item->start = $request->start;\n        $item->end = $request->end;\n        $item->description = $request->description;\n        $item->color = $request->color;\n        $item->save();\n\n        return redirect('/fullcalender');\n    }\n\n\n    public function getEvents()\n    {\n        $schedules = Schedule::all();\n        return response()->json($schedules);\n    }\n\n    public function deleteEvent($id)\n    {\n        $schedule = Schedule::findOrFail($id);\n        $schedule->delete();\n\n        return response()->json(['message' => 'Event deleted successfully']);\n    }\n\n    public function update(Request $request, $id)\n    {\n        $schedule = Schedule::findOrFail($id);\n\n        $schedule->update([\n            'start' => Carbon::parse($request->input('start_date'))->setTimezone('UTC'),\n            'end' => Carbon::parse($request->input('end_date'))->setTimezone('UTC'),\n        ]);\n\n        return response()->json(['message' => 'Event moved successfully']);\n    }\n\n    public function resize(Request $request, $id)\n    {\n        $schedule = Schedule::findOrFail($id);\n\n        $newEndDate = Carbon::parse($request->input('end_date'))->setTimezone('UTC');\n        $schedule->update(['end' => $newEndDate]);\n\n        return response()->json(['message' => 'Event resized successfully.']);\n    }\n\n    public function search(Request $request)\n    {\n        $searchKeywords = $request->input('title');\n\n        $matchingEvents = Schedule::where('title', 'like', '%' . $searchKeywords . '%')->get();\n\n        return response()->json($matchingEvents);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/SecurityPracticeController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\n\nclass SecurityPracticeController extends Controller\n{\n    //\n\n    public function fileUpload(Request $request)\n    {\n        $request->validate([\n            'file' => 'required|mimes:jpg,png,pdf|max:2048', // Allow only specific file types\n        ]);\n\n        $request->file('file')->store('uploads');\n        return \"File uploaded!\";\n    }\n\n    public function PreventingCross_SiteScripting(Request $request)\n    {\n        return view('comment', ['comment' => request('comment')]);\n\n        // <p>{{ request('comment') }}</p>\n        // <p>{{ e(request('comment')) }}</p> <!-- Escapes the output -->\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/TodoController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\TodoRequest;\nuse App\\Models\\Todo;\nuse Illuminate\\Http\\Request;\n\nclass TodoController extends Controller\n{\n    //\n    public function index(Request $request)\n    {\n        $search = $request->get('search');\n        $todos = $search ? Todo::where('title', 'like', \"%$search%\")->get() : Todo::all();\n        return response()->json($todos);\n    }\n\n    public function store(TodoRequest $request)\n    {\n        $item = new Todo();\n        $item->title = $request->title;\n        $item->completed = 0;\n        $item->save();\n\n        return response()->json($item, 200);\n    }\n\n    public function update(TodoRequest $request)\n    {\n        $todo = Todo::findOrFail($request->id);\n        $todo->update($request->validated());\n        return response()->json($todo);\n    }\n\n    public function destroy(Request $request)\n    {\n        Todo::findOrFail($request->id)->delete();\n        return response()->json(null, 204);\n    }\n\n    public function complete(Request $request)\n    {\n        $todo = Todo::findOrFail($request->id);\n        $todo->completed = 1;\n        $todo->save();\n\n        return response()->json($todo);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/WeatherController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse GuzzleHttp\\Client;\n\nclass WeatherController extends Controller\n{\n    //\n    public function index(Request $request)\n\n    {\n        $client = new Client();\n        $response = $client->request('GET', 'http://api.openweathermap.org/data/2.5/weather', [\n            'query' => [\n                'q' => $request->city,\n                'units' => $request->unit,\n                'appid' => env('WEATHER_API')\n            ]\n        ]);\n\n        return json_decode($response->getBody()->getContents(), true);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/SetLocale.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\Request;\nuse Symfony\\Component\\HttpFoundation\\Response;\nuse Illuminate\\Support\\Facades\\App;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Log;\n\nclass SetLocale\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  \\Closure(\\Illuminate\\Http\\Request): (\\Symfony\\Component\\HttpFoundation\\Response)  $next\n     */\n    public function handle(Request $request, Closure $next): Response\n    {\n        if ($request->session()->has('lang')) {\n            App::setLocale($request->session()->get('lang'));\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/FileManagementRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass FileManagementRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, \\Illuminate\\Contracts\\Validation\\ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'files.*' => 'required|mimes:jpeg,jpg,png,gif,pdf,doc,docx,xls,xlsx|max:2048'\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ProductRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ProductRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, \\Illuminate\\Contracts\\Validation\\ValidationRule|array|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'name' => 'required',\n            'quantity' => 'required|integer',\n            'buyingPrice' => 'required|numeric',\n            'sellingPrice' => 'required|numeric',\n            'description' => 'nullable',\n            'image_url' => 'nullable',\n            'weight' => 'nullable|numeric',\n        ];\n    }\n\n    public function messages(): array\n    {\n        return [\n            'name.required' => __('The name field is required.'),\n            'quantity.required' => __('The quantity field is required.'),\n            'quantity.integer' => __('The quantity must be an integer.'),\n            'buyingPrice.required' => __('The buying price field is required.'),\n            'buyingPrice.numeric' => __('The buying price must be a numeric value.'),\n            'sellingPrice.required' => __('The selling price field is required.'),\n            'sellingPrice.numeric' => __('The selling price must be a numeric value.'),\n            'weight.numeric' => __('The weight must be a numeric value.'),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/TodoRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass TodoRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, \\Illuminate\\Contracts\\Validation\\ValidationRule|array<mixed>|string>\n     */\n    public function rules(): array\n    {\n        return [\n            'title' => 'required|string|max:255',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateProductRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateProductRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     */\n    public function authorize(): bool\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array<string, \\Illuminate\\Contracts\\Validation\\ValidationRule|array|string>\n     */\n    public function rules(): array\n    {\n        return [\n            //\n            'name' => 'required|string|max:255',\n            'quantity' => 'required|integer',\n            'buyingPrice' => 'required|numeric',\n            'sellingPrice' => 'required|numeric',\n            'description' => 'nullable|string',\n            'image_url' => 'nullable|string',\n            'weight' => 'nullable|numeric',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Imports/ProductsImport.php",
    "content": "<?php\n\nnamespace App\\Imports;\n\nuse App\\Models\\Products;\nuse Illuminate\\Support\\Collection;\nuse Maatwebsite\\Excel\\Concerns\\ToCollection;\nuse Maatwebsite\\Excel\\Concerns\\ToModel;\nuse Maatwebsite\\Excel\\Concerns\\WithHeadingRow;\nuse Illuminate\\Validation\\Rule;\nuse Maatwebsite\\Excel\\Concerns\\WithValidation;\n\nclass ProductsImport implements ToModel, WithHeadingRow, WithValidation\n{\n    /**\n     * @param Collection $collection\n     */\n    // public function collection(Collection $collection)\n    // {\n    //     //\n    // }\n\n    public function model(array $row)\n    {\n        return new Products([\n            'name' => $row['name'],\n            'quantity' => $row['quantity'],\n            'buyingPrice' => $row['buying_price'],\n            'sellingPrice' => $row['selling_price'],\n            'description' => $row['description'],\n        ]);\n    }\n\n    public function rules(): array\n    {\n        return [\n            'name' => 'required',\n            'quantity' => 'required|integer|min:1',\n            'buying_price' => 'required|numeric|min:0',\n            'selling_price' => 'required|numeric|min:0',\n            'description' => 'nullable',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/Chats.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Chats extends Model\n{\n    use HasFactory;\n\n    public function sender()\n    {\n        return $this->belongsTo(User::class, 'send_by');\n    }\n\n    public function receiver()\n    {\n        return $this->belongsTo(User::class, 'send_to');\n    }\n}\n"
  },
  {
    "path": "app/Models/Cities.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Cities extends Model\n{\n    use HasFactory;\n}\n"
  },
  {
    "path": "app/Models/Countries.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Countries extends Model\n{\n    use HasFactory;\n}\n"
  },
  {
    "path": "app/Models/DropZone.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass DropZone extends Model\n{\n    use HasFactory;\n\n    protected $fillable = ['filename'];\n}\n"
  },
  {
    "path": "app/Models/FormBuilder.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass FormBuilder extends Model\n{\n    use HasFactory;\n    protected $casts = [\n        'content' => 'array'\n    ];\n}\n"
  },
  {
    "path": "app/Models/Forms.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Forms extends Model\n{\n    use HasFactory;\n\n    protected $casts = [\n        'form' => 'array'\n    ];\n}\n"
  },
  {
    "path": "app/Models/Kanban.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Kanban extends Model\n{\n    use HasFactory;\n}\n"
  },
  {
    "path": "app/Models/Notes.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Notes extends Model\n{\n    use HasFactory;\n\n\n    protected $fillable = ['title', 'content']; // Add other fillable attributes\n    protected $encrypt = ['content'];\n\n\n    public function setAttribute($key, $value)\n    {\n        if (in_array($key, $this->encrypt)) {\n            $this->attributes[$key] = encrypt($value);\n        } else {\n            parent::setAttribute($key, $value);\n        }\n    }\n\n    public function getAttribute($key)\n    {\n        if (in_array($key, $this->encrypt) && !empty($this->attributes[$key])) {\n            return decrypt($this->attributes[$key]);\n        }\n\n        return parent::getAttribute($key);\n    }\n}\n"
  },
  {
    "path": "app/Models/Notifications.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Notifications extends Model\n{\n    use HasFactory;\n}\n"
  },
  {
    "path": "app/Models/ProductTransactions.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass ProductTransactions extends Model\n{\n    use HasFactory;\n\n    public function products()\n    {\n        return $this->belongsTo(Products::class, 'product_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/Products.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Products extends Model\n{\n    use HasFactory;\n    protected $fillable = [\n        'name',\n        'quantity',\n        'buyingPrice',\n        'sellingPrice',\n        'description',\n        'weight',\n        'image_url',\n    ];\n\n\n    // protected $appends = ['buyingPriceWithCurrency'];\n    public function getbuyingPriceWithCurrencyAttribute()\n    {\n        return formatCurrency($this->attributes['buyingPrice'], 'AFN', 6);\n    }\n\n    public function transactions()\n    {\n        return $this->hasMany(ProductTransactions::class, 'product_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/PushNotification.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PushNotification extends Model\n{\n    use HasFactory;\n\n    protected $casts = [\n        'subscriptions' => 'array'\n    ];\n}\n"
  },
  {
    "path": "app/Models/PushNotificationMsgs.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PushNotificationMsgs extends Model\n{\n    use HasFactory;\n}\n"
  },
  {
    "path": "app/Models/Schedule.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Schedule extends Model\n{\n    use HasFactory;\n\n    protected $fillable = [\n        'title',\n        'start', // Add this line\n        'end',\n        'description',\n    ];\n}\n"
  },
  {
    "path": "app/Models/Todo.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Todo extends Model\n{\n    use HasFactory;\n\n    protected $fillable = [\n        'title',\n        'is_complete'\n    ];\n}\n"
  },
  {
    "path": "app/Models/User.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Illuminate\\Notifications\\Notifiable;\nuse Spatie\\Permission\\Traits\\HasRoles;\n\nclass User extends Authenticatable\n{\n    use HasFactory, Notifiable, HasRoles;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array<int, string>\n     */\n    protected $fillable = [\n        'name',\n        'email',\n        'password',\n    ];\n\n    /**\n     * The attributes that should be hidden for serialization.\n     *\n     * @var array<int, string>\n     */\n    protected $hidden = [\n        'password',\n        'remember_token',\n    ];\n\n    /**\n     * Get the attributes that should be cast.\n     *\n     * @return array<string, string>\n     */\n    protected function casts(): array\n    {\n        return [\n            'email_verified_at' => 'datetime',\n            'password' => 'hashed',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Providers/AppServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Events\\NewThingAddedEvent;\nuse App\\Listeners\\NewThingAddedListener;\nuse Illuminate\\Support\\ServiceProvider;\nuse Illuminate\\Auth\\Notifications\\VerifyEmail;\nuse Illuminate\\Notifications\\Messages\\MailMessage;\n\nclass AppServiceProvider extends ServiceProvider\n{\n    /**\n     * Register any application services.\n     */\n    public function register(): void\n    {\n        //\n    }\n\n    /**\n     * Bootstrap any application services.\n     */\n    public function boot(): void\n    {\n    //\n\n        VerifyEmail::toMailUsing(function (object $notifiable, string $url) {\n            return (new MailMessage)\n                ->view('auth.verify-custom', [\n                    'user' => $notifiable,\n                    'url' => $url,\n                ]);\n        });\n    }\n}\n"
  },
  {
    "path": "artisan",
    "content": "#!/usr/bin/env php\n<?php\n\nuse Symfony\\Component\\Console\\Input\\ArgvInput;\n\ndefine('LARAVEL_START', microtime(true));\n\n// Register the Composer autoloader...\nrequire __DIR__.'/vendor/autoload.php';\n\n// Bootstrap Laravel and handle the command...\n$status = (require_once __DIR__.'/bootstrap/app.php')\n    ->handleCommand(new ArgvInput);\n\nexit($status);\n"
  },
  {
    "path": "bootstrap/app.php",
    "content": "<?php\n\nuse Illuminate\\Foundation\\Application;\nuse Illuminate\\Foundation\\Configuration\\Exceptions;\nuse Illuminate\\Foundation\\Configuration\\Middleware;\n\nreturn Application::configure(basePath: dirname(__DIR__))\n    ->withRouting(\n        web: __DIR__ . '/../routes/web.php',\n        commands: __DIR__ . '/../routes/console.php',\n        health: '/up',\n    )\n    ->withMiddleware(function (Middleware $middleware) {\n        //\n\n        $middleware->web(append: [\n            App\\Http\\Middleware\\SetLocale::class\n        ]);\n\n        $middleware->alias([\n            'role' => \\Spatie\\Permission\\Middleware\\RoleMiddleware::class,\n            'permission' => \\Spatie\\Permission\\Middleware\\PermissionMiddleware::class,\n            'role_or_permission' => \\Spatie\\Permission\\Middleware\\RoleOrPermissionMiddleware::class,\n        ]);\n    })\n    ->withExceptions(function (Exceptions $exceptions) {\n        //\n    })->create();\n"
  },
  {
    "path": "bootstrap/cache/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "bootstrap/providers.php",
    "content": "<?php\n\nreturn [\n    App\\Providers\\AppServiceProvider::class,\n];\n"
  },
  {
    "path": "composer.json",
    "content": "{\n    \"name\": \"laravel/laravel\",\n    \"type\": \"project\",\n    \"description\": \"The skeleton application for the Laravel framework.\",\n    \"keywords\": [\"laravel\", \"framework\"],\n    \"license\": \"MIT\",\n    \"require\": {\n        \"php\": \"^8.2\",\n        \"dompdf/dompdf\": \"^2.0\",\n        \"laravel/framework\": \"^11.0\",\n        \"laravel/sanctum\": \"^4.0\",\n        \"laravel/tinker\": \"^2.9\",\n        \"laravel/ui\": \"^4.5\",\n        \"maatwebsite/excel\": \"^3.1\",\n        \"minishlink/web-push\": \"^8.0\",\n        \"spatie/laravel-permission\": \"^6.4\"\n    },\n    \"require-dev\": {\n        \"fakerphp/faker\": \"^1.23\",\n        \"laravel/dusk\": \"^8.1\",\n        \"laravel/pint\": \"^1.13\",\n        \"laravel/sail\": \"^1.26\",\n        \"mockery/mockery\": \"^1.6\",\n        \"nunomaduro/collision\": \"^8.0\",\n        \"phpunit/phpunit\": \"^10.5\",\n        \"spatie/laravel-ignition\": \"^2.4\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"App\\\\\": \"app/\",\n            \"Database\\\\Factories\\\\\": \"database/factories/\",\n            \"Database\\\\Seeders\\\\\": \"database/seeders/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Tests\\\\\": \"tests/\"\n        }\n    },\n    \"scripts\": {\n        \"post-autoload-dump\": [\n            \"Illuminate\\\\Foundation\\\\ComposerScripts::postAutoloadDump\",\n            \"@php artisan package:discover --ansi\"\n        ],\n        \"post-update-cmd\": [\n            \"@php artisan vendor:publish --tag=laravel-assets --ansi --force\"\n        ],\n        \"post-root-package-install\": [\n            \"@php -r \\\"file_exists('.env') || copy('.env.example', '.env');\\\"\"\n        ],\n        \"post-create-project-cmd\": [\n            \"@php artisan key:generate --ansi\",\n            \"@php -r \\\"file_exists('database/database.sqlite') || touch('database/database.sqlite');\\\"\",\n            \"@php artisan migrate --graceful --ansi\"\n        ]\n    },\n    \"extra\": {\n        \"laravel\": {\n            \"dont-discover\": []\n        }\n    },\n    \"config\": {\n        \"optimize-autoloader\": true,\n        \"preferred-install\": \"dist\",\n        \"sort-packages\": true,\n        \"allow-plugins\": {\n            \"pestphp/pest-plugin\": true,\n            \"php-http/discovery\": true\n        }\n    },\n    \"minimum-stability\": \"stable\",\n    \"prefer-stable\": true\n}\n"
  },
  {
    "path": "config/app.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Name\n    |--------------------------------------------------------------------------\n    |\n    | This value is the name of your application, which will be used when the\n    | framework needs to place the application's name in a notification or\n    | other UI elements where an application name needs to be displayed.\n    |\n    */\n\n    'name' => env('APP_NAME', 'Laravel'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Environment\n    |--------------------------------------------------------------------------\n    |\n    | This value determines the \"environment\" your application is currently\n    | running in. This may determine how you prefer to configure various\n    | services the application utilizes. Set this in your \".env\" file.\n    |\n    */\n\n    'env' => env('APP_ENV', 'production'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Debug Mode\n    |--------------------------------------------------------------------------\n    |\n    | When your application is in debug mode, detailed error messages with\n    | stack traces will be shown on every error that occurs within your\n    | application. If disabled, a simple generic error page is shown.\n    |\n    */\n\n    'debug' => (bool) env('APP_DEBUG', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application URL\n    |--------------------------------------------------------------------------\n    |\n    | This URL is used by the console to properly generate URLs when using\n    | the Artisan command line tool. You should set this to the root of\n    | the application so that it's available within Artisan commands.\n    |\n    */\n\n    'url' => env('APP_URL', 'http://localhost'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Timezone\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default timezone for your application, which\n    | will be used by the PHP date and date-time functions. The timezone\n    | is set to \"UTC\" by default as it is suitable for most use cases.\n    |\n    */\n\n    'timezone' => env('APP_TIMEZONE', 'UTC'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Locale Configuration\n    |--------------------------------------------------------------------------\n    |\n    | The application locale determines the default locale that will be used\n    | by Laravel's translation / localization methods. This option can be\n    | set to any locale for which you plan to have translation strings.\n    |\n    */\n\n    'locale' => env('APP_LOCALE', 'en'),\n\n    'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),\n\n    'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Encryption Key\n    |--------------------------------------------------------------------------\n    |\n    | This key is utilized by Laravel's encryption services and should be set\n    | to a random, 32 character string to ensure that all encrypted values\n    | are secure. You should do this prior to deploying the application.\n    |\n    */\n\n    'cipher' => 'AES-256-CBC',\n\n    'key' => env('APP_KEY'),\n\n    'previous_keys' => [\n        ...array_filter(\n            explode(',', env('APP_PREVIOUS_KEYS', ''))\n        ),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Maintenance Mode Driver\n    |--------------------------------------------------------------------------\n    |\n    | These configuration options determine the driver used to determine and\n    | manage Laravel's \"maintenance mode\" status. The \"cache\" driver will\n    | allow maintenance mode to be controlled across multiple machines.\n    |\n    | Supported drivers: \"file\", \"cache\"\n    |\n    */\n\n    'maintenance' => [\n        'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),\n        'store' => env('APP_MAINTENANCE_STORE', 'database'),\n    ],\n\n];\n"
  },
  {
    "path": "config/auth.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Defaults\n    |--------------------------------------------------------------------------\n    |\n    | This option defines the default authentication \"guard\" and password\n    | reset \"broker\" for your application. You may change these values\n    | as required, but they're a perfect start for most applications.\n    |\n    */\n\n    'defaults' => [\n        'guard' => env('AUTH_GUARD', 'web'),\n        'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Guards\n    |--------------------------------------------------------------------------\n    |\n    | Next, you may define every authentication guard for your application.\n    | Of course, a great default configuration has been defined for you\n    | which utilizes session storage plus the Eloquent user provider.\n    |\n    | All authentication guards have a user provider, which defines how the\n    | users are actually retrieved out of your database or other storage\n    | system used by the application. Typically, Eloquent is utilized.\n    |\n    | Supported: \"session\"\n    |\n    */\n\n    'guards' => [\n        'web' => [\n            'driver' => 'session',\n            'provider' => 'users',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | User Providers\n    |--------------------------------------------------------------------------\n    |\n    | All authentication guards have a user provider, which defines how the\n    | users are actually retrieved out of your database or other storage\n    | system used by the application. Typically, Eloquent is utilized.\n    |\n    | If you have multiple user tables or models you may configure multiple\n    | providers to represent the model / table. These providers may then\n    | be assigned to any extra authentication guards you have defined.\n    |\n    | Supported: \"database\", \"eloquent\"\n    |\n    */\n\n    'providers' => [\n        'users' => [\n            'driver' => 'eloquent',\n            'model' => env('AUTH_MODEL', App\\Models\\User::class),\n        ],\n\n        // 'users' => [\n        //     'driver' => 'database',\n        //     'table' => 'users',\n        // ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Resetting Passwords\n    |--------------------------------------------------------------------------\n    |\n    | These configuration options specify the behavior of Laravel's password\n    | reset functionality, including the table utilized for token storage\n    | and the user provider that is invoked to actually retrieve users.\n    |\n    | The expiry time is the number of minutes that each reset token will be\n    | considered valid. This security feature keeps tokens short-lived so\n    | they have less time to be guessed. You may change this as needed.\n    |\n    | The throttle setting is the number of seconds a user must wait before\n    | generating more password reset tokens. This prevents the user from\n    | quickly generating a very large amount of password reset tokens.\n    |\n    */\n\n    'passwords' => [\n        'users' => [\n            'provider' => 'users',\n            'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),\n            'expire' => 60,\n            'throttle' => 60,\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password Confirmation Timeout\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define the amount of seconds before a password confirmation\n    | window expires and users are asked to re-enter their password via the\n    | confirmation screen. By default, the timeout lasts for three hours.\n    |\n    */\n\n    'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),\n\n];\n"
  },
  {
    "path": "config/cache.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default cache store that will be used by the\n    | framework. This connection is utilized if another isn't explicitly\n    | specified when running a cache operation inside the application.\n    |\n    */\n\n    'default' => env('CACHE_STORE', 'database'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Stores\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the cache \"stores\" for your application as\n    | well as their drivers. You may even define multiple stores for the\n    | same cache driver to group types of items stored in your caches.\n    |\n    | Supported drivers: \"apc\", \"array\", \"database\", \"file\", \"memcached\",\n    |                    \"redis\", \"dynamodb\", \"octane\", \"null\"\n    |\n    */\n\n    'stores' => [\n\n        'array' => [\n            'driver' => 'array',\n            'serialize' => false,\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'table' => env('DB_CACHE_TABLE', 'cache'),\n            'connection' => env('DB_CACHE_CONNECTION'),\n            'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),\n        ],\n\n        'file' => [\n            'driver' => 'file',\n            'path' => storage_path('framework/cache/data'),\n            'lock_path' => storage_path('framework/cache/data'),\n        ],\n\n        'memcached' => [\n            'driver' => 'memcached',\n            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),\n            'sasl' => [\n                env('MEMCACHED_USERNAME'),\n                env('MEMCACHED_PASSWORD'),\n            ],\n            'options' => [\n                // Memcached::OPT_CONNECT_TIMEOUT => 2000,\n            ],\n            'servers' => [\n                [\n                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),\n                    'port' => env('MEMCACHED_PORT', 11211),\n                    'weight' => 100,\n                ],\n            ],\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),\n            'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),\n        ],\n\n        'dynamodb' => [\n            'driver' => 'dynamodb',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n            'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),\n            'endpoint' => env('DYNAMODB_ENDPOINT'),\n        ],\n\n        'octane' => [\n            'driver' => 'octane',\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Key Prefix\n    |--------------------------------------------------------------------------\n    |\n    | When utilizing the APC, database, memcached, Redis, and DynamoDB cache\n    | stores, there might be other applications using the same cache. For\n    | that reason, you may prefix every cache key to avoid collisions.\n    |\n    */\n\n    'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),\n\n];\n"
  },
  {
    "path": "config/database.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Database Connection Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which of the database connections below you wish\n    | to use as your default connection for database operations. This is\n    | the connection which will be utilized unless another connection\n    | is explicitly specified when you execute a query / statement.\n    |\n    */\n\n    'default' => env('DB_CONNECTION', 'sqlite'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Database Connections\n    |--------------------------------------------------------------------------\n    |\n    | Below are all of the database connections defined for your application.\n    | An example configuration is provided for each database system which\n    | is supported by Laravel. You're free to add / remove connections.\n    |\n    */\n\n    'connections' => [\n\n        'sqlite' => [\n            'driver' => 'sqlite',\n            'url' => env('DB_URL'),\n            'database' => env('DB_DATABASE', database_path('database.sqlite')),\n            'prefix' => '',\n            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),\n        ],\n\n        'mysql' => [\n            'driver' => 'mysql',\n            'url' => env('DB_URL'),\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '3306'),\n            'database' => env('DB_DATABASE', 'laravel'),\n            'username' => env('DB_USERNAME', 'root'),\n            'password' => env('DB_PASSWORD', ''),\n            'unix_socket' => env('DB_SOCKET', ''),\n            'charset' => env('DB_CHARSET', 'utf8mb4'),\n            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),\n            'prefix' => '',\n            'prefix_indexes' => true,\n            'strict' => true,\n            'engine' => null,\n            'options' => extension_loaded('pdo_mysql') ? array_filter([\n                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),\n            ]) : [],\n        ],\n\n        'mariadb' => [\n            'driver' => 'mariadb',\n            'url' => env('DB_URL'),\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '3306'),\n            'database' => env('DB_DATABASE', 'laravel'),\n            'username' => env('DB_USERNAME', 'root'),\n            'password' => env('DB_PASSWORD', ''),\n            'unix_socket' => env('DB_SOCKET', ''),\n            'charset' => env('DB_CHARSET', 'utf8mb4'),\n            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),\n            'prefix' => '',\n            'prefix_indexes' => true,\n            'strict' => true,\n            'engine' => null,\n            'options' => extension_loaded('pdo_mysql') ? array_filter([\n                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),\n            ]) : [],\n        ],\n\n        'pgsql' => [\n            'driver' => 'pgsql',\n            'url' => env('DB_URL'),\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '5432'),\n            'database' => env('DB_DATABASE', 'laravel'),\n            'username' => env('DB_USERNAME', 'root'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => env('DB_CHARSET', 'utf8'),\n            'prefix' => '',\n            'prefix_indexes' => true,\n            'search_path' => 'public',\n            'sslmode' => 'prefer',\n        ],\n\n        'sqlsrv' => [\n            'driver' => 'sqlsrv',\n            'url' => env('DB_URL'),\n            'host' => env('DB_HOST', 'localhost'),\n            'port' => env('DB_PORT', '1433'),\n            'database' => env('DB_DATABASE', 'laravel'),\n            'username' => env('DB_USERNAME', 'root'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => env('DB_CHARSET', 'utf8'),\n            'prefix' => '',\n            'prefix_indexes' => true,\n            // 'encrypt' => env('DB_ENCRYPT', 'yes'),\n            // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Migration Repository Table\n    |--------------------------------------------------------------------------\n    |\n    | This table keeps track of all the migrations that have already run for\n    | your application. Using this information, we can determine which of\n    | the migrations on disk haven't actually been run on the database.\n    |\n    */\n\n    'migrations' => [\n        'table' => 'migrations',\n        'update_date_on_publish' => true,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Redis Databases\n    |--------------------------------------------------------------------------\n    |\n    | Redis is an open source, fast, and advanced key-value store that also\n    | provides a richer body of commands than a typical key-value system\n    | such as Memcached. You may define your connection settings here.\n    |\n    */\n\n    'redis' => [\n\n        'client' => env('REDIS_CLIENT', 'phpredis'),\n\n        'options' => [\n            'cluster' => env('REDIS_CLUSTER', 'redis'),\n            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),\n        ],\n\n        'default' => [\n            'url' => env('REDIS_URL'),\n            'host' => env('REDIS_HOST', '127.0.0.1'),\n            'username' => env('REDIS_USERNAME'),\n            'password' => env('REDIS_PASSWORD'),\n            'port' => env('REDIS_PORT', '6379'),\n            'database' => env('REDIS_DB', '0'),\n        ],\n\n        'cache' => [\n            'url' => env('REDIS_URL'),\n            'host' => env('REDIS_HOST', '127.0.0.1'),\n            'username' => env('REDIS_USERNAME'),\n            'password' => env('REDIS_PASSWORD'),\n            'port' => env('REDIS_PORT', '6379'),\n            'database' => env('REDIS_CACHE_DB', '1'),\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/filesystems.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default filesystem disk that should be used\n    | by the framework. The \"local\" disk, as well as a variety of cloud\n    | based disks are available to your application for file storage.\n    |\n    */\n\n    'default' => env('FILESYSTEM_DISK', 'local'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Filesystem Disks\n    |--------------------------------------------------------------------------\n    |\n    | Below you may configure as many filesystem disks as necessary, and you\n    | may even configure multiple disks for the same driver. Examples for\n    | most supported storage drivers are configured here for reference.\n    |\n    | Supported Drivers: \"local\", \"ftp\", \"sftp\", \"s3\"\n    |\n    */\n\n    'disks' => [\n\n        'local' => [\n            'driver' => 'local',\n            'root' => storage_path('app'),\n            'throw' => false,\n        ],\n\n        'public' => [\n            'driver' => 'local',\n            'root' => storage_path('app/public'),\n            'url' => env('APP_URL').'/storage',\n            'visibility' => 'public',\n            'throw' => false,\n        ],\n\n        's3' => [\n            'driver' => 's3',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'region' => env('AWS_DEFAULT_REGION'),\n            'bucket' => env('AWS_BUCKET'),\n            'url' => env('AWS_URL'),\n            'endpoint' => env('AWS_ENDPOINT'),\n            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),\n            'throw' => false,\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Symbolic Links\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the symbolic links that will be created when the\n    | `storage:link` Artisan command is executed. The array keys should be\n    | the locations of the links and the values should be their targets.\n    |\n    */\n\n    'links' => [\n        public_path('storage') => storage_path('app/public'),\n    ],\n\n];\n"
  },
  {
    "path": "config/logging.php",
    "content": "<?php\n\nuse Monolog\\Handler\\NullHandler;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\SyslogUdpHandler;\nuse Monolog\\Processor\\PsrLogMessageProcessor;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Log Channel\n    |--------------------------------------------------------------------------\n    |\n    | This option defines the default log channel that is utilized to write\n    | messages to your logs. The value provided here should match one of\n    | the channels present in the list of \"channels\" configured below.\n    |\n    */\n\n    'default' => env('LOG_CHANNEL', 'stack'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Deprecations Log Channel\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the log channel that should be used to log warnings\n    | regarding deprecated PHP and library features. This allows you to get\n    | your application ready for upcoming major versions of dependencies.\n    |\n    */\n\n    'deprecations' => [\n        'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),\n        'trace' => env('LOG_DEPRECATIONS_TRACE', false),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Log Channels\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the log channels for your application. Laravel\n    | utilizes the Monolog PHP logging library, which includes a variety\n    | of powerful log handlers and formatters that you're free to use.\n    |\n    | Available Drivers: \"single\", \"daily\", \"slack\", \"syslog\",\n    |                    \"errorlog\", \"monolog\", \"custom\", \"stack\"\n    |\n    */\n\n    'channels' => [\n\n        'stack' => [\n            'driver' => 'stack',\n            'channels' => explode(',', env('LOG_STACK', 'single')),\n            'ignore_exceptions' => false,\n        ],\n\n        'single' => [\n            'driver' => 'single',\n            'path' => storage_path('logs/laravel.log'),\n            'level' => env('LOG_LEVEL', 'debug'),\n            'replace_placeholders' => true,\n        ],\n\n        'daily' => [\n            'driver' => 'daily',\n            'path' => storage_path('logs/laravel.log'),\n            'level' => env('LOG_LEVEL', 'debug'),\n            'days' => env('LOG_DAILY_DAYS', 14),\n            'replace_placeholders' => true,\n        ],\n\n        'slack' => [\n            'driver' => 'slack',\n            'url' => env('LOG_SLACK_WEBHOOK_URL'),\n            'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'),\n            'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),\n            'level' => env('LOG_LEVEL', 'critical'),\n            'replace_placeholders' => true,\n        ],\n\n        'papertrail' => [\n            'driver' => 'monolog',\n            'level' => env('LOG_LEVEL', 'debug'),\n            'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),\n            'handler_with' => [\n                'host' => env('PAPERTRAIL_URL'),\n                'port' => env('PAPERTRAIL_PORT'),\n                'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),\n            ],\n            'processors' => [PsrLogMessageProcessor::class],\n        ],\n\n        'stderr' => [\n            'driver' => 'monolog',\n            'level' => env('LOG_LEVEL', 'debug'),\n            'handler' => StreamHandler::class,\n            'formatter' => env('LOG_STDERR_FORMATTER'),\n            'with' => [\n                'stream' => 'php://stderr',\n            ],\n            'processors' => [PsrLogMessageProcessor::class],\n        ],\n\n        'syslog' => [\n            'driver' => 'syslog',\n            'level' => env('LOG_LEVEL', 'debug'),\n            'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),\n            'replace_placeholders' => true,\n        ],\n\n        'errorlog' => [\n            'driver' => 'errorlog',\n            'level' => env('LOG_LEVEL', 'debug'),\n            'replace_placeholders' => true,\n        ],\n\n        'null' => [\n            'driver' => 'monolog',\n            'handler' => NullHandler::class,\n        ],\n\n        'emergency' => [\n            'path' => storage_path('logs/laravel.log'),\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/mail.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Mailer\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default mailer that is used to send all email\n    | messages unless another mailer is explicitly specified when sending\n    | the message. All additional mailers can be configured within the\n    | \"mailers\" array. Examples of each type of mailer are provided.\n    |\n    */\n\n    'default' => env('MAIL_MAILER', 'log'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Mailer Configurations\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure all of the mailers used by your application plus\n    | their respective settings. Several examples have been configured for\n    | you and you are free to add your own as your application requires.\n    |\n    | Laravel supports a variety of mail \"transport\" drivers that can be used\n    | when delivering an email. You may specify which one you're using for\n    | your mailers below. You may also add additional mailers if needed.\n    |\n    | Supported: \"smtp\", \"sendmail\", \"mailgun\", \"ses\", \"ses-v2\",\n    |            \"postmark\", \"log\", \"array\", \"failover\", \"roundrobin\"\n    |\n    */\n\n    'mailers' => [\n\n        'smtp' => [\n            'transport' => 'smtp',\n            'url' => env('MAIL_URL'),\n            'host' => env('MAIL_HOST', '127.0.0.1'),\n            'port' => env('MAIL_PORT', 2525),\n            'encryption' => env('MAIL_ENCRYPTION', 'tls'),\n            'username' => env('MAIL_USERNAME'),\n            'password' => env('MAIL_PASSWORD'),\n            'timeout' => null,\n            'local_domain' => env('MAIL_EHLO_DOMAIN'),\n        ],\n\n        'ses' => [\n            'transport' => 'ses',\n        ],\n\n        'postmark' => [\n            'transport' => 'postmark',\n            // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),\n            // 'client' => [\n            //     'timeout' => 5,\n            // ],\n        ],\n\n        'sendmail' => [\n            'transport' => 'sendmail',\n            'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),\n        ],\n\n        'log' => [\n            'transport' => 'log',\n            'channel' => env('MAIL_LOG_CHANNEL'),\n        ],\n\n        'array' => [\n            'transport' => 'array',\n        ],\n\n        'failover' => [\n            'transport' => 'failover',\n            'mailers' => [\n                'smtp',\n                'log',\n            ],\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Global \"From\" Address\n    |--------------------------------------------------------------------------\n    |\n    | You may wish for all emails sent by your application to be sent from\n    | the same address. Here you may specify a name and address that is\n    | used globally for all emails that are sent by your application.\n    |\n    */\n\n    'from' => [\n        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),\n        'name' => env('MAIL_FROM_NAME', 'Example'),\n    ],\n\n];\n"
  },
  {
    "path": "config/permission.php",
    "content": "<?php\n\nreturn [\n\n    'models' => [\n\n        /*\n         * When using the \"HasPermissions\" trait from this package, we need to know which\n         * Eloquent model should be used to retrieve your permissions. Of course, it\n         * is often just the \"Permission\" model but you may use whatever you like.\n         *\n         * The model you want to use as a Permission model needs to implement the\n         * `Spatie\\Permission\\Contracts\\Permission` contract.\n         */\n\n        'permission' => Spatie\\Permission\\Models\\Permission::class,\n\n        /*\n         * When using the \"HasRoles\" trait from this package, we need to know which\n         * Eloquent model should be used to retrieve your roles. Of course, it\n         * is often just the \"Role\" model but you may use whatever you like.\n         *\n         * The model you want to use as a Role model needs to implement the\n         * `Spatie\\Permission\\Contracts\\Role` contract.\n         */\n\n        'role' => Spatie\\Permission\\Models\\Role::class,\n\n    ],\n\n    'table_names' => [\n\n        /*\n         * When using the \"HasRoles\" trait from this package, we need to know which\n         * table should be used to retrieve your roles. We have chosen a basic\n         * default value but you may easily change it to any table you like.\n         */\n\n        'roles' => 'roles',\n\n        /*\n         * When using the \"HasPermissions\" trait from this package, we need to know which\n         * table should be used to retrieve your permissions. We have chosen a basic\n         * default value but you may easily change it to any table you like.\n         */\n\n        'permissions' => 'permissions',\n\n        /*\n         * When using the \"HasPermissions\" trait from this package, we need to know which\n         * table should be used to retrieve your models permissions. We have chosen a\n         * basic default value but you may easily change it to any table you like.\n         */\n\n        'model_has_permissions' => 'model_has_permissions',\n\n        /*\n         * When using the \"HasRoles\" trait from this package, we need to know which\n         * table should be used to retrieve your models roles. We have chosen a\n         * basic default value but you may easily change it to any table you like.\n         */\n\n        'model_has_roles' => 'model_has_roles',\n\n        /*\n         * When using the \"HasRoles\" trait from this package, we need to know which\n         * table should be used to retrieve your roles permissions. We have chosen a\n         * basic default value but you may easily change it to any table you like.\n         */\n\n        'role_has_permissions' => 'role_has_permissions',\n    ],\n\n    'column_names' => [\n        /*\n         * Change this if you want to name the related pivots other than defaults\n         */\n        'role_pivot_key' => null, //default 'role_id',\n        'permission_pivot_key' => null, //default 'permission_id',\n\n        /*\n         * Change this if you want to name the related model primary key other than\n         * `model_id`.\n         *\n         * For example, this would be nice if your primary keys are all UUIDs. In\n         * that case, name this `model_uuid`.\n         */\n\n        'model_morph_key' => 'model_id',\n\n        /*\n         * Change this if you want to use the teams feature and your related model's\n         * foreign key is other than `team_id`.\n         */\n\n        'team_foreign_key' => 'team_id',\n    ],\n\n    /*\n     * When set to true, the method for checking permissions will be registered on the gate.\n     * Set this to false if you want to implement custom logic for checking permissions.\n     */\n\n    'register_permission_check_method' => true,\n\n    /*\n     * When set to true, Laravel\\Octane\\Events\\OperationTerminated event listener will be registered\n     * this will refresh permissions on every TickTerminated, TaskTerminated and RequestTerminated\n     * NOTE: This should not be needed in most cases, but an Octane/Vapor combination benefited from it.\n     */\n    'register_octane_reset_listener' => false,\n\n    /*\n     * Teams Feature.\n     * When set to true the package implements teams using the 'team_foreign_key'.\n     * If you want the migrations to register the 'team_foreign_key', you must\n     * set this to true before doing the migration.\n     * If you already did the migration then you must make a new migration to also\n     * add 'team_foreign_key' to 'roles', 'model_has_roles', and 'model_has_permissions'\n     * (view the latest version of this package's migration file)\n     */\n\n    'teams' => false,\n\n    /*\n     * Passport Client Credentials Grant\n     * When set to true the package will use Passports Client to check permissions\n     */\n\n    'use_passport_client_credentials' => false,\n\n    /*\n     * When set to true, the required permission names are added to exception messages.\n     * This could be considered an information leak in some contexts, so the default\n     * setting is false here for optimum safety.\n     */\n\n    'display_permission_in_exception' => false,\n\n    /*\n     * When set to true, the required role names are added to exception messages.\n     * This could be considered an information leak in some contexts, so the default\n     * setting is false here for optimum safety.\n     */\n\n    'display_role_in_exception' => false,\n\n    /*\n     * By default wildcard permission lookups are disabled.\n     * See documentation to understand supported syntax.\n     */\n\n    'enable_wildcard_permission' => false,\n\n    /*\n     * The class to use for interpreting wildcard permissions.\n     * If you need to modify delimiters, override the class and specify its name here.\n     */\n    // 'permission.wildcard_permission' => Spatie\\Permission\\WildcardPermission::class,\n\n    /* Cache-specific settings */\n\n    'cache' => [\n\n        /*\n         * By default all permissions are cached for 24 hours to speed up performance.\n         * When permissions or roles are updated the cache is flushed automatically.\n         */\n\n        'expiration_time' => \\DateInterval::createFromDateString('24 hours'),\n\n        /*\n         * The cache key used to store all permissions.\n         */\n\n        'key' => 'spatie.permission.cache',\n\n        /*\n         * You may optionally indicate a specific cache driver to use for permission and\n         * role caching using any of the `store` drivers listed in the cache.php config\n         * file. Using 'default' here means to use the `default` set in cache.php.\n         */\n\n        'store' => 'default',\n    ],\n];\n"
  },
  {
    "path": "config/queue.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Queue Connection Name\n    |--------------------------------------------------------------------------\n    |\n    | Laravel's queue supports a variety of backends via a single, unified\n    | API, giving you convenient access to each backend using identical\n    | syntax for each. The default queue connection is defined below.\n    |\n    */\n\n    'default' => env('QUEUE_CONNECTION', 'database'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Queue Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the connection options for every queue backend\n    | used by your application. An example configuration is provided for\n    | each backend supported by Laravel. You're also free to add more.\n    |\n    | Drivers: \"sync\", \"database\", \"beanstalkd\", \"sqs\", \"redis\", \"null\"\n    |\n    */\n\n    'connections' => [\n\n        'sync' => [\n            'driver' => 'sync',\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'connection' => env('DB_QUEUE_CONNECTION'),\n            'table' => env('DB_QUEUE_TABLE', 'jobs'),\n            'queue' => env('DB_QUEUE', 'default'),\n            'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),\n            'after_commit' => false,\n        ],\n\n        'beanstalkd' => [\n            'driver' => 'beanstalkd',\n            'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),\n            'queue' => env('BEANSTALKD_QUEUE', 'default'),\n            'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),\n            'block_for' => 0,\n            'after_commit' => false,\n        ],\n\n        'sqs' => [\n            'driver' => 'sqs',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),\n            'queue' => env('SQS_QUEUE', 'default'),\n            'suffix' => env('SQS_SUFFIX'),\n            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n            'after_commit' => false,\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),\n            'queue' => env('REDIS_QUEUE', 'default'),\n            'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),\n            'block_for' => null,\n            'after_commit' => false,\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Job Batching\n    |--------------------------------------------------------------------------\n    |\n    | The following options configure the database and table that store job\n    | batching information. These options can be updated to any database\n    | connection and table which has been defined by your application.\n    |\n    */\n\n    'batching' => [\n        'database' => env('DB_CONNECTION', 'sqlite'),\n        'table' => 'job_batches',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Failed Queue Jobs\n    |--------------------------------------------------------------------------\n    |\n    | These options configure the behavior of failed queue job logging so you\n    | can control how and where failed jobs are stored. Laravel ships with\n    | support for storing failed jobs in a simple file or in a database.\n    |\n    | Supported drivers: \"database-uuids\", \"dynamodb\", \"file\", \"null\"\n    |\n    */\n\n    'failed' => [\n        'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),\n        'database' => env('DB_CONNECTION', 'sqlite'),\n        'table' => 'failed_jobs',\n    ],\n\n];\n"
  },
  {
    "path": "config/sanctum.php",
    "content": "<?php\n\nuse Laravel\\Sanctum\\Sanctum;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Stateful Domains\n    |--------------------------------------------------------------------------\n    |\n    | Requests from the following domains / hosts will receive stateful API\n    | authentication cookies. Typically, these should include your local\n    | and production domains which access your API via a frontend SPA.\n    |\n    */\n\n    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(\n        '%s%s',\n        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',\n        Sanctum::currentApplicationUrlWithPort()\n    ))),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Sanctum Guards\n    |--------------------------------------------------------------------------\n    |\n    | This array contains the authentication guards that will be checked when\n    | Sanctum is trying to authenticate a request. If none of these guards\n    | are able to authenticate the request, Sanctum will use the bearer\n    | token that's present on an incoming request for authentication.\n    |\n    */\n\n    'guard' => ['web'],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Expiration Minutes\n    |--------------------------------------------------------------------------\n    |\n    | This value controls the number of minutes until an issued token will be\n    | considered expired. This will override any values set in the token's\n    | \"expires_at\" attribute, but first-party sessions are not affected.\n    |\n    */\n\n    'expiration' => null,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Token Prefix\n    |--------------------------------------------------------------------------\n    |\n    | Sanctum can prefix new tokens in order to take advantage of numerous\n    | security scanning initiatives maintained by open source platforms\n    | that notify developers if they commit tokens into repositories.\n    |\n    | See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning\n    |\n    */\n\n    'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Sanctum Middleware\n    |--------------------------------------------------------------------------\n    |\n    | When authenticating your first-party SPA with Sanctum you may need to\n    | customize some of the middleware Sanctum uses while processing the\n    | request. You may change the middleware listed below as required.\n    |\n    */\n\n    'middleware' => [\n        'authenticate_session' => Laravel\\Sanctum\\Http\\Middleware\\AuthenticateSession::class,\n        'encrypt_cookies' => Illuminate\\Cookie\\Middleware\\EncryptCookies::class,\n        'validate_csrf_token' => Illuminate\\Foundation\\Http\\Middleware\\ValidateCsrfToken::class,\n    ],\n\n];\n"
  },
  {
    "path": "config/services.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Party Services\n    |--------------------------------------------------------------------------\n    |\n    | This file is for storing the credentials for third party services such\n    | as Mailgun, Postmark, AWS and more. This file provides the de facto\n    | location for this type of information, allowing packages to have\n    | a conventional file to locate the various service credentials.\n    |\n    */\n\n    'postmark' => [\n        'token' => env('POSTMARK_TOKEN'),\n    ],\n\n    'ses' => [\n        'key' => env('AWS_ACCESS_KEY_ID'),\n        'secret' => env('AWS_SECRET_ACCESS_KEY'),\n        'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n    ],\n\n    'slack' => [\n        'notifications' => [\n            'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),\n            'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),\n        ],\n    ],\n\n];\n"
  },
  {
    "path": "config/session.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Session Driver\n    |--------------------------------------------------------------------------\n    |\n    | This option determines the default session driver that is utilized for\n    | incoming requests. Laravel supports a variety of storage options to\n    | persist session data. Database storage is a great default choice.\n    |\n    | Supported: \"file\", \"cookie\", \"database\", \"apc\",\n    |            \"memcached\", \"redis\", \"dynamodb\", \"array\"\n    |\n    */\n\n    'driver' => env('SESSION_DRIVER', 'database'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Lifetime\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the number of minutes that you wish the session\n    | to be allowed to remain idle before it expires. If you want them\n    | to expire immediately when the browser is closed then you may\n    | indicate that via the expire_on_close configuration option.\n    |\n    */\n\n    'lifetime' => env('SESSION_LIFETIME', 120),\n\n    'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Encryption\n    |--------------------------------------------------------------------------\n    |\n    | This option allows you to easily specify that all of your session data\n    | should be encrypted before it's stored. All encryption is performed\n    | automatically by Laravel and you may use the session like normal.\n    |\n    */\n\n    'encrypt' => env('SESSION_ENCRYPT', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session File Location\n    |--------------------------------------------------------------------------\n    |\n    | When utilizing the \"file\" session driver, the session files are placed\n    | on disk. The default storage location is defined here; however, you\n    | are free to provide another location where they should be stored.\n    |\n    */\n\n    'files' => storage_path('framework/sessions'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Connection\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" or \"redis\" session drivers, you may specify a\n    | connection that should be used to manage these sessions. This should\n    | correspond to a connection in your database configuration options.\n    |\n    */\n\n    'connection' => env('SESSION_CONNECTION'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Table\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" session driver, you may specify the table to\n    | be used to store sessions. Of course, a sensible default is defined\n    | for you; however, you're welcome to change this to another table.\n    |\n    */\n\n    'table' => env('SESSION_TABLE', 'sessions'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | When using one of the framework's cache driven session backends, you may\n    | define the cache store which should be used to store the session data\n    | between requests. This must match one of your defined cache stores.\n    |\n    | Affects: \"apc\", \"dynamodb\", \"memcached\", \"redis\"\n    |\n    */\n\n    'store' => env('SESSION_STORE'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Sweeping Lottery\n    |--------------------------------------------------------------------------\n    |\n    | Some session drivers must manually sweep their storage location to get\n    | rid of old sessions from storage. Here are the chances that it will\n    | happen on a given request. By default, the odds are 2 out of 100.\n    |\n    */\n\n    'lottery' => [2, 100],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may change the name of the session cookie that is created by\n    | the framework. Typically, you should not need to change this value\n    | since doing so does not grant a meaningful security improvement.\n    |\n    |\n    */\n\n    'cookie' => env(\n        'SESSION_COOKIE',\n        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'\n    ),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Path\n    |--------------------------------------------------------------------------\n    |\n    | The session cookie path determines the path for which the cookie will\n    | be regarded as available. Typically, this will be the root path of\n    | your application, but you're free to change this when necessary.\n    |\n    */\n\n    'path' => env('SESSION_PATH', '/'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Domain\n    |--------------------------------------------------------------------------\n    |\n    | This value determines the domain and subdomains the session cookie is\n    | available to. By default, the cookie will be available to the root\n    | domain and all subdomains. Typically, this shouldn't be changed.\n    |\n    */\n\n    'domain' => env('SESSION_DOMAIN'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTPS Only Cookies\n    |--------------------------------------------------------------------------\n    |\n    | By setting this option to true, session cookies will only be sent back\n    | to the server if the browser has a HTTPS connection. This will keep\n    | the cookie from being sent to you when it can't be done securely.\n    |\n    */\n\n    'secure' => env('SESSION_SECURE_COOKIE'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTP Access Only\n    |--------------------------------------------------------------------------\n    |\n    | Setting this value to true will prevent JavaScript from accessing the\n    | value of the cookie and the cookie will only be accessible through\n    | the HTTP protocol. It's unlikely you should disable this option.\n    |\n    */\n\n    'http_only' => env('SESSION_HTTP_ONLY', true),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Same-Site Cookies\n    |--------------------------------------------------------------------------\n    |\n    | This option determines how your cookies behave when cross-site requests\n    | take place, and can be used to mitigate CSRF attacks. By default, we\n    | will set this value to \"lax\" to permit secure cross-site requests.\n    |\n    | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value\n    |\n    | Supported: \"lax\", \"strict\", \"none\", null\n    |\n    */\n\n    'same_site' => env('SESSION_SAME_SITE', 'lax'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Partitioned Cookies\n    |--------------------------------------------------------------------------\n    |\n    | Setting this value to true will tie the cookie to the top-level site for\n    | a cross-site context. Partitioned cookies are accepted by the browser\n    | when flagged \"secure\" and the Same-Site attribute is set to \"none\".\n    |\n    */\n\n    'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),\n\n];\n"
  },
  {
    "path": "database/.gitignore",
    "content": "*.sqlite*\n"
  },
  {
    "path": "database/factories/CountriesFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\n/**\n * @extends \\Illuminate\\Database\\Eloquent\\Factories\\Factory<\\App\\Models\\Countries>\n */\nclass CountriesFactory extends Factory\n{\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n\n    private static int $index = 0;\n\n    public function definition(): array\n    {\n        return [\n            'name' => $this->faker->country,\n            'order_number' => ++static::$index,\n            'created_at' => now(),\n            'updated_at' => now(),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/ProductTransactionsFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse App\\Models\\Products;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\n/**\n * @extends \\Illuminate\\Database\\Eloquent\\Factories\\Factory<\\App\\Models\\ProductTransaction>\n */\nclass ProductTransactionsFactory extends Factory\n{\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        $productIds = Products::pluck('id')->toArray();\n\n        return [\n            'product_id' => $this->faker->randomElement($productIds),\n            'transaction_type' => $this->faker->randomElement(['buy', 'sell']),\n            'quantity' => $this->faker->numberBetween(1, 50),\n            'price' => $this->faker->numberBetween(10, 100), // Assuming price range from 10 to 100\n            'total_price' => function (array $attributes) {\n                return $attributes['quantity'] * $attributes['price'];\n            },\n            'created_at' => $this->faker->dateTimeBetween('-1 year', 'now'),\n            'updated_at' => $this->faker->dateTimeBetween('-1 year', 'now'),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/ProductsFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\n/**\n * @extends \\Illuminate\\Database\\Eloquent\\Factories\\Factory<\\App\\Models\\Products>\n */\nclass ProductsFactory extends Factory\n{\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => $this->faker->word,\n            'quantity' => $this->faker->numberBetween(1, 100),\n            'buyingPrice' => $this->faker->randomFloat(2, 1, 1000),\n            'sellingPrice' => $this->faker->randomFloat(2, 1, 2000),\n            'description' => $this->faker->paragraph,\n            // 'image_url' => $this->faker->image(public_path('productsImage'), 640, 480, null, false),\n            'image_url' => $this->faker->word,\n            'weight' => $this->faker->randomFloat(2, 0.1, 50),\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/ScheduleFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n\n/**\n * @extends \\Illuminate\\Database\\Eloquent\\Factories\\Factory<\\App\\Models\\Schedule>\n */\nclass ScheduleFactory extends Factory\n{\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition()\n    {\n        $startTimestamp = $this->faker->dateTimeBetween('now', '+1 month')->getTimestamp();\n        $endTimestamp = $this->faker->dateTimeBetween('@' . $startTimestamp, '@' . ($startTimestamp + 86400))->getTimestamp();\n\n        $startDate = date('Y-m-d', $startTimestamp);\n        $endDate = date('Y-m-d', $endTimestamp);\n\n        return [\n            'title' => $this->faker->sentence,\n            'start' => $startDate,\n            'end' => $endDate,\n            'color' => '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT), // Generate random hex color\n            'description' => $this->faker->paragraph,\n        ];\n    }\n}\n"
  },
  {
    "path": "database/factories/UserFactory.php",
    "content": "<?php\n\nnamespace Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Str;\n\n/**\n * @extends \\Illuminate\\Database\\Eloquent\\Factories\\Factory<\\App\\Models\\User>\n */\nclass UserFactory extends Factory\n{\n    /**\n     * The current password being used by the factory.\n     */\n    protected static ?string $password;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array<string, mixed>\n     */\n    public function definition(): array\n    {\n        return [\n            'name' => fake()->name(),\n            'email' => fake()->unique()->safeEmail(),\n            'email_verified_at' => now(),\n            'password' => static::$password ??= Hash::make('password'),\n            'remember_token' => Str::random(10),\n        ];\n    }\n\n    /**\n     * Indicate that the model's email address should be unverified.\n     */\n    public function unverified(): static\n    {\n        return $this->state(fn (array $attributes) => [\n            'email_verified_at' => null,\n        ]);\n    }\n}\n"
  },
  {
    "path": "database/migrations/0001_01_01_000000_create_users_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('users', function (Blueprint $table) {\n            $table->id();\n            $table->string('name');\n            $table->string('email')->unique();\n            $table->timestamp('email_verified_at')->nullable();\n            $table->string('password');\n            $table->string('lang')->nullable(false)->default('en');\n            $table->rememberToken();\n            $table->timestamps();\n        });\n\n        Schema::create('password_reset_tokens', function (Blueprint $table) {\n            $table->string('email')->primary();\n            $table->string('token');\n            $table->timestamp('created_at')->nullable();\n        });\n\n        Schema::create('sessions', function (Blueprint $table) {\n            $table->string('id')->primary();\n            $table->foreignId('user_id')->nullable()->index();\n            $table->string('ip_address', 45)->nullable();\n            $table->text('user_agent')->nullable();\n            $table->longText('payload');\n            $table->integer('last_activity')->index();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('users');\n        Schema::dropIfExists('password_reset_tokens');\n        Schema::dropIfExists('sessions');\n    }\n};\n"
  },
  {
    "path": "database/migrations/0001_01_01_000001_create_cache_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('cache', function (Blueprint $table) {\n            $table->string('key')->primary();\n            $table->mediumText('value');\n            $table->integer('expiration');\n        });\n\n        Schema::create('cache_locks', function (Blueprint $table) {\n            $table->string('key')->primary();\n            $table->string('owner');\n            $table->integer('expiration');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('cache');\n        Schema::dropIfExists('cache_locks');\n    }\n};\n"
  },
  {
    "path": "database/migrations/0001_01_01_000002_create_jobs_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('jobs', function (Blueprint $table) {\n            $table->id();\n            $table->string('queue')->index();\n            $table->longText('payload');\n            $table->unsignedTinyInteger('attempts');\n            $table->unsignedInteger('reserved_at')->nullable();\n            $table->unsignedInteger('available_at');\n            $table->unsignedInteger('created_at');\n        });\n\n        Schema::create('job_batches', function (Blueprint $table) {\n            $table->string('id')->primary();\n            $table->string('name');\n            $table->integer('total_jobs');\n            $table->integer('pending_jobs');\n            $table->integer('failed_jobs');\n            $table->longText('failed_job_ids');\n            $table->mediumText('options')->nullable();\n            $table->integer('cancelled_at')->nullable();\n            $table->integer('created_at');\n            $table->integer('finished_at')->nullable();\n        });\n\n        Schema::create('failed_jobs', function (Blueprint $table) {\n            $table->id();\n            $table->string('uuid')->unique();\n            $table->text('connection');\n            $table->text('queue');\n            $table->longText('payload');\n            $table->longText('exception');\n            $table->timestamp('failed_at')->useCurrent();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('jobs');\n        Schema::dropIfExists('job_batches');\n        Schema::dropIfExists('failed_jobs');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_08_23_214821_create_schedules_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('schedules', function (Blueprint $table) {\n            $table->id();\n            $table->string('title');\n            $table->date('start');\n            $table->date('end');\n            $table->text('description')->nullable();\n            $table->string('color')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('schedules');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_08_28_213733_create_drop_zones_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('drop_zones', function (Blueprint $table) {\n            $table->id();\n            $table->string('filename');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('drop_zones');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_08_29_200542_create_products_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('products', function (Blueprint $table) {\n            $table->id();\n            $table->string('name')->nullable(false);\n            $table->integer('quantity')->nullable(false);\n            $table->integer('buyingPrice')->nullable(false);\n            $table->integer('sellingPrice')->nullable(false);\n            $table->text('description')->nullable();\n            $table->string('image_url')->nullable();\n            $table->integer('weight')->nullable();\n            $table->timestamps();\n        });\n    }\n\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('products');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_10_15_193356_create_notes_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('notes', function (Blueprint $table) {\n            $table->id();\n            $table->string('title');\n            $table->text('content');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('notes');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_10_29_223039_create_form_builders_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('form_builders', function (Blueprint $table) {\n            $table->id();\n            $table->string('name');\n            $table->JSON('content');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('form_builders');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_10_29_223047_create_form_builder_transactions_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('forms', function (Blueprint $table) {\n            $table->id();\n            $table->foreignId('form_id')->nullable(false)->constrained('form_builders')->onDelete('cascade');\n            $table->JSON('form')->nullable(false);\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('forms');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2023_12_06_222421_create_countries_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('countries', function (Blueprint $table) {\n            $table->id();\n            $table->string('code')->nullable(false);\n            $table->string('name')->nullable(false);\n            $table->integer('order_number')->nullable(false);\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('countries');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_01_21_204149_create_notifications_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('notifications', function (Blueprint $table) {\n            $table->id();\n            $table->string('message')->nullable(false);\n            $table->foreignId('user_id')->nullable(false);\n            $table->boolean('is_send')->nullable(false)->default(0);\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('notifications');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_01_26_223609_create_chats_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('chats', function (Blueprint $table) {\n            $table->id();\n            $table->dateTime('date_time');\n            $table->foreignId('send_by')->nullable(false)->constrained('users');\n            $table->foreignId('send_to')->nullable(false)->constrained('users');\n            $table->text('message');\n            $table->enum('message_type', ['text', 'attachment', 'call'])->nullable(false)->default('text');\n            $table->string('callOffer')->nullable();\n            $table->boolean('is_received')->nullable(false)->default(0);\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('chats');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_04_02_000644_create_personal_access_tokens_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('personal_access_tokens', function (Blueprint $table) {\n            $table->id();\n            $table->morphs('tokenable');\n            $table->string('name');\n            $table->string('token', 64)->unique();\n            $table->text('abilities')->nullable();\n            $table->timestamp('last_used_at')->nullable();\n            $table->timestamp('expires_at')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('personal_access_tokens');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_04_05_204622_create_push_notifications_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('push_notifications', function (Blueprint $table) {\n            $table->id();\n            $table->json('subscriptions')->nullable(false);\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('push_notifications');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_04_06_205204_create_push_notification_msgs_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('push_notification_msgs', function (Blueprint $table) {\n            $table->id();\n            $table->string('title')->nullable(false);\n            $table->string('body')->nullable(false);\n            $table->string('url')->nullable(false);\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('push_notification_msgs');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_04_11_221559_create_permission_tables.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        $teams = config('permission.teams');\n        $tableNames = config('permission.table_names');\n        $columnNames = config('permission.column_names');\n        $pivotRole = $columnNames['role_pivot_key'] ?? 'role_id';\n        $pivotPermission = $columnNames['permission_pivot_key'] ?? 'permission_id';\n\n        if (empty($tableNames)) {\n            throw new \\Exception('Error: config/permission.php not loaded. Run [php artisan config:clear] and try again.');\n        }\n        if ($teams && empty($columnNames['team_foreign_key'] ?? null)) {\n            throw new \\Exception('Error: team_foreign_key on config/permission.php not loaded. Run [php artisan config:clear] and try again.');\n        }\n\n        Schema::create($tableNames['permissions'], function (Blueprint $table) {\n            $table->bigIncrements('id'); // permission id\n            $table->string('name');       // For MySQL 8.0 use string('name', 125);\n            $table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125);\n            $table->timestamps();\n\n            $table->unique(['name', 'guard_name']);\n        });\n\n        Schema::create($tableNames['roles'], function (Blueprint $table) use ($teams, $columnNames) {\n            $table->bigIncrements('id'); // role id\n            if ($teams || config('permission.testing')) { // permission.testing is a fix for sqlite testing\n                $table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable();\n                $table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index');\n            }\n            $table->string('name');       // For MySQL 8.0 use string('name', 125);\n            $table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125);\n            $table->timestamps();\n            if ($teams || config('permission.testing')) {\n                $table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']);\n            } else {\n                $table->unique(['name', 'guard_name']);\n            }\n        });\n\n        Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotPermission, $teams) {\n            $table->unsignedBigInteger($pivotPermission);\n\n            $table->string('model_type');\n            $table->unsignedBigInteger($columnNames['model_morph_key']);\n            $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index');\n\n            $table->foreign($pivotPermission)\n                ->references('id') // permission id\n                ->on($tableNames['permissions'])\n                ->onDelete('cascade');\n            if ($teams) {\n                $table->unsignedBigInteger($columnNames['team_foreign_key']);\n                $table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index');\n\n                $table->primary([$columnNames['team_foreign_key'], $pivotPermission, $columnNames['model_morph_key'], 'model_type'],\n                    'model_has_permissions_permission_model_type_primary');\n            } else {\n                $table->primary([$pivotPermission, $columnNames['model_morph_key'], 'model_type'],\n                    'model_has_permissions_permission_model_type_primary');\n            }\n\n        });\n\n        Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotRole, $teams) {\n            $table->unsignedBigInteger($pivotRole);\n\n            $table->string('model_type');\n            $table->unsignedBigInteger($columnNames['model_morph_key']);\n            $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index');\n\n            $table->foreign($pivotRole)\n                ->references('id') // role id\n                ->on($tableNames['roles'])\n                ->onDelete('cascade');\n            if ($teams) {\n                $table->unsignedBigInteger($columnNames['team_foreign_key']);\n                $table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index');\n\n                $table->primary([$columnNames['team_foreign_key'], $pivotRole, $columnNames['model_morph_key'], 'model_type'],\n                    'model_has_roles_role_model_type_primary');\n            } else {\n                $table->primary([$pivotRole, $columnNames['model_morph_key'], 'model_type'],\n                    'model_has_roles_role_model_type_primary');\n            }\n        });\n\n        Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames, $pivotRole, $pivotPermission) {\n            $table->unsignedBigInteger($pivotPermission);\n            $table->unsignedBigInteger($pivotRole);\n\n            $table->foreign($pivotPermission)\n                ->references('id') // permission id\n                ->on($tableNames['permissions'])\n                ->onDelete('cascade');\n\n            $table->foreign($pivotRole)\n                ->references('id') // role id\n                ->on($tableNames['roles'])\n                ->onDelete('cascade');\n\n            $table->primary([$pivotPermission, $pivotRole], 'role_has_permissions_permission_id_role_id_primary');\n        });\n\n        app('cache')\n            ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null)\n            ->forget(config('permission.cache.key'));\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        $tableNames = config('permission.table_names');\n\n        if (empty($tableNames)) {\n            throw new \\Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.');\n        }\n\n        Schema::drop($tableNames['role_has_permissions']);\n        Schema::drop($tableNames['model_has_roles']);\n        Schema::drop($tableNames['model_has_permissions']);\n        Schema::drop($tableNames['roles']);\n        Schema::drop($tableNames['permissions']);\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_05_13_214747_create_product_transactions_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('product_transactions', function (Blueprint $table) {\n            $table->id();\n            $table->foreignId('product_id')->constrained()->onDelete('cascade');\n            $table->enum('transaction_type', ['buy', 'sell']);\n            $table->integer('quantity');\n            $table->integer('price');\n            $table->integer('total_price');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('product_transactions');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_07_09_223647_create_kanbans_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('kanbans', function (Blueprint $table) {\n            $table->id();\n            $table->string('name');\n            $table->enum('status', ['todo', 'in_progress', 'done'])->default('todo');\n            $table->integer('order')->default(0);\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('kanbans');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_07_23_200914_create_cities_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('cities', function (Blueprint $table) {\n            $table->id();\n            $table->string('name')->nullable(false);\n            $table->string('country_code')->nullable(false);\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('cities');\n    }\n};\n"
  },
  {
    "path": "database/migrations/2024_09_05_215621_create_todos_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up(): void\n    {\n        Schema::create('todos', function (Blueprint $table) {\n            $table->id();\n            $table->string('title');\n            $table->boolean('completed')->default(false);\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down(): void\n    {\n        Schema::dropIfExists('todos');\n    }\n};\n"
  },
  {
    "path": "database/seeders/CitiesSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents;\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass CitiesSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     */\n    public function run(): void\n    {\n        //\n        DB::table('cities')->insert([\n            ['name' => 'Tokyo', 'country_code' => 'JP'],\n            ['name' => 'Jakarta', 'country_code' => 'ID'],\n            ['name' => 'Delhi', 'country_code' => 'IN'],\n            ['name' => 'Mumbai', 'country_code' => 'IN'],\n            ['name' => 'Manila', 'country_code' => 'PH'],\n            ['name' => 'Shanghai', 'country_code' => 'CN'],\n            ['name' => 'Sao Paulo', 'country_code' => 'BR'],\n            ['name' => 'Seoul', 'country_code' => 'KR'],\n            ['name' => 'Mexico City', 'country_code' => 'MX'],\n            ['name' => 'Guangzhou', 'country_code' => 'CN'],\n            ['name' => 'Beijing', 'country_code' => 'CN'],\n            ['name' => 'Cairo', 'country_code' => 'EG'],\n            ['name' => 'New York', 'country_code' => 'US'],\n            ['name' => 'Kolkata', 'country_code' => 'IN'],\n            ['name' => 'Moscow', 'country_code' => 'RU'],\n            ['name' => 'Bangkok', 'country_code' => 'TH'],\n            ['name' => 'Buenos Aires', 'country_code' => 'AR'],\n            ['name' => 'Shenzhen', 'country_code' => 'CN'],\n            ['name' => 'Dhaka', 'country_code' => 'BD'],\n            ['name' => 'Lagos', 'country_code' => 'NG'],\n            ['name' => 'Istanbul', 'country_code' => 'TR'],\n            ['name' => 'Osaka', 'country_code' => 'JP'],\n            ['name' => 'Karachi', 'country_code' => 'PK'],\n            ['name' => 'Bangalore', 'country_code' => 'IN'],\n            ['name' => 'Tehran', 'country_code' => 'IR'],\n            ['name' => 'Kinshasa', 'country_code' => 'CD'],\n            ['name' => 'Ho Chi Minh City', 'country_code' => 'VN'],\n            ['name' => 'Los Angeles', 'country_code' => 'US'],\n            ['name' => 'Rio de Janeiro', 'country_code' => 'BR'],\n            ['name' => 'Nanyang', 'country_code' => 'CN'],\n            ['name' => 'Baoding', 'country_code' => 'CN'],\n            ['name' => 'Chennai', 'country_code' => 'IN'],\n            ['name' => 'Chengdu', 'country_code' => 'CN'],\n            ['name' => 'Lahore', 'country_code' => 'PK'],\n            ['name' => 'Paris', 'country_code' => 'FR'],\n            ['name' => 'London', 'country_code' => 'GB'],\n            ['name' => 'Linyi', 'country_code' => 'CN'],\n            ['name' => 'Tianjin', 'country_code' => 'CN'],\n            ['name' => 'Shijiazhuang', 'country_code' => 'CN'],\n            ['name' => 'Zhoukou', 'country_code' => 'CN'],\n            ['name' => 'Lima', 'country_code' => 'PE'],\n            ['name' => 'Hyderabad', 'country_code' => 'IN'],\n            ['name' => 'Handan', 'country_code' => 'CN'],\n            ['name' => 'Bogota', 'country_code' => 'CO'],\n            ['name' => 'Weifang', 'country_code' => 'CN'],\n            ['name' => 'Nagoya', 'country_code' => 'JP'],\n            ['name' => 'Wuhan', 'country_code' => 'CN'],\n            ['name' => 'Heze', 'country_code' => 'CN'],\n            ['name' => 'Ganzhou', 'country_code' => 'CN'],\n            ['name' => 'Tongshan', 'country_code' => 'CN'],\n            ['name' => 'Chicago', 'country_code' => 'US'],\n            ['name' => 'Luanda', 'country_code' => 'AO'],\n            ['name' => 'Changsha', 'country_code' => 'CN'],\n            ['name' => 'Fuyang', 'country_code' => 'CN'],\n            ['name' => 'Kuala Lumpur', 'country_code' => 'MY'],\n            ['name' => 'Jining', 'country_code' => 'CN'],\n            ['name' => 'Dongguan', 'country_code' => 'CN'],\n            ['name' => 'Jinan', 'country_code' => 'CN'],\n            ['name' => 'Foshan', 'country_code' => 'CN'],\n            ['name' => 'Hanoi', 'country_code' => 'VN'],\n            ['name' => 'Pune', 'country_code' => 'IN'],\n            ['name' => 'Chongqing', 'country_code' => 'CN'],\n            ['name' => 'Changchun', 'country_code' => 'CN'],\n            ['name' => 'Zhumadian', 'country_code' => 'CN'],\n            ['name' => 'Ningbo', 'country_code' => 'CN'],\n            ['name' => 'Cangzhou', 'country_code' => 'CN'],\n            ['name' => 'Nanjing', 'country_code' => 'CN'],\n            ['name' => 'Hefei', 'country_code' => 'CN'],\n            ['name' => 'Ahmedabad', 'country_code' => 'IN'],\n            ['name' => 'Hong Kong', 'country_code' => 'HK'],\n            ['name' => 'Zhanjiang', 'country_code' => 'CN'],\n            ['name' => 'Shaoyang', 'country_code' => 'CN'],\n            ['name' => 'Hengyang', 'country_code' => 'CN'],\n            ['name' => 'Khartoum', 'country_code' => 'SD'],\n            ['name' => 'Nantong', 'country_code' => 'CN'],\n            ['name' => 'Yancheng', 'country_code' => 'CN'],\n            ['name' => 'Nanning', 'country_code' => 'CN'],\n            ['name' => 'Xi an', 'country_code' => 'CN'],\n            ['name' => 'Shenyang', 'country_code' => 'CN'],\n            ['name' => 'Tangshan', 'country_code' => 'CN'],\n            ['name' => 'Santiago', 'country_code' => 'CL'],\n            ['name' => 'Zhengzhou', 'country_code' => 'CN'],\n            ['name' => 'Shangqiu', 'country_code' => 'CN'],\n            ['name' => 'Yantai', 'country_code' => 'CN'],\n            ['name' => 'Riyadh', 'country_code' => 'SA'],\n            ['name' => 'Dar es Salaam', 'country_code' => 'TZ'],\n            ['name' => 'Xinyang', 'country_code' => 'CN'],\n            ['name' => 'Shangrao', 'country_code' => 'CN'],\n            ['name' => 'Luoyang', 'country_code' => 'CN'],\n            ['name' => 'Bijie', 'country_code' => 'CN'],\n            ['name' => 'Quanzhou', 'country_code' => 'CN'],\n            ['name' => 'Hangzhou', 'country_code' => 'CN'],\n            ['name' => 'Miami', 'country_code' => 'US'],\n            ['name' => 'Huanggang', 'country_code' => 'CN'],\n            ['name' => 'Maoming', 'country_code' => 'CN'],\n            ['name' => 'Kunming', 'country_code' => 'CN'],\n            ['name' => 'Nanchong', 'country_code' => 'CN'],\n            ['name' => 'Zunyi', 'country_code' => 'CN'],\n            ['name' => 'Jieyang', 'country_code' => 'CN'],\n            ['name' => 'Lu an', 'country_code' => 'CN'],\n            ['name' => 'Yichun', 'country_code' => 'CN'],\n            ['name' => 'Madrid', 'country_code' => 'ES'],\n            ['name' => 'Changde', 'country_code' => 'CN'],\n            ['name' => 'Taizhou', 'country_code' => 'CN'],\n            ['name' => 'Liaocheng', 'country_code' => 'CN'],\n            ['name' => 'Qujing', 'country_code' => 'CN'],\n            ['name' => 'Surat', 'country_code' => 'IN'],\n            ['name' => 'Baghdad', 'country_code' => 'IQ'],\n            ['name' => 'Qingdao', 'country_code' => 'CN'],\n            ['name' => 'Singapore', 'country_code' => 'SG'],\n            ['name' => 'Dallas', 'country_code' => 'US'],\n            ['name' => 'Dazhou', 'country_code' => 'CN'],\n            ['name' => 'Suzhou', 'country_code' => 'CN'],\n            ['name' => 'Xiangyang', 'country_code' => 'CN'],\n            ['name' => 'Philadelphia', 'country_code' => 'US'],\n            ['name' => 'Giza', 'country_code' => 'EG'],\n            ['name' => 'Nairobi', 'country_code' => 'KE'],\n            ['name' => 'Nangandao', 'country_code' => 'CN'],\n            ['name' => 'Ankara', 'country_code' => 'TR'],\n            ['name' => 'Tai an', 'country_code' => 'CN'],\n            ['name' => 'Yulin', 'country_code' => 'CN'],\n            ['name' => 'Dezhou', 'country_code' => 'CN'],\n            ['name' => 'Houston', 'country_code' => 'US'],\n            ['name' => 'Atlanta', 'country_code' => 'US'],\n            ['name' => 'Yongzhou', 'country_code' => 'CN'],\n            ['name' => 'Rangoon', 'country_code' => 'MM'],\n            ['name' => 'Toronto', 'country_code' => 'CA'],\n            ['name' => 'Suihua', 'country_code' => 'CN'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Qiqihar', 'country_code' => 'CN'],\n            ['name' => 'Jinhua', 'country_code' => 'CN'],\n            ['name' => 'Saint Petersburg', 'country_code' => 'RU'],\n            ['name' => 'Shantou', 'country_code' => 'CN'],\n            ['name' => 'Sydney', 'country_code' => 'AU'],\n            ['name' => 'Weinan', 'country_code' => 'CN'],\n            ['name' => 'Suqian', 'country_code' => 'CN'],\n            ['name' => 'Guadalajara', 'country_code' => 'MX'],\n            ['name' => 'Suzhou', 'country_code' => 'CN'],\n            ['name' => 'Fuzhou', 'country_code' => 'CN'],\n            ['name' => 'Zhaotong', 'country_code' => 'CN'],\n            ['name' => 'Pudong', 'country_code' => 'CN'],\n            ['name' => 'Belo Horizonte', 'country_code' => 'BR'],\n            ['name' => 'Zhangzhou', 'country_code' => 'CN'],\n            ['name' => 'Bozhou', 'country_code' => 'CN'],\n            ['name' => 'Melbourne', 'country_code' => 'AU'],\n            ['name' => 'Nanchang', 'country_code' => 'CN'],\n            ['name' => 'Xianyang', 'country_code' => 'CN'],\n            ['name' => 'Taizhou', 'country_code' => 'CN'],\n            ['name' => 'Surabaya', 'country_code' => 'ID'],\n            ['name' => 'Abidjan', 'country_code' => 'CI'],\n            ['name' => 'Huaihua', 'country_code' => 'CN'],\n            ['name' => 'Ji an', 'country_code' => 'CN'],\n            ['name' => 'Mianyang', 'country_code' => 'CN'],\n            ['name' => 'Xiaoganzhan', 'country_code' => 'CN'],\n            ['name' => 'Shaoxing', 'country_code' => 'CN'],\n            ['name' => 'Alexandria', 'country_code' => 'EG'],\n            ['name' => 'Yuncheng', 'country_code' => 'CN'],\n            ['name' => 'Pingdingshan', 'country_code' => 'CN'],\n            ['name' => 'Huizhou', 'country_code' => 'CN'],\n            ['name' => 'Huai an', 'country_code' => 'CN'],\n            ['name' => 'Xinpu', 'country_code' => 'CN'],\n            ['name' => 'Chenzhou', 'country_code' => 'CN'],\n            ['name' => 'Guilin', 'country_code' => 'CN'],\n            ['name' => 'Jiujiang', 'country_code' => 'CN'],\n            ['name' => 'Anqing', 'country_code' => 'CN'],\n            ['name' => 'Boston', 'country_code' => 'US'],\n            ['name' => 'Huanglongsi', 'country_code' => 'CN'],\n            ['name' => 'Jiangmen', 'country_code' => 'CN'],\n            ['name' => 'Changzhou', 'country_code' => 'CN'],\n            ['name' => 'Barcelona', 'country_code' => 'ES'],\n            ['name' => 'Wuxi', 'country_code' => 'CN'],\n            ['name' => 'Zibo', 'country_code' => 'CN'],\n            ['name' => 'Jiaxing', 'country_code' => 'CN'],\n            ['name' => 'Dalian', 'country_code' => 'CN'],\n            ['name' => 'Hengshui', 'country_code' => 'CN'],\n            ['name' => 'Harbin', 'country_code' => 'CN'],\n            ['name' => 'Yangzhou', 'country_code' => 'CN'],\n            ['name' => 'Yibin', 'country_code' => 'CN'],\n            ['name' => 'Johannesburg', 'country_code' => 'ZA'],\n            ['name' => 'Yiyang', 'country_code' => 'CN'],\n            ['name' => 'Meizhou', 'country_code' => 'CN'],\n            ['name' => 'Chifeng', 'country_code' => 'CN'],\n            ['name' => 'Casablanca', 'country_code' => 'MA'],\n            ['name' => 'Guiyang', 'country_code' => 'CN'],\n            ['name' => 'Langfang', 'country_code' => 'CN'],\n            ['name' => 'Zhangjiakou', 'country_code' => 'CN'],\n            ['name' => 'Izmir', 'country_code' => 'TR'],\n            ['name' => 'Linfen', 'country_code' => 'CN'],\n            ['name' => 'Wenzhou', 'country_code' => 'CN'],\n            ['name' => 'Monterrey', 'country_code' => 'MX'],\n            ['name' => 'Luzhou', 'country_code' => 'CN'],\n            ['name' => 'Jiangguanchi', 'country_code' => 'CN'],\n            ['name' => 'Neijiang', 'country_code' => 'CN'],\n            ['name' => 'Phoenix', 'country_code' => 'US'],\n            ['name' => 'Yanjiang', 'country_code' => 'CN'],\n            ['name' => 'Zhaoqing', 'country_code' => 'CN'],\n            ['name' => 'Xiaoxita', 'country_code' => 'CN'],\n            ['name' => 'Guigang', 'country_code' => 'CN'],\n            ['name' => 'Xiamen', 'country_code' => 'CN'],\n            ['name' => 'Chuzhou', 'country_code' => 'CN'],\n            ['name' => 'Fuzhou', 'country_code' => 'CN'],\n            ['name' => 'Zhuzhou', 'country_code' => 'CN'],\n            ['name' => 'Amman', 'country_code' => 'JO'],\n            ['name' => 'Jeddah', 'country_code' => 'SA'],\n            ['name' => 'Loudi', 'country_code' => 'CN'],\n            ['name' => 'Deyang', 'country_code' => 'CN'],\n            ['name' => 'Qingyuan', 'country_code' => 'CN'],\n            ['name' => 'Wuhu', 'country_code' => 'CN'],\n            ['name' => 'Hechi', 'country_code' => 'CN'],\n            ['name' => 'Seattle', 'country_code' => 'US'],\n            ['name' => 'Binzhou', 'country_code' => 'CN'],\n            ['name' => 'Yokohama', 'country_code' => 'JP'],\n            ['name' => 'Liuzhou', 'country_code' => 'CN'],\n            ['name' => 'Baojishi', 'country_code' => 'CN'],\n            ['name' => 'Guang an', 'country_code' => 'CN'],\n            ['name' => 'Hanzhong', 'country_code' => 'CN'],\n            ['name' => 'Kabul', 'country_code' => 'AF'],\n            ['name' => 'Zaozhuang', 'country_code' => 'CN'],\n            ['name' => 'Berlin', 'country_code' => 'DE'],\n            ['name' => 'Anshan', 'country_code' => 'CN'],\n            ['name' => 'Lanzhou', 'country_code' => 'CN'],\n            ['name' => 'Chengde', 'country_code' => 'CN'],\n            ['name' => 'San Francisco', 'country_code' => 'US'],\n            ['name' => 'Puyang', 'country_code' => 'CN'],\n            ['name' => 'Suining', 'country_code' => 'CN'],\n            ['name' => 'Jiaozuo', 'country_code' => 'CN'],\n            ['name' => 'Bengbu', 'country_code' => 'CN'],\n            ['name' => 'Montreal', 'country_code' => 'CA'],\n            ['name' => 'Detroit', 'country_code' => 'US'],\n            ['name' => 'Baicheng', 'country_code' => 'CN'],\n            ['name' => 'Busan', 'country_code' => 'KR'],\n            ['name' => 'Algiers', 'country_code' => 'DZ'],\n            ['name' => 'Qincheng', 'country_code' => 'CN'],\n            ['name' => 'Taiyuan', 'country_code' => 'CN'],\n            ['name' => 'Shiyan', 'country_code' => 'CN'],\n            ['name' => 'Lucknow', 'country_code' => 'IN'],\n            ['name' => 'Chaoyang', 'country_code' => 'CN'],\n            ['name' => 'Hechi', 'country_code' => 'CN'],\n            ['name' => 'Leshan', 'country_code' => 'CN'],\n            ['name' => 'Yulinshi', 'country_code' => 'CN'],\n            ['name' => 'Siping', 'country_code' => 'CN'],\n            ['name' => 'Zhongshan', 'country_code' => 'CN'],\n            ['name' => 'Changzhi', 'country_code' => 'CN'],\n            ['name' => 'San Diego', 'country_code' => 'US'],\n            ['name' => 'Faisalabad', 'country_code' => 'PK'],\n            ['name' => 'Santa Cruz', 'country_code' => 'BO'],\n            ['name' => 'Qinhuangdao', 'country_code' => 'CN'],\n            ['name' => 'Bazhou', 'country_code' => 'CN'],\n            ['name' => 'Zhenjiang', 'country_code' => 'CN'],\n            ['name' => 'Urumqi', 'country_code' => 'CN'],\n            ['name' => 'Tongliao', 'country_code' => 'CN'],\n            ['name' => 'Heyuan', 'country_code' => 'CN'],\n            ['name' => 'Tongren', 'country_code' => 'CN'],\n            ['name' => 'Qinzhou', 'country_code' => 'CN'],\n            ['name' => 'Jaipur', 'country_code' => 'IN'],\n            ['name' => 'Xinzhou', 'country_code' => 'CN'],\n            ['name' => 'Addis Ababa', 'country_code' => 'ET'],\n            ['name' => 'Meishan', 'country_code' => 'CN'],\n            ['name' => 'Brasilia', 'country_code' => 'BR'],\n            ['name' => 'Mashhad', 'country_code' => 'IR'],\n            ['name' => 'Jinzhou', 'country_code' => 'CN'],\n            ['name' => 'Tieling', 'country_code' => 'CN'],\n            ['name' => 'Shaoguan', 'country_code' => 'CN'],\n            ['name' => 'Kuwait City', 'country_code' => 'KW'],\n            ['name' => 'Shanwei', 'country_code' => 'CN'],\n            ['name' => 'Minneapolis', 'country_code' => 'US'],\n            ['name' => 'Kyiv', 'country_code' => 'UA'],\n            ['name' => 'Sanaa', 'country_code' => 'YE'],\n            ['name' => 'Quezon City', 'country_code' => 'PH'],\n            ['name' => 'Dingxi', 'country_code' => 'CN'],\n            ['name' => 'Incheon', 'country_code' => 'KR'],\n            ['name' => 'Bursa', 'country_code' => 'TR'],\n            ['name' => 'Ningde', 'country_code' => 'CN'],\n            ['name' => 'Tampa', 'country_code' => 'US'],\n            ['name' => 'Daqing', 'country_code' => 'CN'],\n            ['name' => 'Birmingham', 'country_code' => 'GB'],\n            ['name' => 'Putian', 'country_code' => 'CN'],\n            ['name' => 'Huzhou', 'country_code' => 'CN'],\n            ['name' => 'Salvador', 'country_code' => 'BR'],\n            ['name' => 'Wuzhou', 'country_code' => 'CN'],\n            ['name' => 'Xiangtan', 'country_code' => 'CN'],\n            ['name' => 'Denver', 'country_code' => 'US'],\n            ['name' => 'Rome', 'country_code' => 'IT'],\n            ['name' => 'La Paz', 'country_code' => 'BO'],\n            ['name' => 'Pyongyang', 'country_code' => 'KP'],\n            ['name' => 'Kano', 'country_code' => 'NG'],\n            ['name' => 'Taichung', 'country_code' => 'TW'],\n            ['name' => 'Omdurman', 'country_code' => 'SD'],\n            ['name' => 'Zigong', 'country_code' => 'CN'],\n            ['name' => 'Mudanjiang', 'country_code' => 'CN'],\n            ['name' => 'Huludao', 'country_code' => 'CN'],\n            ['name' => 'Kaohsiung', 'country_code' => 'TW'],\n            ['name' => 'Guayaquil', 'country_code' => 'EC'],\n            ['name' => 'Rizhao', 'country_code' => 'CN'],\n            ['name' => 'Manchester', 'country_code' => 'GB'],\n            ['name' => 'Cawnpore', 'country_code' => 'IN'],\n            ['name' => 'Baotou', 'country_code' => 'CN'],\n            ['name' => 'Taipei', 'country_code' => 'TW'],\n            ['name' => 'Nanping', 'country_code' => 'CN'],\n            ['name' => 'Chaozhou', 'country_code' => 'CN'],\n            ['name' => 'Longyan', 'country_code' => 'CN'],\n            ['name' => 'Ibadan', 'country_code' => 'NG'],\n            ['name' => 'Hohhot', 'country_code' => 'CN'],\n            ['name' => 'Antananarivo', 'country_code' => 'MG'],\n            ['name' => 'Longba', 'country_code' => 'CN'],\n            ['name' => 'Weihai', 'country_code' => 'CN'],\n            ['name' => 'Chattogram', 'country_code' => 'BD'],\n            ['name' => 'Santo Domingo', 'country_code' => 'DO'],\n            ['name' => 'Xuanzhou', 'country_code' => 'CN'],\n            ['name' => 'Sanming', 'country_code' => 'CN'],\n            ['name' => 'Brooklyn', 'country_code' => 'US'],\n            ['name' => 'Yangjiang', 'country_code' => 'CN'],\n            ['name' => 'Medellin', 'country_code' => 'CO'],\n            ['name' => 'Yunfu', 'country_code' => 'CN'],\n            ['name' => 'Brisbane', 'country_code' => 'AU'],\n            ['name' => 'Baoshan', 'country_code' => 'CN'],\n            ['name' => 'Dubai', 'country_code' => 'AE'],\n            ['name' => 'Luohe', 'country_code' => 'CN'],\n            ['name' => 'Qinbaling', 'country_code' => 'CN'],\n            ['name' => 'Mirzapur', 'country_code' => 'IN'],\n            ['name' => 'Guangyuan', 'country_code' => 'CN'],\n            ['name' => 'Cali', 'country_code' => 'CO'],\n            ['name' => 'Huangshi', 'country_code' => 'CN'],\n            ['name' => 'Daegu', 'country_code' => 'KR'],\n            ['name' => 'Fortaleza', 'country_code' => 'BR'],\n            ['name' => 'Guatemala City', 'country_code' => 'GT'],\n            ['name' => 'Yaounde', 'country_code' => 'CM'],\n            ['name' => 'Douala', 'country_code' => 'CM'],\n            ['name' => 'Jilin', 'country_code' => 'CN'],\n            ['name' => 'Lianshan', 'country_code' => 'CN'],\n            ['name' => 'Lincang', 'country_code' => 'CN'],\n            ['name' => 'Antalya', 'country_code' => 'TR'],\n            ['name' => 'Tashkent', 'country_code' => 'UZ'],\n            ['name' => 'Bandung', 'country_code' => 'ID'],\n            ['name' => 'Nagpur', 'country_code' => 'IN'],\n            ['name' => 'Huainan', 'country_code' => 'CN'],\n            ['name' => 'Dandong', 'country_code' => 'CN'],\n            ['name' => 'Shangzhou', 'country_code' => 'CN'],\n            ['name' => 'Bekasi', 'country_code' => 'ID'],\n            ['name' => 'Ghaziabad', 'country_code' => 'IN'],\n            ['name' => 'Tijuana', 'country_code' => 'MX'],\n            ['name' => 'Jiamusi', 'country_code' => 'CN'],\n            ['name' => 'Accra', 'country_code' => 'GH'],\n            ['name' => 'Yuxi', 'country_code' => 'CN'],\n            ['name' => 'Anshun', 'country_code' => 'CN'],\n            ['name' => 'Vancouver', 'country_code' => 'CA'],\n            ['name' => 'Tangerang', 'country_code' => 'ID'],\n            ['name' => 'Konya', 'country_code' => 'TR'],\n            ['name' => 'Queens', 'country_code' => 'US'],\n            ['name' => 'Yingkou', 'country_code' => 'CN'],\n            ['name' => 'Adana', 'country_code' => 'TR'],\n            ['name' => 'Medan', 'country_code' => 'ID'],\n            ['name' => 'Sanmenxia', 'country_code' => 'CN'],\n            ['name' => 'Indore', 'country_code' => 'IN'],\n            ['name' => 'Ma anshan', 'country_code' => 'CN'],\n            ['name' => 'Pingliang', 'country_code' => 'CN'],\n            ['name' => 'Quzhou', 'country_code' => 'CN'],\n            ['name' => 'Baku', 'country_code' => 'AZ'],\n            ['name' => 'Gaoping', 'country_code' => 'CN'],\n            ['name' => 'Huaibei', 'country_code' => 'CN'],\n            ['name' => 'Xining', 'country_code' => 'CN'],\n            ['name' => 'Harare', 'country_code' => 'ZW'],\n            ['name' => 'Yan an', 'country_code' => 'CN'],\n            ['name' => 'Havana', 'country_code' => 'CU'],\n            ['name' => 'Phnom Penh', 'country_code' => 'KH'],\n            ['name' => 'Fukuoka', 'country_code' => 'JP'],\n            ['name' => 'Mogadishu', 'country_code' => 'SO'],\n            ['name' => 'Jincheng', 'country_code' => 'CN'],\n            ['name' => 'Puning', 'country_code' => 'CN'],\n            ['name' => 'Lishui', 'country_code' => 'CN'],\n            ['name' => 'Qingyang', 'country_code' => 'CN'],\n            ['name' => 'Riverside', 'country_code' => 'US'],\n            ['name' => 'Baltimore', 'country_code' => 'US'],\n            ['name' => 'Haiphong', 'country_code' => 'VN'],\n            ['name' => 'Las Vegas', 'country_code' => 'US'],\n            ['name' => 'Laibin', 'country_code' => 'CN'],\n            ['name' => 'Rawalpindi', 'country_code' => 'PK'],\n            ['name' => 'Kumasi', 'country_code' => 'GH'],\n            ['name' => 'Portland', 'country_code' => 'US'],\n            ['name' => 'Vadodara', 'country_code' => 'IN'],\n            ['name' => 'Perth', 'country_code' => 'AU'],\n            ['name' => 'San Antonio', 'country_code' => 'US'],\n            ['name' => 'Vishakhapatnam', 'country_code' => 'IN'],\n            ['name' => 'Gujranwala', 'country_code' => 'PK'],\n            ['name' => 'Gaziantep', 'country_code' => 'TR'],\n            ['name' => 'Fushun', 'country_code' => 'CN'],\n            ['name' => 'St. Louis', 'country_code' => 'US'],\n            ['name' => 'Bamako', 'country_code' => 'ML'],\n            ['name' => 'Quito', 'country_code' => 'EC'],\n            ['name' => 'Minsk', 'country_code' => 'BY'],\n            ['name' => 'Pingxiang', 'country_code' => 'CN'],\n            ['name' => 'Chongzuo', 'country_code' => 'CN'],\n            ['name' => 'Sanliurfa', 'country_code' => 'TR'],\n            ['name' => 'Kananga', 'country_code' => 'CD'],\n            ['name' => 'Peshawar', 'country_code' => 'PK'],\n            ['name' => 'Sapporo', 'country_code' => 'JP'],\n            ['name' => 'Hezhou', 'country_code' => 'CN'],\n            ['name' => 'Jixi', 'country_code' => 'CN'],\n            ['name' => 'Caracas', 'country_code' => 'VE'],\n            ['name' => 'Fuxin', 'country_code' => 'CN'],\n            ['name' => 'Aleppo', 'country_code' => 'SY'],\n            ['name' => 'Almaty', 'country_code' => 'KZ'],\n            ['name' => 'Dayr az Zawr', 'country_code' => 'SY'],\n            ['name' => 'Vienna', 'country_code' => 'AT'],\n            ['name' => 'Leeds', 'country_code' => 'GB'],\n            ['name' => 'Sacramento', 'country_code' => 'US'],\n            ['name' => 'Blantyre', 'country_code' => 'MW'],\n            ['name' => 'Tainan', 'country_code' => 'TW'],\n            ['name' => 'Zhuhai', 'country_code' => 'CN'],\n            ['name' => 'Bucharest', 'country_code' => 'RO'],\n            ['name' => 'Wuwei', 'country_code' => 'CN'],\n            ['name' => 'Bhopal', 'country_code' => 'IN'],\n            ['name' => 'Curitiba', 'country_code' => 'BR'],\n            ['name' => 'Multan', 'country_code' => 'PK'],\n            ['name' => 'Xiping', 'country_code' => 'CN'],\n            ['name' => 'Asuncion', 'country_code' => 'PY'],\n            ['name' => 'Saidu Sharif', 'country_code' => 'PK'],\n            ['name' => 'Hamburg', 'country_code' => 'DE'],\n            ['name' => 'Meru', 'country_code' => 'KE'],\n            ['name' => 'Brazzaville', 'country_code' => 'CG'],\n            ['name' => 'Orlando', 'country_code' => 'US'],\n            ['name' => 'Mersin', 'country_code' => 'TR'],\n            ['name' => 'Kyoto', 'country_code' => 'JP'],\n            ['name' => 'Manaus', 'country_code' => 'BR'],\n            ['name' => 'Liaoyang', 'country_code' => 'CN'],\n            ['name' => 'Baiyin', 'country_code' => 'CN'],\n            ['name' => 'San Jose', 'country_code' => 'US'],\n            ['name' => 'Warsaw', 'country_code' => 'PL'],\n            ['name' => 'Shengli', 'country_code' => 'CN'],\n            ['name' => 'Lubumbashi', 'country_code' => 'CD'],\n            ['name' => 'Haikou', 'country_code' => 'CN'],\n            ['name' => 'Damascus', 'country_code' => 'SY'],\n            ['name' => 'Shuyangzha', 'country_code' => 'CN'],\n            ['name' => 'Brussels', 'country_code' => 'BE'],\n            ['name' => 'Esfahan', 'country_code' => 'IR'],\n            ['name' => 'Budapest', 'country_code' => 'HU'],\n            ['name' => 'Heihe', 'country_code' => 'CN'],\n            ['name' => 'Lusaka', 'country_code' => 'ZM'],\n            ['name' => 'Hyderabad City', 'country_code' => 'PK'],\n            ['name' => 'Diyarbakir', 'country_code' => 'TR'],\n            ['name' => 'Chinchvad', 'country_code' => 'IN'],\n            ['name' => 'Shuozhou', 'country_code' => 'CN'],\n            ['name' => 'Cleveland', 'country_code' => 'US'],\n            ['name' => 'Pittsburgh', 'country_code' => 'US'],\n            ['name' => 'Patna', 'country_code' => 'IN'],\n            ['name' => 'Mosul', 'country_code' => 'IQ'],\n            ['name' => 'Austin', 'country_code' => 'US'],\n            ['name' => 'Sanzhou', 'country_code' => 'CN'],\n            ['name' => 'Mecca', 'country_code' => 'SA'],\n            ['name' => 'Conakry', 'country_code' => 'GN'],\n            ['name' => 'Kampala', 'country_code' => 'UG'],\n            ['name' => 'Ecatepec', 'country_code' => 'MX'],\n            ['name' => 'Cincinnati', 'country_code' => 'US'],\n            ['name' => 'Makassar', 'country_code' => 'ID'],\n            ['name' => 'Yushan', 'country_code' => 'CN'],\n            ['name' => 'Ludhiana', 'country_code' => 'IN'],\n            ['name' => 'Newcastle', 'country_code' => 'GB'],\n            ['name' => 'Depok', 'country_code' => 'ID'],\n            ['name' => 'Zhongli', 'country_code' => 'TW'],\n            ['name' => 'Kansas City', 'country_code' => 'US'],\n            ['name' => 'Ouagadougou', 'country_code' => 'BF'],\n            ['name' => 'Davao', 'country_code' => 'PH'],\n            ['name' => 'Manhattan', 'country_code' => 'US'],\n            ['name' => 'Semarang', 'country_code' => 'ID'],\n            ['name' => 'Yinchuan', 'country_code' => 'CN'],\n            ['name' => 'Caloocan City', 'country_code' => 'PH'],\n            ['name' => 'Novosibirsk', 'country_code' => 'RU'],\n            ['name' => 'Chengtangcun', 'country_code' => 'CN'],\n            ['name' => 'Agra', 'country_code' => 'IN'],\n            ['name' => 'Karaj', 'country_code' => 'IR'],\n            ['name' => 'Indianapolis', 'country_code' => 'US'],\n            ['name' => 'Jingdezhen', 'country_code' => 'CN'],\n            ['name' => 'Puebla', 'country_code' => 'MX'],\n            ['name' => 'Kalyan', 'country_code' => 'IN'],\n            ['name' => 'Madurai', 'country_code' => 'IN'],\n            ['name' => 'Benxi', 'country_code' => 'CN'],\n            ['name' => 'Jamshedpur', 'country_code' => 'IN'],\n            ['name' => 'Recife', 'country_code' => 'BR'],\n            ['name' => 'Columbus', 'country_code' => 'US'],\n            ['name' => 'Tabriz', 'country_code' => 'IR'],\n            ['name' => 'Maracaibo', 'country_code' => 'VE'],\n            ['name' => 'Zhangjiajie', 'country_code' => 'CN'],\n            ['name' => 'Beihai', 'country_code' => 'CN'],\n            ['name' => 'Shuangyashan', 'country_code' => 'CN'],\n            ['name' => 'Kobe', 'country_code' => 'JP'],\n            ['name' => 'Charlotte', 'country_code' => 'US'],\n            ['name' => 'Yucheng', 'country_code' => 'CN'],\n            ['name' => 'Changshu', 'country_code' => 'CN'],\n            ['name' => 'Lianjiang', 'country_code' => 'CN'],\n            ['name' => 'Ximeicun', 'country_code' => 'CN'],\n            ['name' => 'Jianguang', 'country_code' => 'CN'],\n            ['name' => 'Madinat as Sadis min Uktubar', 'country_code' => 'EG'],\n            ['name' => 'Xushan', 'country_code' => 'CN'],\n            ['name' => 'Belem', 'country_code' => 'BR'],\n            ['name' => 'Guiping', 'country_code' => 'CN'],\n            ['name' => 'Leizhou', 'country_code' => 'CN'],\n            ['name' => 'Gwangju', 'country_code' => 'KR'],\n            ['name' => 'Nasik', 'country_code' => 'IN'],\n            ['name' => 'Porto Alegre', 'country_code' => 'BR'],\n            ['name' => 'Valencia', 'country_code' => 'VE'],\n            ['name' => 'Onitsha', 'country_code' => 'NG'],\n            ['name' => 'Virginia Beach', 'country_code' => 'US'],\n            ['name' => 'Daejeon', 'country_code' => 'KR'],\n            ['name' => 'Munich', 'country_code' => 'DE'],\n            ['name' => 'Auckland', 'country_code' => 'NZ'],\n            ['name' => 'Yekaterinburg', 'country_code' => 'RU'],\n            ['name' => 'Huangshan', 'country_code' => 'CN'],\n            ['name' => 'Huazhou', 'country_code' => 'CN'],\n            ['name' => 'Shiraz', 'country_code' => 'IR'],\n            ['name' => 'Pizhou', 'country_code' => 'CN'],\n            ['name' => 'Palembang', 'country_code' => 'ID'],\n            ['name' => 'Leon de los Aldama', 'country_code' => 'MX'],\n            ['name' => 'El Kelaa des Srarhna', 'country_code' => 'MA'],\n            ['name' => 'Kharkiv', 'country_code' => 'UA'],\n            ['name' => 'Kawanakajima', 'country_code' => 'JP'],\n            ['name' => 'Yangshe', 'country_code' => 'CN'],\n            ['name' => 'Chizhou', 'country_code' => 'CN'],\n            ['name' => 'Guyuan', 'country_code' => 'CN'],\n            ['name' => 'Rui an', 'country_code' => 'CN'],\n            ['name' => 'Birstall', 'country_code' => 'GB'],\n            ['name' => 'Muscat', 'country_code' => 'OM'],\n            ['name' => 'Hebi', 'country_code' => 'CN'],\n            ['name' => 'Bronx', 'country_code' => 'US'],\n            ['name' => 'Gaozhou', 'country_code' => 'CN'],\n            ['name' => 'The Hague', 'country_code' => 'NL'],\n            ['name' => 'Owerri', 'country_code' => 'NG'],\n            ['name' => 'Sharjah', 'country_code' => 'AE'],\n            ['name' => 'Faridabad', 'country_code' => 'IN'],\n            ['name' => 'Ulaanbaatar', 'country_code' => 'MN'],\n            ['name' => 'Goiania', 'country_code' => 'BR'],\n            ['name' => 'Kayseri', 'country_code' => 'TR'],\n            ['name' => 'Yueqing', 'country_code' => 'CN'],\n            ['name' => 'Belgrade', 'country_code' => 'RS'],\n            ['name' => 'Pingdu', 'country_code' => 'CN'],\n            ['name' => 'Milan', 'country_code' => 'IT'],\n            ['name' => 'Aurangabad', 'country_code' => 'IN'],\n            ['name' => 'Yutan', 'country_code' => 'CN'],\n            ['name' => 'Wenling', 'country_code' => 'CN'],\n            ['name' => 'Milwaukee', 'country_code' => 'US'],\n            ['name' => 'Sofia', 'country_code' => 'BG'],\n            ['name' => 'Adelaide', 'country_code' => 'AU'],\n            ['name' => 'Prague', 'country_code' => 'CZ'],\n            ['name' => 'Samsun', 'country_code' => 'TR'],\n            ['name' => 'Rajkot', 'country_code' => 'IN'],\n            ['name' => 'Liangshi', 'country_code' => 'CN'],\n            ['name' => 'Khulna', 'country_code' => 'BD'],\n            ['name' => 'Cordoba', 'country_code' => 'AR'],\n            ['name' => 'Guarulhos', 'country_code' => 'BR'],\n            ['name' => 'Juarez', 'country_code' => 'MX'],\n            ['name' => 'Saitama', 'country_code' => 'JP'],\n            ['name' => 'Montevideo', 'country_code' => 'UY'],\n            ['name' => 'Mbuji-Mayi', 'country_code' => 'CD'],\n            ['name' => 'Fuqing', 'country_code' => 'CN'],\n            ['name' => 'Xintai', 'country_code' => 'CN'],\n            ['name' => 'Doha', 'country_code' => 'QA'],\n            ['name' => 'Hiroshima', 'country_code' => 'JP'],\n            ['name' => 'Meerut', 'country_code' => 'IN'],\n            ['name' => 'Yushu', 'country_code' => 'CN'],\n            ['name' => 'Rongcheng', 'country_code' => 'CN'],\n            ['name' => 'Huazhou', 'country_code' => 'CN'],\n            ['name' => 'Yangquan', 'country_code' => 'CN'],\n            ['name' => 'Haicheng', 'country_code' => 'CN'],\n            ['name' => 'Yingtan', 'country_code' => 'CN'],\n            ['name' => 'Huaiyin', 'country_code' => 'CN'],\n            ['name' => 'Wuzhong', 'country_code' => 'CN'],\n            ['name' => 'Barranquilla', 'country_code' => 'CO'],\n            ['name' => 'Jabalpur', 'country_code' => 'IN'],\n            ['name' => 'Thane', 'country_code' => 'IN'],\n            ['name' => 'Zhangye', 'country_code' => 'CN'],\n            ['name' => 'Rucheng', 'country_code' => 'CN'],\n            ['name' => 'Nizhniy Novgorod', 'country_code' => 'RU'],\n            ['name' => 'Comayaguela', 'country_code' => 'HN'],\n            ['name' => 'Shaoyang', 'country_code' => 'CN'],\n            ['name' => 'Dhanbad', 'country_code' => 'IN'],\n            ['name' => 'Yichun', 'country_code' => 'CN'],\n            ['name' => 'Laiwu', 'country_code' => 'CN'],\n            ['name' => 'Jingling', 'country_code' => 'CN'],\n            ['name' => 'Kazan', 'country_code' => 'RU'],\n            ['name' => 'Dayan', 'country_code' => 'CN'],\n            ['name' => 'Suwon', 'country_code' => 'KR'],\n            ['name' => 'Jiangyin', 'country_code' => 'CN'],\n            ['name' => 'Yongcheng', 'country_code' => 'CN'],\n            ['name' => 'Calgary', 'country_code' => 'CA'],\n            ['name' => 'Can Tho', 'country_code' => 'VN'],\n            ['name' => 'Abuja', 'country_code' => 'NG'],\n            ['name' => 'Yiwu', 'country_code' => 'CN'],\n            ['name' => 'Mandalay', 'country_code' => 'MM'],\n            ['name' => 'Beidao', 'country_code' => 'CN'],\n            ['name' => 'Al Basrah', 'country_code' => 'IQ'],\n            ['name' => 'Shuangshui', 'country_code' => 'CN'],\n            ['name' => 'Vila Velha', 'country_code' => 'BR'],\n            ['name' => 'Allahabad', 'country_code' => 'IN'],\n            ['name' => 'Varanasi', 'country_code' => 'IN'],\n            ['name' => 'Chelyabinsk', 'country_code' => 'RU'],\n            ['name' => 'Mombasa', 'country_code' => 'KE'],\n            ['name' => 'Providence', 'country_code' => 'US'],\n            ['name' => 'Qom', 'country_code' => 'IR'],\n            ['name' => 'Maiduguri', 'country_code' => 'NG'],\n            ['name' => 'Maputo', 'country_code' => 'MZ'],\n            ['name' => 'Rosario', 'country_code' => 'AR'],\n            ['name' => 'Benin City', 'country_code' => 'NG'],\n            ['name' => 'Xinyu', 'country_code' => 'CN'],\n            ['name' => 'Pikine', 'country_code' => 'SN'],\n            ['name' => 'Ahvaz', 'country_code' => 'IR'],\n            ['name' => 'Dublin', 'country_code' => 'IE'],\n            ['name' => 'Jacksonville', 'country_code' => 'US'],\n            ['name' => 'Medina', 'country_code' => 'SA'],\n            ['name' => 'Srinagar', 'country_code' => 'IN'],\n            ['name' => 'Omsk', 'country_code' => 'RU'],\n            ['name' => 'Cilacap', 'country_code' => 'ID'],\n            ['name' => 'Bandar Lampung', 'country_code' => 'ID'],\n            ['name' => 'Samara', 'country_code' => 'RU'],\n            ['name' => 'Guankou', 'country_code' => 'CN'],\n            ['name' => 'Ulsan', 'country_code' => 'KR'],\n            ['name' => 'Dingzhou', 'country_code' => 'CN'],\n            ['name' => 'Campinas', 'country_code' => 'BR'],\n            ['name' => 'Lianyuan', 'country_code' => 'CN'],\n            ['name' => 'Rongcheng', 'country_code' => 'CN'],\n            ['name' => 'Kaiyuan', 'country_code' => 'CN'],\n            ['name' => 'Nay Pyi Taw', 'country_code' => 'MM'],\n            ['name' => 'Dakar', 'country_code' => 'SN'],\n            ['name' => 'Zhuji', 'country_code' => 'CN'],\n            ['name' => 'Kigali', 'country_code' => 'RW'],\n            ['name' => 'Zapopan', 'country_code' => 'MX'],\n            ['name' => 'Leiyang', 'country_code' => 'CN'],\n            ['name' => 'Santiago', 'country_code' => 'DO'],\n            ['name' => 'Dadukou', 'country_code' => 'CN'],\n            ['name' => 'Xiantao', 'country_code' => 'CN'],\n            ['name' => 'Amritsar', 'country_code' => 'IN'],\n            ['name' => 'Callao', 'country_code' => 'PE'],\n            ['name' => 'Aligarh', 'country_code' => 'IN'],\n            ['name' => 'Yingchuan', 'country_code' => 'CN'],\n            ['name' => 'Tegucigalpa', 'country_code' => 'HN'],\n            ['name' => 'Ciudad Nezahualcoyotl', 'country_code' => 'MX'],\n            ['name' => 'Tripoli', 'country_code' => 'LY'],\n            ['name' => 'Rostov', 'country_code' => 'RU'],\n            ['name' => 'Nezahualcoyotl', 'country_code' => 'MX'],\n            ['name' => 'Bhiwandi', 'country_code' => 'IN'],\n            ['name' => 'Zhoushan', 'country_code' => 'CN'],\n            ['name' => 'Tbilisi', 'country_code' => 'GE'],\n            ['name' => 'Ufa', 'country_code' => 'RU'],\n            ['name' => 'Fes', 'country_code' => 'MA'],\n            ['name' => 'Sevilla', 'country_code' => 'ES'],\n            ['name' => 'Mexicali', 'country_code' => 'MX'],\n            ['name' => 'Bien Hoa', 'country_code' => 'VN'],\n            ['name' => 'Gwalior', 'country_code' => 'IN'],\n            ['name' => 'Ankang', 'country_code' => 'CN'],\n            ['name' => 'Ikare', 'country_code' => 'NG'],\n            ['name' => 'Huambo', 'country_code' => 'AO'],\n            ['name' => 'Hegang', 'country_code' => 'CN'],\n            ['name' => 'Salt Lake City', 'country_code' => 'US'],\n            ['name' => 'Bhilai', 'country_code' => 'IN'],\n            ['name' => 'Yuyao', 'country_code' => 'CN'],\n            ['name' => 'N Djamena', 'country_code' => 'TD'],\n            ['name' => 'Hanchuan', 'country_code' => 'CN'],\n            ['name' => 'Gongzhuling', 'country_code' => 'CN'],\n            ['name' => 'Irbid', 'country_code' => 'JO'],\n            ['name' => 'Haora', 'country_code' => 'IN'],\n            ['name' => 'Cologne', 'country_code' => 'DE'],\n            ['name' => 'Krasnoyarsk', 'country_code' => 'RU'],\n            ['name' => 'Yicheng', 'country_code' => 'CN'],\n            ['name' => 'Sao Goncalo', 'country_code' => 'BR'],\n            ['name' => 'Nashville', 'country_code' => 'US'],\n            ['name' => 'Yerevan', 'country_code' => 'AM'],\n            ['name' => 'Ranchi', 'country_code' => 'IN'],\n            ['name' => 'Nur-Sultan', 'country_code' => 'KZ'],\n            ['name' => 'Nouakchott', 'country_code' => 'MR'],\n            ['name' => 'Vereeniging', 'country_code' => 'ZA'],\n            ['name' => 'Richmond', 'country_code' => 'US'],\n            ['name' => 'Sao Luis', 'country_code' => 'BR'],\n            ['name' => 'San Pedro Sula', 'country_code' => 'HN'],\n            ['name' => 'Taixing', 'country_code' => 'CN'],\n            ['name' => 'Memphis', 'country_code' => 'US'],\n            ['name' => 'Goyang', 'country_code' => 'KR'],\n            ['name' => 'Bezwada', 'country_code' => 'IN'],\n            ['name' => 'Edmonton', 'country_code' => 'CA'],\n            ['name' => 'Mizhou', 'country_code' => 'CN'],\n            ['name' => 'Tunis', 'country_code' => 'TN'],\n            ['name' => 'Xishan', 'country_code' => 'CN'],\n            ['name' => 'Ezhou', 'country_code' => 'CN'],\n            ['name' => 'Barquisimeto', 'country_code' => 'VE'],\n            ['name' => 'Sendai', 'country_code' => 'JP'],\n            ['name' => 'Voronezh', 'country_code' => 'RU'],\n            ['name' => 'Perm', 'country_code' => 'RU'],\n            ['name' => 'Changwon', 'country_code' => 'KR'],\n            ['name' => 'Zhongwei', 'country_code' => 'CN'],\n            ['name' => 'Shouguang', 'country_code' => 'CN'],\n            ['name' => 'Bogor', 'country_code' => 'ID'],\n            ['name' => 'Raleigh', 'country_code' => 'US'],\n            ['name' => 'Cartagena', 'country_code' => 'CO'],\n            ['name' => 'Chandigarh', 'country_code' => 'IN'],\n            ['name' => 'Bishkek', 'country_code' => 'KG'],\n            ['name' => 'Matola', 'country_code' => 'MZ'],\n            ['name' => 'Ogbomoso', 'country_code' => 'NG'],\n            ['name' => 'Ashgabat', 'country_code' => 'TM'],\n            ['name' => 'Maceio', 'country_code' => 'BR'],\n            ['name' => 'Niamey', 'country_code' => 'NE'],\n            ['name' => 'Managua', 'country_code' => 'NI'],\n            ['name' => 'Patam', 'country_code' => 'ID'],\n            ['name' => 'Tekirdag', 'country_code' => 'TR'],\n            ['name' => 'Shubra al Khaymah', 'country_code' => 'EG'],\n            ['name' => 'Linhai', 'country_code' => 'CN'],\n            ['name' => 'Monrovia', 'country_code' => 'LR'],\n            ['name' => 'Wafangdian', 'country_code' => 'CN'],\n            ['name' => 'Zhongxiang', 'country_code' => 'CN'],\n            ['name' => 'Odesa', 'country_code' => 'UA'],\n            ['name' => 'Shymkent', 'country_code' => 'KZ'],\n            ['name' => 'New Orleans', 'country_code' => 'US'],\n            ['name' => 'Thu Duc', 'country_code' => 'VN'],\n            ['name' => 'Volgograd', 'country_code' => 'RU'],\n            ['name' => 'Port-au-Prince', 'country_code' => 'HT'],\n            ['name' => 'Islamabad', 'country_code' => 'PK'],\n            ['name' => 'Mysore', 'country_code' => 'IN'],\n            ['name' => 'Xinyi', 'country_code' => 'CN'],\n            ['name' => 'Kathmandu', 'country_code' => 'NP'],\n            ['name' => 'Raipur', 'country_code' => 'IN'],\n            ['name' => 'Nice', 'country_code' => 'FR'],\n            ['name' => 'Arequipa', 'country_code' => 'PE'],\n            ['name' => 'Port Harcourt', 'country_code' => 'NG'],\n            ['name' => 'Louisville', 'country_code' => 'US'],\n            ['name' => 'Zaoyang', 'country_code' => 'CN'],\n            ['name' => 'Shuizhai', 'country_code' => 'CN'],\n            ['name' => 'Dnipro', 'country_code' => 'UA'],\n            ['name' => 'Kota', 'country_code' => 'IN'],\n            ['name' => 'Quetta', 'country_code' => 'PK'],\n            ['name' => 'Abu Dhabi', 'country_code' => 'AE'],\n            ['name' => 'Stockholm', 'country_code' => 'SE'],\n            ['name' => 'Ottawa', 'country_code' => 'CA'],\n            ['name' => 'Asmara', 'country_code' => 'ER'],\n            ['name' => 'Freetown', 'country_code' => 'SL'],\n            ['name' => 'Jerusalem', 'country_code' => 'IL'],\n            ['name' => 'Bangui', 'country_code' => 'CF'],\n            ['name' => 'Panama City', 'country_code' => 'PA'],\n            ['name' => 'Amsterdam', 'country_code' => 'NL'],\n            ['name' => 'Lome', 'country_code' => 'TG'],\n            ['name' => 'Libreville', 'country_code' => 'GA'],\n            ['name' => 'Zagreb', 'country_code' => 'HR'],\n            ['name' => 'Dushanbe', 'country_code' => 'TJ'],\n            ['name' => 'Lilongwe', 'country_code' => 'MW'],\n            ['name' => 'Cotonou', 'country_code' => 'BJ'],\n            ['name' => 'Vientiane', 'country_code' => 'LA'],\n            ['name' => 'Colombo', 'country_code' => 'LK'],\n            ['name' => 'Pretoria', 'country_code' => 'ZA'],\n            ['name' => 'Winnipeg', 'country_code' => 'CA'],\n            ['name' => 'Quebec City', 'country_code' => 'CA'],\n            ['name' => 'Oslo', 'country_code' => 'NO'],\n            ['name' => 'Athens', 'country_code' => 'GR'],\n            ['name' => 'Bujumbura', 'country_code' => 'BI'],\n            ['name' => 'Helsinki', 'country_code' => 'FI'],\n            ['name' => 'Skopje', 'country_code' => 'MK'],\n            ['name' => 'Chisinau', 'country_code' => 'MD'],\n            ['name' => 'Riga', 'country_code' => 'LV'],\n            ['name' => 'Copenhagen', 'country_code' => 'DK'],\n            ['name' => 'Kingston', 'country_code' => 'JM'],\n            ['name' => 'Rabat', 'country_code' => 'MA'],\n            ['name' => 'Vilnius', 'country_code' => 'LT'],\n            ['name' => 'San Salvador', 'country_code' => 'SV'],\n            ['name' => 'Djibouti', 'country_code' => 'DJ'],\n            ['name' => 'Lisbon', 'country_code' => 'PT'],\n            ['name' => 'Kitchener', 'country_code' => 'CA'],\n            ['name' => 'Tallinn', 'country_code' => 'EE'],\n            ['name' => 'Cape Town', 'country_code' => 'ZA'],\n            ['name' => 'Bratislava', 'country_code' => 'SK'],\n            ['name' => 'Tirana', 'country_code' => 'AL'],\n            ['name' => 'Canberra', 'country_code' => 'AU'],\n            ['name' => 'Wellington', 'country_code' => 'NZ'],\n            ['name' => 'Beirut', 'country_code' => 'LB'],\n            ['name' => 'Dodoma', 'country_code' => 'TZ'],\n            ['name' => 'Halifax', 'country_code' => 'CA'],\n            ['name' => 'Bissau', 'country_code' => 'GW'],\n            ['name' => 'Juba', 'country_code' => 'SS'],\n            ['name' => 'Port Moresby', 'country_code' => 'PG'],\n            ['name' => 'Yamoussoukro', 'country_code' => 'CI'],\n            ['name' => 'Victoria', 'country_code' => 'CA'],\n            ['name' => 'Maseru', 'country_code' => 'LS'],\n            ['name' => 'Nicosia', 'country_code' => 'CY'],\n            ['name' => 'Windhoek', 'country_code' => 'NA'],\n            ['name' => 'Porto-Novo', 'country_code' => 'BJ'],\n            ['name' => 'Sucre', 'country_code' => 'BO'],\n            ['name' => 'San Jose', 'country_code' => 'CR'],\n            ['name' => 'Ljubljana', 'country_code' => 'SI'],\n            ['name' => 'Sarajevo', 'country_code' => 'BA'],\n            ['name' => 'Nassau', 'country_code' => 'BS'],\n            ['name' => 'Bloemfontein', 'country_code' => 'ZA'],\n            ['name' => 'Fort-de-France', 'country_code' => 'MQ'],\n            ['name' => 'Gaborone', 'country_code' => 'BW'],\n            ['name' => 'Paramaribo', 'country_code' => 'SR'],\n            ['name' => 'Dili', 'country_code' => 'TL'],\n            ['name' => 'Pristina', 'country_code' => 'XK'],\n            ['name' => 'Georgetown', 'country_code' => 'GY'],\n            ['name' => 'Malabo', 'country_code' => 'GQ'],\n            ['name' => 'Gibraltar', 'country_code' => 'GI'],\n            ['name' => 'Saint-Denis', 'country_code' => 'RE'],\n            ['name' => 'Male', 'country_code' => 'MV'],\n            ['name' => 'Podgorica', 'country_code' => 'ME'],\n            ['name' => 'Manama', 'country_code' => 'BH'],\n            ['name' => 'Port Louis', 'country_code' => 'MU'],\n            ['name' => 'Willemstad', 'country_code' => 'CW'],\n            ['name' => 'New Delhi', 'country_code' => 'IN'],\n            ['name' => 'Bern', 'country_code' => 'CH'],\n            ['name' => 'Papeete', 'country_code' => 'PF'],\n            ['name' => 'Reykjavik', 'country_code' => 'IS'],\n            ['name' => 'Praia', 'country_code' => 'CV'],\n            ['name' => 'Luxembourg', 'country_code' => 'LU'],\n            ['name' => 'Sri Jayewardenepura Kotte', 'country_code' => 'LK'],\n            ['name' => 'Bridgetown', 'country_code' => 'BB'],\n            ['name' => 'Moroni', 'country_code' => 'KM'],\n            ['name' => 'Thimphu', 'country_code' => 'BT'],\n            ['name' => 'Mbabane', 'country_code' => 'SZ'],\n            ['name' => 'Noumea', 'country_code' => 'NC'],\n            ['name' => 'Honiara', 'country_code' => 'SB'],\n            ['name' => 'Suva', 'country_code' => 'FJ'],\n            ['name' => 'Castries', 'country_code' => 'LC'],\n            ['name' => 'Cayenne', 'country_code' => 'GF'],\n            ['name' => 'Sao Tome', 'country_code' => 'ST'],\n            ['name' => 'Port-Vila', 'country_code' => 'VU'],\n            ['name' => 'Hamilton', 'country_code' => 'BM'],\n            ['name' => 'Bandar Seri Begawan', 'country_code' => 'BN'],\n            ['name' => 'Monaco', 'country_code' => 'MC'],\n            ['name' => 'Gitega', 'country_code' => 'BI'],\n            ['name' => 'Port of Spain', 'country_code' => 'TT'],\n            ['name' => 'Apia', 'country_code' => 'WS'],\n            ['name' => 'Douglas', 'country_code' => 'IM'],\n            ['name' => 'Oranjestad', 'country_code' => 'AW'],\n            ['name' => 'Saint Helier', 'country_code' => 'JE'],\n            ['name' => 'Vaduz', 'country_code' => 'LI'],\n            ['name' => 'Banjul', 'country_code' => 'GM'],\n            ['name' => 'Mamoudzou', 'country_code' => 'YT'],\n            ['name' => 'Majuro', 'country_code' => 'MH'],\n            ['name' => 'Tarawa', 'country_code' => 'KI'],\n            ['name' => 'George Town', 'country_code' => 'KY'],\n            ['name' => 'Victoria', 'country_code' => 'SC'],\n            ['name' => 'Kingstown', 'country_code' => 'VC'],\n            ['name' => 'Saint John s', 'country_code' => 'AG'],\n            ['name' => 'Nuku alofa', 'country_code' => 'TO'],\n            ['name' => 'Andorra la Vella', 'country_code' => 'AD'],\n            ['name' => 'Nuuk', 'country_code' => 'GL'],\n            ['name' => 'Belmopan', 'country_code' => 'BZ'],\n            ['name' => 'Roseau', 'country_code' => 'DM'],\n            ['name' => 'Basseterre', 'country_code' => 'KN'],\n            ['name' => 'Torshavn', 'country_code' => 'FO'],\n            ['name' => 'Pago Pago', 'country_code' => 'AS'],\n            ['name' => 'Valletta', 'country_code' => 'MT'],\n            ['name' => 'Gaza', 'country_code' => 'XG'],\n            ['name' => 'Grand Turk', 'country_code' => 'TC'],\n            ['name' => 'Palikir', 'country_code' => 'FM'],\n            ['name' => 'Funafuti', 'country_code' => 'TV'],\n            ['name' => 'Lobamba', 'country_code' => 'SZ'],\n            ['name' => 'Avarua', 'country_code' => 'CK'],\n            ['name' => 'Saint George s', 'country_code' => 'GD'],\n            ['name' => 'San Marino', 'country_code' => 'SM'],\n            ['name' => 'Al Quds', 'country_code' => 'XW'],\n            ['name' => 'Capitol Hill', 'country_code' => 'MP'],\n            ['name' => 'Basse-Terre', 'country_code' => 'GP'],\n            ['name' => 'Stanley', 'country_code' => 'FK'],\n            ['name' => 'Vatican City', 'country_code' => 'VA'],\n            ['name' => 'Alofi', 'country_code' => 'NU'],\n            ['name' => 'Hagta', 'country_code' => 'GU'],\n            ['name' => 'Jamestown', 'country_code' => 'SH'],\n            ['name' => 'Marigot', 'country_code' => 'MF'],\n            ['name' => 'Philipsburg', 'country_code' => 'SX'],\n            ['name' => 'Road Town', 'country_code' => 'VG'],\n            ['name' => 'Gustavia', 'country_code' => 'BL'],\n            ['name' => 'Saint-Pierre', 'country_code' => 'PM'],\n            ['name' => 'The Valley', 'country_code' => 'AI'],\n            ['name' => 'Mata-Utu', 'country_code' => 'WF'],\n            ['name' => 'Kingston', 'country_code' => 'NF'],\n            ['name' => 'Ngerulmud', 'country_code' => 'PW'],\n            ['name' => 'Tifariti', 'country_code' => 'MA'],\n            ['name' => 'Tifariti', 'country_code' => 'EH'],\n            ['name' => 'Longyearbyen', 'country_code' => 'XR'],\n            ['name' => 'Adamstown', 'country_code' => 'PN'],\n            ['name' => 'Flying Fish Cove', 'country_code' => 'CX'],\n            ['name' => 'Bareilly', 'country_code' => 'IN'],\n            ['name' => 'Quang Ha', 'country_code' => 'VN'],\n            ['name' => 'Soacha', 'country_code' => 'CO'],\n            ['name' => 'Kitaku', 'country_code' => 'JP'],\n            ['name' => 'Jodhpur', 'country_code' => 'IN'],\n            ['name' => 'Xingcheng', 'country_code' => 'CN'],\n            ['name' => 'Dongtai', 'country_code' => 'CN'],\n            ['name' => 'Yingcheng', 'country_code' => 'CN'],\n            ['name' => 'Al Mansurah', 'country_code' => 'EG'],\n            ['name' => 'Glasgow', 'country_code' => 'GB'],\n            ['name' => 'Chiba', 'country_code' => 'JP'],\n            ['name' => 'Luocheng', 'country_code' => 'CN'],\n            ['name' => 'Danyang', 'country_code' => 'CN'],\n            ['name' => 'Natal', 'country_code' => 'BR'],\n            ['name' => 'Zhaodong', 'country_code' => 'CN'],\n            ['name' => 'Nada', 'country_code' => 'CN'],\n            ['name' => 'Xibeijie', 'country_code' => 'CN'],\n            ['name' => 'Kirkuk', 'country_code' => 'IQ'],\n            ['name' => 'Naples', 'country_code' => 'IT'],\n            ['name' => 'Wuchuan', 'country_code' => 'CN'],\n            ['name' => 'Huilong', 'country_code' => 'CN'],\n            ['name' => 'Oklahoma City', 'country_code' => 'US'],\n            ['name' => 'Toulouse', 'country_code' => 'FR'],\n            ['name' => 'Malaga', 'country_code' => 'ES'],\n            ['name' => 'Denizli', 'country_code' => 'TR'],\n            ['name' => 'Dispur', 'country_code' => 'IN'],\n            ['name' => 'Coimbatore', 'country_code' => 'IN'],\n            ['name' => 'Guwahati', 'country_code' => 'IN'],\n            ['name' => 'Songnam', 'country_code' => 'KR'],\n            ['name' => 'Taishan', 'country_code' => 'CN'],\n            ['name' => 'Solapur', 'country_code' => 'IN'],\n            ['name' => 'Tangier', 'country_code' => 'MA'],\n            ['name' => 'Anqiu', 'country_code' => 'CN'],\n            ['name' => 'Feicheng', 'country_code' => 'CN'],\n            ['name' => 'Meishan', 'country_code' => 'CN'],\n            ['name' => 'Kisangani', 'country_code' => 'CD'],\n            ['name' => 'Khartoum North', 'country_code' => 'SD'],\n            ['name' => 'Aguascalientes', 'country_code' => 'MX'],\n            ['name' => 'Marrakech', 'country_code' => 'MA'],\n            ['name' => 'Donetsk', 'country_code' => 'UA'],\n            ['name' => 'Taihecun', 'country_code' => 'CN'],\n            ['name' => 'Trujillo', 'country_code' => 'PE'],\n            ['name' => 'Cebu City', 'country_code' => 'PH'],\n            ['name' => 'Taihe', 'country_code' => 'CN'],\n            ['name' => 'Bridgeport', 'country_code' => 'US'],\n            ['name' => 'Antwerp', 'country_code' => 'BE'],\n            ['name' => 'Trichinopoly', 'country_code' => 'IN'],\n            ['name' => 'Xin an', 'country_code' => 'CN'],\n            ['name' => 'Padang', 'country_code' => 'ID'],\n            ['name' => 'Qingzhou', 'country_code' => 'CN'],\n            ['name' => 'Buffalo', 'country_code' => 'US'],\n            ['name' => 'Lichuan', 'country_code' => 'CN'],\n            ['name' => 'Daye', 'country_code' => 'CN'],\n            ['name' => 'Fort Worth', 'country_code' => 'US'],\n            ['name' => 'Hengzhou', 'country_code' => 'CN'],\n            ['name' => 'Campo Grande', 'country_code' => 'BR'],\n            ['name' => 'Zhuanghe', 'country_code' => 'CN'],\n            ['name' => 'Hartford', 'country_code' => 'US'],\n            ['name' => 'Ad Dammam', 'country_code' => 'SA'],\n            ['name' => 'Bucheon', 'country_code' => 'KR'],\n            ['name' => 'Lhasa', 'country_code' => 'CN'],\n            ['name' => 'Homs', 'country_code' => 'SY'],\n            ['name' => 'Jiaozhou', 'country_code' => 'CN'],\n            ['name' => 'Merida', 'country_code' => 'MX'],\n            ['name' => 'Yangchun', 'country_code' => 'CN'],\n            ['name' => 'Concepcion', 'country_code' => 'CL'],\n            ['name' => 'Dengtalu', 'country_code' => 'CN'],\n            ['name' => 'Hubli', 'country_code' => 'IN'],\n            ['name' => 'Abeokuta', 'country_code' => 'NG'],\n            ['name' => 'Tucson', 'country_code' => 'US'],\n            ['name' => 'Krasnodar', 'country_code' => 'RU'],\n            ['name' => 'Natal', 'country_code' => 'BR'],\n            ['name' => 'Chihuahua', 'country_code' => 'MX'],\n            ['name' => 'Klang', 'country_code' => 'MY'],\n            ['name' => 'Turin', 'country_code' => 'IT'],\n            ['name' => 'Jos', 'country_code' => 'NG'],\n            ['name' => 'Laiyang', 'country_code' => 'CN'],\n            ['name' => 'Jalandhar', 'country_code' => 'IN'],\n            ['name' => 'Sale', 'country_code' => 'MA'],\n            ['name' => 'Marseille', 'country_code' => 'FR'],\n            ['name' => 'Kaifeng Chengguanzhen', 'country_code' => 'CN'],\n            ['name' => 'Eskisehir', 'country_code' => 'TR'],\n            ['name' => 'Gaomi', 'country_code' => 'CN'],\n            ['name' => 'Teresina', 'country_code' => 'BR'],\n            ['name' => 'Ipoh', 'country_code' => 'MY'],\n            ['name' => 'Hai an', 'country_code' => 'CN'],\n            ['name' => 'Liverpool', 'country_code' => 'GB'],\n            ['name' => 'Zamboanga City', 'country_code' => 'PH'],\n            ['name' => 'Oran', 'country_code' => 'DZ'],\n            ['name' => 'Southampton', 'country_code' => 'GB'],\n            ['name' => 'Weichanglu', 'country_code' => 'CN'],\n            ['name' => 'Pekanbaru', 'country_code' => 'ID'],\n            ['name' => 'Portsmouth', 'country_code' => 'GB'],\n            ['name' => 'Leping', 'country_code' => 'CN'],\n            ['name' => 'Kermanshah', 'country_code' => 'IR'],\n            ['name' => 'Hailun', 'country_code' => 'CN'],\n            ['name' => 'Macheng', 'country_code' => 'CN'],\n            ['name' => 'Ilorin', 'country_code' => 'NG'],\n            ['name' => 'Omaha', 'country_code' => 'US'],\n            ['name' => 'Yuci', 'country_code' => 'CN'],\n            ['name' => 'Saratov', 'country_code' => 'RU'],\n            ['name' => 'Sao Bernardo do Campo', 'country_code' => 'BR'],\n            ['name' => 'Erbil', 'country_code' => 'IQ'],\n            ['name' => 'Iguacu', 'country_code' => 'BR'],\n            ['name' => 'El Paso', 'country_code' => 'US'],\n            ['name' => 'Denpasar', 'country_code' => 'ID'],\n            ['name' => 'Dehui', 'country_code' => 'CN'],\n            ['name' => 'Naucalpan de Juarez', 'country_code' => 'MX'],\n            ['name' => 'Bhubaneshwar', 'country_code' => 'IN'],\n            ['name' => 'Tongchuan', 'country_code' => 'CN'],\n            ['name' => 'Cheongju', 'country_code' => 'KR'],\n            ['name' => 'Warri', 'country_code' => 'NG'],\n            ['name' => 'Pointe-Noire', 'country_code' => 'CG'],\n            ['name' => 'Rongjiawan', 'country_code' => 'CN'],\n            ['name' => 'Butterworth', 'country_code' => 'MY'],\n            ['name' => 'Bhayandar', 'country_code' => 'IN'],\n            ['name' => 'San Luis Potosi', 'country_code' => 'MX'],\n            ['name' => 'Renqiu', 'country_code' => 'CN'],\n            ['name' => 'Joao Pessoa', 'country_code' => 'BR'],\n            ['name' => 'Toluca', 'country_code' => 'MX'],\n            ['name' => 'Honolulu', 'country_code' => 'US'],\n            ['name' => 'Queretaro', 'country_code' => 'MX'],\n            ['name' => 'Xindi', 'country_code' => 'CN'],\n            ['name' => 'Wu an', 'country_code' => 'CN'],\n            ['name' => 'Hermosillo', 'country_code' => 'MX'],\n            ['name' => 'Wutong', 'country_code' => 'CN'],\n            ['name' => 'Taguig City', 'country_code' => 'PH'],\n            ['name' => 'Saltillo', 'country_code' => 'MX'],\n            ['name' => 'Gaoyou', 'country_code' => 'CN'],\n            ['name' => 'Hejian', 'country_code' => 'CN'],\n            ['name' => 'Yiyang', 'country_code' => 'CN'],\n            ['name' => 'Puxi', 'country_code' => 'CN'],\n            ['name' => 'Zijinglu', 'country_code' => 'CN'],\n            ['name' => 'Trabzon', 'country_code' => 'TR'],\n            ['name' => 'Xiashi', 'country_code' => 'CN'],\n            ['name' => 'Valencia', 'country_code' => 'ES'],\n            ['name' => 'Dongyang', 'country_code' => 'CN'],\n            ['name' => 'McAllen', 'country_code' => 'US'],\n            ['name' => 'Abaete', 'country_code' => 'BR'],\n            ['name' => 'Palermo', 'country_code' => 'CO'],\n            ['name' => 'Johor Bahru', 'country_code' => 'MY'],\n            ['name' => 'Qingping', 'country_code' => 'CN'],\n            ['name' => 'Morelia', 'country_code' => 'MX'],\n            ['name' => 'Niigata', 'country_code' => 'JP'],\n            ['name' => 'Pasig City', 'country_code' => 'PH'],\n            ['name' => 'Moradabad', 'country_code' => 'IN'],\n            ['name' => 'Hamamatsu', 'country_code' => 'JP'],\n            ['name' => 'Culiacan', 'country_code' => 'MX'],\n            ['name' => 'Xiangxiang', 'country_code' => 'CN'],\n            ['name' => 'Malang', 'country_code' => 'ID'],\n            ['name' => 'Xingyi', 'country_code' => 'CN'],\n            ['name' => 'Chaohucun', 'country_code' => 'CN'],\n            ['name' => 'Fuyang', 'country_code' => 'CN'],\n            ['name' => 'Antipolo', 'country_code' => 'PH'],\n            ['name' => 'Lubango', 'country_code' => 'AO'],\n            ['name' => 'Nottingham', 'country_code' => 'GB'],\n            ['name' => 'Cencheng', 'country_code' => 'CN'],\n            ['name' => 'Krakow', 'country_code' => 'PL'],\n            ['name' => 'Erzurum', 'country_code' => 'TR'],\n            ['name' => 'Hempstead', 'country_code' => 'US'],\n            ['name' => 'Al Ayn', 'country_code' => 'AE'],\n            ['name' => 'Songzi', 'country_code' => 'CN'],\n            ['name' => 'Laixi', 'country_code' => 'CN'],\n            ['name' => 'Bahawalpur', 'country_code' => 'PK'],\n            ['name' => 'Zhongba', 'country_code' => 'CN'],\n            ['name' => 'Qingnian', 'country_code' => 'CN'],\n            ['name' => 'Albuquerque', 'country_code' => 'US'],\n            ['name' => 'Kaduna', 'country_code' => 'NG'],\n            ['name' => 'Tlalnepantla', 'country_code' => 'MX'],\n            ['name' => 'Xinhualu', 'country_code' => 'CN'],\n            ['name' => 'Guangshui', 'country_code' => 'CN'],\n            ['name' => 'Frankfurt', 'country_code' => 'DE'],\n            ['name' => 'Samarinda', 'country_code' => 'ID'],\n            ['name' => 'Changhua', 'country_code' => 'TW'],\n            ['name' => 'Pietermaritzburg', 'country_code' => 'ZA'],\n            ['name' => 'Hungnam', 'country_code' => 'KP'],\n            ['name' => 'Kolhapur', 'country_code' => 'IN'],\n            ['name' => 'Ciudad Guayana', 'country_code' => 'VE'],\n            ['name' => 'Cucuta', 'country_code' => 'CO'],\n            ['name' => 'Licheng', 'country_code' => 'CN'],\n            ['name' => 'Thiruvananthapuram', 'country_code' => 'IN'],\n            ['name' => 'Tyumen', 'country_code' => 'RU'],\n            ['name' => 'Cancun', 'country_code' => 'MX'],\n            ['name' => 'Zaporizhzhia', 'country_code' => 'UA'],\n            ['name' => 'Tlajomulco de Zuniga', 'country_code' => 'MX'],\n            ['name' => 'Chengguan', 'country_code' => 'CN'],\n            ['name' => 'Kumamoto', 'country_code' => 'JP'],\n            ['name' => 'Nehe', 'country_code' => 'CN'],\n            ['name' => 'Sokoto', 'country_code' => 'NG'],\n            ['name' => 'Birmingham', 'country_code' => 'US'],\n            ['name' => 'Zunhua', 'country_code' => 'CN'],\n            ['name' => 'Orumiyeh', 'country_code' => 'IR'],\n            ['name' => 'Oyo', 'country_code' => 'NG'],\n            ['name' => 'Wugang', 'country_code' => 'CN'],\n            ['name' => 'Shuangqiao', 'country_code' => 'CN'],\n            ['name' => 'Rennes', 'country_code' => 'FR'],\n            ['name' => 'Sizhan', 'country_code' => 'CN'],\n            ['name' => 'Comodoro Rivadavia', 'country_code' => 'AR'],\n            ['name' => 'Langzhong', 'country_code' => 'CN'],\n            ['name' => 'Bristol', 'country_code' => 'GB'],\n            ['name' => 'Qian an', 'country_code' => 'CN'],\n            ['name' => 'Lviv', 'country_code' => 'UA'],\n            ['name' => 'Zouping', 'country_code' => 'CN'],\n            ['name' => 'Bremen', 'country_code' => 'DE'],\n            ['name' => 'Reynosa', 'country_code' => 'MX'],\n            ['name' => 'An Najaf', 'country_code' => 'IQ'],\n            ['name' => 'Sagamihara', 'country_code' => 'JP'],\n            ['name' => 'Guli', 'country_code' => 'CN'],\n            ['name' => 'Sarasota', 'country_code' => 'US'],\n            ['name' => 'Mississauga', 'country_code' => 'CA'],\n            ['name' => 'Lingbao Chengguanzhen', 'country_code' => 'CN'],\n            ['name' => 'Okayama', 'country_code' => 'JP'],\n            ['name' => 'Anlu', 'country_code' => 'CN'],\n            ['name' => 'Wusong', 'country_code' => 'CN'],\n            ['name' => 'Dayton', 'country_code' => 'US'],\n            ['name' => 'Changsha', 'country_code' => 'CN'],\n            ['name' => 'Enugu', 'country_code' => 'NG'],\n            ['name' => 'George Town', 'country_code' => 'MY'],\n            ['name' => 'Jaboatao', 'country_code' => 'BR'],\n            ['name' => 'Santo Andre', 'country_code' => 'BR'],\n            ['name' => 'Xichang', 'country_code' => 'CN'],\n            ['name' => 'Soledad', 'country_code' => 'CO'],\n            ['name' => 'Chengxiang', 'country_code' => 'CN'],\n            ['name' => 'Tolyatti', 'country_code' => 'RU'],\n            ['name' => 'Saharanpur', 'country_code' => 'IN'],\n            ['name' => 'Warangal', 'country_code' => 'IN'],\n            ['name' => 'Edogawa', 'country_code' => 'JP'],\n            ['name' => 'Osasco', 'country_code' => 'BR'],\n            ['name' => 'Dashiqiao', 'country_code' => 'CN'],\n            ['name' => 'Latakia', 'country_code' => 'SY'],\n            ['name' => 'Rochester', 'country_code' => 'US'],\n            ['name' => 'Fresno', 'country_code' => 'US'],\n            ['name' => 'Banjarmasin', 'country_code' => 'ID'],\n            ['name' => 'Salem', 'country_code' => 'IN'],\n            ['name' => 'Uberlandia', 'country_code' => 'BR'],\n            ['name' => 'Shishi', 'country_code' => 'CN'],\n            ['name' => 'Grenoble', 'country_code' => 'FR'],\n            ['name' => 'Guadalupe', 'country_code' => 'MX'],\n            ['name' => 'Adachi', 'country_code' => 'JP'],\n            ['name' => 'Qianxi', 'country_code' => 'CN'],\n            ['name' => 'Aracaju', 'country_code' => 'BR'],\n            ['name' => 'Bauchi', 'country_code' => 'NG'],\n            ['name' => 'Hamilton', 'country_code' => 'CA'],\n            ['name' => 'Lodz', 'country_code' => 'PL'],\n            ['name' => 'Miluo Chengguanzhen', 'country_code' => 'CN'],\n            ['name' => 'Gaizhou', 'country_code' => 'CN'],\n            ['name' => 'Malegaon', 'country_code' => 'IN'],\n            ['name' => 'Karbala ', 'country_code' => 'IQ'],\n            ['name' => 'Leling', 'country_code' => 'CN'],\n            ['name' => 'Sao Jose dos Campos', 'country_code' => 'BR'],\n            ['name' => 'Jianshe', 'country_code' => 'CN'],\n            ['name' => 'Acapulco de Juarez', 'country_code' => 'MX'],\n            ['name' => 'Sheffield', 'country_code' => 'GB'],\n            ['name' => 'Shizuoka', 'country_code' => 'JP'],\n            ['name' => 'Jingcheng', 'country_code' => 'CN'],\n            ['name' => 'City of Paranaque', 'country_code' => 'PH'],\n            ['name' => 'Kochi', 'country_code' => 'IN'],\n            ['name' => 'Allentown', 'country_code' => 'US'],\n            ['name' => 'Tasikmalaya', 'country_code' => 'ID'],\n            ['name' => 'Macau', 'country_code' => 'MO'],\n            ['name' => 'Torreon', 'country_code' => 'MX'],\n            ['name' => 'Xinmin', 'country_code' => 'CN'],\n            ['name' => 'Shanhu', 'country_code' => 'CN'],\n            ['name' => 'Zhongshu', 'country_code' => 'CN'],\n            ['name' => 'Xigaze', 'country_code' => 'CN'],\n            ['name' => 'Gold Coast', 'country_code' => 'AU'],\n            ['name' => 'Cagayan de Oro', 'country_code' => 'PH'],\n            ['name' => 'Gorakhpur', 'country_code' => 'IN'],\n            ['name' => 'Pinghu', 'country_code' => 'CN'],\n            ['name' => 'Palermo', 'country_code' => 'IT'],\n            ['name' => 'Guankou', 'country_code' => 'CN'],\n            ['name' => 'Tulsa', 'country_code' => 'US'],\n            ['name' => 'Yatou', 'country_code' => 'CN'],\n            ['name' => 'Songyang', 'country_code' => 'CN'],\n            ['name' => 'Cape Coral', 'country_code' => 'US'],\n            ['name' => 'Ch ongjin', 'country_code' => 'KP'],\n            ['name' => 'Puyang Chengguanzhen', 'country_code' => 'CN'],\n            ['name' => 'Qionghu', 'country_code' => 'CN'],\n            ['name' => 'Ribeirao Preto', 'country_code' => 'BR'],\n            ['name' => 'Dasmarinas', 'country_code' => 'PH'],\n            ['name' => 'Wenchang', 'country_code' => 'CN'],\n            ['name' => 'Shulan', 'country_code' => 'CN'],\n            ['name' => 'Catia La Mar', 'country_code' => 'VE'],\n            ['name' => 'Sargodha', 'country_code' => 'PK'],\n            ['name' => 'Bouake', 'country_code' => 'CI'],\n            ['name' => 'Sialkot City', 'country_code' => 'PK'],\n            ['name' => 'As Sulaymaniyah', 'country_code' => 'IQ'],\n            ['name' => 'Hwasu-dong', 'country_code' => 'KR'],\n            ['name' => 'Jeonju', 'country_code' => 'KR'],\n            ['name' => 'Durango', 'country_code' => 'MX'],\n            ['name' => 'Shimoga', 'country_code' => 'IN'],\n            ['name' => 'Ansan', 'country_code' => 'KR'],\n            ['name' => 'Bulawayo', 'country_code' => 'ZW'],\n            ['name' => 'Xiping', 'country_code' => 'CN'],\n            ['name' => 'Sanhe', 'country_code' => 'CN'],\n            ['name' => 'Guntur', 'country_code' => 'IN'],\n            ['name' => 'Dali', 'country_code' => 'CN'],\n            ['name' => 'Concord', 'country_code' => 'US'],\n            ['name' => 'Contagem', 'country_code' => 'BR'],\n            ['name' => 'Tiruppur', 'country_code' => 'IN'],\n            ['name' => 'Ch onan', 'country_code' => 'KR'],\n            ['name' => 'Zaragoza', 'country_code' => 'ES'],\n            ['name' => 'Dusseldorf', 'country_code' => 'DE'],\n            ['name' => 'Izhevsk', 'country_code' => 'RU'],\n            ['name' => 'Guixi', 'country_code' => 'CN'],\n            ['name' => 'Sorocaba', 'country_code' => 'BR'],\n            ['name' => 'Villahermosa', 'country_code' => 'MX'],\n            ['name' => 'Petaling Jaya', 'country_code' => 'MY'],\n            ['name' => 'Tengyue', 'country_code' => 'CN'],\n            ['name' => 'Wuxue', 'country_code' => 'CN'],\n            ['name' => 'Utrecht', 'country_code' => 'NL'],\n            ['name' => 'Kikwit', 'country_code' => 'CD'],\n            ['name' => 'Colorado Springs', 'country_code' => 'US'],\n            ['name' => 'Valenzuela', 'country_code' => 'PH'],\n            ['name' => 'Qufu', 'country_code' => 'CN'],\n            ['name' => 'Gaobeidian', 'country_code' => 'CN'],\n            ['name' => 'Ruiming', 'country_code' => 'CN'],\n            ['name' => 'Wroclaw', 'country_code' => 'PL'],\n            ['name' => 'Rasht', 'country_code' => 'IR'],\n            ['name' => 'Nantes', 'country_code' => 'FR'],\n            ['name' => 'Stuttgart', 'country_code' => 'DE'],\n            ['name' => 'Al Hufuf', 'country_code' => 'SA'],\n            ['name' => 'Xinshi', 'country_code' => 'CN'],\n            ['name' => 'Cochabamba', 'country_code' => 'BO'],\n            ['name' => 'Barnaul', 'country_code' => 'RU'],\n            ['name' => 'Tripoli', 'country_code' => 'LB'],\n            ['name' => 'Jin e', 'country_code' => 'CN'],\n            ['name' => 'Rotterdam', 'country_code' => 'NL'],\n            ['name' => 'Benghazi', 'country_code' => 'LY'],\n            ['name' => 'Kryvyi Rih', 'country_code' => 'UA'],\n            ['name' => 'Yanggok', 'country_code' => 'KR'],\n            ['name' => 'Changping', 'country_code' => 'CN'],\n            ['name' => 'Raurkela', 'country_code' => 'IN'],\n            ['name' => 'Halwan', 'country_code' => 'EG'],\n            ['name' => 'Charleston', 'country_code' => 'US'],\n            ['name' => 'Chimalhuacan', 'country_code' => 'MX'],\n            ['name' => 'Xinxing', 'country_code' => 'CN'],\n            ['name' => 'Suohe', 'country_code' => 'CN'],\n            ['name' => 'Mangalore', 'country_code' => 'IN'],\n            ['name' => 'Zhuangyuan', 'country_code' => 'CN'],\n            ['name' => 'Ulyanovsk', 'country_code' => 'RU'],\n            ['name' => 'Irkutsk', 'country_code' => 'RU'],\n            ['name' => 'Nanded', 'country_code' => 'IN'],\n            ['name' => 'Bacoor', 'country_code' => 'PH'],\n            ['name' => 'Pontianak', 'country_code' => 'ID'],\n            ['name' => 'Villa Nueva', 'country_code' => 'GT'],\n            ['name' => 'Bazhou', 'country_code' => 'CN'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Turpan', 'country_code' => 'CN'],\n            ['name' => 'Xingtai', 'country_code' => 'CN'],\n            ['name' => 'Meihekou', 'country_code' => 'CN'],\n            ['name' => 'Cuiaba', 'country_code' => 'BR'],\n            ['name' => 'Jurong', 'country_code' => 'CN'],\n            ['name' => 'Feira de Santana', 'country_code' => 'BR'],\n            ['name' => 'Khabarovsk', 'country_code' => 'RU'],\n            ['name' => 'Zhugang', 'country_code' => 'CN'],\n            ['name' => 'Xinji', 'country_code' => 'CN'],\n            ['name' => 'Hamhung', 'country_code' => 'KP'],\n            ['name' => 'Serang', 'country_code' => 'ID'],\n            ['name' => 'Sanya', 'country_code' => 'CN'],\n            ['name' => 'Buraydah', 'country_code' => 'SA'],\n            ['name' => 'Ta izz', 'country_code' => 'YE'],\n            ['name' => 'Montpellier', 'country_code' => 'FR'],\n            ['name' => 'San Miguel de Tucuman', 'country_code' => 'AR'],\n            ['name' => 'Yaroslavl', 'country_code' => 'RU'],\n            ['name' => 'Zhangshu', 'country_code' => 'CN'],\n            ['name' => 'Grand Rapids', 'country_code' => 'US'],\n            ['name' => 'Vladivostok', 'country_code' => 'RU'],\n            ['name' => 'Kuantan', 'country_code' => 'MY'],\n            ['name' => 'Gothenburg', 'country_code' => 'SE'],\n            ['name' => 'Cuttack', 'country_code' => 'IN'],\n            ['name' => 'Jambi', 'country_code' => 'ID'],\n            ['name' => 'Zhuozhou', 'country_code' => 'CN'],\n            ['name' => 'Tianchang', 'country_code' => 'CN'],\n            ['name' => 'Las Pinas City', 'country_code' => 'PH'],\n            ['name' => 'Cimahi', 'country_code' => 'ID'],\n            ['name' => 'Tuxtla', 'country_code' => 'MX'],\n            ['name' => 'Balikpapan', 'country_code' => 'ID'],\n            ['name' => 'Qamdo', 'country_code' => 'CN'],\n            ['name' => 'Joinvile', 'country_code' => 'BR'],\n            ['name' => 'Durban', 'country_code' => 'ZA'],\n            ['name' => 'General Santos', 'country_code' => 'PH'],\n            ['name' => 'Chanda', 'country_code' => 'IN'],\n            ['name' => 'Kagoshima', 'country_code' => 'JP'],\n            ['name' => 'Leipzig', 'country_code' => 'DE'],\n            ['name' => 'Al Hillah', 'country_code' => 'SA'],\n            ['name' => 'Makhachkala', 'country_code' => 'RU'],\n            ['name' => 'Sihui', 'country_code' => 'CN'],\n            ['name' => 'Mar del Plata', 'country_code' => 'AR'],\n            ['name' => 'Brampton', 'country_code' => 'CA'],\n            ['name' => 'Luocheng', 'country_code' => 'CN'],\n            ['name' => 'Pereira', 'country_code' => 'CO'],\n            ['name' => 'Mission Viejo', 'country_code' => 'US'],\n            ['name' => 'Dortmund', 'country_code' => 'DE'],\n            ['name' => 'Chuxiong', 'country_code' => 'CN'],\n            ['name' => 'Makati City', 'country_code' => 'PH'],\n            ['name' => 'Albany', 'country_code' => 'US'],\n            ['name' => 'Shah Alam', 'country_code' => 'MY'],\n            ['name' => 'Knoxville', 'country_code' => 'US'],\n            ['name' => 'Essen', 'country_code' => 'DE'],\n            ['name' => 'Shangzhi', 'country_code' => 'CN'],\n            ['name' => 'Botou', 'country_code' => 'CN'],\n            ['name' => 'Bucaramanga', 'country_code' => 'CO'],\n            ['name' => 'Anyang', 'country_code' => 'KR'],\n            ['name' => 'Genoa', 'country_code' => 'IT'],\n            ['name' => 'Kuiju', 'country_code' => 'CN'],\n            ['name' => 'Tlaquepaque', 'country_code' => 'MX'],\n            ['name' => 'Puente Alto', 'country_code' => 'CL'],\n            ['name' => 'Dehra Dun', 'country_code' => 'IN'],\n            ['name' => 'At Ta if', 'country_code' => 'SA'],\n            ['name' => 'San Jose del Monte', 'country_code' => 'PH'],\n            ['name' => 'Bakersfield', 'country_code' => 'US'],\n            ['name' => 'Wancheng', 'country_code' => 'CN'],\n            ['name' => 'Hachioji', 'country_code' => 'JP'],\n            ['name' => 'Ogden', 'country_code' => 'US'],\n            ['name' => 'Xiulin', 'country_code' => 'CN'],\n            ['name' => 'Fu an', 'country_code' => 'CN'],\n            ['name' => 'Tomsk', 'country_code' => 'RU'],\n            ['name' => 'Kerman', 'country_code' => 'IR'],\n            ['name' => 'Kingston upon Hull', 'country_code' => 'GB'],\n            ['name' => 'Al Mahallah al Kubra', 'country_code' => 'EG'],\n            ['name' => 'Kumul', 'country_code' => 'CN'],\n            ['name' => 'Luofeng', 'country_code' => 'CN'],\n            ['name' => 'Lingyuan', 'country_code' => 'CN'],\n            ['name' => 'Baton Rouge', 'country_code' => 'US'],\n            ['name' => 'Wencheng', 'country_code' => 'CN'],\n            ['name' => 'Ciudad Bolivar', 'country_code' => 'VE'],\n            ['name' => 'Durgapur', 'country_code' => 'IN'],\n            ['name' => 'Orenburg', 'country_code' => 'RU'],\n            ['name' => 'Shenzhou', 'country_code' => 'CN'],\n            ['name' => 'Asansol', 'country_code' => 'IN'],\n            ['name' => 'Bacolod', 'country_code' => 'PH'],\n            ['name' => 'Akron', 'country_code' => 'US'],\n            ['name' => 'New Haven', 'country_code' => 'US'],\n            ['name' => 'Zhenzhou', 'country_code' => 'CN'],\n            ['name' => 'Surakarta', 'country_code' => 'ID'],\n            ['name' => 'Jieshou', 'country_code' => 'CN'],\n            ['name' => 'Lanxi', 'country_code' => 'CN'],\n            ['name' => 'Zahedan', 'country_code' => 'IR'],\n            ['name' => 'Dangyang', 'country_code' => 'CN'],\n            ['name' => 'Columbia', 'country_code' => 'US'],\n            ['name' => 'Kemerovo', 'country_code' => 'RU'],\n            ['name' => 'Dresden', 'country_code' => 'DE'],\n            ['name' => 'Veracruz', 'country_code' => 'MX'],\n            ['name' => 'Bhavnagar', 'country_code' => 'IN'],\n            ['name' => 'Luanzhou', 'country_code' => 'CN'],\n            ['name' => 'Novokuznetsk', 'country_code' => 'RU'],\n            ['name' => 'Nellore', 'country_code' => 'IN'],\n            ['name' => 'Chiclayo', 'country_code' => 'PE'],\n            ['name' => 'Palma', 'country_code' => 'ES'],\n            ['name' => 'Al Hudaydah', 'country_code' => 'YE'],\n            ['name' => 'Eslamshahr', 'country_code' => 'IR'],\n            ['name' => 'Cabinda', 'country_code' => 'AO'],\n            ['name' => 'Amravati', 'country_code' => 'IN'],\n            ['name' => 'Korla', 'country_code' => 'CN'],\n            ['name' => 'Huanghua', 'country_code' => 'CN'],\n            ['name' => 'Londrina', 'country_code' => 'BR'],\n            ['name' => 'Tabuk', 'country_code' => 'SA'],\n            ['name' => 'Xingcheng', 'country_code' => 'CN'],\n            ['name' => 'Kaiyuan', 'country_code' => 'CN'],\n            ['name' => 'Valledupar', 'country_code' => 'CO'],\n            ['name' => 'Fengcheng', 'country_code' => 'CN'],\n            ['name' => 'Ajmer', 'country_code' => 'IN'],\n            ['name' => 'Tinnevelly', 'country_code' => 'IN'],\n            ['name' => 'Fuding', 'country_code' => 'CN'],\n            ['name' => 'Maturin', 'country_code' => 'VE'],\n            ['name' => 'An Nasiriyah', 'country_code' => 'IQ'],\n            ['name' => 'Al Hillah', 'country_code' => 'IQ'],\n            ['name' => 'Ibague', 'country_code' => 'CO'],\n            ['name' => 'Hannover', 'country_code' => 'DE'],\n            ['name' => 'Ryazan', 'country_code' => 'RU'],\n            ['name' => 'Panshi', 'country_code' => 'CN'],\n            ['name' => 'Kassala', 'country_code' => 'SD'],\n            ['name' => 'Ananindeua', 'country_code' => 'BR'],\n            ['name' => 'Chang an', 'country_code' => 'CN'],\n            ['name' => 'Shashi', 'country_code' => 'CN'],\n            ['name' => 'Poznan', 'country_code' => 'PL'],\n            ['name' => 'Aksu', 'country_code' => 'CN'],\n            ['name' => 'Salta', 'country_code' => 'AR'],\n            ['name' => 'Astrakhan', 'country_code' => 'RU'],\n            ['name' => 'Mingguang', 'country_code' => 'CN'],\n            ['name' => 'Naberezhnyye Chelny', 'country_code' => 'RU'],\n            ['name' => 'Bikaner', 'country_code' => 'IN'],\n            ['name' => 'Agartala', 'country_code' => 'IN'],\n            ['name' => 'Xalapa', 'country_code' => 'MX'],\n            ['name' => 'Ndola', 'country_code' => 'ZM'],\n            ['name' => 'Hamadan', 'country_code' => 'IR'],\n            ['name' => 'Villavicencio', 'country_code' => 'CO'],\n            ['name' => 'Ailan Mubage', 'country_code' => 'CN'],\n            ['name' => 'Ensenada', 'country_code' => 'MX'],\n            ['name' => 'Lyon', 'country_code' => 'FR'],\n            ['name' => 'Bac Ninh', 'country_code' => 'VN'],\n            ['name' => 'Ciudad Apodaca', 'country_code' => 'MX'],\n            ['name' => 'Santa Teresa del Tuy', 'country_code' => 'VE'],\n            ['name' => 'Maipu', 'country_code' => 'CL'],\n            ['name' => 'Penza', 'country_code' => 'RU'],\n            ['name' => 'Heroica Matamoros', 'country_code' => 'MX'],\n            ['name' => 'Port Said', 'country_code' => 'EG'],\n            ['name' => 'Yucheng', 'country_code' => 'CN'],\n            ['name' => 'Meknes', 'country_code' => 'MA'],\n            ['name' => 'Nuremberg', 'country_code' => 'DE'],\n            ['name' => 'Pohang', 'country_code' => 'KR'],\n            ['name' => 'Anda', 'country_code' => 'CN'],\n            ['name' => 'Jinghong', 'country_code' => 'CN'],\n            ['name' => 'Utsunomiya', 'country_code' => 'JP'],\n            ['name' => 'Liaoyuan', 'country_code' => 'CN'],\n            ['name' => 'Mesa', 'country_code' => 'US'],\n            ['name' => 'Surrey', 'country_code' => 'CA'],\n            ['name' => 'Caxias do Sul', 'country_code' => 'BR'],\n            ['name' => 'Heshan', 'country_code' => 'CN'],\n            ['name' => 'Cuautitlan Izcalli', 'country_code' => 'MX'],\n            ['name' => 'Ujjain', 'country_code' => 'IN'],\n            ['name' => 'Jiaji', 'country_code' => 'CN'],\n            ['name' => 'Santa Marta', 'country_code' => 'CO'],\n            ['name' => 'Beining', 'country_code' => 'CN'],\n            ['name' => 'Hai Duong', 'country_code' => 'VN'],\n            ['name' => 'Carrefour', 'country_code' => 'HT'],\n            ['name' => 'Homyel ', 'country_code' => 'BY'],\n            ['name' => 'Leicester', 'country_code' => 'GB'],\n            ['name' => 'Yanji', 'country_code' => 'CN'],\n            ['name' => 'Yicheng', 'country_code' => 'CN'],\n            ['name' => 'Lipetsk', 'country_code' => 'RU'],\n            ['name' => 'Choloma', 'country_code' => 'HN'],\n            ['name' => 'Ulhasnagar', 'country_code' => 'IN'],\n            ['name' => 'Encheng', 'country_code' => 'CN'],\n            ['name' => 'Muntinlupa City', 'country_code' => 'PH'],\n            ['name' => 'Linghai', 'country_code' => 'CN'],\n            ['name' => 'Aden', 'country_code' => 'YE'],\n            ['name' => 'Matsuyama', 'country_code' => 'JP'],\n            ['name' => 'Jhansi', 'country_code' => 'IN'],\n            ['name' => 'Kitwe', 'country_code' => 'ZM'],\n            ['name' => 'Kashgar', 'country_code' => 'CN'],\n            ['name' => 'Aba', 'country_code' => 'NG'],\n            ['name' => 'Palm Bay', 'country_code' => 'US'],\n            ['name' => 'Pingtung', 'country_code' => 'TW'],\n            ['name' => 'Monteria', 'country_code' => 'CO'],\n            ['name' => 'Samarkand', 'country_code' => 'UZ'],\n            ['name' => 'Davangere', 'country_code' => 'IN'],\n            ['name' => 'Jammu', 'country_code' => 'IN'],\n            ['name' => 'Mazatlan', 'country_code' => 'MX'],\n            ['name' => 'Murcia', 'country_code' => 'ES'],\n            ['name' => 'Ile-Ife', 'country_code' => 'NG'],\n            ['name' => 'Kirov', 'country_code' => 'RU'],\n            ['name' => 'Qaraghandy', 'country_code' => 'KZ'],\n            ['name' => 'Belas', 'country_code' => 'AO'],\n            ['name' => 'Mazatan', 'country_code' => 'MX'],\n            ['name' => 'Duisburg', 'country_code' => 'DE'],\n            ['name' => 'Mykolaiv', 'country_code' => 'UA'],\n            ['name' => 'Provo', 'country_code' => 'US'],\n            ['name' => 'Meicheng', 'country_code' => 'CN'],\n            ['name' => 'Niteroi', 'country_code' => 'BR'],\n            ['name' => 'Matsudo', 'country_code' => 'JP'],\n            ['name' => 'Sukkur', 'country_code' => 'PK'],\n            ['name' => 'Rouen', 'country_code' => 'FR'],\n            ['name' => 'Higashi-osaka', 'country_code' => 'JP'],\n            ['name' => 'Worcester', 'country_code' => 'US'],\n            ['name' => 'Hongjiang', 'country_code' => 'CN'],\n            ['name' => 'Chimbote', 'country_code' => 'PE'],\n            ['name' => 'Ixtapaluca', 'country_code' => 'MX'],\n            ['name' => 'Dengtacun', 'country_code' => 'CN'],\n            ['name' => 'Zhijiang', 'country_code' => 'CN'],\n            ['name' => 'Chengjiao', 'country_code' => 'CN'],\n            ['name' => 'Beipiao', 'country_code' => 'CN'],\n            ['name' => 'Murrieta', 'country_code' => 'US'],\n            ['name' => 'Kota Bharu', 'country_code' => 'MY'],\n            ['name' => 'Ciudad Lopez Mateos', 'country_code' => 'MX'],\n            ['name' => 'Vinh', 'country_code' => 'VN'],\n            ['name' => 'Tultitlan de Mariano Escobedo', 'country_code' => 'MX'],\n            ['name' => 'Duyun', 'country_code' => 'CN'],\n            ['name' => 'Kandahar', 'country_code' => 'AF'],\n            ['name' => 'Nishinomiya-hama', 'country_code' => 'JP'],\n            ['name' => 'Larkana', 'country_code' => 'PK'],\n            ['name' => 'Cheboksary', 'country_code' => 'RU'],\n            ['name' => 'Yuanping', 'country_code' => 'CN'],\n            ['name' => 'Port Sudan', 'country_code' => 'SD'],\n            ['name' => 'Edinburgh', 'country_code' => 'GB'],\n            ['name' => 'Belgaum', 'country_code' => 'IN'],\n            ['name' => 'Tula', 'country_code' => 'RU'],\n            ['name' => 'Suez', 'country_code' => 'EG'],\n            ['name' => 'Shahe', 'country_code' => 'CN'],\n            ['name' => 'Yazd', 'country_code' => 'IR'],\n            ['name' => 'Serra', 'country_code' => 'BR'],\n            ['name' => 'Nazret', 'country_code' => 'ET'],\n            ['name' => 'Gaoping', 'country_code' => 'CN'],\n            ['name' => 'Greenville', 'country_code' => 'US'],\n            ['name' => 'Arak', 'country_code' => 'IR'],\n            ['name' => 'San Nicolas de los Garza', 'country_code' => 'MX'],\n            ['name' => 'Gulbarga', 'country_code' => 'IN'],\n            ['name' => 'Juiz de Fora', 'country_code' => 'BR'],\n            ['name' => 'Dunhua', 'country_code' => 'CN'],\n            ['name' => 'Brookhaven', 'country_code' => 'US'],\n            ['name' => 'Az Zarqa ', 'country_code' => 'JO'],\n            ['name' => 'Americana', 'country_code' => 'BR'],\n            ['name' => 'Ardabil', 'country_code' => 'IR'],\n            ['name' => 'Sylhet', 'country_code' => 'BD'],\n            ['name' => 'Wichita', 'country_code' => 'US'],\n            ['name' => 'Toledo', 'country_code' => 'US'],\n            ['name' => 'Kaihua', 'country_code' => 'CN'],\n            ['name' => 'Caerdydd', 'country_code' => 'GB'],\n            ['name' => 'Jamnagar', 'country_code' => 'IN'],\n            ['name' => 'Dhulia', 'country_code' => 'IN'],\n            ['name' => 'Nampula', 'country_code' => 'MZ'],\n            ['name' => 'Gaya', 'country_code' => 'IN'],\n            ['name' => 'Florianopolis', 'country_code' => 'BR'],\n            ['name' => 'Chiniot', 'country_code' => 'PK'],\n            ['name' => 'Jiannan', 'country_code' => 'CN'],\n            ['name' => 'Oita', 'country_code' => 'JP'],\n            ['name' => 'Wuhai', 'country_code' => 'CN'],\n            ['name' => 'Kaliningrad', 'country_code' => 'RU'],\n            ['name' => 'Nangong', 'country_code' => 'CN'],\n            ['name' => 'Staten Island', 'country_code' => 'US'],\n            ['name' => 'San Juan', 'country_code' => 'AR'],\n            ['name' => 'Vila Velha', 'country_code' => 'BR'],\n            ['name' => 'Macapa', 'country_code' => 'BR'],\n            ['name' => 'Shekhupura', 'country_code' => 'PK'],\n            ['name' => 'Des Moines', 'country_code' => 'US'],\n            ['name' => 'Piura', 'country_code' => 'PE'],\n            ['name' => 'Jiaojiangcun', 'country_code' => 'CN'],\n            ['name' => 'Laohekou', 'country_code' => 'CN'],\n            ['name' => 'Beian', 'country_code' => 'CN'],\n            ['name' => 'Fujin', 'country_code' => 'CN'],\n            ['name' => 'Celaya', 'country_code' => 'MX'],\n            ['name' => 'Xiaoyi', 'country_code' => 'CN'],\n            ['name' => 'Strasbourg', 'country_code' => 'FR'],\n            ['name' => 'Lanus', 'country_code' => 'AR'],\n            ['name' => 'Qingzhen', 'country_code' => 'CN'],\n            ['name' => 'Jiangshan', 'country_code' => 'CN'],\n            ['name' => 'Ba qubah', 'country_code' => 'IQ'],\n            ['name' => 'Tamale', 'country_code' => 'GH'],\n            ['name' => 'Gdansk', 'country_code' => 'PL'],\n            ['name' => 'Manado', 'country_code' => 'ID'],\n            ['name' => 'Jinchang', 'country_code' => 'CN'],\n            ['name' => 'Kanazawa', 'country_code' => 'JP'],\n            ['name' => 'Calabar', 'country_code' => 'NG'],\n            ['name' => 'Long Beach', 'country_code' => 'US'],\n            ['name' => 'Malatya', 'country_code' => 'TR'],\n            ['name' => 'Hue', 'country_code' => 'VN'],\n            ['name' => 'Cranbourne', 'country_code' => 'AU'],\n            ['name' => 'Jalgaon', 'country_code' => 'IN'],\n            ['name' => 'Port St. Lucie', 'country_code' => 'US'],\n            ['name' => 'Maua', 'country_code' => 'BR'],\n            ['name' => 'Fukuyama', 'country_code' => 'JP'],\n            ['name' => 'Tel Aviv-Yafo', 'country_code' => 'IL'],\n            ['name' => 'Xicheng', 'country_code' => 'CN'],\n            ['name' => 'Marikina City', 'country_code' => 'PH'],\n            ['name' => 'Pyeongtaek', 'country_code' => 'KR'],\n            ['name' => 'Kurnool', 'country_code' => 'IN'],\n            ['name' => 'City of Calamba', 'country_code' => 'PH'],\n            ['name' => 'Denton', 'country_code' => 'US'],\n            ['name' => 'Ar Ramadi', 'country_code' => 'IQ'],\n            ['name' => 'Melaka', 'country_code' => 'MY'],\n            ['name' => 'Jian ou', 'country_code' => 'CN'],\n            ['name' => 'Huadian', 'country_code' => 'CN'],\n            ['name' => 'Taoyuan District', 'country_code' => 'TW'],\n            ['name' => 'Iloilo', 'country_code' => 'PH'],\n            ['name' => 'Kota Kinabalu', 'country_code' => 'MY'],\n            ['name' => 'Minzhu', 'country_code' => 'CN'],\n            ['name' => 'Rajshahi', 'country_code' => 'BD'],\n            ['name' => 'Tanta', 'country_code' => 'EG'],\n            ['name' => 'Balashikha', 'country_code' => 'RU'],\n            ['name' => 'Udaipur', 'country_code' => 'IN'],\n            ['name' => 'Kursk', 'country_code' => 'RU'],\n            ['name' => 'Mariupol', 'country_code' => 'UA'],\n            ['name' => 'Bukavu', 'country_code' => 'CD'],\n            ['name' => 'Hsinchu', 'country_code' => 'TW'],\n            ['name' => 'Barcelona', 'country_code' => 'VE'],\n            ['name' => 'Constantine', 'country_code' => 'DZ'],\n            ['name' => 'Tanbei', 'country_code' => 'CN'],\n            ['name' => 'Ado-Ekiti', 'country_code' => 'NG'],\n            ['name' => 'Batman', 'country_code' => 'TR'],\n            ['name' => 'Pasay City', 'country_code' => 'PH'],\n            ['name' => 'Madison', 'country_code' => 'US'],\n            ['name' => 'Baisha', 'country_code' => 'CN'],\n            ['name' => 'Betim', 'country_code' => 'BR'],\n            ['name' => 'Bellary', 'country_code' => 'IN'],\n            ['name' => 'Santiago de Cuba', 'country_code' => 'CU'],\n            ['name' => 'Yongji', 'country_code' => 'CN'],\n            ['name' => 'Reno', 'country_code' => 'US'],\n            ['name' => 'Danjiangkou', 'country_code' => 'CN'],\n            ['name' => 'Kahramanmaras', 'country_code' => 'TR'],\n            ['name' => 'Sao Jose do Rio Preto', 'country_code' => 'BR'],\n            ['name' => 'Andijon', 'country_code' => 'UZ'],\n            ['name' => 'Harrisburg', 'country_code' => 'US'],\n            ['name' => 'Nancy', 'country_code' => 'FR'],\n            ['name' => 'Puerto Plata', 'country_code' => 'DO'],\n            ['name' => 'Machida', 'country_code' => 'JP'],\n            ['name' => 'Ning an', 'country_code' => 'CN'],\n            ['name' => 'Beira', 'country_code' => 'MZ'],\n            ['name' => 'Little Rock', 'country_code' => 'US'],\n            ['name' => 'San Cristobal', 'country_code' => 'VE'],\n            ['name' => 'Zurich', 'country_code' => 'CH'],\n            ['name' => 'Zhangjiakou Shi Xuanhua Qu', 'country_code' => 'CN'],\n            ['name' => 'Sunch on', 'country_code' => 'KP'],\n            ['name' => 'Diadema', 'country_code' => 'BR'],\n            ['name' => 'Guangming', 'country_code' => 'CN'],\n            ['name' => 'Sangli', 'country_code' => 'IN'],\n            ['name' => 'Tuticorin', 'country_code' => 'IN'],\n            ['name' => 'Herat', 'country_code' => 'AF'],\n            ['name' => 'Kupang', 'country_code' => 'ID'],\n            ['name' => 'Jeju', 'country_code' => 'KR'],\n            ['name' => 'Bandar  Abbas', 'country_code' => 'IR'],\n            ['name' => 'Santos', 'country_code' => 'BR'],\n            ['name' => 'Manizales', 'country_code' => 'CO'],\n            ['name' => 'Stavropol', 'country_code' => 'RU'],\n            ['name' => 'Katsina', 'country_code' => 'NG'],\n            ['name' => 'Yogyakarta', 'country_code' => 'ID'],\n            ['name' => 'Calicut', 'country_code' => 'IN'],\n            ['name' => 'Zanjan', 'country_code' => 'IR'],\n            ['name' => 'Welkom', 'country_code' => 'ZA'],\n            ['name' => 'Ulan-Ude', 'country_code' => 'RU'],\n            ['name' => 'Oakland', 'country_code' => 'US'],\n            ['name' => 'Mazar-e Sharif', 'country_code' => 'AF'],\n            ['name' => 'Kashan', 'country_code' => 'IR'],\n            ['name' => 'Kenitra', 'country_code' => 'MA'],\n            ['name' => 'Uyo', 'country_code' => 'NG'],\n            ['name' => 'Maringa', 'country_code' => 'BR'],\n            ['name' => 'Khamis Mushayt', 'country_code' => 'SA'],\n            ['name' => 'Masan', 'country_code' => 'KR'],\n            ['name' => 'Cusco', 'country_code' => 'PE'],\n            ['name' => 'Sevastopol', 'country_code' => 'UA'],\n            ['name' => 'Mandaluyong City', 'country_code' => 'PH'],\n            ['name' => 'Porto Velho', 'country_code' => 'BR'],\n            ['name' => 'Florencio Varela', 'country_code' => 'AR'],\n            ['name' => 'Akola', 'country_code' => 'IN'],\n            ['name' => 'Yan an Beilu', 'country_code' => 'CN'],\n            ['name' => 'Agadir', 'country_code' => 'MA'],\n            ['name' => 'Mogi das Cruzes', 'country_code' => 'BR'],\n            ['name' => 'Durham', 'country_code' => 'US'],\n            ['name' => 'Likasi', 'country_code' => 'CD'],\n            ['name' => 'Buenaventura', 'country_code' => 'CO'],\n            ['name' => 'Laval', 'country_code' => 'CA'],\n            ['name' => 'Toyota', 'country_code' => 'JP'],\n            ['name' => 'Winston-Salem', 'country_code' => 'US'],\n            ['name' => 'Uijeongbu', 'country_code' => 'KR'],\n            ['name' => 'Tver', 'country_code' => 'RU'],\n            ['name' => 'Elazig', 'country_code' => 'TR'],\n            ['name' => 'Akure', 'country_code' => 'NG'],\n            ['name' => 'Hpa-An', 'country_code' => 'MM'],\n            ['name' => 'Bonita Springs', 'country_code' => 'US'],\n            ['name' => 'Mishan', 'country_code' => 'CN'],\n            ['name' => 'Hailin', 'country_code' => 'CN'],\n            ['name' => 'Seremban', 'country_code' => 'MY'],\n            ['name' => 'Lecheng', 'country_code' => 'CN'],\n            ['name' => 'Zhengjiatun', 'country_code' => 'CN'],\n            ['name' => 'Luhansk', 'country_code' => 'UA'],\n            ['name' => 'Pencheng', 'country_code' => 'CN'],\n            ['name' => 'Magnitogorsk', 'country_code' => 'RU'],\n            ['name' => 'Takamatsu', 'country_code' => 'JP'],\n            ['name' => 'Angeles City', 'country_code' => 'PH'],\n            ['name' => 'El Obeid', 'country_code' => 'SD'],\n            ['name' => 'Dalai', 'country_code' => 'CN'],\n            ['name' => 'Xingren', 'country_code' => 'CN'],\n            ['name' => 'Kolwezi', 'country_code' => 'CD'],\n            ['name' => 'Wenlan', 'country_code' => 'CN'],\n            ['name' => 'Indio', 'country_code' => 'US'],\n            ['name' => 'Palm Coast', 'country_code' => 'US'],\n            ['name' => 'Arusha', 'country_code' => 'TZ'],\n            ['name' => 'Fenyang', 'country_code' => 'CN'],\n            ['name' => 'Paju', 'country_code' => 'KR'],\n            ['name' => 'Oujda-Angad', 'country_code' => 'MA'],\n            ['name' => 'Mataram', 'country_code' => 'ID'],\n            ['name' => 'Chattanooga', 'country_code' => 'US'],\n            ['name' => 'Lapu-Lapu City', 'country_code' => 'PH'],\n            ['name' => 'Jhang City', 'country_code' => 'PK'],\n            ['name' => 'Nagqu', 'country_code' => 'CN'],\n            ['name' => 'Kisumu', 'country_code' => 'KE'],\n            ['name' => 'Jayapura', 'country_code' => 'ID'],\n            ['name' => 'Montes Claros', 'country_code' => 'BR'],\n            ['name' => 'Rio Branco', 'country_code' => 'BR'],\n            ['name' => 'Toyama', 'country_code' => 'JP'],\n            ['name' => 'Fangting', 'country_code' => 'CN'],\n            ['name' => 'Spokane', 'country_code' => 'US'],\n            ['name' => 'Sochi', 'country_code' => 'RU'],\n            ['name' => 'Bhagalpur', 'country_code' => 'IN'],\n            ['name' => 'Ivanovo', 'country_code' => 'RU'],\n            ['name' => 'Osogbo', 'country_code' => 'NG'],\n            ['name' => 'Imus', 'country_code' => 'PH'],\n            ['name' => 'Ciudad Obregon', 'country_code' => 'MX'],\n            ['name' => 'Turkmenabat', 'country_code' => 'TM'],\n            ['name' => 'Zaria', 'country_code' => 'NG'],\n            ['name' => 'Namangan', 'country_code' => 'UZ'],\n            ['name' => 'Bryansk', 'country_code' => 'RU'],\n            ['name' => 'Taiping', 'country_code' => 'CN'],\n            ['name' => 'Maracay', 'country_code' => 'VE'],\n            ['name' => 'Jiexiu', 'country_code' => 'CN'],\n            ['name' => 'Mbale', 'country_code' => 'UG'],\n            ['name' => 'Taraz', 'country_code' => 'KZ'],\n            ['name' => 'Asyut', 'country_code' => 'EG'],\n            ['name' => 'Santa Fe', 'country_code' => 'AR'],\n            ['name' => 'Campina Grande', 'country_code' => 'BR'],\n            ['name' => 'Nagasaki', 'country_code' => 'JP'],\n            ['name' => 'Szczecin', 'country_code' => 'PL'],\n            ['name' => 'Ghulja', 'country_code' => 'CN'],\n            ['name' => 'Syracuse', 'country_code' => 'US'],\n            ['name' => 'Carapicuiba', 'country_code' => 'BR'],\n            ['name' => 'Quilon', 'country_code' => 'IN'],\n            ['name' => 'Jundiai', 'country_code' => 'BR'],\n            ['name' => 'Gifu', 'country_code' => 'JP'],\n            ['name' => 'Lancaster', 'country_code' => 'US'],\n            ['name' => 'Eindhoven', 'country_code' => 'NL'],\n            ['name' => 'Sikar', 'country_code' => 'IN'],\n            ['name' => 'Tumkur', 'country_code' => 'IN'],\n            ['name' => 'Jiangjiafan', 'country_code' => 'CN'],\n            ['name' => 'Dera Ghazi Khan', 'country_code' => 'PK'],\n            ['name' => 'Arlington', 'country_code' => 'US'],\n            ['name' => 'Miyazaki', 'country_code' => 'JP'],\n            ['name' => 'Stockton', 'country_code' => 'US'],\n            ['name' => 'Bhatpara', 'country_code' => 'IN'],\n            ['name' => 'Sandakan', 'country_code' => 'MY'],\n            ['name' => 'Hejin', 'country_code' => 'CN'],\n            ['name' => 'Thanh Hoa', 'country_code' => 'VN'],\n            ['name' => 'Muzaffarnagar', 'country_code' => 'IN'],\n            ['name' => 'Poughkeepsie', 'country_code' => 'US'],\n            ['name' => 'Campos', 'country_code' => 'BR'],\n            ['name' => 'Metz', 'country_code' => 'FR'],\n            ['name' => 'Nha Trang', 'country_code' => 'VN'],\n            ['name' => 'Belgorod', 'country_code' => 'RU'],\n            ['name' => 'Yola', 'country_code' => 'NG'],\n            ['name' => 'Lobito', 'country_code' => 'AO'],\n            ['name' => 'Saurimo', 'country_code' => 'AO'],\n            ['name' => 'Olinda', 'country_code' => 'BR'],\n            ['name' => 'Bologna', 'country_code' => 'IT'],\n            ['name' => 'Ad Diwaniyah', 'country_code' => 'IQ'],\n            ['name' => 'Gujrat', 'country_code' => 'PK'],\n            ['name' => 'Hancheng', 'country_code' => 'CN'],\n            ['name' => 'Fuyu', 'country_code' => 'CN'],\n            ['name' => 'Karamay', 'country_code' => 'CN'],\n            ['name' => 'Kakinada', 'country_code' => 'IN'],\n            ['name' => 'Augusta', 'country_code' => 'US'],\n            ['name' => 'Bhilwara', 'country_code' => 'IN'],\n            ['name' => 'Tieli', 'country_code' => 'CN'],\n            ['name' => 'Cilegon', 'country_code' => 'ID'],\n            ['name' => 'Baicheng', 'country_code' => 'CN'],\n            ['name' => 'Nizamabad', 'country_code' => 'IN'],\n            ['name' => 'Boise', 'country_code' => 'US'],\n            ['name' => 'Tonala', 'country_code' => 'MX'],\n            ['name' => 'Mwanza', 'country_code' => 'TZ'],\n            ['name' => 'Aqtobe', 'country_code' => 'KZ'],\n            ['name' => 'Oxnard', 'country_code' => 'US'],\n            ['name' => 'Tetouan', 'country_code' => 'MA'],\n            ['name' => 'Okazaki', 'country_code' => 'JP'],\n            ['name' => 'Cariacica', 'country_code' => 'BR'],\n            ['name' => 'Ha il', 'country_code' => 'SA'],\n            ['name' => 'Las Palmas', 'country_code' => 'ES'],\n            ['name' => 'Yidu', 'country_code' => 'CN'],\n            ['name' => 'Lianzhou', 'country_code' => 'CN'],\n            ['name' => 'Florence', 'country_code' => 'IT'],\n            ['name' => 'Scranton', 'country_code' => 'US'],\n            ['name' => 'Brno', 'country_code' => 'CZ'],\n            ['name' => 'London', 'country_code' => 'CA'],\n            ['name' => 'Modesto', 'country_code' => 'US'],\n            ['name' => 'Kissimmee', 'country_code' => 'US'],\n            ['name' => 'Pasto', 'country_code' => 'CO'],\n            ['name' => 'Ichinomiya', 'country_code' => 'JP'],\n            ['name' => 'Qazvin', 'country_code' => 'IR'],\n            ['name' => 'Irapuato', 'country_code' => 'MX'],\n            ['name' => 'Novi Sad', 'country_code' => 'RS'],\n            ['name' => 'Shihezi', 'country_code' => 'CN'],\n            ['name' => 'Shache', 'country_code' => 'CN'],\n            ['name' => 'Panihati', 'country_code' => 'IN'],\n            ['name' => 'Huancayo', 'country_code' => 'PE'],\n            ['name' => 'Aurora', 'country_code' => 'US'],\n            ['name' => 'Malabon', 'country_code' => 'PH'],\n            ['name' => 'Petion-Ville', 'country_code' => 'HT'],\n            ['name' => 'Sintra', 'country_code' => 'PT'],\n            ['name' => 'Parbhani', 'country_code' => 'IN'],\n            ['name' => 'Usulutan', 'country_code' => 'SV'],\n            ['name' => 'Youngstown', 'country_code' => 'US'],\n            ['name' => 'Christchurch', 'country_code' => 'NZ'],\n            ['name' => 'Hatay', 'country_code' => 'TR'],\n            ['name' => 'Iquitos', 'country_code' => 'PE'],\n            ['name' => 'Sivas', 'country_code' => 'TR'],\n            ['name' => 'Helixi', 'country_code' => 'CN'],\n            ['name' => 'A Coruna', 'country_code' => 'ES'],\n            ['name' => 'Manukau City', 'country_code' => 'NZ'],\n            ['name' => 'Stoke-on-Trent', 'country_code' => 'GB'],\n            ['name' => 'Cumana', 'country_code' => 'VE'],\n            ['name' => 'Vinnytsia', 'country_code' => 'UA'],\n            ['name' => 'Rohtak', 'country_code' => 'IN'],\n            ['name' => 'Latur', 'country_code' => 'IN'],\n            ['name' => 'Bello', 'country_code' => 'CO'],\n            ['name' => 'Sanandaj', 'country_code' => 'IR'],\n            ['name' => 'Nuevo Laredo', 'country_code' => 'MX'],\n            ['name' => 'Ambon', 'country_code' => 'ID'],\n            ['name' => 'Mandaue City', 'country_code' => 'PH'],\n            ['name' => 'Keelung', 'country_code' => 'TW'],\n            ['name' => 'Toyohashi', 'country_code' => 'JP'],\n            ['name' => 'La Florida', 'country_code' => 'CL'],\n            ['name' => 'Varna', 'country_code' => 'BG'],\n            ['name' => 'Lengshuijiang', 'country_code' => 'CN'],\n            ['name' => 'Anguo', 'country_code' => 'CN'],\n            ['name' => 'Rajapalaiyam', 'country_code' => 'IN'],\n            ['name' => 'Rodriguez', 'country_code' => 'PH'],\n            ['name' => 'Madan', 'country_code' => 'IR'],\n            ['name' => 'Az Zubayr', 'country_code' => 'IQ'],\n            ['name' => 'Al Qatif', 'country_code' => 'SA'],\n            ['name' => 'Cuernavaca', 'country_code' => 'MX'],\n            ['name' => 'Nicolas Romero', 'country_code' => 'MX'],\n            ['name' => 'Huichang', 'country_code' => 'CN'],\n            ['name' => 'Vitsyebsk', 'country_code' => 'BY'],\n            ['name' => 'Nagano', 'country_code' => 'JP'],\n            ['name' => 'Bauru', 'country_code' => 'BR'],\n            ['name' => 'Yanjiao', 'country_code' => 'CN'],\n            ['name' => 'Bochum', 'country_code' => 'DE'],\n            ['name' => 'Anapolis', 'country_code' => 'BR'],\n            ['name' => 'Coventry', 'country_code' => 'GB'],\n            ['name' => 'Zalantun', 'country_code' => 'CN'],\n            ['name' => 'Tecamac', 'country_code' => 'MX'],\n            ['name' => 'Ciudad General Escobedo', 'country_code' => 'MX'],\n            ['name' => 'Wonsan', 'country_code' => 'KP'],\n            ['name' => 'Kocaeli', 'country_code' => 'TR'],\n            ['name' => 'Bengkulu', 'country_code' => 'ID'],\n            ['name' => 'Shuanghejiedao', 'country_code' => 'CN'],\n            ['name' => 'Surgut', 'country_code' => 'RU'],\n            ['name' => 'Bobo-Dioulasso', 'country_code' => 'BF'],\n            ['name' => 'Umuahia', 'country_code' => 'NG'],\n            ['name' => 'Gedaref', 'country_code' => 'SD'],\n            ['name' => 'Palu', 'country_code' => 'ID'],\n            ['name' => 'Santa Rosa', 'country_code' => 'PH'],\n            ['name' => 'Pokhara', 'country_code' => 'NP'],\n            ['name' => 'Mahilyow', 'country_code' => 'BY'],\n            ['name' => 'Wudalianchi', 'country_code' => 'CN'],\n            ['name' => 'Sungai Petani', 'country_code' => 'MY'],\n            ['name' => 'Nam Dinh', 'country_code' => 'VN'],\n            ['name' => 'Sinuiju', 'country_code' => 'KP'],\n            ['name' => 'Vitoria', 'country_code' => 'BR'],\n            ['name' => 'Hrodna', 'country_code' => 'BY'],\n            ['name' => 'Vladimir', 'country_code' => 'RU'],\n            ['name' => 'Bilbao', 'country_code' => 'ES'],\n            ['name' => 'Sao Vicente', 'country_code' => 'BR'],\n            ['name' => 'Cubal', 'country_code' => 'AO'],\n            ['name' => 'Yong an', 'country_code' => 'CN'],\n            ['name' => 'Itaquaquecetuba', 'country_code' => 'BR'],\n            ['name' => 'Wuppertal', 'country_code' => 'DE'],\n            ['name' => 'Minatitlan', 'country_code' => 'MX'],\n            ['name' => 'Nizhniy Tagil', 'country_code' => 'RU'],\n            ['name' => 'Ponta Grossa', 'country_code' => 'BR'],\n            ['name' => 'Hongzhai', 'country_code' => 'CN'],\n            ['name' => 'Wakayama', 'country_code' => 'JP'],\n            ['name' => 'Pavlodar', 'country_code' => 'KZ'],\n            ['name' => 'Gimpo', 'country_code' => 'KR'],\n            ['name' => 'Rahimyar Khan', 'country_code' => 'PK'],\n            ['name' => 'Nara', 'country_code' => 'JP'],\n            ['name' => 'Van', 'country_code' => 'TR'],\n            ['name' => 'Corrientes', 'country_code' => 'AR'],\n            ['name' => 'San Pedro', 'country_code' => 'PH'],\n            ['name' => 'Neiva', 'country_code' => 'CO'],\n            ['name' => 'Arkhangelsk', 'country_code' => 'RU'],\n            ['name' => 'Licheng', 'country_code' => 'CN'],\n            ['name' => 'Koshigaya', 'country_code' => 'JP'],\n            ['name' => 'Cabimas', 'country_code' => 'VE'],\n            ['name' => 'Yakeshi', 'country_code' => 'CN'],\n            ['name' => 'Baguio City', 'country_code' => 'PH'],\n            ['name' => 'Ahmadnagar', 'country_code' => 'IN'],\n            ['name' => 'Fayetteville', 'country_code' => 'US'],\n            ['name' => 'Canoas', 'country_code' => 'BR'],\n            ['name' => 'Holguin', 'country_code' => 'CU'],\n            ['name' => 'Qoqon', 'country_code' => 'UZ'],\n            ['name' => 'Anaheim', 'country_code' => 'US'],\n            ['name' => 'Yingmen', 'country_code' => 'CN'],\n            ['name' => 'Piracicaba', 'country_code' => 'BR'],\n            ['name' => 'Bydgoszcz', 'country_code' => 'PL'],\n            ['name' => 'Antofagasta', 'country_code' => 'CL'],\n            ['name' => 'Khorramabad', 'country_code' => 'IR'],\n            ['name' => 'Rajahmundry', 'country_code' => 'IN'],\n            ['name' => 'Chita', 'country_code' => 'RU'],\n            ['name' => 'Caruaru', 'country_code' => 'BR'],\n            ['name' => 'Makiivka', 'country_code' => 'UA'],\n            ['name' => 'Chitungwiza', 'country_code' => 'ZW'],\n            ['name' => 'Pensacola', 'country_code' => 'US'],\n            ['name' => 'Victorville', 'country_code' => 'US'],\n            ['name' => 'Tanch on', 'country_code' => 'KP'],\n            ['name' => 'Tokorozawa', 'country_code' => 'JP'],\n            ['name' => 'Sumqayit', 'country_code' => 'AZ'],\n            ['name' => 'Kusti', 'country_code' => 'SD'],\n            ['name' => 'Al  Amarah', 'country_code' => 'IQ'],\n            ['name' => 'Cuddapah', 'country_code' => 'IN'],\n            ['name' => 'Simferopol', 'country_code' => 'UA'],\n            ['name' => 'Plovdiv', 'country_code' => 'BG'],\n            ['name' => 'Tarlac City', 'country_code' => 'PH'],\n            ['name' => 'Otsu', 'country_code' => 'JP'],\n            ['name' => 'Pelotas', 'country_code' => 'BR'],\n            ['name' => 'Lancaster', 'country_code' => 'US'],\n            ['name' => 'Greensboro', 'country_code' => 'US'],\n            ['name' => 'Iligan', 'country_code' => 'PH'],\n            ['name' => 'East London', 'country_code' => 'ZA'],\n            ['name' => 'Franca', 'country_code' => 'BR'],\n            ['name' => 'Brest', 'country_code' => 'BY'],\n            ['name' => 'Kaluga', 'country_code' => 'RU'],\n            ['name' => 'Yeosu', 'country_code' => 'KR'],\n            ['name' => 'Corpus Christi', 'country_code' => 'US'],\n            ['name' => 'Muzaffarpur', 'country_code' => 'IN'],\n            ['name' => 'Lublin', 'country_code' => 'PL'],\n            ['name' => 'Lianran', 'country_code' => 'CN'],\n            ['name' => 'Alwar', 'country_code' => 'IN'],\n            ['name' => 'Baishan', 'country_code' => 'CN'],\n            ['name' => 'Kawagoe', 'country_code' => 'JP'],\n            ['name' => 'Farg ona', 'country_code' => 'UZ'],\n            ['name' => 'Tamuramachi-moriyama', 'country_code' => 'JP'],\n            ['name' => 'Brahmapur', 'country_code' => 'IN'],\n            ['name' => 'Buon Ma Thuot', 'country_code' => 'VN'],\n            ['name' => 'Binan', 'country_code' => 'PH'],\n            ['name' => 'Semey', 'country_code' => 'KZ'],\n            ['name' => 'Tarsus', 'country_code' => 'TR'],\n            ['name' => 'Alicante', 'country_code' => 'ES'],\n            ['name' => 'Randburg', 'country_code' => 'ZA'],\n            ['name' => 'Tepic', 'country_code' => 'MX'],\n            ['name' => 'Jitpur', 'country_code' => 'NP'],\n            ['name' => 'Kaesong', 'country_code' => 'KP'],\n            ['name' => 'Beni', 'country_code' => 'CD'],\n            ['name' => 'Petrolina', 'country_code' => 'BR'],\n            ['name' => 'Chinju', 'country_code' => 'KR'],\n            ['name' => 'Tangdong', 'country_code' => 'CN'],\n            ['name' => 'Butuan', 'country_code' => 'PH'],\n            ['name' => 'Reading', 'country_code' => 'GB'],\n            ['name' => 'Uberaba', 'country_code' => 'BR'],\n            ['name' => 'Belfast', 'country_code' => 'GB'],\n            ['name' => 'Iwaki', 'country_code' => 'JP'],\n            ['name' => 'Blida', 'country_code' => 'DZ'],\n            ['name' => 'Hangu', 'country_code' => 'CN'],\n            ['name' => 'Yingzhong', 'country_code' => 'CN'],\n            ['name' => 'Vina del Mar', 'country_code' => 'CL'],\n            ['name' => 'Bielefeld', 'country_code' => 'DE'],\n            ['name' => 'Cuenca', 'country_code' => 'EC'],\n            ['name' => 'Fort Wayne', 'country_code' => 'US'],\n            ['name' => 'Lipa City', 'country_code' => 'PH'],\n            ['name' => 'Wad Medani', 'country_code' => 'SD'],\n            ['name' => 'Ribeirao das Neves', 'country_code' => 'BR'],\n            ['name' => 'Kamarhati', 'country_code' => 'IN'],\n            ['name' => 'Maebashi', 'country_code' => 'JP'],\n            ['name' => 'Thessaloniki', 'country_code' => 'GR'],\n            ['name' => 'Ganca', 'country_code' => 'AZ'],\n            ['name' => 'Bilaspur', 'country_code' => 'IN'],\n            ['name' => 'Santa Ana', 'country_code' => 'US'],\n            ['name' => 'Mymensingh', 'country_code' => 'BD'],\n            ['name' => 'Al Fayyum', 'country_code' => 'EG'],\n            ['name' => 'Flint', 'country_code' => 'US'],\n            ['name' => 'Kendari', 'country_code' => 'ID'],\n            ['name' => 'Balikesir', 'country_code' => 'TR'],\n            ['name' => 'Az Zaqaziq', 'country_code' => 'EG'],\n            ['name' => 'Thai Nguyen', 'country_code' => 'VN'],\n            ['name' => 'Smolensk', 'country_code' => 'RU'],\n            ['name' => 'Asahikawa', 'country_code' => 'JP'],\n            ['name' => 'Islip', 'country_code' => 'US'],\n            ['name' => 'Wonju', 'country_code' => 'KR'],\n            ['name' => 'Dahuk', 'country_code' => 'IQ'],\n            ['name' => 'Batangas', 'country_code' => 'PH'],\n            ['name' => 'Mathura', 'country_code' => 'IN'],\n            ['name' => 'Barishal', 'country_code' => 'BD'],\n            ['name' => 'Bamiantong', 'country_code' => 'CN'],\n            ['name' => 'Patiala', 'country_code' => 'IN'],\n            ['name' => 'Cainta', 'country_code' => 'PH'],\n            ['name' => 'Bonn', 'country_code' => 'DE'],\n            ['name' => 'Sao Jose dos Pinhais', 'country_code' => 'BR'],\n            ['name' => 'Vung Tau', 'country_code' => 'VN'],\n            ['name' => 'Markham', 'country_code' => 'CA'],\n            ['name' => 'Saugor', 'country_code' => 'IN'],\n            ['name' => 'Malmo', 'country_code' => 'SE'],\n            ['name' => 'Roodepoort', 'country_code' => 'ZA'],\n            ['name' => 'Gomez Palacio', 'country_code' => 'MX'],\n            ['name' => 'Volzhskiy', 'country_code' => 'RU'],\n            ['name' => 'Taourirt', 'country_code' => 'MA'],\n            ['name' => 'Bijapur', 'country_code' => 'IN'],\n            ['name' => 'Sukabumi', 'country_code' => 'ID'],\n            ['name' => 'Fayetteville', 'country_code' => 'US'],\n            ['name' => 'Taytay', 'country_code' => 'PH'],\n            ['name' => 'Ulanhot', 'country_code' => 'CN'],\n            ['name' => 'Nakuru', 'country_code' => 'KE'],\n            ['name' => 'Yunzhong', 'country_code' => 'CN'],\n            ['name' => 'Al Fallujah', 'country_code' => 'IQ'],\n            ['name' => 'Kochi', 'country_code' => 'JP'],\n            ['name' => 'Boa Vista', 'country_code' => 'BR'],\n            ['name' => 'Gwangmyeongni', 'country_code' => 'KR'],\n            ['name' => 'Bari', 'country_code' => 'IT'],\n            ['name' => 'Pucallpa', 'country_code' => 'PE'],\n            ['name' => 'Kuching', 'country_code' => 'MY'],\n            ['name' => 'Zinder', 'country_code' => 'NE'],\n            ['name' => 'Caucaia', 'country_code' => 'BR'],\n            ['name' => 'Gonder', 'country_code' => 'ET'],\n            ['name' => 'Jackson', 'country_code' => 'US'],\n            ['name' => 'Mekele', 'country_code' => 'ET'],\n            ['name' => 'Kulti', 'country_code' => 'IN'],\n            ['name' => 'Santa Rosa', 'country_code' => 'US'],\n            ['name' => 'Gonaives', 'country_code' => 'HT'],\n            ['name' => 'Lansing', 'country_code' => 'US'],\n            ['name' => 'Naha', 'country_code' => 'JP'],\n            ['name' => 'Binxian', 'country_code' => 'CN'],\n            ['name' => 'San Juan', 'country_code' => 'PR'],\n            ['name' => 'Lexington', 'country_code' => 'US'],\n            ['name' => 'Hotan', 'country_code' => 'CN'],\n            ['name' => 'Uige', 'country_code' => 'AO'],\n            ['name' => 'Newcastle', 'country_code' => 'AU'],\n            ['name' => 'Kurgan', 'country_code' => 'RU'],\n            ['name' => 'Kaiyuan', 'country_code' => 'CN'],\n            ['name' => 'Temara', 'country_code' => 'MA'],\n            ['name' => 'Uruapan', 'country_code' => 'MX'],\n            ['name' => 'Camaguey', 'country_code' => 'CU'],\n            ['name' => 'Ann Arbor', 'country_code' => 'US'],\n            ['name' => 'San Salvador de Jujuy', 'country_code' => 'AR'],\n            ['name' => 'Timisoara', 'country_code' => 'RO'],\n            ['name' => 'Cordoba', 'country_code' => 'ES'],\n            ['name' => 'Al Kut', 'country_code' => 'IQ'],\n            ['name' => 'Tapachula', 'country_code' => 'MX'],\n            ['name' => 'Shahjanpur', 'country_code' => 'IN'],\n            ['name' => 'Cherepovets', 'country_code' => 'RU'],\n            ['name' => 'San Miguelito', 'country_code' => 'PA'],\n            ['name' => 'Menongue', 'country_code' => 'AO'],\n            ['name' => 'Poltava', 'country_code' => 'UA'],\n            ['name' => 'Henderson', 'country_code' => 'US'],\n            ['name' => 'Maroua', 'country_code' => 'CM'],\n            ['name' => 'Kaech on', 'country_code' => 'KP'],\n            ['name' => 'Asan', 'country_code' => 'KR'],\n            ['name' => 'Coatzacoalcos', 'country_code' => 'MX'],\n            ['name' => 'Huntsville', 'country_code' => 'US'],\n            ['name' => 'Oskemen', 'country_code' => 'KZ'],\n            ['name' => 'Tampico', 'country_code' => 'MX'],\n            ['name' => 'Trichur', 'country_code' => 'IN'],\n            ['name' => 'Cluj-Napoca', 'country_code' => 'RO'],\n            ['name' => 'General Trias', 'country_code' => 'PH'],\n            ['name' => 'Cirebon', 'country_code' => 'ID'],\n            ['name' => 'Boaco', 'country_code' => 'NI'],\n            ['name' => 'Ca Mau', 'country_code' => 'VN'],\n            ['name' => 'Cabuyao', 'country_code' => 'PH'],\n            ['name' => 'Vologda', 'country_code' => 'RU'],\n            ['name' => 'Saransk', 'country_code' => 'RU'],\n            ['name' => 'Mobile', 'country_code' => 'US'],\n            ['name' => 'Bor', 'country_code' => 'SS'],\n            ['name' => 'Munster', 'country_code' => 'DE'],\n            ['name' => 'Barddhaman', 'country_code' => 'IN'],\n            ['name' => 'Toshima', 'country_code' => 'JP'],\n            ['name' => 'Karlsruhe', 'country_code' => 'DE'],\n            ['name' => 'Kasur', 'country_code' => 'PK'],\n            ['name' => 'Yakou', 'country_code' => 'CN'],\n            ['name' => 'Orel', 'country_code' => 'RU'],\n            ['name' => 'Safi', 'country_code' => 'MA'],\n            ['name' => 'Shahr-e Qods', 'country_code' => 'IR'],\n            ['name' => 'Vitoria da Conquista', 'country_code' => 'BR'],\n            ['name' => 'Hamah', 'country_code' => 'SY'],\n            ['name' => 'Guaruja', 'country_code' => 'BR'],\n            ['name' => 'Catania', 'country_code' => 'IT'],\n            ['name' => 'Purnea', 'country_code' => 'IN'],\n            ['name' => 'Datang', 'country_code' => 'CN'],\n            ['name' => 'Fort Collins', 'country_code' => 'US'],\n            ['name' => 'Port Elizabeth', 'country_code' => 'ZA'],\n            ['name' => 'Alanya', 'country_code' => 'TR'],\n            ['name' => 'Asheville', 'country_code' => 'US'],\n            ['name' => 'Santa Clarita', 'country_code' => 'US'],\n            ['name' => 'Gorgan', 'country_code' => 'IR'],\n            ['name' => 'Quy Nhon', 'country_code' => 'VN'],\n            ['name' => 'Sambalpur', 'country_code' => 'IN'],\n            ['name' => 'Yokkaichi', 'country_code' => 'JP'],\n            ['name' => 'Chalco', 'country_code' => 'MX'],\n            ['name' => 'Mannheim', 'country_code' => 'DE'],\n            ['name' => 'Namp o', 'country_code' => 'KP'],\n            ['name' => 'Shahriar', 'country_code' => 'IR'],\n            ['name' => 'Coban', 'country_code' => 'GT'],\n            ['name' => 'Kasugai', 'country_code' => 'JP'],\n            ['name' => 'Sapele', 'country_code' => 'NG'],\n            ['name' => 'Blumenau', 'country_code' => 'BR'],\n            ['name' => 'Sariwon', 'country_code' => 'KP'],\n            ['name' => 'St. Catharines', 'country_code' => 'CA'],\n            ['name' => 'Matadi', 'country_code' => 'CD'],\n            ['name' => 'Niagara Falls', 'country_code' => 'CA'],\n            ['name' => 'Firozabad', 'country_code' => 'IN'],\n            ['name' => 'San Fernando', 'country_code' => 'PH'],\n            ['name' => 'St. Paul', 'country_code' => 'US'],\n            ['name' => 'Vladikavkaz', 'country_code' => 'RU'],\n            ['name' => 'Yakutsk', 'country_code' => 'RU'],\n            ['name' => 'Minna', 'country_code' => 'NG'],\n            ['name' => 'Hisar', 'country_code' => 'IN'],\n            ['name' => 'Puerto La Cruz', 'country_code' => 'VE'],\n            ['name' => 'Podolsk', 'country_code' => 'RU'],\n            ['name' => 'Ciudad Victoria', 'country_code' => 'MX'],\n            ['name' => 'Ciudad del Este', 'country_code' => 'PY'],\n            ['name' => 'Vaughan', 'country_code' => 'CA'],\n            ['name' => 'Oakashicho', 'country_code' => 'JP'],\n            ['name' => 'Pekalongan', 'country_code' => 'ID'],\n            ['name' => 'Adiyaman', 'country_code' => 'TR'],\n            ['name' => 'Vila Nova de Gaia', 'country_code' => 'PT'],\n            ['name' => 'Curepipe', 'country_code' => 'MU'],\n            ['name' => 'Cabanatuan City', 'country_code' => 'PH'],\n            ['name' => 'Paulista', 'country_code' => 'BR'],\n            ['name' => 'Oaxaca', 'country_code' => 'MX'],\n            ['name' => 'Armenia', 'country_code' => 'CO'],\n            ['name' => 'Akita', 'country_code' => 'JP'],\n            ['name' => 'San Bernardo', 'country_code' => 'CL'],\n            ['name' => 'Wollongong', 'country_code' => 'AU'],\n            ['name' => 'Brest', 'country_code' => 'FR'],\n            ['name' => 'Awka', 'country_code' => 'NG'],\n            ['name' => 'Iksan', 'country_code' => 'KR'],\n            ['name' => 'Taubate', 'country_code' => 'BR'],\n            ['name' => 'Antioch', 'country_code' => 'US'],\n            ['name' => 'Lakeland', 'country_code' => 'US'],\n            ['name' => 'Soc Trang', 'country_code' => 'VN'],\n            ['name' => 'Awasa', 'country_code' => 'ET'],\n            ['name' => 'Mardan', 'country_code' => 'PK'],\n            ['name' => 'Popayan', 'country_code' => 'CO'],\n            ['name' => 'Praia Grande', 'country_code' => 'BR'],\n            ['name' => 'Qianzhou', 'country_code' => 'CN'],\n            ['name' => 'Cotabato', 'country_code' => 'PH'],\n            ['name' => 'Valladolid', 'country_code' => 'ES'],\n            ['name' => 'Mossoro', 'country_code' => 'BR'],\n            ['name' => 'Coatepeque', 'country_code' => 'GT'],\n            ['name' => 'Bidar', 'country_code' => 'IN'],\n            ['name' => 'Bialystok', 'country_code' => 'PL'],\n            ['name' => 'Merida', 'country_code' => 'VE'],\n            ['name' => 'Murmansk', 'country_code' => 'RU'],\n            ['name' => 'Ar Raqqah', 'country_code' => 'SY'],\n            ['name' => 'Afyonkarahisar', 'country_code' => 'TR'],\n            ['name' => 'Vigo', 'country_code' => 'ES'],\n            ['name' => 'Jember', 'country_code' => 'ID'],\n            ['name' => 'Bahia Blanca', 'country_code' => 'AR'],\n            ['name' => 'Iskenderun', 'country_code' => 'TR'],\n            ['name' => 'Al Mubarraz', 'country_code' => 'SA'],\n            ['name' => 'Petropolis', 'country_code' => 'BR'],\n            ['name' => 'Al Kharj', 'country_code' => 'SA'],\n            ['name' => 'Rampur', 'country_code' => 'IN'],\n            ['name' => 'Najran', 'country_code' => 'SA'],\n            ['name' => 'Chernihiv', 'country_code' => 'UA'],\n            ['name' => 'Yangsan', 'country_code' => 'KR'],\n            ['name' => 'Comilla', 'country_code' => 'BD'],\n            ['name' => 'Oyster Bay', 'country_code' => 'US'],\n            ['name' => 'Valparaiso', 'country_code' => 'CL'],\n            ['name' => 'Augsburg', 'country_code' => 'DE'],\n            ['name' => 'Mbeya', 'country_code' => 'TZ'],\n            ['name' => 'Limeira', 'country_code' => 'BR'],\n            ['name' => 'Rangpur', 'country_code' => 'BD'],\n            ['name' => 'Shiliguri', 'country_code' => 'IN'],\n            ['name' => 'Aksaray', 'country_code' => 'TR'],\n            ['name' => 'Navotas', 'country_code' => 'PH'],\n            ['name' => 'Corum', 'country_code' => 'TR'],\n            ['name' => 'Bali', 'country_code' => 'IN'],\n            ['name' => 'Ismailia', 'country_code' => 'EG'],\n            ['name' => 'Vila Teixeira da Silva', 'country_code' => 'AO'],\n            ['name' => 'Panipat', 'country_code' => 'IN'],\n            ['name' => 'Delmas', 'country_code' => 'HT'],\n            ['name' => 'Batna', 'country_code' => 'DZ'],\n            ['name' => 'Kunp o', 'country_code' => 'KR'],\n            ['name' => 'Tambov', 'country_code' => 'RU'],\n            ['name' => 'Iasi', 'country_code' => 'RO'],\n            ['name' => 'Thies', 'country_code' => 'SN'],\n            ['name' => 'Makurdi', 'country_code' => 'NG'],\n            ['name' => 'Kherson', 'country_code' => 'UA'],\n            ['name' => 'Groznyy', 'country_code' => 'RU'],\n            ['name' => 'Hong an', 'country_code' => 'CN'],\n            ['name' => 'Bafoussam', 'country_code' => 'CM'],\n            ['name' => 'Resistencia', 'country_code' => 'AR'],\n            ['name' => 'Brasov', 'country_code' => 'RO'],\n            ['name' => 'Kassel', 'country_code' => 'DE'],\n            ['name' => 'Juliaca', 'country_code' => 'PE'],\n            ['name' => 'Karimnagar', 'country_code' => 'IN'],\n            ['name' => 'Morioka', 'country_code' => 'JP'],\n            ['name' => 'Setif', 'country_code' => 'DZ'],\n            ['name' => 'Trenton', 'country_code' => 'US'],\n            ['name' => 'Kaunas', 'country_code' => 'LT'],\n            ['name' => 'Mulhouse', 'country_code' => 'FR'],\n            ['name' => 'Sekondi', 'country_code' => 'GH'],\n            ['name' => 'Lincoln', 'country_code' => 'US'],\n            ['name' => 'Bhuj', 'country_code' => 'IN'],\n            ['name' => 'Ichalkaranji', 'country_code' => 'IN'],\n            ['name' => 'Tirupati', 'country_code' => 'IN'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Anchorage', 'country_code' => 'US'],\n            ['name' => 'Punto Fijo', 'country_code' => 'VE'],\n            ['name' => 'Sincelejo', 'country_code' => 'CO'],\n            ['name' => 'Plano', 'country_code' => 'US'],\n            ['name' => 'Irvine', 'country_code' => 'US'],\n            ['name' => 'Camacari', 'country_code' => 'BR'],\n            ['name' => 'Orleans', 'country_code' => 'FR'],\n            ['name' => 'Binangonan', 'country_code' => 'PH'],\n            ['name' => 'Suzano', 'country_code' => 'BR'],\n            ['name' => 'Hospet', 'country_code' => 'IN'],\n            ['name' => 'Ostrava', 'country_code' => 'CZ'],\n            ['name' => 'Tacna', 'country_code' => 'PE'],\n            ['name' => 'Korhogo', 'country_code' => 'CI'],\n            ['name' => 'Constanta', 'country_code' => 'RO'],\n            ['name' => 'Haifa', 'country_code' => 'IL'],\n            ['name' => 'Coacalco', 'country_code' => 'MX'],\n            ['name' => 'Crato', 'country_code' => 'BR'],\n            ['name' => 'Limoges', 'country_code' => 'FR'],\n            ['name' => 'Davenport', 'country_code' => 'US'],\n            ['name' => 'Fukushima', 'country_code' => 'JP'],\n            ['name' => 'Barinas', 'country_code' => 'VE'],\n            ['name' => 'Coro', 'country_code' => 'VE'],\n            ['name' => 'Bago', 'country_code' => 'MM'],\n            ['name' => 'Fuquan', 'country_code' => 'CN'],\n            ['name' => 'Tongchuanshi', 'country_code' => 'CN'],\n            ['name' => 'Aizawl', 'country_code' => 'IN'],\n            ['name' => 'Santa Maria', 'country_code' => 'BR'],\n            ['name' => 'Taboao da Serra', 'country_code' => 'BR'],\n            ['name' => 'Maraba', 'country_code' => 'BR'],\n            ['name' => 'Sannai', 'country_code' => 'IN'],\n            ['name' => 'Huozhou', 'country_code' => 'CN'],\n            ['name' => 'Temuco', 'country_code' => 'CL'],\n            ['name' => 'Sterlitamak', 'country_code' => 'RU'],\n            ['name' => 'Rockford', 'country_code' => 'US'],\n            ['name' => 'Tegal', 'country_code' => 'ID'],\n            ['name' => 'Ica', 'country_code' => 'PE'],\n            ['name' => 'Newark', 'country_code' => 'US'],\n            ['name' => 'Jining', 'country_code' => 'CN'],\n            ['name' => 'Chuncheon', 'country_code' => 'KR'],\n            ['name' => 'Malard', 'country_code' => 'IR'],\n            ['name' => 'Pematangsiantar', 'country_code' => 'ID'],\n            ['name' => 'Long Xuyen', 'country_code' => 'VN'],\n            ['name' => 'Petrozavodsk', 'country_code' => 'RU'],\n            ['name' => 'South Bend', 'country_code' => 'US'],\n            ['name' => 'Mingaora', 'country_code' => 'PK'],\n            ['name' => 'San Pedro Carcha', 'country_code' => 'GT'],\n            ['name' => 'Barasat', 'country_code' => 'IN'],\n            ['name' => 'Shreveport', 'country_code' => 'US'],\n            ['name' => 'Sumbe', 'country_code' => 'AO'],\n            ['name' => 'Viet Tri', 'country_code' => 'VN'],\n            ['name' => 'Cherkasy', 'country_code' => 'UA'],\n            ['name' => 'Caala', 'country_code' => 'AO'],\n            ['name' => 'Wiesbaden', 'country_code' => 'DE'],\n            ['name' => 'Kostroma', 'country_code' => 'RU'],\n            ['name' => 'Round Lake Beach', 'country_code' => 'US'],\n            ['name' => 'Gyeongsan', 'country_code' => 'KR'],\n            ['name' => 'Governador Valadares', 'country_code' => 'BR'],\n            ['name' => 'Katowice', 'country_code' => 'PL'],\n            ['name' => 'Shaowu', 'country_code' => 'CN'],\n            ['name' => 'Sfax', 'country_code' => 'TN'],\n            ['name' => 'Nizhnevartovsk', 'country_code' => 'RU'],\n            ['name' => 'Linxia Chengguanzhen', 'country_code' => 'CN'],\n            ['name' => 'Pachuca', 'country_code' => 'MX'],\n            ['name' => 'Juazeiro do Norte', 'country_code' => 'BR'],\n            ['name' => 'Dire Dawa', 'country_code' => 'ET'],\n            ['name' => 'Khmelnytskyi', 'country_code' => 'UA'],\n            ['name' => 'Owo', 'country_code' => 'NG'],\n            ['name' => 'San Cristobal', 'country_code' => 'DO'],\n            ['name' => 'Savannah', 'country_code' => 'US'],\n            ['name' => 'Posadas', 'country_code' => 'AR'],\n            ['name' => 'Gatineau', 'country_code' => 'CA'],\n            ['name' => 'Windsor', 'country_code' => 'CA'],\n            ['name' => 'Myrtle Beach', 'country_code' => 'US'],\n            ['name' => 'Mbandaka', 'country_code' => 'CD'],\n            ['name' => 'Tehuacan', 'country_code' => 'MX'],\n            ['name' => 'La Guaira', 'country_code' => 'VE'],\n            ['name' => 'Kunsan', 'country_code' => 'KR'],\n            ['name' => 'Chula Vista', 'country_code' => 'US'],\n            ['name' => 'Ratlam', 'country_code' => 'IN'],\n            ['name' => 'Yeosu', 'country_code' => 'KR'],\n            ['name' => 'Crato', 'country_code' => 'BR'],\n            ['name' => 'Derby', 'country_code' => 'GB'],\n            ['name' => 'Tsu', 'country_code' => 'JP'],\n            ['name' => 'Kafr ad Dawwar', 'country_code' => 'EG'],\n            ['name' => 'Eugene', 'country_code' => 'US'],\n            ['name' => 'Gijon', 'country_code' => 'ES'],\n            ['name' => 'Bijiao', 'country_code' => 'CN'],\n            ['name' => 'Chiayi', 'country_code' => 'TW'],\n            ['name' => 'Palmas', 'country_code' => 'BR'],\n            ['name' => 'Craiova', 'country_code' => 'RO'],\n            ['name' => 'Sorong', 'country_code' => 'ID'],\n            ['name' => 'Majene', 'country_code' => 'ID'],\n            ['name' => 'Bukhara', 'country_code' => 'UZ'],\n            ['name' => 'Aomori', 'country_code' => 'JP'],\n            ['name' => 'Thai Binh', 'country_code' => 'VN'],\n            ['name' => 'Minato', 'country_code' => 'JP'],\n            ['name' => 'Binjai', 'country_code' => 'ID'],\n            ['name' => 'Fuchu', 'country_code' => 'JP'],\n            ['name' => 'Oral', 'country_code' => 'KZ'],\n            ['name' => 'Brahmanbaria', 'country_code' => 'BD'],\n            ['name' => 'Sarta', 'country_code' => 'IR'],\n            ['name' => 'Imphal', 'country_code' => 'IN'],\n            ['name' => 'Plymouth', 'country_code' => 'GB'],\n            ['name' => 'Santo Domingo de los Colorados', 'country_code' => 'EC'],\n            ['name' => 'Novorossiysk', 'country_code' => 'RU'],\n            ['name' => 'Santa Ana', 'country_code' => 'SV'],\n            ['name' => 'Zhytomyr', 'country_code' => 'UA'],\n            ['name' => 'Villa Altagracia', 'country_code' => 'DO'],\n            ['name' => 'Gombe', 'country_code' => 'NG'],\n            ['name' => 'Mito', 'country_code' => 'JP'],\n            ['name' => 'Espoo', 'country_code' => 'FI'],\n            ['name' => 'Drug', 'country_code' => 'IN'],\n            ['name' => 'Floridablanca', 'country_code' => 'CO'],\n            ['name' => 'Bamenda', 'country_code' => 'CM'],\n            ['name' => 'Handwara', 'country_code' => 'IN'],\n            ['name' => 'Lucena', 'country_code' => 'PH'],\n            ['name' => 'Canton', 'country_code' => 'US'],\n            ['name' => 'Yoshkar-Ola', 'country_code' => 'RU'],\n            ['name' => 'Parnamirim', 'country_code' => 'BR'],\n            ['name' => 'Nalchik', 'country_code' => 'RU'],\n            ['name' => 'Ichihara', 'country_code' => 'JP'],\n            ['name' => 'Aswan', 'country_code' => 'EG'],\n            ['name' => 'Salamanca', 'country_code' => 'MX'],\n            ['name' => 'Inegol', 'country_code' => 'TR'],\n            ['name' => 'Chernivtsi', 'country_code' => 'UA'],\n            ['name' => 'Sumare', 'country_code' => 'BR'],\n            ['name' => 'Lubbock', 'country_code' => 'US'],\n            ['name' => 'Yanbu ', 'country_code' => 'SA'],\n            ['name' => 'Sumy', 'country_code' => 'UA'],\n            ['name' => 'Tshikapa', 'country_code' => 'CD'],\n            ['name' => 'Anantapur', 'country_code' => 'IN'],\n            ['name' => 'San Pablo', 'country_code' => 'PH'],\n            ['name' => 'Reading', 'country_code' => 'US'],\n            ['name' => 'Winter Haven', 'country_code' => 'US'],\n            ['name' => 'Ipatinga', 'country_code' => 'BR'],\n            ['name' => 'Myeik', 'country_code' => 'MM'],\n            ['name' => 'Kutahya', 'country_code' => 'TR'],\n            ['name' => 'Salem', 'country_code' => 'US'],\n            ['name' => 'Djelfa', 'country_code' => 'DZ'],\n            ['name' => 'Suncheon', 'country_code' => 'KR'],\n            ['name' => 'Graz', 'country_code' => 'AT'],\n            ['name' => 'St. Petersburg', 'country_code' => 'US'],\n            ['name' => 'Engels', 'country_code' => 'RU'],\n            ['name' => 'Kindu', 'country_code' => 'CD'],\n            ['name' => 'Oruro', 'country_code' => 'BO'],\n            ['name' => 'Dezful', 'country_code' => 'IR'],\n            ['name' => 'Osmaniye', 'country_code' => 'TR'],\n            ['name' => 'Lafayette', 'country_code' => 'US'],\n            ['name' => 'Kyongju', 'country_code' => 'KR'],\n            ['name' => 'Dumai', 'country_code' => 'ID'],\n            ['name' => 'Gent', 'country_code' => 'BE'],\n            ['name' => 'San Lorenzo', 'country_code' => 'PY'],\n            ['name' => 'Geelong', 'country_code' => 'AU'],\n            ['name' => 'Corlu', 'country_code' => 'TR'],\n            ['name' => 'Nawabshah', 'country_code' => 'PK'],\n            ['name' => 'Gelsenkirchen', 'country_code' => 'DE'],\n            ['name' => 'Bordeaux', 'country_code' => 'FR'],\n            ['name' => 'Monchengladbach', 'country_code' => 'DE'],\n            ['name' => 'Volta Redonda', 'country_code' => 'BR'],\n            ['name' => 'Matala', 'country_code' => 'AO'],\n            ['name' => 'Annaba', 'country_code' => 'DZ'],\n            ['name' => 'Barueri', 'country_code' => 'BR'],\n            ['name' => 'Laredo', 'country_code' => 'US'],\n            ['name' => 'Nonthaburi', 'country_code' => 'TH'],\n            ['name' => 'Jersey City', 'country_code' => 'US'],\n            ['name' => 'Venice', 'country_code' => 'IT'],\n            ['name' => 'Quang Ngai', 'country_code' => 'VN'],\n            ['name' => 'Concord', 'country_code' => 'US'],\n            ['name' => 'Damanhur', 'country_code' => 'EG'],\n            ['name' => 'Ciudad Benito Juarez', 'country_code' => 'MX'],\n            ['name' => 'Cascavel', 'country_code' => 'BR'],\n            ['name' => 'Hiratsuka', 'country_code' => 'JP'],\n            ['name' => 'Columbus', 'country_code' => 'US'],\n            ['name' => 'Chandler', 'country_code' => 'US'],\n            ['name' => 'Sakarya', 'country_code' => 'TR'],\n            ['name' => 'Tagum', 'country_code' => 'PH'],\n            ['name' => 'Fukui', 'country_code' => 'JP'],\n            ['name' => 'Soka', 'country_code' => 'JP'],\n            ['name' => 'Kunduz', 'country_code' => 'AF'],\n            ['name' => 'Ciudad Santa Catarina', 'country_code' => 'MX'],\n            ['name' => 'Los Mochis', 'country_code' => 'MX'],\n            ['name' => 'Imperatriz', 'country_code' => 'BR'],\n            ['name' => 'Texcoco', 'country_code' => 'MX'],\n            ['name' => 'Santa Maria', 'country_code' => 'PH'],\n            ['name' => 'Misratah', 'country_code' => 'LY'],\n            ['name' => 'Isparta', 'country_code' => 'TR'],\n            ['name' => 'Foz do Iguacu', 'country_code' => 'BR'],\n            ['name' => 'Verona', 'country_code' => 'IT'],\n            ['name' => 'Huayin', 'country_code' => 'CN'],\n            ['name' => 'Etawah', 'country_code' => 'IN'],\n            ['name' => 'McKinney', 'country_code' => 'US'],\n            ['name' => 'Playa del Carmen', 'country_code' => 'MX'],\n            ['name' => 'Scottsdale', 'country_code' => 'US'],\n            ['name' => 'Wolverhampton', 'country_code' => 'GB'],\n            ['name' => 'Killeen', 'country_code' => 'US'],\n            ['name' => 'Bergen', 'country_code' => 'NO'],\n            ['name' => 'Tallahassee', 'country_code' => 'US'],\n            ['name' => 'Horlivka', 'country_code' => 'UA'],\n            ['name' => 'Antsirabe', 'country_code' => 'MG'],\n            ['name' => 'Ondo', 'country_code' => 'NG'],\n            ['name' => 'San Mateo', 'country_code' => 'PH'],\n            ['name' => 'Ap Da Loi', 'country_code' => 'VN'],\n            ['name' => 'Viamao', 'country_code' => 'BR'],\n            ['name' => 'Peoria', 'country_code' => 'US'],\n            ['name' => 'Gravatai', 'country_code' => 'BR'],\n            ['name' => 'Kediri', 'country_code' => 'ID'],\n            ['name' => 'Damaturu', 'country_code' => 'NG'],\n            ['name' => 'Tokushima', 'country_code' => 'JP'],\n            ['name' => 'Malolos', 'country_code' => 'PH'],\n            ['name' => 'La Paz', 'country_code' => 'MX'],\n            ['name' => 'Wilmington', 'country_code' => 'US'],\n            ['name' => 'Raichur', 'country_code' => 'IN'],\n            ['name' => 'Mawlamyine', 'country_code' => 'MM'],\n            ['name' => 'Turmero', 'country_code' => 'VE'],\n            ['name' => 'Kuala Terengganu', 'country_code' => 'MY'],\n            ['name' => 'Daloa', 'country_code' => 'CI'],\n            ['name' => 'Puerto Princesa', 'country_code' => 'PH'],\n            ['name' => 'Mocamedes', 'country_code' => 'AO'],\n            ['name' => 'Vitoria-Gasteiz', 'country_code' => 'ES'],\n            ['name' => 'Qarshi', 'country_code' => 'UZ'],\n            ['name' => 'Montgomery', 'country_code' => 'US'],\n            ['name' => 'Gilbert', 'country_code' => 'US'],\n            ['name' => 'Rishon LeZiyyon', 'country_code' => 'IL'],\n            ['name' => 'Ongole', 'country_code' => 'IN'],\n            ['name' => 'Arua', 'country_code' => 'UG'],\n            ['name' => 'Bharatpur', 'country_code' => 'IN'],\n            ['name' => 'Shinozaki', 'country_code' => 'JP'],\n            ['name' => 'Goma', 'country_code' => 'CD'],\n            ['name' => 'Rach Gia', 'country_code' => 'VN'],\n            ['name' => 'Kanggye', 'country_code' => 'KP'],\n            ['name' => 'Taganrog', 'country_code' => 'RU'],\n            ['name' => 'Kiziltepe', 'country_code' => 'TR'],\n            ['name' => 'El Fasher', 'country_code' => 'SD'],\n            ['name' => 'Varzea Grande', 'country_code' => 'BR'],\n            ['name' => 'Las Condes', 'country_code' => 'CL'],\n            ['name' => 'Glendale', 'country_code' => 'US'],\n            ['name' => 'Santiago del Estero', 'country_code' => 'AR'],\n            ['name' => 'Hakodate', 'country_code' => 'JP'],\n            ['name' => 'Usak', 'country_code' => 'TR'],\n            ['name' => 'Begusarai', 'country_code' => 'IN'],\n            ['name' => 'North Las Vegas', 'country_code' => 'US'],\n            ['name' => 'Sonipat', 'country_code' => 'IN'],\n            ['name' => 'Los Teques', 'country_code' => 'VE'],\n            ['name' => 'Mabalacat', 'country_code' => 'PH'],\n            ['name' => 'Jinshi', 'country_code' => 'CN'],\n            ['name' => 'Chofugaoka', 'country_code' => 'JP'],\n            ['name' => 'Osh', 'country_code' => 'KG'],\n            ['name' => 'Iwo', 'country_code' => 'NG'],\n            ['name' => 'Bata', 'country_code' => 'GQ'],\n            ['name' => 'Komsomol sk-na-Amure', 'country_code' => 'RU'],\n            ['name' => 'Babol', 'country_code' => 'IR'],\n            ['name' => 'Galati', 'country_code' => 'RO'],\n            ['name' => 'Al Bayda ', 'country_code' => 'LY'],\n            ['name' => 'Kurmuk', 'country_code' => 'SD'],\n            ['name' => 'Manzhouli', 'country_code' => 'CN'],\n            ['name' => 'Braunschweig', 'country_code' => 'DE'],\n            ['name' => 'Rivne', 'country_code' => 'UA'],\n            ['name' => 'Gdynia', 'country_code' => 'PL'],\n            ['name' => 'Soyapango', 'country_code' => 'SV'],\n            ['name' => 'Palangkaraya', 'country_code' => 'ID'],\n            ['name' => 'Silang', 'country_code' => 'PH'],\n            ['name' => 'Al Minya', 'country_code' => 'EG'],\n            ['name' => 'Hafr al Batin', 'country_code' => 'SA'],\n            ['name' => 'Chigasaki', 'country_code' => 'JP'],\n            ['name' => 'Bukan', 'country_code' => 'IR'],\n            ['name' => 'Aachen', 'country_code' => 'DE'],\n            ['name' => 'Kiel', 'country_code' => 'DE'],\n            ['name' => 'Sahiwal', 'country_code' => 'PK'],\n            ['name' => 'Thu Dau Mot', 'country_code' => 'VN'],\n            ['name' => 'Novo Hamburgo', 'country_code' => 'BR'],\n            ['name' => 'Sibu', 'country_code' => 'MY'],\n            ['name' => 'Yato', 'country_code' => 'JP'],\n            ['name' => 'Parana', 'country_code' => 'AR'],\n            ['name' => 'Yamagata', 'country_code' => 'JP'],\n            ['name' => 'Oruro', 'country_code' => 'BO'],\n            ['name' => 'Tsukuba-kenkyugakuen-toshi', 'country_code' => 'JP'],\n            ['name' => 'Merlo', 'country_code' => 'AR'],\n            ['name' => 'Mage', 'country_code' => 'BR'],\n            ['name' => 'Syktyvkar', 'country_code' => 'RU'],\n            ['name' => 'Khimki', 'country_code' => 'RU'],\n            ['name' => 'Biratnagar', 'country_code' => 'NP'],\n            ['name' => 'Colombo', 'country_code' => 'BR'],\n            ['name' => 'Chemnitz', 'country_code' => 'DE'],\n            ['name' => 'Saskatoon', 'country_code' => 'CA'],\n            ['name' => 'Colon', 'country_code' => 'PA'],\n            ['name' => 'Itagui', 'country_code' => 'CO'],\n            ['name' => 'Abertawe', 'country_code' => 'GB'],\n            ['name' => 'Jessore', 'country_code' => 'BD'],\n            ['name' => 'Beichengqu', 'country_code' => 'CN'],\n            ['name' => 'Tuy Hoa', 'country_code' => 'VN'],\n            ['name' => 'Shrirampur', 'country_code' => 'IN'],\n            ['name' => 'Chesapeake', 'country_code' => 'US'],\n            ['name' => 'Fuji', 'country_code' => 'JP'],\n            ['name' => 'Hapur', 'country_code' => 'IN'],\n            ['name' => 'Bahir Dar', 'country_code' => 'ET'],\n            ['name' => 'Manisa', 'country_code' => 'TR'],\n            ['name' => 'Tanga', 'country_code' => 'TZ'],\n            ['name' => 'Sabzevar', 'country_code' => 'IR'],\n            ['name' => 'Ramgundam', 'country_code' => 'IN'],\n            ['name' => 'Porto', 'country_code' => 'PT'],\n            ['name' => 'Baruta', 'country_code' => 'VE'],\n            ['name' => 'Tacloban', 'country_code' => 'PH'],\n            ['name' => 'Itaborai', 'country_code' => 'BR'],\n            ['name' => 'Myitkyina', 'country_code' => 'MM'],\n            ['name' => 'Barnstable', 'country_code' => 'US'],\n            ['name' => 'Haeju', 'country_code' => 'KP'],\n            ['name' => 'Petah Tiqwa', 'country_code' => 'IL'],\n            ['name' => 'Norfolk', 'country_code' => 'US'],\n            ['name' => 'Gonzalez Catan', 'country_code' => 'AR'],\n            ['name' => 'Sete Lagoas', 'country_code' => 'BR'],\n            ['name' => 'Tarapoto', 'country_code' => 'PE'],\n            ['name' => 'Zhangping', 'country_code' => 'CN'],\n            ['name' => 'San Juan del Rio', 'country_code' => 'MX'],\n            ['name' => 'Sao Carlos', 'country_code' => 'BR'],\n            ['name' => 'Fremont', 'country_code' => 'US'],\n            ['name' => 'Halle', 'country_code' => 'DE'],\n            ['name' => 'Sao Leopoldo', 'country_code' => 'BR'],\n            ['name' => 'Arakawa', 'country_code' => 'JP'],\n            ['name' => 'Duzce', 'country_code' => 'TR'],\n            ['name' => 'Anju', 'country_code' => 'KP'],\n            ['name' => 'Divinopolis', 'country_code' => 'BR'],\n            ['name' => 'Aarhus', 'country_code' => 'DK'],\n            ['name' => 'Kennewick', 'country_code' => 'US'],\n            ['name' => 'Hobart', 'country_code' => 'AU'],\n            ['name' => 'Atushi', 'country_code' => 'CN'],\n            ['name' => 'Chimoio', 'country_code' => 'MZ'],\n            ['name' => 'Limassol', 'country_code' => 'CY'],\n            ['name' => 'Garland', 'country_code' => 'US'],\n            ['name' => 'Magdeburg', 'country_code' => 'DE'],\n            ['name' => 'Irving', 'country_code' => 'US'],\n            ['name' => 'Hachimancho', 'country_code' => 'JP'],\n            ['name' => 'Longueuil', 'country_code' => 'CA'],\n            ['name' => 'Mokpo', 'country_code' => 'KR'],\n            ['name' => 'Kosice', 'country_code' => 'SK'],\n            ['name' => ' Ajman', 'country_code' => 'AE'],\n            ['name' => 'Lille', 'country_code' => 'FR'],\n            ['name' => 'Banda Aceh', 'country_code' => 'ID'],\n            ['name' => 'Shenmu', 'country_code' => 'CN'],\n            ['name' => 'Le Havre', 'country_code' => 'FR'],\n            ['name' => 'Taiping', 'country_code' => 'MY'],\n            ['name' => 'P yong-dong', 'country_code' => 'KP'],\n            ['name' => 'Springs', 'country_code' => 'ZA'],\n            ['name' => 'Ivano-Frankivsk', 'country_code' => 'UA'],\n            ['name' => 'As Sib', 'country_code' => 'OM'],\n            ['name' => 'Narayanganj', 'country_code' => 'BD'],\n            ['name' => 'Maradi', 'country_code' => 'NE'],\n            ['name' => 'Wuyishan', 'country_code' => 'CN'],\n            ['name' => 'Sato', 'country_code' => 'JP'],\n            ['name' => 'Amol', 'country_code' => 'IR'],\n            ['name' => 'Quilmes', 'country_code' => 'AR'],\n            ['name' => 'Mirpur Khas', 'country_code' => 'PK'],\n            ['name' => 'Nizhnekamsk', 'country_code' => 'RU'],\n            ['name' => 'Visalia', 'country_code' => 'US'],\n            ['name' => 'Al Jubayl', 'country_code' => 'SA'],\n            ['name' => 'Pathein', 'country_code' => 'MM'],\n            ['name' => 'Secunderabad', 'country_code' => 'IN'],\n            ['name' => 'Neya', 'country_code' => 'JP'],\n            ['name' => 'Chishui', 'country_code' => 'CN'],\n            ['name' => 'Centurion', 'country_code' => 'ZA'],\n            ['name' => 'Atlantic City', 'country_code' => 'US'],\n            ['name' => 'Uluberiya', 'country_code' => 'IN'],\n            ['name' => 'Shakhty', 'country_code' => 'RU'],\n            ['name' => 'Pakdasht', 'country_code' => 'IR'],\n            ['name' => 'Granada', 'country_code' => 'ES'],\n            ['name' => 'Abha', 'country_code' => 'SA'],\n            ['name' => 'Ibb', 'country_code' => 'YE'],\n            ['name' => 'Garoua', 'country_code' => 'CM'],\n            ['name' => 'Bole', 'country_code' => 'CN'],\n            ['name' => 'Ganda', 'country_code' => 'AO'],\n            ['name' => 'Elche', 'country_code' => 'ES'],\n            ['name' => 'Najafabad', 'country_code' => 'IR'],\n            ['name' => 'Bayamo', 'country_code' => 'CU'],\n            ['name' => 'Porbandar', 'country_code' => 'IN'],\n            ['name' => 'Kamianske', 'country_code' => 'UA'],\n            ['name' => 'Borujerd', 'country_code' => 'IR'],\n            ['name' => 'Paradise', 'country_code' => 'US'],\n            ['name' => 'Singaraja', 'country_code' => 'ID'],\n            ['name' => 'Macae', 'country_code' => 'BR'],\n            ['name' => 'Miri', 'country_code' => 'MY'],\n            ['name' => 'Machala', 'country_code' => 'EC'],\n            ['name' => 'Longquan', 'country_code' => 'CN'],\n            ['name' => 'Monclova', 'country_code' => 'MX'],\n            ['name' => 'Puducherry', 'country_code' => 'IN'],\n            ['name' => 'Olongapo', 'country_code' => 'PH'],\n            ['name' => 'Messina', 'country_code' => 'IT'],\n            ['name' => 'Kremenchuk', 'country_code' => 'UA'],\n            ['name' => 'Nashua', 'country_code' => 'US'],\n            ['name' => 'Santarem', 'country_code' => 'BR'],\n            ['name' => 'Badalona', 'country_code' => 'ES'],\n            ['name' => 'Okara', 'country_code' => 'PK'],\n            ['name' => 'Arlington', 'country_code' => 'US'],\n            ['name' => 'Talisay', 'country_code' => 'PH'],\n            ['name' => 'Hialeah', 'country_code' => 'US'],\n            ['name' => 'Saidpur', 'country_code' => 'BD'],\n            ['name' => 'York', 'country_code' => 'US'],\n            ['name' => 'Saga', 'country_code' => 'JP'],\n            ['name' => 'Burnaby', 'country_code' => 'CA'],\n            ['name' => 'Rancagua', 'country_code' => 'CL'],\n            ['name' => 'Dzerzhinsk', 'country_code' => 'RU'],\n            ['name' => 'Milton Keynes', 'country_code' => 'GB'],\n            ['name' => 'Marilia', 'country_code' => 'BR'],\n            ['name' => 'Bratsk', 'country_code' => 'RU'],\n            ['name' => 'Jiayuguan', 'country_code' => 'CN'],\n            ['name' => 'Indaiatuba', 'country_code' => 'BR'],\n            ['name' => 'Envigado', 'country_code' => 'CO'],\n            ['name' => 'Freiburg im Breisgau', 'country_code' => 'DE'],\n            ['name' => 'Eloy Alfaro', 'country_code' => 'EC'],\n            ['name' => 'Maracanau', 'country_code' => 'BR'],\n            ['name' => 'Ageoshimo', 'country_code' => 'JP'],\n            ['name' => 'Qarchak', 'country_code' => 'IR'],\n            ['name' => 'Neuquen', 'country_code' => 'AR'],\n            ['name' => 'Ibb', 'country_code' => 'YE'],\n            ['name' => 'Banfield', 'country_code' => 'AR'],\n            ['name' => 'Cabo Frio', 'country_code' => 'BR'],\n            ['name' => 'Singkawang', 'country_code' => 'ID'],\n            ['name' => 'Orsk', 'country_code' => 'RU'],\n            ['name' => 'Vizianagaram', 'country_code' => 'IN'],\n            ['name' => 'North Hempstead', 'country_code' => 'US'],\n            ['name' => 'Evansville', 'country_code' => 'US'],\n            ['name' => 'Cotia', 'country_code' => 'BR'],\n            ['name' => 'Pali', 'country_code' => 'IN'],\n            ['name' => 'Noginsk', 'country_code' => 'RU'],\n            ['name' => 'Kropyvnytskyi', 'country_code' => 'UA'],\n            ['name' => 'Czestochowa', 'country_code' => 'PL'],\n            ['name' => 'Rondonopolis', 'country_code' => 'BR'],\n            ['name' => 'Guantanamo', 'country_code' => 'CU'],\n            ['name' => 'Krefeld', 'country_code' => 'DE'],\n            ['name' => 'Tanza', 'country_code' => 'PH'],\n            ['name' => 'Marilao', 'country_code' => 'PH'],\n            ['name' => 'Guadalupe', 'country_code' => 'MX'],\n            ['name' => 'Taito', 'country_code' => 'JP'],\n            ['name' => 'Kolpino', 'country_code' => 'RU'],\n            ['name' => 'Burgas', 'country_code' => 'BG'],\n            ['name' => 'Puerto Vallarta', 'country_code' => 'MX'],\n            ['name' => 'Avondale', 'country_code' => 'US'],\n            ['name' => 'Nyala', 'country_code' => 'SD'],\n            ['name' => 'Brownsville', 'country_code' => 'US'],\n            ['name' => 'Dasoguz', 'country_code' => 'TM'],\n            ['name' => 'Turkistan', 'country_code' => 'KZ'],\n            ['name' => 'Probolinggo', 'country_code' => 'ID'],\n            ['name' => 'Jacarei', 'country_code' => 'BR'],\n            ['name' => 'Gusau', 'country_code' => 'NG'],\n            ['name' => 'Buenavista', 'country_code' => 'MX'],\n            ['name' => 'Quetzaltenango', 'country_code' => 'GT'],\n            ['name' => 'Tarrasa', 'country_code' => 'ES'],\n            ['name' => 'Araraquara', 'country_code' => 'BR'],\n            ['name' => 'Angarsk', 'country_code' => 'RU'],\n            ['name' => 'Sousse', 'country_code' => 'TN'],\n            ['name' => 'Nagercoil', 'country_code' => 'IN'],\n            ['name' => 'Heroica Nogales', 'country_code' => 'MX'],\n            ['name' => 'Apapa', 'country_code' => 'NG'],\n            ['name' => 'Nyanza', 'country_code' => 'RW'],\n            ['name' => 'Itapevi', 'country_code' => 'BR'],\n            ['name' => 'Bac Lieu', 'country_code' => 'VN'],\n            ['name' => 'Varamin', 'country_code' => 'IR'],\n            ['name' => 'Padangsidempuan', 'country_code' => 'ID'],\n            ['name' => 'Karnal', 'country_code' => 'IN'],\n            ['name' => 'Mubi', 'country_code' => 'NG'],\n            ['name' => 'Toamasina', 'country_code' => 'MG'],\n            ['name' => 'Campeche', 'country_code' => 'MX'],\n            ['name' => 'Korolev', 'country_code' => 'RU'],\n            ['name' => 'Dourados', 'country_code' => 'BR'],\n            ['name' => 'Hunchun', 'country_code' => 'CN'],\n            ['name' => 'Tampere', 'country_code' => 'FI'],\n            ['name' => 'Minamiozuma', 'country_code' => 'JP'],\n            ['name' => 'Blagoveshchensk', 'country_code' => 'RU'],\n            ['name' => 'Velikiy Novgorod', 'country_code' => 'RU'],\n            ['name' => 'Longjin', 'country_code' => 'CN'],\n            ['name' => 'Ashdod', 'country_code' => 'IL'],\n            ['name' => 'Carlos Manuel de Cespedes', 'country_code' => 'CU'],\n            ['name' => 'Nigde', 'country_code' => 'TR'],\n            ['name' => 'Chapeco', 'country_code' => 'BR'],\n            ['name' => 'Sandton', 'country_code' => 'ZA'],\n            ['name' => 'Tanjore', 'country_code' => 'IN'],\n            ['name' => 'Staryy Oskol', 'country_code' => 'RU'],\n            ['name' => 'Itajai', 'country_code' => 'BR'],\n            ['name' => 'Puri', 'country_code' => 'IN'],\n            ['name' => 'Cartago', 'country_code' => 'CR'],\n            ['name' => 'Ji an Shi', 'country_code' => 'CN'],\n            ['name' => 'Soledad de Graciano Sanchez', 'country_code' => 'MX'],\n            ['name' => 'Presidente Prudente', 'country_code' => 'BR'],\n            ['name' => 'Jose C. Paz', 'country_code' => 'AR'],\n            ['name' => 'Ternopil', 'country_code' => 'UA'],\n            ['name' => 'Rufisque', 'country_code' => 'SN'],\n            ['name' => 'Formosa', 'country_code' => 'AR'],\n            ['name' => 'Sabadell', 'country_code' => 'ES'],\n            ['name' => 'Gueckedou', 'country_code' => 'GN'],\n            ['name' => 'Sambhal', 'country_code' => 'IN'],\n            ['name' => 'Polokwane', 'country_code' => 'ZA'],\n            ['name' => 'Neyshabur', 'country_code' => 'IR'],\n            ['name' => 'Sidon', 'country_code' => 'LB'],\n            ['name' => 'Radom', 'country_code' => 'PL'],\n            ['name' => 'Lutsk', 'country_code' => 'UA'],\n            ['name' => 'Oviedo', 'country_code' => 'ES'],\n            ['name' => 'Gulfport', 'country_code' => 'US'],\n            ['name' => 'Saveh', 'country_code' => 'IR'],\n            ['name' => 'La Vega', 'country_code' => 'DO'],\n            ['name' => 'Appleton', 'country_code' => 'US'],\n            ['name' => 'Khomeyni Shahr', 'country_code' => 'IR'],\n            ['name' => 'Juazeiro', 'country_code' => 'BR'],\n            ['name' => 'Itabuna', 'country_code' => 'BR'],\n            ['name' => 'Al Khubar', 'country_code' => 'SA'],\n            ['name' => 'Islington', 'country_code' => 'GB'],\n            ['name' => 'Cordoba', 'country_code' => 'MX'],\n            ['name' => 'Ciudad Acuna', 'country_code' => 'MX'],\n            ['name' => 'Tulua', 'country_code' => 'CO'],\n            ['name' => 'Mainz', 'country_code' => 'DE'],\n            ['name' => 'Hortolandia', 'country_code' => 'BR'],\n            ['name' => 'Bitung', 'country_code' => 'ID'],\n            ['name' => 'Naihati', 'country_code' => 'IN'],\n            ['name' => 'Petrel', 'country_code' => 'ES'],\n            ['name' => 'Damietta', 'country_code' => 'EG'],\n            ['name' => 'Manta', 'country_code' => 'EC'],\n            ['name' => 'Butembo', 'country_code' => 'CD'],\n            ['name' => 'San Miguel', 'country_code' => 'SV'],\n            ['name' => 'San Pedro de Macoris', 'country_code' => 'DO'],\n            ['name' => 'Netanya', 'country_code' => 'IL'],\n            ['name' => 'Bremerton', 'country_code' => 'US'],\n            ['name' => 'Alor Setar', 'country_code' => 'MY'],\n            ['name' => 'Hickory', 'country_code' => 'US'],\n            ['name' => 'Luton', 'country_code' => 'GB'],\n            ['name' => 'Tacoma', 'country_code' => 'US'],\n            ['name' => 'Laayoune', 'country_code' => 'MA'],\n            ['name' => 'Aberdeen', 'country_code' => 'GB'],\n            ['name' => 'Lubeck', 'country_code' => 'DE'],\n            ['name' => 'Denov', 'country_code' => 'UZ'],\n            ['name' => 'Matrah', 'country_code' => 'OM'],\n            ['name' => 'Qostanay', 'country_code' => 'KZ'],\n            ['name' => 'Banjarbaru', 'country_code' => 'ID'],\n            ['name' => 'Sa Dec', 'country_code' => 'VN'],\n            ['name' => 'Norwich', 'country_code' => 'GB'],\n            ['name' => 'Gujiao', 'country_code' => 'CN'],\n            ['name' => 'Cartagena', 'country_code' => 'ES'],\n            ['name' => 'Petropavl', 'country_code' => 'KZ'],\n            ['name' => 'Marg ilon', 'country_code' => 'UZ'],\n            ['name' => 'Gangneung', 'country_code' => 'KR'],\n            ['name' => 'San Bernardino', 'country_code' => 'US'],\n            ['name' => 'Cua', 'country_code' => 'VE'],\n            ['name' => 'Meycauayan', 'country_code' => 'PH'],\n            ['name' => 'Vantaa', 'country_code' => 'FI'],\n            ['name' => 'As Samawah', 'country_code' => 'IQ'],\n            ['name' => 'Ormoc', 'country_code' => 'PH'],\n            ['name' => 'College Station', 'country_code' => 'US'],\n            ['name' => 'Golmud', 'country_code' => 'CN'],\n            ['name' => 'Kalamazoo', 'country_code' => 'US'],\n            ['name' => 'Regina', 'country_code' => 'CA'],\n            ['name' => 'Thousand Oaks', 'country_code' => 'US'],\n            ['name' => 'La Victoria', 'country_code' => 'VE'],\n            ['name' => 'Shimla', 'country_code' => 'IN'],\n            ['name' => 'Mohammedia', 'country_code' => 'MA'],\n            ['name' => 'Babruysk', 'country_code' => 'BY'],\n            ['name' => 'Roanoke', 'country_code' => 'US'],\n            ['name' => 'Osan', 'country_code' => 'KR'],\n            ['name' => 'Geneva', 'country_code' => 'CH'],\n            ['name' => 'Fontana', 'country_code' => 'US'],\n            ['name' => 'Sikasso', 'country_code' => 'ML'],\n            ['name' => 'Alvorada', 'country_code' => 'BR'],\n            ['name' => 'Warnes', 'country_code' => 'BO'],\n            ['name' => 'Ciudad Madero', 'country_code' => 'MX'],\n            ['name' => 'Oberhausen', 'country_code' => 'DE'],\n            ['name' => 'El Tigre', 'country_code' => 'VE'],\n            ['name' => 'Jerez de la Frontera', 'country_code' => 'ES'],\n            ['name' => 'Jalalabad', 'country_code' => 'AF'],\n            ['name' => 'Moreno Valley', 'country_code' => 'US'],\n            ['name' => 'Sidi Bel Abbes', 'country_code' => 'DZ'],\n            ['name' => 'Limbe', 'country_code' => 'CM'],\n            ['name' => 'Kure', 'country_code' => 'JP'],\n            ['name' => 'Tumaco', 'country_code' => 'CO'],\n            ['name' => 'Padova', 'country_code' => 'IT'],\n            ['name' => 'Pamplona', 'country_code' => 'ES'],\n            ['name' => 'Arroyo Naranjo', 'country_code' => 'CU'],\n            ['name' => 'Ploiesti', 'country_code' => 'RO'],\n            ['name' => 'Criciuma', 'country_code' => 'BR'],\n            ['name' => 'Metepec', 'country_code' => 'MX'],\n            ['name' => 'Rio Grande', 'country_code' => 'BR'],\n            ['name' => 'Pskov', 'country_code' => 'RU'],\n            ['name' => 'Bila Tserkva', 'country_code' => 'UA'],\n            ['name' => 'Chungju', 'country_code' => 'KR'],\n            ['name' => 'Babylon', 'country_code' => 'US'],\n            ['name' => 'Tunja', 'country_code' => 'CO'],\n            ['name' => 'Barrancabermeja', 'country_code' => 'CO'],\n            ['name' => 'Cachoeiro de Itapemirim', 'country_code' => 'BR'],\n            ['name' => 'Santa Cruz', 'country_code' => 'ES'],\n            ['name' => 'San-Pedro', 'country_code' => 'CI'],\n            ['name' => 'Bukit Mertajam', 'country_code' => 'MY'],\n            ['name' => 'Ijebu-Ode', 'country_code' => 'NG'],\n            ['name' => 'Cork', 'country_code' => 'IE'],\n            ['name' => 'Guarenas', 'country_code' => 'VE'],\n            ['name' => 'Taisheng', 'country_code' => 'CN'],\n            ['name' => 'Rostock', 'country_code' => 'DE'],\n            ['name' => 'Dongning', 'country_code' => 'CN'],\n            ['name' => 'Moratuwa', 'country_code' => 'LK'],\n            ['name' => 'Burutu', 'country_code' => 'NG'],\n            ['name' => 'Ich on', 'country_code' => 'KR'],\n            ['name' => 'Puerto Cabello', 'country_code' => 'VE'],\n            ['name' => 'Beersheba', 'country_code' => 'IL'],\n            ['name' => 'Nasim Shahr', 'country_code' => 'IR'],\n            ['name' => 'North Port', 'country_code' => 'US'],\n            ['name' => 'Almere', 'country_code' => 'NL'],\n            ['name' => 'Lubuklinggau', 'country_code' => 'ID'],\n            ['name' => 'Qina', 'country_code' => 'EG'],\n            ['name' => 'Mary', 'country_code' => 'TM'],\n            ['name' => 'Fargo', 'country_code' => 'US'],\n            ['name' => 'Huangyan', 'country_code' => 'CN'],\n            ['name' => 'Santa Clara', 'country_code' => 'CU'],\n            ['name' => 'Kharagpur', 'country_code' => 'IN'],\n            ['name' => 'Northcote', 'country_code' => 'NZ'],\n            ['name' => 'Waitakere', 'country_code' => 'NZ'],\n            ['name' => 'Monywa', 'country_code' => 'MM'],\n            ['name' => 'Dindigul', 'country_code' => 'IN'],\n            ['name' => 'Morogoro', 'country_code' => 'TZ'],\n            ['name' => 'Green Bay', 'country_code' => 'US'],\n            ['name' => 'Cidade de Nacala', 'country_code' => 'MZ'],\n            ['name' => 'Talca', 'country_code' => 'CL'],\n            ['name' => 'Portoviejo', 'country_code' => 'EC'],\n            ['name' => 'Spring Valley', 'country_code' => 'US'],\n            ['name' => 'Pingzhen', 'country_code' => 'TW'],\n            ['name' => 'Linz', 'country_code' => 'AT'],\n            ['name' => 'Trieste', 'country_code' => 'IT'],\n            ['name' => 'Phan Thiet', 'country_code' => 'VN'],\n            ['name' => 'Kalemie', 'country_code' => 'CD'],\n            ['name' => 'Biskra', 'country_code' => 'DZ'],\n            ['name' => 'Kamirenjaku', 'country_code' => 'JP'],\n            ['name' => 'Ingraj Bazar', 'country_code' => 'IN'],\n            ['name' => 'Bani Suwayf', 'country_code' => 'EG'],\n            ['name' => 'Ellore', 'country_code' => 'IN'],\n            ['name' => 'Leon', 'country_code' => 'ES'],\n            ['name' => 'Mytishchi', 'country_code' => 'RU'],\n            ['name' => 'Zanzibar', 'country_code' => 'TZ'],\n            ['name' => 'Jiutai', 'country_code' => 'CN'],\n            ['name' => 'Qa em Shahr', 'country_code' => 'IR'],\n            ['name' => 'Bolu', 'country_code' => 'TR'],\n            ['name' => 'Amarillo', 'country_code' => 'US'],\n            ['name' => 'Ziguinchor', 'country_code' => 'SN'],\n            ['name' => 'Ternate', 'country_code' => 'ID'],\n            ['name' => 'Puqi', 'country_code' => 'CN'],\n            ['name' => 'Bene Beraq', 'country_code' => 'IL'],\n            ['name' => 'Passo Fundo', 'country_code' => 'BR'],\n            ['name' => 'La Ceiba', 'country_code' => 'HN'],\n            ['name' => 'Yachiyo', 'country_code' => 'JP'],\n            ['name' => 'Coquimbo', 'country_code' => 'CL'],\n            ['name' => 'Mandi Burewala', 'country_code' => 'PK'],\n            ['name' => 'Marawi City', 'country_code' => 'PH'],\n            ['name' => 'Erfurt', 'country_code' => 'DE'],\n            ['name' => 'Portland', 'country_code' => 'US'],\n            ['name' => 'Groningen', 'country_code' => 'NL'],\n            ['name' => 'Biysk', 'country_code' => 'RU'],\n            ['name' => 'Charleroi', 'country_code' => 'BE'],\n            ['name' => 'La Romana', 'country_code' => 'DO'],\n            ['name' => 'Mazabuka', 'country_code' => 'ZM'],\n            ['name' => 'Poza Rica de Hidalgo', 'country_code' => 'MX'],\n            ['name' => 'Torun', 'country_code' => 'PL'],\n            ['name' => 'Tanjungpinang', 'country_code' => 'ID'],\n            ['name' => 'Zhubei', 'country_code' => 'TW'],\n            ['name' => 'Djougou', 'country_code' => 'BJ'],\n            ['name' => 'Luxor', 'country_code' => 'EG'],\n            ['name' => 'Tarakan', 'country_code' => 'ID'],\n            ['name' => 'Santa Barbara', 'country_code' => 'US'],\n            ['name' => 'Gainesville', 'country_code' => 'US'],\n            ['name' => 'Las Tunas', 'country_code' => 'CU'],\n            ['name' => 'Al Khawr', 'country_code' => 'QA'],\n            ['name' => 'Lyubertsy', 'country_code' => 'RU'],\n            ['name' => 'Matsue', 'country_code' => 'JP'],\n            ['name' => 'Sosnowiec', 'country_code' => 'PL'],\n            ['name' => 'Arica', 'country_code' => 'CL'],\n            ['name' => 'Al Khums', 'country_code' => 'LY'],\n            ['name' => 'Almeria', 'country_code' => 'ES'],\n            ['name' => 'Huacho', 'country_code' => 'PE'],\n            ['name' => 'Debrecen', 'country_code' => 'HU'],\n            ['name' => 'Nandyal', 'country_code' => 'IN'],\n            ['name' => 'Cajamarca', 'country_code' => 'PE'],\n            ['name' => 'Huntington', 'country_code' => 'US'],\n            ['name' => 'Croydon', 'country_code' => 'GB'],\n            ['name' => 'Lashkar Gah', 'country_code' => 'AF'],\n            ['name' => 'Haldia', 'country_code' => 'IN'],\n            ['name' => 'San Pablo de las Salinas', 'country_code' => 'MX'],\n            ['name' => 'Mai Adua', 'country_code' => 'NG'],\n            ['name' => 'Jacobabad', 'country_code' => 'PK'],\n            ['name' => 'Tokat', 'country_code' => 'TR'],\n            ['name' => 'Qyzylorda', 'country_code' => 'KZ'],\n            ['name' => 'Nema', 'country_code' => 'MR'],\n            ['name' => 'Olympia', 'country_code' => 'US'],\n            ['name' => 'Gurgaon', 'country_code' => 'IN'],\n            ['name' => 'Guacara', 'country_code' => 'VE'],\n            ['name' => 'Liege', 'country_code' => 'BE'],\n            ['name' => 'Oulu', 'country_code' => 'FI'],\n            ['name' => 'Frisco', 'country_code' => 'US'],\n            ['name' => 'Isidro Casanova', 'country_code' => 'AR'],\n            ['name' => 'Maimanah', 'country_code' => 'AF'],\n            ['name' => 'Yonkers', 'country_code' => 'US'],\n            ['name' => 'Rio Claro', 'country_code' => 'BR'],\n            ['name' => 'Norwich', 'country_code' => 'US'],\n            ['name' => 'Az Zawiyah', 'country_code' => 'LY'],\n            ['name' => 'Bulandshahr', 'country_code' => 'IN'],\n            ['name' => 'Kasama', 'country_code' => 'ZM'],\n            ['name' => 'Puerto Cortes', 'country_code' => 'HN'],\n            ['name' => 'Kouribga', 'country_code' => 'MA'],\n            ['name' => 'Lahad Datu', 'country_code' => 'MY'],\n            ['name' => 'Bojnurd', 'country_code' => 'IR'],\n            ['name' => 'Pagadian', 'country_code' => 'PH'],\n            ['name' => 'Fuenlabrada', 'country_code' => 'ES'],\n            ['name' => 'Banja Luka', 'country_code' => 'BA'],\n            ['name' => 'Glendale', 'country_code' => 'US'],\n            ['name' => 'Huntington Beach', 'country_code' => 'US'],\n            ['name' => 'Baharampur', 'country_code' => 'IN'],\n            ['name' => 'Taranto', 'country_code' => 'IT'],\n            ['name' => 'Brescia', 'country_code' => 'IT'],\n            ['name' => 'Logrono', 'country_code' => 'ES'],\n            ['name' => 'Ashino', 'country_code' => 'JP'],\n            ['name' => 'Martapura', 'country_code' => 'ID'],\n            ['name' => 'Chakradharpur', 'country_code' => 'IN'],\n            ['name' => 'Deltona', 'country_code' => 'US'],\n            ['name' => 'Chilpancingo', 'country_code' => 'MX'],\n            ['name' => 'Naga City', 'country_code' => 'PH'],\n            ['name' => 'Richmond', 'country_code' => 'CA'],\n            ['name' => 'Holon', 'country_code' => 'IL'],\n            ['name' => 'Gemena', 'country_code' => 'CD'],\n            ['name' => 'Tocuyito', 'country_code' => 'VE'],\n            ['name' => 'Oradea', 'country_code' => 'RO'],\n            ['name' => 'Legazpi City', 'country_code' => 'PH'],\n            ['name' => 'Hedong', 'country_code' => 'CN'],\n            ['name' => 'Madhyamgram', 'country_code' => 'IN'],\n            ['name' => 'Aurora', 'country_code' => 'US'],\n            ['name' => 'Bhiwani', 'country_code' => 'IN'],\n            ['name' => 'Burhanpur', 'country_code' => 'IN'],\n            ['name' => 'Higashi-Hiroshima', 'country_code' => 'JP'],\n            ['name' => 'Mbanza-Ngungu', 'country_code' => 'CD'],\n            ['name' => 'Huanuco', 'country_code' => 'PE'],\n            ['name' => 'Hino', 'country_code' => 'JP'],\n            ['name' => 'Zipaquira', 'country_code' => 'CO'],\n            ['name' => 'Beni Mellal', 'country_code' => 'MA'],\n            ['name' => 'Prokopyevsk', 'country_code' => 'RU'],\n            ['name' => 'Rajin', 'country_code' => 'KP'],\n            ['name' => 'Ghandinagar', 'country_code' => 'IN'],\n            ['name' => 'Eldoret', 'country_code' => 'KE'],\n            ['name' => 'Kusong', 'country_code' => 'KP'],\n            ['name' => 'Suhaj', 'country_code' => 'EG'],\n            ['name' => 'Khammam', 'country_code' => 'IN'],\n            ['name' => 'Kirikkale', 'country_code' => 'TR'],\n            ['name' => 'Parma', 'country_code' => 'IT'],\n            ['name' => 'Suzuka', 'country_code' => 'JP'],\n            ['name' => 'Brikama', 'country_code' => 'GM'],\n            ['name' => 'Acarigua', 'country_code' => 'VE'],\n            ['name' => 'Hugli', 'country_code' => 'IN'],\n            ['name' => 'Viransehir', 'country_code' => 'TR'],\n            ['name' => 'San Luis Rio Colorado', 'country_code' => 'MX'],\n            ['name' => 'Iskandar', 'country_code' => 'UZ'],\n            ['name' => 'Tempe', 'country_code' => 'US'],\n            ['name' => 'Naka', 'country_code' => 'JP'],\n            ['name' => 'Leganes', 'country_code' => 'ES'],\n            ['name' => 'Kenema', 'country_code' => 'SL'],\n            ['name' => 'La Serena', 'country_code' => 'CL'],\n            ['name' => 'Overland Park', 'country_code' => 'US'],\n            ['name' => 'Bandar-e Bushehr', 'country_code' => 'IR'],\n            ['name' => 'Prato', 'country_code' => 'IT'],\n            ['name' => 'Cholula de Rivadabia', 'country_code' => 'MX'],\n            ['name' => 'Anseong', 'country_code' => 'KR'],\n            ['name' => 'Yuzhno-Sakhalinsk', 'country_code' => 'RU'],\n            ['name' => 'Richmond Hill', 'country_code' => 'CA'],\n            ['name' => 'Dese', 'country_code' => 'ET'],\n            ['name' => 'Gorontalo', 'country_code' => 'ID'],\n            ['name' => 'Grand Prairie', 'country_code' => 'US'],\n            ['name' => 'Quelimane', 'country_code' => 'MZ'],\n            ['name' => 'Tebessa', 'country_code' => 'DZ'],\n            ['name' => 'Kumagaya', 'country_code' => 'JP'],\n            ['name' => 'Al Jahra ', 'country_code' => 'KW'],\n            ['name' => 'Karaman', 'country_code' => 'TR'],\n            ['name' => 'La Plata', 'country_code' => 'AR'],\n            ['name' => 'San Juan Sacatepequez', 'country_code' => 'GT'],\n            ['name' => 'Cap-Haitien', 'country_code' => 'HT'],\n            ['name' => 'Oakville', 'country_code' => 'CA'],\n            ['name' => 'Sunrise Manor', 'country_code' => 'US'],\n            ['name' => 'Muar', 'country_code' => 'MY'],\n            ['name' => 'Godoy Cruz', 'country_code' => 'AR'],\n            ['name' => 'Mus', 'country_code' => 'TR'],\n            ['name' => 'Hyesan', 'country_code' => 'KP'],\n            ['name' => 'Kielce', 'country_code' => 'PL'],\n            ['name' => 'Arapiraca', 'country_code' => 'BR'],\n            ['name' => 'Valencia', 'country_code' => 'PH'],\n            ['name' => 'Aracatuba', 'country_code' => 'BR'],\n            ['name' => 'Swindon', 'country_code' => 'GB'],\n            ['name' => 'Castanhal', 'country_code' => 'BR'],\n            ['name' => 'Guanare', 'country_code' => 'VE'],\n            ['name' => 'Waco', 'country_code' => 'US'],\n            ['name' => 'Basildon', 'country_code' => 'GB'],\n            ['name' => 'Madiun', 'country_code' => 'ID'],\n            ['name' => 'Valera', 'country_code' => 'VE'],\n            ['name' => 'Mahbubnagar', 'country_code' => 'IN'],\n            ['name' => 'Pasuruan', 'country_code' => 'ID'],\n            ['name' => 'Aydin', 'country_code' => 'TR'],\n            ['name' => 'Shibin al Kawm', 'country_code' => 'EG'],\n            ['name' => 'Armavir', 'country_code' => 'RU'],\n            ['name' => 'Nova Friburgo', 'country_code' => 'BR'],\n            ['name' => 'Donostia', 'country_code' => 'ES'],\n            ['name' => 'Balakovo', 'country_code' => 'RU'],\n            ['name' => 'Batu', 'country_code' => 'ID'],\n            ['name' => 'Anjomachi', 'country_code' => 'JP'],\n            ['name' => 'Salinas', 'country_code' => 'US'],\n            ['name' => 'Mwene-Ditu', 'country_code' => 'CD'],\n            ['name' => 'Son Tay', 'country_code' => 'VN'],\n            ['name' => 'Ferraz de Vasconcelos', 'country_code' => 'BR'],\n            ['name' => 'Santa Barbara d Oeste', 'country_code' => 'BR'],\n            ['name' => 'Saddiqabad', 'country_code' => 'PK'],\n            ['name' => 'Rybinsk', 'country_code' => 'RU'],\n            ['name' => 'Chongju', 'country_code' => 'KP'],\n            ['name' => 'Hagen', 'country_code' => 'DE'],\n            ['name' => 'Ngaoundere', 'country_code' => 'CM'],\n            ['name' => 'Potosi', 'country_code' => 'BO'],\n            ['name' => 'San Carlos City', 'country_code' => 'PH'],\n            ['name' => 'Pak Kret', 'country_code' => 'TH'],\n            ['name' => 'Waterbury', 'country_code' => 'US'],\n            ['name' => 'Donghua', 'country_code' => 'CN'],\n            ['name' => 'Parakou', 'country_code' => 'BJ'],\n            ['name' => 'Mutare', 'country_code' => 'ZW'],\n            ['name' => 'Mataro', 'country_code' => 'ES'],\n            ['name' => 'Narsingdi', 'country_code' => 'BD'],\n            ['name' => 'Pinar del Rio', 'country_code' => 'CU'],\n            ['name' => 'Clarksville', 'country_code' => 'US'],\n            ['name' => 'Raiganj', 'country_code' => 'IN'],\n            ['name' => 'Tachikawa', 'country_code' => 'JP'],\n            ['name' => 'Prabumulih', 'country_code' => 'ID'],\n            ['name' => 'Angra dos Reis', 'country_code' => 'BR'],\n            ['name' => 'San Francisco de Macoris', 'country_code' => 'DO'],\n            ['name' => 'Al Hasakah', 'country_code' => 'SY'],\n            ['name' => 'Turku', 'country_code' => 'FI'],\n            ['name' => 'Guatire', 'country_code' => 'VE'],\n            ['name' => 'Iquique', 'country_code' => 'CL'],\n            ['name' => 'Cedar Rapids', 'country_code' => 'US'],\n            ['name' => 'Kofu', 'country_code' => 'JP'],\n            ['name' => 'San Diego', 'country_code' => 'VE'],\n            ['name' => 'Gharyan', 'country_code' => 'LY'],\n            ['name' => 'Tottori', 'country_code' => 'JP'],\n            ['name' => 'Bournemouth', 'country_code' => 'GB'],\n            ['name' => 'Chaedok', 'country_code' => 'KP'],\n            ['name' => 'Joetsu', 'country_code' => 'JP'],\n            ['name' => 'Prizren', 'country_code' => 'XK'],\n            ['name' => 'Sioux Falls', 'country_code' => 'US'],\n            ['name' => 'Kairouan', 'country_code' => 'TN'],\n            ['name' => 'Shendi', 'country_code' => 'SD'],\n            ['name' => 'Izuo', 'country_code' => 'JP'],\n            ['name' => 'Reims', 'country_code' => 'FR'],\n            ['name' => 'Modena', 'country_code' => 'IT'],\n            ['name' => 'Ed Damazin', 'country_code' => 'SD'],\n            ['name' => 'Khujand', 'country_code' => 'TJ'],\n            ['name' => 'El Jadid', 'country_code' => 'MA'],\n            ['name' => 'Dunhuang', 'country_code' => 'CN'],\n            ['name' => 'Huntington', 'country_code' => 'US'],\n            ['name' => 'Mahesana', 'country_code' => 'IN'],\n            ['name' => 'Guri', 'country_code' => 'KR'],\n            ['name' => 'Jamaame', 'country_code' => 'SO'],\n            ['name' => 'Panabo', 'country_code' => 'PH'],\n            ['name' => 'Breda', 'country_code' => 'NL'],\n            ['name' => 'Adoni', 'country_code' => 'IN'],\n            ['name' => 'Semnan', 'country_code' => 'IR'],\n            ['name' => 'Temirtau', 'country_code' => 'KZ'],\n            ['name' => 'Basel', 'country_code' => 'CH'],\n            ['name' => 'Yei', 'country_code' => 'SS'],\n            ['name' => 'Ontario', 'country_code' => 'US'],\n            ['name' => 'Luzhang', 'country_code' => 'CN'],\n            ['name' => 'Hagerstown', 'country_code' => 'US'],\n            ['name' => 'Al Qamishli', 'country_code' => 'SY'],\n            ['name' => 'Ibirite', 'country_code' => 'BR'],\n            ['name' => 'Manzanillo', 'country_code' => 'MX'],\n            ['name' => 'Erie', 'country_code' => 'US'],\n            ['name' => 'Teresopolis', 'country_code' => 'BR'],\n            ['name' => 'Vancouver', 'country_code' => 'US'],\n            ['name' => 'Nampa', 'country_code' => 'US'],\n            ['name' => 'Fardis', 'country_code' => 'IR'],\n            ['name' => 'Fianarantsoa', 'country_code' => 'MG'],\n            ['name' => 'Banjar', 'country_code' => 'ID'],\n            ['name' => 'Severodvinsk', 'country_code' => 'RU'],\n            ['name' => 'Rzeszow', 'country_code' => 'PL'],\n            ['name' => 'Siguiri', 'country_code' => 'GN'],\n            ['name' => 'Calbayog City', 'country_code' => 'PH'],\n            ['name' => 'Bhusaval', 'country_code' => 'IN'],\n            ['name' => 'Trondheim', 'country_code' => 'NO'],\n            ['name' => 'Aqtau', 'country_code' => 'KZ'],\n            ['name' => 'Nis', 'country_code' => 'RS'],\n            ['name' => 'Araguaina', 'country_code' => 'BR'],\n            ['name' => 'Narashino', 'country_code' => 'JP'],\n            ['name' => 'Abakan', 'country_code' => 'RU'],\n            ['name' => 'Burlington', 'country_code' => 'CA'],\n            ['name' => 'Bahraigh', 'country_code' => 'IN'],\n            ['name' => 'Potsdam', 'country_code' => 'DE'],\n            ['name' => 'Bo', 'country_code' => 'SL'],\n            ['name' => 'Worthing', 'country_code' => 'GB'],\n            ['name' => 'Pinrang', 'country_code' => 'ID'],\n            ['name' => 'Guarapuava', 'country_code' => 'BR'],\n            ['name' => 'Spartanburg', 'country_code' => 'US'],\n            ['name' => 'Braila', 'country_code' => 'RO'],\n            ['name' => 'Gastonia', 'country_code' => 'US'],\n            ['name' => 'Amadora', 'country_code' => 'PT'],\n            ['name' => 'Braga', 'country_code' => 'PT'],\n            ['name' => 'Fort Lauderdale', 'country_code' => 'US'],\n            ['name' => 'Kabankalan', 'country_code' => 'PH'],\n            ['name' => 'Reggio di Calabria', 'country_code' => 'IT'],\n            ['name' => 'Tonk', 'country_code' => 'IN'],\n            ['name' => 'Berazategui', 'country_code' => 'AR'],\n            ['name' => 'Khowy', 'country_code' => 'IR'],\n            ['name' => 'Sirsa', 'country_code' => 'IN'],\n            ['name' => 'Tangail', 'country_code' => 'BD'],\n            ['name' => 'Jaunpur', 'country_code' => 'IN'],\n            ['name' => 'Dosquebradas', 'country_code' => 'CO'],\n            ['name' => 'Saarbrucken', 'country_code' => 'DE'],\n            ['name' => 'Santo Tomas', 'country_code' => 'PH'],\n            ['name' => 'Petropavlovsk-Kamchatskiy', 'country_code' => 'RU'],\n            ['name' => 'Sittwe', 'country_code' => 'MM'],\n            ['name' => 'Epe', 'country_code' => 'NG'],\n            ['name' => 'Phan Rang-Thap Cham', 'country_code' => 'VN'],\n            ['name' => 'Jaragua do Sul', 'country_code' => 'BR'],\n            ['name' => 'Jima', 'country_code' => 'ET'],\n            ['name' => 'Townsville', 'country_code' => 'AU'],\n            ['name' => 'Lhokseumawe', 'country_code' => 'ID'],\n            ['name' => 'Gliwice', 'country_code' => 'PL'],\n            ['name' => 'Funtua', 'country_code' => 'NG'],\n            ['name' => 'Hinthada', 'country_code' => 'MM'],\n            ['name' => 'Turbo', 'country_code' => 'CO'],\n            ['name' => 'La Rioja', 'country_code' => 'AR'],\n            ['name' => 'Canakkale', 'country_code' => 'TR'],\n            ['name' => 'Madanapalle', 'country_code' => 'IN'],\n            ['name' => 'Palopo', 'country_code' => 'ID'],\n            ['name' => 'Ayacucho', 'country_code' => 'PE'],\n            ['name' => 'Obuase', 'country_code' => 'GH'],\n            ['name' => 'Alleppey', 'country_code' => 'IN'],\n            ['name' => 'Ipswich', 'country_code' => 'GB'],\n            ['name' => 'Boma', 'country_code' => 'CD'],\n            ['name' => 'Tiaret', 'country_code' => 'DZ'],\n            ['name' => 'Edirne', 'country_code' => 'TR'],\n            ['name' => 'Longjing', 'country_code' => 'CN'],\n            ['name' => 'Split', 'country_code' => 'HR'],\n            ['name' => 'Ilheus', 'country_code' => 'BR'],\n            ['name' => 'Lorain', 'country_code' => 'US'],\n            ['name' => 'Barra Mansa', 'country_code' => 'BR'],\n            ['name' => 'Klerksdorp', 'country_code' => 'ZA'],\n            ['name' => 'Murfreesboro', 'country_code' => 'US'],\n            ['name' => 'High Point', 'country_code' => 'US'],\n            ['name' => 'Hamm', 'country_code' => 'DE'],\n            ['name' => 'Tarija', 'country_code' => 'BO'],\n            ['name' => 'Al  Arish', 'country_code' => 'EG'],\n            ['name' => 'Sao Jose de Ribamar', 'country_code' => 'BR'],\n            ['name' => 'Paita', 'country_code' => 'PE'],\n            ['name' => 'Yopal', 'country_code' => 'CO'],\n            ['name' => 'Salatiga', 'country_code' => 'ID'],\n            ['name' => 'Newport News', 'country_code' => 'US'],\n            ['name' => 'Torbali', 'country_code' => 'TR'],\n            ['name' => 'Langsa', 'country_code' => 'ID'],\n            ['name' => 'Bade', 'country_code' => 'TW'],\n            ['name' => 'Bida', 'country_code' => 'NG'],\n            ['name' => 'Salalah', 'country_code' => 'OM'],\n            ['name' => 'Santander', 'country_code' => 'ES'],\n            ['name' => 'Matosinhos', 'country_code' => 'PT'],\n            ['name' => 'Birjand', 'country_code' => 'IR'],\n            ['name' => 'Lin an', 'country_code' => 'CN'],\n            ['name' => 'Chicoloapan', 'country_code' => 'MX'],\n            ['name' => 'Vellore', 'country_code' => 'IN'],\n            ['name' => 'Dam Dam', 'country_code' => 'IN'],\n            ['name' => 'Bejaia', 'country_code' => 'DZ'],\n            ['name' => 'Rancho Cucamonga', 'country_code' => 'US'],\n            ['name' => 'Norilsk', 'country_code' => 'RU'],\n            ['name' => 'Baranavichy', 'country_code' => 'BY'],\n            ['name' => 'Nossa Senhora do Socorro', 'country_code' => 'BR'],\n            ['name' => 'Hemet', 'country_code' => 'US'],\n            ['name' => 'Yangmei', 'country_code' => 'TW'],\n            ['name' => 'Ciudad Valles', 'country_code' => 'MX'],\n            ['name' => 'Kadugli', 'country_code' => 'SD'],\n            ['name' => 'Les Cayes', 'country_code' => 'HT'],\n            ['name' => 'Alcorcon', 'country_code' => 'ES'],\n            ['name' => 'Piraeus', 'country_code' => 'GR'],\n            ['name' => 'Sunderland', 'country_code' => 'GB'],\n            ['name' => 'Linhares', 'country_code' => 'BR'],\n            ['name' => 'Letpandan', 'country_code' => 'MM'],\n            ['name' => 'Zabrze', 'country_code' => 'PL'],\n            ['name' => 'Almada', 'country_code' => 'PT'],\n            ['name' => 'Ilford', 'country_code' => 'GB'],\n            ['name' => 'Plzen', 'country_code' => 'CZ'],\n            ['name' => 'Cuautla', 'country_code' => 'MX'],\n            ['name' => 'Rio Verde', 'country_code' => 'BR'],\n            ['name' => 'Santa Cruz', 'country_code' => 'US'],\n            ['name' => 'Saint-Louis', 'country_code' => 'SN'],\n            ['name' => 'Ait Melloul', 'country_code' => 'MA'],\n            ['name' => 'Toulon', 'country_code' => 'FR'],\n            ['name' => 'Ciudad del Carmen', 'country_code' => 'MX'],\n            ['name' => 'Danbury', 'country_code' => 'US'],\n            ['name' => 'Castellon de la Plana', 'country_code' => 'ES'],\n            ['name' => 'Peoria', 'country_code' => 'US'],\n            ['name' => 'Oeiras', 'country_code' => 'PT'],\n            ['name' => 'Dagupan City', 'country_code' => 'PH'],\n            ['name' => 'Catumbela', 'country_code' => 'AO'],\n            ['name' => 'Eregli', 'country_code' => 'TR'],\n            ['name' => 'Oceanside', 'country_code' => 'US'],\n            ['name' => 'Shibirghan', 'country_code' => 'AF'],\n            ['name' => 'Chandannagar', 'country_code' => 'IN'],\n            ['name' => 'Harar', 'country_code' => 'ET'],\n            ['name' => 'Middlesbrough', 'country_code' => 'GB'],\n            ['name' => 'Tyre', 'country_code' => 'LB'],\n            ['name' => 'Koronadal', 'country_code' => 'PH'],\n            ['name' => 'Olsztyn', 'country_code' => 'PL'],\n            ['name' => 'Cuddalore', 'country_code' => 'IN'],\n            ['name' => 'Getafe', 'country_code' => 'ES'],\n            ['name' => 'Maragheh', 'country_code' => 'IR'],\n            ['name' => 'Obiraki', 'country_code' => 'JP'],\n            ['name' => 'Tebingtinggi', 'country_code' => 'ID'],\n            ['name' => 'Comitan', 'country_code' => 'MX'],\n            ['name' => 'Takaoka', 'country_code' => 'JP'],\n            ['name' => 'Sirjan', 'country_code' => 'IR'],\n            ['name' => 'Tanauan', 'country_code' => 'PH'],\n            ['name' => 'Menemen', 'country_code' => 'TR'],\n            ['name' => 'Malaybalay', 'country_code' => 'PH'],\n            ['name' => 'Elk Grove', 'country_code' => 'US'],\n            ['name' => 'Syzran', 'country_code' => 'RU'],\n            ['name' => 'Carupano', 'country_code' => 'VE'],\n            ['name' => 'Saint-Etienne', 'country_code' => 'FR'],\n            ['name' => 'Luziania', 'country_code' => 'BR'],\n            ['name' => 'Lagos de Moreno', 'country_code' => 'MX'],\n            ['name' => 'Albacete', 'country_code' => 'ES'],\n            ['name' => 'Ludwigshafen', 'country_code' => 'DE'],\n            ['name' => 'Leon', 'country_code' => 'NI'],\n            ['name' => 'Chirala', 'country_code' => 'IN'],\n            ['name' => 'Titagarh', 'country_code' => 'IN'],\n            ['name' => 'Bielsko-Biala', 'country_code' => 'PL'],\n            ['name' => 'Beppucho', 'country_code' => 'JP'],\n            ['name' => 'General Mariano Alvarez', 'country_code' => 'PH'],\n            ['name' => 'Bytom', 'country_code' => 'PL'],\n            ['name' => 'Linjiang', 'country_code' => 'CN'],\n            ['name' => 'Ha Long', 'country_code' => 'VN'],\n            ['name' => 'Deo', 'country_code' => 'IN'],\n            ['name' => 'Tiantoujiao', 'country_code' => 'CN'],\n            ['name' => 'Pembroke Pines', 'country_code' => 'US'],\n            ['name' => 'Tlemcen', 'country_code' => 'DZ'],\n            ['name' => 'Hitachi', 'country_code' => 'JP'],\n            ['name' => 'Shahin Shahr', 'country_code' => 'IR'],\n            ['name' => 'Orekhovo-Borisovo Yuzhnoye', 'country_code' => 'RU'],\n            ['name' => 'Vallejo', 'country_code' => 'US'],\n            ['name' => 'Bertoua', 'country_code' => 'CM'],\n            ['name' => 'Moca', 'country_code' => 'DO'],\n            ['name' => 'Banyuwangi', 'country_code' => 'ID'],\n            ['name' => 'Mulheim', 'country_code' => 'DE'],\n            ['name' => 'Sacaba', 'country_code' => 'BO'],\n            ['name' => 'Carpina', 'country_code' => 'BR'],\n            ['name' => 'Reggio Emilia', 'country_code' => 'IT'],\n            ['name' => 'Banha', 'country_code' => 'EG'],\n            ['name' => 'Barrie', 'country_code' => 'CA'],\n            ['name' => 'Krasnogorsk', 'country_code' => 'RU'],\n            ['name' => 'Kaolack', 'country_code' => 'SN'],\n            ['name' => 'Izumo', 'country_code' => 'JP'],\n            ['name' => 'Burgos', 'country_code' => 'ES'],\n            ['name' => 'Niiza', 'country_code' => 'JP'],\n            ['name' => 'Guanajuato', 'country_code' => 'MX'],\n            ['name' => 'Francisco Morato', 'country_code' => 'BR'],\n            ['name' => 'Garden Grove', 'country_code' => 'US'],\n            ['name' => 'Volgodonsk', 'country_code' => 'RU'],\n            ['name' => 'Bago', 'country_code' => 'PH'],\n            ['name' => 'Toledo', 'country_code' => 'PH'],\n            ['name' => 'Kamensk-Ural skiy', 'country_code' => 'RU'],\n            ['name' => 'Enterprise', 'country_code' => 'US'],\n            ['name' => 'Kohat', 'country_code' => 'PK'],\n            ['name' => 'Cuauhtemoc', 'country_code' => 'MX'],\n            ['name' => 'Medford', 'country_code' => 'US'],\n            ['name' => 'Loja', 'country_code' => 'EC'],\n            ['name' => 'Hamilton', 'country_code' => 'NZ'],\n            ['name' => 'Ussuriysk', 'country_code' => 'RU'],\n            ['name' => 'Uvira', 'country_code' => 'CD'],\n            ['name' => 'Portmore', 'country_code' => 'JM'],\n            ['name' => 'Machilipatnam', 'country_code' => 'IN'],\n            ['name' => 'Bordj Bou Arreridj', 'country_code' => 'DZ'],\n            ['name' => 'Nukus', 'country_code' => 'UZ'],\n            ['name' => 'Malayer', 'country_code' => 'IR'],\n            ['name' => 'Timon', 'country_code' => 'BR'],\n            ['name' => 'N Zerekore', 'country_code' => 'GN'],\n            ['name' => 'Cary', 'country_code' => 'US'],\n            ['name' => 'Kluang', 'country_code' => 'MY'],\n            ['name' => 'Novocherkassk', 'country_code' => 'RU'],\n            ['name' => 'Metouia', 'country_code' => 'TN'],\n            ['name' => 'Nishio', 'country_code' => 'JP'],\n            ['name' => 'Marysville', 'country_code' => 'US'],\n            ['name' => 'Digos', 'country_code' => 'PH'],\n            ['name' => 'San Luis', 'country_code' => 'AR'],\n            ['name' => 'Puerto Montt', 'country_code' => 'CL'],\n            ['name' => 'Corona', 'country_code' => 'US'],\n            ['name' => 'Oldenburg', 'country_code' => 'DE'],\n            ['name' => 'Medinipur', 'country_code' => 'IN'],\n            ['name' => 'Fenglu', 'country_code' => 'CN'],\n            ['name' => 'Al Marj', 'country_code' => 'LY'],\n            ['name' => 'Sosan', 'country_code' => 'KR'],\n            ['name' => 'Ocala', 'country_code' => 'US'],\n            ['name' => 'Uppsala', 'country_code' => 'SE'],\n            ['name' => 'Gondomar', 'country_code' => 'PT'],\n            ['name' => 'Santa Rita', 'country_code' => 'VE'],\n            ['name' => 'San Juan', 'country_code' => 'DO'],\n            ['name' => 'Jamalpur', 'country_code' => 'BD'],\n            ['name' => 'Pocos de Caldas', 'country_code' => 'BR'],\n            ['name' => 'Fredericksburg', 'country_code' => 'US'],\n            ['name' => 'Sobral', 'country_code' => 'BR'],\n            ['name' => 'Baramula', 'country_code' => 'IN'],\n            ['name' => 'Roxas City', 'country_code' => 'PH'],\n            ['name' => 'Ambato', 'country_code' => 'EC'],\n            ['name' => 'Sorsogon', 'country_code' => 'PH'],\n            ['name' => 'Higuey', 'country_code' => 'DO'],\n            ['name' => 'Tanjungbalai', 'country_code' => 'ID'],\n            ['name' => 'Huich on', 'country_code' => 'KP'],\n            ['name' => 'Mahabad', 'country_code' => 'IR'],\n            ['name' => 'Itapecerica da Serra', 'country_code' => 'BR'],\n            ['name' => 'Sao Caetano do Sul', 'country_code' => 'BR'],\n            ['name' => 'Basuo', 'country_code' => 'CN'],\n            ['name' => 'Zlatoust', 'country_code' => 'RU'],\n            ['name' => 'Rustenburg', 'country_code' => 'ZA'],\n            ['name' => 'Patra', 'country_code' => 'GR'],\n            ['name' => 'Riohacha', 'country_code' => 'CO'],\n            ['name' => 'Catape', 'country_code' => 'AO'],\n            ['name' => 'Nador', 'country_code' => 'MA'],\n            ['name' => 'Gainesville', 'country_code' => 'US'],\n            ['name' => 'Itu', 'country_code' => 'BR'],\n            ['name' => 'Offa', 'country_code' => 'NG'],\n            ['name' => 'Fatehpur', 'country_code' => 'IN'],\n            ['name' => 'Arar', 'country_code' => 'SA'],\n            ['name' => 'Ha Tinh', 'country_code' => 'VN'],\n            ['name' => 'Kandy', 'country_code' => 'LK'],\n            ['name' => 'Al Kufah', 'country_code' => 'IQ'],\n            ['name' => 'Kimberley', 'country_code' => 'ZA'],\n            ['name' => 'Iwata', 'country_code' => 'JP'],\n            ['name' => 'Kismaayo', 'country_code' => 'SO'],\n            ['name' => 'Tenali', 'country_code' => 'IN'],\n            ['name' => 'Takaoka', 'country_code' => 'JP'],\n            ['name' => 'Skikda', 'country_code' => 'DZ'],\n            ['name' => 'Nantou', 'country_code' => 'TW'],\n            ['name' => 'Siirt', 'country_code' => 'TR'],\n            ['name' => 'Kuytun', 'country_code' => 'CN'],\n            ['name' => 'Osnabruck', 'country_code' => 'DE'],\n            ['name' => 'Korfez', 'country_code' => 'TR'],\n            ['name' => 'Perugia', 'country_code' => 'IT'],\n            ['name' => 'Udipi', 'country_code' => 'IN'],\n            ['name' => 'Oshawa', 'country_code' => 'CA'],\n            ['name' => 'Klaipeda', 'country_code' => 'LT'],\n            ['name' => 'Leverkusen', 'country_code' => 'DE'],\n            ['name' => 'Idlib', 'country_code' => 'SY'],\n            ['name' => 'Bechar', 'country_code' => 'DZ'],\n            ['name' => 'Warrington', 'country_code' => 'GB'],\n            ['name' => 'Sitalpur', 'country_code' => 'IN'],\n            ['name' => 'Caxias', 'country_code' => 'BR'],\n            ['name' => 'Cienfuegos', 'country_code' => 'CU'],\n            ['name' => 'Proddatur', 'country_code' => 'IN'],\n            ['name' => 'Conjeeveram', 'country_code' => 'IN'],\n            ['name' => 'Saqqez', 'country_code' => 'IR'],\n            ['name' => 'Zhanlicun', 'country_code' => 'CN'],\n            ['name' => 'Huddersfield', 'country_code' => 'GB'],\n            ['name' => 'Fukang', 'country_code' => 'CN'],\n            ['name' => 'Slough', 'country_code' => 'GB'],\n            ['name' => 'Bhisho', 'country_code' => 'ZA'],\n            ['name' => 'Chillan', 'country_code' => 'CL'],\n            ['name' => 'Abu Hulayfah', 'country_code' => 'KW'],\n            ['name' => 'Odense', 'country_code' => 'DK'],\n            ['name' => 'Metro', 'country_code' => 'ID'],\n            ['name' => 'Ramat Gan', 'country_code' => 'IL'],\n            ['name' => 'Muridke', 'country_code' => 'PK'],\n            ['name' => 'Ipswich', 'country_code' => 'AU'],\n            ['name' => 'Ruse', 'country_code' => 'BG'],\n            ['name' => 'Myingyan', 'country_code' => 'MM'],\n            ['name' => 'Haarlem', 'country_code' => 'NL'],\n            ['name' => 'Tema', 'country_code' => 'GH'],\n            ['name' => 'Piedras Negras', 'country_code' => 'MX'],\n            ['name' => 'Itapetininga', 'country_code' => 'BR'],\n            ['name' => 'Pocheon', 'country_code' => 'KR'],\n            ['name' => 'Turgutlu', 'country_code' => 'TR'],\n            ['name' => 'Navsari', 'country_code' => 'IN'],\n            ['name' => 'Wau', 'country_code' => 'SS'],\n            ['name' => 'Ube', 'country_code' => 'JP'],\n            ['name' => 'Golcuk', 'country_code' => 'TR'],\n            ['name' => 'Muzaffargarh', 'country_code' => 'PK'],\n            ['name' => 'Kebili', 'country_code' => 'TN'],\n            ['name' => 'Jizzax', 'country_code' => 'UZ'],\n            ['name' => 'Atyrau', 'country_code' => 'KZ'],\n            ['name' => 'Simao', 'country_code' => 'CN'],\n            ['name' => 'Mostar', 'country_code' => 'BA'],\n            ['name' => 'El Geneina', 'country_code' => 'SD'],\n            ['name' => 'Jinggang', 'country_code' => 'CN'],\n            ['name' => 'Bandar-e Mahshahr', 'country_code' => 'IR'],\n            ['name' => 'Manchester', 'country_code' => 'US'],\n            ['name' => 'Anaco', 'country_code' => 'VE'],\n            ['name' => 'Sullana', 'country_code' => 'PE'],\n            ['name' => 'Godhra', 'country_code' => 'IN'],\n            ['name' => 'Zemun', 'country_code' => 'RS'],\n            ['name' => 'Jutiapa', 'country_code' => 'GT'],\n            ['name' => 'Budaun', 'country_code' => 'IN'],\n            ['name' => 'Chittoor', 'country_code' => 'IN'],\n            ['name' => 'San Martin Texmelucan de Labastida', 'country_code' => 'MX'],\n            ['name' => 'Andong', 'country_code' => 'KR'],\n            ['name' => 'Ash Shatrah', 'country_code' => 'IQ'],\n            ['name' => 'Guadalajara', 'country_code' => 'ES'],\n            ['name' => 'Rafsanjan', 'country_code' => 'IR'],\n            ['name' => 'Benoni', 'country_code' => 'ZA'],\n            ['name' => 'Lubao', 'country_code' => 'PH'],\n            ['name' => 'Heidelberg', 'country_code' => 'DE'],\n            ['name' => 'Al Ghardaqah', 'country_code' => 'EG'],\n            ['name' => 'Salihli', 'country_code' => 'TR'],\n            ['name' => 'Ndalatando', 'country_code' => 'AO'],\n            ['name' => 'Apeldoorn', 'country_code' => 'NL'],\n            ['name' => 'Elektrostal', 'country_code' => 'RU'],\n            ['name' => 'Jequie', 'country_code' => 'BR'],\n            ['name' => 'Bontang', 'country_code' => 'ID'],\n            ['name' => 'Dong Hoi', 'country_code' => 'VN'],\n            ['name' => 'Krishnanagar', 'country_code' => 'IN'],\n            ['name' => 'Szeged', 'country_code' => 'HU'],\n            ['name' => 'Sherbrooke', 'country_code' => 'CA'],\n            ['name' => 'Solingen', 'country_code' => 'DE'],\n            ['name' => 'Tacheng', 'country_code' => 'CN'],\n            ['name' => 'Dhamar', 'country_code' => 'YE'],\n            ['name' => 'San Miguel', 'country_code' => 'AR'],\n            ['name' => 'Jose Maria Ezeiza', 'country_code' => 'AR'],\n            ['name' => 'Bayamon', 'country_code' => 'PR'],\n            ['name' => 'Braganca Paulista', 'country_code' => 'BR'],\n            ['name' => 'Ra s al Khaymah', 'country_code' => 'AE'],\n            ['name' => 'Pindamonhangaba', 'country_code' => 'BR'],\n            ['name' => 'Dijon', 'country_code' => 'FR'],\n            ['name' => 'Zhengding', 'country_code' => 'CN'],\n            ['name' => 'Giron', 'country_code' => 'CO'],\n            ['name' => 'Khost', 'country_code' => 'AF'],\n            ['name' => 'Darmstadt', 'country_code' => 'DE'],\n            ['name' => 'Saint-Marc', 'country_code' => 'HT'],\n            ['name' => 'La Laguna', 'country_code' => 'ES'],\n            ['name' => 'Arad', 'country_code' => 'RO'],\n            ['name' => 'Khanpur', 'country_code' => 'PK'],\n            ['name' => 'Taunggyi', 'country_code' => 'MM'],\n            ['name' => 'Bingol', 'country_code' => 'TR'],\n            ['name' => 'San Nicolas de los Arroyos', 'country_code' => 'AR'],\n            ['name' => 'Huaycan', 'country_code' => 'PE'],\n            ['name' => 'Bajos de Haina', 'country_code' => 'DO'],\n            ['name' => 'Kramatorsk', 'country_code' => 'UA'],\n            ['name' => 'Livorno', 'country_code' => 'IT'],\n            ['name' => 'Shahr-e Kord', 'country_code' => 'IR'],\n            ['name' => 'Talas', 'country_code' => 'TR'],\n            ['name' => 'Ekibastuz', 'country_code' => 'KZ'],\n            ['name' => 'Trece Martires City', 'country_code' => 'PH'],\n            ['name' => 'Hat Yai', 'country_code' => 'TH'],\n            ['name' => 'Chirchiq', 'country_code' => 'UZ'],\n            ['name' => 'Catamarca', 'country_code' => 'AR'],\n            ['name' => 'Jijiga', 'country_code' => 'ET'],\n            ['name' => 'Champaign', 'country_code' => 'US'],\n            ['name' => 'Alexandria', 'country_code' => 'US'],\n            ['name' => 'George', 'country_code' => 'ZA'],\n            ['name' => 'Herne', 'country_code' => 'DE'],\n            ['name' => 'Ravenna', 'country_code' => 'IT'],\n            ['name' => 'Higashimurayama', 'country_code' => 'JP'],\n            ['name' => 'Hayward', 'country_code' => 'US'],\n            ['name' => 'Abaetetuba', 'country_code' => 'BR'],\n            ['name' => 'Ogaki', 'country_code' => 'JP'],\n            ['name' => 'Saharsa', 'country_code' => 'IN'],\n            ['name' => 'Stara Zagora', 'country_code' => 'BG'],\n            ['name' => 'Chau Doc', 'country_code' => 'VN'],\n            ['name' => 'Guimaraes', 'country_code' => 'PT'],\n            ['name' => 'Matsuzaka', 'country_code' => 'JP'],\n            ['name' => 'Haripur', 'country_code' => 'IN'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'San Cristobal', 'country_code' => 'MX'],\n            ['name' => 'Rafael Castillo', 'country_code' => 'AR'],\n            ['name' => 'Rio Cuarto', 'country_code' => 'AR'],\n            ['name' => 'Bonao', 'country_code' => 'DO'],\n            ['name' => 'Villeurbanne', 'country_code' => 'FR'],\n            ['name' => 'Villanueva', 'country_code' => 'HN'],\n            ['name' => 'Gojra', 'country_code' => 'PK'],\n            ['name' => 'Teixeira de Freitas', 'country_code' => 'BR'],\n            ['name' => 'Lakewood', 'country_code' => 'US'],\n            ['name' => 'Oxford', 'country_code' => 'GB'],\n            ['name' => 'Camarajibe', 'country_code' => 'BR'],\n            ['name' => 'Lafayette', 'country_code' => 'US'],\n            ['name' => 'Fethiye', 'country_code' => 'TR'],\n            ['name' => 'Uiwang', 'country_code' => 'KR'],\n            ['name' => 'Navojoa', 'country_code' => 'MX'],\n            ['name' => 'Calama', 'country_code' => 'CL'],\n            ['name' => 'Erzincan', 'country_code' => 'TR'],\n            ['name' => 'Chaoshan', 'country_code' => 'CN'],\n            ['name' => 'Middelburg', 'country_code' => 'ZA'],\n            ['name' => 'Lajes', 'country_code' => 'BR'],\n            ['name' => 'Salzburg', 'country_code' => 'AT'],\n            ['name' => 'Mandi Bahauddin', 'country_code' => 'PK'],\n            ['name' => 'Zonguldak', 'country_code' => 'TR'],\n            ['name' => 'Isiro', 'country_code' => 'CD'],\n            ['name' => 'El Eulma', 'country_code' => 'DZ'],\n            ['name' => 'Jiutepec', 'country_code' => 'MX'],\n            ['name' => 'Batumi', 'country_code' => 'GE'],\n            ['name' => 'Pathankot', 'country_code' => 'IN'],\n            ['name' => 'Nazilli', 'country_code' => 'TR'],\n            ['name' => 'Frederick', 'country_code' => 'US'],\n            ['name' => 'Pitesti', 'country_code' => 'RO'],\n            ['name' => 'Chlef', 'country_code' => 'DZ'],\n            ['name' => 'Chetumal', 'country_code' => 'MX'],\n            ['name' => 'Angers', 'country_code' => 'FR'],\n            ['name' => 'Hanam', 'country_code' => 'KR'],\n            ['name' => 'Matagalpa', 'country_code' => 'NI'],\n            ['name' => 'Vidisha', 'country_code' => 'IN'],\n            ['name' => 'Paranagua', 'country_code' => 'BR'],\n            ['name' => 'Cam Pha', 'country_code' => 'VN'],\n            ['name' => 'Esmeraldas', 'country_code' => 'EC'],\n            ['name' => 'Kariya', 'country_code' => 'JP'],\n            ['name' => 'Lake Charles', 'country_code' => 'US'],\n            ['name' => 'Odessa', 'country_code' => 'US'],\n            ['name' => 'Mexico', 'country_code' => 'PH'],\n            ['name' => 'Cagliari', 'country_code' => 'IT'],\n            ['name' => 'Zaanstad', 'country_code' => 'NL'],\n            ['name' => 'Hitachi-Naka', 'country_code' => 'JP'],\n            ['name' => 'Nalgonda', 'country_code' => 'IN'],\n            ['name' => 'Ordu', 'country_code' => 'TR'],\n            ['name' => 'Tuscaloosa', 'country_code' => 'US'],\n            ['name' => 'Horad Barysaw', 'country_code' => 'BY'],\n            ['name' => 'Souk Ahras', 'country_code' => 'DZ'],\n            ['name' => 'Neuss', 'country_code' => 'DE'],\n            ['name' => 'Rio das Ostras', 'country_code' => 'BR'],\n            ['name' => 'Miskolc', 'country_code' => 'HU'],\n            ['name' => 'Warner Robins', 'country_code' => 'US'],\n            ['name' => 'Bartin', 'country_code' => 'TR'],\n            ['name' => 'Palmdale', 'country_code' => 'US'],\n            ['name' => 'Melitopol', 'country_code' => 'UA'],\n            ['name' => 'Cadiz', 'country_code' => 'PH'],\n            ['name' => 'Zango', 'country_code' => 'NG'],\n            ['name' => 'Concepcion', 'country_code' => 'PH'],\n            ['name' => 'Hollywood', 'country_code' => 'US'],\n            ['name' => 'Balurghat', 'country_code' => 'IN'],\n            ['name' => 'Midland', 'country_code' => 'US'],\n            ['name' => 'Surigao', 'country_code' => 'PH'],\n            ['name' => 'Dibrugarh', 'country_code' => 'IN'],\n            ['name' => 'Mahajanga', 'country_code' => 'MG'],\n            ['name' => 'Pikit', 'country_code' => 'PH'],\n            ['name' => 'Salavat', 'country_code' => 'RU'],\n            ['name' => 'Bandirma', 'country_code' => 'TR'],\n            ['name' => 'Leesburg', 'country_code' => 'US'],\n            ['name' => 'Tuguegarao', 'country_code' => 'PH'],\n            ['name' => 'Gandajika', 'country_code' => 'CD'],\n            ['name' => 'Silao', 'country_code' => 'MX'],\n            ['name' => 'San Miguel', 'country_code' => 'PH'],\n            ['name' => 'Regensburg', 'country_code' => 'DE'],\n            ['name' => 'Port Arthur', 'country_code' => 'US'],\n            ['name' => 'York', 'country_code' => 'GB'],\n            ['name' => 'Palo Negro', 'country_code' => 'VE'],\n            ['name' => 'Almetyevsk', 'country_code' => 'RU'],\n            ['name' => 'Osorno', 'country_code' => 'CL'],\n            ['name' => 'Lucapa', 'country_code' => 'AO'],\n            ['name' => 'Kafr ash Shaykh', 'country_code' => 'EG'],\n            ['name' => 'Tama', 'country_code' => 'JP'],\n            ['name' => 'Seogwipo', 'country_code' => 'KR'],\n            ['name' => 'Tochigi', 'country_code' => 'JP'],\n            ['name' => 'Moanda', 'country_code' => 'CD'],\n            ['name' => 'Barreiras', 'country_code' => 'BR'],\n            ['name' => 'Tete', 'country_code' => 'MZ'],\n            ['name' => 'Mzuzu', 'country_code' => 'MW'],\n            ['name' => 'Parnaiba', 'country_code' => 'BR'],\n            ['name' => 'Fyzabad', 'country_code' => 'IN'],\n            ['name' => 'Harrow', 'country_code' => 'GB'],\n            ['name' => 'Poole', 'country_code' => 'GB'],\n            ['name' => 'Hoeryong', 'country_code' => 'KP'],\n            ['name' => 'Kirsehir', 'country_code' => 'TR'],\n            ['name' => 'Muskegon', 'country_code' => 'US'],\n            ['name' => 'Sievierodonetsk', 'country_code' => 'UA'],\n            ['name' => 'Sinpo', 'country_code' => 'KP'],\n            ['name' => 'Dutse', 'country_code' => 'NG'],\n            ['name' => 'Baliuag', 'country_code' => 'PH'],\n            ['name' => 'Silchar', 'country_code' => 'IN'],\n            ['name' => 'Macon', 'country_code' => 'US'],\n            ['name' => 'Polomolok', 'country_code' => 'PH'],\n            ['name' => 'Cairns', 'country_code' => 'AU'],\n            ['name' => 'Yilan', 'country_code' => 'TW'],\n            ['name' => 'Papantla de Olarte', 'country_code' => 'MX'],\n            ['name' => 'Kansas City', 'country_code' => 'US'],\n            ['name' => 'Dahuaishu', 'country_code' => 'CN'],\n            ['name' => 'Ciudad de Melilla', 'country_code' => 'ES'],\n            ['name' => 'Shantipur', 'country_code' => 'IN'],\n            ['name' => 'Golmeh', 'country_code' => 'IR'],\n            ['name' => 'Peristeri', 'country_code' => 'GR'],\n            ['name' => 'Ueda', 'country_code' => 'JP'],\n            ['name' => 'Hindupur', 'country_code' => 'IN'],\n            ['name' => 'Sunnyvale', 'country_code' => 'US'],\n            ['name' => 'Fengyicun', 'country_code' => 'CN'],\n            ['name' => 'Baubau', 'country_code' => 'ID'],\n            ['name' => 'Mudon', 'country_code' => 'MM'],\n            ['name' => 'Taza', 'country_code' => 'MA'],\n            ['name' => 'Settat', 'country_code' => 'MA'],\n            ['name' => 'Tulancingo', 'country_code' => 'MX'],\n            ['name' => 'Erode', 'country_code' => 'IN'],\n            ['name' => 'Midsayap', 'country_code' => 'PH'],\n            ['name' => 'Gwangyang', 'country_code' => 'KR'],\n            ['name' => 'Tororo', 'country_code' => 'UG'],\n            ['name' => 'Kukichuo', 'country_code' => 'JP'],\n            ['name' => 'Gonbad-e Kavus', 'country_code' => 'IR'],\n            ['name' => 'Al Manaqil', 'country_code' => 'SD'],\n            ['name' => 'Miass', 'country_code' => 'RU'],\n            ['name' => 'Chinandega', 'country_code' => 'NI'],\n            ['name' => 'Nimes', 'country_code' => 'FR'],\n            ['name' => 'Saint Albans', 'country_code' => 'GB'],\n            ['name' => 'Nakhodka', 'country_code' => 'RU'],\n            ['name' => 'Quevedo', 'country_code' => 'EC'],\n            ['name' => 'Bintulu', 'country_code' => 'MY'],\n            ['name' => 'Pomona', 'country_code' => 'US'],\n            ['name' => 'Siem Reap', 'country_code' => 'KH'],\n            ['name' => 'Foggia', 'country_code' => 'IT'],\n            ['name' => 'Escondido', 'country_code' => 'US'],\n            ['name' => 'Cao Lanh', 'country_code' => 'VN'],\n            ['name' => 'Riobamba', 'country_code' => 'EC'],\n            ['name' => 'Vryheid', 'country_code' => 'ZA'],\n            ['name' => 'Benguela', 'country_code' => 'AO'],\n            ['name' => 'As Suwayhirah as Sahil', 'country_code' => 'OM'],\n            ['name' => 'Paderborn', 'country_code' => 'DE'],\n            ['name' => 'Sayama', 'country_code' => 'JP'],\n            ['name' => 'Zamora', 'country_code' => 'MX'],\n            ['name' => 'Manzanillo', 'country_code' => 'CU'],\n            ['name' => 'Pasadena', 'country_code' => 'US'],\n            ['name' => 'Florencio Varela', 'country_code' => 'AR'],\n            ['name' => 'Badajoz', 'country_code' => 'ES'],\n            ['name' => 'Talcahuano', 'country_code' => 'CL'],\n            ['name' => 'Patos de Minas', 'country_code' => 'BR'],\n            ['name' => 'Copiapo', 'country_code' => 'CL'],\n            ['name' => 'M Sila', 'country_code' => 'DZ'],\n            ['name' => 'Kragujevac', 'country_code' => 'RS'],\n            ['name' => 'Pointe-a-Pitre', 'country_code' => 'GP'],\n            ['name' => 'Rimini', 'country_code' => 'IT'],\n            ['name' => 'Dundee', 'country_code' => 'GB'],\n            ['name' => 'Ocumare del Tuy', 'country_code' => 'VE'],\n            ['name' => 'Komaki', 'country_code' => 'JP'],\n            ['name' => 'Valdivia', 'country_code' => 'CL'],\n            ['name' => 'Gulu', 'country_code' => 'UG'],\n            ['name' => 'Shimotoda', 'country_code' => 'JP'],\n            ['name' => 'Shahrud', 'country_code' => 'IR'],\n            ['name' => 'Kutaisi', 'country_code' => 'GE'],\n            ['name' => 'Kashikishi', 'country_code' => 'ZM'],\n            ['name' => 'Sumbawanga', 'country_code' => 'TZ'],\n            ['name' => 'Keren', 'country_code' => 'ER'],\n            ['name' => 'Odivelas', 'country_code' => 'PT'],\n            ['name' => 'Centro Habana', 'country_code' => 'CU'],\n            ['name' => 'New Bedford', 'country_code' => 'US'],\n            ['name' => 'Jamuria', 'country_code' => 'IN'],\n            ['name' => 'Salamanca', 'country_code' => 'ES'],\n            ['name' => 'Sariaya', 'country_code' => 'PH'],\n            ['name' => 'Potchefstroom', 'country_code' => 'ZA'],\n            ['name' => 'Arnhem', 'country_code' => 'NL'],\n            ['name' => 'Concordia', 'country_code' => 'AR'],\n            ['name' => 'Abbottabad', 'country_code' => 'PK'],\n            ['name' => 'Delicias', 'country_code' => 'MX'],\n            ['name' => 'Mallawi', 'country_code' => 'EG'],\n            ['name' => 'Agri', 'country_code' => 'TR'],\n            ['name' => 'Amasya', 'country_code' => 'TR'],\n            ['name' => 'Lang Son', 'country_code' => 'VN'],\n            ['name' => 'Iruma', 'country_code' => 'JP'],\n            ['name' => 'Kastamonu', 'country_code' => 'TR'],\n            ['name' => 'Marvdasht', 'country_code' => 'IR'],\n            ['name' => 'Marbella', 'country_code' => 'ES'],\n            ['name' => 'Kanasin', 'country_code' => 'MX'],\n            ['name' => 'Chingola', 'country_code' => 'ZM'],\n            ['name' => 'Dongsheng', 'country_code' => 'CN'],\n            ['name' => 'Fairfield', 'country_code' => 'US'],\n            ['name' => 'Mostaganem', 'country_code' => 'DZ'],\n            ['name' => 'Habra', 'country_code' => 'IN'],\n            ['name' => 'Mauli', 'country_code' => 'IN'],\n            ['name' => 'Sibiu', 'country_code' => 'RO'],\n            ['name' => 'Naperville', 'country_code' => 'US'],\n            ['name' => 'Quilpue', 'country_code' => 'CL'],\n            ['name' => 'Yonago', 'country_code' => 'JP'],\n            ['name' => 'Dolores Hidalgo Cuna de la Independencia Nacional', 'country_code' => 'MX'],\n            ['name' => 'Kopeysk', 'country_code' => 'RU'],\n            ['name' => 'Luleburgaz', 'country_code' => 'TR'],\n            ['name' => 'Al Hawiyah', 'country_code' => 'SA'],\n            ['name' => 'Bellevue', 'country_code' => 'US'],\n            ['name' => 'Binghamton', 'country_code' => 'US'],\n            ['name' => 'Nchelenge', 'country_code' => 'ZM'],\n            ['name' => 'Negombo', 'country_code' => 'LK'],\n            ['name' => 'Ambala', 'country_code' => 'IN'],\n            ['name' => 'Disuq', 'country_code' => 'EG'],\n            ['name' => 'Turbat', 'country_code' => 'PK'],\n            ['name' => 'Mangghystau', 'country_code' => 'KZ'],\n            ['name' => 'Malakal', 'country_code' => 'SS'],\n            ['name' => 'Bacau', 'country_code' => 'RO'],\n            ['name' => 'Elkhart', 'country_code' => 'US'],\n            ['name' => 'Topeka', 'country_code' => 'US'],\n            ['name' => 'Mogi Guacu', 'country_code' => 'BR'],\n            ['name' => 'Man', 'country_code' => 'CI'],\n            ['name' => 'Joliet', 'country_code' => 'US'],\n            ['name' => 'Pyatigorsk', 'country_code' => 'RU'],\n            ['name' => 'Clermont-Ferrand', 'country_code' => 'FR'],\n            ['name' => 'Moshi', 'country_code' => 'TZ'],\n            ['name' => 'Bizerte', 'country_code' => 'TN'],\n            ['name' => 'Dar a', 'country_code' => 'SY'],\n            ['name' => 'Rubtsovsk', 'country_code' => 'RU'],\n            ['name' => 'Cam Ranh', 'country_code' => 'VN'],\n            ['name' => 'Wamba', 'country_code' => 'CD'],\n            ['name' => 'Franco da Rocha', 'country_code' => 'BR'],\n            ['name' => 'Odintsovo', 'country_code' => 'RU'],\n            ['name' => 'Dadu', 'country_code' => 'PK'],\n            ['name' => 'Sagay', 'country_code' => 'PH'],\n            ['name' => 'Balti', 'country_code' => 'MD'],\n            ['name' => 'Misato', 'country_code' => 'JP'],\n            ['name' => 'Pleiku', 'country_code' => 'VN'],\n            ['name' => 'Araucaria', 'country_code' => 'BR'],\n            ['name' => 'San Juan', 'country_code' => 'PH'],\n            ['name' => 'Mejicanos', 'country_code' => 'SV'],\n            ['name' => 'Colina', 'country_code' => 'CL'],\n            ['name' => 'Kolomna', 'country_code' => 'RU'],\n            ['name' => 'Larisa', 'country_code' => 'GR'],\n            ['name' => 'Yima', 'country_code' => 'CN'],\n            ['name' => 'Santo Agostinho', 'country_code' => 'BR'],\n            ['name' => 'Beaumont', 'country_code' => 'US'],\n            ['name' => 'Sinop', 'country_code' => 'BR'],\n            ['name' => 'Garcia', 'country_code' => 'MX'],\n            ['name' => 'Bani', 'country_code' => 'DO'],\n            ['name' => 'Xintang', 'country_code' => 'CN'],\n            ['name' => 'Matanzas', 'country_code' => 'CU'],\n            ['name' => 'Ilagan', 'country_code' => 'PH'],\n            ['name' => 'David', 'country_code' => 'PA'],\n            ['name' => 'Le Mans', 'country_code' => 'FR'],\n            ['name' => 'San Justo', 'country_code' => 'AR'],\n            ['name' => 'Quchan', 'country_code' => 'IR'],\n            ['name' => 'Berezniki', 'country_code' => 'RU'],\n            ['name' => 'Porto Seguro', 'country_code' => 'BR'],\n            ['name' => 'Shillong', 'country_code' => 'IN'],\n            ['name' => 'Eregli', 'country_code' => 'TR'],\n            ['name' => 'Durres', 'country_code' => 'AL'],\n            ['name' => 'Yalova', 'country_code' => 'TR'],\n            ['name' => 'Huelva', 'country_code' => 'ES'],\n            ['name' => 'Kusatsu', 'country_code' => 'JP'],\n            ['name' => 'Villa de Cura', 'country_code' => 'VE'],\n            ['name' => 'Kakamigahara', 'country_code' => 'JP'],\n            ['name' => 'Paterson', 'country_code' => 'US'],\n            ['name' => 'Merced', 'country_code' => 'US'],\n            ['name' => 'Kolar', 'country_code' => 'IN'],\n            ['name' => 'Cape Coast', 'country_code' => 'GH'],\n            ['name' => 'Al Mukalla', 'country_code' => 'YE'],\n            ['name' => 'Flores', 'country_code' => 'GT'],\n            ['name' => 'Comayagua', 'country_code' => 'HN'],\n            ['name' => 'Dongxing', 'country_code' => 'CN'],\n            ['name' => 'Barranca', 'country_code' => 'PE'],\n            ['name' => 'Khasavyurt', 'country_code' => 'RU'],\n            ['name' => 'Saguenay', 'country_code' => 'CA'],\n            ['name' => 'Tuxtepec', 'country_code' => 'MX'],\n            ['name' => 'Kumba', 'country_code' => 'CM'],\n            ['name' => 'Barrechid', 'country_code' => 'MA'],\n            ['name' => 'Bharatpur', 'country_code' => 'NP'],\n            ['name' => 'Florencia', 'country_code' => 'CO'],\n            ['name' => 'Pueblo', 'country_code' => 'US'],\n            ['name' => 'Coimbra', 'country_code' => 'PT'],\n            ['name' => 'Ajdabiya', 'country_code' => 'LY'],\n            ['name' => 'Tyler', 'country_code' => 'US'],\n            ['name' => 'Ciego de Avila', 'country_code' => 'CU'],\n            ['name' => 'San Jose', 'country_code' => 'PH'],\n            ['name' => 'Pecs', 'country_code' => 'HU'],\n            ['name' => 'Ghazni', 'country_code' => 'AF'],\n            ['name' => 'Blackpool', 'country_code' => 'GB'],\n            ['name' => 'Nawabganj', 'country_code' => 'BD'],\n            ['name' => 'Altay', 'country_code' => 'CN'],\n            ['name' => 'El Progreso', 'country_code' => 'HN'],\n            ['name' => 'Torrance', 'country_code' => 'US'],\n            ['name' => 'Pemba', 'country_code' => 'MZ'],\n            ['name' => 'Tuxpam de Rodriguez Cano', 'country_code' => 'MX'],\n            ['name' => 'Jau', 'country_code' => 'BR'],\n            ['name' => 'Touggourt', 'country_code' => 'DZ'],\n            ['name' => 'Nevsehir', 'country_code' => 'TR'],\n            ['name' => 'Levis', 'country_code' => 'CA'],\n            ['name' => 'Bhimavaram', 'country_code' => 'IN'],\n            ['name' => 'Bilbays', 'country_code' => 'EG'],\n            ['name' => 'Jinjiang', 'country_code' => 'CN'],\n            ['name' => 'Tottenham', 'country_code' => 'GB'],\n            ['name' => 'Aix-en-Provence', 'country_code' => 'FR'],\n            ['name' => 'Cizre', 'country_code' => 'TR'],\n            ['name' => 'Los Angeles', 'country_code' => 'CL'],\n            ['name' => 'Gisenyi', 'country_code' => 'RW'],\n            ['name' => 'Boca Chica', 'country_code' => 'DO'],\n            ['name' => 'Yuma', 'country_code' => 'US'],\n            ['name' => 'Telford', 'country_code' => 'GB'],\n            ['name' => 'Toledo', 'country_code' => 'BR'],\n            ['name' => 'Lichinga', 'country_code' => 'MZ'],\n            ['name' => 'Ozamiz City', 'country_code' => 'PH'],\n            ['name' => 'Moundou', 'country_code' => 'TD'],\n            ['name' => 'Tetovo', 'country_code' => 'MK'],\n            ['name' => 'Nizip', 'country_code' => 'TR'],\n            ['name' => 'Maykop', 'country_code' => 'RU'],\n            ['name' => 'Bahawalnagar', 'country_code' => 'PK'],\n            ['name' => 'Fukayacho', 'country_code' => 'JP'],\n            ['name' => 'Lausanne', 'country_code' => 'CH'],\n            ['name' => 'Kamalshahr', 'country_code' => 'IR'],\n            ['name' => 'Gweru', 'country_code' => 'ZW'],\n            ['name' => 'Kelowna', 'country_code' => 'CA'],\n            ['name' => 'Metairie', 'country_code' => 'US'],\n            ['name' => 'Irakleio', 'country_code' => 'GR'],\n            ['name' => 'Mandsaur', 'country_code' => 'IN'],\n            ['name' => 'Rybnik', 'country_code' => 'PL'],\n            ['name' => 'Nong an', 'country_code' => 'CN'],\n            ['name' => 'Inezgane', 'country_code' => 'MA'],\n            ['name' => 'Rize', 'country_code' => 'TR'],\n            ['name' => 'Vlore', 'country_code' => 'AL'],\n            ['name' => 'Jahrom', 'country_code' => 'IR'],\n            ['name' => 'Surprise', 'country_code' => 'US'],\n            ['name' => 'Columbia', 'country_code' => 'US'],\n            ['name' => 'Colima', 'country_code' => 'MX'],\n            ['name' => 'Athens', 'country_code' => 'US'],\n            ['name' => 'Roseville', 'country_code' => 'US'],\n            ['name' => 'Thornton', 'country_code' => 'US'],\n            ['name' => 'Khuzdar', 'country_code' => 'PK'],\n            ['name' => 'Tepatitlan de Morelos', 'country_code' => 'MX'],\n            ['name' => 'Abbotsford', 'country_code' => 'CA'],\n            ['name' => 'Mati', 'country_code' => 'PH'],\n            ['name' => 'Valle de Santiago', 'country_code' => 'MX'],\n            ['name' => 'Ruda Slaska', 'country_code' => 'PL'],\n            ['name' => 'Miramar', 'country_code' => 'US'],\n            ['name' => 'Batu Pahat', 'country_code' => 'MY'],\n            ['name' => 'Pasadena', 'country_code' => 'US'],\n            ['name' => 'Kovrov', 'country_code' => 'RU'],\n            ['name' => 'Teofilo Otoni', 'country_code' => 'BR'],\n            ['name' => 'Mesquite', 'country_code' => 'US'],\n            ['name' => 'Kokubunji', 'country_code' => 'JP'],\n            ['name' => 'Shizhaobi', 'country_code' => 'CN'],\n            ['name' => 'Kumbakonam', 'country_code' => 'IN'],\n            ['name' => 'Kidapawan', 'country_code' => 'PH'],\n            ['name' => 'Capas', 'country_code' => 'PH'],\n            ['name' => 'Olathe', 'country_code' => 'US'],\n            ['name' => 'Santa Maria', 'country_code' => 'US'],\n            ['name' => 'Masaya', 'country_code' => 'NI'],\n            ['name' => 'Medea', 'country_code' => 'DZ'],\n            ['name' => 'Yaritagua', 'country_code' => 'VE'],\n            ['name' => 'San Jose', 'country_code' => 'PH'],\n            ['name' => 'Houma', 'country_code' => 'US'],\n            ['name' => 'Samarra ', 'country_code' => 'IQ'],\n            ['name' => 'Fusagasuga', 'country_code' => 'CO'],\n            ['name' => 'Sale', 'country_code' => 'GB'],\n            ['name' => 'Al  Aqabah', 'country_code' => 'JO'],\n            ['name' => 'Torbat-e Heydariyeh', 'country_code' => 'IR'],\n            ['name' => 'Momostenango', 'country_code' => 'GT'],\n            ['name' => 'Ituzaingo', 'country_code' => 'AR'],\n            ['name' => 'Dawei', 'country_code' => 'MM'],\n            ['name' => 'Boulogne-Billancourt', 'country_code' => 'FR'],\n            ['name' => 'Zielona Gora', 'country_code' => 'PL'],\n            ['name' => 'Kuwana', 'country_code' => 'JP'],\n            ['name' => 'Atbara', 'country_code' => 'SD'],\n            ['name' => 'Tours', 'country_code' => 'FR'],\n            ['name' => 'Pakpattan', 'country_code' => 'PK'],\n            ['name' => 'Shizuishan', 'country_code' => 'CN'],\n            ['name' => 'Chicacole', 'country_code' => 'IN'],\n            ['name' => 'Botucatu', 'country_code' => 'BR'],\n            ['name' => 'Dhahran', 'country_code' => 'SA'],\n            ['name' => 'Pabna', 'country_code' => 'BD'],\n            ['name' => 'Cameta', 'country_code' => 'BR'],\n            ['name' => 'San Miguel de Allende', 'country_code' => 'MX'],\n            ['name' => 'Koga', 'country_code' => 'JP'],\n            ['name' => 'Coquitlam', 'country_code' => 'CA'],\n            ['name' => 'Carrollton', 'country_code' => 'US'],\n            ['name' => 'Tan An', 'country_code' => 'VN'],\n            ['name' => 'Grand Junction', 'country_code' => 'US'],\n            ['name' => 'Ishizaki', 'country_code' => 'JP'],\n            ['name' => 'Kokshetau', 'country_code' => 'KZ'],\n            ['name' => 'Zacatecas', 'country_code' => 'MX'],\n            ['name' => 'Barahona', 'country_code' => 'DO'],\n            ['name' => 'Piranshahr', 'country_code' => 'IR'],\n            ['name' => 'Tiruvannamalai', 'country_code' => 'IN'],\n            ['name' => 'Tarragona', 'country_code' => 'ES'],\n            ['name' => 'Amiens', 'country_code' => 'FR'],\n            ['name' => 'Umtata', 'country_code' => 'ZA'],\n            ['name' => 'Charleston', 'country_code' => 'US'],\n            ['name' => 'Orange', 'country_code' => 'US'],\n            ['name' => 'Fullerton', 'country_code' => 'US'],\n            ['name' => 'Sancti Spiritus', 'country_code' => 'CU'],\n            ['name' => 'Barbacena', 'country_code' => 'BR'],\n            ['name' => 'Bat Yam', 'country_code' => 'IL'],\n            ['name' => 'Boca del Rio', 'country_code' => 'MX'],\n            ['name' => 'Zama', 'country_code' => 'JP'],\n            ['name' => 'Mojokerto', 'country_code' => 'ID'],\n            ['name' => 'Darwin', 'country_code' => 'AU'],\n            ['name' => 'Ingolstadt', 'country_code' => 'DE'],\n            ['name' => 'Mandya', 'country_code' => 'IN'],\n            ['name' => 'Boulogne-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Greeley', 'country_code' => 'US'],\n            ['name' => 'Ch ungmu', 'country_code' => 'KR'],\n            ['name' => 'Al Khmissat', 'country_code' => 'MA'],\n            ['name' => 'Birganj', 'country_code' => 'NP'],\n            ['name' => 'Igdir', 'country_code' => 'TR'],\n            ['name' => 'Palhoca', 'country_code' => 'BR'],\n            ['name' => 'Lira', 'country_code' => 'UG'],\n            ['name' => 'Negage', 'country_code' => 'AO'],\n            ['name' => 'Gunungsitoli', 'country_code' => 'ID'],\n            ['name' => 'Danao', 'country_code' => 'PH'],\n            ['name' => 'Sabara', 'country_code' => 'BR'],\n            ['name' => 'Yunxian Chengguanzhen', 'country_code' => 'CN'],\n            ['name' => 'Atibaia', 'country_code' => 'BR'],\n            ['name' => 'Jyvaskyla', 'country_code' => 'FI'],\n            ['name' => 'Bankura', 'country_code' => 'IN'],\n            ['name' => 'Vila Franca de Xira', 'country_code' => 'PT'],\n            ['name' => 'Quillacollo', 'country_code' => 'BO'],\n            ['name' => 'Garanhuns', 'country_code' => 'BR'],\n            ['name' => 'Santa Maria Texmelucan', 'country_code' => 'MX'],\n            ['name' => 'Livingstone', 'country_code' => 'ZM'],\n            ['name' => 'Toowoomba', 'country_code' => 'AU'],\n            ['name' => 'Bima', 'country_code' => 'ID'],\n            ['name' => 'Kisarazu', 'country_code' => 'JP'],\n            ['name' => 'Porto Amboim', 'country_code' => 'AO'],\n            ['name' => 'Kigoma', 'country_code' => 'TZ'],\n            ['name' => 'Maia', 'country_code' => 'PT'],\n            ['name' => 'Yaizu', 'country_code' => 'JP'],\n            ['name' => 'Encarnacion', 'country_code' => 'PY'],\n            ['name' => 'Carolina', 'country_code' => 'PR'],\n            ['name' => 'Marivan', 'country_code' => 'IR'],\n            ['name' => 'Santa Tecla', 'country_code' => 'SV'],\n            ['name' => 'Inazawa', 'country_code' => 'JP'],\n            ['name' => 'Uppsala', 'country_code' => 'SE'],\n            ['name' => 'Chech on', 'country_code' => 'KR'],\n            ['name' => 'Jinotega', 'country_code' => 'NI'],\n            ['name' => 'Tiraspol', 'country_code' => 'MD'],\n            ['name' => 'Apucarana', 'country_code' => 'BR'],\n            ['name' => 'Pageralam', 'country_code' => 'ID'],\n            ['name' => 'Tizi Ouzou', 'country_code' => 'DZ'],\n            ['name' => 'Giresun', 'country_code' => 'TR'],\n            ['name' => 'Termiz', 'country_code' => 'UZ'],\n            ['name' => 'Zinacantepec', 'country_code' => 'MX'],\n            ['name' => 'Targu-Mures', 'country_code' => 'RO'],\n            ['name' => 'Las Cruces', 'country_code' => 'US'],\n            ['name' => 'Salerno', 'country_code' => 'IT'],\n            ['name' => ' s-Hertogenbosch', 'country_code' => 'NL'],\n            ['name' => 'Panama City', 'country_code' => 'US'],\n            ['name' => 'Blitar', 'country_code' => 'ID'],\n            ['name' => 'Harlingen', 'country_code' => 'US'],\n            ['name' => 'Chiang Mai', 'country_code' => 'TH'],\n            ['name' => 'Brighton', 'country_code' => 'GB'],\n            ['name' => 'Dos Hermanas', 'country_code' => 'ES'],\n            ['name' => 'Tobruk', 'country_code' => 'LY'],\n            ['name' => 'Tauranga', 'country_code' => 'NZ'],\n            ['name' => 'Pyay', 'country_code' => 'MM'],\n            ['name' => 'Ramapo', 'country_code' => 'US'],\n            ['name' => 'Cartago', 'country_code' => 'CO'],\n            ['name' => 'Santiago', 'country_code' => 'PH'],\n            ['name' => 'May Pen', 'country_code' => 'JM'],\n            ['name' => 'Urganch', 'country_code' => 'UZ'],\n            ['name' => 'Zakhu', 'country_code' => 'IQ'],\n            ['name' => 'Dumaguete City', 'country_code' => 'PH'],\n            ['name' => 'West Valley City', 'country_code' => 'US'],\n            ['name' => 'Shuangcheng', 'country_code' => 'CN'],\n            ['name' => 'Andimeshk', 'country_code' => 'IR'],\n            ['name' => 'Santa Rita', 'country_code' => 'BR'],\n            ['name' => 'Ksar El Kebir', 'country_code' => 'MA'],\n            ['name' => 'Consolacion', 'country_code' => 'PH'],\n            ['name' => 'Tabaco', 'country_code' => 'PH'],\n            ['name' => 'Nakhon Ratchasima', 'country_code' => 'TH'],\n            ['name' => 'El Oued', 'country_code' => 'DZ'],\n            ['name' => 'Jazan', 'country_code' => 'SA'],\n            ['name' => 'Ashqelon', 'country_code' => 'IL'],\n            ['name' => 'Laghouat', 'country_code' => 'DZ'],\n            ['name' => 'Moron', 'country_code' => 'MN'],\n            ['name' => 'Shahreza', 'country_code' => 'IR'],\n            ['name' => 'Zabol', 'country_code' => 'IR'],\n            ['name' => 'Nasugbu', 'country_code' => 'PH'],\n            ['name' => 'Hampton', 'country_code' => 'US'],\n            ['name' => 'Araruama', 'country_code' => 'BR'],\n            ['name' => 'Arayat', 'country_code' => 'PH'],\n            ['name' => 'Calapan', 'country_code' => 'PH'],\n            ['name' => 'Trois-Rivieres', 'country_code' => 'CA'],\n            ['name' => 'Urdaneta', 'country_code' => 'PH'],\n            ['name' => 'Zhangmu Touwei', 'country_code' => 'CN'],\n            ['name' => 'Milagro', 'country_code' => 'EC'],\n            ['name' => 'Heroica Guaymas', 'country_code' => 'MX'],\n            ['name' => 'Minglanilla', 'country_code' => 'PH'],\n            ['name' => 'Apatzingan de la Constitucion', 'country_code' => 'MX'],\n            ['name' => 'Batticaloa', 'country_code' => 'LK'],\n            ['name' => 'Navoiy', 'country_code' => 'UZ'],\n            ['name' => 'Rehovot', 'country_code' => 'IL'],\n            ['name' => 'Campo Largo', 'country_code' => 'BR'],\n            ['name' => 'Idfu', 'country_code' => 'EG'],\n            ['name' => 'Tando Allahyar', 'country_code' => 'PK'],\n            ['name' => 'Warren', 'country_code' => 'US'],\n            ['name' => 'Mauldin', 'country_code' => 'US'],\n            ['name' => 'Bloomington', 'country_code' => 'US'],\n            ['name' => 'Enfield', 'country_code' => 'GB'],\n            ['name' => 'Apopa', 'country_code' => 'SV'],\n            ['name' => 'Segou', 'country_code' => 'ML'],\n            ['name' => 'Coral Springs', 'country_code' => 'US'],\n            ['name' => 'Innsbruck', 'country_code' => 'AT'],\n            ['name' => 'Ome', 'country_code' => 'JP'],\n            ['name' => 'Battambang', 'country_code' => 'KH'],\n            ['name' => 'Jijel', 'country_code' => 'DZ'],\n            ['name' => 'Hassan', 'country_code' => 'IN'],\n            ['name' => 'Pitalito', 'country_code' => 'CO'],\n            ['name' => 'Round Rock', 'country_code' => 'US'],\n            ['name' => 'Abiko', 'country_code' => 'JP'],\n            ['name' => 'Yakima', 'country_code' => 'US'],\n            ['name' => 'Khorramshahr', 'country_code' => 'IR'],\n            ['name' => 'Ouargla', 'country_code' => 'DZ'],\n            ['name' => 'Tra Vinh', 'country_code' => 'VN'],\n            ['name' => 'Ninh Binh', 'country_code' => 'VN'],\n            ['name' => 'San Carlos', 'country_code' => 'PH'],\n            ['name' => 'Gyor', 'country_code' => 'HU'],\n            ['name' => 'Odemis', 'country_code' => 'TR'],\n            ['name' => 'Kamez', 'country_code' => 'AL'],\n            ['name' => 'Ferrara', 'country_code' => 'IT'],\n            ['name' => 'San Luis', 'country_code' => 'GT'],\n            ['name' => 'Ibarra', 'country_code' => 'EC'],\n            ['name' => 'Sterling Heights', 'country_code' => 'US'],\n            ['name' => 'Stavanger', 'country_code' => 'NO'],\n            ['name' => 'Yavatmal', 'country_code' => 'IN'],\n            ['name' => 'Kent', 'country_code' => 'US'],\n            ['name' => 'Karabuk', 'country_code' => 'TR'],\n            ['name' => 'High Wycombe', 'country_code' => 'GB'],\n            ['name' => 'Calabozo', 'country_code' => 'VE'],\n            ['name' => 'Lae', 'country_code' => 'PG'],\n            ['name' => 'Pilibhit', 'country_code' => 'IN'],\n            ['name' => 'Guelph', 'country_code' => 'CA'],\n            ['name' => 'Palghat', 'country_code' => 'IN'],\n            ['name' => 'Sogamoso', 'country_code' => 'CO'],\n            ['name' => 'Buea', 'country_code' => 'CM'],\n            ['name' => 'Nanqiaotou', 'country_code' => 'CN'],\n            ['name' => 'Ji-Parana', 'country_code' => 'BR'],\n            ['name' => 'Rijeka', 'country_code' => 'HR'],\n            ['name' => 'Santa Cruz do Sul', 'country_code' => 'BR'],\n            ['name' => 'Spanish Town', 'country_code' => 'JM'],\n            ['name' => 'Palakollu', 'country_code' => 'IN'],\n            ['name' => 'Dipolog', 'country_code' => 'PH'],\n            ['name' => 'Narita', 'country_code' => 'JP'],\n            ['name' => 'Surat Thani', 'country_code' => 'TH'],\n            ['name' => 'Relizane', 'country_code' => 'DZ'],\n            ['name' => 'Malasiqui', 'country_code' => 'PH'],\n            ['name' => 'Cienaga', 'country_code' => 'CO'],\n            ['name' => 'Parepare', 'country_code' => 'ID'],\n            ['name' => 'Vasteras', 'country_code' => 'SE'],\n            ['name' => 'Hagonoy', 'country_code' => 'PH'],\n            ['name' => 'Torrejon de Ardoz', 'country_code' => 'ES'],\n            ['name' => 'Burlington', 'country_code' => 'US'],\n            ['name' => 'Nueva Concepcion', 'country_code' => 'GT'],\n            ['name' => 'La Trinidad', 'country_code' => 'PH'],\n            ['name' => 'Abohar', 'country_code' => 'IN'],\n            ['name' => 'Tychy', 'country_code' => 'PL'],\n            ['name' => 'Marand', 'country_code' => 'IR'],\n            ['name' => 'Quibdo', 'country_code' => 'CO'],\n            ['name' => 'Girardot', 'country_code' => 'CO'],\n            ['name' => 'Pouso Alegre', 'country_code' => 'BR'],\n            ['name' => 'Kanchrapara', 'country_code' => 'IN'],\n            ['name' => 'Rustavi', 'country_code' => 'GE'],\n            ['name' => 'Bellingham', 'country_code' => 'US'],\n            ['name' => 'Itapipoca', 'country_code' => 'BR'],\n            ['name' => 'Onomichi', 'country_code' => 'JP'],\n            ['name' => 'Kislovodsk', 'country_code' => 'RU'],\n            ['name' => 'Maranguape', 'country_code' => 'BR'],\n            ['name' => 'Kozan', 'country_code' => 'TR'],\n            ['name' => 'Udon Thani', 'country_code' => 'TH'],\n            ['name' => 'Jiroft', 'country_code' => 'IR'],\n            ['name' => 'Tabora', 'country_code' => 'TZ'],\n            ['name' => 'Santa Clara', 'country_code' => 'US'],\n            ['name' => 'Vitoria de Santo Antao', 'country_code' => 'BR'],\n            ['name' => 'Cayirova', 'country_code' => 'TR'],\n            ['name' => 'Sannar', 'country_code' => 'SD'],\n            ['name' => 'Lucheng', 'country_code' => 'CN'],\n            ['name' => 'Racine', 'country_code' => 'US'],\n            ['name' => 'Greenville', 'country_code' => 'US'],\n            ['name' => 'Zhaozhou', 'country_code' => 'CN'],\n            ['name' => 'Saida', 'country_code' => 'DZ'],\n            ['name' => 'Esteli', 'country_code' => 'NI'],\n            ['name' => 'Taldyqorghan', 'country_code' => 'KZ'],\n            ['name' => 'Conselheiro Lafaiete', 'country_code' => 'BR'],\n            ['name' => 'Cambridge', 'country_code' => 'CA'],\n            ['name' => 'Calabayan', 'country_code' => 'PH'],\n            ['name' => 'Baidoa', 'country_code' => 'SO'],\n            ['name' => 'Jaramana', 'country_code' => 'SY'],\n            ['name' => 'Fengcheng', 'country_code' => 'CN'],\n            ['name' => 'Furth', 'country_code' => 'DE'],\n            ['name' => 'Serpukhov', 'country_code' => 'RU'],\n            ['name' => 'Bolton', 'country_code' => 'GB'],\n            ['name' => 'Tukuyu', 'country_code' => 'TZ'],\n            ['name' => 'Stamford', 'country_code' => 'US'],\n            ['name' => 'Villa Alemana', 'country_code' => 'CL'],\n            ['name' => 'Chinguar', 'country_code' => 'AO'],\n            ['name' => 'Tariba', 'country_code' => 'VE'],\n            ['name' => 'Wurzburg', 'country_code' => 'DE'],\n            ['name' => 'Songnim', 'country_code' => 'KP'],\n            ['name' => 'Mansa', 'country_code' => 'ZM'],\n            ['name' => 'Elizabeth', 'country_code' => 'US'],\n            ['name' => 'Opole', 'country_code' => 'PL'],\n            ['name' => 'Novocheboksarsk', 'country_code' => 'RU'],\n            ['name' => 'Araras', 'country_code' => 'BR'],\n            ['name' => 'Petapa', 'country_code' => 'GT'],\n            ['name' => 'Romford', 'country_code' => 'GB'],\n            ['name' => 'Mit Ghamr', 'country_code' => 'EG'],\n            ['name' => 'Puno', 'country_code' => 'PE'],\n            ['name' => 'Jaranwala', 'country_code' => 'PK'],\n            ['name' => 'Salto', 'country_code' => 'UY'],\n            ['name' => 'Newport', 'country_code' => 'GB'],\n            ['name' => 'Ahmadpur East', 'country_code' => 'PK'],\n            ['name' => 'Alagoinhas', 'country_code' => 'BR'],\n            ['name' => 'Annecy', 'country_code' => 'FR'],\n            ['name' => 'Kamina', 'country_code' => 'CD'],\n            ['name' => 'Vihari', 'country_code' => 'PK'],\n            ['name' => 'Koforidua', 'country_code' => 'GH'],\n            ['name' => 'Azua', 'country_code' => 'DO'],\n            ['name' => 'Baigou', 'country_code' => 'CN'],\n            ['name' => 'Temperley', 'country_code' => 'AR'],\n            ['name' => 'Drohobych', 'country_code' => 'UA'],\n            ['name' => 'Seto', 'country_code' => 'JP'],\n            ['name' => 'Shiyan', 'country_code' => 'CN'],\n            ['name' => 'Bataysk', 'country_code' => 'RU'],\n            ['name' => 'Whitby', 'country_code' => 'CA'],\n            ['name' => 'Mariveles', 'country_code' => 'PH'],\n            ['name' => 'Pinsk', 'country_code' => 'BY'],\n            ['name' => 'Sakaka', 'country_code' => 'SA'],\n            ['name' => 'Tumen', 'country_code' => 'CN'],\n            ['name' => 'My Tho', 'country_code' => 'VN'],\n            ['name' => 'Hathras', 'country_code' => 'IN'],\n            ['name' => 'La Granja', 'country_code' => 'CL'],\n            ['name' => 'Divo', 'country_code' => 'CI'],\n            ['name' => 'Guasdualito', 'country_code' => 'VE'],\n            ['name' => 'Domodedovo', 'country_code' => 'RU'],\n            ['name' => 'Darnah', 'country_code' => 'LY'],\n            ['name' => 'Kadoma', 'country_code' => 'JP'],\n            ['name' => 'Salmas', 'country_code' => 'IR'],\n            ['name' => 'Port Blair', 'country_code' => 'IN'],\n            ['name' => 'Cubatao', 'country_code' => 'BR'],\n            ['name' => 'Kaspiysk', 'country_code' => 'RU'],\n            ['name' => 'Anderlecht', 'country_code' => 'BE'],\n            ['name' => 'Alipur Duar', 'country_code' => 'IN'],\n            ['name' => 'Neftekamsk', 'country_code' => 'RU'],\n            ['name' => 'Daraga', 'country_code' => 'PH'],\n            ['name' => 'Omiyacho', 'country_code' => 'JP'],\n            ['name' => 'Johnson City', 'country_code' => 'US'],\n            ['name' => 'Orebro', 'country_code' => 'SE'],\n            ['name' => 'Silay', 'country_code' => 'PH'],\n            ['name' => 'Bam', 'country_code' => 'IR'],\n            ['name' => 'Ulm', 'country_code' => 'DE'],\n            ['name' => 'Lafia', 'country_code' => 'NG'],\n            ['name' => 'Monza', 'country_code' => 'IT'],\n            ['name' => 'Tay Ninh', 'country_code' => 'VN'],\n            ['name' => 'Santana de Parnaiba', 'country_code' => 'BR'],\n            ['name' => 'Nefteyugansk', 'country_code' => 'RU'],\n            ['name' => 'Heilbronn', 'country_code' => 'DE'],\n            ['name' => 'Pakokku', 'country_code' => 'MM'],\n            ['name' => 'Payakumbuh', 'country_code' => 'ID'],\n            ['name' => 'Duitama', 'country_code' => 'CO'],\n            ['name' => 'Angren', 'country_code' => 'UZ'],\n            ['name' => 'Barcarena Nova', 'country_code' => 'BR'],\n            ['name' => 'Basirhat', 'country_code' => 'IN'],\n            ['name' => 'Miramar', 'country_code' => 'MX'],\n            ['name' => 'Ixtlahuaca', 'country_code' => 'MX'],\n            ['name' => 'Latina', 'country_code' => 'IT'],\n            ['name' => 'Guarapari', 'country_code' => 'BR'],\n            ['name' => 'Unye', 'country_code' => 'TR'],\n            ['name' => 'Ramos Mejia', 'country_code' => 'AR'],\n            ['name' => 'Uruguaiana', 'country_code' => 'BR'],\n            ['name' => 'Navadwip', 'country_code' => 'IN'],\n            ['name' => 'Exeter', 'country_code' => 'GB'],\n            ['name' => 'Pforzheim', 'country_code' => 'DE'],\n            ['name' => 'Lynchburg', 'country_code' => 'US'],\n            ['name' => 'Larache', 'country_code' => 'MA'],\n            ['name' => 'Iizuka', 'country_code' => 'JP'],\n            ['name' => 'Guntakal', 'country_code' => 'IN'],\n            ['name' => 'Catabola', 'country_code' => 'AO'],\n            ['name' => 'Pangkalpinang', 'country_code' => 'ID'],\n            ['name' => 'Simi Valley', 'country_code' => 'US'],\n            ['name' => 'Jolo', 'country_code' => 'PH'],\n            ['name' => 'Aalborg', 'country_code' => 'DK'],\n            ['name' => 'Ban Bang Pu Mai', 'country_code' => 'TH'],\n            ['name' => 'Solihull', 'country_code' => 'GB'],\n            ['name' => 'Halisahar', 'country_code' => 'IN'],\n            ['name' => 'Magway', 'country_code' => 'MM'],\n            ['name' => 'Shashemene', 'country_code' => 'ET'],\n            ['name' => 'Rishra', 'country_code' => 'IN'],\n            ['name' => 'Malanje', 'country_code' => 'AO'],\n            ['name' => 'Jizhou', 'country_code' => 'CN'],\n            ['name' => 'Magelang', 'country_code' => 'ID'],\n            ['name' => 'Gashua', 'country_code' => 'NG'],\n            ['name' => 'Shchelkovo', 'country_code' => 'RU'],\n            ['name' => 'Kampong Cham', 'country_code' => 'KH'],\n            ['name' => 'Floridablanca', 'country_code' => 'PH'],\n            ['name' => 'Novomoskovsk', 'country_code' => 'RU'],\n            ['name' => 'Santa Lucia Cotzumalguapa', 'country_code' => 'GT'],\n            ['name' => 'Talavera', 'country_code' => 'PH'],\n            ['name' => 'Cam Ranh', 'country_code' => 'VN'],\n            ['name' => 'Giugliano in Campania', 'country_code' => 'IT'],\n            ['name' => 'Kumbo', 'country_code' => 'CM'],\n            ['name' => 'Cagua', 'country_code' => 'VE'],\n            ['name' => 'Jandira', 'country_code' => 'BR'],\n            ['name' => 'Amatitlan', 'country_code' => 'GT'],\n            ['name' => 'Gateshead', 'country_code' => 'GB'],\n            ['name' => 'Amherst', 'country_code' => 'US'],\n            ['name' => 'Honcho', 'country_code' => 'JP'],\n            ['name' => 'Orizaba', 'country_code' => 'MX'],\n            ['name' => 'Ciudad de Atlixco', 'country_code' => 'MX'],\n            ['name' => 'Fort Smith', 'country_code' => 'US'],\n            ['name' => 'Balneario de Camboriu', 'country_code' => 'BR'],\n            ['name' => 'Resende', 'country_code' => 'BR'],\n            ['name' => 'Daitocho', 'country_code' => 'JP'],\n            ['name' => 'Arapongas', 'country_code' => 'BR'],\n            ['name' => 'Polatli', 'country_code' => 'TR'],\n            ['name' => 'Porlamar', 'country_code' => 'VE'],\n            ['name' => 'Fugu', 'country_code' => 'CN'],\n            ['name' => 'Cadiz', 'country_code' => 'ES'],\n            ['name' => 'Kenosha', 'country_code' => 'US'],\n            ['name' => 'Norman', 'country_code' => 'US'],\n            ['name' => 'Gingoog', 'country_code' => 'PH'],\n            ['name' => 'Zhaxi', 'country_code' => 'CN'],\n            ['name' => 'Gorzow Wielkopolski', 'country_code' => 'PL'],\n            ['name' => 'Porac', 'country_code' => 'PH'],\n            ['name' => 'Duma', 'country_code' => 'SY'],\n            ['name' => 'Wolfsburg', 'country_code' => 'DE'],\n            ['name' => 'Gexianzhuang', 'country_code' => 'CN'],\n            ['name' => 'South Lyon', 'country_code' => 'US'],\n            ['name' => 'Maastricht', 'country_code' => 'NL'],\n            ['name' => 'Leeuwarden', 'country_code' => 'NL'],\n            ['name' => 'Pervouralsk', 'country_code' => 'RU'],\n            ['name' => 'Algeciras', 'country_code' => 'ES'],\n            ['name' => 'New Mirpur', 'country_code' => 'PK'],\n            ['name' => 'Noksan', 'country_code' => 'KR'],\n            ['name' => 'Boulder', 'country_code' => 'US'],\n            ['name' => 'Bimbo', 'country_code' => 'CF'],\n            ['name' => 'Baia Mare', 'country_code' => 'RO'],\n            ['name' => 'Savannakhet', 'country_code' => 'LA'],\n            ['name' => 'Al Hajar al Aswad', 'country_code' => 'SY'],\n            ['name' => 'Khrustalnyi', 'country_code' => 'UA'],\n            ['name' => 'Kadirli', 'country_code' => 'TR'],\n            ['name' => 'Brits', 'country_code' => 'ZA'],\n            ['name' => 'Cherkessk', 'country_code' => 'RU'],\n            ['name' => 'Indramayu', 'country_code' => 'ID'],\n            ['name' => 'Rudnyy', 'country_code' => 'KZ'],\n            ['name' => 'Bergamo', 'country_code' => 'IT'],\n            ['name' => 'Magangue', 'country_code' => 'CO'],\n            ['name' => 'Maicao', 'country_code' => 'CO'],\n            ['name' => 'Delgado', 'country_code' => 'SV'],\n            ['name' => 'San Pedro Garza Garcia', 'country_code' => 'MX'],\n            ['name' => 'Pleven', 'country_code' => 'BG'],\n            ['name' => 'Derbent', 'country_code' => 'RU'],\n            ['name' => 'Preston', 'country_code' => 'GB'],\n            ['name' => 'Formosa', 'country_code' => 'BR'],\n            ['name' => 'Kisii', 'country_code' => 'KE'],\n            ['name' => 'Villa de Alvarez', 'country_code' => 'MX'],\n            ['name' => 'Pati', 'country_code' => 'ID'],\n            ['name' => 'Longtian', 'country_code' => 'CN'],\n            ['name' => 'Munuf', 'country_code' => 'EG'],\n            ['name' => 'Gagnoa', 'country_code' => 'CI'],\n            ['name' => 'Bocaue', 'country_code' => 'PH'],\n            ['name' => 'Abilene', 'country_code' => 'US'],\n            ['name' => 'Punta Arenas', 'country_code' => 'CL'],\n            ['name' => 'Varginha', 'country_code' => 'BR'],\n            ['name' => 'Lehigh Acres', 'country_code' => 'US'],\n            ['name' => 'Dabrowa Gornicza', 'country_code' => 'PL'],\n            ['name' => 'Munch on', 'country_code' => 'KP'],\n            ['name' => 'Khenifra', 'country_code' => 'MA'],\n            ['name' => 'Hoi An', 'country_code' => 'VN'],\n            ['name' => 'Alberton', 'country_code' => 'ZA'],\n            ['name' => 'Lianhe', 'country_code' => 'CN'],\n            ['name' => 'Ise', 'country_code' => 'JP'],\n            ['name' => 'Jirja', 'country_code' => 'EG'],\n            ['name' => 'San Fernando', 'country_code' => 'PH'],\n            ['name' => 'Patnos', 'country_code' => 'TR'],\n            ['name' => 'Sidi Bouzid', 'country_code' => 'TN'],\n            ['name' => 'Blackburn', 'country_code' => 'GB'],\n            ['name' => 'Barretos', 'country_code' => 'BR'],\n            ['name' => 'Machiques', 'country_code' => 'VE'],\n            ['name' => 'Ciudad Hidalgo', 'country_code' => 'MX'],\n            ['name' => 'San Fernando', 'country_code' => 'VE'],\n            ['name' => 'Jalapa', 'country_code' => 'GT'],\n            ['name' => 'Pescara', 'country_code' => 'IT'],\n            ['name' => 'Guelma', 'country_code' => 'DZ'],\n            ['name' => 'Behbahan', 'country_code' => 'IR'],\n            ['name' => 'Baidyabati', 'country_code' => 'IN'],\n            ['name' => 'Pearland', 'country_code' => 'US'],\n            ['name' => 'Xiangcheng', 'country_code' => 'CN'],\n            ['name' => 'Mufulira', 'country_code' => 'ZM'],\n            ['name' => 'Maina', 'country_code' => 'GU'],\n            ['name' => 'Kotamobagu', 'country_code' => 'ID'],\n            ['name' => 'Dharmavaram', 'country_code' => 'IN'],\n            ['name' => 'Edea', 'country_code' => 'CM'],\n            ['name' => 'Setubal', 'country_code' => 'PT'],\n            ['name' => 'Montreuil', 'country_code' => 'FR'],\n            ['name' => 'Ciudad Ojeda', 'country_code' => 'VE'],\n            ['name' => 'Bento Goncalves', 'country_code' => 'BR'],\n            ['name' => 'Pedro Juan Caballero', 'country_code' => 'PY'],\n            ['name' => 'Fier', 'country_code' => 'AL'],\n            ['name' => 'Orekhovo-Zuyevo', 'country_code' => 'RU'],\n            ['name' => 'Kamalia', 'country_code' => 'PK'],\n            ['name' => 'Gyumri', 'country_code' => 'AM'],\n            ['name' => 'Hoa Binh', 'country_code' => 'VN'],\n            ['name' => 'Kashiwara', 'country_code' => 'JP'],\n            ['name' => 'Perpignan', 'country_code' => 'FR'],\n            ['name' => 'Siracusa', 'country_code' => 'IT'],\n            ['name' => 'Dorud', 'country_code' => 'IR'],\n            ['name' => 'Puerto Barrios', 'country_code' => 'GT'],\n            ['name' => 'Ribeirao Pires', 'country_code' => 'BR'],\n            ['name' => 'Port-de-Paix', 'country_code' => 'HT'],\n            ['name' => 'Ondjiva', 'country_code' => 'AO'],\n            ['name' => 'Wuling', 'country_code' => 'CN'],\n            ['name' => 'Samandag', 'country_code' => 'TR'],\n            ['name' => 'Tsuruoka', 'country_code' => 'JP'],\n            ['name' => 'Shuixi', 'country_code' => 'CN'],\n            ['name' => 'Upington', 'country_code' => 'ZA'],\n            ['name' => 'Walthamstow', 'country_code' => 'GB'],\n            ['name' => 'Berkeley', 'country_code' => 'US'],\n            ['name' => 'Plock', 'country_code' => 'PL'],\n            ['name' => 'Poblacion', 'country_code' => 'PH'],\n            ['name' => 'Richardson', 'country_code' => 'US'],\n            ['name' => 'Dogubayazit', 'country_code' => 'TR'],\n            ['name' => 'Redding', 'country_code' => 'US'],\n            ['name' => 'Arvada', 'country_code' => 'US'],\n            ['name' => 'East Los Angeles', 'country_code' => 'US'],\n            ['name' => 'Valinhos', 'country_code' => 'BR'],\n            ['name' => 'Itabira', 'country_code' => 'BR'],\n            ['name' => 'Chilapa de Alvarez', 'country_code' => 'MX'],\n            ['name' => 'Cachoeirinha', 'country_code' => 'BR'],\n            ['name' => 'St. George', 'country_code' => 'US'],\n            ['name' => 'Kot Addu', 'country_code' => 'PK'],\n            ['name' => 'Kallithea', 'country_code' => 'GR'],\n            ['name' => 'Gottingen', 'country_code' => 'DE'],\n            ['name' => 'Pakxe', 'country_code' => 'LA'],\n            ['name' => 'Billings', 'country_code' => 'US'],\n            ['name' => 'Carcar', 'country_code' => 'PH'],\n            ['name' => 'Santa Cruz', 'country_code' => 'PH'],\n            ['name' => 'Guelmim', 'country_code' => 'MA'],\n            ['name' => 'Darjeeling', 'country_code' => 'IN'],\n            ['name' => 'Ebetsu', 'country_code' => 'JP'],\n            ['name' => 'Yuba City', 'country_code' => 'US'],\n            ['name' => 'Mohammad Shahr', 'country_code' => 'IR'],\n            ['name' => 'Fujimino', 'country_code' => 'JP'],\n            ['name' => 'Sertaozinho', 'country_code' => 'BR'],\n            ['name' => 'Kuopio', 'country_code' => 'FI'],\n            ['name' => 'Poa', 'country_code' => 'BR'],\n            ['name' => 'Saint-Denis', 'country_code' => 'FR'],\n            ['name' => 'Ghardaia', 'country_code' => 'DZ'],\n            ['name' => 'Almirante Tamandare', 'country_code' => 'BR'],\n            ['name' => 'San Carlos', 'country_code' => 'VE'],\n            ['name' => 'Ciudad Choluteca', 'country_code' => 'HN'],\n            ['name' => 'Varzea Paulista', 'country_code' => 'BR'],\n            ['name' => 'Rochester', 'country_code' => 'US'],\n            ['name' => 'Catanduva', 'country_code' => 'BR'],\n            ['name' => 'Zahle', 'country_code' => 'LB'],\n            ['name' => 'Guagua', 'country_code' => 'PH'],\n            ['name' => 'Gudivada', 'country_code' => 'IN'],\n            ['name' => 'Nazarabad', 'country_code' => 'IR'],\n            ['name' => 'Leominster', 'country_code' => 'US'],\n            ['name' => 'Ajax', 'country_code' => 'CA'],\n            ['name' => 'Lomas de Zamora', 'country_code' => 'AR'],\n            ['name' => 'Kingsport', 'country_code' => 'US'],\n            ['name' => 'Butwal', 'country_code' => 'NP'],\n            ['name' => 'Nouadhibou', 'country_code' => 'MR'],\n            ['name' => 'Xuqiaocun', 'country_code' => 'CN'],\n            ['name' => 'Duluth', 'country_code' => 'US'],\n            ['name' => 'Dongsheng', 'country_code' => 'CN'],\n            ['name' => 'Nazran', 'country_code' => 'RU'],\n            ['name' => 'Elblag', 'country_code' => 'PL'],\n            ['name' => 'Sopur', 'country_code' => 'IN'],\n            ['name' => 'Totonicapan', 'country_code' => 'GT'],\n            ['name' => 'Paulo Afonso', 'country_code' => 'BR'],\n            ['name' => 'Santo Tomas', 'country_code' => 'PH'],\n            ['name' => 'Guaratingueta', 'country_code' => 'BR'],\n            ['name' => 'Huaraz', 'country_code' => 'PE'],\n            ['name' => 'Guimba', 'country_code' => 'PH'],\n            ['name' => 'Rock Hill', 'country_code' => 'US'],\n            ['name' => 'Kasuga', 'country_code' => 'JP'],\n            ['name' => 'Gabes', 'country_code' => 'TN'],\n            ['name' => 'Gilroy', 'country_code' => 'US'],\n            ['name' => 'Cheltenham', 'country_code' => 'GB'],\n            ['name' => 'Cambridge', 'country_code' => 'US'],\n            ['name' => 'Nevinnomyssk', 'country_code' => 'RU'],\n            ['name' => 'Bruges', 'country_code' => 'BE'],\n            ['name' => 'Lahti', 'country_code' => 'FI'],\n            ['name' => 'Reutov', 'country_code' => 'RU'],\n            ['name' => 'Bandundu', 'country_code' => 'CD'],\n            ['name' => 'Igarassu', 'country_code' => 'BR'],\n            ['name' => 'Trento', 'country_code' => 'IT'],\n            ['name' => 'Charallave', 'country_code' => 'VE'],\n            ['name' => 'Yongqing', 'country_code' => 'CN'],\n            ['name' => 'Nowshera', 'country_code' => 'PK'],\n            ['name' => 'Dharan', 'country_code' => 'NP'],\n            ['name' => 'Akishima', 'country_code' => 'JP'],\n            ['name' => 'Birigui', 'country_code' => 'BR'],\n            ['name' => 'Bottrop', 'country_code' => 'DE'],\n            ['name' => 'Berkane', 'country_code' => 'MA'],\n            ['name' => 'Konosu', 'country_code' => 'JP'],\n            ['name' => 'Sugar Land', 'country_code' => 'US'],\n            ['name' => 'Glan', 'country_code' => 'PH'],\n            ['name' => 'Linkoping', 'country_code' => 'SE'],\n            ['name' => 'Votorantim', 'country_code' => 'BR'],\n            ['name' => 'Tanay', 'country_code' => 'PH'],\n            ['name' => 'Karatepe', 'country_code' => 'TR'],\n            ['name' => 'Forli', 'country_code' => 'IT'],\n            ['name' => 'Cuautitlan', 'country_code' => 'MX'],\n            ['name' => 'Ikoma', 'country_code' => 'JP'],\n            ['name' => 'Candelaria', 'country_code' => 'PH'],\n            ['name' => 'Martinez de la Torre', 'country_code' => 'MX'],\n            ['name' => 'Yulu', 'country_code' => 'CN'],\n            ['name' => 'Tecoman', 'country_code' => 'MX'],\n            ['name' => 'Giyon', 'country_code' => 'ET'],\n            ['name' => 'Texas City', 'country_code' => 'US'],\n            ['name' => 'Bama', 'country_code' => 'NG'],\n            ['name' => 'Bayawan', 'country_code' => 'PH'],\n            ['name' => 'Codo', 'country_code' => 'BR'],\n            ['name' => 'Iowa City', 'country_code' => 'US'],\n            ['name' => 'Drammen', 'country_code' => 'NO'],\n            ['name' => 'Saginaw', 'country_code' => 'US'],\n            ['name' => 'Kabwe', 'country_code' => 'ZM'],\n            ['name' => 'Malita', 'country_code' => 'PH'],\n            ['name' => 'Facatativa', 'country_code' => 'CO'],\n            ['name' => 'Araguari', 'country_code' => 'BR'],\n            ['name' => 'Nobeoka', 'country_code' => 'JP'],\n            ['name' => 'Jalingo', 'country_code' => 'NG'],\n            ['name' => 'Luanshya', 'country_code' => 'ZM'],\n            ['name' => 'Agadez', 'country_code' => 'NE'],\n            ['name' => 'Uzhhorod', 'country_code' => 'UA'],\n            ['name' => 'Besancon', 'country_code' => 'FR'],\n            ['name' => 'Adilabad', 'country_code' => 'IN'],\n            ['name' => 'Obninsk', 'country_code' => 'RU'],\n            ['name' => 'Uribia', 'country_code' => 'CO'],\n            ['name' => 'Piedecuesta', 'country_code' => 'CO'],\n            ['name' => 'Chico', 'country_code' => 'US'],\n            ['name' => 'Angono', 'country_code' => 'PH'],\n            ['name' => 'Huanren', 'country_code' => 'CN'],\n            ['name' => 'San Martin', 'country_code' => 'AR'],\n            ['name' => 'Kapakli', 'country_code' => 'TR'],\n            ['name' => 'Basingstoke', 'country_code' => 'GB'],\n            ['name' => 'Walbrzych', 'country_code' => 'PL'],\n            ['name' => 'Maidstone', 'country_code' => 'GB'],\n            ['name' => 'Xai-Xai', 'country_code' => 'MZ'],\n            ['name' => 'Reutlingen', 'country_code' => 'DE'],\n            ['name' => 'Langley', 'country_code' => 'CA'],\n            ['name' => 'Dover', 'country_code' => 'US'],\n            ['name' => 'Rosario', 'country_code' => 'PH'],\n            ['name' => 'Temixco', 'country_code' => 'MX'],\n            ['name' => 'Kindia', 'country_code' => 'GN'],\n            ['name' => 'Narasaraopet', 'country_code' => 'IN'],\n            ['name' => 'Nyiregyhaza', 'country_code' => 'HU'],\n            ['name' => 'Kyzyl', 'country_code' => 'RU'],\n            ['name' => 'Machakos', 'country_code' => 'KE'],\n            ['name' => 'Belfort', 'country_code' => 'FR'],\n            ['name' => 'Nkongsamba', 'country_code' => 'CM'],\n            ['name' => 'Uba', 'country_code' => 'BR'],\n            ['name' => 'Guadalajara de Buga', 'country_code' => 'CO'],\n            ['name' => 'Cassongue', 'country_code' => 'AO'],\n            ['name' => 'Mendoza', 'country_code' => 'AR'],\n            ['name' => 'Clearwater', 'country_code' => 'US'],\n            ['name' => 'Tandil', 'country_code' => 'AR'],\n            ['name' => 'Manpo', 'country_code' => 'KP'],\n            ['name' => 'Beppu', 'country_code' => 'JP'],\n            ['name' => 'Buzau', 'country_code' => 'RO'],\n            ['name' => 'Tatui', 'country_code' => 'BR'],\n            ['name' => 'Naga', 'country_code' => 'PH'],\n            ['name' => 'Dimitrovgrad', 'country_code' => 'RU'],\n            ['name' => 'Port-Gentil', 'country_code' => 'GA'],\n            ['name' => 'Sassari', 'country_code' => 'IT'],\n            ['name' => 'Coeur d Alene', 'country_code' => 'US'],\n            ['name' => 'Bage', 'country_code' => 'BR'],\n            ['name' => 'Chittaurgarh', 'country_code' => 'IN'],\n            ['name' => 'Seaside', 'country_code' => 'US'],\n            ['name' => 'Helsingborg', 'country_code' => 'SE'],\n            ['name' => 'Coronel', 'country_code' => 'CL'],\n            ['name' => 'Independence', 'country_code' => 'US'],\n            ['name' => 'Smithtown', 'country_code' => 'US'],\n            ['name' => 'Argenteuil', 'country_code' => 'FR'],\n            ['name' => 'San Antonio Enchisi', 'country_code' => 'MX'],\n            ['name' => 'Boke', 'country_code' => 'GN'],\n            ['name' => 'West Jordan', 'country_code' => 'US'],\n            ['name' => 'Phatthaya', 'country_code' => 'TH'],\n            ['name' => 'Khon Kaen', 'country_code' => 'TH'],\n            ['name' => 'Ramenskoye', 'country_code' => 'RU'],\n            ['name' => 'Kilis', 'country_code' => 'TR'],\n            ['name' => 'Shibuya', 'country_code' => 'JP'],\n            ['name' => 'Parral', 'country_code' => 'MX'],\n            ['name' => 'Qiaotou', 'country_code' => 'CN'],\n            ['name' => 'Swabi', 'country_code' => 'PK'],\n            ['name' => 'Huejutla de Reyes', 'country_code' => 'MX'],\n            ['name' => 'Sabha', 'country_code' => 'LY'],\n            ['name' => 'Tahoua', 'country_code' => 'NE'],\n            ['name' => 'Chelmsford', 'country_code' => 'GB'],\n            ['name' => 'Shacheng', 'country_code' => 'CN'],\n            ['name' => 'Altamira', 'country_code' => 'BR'],\n            ['name' => 'Doncaster', 'country_code' => 'GB'],\n            ['name' => 'Valle de La Pascua', 'country_code' => 'VE'],\n            ['name' => 'Brandon', 'country_code' => 'US'],\n            ['name' => 'Bloomington', 'country_code' => 'US'],\n            ['name' => 'Nasushiobara', 'country_code' => 'JP'],\n            ['name' => 'Toliara', 'country_code' => 'MG'],\n            ['name' => 'Berdiansk', 'country_code' => 'UA'],\n            ['name' => 'Koencho', 'country_code' => 'JP'],\n            ['name' => 'El Monte', 'country_code' => 'US'],\n            ['name' => 'Piraquara', 'country_code' => 'BR'],\n            ['name' => 'Niihama', 'country_code' => 'JP'],\n            ['name' => 'North Charleston', 'country_code' => 'US'],\n            ['name' => 'Carlsbad', 'country_code' => 'US'],\n            ['name' => 'Bansbaria', 'country_code' => 'IN'],\n            ['name' => 'Puerto Madryn', 'country_code' => 'AR'],\n            ['name' => 'Tucurui', 'country_code' => 'BR'],\n            ['name' => 'Sano', 'country_code' => 'JP'],\n            ['name' => 'Ariana', 'country_code' => 'TN'],\n            ['name' => 'Sloviansk', 'country_code' => 'UA'],\n            ['name' => 'Koblenz', 'country_code' => 'DE'],\n            ['name' => 'Oktyabr skiy', 'country_code' => 'RU'],\n            ['name' => 'St. Cloud', 'country_code' => 'US'],\n            ['name' => 'Salto', 'country_code' => 'BR'],\n            ['name' => 'Zhijiang', 'country_code' => 'CN'],\n            ['name' => 'Hatsukaichi', 'country_code' => 'JP'],\n            ['name' => 'Chorzow', 'country_code' => 'PL'],\n            ['name' => 'Las Delicias', 'country_code' => 'MX'],\n            ['name' => 'Bijeljina', 'country_code' => 'BA'],\n            ['name' => 'Lilan', 'country_code' => 'CN'],\n            ['name' => 'Temecula', 'country_code' => 'US'],\n            ['name' => 'Bremerhaven', 'country_code' => 'DE'],\n            ['name' => 'Bet Shemesh', 'country_code' => 'IL'],\n            ['name' => 'Ciudad de la Costa', 'country_code' => 'UY'],\n            ['name' => 'Clovis', 'country_code' => 'US'],\n            ['name' => 'Bernal', 'country_code' => 'AR'],\n            ['name' => 'Kamagaya', 'country_code' => 'JP'],\n            ['name' => 'Valparai', 'country_code' => 'IN'],\n            ['name' => 'Iringa', 'country_code' => 'TZ'],\n            ['name' => 'Magalang', 'country_code' => 'PH'],\n            ['name' => 'Meridian', 'country_code' => 'US'],\n            ['name' => 'Saanich', 'country_code' => 'CA'],\n            ['name' => 'Asela', 'country_code' => 'ET'],\n            ['name' => 'Los Banos', 'country_code' => 'PH'],\n            ['name' => 'Kankan', 'country_code' => 'GN'],\n            ['name' => 'Cuito', 'country_code' => 'AO'],\n            ['name' => 'Kusadasi', 'country_code' => 'TR'],\n            ['name' => 'Jounie', 'country_code' => 'LB'],\n            ['name' => 'Colchester', 'country_code' => 'GB'],\n            ['name' => 'Recklinghausen', 'country_code' => 'DE'],\n            ['name' => 'Pul-e Khumri', 'country_code' => 'AF'],\n            ['name' => 'Tawau', 'country_code' => 'MY'],\n            ['name' => 'Quilengues', 'country_code' => 'AO'],\n            ['name' => 'San Francisco del Rincon', 'country_code' => 'MX'],\n            ['name' => 'Curico', 'country_code' => 'CL'],\n            ['name' => 'The Woodlands', 'country_code' => 'US'],\n            ['name' => 'Paarl', 'country_code' => 'ZA'],\n            ['name' => 'Hofu', 'country_code' => 'JP'],\n            ['name' => 'Hikone', 'country_code' => 'JP'],\n            ['name' => 'Itatiba', 'country_code' => 'BR'],\n            ['name' => 'Rosario', 'country_code' => 'PH'],\n            ['name' => 'Caraguatatuba', 'country_code' => 'BR'],\n            ['name' => 'Bukittinggi', 'country_code' => 'ID'],\n            ['name' => 'Wythenshawe', 'country_code' => 'GB'],\n            ['name' => 'Erlangen', 'country_code' => 'DE'],\n            ['name' => 'Jendouba', 'country_code' => 'TN'],\n            ['name' => 'Sa-ch on', 'country_code' => 'KR'],\n            ['name' => 'Ponce', 'country_code' => 'PR'],\n            ['name' => 'Kipushi', 'country_code' => 'CD'],\n            ['name' => 'Mazhang', 'country_code' => 'CN'],\n            ['name' => 'Akcakale', 'country_code' => 'TR'],\n            ['name' => 'Bergisch Gladbach', 'country_code' => 'DE'],\n            ['name' => 'City of Isabela', 'country_code' => 'PH'],\n            ['name' => 'Euriapolis', 'country_code' => 'BR'],\n            ['name' => 'Novyy Urengoy', 'country_code' => 'RU'],\n            ['name' => 'Montero', 'country_code' => 'BO'],\n            ['name' => 'Madrid', 'country_code' => 'CO'],\n            ['name' => 'Burdur', 'country_code' => 'TR'],\n            ['name' => 'Westminster', 'country_code' => 'US'],\n            ['name' => 'Acailandia', 'country_code' => 'BR'],\n            ['name' => 'Castelar', 'country_code' => 'AR'],\n            ['name' => 'Sokode', 'country_code' => 'TG'],\n            ['name' => 'Jaen', 'country_code' => 'ES'],\n            ['name' => 'Vicenza', 'country_code' => 'IT'],\n            ['name' => 'Costa Mesa', 'country_code' => 'US'],\n            ['name' => 'Rotherham', 'country_code' => 'GB'],\n            ['name' => 'Hualien', 'country_code' => 'TW'],\n            ['name' => 'San Carlos de Bariloche', 'country_code' => 'AR'],\n            ['name' => 'Naic', 'country_code' => 'PH'],\n            ['name' => 'Otaru', 'country_code' => 'JP'],\n            ['name' => 'Alphen aan den Rijn', 'country_code' => 'NL'],\n            ['name' => 'Monroe', 'country_code' => 'US'],\n            ['name' => 'Zwolle', 'country_code' => 'NL'],\n            ['name' => 'Higashiomi', 'country_code' => 'JP'],\n            ['name' => 'Utica', 'country_code' => 'US'],\n            ['name' => 'Santa Lucia', 'country_code' => 'VE'],\n            ['name' => 'Carora', 'country_code' => 'VE'],\n            ['name' => 'Khenchela', 'country_code' => 'DZ'],\n            ['name' => 'Iriga City', 'country_code' => 'PH'],\n            ['name' => 'Champdani', 'country_code' => 'IN'],\n            ['name' => 'Umuarama', 'country_code' => 'BR'],\n            ['name' => 'Oshu', 'country_code' => 'JP'],\n            ['name' => 'Remscheid', 'country_code' => 'DE'],\n            ['name' => 'Habikino', 'country_code' => 'JP'],\n            ['name' => 'Kamyshin', 'country_code' => 'RU'],\n            ['name' => 'Osmanabad', 'country_code' => 'IN'],\n            ['name' => 'Esteban Echeverria', 'country_code' => 'AR'],\n            ['name' => 'Dolgoprudnyy', 'country_code' => 'RU'],\n            ['name' => 'Shkoder', 'country_code' => 'AL'],\n            ['name' => 'Jena', 'country_code' => 'DE'],\n            ['name' => 'Mopti', 'country_code' => 'ML'],\n            ['name' => 'Kars', 'country_code' => 'TR'],\n            ['name' => 'Santana', 'country_code' => 'BR'],\n            ['name' => 'Olmaliq', 'country_code' => 'UZ'],\n            ['name' => 'Cavite City', 'country_code' => 'PH'],\n            ['name' => 'Bou Saada', 'country_code' => 'DZ'],\n            ['name' => 'Candaba', 'country_code' => 'PH'],\n            ['name' => 'Tangjia', 'country_code' => 'CN'],\n            ['name' => 'Nikopol', 'country_code' => 'UA'],\n            ['name' => 'Ciudad Mante', 'country_code' => 'MX'],\n            ['name' => 'Pompano Beach', 'country_code' => 'US'],\n            ['name' => 'Laoag', 'country_code' => 'PH'],\n            ['name' => 'Corumba', 'country_code' => 'BR'],\n            ['name' => 'Zhukovskiy', 'country_code' => 'RU'],\n            ['name' => 'West Palm Beach', 'country_code' => 'US'],\n            ['name' => 'Kristiansand', 'country_code' => 'NO'],\n            ['name' => 'Funchal', 'country_code' => 'PT'],\n            ['name' => 'Colatina', 'country_code' => 'BR'],\n            ['name' => 'Ligao', 'country_code' => 'PH'],\n            ['name' => 'Kuqa', 'country_code' => 'CN'],\n            ['name' => 'Nsukka', 'country_code' => 'NG'],\n            ['name' => 'Escuintla', 'country_code' => 'MX'],\n            ['name' => 'Hounslow', 'country_code' => 'GB'],\n            ['name' => 'Terni', 'country_code' => 'IT'],\n            ['name' => 'Norzagaray', 'country_code' => 'PH'],\n            ['name' => 'Waterloo', 'country_code' => 'US'],\n            ['name' => 'Parintins', 'country_code' => 'BR'],\n            ['name' => 'Trier', 'country_code' => 'DE'],\n            ['name' => 'Terrebonne', 'country_code' => 'CA'],\n            ['name' => 'Namur', 'country_code' => 'BE'],\n            ['name' => 'Rochdale', 'country_code' => 'GB'],\n            ['name' => 'Murom', 'country_code' => 'RU'],\n            ['name' => 'Bedford', 'country_code' => 'GB'],\n            ['name' => 'Tondabayashicho', 'country_code' => 'JP'],\n            ['name' => 'Everett', 'country_code' => 'US'],\n            ['name' => 'Pingquan', 'country_code' => 'CN'],\n            ['name' => 'Manzini', 'country_code' => 'SZ'],\n            ['name' => 'El Centro', 'country_code' => 'US'],\n            ['name' => 'Villa Mercedes', 'country_code' => 'AR'],\n            ['name' => 'Winterthur', 'country_code' => 'CH'],\n            ['name' => 'Jawhar', 'country_code' => 'SO'],\n            ['name' => 'Tuzla', 'country_code' => 'BA'],\n            ['name' => 'Tarnow', 'country_code' => 'PL'],\n            ['name' => 'Gafsa', 'country_code' => 'TN'],\n            ['name' => 'Santa Fe', 'country_code' => 'US'],\n            ['name' => 'Khardah', 'country_code' => 'IN'],\n            ['name' => 'Gapan', 'country_code' => 'PH'],\n            ['name' => 'Nguru', 'country_code' => 'NG'],\n            ['name' => 'Bandar-e Anzali', 'country_code' => 'IR'],\n            ['name' => 'Khushab', 'country_code' => 'PK'],\n            ['name' => 'Plaridel', 'country_code' => 'PH'],\n            ['name' => 'Downey', 'country_code' => 'US'],\n            ['name' => 'Spring Hill', 'country_code' => 'US'],\n            ['name' => 'Stockport', 'country_code' => 'GB'],\n            ['name' => 'Kecskemet', 'country_code' => 'HU'],\n            ['name' => 'Catalao', 'country_code' => 'BR'],\n            ['name' => 'Lowell', 'country_code' => 'US'],\n            ['name' => 'Sonsonate', 'country_code' => 'SV'],\n            ['name' => 'Ahuachapan', 'country_code' => 'SV'],\n            ['name' => 'Fresnillo', 'country_code' => 'MX'],\n            ['name' => 'Centennial', 'country_code' => 'US'],\n            ['name' => 'Fasa', 'country_code' => 'IR'],\n            ['name' => 'As Salamiyah', 'country_code' => 'SY'],\n            ['name' => 'Yessentuki', 'country_code' => 'RU'],\n            ['name' => 'Elgin', 'country_code' => 'US'],\n            ['name' => 'Tabuk', 'country_code' => 'PH'],\n            ['name' => 'Coronel Fabriciano', 'country_code' => 'BR'],\n            ['name' => 'Kiffa', 'country_code' => 'MR'],\n            ['name' => 'Santander de Quilichao', 'country_code' => 'CO'],\n            ['name' => 'Dali', 'country_code' => 'CN'],\n            ['name' => 'Calumpit', 'country_code' => 'PH'],\n            ['name' => 'Yenangyaung', 'country_code' => 'MM'],\n            ['name' => 'Ourinhos', 'country_code' => 'BR'],\n            ['name' => 'Quibor', 'country_code' => 'VE'],\n            ['name' => 'Iguala de la Independencia', 'country_code' => 'MX'],\n            ['name' => 'Borazjan', 'country_code' => 'IR'],\n            ['name' => 'Richmond', 'country_code' => 'US'],\n            ['name' => 'Socopo', 'country_code' => 'VE'],\n            ['name' => 'Shinyanga', 'country_code' => 'TZ'],\n            ['name' => 'Ash Shaykh  Uthman', 'country_code' => 'YE'],\n            ['name' => 'Genhe', 'country_code' => 'CN'],\n            ['name' => 'Montego Bay', 'country_code' => 'JM'],\n            ['name' => 'Baneh', 'country_code' => 'IR'],\n            ['name' => 'Shirayamamachi', 'country_code' => 'JP'],\n            ['name' => 'Msaken', 'country_code' => 'TN'],\n            ['name' => 'Mascara', 'country_code' => 'DZ'],\n            ['name' => 'Espejo', 'country_code' => 'CL'],\n            ['name' => 'Darlington', 'country_code' => 'GB'],\n            ['name' => 'Broken Arrow', 'country_code' => 'US'],\n            ['name' => 'Milton', 'country_code' => 'CA'],\n            ['name' => 'Yoju', 'country_code' => 'KR'],\n            ['name' => 'Xishancun', 'country_code' => 'CN'],\n            ['name' => 'Bangaon', 'country_code' => 'IN'],\n            ['name' => 'Miami Gardens', 'country_code' => 'US'],\n            ['name' => 'Pisco', 'country_code' => 'PE'],\n            ['name' => 'Dera Ismail Khan', 'country_code' => 'PK'],\n            ['name' => 'Taitung', 'country_code' => 'TW'],\n            ['name' => 'Bend', 'country_code' => 'US'],\n            ['name' => 'Burlington', 'country_code' => 'US'],\n            ['name' => 'Sandacho', 'country_code' => 'JP'],\n            ['name' => 'Kandi', 'country_code' => 'BJ'],\n            ['name' => 'Aguachica', 'country_code' => 'CO'],\n            ['name' => 'Apalit', 'country_code' => 'PH'],\n            ['name' => 'Baybay', 'country_code' => 'PH'],\n            ['name' => 'Labe', 'country_code' => 'GN'],\n            ['name' => 'Ariquemes', 'country_code' => 'BR'],\n            ['name' => 'Jurupa Valley', 'country_code' => 'US'],\n            ['name' => 'Medenine', 'country_code' => 'TN'],\n            ['name' => 'Muriae', 'country_code' => 'BR'],\n            ['name' => 'Taoyang', 'country_code' => 'CN'],\n            ['name' => 'Gualeguaychu', 'country_code' => 'AR'],\n            ['name' => 'Kasserine', 'country_code' => 'TN'],\n            ['name' => 'Beja', 'country_code' => 'TN'],\n            ['name' => 'Caen', 'country_code' => 'FR'],\n            ['name' => 'Botosani', 'country_code' => 'RO'],\n            ['name' => 'Sandy Springs', 'country_code' => 'US'],\n            ['name' => 'Yongju', 'country_code' => 'KR'],\n            ['name' => 'Gresham', 'country_code' => 'US'],\n            ['name' => 'Uitenhage', 'country_code' => 'ZA'],\n            ['name' => 'Bukoba', 'country_code' => 'TZ'],\n            ['name' => 'Maxixe', 'country_code' => 'MZ'],\n            ['name' => 'Soubre', 'country_code' => 'CI'],\n            ['name' => 'Lewisville', 'country_code' => 'US'],\n            ['name' => 'Ipiales', 'country_code' => 'CO'],\n            ['name' => 'Mineshita', 'country_code' => 'JP'],\n            ['name' => 'Hillsboro', 'country_code' => 'US'],\n            ['name' => 'Soma', 'country_code' => 'TR'],\n            ['name' => 'San Buenaventura', 'country_code' => 'US'],\n            ['name' => 'Musoma', 'country_code' => 'TZ'],\n            ['name' => 'Novoshakhtinsk', 'country_code' => 'RU'],\n            ['name' => 'Libmanan', 'country_code' => 'PH'],\n            ['name' => 'San Juan', 'country_code' => 'PH'],\n            ['name' => 'Crawley', 'country_code' => 'GB'],\n            ['name' => 'Ferizaj', 'country_code' => 'XK'],\n            ['name' => 'Ikeda', 'country_code' => 'JP'],\n            ['name' => 'St. John s', 'country_code' => 'CA'],\n            ['name' => 'Jacksonville', 'country_code' => 'US'],\n            ['name' => 'Salford', 'country_code' => 'GB'],\n            ['name' => 'Wembley', 'country_code' => 'GB'],\n            ['name' => 'Pottstown', 'country_code' => 'US'],\n            ['name' => 'Adigrat', 'country_code' => 'ET'],\n            ['name' => 'Itauna', 'country_code' => 'BR'],\n            ['name' => 'Al Fqih Ben Calah', 'country_code' => 'MA'],\n            ['name' => 'Moncton', 'country_code' => 'CA'],\n            ['name' => 'Tadpatri', 'country_code' => 'IN'],\n            ['name' => 'Huauchinango', 'country_code' => 'MX'],\n            ['name' => 'Yasuj', 'country_code' => 'IR'],\n            ['name' => 'Tipitapa', 'country_code' => 'NI'],\n            ['name' => 'Alto Hospicio', 'country_code' => 'CL'],\n            ['name' => 'Jalpaiguri', 'country_code' => 'IN'],\n            ['name' => 'Dagenham', 'country_code' => 'GB'],\n            ['name' => 'Mangaldan', 'country_code' => 'PH'],\n            ['name' => 'Birnin Kebbi', 'country_code' => 'NG'],\n            ['name' => 'Samana', 'country_code' => 'DO'],\n            ['name' => 'Siauliai', 'country_code' => 'LT'],\n            ['name' => 'Seversk', 'country_code' => 'RU'],\n            ['name' => 'El Limon', 'country_code' => 'VE'],\n            ['name' => 'Reus', 'country_code' => 'ES'],\n            ['name' => 'Inglewood', 'country_code' => 'US'],\n            ['name' => 'Sarh', 'country_code' => 'TD'],\n            ['name' => 'An Nuhud', 'country_code' => 'SD'],\n            ['name' => 'San Rafael', 'country_code' => 'AR'],\n            ['name' => 'Koszalin', 'country_code' => 'PL'],\n            ['name' => 'Escuintla', 'country_code' => 'GT'],\n            ['name' => 'Tagbilaran City', 'country_code' => 'PH'],\n            ['name' => 'Tajimi', 'country_code' => 'JP'],\n            ['name' => 'Thunder Bay', 'country_code' => 'CA'],\n            ['name' => 'Pavlohrad', 'country_code' => 'UA'],\n            ['name' => 'Yevpatoriia', 'country_code' => 'UA'],\n            ['name' => 'Douliu', 'country_code' => 'TW'],\n            ['name' => 'Emmen', 'country_code' => 'NL'],\n            ['name' => 'Moortebeek', 'country_code' => 'BE'],\n            ['name' => 'Chaman', 'country_code' => 'PK'],\n            ['name' => 'Queenstown', 'country_code' => 'ZA'],\n            ['name' => 'Umm Qasr', 'country_code' => 'IQ'],\n            ['name' => 'Sliven', 'country_code' => 'BG'],\n            ['name' => 'Suriapet', 'country_code' => 'IN'],\n            ['name' => 'Kogon Shahri', 'country_code' => 'UZ'],\n            ['name' => 'Ban Mangkon', 'country_code' => 'TH'],\n            ['name' => 'League City', 'country_code' => 'US'],\n            ['name' => 'Dinalupihan', 'country_code' => 'PH'],\n            ['name' => 'Kefar Sava', 'country_code' => 'IL'],\n            ['name' => 'Alchevsk', 'country_code' => 'UA'],\n            ['name' => 'Chichicastenango', 'country_code' => 'GT'],\n            ['name' => 'Araxa', 'country_code' => 'BR'],\n            ['name' => 'Gillingham', 'country_code' => 'GB'],\n            ['name' => 'Roubaix', 'country_code' => 'FR'],\n            ['name' => 'Eau Claire', 'country_code' => 'US'],\n            ['name' => 'Bolzano', 'country_code' => 'IT'],\n            ['name' => 'Cambe', 'country_code' => 'BR'],\n            ['name' => 'Charsadda', 'country_code' => 'PK'],\n            ['name' => 'Erdenet', 'country_code' => 'MN'],\n            ['name' => 'Turlock', 'country_code' => 'US'],\n            ['name' => 'Temple', 'country_code' => 'US'],\n            ['name' => 'La Piedad', 'country_code' => 'MX'],\n            ['name' => 'Chongshan', 'country_code' => 'CN'],\n            ['name' => 'Himamaylan', 'country_code' => 'PH'],\n            ['name' => 'Mansfield', 'country_code' => 'GB'],\n            ['name' => 'Mmabatho', 'country_code' => 'ZA'],\n            ['name' => 'Ilebo', 'country_code' => 'CD'],\n            ['name' => 'Taungoo', 'country_code' => 'MM'],\n            ['name' => 'Daet', 'country_code' => 'PH'],\n            ['name' => 'Mao', 'country_code' => 'DO'],\n            ['name' => 'Dieppe', 'country_code' => 'CA'],\n            ['name' => 'Arzamas', 'country_code' => 'RU'],\n            ['name' => 'Moron', 'country_code' => 'AR'],\n            ['name' => 'Longjiang', 'country_code' => 'CN'],\n            ['name' => 'San Felipe', 'country_code' => 'MX'],\n            ['name' => 'Songea', 'country_code' => 'TZ'],\n            ['name' => 'Artem', 'country_code' => 'RU'],\n            ['name' => 'Erechim', 'country_code' => 'BR'],\n            ['name' => 'Noyabrsk', 'country_code' => 'RU'],\n            ['name' => 'Ilopango', 'country_code' => 'SV'],\n            ['name' => 'Nakhon Si Thammarat', 'country_code' => 'TH'],\n            ['name' => 'Petrzalka', 'country_code' => 'SK'],\n            ['name' => 'Tubarao', 'country_code' => 'BR'],\n            ['name' => 'Chabahar', 'country_code' => 'IR'],\n            ['name' => 'Monastir', 'country_code' => 'TN'],\n            ['name' => 'Raba', 'country_code' => 'ID'],\n            ['name' => 'Orsha', 'country_code' => 'BY'],\n            ['name' => 'Patos', 'country_code' => 'BR'],\n            ['name' => 'Jincheng', 'country_code' => 'CN'],\n            ['name' => 'La Banda', 'country_code' => 'AR'],\n            ['name' => 'Sioux City', 'country_code' => 'US'],\n            ['name' => 'Kemalpasa', 'country_code' => 'TR'],\n            ['name' => 'Salisbury', 'country_code' => 'US'],\n            ['name' => 'Vinh Long', 'country_code' => 'VN'],\n            ['name' => 'Passos', 'country_code' => 'BR'],\n            ['name' => 'Ballarat', 'country_code' => 'AU'],\n            ['name' => 'Davie', 'country_code' => 'US'],\n            ['name' => 'Aihua', 'country_code' => 'CN'],\n            ['name' => 'Achinsk', 'country_code' => 'RU'],\n            ['name' => 'Daly City', 'country_code' => 'US'],\n            ['name' => 'Dunedin', 'country_code' => 'NZ'],\n            ['name' => 'Contramaestre', 'country_code' => 'CU'],\n            ['name' => 'Subotica', 'country_code' => 'RS'],\n            ['name' => 'Girona', 'country_code' => 'ES'],\n            ['name' => 'Nusaybin', 'country_code' => 'TR'],\n            ['name' => 'Lo Barnechea', 'country_code' => 'CL'],\n            ['name' => 'Paco do Lumiar', 'country_code' => 'BR'],\n            ['name' => 'Trincomalee', 'country_code' => 'LK'],\n            ['name' => 'Mang La', 'country_code' => 'VN'],\n            ['name' => 'Nova Serrana', 'country_code' => 'BR'],\n            ['name' => 'Akhmim', 'country_code' => 'EG'],\n            ['name' => 'Azare', 'country_code' => 'NG'],\n            ['name' => 'Brovary', 'country_code' => 'UA'],\n            ['name' => 'Itumbiara', 'country_code' => 'BR'],\n            ['name' => 'Yelets', 'country_code' => 'RU'],\n            ['name' => 'Pushkino', 'country_code' => 'RU'],\n            ['name' => 'Tikrit', 'country_code' => 'IQ'],\n            ['name' => 'Robat Karim', 'country_code' => 'IR'],\n            ['name' => 'Malacatan', 'country_code' => 'GT'],\n            ['name' => 'Koutiala', 'country_code' => 'ML'],\n            ['name' => 'Lerma', 'country_code' => 'MX'],\n            ['name' => 'Ciudad Rio Bravo', 'country_code' => 'MX'],\n            ['name' => 'Highlands Ranch', 'country_code' => 'US'],\n            ['name' => 'Allen', 'country_code' => 'US'],\n            ['name' => 'Tarim', 'country_code' => 'YE'],\n            ['name' => 'Kroonstad', 'country_code' => 'ZA'],\n            ['name' => 'Mazyr', 'country_code' => 'BY'],\n            ['name' => 'Kandhkot', 'country_code' => 'PK'],\n            ['name' => 'Toride', 'country_code' => 'JP'],\n            ['name' => 'Granada', 'country_code' => 'NI'],\n            ['name' => 'Ituiutaba', 'country_code' => 'BR'],\n            ['name' => 'Kongolo', 'country_code' => 'CD'],\n            ['name' => 'Moers', 'country_code' => 'DE'],\n            ['name' => 'Liberec', 'country_code' => 'CZ'],\n            ['name' => 'Yozgat', 'country_code' => 'TR'],\n            ['name' => 'Novara', 'country_code' => 'IT'],\n            ['name' => 'Subic', 'country_code' => 'PH'],\n            ['name' => 'Al Faw', 'country_code' => 'IQ'],\n            ['name' => 'West Covina', 'country_code' => 'US'],\n            ['name' => 'Salzgitter', 'country_code' => 'DE'],\n            ['name' => 'Berdsk', 'country_code' => 'RU'],\n            ['name' => 'Sparks', 'country_code' => 'US'],\n            ['name' => 'Waterloo', 'country_code' => 'CA'],\n            ['name' => 'Lavras', 'country_code' => 'BR'],\n            ['name' => 'Galle', 'country_code' => 'LK'],\n            ['name' => 'San Vicente de Baracaldo', 'country_code' => 'ES'],\n            ['name' => 'Lingayen', 'country_code' => 'PH'],\n            ['name' => 'Tadepallegudem', 'country_code' => 'IN'],\n            ['name' => 'Zomba', 'country_code' => 'MW'],\n            ['name' => 'Dobrich', 'country_code' => 'BG'],\n            ['name' => 'Sergiyev Posad', 'country_code' => 'RU'],\n            ['name' => 'Konotop', 'country_code' => 'UA'],\n            ['name' => 'Wichita Falls', 'country_code' => 'US'],\n            ['name' => 'Courbevoic', 'country_code' => 'FR'],\n            ['name' => 'Zihuatanejo', 'country_code' => 'MX'],\n            ['name' => 'Fugangcun', 'country_code' => 'CN'],\n            ['name' => 'Trindade', 'country_code' => 'BR'],\n            ['name' => 'San Ildefonso', 'country_code' => 'PH'],\n            ['name' => 'Bouskoura', 'country_code' => 'MA'],\n            ['name' => 'Inzai', 'country_code' => 'JP'],\n            ['name' => 'Khak-e  Ali', 'country_code' => 'IR'],\n            ['name' => 'Maumere', 'country_code' => 'ID'],\n            ['name' => 'Samal', 'country_code' => 'PH'],\n            ['name' => 'San Mateo', 'country_code' => 'US'],\n            ['name' => 'Villa Luzuriaga', 'country_code' => 'AR'],\n            ['name' => 'Eastbourne', 'country_code' => 'GB'],\n            ['name' => 'Worcester', 'country_code' => 'GB'],\n            ['name' => 'Caseros', 'country_code' => 'AR'],\n            ['name' => 'Fyfield', 'country_code' => 'GB'],\n            ['name' => 'Quezon', 'country_code' => 'PH'],\n            ['name' => 'Ginowan', 'country_code' => 'JP'],\n            ['name' => 'Tula de Allende', 'country_code' => 'MX'],\n            ['name' => 'Catbalogan', 'country_code' => 'PH'],\n            ['name' => 'Abengourou', 'country_code' => 'CI'],\n            ['name' => 'Lower Hutt', 'country_code' => 'NZ'],\n            ['name' => 'Delft', 'country_code' => 'NL'],\n            ['name' => 'Kamianets-Podilskyi', 'country_code' => 'UA'],\n            ['name' => 'Kalyani', 'country_code' => 'IN'],\n            ['name' => 'Kilinochchi', 'country_code' => 'LK'],\n            ['name' => 'Columbia', 'country_code' => 'US'],\n            ['name' => 'Saijo', 'country_code' => 'JP'],\n            ['name' => 'Piacenza', 'country_code' => 'IT'],\n            ['name' => 'EdDamer', 'country_code' => 'SD'],\n            ['name' => 'Norwalk', 'country_code' => 'US'],\n            ['name' => 'Santa Rosa', 'country_code' => 'AR'],\n            ['name' => 'Isehara', 'country_code' => 'JP'],\n            ['name' => 'Dolisie', 'country_code' => 'CG'],\n            ['name' => 'Itaperuna', 'country_code' => 'BR'],\n            ['name' => 'Negapatam', 'country_code' => 'IN'],\n            ['name' => 'Pateros', 'country_code' => 'PH'],\n            ['name' => 'Wigan', 'country_code' => 'GB'],\n            ['name' => 'Tourcoing', 'country_code' => 'FR'],\n            ['name' => 'Malungun', 'country_code' => 'PH'],\n            ['name' => 'Siegen', 'country_code' => 'DE'],\n            ['name' => 'Dongguazhen', 'country_code' => 'CN'],\n            ['name' => 'Biak', 'country_code' => 'ID'],\n            ['name' => 'Elista', 'country_code' => 'RU'],\n            ['name' => 'Yishi', 'country_code' => 'CN'],\n            ['name' => 'Libertad', 'country_code' => 'AR'],\n            ['name' => 'Mazatenango', 'country_code' => 'GT'],\n            ['name' => 'Rialto', 'country_code' => 'US'],\n            ['name' => 'Breves', 'country_code' => 'BR'],\n            ['name' => 'Lida', 'country_code' => 'BY'],\n            ['name' => 'Thika', 'country_code' => 'KE'],\n            ['name' => 'Manteca', 'country_code' => 'US'],\n            ['name' => 'Bumba', 'country_code' => 'CD'],\n            ['name' => 'Guiguinto', 'country_code' => 'PH'],\n            ['name' => 'Bayugan', 'country_code' => 'PH'],\n            ['name' => 'Burzaco', 'country_code' => 'AR'],\n            ['name' => 'Sakado', 'country_code' => 'JP'],\n            ['name' => 'Sao Lourenco da Mata', 'country_code' => 'BR'],\n            ['name' => 'Talara', 'country_code' => 'PE'],\n            ['name' => 'Messaad', 'country_code' => 'DZ'],\n            ['name' => 'Novokuybyshevsk', 'country_code' => 'RU'],\n            ['name' => 'Yilong', 'country_code' => 'CN'],\n            ['name' => 'Bergama', 'country_code' => 'TR'],\n            ['name' => 'Naujan', 'country_code' => 'PH'],\n            ['name' => 'Miryang', 'country_code' => 'KR'],\n            ['name' => 'Nyeri', 'country_code' => 'KE'],\n            ['name' => 'Mengdingjie', 'country_code' => 'CN'],\n            ['name' => 'Satu Mare', 'country_code' => 'RO'],\n            ['name' => 'Houzhuang', 'country_code' => 'CN'],\n            ['name' => 'Hildesheim', 'country_code' => 'DE'],\n            ['name' => 'Nanterre', 'country_code' => 'FR'],\n            ['name' => 'Sangju', 'country_code' => 'KR'],\n            ['name' => 'Kirklareli', 'country_code' => 'TR'],\n            ['name' => 'Hove', 'country_code' => 'GB'],\n            ['name' => 'Arden-Arcade', 'country_code' => 'US'],\n            ['name' => 'Bhadreswar', 'country_code' => 'IN'],\n            ['name' => 'Noginsk', 'country_code' => 'RU'],\n            ['name' => 'Nikaia', 'country_code' => 'GR'],\n            ['name' => 'Hengnan', 'country_code' => 'CN'],\n            ['name' => 'Saint Helens', 'country_code' => 'GB'],\n            ['name' => 'Talisay', 'country_code' => 'PH'],\n            ['name' => 'El Cajon', 'country_code' => 'US'],\n            ['name' => 'Bethal', 'country_code' => 'ZA'],\n            ['name' => 'Mumias', 'country_code' => 'KE'],\n            ['name' => 'Burbank', 'country_code' => 'US'],\n            ['name' => 'Longmont', 'country_code' => 'US'],\n            ['name' => 'Lakewood', 'country_code' => 'US'],\n            ['name' => 'Mayari', 'country_code' => 'CU'],\n            ['name' => 'Mositai', 'country_code' => 'CN'],\n            ['name' => 'Yunfu', 'country_code' => 'CN'],\n            ['name' => 'Cawayan', 'country_code' => 'PH'],\n            ['name' => 'Dhangadhi', 'country_code' => 'NP'],\n            ['name' => 'Kashmar', 'country_code' => 'IR'],\n            ['name' => 'Maramag', 'country_code' => 'PH'],\n            ['name' => 'San Felipe del Progreso', 'country_code' => 'MX'],\n            ['name' => 'Klagenfurt', 'country_code' => 'AT'],\n            ['name' => 'Delta', 'country_code' => 'CA'],\n            ['name' => 'Vilhena', 'country_code' => 'BR'],\n            ['name' => 'Chilakalurupet', 'country_code' => 'IN'],\n            ['name' => 'Coatepec', 'country_code' => 'MX'],\n            ['name' => 'Sabratah', 'country_code' => 'LY'],\n            ['name' => 'Chishtian', 'country_code' => 'PK'],\n            ['name' => 'Boryeong', 'country_code' => 'KR'],\n            ['name' => 'Shushtar', 'country_code' => 'IR'],\n            ['name' => 'Jingping', 'country_code' => 'CN'],\n            ['name' => 'Santo Antonio de Jesus', 'country_code' => 'BR'],\n            ['name' => 'Teluk Intan', 'country_code' => 'MY'],\n            ['name' => 'Hemel Hempstead', 'country_code' => 'GB'],\n            ['name' => 'Assis', 'country_code' => 'BR'],\n            ['name' => 'Berisso', 'country_code' => 'AR'],\n            ['name' => 'Tizayuca', 'country_code' => 'MX'],\n            ['name' => 'Renton', 'country_code' => 'US'],\n            ['name' => 'Ancona', 'country_code' => 'IT'],\n            ['name' => 'Vitry-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Chatham', 'country_code' => 'CA'],\n            ['name' => ' Ibri', 'country_code' => 'OM'],\n            ['name' => 'Vista', 'country_code' => 'US'],\n            ['name' => 'Zheleznogorsk', 'country_code' => 'RU'],\n            ['name' => 'Logan', 'country_code' => 'US'],\n            ['name' => 'Sungai Penuh', 'country_code' => 'ID'],\n            ['name' => 'Prescott Valley', 'country_code' => 'US'],\n            ['name' => 'Trinidad', 'country_code' => 'BO'],\n            ['name' => 'Olomouc', 'country_code' => 'CZ'],\n            ['name' => 'Vacaville', 'country_code' => 'US'],\n            ['name' => 'San Luis de la Paz', 'country_code' => 'MX'],\n            ['name' => 'Ain Oussera', 'country_code' => 'DZ'],\n            ['name' => 'Itaituba', 'country_code' => 'BR'],\n            ['name' => 'Wakefield', 'country_code' => 'GB'],\n            ['name' => 'Liancheng', 'country_code' => 'CN'],\n            ['name' => 'Kousseri', 'country_code' => 'CM'],\n            ['name' => 'Oued Zem', 'country_code' => 'MA'],\n            ['name' => 'Edinburg', 'country_code' => 'US'],\n            ['name' => 'Weifen', 'country_code' => 'CN'],\n            ['name' => 'Gutersloh', 'country_code' => 'DE'],\n            ['name' => 'Carmel', 'country_code' => 'US'],\n            ['name' => 'Spokane Valley', 'country_code' => 'US'],\n            ['name' => 'Oum el Bouaghi', 'country_code' => 'DZ'],\n            ['name' => 'Watford', 'country_code' => 'GB'],\n            ['name' => 'San Angelo', 'country_code' => 'US'],\n            ['name' => 'Jilotepec', 'country_code' => 'MX'],\n            ['name' => 'Salihorsk', 'country_code' => 'BY'],\n            ['name' => 'Barnsley', 'country_code' => 'GB'],\n            ['name' => 'Cottbus', 'country_code' => 'DE'],\n            ['name' => 'Bongao', 'country_code' => 'PH'],\n            ['name' => 'Kpalime', 'country_code' => 'TG'],\n            ['name' => 'Kaiserslautern', 'country_code' => 'DE'],\n            ['name' => 'Carmona', 'country_code' => 'PH'],\n            ['name' => 'Gangtok', 'country_code' => 'IN'],\n            ['name' => 'La Crosse', 'country_code' => 'US'],\n            ['name' => 'Ahar', 'country_code' => 'IR'],\n            ['name' => 'Konan', 'country_code' => 'JP'],\n            ['name' => 'Diourbel', 'country_code' => 'SN'],\n            ['name' => 'Bulan', 'country_code' => 'PH'],\n            ['name' => 'Masjed Soleyman', 'country_code' => 'IR'],\n            ['name' => 'Mairipora', 'country_code' => 'BR'],\n            ['name' => 'Torbat-e Jam', 'country_code' => 'IR'],\n            ['name' => 'Manolo Fortich', 'country_code' => 'PH'],\n            ['name' => 'Edison', 'country_code' => 'US'],\n            ['name' => 'Idaho Falls', 'country_code' => 'US'],\n            ['name' => 'Morales', 'country_code' => 'GT'],\n            ['name' => 'Holland', 'country_code' => 'US'],\n            ['name' => 'Red Deer', 'country_code' => 'CA'],\n            ['name' => 'Charlottesville', 'country_code' => 'US'],\n            ['name' => 'Shahrisabz', 'country_code' => 'UZ'],\n            ['name' => 'Longview', 'country_code' => 'US'],\n            ['name' => 'Lincoln', 'country_code' => 'GB'],\n            ['name' => 'Navapolatsk', 'country_code' => 'BY'],\n            ['name' => 'Woodbridge', 'country_code' => 'US'],\n            ['name' => 'Bacabal', 'country_code' => 'BR'],\n            ['name' => 'Tracy', 'country_code' => 'US'],\n            ['name' => 'Kamloops', 'country_code' => 'CA'],\n            ['name' => 'Nanxicun', 'country_code' => 'CN'],\n            ['name' => 'Ramnicu Valcea', 'country_code' => 'RO'],\n            ['name' => 'Pulilan', 'country_code' => 'PH'],\n            ['name' => 'Kettering', 'country_code' => 'GB'],\n            ['name' => 'Viseu', 'country_code' => 'PT'],\n            ['name' => 'Bayeux', 'country_code' => 'BR'],\n            ['name' => 'Kohima', 'country_code' => 'IN'],\n            ['name' => 'Mingacevir', 'country_code' => 'AZ'],\n            ['name' => 'Janakpur', 'country_code' => 'NP'],\n            ['name' => 'Chipata', 'country_code' => 'ZM'],\n            ['name' => 'Ciudad General Belgrano', 'country_code' => 'AR'],\n            ['name' => 'Khanty-Mansiysk', 'country_code' => 'RU'],\n            ['name' => 'Creteil', 'country_code' => 'FR'],\n            ['name' => 'Maribor', 'country_code' => 'SI'],\n            ['name' => 'Yashio', 'country_code' => 'JP'],\n            ['name' => 'Bismarck', 'country_code' => 'US'],\n            ['name' => 'Herzliyya', 'country_code' => 'IL'],\n            ['name' => 'Yen Bai', 'country_code' => 'VN'],\n            ['name' => 'San Fernando', 'country_code' => 'ES'],\n            ['name' => 'Shumen', 'country_code' => 'BG'],\n            ['name' => 'Orem', 'country_code' => 'US'],\n            ['name' => 'Half Way Tree', 'country_code' => 'JM'],\n            ['name' => 'Vi Thanh', 'country_code' => 'VN'],\n            ['name' => 'Tumbes', 'country_code' => 'PE'],\n            ['name' => 'Malindi', 'country_code' => 'KE'],\n            ['name' => 'Szekesfehervar', 'country_code' => 'HU'],\n            ['name' => 'San Joaquin', 'country_code' => 'CL'],\n            ['name' => 'Xirdalan', 'country_code' => 'AZ'],\n            ['name' => 'Tenancingo', 'country_code' => 'MX'],\n            ['name' => 'Ponta Pora', 'country_code' => 'BR'],\n            ['name' => 'Wangqing', 'country_code' => 'CN'],\n            ['name' => 'Sibolga', 'country_code' => 'ID'],\n            ['name' => 'Aubervilliers', 'country_code' => 'FR'],\n            ['name' => 'Balanga', 'country_code' => 'PH'],\n            ['name' => 'Bunia', 'country_code' => 'CD'],\n            ['name' => 'Arauca', 'country_code' => 'CO'],\n            ['name' => 'La Reina', 'country_code' => 'CL'],\n            ['name' => 'Sidi Slimane', 'country_code' => 'MA'],\n            ['name' => 'Peje', 'country_code' => 'XK'],\n            ['name' => 'Yishui', 'country_code' => 'CN'],\n            ['name' => 'Fulham', 'country_code' => 'GB'],\n            ['name' => 'Schwerin', 'country_code' => 'DE'],\n            ['name' => 'La Marsa', 'country_code' => 'TN'],\n            ['name' => 'San Francisco Solano', 'country_code' => 'AR'],\n            ['name' => 'Zifta', 'country_code' => 'EG'],\n            ['name' => 'Colombes', 'country_code' => 'FR'],\n            ['name' => 'Cankiri', 'country_code' => 'TR'],\n            ['name' => 'East Ham', 'country_code' => 'GB'],\n            ['name' => 'Yotsukaido', 'country_code' => 'JP'],\n            ['name' => 'Ceske Budejovice', 'country_code' => 'CZ'],\n            ['name' => 'Masbate', 'country_code' => 'PH'],\n            ['name' => 'Kakamega', 'country_code' => 'KE'],\n            ['name' => 'Rio Gallegos', 'country_code' => 'AR'],\n            ['name' => 'Tataouine', 'country_code' => 'TN'],\n            ['name' => 'Fenggang', 'country_code' => 'CN'],\n            ['name' => 'Ludwigsburg', 'country_code' => 'DE'],\n            ['name' => 'Compton', 'country_code' => 'US'],\n            ['name' => 'Errachidia', 'country_code' => 'MA'],\n            ['name' => 'Esslingen', 'country_code' => 'DE'],\n            ['name' => 'Nisshin', 'country_code' => 'JP'],\n            ['name' => 'Al Bahah', 'country_code' => 'SA'],\n            ['name' => 'Obu', 'country_code' => 'JP'],\n            ['name' => 'Sunrise', 'country_code' => 'US'],\n            ['name' => 'Hartlepool', 'country_code' => 'GB'],\n            ['name' => 'Xiancun', 'country_code' => 'CN'],\n            ['name' => 'Naxcivan', 'country_code' => 'AZ'],\n            ['name' => 'Gjakove', 'country_code' => 'XK'],\n            ['name' => 'Mtwara', 'country_code' => 'TZ'],\n            ['name' => 'Ealing', 'country_code' => 'GB'],\n            ['name' => 'Birkenhead', 'country_code' => 'GB'],\n            ['name' => 'Guercif', 'country_code' => 'MA'],\n            ['name' => 'Quincy', 'country_code' => 'US'],\n            ['name' => 'Ben Arous', 'country_code' => 'TN'],\n            ['name' => 'Lynn', 'country_code' => 'US'],\n            ['name' => 'Catarman', 'country_code' => 'PH'],\n            ['name' => 'Monte Chingolo', 'country_code' => 'AR'],\n            ['name' => 'Drobeta-Turnu Severin', 'country_code' => 'RO'],\n            ['name' => 'Tultepec', 'country_code' => 'MX'],\n            ['name' => 'Haskovo', 'country_code' => 'BG'],\n            ['name' => 'Suceava', 'country_code' => 'RO'],\n            ['name' => 'Al Fujayrah', 'country_code' => 'AE'],\n            ['name' => 'Tartu', 'country_code' => 'EE'],\n            ['name' => 'Ciudad Lazaro Cardenas', 'country_code' => 'MX'],\n            ['name' => 'Hradec Kralove', 'country_code' => 'CZ'],\n            ['name' => 'Sirnak', 'country_code' => 'TR'],\n            ['name' => 'South Gate', 'country_code' => 'US'],\n            ['name' => 'Tonacatepeque', 'country_code' => 'SV'],\n            ['name' => 'Miaoli', 'country_code' => 'TW'],\n            ['name' => 'Makeni', 'country_code' => 'SL'],\n            ['name' => 'Nuneaton', 'country_code' => 'GB'],\n            ['name' => 'Itanhaem', 'country_code' => 'BR'],\n            ['name' => 'Brixton', 'country_code' => 'GB'],\n            ['name' => 'Kirkland', 'country_code' => 'US'],\n            ['name' => 'Usti nad Labem', 'country_code' => 'CZ'],\n            ['name' => 'Levallois-Perret', 'country_code' => 'FR'],\n            ['name' => 'Brusque', 'country_code' => 'BR'],\n            ['name' => 'Santiago de Compostela', 'country_code' => 'ES'],\n            ['name' => 'Pardubice', 'country_code' => 'CZ'],\n            ['name' => 'Magadan', 'country_code' => 'RU'],\n            ['name' => 'Tulcea', 'country_code' => 'RO'],\n            ['name' => 'Bender', 'country_code' => 'MD'],\n            ['name' => 'Ben Guerir', 'country_code' => 'MA'],\n            ['name' => 'Panevezys', 'country_code' => 'LT'],\n            ['name' => 'Jaffna', 'country_code' => 'LK'],\n            ['name' => 'Bromley', 'country_code' => 'GB'],\n            ['name' => 'Queluz', 'country_code' => 'PT'],\n            ['name' => 'Bath', 'country_code' => 'GB'],\n            ['name' => 'Kargilik', 'country_code' => 'CN'],\n            ['name' => 'Pandi', 'country_code' => 'PH'],\n            ['name' => 'Oulad Teima', 'country_code' => 'MA'],\n            ['name' => 'Edmonton', 'country_code' => 'GB'],\n            ['name' => 'Lqoliaa', 'country_code' => 'MA'],\n            ['name' => 'Hayes', 'country_code' => 'GB'],\n            ['name' => 'Lobnya', 'country_code' => 'RU'],\n            ['name' => 'Francistown', 'country_code' => 'BW'],\n            ['name' => 'Aulnay-sous-Bois', 'country_code' => 'FR'],\n            ['name' => 'Jonkoping', 'country_code' => 'SE'],\n            ['name' => 'Isulan', 'country_code' => 'PH'],\n            ['name' => 'Fuengirola', 'country_code' => 'ES'],\n            ['name' => 'Umea', 'country_code' => 'SE'],\n            ['name' => 'Glyfada', 'country_code' => 'GR'],\n            ['name' => 'Kitanagoya', 'country_code' => 'JP'],\n            ['name' => 'Cadereyta Jimenez', 'country_code' => 'MX'],\n            ['name' => 'Babahoyo', 'country_code' => 'EC'],\n            ['name' => 'Westminster', 'country_code' => 'US'],\n            ['name' => 'Remedios de Escalada', 'country_code' => 'AR'],\n            ['name' => 'Vanadzor', 'country_code' => 'AM'],\n            ['name' => 'Germantown', 'country_code' => 'US'],\n            ['name' => 'Higashiyamato', 'country_code' => 'JP'],\n            ['name' => 'Catanzaro', 'country_code' => 'IT'],\n            ['name' => 'Tartus', 'country_code' => 'SY'],\n            ['name' => 'Valjevo', 'country_code' => 'RS'],\n            ['name' => 'Santa Monica', 'country_code' => 'US'],\n            ['name' => 'Poitiers', 'country_code' => 'FR'],\n            ['name' => 'Acayucan', 'country_code' => 'MX'],\n            ['name' => 'Nenjiang', 'country_code' => 'CN'],\n            ['name' => 'Gjilan', 'country_code' => 'XK'],\n            ['name' => 'Jalal-Abad', 'country_code' => 'KG'],\n            ['name' => 'Presov', 'country_code' => 'SK'],\n            ['name' => 'Balkanabat', 'country_code' => 'TM'],\n            ['name' => 'Mechelen', 'country_code' => 'BE'],\n            ['name' => 'Mukacheve', 'country_code' => 'UA'],\n            ['name' => 'As Salt', 'country_code' => 'JO'],\n            ['name' => 'Tangxing', 'country_code' => 'CN'],\n            ['name' => 'Volos', 'country_code' => 'GR'],\n            ['name' => 'Versailles', 'country_code' => 'FR'],\n            ['name' => 'Viana do Castelo', 'country_code' => 'PT'],\n            ['name' => 'Woolwich', 'country_code' => 'GB'],\n            ['name' => 'Miami Beach', 'country_code' => 'US'],\n            ['name' => 'San Leandro', 'country_code' => 'US'],\n            ['name' => 'Sesto San Giovanni', 'country_code' => 'IT'],\n            ['name' => 'Ciudad de Ceuta', 'country_code' => 'ES'],\n            ['name' => 'Bracknell', 'country_code' => 'GB'],\n            ['name' => 'Podujeve', 'country_code' => 'XK'],\n            ['name' => 'Apizaco', 'country_code' => 'MX'],\n            ['name' => 'San Baudilio de Llobregat', 'country_code' => 'ES'],\n            ['name' => 'Coronel Oviedo', 'country_code' => 'PY'],\n            ['name' => 'Tala', 'country_code' => 'MX'],\n            ['name' => 'Carrieres-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Fuentes del Valle', 'country_code' => 'MX'],\n            ['name' => 'Ebolowa', 'country_code' => 'CM'],\n            ['name' => 'Torre del Greco', 'country_code' => 'IT'],\n            ['name' => 'San Juan de los Morros', 'country_code' => 'VE'],\n            ['name' => 'Citrus Heights', 'country_code' => 'US'],\n            ['name' => 'State College', 'country_code' => 'US'],\n            ['name' => 'Koudougou', 'country_code' => 'BF'],\n            ['name' => 'Darayya', 'country_code' => 'SY'],\n            ['name' => 'Lokossa', 'country_code' => 'BJ'],\n            ['name' => 'Salina Cruz', 'country_code' => 'MX'],\n            ['name' => 'Daxincun', 'country_code' => 'CN'],\n            ['name' => 'Concepcion', 'country_code' => 'PY'],\n            ['name' => 'Jalpa de Mendez', 'country_code' => 'MX'],\n            ['name' => 'Kawit', 'country_code' => 'PH'],\n            ['name' => 'Mardin', 'country_code' => 'TR'],\n            ['name' => 'Xishancun', 'country_code' => 'CN'],\n            ['name' => 'Mingxing', 'country_code' => 'CN'],\n            ['name' => 'Nakhon Sawan', 'country_code' => 'TH'],\n            ['name' => 'Nacajuca', 'country_code' => 'MX'],\n            ['name' => 'Cardenas', 'country_code' => 'MX'],\n            ['name' => 'Loznica', 'country_code' => 'RS'],\n            ['name' => 'Edgware', 'country_code' => 'GB'],\n            ['name' => 'Tucupita', 'country_code' => 'VE'],\n            ['name' => 'Nabatiye', 'country_code' => 'LB'],\n            ['name' => 'Ezpeleta', 'country_code' => 'AR'],\n            ['name' => 'Owariasahi', 'country_code' => 'JP'],\n            ['name' => 'Toledo', 'country_code' => 'ES'],\n            ['name' => 'Piatra Neamt', 'country_code' => 'RO'],\n            ['name' => 'Busto Arsizio', 'country_code' => 'IT'],\n            ['name' => 'Ath Thawrah', 'country_code' => 'SY'],\n            ['name' => 'Hawthorne', 'country_code' => 'US'],\n            ['name' => 'Avare', 'country_code' => 'BR'],\n            ['name' => 'Maasin', 'country_code' => 'PH'],\n            ['name' => 'Kouvola', 'country_code' => 'FI'],\n            ['name' => 'Kuznetsk', 'country_code' => 'RU'],\n            ['name' => 'El Bayadh', 'country_code' => 'DZ'],\n            ['name' => 'Ciudad Lerdo', 'country_code' => 'MX'],\n            ['name' => 'Issy-les-Moulineaux', 'country_code' => 'FR'],\n            ['name' => 'Como', 'country_code' => 'IT'],\n            ['name' => 'Pori', 'country_code' => 'FI'],\n            ['name' => 'Scunthorpe', 'country_code' => 'GB'],\n            ['name' => 'Yambol', 'country_code' => 'BG'],\n            ['name' => 'Louga', 'country_code' => 'SN'],\n            ['name' => 'Manfalut', 'country_code' => 'EG'],\n            ['name' => 'Whittier', 'country_code' => 'US'],\n            ['name' => 'Clifton', 'country_code' => 'US'],\n            ['name' => 'Puerto Maldonado', 'country_code' => 'PE'],\n            ['name' => 'Hetauda', 'country_code' => 'NP'],\n            ['name' => 'Tacambaro de Codallos', 'country_code' => 'MX'],\n            ['name' => 'Chaguanas', 'country_code' => 'TT'],\n            ['name' => 'Cunduacan', 'country_code' => 'MX'],\n            ['name' => 'Pazardzhik', 'country_code' => 'BG'],\n            ['name' => 'Uman', 'country_code' => 'UA'],\n            ['name' => 'Nazareth', 'country_code' => 'IL'],\n            ['name' => 'Ivanteyevka', 'country_code' => 'RU'],\n            ['name' => 'Nagaoka', 'country_code' => 'JP'],\n            ['name' => 'Osijek', 'country_code' => 'HR'],\n            ['name' => 'Cozumel', 'country_code' => 'MX'],\n            ['name' => 'Cukai', 'country_code' => 'MY'],\n            ['name' => 'Mbarara', 'country_code' => 'UG'],\n            ['name' => 'Lucerne', 'country_code' => 'CH'],\n            ['name' => 'Mitrovice', 'country_code' => 'XK'],\n            ['name' => 'Cabo San Lucas', 'country_code' => 'MX'],\n            ['name' => 'Champigny-sur-Marne', 'country_code' => 'FR'],\n            ['name' => 'Rivera', 'country_code' => 'UY'],\n            ['name' => 'Kunitachi', 'country_code' => 'JP'],\n            ['name' => 'Ouidah', 'country_code' => 'BJ'],\n            ['name' => 'Newmarket', 'country_code' => 'CA'],\n            ['name' => 'Bumahen', 'country_code' => 'IR'],\n            ['name' => 'Milpitas', 'country_code' => 'US'],\n            ['name' => 'Pernik', 'country_code' => 'BG'],\n            ['name' => 'Clichy', 'country_code' => 'FR'],\n            ['name' => 'Phuket', 'country_code' => 'TH'],\n            ['name' => 'Ho', 'country_code' => 'GH'],\n            ['name' => 'West Bromwich', 'country_code' => 'GB'],\n            ['name' => 'Le Bardo', 'country_code' => 'TN'],\n            ['name' => 'Alhambra', 'country_code' => 'US'],\n            ['name' => 'Zilina', 'country_code' => 'SK'],\n            ['name' => 'Esteio', 'country_code' => 'BR'],\n            ['name' => 'Resita', 'country_code' => 'RO'],\n            ['name' => 'Chatham', 'country_code' => 'GB'],\n            ['name' => 'Rueil-Malmaison', 'country_code' => 'FR'],\n            ['name' => 'Casoria', 'country_code' => 'IT'],\n            ['name' => 'Antsiranana', 'country_code' => 'MG'],\n            ['name' => 'Purmerend', 'country_code' => 'NL'],\n            ['name' => 'Dudley', 'country_code' => 'GB'],\n            ['name' => 'Ban Talat Rangsit', 'country_code' => 'TH'],\n            ['name' => 'Lodwar', 'country_code' => 'KE'],\n            ['name' => 'Targu Jiu', 'country_code' => 'RO'],\n            ['name' => 'Chania', 'country_code' => 'GR'],\n            ['name' => 'Zacatlan', 'country_code' => 'MX'],\n            ['name' => 'Upper Darby', 'country_code' => 'US'],\n            ['name' => 'Prosperidad', 'country_code' => 'PH'],\n            ['name' => 'Abomey', 'country_code' => 'BJ'],\n            ['name' => 'Mountain View', 'country_code' => 'US'],\n            ['name' => 'Blagoevgrad', 'country_code' => 'BG'],\n            ['name' => 'Nabunturan', 'country_code' => 'PH'],\n            ['name' => 'Elbasan', 'country_code' => 'AL'],\n            ['name' => 'Al Muharraq', 'country_code' => 'BH'],\n            ['name' => 'White Rock', 'country_code' => 'CA'],\n            ['name' => 'Nea Ionia', 'country_code' => 'GR'],\n            ['name' => 'Campo Formoso', 'country_code' => 'BR'],\n            ['name' => 'Kayes', 'country_code' => 'ML'],\n            ['name' => 'Kalibo', 'country_code' => 'PH'],\n            ['name' => 'Sao Mateus', 'country_code' => 'BR'],\n            ['name' => 'South Shields', 'country_code' => 'GB'],\n            ['name' => 'Paisley', 'country_code' => 'GB'],\n            ['name' => 'Weston-super-Mare', 'country_code' => 'GB'],\n            ['name' => 'Goiana', 'country_code' => 'BR'],\n            ['name' => 'Bilecik', 'country_code' => 'TR'],\n            ['name' => 'Juchitan de Zaragoza', 'country_code' => 'MX'],\n            ['name' => 'Buena Park', 'country_code' => 'US'],\n            ['name' => 'Silver Spring', 'country_code' => 'US'],\n            ['name' => 'Palmerston North', 'country_code' => 'NZ'],\n            ['name' => 'Daugavpils', 'country_code' => 'LV'],\n            ['name' => 'Cinisello Balsamo', 'country_code' => 'IT'],\n            ['name' => 'Huolu', 'country_code' => 'CN'],\n            ['name' => 'Saint-Maur-des-Fosses', 'country_code' => 'FR'],\n            ['name' => 'Hakkari', 'country_code' => 'TR'],\n            ['name' => 'Somerville', 'country_code' => 'US'],\n            ['name' => 'Chalandri', 'country_code' => 'GR'],\n            ['name' => 'Bury', 'country_code' => 'GB'],\n            ['name' => 'Tres Lagoas', 'country_code' => 'BR'],\n            ['name' => 'Gravesend', 'country_code' => 'GB'],\n            ['name' => 'Deerfield Beach', 'country_code' => 'US'],\n            ['name' => 'Targoviste', 'country_code' => 'RO'],\n            ['name' => 'Rubi', 'country_code' => 'ES'],\n            ['name' => 'Galway', 'country_code' => 'IE'],\n            ['name' => 'Natitingou', 'country_code' => 'BJ'],\n            ['name' => 'Fnidq', 'country_code' => 'MA'],\n            ['name' => 'Paysandu', 'country_code' => 'UY'],\n            ['name' => 'Cicero', 'country_code' => 'US'],\n            ['name' => 'Atakpame', 'country_code' => 'TG'],\n            ['name' => 'Focsani', 'country_code' => 'RO'],\n            ['name' => 'Aviles', 'country_code' => 'ES'],\n            ['name' => 'Drancy', 'country_code' => 'FR'],\n            ['name' => 'Iguatu', 'country_code' => 'BR'],\n            ['name' => 'Alabel', 'country_code' => 'PH'],\n            ['name' => 'Le Kram', 'country_code' => 'TN'],\n            ['name' => 'Zuwarah', 'country_code' => 'LY'],\n            ['name' => 'Shancheng', 'country_code' => 'CN'],\n            ['name' => 'Sidi Qacem', 'country_code' => 'MA'],\n            ['name' => 'Chiquimula', 'country_code' => 'GT'],\n            ['name' => 'Puerto Ayacucho', 'country_code' => 'VE'],\n            ['name' => 'Lawrence', 'country_code' => 'US'],\n            ['name' => 'Ouahigouya', 'country_code' => 'BF'],\n            ['name' => 'Mahdia', 'country_code' => 'TN'],\n            ['name' => 'Nakhon Pathom', 'country_code' => 'TH'],\n            ['name' => 'Lowestoft', 'country_code' => 'GB'],\n            ['name' => 'Pau', 'country_code' => 'FR'],\n            ['name' => 'Tejupilco', 'country_code' => 'MX'],\n            ['name' => 'Cheyenne', 'country_code' => 'US'],\n            ['name' => 'Ubon Ratchathani', 'country_code' => 'TH'],\n            ['name' => 'Tustin', 'country_code' => 'US'],\n            ['name' => 'Lakewood', 'country_code' => 'US'],\n            ['name' => 'Carlisle', 'country_code' => 'GB'],\n            ['name' => 'Lisala', 'country_code' => 'CD'],\n            ['name' => 'Szombathely', 'country_code' => 'HU'],\n            ['name' => 'Banska Bystrica', 'country_code' => 'SK'],\n            ['name' => 'Pine Hills', 'country_code' => 'US'],\n            ['name' => 'Ra ananna', 'country_code' => 'IL'],\n            ['name' => 'Harrogate', 'country_code' => 'GB'],\n            ['name' => 'Aveiro', 'country_code' => 'PT'],\n            ['name' => 'Tambacounda', 'country_code' => 'SN'],\n            ['name' => 'Newcastle under Lyme', 'country_code' => 'GB'],\n            ['name' => 'New Rochelle', 'country_code' => 'US'],\n            ['name' => 'Kensington', 'country_code' => 'GB'],\n            ['name' => 'La Rochelle', 'country_code' => 'FR'],\n            ['name' => 'Aregua', 'country_code' => 'PY'],\n            ['name' => 'Lebanon', 'country_code' => 'US'],\n            ['name' => 'East Kilbride', 'country_code' => 'GB'],\n            ['name' => 'Wa', 'country_code' => 'GH'],\n            ['name' => 'Nitra', 'country_code' => 'SK'],\n            ['name' => 'Lomas del Mirador', 'country_code' => 'AR'],\n            ['name' => 'Lelystad', 'country_code' => 'NL'],\n            ['name' => 'Maghaghah', 'country_code' => 'EG'],\n            ['name' => 'Mpanda', 'country_code' => 'TZ'],\n            ['name' => 'Gladbeck', 'country_code' => 'DE'],\n            ['name' => 'Sankt Gallen', 'country_code' => 'CH'],\n            ['name' => 'Cannes', 'country_code' => 'FR'],\n            ['name' => 'Alameda', 'country_code' => 'US'],\n            ['name' => 'Thornton Heath', 'country_code' => 'GB'],\n            ['name' => 'Watsonville', 'country_code' => 'US'],\n            ['name' => 'Taluqan', 'country_code' => 'AF'],\n            ['name' => 'Jinja', 'country_code' => 'UG'],\n            ['name' => 'Davis', 'country_code' => 'US'],\n            ['name' => 'Berberati', 'country_code' => 'CF'],\n            ['name' => 'Esbjerg', 'country_code' => 'DK'],\n            ['name' => 'Zrenjanin', 'country_code' => 'RS'],\n            ['name' => 'San Felipe', 'country_code' => 'VE'],\n            ['name' => 'Las Piedras', 'country_code' => 'UY'],\n            ['name' => 'Surt', 'country_code' => 'LY'],\n            ['name' => 'Tamazunchale', 'country_code' => 'MX'],\n            ['name' => 'Moulay Abdallah', 'country_code' => 'MA'],\n            ['name' => 'Pancevo', 'country_code' => 'RS'],\n            ['name' => 'Abeche', 'country_code' => 'TD'],\n            ['name' => 'Balagtas', 'country_code' => 'PH'],\n            ['name' => 'Palaio Faliro', 'country_code' => 'GR'],\n            ['name' => 'Bellflower', 'country_code' => 'US'],\n            ['name' => 'Jacona de Plancarte', 'country_code' => 'MX'],\n            ['name' => 'Ashford', 'country_code' => 'GB'],\n            ['name' => 'Bokhtar', 'country_code' => 'TJ'],\n            ['name' => 'Chiryu', 'country_code' => 'JP'],\n            ['name' => 'Nek emte', 'country_code' => 'ET'],\n            ['name' => 'Calais', 'country_code' => 'FR'],\n            ['name' => 'Tamanrasset', 'country_code' => 'DZ'],\n            ['name' => 'Ramla', 'country_code' => 'IL'],\n            ['name' => 'Montrouge', 'country_code' => 'FR'],\n            ['name' => 'Zadar', 'country_code' => 'HR'],\n            ['name' => 'Southall', 'country_code' => 'GB'],\n            ['name' => 'Guamuchil', 'country_code' => 'MX'],\n            ['name' => 'Musashimurayama', 'country_code' => 'JP'],\n            ['name' => 'Quang Tri', 'country_code' => 'VN'],\n            ['name' => 'Antibes', 'country_code' => 'FR'],\n            ['name' => 'Mineiros', 'country_code' => 'BR'],\n            ['name' => 'Bistrita', 'country_code' => 'RO'],\n            ['name' => 'Tissemsilt', 'country_code' => 'DZ'],\n            ['name' => 'Joensuu', 'country_code' => 'FI'],\n            ['name' => 'Bella Vista', 'country_code' => 'AR'],\n            ['name' => 'Rugby', 'country_code' => 'GB'],\n            ['name' => 'Darhan', 'country_code' => 'MN'],\n            ['name' => 'Guasave', 'country_code' => 'MX'],\n            ['name' => 'Teyateyaneng', 'country_code' => 'LS'],\n            ['name' => 'Burton upon Trent', 'country_code' => 'GB'],\n            ['name' => 'Gouda', 'country_code' => 'NL'],\n            ['name' => 'Karlstad', 'country_code' => 'SE'],\n            ['name' => 'Uxbridge', 'country_code' => 'GB'],\n            ['name' => 'Zacatecoluca', 'country_code' => 'SV'],\n            ['name' => 'Baldwin Park', 'country_code' => 'US'],\n            ['name' => 'Zlin', 'country_code' => 'CZ'],\n            ['name' => 'Spijkenisse', 'country_code' => 'NL'],\n            ['name' => 'Rioverde', 'country_code' => 'MX'],\n            ['name' => 'Prey Veng', 'country_code' => 'KH'],\n            ['name' => 'Ipil', 'country_code' => 'PH'],\n            ['name' => 'Inowroclaw', 'country_code' => 'PL'],\n            ['name' => 'Jinsha', 'country_code' => 'CN'],\n            ['name' => 'Crewe', 'country_code' => 'GB'],\n            ['name' => 'Matehuala', 'country_code' => 'MX'],\n            ['name' => 'Bitola', 'country_code' => 'MK'],\n            ['name' => 'San Andres', 'country_code' => 'CO'],\n            ['name' => 'Garissa', 'country_code' => 'KE'],\n            ['name' => 'Longkoucun', 'country_code' => 'CN'],\n            ['name' => 'Manokwari', 'country_code' => 'ID'],\n            ['name' => 'Hekinan', 'country_code' => 'JP'],\n            ['name' => 'Masvingo', 'country_code' => 'ZW'],\n            ['name' => 'Vincennes', 'country_code' => 'FR'],\n            ['name' => 'Yoshikawa', 'country_code' => 'JP'],\n            ['name' => 'Assab', 'country_code' => 'ER'],\n            ['name' => 'Gosport', 'country_code' => 'GB'],\n            ['name' => 'Wandsworth', 'country_code' => 'GB'],\n            ['name' => 'Cuscatancingo', 'country_code' => 'SV'],\n            ['name' => 'Salima', 'country_code' => 'MW'],\n            ['name' => 'Nabeul', 'country_code' => 'TN'],\n            ['name' => 'Virac', 'country_code' => 'PH'],\n            ['name' => 'Centreville', 'country_code' => 'US'],\n            ['name' => 'Birobidzhan', 'country_code' => 'RU'],\n            ['name' => 'Tsurugashima', 'country_code' => 'JP'],\n            ['name' => 'Cabadbaran', 'country_code' => 'PH'],\n            ['name' => 'Kirtipur', 'country_code' => 'NP'],\n            ['name' => 'Irece', 'country_code' => 'BR'],\n            ['name' => 'El Kef', 'country_code' => 'TN'],\n            ['name' => 'Frontera', 'country_code' => 'MX'],\n            ['name' => 'Neuilly-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Farah', 'country_code' => 'AF'],\n            ['name' => 'Warzat', 'country_code' => 'MA'],\n            ['name' => 'Finchley', 'country_code' => 'GB'],\n            ['name' => 'Camden', 'country_code' => 'US'],\n            ['name' => 'Galatsi', 'country_code' => 'GR'],\n            ['name' => 'Evanston', 'country_code' => 'US'],\n            ['name' => 'Noisy-le-Grand', 'country_code' => 'FR'],\n            ['name' => 'Skien', 'country_code' => 'NO'],\n            ['name' => 'Caguas', 'country_code' => 'PR'],\n            ['name' => 'Yawata-shimizui', 'country_code' => 'JP'],\n            ['name' => 'Debre Mark os', 'country_code' => 'ET'],\n            ['name' => 'Dabou', 'country_code' => 'CI'],\n            ['name' => 'Sa dah', 'country_code' => 'YE'],\n            ['name' => 'Feltham', 'country_code' => 'GB'],\n            ['name' => 'San Antonio', 'country_code' => 'PY'],\n            ['name' => 'Lappeenranta', 'country_code' => 'FI'],\n            ['name' => 'Thohoyandou', 'country_code' => 'ZA'],\n            ['name' => 'Castelldefels', 'country_code' => 'ES'],\n            ['name' => 'Torremolinos', 'country_code' => 'ES'],\n            ['name' => 'Chingford', 'country_code' => 'GB'],\n            ['name' => 'New Britain', 'country_code' => 'US'],\n            ['name' => 'Arba Minch ', 'country_code' => 'ET'],\n            ['name' => 'Abancay', 'country_code' => 'PE'],\n            ['name' => 'Ivry-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Toyoake', 'country_code' => 'JP'],\n            ['name' => 'Havirov', 'country_code' => 'CZ'],\n            ['name' => 'Veliko Tarnovo', 'country_code' => 'BG'],\n            ['name' => 'Inverness', 'country_code' => 'GB'],\n            ['name' => 'Wilde', 'country_code' => 'AR'],\n            ['name' => 'Pawtucket', 'country_code' => 'US'],\n            ['name' => 'Cacak', 'country_code' => 'RS'],\n            ['name' => 'Karakax', 'country_code' => 'CN'],\n            ['name' => 'La Chorrera', 'country_code' => 'PA'],\n            ['name' => 'Washington', 'country_code' => 'GB'],\n            ['name' => 'Lauderhill', 'country_code' => 'US'],\n            ['name' => 'Balsas', 'country_code' => 'BR'],\n            ['name' => 'Matara', 'country_code' => 'LK'],\n            ['name' => 'Benalmadena', 'country_code' => 'ES'],\n            ['name' => 'Al Qusiyah', 'country_code' => 'EG'],\n            ['name' => 'Zaandam', 'country_code' => 'NL'],\n            ['name' => 'Szolnok', 'country_code' => 'HU'],\n            ['name' => 'Mamou', 'country_code' => 'GN'],\n            ['name' => 'Slatina', 'country_code' => 'RO'],\n            ['name' => 'Youssoufia', 'country_code' => 'MA'],\n            ['name' => 'Bitlis', 'country_code' => 'TR'],\n            ['name' => 'Ajaccio', 'country_code' => 'FR'],\n            ['name' => 'Maidenhead', 'country_code' => 'GB'],\n            ['name' => 'Kasese', 'country_code' => 'UG'],\n            ['name' => 'Phitsanulok', 'country_code' => 'TH'],\n            ['name' => 'Hatogaya-honcho', 'country_code' => 'JP'],\n            ['name' => 'Misantla', 'country_code' => 'MX'],\n            ['name' => 'Zinjibar', 'country_code' => 'YE'],\n            ['name' => 'Courcouronnes', 'country_code' => 'FR'],\n            ['name' => 'New Westminster', 'country_code' => 'CA'],\n            ['name' => 'Kumanovo', 'country_code' => 'MK'],\n            ['name' => 'Givatayim', 'country_code' => 'IL'],\n            ['name' => 'Valle Hermoso', 'country_code' => 'MX'],\n            ['name' => 'Jiquilpan de Juarez', 'country_code' => 'MX'],\n            ['name' => 'Cergy', 'country_code' => 'FR'],\n            ['name' => 'Capelle aan den IJssel', 'country_code' => 'NL'],\n            ['name' => 'Mindelo', 'country_code' => 'CV'],\n            ['name' => 'Chiang Rai', 'country_code' => 'TH'],\n            ['name' => 'Ain Harrouda', 'country_code' => 'MA'],\n            ['name' => 'Aksum', 'country_code' => 'ET'],\n            ['name' => 'Wimbledon', 'country_code' => 'GB'],\n            ['name' => 'Sunyani', 'country_code' => 'GH'],\n            ['name' => 'Viladecans', 'country_code' => 'ES'],\n            ['name' => 'Loughborough', 'country_code' => 'GB'],\n            ['name' => 'Abnub', 'country_code' => 'EG'],\n            ['name' => 'Colonia del Sol', 'country_code' => 'MX'],\n            ['name' => 'Venissieux', 'country_code' => 'FR'],\n            ['name' => 'Sagaing', 'country_code' => 'MM'],\n            ['name' => 'Wilmington', 'country_code' => 'US'],\n            ['name' => 'Gardez', 'country_code' => 'AF'],\n            ['name' => 'Thakhek', 'country_code' => 'LA'],\n            ['name' => 'Nizwa', 'country_code' => 'OM'],\n            ['name' => 'Tynemouth', 'country_code' => 'GB'],\n            ['name' => 'Vushtrri', 'country_code' => 'XK'],\n            ['name' => 'Walsall', 'country_code' => 'GB'],\n            ['name' => 'Moquegua', 'country_code' => 'PE'],\n            ['name' => 'Itapeva', 'country_code' => 'BR'],\n            ['name' => 'Lynwood', 'country_code' => 'US'],\n            ['name' => 'Jinxing', 'country_code' => 'CN'],\n            ['name' => 'Rochester', 'country_code' => 'GB'],\n            ['name' => 'Georgiyevsk', 'country_code' => 'RU'],\n            ['name' => 'Passaic', 'country_code' => 'US'],\n            ['name' => 'Valenca', 'country_code' => 'BR'],\n            ['name' => 'Castellammare di Stabia', 'country_code' => 'IT'],\n            ['name' => 'Huatusco', 'country_code' => 'MX'],\n            ['name' => 'Vratsa', 'country_code' => 'BG'],\n            ['name' => 'L Aquila', 'country_code' => 'IT'],\n            ['name' => 'Debre Birhan', 'country_code' => 'ET'],\n            ['name' => 'Borongan', 'country_code' => 'PH'],\n            ['name' => 'Putrajaya', 'country_code' => 'MY'],\n            ['name' => 'Liepaja', 'country_code' => 'LV'],\n            ['name' => 'Acton', 'country_code' => 'GB'],\n            ['name' => 'Pantin', 'country_code' => 'FR'],\n            ['name' => 'Antony', 'country_code' => 'FR'],\n            ['name' => 'Bouira', 'country_code' => 'DZ'],\n            ['name' => 'Veenendaal', 'country_code' => 'NL'],\n            ['name' => 'Mitcham', 'country_code' => 'GB'],\n            ['name' => 'San Jose del Guaviare', 'country_code' => 'CO'],\n            ['name' => 'Ponta Delgada', 'country_code' => 'PT'],\n            ['name' => 'Gavle', 'country_code' => 'SE'],\n            ['name' => 'Wrecsam', 'country_code' => 'GB'],\n            ['name' => 'Villa Dominico', 'country_code' => 'AR'],\n            ['name' => 'Kitamoto', 'country_code' => 'JP'],\n            ['name' => 'Afragola', 'country_code' => 'IT'],\n            ['name' => 'Saki', 'country_code' => 'AZ'],\n            ['name' => 'Zamosc', 'country_code' => 'PL'],\n            ['name' => 'Adrar', 'country_code' => 'DZ'],\n            ['name' => 'Waterlooville', 'country_code' => 'GB'],\n            ['name' => 'Tomigusuku', 'country_code' => 'JP'],\n            ['name' => 'Buynaksk', 'country_code' => 'RU'],\n            ['name' => 'Hameenlinna', 'country_code' => 'FI'],\n            ['name' => 'Guaynabo', 'country_code' => 'PR'],\n            ['name' => 'Gaithersburg', 'country_code' => 'US'],\n            ['name' => 'Union City', 'country_code' => 'US'],\n            ['name' => 'Vyronas', 'country_code' => 'GR'],\n            ['name' => 'Scarborough', 'country_code' => 'GB'],\n            ['name' => 'Cacador', 'country_code' => 'BR'],\n            ['name' => 'South San Francisco', 'country_code' => 'US'],\n            ['name' => 'Timbauba', 'country_code' => 'BR'],\n            ['name' => 'Curvelo', 'country_code' => 'BR'],\n            ['name' => 'Manacapuru', 'country_code' => 'BR'],\n            ['name' => 'Cabedelo', 'country_code' => 'BR'],\n            ['name' => 'Tecate', 'country_code' => 'MX'],\n            ['name' => 'Lao Cai', 'country_code' => 'VN'],\n            ['name' => 'Farnborough', 'country_code' => 'GB'],\n            ['name' => 'Vaasa', 'country_code' => 'FI'],\n            ['name' => 'Molepolole', 'country_code' => 'BW'],\n            ['name' => 'Potenza', 'country_code' => 'IT'],\n            ['name' => 'San Marcos', 'country_code' => 'SV'],\n            ['name' => 'Dimbokro', 'country_code' => 'CI'],\n            ['name' => 'Arrecife', 'country_code' => 'ES'],\n            ['name' => 'El Prat de Llobregat', 'country_code' => 'ES'],\n            ['name' => 'Katwijk', 'country_code' => 'NL'],\n            ['name' => 'Valle de Bravo', 'country_code' => 'MX'],\n            ['name' => 'Mount Vernon', 'country_code' => 'US'],\n            ['name' => 'Amozoc', 'country_code' => 'MX'],\n            ['name' => 'Twickenham', 'country_code' => 'GB'],\n            ['name' => 'Stourbridge', 'country_code' => 'GB'],\n            ['name' => 'Fryazino', 'country_code' => 'RU'],\n            ['name' => 'Linares', 'country_code' => 'MX'],\n            ['name' => 'Streatham', 'country_code' => 'GB'],\n            ['name' => 'Barking', 'country_code' => 'GB'],\n            ['name' => 'Epinay-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Bolgatanga', 'country_code' => 'GH'],\n            ['name' => 'Sabinas', 'country_code' => 'MX'],\n            ['name' => 'Lechang', 'country_code' => 'CN'],\n            ['name' => 'Teoloyucan', 'country_code' => 'MX'],\n            ['name' => 'Sokhumi', 'country_code' => 'GE'],\n            ['name' => 'Collado-Villalba', 'country_code' => 'ES'],\n            ['name' => 'La Seyne-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Agia Paraskevi', 'country_code' => 'GR'],\n            ['name' => 'Redondo Beach', 'country_code' => 'US'],\n            ['name' => 'Kraljevo', 'country_code' => 'RS'],\n            ['name' => 'Tamarac', 'country_code' => 'US'],\n            ['name' => 'Novi Pazar', 'country_code' => 'RS'],\n            ['name' => 'Bayburt', 'country_code' => 'TR'],\n            ['name' => 'M diq', 'country_code' => 'MA'],\n            ['name' => 'Nalut', 'country_code' => 'LY'],\n            ['name' => 'Granollers', 'country_code' => 'ES'],\n            ['name' => 'Zacapa', 'country_code' => 'GT'],\n            ['name' => 'Tatabanya', 'country_code' => 'HU'],\n            ['name' => 'Acambaro', 'country_code' => 'MX'],\n            ['name' => 'Troyes', 'country_code' => 'FR'],\n            ['name' => 'Prilep', 'country_code' => 'MK'],\n            ['name' => 'Trnava', 'country_code' => 'SK'],\n            ['name' => 'Los Polvorines', 'country_code' => 'AR'],\n            ['name' => 'Kardzhali', 'country_code' => 'BG'],\n            ['name' => 'Goz-Beida', 'country_code' => 'TD'],\n            ['name' => 'San Marcos', 'country_code' => 'GT'],\n            ['name' => 'Maisons-Alfort', 'country_code' => 'FR'],\n            ['name' => 'La Linea de la Concepcion', 'country_code' => 'ES'],\n            ['name' => 'Masaka', 'country_code' => 'UG'],\n            ['name' => 'Singida', 'country_code' => 'TZ'],\n            ['name' => 'Dewsbury', 'country_code' => 'GB'],\n            ['name' => 'Ioannina', 'country_code' => 'GR'],\n            ['name' => 'Florence-Graham', 'country_code' => 'US'],\n            ['name' => 'Calarasi', 'country_code' => 'RO'],\n            ['name' => 'Forest', 'country_code' => 'BE'],\n            ['name' => 'Sarcelles', 'country_code' => 'FR'],\n            ['name' => 'Nieuwegein', 'country_code' => 'NL'],\n            ['name' => 'Altamira', 'country_code' => 'MX'],\n            ['name' => 'Widnes', 'country_code' => 'GB'],\n            ['name' => 'Schenectady', 'country_code' => 'US'],\n            ['name' => 'Cortazar', 'country_code' => 'MX'],\n            ['name' => 'Rundu', 'country_code' => 'NA'],\n            ['name' => 'Portici', 'country_code' => 'IT'],\n            ['name' => 'Tago', 'country_code' => 'JP'],\n            ['name' => 'Songkhla', 'country_code' => 'TH'],\n            ['name' => 'Solwezi', 'country_code' => 'ZM'],\n            ['name' => 'Villejuif', 'country_code' => 'FR'],\n            ['name' => 'Kitale', 'country_code' => 'KE'],\n            ['name' => 'As Suwayda ', 'country_code' => 'SY'],\n            ['name' => 'Ouezzane', 'country_code' => 'MA'],\n            ['name' => 'Elk', 'country_code' => 'PL'],\n            ['name' => 'Euclides da Cunha', 'country_code' => 'BR'],\n            ['name' => 'Bayonne', 'country_code' => 'US'],\n            ['name' => 'Faro', 'country_code' => 'PT'],\n            ['name' => 'Faizabad', 'country_code' => 'AF'],\n            ['name' => 'Sinop', 'country_code' => 'TR'],\n            ['name' => 'Solola', 'country_code' => 'GT'],\n            ['name' => 'Yoro', 'country_code' => 'HN'],\n            ['name' => 'Pruszkow', 'country_code' => 'PL'],\n            ['name' => 'Cosamaloapan', 'country_code' => 'MX'],\n            ['name' => 'East Orange', 'country_code' => 'US'],\n            ['name' => 'Etterbeek', 'country_code' => 'BE'],\n            ['name' => 'Nagari', 'country_code' => 'IN'],\n            ['name' => 'Inhambane', 'country_code' => 'MZ'],\n            ['name' => 'Taunton', 'country_code' => 'GB'],\n            ['name' => 'Bangor', 'country_code' => 'GB'],\n            ['name' => 'Alba Iulia', 'country_code' => 'RO'],\n            ['name' => 'Pirapora', 'country_code' => 'BR'],\n            ['name' => 'Aylesbury', 'country_code' => 'GB'],\n            ['name' => 'Sombrerete', 'country_code' => 'MX'],\n            ['name' => 'Latacunga', 'country_code' => 'EC'],\n            ['name' => 'Manouba', 'country_code' => 'TN'],\n            ['name' => 'Le Blanc-Mesnil', 'country_code' => 'FR'],\n            ['name' => 'Gorno-Altaysk', 'country_code' => 'RU'],\n            ['name' => 'Braganca', 'country_code' => 'BR'],\n            ['name' => 'San Jose', 'country_code' => 'PH'],\n            ['name' => 'Hasuda', 'country_code' => 'JP'],\n            ['name' => 'Sao Borja', 'country_code' => 'BR'],\n            ['name' => 'Halesowen', 'country_code' => 'GB'],\n            ['name' => 'Marano di Napoli', 'country_code' => 'IT'],\n            ['name' => 'Legnano', 'country_code' => 'IT'],\n            ['name' => 'Nkhotakota', 'country_code' => 'MW'],\n            ['name' => 'Mukocho', 'country_code' => 'JP'],\n            ['name' => 'Kyustendil', 'country_code' => 'BG'],\n            ['name' => 'Brentwood', 'country_code' => 'US'],\n            ['name' => 'Rades', 'country_code' => 'TN'],\n            ['name' => 'Karakol', 'country_code' => 'KG'],\n            ['name' => 'Tsushima', 'country_code' => 'JP'],\n            ['name' => 'Canela', 'country_code' => 'BR'],\n            ['name' => 'Cherbourg', 'country_code' => 'FR'],\n            ['name' => 'Ruislip', 'country_code' => 'GB'],\n            ['name' => 'Bondy', 'country_code' => 'FR'],\n            ['name' => 'Anuradhapura', 'country_code' => 'LK'],\n            ['name' => 'Gabrovo', 'country_code' => 'BG'],\n            ['name' => 'Poblacion', 'country_code' => 'PH'],\n            ['name' => 'Kratie', 'country_code' => 'KH'],\n            ['name' => 'Assen', 'country_code' => 'NL'],\n            ['name' => 'Beledweyne', 'country_code' => 'SO'],\n            ['name' => 'Royal Tunbridge Wells', 'country_code' => 'GB'],\n            ['name' => 'Jette', 'country_code' => 'BE'],\n            ['name' => 'Saint-Ouen', 'country_code' => 'FR'],\n            ['name' => 'Khartsyzk', 'country_code' => 'UA'],\n            ['name' => 'Wallasey', 'country_code' => 'GB'],\n            ['name' => 'Barrow in Furness', 'country_code' => 'GB'],\n            ['name' => 'Stryi', 'country_code' => 'UA'],\n            ['name' => 'Sopron', 'country_code' => 'HU'],\n            ['name' => 'North Miami', 'country_code' => 'US'],\n            ['name' => 'Maldonado', 'country_code' => 'UY'],\n            ['name' => 'Skokie', 'country_code' => 'US'],\n            ['name' => 'Leskovac', 'country_code' => 'RS'],\n            ['name' => 'Santa Rosa', 'country_code' => 'BR'],\n            ['name' => 'Saraburi', 'country_code' => 'TH'],\n            ['name' => 'Rayong', 'country_code' => 'TH'],\n            ['name' => 'Ban Bang Kaeo', 'country_code' => 'TH'],\n            ['name' => 'Kolda', 'country_code' => 'SN'],\n            ['name' => 'Santarem', 'country_code' => 'PT'],\n            ['name' => 'Fontenay-sous-Bois', 'country_code' => 'FR'],\n            ['name' => 'Suresnes', 'country_code' => 'FR'],\n            ['name' => 'Fussa', 'country_code' => 'JP'],\n            ['name' => 'Napier', 'country_code' => 'NZ'],\n            ['name' => 'Chornomorsk', 'country_code' => 'UA'],\n            ['name' => 'Puerto Limon', 'country_code' => 'CR'],\n            ['name' => 'Madang', 'country_code' => 'PG'],\n            ['name' => 'Lytkarino', 'country_code' => 'RU'],\n            ['name' => 'Rafael Calzada', 'country_code' => 'AR'],\n            ['name' => 'Pico Rivera', 'country_code' => 'US'],\n            ['name' => 'Kaposvar', 'country_code' => 'HU'],\n            ['name' => 'Bayombong', 'country_code' => 'PH'],\n            ['name' => 'Montebello', 'country_code' => 'US'],\n            ['name' => 'Bamyan', 'country_code' => 'AF'],\n            ['name' => 'Ban Rangsit', 'country_code' => 'TH'],\n            ['name' => 'Portugalete', 'country_code' => 'ES'],\n            ['name' => 'Rovaniemi', 'country_code' => 'FI'],\n            ['name' => 'Yala', 'country_code' => 'TH'],\n            ['name' => 'Giurgiu', 'country_code' => 'RO'],\n            ['name' => 'Chambery', 'country_code' => 'FR'],\n            ['name' => 'Samut Sakhon', 'country_code' => 'TH'],\n            ['name' => 'Bobigny', 'country_code' => 'FR'],\n            ['name' => 'Janauba', 'country_code' => 'BR'],\n            ['name' => 'North Bergen', 'country_code' => 'US'],\n            ['name' => 'Seinajoki', 'country_code' => 'FI'],\n            ['name' => 'The Hammocks', 'country_code' => 'US'],\n            ['name' => 'Ruhengeri', 'country_code' => 'RW'],\n            ['name' => 'Suileng', 'country_code' => 'CN'],\n            ['name' => 'National City', 'country_code' => 'US'],\n            ['name' => 'Benslimane', 'country_code' => 'MA'],\n            ['name' => 'Koja', 'country_code' => 'JP'],\n            ['name' => 'Coconut Creek', 'country_code' => 'US'],\n            ['name' => 'Ben Tre', 'country_code' => 'VN'],\n            ['name' => 'Coyhaique', 'country_code' => 'CL'],\n            ['name' => 'Gaalkacyo', 'country_code' => 'SO'],\n            ['name' => 'Hunedoara', 'country_code' => 'RO'],\n            ['name' => 'Limerick', 'country_code' => 'IE'],\n            ['name' => 'Longxing', 'country_code' => 'CN'],\n            ['name' => 'Trang', 'country_code' => 'TH'],\n            ['name' => 'Teresa', 'country_code' => 'PH'],\n            ['name' => 'Melo', 'country_code' => 'UY'],\n            ['name' => 'Oyem', 'country_code' => 'GA'],\n            ['name' => 'Lokoja', 'country_code' => 'NG'],\n            ['name' => 'Juigalpa', 'country_code' => 'NI'],\n            ['name' => 'Fountainebleau', 'country_code' => 'US'],\n            ['name' => 'Vaxjo', 'country_code' => 'SE'],\n            ['name' => 'La Habra', 'country_code' => 'US'],\n            ['name' => 'Malden', 'country_code' => 'US'],\n            ['name' => 'Banfora', 'country_code' => 'BF'],\n            ['name' => 'San Pedro', 'country_code' => 'MX'],\n            ['name' => 'Lorient', 'country_code' => 'FR'],\n            ['name' => 'Swidnica', 'country_code' => 'PL'],\n            ['name' => 'Sidi Bennour', 'country_code' => 'MA'],\n            ['name' => 'South Whittier', 'country_code' => 'US'],\n            ['name' => 'Zushi', 'country_code' => 'JP'],\n            ['name' => 'Temascalcingo', 'country_code' => 'MX'],\n            ['name' => 'Hereford', 'country_code' => 'GB'],\n            ['name' => 'Mbanza Kongo', 'country_code' => 'AO'],\n            ['name' => 'Veszprem', 'country_code' => 'HU'],\n            ['name' => 'Ellesmere Port', 'country_code' => 'GB'],\n            ['name' => 'Serrinha', 'country_code' => 'BR'],\n            ['name' => 'Caridad', 'country_code' => 'PH'],\n            ['name' => 'Evry', 'country_code' => 'FR'],\n            ['name' => 'Tezonapa', 'country_code' => 'MX'],\n            ['name' => 'Mislata', 'country_code' => 'ES'],\n            ['name' => 'Etchojoa', 'country_code' => 'MX'],\n            ['name' => 'West Allis', 'country_code' => 'US'],\n            ['name' => 'Uzice', 'country_code' => 'RS'],\n            ['name' => 'Taylorsville', 'country_code' => 'US'],\n            ['name' => 'Itanagar', 'country_code' => 'IN'],\n            ['name' => 'Romita', 'country_code' => 'MX'],\n            ['name' => 'Antigua Guatemala', 'country_code' => 'GT'],\n            ['name' => 'Suhareke', 'country_code' => 'XK'],\n            ['name' => 'Klimovsk', 'country_code' => 'RU'],\n            ['name' => 'Bungoma', 'country_code' => 'KE'],\n            ['name' => 'San Jose Iturbide', 'country_code' => 'MX'],\n            ['name' => 'Monterey Park', 'country_code' => 'US'],\n            ['name' => 'Merida', 'country_code' => 'ES'],\n            ['name' => 'Hod HaSharon', 'country_code' => 'IL'],\n            ['name' => 'Puteaux', 'country_code' => 'FR'],\n            ['name' => 'Rodos', 'country_code' => 'GR'],\n            ['name' => 'Formiga', 'country_code' => 'BR'],\n            ['name' => 'Al Hoceima', 'country_code' => 'MA'],\n            ['name' => 'Actopan', 'country_code' => 'MX'],\n            ['name' => 'Samannud', 'country_code' => 'EG'],\n            ['name' => 'Hamura', 'country_code' => 'JP'],\n            ['name' => 'Midalt', 'country_code' => 'MA'],\n            ['name' => 'Gardena', 'country_code' => 'US'],\n            ['name' => 'Bekescsaba', 'country_code' => 'HU'],\n            ['name' => 'Azrou', 'country_code' => 'MA'],\n            ['name' => 'Cupertino', 'country_code' => 'US'],\n            ['name' => 'La Mesa', 'country_code' => 'US'],\n            ['name' => 'Dzerzhinskiy', 'country_code' => 'RU'],\n            ['name' => 'Artemisa', 'country_code' => 'CU'],\n            ['name' => 'San Buenaventura', 'country_code' => 'MX'],\n            ['name' => 'Brookline', 'country_code' => 'US'],\n            ['name' => 'Kitgum', 'country_code' => 'UG'],\n            ['name' => 'Yevlax', 'country_code' => 'AZ'],\n            ['name' => 'Viedma', 'country_code' => 'AR'],\n            ['name' => 'Cerro de Pasco', 'country_code' => 'PE'],\n            ['name' => 'Kabinda', 'country_code' => 'CD'],\n            ['name' => 'Braintree', 'country_code' => 'GB'],\n            ['name' => 'Tacuarembo', 'country_code' => 'UY'],\n            ['name' => 'Clamart', 'country_code' => 'FR'],\n            ['name' => 'Liuhu', 'country_code' => 'CN'],\n            ['name' => 'Krusevac', 'country_code' => 'RS'],\n            ['name' => 'Margate', 'country_code' => 'US'],\n            ['name' => 'Qiryat Ata', 'country_code' => 'IL'],\n            ['name' => 'Aversa', 'country_code' => 'IT'],\n            ['name' => 'Carson City', 'country_code' => 'US'],\n            ['name' => 'Meaux', 'country_code' => 'FR'],\n            ['name' => 'Mandapeta', 'country_code' => 'IN'],\n            ['name' => 'Evora', 'country_code' => 'PT'],\n            ['name' => 'Barlad', 'country_code' => 'RO'],\n            ['name' => 'Port Coquitlam', 'country_code' => 'CA'],\n            ['name' => 'Rosh Ha Ayin', 'country_code' => 'IL'],\n            ['name' => 'Middletown', 'country_code' => 'US'],\n            ['name' => 'Bondoukou', 'country_code' => 'CI'],\n            ['name' => 'San Fernando', 'country_code' => 'TT'],\n            ['name' => 'Chelles', 'country_code' => 'FR'],\n            ['name' => 'Novohrad-Volynskyi', 'country_code' => 'UA'],\n            ['name' => 'Union', 'country_code' => 'US'],\n            ['name' => 'Huamantla', 'country_code' => 'MX'],\n            ['name' => 'Sabaneta', 'country_code' => 'CO'],\n            ['name' => 'Sartrouville', 'country_code' => 'FR'],\n            ['name' => 'Vidin', 'country_code' => 'BG'],\n            ['name' => 'White Plains', 'country_code' => 'US'],\n            ['name' => 'Sevran', 'country_code' => 'FR'],\n            ['name' => 'Huehuetenango', 'country_code' => 'GT'],\n            ['name' => 'Jefferson City', 'country_code' => 'US'],\n            ['name' => 'Zalaegerszeg', 'country_code' => 'HU'],\n            ['name' => 'Hendon', 'country_code' => 'GB'],\n            ['name' => 'Arcadia', 'country_code' => 'US'],\n            ['name' => 'Hilden', 'country_code' => 'DE'],\n            ['name' => 'Slavonski Brod', 'country_code' => 'HR'],\n            ['name' => 'Legionowo', 'country_code' => 'PL'],\n            ['name' => 'Magong', 'country_code' => 'TW'],\n            ['name' => 'Umm el Fahm', 'country_code' => 'IL'],\n            ['name' => 'Alfortville', 'country_code' => 'FR'],\n            ['name' => 'Samut Prakan', 'country_code' => 'TH'],\n            ['name' => 'Nuevo Casas Grandes', 'country_code' => 'MX'],\n            ['name' => 'Pavia', 'country_code' => 'PH'],\n            ['name' => 'Kidderminster', 'country_code' => 'GB'],\n            ['name' => 'Lipjan', 'country_code' => 'XK'],\n            ['name' => 'Zumpango', 'country_code' => 'MX'],\n            ['name' => 'Crosby', 'country_code' => 'GB'],\n            ['name' => 'Al Mafraq', 'country_code' => 'JO'],\n            ['name' => 'Hamilton', 'country_code' => 'GB'],\n            ['name' => 'Altrincham', 'country_code' => 'GB'],\n            ['name' => 'Huntington Park', 'country_code' => 'US'],\n            ['name' => 'Mafeteng', 'country_code' => 'LS'],\n            ['name' => 'Esplugas de Llobregat', 'country_code' => 'ES'],\n            ['name' => 'Medford', 'country_code' => 'US'],\n            ['name' => 'Chinhoyi', 'country_code' => 'ZW'],\n            ['name' => 'Gumushane', 'country_code' => 'TR'],\n            ['name' => 'Pithapuram', 'country_code' => 'IN'],\n            ['name' => 'Belize City', 'country_code' => 'BZ'],\n            ['name' => 'Acatzingo', 'country_code' => 'MX'],\n            ['name' => 'Maun', 'country_code' => 'BW'],\n            ['name' => 'Barri', 'country_code' => 'GB'],\n            ['name' => 'Biel/Bienne', 'country_code' => 'CH'],\n            ['name' => 'Bac Giang', 'country_code' => 'VN'],\n            ['name' => 'Ushuaia', 'country_code' => 'AR'],\n            ['name' => 'Dunfermline', 'country_code' => 'GB'],\n            ['name' => 'Royal Leamington Spa', 'country_code' => 'GB'],\n            ['name' => 'Zalau', 'country_code' => 'RO'],\n            ['name' => 'Sfantu-Gheorghe', 'country_code' => 'RO'],\n            ['name' => 'Mugla', 'country_code' => 'TR'],\n            ['name' => 'Llanelli', 'country_code' => 'GB'],\n            ['name' => 'Tandag', 'country_code' => 'PH'],\n            ['name' => 'Phra Nakhon Si Ayutthaya', 'country_code' => 'TH'],\n            ['name' => 'Montesilvano', 'country_code' => 'IT'],\n            ['name' => 'Kranj', 'country_code' => 'SI'],\n            ['name' => 'Salama', 'country_code' => 'GT'],\n            ['name' => 'Zouerate', 'country_code' => 'MR'],\n            ['name' => 'Mollet', 'country_code' => 'ES'],\n            ['name' => 'Trencin', 'country_code' => 'SK'],\n            ['name' => 'Rahovec', 'country_code' => 'XK'],\n            ['name' => 'Jelgava', 'country_code' => 'LV'],\n            ['name' => 'Tamiami', 'country_code' => 'US'],\n            ['name' => 'Vaslui', 'country_code' => 'RO'],\n            ['name' => 'Saint-Quentin', 'country_code' => 'FR'],\n            ['name' => 'Massy', 'country_code' => 'FR'],\n            ['name' => 'Kendale Lakes', 'country_code' => 'US'],\n            ['name' => 'Castelo Branco', 'country_code' => 'PT'],\n            ['name' => 'Rio Tinto', 'country_code' => 'PT'],\n            ['name' => 'San Giorgio a Cremano', 'country_code' => 'IT'],\n            ['name' => 'Vigan', 'country_code' => 'PH'],\n            ['name' => 'Weymouth', 'country_code' => 'GB'],\n            ['name' => 'Santa Rosa de Copan', 'country_code' => 'HN'],\n            ['name' => 'Gallarate', 'country_code' => 'IT'],\n            ['name' => 'Halmstad', 'country_code' => 'SE'],\n            ['name' => 'Corbeil-Essonnes', 'country_code' => 'FR'],\n            ['name' => 'Ohrid', 'country_code' => 'MK'],\n            ['name' => 'Greenford', 'country_code' => 'GB'],\n            ['name' => 'Ponte Nova', 'country_code' => 'BR'],\n            ['name' => 'Matamoros', 'country_code' => 'MX'],\n            ['name' => 'Guliston', 'country_code' => 'UZ'],\n            ['name' => 'Rowley Regis', 'country_code' => 'GB'],\n            ['name' => 'Bootle', 'country_code' => 'GB'],\n            ['name' => 'Ibiza', 'country_code' => 'ES'],\n            ['name' => 'Francisco I. Madero', 'country_code' => 'MX'],\n            ['name' => 'New Brunswick', 'country_code' => 'US'],\n            ['name' => 'Casalnuovo di Napoli', 'country_code' => 'IT'],\n            ['name' => 'Lautoka', 'country_code' => 'FJ'],\n            ['name' => 'Senhor do Bonfim', 'country_code' => 'BR'],\n            ['name' => 'Ercolano', 'country_code' => 'IT'],\n            ['name' => 'M.A. Rasulzada', 'country_code' => 'AZ'],\n            ['name' => 'Fountain Valley', 'country_code' => 'US'],\n            ['name' => 'Whangarei', 'country_code' => 'NZ'],\n            ['name' => 'Villagran', 'country_code' => 'MX'],\n            ['name' => 'Paignton', 'country_code' => 'GB'],\n            ['name' => 'Lampang', 'country_code' => 'TH'],\n            ['name' => 'Lancaster', 'country_code' => 'GB'],\n            ['name' => 'Vranje', 'country_code' => 'RS'],\n            ['name' => 'Abu Qir', 'country_code' => 'EG'],\n            ['name' => 'Naval', 'country_code' => 'PH'],\n            ['name' => 'Ithaca', 'country_code' => 'US'],\n            ['name' => 'Chiapa de Corzo', 'country_code' => 'MX'],\n            ['name' => 'Madinat Hamad', 'country_code' => 'BH'],\n            ['name' => 'Oak Lawn', 'country_code' => 'US'],\n            ['name' => 'Boac', 'country_code' => 'PH'],\n            ['name' => 'Padangpanjang', 'country_code' => 'ID'],\n            ['name' => 'Mikkeli', 'country_code' => 'FI'],\n            ['name' => 'Malisheve', 'country_code' => 'XK'],\n            ['name' => 'Gutao', 'country_code' => 'CN'],\n            ['name' => 'Busia', 'country_code' => 'UG'],\n            ['name' => 'Morden', 'country_code' => 'GB'],\n            ['name' => 'Catford', 'country_code' => 'GB'],\n            ['name' => 'Folkestone', 'country_code' => 'GB'],\n            ['name' => 'Berwyn', 'country_code' => 'US'],\n            ['name' => 'Charikar', 'country_code' => 'AF'],\n            ['name' => 'Aloha', 'country_code' => 'US'],\n            ['name' => 'Shiraoka', 'country_code' => 'JP'],\n            ['name' => 'Prachuap Khiri Khan', 'country_code' => 'TH'],\n            ['name' => 'Irvington', 'country_code' => 'US'],\n            ['name' => 'Korce', 'country_code' => 'AL'],\n            ['name' => 'Rosemead', 'country_code' => 'US'],\n            ['name' => 'Tulcan', 'country_code' => 'EC'],\n            ['name' => 'Rosny-sous-Bois', 'country_code' => 'FR'],\n            ['name' => 'Muban Saeng Bua Thong', 'country_code' => 'TH'],\n            ['name' => 'Paramount', 'country_code' => 'US'],\n            ['name' => 'Louangphabang', 'country_code' => 'LA'],\n            ['name' => 'Stratford', 'country_code' => 'GB'],\n            ['name' => 'Choisy-le-Roi', 'country_code' => 'FR'],\n            ['name' => 'Iganga', 'country_code' => 'UG'],\n            ['name' => 'Cagnes-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Sakon Nakhon', 'country_code' => 'TH'],\n            ['name' => 'Sutton in Ashfield', 'country_code' => 'GB'],\n            ['name' => 'Pursat', 'country_code' => 'KH'],\n            ['name' => 'Bayonne', 'country_code' => 'FR'],\n            ['name' => 'Macclesfield', 'country_code' => 'GB'],\n            ['name' => 'Eger', 'country_code' => 'HU'],\n            ['name' => 'Nes Ziyyona', 'country_code' => 'IL'],\n            ['name' => 'San Vicente', 'country_code' => 'SV'],\n            ['name' => 'Cologno Monzese', 'country_code' => 'IT'],\n            ['name' => 'Santiago Teyahualco', 'country_code' => 'MX'],\n            ['name' => 'Marondera', 'country_code' => 'ZW'],\n            ['name' => 'Wellingborough', 'country_code' => 'GB'],\n            ['name' => 'Scafati', 'country_code' => 'IT'],\n            ['name' => 'Moskovskiy', 'country_code' => 'RU'],\n            ['name' => 'Rho', 'country_code' => 'IT'],\n            ['name' => 'Gao', 'country_code' => 'ML'],\n            ['name' => 'Maha Sarakham', 'country_code' => 'TH'],\n            ['name' => 'Revere', 'country_code' => 'US'],\n            ['name' => 'Barra do Corda', 'country_code' => 'BR'],\n            ['name' => 'Aspen Hill', 'country_code' => 'US'],\n            ['name' => 'Kirkcaldy', 'country_code' => 'GB'],\n            ['name' => 'Helena', 'country_code' => 'US'],\n            ['name' => 'Takeo', 'country_code' => 'KH'],\n            ['name' => 'Hrazdan', 'country_code' => 'AM'],\n            ['name' => 'Barnet', 'country_code' => 'GB'],\n            ['name' => 'Vejle', 'country_code' => 'DK'],\n            ['name' => 'Noisy-le-Sec', 'country_code' => 'FR'],\n            ['name' => 'Santurce-Antiguo', 'country_code' => 'ES'],\n            ['name' => 'Cumbernauld', 'country_code' => 'GB'],\n            ['name' => 'Valladolid', 'country_code' => 'MX'],\n            ['name' => 'West New York', 'country_code' => 'US'],\n            ['name' => 'Mangochi', 'country_code' => 'MW'],\n            ['name' => 'Hoboken', 'country_code' => 'US'],\n            ['name' => 'Mongu', 'country_code' => 'ZM'],\n            ['name' => 'Myrnohrad', 'country_code' => 'UA'],\n            ['name' => 'Iwakura', 'country_code' => 'JP'],\n            ['name' => 'Takahama', 'country_code' => 'JP'],\n            ['name' => 'Boujad', 'country_code' => 'MA'],\n            ['name' => 'Oak Park', 'country_code' => 'US'],\n            ['name' => 'Batley', 'country_code' => 'GB'],\n            ['name' => 'Jinotepe', 'country_code' => 'NI'],\n            ['name' => 'Collegno', 'country_code' => 'IT'],\n            ['name' => 'Ain El Aouda', 'country_code' => 'MA'],\n            ['name' => 'Elmshorn', 'country_code' => 'DE'],\n            ['name' => 'Floriano', 'country_code' => 'BR'],\n            ['name' => 'Bang Bua Thong', 'country_code' => 'TH'],\n            ['name' => 'Suzukawa', 'country_code' => 'JP'],\n            ['name' => 'Lamia', 'country_code' => 'GR'],\n            ['name' => 'Chake Chake', 'country_code' => 'TZ'],\n            ['name' => 'Vaulx-en-Velin', 'country_code' => 'FR'],\n            ['name' => 'Lankaran', 'country_code' => 'AZ'],\n            ['name' => 'Vila Real', 'country_code' => 'PT'],\n            ['name' => 'Ocosingo', 'country_code' => 'MX'],\n            ['name' => 'Itamaraju', 'country_code' => 'BR'],\n            ['name' => 'Pen-y-Bont ar Ogwr', 'country_code' => 'GB'],\n            ['name' => 'Ramos Arizpe', 'country_code' => 'MX'],\n            ['name' => 'Teplice', 'country_code' => 'CZ'],\n            ['name' => 'Ratnapura', 'country_code' => 'LK'],\n            ['name' => 'Jihlava', 'country_code' => 'CZ'],\n            ['name' => 'Sombor', 'country_code' => 'RS'],\n            ['name' => 'Levittown', 'country_code' => 'US'],\n            ['name' => 'Bodo', 'country_code' => 'NO'],\n            ['name' => 'Vryburg', 'country_code' => 'ZA'],\n            ['name' => 'Eltham', 'country_code' => 'GB'],\n            ['name' => 'Surbiton', 'country_code' => 'GB'],\n            ['name' => 'Perth Amboy', 'country_code' => 'US'],\n            ['name' => 'Ashton', 'country_code' => 'GB'],\n            ['name' => 'Qasbat Tadla', 'country_code' => 'MA'],\n            ['name' => 'Tizimin', 'country_code' => 'MX'],\n            ['name' => 'Seguela', 'country_code' => 'CI'],\n            ['name' => 'Placentia', 'country_code' => 'US'],\n            ['name' => 'Guozhen', 'country_code' => 'CN'],\n            ['name' => 'Stretford', 'country_code' => 'GB'],\n            ['name' => 'Evere', 'country_code' => 'BE'],\n            ['name' => 'Sar-e Pul', 'country_code' => 'AF'],\n            ['name' => 'Komotini', 'country_code' => 'GR'],\n            ['name' => 'Camocim', 'country_code' => 'BR'],\n            ['name' => 'Cuetzalan', 'country_code' => 'MX'],\n            ['name' => 'Loreto', 'country_code' => 'MX'],\n            ['name' => 'Larnaca', 'country_code' => 'CY'],\n            ['name' => 'Capanema', 'country_code' => 'BR'],\n            ['name' => 'Gennevilliers', 'country_code' => 'FR'],\n            ['name' => 'Bodupal', 'country_code' => 'IN'],\n            ['name' => 'Longchamps', 'country_code' => 'AR'],\n            ['name' => 'Alytus', 'country_code' => 'LT'],\n            ['name' => 'Sisophon', 'country_code' => 'KH'],\n            ['name' => 'Aliso Viejo', 'country_code' => 'US'],\n            ['name' => 'Skenderaj', 'country_code' => 'XK'],\n            ['name' => 'Jarash', 'country_code' => 'JO'],\n            ['name' => 'Harasta', 'country_code' => 'SY'],\n            ['name' => 'Puttalam', 'country_code' => 'LK'],\n            ['name' => 'Iba', 'country_code' => 'PH'],\n            ['name' => 'Welwyn Garden City', 'country_code' => 'GB'],\n            ['name' => 'Jurmala', 'country_code' => 'LV'],\n            ['name' => 'Bagneux', 'country_code' => 'FR'],\n            ['name' => 'Gbadolite', 'country_code' => 'CD'],\n            ['name' => 'Garges-les-Gonesse', 'country_code' => 'FR'],\n            ['name' => 'Livry-Gargan', 'country_code' => 'FR'],\n            ['name' => 'West Bridgford', 'country_code' => 'GB'],\n            ['name' => 'Trujillo', 'country_code' => 'VE'],\n            ['name' => 'Azemmour', 'country_code' => 'MA'],\n            ['name' => 'Lissone', 'country_code' => 'IT'],\n            ['name' => 'Country Club', 'country_code' => 'US'],\n            ['name' => 'Goianesia', 'country_code' => 'BR'],\n            ['name' => 'Yeovil', 'country_code' => 'GB'],\n            ['name' => 'Beckenham', 'country_code' => 'GB'],\n            ['name' => 'Gracias', 'country_code' => 'HN'],\n            ['name' => 'Ma an', 'country_code' => 'JO'],\n            ['name' => 'Cojutepeque', 'country_code' => 'SV'],\n            ['name' => 'Selibe Phikwe', 'country_code' => 'BW'],\n            ['name' => 'Villa Alsina', 'country_code' => 'AR'],\n            ['name' => 'Plainfield', 'country_code' => 'US'],\n            ['name' => 'Invercargill', 'country_code' => 'NZ'],\n            ['name' => 'Wheaton', 'country_code' => 'US'],\n            ['name' => 'Campobasso', 'country_code' => 'IT'],\n            ['name' => 'Tlalmanalco', 'country_code' => 'MX'],\n            ['name' => 'Moyobamba', 'country_code' => 'PE'],\n            ['name' => 'Al Kharjah', 'country_code' => 'EG'],\n            ['name' => 'Kotelniki', 'country_code' => 'RU'],\n            ['name' => 'Nichelino', 'country_code' => 'IT'],\n            ['name' => 'Al Balyana', 'country_code' => 'EG'],\n            ['name' => 'Paderno Dugnano', 'country_code' => 'IT'],\n            ['name' => 'Meudon', 'country_code' => 'FR'],\n            ['name' => 'Zaranj', 'country_code' => 'AF'],\n            ['name' => 'La Garenne-Colombes', 'country_code' => 'FR'],\n            ['name' => 'Odienne', 'country_code' => 'CI'],\n            ['name' => 'Cheshunt', 'country_code' => 'GB'],\n            ['name' => 'Nausori', 'country_code' => 'FJ'],\n            ['name' => 'North Bethesda', 'country_code' => 'US'],\n            ['name' => 'Hagere Hiywet', 'country_code' => 'ET'],\n            ['name' => 'Cerritos', 'country_code' => 'US'],\n            ['name' => 'Dosso', 'country_code' => 'NE'],\n            ['name' => 'Kangar', 'country_code' => 'MY'],\n            ['name' => 'Al Aaroui', 'country_code' => 'MA'],\n            ['name' => 'Figueras', 'country_code' => 'ES'],\n            ['name' => 'Lakewood', 'country_code' => 'US'],\n            ['name' => 'Montana', 'country_code' => 'BG'],\n            ['name' => 'Huancavelica', 'country_code' => 'PE'],\n            ['name' => 'Perth', 'country_code' => 'GB'],\n            ['name' => 'Brumado', 'country_code' => 'BR'],\n            ['name' => 'Dollard-des-Ormeaux', 'country_code' => 'CA'],\n            ['name' => 'El ad', 'country_code' => 'IL'],\n            ['name' => 'Couva', 'country_code' => 'TT'],\n            ['name' => 'Lulea', 'country_code' => 'SE'],\n            ['name' => 'Waterford', 'country_code' => 'IE'],\n            ['name' => 'Bagnolet', 'country_code' => 'FR'],\n            ['name' => 'Ramat HaSharon', 'country_code' => 'IL'],\n            ['name' => 'Nelson', 'country_code' => 'NZ'],\n            ['name' => 'Wajir', 'country_code' => 'KE'],\n            ['name' => 'San Feliu de Llobregat', 'country_code' => 'ES'],\n            ['name' => 'Mairena del Aljarafe', 'country_code' => 'ES'],\n            ['name' => 'Bloomfield', 'country_code' => 'US'],\n            ['name' => 'San Isidro', 'country_code' => 'AR'],\n            ['name' => 'Corroios', 'country_code' => 'PT'],\n            ['name' => 'Karlovy Vary', 'country_code' => 'CZ'],\n            ['name' => 'Jose Marmol', 'country_code' => 'AR'],\n            ['name' => 'Ayr', 'country_code' => 'GB'],\n            ['name' => 'Banbury', 'country_code' => 'GB'],\n            ['name' => 'Wokingham', 'country_code' => 'GB'],\n            ['name' => 'Moroleon', 'country_code' => 'MX'],\n            ['name' => 'Mantes-la-Jolie', 'country_code' => 'FR'],\n            ['name' => 'Cypress', 'country_code' => 'US'],\n            ['name' => 'Hollister', 'country_code' => 'US'],\n            ['name' => 'La Courneuve', 'country_code' => 'FR'],\n            ['name' => 'Inhumas', 'country_code' => 'BR'],\n            ['name' => 'Rovenky', 'country_code' => 'UA'],\n            ['name' => 'Middelburg', 'country_code' => 'NL'],\n            ['name' => 'Asadabad', 'country_code' => 'AF'],\n            ['name' => 'Tlapa de Comonfort', 'country_code' => 'MX'],\n            ['name' => 'Chatillon', 'country_code' => 'FR'],\n            ['name' => 'Birendranagar', 'country_code' => 'NP'],\n            ['name' => 'Krasnoznamensk', 'country_code' => 'RU'],\n            ['name' => 'Ceres', 'country_code' => 'US'],\n            ['name' => 'Nueva Loja', 'country_code' => 'EC'],\n            ['name' => 'Puerto Escondido', 'country_code' => 'MX'],\n            ['name' => 'Noveleta', 'country_code' => 'PH'],\n            ['name' => 'Bangued', 'country_code' => 'PH'],\n            ['name' => 'Seregno', 'country_code' => 'IT'],\n            ['name' => 'Serowe', 'country_code' => 'BW'],\n            ['name' => 'Mandeville', 'country_code' => 'JM'],\n            ['name' => 'Nong Khai', 'country_code' => 'TH'],\n            ['name' => 'Salekhard', 'country_code' => 'RU'],\n            ['name' => 'Mercedes', 'country_code' => 'UY'],\n            ['name' => 'University', 'country_code' => 'US'],\n            ['name' => 'Antelope', 'country_code' => 'US'],\n            ['name' => 'Leiria', 'country_code' => 'PT'],\n            ['name' => 'Parras de la Fuente', 'country_code' => 'MX'],\n            ['name' => 'Emiliano Zapata', 'country_code' => 'MX'],\n            ['name' => 'Bindura', 'country_code' => 'ZW'],\n            ['name' => 'Gori', 'country_code' => 'GE'],\n            ['name' => 'Bastia', 'country_code' => 'FR'],\n            ['name' => 'Isiolo', 'country_code' => 'KE'],\n            ['name' => 'La Mirada', 'country_code' => 'US'],\n            ['name' => 'Inuma', 'country_code' => 'JP'],\n            ['name' => 'Havant', 'country_code' => 'GB'],\n            ['name' => 'Chalon-sur-Saone', 'country_code' => 'FR'],\n            ['name' => 'Torre Annunziata', 'country_code' => 'IT'],\n            ['name' => 'Leribe', 'country_code' => 'LS'],\n            ['name' => 'Nocera Inferiore', 'country_code' => 'IT'],\n            ['name' => 'Kanash', 'country_code' => 'RU'],\n            ['name' => 'Hinckley', 'country_code' => 'GB'],\n            ['name' => 'Njombe', 'country_code' => 'TZ'],\n            ['name' => 'Melito di Napoli', 'country_code' => 'IT'],\n            ['name' => 'Erith', 'country_code' => 'GB'],\n            ['name' => 'Talence', 'country_code' => 'FR'],\n            ['name' => 'New Amsterdam', 'country_code' => 'GY'],\n            ['name' => 'Kerkrade', 'country_code' => 'NL'],\n            ['name' => 'North Highlands', 'country_code' => 'US'],\n            ['name' => 'Karmiel', 'country_code' => 'IL'],\n            ['name' => 'Morley', 'country_code' => 'GB'],\n            ['name' => 'Hajjah', 'country_code' => 'YE'],\n            ['name' => 'Empalme', 'country_code' => 'MX'],\n            ['name' => 'Kokkola', 'country_code' => 'FI'],\n            ['name' => 'Florin', 'country_code' => 'US'],\n            ['name' => 'Covina', 'country_code' => 'US'],\n            ['name' => 'Bang Kruai', 'country_code' => 'TH'],\n            ['name' => 'Tubod', 'country_code' => 'PH'],\n            ['name' => 'Murzuq', 'country_code' => 'LY'],\n            ['name' => 'Ripollet', 'country_code' => 'ES'],\n            ['name' => 'San Adrian de Besos', 'country_code' => 'ES'],\n            ['name' => 'Caluire-et-Cuire', 'country_code' => 'FR'],\n            ['name' => 'Rosso', 'country_code' => 'MR'],\n            ['name' => 'Villa de Zaachila', 'country_code' => 'MX'],\n            ['name' => 'Naj  Hammadi', 'country_code' => 'EG'],\n            ['name' => 'Charenton-le-Pont', 'country_code' => 'FR'],\n            ['name' => 'Hammam-Lif', 'country_code' => 'TN'],\n            ['name' => 'Chitre', 'country_code' => 'PA'],\n            ['name' => 'Salgueiro', 'country_code' => 'BR'],\n            ['name' => 'Badulla', 'country_code' => 'LK'],\n            ['name' => 'Nagykanizsa', 'country_code' => 'HU'],\n            ['name' => 'Malakoff', 'country_code' => 'FR'],\n            ['name' => 'Welling', 'country_code' => 'GB'],\n            ['name' => 'Viti', 'country_code' => 'XK'],\n            ['name' => 'Boosaaso', 'country_code' => 'SO'],\n            ['name' => 'Izucar de Matamoros', 'country_code' => 'MX'],\n            ['name' => 'Qiryat Ono', 'country_code' => 'IL'],\n            ['name' => 'Castleford', 'country_code' => 'GB'],\n            ['name' => 'Santiago', 'country_code' => 'PA'],\n            ['name' => 'Fareham', 'country_code' => 'GB'],\n            ['name' => 'Le Cannet', 'country_code' => 'FR'],\n            ['name' => 'Kanye', 'country_code' => 'BW'],\n            ['name' => 'Embu', 'country_code' => 'KE'],\n            ['name' => 'Choma', 'country_code' => 'ZM'],\n            ['name' => 'Aweil', 'country_code' => 'SS'],\n            ['name' => 'Ostersund', 'country_code' => 'SE'],\n            ['name' => 'Merthyr Tudful', 'country_code' => 'GB'],\n            ['name' => 'Trollhattan', 'country_code' => 'SE'],\n            ['name' => 'Rye', 'country_code' => 'US'],\n            ['name' => 'Valenciennes', 'country_code' => 'FR'],\n            ['name' => 'Everett', 'country_code' => 'US'],\n            ['name' => 'Sibenik', 'country_code' => 'HR'],\n            ['name' => 'Coatbridge', 'country_code' => 'GB'],\n            ['name' => 'Saint-Brieuc', 'country_code' => 'FR'],\n            ['name' => 'Cobija', 'country_code' => 'BO'],\n            ['name' => 'Yuchengcun', 'country_code' => 'CN'],\n            ['name' => 'Urmston', 'country_code' => 'GB'],\n            ['name' => 'Farim', 'country_code' => 'GW'],\n            ['name' => 'Daijiazhuang', 'country_code' => 'CN'],\n            ['name' => 'Slobozia', 'country_code' => 'RO'],\n            ['name' => 'Mafamude', 'country_code' => 'PT'],\n            ['name' => 'Mrirt', 'country_code' => 'MA'],\n            ['name' => 'Vilvoorde', 'country_code' => 'BE'],\n            ['name' => 'Kingswood', 'country_code' => 'GB'],\n            ['name' => 'Jerada', 'country_code' => 'MA'],\n            ['name' => 'Hammam Sousse', 'country_code' => 'TN'],\n            ['name' => 'Rozzano', 'country_code' => 'IT'],\n            ['name' => 'Gbarnga', 'country_code' => 'LR'],\n            ['name' => 'Stains', 'country_code' => 'FR'],\n            ['name' => 'Alexandria', 'country_code' => 'RO'],\n            ['name' => 'Madinat  Isa', 'country_code' => 'BH'],\n            ['name' => 'Igualada', 'country_code' => 'ES'],\n            ['name' => 'Thun', 'country_code' => 'CH'],\n            ['name' => 'Vanves', 'country_code' => 'FR'],\n            ['name' => 'Kingston upon Thames', 'country_code' => 'GB'],\n            ['name' => 'Buta', 'country_code' => 'CD'],\n            ['name' => 'Bron', 'country_code' => 'FR'],\n            ['name' => 'Targovishte', 'country_code' => 'BG'],\n            ['name' => 'Nueva Gerona', 'country_code' => 'CU'],\n            ['name' => 'Tindouf', 'country_code' => 'DZ'],\n            ['name' => 'Jaltipan de Morelos', 'country_code' => 'MX'],\n            ['name' => 'Bluefields', 'country_code' => 'NI'],\n            ['name' => 'Strumica', 'country_code' => 'MK'],\n            ['name' => 'Liberia', 'country_code' => 'CR'],\n            ['name' => 'Bellinzona', 'country_code' => 'CH'],\n            ['name' => 'Pattani', 'country_code' => 'TH'],\n            ['name' => 'Artigas', 'country_code' => 'UY'],\n            ['name' => 'Arlington', 'country_code' => 'US'],\n            ['name' => 'Pinneberg', 'country_code' => 'DE'],\n            ['name' => 'Newbury', 'country_code' => 'GB'],\n            ['name' => 'Coyotepec', 'country_code' => 'MX'],\n            ['name' => 'Oakland Park', 'country_code' => 'US'],\n            ['name' => 'Donggangli', 'country_code' => 'CN'],\n            ['name' => 'Gagny', 'country_code' => 'FR'],\n            ['name' => 'Alcantarilla', 'country_code' => 'ES'],\n            ['name' => 'Dunaujvaros', 'country_code' => 'HU'],\n            ['name' => 'Sutton', 'country_code' => 'GB'],\n            ['name' => 'Melun', 'country_code' => 'FR'],\n            ['name' => 'Bridgwater', 'country_code' => 'GB'],\n            ['name' => 'Kabale', 'country_code' => 'UG'],\n            ['name' => 'Desio', 'country_code' => 'IT'],\n            ['name' => 'Swidnik', 'country_code' => 'PL'],\n            ['name' => 'Altadena', 'country_code' => 'US'],\n            ['name' => 'Qiryat Bialik', 'country_code' => 'IL'],\n            ['name' => 'Bishops Stortford', 'country_code' => 'GB'],\n            ['name' => 'Bois-Colombes', 'country_code' => 'FR'],\n            ['name' => 'Nogent-sur-Marne', 'country_code' => 'FR'],\n            ['name' => 'Lecherias', 'country_code' => 'VE'],\n            ['name' => 'Arras', 'country_code' => 'FR'],\n            ['name' => 'Umm al Qaywayn', 'country_code' => 'AE'],\n            ['name' => 'Reze', 'country_code' => 'FR'],\n            ['name' => 'Duncan', 'country_code' => 'CA'],\n            ['name' => 'El Aioun', 'country_code' => 'MA'],\n            ['name' => 'Chimaltenango', 'country_code' => 'GT'],\n            ['name' => 'Kirkby', 'country_code' => 'GB'],\n            ['name' => 'Salisbury', 'country_code' => 'GB'],\n            ['name' => 'Katsuren-haebaru', 'country_code' => 'JP'],\n            ['name' => 'Tarbes', 'country_code' => 'FR'],\n            ['name' => 'Boumerdes', 'country_code' => 'DZ'],\n            ['name' => 'North Lauderdale', 'country_code' => 'US'],\n            ['name' => 'Leidschendam', 'country_code' => 'NL'],\n            ['name' => 'Caerphilly', 'country_code' => 'GB'],\n            ['name' => 'Hackensack', 'country_code' => 'US'],\n            ['name' => 'Caloundra', 'country_code' => 'AU'],\n            ['name' => 'Wattrelos', 'country_code' => 'FR'],\n            ['name' => 'Kampong Chhnang', 'country_code' => 'KH'],\n            ['name' => 'Cleveland Heights', 'country_code' => 'US'],\n            ['name' => 'Fort Portal', 'country_code' => 'UG'],\n            ['name' => 'Ermezinde', 'country_code' => 'PT'],\n            ['name' => 'Veles', 'country_code' => 'MK'],\n            ['name' => 'Or Yehuda', 'country_code' => 'IL'],\n            ['name' => 'Haedo', 'country_code' => 'AR'],\n            ['name' => 'Paracho de Verduzco', 'country_code' => 'MX'],\n            ['name' => 'Stip', 'country_code' => 'MK'],\n            ['name' => 'Drogheda', 'country_code' => 'IE'],\n            ['name' => 'Trujillo Alto', 'country_code' => 'PR'],\n            ['name' => 'Concord', 'country_code' => 'US'],\n            ['name' => 'Kalmar', 'country_code' => 'SE'],\n            ['name' => 'Playa Vicente', 'country_code' => 'MX'],\n            ['name' => 'Munro', 'country_code' => 'AR'],\n            ['name' => 'Matale', 'country_code' => 'LK'],\n            ['name' => 'Uman', 'country_code' => 'MX'],\n            ['name' => 'Grays', 'country_code' => 'GB'],\n            ['name' => 'Abingdon', 'country_code' => 'GB'],\n            ['name' => 'Nanuque', 'country_code' => 'BR'],\n            ['name' => 'San Diego de la Union', 'country_code' => 'MX'],\n            ['name' => 'Hodmezovasarhely', 'country_code' => 'HU'],\n            ['name' => 'Ramsgate', 'country_code' => 'GB'],\n            ['name' => 'Annandale', 'country_code' => 'US'],\n            ['name' => 'Rohnert Park', 'country_code' => 'US'],\n            ['name' => 'Zugdidi', 'country_code' => 'GE'],\n            ['name' => 'Mityana', 'country_code' => 'UG'],\n            ['name' => 'Cacem', 'country_code' => 'PT'],\n            ['name' => 'Le Kremlin-Bicetre', 'country_code' => 'FR'],\n            ['name' => 'Salem', 'country_code' => 'US'],\n            ['name' => 'Ilkeston', 'country_code' => 'GB'],\n            ['name' => 'Kapan', 'country_code' => 'AM'],\n            ['name' => 'Pomigliano d Arco', 'country_code' => 'IT'],\n            ['name' => 'Beverwijk', 'country_code' => 'NL'],\n            ['name' => 'Aldershot', 'country_code' => 'GB'],\n            ['name' => 'Cleethorpes', 'country_code' => 'GB'],\n            ['name' => 'Minas', 'country_code' => 'UY'],\n            ['name' => 'Mamburao', 'country_code' => 'PH'],\n            ['name' => 'Leighton Buzzard', 'country_code' => 'GB'],\n            ['name' => 'Alajuela', 'country_code' => 'CR'],\n            ['name' => 'North Miami Beach', 'country_code' => 'US'],\n            ['name' => 'Franceville', 'country_code' => 'GA'],\n            ['name' => 'Garbahaarrey', 'country_code' => 'SO'],\n            ['name' => 'Perote', 'country_code' => 'MX'],\n            ['name' => 'Annemasse', 'country_code' => 'FR'],\n            ['name' => 'Saronno', 'country_code' => 'IT'],\n            ['name' => 'Whitney', 'country_code' => 'US'],\n            ['name' => 'Freeport', 'country_code' => 'US'],\n            ['name' => 'Juan Rodriguez Clara', 'country_code' => 'MX'],\n            ['name' => 'Dubrovnik', 'country_code' => 'HR'],\n            ['name' => 'Blyth', 'country_code' => 'GB'],\n            ['name' => 'San Bruno', 'country_code' => 'US'],\n            ['name' => 'Quinhamel', 'country_code' => 'GW'],\n            ['name' => 'Franconville', 'country_code' => 'FR'],\n            ['name' => 'Hicksville', 'country_code' => 'US'],\n            ['name' => 'Silistra', 'country_code' => 'BG'],\n            ['name' => 'West Babylon', 'country_code' => 'US'],\n            ['name' => 'Saint-Martin-d Heres', 'country_code' => 'FR'],\n            ['name' => 'Guarda', 'country_code' => 'PT'],\n            ['name' => 'Si Sa Ket', 'country_code' => 'TH'],\n            ['name' => 'Aldridge', 'country_code' => 'GB'],\n            ['name' => 'Kampot', 'country_code' => 'KH'],\n            ['name' => 'Fribourg', 'country_code' => 'CH'],\n            ['name' => 'Long Eaton', 'country_code' => 'GB'],\n            ['name' => 'La Barca', 'country_code' => 'MX'],\n            ['name' => 'Le Perreux-Sur-Marne', 'country_code' => 'FR'],\n            ['name' => 'Arnold', 'country_code' => 'GB'],\n            ['name' => 'Lovech', 'country_code' => 'BG'],\n            ['name' => 'Miercurea-Ciuc', 'country_code' => 'RO'],\n            ['name' => 'Cachan', 'country_code' => 'FR'],\n            ['name' => 'Berat', 'country_code' => 'AL'],\n            ['name' => 'Small Heath', 'country_code' => 'GB'],\n            ['name' => 'Myrhorod', 'country_code' => 'UA'],\n            ['name' => 'Ardahan', 'country_code' => 'TR'],\n            ['name' => 'Villafranca del Panades', 'country_code' => 'ES'],\n            ['name' => 'Dock Sur', 'country_code' => 'AR'],\n            ['name' => 'Bambari', 'country_code' => 'CF'],\n            ['name' => 'Blanes', 'country_code' => 'ES'],\n            ['name' => 'Herne Bay', 'country_code' => 'GB'],\n            ['name' => 'Aziylal', 'country_code' => 'MA'],\n            ['name' => 'Tonala', 'country_code' => 'MX'],\n            ['name' => 'Nakama', 'country_code' => 'JP'],\n            ['name' => 'Cao Bang', 'country_code' => 'VN'],\n            ['name' => 'San Jose', 'country_code' => 'UY'],\n            ['name' => 'Aberdare', 'country_code' => 'GB'],\n            ['name' => 'Douai', 'country_code' => 'FR'],\n            ['name' => 'Daman', 'country_code' => 'IN'],\n            ['name' => 'Bell Gardens', 'country_code' => 'US'],\n            ['name' => 'Cesano Maderno', 'country_code' => 'IT'],\n            ['name' => 'Razgrad', 'country_code' => 'BG'],\n            ['name' => 'Placilla de Penuelas', 'country_code' => 'CL'],\n            ['name' => 'Kahama', 'country_code' => 'TZ'],\n            ['name' => 'Amudalavalasa', 'country_code' => 'IN'],\n            ['name' => 'Lindi', 'country_code' => 'TZ'],\n            ['name' => 'Savigny-sur-Orge', 'country_code' => 'FR'],\n            ['name' => 'Campbell', 'country_code' => 'US'],\n            ['name' => 'Port Talbot', 'country_code' => 'GB'],\n            ['name' => 'Puntarenas', 'country_code' => 'CR'],\n            ['name' => 'Woonsocket', 'country_code' => 'US'],\n            ['name' => 'Biougra', 'country_code' => 'MA'],\n            ['name' => 'Xico', 'country_code' => 'MX'],\n            ['name' => 'Narathiwat', 'country_code' => 'TH'],\n            ['name' => 'Mugnano di Napoli', 'country_code' => 'IT'],\n            ['name' => 'Sidi Yahia El Gharb', 'country_code' => 'MA'],\n            ['name' => 'Nueva Rosita', 'country_code' => 'MX'],\n            ['name' => 'Echirolles', 'country_code' => 'FR'],\n            ['name' => 'Ciampino', 'country_code' => 'IT'],\n            ['name' => 'La Paz', 'country_code' => 'HN'],\n            ['name' => 'Villa Adelina', 'country_code' => 'AR'],\n            ['name' => 'Morshansk', 'country_code' => 'RU'],\n            ['name' => 'Arzano', 'country_code' => 'IT'],\n            ['name' => 'Palayan City', 'country_code' => 'PH'],\n            ['name' => 'Lusambo', 'country_code' => 'CD'],\n            ['name' => 'Salvatierra', 'country_code' => 'MX'],\n            ['name' => 'Marcq-en-Baroeul', 'country_code' => 'FR'],\n            ['name' => 'Villarrica', 'country_code' => 'PY'],\n            ['name' => 'Zacatelco', 'country_code' => 'MX'],\n            ['name' => 'Corsico', 'country_code' => 'IT'],\n            ['name' => 'Kozani', 'country_code' => 'GR'],\n            ['name' => 'Vredenburg', 'country_code' => 'ZA'],\n            ['name' => 'Malbork', 'country_code' => 'PL'],\n            ['name' => 'Wilrijk', 'country_code' => 'BE'],\n            ['name' => 'Panaji', 'country_code' => 'IN'],\n            ['name' => 'Greenacres', 'country_code' => 'US'],\n            ['name' => 'Le Pre-Saint-Gervais', 'country_code' => 'FR'],\n            ['name' => 'Hyde', 'country_code' => 'GB'],\n            ['name' => 'Famagusta', 'country_code' => 'CY'],\n            ['name' => 'Puerto Francisco de Orellana', 'country_code' => 'EC'],\n            ['name' => 'San Roque', 'country_code' => 'PH'],\n            ['name' => 'Ngozi', 'country_code' => 'BI'],\n            ['name' => 'Burjasot', 'country_code' => 'ES'],\n            ['name' => 'Miyoshidai', 'country_code' => 'JP'],\n            ['name' => 'Chartres', 'country_code' => 'FR'],\n            ['name' => 'Barreiros', 'country_code' => 'BR'],\n            ['name' => 'Wilkes-Barre', 'country_code' => 'US'],\n            ['name' => 'Fleet', 'country_code' => 'GB'],\n            ['name' => 'Samkir', 'country_code' => 'AZ'],\n            ['name' => 'Villefranche-sur-Saone', 'country_code' => 'FR'],\n            ['name' => 'Parnu', 'country_code' => 'EE'],\n            ['name' => 'Whitley Bay', 'country_code' => 'GB'],\n            ['name' => 'Dun Dealgan', 'country_code' => 'IE'],\n            ['name' => 'Shengli', 'country_code' => 'CN'],\n            ['name' => 'Al Karnak', 'country_code' => 'EG'],\n            ['name' => 'Sayula de Aleman', 'country_code' => 'MX'],\n            ['name' => 'Bjelovar', 'country_code' => 'HR'],\n            ['name' => 'Teaneck', 'country_code' => 'US'],\n            ['name' => 'Grugliasco', 'country_code' => 'IT'],\n            ['name' => 'Al Bayda ', 'country_code' => 'YE'],\n            ['name' => 'Villepinte', 'country_code' => 'FR'],\n            ['name' => 'Ez Zahra', 'country_code' => 'TN'],\n            ['name' => 'Yambio', 'country_code' => 'SS'],\n            ['name' => 'Bouar', 'country_code' => 'CF'],\n            ['name' => 'Beeston', 'country_code' => 'GB'],\n            ['name' => 'Ban Sai Ma Tai', 'country_code' => 'TH'],\n            ['name' => 'Camberley', 'country_code' => 'GB'],\n            ['name' => 'Agualva', 'country_code' => 'PT'],\n            ['name' => 'Poissy', 'country_code' => 'FR'],\n            ['name' => 'Mariano Escobedo', 'country_code' => 'MX'],\n            ['name' => 'Neuilly-sur-Marne', 'country_code' => 'FR'],\n            ['name' => 'Kaya', 'country_code' => 'BF'],\n            ['name' => 'Inongo', 'country_code' => 'CD'],\n            ['name' => 'Kanie', 'country_code' => 'JP'],\n            ['name' => 'Sainte-Genevieve-des-Bois', 'country_code' => 'FR'],\n            ['name' => 'Montclair', 'country_code' => 'US'],\n            ['name' => 'Retalhuleu', 'country_code' => 'GT'],\n            ['name' => 'Decan', 'country_code' => 'XK'],\n            ['name' => 'Dunstable', 'country_code' => 'GB'],\n            ['name' => 'Xacmaz', 'country_code' => 'AZ'],\n            ['name' => 'Chachoengsao', 'country_code' => 'TH'],\n            ['name' => 'Bletchley', 'country_code' => 'GB'],\n            ['name' => 'Baler', 'country_code' => 'PH'],\n            ['name' => 'Denton', 'country_code' => 'GB'],\n            ['name' => 'Surin', 'country_code' => 'TH'],\n            ['name' => 'San Gabriel', 'country_code' => 'US'],\n            ['name' => 'Koumra', 'country_code' => 'TD'],\n            ['name' => 'North Shields', 'country_code' => 'GB'],\n            ['name' => 'Hallandale Beach', 'country_code' => 'US'],\n            ['name' => 'Massawa', 'country_code' => 'ER'],\n            ['name' => 'Pont-y-pwl', 'country_code' => 'GB'],\n            ['name' => 'San Juan Despi', 'country_code' => 'ES'],\n            ['name' => 'Kenton', 'country_code' => 'GB'],\n            ['name' => 'Santa Elena', 'country_code' => 'EC'],\n            ['name' => 'Pioltello', 'country_code' => 'IT'],\n            ['name' => 'Keizer', 'country_code' => 'US'],\n            ['name' => 'Mochudi', 'country_code' => 'BW'],\n            ['name' => 'Vernier', 'country_code' => 'CH'],\n            ['name' => 'Chelsea', 'country_code' => 'US'],\n            ['name' => 'Bridlington', 'country_code' => 'GB'],\n            ['name' => 'Sant Antimo', 'country_code' => 'IT'],\n            ['name' => 'Sopot', 'country_code' => 'PL'],\n            ['name' => 'La Puente', 'country_code' => 'US'],\n            ['name' => 'Celje', 'country_code' => 'SI'],\n            ['name' => 'Houilles', 'country_code' => 'FR'],\n            ['name' => 'Waipahu', 'country_code' => 'US'],\n            ['name' => 'Conflans-Sainte-Honorine', 'country_code' => 'FR'],\n            ['name' => 'Florida', 'country_code' => 'UY'],\n            ['name' => 'Pierrefitte-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Istog', 'country_code' => 'XK'],\n            ['name' => 'Agcabadi', 'country_code' => 'AZ'],\n            ['name' => 'Bollate', 'country_code' => 'IT'],\n            ['name' => 'L Hay-les-Roses', 'country_code' => 'FR'],\n            ['name' => 'Annapolis', 'country_code' => 'US'],\n            ['name' => 'Romblon', 'country_code' => 'PH'],\n            ['name' => 'Culver City', 'country_code' => 'US'],\n            ['name' => 'Walkden', 'country_code' => 'GB'],\n            ['name' => 'Mambajao', 'country_code' => 'PH'],\n            ['name' => 'Durazno', 'country_code' => 'UY'],\n            ['name' => 'Sao Francisco do Sul', 'country_code' => 'BR'],\n            ['name' => 'Panuco', 'country_code' => 'MX'],\n            ['name' => 'Nueva Italia de Ruiz', 'country_code' => 'MX'],\n            ['name' => 'Xam Nua', 'country_code' => 'LA'],\n            ['name' => 'Tromso', 'country_code' => 'NO'],\n            ['name' => 'Januaria', 'country_code' => 'BR'],\n            ['name' => 'Koekelberg', 'country_code' => 'BE'],\n            ['name' => 'Creil', 'country_code' => 'FR'],\n            ['name' => 'Northolt', 'country_code' => 'GB'],\n            ['name' => 'Dedougou', 'country_code' => 'BF'],\n            ['name' => 'Frankfort', 'country_code' => 'US'],\n            ['name' => 'Armavir', 'country_code' => 'AM'],\n            ['name' => 'Ayutuxtepeque', 'country_code' => 'SV'],\n            ['name' => 'Northglenn', 'country_code' => 'US'],\n            ['name' => 'Kavadarci', 'country_code' => 'MK'],\n            ['name' => 'Vrilissia', 'country_code' => 'GR'],\n            ['name' => 'Miahuatlan de Porfirio Diaz', 'country_code' => 'MX'],\n            ['name' => 'Barda', 'country_code' => 'AZ'],\n            ['name' => 'Ha Giang', 'country_code' => 'VN'],\n            ['name' => 'Chatenay-Malabry', 'country_code' => 'FR'],\n            ['name' => 'Tuyen Quang', 'country_code' => 'VN'],\n            ['name' => 'El Hajeb', 'country_code' => 'MA'],\n            ['name' => 'Karonga', 'country_code' => 'MW'],\n            ['name' => 'Palaiseau', 'country_code' => 'FR'],\n            ['name' => 'Fort Lee', 'country_code' => 'US'],\n            ['name' => 'Casalecchio di Reno', 'country_code' => 'IT'],\n            ['name' => 'Highbury', 'country_code' => 'GB'],\n            ['name' => 'Zinacantan', 'country_code' => 'MX'],\n            ['name' => 'Premia de Mar', 'country_code' => 'ES'],\n            ['name' => 'Ewell', 'country_code' => 'GB'],\n            ['name' => 'Tunceli', 'country_code' => 'TR'],\n            ['name' => 'Les Lilas', 'country_code' => 'FR'],\n            ['name' => 'Lake Worth', 'country_code' => 'US'],\n            ['name' => 'Wisbech', 'country_code' => 'GB'],\n            ['name' => 'Bossangoa', 'country_code' => 'CF'],\n            ['name' => 'Kline', 'country_code' => 'XK'],\n            ['name' => 'Tit Mellil', 'country_code' => 'MA'],\n            ['name' => 'Riacho de Santana', 'country_code' => 'BR'],\n            ['name' => 'Bucha', 'country_code' => 'UA'],\n            ['name' => 'Chorley', 'country_code' => 'GB'],\n            ['name' => 'Zaio', 'country_code' => 'MA'],\n            ['name' => 'Athis-Mons', 'country_code' => 'FR'],\n            ['name' => 'Kendall West', 'country_code' => 'US'],\n            ['name' => 'Falkirk', 'country_code' => 'GB'],\n            ['name' => 'Montclair', 'country_code' => 'US'],\n            ['name' => 'Jacarezinho', 'country_code' => 'BR'],\n            ['name' => 'Zeghanghane', 'country_code' => 'MA'],\n            ['name' => 'Hanwell', 'country_code' => 'GB'],\n            ['name' => 'Jimenez', 'country_code' => 'MX'],\n            ['name' => 'Tuxpan', 'country_code' => 'MX'],\n            ['name' => 'Choybalsan', 'country_code' => 'MN'],\n            ['name' => 'Am-Timan', 'country_code' => 'TD'],\n            ['name' => 'Tenkodogo', 'country_code' => 'BF'],\n            ['name' => 'La Presa', 'country_code' => 'US'],\n            ['name' => 'Massama', 'country_code' => 'PT'],\n            ['name' => 'Brugherio', 'country_code' => 'IT'],\n            ['name' => 'Macuspana', 'country_code' => 'MX'],\n            ['name' => 'Stanton', 'country_code' => 'US'],\n            ['name' => 'Shangzhuangcun', 'country_code' => 'CN'],\n            ['name' => 'Brzeg', 'country_code' => 'PL'],\n            ['name' => 'Redcar', 'country_code' => 'GB'],\n            ['name' => 'Kikinda', 'country_code' => 'RS'],\n            ['name' => 'Tomatlan', 'country_code' => 'MX'],\n            ['name' => 'East Meadow', 'country_code' => 'US'],\n            ['name' => 'Paphos', 'country_code' => 'CY'],\n            ['name' => 'Limbiate', 'country_code' => 'IT'],\n            ['name' => 'Ali Sabieh', 'country_code' => 'DJ'],\n            ['name' => 'Mission Bend', 'country_code' => 'US'],\n            ['name' => 'Adjumani', 'country_code' => 'UG'],\n            ['name' => 'Gisborne', 'country_code' => 'NZ'],\n            ['name' => 'Spalding', 'country_code' => 'GB'],\n            ['name' => 'Mediouna', 'country_code' => 'MA'],\n            ['name' => 'Dori', 'country_code' => 'BF'],\n            ['name' => 'Yihezhuang', 'country_code' => 'CN'],\n            ['name' => 'Capitao Poco', 'country_code' => 'BR'],\n            ['name' => 'Esch-sur-Alzette', 'country_code' => 'LU'],\n            ['name' => 'Frattamaggiore', 'country_code' => 'IT'],\n            ['name' => 'Le Plessis-Robinson', 'country_code' => 'FR'],\n            ['name' => 'Egypt Lake-Leto', 'country_code' => 'US'],\n            ['name' => 'Escuinapa', 'country_code' => 'MX'],\n            ['name' => 'Kajaani', 'country_code' => 'FI'],\n            ['name' => 'Salto del Guaira', 'country_code' => 'PY'],\n            ['name' => 'Samrong', 'country_code' => 'TH'],\n            ['name' => 'Segrate', 'country_code' => 'IT'],\n            ['name' => 'Villeneuve-Saint-Georges', 'country_code' => 'FR'],\n            ['name' => 'Richmond West', 'country_code' => 'US'],\n            ['name' => 'Schaffhausen', 'country_code' => 'CH'],\n            ['name' => 'Valley Stream', 'country_code' => 'US'],\n            ['name' => 'Hanover Park', 'country_code' => 'US'],\n            ['name' => 'Tozeur', 'country_code' => 'TN'],\n            ['name' => 'Villemomble', 'country_code' => 'FR'],\n            ['name' => 'Hitchin', 'country_code' => 'GB'],\n            ['name' => 'Nanchital de Lazaro Cardenas del Rio', 'country_code' => 'MX'],\n            ['name' => ' Ataq', 'country_code' => 'YE'],\n            ['name' => 'Strood', 'country_code' => 'GB'],\n            ['name' => 'Soteapan', 'country_code' => 'MX'],\n            ['name' => 'Santa Maria Atzompa', 'country_code' => 'MX'],\n            ['name' => 'South Miami Heights', 'country_code' => 'US'],\n            ['name' => 'Prijepolje', 'country_code' => 'RS'],\n            ['name' => 'Al Qunaytirah', 'country_code' => 'SY'],\n            ['name' => 'Chaiyaphum', 'country_code' => 'TH'],\n            ['name' => 'Salt', 'country_code' => 'ES'],\n            ['name' => 'Riccione Marina', 'country_code' => 'IT'],\n            ['name' => 'Swords', 'country_code' => 'IE'],\n            ['name' => 'Aventura', 'country_code' => 'US'],\n            ['name' => 'Park Ridge', 'country_code' => 'US'],\n            ['name' => 'Thonon-les-Bains', 'country_code' => 'FR'],\n            ['name' => 'Tenosique', 'country_code' => 'MX'],\n            ['name' => 'Cernusco sul Naviglio', 'country_code' => 'IT'],\n            ['name' => 'Putla Villa de Guerrero', 'country_code' => 'MX'],\n            ['name' => 'Saint-Mande', 'country_code' => 'FR'],\n            ['name' => 'Falun', 'country_code' => 'SE'],\n            ['name' => 'Letchworth', 'country_code' => 'GB'],\n            ['name' => 'Santa Isabel', 'country_code' => 'MX'],\n            ['name' => 'Ratchaburi', 'country_code' => 'TH'],\n            ['name' => 'Wigston Magna', 'country_code' => 'GB'],\n            ['name' => 'Bezons', 'country_code' => 'FR'],\n            ['name' => 'Clichy-sous-Bois', 'country_code' => 'FR'],\n            ['name' => 'Pinner', 'country_code' => 'GB'],\n            ['name' => 'Karlskrona', 'country_code' => 'SE'],\n            ['name' => 'Ticul', 'country_code' => 'MX'],\n            ['name' => 'Angri', 'country_code' => 'IT'],\n            ['name' => 'Calpulalpan', 'country_code' => 'MX'],\n            ['name' => 'Ebebiyin', 'country_code' => 'GQ'],\n            ['name' => 'Trowbridge', 'country_code' => 'GB'],\n            ['name' => 'Czeladz', 'country_code' => 'PL'],\n            ['name' => 'Rayleigh', 'country_code' => 'GB'],\n            ['name' => 'Roanne', 'country_code' => 'FR'],\n            ['name' => 'West Hollywood', 'country_code' => 'US'],\n            ['name' => 'Earley', 'country_code' => 'GB'],\n            ['name' => 'Paso de Ovejas', 'country_code' => 'MX'],\n            ['name' => 'Agen', 'country_code' => 'FR'],\n            ['name' => 'Bicester', 'country_code' => 'GB'],\n            ['name' => 'Abasolo', 'country_code' => 'MX'],\n            ['name' => 'Paso del Macho', 'country_code' => 'MX'],\n            ['name' => 'Jordan', 'country_code' => 'PH'],\n            ['name' => 'Goba', 'country_code' => 'ET'],\n            ['name' => 'Goycay', 'country_code' => 'AZ'],\n            ['name' => 'Richfield', 'country_code' => 'US'],\n            ['name' => 'Rutherglen', 'country_code' => 'GB'],\n            ['name' => 'Campo Maior', 'country_code' => 'BR'],\n            ['name' => 'Kearns', 'country_code' => 'US'],\n            ['name' => 'Lincoln Park', 'country_code' => 'US'],\n            ['name' => 'Chur', 'country_code' => 'CH'],\n            ['name' => 'Yehud', 'country_code' => 'IL'],\n            ['name' => 'Ryde', 'country_code' => 'GB'],\n            ['name' => 'Amecameca de Juarez', 'country_code' => 'MX'],\n            ['name' => 'Schiltigheim', 'country_code' => 'FR'],\n            ['name' => 'Lichfield', 'country_code' => 'GB'],\n            ['name' => 'Chatou', 'country_code' => 'FR'],\n            ['name' => 'Ecclesfield', 'country_code' => 'GB'],\n            ['name' => 'Ometepec', 'country_code' => 'MX'],\n            ['name' => 'Lauderdale Lakes', 'country_code' => 'US'],\n            ['name' => 'Belleville', 'country_code' => 'US'],\n            ['name' => 'Pontypridd', 'country_code' => 'GB'],\n            ['name' => 'Krong Kep', 'country_code' => 'KH'],\n            ['name' => 'Viry-Chatillon', 'country_code' => 'FR'],\n            ['name' => 'Kornwestheim', 'country_code' => 'DE'],\n            ['name' => 'Minamishiro', 'country_code' => 'JP'],\n            ['name' => 'Prestwich', 'country_code' => 'GB'],\n            ['name' => 'Kamenice', 'country_code' => 'XK'],\n            ['name' => 'Ermont', 'country_code' => 'FR'],\n            ['name' => 'Viborg', 'country_code' => 'DK'],\n            ['name' => 'San Juan Evangelista', 'country_code' => 'MX'],\n            ['name' => 'Gostivar', 'country_code' => 'MK'],\n            ['name' => 'Chirivella', 'country_code' => 'ES'],\n            ['name' => 'Watertown Town', 'country_code' => 'US'],\n            ['name' => 'Beja', 'country_code' => 'PT'],\n            ['name' => 'Foothill Farms', 'country_code' => 'US'],\n            ['name' => 'Vrsac', 'country_code' => 'RS'],\n            ['name' => 'Paranaiba', 'country_code' => 'BR'],\n            ['name' => 'Maassluis', 'country_code' => 'NL'],\n            ['name' => 'Romainville', 'country_code' => 'FR'],\n            ['name' => 'Elmont', 'country_code' => 'US'],\n            ['name' => 'Brighouse', 'country_code' => 'GB'],\n            ['name' => 'Temple City', 'country_code' => 'US'],\n            ['name' => 'Farnworth', 'country_code' => 'GB'],\n            ['name' => 'Villaricca', 'country_code' => 'IT'],\n            ['name' => 'La Asuncion', 'country_code' => 'VE'],\n            ['name' => 'Cradock', 'country_code' => 'ZA'],\n            ['name' => 'Stroud', 'country_code' => 'GB'],\n            ['name' => 'Darwen', 'country_code' => 'GB'],\n            ['name' => 'Chuhuiv', 'country_code' => 'UA'],\n            ['name' => 'Fresnes', 'country_code' => 'FR'],\n            ['name' => 'Montigny-le-Bretonneux', 'country_code' => 'FR'],\n            ['name' => 'Ixtapan de la Sal', 'country_code' => 'MX'],\n            ['name' => 'Aosta', 'country_code' => 'IT'],\n            ['name' => 'Tancitaro', 'country_code' => 'MX'],\n            ['name' => 'Ganshoren', 'country_code' => 'BE'],\n            ['name' => 'Dover', 'country_code' => 'GB'],\n            ['name' => 'Timbuktu', 'country_code' => 'ML'],\n            ['name' => 'Chillum', 'country_code' => 'US'],\n            ['name' => 'Bexleyheath', 'country_code' => 'GB'],\n            ['name' => 'Les Mureaux', 'country_code' => 'FR'],\n            ['name' => 'Byumba', 'country_code' => 'RW'],\n            ['name' => 'Bell', 'country_code' => 'US'],\n            ['name' => 'Taibao', 'country_code' => 'TW'],\n            ['name' => 'Roi Et', 'country_code' => 'TH'],\n            ['name' => 'Villanueva', 'country_code' => 'MX'],\n            ['name' => 'Talas', 'country_code' => 'KG'],\n            ['name' => 'Champoton', 'country_code' => 'MX'],\n            ['name' => 'Nelson', 'country_code' => 'GB'],\n            ['name' => 'Braganca', 'country_code' => 'PT'],\n            ['name' => 'Phatthalung', 'country_code' => 'TH'],\n            ['name' => 'Neuchatel', 'country_code' => 'CH'],\n            ['name' => 'Huyton', 'country_code' => 'GB'],\n            ['name' => 'Sestao', 'country_code' => 'ES'],\n            ['name' => 'Santa Cruz del Quiche', 'country_code' => 'GT'],\n            ['name' => 'Westmont', 'country_code' => 'US'],\n            ['name' => 'Luebo', 'country_code' => 'CD'],\n            ['name' => 'Bria', 'country_code' => 'CF'],\n            ['name' => 'San Donato Milanese', 'country_code' => 'IT'],\n            ['name' => 'Nea Filadelfeia', 'country_code' => 'GR'],\n            ['name' => 'Manhattan Beach', 'country_code' => 'US'],\n            ['name' => 'Pontoise', 'country_code' => 'FR'],\n            ['name' => 'Vigneux-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Artvin', 'country_code' => 'TR'],\n            ['name' => 'Maidan Shahr', 'country_code' => 'AF'],\n            ['name' => 'Giv at Shemu el', 'country_code' => 'IL'],\n            ['name' => 'Bussum', 'country_code' => 'NL'],\n            ['name' => 'Catemaco', 'country_code' => 'MX'],\n            ['name' => 'Villiers-sur-Marne', 'country_code' => 'FR'],\n            ['name' => 'Marijampole', 'country_code' => 'LT'],\n            ['name' => 'San Pedro de Ycuamandiyu', 'country_code' => 'PY'],\n            ['name' => 'Dikhil', 'country_code' => 'DJ'],\n            ['name' => 'Ocotal', 'country_code' => 'NI'],\n            ['name' => 'Trappes', 'country_code' => 'FR'],\n            ['name' => 'Santa Maria Capua Vetere', 'country_code' => 'IT'],\n            ['name' => 'Englewood', 'country_code' => 'US'],\n            ['name' => 'Mechraa Bel Ksiri', 'country_code' => 'MA'],\n            ['name' => 'Kampong Thom', 'country_code' => 'KH'],\n            ['name' => 'San Salvador El Seco', 'country_code' => 'MX'],\n            ['name' => 'Dragash', 'country_code' => 'XK'],\n            ['name' => 'Naryn', 'country_code' => 'KG'],\n            ['name' => 'Beidaying', 'country_code' => 'CN'],\n            ['name' => 'Lahij', 'country_code' => 'YE'],\n            ['name' => 'Buenaventura Lakes', 'country_code' => 'US'],\n            ['name' => 'Oildale', 'country_code' => 'US'],\n            ['name' => 'Pompeu', 'country_code' => 'BR'],\n            ['name' => 'Ciudad Sabinas Hidalgo', 'country_code' => 'MX'],\n            ['name' => 'Fontenay-aux-Roses', 'country_code' => 'FR'],\n            ['name' => 'Kalasin', 'country_code' => 'TH'],\n            ['name' => 'Saint Neots', 'country_code' => 'GB'],\n            ['name' => 'Villa Celina', 'country_code' => 'AR'],\n            ['name' => 'Grigny', 'country_code' => 'FR'],\n            ['name' => 'Jacmel', 'country_code' => 'HT'],\n            ['name' => 'Swakopmund', 'country_code' => 'NA'],\n            ['name' => 'Barra do Bugres', 'country_code' => 'BR'],\n            ['name' => 'Azogues', 'country_code' => 'EC'],\n            ['name' => 'Huatabampo', 'country_code' => 'MX'],\n            ['name' => 'Gentilly', 'country_code' => 'FR'],\n            ['name' => 'Escarcega', 'country_code' => 'MX'],\n            ['name' => 'Norristown', 'country_code' => 'US'],\n            ['name' => 'Montgomery Village', 'country_code' => 'US'],\n            ['name' => 'Swadlincote', 'country_code' => 'GB'],\n            ['name' => 'Wishaw', 'country_code' => 'GB'],\n            ['name' => 'Deal', 'country_code' => 'GB'],\n            ['name' => 'Cananea', 'country_code' => 'MX'],\n            ['name' => 'Homa Bay', 'country_code' => 'KE'],\n            ['name' => 'Aldaya', 'country_code' => 'ES'],\n            ['name' => 'Le Chesnay', 'country_code' => 'FR'],\n            ['name' => 'Bor', 'country_code' => 'RS'],\n            ['name' => 'Busia', 'country_code' => 'KE'],\n            ['name' => 'University City', 'country_code' => 'US'],\n            ['name' => 'Borehamwood', 'country_code' => 'GB'],\n            ['name' => 'Fushe Kosove', 'country_code' => 'XK'],\n            ['name' => 'Midvale', 'country_code' => 'US'],\n            ['name' => 'Lens', 'country_code' => 'FR'],\n            ['name' => 'Uttaradit', 'country_code' => 'TH'],\n            ['name' => 'Golden Glades', 'country_code' => 'US'],\n            ['name' => 'Nykoping', 'country_code' => 'SE'],\n            ['name' => 'Kakata', 'country_code' => 'LR'],\n            ['name' => 'Bresso', 'country_code' => 'IT'],\n            ['name' => 'Ventspils', 'country_code' => 'LV'],\n            ['name' => 'Chester', 'country_code' => 'US'],\n            ['name' => 'Kampong Speu', 'country_code' => 'KH'],\n            ['name' => 'Zhaoyu', 'country_code' => 'CN'],\n            ['name' => 'Fada Ngourma', 'country_code' => 'BF'],\n            ['name' => 'Saint-Cloud', 'country_code' => 'FR'],\n            ['name' => 'Barros Blancos', 'country_code' => 'UY'],\n            ['name' => 'Salgotarjan', 'country_code' => 'HU'],\n            ['name' => 'Foster City', 'country_code' => 'US'],\n            ['name' => 'San Giuseppe Vesuviano', 'country_code' => 'IT'],\n            ['name' => 'Pontefract', 'country_code' => 'GB'],\n            ['name' => 'Beverly Hills', 'country_code' => 'US'],\n            ['name' => 'Ciudad Sahagun', 'country_code' => 'MX'],\n            ['name' => 'Sidi Smai il', 'country_code' => 'MA'],\n            ['name' => 'Willenhall', 'country_code' => 'GB'],\n            ['name' => 'Chumphon', 'country_code' => 'TH'],\n            ['name' => 'Masindi', 'country_code' => 'UG'],\n            ['name' => 'Thiais', 'country_code' => 'FR'],\n            ['name' => 'Glendale Heights', 'country_code' => 'US'],\n            ['name' => 'Bilwi', 'country_code' => 'NI'],\n            ['name' => 'Hendrik-Ido-Ambacht', 'country_code' => 'NL'],\n            ['name' => 'Fair Oaks', 'country_code' => 'US'],\n            ['name' => 'Kacanik', 'country_code' => 'XK'],\n            ['name' => 'Long Beach', 'country_code' => 'US'],\n            ['name' => 'Longton', 'country_code' => 'GB'],\n            ['name' => 'Plympton', 'country_code' => 'GB'],\n            ['name' => 'Sisak', 'country_code' => 'HR'],\n            ['name' => 'Birkirkara', 'country_code' => 'MT'],\n            ['name' => 'Koh Kong', 'country_code' => 'KH'],\n            ['name' => 'Paiporta', 'country_code' => 'ES'],\n            ['name' => 'Kyrenia', 'country_code' => 'CY'],\n            ['name' => 'Goussainville', 'country_code' => 'FR'],\n            ['name' => 'Juticalpa', 'country_code' => 'HN'],\n            ['name' => 'Bromsgrove', 'country_code' => 'GB'],\n            ['name' => 'Mukdahan', 'country_code' => 'TH'],\n            ['name' => 'Adrogue', 'country_code' => 'AR'],\n            ['name' => 'Vandoeuvre-les-Nancy', 'country_code' => 'FR'],\n            ['name' => 'Lievin', 'country_code' => 'FR'],\n            ['name' => 'Bulwell', 'country_code' => 'GB'],\n            ['name' => 'Perigueux', 'country_code' => 'FR'],\n            ['name' => 'Rincon de Romos', 'country_code' => 'MX'],\n            ['name' => 'Kericho', 'country_code' => 'KE'],\n            ['name' => 'Eastchester', 'country_code' => 'US'],\n            ['name' => 'Pilar', 'country_code' => 'PY'],\n            ['name' => 'Dagestanskiye Ogni', 'country_code' => 'RU'],\n            ['name' => 'Kokhma', 'country_code' => 'RU'],\n            ['name' => 'Reddish', 'country_code' => 'GB'],\n            ['name' => 'West Little River', 'country_code' => 'US'],\n            ['name' => 'Fair Lawn', 'country_code' => 'US'],\n            ['name' => 'Sint-Joost-ten-Node', 'country_code' => 'BE'],\n            ['name' => 'Zumpango del Rio', 'country_code' => 'MX'],\n            ['name' => 'Durango', 'country_code' => 'ES'],\n            ['name' => 'Aci Catena', 'country_code' => 'IT'],\n            ['name' => 'Huntington Station', 'country_code' => 'US'],\n            ['name' => 'Sotteville-les-Rouen', 'country_code' => 'FR'],\n            ['name' => 'Chkalov', 'country_code' => 'TJ'],\n            ['name' => 'Un goofaaru', 'country_code' => 'MV'],\n            ['name' => 'Harper', 'country_code' => 'LR'],\n            ['name' => 'Santiago Sacatepequez', 'country_code' => 'GT'],\n            ['name' => 'Cramlington', 'country_code' => 'GB'],\n            ['name' => 'Krimpen aan den IJssel', 'country_code' => 'NL'],\n            ['name' => 'Ris-Orangis', 'country_code' => 'FR'],\n            ['name' => 'Ban Bang Krang', 'country_code' => 'TH'],\n            ['name' => 'San Andres de la Barca', 'country_code' => 'ES'],\n            ['name' => 'North Providence', 'country_code' => 'US'],\n            ['name' => 'Mazeikiai', 'country_code' => 'LT'],\n            ['name' => 'Savigny-le-Temple', 'country_code' => 'FR'],\n            ['name' => 'Soledad de Doblado', 'country_code' => 'MX'],\n            ['name' => 'Kendal', 'country_code' => 'GB'],\n            ['name' => 'Leticia', 'country_code' => 'CO'],\n            ['name' => 'Cote-Saint-Luc', 'country_code' => 'CA'],\n            ['name' => 'Perry Barr', 'country_code' => 'GB'],\n            ['name' => 'Mandera', 'country_code' => 'KE'],\n            ['name' => 'Lawndale', 'country_code' => 'US'],\n            ['name' => 'Yverdon-les-Bains', 'country_code' => 'CH'],\n            ['name' => 'Oullins', 'country_code' => 'FR'],\n            ['name' => 'Bou Arfa', 'country_code' => 'MA'],\n            ['name' => 'Kitui', 'country_code' => 'KE'],\n            ['name' => 'Mount Lebanon', 'country_code' => 'US'],\n            ['name' => 'Spring Valley', 'country_code' => 'US'],\n            ['name' => 'Otumba', 'country_code' => 'MX'],\n            ['name' => 'Bangassou', 'country_code' => 'CF'],\n            ['name' => 'Cambuslang', 'country_code' => 'GB'],\n            ['name' => 'Chachapoyas', 'country_code' => 'PE'],\n            ['name' => 'Darlaston', 'country_code' => 'GB'],\n            ['name' => 'Baranain', 'country_code' => 'ES'],\n            ['name' => 'West Ham', 'country_code' => 'GB'],\n            ['name' => 'Sannois', 'country_code' => 'FR'],\n            ['name' => 'Aix-les-Bains', 'country_code' => 'FR'],\n            ['name' => 'Les Pavillons-sous-Bois', 'country_code' => 'FR'],\n            ['name' => 'College Park', 'country_code' => 'US'],\n            ['name' => 'Arfoud', 'country_code' => 'MA'],\n            ['name' => 'Rumbek', 'country_code' => 'SS'],\n            ['name' => 'Szekszard', 'country_code' => 'HU'],\n            ['name' => 'Rillieux-la-Pape', 'country_code' => 'FR'],\n            ['name' => 'Boende', 'country_code' => 'CD'],\n            ['name' => 'Alamo', 'country_code' => 'MX'],\n            ['name' => 'Lambersart', 'country_code' => 'FR'],\n            ['name' => 'Eastpointe', 'country_code' => 'US'],\n            ['name' => 'Franklin Square', 'country_code' => 'US'],\n            ['name' => 'Yerres', 'country_code' => 'FR'],\n            ['name' => 'Uniondale', 'country_code' => 'US'],\n            ['name' => 'Juneau', 'country_code' => 'US'],\n            ['name' => 'Ulundi', 'country_code' => 'ZA'],\n            ['name' => 'Molde', 'country_code' => 'NO'],\n            ['name' => 'Zug', 'country_code' => 'CH'],\n            ['name' => 'Kaita', 'country_code' => 'JP'],\n            ['name' => 'San Juan', 'country_code' => 'CR'],\n            ['name' => 'Cuitzeo del Porvenir', 'country_code' => 'MX'],\n            ['name' => 'Demnat', 'country_code' => 'MA'],\n            ['name' => 'Navolato', 'country_code' => 'MX'],\n            ['name' => 'Bourg-la-Reine', 'country_code' => 'FR'],\n            ['name' => 'Jeremie', 'country_code' => 'HT'],\n            ['name' => 'Rawson', 'country_code' => 'AR'],\n            ['name' => 'Garfield', 'country_code' => 'US'],\n            ['name' => 'El Salto', 'country_code' => 'MX'],\n            ['name' => 'Gizycko', 'country_code' => 'PL'],\n            ['name' => 'Shumerlya', 'country_code' => 'RU'],\n            ['name' => 'Montfermeil', 'country_code' => 'FR'],\n            ['name' => 'Shariff Aguak', 'country_code' => 'PH'],\n            ['name' => 'Clifton', 'country_code' => 'GB'],\n            ['name' => 'Babati', 'country_code' => 'TZ'],\n            ['name' => 'Wood Green', 'country_code' => 'GB'],\n            ['name' => 'Chon Buri', 'country_code' => 'TH'],\n            ['name' => 'Frome', 'country_code' => 'GB'],\n            ['name' => 'Smolyan', 'country_code' => 'BG'],\n            ['name' => 'Begles', 'country_code' => 'FR'],\n            ['name' => 'Pallisa', 'country_code' => 'UG'],\n            ['name' => 'Dieppe', 'country_code' => 'FR'],\n            ['name' => 'Villiers-le-Bel', 'country_code' => 'FR'],\n            ['name' => 'Ipu', 'country_code' => 'BR'],\n            ['name' => 'Parkville', 'country_code' => 'US'],\n            ['name' => 'Zaqatala', 'country_code' => 'AZ'],\n            ['name' => 'Miami Lakes', 'country_code' => 'US'],\n            ['name' => 'San Fernando', 'country_code' => 'MX'],\n            ['name' => 'Imisli', 'country_code' => 'AZ'],\n            ['name' => 'Newton Abbot', 'country_code' => 'GB'],\n            ['name' => 'Pefki', 'country_code' => 'GR'],\n            ['name' => 'Contla', 'country_code' => 'MX'],\n            ['name' => 'Hertford', 'country_code' => 'GB'],\n            ['name' => 'Brevnov', 'country_code' => 'CZ'],\n            ['name' => 'Villeneuve-la-Garenne', 'country_code' => 'FR'],\n            ['name' => 'Saint-Laurent-du-Var', 'country_code' => 'FR'],\n            ['name' => 'Blackrock', 'country_code' => 'IE'],\n            ['name' => 'Limeil-Brevannes', 'country_code' => 'FR'],\n            ['name' => 'Ban Bang Khu Wat', 'country_code' => 'TH'],\n            ['name' => 'Pando', 'country_code' => 'UY'],\n            ['name' => 'Ridley', 'country_code' => 'US'],\n            ['name' => 'Menton', 'country_code' => 'FR'],\n            ['name' => 'Wete', 'country_code' => 'TZ'],\n            ['name' => 'Mytilini', 'country_code' => 'GR'],\n            ['name' => 'Udomlya', 'country_code' => 'RU'],\n            ['name' => 'Arendal', 'country_code' => 'NO'],\n            ['name' => 'Nebbi', 'country_code' => 'UG'],\n            ['name' => 'Ashington', 'country_code' => 'GB'],\n            ['name' => 'Cuilapa', 'country_code' => 'GT'],\n            ['name' => 'Desnogorsk', 'country_code' => 'RU'],\n            ['name' => 'Martorell', 'country_code' => 'ES'],\n            ['name' => 'Lomme', 'country_code' => 'FR'],\n            ['name' => 'Diffa', 'country_code' => 'NE'],\n            ['name' => 'San Pablo', 'country_code' => 'US'],\n            ['name' => 'Rhyl', 'country_code' => 'GB'],\n            ['name' => 'Tuxpan', 'country_code' => 'MX'],\n            ['name' => 'Ungheni', 'country_code' => 'MD'],\n            ['name' => 'Guyancourt', 'country_code' => 'FR'],\n            ['name' => 'Burlingame', 'country_code' => 'US'],\n            ['name' => 'Tripoli', 'country_code' => 'GR'],\n            ['name' => 'Cakovec', 'country_code' => 'HR'],\n            ['name' => 'Sonzacate', 'country_code' => 'SV'],\n            ['name' => 'Soissons', 'country_code' => 'FR'],\n            ['name' => 'Masnou', 'country_code' => 'ES'],\n            ['name' => 'Arcueil', 'country_code' => 'FR'],\n            ['name' => 'Longbridge', 'country_code' => 'GB'],\n            ['name' => 'Bregenz', 'country_code' => 'AT'],\n            ['name' => 'Rainham', 'country_code' => 'GB'],\n            ['name' => 'Pljevlja', 'country_code' => 'ME'],\n            ['name' => 'Catarroja', 'country_code' => 'ES'],\n            ['name' => 'Eaubonne', 'country_code' => 'FR'],\n            ['name' => 'Lobatse', 'country_code' => 'BW'],\n            ['name' => 'Megrine', 'country_code' => 'TN'],\n            ['name' => 'Cabarroguis', 'country_code' => 'PH'],\n            ['name' => 'Yate', 'country_code' => 'GB'],\n            ['name' => 'Melton Mowbray', 'country_code' => 'GB'],\n            ['name' => 'Krabi', 'country_code' => 'TH'],\n            ['name' => 'Xalisco', 'country_code' => 'MX'],\n            ['name' => 'Carouge', 'country_code' => 'CH'],\n            ['name' => 'Avellaneda', 'country_code' => 'AR'],\n            ['name' => 'Oceanside', 'country_code' => 'US'],\n            ['name' => 'Ain Taoujdat', 'country_code' => 'MA'],\n            ['name' => 'Ninomiya', 'country_code' => 'JP'],\n            ['name' => 'Asosa', 'country_code' => 'ET'],\n            ['name' => 'Tomares', 'country_code' => 'ES'],\n            ['name' => 'Nova Cruz', 'country_code' => 'BR'],\n            ['name' => 'Boscombe', 'country_code' => 'GB'],\n            ['name' => 'Ketrzyn', 'country_code' => 'PL'],\n            ['name' => 'City of Orange', 'country_code' => 'US'],\n            ['name' => 'Qiman al  Arus', 'country_code' => 'EG'],\n            ['name' => 'Salyan', 'country_code' => 'AZ'],\n            ['name' => 'Barnstaple', 'country_code' => 'GB'],\n            ['name' => 'Bearsden', 'country_code' => 'GB'],\n            ['name' => 'Heredia', 'country_code' => 'CR'],\n            ['name' => 'Boscoreale', 'country_code' => 'IT'],\n            ['name' => 'Chichester', 'country_code' => 'GB'],\n            ['name' => 'Newton Mearns', 'country_code' => 'GB'],\n            ['name' => 'Jaynagar-Majilpur', 'country_code' => 'IN'],\n            ['name' => 'Geldrop', 'country_code' => 'NL'],\n            ['name' => 'Sterling', 'country_code' => 'US'],\n            ['name' => 'Jamay', 'country_code' => 'MX'],\n            ['name' => 'Long Branch', 'country_code' => 'US'],\n            ['name' => 'Santa Paula', 'country_code' => 'US'],\n            ['name' => 'Banqiao', 'country_code' => 'TW'],\n            ['name' => 'Mount Hagen', 'country_code' => 'PG'],\n            ['name' => 'Chatan', 'country_code' => 'JP'],\n            ['name' => 'San Carlos', 'country_code' => 'US'],\n            ['name' => 'Garbagnate Milanese', 'country_code' => 'IT'],\n            ['name' => 'Vicente Lopez', 'country_code' => 'AR'],\n            ['name' => 'Bilston', 'country_code' => 'GB'],\n            ['name' => 'Mutsamudu', 'country_code' => 'KM'],\n            ['name' => 'Cahul', 'country_code' => 'MD'],\n            ['name' => 'Heemstede', 'country_code' => 'NL'],\n            ['name' => 'Los Reyes de Juarez', 'country_code' => 'MX'],\n            ['name' => 'Didcot', 'country_code' => 'GB'],\n            ['name' => 'Ojinaga', 'country_code' => 'MX'],\n            ['name' => 'Shotley Bridge', 'country_code' => 'GB'],\n            ['name' => 'Stepney', 'country_code' => 'GB'],\n            ['name' => 'Dubendorf', 'country_code' => 'CH'],\n            ['name' => 'Billericay', 'country_code' => 'GB'],\n            ['name' => 'Trujillo', 'country_code' => 'HN'],\n            ['name' => 'Moyale', 'country_code' => 'KE'],\n            ['name' => 'La Union', 'country_code' => 'SV'],\n            ['name' => 'Treinta y Tres', 'country_code' => 'UY'],\n            ['name' => 'Stung Treng', 'country_code' => 'KH'],\n            ['name' => 'Bournville', 'country_code' => 'GB'],\n            ['name' => 'Rahway', 'country_code' => 'US'],\n            ['name' => 'Tahla', 'country_code' => 'MA'],\n            ['name' => 'Camas', 'country_code' => 'ES'],\n            ['name' => 'Armilla', 'country_code' => 'ES'],\n            ['name' => 'Dietikon', 'country_code' => 'CH'],\n            ['name' => 'Otjiwarongo', 'country_code' => 'NA'],\n            ['name' => 'Bay Shore', 'country_code' => 'US'],\n            ['name' => 'Leyton', 'country_code' => 'GB'],\n            ['name' => 'Tralee', 'country_code' => 'IE'],\n            ['name' => 'Newton Aycliffe', 'country_code' => 'GB'],\n            ['name' => 'Westchester', 'country_code' => 'US'],\n            ['name' => 'Kaisariani', 'country_code' => 'GR'],\n            ['name' => 'Walton upon Thames', 'country_code' => 'GB'],\n            ['name' => 'Eastleigh', 'country_code' => 'GB'],\n            ['name' => 'Agdas', 'country_code' => 'AZ'],\n            ['name' => 'Doba', 'country_code' => 'TD'],\n            ['name' => 'Suisun City', 'country_code' => 'US'],\n            ['name' => 'Arapoti', 'country_code' => 'BR'],\n            ['name' => 'Chiavari', 'country_code' => 'IT'],\n            ['name' => 'Cheadle Hulme', 'country_code' => 'GB'],\n            ['name' => 'Cardito', 'country_code' => 'IT'],\n            ['name' => 'West Falls Church', 'country_code' => 'US'],\n            ['name' => 'Nuwara Eliya', 'country_code' => 'LK'],\n            ['name' => 'Frontera', 'country_code' => 'MX'],\n            ['name' => 'Katima Mulilo', 'country_code' => 'NA'],\n            ['name' => 'Golden Gate', 'country_code' => 'US'],\n            ['name' => 'Hindley', 'country_code' => 'GB'],\n            ['name' => 'Mortsel', 'country_code' => 'BE'],\n            ['name' => 'Villeparisis', 'country_code' => 'FR'],\n            ['name' => 'Haverhill', 'country_code' => 'GB'],\n            ['name' => 'Bac Kan', 'country_code' => 'VN'],\n            ['name' => 'Backa Palanka', 'country_code' => 'RS'],\n            ['name' => 'Brunoy', 'country_code' => 'FR'],\n            ['name' => 'Nogales', 'country_code' => 'MX'],\n            ['name' => 'Chalatenango', 'country_code' => 'SV'],\n            ['name' => 'Venustiano Carranza', 'country_code' => 'MX'],\n            ['name' => 'Northfield', 'country_code' => 'GB'],\n            ['name' => 'Burntwood', 'country_code' => 'GB'],\n            ['name' => 'Westhoughton', 'country_code' => 'GB'],\n            ['name' => 'Sevres', 'country_code' => 'FR'],\n            ['name' => 'Oak Park', 'country_code' => 'US'],\n            ['name' => 'Linden', 'country_code' => 'GY'],\n            ['name' => 'Rocha', 'country_code' => 'UY'],\n            ['name' => 'Ixhuatlancillo', 'country_code' => 'MX'],\n            ['name' => 'Estoril', 'country_code' => 'PT'],\n            ['name' => 'Santa Barbara', 'country_code' => 'HN'],\n            ['name' => 'Khorugh', 'country_code' => 'TJ'],\n            ['name' => 'Bussy-Saint-Georges', 'country_code' => 'FR'],\n            ['name' => 'Colonia del Sacramento', 'country_code' => 'UY'],\n            ['name' => 'Hillerod', 'country_code' => 'DK'],\n            ['name' => 'Kamphaeng Phet', 'country_code' => 'TH'],\n            ['name' => 'Tulum', 'country_code' => 'MX'],\n            ['name' => 'Saint-Gratien', 'country_code' => 'FR'],\n            ['name' => 'East Palo Alto', 'country_code' => 'US'],\n            ['name' => 'Cenon', 'country_code' => 'FR'],\n            ['name' => 'Leiderdorp', 'country_code' => 'NL'],\n            ['name' => 'Camaligan', 'country_code' => 'PH'],\n            ['name' => 'Paracuaro', 'country_code' => 'MX'],\n            ['name' => 'Qualiano', 'country_code' => 'IT'],\n            ['name' => 'Saint-Sebastien-sur-Loire', 'country_code' => 'FR'],\n            ['name' => 'Sai Mai', 'country_code' => 'TH'],\n            ['name' => 'Port Chester', 'country_code' => 'US'],\n            ['name' => 'Samut Songkhram', 'country_code' => 'TH'],\n            ['name' => 'Miahuatlan', 'country_code' => 'MX'],\n            ['name' => 'Sucy-en-Brie', 'country_code' => 'FR'],\n            ['name' => 'Leigh-on-Sea', 'country_code' => 'GB'],\n            ['name' => 'Penonome', 'country_code' => 'PA'],\n            ['name' => 'Taverny', 'country_code' => 'FR'],\n            ['name' => 'Qaha', 'country_code' => 'EG'],\n            ['name' => 'Clydebank', 'country_code' => 'GB'],\n            ['name' => 'La Madeleine', 'country_code' => 'FR'],\n            ['name' => 'Hunucma', 'country_code' => 'MX'],\n            ['name' => 'Armentieres', 'country_code' => 'FR'],\n            ['name' => 'Buri Ram', 'country_code' => 'TH'],\n            ['name' => 'Manga', 'country_code' => 'BF'],\n            ['name' => 'Olgiy', 'country_code' => 'MN'],\n            ['name' => 'Vallauris', 'country_code' => 'FR'],\n            ['name' => 'Dollis Hill', 'country_code' => 'GB'],\n            ['name' => 'Wellington', 'country_code' => 'GB'],\n            ['name' => 'Mendefera', 'country_code' => 'ER'],\n            ['name' => 'Consett', 'country_code' => 'GB'],\n            ['name' => 'Champs-Sur-Marne', 'country_code' => 'FR'],\n            ['name' => 'Droylsden', 'country_code' => 'GB'],\n            ['name' => 'Rafael Delgado', 'country_code' => 'MX'],\n            ['name' => 'Nutley', 'country_code' => 'US'],\n            ['name' => 'Blenheim', 'country_code' => 'NZ'],\n            ['name' => 'Giussano', 'country_code' => 'IT'],\n            ['name' => 'Shamokin', 'country_code' => 'US'],\n            ['name' => 'Tapiales', 'country_code' => 'AR'],\n            ['name' => 'Kocani', 'country_code' => 'MK'],\n            ['name' => 'Vichy', 'country_code' => 'FR'],\n            ['name' => 'Rezekne', 'country_code' => 'LV'],\n            ['name' => 'Elancourt', 'country_code' => 'FR'],\n            ['name' => 'Englewood', 'country_code' => 'US'],\n            ['name' => 'Oegstgeest', 'country_code' => 'NL'],\n            ['name' => 'Mitu', 'country_code' => 'CO'],\n            ['name' => 'Balham', 'country_code' => 'GB'],\n            ['name' => 'Le Bouscat', 'country_code' => 'FR'],\n            ['name' => 'Harborne', 'country_code' => 'GB'],\n            ['name' => 'Shenley Brook End', 'country_code' => 'GB'],\n            ['name' => 'Burbank', 'country_code' => 'US'],\n            ['name' => 'Bloxwich', 'country_code' => 'GB'],\n            ['name' => 'Alencon', 'country_code' => 'FR'],\n            ['name' => 'Zawyat ech Cheikh', 'country_code' => 'MA'],\n            ['name' => 'Caxito', 'country_code' => 'AO'],\n            ['name' => 'Upminster', 'country_code' => 'GB'],\n            ['name' => 'Vevey', 'country_code' => 'CH'],\n            ['name' => 'Zaouiet Sousse', 'country_code' => 'TN'],\n            ['name' => 'Tixtla de Guerrero', 'country_code' => 'MX'],\n            ['name' => 'Winchester', 'country_code' => 'US'],\n            ['name' => 'Popondetta', 'country_code' => 'PG'],\n            ['name' => 'Deuil-la-Barre', 'country_code' => 'FR'],\n            ['name' => 'Ouesso', 'country_code' => 'CG'],\n            ['name' => 'Littleover', 'country_code' => 'GB'],\n            ['name' => 'Fleetwood', 'country_code' => 'GB'],\n            ['name' => 'Highgate', 'country_code' => 'GB'],\n            ['name' => 'Market Harborough', 'country_code' => 'GB'],\n            ['name' => 'Missour', 'country_code' => 'MA'],\n            ['name' => 'Aldama', 'country_code' => 'MX'],\n            ['name' => 'Altepexi', 'country_code' => 'MX'],\n            ['name' => 'Mons-en-Baroeul', 'country_code' => 'FR'],\n            ['name' => 'Losino-Petrovskiy', 'country_code' => 'RU'],\n            ['name' => 'Oadby', 'country_code' => 'GB'],\n            ['name' => 'Hamar', 'country_code' => 'NO'],\n            ['name' => 'Le Grand-Quevilly', 'country_code' => 'FR'],\n            ['name' => 'Melrose', 'country_code' => 'US'],\n            ['name' => 'Itambe', 'country_code' => 'BR'],\n            ['name' => 'Ocatlan', 'country_code' => 'MX'],\n            ['name' => 'Joinville-le-Pont', 'country_code' => 'FR'],\n            ['name' => 'Renens', 'country_code' => 'CH'],\n            ['name' => 'Erdington', 'country_code' => 'GB'],\n            ['name' => 'Drexel Hill', 'country_code' => 'US'],\n            ['name' => 'Muggio', 'country_code' => 'IT'],\n            ['name' => 'Ban Bang Phun', 'country_code' => 'TH'],\n            ['name' => 'Bongor', 'country_code' => 'TD'],\n            ['name' => 'Saint-Nicolas', 'country_code' => 'BE'],\n            ['name' => 'Mongo', 'country_code' => 'TD'],\n            ['name' => 'Penarth', 'country_code' => 'GB'],\n            ['name' => 'Acomb', 'country_code' => 'GB'],\n            ['name' => 'Dunleary', 'country_code' => 'IE'],\n            ['name' => 'Koulikoro', 'country_code' => 'ML'],\n            ['name' => 'Koper', 'country_code' => 'SI'],\n            ['name' => 'Alboraya', 'country_code' => 'ES'],\n            ['name' => 'Isla Vista', 'country_code' => 'US'],\n            ['name' => 'Don Bosco', 'country_code' => 'AR'],\n            ['name' => 'Tantoyuca', 'country_code' => 'MX'],\n            ['name' => 'Portishead', 'country_code' => 'GB'],\n            ['name' => 'Kicevo', 'country_code' => 'MK'],\n            ['name' => 'Velenje', 'country_code' => 'SI'],\n            ['name' => 'Biarritz', 'country_code' => 'FR'],\n            ['name' => 'Rehoboth', 'country_code' => 'NA'],\n            ['name' => 'Mililani Town', 'country_code' => 'US'],\n            ['name' => 'Bethune', 'country_code' => 'FR'],\n            ['name' => 'Ciudad Altamirano', 'country_code' => 'MX'],\n            ['name' => 'Caversham', 'country_code' => 'GB'],\n            ['name' => 'Kings Norton', 'country_code' => 'GB'],\n            ['name' => 'Imperial Beach', 'country_code' => 'US'],\n            ['name' => 'Magdalena de Kino', 'country_code' => 'MX'],\n            ['name' => 'Al Ghayzah', 'country_code' => 'YE'],\n            ['name' => 'Seriate', 'country_code' => 'IT'],\n            ['name' => 'Shtime', 'country_code' => 'XK'],\n            ['name' => 'Orly', 'country_code' => 'FR'],\n            ['name' => 'Hackney', 'country_code' => 'GB'],\n            ['name' => 'Bishopbriggs', 'country_code' => 'GB'],\n            ['name' => 'Piastow', 'country_code' => 'PL'],\n            ['name' => 'Bergenfield', 'country_code' => 'US'],\n            ['name' => 'Nova Milanese', 'country_code' => 'IT'],\n            ['name' => 'Thornaby on Tees', 'country_code' => 'GB'],\n            ['name' => 'Ladera Ranch', 'country_code' => 'US'],\n            ['name' => 'Neuilly-Plaisance', 'country_code' => 'FR'],\n            ['name' => 'Stalybridge', 'country_code' => 'GB'],\n            ['name' => 'Cerro Azul', 'country_code' => 'MX'],\n            ['name' => 'Pompei', 'country_code' => 'IT'],\n            ['name' => 'Kingswinford', 'country_code' => 'GB'],\n            ['name' => 'San Juan de Aznalfarache', 'country_code' => 'ES'],\n            ['name' => 'Easton', 'country_code' => 'US'],\n            ['name' => 'Priboj', 'country_code' => 'RS'],\n            ['name' => 'Xoxocotla', 'country_code' => 'MX'],\n            ['name' => 'Maisons-Laffitte', 'country_code' => 'FR'],\n            ['name' => 'Siquijor', 'country_code' => 'PH'],\n            ['name' => 'Indiana', 'country_code' => 'US'],\n            ['name' => 'Farnley', 'country_code' => 'GB'],\n            ['name' => 'Sensuntepeque', 'country_code' => 'SV'],\n            ['name' => 'Le Petit-Quevilly', 'country_code' => 'FR'],\n            ['name' => 'Sliema', 'country_code' => 'MT'],\n            ['name' => 'Cormeilles-en-Parisis', 'country_code' => 'FR'],\n            ['name' => 'Siliana', 'country_code' => 'TN'],\n            ['name' => 'Catio', 'country_code' => 'GW'],\n            ['name' => 'Reisterstown', 'country_code' => 'US'],\n            ['name' => 'Chapala', 'country_code' => 'MX'],\n            ['name' => 'Weingarten', 'country_code' => 'DE'],\n            ['name' => 'Maywood', 'country_code' => 'US'],\n            ['name' => 'Belmont', 'country_code' => 'US'],\n            ['name' => 'Alfreton', 'country_code' => 'GB'],\n            ['name' => 'Montigny-les-Cormeilles', 'country_code' => 'FR'],\n            ['name' => 'Atlatlahucan', 'country_code' => 'MX'],\n            ['name' => 'San Juan de Alicante', 'country_code' => 'ES'],\n            ['name' => 'Elgin', 'country_code' => 'GB'],\n            ['name' => 'Koscian', 'country_code' => 'PL'],\n            ['name' => 'Nola', 'country_code' => 'CF'],\n            ['name' => 'Kiryas Joel', 'country_code' => 'US'],\n            ['name' => 'Lemon Grove', 'country_code' => 'US'],\n            ['name' => 'Lindenhurst', 'country_code' => 'US'],\n            ['name' => 'Carlos A. Carrillo', 'country_code' => 'MX'],\n            ['name' => 'Meoqui', 'country_code' => 'MX'],\n            ['name' => 'Hirriyat Raznah', 'country_code' => 'EG'],\n            ['name' => 'Maracena', 'country_code' => 'ES'],\n            ['name' => 'Felixstowe', 'country_code' => 'GB'],\n            ['name' => 'Cheran', 'country_code' => 'MX'],\n            ['name' => 'Ocampo', 'country_code' => 'MX'],\n            ['name' => 'Lormont', 'country_code' => 'FR'],\n            ['name' => 'Bayanhongor', 'country_code' => 'MN'],\n            ['name' => 'West Whittier-Los Nietos', 'country_code' => 'US'],\n            ['name' => 'Leisure City', 'country_code' => 'US'],\n            ['name' => 'Moyo', 'country_code' => 'UG'],\n            ['name' => 'Camborne', 'country_code' => 'GB'],\n            ['name' => 'Seveso', 'country_code' => 'IT'],\n            ['name' => 'University Park', 'country_code' => 'US'],\n            ['name' => 'Voinjama', 'country_code' => 'LR'],\n            ['name' => 'Cazones de Herrera', 'country_code' => 'MX'],\n            ['name' => 'Nakhon Phanom', 'country_code' => 'TH'],\n            ['name' => 'Atherton', 'country_code' => 'GB'],\n            ['name' => 'Meyrin', 'country_code' => 'CH'],\n            ['name' => 'Utena', 'country_code' => 'LT'],\n            ['name' => 'Stanmore', 'country_code' => 'GB'],\n            ['name' => 'Jonava', 'country_code' => 'LT'],\n            ['name' => 'Suphan Buri', 'country_code' => 'TH'],\n            ['name' => 'Failsworth', 'country_code' => 'GB'],\n            ['name' => 'Dongola', 'country_code' => 'SD'],\n            ['name' => 'Mendi', 'country_code' => 'PG'],\n            ['name' => 'Chaville', 'country_code' => 'FR'],\n            ['name' => 'Ennis', 'country_code' => 'IE'],\n            ['name' => 'Ulaangom', 'country_code' => 'MN'],\n            ['name' => 'Torcy', 'country_code' => 'FR'],\n            ['name' => 'San Juan de Vilasar', 'country_code' => 'ES'],\n            ['name' => 'Meda', 'country_code' => 'IT'],\n            ['name' => 'Whitefield', 'country_code' => 'GB'],\n            ['name' => 'Castilleja de la Cuesta', 'country_code' => 'ES'],\n            ['name' => 'Belper', 'country_code' => 'GB'],\n            ['name' => 'Oxkutzkab', 'country_code' => 'MX'],\n            ['name' => 'Rodez', 'country_code' => 'FR'],\n            ['name' => 'Texistepec', 'country_code' => 'MX'],\n            ['name' => 'Soledad', 'country_code' => 'US'],\n            ['name' => 'Gjirokaster', 'country_code' => 'AL'],\n            ['name' => 'Malinalco', 'country_code' => 'MX'],\n            ['name' => 'Rivas', 'country_code' => 'NI'],\n            ['name' => 'Cliffside Park', 'country_code' => 'US'],\n            ['name' => 'Belmont', 'country_code' => 'US'],\n            ['name' => 'Bang Sao Thong', 'country_code' => 'TH'],\n            ['name' => 'Svay Rieng', 'country_code' => 'KH'],\n            ['name' => 'Bajina Basta', 'country_code' => 'RS'],\n            ['name' => 'Heroica Ciudad de Tlaxiaco', 'country_code' => 'MX'],\n            ['name' => 'Clevedon', 'country_code' => 'GB'],\n            ['name' => 'Sainte-Therese', 'country_code' => 'CA'],\n            ['name' => 'Hovd', 'country_code' => 'MN'],\n            ['name' => 'Castanos', 'country_code' => 'MX'],\n            ['name' => 'Calilabad', 'country_code' => 'AZ'],\n            ['name' => 'Litherland', 'country_code' => 'GB'],\n            ['name' => 'Chandlers Ford', 'country_code' => 'GB'],\n            ['name' => 'Amnat Charoen', 'country_code' => 'TH'],\n            ['name' => 'Fontaine', 'country_code' => 'FR'],\n            ['name' => 'Montgeron', 'country_code' => 'FR'],\n            ['name' => 'Mit Nama', 'country_code' => 'EG'],\n            ['name' => 'Penwortham', 'country_code' => 'GB'],\n            ['name' => 'Szczytno', 'country_code' => 'PL'],\n            ['name' => 'El Tarf', 'country_code' => 'DZ'],\n            ['name' => 'Huntingdon', 'country_code' => 'GB'],\n            ['name' => 'Atoyac de Alvarez', 'country_code' => 'MX'],\n            ['name' => 'Nar yan-Mar', 'country_code' => 'RU'],\n            ['name' => 'Croix', 'country_code' => 'FR'],\n            ['name' => 'Kidsgrove', 'country_code' => 'GB'],\n            ['name' => 'Onex', 'country_code' => 'CH'],\n            ['name' => 'San Juan Zitlaltepec', 'country_code' => 'MX'],\n            ['name' => 'Cloverleaf', 'country_code' => 'US'],\n            ['name' => 'Zwedru', 'country_code' => 'LR'],\n            ['name' => 'Decatur', 'country_code' => 'US'],\n            ['name' => 'Tipasa', 'country_code' => 'DZ'],\n            ['name' => 'Ottobrunn', 'country_code' => 'DE'],\n            ['name' => 'Kafr Shukr', 'country_code' => 'EG'],\n            ['name' => 'Ewa Gentry', 'country_code' => 'US'],\n            ['name' => 'Laurel', 'country_code' => 'US'],\n            ['name' => 'Guiseley', 'country_code' => 'GB'],\n            ['name' => 'Fray Bentos', 'country_code' => 'UY'],\n            ['name' => 'Morsang-sur-Orge', 'country_code' => 'FR'],\n            ['name' => 'Northwood', 'country_code' => 'GB'],\n            ['name' => 'San Lorenzo', 'country_code' => 'US'],\n            ['name' => 'San Giovanni la Punta', 'country_code' => 'IT'],\n            ['name' => 'Longjumeau', 'country_code' => 'FR'],\n            ['name' => 'Visby', 'country_code' => 'SE'],\n            ['name' => 'Swinton', 'country_code' => 'GB'],\n            ['name' => 'El Cerrito', 'country_code' => 'US'],\n            ['name' => 'Montmorency', 'country_code' => 'FR'],\n            ['name' => 'At Tafilah', 'country_code' => 'JO'],\n            ['name' => 'Eysines', 'country_code' => 'FR'],\n            ['name' => 'Penistone', 'country_code' => 'GB'],\n            ['name' => 'Loos', 'country_code' => 'FR'],\n            ['name' => 'Kerkyra', 'country_code' => 'GR'],\n            ['name' => 'Holborn', 'country_code' => 'GB'],\n            ['name' => 'Ossett', 'country_code' => 'GB'],\n            ['name' => 'Dronfield', 'country_code' => 'GB'],\n            ['name' => 'Coral Terrace', 'country_code' => 'US'],\n            ['name' => 'Sidi Lmokhtar', 'country_code' => 'MA'],\n            ['name' => 'Puyo', 'country_code' => 'EC'],\n            ['name' => 'Friern Barnet', 'country_code' => 'GB'],\n            ['name' => 'Kafr Qasim', 'country_code' => 'IL'],\n            ['name' => 'South Pasadena', 'country_code' => 'US'],\n            ['name' => 'Villabate', 'country_code' => 'IT'],\n            ['name' => 'Kenilworth', 'country_code' => 'GB'],\n            ['name' => 'Lambarene', 'country_code' => 'GA'],\n            ['name' => 'Maesteg', 'country_code' => 'GB'],\n            ['name' => 'Sainte-Foy-les-Lyon', 'country_code' => 'FR'],\n            ['name' => 'Ekeren', 'country_code' => 'BE'],\n            ['name' => 'South Bradenton', 'country_code' => 'US'],\n            ['name' => 'Mohale s Hoek', 'country_code' => 'LS'],\n            ['name' => 'Palm Springs', 'country_code' => 'US'],\n            ['name' => 'Vukovar', 'country_code' => 'HR'],\n            ['name' => 'Wewak', 'country_code' => 'PG'],\n            ['name' => 'Tassin-la-Demi-Lune', 'country_code' => 'FR'],\n            ['name' => 'Sheldon', 'country_code' => 'GB'],\n            ['name' => 'Levittown', 'country_code' => 'PR'],\n            ['name' => 'Haci Zeynalabdin', 'country_code' => 'AZ'],\n            ['name' => 'Herouville-Saint-Clair', 'country_code' => 'FR'],\n            ['name' => 'Montigny-les-Metz', 'country_code' => 'FR'],\n            ['name' => 'Santiago Ixcuintla', 'country_code' => 'MX'],\n            ['name' => 'Sceaux', 'country_code' => 'FR'],\n            ['name' => 'Normanton', 'country_code' => 'GB'],\n            ['name' => 'Kaga Bandoro', 'country_code' => 'CF'],\n            ['name' => 'Benetuser', 'country_code' => 'ES'],\n            ['name' => 'Tbeng Meanchey', 'country_code' => 'KH'],\n            ['name' => 'Portalegre', 'country_code' => 'PT'],\n            ['name' => 'University Park', 'country_code' => 'US'],\n            ['name' => 'Bispham', 'country_code' => 'GB'],\n            ['name' => 'Chocaman', 'country_code' => 'MX'],\n            ['name' => 'Terrytown', 'country_code' => 'US'],\n            ['name' => 'Novo Mesto', 'country_code' => 'SI'],\n            ['name' => 'Cusano Milanino', 'country_code' => 'IT'],\n            ['name' => 'Tlacolula de Matamoros', 'country_code' => 'MX'],\n            ['name' => 'Krathum Baen', 'country_code' => 'TH'],\n            ['name' => 'Riverbank', 'country_code' => 'US'],\n            ['name' => 'Stratton Saint Margaret', 'country_code' => 'GB'],\n            ['name' => 'March', 'country_code' => 'GB'],\n            ['name' => 'Maplewood', 'country_code' => 'US'],\n            ['name' => 'Tequixquiac', 'country_code' => 'MX'],\n            ['name' => 'Le Plessis-Trevise', 'country_code' => 'FR'],\n            ['name' => 'Le Mee-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Baldwin', 'country_code' => 'US'],\n            ['name' => 'Bontoc', 'country_code' => 'PH'],\n            ['name' => 'Melrose Park', 'country_code' => 'US'],\n            ['name' => 'Suhbaatar', 'country_code' => 'MN'],\n            ['name' => 'Palm Tree', 'country_code' => 'US'],\n            ['name' => 'Reyes Acozac', 'country_code' => 'MX'],\n            ['name' => 'Baalbek', 'country_code' => 'LB'],\n            ['name' => 'Palmers Green', 'country_code' => 'GB'],\n            ['name' => 'Degollado', 'country_code' => 'MX'],\n            ['name' => 'Hornsey', 'country_code' => 'GB'],\n            ['name' => 'Herndon', 'country_code' => 'US'],\n            ['name' => 'Juvisy-sur-Orge', 'country_code' => 'FR'],\n            ['name' => 'Falmouth', 'country_code' => 'GB'],\n            ['name' => 'Royton', 'country_code' => 'GB'],\n            ['name' => 'Kasamatsucho', 'country_code' => 'JP'],\n            ['name' => 'Kanmaki', 'country_code' => 'JP'],\n            ['name' => 'General Emilio Aguinaldo', 'country_code' => 'PH'],\n            ['name' => 'Velizy-Villacoublay', 'country_code' => 'FR'],\n            ['name' => 'Chevilly-Larue', 'country_code' => 'FR'],\n            ['name' => 'Chiconcuac', 'country_code' => 'MX'],\n            ['name' => 'Falagueira', 'country_code' => 'PT'],\n            ['name' => 'Sharunah', 'country_code' => 'EG'],\n            ['name' => 'Rockville Centre', 'country_code' => 'US'],\n            ['name' => 'Linslade', 'country_code' => 'GB'],\n            ['name' => 'La Celle-Saint-Cloud', 'country_code' => 'FR'],\n            ['name' => 'Lop Buri', 'country_code' => 'TH'],\n            ['name' => 'Suitland', 'country_code' => 'US'],\n            ['name' => 'Newquay', 'country_code' => 'GB'],\n            ['name' => 'Gan Yavne', 'country_code' => 'IL'],\n            ['name' => 'Cormano', 'country_code' => 'IT'],\n            ['name' => 'Plumstead', 'country_code' => 'GB'],\n            ['name' => 'Watauga', 'country_code' => 'US'],\n            ['name' => 'Cotija de la Paz', 'country_code' => 'MX'],\n            ['name' => 'Carlow', 'country_code' => 'IE'],\n            ['name' => 'Saint-Pol-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Sao Joao da Madeira', 'country_code' => 'PT'],\n            ['name' => 'Ashland', 'country_code' => 'US'],\n            ['name' => 'Fatick', 'country_code' => 'SN'],\n            ['name' => 'Garches', 'country_code' => 'FR'],\n            ['name' => 'Chesham', 'country_code' => 'GB'],\n            ['name' => 'Woodlawn', 'country_code' => 'US'],\n            ['name' => 'Lodi', 'country_code' => 'US'],\n            ['name' => 'Villa Sarmiento', 'country_code' => 'AR'],\n            ['name' => 'San Fernando', 'country_code' => 'US'],\n            ['name' => 'Chanthaburi', 'country_code' => 'TH'],\n            ['name' => 'Xingangli', 'country_code' => 'CN'],\n            ['name' => 'Peekskill', 'country_code' => 'US'],\n            ['name' => 'Mill Creek East', 'country_code' => 'US'],\n            ['name' => 'Dongta', 'country_code' => 'CN'],\n            ['name' => 'Tysons', 'country_code' => 'US'],\n            ['name' => 'Frattaminore', 'country_code' => 'IT'],\n            ['name' => 'Valmiera', 'country_code' => 'LV'],\n            ['name' => 'Newton in Makerfield', 'country_code' => 'GB'],\n            ['name' => 'Bailey s Crossroads', 'country_code' => 'US'],\n            ['name' => 'Vrbas', 'country_code' => 'RS'],\n            ['name' => 'Grumo Nevano', 'country_code' => 'IT'],\n            ['name' => 'Neath', 'country_code' => 'GB'],\n            ['name' => 'Huskvarna', 'country_code' => 'SE'],\n            ['name' => 'Atar', 'country_code' => 'MR'],\n            ['name' => 'Motul', 'country_code' => 'MX'],\n            ['name' => 'Elmwood Park', 'country_code' => 'US'],\n            ['name' => 'Oak Ridge', 'country_code' => 'US'],\n            ['name' => 'Renfrew', 'country_code' => 'GB'],\n            ['name' => 'Dammarie-le-Lys', 'country_code' => 'FR'],\n            ['name' => 'Senago', 'country_code' => 'IT'],\n            ['name' => 'Qalansuwa', 'country_code' => 'IL'],\n            ['name' => 'Horwich', 'country_code' => 'GB'],\n            ['name' => 'Hellemmes-Lille', 'country_code' => 'FR'],\n            ['name' => 'Owando', 'country_code' => 'CG'],\n            ['name' => 'Cottingham', 'country_code' => 'GB'],\n            ['name' => 'Southgate', 'country_code' => 'GB'],\n            ['name' => 'Guaranda', 'country_code' => 'EC'],\n            ['name' => 'Villeneuve-le-Roi', 'country_code' => 'FR'],\n            ['name' => 'Le Bourget', 'country_code' => 'FR'],\n            ['name' => 'Kibaha', 'country_code' => 'TZ'],\n            ['name' => 'Mantes-la-Ville', 'country_code' => 'FR'],\n            ['name' => 'Saint-Maurice', 'country_code' => 'FR'],\n            ['name' => 'Bani Murr', 'country_code' => 'EG'],\n            ['name' => 'Chilly-Mazarin', 'country_code' => 'FR'],\n            ['name' => 'Tewkesbury', 'country_code' => 'GB'],\n            ['name' => 'Satun', 'country_code' => 'TH'],\n            ['name' => 'Saint-Michel-sur-Orge', 'country_code' => 'FR'],\n            ['name' => 'Phetchaburi', 'country_code' => 'TH'],\n            ['name' => 'Valinda', 'country_code' => 'US'],\n            ['name' => 'Novate Milanese', 'country_code' => 'IT'],\n            ['name' => 'Kudrovo', 'country_code' => 'RU'],\n            ['name' => 'North Lynnwood', 'country_code' => 'US'],\n            ['name' => 'Rosemont', 'country_code' => 'US'],\n            ['name' => 'Southbourne', 'country_code' => 'GB'],\n            ['name' => 'Peterlee', 'country_code' => 'GB'],\n            ['name' => 'Kirkstall', 'country_code' => 'GB'],\n            ['name' => 'Penzance', 'country_code' => 'GB'],\n            ['name' => 'Cudahy', 'country_code' => 'US'],\n            ['name' => 'Copiague', 'country_code' => 'US'],\n            ['name' => 'Shoreham-by-Sea', 'country_code' => 'GB'],\n            ['name' => 'Winter Gardens', 'country_code' => 'US'],\n            ['name' => 'Yonabaru', 'country_code' => 'JP'],\n            ['name' => 'Seaham', 'country_code' => 'GB'],\n            ['name' => 'Allschwil', 'country_code' => 'CH'],\n            ['name' => 'Alfafar', 'country_code' => 'ES'],\n            ['name' => 'Nkhata Bay', 'country_code' => 'MW'],\n            ['name' => 'Hialeah Gardens', 'country_code' => 'US'],\n            ['name' => 'Wasquehal', 'country_code' => 'FR'],\n            ['name' => 'Sukhodilsk', 'country_code' => 'UA'],\n            ['name' => 'Coudekerque-Branche', 'country_code' => 'FR'],\n            ['name' => 'Carteret', 'country_code' => 'US'],\n            ['name' => 'Opfikon', 'country_code' => 'CH'],\n            ['name' => 'Tena', 'country_code' => 'EC'],\n            ['name' => 'West Puente Valley', 'country_code' => 'US'],\n            ['name' => 'Peto', 'country_code' => 'MX'],\n            ['name' => 'Biddulph', 'country_code' => 'GB'],\n            ['name' => 'Killingworth', 'country_code' => 'GB'],\n            ['name' => 'Loreto', 'country_code' => 'MX'],\n            ['name' => 'Naas', 'country_code' => 'IE'],\n            ['name' => 'Sacavem', 'country_code' => 'PT'],\n            ['name' => 'Caterham', 'country_code' => 'GB'],\n            ['name' => 'Nyon', 'country_code' => 'CH'],\n            ['name' => 'Acheres', 'country_code' => 'FR'],\n            ['name' => 'Ciudad Miguel Aleman', 'country_code' => 'MX'],\n            ['name' => 'Bellshill', 'country_code' => 'GB'],\n            ['name' => 'Mosta', 'country_code' => 'MT'],\n            ['name' => 'Worcester Park', 'country_code' => 'GB'],\n            ['name' => 'Maywood', 'country_code' => 'US'],\n            ['name' => 'Davyhulme', 'country_code' => 'GB'],\n            ['name' => 'Fleury-les-Aubrais', 'country_code' => 'FR'],\n            ['name' => 'Grobenzell', 'country_code' => 'DE'],\n            ['name' => 'Hidalgotitlan', 'country_code' => 'MX'],\n            ['name' => 'Sunbat', 'country_code' => 'EG'],\n            ['name' => 'Ronchin', 'country_code' => 'FR'],\n            ['name' => 'Monsey', 'country_code' => 'US'],\n            ['name' => 'Ogre', 'country_code' => 'LV'],\n            ['name' => 'Kilkenny', 'country_code' => 'IE'],\n            ['name' => 'Alloa', 'country_code' => 'GB'],\n            ['name' => 'Aarau', 'country_code' => 'CH'],\n            ['name' => 'West Rancho Dominguez', 'country_code' => 'US'],\n            ['name' => 'Blue Island', 'country_code' => 'US'],\n            ['name' => 'Lamu', 'country_code' => 'KE'],\n            ['name' => 'Bilasuvar', 'country_code' => 'AZ'],\n            ['name' => 'Kayanza', 'country_code' => 'BI'],\n            ['name' => 'Monserrato', 'country_code' => 'IT'],\n            ['name' => 'Zaragoza', 'country_code' => 'MX'],\n            ['name' => 'Soisy-sous-Montmorency', 'country_code' => 'FR'],\n            ['name' => 'Trentola', 'country_code' => 'IT'],\n            ['name' => 'Sibiti', 'country_code' => 'CG'],\n            ['name' => 'Willowbrook', 'country_code' => 'US'],\n            ['name' => 'Llandudno', 'country_code' => 'GB'],\n            ['name' => 'Saint-Cyr-l Ecole', 'country_code' => 'FR'],\n            ['name' => 'Zimatlan de Alvarez', 'country_code' => 'MX'],\n            ['name' => 'Savanna-la-Mar', 'country_code' => 'JM'],\n            ['name' => 'Madingou', 'country_code' => 'CG'],\n            ['name' => 'Bathgate', 'country_code' => 'GB'],\n            ['name' => 'Mzimba', 'country_code' => 'MW'],\n            ['name' => 'Sibut', 'country_code' => 'CF'],\n            ['name' => 'Nogent-sur-Oise', 'country_code' => 'FR'],\n            ['name' => 'Rothwell', 'country_code' => 'GB'],\n            ['name' => 'Goodmayes', 'country_code' => 'GB'],\n            ['name' => 'Kedainiai', 'country_code' => 'LT'],\n            ['name' => 'Ives Estates', 'country_code' => 'US'],\n            ['name' => 'Uliastay', 'country_code' => 'MN'],\n            ['name' => 'Burnham-on-Sea', 'country_code' => 'GB'],\n            ['name' => 'Ahfir', 'country_code' => 'MA'],\n            ['name' => 'Jekabpils', 'country_code' => 'LV'],\n            ['name' => 'Modling', 'country_code' => 'AT'],\n            ['name' => 'Ischia', 'country_code' => 'IT'],\n            ['name' => 'Quedgeley', 'country_code' => 'GB'],\n            ['name' => 'Kayunga', 'country_code' => 'UG'],\n            ['name' => 'Dukinfield', 'country_code' => 'GB'],\n            ['name' => 'Mulanje', 'country_code' => 'MW'],\n            ['name' => 'Landover', 'country_code' => 'US'],\n            ['name' => 'Mecayapan', 'country_code' => 'MX'],\n            ['name' => 'Prestatyn', 'country_code' => 'GB'],\n            ['name' => 'Bafata', 'country_code' => 'GW'],\n            ['name' => 'Dingle', 'country_code' => 'GB'],\n            ['name' => 'Phichit', 'country_code' => 'TH'],\n            ['name' => 'Saint Paul s Bay', 'country_code' => 'MT'],\n            ['name' => 'Montereau-faut-Yonne', 'country_code' => 'FR'],\n            ['name' => 'Mouila', 'country_code' => 'GA'],\n            ['name' => 'The Crossings', 'country_code' => 'US'],\n            ['name' => 'Tepatlaxco', 'country_code' => 'MX'],\n            ['name' => 'Saint-Fons', 'country_code' => 'FR'],\n            ['name' => 'Loei', 'country_code' => 'TH'],\n            ['name' => 'Millbrae', 'country_code' => 'US'],\n            ['name' => 'East Barnet', 'country_code' => 'GB'],\n            ['name' => 'Oulad Fraj', 'country_code' => 'MA'],\n            ['name' => 'Molesey', 'country_code' => 'GB'],\n            ['name' => 'Mbaiki', 'country_code' => 'CF'],\n            ['name' => 'Soroca', 'country_code' => 'MD'],\n            ['name' => 'Arese', 'country_code' => 'IT'],\n            ['name' => 'Fgura', 'country_code' => 'MT'],\n            ['name' => 'Nsanje', 'country_code' => 'MW'],\n            ['name' => 'Cercola', 'country_code' => 'IT'],\n            ['name' => 'Lingolsheim', 'country_code' => 'FR'],\n            ['name' => 'Connahs Quay', 'country_code' => 'GB'],\n            ['name' => 'Truro', 'country_code' => 'GB'],\n            ['name' => 'Sao Filipe', 'country_code' => 'CV'],\n            ['name' => 'Fengdeng', 'country_code' => 'CN'],\n            ['name' => 'Phetchabun', 'country_code' => 'TH'],\n            ['name' => 'Sant Antonio Abate', 'country_code' => 'IT'],\n            ['name' => 'Liversedge', 'country_code' => 'GB'],\n            ['name' => 'Bella Union', 'country_code' => 'UY'],\n            ['name' => 'Cran-Gevrier', 'country_code' => 'FR'],\n            ['name' => 'Caacupe', 'country_code' => 'PY'],\n            ['name' => 'Antrim', 'country_code' => 'GB'],\n            ['name' => 'Faches-Thumesnil', 'country_code' => 'FR'],\n            ['name' => 'Fortin de las Flores', 'country_code' => 'MX'],\n            ['name' => 'West Carson', 'country_code' => 'US'],\n            ['name' => 'Mocoa', 'country_code' => 'CO'],\n            ['name' => 'Telsiai', 'country_code' => 'LT'],\n            ['name' => 'Assebroek', 'country_code' => 'BE'],\n            ['name' => 'Linlithgow', 'country_code' => 'GB'],\n            ['name' => 'Keynsham', 'country_code' => 'GB'],\n            ['name' => 'Lealman', 'country_code' => 'US'],\n            ['name' => 'Kegalle', 'country_code' => 'LK'],\n            ['name' => 'Eragny', 'country_code' => 'FR'],\n            ['name' => 'Ghat', 'country_code' => 'LY'],\n            ['name' => 'Hayesville', 'country_code' => 'US'],\n            ['name' => 'Bry-sur-Marne', 'country_code' => 'FR'],\n            ['name' => 'Moreton', 'country_code' => 'GB'],\n            ['name' => 'Hillside', 'country_code' => 'US'],\n            ['name' => 'Bedlington', 'country_code' => 'GB'],\n            ['name' => 'Reinach', 'country_code' => 'CH'],\n            ['name' => 'Al Karak', 'country_code' => 'JO'],\n            ['name' => 'Jasmine Estates', 'country_code' => 'US'],\n            ['name' => 'Saint-Lambert', 'country_code' => 'CA'],\n            ['name' => 'Woodhouse', 'country_code' => 'GB'],\n            ['name' => 'Aldo Bonzi', 'country_code' => 'AR'],\n            ['name' => 'Westbury', 'country_code' => 'GB'],\n            ['name' => 'Hadleigh', 'country_code' => 'GB'],\n            ['name' => 'Kitagata', 'country_code' => 'JP'],\n            ['name' => 'Moulins', 'country_code' => 'FR'],\n            ['name' => 'Goroka', 'country_code' => 'PG'],\n            ['name' => 'Lennox', 'country_code' => 'US'],\n            ['name' => 'Kew Green', 'country_code' => 'GB'],\n            ['name' => 'Roselle', 'country_code' => 'US'],\n            ['name' => 'Sunny Isles Beach', 'country_code' => 'US'],\n            ['name' => 'Massapequa', 'country_code' => 'US'],\n            ['name' => 'Chamalieres', 'country_code' => 'FR'],\n            ['name' => 'Calne', 'country_code' => 'GB'],\n            ['name' => 'Carmelo', 'country_code' => 'UY'],\n            ['name' => 'Acatlan de Osorio', 'country_code' => 'MX'],\n            ['name' => 'Mont-Saint-Aignan', 'country_code' => 'FR'],\n            ['name' => 'Calella', 'country_code' => 'ES'],\n            ['name' => 'North Bay Shore', 'country_code' => 'US'],\n            ['name' => 'Nantwich', 'country_code' => 'GB'],\n            ['name' => 'Kapolei', 'country_code' => 'US'],\n            ['name' => 'Alajuelita', 'country_code' => 'CR'],\n            ['name' => 'Nong Bua Lamphu', 'country_code' => 'TH'],\n            ['name' => 'Ashtarak', 'country_code' => 'AM'],\n            ['name' => 'Abbots Langley', 'country_code' => 'GB'],\n            ['name' => 'Obiliq', 'country_code' => 'XK'],\n            ['name' => 'Dover', 'country_code' => 'US'],\n            ['name' => 'Hamtramck', 'country_code' => 'US'],\n            ['name' => 'Chennevieres-sur-Marne', 'country_code' => 'FR'],\n            ['name' => 'Hampton', 'country_code' => 'GB'],\n            ['name' => 'Le Pecq', 'country_code' => 'FR'],\n            ['name' => 'Taurage', 'country_code' => 'LT'],\n            ['name' => 'Haciqabul', 'country_code' => 'AZ'],\n            ['name' => 'Ayutla de los Libres', 'country_code' => 'MX'],\n            ['name' => 'Schlieren', 'country_code' => 'CH'],\n            ['name' => 'McNair', 'country_code' => 'US'],\n            ['name' => 'Johnstone', 'country_code' => 'GB'],\n            ['name' => 'Bozoum', 'country_code' => 'CF'],\n            ['name' => 'Mchinji', 'country_code' => 'MW'],\n            ['name' => 'Pully', 'country_code' => 'CH'],\n            ['name' => 'Patcham', 'country_code' => 'GB'],\n            ['name' => 'Dawlish', 'country_code' => 'GB'],\n            ['name' => 'Artashat', 'country_code' => 'AM'],\n            ['name' => 'Virovitica', 'country_code' => 'HR'],\n            ['name' => 'Tatahuicapan', 'country_code' => 'MX'],\n            ['name' => 'San Francisco', 'country_code' => 'SV'],\n            ['name' => 'Mickleover', 'country_code' => 'GB'],\n            ['name' => 'Redhill', 'country_code' => 'GB'],\n            ['name' => 'Vaureal', 'country_code' => 'FR'],\n            ['name' => 'Maralal', 'country_code' => 'KE'],\n            ['name' => 'Mountlake Terrace', 'country_code' => 'US'],\n            ['name' => 'Hebburn', 'country_code' => 'GB'],\n            ['name' => 'Bonneuil-sur-Marne', 'country_code' => 'FR'],\n            ['name' => 'Caiaponia', 'country_code' => 'BR'],\n            ['name' => 'North Plainfield', 'country_code' => 'US'],\n            ['name' => 'Le Raincy', 'country_code' => 'FR'],\n            ['name' => 'Ukmerge', 'country_code' => 'LT'],\n            ['name' => 'Santa Lucia', 'country_code' => 'UY'],\n            ['name' => 'Obock', 'country_code' => 'DJ'],\n            ['name' => 'Orhei', 'country_code' => 'MD'],\n            ['name' => 'Bovisio Masciago', 'country_code' => 'IT'],\n            ['name' => 'Adliswil', 'country_code' => 'CH'],\n            ['name' => 'La Esperanza', 'country_code' => 'HN'],\n            ['name' => 'Luena', 'country_code' => 'AO'],\n            ['name' => 'Viroflay', 'country_code' => 'FR'],\n            ['name' => 'Boom', 'country_code' => 'BE'],\n            ['name' => 'Sant Just Desvern', 'country_code' => 'ES'],\n            ['name' => 'Bischheim', 'country_code' => 'FR'],\n            ['name' => 'Thalwil', 'country_code' => 'CH'],\n            ['name' => 'Horsforth', 'country_code' => 'GB'],\n            ['name' => 'Sweetwater', 'country_code' => 'US'],\n            ['name' => 'El Astillero', 'country_code' => 'ES'],\n            ['name' => 'Hednesford', 'country_code' => 'GB'],\n            ['name' => 'Guayama', 'country_code' => 'PR'],\n            ['name' => 'Pajapan', 'country_code' => 'MX'],\n            ['name' => 'Malgrat de Mar', 'country_code' => 'ES'],\n            ['name' => 'Wolfratshausen', 'country_code' => 'DE'],\n            ['name' => 'Impfondo', 'country_code' => 'CG'],\n            ['name' => 'Quba', 'country_code' => 'AZ'],\n            ['name' => 'Birstall', 'country_code' => 'GB'],\n            ['name' => 'Moston', 'country_code' => 'GB'],\n            ['name' => 'Staines-upon-Thames', 'country_code' => 'GB'],\n            ['name' => 'Gavarr', 'country_code' => 'AM'],\n            ['name' => 'Dolores', 'country_code' => 'UY'],\n            ['name' => 'Tadaoka-higashi', 'country_code' => 'JP'],\n            ['name' => 'Tecpan de Galeana', 'country_code' => 'MX'],\n            ['name' => 'Ecully', 'country_code' => 'FR'],\n            ['name' => 'Chemax', 'country_code' => 'MX'],\n            ['name' => 'El Rosario', 'country_code' => 'MX'],\n            ['name' => 'Wibsey', 'country_code' => 'GB'],\n            ['name' => 'Canelones', 'country_code' => 'UY'],\n            ['name' => 'North Bellmore', 'country_code' => 'US'],\n            ['name' => 'Palisades Park', 'country_code' => 'US'],\n            ['name' => 'Aci Castello', 'country_code' => 'IT'],\n            ['name' => 'Ismayilli', 'country_code' => 'AZ'],\n            ['name' => 'Ati', 'country_code' => 'TD'],\n            ['name' => 'El Dorado', 'country_code' => 'MX'],\n            ['name' => 'Nan', 'country_code' => 'TH'],\n            ['name' => 'Cowley', 'country_code' => 'GB'],\n            ['name' => 'Cuprija', 'country_code' => 'RS'],\n            ['name' => 'Palau', 'country_code' => 'MX'],\n            ['name' => 'Porthcawl', 'country_code' => 'GB'],\n            ['name' => 'New Brighton', 'country_code' => 'GB'],\n            ['name' => 'Vimodrone', 'country_code' => 'IT'],\n            ['name' => 'Bingley', 'country_code' => 'GB'],\n            ['name' => 'Yasothon', 'country_code' => 'TH'],\n            ['name' => 'South El Monte', 'country_code' => 'US'],\n            ['name' => 'Belgrave', 'country_code' => 'GB'],\n            ['name' => 'Ijevan', 'country_code' => 'AM'],\n            ['name' => 'Baguley', 'country_code' => 'GB'],\n            ['name' => 'Warminster', 'country_code' => 'GB'],\n            ['name' => 'Beinasco', 'country_code' => 'IT'],\n            ['name' => 'Ostermundigen', 'country_code' => 'CH'],\n            ['name' => 'Zaghouan', 'country_code' => 'TN'],\n            ['name' => 'West Derby', 'country_code' => 'GB'],\n            ['name' => 'Haslingden', 'country_code' => 'GB'],\n            ['name' => 'Les Clayes-sous-Bois', 'country_code' => 'FR'],\n            ['name' => 'Bubanza', 'country_code' => 'BI'],\n            ['name' => 'Columbia Heights', 'country_code' => 'US'],\n            ['name' => 'Sunbury', 'country_code' => 'GB'],\n            ['name' => 'Stoke Gifford', 'country_code' => 'GB'],\n            ['name' => 'Nailsea', 'country_code' => 'GB'],\n            ['name' => 'Cleckheaton', 'country_code' => 'GB'],\n            ['name' => 'Somoto', 'country_code' => 'NI'],\n            ['name' => 'Senta', 'country_code' => 'RS'],\n            ['name' => 'Shirley', 'country_code' => 'GB'],\n            ['name' => 'Leagrave', 'country_code' => 'GB'],\n            ['name' => 'Lomita', 'country_code' => 'US'],\n            ['name' => 'Cosham', 'country_code' => 'GB'],\n            ['name' => 'Enfield Lock', 'country_code' => 'GB'],\n            ['name' => 'Bayshore Gardens', 'country_code' => 'US'],\n            ['name' => 'Agsu', 'country_code' => 'AZ'],\n            ['name' => 'Agstafa', 'country_code' => 'AZ'],\n            ['name' => 'Bani Hasan ash Shuruq', 'country_code' => 'EG'],\n            ['name' => 'Harwich', 'country_code' => 'GB'],\n            ['name' => 'Saffron Walden', 'country_code' => 'GB'],\n            ['name' => 'Basford', 'country_code' => 'GB'],\n            ['name' => 'Maurepas', 'country_code' => 'FR'],\n            ['name' => 'Comrat', 'country_code' => 'MD'],\n            ['name' => 'Guastatoya', 'country_code' => 'GT'],\n            ['name' => 'Kirkland', 'country_code' => 'CA'],\n            ['name' => 'Qormi', 'country_code' => 'MT'],\n            ['name' => 'Arvayheer', 'country_code' => 'MN'],\n            ['name' => 'Tyldesley', 'country_code' => 'GB'],\n            ['name' => 'Sligo', 'country_code' => 'IE'],\n            ['name' => 'Harrison', 'country_code' => 'US'],\n            ['name' => 'Cattolica', 'country_code' => 'IT'],\n            ['name' => 'Hilsea', 'country_code' => 'GB'],\n            ['name' => 'West Chester', 'country_code' => 'US'],\n            ['name' => 'Hakha', 'country_code' => 'MM'],\n            ['name' => 'Mubende', 'country_code' => 'UG'],\n            ['name' => 'Ulcinj', 'country_code' => 'ME'],\n            ['name' => 'Tidjikja', 'country_code' => 'MR'],\n            ['name' => 'South San Jose Hills', 'country_code' => 'US'],\n            ['name' => 'Elmwood Park', 'country_code' => 'US'],\n            ['name' => 'Kralingse Veer', 'country_code' => 'NL'],\n            ['name' => 'Floirac', 'country_code' => 'FR'],\n            ['name' => 'Stone', 'country_code' => 'GB'],\n            ['name' => 'Morges', 'country_code' => 'CH'],\n            ['name' => 'The Mumbles', 'country_code' => 'GB'],\n            ['name' => 'Westmount', 'country_code' => 'CA'],\n            ['name' => 'Kotsyubyns ke', 'country_code' => 'UA'],\n            ['name' => 'Fazakerley', 'country_code' => 'GB'],\n            ['name' => 'Maldon', 'country_code' => 'GB'],\n            ['name' => 'Saynshand', 'country_code' => 'MN'],\n            ['name' => 'Wombwell', 'country_code' => 'GB'],\n            ['name' => 'Eldama Ravine', 'country_code' => 'KE'],\n            ['name' => 'West Hempstead', 'country_code' => 'US'],\n            ['name' => 'Tilbury', 'country_code' => 'GB'],\n            ['name' => 'Ciudad de Huitzuco', 'country_code' => 'MX'],\n            ['name' => 'La Cruz', 'country_code' => 'MX'],\n            ['name' => 'Tlaxcala', 'country_code' => 'MX'],\n            ['name' => 'Larkhall', 'country_code' => 'GB'],\n            ['name' => 'Wondelgem', 'country_code' => 'BE'],\n            ['name' => 'Tecuala', 'country_code' => 'MX'],\n            ['name' => 'Inirida', 'country_code' => 'CO'],\n            ['name' => 'Biyahmu', 'country_code' => 'EG'],\n            ['name' => 'Ribeira Grande', 'country_code' => 'CV'],\n            ['name' => 'Norwood', 'country_code' => 'US'],\n            ['name' => 'Ciudad Guadalupe Victoria', 'country_code' => 'MX'],\n            ['name' => 'Kavieng', 'country_code' => 'PG'],\n            ['name' => 'Franconia', 'country_code' => 'US'],\n            ['name' => 'Clayton', 'country_code' => 'GB'],\n            ['name' => 'Albany', 'country_code' => 'US'],\n            ['name' => 'La Crescenta-Montrose', 'country_code' => 'US'],\n            ['name' => 'Telavi', 'country_code' => 'GE'],\n            ['name' => 'Faranah', 'country_code' => 'GN'],\n            ['name' => 'Phra Pradaeng', 'country_code' => 'TH'],\n            ['name' => 'Milton', 'country_code' => 'GB'],\n            ['name' => 'Santa Catarina Juquila', 'country_code' => 'MX'],\n            ['name' => 'Kidbrooke', 'country_code' => 'GB'],\n            ['name' => 'Shipley', 'country_code' => 'GB'],\n            ['name' => 'Lezhe', 'country_code' => 'AL'],\n            ['name' => 'Lons-le-Saunier', 'country_code' => 'FR'],\n            ['name' => 'Santiago Tulantepec', 'country_code' => 'MX'],\n            ['name' => 'Central Falls', 'country_code' => 'US'],\n            ['name' => 'Whickham', 'country_code' => 'GB'],\n            ['name' => 'Rodolfo Sanchez Taboada', 'country_code' => 'MX'],\n            ['name' => 'Kapsabet', 'country_code' => 'KE'],\n            ['name' => 'Deysbrook', 'country_code' => 'GB'],\n            ['name' => 'Langley Park', 'country_code' => 'US'],\n            ['name' => 'Mont-Royal', 'country_code' => 'CA'],\n            ['name' => 'Schofield Barracks', 'country_code' => 'US'],\n            ['name' => 'Ciudad Hidalgo', 'country_code' => 'MX'],\n            ['name' => 'Cardenas', 'country_code' => 'MX'],\n            ['name' => 'Barton upon Irwell', 'country_code' => 'GB'],\n            ['name' => 'Solothurn', 'country_code' => 'CH'],\n            ['name' => 'Lynbrook', 'country_code' => 'US'],\n            ['name' => 'Lagawe', 'country_code' => 'PH'],\n            ['name' => 'Lai', 'country_code' => 'TD'],\n            ['name' => 'Bonnyrigg', 'country_code' => 'GB'],\n            ['name' => 'Budva', 'country_code' => 'ME'],\n            ['name' => 'Son La', 'country_code' => 'VN'],\n            ['name' => 'Arnouville-les-Gonesse', 'country_code' => 'FR'],\n            ['name' => 'Tchibanga', 'country_code' => 'GA'],\n            ['name' => 'Ban Rawai', 'country_code' => 'TH'],\n            ['name' => 'Al Madamud', 'country_code' => 'EG'],\n            ['name' => 'Canovellas', 'country_code' => 'ES'],\n            ['name' => 'Macas', 'country_code' => 'EC'],\n            ['name' => 'Partick', 'country_code' => 'GB'],\n            ['name' => 'Netherton', 'country_code' => 'GB'],\n            ['name' => 'Hermosa Beach', 'country_code' => 'US'],\n            ['name' => 'Tillaberi', 'country_code' => 'NE'],\n            ['name' => 'Seacroft', 'country_code' => 'GB'],\n            ['name' => 'Tepoztlan', 'country_code' => 'MX'],\n            ['name' => 'Brusciano', 'country_code' => 'IT'],\n            ['name' => 'Attapu', 'country_code' => 'LA'],\n            ['name' => 'Noisiel', 'country_code' => 'FR'],\n            ['name' => 'Morristown', 'country_code' => 'US'],\n            ['name' => 'Baildon', 'country_code' => 'GB'],\n            ['name' => 'Sherrelwood', 'country_code' => 'US'],\n            ['name' => 'Mineola', 'country_code' => 'US'],\n            ['name' => 'Sant Arpino', 'country_code' => 'IT'],\n            ['name' => 'Harrow Weald', 'country_code' => 'GB'],\n            ['name' => 'Evergreen Park', 'country_code' => 'US'],\n            ['name' => 'Addlestone', 'country_code' => 'GB'],\n            ['name' => 'Saint-Jean-de-la-Ruelle', 'country_code' => 'FR'],\n            ['name' => 'Pemberton', 'country_code' => 'GB'],\n            ['name' => 'Baabda', 'country_code' => 'LB'],\n            ['name' => 'Bububu', 'country_code' => 'TZ'],\n            ['name' => 'West Wickham', 'country_code' => 'GB'],\n            ['name' => 'Binningen', 'country_code' => 'CH'],\n            ['name' => 'Apaxco de Ocampo', 'country_code' => 'MX'],\n            ['name' => 'Le Vesinet', 'country_code' => 'FR'],\n            ['name' => 'Mao', 'country_code' => 'TD'],\n            ['name' => 'Saltash', 'country_code' => 'GB'],\n            ['name' => 'Montmagny', 'country_code' => 'FR'],\n            ['name' => 'Grajales', 'country_code' => 'MX'],\n            ['name' => 'Dzuunmod', 'country_code' => 'MN'],\n            ['name' => 'Wellington', 'country_code' => 'GB'],\n            ['name' => 'Bellaire', 'country_code' => 'US'],\n            ['name' => 'Keetmanshoop', 'country_code' => 'NA'],\n            ['name' => 'Paraguari', 'country_code' => 'PY'],\n            ['name' => 'Hendaye', 'country_code' => 'FR'],\n            ['name' => 'Hazel Grove', 'country_code' => 'GB'],\n            ['name' => 'Northenden', 'country_code' => 'GB'],\n            ['name' => 'Hinche', 'country_code' => 'HT'],\n            ['name' => 'Hun', 'country_code' => 'LY'],\n            ['name' => 'Kimbe', 'country_code' => 'PG'],\n            ['name' => 'Saint-Leu-la-Foret', 'country_code' => 'FR'],\n            ['name' => 'Dong Ha', 'country_code' => 'VN'],\n            ['name' => 'Pureparo de Echaiz', 'country_code' => 'MX'],\n            ['name' => 'Visaginas', 'country_code' => 'LT'],\n            ['name' => 'Marly-le-Roi', 'country_code' => 'FR'],\n            ['name' => 'Albal', 'country_code' => 'ES'],\n            ['name' => 'Mansa Konko', 'country_code' => 'GM'],\n            ['name' => 'Bou Djeniba', 'country_code' => 'MA'],\n            ['name' => 'Harnosand', 'country_code' => 'SE'],\n            ['name' => 'Tlaltetela', 'country_code' => 'MX'],\n            ['name' => 'Prestwick', 'country_code' => 'GB'],\n            ['name' => 'Point Pleasant', 'country_code' => 'US'],\n            ['name' => 'Masamagrell', 'country_code' => 'ES'],\n            ['name' => 'Pakwach', 'country_code' => 'UG'],\n            ['name' => 'Hawthorne', 'country_code' => 'US'],\n            ['name' => 'La Crucecita', 'country_code' => 'MX'],\n            ['name' => 'Rwamagana', 'country_code' => 'RW'],\n            ['name' => 'Hostomel', 'country_code' => 'UA'],\n            ['name' => 'Buckley', 'country_code' => 'GB'],\n            ['name' => 'Rock Ferry', 'country_code' => 'GB'],\n            ['name' => 'Ahmadli', 'country_code' => 'AZ'],\n            ['name' => 'Banstead', 'country_code' => 'GB'],\n            ['name' => 'Juchique de Ferrer', 'country_code' => 'MX'],\n            ['name' => 'Siyazan', 'country_code' => 'AZ'],\n            ['name' => 'Hythe', 'country_code' => 'GB'],\n            ['name' => 'Bellwood', 'country_code' => 'US'],\n            ['name' => 'Vicente Guerrero', 'country_code' => 'MX'],\n            ['name' => 'North Valley Stream', 'country_code' => 'US'],\n            ['name' => 'Ptuj', 'country_code' => 'SI'],\n            ['name' => 'Leposaviq', 'country_code' => 'XK'],\n            ['name' => 'Goulmima', 'country_code' => 'MA'],\n            ['name' => 'Sabirabad', 'country_code' => 'AZ'],\n            ['name' => 'Clitheroe', 'country_code' => 'GB'],\n            ['name' => 'Seabrook', 'country_code' => 'US'],\n            ['name' => 'Bromborough', 'country_code' => 'GB'],\n            ['name' => 'Avenel', 'country_code' => 'US'],\n            ['name' => 'Sudley', 'country_code' => 'US'],\n            ['name' => 'Jouy-le-Moutier', 'country_code' => 'FR'],\n            ['name' => 'Tarrafal', 'country_code' => 'CV'],\n            ['name' => 'Tsetserleg', 'country_code' => 'MN'],\n            ['name' => 'Casandrino', 'country_code' => 'IT'],\n            ['name' => 'Winthrop', 'country_code' => 'US'],\n            ['name' => 'Cerritos', 'country_code' => 'MX'],\n            ['name' => 'Carrieres-sous-Poissy', 'country_code' => 'FR'],\n            ['name' => 'North Massapequa', 'country_code' => 'US'],\n            ['name' => 'Lognes', 'country_code' => 'FR'],\n            ['name' => 'Straseni', 'country_code' => 'MD'],\n            ['name' => 'Mesa Geitonia', 'country_code' => 'CY'],\n            ['name' => 'Tinguindin', 'country_code' => 'MX'],\n            ['name' => 'Oteapan', 'country_code' => 'MX'],\n            ['name' => 'Beausoleil', 'country_code' => 'FR'],\n            ['name' => 'Pedreiras', 'country_code' => 'BR'],\n            ['name' => 'Huixcolotla', 'country_code' => 'MX'],\n            ['name' => 'Izamal', 'country_code' => 'MX'],\n            ['name' => 'Ermua', 'country_code' => 'ES'],\n            ['name' => 'Bryn Mawr-Skyway', 'country_code' => 'US'],\n            ['name' => 'Melksham', 'country_code' => 'GB'],\n            ['name' => 'Yiewsley', 'country_code' => 'GB'],\n            ['name' => 'Coquimatlan', 'country_code' => 'MX'],\n            ['name' => 'North Amityville', 'country_code' => 'US'],\n            ['name' => 'Carugate', 'country_code' => 'IT'],\n            ['name' => 'Bidston', 'country_code' => 'GB'],\n            ['name' => 'Forfar', 'country_code' => 'GB'],\n            ['name' => 'Zabbar', 'country_code' => 'MT'],\n            ['name' => 'Brookfield', 'country_code' => 'US'],\n            ['name' => 'Rutherford', 'country_code' => 'US'],\n            ['name' => 'Bartica', 'country_code' => 'GY'],\n            ['name' => 'Bebington', 'country_code' => 'GB'],\n            ['name' => 'Wallisellen', 'country_code' => 'CH'],\n            ['name' => 'Merrifield', 'country_code' => 'US'],\n            ['name' => 'Arenys de Mar', 'country_code' => 'ES'],\n            ['name' => 'Madera', 'country_code' => 'MX'],\n            ['name' => 'Idylwood', 'country_code' => 'US'],\n            ['name' => 'Richmond', 'country_code' => 'NZ'],\n            ['name' => 'Kedougou', 'country_code' => 'SN'],\n            ['name' => 'Hyattsville', 'country_code' => 'US'],\n            ['name' => 'Pendlebury', 'country_code' => 'GB'],\n            ['name' => 'Filadelfia', 'country_code' => 'PY'],\n            ['name' => 'Dedza', 'country_code' => 'MW'],\n            ['name' => 'Gornalwood', 'country_code' => 'GB'],\n            ['name' => 'Llantrisant', 'country_code' => 'GB'],\n            ['name' => 'Iselin', 'country_code' => 'US'],\n            ['name' => 'Sing Buri', 'country_code' => 'TH'],\n            ['name' => 'Salaspils', 'country_code' => 'LV'],\n            ['name' => 'Hessle', 'country_code' => 'GB'],\n            ['name' => 'Royston', 'country_code' => 'GB'],\n            ['name' => 'La Llagosta', 'country_code' => 'ES'],\n            ['name' => 'Prachin Buri', 'country_code' => 'TH'],\n            ['name' => 'Montargis', 'country_code' => 'FR'],\n            ['name' => 'Amblecote', 'country_code' => 'GB'],\n            ['name' => 'Saint Budeaux', 'country_code' => 'GB'],\n            ['name' => 'Sainte-Marthe-sur-le-Lac', 'country_code' => 'CA'],\n            ['name' => 'Vynnyky', 'country_code' => 'UA'],\n            ['name' => 'Tunapuna', 'country_code' => 'TT'],\n            ['name' => 'Prilly', 'country_code' => 'CH'],\n            ['name' => 'Selby', 'country_code' => 'GB'],\n            ['name' => 'Viljandi', 'country_code' => 'EE'],\n            ['name' => 'Orange Walk', 'country_code' => 'BZ'],\n            ['name' => 'Torit', 'country_code' => 'SS'],\n            ['name' => 'Bois-d Arcy', 'country_code' => 'FR'],\n            ['name' => 'Saatli', 'country_code' => 'AZ'],\n            ['name' => 'Luce', 'country_code' => 'FR'],\n            ['name' => 'Stapleford', 'country_code' => 'GB'],\n            ['name' => 'Mountain House', 'country_code' => 'US'],\n            ['name' => 'Akhaltsikhe', 'country_code' => 'GE'],\n            ['name' => 'Sa Kaeo', 'country_code' => 'TH'],\n            ['name' => 'Churriana de la Vega', 'country_code' => 'ES'],\n            ['name' => 'Gines', 'country_code' => 'ES'],\n            ['name' => 'Bourne', 'country_code' => 'GB'],\n            ['name' => 'Burke Centre', 'country_code' => 'US'],\n            ['name' => 'Eppelheim', 'country_code' => 'DE'],\n            ['name' => 'Sidlice', 'country_code' => 'PL'],\n            ['name' => 'Thonex', 'country_code' => 'CH'],\n            ['name' => 'West Drayton', 'country_code' => 'GB'],\n            ['name' => 'Perivale', 'country_code' => 'GB'],\n            ['name' => 'Khasab', 'country_code' => 'OM'],\n            ['name' => 'Sidi Zouine', 'country_code' => 'MA'],\n            ['name' => 'Guerrero Negro', 'country_code' => 'MX'],\n            ['name' => 'Kidlington', 'country_code' => 'GB'],\n            ['name' => 'Cizur Mayor', 'country_code' => 'ES'],\n            ['name' => 'Santa Rosalia', 'country_code' => 'MX'],\n            ['name' => 'Valparaiso', 'country_code' => 'MX'],\n            ['name' => 'Rosyth', 'country_code' => 'GB'],\n            ['name' => 'Ban Houayxay', 'country_code' => 'LA'],\n            ['name' => 'Kukes', 'country_code' => 'AL'],\n            ['name' => 'Takoma Park', 'country_code' => 'US'],\n            ['name' => 'Dover', 'country_code' => 'US'],\n            ['name' => 'Puerto Ayora', 'country_code' => 'EC'],\n            ['name' => 'Brierley Hill', 'country_code' => 'GB'],\n            ['name' => 'Swinton', 'country_code' => 'GB'],\n            ['name' => 'Little Hulton', 'country_code' => 'GB'],\n            ['name' => 'Marlow', 'country_code' => 'GB'],\n            ['name' => 'Enghien-les-Bains', 'country_code' => 'FR'],\n            ['name' => 'Cedar Mill', 'country_code' => 'US'],\n            ['name' => 'Esquimalt', 'country_code' => 'CA'],\n            ['name' => 'Greenfield', 'country_code' => 'US'],\n            ['name' => 'Valenton', 'country_code' => 'FR'],\n            ['name' => 'Tak', 'country_code' => 'TH'],\n            ['name' => 'Eilendorf', 'country_code' => 'DE'],\n            ['name' => 'Lys-les-Lannoy', 'country_code' => 'FR'],\n            ['name' => 'Fuzuli', 'country_code' => 'AZ'],\n            ['name' => 'Phayao', 'country_code' => 'TH'],\n            ['name' => 'Haubourdin', 'country_code' => 'FR'],\n            ['name' => 'Caerfyrddin', 'country_code' => 'GB'],\n            ['name' => 'Deux-Montagnes', 'country_code' => 'CA'],\n            ['name' => 'Mehtar Lam', 'country_code' => 'AF'],\n            ['name' => 'Villa Union', 'country_code' => 'MX'],\n            ['name' => 'Pinewood', 'country_code' => 'US'],\n            ['name' => 'Chitipa', 'country_code' => 'MW'],\n            ['name' => 'Huitzilan', 'country_code' => 'MX'],\n            ['name' => 'Canet de Mar', 'country_code' => 'ES'],\n            ['name' => 'Kingstowne', 'country_code' => 'US'],\n            ['name' => 'Dumont', 'country_code' => 'US'],\n            ['name' => 'Gobabis', 'country_code' => 'NA'],\n            ['name' => 'Country Walk', 'country_code' => 'US'],\n            ['name' => 'Longwy', 'country_code' => 'FR'],\n            ['name' => 'Manassas Park', 'country_code' => 'US'],\n            ['name' => 'Rossington', 'country_code' => 'GB'],\n            ['name' => 'Woodmere', 'country_code' => 'US'],\n            ['name' => 'Stanley', 'country_code' => 'GB'],\n            ['name' => 'Lowton', 'country_code' => 'GB'],\n            ['name' => 'South Houston', 'country_code' => 'US'],\n            ['name' => 'Ringwood', 'country_code' => 'GB'],\n            ['name' => 'Sudbury', 'country_code' => 'GB'],\n            ['name' => 'Ilkley', 'country_code' => 'GB'],\n            ['name' => 'Guachochi', 'country_code' => 'MX'],\n            ['name' => 'Kamuli', 'country_code' => 'UG'],\n            ['name' => 'Juan Aldama', 'country_code' => 'MX'],\n            ['name' => 'Ovenden', 'country_code' => 'GB'],\n            ['name' => 'Childwall', 'country_code' => 'GB'],\n            ['name' => 'Ezequiel Montes', 'country_code' => 'MX'],\n            ['name' => 'Saint-Brice-sous-Foret', 'country_code' => 'FR'],\n            ['name' => 'Verwood', 'country_code' => 'GB'],\n            ['name' => 'Balancan', 'country_code' => 'MX'],\n            ['name' => 'Rijnsburg', 'country_code' => 'NL'],\n            ['name' => 'Iheddadene', 'country_code' => 'MA'],\n            ['name' => 'Whitby', 'country_code' => 'GB'],\n            ['name' => 'Hetton le Hole', 'country_code' => 'GB'],\n            ['name' => 'Miahuatlan', 'country_code' => 'MX'],\n            ['name' => 'Marsabit', 'country_code' => 'KE'],\n            ['name' => 'Egg Buckland', 'country_code' => 'GB'],\n            ['name' => 'Illizi', 'country_code' => 'DZ'],\n            ['name' => 'Avon', 'country_code' => 'FR'],\n            ['name' => 'Trstenik', 'country_code' => 'RS'],\n            ['name' => 'Hawick', 'country_code' => 'GB'],\n            ['name' => 'Wanstead', 'country_code' => 'GB'],\n            ['name' => 'Newport Pagnell', 'country_code' => 'GB'],\n            ['name' => 'Rive-de-Gier', 'country_code' => 'FR'],\n            ['name' => 'Udelnaya', 'country_code' => 'RU'],\n            ['name' => 'Tilehurst', 'country_code' => 'GB'],\n            ['name' => 'Massapequa Park', 'country_code' => 'US'],\n            ['name' => 'Wahiawa', 'country_code' => 'US'],\n            ['name' => 'Ma rib', 'country_code' => 'YE'],\n            ['name' => 'Lansdale', 'country_code' => 'US'],\n            ['name' => 'Makokou', 'country_code' => 'GA'],\n            ['name' => 'Wattignies', 'country_code' => 'FR'],\n            ['name' => 'Saint-Andre', 'country_code' => 'FR'],\n            ['name' => 'Hybla Valley', 'country_code' => 'US'],\n            ['name' => 'Shenley Church End', 'country_code' => 'GB'],\n            ['name' => 'Neubiberg', 'country_code' => 'DE'],\n            ['name' => 'Montesson', 'country_code' => 'FR'],\n            ['name' => 'Calkini', 'country_code' => 'MX'],\n            ['name' => 'Brownsville', 'country_code' => 'US'],\n            ['name' => 'Rozenburg', 'country_code' => 'NL'],\n            ['name' => 'Chaddesden', 'country_code' => 'GB'],\n            ['name' => 'San Ignacio', 'country_code' => 'BZ'],\n            ['name' => 'Marupe', 'country_code' => 'LV'],\n            ['name' => 'East Cleveland', 'country_code' => 'US'],\n            ['name' => 'Arbon', 'country_code' => 'CH'],\n            ['name' => 'Anzin', 'country_code' => 'FR'],\n            ['name' => 'Glassmanor', 'country_code' => 'US'],\n            ['name' => 'Cachoeira Alta', 'country_code' => 'BR'],\n            ['name' => 'Smethwick', 'country_code' => 'GB'],\n            ['name' => 'Roosevelt', 'country_code' => 'US'],\n            ['name' => 'Mosgiel', 'country_code' => 'NZ'],\n            ['name' => 'Coseley', 'country_code' => 'GB'],\n            ['name' => 'Brackley', 'country_code' => 'GB'],\n            ['name' => 'Tempoal de Sanchez', 'country_code' => 'MX'],\n            ['name' => 'Villasanta', 'country_code' => 'IT'],\n            ['name' => 'Live Oak', 'country_code' => 'US'],\n            ['name' => 'Armthorpe', 'country_code' => 'GB'],\n            ['name' => 'Birqash', 'country_code' => 'EG'],\n            ['name' => 'Astara', 'country_code' => 'AZ'],\n            ['name' => 'Phrae', 'country_code' => 'TH'],\n            ['name' => 'Milngavie', 'country_code' => 'GB'],\n            ['name' => 'Zvecan', 'country_code' => 'XK'],\n            ['name' => 'Plunge', 'country_code' => 'LT'],\n            ['name' => 'Puerto Carreno', 'country_code' => 'CO'],\n            ['name' => 'Bodmin', 'country_code' => 'GB'],\n            ['name' => 'Ntungamo', 'country_code' => 'UG'],\n            ['name' => 'Clayton', 'country_code' => 'US'],\n            ['name' => 'L Ancienne-Lorette', 'country_code' => 'CA'],\n            ['name' => 'Redruth', 'country_code' => 'GB'],\n            ['name' => 'Walsall Wood', 'country_code' => 'GB'],\n            ['name' => 'San Nicolas de los Ranchos', 'country_code' => 'MX'],\n            ['name' => 'Tukums', 'country_code' => 'LV'],\n            ['name' => 'Mollerusa', 'country_code' => 'ES'],\n            ['name' => 'Ramonville-Saint-Agne', 'country_code' => 'FR'],\n            ['name' => 'Hollinwood', 'country_code' => 'GB'],\n            ['name' => 'Whakatane', 'country_code' => 'NZ'],\n            ['name' => 'Struga', 'country_code' => 'MK'],\n            ['name' => 'Streetly', 'country_code' => 'GB'],\n            ['name' => 'Fraserburgh', 'country_code' => 'GB'],\n            ['name' => 'Glenmont', 'country_code' => 'US'],\n            ['name' => 'Vicente Guerrero', 'country_code' => 'MX'],\n            ['name' => 'Bull Run', 'country_code' => 'US'],\n            ['name' => 'Elesbao Veloso', 'country_code' => 'BR'],\n            ['name' => 'Pathum Thani', 'country_code' => 'TH'],\n            ['name' => 'Conisbrough', 'country_code' => 'GB'],\n            ['name' => 'Thorpe Saint Andrew', 'country_code' => 'GB'],\n            ['name' => 'Kretinga', 'country_code' => 'LT'],\n            ['name' => 'Bostonia', 'country_code' => 'US'],\n            ['name' => 'Artesia', 'country_code' => 'US'],\n            ['name' => 'Yauco', 'country_code' => 'PR'],\n            ['name' => 'Tabernes Blanques', 'country_code' => 'ES'],\n            ['name' => 'Blunsdon Saint Andrew', 'country_code' => 'GB'],\n            ['name' => 'Herceg Novi', 'country_code' => 'ME'],\n            ['name' => 'Evington', 'country_code' => 'GB'],\n            ['name' => 'South Orange Village', 'country_code' => 'US'],\n            ['name' => 'Chojnow', 'country_code' => 'PL'],\n            ['name' => 'Broughty Ferry', 'country_code' => 'GB'],\n            ['name' => 'Milford Haven', 'country_code' => 'GB'],\n            ['name' => 'Bredbury', 'country_code' => 'GB'],\n            ['name' => 'New Milford', 'country_code' => 'US'],\n            ['name' => 'Ogijares', 'country_code' => 'ES'],\n            ['name' => 'Ojus', 'country_code' => 'US'],\n            ['name' => 'East Riverdale', 'country_code' => 'US'],\n            ['name' => 'Castellanza', 'country_code' => 'IT'],\n            ['name' => 'Mongat', 'country_code' => 'ES'],\n            ['name' => 'Hall in Tirol', 'country_code' => 'AT'],\n            ['name' => 'Four Corners', 'country_code' => 'US'],\n            ['name' => 'Hillcrest Heights', 'country_code' => 'US'],\n            ['name' => 'Rosu', 'country_code' => 'RO'],\n            ['name' => 'Little Lever', 'country_code' => 'GB'],\n            ['name' => 'Rakvere', 'country_code' => 'EE'],\n            ['name' => 'Adelphi', 'country_code' => 'US'],\n            ['name' => 'Moussoro', 'country_code' => 'TD'],\n            ['name' => 'Hazel Park', 'country_code' => 'US'],\n            ['name' => 'Ranong', 'country_code' => 'TH'],\n            ['name' => 'Mouvaux', 'country_code' => 'FR'],\n            ['name' => 'Stanford', 'country_code' => 'US'],\n            ['name' => 'Baranzate', 'country_code' => 'IT'],\n            ['name' => 'Nakhon Nayok', 'country_code' => 'TH'],\n            ['name' => 'Thatto Heath', 'country_code' => 'GB'],\n            ['name' => 'Mahikeng', 'country_code' => 'ZA'],\n            ['name' => 'Solaro', 'country_code' => 'IT'],\n            ['name' => 'Oulad Hamdane', 'country_code' => 'MA'],\n            ['name' => 'Radovis', 'country_code' => 'MK'],\n            ['name' => 'Naama', 'country_code' => 'DZ'],\n            ['name' => 'East San Gabriel', 'country_code' => 'US'],\n            ['name' => 'Morangis', 'country_code' => 'FR'],\n            ['name' => 'Sedgley', 'country_code' => 'GB'],\n            ['name' => 'Santa Cruz Amilpas', 'country_code' => 'MX'],\n            ['name' => 'Minehead', 'country_code' => 'GB'],\n            ['name' => 'Xaignabouli', 'country_code' => 'LA'],\n            ['name' => 'Koulamoutou', 'country_code' => 'GA'],\n            ['name' => 'Vincent', 'country_code' => 'US'],\n            ['name' => 'Varedo', 'country_code' => 'IT'],\n            ['name' => 'Villa Hayes', 'country_code' => 'PY'],\n            ['name' => 'San Miguel Xoxtla', 'country_code' => 'MX'],\n            ['name' => 'Wollaston', 'country_code' => 'GB'],\n            ['name' => 'Backa Topola', 'country_code' => 'RS'],\n            ['name' => 'Broadwater', 'country_code' => 'GB'],\n            ['name' => 'Aldama', 'country_code' => 'MX'],\n            ['name' => 'Monte di Procida', 'country_code' => 'IT'],\n            ['name' => 'Mexicaltzingo', 'country_code' => 'MX'],\n            ['name' => 'Kinkala', 'country_code' => 'CG'],\n            ['name' => 'Buckingham', 'country_code' => 'GB'],\n            ['name' => 'Castle Bromwich', 'country_code' => 'GB'],\n            ['name' => 'Aylestone', 'country_code' => 'GB'],\n            ['name' => 'Cherryland', 'country_code' => 'US'],\n            ['name' => 'Chard', 'country_code' => 'GB'],\n            ['name' => 'Fleury-Merogis', 'country_code' => 'FR'],\n            ['name' => 'Spitalfields', 'country_code' => 'GB'],\n            ['name' => 'Bryn', 'country_code' => 'GB'],\n            ['name' => 'Causeni', 'country_code' => 'MD'],\n            ['name' => 'Sutton on Hull', 'country_code' => 'GB'],\n            ['name' => 'Persan', 'country_code' => 'FR'],\n            ['name' => 'Fontenay-le-Fleury', 'country_code' => 'FR'],\n            ['name' => 'Midsomer Norton', 'country_code' => 'GB'],\n            ['name' => 'Auray', 'country_code' => 'FR'],\n            ['name' => 'Silute', 'country_code' => 'LT'],\n            ['name' => 'Angel R. Cabada', 'country_code' => 'MX'],\n            ['name' => 'Southwick', 'country_code' => 'GB'],\n            ['name' => 'Bijelo Polje', 'country_code' => 'ME'],\n            ['name' => 'Anadyr', 'country_code' => 'RU'],\n            ['name' => 'Longbenton', 'country_code' => 'GB'],\n            ['name' => 'Walnut Park', 'country_code' => 'US'],\n            ['name' => 'Pelsall', 'country_code' => 'GB'],\n            ['name' => 'Maliana', 'country_code' => 'TL'],\n            ['name' => 'Ascension', 'country_code' => 'MX'],\n            ['name' => 'Floral Park', 'country_code' => 'US'],\n            ['name' => 'White Center', 'country_code' => 'US'],\n            ['name' => 'Sukhothai', 'country_code' => 'TH'],\n            ['name' => 'Parkway', 'country_code' => 'US'],\n            ['name' => 'Altay', 'country_code' => 'MN'],\n            ['name' => 'Asperg', 'country_code' => 'DE'],\n            ['name' => 'Thornbury', 'country_code' => 'GB'],\n            ['name' => 'East Rancho Dominguez', 'country_code' => 'US'],\n            ['name' => 'South River', 'country_code' => 'US'],\n            ['name' => 'Peshkopi', 'country_code' => 'AL'],\n            ['name' => 'Gevgelija', 'country_code' => 'MK'],\n            ['name' => 'Eggertsville', 'country_code' => 'US'],\n            ['name' => 'Allestree', 'country_code' => 'GB'],\n            ['name' => 'Epinay-sous-Senart', 'country_code' => 'FR'],\n            ['name' => 'Lye', 'country_code' => 'GB'],\n            ['name' => 'Brownhills', 'country_code' => 'GB'],\n            ['name' => 'North Arlington', 'country_code' => 'US'],\n            ['name' => 'Stranraer', 'country_code' => 'GB'],\n            ['name' => 'McFarland', 'country_code' => 'US'],\n            ['name' => 'Palmetto Estates', 'country_code' => 'US'],\n            ['name' => 'Uthai Thani', 'country_code' => 'TH'],\n            ['name' => 'Fenton', 'country_code' => 'GB'],\n            ['name' => 'Ainaro', 'country_code' => 'TL'],\n            ['name' => 'Parlier', 'country_code' => 'US'],\n            ['name' => 'Vaires-sur-Marne', 'country_code' => 'FR'],\n            ['name' => 'Edinet', 'country_code' => 'MD'],\n            ['name' => 'Sedavi', 'country_code' => 'ES'],\n            ['name' => 'West University Place', 'country_code' => 'US'],\n            ['name' => 'Palanga', 'country_code' => 'LT'],\n            ['name' => 'Knutsford', 'country_code' => 'GB'],\n            ['name' => 'Chepstow', 'country_code' => 'GB'],\n            ['name' => 'Kiboga', 'country_code' => 'UG'],\n            ['name' => 'Seiada', 'country_code' => 'TN'],\n            ['name' => 'Chilwell', 'country_code' => 'GB'],\n            ['name' => 'Corsham', 'country_code' => 'GB'],\n            ['name' => 'Voisins-le-Bretonneux', 'country_code' => 'FR'],\n            ['name' => 'Arpajon', 'country_code' => 'FR'],\n            ['name' => 'Sonoita', 'country_code' => 'MX'],\n            ['name' => 'Kurdamir', 'country_code' => 'AZ'],\n            ['name' => 'La Palma', 'country_code' => 'US'],\n            ['name' => 'Avocado Heights', 'country_code' => 'US'],\n            ['name' => 'La Tour-de-Peilz', 'country_code' => 'CH'],\n            ['name' => 'Pacific Grove', 'country_code' => 'US'],\n            ['name' => 'Asbury Park', 'country_code' => 'US'],\n            ['name' => 'Kamnik', 'country_code' => 'SI'],\n            ['name' => 'Goygol', 'country_code' => 'AZ'],\n            ['name' => 'Billere', 'country_code' => 'FR'],\n            ['name' => 'Hamworthy', 'country_code' => 'GB'],\n            ['name' => 'Saint-Max', 'country_code' => 'FR'],\n            ['name' => 'Bellmore', 'country_code' => 'US'],\n            ['name' => 'Berkley', 'country_code' => 'US'],\n            ['name' => 'Anenecuilco', 'country_code' => 'MX'],\n            ['name' => 'Westbury', 'country_code' => 'US'],\n            ['name' => 'La Grange', 'country_code' => 'US'],\n            ['name' => 'Santa Maria Jalapa del Marques', 'country_code' => 'MX'],\n            ['name' => 'Devizes', 'country_code' => 'GB'],\n            ['name' => 'Radviliskis', 'country_code' => 'LT'],\n            ['name' => 'Wilkinsburg', 'country_code' => 'US'],\n            ['name' => 'El Fuerte', 'country_code' => 'MX'],\n            ['name' => 'Fords', 'country_code' => 'US'],\n            ['name' => 'Zubin Potok', 'country_code' => 'XK'],\n            ['name' => 'Isla Mujeres', 'country_code' => 'MX'],\n            ['name' => 'South Farmingdale', 'country_code' => 'US'],\n            ['name' => 'La Magdalena Chichicaspa', 'country_code' => 'MX'],\n            ['name' => 'Calvizzano', 'country_code' => 'IT'],\n            ['name' => 'Campbelltown', 'country_code' => 'AU'],\n            ['name' => 'Liestal', 'country_code' => 'CH'],\n            ['name' => 'Chene-Bougeries', 'country_code' => 'CH'],\n            ['name' => 'Wordsley', 'country_code' => 'GB'],\n            ['name' => 'Tarxien', 'country_code' => 'MT'],\n            ['name' => 'Snaresbrook', 'country_code' => 'GB'],\n            ['name' => 'Santa Maria Huazolotitlan', 'country_code' => 'MX'],\n            ['name' => 'Paro', 'country_code' => 'BT'],\n            ['name' => 'Broughton Astley', 'country_code' => 'GB'],\n            ['name' => 'Montevrain', 'country_code' => 'FR'],\n            ['name' => 'Ecublens', 'country_code' => 'CH'],\n            ['name' => 'Phongsali', 'country_code' => 'LA'],\n            ['name' => 'Lambeth', 'country_code' => 'GB'],\n            ['name' => 'Cuencame de Ceniceros', 'country_code' => 'MX'],\n            ['name' => 'Quthing', 'country_code' => 'LS'],\n            ['name' => 'West Park', 'country_code' => 'US'],\n            ['name' => 'Kidal', 'country_code' => 'ML'],\n            ['name' => 'Wallingford', 'country_code' => 'GB'],\n            ['name' => 'Timperley', 'country_code' => 'GB'],\n            ['name' => 'Parkstone', 'country_code' => 'GB'],\n            ['name' => 'San Isidro Buen Suceso', 'country_code' => 'MX'],\n            ['name' => 'North New Hyde Park', 'country_code' => 'US'],\n            ['name' => 'Sandridge', 'country_code' => 'GB'],\n            ['name' => 'Gwanda', 'country_code' => 'ZW'],\n            ['name' => 'Olton', 'country_code' => 'GB'],\n            ['name' => 'Seaford', 'country_code' => 'US'],\n            ['name' => 'Masalli', 'country_code' => 'AZ'],\n            ['name' => 'Kenmore', 'country_code' => 'US'],\n            ['name' => 'Fayroz Koh', 'country_code' => 'AF'],\n            ['name' => 'Leopold', 'country_code' => 'AU'],\n            ['name' => 'Baucau', 'country_code' => 'TL'],\n            ['name' => 'Saucillo', 'country_code' => 'MX'],\n            ['name' => 'Ocean Pointe', 'country_code' => 'US'],\n            ['name' => 'Canegrate', 'country_code' => 'IT'],\n            ['name' => 'Woolton', 'country_code' => 'GB'],\n            ['name' => 'Le Grand-Saconnex', 'country_code' => 'CH'],\n            ['name' => 'Newport', 'country_code' => 'US'],\n            ['name' => 'Cesis', 'country_code' => 'LV'],\n            ['name' => 'Killamarsh', 'country_code' => 'GB'],\n            ['name' => 'Prescot', 'country_code' => 'GB'],\n            ['name' => 'Ozurgeti', 'country_code' => 'GE'],\n            ['name' => 'Jesenice', 'country_code' => 'SI'],\n            ['name' => 'Huntington', 'country_code' => 'GB'],\n            ['name' => 'Dzitbalche', 'country_code' => 'MX'],\n            ['name' => 'Huetor Vega', 'country_code' => 'ES'],\n            ['name' => 'New Cassel', 'country_code' => 'US'],\n            ['name' => 'Caldicot', 'country_code' => 'GB'],\n            ['name' => 'Tadjourah', 'country_code' => 'DJ'],\n            ['name' => 'Abergavenny', 'country_code' => 'GB'],\n            ['name' => 'Eisenstadt', 'country_code' => 'AT'],\n            ['name' => 'Libertad', 'country_code' => 'UY'],\n            ['name' => 'El Menzel', 'country_code' => 'MA'],\n            ['name' => 'Chiautla de Tapia', 'country_code' => 'MX'],\n            ['name' => 'San Pedro Jicayan', 'country_code' => 'MX'],\n            ['name' => 'Rorschach', 'country_code' => 'CH'],\n            ['name' => 'Lykovrysi', 'country_code' => 'GR'],\n            ['name' => 'Lemon Hill', 'country_code' => 'US'],\n            ['name' => 'Kemp Mill', 'country_code' => 'US'],\n            ['name' => 'Saint-Andre-les-Vergers', 'country_code' => 'FR'],\n            ['name' => 'Ondorhaan', 'country_code' => 'MN'],\n            ['name' => 'Sironko', 'country_code' => 'UG'],\n            ['name' => 'Debar', 'country_code' => 'MK'],\n            ['name' => 'Hwlffordd', 'country_code' => 'GB'],\n            ['name' => 'Pierre', 'country_code' => 'US'],\n            ['name' => 'Abertillery', 'country_code' => 'GB'],\n            ['name' => 'Biassono', 'country_code' => 'IT'],\n            ['name' => 'Hoyland Nether', 'country_code' => 'GB'],\n            ['name' => 'Bargoed', 'country_code' => 'GB'],\n            ['name' => 'Falls Church', 'country_code' => 'US'],\n            ['name' => 'Weehawken', 'country_code' => 'US'],\n            ['name' => 'Luganville', 'country_code' => 'VU'],\n            ['name' => 'Kriva Palanka', 'country_code' => 'MK'],\n            ['name' => 'Berriozar', 'country_code' => 'ES'],\n            ['name' => 'Forecariah', 'country_code' => 'GN'],\n            ['name' => 'Jaltenango', 'country_code' => 'MX'],\n            ['name' => 'Pincourt', 'country_code' => 'CA'],\n            ['name' => 'Tierra Colorada', 'country_code' => 'MX'],\n            ['name' => 'Stiring-Wendel', 'country_code' => 'FR'],\n            ['name' => 'Malvinas Argentinas', 'country_code' => 'AR'],\n            ['name' => 'Basse Santa Su', 'country_code' => 'GM'],\n            ['name' => 'Ar Rommani', 'country_code' => 'MA'],\n            ['name' => 'Baruun-Urt', 'country_code' => 'MN'],\n            ['name' => 'Haddon', 'country_code' => 'US'],\n            ['name' => 'Villa Union', 'country_code' => 'MX'],\n            ['name' => 'Carnoustie', 'country_code' => 'GB'],\n            ['name' => 'Port Antonio', 'country_code' => 'JM'],\n            ['name' => 'Ewa Beach', 'country_code' => 'US'],\n            ['name' => 'Rayon', 'country_code' => 'MX'],\n            ['name' => 'Gabu', 'country_code' => 'GW'],\n            ['name' => 'Schwyz', 'country_code' => 'CH'],\n            ['name' => 'Ashby de la Zouch', 'country_code' => 'GB'],\n            ['name' => 'Tonyrefail', 'country_code' => 'GB'],\n            ['name' => 'Halawa', 'country_code' => 'US'],\n            ['name' => 'Sigulda', 'country_code' => 'LV'],\n            ['name' => 'Wath upon Dearne', 'country_code' => 'GB'],\n            ['name' => 'Hoenheim', 'country_code' => 'FR'],\n            ['name' => 'Alsager', 'country_code' => 'GB'],\n            ['name' => 'Birsfelden', 'country_code' => 'CH'],\n            ['name' => 'Marsaskala', 'country_code' => 'MT'],\n            ['name' => 'North Fair Oaks', 'country_code' => 'US'],\n            ['name' => 'Bacalar', 'country_code' => 'MX'],\n            ['name' => 'Muna', 'country_code' => 'MX'],\n            ['name' => 'Hambantota', 'country_code' => 'LK'],\n            ['name' => 'Cayey', 'country_code' => 'PR'],\n            ['name' => 'Haydock', 'country_code' => 'GB'],\n            ['name' => 'Neftcala', 'country_code' => 'AZ'],\n            ['name' => 'Laaouama', 'country_code' => 'MA'],\n            ['name' => 'Cudworth', 'country_code' => 'GB'],\n            ['name' => 'Zefyri', 'country_code' => 'GR'],\n            ['name' => 'Qusar', 'country_code' => 'AZ'],\n            ['name' => 'Villars-sur-Glane', 'country_code' => 'CH'],\n            ['name' => 'San Pedro Ixcatlan', 'country_code' => 'MX'],\n            ['name' => 'Brislington', 'country_code' => 'GB'],\n            ['name' => 'Oulad Ayyad', 'country_code' => 'MA'],\n            ['name' => 'Shoeburyness', 'country_code' => 'GB'],\n            ['name' => 'Coalcoman de Vazquez Pallares', 'country_code' => 'MX'],\n            ['name' => 'Nuevo Progreso', 'country_code' => 'MX'],\n            ['name' => 'Stone Ridge', 'country_code' => 'US'],\n            ['name' => 'Cowley', 'country_code' => 'GB'],\n            ['name' => 'Fairview', 'country_code' => 'US'],\n            ['name' => 'Porto Esperidiao', 'country_code' => 'BR'],\n            ['name' => 'Halstead', 'country_code' => 'GB'],\n            ['name' => 'Hawaiian Gardens', 'country_code' => 'US'],\n            ['name' => 'Norridge', 'country_code' => 'US'],\n            ['name' => 'Wealdstone', 'country_code' => 'GB'],\n            ['name' => 'Gillingham', 'country_code' => 'GB'],\n            ['name' => 'Oakham', 'country_code' => 'GB'],\n            ['name' => 'Hatch End', 'country_code' => 'GB'],\n            ['name' => 'Lemington', 'country_code' => 'GB'],\n            ['name' => 'Street', 'country_code' => 'GB'],\n            ['name' => 'Coacoatzintla', 'country_code' => 'MX'],\n            ['name' => 'Cowes', 'country_code' => 'GB'],\n            ['name' => 'Willowick', 'country_code' => 'US'],\n            ['name' => 'Kronshagen', 'country_code' => 'DE'],\n            ['name' => 'Sjenica', 'country_code' => 'RS'],\n            ['name' => 'Ville-d Avray', 'country_code' => 'FR'],\n            ['name' => 'Raynes Park', 'country_code' => 'GB'],\n            ['name' => 'Burslem', 'country_code' => 'GB'],\n            ['name' => 'Waimalu', 'country_code' => 'US'],\n            ['name' => 'Chinsali', 'country_code' => 'ZM'],\n            ['name' => 'Ryhope', 'country_code' => 'GB'],\n            ['name' => 'Chichihualco', 'country_code' => 'MX'],\n            ['name' => 'Bishops Cleeve', 'country_code' => 'GB'],\n            ['name' => 'Helston', 'country_code' => 'GB'],\n            ['name' => 'Ponte San Pietro', 'country_code' => 'IT'],\n            ['name' => 'Cetinje', 'country_code' => 'ME'],\n            ['name' => 'Talant', 'country_code' => 'FR'],\n            ['name' => 'Kisoro', 'country_code' => 'UG'],\n            ['name' => 'San Gregorio di Catania', 'country_code' => 'IT'],\n            ['name' => 'Franklin Park', 'country_code' => 'US'],\n            ['name' => 'Olympia Heights', 'country_code' => 'US'],\n            ['name' => 'Nacaome', 'country_code' => 'HN'],\n            ['name' => 'Kuressaare', 'country_code' => 'EE'],\n            ['name' => 'Altamirano', 'country_code' => 'MX'],\n            ['name' => 'Royston', 'country_code' => 'GB'],\n            ['name' => 'Lerma', 'country_code' => 'MX'],\n            ['name' => 'Chicago Ridge', 'country_code' => 'US'],\n            ['name' => 'Kippax', 'country_code' => 'GB'],\n            ['name' => 'Bishopstoke', 'country_code' => 'GB'],\n            ['name' => 'Canatlan', 'country_code' => 'MX'],\n            ['name' => 'Collingswood', 'country_code' => 'US'],\n            ['name' => 'Negele', 'country_code' => 'ET'],\n            ['name' => 'Risca', 'country_code' => 'GB'],\n            ['name' => 'Glascote', 'country_code' => 'GB'],\n            ['name' => 'Cheam', 'country_code' => 'GB'],\n            ['name' => 'Plav', 'country_code' => 'ME'],\n            ['name' => 'Saint Ann s Bay', 'country_code' => 'JM'],\n            ['name' => 'Sveti Nikole', 'country_code' => 'MK'],\n            ['name' => 'Whitefish Bay', 'country_code' => 'US'],\n            ['name' => 'Deville-les-Rouen', 'country_code' => 'FR'],\n            ['name' => 'Bexley', 'country_code' => 'US'],\n            ['name' => 'San Patricio', 'country_code' => 'MX'],\n            ['name' => 'Harper Woods', 'country_code' => 'US'],\n            ['name' => 'Bar', 'country_code' => 'ME'],\n            ['name' => 'Las Veredas', 'country_code' => 'MX'],\n            ['name' => 'Gonzalez', 'country_code' => 'MX'],\n            ['name' => 'Naifaru', 'country_code' => 'MV'],\n            ['name' => 'Princeton Meadows', 'country_code' => 'US'],\n            ['name' => 'Highland Park', 'country_code' => 'US'],\n            ['name' => 'Tovuz', 'country_code' => 'AZ'],\n            ['name' => 'Forest Park', 'country_code' => 'US'],\n            ['name' => 'Ang Thong', 'country_code' => 'TH'],\n            ['name' => 'Henley on Thames', 'country_code' => 'GB'],\n            ['name' => 'Shterpce', 'country_code' => 'XK'],\n            ['name' => 'Epinay-sur-Orge', 'country_code' => 'FR'],\n            ['name' => 'Aberaman', 'country_code' => 'GB'],\n            ['name' => 'Mit Damsis', 'country_code' => 'EG'],\n            ['name' => 'Torpoint', 'country_code' => 'GB'],\n            ['name' => 'Hirnyk', 'country_code' => 'UA'],\n            ['name' => 'Roselle Park', 'country_code' => 'US'],\n            ['name' => 'San Luis de La Loma', 'country_code' => 'MX'],\n            ['name' => 'Imsida', 'country_code' => 'MT'],\n            ['name' => 'Akil', 'country_code' => 'MX'],\n            ['name' => 'Craponne', 'country_code' => 'FR'],\n            ['name' => 'Tavistock', 'country_code' => 'GB'],\n            ['name' => 'Dugny', 'country_code' => 'FR'],\n            ['name' => 'Cupar', 'country_code' => 'GB'],\n            ['name' => 'Marton', 'country_code' => 'GB'],\n            ['name' => 'Capodrise', 'country_code' => 'IT'],\n            ['name' => 'Beaumont', 'country_code' => 'FR'],\n            ['name' => 'San Carlos', 'country_code' => 'NI'],\n            ['name' => 'Stanwell', 'country_code' => 'GB'],\n            ['name' => 'Nazaret', 'country_code' => 'ES'],\n            ['name' => 'Grover Beach', 'country_code' => 'US'],\n            ['name' => 'Ormesson-sur-Marne', 'country_code' => 'FR'],\n            ['name' => 'Brierfield', 'country_code' => 'GB'],\n            ['name' => 'Chanteloup-les-Vignes', 'country_code' => 'FR'],\n            ['name' => 'Chatteris', 'country_code' => 'GB'],\n            ['name' => 'Ifield', 'country_code' => 'GB'],\n            ['name' => 'Buckhurst Hill', 'country_code' => 'GB'],\n            ['name' => 'Newport', 'country_code' => 'GB'],\n            ['name' => 'Santa Ana', 'country_code' => 'CR'],\n            ['name' => 'Nuevo Ideal', 'country_code' => 'MX'],\n            ['name' => 'Maromme', 'country_code' => 'FR'],\n            ['name' => 'Faya', 'country_code' => 'TD'],\n            ['name' => 'Eaton Socon', 'country_code' => 'GB'],\n            ['name' => 'Domzale', 'country_code' => 'SI'],\n            ['name' => 'Negotino', 'country_code' => 'MK'],\n            ['name' => 'Gzira', 'country_code' => 'MT'],\n            ['name' => 'Horsell', 'country_code' => 'GB'],\n            ['name' => 'Whitchurch', 'country_code' => 'GB'],\n            ['name' => 'Platon Sanchez', 'country_code' => 'MX'],\n            ['name' => 'Edgewater', 'country_code' => 'US'],\n            ['name' => 'Corinda', 'country_code' => 'AU'],\n            ['name' => 'Kumi', 'country_code' => 'UG'],\n            ['name' => 'Huntington', 'country_code' => 'US'],\n            ['name' => 'Stocksbridge', 'country_code' => 'GB'],\n            ['name' => 'Swieqi', 'country_code' => 'MT'],\n            ['name' => 'Meliana', 'country_code' => 'ES'],\n            ['name' => 'Kilsyth', 'country_code' => 'GB'],\n            ['name' => 'Drochia', 'country_code' => 'MD'],\n            ['name' => 'Tlacotalpan', 'country_code' => 'MX'],\n            ['name' => 'Montigny-en-Gohelle', 'country_code' => 'FR'],\n            ['name' => 'Delemont', 'country_code' => 'CH'],\n            ['name' => 'Mannedorf', 'country_code' => 'CH'],\n            ['name' => 'Nieuw Nickerie', 'country_code' => 'SR'],\n            ['name' => 'Mwanza', 'country_code' => 'MW'],\n            ['name' => 'San Juanito', 'country_code' => 'MX'],\n            ['name' => 'Barnoldswick', 'country_code' => 'GB'],\n            ['name' => 'Mariental', 'country_code' => 'NA'],\n            ['name' => 'Tixkokob', 'country_code' => 'MX'],\n            ['name' => 'Santa Ana', 'country_code' => 'MX'],\n            ['name' => 'Magugpo Poblacion', 'country_code' => 'PH'],\n            ['name' => 'Acanceh', 'country_code' => 'MX'],\n            ['name' => 'La Grange Park', 'country_code' => 'US'],\n            ['name' => 'Shorewood', 'country_code' => 'US'],\n            ['name' => 'Jarville-la-Malgrange', 'country_code' => 'FR'],\n            ['name' => 'Flixton', 'country_code' => 'GB'],\n            ['name' => 'Bocas del Toro', 'country_code' => 'PA'],\n            ['name' => 'Tetela del Volcan', 'country_code' => 'MX'],\n            ['name' => 'Steinbach am Taunus', 'country_code' => 'DE'],\n            ['name' => 'Handsworth', 'country_code' => 'GB'],\n            ['name' => 'Nova Gorica', 'country_code' => 'SI'],\n            ['name' => 'Coatesville', 'country_code' => 'US'],\n            ['name' => 'Zejtun', 'country_code' => 'MT'],\n            ['name' => 'Kibuye', 'country_code' => 'RW'],\n            ['name' => 'Pajacuaran', 'country_code' => 'MX'],\n            ['name' => 'Hellesdon', 'country_code' => 'GB'],\n            ['name' => 'Shepton Mallet', 'country_code' => 'GB'],\n            ['name' => 'La Huacana', 'country_code' => 'MX'],\n            ['name' => 'Crosne', 'country_code' => 'FR'],\n            ['name' => 'Gaillard', 'country_code' => 'FR'],\n            ['name' => 'Inverurie', 'country_code' => 'GB'],\n            ['name' => 'Steinkjer', 'country_code' => 'NO'],\n            ['name' => 'Sugarland Run', 'country_code' => 'US'],\n            ['name' => 'Psychiko', 'country_code' => 'GR'],\n            ['name' => 'New Carrollton', 'country_code' => 'US'],\n            ['name' => 'San Ignacio Cohuirimpo', 'country_code' => 'MX'],\n            ['name' => 'Procida', 'country_code' => 'IT'],\n            ['name' => 'Caudebec-les-Elbeuf', 'country_code' => 'FR'],\n            ['name' => 'Valga', 'country_code' => 'EE'],\n            ['name' => 'Ialoveni', 'country_code' => 'MD'],\n            ['name' => 'Ridgefield Park', 'country_code' => 'US'],\n            ['name' => 'Obo', 'country_code' => 'CF'],\n            ['name' => 'Daru', 'country_code' => 'PG'],\n            ['name' => 'Lamphun', 'country_code' => 'TH'],\n            ['name' => 'Cuatro Cienegas de Carranza', 'country_code' => 'MX'],\n            ['name' => 'Ziniare', 'country_code' => 'BF'],\n            ['name' => 'Key Biscayne', 'country_code' => 'US'],\n            ['name' => 'Federal Heights', 'country_code' => 'US'],\n            ['name' => 'Cornelius', 'country_code' => 'US'],\n            ['name' => 'Kingston', 'country_code' => 'US'],\n            ['name' => 'Ardmore', 'country_code' => 'US'],\n            ['name' => 'Tacotalpa', 'country_code' => 'MX'],\n            ['name' => 'University Heights', 'country_code' => 'US'],\n            ['name' => 'Pierre-Benite', 'country_code' => 'FR'],\n            ['name' => 'Candelaria', 'country_code' => 'MX'],\n            ['name' => 'Chai Nat', 'country_code' => 'TH'],\n            ['name' => 'Rokiskis', 'country_code' => 'LT'],\n            ['name' => 'Wilton Manors', 'country_code' => 'US'],\n            ['name' => 'Valadares', 'country_code' => 'PT'],\n            ['name' => 'Lagamar', 'country_code' => 'BR'],\n            ['name' => 'At Tur', 'country_code' => 'EG'],\n            ['name' => 'Blackwood', 'country_code' => 'GB'],\n            ['name' => 'Oroquieta', 'country_code' => 'PH'],\n            ['name' => 'Santa Venera', 'country_code' => 'MT'],\n            ['name' => 'Exhall', 'country_code' => 'GB'],\n            ['name' => 'Manati', 'country_code' => 'PR'],\n            ['name' => 'Tartar', 'country_code' => 'AZ'],\n            ['name' => 'Clarkston', 'country_code' => 'US'],\n            ['name' => 'Caernarfon', 'country_code' => 'GB'],\n            ['name' => 'Shildon', 'country_code' => 'GB'],\n            ['name' => 'Tlahualilo de Zaragoza', 'country_code' => 'MX'],\n            ['name' => 'Tinqueux', 'country_code' => 'FR'],\n            ['name' => 'Hincesti', 'country_code' => 'MD'],\n            ['name' => 'Nairn', 'country_code' => 'GB'],\n            ['name' => 'Attard', 'country_code' => 'MT'],\n            ['name' => 'Ermoupoli', 'country_code' => 'GR'],\n            ['name' => 'Lantana', 'country_code' => 'US'],\n            ['name' => 'Ahuacatlan', 'country_code' => 'MX'],\n            ['name' => 'Roby', 'country_code' => 'GB'],\n            ['name' => 'Ntcheu', 'country_code' => 'MW'],\n            ['name' => 'Singerei', 'country_code' => 'MD'],\n            ['name' => 'Nueva Palmira', 'country_code' => 'UY'],\n            ['name' => 'L Ile-Saint-Denis', 'country_code' => 'FR'],\n            ['name' => 'Broadstone', 'country_code' => 'GB'],\n            ['name' => 'Avranches', 'country_code' => 'FR'],\n            ['name' => 'San Marzano sul Sarno', 'country_code' => 'IT'],\n            ['name' => 'Murska Sobota', 'country_code' => 'SI'],\n            ['name' => 'Pelham', 'country_code' => 'US'],\n            ['name' => 'Cherry Creek', 'country_code' => 'US'],\n            ['name' => 'Bradford-on-Avon', 'country_code' => 'GB'],\n            ['name' => 'Worsley', 'country_code' => 'GB'],\n            ['name' => 'Rio Grande', 'country_code' => 'PR'],\n            ['name' => 'Chapeltown', 'country_code' => 'GB'],\n            ['name' => 'Marquette-les-Lille', 'country_code' => 'FR'],\n            ['name' => 'San Sebastiano al Vesuvio', 'country_code' => 'IT'],\n            ['name' => 'Ciudad Tula', 'country_code' => 'MX'],\n            ['name' => 'Bulgan', 'country_code' => 'MN'],\n            ['name' => 'Fosses', 'country_code' => 'FR'],\n            ['name' => 'Mariehamn', 'country_code' => 'FI'],\n            ['name' => 'Taraclia', 'country_code' => 'MD'],\n            ['name' => 'Warfield', 'country_code' => 'GB'],\n            ['name' => 'Zamora', 'country_code' => 'EC'],\n            ['name' => 'Chavannes-pres-Renens', 'country_code' => 'CH'],\n            ['name' => 'Croissy-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Utley', 'country_code' => 'GB'],\n            ['name' => 'Voru', 'country_code' => 'EE'],\n            ['name' => 'Minnehaha', 'country_code' => 'US'],\n            ['name' => 'Beylaqan', 'country_code' => 'AZ'],\n            ['name' => 'Cesa', 'country_code' => 'IT'],\n            ['name' => 'Patchogue', 'country_code' => 'US'],\n            ['name' => 'Oak Hills', 'country_code' => 'US'],\n            ['name' => 'Allington', 'country_code' => 'GB'],\n            ['name' => 'Igny', 'country_code' => 'FR'],\n            ['name' => 'Cuapiaxtla de Madero', 'country_code' => 'MX'],\n            ['name' => 'Heybridge', 'country_code' => 'GB'],\n            ['name' => 'Qufadah', 'country_code' => 'EG'],\n            ['name' => 'Tlalixtac de Cabrera', 'country_code' => 'MX'],\n            ['name' => 'Neuville-les-Dieppe', 'country_code' => 'FR'],\n            ['name' => 'Qalat', 'country_code' => 'AF'],\n            ['name' => 'Batken', 'country_code' => 'KG'],\n            ['name' => 'Ayapango', 'country_code' => 'MX'],\n            ['name' => 'Sallaumines', 'country_code' => 'FR'],\n            ['name' => 'North Merrick', 'country_code' => 'US'],\n            ['name' => 'Eybens', 'country_code' => 'FR'],\n            ['name' => 'Home Gardens', 'country_code' => 'US'],\n            ['name' => 'Falesti', 'country_code' => 'MD'],\n            ['name' => 'Salisbury', 'country_code' => 'US'],\n            ['name' => 'Xicotencatl', 'country_code' => 'MX'],\n            ['name' => 'Assomada', 'country_code' => 'CV'],\n            ['name' => 'Druskininkai', 'country_code' => 'LT'],\n            ['name' => 'Tottington', 'country_code' => 'GB'],\n            ['name' => 'Izola', 'country_code' => 'SI'],\n            ['name' => 'Floresti', 'country_code' => 'MD'],\n            ['name' => 'Emeryville', 'country_code' => 'US'],\n            ['name' => 'Cimislia', 'country_code' => 'MD'],\n            ['name' => 'Choix', 'country_code' => 'MX'],\n            ['name' => 'Dinnington', 'country_code' => 'GB'],\n            ['name' => 'Tzucacab', 'country_code' => 'MX'],\n            ['name' => 'Anahuac', 'country_code' => 'MX'],\n            ['name' => 'Portico di Caserta', 'country_code' => 'IT'],\n            ['name' => 'Barwell', 'country_code' => 'GB'],\n            ['name' => 'Khunays', 'country_code' => 'TN'],\n            ['name' => 'San Gregorio Atzompa', 'country_code' => 'MX'],\n            ['name' => 'Tekit', 'country_code' => 'MX'],\n            ['name' => 'Mpigi', 'country_code' => 'UG'],\n            ['name' => 'Greenhill', 'country_code' => 'GB'],\n            ['name' => 'Robertsport', 'country_code' => 'LR'],\n            ['name' => 'Dundo', 'country_code' => 'AO'],\n            ['name' => 'Massagno', 'country_code' => 'CH'],\n            ['name' => 'Hasbrouck Heights', 'country_code' => 'US'],\n            ['name' => 'Larbert', 'country_code' => 'GB'],\n            ['name' => 'Bougival', 'country_code' => 'FR'],\n            ['name' => 'Clayton le Moors', 'country_code' => 'GB'],\n            ['name' => 'Dowlais', 'country_code' => 'GB'],\n            ['name' => 'Red Bank', 'country_code' => 'US'],\n            ['name' => 'Ferney-Voltaire', 'country_code' => 'FR'],\n            ['name' => 'Saint Peters', 'country_code' => 'GB'],\n            ['name' => 'Amatlan de los Reyes', 'country_code' => 'MX'],\n            ['name' => 'Rabat', 'country_code' => 'MT'],\n            ['name' => 'Lydney', 'country_code' => 'GB'],\n            ['name' => 'South Miami', 'country_code' => 'US'],\n            ['name' => 'Llantwit Major', 'country_code' => 'GB'],\n            ['name' => 'Widnau', 'country_code' => 'CH'],\n            ['name' => 'Rosario', 'country_code' => 'UY'],\n            ['name' => 'Gedling', 'country_code' => 'GB'],\n            ['name' => 'Da Nang', 'country_code' => 'VN'],\n            ['name' => 'San Jose el Viejo', 'country_code' => 'MX'],\n            ['name' => 'Bures-sur-Yvette', 'country_code' => 'FR'],\n            ['name' => 'Zurrieq', 'country_code' => 'MT'],\n            ['name' => 'Clawson', 'country_code' => 'US'],\n            ['name' => 'Berane', 'country_code' => 'ME'],\n            ['name' => 'Launceston', 'country_code' => 'GB'],\n            ['name' => 'Newman', 'country_code' => 'US'],\n            ['name' => 'Naranja', 'country_code' => 'US'],\n            ['name' => 'Birtley', 'country_code' => 'GB'],\n            ['name' => 'Tiptree', 'country_code' => 'GB'],\n            ['name' => 'Ndele', 'country_code' => 'CF'],\n            ['name' => 'Woodbridge', 'country_code' => 'GB'],\n            ['name' => 'View Park-Windsor Hills', 'country_code' => 'US'],\n            ['name' => 'Fort Liberte', 'country_code' => 'HT'],\n            ['name' => 'Skofja Loka', 'country_code' => 'SI'],\n            ['name' => 'Boxley', 'country_code' => 'GB'],\n            ['name' => 'North Wantagh', 'country_code' => 'US'],\n            ['name' => 'Bol', 'country_code' => 'TD'],\n            ['name' => 'Epalinges', 'country_code' => 'CH'],\n            ['name' => 'Kilchberg', 'country_code' => 'CH'],\n            ['name' => 'Coahuitlan', 'country_code' => 'MX'],\n            ['name' => 'Sidney', 'country_code' => 'CA'],\n            ['name' => 'Bothell East', 'country_code' => 'US'],\n            ['name' => 'Bihorel', 'country_code' => 'FR'],\n            ['name' => 'Elektrenai', 'country_code' => 'LT'],\n            ['name' => 'Le Plessis-Bouchard', 'country_code' => 'FR'],\n            ['name' => 'Higuera de Zaragoza', 'country_code' => 'MX'],\n            ['name' => 'Thornhill', 'country_code' => 'GB'],\n            ['name' => 'Alotau', 'country_code' => 'PG'],\n            ['name' => 'Brandon', 'country_code' => 'GB'],\n            ['name' => 'Rafael Lucio', 'country_code' => 'MX'],\n            ['name' => 'Mountain Ash', 'country_code' => 'GB'],\n            ['name' => 'Shanhur', 'country_code' => 'EG'],\n            ['name' => 'Casapulla', 'country_code' => 'IT'],\n            ['name' => 'Alum Rock', 'country_code' => 'US'],\n            ['name' => 'Beauchamp', 'country_code' => 'FR'],\n            ['name' => 'Delcevo', 'country_code' => 'MK'],\n            ['name' => 'Le Portel', 'country_code' => 'FR'],\n            ['name' => 'Saron', 'country_code' => 'ZA'],\n            ['name' => 'La Junta', 'country_code' => 'MX'],\n            ['name' => 'Westwood Lakes', 'country_code' => 'US'],\n            ['name' => 'Cuauhtemoc', 'country_code' => 'MX'],\n            ['name' => 'Yeadon', 'country_code' => 'US'],\n            ['name' => 'Wallington', 'country_code' => 'US'],\n            ['name' => 'Sanniquellie', 'country_code' => 'LR'],\n            ['name' => 'Cam', 'country_code' => 'GB'],\n            ['name' => 'Vaucresson', 'country_code' => 'FR'],\n            ['name' => 'Waipio', 'country_code' => 'US'],\n            ['name' => 'Qax', 'country_code' => 'AZ'],\n            ['name' => 'Groslay', 'country_code' => 'FR'],\n            ['name' => 'Maili', 'country_code' => 'US'],\n            ['name' => 'Sandiacre', 'country_code' => 'GB'],\n            ['name' => 'River Edge', 'country_code' => 'US'],\n            ['name' => 'Yuscaran', 'country_code' => 'HN'],\n            ['name' => 'Halacho', 'country_code' => 'MX'],\n            ['name' => 'Signal Hill', 'country_code' => 'US'],\n            ['name' => 'Hadibu', 'country_code' => 'YE'],\n            ['name' => 'Weissenthurm', 'country_code' => 'DE'],\n            ['name' => 'Leven', 'country_code' => 'GB'],\n            ['name' => 'Concordia', 'country_code' => 'MX'],\n            ['name' => 'Bonhill', 'country_code' => 'GB'],\n            ['name' => 'Nidau', 'country_code' => 'CH'],\n            ['name' => 'Leavesden Green', 'country_code' => 'GB'],\n            ['name' => 'Kirkwall', 'country_code' => 'GB'],\n            ['name' => 'Sant Agnello', 'country_code' => 'IT'],\n            ['name' => 'Glastonbury', 'country_code' => 'GB'],\n            ['name' => 'Mahadipur', 'country_code' => 'IN'],\n            ['name' => 'Dunbar', 'country_code' => 'GB'],\n            ['name' => 'Narborough', 'country_code' => 'GB'],\n            ['name' => 'Bolton upon Dearne', 'country_code' => 'GB'],\n            ['name' => 'Zacapoaxtla', 'country_code' => 'MX'],\n            ['name' => 'Torre Boldone', 'country_code' => 'IT'],\n            ['name' => 'Ambilly', 'country_code' => 'FR'],\n            ['name' => 'Cullercoats', 'country_code' => 'GB'],\n            ['name' => 'Yarm', 'country_code' => 'GB'],\n            ['name' => 'Evian-les-Bains', 'country_code' => 'FR'],\n            ['name' => 'Vanimo', 'country_code' => 'PG'],\n            ['name' => 'Heer', 'country_code' => 'NL'],\n            ['name' => 'Stopsley', 'country_code' => 'GB'],\n            ['name' => 'Rye', 'country_code' => 'GB'],\n            ['name' => 'Perenchies', 'country_code' => 'FR'],\n            ['name' => 'Reinosa', 'country_code' => 'ES'],\n            ['name' => 'Billy-Montigny', 'country_code' => 'FR'],\n            ['name' => 'Lekeitio', 'country_code' => 'ES'],\n            ['name' => 'Magas', 'country_code' => 'RU'],\n            ['name' => 'Westgate on Sea', 'country_code' => 'GB'],\n            ['name' => 'Piedmont', 'country_code' => 'US'],\n            ['name' => 'Great Burstead', 'country_code' => 'GB'],\n            ['name' => 'Rossmoor', 'country_code' => 'US'],\n            ['name' => 'Guttenberg', 'country_code' => 'US'],\n            ['name' => 'Dobroesti', 'country_code' => 'RO'],\n            ['name' => 'Summit', 'country_code' => 'US'],\n            ['name' => 'Rezina', 'country_code' => 'MD'],\n            ['name' => 'Loikaw', 'country_code' => 'MM'],\n            ['name' => 'Newbold', 'country_code' => 'GB'],\n            ['name' => 'Ablon-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Orange Cove', 'country_code' => 'US'],\n            ['name' => 'San Juan Ixcaquixtla', 'country_code' => 'MX'],\n            ['name' => 'Montmelo', 'country_code' => 'ES'],\n            ['name' => 'Sundon', 'country_code' => 'GB'],\n            ['name' => 'Tataltepec de Valdes', 'country_code' => 'MX'],\n            ['name' => 'Woodchurch', 'country_code' => 'GB'],\n            ['name' => 'Coamo', 'country_code' => 'PR'],\n            ['name' => 'Biltine', 'country_code' => 'TD'],\n            ['name' => 'Tepeojuma', 'country_code' => 'MX'],\n            ['name' => 'Suffern', 'country_code' => 'US'],\n            ['name' => 'Anenii Noi', 'country_code' => 'MD'],\n            ['name' => 'Gournay-sur-Marne', 'country_code' => 'FR'],\n            ['name' => 'Rothwell', 'country_code' => 'GB'],\n            ['name' => 'Karuzi', 'country_code' => 'BI'],\n            ['name' => 'Bedwas', 'country_code' => 'GB'],\n            ['name' => 'Stonehouse', 'country_code' => 'GB'],\n            ['name' => 'Bramley', 'country_code' => 'GB'],\n            ['name' => 'Cocorit', 'country_code' => 'MX'],\n            ['name' => 'Cross Gates', 'country_code' => 'GB'],\n            ['name' => 'Calarasi', 'country_code' => 'MD'],\n            ['name' => 'Meythet', 'country_code' => 'FR'],\n            ['name' => 'Vinica', 'country_code' => 'MK'],\n            ['name' => 'Aucamville', 'country_code' => 'FR'],\n            ['name' => 'Ain Lehjer', 'country_code' => 'MA'],\n            ['name' => 'Pyle', 'country_code' => 'GB'],\n            ['name' => 'Probistip', 'country_code' => 'MK'],\n            ['name' => 'Ahumada', 'country_code' => 'MX'],\n            ['name' => 'La Riviera', 'country_code' => 'US'],\n            ['name' => 'Stainforth', 'country_code' => 'GB'],\n            ['name' => 'Beni Bou Yafroun', 'country_code' => 'MA'],\n            ['name' => 'Bucksburn', 'country_code' => 'GB'],\n            ['name' => 'West Auckland', 'country_code' => 'GB'],\n            ['name' => 'Marlborough', 'country_code' => 'GB'],\n            ['name' => 'Birzebbuga', 'country_code' => 'MT'],\n            ['name' => 'Little Ferry', 'country_code' => 'US'],\n            ['name' => 'Gowerton', 'country_code' => 'GB'],\n            ['name' => 'Daskasan', 'country_code' => 'AZ'],\n            ['name' => 'Shifnal', 'country_code' => 'GB'],\n            ['name' => 'Gracanice', 'country_code' => 'XK'],\n            ['name' => 'Bela Crkva', 'country_code' => 'RS'],\n            ['name' => 'Darby', 'country_code' => 'US'],\n            ['name' => 'Oban', 'country_code' => 'GB'],\n            ['name' => 'Kavaratti', 'country_code' => 'IN'],\n            ['name' => 'Northbrook', 'country_code' => 'US'],\n            ['name' => 'El Higo', 'country_code' => 'MX'],\n            ['name' => 'Johvi', 'country_code' => 'EE'],\n            ['name' => 'Latchford', 'country_code' => 'GB'],\n            ['name' => 'Lansdowne', 'country_code' => 'US'],\n            ['name' => 'Harworth', 'country_code' => 'GB'],\n            ['name' => 'North Lindenhurst', 'country_code' => 'US'],\n            ['name' => 'Guadalupe Yancuictlalpan', 'country_code' => 'MX'],\n            ['name' => 'Al Mahwit', 'country_code' => 'YE'],\n            ['name' => 'Sainte-Adresse', 'country_code' => 'FR'],\n            ['name' => 'Ada', 'country_code' => 'RS'],\n            ['name' => 'Greenville', 'country_code' => 'LR'],\n            ['name' => 'Kantunilkin', 'country_code' => 'MX'],\n            ['name' => 'Molochnoye', 'country_code' => 'RU'],\n            ['name' => 'Monifieth', 'country_code' => 'GB'],\n            ['name' => 'Ayotoxco de Guerrero', 'country_code' => 'MX'],\n            ['name' => 'Kirundo', 'country_code' => 'BI'],\n            ['name' => 'Lincoln Village', 'country_code' => 'US'],\n            ['name' => 'Haapsalu', 'country_code' => 'EE'],\n            ['name' => 'Gorleston-on-Sea', 'country_code' => 'GB'],\n            ['name' => 'Penryn', 'country_code' => 'GB'],\n            ['name' => 'Mellieha', 'country_code' => 'MT'],\n            ['name' => 'Trat', 'country_code' => 'TH'],\n            ['name' => 'Richmond Heights', 'country_code' => 'US'],\n            ['name' => 'Sarnen', 'country_code' => 'CH'],\n            ['name' => 'Rocafort', 'country_code' => 'ES'],\n            ['name' => 'Ondarroa', 'country_code' => 'ES'],\n            ['name' => 'Phangnga', 'country_code' => 'TH'],\n            ['name' => 'Jacinto City', 'country_code' => 'US'],\n            ['name' => 'Boussy-Saint-Antoine', 'country_code' => 'FR'],\n            ['name' => 'Church', 'country_code' => 'GB'],\n            ['name' => 'Anstey', 'country_code' => 'GB'],\n            ['name' => 'Siparia', 'country_code' => 'TT'],\n            ['name' => 'Ordubad', 'country_code' => 'AZ'],\n            ['name' => 'Lascano', 'country_code' => 'UY'],\n            ['name' => 'Wickersley', 'country_code' => 'GB'],\n            ['name' => 'Olaine', 'country_code' => 'LV'],\n            ['name' => 'Oulad Ben Sebbah', 'country_code' => 'MA'],\n            ['name' => 'Cromer', 'country_code' => 'GB'],\n            ['name' => 'East Whittier', 'country_code' => 'US'],\n            ['name' => 'Butha-Buthe', 'country_code' => 'LS'],\n            ['name' => 'Mariglianella', 'country_code' => 'IT'],\n            ['name' => 'Naftalan', 'country_code' => 'AZ'],\n            ['name' => 'Altdorf', 'country_code' => 'CH'],\n            ['name' => 'Wistaston', 'country_code' => 'GB'],\n            ['name' => 'Carbon-Blanc', 'country_code' => 'FR'],\n            ['name' => 'Boulder Hill', 'country_code' => 'US'],\n            ['name' => 'La Verriere', 'country_code' => 'FR'],\n            ['name' => 'Cramond', 'country_code' => 'GB'],\n            ['name' => 'Roatan', 'country_code' => 'HN'],\n            ['name' => 'Lake Stickney', 'country_code' => 'US'],\n            ['name' => 'Great Neck', 'country_code' => 'US'],\n            ['name' => 'Almacera', 'country_code' => 'ES'],\n            ['name' => 'West Haverstraw', 'country_code' => 'US'],\n            ['name' => 'Bound Brook', 'country_code' => 'US'],\n            ['name' => 'Birao', 'country_code' => 'CF'],\n            ['name' => 'Kirkham', 'country_code' => 'GB'],\n            ['name' => 'La Ville-du-Bois', 'country_code' => 'FR'],\n            ['name' => 'Birzai', 'country_code' => 'LT'],\n            ['name' => 'Puebla de Farnals', 'country_code' => 'ES'],\n            ['name' => 'Buctzotz', 'country_code' => 'MX'],\n            ['name' => 'Radlett', 'country_code' => 'GB'],\n            ['name' => 'Citrus', 'country_code' => 'US'],\n            ['name' => 'Nisporeni', 'country_code' => 'MD'],\n            ['name' => 'Kuldiga', 'country_code' => 'LV'],\n            ['name' => 'Fontaines-sur-Saone', 'country_code' => 'FR'],\n            ['name' => 'Vrnjacka Banja', 'country_code' => 'RS'],\n            ['name' => 'Recale', 'country_code' => 'IT'],\n            ['name' => 'Godmanchester', 'country_code' => 'GB'],\n            ['name' => 'Clowne', 'country_code' => 'GB'],\n            ['name' => 'Mojkovac', 'country_code' => 'ME'],\n            ['name' => 'Villemoisson-sur-Orge', 'country_code' => 'FR'],\n            ['name' => 'Hamrun', 'country_code' => 'MT'],\n            ['name' => 'Muyinga', 'country_code' => 'BI'],\n            ['name' => 'Warrenpoint', 'country_code' => 'GB'],\n            ['name' => 'Coppull', 'country_code' => 'GB'],\n            ['name' => 'Crieff', 'country_code' => 'GB'],\n            ['name' => 'San Francisco del Mar', 'country_code' => 'MX'],\n            ['name' => 'Tarin Kot', 'country_code' => 'AF'],\n            ['name' => 'Laghdir', 'country_code' => 'MA'],\n            ['name' => 'Charter Oak', 'country_code' => 'US'],\n            ['name' => 'Bahia Kino', 'country_code' => 'MX'],\n            ['name' => 'Hucknall under Huthwaite', 'country_code' => 'GB'],\n            ['name' => 'Altar', 'country_code' => 'MX'],\n            ['name' => 'Capitola', 'country_code' => 'US'],\n            ['name' => 'Castillos', 'country_code' => 'UY'],\n            ['name' => 'Kanjiza', 'country_code' => 'RS'],\n            ['name' => 'Del Aire', 'country_code' => 'US'],\n            ['name' => 'Tamazulapam Villa del Progreso', 'country_code' => 'MX'],\n            ['name' => 'Rovellasca', 'country_code' => 'IT'],\n            ['name' => 'Country Club', 'country_code' => 'US'],\n            ['name' => 'Frampton Cotterell', 'country_code' => 'GB'],\n            ['name' => 'La Mulatiere', 'country_code' => 'FR'],\n            ['name' => 'Timberlane', 'country_code' => 'US'],\n            ['name' => 'Montlhery', 'country_code' => 'FR'],\n            ['name' => 'Whetstone', 'country_code' => 'GB'],\n            ['name' => 'Thrapston', 'country_code' => 'GB'],\n            ['name' => 'Watervliet', 'country_code' => 'US'],\n            ['name' => 'Inwood', 'country_code' => 'US'],\n            ['name' => 'White City', 'country_code' => 'US'],\n            ['name' => 'Bauska', 'country_code' => 'LV'],\n            ['name' => 'Celestun', 'country_code' => 'MX'],\n            ['name' => 'Huiloapan', 'country_code' => 'MX'],\n            ['name' => 'Marina del Rey', 'country_code' => 'US'],\n            ['name' => 'Hopelchen', 'country_code' => 'MX'],\n            ['name' => 'Stonegate', 'country_code' => 'US'],\n            ['name' => 'Duntocher', 'country_code' => 'GB'],\n            ['name' => 'West Perrine', 'country_code' => 'US'],\n            ['name' => 'Aintree', 'country_code' => 'GB'],\n            ['name' => 'Talange', 'country_code' => 'FR'],\n            ['name' => 'East Rockaway', 'country_code' => 'US'],\n            ['name' => 'New Hyde Park', 'country_code' => 'US'],\n            ['name' => 'Nueva Ocotepeque', 'country_code' => 'HN'],\n            ['name' => 'Brookdale', 'country_code' => 'US'],\n            ['name' => 'Westgate', 'country_code' => 'US'],\n            ['name' => 'Cimitile', 'country_code' => 'IT'],\n            ['name' => 'Huningue', 'country_code' => 'FR'],\n            ['name' => 'Partington', 'country_code' => 'GB'],\n            ['name' => 'Jurbarkas', 'country_code' => 'LT'],\n            ['name' => 'Novoberde', 'country_code' => 'XK'],\n            ['name' => 'Pajaros', 'country_code' => 'PR'],\n            ['name' => 'Makamba', 'country_code' => 'BI'],\n            ['name' => 'West Athens', 'country_code' => 'US'],\n            ['name' => 'Saldus', 'country_code' => 'LV'],\n            ['name' => 'Oudorp', 'country_code' => 'NL'],\n            ['name' => 'Highbridge', 'country_code' => 'GB'],\n            ['name' => 'Pembroke', 'country_code' => 'GB'],\n            ['name' => 'Senglea', 'country_code' => 'MT'],\n            ['name' => 'Tshabong', 'country_code' => 'BW'],\n            ['name' => 'Thames Ditton', 'country_code' => 'GB'],\n            ['name' => 'Brechin', 'country_code' => 'GB'],\n            ['name' => 'Djambala', 'country_code' => 'CG'],\n            ['name' => 'Oberengstringen', 'country_code' => 'CH'],\n            ['name' => 'Pieta', 'country_code' => 'MT'],\n            ['name' => 'Postojna', 'country_code' => 'SI'],\n            ['name' => 'Aiea', 'country_code' => 'US'],\n            ['name' => 'Keansburg', 'country_code' => 'US'],\n            ['name' => 'Llantwit Fardre', 'country_code' => 'GB'],\n            ['name' => 'Maywood', 'country_code' => 'US'],\n            ['name' => 'Barrowford', 'country_code' => 'GB'],\n            ['name' => 'Pedra Badejo', 'country_code' => 'CV'],\n            ['name' => 'Littleborough', 'country_code' => 'GB'],\n            ['name' => 'Sherburn in Elmet', 'country_code' => 'GB'],\n            ['name' => 'Kundiawa', 'country_code' => 'PG'],\n            ['name' => 'Dinas Powys', 'country_code' => 'GB'],\n            ['name' => 'Ikeja', 'country_code' => 'NG'],\n            ['name' => 'Barlassina', 'country_code' => 'IT'],\n            ['name' => 'Withernsea', 'country_code' => 'GB'],\n            ['name' => 'Wadsley', 'country_code' => 'GB'],\n            ['name' => 'Wardle', 'country_code' => 'GB'],\n            ['name' => 'Dancu', 'country_code' => 'RO'],\n            ['name' => 'Teaoraereke', 'country_code' => 'KI'],\n            ['name' => 'Bois-des-Filion', 'country_code' => 'CA'],\n            ['name' => 'Vilkaviskis', 'country_code' => 'LT'],\n            ['name' => 'Sathonay-Camp', 'country_code' => 'FR'],\n            ['name' => 'Ojo Caliente', 'country_code' => 'MX'],\n            ['name' => 'Govan', 'country_code' => 'GB'],\n            ['name' => 'Rozaje', 'country_code' => 'ME'],\n            ['name' => 'Roda del Ter', 'country_code' => 'ES'],\n            ['name' => 'Carnate', 'country_code' => 'IT'],\n            ['name' => 'Hani i Elezit', 'country_code' => 'XK'],\n            ['name' => 'Bladensburg', 'country_code' => 'US'],\n            ['name' => 'Thyolo', 'country_code' => 'MW'],\n            ['name' => 'Vrhnika', 'country_code' => 'SI'],\n            ['name' => 'Temascal', 'country_code' => 'MX'],\n            ['name' => 'Kirriemuir', 'country_code' => 'GB'],\n            ['name' => 'Porth', 'country_code' => 'GB'],\n            ['name' => 'Tettenhall', 'country_code' => 'GB'],\n            ['name' => 'Le Port-Marly', 'country_code' => 'FR'],\n            ['name' => 'Harlescott', 'country_code' => 'GB'],\n            ['name' => 'Riscani', 'country_code' => 'MD'],\n            ['name' => 'Long Ditton', 'country_code' => 'GB'],\n            ['name' => 'Sawston', 'country_code' => 'GB'],\n            ['name' => 'Twyford', 'country_code' => 'GB'],\n            ['name' => 'Wood-Ridge', 'country_code' => 'US'],\n            ['name' => 'Isola delle Femmine', 'country_code' => 'IT'],\n            ['name' => 'Ashbourne', 'country_code' => 'GB'],\n            ['name' => 'Las Tablas', 'country_code' => 'PA'],\n            ['name' => 'Brentwood', 'country_code' => 'US'],\n            ['name' => 'Cockenzie', 'country_code' => 'GB'],\n            ['name' => 'Kasane', 'country_code' => 'BW'],\n            ['name' => 'Katakwi', 'country_code' => 'UG'],\n            ['name' => 'Locharbriggs', 'country_code' => 'GB'],\n            ['name' => 'Neulussheim', 'country_code' => 'DE'],\n            ['name' => 'Alcester', 'country_code' => 'GB'],\n            ['name' => 'Kasakh', 'country_code' => 'AM'],\n            ['name' => 'Evinayong', 'country_code' => 'GQ'],\n            ['name' => 'Zabalj', 'country_code' => 'RS'],\n            ['name' => 'Woodlyn', 'country_code' => 'US'],\n            ['name' => 'South Amboy', 'country_code' => 'US'],\n            ['name' => 'Sabana Grande', 'country_code' => 'PR'],\n            ['name' => 'Dursley', 'country_code' => 'GB'],\n            ['name' => 'Stepps', 'country_code' => 'GB'],\n            ['name' => 'Lunca Cetatuii', 'country_code' => 'RO'],\n            ['name' => 'Lerwick', 'country_code' => 'GB'],\n            ['name' => 'Gorle', 'country_code' => 'IT'],\n            ['name' => 'Sauce', 'country_code' => 'UY'],\n            ['name' => 'Grosuplje', 'country_code' => 'SI'],\n            ['name' => 'Stans', 'country_code' => 'CH'],\n            ['name' => 'Saltburn-by-the-Sea', 'country_code' => 'GB'],\n            ['name' => 'Billinge', 'country_code' => 'GB'],\n            ['name' => 'San Pedro Amuzgos', 'country_code' => 'MX'],\n            ['name' => 'Dangriga', 'country_code' => 'BZ'],\n            ['name' => 'Bennebroek', 'country_code' => 'NL'],\n            ['name' => 'Beuvrages', 'country_code' => 'FR'],\n            ['name' => 'Guingamp', 'country_code' => 'FR'],\n            ['name' => 'Broughton', 'country_code' => 'GB'],\n            ['name' => 'Ewo', 'country_code' => 'CG'],\n            ['name' => 'Filey', 'country_code' => 'GB'],\n            ['name' => 'Manatuto', 'country_code' => 'TL'],\n            ['name' => 'Odzaci', 'country_code' => 'RS'],\n            ['name' => 'Leisure World', 'country_code' => 'US'],\n            ['name' => 'Cove', 'country_code' => 'GB'],\n            ['name' => 'North Kensington', 'country_code' => 'US'],\n            ['name' => 'Leonia', 'country_code' => 'US'],\n            ['name' => 'Gizo', 'country_code' => 'SB'],\n            ['name' => 'Stansted Mountfitchet', 'country_code' => 'GB'],\n            ['name' => 'Farmingdale', 'country_code' => 'US'],\n            ['name' => 'Grenay', 'country_code' => 'FR'],\n            ['name' => 'Plainedge', 'country_code' => 'US'],\n            ['name' => 'Stony Brook University', 'country_code' => 'US'],\n            ['name' => 'Bottmingen', 'country_code' => 'CH'],\n            ['name' => 'Lexden', 'country_code' => 'GB'],\n            ['name' => 'Sremski Karlovci', 'country_code' => 'RS'],\n            ['name' => 'Folsom', 'country_code' => 'US'],\n            ['name' => 'Temozon', 'country_code' => 'MX'],\n            ['name' => 'Gleno', 'country_code' => 'TL'],\n            ['name' => 'Sauchie', 'country_code' => 'GB'],\n            ['name' => 'Budleigh Salterton', 'country_code' => 'GB'],\n            ['name' => 'Long Ashton', 'country_code' => 'GB'],\n            ['name' => 'Mokhotlong', 'country_code' => 'LS'],\n            ['name' => 'Talsi', 'country_code' => 'LV'],\n            ['name' => 'Cheddar', 'country_code' => 'GB'],\n            ['name' => 'Pontardawe', 'country_code' => 'GB'],\n            ['name' => 'Dayr al Jarnus', 'country_code' => 'EG'],\n            ['name' => 'Corozal', 'country_code' => 'BZ'],\n            ['name' => 'Dore', 'country_code' => 'GB'],\n            ['name' => 'North Petherton', 'country_code' => 'GB'],\n            ['name' => 'Egham', 'country_code' => 'GB'],\n            ['name' => 'Collingdale', 'country_code' => 'US'],\n            ['name' => 'Siggiewi', 'country_code' => 'MT'],\n            ['name' => 'Pontardulais', 'country_code' => 'GB'],\n            ['name' => 'Joniskis', 'country_code' => 'LT'],\n            ['name' => 'Eichwalde', 'country_code' => 'DE'],\n            ['name' => 'Frimley', 'country_code' => 'GB'],\n            ['name' => 'Leona Vicario', 'country_code' => 'MX'],\n            ['name' => 'West Miami', 'country_code' => 'US'],\n            ['name' => 'New Square', 'country_code' => 'US'],\n            ['name' => 'Dobele', 'country_code' => 'LV'],\n            ['name' => 'Basco', 'country_code' => 'PH'],\n            ['name' => 'Sidi Bou Said', 'country_code' => 'TN'],\n            ['name' => 'Glodeni', 'country_code' => 'MD'],\n            ['name' => 'Karnaukhivka', 'country_code' => 'UA'],\n            ['name' => 'Seven Corners', 'country_code' => 'US'],\n            ['name' => 'Kocevje', 'country_code' => 'SI'],\n            ['name' => 'Becal', 'country_code' => 'MX'],\n            ['name' => 'Great Wakering', 'country_code' => 'GB'],\n            ['name' => 'Greenbriar', 'country_code' => 'US'],\n            ['name' => 'Paide', 'country_code' => 'EE'],\n            ['name' => 'Coral Hills', 'country_code' => 'US'],\n            ['name' => 'Santo Domingo Este', 'country_code' => 'DO'],\n            ['name' => 'Griffithstown', 'country_code' => 'GB'],\n            ['name' => 'Aleg', 'country_code' => 'MR'],\n            ['name' => 'Lerik', 'country_code' => 'AZ'],\n            ['name' => 'Littlemore', 'country_code' => 'GB'],\n            ['name' => 'Swissvale', 'country_code' => 'US'],\n            ['name' => 'Audubon', 'country_code' => 'US'],\n            ['name' => 'Heage', 'country_code' => 'GB'],\n            ['name' => 'Joeuf', 'country_code' => 'FR'],\n            ['name' => 'Handforth', 'country_code' => 'GB'],\n            ['name' => 'Galleywood', 'country_code' => 'GB'],\n            ['name' => 'Albiate', 'country_code' => 'IT'],\n            ['name' => 'Harleston', 'country_code' => 'GB'],\n            ['name' => 'Rolle', 'country_code' => 'CH'],\n            ['name' => 'Xochitlan Todos Santos', 'country_code' => 'MX'],\n            ['name' => 'San Antonino Castillo Velasco', 'country_code' => 'MX'],\n            ['name' => 'Basarabeasca', 'country_code' => 'MD'],\n            ['name' => 'Zardab', 'country_code' => 'AZ'],\n            ['name' => 'Tadcaster', 'country_code' => 'GB'],\n            ['name' => 'Anyksciai', 'country_code' => 'LT'],\n            ['name' => 'Great Meols', 'country_code' => 'GB'],\n            ['name' => 'Varena', 'country_code' => 'LT'],\n            ['name' => 'Malverne', 'country_code' => 'US'],\n            ['name' => 'Prienai', 'country_code' => 'LT'],\n            ['name' => 'Krsko', 'country_code' => 'SI'],\n            ['name' => 'Amble', 'country_code' => 'GB'],\n            ['name' => 'Wotton-under-Edge', 'country_code' => 'GB'],\n            ['name' => 'Alme', 'country_code' => 'IT'],\n            ['name' => 'August', 'country_code' => 'US'],\n            ['name' => 'IJsselmonde', 'country_code' => 'NL'],\n            ['name' => 'Paulton', 'country_code' => 'GB'],\n            ['name' => 'Stotfold', 'country_code' => 'GB'],\n            ['name' => 'Palavas-les-Flots', 'country_code' => 'FR'],\n            ['name' => 'Balloch', 'country_code' => 'GB'],\n            ['name' => 'Esbly', 'country_code' => 'FR'],\n            ['name' => 'Brokopondo', 'country_code' => 'SR'],\n            ['name' => 'Midway City', 'country_code' => 'US'],\n            ['name' => 'Hoylake', 'country_code' => 'GB'],\n            ['name' => 'Bogota', 'country_code' => 'US'],\n            ['name' => 'Garden City Park', 'country_code' => 'US'],\n            ['name' => 'Grandview Heights', 'country_code' => 'US'],\n            ['name' => 'Harwood Heights', 'country_code' => 'US'],\n            ['name' => 'Puerto San Carlos', 'country_code' => 'MX'],\n            ['name' => 'Soro', 'country_code' => 'DK'],\n            ['name' => 'Haledon', 'country_code' => 'US'],\n            ['name' => 'Dormont', 'country_code' => 'US'],\n            ['name' => 'Arlesey', 'country_code' => 'GB'],\n            ['name' => 'Alondra Park', 'country_code' => 'US'],\n            ['name' => 'Wincanton', 'country_code' => 'GB'],\n            ['name' => 'Tayoltita', 'country_code' => 'MX'],\n            ['name' => 'Tetbury', 'country_code' => 'GB'],\n            ['name' => 'Balakan', 'country_code' => 'AZ'],\n            ['name' => 'Four Corners', 'country_code' => 'US'],\n            ['name' => 'Slovenska Bistrica', 'country_code' => 'SI'],\n            ['name' => 'Teabo', 'country_code' => 'MX'],\n            ['name' => 'Ormesby', 'country_code' => 'GB'],\n            ['name' => 'Hengoed', 'country_code' => 'GB'],\n            ['name' => 'Pont-de-Cheruy', 'country_code' => 'FR'],\n            ['name' => 'Cheviot', 'country_code' => 'US'],\n            ['name' => 'Brynmawr', 'country_code' => 'GB'],\n            ['name' => 'Greymouth', 'country_code' => 'NZ'],\n            ['name' => 'Broadview Park', 'country_code' => 'US'],\n            ['name' => 'Magor', 'country_code' => 'GB'],\n            ['name' => 'Beocin', 'country_code' => 'RS'],\n            ['name' => 'South San Gabriel', 'country_code' => 'US'],\n            ['name' => 'Qobustan', 'country_code' => 'AZ'],\n            ['name' => 'Soroti', 'country_code' => 'UG'],\n            ['name' => 'Piste', 'country_code' => 'MX'],\n            ['name' => 'Preverenges', 'country_code' => 'CH'],\n            ['name' => 'Mount Rainier', 'country_code' => 'US'],\n            ['name' => 'Maplewood', 'country_code' => 'US'],\n            ['name' => 'Algodones', 'country_code' => 'MX'],\n            ['name' => 'Port Maria', 'country_code' => 'JM'],\n            ['name' => 'Guadalupe y Calvo', 'country_code' => 'MX'],\n            ['name' => 'Nangan', 'country_code' => 'TW'],\n            ['name' => 'Malmesbury', 'country_code' => 'GB'],\n            ['name' => 'North Bay Village', 'country_code' => 'US'],\n            ['name' => 'Conshohocken', 'country_code' => 'US'],\n            ['name' => 'Newent', 'country_code' => 'GB'],\n            ['name' => 'Bellevue', 'country_code' => 'US'],\n            ['name' => 'Cospicua', 'country_code' => 'MT'],\n            ['name' => 'Calderitas', 'country_code' => 'MX'],\n            ['name' => 'Gerlafingen', 'country_code' => 'CH'],\n            ['name' => 'Panindicuaro', 'country_code' => 'MX'],\n            ['name' => 'Mtskheta', 'country_code' => 'GE'],\n            ['name' => 'Sokobanja', 'country_code' => 'RS'],\n            ['name' => 'Polmont', 'country_code' => 'GB'],\n            ['name' => 'Paloma Creek South', 'country_code' => 'US'],\n            ['name' => 'Eygelshoven', 'country_code' => 'NL'],\n            ['name' => 'Panaba', 'country_code' => 'MX'],\n            ['name' => 'Elderslie', 'country_code' => 'GB'],\n            ['name' => 'Caldwell', 'country_code' => 'US'],\n            ['name' => 'Litija', 'country_code' => 'SI'],\n            ['name' => 'Temple Hills', 'country_code' => 'US'],\n            ['name' => 'San Juan Bautista', 'country_code' => 'PY'],\n            ['name' => 'Falmouth', 'country_code' => 'JM'],\n            ['name' => 'Riverside', 'country_code' => 'US'],\n            ['name' => 'Mahmud-e Raqi', 'country_code' => 'AF'],\n            ['name' => 'Drogenbos', 'country_code' => 'BE'],\n            ['name' => 'Koboko', 'country_code' => 'UG'],\n            ['name' => 'Glenside', 'country_code' => 'US'],\n            ['name' => 'Bentiu', 'country_code' => 'SS'],\n            ['name' => 'Cajar', 'country_code' => 'ES'],\n            ['name' => 'Wilson', 'country_code' => 'US'],\n            ['name' => 'Palo Alto', 'country_code' => 'MX'],\n            ['name' => 'Rio Bravo', 'country_code' => 'US'],\n            ['name' => 'Soledad Etla', 'country_code' => 'MX'],\n            ['name' => 'Luba', 'country_code' => 'GQ'],\n            ['name' => 'Sheriff Hill', 'country_code' => 'GB'],\n            ['name' => 'Guadalupe', 'country_code' => 'US'],\n            ['name' => 'Pinchbeck', 'country_code' => 'GB'],\n            ['name' => 'Chickerell', 'country_code' => 'GB'],\n            ['name' => 'Boyes Hot Springs', 'country_code' => 'US'],\n            ['name' => 'Champagne-au-Mont-d Or', 'country_code' => 'FR'],\n            ['name' => 'Aracinovo', 'country_code' => 'MK'],\n            ['name' => 'Yardimli', 'country_code' => 'AZ'],\n            ['name' => 'Greifensee', 'country_code' => 'CH'],\n            ['name' => 'Fanwood', 'country_code' => 'US'],\n            ['name' => 'Hoogkerk', 'country_code' => 'NL'],\n            ['name' => 'Holtville', 'country_code' => 'US'],\n            ['name' => 'Yeghegnadzor', 'country_code' => 'AM'],\n            ['name' => 'Radstock', 'country_code' => 'GB'],\n            ['name' => 'East Franklin', 'country_code' => 'US'],\n            ['name' => 'Baldwin Harbor', 'country_code' => 'US'],\n            ['name' => 'Arafat', 'country_code' => 'MR'],\n            ['name' => 'Angostura', 'country_code' => 'MX'],\n            ['name' => 'Brezice', 'country_code' => 'SI'],\n            ['name' => 'Juncos', 'country_code' => 'PR'],\n            ['name' => 'Calumet Park', 'country_code' => 'US'],\n            ['name' => 'Luquillo', 'country_code' => 'PR'],\n            ['name' => 'Glen Ridge', 'country_code' => 'US'],\n            ['name' => 'Waterbeach', 'country_code' => 'GB'],\n            ['name' => 'Sen Monorom', 'country_code' => 'KH'],\n            ['name' => 'Brotton', 'country_code' => 'GB'],\n            ['name' => 'Nombre de Dios', 'country_code' => 'MX'],\n            ['name' => 'Balzan', 'country_code' => 'MT'],\n            ['name' => 'Kelme', 'country_code' => 'LT'],\n            ['name' => 'Gurabo', 'country_code' => 'PR'],\n            ['name' => 'Leova', 'country_code' => 'MD'],\n            ['name' => 'Hatboro', 'country_code' => 'US'],\n            ['name' => 'Ludza', 'country_code' => 'LV'],\n            ['name' => 'Tala', 'country_code' => 'UY'],\n            ['name' => 'Esperanza', 'country_code' => 'MX'],\n            ['name' => 'Ravne na Koroskem', 'country_code' => 'SI'],\n            ['name' => 'Goranboy', 'country_code' => 'AZ'],\n            ['name' => 'Waikele', 'country_code' => 'US'],\n            ['name' => 'Hillcrest', 'country_code' => 'US'],\n            ['name' => 'Park City', 'country_code' => 'US'],\n            ['name' => 'Oguz', 'country_code' => 'AZ'],\n            ['name' => 'Ta  Xbiex', 'country_code' => 'MT'],\n            ['name' => 'Brayton', 'country_code' => 'GB'],\n            ['name' => 'Briceni', 'country_code' => 'MD'],\n            ['name' => 'Mongomo', 'country_code' => 'GQ'],\n            ['name' => 'Ruyigi', 'country_code' => 'BI'],\n            ['name' => 'Montpelier', 'country_code' => 'US'],\n            ['name' => 'Monaghan', 'country_code' => 'IE'],\n            ['name' => 'Ikskile', 'country_code' => 'LV'],\n            ['name' => 'Sky Lake', 'country_code' => 'US'],\n            ['name' => 'Frontera Corozal', 'country_code' => 'MX'],\n            ['name' => 'Cwmbach', 'country_code' => 'GB'],\n            ['name' => 'Sabana Seca', 'country_code' => 'PR'],\n            ['name' => 'Kraslava', 'country_code' => 'LV'],\n            ['name' => 'Slovenj Gradec', 'country_code' => 'SI'],\n            ['name' => 'Mobaye', 'country_code' => 'CF'],\n            ['name' => 'X-Can', 'country_code' => 'MX'],\n            ['name' => 'Williston Park', 'country_code' => 'US'],\n            ['name' => 'Marsa', 'country_code' => 'MT'],\n            ['name' => 'Telenesti', 'country_code' => 'MD'],\n            ['name' => 'Hola', 'country_code' => 'KE'],\n            ['name' => 'Adazi', 'country_code' => 'LV'],\n            ['name' => 'Naujoji Akmene', 'country_code' => 'LT'],\n            ['name' => 'Chicxulub Puerto', 'country_code' => 'MX'],\n            ['name' => 'Dunellen', 'country_code' => 'US'],\n            ['name' => 'Stompwijk', 'country_code' => 'NL'],\n            ['name' => 'Lapovo', 'country_code' => 'RS'],\n            ['name' => 'Glenolden', 'country_code' => 'US'],\n            ['name' => 'Nyack', 'country_code' => 'US'],\n            ['name' => 'Hampstead', 'country_code' => 'CA'],\n            ['name' => 'Aizkraukle', 'country_code' => 'LV'],\n            ['name' => 'Donduseni', 'country_code' => 'MD'],\n            ['name' => 'San Lorenzo', 'country_code' => 'PR'],\n            ['name' => 'Nakasongola', 'country_code' => 'UG'],\n            ['name' => 'Ajdovscina', 'country_code' => 'SI'],\n            ['name' => 'Souderton', 'country_code' => 'US'],\n            ['name' => 'Yabucoa', 'country_code' => 'PR'],\n            ['name' => 'Ridley Park', 'country_code' => 'US'],\n            ['name' => 'Livani', 'country_code' => 'LV'],\n            ['name' => 'San Isidro', 'country_code' => 'PR'],\n            ['name' => 'Great Neck Plaza', 'country_code' => 'US'],\n            ['name' => 'Berovo', 'country_code' => 'MK'],\n            ['name' => 'Trindade', 'country_code' => 'ST'],\n            ['name' => 'Orland Hills', 'country_code' => 'US'],\n            ['name' => 'Gulbene', 'country_code' => 'LV'],\n            ['name' => 'Kratovo', 'country_code' => 'MK'],\n            ['name' => 'Stratford', 'country_code' => 'NZ'],\n            ['name' => 'Limbazi', 'country_code' => 'LV'],\n            ['name' => 'Luqa', 'country_code' => 'MT'],\n            ['name' => 'Mahibadhoo', 'country_code' => 'MV'],\n            ['name' => 'Twin Rivers', 'country_code' => 'US'],\n            ['name' => 'Las Piedras', 'country_code' => 'PR'],\n            ['name' => 'Backi Petrovac', 'country_code' => 'RS'],\n            ['name' => 'Madona', 'country_code' => 'LV'],\n            ['name' => 'Hewlett', 'country_code' => 'US'],\n            ['name' => 'Criuleni', 'country_code' => 'MD'],\n            ['name' => 'Eydhafushi', 'country_code' => 'MV'],\n            ['name' => 'South Valley Stream', 'country_code' => 'US'],\n            ['name' => 'Diekirch', 'country_code' => 'LU'],\n            ['name' => 'Sopiste', 'country_code' => 'MK'],\n            ['name' => 'Salcininkai', 'country_code' => 'LT'],\n            ['name' => 'Clifton Heights', 'country_code' => 'US'],\n            ['name' => 'Lauderdale-by-the-Sea', 'country_code' => 'US'],\n            ['name' => 'Notre Dame', 'country_code' => 'US'],\n            ['name' => 'Opuwo', 'country_code' => 'NA'],\n            ['name' => 'Cedarhurst', 'country_code' => 'US'],\n            ['name' => 'Folcroft', 'country_code' => 'US'],\n            ['name' => 'Guadalupe', 'country_code' => 'US'],\n            ['name' => 'Manorhaven', 'country_code' => 'US'],\n            ['name' => 'Puerto Real', 'country_code' => 'PR'],\n            ['name' => 'Ewa Villages', 'country_code' => 'US'],\n            ['name' => 'South Monrovia Island', 'country_code' => 'US'],\n            ['name' => 'Contra Costa Centre', 'country_code' => 'US'],\n            ['name' => 'Bogovinje', 'country_code' => 'MK'],\n            ['name' => 'Tuckahoe', 'country_code' => 'US'],\n            ['name' => 'Aluksne', 'country_code' => 'LV'],\n            ['name' => 'Mae Hong Son', 'country_code' => 'TH'],\n            ['name' => 'Puerto Baquerizo Moreno', 'country_code' => 'EC'],\n            ['name' => 'Castroville', 'country_code' => 'US'],\n            ['name' => 'West View', 'country_code' => 'US'],\n            ['name' => 'Naples Manor', 'country_code' => 'US'],\n            ['name' => 'Bogatic', 'country_code' => 'RS'],\n            ['name' => 'Prospect Park', 'country_code' => 'US'],\n            ['name' => 'Ambler', 'country_code' => 'US'],\n            ['name' => 'Forest Glen', 'country_code' => 'US'],\n            ['name' => 'Bronxville', 'country_code' => 'US'],\n            ['name' => 'Kingston Estates', 'country_code' => 'US'],\n            ['name' => 'Pasvalys', 'country_code' => 'LT'],\n            ['name' => 'Sal Rei', 'country_code' => 'CV'],\n            ['name' => 'Jogeva', 'country_code' => 'EE'],\n            ['name' => 'Cabrayil', 'country_code' => 'AZ'],\n            ['name' => 'Ghanzi', 'country_code' => 'BW'],\n            ['name' => 'Polva', 'country_code' => 'EE'],\n            ['name' => 'Vittoriosa', 'country_code' => 'MT'],\n            ['name' => 'Ciudad Guzman', 'country_code' => 'MX'],\n            ['name' => 'Cameron Park', 'country_code' => 'US'],\n            ['name' => 'Saranap', 'country_code' => 'US'],\n            ['name' => 'Schaan', 'country_code' => 'LI'],\n            ['name' => 'Espargos', 'country_code' => 'CV'],\n            ['name' => 'Kennett Square', 'country_code' => 'US'],\n            ['name' => 'Junik', 'country_code' => 'XK'],\n            ['name' => 'Preili', 'country_code' => 'LV'],\n            ['name' => 'Siteki', 'country_code' => 'SZ'],\n            ['name' => 'Viqueque', 'country_code' => 'TL'],\n            ['name' => 'Lucea', 'country_code' => 'JM'],\n            ['name' => 'Rapla', 'country_code' => 'EE'],\n            ['name' => 'West Loch Estate', 'country_code' => 'US'],\n            ['name' => 'Lakeview', 'country_code' => 'US'],\n            ['name' => 'Binghamton University', 'country_code' => 'US'],\n            ['name' => 'Glarus', 'country_code' => 'CH'],\n            ['name' => 'Rutana', 'country_code' => 'BI'],\n            ['name' => 'Fruitridge Pocket', 'country_code' => 'US'],\n            ['name' => 'Bac', 'country_code' => 'RS'],\n            ['name' => 'Larchmont', 'country_code' => 'US'],\n            ['name' => 'Bogdanci', 'country_code' => 'MK'],\n            ['name' => 'Arroyo', 'country_code' => 'PR'],\n            ['name' => 'Pleasure Point', 'country_code' => 'US'],\n            ['name' => 'Zarasai', 'country_code' => 'LT'],\n            ['name' => 'Sezana', 'country_code' => 'SI'],\n            ['name' => 'Zagorje', 'country_code' => 'SI'],\n            ['name' => 'District Heights', 'country_code' => 'US'],\n            ['name' => 'Naval Academy', 'country_code' => 'US'],\n            ['name' => 'Muramvya', 'country_code' => 'BI'],\n            ['name' => 'Lielvarde', 'country_code' => 'LV'],\n            ['name' => 'Studenicani', 'country_code' => 'MK'],\n            ['name' => 'Savannah', 'country_code' => 'US'],\n            ['name' => 'Ghaxaq', 'country_code' => 'MT'],\n            ['name' => 'Penn Wynne', 'country_code' => 'US'],\n            ['name' => 'Echternach', 'country_code' => 'LU'],\n            ['name' => 'Kupiskis', 'country_code' => 'LT'],\n            ['name' => 'Crnomelj', 'country_code' => 'SI'],\n            ['name' => 'Appenzell', 'country_code' => 'CH'],\n            ['name' => 'Idrija', 'country_code' => 'SI'],\n            ['name' => 'Norwood', 'country_code' => 'US'],\n            ['name' => 'Jamesburg', 'country_code' => 'US'],\n            ['name' => 'Ranillug', 'country_code' => 'XK'],\n            ['name' => 'Mayflower Village', 'country_code' => 'US'],\n            ['name' => 'Elsmere', 'country_code' => 'US'],\n            ['name' => 'Lija', 'country_code' => 'MT'],\n            ['name' => 'Prevalje', 'country_code' => 'SI'],\n            ['name' => 'McKees Rocks', 'country_code' => 'US'],\n            ['name' => 'Balvi', 'country_code' => 'LV'],\n            ['name' => 'Charlemagne', 'country_code' => 'CA'],\n            ['name' => 'Prospect Park', 'country_code' => 'US'],\n            ['name' => 'Outapi', 'country_code' => 'NA'],\n            ['name' => 'Cidra', 'country_code' => 'PR'],\n            ['name' => 'Lorengau', 'country_code' => 'PG'],\n            ['name' => 'Hrastnik', 'country_code' => 'SI'],\n            ['name' => 'Plymouth', 'country_code' => 'US'],\n            ['name' => 'Bay Harbor Islands', 'country_code' => 'US'],\n            ['name' => 'Tevragh Zeina', 'country_code' => 'MR'],\n            ['name' => 'White City', 'country_code' => 'US'],\n            ['name' => 'Iecava', 'country_code' => 'LV'],\n            ['name' => 'Mamushe', 'country_code' => 'XK'],\n            ['name' => 'Fulin', 'country_code' => 'CN'],\n            ['name' => 'Mount Carmel', 'country_code' => 'US'],\n            ['name' => 'Bellevue', 'country_code' => 'US'],\n            ['name' => 'South Tucson', 'country_code' => 'US'],\n            ['name' => 'Lewisburg', 'country_code' => 'US'],\n            ['name' => 'Gospic', 'country_code' => 'HR'],\n            ['name' => 'Sisimiut', 'country_code' => 'GL'],\n            ['name' => 'Cacheu', 'country_code' => 'GW'],\n            ['name' => 'Sharon Hill', 'country_code' => 'US'],\n            ['name' => 'Media', 'country_code' => 'US'],\n            ['name' => 'New Brighton', 'country_code' => 'US'],\n            ['name' => 'Kerema', 'country_code' => 'PG'],\n            ['name' => 'Surfside', 'country_code' => 'US'],\n            ['name' => 'Rochelle Park', 'country_code' => 'US'],\n            ['name' => 'Partesh', 'country_code' => 'XK'],\n            ['name' => 'Salavan', 'country_code' => 'LA'],\n            ['name' => 'Deer Park', 'country_code' => 'US'],\n            ['name' => 'Kazlu Ruda', 'country_code' => 'LT'],\n            ['name' => 'Qubadli', 'country_code' => 'AZ'],\n            ['name' => 'Krusevo', 'country_code' => 'MK'],\n            ['name' => 'Belmar', 'country_code' => 'US'],\n            ['name' => 'Caazapa', 'country_code' => 'PY'],\n            ['name' => 'Shaw Heights', 'country_code' => 'US'],\n            ['name' => 'Palm Springs North', 'country_code' => 'US'],\n            ['name' => 'Moletai', 'country_code' => 'LT'],\n            ['name' => 'Thaba-Tseka', 'country_code' => 'LS'],\n            ['name' => 'Waipio Acres', 'country_code' => 'US'],\n            ['name' => 'Qal ah-ye Now', 'country_code' => 'AF'],\n            ['name' => 'South Highpoint', 'country_code' => 'US'],\n            ['name' => 'Xaghra', 'country_code' => 'MT'],\n            ['name' => 'Friendship Heights Village', 'country_code' => 'US'],\n            ['name' => 'Kaser', 'country_code' => 'US'],\n            ['name' => 'Anasco', 'country_code' => 'PR'],\n            ['name' => 'L Epiphanie', 'country_code' => 'CA'],\n            ['name' => 'Kalangala', 'country_code' => 'UG'],\n            ['name' => 'Edgewater', 'country_code' => 'US'],\n            ['name' => 'Pale', 'country_code' => 'GQ'],\n            ['name' => 'Kensington', 'country_code' => 'US'],\n            ['name' => 'Shillington', 'country_code' => 'US'],\n            ['name' => 'Ros Comain', 'country_code' => 'IE'],\n            ['name' => 'Albina', 'country_code' => 'SR'],\n            ['name' => 'Wangdue Phodrang', 'country_code' => 'BT'],\n            ['name' => 'Santa Isabel', 'country_code' => 'PR'],\n            ['name' => 'Pembroke', 'country_code' => 'MT'],\n            ['name' => 'Albertson', 'country_code' => 'US'],\n            ['name' => 'Highwood', 'country_code' => 'US'],\n            ['name' => 'Kekava', 'country_code' => 'LV'],\n            ['name' => 'Cutler', 'country_code' => 'US'],\n            ['name' => 'Naguabo', 'country_code' => 'PR'],\n            ['name' => 'Slovenske Konjice', 'country_code' => 'SI'],\n            ['name' => 'Twin Lakes', 'country_code' => 'US'],\n            ['name' => 'Kanifing', 'country_code' => 'GM'],\n            ['name' => 'Broadmoor', 'country_code' => 'US'],\n            ['name' => 'Liquica', 'country_code' => 'TL'],\n            ['name' => 'Smiltene', 'country_code' => 'LV'],\n            ['name' => 'Bret Harte', 'country_code' => 'US'],\n            ['name' => 'Penuelas', 'country_code' => 'PR'],\n            ['name' => 'Glendale', 'country_code' => 'US'],\n            ['name' => 'Turtle Creek', 'country_code' => 'US'],\n            ['name' => 'Nadur', 'country_code' => 'MT'],\n            ['name' => 'Carle Place', 'country_code' => 'US'],\n            ['name' => 'Gadabay', 'country_code' => 'AZ'],\n            ['name' => 'Kenneth City', 'country_code' => 'US'],\n            ['name' => 'Tara Hills', 'country_code' => 'US'],\n            ['name' => 'Skuodas', 'country_code' => 'LT'],\n            ['name' => 'South Pasadena', 'country_code' => 'US'],\n            ['name' => 'Ilulissat', 'country_code' => 'GL'],\n            ['name' => 'Montreal-Ouest', 'country_code' => 'CA'],\n            ['name' => 'Vrapciste', 'country_code' => 'MK'],\n            ['name' => 'Salinas', 'country_code' => 'PR'],\n            ['name' => 'Zalec', 'country_code' => 'SI'],\n            ['name' => 'Mechanicville', 'country_code' => 'US'],\n            ['name' => 'Punta Gorda', 'country_code' => 'BZ'],\n            ['name' => 'Punakha', 'country_code' => 'BT'],\n            ['name' => 'Sakiai', 'country_code' => 'LT'],\n            ['name' => 'Samtse', 'country_code' => 'BT'],\n            ['name' => 'Aibak', 'country_code' => 'AF'],\n            ['name' => 'Bled', 'country_code' => 'SI'],\n            ['name' => 'Mauren', 'country_code' => 'LI'],\n            ['name' => 'Iklin', 'country_code' => 'MT'],\n            ['name' => 'Sentjur', 'country_code' => 'SI'],\n            ['name' => 'Floriana', 'country_code' => 'MT'],\n            ['name' => 'Kiambu', 'country_code' => 'KE'],\n            ['name' => 'Nieuw Amsterdam', 'country_code' => 'SR'],\n            ['name' => 'Carnikava', 'country_code' => 'LV'],\n            ['name' => 'Bolama', 'country_code' => 'GW'],\n            ['name' => 'Eschen', 'country_code' => 'LI'],\n            ['name' => 'Irig', 'country_code' => 'RS'],\n            ['name' => 'Puerto Lempira', 'country_code' => 'HN'],\n            ['name' => 'Klaksvik', 'country_code' => 'FO'],\n            ['name' => 'Kuala Belait', 'country_code' => 'BN'],\n            ['name' => 'Bururi', 'country_code' => 'BI'],\n            ['name' => 'Ta Khmau', 'country_code' => 'KH'],\n            ['name' => 'Coka', 'country_code' => 'RS'],\n            ['name' => 'Kalkara', 'country_code' => 'MT'],\n            ['name' => 'Hung Yen', 'country_code' => 'VN'],\n            ['name' => 'Silale', 'country_code' => 'LT'],\n            ['name' => 'Pakruojis', 'country_code' => 'LT'],\n            ['name' => 'Bradford', 'country_code' => 'GB'],\n            ['name' => 'Imqabba', 'country_code' => 'MT'],\n            ['name' => 'Bueng Kan', 'country_code' => 'TH'],\n            ['name' => 'Sevnica', 'country_code' => 'SI'],\n            ['name' => 'San Gwann', 'country_code' => 'MT'],\n            ['name' => 'Valka', 'country_code' => 'LV'],\n            ['name' => 'Remich', 'country_code' => 'LU'],\n            ['name' => 'Rumphi', 'country_code' => 'MW'],\n            ['name' => 'Dravograd', 'country_code' => 'SI'],\n            ['name' => 'Valandovo', 'country_code' => 'MK'],\n            ['name' => 'Susa', 'country_code' => 'AZ'],\n            ['name' => 'Trakai', 'country_code' => 'LT'],\n            ['name' => 'Radlje ob Dravi', 'country_code' => 'SI'],\n            ['name' => 'Sempeter pri Gorici', 'country_code' => 'SI'],\n            ['name' => 'Black River', 'country_code' => 'JM'],\n            ['name' => 'Tecax', 'country_code' => 'MX'],\n            ['name' => 'Ilirska Bistrica', 'country_code' => 'SI'],\n            ['name' => 'Ozolnieki', 'country_code' => 'LV'],\n            ['name' => 'Gudja', 'country_code' => 'MT'],\n            ['name' => 'Cerknica', 'country_code' => 'SI'],\n            ['name' => 'Marsaxlokk', 'country_code' => 'MT'],\n            ['name' => 'Lasko', 'country_code' => 'SI'],\n            ['name' => 'Ruse', 'country_code' => 'SI'],\n            ['name' => 'Zelino', 'country_code' => 'MK'],\n            ['name' => 'Dingli', 'country_code' => 'MT'],\n            ['name' => 'Calheta de Sao Miguel', 'country_code' => 'CV'],\n            ['name' => 'Bensonville', 'country_code' => 'LR'],\n            ['name' => 'Kirkop', 'country_code' => 'MT'],\n            ['name' => 'Grevenmacher', 'country_code' => 'LU'],\n            ['name' => 'Tearce', 'country_code' => 'MK'],\n            ['name' => 'Gharghur', 'country_code' => 'MT'],\n            ['name' => 'Ziri', 'country_code' => 'SI'],\n            ['name' => 'Gornja Radgona', 'country_code' => 'SI'],\n            ['name' => 'San Giljan', 'country_code' => 'MT'],\n            ['name' => 'Svencionys', 'country_code' => 'LT'],\n            ['name' => 'Aizpute', 'country_code' => 'LV'],\n            ['name' => 'Wabag', 'country_code' => 'PG'],\n            ['name' => 'Xewkija', 'country_code' => 'MT'],\n            ['name' => 'Trebnje', 'country_code' => 'SI'],\n            ['name' => 'Agdam', 'country_code' => 'AZ'],\n            ['name' => 'Kardla', 'country_code' => 'EE'],\n            ['name' => 'Bugiri', 'country_code' => 'UG'],\n            ['name' => 'Kaberamaido', 'country_code' => 'UG'],\n            ['name' => 'Piran', 'country_code' => 'SI'],\n            ['name' => 'Kalvarija', 'country_code' => 'LT'],\n            ['name' => 'Makedonski Brod', 'country_code' => 'MK'],\n            ['name' => 'Janjanbureh', 'country_code' => 'GM'],\n            ['name' => 'Cankuzo', 'country_code' => 'BI'],\n            ['name' => 'Pinki', 'country_code' => 'LV'],\n            ['name' => 'Moroto', 'country_code' => 'UG'],\n            ['name' => 'Gambela', 'country_code' => 'ET'],\n            ['name' => 'Baldone', 'country_code' => 'LV'],\n            ['name' => 'Massenya', 'country_code' => 'TD'],\n            ['name' => 'Imgarr', 'country_code' => 'MT'],\n            ['name' => 'Lazdijai', 'country_code' => 'LT'],\n            ['name' => 'Ankaran', 'country_code' => 'SI'],\n            ['name' => 'Grobina', 'country_code' => 'LV'],\n            ['name' => 'Thinadhoo', 'country_code' => 'MV'],\n            ['name' => 'Imtarfa', 'country_code' => 'MT'],\n            ['name' => 'Funadhoo', 'country_code' => 'MV'],\n            ['name' => 'Cantemir', 'country_code' => 'MD'],\n            ['name' => 'Xghajra', 'country_code' => 'MT'],\n            ['name' => 'Alibunar', 'country_code' => 'RS'],\n            ['name' => 'Demir Kapija', 'country_code' => 'MK'],\n            ['name' => 'Kandava', 'country_code' => 'LV'],\n            ['name' => 'Aasiaat', 'country_code' => 'GL'],\n            ['name' => 'Qrendi', 'country_code' => 'MT'],\n            ['name' => 'Lenart v Slovenskih Goricah', 'country_code' => 'SI'],\n            ['name' => 'Ulbroka', 'country_code' => 'LV'],\n            ['name' => 'Mezica', 'country_code' => 'SI'],\n            ['name' => 'Groningen', 'country_code' => 'SR'],\n            ['name' => 'Pehcevo', 'country_code' => 'MK'],\n            ['name' => 'Metlika', 'country_code' => 'SI'],\n            ['name' => 'Qaqortoq', 'country_code' => 'GL'],\n            ['name' => 'Saulkrasti', 'country_code' => 'LV'],\n            ['name' => 'Louang Namtha', 'country_code' => 'LA'],\n            ['name' => 'Ghajnsielem', 'country_code' => 'MT'],\n            ['name' => 'Kaabong', 'country_code' => 'UG'],\n            ['name' => 'Kulhudhuffushi', 'country_code' => 'MV'],\n            ['name' => 'Rietavas', 'country_code' => 'LT'],\n            ['name' => 'Mullingar', 'country_code' => 'IE'],\n            ['name' => 'Porto Ingles', 'country_code' => 'CV'],\n            ['name' => 'Cambridge', 'country_code' => 'GB'],\n            ['name' => 'Borovnica', 'country_code' => 'SI'],\n            ['name' => 'Safi', 'country_code' => 'MT'],\n            ['name' => 'Lethem', 'country_code' => 'GY'],\n            ['name' => 'Dhihdhoo', 'country_code' => 'MV'],\n            ['name' => 'Balaka', 'country_code' => 'MW'],\n            ['name' => 'Mabaruma', 'country_code' => 'GY'],\n            ['name' => 'Mandalgovi', 'country_code' => 'MN'],\n            ['name' => 'Lendava', 'country_code' => 'SI'],\n            ['name' => 'Vojnik', 'country_code' => 'SI'],\n            ['name' => 'Brvenica', 'country_code' => 'MK'],\n            ['name' => 'Kudahuvadhoo', 'country_code' => 'MV'],\n            ['name' => 'Plavinas', 'country_code' => 'LV'],\n            ['name' => 'Kapchorwa', 'country_code' => 'UG'],\n            ['name' => 'Sao Domingos', 'country_code' => 'CV'],\n            ['name' => 'Arima', 'country_code' => 'TT'],\n            ['name' => 'Novo Selo', 'country_code' => 'MK'],\n            ['name' => 'Rasdhoo', 'country_code' => 'MV'],\n            ['name' => 'Kerewan', 'country_code' => 'GM'],\n            ['name' => 'Broceni', 'country_code' => 'LV'],\n            ['name' => 'Petrovec', 'country_code' => 'MK'],\n            ['name' => 'Kolonia', 'country_code' => 'FM'],\n            ['name' => 'Vilani', 'country_code' => 'LV'],\n            ['name' => 'Vevcani', 'country_code' => 'MK'],\n            ['name' => 'Al Wakrah', 'country_code' => 'QA'],\n            ['name' => 'Tallaght', 'country_code' => 'IE'],\n            ['name' => 'Lipkovo', 'country_code' => 'MK'],\n            ['name' => 'Barclayville', 'country_code' => 'LR'],\n            ['name' => 'Rujiena', 'country_code' => 'LV'],\n            ['name' => 'Triesenberg', 'country_code' => 'LI'],\n            ['name' => 'Sannat', 'country_code' => 'MT'],\n            ['name' => 'Qala', 'country_code' => 'MT'],\n            ['name' => 'Kllokot', 'country_code' => 'XK'],\n            ['name' => 'Cestos City', 'country_code' => 'LR'],\n            ['name' => 'Tofol', 'country_code' => 'FM'],\n            ['name' => 'Bundibugyo', 'country_code' => 'UG'],\n            ['name' => 'Demir Hisar', 'country_code' => 'MK'],\n            ['name' => 'Ruggell', 'country_code' => 'LI'],\n            ['name' => 'Salacgriva', 'country_code' => 'LV'],\n            ['name' => 'Plasnica', 'country_code' => 'MK'],\n            ['name' => 'Koknese', 'country_code' => 'LV'],\n            ['name' => 'Rosoman', 'country_code' => 'MK'],\n            ['name' => 'Garoowe', 'country_code' => 'SO'],\n            ['name' => 'Mogila', 'country_code' => 'MK'],\n            ['name' => 'Fuerte Olimpo', 'country_code' => 'PY'],\n            ['name' => 'Beltinci', 'country_code' => 'SI'],\n            ['name' => 'Skriveri', 'country_code' => 'LV'],\n            ['name' => 'Krivogastani', 'country_code' => 'MK'],\n            ['name' => 'Banlung', 'country_code' => 'KH'],\n            ['name' => 'Phu Ly', 'country_code' => 'VN'],\n            ['name' => 'Nida', 'country_code' => 'LT'],\n            ['name' => 'Wicklow', 'country_code' => 'IE'],\n            ['name' => 'Zrnovci', 'country_code' => 'MK'],\n            ['name' => 'Birstonas', 'country_code' => 'LT'],\n            ['name' => 'Naklo', 'country_code' => 'SI'],\n            ['name' => 'Kercem', 'country_code' => 'MT'],\n            ['name' => 'Lacin', 'country_code' => 'AZ'],\n            ['name' => 'Thulusdhoo', 'country_code' => 'MV'],\n            ['name' => 'Clonmel', 'country_code' => 'IE'],\n            ['name' => 'Wexford', 'country_code' => 'IE'],\n            ['name' => 'Auce', 'country_code' => 'LV'],\n            ['name' => 'Vasilevo', 'country_code' => 'MK'],\n            ['name' => 'Gradsko', 'country_code' => 'MK'],\n            ['name' => 'Marka', 'country_code' => 'SO'],\n            ['name' => 'Priekuli', 'country_code' => 'LV'],\n            ['name' => 'Viligili', 'country_code' => 'MV'],\n            ['name' => 'Cidade Velha', 'country_code' => 'CV'],\n            ['name' => 'Ilukste', 'country_code' => 'LV'],\n            ['name' => 'Roja', 'country_code' => 'LV'],\n            ['name' => 'Chiradzulu', 'country_code' => 'MW'],\n            ['name' => 'Victoria', 'country_code' => 'MT'],\n            ['name' => 'Bariadi', 'country_code' => 'TZ'],\n            ['name' => 'Kegums', 'country_code' => 'LV'],\n            ['name' => 'Onverwacht', 'country_code' => 'SR'],\n            ['name' => 'Same', 'country_code' => 'TL'],\n            ['name' => 'Hoima', 'country_code' => 'UG'],\n            ['name' => 'Geita', 'country_code' => 'TZ'],\n            ['name' => 'Garkalne', 'country_code' => 'LV'],\n            ['name' => 'Vipava', 'country_code' => 'SI'],\n            ['name' => 'Vecumnieki', 'country_code' => 'LV'],\n            ['name' => 'Incukalns', 'country_code' => 'LV'],\n            ['name' => 'Ambrolauri', 'country_code' => 'GE'],\n            ['name' => 'Radece', 'country_code' => 'SI'],\n            ['name' => 'Kabarnet', 'country_code' => 'KE'],\n            ['name' => 'Jagodina', 'country_code' => 'RS'],\n            ['name' => 'Mukono', 'country_code' => 'UG'],\n            ['name' => 'Ormoz', 'country_code' => 'SI'],\n            ['name' => 'Vuzenica', 'country_code' => 'SI'],\n            ['name' => 'Munxar', 'country_code' => 'MT'],\n            ['name' => 'Migori', 'country_code' => 'KE'],\n            ['name' => 'Zabljak', 'country_code' => 'ME'],\n            ['name' => 'Gamprin', 'country_code' => 'LI'],\n            ['name' => 'Karsava', 'country_code' => 'LV'],\n            ['name' => 'Kerugoya', 'country_code' => 'KE'],\n            ['name' => 'Yumbe', 'country_code' => 'UG'],\n            ['name' => 'Fontana', 'country_code' => 'MT'],\n            ['name' => 'Skrunda', 'country_code' => 'LV'],\n            ['name' => 'Dagda', 'country_code' => 'LV'],\n            ['name' => 'Paola', 'country_code' => 'MT'],\n            ['name' => 'Sihanoukville', 'country_code' => 'KH'],\n            ['name' => 'Buchanan', 'country_code' => 'LR'],\n            ['name' => 'Gharb', 'country_code' => 'MT'],\n            ['name' => 'Odranci', 'country_code' => 'SI'],\n            ['name' => 'Priekule', 'country_code' => 'LV'],\n            ['name' => 'La Palma', 'country_code' => 'PA'],\n            ['name' => 'Hithadhoo', 'country_code' => 'MV'],\n            ['name' => 'Bosilovo', 'country_code' => 'MK'],\n            ['name' => 'Malpils', 'country_code' => 'LV'],\n            ['name' => 'Vinh Yen', 'country_code' => 'VN'],\n            ['name' => 'Dar Naim', 'country_code' => 'MR'],\n            ['name' => 'Jaunjelgava', 'country_code' => 'LV'],\n            ['name' => 'Iten', 'country_code' => 'KE'],\n            ['name' => 'Veymandoo', 'country_code' => 'MV'],\n            ['name' => 'Sentjernej', 'country_code' => 'SI'],\n            ['name' => 'Phalombe', 'country_code' => 'MW'],\n            ['name' => 'Varaklani', 'country_code' => 'LV'],\n            ['name' => 'Nyamira', 'country_code' => 'KE'],\n            ['name' => 'Ergli', 'country_code' => 'LV'],\n            ['name' => 'Machinga', 'country_code' => 'MW'],\n            ['name' => 'Totness', 'country_code' => 'SR'],\n            ['name' => 'Longford', 'country_code' => 'IE'],\n            ['name' => 'Ropazi', 'country_code' => 'LV'],\n            ['name' => 'Auki', 'country_code' => 'SB'],\n            ['name' => 'Trim', 'country_code' => 'IE'],\n            ['name' => 'Felidhoo', 'country_code' => 'MV'],\n            ['name' => 'Aioun', 'country_code' => 'MR'],\n            ['name' => 'Xuddur', 'country_code' => 'SO'],\n            ['name' => 'Kasaali', 'country_code' => 'UG'],\n            ['name' => 'Sabac', 'country_code' => 'RS'],\n            ['name' => 'Bovec', 'country_code' => 'SI'],\n            ['name' => 'Nilandhoo', 'country_code' => 'MV'],\n            ['name' => 'Kirakira', 'country_code' => 'SB'],\n            ['name' => 'Vainode', 'country_code' => 'LV'],\n            ['name' => 'Carrick on Shannon', 'country_code' => 'IE'],\n            ['name' => 'Viesite', 'country_code' => 'LV'],\n            ['name' => 'Staro Nagoricane', 'country_code' => 'MK'],\n            ['name' => 'Lubana', 'country_code' => 'LV'],\n            ['name' => 'Foammulah', 'country_code' => 'MV'],\n            ['name' => 'Bu aale', 'country_code' => 'SO'],\n            ['name' => 'Tullamore', 'country_code' => 'IE'],\n            ['name' => 'Fomboni', 'country_code' => 'KM'],\n            ['name' => 'Rankovce', 'country_code' => 'MK'],\n            ['name' => 'Kurunegala', 'country_code' => 'LK'],\n            ['name' => 'Xocali', 'country_code' => 'AZ'],\n            ['name' => 'Oshakati', 'country_code' => 'NA'],\n            ['name' => 'Murang a', 'country_code' => 'KE'],\n            ['name' => 'Novaci', 'country_code' => 'MK'],\n            ['name' => 'Dundaga', 'country_code' => 'LV'],\n            ['name' => 'Schellenberg', 'country_code' => 'LI'],\n            ['name' => 'Bududa', 'country_code' => 'UG'],\n            ['name' => 'Zebbug', 'country_code' => 'MT'],\n            ['name' => 'Santo Antonio', 'country_code' => 'ST'],\n            ['name' => 'Konce', 'country_code' => 'MK'],\n            ['name' => 'Mersrags', 'country_code' => 'LV'],\n            ['name' => 'Sotik Post', 'country_code' => 'KE'],\n            ['name' => 'Oblesevo', 'country_code' => 'MK'],\n            ['name' => 'Jegunovce', 'country_code' => 'MK'],\n            ['name' => 'Vreed-en-Hoop', 'country_code' => 'GY'],\n            ['name' => 'Zilupe', 'country_code' => 'LV'],\n            ['name' => 'Escaldes-Engordany', 'country_code' => 'AD'],\n            ['name' => 'Gornji Milanovac', 'country_code' => 'RS'],\n            ['name' => 'Tam Ky', 'country_code' => 'VN'],\n            ['name' => 'Cesvaine', 'country_code' => 'LV'],\n            ['name' => 'Radovljica', 'country_code' => 'SI'],\n            ['name' => 'Rauna', 'country_code' => 'LV'],\n            ['name' => 'Vilaka', 'country_code' => 'LV'],\n            ['name' => 'Weno', 'country_code' => 'FM'],\n            ['name' => 'Taro', 'country_code' => 'SB'],\n            ['name' => 'Oranjestad', 'country_code' => 'NL'],\n            ['name' => 'Belcista', 'country_code' => 'MK'],\n            ['name' => 'Naxxar', 'country_code' => 'MT'],\n            ['name' => 'Trbovlje', 'country_code' => 'SI'],\n            ['name' => 'Ragana', 'country_code' => 'LV'],\n            ['name' => 'Muli', 'country_code' => 'MV'],\n            ['name' => 'Ar Rayyan', 'country_code' => 'QA'],\n            ['name' => 'Wakiso', 'country_code' => 'UG'],\n            ['name' => 'Mazsalaca', 'country_code' => 'LV'],\n            ['name' => 'Ivancna Gorica', 'country_code' => 'SI'],\n            ['name' => 'Rogaska Slatina', 'country_code' => 'SI'],\n            ['name' => 'Lyantonde', 'country_code' => 'UG'],\n            ['name' => 'Aloja', 'country_code' => 'LV'],\n            ['name' => 'Ain Temouchent', 'country_code' => 'DZ'],\n            ['name' => 'Serravalle', 'country_code' => 'SM'],\n            ['name' => 'Kobarid', 'country_code' => 'SI'],\n            ['name' => ' Amran', 'country_code' => 'YE'],\n            ['name' => 'Halba', 'country_code' => 'LB'],\n            ['name' => 'Andrijevica', 'country_code' => 'ME'],\n            ['name' => 'Nenagh', 'country_code' => 'IE'],\n            ['name' => 'Ligatne', 'country_code' => 'LV'],\n            ['name' => 'Akniste', 'country_code' => 'LV'],\n            ['name' => 'Nereta', 'country_code' => 'LV'],\n            ['name' => 'Chikwawa', 'country_code' => 'MW'],\n            ['name' => 'Strenci', 'country_code' => 'LV'],\n            ['name' => 'Kasungu', 'country_code' => 'MW'],\n            ['name' => 'Labuan', 'country_code' => 'MY'],\n            ['name' => 'Lata', 'country_code' => 'SB'],\n            ['name' => 'Nica', 'country_code' => 'LV'],\n            ['name' => 'Pozega', 'country_code' => 'RS'],\n            ['name' => 'Lozovo', 'country_code' => 'MK'],\n            ['name' => 'Koceni', 'country_code' => 'LV'],\n            ['name' => 'Picos', 'country_code' => 'CV'],\n            ['name' => 'San Lawrenz', 'country_code' => 'MT'],\n            ['name' => 'An Cabhan', 'country_code' => 'IE'],\n            ['name' => 'Dolneni', 'country_code' => 'MK'],\n            ['name' => 'Fonadhoo', 'country_code' => 'MV'],\n            ['name' => 'Zirovnica', 'country_code' => 'SI'],\n            ['name' => 'Manadhoo', 'country_code' => 'MV'],\n            ['name' => 'Ponta do Sol', 'country_code' => 'CV'],\n            ['name' => 'Krupanj', 'country_code' => 'RS'],\n            ['name' => 'Lebane', 'country_code' => 'RS'],\n            ['name' => 'Store', 'country_code' => 'SI'],\n            ['name' => 'Jaunpiebalga', 'country_code' => 'LV'],\n            ['name' => 'Siaya', 'country_code' => 'KE'],\n            ['name' => 'Rostusa', 'country_code' => 'MK'],\n            ['name' => 'Cerklje na Gorenjskem', 'country_code' => 'SI'],\n            ['name' => 'Isale', 'country_code' => 'BI'],\n            ['name' => 'Sostanj', 'country_code' => 'SI'],\n            ['name' => 'Dien Bien Phu', 'country_code' => 'VN'],\n            ['name' => 'P yongsong', 'country_code' => 'KP'],\n            ['name' => 'Pavilosta', 'country_code' => 'LV'],\n            ['name' => 'Centar Zupa', 'country_code' => 'MK'],\n            ['name' => 'Aglona', 'country_code' => 'LV'],\n            ['name' => 'Scarborough', 'country_code' => 'TT'],\n            ['name' => 'Diego Martin', 'country_code' => 'TT'],\n            ['name' => 'Vladicin Han', 'country_code' => 'RS'],\n            ['name' => 'Ape', 'country_code' => 'LV'],\n            ['name' => 'Jaunpils', 'country_code' => 'LV'],\n            ['name' => 'Knjazevac', 'country_code' => 'RS'],\n            ['name' => 'Ljubovija', 'country_code' => 'RS'],\n            ['name' => 'Smederevska Palanka', 'country_code' => 'RS'],\n            ['name' => 'Zelenikovo', 'country_code' => 'MK'],\n            ['name' => 'Cucer-Sandevo', 'country_code' => 'MK'],\n            ['name' => 'Imdina', 'country_code' => 'MT'],\n            ['name' => 'Mahonda', 'country_code' => 'TZ'],\n            ['name' => 'Eenhana', 'country_code' => 'NA'],\n            ['name' => 'Mali Zvornik', 'country_code' => 'RS'],\n            ['name' => 'Point Fortin', 'country_code' => 'TT'],\n            ['name' => 'Kostanjevica na Krki', 'country_code' => 'SI'],\n            ['name' => 'Port Laoise', 'country_code' => 'IE'],\n            ['name' => 'Surdulica', 'country_code' => 'RS'],\n            ['name' => 'Pozarevac', 'country_code' => 'RS'],\n            ['name' => 'Sirvintos', 'country_code' => 'LT'],\n            ['name' => 'Mayuge', 'country_code' => 'UG'],\n            ['name' => 'Varazdin', 'country_code' => 'HR'],\n            ['name' => 'Zajecar', 'country_code' => 'RS'],\n            ['name' => 'Lakatoro', 'country_code' => 'VU'],\n            ['name' => 'Dowa', 'country_code' => 'MW'],\n            ['name' => 'Hvalba', 'country_code' => 'FO'],\n            ['name' => 'Castlebar', 'country_code' => 'IE'],\n            ['name' => 'Ain Defla', 'country_code' => 'DZ'],\n            ['name' => 'Riebini', 'country_code' => 'LV'],\n            ['name' => 'Madaba', 'country_code' => 'JO'],\n            ['name' => 'Selibaby', 'country_code' => 'MR'],\n            ['name' => 'Asaba', 'country_code' => 'NG'],\n            ['name' => 'Prebold', 'country_code' => 'SI'],\n            ['name' => 'Tulagi', 'country_code' => 'SB'],\n            ['name' => 'Pilsrundale', 'country_code' => 'LV'],\n            ['name' => 'Miklavz na Dravskem Polju', 'country_code' => 'SI'],\n            ['name' => 'Aranguez', 'country_code' => 'TT'],\n            ['name' => 'Alsunga', 'country_code' => 'LV'],\n            ['name' => 'Karbinci', 'country_code' => 'MK'],\n            ['name' => 'Bangar', 'country_code' => 'BN'],\n            ['name' => 'Mozirje', 'country_code' => 'SI'],\n            ['name' => 'Rumonge', 'country_code' => 'BI'],\n            ['name' => 'Paracin', 'country_code' => 'RS'],\n            ['name' => 'Naukseni', 'country_code' => 'LV'],\n            ['name' => 'Bulambuli', 'country_code' => 'UG'],\n            ['name' => 'Borgo Maggiore', 'country_code' => 'SM'],\n            ['name' => 'Maracha', 'country_code' => 'UG'],\n            ['name' => 'Luwero', 'country_code' => 'UG'],\n            ['name' => 'Kapenguria', 'country_code' => 'KE'],\n            ['name' => 'Smarde', 'country_code' => 'LV'],\n            ['name' => 'Polzela', 'country_code' => 'SI'],\n            ['name' => 'The Bottom', 'country_code' => 'NL'],\n            ['name' => 'Yenagoa', 'country_code' => 'NG'],\n            ['name' => 'Namayingo', 'country_code' => 'UG'],\n            ['name' => 'Lucani', 'country_code' => 'RS'],\n            ['name' => 'Suong', 'country_code' => 'KH'],\n            ['name' => 'Ghasri', 'country_code' => 'MT'],\n            ['name' => 'Gllogovc', 'country_code' => 'XK'],\n            ['name' => 'Smederevo', 'country_code' => 'RS'],\n            ['name' => 'Dong Xoai', 'country_code' => 'VN'],\n            ['name' => 'Mila', 'country_code' => 'DZ'],\n            ['name' => 'Al Buraymi', 'country_code' => 'OM'],\n            ['name' => 'Da Lat', 'country_code' => 'VN'],\n            ['name' => 'Luuka Town', 'country_code' => 'UG'],\n            ['name' => 'Kabugao', 'country_code' => 'PH'],\n            ['name' => 'Planken', 'country_code' => 'LI'],\n            ['name' => 'Spodnje Hoce', 'country_code' => 'SI'],\n            ['name' => 'Selnica ob Dravi', 'country_code' => 'SI'],\n            ['name' => 'Aleksinac', 'country_code' => 'RS'],\n            ['name' => 'Despotovac', 'country_code' => 'RS'],\n            ['name' => 'Jincheng', 'country_code' => 'TW'],\n            ['name' => 'Smartno', 'country_code' => 'SI'],\n            ['name' => 'Cibitoke', 'country_code' => 'BI'],\n            ['name' => 'Medvode', 'country_code' => 'SI'],\n            ['name' => 'Kibuku', 'country_code' => 'UG'],\n            ['name' => 'Bupoto', 'country_code' => 'UG'],\n            ['name' => 'Lai Chau', 'country_code' => 'VN'],\n            ['name' => 'Neno', 'country_code' => 'MW'],\n            ['name' => 'Moravce', 'country_code' => 'SI'],\n            ['name' => 'Apac', 'country_code' => 'UG'],\n            ['name' => 'Rucava', 'country_code' => 'LV'],\n            ['name' => 'Kladovo', 'country_code' => 'RS'],\n            ['name' => 'Skopun', 'country_code' => 'FO'],\n            ['name' => 'Kanal', 'country_code' => 'SI'],\n            ['name' => 'Rugaji', 'country_code' => 'LV'],\n            ['name' => 'Sankt Polten', 'country_code' => 'AT'],\n            ['name' => 'Gornji Petrovci', 'country_code' => 'SI'],\n            ['name' => 'Nazarje', 'country_code' => 'SI'],\n            ['name' => 'Menges', 'country_code' => 'SI'],\n            ['name' => 'Zrece', 'country_code' => 'SI'],\n            ['name' => 'Preddvor', 'country_code' => 'SI'],\n            ['name' => 'Rubirizi', 'country_code' => 'UG'],\n            ['name' => 'Vwawa', 'country_code' => 'TZ'],\n            ['name' => 'Pirot', 'country_code' => 'RS'],\n            ['name' => 'Domagnano', 'country_code' => 'SM'],\n            ['name' => 'Vecpiebalga', 'country_code' => 'LV'],\n            ['name' => 'Busesa', 'country_code' => 'UG'],\n            ['name' => 'Poljcane', 'country_code' => 'SI'],\n            ['name' => 'Vlasotince', 'country_code' => 'RS'],\n            ['name' => 'Koani', 'country_code' => 'TZ'],\n            ['name' => 'Dhuusamarreeb', 'country_code' => 'SO'],\n            ['name' => 'Smarje', 'country_code' => 'SI'],\n            ['name' => 'Murmuiza', 'country_code' => 'LV'],\n            ['name' => 'Komenda', 'country_code' => 'SI'],\n            ['name' => 'Baltinava', 'country_code' => 'LV'],\n            ['name' => 'Fada', 'country_code' => 'TD'],\n            ['name' => 'Skofljica', 'country_code' => 'SI'],\n            ['name' => 'Crna Trava', 'country_code' => 'RS'],\n            ['name' => 'Brezovica', 'country_code' => 'SI'],\n            ['name' => 'Buala', 'country_code' => 'SB'],\n            ['name' => 'Buikwe', 'country_code' => 'UG'],\n            ['name' => 'Kagadi', 'country_code' => 'UG'],\n            ['name' => 'Burtnieki', 'country_code' => 'LV'],\n            ['name' => 'Muta', 'country_code' => 'SI'],\n            ['name' => 'Radenci', 'country_code' => 'SI'],\n            ['name' => 'Hvannasund', 'country_code' => 'FO'],\n            ['name' => 'Log', 'country_code' => 'SI'],\n            ['name' => 'Colonia', 'country_code' => 'FM'],\n            ['name' => 'Tisina', 'country_code' => 'SI'],\n            ['name' => 'Spodnji Duplek', 'country_code' => 'SI'],\n            ['name' => 'Bushenyi', 'country_code' => 'UG'],\n            ['name' => 'Liegi', 'country_code' => 'LV'],\n            ['name' => 'Acquaviva', 'country_code' => 'SM'],\n            ['name' => 'Kon Tum', 'country_code' => 'VN'],\n            ['name' => 'Ash Shihaniyah', 'country_code' => 'QA'],\n            ['name' => 'Kaliro', 'country_code' => 'UG'],\n            ['name' => 'Ljutomer', 'country_code' => 'SI'],\n            ['name' => 'Prokuplje', 'country_code' => 'RS'],\n            ['name' => 'Batocina', 'country_code' => 'RS'],\n            ['name' => 'Afega', 'country_code' => 'WS'],\n            ['name' => 'Umm Salal  Ali', 'country_code' => 'QA'],\n            ['name' => 'Aileu', 'country_code' => 'TL'],\n            ['name' => 'Oplotnica', 'country_code' => 'SI'],\n            ['name' => 'Fiorentino', 'country_code' => 'SM'],\n            ['name' => 'Butebo', 'country_code' => 'UG'],\n            ['name' => 'Akjoujt', 'country_code' => 'MR'],\n            ['name' => 'Namutumba', 'country_code' => 'UG'],\n            ['name' => 'Debe', 'country_code' => 'TT'],\n            ['name' => 'Stalbe', 'country_code' => 'LV'],\n            ['name' => 'Star Dojran', 'country_code' => 'MK'],\n            ['name' => 'Miragoane', 'country_code' => 'HT'],\n            ['name' => 'Lukovica', 'country_code' => 'SI'],\n            ['name' => 'Dogbo', 'country_code' => 'BJ'],\n            ['name' => 'Smartno', 'country_code' => 'SI'],\n            ['name' => 'Abakaliki', 'country_code' => 'NG'],\n            ['name' => 'Manafwa', 'country_code' => 'UG'],\n            ['name' => 'Dimitrovgrad', 'country_code' => 'RS'],\n            ['name' => 'Tervete', 'country_code' => 'LV'],\n            ['name' => 'Sencur', 'country_code' => 'SI'],\n            ['name' => 'Ibanda', 'country_code' => 'UG'],\n            ['name' => 'Mirna', 'country_code' => 'SI'],\n            ['name' => 'Race', 'country_code' => 'SI'],\n            ['name' => 'Wote', 'country_code' => 'KE'],\n            ['name' => 'Mwatate', 'country_code' => 'KE'],\n            ['name' => 'Vitanje', 'country_code' => 'SI'],\n            ['name' => 'Doljevac', 'country_code' => 'RS'],\n            ['name' => 'Rukungiri', 'country_code' => 'UG'],\n            ['name' => 'Lifford', 'country_code' => 'IE'],\n            ['name' => 'Isangel', 'country_code' => 'VU'],\n            ['name' => 'Koprivnica', 'country_code' => 'HR'],\n            ['name' => 'Toftir', 'country_code' => 'FO'],\n            ['name' => 'Gombe', 'country_code' => 'UG'],\n            ['name' => 'Montegiardino', 'country_code' => 'SM'],\n            ['name' => 'Kyenjojo', 'country_code' => 'UG'],\n            ['name' => 'Porkeri', 'country_code' => 'FO'],\n            ['name' => ' Ajlun', 'country_code' => 'JO'],\n            ['name' => 'Velika Plana', 'country_code' => 'RS'],\n            ['name' => 'Az Za ayin', 'country_code' => 'QA'],\n            ['name' => 'Al Jabin', 'country_code' => 'YE'],\n            ['name' => 'Mitoma', 'country_code' => 'UG'],\n            ['name' => 'Kalungu', 'country_code' => 'UG'],\n            ['name' => 'Svilajnac', 'country_code' => 'RS'],\n            ['name' => 'Ad Dali ', 'country_code' => 'YE'],\n            ['name' => 'Santa Cruz', 'country_code' => 'PH'],\n            ['name' => 'Santa Lucija', 'country_code' => 'MT'],\n            ['name' => 'Majsperk', 'country_code' => 'SI'],\n            ['name' => 'Bukomansimbi', 'country_code' => 'UG'],\n            ['name' => 'Svrljig', 'country_code' => 'RS'],\n            ['name' => 'Horjul', 'country_code' => 'SI'],\n            ['name' => 'Luce', 'country_code' => 'SI'],\n            ['name' => 'Spodnja Hajdina', 'country_code' => 'SI'],\n            ['name' => 'Nelspruit', 'country_code' => 'ZA'],\n            ['name' => 'Sid', 'country_code' => 'RS'],\n            ['name' => 'Negotin', 'country_code' => 'RS'],\n            ['name' => 'Kajiado', 'country_code' => 'KE'],\n            ['name' => 'Vodice', 'country_code' => 'SI'],\n            ['name' => 'Rubanda', 'country_code' => 'UG'],\n            ['name' => 'Waitangi', 'country_code' => 'NZ'],\n            ['name' => 'Dapaong', 'country_code' => 'TG'],\n            ['name' => 'Pivka', 'country_code' => 'SI'],\n            ['name' => 'Braslovce', 'country_code' => 'SI'],\n            ['name' => 'Butaleja', 'country_code' => 'UG'],\n            ['name' => 'Sakete', 'country_code' => 'BJ'],\n            ['name' => 'Tivat', 'country_code' => 'ME'],\n            ['name' => 'Lovrenc na Pohorju', 'country_code' => 'SI'],\n            ['name' => 'Crna na Koroskem', 'country_code' => 'SI'],\n            ['name' => 'Pesnica', 'country_code' => 'SI'],\n            ['name' => 'Serere', 'country_code' => 'UG'],\n            ['name' => 'Amuria', 'country_code' => 'UG'],\n            ['name' => 'Kenge', 'country_code' => 'CD'],\n            ['name' => 'Nsiika', 'country_code' => 'UG'],\n            ['name' => 'Bojnik', 'country_code' => 'RS'],\n            ['name' => 'Kibiito', 'country_code' => 'UG'],\n            ['name' => 'Kibingo', 'country_code' => 'UG'],\n            ['name' => 'Capellen', 'country_code' => 'LU'],\n            ['name' => 'Bukedea', 'country_code' => 'UG'],\n            ['name' => 'Dobrna', 'country_code' => 'SI'],\n            ['name' => 'Samraong', 'country_code' => 'KH'],\n            ['name' => 'Ntara', 'country_code' => 'UG'],\n            ['name' => 'Wiltz', 'country_code' => 'LU'],\n            ['name' => 'Binyin', 'country_code' => 'UG'],\n            ['name' => 'Sentilj', 'country_code' => 'SI'],\n            ['name' => 'Kaedi', 'country_code' => 'MR'],\n            ['name' => 'Sari', 'country_code' => 'IR'],\n            ['name' => 'Vransko', 'country_code' => 'SI'],\n            ['name' => 'Sentrupert', 'country_code' => 'SI'],\n            ['name' => 'Mparo', 'country_code' => 'UG'],\n            ['name' => 'Bistrica ob Sotli', 'country_code' => 'SI'],\n            ['name' => 'Kinoni', 'country_code' => 'UG'],\n            ['name' => 'Ol Kalou', 'country_code' => 'KE'],\n            ['name' => 'Logatec', 'country_code' => 'SI'],\n            ['name' => 'Kole', 'country_code' => 'UG'],\n            ['name' => 'Trzic', 'country_code' => 'SI'],\n            ['name' => 'Zebbug', 'country_code' => 'MT'],\n            ['name' => 'Bohinjska Bistrica', 'country_code' => 'SI'],\n            ['name' => 'Zombo', 'country_code' => 'UG'],\n            ['name' => 'Narok', 'country_code' => 'KE'],\n            ['name' => 'Rakai', 'country_code' => 'UG'],\n            ['name' => 'Encamp', 'country_code' => 'AD'],\n            ['name' => 'Lwengo', 'country_code' => 'UG'],\n            ['name' => 'Trzin', 'country_code' => 'SI'],\n            ['name' => 'Recica', 'country_code' => 'SI'],\n            ['name' => 'Heydarabad', 'country_code' => 'AZ'],\n            ['name' => 'Gorisnica', 'country_code' => 'SI'],\n            ['name' => 'Bukwo', 'country_code' => 'UG'],\n            ['name' => 'Omuthiya', 'country_code' => 'NA'],\n            ['name' => 'Volcja Draga', 'country_code' => 'SI'],\n            ['name' => 'Kasanda', 'country_code' => 'UG'],\n            ['name' => 'Loja', 'country_code' => 'LV'],\n            ['name' => 'Dokolo', 'country_code' => 'UG'],\n            ['name' => 'Dornava', 'country_code' => 'SI'],\n            ['name' => 'Leulumoega', 'country_code' => 'WS'],\n            ['name' => 'Koronadal', 'country_code' => 'PH'],\n            ['name' => 'Topola', 'country_code' => 'RS'],\n            ['name' => 'Balzers', 'country_code' => 'LI'],\n            ['name' => 'Kamwenge', 'country_code' => 'UG'],\n            ['name' => 'Zelezniki', 'country_code' => 'SI'],\n            ['name' => 'Ngora', 'country_code' => 'UG'],\n            ['name' => 'Kara', 'country_code' => 'TG'],\n            ['name' => 'Dol', 'country_code' => 'SI'],\n            ['name' => 'Ig', 'country_code' => 'SI'],\n            ['name' => 'Techiman', 'country_code' => 'GH'],\n            ['name' => 'Guadalupe', 'country_code' => 'ST'],\n            ['name' => 'Alebtong', 'country_code' => 'UG'],\n            ['name' => 'Brcko', 'country_code' => 'BA'],\n            ['name' => 'Gorenja Vas', 'country_code' => 'SI'],\n            ['name' => 'Pante Macassar', 'country_code' => 'TL'],\n            ['name' => 'Cerkno', 'country_code' => 'SI'],\n            ['name' => 'Suai', 'country_code' => 'TL'],\n            ['name' => 'Lospalos', 'country_code' => 'TL'],\n            ['name' => 'Stari Trg', 'country_code' => 'SI'],\n            ['name' => 'Chiesanuova', 'country_code' => 'SM'],\n            ['name' => 'Sveti Jurij', 'country_code' => 'SI'],\n            ['name' => 'Pombas', 'country_code' => 'CV'],\n            ['name' => 'Videm', 'country_code' => 'SI'],\n            ['name' => 'Kanungu', 'country_code' => 'UG'],\n            ['name' => 'Ljubno', 'country_code' => 'SI'],\n            ['name' => 'Straza', 'country_code' => 'SI'],\n            ['name' => 'Kanoni', 'country_code' => 'UG'],\n            ['name' => 'Kokopo', 'country_code' => 'PG'],\n            ['name' => 'Sejong', 'country_code' => 'KR'],\n            ['name' => 'Ramotswa', 'country_code' => 'BW'],\n            ['name' => 'Mulifanua', 'country_code' => 'WS'],\n            ['name' => 'Smarjeske Toplice', 'country_code' => 'SI'],\n            ['name' => 'Al  Aziziyah', 'country_code' => 'LY'],\n            ['name' => 'Kidricevo', 'country_code' => 'SI'],\n            ['name' => 'Semic', 'country_code' => 'SI'],\n            ['name' => 'Oyam', 'country_code' => 'UG'],\n            ['name' => 'Pozega', 'country_code' => 'HR'],\n            ['name' => 'Ilinden', 'country_code' => 'MK'],\n            ['name' => 'Starse', 'country_code' => 'SI'],\n            ['name' => 'Dobrovo', 'country_code' => 'SI'],\n            ['name' => 'Turnisce', 'country_code' => 'SI'],\n            ['name' => 'Yamaguchi', 'country_code' => 'JP'],\n            ['name' => 'Gia Nghia', 'country_code' => 'VN'],\n            ['name' => 'Blace', 'country_code' => 'RS'],\n            ['name' => 'La Massana', 'country_code' => 'AD'],\n            ['name' => 'Tabor', 'country_code' => 'SI'],\n            ['name' => 'Saltangara', 'country_code' => 'FO'],\n            ['name' => 'Krizevci', 'country_code' => 'SI'],\n            ['name' => 'Tutong', 'country_code' => 'BN'],\n            ['name' => 'Sembabule', 'country_code' => 'UG'],\n            ['name' => 'Vianden', 'country_code' => 'LU'],\n            ['name' => 'Tsirang', 'country_code' => 'BT'],\n            ['name' => 'Kakumiro', 'country_code' => 'UG'],\n            ['name' => 'Pailin', 'country_code' => 'KH'],\n            ['name' => 'Sveta Trojica v Slovenskih Goricah', 'country_code' => 'SI'],\n            ['name' => 'Nkurenkuru', 'country_code' => 'NA'],\n            ['name' => 'Sveta Ana', 'country_code' => 'SI'],\n            ['name' => 'Tolmin', 'country_code' => 'SI'],\n            ['name' => 'Rabak', 'country_code' => 'SD'],\n            ['name' => 'Princes Town', 'country_code' => 'TT'],\n            ['name' => 'Tarrafal', 'country_code' => 'CV'],\n            ['name' => 'Triesen', 'country_code' => 'LI'],\n            ['name' => 'Benedikt', 'country_code' => 'SI'],\n            ['name' => 'Cibla', 'country_code' => 'LV'],\n            ['name' => 'Sant Julia de Loria', 'country_code' => 'AD'],\n            ['name' => 'Faetano', 'country_code' => 'SM'],\n            ['name' => 'Buyende', 'country_code' => 'UG'],\n            ['name' => 'Joao Teves', 'country_code' => 'CV'],\n            ['name' => 'Santana', 'country_code' => 'ST'],\n            ['name' => 'Kalaki', 'country_code' => 'UG'],\n            ['name' => 'Vecvarkava', 'country_code' => 'LV'],\n            ['name' => 'Kwale', 'country_code' => 'KE'],\n            ['name' => 'Isingiro', 'country_code' => 'UG'],\n            ['name' => 'Apatin', 'country_code' => 'RS'],\n            ['name' => 'Kyegegwa', 'country_code' => 'UG'],\n            ['name' => 'Sefwi Wiawso', 'country_code' => 'GH'],\n            ['name' => 'Mersch', 'country_code' => 'LU'],\n            ['name' => 'Ucar', 'country_code' => 'AZ'],\n            ['name' => 'Dolenjske Toplice', 'country_code' => 'SI'],\n            ['name' => 'Hongseong', 'country_code' => 'KR'],\n            ['name' => 'Strendur', 'country_code' => 'FO'],\n            ['name' => 'Tuzi', 'country_code' => 'ME'],\n            ['name' => 'Verzej', 'country_code' => 'SI'],\n            ['name' => 'Zgornja Kungota', 'country_code' => 'SI'],\n            ['name' => 'Muan', 'country_code' => 'KR'],\n            ['name' => 'Crensovci', 'country_code' => 'SI'],\n            ['name' => 'Mirna Pec', 'country_code' => 'SI'],\n            ['name' => 'Saratamata', 'country_code' => 'VU'],\n            ['name' => 'Kanchanaburi', 'country_code' => 'TH'],\n            ['name' => 'Rumuruti', 'country_code' => 'KE'],\n            ['name' => 'Arilje', 'country_code' => 'RS'],\n            ['name' => 'Kovin', 'country_code' => 'RS'],\n            ['name' => 'Butalangu', 'country_code' => 'UG'],\n            ['name' => 'Boljevac', 'country_code' => 'RS'],\n            ['name' => 'San Jose de las Lajas', 'country_code' => 'CU'],\n            ['name' => 'Markovci', 'country_code' => 'SI'],\n            ['name' => 'Zuzemberk', 'country_code' => 'SI'],\n            ['name' => 'Phon-Hong', 'country_code' => 'LA'],\n            ['name' => 'Kosjeric', 'country_code' => 'RS'],\n            ['name' => 'Tvoroyri', 'country_code' => 'FO'],\n            ['name' => 'Dobrova', 'country_code' => 'SI'],\n            ['name' => 'Amolatar', 'country_code' => 'UG'],\n            ['name' => 'Lelydorp', 'country_code' => 'SR'],\n            ['name' => 'Velike Lasce', 'country_code' => 'SI'],\n            ['name' => 'Puconci', 'country_code' => 'SI'],\n            ['name' => 'Morant Bay', 'country_code' => 'JM'],\n            ['name' => 'Skocjan', 'country_code' => 'SI'],\n            ['name' => 'Drabesi', 'country_code' => 'LV'],\n            ['name' => 'Cicevac', 'country_code' => 'RS'],\n            ['name' => 'Mokronog', 'country_code' => 'SI'],\n            ['name' => 'Bakjagol', 'country_code' => 'KR'],\n            ['name' => 'Plandiste', 'country_code' => 'RS'],\n            ['name' => 'Kozina', 'country_code' => 'SI'],\n            ['name' => 'Velika Polana', 'country_code' => 'SI'],\n            ['name' => 'Cankova', 'country_code' => 'SI'],\n            ['name' => 'Sredisce ob Dravi', 'country_code' => 'SI'],\n            ['name' => 'Lamwo', 'country_code' => 'UG'],\n            ['name' => 'Bangolo', 'country_code' => 'CI'],\n            ['name' => 'Rogasovci', 'country_code' => 'SI'],\n            ['name' => 'Qazax', 'country_code' => 'AZ'],\n            ['name' => 'Varvarin', 'country_code' => 'RS'],\n            ['name' => 'Razanj', 'country_code' => 'RS'],\n            ['name' => 'San Jose', 'country_code' => 'PH'],\n            ['name' => 'Ilam', 'country_code' => 'IR'],\n            ['name' => 'Mongar', 'country_code' => 'BT'],\n            ['name' => 'Godawari', 'country_code' => 'NP'],\n            ['name' => 'Mionica', 'country_code' => 'RS'],\n            ['name' => 'Kurumul', 'country_code' => 'PG'],\n            ['name' => 'Arandelovac', 'country_code' => 'RS'],\n            ['name' => 'Kula', 'country_code' => 'RS'],\n            ['name' => 'Nova Vas', 'country_code' => 'SI'],\n            ['name' => 'Apace', 'country_code' => 'SI'],\n            ['name' => 'Cerkvenjak', 'country_code' => 'SI'],\n            ['name' => 'Haa', 'country_code' => 'BT'],\n            ['name' => 'Krapina', 'country_code' => 'HR'],\n            ['name' => 'Palenga', 'country_code' => 'UG'],\n            ['name' => 'Singa', 'country_code' => 'SD'],\n            ['name' => 'Novi Becej', 'country_code' => 'RS'],\n            ['name' => 'Becej', 'country_code' => 'RS'],\n            ['name' => 'Kuzma', 'country_code' => 'SI'],\n            ['name' => 'Sarur', 'country_code' => 'AZ'],\n            ['name' => 'Jursinci', 'country_code' => 'SI'],\n            ['name' => 'Port Loko', 'country_code' => 'SL'],\n            ['name' => 'Gornji Grad', 'country_code' => 'SI'],\n            ['name' => 'Zitorada', 'country_code' => 'RS'],\n            ['name' => 'Videm pri Ptuju', 'country_code' => 'SI'],\n            ['name' => 'Kotido', 'country_code' => 'UG'],\n            ['name' => 'Titel', 'country_code' => 'RS'],\n            ['name' => 'Pul-e  Alam', 'country_code' => 'AF'],\n            ['name' => 'Cirkulane', 'country_code' => 'SI'],\n            ['name' => 'Ribnica', 'country_code' => 'SI'],\n            ['name' => 'Miren', 'country_code' => 'SI'],\n            ['name' => 'Sharan', 'country_code' => 'AF'],\n            ['name' => 'Boorama', 'country_code' => 'SO'],\n            ['name' => 'Tari', 'country_code' => 'PG'],\n            ['name' => 'Zavrc', 'country_code' => 'SI'],\n            ['name' => 'Cocieri', 'country_code' => 'MD'],\n            ['name' => 'Pader', 'country_code' => 'UG'],\n            ['name' => 'Merosina', 'country_code' => 'RS'],\n            ['name' => 'Fuglafjordhur', 'country_code' => 'FO'],\n            ['name' => 'Famjin', 'country_code' => 'FO'],\n            ['name' => 'Lufilufi', 'country_code' => 'WS'],\n            ['name' => 'Podlehnik', 'country_code' => 'SI'],\n            ['name' => 'Kotor', 'country_code' => 'ME'],\n            ['name' => 'Stara Pazova', 'country_code' => 'RS'],\n            ['name' => 'Clervaux', 'country_code' => 'LU'],\n            ['name' => 'Redange-sur-Attert', 'country_code' => 'LU'],\n            ['name' => 'Goaso', 'country_code' => 'GH'],\n            ['name' => 'Dambai', 'country_code' => 'GH'],\n            ['name' => 'Igreja', 'country_code' => 'CV'],\n            ['name' => 'Kaffrine', 'country_code' => 'SN'],\n            ['name' => 'Ribnica', 'country_code' => 'SI'],\n            ['name' => 'Zgornje Gorje', 'country_code' => 'SI'],\n            ['name' => 'Tomaz pri Ormozu', 'country_code' => 'SI'],\n            ['name' => 'Sangre Grande', 'country_code' => 'TT'],\n            ['name' => 'Gaoua', 'country_code' => 'BF'],\n            ['name' => 'Nhlangano', 'country_code' => 'SZ'],\n            ['name' => 'Ordino', 'country_code' => 'AD'],\n            ['name' => 'Bosilegrad', 'country_code' => 'RS'],\n            ['name' => 'Knic', 'country_code' => 'RS'],\n            ['name' => 'Canillo', 'country_code' => 'AD'],\n            ['name' => 'Agago', 'country_code' => 'UG'],\n            ['name' => 'Fort Wellington', 'country_code' => 'GY'],\n            ['name' => 'Vitomarci', 'country_code' => 'SI'],\n            ['name' => 'Nova Sintra', 'country_code' => 'CV'],\n            ['name' => 'Suhar', 'country_code' => 'OM'],\n            ['name' => 'Komen', 'country_code' => 'SI'],\n            ['name' => 'Secanj', 'country_code' => 'RS'],\n            ['name' => 'Nalerigu', 'country_code' => 'GH'],\n            ['name' => 'Divaca', 'country_code' => 'SI'],\n            ['name' => 'Destrnik', 'country_code' => 'SI'],\n            ['name' => 'Ocnita', 'country_code' => 'MD'],\n            ['name' => 'Kozje', 'country_code' => 'SI'],\n            ['name' => 'Nili', 'country_code' => 'AF'],\n            ['name' => 'Bulisa', 'country_code' => 'UG'],\n            ['name' => 'Phonsavan', 'country_code' => 'LA'],\n            ['name' => 'Amudat', 'country_code' => 'UG'],\n            ['name' => 'Jurovski Dol', 'country_code' => 'SI'],\n            ['name' => 'Pagegiai', 'country_code' => 'LT'],\n            ['name' => 'Kovacica', 'country_code' => 'RS'],\n            ['name' => 'Nabilatuk', 'country_code' => 'UG'],\n            ['name' => 'Kralendijk', 'country_code' => 'NL'],\n            ['name' => 'Pakxan', 'country_code' => 'LA'],\n            ['name' => 'Dobje', 'country_code' => 'SI'],\n            ['name' => 'Soldanesti', 'country_code' => 'MD'],\n            ['name' => 'Samdrup Jongkhar', 'country_code' => 'BT'],\n            ['name' => 'Moravske-Toplice', 'country_code' => 'SI'],\n            ['name' => 'Podvelka', 'country_code' => 'SI'],\n            ['name' => 'Trnovska Vas', 'country_code' => 'SI'],\n            ['name' => 'Sarpang', 'country_code' => 'BT'],\n            ['name' => 'Makole', 'country_code' => 'SI'],\n            ['name' => 'Grad', 'country_code' => 'SI'],\n            ['name' => 'Trashigang', 'country_code' => 'BT'],\n            ['name' => 'Qabala', 'country_code' => 'AZ'],\n            ['name' => 'Neves', 'country_code' => 'ST'],\n            ['name' => 'Medveda', 'country_code' => 'RS'],\n            ['name' => 'Napak', 'country_code' => 'UG'],\n            ['name' => 'Vagur', 'country_code' => 'FO'],\n            ['name' => 'Pemagatshel', 'country_code' => 'BT'],\n            ['name' => 'Cova Figueira', 'country_code' => 'CV'],\n            ['name' => 'Zitiste', 'country_code' => 'RS'],\n            ['name' => 'Sofifi', 'country_code' => 'ID'],\n            ['name' => 'Razkrizje', 'country_code' => 'SI'],\n            ['name' => 'Rustavi', 'country_code' => 'GE'],\n            ['name' => 'Cajetina', 'country_code' => 'RS'],\n            ['name' => 'Rogatec', 'country_code' => 'SI'],\n            ['name' => 'Qacha s Nek', 'country_code' => 'LS'],\n            ['name' => 'Sremska Mitrovica', 'country_code' => 'RS'],\n            ['name' => 'Stefan Voda', 'country_code' => 'MD'],\n            ['name' => 'Safotulafai', 'country_code' => 'WS'],\n            ['name' => 'Ivanjica', 'country_code' => 'RS'],\n            ['name' => 'Kuacjok', 'country_code' => 'SS'],\n            ['name' => 'Sedhiou', 'country_code' => 'SN'],\n            ['name' => 'Tubmanburg', 'country_code' => 'LR'],\n            ['name' => 'Indija', 'country_code' => 'RS'],\n            ['name' => 'Zabari', 'country_code' => 'RS'],\n            ['name' => 'Ed Daein', 'country_code' => 'SD'],\n            ['name' => 'Tabuk', 'country_code' => 'PH'],\n            ['name' => 'Osilnica', 'country_code' => 'SI'],\n            ['name' => 'Petrovac na Mlavi', 'country_code' => 'RS'],\n            ['name' => 'Pazin', 'country_code' => 'HR'],\n            ['name' => 'Savalou', 'country_code' => 'BJ'],\n            ['name' => 'Mali Idos', 'country_code' => 'RS'],\n            ['name' => 'Ub', 'country_code' => 'RS'],\n            ['name' => 'Raca', 'country_code' => 'RS'],\n            ['name' => 'Srbobran', 'country_code' => 'RS'],\n            ['name' => 'Ljig', 'country_code' => 'RS'],\n            ['name' => 'Kiryandongo', 'country_code' => 'UG'],\n            ['name' => 'Rekovac', 'country_code' => 'RS'],\n            ['name' => 'Mamuju', 'country_code' => 'ID'],\n            ['name' => 'Hargeysa', 'country_code' => 'SO'],\n            ['name' => 'Kiruhura', 'country_code' => 'UG'],\n            ['name' => 'Leava', 'country_code' => 'WF'],\n            ['name' => 'Novi Knezevac', 'country_code' => 'RS'],\n            ['name' => 'Djibloho', 'country_code' => 'GQ'],\n            ['name' => 'Tsimasham', 'country_code' => 'BT'],\n            ['name' => 'Lajkovac', 'country_code' => 'RS'],\n            ['name' => 'Madinat ash Shamal', 'country_code' => 'QA'],\n            ['name' => 'Bazarak', 'country_code' => 'AF'],\n            ['name' => 'Aleksandrovac', 'country_code' => 'RS'],\n            ['name' => 'Petnjica', 'country_code' => 'ME'],\n            ['name' => 'Sodrazica', 'country_code' => 'SI'],\n            ['name' => 'Samux', 'country_code' => 'AZ'],\n            ['name' => 'Dobrovnik', 'country_code' => 'SI'],\n            ['name' => 'Pala', 'country_code' => 'TD'],\n            ['name' => 'Matam', 'country_code' => 'SN'],\n            ['name' => 'Abim', 'country_code' => 'UG'],\n            ['name' => 'Dalandzadgad', 'country_code' => 'MN'],\n            ['name' => 'Rio Claro', 'country_code' => 'TT'],\n            ['name' => 'Malo Crnice', 'country_code' => 'RS'],\n            ['name' => 'Kursumlija', 'country_code' => 'RS'],\n            ['name' => 'Ntoroko', 'country_code' => 'UG'],\n            ['name' => 'Davaci', 'country_code' => 'AZ'],\n            ['name' => 'Raska', 'country_code' => 'RS'],\n            ['name' => 'Mislinja', 'country_code' => 'SI'],\n            ['name' => 'Golubac', 'country_code' => 'RS'],\n            ['name' => 'Nordhragota', 'country_code' => 'FO'],\n            ['name' => 'Pecinci', 'country_code' => 'RS'],\n            ['name' => 'Qivraq', 'country_code' => 'AZ'],\n            ['name' => 'Nova Crnja', 'country_code' => 'RS'],\n            ['name' => 'Podcetrtek', 'country_code' => 'SI'],\n            ['name' => 'Samamea', 'country_code' => 'WS'],\n            ['name' => 'Xai', 'country_code' => 'LA'],\n            ['name' => 'Ar Rustaq', 'country_code' => 'OM'],\n            ['name' => 'Majdanpek', 'country_code' => 'RS'],\n            ['name' => 'Danilovgrad', 'country_code' => 'ME'],\n            ['name' => 'Buka', 'country_code' => 'PG'],\n            ['name' => 'Makedonska Kamenica', 'country_code' => 'MK'],\n            ['name' => 'Satupa itea', 'country_code' => 'WS'],\n            ['name' => 'Otuke', 'country_code' => 'UG'],\n            ['name' => 'Ruma', 'country_code' => 'RS'],\n            ['name' => 'Asau', 'country_code' => 'WS'],\n            ['name' => 'Hrib-Loski Potok', 'country_code' => 'SI'],\n            ['name' => 'Niksic', 'country_code' => 'ME'],\n            ['name' => 'Sur', 'country_code' => 'OM'],\n            ['name' => 'Safotu', 'country_code' => 'WS'],\n            ['name' => 'Kalbacar', 'country_code' => 'AZ'],\n            ['name' => 'Kobilje', 'country_code' => 'SI'],\n            ['name' => 'Vladimirci', 'country_code' => 'RS'],\n            ['name' => 'Vailoa', 'country_code' => 'WS'],\n            ['name' => 'Kranjska Gora', 'country_code' => 'SI'],\n            ['name' => 'Amuru', 'country_code' => 'UG'],\n            ['name' => 'Buabidi', 'country_code' => 'PA'],\n            ['name' => 'Gusinje', 'country_code' => 'ME'],\n            ['name' => 'Ribeira Brava', 'country_code' => 'CV'],\n            ['name' => 'Ibra ', 'country_code' => 'OM'],\n            ['name' => 'Zetale', 'country_code' => 'SI'],\n            ['name' => 'Tutin', 'country_code' => 'RS'],\n            ['name' => 'Resen', 'country_code' => 'MK'],\n            ['name' => 'Babusnica', 'country_code' => 'RS'],\n            ['name' => 'Xocavand', 'country_code' => 'AZ'],\n            ['name' => 'Sorvagur', 'country_code' => 'FO'],\n            ['name' => 'Kaisiadorys', 'country_code' => 'LT'],\n            ['name' => 'Brus', 'country_code' => 'RS'],\n            ['name' => 'Sahbuz', 'country_code' => 'AZ'],\n            ['name' => 'Eidhi', 'country_code' => 'FO'],\n            ['name' => 'Massakory', 'country_code' => 'TD'],\n            ['name' => 'Salovci', 'country_code' => 'SI'],\n            ['name' => 'Osecina', 'country_code' => 'RS'],\n            ['name' => 'Buba', 'country_code' => 'GW'],\n            ['name' => 'Al Hazm', 'country_code' => 'YE'],\n            ['name' => 'Nakapiripirit', 'country_code' => 'UG'],\n            ['name' => 'Barentu', 'country_code' => 'ER'],\n            ['name' => 'Veliko Gradiste', 'country_code' => 'RS'],\n            ['name' => 'Pili', 'country_code' => 'PH'],\n            ['name' => 'Burco', 'country_code' => 'SO'],\n            ['name' => 'Kucevo', 'country_code' => 'RS'],\n            ['name' => 'Koceljeva', 'country_code' => 'RS'],\n            ['name' => 'Oyrarbakki', 'country_code' => 'FO'],\n            ['name' => 'Arta', 'country_code' => 'DJ'],\n            ['name' => 'Temerin', 'country_code' => 'RS'],\n            ['name' => 'Vestmanna', 'country_code' => 'FO'],\n            ['name' => 'Raseiniai', 'country_code' => 'LT'],\n            ['name' => 'Gadzin Han', 'country_code' => 'RS'],\n            ['name' => 'Gaigirgordub', 'country_code' => 'PA'],\n            ['name' => 'Opovo', 'country_code' => 'RS'],\n            ['name' => 'Kyankwanzi', 'country_code' => 'UG'],\n            ['name' => 'Sao Joao dos Angolares', 'country_code' => 'ST'],\n            ['name' => 'Ntchisi', 'country_code' => 'MW'],\n            ['name' => 'Xekong', 'country_code' => 'LA'],\n            ['name' => 'Trashi Yangtse', 'country_code' => 'BT'],\n            ['name' => 'Sumba', 'country_code' => 'FO'],\n            ['name' => 'Kvivik', 'country_code' => 'FO'],\n            ['name' => 'Solcava', 'country_code' => 'SI'],\n            ['name' => 'Kone', 'country_code' => 'NC'],\n            ['name' => 'Zalingei', 'country_code' => 'SD'],\n            ['name' => 'Sandavagur', 'country_code' => 'FO'],\n            ['name' => 'Hodos', 'country_code' => 'SI'],\n            ['name' => 'Hov', 'country_code' => 'FO'],\n            ['name' => 'Sala', 'country_code' => 'LV'],\n            ['name' => 'Nwoya', 'country_code' => 'UG'],\n            ['name' => 'Saleaula', 'country_code' => 'WS'],\n            ['name' => 'Zagubica', 'country_code' => 'RS'],\n            ['name' => 'Trgoviste', 'country_code' => 'RS'],\n            ['name' => 'Sola', 'country_code' => 'VU'],\n            ['name' => 'Semera', 'country_code' => 'ET'],\n            ['name' => 'Ignalina', 'country_code' => 'LT'],\n            ['name' => 'Vidhareidhi', 'country_code' => 'FO'],\n            ['name' => 'Anew', 'country_code' => 'TM'],\n            ['name' => 'Masunga', 'country_code' => 'BW'],\n            ['name' => 'Kostel', 'country_code' => 'SI'],\n            ['name' => 'Xizi', 'country_code' => 'AZ'],\n            ['name' => 'Trongsa', 'country_code' => 'BT'],\n            ['name' => 'Sandur', 'country_code' => 'FO'],\n            ['name' => 'El Fula', 'country_code' => 'SD'],\n            ['name' => 'Zhemgang', 'country_code' => 'BT'],\n            ['name' => 'Porto Novo', 'country_code' => 'CV'],\n            ['name' => 'Damongo', 'country_code' => 'GH'],\n            ['name' => 'Tanjung Selor', 'country_code' => 'ID'],\n            ['name' => 'Tigoa', 'country_code' => 'SB'],\n            ['name' => 'Lupane', 'country_code' => 'ZW'],\n            ['name' => 'Parun', 'country_code' => 'AF'],\n            ['name' => 'Kolasin', 'country_code' => 'ME'],\n            ['name' => 'Fish Town', 'country_code' => 'LR'],\n            ['name' => 'Bopolu', 'country_code' => 'LR'],\n            ['name' => 'Anouvong', 'country_code' => 'LA'],\n            ['name' => 'Loango', 'country_code' => 'CG'],\n            ['name' => 'Laascaanood', 'country_code' => 'SO'],\n            ['name' => 'Husavik', 'country_code' => 'FO'],\n            ['name' => 'Georgetown', 'country_code' => 'SH'],\n            ['name' => 'Amdjarass', 'country_code' => 'TD'],\n            ['name' => 'Lhuentse', 'country_code' => 'BT'],\n            ['name' => 'Jakar', 'country_code' => 'BT'],\n            ['name' => 'Nova Varos', 'country_code' => 'RS'],\n            ['name' => 'Ceerigaabo', 'country_code' => 'SO'],\n            ['name' => 'Skalavik', 'country_code' => 'FO'],\n            ['name' => 'Kunoy', 'country_code' => 'FO'],\n            ['name' => 'Daga', 'country_code' => 'BT'],\n            ['name' => 'Bela Palanka', 'country_code' => 'RS'],\n            ['name' => 'Kirkja', 'country_code' => 'FO'],\n            ['name' => 'Sowa Town', 'country_code' => 'BW'],\n            ['name' => 'Zgornje Jezersko', 'country_code' => 'SI'],\n            ['name' => 'Savnik', 'country_code' => 'ME'],\n            ['name' => 'Skuvoy', 'country_code' => 'FO'],\n            ['name' => 'Pluzine', 'country_code' => 'ME'],\n            ['name' => 'Choyr', 'country_code' => 'MN'],\n            ['name' => 'Edinburgh of the Seven Seas', 'country_code' => 'SH'],\n            ['name' => 'Awbari', 'country_code' => 'LY'],\n            ['name' => 'Gasa', 'country_code' => 'BT'],\n            ['name' => 'Idri', 'country_code' => 'LY'],\n            ['name' => 'Jwaneng', 'country_code' => 'BW'],\n            ['name' => 'Mahdia', 'country_code' => 'GY'],\n            ['name' => 'Hayma ', 'country_code' => 'OM'],\n            ['name' => 'Union Choco', 'country_code' => 'PA'],\n            ['name' => 'Bardai', 'country_code' => 'TD'],\n            ['name' => 'Al Kufrah', 'country_code' => 'LY'],\n            ['name' => 'We', 'country_code' => 'NC'],\n            ['name' => 'Presevo', 'country_code' => 'RS'],\n            ['name' => 'Bujanovac', 'country_code' => 'RS'],\n            ['name' => 'Kitamilo', 'country_code' => 'UG'],\n            ['name' => 'Xiongzhou', 'country_code' => 'CN'],\n            ['name' => 'Udine', 'country_code' => 'IT'],\n            ['name' => 'Kalisz', 'country_code' => 'PL'],\n            ['name' => 'Legnica', 'country_code' => 'PL'],\n            ['name' => 'Kani', 'country_code' => 'JP'],\n            ['name' => 'Debre Zeyit', 'country_code' => 'ET'],\n            ['name' => 'Xiegang', 'country_code' => 'CN'],\n            ['name' => 'Tiaong', 'country_code' => 'PH'],\n            ['name' => 'Chikusei', 'country_code' => 'JP'],\n            ['name' => 'Tayabas', 'country_code' => 'PH'],\n            ['name' => 'Andria', 'country_code' => 'IT'],\n            ['name' => 'Roquetas de Mar', 'country_code' => 'ES'],\n            ['name' => 'Arlit', 'country_code' => 'NE'],\n            ['name' => 'Fengning', 'country_code' => 'CN'],\n            ['name' => 'Deventer', 'country_code' => 'NL'],\n            ['name' => 'Urgut Shahri', 'country_code' => 'UZ'],\n            ['name' => 'Boca Raton', 'country_code' => 'US'],\n            ['name' => 'Bendigo', 'country_code' => 'AU'],\n            ['name' => 'Arezzo', 'country_code' => 'IT'],\n            ['name' => 'Sindangan', 'country_code' => 'PH'],\n            ['name' => 'Lafayette', 'country_code' => 'US'],\n            ['name' => 'Leme', 'country_code' => 'BR'],\n            ['name' => 'Zelenodol sk', 'country_code' => 'RU'],\n            ['name' => 'Hasilpur', 'country_code' => 'PK'],\n            ['name' => 'Wloclawek', 'country_code' => 'PL'],\n            ['name' => 'Sakata', 'country_code' => 'JP'],\n            ['name' => 'Lee s Summit', 'country_code' => 'US'],\n            ['name' => 'Tobolsk', 'country_code' => 'RU'],\n            ['name' => 'Rio Rancho', 'country_code' => 'US'],\n            ['name' => 'South Fulton', 'country_code' => 'US'],\n            ['name' => 'Chia', 'country_code' => 'CO'],\n            ['name' => 'Beaverton', 'country_code' => 'US'],\n            ['name' => 'Sarapul', 'country_code' => 'RU'],\n            ['name' => 'Taxco de Alarcon', 'country_code' => 'MX'],\n            ['name' => 'Tacurong', 'country_code' => 'PH'],\n            ['name' => 'Es Senia', 'country_code' => 'DZ'],\n            ['name' => 'Kontagora', 'country_code' => 'NG'],\n            ['name' => 'Lugo', 'country_code' => 'ES'],\n            ['name' => 'Khambhat', 'country_code' => 'IN'],\n            ['name' => 'Lawrence', 'country_code' => 'US'],\n            ['name' => 'Zarate', 'country_code' => 'AR'],\n            ['name' => 'Reyhanli', 'country_code' => 'TR'],\n            ['name' => 'Sabaneta', 'country_code' => 'DO'],\n            ['name' => 'Saku', 'country_code' => 'JP'],\n            ['name' => 'Worcester', 'country_code' => 'ZA'],\n            ['name' => 'Votkinsk', 'country_code' => 'RU'],\n            ['name' => 'Paulinia', 'country_code' => 'BR'],\n            ['name' => 'Iseyin', 'country_code' => 'NG'],\n            ['name' => 'Colon', 'country_code' => 'SV'],\n            ['name' => 'Oldham', 'country_code' => 'GB'],\n            ['name' => 'Attock Khurd', 'country_code' => 'PK'],\n            ['name' => 'Witten', 'country_code' => 'DE'],\n            ['name' => 'Hammamet', 'country_code' => 'TN'],\n            ['name' => 'Serov', 'country_code' => 'RU'],\n            ['name' => 'Las Rozas de Madrid', 'country_code' => 'ES'],\n            ['name' => 'Middletown', 'country_code' => 'US'],\n            ['name' => 'Bafra', 'country_code' => 'TR'],\n            ['name' => 'Brantford', 'country_code' => 'CA'],\n            ['name' => 'Hanau', 'country_code' => 'DE'],\n            ['name' => 'El Seibo', 'country_code' => 'DO'],\n            ['name' => 'Lysychansk', 'country_code' => 'UA'],\n            ['name' => 'Jamundi', 'country_code' => 'CO'],\n            ['name' => 'Cesena', 'country_code' => 'IT'],\n            ['name' => 'Itacoatiara', 'country_code' => 'BR'],\n            ['name' => 'Calasiao', 'country_code' => 'PH'],\n            ['name' => 'Ukhta', 'country_code' => 'RU'],\n            ['name' => 'Tomohon', 'country_code' => 'ID'],\n            ['name' => 'Buin', 'country_code' => 'CL'],\n            ['name' => 'Barra do Pirai', 'country_code' => 'BR'],\n            ['name' => 'Sutton Coldfield', 'country_code' => 'GB'],\n            ['name' => 'Iida', 'country_code' => 'JP'],\n            ['name' => 'Kazerun', 'country_code' => 'IR'],\n            ['name' => 'San Tan Valley', 'country_code' => 'US'],\n            ['name' => 'San Marcos', 'country_code' => 'US'],\n            ['name' => 'Wujiaqu', 'country_code' => 'CN'],\n            ['name' => 'Aurangabad', 'country_code' => 'IN'],\n            ['name' => 'Sandy', 'country_code' => 'US'],\n            ['name' => 'Vanderbijlpark', 'country_code' => 'ZA'],\n            ['name' => 'Leninsk-Kuznetskiy', 'country_code' => 'RU'],\n            ['name' => 'Longquan', 'country_code' => 'CN'],\n            ['name' => 'Kelo', 'country_code' => 'TD'],\n            ['name' => 'Mezhdurechensk', 'country_code' => 'RU'],\n            ['name' => 'Caceres', 'country_code' => 'ES'],\n            ['name' => 'Federal Way', 'country_code' => 'US'],\n            ['name' => 'Dovzhansk', 'country_code' => 'UA'],\n            ['name' => 'Guihulngan', 'country_code' => 'PH'],\n            ['name' => 'Kamisu', 'country_code' => 'JP'],\n            ['name' => 'Longkeng', 'country_code' => 'CN'],\n            ['name' => 'Muzaffarabad', 'country_code' => 'PK'],\n            ['name' => 'Carmen', 'country_code' => 'PH'],\n            ['name' => 'Greece', 'country_code' => 'US'],\n            ['name' => 'Mandeville', 'country_code' => 'US'],\n            ['name' => 'Mons', 'country_code' => 'BE'],\n            ['name' => 'Jinbi', 'country_code' => 'CN'],\n            ['name' => 'Lecce', 'country_code' => 'IT'],\n            ['name' => 'Lingtang', 'country_code' => 'CN'],\n            ['name' => 'Xiluodu', 'country_code' => 'CN'],\n            ['name' => 'Hesperia', 'country_code' => 'US'],\n            ['name' => 'Emmiganur', 'country_code' => 'IN'],\n            ['name' => 'Brockton', 'country_code' => 'US'],\n            ['name' => 'Pesaro', 'country_code' => 'IT'],\n            ['name' => 'Aliaga', 'country_code' => 'TR'],\n            ['name' => 'Campo Mourao', 'country_code' => 'BR'],\n            ['name' => 'Boli', 'country_code' => 'CN'],\n            ['name' => 'Lorca', 'country_code' => 'ES'],\n            ['name' => 'Yi Xian', 'country_code' => 'CN'],\n            ['name' => 'Guaiba', 'country_code' => 'BR'],\n            ['name' => 'Lopez', 'country_code' => 'PH'],\n            ['name' => 'Bogo', 'country_code' => 'CM'],\n            ['name' => 'Sarov', 'country_code' => 'RU'],\n            ['name' => 'M lang', 'country_code' => 'PH'],\n            ['name' => 'Kulob', 'country_code' => 'TJ'],\n            ['name' => 'Rubio', 'country_code' => 'VE'],\n            ['name' => 'Riverview', 'country_code' => 'US'],\n            ['name' => 'Sultan Kudarat', 'country_code' => 'PH'],\n            ['name' => 'Fishers', 'country_code' => 'US'],\n            ['name' => 'Mianwali', 'country_code' => 'PK'],\n            ['name' => 'San Rafael', 'country_code' => 'PH'],\n            ['name' => 'Jinshan', 'country_code' => 'CN'],\n            ['name' => 'Solikamsk', 'country_code' => 'RU'],\n            ['name' => 'Nahiyat al Karmah', 'country_code' => 'IQ'],\n            ['name' => 'Bowling Green', 'country_code' => 'US'],\n            ['name' => 'La Spezia', 'country_code' => 'IT'],\n            ['name' => 'Barletta', 'country_code' => 'IT'],\n            ['name' => 'Valongo', 'country_code' => 'PT'],\n            ['name' => 'Avignon', 'country_code' => 'FR'],\n            ['name' => 'Biu', 'country_code' => 'NG'],\n            ['name' => 'Monkayo', 'country_code' => 'PH'],\n            ['name' => 'San Jose del Cabo', 'country_code' => 'MX'],\n            ['name' => 'Para de Minas', 'country_code' => 'BR'],\n            ['name' => 'Jaworzno', 'country_code' => 'PL'],\n            ['name' => 'San Cugat del Valles', 'country_code' => 'ES'],\n            ['name' => 'Bislig', 'country_code' => 'PH'],\n            ['name' => 'Kanuma', 'country_code' => 'JP'],\n            ['name' => 'Gera', 'country_code' => 'DE'],\n            ['name' => 'Roswell', 'country_code' => 'US'],\n            ['name' => 'Menifee', 'country_code' => 'US'],\n            ['name' => 'Grudziadz', 'country_code' => 'PL'],\n            ['name' => 'Plantation', 'country_code' => 'US'],\n            ['name' => 'Dover', 'country_code' => 'US'],\n            ['name' => 'Escalante', 'country_code' => 'PH'],\n            ['name' => 'Gatchina', 'country_code' => 'RU'],\n            ['name' => 'Michurinsk', 'country_code' => 'RU'],\n            ['name' => 'Bayan Hot', 'country_code' => 'CN'],\n            ['name' => 'Alessandria', 'country_code' => 'IT'],\n            ['name' => 'Santa Cruz Xoxocotlan', 'country_code' => 'MX'],\n            ['name' => 'Glazov', 'country_code' => 'RU'],\n            ['name' => 'Portsmouth', 'country_code' => 'US'],\n            ['name' => 'Chino', 'country_code' => 'US'],\n            ['name' => 'Marmaris', 'country_code' => 'TR'],\n            ['name' => 'Cape Breton', 'country_code' => 'CA'],\n            ['name' => 'Kwekwe', 'country_code' => 'ZW'],\n            ['name' => 'Azumino', 'country_code' => 'JP'],\n            ['name' => 'Wangjia', 'country_code' => 'CN'],\n            ['name' => 'Edmond', 'country_code' => 'US'],\n            ['name' => 'Hanford', 'country_code' => 'US'],\n            ['name' => 'Lemery', 'country_code' => 'PH'],\n            ['name' => 'Dearborn', 'country_code' => 'US'],\n            ['name' => 'Menderes', 'country_code' => 'TR'],\n            ['name' => 'Paracatu', 'country_code' => 'BR'],\n            ['name' => 'Higashi-Matsuyama', 'country_code' => 'JP'],\n            ['name' => 'Yunnanyi', 'country_code' => 'CN'],\n            ['name' => 'Voskresensk', 'country_code' => 'RU'],\n            ['name' => 'Epinal', 'country_code' => 'FR'],\n            ['name' => 'Mikhaylovsk', 'country_code' => 'RU'],\n            ['name' => 'Livonia', 'country_code' => 'US'],\n            ['name' => 'Hadera', 'country_code' => 'IL'],\n            ['name' => 'Paniqui', 'country_code' => 'PH'],\n            ['name' => 'Trelew', 'country_code' => 'AR'],\n            ['name' => 'Iserlohn', 'country_code' => 'DE'],\n            ['name' => 'Linquan', 'country_code' => 'CN'],\n            ['name' => 'Bafang', 'country_code' => 'CM'],\n            ['name' => 'Caldas Novas', 'country_code' => 'BR'],\n            ['name' => 'Teziutlan', 'country_code' => 'MX'],\n            ['name' => 'Vineland', 'country_code' => 'US'],\n            ['name' => 'Florence', 'country_code' => 'US'],\n            ['name' => 'Portsmouth', 'country_code' => 'US'],\n            ['name' => 'Slidell', 'country_code' => 'US'],\n            ['name' => 'Lawton', 'country_code' => 'US'],\n            ['name' => 'Wukari', 'country_code' => 'NG'],\n            ['name' => 'Bauan', 'country_code' => 'PH'],\n            ['name' => 'Samalut', 'country_code' => 'EG'],\n            ['name' => 'Rafaela', 'country_code' => 'AR'],\n            ['name' => 'Velikiye Luki', 'country_code' => 'RU'],\n            ['name' => 'Hanamaki Onsen', 'country_code' => 'JP'],\n            ['name' => 'Missoula', 'country_code' => 'US'],\n            ['name' => 'Hastings', 'country_code' => 'GB'],\n            ['name' => 'Kilosa', 'country_code' => 'TZ'],\n            ['name' => 'Laiyuan', 'country_code' => 'CN'],\n            ['name' => 'Sorriso', 'country_code' => 'BR'],\n            ['name' => 'Auburn', 'country_code' => 'US'],\n            ['name' => 'San Sebastian de los Reyes', 'country_code' => 'ES'],\n            ['name' => 'Foumban', 'country_code' => 'CM'],\n            ['name' => 'Rayachoti', 'country_code' => 'IN'],\n            ['name' => 'Sampit', 'country_code' => 'ID'],\n            ['name' => 'Lethbridge', 'country_code' => 'CA'],\n            ['name' => 'Caratinga', 'country_code' => 'BR'],\n            ['name' => 'Rapid City', 'country_code' => 'US'],\n            ['name' => 'Yumbo', 'country_code' => 'CO'],\n            ['name' => 'Grahamstown', 'country_code' => 'ZA'],\n            ['name' => 'Kitakami', 'country_code' => 'JP'],\n            ['name' => 'Acajutla', 'country_code' => 'SV'],\n            ['name' => 'Terre Haute', 'country_code' => 'US'],\n            ['name' => 'Saint-Jean-sur-Richelieu', 'country_code' => 'CA'],\n            ['name' => 'Vaciamadrid', 'country_code' => 'ES'],\n            ['name' => 'Toms River', 'country_code' => 'US'],\n            ['name' => 'Mosquera', 'country_code' => 'CO'],\n            ['name' => 'Suffolk', 'country_code' => 'US'],\n            ['name' => 'Clarington', 'country_code' => 'CA'],\n            ['name' => 'Kendu Bay', 'country_code' => 'KE'],\n            ['name' => 'Blacksburg', 'country_code' => 'US'],\n            ['name' => 'Modi in Makkabbim Re ut', 'country_code' => 'IL'],\n            ['name' => 'Duren', 'country_code' => 'DE'],\n            ['name' => 'Pickering', 'country_code' => 'CA'],\n            ['name' => 'Flensburg', 'country_code' => 'DE'],\n            ['name' => 'Mount Pleasant', 'country_code' => 'US'],\n            ['name' => 'Mogi Mirim', 'country_code' => 'BR'],\n            ['name' => 'Weiyuan', 'country_code' => 'CN'],\n            ['name' => 'Balayan', 'country_code' => 'PH'],\n            ['name' => 'Yao', 'country_code' => 'TD'],\n            ['name' => 'Penaflor', 'country_code' => 'CL'],\n            ['name' => 'Votuporanga', 'country_code' => 'BR'],\n            ['name' => 'Cacapava', 'country_code' => 'BR'],\n            ['name' => 'Carson', 'country_code' => 'US'],\n            ['name' => 'Tubingen', 'country_code' => 'DE'],\n            ['name' => 'Greenburgh', 'country_code' => 'US'],\n            ['name' => 'Sao Felix do Xingu', 'country_code' => 'BR'],\n            ['name' => 'Jalalpur Jattan', 'country_code' => 'PK'],\n            ['name' => 'Caceres', 'country_code' => 'BR'],\n            ['name' => 'Santa Cruz', 'country_code' => 'PH'],\n            ['name' => 'Timoteo', 'country_code' => 'BR'],\n            ['name' => 'Maladzyechna', 'country_code' => 'BY'],\n            ['name' => 'Conroe', 'country_code' => 'US'],\n            ['name' => 'Alafaya', 'country_code' => 'US'],\n            ['name' => 'Chauk', 'country_code' => 'MM'],\n            ['name' => 'Imizucho', 'country_code' => 'JP'],\n            ['name' => 'Itajuba', 'country_code' => 'BR'],\n            ['name' => 'Livermore', 'country_code' => 'US'],\n            ['name' => 'Playas de Rosarito', 'country_code' => 'MX'],\n            ['name' => 'Saquarema', 'country_code' => 'BR'],\n            ['name' => 'Mestre', 'country_code' => 'IT'],\n            ['name' => 'Ad Dakhla', 'country_code' => 'MA'],\n            ['name' => 'Planaltina', 'country_code' => 'BR'],\n            ['name' => 'Chililabombwe', 'country_code' => 'ZM'],\n            ['name' => 'Palimbang', 'country_code' => 'PH'],\n            ['name' => 'Pisa', 'country_code' => 'IT'],\n            ['name' => 'Fundacion', 'country_code' => 'CO'],\n            ['name' => 'Kavali', 'country_code' => 'IN'],\n            ['name' => 'Pistoia', 'country_code' => 'IT'],\n            ['name' => 'Sao Joao del Rei', 'country_code' => 'BR'],\n            ['name' => 'Nanaimo', 'country_code' => 'CA'],\n            ['name' => 'Ma arrat an Nu man', 'country_code' => 'SY'],\n            ['name' => 'Mancheral', 'country_code' => 'IN'],\n            ['name' => 'Chalchuapa', 'country_code' => 'SV'],\n            ['name' => 'Southport', 'country_code' => 'GB'],\n            ['name' => 'Kansk', 'country_code' => 'RU'],\n            ['name' => 'Kiselevsk', 'country_code' => 'RU'],\n            ['name' => 'Zwickau', 'country_code' => 'DE'],\n            ['name' => 'Hezuo', 'country_code' => 'CN'],\n            ['name' => 'Pili', 'country_code' => 'PH'],\n            ['name' => 'Alaminos', 'country_code' => 'PH'],\n            ['name' => 'New Braunfels', 'country_code' => 'US'],\n            ['name' => 'Ocana', 'country_code' => 'CO'],\n            ['name' => 'Mihara', 'country_code' => 'JP'],\n            ['name' => 'Oton', 'country_code' => 'PH'],\n            ['name' => 'Luau', 'country_code' => 'AO'],\n            ['name' => 'Kadiri', 'country_code' => 'IN'],\n            ['name' => 'Norrkoping', 'country_code' => 'SE'],\n            ['name' => 'Giessen', 'country_code' => 'DE'],\n            ['name' => 'Hosaina', 'country_code' => 'ET'],\n            ['name' => 'Lucca', 'country_code' => 'IT'],\n            ['name' => 'Hilversum', 'country_code' => 'NL'],\n            ['name' => 'Santa Ines', 'country_code' => 'BR'],\n            ['name' => 'Leping', 'country_code' => 'CN'],\n            ['name' => 'Serdar', 'country_code' => 'TM'],\n            ['name' => 'Cantaura', 'country_code' => 'VE'],\n            ['name' => 'Kamensk-Shakhtinskiy', 'country_code' => 'RU'],\n            ['name' => 'Fall River', 'country_code' => 'US'],\n            ['name' => 'Grimsby', 'country_code' => 'GB'],\n            ['name' => 'Chosica', 'country_code' => 'PE'],\n            ['name' => 'Prijedor', 'country_code' => 'BA'],\n            ['name' => 'Kabacan', 'country_code' => 'PH'],\n            ['name' => 'Dunkerque', 'country_code' => 'FR'],\n            ['name' => 'Parang', 'country_code' => 'PH'],\n            ['name' => 'El Puerto de Santa Maria', 'country_code' => 'ES'],\n            ['name' => 'Gitarama', 'country_code' => 'RW'],\n            ['name' => 'Albany', 'country_code' => 'US'],\n            ['name' => 'Sao Joao da Boa Vista', 'country_code' => 'BR'],\n            ['name' => 'Shwebo', 'country_code' => 'MM'],\n            ['name' => 'Candeias', 'country_code' => 'BR'],\n            ['name' => 'Qiantangcun', 'country_code' => 'CN'],\n            ['name' => 'Salaman', 'country_code' => 'PH'],\n            ['name' => 'Halifax', 'country_code' => 'GB'],\n            ['name' => 'Paranavai', 'country_code' => 'BR'],\n            ['name' => 'Polangui', 'country_code' => 'PH'],\n            ['name' => 'Bhakkar', 'country_code' => 'PK'],\n            ['name' => 'Norwalk', 'country_code' => 'US'],\n            ['name' => 'Dongchuan', 'country_code' => 'CN'],\n            ['name' => 'Heerlen', 'country_code' => 'NL'],\n            ['name' => 'Montelibano', 'country_code' => 'CO'],\n            ['name' => 'San Luis', 'country_code' => 'CU'],\n            ['name' => 'O Fallon', 'country_code' => 'US'],\n            ['name' => 'Ootacamund', 'country_code' => 'IN'],\n            ['name' => 'Victorias', 'country_code' => 'PH'],\n            ['name' => 'La Grita', 'country_code' => 'VE'],\n            ['name' => 'Sakiet ez Zit', 'country_code' => 'TN'],\n            ['name' => 'Launceston', 'country_code' => 'AU'],\n            ['name' => 'Newton', 'country_code' => 'US'],\n            ['name' => 'Zhob', 'country_code' => 'PK'],\n            ['name' => 'Pingyuanjie', 'country_code' => 'CN'],\n            ['name' => 'Qal at Bishah', 'country_code' => 'SA'],\n            ['name' => 'Tacana', 'country_code' => 'GT'],\n            ['name' => 'Maiquetia', 'country_code' => 'VE'],\n            ['name' => 'Ratingen', 'country_code' => 'DE'],\n            ['name' => 'Gerona', 'country_code' => 'PH'],\n            ['name' => 'Changting', 'country_code' => 'CN'],\n            ['name' => 'Leshou', 'country_code' => 'CN'],\n            ['name' => 'Sinjar', 'country_code' => 'IQ'],\n            ['name' => 'Sudbury', 'country_code' => 'CA'],\n            ['name' => 'Sao Goncalo do Amarante', 'country_code' => 'BR'],\n            ['name' => 'Jatai', 'country_code' => 'BR'],\n            ['name' => 'Wislane', 'country_code' => 'MA'],\n            ['name' => 'Buzuluk', 'country_code' => 'RU'],\n            ['name' => 'Cacoal', 'country_code' => 'BR'],\n            ['name' => 'Muncie', 'country_code' => 'US'],\n            ['name' => 'Jaguey Grande', 'country_code' => 'CU'],\n            ['name' => 'Heshangtian', 'country_code' => 'CN'],\n            ['name' => 'Santa Cruz do Capibaribe', 'country_code' => 'BR'],\n            ['name' => 'Lunen', 'country_code' => 'DE'],\n            ['name' => 'Dipalpur', 'country_code' => 'PK'],\n            ['name' => 'Compostela', 'country_code' => 'PH'],\n            ['name' => 'Ceylanpinar', 'country_code' => 'TR'],\n            ['name' => 'Pergamino', 'country_code' => 'AR'],\n            ['name' => 'Anakapalle', 'country_code' => 'IN'],\n            ['name' => 'Fukuroi', 'country_code' => 'JP'],\n            ['name' => 'Gurupi', 'country_code' => 'BR'],\n            ['name' => 'Consolacion del Sur', 'country_code' => 'CU'],\n            ['name' => 'Koidu-Bulma', 'country_code' => 'SL'],\n            ['name' => 'Balamban', 'country_code' => 'PH'],\n            ['name' => 'Hamilton', 'country_code' => 'US'],\n            ['name' => 'Paredes', 'country_code' => 'PT'],\n            ['name' => 'Brindisi', 'country_code' => 'IT'],\n            ['name' => 'Town  n  Country', 'country_code' => 'US'],\n            ['name' => 'Mobara', 'country_code' => 'JP'],\n            ['name' => 'Tiflet', 'country_code' => 'MA'],\n            ['name' => 'Decatur', 'country_code' => 'US'],\n            ['name' => 'Nova Lima', 'country_code' => 'BR'],\n            ['name' => 'Heyunkeng', 'country_code' => 'CN'],\n            ['name' => 'Wulan', 'country_code' => 'CN'],\n            ['name' => 'Sao Cristovao', 'country_code' => 'BR'],\n            ['name' => 'Menglang', 'country_code' => 'CN'],\n            ['name' => 'Ad Diwem', 'country_code' => 'SD'],\n            ['name' => 'Jackson', 'country_code' => 'US'],\n            ['name' => 'Fort Myers', 'country_code' => 'US'],\n            ['name' => 'Qaracuxur', 'country_code' => 'AZ'],\n            ['name' => 'Chiguayante', 'country_code' => 'CL'],\n            ['name' => 'Campana', 'country_code' => 'AR'],\n            ['name' => 'Dingcheng', 'country_code' => 'CN'],\n            ['name' => 'Tuncheng', 'country_code' => 'CN'],\n            ['name' => 'Gubkin', 'country_code' => 'RU'],\n            ['name' => 'Goodyear', 'country_code' => 'US'],\n            ['name' => 'Yaofeng', 'country_code' => 'CN'],\n            ['name' => 'Aalst', 'country_code' => 'BE'],\n            ['name' => 'Kattagan', 'country_code' => 'UZ'],\n            ['name' => 'Paraiso', 'country_code' => 'MX'],\n            ['name' => 'Gotenba', 'country_code' => 'JP'],\n            ['name' => 'Novotroitsk', 'country_code' => 'RU'],\n            ['name' => 'Ducheng', 'country_code' => 'CN'],\n            ['name' => 'Kharian', 'country_code' => 'PK'],\n            ['name' => 'Keffi', 'country_code' => 'NG'],\n            ['name' => 'Pariaman', 'country_code' => 'ID'],\n            ['name' => 'Dalton', 'country_code' => 'US'],\n            ['name' => 'Santa Rosa Jauregui', 'country_code' => 'MX'],\n            ['name' => 'Ubatuba', 'country_code' => 'BR'],\n            ['name' => 'San Antonio', 'country_code' => 'CL'],\n            ['name' => 'Clarkstown', 'country_code' => 'US'],\n            ['name' => 'Treviso', 'country_code' => 'IT'],\n            ['name' => 'Guasavito', 'country_code' => 'MX'],\n            ['name' => 'Pinamalayan', 'country_code' => 'PH'],\n            ['name' => 'Cheektowaga', 'country_code' => 'US'],\n            ['name' => 'Shaoshanzhan', 'country_code' => 'CN'],\n            ['name' => 'Aroroy', 'country_code' => 'PH'],\n            ['name' => 'Olavarria', 'country_code' => 'AR'],\n            ['name' => 'Konstanz', 'country_code' => 'DE'],\n            ['name' => 'Bryan', 'country_code' => 'US'],\n            ['name' => 'Longchuan', 'country_code' => 'CN'],\n            ['name' => 'Zhezqazghan', 'country_code' => 'KZ'],\n            ['name' => 'Khowrasgan', 'country_code' => 'IR'],\n            ['name' => 'Bugulma', 'country_code' => 'RU'],\n            ['name' => 'Shchekino', 'country_code' => 'RU'],\n            ['name' => 'Hinigaran', 'country_code' => 'PH'],\n            ['name' => 'Potiskum', 'country_code' => 'NG'],\n            ['name' => 'Waukegan', 'country_code' => 'US'],\n            ['name' => 'Pongotan', 'country_code' => 'PH'],\n            ['name' => 'Longhua', 'country_code' => 'CN'],\n            ['name' => 'Anderson', 'country_code' => 'US'],\n            ['name' => 'Kitakoriyamacho', 'country_code' => 'JP'],\n            ['name' => 'Mijas', 'country_code' => 'ES'],\n            ['name' => 'Ushiku', 'country_code' => 'JP'],\n            ['name' => 'North Vancouver', 'country_code' => 'CA'],\n            ['name' => 'Redwood City', 'country_code' => 'US'],\n            ['name' => 'Chiquinquira', 'country_code' => 'CO'],\n            ['name' => 'Guanambi', 'country_code' => 'BR'],\n            ['name' => 'Torrevieja', 'country_code' => 'ES'],\n            ['name' => 'Yeysk', 'country_code' => 'RU'],\n            ['name' => 'Sekimachi', 'country_code' => 'JP'],\n            ['name' => 'Hoover', 'country_code' => 'US'],\n            ['name' => 'Cachoeira do Sul', 'country_code' => 'BR'],\n            ['name' => 'Brossard', 'country_code' => 'CA'],\n            ['name' => 'Chita', 'country_code' => 'JP'],\n            ['name' => 'Villingen-Schwenningen', 'country_code' => 'DE'],\n            ['name' => 'Sokcho', 'country_code' => 'KR'],\n            ['name' => 'Sao Bento do Sul', 'country_code' => 'BR'],\n            ['name' => 'Redencao', 'country_code' => 'BR'],\n            ['name' => 'Chiclana de la Frontera', 'country_code' => 'ES'],\n            ['name' => 'Kineshma', 'country_code' => 'RU'],\n            ['name' => 'Lake Forest', 'country_code' => 'US'],\n            ['name' => 'Camboriu', 'country_code' => 'BR'],\n            ['name' => 'Daanbantayan', 'country_code' => 'PH'],\n            ['name' => 'Napa', 'country_code' => 'US'],\n            ['name' => 'Derry', 'country_code' => 'GB'],\n            ['name' => 'Torrente', 'country_code' => 'ES'],\n            ['name' => 'Sumenep', 'country_code' => 'ID'],\n            ['name' => 'Luancheng', 'country_code' => 'CN'],\n            ['name' => 'Jelenia Gora', 'country_code' => 'PL'],\n            ['name' => 'Walvisbaai', 'country_code' => 'NA'],\n            ['name' => 'Moriyama', 'country_code' => 'JP'],\n            ['name' => 'Junin', 'country_code' => 'AR'],\n            ['name' => 'Stockton-on-Tees', 'country_code' => 'GB'],\n            ['name' => 'Korgas', 'country_code' => 'CN'],\n            ['name' => 'Repentigny', 'country_code' => 'CA'],\n            ['name' => 'Largo', 'country_code' => 'US'],\n            ['name' => 'Bloomington', 'country_code' => 'US'],\n            ['name' => 'Unai', 'country_code' => 'BR'],\n            ['name' => 'Araripina', 'country_code' => 'BR'],\n            ['name' => 'Marl', 'country_code' => 'DE'],\n            ['name' => 'Gravata', 'country_code' => 'BR'],\n            ['name' => 'Jacobina', 'country_code' => 'BR'],\n            ['name' => 'Aruja', 'country_code' => 'BR'],\n            ['name' => 'Guider', 'country_code' => 'CM'],\n            ['name' => 'Nabua', 'country_code' => 'PH'],\n            ['name' => 'Surallah', 'country_code' => 'PH'],\n            ['name' => 'Yokotemachi', 'country_code' => 'JP'],\n            ['name' => 'Sabanalarga', 'country_code' => 'CO'],\n            ['name' => 'Johns Creek', 'country_code' => 'US'],\n            ['name' => 'Tire', 'country_code' => 'TR'],\n            ['name' => 'Newport Beach', 'country_code' => 'US'],\n            ['name' => 'Dmitrov', 'country_code' => 'RU'],\n            ['name' => 'Serra Talhada', 'country_code' => 'BR'],\n            ['name' => 'Navegantes', 'country_code' => 'BR'],\n            ['name' => 'Banga', 'country_code' => 'PH'],\n            ['name' => 'Mission', 'country_code' => 'US'],\n            ['name' => 'Chigorodo', 'country_code' => 'CO'],\n            ['name' => 'El Milia', 'country_code' => 'DZ'],\n            ['name' => 'Cerete', 'country_code' => 'CO'],\n            ['name' => 'El Ejido', 'country_code' => 'ES'],\n            ['name' => 'Worms', 'country_code' => 'DE'],\n            ['name' => 'Makilala', 'country_code' => 'PH'],\n            ['name' => 'Troy', 'country_code' => 'US'],\n            ['name' => 'Madera', 'country_code' => 'US'],\n            ['name' => 'Joplin', 'country_code' => 'US'],\n            ['name' => 'San Fabian', 'country_code' => 'PH'],\n            ['name' => 'Zheleznogorsk', 'country_code' => 'RU'],\n            ['name' => 'Pontevedra', 'country_code' => 'ES'],\n            ['name' => 'Cianorte', 'country_code' => 'BR'],\n            ['name' => 'Ijui', 'country_code' => 'BR'],\n            ['name' => 'Chino Hills', 'country_code' => 'US'],\n            ['name' => 'Camiling', 'country_code' => 'PH'],\n            ['name' => 'Pinheiro', 'country_code' => 'BR'],\n            ['name' => 'Sirsilla', 'country_code' => 'IN'],\n            ['name' => 'Arona', 'country_code' => 'ES'],\n            ['name' => 'Chilliwack', 'country_code' => 'CA'],\n            ['name' => 'Binmaley', 'country_code' => 'PH'],\n            ['name' => 'Yurga', 'country_code' => 'RU'],\n            ['name' => 'Calabanga', 'country_code' => 'PH'],\n            ['name' => 'Redditch', 'country_code' => 'GB'],\n            ['name' => 'Mian Channun', 'country_code' => 'PK'],\n            ['name' => 'Santa Barbara', 'country_code' => 'PH'],\n            ['name' => 'Wutiancun', 'country_code' => 'CN'],\n            ['name' => 'Santana do Livramento', 'country_code' => 'BR'],\n            ['name' => 'Tual', 'country_code' => 'ID'],\n            ['name' => 'Sao Sebastiao', 'country_code' => 'BR'],\n            ['name' => 'Sablayan', 'country_code' => 'PH'],\n            ['name' => 'Moju', 'country_code' => 'BR'],\n            ['name' => 'Seropedica', 'country_code' => 'BR'],\n            ['name' => 'Wuyi', 'country_code' => 'CN'],\n            ['name' => 'Marsala', 'country_code' => 'IT'],\n            ['name' => 'Bhalwal', 'country_code' => 'PK'],\n            ['name' => 'Chaykovskiy', 'country_code' => 'RU'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Coari', 'country_code' => 'BR'],\n            ['name' => 'Velbert', 'country_code' => 'DE'],\n            ['name' => 'Melbourne', 'country_code' => 'US'],\n            ['name' => 'Pozzuoli', 'country_code' => 'IT'],\n            ['name' => 'Al Hayy', 'country_code' => 'IQ'],\n            ['name' => 'Port Huron', 'country_code' => 'US'],\n            ['name' => 'Velez-Malaga', 'country_code' => 'ES'],\n            ['name' => 'Xiedian', 'country_code' => 'CN'],\n            ['name' => 'Nakatsu', 'country_code' => 'JP'],\n            ['name' => 'Baggao', 'country_code' => 'PH'],\n            ['name' => 'Solana', 'country_code' => 'PH'],\n            ['name' => 'Colonie', 'country_code' => 'US'],\n            ['name' => 'Shirvan', 'country_code' => 'IR'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Kongjiazhuang', 'country_code' => 'CN'],\n            ['name' => 'Bhaktapur', 'country_code' => 'NP'],\n            ['name' => 'Guinobatan', 'country_code' => 'PH'],\n            ['name' => 'Fredrikstad', 'country_code' => 'NO'],\n            ['name' => 'Cruzeiro do Sul', 'country_code' => 'BR'],\n            ['name' => 'Dapitan', 'country_code' => 'PH'],\n            ['name' => 'Omihachiman', 'country_code' => 'JP'],\n            ['name' => 'Muroran', 'country_code' => 'JP'],\n            ['name' => 'Calaca', 'country_code' => 'PH'],\n            ['name' => 'Kaneyama', 'country_code' => 'JP'],\n            ['name' => 'Bolinao', 'country_code' => 'PH'],\n            ['name' => 'Patrocinio', 'country_code' => 'BR'],\n            ['name' => 'Minden', 'country_code' => 'DE'],\n            ['name' => 'Ita', 'country_code' => 'PY'],\n            ['name' => 'Zephyrhills', 'country_code' => 'US'],\n            ['name' => 'Tres Rios', 'country_code' => 'BR'],\n            ['name' => 'Bekobod', 'country_code' => 'UZ'],\n            ['name' => 'Maple Ridge', 'country_code' => 'CA'],\n            ['name' => 'La Louviere', 'country_code' => 'BE'],\n            ['name' => 'Grosseto', 'country_code' => 'IT'],\n            ['name' => 'St. Augustine', 'country_code' => 'US'],\n            ['name' => 'Peterborough', 'country_code' => 'CA'],\n            ['name' => 'Funza', 'country_code' => 'CO'],\n            ['name' => 'Hengkou', 'country_code' => 'CN'],\n            ['name' => 'Pilar', 'country_code' => 'AR'],\n            ['name' => 'Varese', 'country_code' => 'IT'],\n            ['name' => 'Caldas', 'country_code' => 'CO'],\n            ['name' => 'Science City of Munoz', 'country_code' => 'PH'],\n            ['name' => 'Macaiba', 'country_code' => 'BR'],\n            ['name' => 'Ust -Ilimsk', 'country_code' => 'RU'],\n            ['name' => 'Flagstaff', 'country_code' => 'US'],\n            ['name' => 'Presidencia Roque Saenz Pena', 'country_code' => 'AR'],\n            ['name' => 'Azov', 'country_code' => 'RU'],\n            ['name' => 'Lujan', 'country_code' => 'AR'],\n            ['name' => 'Agboville', 'country_code' => 'CI'],\n            ['name' => 'Campo Limpo', 'country_code' => 'BR'],\n            ['name' => 'Quixeramobim', 'country_code' => 'BR'],\n            ['name' => 'Watampone', 'country_code' => 'ID'],\n            ['name' => 'Pleasanton', 'country_code' => 'US'],\n            ['name' => 'Xindian', 'country_code' => 'CN'],\n            ['name' => 'Calauan', 'country_code' => 'PH'],\n            ['name' => 'Shuibian', 'country_code' => 'CN'],\n            ['name' => 'Anapa', 'country_code' => 'RU'],\n            ['name' => 'Kimitsu', 'country_code' => 'JP'],\n            ['name' => 'Matao', 'country_code' => 'BR'],\n            ['name' => 'Murcia', 'country_code' => 'PH'],\n            ['name' => 'Dessau-Rosslau', 'country_code' => 'DE'],\n            ['name' => 'General Roca', 'country_code' => 'AR'],\n            ['name' => 'Atascocita', 'country_code' => 'US'],\n            ['name' => 'Bani Mazar', 'country_code' => 'EG'],\n            ['name' => 'Kentau', 'country_code' => 'KZ'],\n            ['name' => 'Maco', 'country_code' => 'PH'],\n            ['name' => 'Westland', 'country_code' => 'US'],\n            ['name' => 'Auburn', 'country_code' => 'US'],\n            ['name' => 'Cranston', 'country_code' => 'US'],\n            ['name' => 'Gobernador Galvez', 'country_code' => 'AR'],\n            ['name' => 'Kamareddipet', 'country_code' => 'IN'],\n            ['name' => 'Athi River', 'country_code' => 'KE'],\n            ['name' => 'Novouralsk', 'country_code' => 'RU'],\n            ['name' => 'Shiji', 'country_code' => 'CN'],\n            ['name' => 'Yanggao', 'country_code' => 'CN'],\n            ['name' => 'Indanan', 'country_code' => 'PH'],\n            ['name' => 'Folsom', 'country_code' => 'US'],\n            ['name' => 'Springdale', 'country_code' => 'US'],\n            ['name' => 'Taroudannt', 'country_code' => 'MA'],\n            ['name' => 'Sefrou', 'country_code' => 'MA'],\n            ['name' => 'Warwick', 'country_code' => 'US'],\n            ['name' => 'Passi', 'country_code' => 'PH'],\n            ['name' => 'Los Patios', 'country_code' => 'CO'],\n            ['name' => 'Tanjay', 'country_code' => 'PH'],\n            ['name' => 'Polatsk', 'country_code' => 'BY'],\n            ['name' => 'Calatrava', 'country_code' => 'PH'],\n            ['name' => 'Meybod', 'country_code' => 'IR'],\n            ['name' => 'Tepeji del Rio de Ocampo', 'country_code' => 'MX'],\n            ['name' => 'Akiruno', 'country_code' => 'JP'],\n            ['name' => 'Kilifi', 'country_code' => 'KE'],\n            ['name' => 'Quixada', 'country_code' => 'BR'],\n            ['name' => 'Farmington Hills', 'country_code' => 'US'],\n            ['name' => 'Neumunster', 'country_code' => 'DE'],\n            ['name' => 'Alfenas', 'country_code' => 'BR'],\n            ['name' => 'Mackay', 'country_code' => 'AU'],\n            ['name' => 'Norderstedt', 'country_code' => 'DE'],\n            ['name' => 'Necochea', 'country_code' => 'AR'],\n            ['name' => 'Paloncha', 'country_code' => 'IN'],\n            ['name' => 'Talipao', 'country_code' => 'PH'],\n            ['name' => 'Newark', 'country_code' => 'US'],\n            ['name' => 'Williamsburg', 'country_code' => 'US'],\n            ['name' => 'Brooklyn Park', 'country_code' => 'US'],\n            ['name' => 'Uvinza', 'country_code' => 'TZ'],\n            ['name' => 'Kottagudem', 'country_code' => 'IN'],\n            ['name' => 'Mbalmayo', 'country_code' => 'CM'],\n            ['name' => 'Namsan', 'country_code' => 'KP'],\n            ['name' => 'Zarzis', 'country_code' => 'TN'],\n            ['name' => 'Chapadinha', 'country_code' => 'BR'],\n            ['name' => 'Andahuaylas', 'country_code' => 'PE'],\n            ['name' => 'Hattiesburg', 'country_code' => 'US'],\n            ['name' => 'Alexandria', 'country_code' => 'US'],\n            ['name' => 'Tres Coracoes', 'country_code' => 'BR'],\n            ['name' => 'Manresa', 'country_code' => 'ES'],\n            ['name' => 'Jamshoro', 'country_code' => 'PK'],\n            ['name' => 'Meiganga', 'country_code' => 'CM'],\n            ['name' => 'Tall  Afar', 'country_code' => 'IQ'],\n            ['name' => 'Balad', 'country_code' => 'IQ'],\n            ['name' => 'Vila do Conde', 'country_code' => 'PT'],\n            ['name' => 'Bantayan', 'country_code' => 'PH'],\n            ['name' => 'San Carlos del Zulia', 'country_code' => 'VE'],\n            ['name' => 'Natori-shi', 'country_code' => 'JP'],\n            ['name' => 'Koktokay', 'country_code' => 'CN'],\n            ['name' => 'Capenda Camulemba', 'country_code' => 'AO'],\n            ['name' => 'Fiumicino', 'country_code' => 'IT'],\n            ['name' => 'Patzcuaro', 'country_code' => 'MX'],\n            ['name' => 'Florence', 'country_code' => 'US'],\n            ['name' => 'Chester', 'country_code' => 'GB'],\n            ['name' => 'Mabai', 'country_code' => 'CN'],\n            ['name' => 'Ben Gardane', 'country_code' => 'TN'],\n            ['name' => 'Jinhe', 'country_code' => 'CN'],\n            ['name' => 'Baracoa', 'country_code' => 'CU'],\n            ['name' => 'Telemaco Borba', 'country_code' => 'BR'],\n            ['name' => 'Valdosta', 'country_code' => 'US'],\n            ['name' => 'Plymouth', 'country_code' => 'US'],\n            ['name' => 'Yalta', 'country_code' => 'UA'],\n            ['name' => 'Cotui', 'country_code' => 'DO'],\n            ['name' => 'Jiangna', 'country_code' => 'CN'],\n            ['name' => 'Cabiao', 'country_code' => 'PH'],\n            ['name' => 'Manhuacu', 'country_code' => 'BR'],\n            ['name' => 'Torres Vedras', 'country_code' => 'PT'],\n            ['name' => 'Gyoda', 'country_code' => 'JP'],\n            ['name' => 'Buckeye', 'country_code' => 'US'],\n            ['name' => 'Georgetown', 'country_code' => 'US'],\n            ['name' => 'Hanno', 'country_code' => 'JP'],\n            ['name' => 'Nagua', 'country_code' => 'DO'],\n            ['name' => 'Pingyi', 'country_code' => 'CN'],\n            ['name' => 'Yenakiieve', 'country_code' => 'UA'],\n            ['name' => 'Matalam', 'country_code' => 'PH'],\n            ['name' => 'Iwamizawa', 'country_code' => 'JP'],\n            ['name' => 'Kadoma', 'country_code' => 'ZW'],\n            ['name' => 'Tanuku', 'country_code' => 'IN'],\n            ['name' => 'Cedar Park', 'country_code' => 'US'],\n            ['name' => 'Klin', 'country_code' => 'RU'],\n            ['name' => 'Ozersk', 'country_code' => 'RU'],\n            ['name' => 'Villa Maria', 'country_code' => 'AR'],\n            ['name' => 'The Villages', 'country_code' => 'US'],\n            ['name' => 'Kokomo', 'country_code' => 'US'],\n            ['name' => 'Perris', 'country_code' => 'US'],\n            ['name' => 'Echague', 'country_code' => 'PH'],\n            ['name' => 'Huaral', 'country_code' => 'PE'],\n            ['name' => 'St. Joseph', 'country_code' => 'US'],\n            ['name' => 'Agua Prieta', 'country_code' => 'MX'],\n            ['name' => 'Pato Branco', 'country_code' => 'BR'],\n            ['name' => 'Mooka', 'country_code' => 'JP'],\n            ['name' => 'Flower Mound', 'country_code' => 'US'],\n            ['name' => 'Pharr', 'country_code' => 'US'],\n            ['name' => 'Sahuayo de Morelos', 'country_code' => 'MX'],\n            ['name' => 'Francisco Beltrao', 'country_code' => 'BR'],\n            ['name' => 'Maizuru', 'country_code' => 'JP'],\n            ['name' => 'Alton', 'country_code' => 'US'],\n            ['name' => 'Mabinay', 'country_code' => 'PH'],\n            ['name' => 'Bamberg', 'country_code' => 'DE'],\n            ['name' => 'Hengbei', 'country_code' => 'CN'],\n            ['name' => 'Loveland', 'country_code' => 'US'],\n            ['name' => 'Bogo', 'country_code' => 'PH'],\n            ['name' => 'Subulussalam', 'country_code' => 'ID'],\n            ['name' => 'Delmenhorst', 'country_code' => 'DE'],\n            ['name' => 'Essaouira', 'country_code' => 'MA'],\n            ['name' => 'El Carmen de Bolivar', 'country_code' => 'CO'],\n            ['name' => 'Tierralta', 'country_code' => 'CO'],\n            ['name' => 'Rockhampton', 'country_code' => 'AU'],\n            ['name' => 'Aligudarz', 'country_code' => 'IR'],\n            ['name' => 'Dondo', 'country_code' => 'MZ'],\n            ['name' => 'Boynton Beach', 'country_code' => 'US'],\n            ['name' => 'La Dorada', 'country_code' => 'CO'],\n            ['name' => 'Tela', 'country_code' => 'HN'],\n            ['name' => 'Picos', 'country_code' => 'BR'],\n            ['name' => 'Anderson', 'country_code' => 'US'],\n            ['name' => 'Vyborg', 'country_code' => 'RU'],\n            ['name' => 'Manbij', 'country_code' => 'SY'],\n            ['name' => 'Dias d Avila', 'country_code' => 'BR'],\n            ['name' => 'Valdemoro', 'country_code' => 'ES'],\n            ['name' => 'Usol ye-Sibirskoye', 'country_code' => 'RU'],\n            ['name' => 'San Jose', 'country_code' => 'PH'],\n            ['name' => 'Jonesboro', 'country_code' => 'US'],\n            ['name' => 'Pattoki', 'country_code' => 'PK'],\n            ['name' => 'San Antonio', 'country_code' => 'PH'],\n            ['name' => 'Kropotkin', 'country_code' => 'RU'],\n            ['name' => 'Temoaya', 'country_code' => 'MX'],\n            ['name' => 'Maitland', 'country_code' => 'AU'],\n            ['name' => 'Arjona', 'country_code' => 'CO'],\n            ['name' => 'Chengbin', 'country_code' => 'CN'],\n            ['name' => 'Parma', 'country_code' => 'US'],\n            ['name' => 'Bor', 'country_code' => 'RU'],\n            ['name' => 'Bodhan', 'country_code' => 'IN'],\n            ['name' => 'Chinautla', 'country_code' => 'GT'],\n            ['name' => 'Layton', 'country_code' => 'US'],\n            ['name' => 'Balqash', 'country_code' => 'KZ'],\n            ['name' => 'Villa Victoria', 'country_code' => 'MX'],\n            ['name' => 'Elizabethtown', 'country_code' => 'US'],\n            ['name' => 'Beziers', 'country_code' => 'FR'],\n            ['name' => 'Texarkana', 'country_code' => 'US'],\n            ['name' => 'Linkou', 'country_code' => 'CN'],\n            ['name' => 'Siaton', 'country_code' => 'PH'],\n            ['name' => 'Aquiraz', 'country_code' => 'BR'],\n            ['name' => 'Villa Canales', 'country_code' => 'GT'],\n            ['name' => 'Roosendaal', 'country_code' => 'NL'],\n            ['name' => 'Numan', 'country_code' => 'NG'],\n            ['name' => 'Ciudad de Huajuapam de Leon', 'country_code' => 'MX'],\n            ['name' => 'Viersen', 'country_code' => 'DE'],\n            ['name' => 'Bebedouro', 'country_code' => 'BR'],\n            ['name' => 'Guildford', 'country_code' => 'GB'],\n            ['name' => 'Sint-Niklaas', 'country_code' => 'BE'],\n            ['name' => 'Karur', 'country_code' => 'IN'],\n            ['name' => 'Armant', 'country_code' => 'EG'],\n            ['name' => 'Alegrete', 'country_code' => 'BR'],\n            ['name' => 'Bakhmut', 'country_code' => 'UA'],\n            ['name' => 'Bulacan', 'country_code' => 'PH'],\n            ['name' => 'Marburg', 'country_code' => 'DE'],\n            ['name' => 'Buhi', 'country_code' => 'PH'],\n            ['name' => 'Soke', 'country_code' => 'TR'],\n            ['name' => 'Kankakee', 'country_code' => 'US'],\n            ['name' => 'Funing', 'country_code' => 'CN'],\n            ['name' => 'Poblacion', 'country_code' => 'PH'],\n            ['name' => 'Ende', 'country_code' => 'ID'],\n            ['name' => 'Porterville', 'country_code' => 'US'],\n            ['name' => 'Harunabad', 'country_code' => 'PK'],\n            ['name' => 'Gelendzhik', 'country_code' => 'RU'],\n            ['name' => 'Caninde', 'country_code' => 'BR'],\n            ['name' => 'Chernogorsk', 'country_code' => 'RU'],\n            ['name' => 'Balkh', 'country_code' => 'AF'],\n            ['name' => 'Baytown', 'country_code' => 'US'],\n            ['name' => 'Upland', 'country_code' => 'US'],\n            ['name' => 'Siedlce', 'country_code' => 'PL'],\n            ['name' => 'Nikko', 'country_code' => 'JP'],\n            ['name' => 'Gandia', 'country_code' => 'ES'],\n            ['name' => 'Malapatan', 'country_code' => 'PH'],\n            ['name' => 'Dongguan', 'country_code' => 'CN'],\n            ['name' => 'Ryugasaki', 'country_code' => 'JP'],\n            ['name' => 'Al Musayyib', 'country_code' => 'IQ'],\n            ['name' => 'Pyapon', 'country_code' => 'MM'],\n            ['name' => 'Caserta', 'country_code' => 'IT'],\n            ['name' => 'Mafra', 'country_code' => 'PT'],\n            ['name' => 'Camarillo', 'country_code' => 'US'],\n            ['name' => 'Sarqan', 'country_code' => 'KZ'],\n            ['name' => 'Dschang', 'country_code' => 'CM'],\n            ['name' => 'Kahror Pakka', 'country_code' => 'PK'],\n            ['name' => 'Ait Ali', 'country_code' => 'MA'],\n            ['name' => 'Tuban', 'country_code' => 'ID'],\n            ['name' => 'Balashov', 'country_code' => 'RU'],\n            ['name' => 'Wilhelmshaven', 'country_code' => 'DE'],\n            ['name' => 'Shostka', 'country_code' => 'UA'],\n            ['name' => 'Asti', 'country_code' => 'IT'],\n            ['name' => 'Jablah', 'country_code' => 'SY'],\n            ['name' => 'E erguna', 'country_code' => 'CN'],\n            ['name' => 'Rheine', 'country_code' => 'DE'],\n            ['name' => 'Turbaco', 'country_code' => 'CO'],\n            ['name' => 'Fouchana', 'country_code' => 'TN'],\n            ['name' => 'Fancheng', 'country_code' => 'CN'],\n            ['name' => 'South Jordan', 'country_code' => 'US'],\n            ['name' => 'Palma Soriano', 'country_code' => 'CU'],\n            ['name' => 'Macabebe', 'country_code' => 'PH'],\n            ['name' => 'Stakhanov', 'country_code' => 'UA'],\n            ['name' => 'Bais', 'country_code' => 'PH'],\n            ['name' => 'Battle Creek', 'country_code' => 'US'],\n            ['name' => 'Ibiuna', 'country_code' => 'BR'],\n            ['name' => 'Jose Abad Santos', 'country_code' => 'PH'],\n            ['name' => 'Venado Tuerto', 'country_code' => 'AR'],\n            ['name' => 'Sangolqui', 'country_code' => 'EC'],\n            ['name' => 'Anzhero-Sudzhensk', 'country_code' => 'RU'],\n            ['name' => 'Kapalong', 'country_code' => 'PH'],\n            ['name' => 'Santo Angelo', 'country_code' => 'BR'],\n            ['name' => 'Houmt Souk', 'country_code' => 'TN'],\n            ['name' => 'Livingston', 'country_code' => 'GT'],\n            ['name' => 'Myslowice', 'country_code' => 'PL'],\n            ['name' => 'Daisen', 'country_code' => 'JP'],\n            ['name' => 'Berdychiv', 'country_code' => 'UA'],\n            ['name' => 'Itapetinga', 'country_code' => 'BR'],\n            ['name' => 'Lins', 'country_code' => 'BR'],\n            ['name' => 'San Marcos', 'country_code' => 'US'],\n            ['name' => 'Espinal', 'country_code' => 'CO'],\n            ['name' => 'Lod', 'country_code' => 'IL'],\n            ['name' => 'Troisdorf', 'country_code' => 'DE'],\n            ['name' => 'Fukuchiyama', 'country_code' => 'JP'],\n            ['name' => 'Bauang', 'country_code' => 'PH'],\n            ['name' => 'Piotrkow Trybunalski', 'country_code' => 'PL'],\n            ['name' => 'Tailai', 'country_code' => 'CN'],\n            ['name' => 'San Ramon', 'country_code' => 'US'],\n            ['name' => 'Toba Tek Singh', 'country_code' => 'PK'],\n            ['name' => 'Jabuticabal', 'country_code' => 'BR'],\n            ['name' => 'Santa Catalina', 'country_code' => 'PH'],\n            ['name' => 'Rio Largo', 'country_code' => 'BR'],\n            ['name' => 'Ovalle', 'country_code' => 'CL'],\n            ['name' => 'Kengtung', 'country_code' => 'MM'],\n            ['name' => 'Xinglong', 'country_code' => 'CN'],\n            ['name' => 'Lake Jackson', 'country_code' => 'US'],\n            ['name' => 'Pototan', 'country_code' => 'PH'],\n            ['name' => 'Bethlehem', 'country_code' => 'US'],\n            ['name' => 'Alcala de Guadaira', 'country_code' => 'ES'],\n            ['name' => 'Shadrinsk', 'country_code' => 'RU'],\n            ['name' => 'Bayreuth', 'country_code' => 'DE'],\n            ['name' => 'Zhongcheng', 'country_code' => 'CN'],\n            ['name' => 'Puqiancun', 'country_code' => 'CN'],\n            ['name' => 'Wyoming', 'country_code' => 'US'],\n            ['name' => 'Dubna', 'country_code' => 'RU'],\n            ['name' => 'Nakatsugawa', 'country_code' => 'JP'],\n            ['name' => 'Batarasa', 'country_code' => 'PH'],\n            ['name' => 'Oshkosh', 'country_code' => 'US'],\n            ['name' => 'Sapiranga', 'country_code' => 'BR'],\n            ['name' => 'Bonab', 'country_code' => 'IR'],\n            ['name' => 'Hammond', 'country_code' => 'US'],\n            ['name' => 'Libon', 'country_code' => 'PH'],\n            ['name' => 'Tiznit', 'country_code' => 'MA'],\n            ['name' => 'Waldorf', 'country_code' => 'US'],\n            ['name' => 'Pagbilao', 'country_code' => 'PH'],\n            ['name' => 'Missouri City', 'country_code' => 'US'],\n            ['name' => 'Luneburg', 'country_code' => 'DE'],\n            ['name' => 'Pasco', 'country_code' => 'US'],\n            ['name' => 'Mangalagiri', 'country_code' => 'IN'],\n            ['name' => 'Kawartha Lakes', 'country_code' => 'CA'],\n            ['name' => 'Bombo', 'country_code' => 'UG'],\n            ['name' => 'Wheeling', 'country_code' => 'US'],\n            ['name' => 'Brick', 'country_code' => 'US'],\n            ['name' => 'Acacias', 'country_code' => 'CO'],\n            ['name' => 'Kendall', 'country_code' => 'US'],\n            ['name' => 'Itahari', 'country_code' => 'NP'],\n            ['name' => 'Concordia', 'country_code' => 'BR'],\n            ['name' => 'Robles', 'country_code' => 'PH'],\n            ['name' => 'Valle Alto', 'country_code' => 'MX'],\n            ['name' => 'Standerton', 'country_code' => 'ZA'],\n            ['name' => 'Taytay', 'country_code' => 'PH'],\n            ['name' => 'Tatebayashi', 'country_code' => 'JP'],\n            ['name' => 'Idah', 'country_code' => 'NG'],\n            ['name' => 'Dorsten', 'country_code' => 'DE'],\n            ['name' => 'Carmen', 'country_code' => 'PH'],\n            ['name' => 'Gela', 'country_code' => 'IT'],\n            ['name' => 'Di An', 'country_code' => 'VN'],\n            ['name' => 'Rancho Cordova', 'country_code' => 'US'],\n            ['name' => 'Arcoverde', 'country_code' => 'BR'],\n            ['name' => 'Gode', 'country_code' => 'ET'],\n            ['name' => 'Palma', 'country_code' => 'MZ'],\n            ['name' => 'Tongye', 'country_code' => 'CN'],\n            ['name' => 'Lamitan', 'country_code' => 'PH'],\n            ['name' => 'Conway', 'country_code' => 'US'],\n            ['name' => 'Wiwili', 'country_code' => 'NI'],\n            ['name' => 'Gary', 'country_code' => 'US'],\n            ['name' => 'Bunbury', 'country_code' => 'AU'],\n            ['name' => 'Pilar', 'country_code' => 'PH'],\n            ['name' => 'Castrop-Rauxel', 'country_code' => 'DE'],\n            ['name' => 'Altoona', 'country_code' => 'US'],\n            ['name' => 'Samundri', 'country_code' => 'PK'],\n            ['name' => 'Lodi', 'country_code' => 'US'],\n            ['name' => 'Arlington Heights', 'country_code' => 'US'],\n            ['name' => 'Darhan', 'country_code' => 'MN'],\n            ['name' => 'Nizhyn', 'country_code' => 'UA'],\n            ['name' => 'San Francisco', 'country_code' => 'PH'],\n            ['name' => 'Piracununga', 'country_code' => 'BR'],\n            ['name' => 'Burnley', 'country_code' => 'GB'],\n            ['name' => 'Copacabana', 'country_code' => 'CO'],\n            ['name' => 'San Juan Opico', 'country_code' => 'SV'],\n            ['name' => 'Grand-Bassam', 'country_code' => 'CI'],\n            ['name' => 'Bolingbrook', 'country_code' => 'US'],\n            ['name' => 'Rochester Hills', 'country_code' => 'US'],\n            ['name' => 'Barili', 'country_code' => 'PH'],\n            ['name' => 'Novoaltaysk', 'country_code' => 'RU'],\n            ['name' => 'Winchester', 'country_code' => 'US'],\n            ['name' => 'Framingham', 'country_code' => 'US'],\n            ['name' => 'Detmold', 'country_code' => 'DE'],\n            ['name' => 'Palmeira dos Indios', 'country_code' => 'BR'],\n            ['name' => 'Tatsunocho-tominaga', 'country_code' => 'JP'],\n            ['name' => 'Gumaca', 'country_code' => 'PH'],\n            ['name' => 'Cinar', 'country_code' => 'TR'],\n            ['name' => 'Mineral nyye Vody', 'country_code' => 'RU'],\n            ['name' => 'Kara-Balta', 'country_code' => 'KG'],\n            ['name' => 'Hilton Head Island', 'country_code' => 'US'],\n            ['name' => 'Sundsvall', 'country_code' => 'SE'],\n            ['name' => 'Union City', 'country_code' => 'US'],\n            ['name' => 'Ouro Preto', 'country_code' => 'BR'],\n            ['name' => 'Yelabuga', 'country_code' => 'RU'],\n            ['name' => 'San Ramon de la Nueva Oran', 'country_code' => 'AR'],\n            ['name' => 'Troitsk', 'country_code' => 'RU'],\n            ['name' => 'Konin', 'country_code' => 'PL'],\n            ['name' => 'Owensboro', 'country_code' => 'US'],\n            ['name' => 'Jackson', 'country_code' => 'US'],\n            ['name' => 'San Martin', 'country_code' => 'SV'],\n            ['name' => 'Kairana', 'country_code' => 'IN'],\n            ['name' => 'Jaen', 'country_code' => 'PH'],\n            ['name' => 'Majadahonda', 'country_code' => 'ES'],\n            ['name' => 'Riberalta', 'country_code' => 'BO'],\n            ['name' => 'Oriximina', 'country_code' => 'BR'],\n            ['name' => 'Arnsberg', 'country_code' => 'DE'],\n            ['name' => 'Prince George', 'country_code' => 'CA'],\n            ['name' => 'Kostiantynivka', 'country_code' => 'UA'],\n            ['name' => 'Ceara-Mirim', 'country_code' => 'BR'],\n            ['name' => 'Ixmiquilpan', 'country_code' => 'MX'],\n            ['name' => 'Ubay', 'country_code' => 'PH'],\n            ['name' => 'Pavia', 'country_code' => 'IT'],\n            ['name' => 'Yurihonjo', 'country_code' => 'JP'],\n            ['name' => 'Yegoryevsk', 'country_code' => 'RU'],\n            ['name' => 'Kasama', 'country_code' => 'JP'],\n            ['name' => 'Lambunao', 'country_code' => 'PH'],\n            ['name' => 'Bawku', 'country_code' => 'GH'],\n            ['name' => 'Ragusa', 'country_code' => 'IT'],\n            ['name' => 'Chaigoubu', 'country_code' => 'CN'],\n            ['name' => 'Tagoloan', 'country_code' => 'PH'],\n            ['name' => 'Siuna', 'country_code' => 'NI'],\n            ['name' => 'Takestan', 'country_code' => 'IR'],\n            ['name' => 'Linares', 'country_code' => 'CL'],\n            ['name' => 'Shrewsbury', 'country_code' => 'GB'],\n            ['name' => 'Cleveland', 'country_code' => 'US'],\n            ['name' => 'Wausau', 'country_code' => 'US'],\n            ['name' => 'Quillota', 'country_code' => 'CL'],\n            ['name' => 'Ostrowiec Swietokrzyski', 'country_code' => 'PL'],\n            ['name' => 'El Hamma', 'country_code' => 'TN'],\n            ['name' => 'Umingan', 'country_code' => 'PH'],\n            ['name' => 'Molina de Segura', 'country_code' => 'ES'],\n            ['name' => 'Anniston', 'country_code' => 'US'],\n            ['name' => 'Lanxi', 'country_code' => 'CN'],\n            ['name' => 'Brakpan', 'country_code' => 'ZA'],\n            ['name' => 'Zhuolu', 'country_code' => 'CN'],\n            ['name' => 'Mangatarem', 'country_code' => 'PH'],\n            ['name' => 'Kirovo-Chepetsk', 'country_code' => 'RU'],\n            ['name' => 'Apple Valley', 'country_code' => 'US'],\n            ['name' => 'Ludenscheid', 'country_code' => 'DE'],\n            ['name' => 'Vinhedo', 'country_code' => 'BR'],\n            ['name' => 'Landshut', 'country_code' => 'DE'],\n            ['name' => 'San Juan Chamelco', 'country_code' => 'GT'],\n            ['name' => 'Shibukawa', 'country_code' => 'JP'],\n            ['name' => 'Sault Ste. Marie', 'country_code' => 'CA'],\n            ['name' => 'Calauag', 'country_code' => 'PH'],\n            ['name' => 'Nepalganj', 'country_code' => 'NP'],\n            ['name' => 'Mansfield', 'country_code' => 'US'],\n            ['name' => 'Narra', 'country_code' => 'PH'],\n            ['name' => 'Tatvan', 'country_code' => 'TR'],\n            ['name' => 'Cuamba', 'country_code' => 'MZ'],\n            ['name' => 'Farroupilha', 'country_code' => 'BR'],\n            ['name' => 'Tokar', 'country_code' => 'SD'],\n            ['name' => 'Shakargarh', 'country_code' => 'PK'],\n            ['name' => 'Tan-Tan', 'country_code' => 'MA'],\n            ['name' => 'Wenping', 'country_code' => 'CN'],\n            ['name' => 'Chapayevsk', 'country_code' => 'RU'],\n            ['name' => 'Santa Rosa de Cabal', 'country_code' => 'CO'],\n            ['name' => 'Moa', 'country_code' => 'CU'],\n            ['name' => 'Otawara', 'country_code' => 'JP'],\n            ['name' => 'Cremona', 'country_code' => 'IT'],\n            ['name' => 'Itapira', 'country_code' => 'BR'],\n            ['name' => 'Baghlan', 'country_code' => 'AF'],\n            ['name' => 'Kalamata', 'country_code' => 'GR'],\n            ['name' => 'Sambrial', 'country_code' => 'PK'],\n            ['name' => 'Vsevolozhsk', 'country_code' => 'RU'],\n            ['name' => 'Montepuez', 'country_code' => 'MZ'],\n            ['name' => 'San Vicente del Caguan', 'country_code' => 'CO'],\n            ['name' => 'Keshan', 'country_code' => 'CN'],\n            ['name' => 'Belovo', 'country_code' => 'RU'],\n            ['name' => 'Schaumburg', 'country_code' => 'US'],\n            ['name' => 'Xiangjiaba', 'country_code' => 'CN'],\n            ['name' => 'Pocatello', 'country_code' => 'US'],\n            ['name' => 'Pacatuba', 'country_code' => 'BR'],\n            ['name' => 'Crateus', 'country_code' => 'BR'],\n            ['name' => 'Woodbury', 'country_code' => 'US'],\n            ['name' => 'Ede', 'country_code' => 'NL'],\n            ['name' => 'Aracati', 'country_code' => 'BR'],\n            ['name' => 'Argao', 'country_code' => 'PH'],\n            ['name' => 'Sotik', 'country_code' => 'KE'],\n            ['name' => 'Southfield', 'country_code' => 'US'],\n            ['name' => 'Yafran', 'country_code' => 'LY'],\n            ['name' => 'Ellicott City', 'country_code' => 'US'],\n            ['name' => 'Paterna', 'country_code' => 'ES'],\n            ['name' => 'Dale City', 'country_code' => 'US'],\n            ['name' => 'Maple Grove', 'country_code' => 'US'],\n            ['name' => 'Penafiel', 'country_code' => 'PT'],\n            ['name' => 'Pittsburg', 'country_code' => 'US'],\n            ['name' => 'Concepcion del Uruguay', 'country_code' => 'AR'],\n            ['name' => 'Belo Jardim', 'country_code' => 'BR'],\n            ['name' => 'Morgantown', 'country_code' => 'US'],\n            ['name' => 'Brandenburg', 'country_code' => 'DE'],\n            ['name' => 'Mansfield', 'country_code' => 'US'],\n            ['name' => 'Hammond', 'country_code' => 'US'],\n            ['name' => 'Dothan', 'country_code' => 'US'],\n            ['name' => 'Harrisonburg', 'country_code' => 'US'],\n            ['name' => 'Wenatchee', 'country_code' => 'US'],\n            ['name' => 'Goya', 'country_code' => 'AR'],\n            ['name' => 'Waukesha', 'country_code' => 'US'],\n            ['name' => 'Rio do Sul', 'country_code' => 'BR'],\n            ['name' => 'Benidorm', 'country_code' => 'ES'],\n            ['name' => 'Tagaytay', 'country_code' => 'PH'],\n            ['name' => 'Bongabong', 'country_code' => 'PH'],\n            ['name' => 'Ishioka', 'country_code' => 'JP'],\n            ['name' => 'Casa Nova', 'country_code' => 'BR'],\n            ['name' => 'Colon', 'country_code' => 'CU'],\n            ['name' => 'Tibati', 'country_code' => 'CM'],\n            ['name' => 'Alicia', 'country_code' => 'PH'],\n            ['name' => 'Coffs Harbour', 'country_code' => 'AU'],\n            ['name' => 'Santa Isabel do Para', 'country_code' => 'BR'],\n            ['name' => 'Redmond', 'country_code' => 'US'],\n            ['name' => 'Kawm Umbu', 'country_code' => 'EG'],\n            ['name' => 'Bouafle', 'country_code' => 'CI'],\n            ['name' => 'Talakag', 'country_code' => 'PH'],\n            ['name' => 'Florida', 'country_code' => 'CU'],\n            ['name' => 'Izmail', 'country_code' => 'UA'],\n            ['name' => 'Bocholt', 'country_code' => 'DE'],\n            ['name' => 'Carpi', 'country_code' => 'IT'],\n            ['name' => 'Aschaffenburg', 'country_code' => 'DE'],\n            ['name' => 'Lisburn', 'country_code' => 'GB'],\n            ['name' => 'Quartu Sant Elena', 'country_code' => 'IT'],\n            ['name' => 'Sarnia', 'country_code' => 'CA'],\n            ['name' => 'Keighley', 'country_code' => 'GB'],\n            ['name' => 'Wood Buffalo', 'country_code' => 'CA'],\n            ['name' => 'Merignac', 'country_code' => 'FR'],\n            ['name' => 'Sumter', 'country_code' => 'US'],\n            ['name' => 'Redlands', 'country_code' => 'US'],\n            ['name' => 'Bapatla', 'country_code' => 'IN'],\n            ['name' => 'Saint-Nazaire', 'country_code' => 'FR'],\n            ['name' => 'Daphne', 'country_code' => 'US'],\n            ['name' => 'Markapur', 'country_code' => 'IN'],\n            ['name' => 'Mount Vernon', 'country_code' => 'US'],\n            ['name' => 'Villa Tunari', 'country_code' => 'BO'],\n            ['name' => 'Shujaabad', 'country_code' => 'PK'],\n            ['name' => 'Catanauan', 'country_code' => 'PH'],\n            ['name' => 'Malaut', 'country_code' => 'IN'],\n            ['name' => 'Verkhnyaya Pyshma', 'country_code' => 'RU'],\n            ['name' => 'Placetas', 'country_code' => 'CU'],\n            ['name' => 'Gibara', 'country_code' => 'CU'],\n            ['name' => 'Yinying', 'country_code' => 'CN'],\n            ['name' => 'Cabudare', 'country_code' => 'VE'],\n            ['name' => 'Entebbe', 'country_code' => 'UG'],\n            ['name' => 'Baiquan', 'country_code' => 'CN'],\n            ['name' => 'Weston', 'country_code' => 'US'],\n            ['name' => 'Bundaberg', 'country_code' => 'AU'],\n            ['name' => 'Corozal', 'country_code' => 'CO'],\n            ['name' => 'Indaial', 'country_code' => 'BR'],\n            ['name' => 'St. Charles', 'country_code' => 'US'],\n            ['name' => 'Djemmal', 'country_code' => 'TN'],\n            ['name' => 'Pan an', 'country_code' => 'CN'],\n            ['name' => 'Gaspar', 'country_code' => 'BR'],\n            ['name' => 'Cherry Hill', 'country_code' => 'US'],\n            ['name' => 'Ritto', 'country_code' => 'JP'],\n            ['name' => 'Badvel', 'country_code' => 'IN'],\n            ['name' => 'Hujra Shah Muqim', 'country_code' => 'PK'],\n            ['name' => 'Chateauguay', 'country_code' => 'CA'],\n            ['name' => 'Novomoskovsk', 'country_code' => 'UA'],\n            ['name' => 'Kladno', 'country_code' => 'CZ'],\n            ['name' => 'Zenica', 'country_code' => 'BA'],\n            ['name' => 'Janesville', 'country_code' => 'US'],\n            ['name' => 'Kabirwala', 'country_code' => 'PK'],\n            ['name' => 'Manaoag', 'country_code' => 'PH'],\n            ['name' => 'Loule', 'country_code' => 'PT'],\n            ['name' => 'Sherman', 'country_code' => 'US'],\n            ['name' => 'Altamura', 'country_code' => 'IT'],\n            ['name' => 'North Richland Hills', 'country_code' => 'US'],\n            ['name' => 'Chekhov', 'country_code' => 'RU'],\n            ['name' => 'Campo Bom', 'country_code' => 'BR'],\n            ['name' => 'Reconquista', 'country_code' => 'AR'],\n            ['name' => 'Bur Fu ad', 'country_code' => 'EG'],\n            ['name' => 'Sao Sebastiao do Paraiso', 'country_code' => 'BR'],\n            ['name' => 'Kovel', 'country_code' => 'UA'],\n            ['name' => 'Broomfield', 'country_code' => 'US'],\n            ['name' => 'Guzhou', 'country_code' => 'CN'],\n            ['name' => 'Zhanggu', 'country_code' => 'CN'],\n            ['name' => 'Rongcheng', 'country_code' => 'CN'],\n            ['name' => 'Tupi', 'country_code' => 'PH'],\n            ['name' => 'Imola', 'country_code' => 'IT'],\n            ['name' => 'Smila', 'country_code' => 'UA'],\n            ['name' => 'Sipalay', 'country_code' => 'PH'],\n            ['name' => 'El Paso de Robles', 'country_code' => 'US'],\n            ['name' => 'Bristol', 'country_code' => 'US'],\n            ['name' => 'Rosetta', 'country_code' => 'EG'],\n            ['name' => 'Casas Adobes', 'country_code' => 'US'],\n            ['name' => 'Walnut Creek', 'country_code' => 'US'],\n            ['name' => 'Hato Mayor', 'country_code' => 'DO'],\n            ['name' => 'Villa del Rosario', 'country_code' => 'CO'],\n            ['name' => 'Sosua', 'country_code' => 'DO'],\n            ['name' => 'Colmar', 'country_code' => 'FR'],\n            ['name' => 'Phu Quoc', 'country_code' => 'VN'],\n            ['name' => 'Baras', 'country_code' => 'PH'],\n            ['name' => 'Qo ng irot Shahri', 'country_code' => 'UZ'],\n            ['name' => 'Az Zubaydiyah', 'country_code' => 'IQ'],\n            ['name' => 'Oshnaviyeh', 'country_code' => 'IR'],\n            ['name' => 'Jorhat', 'country_code' => 'IN'],\n            ['name' => 'Pozorrubio', 'country_code' => 'PH'],\n            ['name' => 'Saldanha', 'country_code' => 'ZA'],\n            ['name' => 'Fanzhuang', 'country_code' => 'CN'],\n            ['name' => 'Shangchuankou', 'country_code' => 'CN'],\n            ['name' => 'Celle', 'country_code' => 'DE'],\n            ['name' => 'Kempten', 'country_code' => 'DE'],\n            ['name' => 'Isna', 'country_code' => 'EG'],\n            ['name' => 'Qingquan', 'country_code' => 'CN'],\n            ['name' => 'Jarabacoa', 'country_code' => 'DO'],\n            ['name' => 'Hasselt', 'country_code' => 'BE'],\n            ['name' => 'Poinciana', 'country_code' => 'US'],\n            ['name' => 'Garzon', 'country_code' => 'CO'],\n            ['name' => 'Santa Rosa', 'country_code' => 'PH'],\n            ['name' => 'Russas', 'country_code' => 'BR'],\n            ['name' => 'Glen Burnie', 'country_code' => 'US'],\n            ['name' => 'Bula', 'country_code' => 'PH'],\n            ['name' => 'San Juan de los Lagos', 'country_code' => 'MX'],\n            ['name' => 'Solok', 'country_code' => 'ID'],\n            ['name' => 'Uwajima', 'country_code' => 'JP'],\n            ['name' => 'Massa', 'country_code' => 'IT'],\n            ['name' => 'Mansehra', 'country_code' => 'PK'],\n            ['name' => 'Suwalki', 'country_code' => 'PL'],\n            ['name' => 'Bamban', 'country_code' => 'PH'],\n            ['name' => 'Villanueva y Geltru', 'country_code' => 'ES'],\n            ['name' => 'Lehi', 'country_code' => 'US'],\n            ['name' => 'Yitiaoshan', 'country_code' => 'CN'],\n            ['name' => 'Estancia', 'country_code' => 'BR'],\n            ['name' => 'Dumangas', 'country_code' => 'PH'],\n            ['name' => 'Paragominas', 'country_code' => 'BR'],\n            ['name' => 'Sanlucar de Barrameda', 'country_code' => 'ES'],\n            ['name' => 'Gniezno', 'country_code' => 'PL'],\n            ['name' => 'Saint-Jerome', 'country_code' => 'CA'],\n            ['name' => 'Bom Jesus da Lapa', 'country_code' => 'BR'],\n            ['name' => 'Homestead', 'country_code' => 'US'],\n            ['name' => 'West Bend', 'country_code' => 'US'],\n            ['name' => 'Escada', 'country_code' => 'BR'],\n            ['name' => 'Bacacay', 'country_code' => 'PH'],\n            ['name' => 'Delray Beach', 'country_code' => 'US'],\n            ['name' => 'Ongjang', 'country_code' => 'KP'],\n            ['name' => 'Sheboygan', 'country_code' => 'US'],\n            ['name' => 'Chisec', 'country_code' => 'GT'],\n            ['name' => 'Aqsu', 'country_code' => 'KZ'],\n            ['name' => 'Planeta Rica', 'country_code' => 'CO'],\n            ['name' => 'Nova Kakhovka', 'country_code' => 'UA'],\n            ['name' => 'Korba', 'country_code' => 'TN'],\n            ['name' => 'Bafia', 'country_code' => 'CM'],\n            ['name' => 'Ko Samui', 'country_code' => 'TH'],\n            ['name' => 'Lake Elsinore', 'country_code' => 'US'],\n            ['name' => 'Infanta', 'country_code' => 'PH'],\n            ['name' => 'Liuhe', 'country_code' => 'CN'],\n            ['name' => 'Fulda', 'country_code' => 'DE'],\n            ['name' => 'Kamsar', 'country_code' => 'GN'],\n            ['name' => 'Huishi', 'country_code' => 'CN'],\n            ['name' => 'Daytona Beach', 'country_code' => 'US'],\n            ['name' => 'Necocli', 'country_code' => 'CO'],\n            ['name' => 'Yanghe', 'country_code' => 'CN'],\n            ['name' => 'Minusinsk', 'country_code' => 'RU'],\n            ['name' => 'Mocuba', 'country_code' => 'MZ'],\n            ['name' => 'Ararangua', 'country_code' => 'BR'],\n            ['name' => 'Cosenza', 'country_code' => 'IT'],\n            ['name' => 'Purisima de Bustos', 'country_code' => 'MX'],\n            ['name' => 'Los Lunas', 'country_code' => 'US'],\n            ['name' => 'Mocuba', 'country_code' => 'MZ'],\n            ['name' => 'Sosnovyy Bor', 'country_code' => 'RU'],\n            ['name' => 'Dinslaken', 'country_code' => 'DE'],\n            ['name' => 'Chulucanas', 'country_code' => 'PE'],\n            ['name' => 'Aalen', 'country_code' => 'DE'],\n            ['name' => 'Say un', 'country_code' => 'YE'],\n            ['name' => 'Sousa', 'country_code' => 'BR'],\n            ['name' => 'Al Ahmadi', 'country_code' => 'KW'],\n            ['name' => 'Glogow', 'country_code' => 'PL'],\n            ['name' => 'Wum', 'country_code' => 'CM'],\n            ['name' => 'Lima', 'country_code' => 'US'],\n            ['name' => 'Mococa', 'country_code' => 'BR'],\n            ['name' => 'Decatur', 'country_code' => 'US'],\n            ['name' => 'Rocklin', 'country_code' => 'US'],\n            ['name' => 'Carles', 'country_code' => 'PH'],\n            ['name' => 'Kati', 'country_code' => 'ML'],\n            ['name' => 'Limay', 'country_code' => 'PH'],\n            ['name' => 'Rogers', 'country_code' => 'US'],\n            ['name' => 'Zapotlanejo', 'country_code' => 'MX'],\n            ['name' => 'Doboj', 'country_code' => 'BA'],\n            ['name' => 'Hihya', 'country_code' => 'EG'],\n            ['name' => 'Drummondville', 'country_code' => 'CA'],\n            ['name' => 'Stafford', 'country_code' => 'GB'],\n            ['name' => 'Lippstadt', 'country_code' => 'DE'],\n            ['name' => 'Castle Rock', 'country_code' => 'US'],\n            ['name' => 'Otukpo', 'country_code' => 'NG'],\n            ['name' => 'Matruh', 'country_code' => 'EG'],\n            ['name' => 'Ash Shihr', 'country_code' => 'YE'],\n            ['name' => 'Chengjiao Chengguanzhen', 'country_code' => 'CN'],\n            ['name' => 'Tuymazy', 'country_code' => 'RU'],\n            ['name' => 'Turkmenbasy', 'country_code' => 'TM'],\n            ['name' => 'Lodja', 'country_code' => 'CD'],\n            ['name' => 'Fernandopolis', 'country_code' => 'BR'],\n            ['name' => 'Lala Musa', 'country_code' => 'PK'],\n            ['name' => 'Oas', 'country_code' => 'PH'],\n            ['name' => 'Lala', 'country_code' => 'PH'],\n            ['name' => 'Conceicao do Coite', 'country_code' => 'BR'],\n            ['name' => 'Xinhua', 'country_code' => 'CN'],\n            ['name' => 'Hanover', 'country_code' => 'US'],\n            ['name' => 'Bossier City', 'country_code' => 'US'],\n            ['name' => 'Dubuque', 'country_code' => 'US'],\n            ['name' => 'Przemysl', 'country_code' => 'PL'],\n            ['name' => 'Rockville', 'country_code' => 'US'],\n            ['name' => 'Victoria', 'country_code' => 'US'],\n            ['name' => 'Siasi', 'country_code' => 'PH'],\n            ['name' => 'Saratoga Springs', 'country_code' => 'US'],\n            ['name' => 'Wanzhuang', 'country_code' => 'CN'],\n            ['name' => 'Erd', 'country_code' => 'HU'],\n            ['name' => 'Miagao', 'country_code' => 'PH'],\n            ['name' => 'Kstovo', 'country_code' => 'RU'],\n            ['name' => 'Viterbo', 'country_code' => 'IT'],\n            ['name' => 'Orani', 'country_code' => 'PH'],\n            ['name' => 'Dalaguete', 'country_code' => 'PH'],\n            ['name' => 'Trapani', 'country_code' => 'IT'],\n            ['name' => 'Tepotzotlan', 'country_code' => 'MX'],\n            ['name' => 'Tzaneen', 'country_code' => 'ZA'],\n            ['name' => 'Ames', 'country_code' => 'US'],\n            ['name' => 'Zanhuang', 'country_code' => 'CN'],\n            ['name' => 'West Des Moines', 'country_code' => 'US'],\n            ['name' => 'Comonfort', 'country_code' => 'MX'],\n            ['name' => 'Tumauini', 'country_code' => 'PH'],\n            ['name' => 'Ban Suan', 'country_code' => 'TH'],\n            ['name' => 'Tinambac', 'country_code' => 'PH'],\n            ['name' => 'Islahiye', 'country_code' => 'TR'],\n            ['name' => 'Embu-Guacu', 'country_code' => 'BR'],\n            ['name' => 'Bugallon', 'country_code' => 'PH'],\n            ['name' => 'Sagunto', 'country_code' => 'ES'],\n            ['name' => 'Yuquan', 'country_code' => 'CN'],\n            ['name' => 'Yorba Linda', 'country_code' => 'US'],\n            ['name' => 'Kashima', 'country_code' => 'JP'],\n            ['name' => 'Santa Catarina Otzolotepec', 'country_code' => 'MX'],\n            ['name' => 'Bergen op Zoom', 'country_code' => 'NL'],\n            ['name' => 'Binalbagan', 'country_code' => 'PH'],\n            ['name' => 'Manaure', 'country_code' => 'CO'],\n            ['name' => 'Casper', 'country_code' => 'US'],\n            ['name' => 'Saint John', 'country_code' => 'CA'],\n            ['name' => 'Lushar', 'country_code' => 'CN'],\n            ['name' => 'Hashima', 'country_code' => 'JP'],\n            ['name' => 'Soio', 'country_code' => 'AO'],\n            ['name' => 'Balingasag', 'country_code' => 'PH'],\n            ['name' => 'Palatine', 'country_code' => 'US'],\n            ['name' => 'Corvallis', 'country_code' => 'US'],\n            ['name' => 'Herford', 'country_code' => 'DE'],\n            ['name' => 'Talibon', 'country_code' => 'PH'],\n            ['name' => 'Camalig', 'country_code' => 'PH'],\n            ['name' => 'Oktyabrskiy', 'country_code' => 'RU'],\n            ['name' => 'Ankeny', 'country_code' => 'US'],\n            ['name' => 'Koratla', 'country_code' => 'IN'],\n            ['name' => 'Sa ada', 'country_code' => 'MA'],\n            ['name' => 'Weiyuan', 'country_code' => 'CN'],\n            ['name' => 'San Pedro Sacatepequez', 'country_code' => 'GT'],\n            ['name' => 'Rowlett', 'country_code' => 'US'],\n            ['name' => 'Kissidougou', 'country_code' => 'GN'],\n            ['name' => 'Guangping', 'country_code' => 'CN'],\n            ['name' => 'Lakeville', 'country_code' => 'US'],\n            ['name' => 'Yachimata', 'country_code' => 'JP'],\n            ['name' => 'Caico', 'country_code' => 'BR'],\n            ['name' => 'Tejen', 'country_code' => 'TM'],\n            ['name' => 'Pelileo', 'country_code' => 'EC'],\n            ['name' => 'Cawayan', 'country_code' => 'PH'],\n            ['name' => 'Don Carlos', 'country_code' => 'PH'],\n            ['name' => 'Cosmopolis', 'country_code' => 'BR'],\n            ['name' => 'San Fernando', 'country_code' => 'PH'],\n            ['name' => 'Moita', 'country_code' => 'PT'],\n            ['name' => 'Alpharetta', 'country_code' => 'US'],\n            ['name' => 'Rio Negro', 'country_code' => 'BR'],\n            ['name' => 'Bagumbayan', 'country_code' => 'PH'],\n            ['name' => 'Aflao', 'country_code' => 'GH'],\n            ['name' => 'Longview', 'country_code' => 'US'],\n            ['name' => 'Vidnoye', 'country_code' => 'RU'],\n            ['name' => 'Guines', 'country_code' => 'CU'],\n            ['name' => 'Pigcawayan', 'country_code' => 'PH'],\n            ['name' => 'DeKalb', 'country_code' => 'US'],\n            ['name' => 'Pabianice', 'country_code' => 'PL'],\n            ['name' => 'Petaluma', 'country_code' => 'US'],\n            ['name' => 'Pulivendla', 'country_code' => 'IN'],\n            ['name' => 'Kerpen', 'country_code' => 'DE'],\n            ['name' => 'Hit', 'country_code' => 'IQ'],\n            ['name' => 'San Pascual', 'country_code' => 'PH'],\n            ['name' => 'Las Heras', 'country_code' => 'AR'],\n            ['name' => 'Belogorsk', 'country_code' => 'RU'],\n            ['name' => 'Saiki', 'country_code' => 'JP'],\n            ['name' => 'Huinan', 'country_code' => 'CN'],\n            ['name' => 'Russelsheim', 'country_code' => 'DE'],\n            ['name' => 'Pinamungahan', 'country_code' => 'PH'],\n            ['name' => 'Ishim', 'country_code' => 'RU'],\n            ['name' => 'Caledon', 'country_code' => 'CA'],\n            ['name' => 'Gukovo', 'country_code' => 'RU'],\n            ['name' => 'Indang', 'country_code' => 'PH'],\n            ['name' => 'P yongsan', 'country_code' => 'KP'],\n            ['name' => 'Urla', 'country_code' => 'TR'],\n            ['name' => 'Brookes Point', 'country_code' => 'PH'],\n            ['name' => 'Kalush', 'country_code' => 'UA'],\n            ['name' => 'Stupino', 'country_code' => 'RU'],\n            ['name' => 'Huquan', 'country_code' => 'CN'],\n            ['name' => 'Laguna Niguel', 'country_code' => 'US'],\n            ['name' => 'Eagan', 'country_code' => 'US'],\n            ['name' => 'Ferrol', 'country_code' => 'ES'],\n            ['name' => 'Slavyansk-na-Kubani', 'country_code' => 'RU'],\n            ['name' => 'Ilo', 'country_code' => 'PE'],\n            ['name' => 'Kenner', 'country_code' => 'US'],\n            ['name' => 'Itaberaba', 'country_code' => 'BR'],\n            ['name' => 'Esperanza', 'country_code' => 'PH'],\n            ['name' => 'Hermosa', 'country_code' => 'PH'],\n            ['name' => 'Kungur', 'country_code' => 'RU'],\n            ['name' => 'Lencois Paulista', 'country_code' => 'BR'],\n            ['name' => 'Sodo', 'country_code' => 'ET'],\n            ['name' => 'Obera', 'country_code' => 'AR'],\n            ['name' => 'Uniao dos Palmares', 'country_code' => 'BR'],\n            ['name' => 'Sindelfingen', 'country_code' => 'DE'],\n            ['name' => 'Bay City', 'country_code' => 'US'],\n            ['name' => 'Most', 'country_code' => 'CZ'],\n            ['name' => 'Seraing', 'country_code' => 'BE'],\n            ['name' => 'Venancio Aires', 'country_code' => 'BR'],\n            ['name' => 'San Francisco El Alto', 'country_code' => 'GT'],\n            ['name' => 'Xibang', 'country_code' => 'CN'],\n            ['name' => 'Lahat', 'country_code' => 'ID'],\n            ['name' => 'Armur', 'country_code' => 'IN'],\n            ['name' => 'Menzel Temime', 'country_code' => 'TN'],\n            ['name' => 'North Little Rock', 'country_code' => 'US'],\n            ['name' => 'Sammamish', 'country_code' => 'US'],\n            ['name' => 'Martil', 'country_code' => 'MA'],\n            ['name' => 'Santo Tome', 'country_code' => 'AR'],\n            ['name' => 'Aparri', 'country_code' => 'PH'],\n            ['name' => 'Montenegro', 'country_code' => 'BR'],\n            ['name' => 'Weimar', 'country_code' => 'DE'],\n            ['name' => 'Lupon', 'country_code' => 'PH'],\n            ['name' => 'Shawnee', 'country_code' => 'US'],\n            ['name' => 'Jupiter', 'country_code' => 'US'],\n            ['name' => 'Old Bridge', 'country_code' => 'US'],\n            ['name' => 'Ina', 'country_code' => 'JP'],\n            ['name' => 'Tupa', 'country_code' => 'BR'],\n            ['name' => 'Doral', 'country_code' => 'US'],\n            ['name' => 'Pililla', 'country_code' => 'PH'],\n            ['name' => 'San Leonardo', 'country_code' => 'PH'],\n            ['name' => 'Zarechnyy', 'country_code' => 'RU'],\n            ['name' => 'Carbondale', 'country_code' => 'US'],\n            ['name' => 'Daule', 'country_code' => 'EC'],\n            ['name' => 'Juventino Rosas', 'country_code' => 'MX'],\n            ['name' => 'Blaine', 'country_code' => 'US'],\n            ['name' => 'Bordj Menaiel', 'country_code' => 'DZ'],\n            ['name' => 'St. Albert', 'country_code' => 'CA'],\n            ['name' => 'Pavlovskiy Posad', 'country_code' => 'RU'],\n            ['name' => 'Weirton', 'country_code' => 'US'],\n            ['name' => 'Plauen', 'country_code' => 'DE'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Castillejos', 'country_code' => 'PH'],\n            ['name' => 'Tulare', 'country_code' => 'US'],\n            ['name' => 'Leszno', 'country_code' => 'PL'],\n            ['name' => 'Bourges', 'country_code' => 'FR'],\n            ['name' => 'Ico', 'country_code' => 'BR'],\n            ['name' => 'Beloretsk', 'country_code' => 'RU'],\n            ['name' => 'Jaisalmer', 'country_code' => 'IN'],\n            ['name' => 'Valence', 'country_code' => 'FR'],\n            ['name' => 'Boras', 'country_code' => 'SE'],\n            ['name' => 'Pessac', 'country_code' => 'FR'],\n            ['name' => 'Ishimbay', 'country_code' => 'RU'],\n            ['name' => 'Roxas', 'country_code' => 'PH'],\n            ['name' => 'Korosten', 'country_code' => 'UA'],\n            ['name' => 'Wellington', 'country_code' => 'US'],\n            ['name' => 'Pflugerville', 'country_code' => 'US'],\n            ['name' => 'Birnin Konni', 'country_code' => 'NE'],\n            ['name' => 'Palo Alto', 'country_code' => 'US'],\n            ['name' => 'Cuyapo', 'country_code' => 'PH'],\n            ['name' => 'Middletown', 'country_code' => 'US'],\n            ['name' => 'Neuwied', 'country_code' => 'DE'],\n            ['name' => 'Zeist', 'country_code' => 'NL'],\n            ['name' => 'Torquay', 'country_code' => 'GB'],\n            ['name' => 'Bhairahawa', 'country_code' => 'NP'],\n            ['name' => 'Halabjah', 'country_code' => 'IQ'],\n            ['name' => 'Chunian', 'country_code' => 'PK'],\n            ['name' => 'Mecheria', 'country_code' => 'DZ'],\n            ['name' => 'Marinilla', 'country_code' => 'CO'],\n            ['name' => 'Great Falls', 'country_code' => 'US'],\n            ['name' => 'Esquipulas', 'country_code' => 'GT'],\n            ['name' => 'Sipocot', 'country_code' => 'PH'],\n            ['name' => 'Dormagen', 'country_code' => 'DE'],\n            ['name' => 'Caripito', 'country_code' => 'VE'],\n            ['name' => 'Michigan City', 'country_code' => 'US'],\n            ['name' => 'Pokrovsk', 'country_code' => 'UA'],\n            ['name' => 'Santa Catarina Pinula', 'country_code' => 'GT'],\n            ['name' => 'San Mateo', 'country_code' => 'PH'],\n            ['name' => 'Svyetlahorsk', 'country_code' => 'BY'],\n            ['name' => 'Rosenheim', 'country_code' => 'DE'],\n            ['name' => 'Bucak', 'country_code' => 'TR'],\n            ['name' => 'Hornchurch', 'country_code' => 'GB'],\n            ['name' => 'Donskoy', 'country_code' => 'RU'],\n            ['name' => 'Tadepalle', 'country_code' => 'IN'],\n            ['name' => 'La Carlota', 'country_code' => 'PH'],\n            ['name' => 'Agoo', 'country_code' => 'PH'],\n            ['name' => 'Eden Prairie', 'country_code' => 'US'],\n            ['name' => 'Port Orange', 'country_code' => 'US'],\n            ['name' => 'Neubrandenburg', 'country_code' => 'DE'],\n            ['name' => 'Dublin', 'country_code' => 'US'],\n            ['name' => 'Gadwal', 'country_code' => 'IN'],\n            ['name' => 'Rafha', 'country_code' => 'SA'],\n            ['name' => 'Grand Forks', 'country_code' => 'US'],\n            ['name' => 'Santo Domingo Tehuantepec', 'country_code' => 'MX'],\n            ['name' => 'Binga', 'country_code' => 'CD'],\n            ['name' => 'Alamada', 'country_code' => 'PH'],\n            ['name' => 'Noblesville', 'country_code' => 'US'],\n            ['name' => 'Chokwe', 'country_code' => 'MZ'],\n            ['name' => 'Jatani', 'country_code' => 'IN'],\n            ['name' => 'Cruz das Almas', 'country_code' => 'BR'],\n            ['name' => 'Rahat', 'country_code' => 'IL'],\n            ['name' => 'Rizal', 'country_code' => 'PH'],\n            ['name' => 'Apaseo el Alto', 'country_code' => 'MX'],\n            ['name' => 'Qinggang', 'country_code' => 'CN'],\n            ['name' => 'La Paz', 'country_code' => 'PH'],\n            ['name' => 'San Felipe', 'country_code' => 'CL'],\n            ['name' => 'Vittoria', 'country_code' => 'IT'],\n            ['name' => 'San Clemente', 'country_code' => 'US'],\n            ['name' => 'Santiago Tianguistenco', 'country_code' => 'MX'],\n            ['name' => 'Brentwood', 'country_code' => 'US'],\n            ['name' => 'Carmichael', 'country_code' => 'US'],\n            ['name' => 'Lingshou', 'country_code' => 'CN'],\n            ['name' => 'Bongabon', 'country_code' => 'PH'],\n            ['name' => 'Ouricuri', 'country_code' => 'BR'],\n            ['name' => 'Irun', 'country_code' => 'ES'],\n            ['name' => 'Pomezia', 'country_code' => 'IT'],\n            ['name' => 'Sittingbourne', 'country_code' => 'GB'],\n            ['name' => 'Cienaga de Oro', 'country_code' => 'CO'],\n            ['name' => 'Ghardimaou', 'country_code' => 'TN'],\n            ['name' => 'Crotone', 'country_code' => 'IT'],\n            ['name' => 'Sandefjord', 'country_code' => 'NO'],\n            ['name' => 'Victoria', 'country_code' => 'PH'],\n            ['name' => 'Bamei', 'country_code' => 'CN'],\n            ['name' => 'Janiuay', 'country_code' => 'PH'],\n            ['name' => 'Zvornik', 'country_code' => 'BA'],\n            ['name' => 'Aliaga', 'country_code' => 'PH'],\n            ['name' => 'Grevenbroich', 'country_code' => 'DE'],\n            ['name' => 'Asbest', 'country_code' => 'RU'],\n            ['name' => 'Povoa de Varzim', 'country_code' => 'PT'],\n            ['name' => 'Penedo', 'country_code' => 'BR'],\n            ['name' => 'Bandar-e Genaveh', 'country_code' => 'IR'],\n            ['name' => 'Eastvale', 'country_code' => 'US'],\n            ['name' => 'Tuburan', 'country_code' => 'PH'],\n            ['name' => 'Nawa', 'country_code' => 'SY'],\n            ['name' => 'Kangbao', 'country_code' => 'CN'],\n            ['name' => 'Benevides', 'country_code' => 'BR'],\n            ['name' => 'At Tall', 'country_code' => 'SY'],\n            ['name' => 'Chapel Hill', 'country_code' => 'US'],\n            ['name' => 'Tome-Acu', 'country_code' => 'BR'],\n            ['name' => 'Rosales', 'country_code' => 'PH'],\n            ['name' => 'Rocky Mount', 'country_code' => 'US'],\n            ['name' => 'Lugano', 'country_code' => 'CH'],\n            ['name' => 'Haverhill', 'country_code' => 'US'],\n            ['name' => 'Asahi', 'country_code' => 'JP'],\n            ['name' => 'Mauban', 'country_code' => 'PH'],\n            ['name' => 'Mahdasht', 'country_code' => 'IR'],\n            ['name' => 'San Jose de Bocay', 'country_code' => 'NI'],\n            ['name' => 'Gaya', 'country_code' => 'NE'],\n            ['name' => 'Vigevano', 'country_code' => 'IT'],\n            ['name' => 'Klintsy', 'country_code' => 'RU'],\n            ['name' => 'Nagcarlan', 'country_code' => 'PH'],\n            ['name' => 'Woking', 'country_code' => 'GB'],\n            ['name' => 'Zarand', 'country_code' => 'IR'],\n            ['name' => 'Kurihara', 'country_code' => 'JP'],\n            ['name' => 'Beloit', 'country_code' => 'US'],\n            ['name' => 'Hilongos', 'country_code' => 'PH'],\n            ['name' => 'Quimper', 'country_code' => 'FR'],\n            ['name' => 'Nankana Sahib', 'country_code' => 'PK'],\n            ['name' => 'Velika Gorica', 'country_code' => 'HR'],\n            ['name' => 'Gloucester', 'country_code' => 'US'],\n            ['name' => 'Guiglo', 'country_code' => 'CI'],\n            ['name' => 'Atimonan', 'country_code' => 'PH'],\n            ['name' => 'Chincha Alta', 'country_code' => 'PE'],\n            ['name' => 'Palmares', 'country_code' => 'BR'],\n            ['name' => 'Goa', 'country_code' => 'PH'],\n            ['name' => 'Bay', 'country_code' => 'PH'],\n            ['name' => 'San Juan de Sabinas', 'country_code' => 'MX'],\n            ['name' => 'Wenxicun', 'country_code' => 'CN'],\n            ['name' => 'Budennovsk', 'country_code' => 'RU'],\n            ['name' => 'Glens Falls', 'country_code' => 'US'],\n            ['name' => 'Graaff-Reinet', 'country_code' => 'ZA'],\n            ['name' => 'Ain Sefra', 'country_code' => 'DZ'],\n            ['name' => 'Saravia', 'country_code' => 'PH'],\n            ['name' => 'Tigbauan', 'country_code' => 'PH'],\n            ['name' => 'Herten', 'country_code' => 'DE'],\n            ['name' => 'Granby', 'country_code' => 'CA'],\n            ['name' => 'Carrara', 'country_code' => 'IT'],\n            ['name' => 'Shiroi', 'country_code' => 'JP'],\n            ['name' => 'Tangub', 'country_code' => 'PH'],\n            ['name' => 'Nago', 'country_code' => 'JP'],\n            ['name' => 'Roeselare', 'country_code' => 'BE'],\n            ['name' => 'Chelm', 'country_code' => 'PL'],\n            ['name' => 'Santo Antonio do Descoberto', 'country_code' => 'BR'],\n            ['name' => 'Lutayan', 'country_code' => 'PH'],\n            ['name' => 'Medicine Hat', 'country_code' => 'CA'],\n            ['name' => 'Fairbanks', 'country_code' => 'US'],\n            ['name' => 'Volsk', 'country_code' => 'RU'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Bethesda', 'country_code' => 'US'],\n            ['name' => 'Rhondda', 'country_code' => 'GB'],\n            ['name' => 'Novaya Balakhna', 'country_code' => 'RU'],\n            ['name' => 'Grande Prairie', 'country_code' => 'CA'],\n            ['name' => 'Villasis', 'country_code' => 'PH'],\n            ['name' => 'Oudtshoorn', 'country_code' => 'ZA'],\n            ['name' => 'Johnstown', 'country_code' => 'US'],\n            ['name' => 'Bannu', 'country_code' => 'PK'],\n            ['name' => 'Kapatagan', 'country_code' => 'PH'],\n            ['name' => 'Lomza', 'country_code' => 'PL'],\n            ['name' => 'Puerto Asis', 'country_code' => 'CO'],\n            ['name' => 'Igarape-Miri', 'country_code' => 'BR'],\n            ['name' => 'West Hartford', 'country_code' => 'US'],\n            ['name' => 'Caldiran', 'country_code' => 'TR'],\n            ['name' => 'Balboa Heights', 'country_code' => 'PA'],\n            ['name' => 'Kasongo', 'country_code' => 'CD'],\n            ['name' => 'Dundalk', 'country_code' => 'US'],\n            ['name' => 'Castro Valley', 'country_code' => 'US'],\n            ['name' => 'Coon Rapids', 'country_code' => 'US'],\n            ['name' => 'Elmira', 'country_code' => 'US'],\n            ['name' => 'Palmela', 'country_code' => 'PT'],\n            ['name' => 'Portel', 'country_code' => 'BR'],\n            ['name' => 'Yurimaguas', 'country_code' => 'PE'],\n            ['name' => 'Deva', 'country_code' => 'RO'],\n            ['name' => 'Mankato', 'country_code' => 'US'],\n            ['name' => 'Nkawkaw', 'country_code' => 'GH'],\n            ['name' => 'Albany', 'country_code' => 'US'],\n            ['name' => 'Mut', 'country_code' => 'TR'],\n            ['name' => 'Cruz Alta', 'country_code' => 'BR'],\n            ['name' => 'Rossosh', 'country_code' => 'RU'],\n            ['name' => 'Palin', 'country_code' => 'GT'],\n            ['name' => 'Camaqua', 'country_code' => 'BR'],\n            ['name' => 'Kolomyia', 'country_code' => 'UA'],\n            ['name' => 'Cajica', 'country_code' => 'CO'],\n            ['name' => 'Margate', 'country_code' => 'GB'],\n            ['name' => 'Revda', 'country_code' => 'RU'],\n            ['name' => 'Borisoglebsk', 'country_code' => 'RU'],\n            ['name' => 'Kotlas', 'country_code' => 'RU'],\n            ['name' => 'Encinitas', 'country_code' => 'US'],\n            ['name' => 'Montelimar', 'country_code' => 'FR'],\n            ['name' => 'Runcorn', 'country_code' => 'GB'],\n            ['name' => 'Zelenogorsk', 'country_code' => 'RU'],\n            ['name' => 'Leander', 'country_code' => 'US'],\n            ['name' => 'Shangtangcun', 'country_code' => 'CN'],\n            ['name' => 'Mobarakeh', 'country_code' => 'IR'],\n            ['name' => 'Greenwich', 'country_code' => 'US'],\n            ['name' => 'Leninogorsk', 'country_code' => 'RU'],\n            ['name' => 'Wels', 'country_code' => 'AT'],\n            ['name' => 'Parkersburg', 'country_code' => 'US'],\n            ['name' => 'Kayes', 'country_code' => 'CG'],\n            ['name' => 'Tendo', 'country_code' => 'JP'],\n            ['name' => 'Villa Carlos Paz', 'country_code' => 'AR'],\n            ['name' => 'Waltham', 'country_code' => 'US'],\n            ['name' => 'Isabela', 'country_code' => 'PH'],\n            ['name' => 'Menzel Bourguiba', 'country_code' => 'TN'],\n            ['name' => 'Patikul', 'country_code' => 'PH'],\n            ['name' => 'Caltanissetta', 'country_code' => 'IT'],\n            ['name' => 'Tanjungpandan', 'country_code' => 'ID'],\n            ['name' => 'Tefe', 'country_code' => 'BR'],\n            ['name' => 'Riosucio', 'country_code' => 'CO'],\n            ['name' => 'Tarnowskie Gory', 'country_code' => 'PL'],\n            ['name' => 'Parang', 'country_code' => 'PH'],\n            ['name' => 'Morecambe', 'country_code' => 'GB'],\n            ['name' => 'Boryspil', 'country_code' => 'UA'],\n            ['name' => 'Port Charlotte', 'country_code' => 'US'],\n            ['name' => 'Tuapse', 'country_code' => 'RU'],\n            ['name' => 'Xinzhai', 'country_code' => 'CN'],\n            ['name' => 'Palm Harbor', 'country_code' => 'US'],\n            ['name' => 'Ocoyoacac', 'country_code' => 'MX'],\n            ['name' => 'Dajabon', 'country_code' => 'DO'],\n            ['name' => 'San Luis Obispo', 'country_code' => 'US'],\n            ['name' => 'Figueira da Foz', 'country_code' => 'PT'],\n            ['name' => 'Senahu', 'country_code' => 'GT'],\n            ['name' => 'Nahuala', 'country_code' => 'GT'],\n            ['name' => 'Meihua', 'country_code' => 'CN'],\n            ['name' => 'Benevento', 'country_code' => 'IT'],\n            ['name' => 'Bergheim', 'country_code' => 'DE'],\n            ['name' => 'Sebring', 'country_code' => 'US'],\n            ['name' => 'Chistopol', 'country_code' => 'RU'],\n            ['name' => 'Panzos', 'country_code' => 'GT'],\n            ['name' => 'Itoman', 'country_code' => 'JP'],\n            ['name' => 'Puerto Penasco', 'country_code' => 'MX'],\n            ['name' => 'Council Bluffs', 'country_code' => 'US'],\n            ['name' => 'Sao Gabriel', 'country_code' => 'BR'],\n            ['name' => 'Penapolis', 'country_code' => 'BR'],\n            ['name' => 'Itapecuru Mirim', 'country_code' => 'BR'],\n            ['name' => 'Ipira', 'country_code' => 'BR'],\n            ['name' => 'Roxas', 'country_code' => 'PH'],\n            ['name' => 'Naro-Fominsk', 'country_code' => 'RU'],\n            ['name' => 'Hamilton', 'country_code' => 'US'],\n            ['name' => 'Asker', 'country_code' => 'NO'],\n            ['name' => 'Viareggio', 'country_code' => 'IT'],\n            ['name' => 'Ferkessedougou', 'country_code' => 'CI'],\n            ['name' => 'Moore', 'country_code' => 'US'],\n            ['name' => 'Zaraza', 'country_code' => 'VE'],\n            ['name' => 'San Francisco', 'country_code' => 'AR'],\n            ['name' => 'Casa Grande', 'country_code' => 'US'],\n            ['name' => 'Lantapan', 'country_code' => 'PH'],\n            ['name' => 'Monessen', 'country_code' => 'US'],\n            ['name' => 'San Antonio del Tachira', 'country_code' => 'VE'],\n            ['name' => 'Mielec', 'country_code' => 'PL'],\n            ['name' => 'Polevskoy', 'country_code' => 'RU'],\n            ['name' => 'Plato', 'country_code' => 'CO'],\n            ['name' => 'Satbayev', 'country_code' => 'KZ'],\n            ['name' => 'Piripiri', 'country_code' => 'BR'],\n            ['name' => 'Sarandi', 'country_code' => 'AR'],\n            ['name' => 'Derik', 'country_code' => 'TR'],\n            ['name' => 'Heroica Caborca', 'country_code' => 'MX'],\n            ['name' => 'Opol', 'country_code' => 'PH'],\n            ['name' => 'Ar Rastan', 'country_code' => 'SY'],\n            ['name' => 'Aisai', 'country_code' => 'JP'],\n            ['name' => 'Santo Amaro', 'country_code' => 'BR'],\n            ['name' => 'Tuao', 'country_code' => 'PH'],\n            ['name' => 'Carepa', 'country_code' => 'CO'],\n            ['name' => 'Lysva', 'country_code' => 'RU'],\n            ['name' => 'Viseu', 'country_code' => 'BR'],\n            ['name' => 'Trikala', 'country_code' => 'GR'],\n            ['name' => 'Coroata', 'country_code' => 'BR'],\n            ['name' => 'Buenavista', 'country_code' => 'PH'],\n            ['name' => 'Fairfield', 'country_code' => 'US'],\n            ['name' => 'Friedrichshafen', 'country_code' => 'DE'],\n            ['name' => 'Xinmin', 'country_code' => 'CN'],\n            ['name' => 'Schwabisch Gmund', 'country_code' => 'DE'],\n            ['name' => 'Rubizhne', 'country_code' => 'UA'],\n            ['name' => 'St. Thomas', 'country_code' => 'CA'],\n            ['name' => 'Aurora', 'country_code' => 'PH'],\n            ['name' => 'Sibay', 'country_code' => 'RU'],\n            ['name' => 'Sawahlunto', 'country_code' => 'ID'],\n            ['name' => 'Laoang', 'country_code' => 'PH'],\n            ['name' => 'Airdrie', 'country_code' => 'CA'],\n            ['name' => 'Wanparti', 'country_code' => 'IN'],\n            ['name' => 'Guapimirim', 'country_code' => 'BR'],\n            ['name' => 'Iztapa', 'country_code' => 'GT'],\n            ['name' => 'Uzunkopru', 'country_code' => 'TR'],\n            ['name' => 'Cajazeiras', 'country_code' => 'BR'],\n            ['name' => 'Rome', 'country_code' => 'US'],\n            ['name' => 'Garbsen', 'country_code' => 'DE'],\n            ['name' => 'Fano', 'country_code' => 'IT'],\n            ['name' => 'Millcreek', 'country_code' => 'US'],\n            ['name' => 'Sanford', 'country_code' => 'US'],\n            ['name' => 'Slutsk', 'country_code' => 'BY'],\n            ['name' => 'Zamora', 'country_code' => 'ES'],\n            ['name' => 'Carazinho', 'country_code' => 'BR'],\n            ['name' => 'Vacaria', 'country_code' => 'BR'],\n            ['name' => 'Hurth', 'country_code' => 'DE'],\n            ['name' => 'Mayaguez', 'country_code' => 'PR'],\n            ['name' => 'Burnsville', 'country_code' => 'US'],\n            ['name' => 'Acarau', 'country_code' => 'BR'],\n            ['name' => 'Montauban', 'country_code' => 'FR'],\n            ['name' => 'Kiamba', 'country_code' => 'PH'],\n            ['name' => 'Candon', 'country_code' => 'PH'],\n            ['name' => 'Morristown', 'country_code' => 'US'],\n            ['name' => 'Halton Hills', 'country_code' => 'CA'],\n            ['name' => 'Reston', 'country_code' => 'US'],\n            ['name' => 'Barra do Garcas', 'country_code' => 'BR'],\n            ['name' => 'Idiofa', 'country_code' => 'CD'],\n            ['name' => 'Sonbong', 'country_code' => 'KP'],\n            ['name' => 'Skhirate', 'country_code' => 'MA'],\n            ['name' => 'Quezon', 'country_code' => 'PH'],\n            ['name' => 'Lakewood', 'country_code' => 'US'],\n            ['name' => 'Nahariyya', 'country_code' => 'IL'],\n            ['name' => 'Acerra', 'country_code' => 'IT'],\n            ['name' => 'Bezerros', 'country_code' => 'BR'],\n            ['name' => 'Yongyang', 'country_code' => 'CN'],\n            ['name' => 'Hamden', 'country_code' => 'US'],\n            ['name' => 'Spring', 'country_code' => 'US'],\n            ['name' => 'Stralsund', 'country_code' => 'DE'],\n            ['name' => 'Gadsden', 'country_code' => 'US'],\n            ['name' => 'Chalkida', 'country_code' => 'GR'],\n            ['name' => 'Taylor', 'country_code' => 'US'],\n            ['name' => 'Novi', 'country_code' => 'US'],\n            ['name' => 'Marietta', 'country_code' => 'US'],\n            ['name' => 'Villamaria', 'country_code' => 'CO'],\n            ['name' => 'Montemorelos', 'country_code' => 'MX'],\n            ['name' => 'Wesel', 'country_code' => 'DE'],\n            ['name' => 'Tartagal', 'country_code' => 'AR'],\n            ['name' => 'Bansalan', 'country_code' => 'PH'],\n            ['name' => 'Shihe', 'country_code' => 'CN'],\n            ['name' => 'Hot Springs', 'country_code' => 'US'],\n            ['name' => 'Koga', 'country_code' => 'JP'],\n            ['name' => 'Dongcun', 'country_code' => 'CN'],\n            ['name' => 'Belchatow', 'country_code' => 'PL'],\n            ['name' => 'Druzhkivka', 'country_code' => 'UA'],\n            ['name' => 'Soasio', 'country_code' => 'ID'],\n            ['name' => 'Santa Barbara', 'country_code' => 'PH'],\n            ['name' => 'Batatais', 'country_code' => 'BR'],\n            ['name' => 'Autlan de Navarro', 'country_code' => 'MX'],\n            ['name' => 'Calinog', 'country_code' => 'PH'],\n            ['name' => 'Savona', 'country_code' => 'IT'],\n            ['name' => 'Sibalom', 'country_code' => 'PH'],\n            ['name' => 'Woodland', 'country_code' => 'US'],\n            ['name' => 'Kavala', 'country_code' => 'GR'],\n            ['name' => 'Matera', 'country_code' => 'IT'],\n            ['name' => 'Greifswald', 'country_code' => 'DE'],\n            ['name' => 'Kumertau', 'country_code' => 'RU'],\n            ['name' => 'Rzhev', 'country_code' => 'RU'],\n            ['name' => 'Molfetta', 'country_code' => 'IT'],\n            ['name' => 'Ponnuru', 'country_code' => 'IN'],\n            ['name' => 'Yongbei', 'country_code' => 'CN'],\n            ['name' => 'Belladere', 'country_code' => 'HT'],\n            ['name' => 'San Vicente del Raspeig', 'country_code' => 'ES'],\n            ['name' => 'Mossel Bay', 'country_code' => 'ZA'],\n            ['name' => 'Bensalem', 'country_code' => 'US'],\n            ['name' => 'Olbia', 'country_code' => 'IT'],\n            ['name' => 'Xo jayli Shahri', 'country_code' => 'UZ'],\n            ['name' => 'Offenburg', 'country_code' => 'DE'],\n            ['name' => 'Sayanogorsk', 'country_code' => 'RU'],\n            ['name' => 'Bor', 'country_code' => 'TR'],\n            ['name' => 'Lakhdaria', 'country_code' => 'DZ'],\n            ['name' => 'Langenfeld', 'country_code' => 'DE'],\n            ['name' => 'Commerce City', 'country_code' => 'US'],\n            ['name' => 'Obando', 'country_code' => 'PH'],\n            ['name' => 'Belebey', 'country_code' => 'RU'],\n            ['name' => 'Manhica', 'country_code' => 'MZ'],\n            ['name' => 'Cristalina', 'country_code' => 'BR'],\n            ['name' => 'Labinsk', 'country_code' => 'RU'],\n            ['name' => 'Shimotsuke', 'country_code' => 'JP'],\n            ['name' => 'Lianzhuang', 'country_code' => 'CN'],\n            ['name' => 'South Hill', 'country_code' => 'US'],\n            ['name' => 'Urus-Martan', 'country_code' => 'RU'],\n            ['name' => 'Tecpan Guatemala', 'country_code' => 'GT'],\n            ['name' => 'Suifenhe', 'country_code' => 'CN'],\n            ['name' => 'Kapchagay', 'country_code' => 'KZ'],\n            ['name' => 'Vinukonda', 'country_code' => 'IN'],\n            ['name' => 'San Marcos', 'country_code' => 'CO'],\n            ['name' => 'Angat', 'country_code' => 'PH'],\n            ['name' => 'Frutal', 'country_code' => 'BR'],\n            ['name' => 'Lagoa Santa', 'country_code' => 'BR'],\n            ['name' => 'Plymouth', 'country_code' => 'US'],\n            ['name' => 'Kribi', 'country_code' => 'CM'],\n            ['name' => 'Chajari', 'country_code' => 'AR'],\n            ['name' => 'Maues', 'country_code' => 'BR'],\n            ['name' => 'Gubat', 'country_code' => 'PH'],\n            ['name' => 'Limoeiro do Norte', 'country_code' => 'BR'],\n            ['name' => 'Girardota', 'country_code' => 'CO'],\n            ['name' => 'Itogon', 'country_code' => 'PH'],\n            ['name' => 'Bristol', 'country_code' => 'US'],\n            ['name' => 'Solano', 'country_code' => 'PH'],\n            ['name' => 'Porirua', 'country_code' => 'NZ'],\n            ['name' => 'Jose Panganiban', 'country_code' => 'PH'],\n            ['name' => 'Columbus', 'country_code' => 'US'],\n            ['name' => 'Asenovgrad', 'country_code' => 'BG'],\n            ['name' => 'Hardenberg', 'country_code' => 'NL'],\n            ['name' => 'Shuya', 'country_code' => 'RU'],\n            ['name' => 'Jacunda', 'country_code' => 'BR'],\n            ['name' => 'Huajiang', 'country_code' => 'CN'],\n            ['name' => 'Comitancillo', 'country_code' => 'GT'],\n            ['name' => 'Sibulan', 'country_code' => 'PH'],\n            ['name' => 'Uriangato', 'country_code' => 'MX'],\n            ['name' => 'Alcoy', 'country_code' => 'ES'],\n            ['name' => 'Huehuetoca', 'country_code' => 'MX'],\n            ['name' => 'Bangor', 'country_code' => 'US'],\n            ['name' => 'Lesosibirsk', 'country_code' => 'RU'],\n            ['name' => 'Zhoujiajing', 'country_code' => 'CN'],\n            ['name' => 'Joso', 'country_code' => 'JP'],\n            ['name' => 'Sao Miguel do Guama', 'country_code' => 'BR'],\n            ['name' => 'Tezpur', 'country_code' => 'IN'],\n            ['name' => 'Morong', 'country_code' => 'PH'],\n            ['name' => 'Abuyog', 'country_code' => 'PH'],\n            ['name' => 'Saint-Hyacinthe', 'country_code' => 'CA'],\n            ['name' => 'Narasapur', 'country_code' => 'IN'],\n            ['name' => 'Maasin', 'country_code' => 'PH'],\n            ['name' => 'Pasrur', 'country_code' => 'PK'],\n            ['name' => 'Niort', 'country_code' => 'FR'],\n            ['name' => 'Agrigento', 'country_code' => 'IT'],\n            ['name' => 'Nordre Fale', 'country_code' => 'NO'],\n            ['name' => 'Chibuto', 'country_code' => 'MZ'],\n            ['name' => 'Prokhladnyy', 'country_code' => 'RU'],\n            ['name' => 'Cambanugoy', 'country_code' => 'PH'],\n            ['name' => 'Yara', 'country_code' => 'CU'],\n            ['name' => 'Esfarayen', 'country_code' => 'IR'],\n            ['name' => 'Sayaxche', 'country_code' => 'GT'],\n            ['name' => 'Moron', 'country_code' => 'CU'],\n            ['name' => 'Greenwood', 'country_code' => 'US'],\n            ['name' => 'Los Andes', 'country_code' => 'CL'],\n            ['name' => 'Lucas do Rio Verde', 'country_code' => 'BR'],\n            ['name' => 'Paracale', 'country_code' => 'PH'],\n            ['name' => 'Hua Hin', 'country_code' => 'TH'],\n            ['name' => 'Bartlett', 'country_code' => 'US'],\n            ['name' => 'Bradenton', 'country_code' => 'US'],\n            ['name' => 'Pontiac', 'country_code' => 'US'],\n            ['name' => 'Staunton', 'country_code' => 'US'],\n            ['name' => 'Neu-Ulm', 'country_code' => 'DE'],\n            ['name' => 'Gannan', 'country_code' => 'CN'],\n            ['name' => 'Baao', 'country_code' => 'PH'],\n            ['name' => 'El Cua', 'country_code' => 'NI'],\n            ['name' => 'Concepcion Tutuapa', 'country_code' => 'GT'],\n            ['name' => 'Meriden', 'country_code' => 'US'],\n            ['name' => 'Aleksandrov', 'country_code' => 'RU'],\n            ['name' => 'Cachoeiras de Macacu', 'country_code' => 'BR'],\n            ['name' => 'Clay', 'country_code' => 'US'],\n            ['name' => 'Tahara', 'country_code' => 'JP'],\n            ['name' => 'Zengcun', 'country_code' => 'CN'],\n            ['name' => 'Apex', 'country_code' => 'US'],\n            ['name' => 'Unna', 'country_code' => 'DE'],\n            ['name' => 'Royal Oak', 'country_code' => 'US'],\n            ['name' => 'Benton Harbor', 'country_code' => 'US'],\n            ['name' => 'Chichibu', 'country_code' => 'JP'],\n            ['name' => 'Tianningcun', 'country_code' => 'CN'],\n            ['name' => 'Santa Maria Chiquimula', 'country_code' => 'GT'],\n            ['name' => 'Kattaqo rg on Shahri', 'country_code' => 'UZ'],\n            ['name' => 'Pamplona', 'country_code' => 'CO'],\n            ['name' => 'Florida', 'country_code' => 'CO'],\n            ['name' => 'Constanza', 'country_code' => 'DO'],\n            ['name' => 'Metapan', 'country_code' => 'SV'],\n            ['name' => 'Faenza', 'country_code' => 'IT'],\n            ['name' => 'Bilhorod-Dnistrovskyi', 'country_code' => 'UA'],\n            ['name' => 'Lower Merion', 'country_code' => 'US'],\n            ['name' => 'Xikeng', 'country_code' => 'CN'],\n            ['name' => 'Mamungan', 'country_code' => 'PH'],\n            ['name' => 'Motril', 'country_code' => 'ES'],\n            ['name' => 'St. Clair Shores', 'country_code' => 'US'],\n            ['name' => 'Juruti', 'country_code' => 'BR'],\n            ['name' => 'Buique', 'country_code' => 'BR'],\n            ['name' => 'Kelibia', 'country_code' => 'TN'],\n            ['name' => 'Cabatuan', 'country_code' => 'PH'],\n            ['name' => 'Sandnes', 'country_code' => 'NO'],\n            ['name' => 'Rass el Djebel', 'country_code' => 'TN'],\n            ['name' => 'Des Plaines', 'country_code' => 'US'],\n            ['name' => 'Lac-Brome', 'country_code' => 'CA'],\n            ['name' => 'Lewiston', 'country_code' => 'US'],\n            ['name' => 'Jovellanos', 'country_code' => 'CU'],\n            ['name' => 'Midland', 'country_code' => 'US'],\n            ['name' => 'Timargara', 'country_code' => 'PK'],\n            ['name' => 'Mikhaylovka', 'country_code' => 'RU'],\n            ['name' => 'Boufarik', 'country_code' => 'DZ'],\n            ['name' => 'Santo Domingo', 'country_code' => 'PH'],\n            ['name' => 'Izberbash', 'country_code' => 'RU'],\n            ['name' => 'Sucun', 'country_code' => 'CN'],\n            ['name' => 'Bowie', 'country_code' => 'US'],\n            ['name' => 'Cerignola', 'country_code' => 'IT'],\n            ['name' => 'Kas', 'country_code' => 'TR'],\n            ['name' => 'Tlaltenango de Sanchez Roman', 'country_code' => 'MX'],\n            ['name' => 'Avila', 'country_code' => 'ES'],\n            ['name' => 'Aketi', 'country_code' => 'CD'],\n            ['name' => 'Qaskeleng', 'country_code' => 'KZ'],\n            ['name' => 'Palompon', 'country_code' => 'PH'],\n            ['name' => 'Felgueiras', 'country_code' => 'PT'],\n            ['name' => 'Tokoname', 'country_code' => 'JP'],\n            ['name' => 'Rotorua', 'country_code' => 'NZ'],\n            ['name' => 'Goppingen', 'country_code' => 'DE'],\n            ['name' => 'Lambayeque', 'country_code' => 'PE'],\n            ['name' => 'Iskitim', 'country_code' => 'RU'],\n            ['name' => 'Guarabira', 'country_code' => 'BR'],\n            ['name' => 'Caldwell', 'country_code' => 'US'],\n            ['name' => 'Sunshi', 'country_code' => 'CN'],\n            ['name' => 'San Pedro', 'country_code' => 'AR'],\n            ['name' => 'Moncada', 'country_code' => 'PH'],\n            ['name' => 'Ma erkang', 'country_code' => 'CN'],\n            ['name' => 'San Rafael', 'country_code' => 'US'],\n            ['name' => 'Moncalieri', 'country_code' => 'IT'],\n            ['name' => 'Acu', 'country_code' => 'BR'],\n            ['name' => 'San Fernando', 'country_code' => 'CL'],\n            ['name' => 'Euskirchen', 'country_code' => 'DE'],\n            ['name' => 'Serres', 'country_code' => 'GR'],\n            ['name' => 'Jiantang', 'country_code' => 'CN'],\n            ['name' => 'Ishikari', 'country_code' => 'JP'],\n            ['name' => 'Punta Alta', 'country_code' => 'AR'],\n            ['name' => 'La Gomera', 'country_code' => 'GT'],\n            ['name' => 'Ragay', 'country_code' => 'PH'],\n            ['name' => 'Kosai', 'country_code' => 'JP'],\n            ['name' => 'Nyagan', 'country_code' => 'RU'],\n            ['name' => 'Sirvan', 'country_code' => 'AZ'],\n            ['name' => 'Barneveld', 'country_code' => 'NL'],\n            ['name' => 'Huaniu', 'country_code' => 'CN'],\n            ['name' => 'Santa Cruz', 'country_code' => 'PH'],\n            ['name' => 'Hamburg', 'country_code' => 'US'],\n            ['name' => 'Frankfurt (Oder)', 'country_code' => 'DE'],\n            ['name' => 'Masantol', 'country_code' => 'PH'],\n            ['name' => 'Richland', 'country_code' => 'US'],\n            ['name' => 'Fredericton', 'country_code' => 'CA'],\n            ['name' => 'Taal', 'country_code' => 'PH'],\n            ['name' => 'Asingan', 'country_code' => 'PH'],\n            ['name' => 'St. Peters', 'country_code' => 'US'],\n            ['name' => 'Wesley Chapel', 'country_code' => 'US'],\n            ['name' => 'Togane', 'country_code' => 'JP'],\n            ['name' => 'Gengzhuangqiao', 'country_code' => 'CN'],\n            ['name' => 'Monte Alegre', 'country_code' => 'BR'],\n            ['name' => 'Heerhugowaard', 'country_code' => 'NL'],\n            ['name' => 'San Remigio', 'country_code' => 'PH'],\n            ['name' => 'Pula', 'country_code' => 'HR'],\n            ['name' => 'Tikhvin', 'country_code' => 'RU'],\n            ['name' => 'Castilla', 'country_code' => 'PH'],\n            ['name' => 'Pradera', 'country_code' => 'CO'],\n            ['name' => 'Roermond', 'country_code' => 'NL'],\n            ['name' => 'Hendersonville', 'country_code' => 'US'],\n            ['name' => 'Huntersville', 'country_code' => 'US'],\n            ['name' => 'Mirassol', 'country_code' => 'BR'],\n            ['name' => 'Southampton', 'country_code' => 'US'],\n            ['name' => 'Xiezhou', 'country_code' => 'CN'],\n            ['name' => 'Santee', 'country_code' => 'US'],\n            ['name' => 'Hameln', 'country_code' => 'DE'],\n            ['name' => 'Wagga Wagga', 'country_code' => 'AU'],\n            ['name' => 'Meleuz', 'country_code' => 'RU'],\n            ['name' => 'Livingston', 'country_code' => 'GB'],\n            ['name' => 'Allanmyo', 'country_code' => 'MM'],\n            ['name' => 'Malvar', 'country_code' => 'PH'],\n            ['name' => 'Aleksin', 'country_code' => 'RU'],\n            ['name' => 'Antonio Enes', 'country_code' => 'MZ'],\n            ['name' => 'Berezovskiy', 'country_code' => 'RU'],\n            ['name' => 'Ping an', 'country_code' => 'CN'],\n            ['name' => 'Beckley', 'country_code' => 'US'],\n            ['name' => 'Samalkot', 'country_code' => 'IN'],\n            ['name' => 'Alexandroupoli', 'country_code' => 'GR'],\n            ['name' => 'Titusville', 'country_code' => 'US'],\n            ['name' => 'Cartersville', 'country_code' => 'US'],\n            ['name' => 'Ypane', 'country_code' => 'PY'],\n            ['name' => 'Sidi Yahya Zaer', 'country_code' => 'MA'],\n            ['name' => 'Bedzin', 'country_code' => 'PL'],\n            ['name' => 'Walla Walla', 'country_code' => 'US'],\n            ['name' => 'Orland Park', 'country_code' => 'US'],\n            ['name' => 'Ciudad Cuauhtemoc', 'country_code' => 'MX'],\n            ['name' => 'Qianwu', 'country_code' => 'CN'],\n            ['name' => 'Tikhoretsk', 'country_code' => 'RU'],\n            ['name' => 'Kothapet', 'country_code' => 'IN'],\n            ['name' => 'Towson', 'country_code' => 'US'],\n            ['name' => 'Orito', 'country_code' => 'CO'],\n            ['name' => 'Manchester', 'country_code' => 'US'],\n            ['name' => 'Biala Podlaska', 'country_code' => 'PL'],\n            ['name' => 'Botolan', 'country_code' => 'PH'],\n            ['name' => 'Qunghirot', 'country_code' => 'UZ'],\n            ['name' => 'Minokamo', 'country_code' => 'JP'],\n            ['name' => 'Weymouth', 'country_code' => 'US'],\n            ['name' => 'Campo Alegre', 'country_code' => 'BR'],\n            ['name' => 'Ibitinga', 'country_code' => 'BR'],\n            ['name' => 'Macherla', 'country_code' => 'IN'],\n            ['name' => 'Pavlovo', 'country_code' => 'RU'],\n            ['name' => 'Beauvais', 'country_code' => 'FR'],\n            ['name' => 'Jerez de Garcia Salinas', 'country_code' => 'MX'],\n            ['name' => 'Parker', 'country_code' => 'US'],\n            ['name' => 'Linares', 'country_code' => 'ES'],\n            ['name' => 'Palm Beach Gardens', 'country_code' => 'US'],\n            ['name' => 'Ejmiatsin', 'country_code' => 'AM'],\n            ['name' => 'Krasnotur insk', 'country_code' => 'RU'],\n            ['name' => 'Bozeman', 'country_code' => 'US'],\n            ['name' => 'Kandukur', 'country_code' => 'IN'],\n            ['name' => 'Diriamba', 'country_code' => 'NI'],\n            ['name' => 'Beni Enzar', 'country_code' => 'MA'],\n            ['name' => 'Salsk', 'country_code' => 'RU'],\n            ['name' => 'Sicuani', 'country_code' => 'PE'],\n            ['name' => 'Kojske', 'country_code' => 'XK'],\n            ['name' => 'New Plymouth', 'country_code' => 'NZ'],\n            ['name' => 'Ilog', 'country_code' => 'PH'],\n            ['name' => 'East Stroudsburg', 'country_code' => 'US'],\n            ['name' => 'Milagros', 'country_code' => 'PH'],\n            ['name' => 'Santiago Tuxtla', 'country_code' => 'MX'],\n            ['name' => 'Nova Odessa', 'country_code' => 'BR'],\n            ['name' => 'Taunton', 'country_code' => 'US'],\n            ['name' => 'Istaravshan', 'country_code' => 'TJ'],\n            ['name' => 'Khlong Luang', 'country_code' => 'TH'],\n            ['name' => 'Midwest City', 'country_code' => 'US'],\n            ['name' => 'Sankt Augustin', 'country_code' => 'DE'],\n            ['name' => 'Stolberg', 'country_code' => 'DE'],\n            ['name' => 'Tivoli', 'country_code' => 'IT'],\n            ['name' => 'Damghan', 'country_code' => 'IR'],\n            ['name' => 'Bobbili', 'country_code' => 'IN'],\n            ['name' => 'Irpin', 'country_code' => 'UA'],\n            ['name' => 'Sattenapalle', 'country_code' => 'IN'],\n            ['name' => 'Krymsk', 'country_code' => 'RU'],\n            ['name' => 'Andradina', 'country_code' => 'BR'],\n            ['name' => 'Kudamatsu', 'country_code' => 'JP'],\n            ['name' => 'San Jose de Ocoa', 'country_code' => 'DO'],\n            ['name' => 'Goldsboro', 'country_code' => 'US'],\n            ['name' => 'Azzaba', 'country_code' => 'DZ'],\n            ['name' => 'Tikapur', 'country_code' => 'NP'],\n            ['name' => 'Foligno', 'country_code' => 'IT'],\n            ['name' => 'Vargem Grande', 'country_code' => 'BR'],\n            ['name' => 'Euless', 'country_code' => 'US'],\n            ['name' => 'Talagante', 'country_code' => 'CL'],\n            ['name' => 'Shicun', 'country_code' => 'CN'],\n            ['name' => 'Gorlitz', 'country_code' => 'DE'],\n            ['name' => 'Pau d Alho', 'country_code' => 'BR'],\n            ['name' => 'Pacos de Ferreira', 'country_code' => 'PT'],\n            ['name' => 'Eschweiler', 'country_code' => 'DE'],\n            ['name' => 'Vrindavan', 'country_code' => 'IN'],\n            ['name' => 'Ribnita', 'country_code' => 'MD'],\n            ['name' => 'Alenquer', 'country_code' => 'BR'],\n            ['name' => 'Langenhagen', 'country_code' => 'DE'],\n            ['name' => 'Manfredonia', 'country_code' => 'IT'],\n            ['name' => 'Meerbusch', 'country_code' => 'DE'],\n            ['name' => 'General Pico', 'country_code' => 'AR'],\n            ['name' => 'Manhattan', 'country_code' => 'US'],\n            ['name' => 'Irosin', 'country_code' => 'PH'],\n            ['name' => 'Matanao', 'country_code' => 'PH'],\n            ['name' => 'Shoreline', 'country_code' => 'US'],\n            ['name' => 'Tres Pontas', 'country_code' => 'BR'],\n            ['name' => 'Neryungri', 'country_code' => 'RU'],\n            ['name' => 'Moreno', 'country_code' => 'BR'],\n            ['name' => 'Tama', 'country_code' => 'JP'],\n            ['name' => 'Puerto Boyaca', 'country_code' => 'CO'],\n            ['name' => 'Jackson', 'country_code' => 'US'],\n            ['name' => 'Kananya', 'country_code' => 'PH'],\n            ['name' => 'Jinoba-an', 'country_code' => 'PH'],\n            ['name' => 'Calatagan', 'country_code' => 'PH'],\n            ['name' => 'Chini', 'country_code' => 'CN'],\n            ['name' => 'Bagheria', 'country_code' => 'IT'],\n            ['name' => 'Piscataway', 'country_code' => 'US'],\n            ['name' => 'Brentwood', 'country_code' => 'GB'],\n            ['name' => 'Clacton-on-Sea', 'country_code' => 'GB'],\n            ['name' => 'Orion', 'country_code' => 'PH'],\n            ['name' => 'Acambay', 'country_code' => 'MX'],\n            ['name' => 'Lake Havasu City', 'country_code' => 'US'],\n            ['name' => 'Cuneo', 'country_code' => 'IT'],\n            ['name' => 'Waiblingen', 'country_code' => 'DE'],\n            ['name' => 'Santa Cruz Verapaz', 'country_code' => 'GT'],\n            ['name' => 'Gattaran', 'country_code' => 'PH'],\n            ['name' => 'Taquaritinga', 'country_code' => 'BR'],\n            ['name' => 'Tulunan', 'country_code' => 'PH'],\n            ['name' => 'Bertioga', 'country_code' => 'BR'],\n            ['name' => 'Smyrna', 'country_code' => 'US'],\n            ['name' => 'Tonsberg', 'country_code' => 'NO'],\n            ['name' => 'Quezaltepeque', 'country_code' => 'SV'],\n            ['name' => 'Cui erzhuang', 'country_code' => 'CN'],\n            ['name' => 'Santa Cruz', 'country_code' => 'PH'],\n            ['name' => 'Opava', 'country_code' => 'CZ'],\n            ['name' => 'Nogata', 'country_code' => 'JP'],\n            ['name' => 'Taybad', 'country_code' => 'IR'],\n            ['name' => 'Trani', 'country_code' => 'IT'],\n            ['name' => 'Bianyang', 'country_code' => 'CN'],\n            ['name' => 'Santa Ana', 'country_code' => 'PH'],\n            ['name' => 'Cape Girardeau', 'country_code' => 'US'],\n            ['name' => 'Bartolome Maso', 'country_code' => 'CU'],\n            ['name' => 'Amealco', 'country_code' => 'MX'],\n            ['name' => 'Uson', 'country_code' => 'PH'],\n            ['name' => 'Hassa', 'country_code' => 'TR'],\n            ['name' => 'Sao Francisco', 'country_code' => 'BR'],\n            ['name' => 'Hohoe', 'country_code' => 'GH'],\n            ['name' => 'Belampalli', 'country_code' => 'IN'],\n            ['name' => 'Shali', 'country_code' => 'RU'],\n            ['name' => 'Araci', 'country_code' => 'BR'],\n            ['name' => 'Oosterhout', 'country_code' => 'NL'],\n            ['name' => 'Xinqing', 'country_code' => 'CN'],\n            ['name' => 'Blainville', 'country_code' => 'CA'],\n            ['name' => 'Gulariya', 'country_code' => 'NP'],\n            ['name' => 'Registro', 'country_code' => 'BR'],\n            ['name' => 'Baganga', 'country_code' => 'PH'],\n            ['name' => 'Antratsyt', 'country_code' => 'UA'],\n            ['name' => 'Vranjak', 'country_code' => 'XK'],\n            ['name' => 'Irati', 'country_code' => 'BR'],\n            ['name' => 'Winneba', 'country_code' => 'GH'],\n            ['name' => 'Xanthi', 'country_code' => 'GR'],\n            ['name' => 'Los Amates', 'country_code' => 'GT'],\n            ['name' => 'San Fernando', 'country_code' => 'PH'],\n            ['name' => 'Longmen', 'country_code' => 'CN'],\n            ['name' => 'Zarrin Shahr', 'country_code' => 'IR'],\n            ['name' => 'Rosario', 'country_code' => 'PH'],\n            ['name' => 'Lozova', 'country_code' => 'UA'],\n            ['name' => 'Bisceglie', 'country_code' => 'IT'],\n            ['name' => 'Khan Shaykhun', 'country_code' => 'SY'],\n            ['name' => 'Kazanlak', 'country_code' => 'BG'],\n            ['name' => 'Placer', 'country_code' => 'PH'],\n            ['name' => 'Vorkuta', 'country_code' => 'RU'],\n            ['name' => 'Medellin', 'country_code' => 'PH'],\n            ['name' => 'Yongqing', 'country_code' => 'CN'],\n            ['name' => 'Katerini', 'country_code' => 'GR'],\n            ['name' => 'Frydek-Mistek', 'country_code' => 'CZ'],\n            ['name' => 'Parachinar', 'country_code' => 'PK'],\n            ['name' => 'Tigaon', 'country_code' => 'PH'],\n            ['name' => 'Bhimunipatnam', 'country_code' => 'IN'],\n            ['name' => 'Hyeres', 'country_code' => 'FR'],\n            ['name' => 'Canterbury', 'country_code' => 'GB'],\n            ['name' => 'Boituva', 'country_code' => 'BR'],\n            ['name' => 'Portimao', 'country_code' => 'PT'],\n            ['name' => 'Den Helder', 'country_code' => 'NL'],\n            ['name' => 'Volzhsk', 'country_code' => 'RU'],\n            ['name' => 'Changling', 'country_code' => 'CN'],\n            ['name' => 'Wangguanzhuang', 'country_code' => 'CN'],\n            ['name' => 'Hidaka', 'country_code' => 'JP'],\n            ['name' => 'Toki', 'country_code' => 'JP'],\n            ['name' => 'Grants Pass', 'country_code' => 'US'],\n            ['name' => 'Blue Springs', 'country_code' => 'US'],\n            ['name' => 'Jaru', 'country_code' => 'BR'],\n            ['name' => 'Xiva', 'country_code' => 'UZ'],\n            ['name' => 'Gus -Khrustal nyy', 'country_code' => 'RU'],\n            ['name' => 'Tucano', 'country_code' => 'BR'],\n            ['name' => 'Martin', 'country_code' => 'SK'],\n            ['name' => 'Southaven', 'country_code' => 'US'],\n            ['name' => 'Umm Ruwaba', 'country_code' => 'SD'],\n            ['name' => 'Tinley Park', 'country_code' => 'US'],\n            ['name' => 'Apatity', 'country_code' => 'RU'],\n            ['name' => 'Azul', 'country_code' => 'AR'],\n            ['name' => 'Taua', 'country_code' => 'BR'],\n            ['name' => 'Tanauan', 'country_code' => 'PH'],\n            ['name' => 'Diamond Bar', 'country_code' => 'US'],\n            ['name' => 'Binalonan', 'country_code' => 'PH'],\n            ['name' => 'Pittsfield', 'country_code' => 'US'],\n            ['name' => 'San Francisco', 'country_code' => 'PH'],\n            ['name' => 'Navirai', 'country_code' => 'BR'],\n            ['name' => 'Eagle Pass', 'country_code' => 'US'],\n            ['name' => 'Acara', 'country_code' => 'BR'],\n            ['name' => 'Avellino', 'country_code' => 'IT'],\n            ['name' => 'Aran Bidgol', 'country_code' => 'IR'],\n            ['name' => 'Limoeiro', 'country_code' => 'BR'],\n            ['name' => 'Monte Mor', 'country_code' => 'BR'],\n            ['name' => 'Jocotitlan', 'country_code' => 'MX'],\n            ['name' => 'Lenexa', 'country_code' => 'US'],\n            ['name' => 'Lagonoy', 'country_code' => 'PH'],\n            ['name' => 'Corby', 'country_code' => 'GB'],\n            ['name' => 'Hazleton', 'country_code' => 'US'],\n            ['name' => 'Alangalang', 'country_code' => 'PH'],\n            ['name' => 'El Banco', 'country_code' => 'CO'],\n            ['name' => 'Basey', 'country_code' => 'PH'],\n            ['name' => 'Twin Falls', 'country_code' => 'US'],\n            ['name' => 'Brookhaven', 'country_code' => 'US'],\n            ['name' => 'Schweinfurt', 'country_code' => 'DE'],\n            ['name' => 'Batac', 'country_code' => 'PH'],\n            ['name' => 'Villarrica', 'country_code' => 'CL'],\n            ['name' => 'Baden-Baden', 'country_code' => 'DE'],\n            ['name' => 'Novato', 'country_code' => 'US'],\n            ['name' => 'Tigard', 'country_code' => 'US'],\n            ['name' => 'Hoogeveen', 'country_code' => 'NL'],\n            ['name' => 'Jaguaquara', 'country_code' => 'BR'],\n            ['name' => 'San Remo', 'country_code' => 'IT'],\n            ['name' => 'Congonhas', 'country_code' => 'BR'],\n            ['name' => 'Abington', 'country_code' => 'US'],\n            ['name' => 'Rolim de Moura', 'country_code' => 'BR'],\n            ['name' => 'Aurora', 'country_code' => 'CA'],\n            ['name' => 'Bitonto', 'country_code' => 'IT'],\n            ['name' => 'Highland', 'country_code' => 'US'],\n            ['name' => 'San Mariano', 'country_code' => 'PH'],\n            ['name' => 'Dearborn Heights', 'country_code' => 'US'],\n            ['name' => 'Puttur', 'country_code' => 'IN'],\n            ['name' => 'Manapla', 'country_code' => 'PH'],\n            ['name' => 'Hattingen', 'country_code' => 'DE'],\n            ['name' => 'Bad Homburg', 'country_code' => 'DE'],\n            ['name' => 'Songlindian', 'country_code' => 'CN'],\n            ['name' => 'Pombal', 'country_code' => 'PT'],\n            ['name' => 'Grapevine', 'country_code' => 'US'],\n            ['name' => 'Hervey Bay', 'country_code' => 'AU'],\n            ['name' => 'Sigaboy', 'country_code' => 'PH'],\n            ['name' => 'Amalapuram', 'country_code' => 'IN'],\n            ['name' => 'Chino', 'country_code' => 'JP'],\n            ['name' => 'Fond du Lac', 'country_code' => 'US'],\n            ['name' => 'Hacienda Heights', 'country_code' => 'US'],\n            ['name' => 'Jasaan', 'country_code' => 'PH'],\n            ['name' => 'Punganuru', 'country_code' => 'IN'],\n            ['name' => 'Nandod', 'country_code' => 'IN'],\n            ['name' => 'Apple Valley', 'country_code' => 'US'],\n            ['name' => 'Qiryat Gat', 'country_code' => 'IL'],\n            ['name' => 'Tiquisate', 'country_code' => 'GT'],\n            ['name' => 'Chicopee', 'country_code' => 'US'],\n            ['name' => 'Funato', 'country_code' => 'JP'],\n            ['name' => 'Zhushan', 'country_code' => 'TW'],\n            ['name' => 'San Luis', 'country_code' => 'PH'],\n            ['name' => 'New Corella', 'country_code' => 'PH'],\n            ['name' => 'San Gil', 'country_code' => 'CO'],\n            ['name' => 'Narbonne', 'country_code' => 'FR'],\n            ['name' => 'Tequisquiapan', 'country_code' => 'MX'],\n            ['name' => 'Cathedral City', 'country_code' => 'US'],\n            ['name' => 'Vannes', 'country_code' => 'FR'],\n            ['name' => 'La Roche-sur-Yon', 'country_code' => 'FR'],\n            ['name' => 'Vicosa do Ceara', 'country_code' => 'BR'],\n            ['name' => 'San Cristobal Verapaz', 'country_code' => 'GT'],\n            ['name' => 'Porto Ferreira', 'country_code' => 'BR'],\n            ['name' => 'Huaishu', 'country_code' => 'CN'],\n            ['name' => 'Barreirinhas', 'country_code' => 'BR'],\n            ['name' => 'Delano', 'country_code' => 'US'],\n            ['name' => 'Bentonville', 'country_code' => 'US'],\n            ['name' => 'Stonecrest', 'country_code' => 'US'],\n            ['name' => 'Sakurai', 'country_code' => 'JP'],\n            ['name' => 'Dandarah', 'country_code' => 'EG'],\n            ['name' => 'Kettering', 'country_code' => 'US'],\n            ['name' => 'Esperanza', 'country_code' => 'PH'],\n            ['name' => 'Mali', 'country_code' => 'CN'],\n            ['name' => 'Canlaon', 'country_code' => 'PH'],\n            ['name' => 'Sarpsborg', 'country_code' => 'NO'],\n            ['name' => 'Colton', 'country_code' => 'US'],\n            ['name' => 'Pulheim', 'country_code' => 'DE'],\n            ['name' => 'Annaka', 'country_code' => 'JP'],\n            ['name' => 'Kingston', 'country_code' => 'US'],\n            ['name' => 'Ostroleka', 'country_code' => 'PL'],\n            ['name' => 'Xielu', 'country_code' => 'CN'],\n            ['name' => 'Monte Santo', 'country_code' => 'BR'],\n            ['name' => 'Chota', 'country_code' => 'PE'],\n            ['name' => 'Naguilian', 'country_code' => 'PH'],\n            ['name' => 'Lingen', 'country_code' => 'DE'],\n            ['name' => 'Barotac Nuevo', 'country_code' => 'PH'],\n            ['name' => 'Modica', 'country_code' => 'IT'],\n            ['name' => 'Jinchang', 'country_code' => 'CN'],\n            ['name' => 'Teramo', 'country_code' => 'IT'],\n            ['name' => 'Cuenca', 'country_code' => 'ES'],\n            ['name' => 'Bad Salzuflen', 'country_code' => 'DE'],\n            ['name' => 'Mansalay', 'country_code' => 'PH'],\n            ['name' => 'West Haven', 'country_code' => 'US'],\n            ['name' => 'Cava de  Tirreni', 'country_code' => 'IT'],\n            ['name' => 'Dayin', 'country_code' => 'CN'],\n            ['name' => 'St. Cloud', 'country_code' => 'US'],\n            ['name' => 'Sertolovo', 'country_code' => 'RU'],\n            ['name' => 'Chivilcoy', 'country_code' => 'AR'],\n            ['name' => 'Cholet', 'country_code' => 'FR'],\n            ['name' => 'Chenab Nagar', 'country_code' => 'PK'],\n            ['name' => 'Canoinhas', 'country_code' => 'BR'],\n            ['name' => 'Sao Jose do Rio Pardo', 'country_code' => 'BR'],\n            ['name' => 'Kotka', 'country_code' => 'FI'],\n            ['name' => 'Shidong', 'country_code' => 'CN'],\n            ['name' => 'Normal', 'country_code' => 'US'],\n            ['name' => 'Palmaner', 'country_code' => 'IN'],\n            ['name' => 'Qingan', 'country_code' => 'CN'],\n            ['name' => 'Paombong', 'country_code' => 'PH'],\n            ['name' => 'Itupeva', 'country_code' => 'BR'],\n            ['name' => 'Siena', 'country_code' => 'IT'],\n            ['name' => 'Milford', 'country_code' => 'US'],\n            ['name' => 'Tarma', 'country_code' => 'PE'],\n            ['name' => 'Jalor', 'country_code' => 'IN'],\n            ['name' => 'Zarafshon Shahri', 'country_code' => 'UZ'],\n            ['name' => 'Valle del Guamuez', 'country_code' => 'CO'],\n            ['name' => 'Huesca', 'country_code' => 'ES'],\n            ['name' => 'Campo Belo', 'country_code' => 'BR'],\n            ['name' => 'Vikarabad', 'country_code' => 'IN'],\n            ['name' => 'Hashtpar', 'country_code' => 'IR'],\n            ['name' => 'Xingcheng', 'country_code' => 'CN'],\n            ['name' => 'Ixhuatlan de Madero', 'country_code' => 'MX'],\n            ['name' => 'Ruteng', 'country_code' => 'ID'],\n            ['name' => 'Narva', 'country_code' => 'EE'],\n            ['name' => 'Barra', 'country_code' => 'BR'],\n            ['name' => 'Tokmok', 'country_code' => 'KG'],\n            ['name' => 'Vigia', 'country_code' => 'BR'],\n            ['name' => 'Zhigulevsk', 'country_code' => 'RU'],\n            ['name' => 'Arroyo Grande', 'country_code' => 'US'],\n            ['name' => 'Pinto', 'country_code' => 'ES'],\n            ['name' => 'Kampen', 'country_code' => 'NL'],\n            ['name' => 'San Simon', 'country_code' => 'PH'],\n            ['name' => 'Progreso', 'country_code' => 'MX'],\n            ['name' => 'Magsaysay', 'country_code' => 'PH'],\n            ['name' => 'Minnetonka', 'country_code' => 'US'],\n            ['name' => 'Jagtial', 'country_code' => 'IN'],\n            ['name' => 'Dholka', 'country_code' => 'IN'],\n            ['name' => 'Puerto Libertador', 'country_code' => 'CO'],\n            ['name' => 'Elda', 'country_code' => 'ES'],\n            ['name' => 'Santa Maria', 'country_code' => 'PH'],\n            ['name' => 'Tajumulco', 'country_code' => 'GT'],\n            ['name' => 'Wayne', 'country_code' => 'US'],\n            ['name' => 'La Lima', 'country_code' => 'HN'],\n            ['name' => 'Liski', 'country_code' => 'RU'],\n            ['name' => 'Tuni', 'country_code' => 'IN'],\n            ['name' => 'Yucaipa', 'country_code' => 'US'],\n            ['name' => 'Markala', 'country_code' => 'ML'],\n            ['name' => 'Svobodnyy', 'country_code' => 'RU'],\n            ['name' => 'Jaggayyapeta', 'country_code' => 'IN'],\n            ['name' => 'Salo', 'country_code' => 'FI'],\n            ['name' => 'Brunswick', 'country_code' => 'US'],\n            ['name' => 'Bijar', 'country_code' => 'IR'],\n            ['name' => 'Williamsport', 'country_code' => 'US'],\n            ['name' => 'Roxas', 'country_code' => 'PH'],\n            ['name' => 'Neiba', 'country_code' => 'DO'],\n            ['name' => 'Union', 'country_code' => 'US'],\n            ['name' => 'Hagonoy', 'country_code' => 'PH'],\n            ['name' => 'Malay', 'country_code' => 'PH'],\n            ['name' => 'Nordhorn', 'country_code' => 'DE'],\n            ['name' => 'Elyria', 'country_code' => 'US'],\n            ['name' => 'Videira', 'country_code' => 'BR'],\n            ['name' => 'Ibaan', 'country_code' => 'PH'],\n            ['name' => 'Leesburg', 'country_code' => 'US'],\n            ['name' => 'Mount Prospect', 'country_code' => 'US'],\n            ['name' => 'Marco de Canavezes', 'country_code' => 'PT'],\n            ['name' => 'Nebaj', 'country_code' => 'GT'],\n            ['name' => 'Krasnokamsk', 'country_code' => 'RU'],\n            ['name' => 'Upata', 'country_code' => 'VE'],\n            ['name' => 'Port Shepstone', 'country_code' => 'ZA'],\n            ['name' => 'Upi', 'country_code' => 'PH'],\n            ['name' => 'Wetzlar', 'country_code' => 'DE'],\n            ['name' => 'Enerhodar', 'country_code' => 'UA'],\n            ['name' => 'Bristol', 'country_code' => 'US'],\n            ['name' => 'Velletri', 'country_code' => 'IT'],\n            ['name' => 'Pinellas Park', 'country_code' => 'US'],\n            ['name' => 'Frechen', 'country_code' => 'DE'],\n            ['name' => 'Tiwi', 'country_code' => 'PH'],\n            ['name' => 'Neustadt', 'country_code' => 'DE'],\n            ['name' => 'Encarnacion de Diaz', 'country_code' => 'MX'],\n            ['name' => 'Bambang', 'country_code' => 'PH'],\n            ['name' => 'Anzio', 'country_code' => 'IT'],\n            ['name' => 'Acireale', 'country_code' => 'IT'],\n            ['name' => 'Zhangjiazhuang', 'country_code' => 'CN'],\n            ['name' => 'San Bartolome', 'country_code' => 'ES'],\n            ['name' => 'Pijijiapan', 'country_code' => 'MX'],\n            ['name' => 'Bellevue', 'country_code' => 'US'],\n            ['name' => 'West Sacramento', 'country_code' => 'US'],\n            ['name' => 'Gudermes', 'country_code' => 'RU'],\n            ['name' => 'Yangmei', 'country_code' => 'CN'],\n            ['name' => 'Apopka', 'country_code' => 'US'],\n            ['name' => 'Olimpia', 'country_code' => 'BR'],\n            ['name' => 'Barbosa', 'country_code' => 'CO'],\n            ['name' => 'Pryluky', 'country_code' => 'UA'],\n            ['name' => 'Xincheng', 'country_code' => 'CN'],\n            ['name' => 'Lewiston', 'country_code' => 'US'],\n            ['name' => 'Itupiranga', 'country_code' => 'BR'],\n            ['name' => 'San Manuel', 'country_code' => 'PH'],\n            ['name' => 'Lian', 'country_code' => 'PH'],\n            ['name' => 'Santo Estevao', 'country_code' => 'BR'],\n            ['name' => 'Porto Nacional', 'country_code' => 'BR'],\n            ['name' => 'Yaozhuangcun', 'country_code' => 'CN'],\n            ['name' => 'Capivari', 'country_code' => 'BR'],\n            ['name' => 'Sao Bento do Una', 'country_code' => 'BR'],\n            ['name' => 'Millcreek', 'country_code' => 'US'],\n            ['name' => 'Grand Island', 'country_code' => 'US'],\n            ['name' => 'Guiuan', 'country_code' => 'PH'],\n            ['name' => 'Akbou', 'country_code' => 'DZ'],\n            ['name' => 'Tame', 'country_code' => 'CO'],\n            ['name' => 'Palm Desert', 'country_code' => 'US'],\n            ['name' => 'Cangucu', 'country_code' => 'BR'],\n            ['name' => 'Karlovac', 'country_code' => 'HR'],\n            ['name' => 'Vyksa', 'country_code' => 'RU'],\n            ['name' => 'Mulanay', 'country_code' => 'PH'],\n            ['name' => 'Pangantocan', 'country_code' => 'PH'],\n            ['name' => 'Passau', 'country_code' => 'DE'],\n            ['name' => 'Leopoldina', 'country_code' => 'BR'],\n            ['name' => 'Frejus', 'country_code' => 'FR'],\n            ['name' => 'Milford city', 'country_code' => 'US'],\n            ['name' => 'San Severo', 'country_code' => 'IT'],\n            ['name' => 'Watertown', 'country_code' => 'US'],\n            ['name' => 'Acopiara', 'country_code' => 'BR'],\n            ['name' => 'Sagua la Grande', 'country_code' => 'CU'],\n            ['name' => 'Little Elm', 'country_code' => 'US'],\n            ['name' => 'Pasaje', 'country_code' => 'EC'],\n            ['name' => 'Ramon', 'country_code' => 'PH'],\n            ['name' => 'Chambersburg', 'country_code' => 'US'],\n            ['name' => 'Peabody', 'country_code' => 'US'],\n            ['name' => 'Wylie', 'country_code' => 'US'],\n            ['name' => 'Manicore', 'country_code' => 'BR'],\n            ['name' => 'Beaufort', 'country_code' => 'US'],\n            ['name' => 'Arsenyev', 'country_code' => 'RU'],\n            ['name' => 'Torrelavega', 'country_code' => 'ES'],\n            ['name' => 'Mercedes', 'country_code' => 'AR'],\n            ['name' => 'Ahlen', 'country_code' => 'DE'],\n            ['name' => 'DeSoto', 'country_code' => 'US'],\n            ['name' => 'Venkatagiri', 'country_code' => 'IN'],\n            ['name' => 'Sihor', 'country_code' => 'IN'],\n            ['name' => 'Burauen', 'country_code' => 'PH'],\n            ['name' => 'Lorica', 'country_code' => 'CO'],\n            ['name' => 'Tomiya', 'country_code' => 'JP'],\n            ['name' => 'Chone', 'country_code' => 'EC'],\n            ['name' => 'Kobryn', 'country_code' => 'BY'],\n            ['name' => 'Jangaon', 'country_code' => 'IN'],\n            ['name' => 'Poprad', 'country_code' => 'SK'],\n            ['name' => 'Mongagua', 'country_code' => 'BR'],\n            ['name' => 'Edina', 'country_code' => 'US'],\n            ['name' => 'Wolfenbuttel', 'country_code' => 'DE'],\n            ['name' => 'Krasnokamensk', 'country_code' => 'RU'],\n            ['name' => 'Tutoia', 'country_code' => 'BR'],\n            ['name' => 'Rondon do Para', 'country_code' => 'BR'],\n            ['name' => 'Uniao da Vitoria', 'country_code' => 'BR'],\n            ['name' => 'San Jose Villa de Allende', 'country_code' => 'MX'],\n            ['name' => 'Minalabac', 'country_code' => 'PH'],\n            ['name' => 'Minami-Soma', 'country_code' => 'JP'],\n            ['name' => 'Wheaton', 'country_code' => 'US'],\n            ['name' => 'Diffun', 'country_code' => 'PH'],\n            ['name' => 'Thongwa', 'country_code' => 'MM'],\n            ['name' => 'Viana', 'country_code' => 'BR'],\n            ['name' => 'Jaen', 'country_code' => 'PE'],\n            ['name' => 'Granja', 'country_code' => 'BR'],\n            ['name' => 'Alesund', 'country_code' => 'NO'],\n            ['name' => 'Huaiyang', 'country_code' => 'CN'],\n            ['name' => 'Pacora', 'country_code' => 'PA'],\n            ['name' => 'Horishni Plavni', 'country_code' => 'UA'],\n            ['name' => 'An Nabk', 'country_code' => 'SY'],\n            ['name' => 'Bato', 'country_code' => 'PH'],\n            ['name' => 'Alfonso', 'country_code' => 'PH'],\n            ['name' => 'Arles', 'country_code' => 'FR'],\n            ['name' => 'Mandamari', 'country_code' => 'IN'],\n            ['name' => 'Lacey', 'country_code' => 'US'],\n            ['name' => 'Tobias Barreto', 'country_code' => 'BR'],\n            ['name' => 'Ajuy', 'country_code' => 'PH'],\n            ['name' => 'Qabqa', 'country_code' => 'CN'],\n            ['name' => 'Caetite', 'country_code' => 'BR'],\n            ['name' => 'Summerville', 'country_code' => 'US'],\n            ['name' => 'Itabirito', 'country_code' => 'BR'],\n            ['name' => 'Prudentopolis', 'country_code' => 'BR'],\n            ['name' => 'Vyazma', 'country_code' => 'RU'],\n            ['name' => 'San Isidro', 'country_code' => 'PH'],\n            ['name' => 'Boa Viagem', 'country_code' => 'BR'],\n            ['name' => 'Pordenone', 'country_code' => 'IT'],\n            ['name' => 'Parsippany-Troy Hills', 'country_code' => 'US'],\n            ['name' => 'Roman', 'country_code' => 'RO'],\n            ['name' => 'Sape', 'country_code' => 'BR'],\n            ['name' => 'Ibbenburen', 'country_code' => 'DE'],\n            ['name' => 'Kleve', 'country_code' => 'DE'],\n            ['name' => 'Pontevedra', 'country_code' => 'PH'],\n            ['name' => 'Obidos', 'country_code' => 'BR'],\n            ['name' => 'Civitavecchia', 'country_code' => 'IT'],\n            ['name' => 'Welland', 'country_code' => 'CA'],\n            ['name' => 'Jaguariuna', 'country_code' => 'BR'],\n            ['name' => 'Guaxupe', 'country_code' => 'BR'],\n            ['name' => 'Novovolynsk', 'country_code' => 'UA'],\n            ['name' => 'Basankusu', 'country_code' => 'CD'],\n            ['name' => 'Villareal', 'country_code' => 'ES'],\n            ['name' => 'Colmenar Viejo', 'country_code' => 'ES'],\n            ['name' => 'Molave', 'country_code' => 'PH'],\n            ['name' => 'Cruz del Eje', 'country_code' => 'AR'],\n            ['name' => 'Belorechensk', 'country_code' => 'RU'],\n            ['name' => 'Maricopa', 'country_code' => 'US'],\n            ['name' => 'Stratford', 'country_code' => 'US'],\n            ['name' => 'San Joaquin', 'country_code' => 'PH'],\n            ['name' => 'Abdul Hakim', 'country_code' => 'PK'],\n            ['name' => 'Wangjiazhai', 'country_code' => 'CN'],\n            ['name' => 'Albu Kamal', 'country_code' => 'SY'],\n            ['name' => 'San Onofre', 'country_code' => 'CO'],\n            ['name' => 'Porto Feliz', 'country_code' => 'BR'],\n            ['name' => 'Lompoc', 'country_code' => 'US'],\n            ['name' => 'Timashevsk', 'country_code' => 'RU'],\n            ['name' => 'Eilat', 'country_code' => 'IL'],\n            ['name' => 'Metpalli', 'country_code' => 'IN'],\n            ['name' => 'Howell', 'country_code' => 'US'],\n            ['name' => 'Caldas da Rainha', 'country_code' => 'PT'],\n            ['name' => 'Paraiso do Tocantins', 'country_code' => 'BR'],\n            ['name' => 'Cogan', 'country_code' => 'PH'],\n            ['name' => 'Bando', 'country_code' => 'JP'],\n            ['name' => 'Tagkawayan', 'country_code' => 'PH'],\n            ['name' => 'Gwadar', 'country_code' => 'PK'],\n            ['name' => 'Battipaglia', 'country_code' => 'IT'],\n            ['name' => 'Pila', 'country_code' => 'PH'],\n            ['name' => 'Kentwood', 'country_code' => 'US'],\n            ['name' => 'Berriozabal', 'country_code' => 'MX'],\n            ['name' => 'Covilha', 'country_code' => 'PT'],\n            ['name' => 'Coron', 'country_code' => 'PH'],\n            ['name' => 'Lucban', 'country_code' => 'PH'],\n            ['name' => 'Bad Kreuznach', 'country_code' => 'DE'],\n            ['name' => 'Shepparton', 'country_code' => 'AU'],\n            ['name' => 'Shimencun', 'country_code' => 'CN'],\n            ['name' => 'Levittown', 'country_code' => 'US'],\n            ['name' => 'Dumanjog', 'country_code' => 'PH'],\n            ['name' => 'Karvina', 'country_code' => 'CZ'],\n            ['name' => 'Huazangsi', 'country_code' => 'CN'],\n            ['name' => 'Carigara', 'country_code' => 'PH'],\n            ['name' => 'Tsukubamirai', 'country_code' => 'JP'],\n            ['name' => 'Xanxere', 'country_code' => 'BR'],\n            ['name' => 'Pola de Siero', 'country_code' => 'ES'],\n            ['name' => 'Solnechnogorsk', 'country_code' => 'RU'],\n            ['name' => 'Caleta Olivia', 'country_code' => 'AR'],\n            ['name' => 'Sierra Vista', 'country_code' => 'US'],\n            ['name' => 'Laguna', 'country_code' => 'BR'],\n            ['name' => 'Woerden', 'country_code' => 'NL'],\n            ['name' => 'Mazara del Vallo', 'country_code' => 'IT'],\n            ['name' => 'Tulsipur', 'country_code' => 'NP'],\n            ['name' => 'Trento', 'country_code' => 'PH'],\n            ['name' => 'Chieti', 'country_code' => 'IT'],\n            ['name' => 'Rovigo', 'country_code' => 'IT'],\n            ['name' => 'Madison', 'country_code' => 'US'],\n            ['name' => 'Smyrna', 'country_code' => 'US'],\n            ['name' => 'Guarne', 'country_code' => 'CO'],\n            ['name' => 'Speyer', 'country_code' => 'DE'],\n            ['name' => 'North Bay', 'country_code' => 'CA'],\n            ['name' => 'Granadilla de Abona', 'country_code' => 'ES'],\n            ['name' => 'Knysna', 'country_code' => 'ZA'],\n            ['name' => 'Glendora', 'country_code' => 'US'],\n            ['name' => 'Butare', 'country_code' => 'RW'],\n            ['name' => 'El Talar de Pacheco', 'country_code' => 'AR'],\n            ['name' => 'Zhexiang', 'country_code' => 'CN'],\n            ['name' => 'Burien', 'country_code' => 'US'],\n            ['name' => 'Grasse', 'country_code' => 'FR'],\n            ['name' => 'Scandicci', 'country_code' => 'IT'],\n            ['name' => 'Uzlovaya', 'country_code' => 'RU'],\n            ['name' => 'Ribeira do Pombal', 'country_code' => 'BR'],\n            ['name' => 'Trairi', 'country_code' => 'BR'],\n            ['name' => 'Arao', 'country_code' => 'JP'],\n            ['name' => 'Boblingen', 'country_code' => 'DE'],\n            ['name' => 'Satte', 'country_code' => 'JP'],\n            ['name' => 'Tapas', 'country_code' => 'PH'],\n            ['name' => 'Cuyotenango', 'country_code' => 'GT'],\n            ['name' => 'Montijo', 'country_code' => 'PT'],\n            ['name' => 'Jaragua', 'country_code' => 'BR'],\n            ['name' => 'Herriman', 'country_code' => 'US'],\n            ['name' => 'Willich', 'country_code' => 'DE'],\n            ['name' => 'Severomorsk', 'country_code' => 'RU'],\n            ['name' => 'Tadmur', 'country_code' => 'SY'],\n            ['name' => 'Misterbianco', 'country_code' => 'IT'],\n            ['name' => 'Farmington', 'country_code' => 'US'],\n            ['name' => 'New Bern', 'country_code' => 'US'],\n            ['name' => 'Humaita', 'country_code' => 'BR'],\n            ['name' => 'Cheremkhovo', 'country_code' => 'RU'],\n            ['name' => 'Gummersbach', 'country_code' => 'DE'],\n            ['name' => 'Hinesville', 'country_code' => 'US'],\n            ['name' => 'Repalle', 'country_code' => 'IN'],\n            ['name' => 'Snezhinsk', 'country_code' => 'RU'],\n            ['name' => 'Ravensburg', 'country_code' => 'DE'],\n            ['name' => 'Hassan Abdal', 'country_code' => 'PK'],\n            ['name' => 'Douyu', 'country_code' => 'CN'],\n            ['name' => 'Konibodom', 'country_code' => 'TJ'],\n            ['name' => 'Mercedes', 'country_code' => 'PH'],\n            ['name' => 'Sakaidecho', 'country_code' => 'JP'],\n            ['name' => 'Zabid', 'country_code' => 'YE'],\n            ['name' => 'Fangcun', 'country_code' => 'CN'],\n            ['name' => 'Beaumont', 'country_code' => 'US'],\n            ['name' => 'Goslar', 'country_code' => 'DE'],\n            ['name' => 'Horsham', 'country_code' => 'GB'],\n            ['name' => 'Collierville', 'country_code' => 'US'],\n            ['name' => 'Utrera', 'country_code' => 'ES'],\n            ['name' => 'Aurora', 'country_code' => 'PH'],\n            ['name' => 'Campos do Jordao', 'country_code' => 'BR'],\n            ['name' => 'Nazarovo', 'country_code' => 'RU'],\n            ['name' => 'West Lafayette', 'country_code' => 'US'],\n            ['name' => 'Yuki', 'country_code' => 'JP'],\n            ['name' => 'Florissant', 'country_code' => 'US'],\n            ['name' => 'Laval', 'country_code' => 'FR'],\n            ['name' => 'Hoffman Estates', 'country_code' => 'US'],\n            ['name' => 'Mozhga', 'country_code' => 'RU'],\n            ['name' => 'Kirishi', 'country_code' => 'RU'],\n            ['name' => 'El Bagre', 'country_code' => 'CO'],\n            ['name' => 'Ye', 'country_code' => 'MM'],\n            ['name' => 'Queen Creek', 'country_code' => 'US'],\n            ['name' => 'Kizlyar', 'country_code' => 'RU'],\n            ['name' => 'Fafe', 'country_code' => 'PT'],\n            ['name' => 'Bani Walid', 'country_code' => 'LY'],\n            ['name' => 'Kannapolis', 'country_code' => 'US'],\n            ['name' => 'Buenavista', 'country_code' => 'PH'],\n            ['name' => 'Pulawy', 'country_code' => 'PL'],\n            ['name' => 'Turtkul', 'country_code' => 'UZ'],\n            ['name' => 'Beloeil', 'country_code' => 'CA'],\n            ['name' => 'Urbiztondo', 'country_code' => 'PH'],\n            ['name' => 'Longwan', 'country_code' => 'CN'],\n            ['name' => 'Houten', 'country_code' => 'NL'],\n            ['name' => 'Mahalapye', 'country_code' => 'BW'],\n            ['name' => 'Cardona', 'country_code' => 'PH'],\n            ['name' => 'Mweka', 'country_code' => 'CD'],\n            ['name' => 'Belleville', 'country_code' => 'CA'],\n            ['name' => 'Beruniy', 'country_code' => 'UZ'],\n            ['name' => 'Methuen Town', 'country_code' => 'US'],\n            ['name' => 'Santa Lucia del Camino', 'country_code' => 'MX'],\n            ['name' => 'Kulu', 'country_code' => 'TR'],\n            ['name' => 'El Salvador', 'country_code' => 'PH'],\n            ['name' => 'Yasu', 'country_code' => 'JP'],\n            ['name' => 'Baranoa', 'country_code' => 'CO'],\n            ['name' => 'Shakhtarsk', 'country_code' => 'UA'],\n            ['name' => 'La Calera', 'country_code' => 'CL'],\n            ['name' => 'Rastatt', 'country_code' => 'DE'],\n            ['name' => 'Sittard', 'country_code' => 'NL'],\n            ['name' => 'Starogard Gdanski', 'country_code' => 'PL'],\n            ['name' => 'Sahuarita', 'country_code' => 'US'],\n            ['name' => 'Lorrach', 'country_code' => 'DE'],\n            ['name' => 'Cataingan', 'country_code' => 'PH'],\n            ['name' => 'Bani', 'country_code' => 'PH'],\n            ['name' => 'Tebourba', 'country_code' => 'TN'],\n            ['name' => 'Rincon de la Victoria', 'country_code' => 'ES'],\n            ['name' => 'Qinhe', 'country_code' => 'CN'],\n            ['name' => 'Artur Nogueira', 'country_code' => 'BR'],\n            ['name' => 'Traverse City', 'country_code' => 'US'],\n            ['name' => 'Mirabel', 'country_code' => 'CA'],\n            ['name' => 'San Ignacio', 'country_code' => 'PY'],\n            ['name' => 'Severn', 'country_code' => 'US'],\n            ['name' => 'Nova Venecia', 'country_code' => 'BR'],\n            ['name' => 'Catalina Foothills', 'country_code' => 'US'],\n            ['name' => 'Galveston', 'country_code' => 'US'],\n            ['name' => 'Pozi', 'country_code' => 'TW'],\n            ['name' => 'Amora', 'country_code' => 'PT'],\n            ['name' => 'Cookeville', 'country_code' => 'US'],\n            ['name' => 'Chinu', 'country_code' => 'CO'],\n            ['name' => 'Leith', 'country_code' => 'GB'],\n            ['name' => 'Peine', 'country_code' => 'DE'],\n            ['name' => 'Mishawaka', 'country_code' => 'US'],\n            ['name' => 'Emden', 'country_code' => 'DE'],\n            ['name' => 'Ardea', 'country_code' => 'IT'],\n            ['name' => 'Rowland Heights', 'country_code' => 'US'],\n            ['name' => 'Kitaotao', 'country_code' => 'PH'],\n            ['name' => 'Bullhead City', 'country_code' => 'US'],\n            ['name' => 'Irondequoit', 'country_code' => 'US'],\n            ['name' => 'Stillwater', 'country_code' => 'US'],\n            ['name' => 'Cabagan', 'country_code' => 'PH'],\n            ['name' => 'Baicheng', 'country_code' => 'CN'],\n            ['name' => 'Tajura ', 'country_code' => 'LY'],\n            ['name' => 'Macaubas', 'country_code' => 'BR'],\n            ['name' => 'Rivoli', 'country_code' => 'IT'],\n            ['name' => 'Puerto Berrio', 'country_code' => 'CO'],\n            ['name' => 'East Hartford', 'country_code' => 'US'],\n            ['name' => 'Bocaiuva', 'country_code' => 'BR'],\n            ['name' => 'Huanghuajie', 'country_code' => 'CN'],\n            ['name' => 'Forney', 'country_code' => 'US'],\n            ['name' => 'Nanjian', 'country_code' => 'CN'],\n            ['name' => 'Xiazhai', 'country_code' => 'CN'],\n            ['name' => 'Sao Joaquim da Barra', 'country_code' => 'BR'],\n            ['name' => 'Leon', 'country_code' => 'PH'],\n            ['name' => 'Erftstadt', 'country_code' => 'DE'],\n            ['name' => 'Estancia', 'country_code' => 'PH'],\n            ['name' => 'Alta Floresta', 'country_code' => 'BR'],\n            ['name' => 'Mantova', 'country_code' => 'IT'],\n            ['name' => 'Lindong', 'country_code' => 'CN'],\n            ['name' => 'Vargem Grande Paulista', 'country_code' => 'BR'],\n            ['name' => 'Borovichi', 'country_code' => 'RU'],\n            ['name' => 'Itarare', 'country_code' => 'BR'],\n            ['name' => 'Bhainsa', 'country_code' => 'IN'],\n            ['name' => 'Roslavl', 'country_code' => 'RU'],\n            ['name' => 'Beni Yakhlef', 'country_code' => 'MA'],\n            ['name' => 'Gogrial', 'country_code' => 'SS'],\n            ['name' => 'Shankou', 'country_code' => 'CN'],\n            ['name' => 'Miyoshi', 'country_code' => 'JP'],\n            ['name' => 'Novovyatsk', 'country_code' => 'RU'],\n            ['name' => 'Sesto Fiorentino', 'country_code' => 'IT'],\n            ['name' => 'Sardasht', 'country_code' => 'IR'],\n            ['name' => 'Buluan', 'country_code' => 'PH'],\n            ['name' => 'Albi', 'country_code' => 'FR'],\n            ['name' => 'Zaragoza', 'country_code' => 'PH'],\n            ['name' => 'Shawinigan', 'country_code' => 'CA'],\n            ['name' => 'Tepeapulco', 'country_code' => 'MX'],\n            ['name' => 'Donsol', 'country_code' => 'PH'],\n            ['name' => 'Kahemba', 'country_code' => 'CD'],\n            ['name' => 'Porvoo', 'country_code' => 'FI'],\n            ['name' => 'Abu Hamad', 'country_code' => 'SD'],\n            ['name' => 'Chomutov', 'country_code' => 'CZ'],\n            ['name' => 'Nichinan', 'country_code' => 'JP'],\n            ['name' => 'Heidenheim', 'country_code' => 'DE'],\n            ['name' => 'Jiuzhou', 'country_code' => 'CN'],\n            ['name' => 'Azusa', 'country_code' => 'US'],\n            ['name' => 'Upper Buchanan', 'country_code' => 'LR'],\n            ['name' => 'Nahuizalco', 'country_code' => 'SV'],\n            ['name' => 'Barobo', 'country_code' => 'PH'],\n            ['name' => 'Orangetown', 'country_code' => 'US'],\n            ['name' => 'Buguruslan', 'country_code' => 'RU'],\n            ['name' => 'Xankandi', 'country_code' => 'AZ'],\n            ['name' => 'Ibajay', 'country_code' => 'PH'],\n            ['name' => 'Slonim', 'country_code' => 'BY'],\n            ['name' => 'Ramhormoz', 'country_code' => 'IR'],\n            ['name' => 'Nettuno', 'country_code' => 'IT'],\n            ['name' => 'Ashburn', 'country_code' => 'US'],\n            ['name' => 'Bloomsburg', 'country_code' => 'US'],\n            ['name' => 'Moss', 'country_code' => 'NO'],\n            ['name' => 'Titay', 'country_code' => 'PH'],\n            ['name' => 'Bergkamen', 'country_code' => 'DE'],\n            ['name' => 'Gualan', 'country_code' => 'GT'],\n            ['name' => 'Morehead City', 'country_code' => 'US'],\n            ['name' => 'Sesimbra', 'country_code' => 'PT'],\n            ['name' => 'Leonberg', 'country_code' => 'DE'],\n            ['name' => 'Suzaka', 'country_code' => 'JP'],\n            ['name' => 'IJmuiden', 'country_code' => 'NL'],\n            ['name' => 'Tomisato', 'country_code' => 'JP'],\n            ['name' => 'Ridder', 'country_code' => 'KZ'],\n            ['name' => 'Coral Gables', 'country_code' => 'US'],\n            ['name' => 'Guacharachi', 'country_code' => 'MX'],\n            ['name' => 'Ifakara', 'country_code' => 'TZ'],\n            ['name' => 'Chioggia', 'country_code' => 'IT'],\n            ['name' => 'Enid', 'country_code' => 'US'],\n            ['name' => 'Zyryanovsk', 'country_code' => 'KZ'],\n            ['name' => 'Zongshizhuang', 'country_code' => 'CN'],\n            ['name' => 'Cimitarra', 'country_code' => 'CO'],\n            ['name' => 'Berber', 'country_code' => 'SD'],\n            ['name' => 'Tokamachi', 'country_code' => 'JP'],\n            ['name' => 'Maria la Baja', 'country_code' => 'CO'],\n            ['name' => 'Liujiaxia', 'country_code' => 'CN'],\n            ['name' => 'Hikari', 'country_code' => 'JP'],\n            ['name' => 'Wofotang', 'country_code' => 'CN'],\n            ['name' => 'Oroville', 'country_code' => 'US'],\n            ['name' => 'Evreux', 'country_code' => 'FR'],\n            ['name' => 'Ozgon', 'country_code' => 'KG'],\n            ['name' => 'Adeje', 'country_code' => 'ES'],\n            ['name' => 'Wilson', 'country_code' => 'US'],\n            ['name' => 'Okhtyrka', 'country_code' => 'UA'],\n            ['name' => 'Padre Garcia', 'country_code' => 'PH'],\n            ['name' => 'Lawrence', 'country_code' => 'US'],\n            ['name' => 'Donglizhuang', 'country_code' => 'CN'],\n            ['name' => 'Bad Oeynhausen', 'country_code' => 'DE'],\n            ['name' => 'Villaguay', 'country_code' => 'AR'],\n            ['name' => 'Muhanga', 'country_code' => 'RW'],\n            ['name' => 'Jiashizhuang', 'country_code' => 'CN'],\n            ['name' => 'Portage', 'country_code' => 'US'],\n            ['name' => 'Christchurch', 'country_code' => 'GB'],\n            ['name' => 'Nomimachi', 'country_code' => 'JP'],\n            ['name' => 'Albury', 'country_code' => 'AU'],\n            ['name' => 'Minot', 'country_code' => 'US'],\n            ['name' => 'Empoli', 'country_code' => 'IT'],\n            ['name' => 'Samaniego', 'country_code' => 'CO'],\n            ['name' => 'Cwmbran', 'country_code' => 'GB'],\n            ['name' => 'Yong an', 'country_code' => 'CN'],\n            ['name' => 'Pasacao', 'country_code' => 'PH'],\n            ['name' => 'Changyon', 'country_code' => 'KP'],\n            ['name' => 'Dunwoody', 'country_code' => 'US'],\n            ['name' => 'Ad Darwa', 'country_code' => 'MA'],\n            ['name' => 'Beberibe', 'country_code' => 'BR'],\n            ['name' => 'Poway', 'country_code' => 'US'],\n            ['name' => 'Libertador General San Martin', 'country_code' => 'AR'],\n            ['name' => 'Haverford', 'country_code' => 'US'],\n            ['name' => 'Monopoli', 'country_code' => 'IT'],\n            ['name' => 'Magpet', 'country_code' => 'PH'],\n            ['name' => 'Agustin Codazzi', 'country_code' => 'CO'],\n            ['name' => 'Santa Rosa', 'country_code' => 'EC'],\n            ['name' => 'Prievidza', 'country_code' => 'SK'],\n            ['name' => 'Lecco', 'country_code' => 'IT'],\n            ['name' => 'San Jacinto', 'country_code' => 'US'],\n            ['name' => 'San Benedetto del Tronto', 'country_code' => 'IT'],\n            ['name' => 'Lesnoy', 'country_code' => 'RU'],\n            ['name' => 'Carmen de Viboral', 'country_code' => 'CO'],\n            ['name' => 'Freising', 'country_code' => 'DE'],\n            ['name' => 'Palencia', 'country_code' => 'GT'],\n            ['name' => 'Troy', 'country_code' => 'US'],\n            ['name' => 'Newark', 'country_code' => 'US'],\n            ['name' => 'Starachowice', 'country_code' => 'PL'],\n            ['name' => 'Kalamansig', 'country_code' => 'PH'],\n            ['name' => 'La Reja', 'country_code' => 'AR'],\n            ['name' => 'Cuyahoga Falls', 'country_code' => 'US'],\n            ['name' => 'Ascoli Piceno', 'country_code' => 'IT'],\n            ['name' => 'Lower Paxton', 'country_code' => 'US'],\n            ['name' => 'Rheda-Wiedenbruck', 'country_code' => 'DE'],\n            ['name' => 'Downers Grove', 'country_code' => 'US'],\n            ['name' => 'Jales', 'country_code' => 'BR'],\n            ['name' => 'Libungan', 'country_code' => 'PH'],\n            ['name' => 'Bedford', 'country_code' => 'US'],\n            ['name' => 'Reedley', 'country_code' => 'US'],\n            ['name' => 'Dublin', 'country_code' => 'US'],\n            ['name' => 'Marana', 'country_code' => 'US'],\n            ['name' => 'Kiblawan', 'country_code' => 'PH'],\n            ['name' => 'Hamtic', 'country_code' => 'PH'],\n            ['name' => 'Al Mayadin', 'country_code' => 'SY'],\n            ['name' => 'Claveria', 'country_code' => 'PH'],\n            ['name' => 'Huaquillas', 'country_code' => 'EC'],\n            ['name' => 'Martina Franca', 'country_code' => 'IT'],\n            ['name' => 'Sao Goncalo do Amarante', 'country_code' => 'BR'],\n            ['name' => 'Murray', 'country_code' => 'US'],\n            ['name' => 'Bornheim', 'country_code' => 'DE'],\n            ['name' => 'Omitama', 'country_code' => 'JP'],\n            ['name' => 'Roswell', 'country_code' => 'US'],\n            ['name' => 'Pascagoula', 'country_code' => 'US'],\n            ['name' => 'Martigues', 'country_code' => 'FR'],\n            ['name' => 'Waingapu', 'country_code' => 'ID'],\n            ['name' => 'Brandon', 'country_code' => 'CA'],\n            ['name' => 'Batajnica', 'country_code' => 'RS'],\n            ['name' => 'Bom Conselho', 'country_code' => 'BR'],\n            ['name' => 'Sanare', 'country_code' => 'VE'],\n            ['name' => 'Tuckahoe', 'country_code' => 'US'],\n            ['name' => 'Poblacion', 'country_code' => 'PH'],\n            ['name' => 'El Jem', 'country_code' => 'TN'],\n            ['name' => 'Dachau', 'country_code' => 'DE'],\n            ['name' => 'Suwa', 'country_code' => 'JP'],\n            ['name' => 'Ami', 'country_code' => 'JP'],\n            ['name' => 'Jasdan', 'country_code' => 'IN'],\n            ['name' => 'Ladysmith', 'country_code' => 'ZA'],\n            ['name' => 'Kozlu', 'country_code' => 'TR'],\n            ['name' => 'Minalin', 'country_code' => 'PH'],\n            ['name' => 'Alaminos', 'country_code' => 'PH'],\n            ['name' => 'Gronau', 'country_code' => 'DE'],\n            ['name' => 'Garmsar', 'country_code' => 'IR'],\n            ['name' => 'Settimo Torinese', 'country_code' => 'IT'],\n            ['name' => ' Ain Azel', 'country_code' => 'DZ'],\n            ['name' => 'Wakema', 'country_code' => 'MM'],\n            ['name' => 'Port Macquarie', 'country_code' => 'AU'],\n            ['name' => 'Rimouski', 'country_code' => 'CA'],\n            ['name' => 'St. Louis Park', 'country_code' => 'US'],\n            ['name' => 'Cuxhaven', 'country_code' => 'DE'],\n            ['name' => 'Angol', 'country_code' => 'CL'],\n            ['name' => 'San Narciso', 'country_code' => 'PH'],\n            ['name' => 'Penablanca', 'country_code' => 'PH'],\n            ['name' => 'Yarumal', 'country_code' => 'CO'],\n            ['name' => 'Namtu', 'country_code' => 'MM'],\n            ['name' => 'Rio Grande City', 'country_code' => 'US'],\n            ['name' => 'Matay', 'country_code' => 'EG'],\n            ['name' => 'Draper', 'country_code' => 'US'],\n            ['name' => 'Gava', 'country_code' => 'ES'],\n            ['name' => 'Rumia', 'country_code' => 'PL'],\n            ['name' => 'Dongshan', 'country_code' => 'CN'],\n            ['name' => 'Harderwijk', 'country_code' => 'NL'],\n            ['name' => 'Sibonga', 'country_code' => 'PH'],\n            ['name' => 'Corato', 'country_code' => 'IT'],\n            ['name' => 'Kolobrzeg', 'country_code' => 'PL'],\n            ['name' => 'Zutphen', 'country_code' => 'NL'],\n            ['name' => 'Sanmu', 'country_code' => 'JP'],\n            ['name' => 'Palm Springs', 'country_code' => 'US'],\n            ['name' => 'Beveren', 'country_code' => 'BE'],\n            ['name' => 'Kurganinsk', 'country_code' => 'RU'],\n            ['name' => 'Alsdorf', 'country_code' => 'DE'],\n            ['name' => 'Straubing', 'country_code' => 'DE'],\n            ['name' => 'San Pedro Mixtepec', 'country_code' => 'MX'],\n            ['name' => 'Paducah', 'country_code' => 'US'],\n            ['name' => ' Akko', 'country_code' => 'IL'],\n            ['name' => 'Baiao', 'country_code' => 'BR'],\n            ['name' => 'Findlay', 'country_code' => 'US'],\n            ['name' => 'Ishigaki', 'country_code' => 'JP'],\n            ['name' => 'Dornbirn', 'country_code' => 'AT'],\n            ['name' => 'Damavand', 'country_code' => 'IR'],\n            ['name' => 'Bel Air South', 'country_code' => 'US'],\n            ['name' => 'Bulungu', 'country_code' => 'CD'],\n            ['name' => 'Kyle', 'country_code' => 'US'],\n            ['name' => 'Tarnobrzeg', 'country_code' => 'PL'],\n            ['name' => 'Longtoushan Jiezi', 'country_code' => 'CN'],\n            ['name' => 'Decin', 'country_code' => 'CZ'],\n            ['name' => 'Durham', 'country_code' => 'GB'],\n            ['name' => 'Xique-Xique', 'country_code' => 'BR'],\n            ['name' => 'Campi Bisenzio', 'country_code' => 'IT'],\n            ['name' => 'Santa Catarina Ixtahuacan', 'country_code' => 'GT'],\n            ['name' => 'Monroe', 'country_code' => 'US'],\n            ['name' => 'Rio Grande da Serra', 'country_code' => 'BR'],\n            ['name' => 'Beypazari', 'country_code' => 'TR'],\n            ['name' => 'Zhujiacun', 'country_code' => 'CN'],\n            ['name' => 'Lincoln', 'country_code' => 'US'],\n            ['name' => 'Pangkou', 'country_code' => 'CN'],\n            ['name' => 'Turda', 'country_code' => 'RO'],\n            ['name' => 'Ocoee', 'country_code' => 'US'],\n            ['name' => 'Brianka', 'country_code' => 'UA'],\n            ['name' => 'Burleson', 'country_code' => 'US'],\n            ['name' => 'Mauriti', 'country_code' => 'BR'],\n            ['name' => 'Kita', 'country_code' => 'ML'],\n            ['name' => 'Finike', 'country_code' => 'TR'],\n            ['name' => 'Donetsk', 'country_code' => 'RU'],\n            ['name' => 'Alta Gracia', 'country_code' => 'AR'],\n            ['name' => 'Shimotsucho-kominami', 'country_code' => 'JP'],\n            ['name' => 'Farmers Branch', 'country_code' => 'US'],\n            ['name' => 'Paterno', 'country_code' => 'IT'],\n            ['name' => 'Semara', 'country_code' => 'MA'],\n            ['name' => 'East Lansing', 'country_code' => 'US'],\n            ['name' => 'Uniontown', 'country_code' => 'US'],\n            ['name' => 'Yongping', 'country_code' => 'CN'],\n            ['name' => 'Kashira', 'country_code' => 'RU'],\n            ['name' => 'Shelekhov', 'country_code' => 'RU'],\n            ['name' => 'Jeffersonville', 'country_code' => 'US'],\n            ['name' => 'Winder', 'country_code' => 'US'],\n            ['name' => 'Wauwatosa', 'country_code' => 'US'],\n            ['name' => 'Asturias', 'country_code' => 'PH'],\n            ['name' => 'Sison', 'country_code' => 'PH'],\n            ['name' => 'Presidente Dutra', 'country_code' => 'BR'],\n            ['name' => 'Vila Verde', 'country_code' => 'PT'],\n            ['name' => 'Ena', 'country_code' => 'JP'],\n            ['name' => 'Mengmeng', 'country_code' => 'CN'],\n            ['name' => 'Ridderkerk', 'country_code' => 'NL'],\n            ['name' => 'Skierniewice', 'country_code' => 'PL'],\n            ['name' => 'Littleton', 'country_code' => 'US'],\n            ['name' => 'General Tinio', 'country_code' => 'PH'],\n            ['name' => 'Amulung', 'country_code' => 'PH'],\n            ['name' => 'Otradnyy', 'country_code' => 'RU'],\n            ['name' => 'Aringay', 'country_code' => 'PH'],\n            ['name' => 'Soest', 'country_code' => 'DE'],\n            ['name' => 'Tonami', 'country_code' => 'JP'],\n            ['name' => 'Conceicao do Araguaia', 'country_code' => 'BR'],\n            ['name' => 'Cumberland', 'country_code' => 'US'],\n            ['name' => 'Higashine', 'country_code' => 'JP'],\n            ['name' => 'Mapastepec', 'country_code' => 'MX'],\n            ['name' => 'Monte Carmelo', 'country_code' => 'BR'],\n            ['name' => 'San Francisco', 'country_code' => 'GT'],\n            ['name' => 'Stade', 'country_code' => 'DE'],\n            ['name' => 'Diamantina', 'country_code' => 'BR'],\n            ['name' => 'Medias', 'country_code' => 'RO'],\n            ['name' => 'Cedar Hill', 'country_code' => 'US'],\n            ['name' => 'Santana do Ipanema', 'country_code' => 'BR'],\n            ['name' => 'Carrollton', 'country_code' => 'US'],\n            ['name' => 'Impasugong', 'country_code' => 'PH'],\n            ['name' => 'Golpayegan', 'country_code' => 'IR'],\n            ['name' => 'Charleville-Mezieres', 'country_code' => 'FR'],\n            ['name' => 'Dila', 'country_code' => 'ET'],\n            ['name' => 'Rancho Santa Margarita', 'country_code' => 'US'],\n            ['name' => 'Jiquilisco', 'country_code' => 'SV'],\n            ['name' => 'Pakenham', 'country_code' => 'AU'],\n            ['name' => 'Lousada', 'country_code' => 'PT'],\n            ['name' => 'Brive-la-Gaillarde', 'country_code' => 'FR'],\n            ['name' => 'Santa Ignacia', 'country_code' => 'PH'],\n            ['name' => 'Masinloc', 'country_code' => 'PH'],\n            ['name' => 'Kuilsrivier', 'country_code' => 'ZA'],\n            ['name' => 'Yecun', 'country_code' => 'CN'],\n            ['name' => 'Cornelio Procopio', 'country_code' => 'BR'],\n            ['name' => 'Atalaia', 'country_code' => 'BR'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'East Brunswick', 'country_code' => 'US'],\n            ['name' => 'Luwuk', 'country_code' => 'ID'],\n            ['name' => 'Bantacan', 'country_code' => 'PH'],\n            ['name' => 'Saint-Herblain', 'country_code' => 'FR'],\n            ['name' => 'Tuba', 'country_code' => 'PH'],\n            ['name' => 'Penco', 'country_code' => 'CL'],\n            ['name' => 'Herzogenrath', 'country_code' => 'DE'],\n            ['name' => 'Ribeirao', 'country_code' => 'BR'],\n            ['name' => 'Caramoan', 'country_code' => 'PH'],\n            ['name' => 'Vyshniy Volochek', 'country_code' => 'RU'],\n            ['name' => 'Saint-Priest', 'country_code' => 'FR'],\n            ['name' => 'Al Madrah Sama il', 'country_code' => 'OM'],\n            ['name' => 'Al Majma ah', 'country_code' => 'SA'],\n            ['name' => 'Beavercreek', 'country_code' => 'US'],\n            ['name' => 'Joao Pinheiro', 'country_code' => 'BR'],\n            ['name' => 'Dulag', 'country_code' => 'PH'],\n            ['name' => 'Niagara Falls', 'country_code' => 'US'],\n            ['name' => 'Hitachi-ota', 'country_code' => 'JP'],\n            ['name' => 'Snizhne', 'country_code' => 'UA'],\n            ['name' => 'Amahai', 'country_code' => 'ID'],\n            ['name' => 'McLean', 'country_code' => 'US'],\n            ['name' => 'Ipiau', 'country_code' => 'BR'],\n            ['name' => 'Rieti', 'country_code' => 'IT'],\n            ['name' => 'President Roxas', 'country_code' => 'PH'],\n            ['name' => ' Amuda', 'country_code' => 'SY'],\n            ['name' => 'Isabel', 'country_code' => 'PH'],\n            ['name' => 'Dumingag', 'country_code' => 'PH'],\n            ['name' => 'San Lorenzo', 'country_code' => 'AR'],\n            ['name' => 'Chaidari', 'country_code' => 'GR'],\n            ['name' => 'East Providence', 'country_code' => 'US'],\n            ['name' => 'Jitaicun', 'country_code' => 'CN'],\n            ['name' => 'Kafue', 'country_code' => 'ZM'],\n            ['name' => 'Kutno', 'country_code' => 'PL'],\n            ['name' => 'Livny', 'country_code' => 'RU'],\n            ['name' => 'Azna', 'country_code' => 'IR'],\n            ['name' => 'East Honolulu', 'country_code' => 'US'],\n            ['name' => 'Chesterfield', 'country_code' => 'US'],\n            ['name' => 'La Vega', 'country_code' => 'CO'],\n            ['name' => 'Capao Bonito', 'country_code' => 'BR'],\n            ['name' => 'San Pedro', 'country_code' => 'AR'],\n            ['name' => 'San Jose Pinula', 'country_code' => 'GT'],\n            ['name' => 'Ban Plai Bua Phatthana', 'country_code' => 'TH'],\n            ['name' => 'Santa Ana Chiautempan', 'country_code' => 'MX'],\n            ['name' => 'Lohja', 'country_code' => 'FI'],\n            ['name' => 'Qingyuan', 'country_code' => 'CN'],\n            ['name' => 'San Andres de Sotavento', 'country_code' => 'CO'],\n            ['name' => 'Sanski Most', 'country_code' => 'BA'],\n            ['name' => 'Chaparral', 'country_code' => 'CO'],\n            ['name' => 'Bothell', 'country_code' => 'US'],\n            ['name' => 'Jobabo', 'country_code' => 'CU'],\n            ['name' => 'Villa Constitucion', 'country_code' => 'AR'],\n            ['name' => 'Andes', 'country_code' => 'CO'],\n            ['name' => 'Saint-Malo', 'country_code' => 'FR'],\n            ['name' => 'West Orange', 'country_code' => 'US'],\n            ['name' => 'Ouled Moussa', 'country_code' => 'DZ'],\n            ['name' => 'Tangdukou', 'country_code' => 'CN'],\n            ['name' => 'Kingisepp', 'country_code' => 'RU'],\n            ['name' => 'Talghar', 'country_code' => 'KZ'],\n            ['name' => 'Liulin', 'country_code' => 'CN'],\n            ['name' => 'Fellbach', 'country_code' => 'DE'],\n            ['name' => 'Daxiang', 'country_code' => 'CN'],\n            ['name' => 'Yabrud', 'country_code' => 'SY'],\n            ['name' => 'Blois', 'country_code' => 'FR'],\n            ['name' => 'Tomioka', 'country_code' => 'JP'],\n            ['name' => 'Glenview', 'country_code' => 'US'],\n            ['name' => 'Ban Bang Mae Nang', 'country_code' => 'TH'],\n            ['name' => 'Yehe', 'country_code' => 'CN'],\n            ['name' => 'Tursunzoda', 'country_code' => 'TJ'],\n            ['name' => 'Ayapel', 'country_code' => 'CO'],\n            ['name' => 'Oberursel', 'country_code' => 'DE'],\n            ['name' => 'Mentor', 'country_code' => 'US'],\n            ['name' => 'Antalaha', 'country_code' => 'MG'],\n            ['name' => 'Mabini', 'country_code' => 'PH'],\n            ['name' => 'Puertollano', 'country_code' => 'ES'],\n            ['name' => 'Landau', 'country_code' => 'DE'],\n            ['name' => 'Keller', 'country_code' => 'US'],\n            ['name' => 'Barras', 'country_code' => 'BR'],\n            ['name' => 'Zarzal', 'country_code' => 'CO'],\n            ['name' => 'Douz', 'country_code' => 'TN'],\n            ['name' => 'Zarinsk', 'country_code' => 'RU'],\n            ['name' => 'Huatan', 'country_code' => 'TW'],\n            ['name' => 'Marhanets', 'country_code' => 'UA'],\n            ['name' => 'Schwerte', 'country_code' => 'DE'],\n            ['name' => 'Poso', 'country_code' => 'ID'],\n            ['name' => 'Urrao', 'country_code' => 'CO'],\n            ['name' => 'Tres Arroyos', 'country_code' => 'AR'],\n            ['name' => 'Aubagne', 'country_code' => 'FR'],\n            ['name' => 'Nysa', 'country_code' => 'PL'],\n            ['name' => 'Calimaya', 'country_code' => 'MX'],\n            ['name' => 'Ha Tien', 'country_code' => 'VN'],\n            ['name' => 'Neunkirchen', 'country_code' => 'DE'],\n            ['name' => 'Qiutouzhen', 'country_code' => 'CN'],\n            ['name' => 'Danville', 'country_code' => 'US'],\n            ['name' => 'Noboribetsu', 'country_code' => 'JP'],\n            ['name' => 'Guajara-Mirim', 'country_code' => 'BR'],\n            ['name' => 'Frosinone', 'country_code' => 'IT'],\n            ['name' => 'Pio Duran', 'country_code' => 'PH'],\n            ['name' => 'Spring Hill', 'country_code' => 'US'],\n            ['name' => 'Al Qusayr', 'country_code' => 'SY'],\n            ['name' => 'Norala', 'country_code' => 'PH'],\n            ['name' => 'Roseville', 'country_code' => 'US'],\n            ['name' => 'Cubulco', 'country_code' => 'GT'],\n            ['name' => 'Wangtan', 'country_code' => 'CN'],\n            ['name' => 'Roldanillo', 'country_code' => 'CO'],\n            ['name' => 'Filderstadt', 'country_code' => 'DE'],\n            ['name' => 'Siocon', 'country_code' => 'PH'],\n            ['name' => 'Fastiv', 'country_code' => 'UA'],\n            ['name' => 'Nanzhuangzhen', 'country_code' => 'CN'],\n            ['name' => 'Tocoa', 'country_code' => 'HN'],\n            ['name' => 'Yashan', 'country_code' => 'CN'],\n            ['name' => 'Valencia', 'country_code' => 'CO'],\n            ['name' => 'Nakai', 'country_code' => 'JP'],\n            ['name' => 'Agrinio', 'country_code' => 'GR'],\n            ['name' => 'Talisay', 'country_code' => 'PH'],\n            ['name' => 'Lukavac', 'country_code' => 'BA'],\n            ['name' => 'San Pascual', 'country_code' => 'PH'],\n            ['name' => 'Dongzhuosu', 'country_code' => 'CN'],\n            ['name' => 'Dulmen', 'country_code' => 'DE'],\n            ['name' => 'Shimeo', 'country_code' => 'JP'],\n            ['name' => 'Rosario', 'country_code' => 'PH'],\n            ['name' => 'Fangguan', 'country_code' => 'CN'],\n            ['name' => 'Lubny', 'country_code' => 'UA'],\n            ['name' => 'Tamagawa', 'country_code' => 'JP'],\n            ['name' => 'San Francisco de los Romo', 'country_code' => 'MX'],\n            ['name' => 'Pontevedra', 'country_code' => 'PH'],\n            ['name' => 'Berezovskiy', 'country_code' => 'RU'],\n            ['name' => 'Jablonec nad Nisou', 'country_code' => 'CZ'],\n            ['name' => 'Vercelli', 'country_code' => 'IT'],\n            ['name' => 'Mahayag', 'country_code' => 'PH'],\n            ['name' => 'Elmhurst', 'country_code' => 'US'],\n            ['name' => 'Carcassonne', 'country_code' => 'FR'],\n            ['name' => 'Sao Mateus do Sul', 'country_code' => 'BR'],\n            ['name' => 'Niquelandia', 'country_code' => 'BR'],\n            ['name' => 'Hof', 'country_code' => 'DE'],\n            ['name' => 'Veldhoven', 'country_code' => 'NL'],\n            ['name' => 'Dauis', 'country_code' => 'PH'],\n            ['name' => 'Medianeira', 'country_code' => 'BR'],\n            ['name' => 'Cabreuva', 'country_code' => 'BR'],\n            ['name' => 'New Philadelphia', 'country_code' => 'US'],\n            ['name' => 'Melle', 'country_code' => 'DE'],\n            ['name' => 'Santa Cruz do Rio Pardo', 'country_code' => 'BR'],\n            ['name' => 'Perinton', 'country_code' => 'US'],\n            ['name' => 'Terracina', 'country_code' => 'IT'],\n            ['name' => 'Sandusky', 'country_code' => 'US'],\n            ['name' => 'Puerto Villarroel', 'country_code' => 'BO'],\n            ['name' => 'Jocotepec', 'country_code' => 'MX'],\n            ['name' => 'Shimenzhai', 'country_code' => 'CN'],\n            ['name' => 'Eusebio', 'country_code' => 'BR'],\n            ['name' => 'Hyvinkaa', 'country_code' => 'FI'],\n            ['name' => 'El Dorado Hills', 'country_code' => 'US'],\n            ['name' => 'Cornwall', 'country_code' => 'CA'],\n            ['name' => 'Puerto Tejada', 'country_code' => 'CO'],\n            ['name' => 'Morrinhos', 'country_code' => 'BR'],\n            ['name' => 'Salina', 'country_code' => 'US'],\n            ['name' => 'Euclid', 'country_code' => 'US'],\n            ['name' => 'Gryazi', 'country_code' => 'RU'],\n            ['name' => 'Kingman', 'country_code' => 'US'],\n            ['name' => 'Augusto Correa', 'country_code' => 'BR'],\n            ['name' => 'Sena Madureira', 'country_code' => 'BR'],\n            ['name' => 'Panay', 'country_code' => 'PH'],\n            ['name' => 'Fray Bartolome de Las Casas', 'country_code' => 'GT'],\n            ['name' => 'Carmen', 'country_code' => 'PH'],\n            ['name' => 'Dendermonde', 'country_code' => 'BE'],\n            ['name' => 'Sirinhaem', 'country_code' => 'BR'],\n            ['name' => 'Albuera', 'country_code' => 'PH'],\n            ['name' => 'Kilmarnock', 'country_code' => 'GB'],\n            ['name' => 'Ayungon', 'country_code' => 'PH'],\n            ['name' => 'Berekum', 'country_code' => 'GH'],\n            ['name' => 'Tibigan', 'country_code' => 'PH'],\n            ['name' => 'Chalons-en-Champagne', 'country_code' => 'FR'],\n            ['name' => 'Rio Tercero', 'country_code' => 'AR'],\n            ['name' => 'Kurayoshi', 'country_code' => 'JP'],\n            ['name' => 'Montecristi', 'country_code' => 'EC'],\n            ['name' => 'Kasaoka', 'country_code' => 'JP'],\n            ['name' => 'Torzhok', 'country_code' => 'RU'],\n            ['name' => 'Zwijndrecht', 'country_code' => 'NL'],\n            ['name' => 'Chichigalpa', 'country_code' => 'NI'],\n            ['name' => 'Gotha', 'country_code' => 'DE'],\n            ['name' => 'Anshan', 'country_code' => 'CN'],\n            ['name' => 'Capannori', 'country_code' => 'IT'],\n            ['name' => 'Tingo Maria', 'country_code' => 'PE'],\n            ['name' => 'Dumarao', 'country_code' => 'PH'],\n            ['name' => 'Tallbisah', 'country_code' => 'SY'],\n            ['name' => 'Jammalamadugu', 'country_code' => 'IN'],\n            ['name' => 'Lodi', 'country_code' => 'IT'],\n            ['name' => 'Farmington', 'country_code' => 'US'],\n            ['name' => 'Ocampo', 'country_code' => 'PH'],\n            ['name' => 'Santiago Atitlan', 'country_code' => 'GT'],\n            ['name' => 'Santo Antonio da Platina', 'country_code' => 'BR'],\n            ['name' => 'Takashima', 'country_code' => 'JP'],\n            ['name' => 'Marino', 'country_code' => 'IT'],\n            ['name' => 'Bunde', 'country_code' => 'DE'],\n            ['name' => 'Weatherford', 'country_code' => 'US'],\n            ['name' => 'Middletown', 'country_code' => 'US'],\n            ['name' => 'Inabanga', 'country_code' => 'PH'],\n            ['name' => 'Mairinque', 'country_code' => 'BR'],\n            ['name' => 'Roseburg', 'country_code' => 'US'],\n            ['name' => 'Biloxi', 'country_code' => 'US'],\n            ['name' => 'Maragogipe', 'country_code' => 'BR'],\n            ['name' => 'Wittenberg', 'country_code' => 'DE'],\n            ['name' => 'Roskilde', 'country_code' => 'DK'],\n            ['name' => 'Leavenworth', 'country_code' => 'US'],\n            ['name' => 'Megion', 'country_code' => 'RU'],\n            ['name' => 'Salon-de-Provence', 'country_code' => 'FR'],\n            ['name' => 'Bajil', 'country_code' => 'YE'],\n            ['name' => 'Manono', 'country_code' => 'CD'],\n            ['name' => 'Xingji', 'country_code' => 'CN'],\n            ['name' => 'Hokota', 'country_code' => 'JP'],\n            ['name' => 'Pontal', 'country_code' => 'BR'],\n            ['name' => 'Aksay', 'country_code' => 'RU'],\n            ['name' => 'Fort Pierce', 'country_code' => 'US'],\n            ['name' => 'Shima', 'country_code' => 'JP'],\n            ['name' => 'Weinheim', 'country_code' => 'DE'],\n            ['name' => 'Livramento de Nossa Senhora', 'country_code' => 'BR'],\n            ['name' => 'Barotac Viejo', 'country_code' => 'PH'],\n            ['name' => 'Winter Garden', 'country_code' => 'US'],\n            ['name' => 'Mlada Boleslav', 'country_code' => 'CZ'],\n            ['name' => 'Oro Valley', 'country_code' => 'US'],\n            ['name' => 'Ourem', 'country_code' => 'PT'],\n            ['name' => 'Santa Rosa del Sur', 'country_code' => 'CO'],\n            ['name' => 'Erkrath', 'country_code' => 'DE'],\n            ['name' => 'Freeport City', 'country_code' => 'BS'],\n            ['name' => 'Iranduba', 'country_code' => 'BR'],\n            ['name' => 'Caiguantun', 'country_code' => 'CN'],\n            ['name' => 'Guaramirim', 'country_code' => 'BR'],\n            ['name' => 'Wao', 'country_code' => 'PH'],\n            ['name' => 'Morgan Hill', 'country_code' => 'US'],\n            ['name' => 'Ciudad Constitucion', 'country_code' => 'MX'],\n            ['name' => 'Haymana', 'country_code' => 'TR'],\n            ['name' => 'Potomac', 'country_code' => 'US'],\n            ['name' => 'Pinehurst', 'country_code' => 'US'],\n            ['name' => 'Chippenham', 'country_code' => 'GB'],\n            ['name' => 'Changchong', 'country_code' => 'CN'],\n            ['name' => 'Rodgau', 'country_code' => 'DE'],\n            ['name' => 'Winchester', 'country_code' => 'GB'],\n            ['name' => 'Danville', 'country_code' => 'US'],\n            ['name' => 'Rockwall', 'country_code' => 'US'],\n            ['name' => 'Mata de Sao Joao', 'country_code' => 'BR'],\n            ['name' => 'Pilar', 'country_code' => 'PH'],\n            ['name' => 'Dracena', 'country_code' => 'BR'],\n            ['name' => 'Xisa', 'country_code' => 'CN'],\n            ['name' => 'Salvador', 'country_code' => 'CU'],\n            ['name' => 'Stouffville', 'country_code' => 'CA'],\n            ['name' => 'Kariya', 'country_code' => 'JP'],\n            ['name' => 'Dingle', 'country_code' => 'PH'],\n            ['name' => 'Cascina', 'country_code' => 'IT'],\n            ['name' => 'Pontes e Lacerda', 'country_code' => 'BR'],\n            ['name' => 'Hokuto', 'country_code' => 'JP'],\n            ['name' => 'Katipunan', 'country_code' => 'PH'],\n            ['name' => 'Coachella', 'country_code' => 'US'],\n            ['name' => 'Olhao', 'country_code' => 'PT'],\n            ['name' => 'Baijie', 'country_code' => 'CN'],\n            ['name' => 'Jones', 'country_code' => 'PH'],\n            ['name' => 'Malinao', 'country_code' => 'PH'],\n            ['name' => 'Salcedo', 'country_code' => 'DO'],\n            ['name' => 'Remedios', 'country_code' => 'CU'],\n            ['name' => 'Sao Bento', 'country_code' => 'BR'],\n            ['name' => 'New Washington', 'country_code' => 'PH'],\n            ['name' => 'Rameswaram', 'country_code' => 'IN'],\n            ['name' => 'Albstadt', 'country_code' => 'DE'],\n            ['name' => 'Cuautepec de Hinojosa', 'country_code' => 'MX'],\n            ['name' => 'Wake Forest', 'country_code' => 'US'],\n            ['name' => 'Bruhl', 'country_code' => 'DE'],\n            ['name' => 'Alcamo', 'country_code' => 'IT'],\n            ['name' => 'Saint-Germain-en-Laye', 'country_code' => 'FR'],\n            ['name' => 'San Pedro Ayampuc', 'country_code' => 'GT'],\n            ['name' => 'Odiongan', 'country_code' => 'PH'],\n            ['name' => 'Pearl City', 'country_code' => 'US'],\n            ['name' => 'Beaufort West', 'country_code' => 'ZA'],\n            ['name' => 'Rada ', 'country_code' => 'YE'],\n            ['name' => 'Aliwal North', 'country_code' => 'ZA'],\n            ['name' => 'Wallsend', 'country_code' => 'GB'],\n            ['name' => 'Tangjia', 'country_code' => 'CN'],\n            ['name' => 'Goianira', 'country_code' => 'BR'],\n            ['name' => 'Cerquilho Velho', 'country_code' => 'BR'],\n            ['name' => 'San Pelayo', 'country_code' => 'CO'],\n            ['name' => 'Kamen -na-Obi', 'country_code' => 'RU'],\n            ['name' => 'Tupelo', 'country_code' => 'US'],\n            ['name' => 'San Pedro Perulapan', 'country_code' => 'SV'],\n            ['name' => 'Nongzhangjie', 'country_code' => 'CN'],\n            ['name' => 'Carnot', 'country_code' => 'CF'],\n            ['name' => 'Chateauroux', 'country_code' => 'FR'],\n            ['name' => 'Uruara', 'country_code' => 'BR'],\n            ['name' => 'Shazhou', 'country_code' => 'CN'],\n            ['name' => 'Birak', 'country_code' => 'LY'],\n            ['name' => 'Pinamar', 'country_code' => 'AR'],\n            ['name' => 'Georgina', 'country_code' => 'CA'],\n            ['name' => 'South Brunswick', 'country_code' => 'US'],\n            ['name' => 'Guinayangan', 'country_code' => 'PH'],\n            ['name' => 'Alcira', 'country_code' => 'ES'],\n            ['name' => 'West Seneca', 'country_code' => 'US'],\n            ['name' => 'Bingmei', 'country_code' => 'CN'],\n            ['name' => 'Svitlovodsk', 'country_code' => 'UA'],\n            ['name' => 'Victoriaville', 'country_code' => 'CA'],\n            ['name' => 'Ruzayevka', 'country_code' => 'RU'],\n            ['name' => 'Debica', 'country_code' => 'PL'],\n            ['name' => 'Biella', 'country_code' => 'IT'],\n            ['name' => 'Actopan', 'country_code' => 'MX'],\n            ['name' => 'Brejo Santo', 'country_code' => 'BR'],\n            ['name' => 'Gloria', 'country_code' => 'PH'],\n            ['name' => 'Brejo da Madre de Deus', 'country_code' => 'BR'],\n            ['name' => 'Bunawan', 'country_code' => 'PH'],\n            ['name' => 'Attleboro', 'country_code' => 'US'],\n            ['name' => 'Tank', 'country_code' => 'PK'],\n            ['name' => 'Seabra', 'country_code' => 'BR'],\n            ['name' => 'Sogod', 'country_code' => 'PH'],\n            ['name' => 'Sugito', 'country_code' => 'JP'],\n            ['name' => 'Pine Bluff', 'country_code' => 'US'],\n            ['name' => 'Dimitrovgrad', 'country_code' => 'BG'],\n            ['name' => 'Wiener Neustadt', 'country_code' => 'AT'],\n            ['name' => 'Marion', 'country_code' => 'US'],\n            ['name' => 'Afula', 'country_code' => 'IL'],\n            ['name' => 'Shangshan', 'country_code' => 'CN'],\n            ['name' => 'Hassi Messaoud', 'country_code' => 'DZ'],\n            ['name' => 'Beiwanglizhen', 'country_code' => 'CN'],\n            ['name' => 'Evesham', 'country_code' => 'US'],\n            ['name' => 'Liuquan', 'country_code' => 'CN'],\n            ['name' => 'Bruchsal', 'country_code' => 'DE'],\n            ['name' => 'Yaopu', 'country_code' => 'CN'],\n            ['name' => 'Middletown', 'country_code' => 'US'],\n            ['name' => 'Grantham', 'country_code' => 'GB'],\n            ['name' => 'Xinguara', 'country_code' => 'BR'],\n            ['name' => 'Tres Valles', 'country_code' => 'MX'],\n            ['name' => 'Rabinal', 'country_code' => 'GT'],\n            ['name' => 'Buenos Aires', 'country_code' => 'CR'],\n            ['name' => 'Hilo', 'country_code' => 'US'],\n            ['name' => 'Kimry', 'country_code' => 'RU'],\n            ['name' => 'Sete', 'country_code' => 'FR'],\n            ['name' => 'Shahhat', 'country_code' => 'LY'],\n            ['name' => 'Barra de Sao Francisco', 'country_code' => 'BR'],\n            ['name' => 'Shchuchinsk', 'country_code' => 'KZ'],\n            ['name' => 'Parma', 'country_code' => 'RU'],\n            ['name' => 'Sidcup', 'country_code' => 'GB'],\n            ['name' => 'Senigallia', 'country_code' => 'IT'],\n            ['name' => 'Yatagan', 'country_code' => 'TR'],\n            ['name' => 'Kaufbeuren', 'country_code' => 'DE'],\n            ['name' => 'Medemblik', 'country_code' => 'NL'],\n            ['name' => 'Pederneiras', 'country_code' => 'BR'],\n            ['name' => 'Mount Pleasant', 'country_code' => 'US'],\n            ['name' => 'Rasskazovo', 'country_code' => 'RU'],\n            ['name' => 'Currais Novos', 'country_code' => 'BR'],\n            ['name' => 'Lapa', 'country_code' => 'BR'],\n            ['name' => 'Nadym', 'country_code' => 'RU'],\n            ['name' => 'Marau', 'country_code' => 'BR'],\n            ['name' => 'Drama', 'country_code' => 'GR'],\n            ['name' => 'Vallenar', 'country_code' => 'CL'],\n            ['name' => 'Dunakeszi', 'country_code' => 'HU'],\n            ['name' => 'Pemangkat', 'country_code' => 'ID'],\n            ['name' => 'Volkhov', 'country_code' => 'RU'],\n            ['name' => 'Houbu', 'country_code' => 'CN'],\n            ['name' => 'Lufkin', 'country_code' => 'US'],\n            ['name' => 'Darcheh', 'country_code' => 'IR'],\n            ['name' => 'Zhovti Vody', 'country_code' => 'UA'],\n            ['name' => 'Middleton', 'country_code' => 'GB'],\n            ['name' => 'Falkensee', 'country_code' => 'DE'],\n            ['name' => 'Paraguacu Paulista', 'country_code' => 'BR'],\n            ['name' => 'Bexhill', 'country_code' => 'GB'],\n            ['name' => 'Chusovoy', 'country_code' => 'RU'],\n            ['name' => 'Singhanakhon', 'country_code' => 'TH'],\n            ['name' => 'Oranienburg', 'country_code' => 'DE'],\n            ['name' => 'Jisr ash Shughur', 'country_code' => 'SY'],\n            ['name' => 'Manitowoc', 'country_code' => 'US'],\n            ['name' => 'Nidadavole', 'country_code' => 'IN'],\n            ['name' => 'Maitum', 'country_code' => 'PH'],\n            ['name' => 'Yaoquan', 'country_code' => 'CN'],\n            ['name' => 'Taketoyo', 'country_code' => 'JP'],\n            ['name' => 'Lake Ridge', 'country_code' => 'US'],\n            ['name' => 'Selma', 'country_code' => 'US'],\n            ['name' => 'Manacor', 'country_code' => 'ES'],\n            ['name' => 'Talagutong', 'country_code' => 'PH'],\n            ['name' => 'Ban Pet', 'country_code' => 'TH'],\n            ['name' => 'Strongsville', 'country_code' => 'US'],\n            ['name' => 'Louveira', 'country_code' => 'BR'],\n            ['name' => 'Seferhisar', 'country_code' => 'TR'],\n            ['name' => 'Arboletes', 'country_code' => 'CO'],\n            ['name' => 'Garca', 'country_code' => 'BR'],\n            ['name' => 'Uniao', 'country_code' => 'BR'],\n            ['name' => 'Vernon', 'country_code' => 'CA'],\n            ['name' => 'Wallingford', 'country_code' => 'US'],\n            ['name' => 'Paraiba do Sul', 'country_code' => 'BR'],\n            ['name' => 'Kaarst', 'country_code' => 'DE'],\n            ['name' => 'Tiberias', 'country_code' => 'IL'],\n            ['name' => 'Lal-lo', 'country_code' => 'PH'],\n            ['name' => 'Etten-Leur', 'country_code' => 'NL'],\n            ['name' => 'Vlissingen', 'country_code' => 'NL'],\n            ['name' => 'Masuda', 'country_code' => 'JP'],\n            ['name' => 'Les Sables-d Olonne', 'country_code' => 'FR'],\n            ['name' => 'Qingfengdian', 'country_code' => 'CN'],\n            ['name' => 'Changtoushang', 'country_code' => 'CN'],\n            ['name' => 'Webster', 'country_code' => 'US'],\n            ['name' => 'Abovyan', 'country_code' => 'AM'],\n            ['name' => 'Danville', 'country_code' => 'US'],\n            ['name' => 'Mamanguape', 'country_code' => 'BR'],\n            ['name' => 'Petatlan', 'country_code' => 'MX'],\n            ['name' => 'Prostejov', 'country_code' => 'CZ'],\n            ['name' => 'Kabasalan', 'country_code' => 'PH'],\n            ['name' => 'Bietigheim-Bissingen', 'country_code' => 'DE'],\n            ['name' => 'Bridgewater', 'country_code' => 'US'],\n            ['name' => 'Quincy', 'country_code' => 'US'],\n            ['name' => 'Memmingen', 'country_code' => 'DE'],\n            ['name' => 'San Juan y Martinez', 'country_code' => 'CU'],\n            ['name' => 'Lancaster', 'country_code' => 'US'],\n            ['name' => 'Riverton', 'country_code' => 'US'],\n            ['name' => 'The Colony', 'country_code' => 'US'],\n            ['name' => 'Simojovel de Allende', 'country_code' => 'MX'],\n            ['name' => 'Neustadt am Rubenberge', 'country_code' => 'DE'],\n            ['name' => 'Bassano del Grappa', 'country_code' => 'IT'],\n            ['name' => 'Sao Jose de Mipibu', 'country_code' => 'BR'],\n            ['name' => 'Upper Hutt', 'country_code' => 'NZ'],\n            ['name' => 'Urbandale', 'country_code' => 'US'],\n            ['name' => 'Narvacan', 'country_code' => 'PH'],\n            ['name' => 'Tuodian', 'country_code' => 'CN'],\n            ['name' => 'Alcala', 'country_code' => 'PH'],\n            ['name' => 'Lehrte', 'country_code' => 'DE'],\n            ['name' => 'Rheden', 'country_code' => 'NL'],\n            ['name' => 'Volksrust', 'country_code' => 'ZA'],\n            ['name' => 'Sao Benedito', 'country_code' => 'BR'],\n            ['name' => 'Plainfield', 'country_code' => 'US'],\n            ['name' => 'Monroe', 'country_code' => 'US'],\n            ['name' => 'Lombard', 'country_code' => 'US'],\n            ['name' => 'Prescott', 'country_code' => 'US'],\n            ['name' => 'Balimbing', 'country_code' => 'PH'],\n            ['name' => 'Dikili', 'country_code' => 'TR'],\n            ['name' => 'Korogwe', 'country_code' => 'TZ'],\n            ['name' => 'Krasnodon', 'country_code' => 'UA'],\n            ['name' => 'Hanerik', 'country_code' => 'CN'],\n            ['name' => 'Xin ansuo', 'country_code' => 'CN'],\n            ['name' => 'Zevenaar', 'country_code' => 'NL'],\n            ['name' => 'Eureka', 'country_code' => 'US'],\n            ['name' => 'Addanki', 'country_code' => 'IN'],\n            ['name' => 'Panambi', 'country_code' => 'BR'],\n            ['name' => 'Igarape', 'country_code' => 'BR'],\n            ['name' => 'Tuy', 'country_code' => 'PH'],\n            ['name' => 'Catacamas', 'country_code' => 'HN'],\n            ['name' => 'Hagi', 'country_code' => 'JP'],\n            ['name' => 'Malabang', 'country_code' => 'PH'],\n            ['name' => 'Kuybyshev', 'country_code' => 'RU'],\n            ['name' => 'Sayreville', 'country_code' => 'US'],\n            ['name' => 'Alghero', 'country_code' => 'IT'],\n            ['name' => 'Saint-Eustache', 'country_code' => 'CA'],\n            ['name' => 'Lupao', 'country_code' => 'PH'],\n            ['name' => 'Otofuke', 'country_code' => 'JP'],\n            ['name' => 'Enfield', 'country_code' => 'US'],\n            ['name' => 'Altamonte Springs', 'country_code' => 'US'],\n            ['name' => 'Jinku', 'country_code' => 'CN'],\n            ['name' => 'Yartsevo', 'country_code' => 'RU'],\n            ['name' => 'San Cristobal Totonicapan', 'country_code' => 'GT'],\n            ['name' => 'Del Rio', 'country_code' => 'US'],\n            ['name' => 'Voluntari', 'country_code' => 'RO'],\n            ['name' => 'Kastel Stari', 'country_code' => 'HR'],\n            ['name' => 'Libona', 'country_code' => 'PH'],\n            ['name' => 'Pantanal', 'country_code' => 'DO'],\n            ['name' => 'Comendador', 'country_code' => 'DO'],\n            ['name' => 'Xinjun', 'country_code' => 'CN'],\n            ['name' => 'Mastaga', 'country_code' => 'AZ'],\n            ['name' => 'Kamen', 'country_code' => 'DE'],\n            ['name' => 'Natanz', 'country_code' => 'IR'],\n            ['name' => 'Menghan', 'country_code' => 'CN'],\n            ['name' => 'Pinhal', 'country_code' => 'BR'],\n            ['name' => 'Zongolica', 'country_code' => 'MX'],\n            ['name' => 'Tayug', 'country_code' => 'PH'],\n            ['name' => 'Bountiful', 'country_code' => 'US'],\n            ['name' => 'Jiaohe', 'country_code' => 'CN'],\n            ['name' => 'Himi', 'country_code' => 'JP'],\n            ['name' => 'Claveria', 'country_code' => 'PH'],\n            ['name' => 'Gravina in Puglia', 'country_code' => 'IT'],\n            ['name' => 'Khutubi', 'country_code' => 'CN'],\n            ['name' => 'Desert Hot Springs', 'country_code' => 'US'],\n            ['name' => 'Nabire', 'country_code' => 'ID'],\n            ['name' => 'Peachtree Corners', 'country_code' => 'US'],\n            ['name' => 'Montevista', 'country_code' => 'PH'],\n            ['name' => 'Villeta', 'country_code' => 'CO'],\n            ['name' => 'Mombaca', 'country_code' => 'BR'],\n            ['name' => 'Santa Rita do Sapucai', 'country_code' => 'BR'],\n            ['name' => 'Buguias', 'country_code' => 'PH'],\n            ['name' => 'Haltom City', 'country_code' => 'US'],\n            ['name' => 'Nandazhang', 'country_code' => 'CN'],\n            ['name' => 'Castro', 'country_code' => 'BR'],\n            ['name' => 'Baniyas', 'country_code' => 'SY'],\n            ['name' => ' Ain Arnat', 'country_code' => 'DZ'],\n            ['name' => 'Veruela', 'country_code' => 'PH'],\n            ['name' => 'Ad Dir iyah', 'country_code' => 'SA'],\n            ['name' => 'Vinzons', 'country_code' => 'PH'],\n            ['name' => 'Roseller Lim', 'country_code' => 'PH'],\n            ['name' => 'Southington', 'country_code' => 'US'],\n            ['name' => 'San al Hajar al Qibliyah', 'country_code' => 'EG'],\n            ['name' => 'Pagsanjan', 'country_code' => 'PH'],\n            ['name' => 'Worksop', 'country_code' => 'GB'],\n            ['name' => 'Ormond Beach', 'country_code' => 'US'],\n            ['name' => 'Banisilan', 'country_code' => 'PH'],\n            ['name' => 'Sambava', 'country_code' => 'MG'],\n            ['name' => 'Taniyama-chuo', 'country_code' => 'JP'],\n            ['name' => 'Takab', 'country_code' => 'IR'],\n            ['name' => 'Erkelenz', 'country_code' => 'DE'],\n            ['name' => 'Zhangliangcun', 'country_code' => 'CN'],\n            ['name' => 'Salto de Pirapora', 'country_code' => 'BR'],\n            ['name' => 'Paraty', 'country_code' => 'BR'],\n            ['name' => 'Basoko', 'country_code' => 'CD'],\n            ['name' => 'Cutler Bay', 'country_code' => 'US'],\n            ['name' => 'Of', 'country_code' => 'TR'],\n            ['name' => 'Macenta', 'country_code' => 'GN'],\n            ['name' => 'Shinshiro', 'country_code' => 'JP'],\n            ['name' => 'Chefchaouene', 'country_code' => 'MA'],\n            ['name' => 'Xihuachi', 'country_code' => 'CN'],\n            ['name' => 'Adrian', 'country_code' => 'US'],\n            ['name' => 'Nuevo Mexico', 'country_code' => 'MX'],\n            ['name' => 'Lota', 'country_code' => 'CL'],\n            ['name' => 'Otwock', 'country_code' => 'PL'],\n            ['name' => 'Goose Creek', 'country_code' => 'US'],\n            ['name' => 'Et Taiyiba', 'country_code' => 'IL'],\n            ['name' => 'Concepcion', 'country_code' => 'PH'],\n            ['name' => 'Moorhead', 'country_code' => 'US'],\n            ['name' => 'Itaberai', 'country_code' => 'BR'],\n            ['name' => 'Angouleme', 'country_code' => 'FR'],\n            ['name' => 'Westfield', 'country_code' => 'US'],\n            ['name' => 'Santa Cruz', 'country_code' => 'PT'],\n            ['name' => 'Cesme', 'country_code' => 'TR'],\n            ['name' => 'Ponte de Lima', 'country_code' => 'PT'],\n            ['name' => 'Musina', 'country_code' => 'ZA'],\n            ['name' => 'Venray', 'country_code' => 'NL'],\n            ['name' => 'Birsk', 'country_code' => 'RU'],\n            ['name' => 'Noordwijk', 'country_code' => 'NL'],\n            ['name' => 'Quinte West', 'country_code' => 'CA'],\n            ['name' => 'Wismar', 'country_code' => 'DE'],\n            ['name' => 'Presidente Epitacio', 'country_code' => 'BR'],\n            ['name' => 'Sao Lourenco do Sul', 'country_code' => 'BR'],\n            ['name' => 'Catende', 'country_code' => 'BR'],\n            ['name' => 'Bahia Honda', 'country_code' => 'CU'],\n            ['name' => 'Istres', 'country_code' => 'FR'],\n            ['name' => 'Manchester', 'country_code' => 'US'],\n            ['name' => 'Zhangcun', 'country_code' => 'CN'],\n            ['name' => 'Tamworth', 'country_code' => 'AU'],\n            ['name' => 'Denia', 'country_code' => 'ES'],\n            ['name' => 'Pedro Celestino Negrete', 'country_code' => 'MX'],\n            ['name' => 'Heist-op-den-Berg', 'country_code' => 'BE'],\n            ['name' => 'Makinohara', 'country_code' => 'JP'],\n            ['name' => 'Zharkent', 'country_code' => 'KZ'],\n            ['name' => 'Jaro', 'country_code' => 'PH'],\n            ['name' => 'Sawakin', 'country_code' => 'SD'],\n            ['name' => 'Hueyapan de Ocampo', 'country_code' => 'MX'],\n            ['name' => 'Henrietta', 'country_code' => 'US'],\n            ['name' => 'Tantangan', 'country_code' => 'PH'],\n            ['name' => 'Esperanza', 'country_code' => 'AR'],\n            ['name' => 'Germering', 'country_code' => 'DE'],\n            ['name' => 'Kemer', 'country_code' => 'TR'],\n            ['name' => 'Rantepao', 'country_code' => 'ID'],\n            ['name' => 'Civitanova Marche', 'country_code' => 'IT'],\n            ['name' => 'Angadanan', 'country_code' => 'PH'],\n            ['name' => 'Labrea', 'country_code' => 'BR'],\n            ['name' => 'Bourg-en-Bresse', 'country_code' => 'FR'],\n            ['name' => 'Brea', 'country_code' => 'US'],\n            ['name' => 'Nova Vicosa', 'country_code' => 'BR'],\n            ['name' => 'Klamath Falls', 'country_code' => 'US'],\n            ['name' => 'Al Wajh', 'country_code' => 'SA'],\n            ['name' => 'King s Lynn', 'country_code' => 'GB'],\n            ['name' => 'Siegburg', 'country_code' => 'DE'],\n            ['name' => 'San Lorenzo', 'country_code' => 'HN'],\n            ['name' => 'Cordon', 'country_code' => 'PH'],\n            ['name' => 'Ambatondrazaka', 'country_code' => 'MG'],\n            ['name' => 'Aguazul', 'country_code' => 'CO'],\n            ['name' => 'Shuilou', 'country_code' => 'CN'],\n            ['name' => 'Veroia', 'country_code' => 'GR'],\n            ['name' => 'Billerica', 'country_code' => 'US'],\n            ['name' => 'Nadi', 'country_code' => 'FJ'],\n            ['name' => 'Tiel', 'country_code' => 'NL'],\n            ['name' => 'Kobayashi', 'country_code' => 'JP'],\n            ['name' => 'Daram', 'country_code' => 'PH'],\n            ['name' => 'Ciechanow', 'country_code' => 'PL'],\n            ['name' => 'Prerov', 'country_code' => 'CZ'],\n            ['name' => 'Nansan', 'country_code' => 'CN'],\n            ['name' => 'Visconde do Rio Branco', 'country_code' => 'BR'],\n            ['name' => 'Cumaribo', 'country_code' => 'CO'],\n            ['name' => 'Kolchugino', 'country_code' => 'RU'],\n            ['name' => 'Whanganui', 'country_code' => 'NZ'],\n            ['name' => 'Jesus Maria', 'country_code' => 'MX'],\n            ['name' => 'Sao Gabriel da Cachoeira', 'country_code' => 'BR'],\n            ['name' => 'Lubao', 'country_code' => 'CD'],\n            ['name' => 'Lancaster', 'country_code' => 'US'],\n            ['name' => 'Bihac', 'country_code' => 'BA'],\n            ['name' => 'Rosario', 'country_code' => 'BR'],\n            ['name' => 'Channelview', 'country_code' => 'US'],\n            ['name' => 'Huizen', 'country_code' => 'NL'],\n            ['name' => 'Entre Rios', 'country_code' => 'BR'],\n            ['name' => 'Yendi', 'country_code' => 'GH'],\n            ['name' => 'Poptun', 'country_code' => 'GT'],\n            ['name' => 'Gualeguay', 'country_code' => 'AR'],\n            ['name' => 'Jatibonico', 'country_code' => 'CU'],\n            ['name' => 'Albano Laziale', 'country_code' => 'IT'],\n            ['name' => 'Dolores', 'country_code' => 'PH'],\n            ['name' => 'Nettetal', 'country_code' => 'DE'],\n            ['name' => 'Osinniki', 'country_code' => 'RU'],\n            ['name' => 'Sieradz', 'country_code' => 'PL'],\n            ['name' => 'Pilar', 'country_code' => 'PH'],\n            ['name' => 'Gifhorn', 'country_code' => 'DE'],\n            ['name' => 'Centralia', 'country_code' => 'US'],\n            ['name' => 'Sidi Mohamed Lahmar', 'country_code' => 'MA'],\n            ['name' => 'Gallatin', 'country_code' => 'US'],\n            ['name' => 'Atenco', 'country_code' => 'MX'],\n            ['name' => 'Miranda', 'country_code' => 'CO'],\n            ['name' => 'Tepalcatepec', 'country_code' => 'MX'],\n            ['name' => 'Zvolen', 'country_code' => 'SK'],\n            ['name' => 'Samborondon', 'country_code' => 'EC'],\n            ['name' => 'Dreieich', 'country_code' => 'DE'],\n            ['name' => 'Shenjiatun', 'country_code' => 'CN'],\n            ['name' => 'Loufan', 'country_code' => 'CN'],\n            ['name' => 'Hulin', 'country_code' => 'CN'],\n            ['name' => 'Lucena', 'country_code' => 'ES'],\n            ['name' => 'Stevens Point', 'country_code' => 'US'],\n            ['name' => 'Nurmijarvi', 'country_code' => 'FI'],\n            ['name' => 'Orlandia', 'country_code' => 'BR'],\n            ['name' => 'Borken', 'country_code' => 'DE'],\n            ['name' => 'Burke', 'country_code' => 'US'],\n            ['name' => 'Vawkavysk', 'country_code' => 'BY'],\n            ['name' => 'Vera Cruz', 'country_code' => 'BR'],\n            ['name' => 'Manay', 'country_code' => 'PH'],\n            ['name' => 'Brentwood', 'country_code' => 'US'],\n            ['name' => 'Obita', 'country_code' => 'JP'],\n            ['name' => 'Amberg', 'country_code' => 'DE'],\n            ['name' => 'Eisenach', 'country_code' => 'DE'],\n            ['name' => 'Santa Quiteria', 'country_code' => 'BR'],\n            ['name' => 'North Fort Myers', 'country_code' => 'US'],\n            ['name' => 'Temsia', 'country_code' => 'MA'],\n            ['name' => 'Egg Harbor', 'country_code' => 'US'],\n            ['name' => 'Fianga', 'country_code' => 'TD'],\n            ['name' => 'Hwange', 'country_code' => 'ZW'],\n            ['name' => 'Sansanne-Mango', 'country_code' => 'TG'],\n            ['name' => 'Avezzano', 'country_code' => 'IT'],\n            ['name' => 'Leigh', 'country_code' => 'GB'],\n            ['name' => 'Santo Antonio de Padua', 'country_code' => 'BR'],\n            ['name' => 'Mariel', 'country_code' => 'CU'],\n            ['name' => 'Laatzen', 'country_code' => 'DE'],\n            ['name' => 'Kotabumi', 'country_code' => 'ID'],\n            ['name' => 'Bacnotan', 'country_code' => 'PH'],\n            ['name' => 'Qiryat Yam', 'country_code' => 'IL'],\n            ['name' => 'Edmonds', 'country_code' => 'US'],\n            ['name' => 'Charlottetown', 'country_code' => 'CA'],\n            ['name' => 'Dusheng', 'country_code' => 'CN'],\n            ['name' => 'Ban Na Pa', 'country_code' => 'TH'],\n            ['name' => 'Mikolow', 'country_code' => 'PL'],\n            ['name' => 'Apache Junction', 'country_code' => 'US'],\n            ['name' => 'Fairfield', 'country_code' => 'US'],\n            ['name' => 'Bury Saint Edmunds', 'country_code' => 'GB'],\n            ['name' => 'Oakley', 'country_code' => 'US'],\n            ['name' => 'El Charco', 'country_code' => 'CO'],\n            ['name' => 'Rio Negrinho', 'country_code' => 'BR'],\n            ['name' => 'Hutchinson', 'country_code' => 'US'],\n            ['name' => 'Loreto', 'country_code' => 'PH'],\n            ['name' => 'Shebekino', 'country_code' => 'RU'],\n            ['name' => 'Santa Helena', 'country_code' => 'BR'],\n            ['name' => 'Tineghir', 'country_code' => 'MA'],\n            ['name' => 'Manjuyod', 'country_code' => 'PH'],\n            ['name' => 'Mascouche', 'country_code' => 'CA'],\n            ['name' => 'Futtsu', 'country_code' => 'JP'],\n            ['name' => 'Dayr Mawas', 'country_code' => 'EG'],\n            ['name' => 'Wangyuanqiao', 'country_code' => 'CN'],\n            ['name' => 'Cuihua', 'country_code' => 'CN'],\n            ['name' => 'West Vancouver', 'country_code' => 'CA'],\n            ['name' => 'Capao da Canoa', 'country_code' => 'BR'],\n            ['name' => 'Toboso', 'country_code' => 'PH'],\n            ['name' => 'Shepetivka', 'country_code' => 'UA'],\n            ['name' => 'Shu', 'country_code' => 'KZ'],\n            ['name' => 'Alerce', 'country_code' => 'CL'],\n            ['name' => 'Greenwood', 'country_code' => 'US'],\n            ['name' => 'Tome', 'country_code' => 'CL'],\n            ['name' => 'Cortlandt', 'country_code' => 'US'],\n            ['name' => 'Salaberry-de-Valleyfield', 'country_code' => 'CA'],\n            ['name' => 'Balykchy', 'country_code' => 'KG'],\n            ['name' => 'Heinsberg', 'country_code' => 'DE'],\n            ['name' => 'Uden', 'country_code' => 'NL'],\n            ['name' => 'La Orotava', 'country_code' => 'ES'],\n            ['name' => 'Sao Lourenco', 'country_code' => 'BR'],\n            ['name' => 'Itapolis', 'country_code' => 'BR'],\n            ['name' => 'Liantang', 'country_code' => 'CN'],\n            ['name' => 'Richmond', 'country_code' => 'US'],\n            ['name' => 'Machang', 'country_code' => 'CN'],\n            ['name' => 'Lorenskog', 'country_code' => 'NO'],\n            ['name' => 'Linden', 'country_code' => 'US'],\n            ['name' => 'Puyallup', 'country_code' => 'US'],\n            ['name' => 'Santa Rita', 'country_code' => 'PH'],\n            ['name' => 'Yangcunzai', 'country_code' => 'CN'],\n            ['name' => 'Qazyan', 'country_code' => 'AZ'],\n            ['name' => 'Rajgir', 'country_code' => 'IN'],\n            ['name' => 'Rouyn-Noranda', 'country_code' => 'CA'],\n            ['name' => 'San Dona di Piave', 'country_code' => 'IT'],\n            ['name' => 'Wancheng', 'country_code' => 'CN'],\n            ['name' => 'Koniz', 'country_code' => 'CH'],\n            ['name' => 'Imperia', 'country_code' => 'IT'],\n            ['name' => 'Homburg', 'country_code' => 'DE'],\n            ['name' => 'Remanso', 'country_code' => 'BR'],\n            ['name' => 'Beitbridge', 'country_code' => 'ZW'],\n            ['name' => 'Ansbach', 'country_code' => 'DE'],\n            ['name' => 'Gay', 'country_code' => 'RU'],\n            ['name' => 'Itabaianinha', 'country_code' => 'BR'],\n            ['name' => 'Huntsville', 'country_code' => 'US'],\n            ['name' => 'Macerata', 'country_code' => 'IT'],\n            ['name' => 'Dacun', 'country_code' => 'CN'],\n            ['name' => 'Urbana', 'country_code' => 'US'],\n            ['name' => 'Aurich', 'country_code' => 'DE'],\n            ['name' => 'Qapshaghay', 'country_code' => 'KZ'],\n            ['name' => 'Nordhausen', 'country_code' => 'DE'],\n            ['name' => 'Sbiba', 'country_code' => 'TN'],\n            ['name' => 'Beverly', 'country_code' => 'US'],\n            ['name' => 'Safonovo', 'country_code' => 'RU'],\n            ['name' => 'Villaba', 'country_code' => 'PH'],\n            ['name' => 'Montenegro', 'country_code' => 'CO'],\n            ['name' => 'Clovis', 'country_code' => 'US'],\n            ['name' => 'Monterotondo', 'country_code' => 'IT'],\n            ['name' => 'Amontada', 'country_code' => 'BR'],\n            ['name' => 'Caceres', 'country_code' => 'CO'],\n            ['name' => 'Lingquan', 'country_code' => 'CN'],\n            ['name' => 'Lower Tungawan', 'country_code' => 'PH'],\n            ['name' => 'Monchegorsk', 'country_code' => 'RU'],\n            ['name' => 'Santa Maria da Boa Vista', 'country_code' => 'BR'],\n            ['name' => 'Soran', 'country_code' => 'KZ'],\n            ['name' => 'Coburg', 'country_code' => 'DE'],\n            ['name' => 'Statesboro', 'country_code' => 'US'],\n            ['name' => 'Poti', 'country_code' => 'GE'],\n            ['name' => 'Hobbs', 'country_code' => 'US'],\n            ['name' => 'Sarab', 'country_code' => 'IR'],\n            ['name' => 'Su-ngai Kolok', 'country_code' => 'TH'],\n            ['name' => 'Barcellona-Pozzo di Gotto', 'country_code' => 'IT'],\n            ['name' => 'Litian Gezhuang', 'country_code' => 'CN'],\n            ['name' => 'Korenovsk', 'country_code' => 'RU'],\n            ['name' => 'Qiryat Mozqin', 'country_code' => 'IL'],\n            ['name' => 'McMinnville', 'country_code' => 'US'],\n            ['name' => 'Castres', 'country_code' => 'FR'],\n            ['name' => 'Zagora', 'country_code' => 'MA'],\n            ['name' => 'Labangan', 'country_code' => 'PH'],\n            ['name' => 'Tuntum', 'country_code' => 'BR'],\n            ['name' => 'Schertz', 'country_code' => 'US'],\n            ['name' => 'Tequila', 'country_code' => 'MX'],\n            ['name' => 'Nasipit', 'country_code' => 'PH'],\n            ['name' => 'Moatize', 'country_code' => 'MZ'],\n            ['name' => 'Merano', 'country_code' => 'IT'],\n            ['name' => 'Shimotsuma', 'country_code' => 'JP'],\n            ['name' => 'Yinggen', 'country_code' => 'CN'],\n            ['name' => 'Matoupu', 'country_code' => 'CN'],\n            ['name' => 'Greenock', 'country_code' => 'GB'],\n            ['name' => 'Beigang', 'country_code' => 'TW'],\n            ['name' => 'Ales', 'country_code' => 'FR'],\n            ['name' => 'Xinleitou', 'country_code' => 'CN'],\n            ['name' => 'Nurtingen', 'country_code' => 'DE'],\n            ['name' => 'Spassk-Dal niy', 'country_code' => 'RU'],\n            ['name' => 'Tadif', 'country_code' => 'SY'],\n            ['name' => 'Puerto del Rosario', 'country_code' => 'ES'],\n            ['name' => 'Tulun', 'country_code' => 'RU'],\n            ['name' => 'Uspantan', 'country_code' => 'GT'],\n            ['name' => 'Rajaori', 'country_code' => 'IN'],\n            ['name' => 'Wunstorf', 'country_code' => 'DE'],\n            ['name' => 'Pedra Branca', 'country_code' => 'BR'],\n            ['name' => 'Puerto Real', 'country_code' => 'ES'],\n            ['name' => 'Seevetal', 'country_code' => 'DE'],\n            ['name' => 'Sassuolo', 'country_code' => 'IT'],\n            ['name' => 'Oliveira', 'country_code' => 'BR'],\n            ['name' => 'Jardinopolis', 'country_code' => 'BR'],\n            ['name' => 'Bayt al Faqih', 'country_code' => 'YE'],\n            ['name' => 'San', 'country_code' => 'ML'],\n            ['name' => 'Oviedo', 'country_code' => 'US'],\n            ['name' => 'Nanbaishezhen', 'country_code' => 'CN'],\n            ['name' => 'Odenton', 'country_code' => 'US'],\n            ['name' => 'Kwidzyn', 'country_code' => 'PL'],\n            ['name' => 'Chojnice', 'country_code' => 'PL'],\n            ['name' => 'Satka', 'country_code' => 'RU'],\n            ['name' => 'Grove City', 'country_code' => 'US'],\n            ['name' => 'Santa Maria da Vitoria', 'country_code' => 'BR'],\n            ['name' => 'Berkeley', 'country_code' => 'US'],\n            ['name' => 'Sumisip', 'country_code' => 'PH'],\n            ['name' => 'Porto de Moz', 'country_code' => 'BR'],\n            ['name' => 'Nanbei', 'country_code' => 'JP'],\n            ['name' => 'Schwabach', 'country_code' => 'DE'],\n            ['name' => 'Mozdok', 'country_code' => 'RU'],\n            ['name' => 'Timmins', 'country_code' => 'CA'],\n            ['name' => 'Konigswinter', 'country_code' => 'DE'],\n            ['name' => 'Wentzville', 'country_code' => 'US'],\n            ['name' => 'San Jacinto', 'country_code' => 'PH'],\n            ['name' => 'Kalilangan', 'country_code' => 'PH'],\n            ['name' => 'North Brunswick', 'country_code' => 'US'],\n            ['name' => 'Myski', 'country_code' => 'RU'],\n            ['name' => 'Santa Cruz de Los Taques', 'country_code' => 'VE'],\n            ['name' => 'La Quinta', 'country_code' => 'US'],\n            ['name' => 'Lobo', 'country_code' => 'PH'],\n            ['name' => 'Strezhevoy', 'country_code' => 'RU'],\n            ['name' => 'Pueblo Nuevo', 'country_code' => 'CO'],\n            ['name' => 'Podilsk', 'country_code' => 'UA'],\n            ['name' => 'General Mamerto Natividad', 'country_code' => 'PH'],\n            ['name' => 'Freiberg', 'country_code' => 'DE'],\n            ['name' => 'Panchimalco', 'country_code' => 'SV'],\n            ['name' => 'Siay', 'country_code' => 'PH'],\n            ['name' => 'Sarande', 'country_code' => 'AL'],\n            ['name' => 'Santa Rita', 'country_code' => 'PH'],\n            ['name' => 'Ust -Kut', 'country_code' => 'RU'],\n            ['name' => 'Swinoujscie', 'country_code' => 'PL'],\n            ['name' => 'Yakacik', 'country_code' => 'TR'],\n            ['name' => 'Aguilar', 'country_code' => 'PH'],\n            ['name' => 'Moises Padilla', 'country_code' => 'PH'],\n            ['name' => 'Ihnasya al Madinah', 'country_code' => 'EG'],\n            ['name' => 'Alhaurin de la Torre', 'country_code' => 'ES'],\n            ['name' => 'Lokeren', 'country_code' => 'BE'],\n            ['name' => 'Herstal', 'country_code' => 'BE'],\n            ['name' => 'Yuzawa', 'country_code' => 'JP'],\n            ['name' => 'El Nido', 'country_code' => 'PH'],\n            ['name' => 'Cantu', 'country_code' => 'IT'],\n            ['name' => 'Nanmeng', 'country_code' => 'CN'],\n            ['name' => 'Weslaco', 'country_code' => 'US'],\n            ['name' => 'Sorel-Tracy', 'country_code' => 'CA'],\n            ['name' => 'Karabulak', 'country_code' => 'RU'],\n            ['name' => 'Tuchin', 'country_code' => 'CO'],\n            ['name' => 'President Quirino', 'country_code' => 'PH'],\n            ['name' => 'Ladispoli', 'country_code' => 'IT'],\n            ['name' => 'Labason', 'country_code' => 'PH'],\n            ['name' => 'Naini Tal', 'country_code' => 'IN'],\n            ['name' => 'Yangtangxu', 'country_code' => 'CN'],\n            ['name' => 'Ayagoz', 'country_code' => 'KZ'],\n            ['name' => 'Zanesville', 'country_code' => 'US'],\n            ['name' => 'Newnan', 'country_code' => 'US'],\n            ['name' => 'Kitaibaraki', 'country_code' => 'JP'],\n            ['name' => 'Almenara', 'country_code' => 'BR'],\n            ['name' => 'Shakopee', 'country_code' => 'US'],\n            ['name' => 'San Jose', 'country_code' => 'PH'],\n            ['name' => 'Nowa Sol', 'country_code' => 'PL'],\n            ['name' => 'Brighton', 'country_code' => 'US'],\n            ['name' => 'Catonsville', 'country_code' => 'US'],\n            ['name' => 'Wijchen', 'country_code' => 'NL'],\n            ['name' => 'Gaolincun', 'country_code' => 'CN'],\n            ['name' => 'Rancho Palos Verdes', 'country_code' => 'US'],\n            ['name' => 'Kirchheim unter Teck', 'country_code' => 'DE'],\n            ['name' => 'Verkhnyaya Salda', 'country_code' => 'RU'],\n            ['name' => 'Thionville', 'country_code' => 'FR'],\n            ['name' => 'Baichigan', 'country_code' => 'CN'],\n            ['name' => 'Mableton', 'country_code' => 'US'],\n            ['name' => 'Erzin', 'country_code' => 'TR'],\n            ['name' => 'Andradas', 'country_code' => 'BR'],\n            ['name' => 'Charqueadas', 'country_code' => 'BR'],\n            ['name' => 'New Tecumseth', 'country_code' => 'CA'],\n            ['name' => 'Leinfelden-Echterdingen', 'country_code' => 'DE'],\n            ['name' => 'Santo Nino', 'country_code' => 'PH'],\n            ['name' => 'Mount Laurel', 'country_code' => 'US'],\n            ['name' => 'San Gregorio de Nigua', 'country_code' => 'DO'],\n            ['name' => 'Coppell', 'country_code' => 'US'],\n            ['name' => 'Mandaon', 'country_code' => 'PH'],\n            ['name' => 'Culasi', 'country_code' => 'PH'],\n            ['name' => 'Sovetsk', 'country_code' => 'RU'],\n            ['name' => 'Linton Hall', 'country_code' => 'US'],\n            ['name' => 'Pananaw', 'country_code' => 'PH'],\n            ['name' => 'Antequera', 'country_code' => 'ES'],\n            ['name' => 'Girau do Ponciano', 'country_code' => 'BR'],\n            ['name' => 'Moline', 'country_code' => 'US'],\n            ['name' => 'Matnog', 'country_code' => 'PH'],\n            ['name' => 'Tanxia', 'country_code' => 'CN'],\n            ['name' => 'El Tocuyo', 'country_code' => 'VE'],\n            ['name' => 'Aquidauana', 'country_code' => 'BR'],\n            ['name' => 'Colinas', 'country_code' => 'BR'],\n            ['name' => 'Tiegan', 'country_code' => 'CN'],\n            ['name' => 'Niquero', 'country_code' => 'CU'],\n            ['name' => 'Arauquita', 'country_code' => 'CO'],\n            ['name' => 'Penn Hills', 'country_code' => 'US'],\n            ['name' => 'Chaves', 'country_code' => 'PT'],\n            ['name' => 'Hellevoetsluis', 'country_code' => 'NL'],\n            ['name' => 'Delaware', 'country_code' => 'US'],\n            ['name' => 'Kovvur', 'country_code' => 'IN'],\n            ['name' => 'Gap', 'country_code' => 'FR'],\n            ['name' => 'Anyuan', 'country_code' => 'CN'],\n            ['name' => 'Yingzhou Linchang', 'country_code' => 'CN'],\n            ['name' => 'Banaybanay', 'country_code' => 'PH'],\n            ['name' => 'Temryuk', 'country_code' => 'RU'],\n            ['name' => 'Guambog', 'country_code' => 'PH'],\n            ['name' => 'Westfield', 'country_code' => 'US'],\n            ['name' => 'Guaduas', 'country_code' => 'CO'],\n            ['name' => 'Carranglan', 'country_code' => 'PH'],\n            ['name' => 'Jarvenpaa', 'country_code' => 'FI'],\n            ['name' => 'Vyshneve', 'country_code' => 'UA'],\n            ['name' => 'Quezon', 'country_code' => 'PH'],\n            ['name' => 'Basud', 'country_code' => 'PH'],\n            ['name' => 'Bensheim', 'country_code' => 'DE'],\n            ['name' => 'Boleslawiec', 'country_code' => 'PL'],\n            ['name' => 'Shelton', 'country_code' => 'US'],\n            ['name' => 'Proper Bansud', 'country_code' => 'PH'],\n            ['name' => 'Baft', 'country_code' => 'IR'],\n            ['name' => 'Marcianise', 'country_code' => 'IT'],\n            ['name' => 'Jeremoabo', 'country_code' => 'BR'],\n            ['name' => 'Westerville', 'country_code' => 'US'],\n            ['name' => 'Lemgo', 'country_code' => 'DE'],\n            ['name' => 'Ciudad Barrios', 'country_code' => 'SV'],\n            ['name' => 'Mucuri', 'country_code' => 'BR'],\n            ['name' => 'Manassas', 'country_code' => 'US'],\n            ['name' => 'Eberswalde', 'country_code' => 'DE'],\n            ['name' => 'Victoria', 'country_code' => 'PH'],\n            ['name' => 'Ciudad Dario', 'country_code' => 'NI'],\n            ['name' => 'Tonbridge', 'country_code' => 'GB'],\n            ['name' => 'Salinopolis', 'country_code' => 'BR'],\n            ['name' => 'Dois Vizinhos', 'country_code' => 'BR'],\n            ['name' => 'Pirmasens', 'country_code' => 'DE'],\n            ['name' => 'Kearny', 'country_code' => 'US'],\n            ['name' => 'Chambas', 'country_code' => 'CU'],\n            ['name' => 'Ostfildern', 'country_code' => 'DE'],\n            ['name' => 'Maarssen', 'country_code' => 'NL'],\n            ['name' => 'Los Banos', 'country_code' => 'US'],\n            ['name' => 'Bagua Grande', 'country_code' => 'PE'],\n            ['name' => 'Pyt -Yakh', 'country_code' => 'RU'],\n            ['name' => 'El Tumbador', 'country_code' => 'GT'],\n            ['name' => 'Santa Elena', 'country_code' => 'PH'],\n            ['name' => 'Novozybkov', 'country_code' => 'RU'],\n            ['name' => 'Richmond', 'country_code' => 'US'],\n            ['name' => 'Osorio', 'country_code' => 'BR'],\n            ['name' => 'Compiegne', 'country_code' => 'FR'],\n            ['name' => 'Taicheng', 'country_code' => 'CN'],\n            ['name' => 'Kabuga', 'country_code' => 'RW'],\n            ['name' => 'Inhambupe', 'country_code' => 'BR'],\n            ['name' => 'Chebarkul', 'country_code' => 'RU'],\n            ['name' => 'Romny', 'country_code' => 'UA'],\n            ['name' => 'Hempfield', 'country_code' => 'US'],\n            ['name' => 'Spanish Fork', 'country_code' => 'US'],\n            ['name' => 'Dronten', 'country_code' => 'NL'],\n            ['name' => 'Woodstock', 'country_code' => 'CA'],\n            ['name' => 'Sao Miguel d Oeste', 'country_code' => 'BR'],\n            ['name' => 'Belleville', 'country_code' => 'US'],\n            ['name' => 'Mangaratiba', 'country_code' => 'BR'],\n            ['name' => 'Maluso', 'country_code' => 'PH'],\n            ['name' => 'Ilhavo', 'country_code' => 'PT'],\n            ['name' => 'Maplewood', 'country_code' => 'US'],\n            ['name' => 'Ait Ourir', 'country_code' => 'MA'],\n            ['name' => 'Rio Real', 'country_code' => 'BR'],\n            ['name' => 'Leyte', 'country_code' => 'PH'],\n            ['name' => 'Uruacu', 'country_code' => 'BR'],\n            ['name' => 'Cuito Cuanavale', 'country_code' => 'AO'],\n            ['name' => 'Maria Aurora', 'country_code' => 'PH'],\n            ['name' => 'Colomiers', 'country_code' => 'FR'],\n            ['name' => 'Schwabisch Hall', 'country_code' => 'DE'],\n            ['name' => 'Abadan', 'country_code' => 'TM'],\n            ['name' => 'Lugoj', 'country_code' => 'RO'],\n            ['name' => 'Zoumi', 'country_code' => 'MA'],\n            ['name' => 'Pereslavl -Zalesskiy', 'country_code' => 'RU'],\n            ['name' => 'Petrich', 'country_code' => 'BG'],\n            ['name' => 'Zhujiezhen', 'country_code' => 'CN'],\n            ['name' => 'Tomar', 'country_code' => 'PT'],\n            ['name' => 'Cateel', 'country_code' => 'PH'],\n            ['name' => 'Weissenfels', 'country_code' => 'DE'],\n            ['name' => 'Laouamra', 'country_code' => 'MA'],\n            ['name' => 'Pie de Pato', 'country_code' => 'CO'],\n            ['name' => 'Boucherville', 'country_code' => 'CA'],\n            ['name' => 'Panitan', 'country_code' => 'PH'],\n            ['name' => 'Yalutorovsk', 'country_code' => 'RU'],\n            ['name' => 'Brumadinho', 'country_code' => 'BR'],\n            ['name' => 'Arys', 'country_code' => 'KZ'],\n            ['name' => 'Komono', 'country_code' => 'JP'],\n            ['name' => 'Sciacca', 'country_code' => 'IT'],\n            ['name' => 'Vahdat', 'country_code' => 'TJ'],\n            ['name' => 'Channarayapatna', 'country_code' => 'IN'],\n            ['name' => 'Pottsville', 'country_code' => 'US'],\n            ['name' => 'Corigliano Calabro', 'country_code' => 'IT'],\n            ['name' => 'Simao Dias', 'country_code' => 'BR'],\n            ['name' => 'Buxtehude', 'country_code' => 'DE'],\n            ['name' => 'Santo Tomas', 'country_code' => 'PH'],\n            ['name' => 'Columbia', 'country_code' => 'US'],\n            ['name' => 'La Union', 'country_code' => 'CO'],\n            ['name' => 'Bayindir', 'country_code' => 'TR'],\n            ['name' => 'Pechora', 'country_code' => 'RU'],\n            ['name' => 'Altos', 'country_code' => 'BR'],\n            ['name' => 'Heemskerk', 'country_code' => 'NL'],\n            ['name' => 'Bartlett', 'country_code' => 'US'],\n            ['name' => 'Curuca', 'country_code' => 'BR'],\n            ['name' => 'Bluefield', 'country_code' => 'US'],\n            ['name' => 'Fitchburg', 'country_code' => 'US'],\n            ['name' => 'Orange', 'country_code' => 'AU'],\n            ['name' => 'Rovereto', 'country_code' => 'IT'],\n            ['name' => 'Braine-l Alleud', 'country_code' => 'BE'],\n            ['name' => 'Marion', 'country_code' => 'US'],\n            ['name' => 'Iesi', 'country_code' => 'IT'],\n            ['name' => 'Huckelhoven', 'country_code' => 'DE'],\n            ['name' => 'Huaura', 'country_code' => 'PE'],\n            ['name' => 'San Fernando de Henares', 'country_code' => 'ES'],\n            ['name' => 'Farnham', 'country_code' => 'GB'],\n            ['name' => 'Uray', 'country_code' => 'RU'],\n            ['name' => 'Maihar', 'country_code' => 'IN'],\n            ['name' => 'Halberstadt', 'country_code' => 'DE'],\n            ['name' => 'Cedar Falls', 'country_code' => 'US'],\n            ['name' => 'Cumbal', 'country_code' => 'CO'],\n            ['name' => 'Yian', 'country_code' => 'CN'],\n            ['name' => 'Maintal', 'country_code' => 'DE'],\n            ['name' => 'Neumarkt', 'country_code' => 'DE'],\n            ['name' => 'Binh Long', 'country_code' => 'VN'],\n            ['name' => 'Pyu', 'country_code' => 'MM'],\n            ['name' => 'Buffalo Grove', 'country_code' => 'US'],\n            ['name' => 'Jamestown', 'country_code' => 'US'],\n            ['name' => 'Asuncion Mita', 'country_code' => 'GT'],\n            ['name' => 'Woodlawn', 'country_code' => 'US'],\n            ['name' => 'Arcos', 'country_code' => 'BR'],\n            ['name' => 'Hofheim', 'country_code' => 'DE'],\n            ['name' => 'Caraga', 'country_code' => 'PH'],\n            ['name' => 'Sao Manuel', 'country_code' => 'BR'],\n            ['name' => 'Aracataca', 'country_code' => 'CO'],\n            ['name' => 'Clarksburg', 'country_code' => 'US'],\n            ['name' => 'Anglet', 'country_code' => 'FR'],\n            ['name' => 'Baksan', 'country_code' => 'RU'],\n            ['name' => 'Zainsk', 'country_code' => 'RU'],\n            ['name' => 'Royal Palm Beach', 'country_code' => 'US'],\n            ['name' => 'South Upi', 'country_code' => 'PH'],\n            ['name' => 'Imbituba', 'country_code' => 'BR'],\n            ['name' => 'Ozu', 'country_code' => 'JP'],\n            ['name' => 'Abucay', 'country_code' => 'PH'],\n            ['name' => 'Freital', 'country_code' => 'DE'],\n            ['name' => 'Tuquerres', 'country_code' => 'CO'],\n            ['name' => 'Lohne', 'country_code' => 'DE'],\n            ['name' => 'Jipijapa', 'country_code' => 'EC'],\n            ['name' => 'Al Qa idah', 'country_code' => 'YE'],\n            ['name' => 'Marion', 'country_code' => 'US'],\n            ['name' => 'Eboli', 'country_code' => 'IT'],\n            ['name' => 'Oswiecim', 'country_code' => 'PL'],\n            ['name' => 'Covington', 'country_code' => 'US'],\n            ['name' => 'Junnar', 'country_code' => 'IN'],\n            ['name' => 'Schorndorf', 'country_code' => 'DE'],\n            ['name' => 'Santa Cruz', 'country_code' => 'PH'],\n            ['name' => 'Belaya Kalitva', 'country_code' => 'RU'],\n            ['name' => 'Coram', 'country_code' => 'US'],\n            ['name' => 'Tiete', 'country_code' => 'BR'],\n            ['name' => 'Friendswood', 'country_code' => 'US'],\n            ['name' => 'Arawa', 'country_code' => 'PG'],\n            ['name' => 'Aguas Belas', 'country_code' => 'BR'],\n            ['name' => 'Povazska Bystrica', 'country_code' => 'SK'],\n            ['name' => 'Boa Esperanca', 'country_code' => 'BR'],\n            ['name' => 'Itoigawa', 'country_code' => 'JP'],\n            ['name' => 'Indian Trail', 'country_code' => 'US'],\n            ['name' => 'Kasumigaura', 'country_code' => 'JP'],\n            ['name' => 'San Agustin Acasaguastlan', 'country_code' => 'GT'],\n            ['name' => 'Sejenane', 'country_code' => 'TN'],\n            ['name' => 'Woburn', 'country_code' => 'US'],\n            ['name' => 'Camargo', 'country_code' => 'MX'],\n            ['name' => 'Medgidia', 'country_code' => 'RO'],\n            ['name' => 'Balabac', 'country_code' => 'PH'],\n            ['name' => 'Saraqib', 'country_code' => 'SY'],\n            ['name' => 'Santiago Nonualco', 'country_code' => 'SV'],\n            ['name' => 'Mtsensk', 'country_code' => 'RU'],\n            ['name' => 'Tutayev', 'country_code' => 'RU'],\n            ['name' => 'Tipton', 'country_code' => 'GB'],\n            ['name' => 'Longtang', 'country_code' => 'CN'],\n            ['name' => 'Ban Bang Khu Lat', 'country_code' => 'TH'],\n            ['name' => 'Villanueva', 'country_code' => 'PH'],\n            ['name' => 'The Acreage', 'country_code' => 'US'],\n            ['name' => 'Penjamo', 'country_code' => 'MX'],\n            ['name' => 'Bom Jardim', 'country_code' => 'BR'],\n            ['name' => 'Tucuma', 'country_code' => 'BR'],\n            ['name' => 'Oroqen Zizhiqi', 'country_code' => 'CN'],\n            ['name' => 'Hangu', 'country_code' => 'PK'],\n            ['name' => 'Liloy', 'country_code' => 'PH'],\n            ['name' => 'Raub', 'country_code' => 'MY'],\n            ['name' => 'Holyoke', 'country_code' => 'US'],\n            ['name' => 'Amursk', 'country_code' => 'RU'],\n            ['name' => 'Nueva Valencia', 'country_code' => 'PH'],\n            ['name' => 'Glenrothes', 'country_code' => 'GB'],\n            ['name' => 'Tucuran', 'country_code' => 'PH'],\n            ['name' => 'Maddaloni', 'country_code' => 'IT'],\n            ['name' => 'South Valley', 'country_code' => 'US'],\n            ['name' => 'Altagracia de Orituco', 'country_code' => 'VE'],\n            ['name' => 'Draguignan', 'country_code' => 'FR'],\n            ['name' => 'Fondi', 'country_code' => 'IT'],\n            ['name' => 'Santa Cruz', 'country_code' => 'BR'],\n            ['name' => 'Payabon', 'country_code' => 'PH'],\n            ['name' => 'Isfara', 'country_code' => 'TJ'],\n            ['name' => 'Llanera', 'country_code' => 'PH'],\n            ['name' => 'Plasencia', 'country_code' => 'ES'],\n            ['name' => 'Otavalo', 'country_code' => 'EC'],\n            ['name' => 'Zhongbai', 'country_code' => 'CN'],\n            ['name' => 'Anda', 'country_code' => 'PH'],\n            ['name' => 'Ettlingen', 'country_code' => 'DE'],\n            ['name' => 'Alashankou', 'country_code' => 'CN'],\n            ['name' => 'Jiaozishan', 'country_code' => 'CN'],\n            ['name' => 'Tarauaca', 'country_code' => 'BR'],\n            ['name' => 'Ouro Branco', 'country_code' => 'BR'],\n            ['name' => 'Jayrud', 'country_code' => 'SY'],\n            ['name' => 'Bacolor', 'country_code' => 'PH'],\n            ['name' => 'PortoAlexandre', 'country_code' => 'AO'],\n            ['name' => 'Torrington', 'country_code' => 'US'],\n            ['name' => 'Laurel', 'country_code' => 'PH'],\n            ['name' => 'Cedar City', 'country_code' => 'US'],\n            ['name' => 'Fasano', 'country_code' => 'IT'],\n            ['name' => 'Marlboro', 'country_code' => 'US'],\n            ['name' => 'Halle', 'country_code' => 'BE'],\n            ['name' => 'Hinatuan', 'country_code' => 'PH'],\n            ['name' => 'Voghera', 'country_code' => 'IT'],\n            ['name' => 'Banga', 'country_code' => 'PH'],\n            ['name' => 'Rauma', 'country_code' => 'FI'],\n            ['name' => 'Volklingen', 'country_code' => 'DE'],\n            ['name' => 'Cabatuan', 'country_code' => 'PH'],\n            ['name' => 'Villa de San Diego de Ubate', 'country_code' => 'CO'],\n            ['name' => 'Acevedo', 'country_code' => 'CO'],\n            ['name' => 'Xinlizhuang', 'country_code' => 'CN'],\n            ['name' => 'Curitibanos', 'country_code' => 'BR'],\n            ['name' => 'Yecapixtla', 'country_code' => 'MX'],\n            ['name' => 'Ecija', 'country_code' => 'ES'],\n            ['name' => 'Mambusao', 'country_code' => 'PH'],\n            ['name' => 'Michalovce', 'country_code' => 'SK'],\n            ['name' => 'Esperantina', 'country_code' => 'BR'],\n            ['name' => 'Lloret de Mar', 'country_code' => 'ES'],\n            ['name' => 'Weibo', 'country_code' => 'CN'],\n            ['name' => 'Ouro Preto d Oeste', 'country_code' => 'BR'],\n            ['name' => 'Matias Romero', 'country_code' => 'MX'],\n            ['name' => 'Wurselen', 'country_code' => 'DE'],\n            ['name' => 'Crystal Lake', 'country_code' => 'US'],\n            ['name' => 'Calexico', 'country_code' => 'US'],\n            ['name' => 'Lake Oswego', 'country_code' => 'US'],\n            ['name' => 'Varzea da Palma', 'country_code' => 'BR'],\n            ['name' => 'Amherst', 'country_code' => 'US'],\n            ['name' => 'Kurobeshin', 'country_code' => 'JP'],\n            ['name' => 'Villamontes', 'country_code' => 'BO'],\n            ['name' => 'Apsheronsk', 'country_code' => 'RU'],\n            ['name' => 'Buchholz in der Nordheide', 'country_code' => 'DE'],\n            ['name' => 'Libano', 'country_code' => 'CO'],\n            ['name' => 'Dolores', 'country_code' => 'GT'],\n            ['name' => 'Mibu', 'country_code' => 'JP'],\n            ['name' => 'Muskogee', 'country_code' => 'US'],\n            ['name' => 'Bosconia', 'country_code' => 'CO'],\n            ['name' => 'Steyr', 'country_code' => 'AT'],\n            ['name' => 'Balaoan', 'country_code' => 'PH'],\n            ['name' => 'Romeoville', 'country_code' => 'US'],\n            ['name' => 'Plant City', 'country_code' => 'US'],\n            ['name' => 'Kibawe', 'country_code' => 'PH'],\n            ['name' => 'Mettmann', 'country_code' => 'DE'],\n            ['name' => 'Citta di Castello', 'country_code' => 'IT'],\n            ['name' => 'Santo Antonio', 'country_code' => 'BR'],\n            ['name' => 'Iturama', 'country_code' => 'BR'],\n            ['name' => 'Rosario do Sul', 'country_code' => 'BR'],\n            ['name' => 'Solan', 'country_code' => 'IN'],\n            ['name' => 'Santo Tomas', 'country_code' => 'PH'],\n            ['name' => 'Novodvinsk', 'country_code' => 'RU'],\n            ['name' => 'Manalapan', 'country_code' => 'US'],\n            ['name' => 'Pagalungan', 'country_code' => 'PH'],\n            ['name' => 'New Berlin', 'country_code' => 'US'],\n            ['name' => 'Schio', 'country_code' => 'IT'],\n            ['name' => 'La Chaux-de-Fonds', 'country_code' => 'CH'],\n            ['name' => 'Sama', 'country_code' => 'ES'],\n            ['name' => 'Socorro', 'country_code' => 'BR'],\n            ['name' => 'Modugno', 'country_code' => 'IT'],\n            ['name' => 'Naron', 'country_code' => 'ES'],\n            ['name' => 'Araquari', 'country_code' => 'BR'],\n            ['name' => 'Tampakan', 'country_code' => 'PH'],\n            ['name' => 'Santa Eulalia del Rio', 'country_code' => 'ES'],\n            ['name' => 'Roy', 'country_code' => 'US'],\n            ['name' => 'Security-Widefield', 'country_code' => 'US'],\n            ['name' => 'Villa del Carbon', 'country_code' => 'MX'],\n            ['name' => 'Onesti', 'country_code' => 'RO'],\n            ['name' => 'Takikawa', 'country_code' => 'JP'],\n            ['name' => 'Dupnitsa', 'country_code' => 'BG'],\n            ['name' => 'Marlborough', 'country_code' => 'US'],\n            ['name' => 'Milton', 'country_code' => 'US'],\n            ['name' => 'Stendal', 'country_code' => 'DE'],\n            ['name' => 'Novo Horizonte', 'country_code' => 'BR'],\n            ['name' => 'Afua', 'country_code' => 'BR'],\n            ['name' => 'Sanjiang', 'country_code' => 'CN'],\n            ['name' => 'San Giuliano Milanese', 'country_code' => 'IT'],\n            ['name' => 'Hillsborough', 'country_code' => 'US'],\n            ['name' => 'Trofa', 'country_code' => 'PT'],\n            ['name' => 'Polanco', 'country_code' => 'PH'],\n            ['name' => 'Tagudin', 'country_code' => 'PH'],\n            ['name' => 'Tianchang', 'country_code' => 'CN'],\n            ['name' => 'Pokrov', 'country_code' => 'UA'],\n            ['name' => 'Yangfang', 'country_code' => 'CN'],\n            ['name' => 'Andover', 'country_code' => 'GB'],\n            ['name' => 'President Manuel Acuna Roxas', 'country_code' => 'PH'],\n            ['name' => 'Borlange', 'country_code' => 'SE'],\n            ['name' => 'Issaquah', 'country_code' => 'US'],\n            ['name' => 'San Juan del Cesar', 'country_code' => 'CO'],\n            ['name' => 'Benjamin Constant', 'country_code' => 'BR'],\n            ['name' => 'Ahaus', 'country_code' => 'DE'],\n            ['name' => 'Presidente Venceslau', 'country_code' => 'BR'],\n            ['name' => 'Niutuo', 'country_code' => 'CN'],\n            ['name' => 'Carini', 'country_code' => 'IT'],\n            ['name' => 'Ninove', 'country_code' => 'BE'],\n            ['name' => 'Sayansk', 'country_code' => 'RU'],\n            ['name' => 'Essex', 'country_code' => 'US'],\n            ['name' => 'Szigetszentmiklos', 'country_code' => 'HU'],\n            ['name' => 'Parral', 'country_code' => 'CL'],\n            ['name' => 'Vendrell', 'country_code' => 'ES'],\n            ['name' => 'Tlalixcoyan', 'country_code' => 'MX'],\n            ['name' => 'Tabogon', 'country_code' => 'PH'],\n            ['name' => 'Plaridel', 'country_code' => 'PH'],\n            ['name' => 'Eccles', 'country_code' => 'GB'],\n            ['name' => 'Draa el Mizan', 'country_code' => 'DZ'],\n            ['name' => 'San Miguel', 'country_code' => 'PH'],\n            ['name' => 'Apan', 'country_code' => 'MX'],\n            ['name' => 'Socorro', 'country_code' => 'PH'],\n            ['name' => 'Palmas', 'country_code' => 'BR'],\n            ['name' => 'Sao Francisco do Conde', 'country_code' => 'BR'],\n            ['name' => 'Lasam', 'country_code' => 'PH'],\n            ['name' => 'Bartlesville', 'country_code' => 'US'],\n            ['name' => 'Borba', 'country_code' => 'BR'],\n            ['name' => 'Niederkassel', 'country_code' => 'DE'],\n            ['name' => 'Taraza', 'country_code' => 'CO'],\n            ['name' => 'Northampton', 'country_code' => 'US'],\n            ['name' => 'Higashimatsushima', 'country_code' => 'JP'],\n            ['name' => 'Volodymyr-Volynskyi', 'country_code' => 'UA'],\n            ['name' => 'Ilmenau', 'country_code' => 'DE'],\n            ['name' => 'Hatfield', 'country_code' => 'GB'],\n            ['name' => 'Bulalacao', 'country_code' => 'PH'],\n            ['name' => 'Lancaster', 'country_code' => 'US'],\n            ['name' => 'Streamwood', 'country_code' => 'US'],\n            ['name' => 'Germantown', 'country_code' => 'US'],\n            ['name' => 'Great Yarmouth', 'country_code' => 'GB'],\n            ['name' => 'Sidi Bibi', 'country_code' => 'MA'],\n            ['name' => 'Neu Isenburg', 'country_code' => 'DE'],\n            ['name' => 'Yelizovo', 'country_code' => 'RU'],\n            ['name' => 'El Viejo', 'country_code' => 'NI'],\n            ['name' => 'Langen', 'country_code' => 'DE'],\n            ['name' => 'Carol Stream', 'country_code' => 'US'],\n            ['name' => 'Sungandiancun', 'country_code' => 'CN'],\n            ['name' => 'Salinas', 'country_code' => 'BR'],\n            ['name' => 'Asheboro', 'country_code' => 'US'],\n            ['name' => 'Kalispell', 'country_code' => 'US'],\n            ['name' => 'Cayambe', 'country_code' => 'EC'],\n            ['name' => 'Arecibo', 'country_code' => 'PR'],\n            ['name' => 'Xiwanzi', 'country_code' => 'CN'],\n            ['name' => 'Baikonur', 'country_code' => 'KZ'],\n            ['name' => 'Dwarka', 'country_code' => 'IN'],\n            ['name' => 'Changchunpu', 'country_code' => 'CN'],\n            ['name' => 'Omagari', 'country_code' => 'JP'],\n            ['name' => 'Sao Mateus do Maranhao', 'country_code' => 'BR'],\n            ['name' => 'Lynnwood', 'country_code' => 'US'],\n            ['name' => 'Siguatepeque', 'country_code' => 'HN'],\n            ['name' => 'Mooresville', 'country_code' => 'US'],\n            ['name' => 'Monreale', 'country_code' => 'IT'],\n            ['name' => 'Kachkanar', 'country_code' => 'RU'],\n            ['name' => 'Al Malikiyah', 'country_code' => 'SY'],\n            ['name' => 'Brookfield', 'country_code' => 'US'],\n            ['name' => 'Landgraaf', 'country_code' => 'NL'],\n            ['name' => 'Alcala', 'country_code' => 'PH'],\n            ['name' => 'Nuevitas', 'country_code' => 'CU'],\n            ['name' => 'Mobo', 'country_code' => 'PH'],\n            ['name' => 'Shijiazhuangnan', 'country_code' => 'CN'],\n            ['name' => 'San Dionisio', 'country_code' => 'PH'],\n            ['name' => 'Joue-les-Tours', 'country_code' => 'FR'],\n            ['name' => 'Igarape-Acu', 'country_code' => 'BR'],\n            ['name' => 'Crestview', 'country_code' => 'US'],\n            ['name' => 'Horizon West', 'country_code' => 'US'],\n            ['name' => 'Toumodi', 'country_code' => 'CI'],\n            ['name' => 'Inashiki', 'country_code' => 'JP'],\n            ['name' => 'Kurchatov', 'country_code' => 'RU'],\n            ['name' => 'Pirna', 'country_code' => 'DE'],\n            ['name' => 'Caivano', 'country_code' => 'IT'],\n            ['name' => 'Rtishchevo', 'country_code' => 'RU'],\n            ['name' => 'Pala Oua', 'country_code' => 'TD'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'Ancud', 'country_code' => 'CL'],\n            ['name' => 'Moses Lake', 'country_code' => 'US'],\n            ['name' => 'Souma', 'country_code' => 'DZ'],\n            ['name' => 'Vasylkiv', 'country_code' => 'UA'],\n            ['name' => 'Dingras', 'country_code' => 'PH'],\n            ['name' => 'Mira', 'country_code' => 'IT'],\n            ['name' => 'Umi', 'country_code' => 'JP'],\n            ['name' => 'Gonzaga', 'country_code' => 'PH'],\n            ['name' => 'Hitachiomiya', 'country_code' => 'JP'],\n            ['name' => 'Tagbina', 'country_code' => 'PH'],\n            ['name' => 'Tshela', 'country_code' => 'CD'],\n            ['name' => 'Malalag', 'country_code' => 'PH'],\n            ['name' => 'Dubno', 'country_code' => 'UA'],\n            ['name' => 'Galeana', 'country_code' => 'MX'],\n            ['name' => 'New Castle', 'country_code' => 'US'],\n            ['name' => 'Olive Branch', 'country_code' => 'US'],\n            ['name' => 'Bitterfeld', 'country_code' => 'DE'],\n            ['name' => 'Enterprise', 'country_code' => 'US'],\n            ['name' => 'Dom Pedrito', 'country_code' => 'BR'],\n            ['name' => 'Bautzen', 'country_code' => 'DE'],\n            ['name' => 'Los Palacios y Villafranca', 'country_code' => 'ES'],\n            ['name' => 'Sakuragawa', 'country_code' => 'JP'],\n            ['name' => 'La Libertad', 'country_code' => 'PH'],\n            ['name' => 'Sun City', 'country_code' => 'US'],\n            ['name' => 'Melchor Ocampo', 'country_code' => 'MX'],\n            ['name' => 'Mondragon', 'country_code' => 'PH'],\n            ['name' => 'Skelmersdale', 'country_code' => 'GB'],\n            ['name' => 'Furstenfeldbruck', 'country_code' => 'DE'],\n            ['name' => 'Balcarce', 'country_code' => 'AR'],\n            ['name' => 'Mission', 'country_code' => 'CA'],\n            ['name' => 'Pervomaisk', 'country_code' => 'UA'],\n            ['name' => 'Winslow', 'country_code' => 'US'],\n            ['name' => 'Groton', 'country_code' => 'US'],\n            ['name' => 'Bukama', 'country_code' => 'CD'],\n            ['name' => 'Agoncillo', 'country_code' => 'PH'],\n            ['name' => 'Tuusula', 'country_code' => 'FI'],\n            ['name' => 'Promissao', 'country_code' => 'BR'],\n            ['name' => 'Faraskur', 'country_code' => 'EG'],\n            ['name' => 'Pedro II', 'country_code' => 'BR'],\n            ['name' => 'Dabola', 'country_code' => 'GN'],\n            ['name' => 'Gujo', 'country_code' => 'JP'],\n            ['name' => 'Cajibio', 'country_code' => 'CO'],\n            ['name' => 'Los Palacios', 'country_code' => 'CU'],\n            ['name' => 'Warren', 'country_code' => 'US'],\n            ['name' => 'Duncanville', 'country_code' => 'US'],\n            ['name' => 'Sao Fidelis', 'country_code' => 'BR'],\n            ['name' => 'Kirkkonummi', 'country_code' => 'FI'],\n            ['name' => 'Dzhankoi', 'country_code' => 'UA'],\n            ['name' => 'Sibate', 'country_code' => 'CO'],\n            ['name' => 'Naga', 'country_code' => 'PH'],\n            ['name' => 'Nove Zamky', 'country_code' => 'SK'],\n            ['name' => 'Mechelen-aan-de-Maas', 'country_code' => 'BE'],\n            ['name' => 'Segovia', 'country_code' => 'CO'],\n            ['name' => 'Maayon', 'country_code' => 'PH'],\n            ['name' => 'Alimodian', 'country_code' => 'PH'],\n            ['name' => 'Amadeo', 'country_code' => 'PH'],\n            ['name' => 'Siniloan', 'country_code' => 'PH'],\n            ['name' => 'La Union', 'country_code' => 'GT'],\n            ['name' => 'Hurst', 'country_code' => 'US'],\n            ['name' => 'Clermont', 'country_code' => 'US'],\n            ['name' => 'Mariinsk', 'country_code' => 'RU'],\n            ['name' => 'Wheeling', 'country_code' => 'US'],\n            ['name' => 'Bayan', 'country_code' => 'CN'],\n            ['name' => 'Guariba', 'country_code' => 'BR'],\n            ['name' => 'Malilipot', 'country_code' => 'PH'],\n            ['name' => 'Vallehermoso', 'country_code' => 'PH'],\n            ['name' => 'Krasnoufimsk', 'country_code' => 'RU'],\n            ['name' => 'Zary', 'country_code' => 'PL'],\n            ['name' => 'Xiaguanying', 'country_code' => 'CN'],\n            ['name' => 'Valladolid', 'country_code' => 'PH'],\n            ['name' => 'Sao Gabriel', 'country_code' => 'BR'],\n            ['name' => 'Abinsk', 'country_code' => 'RU'],\n            ['name' => 'Dubbo', 'country_code' => 'AU'],\n            ['name' => 'Daraw', 'country_code' => 'EG'],\n            ['name' => 'San Felipe Orizatlan', 'country_code' => 'MX'],\n            ['name' => 'Lanyi', 'country_code' => 'CN'],\n            ['name' => 'Uryupinsk', 'country_code' => 'RU'],\n            ['name' => 'Jaroslaw', 'country_code' => 'PL'],\n            ['name' => 'Monan', 'country_code' => 'CN'],\n            ['name' => 'Veghel', 'country_code' => 'NL'],\n            ['name' => 'Karditsa', 'country_code' => 'GR'],\n            ['name' => 'Khalkhal', 'country_code' => 'IR'],\n            ['name' => 'Pacifica', 'country_code' => 'US'],\n            ['name' => 'Maddela', 'country_code' => 'PH'],\n            ['name' => 'Alianca', 'country_code' => 'BR'],\n            ['name' => 'Siyang', 'country_code' => 'CN'],\n            ['name' => 'Caibarien', 'country_code' => 'CU'],\n            ['name' => 'Konakovo', 'country_code' => 'RU'],\n            ['name' => 'Lebanon', 'country_code' => 'US'],\n            ['name' => 'Itiuba', 'country_code' => 'BR'],\n            ['name' => 'Falavarjan', 'country_code' => 'IR'],\n            ['name' => 'Americo Brasiliense', 'country_code' => 'BR'],\n            ['name' => 'Sassandra', 'country_code' => 'CI'],\n            ['name' => 'Varzea Alegre', 'country_code' => 'BR'],\n            ['name' => 'Talacogon', 'country_code' => 'PH'],\n            ['name' => 'Ventanas', 'country_code' => 'EC'],\n            ['name' => 'Rizal', 'country_code' => 'PH'],\n            ['name' => 'Hanumannagar', 'country_code' => 'NP'],\n            ['name' => 'Taysan', 'country_code' => 'PH'],\n            ['name' => 'Land O  Lakes', 'country_code' => 'US'],\n            ['name' => 'Venlo', 'country_code' => 'NL'],\n            ['name' => 'Maimbung', 'country_code' => 'PH'],\n            ['name' => 'San Jacinto de Buena Fe', 'country_code' => 'EC'],\n            ['name' => 'Bodoco', 'country_code' => 'BR'],\n            ['name' => 'Yanqi', 'country_code' => 'CN'],\n            ['name' => 'Caltagirone', 'country_code' => 'IT'],\n            ['name' => 'Kaka', 'country_code' => 'TM'],\n            ['name' => 'Ibara', 'country_code' => 'JP'],\n            ['name' => 'Eagle Mountain', 'country_code' => 'US'],\n            ['name' => 'Usinsk', 'country_code' => 'RU'],\n            ['name' => 'Sharypovo', 'country_code' => 'RU'],\n            ['name' => 'Moncada', 'country_code' => 'ES'],\n            ['name' => 'Atamyrat', 'country_code' => 'TM'],\n            ['name' => 'Alekseyevka', 'country_code' => 'RU'],\n            ['name' => 'Villagarcia de Arosa', 'country_code' => 'ES'],\n            ['name' => 'Bol shoy Kamen ', 'country_code' => 'RU'],\n            ['name' => 'Ciudad Manuel Doblado', 'country_code' => 'MX'],\n            ['name' => 'Katsuragi', 'country_code' => 'JP'],\n            ['name' => 'Reynoldsburg', 'country_code' => 'US'],\n            ['name' => 'Sabang', 'country_code' => 'ID'],\n            ['name' => 'Pathanamthitta', 'country_code' => 'IN'],\n            ['name' => 'Krasnyy Sulin', 'country_code' => 'RU'],\n            ['name' => 'Lyudinovo', 'country_code' => 'RU'],\n            ['name' => 'Oxford', 'country_code' => 'US'],\n            ['name' => 'Rosenberg', 'country_code' => 'US'],\n            ['name' => 'Pitangueiras', 'country_code' => 'BR'],\n            ['name' => 'Martinez', 'country_code' => 'US'],\n            ['name' => 'Zavolzhye', 'country_code' => 'RU'],\n            ['name' => 'Mapandan', 'country_code' => 'PH'],\n            ['name' => 'Balud', 'country_code' => 'PH'],\n            ['name' => 'Rio Pardo', 'country_code' => 'BR'],\n            ['name' => 'Cerveteri', 'country_code' => 'IT'],\n            ['name' => 'Pleasant Grove', 'country_code' => 'US'],\n            ['name' => 'Badian', 'country_code' => 'PH'],\n            ['name' => 'Bonito', 'country_code' => 'BR'],\n            ['name' => 'Margosatubig', 'country_code' => 'PH'],\n            ['name' => 'Dengtangcun', 'country_code' => 'CN'],\n            ['name' => 'Backnang', 'country_code' => 'DE'],\n            ['name' => 'Severna Park', 'country_code' => 'US'],\n            ['name' => 'Xinpo', 'country_code' => 'CN'],\n            ['name' => 'Teijlingen', 'country_code' => 'NL'],\n            ['name' => 'Houghton le Spring', 'country_code' => 'GB'],\n            ['name' => 'Taounate', 'country_code' => 'MA'],\n            ['name' => 'Izobil nyy', 'country_code' => 'RU'],\n            ['name' => 'Huber Heights', 'country_code' => 'US'],\n            ['name' => 'Xinqiao', 'country_code' => 'CN'],\n            ['name' => 'Vaudreuil-Dorion', 'country_code' => 'CA'],\n            ['name' => 'Goes', 'country_code' => 'NL'],\n            ['name' => 'Sampues', 'country_code' => 'CO'],\n            ['name' => 'Maroantsetra', 'country_code' => 'MG'],\n            ['name' => 'Capelinha', 'country_code' => 'BR'],\n            ['name' => 'Boryslav', 'country_code' => 'UA'],\n            ['name' => 'Geleen', 'country_code' => 'NL'],\n            ['name' => 'Yamen', 'country_code' => 'CN'],\n            ['name' => 'Las Navas', 'country_code' => 'PH'],\n            ['name' => 'Yuzhnouralsk', 'country_code' => 'RU'],\n            ['name' => 'Spoleto', 'country_code' => 'IT'],\n            ['name' => 'Yajalon', 'country_code' => 'MX'],\n            ['name' => 'Guira de Melena', 'country_code' => 'CU'],\n            ['name' => 'Aristobulo del Valle', 'country_code' => 'AR'],\n            ['name' => 'Mullaittivu', 'country_code' => 'LK'],\n            ['name' => 'Formia', 'country_code' => 'IT'],\n            ['name' => 'Mixquiahuala de Juarez', 'country_code' => 'MX'],\n            ['name' => 'Menomonee Falls', 'country_code' => 'US'],\n            ['name' => 'Hajin', 'country_code' => 'SY'],\n            ['name' => 'Bathurst', 'country_code' => 'AU'],\n            ['name' => 'Granbury', 'country_code' => 'US'],\n            ['name' => 'Clarin', 'country_code' => 'PH'],\n            ['name' => 'Waxahachie', 'country_code' => 'US'],\n            ['name' => 'Kamp-Lintfort', 'country_code' => 'DE'],\n            ['name' => 'Valrico', 'country_code' => 'US'],\n            ['name' => 'Sighetu Marmatiei', 'country_code' => 'RO'],\n            ['name' => 'Argun', 'country_code' => 'RU'],\n            ['name' => 'Constitucion', 'country_code' => 'CL'],\n            ['name' => 'Greven', 'country_code' => 'DE'],\n            ['name' => 'Kapiri Mposhi', 'country_code' => 'ZM'],\n            ['name' => 'Madridejos', 'country_code' => 'PH'],\n            ['name' => 'Maragondon', 'country_code' => 'PH'],\n            ['name' => 'Amarante do Maranhao', 'country_code' => 'BR'],\n            ['name' => 'Santiago', 'country_code' => 'MX'],\n            ['name' => 'Sanchahe', 'country_code' => 'CN'],\n            ['name' => 'Pentecoste', 'country_code' => 'BR'],\n            ['name' => 'Ceska Lipa', 'country_code' => 'CZ'],\n            ['name' => 'Marratxi', 'country_code' => 'ES'],\n            ['name' => 'Shakhtinsk', 'country_code' => 'KZ'],\n            ['name' => 'Papenburg', 'country_code' => 'DE'],\n            ['name' => 'Akhtubinsk', 'country_code' => 'RU'],\n            ['name' => 'Amargosa', 'country_code' => 'BR'],\n            ['name' => 'Cabugao', 'country_code' => 'PH'],\n            ['name' => 'Ipueiras', 'country_code' => 'BR'],\n            ['name' => 'Spisska Nova Ves', 'country_code' => 'SK'],\n            ['name' => 'Dibulla', 'country_code' => 'CO'],\n            ['name' => 'Lluchmayor', 'country_code' => 'ES'],\n            ['name' => 'Stirling', 'country_code' => 'GB'],\n            ['name' => 'San Juan', 'country_code' => 'PH'],\n            ['name' => 'Emirdag', 'country_code' => 'TR'],\n            ['name' => 'Guaraciaba do Norte', 'country_code' => 'BR'],\n            ['name' => 'Al Qaryatayn', 'country_code' => 'SY'],\n            ['name' => 'Kasibu', 'country_code' => 'PH'],\n            ['name' => 'Ma arratmisrin', 'country_code' => 'SY'],\n            ['name' => 'Holly Springs', 'country_code' => 'US'],\n            ['name' => 'Malmesbury', 'country_code' => 'ZA'],\n            ['name' => 'Butler', 'country_code' => 'US'],\n            ['name' => 'Mieres', 'country_code' => 'ES'],\n            ['name' => 'Juanjui', 'country_code' => 'PE'],\n            ['name' => 'Pimenta Bueno', 'country_code' => 'BR'],\n            ['name' => 'Dajiecun', 'country_code' => 'CN'],\n            ['name' => 'Geraldton', 'country_code' => 'AU'],\n            ['name' => 'Pamplona', 'country_code' => 'PH'],\n            ['name' => 'Lampa', 'country_code' => 'CL'],\n            ['name' => 'Albertville', 'country_code' => 'US'],\n            ['name' => 'Aboisso', 'country_code' => 'CI'],\n            ['name' => 'Haugesund', 'country_code' => 'NO'],\n            ['name' => 'Uchaly', 'country_code' => 'RU'],\n            ['name' => 'Tunduma', 'country_code' => 'TZ'],\n            ['name' => 'Sunbury', 'country_code' => 'AU'],\n            ['name' => 'London', 'country_code' => 'US'],\n            ['name' => 'Reo', 'country_code' => 'BF'],\n            ['name' => 'Wesseling', 'country_code' => 'DE'],\n            ['name' => 'Sao Goncalo dos Campos', 'country_code' => 'BR'],\n            ['name' => 'Kahrizak', 'country_code' => 'IR'],\n            ['name' => 'Granadero Baigorria', 'country_code' => 'AR'],\n            ['name' => 'Kalinkavichy', 'country_code' => 'BY'],\n            ['name' => 'San Nicolas', 'country_code' => 'PH'],\n            ['name' => 'Porteirinha', 'country_code' => 'BR'],\n            ['name' => 'Ossining', 'country_code' => 'US'],\n            ['name' => 'Chieri', 'country_code' => 'IT'],\n            ['name' => 'Igrejinha', 'country_code' => 'BR'],\n            ['name' => 'Nowra', 'country_code' => 'AU'],\n            ['name' => 'Cottage Grove', 'country_code' => 'US'],\n            ['name' => 'Daiyue', 'country_code' => 'CN'],\n            ['name' => 'Kailua', 'country_code' => 'US'],\n            ['name' => 'Beckum', 'country_code' => 'DE'],\n            ['name' => 'Jelilyuzi', 'country_code' => 'CN'],\n            ['name' => 'Konigs Wusterhausen', 'country_code' => 'DE'],\n            ['name' => 'Frolovo', 'country_code' => 'RU'],\n            ['name' => 'Alapayevsk', 'country_code' => 'RU'],\n            ['name' => 'Pojuca', 'country_code' => 'BR'],\n            ['name' => 'El Bordo', 'country_code' => 'CO'],\n            ['name' => 'St. Marys', 'country_code' => 'US'],\n            ['name' => 'Guaratuba', 'country_code' => 'BR'],\n            ['name' => 'Shiji', 'country_code' => 'CN'],\n            ['name' => 'Tosno', 'country_code' => 'RU'],\n            ['name' => 'Santa Cruz', 'country_code' => 'PH'],\n            ['name' => 'Chrzanow', 'country_code' => 'PL'],\n            ['name' => 'Fermo', 'country_code' => 'IT'],\n            ['name' => 'Dalnegorsk', 'country_code' => 'RU'],\n            ['name' => 'Itarema', 'country_code' => 'BR'],\n            ['name' => 'Fengguangcun', 'country_code' => 'CN'],\n            ['name' => 'Lilio', 'country_code' => 'PH'],\n            ['name' => 'Nandaime', 'country_code' => 'NI'],\n            ['name' => 'Goryachiy Klyuch', 'country_code' => 'RU'],\n            ['name' => 'Malgobek', 'country_code' => 'RU'],\n            ['name' => 'Afogados da Ingazeira', 'country_code' => 'BR'],\n            ['name' => 'Mechanicsville', 'country_code' => 'US'],\n            ['name' => 'Bouznika', 'country_code' => 'MA'],\n            ['name' => 'San Blas', 'country_code' => 'MX'],\n            ['name' => 'Compostela', 'country_code' => 'MX'],\n            ['name' => 'Santa Rosa de Osos', 'country_code' => 'CO'],\n            ['name' => 'Molndal', 'country_code' => 'SE'],\n            ['name' => 'Risalpur Cantonment', 'country_code' => 'PK'],\n            ['name' => 'Cleburne', 'country_code' => 'US'],\n            ['name' => 'Shaxi', 'country_code' => 'CN'],\n            ['name' => 'Yirga  Alem', 'country_code' => 'ET'],\n            ['name' => 'Warendorf', 'country_code' => 'DE'],\n            ['name' => 'Bacong', 'country_code' => 'PH'],\n            ['name' => 'Holubivske', 'country_code' => 'UA'],\n            ['name' => 'Yugorsk', 'country_code' => 'RU'],\n            ['name' => 'Oswego', 'country_code' => 'US'],\n            ['name' => 'Shrewsbury', 'country_code' => 'US'],\n            ['name' => 'Melgar', 'country_code' => 'CO'],\n            ['name' => 'Patnongon', 'country_code' => 'PH'],\n            ['name' => 'Baco', 'country_code' => 'PH'],\n            ['name' => 'Lierre', 'country_code' => 'BE'],\n            ['name' => 'Nossa Senhora da Gloria', 'country_code' => 'BR'],\n            ['name' => 'Oleiros', 'country_code' => 'ES'],\n            ['name' => 'Aritao', 'country_code' => 'PH'],\n            ['name' => 'Navarre', 'country_code' => 'US'],\n            ['name' => 'Lebork', 'country_code' => 'PL'],\n            ['name' => 'Don Benito', 'country_code' => 'ES'],\n            ['name' => 'Petrosani', 'country_code' => 'RO'],\n            ['name' => 'Mol', 'country_code' => 'BE'],\n            ['name' => 'Montlucon', 'country_code' => 'FR'],\n            ['name' => 'Koryazhma', 'country_code' => 'RU'],\n            ['name' => 'Oregon City', 'country_code' => 'US'],\n            ['name' => 'Poblacion', 'country_code' => 'PH'],\n            ['name' => 'Aracuai', 'country_code' => 'BR'],\n            ['name' => 'Masyaf', 'country_code' => 'SY'],\n            ['name' => 'Mabuhay', 'country_code' => 'PH'],\n            ['name' => 'Winter Springs', 'country_code' => 'US'],\n            ['name' => 'Tibu', 'country_code' => 'CO'],\n            ['name' => 'Morondava', 'country_code' => 'MG'],\n            ['name' => 'Parkland', 'country_code' => 'US'],\n            ['name' => 'Daying', 'country_code' => 'CN'],\n            ['name' => 'Kizilyurt', 'country_code' => 'RU'],\n            ['name' => 'Pahrump', 'country_code' => 'US'],\n            ['name' => 'Tunzi', 'country_code' => 'CN'],\n            ['name' => 'Carpentersville', 'country_code' => 'US'],\n            ['name' => 'Penfield', 'country_code' => 'US'],\n            ['name' => 'Mangai', 'country_code' => 'CD'],\n            ['name' => 'Irbit', 'country_code' => 'RU'],\n            ['name' => 'Frankston', 'country_code' => 'AU'],\n            ['name' => 'Cisterna di Latina', 'country_code' => 'IT'],\n            ['name' => 'Wildomar', 'country_code' => 'US'],\n            ['name' => 'Greenfield', 'country_code' => 'US'],\n            ['name' => 'Suhl', 'country_code' => 'DE'],\n            ['name' => 'Licata', 'country_code' => 'IT'],\n            ['name' => 'Tudela', 'country_code' => 'ES'],\n            ['name' => 'Maasin', 'country_code' => 'PH'],\n            ['name' => 'Braintree', 'country_code' => 'US'],\n            ['name' => 'Protvino', 'country_code' => 'RU'],\n            ['name' => 'Silves', 'country_code' => 'PT'],\n            ['name' => 'Rezh', 'country_code' => 'RU'],\n            ['name' => 'Rock Island', 'country_code' => 'US'],\n            ['name' => 'Cheltenham', 'country_code' => 'US'],\n            ['name' => 'Kannan', 'country_code' => 'JP'],\n            ['name' => 'Olot', 'country_code' => 'ES'],\n            ['name' => 'Baishi Airikecun', 'country_code' => 'CN'],\n            ['name' => 'Akto', 'country_code' => 'CN'],\n            ['name' => 'Yasynuvata', 'country_code' => 'UA'],\n            ['name' => 'Rapu-Rapu', 'country_code' => 'PH'],\n            ['name' => 'Anzhou', 'country_code' => 'CN'],\n            ['name' => 'Agua Preta', 'country_code' => 'BR'],\n            ['name' => 'Beslan', 'country_code' => 'RU'],\n            ['name' => 'Erding', 'country_code' => 'DE'],\n            ['name' => 'Evans', 'country_code' => 'US'],\n            ['name' => 'Haverstraw', 'country_code' => 'US'],\n            ['name' => 'Jose de Freitas', 'country_code' => 'BR'],\n            ['name' => 'Zuojiawu', 'country_code' => 'CN'],\n            ['name' => 'Qulsary', 'country_code' => 'KZ'],\n            ['name' => 'Partizansk', 'country_code' => 'RU'],\n            ['name' => 'Elixku', 'country_code' => 'CN'],\n            ['name' => 'Kampene', 'country_code' => 'CD'],\n            ['name' => 'Tsubata', 'country_code' => 'JP'],\n            ['name' => 'West Fargo', 'country_code' => 'US'],\n            ['name' => 'Kyshtym', 'country_code' => 'RU'],\n            ['name' => 'Lesozavodsk', 'country_code' => 'RU'],\n            ['name' => 'Boston', 'country_code' => 'GB'],\n            ['name' => 'Mount Juliet', 'country_code' => 'US'],\n            ['name' => 'Aourir', 'country_code' => 'MA'],\n            ['name' => 'San Juan', 'country_code' => 'US'],\n            ['name' => 'San Andres', 'country_code' => 'PH'],\n            ['name' => 'Oakton', 'country_code' => 'US'],\n            ['name' => 'Georgetown', 'country_code' => 'US'],\n            ['name' => 'Portage', 'country_code' => 'US'],\n            ['name' => 'Netishyn', 'country_code' => 'UA'],\n            ['name' => 'Dabutou', 'country_code' => 'CN'],\n            ['name' => 'Aguelmous', 'country_code' => 'MA'],\n            ['name' => 'Caimito', 'country_code' => 'CU'],\n            ['name' => 'Owasso', 'country_code' => 'US'],\n            ['name' => 'Commack', 'country_code' => 'US'],\n            ['name' => 'Xindian', 'country_code' => 'CN'],\n            ['name' => 'Santaluz', 'country_code' => 'BR'],\n            ['name' => 'Sokol', 'country_code' => 'RU'],\n            ['name' => 'Cassino', 'country_code' => 'IT'],\n            ['name' => 'Dagua', 'country_code' => 'CO'],\n            ['name' => 'Chimboy Shahri', 'country_code' => 'UZ'],\n            ['name' => 'Foley', 'country_code' => 'US'],\n            ['name' => 'Villajoyosa', 'country_code' => 'ES'],\n            ['name' => 'Komatsushimacho', 'country_code' => 'JP'],\n            ['name' => 'Bangar', 'country_code' => 'PH'],\n            ['name' => 'Beiya', 'country_code' => 'CN'],\n            ['name' => 'Buug', 'country_code' => 'PH'],\n            ['name' => 'Sayula', 'country_code' => 'MX'],\n            ['name' => 'Vac', 'country_code' => 'HU'],\n            ['name' => 'Basilisa', 'country_code' => 'PH'],\n            ['name' => 'Mannar', 'country_code' => 'LK'],\n            ['name' => 'Billingham', 'country_code' => 'GB'],\n            ['name' => 'Gorinchem', 'country_code' => 'NL'],\n            ['name' => 'Yejituo', 'country_code' => 'CN'],\n            ['name' => 'Torres Novas', 'country_code' => 'PT'],\n            ['name' => 'Kanada', 'country_code' => 'JP'],\n            ['name' => 'Qaladizay', 'country_code' => 'IQ'],\n            ['name' => 'New Albany', 'country_code' => 'US'],\n            ['name' => 'Pamplona', 'country_code' => 'PH'],\n            ['name' => 'Rossano', 'country_code' => 'IT'],\n            ['name' => 'Lajedo', 'country_code' => 'BR'],\n            ['name' => 'Benton', 'country_code' => 'US'],\n            ['name' => 'Zhaoqiao', 'country_code' => 'CN'],\n            ['name' => 'Nabas', 'country_code' => 'PH'],\n            ['name' => 'Voi', 'country_code' => 'KE'],\n            ['name' => 'Wangtuan', 'country_code' => 'CN'],\n            ['name' => 'La Macarena', 'country_code' => 'CO'],\n            ['name' => 'Koneurgench', 'country_code' => 'TM'],\n            ['name' => 'Nuoro', 'country_code' => 'IT'],\n            ['name' => 'Jamindan', 'country_code' => 'PH'],\n            ['name' => 'Puerto Galera', 'country_code' => 'PH'],\n            ['name' => 'Esplanada', 'country_code' => 'BR'],\n            ['name' => 'Kambove', 'country_code' => 'CD'],\n            ['name' => 'Danihe', 'country_code' => 'CN'],\n            ['name' => 'Esik', 'country_code' => 'KZ'],\n            ['name' => 'Oras', 'country_code' => 'PH'],\n            ['name' => 'Morro do Chapeu', 'country_code' => 'BR'],\n            ['name' => 'Airdrie', 'country_code' => 'GB'],\n            ['name' => 'Gramado', 'country_code' => 'BR'],\n            ['name' => 'Brant', 'country_code' => 'CA'],\n            ['name' => 'Esquel', 'country_code' => 'AR'],\n            ['name' => 'Meridian', 'country_code' => 'US'],\n            ['name' => 'Brejo', 'country_code' => 'BR'],\n            ['name' => 'Manucan', 'country_code' => 'PH'],\n            ['name' => 'Clifton Park', 'country_code' => 'US'],\n            ['name' => 'Pinerolo', 'country_code' => 'IT'],\n            ['name' => 'Torre-Pacheco', 'country_code' => 'ES'],\n            ['name' => 'Andujar', 'country_code' => 'ES'],\n            ['name' => 'Zhetisay', 'country_code' => 'KZ'],\n            ['name' => 'Belalcazar', 'country_code' => 'CO'],\n            ['name' => 'Kinel', 'country_code' => 'RU'],\n            ['name' => 'Luna', 'country_code' => 'PH'],\n            ['name' => 'Bulicun', 'country_code' => 'CN'],\n            ['name' => 'Kodaikanal', 'country_code' => 'IN'],\n            ['name' => 'Haomen', 'country_code' => 'CN'],\n            ['name' => 'Lakeshore', 'country_code' => 'CA'],\n            ['name' => 'Porsgrunn', 'country_code' => 'NO'],\n            ['name' => 'Dar Chabanne', 'country_code' => 'TN'],\n            ['name' => 'Campos Novos', 'country_code' => 'BR'],\n            ['name' => 'Masasi', 'country_code' => 'TZ'],\n            ['name' => 'Kehl', 'country_code' => 'DE'],\n            ['name' => 'Innisfil', 'country_code' => 'CA'],\n            ['name' => 'Barra Bonita', 'country_code' => 'BR'],\n            ['name' => 'Francavilla Fontana', 'country_code' => 'IT'],\n            ['name' => 'Agudos', 'country_code' => 'BR'],\n            ['name' => 'Mangalia', 'country_code' => 'RO'],\n            ['name' => 'Bettendorf', 'country_code' => 'US'],\n            ['name' => 'Yorktown', 'country_code' => 'US'],\n            ['name' => 'Sao Paulo de Olivenca', 'country_code' => 'BR'],\n            ['name' => 'Dunedin', 'country_code' => 'US'],\n            ['name' => 'Hilliard', 'country_code' => 'US'],\n            ['name' => 'Merritt Island', 'country_code' => 'US'],\n            ['name' => 'Warrnambool', 'country_code' => 'AU'],\n            ['name' => 'Emsdetten', 'country_code' => 'DE'],\n            ['name' => 'Kaniama', 'country_code' => 'CD'],\n            ['name' => 'Nueve de Julio', 'country_code' => 'AR'],\n            ['name' => 'Sao Joao da Barra', 'country_code' => 'BR'],\n            ['name' => 'Phenix City', 'country_code' => 'US'],\n            ['name' => 'Sambir', 'country_code' => 'UA'],\n            ['name' => 'Addison', 'country_code' => 'US'],\n            ['name' => 'Muhlhausen', 'country_code' => 'DE'],\n            ['name' => 'Selcuk', 'country_code' => 'TR'],\n            ['name' => 'Camamu', 'country_code' => 'BR'],\n            ['name' => 'Coesfeld', 'country_code' => 'DE'],\n            ['name' => 'Sonson', 'country_code' => 'CO'],\n            ['name' => 'Roseville', 'country_code' => 'US'],\n            ['name' => 'Castricum', 'country_code' => 'NL'],\n            ['name' => 'Careiro', 'country_code' => 'BR'],\n            ['name' => 'Tambulig', 'country_code' => 'PH'],\n            ['name' => 'Dama', 'country_code' => 'CN'],\n            ['name' => 'Ma alot Tarshiha', 'country_code' => 'IL'],\n            ['name' => 'Sankt Ingbert', 'country_code' => 'DE'],\n            ['name' => 'Zhmerynka', 'country_code' => 'UA'],\n            ['name' => 'Nyaungdon', 'country_code' => 'MM'],\n            ['name' => 'Udhampur', 'country_code' => 'IN'],\n            ['name' => 'Jaslo', 'country_code' => 'PL'],\n            ['name' => 'Kerava', 'country_code' => 'FI'],\n            ['name' => 'Isla de Maipo', 'country_code' => 'CL'],\n            ['name' => 'Morohongo', 'country_code' => 'JP'],\n            ['name' => 'Oakville', 'country_code' => 'US'],\n            ['name' => 'Nejapa', 'country_code' => 'SV'],\n            ['name' => 'Tucker', 'country_code' => 'US'],\n            ['name' => 'Queanbeyan', 'country_code' => 'AU'],\n            ['name' => 'Moorpark', 'country_code' => 'US'],\n            ['name' => 'Rende', 'country_code' => 'IT'],\n            ['name' => 'San Andres', 'country_code' => 'PH'],\n            ['name' => 'San Pablo', 'country_code' => 'CO'],\n            ['name' => 'Oeiras', 'country_code' => 'BR'],\n            ['name' => 'Monrovia', 'country_code' => 'US'],\n            ['name' => 'Oak Creek', 'country_code' => 'US'],\n            ['name' => 'Tomelloso', 'country_code' => 'ES'],\n            ['name' => 'San Bernardo del Viento', 'country_code' => 'CO'],\n            ['name' => 'Rifu', 'country_code' => 'JP'],\n            ['name' => 'La Ciotat', 'country_code' => 'FR'],\n            ['name' => 'Brighton', 'country_code' => 'US'],\n            ['name' => 'La Libertad', 'country_code' => 'SV'],\n            ['name' => 'Claremont', 'country_code' => 'US'],\n            ['name' => 'Pingshang', 'country_code' => 'CN'],\n            ['name' => 'Oswego', 'country_code' => 'US'],\n            ['name' => 'Post Falls', 'country_code' => 'US'],\n            ['name' => 'Smarhon ', 'country_code' => 'BY'],\n            ['name' => 'Mankayan', 'country_code' => 'PH'],\n            ['name' => 'Peachtree City', 'country_code' => 'US'],\n            ['name' => 'Palapye', 'country_code' => 'BW'],\n            ['name' => 'Alicia', 'country_code' => 'PH'],\n            ['name' => 'Lumba-a-Bayabao', 'country_code' => 'PH'],\n            ['name' => 'Bantay', 'country_code' => 'PH'],\n            ['name' => 'At Turrah', 'country_code' => 'JO'],\n            ['name' => 'Ban Mueang Na Tai', 'country_code' => 'TH'],\n            ['name' => 'Batobato', 'country_code' => 'PH'],\n            ['name' => 'Araguatins', 'country_code' => 'BR'],\n            ['name' => 'Augusta', 'country_code' => 'IT'],\n            ['name' => 'Zacatepec', 'country_code' => 'MX'],\n            ['name' => 'Jyvaskylan Maalaiskunta', 'country_code' => 'FI'],\n            ['name' => 'Avdiivka', 'country_code' => 'UA'],\n            ['name' => 'Magsaysay', 'country_code' => 'PH'],\n            ['name' => 'Natick', 'country_code' => 'US'],\n            ['name' => 'French Valley', 'country_code' => 'US'],\n            ['name' => 'Somma Vesuviana', 'country_code' => 'IT'],\n            ['name' => 'Farafenni', 'country_code' => 'GM'],\n            ['name' => 'Miranda de Ebro', 'country_code' => 'ES'],\n            ['name' => 'Portsmouth', 'country_code' => 'US'],\n            ['name' => 'Canicatti', 'country_code' => 'IT'],\n            ['name' => 'Tuttlingen', 'country_code' => 'DE'],\n            ['name' => 'Viru', 'country_code' => 'PE'],\n            ['name' => 'Cento', 'country_code' => 'IT'],\n            ['name' => 'Galloway', 'country_code' => 'US'],\n            ['name' => 'Shawnee', 'country_code' => 'US'],\n            ['name' => 'Hellendoorn', 'country_code' => 'NL'],\n            ['name' => 'Sertania', 'country_code' => 'BR'],\n            ['name' => 'Adrano', 'country_code' => 'IT'],\n            ['name' => 'Conegliano', 'country_code' => 'IT'],\n            ['name' => 'Onteniente', 'country_code' => 'ES'],\n            ['name' => 'Real', 'country_code' => 'PH'],\n            ['name' => 'Ewing', 'country_code' => 'US'],\n            ['name' => 'Gillette', 'country_code' => 'US'],\n            ['name' => 'Enrile', 'country_code' => 'PH'],\n            ['name' => 'Limburg', 'country_code' => 'DE'],\n            ['name' => 'Tooele', 'country_code' => 'US'],\n            ['name' => 'Guayaramerin', 'country_code' => 'BO'],\n            ['name' => 'Porta Westfalica', 'country_code' => 'DE'],\n            ['name' => 'Itapicuru', 'country_code' => 'BR'],\n            ['name' => 'Fraiburgo', 'country_code' => 'BR'],\n            ['name' => 'Salinas', 'country_code' => 'EC'],\n            ['name' => 'Miyajima', 'country_code' => 'JP'],\n            ['name' => 'Accrington', 'country_code' => 'GB'],\n            ['name' => 'Zvishavane', 'country_code' => 'ZW'],\n            ['name' => 'Rongwo', 'country_code' => 'CN'],\n            ['name' => 'Velasco Ibarra', 'country_code' => 'EC'],\n            ['name' => 'Zhentang', 'country_code' => 'CN'],\n            ['name' => 'Trumbull', 'country_code' => 'US'],\n            ['name' => 'Boyarka', 'country_code' => 'RU'],\n            ['name' => 'Prattville', 'country_code' => 'US'],\n            ['name' => 'Kamenka', 'country_code' => 'RU'],\n            ['name' => 'Chortoq', 'country_code' => 'UZ'],\n            ['name' => 'Belluno', 'country_code' => 'IT'],\n            ['name' => 'Woodburn', 'country_code' => 'US'],\n            ['name' => 'Kakhovka', 'country_code' => 'UA'],\n            ['name' => 'Chernyakhovsk', 'country_code' => 'RU'],\n            ['name' => 'Prince Albert', 'country_code' => 'CA'],\n            ['name' => 'Samal', 'country_code' => 'PH'],\n            ['name' => 'Calumet City', 'country_code' => 'US'],\n            ['name' => 'Praya', 'country_code' => 'ID'],\n            ['name' => 'San Juan Capistrano', 'country_code' => 'US'],\n            ['name' => 'Vyazniki', 'country_code' => 'RU'],\n            ['name' => 'Toretsk', 'country_code' => 'UA'],\n            ['name' => 'Apodi', 'country_code' => 'BR'],\n            ['name' => 'Colinas do Tocantins', 'country_code' => 'BR'],\n            ['name' => 'Mengdong', 'country_code' => 'CN'],\n            ['name' => 'Sion', 'country_code' => 'CH'],\n            ['name' => 'Kumo', 'country_code' => 'NG'],\n            ['name' => 'Alem Paraiba', 'country_code' => 'BR'],\n            ['name' => 'Aguilas', 'country_code' => 'ES'],\n            ['name' => 'Xonobod', 'country_code' => 'UZ'],\n            ['name' => 'Zefat', 'country_code' => 'IL'],\n            ['name' => 'Chancay', 'country_code' => 'PE'],\n            ['name' => 'Karak', 'country_code' => 'PK'],\n            ['name' => 'Ingelheim', 'country_code' => 'DE'],\n            ['name' => 'Estreito', 'country_code' => 'BR'],\n            ['name' => 'Imzouren', 'country_code' => 'MA'],\n            ['name' => 'Guacari', 'country_code' => 'CO'],\n            ['name' => 'Tallkalakh', 'country_code' => 'SY'],\n            ['name' => 'Pak Chong', 'country_code' => 'TH'],\n            ['name' => 'Dayr Hafir', 'country_code' => 'SY'],\n            ['name' => 'Borbon', 'country_code' => 'PH'],\n            ['name' => 'Andover', 'country_code' => 'US'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Marialva', 'country_code' => 'BR'],\n            ['name' => 'Usuki', 'country_code' => 'JP'],\n            ['name' => 'Cooper City', 'country_code' => 'US'],\n            ['name' => 'Dinas', 'country_code' => 'PH'],\n            ['name' => 'Burriana', 'country_code' => 'ES'],\n            ['name' => 'Leyland', 'country_code' => 'GB'],\n            ['name' => 'Kundian', 'country_code' => 'PK'],\n            ['name' => 'Laur', 'country_code' => 'PH'],\n            ['name' => 'Svetlograd', 'country_code' => 'RU'],\n            ['name' => 'Teruel', 'country_code' => 'ES'],\n            ['name' => 'Santiago de Tolu', 'country_code' => 'CO'],\n            ['name' => 'Guane', 'country_code' => 'CU'],\n            ['name' => 'Caluya', 'country_code' => 'PH'],\n            ['name' => 'Timbio', 'country_code' => 'CO'],\n            ['name' => 'El Mirage', 'country_code' => 'US'],\n            ['name' => 'Villenave-d Ornon', 'country_code' => 'FR'],\n            ['name' => 'San Fernando', 'country_code' => 'PH'],\n            ['name' => 'San Nicolas', 'country_code' => 'PH'],\n            ['name' => 'Meadow Woods', 'country_code' => 'US'],\n            ['name' => 'Turiacu', 'country_code' => 'BR'],\n            ['name' => 'Woodley', 'country_code' => 'GB'],\n            ['name' => 'Sinsheim', 'country_code' => 'DE'],\n            ['name' => 'LaGrange', 'country_code' => 'US'],\n            ['name' => 'Cambrils', 'country_code' => 'ES'],\n            ['name' => 'Trebic', 'country_code' => 'CZ'],\n            ['name' => 'Cieszyn', 'country_code' => 'PL'],\n            ['name' => 'La Vergne', 'country_code' => 'US'],\n            ['name' => 'Tayasan', 'country_code' => 'PH'],\n            ['name' => 'Guilderland', 'country_code' => 'US'],\n            ['name' => 'Middletown', 'country_code' => 'US'],\n            ['name' => 'Mount Pleasant', 'country_code' => 'US'],\n            ['name' => 'Bagabag', 'country_code' => 'PH'],\n            ['name' => 'Carrollwood', 'country_code' => 'US'],\n            ['name' => 'Boyarka', 'country_code' => 'UA'],\n            ['name' => 'Junction City', 'country_code' => 'US'],\n            ['name' => 'Inver Grove Heights', 'country_code' => 'US'],\n            ['name' => 'Gurpinar', 'country_code' => 'TR'],\n            ['name' => 'Cegled', 'country_code' => 'HU'],\n            ['name' => 'Camara de Lobos', 'country_code' => 'PT'],\n            ['name' => 'Pennsauken', 'country_code' => 'US'],\n            ['name' => 'Kilimli', 'country_code' => 'TR'],\n            ['name' => 'Kuala Kapuas', 'country_code' => 'ID'],\n            ['name' => 'Santo Domingo', 'country_code' => 'PH'],\n            ['name' => 'Uster', 'country_code' => 'CH'],\n            ['name' => 'San Sebastian de Yali', 'country_code' => 'NI'],\n            ['name' => 'Cha-am', 'country_code' => 'TH'],\n            ['name' => 'Lokbatan', 'country_code' => 'AZ'],\n            ['name' => 'Schoten', 'country_code' => 'BE'],\n            ['name' => 'La Troncal', 'country_code' => 'EC'],\n            ['name' => 'Bougouni', 'country_code' => 'ML'],\n            ['name' => 'Morfelden-Walldorf', 'country_code' => 'DE'],\n            ['name' => 'Minami-Boso', 'country_code' => 'JP'],\n            ['name' => 'Lixingcun', 'country_code' => 'CN'],\n            ['name' => 'Saint-Chamond', 'country_code' => 'FR'],\n            ['name' => 'Dietzenbach', 'country_code' => 'DE'],\n            ['name' => 'Porto Uniao', 'country_code' => 'BR'],\n            ['name' => 'Krasnik', 'country_code' => 'PL'],\n            ['name' => 'Tocancipa', 'country_code' => 'CO'],\n            ['name' => 'Jose Bonifacio', 'country_code' => 'BR'],\n            ['name' => 'Gigante', 'country_code' => 'CO'],\n            ['name' => 'Yangambi', 'country_code' => 'CD'],\n            ['name' => 'Toritama', 'country_code' => 'BR'],\n            ['name' => 'Meppen', 'country_code' => 'DE'],\n            ['name' => 'Guama Abajo', 'country_code' => 'CU'],\n            ['name' => 'Douzhuang', 'country_code' => 'CN'],\n            ['name' => 'Quimbaya', 'country_code' => 'CO'],\n            ['name' => 'Monroe', 'country_code' => 'US'],\n            ['name' => 'Savonlinna', 'country_code' => 'FI'],\n            ['name' => 'Randallstown', 'country_code' => 'US'],\n            ['name' => 'Yayladagi', 'country_code' => 'TR'],\n            ['name' => 'Nanzhiqiu', 'country_code' => 'CN'],\n            ['name' => 'Lanciano', 'country_code' => 'IT'],\n            ['name' => 'Cutral-Co', 'country_code' => 'AR'],\n            ['name' => 'Matinhos', 'country_code' => 'BR'],\n            ['name' => 'Lage', 'country_code' => 'DE'],\n            ['name' => 'Vichuga', 'country_code' => 'RU'],\n            ['name' => 'Santana do Paraiso', 'country_code' => 'BR'],\n            ['name' => 'Shenjiabang', 'country_code' => 'CN'],\n            ['name' => 'Gahanna', 'country_code' => 'US'],\n            ['name' => 'Kahoku', 'country_code' => 'JP'],\n            ['name' => 'Cartagena del Chaira', 'country_code' => 'CO'],\n            ['name' => 'Saint-Benoit', 'country_code' => 'RE'],\n            ['name' => 'Aine Draham', 'country_code' => 'TN'],\n            ['name' => 'Tago', 'country_code' => 'PH'],\n            ['name' => 'Kamata', 'country_code' => 'JP'],\n            ['name' => 'San Miguel Ixtahuacan', 'country_code' => 'GT'],\n            ['name' => 'Sanford', 'country_code' => 'US'],\n            ['name' => 'Riviera Beach', 'country_code' => 'US'],\n            ['name' => 'Tamuin', 'country_code' => 'MX'],\n            ['name' => 'Ikot Abasi', 'country_code' => 'NG'],\n            ['name' => 'Armenia', 'country_code' => 'SV'],\n            ['name' => 'Saint-Raphael', 'country_code' => 'FR'],\n            ['name' => 'Pilar', 'country_code' => 'BR'],\n            ['name' => 'Antiguo Cuscatlan', 'country_code' => 'SV'],\n            ['name' => 'Riachao do Jacuipe', 'country_code' => 'BR'],\n            ['name' => 'Wildwood', 'country_code' => 'US'],\n            ['name' => 'Pilao Arcado', 'country_code' => 'BR'],\n            ['name' => 'Paracuru', 'country_code' => 'BR'],\n            ['name' => 'Angra do Heroismo', 'country_code' => 'PT'],\n            ['name' => 'Cloppenburg', 'country_code' => 'DE'],\n            ['name' => 'Millerovo', 'country_code' => 'RU'],\n            ['name' => 'La Palma', 'country_code' => 'CU'],\n            ['name' => 'Sogod', 'country_code' => 'PH'],\n            ['name' => 'Osimo', 'country_code' => 'IT'],\n            ['name' => 'Akouda', 'country_code' => 'TN'],\n            ['name' => 'Cieza', 'country_code' => 'ES'],\n            ['name' => 'Buldon', 'country_code' => 'PH'],\n            ['name' => 'Upper Arlington', 'country_code' => 'US'],\n            ['name' => 'Dagami', 'country_code' => 'PH'],\n            ['name' => 'Yarumal', 'country_code' => 'CO'],\n            ['name' => 'Saarlouis', 'country_code' => 'DE'],\n            ['name' => 'Langford Station', 'country_code' => 'CA'],\n            ['name' => 'Auxerre', 'country_code' => 'FR'],\n            ['name' => 'Ozu', 'country_code' => 'JP'],\n            ['name' => 'Bradford West Gwillimbury', 'country_code' => 'CA'],\n            ['name' => 'Aurora', 'country_code' => 'PH'],\n            ['name' => 'Radebeul', 'country_code' => 'DE'],\n            ['name' => 'Auburn', 'country_code' => 'US'],\n            ['name' => 'Yellandu', 'country_code' => 'IN'],\n            ['name' => 'Bad Vilbel', 'country_code' => 'DE'],\n            ['name' => 'Bou Salem', 'country_code' => 'TN'],\n            ['name' => 'Plainfield', 'country_code' => 'US'],\n            ['name' => 'Luga', 'country_code' => 'RU'],\n            ['name' => 'Tecuci', 'country_code' => 'RO'],\n            ['name' => 'Crema', 'country_code' => 'IT'],\n            ['name' => 'Giddalur', 'country_code' => 'IN'],\n            ['name' => 'Colwyn Bay', 'country_code' => 'GB'],\n            ['name' => 'Cansancao', 'country_code' => 'BR'],\n            ['name' => 'Voznesensk', 'country_code' => 'UA'],\n            ['name' => 'Fonseca', 'country_code' => 'CO'],\n            ['name' => 'Massape', 'country_code' => 'BR'],\n            ['name' => 'Gorizia', 'country_code' => 'IT'],\n            ['name' => 'Tall Salhab', 'country_code' => 'SY'],\n            ['name' => 'Siltepec', 'country_code' => 'MX'],\n            ['name' => 'Ieper', 'country_code' => 'BE'],\n            ['name' => 'Wermelskirchen', 'country_code' => 'DE'],\n            ['name' => 'Oak Harbor', 'country_code' => 'US'],\n            ['name' => 'Yarim', 'country_code' => 'YE'],\n            ['name' => 'Mirnyy', 'country_code' => 'RU'],\n            ['name' => 'Winsen', 'country_code' => 'DE'],\n            ['name' => 'Curaca', 'country_code' => 'BR'],\n            ['name' => 'Joao Camara', 'country_code' => 'BR'],\n            ['name' => 'Venaria Reale', 'country_code' => 'IT'],\n            ['name' => 'Yefremov', 'country_code' => 'RU'],\n            ['name' => 'Olney', 'country_code' => 'US'],\n            ['name' => 'Trinec', 'country_code' => 'CZ'],\n            ['name' => 'Umarkot', 'country_code' => 'PK'],\n            ['name' => 'Kotah-ye  Ashro', 'country_code' => 'AF'],\n            ['name' => 'Wodonga', 'country_code' => 'AU'],\n            ['name' => 'Gorna Oryahovitsa', 'country_code' => 'BG'],\n            ['name' => 'Gasan', 'country_code' => 'PH'],\n            ['name' => 'Sabanagrande', 'country_code' => 'CO'],\n            ['name' => 'Nova Olinda do Norte', 'country_code' => 'BR'],\n            ['name' => 'Tamra', 'country_code' => 'IL'],\n            ['name' => 'San Vicente de Chucuri', 'country_code' => 'CO'],\n            ['name' => 'Campbell River', 'country_code' => 'CA'],\n            ['name' => 'Datteln', 'country_code' => 'DE'],\n            ['name' => 'Aborlan', 'country_code' => 'PH'],\n            ['name' => 'Adamantina', 'country_code' => 'BR'],\n            ['name' => 'Ubajara', 'country_code' => 'BR'],\n            ['name' => 'Chelmsford', 'country_code' => 'US'],\n            ['name' => 'Azazga', 'country_code' => 'DZ'],\n            ['name' => 'Matou', 'country_code' => 'CN'],\n            ['name' => 'Champerico', 'country_code' => 'GT'],\n            ['name' => 'San Luis de Since', 'country_code' => 'CO'],\n            ['name' => 'Iyo', 'country_code' => 'JP'],\n            ['name' => 'Puerto Lopez', 'country_code' => 'CO'],\n            ['name' => 'New City', 'country_code' => 'US'],\n            ['name' => 'Kempen', 'country_code' => 'DE'],\n            ['name' => 'Bochil', 'country_code' => 'MX'],\n            ['name' => 'Qadsayya', 'country_code' => 'SY'],\n            ['name' => 'Valencia', 'country_code' => 'PH'],\n            ['name' => 'Casilda', 'country_code' => 'AR'],\n            ['name' => 'Formigine', 'country_code' => 'IT'],\n            ['name' => 'Owings Mills', 'country_code' => 'US'],\n            ['name' => 'Seelze', 'country_code' => 'DE'],\n            ['name' => 'Raxruha', 'country_code' => 'GT'],\n            ['name' => 'Palauig', 'country_code' => 'PH'],\n            ['name' => 'Bagamoyo', 'country_code' => 'TZ'],\n            ['name' => 'Jaguariaiva', 'country_code' => 'BR'],\n            ['name' => 'Acaxochitlan', 'country_code' => 'MX'],\n            ['name' => 'Siayan', 'country_code' => 'PH'],\n            ['name' => 'Zaventem', 'country_code' => 'BE'],\n            ['name' => 'Blagoveshchensk', 'country_code' => 'RU'],\n            ['name' => 'Campoalegre', 'country_code' => 'CO'],\n            ['name' => 'Curralinho', 'country_code' => 'BR'],\n            ['name' => 'Canaman', 'country_code' => 'PH'],\n            ['name' => 'Korkino', 'country_code' => 'RU'],\n            ['name' => 'Baja', 'country_code' => 'HU'],\n            ['name' => 'Leer', 'country_code' => 'DE'],\n            ['name' => 'La Porte', 'country_code' => 'US'],\n            ['name' => 'Armacao dos Buzios', 'country_code' => 'BR'],\n            ['name' => 'Odorheiu Secuiesc', 'country_code' => 'RO'],\n            ['name' => 'Meyzieu', 'country_code' => 'FR'],\n            ['name' => 'Piui', 'country_code' => 'BR'],\n            ['name' => 'Itamarandiba', 'country_code' => 'BR'],\n            ['name' => 'Bethlehem', 'country_code' => 'US'],\n            ['name' => 'Freehold', 'country_code' => 'US'],\n            ['name' => 'Aguai', 'country_code' => 'BR'],\n            ['name' => 'Aznakayevo', 'country_code' => 'RU'],\n            ['name' => 'Loudaya', 'country_code' => 'MA'],\n            ['name' => 'Pola', 'country_code' => 'PH'],\n            ['name' => 'Victoria', 'country_code' => 'CL'],\n            ['name' => 'Nevers', 'country_code' => 'FR'],\n            ['name' => 'Barra do Choca', 'country_code' => 'BR'],\n            ['name' => 'Sao Raimundo Nonato', 'country_code' => 'BR'],\n            ['name' => 'Macon', 'country_code' => 'FR'],\n            ['name' => 'Feijo', 'country_code' => 'BR'],\n            ['name' => 'Sint-Pieters-Leeuw', 'country_code' => 'BE'],\n            ['name' => 'Brunswick', 'country_code' => 'US'],\n            ['name' => 'East Point', 'country_code' => 'US'],\n            ['name' => 'Torres', 'country_code' => 'BR'],\n            ['name' => 'DeLand', 'country_code' => 'US'],\n            ['name' => 'Tangua', 'country_code' => 'BR'],\n            ['name' => 'Magsaysay', 'country_code' => 'PH'],\n            ['name' => 'Cumberland', 'country_code' => 'US'],\n            ['name' => 'San Antonio', 'country_code' => 'PH'],\n            ['name' => 'Ilawa', 'country_code' => 'PL'],\n            ['name' => 'Martinez', 'country_code' => 'US'],\n            ['name' => 'Pleasant Hill', 'country_code' => 'US'],\n            ['name' => 'Angamali', 'country_code' => 'IN'],\n            ['name' => 'Diaowo', 'country_code' => 'CN'],\n            ['name' => 'Orangevale', 'country_code' => 'US'],\n            ['name' => 'Aksay', 'country_code' => 'KZ'],\n            ['name' => 'Guying', 'country_code' => 'CN'],\n            ['name' => 'Ringsaker', 'country_code' => 'NO'],\n            ['name' => 'Merrillville', 'country_code' => 'US'],\n            ['name' => 'Dzierzoniow', 'country_code' => 'PL'],\n            ['name' => 'Stow', 'country_code' => 'US'],\n            ['name' => 'Yangquan', 'country_code' => 'CN'],\n            ['name' => 'San Luis', 'country_code' => 'US'],\n            ['name' => 'Sagnay', 'country_code' => 'PH'],\n            ['name' => 'Shingu', 'country_code' => 'JP'],\n            ['name' => 'Calhoun', 'country_code' => 'US'],\n            ['name' => 'Ban Ang Sila', 'country_code' => 'TH'],\n            ['name' => 'Sarpol-e Zahab', 'country_code' => 'IR'],\n            ['name' => 'Crailsheim', 'country_code' => 'DE'],\n            ['name' => 'Leawood', 'country_code' => 'US'],\n            ['name' => 'Gutalac', 'country_code' => 'PH'],\n            ['name' => 'Zelenokumsk', 'country_code' => 'RU'],\n            ['name' => 'Abashiri', 'country_code' => 'JP'],\n            ['name' => 'Sao Luis do Quitunde', 'country_code' => 'BR'],\n            ['name' => 'Shangzhen', 'country_code' => 'CN'],\n            ['name' => 'Merseburg', 'country_code' => 'DE'],\n            ['name' => 'Phra Phutthabat', 'country_code' => 'TH'],\n            ['name' => 'Menlo Park', 'country_code' => 'US'],\n            ['name' => 'Haguenau', 'country_code' => 'FR'],\n            ['name' => 'Zweibrucken', 'country_code' => 'DE'],\n            ['name' => 'Canguaretama', 'country_code' => 'BR'],\n            ['name' => 'Tabor', 'country_code' => 'CZ'],\n            ['name' => 'Biharamulo', 'country_code' => 'TZ'],\n            ['name' => 'Sibuco', 'country_code' => 'PH'],\n            ['name' => 'Sun Prairie', 'country_code' => 'US'],\n            ['name' => 'Dakota Ridge', 'country_code' => 'US'],\n            ['name' => 'IJsselstein', 'country_code' => 'NL'],\n            ['name' => 'Bugojno', 'country_code' => 'BA'],\n            ['name' => 'Jaguaribe', 'country_code' => 'BR'],\n            ['name' => 'Pandan', 'country_code' => 'PH'],\n            ['name' => 'Coventry', 'country_code' => 'US'],\n            ['name' => 'Cachoeira', 'country_code' => 'BR'],\n            ['name' => 'Duenas', 'country_code' => 'PH'],\n            ['name' => 'Arcata', 'country_code' => 'US'],\n            ['name' => 'Esposende', 'country_code' => 'PT'],\n            ['name' => 'Humenne', 'country_code' => 'SK'],\n            ['name' => 'Chacabuco', 'country_code' => 'AR'],\n            ['name' => 'Guanhaes', 'country_code' => 'BR'],\n            ['name' => 'Shrirangapattana', 'country_code' => 'IN'],\n            ['name' => 'Parnarama', 'country_code' => 'BR'],\n            ['name' => 'Balingen', 'country_code' => 'DE'],\n            ['name' => 'Capela', 'country_code' => 'BR'],\n            ['name' => 'Ballesteros', 'country_code' => 'PH'],\n            ['name' => 'Hemer', 'country_code' => 'DE'],\n            ['name' => 'Sao Luis Gonzaga', 'country_code' => 'BR'],\n            ['name' => 'Canete', 'country_code' => 'CL'],\n            ['name' => 'Guimbal', 'country_code' => 'PH'],\n            ['name' => 'Barsinghausen', 'country_code' => 'DE'],\n            ['name' => 'Glastonbury', 'country_code' => 'US'],\n            ['name' => 'Lockport', 'country_code' => 'US'],\n            ['name' => 'Skhira', 'country_code' => 'TN'],\n            ['name' => 'Tabango', 'country_code' => 'PH'],\n            ['name' => 'Kopavogur', 'country_code' => 'IS'],\n            ['name' => 'Centenario', 'country_code' => 'AR'],\n            ['name' => 'Zhangzhengqiao', 'country_code' => 'CN'],\n            ['name' => 'Mandaguari', 'country_code' => 'BR'],\n            ['name' => 'Wedel', 'country_code' => 'DE'],\n            ['name' => 'Albany', 'country_code' => 'AU'],\n            ['name' => 'Cicero Dantas', 'country_code' => 'BR'],\n            ['name' => 'Mnasra', 'country_code' => 'MA'],\n            ['name' => 'Cabrobo', 'country_code' => 'BR'],\n            ['name' => 'Zimapan', 'country_code' => 'MX'],\n            ['name' => 'Pullman', 'country_code' => 'US'],\n            ['name' => 'Songcaozhen', 'country_code' => 'CN'],\n            ['name' => 'Banes', 'country_code' => 'CU'],\n            ['name' => 'Gandara', 'country_code' => 'PH'],\n            ['name' => 'Gerash', 'country_code' => 'IR'],\n            ['name' => 'Palapag', 'country_code' => 'PH'],\n            ['name' => 'Vassouras', 'country_code' => 'BR'],\n            ['name' => 'Ramnicu Sarat', 'country_code' => 'RO'],\n            ['name' => 'Youwangjie', 'country_code' => 'CN'],\n            ['name' => 'Padre Bernardo', 'country_code' => 'BR'],\n            ['name' => 'Imbatug', 'country_code' => 'PH'],\n            ['name' => 'Exmouth', 'country_code' => 'GB'],\n            ['name' => 'Boardman', 'country_code' => 'US'],\n            ['name' => 'Taiobeiras', 'country_code' => 'BR'],\n            ['name' => 'Xincheng', 'country_code' => 'CN'],\n            ['name' => 'Ahrensburg', 'country_code' => 'DE'],\n            ['name' => 'Nacogdoches', 'country_code' => 'US'],\n            ['name' => 'Merauke', 'country_code' => 'ID'],\n            ['name' => 'Kearney', 'country_code' => 'US'],\n            ['name' => 'Vestavia Hills', 'country_code' => 'US'],\n            ['name' => 'Sual', 'country_code' => 'PH'],\n            ['name' => 'Casale Monferrato', 'country_code' => 'IT'],\n            ['name' => 'North Ridgeville', 'country_code' => 'US'],\n            ['name' => 'Steinfurt', 'country_code' => 'DE'],\n            ['name' => 'Windsor', 'country_code' => 'GB'],\n            ['name' => 'Socorro', 'country_code' => 'US'],\n            ['name' => 'Vibo Valentia', 'country_code' => 'IT'],\n            ['name' => 'Randolph', 'country_code' => 'US'],\n            ['name' => 'Mogpog', 'country_code' => 'PH'],\n            ['name' => 'Cambrai', 'country_code' => 'FR'],\n            ['name' => 'Marignane', 'country_code' => 'FR'],\n            ['name' => 'Basista', 'country_code' => 'PH'],\n            ['name' => 'Missao Velha', 'country_code' => 'BR'],\n            ['name' => 'Gladstone', 'country_code' => 'AU'],\n            ['name' => 'Campina', 'country_code' => 'RO'],\n            ['name' => 'Gulkevichi', 'country_code' => 'RU'],\n            ['name' => 'Znojmo', 'country_code' => 'CZ'],\n            ['name' => 'Bogorodsk', 'country_code' => 'RU'],\n            ['name' => 'Businga', 'country_code' => 'CD'],\n            ['name' => 'Komarno', 'country_code' => 'SK'],\n            ['name' => 'Villena', 'country_code' => 'ES'],\n            ['name' => 'Inca', 'country_code' => 'ES'],\n            ['name' => 'Datang', 'country_code' => 'CN'],\n            ['name' => 'Shahin Dezh', 'country_code' => 'IR'],\n            ['name' => 'Redmond', 'country_code' => 'US'],\n            ['name' => 'Caldono', 'country_code' => 'CO'],\n            ['name' => 'Valuyki', 'country_code' => 'RU'],\n            ['name' => 'Quinchia', 'country_code' => 'CO'],\n            ['name' => 'Firestone', 'country_code' => 'US'],\n            ['name' => 'Cravinhos', 'country_code' => 'BR'],\n            ['name' => 'San Enrique', 'country_code' => 'PH'],\n            ['name' => 'Goshen', 'country_code' => 'US'],\n            ['name' => 'Goiatuba', 'country_code' => 'BR'],\n            ['name' => 'Vitrolles', 'country_code' => 'FR'],\n            ['name' => 'Carmel', 'country_code' => 'US'],\n            ['name' => 'Panglao', 'country_code' => 'PH'],\n            ['name' => 'Butte', 'country_code' => 'US'],\n            ['name' => 'Russellville', 'country_code' => 'US'],\n            ['name' => 'Dartmouth', 'country_code' => 'US'],\n            ['name' => 'Nowy Targ', 'country_code' => 'PL'],\n            ['name' => 'Sao Luis de Montes Belos', 'country_code' => 'BR'],\n            ['name' => 'Grass Valley', 'country_code' => 'US'],\n            ['name' => 'Menen', 'country_code' => 'BE'],\n            ['name' => 'Pascani', 'country_code' => 'RO'],\n            ['name' => 'Peyziwat', 'country_code' => 'CN'],\n            ['name' => 'Termoli', 'country_code' => 'IT'],\n            ['name' => 'Geldern', 'country_code' => 'DE'],\n            ['name' => 'Viernheim', 'country_code' => 'DE'],\n            ['name' => 'Parkland', 'country_code' => 'US'],\n            ['name' => 'Pomerode', 'country_code' => 'BR'],\n            ['name' => 'Romans-sur-Isere', 'country_code' => 'FR'],\n            ['name' => 'Wickford', 'country_code' => 'GB'],\n            ['name' => 'Binche', 'country_code' => 'BE'],\n            ['name' => 'Uonuma', 'country_code' => 'JP'],\n            ['name' => 'Dimona', 'country_code' => 'IL'],\n            ['name' => 'San Agustin', 'country_code' => 'CO'],\n            ['name' => 'Mascalucia', 'country_code' => 'IT'],\n            ['name' => 'Cabanglasan', 'country_code' => 'PH'],\n            ['name' => 'Cishan', 'country_code' => 'CN'],\n            ['name' => 'Bariri', 'country_code' => 'BR'],\n            ['name' => 'Goch', 'country_code' => 'DE'],\n            ['name' => 'Piombino', 'country_code' => 'IT'],\n            ['name' => 'Sao Jose do Egito', 'country_code' => 'BR'],\n            ['name' => 'Six-Fours-les-Plages', 'country_code' => 'FR'],\n            ['name' => 'Jagna', 'country_code' => 'PH'],\n            ['name' => 'Atiquizaya', 'country_code' => 'SV'],\n            ['name' => 'Stuhr', 'country_code' => 'DE'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Castelfranco Veneto', 'country_code' => 'IT'],\n            ['name' => 'San Antonio de los Banos', 'country_code' => 'CU'],\n            ['name' => 'Kennesaw', 'country_code' => 'US'],\n            ['name' => 'Almeirim', 'country_code' => 'BR'],\n            ['name' => 'Victoria Falls', 'country_code' => 'ZW'],\n            ['name' => 'Spruce Grove', 'country_code' => 'CA'],\n            ['name' => 'San Juan Nepomuceno', 'country_code' => 'CO'],\n            ['name' => 'Zhaitangcun', 'country_code' => 'CN'],\n            ['name' => 'Almendralejo', 'country_code' => 'ES'],\n            ['name' => 'Majagual', 'country_code' => 'CO'],\n            ['name' => 'Adelanto', 'country_code' => 'US'],\n            ['name' => 'Irvine', 'country_code' => 'GB'],\n            ['name' => 'Sneek', 'country_code' => 'NL'],\n            ['name' => 'Sao Jose do Belmonte', 'country_code' => 'BR'],\n            ['name' => 'Ken Caryl', 'country_code' => 'US'],\n            ['name' => 'Carlsbad', 'country_code' => 'US'],\n            ['name' => 'Braco do Norte', 'country_code' => 'BR'],\n            ['name' => 'Eirunepe', 'country_code' => 'BR'],\n            ['name' => 'Deggendorf', 'country_code' => 'DE'],\n            ['name' => 'Domingos Martins', 'country_code' => 'BR'],\n            ['name' => 'University Place', 'country_code' => 'US'],\n            ['name' => 'Yinchengpu', 'country_code' => 'CN'],\n            ['name' => 'Baltiysk', 'country_code' => 'RU'],\n            ['name' => 'Douglasville', 'country_code' => 'US'],\n            ['name' => 'Salisbury', 'country_code' => 'US'],\n            ['name' => 'Kadingilan', 'country_code' => 'PH'],\n            ['name' => 'Olutanga', 'country_code' => 'PH'],\n            ['name' => 'Oulad Zemam', 'country_code' => 'MA'],\n            ['name' => 'Furmanov', 'country_code' => 'RU'],\n            ['name' => 'Laramie', 'country_code' => 'US'],\n            ['name' => 'San Luis', 'country_code' => 'PH'],\n            ['name' => 'Tynaarlo', 'country_code' => 'NL'],\n            ['name' => 'Nizhneudinsk', 'country_code' => 'RU'],\n            ['name' => 'Lake Stevens', 'country_code' => 'US'],\n            ['name' => 'Valparaiso', 'country_code' => 'US'],\n            ['name' => 'Moose Jaw', 'country_code' => 'CA'],\n            ['name' => 'Custodia', 'country_code' => 'BR'],\n            ['name' => 'Fairborn', 'country_code' => 'US'],\n            ['name' => 'Reghin', 'country_code' => 'RO'],\n            ['name' => 'Ban Pak Phun', 'country_code' => 'TH'],\n            ['name' => 'Camiri', 'country_code' => 'BO'],\n            ['name' => 'Santa Pola', 'country_code' => 'ES'],\n            ['name' => 'Estero', 'country_code' => 'US'],\n            ['name' => 'Mason', 'country_code' => 'US'],\n            ['name' => 'Uelzen', 'country_code' => 'DE'],\n            ['name' => 'Miguel Alves', 'country_code' => 'BR'],\n            ['name' => 'Tekes', 'country_code' => 'CN'],\n            ['name' => 'Ouro Fino', 'country_code' => 'BR'],\n            ['name' => 'Penha', 'country_code' => 'BR'],\n            ['name' => 'Bell Ville', 'country_code' => 'AR'],\n            ['name' => 'Cottonwood Heights', 'country_code' => 'US'],\n            ['name' => 'Kaneohe', 'country_code' => 'US'],\n            ['name' => 'Sonoma', 'country_code' => 'US'],\n            ['name' => 'Luuq', 'country_code' => 'SO'],\n            ['name' => 'Sulop', 'country_code' => 'PH'],\n            ['name' => 'Geraardsbergen', 'country_code' => 'BE'],\n            ['name' => 'Ronda', 'country_code' => 'ES'],\n            ['name' => 'Villafranca di Verona', 'country_code' => 'IT'],\n            ['name' => 'Bugasong', 'country_code' => 'PH'],\n            ['name' => 'Dej', 'country_code' => 'RO'],\n            ['name' => 'Capoocan', 'country_code' => 'PH'],\n            ['name' => 'Leo', 'country_code' => 'BF'],\n            ['name' => 'Poco Redondo', 'country_code' => 'BR'],\n            ['name' => 'Mella', 'country_code' => 'CU'],\n            ['name' => 'Galesburg', 'country_code' => 'US'],\n            ['name' => 'Jishi', 'country_code' => 'CN'],\n            ['name' => 'Penticton', 'country_code' => 'CA'],\n            ['name' => 'Gimbi', 'country_code' => 'ET'],\n            ['name' => 'Gurupa', 'country_code' => 'BR'],\n            ['name' => 'Didouche Mourad', 'country_code' => 'DZ'],\n            ['name' => 'San Marcelino', 'country_code' => 'PH'],\n            ['name' => 'Todos Santos Cuchumatan', 'country_code' => 'GT'],\n            ['name' => 'Xiadian', 'country_code' => 'CN'],\n            ['name' => 'Belen', 'country_code' => 'TR'],\n            ['name' => 'Chilecito', 'country_code' => 'AR'],\n            ['name' => 'Teykovo', 'country_code' => 'RU'],\n            ['name' => 'Sukhoy Log', 'country_code' => 'RU'],\n            ['name' => 'Vyatskiye Polyany', 'country_code' => 'RU'],\n            ['name' => 'Puerto Rico', 'country_code' => 'CO'],\n            ['name' => 'Mosonmagyarovar', 'country_code' => 'HU'],\n            ['name' => 'Warsaw', 'country_code' => 'US'],\n            ['name' => 'San Antero', 'country_code' => 'CO'],\n            ['name' => 'Cacapava do Sul', 'country_code' => 'BR'],\n            ['name' => 'Balasan', 'country_code' => 'PH'],\n            ['name' => 'Moncao', 'country_code' => 'BR'],\n            ['name' => 'Cantel', 'country_code' => 'GT'],\n            ['name' => 'Bayog', 'country_code' => 'PH'],\n            ['name' => 'Knokke-Heist', 'country_code' => 'BE'],\n            ['name' => 'Allacapan', 'country_code' => 'PH'],\n            ['name' => 'Fatehpur Sikri', 'country_code' => 'IN'],\n            ['name' => 'Korschenbroich', 'country_code' => 'DE'],\n            ['name' => 'Korsakov', 'country_code' => 'RU'],\n            ['name' => 'Lianmuqin Kancun', 'country_code' => 'CN'],\n            ['name' => 'San Antonio', 'country_code' => 'PH'],\n            ['name' => 'Ibate', 'country_code' => 'BR'],\n            ['name' => 'Lebowakgomo', 'country_code' => 'ZA'],\n            ['name' => 'Sao Domingos do Maranhao', 'country_code' => 'BR'],\n            ['name' => 'Dois Irmaos', 'country_code' => 'BR'],\n            ['name' => 'Mildura', 'country_code' => 'AU'],\n            ['name' => 'Asse', 'country_code' => 'BE'],\n            ['name' => 'San Dimas', 'country_code' => 'US'],\n            ['name' => 'Sakaiminato', 'country_code' => 'JP'],\n            ['name' => 'Corinto', 'country_code' => 'CO'],\n            ['name' => 'Batouri', 'country_code' => 'CM'],\n            ['name' => 'Rheinfelden (Baden)', 'country_code' => 'DE'],\n            ['name' => 'Ayvacik', 'country_code' => 'TR'],\n            ['name' => 'Sao Bento', 'country_code' => 'BR'],\n            ['name' => 'Zhitiqara', 'country_code' => 'KZ'],\n            ['name' => 'Tortosa', 'country_code' => 'ES'],\n            ['name' => 'Ciudad Tecun Uman', 'country_code' => 'GT'],\n            ['name' => 'Shangcaiyuan', 'country_code' => 'CN'],\n            ['name' => 'Joao Alfredo', 'country_code' => 'BR'],\n            ['name' => 'Dana Point', 'country_code' => 'US'],\n            ['name' => 'San Javier', 'country_code' => 'ES'],\n            ['name' => 'Ipero', 'country_code' => 'BR'],\n            ['name' => 'Panjakent', 'country_code' => 'TJ'],\n            ['name' => 'Languyan', 'country_code' => 'PH'],\n            ['name' => 'Port Moody', 'country_code' => 'CA'],\n            ['name' => 'Riverhead', 'country_code' => 'US'],\n            ['name' => 'Castro', 'country_code' => 'CL'],\n            ['name' => 'Touros', 'country_code' => 'BR'],\n            ['name' => 'Falls', 'country_code' => 'US'],\n            ['name' => 'Slobodskoy', 'country_code' => 'RU'],\n            ['name' => 'Shaliuhe', 'country_code' => 'CN'],\n            ['name' => 'Midlothian', 'country_code' => 'US'],\n            ['name' => 'Malangas', 'country_code' => 'PH'],\n            ['name' => 'Newark', 'country_code' => 'US'],\n            ['name' => 'Santa Maria', 'country_code' => 'PH'],\n            ['name' => 'Alamogordo', 'country_code' => 'US'],\n            ['name' => 'Boca do Acre', 'country_code' => 'BR'],\n            ['name' => 'Kasulu', 'country_code' => 'TZ'],\n            ['name' => 'Leganes', 'country_code' => 'PH'],\n            ['name' => 'Alabaster', 'country_code' => 'US'],\n            ['name' => 'Pikesville', 'country_code' => 'US'],\n            ['name' => 'Hlukhiv', 'country_code' => 'UA'],\n            ['name' => 'Qarqan', 'country_code' => 'CN'],\n            ['name' => 'Deer Park', 'country_code' => 'US'],\n            ['name' => 'Dumfries', 'country_code' => 'GB'],\n            ['name' => 'Navodari', 'country_code' => 'RO'],\n            ['name' => 'Derry', 'country_code' => 'US'],\n            ['name' => 'Aranda de Duero', 'country_code' => 'ES']\n        ]);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n        DB::table('cities')->insert([\n            ['name' => 'Shobara', 'country_code' => 'JP'],\n            ['name' => 'Nokia', 'country_code' => 'FI'],\n            ['name' => 'Woodridge', 'country_code' => 'US'],\n            ['name' => 'Baturite', 'country_code' => 'BR'],\n            ['name' => 'Abbiategrasso', 'country_code' => 'IT'],\n            ['name' => 'Kolin', 'country_code' => 'CZ'],\n            ['name' => 'Kohtla-Jarve', 'country_code' => 'EE'],\n            ['name' => 'Biberach', 'country_code' => 'DE'],\n            ['name' => 'Southport', 'country_code' => 'AU'],\n            ['name' => 'Bridgeton', 'country_code' => 'US'],\n            ['name' => 'Conceicao de Jacuipe', 'country_code' => 'BR'],\n            ['name' => 'Sitangkai', 'country_code' => 'PH'],\n            ['name' => 'Greer', 'country_code' => 'US'],\n            ['name' => 'Matalom', 'country_code' => 'PH'],\n            ['name' => 'Tayshet', 'country_code' => 'RU'],\n            ['name' => 'Umaria', 'country_code' => 'IN'],\n            ['name' => 'Tavda', 'country_code' => 'RU'],\n            ['name' => 'La Virginia', 'country_code' => 'CO'],\n            ['name' => 'Cuenca', 'country_code' => 'PH'],\n            ['name' => 'Tobias Fornier', 'country_code' => 'PH'],\n            ['name' => 'Lexington', 'country_code' => 'US'],\n            ['name' => 'Police', 'country_code' => 'PL'],\n            ['name' => 'Ourilandia do Norte', 'country_code' => 'BR'],\n            ['name' => 'Zgorzelec', 'country_code' => 'PL'],\n            ['name' => 'Oldenzaal', 'country_code' => 'NL'],\n            ['name' => 'Tynda', 'country_code' => 'RU'],\n            ['name' => 'Huangzhuang', 'country_code' => 'CN'],\n            ['name' => 'Pocone', 'country_code' => 'BR'],\n            ['name' => 'Springville', 'country_code' => 'US'],\n            ['name' => 'Obukhiv', 'country_code' => 'UA'],\n            ['name' => 'Espinho', 'country_code' => 'PT'],\n            ['name' => 'Columbio', 'country_code' => 'PH'],\n            ['name' => 'Canavieiras', 'country_code' => 'BR'],\n            ['name' => 'Saratoga Springs', 'country_code' => 'US'],\n            ['name' => 'Levice', 'country_code' => 'SK'],\n            ['name' => 'Pambujan', 'country_code' => 'PH'],\n            ['name' => 'Temascalapa', 'country_code' => 'MX'],\n            ['name' => 'Pivijay', 'country_code' => 'CO'],\n            ['name' => 'Shatura', 'country_code' => 'RU'],\n            ['name' => 'Camacan', 'country_code' => 'BR'],\n            ['name' => 'Bragado', 'country_code' => 'AR'],\n            ['name' => 'Copperas Cove', 'country_code' => 'US'],\n            ['name' => 'Epsom', 'country_code' => 'GB'],\n            ['name' => 'Fraijanes', 'country_code' => 'GT'],\n            ['name' => 'San Quintin', 'country_code' => 'PH'],\n            ['name' => 'Casiguran', 'country_code' => 'PH'],\n            ['name' => 'Castelfranco Emilia', 'country_code' => 'IT'],\n            ['name' => 'Pribram', 'country_code' => 'CZ'],\n            ['name' => 'Khvaf', 'country_code' => 'IR'],\n            ['name' => 'San Lazzaro di Savena', 'country_code' => 'IT'],\n            ['name' => 'Jaguarari', 'country_code' => 'BR'],\n            ['name' => 'Floresta', 'country_code' => 'BR'],\n            ['name' => 'Fucheng', 'country_code' => 'CN'],\n            ['name' => 'Bou Ahmed', 'country_code' => 'MA'],\n            ['name' => 'Correntina', 'country_code' => 'BR'],\n            ['name' => 'Motherwell', 'country_code' => 'GB'],\n            ['name' => 'Lucera', 'country_code' => 'IT'],\n            ['name' => 'Catubig', 'country_code' => 'PH'],\n            ['name' => 'American Fork', 'country_code' => 'US'],\n            ['name' => 'Shimotoba', 'country_code' => 'JP'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Bad Nauheim', 'country_code' => 'DE'],\n            ['name' => 'Sanarate', 'country_code' => 'GT'],\n            ['name' => 'Munai', 'country_code' => 'PH'],\n            ['name' => 'Andover', 'country_code' => 'US'],\n            ['name' => 'Matthews', 'country_code' => 'US'],\n            ['name' => 'Kamaishi', 'country_code' => 'JP'],\n            ['name' => 'Barugo', 'country_code' => 'PH'],\n            ['name' => 'De Aar', 'country_code' => 'ZA'],\n            ['name' => 'Medina', 'country_code' => 'PH'],\n            ['name' => 'Rio das Pedras', 'country_code' => 'BR'],\n            ['name' => 'Laojiezi', 'country_code' => 'CN'],\n            ['name' => 'Djenne', 'country_code' => 'ML'],\n            ['name' => 'Massafra', 'country_code' => 'IT'],\n            ['name' => 'Carangola', 'country_code' => 'BR'],\n            ['name' => 'Arteijo', 'country_code' => 'ES'],\n            ['name' => 'Mashiki', 'country_code' => 'JP'],\n            ['name' => 'San Luis', 'country_code' => 'CU'],\n            ['name' => 'Wakabadai', 'country_code' => 'JP'],\n            ['name' => 'Plaisir', 'country_code' => 'FR'],\n            ['name' => 'Puebloviejo', 'country_code' => 'CO'],\n            ['name' => 'Mushie', 'country_code' => 'CD'],\n            ['name' => 'Timimoun', 'country_code' => 'DZ'],\n            ['name' => 'Liptovsky Mikulas', 'country_code' => 'SK'],\n            ['name' => 'Sarikaya', 'country_code' => 'TR'],\n            ['name' => 'Numancia', 'country_code' => 'PH'],\n            ['name' => 'Woodstock', 'country_code' => 'US'],\n            ['name' => 'Maragogi', 'country_code' => 'BR'],\n            ['name' => 'Forbe Oroya', 'country_code' => 'PE'],\n            ['name' => 'Bardejov', 'country_code' => 'SK'],\n            ['name' => 'Marantao', 'country_code' => 'PH'],\n            ['name' => 'Descalvado', 'country_code' => 'BR'],\n            ['name' => 'Itzehoe', 'country_code' => 'DE'],\n            ['name' => 'Bautista', 'country_code' => 'PH'],\n            ['name' => 'Florence', 'country_code' => 'US'],\n            ['name' => 'Glossop', 'country_code' => 'GB'],\n            ['name' => 'Julich', 'country_code' => 'DE'],\n            ['name' => 'Leamington', 'country_code' => 'CA'],\n            ['name' => 'Arroyomolinos', 'country_code' => 'ES'],\n            ['name' => 'Lampertheim', 'country_code' => 'DE'],\n            ['name' => 'Jalajala', 'country_code' => 'PH'],\n            ['name' => 'Imbituva', 'country_code' => 'BR'],\n            ['name' => 'Esperanca', 'country_code' => 'BR'],\n            ['name' => 'Chernushka', 'country_code' => 'RU'],\n            ['name' => 'Santa Ana', 'country_code' => 'PH'],\n            ['name' => 'Mataquescuintla', 'country_code' => 'GT'],\n            ['name' => 'Winsford', 'country_code' => 'GB'],\n            ['name' => 'Barao de Cocais', 'country_code' => 'BR'],\n            ['name' => 'Bernburg', 'country_code' => 'DE'],\n            ['name' => 'Dellys', 'country_code' => 'DZ'],\n            ['name' => 'Northbrook', 'country_code' => 'US'],\n            ['name' => 'Baragua', 'country_code' => 'CU'],\n            ['name' => 'Gandu', 'country_code' => 'BR'],\n            ['name' => 'Mazarron', 'country_code' => 'ES'],\n            ['name' => 'Oiso', 'country_code' => 'JP'],\n            ['name' => 'Wernigerode', 'country_code' => 'DE'],\n            ['name' => 'Ozd', 'country_code' => 'HU'],\n            ['name' => 'Trekhgornyy', 'country_code' => 'RU'],\n            ['name' => 'Vicencia', 'country_code' => 'BR'],\n            ['name' => 'Forchheim', 'country_code' => 'DE'],\n            ['name' => 'St. Charles', 'country_code' => 'US'],\n            ['name' => 'Arbaoua', 'country_code' => 'MA'],\n            ['name' => 'Coatepec Harinas', 'country_code' => 'MX'],\n            ['name' => 'Rosmalen', 'country_code' => 'NL'],\n            ['name' => 'Claveria', 'country_code' => 'PH'],\n            ['name' => 'Kuji', 'country_code' => 'JP'],\n            ['name' => 'Dao', 'country_code' => 'PH'],\n            ['name' => 'Santa Cruz das Palmeiras', 'country_code' => 'BR'],\n            ['name' => 'Oeiras do Para', 'country_code' => 'BR'],\n            ['name' => 'Banate', 'country_code' => 'PH'],\n            ['name' => 'Fairmont', 'country_code' => 'US'],\n            ['name' => 'Tafas', 'country_code' => 'SY'],\n            ['name' => 'Puerto Escondido', 'country_code' => 'CO'],\n            ['name' => 'Manises', 'country_code' => 'ES'],\n            ['name' => 'Naumburg', 'country_code' => 'DE'],\n            ['name' => 'Baraawe', 'country_code' => 'SO'],\n            ['name' => 'Safita', 'country_code' => 'SY'],\n            ['name' => 'Presidente Figueiredo', 'country_code' => 'BR'],\n            ['name' => 'Kaarina', 'country_code' => 'FI'],\n            ['name' => 'Sao Miguel Arcanjo', 'country_code' => 'BR'],\n            ['name' => 'Ylojarvi', 'country_code' => 'FI'],\n            ['name' => 'Vechta', 'country_code' => 'DE'],\n            ['name' => 'Bocas de Satinga', 'country_code' => 'CO'],\n            ['name' => 'Nazare da Mata', 'country_code' => 'BR'],\n            ['name' => 'Payshamba Shahri', 'country_code' => 'UZ'],\n            ['name' => 'Altenburg', 'country_code' => 'DE'],\n            ['name' => 'Pombal', 'country_code' => 'BR'],\n            ['name' => 'Baiyan', 'country_code' => 'CN'],\n            ['name' => 'Silvia', 'country_code' => 'CO'],\n            ['name' => 'Nurlat', 'country_code' => 'RU'],\n            ['name' => 'Tres Marias', 'country_code' => 'BR'],\n            ['name' => 'Pomian', 'country_code' => 'CN'],\n            ['name' => 'Espigao D Oeste', 'country_code' => 'BR'],\n            ['name' => 'Yuzhne', 'country_code' => 'UA'],\n            ['name' => 'Bacarra', 'country_code' => 'PH'],\n            ['name' => 'Camaiore', 'country_code' => 'IT'],\n            ['name' => 'Concon', 'country_code' => 'CL'],\n            ['name' => 'Abulug', 'country_code' => 'PH'],\n            ['name' => 'Favara', 'country_code' => 'IT'],\n            ['name' => 'Dobryanka', 'country_code' => 'RU'],\n            ['name' => 'Ridgecrest', 'country_code' => 'US'],\n            ['name' => 'Cururupu', 'country_code' => 'BR'],\n            ['name' => 'El Dificil', 'country_code' => 'CO'],\n            ['name' => 'Lower Makefield', 'country_code' => 'US'],\n            ['name' => 'Initao', 'country_code' => 'PH'],\n            ['name' => 'Mateur', 'country_code' => 'TN'],\n            ['name' => 'Pitanga', 'country_code' => 'BR'],\n            ['name' => 'East Kelowna', 'country_code' => 'CA'],\n            ['name' => 'Campulung', 'country_code' => 'RO'],\n            ['name' => 'Aalsmeer', 'country_code' => 'NL'],\n            ['name' => 'Godollo', 'country_code' => 'HU'],\n            ['name' => 'Paratinga', 'country_code' => 'BR'],\n            ['name' => 'Redcliff', 'country_code' => 'ZW'],\n            ['name' => 'Totana', 'country_code' => 'ES'],\n            ['name' => 'Ostrogozhsk', 'country_code' => 'RU'],\n            ['name' => 'Salina', 'country_code' => 'US'],\n            ['name' => 'Deurne', 'country_code' => 'NL'],\n            ['name' => 'Mioveni', 'country_code' => 'RO'],\n            ['name' => 'Inza', 'country_code' => 'CO'],\n            ['name' => 'Aloguinsan', 'country_code' => 'PH'],\n            ['name' => 'Lawrence', 'country_code' => 'US'],\n            ['name' => 'Castro-Urdiales', 'country_code' => 'ES'],\n            ['name' => 'Sao Joaquim de Bicas', 'country_code' => 'BR'],\n            ['name' => 'Guindulman', 'country_code' => 'PH'],\n            ['name' => 'Juban', 'country_code' => 'PH'],\n            ['name' => 'Massillon', 'country_code' => 'US'],\n            ['name' => 'Spanaway', 'country_code' => 'US'],\n            ['name' => 'Kulebaki', 'country_code' => 'RU'],\n            ['name' => 'Rio Branco do Sul', 'country_code' => 'BR'],\n            ['name' => 'Diplahan', 'country_code' => 'PH'],\n            ['name' => 'Bonifacio', 'country_code' => 'PH'],\n            ['name' => 'Rethymno', 'country_code' => 'GR'],\n            ['name' => 'Grodzisk Mazowiecki', 'country_code' => 'PL'],\n            ['name' => 'Starkville', 'country_code' => 'US'],\n            ['name' => 'Yorii', 'country_code' => 'JP'],\n            ['name' => 'Slantsy', 'country_code' => 'RU'],\n            ['name' => 'Yankou', 'country_code' => 'CN'],\n            ['name' => 'I-n-Salah', 'country_code' => 'DZ'],\n            ['name' => 'Louvain-la-Neuve', 'country_code' => 'BE'],\n            ['name' => 'Milazzo', 'country_code' => 'IT'],\n            ['name' => 'Osvaldo Cruz', 'country_code' => 'BR'],\n            ['name' => 'Warminster', 'country_code' => 'US'],\n            ['name' => 'La Calera', 'country_code' => 'AR'],\n            ['name' => 'Beixinzhuang', 'country_code' => 'CN'],\n            ['name' => 'Hoyerswerda', 'country_code' => 'DE'],\n            ['name' => 'Staryy Beyneu', 'country_code' => 'KZ'],\n            ['name' => 'Nova Russas', 'country_code' => 'BR'],\n            ['name' => 'Maputsoe', 'country_code' => 'LS'],\n            ['name' => 'Chatellerault', 'country_code' => 'FR'],\n            ['name' => 'Plottier', 'country_code' => 'AR'],\n            ['name' => 'Landecy', 'country_code' => 'CH'],\n            ['name' => 'Clarence', 'country_code' => 'US'],\n            ['name' => 'Batan', 'country_code' => 'PH'],\n            ['name' => 'Brasilia de Minas', 'country_code' => 'BR'],\n            ['name' => 'Olintepeque', 'country_code' => 'GT'],\n            ['name' => 'Harker Heights', 'country_code' => 'US'],\n            ['name' => 'Tawaramoto', 'country_code' => 'JP'],\n            ['name' => 'Sarno', 'country_code' => 'IT'],\n            ['name' => 'Mohyliv-Podilskyi', 'country_code' => 'UA'],\n            ['name' => 'Zentsujicho', 'country_code' => 'JP'],\n            ['name' => 'Cachoeira Paulista', 'country_code' => 'BR'],\n            ['name' => 'Georgsmarienhutte', 'country_code' => 'DE'],\n            ['name' => 'Elk Grove Village', 'country_code' => 'US'],\n            ['name' => 'Zaojiao', 'country_code' => 'CN'],\n            ['name' => 'Zangang', 'country_code' => 'CN'],\n            ['name' => 'San Pedro de Uraba', 'country_code' => 'CO'],\n            ['name' => 'Furstenwalde', 'country_code' => 'DE'],\n            ['name' => 'Kaysville', 'country_code' => 'US'],\n            ['name' => 'Guararapes', 'country_code' => 'BR'],\n            ['name' => 'Achim', 'country_code' => 'DE'],\n            ['name' => 'Draa Ben Khedda', 'country_code' => 'DZ'],\n            ['name' => 'Southlake', 'country_code' => 'US'],\n            ['name' => 'Ferry Pass', 'country_code' => 'US'],\n            ['name' => 'Kristianstad', 'country_code' => 'SE'],\n            ['name' => 'Savage', 'country_code' => 'US'],\n            ['name' => 'Salug', 'country_code' => 'PH'],\n            ['name' => 'Menglie', 'country_code' => 'CN'],\n            ['name' => 'Des Moines', 'country_code' => 'US'],\n            ['name' => 'Ferrenafe', 'country_code' => 'PE'],\n            ['name' => 'Bethel Park', 'country_code' => 'US'],\n            ['name' => 'San Andres Itzapa', 'country_code' => 'GT'],\n            ['name' => 'Sao Jose da Tapera', 'country_code' => 'BR'],\n            ['name' => 'Mayantoc', 'country_code' => 'PH'],\n            ['name' => 'Santo Domingo Suchitepequez', 'country_code' => 'GT'],\n            ['name' => 'Lupi Viejo', 'country_code' => 'PH'],\n            ['name' => 'Capalonga', 'country_code' => 'PH'],\n            ['name' => 'Ra s Gharib', 'country_code' => 'EG'],\n            ['name' => 'Curanilahue', 'country_code' => 'CL'],\n            ['name' => 'Dreux', 'country_code' => 'FR'],\n            ['name' => 'Princeton', 'country_code' => 'US'],\n            ['name' => 'Warwick', 'country_code' => 'GB'],\n            ['name' => 'Mangur', 'country_code' => 'IN'],\n            ['name' => 'Ribeira Grande', 'country_code' => 'PT'],\n            ['name' => 'Ilhabela', 'country_code' => 'BR'],\n            ['name' => 'Dumalinao', 'country_code' => 'PH'],\n            ['name' => 'Shimizucho', 'country_code' => 'JP'],\n            ['name' => 'Koupela', 'country_code' => 'BF'],\n            ['name' => 'Laoac East', 'country_code' => 'PH'],\n            ['name' => 'Jaguaruana', 'country_code' => 'BR'],\n            ['name' => 'Nagato', 'country_code' => 'JP'],\n            ['name' => 'Vintar', 'country_code' => 'PH'],\n            ['name' => 'Capulhuac', 'country_code' => 'MX'],\n            ['name' => 'Dania Beach', 'country_code' => 'US'],\n            ['name' => 'Kangasala', 'country_code' => 'FI'],\n            ['name' => 'Luuk', 'country_code' => 'PH'],\n            ['name' => 'Mendez-Nunez', 'country_code' => 'PH'],\n            ['name' => 'Areka', 'country_code' => 'ET'],\n            ['name' => 'Bandeirantes', 'country_code' => 'BR'],\n            ['name' => 'Oer-Erkenschwick', 'country_code' => 'DE'],\n            ['name' => 'Cheb', 'country_code' => 'CZ'],\n            ['name' => 'Lonneker', 'country_code' => 'NL'],\n            ['name' => 'Bowling Green', 'country_code' => 'US'],\n            ['name' => 'Tuzantan', 'country_code' => 'MX'],\n            ['name' => 'Wevelgem', 'country_code' => 'BE'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Igbaras', 'country_code' => 'PH'],\n            ['name' => 'Lower Macungie', 'country_code' => 'US'],\n            ['name' => 'Primorsko-Akhtarsk', 'country_code' => 'RU'],\n            ['name' => 'Itatiaia', 'country_code' => 'BR'],\n            ['name' => 'Xangda', 'country_code' => 'CN'],\n            ['name' => 'Pedana', 'country_code' => 'IN'],\n            ['name' => 'Grottaglie', 'country_code' => 'IT'],\n            ['name' => 'Mirnyy', 'country_code' => 'RU'],\n            ['name' => 'Novovoronezh', 'country_code' => 'RU'],\n            ['name' => 'Laranjeiras do Sul', 'country_code' => 'BR'],\n            ['name' => 'San Manuel', 'country_code' => 'PH'],\n            ['name' => 'Odacho-oda', 'country_code' => 'JP'],\n            ['name' => 'East Lake', 'country_code' => 'US'],\n            ['name' => 'Whitstable', 'country_code' => 'GB'],\n            ['name' => 'Uglich', 'country_code' => 'RU'],\n            ['name' => 'Dongxianpo', 'country_code' => 'CN'],\n            ['name' => 'Douar Oulad Hssine', 'country_code' => 'MA'],\n            ['name' => 'Coos Bay', 'country_code' => 'US'],\n            ['name' => 'Smithfield', 'country_code' => 'US'],\n            ['name' => 'Vall de Uxo', 'country_code' => 'ES'],\n            ['name' => 'Delbruck', 'country_code' => 'DE'],\n            ['name' => 'Sechura', 'country_code' => 'PE'],\n            ['name' => 'Rome', 'country_code' => 'US'],\n            ['name' => 'Palmeira', 'country_code' => 'BR'],\n            ['name' => 'San Luis', 'country_code' => 'PH'],\n            ['name' => 'Quintero', 'country_code' => 'CL'],\n            ['name' => 'Yaguaron', 'country_code' => 'PY'],\n            ['name' => 'Colider', 'country_code' => 'BR'],\n            ['name' => 'Jasim', 'country_code' => 'SY'],\n            ['name' => 'Balimbing', 'country_code' => 'PH'],\n            ['name' => 'Trinidad', 'country_code' => 'PH'],\n            ['name' => 'Clearfield', 'country_code' => 'US'],\n            ['name' => 'Serdobsk', 'country_code' => 'RU'],\n            ['name' => 'Zapala', 'country_code' => 'AR'],\n            ['name' => 'Jiming', 'country_code' => 'CN'],\n            ['name' => 'Liberty', 'country_code' => 'US'],\n            ['name' => 'Midsalip', 'country_code' => 'PH'],\n            ['name' => 'Donggou', 'country_code' => 'CN'],\n            ['name' => 'Shentang', 'country_code' => 'CN'],\n            ['name' => 'Naguilian', 'country_code' => 'PH'],\n            ['name' => 'Alba', 'country_code' => 'IT'],\n            ['name' => 'Partinico', 'country_code' => 'IT'],\n            ['name' => 'Macau', 'country_code' => 'BR'],\n            ['name' => 'Milaor', 'country_code' => 'PH'],\n            ['name' => 'Remedios', 'country_code' => 'CO'],\n            ['name' => 'Pinukpuk', 'country_code' => 'PH'],\n            ['name' => 'Asilah', 'country_code' => 'MA'],\n            ['name' => 'Tongkou', 'country_code' => 'CN'],\n            ['name' => 'Cabaiguan', 'country_code' => 'CU'],\n            ['name' => 'El Golea', 'country_code' => 'DZ'],\n            ['name' => 'Oristano', 'country_code' => 'IT'],\n            ['name' => 'Pekin', 'country_code' => 'US'],\n            ['name' => 'Westlake', 'country_code' => 'US'],\n            ['name' => 'Badoc', 'country_code' => 'PH'],\n            ['name' => 'Bahharet Oulad Ayyad', 'country_code' => 'MA'],\n            ['name' => 'Herrenberg', 'country_code' => 'DE'],\n            ['name' => 'San Remigio', 'country_code' => 'PH'],\n            ['name' => 'Dar Ould Zidouh', 'country_code' => 'MA'],\n            ['name' => 'Nilka', 'country_code' => 'CN'],\n            ['name' => 'Chillicothe', 'country_code' => 'US'],\n            ['name' => 'Jaral del Progreso', 'country_code' => 'MX'],\n            ['name' => 'Pativilca', 'country_code' => 'PE'],\n            ['name' => 'La Verne', 'country_code' => 'US'],\n            ['name' => 'Prairieville', 'country_code' => 'US'],\n            ['name' => 'Paipa', 'country_code' => 'CO'],\n            ['name' => 'Namegata', 'country_code' => 'JP'],\n            ['name' => 'Komagane', 'country_code' => 'JP'],\n            ['name' => 'Santa Rita', 'country_code' => 'VE'],\n            ['name' => 'Placerville', 'country_code' => 'US'],\n            ['name' => 'Ivaipora', 'country_code' => 'BR'],\n            ['name' => 'Bel Air North', 'country_code' => 'US'],\n            ['name' => 'Shahedian', 'country_code' => 'CN'],\n            ['name' => 'Nanyuki', 'country_code' => 'KE'],\n            ['name' => 'Guachaves', 'country_code' => 'CO'],\n            ['name' => 'San Isidro', 'country_code' => 'PH'],\n            ['name' => 'Sakhnin', 'country_code' => 'IL'],\n            ['name' => 'Turicato', 'country_code' => 'MX'],\n            ['name' => 'Montebelluna', 'country_code' => 'IT'],\n            ['name' => 'Grajau', 'country_code' => 'BR'],\n            ['name' => 'Sasaguri', 'country_code' => 'JP'],\n            ['name' => 'El Oro de Hidalgo', 'country_code' => 'MX'],\n            ['name' => 'I zaz', 'country_code' => 'SY'],\n            ['name' => 'Manlius', 'country_code' => 'US'],\n            ['name' => 'Ruy Barbosa', 'country_code' => 'BR'],\n            ['name' => 'Katagami', 'country_code' => 'JP'],\n            ['name' => 'Touba', 'country_code' => 'CI'],\n            ['name' => 'Dandenong', 'country_code' => 'AU'],\n            ['name' => 'San Pedro de Ribas', 'country_code' => 'ES'],\n            ['name' => 'Redan', 'country_code' => 'US'],\n            ['name' => 'Martinsville', 'country_code' => 'US'],\n            ['name' => 'Gevelsberg', 'country_code' => 'DE'],\n            ['name' => 'Val-d Or', 'country_code' => 'CA'],\n            ['name' => 'Boghni', 'country_code' => 'DZ'],\n            ['name' => 'Pueblo West', 'country_code' => 'US'],\n            ['name' => 'Chajul', 'country_code' => 'GT'],\n            ['name' => 'Buzovna', 'country_code' => 'AZ'],\n            ['name' => 'Avola', 'country_code' => 'IT'],\n            ['name' => 'Radnor', 'country_code' => 'US'],\n            ['name' => 'Owen Sound', 'country_code' => 'CA'],\n            ['name' => 'Payao', 'country_code' => 'PH'],\n            ['name' => 'Velikiy Ustyug', 'country_code' => 'RU'],\n            ['name' => 'Gubbio', 'country_code' => 'IT'],\n            ['name' => 'San Giuliano Terme', 'country_code' => 'IT'],\n            ['name' => 'Chum Phae', 'country_code' => 'TH'],\n            ['name' => 'San Roque', 'country_code' => 'ES'],\n            ['name' => 'Temascaltepec de Gonzalez', 'country_code' => 'MX'],\n            ['name' => 'Kyzyl-Kyya', 'country_code' => 'KG'],\n            ['name' => 'Kalingalan Caluang', 'country_code' => 'PH'],\n            ['name' => 'Kasimov', 'country_code' => 'RU'],\n            ['name' => 'Kuroishi', 'country_code' => 'JP'],\n            ['name' => 'Haan', 'country_code' => 'DE'],\n            ['name' => 'Sitionuevo', 'country_code' => 'CO'],\n            ['name' => 'Kulat', 'country_code' => 'ID'],\n            ['name' => 'Radolfzell am Bodensee', 'country_code' => 'DE'],\n            ['name' => 'Kotovsk', 'country_code' => 'RU'],\n            ['name' => 'Weil am Rhein', 'country_code' => 'DE'],\n            ['name' => 'Nijar', 'country_code' => 'ES'],\n            ['name' => 'Balyqshy', 'country_code' => 'KZ'],\n            ['name' => 'San Pedro Sacatepequez', 'country_code' => 'GT'],\n            ['name' => 'Jesus Maria', 'country_code' => 'AR'],\n            ['name' => 'Fallbrook', 'country_code' => 'US'],\n            ['name' => 'Dongmaying', 'country_code' => 'CN'],\n            ['name' => 'Zepce', 'country_code' => 'BA'],\n            ['name' => 'Bedworth', 'country_code' => 'GB'],\n            ['name' => 'Lowicz', 'country_code' => 'PL'],\n            ['name' => 'Ibaiti', 'country_code' => 'BR'],\n            ['name' => 'Nueva Imperial', 'country_code' => 'CL'],\n            ['name' => 'Tecozautla', 'country_code' => 'MX'],\n            ['name' => 'Willingboro', 'country_code' => 'US'],\n            ['name' => 'Jacareacanga', 'country_code' => 'BR'],\n            ['name' => 'Exu', 'country_code' => 'BR'],\n            ['name' => 'Castelvetrano', 'country_code' => 'IT'],\n            ['name' => 'Santa Barbara', 'country_code' => 'BR'],\n            ['name' => 'Spring Valley', 'country_code' => 'US'],\n            ['name' => 'Tanmen', 'country_code' => 'CN'],\n            ['name' => 'Morro Agudo', 'country_code' => 'BR'],\n            ['name' => 'Ayabe', 'country_code' => 'JP'],\n            ['name' => 'Espinosa', 'country_code' => 'BR'],\n            ['name' => 'Kreuztal', 'country_code' => 'DE'],\n            ['name' => 'Cantilan', 'country_code' => 'PH'],\n            ['name' => 'Frederico Westphalen', 'country_code' => 'BR'],\n            ['name' => 'Waterloo', 'country_code' => 'BE'],\n            ['name' => 'San Andres Xecul', 'country_code' => 'GT'],\n            ['name' => 'Yawatahama-shi', 'country_code' => 'JP'],\n            ['name' => 'Mae Sot', 'country_code' => 'TH'],\n            ['name' => 'Carballo', 'country_code' => 'ES'],\n            ['name' => 'Nardo', 'country_code' => 'IT'],\n            ['name' => 'Oudenaarde', 'country_code' => 'BE'],\n            ['name' => 'Lingig', 'country_code' => 'PH'],\n            ['name' => 'Fengrenxu', 'country_code' => 'CN'],\n            ['name' => 'Hopkinsville', 'country_code' => 'US'],\n            ['name' => 'Mocajuba', 'country_code' => 'BR'],\n            ['name' => 'Zima', 'country_code' => 'RU'],\n            ['name' => 'Ponta de Pedras', 'country_code' => 'BR'],\n            ['name' => 'Kosonsoy', 'country_code' => 'UZ'],\n            ['name' => 'Fagaras', 'country_code' => 'RO'],\n            ['name' => 'Ban Chang', 'country_code' => 'TH'],\n            ['name' => 'Calubian', 'country_code' => 'PH'],\n            ['name' => 'Balungao', 'country_code' => 'PH'],\n            ['name' => 'Ipora', 'country_code' => 'BR'],\n            ['name' => 'Huangxicun', 'country_code' => 'CN'],\n            ['name' => 'Puerto Wilches', 'country_code' => 'CO'],\n            ['name' => 'Verbania', 'country_code' => 'IT'],\n            ['name' => 'Rochester', 'country_code' => 'US'],\n            ['name' => 'Lavras da Mangabeira', 'country_code' => 'BR'],\n            ['name' => 'Maubeuge', 'country_code' => 'FR'],\n            ['name' => 'South Riding', 'country_code' => 'US'],\n            ['name' => 'Saint-Medard-en-Jalles', 'country_code' => 'FR'],\n            ['name' => 'Minas Novas', 'country_code' => 'BR'],\n            ['name' => 'Marks', 'country_code' => 'RU'],\n            ['name' => 'Rheinberg', 'country_code' => 'DE'],\n            ['name' => 'Kostopil', 'country_code' => 'UA'],\n            ['name' => 'Santa Fe do Sul', 'country_code' => 'BR'],\n            ['name' => 'Deinze', 'country_code' => 'BE'],\n            ['name' => 'Centereach', 'country_code' => 'US'],\n            ['name' => 'Neira', 'country_code' => 'CO'],\n            ['name' => 'Save', 'country_code' => 'BJ'],\n            ['name' => 'Geesthacht', 'country_code' => 'DE'],\n            ['name' => 'Milledgeville', 'country_code' => 'US'],\n            ['name' => 'Mograne', 'country_code' => 'MA'],\n            ['name' => 'Parambu', 'country_code' => 'BR'],\n            ['name' => 'Mateus Leme', 'country_code' => 'BR'],\n            ['name' => 'Stratford', 'country_code' => 'CA'],\n            ['name' => 'Wanghong Yidui', 'country_code' => 'CN'],\n            ['name' => 'Yingyangcun', 'country_code' => 'CN'],\n            ['name' => 'Santa Maria La Pila', 'country_code' => 'GT'],\n            ['name' => 'Syracuse', 'country_code' => 'US'],\n            ['name' => 'Netivot', 'country_code' => 'IL'],\n            ['name' => 'Kaminokawa', 'country_code' => 'JP'],\n            ['name' => 'Bielsk Podlaski', 'country_code' => 'PL'],\n            ['name' => 'Aracoiaba da Serra', 'country_code' => 'BR'],\n            ['name' => 'Barrinha', 'country_code' => 'BR'],\n            ['name' => 'Trebinje', 'country_code' => 'BA'],\n            ['name' => 'Tiquipaya', 'country_code' => 'BO'],\n            ['name' => 'Sherwood', 'country_code' => 'US'],\n            ['name' => 'Posse', 'country_code' => 'BR'],\n            ['name' => 'Valkenswaard', 'country_code' => 'NL'],\n            ['name' => 'Alacuas', 'country_code' => 'ES'],\n            ['name' => 'Wenxian Chengguanzhen', 'country_code' => 'CN'],\n            ['name' => 'Halden', 'country_code' => 'NO'],\n            ['name' => 'Quesada', 'country_code' => 'CR'],\n            ['name' => 'Lloydminster', 'country_code' => 'CA'],\n            ['name' => 'Simunul', 'country_code' => 'PH'],\n            ['name' => 'Lumbang', 'country_code' => 'PH'],\n            ['name' => 'Garner', 'country_code' => 'US'],\n            ['name' => 'Guamo', 'country_code' => 'CO'],\n            ['name' => 'Key West', 'country_code' => 'US'],\n            ['name' => 'Coria del Rio', 'country_code' => 'ES'],\n            ['name' => 'Caracal', 'country_code' => 'RO'],\n            ['name' => 'Cauquenes', 'country_code' => 'CL'],\n            ['name' => 'Pointe-Claire', 'country_code' => 'CA'],\n            ['name' => 'Moalboal', 'country_code' => 'PH'],\n            ['name' => 'Kudymkar', 'country_code' => 'RU'],\n            ['name' => 'Dracut', 'country_code' => 'US'],\n            ['name' => 'Skelleftea', 'country_code' => 'SE'],\n            ['name' => 'Abra de Ilog', 'country_code' => 'PH'],\n            ['name' => 'Ganderkesee', 'country_code' => 'DE'],\n            ['name' => 'Novo Cruzeiro', 'country_code' => 'BR'],\n            ['name' => 'Petersburg', 'country_code' => 'US'],\n            ['name' => 'Al Husayniyah', 'country_code' => 'EG'],\n            ['name' => 'North Olmsted', 'country_code' => 'US'],\n            ['name' => 'Kahului', 'country_code' => 'US'],\n            ['name' => 'Ostuni', 'country_code' => 'IT'],\n            ['name' => 'Kandalaksha', 'country_code' => 'RU'],\n            ['name' => 'Bagre', 'country_code' => 'BR'],\n            ['name' => 'Manduria', 'country_code' => 'IT'],\n            ['name' => 'Alice Springs', 'country_code' => 'AU'],\n            ['name' => 'Yaita', 'country_code' => 'JP'],\n            ['name' => 'Duanshan', 'country_code' => 'CN'],\n            ['name' => 'Wheat Ridge', 'country_code' => 'US'],\n            ['name' => 'Fruit Cove', 'country_code' => 'US'],\n            ['name' => 'Conceicao da Barra', 'country_code' => 'BR'],\n            ['name' => 'Rosignano Marittimo', 'country_code' => 'IT'],\n            ['name' => 'Tracuateua', 'country_code' => 'BR'],\n            ['name' => 'Cibolo', 'country_code' => 'US'],\n            ['name' => 'Buurhakaba', 'country_code' => 'SO'],\n            ['name' => 'Marovoay', 'country_code' => 'MG'],\n            ['name' => 'Calape', 'country_code' => 'PH'],\n            ['name' => 'Barra dos Coqueiros', 'country_code' => 'BR'],\n            ['name' => 'Bauko', 'country_code' => 'PH'],\n            ['name' => 'Pindare-Mirim', 'country_code' => 'BR'],\n            ['name' => 'Taozhuangcun', 'country_code' => 'CN'],\n            ['name' => 'Vitoria do Mearim', 'country_code' => 'BR'],\n            ['name' => 'Uran', 'country_code' => 'IN'],\n            ['name' => 'Biritiba-Mirim', 'country_code' => 'BR'],\n            ['name' => 'Alliance', 'country_code' => 'US'],\n            ['name' => 'Balatan', 'country_code' => 'PH'],\n            ['name' => 'Circasia', 'country_code' => 'CO'],\n            ['name' => 'San Vicente', 'country_code' => 'PH'],\n            ['name' => 'Ipubi', 'country_code' => 'BR'],\n            ['name' => 'Lukow', 'country_code' => 'PL'],\n            ['name' => 'Boxtel', 'country_code' => 'NL'],\n            ['name' => 'Banning', 'country_code' => 'US'],\n            ['name' => 'Warwick', 'country_code' => 'US'],\n            ['name' => 'Burgess Hill', 'country_code' => 'GB'],\n            ['name' => 'Getafe', 'country_code' => 'PH'],\n            ['name' => 'Laguna Hills', 'country_code' => 'US'],\n            ['name' => 'Central Islip', 'country_code' => 'US'],\n            ['name' => 'Marigliano', 'country_code' => 'IT'],\n            ['name' => 'Lagos', 'country_code' => 'PT'],\n            ['name' => 'Bogoroditsk', 'country_code' => 'RU'],\n            ['name' => 'Lushnje', 'country_code' => 'AL'],\n            ['name' => 'Athens', 'country_code' => 'US'],\n            ['name' => 'Princeton', 'country_code' => 'US'],\n            ['name' => 'Yingshouyingzi', 'country_code' => 'CN'],\n            ['name' => 'Weyhe', 'country_code' => 'DE'],\n            ['name' => 'Flores da Cunha', 'country_code' => 'BR'],\n            ['name' => 'Werl', 'country_code' => 'DE'],\n            ['name' => 'Culleredo', 'country_code' => 'ES'],\n            ['name' => 'Loughton', 'country_code' => 'GB'],\n            ['name' => 'Jimalalud', 'country_code' => 'PH'],\n            ['name' => 'Orillia', 'country_code' => 'CA'],\n            ['name' => 'Baixo Guandu', 'country_code' => 'BR'],\n            ['name' => 'Minacu', 'country_code' => 'BR'],\n            ['name' => 'Ciudad Vieja', 'country_code' => 'GT'],\n            ['name' => 'Diemen', 'country_code' => 'NL'],\n            ['name' => 'Tokmak', 'country_code' => 'UA'],\n            ['name' => 'Magsingal', 'country_code' => 'PH'],\n            ['name' => 'Chitral', 'country_code' => 'PK'],\n            ['name' => 'Paraparaumu', 'country_code' => 'NZ'],\n            ['name' => 'Atotonilco de Tula', 'country_code' => 'MX'],\n            ['name' => 'Candido Mota', 'country_code' => 'BR'],\n            ['name' => 'Ski', 'country_code' => 'NO'],\n            ['name' => 'Masaki', 'country_code' => 'JP'],\n            ['name' => 'Afonso Claudio', 'country_code' => 'BR'],\n            ['name' => 'Falmouth', 'country_code' => 'US'],\n            ['name' => 'Bramsche', 'country_code' => 'DE'],\n            ['name' => 'Orcutt', 'country_code' => 'US'],\n            ['name' => 'Santa Maria', 'country_code' => 'PH'],\n            ['name' => 'Portao', 'country_code' => 'BR'],\n            ['name' => 'Lemery', 'country_code' => 'PH'],\n            ['name' => 'Naugatuck', 'country_code' => 'US'],\n            ['name' => 'Eldersburg', 'country_code' => 'US'],\n            ['name' => 'Rio Grande', 'country_code' => 'AR'],\n            ['name' => 'Tewksbury', 'country_code' => 'US'],\n            ['name' => 'Itabela', 'country_code' => 'BR'],\n            ['name' => 'Muritiba', 'country_code' => 'BR'],\n            ['name' => 'Jacare', 'country_code' => 'BR'],\n            ['name' => 'Columbus', 'country_code' => 'US'],\n            ['name' => 'Bochnia', 'country_code' => 'PL'],\n            ['name' => 'Schonebeck', 'country_code' => 'DE'],\n            ['name' => 'Tijucas', 'country_code' => 'BR'],\n            ['name' => 'Soledade', 'country_code' => 'BR'],\n            ['name' => 'Rio Pardo de Minas', 'country_code' => 'BR'],\n            ['name' => 'Mundelein', 'country_code' => 'US'],\n            ['name' => 'Sapa Sapa', 'country_code' => 'PH'],\n            ['name' => 'Bielawa', 'country_code' => 'PL'],\n            ['name' => 'Fair Oaks', 'country_code' => 'US'],\n            ['name' => 'Matoes', 'country_code' => 'BR'],\n            ['name' => 'San Andres del Rabanedo', 'country_code' => 'ES'],\n            ['name' => 'Dyurtyuli', 'country_code' => 'RU'],\n            ['name' => 'Harpenden', 'country_code' => 'GB'],\n            ['name' => 'Santa Vitoria do Palmar', 'country_code' => 'BR'],\n            ['name' => 'Mocimboa da Praia', 'country_code' => 'MZ'],\n            ['name' => 'Huamachuco', 'country_code' => 'PE'],\n            ['name' => 'Nartkala', 'country_code' => 'RU'],\n            ['name' => 'Amircan', 'country_code' => 'AZ'],\n            ['name' => 'Rexburg', 'country_code' => 'US'],\n            ['name' => 'Burgdorf', 'country_code' => 'DE'],\n            ['name' => 'Needham', 'country_code' => 'US'],\n            ['name' => 'Rostov', 'country_code' => 'RU'],\n            ['name' => 'Ambanja', 'country_code' => 'MG'],\n            ['name' => 'Einbeck', 'country_code' => 'DE'],\n            ['name' => 'Trindade', 'country_code' => 'BR'],\n            ['name' => 'Sombrio', 'country_code' => 'BR'],\n            ['name' => 'Neuruppin', 'country_code' => 'DE'],\n            ['name' => 'Mossendjo', 'country_code' => 'CG'],\n            ['name' => 'Fabriano', 'country_code' => 'IT'],\n            ['name' => 'Nogales', 'country_code' => 'US'],\n            ['name' => 'Bela Cruz', 'country_code' => 'BR'],\n            ['name' => 'Nicholasville', 'country_code' => 'US'],\n            ['name' => 'Amatenango de la Frontera', 'country_code' => 'MX'],\n            ['name' => 'Goleta', 'country_code' => 'US'],\n            ['name' => 'Opelika', 'country_code' => 'US'],\n            ['name' => 'Layla', 'country_code' => 'SA'],\n            ['name' => 'Newburgh', 'country_code' => 'US'],\n            ['name' => 'Alma', 'country_code' => 'CA'],\n            ['name' => 'Algonquin', 'country_code' => 'US'],\n            ['name' => 'Sacele', 'country_code' => 'RO'],\n            ['name' => 'Marrero', 'country_code' => 'US'],\n            ['name' => 'Radcliffe', 'country_code' => 'GB'],\n            ['name' => 'Arcos de la Frontera', 'country_code' => 'ES'],\n            ['name' => 'Cranberry', 'country_code' => 'US'],\n            ['name' => 'Gragnano', 'country_code' => 'IT'],\n            ['name' => 'Aiken', 'country_code' => 'US'],\n            ['name' => 'Cicero', 'country_code' => 'US'],\n            ['name' => 'Pisek', 'country_code' => 'CZ'],\n            ['name' => 'Unterschleissheim', 'country_code' => 'DE'],\n            ['name' => 'North Andover', 'country_code' => 'US'],\n            ['name' => 'Lawrenceville', 'country_code' => 'US'],\n            ['name' => 'Lohmar', 'country_code' => 'DE'],\n            ['name' => 'Winter Park', 'country_code' => 'US'],\n            ['name' => 'Alcazar de San Juan', 'country_code' => 'ES'],\n            ['name' => 'Novoyavorovskoye', 'country_code' => 'UA'],\n            ['name' => 'Alegre', 'country_code' => 'BR'],\n            ['name' => 'Artemovskiy', 'country_code' => 'RU'],\n            ['name' => 'Lake Magdalene', 'country_code' => 'US'],\n            ['name' => 'Santa Maria', 'country_code' => 'PH'],\n            ['name' => 'Carshalton', 'country_code' => 'GB'],\n            ['name' => 'Arraial do Cabo', 'country_code' => 'BR'],\n            ['name' => 'Fitchburg', 'country_code' => 'US'],\n            ['name' => 'Gloria do Goita', 'country_code' => 'BR'],\n            ['name' => 'Hajduboszormeny', 'country_code' => 'HU'],\n            ['name' => 'San Roque', 'country_code' => 'PH'],\n            ['name' => 'Granger', 'country_code' => 'US'],\n            ['name' => 'Qahderijan', 'country_code' => 'IR'],\n            ['name' => 'Guaira', 'country_code' => 'BR'],\n            ['name' => 'Tekeli', 'country_code' => 'KZ'],\n            ['name' => 'Wooster', 'country_code' => 'US'],\n            ['name' => 'Catmon', 'country_code' => 'PH'],\n            ['name' => 'Synelnykove', 'country_code' => 'UA'],\n            ['name' => 'Treviglio', 'country_code' => 'IT'],\n            ['name' => 'Amaga', 'country_code' => 'CO'],\n            ['name' => 'Fountain', 'country_code' => 'US'],\n            ['name' => 'Sandanski', 'country_code' => 'BG'],\n            ['name' => 'Orangeville', 'country_code' => 'CA'],\n            ['name' => 'Simbahan', 'country_code' => 'PH'],\n            ['name' => 'Emmen', 'country_code' => 'CH'],\n            ['name' => 'Nanwucun', 'country_code' => 'CN'],\n            ['name' => 'Pau dos Ferros', 'country_code' => 'BR'],\n            ['name' => 'Papa', 'country_code' => 'HU'],\n            ['name' => 'Fort Erie', 'country_code' => 'CA'],\n            ['name' => 'Puerto de la Cruz', 'country_code' => 'ES'],\n            ['name' => 'Xinzhaidian', 'country_code' => 'CN'],\n            ['name' => 'Polillo', 'country_code' => 'PH'],\n            ['name' => 'Juquitiba', 'country_code' => 'BR'],\n            ['name' => 'Duanzhuang', 'country_code' => 'CN'],\n            ['name' => 'Torrijos', 'country_code' => 'PH'],\n            ['name' => 'Brooklyn Center', 'country_code' => 'US'],\n            ['name' => 'Mallig', 'country_code' => 'PH'],\n            ['name' => 'Mlawa', 'country_code' => 'PL'],\n            ['name' => 'Barreirinha', 'country_code' => 'BR'],\n            ['name' => 'Banamba', 'country_code' => 'ML'],\n            ['name' => 'Draveil', 'country_code' => 'FR'],\n            ['name' => 'Mercedes', 'country_code' => 'AR'],\n            ['name' => 'Thung Song', 'country_code' => 'TH'],\n            ['name' => 'South Kingstown', 'country_code' => 'US'],\n            ['name' => 'Piedra Blanca', 'country_code' => 'DO'],\n            ['name' => 'Victoria', 'country_code' => 'AR'],\n            ['name' => 'Kerrville', 'country_code' => 'US'],\n            ['name' => 'Wuyuan', 'country_code' => 'CN'],\n            ['name' => 'San Jacinto', 'country_code' => 'PH'],\n            ['name' => 'Rapallo', 'country_code' => 'IT'],\n            ['name' => 'Vienne', 'country_code' => 'FR'],\n            ['name' => 'Barstow', 'country_code' => 'US'],\n            ['name' => 'Ross', 'country_code' => 'US'],\n            ['name' => 'Ennepetal', 'country_code' => 'DE'],\n            ['name' => 'Motomiya', 'country_code' => 'JP'],\n            ['name' => 'Ypacarai', 'country_code' => 'PY'],\n            ['name' => 'Mehdya', 'country_code' => 'MA'],\n            ['name' => 'Chimakurti', 'country_code' => 'IN'],\n            ['name' => 'Riesa', 'country_code' => 'DE'],\n            ['name' => 'Mount Gambier', 'country_code' => 'AU'],\n            ['name' => 'Kirov', 'country_code' => 'RU'],\n            ['name' => 'Blagodarnyy', 'country_code' => 'RU'],\n            ['name' => 'Leusden', 'country_code' => 'NL'],\n            ['name' => 'Rio Preto da Eva', 'country_code' => 'BR'],\n            ['name' => 'Joacaba', 'country_code' => 'BR'],\n            ['name' => 'G ijduvon Shahri', 'country_code' => 'UZ'],\n            ['name' => 'Canton', 'country_code' => 'US'],\n            ['name' => 'Andernach', 'country_code' => 'DE'],\n            ['name' => 'Villa Donato Guerra', 'country_code' => 'MX'],\n            ['name' => 'Ob', 'country_code' => 'RU'],\n            ['name' => 'Bela Vista de Goias', 'country_code' => 'BR'],\n            ['name' => 'Fetesti', 'country_code' => 'RO'],\n            ['name' => 'Sevenoaks', 'country_code' => 'GB'],\n            ['name' => 'Mataas Na Kahoy', 'country_code' => 'PH'],\n            ['name' => 'Auburn', 'country_code' => 'US'],\n            ['name' => 'Osterholz-Scharmbeck', 'country_code' => 'DE'],\n            ['name' => 'Sibagat', 'country_code' => 'PH'],\n            ['name' => 'Tskhinvali', 'country_code' => 'GE'],\n            ['name' => 'Sibutu', 'country_code' => 'PH'],\n            ['name' => 'Crown Point', 'country_code' => 'US'],\n            ['name' => 'Talusan', 'country_code' => 'PH'],\n            ['name' => 'Xinpo', 'country_code' => 'CN'],\n            ['name' => 'Slavgorod', 'country_code' => 'RU'],\n            ['name' => 'Windsor', 'country_code' => 'US'],\n            ['name' => 'Korinthos', 'country_code' => 'GR'],\n            ['name' => 'Itaporanga d Ajuda', 'country_code' => 'BR'],\n            ['name' => 'Lakeside', 'country_code' => 'US'],\n            ['name' => 'Taunusstein', 'country_code' => 'DE'],\n            ['name' => 'Deptford', 'country_code' => 'US'],\n            ['name' => 'Sigma', 'country_code' => 'PH'],\n            ['name' => 'North Huntingdon', 'country_code' => 'US'],\n            ['name' => 'Gloucester', 'country_code' => 'US'],\n            ['name' => 'Ust -Dzheguta', 'country_code' => 'RU'],\n            ['name' => 'Damulog', 'country_code' => 'PH'],\n            ['name' => 'Lalla Mimouna', 'country_code' => 'MA'],\n            ['name' => 'Horki', 'country_code' => 'BY'],\n            ['name' => 'Salou', 'country_code' => 'ES'],\n            ['name' => 'Hirakawacho', 'country_code' => 'JP'],\n            ['name' => 'Togitsu', 'country_code' => 'JP'],\n            ['name' => 'Iguape', 'country_code' => 'BR'],\n            ['name' => 'Telimele', 'country_code' => 'GN'],\n            ['name' => 'Huanta', 'country_code' => 'PE'],\n            ['name' => 'Gurnee', 'country_code' => 'US'],\n            ['name' => 'Carlos Barbosa', 'country_code' => 'BR'],\n            ['name' => 'Orangeburg', 'country_code' => 'US'],\n            ['name' => 'Mont-de-Marsan', 'country_code' => 'FR'],\n            ['name' => 'Buguey', 'country_code' => 'PH'],\n            ['name' => 'Carmo do Paranaiba', 'country_code' => 'BR'],\n            ['name' => 'Galdacano', 'country_code' => 'ES'],\n            ['name' => 'Tactic', 'country_code' => 'GT'],\n            ['name' => 'Vinces', 'country_code' => 'EC'],\n            ['name' => 'Shetang', 'country_code' => 'CN'],\n            ['name' => 'Holladay', 'country_code' => 'US'],\n            ['name' => 'Fuquay-Varina', 'country_code' => 'US'],\n            ['name' => 'Chimichagua', 'country_code' => 'CO'],\n            ['name' => 'Valdepenas', 'country_code' => 'ES'],\n            ['name' => 'Chamblee', 'country_code' => 'US'],\n            ['name' => 'Kondopoga', 'country_code' => 'RU'],\n            ['name' => 'Comiso', 'country_code' => 'IT'],\n            ['name' => 'Dimataling', 'country_code' => 'PH'],\n            ['name' => 'Carney', 'country_code' => 'US'],\n            ['name' => 'Xunjiansi', 'country_code' => 'CN'],\n            ['name' => 'Peru', 'country_code' => 'US'],\n            ['name' => 'Kibiti', 'country_code' => 'TZ'],\n            ['name' => 'Decines-Charpieu', 'country_code' => 'FR'],\n            ['name' => 'Cihuatlan', 'country_code' => 'MX'],\n            ['name' => 'Tsuruno', 'country_code' => 'JP'],\n            ['name' => 'Sergio Osmena Sr', 'country_code' => 'PH'],\n            ['name' => 'Rushden', 'country_code' => 'GB'],\n            ['name' => 'Temse', 'country_code' => 'BE'],\n            ['name' => 'Kombissiri', 'country_code' => 'BF'],\n            ['name' => 'Augustow', 'country_code' => 'PL'],\n            ['name' => 'Upper Merion', 'country_code' => 'US'],\n            ['name' => 'Cornelius', 'country_code' => 'US'],\n            ['name' => 'Gorodets', 'country_code' => 'RU'],\n            ['name' => 'Matsubushi', 'country_code' => 'JP'],\n            ['name' => 'Trutnov', 'country_code' => 'CZ'],\n            ['name' => 'North Tonawanda', 'country_code' => 'US'],\n            ['name' => 'Talayan', 'country_code' => 'PH'],\n            ['name' => 'Sue', 'country_code' => 'JP'],\n            ['name' => 'Gaggenau', 'country_code' => 'DE'],\n            ['name' => 'Newington', 'country_code' => 'US'],\n            ['name' => 'Catole do Rocha', 'country_code' => 'BR'],\n            ['name' => 'Buenavista', 'country_code' => 'PH'],\n            ['name' => 'Sitges', 'country_code' => 'ES'],\n            ['name' => 'Bergen', 'country_code' => 'NL'],\n            ['name' => 'Los Gatos', 'country_code' => 'US'],\n            ['name' => 'Mozhaysk', 'country_code' => 'RU'],\n            ['name' => 'Shangpa', 'country_code' => 'CN'],\n            ['name' => 'Moanda', 'country_code' => 'GA'],\n            ['name' => 'Bad Hersfeld', 'country_code' => 'DE'],\n            ['name' => 'Saint-Etienne-du-Rouvray', 'country_code' => 'FR'],\n            ['name' => 'Penaranda', 'country_code' => 'PH'],\n            ['name' => 'South Lake Tahoe', 'country_code' => 'US'],\n            ['name' => 'LaSalle', 'country_code' => 'CA'],\n            ['name' => 'Friedberg', 'country_code' => 'DE'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'Merida', 'country_code' => 'PH'],\n            ['name' => 'Caramoran', 'country_code' => 'PH'],\n            ['name' => 'Northfleet', 'country_code' => 'GB'],\n            ['name' => 'Saratoga', 'country_code' => 'US'],\n            ['name' => 'Hinunangan', 'country_code' => 'PH'],\n            ['name' => 'Kalgoorlie', 'country_code' => 'AU'],\n            ['name' => 'Tizi Gheniff', 'country_code' => 'DZ'],\n            ['name' => 'Paraipaba', 'country_code' => 'BR'],\n            ['name' => 'Bra', 'country_code' => 'IT'],\n            ['name' => 'Planadas', 'country_code' => 'CO'],\n            ['name' => 'Gamu', 'country_code' => 'PH'],\n            ['name' => 'Brodnica', 'country_code' => 'PL'],\n            ['name' => 'Tabio', 'country_code' => 'CO'],\n            ['name' => 'Lismore', 'country_code' => 'AU'],\n            ['name' => 'L Arbaa Nait Irathen', 'country_code' => 'DZ'],\n            ['name' => 'Puente-Genil', 'country_code' => 'ES'],\n            ['name' => 'Guotang', 'country_code' => 'CN'],\n            ['name' => 'Sainte-Julie', 'country_code' => 'CA'],\n            ['name' => 'Shibancun', 'country_code' => 'CN'],\n            ['name' => 'Barbosa', 'country_code' => 'CO'],\n            ['name' => 'Tacuba', 'country_code' => 'SV'],\n            ['name' => 'Los Altos', 'country_code' => 'US'],\n            ['name' => 'Pervomaiskyi', 'country_code' => 'UA'],\n            ['name' => 'Ballwin', 'country_code' => 'US'],\n            ['name' => 'Barira', 'country_code' => 'PH'],\n            ['name' => 'Atascadero', 'country_code' => 'US'],\n            ['name' => 'Claveria', 'country_code' => 'PH'],\n            ['name' => 'Barra Velha', 'country_code' => 'BR'],\n            ['name' => 'Selargius', 'country_code' => 'IT'],\n            ['name' => 'Alubijid', 'country_code' => 'PH'],\n            ['name' => 'North Royalton', 'country_code' => 'US'],\n            ['name' => 'Budaors', 'country_code' => 'HU'],\n            ['name' => 'Villa Angela', 'country_code' => 'AR'],\n            ['name' => 'Schwedt (Oder)', 'country_code' => 'DE'],\n            ['name' => 'Heesch', 'country_code' => 'NL'],\n            ['name' => 'Saalfeld', 'country_code' => 'DE'],\n            ['name' => 'Meschede', 'country_code' => 'DE'],\n            ['name' => 'President Roxas', 'country_code' => 'PH'],\n            ['name' => 'Somerset', 'country_code' => 'US'],\n            ['name' => 'Villa Regina', 'country_code' => 'AR'],\n            ['name' => 'Werve', 'country_code' => 'DE'],\n            ['name' => 'Siraha', 'country_code' => 'NP'],\n            ['name' => 'Neuburg', 'country_code' => 'DE'],\n            ['name' => 'Campo Alegre de Lourdes', 'country_code' => 'BR'],\n            ['name' => 'Canosa di Puglia', 'country_code' => 'IT'],\n            ['name' => 'Morong', 'country_code' => 'PH'],\n            ['name' => 'Degeh Bur', 'country_code' => 'ET'],\n            ['name' => 'Casma', 'country_code' => 'PE'],\n            ['name' => 'Devarkonda', 'country_code' => 'IN'],\n            ['name' => 'Nan ao', 'country_code' => 'CN'],\n            ['name' => 'Merzig', 'country_code' => 'DE'],\n            ['name' => 'Asipovichy', 'country_code' => 'BY'],\n            ['name' => 'Bourem Guindou', 'country_code' => 'ML'],\n            ['name' => 'Kelkheim (Taunus)', 'country_code' => 'DE'],\n            ['name' => 'Evaz', 'country_code' => 'IR'],\n            ['name' => 'Pantabangan', 'country_code' => 'PH'],\n            ['name' => 'Mavinga', 'country_code' => 'AO'],\n            ['name' => 'Leduc', 'country_code' => 'CA'],\n            ['name' => 'Seguin', 'country_code' => 'US'],\n            ['name' => 'Arlon', 'country_code' => 'BE'],\n            ['name' => 'Santana do Acarau', 'country_code' => 'BR'],\n            ['name' => 'Waltrop', 'country_code' => 'DE'],\n            ['name' => 'Tonisvorst', 'country_code' => 'DE'],\n            ['name' => 'Hampden', 'country_code' => 'US'],\n            ['name' => 'Carinhanha', 'country_code' => 'BR'],\n            ['name' => 'Svendborg', 'country_code' => 'DK'],\n            ['name' => 'Giannitsa', 'country_code' => 'GR'],\n            ['name' => 'Arari', 'country_code' => 'BR'],\n            ['name' => 'Fortuna Foothills', 'country_code' => 'US'],\n            ['name' => 'Fresno', 'country_code' => 'CO'],\n            ['name' => 'Cambui', 'country_code' => 'BR'],\n            ['name' => 'Schwelm', 'country_code' => 'DE'],\n            ['name' => 'Milford Mill', 'country_code' => 'US'],\n            ['name' => 'Cannock', 'country_code' => 'GB'],\n            ['name' => 'Pasadena', 'country_code' => 'US'],\n            ['name' => 'Casa Branca', 'country_code' => 'BR'],\n            ['name' => 'San Rafael', 'country_code' => 'MX'],\n            ['name' => 'Souk et Tnine Jorf el Mellah', 'country_code' => 'MA'],\n            ['name' => 'Calintaan', 'country_code' => 'PH'],\n            ['name' => 'Stockbridge', 'country_code' => 'US'],\n            ['name' => 'Tameslouht', 'country_code' => 'MA'],\n            ['name' => 'East Liverpool', 'country_code' => 'US'],\n            ['name' => 'Triunfo', 'country_code' => 'BR'],\n            ['name' => 'Leonding', 'country_code' => 'AT'],\n            ['name' => 'Aral', 'country_code' => 'KZ'],\n            ['name' => 'Madison Heights', 'country_code' => 'US'],\n            ['name' => 'Gyongyos', 'country_code' => 'HU'],\n            ['name' => 'Vaihingen an der Enz', 'country_code' => 'DE'],\n            ['name' => 'Kinik', 'country_code' => 'TR'],\n            ['name' => 'Capim', 'country_code' => 'BR'],\n            ['name' => 'Zhangguzhuang', 'country_code' => 'CN'],\n            ['name' => 'Oosterend', 'country_code' => 'NL'],\n            ['name' => 'Kabalo', 'country_code' => 'CD'],\n            ['name' => 'Prainha', 'country_code' => 'BR'],\n            ['name' => 'Purificacion', 'country_code' => 'CO'],\n            ['name' => 'Livingston', 'country_code' => 'US'],\n            ['name' => 'Mahon', 'country_code' => 'ES'],\n            ['name' => 'Williston', 'country_code' => 'US'],\n            ['name' => 'Villa Gesell', 'country_code' => 'AR'],\n            ['name' => 'Labasa', 'country_code' => 'FJ'],\n            ['name' => 'Askoy', 'country_code' => 'NO'],\n            ['name' => 'Dedovsk', 'country_code' => 'RU'],\n            ['name' => 'Heywood', 'country_code' => 'GB'],\n            ['name' => 'Shiyeli', 'country_code' => 'KZ'],\n            ['name' => 'Matanog', 'country_code' => 'PH'],\n            ['name' => 'Bretten', 'country_code' => 'DE'],\n            ['name' => 'Crevillente', 'country_code' => 'ES'],\n            ['name' => 'Dipaculao', 'country_code' => 'PH'],\n            ['name' => 'Redondela', 'country_code' => 'ES'],\n            ['name' => 'Pontedera', 'country_code' => 'IT'],\n            ['name' => 'Mandali', 'country_code' => 'IQ'],\n            ['name' => 'Misilmeri', 'country_code' => 'IT'],\n            ['name' => 'Eagle', 'country_code' => 'US'],\n            ['name' => 'Igarapava', 'country_code' => 'BR'],\n            ['name' => 'Parabiago', 'country_code' => 'IT'],\n            ['name' => 'Dzyarzhynsk', 'country_code' => 'BY'],\n            ['name' => 'Flandes', 'country_code' => 'CO'],\n            ['name' => 'Alushta', 'country_code' => 'UA'],\n            ['name' => 'Benito Soliven', 'country_code' => 'PH'],\n            ['name' => 'Rancharia', 'country_code' => 'BR'],\n            ['name' => 'Brecht', 'country_code' => 'BE'],\n            ['name' => 'Spinea', 'country_code' => 'IT'],\n            ['name' => 'Alquizar', 'country_code' => 'CU'],\n            ['name' => 'Campo Magro', 'country_code' => 'BR'],\n            ['name' => 'Friedberg', 'country_code' => 'DE'],\n            ['name' => 'Candijay', 'country_code' => 'PH'],\n            ['name' => 'Mangdongshan', 'country_code' => 'CN'],\n            ['name' => 'Maryville', 'country_code' => 'US'],\n            ['name' => 'Atbasar', 'country_code' => 'KZ'],\n            ['name' => 'Dumalag', 'country_code' => 'PH'],\n            ['name' => 'Mashan', 'country_code' => 'CN'],\n            ['name' => 'Rietberg', 'country_code' => 'DE'],\n            ['name' => 'Brunssum', 'country_code' => 'NL'],\n            ['name' => 'Xinmin', 'country_code' => 'CN'],\n            ['name' => 'General Nakar', 'country_code' => 'PH'],\n            ['name' => 'Piraju', 'country_code' => 'BR'],\n            ['name' => 'Asha', 'country_code' => 'RU'],\n            ['name' => 'Bosanska Krupa', 'country_code' => 'BA'],\n            ['name' => 'Anajas', 'country_code' => 'BR'],\n            ['name' => 'Walnut', 'country_code' => 'US'],\n            ['name' => 'Toksun', 'country_code' => 'CN'],\n            ['name' => 'Shuangtian', 'country_code' => 'CN'],\n            ['name' => 'Lianga', 'country_code' => 'PH'],\n            ['name' => 'North Cowichan', 'country_code' => 'CA'],\n            ['name' => 'Mamaroneck', 'country_code' => 'US'],\n            ['name' => 'Rendsburg', 'country_code' => 'DE'],\n            ['name' => 'Garden City', 'country_code' => 'US'],\n            ['name' => 'Texarkana', 'country_code' => 'US'],\n            ['name' => 'Gustrow', 'country_code' => 'DE'],\n            ['name' => 'Kent', 'country_code' => 'US'],\n            ['name' => 'Landsberg', 'country_code' => 'DE'],\n            ['name' => 'Rota', 'country_code' => 'ES'],\n            ['name' => 'Rhennouch', 'country_code' => 'TN'],\n            ['name' => 'Santa Fe', 'country_code' => 'PH'],\n            ['name' => 'North Chicago', 'country_code' => 'US'],\n            ['name' => 'Greenville', 'country_code' => 'US'],\n            ['name' => 'Oelde', 'country_code' => 'DE'],\n            ['name' => 'Yangshuling', 'country_code' => 'CN'],\n            ['name' => 'Duluth', 'country_code' => 'US'],\n            ['name' => 'Aberdeen', 'country_code' => 'US'],\n            ['name' => 'Konigsbrunn', 'country_code' => 'DE'],\n            ['name' => 'Winona', 'country_code' => 'US'],\n            ['name' => 'Rotterdam', 'country_code' => 'US'],\n            ['name' => 'Ivisan', 'country_code' => 'PH'],\n            ['name' => 'O Fallon', 'country_code' => 'US'],\n            ['name' => 'Drexel Heights', 'country_code' => 'US'],\n            ['name' => 'Ukiah', 'country_code' => 'US'],\n            ['name' => 'Atwater', 'country_code' => 'US'],\n            ['name' => 'Bourgoin-Jallieu', 'country_code' => 'FR'],\n            ['name' => 'Maracana', 'country_code' => 'BR'],\n            ['name' => 'Sanford', 'country_code' => 'US'],\n            ['name' => 'Ja ar', 'country_code' => 'YE'],\n            ['name' => 'Nazare', 'country_code' => 'BR'],\n            ['name' => 'Highland Park', 'country_code' => 'US'],\n            ['name' => 'Westfield', 'country_code' => 'US'],\n            ['name' => 'Hermiston', 'country_code' => 'US'],\n            ['name' => 'Orchard Park', 'country_code' => 'US'],\n            ['name' => 'Riihimaki', 'country_code' => 'FI'],\n            ['name' => 'Orlova', 'country_code' => 'CZ'],\n            ['name' => 'Sint-Michielsgestel', 'country_code' => 'NL'],\n            ['name' => 'Fritissa', 'country_code' => 'MA'],\n            ['name' => 'Culemborg', 'country_code' => 'NL'],\n            ['name' => 'Desenzano del Garda', 'country_code' => 'IT'],\n            ['name' => 'Tredyffrin', 'country_code' => 'US'],\n            ['name' => 'Xiaobazi', 'country_code' => 'CN'],\n            ['name' => 'Campello', 'country_code' => 'ES'],\n            ['name' => 'Ans', 'country_code' => 'BE'],\n            ['name' => 'Likino-Dulevo', 'country_code' => 'RU'],\n            ['name' => 'Timizart', 'country_code' => 'DZ'],\n            ['name' => 'Tandubas', 'country_code' => 'PH'],\n            ['name' => 'Poggibonsi', 'country_code' => 'IT'],\n            ['name' => 'Rosrath', 'country_code' => 'DE'],\n            ['name' => 'Ibimirim', 'country_code' => 'BR'],\n            ['name' => 'Kavaje', 'country_code' => 'AL'],\n            ['name' => 'Gyula', 'country_code' => 'HU'],\n            ['name' => 'Kiskunfelegyhaza', 'country_code' => 'HU'],\n            ['name' => 'Pittsford', 'country_code' => 'US'],\n            ['name' => 'Capim Grosso', 'country_code' => 'BR'],\n            ['name' => 'Iguaba Grande', 'country_code' => 'BR'],\n            ['name' => 'Kostomuksha', 'country_code' => 'RU'],\n            ['name' => 'Ra s al  Ayn', 'country_code' => 'SY'],\n            ['name' => 'Sopo', 'country_code' => 'CO'],\n            ['name' => 'Benhao', 'country_code' => 'CN'],\n            ['name' => 'Central', 'country_code' => 'US'],\n            ['name' => 'Quivican', 'country_code' => 'CU'],\n            ['name' => 'Dolores', 'country_code' => 'PH'],\n            ['name' => 'Suran', 'country_code' => 'SY'],\n            ['name' => 'Masiu', 'country_code' => 'PH'],\n            ['name' => 'East Lake-Orient Park', 'country_code' => 'US'],\n            ['name' => 'Winnenden', 'country_code' => 'DE'],\n            ['name' => 'Bogdanovich', 'country_code' => 'RU'],\n            ['name' => 'Matouying', 'country_code' => 'CN'],\n            ['name' => 'Hattersheim', 'country_code' => 'DE'],\n            ['name' => 'Novaya Usman ', 'country_code' => 'RU'],\n            ['name' => 'Chicago Heights', 'country_code' => 'US'],\n            ['name' => 'Boxmeer', 'country_code' => 'NL'],\n            ['name' => 'Divnogorsk', 'country_code' => 'RU'],\n            ['name' => 'Mondragone', 'country_code' => 'IT'],\n            ['name' => 'Orange', 'country_code' => 'FR'],\n            ['name' => 'Johnston', 'country_code' => 'US'],\n            ['name' => 'Northeim', 'country_code' => 'DE'],\n            ['name' => 'Norwood', 'country_code' => 'US'],\n            ['name' => 'Khmilnyk', 'country_code' => 'UA'],\n            ['name' => 'Limoeiro do Ajuru', 'country_code' => 'BR'],\n            ['name' => 'Capitan Bermudez', 'country_code' => 'AR'],\n            ['name' => 'Namaacha', 'country_code' => 'MZ'],\n            ['name' => 'East Fishkill', 'country_code' => 'US'],\n            ['name' => 'Tubao', 'country_code' => 'PH'],\n            ['name' => 'Buhl', 'country_code' => 'DE'],\n            ['name' => 'Glenville', 'country_code' => 'US'],\n            ['name' => 'Dasol', 'country_code' => 'PH'],\n            ['name' => 'Anadia', 'country_code' => 'PT'],\n            ['name' => 'Truskavets', 'country_code' => 'UA'],\n            ['name' => 'Duzhuang', 'country_code' => 'CN'],\n            ['name' => 'Redencao', 'country_code' => 'BR'],\n            ['name' => 'Carmagnola', 'country_code' => 'IT'],\n            ['name' => 'Monitos', 'country_code' => 'CO'],\n            ['name' => 'Canada de Gomez', 'country_code' => 'AR'],\n            ['name' => 'Shiqiao', 'country_code' => 'CN'],\n            ['name' => 'Chortkiv', 'country_code' => 'UA'],\n            ['name' => 'Balindong', 'country_code' => 'PH'],\n            ['name' => 'Palpa', 'country_code' => 'NP'],\n            ['name' => 'Cyangugu', 'country_code' => 'RW'],\n            ['name' => 'Tabuleiro do Norte', 'country_code' => 'BR'],\n            ['name' => 'Prado', 'country_code' => 'BR'],\n            ['name' => 'Salem', 'country_code' => 'US'],\n            ['name' => 'Vernon', 'country_code' => 'US'],\n            ['name' => 'Tudela', 'country_code' => 'PH'],\n            ['name' => 'Newberg', 'country_code' => 'US'],\n            ['name' => 'Viacha', 'country_code' => 'BO'],\n            ['name' => 'Aipe', 'country_code' => 'CO'],\n            ['name' => 'Voorhees', 'country_code' => 'US'],\n            ['name' => 'Cottica', 'country_code' => 'SR'],\n            ['name' => 'Santa Quiteria do Maranhao', 'country_code' => 'BR'],\n            ['name' => 'Timbiras', 'country_code' => 'BR'],\n            ['name' => 'Ciying', 'country_code' => 'CN'],\n            ['name' => 'Ornskoldsvik', 'country_code' => 'SE'],\n            ['name' => 'Taquaritinga do Norte', 'country_code' => 'BR'],\n            ['name' => 'Bontoc', 'country_code' => 'PH'],\n            ['name' => 'Lewes', 'country_code' => 'US'],\n            ['name' => 'Agde', 'country_code' => 'FR'],\n            ['name' => 'North Attleborough', 'country_code' => 'US'],\n            ['name' => 'Aleysk', 'country_code' => 'RU'],\n            ['name' => 'Itubera', 'country_code' => 'BR'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Sant Anastasia', 'country_code' => 'IT'],\n            ['name' => 'Balete', 'country_code' => 'PH'],\n            ['name' => 'Gubkinskiy', 'country_code' => 'RU'],\n            ['name' => 'Primero de Enero', 'country_code' => 'CU'],\n            ['name' => 'Oak Ridge', 'country_code' => 'US'],\n            ['name' => 'La Concordia', 'country_code' => 'EC'],\n            ['name' => 'San Cristobal', 'country_code' => 'CU'],\n            ['name' => 'Gonglang', 'country_code' => 'CN'],\n            ['name' => 'Cheshire', 'country_code' => 'US'],\n            ['name' => 'Beverley', 'country_code' => 'GB'],\n            ['name' => 'Extremoz', 'country_code' => 'BR'],\n            ['name' => 'Crofton', 'country_code' => 'US'],\n            ['name' => 'Vinaroz', 'country_code' => 'ES'],\n            ['name' => 'Springe', 'country_code' => 'DE'],\n            ['name' => 'Samokov', 'country_code' => 'BG'],\n            ['name' => 'Madinat Zayid', 'country_code' => 'AE'],\n            ['name' => 'Ban Phai', 'country_code' => 'TH'],\n            ['name' => 'Athens', 'country_code' => 'US'],\n            ['name' => 'Chambly', 'country_code' => 'CA'],\n            ['name' => 'Pasuquin', 'country_code' => 'PH'],\n            ['name' => 'Winterswijk', 'country_code' => 'NL'],\n            ['name' => 'Old Harbour', 'country_code' => 'JM'],\n            ['name' => 'Laplace', 'country_code' => 'US'],\n            ['name' => 'Nouna', 'country_code' => 'BF'],\n            ['name' => 'Benavente', 'country_code' => 'PT'],\n            ['name' => 'Mirandopolis', 'country_code' => 'BR'],\n            ['name' => 'Itaperucu', 'country_code' => 'BR'],\n            ['name' => 'Goio-Ere', 'country_code' => 'BR'],\n            ['name' => 'Carpentras', 'country_code' => 'FR'],\n            ['name' => 'La Dorada', 'country_code' => 'CO'],\n            ['name' => 'Schwandorf', 'country_code' => 'DE'],\n            ['name' => 'Alatri', 'country_code' => 'IT'],\n            ['name' => 'Gagarin', 'country_code' => 'RU'],\n            ['name' => 'Tocache Nuevo', 'country_code' => 'PE'],\n            ['name' => 'San Javier', 'country_code' => 'CL'],\n            ['name' => 'Cervia', 'country_code' => 'IT'],\n            ['name' => 'New Panamao', 'country_code' => 'PH'],\n            ['name' => 'SeaTac', 'country_code' => 'US'],\n            ['name' => 'Jauja', 'country_code' => 'PE'],\n            ['name' => 'Riosucio', 'country_code' => 'CO'],\n            ['name' => 'Staraya Russa', 'country_code' => 'RU'],\n            ['name' => 'Tanglou', 'country_code' => 'CN'],\n            ['name' => 'Langedijk', 'country_code' => 'NL'],\n            ['name' => 'Cajati', 'country_code' => 'BR'],\n            ['name' => 'Dongwang', 'country_code' => 'CN'],\n            ['name' => 'Nenton', 'country_code' => 'GT'],\n            ['name' => 'Salay', 'country_code' => 'PH'],\n            ['name' => 'Lavezares', 'country_code' => 'PH'],\n            ['name' => 'Hoxter', 'country_code' => 'DE'],\n            ['name' => 'Xaxim', 'country_code' => 'BR'],\n            ['name' => 'Lubon', 'country_code' => 'PL'],\n            ['name' => 'La Calera', 'country_code' => 'CO'],\n            ['name' => 'Caetes', 'country_code' => 'BR'],\n            ['name' => 'Raytown', 'country_code' => 'US'],\n            ['name' => 'Paragould', 'country_code' => 'US'],\n            ['name' => 'Rosa Zarate', 'country_code' => 'EC'],\n            ['name' => 'Passira', 'country_code' => 'BR'],\n            ['name' => 'Graham', 'country_code' => 'US'],\n            ['name' => 'Vihti', 'country_code' => 'FI'],\n            ['name' => 'Anilao', 'country_code' => 'PH'],\n            ['name' => 'Hanawa', 'country_code' => 'JP'],\n            ['name' => 'Krotoszyn', 'country_code' => 'PL'],\n            ['name' => 'Yemanzhelinsk', 'country_code' => 'RU'],\n            ['name' => 'Candelaria', 'country_code' => 'ES'],\n            ['name' => 'Southgate', 'country_code' => 'US'],\n            ['name' => 'Caicedonia', 'country_code' => 'CO'],\n            ['name' => 'Calafell', 'country_code' => 'ES'],\n            ['name' => 'Meissen', 'country_code' => 'DE'],\n            ['name' => 'Barabinsk', 'country_code' => 'RU'],\n            ['name' => 'Pucon', 'country_code' => 'CL'],\n            ['name' => 'West Warwick', 'country_code' => 'US'],\n            ['name' => 'Harrison', 'country_code' => 'US'],\n            ['name' => 'Pulupandan', 'country_code' => 'PH'],\n            ['name' => 'Niles', 'country_code' => 'US'],\n            ['name' => 'Fernandina Beach', 'country_code' => 'US'],\n            ['name' => 'Siraway', 'country_code' => 'PH'],\n            ['name' => 'Chahe', 'country_code' => 'CN'],\n            ['name' => 'Kromeriz', 'country_code' => 'CZ'],\n            ['name' => 'Timaru', 'country_code' => 'NZ'],\n            ['name' => 'Mount Olive', 'country_code' => 'US'],\n            ['name' => 'Big Spring', 'country_code' => 'US'],\n            ['name' => 'Petrovsk', 'country_code' => 'RU'],\n            ['name' => 'Heshancun', 'country_code' => 'CN'],\n            ['name' => 'Balakliia', 'country_code' => 'UA'],\n            ['name' => 'Claudio', 'country_code' => 'BR'],\n            ['name' => 'Zhonghechang', 'country_code' => 'CN'],\n            ['name' => 'Hafnarfjordhur', 'country_code' => 'IS'],\n            ['name' => 'Quakers Hill', 'country_code' => 'AU'],\n            ['name' => 'Toqsu', 'country_code' => 'CN'],\n            ['name' => 'Chiredzi', 'country_code' => 'ZW'],\n            ['name' => 'Stanford le Hope', 'country_code' => 'GB'],\n            ['name' => 'Borzya', 'country_code' => 'RU'],\n            ['name' => 'Eibar', 'country_code' => 'ES'],\n            ['name' => 'Novyi Rozdil', 'country_code' => 'UA'],\n            ['name' => 'Milford', 'country_code' => 'US'],\n            ['name' => 'Okotoks', 'country_code' => 'CA'],\n            ['name' => 'Campos Gerais', 'country_code' => 'BR'],\n            ['name' => 'Bella Vista', 'country_code' => 'US'],\n            ['name' => 'Pabellon de Arteaga', 'country_code' => 'MX'],\n            ['name' => 'Windsor', 'country_code' => 'US'],\n            ['name' => 'Ogawa', 'country_code' => 'JP'],\n            ['name' => 'Laoaoba', 'country_code' => 'CN'],\n            ['name' => 'Chichaoua', 'country_code' => 'MA'],\n            ['name' => 'Herentals', 'country_code' => 'BE'],\n            ['name' => 'Milton', 'country_code' => 'US'],\n            ['name' => 'Shangluhu', 'country_code' => 'CN'],\n            ['name' => 'Oyabe', 'country_code' => 'JP'],\n            ['name' => 'Morrisville', 'country_code' => 'US'],\n            ['name' => 'Balzar', 'country_code' => 'EC'],\n            ['name' => 'Harelbeke', 'country_code' => 'BE'],\n            ['name' => 'Zhongtai', 'country_code' => 'CN'],\n            ['name' => 'Greenville', 'country_code' => 'US'],\n            ['name' => 'Santa Rita de Cassia', 'country_code' => 'BR'],\n            ['name' => 'Buriti', 'country_code' => 'BR'],\n            ['name' => 'Heerenveen', 'country_code' => 'NL'],\n            ['name' => 'Bad Zwischenahn', 'country_code' => 'DE'],\n            ['name' => 'Qaratau', 'country_code' => 'KZ'],\n            ['name' => 'Lacey', 'country_code' => 'US'],\n            ['name' => 'Pires do Rio', 'country_code' => 'BR'],\n            ['name' => 'Zeitz', 'country_code' => 'DE'],\n            ['name' => 'Leichlingen', 'country_code' => 'DE'],\n            ['name' => 'Henstedt-Ulzburg', 'country_code' => 'DE'],\n            ['name' => 'San Salvador', 'country_code' => 'MX'],\n            ['name' => 'Zhailuo', 'country_code' => 'CN'],\n            ['name' => 'Cecina', 'country_code' => 'IT'],\n            ['name' => 'Taza', 'country_code' => 'MA'],\n            ['name' => 'Yangiyer', 'country_code' => 'UZ'],\n            ['name' => 'Casselberry', 'country_code' => 'US'],\n            ['name' => 'San Narciso', 'country_code' => 'PH'],\n            ['name' => 'Hatonuevo', 'country_code' => 'CO'],\n            ['name' => 'Propria', 'country_code' => 'BR'],\n            ['name' => 'Wellesley', 'country_code' => 'US'],\n            ['name' => 'East Haven', 'country_code' => 'US'],\n            ['name' => 'Plattsburgh', 'country_code' => 'US'],\n            ['name' => 'Alagoa Grande', 'country_code' => 'BR'],\n            ['name' => 'Vittorio Veneto', 'country_code' => 'IT'],\n            ['name' => 'Naranjito', 'country_code' => 'EC'],\n            ['name' => 'Novi Ligure', 'country_code' => 'IT'],\n            ['name' => 'Tucuru', 'country_code' => 'GT'],\n            ['name' => 'Griesheim', 'country_code' => 'DE'],\n            ['name' => 'Palotina', 'country_code' => 'BR'],\n            ['name' => 'Wasco', 'country_code' => 'US'],\n            ['name' => 'Emmendingen', 'country_code' => 'DE'],\n            ['name' => 'Novo Oriente', 'country_code' => 'BR'],\n            ['name' => 'Qincun', 'country_code' => 'CN'],\n            ['name' => 'Douar Oulad Aj-jabri', 'country_code' => 'MA'],\n            ['name' => 'South Laurel', 'country_code' => 'US'],\n            ['name' => 'Saint Bernard', 'country_code' => 'PH'],\n            ['name' => 'Fleming Island', 'country_code' => 'US'],\n            ['name' => 'Licab', 'country_code' => 'PH'],\n            ['name' => 'Byaroza', 'country_code' => 'BY'],\n            ['name' => 'Belle Glade', 'country_code' => 'US'],\n            ['name' => 'Aioi', 'country_code' => 'JP'],\n            ['name' => 'Kumalarang', 'country_code' => 'PH'],\n            ['name' => 'San Carlos', 'country_code' => 'CO'],\n            ['name' => 'Manticao', 'country_code' => 'PH'],\n            ['name' => 'Stoughton', 'country_code' => 'US'],\n            ['name' => 'Lake in the Hills', 'country_code' => 'US'],\n            ['name' => 'Witney', 'country_code' => 'GB'],\n            ['name' => 'Kartaly', 'country_code' => 'RU'],\n            ['name' => 'Agawam', 'country_code' => 'US'],\n            ['name' => 'Pokhvistnevo', 'country_code' => 'RU'],\n            ['name' => 'Isnos', 'country_code' => 'CO'],\n            ['name' => 'Datu Paglas', 'country_code' => 'PH'],\n            ['name' => 'Baishaling', 'country_code' => 'CN'],\n            ['name' => 'Dubasari', 'country_code' => 'MD'],\n            ['name' => 'Bilgoraj', 'country_code' => 'PL'],\n            ['name' => 'Wallkill', 'country_code' => 'US'],\n            ['name' => 'Shirley', 'country_code' => 'US'],\n            ['name' => 'Nzega', 'country_code' => 'TZ'],\n            ['name' => 'Naranjal', 'country_code' => 'EC'],\n            ['name' => 'Lucenec', 'country_code' => 'SK'],\n            ['name' => 'Burton', 'country_code' => 'US'],\n            ['name' => 'Oulad Yaich', 'country_code' => 'MA'],\n            ['name' => 'Izu', 'country_code' => 'JP'],\n            ['name' => 'Chili', 'country_code' => 'US'],\n            ['name' => 'Geneva', 'country_code' => 'US'],\n            ['name' => 'Baradero', 'country_code' => 'AR'],\n            ['name' => 'Giarre', 'country_code' => 'IT'],\n            ['name' => 'Tha Yang', 'country_code' => 'TH'],\n            ['name' => 'San Miguel', 'country_code' => 'PH'],\n            ['name' => 'Khust', 'country_code' => 'UA'],\n            ['name' => 'Oulad Hammou', 'country_code' => 'MA'],\n            ['name' => 'Gusev', 'country_code' => 'RU'],\n            ['name' => 'Reinbek', 'country_code' => 'DE'],\n            ['name' => 'Sept-Iles', 'country_code' => 'CA'],\n            ['name' => 'Triggiano', 'country_code' => 'IT'],\n            ['name' => 'Schererville', 'country_code' => 'US'],\n            ['name' => 'Independence', 'country_code' => 'US'],\n            ['name' => 'Gorlice', 'country_code' => 'PL'],\n            ['name' => 'West Springfield', 'country_code' => 'US'],\n            ['name' => 'Villareal', 'country_code' => 'PH'],\n            ['name' => 'Venezuela', 'country_code' => 'CU'],\n            ['name' => 'Wegberg', 'country_code' => 'DE'],\n            ['name' => 'Assisi', 'country_code' => 'IT'],\n            ['name' => 'Geislingen an der Steige', 'country_code' => 'DE'],\n            ['name' => 'Austintown', 'country_code' => 'US'],\n            ['name' => 'Marapanim', 'country_code' => 'BR'],\n            ['name' => 'Villa Allende', 'country_code' => 'AR'],\n            ['name' => 'Tournefeuille', 'country_code' => 'FR'],\n            ['name' => 'Coyaima', 'country_code' => 'CO'],\n            ['name' => 'Lisen', 'country_code' => 'CZ'],\n            ['name' => 'Santo Domingo', 'country_code' => 'PH'],\n            ['name' => 'San Jose', 'country_code' => 'PH'],\n            ['name' => 'Baunatal', 'country_code' => 'DE'],\n            ['name' => 'Burlington', 'country_code' => 'US'],\n            ['name' => 'Mpika', 'country_code' => 'ZM'],\n            ['name' => 'McCandless', 'country_code' => 'US'],\n            ['name' => 'Bom Jesus', 'country_code' => 'BR'],\n            ['name' => 'Las Nieves', 'country_code' => 'PH'],\n            ['name' => 'Serra Negra', 'country_code' => 'BR'],\n            ['name' => 'Carbonia', 'country_code' => 'IT'],\n            ['name' => 'Mogliano Veneto', 'country_code' => 'IT'],\n            ['name' => 'New Iberia', 'country_code' => 'US'],\n            ['name' => 'Silvassa', 'country_code' => 'IN'],\n            ['name' => 'Northampton', 'country_code' => 'US'],\n            ['name' => 'Guararema', 'country_code' => 'BR'],\n            ['name' => 'Luis Correia', 'country_code' => 'BR'],\n            ['name' => 'Raseborg', 'country_code' => 'FI'],\n            ['name' => 'Javea', 'country_code' => 'ES'],\n            ['name' => 'Esztergom', 'country_code' => 'HU'],\n            ['name' => 'Manaquiri', 'country_code' => 'BR'],\n            ['name' => 'Ciro Redondo', 'country_code' => 'CU'],\n            ['name' => 'Macalelon', 'country_code' => 'PH'],\n            ['name' => 'Huanghuajing', 'country_code' => 'CN'],\n            ['name' => 'Jeffrey s Bay', 'country_code' => 'ZA'],\n            ['name' => 'Pershotravensk', 'country_code' => 'UA'],\n            ['name' => 'Lillehammer', 'country_code' => 'NO'],\n            ['name' => 'Warin Chamrap', 'country_code' => 'TH'],\n            ['name' => 'San Giovanni in Persiceto', 'country_code' => 'IT'],\n            ['name' => 'Gates', 'country_code' => 'US'],\n            ['name' => 'Gaotan', 'country_code' => 'CN'],\n            ['name' => 'Sighisoara', 'country_code' => 'RO'],\n            ['name' => 'Vineyard', 'country_code' => 'US'],\n            ['name' => 'Las Rosas', 'country_code' => 'MX'],\n            ['name' => 'Toli', 'country_code' => 'CN'],\n            ['name' => 'Bermejo', 'country_code' => 'BO'],\n            ['name' => 'Bretigny-sur-Orge', 'country_code' => 'FR'],\n            ['name' => 'Bacoli', 'country_code' => 'IT'],\n            ['name' => 'Conceicao das Alagoas', 'country_code' => 'BR'],\n            ['name' => 'Luruaco', 'country_code' => 'CO'],\n            ['name' => 'Zionsville', 'country_code' => 'US'],\n            ['name' => 'Pedras de Fogo', 'country_code' => 'BR'],\n            ['name' => 'Vestal', 'country_code' => 'US'],\n            ['name' => 'Libacao', 'country_code' => 'PH'],\n            ['name' => 'Pilar do Sul', 'country_code' => 'BR'],\n            ['name' => 'Blankenfelde', 'country_code' => 'DE'],\n            ['name' => 'Guamal', 'country_code' => 'CO'],\n            ['name' => 'Mollendo', 'country_code' => 'PE'],\n            ['name' => 'Short Pump', 'country_code' => 'US'],\n            ['name' => 'Wetter (Ruhr)', 'country_code' => 'DE'],\n            ['name' => 'Sexmoan', 'country_code' => 'PH'],\n            ['name' => 'Grimma', 'country_code' => 'DE'],\n            ['name' => 'Kevelaer', 'country_code' => 'DE'],\n            ['name' => 'Belpasso', 'country_code' => 'IT'],\n            ['name' => 'Ajka', 'country_code' => 'HU'],\n            ['name' => 'Klodzko', 'country_code' => 'PL'],\n            ['name' => 'Lumberton', 'country_code' => 'US'],\n            ['name' => 'Leimen', 'country_code' => 'DE'],\n            ['name' => 'Alga', 'country_code' => 'KZ'],\n            ['name' => 'Safaja', 'country_code' => 'EG'],\n            ['name' => 'Hiji', 'country_code' => 'JP'],\n            ['name' => 'Perry Hall', 'country_code' => 'US'],\n            ['name' => 'Pitangui', 'country_code' => 'BR'],\n            ['name' => 'Dar Bel Hamri', 'country_code' => 'MA'],\n            ['name' => 'Obama', 'country_code' => 'JP'],\n            ['name' => 'Zacoalco de Torres', 'country_code' => 'MX'],\n            ['name' => 'Aberdeen', 'country_code' => 'US'],\n            ['name' => 'Bad Neuenahr-Ahrweiler', 'country_code' => 'DE'],\n            ['name' => 'Villa Luvianos', 'country_code' => 'MX'],\n            ['name' => 'Santa Cruz Cabralia', 'country_code' => 'BR'],\n            ['name' => 'Bardaskan', 'country_code' => 'IR'],\n            ['name' => 'Benicia', 'country_code' => 'US'],\n            ['name' => 'Erice', 'country_code' => 'IT'],\n            ['name' => 'Oakleaf Plantation', 'country_code' => 'US'],\n            ['name' => 'La Paz', 'country_code' => 'PH'],\n            ['name' => 'Jacksonville', 'country_code' => 'US'],\n            ['name' => 'Capljina', 'country_code' => 'BA'],\n            ['name' => 'Rockledge', 'country_code' => 'US'],\n            ['name' => 'Navahrudak', 'country_code' => 'BY'],\n            ['name' => 'Miranda', 'country_code' => 'BR'],\n            ['name' => 'San Miniato', 'country_code' => 'IT'],\n            ['name' => 'Agno', 'country_code' => 'PH'],\n            ['name' => 'Saugus', 'country_code' => 'US'],\n            ['name' => 'Henderson', 'country_code' => 'US'],\n            ['name' => 'Honcho', 'country_code' => 'JP'],\n            ['name' => 'Rapperswil-Jona', 'country_code' => 'CH'],\n            ['name' => 'Kurchaloy', 'country_code' => 'RU'],\n            ['name' => 'Oktyabrsk', 'country_code' => 'KZ'],\n            ['name' => 'Qujingpu', 'country_code' => 'CN'],\n            ['name' => 'Guma', 'country_code' => 'CN'],\n            ['name' => 'Majayjay', 'country_code' => 'PH'],\n            ['name' => 'Centre Wellington', 'country_code' => 'CA'],\n            ['name' => 'Bo ka', 'country_code' => 'UZ'],\n            ['name' => 'Monterey', 'country_code' => 'US'],\n            ['name' => 'Shuiding', 'country_code' => 'CN'],\n            ['name' => 'Langdu', 'country_code' => 'CN'],\n            ['name' => 'Arqalyq', 'country_code' => 'KZ'],\n            ['name' => 'Converse', 'country_code' => 'US'],\n            ['name' => 'Paracelis', 'country_code' => 'PH'],\n            ['name' => 'Khrestivka', 'country_code' => 'UA'],\n            ['name' => 'San Felipe Jalapa de Diaz', 'country_code' => 'MX'],\n            ['name' => 'Granite City', 'country_code' => 'US'],\n            ['name' => 'Llallagua', 'country_code' => 'BO'],\n            ['name' => 'Oppegard', 'country_code' => 'NO'],\n            ['name' => 'Buritizeiro', 'country_code' => 'BR'],\n            ['name' => 'Iguig', 'country_code' => 'PH'],\n            ['name' => 'Yangyuhe', 'country_code' => 'CN'],\n            ['name' => 'Tainai', 'country_code' => 'JP'],\n            ['name' => 'Gaoua', 'country_code' => 'BF'],\n            ['name' => 'Nallihan', 'country_code' => 'TR'],\n            ['name' => 'Bien Unido', 'country_code' => 'PH'],\n            ['name' => 'Tara', 'country_code' => 'RU'],\n            ['name' => 'Hazar', 'country_code' => 'TM'],\n            ['name' => 'Khulm', 'country_code' => 'AF'],\n            ['name' => 'Oslob', 'country_code' => 'PH'],\n            ['name' => 'Xochistlahuaca', 'country_code' => 'MX'],\n            ['name' => 'Lepe', 'country_code' => 'ES'],\n            ['name' => 'Algemesi', 'country_code' => 'ES'],\n            ['name' => 'Pantao-Ragat', 'country_code' => 'PH'],\n            ['name' => 'Yukon', 'country_code' => 'US'],\n            ['name' => 'Kushva', 'country_code' => 'RU'],\n            ['name' => 'Villazon', 'country_code' => 'BO'],\n            ['name' => 'Pontal do Parana', 'country_code' => 'BR'],\n            ['name' => 'Ballina', 'country_code' => 'AU'],\n            ['name' => 'Taree', 'country_code' => 'AU'],\n            ['name' => 'Sorochinsk', 'country_code' => 'RU'],\n            ['name' => 'Babatngon', 'country_code' => 'PH'],\n            ['name' => 'Kakuda', 'country_code' => 'JP'],\n            ['name' => 'Sonora', 'country_code' => 'US'],\n            ['name' => 'Kuaidamao', 'country_code' => 'CN'],\n            ['name' => 'Shaler', 'country_code' => 'US'],\n            ['name' => 'Dauin', 'country_code' => 'PH'],\n            ['name' => 'Prata', 'country_code' => 'BR'],\n            ['name' => 'Gameleira', 'country_code' => 'BR'],\n            ['name' => 'Branford', 'country_code' => 'US'],\n            ['name' => 'Westport', 'country_code' => 'US'],\n            ['name' => 'Kasangulu', 'country_code' => 'CD'],\n            ['name' => 'Uchturpan', 'country_code' => 'CN'],\n            ['name' => 'Baesweiler', 'country_code' => 'DE'],\n            ['name' => 'Chios', 'country_code' => 'GR'],\n            ['name' => 'Camiri', 'country_code' => 'BO'],\n            ['name' => 'Jimenez', 'country_code' => 'PH'],\n            ['name' => 'Illkirch-Graffenstaden', 'country_code' => 'FR'],\n            ['name' => 'Kriens', 'country_code' => 'CH'],\n            ['name' => 'Imatra', 'country_code' => 'FI'],\n            ['name' => 'Coromandel', 'country_code' => 'BR'],\n            ['name' => 'Kholmsk', 'country_code' => 'RU'],\n            ['name' => 'Mehlville', 'country_code' => 'US'],\n            ['name' => 'Ternivka', 'country_code' => 'UA'],\n            ['name' => 'Niuchangqiao', 'country_code' => 'CN'],\n            ['name' => 'Mirassol d Oeste', 'country_code' => 'BR'],\n            ['name' => 'Wisconsin Rapids', 'country_code' => 'US'],\n            ['name' => 'Nochistlan de Mejia', 'country_code' => 'MX'],\n            ['name' => 'Baisuo', 'country_code' => 'CN'],\n            ['name' => 'San Martin de los Andes', 'country_code' => 'AR'],\n            ['name' => 'Aglipay', 'country_code' => 'PH'],\n            ['name' => 'Dembi Dolo', 'country_code' => 'ET'],\n            ['name' => 'Dahmani', 'country_code' => 'TN'],\n            ['name' => 'Piest any', 'country_code' => 'SK'],\n            ['name' => 'Galt', 'country_code' => 'US'],\n            ['name' => 'Mocimboa', 'country_code' => 'MZ'],\n            ['name' => 'Hutto', 'country_code' => 'US'],\n            ['name' => 'Sundern', 'country_code' => 'DE'],\n            ['name' => 'Jaguarao', 'country_code' => 'BR'],\n            ['name' => 'Bixby', 'country_code' => 'US'],\n            ['name' => 'Hobart', 'country_code' => 'US'],\n            ['name' => 'West Windsor', 'country_code' => 'US'],\n            ['name' => 'Benicarlo', 'country_code' => 'ES'],\n            ['name' => 'Tlalpujahua de Rayon', 'country_code' => 'MX'],\n            ['name' => 'Oakdale', 'country_code' => 'US'],\n            ['name' => 'Sabaneta', 'country_code' => 'VE'],\n            ['name' => 'Sunbury', 'country_code' => 'US'],\n            ['name' => 'Valente', 'country_code' => 'BR'],\n            ['name' => 'Moulay Bousselham', 'country_code' => 'MA'],\n            ['name' => 'Shilan', 'country_code' => 'CN'],\n            ['name' => 'Summerlin South', 'country_code' => 'US'],\n            ['name' => 'Bolobo', 'country_code' => 'CD'],\n            ['name' => 'Melgaco', 'country_code' => 'BR'],\n            ['name' => 'Pirai', 'country_code' => 'BR'],\n            ['name' => 'Andenne', 'country_code' => 'BE'],\n            ['name' => 'Carauari', 'country_code' => 'BR'],\n            ['name' => 'Belen de Umbria', 'country_code' => 'CO'],\n            ['name' => 'Hadishahr', 'country_code' => 'IR'],\n            ['name' => 'Topki', 'country_code' => 'RU'],\n            ['name' => 'Zamboanguita', 'country_code' => 'PH'],\n            ['name' => 'Vyshhorod', 'country_code' => 'UA'],\n            ['name' => 'Salinas Victoria', 'country_code' => 'MX'],\n            ['name' => 'Atlautla', 'country_code' => 'MX'],\n            ['name' => 'Cocal', 'country_code' => 'BR'],\n            ['name' => 'Porto Sant Elpidio', 'country_code' => 'IT'],\n            ['name' => 'Sueca', 'country_code' => 'ES'],\n            ['name' => 'Zolotonosha', 'country_code' => 'UA'],\n            ['name' => 'Ormskirk', 'country_code' => 'GB'],\n            ['name' => 'Ouda-yamaguchi', 'country_code' => 'JP'],\n            ['name' => 'Aloran', 'country_code' => 'PH'],\n            ['name' => 'Zaltbommel', 'country_code' => 'NL'],\n            ['name' => 'Lufeng', 'country_code' => 'CN'],\n            ['name' => 'Soignies', 'country_code' => 'BE'],\n            ['name' => 'Fuman', 'country_code' => 'IR'],\n            ['name' => 'New Smyrna Beach', 'country_code' => 'US'],\n            ['name' => 'Bellaa', 'country_code' => 'MA'],\n            ['name' => 'Mahaplag', 'country_code' => 'PH'],\n            ['name' => 'Tualatin', 'country_code' => 'US'],\n            ['name' => 'Tehuipango', 'country_code' => 'MX'],\n            ['name' => 'Forest Hills', 'country_code' => 'US'],\n            ['name' => 'Fridley', 'country_code' => 'US'],\n            ['name' => 'Maloyaroslavets', 'country_code' => 'RU'],\n            ['name' => 'Newtown', 'country_code' => 'US'],\n            ['name' => 'Iguai', 'country_code' => 'BR'],\n            ['name' => 'Zakopane', 'country_code' => 'PL'],\n            ['name' => 'East Chicago', 'country_code' => 'US'],\n            ['name' => 'Ofaqim', 'country_code' => 'IL'],\n            ['name' => 'Vinales', 'country_code' => 'CU'],\n            ['name' => 'Kirkwood', 'country_code' => 'US'],\n            ['name' => 'Ozumba', 'country_code' => 'MX'],\n            ['name' => 'San Martin Hidalgo', 'country_code' => 'MX'],\n            ['name' => 'Sumilao', 'country_code' => 'PH'],\n            ['name' => 'Mechernich', 'country_code' => 'DE'],\n            ['name' => 'Lagoa Vermelha', 'country_code' => 'BR'],\n            ['name' => 'Arnstadt', 'country_code' => 'DE'],\n            ['name' => 'Littlehampton', 'country_code' => 'GB'],\n            ['name' => 'Havran', 'country_code' => 'TR'],\n            ['name' => 'Sanger', 'country_code' => 'US'],\n            ['name' => 'Gioia del Colle', 'country_code' => 'IT'],\n            ['name' => 'Mananjary', 'country_code' => 'MG'],\n            ['name' => 'Jarrow', 'country_code' => 'GB'],\n            ['name' => 'Mirano', 'country_code' => 'IT'],\n            ['name' => 'Kongsberg', 'country_code' => 'NO'],\n            ['name' => 'Itako', 'country_code' => 'JP'],\n            ['name' => 'Lainate', 'country_code' => 'IT'],\n            ['name' => 'Nova Prata', 'country_code' => 'BR'],\n            ['name' => 'Boca da Mata', 'country_code' => 'BR'],\n            ['name' => 'Morgan City', 'country_code' => 'US'],\n            ['name' => 'Curtea de Arges', 'country_code' => 'RO'],\n            ['name' => 'Sao Jose do Norte', 'country_code' => 'BR'],\n            ['name' => 'Ramsey', 'country_code' => 'US'],\n            ['name' => 'Zongdi', 'country_code' => 'CN'],\n            ['name' => 'Ruston', 'country_code' => 'US'],\n            ['name' => 'Jeffersontown', 'country_code' => 'US'],\n            ['name' => 'Glen Ellyn', 'country_code' => 'US'],\n            ['name' => 'Zarechnyy', 'country_code' => 'RU'],\n            ['name' => 'Longtan', 'country_code' => 'CN'],\n            ['name' => 'Supia', 'country_code' => 'CO'],\n            ['name' => 'Argelia', 'country_code' => 'CO'],\n            ['name' => 'Kapellen', 'country_code' => 'BE'],\n            ['name' => 'Narat', 'country_code' => 'CN'],\n            ['name' => 'Moron de la Frontera', 'country_code' => 'ES'],\n            ['name' => 'Bandipura', 'country_code' => 'IN'],\n            ['name' => 'San Juan Guichicovi', 'country_code' => 'MX'],\n            ['name' => 'Bom Jardim', 'country_code' => 'BR'],\n            ['name' => 'Mantena', 'country_code' => 'BR'],\n            ['name' => 'Makato', 'country_code' => 'PH'],\n            ['name' => 'Borsa', 'country_code' => 'RO'],\n            ['name' => 'Canon City', 'country_code' => 'US'],\n            ['name' => 'Ibotirama', 'country_code' => 'BR'],\n            ['name' => 'Lichtenburg', 'country_code' => 'ZA'],\n            ['name' => 'Gojo', 'country_code' => 'JP'],\n            ['name' => 'Wangtang', 'country_code' => 'CN'],\n            ['name' => 'Juatuba', 'country_code' => 'BR'],\n            ['name' => 'Cuartero', 'country_code' => 'PH'],\n            ['name' => 'Monticello', 'country_code' => 'US'],\n            ['name' => 'Itacare', 'country_code' => 'BR'],\n            ['name' => 'Lebrija', 'country_code' => 'ES'],\n            ['name' => 'Oktyabrsk', 'country_code' => 'RU'],\n            ['name' => 'Burlington', 'country_code' => 'US'],\n            ['name' => 'Ashtabula', 'country_code' => 'US'],\n            ['name' => 'Santa Perpetua de Moguda', 'country_code' => 'ES'],\n            ['name' => 'Marco', 'country_code' => 'BR'],\n            ['name' => 'Wiesloch', 'country_code' => 'DE'],\n            ['name' => 'Temescal Valley', 'country_code' => 'US'],\n            ['name' => 'Oroshaza', 'country_code' => 'HU'],\n            ['name' => 'Xima', 'country_code' => 'CN'],\n            ['name' => 'Bridgewater', 'country_code' => 'US'],\n            ['name' => 'Agua Azul do Norte', 'country_code' => 'BR'],\n            ['name' => 'Mint Hill', 'country_code' => 'US'],\n            ['name' => 'Jarinu', 'country_code' => 'BR'],\n            ['name' => 'Rosiori de Vede', 'country_code' => 'RO'],\n            ['name' => 'Dupax Del Norte', 'country_code' => 'PH'],\n            ['name' => 'Ponot', 'country_code' => 'PH'],\n            ['name' => 'Panauti', 'country_code' => 'NP'],\n            ['name' => 'Danvers', 'country_code' => 'US'],\n            ['name' => 'Tupanatinga', 'country_code' => 'BR'],\n            ['name' => 'Sao Miguel do Iguacu', 'country_code' => 'BR'],\n            ['name' => 'Stratford-upon-Avon', 'country_code' => 'GB'],\n            ['name' => 'Tortona', 'country_code' => 'IT'],\n            ['name' => 'Milton', 'country_code' => 'US'],\n            ['name' => 'Molins de Rey', 'country_code' => 'ES'],\n            ['name' => 'Tongyangdao', 'country_code' => 'CN'],\n            ['name' => 'Spring', 'country_code' => 'US'],\n            ['name' => 'Whitehall', 'country_code' => 'US'],\n            ['name' => 'Piracuruca', 'country_code' => 'BR'],\n            ['name' => 'Lapao', 'country_code' => 'BR'],\n            ['name' => 'Jaszbereny', 'country_code' => 'HU'],\n            ['name' => 'Neptune', 'country_code' => 'US'],\n            ['name' => 'Neckarsulm', 'country_code' => 'DE'],\n            ['name' => 'Niimi', 'country_code' => 'JP'],\n            ['name' => 'Ciudad Bolivar', 'country_code' => 'CO'],\n            ['name' => 'Miguel Calmon', 'country_code' => 'BR'],\n            ['name' => 'Haiyang', 'country_code' => 'CN'],\n            ['name' => 'Almazora', 'country_code' => 'ES'],\n            ['name' => 'Buenavista', 'country_code' => 'PH'],\n            ['name' => 'Geilenkirchen', 'country_code' => 'DE'],\n            ['name' => 'Bidur', 'country_code' => 'NP'],\n            ['name' => 'Ipsala', 'country_code' => 'TR'],\n            ['name' => 'Santa Rita do Passa Quatro', 'country_code' => 'BR'],\n            ['name' => 'Placer', 'country_code' => 'PH'],\n            ['name' => 'Ashford', 'country_code' => 'GB'],\n            ['name' => 'Gawler', 'country_code' => 'AU'],\n            ['name' => 'Statesville', 'country_code' => 'US'],\n            ['name' => 'Kathu', 'country_code' => 'TH'],\n            ['name' => 'Repelon', 'country_code' => 'CO'],\n            ['name' => 'Verkhniy Ufaley', 'country_code' => 'RU'],\n            ['name' => 'Terlizzi', 'country_code' => 'IT'],\n            ['name' => 'Gloversville', 'country_code' => 'US'],\n            ['name' => 'Miramas', 'country_code' => 'FR'],\n            ['name' => 'Rambouillet', 'country_code' => 'FR'],\n            ['name' => 'Chillan Viejo', 'country_code' => 'CL'],\n            ['name' => 'Campos Sales', 'country_code' => 'BR'],\n            ['name' => 'Gladstone', 'country_code' => 'US'],\n            ['name' => 'Pilar', 'country_code' => 'PH'],\n            ['name' => 'Deer Park', 'country_code' => 'US'],\n            ['name' => 'Sola', 'country_code' => 'NO'],\n            ['name' => 'Bo ao', 'country_code' => 'CN'],\n            ['name' => 'Kedu', 'country_code' => 'CN'],\n            ['name' => 'Reina Mercedes Viejo', 'country_code' => 'PH'],\n            ['name' => 'East Grinstead', 'country_code' => 'GB'],\n            ['name' => 'Longdian', 'country_code' => 'CN'],\n            ['name' => 'Fremont', 'country_code' => 'US'],\n            ['name' => 'Queensbury', 'country_code' => 'US'],\n            ['name' => 'Laranjal Paulista', 'country_code' => 'BR'],\n            ['name' => 'Rheinbach', 'country_code' => 'DE'],\n            ['name' => 'Garfield Heights', 'country_code' => 'US'],\n            ['name' => 'Maryborough', 'country_code' => 'AU'],\n            ['name' => 'Seneca', 'country_code' => 'US'],\n            ['name' => 'Barcelos', 'country_code' => 'BR'],\n            ['name' => 'Vimercate', 'country_code' => 'IT'],\n            ['name' => 'Overath', 'country_code' => 'DE'],\n            ['name' => 'Mabini', 'country_code' => 'PH'],\n            ['name' => 'Zempoala', 'country_code' => 'MX'],\n            ['name' => 'Florence', 'country_code' => 'US'],\n            ['name' => 'Thatcham', 'country_code' => 'GB'],\n            ['name' => 'Bayonet Point', 'country_code' => 'US'],\n            ['name' => 'Klosterneuburg', 'country_code' => 'AT'],\n            ['name' => 'Zhongshan', 'country_code' => 'CN'],\n            ['name' => 'Bakhchysarai', 'country_code' => 'UA'],\n            ['name' => 'Lansing', 'country_code' => 'US'],\n            ['name' => 'Drimmelen', 'country_code' => 'NL'],\n            ['name' => 'San Luis', 'country_code' => 'PH'],\n            ['name' => 'Aschersleben', 'country_code' => 'DE'],\n            ['name' => 'Huaquechula', 'country_code' => 'MX'],\n            ['name' => 'Millville', 'country_code' => 'US'],\n            ['name' => 'Monroeville', 'country_code' => 'US'],\n            ['name' => 'Tall Rif at', 'country_code' => 'SY'],\n            ['name' => 'Forquilhinha', 'country_code' => 'BR'],\n            ['name' => 'Saint-Constant', 'country_code' => 'CA'],\n            ['name' => 'Valencia', 'country_code' => 'PH'],\n            ['name' => 'Badiangan', 'country_code' => 'PH'],\n            ['name' => 'St. Helens', 'country_code' => 'US'],\n            ['name' => 'Ban Phonla Krang', 'country_code' => 'TH'],\n            ['name' => 'Stafford', 'country_code' => 'US'],\n            ['name' => 'Lapuyan', 'country_code' => 'PH'],\n            ['name' => 'Pitogo', 'country_code' => 'PH'],\n            ['name' => 'Lunel', 'country_code' => 'FR'],\n            ['name' => 'Orvault', 'country_code' => 'FR'],\n            ['name' => 'Sibinal', 'country_code' => 'GT'],\n            ['name' => 'Castro Alves', 'country_code' => 'BR'],\n            ['name' => 'Ixchiguan', 'country_code' => 'GT'],\n            ['name' => 'Atitalaquia', 'country_code' => 'MX'],\n            ['name' => 'Vicar', 'country_code' => 'ES'],\n            ['name' => 'Enna', 'country_code' => 'IT'],\n            ['name' => 'Grimsby', 'country_code' => 'CA'],\n            ['name' => 'Teutonia', 'country_code' => 'BR'],\n            ['name' => 'Bergerac', 'country_code' => 'FR'],\n            ['name' => 'La Oliva', 'country_code' => 'ES'],\n            ['name' => 'Tepehuacan de Guerrero', 'country_code' => 'MX'],\n            ['name' => 'Albignasego', 'country_code' => 'IT'],\n            ['name' => 'Puerto Colombia', 'country_code' => 'CO'],\n            ['name' => 'New Windsor', 'country_code' => 'US'],\n            ['name' => 'Gonesse', 'country_code' => 'FR'],\n            ['name' => 'Heiligenhaus', 'country_code' => 'DE'],\n            ['name' => 'Aalten', 'country_code' => 'NL'],\n            ['name' => 'El Alia', 'country_code' => 'TN'],\n            ['name' => 'Cangas', 'country_code' => 'ES'],\n            ['name' => 'Conchal', 'country_code' => 'BR'],\n            ['name' => 'Pombos', 'country_code' => 'BR'],\n            ['name' => 'San Giovanni Rotondo', 'country_code' => 'IT'],\n            ['name' => 'Santana', 'country_code' => 'BR'],\n            ['name' => 'Henin-Beaumont', 'country_code' => 'FR'],\n            ['name' => 'Santo Nino', 'country_code' => 'PH'],\n            ['name' => 'Horn Lake', 'country_code' => 'US'],\n            ['name' => 'San Juan de Uraba', 'country_code' => 'CO'],\n            ['name' => 'Itapissuma', 'country_code' => 'BR'],\n            ['name' => 'Candelaria', 'country_code' => 'PH'],\n            ['name' => 'Pereyaslav-Khmel nyts kyy', 'country_code' => 'UA'],\n            ['name' => 'Sebes', 'country_code' => 'RO'],\n            ['name' => 'Chivasso', 'country_code' => 'IT'],\n            ['name' => 'Estarreja', 'country_code' => 'PT'],\n            ['name' => 'East Windsor', 'country_code' => 'US'],\n            ['name' => 'Miracema', 'country_code' => 'BR'],\n            ['name' => 'Prior Lake', 'country_code' => 'US'],\n            ['name' => 'Jardim', 'country_code' => 'BR'],\n            ['name' => 'Caboolture', 'country_code' => 'AU'],\n            ['name' => 'Santa Eugenia', 'country_code' => 'ES'],\n            ['name' => 'Scicli', 'country_code' => 'IT'],\n            ['name' => 'Huntley', 'country_code' => 'US'],\n            ['name' => 'Niscemi', 'country_code' => 'IT'],\n            ['name' => 'Galatina', 'country_code' => 'IT'],\n            ['name' => 'Cavaillon', 'country_code' => 'FR'],\n            ['name' => 'Kolambugan', 'country_code' => 'PH'],\n            ['name' => 'Qingshan', 'country_code' => 'CN'],\n            ['name' => 'Maple Valley', 'country_code' => 'US'],\n            ['name' => 'San Agustin Tlaxiaca', 'country_code' => 'MX'],\n            ['name' => 'Vilyeyka', 'country_code' => 'BY'],\n            ['name' => 'Mundo Novo', 'country_code' => 'BR'],\n            ['name' => 'Xalatlaco', 'country_code' => 'MX'],\n            ['name' => 'Fidenza', 'country_code' => 'IT'],\n            ['name' => 'Willebroek', 'country_code' => 'BE'],\n            ['name' => 'Porto da Folha', 'country_code' => 'BR'],\n            ['name' => 'Oak Forest', 'country_code' => 'US'],\n            ['name' => 'Schloss Holte-Stukenbrock', 'country_code' => 'DE'],\n            ['name' => 'Mayskiy', 'country_code' => 'RU'],\n            ['name' => 'Pemberton', 'country_code' => 'US'],\n            ['name' => 'Glen Cove', 'country_code' => 'US'],\n            ['name' => 'Ermelo', 'country_code' => 'NL'],\n            ['name' => 'Liqizhuang', 'country_code' => 'CN'],\n            ['name' => 'Gradignan', 'country_code' => 'FR'],\n            ['name' => 'Werkendam', 'country_code' => 'NL'],\n            ['name' => 'Wangen im Allgau', 'country_code' => 'DE'],\n            ['name' => 'Szentes', 'country_code' => 'HU'],\n            ['name' => 'Sao Joaquim', 'country_code' => 'BR'],\n            ['name' => 'Sikonge', 'country_code' => 'TZ'],\n            ['name' => 'Sens', 'country_code' => 'FR'],\n            ['name' => 'Kiskunhalas', 'country_code' => 'HU'],\n            ['name' => 'Saumur', 'country_code' => 'FR'],\n            ['name' => 'Ubata', 'country_code' => 'BR'],\n            ['name' => 'Ksebia', 'country_code' => 'MA'],\n            ['name' => 'Shoreview', 'country_code' => 'US'],\n            ['name' => 'Assemini', 'country_code' => 'IT'],\n            ['name' => 'Windsor', 'country_code' => 'US'],\n            ['name' => 'Sterling', 'country_code' => 'US'],\n            ['name' => 'Poona-Piagapo', 'country_code' => 'PH'],\n            ['name' => 'Garchitorena', 'country_code' => 'PH'],\n            ['name' => 'Montbeliard', 'country_code' => 'FR'],\n            ['name' => 'Hennigsdorf', 'country_code' => 'DE'],\n            ['name' => 'Dodge City', 'country_code' => 'US'],\n            ['name' => 'Ronse', 'country_code' => 'BE'],\n            ['name' => 'Unisan', 'country_code' => 'PH'],\n            ['name' => 'Tlaxcoapan', 'country_code' => 'MX'],\n            ['name' => 'Sol -Iletsk', 'country_code' => 'RU'],\n            ['name' => 'San Pedro del Pinatar', 'country_code' => 'ES'],\n            ['name' => 'Colleyville', 'country_code' => 'US'],\n            ['name' => 'Wilmette', 'country_code' => 'US'],\n            ['name' => 'Plum', 'country_code' => 'US'],\n            ['name' => 'Bernards', 'country_code' => 'US'],\n            ['name' => 'Mount Pleasant', 'country_code' => 'US'],\n            ['name' => 'Libenge', 'country_code' => 'CD'],\n            ['name' => 'Sabanilla', 'country_code' => 'MX'],\n            ['name' => 'Belo Oriente', 'country_code' => 'BR'],\n            ['name' => 'Falconara Marittima', 'country_code' => 'IT'],\n            ['name' => 'Pamidi', 'country_code' => 'IN'],\n            ['name' => 'Itamaraca', 'country_code' => 'BR'],\n            ['name' => 'Amatepec', 'country_code' => 'MX'],\n            ['name' => 'Laranjeiras', 'country_code' => 'BR'],\n            ['name' => 'Ruzomberok', 'country_code' => 'SK'],\n            ['name' => 'McHenry', 'country_code' => 'US'],\n            ['name' => 'Lohne', 'country_code' => 'DE'],\n            ['name' => 'Kazincbarcika', 'country_code' => 'HU'],\n            ['name' => 'Waterville', 'country_code' => 'US'],\n            ['name' => 'Bagac', 'country_code' => 'PH'],\n            ['name' => 'Mesagne', 'country_code' => 'IT'],\n            ['name' => 'Szentendre', 'country_code' => 'HU'],\n            ['name' => 'Jiangdi', 'country_code' => 'CN'],\n            ['name' => 'Walcz', 'country_code' => 'PL'],\n            ['name' => 'Quarrata', 'country_code' => 'IT'],\n            ['name' => 'Norfolk', 'country_code' => 'US'],\n            ['name' => 'Zuitou', 'country_code' => 'CN'],\n            ['name' => 'Shaker Heights', 'country_code' => 'US'],\n            ['name' => 'Citrus Park', 'country_code' => 'US'],\n            ['name' => 'Boquim', 'country_code' => 'BR'],\n            ['name' => 'Tarui', 'country_code' => 'JP'],\n            ['name' => 'Teltow', 'country_code' => 'DE'],\n            ['name' => 'Marcos Juarez', 'country_code' => 'AR'],\n            ['name' => 'New Milford', 'country_code' => 'US'],\n            ['name' => 'Erie', 'country_code' => 'US'],\n            ['name' => 'Brownsburg', 'country_code' => 'US'],\n            ['name' => 'Sanharo', 'country_code' => 'BR'],\n            ['name' => 'Wakefield', 'country_code' => 'US'],\n            ['name' => 'Sao Sebastiao da Boa Vista', 'country_code' => 'BR'],\n            ['name' => 'Mainit', 'country_code' => 'PH'],\n            ['name' => 'Chaska', 'country_code' => 'US'],\n            ['name' => 'Aripuana', 'country_code' => 'BR'],\n            ['name' => 'Strausberg', 'country_code' => 'DE'],\n            ['name' => 'Ilchester', 'country_code' => 'US'],\n            ['name' => 'Shelby', 'country_code' => 'US'],\n            ['name' => 'Noicattaro', 'country_code' => 'IT'],\n            ['name' => 'Karpinsk', 'country_code' => 'RU'],\n            ['name' => 'Uyuni', 'country_code' => 'BO'],\n            ['name' => 'Taquari', 'country_code' => 'BR'],\n            ['name' => 'Lauf', 'country_code' => 'DE'],\n            ['name' => 'Maryland Heights', 'country_code' => 'US'],\n            ['name' => 'Kamyshlov', 'country_code' => 'RU'],\n            ['name' => 'Magna', 'country_code' => 'US'],\n            ['name' => 'Pontecagnano', 'country_code' => 'IT'],\n            ['name' => 'Xenia', 'country_code' => 'US'],\n            ['name' => 'Putignano', 'country_code' => 'IT'],\n            ['name' => 'Allen Park', 'country_code' => 'US'],\n            ['name' => 'Chuimatan', 'country_code' => 'CN'],\n            ['name' => 'Khanabad', 'country_code' => 'AF'],\n            ['name' => 'Balabagan', 'country_code' => 'PH'],\n            ['name' => 'Mason City', 'country_code' => 'US'],\n            ['name' => 'Hancun', 'country_code' => 'CN'],\n            ['name' => 'New Lenox', 'country_code' => 'US'],\n            ['name' => 'Batalha', 'country_code' => 'BR'],\n            ['name' => 'Jaltenco', 'country_code' => 'MX'],\n            ['name' => 'Pinarbasi', 'country_code' => 'TR'],\n            ['name' => 'Hanahan', 'country_code' => 'US'],\n            ['name' => 'Cartama', 'country_code' => 'ES'],\n            ['name' => 'Karasuk', 'country_code' => 'RU'],\n            ['name' => 'Iglesias', 'country_code' => 'IT'],\n            ['name' => 'Padada', 'country_code' => 'PH'],\n            ['name' => 'Hamminkeln', 'country_code' => 'DE'],\n            ['name' => 'Lier', 'country_code' => 'NO'],\n            ['name' => 'Dongen', 'country_code' => 'NL'],\n            ['name' => 'Tibiao', 'country_code' => 'PH'],\n            ['name' => 'Burdeos', 'country_code' => 'PH'],\n            ['name' => 'Kinston', 'country_code' => 'US'],\n            ['name' => 'Searcy', 'country_code' => 'US'],\n            ['name' => 'Flemalle-Haute', 'country_code' => 'BE'],\n            ['name' => 'Fern Down', 'country_code' => 'GB'],\n            ['name' => 'Boisbriand', 'country_code' => 'CA'],\n            ['name' => 'Brzozow', 'country_code' => 'PL'],\n            ['name' => 'Miyanaga', 'country_code' => 'JP'],\n            ['name' => 'Majagua', 'country_code' => 'CU'],\n            ['name' => 'Candido Sales', 'country_code' => 'BR'],\n            ['name' => 'Pacasmayo', 'country_code' => 'PE'],\n            ['name' => 'Tamorot', 'country_code' => 'MA'],\n            ['name' => 'Shangxiao', 'country_code' => 'CN'],\n            ['name' => 'Olindina', 'country_code' => 'BR'],\n            ['name' => 'Ipixuna', 'country_code' => 'BR'],\n            ['name' => 'New London', 'country_code' => 'US'],\n            ['name' => 'Jinju', 'country_code' => 'CN'],\n            ['name' => 'Lamego', 'country_code' => 'PT'],\n            ['name' => 'Nossa Senhora das Dores', 'country_code' => 'BR'],\n            ['name' => 'West Islip', 'country_code' => 'US'],\n            ['name' => 'Reserva', 'country_code' => 'BR'],\n            ['name' => 'Ramon Magsaysay', 'country_code' => 'PH'],\n            ['name' => 'Bafoulabe', 'country_code' => 'ML'],\n            ['name' => 'Sofiyivs ka Borshchahivka', 'country_code' => 'UA'],\n            ['name' => 'Sabaa Aiyoun', 'country_code' => 'MA'],\n            ['name' => 'Solanea', 'country_code' => 'BR'],\n            ['name' => 'Rijssen', 'country_code' => 'NL'],\n            ['name' => 'Fortul', 'country_code' => 'CO'],\n            ['name' => 'San Juan', 'country_code' => 'PH'],\n            ['name' => 'Monreal', 'country_code' => 'PH'],\n            ['name' => 'West Chicago', 'country_code' => 'US'],\n            ['name' => 'Dyatkovo', 'country_code' => 'RU'],\n            ['name' => 'Nepomuceno', 'country_code' => 'BR'],\n            ['name' => 'Sliedrecht', 'country_code' => 'NL'],\n            ['name' => 'Goianinha', 'country_code' => 'BR'],\n            ['name' => 'Santa Josefa', 'country_code' => 'PH'],\n            ['name' => 'Novoaleksandrovsk', 'country_code' => 'RU'],\n            ['name' => 'Saint-Dizier', 'country_code' => 'FR'],\n            ['name' => 'Santa Helena', 'country_code' => 'BR'],\n            ['name' => 'Codajas', 'country_code' => 'BR'],\n            ['name' => 'Los Cordobas', 'country_code' => 'CO'],\n            ['name' => 'Santeramo in Colle', 'country_code' => 'IT'],\n            ['name' => 'Obertshausen', 'country_code' => 'DE'],\n            ['name' => 'Francavilla al Mare', 'country_code' => 'IT'],\n            ['name' => 'Semiluki', 'country_code' => 'RU'],\n            ['name' => 'Springettsbury', 'country_code' => 'US'],\n            ['name' => 'McDonough', 'country_code' => 'US'],\n            ['name' => 'Mariano Comense', 'country_code' => 'IT'],\n            ['name' => 'Chuanliaocun', 'country_code' => 'CN'],\n            ['name' => 'Morales', 'country_code' => 'CO'],\n            ['name' => 'Montreux', 'country_code' => 'CH'],\n            ['name' => 'La Garde', 'country_code' => 'FR'],\n            ['name' => 'Piracaia', 'country_code' => 'BR'],\n            ['name' => 'General Luna', 'country_code' => 'PH'],\n            ['name' => 'Ragan Sur', 'country_code' => 'PH'],\n            ['name' => 'San Isidro', 'country_code' => 'PH'],\n            ['name' => 'Narasannapeta', 'country_code' => 'IN'],\n            ['name' => 'Polysayevo', 'country_code' => 'RU'],\n            ['name' => 'West Linn', 'country_code' => 'US'],\n            ['name' => 'Weiterstadt', 'country_code' => 'DE'],\n            ['name' => 'Basay', 'country_code' => 'PH'],\n            ['name' => 'Cortland', 'country_code' => 'US'],\n            ['name' => 'Lemoore', 'country_code' => 'US'],\n            ['name' => 'Alvin', 'country_code' => 'US'],\n            ['name' => 'Bushey', 'country_code' => 'GB'],\n            ['name' => 'Corrente', 'country_code' => 'BR'],\n            ['name' => 'Kauswagan', 'country_code' => 'PH'],\n            ['name' => 'Kirzhach', 'country_code' => 'RU'],\n            ['name' => 'Ocean', 'country_code' => 'US'],\n            ['name' => 'Brasileia', 'country_code' => 'BR'],\n            ['name' => 'Tubize', 'country_code' => 'BE'],\n            ['name' => 'Kiruna', 'country_code' => 'SE'],\n            ['name' => 'Nova Zagora', 'country_code' => 'BG'],\n            ['name' => 'Yuanyangzhen', 'country_code' => 'CN'],\n            ['name' => 'Hohen Neuendorf', 'country_code' => 'DE'],\n            ['name' => 'Husi', 'country_code' => 'RO'],\n            ['name' => 'Waynesboro', 'country_code' => 'US'],\n            ['name' => 'Krasnoarmeysk', 'country_code' => 'RU'],\n            ['name' => 'Betong', 'country_code' => 'TH'],\n            ['name' => 'Nova Esperanca', 'country_code' => 'BR'],\n            ['name' => 'Talisay', 'country_code' => 'PH'],\n            ['name' => 'Sosnogorsk', 'country_code' => 'RU'],\n            ['name' => 'Segezha', 'country_code' => 'RU'],\n            ['name' => 'San Giovanni Lupatoto', 'country_code' => 'IT'],\n            ['name' => 'Marshalltown', 'country_code' => 'US'],\n            ['name' => 'Lebanon', 'country_code' => 'US'],\n            ['name' => 'Planalto', 'country_code' => 'BR'],\n            ['name' => 'Wappinger', 'country_code' => 'US'],\n            ['name' => 'Lower Providence', 'country_code' => 'US'],\n            ['name' => 'Thomasville', 'country_code' => 'US'],\n            ['name' => 'Unterhaching', 'country_code' => 'DE'],\n            ['name' => 'Macka', 'country_code' => 'TR'],\n            ['name' => 'Goias', 'country_code' => 'BR'],\n            ['name' => 'Temple Terrace', 'country_code' => 'US'],\n            ['name' => 'Lafayette', 'country_code' => 'US'],\n            ['name' => 'Wassenaar', 'country_code' => 'NL'],\n            ['name' => 'Coulsdon', 'country_code' => 'GB'],\n            ['name' => 'Veranopolis', 'country_code' => 'BR'],\n            ['name' => 'Coracao de Jesus', 'country_code' => 'BR'],\n            ['name' => 'Falticeni', 'country_code' => 'RO'],\n            ['name' => 'Az Zabadani', 'country_code' => 'SY'],\n            ['name' => 'Dalnerechensk', 'country_code' => 'RU'],\n            ['name' => 'San Benito Abad', 'country_code' => 'CO'],\n            ['name' => 'Norco', 'country_code' => 'US'],\n            ['name' => 'Pirapozinho', 'country_code' => 'BR'],\n            ['name' => 'Immokalee', 'country_code' => 'US'],\n            ['name' => 'San Alberto', 'country_code' => 'CO'],\n            ['name' => 'Kirovsk', 'country_code' => 'RU'],\n            ['name' => 'Khadbari', 'country_code' => 'NP'],\n            ['name' => 'Bolkhov', 'country_code' => 'RU'],\n            ['name' => 'As Sanamayn', 'country_code' => 'SY'],\n            ['name' => 'Shalqar', 'country_code' => 'KZ'],\n            ['name' => 'Hermanus', 'country_code' => 'ZA'],\n            ['name' => 'Dois Corregos', 'country_code' => 'BR'],\n            ['name' => 'Muhlacker', 'country_code' => 'DE'],\n            ['name' => 'Severouralsk', 'country_code' => 'RU'],\n            ['name' => 'San Antonio del Sur', 'country_code' => 'CU'],\n            ['name' => 'Santa Margarita', 'country_code' => 'PH'],\n            ['name' => 'Congleton', 'country_code' => 'GB'],\n            ['name' => 'Cesenatico', 'country_code' => 'IT'],\n            ['name' => 'La Union', 'country_code' => 'CL'],\n            ['name' => 'Valdagno', 'country_code' => 'IT'],\n            ['name' => 'Traralgon', 'country_code' => 'AU'],\n            ['name' => 'Heppenheim', 'country_code' => 'DE'],\n            ['name' => 'Vernon Hills', 'country_code' => 'US'],\n            ['name' => 'Zhaicun', 'country_code' => 'CN'],\n            ['name' => 'Sao Joao Nepomuceno', 'country_code' => 'BR'],\n            ['name' => 'Pearl', 'country_code' => 'US'],\n            ['name' => 'Paracuellos de Jarama', 'country_code' => 'ES'],\n            ['name' => 'Sao Bernardo', 'country_code' => 'BR'],\n            ['name' => 'Bethany', 'country_code' => 'US'],\n            ['name' => 'Vila Rica', 'country_code' => 'BR'],\n            ['name' => 'Senador Pompeu', 'country_code' => 'BR'],\n            ['name' => 'Tabira', 'country_code' => 'BR'],\n            ['name' => 'Nordenham', 'country_code' => 'DE'],\n            ['name' => 'Marquette', 'country_code' => 'US'],\n            ['name' => 'Horsham', 'country_code' => 'US'],\n            ['name' => 'Zirndorf', 'country_code' => 'DE'],\n            ['name' => 'Oltenita', 'country_code' => 'RO'],\n            ['name' => 'Iesolo', 'country_code' => 'IT'],\n            ['name' => 'Sedalia', 'country_code' => 'US'],\n            ['name' => 'Bessemer', 'country_code' => 'US'],\n            ['name' => 'Oisterwijk', 'country_code' => 'NL'],\n            ['name' => 'Balboa', 'country_code' => 'CO'],\n            ['name' => 'Plainview', 'country_code' => 'US'],\n            ['name' => 'Macrohon', 'country_code' => 'PH'],\n            ['name' => 'Migdal Ha Emeq', 'country_code' => 'IL'],\n            ['name' => 'Butzbach', 'country_code' => 'DE'],\n            ['name' => 'Selm', 'country_code' => 'DE'],\n            ['name' => 'Pati do Alferes', 'country_code' => 'BR'],\n            ['name' => 'Caririacu', 'country_code' => 'BR'],\n            ['name' => 'Oldbury', 'country_code' => 'GB'],\n            ['name' => 'Ocuilan de Arteaga', 'country_code' => 'MX'],\n            ['name' => 'Beuningen', 'country_code' => 'NL'],\n            ['name' => 'Liushuquan', 'country_code' => 'CN'],\n            ['name' => 'Ait Faska', 'country_code' => 'MA'],\n            ['name' => 'Canarana', 'country_code' => 'BR'],\n            ['name' => 'Sangerhausen', 'country_code' => 'DE'],\n            ['name' => 'New Milton', 'country_code' => 'GB'],\n            ['name' => 'Vignola', 'country_code' => 'IT'],\n            ['name' => 'Batavia', 'country_code' => 'US'],\n            ['name' => 'Topol cany', 'country_code' => 'SK'],\n            ['name' => 'Kirovsk', 'country_code' => 'RU'],\n            ['name' => 'Garden City', 'country_code' => 'US'],\n            ['name' => 'Ehingen an der Donau', 'country_code' => 'DE'],\n            ['name' => 'West Milford', 'country_code' => 'US'],\n            ['name' => 'Lilancheng', 'country_code' => 'CN'],\n            ['name' => 'Pensilvania', 'country_code' => 'CO'],\n            ['name' => 'Chanhassen', 'country_code' => 'US'],\n            ['name' => 'Santo Tomas', 'country_code' => 'SV'],\n            ['name' => 'Aurillac', 'country_code' => 'FR'],\n            ['name' => 'Jarocin', 'country_code' => 'PL'],\n            ['name' => 'Ilha Solteira', 'country_code' => 'BR'],\n            ['name' => 'Daventry', 'country_code' => 'GB'],\n            ['name' => 'Sacramento', 'country_code' => 'BR'],\n            ['name' => 'Palanas', 'country_code' => 'PH'],\n            ['name' => 'Conversano', 'country_code' => 'IT'],\n            ['name' => 'Dimasalang', 'country_code' => 'PH'],\n            ['name' => 'Bourdoud', 'country_code' => 'MA'],\n            ['name' => 'Sumperk', 'country_code' => 'CZ'],\n            ['name' => 'Termini Imerese', 'country_code' => 'IT'],\n            ['name' => 'Arzignano', 'country_code' => 'IT'],\n            ['name' => 'Cabot', 'country_code' => 'US'],\n            ['name' => 'Bad Honnef am Rhein', 'country_code' => 'DE'],\n            ['name' => 'Pukekohe East', 'country_code' => 'NZ'],\n            ['name' => 'Ludwigsfelde', 'country_code' => 'DE'],\n            ['name' => 'Shuanghe', 'country_code' => 'CN'],\n            ['name' => 'Kalfou', 'country_code' => 'CM'],\n            ['name' => 'Cuart de Poblet', 'country_code' => 'ES'],\n            ['name' => 'Vicksburg', 'country_code' => 'US'],\n            ['name' => 'Bangzha', 'country_code' => 'CN'],\n            ['name' => 'Karoi', 'country_code' => 'ZW'],\n            ['name' => 'Bingen am Rhein', 'country_code' => 'DE'],\n            ['name' => 'Itaiba', 'country_code' => 'BR'],\n            ['name' => 'Sora', 'country_code' => 'IT'],\n            ['name' => 'Kluczbork', 'country_code' => 'PL'],\n            ['name' => 'Lauaan', 'country_code' => 'PH'],\n            ['name' => 'Upper Dublin', 'country_code' => 'US'],\n            ['name' => 'Leon Postigo', 'country_code' => 'PH'],\n            ['name' => 'Alitagtag', 'country_code' => 'PH'],\n            ['name' => 'Dengjiazhuang', 'country_code' => 'CN'],\n            ['name' => 'Schleswig', 'country_code' => 'DE'],\n            ['name' => 'Ayorou', 'country_code' => 'NE'],\n            ['name' => 'Tarragona', 'country_code' => 'PH'],\n            ['name' => 'Farafangana', 'country_code' => 'MG'],\n            ['name' => 'Brawley', 'country_code' => 'US'],\n            ['name' => 'Bouknadel', 'country_code' => 'MA'],\n            ['name' => 'Geretsried', 'country_code' => 'DE'],\n            ['name' => 'Neenah', 'country_code' => 'US'],\n            ['name' => 'Perevalsk', 'country_code' => 'UA'],\n            ['name' => 'Boureit', 'country_code' => 'MA'],\n            ['name' => 'Snoqualmie', 'country_code' => 'US'],\n            ['name' => 'Quipapa', 'country_code' => 'BR'],\n            ['name' => 'Montemor-o-Velho', 'country_code' => 'PT'],\n            ['name' => 'Labytnangi', 'country_code' => 'RU'],\n            ['name' => 'Buesaco', 'country_code' => 'CO'],\n            ['name' => 'Troy', 'country_code' => 'US'],\n            ['name' => 'San Pablo', 'country_code' => 'PH'],\n            ['name' => 'Hercules', 'country_code' => 'US'],\n            ['name' => 'Mahwah', 'country_code' => 'US'],\n            ['name' => 'Scandiano', 'country_code' => 'IT'],\n            ['name' => 'Semirom', 'country_code' => 'IR'],\n            ['name' => 'Lake City', 'country_code' => 'US'],\n            ['name' => 'Astorga', 'country_code' => 'BR'],\n            ['name' => 'Bishop Auckland', 'country_code' => 'GB'],\n            ['name' => 'Magarao', 'country_code' => 'PH'],\n            ['name' => 'Colotenango', 'country_code' => 'GT'],\n            ['name' => 'Paramus', 'country_code' => 'US'],\n            ['name' => 'Lindau', 'country_code' => 'DE'],\n            ['name' => 'Elefsina', 'country_code' => 'GR'],\n            ['name' => 'Okeechobee', 'country_code' => 'US'],\n            ['name' => 'Lanaken', 'country_code' => 'BE'],\n            ['name' => 'Jardim', 'country_code' => 'BR'],\n            ['name' => 'Vierzon', 'country_code' => 'FR'],\n            ['name' => 'Paz de Ariporo', 'country_code' => 'CO'],\n            ['name' => 'Almunecar', 'country_code' => 'ES'],\n            ['name' => 'Khashuri', 'country_code' => 'GE'],\n            ['name' => 'Malyn', 'country_code' => 'UA'],\n            ['name' => 'Sasovo', 'country_code' => 'RU'],\n            ['name' => 'North Kingstown', 'country_code' => 'US'],\n            ['name' => 'Dongfeng', 'country_code' => 'CN'],\n            ['name' => 'Swiecie', 'country_code' => 'PL'],\n            ['name' => 'Vsetin', 'country_code' => 'CZ'],\n            ['name' => 'San Lucas Sacatepequez', 'country_code' => 'GT'],\n            ['name' => 'La Teste-de-Buch', 'country_code' => 'FR'],\n            ['name' => 'Baleno', 'country_code' => 'PH'],\n            ['name' => 'Conde', 'country_code' => 'BR'],\n            ['name' => 'Xishan', 'country_code' => 'CN'],\n            ['name' => 'Haoping', 'country_code' => 'CN'],\n            ['name' => 'Wilmslow', 'country_code' => 'GB'],\n            ['name' => 'Tavira', 'country_code' => 'PT'],\n            ['name' => 'Yuanchang', 'country_code' => 'TW'],\n            ['name' => 'Conception Bay South', 'country_code' => 'CA'],\n            ['name' => 'Pfaffenhofen', 'country_code' => 'DE'],\n            ['name' => 'Castel Volturno', 'country_code' => 'IT'],\n            ['name' => 'Independencia', 'country_code' => 'BR'],\n            ['name' => 'Kulmbach', 'country_code' => 'DE'],\n            ['name' => 'Sao Sebastiao do Cai', 'country_code' => 'BR'],\n            ['name' => 'Lice', 'country_code' => 'TR'],\n            ['name' => 'Cujubim', 'country_code' => 'BR'],\n            ['name' => 'Iacu', 'country_code' => 'BR'],\n            ['name' => 'Puerto Varas', 'country_code' => 'CL'],\n            ['name' => 'Muchamiel', 'country_code' => 'ES'],\n            ['name' => 'Uherske Hradiste', 'country_code' => 'CZ'],\n            ['name' => 'Guarai', 'country_code' => 'BR'],\n            ['name' => 'Aracoiaba', 'country_code' => 'BR'],\n            ['name' => 'Wetteren', 'country_code' => 'BE'],\n            ['name' => 'Wethersfield', 'country_code' => 'US'],\n            ['name' => 'Muscatine', 'country_code' => 'US'],\n            ['name' => 'Palmar de Varela', 'country_code' => 'CO'],\n            ['name' => 'Novopavlovsk', 'country_code' => 'RU'],\n            ['name' => 'Boone', 'country_code' => 'US'],\n            ['name' => 'Itapuranga', 'country_code' => 'BR'],\n            ['name' => 'Moscow', 'country_code' => 'US'],\n            ['name' => 'Oum Hadjer', 'country_code' => 'TD'],\n            ['name' => 'Toktogul', 'country_code' => 'KG'],\n            ['name' => 'Tacaratu', 'country_code' => 'BR'],\n            ['name' => 'Santiago Papasquiaro', 'country_code' => 'MX'],\n            ['name' => 'Sebastian', 'country_code' => 'US'],\n            ['name' => 'Northport', 'country_code' => 'US'],\n            ['name' => 'Helmstedt', 'country_code' => 'DE'],\n            ['name' => 'Mizdah', 'country_code' => 'LY'],\n            ['name' => 'San Manuel', 'country_code' => 'PH'],\n            ['name' => 'Saint-Bruno-de-Montarville', 'country_code' => 'CA'],\n            ['name' => 'Queimadas', 'country_code' => 'BR'],\n            ['name' => 'Natchez', 'country_code' => 'US'],\n            ['name' => 'Zacualtipan', 'country_code' => 'MX'],\n            ['name' => 'Sankt Wendel', 'country_code' => 'DE'],\n            ['name' => 'Conner', 'country_code' => 'PH'],\n            ['name' => 'Winchester', 'country_code' => 'US'],\n            ['name' => 'Odemira', 'country_code' => 'PT'],\n            ['name' => 'Novelda', 'country_code' => 'ES'],\n            ['name' => 'Aparecida do Taboado', 'country_code' => 'BR'],\n            ['name' => 'Zarraga', 'country_code' => 'PH'],\n            ['name' => 'Twentynine Palms', 'country_code' => 'US'],\n            ['name' => 'Roseto degli Abruzzi', 'country_code' => 'IT'],\n            ['name' => 'Sapian', 'country_code' => 'PH'],\n            ['name' => 'Itai', 'country_code' => 'BR'],\n            ['name' => 'Holt', 'country_code' => 'US'],\n            ['name' => 'Stein', 'country_code' => 'NL'],\n            ['name' => 'Zavodoukovsk', 'country_code' => 'RU'],\n            ['name' => 'Traun', 'country_code' => 'AT'],\n            ['name' => 'Duiven', 'country_code' => 'NL'],\n            ['name' => 'Puerto Piritu', 'country_code' => 'VE'],\n            ['name' => 'East St. Louis', 'country_code' => 'US'],\n            ['name' => 'Sachse', 'country_code' => 'US'],\n            ['name' => 'Montgomery', 'country_code' => 'US'],\n            ['name' => 'Tinipuka', 'country_code' => 'ID'],\n            ['name' => 'Renedo', 'country_code' => 'ES'],\n            ['name' => 'Pandami', 'country_code' => 'PH'],\n            ['name' => 'Libourne', 'country_code' => 'FR'],\n            ['name' => 'Gaoya', 'country_code' => 'CN'],\n            ['name' => 'Nocera Superiore', 'country_code' => 'IT'],\n            ['name' => 'Sinait', 'country_code' => 'PH'],\n            ['name' => 'Friedrichsdorf', 'country_code' => 'DE'],\n            ['name' => 'South Ubian', 'country_code' => 'PH'],\n            ['name' => 'Montichiari', 'country_code' => 'IT'],\n            ['name' => 'Tamparan', 'country_code' => 'PH'],\n            ['name' => 'Diapaga', 'country_code' => 'BF'],\n            ['name' => 'Achern', 'country_code' => 'DE'],\n            ['name' => 'Saintes', 'country_code' => 'FR'],\n            ['name' => 'Jumilla', 'country_code' => 'ES'],\n            ['name' => 'Paris', 'country_code' => 'US'],\n            ['name' => 'Haines City', 'country_code' => 'US'],\n            ['name' => 'Blagnac', 'country_code' => 'FR'],\n            ['name' => 'Allen', 'country_code' => 'PH'],\n            ['name' => 'Salamina', 'country_code' => 'GR'],\n            ['name' => 'Cave Spring', 'country_code' => 'US'],\n            ['name' => 'Santo Antonio do Monte', 'country_code' => 'BR'],\n            ['name' => 'Quezon', 'country_code' => 'PH'],\n            ['name' => 'Correggio', 'country_code' => 'IT'],\n            ['name' => 'Caluquembe', 'country_code' => 'AO'],\n            ['name' => 'Istmina', 'country_code' => 'CO'],\n            ['name' => 'Magdalena', 'country_code' => 'PH'],\n            ['name' => 'Kimovsk', 'country_code' => 'RU'],\n            ['name' => 'Merrimack', 'country_code' => 'US'],\n            ['name' => 'Superior', 'country_code' => 'US'],\n            ['name' => 'Karlovo', 'country_code' => 'BG'],\n            ['name' => 'Maozhou', 'country_code' => 'CN'],\n            ['name' => 'Marmara Ereglisi', 'country_code' => 'TR'],\n            ['name' => 'Encruzilhada do Sul', 'country_code' => 'BR'],\n            ['name' => 'Pantelimon', 'country_code' => 'RO'],\n            ['name' => 'West Odessa', 'country_code' => 'US'],\n            ['name' => 'Alamos', 'country_code' => 'MX'],\n            ['name' => 'San Juan Ixcoy', 'country_code' => 'GT'],\n            ['name' => 'Medina', 'country_code' => 'US'],\n            ['name' => 'Conway', 'country_code' => 'US'],\n            ['name' => 'Santa Ana', 'country_code' => 'CO'],\n            ['name' => 'Dolores', 'country_code' => 'AR'],\n            ['name' => 'Barberton', 'country_code' => 'US'],\n            ['name' => 'Espanola', 'country_code' => 'US'],\n            ['name' => 'Koko', 'country_code' => 'NG'],\n            ['name' => 'Armidale', 'country_code' => 'AU'],\n            ['name' => 'Yinajia', 'country_code' => 'CN'],\n            ['name' => 'San Vicente de Canete', 'country_code' => 'PE'],\n            ['name' => 'Cuajinicuilapa', 'country_code' => 'MX'],\n            ['name' => 'Newport', 'country_code' => 'GB'],\n            ['name' => 'Omachi', 'country_code' => 'JP'],\n            ['name' => 'Londonderry', 'country_code' => 'US'],\n            ['name' => 'Erandio', 'country_code' => 'ES'],\n            ['name' => 'Malangawa', 'country_code' => 'NP'],\n            ['name' => 'Dix Hills', 'country_code' => 'US'],\n            ['name' => 'Villanueva de la Serena', 'country_code' => 'ES'],\n            ['name' => 'Wetzikon', 'country_code' => 'CH'],\n            ['name' => 'Rock Springs', 'country_code' => 'US'],\n            ['name' => 'Santa Lucia', 'country_code' => 'PH'],\n            ['name' => 'San Martin', 'country_code' => 'CO'],\n            ['name' => 'Wagrowiec', 'country_code' => 'PL'],\n            ['name' => 'Beersel', 'country_code' => 'BE'],\n            ['name' => 'South Windsor', 'country_code' => 'US'],\n            ['name' => 'Mercer Island', 'country_code' => 'US'],\n            ['name' => 'Mola di Bari', 'country_code' => 'IT'],\n            ['name' => 'Lubbecke', 'country_code' => 'DE'],\n            ['name' => 'Heber', 'country_code' => 'US'],\n            ['name' => 'White Bear Lake', 'country_code' => 'US'],\n            ['name' => 'San Lucas Toliman', 'country_code' => 'GT'],\n            ['name' => 'Kunisakimachi-tsurugawa', 'country_code' => 'JP'],\n            ['name' => 'Lagoa Grande', 'country_code' => 'BR'],\n            ['name' => 'Nova Soure', 'country_code' => 'BR'],\n            ['name' => 'Roth', 'country_code' => 'DE'],\n            ['name' => 'Chester-le-Street', 'country_code' => 'GB'],\n            ['name' => 'Santa Lucia La Reforma', 'country_code' => 'GT'],\n            ['name' => 'Verl', 'country_code' => 'DE'],\n            ['name' => 'Cochrane', 'country_code' => 'CA'],\n            ['name' => 'Laurel', 'country_code' => 'US'],\n            ['name' => 'Marshfield', 'country_code' => 'US'],\n            ['name' => 'Monte Cristi', 'country_code' => 'DO'],\n            ['name' => 'Bagno a Ripoli', 'country_code' => 'IT'],\n            ['name' => 'Yany Kapu', 'country_code' => 'UA'],\n            ['name' => 'Holbrook', 'country_code' => 'US'],\n            ['name' => 'Broadstairs', 'country_code' => 'GB'],\n            ['name' => 'Huejotzingo', 'country_code' => 'MX'],\n            ['name' => 'Kireyevsk', 'country_code' => 'RU'],\n            ['name' => 'Nechi', 'country_code' => 'CO'],\n            ['name' => 'Haskoy', 'country_code' => 'TR'],\n            ['name' => 'Velingrad', 'country_code' => 'BG'],\n            ['name' => 'Tabuelan', 'country_code' => 'PH'],\n            ['name' => 'Bay Point', 'country_code' => 'US'],\n            ['name' => 'Surgidero de Batabano', 'country_code' => 'CU'],\n            ['name' => 'Mansfield', 'country_code' => 'US'],\n            ['name' => 'Pereira Barreto', 'country_code' => 'BR'],\n            ['name' => 'Woodstock', 'country_code' => 'US'],\n            ['name' => 'Nanpingcun', 'country_code' => 'CN'],\n            ['name' => 'Firmat', 'country_code' => 'AR'],\n            ['name' => 'Lochearn', 'country_code' => 'US'],\n            ['name' => 'Gross-Gerau', 'country_code' => 'DE'],\n            ['name' => 'Zittau', 'country_code' => 'DE'],\n            ['name' => 'Umbauba', 'country_code' => 'BR'],\n            ['name' => 'Santa Rosa de Viterbo', 'country_code' => 'BR'],\n            ['name' => 'Green', 'country_code' => 'US'],\n            ['name' => 'Oulad Said', 'country_code' => 'MA'],\n            ['name' => 'Felipe Carrillo Puerto', 'country_code' => 'MX'],\n            ['name' => 'Wall', 'country_code' => 'US'],\n            ['name' => 'Saky', 'country_code' => 'UA'],\n            ['name' => 'Pfungstadt', 'country_code' => 'DE'],\n            ['name' => 'Saint-Ouen-l Aumone', 'country_code' => 'FR'],\n            ['name' => 'Aimores', 'country_code' => 'BR'],\n            ['name' => 'Carandai', 'country_code' => 'BR'],\n            ['name' => 'Ishii', 'country_code' => 'JP'],\n            ['name' => 'Rinteln', 'country_code' => 'DE'],\n            ['name' => 'Carahue', 'country_code' => 'CL'],\n            ['name' => 'Cueramaro', 'country_code' => 'MX'],\n            ['name' => 'Panelas', 'country_code' => 'BR'],\n            ['name' => 'Golborne', 'country_code' => 'GB'],\n            ['name' => 'Etampes', 'country_code' => 'FR'],\n            ['name' => 'Thetford Mines', 'country_code' => 'CA'],\n            ['name' => 'Lamzoudia', 'country_code' => 'MA'],\n            ['name' => 'Alhaurin el Grande', 'country_code' => 'ES'],\n            ['name' => 'Owatonna', 'country_code' => 'US'],\n            ['name' => 'Ditzingen', 'country_code' => 'DE'],\n            ['name' => 'Tepetlaoxtoc', 'country_code' => 'MX'],\n            ['name' => 'Adra', 'country_code' => 'ES'],\n            ['name' => 'Pooler', 'country_code' => 'US'],\n            ['name' => 'Lennestadt', 'country_code' => 'DE'],\n            ['name' => 'Exeter', 'country_code' => 'US'],\n            ['name' => 'Haiwei', 'country_code' => 'CN'],\n            ['name' => 'Balabanovo', 'country_code' => 'RU'],\n            ['name' => 'Haisyn', 'country_code' => 'UA'],\n            ['name' => 'Datu Piang', 'country_code' => 'PH'],\n            ['name' => 'Yolombo', 'country_code' => 'CO'],\n            ['name' => 'Bom Jesus', 'country_code' => 'BR'],\n            ['name' => 'Siofok', 'country_code' => 'HU'],\n            ['name' => 'Madison', 'country_code' => 'US'],\n            ['name' => 'Nesher', 'country_code' => 'IL'],\n            ['name' => 'Sarrat', 'country_code' => 'PH'],\n            ['name' => 'Lancaster', 'country_code' => 'US'],\n            ['name' => 'Otradnoye', 'country_code' => 'RU'],\n            ['name' => 'Oliva', 'country_code' => 'ES'],\n            ['name' => 'Veenoord', 'country_code' => 'NL'],\n            ['name' => 'Lanling', 'country_code' => 'CN'],\n            ['name' => 'Pirai do Sul', 'country_code' => 'BR'],\n            ['name' => 'Rottweil', 'country_code' => 'DE'],\n            ['name' => 'Austin', 'country_code' => 'US'],\n            ['name' => 'Mata Grande', 'country_code' => 'BR'],\n            ['name' => 'Fengruncun', 'country_code' => 'CN'],\n            ['name' => 'Lockport', 'country_code' => 'US'],\n            ['name' => 'Oulad Tayeb', 'country_code' => 'MA'],\n            ['name' => 'Ciempozuelos', 'country_code' => 'ES'],\n            ['name' => 'Puebla de Vallbona', 'country_code' => 'ES'],\n            ['name' => 'Poro', 'country_code' => 'PH'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Wiehl', 'country_code' => 'DE'],\n            ['name' => 'Courtenay', 'country_code' => 'CA'],\n            ['name' => 'Olesa de Montserrat', 'country_code' => 'ES'],\n            ['name' => 'Sao Geraldo do Araguaia', 'country_code' => 'BR'],\n            ['name' => 'Vynohradiv', 'country_code' => 'UA'],\n            ['name' => 'Gosforth', 'country_code' => 'GB'],\n            ['name' => 'South Salt Lake', 'country_code' => 'US'],\n            ['name' => 'Plettenberg', 'country_code' => 'DE'],\n            ['name' => 'Legnago', 'country_code' => 'IT'],\n            ['name' => 'Tarpon Springs', 'country_code' => 'US'],\n            ['name' => 'Edgewood', 'country_code' => 'US'],\n            ['name' => 'Soure', 'country_code' => 'BR'],\n            ['name' => 'Busselton', 'country_code' => 'AU'],\n            ['name' => 'Rudolstadt', 'country_code' => 'DE'],\n            ['name' => 'Tougue', 'country_code' => 'GN'],\n            ['name' => 'Dingalan', 'country_code' => 'PH'],\n            ['name' => 'Santa Maria', 'country_code' => 'PH'],\n            ['name' => 'Stassfurt', 'country_code' => 'DE'],\n            ['name' => 'Bluffton', 'country_code' => 'US'],\n            ['name' => 'Sevierville', 'country_code' => 'US'],\n            ['name' => 'Forest Grove', 'country_code' => 'US'],\n            ['name' => 'Paete', 'country_code' => 'PH'],\n            ['name' => 'Yanyan', 'country_code' => 'CN'],\n            ['name' => 'Randolph', 'country_code' => 'US'],\n            ['name' => 'Solano', 'country_code' => 'CO'],\n            ['name' => 'Bugho', 'country_code' => 'PH'],\n            ['name' => 'Sun City West', 'country_code' => 'US'],\n            ['name' => 'Thiene', 'country_code' => 'IT'],\n            ['name' => 'Luzilandia', 'country_code' => 'BR'],\n            ['name' => 'Cambara', 'country_code' => 'BR'],\n            ['name' => 'Yanaul', 'country_code' => 'RU'],\n            ['name' => 'South Portland', 'country_code' => 'US'],\n            ['name' => 'Ruskin', 'country_code' => 'US'],\n            ['name' => 'Denison', 'country_code' => 'US'],\n            ['name' => 'Maaseik', 'country_code' => 'BE'],\n            ['name' => 'Farmington', 'country_code' => 'US'],\n            ['name' => 'Brilon', 'country_code' => 'DE'],\n            ['name' => 'Oud-Beijerland', 'country_code' => 'NL'],\n            ['name' => 'Eidsvoll', 'country_code' => 'NO'],\n            ['name' => 'Del Gallego', 'country_code' => 'PH'],\n            ['name' => 'Ain Aicha', 'country_code' => 'MA'],\n            ['name' => 'Piagapo', 'country_code' => 'PH'],\n            ['name' => 'Alta Floresta D Oeste', 'country_code' => 'BR'],\n            ['name' => 'Samtredia', 'country_code' => 'GE'],\n            ['name' => 'Tanabi', 'country_code' => 'BR'],\n            ['name' => 'Skawina', 'country_code' => 'PL'],\n            ['name' => 'Keystone', 'country_code' => 'US'],\n            ['name' => 'Moon', 'country_code' => 'US'],\n            ['name' => 'Korostyshiv', 'country_code' => 'UA'],\n            ['name' => 'Dalmine', 'country_code' => 'IT'],\n            ['name' => 'Workington', 'country_code' => 'GB'],\n            ['name' => 'Jequitinhonha', 'country_code' => 'BR'],\n            ['name' => 'Witham', 'country_code' => 'GB'],\n            ['name' => 'Sandona', 'country_code' => 'CO'],\n            ['name' => 'Vistahermosa', 'country_code' => 'CO'],\n            ['name' => 'Laon', 'country_code' => 'FR'],\n            ['name' => 'Tamboril', 'country_code' => 'BR'],\n            ['name' => 'Markkleeberg', 'country_code' => 'DE'],\n            ['name' => 'San Jose', 'country_code' => 'CO'],\n            ['name' => 'La Union', 'country_code' => 'CO'],\n            ['name' => 'Inta', 'country_code' => 'RU'],\n            ['name' => 'Capao do Leao', 'country_code' => 'BR'],\n            ['name' => 'Ruvo di Puglia', 'country_code' => 'IT'],\n            ['name' => 'Yamagata', 'country_code' => 'JP'],\n            ['name' => 'Wumaying', 'country_code' => 'CN'],\n            ['name' => 'Lamut', 'country_code' => 'PH'],\n            ['name' => 'Ituporanga', 'country_code' => 'BR'],\n            ['name' => 'Ozery', 'country_code' => 'RU'],\n            ['name' => 'San Pablo', 'country_code' => 'PH'],\n            ['name' => 'La Valette-du-Var', 'country_code' => 'FR'],\n            ['name' => 'Tupaciguara', 'country_code' => 'BR'],\n            ['name' => 'Albergaria-a-Velha', 'country_code' => 'PT'],\n            ['name' => 'Taupo', 'country_code' => 'NZ'],\n            ['name' => 'Sevlievo', 'country_code' => 'BG'],\n            ['name' => 'Harsewinkel', 'country_code' => 'DE'],\n            ['name' => 'Cuijk', 'country_code' => 'NL'],\n            ['name' => 'Meckenheim', 'country_code' => 'DE'],\n            ['name' => 'Bom Jesus', 'country_code' => 'BR'],\n            ['name' => 'Saydnaya', 'country_code' => 'SY'],\n            ['name' => 'Areia Branca', 'country_code' => 'BR'],\n            ['name' => 'Claremore', 'country_code' => 'US'],\n            ['name' => 'Pinheiral', 'country_code' => 'BR'],\n            ['name' => 'Whitehaven', 'country_code' => 'GB'],\n            ['name' => 'Homewood', 'country_code' => 'US'],\n            ['name' => 'Muret', 'country_code' => 'FR'],\n            ['name' => 'Formosa do Rio Preto', 'country_code' => 'BR'],\n            ['name' => 'Sao Joao da Ponte', 'country_code' => 'BR'],\n            ['name' => 'Chiromo', 'country_code' => 'MW'],\n            ['name' => 'Mengdan', 'country_code' => 'CN'],\n            ['name' => 'Ibia', 'country_code' => 'BR'],\n            ['name' => 'La Blanca', 'country_code' => 'GT'],\n            ['name' => 'Magog', 'country_code' => 'CA'],\n            ['name' => 'Hudson', 'country_code' => 'US'],\n            ['name' => 'Mednogorsk', 'country_code' => 'RU'],\n            ['name' => 'Pandag', 'country_code' => 'PH'],\n            ['name' => 'Tabina', 'country_code' => 'PH'],\n            ['name' => 'Horb am Neckar', 'country_code' => 'DE'],\n            ['name' => 'Choconta', 'country_code' => 'CO'],\n            ['name' => 'Farmington', 'country_code' => 'US'],\n            ['name' => 'Westerlo', 'country_code' => 'BE'],\n            ['name' => 'Salamanca', 'country_code' => 'CL'],\n            ['name' => 'Columbine', 'country_code' => 'US'],\n            ['name' => 'Zheleznovodsk', 'country_code' => 'RU'],\n            ['name' => 'Pinal de Amoles', 'country_code' => 'MX'],\n            ['name' => 'Canyon Lake', 'country_code' => 'US'],\n            ['name' => 'Lopez Jaena', 'country_code' => 'PH'],\n            ['name' => 'Oulad Barhil', 'country_code' => 'MA'],\n            ['name' => 'Kingsville', 'country_code' => 'US'],\n            ['name' => 'Kochubeyevskoye', 'country_code' => 'RU'],\n            ['name' => 'Forest City', 'country_code' => 'US'],\n            ['name' => 'Cabangan', 'country_code' => 'PH'],\n            ['name' => 'Merelbeke', 'country_code' => 'BE'],\n            ['name' => 'Salem', 'country_code' => 'US'],\n            ['name' => 'Baar', 'country_code' => 'CH'],\n            ['name' => 'Bainbridge Island', 'country_code' => 'US'],\n            ['name' => 'Norden', 'country_code' => 'DE'],\n            ['name' => 'Salzkotten', 'country_code' => 'DE'],\n            ['name' => 'Petershagen', 'country_code' => 'DE'],\n            ['name' => 'Dedham', 'country_code' => 'US'],\n            ['name' => 'Khed Brahma', 'country_code' => 'IN'],\n            ['name' => 'Caledonia', 'country_code' => 'US'],\n            ['name' => 'Kamo', 'country_code' => 'JP'],\n            ['name' => 'Eloi Mendes', 'country_code' => 'BR'],\n            ['name' => 'De Witt', 'country_code' => 'US'],\n            ['name' => 'Cajuru', 'country_code' => 'BR'],\n            ['name' => 'Champlin', 'country_code' => 'US'],\n            ['name' => 'El Ghiate', 'country_code' => 'MA'],\n            ['name' => 'Sprockhovel', 'country_code' => 'DE'],\n            ['name' => 'Lom', 'country_code' => 'BG'],\n            ['name' => 'Thetford', 'country_code' => 'GB'],\n            ['name' => 'Kariba', 'country_code' => 'ZW'],\n            ['name' => 'Frederikshavn', 'country_code' => 'DK'],\n            ['name' => 'Camalaniugan', 'country_code' => 'PH'],\n            ['name' => 'Xiaolongtan', 'country_code' => 'CN'],\n            ['name' => 'Safsaf', 'country_code' => 'MA'],\n            ['name' => 'Koscierzyna', 'country_code' => 'PL'],\n            ['name' => 'Anastacio', 'country_code' => 'BR'],\n            ['name' => 'Sastamala', 'country_code' => 'FI'],\n            ['name' => 'Apiai', 'country_code' => 'BR'],\n            ['name' => 'Edwardsville', 'country_code' => 'US'],\n            ['name' => 'Pinillos', 'country_code' => 'CO'],\n            ['name' => 'Genzano di Roma', 'country_code' => 'IT'],\n            ['name' => 'Rochefort', 'country_code' => 'FR'],\n            ['name' => 'Fairland', 'country_code' => 'US'],\n            ['name' => 'Bad Oldesloe', 'country_code' => 'DE'],\n            ['name' => 'Morozovsk', 'country_code' => 'RU'],\n            ['name' => 'Elk River', 'country_code' => 'US'],\n            ['name' => 'Tono', 'country_code' => 'JP'],\n            ['name' => 'Onda', 'country_code' => 'ES'],\n            ['name' => 'Idstein', 'country_code' => 'DE'],\n            ['name' => 'Rosemount', 'country_code' => 'US'],\n            ['name' => 'San Isidro', 'country_code' => 'PH'],\n            ['name' => 'Portogruaro', 'country_code' => 'IT'],\n            ['name' => 'Sezze', 'country_code' => 'IT'],\n            ['name' => 'Fountain Hills', 'country_code' => 'US'],\n            ['name' => 'Espera Feliz', 'country_code' => 'BR'],\n            ['name' => 'Droitwich', 'country_code' => 'GB'],\n            ['name' => 'Otuzco', 'country_code' => 'PE'],\n            ['name' => 'Cambre', 'country_code' => 'ES'],\n            ['name' => 'Paoay', 'country_code' => 'PH'],\n            ['name' => 'Agrestina', 'country_code' => 'BR'],\n            ['name' => 'Shaqlawah', 'country_code' => 'IQ'],\n            ['name' => 'Santa Maria Tonameca', 'country_code' => 'MX'],\n            ['name' => 'Raahe', 'country_code' => 'FI'],\n            ['name' => 'Tarangnan', 'country_code' => 'PH'],\n            ['name' => 'Socorro', 'country_code' => 'CO'],\n            ['name' => 'Icatu', 'country_code' => 'BR'],\n            ['name' => 'Quissama', 'country_code' => 'BR'],\n            ['name' => 'Nedre Eiker', 'country_code' => 'NO'],\n            ['name' => 'Great Sankey', 'country_code' => 'GB'],\n            ['name' => 'Charentsavan', 'country_code' => 'AM'],\n            ['name' => 'Delitzsch', 'country_code' => 'DE'],\n            ['name' => 'Atkarsk', 'country_code' => 'RU'],\n            ['name' => 'Sovetskaya Gavan ', 'country_code' => 'RU'],\n            ['name' => 'Villarrobledo', 'country_code' => 'ES'],\n            ['name' => 'Belvidere', 'country_code' => 'US'],\n            ['name' => 'Ereymentau', 'country_code' => 'KZ'],\n            ['name' => 'Yuzhang', 'country_code' => 'CN'],\n            ['name' => 'Riverside', 'country_code' => 'US'],\n            ['name' => 'Reading', 'country_code' => 'US'],\n            ['name' => 'Middle River', 'country_code' => 'US'],\n            ['name' => 'Walpole', 'country_code' => 'US'],\n            ['name' => 'Muskego', 'country_code' => 'US'],\n            ['name' => 'Jaleshwar', 'country_code' => 'NP'],\n            ['name' => 'Wolfsberg', 'country_code' => 'AT'],\n            ['name' => 'Hazelwood', 'country_code' => 'US'],\n            ['name' => 'Scottsbluff', 'country_code' => 'US'],\n            ['name' => 'Tubay', 'country_code' => 'PH'],\n            ['name' => 'Pitsea', 'country_code' => 'GB'],\n            ['name' => 'Dalupo', 'country_code' => 'CN'],\n            ['name' => 'Santo Tomas', 'country_code' => 'PE'],\n            ['name' => 'Saguiaran', 'country_code' => 'PH'],\n            ['name' => 'Uaua', 'country_code' => 'BR'],\n            ['name' => 'Derry', 'country_code' => 'US'],\n            ['name' => 'Matriz de Camarajibe', 'country_code' => 'BR'],\n            ['name' => 'Krems an der Donau', 'country_code' => 'AT'],\n            ['name' => 'Whitehorse', 'country_code' => 'CA'],\n            ['name' => 'Bialogard', 'country_code' => 'PL'],\n            ['name' => 'Doctor Mora', 'country_code' => 'MX'],\n            ['name' => 'Sakai', 'country_code' => 'JP'],\n            ['name' => 'Fresno', 'country_code' => 'US'],\n            ['name' => 'Rockaway', 'country_code' => 'US'],\n            ['name' => 'Turnu Magurele', 'country_code' => 'RO'],\n            ['name' => 'Ridgewood', 'country_code' => 'US'],\n            ['name' => 'Wujiaying', 'country_code' => 'CN'],\n            ['name' => 'Piritiba', 'country_code' => 'BR'],\n            ['name' => 'Cruz', 'country_code' => 'BR'],\n            ['name' => 'Santa Maria do Para', 'country_code' => 'BR'],\n            ['name' => 'Slavutych', 'country_code' => 'UA'],\n            ['name' => 'Yucca Valley', 'country_code' => 'US'],\n            ['name' => 'Ridgefield', 'country_code' => 'US'],\n            ['name' => 'Torrelodones', 'country_code' => 'ES'],\n            ['name' => 'Iraquara', 'country_code' => 'BR'],\n            ['name' => 'Branson', 'country_code' => 'US'],\n            ['name' => 'Sultepec', 'country_code' => 'MX'],\n            ['name' => 'Dainyor', 'country_code' => 'PK'],\n            ['name' => 'Seaford', 'country_code' => 'GB'],\n            ['name' => 'Uvarovo', 'country_code' => 'RU'],\n            ['name' => 'Sandomierz', 'country_code' => 'PL'],\n            ['name' => 'Caransebes', 'country_code' => 'RO'],\n            ['name' => 'Ma bar', 'country_code' => 'YE'],\n            ['name' => 'Valparaiso', 'country_code' => 'BR'],\n            ['name' => 'Eisenhuttenstadt', 'country_code' => 'DE'],\n            ['name' => 'Zwevegem', 'country_code' => 'BE'],\n            ['name' => 'Balch Springs', 'country_code' => 'US'],\n            ['name' => 'Woolwich', 'country_code' => 'CA'],\n            ['name' => 'Ubach-Palenberg', 'country_code' => 'DE'],\n            ['name' => 'Warstein', 'country_code' => 'DE'],\n            ['name' => 'Magenta', 'country_code' => 'IT'],\n            ['name' => 'Ronnenberg', 'country_code' => 'DE'],\n            ['name' => 'Santa Gertrudes', 'country_code' => 'BR'],\n            ['name' => 'Espelkamp', 'country_code' => 'DE'],\n            ['name' => 'Timberwood Park', 'country_code' => 'US'],\n            ['name' => 'Olpe', 'country_code' => 'DE'],\n            ['name' => 'De Pere', 'country_code' => 'US'],\n            ['name' => 'Ribas do Rio Pardo', 'country_code' => 'BR'],\n            ['name' => 'Piranhas', 'country_code' => 'BR'],\n            ['name' => 'Socastee', 'country_code' => 'US'],\n            ['name' => 'Lagindingan', 'country_code' => 'PH'],\n            ['name' => 'Susquehanna', 'country_code' => 'US'],\n            ['name' => 'Rishton', 'country_code' => 'UZ'],\n            ['name' => 'Schmallenberg', 'country_code' => 'DE'],\n            ['name' => 'Fajardo', 'country_code' => 'PR'],\n            ['name' => 'Marysville', 'country_code' => 'US'],\n            ['name' => 'San Martin Sacatepequez', 'country_code' => 'GT'],\n            ['name' => 'Madaoua', 'country_code' => 'NE'],\n            ['name' => 'Sao Joao dos Patos', 'country_code' => 'BR'],\n            ['name' => 'Derby', 'country_code' => 'US'],\n            ['name' => 'Zarautz', 'country_code' => 'ES'],\n            ['name' => 'Trebisov', 'country_code' => 'SK'],\n            ['name' => 'Manito', 'country_code' => 'PH'],\n            ['name' => 'Litomerice', 'country_code' => 'CZ'],\n            ['name' => 'Betera', 'country_code' => 'ES'],\n            ['name' => 'Plymstock', 'country_code' => 'GB'],\n            ['name' => 'Shitan', 'country_code' => 'CN'],\n            ['name' => 'Vertou', 'country_code' => 'FR'],\n            ['name' => 'Valls', 'country_code' => 'ES'],\n            ['name' => 'Wilsonville', 'country_code' => 'US'],\n            ['name' => 'Echemmaia Est', 'country_code' => 'MA'],\n            ['name' => 'Wil', 'country_code' => 'CH'],\n            ['name' => 'Sharya', 'country_code' => 'RU'],\n            ['name' => 'Ampatuan', 'country_code' => 'PH'],\n            ['name' => 'Douar Olad. Salem', 'country_code' => 'MA'],\n            ['name' => 'Ottaviano', 'country_code' => 'IT'],\n            ['name' => 'Ouaoula', 'country_code' => 'MA'],\n            ['name' => 'Clayton', 'country_code' => 'US'],\n            ['name' => 'Brookings', 'country_code' => 'US'],\n            ['name' => 'Pavlovsk', 'country_code' => 'RU'],\n            ['name' => 'Liangwu', 'country_code' => 'CN'],\n            ['name' => 'Evesham', 'country_code' => 'GB'],\n            ['name' => 'Cabrican', 'country_code' => 'GT'],\n            ['name' => 'Aquila', 'country_code' => 'MX'],\n            ['name' => 'Leoben', 'country_code' => 'AT'],\n            ['name' => 'North Laurel', 'country_code' => 'US'],\n            ['name' => 'Breclav', 'country_code' => 'CZ'],\n            ['name' => 'Montevarchi', 'country_code' => 'IT'],\n            ['name' => 'Sierra Bullones', 'country_code' => 'PH'],\n            ['name' => 'Walker', 'country_code' => 'US'],\n            ['name' => 'Colon', 'country_code' => 'AR'],\n            ['name' => 'Wyandotte', 'country_code' => 'US'],\n            ['name' => 'Santa Rosa', 'country_code' => 'CO'],\n            ['name' => 'Grandview', 'country_code' => 'US'],\n            ['name' => 'Dongxiaozhai', 'country_code' => 'CN'],\n            ['name' => 'Forest Lake', 'country_code' => 'US'],\n            ['name' => 'Igreja Nova', 'country_code' => 'BR'],\n            ['name' => 'Mabini', 'country_code' => 'PH'],\n            ['name' => 'Middleborough', 'country_code' => 'US'],\n            ['name' => 'Chesapeake Beach', 'country_code' => 'US'],\n            ['name' => 'Altavas', 'country_code' => 'PH'],\n            ['name' => 'Palm City', 'country_code' => 'US'],\n            ['name' => 'Hudson', 'country_code' => 'US'],\n            ['name' => 'Pao de Acucar', 'country_code' => 'BR'],\n            ['name' => 'Kulachi', 'country_code' => 'PK'],\n            ['name' => 'Zhuchangba', 'country_code' => 'CN'],\n            ['name' => 'Isernhagen-Sud', 'country_code' => 'DE'],\n            ['name' => 'Aytos', 'country_code' => 'BG'],\n            ['name' => 'Pangil', 'country_code' => 'PH'],\n            ['name' => 'Lincoln', 'country_code' => 'AR'],\n            ['name' => 'Simsbury', 'country_code' => 'US'],\n            ['name' => 'Calahorra', 'country_code' => 'ES'],\n            ['name' => 'Oga', 'country_code' => 'JP'],\n            ['name' => 'Swatara', 'country_code' => 'US'],\n            ['name' => 'Raisio', 'country_code' => 'FI'],\n            ['name' => 'Cesky Tesin', 'country_code' => 'CZ'],\n            ['name' => 'Hodonin', 'country_code' => 'CZ'],\n            ['name' => 'Villanueva', 'country_code' => 'CO'],\n            ['name' => 'Clarksburg', 'country_code' => 'US'],\n            ['name' => 'Ziketan', 'country_code' => 'CN'],\n            ['name' => 'Ludinghausen', 'country_code' => 'DE'],\n            ['name' => 'Kakonko', 'country_code' => 'TZ'],\n            ['name' => 'Buy', 'country_code' => 'RU'],\n            ['name' => 'Tauramena', 'country_code' => 'CO'],\n            ['name' => 'South Elgin', 'country_code' => 'US'],\n            ['name' => 'Samaxi', 'country_code' => 'AZ'],\n            ['name' => 'Algeciras', 'country_code' => 'CO'],\n            ['name' => 'Auburn Hills', 'country_code' => 'US'],\n            ['name' => 'Cadca', 'country_code' => 'SK'],\n            ['name' => 'Juayua', 'country_code' => 'SV'],\n            ['name' => 'Ipameri', 'country_code' => 'BR'],\n            ['name' => 'Bela Vista', 'country_code' => 'BR'],\n            ['name' => 'San Enrique', 'country_code' => 'PH'],\n            ['name' => 'Ohringen', 'country_code' => 'DE'],\n            ['name' => 'Larvik', 'country_code' => 'NO'],\n            ['name' => 'Giulianova', 'country_code' => 'IT'],\n            ['name' => 'Vizela', 'country_code' => 'PT'],\n            ['name' => 'Dorohoi', 'country_code' => 'RO'],\n            ['name' => 'Caninde de Sao Francisco', 'country_code' => 'BR'],\n            ['name' => 'Chebba', 'country_code' => 'TN'],\n            ['name' => 'North Tustin', 'country_code' => 'US'],\n            ['name' => 'Igaracu do Tiete', 'country_code' => 'BR'],\n            ['name' => 'Ontario', 'country_code' => 'US'],\n            ['name' => 'Takhli', 'country_code' => 'TH'],\n            ['name' => 'Albenga', 'country_code' => 'IT'],\n            ['name' => 'Arad', 'country_code' => 'IL'],\n            ['name' => 'Ardmore', 'country_code' => 'US'],\n            ['name' => 'Quirino', 'country_code' => 'PH'],\n            ['name' => 'Hastings', 'country_code' => 'US'],\n            ['name' => 'Burlington', 'country_code' => 'US'],\n            ['name' => 'Shangtianba', 'country_code' => 'CN'],\n            ['name' => 'Tanglin', 'country_code' => 'CN'],\n            ['name' => 'Talisayan', 'country_code' => 'PH'],\n            ['name' => 'Itabaiana', 'country_code' => 'BR'],\n            ['name' => 'Las Cabras', 'country_code' => 'CL'],\n            ['name' => 'Hannoversch Munden', 'country_code' => 'DE'],\n            ['name' => 'Heiloo', 'country_code' => 'NL'],\n            ['name' => 'Roissy-en-Brie', 'country_code' => 'FR'],\n            ['name' => 'Alvares Machado', 'country_code' => 'BR'],\n            ['name' => 'Sanchez-Mira', 'country_code' => 'PH'],\n            ['name' => 'Norton Shores', 'country_code' => 'US'],\n            ['name' => 'Kernersville', 'country_code' => 'US'],\n            ['name' => 'Rickmansworth', 'country_code' => 'GB'],\n            ['name' => 'Windham', 'country_code' => 'US'],\n            ['name' => 'Tairan Camp', 'country_code' => 'PH'],\n            ['name' => 'Khajuraho', 'country_code' => 'IN'],\n            ['name' => 'Meiningen', 'country_code' => 'DE'],\n            ['name' => 'Aurora', 'country_code' => 'BR'],\n            ['name' => 'Yayas de Viajama', 'country_code' => 'DO'],\n            ['name' => 'Easton', 'country_code' => 'US'],\n            ['name' => 'Sugar Hill', 'country_code' => 'US'],\n            ['name' => 'Hoensbroek', 'country_code' => 'NL'],\n            ['name' => 'Attendorn', 'country_code' => 'DE'],\n            ['name' => 'San Borja', 'country_code' => 'BO'],\n            ['name' => 'Pueblo Bello', 'country_code' => 'CO'],\n            ['name' => 'Freha', 'country_code' => 'DZ'],\n            ['name' => 'Craibas', 'country_code' => 'BR'],\n            ['name' => 'Emporia', 'country_code' => 'US'],\n            ['name' => 'Nasukarasuyama', 'country_code' => 'JP'],\n            ['name' => 'Urbano Santos', 'country_code' => 'BR'],\n            ['name' => 'Mekla', 'country_code' => 'DZ'],\n            ['name' => 'Sulmona', 'country_code' => 'IT'],\n            ['name' => 'Infanta', 'country_code' => 'PH'],\n            ['name' => 'Zernograd', 'country_code' => 'RU'],\n            ['name' => 'Canhotinho', 'country_code' => 'BR'],\n            ['name' => 'Prosper', 'country_code' => 'US'],\n            ['name' => 'La Huerta', 'country_code' => 'MX'],\n            ['name' => 'Pirajui', 'country_code' => 'BR'],\n            ['name' => 'Valdivia', 'country_code' => 'CO'],\n            ['name' => 'Gyal', 'country_code' => 'HU'],\n            ['name' => 'El Retorno', 'country_code' => 'CO'],\n            ['name' => 'Maguing', 'country_code' => 'PH'],\n            ['name' => 'Cedro', 'country_code' => 'BR'],\n            ['name' => 'Radauti', 'country_code' => 'RO'],\n            ['name' => 'Fossano', 'country_code' => 'IT'],\n            ['name' => 'Dubnica nad Vahom', 'country_code' => 'SK'],\n            ['name' => 'Almansa', 'country_code' => 'ES'],\n            ['name' => 'Vernon', 'country_code' => 'FR'],\n            ['name' => 'Itaporanga', 'country_code' => 'BR'],\n            ['name' => 'Kaniv', 'country_code' => 'UA'],\n            ['name' => 'Syke', 'country_code' => 'DE'],\n            ['name' => 'Waldshut-Tiengen', 'country_code' => 'DE'],\n            ['name' => 'Watsa', 'country_code' => 'CD'],\n            ['name' => 'Almonte', 'country_code' => 'ES'],\n            ['name' => 'San Agustin Loxicha', 'country_code' => 'MX'],\n            ['name' => 'Waldkraiburg', 'country_code' => 'DE'],\n            ['name' => 'Rathenow', 'country_code' => 'DE'],\n            ['name' => 'Palmetto Bay', 'country_code' => 'US'],\n            ['name' => 'Guabiruba', 'country_code' => 'BR'],\n            ['name' => 'Svishtov', 'country_code' => 'BG'],\n            ['name' => 'Clarence-Rockland', 'country_code' => 'CA'],\n            ['name' => 'Somerset', 'country_code' => 'US'],\n            ['name' => 'Mahdishahr', 'country_code' => 'IR'],\n            ['name' => 'Limbach-Oberfrohna', 'country_code' => 'DE'],\n            ['name' => 'Copertino', 'country_code' => 'IT'],\n            ['name' => 'Avon Lake', 'country_code' => 'US'],\n            ['name' => 'Pyrgos', 'country_code' => 'GR'],\n            ['name' => 'Forquilha', 'country_code' => 'BR'],\n            ['name' => 'Malitbog', 'country_code' => 'PH'],\n            ['name' => 'Neftekumsk', 'country_code' => 'RU'],\n            ['name' => 'Xinxing', 'country_code' => 'CN'],\n            ['name' => 'Tamilisan', 'country_code' => 'PH'],\n            ['name' => 'Lathrop', 'country_code' => 'US'],\n            ['name' => 'Loma Linda', 'country_code' => 'US'],\n            ['name' => 'Natividad', 'country_code' => 'PH'],\n            ['name' => 'Pura', 'country_code' => 'PH'],\n            ['name' => 'Putten', 'country_code' => 'NL'],\n            ['name' => 'Homer Glen', 'country_code' => 'US'],\n            ['name' => 'Tifton', 'country_code' => 'US'],\n            ['name' => 'Senftenberg', 'country_code' => 'DE'],\n            ['name' => 'Tocopilla', 'country_code' => 'CL'],\n            ['name' => 'Dinuba', 'country_code' => 'US'],\n            ['name' => 'East Hempfield', 'country_code' => 'US'],\n            ['name' => 'Poblacion', 'country_code' => 'PH'],\n            ['name' => 'Bad Soden am Taunus', 'country_code' => 'DE'],\n            ['name' => 'Bloomingdale', 'country_code' => 'US'],\n            ['name' => 'Stroitel', 'country_code' => 'RU'],\n            ['name' => 'Amarapura', 'country_code' => 'MM'],\n            ['name' => 'Selydove', 'country_code' => 'UA'],\n            ['name' => 'Westmont', 'country_code' => 'US'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'Sao Jeronimo', 'country_code' => 'BR'],\n            ['name' => 'Salvaterra', 'country_code' => 'BR'],\n            ['name' => 'Vulcan', 'country_code' => 'RO'],\n            ['name' => 'Porto de Mos', 'country_code' => 'PT'],\n            ['name' => 'Hujiachi', 'country_code' => 'CN'],\n            ['name' => 'Opelousas', 'country_code' => 'US'],\n            ['name' => 'Kotelnich', 'country_code' => 'RU'],\n            ['name' => 'Camas', 'country_code' => 'US'],\n            ['name' => 'Orbassano', 'country_code' => 'IT'],\n            ['name' => 'Semenov', 'country_code' => 'RU'],\n            ['name' => 'Harvey', 'country_code' => 'US'],\n            ['name' => 'Medford', 'country_code' => 'US'],\n            ['name' => 'Trotwood', 'country_code' => 'US'],\n            ['name' => 'West Memphis', 'country_code' => 'US'],\n            ['name' => 'Cupira', 'country_code' => 'BR'],\n            ['name' => 'Qiaomaichuan', 'country_code' => 'CN'],\n            ['name' => 'Collinsville', 'country_code' => 'US'],\n            ['name' => 'Longonjo', 'country_code' => 'AO'],\n            ['name' => 'Garcia Hernandez', 'country_code' => 'PH'],\n            ['name' => 'Mequon', 'country_code' => 'US'],\n            ['name' => 'Joaquim Gomes', 'country_code' => 'BR'],\n            ['name' => 'Ellensburg', 'country_code' => 'US'],\n            ['name' => 'Rodniki', 'country_code' => 'RU'],\n            ['name' => 'Nittedal', 'country_code' => 'NO'],\n            ['name' => 'Marple', 'country_code' => 'GB'],\n            ['name' => 'Ottumwa', 'country_code' => 'US'],\n            ['name' => 'Chantilly', 'country_code' => 'US'],\n            ['name' => 'Puerto Guzman', 'country_code' => 'CO'],\n            ['name' => 'Santo Antonio', 'country_code' => 'BR'],\n            ['name' => 'Asino', 'country_code' => 'RU'],\n            ['name' => 'Al Qusayr', 'country_code' => 'EG'],\n            ['name' => 'Shelbyville', 'country_code' => 'US'],\n            ['name' => 'Buturlinovka', 'country_code' => 'RU'],\n            ['name' => 'Casiguran', 'country_code' => 'PH'],\n            ['name' => 'Goulburn', 'country_code' => 'AU'],\n            ['name' => 'Pedra Azul', 'country_code' => 'BR'],\n            ['name' => 'Westford', 'country_code' => 'US'],\n            ['name' => 'La Montanita', 'country_code' => 'CO'],\n            ['name' => 'Orchards', 'country_code' => 'US'],\n            ['name' => 'Newport', 'country_code' => 'US'],\n            ['name' => 'Goirle', 'country_code' => 'NL'],\n            ['name' => 'San Miguel', 'country_code' => 'PH'],\n            ['name' => 'Neropolis', 'country_code' => 'BR'],\n            ['name' => 'Dole', 'country_code' => 'FR'],\n            ['name' => 'Nueva Paz', 'country_code' => 'CU'],\n            ['name' => 'Inhapim', 'country_code' => 'BR'],\n            ['name' => 'Douar  Ayn Dfali', 'country_code' => 'MA'],\n            ['name' => 'Rimavska Sobota', 'country_code' => 'SK'],\n            ['name' => 'Calpe', 'country_code' => 'ES'],\n            ['name' => 'Novo Aripuana', 'country_code' => 'BR'],\n            ['name' => 'Donmatias', 'country_code' => 'CO'],\n            ['name' => 'Saginaw', 'country_code' => 'US'],\n            ['name' => 'Cogua', 'country_code' => 'CO'],\n            ['name' => 'Alfter', 'country_code' => 'DE'],\n            ['name' => 'Saint-Laurent-du-Maroni', 'country_code' => 'GF'],\n            ['name' => 'Sao Lourenco d Oeste', 'country_code' => 'BR'],\n            ['name' => 'Manage', 'country_code' => 'BE'],\n            ['name' => 'Port Angeles', 'country_code' => 'US'],\n            ['name' => 'Marsella', 'country_code' => 'CO'],\n            ['name' => 'Brandon', 'country_code' => 'US'],\n            ['name' => 'Biancavilla', 'country_code' => 'IT'],\n            ['name' => 'Santiago', 'country_code' => 'PH'],\n            ['name' => 'Sun City Center', 'country_code' => 'US'],\n            ['name' => 'Sarangani', 'country_code' => 'PH'],\n            ['name' => 'Inkster', 'country_code' => 'US'],\n            ['name' => 'Buenavista', 'country_code' => 'PH'],\n            ['name' => 'Wednesfield', 'country_code' => 'GB'],\n            ['name' => 'Thomasville', 'country_code' => 'US'],\n            ['name' => 'Dazhuang', 'country_code' => 'CN'],\n            ['name' => 'Ponca City', 'country_code' => 'US'],\n            ['name' => 'Catano', 'country_code' => 'PR'],\n            ['name' => 'Gazojak', 'country_code' => 'TM'],\n            ['name' => 'Tecolutla', 'country_code' => 'MX'],\n            ['name' => 'Solsona', 'country_code' => 'PH'],\n            ['name' => 'Oiapoque', 'country_code' => 'BR'],\n            ['name' => 'Camillus', 'country_code' => 'US'],\n            ['name' => 'West Melbourne', 'country_code' => 'US'],\n            ['name' => 'Warrington', 'country_code' => 'US'],\n            ['name' => 'Feriana', 'country_code' => 'TN'],\n            ['name' => 'Faribault', 'country_code' => 'US'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'San Benito', 'country_code' => 'US'],\n            ['name' => 'Fort Washington', 'country_code' => 'US'],\n            ['name' => 'Diest', 'country_code' => 'BE'],\n            ['name' => 'Ibirapitanga', 'country_code' => 'BR'],\n            ['name' => 'Pietrasanta', 'country_code' => 'IT'],\n            ['name' => 'Lincolnton', 'country_code' => 'US'],\n            ['name' => 'Halfmoon', 'country_code' => 'US'],\n            ['name' => 'Bierun Stary', 'country_code' => 'PL'],\n            ['name' => 'West Springfield', 'country_code' => 'US'],\n            ['name' => 'Simpsonville', 'country_code' => 'US'],\n            ['name' => 'Ivrea', 'country_code' => 'IT'],\n            ['name' => 'Setti Fatma', 'country_code' => 'MA'],\n            ['name' => 'Krychaw', 'country_code' => 'BY'],\n            ['name' => 'Varel', 'country_code' => 'DE'],\n            ['name' => 'Uchquduq Shahri', 'country_code' => 'UZ'],\n            ['name' => 'Scotch Plains', 'country_code' => 'US'],\n            ['name' => 'San Marcos', 'country_code' => 'NI'],\n            ['name' => 'Waverly', 'country_code' => 'US'],\n            ['name' => 'San Nicolas', 'country_code' => 'PH'],\n            ['name' => 'Huilongping', 'country_code' => 'CN'],\n            ['name' => 'Skoura', 'country_code' => 'MA'],\n            ['name' => 'Rugeley', 'country_code' => 'GB'],\n            ['name' => 'Angatuba', 'country_code' => 'BR'],\n            ['name' => 'Salqin', 'country_code' => 'SY'],\n            ['name' => 'Guaiuba', 'country_code' => 'BR'],\n            ['name' => 'Lihe', 'country_code' => 'CN'],\n            ['name' => 'Diu', 'country_code' => 'IN'],\n            ['name' => 'Baiheqiao', 'country_code' => 'CN'],\n            ['name' => 'Schijndel', 'country_code' => 'NL'],\n            ['name' => 'Stjordal', 'country_code' => 'NO'],\n            ['name' => 'Grootfontein', 'country_code' => 'NA'],\n            ['name' => 'Gauripur', 'country_code' => 'IN'],\n            ['name' => 'Ashton in Makerfield', 'country_code' => 'GB'],\n            ['name' => 'Rioblanco', 'country_code' => 'CO'],\n            ['name' => 'Quedlinburg', 'country_code' => 'DE'],\n            ['name' => 'Fishkill', 'country_code' => 'US'],\n            ['name' => 'Fort Saskatchewan', 'country_code' => 'CA'],\n            ['name' => 'Okemos', 'country_code' => 'US'],\n            ['name' => 'Sao Jose da Laje', 'country_code' => 'BR'],\n            ['name' => 'Upper Macungie', 'country_code' => 'US'],\n            ['name' => 'Suonan', 'country_code' => 'CN'],\n            ['name' => 'Ibicarai', 'country_code' => 'BR'],\n            ['name' => 'Al Jawf', 'country_code' => 'LY'],\n            ['name' => 'Castiglione delle Stiviere', 'country_code' => 'IT'],\n            ['name' => 'Sattahip', 'country_code' => 'TH'],\n            ['name' => 'Zolochiv', 'country_code' => 'UA'],\n            ['name' => 'Beni Amrane', 'country_code' => 'DZ'],\n            ['name' => 'Formby', 'country_code' => 'GB'],\n            ['name' => 'Upper Moreland', 'country_code' => 'US'],\n            ['name' => 'Monte Siao', 'country_code' => 'BR'],\n            ['name' => 'Sonneberg', 'country_code' => 'DE'],\n            ['name' => 'Dobeln', 'country_code' => 'DE'],\n            ['name' => 'Amstetten', 'country_code' => 'AT'],\n            ['name' => 'Burgos', 'country_code' => 'PH'],\n            ['name' => 'Koilkuntla', 'country_code' => 'IN'],\n            ['name' => 'Vaterstetten', 'country_code' => 'DE'],\n            ['name' => 'Ridgeland', 'country_code' => 'US'],\n            ['name' => 'North Platte', 'country_code' => 'US'],\n            ['name' => 'As Sulayyil', 'country_code' => 'SA'],\n            ['name' => 'Borne', 'country_code' => 'NL'],\n            ['name' => 'Charles Town', 'country_code' => 'US'],\n            ['name' => 'Freeport', 'country_code' => 'US'],\n            ['name' => 'Waukee', 'country_code' => 'US'],\n            ['name' => 'Mina', 'country_code' => 'PH'],\n            ['name' => 'Husum', 'country_code' => 'DE'],\n            ['name' => 'Montecchio Maggiore', 'country_code' => 'IT'],\n            ['name' => 'Mentana', 'country_code' => 'IT'],\n            ['name' => 'Tupancireta', 'country_code' => 'BR'],\n            ['name' => 'Selvazzano Dentro', 'country_code' => 'IT'],\n            ['name' => 'Rio Tinto', 'country_code' => 'BR'],\n            ['name' => 'Cachoeira do Arari', 'country_code' => 'BR'],\n            ['name' => 'Noto', 'country_code' => 'IT'],\n            ['name' => 'Talugtug', 'country_code' => 'PH'],\n            ['name' => 'Bayang', 'country_code' => 'PH'],\n            ['name' => 'Litvinov', 'country_code' => 'CZ'],\n            ['name' => 'Ban Phru', 'country_code' => 'TH'],\n            ['name' => 'Ventimiglia', 'country_code' => 'IT'],\n            ['name' => 'Bognor Regis', 'country_code' => 'GB'],\n            ['name' => 'Zawyat an Nwacer', 'country_code' => 'MA'],\n            ['name' => 'Sao Miguel do Guapore', 'country_code' => 'BR'],\n            ['name' => 'Tayga', 'country_code' => 'RU'],\n            ['name' => 'Tres Passos', 'country_code' => 'BR'],\n            ['name' => 'South Plainfield', 'country_code' => 'US'],\n            ['name' => 'Konstancin-Jeziorna', 'country_code' => 'PL'],\n            ['name' => 'Wadsworth', 'country_code' => 'US'],\n            ['name' => 'Dapa', 'country_code' => 'PH'],\n            ['name' => 'Quatro Barras', 'country_code' => 'BR'],\n            ['name' => 'Kourou', 'country_code' => 'GF'],\n            ['name' => 'Horley', 'country_code' => 'GB'],\n            ['name' => 'Puerto San Jose', 'country_code' => 'GT'],\n            ['name' => 'Ocara', 'country_code' => 'BR'],\n            ['name' => 'Mairena del Alcor', 'country_code' => 'ES'],\n            ['name' => 'Piracanjuba', 'country_code' => 'BR'],\n            ['name' => 'Nava', 'country_code' => 'MX'],\n            ['name' => 'Grande-Synthe', 'country_code' => 'FR'],\n            ['name' => 'Bormujos', 'country_code' => 'ES'],\n            ['name' => 'Tumwater', 'country_code' => 'US'],\n            ['name' => 'Fairfax', 'country_code' => 'US'],\n            ['name' => 'Cranford', 'country_code' => 'US'],\n            ['name' => 'Hoh Ereg', 'country_code' => 'CN'],\n            ['name' => 'Picarras', 'country_code' => 'BR'],\n            ['name' => 'Candler-McAfee', 'country_code' => 'US'],\n            ['name' => 'East Gwillimbury', 'country_code' => 'CA'],\n            ['name' => 'Venice', 'country_code' => 'US'],\n            ['name' => 'Calw', 'country_code' => 'DE'],\n            ['name' => 'Lanester', 'country_code' => 'FR'],\n            ['name' => 'Tres Coroas', 'country_code' => 'BR'],\n            ['name' => 'Kelishad va Sudarjan', 'country_code' => 'IR'],\n            ['name' => 'Hajduszoboszlo', 'country_code' => 'HU'],\n            ['name' => 'Macaparana', 'country_code' => 'BR'],\n            ['name' => 'El Zulia', 'country_code' => 'CO'],\n            ['name' => 'Harmanli', 'country_code' => 'BG'],\n            ['name' => 'Jawor', 'country_code' => 'PL'],\n            ['name' => 'Wright', 'country_code' => 'US'],\n            ['name' => 'Aldeias Altas', 'country_code' => 'BR'],\n            ['name' => 'Wajimazakimachi', 'country_code' => 'JP'],\n            ['name' => 'Hollola', 'country_code' => 'FI'],\n            ['name' => 'Kalach-na-Donu', 'country_code' => 'RU'],\n            ['name' => 'Anchieta', 'country_code' => 'BR'],\n            ['name' => 'Sao Goncalo do Sapucai', 'country_code' => 'BR'],\n            ['name' => 'Laje', 'country_code' => 'BR'],\n            ['name' => 'Mansfield', 'country_code' => 'US'],\n            ['name' => 'La Mana', 'country_code' => 'EC'],\n            ['name' => 'Haren', 'country_code' => 'DE'],\n            ['name' => 'Ibi', 'country_code' => 'ES'],\n            ['name' => 'Bogotol', 'country_code' => 'RU'],\n            ['name' => 'Maldegem', 'country_code' => 'BE'],\n            ['name' => 'Caras', 'country_code' => 'PE'],\n            ['name' => 'Lincolnia', 'country_code' => 'US'],\n            ['name' => 'Tres de Maio', 'country_code' => 'BR'],\n            ['name' => 'Capoterra', 'country_code' => 'IT'],\n            ['name' => 'Nanxingguo', 'country_code' => 'CN'],\n            ['name' => 'Sokolov', 'country_code' => 'CZ'],\n            ['name' => 'Corinto', 'country_code' => 'BR'],\n            ['name' => 'Westchase', 'country_code' => 'US'],\n            ['name' => 'Poco Verde', 'country_code' => 'BR'],\n            ['name' => 'Upper Providence', 'country_code' => 'US'],\n            ['name' => 'Dongsheng', 'country_code' => 'CN'],\n            ['name' => 'Edgewater', 'country_code' => 'US'],\n            ['name' => 'Tlacolula', 'country_code' => 'MX'],\n            ['name' => 'Bambui', 'country_code' => 'BR'],\n            ['name' => 'North Potomac', 'country_code' => 'US'],\n            ['name' => 'Pelham', 'country_code' => 'US'],\n            ['name' => 'Honda', 'country_code' => 'CO'],\n            ['name' => 'Si Racha', 'country_code' => 'TH'],\n            ['name' => 'Corsicana', 'country_code' => 'US'],\n            ['name' => 'Monte Aprazivel', 'country_code' => 'BR'],\n            ['name' => 'Seal Beach', 'country_code' => 'US'],\n            ['name' => 'Comapa', 'country_code' => 'GT'],\n            ['name' => 'Pagudpud', 'country_code' => 'PH'],\n            ['name' => 'Combs-la-Ville', 'country_code' => 'FR'],\n            ['name' => 'San Miguel Ocotenco', 'country_code' => 'MX'],\n            ['name' => 'Ciudad Serdan', 'country_code' => 'MX'],\n            ['name' => 'Fort Dodge', 'country_code' => 'US'],\n            ['name' => 'Bad Mergentheim', 'country_code' => 'DE'],\n            ['name' => 'Mirandela', 'country_code' => 'PT'],\n            ['name' => 'Jurh', 'country_code' => 'CN'],\n            ['name' => 'Qift', 'country_code' => 'EG'],\n            ['name' => 'Starnberg', 'country_code' => 'DE'],\n            ['name' => 'Oostkamp', 'country_code' => 'BE'],\n            ['name' => 'Dunkirk', 'country_code' => 'US'],\n            ['name' => 'Khenichet-sur Ouerrha', 'country_code' => 'MA'],\n            ['name' => 'Douar Ouled Ayad', 'country_code' => 'MA'],\n            ['name' => 'Zemst', 'country_code' => 'BE'],\n            ['name' => 'Nyuzen', 'country_code' => 'JP'],\n            ['name' => 'Zeya', 'country_code' => 'RU'],\n            ['name' => 'Bazhajiemicun', 'country_code' => 'CN'],\n            ['name' => 'Carambei', 'country_code' => 'BR'],\n            ['name' => 'Calabasas', 'country_code' => 'US'],\n            ['name' => 'Chalmette', 'country_code' => 'US'],\n            ['name' => 'Bobon', 'country_code' => 'PH'],\n            ['name' => 'Raul Soares', 'country_code' => 'BR'],\n            ['name' => 'Los Barrios', 'country_code' => 'ES'],\n            ['name' => 'Lustenau', 'country_code' => 'AT'],\n            ['name' => 'Berehove', 'country_code' => 'UA'],\n            ['name' => 'North Augusta', 'country_code' => 'US'],\n            ['name' => 'Palm River-Clair Mel', 'country_code' => 'US'],\n            ['name' => 'Stepanavan', 'country_code' => 'AM'],\n            ['name' => 'Alexania', 'country_code' => 'BR'],\n            ['name' => 'Chrudim', 'country_code' => 'CZ'],\n            ['name' => 'Oldebroek', 'country_code' => 'NL'],\n            ['name' => 'Ostrow Mazowiecka', 'country_code' => 'PL'],\n            ['name' => 'Ayuquitan', 'country_code' => 'PH'],\n            ['name' => 'Jucas', 'country_code' => 'BR'],\n            ['name' => 'Kafr Sa d', 'country_code' => 'EG'],\n            ['name' => 'El Maknassi', 'country_code' => 'TN'],\n            ['name' => 'Montgomery', 'country_code' => 'US'],\n            ['name' => 'Bedburg', 'country_code' => 'DE'],\n            ['name' => 'Mirandola', 'country_code' => 'IT'],\n            ['name' => 'Mount Pocono', 'country_code' => 'US'],\n            ['name' => 'Olopa', 'country_code' => 'GT'],\n            ['name' => 'San Jose', 'country_code' => 'CO'],\n            ['name' => 'Tugaya', 'country_code' => 'PH'],\n            ['name' => 'Abbeville', 'country_code' => 'FR'],\n            ['name' => 'Sao Sepe', 'country_code' => 'BR'],\n            ['name' => 'Makouda', 'country_code' => 'DZ'],\n            ['name' => 'Brody', 'country_code' => 'UA'],\n            ['name' => 'Quartier Militaire', 'country_code' => 'MU'],\n            ['name' => 'Carai', 'country_code' => 'BR'],\n            ['name' => 'Sao Miguel', 'country_code' => 'BR'],\n            ['name' => 'Dumaran', 'country_code' => 'PH'],\n            ['name' => 'Lincoln', 'country_code' => 'CA'],\n            ['name' => 'Novy Jicin', 'country_code' => 'CZ'],\n            ['name' => 'Garopaba', 'country_code' => 'BR'],\n            ['name' => 'Santa Lucia Utatlan', 'country_code' => 'GT'],\n            ['name' => 'Loon op Zand', 'country_code' => 'NL'],\n            ['name' => 'Pitogo', 'country_code' => 'PH'],\n            ['name' => 'Dancagan', 'country_code' => 'PH'],\n            ['name' => 'Marple', 'country_code' => 'US'],\n            ['name' => 'Farragut', 'country_code' => 'US'],\n            ['name' => 'Mosbach', 'country_code' => 'DE'],\n            ['name' => 'Korbach', 'country_code' => 'DE'],\n            ['name' => 'Belmonte', 'country_code' => 'BR'],\n            ['name' => 'Kuvandyk', 'country_code' => 'RU'],\n            ['name' => 'Hachimantai', 'country_code' => 'JP'],\n            ['name' => 'Kalayaan', 'country_code' => 'PH'],\n            ['name' => 'Jenks', 'country_code' => 'US'],\n            ['name' => 'Lucena', 'country_code' => 'PH'],\n            ['name' => 'Piat', 'country_code' => 'PH'],\n            ['name' => 'Kayapa', 'country_code' => 'PH'],\n            ['name' => 'Ceccano', 'country_code' => 'IT'],\n            ['name' => 'Joao Lisboa', 'country_code' => 'BR'],\n            ['name' => 'Maracas', 'country_code' => 'BR'],\n            ['name' => 'Luninyets', 'country_code' => 'BY'],\n            ['name' => 'Fria', 'country_code' => 'GN'],\n            ['name' => 'Oulad Hassoune', 'country_code' => 'MA'],\n            ['name' => 'Gueznaia', 'country_code' => 'MA'],\n            ['name' => 'Herdecke', 'country_code' => 'DE'],\n            ['name' => 'Ayancik', 'country_code' => 'TR'],\n            ['name' => 'Kalawit', 'country_code' => 'PH'],\n            ['name' => 'Palatka', 'country_code' => 'US'],\n            ['name' => 'Tatarsk', 'country_code' => 'RU'],\n            ['name' => 'Tamandare', 'country_code' => 'BR'],\n            ['name' => 'Salzwedel', 'country_code' => 'DE'],\n            ['name' => 'Pamplona', 'country_code' => 'PH'],\n            ['name' => 'Coronado', 'country_code' => 'US'],\n            ['name' => 'Ayt Mohamed', 'country_code' => 'MA'],\n            ['name' => 'Lubartow', 'country_code' => 'PL'],\n            ['name' => 'Rio Formoso', 'country_code' => 'BR'],\n            ['name' => 'Alicia', 'country_code' => 'PH'],\n            ['name' => 'North Haven', 'country_code' => 'US'],\n            ['name' => 'Sao Joao do Paraiso', 'country_code' => 'BR'],\n            ['name' => 'Khromtau', 'country_code' => 'KZ'],\n            ['name' => 'Gamay', 'country_code' => 'PH'],\n            ['name' => 'San Juan Cotzocon', 'country_code' => 'MX'],\n            ['name' => 'Freudenstadt', 'country_code' => 'DE'],\n            ['name' => 'Nagykoros', 'country_code' => 'HU'],\n            ['name' => 'Bauta', 'country_code' => 'CU'],\n            ['name' => 'Centerville', 'country_code' => 'US'],\n            ['name' => 'Maracaju', 'country_code' => 'BR'],\n            ['name' => 'Kreuzlingen', 'country_code' => 'CH'],\n            ['name' => 'Taraka', 'country_code' => 'PH'],\n            ['name' => 'Juchitepec', 'country_code' => 'MX'],\n            ['name' => 'Lupeni', 'country_code' => 'RO'],\n            ['name' => 'Ladario', 'country_code' => 'BR'],\n            ['name' => 'Santo Antonio do Ica', 'country_code' => 'BR'],\n            ['name' => 'Sredneuralsk', 'country_code' => 'RU'],\n            ['name' => 'Van Buren', 'country_code' => 'US'],\n            ['name' => 'Greeneville', 'country_code' => 'US'],\n            ['name' => 'Tata', 'country_code' => 'HU'],\n            ['name' => 'Waycross', 'country_code' => 'US'],\n            ['name' => 'Koziatyn', 'country_code' => 'UA'],\n            ['name' => 'Partizanske', 'country_code' => 'SK'],\n            ['name' => 'Inaja', 'country_code' => 'BR'],\n            ['name' => 'Soledad Atzompa', 'country_code' => 'MX'],\n            ['name' => 'Juchen', 'country_code' => 'DE'],\n            ['name' => 'Bulle', 'country_code' => 'CH'],\n            ['name' => 'Poggiomarino', 'country_code' => 'IT'],\n            ['name' => 'Epernay', 'country_code' => 'FR'],\n            ['name' => 'Carletonville', 'country_code' => 'ZA'],\n            ['name' => 'Half Moon Bay', 'country_code' => 'US'],\n            ['name' => 'Krnov', 'country_code' => 'CZ'],\n            ['name' => 'Hingham', 'country_code' => 'US'],\n            ['name' => 'Santo Amaro da Imperatriz', 'country_code' => 'BR'],\n            ['name' => 'Vigonza', 'country_code' => 'IT'],\n            ['name' => 'Zheleznogorsk-Ilimskiy', 'country_code' => 'RU'],\n            ['name' => 'Dillenburg', 'country_code' => 'DE'],\n            ['name' => 'Gitega', 'country_code' => 'BI'],\n            ['name' => 'Belton', 'country_code' => 'US'],\n            ['name' => 'Qianmotou', 'country_code' => 'CN'],\n            ['name' => 'Lentini', 'country_code' => 'IT'],\n            ['name' => 'Baglung', 'country_code' => 'NP'],\n            ['name' => 'Fucecchio', 'country_code' => 'IT'],\n            ['name' => 'Jacksonville Beach', 'country_code' => 'US'],\n            ['name' => 'Coronel Suarez', 'country_code' => 'AR'],\n            ['name' => 'Acton', 'country_code' => 'US'],\n            ['name' => 'Sehnde', 'country_code' => 'DE'],\n            ['name' => 'Havlickuv Brod', 'country_code' => 'CZ'],\n            ['name' => 'Herzogenaurach', 'country_code' => 'DE'],\n            ['name' => 'Ilion', 'country_code' => 'US'],\n            ['name' => 'Kulgam', 'country_code' => 'IN'],\n            ['name' => 'Kato Polemidia', 'country_code' => 'CY'],\n            ['name' => 'Macia', 'country_code' => 'MZ'],\n            ['name' => 'Sobradinho', 'country_code' => 'BR'],\n            ['name' => 'Vilaseca de Solcina', 'country_code' => 'ES'],\n            ['name' => 'Seymour', 'country_code' => 'US'],\n            ['name' => 'Oakdale', 'country_code' => 'US'],\n            ['name' => 'Ipatovo', 'country_code' => 'RU'],\n            ['name' => 'Bronnitsy', 'country_code' => 'RU'],\n            ['name' => 'Severobaykalsk', 'country_code' => 'RU'],\n            ['name' => 'Zarnesti', 'country_code' => 'RO'],\n            ['name' => 'Xiaping', 'country_code' => 'CN'],\n            ['name' => 'Liria', 'country_code' => 'ES'],\n            ['name' => 'Gelnhausen', 'country_code' => 'DE'],\n            ['name' => 'Unecha', 'country_code' => 'RU'],\n            ['name' => 'Cacule', 'country_code' => 'BR'],\n            ['name' => 'Madisonville', 'country_code' => 'US'],\n            ['name' => 'Canalete', 'country_code' => 'CO'],\n            ['name' => 'Alcala', 'country_code' => 'CO'],\n            ['name' => 'Romulus', 'country_code' => 'US'],\n            ['name' => 'Kefar Yona', 'country_code' => 'IL'],\n            ['name' => 'Wallenhorst', 'country_code' => 'DE'],\n            ['name' => 'San Ignacio de Velasco', 'country_code' => 'BO'],\n            ['name' => 'Balete', 'country_code' => 'PH'],\n            ['name' => 'El Paso', 'country_code' => 'CO'],\n            ['name' => 'Alegria', 'country_code' => 'PH'],\n            ['name' => 'Bni Frassen', 'country_code' => 'MA'],\n            ['name' => 'Icod de los Vinos', 'country_code' => 'ES'],\n            ['name' => 'Troyan', 'country_code' => 'BG'],\n            ['name' => 'Floridia', 'country_code' => 'IT'],\n            ['name' => 'Hisor', 'country_code' => 'TJ'],\n            ['name' => 'Leland', 'country_code' => 'US'],\n            ['name' => 'Brodosqui', 'country_code' => 'BR'],\n            ['name' => 'Laguna de Duero', 'country_code' => 'ES'],\n            ['name' => 'Ternate', 'country_code' => 'PH'],\n            ['name' => 'Elektrogorsk', 'country_code' => 'RU'],\n            ['name' => 'Ahualulco de Mercado', 'country_code' => 'MX'],\n            ['name' => 'Cessnock', 'country_code' => 'AU'],\n            ['name' => 'Rolling Meadows', 'country_code' => 'US'],\n            ['name' => 'Megara', 'country_code' => 'GR'],\n            ['name' => 'Bondo', 'country_code' => 'CD'],\n            ['name' => 'Davlekanovo', 'country_code' => 'RU'],\n            ['name' => 'Nijlen', 'country_code' => 'BE'],\n            ['name' => 'Andoany', 'country_code' => 'MG'],\n            ['name' => 'Wekiwa Springs', 'country_code' => 'US'],\n            ['name' => 'Jieshang', 'country_code' => 'CN'],\n            ['name' => 'Northdale', 'country_code' => 'US'],\n            ['name' => 'Fort Hood', 'country_code' => 'US'],\n            ['name' => 'Benbrook', 'country_code' => 'US'],\n            ['name' => 'Nagtipunan', 'country_code' => 'PH'],\n            ['name' => 'Medeiros Neto', 'country_code' => 'BR'],\n            ['name' => 'Limbuhan', 'country_code' => 'PH'],\n            ['name' => 'Tirat Karmel', 'country_code' => 'IL'],\n            ['name' => 'Arbroath', 'country_code' => 'GB'],\n            ['name' => 'Zion', 'country_code' => 'US'],\n            ['name' => 'San Rafael del Sur', 'country_code' => 'NI'],\n            ['name' => 'Lensk', 'country_code' => 'RU'],\n            ['name' => 'Watertown', 'country_code' => 'US'],\n            ['name' => 'Frontignan', 'country_code' => 'FR'],\n            ['name' => 'Sederot', 'country_code' => 'IL'],\n            ['name' => 'Montrose', 'country_code' => 'US'],\n            ['name' => 'Neihuzhai', 'country_code' => 'CN'],\n            ['name' => 'Columbus', 'country_code' => 'US'],\n            ['name' => 'Conceicao de Macabu', 'country_code' => 'BR'],\n            ['name' => 'San Feliu de Guixols', 'country_code' => 'ES'],\n            ['name' => 'Labrador', 'country_code' => 'PH'],\n            ['name' => 'Frascati', 'country_code' => 'IT'],\n            ['name' => 'Brotas', 'country_code' => 'BR'],\n            ['name' => 'Ortona', 'country_code' => 'IT'],\n            ['name' => 'Moncada', 'country_code' => 'ES'],\n            ['name' => 'Plainview', 'country_code' => 'US'],\n            ['name' => 'Riehen', 'country_code' => 'CH'],\n            ['name' => 'Ruwa', 'country_code' => 'ZW'],\n            ['name' => 'Veinticinco de Mayo', 'country_code' => 'AR'],\n            ['name' => 'Auburn', 'country_code' => 'US'],\n            ['name' => 'Teorama', 'country_code' => 'CO'],\n            ['name' => 'Arnold', 'country_code' => 'US'],\n            ['name' => 'Cordeiropolis', 'country_code' => 'BR'],\n            ['name' => 'Avon', 'country_code' => 'US'],\n            ['name' => 'Tanki Leendert', 'country_code' => 'AW'],\n            ['name' => 'Horgen', 'country_code' => 'CH'],\n            ['name' => 'Peritoro', 'country_code' => 'BR'],\n            ['name' => 'San Felipe', 'country_code' => 'PH'],\n            ['name' => 'Ortigueira', 'country_code' => 'BR'],\n            ['name' => 'San Fernando', 'country_code' => 'PH'],\n            ['name' => 'Santo Tomas', 'country_code' => 'PH'],\n            ['name' => 'Achkhoy-Martan', 'country_code' => 'RU'],\n            ['name' => 'San Lorenzo de Esmeraldas', 'country_code' => 'EC'],\n            ['name' => 'Godalming', 'country_code' => 'GB'],\n            ['name' => 'Wilmington', 'country_code' => 'US'],\n            ['name' => 'Tobati', 'country_code' => 'PY'],\n            ['name' => 'Loves Park', 'country_code' => 'US'],\n            ['name' => 'Canton', 'country_code' => 'US'],\n            ['name' => 'Avellaneda', 'country_code' => 'AR'],\n            ['name' => 'Dunajska Streda', 'country_code' => 'SK'],\n            ['name' => 'Canico', 'country_code' => 'PT'],\n            ['name' => 'Rawtenstall', 'country_code' => 'GB'],\n            ['name' => 'Ban Bang Rin', 'country_code' => 'TH'],\n            ['name' => 'La Prairie', 'country_code' => 'CA'],\n            ['name' => 'Ponedera', 'country_code' => 'CO'],\n            ['name' => 'San Fernando', 'country_code' => 'PH'],\n            ['name' => 'Palmeiras de Goias', 'country_code' => 'BR'],\n            ['name' => 'Thorigny-sur-Marne', 'country_code' => 'FR'],\n            ['name' => 'Yarmouth', 'country_code' => 'US'],\n            ['name' => 'Vero Beach South', 'country_code' => 'US'],\n            ['name' => 'Pitogo', 'country_code' => 'PH'],\n            ['name' => 'Lermontov', 'country_code' => 'RU'],\n            ['name' => 'Malinao', 'country_code' => 'PH'],\n            ['name' => 'Medford', 'country_code' => 'US'],\n            ['name' => 'Vilnohirsk', 'country_code' => 'UA'],\n            ['name' => 'Netphen', 'country_code' => 'DE'],\n            ['name' => 'Alcobaca', 'country_code' => 'BR'],\n            ['name' => 'Oliveira do Bairro', 'country_code' => 'PT'],\n            ['name' => 'Puchheim', 'country_code' => 'DE'],\n            ['name' => 'Jiucangzhou', 'country_code' => 'CN'],\n            ['name' => 'Calverley', 'country_code' => 'GB'],\n            ['name' => 'Qatana', 'country_code' => 'SY'],\n            ['name' => 'Sheyban', 'country_code' => 'IR'],\n            ['name' => 'Sao Joao de Pirabas', 'country_code' => 'BR'],\n            ['name' => 'Itaocara', 'country_code' => 'BR'],\n            ['name' => 'Shiling', 'country_code' => 'CN'],\n            ['name' => 'Qiryat Mal akhi', 'country_code' => 'IL'],\n            ['name' => 'Lisle', 'country_code' => 'US'],\n            ['name' => 'Riachao das Neves', 'country_code' => 'BR'],\n            ['name' => 'Jabonga', 'country_code' => 'PH'],\n            ['name' => 'Oud-Zuilen', 'country_code' => 'NL'],\n            ['name' => 'Sevan', 'country_code' => 'AM'],\n            ['name' => 'El Tejar', 'country_code' => 'GT'],\n            ['name' => 'Qiryat Shemona', 'country_code' => 'IL'],\n            ['name' => 'Eschborn', 'country_code' => 'DE'],\n            ['name' => 'Bacolod', 'country_code' => 'PH'],\n            ['name' => 'Tambau', 'country_code' => 'BR'],\n            ['name' => 'Kolo', 'country_code' => 'PL'],\n            ['name' => 'Tototlan', 'country_code' => 'MX'],\n            ['name' => 'East Retford', 'country_code' => 'GB'],\n            ['name' => 'Senador Guiomard', 'country_code' => 'BR'],\n            ['name' => 'Loanda', 'country_code' => 'BR'],\n            ['name' => 'Vranov nad Topl ou', 'country_code' => 'SK'],\n            ['name' => 'Nakashunbetsu', 'country_code' => 'JP'],\n            ['name' => 'Devonport', 'country_code' => 'AU'],\n            ['name' => 'Bom Jesus dos Perdoes', 'country_code' => 'BR'],\n            ['name' => 'Tecumseh', 'country_code' => 'CA'],\n            ['name' => 'Maibog', 'country_code' => 'PH'],\n            ['name' => 'Itambacuri', 'country_code' => 'BR'],\n            ['name' => 'Greenbelt', 'country_code' => 'US'],\n            ['name' => 'Stoneham', 'country_code' => 'US'],\n            ['name' => 'Nevyansk', 'country_code' => 'RU'],\n            ['name' => 'Senden', 'country_code' => 'DE'],\n            ['name' => 'Itapora', 'country_code' => 'BR'],\n            ['name' => 'Bassar', 'country_code' => 'TG'],\n            ['name' => 'Tadmait', 'country_code' => 'DZ'],\n            ['name' => 'Warburg', 'country_code' => 'DE'],\n            ['name' => 'Taquarituba', 'country_code' => 'BR'],\n            ['name' => 'Altea', 'country_code' => 'ES'],\n            ['name' => 'Molodohvardiisk', 'country_code' => 'UA'],\n            ['name' => 'Kolpashevo', 'country_code' => 'RU'],\n            ['name' => 'Linstead', 'country_code' => 'JM'],\n            ['name' => 'Areia', 'country_code' => 'BR'],\n            ['name' => 'Abreus', 'country_code' => 'CU'],\n            ['name' => 'Granite Bay', 'country_code' => 'US'],\n            ['name' => 'Fokino', 'country_code' => 'RU'],\n            ['name' => 'Pezinok', 'country_code' => 'SK'],\n            ['name' => 'Campia Turzii', 'country_code' => 'RO'],\n            ['name' => 'Walsrode', 'country_code' => 'DE'],\n            ['name' => 'Puerto Concordia', 'country_code' => 'CO'],\n            ['name' => 'Mandelieu-la-Napoule', 'country_code' => 'FR'],\n            ['name' => 'Assare', 'country_code' => 'BR'],\n            ['name' => 'Tamiahua', 'country_code' => 'MX'],\n            ['name' => 'Abu', 'country_code' => 'IN'],\n            ['name' => 'Gersthofen', 'country_code' => 'DE'],\n            ['name' => 'Kilkis', 'country_code' => 'GR'],\n            ['name' => 'Dickinson', 'country_code' => 'US'],\n            ['name' => 'Madalum', 'country_code' => 'PH'],\n            ['name' => 'Balen', 'country_code' => 'BE'],\n            ['name' => 'Puenteareas', 'country_code' => 'ES'],\n            ['name' => 'Bulusan', 'country_code' => 'PH'],\n            ['name' => 'Komlo', 'country_code' => 'HU'],\n            ['name' => 'Esparraguera', 'country_code' => 'ES'],\n            ['name' => 'Mandaguacu', 'country_code' => 'BR'],\n            ['name' => 'Oxford', 'country_code' => 'US'],\n            ['name' => 'Tashtagol', 'country_code' => 'RU'],\n            ['name' => 'Tupiza', 'country_code' => 'BO'],\n            ['name' => 'Ganassi', 'country_code' => 'PH'],\n            ['name' => 'Lengir', 'country_code' => 'KZ'],\n            ['name' => 'Capinzal', 'country_code' => 'BR'],\n            ['name' => 'Kenmore', 'country_code' => 'US'],\n            ['name' => 'Siwah', 'country_code' => 'EG'],\n            ['name' => 'Allison Park', 'country_code' => 'US'],\n            ['name' => 'Farmington', 'country_code' => 'US'],\n            ['name' => 'Nanyangcun', 'country_code' => 'CN'],\n            ['name' => 'Kilwinning', 'country_code' => 'GB'],\n            ['name' => 'Gusinoozersk', 'country_code' => 'RU'],\n            ['name' => 'Orleaes', 'country_code' => 'BR'],\n            ['name' => 'Wandlitz', 'country_code' => 'DE'],\n            ['name' => 'San Miguel Chicaj', 'country_code' => 'GT'],\n            ['name' => 'Kapfenberg', 'country_code' => 'AT'],\n            ['name' => 'Wulongpu', 'country_code' => 'CN'],\n            ['name' => 'Strakonice', 'country_code' => 'CZ'],\n            ['name' => 'Mercato San Severino', 'country_code' => 'IT'],\n            ['name' => 'Cuilapan de Guerrero', 'country_code' => 'MX'],\n            ['name' => 'Gainsborough', 'country_code' => 'GB'],\n            ['name' => 'Wichian Buri', 'country_code' => 'TH'],\n            ['name' => 'Achi', 'country_code' => 'CO'],\n            ['name' => 'Calbiga', 'country_code' => 'PH'],\n            ['name' => 'Whyalla', 'country_code' => 'AU'],\n            ['name' => 'Princesa Isabel', 'country_code' => 'BR'],\n            ['name' => 'Grajewo', 'country_code' => 'PL'],\n            ['name' => 'Amoucha', 'country_code' => 'DZ'],\n            ['name' => 'Gyegu', 'country_code' => 'CN'],\n            ['name' => 'Hastings', 'country_code' => 'US'],\n            ['name' => 'Montgomery', 'country_code' => 'US'],\n            ['name' => 'Encantado', 'country_code' => 'BR'],\n            ['name' => 'Curumani', 'country_code' => 'CO'],\n            ['name' => 'Guanajay', 'country_code' => 'CU'],\n            ['name' => 'Oyonnax', 'country_code' => 'FR'],\n            ['name' => 'Orobo', 'country_code' => 'BR'],\n            ['name' => 'Huaibaijie', 'country_code' => 'CN'],\n            ['name' => 'Aiud', 'country_code' => 'RO'],\n            ['name' => 'Conil de la Frontera', 'country_code' => 'ES'],\n            ['name' => 'Makinsk', 'country_code' => 'KZ'],\n            ['name' => 'Quarai', 'country_code' => 'BR'],\n            ['name' => 'Plainsboro', 'country_code' => 'US'],\n            ['name' => 'Yeadon', 'country_code' => 'GB'],\n            ['name' => 'Yuli', 'country_code' => 'CN'],\n            ['name' => 'Yako', 'country_code' => 'BF'],\n            ['name' => 'Vale de Cambra', 'country_code' => 'PT'],\n            ['name' => 'Yanshanbu', 'country_code' => 'CN'],\n            ['name' => 'Pirenopolis', 'country_code' => 'BR'],\n            ['name' => 'Rockingham', 'country_code' => 'US'],\n            ['name' => 'Krasnouralsk', 'country_code' => 'RU'],\n            ['name' => 'Zedelgem', 'country_code' => 'BE'],\n            ['name' => 'Krasnoarmeysk', 'country_code' => 'RU'],\n            ['name' => 'Greenfield', 'country_code' => 'US'],\n            ['name' => 'Taxisco', 'country_code' => 'GT'],\n            ['name' => 'West Goshen', 'country_code' => 'US'],\n            ['name' => 'Auburn', 'country_code' => 'US'],\n            ['name' => 'Frederickson', 'country_code' => 'US'],\n            ['name' => 'Beixingzhuang', 'country_code' => 'CN'],\n            ['name' => 'Zvenigorod', 'country_code' => 'RU'],\n            ['name' => 'Steenwijk', 'country_code' => 'NL'],\n            ['name' => 'Karlsfeld', 'country_code' => 'DE'],\n            ['name' => 'Tighadouine', 'country_code' => 'MA'],\n            ['name' => 'Willoughby', 'country_code' => 'US'],\n            ['name' => 'Dabeiba', 'country_code' => 'CO'],\n            ['name' => 'Amaraji', 'country_code' => 'BR'],\n            ['name' => 'Wadenswil', 'country_code' => 'CH'],\n            ['name' => 'Guadalupe', 'country_code' => 'CO'],\n            ['name' => 'Fayid', 'country_code' => 'EG'],\n            ['name' => 'Sidi Ifni', 'country_code' => 'MA'],\n            ['name' => 'Conselheiro Pena', 'country_code' => 'BR'],\n            ['name' => 'San Agustin', 'country_code' => 'PH'],\n            ['name' => 'Manghit', 'country_code' => 'UZ'],\n            ['name' => 'Mustang', 'country_code' => 'US'],\n            ['name' => 'Palma di Montechiaro', 'country_code' => 'IT'],\n            ['name' => 'Mount Pearl Park', 'country_code' => 'CA'],\n            ['name' => 'Roxbury', 'country_code' => 'US'],\n            ['name' => 'La Democracia', 'country_code' => 'GT'],\n            ['name' => 'Znamianka', 'country_code' => 'UA'],\n            ['name' => 'Haywards Heath', 'country_code' => 'GB'],\n            ['name' => 'Wertheim', 'country_code' => 'DE'],\n            ['name' => 'Masterton', 'country_code' => 'NZ'],\n            ['name' => 'Cullera', 'country_code' => 'ES'],\n            ['name' => 'Uberlingen', 'country_code' => 'DE'],\n            ['name' => 'Maying', 'country_code' => 'CN'],\n            ['name' => 'Neusass', 'country_code' => 'DE'],\n            ['name' => 'Leutkirch im Allgau', 'country_code' => 'DE'],\n            ['name' => 'Patterson', 'country_code' => 'US'],\n            ['name' => 'Eckernforde', 'country_code' => 'DE'],\n            ['name' => 'Manhumirim', 'country_code' => 'BR'],\n            ['name' => 'Tervuren', 'country_code' => 'BE'],\n            ['name' => 'Isilkul', 'country_code' => 'RU'],\n            ['name' => 'Gallup', 'country_code' => 'US'],\n            ['name' => 'Mutuipe', 'country_code' => 'BR'],\n            ['name' => 'Zacualpa', 'country_code' => 'GT'],\n            ['name' => 'Radcliff', 'country_code' => 'US'],\n            ['name' => 'Baroy', 'country_code' => 'PH'],\n            ['name' => 'Thebes', 'country_code' => 'GR'],\n            ['name' => 'Westerstede', 'country_code' => 'DE'],\n            ['name' => 'Buriti Bravo', 'country_code' => 'BR'],\n            ['name' => 'Trezzano sul Naviglio', 'country_code' => 'IT'],\n            ['name' => 'Patacamaya', 'country_code' => 'BO'],\n            ['name' => 'Prieto Diaz', 'country_code' => 'PH'],\n            ['name' => 'Crystal', 'country_code' => 'US'],\n            ['name' => 'Olivet', 'country_code' => 'FR'],\n            ['name' => 'Arcos de Valdevez', 'country_code' => 'PT'],\n            ['name' => 'Kalat', 'country_code' => 'PK'],\n            ['name' => 'San Raimundo', 'country_code' => 'GT'],\n            ['name' => 'Guryevsk', 'country_code' => 'RU'],\n            ['name' => 'Lengerich', 'country_code' => 'DE'],\n            ['name' => 'Belton', 'country_code' => 'US'],\n            ['name' => 'Nazca', 'country_code' => 'PE'],\n            ['name' => 'Allen', 'country_code' => 'AR'],\n            ['name' => 'Weilheim', 'country_code' => 'DE'],\n            ['name' => 'Forbach', 'country_code' => 'FR'],\n            ['name' => 'Glauchau', 'country_code' => 'DE'],\n            ['name' => 'Catigbian', 'country_code' => 'PH'],\n            ['name' => 'Montilla', 'country_code' => 'ES'],\n            ['name' => 'Dzialdowo', 'country_code' => 'PL'],\n            ['name' => 'Frauenfeld', 'country_code' => 'CH'],\n            ['name' => 'Catamayo', 'country_code' => 'EC'],\n            ['name' => 'San Cataldo', 'country_code' => 'IT'],\n            ['name' => 'Tocantinopolis', 'country_code' => 'BR'],\n            ['name' => 'Oteiza', 'country_code' => 'PH'],\n            ['name' => 'Pace', 'country_code' => 'US'],\n            ['name' => 'Naqadah', 'country_code' => 'EG'],\n            ['name' => 'Barbasa', 'country_code' => 'PH'],\n            ['name' => 'Coin', 'country_code' => 'ES'],\n            ['name' => 'Rastede', 'country_code' => 'DE'],\n            ['name' => 'Tunuyan', 'country_code' => 'AR'],\n            ['name' => 'Losser', 'country_code' => 'NL'],\n            ['name' => 'Naciria', 'country_code' => 'DZ'],\n            ['name' => 'Karachayevsk', 'country_code' => 'RU'],\n            ['name' => 'Saint-Genis-Laval', 'country_code' => 'FR'],\n            ['name' => 'Ataco', 'country_code' => 'CO'],\n            ['name' => 'Shaomi', 'country_code' => 'CN'],\n            ['name' => 'Marshall', 'country_code' => 'US'],\n            ['name' => 'Cartagena', 'country_code' => 'CL'],\n            ['name' => 'Alnif', 'country_code' => 'MA'],\n            ['name' => 'Selouane', 'country_code' => 'MA'],\n            ['name' => 'Haar', 'country_code' => 'DE'],\n            ['name' => 'Laguna Beach', 'country_code' => 'US'],\n            ['name' => 'Goldasht', 'country_code' => 'IR'],\n            ['name' => 'Webster Groves', 'country_code' => 'US'],\n            ['name' => 'Acworth', 'country_code' => 'US'],\n            ['name' => 'Le Creusot', 'country_code' => 'FR'],\n            ['name' => 'Royken', 'country_code' => 'NO'],\n            ['name' => 'Cinco Saltos', 'country_code' => 'AR'],\n            ['name' => 'Griffin', 'country_code' => 'US'],\n            ['name' => 'Santa Fe de Antioquia', 'country_code' => 'CO'],\n            ['name' => 'Itaparica', 'country_code' => 'BR'],\n            ['name' => 'Curchorem', 'country_code' => 'IN'],\n            ['name' => 'Vreden', 'country_code' => 'DE'],\n            ['name' => 'Botevgrad', 'country_code' => 'BG'],\n            ['name' => 'Morton Grove', 'country_code' => 'US'],\n            ['name' => 'Conceicao da Feira', 'country_code' => 'BR'],\n            ['name' => 'Caibiran', 'country_code' => 'PH'],\n            ['name' => 'Lysander', 'country_code' => 'US'],\n            ['name' => 'Keene', 'country_code' => 'US'],\n            ['name' => 'Padre Burgos', 'country_code' => 'PH'],\n            ['name' => 'Velsk', 'country_code' => 'RU'],\n            ['name' => 'Marina', 'country_code' => 'US'],\n            ['name' => 'Oliveira dos Brejinhos', 'country_code' => 'BR'],\n            ['name' => 'Solon', 'country_code' => 'US'],\n            ['name' => 'Rixensart', 'country_code' => 'BE'],\n            ['name' => 'Sarzana', 'country_code' => 'IT'],\n            ['name' => 'Valasske Mezirici', 'country_code' => 'CZ'],\n            ['name' => 'Svetlyy', 'country_code' => 'RU'],\n            ['name' => 'Petrila', 'country_code' => 'RO'],\n            ['name' => 'Bad Kissingen', 'country_code' => 'DE'],\n            ['name' => 'San Agustin', 'country_code' => 'PH'],\n            ['name' => 'Massarosa', 'country_code' => 'IT'],\n            ['name' => 'Kaltenkirchen', 'country_code' => 'DE'],\n            ['name' => 'San Miguel de Papasquiaro', 'country_code' => 'MX'],\n            ['name' => 'Barnegat', 'country_code' => 'US'],\n            ['name' => 'New Brighton', 'country_code' => 'US'],\n            ['name' => 'Iracemapolis', 'country_code' => 'BR'],\n            ['name' => 'Mandan', 'country_code' => 'US'],\n            ['name' => 'Kalachinsk', 'country_code' => 'RU'],\n            ['name' => 'Buxton', 'country_code' => 'GB'],\n            ['name' => 'Ladyzhyn', 'country_code' => 'UA'],\n            ['name' => 'Carmo do Cajuru', 'country_code' => 'BR'],\n            ['name' => 'Buritis', 'country_code' => 'BR'],\n            ['name' => 'Donaueschingen', 'country_code' => 'DE'],\n            ['name' => 'Morrinhos', 'country_code' => 'BR'],\n            ['name' => 'Buenavista', 'country_code' => 'CO'],\n            ['name' => 'Winchester', 'country_code' => 'US'],\n            ['name' => 'Amalfi', 'country_code' => 'CO'],\n            ['name' => 'Manzanares', 'country_code' => 'CO'],\n            ['name' => 'Salcedo', 'country_code' => 'PH'],\n            ['name' => 'Manosque', 'country_code' => 'FR'],\n            ['name' => 'Erval d Oeste', 'country_code' => 'BR'],\n            ['name' => 'Seynod', 'country_code' => 'FR'],\n            ['name' => 'Frameries', 'country_code' => 'BE'],\n            ['name' => 'Staraya Kupavna', 'country_code' => 'RU'],\n            ['name' => 'Beek en Donk', 'country_code' => 'NL'],\n            ['name' => 'Lefkada', 'country_code' => 'GR'],\n            ['name' => 'Barbate de Franco', 'country_code' => 'ES'],\n            ['name' => 'Sal a', 'country_code' => 'SK'],\n            ['name' => 'Tubungan', 'country_code' => 'PH'],\n            ['name' => 'Pittsburg', 'country_code' => 'US'],\n            ['name' => 'Elizabeth City', 'country_code' => 'US'],\n            ['name' => 'Harriman', 'country_code' => 'US'],\n            ['name' => 'Greenfield', 'country_code' => 'US'],\n            ['name' => 'Mondovi', 'country_code' => 'IT'],\n            ['name' => 'Torre del Mar', 'country_code' => 'ES'],\n            ['name' => 'Zhengtun', 'country_code' => 'CN'],\n            ['name' => 'Magdalena', 'country_code' => 'MX'],\n            ['name' => 'Uenohara', 'country_code' => 'JP'],\n            ['name' => 'Souk Tlet El Gharb', 'country_code' => 'MA'],\n            ['name' => 'Dona Remedios Trinidad', 'country_code' => 'PH'],\n            ['name' => 'Oytal', 'country_code' => 'KZ'],\n            ['name' => 'Metzingen', 'country_code' => 'DE'],\n            ['name' => 'Sondrio', 'country_code' => 'IT'],\n            ['name' => 'Fairhope', 'country_code' => 'US'],\n            ['name' => 'Cottage Lake', 'country_code' => 'US'],\n            ['name' => 'Machesney Park', 'country_code' => 'US'],\n            ['name' => 'Wettingen', 'country_code' => 'CH'],\n            ['name' => 'Pachino', 'country_code' => 'IT'],\n            ['name' => 'Braidwood', 'country_code' => 'US'],\n            ['name' => 'Lochristi', 'country_code' => 'BE'],\n            ['name' => 'Hurricane', 'country_code' => 'US'],\n            ['name' => 'Sant Arcangelo di Romagna', 'country_code' => 'IT'],\n            ['name' => 'Onondaga', 'country_code' => 'US'],\n            ['name' => 'Laupheim', 'country_code' => 'DE'],\n            ['name' => 'Sagbayan', 'country_code' => 'PH'],\n            ['name' => 'Pogradec', 'country_code' => 'AL'],\n            ['name' => 'Omagh', 'country_code' => 'GB'],\n            ['name' => 'Lajas', 'country_code' => 'CU'],\n            ['name' => 'Dunaharaszti', 'country_code' => 'HU'],\n            ['name' => 'Annecy-le-Vieux', 'country_code' => 'FR'],\n            ['name' => 'Nagold', 'country_code' => 'DE'],\n            ['name' => 'Flores', 'country_code' => 'BR'],\n            ['name' => 'Wareham', 'country_code' => 'US'],\n            ['name' => 'Baliguian', 'country_code' => 'PH'],\n            ['name' => 'Pudsey', 'country_code' => 'GB'],\n            ['name' => 'Baraki Barak', 'country_code' => 'AF'],\n            ['name' => 'Trussville', 'country_code' => 'US'],\n            ['name' => 'Goleniow', 'country_code' => 'PL'],\n            ['name' => 'Pilar de la Horadada', 'country_code' => 'ES'],\n            ['name' => 'Karben', 'country_code' => 'DE'],\n            ['name' => 'Waynesboro', 'country_code' => 'US'],\n            ['name' => 'Yahualica de Gonzalez Gallo', 'country_code' => 'MX'],\n            ['name' => 'Feira Grande', 'country_code' => 'BR'],\n            ['name' => 'Cuyo', 'country_code' => 'PH'],\n            ['name' => 'Tecali', 'country_code' => 'MX'],\n            ['name' => 'Lempaala', 'country_code' => 'FI'],\n            ['name' => 'Stadthagen', 'country_code' => 'DE'],\n            ['name' => 'Huangzhai', 'country_code' => 'CN'],\n            ['name' => 'Darton', 'country_code' => 'GB'],\n            ['name' => 'Burg', 'country_code' => 'DE'],\n            ['name' => 'Mako', 'country_code' => 'HU'],\n            ['name' => 'Pushkar', 'country_code' => 'IN'],\n            ['name' => 'Huautla', 'country_code' => 'MX'],\n            ['name' => 'Paraopeba', 'country_code' => 'BR'],\n            ['name' => 'Sardinata', 'country_code' => 'CO'],\n            ['name' => 'Edewecht', 'country_code' => 'DE'],\n            ['name' => 'Puente Nacional', 'country_code' => 'MX'],\n            ['name' => 'Dawmat al Jandal', 'country_code' => 'SA'],\n            ['name' => 'Burlington', 'country_code' => 'US'],\n            ['name' => 'Buftea', 'country_code' => 'RO'],\n            ['name' => 'Johnston', 'country_code' => 'US'],\n            ['name' => 'Porto Torres', 'country_code' => 'IT'],\n            ['name' => 'Corcoran', 'country_code' => 'US'],\n            ['name' => 'Meadville', 'country_code' => 'US'],\n            ['name' => 'Paese', 'country_code' => 'IT'],\n            ['name' => 'Ariano Irpino', 'country_code' => 'IT'],\n            ['name' => 'Martellago', 'country_code' => 'IT'],\n            ['name' => 'Belabo', 'country_code' => 'CM'],\n            ['name' => 'Kadiria', 'country_code' => 'DZ'],\n            ['name' => 'Carrascal', 'country_code' => 'PH'],\n            ['name' => 'Wenceslau Guimaraes', 'country_code' => 'BR'],\n            ['name' => 'Caravelas', 'country_code' => 'BR'],\n            ['name' => 'Happy Valley', 'country_code' => 'US'],\n            ['name' => 'Ginosa', 'country_code' => 'IT'],\n            ['name' => 'Friesoythe', 'country_code' => 'DE'],\n            ['name' => 'El Progreso', 'country_code' => 'GT'],\n            ['name' => 'East Peoria', 'country_code' => 'US'],\n            ['name' => 'Westerly', 'country_code' => 'US'],\n            ['name' => 'Agropoli', 'country_code' => 'IT'],\n            ['name' => 'Heide', 'country_code' => 'DE'],\n            ['name' => 'Bedford', 'country_code' => 'US'],\n            ['name' => 'Santo Antonio de Posse', 'country_code' => 'BR'],\n            ['name' => 'Hopewell', 'country_code' => 'US'],\n            ['name' => 'Mutata', 'country_code' => 'CO'],\n            ['name' => 'Fort Walton Beach', 'country_code' => 'US'],\n            ['name' => 'Radevormwald', 'country_code' => 'DE'],\n            ['name' => 'Nixa', 'country_code' => 'US'],\n            ['name' => 'Caba', 'country_code' => 'PH'],\n            ['name' => 'Nadvirna', 'country_code' => 'UA'],\n            ['name' => 'Olanchito', 'country_code' => 'HN'],\n            ['name' => 'Florsheim', 'country_code' => 'DE'],\n            ['name' => 'Socorro', 'country_code' => 'PH'],\n            ['name' => 'Khadyzhensk', 'country_code' => 'RU'],\n            ['name' => 'Hythe', 'country_code' => 'GB'],\n            ['name' => 'Santa Ana Nextlalpan', 'country_code' => 'MX'],\n            ['name' => 'Gaoguzhuang', 'country_code' => 'CN'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'Apolda', 'country_code' => 'DE'],\n            ['name' => 'Zhedao', 'country_code' => 'CN'],\n            ['name' => 'Munster', 'country_code' => 'US'],\n            ['name' => 'Christiansburg', 'country_code' => 'US'],\n            ['name' => 'Gorgonzola', 'country_code' => 'IT'],\n            ['name' => 'Anthem', 'country_code' => 'US'],\n            ['name' => 'Roselle', 'country_code' => 'US'],\n            ['name' => 'Saint-Louis', 'country_code' => 'FR'],\n            ['name' => 'Amizmiz', 'country_code' => 'MA'],\n            ['name' => 'Halluin', 'country_code' => 'FR'],\n            ['name' => 'Garden City', 'country_code' => 'US'],\n            ['name' => 'El Colegio', 'country_code' => 'CO'],\n            ['name' => 'Koprivnice', 'country_code' => 'CZ'],\n            ['name' => 'Priego de Cordoba', 'country_code' => 'ES'],\n            ['name' => 'Tarnaveni', 'country_code' => 'RO'],\n            ['name' => 'Gardelegen', 'country_code' => 'DE'],\n            ['name' => 'La Jagua de Ibirico', 'country_code' => 'CO'],\n            ['name' => 'Castelnau-le-Lez', 'country_code' => 'FR'],\n            ['name' => 'Dianopolis', 'country_code' => 'BR'],\n            ['name' => 'Looc', 'country_code' => 'PH'],\n            ['name' => 'Santa Teresita', 'country_code' => 'PH'],\n            ['name' => 'Schwetzingen', 'country_code' => 'DE'],\n            ['name' => 'Klatovy', 'country_code' => 'CZ'],\n            ['name' => 'Barra da Estiva', 'country_code' => 'BR'],\n            ['name' => 'Warrensburg', 'country_code' => 'US'],\n            ['name' => 'Sao Vicente Ferrer', 'country_code' => 'BR'],\n            ['name' => 'Hockenheim', 'country_code' => 'DE'],\n            ['name' => 'Daxin', 'country_code' => 'CN'],\n            ['name' => 'Kihei', 'country_code' => 'US'],\n            ['name' => 'Union City', 'country_code' => 'US'],\n            ['name' => 'Casal di Principe', 'country_code' => 'IT'],\n            ['name' => 'Acatlan', 'country_code' => 'MX'],\n            ['name' => 'Zeewolde', 'country_code' => 'NL'],\n            ['name' => 'Borgomanero', 'country_code' => 'IT'],\n            ['name' => 'Lebu', 'country_code' => 'CL'],\n            ['name' => 'Mendeleyevsk', 'country_code' => 'RU'],\n            ['name' => 'Cornaredo', 'country_code' => 'IT'],\n            ['name' => 'Chankou', 'country_code' => 'CN'],\n            ['name' => 'Zhucaoying', 'country_code' => 'CN'],\n            ['name' => 'La Cruz', 'country_code' => 'CL'],\n            ['name' => 'Fougeres', 'country_code' => 'FR'],\n            ['name' => 'Corinto', 'country_code' => 'NI'],\n            ['name' => 'Florida Ridge', 'country_code' => 'US'],\n            ['name' => 'Ar Rutbah', 'country_code' => 'IQ'],\n            ['name' => 'Takahata', 'country_code' => 'JP'],\n            ['name' => 'Bubong', 'country_code' => 'PH'],\n            ['name' => 'Yahualica', 'country_code' => 'MX'],\n            ['name' => 'Demba', 'country_code' => 'CD'],\n            ['name' => 'Silver Firs', 'country_code' => 'US'],\n            ['name' => 'Alvarado', 'country_code' => 'MX'],\n            ['name' => 'Patian', 'country_code' => 'PH'],\n            ['name' => 'Presidente Medici', 'country_code' => 'BR'],\n            ['name' => 'Colorado', 'country_code' => 'BR'],\n            ['name' => 'Dolton', 'country_code' => 'US'],\n            ['name' => 'Natagaima', 'country_code' => 'CO'],\n            ['name' => 'Duncan', 'country_code' => 'US'],\n            ['name' => 'Chaumont', 'country_code' => 'FR'],\n            ['name' => 'Ramain', 'country_code' => 'PH'],\n            ['name' => 'Iraucuba', 'country_code' => 'BR'],\n            ['name' => 'Palestrina', 'country_code' => 'IT'],\n            ['name' => 'Brent', 'country_code' => 'US'],\n            ['name' => 'Bacchus Marsh', 'country_code' => 'AU'],\n            ['name' => 'Murayama', 'country_code' => 'JP'],\n            ['name' => 'Camana', 'country_code' => 'PE'],\n            ['name' => 'Lyman', 'country_code' => 'UA'],\n            ['name' => 'Villeneuve-sur-Lot', 'country_code' => 'FR'],\n            ['name' => 'San Andres Villa Seca', 'country_code' => 'GT'],\n            ['name' => 'El Doncello', 'country_code' => 'CO'],\n            ['name' => 'Northfield', 'country_code' => 'US'],\n            ['name' => 'Nikolskoye', 'country_code' => 'RU'],\n            ['name' => 'Tepexi de Rodriguez', 'country_code' => 'MX'],\n            ['name' => 'Gata', 'country_code' => 'PH'],\n            ['name' => 'Pingtan', 'country_code' => 'CN'],\n            ['name' => 'Highland', 'country_code' => 'US'],\n            ['name' => 'Nieuwerkerk aan den IJssel', 'country_code' => 'NL'],\n            ['name' => 'Las Torres de Cotillas', 'country_code' => 'ES'],\n            ['name' => 'Binnish', 'country_code' => 'SY'],\n            ['name' => 'Musselburgh', 'country_code' => 'GB'],\n            ['name' => 'Harim', 'country_code' => 'SY'],\n            ['name' => 'Sequim', 'country_code' => 'US'],\n            ['name' => 'Djibo', 'country_code' => 'BF'],\n            ['name' => 'Lyndhurst', 'country_code' => 'US'],\n            ['name' => 'Prairie Village', 'country_code' => 'US'],\n            ['name' => 'Djinet', 'country_code' => 'DZ'],\n            ['name' => 'Herent', 'country_code' => 'BE'],\n            ['name' => 'Atuntaqui', 'country_code' => 'EC'],\n            ['name' => 'Kuna', 'country_code' => 'US'],\n            ['name' => 'Coralville', 'country_code' => 'US'],\n            ['name' => 'Waltham Abbey', 'country_code' => 'GB'],\n            ['name' => 'Saint-Jean-de-Braye', 'country_code' => 'FR'],\n            ['name' => 'Popesti-Leordeni', 'country_code' => 'RO'],\n            ['name' => 'Sao Miguel do Araguaia', 'country_code' => 'BR'],\n            ['name' => 'Spremberg', 'country_code' => 'DE'],\n            ['name' => 'Fort Mill', 'country_code' => 'US'],\n            ['name' => 'Caracarai', 'country_code' => 'BR'],\n            ['name' => 'Bad Harzburg', 'country_code' => 'DE'],\n            ['name' => 'Mandirituba', 'country_code' => 'BR'],\n            ['name' => 'Terenos', 'country_code' => 'BR'],\n            ['name' => 'Ouardenine', 'country_code' => 'TN'],\n            ['name' => 'Bressanone', 'country_code' => 'IT'],\n            ['name' => 'Morris', 'country_code' => 'US'],\n            ['name' => 'Niskayuna', 'country_code' => 'US'],\n            ['name' => 'Comacchio', 'country_code' => 'IT'],\n            ['name' => 'Moinesti', 'country_code' => 'RO'],\n            ['name' => 'Waldkirch', 'country_code' => 'DE'],\n            ['name' => 'Hazebrouck', 'country_code' => 'FR'],\n            ['name' => 'Rose Hill', 'country_code' => 'US'],\n            ['name' => 'Ban Piang Luang', 'country_code' => 'TH'],\n            ['name' => 'Lihuzhuang', 'country_code' => 'CN'],\n            ['name' => 'Eseka', 'country_code' => 'CM'],\n            ['name' => 'Caojiachuan', 'country_code' => 'CN'],\n            ['name' => 'San Rafael del Norte', 'country_code' => 'NI'],\n            ['name' => 'Auch', 'country_code' => 'FR'],\n            ['name' => 'Millau', 'country_code' => 'FR'],\n            ['name' => 'Hudson', 'country_code' => 'US'],\n            ['name' => 'Geertruidenberg', 'country_code' => 'NL'],\n            ['name' => 'Lutz', 'country_code' => 'US'],\n            ['name' => 'Chapa de Mota', 'country_code' => 'MX'],\n            ['name' => 'Alhama de Murcia', 'country_code' => 'ES'],\n            ['name' => 'Taylors', 'country_code' => 'US'],\n            ['name' => 'Ramos', 'country_code' => 'PH'],\n            ['name' => 'Roanoke Rapids', 'country_code' => 'US'],\n            ['name' => 'Guilford', 'country_code' => 'US'],\n            ['name' => 'Vernon', 'country_code' => 'US'],\n            ['name' => 'Afourar', 'country_code' => 'MA'],\n            ['name' => 'Vega Baja', 'country_code' => 'PR'],\n            ['name' => 'Tangalan', 'country_code' => 'PH'],\n            ['name' => 'Castrovillari', 'country_code' => 'IT'],\n            ['name' => 'Raymore', 'country_code' => 'US'],\n            ['name' => 'Ensley', 'country_code' => 'US'],\n            ['name' => 'Fremont', 'country_code' => 'US'],\n            ['name' => 'Colleferro', 'country_code' => 'IT'],\n            ['name' => 'Mukwonago', 'country_code' => 'US'],\n            ['name' => 'Diamantino', 'country_code' => 'BR'],\n            ['name' => 'Laventille', 'country_code' => 'TT'],\n            ['name' => 'Bavly', 'country_code' => 'RU'],\n            ['name' => 'Watertown', 'country_code' => 'US'],\n            ['name' => 'East Patchogue', 'country_code' => 'US'],\n            ['name' => 'Qarazhal', 'country_code' => 'KZ'],\n            ['name' => 'Porto Belo', 'country_code' => 'BR'],\n            ['name' => 'Kitzingen', 'country_code' => 'DE'],\n            ['name' => 'Lebanon', 'country_code' => 'US'],\n            ['name' => 'Qapqal', 'country_code' => 'CN'],\n            ['name' => 'Pickerington', 'country_code' => 'US'],\n            ['name' => 'Binidayan', 'country_code' => 'PH'],\n            ['name' => 'Lexington', 'country_code' => 'US'],\n            ['name' => 'Eislingen', 'country_code' => 'DE'],\n            ['name' => 'Silvania', 'country_code' => 'CO'],\n            ['name' => 'Arvin', 'country_code' => 'US'],\n            ['name' => 'Cantanhede', 'country_code' => 'BR'],\n            ['name' => 'Bristol', 'country_code' => 'US'],\n            ['name' => 'Schroeder', 'country_code' => 'BR'],\n            ['name' => 'Beni Douala', 'country_code' => 'DZ'],\n            ['name' => 'Budingen', 'country_code' => 'DE'],\n            ['name' => 'Kommunar', 'country_code' => 'RU'],\n            ['name' => 'Southold', 'country_code' => 'US'],\n            ['name' => 'Palmital', 'country_code' => 'BR'],\n            ['name' => 'Honmachi', 'country_code' => 'JP'],\n            ['name' => 'Leczna', 'country_code' => 'PL'],\n            ['name' => 'Raritan', 'country_code' => 'US'],\n            ['name' => 'Manlleu', 'country_code' => 'ES'],\n            ['name' => 'Luofa', 'country_code' => 'CN'],\n            ['name' => 'Swiedbodzin', 'country_code' => 'PL'],\n            ['name' => 'Pailitas', 'country_code' => 'CO'],\n            ['name' => 'Una', 'country_code' => 'BR'],\n            ['name' => 'Cortona', 'country_code' => 'IT'],\n            ['name' => 'Lino Lakes', 'country_code' => 'US'],\n            ['name' => 'Augusta', 'country_code' => 'US'],\n            ['name' => 'Woensdrecht', 'country_code' => 'NL'],\n            ['name' => 'Aljaraque', 'country_code' => 'ES'],\n            ['name' => 'Busuanga', 'country_code' => 'PH'],\n            ['name' => 'Milford', 'country_code' => 'US'],\n            ['name' => 'Cunha', 'country_code' => 'BR'],\n            ['name' => 'Shelbyville', 'country_code' => 'US'],\n            ['name' => 'Corinth', 'country_code' => 'US'],\n            ['name' => 'Sidi Rahal', 'country_code' => 'MA'],\n            ['name' => 'Kontich', 'country_code' => 'BE'],\n            ['name' => 'Yaojiafen', 'country_code' => 'CN'],\n            ['name' => 'Timbiqui', 'country_code' => 'CO'],\n            ['name' => 'Naples', 'country_code' => 'US'],\n            ['name' => 'Bataguacu', 'country_code' => 'BR'],\n            ['name' => 'Maghull', 'country_code' => 'GB'],\n            ['name' => 'Pantar', 'country_code' => 'PH'],\n            ['name' => 'Ust -Katav', 'country_code' => 'RU'],\n            ['name' => 'Maple Heights', 'country_code' => 'US'],\n            ['name' => 'Vanersborg', 'country_code' => 'SE'],\n            ['name' => 'Tiquisio', 'country_code' => 'CO'],\n            ['name' => 'Semikarakorsk', 'country_code' => 'RU'],\n            ['name' => 'Laziska Gorne', 'country_code' => 'PL'],\n            ['name' => 'Peshtera', 'country_code' => 'BG'],\n            ['name' => 'Eppingen', 'country_code' => 'DE'],\n            ['name' => 'Taminango', 'country_code' => 'CO'],\n            ['name' => 'Lugus', 'country_code' => 'PH'],\n            ['name' => 'Gotse Delchev', 'country_code' => 'BG'],\n            ['name' => 'Hlohovec', 'country_code' => 'SK'],\n            ['name' => 'Povoa de Lanhoso', 'country_code' => 'PT'],\n            ['name' => 'Unity', 'country_code' => 'US'],\n            ['name' => 'Jalpan', 'country_code' => 'MX'],\n            ['name' => 'Pio XII', 'country_code' => 'BR'],\n            ['name' => 'Kozmodemyansk', 'country_code' => 'RU'],\n            ['name' => 'Chester', 'country_code' => 'US'],\n            ['name' => 'Gardner', 'country_code' => 'US'],\n            ['name' => 'San Bonifacio', 'country_code' => 'IT'],\n            ['name' => 'Vilyuchinsk', 'country_code' => 'RU'],\n            ['name' => 'Carutapera', 'country_code' => 'BR'],\n            ['name' => 'Kemi', 'country_code' => 'FI'],\n            ['name' => 'Omutninsk', 'country_code' => 'RU'],\n            ['name' => 'Monte Azul', 'country_code' => 'BR'],\n            ['name' => 'Sonthofen', 'country_code' => 'DE'],\n            ['name' => 'Kotovo', 'country_code' => 'RU'],\n            ['name' => 'Anicuns', 'country_code' => 'BR'],\n            ['name' => 'Colonia Leopoldina', 'country_code' => 'BR'],\n            ['name' => 'Puerto Suarez', 'country_code' => 'BO'],\n            ['name' => 'Axapusco', 'country_code' => 'MX'],\n            ['name' => 'Vereshchagino', 'country_code' => 'RU'],\n            ['name' => 'Union Hill-Novelty Hill', 'country_code' => 'US'],\n            ['name' => 'Elsdorf', 'country_code' => 'DE'],\n            ['name' => 'Xanten', 'country_code' => 'DE'],\n            ['name' => 'Rolleston', 'country_code' => 'NZ'],\n            ['name' => 'Seligenstadt', 'country_code' => 'DE'],\n            ['name' => 'Peters', 'country_code' => 'US'],\n            ['name' => 'Kotli', 'country_code' => 'PK'],\n            ['name' => 'Coreau', 'country_code' => 'BR'],\n            ['name' => 'Isernia', 'country_code' => 'IT'],\n            ['name' => 'Dumbarton', 'country_code' => 'GB'],\n            ['name' => 'Notteroy', 'country_code' => 'NO'],\n            ['name' => 'Siloam Springs', 'country_code' => 'US'],\n            ['name' => 'Moguer', 'country_code' => 'ES'],\n            ['name' => 'Thenia', 'country_code' => 'DZ'],\n            ['name' => 'Iisalmi', 'country_code' => 'FI'],\n            ['name' => 'Cajidiocan', 'country_code' => 'PH'],\n            ['name' => 'Opoczno', 'country_code' => 'PL'],\n            ['name' => 'Reigate', 'country_code' => 'GB'],\n            ['name' => 'Palafrugell', 'country_code' => 'ES'],\n            ['name' => 'Pedernales', 'country_code' => 'EC'],\n            ['name' => 'Trinidad', 'country_code' => 'UY'],\n            ['name' => 'East Hampton', 'country_code' => 'US'],\n            ['name' => 'Banaue', 'country_code' => 'PH'],\n            ['name' => 'Wieliczka', 'country_code' => 'PL'],\n            ['name' => 'Guia de Isora', 'country_code' => 'ES'],\n            ['name' => 'Tongzhou', 'country_code' => 'CN'],\n            ['name' => 'Tornio', 'country_code' => 'FI'],\n            ['name' => 'Osterode', 'country_code' => 'DE'],\n            ['name' => 'Gif-sur-Yvette', 'country_code' => 'FR'],\n            ['name' => 'Piqua', 'country_code' => 'US'],\n            ['name' => 'Amherstburg', 'country_code' => 'CA'],\n            ['name' => 'Chelmno', 'country_code' => 'PL'],\n            ['name' => 'Hallein', 'country_code' => 'AT'],\n            ['name' => 'Poortugaal', 'country_code' => 'NL'],\n            ['name' => 'Fish Hawk', 'country_code' => 'US'],\n            ['name' => 'Yoqne am  Illit', 'country_code' => 'IL'],\n            ['name' => 'El Ksiba', 'country_code' => 'MA'],\n            ['name' => 'Zorgo', 'country_code' => 'BF'],\n            ['name' => 'Port Hueneme', 'country_code' => 'US'],\n            ['name' => 'Caxambu', 'country_code' => 'BR'],\n            ['name' => 'Lagonglong', 'country_code' => 'PH'],\n            ['name' => 'Lakeside', 'country_code' => 'US'],\n            ['name' => 'Gympie', 'country_code' => 'AU'],\n            ['name' => 'Cha Grande', 'country_code' => 'BR'],\n            ['name' => 'Tolosa', 'country_code' => 'PH'],\n            ['name' => 'Candoni', 'country_code' => 'PH'],\n            ['name' => 'Sao Jose da Coroa Grande', 'country_code' => 'BR'],\n            ['name' => 'Azambuja', 'country_code' => 'PT'],\n            ['name' => 'Casablanca', 'country_code' => 'CL'],\n            ['name' => 'Summit', 'country_code' => 'US'],\n            ['name' => 'Halewood', 'country_code' => 'GB'],\n            ['name' => 'Secaucus', 'country_code' => 'US'],\n            ['name' => 'Potters Bar', 'country_code' => 'GB'],\n            ['name' => 'Urucuca', 'country_code' => 'BR'],\n            ['name' => 'Colle di Val d Elsa', 'country_code' => 'IT'],\n            ['name' => 'Golden Valley', 'country_code' => 'US'],\n            ['name' => 'Olho d Agua das Flores', 'country_code' => 'BR'],\n            ['name' => 'Ginebra', 'country_code' => 'CO'],\n            ['name' => 'Calamba', 'country_code' => 'PH'],\n            ['name' => 'Gros Islet', 'country_code' => 'LC'],\n            ['name' => 'Codlea', 'country_code' => 'RO'],\n            ['name' => 'Coueron', 'country_code' => 'FR'],\n            ['name' => 'Fukuyoshi', 'country_code' => 'JP'],\n            ['name' => 'Alcantara', 'country_code' => 'BR'],\n            ['name' => 'Mount Vernon', 'country_code' => 'US'],\n            ['name' => 'Mashiko', 'country_code' => 'JP'],\n            ['name' => 'Lisieux', 'country_code' => 'FR'],\n            ['name' => 'Imi-n-Tanout', 'country_code' => 'MA'],\n            ['name' => 'Banolas', 'country_code' => 'ES'],\n            ['name' => 'Tidili Masfiywat', 'country_code' => 'MA'],\n            ['name' => 'Ilsede', 'country_code' => 'DE'],\n            ['name' => 'Brockville', 'country_code' => 'CA'],\n            ['name' => 'Santa Maria das Barreiras', 'country_code' => 'BR'],\n            ['name' => 'Ocotlan de Morelos', 'country_code' => 'MX'],\n            ['name' => 'Bloomington', 'country_code' => 'US'],\n            ['name' => 'Piazza Armerina', 'country_code' => 'IT'],\n            ['name' => 'Maigo', 'country_code' => 'PH'],\n            ['name' => 'Camanducaia', 'country_code' => 'BR'],\n            ['name' => 'Camp Springs', 'country_code' => 'US'],\n            ['name' => 'Siilinjarvi', 'country_code' => 'FI'],\n            ['name' => 'New Hartford', 'country_code' => 'US'],\n            ['name' => ' Adra', 'country_code' => 'SY'],\n            ['name' => 'Manari', 'country_code' => 'BR'],\n            ['name' => 'Itajuipe', 'country_code' => 'BR'],\n            ['name' => 'Isla-Cristina', 'country_code' => 'ES'],\n            ['name' => 'San Martin de las Piramides', 'country_code' => 'MX'],\n            ['name' => 'Bornem', 'country_code' => 'BE'],\n            ['name' => 'Geneva', 'country_code' => 'US'],\n            ['name' => 'Cavinti', 'country_code' => 'PH'],\n            ['name' => 'Sao Francisco de Paula', 'country_code' => 'BR'],\n            ['name' => 'Burgos', 'country_code' => 'PH'],\n            ['name' => 'Puerto Triunfo', 'country_code' => 'CO'],\n            ['name' => 'San Bernardo', 'country_code' => 'CO'],\n            ['name' => 'Rancho San Diego', 'country_code' => 'US'],\n            ['name' => 'Silva Jardim', 'country_code' => 'BR'],\n            ['name' => 'Itaiopolis', 'country_code' => 'BR'],\n            ['name' => 'Collingwood', 'country_code' => 'CA'],\n            ['name' => 'Alcala la Real', 'country_code' => 'ES'],\n            ['name' => 'Quickborn', 'country_code' => 'DE'],\n            ['name' => 'Monsummano', 'country_code' => 'IT'],\n            ['name' => 'Zundert', 'country_code' => 'NL'],\n            ['name' => 'Itapecerica', 'country_code' => 'BR'],\n            ['name' => 'Coronel Vivida', 'country_code' => 'BR'],\n            ['name' => 'Bloomingdale', 'country_code' => 'US'],\n            ['name' => 'Pergine Valsugana', 'country_code' => 'IT'],\n            ['name' => 'Saint Austell', 'country_code' => 'GB'],\n            ['name' => 'Corciano', 'country_code' => 'IT'],\n            ['name' => 'Viga', 'country_code' => 'PH'],\n            ['name' => 'Palo del Colle', 'country_code' => 'IT'],\n            ['name' => 'Bilohorodka', 'country_code' => 'UA'],\n            ['name' => 'Miguelopolis', 'country_code' => 'BR'],\n            ['name' => 'Watertown', 'country_code' => 'US'],\n            ['name' => 'Kurikka', 'country_code' => 'FI'],\n            ['name' => 'Sao Marcos', 'country_code' => 'BR'],\n            ['name' => 'Darien', 'country_code' => 'US'],\n            ['name' => 'Germersheim', 'country_code' => 'DE'],\n            ['name' => 'Gokcebey', 'country_code' => 'TR'],\n            ['name' => 'Dax', 'country_code' => 'FR'],\n            ['name' => 'Shafter', 'country_code' => 'US'],\n            ['name' => 'Eastmont', 'country_code' => 'US'],\n            ['name' => 'Wallington', 'country_code' => 'GB'],\n            ['name' => 'Lincoln', 'country_code' => 'US'],\n            ['name' => 'Stadtallendorf', 'country_code' => 'DE'],\n            ['name' => 'Katy', 'country_code' => 'US'],\n            ['name' => 'Brownwood', 'country_code' => 'US'],\n            ['name' => 'Chernogolovka', 'country_code' => 'RU'],\n            ['name' => 'Versmold', 'country_code' => 'DE'],\n            ['name' => 'Savigliano', 'country_code' => 'IT'],\n            ['name' => 'Bato', 'country_code' => 'PH'],\n            ['name' => 'Del City', 'country_code' => 'US'],\n            ['name' => 'Woodlesford', 'country_code' => 'GB'],\n            ['name' => 'Kobilo', 'country_code' => 'SN'],\n            ['name' => 'Eyl', 'country_code' => 'SO'],\n            ['name' => 'Almoradi', 'country_code' => 'ES'],\n            ['name' => 'Zerbst', 'country_code' => 'DE'],\n            ['name' => 'Montecatini Terme', 'country_code' => 'IT'],\n            ['name' => 'Batad', 'country_code' => 'PH'],\n            ['name' => 'Senaki', 'country_code' => 'GE'],\n            ['name' => 'Caapora', 'country_code' => 'BR'],\n            ['name' => 'San Jacinto', 'country_code' => 'CO'],\n            ['name' => 'Smithfield', 'country_code' => 'US'],\n            ['name' => 'Beaune', 'country_code' => 'FR'],\n            ['name' => 'Sao Felipe', 'country_code' => 'BR'],\n            ['name' => 'Cassilandia', 'country_code' => 'BR'],\n            ['name' => 'Bad Rappenau', 'country_code' => 'DE'],\n            ['name' => 'Nova Brasilandia d Oeste', 'country_code' => 'BR'],\n            ['name' => 'Follonica', 'country_code' => 'IT'],\n            ['name' => 'Wulfrath', 'country_code' => 'DE'],\n            ['name' => 'Jacksonville', 'country_code' => 'US'],\n            ['name' => 'Les Pennes-Mirabeau', 'country_code' => 'FR'],\n            ['name' => 'Yenice', 'country_code' => 'TR'],\n            ['name' => 'Entroncamento', 'country_code' => 'PT'],\n            ['name' => 'Silverdale', 'country_code' => 'US'],\n            ['name' => 'Allendale', 'country_code' => 'US'],\n            ['name' => 'Kant', 'country_code' => 'KG'],\n            ['name' => 'Nefta', 'country_code' => 'TN'],\n            ['name' => 'Aichach', 'country_code' => 'DE'],\n            ['name' => 'Denain', 'country_code' => 'FR'],\n            ['name' => 'Crisopolis', 'country_code' => 'BR'],\n            ['name' => 'Kirkintilloch', 'country_code' => 'GB'],\n            ['name' => 'Urucui', 'country_code' => 'BR'],\n            ['name' => 'Paraguacu', 'country_code' => 'BR'],\n            ['name' => 'Lower', 'country_code' => 'US'],\n            ['name' => 'San Nicolas', 'country_code' => 'CU'],\n            ['name' => 'Lindlar', 'country_code' => 'DE'],\n            ['name' => 'Nueva Granada', 'country_code' => 'CO'],\n            ['name' => 'Tamgrout', 'country_code' => 'MA'],\n            ['name' => 'La Resolana', 'country_code' => 'MX'],\n            ['name' => 'San Justo', 'country_code' => 'AR'],\n            ['name' => 'Leerdam', 'country_code' => 'NL'],\n            ['name' => 'Darien', 'country_code' => 'US'],\n            ['name' => 'Hoogstraten', 'country_code' => 'BE'],\n            ['name' => 'Ozoir-la-Ferriere', 'country_code' => 'FR'],\n            ['name' => 'Perrysburg', 'country_code' => 'US'],\n            ['name' => 'Zhoucun', 'country_code' => 'CN'],\n            ['name' => 'Coswig', 'country_code' => 'DE'],\n            ['name' => 'Sondershausen', 'country_code' => 'DE'],\n            ['name' => 'Scugog', 'country_code' => 'CA'],\n            ['name' => 'Galeras', 'country_code' => 'CO'],\n            ['name' => 'Lewistown', 'country_code' => 'US'],\n            ['name' => 'Richmond', 'country_code' => 'GB'],\n            ['name' => 'Allauch', 'country_code' => 'FR'],\n            ['name' => 'Nang Rong', 'country_code' => 'TH'],\n            ['name' => 'Piddig', 'country_code' => 'PH'],\n            ['name' => 'Tong anyi', 'country_code' => 'CN'],\n            ['name' => 'Anagni', 'country_code' => 'IT'],\n            ['name' => 'Argenta', 'country_code' => 'IT'],\n            ['name' => 'Acatic', 'country_code' => 'MX'],\n            ['name' => 'Parelhas', 'country_code' => 'BR'],\n            ['name' => 'Eeklo', 'country_code' => 'BE'],\n            ['name' => 'Gardanne', 'country_code' => 'FR'],\n            ['name' => 'Hajnowka', 'country_code' => 'PL'],\n            ['name' => 'MacArthur', 'country_code' => 'PH'],\n            ['name' => 'Grottaferrata', 'country_code' => 'IT'],\n            ['name' => 'La Porte', 'country_code' => 'US'],\n            ['name' => 'Perdoes', 'country_code' => 'BR'],\n            ['name' => 'Geseke', 'country_code' => 'DE'],\n            ['name' => 'Gherla', 'country_code' => 'RO'],\n            ['name' => 'Clarksville', 'country_code' => 'US'],\n            ['name' => 'Dayr Abu Hinnis', 'country_code' => 'EG'],\n            ['name' => 'New Castle', 'country_code' => 'US'],\n            ['name' => 'Buritirama', 'country_code' => 'BR'],\n            ['name' => 'Jamsa', 'country_code' => 'FI'],\n            ['name' => 'Murree', 'country_code' => 'PK'],\n            ['name' => 'Kingsville', 'country_code' => 'CA'],\n            ['name' => 'Gujan-Mestras', 'country_code' => 'FR'],\n            ['name' => 'Monte Santo de Minas', 'country_code' => 'BR'],\n            ['name' => 'Ano Syros', 'country_code' => 'GR'],\n            ['name' => 'Porto Franco', 'country_code' => 'BR'],\n            ['name' => 'Barro', 'country_code' => 'BR'],\n            ['name' => 'Leek', 'country_code' => 'GB'],\n            ['name' => 'Romano di Lombardia', 'country_code' => 'IT'],\n            ['name' => 'Cajueiro', 'country_code' => 'BR'],\n            ['name' => 'Kara-Suu', 'country_code' => 'KG'],\n            ['name' => 'Baie-Comeau', 'country_code' => 'CA'],\n            ['name' => 'Qia erbagecun', 'country_code' => 'CN'],\n            ['name' => 'Harsefeld', 'country_code' => 'DE'],\n            ['name' => 'Santa Barbara', 'country_code' => 'CO'],\n            ['name' => 'Dean Funes', 'country_code' => 'AR'],\n            ['name' => 'Villagarzon', 'country_code' => 'CO'],\n            ['name' => 'Anini-y', 'country_code' => 'PH'],\n            ['name' => 'Paraibano', 'country_code' => 'BR'],\n            ['name' => 'Bellview', 'country_code' => 'US'],\n            ['name' => 'Vecses', 'country_code' => 'HU'],\n            ['name' => 'Picasent', 'country_code' => 'ES'],\n            ['name' => 'Lagoa do Itaenga', 'country_code' => 'BR'],\n            ['name' => 'Livadeia', 'country_code' => 'GR'],\n            ['name' => 'Biddeford', 'country_code' => 'US'],\n            ['name' => 'Suzzara', 'country_code' => 'IT'],\n            ['name' => 'Moniquira', 'country_code' => 'CO'],\n            ['name' => 'Wang Nam Yen', 'country_code' => 'TH'],\n            ['name' => 'Juli', 'country_code' => 'PE'],\n            ['name' => 'Somers', 'country_code' => 'US'],\n            ['name' => 'Sarreguemines', 'country_code' => 'FR'],\n            ['name' => 'Ryazhsk', 'country_code' => 'RU'],\n            ['name' => 'Rosolini', 'country_code' => 'IT'],\n            ['name' => 'Villa Park', 'country_code' => 'US'],\n            ['name' => 'Magallanes', 'country_code' => 'PH'],\n            ['name' => 'El Paujil', 'country_code' => 'CO'],\n            ['name' => 'Almaguer', 'country_code' => 'CO'],\n            ['name' => 'Fernley', 'country_code' => 'US'],\n            ['name' => 'Xintian', 'country_code' => 'CN'],\n            ['name' => 'Essex', 'country_code' => 'US'],\n            ['name' => 'Prudnik', 'country_code' => 'PL'],\n            ['name' => 'Schramberg', 'country_code' => 'DE'],\n            ['name' => 'Khotkovo', 'country_code' => 'RU'],\n            ['name' => 'Elkridge', 'country_code' => 'US'],\n            ['name' => 'Kutna Hora', 'country_code' => 'CZ'],\n            ['name' => 'Jindrichuv Hradec', 'country_code' => 'CZ'],\n            ['name' => 'Naawan', 'country_code' => 'PH'],\n            ['name' => 'Palatka', 'country_code' => 'RU'],\n            ['name' => 'Antsohihy', 'country_code' => 'MG'],\n            ['name' => 'Tarko-Sale', 'country_code' => 'RU'],\n            ['name' => 'Sint-Katelijne-Waver', 'country_code' => 'BE'],\n            ['name' => 'Traunreut', 'country_code' => 'DE'],\n            ['name' => 'Mukilteo', 'country_code' => 'US'],\n            ['name' => 'Cugir', 'country_code' => 'RO'],\n            ['name' => 'Urussanga', 'country_code' => 'BR'],\n            ['name' => 'East Pennsboro', 'country_code' => 'US'],\n            ['name' => 'Atoka', 'country_code' => 'US'],\n            ['name' => 'Prichard', 'country_code' => 'US'],\n            ['name' => 'Le Ray', 'country_code' => 'US'],\n            ['name' => 'Oros', 'country_code' => 'BR'],\n            ['name' => 'Waghausel', 'country_code' => 'DE'],\n            ['name' => 'Soltau', 'country_code' => 'DE'],\n            ['name' => 'Hays', 'country_code' => 'US'],\n            ['name' => 'Tubbergen', 'country_code' => 'NL'],\n            ['name' => 'Oulad Embarek', 'country_code' => 'MA'],\n            ['name' => 'Tizi-n-Bechar', 'country_code' => 'DZ'],\n            ['name' => 'Gross-Umstadt', 'country_code' => 'DE'],\n            ['name' => 'Pajara', 'country_code' => 'ES'],\n            ['name' => 'Sanhe', 'country_code' => 'CN'],\n            ['name' => 'Los Vilos', 'country_code' => 'CL'],\n            ['name' => 'Nerja', 'country_code' => 'ES'],\n            ['name' => 'Sestu', 'country_code' => 'IT'],\n            ['name' => 'Recanati', 'country_code' => 'IT'],\n            ['name' => 'Birmingham', 'country_code' => 'US'],\n            ['name' => 'Paradise', 'country_code' => 'CA'],\n            ['name' => 'Sessa Aurunca', 'country_code' => 'IT'],\n            ['name' => 'Pompeia', 'country_code' => 'BR'],\n            ['name' => 'Marogong', 'country_code' => 'PH'],\n            ['name' => 'Montville', 'country_code' => 'US'],\n            ['name' => 'Easley', 'country_code' => 'US'],\n            ['name' => 'La Union', 'country_code' => 'ES'],\n            ['name' => 'Brambleton', 'country_code' => 'US'],\n            ['name' => 'Gryfino', 'country_code' => 'PL'],\n            ['name' => 'Kaltan', 'country_code' => 'RU'],\n            ['name' => 'Totoro', 'country_code' => 'CO'],\n            ['name' => 'Samboan', 'country_code' => 'PH'],\n            ['name' => 'Palmer', 'country_code' => 'US'],\n            ['name' => 'Shisui', 'country_code' => 'JP'],\n            ['name' => 'Jandaia do Sul', 'country_code' => 'BR'],\n            ['name' => 'Hindang', 'country_code' => 'PH'],\n            ['name' => 'Los Llanos de Aridane', 'country_code' => 'ES'],\n            ['name' => 'Lyskovo', 'country_code' => 'RU'],\n            ['name' => 'Varadero', 'country_code' => 'CU'],\n            ['name' => 'Belovodskoe', 'country_code' => 'KG'],\n            ['name' => 'Youganning', 'country_code' => 'CN'],\n            ['name' => 'Barcelona', 'country_code' => 'PH'],\n            ['name' => 'Asni', 'country_code' => 'MA'],\n            ['name' => 'Ramona', 'country_code' => 'US'],\n            ['name' => 'Carei', 'country_code' => 'RO'],\n            ['name' => 'Bananeiras', 'country_code' => 'BR'],\n            ['name' => 'Owosso', 'country_code' => 'US'],\n            ['name' => 'King of Prussia', 'country_code' => 'US'],\n            ['name' => 'Elverum', 'country_code' => 'NO'],\n            ['name' => 'DeBary', 'country_code' => 'US'],\n            ['name' => 'Araripe', 'country_code' => 'BR'],\n            ['name' => 'Garforth', 'country_code' => 'GB'],\n            ['name' => 'Eustis', 'country_code' => 'US'],\n            ['name' => 'Tanhacu', 'country_code' => 'BR'],\n            ['name' => 'South Euclid', 'country_code' => 'US'],\n            ['name' => 'Adet', 'country_code' => 'ET'],\n            ['name' => 'South Holland', 'country_code' => 'US'],\n            ['name' => 'Jiangjiadong', 'country_code' => 'CN'],\n            ['name' => 'Pushchino', 'country_code' => 'RU'],\n            ['name' => 'Okahandja', 'country_code' => 'NA'],\n            ['name' => 'Palm Valley', 'country_code' => 'US'],\n            ['name' => 'Bulach', 'country_code' => 'CH'],\n            ['name' => 'Ludlow', 'country_code' => 'US'],\n            ['name' => 'Nerekhta', 'country_code' => 'RU'],\n            ['name' => 'Carmo do Rio Claro', 'country_code' => 'BR'],\n            ['name' => 'Paraisopolis', 'country_code' => 'BR'],\n            ['name' => 'Givors', 'country_code' => 'FR'],\n            ['name' => 'Ashland', 'country_code' => 'US'],\n            ['name' => 'Sapulpa', 'country_code' => 'US'],\n            ['name' => 'Santa Maria Chilchotla', 'country_code' => 'MX'],\n            ['name' => 'Manuel Tames', 'country_code' => 'CU'],\n            ['name' => 'Alfena', 'country_code' => 'PT'],\n            ['name' => 'Bonito', 'country_code' => 'BR'],\n            ['name' => 'Duarte', 'country_code' => 'US'],\n            ['name' => 'Aguadas', 'country_code' => 'CO'],\n            ['name' => 'Rio Maior', 'country_code' => 'PT'],\n            ['name' => 'Marietta', 'country_code' => 'US'],\n            ['name' => 'Lucelia', 'country_code' => 'BR'],\n            ['name' => 'Great Linford', 'country_code' => 'GB'],\n            ['name' => 'Griffith', 'country_code' => 'AU'],\n            ['name' => 'Brezno', 'country_code' => 'SK'],\n            ['name' => 'Ayamonte', 'country_code' => 'ES'],\n            ['name' => 'Battle Ground', 'country_code' => 'US'],\n            ['name' => 'Ferentino', 'country_code' => 'IT'],\n            ['name' => 'Stephenville', 'country_code' => 'US'],\n            ['name' => 'Monte Alegre de Minas', 'country_code' => 'BR'],\n            ['name' => 'Itororo', 'country_code' => 'BR'],\n            ['name' => 'Amsterdam', 'country_code' => 'US'],\n            ['name' => 'Montecristo', 'country_code' => 'CO'],\n            ['name' => 'Sandhurst', 'country_code' => 'GB'],\n            ['name' => 'Oxford', 'country_code' => 'US'],\n            ['name' => 'Reichenbach/Vogtland', 'country_code' => 'DE'],\n            ['name' => 'Baixa Grande', 'country_code' => 'BR'],\n            ['name' => 'Sadao', 'country_code' => 'TH'],\n            ['name' => 'Park Forest', 'country_code' => 'US'],\n            ['name' => 'San Salvo', 'country_code' => 'IT'],\n            ['name' => 'Evans', 'country_code' => 'US'],\n            ['name' => 'Alexandria', 'country_code' => 'US'],\n            ['name' => 'Schenefeld', 'country_code' => 'DE'],\n            ['name' => 'Hancha', 'country_code' => 'CN'],\n            ['name' => 'Fort Atkinson', 'country_code' => 'US'],\n            ['name' => 'Hazel Dell', 'country_code' => 'US'],\n            ['name' => 'Varkaus', 'country_code' => 'FI'],\n            ['name' => 'Bastos', 'country_code' => 'BR'],\n            ['name' => 'Carrboro', 'country_code' => 'US'],\n            ['name' => 'Baclayon', 'country_code' => 'PH'],\n            ['name' => 'Seria', 'country_code' => 'BN'],\n            ['name' => 'Agan', 'country_code' => 'CN'],\n            ['name' => 'Bardstown', 'country_code' => 'US'],\n            ['name' => 'East Ridge', 'country_code' => 'US'],\n            ['name' => 'Wipperfurth', 'country_code' => 'DE'],\n            ['name' => 'Elko', 'country_code' => 'US'],\n            ['name' => 'Uxbridge', 'country_code' => 'CA'],\n            ['name' => 'Covington', 'country_code' => 'US'],\n            ['name' => 'Florencia', 'country_code' => 'CU'],\n            ['name' => 'Suaza', 'country_code' => 'CO'],\n            ['name' => 'Bologoye', 'country_code' => 'RU'],\n            ['name' => 'Cabucgayan', 'country_code' => 'PH'],\n            ['name' => 'Gaffney', 'country_code' => 'US'],\n            ['name' => 'Quezon', 'country_code' => 'PH'],\n            ['name' => 'Xinnongcun', 'country_code' => 'CN'],\n            ['name' => 'Alcudia', 'country_code' => 'ES'],\n            ['name' => 'Praia da Vitoria', 'country_code' => 'PT'],\n            ['name' => 'Boralday', 'country_code' => 'KZ'],\n            ['name' => 'Sun Valley', 'country_code' => 'US'],\n            ['name' => 'Komatipoort', 'country_code' => 'ZA'],\n            ['name' => 'Tigbao', 'country_code' => 'PH'],\n            ['name' => 'Barroso', 'country_code' => 'BR'],\n            ['name' => 'Anping', 'country_code' => 'CN'],\n            ['name' => 'West Deptford', 'country_code' => 'US'],\n            ['name' => 'Sidney', 'country_code' => 'US'],\n            ['name' => 'Bonney Lake', 'country_code' => 'US'],\n            ['name' => 'Urucurituba', 'country_code' => 'BR'],\n            ['name' => 'Taperoa', 'country_code' => 'BR'],\n            ['name' => 'Parabcan', 'country_code' => 'PH'],\n            ['name' => 'Ecclesall', 'country_code' => 'GB'],\n            ['name' => 'Frondenberg', 'country_code' => 'DE'],\n            ['name' => 'Harstad', 'country_code' => 'NO'],\n            ['name' => 'Villapinzon', 'country_code' => 'CO'],\n            ['name' => 'El Calafate', 'country_code' => 'AR'],\n            ['name' => 'Dickinson', 'country_code' => 'US'],\n            ['name' => 'Martha Lake', 'country_code' => 'US'],\n            ['name' => 'Cournon-d Auvergne', 'country_code' => 'FR'],\n            ['name' => 'Little Egg Harbor', 'country_code' => 'US'],\n            ['name' => 'Bad Schwartau', 'country_code' => 'DE'],\n            ['name' => 'Faversham', 'country_code' => 'GB'],\n            ['name' => 'Vikhorevka', 'country_code' => 'RU'],\n            ['name' => 'Welench iti', 'country_code' => 'ET'],\n            ['name' => 'Bothell West', 'country_code' => 'US'],\n            ['name' => 'Bruchkobel', 'country_code' => 'DE'],\n            ['name' => 'Jangy-Nookat', 'country_code' => 'KG'],\n            ['name' => 'Fredonia', 'country_code' => 'CO'],\n            ['name' => 'Werdau', 'country_code' => 'DE'],\n            ['name' => 'Stange', 'country_code' => 'NO'],\n            ['name' => 'Trecate', 'country_code' => 'IT'],\n            ['name' => 'Pakil', 'country_code' => 'PH'],\n            ['name' => 'Aspe', 'country_code' => 'ES'],\n            ['name' => 'Pindobacu', 'country_code' => 'BR'],\n            ['name' => 'Arroio do Meio', 'country_code' => 'BR'],\n            ['name' => 'Imi n Oulaoun', 'country_code' => 'MA'],\n            ['name' => 'Arnold', 'country_code' => 'US'],\n            ['name' => 'Campestre', 'country_code' => 'BR'],\n            ['name' => 'Can-Avid', 'country_code' => 'PH'],\n            ['name' => 'Vyskov', 'country_code' => 'CZ'],\n            ['name' => 'La Colonia Tovar', 'country_code' => 'VE'],\n            ['name' => 'Essa', 'country_code' => 'CA'],\n            ['name' => 'Santo Anastacio', 'country_code' => 'BR'],\n            ['name' => 'Gunzburg', 'country_code' => 'DE'],\n            ['name' => 'Ballenger Creek', 'country_code' => 'US'],\n            ['name' => 'Bahia de Caraquez', 'country_code' => 'EC'],\n            ['name' => 'Sotouboua', 'country_code' => 'TG'],\n            ['name' => 'Crowborough', 'country_code' => 'GB'],\n            ['name' => 'Toguchin', 'country_code' => 'RU'],\n            ['name' => 'Ripley', 'country_code' => 'GB'],\n            ['name' => 'Steinhagen', 'country_code' => 'DE'],\n            ['name' => 'Chascomus', 'country_code' => 'AR'],\n            ['name' => 'Elektrougli', 'country_code' => 'RU'],\n            ['name' => 'Saka', 'country_code' => 'MA'],\n            ['name' => 'El Reten', 'country_code' => 'CO'],\n            ['name' => 'Rolla', 'country_code' => 'US'],\n            ['name' => 'Sysert', 'country_code' => 'RU'],\n            ['name' => 'West Pensacola', 'country_code' => 'US'],\n            ['name' => 'Harvey', 'country_code' => 'US'],\n            ['name' => 'Winschoten', 'country_code' => 'NL'],\n            ['name' => 'Johnstown', 'country_code' => 'US'],\n            ['name' => 'Sokal', 'country_code' => 'UA'],\n            ['name' => 'Grand Island', 'country_code' => 'US'],\n            ['name' => 'Candiac', 'country_code' => 'CA'],\n            ['name' => 'Gallipoli', 'country_code' => 'IT'],\n            ['name' => 'Zhangjiazhuang', 'country_code' => 'CN'],\n            ['name' => 'Bni Rzine', 'country_code' => 'MA'],\n            ['name' => 'Medina', 'country_code' => 'BR'],\n            ['name' => 'Abano Terme', 'country_code' => 'IT'],\n            ['name' => 'Cockeysville', 'country_code' => 'US'],\n            ['name' => 'Zd ar nad Sazavou', 'country_code' => 'CZ'],\n            ['name' => 'Oro-Medonte', 'country_code' => 'CA'],\n            ['name' => 'Jefferson', 'country_code' => 'US'],\n            ['name' => 'Pleasant Prairie', 'country_code' => 'US'],\n            ['name' => 'Mirador', 'country_code' => 'BR'],\n            ['name' => 'Palma del Rio', 'country_code' => 'ES'],\n            ['name' => 'Voiron', 'country_code' => 'FR'],\n            ['name' => 'Mitry-Mory', 'country_code' => 'FR'],\n            ['name' => 'Liubotyn', 'country_code' => 'UA'],\n            ['name' => 'Shelbyville', 'country_code' => 'US'],\n            ['name' => 'Senguio', 'country_code' => 'MX'],\n            ['name' => 'Bugalagrande', 'country_code' => 'CO'],\n            ['name' => 'Bloomfield', 'country_code' => 'US'],\n            ['name' => 'Tepezala', 'country_code' => 'MX'],\n            ['name' => 'Gigaquit', 'country_code' => 'PH'],\n            ['name' => 'Dudinka', 'country_code' => 'RU'],\n            ['name' => 'Muhldorf', 'country_code' => 'DE'],\n            ['name' => 'Nurota', 'country_code' => 'UZ'],\n            ['name' => 'Comodoro', 'country_code' => 'BR'],\n            ['name' => 'Hualqui', 'country_code' => 'CL'],\n            ['name' => 'Lambari', 'country_code' => 'BR'],\n            ['name' => 'Castel San Pietro Terme', 'country_code' => 'IT'],\n            ['name' => 'Roshal', 'country_code' => 'RU'],\n            ['name' => 'Caoayan', 'country_code' => 'PH'],\n            ['name' => 'Varennes', 'country_code' => 'CA'],\n            ['name' => 'St. Andrews', 'country_code' => 'US'],\n            ['name' => 'Milwaukie', 'country_code' => 'US'],\n            ['name' => 'Rivalta di Torino', 'country_code' => 'IT'],\n            ['name' => 'Maribojoc', 'country_code' => 'PH'],\n            ['name' => 'Challans', 'country_code' => 'FR'],\n            ['name' => 'Madre de Deus', 'country_code' => 'BR'],\n            ['name' => 'Butia', 'country_code' => 'BR'],\n            ['name' => 'Bussolengo', 'country_code' => 'IT'],\n            ['name' => 'Pedra', 'country_code' => 'BR'],\n            ['name' => 'Guara', 'country_code' => 'BR'],\n            ['name' => 'Bryant', 'country_code' => 'US'],\n            ['name' => 'Mae Sai', 'country_code' => 'TH'],\n            ['name' => 'Nizhniy Lomov', 'country_code' => 'RU'],\n            ['name' => 'Urk', 'country_code' => 'NL'],\n            ['name' => 'Purranque', 'country_code' => 'CL'],\n            ['name' => 'Bohumin', 'country_code' => 'CZ'],\n            ['name' => 'Luckenwalde', 'country_code' => 'DE'],\n            ['name' => 'Guipos', 'country_code' => 'PH'],\n            ['name' => 'Enger', 'country_code' => 'DE'],\n            ['name' => 'Serro', 'country_code' => 'BR'],\n            ['name' => 'Dillingen', 'country_code' => 'DE'],\n            ['name' => 'Siquinala', 'country_code' => 'GT'],\n            ['name' => 'Salmon Creek', 'country_code' => 'US'],\n            ['name' => 'Hyde Park', 'country_code' => 'US'],\n            ['name' => 'Cruzeiro do Oeste', 'country_code' => 'BR'],\n            ['name' => 'Hernani', 'country_code' => 'ES'],\n            ['name' => 'Kill Devil Hills', 'country_code' => 'US'],\n            ['name' => 'Oderzo', 'country_code' => 'IT'],\n            ['name' => 'Aracoiaba', 'country_code' => 'BR'],\n            ['name' => 'North Salt Lake', 'country_code' => 'US'],\n            ['name' => 'Apollo Beach', 'country_code' => 'US'],\n            ['name' => 'Valenca do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Traunstein', 'country_code' => 'DE'],\n            ['name' => ' Ain el Hammam', 'country_code' => 'DZ'],\n            ['name' => 'Herborn', 'country_code' => 'DE'],\n            ['name' => 'Al Brouj', 'country_code' => 'MA'],\n            ['name' => 'Comala', 'country_code' => 'MX'],\n            ['name' => 'Bombinhas', 'country_code' => 'BR'],\n            ['name' => 'Gauting', 'country_code' => 'DE'],\n            ['name' => 'Vico Equense', 'country_code' => 'IT'],\n            ['name' => 'Ararat', 'country_code' => 'AM'],\n            ['name' => 'Osa', 'country_code' => 'RU'],\n            ['name' => 'Kurovskoye', 'country_code' => 'RU'],\n            ['name' => 'Catarina', 'country_code' => 'BR'],\n            ['name' => 'Kremenets', 'country_code' => 'UA'],\n            ['name' => 'Cornelia', 'country_code' => 'US'],\n            ['name' => 'Schifferstadt', 'country_code' => 'DE'],\n            ['name' => 'Suwanee', 'country_code' => 'US'],\n            ['name' => 'New Hope', 'country_code' => 'US'],\n            ['name' => 'Ubaitaba', 'country_code' => 'BR'],\n            ['name' => 'Gerlingen', 'country_code' => 'DE'],\n            ['name' => 'Carmen', 'country_code' => 'PH'],\n            ['name' => 'Wade Hampton', 'country_code' => 'US'],\n            ['name' => 'Wuustwezel', 'country_code' => 'BE'],\n            ['name' => 'Green Valley', 'country_code' => 'US'],\n            ['name' => 'Mill Creek', 'country_code' => 'US'],\n            ['name' => 'Samaca', 'country_code' => 'CO'],\n            ['name' => 'Pallazzolo sull Oglio', 'country_code' => 'IT'],\n            ['name' => 'Ovejas', 'country_code' => 'CO'],\n            ['name' => 'Pico Truncado', 'country_code' => 'AR'],\n            ['name' => 'Yangping', 'country_code' => 'CN'],\n            ['name' => 'Universal City', 'country_code' => 'US'],\n            ['name' => 'Mossingen', 'country_code' => 'DE'],\n            ['name' => 'Sotomayor', 'country_code' => 'CO'],\n            ['name' => 'Kirkby in Ashfield', 'country_code' => 'GB'],\n            ['name' => 'Buinsk', 'country_code' => 'RU'],\n            ['name' => 'Montclair', 'country_code' => 'US'],\n            ['name' => 'Gamboma', 'country_code' => 'CG'],\n            ['name' => 'Lopez', 'country_code' => 'CO'],\n            ['name' => 'Lorton', 'country_code' => 'US'],\n            ['name' => 'Bourg-les-Valence', 'country_code' => 'FR'],\n            ['name' => 'Kuusankoski', 'country_code' => 'FI'],\n            ['name' => 'Clemmons', 'country_code' => 'US'],\n            ['name' => 'Strathroy-Caradoc', 'country_code' => 'CA'],\n            ['name' => 'Guimar', 'country_code' => 'ES'],\n            ['name' => 'Olenegorsk', 'country_code' => 'RU'],\n            ['name' => 'Valkeakoski', 'country_code' => 'FI'],\n            ['name' => 'Viesca', 'country_code' => 'MX'],\n            ['name' => 'Hexiang', 'country_code' => 'CN'],\n            ['name' => 'Rosamond', 'country_code' => 'US'],\n            ['name' => 'Bear', 'country_code' => 'US'],\n            ['name' => 'Horten', 'country_code' => 'NO'],\n            ['name' => 'Boussu', 'country_code' => 'BE'],\n            ['name' => 'Blieskastel', 'country_code' => 'DE'],\n            ['name' => 'Dyersburg', 'country_code' => 'US'],\n            ['name' => 'Blaj', 'country_code' => 'RO'],\n            ['name' => 'Hassloch', 'country_code' => 'DE'],\n            ['name' => 'Manor', 'country_code' => 'US'],\n            ['name' => 'Puzol', 'country_code' => 'ES'],\n            ['name' => 'Oneida', 'country_code' => 'US'],\n            ['name' => 'Wachtberg', 'country_code' => 'DE'],\n            ['name' => 'Aomar', 'country_code' => 'DZ'],\n            ['name' => 'Hanmayingcun', 'country_code' => 'CN'],\n            ['name' => 'Ceres', 'country_code' => 'BR'],\n            ['name' => 'Santa Fe', 'country_code' => 'PH'],\n            ['name' => 'Hunters Creek', 'country_code' => 'US'],\n            ['name' => 'Holiday', 'country_code' => 'US'],\n            ['name' => 'Louisville', 'country_code' => 'US'],\n            ['name' => 'Feltre', 'country_code' => 'IT'],\n            ['name' => 'Pacatu', 'country_code' => 'BR'],\n            ['name' => 'Ubaira', 'country_code' => 'BR'],\n            ['name' => 'Lebedinovka', 'country_code' => 'KG'],\n            ['name' => 'Giovinazzo', 'country_code' => 'IT'],\n            ['name' => 'Stamford', 'country_code' => 'GB'],\n            ['name' => 'Dixon', 'country_code' => 'US'],\n            ['name' => 'Allende', 'country_code' => 'MX'],\n            ['name' => 'Ino', 'country_code' => 'JP'],\n            ['name' => 'San Jose', 'country_code' => 'PH'],\n            ['name' => 'Pontassieve', 'country_code' => 'IT'],\n            ['name' => 'Scobinti', 'country_code' => 'RO'],\n            ['name' => 'Mabitac', 'country_code' => 'PH'],\n            ['name' => 'Lastra a Signa', 'country_code' => 'IT'],\n            ['name' => 'Carcagente', 'country_code' => 'ES'],\n            ['name' => 'Lazi', 'country_code' => 'PH'],\n            ['name' => 'Dugulubgey', 'country_code' => 'RU'],\n            ['name' => 'Murray', 'country_code' => 'US'],\n            ['name' => 'Pozzallo', 'country_code' => 'IT'],\n            ['name' => 'Inopacan', 'country_code' => 'PH'],\n            ['name' => 'Golden', 'country_code' => 'US'],\n            ['name' => 'Nidderau', 'country_code' => 'DE'],\n            ['name' => 'Illapel', 'country_code' => 'CL'],\n            ['name' => 'Bad Salzungen', 'country_code' => 'DE'],\n            ['name' => 'Blansko', 'country_code' => 'CZ'],\n            ['name' => 'Acquaviva delle Fonti', 'country_code' => 'IT'],\n            ['name' => 'Nova Granada', 'country_code' => 'BR'],\n            ['name' => 'Olean', 'country_code' => 'US'],\n            ['name' => 'Chachahuantla', 'country_code' => 'MX'],\n            ['name' => 'Hoddesdon', 'country_code' => 'GB'],\n            ['name' => 'Dolyna', 'country_code' => 'UA'],\n            ['name' => 'Na Klang', 'country_code' => 'TH'],\n            ['name' => 'Clifton', 'country_code' => 'US'],\n            ['name' => 'Senica', 'country_code' => 'SK'],\n            ['name' => 'Fonte Boa', 'country_code' => 'BR'],\n            ['name' => 'Belem de Sao Francisco', 'country_code' => 'BR'],\n            ['name' => 'Elvas', 'country_code' => 'PT'],\n            ['name' => 'Tala Yfassene', 'country_code' => 'DZ'],\n            ['name' => 'Melena del Sur', 'country_code' => 'CU'],\n            ['name' => 'Grayslake', 'country_code' => 'US'],\n            ['name' => 'Mantsala', 'country_code' => 'FI'],\n            ['name' => 'Tielt', 'country_code' => 'BE'],\n            ['name' => 'Pita', 'country_code' => 'GN'],\n            ['name' => 'Okha', 'country_code' => 'RU'],\n            ['name' => 'Ronda', 'country_code' => 'PH'],\n            ['name' => 'Riacho das Almas', 'country_code' => 'BR'],\n            ['name' => 'Piratini', 'country_code' => 'BR'],\n            ['name' => 'Cranendonck', 'country_code' => 'NL'],\n            ['name' => 'Menaka', 'country_code' => 'ML'],\n            ['name' => 'Andira', 'country_code' => 'BR'],\n            ['name' => 'South Milwaukee', 'country_code' => 'US'],\n            ['name' => 'Shimogamo', 'country_code' => 'JP'],\n            ['name' => 'Sidi Chiker', 'country_code' => 'MA'],\n            ['name' => 'Cittadella', 'country_code' => 'IT'],\n            ['name' => 'Miracema do Tocantins', 'country_code' => 'BR'],\n            ['name' => 'Clarin', 'country_code' => 'PH'],\n            ['name' => 'Pertuis', 'country_code' => 'FR'],\n            ['name' => 'Pandan', 'country_code' => 'PH'],\n            ['name' => 'Gardner', 'country_code' => 'US'],\n            ['name' => 'Nove Mesto nad Vahom', 'country_code' => 'SK'],\n            ['name' => 'Arhavi', 'country_code' => 'TR'],\n            ['name' => 'Senden', 'country_code' => 'DE'],\n            ['name' => 'Duderstadt', 'country_code' => 'DE'],\n            ['name' => 'Hailsham', 'country_code' => 'GB'],\n            ['name' => 'Nordlingen', 'country_code' => 'DE'],\n            ['name' => 'Sabaudia', 'country_code' => 'IT'],\n            ['name' => 'Havelock', 'country_code' => 'US'],\n            ['name' => 'Sao Joao do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Wasaga Beach', 'country_code' => 'CA'],\n            ['name' => 'Neufahrn bei Freising', 'country_code' => 'DE'],\n            ['name' => 'Lake Ronkonkoma', 'country_code' => 'US'],\n            ['name' => 'Cirencester', 'country_code' => 'GB'],\n            ['name' => 'Chapulhuacan', 'country_code' => 'MX'],\n            ['name' => 'Lebanon', 'country_code' => 'US'],\n            ['name' => 'Vazante', 'country_code' => 'BR'],\n            ['name' => 'Ban Tha Pha', 'country_code' => 'TH'],\n            ['name' => 'Bati', 'country_code' => 'ET'],\n            ['name' => 'East Moline', 'country_code' => 'US'],\n            ['name' => 'As', 'country_code' => 'NO'],\n            ['name' => 'Baiao', 'country_code' => 'PT'],\n            ['name' => 'Miandrivazo', 'country_code' => 'MG'],\n            ['name' => 'Gjovik', 'country_code' => 'NO'],\n            ['name' => 'Korntal-Munchingen', 'country_code' => 'DE'],\n            ['name' => 'Floresti', 'country_code' => 'RO'],\n            ['name' => 'Norwalk', 'country_code' => 'US'],\n            ['name' => 'Beroun', 'country_code' => 'CZ'],\n            ['name' => 'Bobrov', 'country_code' => 'RU'],\n            ['name' => 'Itanhem', 'country_code' => 'BR'],\n            ['name' => 'Schortens', 'country_code' => 'DE'],\n            ['name' => 'Kawayan', 'country_code' => 'PH'],\n            ['name' => 'Goris', 'country_code' => 'AM'],\n            ['name' => 'Pak Phanang', 'country_code' => 'TH'],\n            ['name' => 'Mar  ina Horka', 'country_code' => 'BY'],\n            ['name' => 'Cachoeirinha', 'country_code' => 'BR'],\n            ['name' => 'Yorkville', 'country_code' => 'US'],\n            ['name' => 'Archena', 'country_code' => 'ES'],\n            ['name' => 'Mbala', 'country_code' => 'ZM'],\n            ['name' => 'Kawambwa', 'country_code' => 'ZM'],\n            ['name' => 'New Glasgow', 'country_code' => 'CA'],\n            ['name' => 'Sidi Jaber', 'country_code' => 'MA'],\n            ['name' => 'Logansport', 'country_code' => 'US'],\n            ['name' => 'Linamon', 'country_code' => 'PH'],\n            ['name' => 'Douar Lamrabih', 'country_code' => 'MA'],\n            ['name' => 'Station des Essais M.V.A.', 'country_code' => 'MA'],\n            ['name' => 'San Felipe', 'country_code' => 'MX'],\n            ['name' => 'Chodziez', 'country_code' => 'PL'],\n            ['name' => 'Aldan', 'country_code' => 'RU'],\n            ['name' => 'Muzambinho', 'country_code' => 'BR'],\n            ['name' => 'Hiddenhausen', 'country_code' => 'DE'],\n            ['name' => 'Barehra', 'country_code' => 'IN'],\n            ['name' => 'Casarano', 'country_code' => 'IT'],\n            ['name' => 'Nikolsk', 'country_code' => 'RU'],\n            ['name' => 'Veroli', 'country_code' => 'IT'],\n            ['name' => 'Dublin', 'country_code' => 'US'],\n            ['name' => 'Donggou', 'country_code' => 'CN'],\n            ['name' => 'North Ogden', 'country_code' => 'US'],\n            ['name' => 'Ain Cheggag', 'country_code' => 'MA'],\n            ['name' => 'Bibai', 'country_code' => 'JP'],\n            ['name' => 'Gioia Tauro', 'country_code' => 'IT'],\n            ['name' => 'Stadtlohn', 'country_code' => 'DE'],\n            ['name' => 'Meinerzhagen', 'country_code' => 'DE'],\n            ['name' => 'Baden', 'country_code' => 'CH'],\n            ['name' => 'Qagan Us', 'country_code' => 'CN'],\n            ['name' => 'Arsk', 'country_code' => 'RU'],\n            ['name' => 'Timana', 'country_code' => 'CO'],\n            ['name' => 'San Mauro Torinese', 'country_code' => 'IT'],\n            ['name' => 'Sunchales', 'country_code' => 'AR'],\n            ['name' => 'Cambridge', 'country_code' => 'NZ'],\n            ['name' => 'Itapiuna', 'country_code' => 'BR'],\n            ['name' => 'Miracatu', 'country_code' => 'BR'],\n            ['name' => 'Hem', 'country_code' => 'FR'],\n            ['name' => 'Medina del Campo', 'country_code' => 'ES'],\n            ['name' => 'Altonia', 'country_code' => 'BR'],\n            ['name' => 'Gaeta', 'country_code' => 'IT'],\n            ['name' => 'Wilmot', 'country_code' => 'CA'],\n            ['name' => 'Acri', 'country_code' => 'IT'],\n            ['name' => 'Mundra', 'country_code' => 'IN'],\n            ['name' => 'Colonia General Felipe Angeles', 'country_code' => 'MX'],\n            ['name' => 'Laboulaye', 'country_code' => 'AR'],\n            ['name' => 'Tyrnyauz', 'country_code' => 'RU'],\n            ['name' => 'San Pablo Tacachico', 'country_code' => 'SV'],\n            ['name' => 'Pleszew', 'country_code' => 'PL'],\n            ['name' => 'Lynn Haven', 'country_code' => 'US'],\n            ['name' => 'Ferguson', 'country_code' => 'US'],\n            ['name' => 'Khvansar', 'country_code' => 'IR'],\n            ['name' => 'Arlington', 'country_code' => 'US'],\n            ['name' => 'Nova Xavantina', 'country_code' => 'BR'],\n            ['name' => 'Brunswick', 'country_code' => 'US'],\n            ['name' => 'Sacile', 'country_code' => 'IT'],\n            ['name' => 'Cinfaes', 'country_code' => 'PT'],\n            ['name' => 'Agua Branca', 'country_code' => 'BR'],\n            ['name' => 'Willmar', 'country_code' => 'US'],\n            ['name' => 'Alice', 'country_code' => 'US'],\n            ['name' => 'Seydi', 'country_code' => 'TM'],\n            ['name' => 'South Ockendon', 'country_code' => 'GB'],\n            ['name' => 'Swansboro', 'country_code' => 'US'],\n            ['name' => 'Marblehead', 'country_code' => 'US'],\n            ['name' => 'Murphy', 'country_code' => 'US'],\n            ['name' => 'Gostyn', 'country_code' => 'PL'],\n            ['name' => 'Sao Joaquim do Monte', 'country_code' => 'BR'],\n            ['name' => 'Lannion', 'country_code' => 'FR'],\n            ['name' => 'Bad Waldsee', 'country_code' => 'DE'],\n            ['name' => 'Ushtobe', 'country_code' => 'KZ'],\n            ['name' => 'Carquefou', 'country_code' => 'FR'],\n            ['name' => 'Tobe', 'country_code' => 'JP'],\n            ['name' => 'Takanabe', 'country_code' => 'JP'],\n            ['name' => 'Culpeper', 'country_code' => 'US'],\n            ['name' => 'San Lorenzo', 'country_code' => 'CO'],\n            ['name' => 'Ocos', 'country_code' => 'GT'],\n            ['name' => 'Berlin', 'country_code' => 'US'],\n            ['name' => 'Ozark', 'country_code' => 'US'],\n            ['name' => 'Cagwait', 'country_code' => 'PH'],\n            ['name' => 'Puerto Quito', 'country_code' => 'EC'],\n            ['name' => 'Lugait', 'country_code' => 'PH'],\n            ['name' => 'Montalto Uffugo', 'country_code' => 'IT'],\n            ['name' => 'Rancheria Payau', 'country_code' => 'PH'],\n            ['name' => 'American Canyon', 'country_code' => 'US'],\n            ['name' => 'Gaz', 'country_code' => 'IR'],\n            ['name' => 'Annaberg-Buchholz', 'country_code' => 'DE'],\n            ['name' => 'Papillion', 'country_code' => 'US'],\n            ['name' => 'Baza', 'country_code' => 'ES'],\n            ['name' => 'Loja', 'country_code' => 'ES'],\n            ['name' => 'Kampong Thum', 'country_code' => 'KH'],\n            ['name' => 'Rhenen', 'country_code' => 'NL'],\n            ['name' => 'Piove di Sacco', 'country_code' => 'IT'],\n            ['name' => 'Tenjo', 'country_code' => 'CO'],\n            ['name' => 'Schwanewede', 'country_code' => 'DE'],\n            ['name' => 'Ely', 'country_code' => 'GB'],\n            ['name' => 'Belur', 'country_code' => 'IN'],\n            ['name' => 'Moorestown', 'country_code' => 'US'],\n            ['name' => 'Ibiruba', 'country_code' => 'BR'],\n            ['name' => 'The Dalles', 'country_code' => 'US'],\n            ['name' => 'Karnobat', 'country_code' => 'BG'],\n            ['name' => 'Edam', 'country_code' => 'NL'],\n            ['name' => 'Adel', 'country_code' => 'GB'],\n            ['name' => 'Ostrov', 'country_code' => 'RU'],\n            ['name' => 'Bladel', 'country_code' => 'NL'],\n            ['name' => 'Jaboticatubas', 'country_code' => 'BR'],\n            ['name' => 'Cabra', 'country_code' => 'ES'],\n            ['name' => 'Requena', 'country_code' => 'ES'],\n            ['name' => 'Essex', 'country_code' => 'CA'],\n            ['name' => 'Villefontaine', 'country_code' => 'FR'],\n            ['name' => 'Uetze', 'country_code' => 'DE'],\n            ['name' => 'Porrino', 'country_code' => 'ES'],\n            ['name' => 'La Estrada', 'country_code' => 'ES'],\n            ['name' => 'Svilengrad', 'country_code' => 'BG'],\n            ['name' => 'Barre', 'country_code' => 'US'],\n            ['name' => 'Kubinka', 'country_code' => 'RU'],\n            ['name' => 'Wittmund', 'country_code' => 'DE'],\n            ['name' => 'Canas', 'country_code' => 'CR'],\n            ['name' => 'Hatvan', 'country_code' => 'HU'],\n            ['name' => 'Amherst Center', 'country_code' => 'US'],\n            ['name' => 'Reggane', 'country_code' => 'DZ'],\n            ['name' => 'Concordia', 'country_code' => 'CO'],\n            ['name' => 'Melzo', 'country_code' => 'IT'],\n            ['name' => 'Pinan', 'country_code' => 'PH'],\n            ['name' => 'Crest Hill', 'country_code' => 'US'],\n            ['name' => 'Zulpich', 'country_code' => 'DE'],\n            ['name' => 'Bequimao', 'country_code' => 'BR'],\n            ['name' => 'Punta Gorda', 'country_code' => 'US'],\n            ['name' => 'Mayluu-Suu', 'country_code' => 'KG'],\n            ['name' => 'Teculutan', 'country_code' => 'GT'],\n            ['name' => 'Kloten', 'country_code' => 'CH'],\n            ['name' => 'Wilnsdorf', 'country_code' => 'DE'],\n            ['name' => 'Neabsco', 'country_code' => 'US'],\n            ['name' => 'Melnik', 'country_code' => 'CZ'],\n            ['name' => 'Newton', 'country_code' => 'US'],\n            ['name' => 'Khowrzuq', 'country_code' => 'IR'],\n            ['name' => 'Poplar Bluff', 'country_code' => 'US'],\n            ['name' => 'Ennis', 'country_code' => 'US'],\n            ['name' => 'Coolbaugh', 'country_code' => 'US'],\n            ['name' => 'Oberkirch', 'country_code' => 'DE'],\n            ['name' => 'Cuite', 'country_code' => 'BR'],\n            ['name' => 'Jaguaruna', 'country_code' => 'BR'],\n            ['name' => 'Tukwila', 'country_code' => 'US'],\n            ['name' => 'Marneuli', 'country_code' => 'GE'],\n            ['name' => 'Ogden', 'country_code' => 'US'],\n            ['name' => 'Satiro Dias', 'country_code' => 'BR'],\n            ['name' => 'Donauworth', 'country_code' => 'DE'],\n            ['name' => 'Greiz', 'country_code' => 'DE'],\n            ['name' => 'Sao Jose do Rio Preto', 'country_code' => 'BR'],\n            ['name' => 'Tsotsin-Yurt', 'country_code' => 'RU'],\n            ['name' => 'Horstel', 'country_code' => 'DE'],\n            ['name' => 'Rumoi', 'country_code' => 'JP'],\n            ['name' => 'Prunedale', 'country_code' => 'US'],\n            ['name' => 'Orvieto', 'country_code' => 'IT'],\n            ['name' => 'Santo Antonio do Sudoeste', 'country_code' => 'BR'],\n            ['name' => 'Jirkov', 'country_code' => 'CZ'],\n            ['name' => 'Jdour', 'country_code' => 'MA'],\n            ['name' => 'Albertville', 'country_code' => 'FR'],\n            ['name' => 'Mirfield', 'country_code' => 'GB'],\n            ['name' => 'Leinefelde', 'country_code' => 'DE'],\n            ['name' => 'Aragarcas', 'country_code' => 'BR'],\n            ['name' => 'Payson', 'country_code' => 'US'],\n            ['name' => 'Villa Hidalgo', 'country_code' => 'MX'],\n            ['name' => 'Lichtenfels', 'country_code' => 'DE'],\n            ['name' => 'Mountain Brook', 'country_code' => 'US'],\n            ['name' => 'Sergach', 'country_code' => 'RU'],\n            ['name' => 'Dingolfing', 'country_code' => 'DE'],\n            ['name' => 'Padre Paraiso', 'country_code' => 'BR'],\n            ['name' => 'Porto Real do Colegio', 'country_code' => 'BR'],\n            ['name' => 'Glassboro', 'country_code' => 'US'],\n            ['name' => 'Pedro Carbo', 'country_code' => 'EC'],\n            ['name' => 'Simiti', 'country_code' => 'CO'],\n            ['name' => 'Sandwich', 'country_code' => 'US'],\n            ['name' => 'Neustrelitz', 'country_code' => 'DE'],\n            ['name' => 'Ciudad Melchor de Mencos', 'country_code' => 'GT'],\n            ['name' => 'Rovira', 'country_code' => 'CO'],\n            ['name' => 'Bouguenais', 'country_code' => 'FR'],\n            ['name' => 'Nachod', 'country_code' => 'CZ'],\n            ['name' => 'Brandys nad Labem-Stara Boleslav', 'country_code' => 'CZ'],\n            ['name' => 'Diguapo', 'country_code' => 'CN'],\n            ['name' => 'New Canaan', 'country_code' => 'US'],\n            ['name' => 'Hakui', 'country_code' => 'JP'],\n            ['name' => 'Ashland', 'country_code' => 'US'],\n            ['name' => 'Minturno', 'country_code' => 'IT'],\n            ['name' => 'La Paz', 'country_code' => 'PH'],\n            ['name' => 'El Viso del Alcor', 'country_code' => 'ES'],\n            ['name' => 'Sbeitla', 'country_code' => 'TN'],\n            ['name' => 'Lalin', 'country_code' => 'ES'],\n            ['name' => 'Kety', 'country_code' => 'PL'],\n            ['name' => 'Shelton', 'country_code' => 'US'],\n            ['name' => 'San Guillermo', 'country_code' => 'PH'],\n            ['name' => 'Torgau', 'country_code' => 'DE'],\n            ['name' => 'Shenandoah', 'country_code' => 'US'],\n            ['name' => 'Aracariguama', 'country_code' => 'BR'],\n            ['name' => 'Mougins', 'country_code' => 'FR'],\n            ['name' => 'Buckingham', 'country_code' => 'US'],\n            ['name' => 'Major Isidoro', 'country_code' => 'BR'],\n            ['name' => 'Tuburan', 'country_code' => 'PH'],\n            ['name' => 'Acqui Terme', 'country_code' => 'IT'],\n            ['name' => 'Cherry Hill', 'country_code' => 'US'],\n            ['name' => 'Rosas', 'country_code' => 'ES'],\n            ['name' => 'Henderson', 'country_code' => 'US'],\n            ['name' => 'Viadana', 'country_code' => 'IT'],\n            ['name' => 'Eastwood', 'country_code' => 'GB'],\n            ['name' => 'Cruz Grande', 'country_code' => 'MX'],\n            ['name' => 'Linda', 'country_code' => 'US'],\n            ['name' => 'Yeniseysk', 'country_code' => 'RU'],\n            ['name' => 'Skegness', 'country_code' => 'GB'],\n            ['name' => 'Holzminden', 'country_code' => 'DE'],\n            ['name' => 'Muhlenberg', 'country_code' => 'US'],\n            ['name' => 'Calatayud', 'country_code' => 'ES'],\n            ['name' => 'Agoura Hills', 'country_code' => 'US'],\n            ['name' => 'Goole', 'country_code' => 'GB'],\n            ['name' => 'Cahors', 'country_code' => 'FR'],\n            ['name' => 'East Hemet', 'country_code' => 'US'],\n            ['name' => 'Celorico de Basto', 'country_code' => 'PT'],\n            ['name' => 'Zubia', 'country_code' => 'ES'],\n            ['name' => 'Libertyville', 'country_code' => 'US'],\n            ['name' => 'Dracevo', 'country_code' => 'MK'],\n            ['name' => 'Durango', 'country_code' => 'US'],\n            ['name' => 'Fot', 'country_code' => 'HU'],\n            ['name' => 'Le Puy-en-Velay', 'country_code' => 'FR'],\n            ['name' => 'Sapang Dalaga', 'country_code' => 'PH'],\n            ['name' => 'Bad Krozingen', 'country_code' => 'DE'],\n            ['name' => 'Snina', 'country_code' => 'SK'],\n            ['name' => 'Pikalevo', 'country_code' => 'RU'],\n            ['name' => 'East Northport', 'country_code' => 'US'],\n            ['name' => 'Llorente', 'country_code' => 'PH'],\n            ['name' => 'Ivoti', 'country_code' => 'BR'],\n            ['name' => 'Vriezenveen', 'country_code' => 'NL'],\n            ['name' => 'Wisch', 'country_code' => 'NL'],\n            ['name' => 'Kotelnikovo', 'country_code' => 'RU'],\n            ['name' => 'Bichena', 'country_code' => 'ET'],\n            ['name' => 'Culion', 'country_code' => 'PH'],\n            ['name' => 'Abrisham', 'country_code' => 'IR'],\n            ['name' => 'Howard', 'country_code' => 'US'],\n            ['name' => 'Irlam', 'country_code' => 'GB'],\n            ['name' => 'Sao Luis Gonzaga do Maranhao', 'country_code' => 'BR'],\n            ['name' => 'Monmouth', 'country_code' => 'US'],\n            ['name' => 'Ypsilanti', 'country_code' => 'US'],\n            ['name' => 'Toprakkale', 'country_code' => 'TR'],\n            ['name' => 'Rocky Hill', 'country_code' => 'US'],\n            ['name' => 'Mokena', 'country_code' => 'US'],\n            ['name' => 'Fort St. John', 'country_code' => 'CA'],\n            ['name' => 'Ebbw Vale', 'country_code' => 'GB'],\n            ['name' => 'Wildeshausen', 'country_code' => 'DE'],\n            ['name' => 'Sesheke', 'country_code' => 'ZM'],\n            ['name' => 'Saint-Die-des-Vosges', 'country_code' => 'FR'],\n            ['name' => 'Pleasantville', 'country_code' => 'US'],\n            ['name' => 'L Isle-sur-la-Sorgue', 'country_code' => 'FR'],\n            ['name' => 'Affton', 'country_code' => 'US'],\n            ['name' => 'Millburn', 'country_code' => 'US'],\n            ['name' => 'Metztitlan', 'country_code' => 'MX'],\n            ['name' => 'Haka', 'country_code' => 'MM'],\n            ['name' => 'Bartow', 'country_code' => 'US'],\n            ['name' => 'Guding', 'country_code' => 'CN'],\n            ['name' => 'Mithi', 'country_code' => 'PK'],\n            ['name' => 'Scarborough', 'country_code' => 'US'],\n            ['name' => 'Ashland', 'country_code' => 'US'],\n            ['name' => 'Mead Valley', 'country_code' => 'US'],\n            ['name' => 'Telgte', 'country_code' => 'DE'],\n            ['name' => 'Jiangjiehe', 'country_code' => 'CN'],\n            ['name' => 'Miamisburg', 'country_code' => 'US'],\n            ['name' => 'Lancing', 'country_code' => 'GB'],\n            ['name' => 'Yuancun', 'country_code' => 'CN'],\n            ['name' => 'Qorasuv', 'country_code' => 'UZ'],\n            ['name' => 'Araruna', 'country_code' => 'BR'],\n            ['name' => 'Grafton', 'country_code' => 'AU'],\n            ['name' => 'Merrick', 'country_code' => 'US'],\n            ['name' => 'Schilde', 'country_code' => 'BE'],\n            ['name' => ' Ali Ben Sliman', 'country_code' => 'MA'],\n            ['name' => 'Naranjos', 'country_code' => 'MX'],\n            ['name' => 'Mairi', 'country_code' => 'BR'],\n            ['name' => 'Charleston', 'country_code' => 'US'],\n            ['name' => 'Germantown', 'country_code' => 'US'],\n            ['name' => 'Uetersen', 'country_code' => 'DE'],\n            ['name' => 'Giengen an der Brenz', 'country_code' => 'DE'],\n            ['name' => 'La Chapelle-sur-Erdre', 'country_code' => 'FR'],\n            ['name' => 'Aquidaba', 'country_code' => 'BR'],\n            ['name' => 'Icapui', 'country_code' => 'BR'],\n            ['name' => 'Anage', 'country_code' => 'BR'],\n            ['name' => 'Guaymango', 'country_code' => 'SV'],\n            ['name' => 'Itarantim', 'country_code' => 'BR'],\n            ['name' => 'Taquarana', 'country_code' => 'BR'],\n            ['name' => 'Guapiacu', 'country_code' => 'BR'],\n            ['name' => 'Escanaba', 'country_code' => 'US'],\n            ['name' => 'Northwich', 'country_code' => 'GB'],\n            ['name' => 'Selden', 'country_code' => 'US'],\n            ['name' => 'Bayou Cane', 'country_code' => 'US'],\n            ['name' => 'Cartaya', 'country_code' => 'ES'],\n            ['name' => 'Mililani Mauka', 'country_code' => 'US'],\n            ['name' => 'Jericoacoara', 'country_code' => 'BR'],\n            ['name' => 'Glinde', 'country_code' => 'DE'],\n            ['name' => 'Kwinana', 'country_code' => 'AU'],\n            ['name' => 'Kasongo-Lunda', 'country_code' => 'CD'],\n            ['name' => 'Zverevo', 'country_code' => 'RU'],\n            ['name' => 'Cassano d Adda', 'country_code' => 'IT'],\n            ['name' => 'Tegelen', 'country_code' => 'NL'],\n            ['name' => 'Snellville', 'country_code' => 'US'],\n            ['name' => 'Shirahama', 'country_code' => 'JP'],\n            ['name' => 'Hidrolandia', 'country_code' => 'BR'],\n            ['name' => 'Zhaodianzi', 'country_code' => 'CN'],\n            ['name' => 'Moana', 'country_code' => 'ES'],\n            ['name' => 'Junqueiropolis', 'country_code' => 'BR'],\n            ['name' => 'Zhosaly', 'country_code' => 'KZ'],\n            ['name' => 'Zwijndrecht', 'country_code' => 'BE'],\n            ['name' => 'Kuysinjaq', 'country_code' => 'IQ'],\n            ['name' => 'Santiago Texacuangos', 'country_code' => 'SV'],\n            ['name' => 'Sulphur', 'country_code' => 'US'],\n            ['name' => 'L Assomption', 'country_code' => 'CA'],\n            ['name' => 'Alagir', 'country_code' => 'RU'],\n            ['name' => 'Shakhunya', 'country_code' => 'RU'],\n            ['name' => 'Kurten', 'country_code' => 'DE'],\n            ['name' => 'South St. Paul', 'country_code' => 'US'],\n            ['name' => 'Oregon', 'country_code' => 'US'],\n            ['name' => 'Ban Tha Kham', 'country_code' => 'TH'],\n            ['name' => 'Tarhzirt', 'country_code' => 'MA'],\n            ['name' => 'Burnie', 'country_code' => 'AU'],\n            ['name' => 'Bachi-Yurt', 'country_code' => 'RU'],\n            ['name' => 'Ipanema', 'country_code' => 'BR'],\n            ['name' => 'Caridade', 'country_code' => 'BR'],\n            ['name' => 'Kyakhta', 'country_code' => 'RU'],\n            ['name' => 'Carira', 'country_code' => 'BR'],\n            ['name' => 'Middleton', 'country_code' => 'US'],\n            ['name' => 'Ferndale', 'country_code' => 'US'],\n            ['name' => 'Casamassima', 'country_code' => 'IT'],\n            ['name' => 'Wetherby', 'country_code' => 'GB'],\n            ['name' => 'Canto do Buriti', 'country_code' => 'BR'],\n            ['name' => 'Yeppoon', 'country_code' => 'AU'],\n            ['name' => 'Forest Park', 'country_code' => 'US'],\n            ['name' => 'Deblin', 'country_code' => 'PL'],\n            ['name' => 'Haya', 'country_code' => 'SD'],\n            ['name' => 'El Mansouria', 'country_code' => 'MA'],\n            ['name' => 'El Arenal', 'country_code' => 'MX'],\n            ['name' => 'La Canada Flintridge', 'country_code' => 'US'],\n            ['name' => 'Hauppauge', 'country_code' => 'US'],\n            ['name' => 'Al Mijlad', 'country_code' => 'SD'],\n            ['name' => 'Zemio', 'country_code' => 'CF'],\n            ['name' => 'Pugo', 'country_code' => 'PH'],\n            ['name' => 'Alpinopolis', 'country_code' => 'BR'],\n            ['name' => 'Torokszentmiklos', 'country_code' => 'HU'],\n            ['name' => 'Neviges', 'country_code' => 'DE'],\n            ['name' => 'Luisiana', 'country_code' => 'PH'],\n            ['name' => 'Ennigerloh', 'country_code' => 'DE'],\n            ['name' => 'Safford', 'country_code' => 'US'],\n            ['name' => 'Rocky River', 'country_code' => 'US'],\n            ['name' => 'Sao Jose de Piranhas', 'country_code' => 'BR'],\n            ['name' => 'Had Zraqtane', 'country_code' => 'MA'],\n            ['name' => 'Ceglie Messapico', 'country_code' => 'IT'],\n            ['name' => 'Usman', 'country_code' => 'RU'],\n            ['name' => 'Concarneau', 'country_code' => 'FR'],\n            ['name' => 'Rubiataba', 'country_code' => 'BR'],\n            ['name' => 'Wenden', 'country_code' => 'DE'],\n            ['name' => 'Mpwapwa', 'country_code' => 'TZ'],\n            ['name' => 'Heusenstamm', 'country_code' => 'DE'],\n            ['name' => 'Uruburetama', 'country_code' => 'BR'],\n            ['name' => 'Ait Tamlil', 'country_code' => 'MA'],\n            ['name' => 'El Reno', 'country_code' => 'US'],\n            ['name' => 'Lajinha', 'country_code' => 'BR'],\n            ['name' => 'Umirim', 'country_code' => 'BR'],\n            ['name' => 'Saco', 'country_code' => 'US'],\n            ['name' => 'Fairwood', 'country_code' => 'US'],\n            ['name' => 'Greenwood', 'country_code' => 'US'],\n            ['name' => 'West St. Paul', 'country_code' => 'US'],\n            ['name' => 'Xiaqiaotou', 'country_code' => 'CN'],\n            ['name' => 'Rovato', 'country_code' => 'IT'],\n            ['name' => 'Liuliang', 'country_code' => 'CN'],\n            ['name' => 'Salsomaggiore Terme', 'country_code' => 'IT'],\n            ['name' => 'Blankenburg', 'country_code' => 'DE'],\n            ['name' => 'Cardedeu', 'country_code' => 'ES'],\n            ['name' => 'Spennymoor', 'country_code' => 'GB'],\n            ['name' => 'Imouzzer Kandar', 'country_code' => 'MA'],\n            ['name' => 'Aanekoski', 'country_code' => 'FI'],\n            ['name' => 'Volketswil', 'country_code' => 'CH'],\n            ['name' => 'Mapai', 'country_code' => 'MZ'],\n            ['name' => 'Os', 'country_code' => 'NO'],\n            ['name' => 'Schopfheim', 'country_code' => 'DE'],\n            ['name' => 'Pradopolis', 'country_code' => 'BR'],\n            ['name' => 'Valley', 'country_code' => 'US'],\n            ['name' => 'Orinda', 'country_code' => 'US'],\n            ['name' => 'Helena', 'country_code' => 'US'],\n            ['name' => 'Henichesk', 'country_code' => 'UA'],\n            ['name' => 'Comapa', 'country_code' => 'MX'],\n            ['name' => 'Cullman', 'country_code' => 'US'],\n            ['name' => 'Schmalkalden', 'country_code' => 'DE'],\n            ['name' => 'Eschwege', 'country_code' => 'DE'],\n            ['name' => 'Senec', 'country_code' => 'SK'],\n            ['name' => 'Ban Na San', 'country_code' => 'TH'],\n            ['name' => 'Alamo', 'country_code' => 'US'],\n            ['name' => 'Signa', 'country_code' => 'IT'],\n            ['name' => 'Sand Springs', 'country_code' => 'US'],\n            ['name' => 'Brandsen', 'country_code' => 'AR'],\n            ['name' => 'Spoltore', 'country_code' => 'IT'],\n            ['name' => 'Nizhnyaya Tura', 'country_code' => 'RU'],\n            ['name' => 'Tiverton', 'country_code' => 'GB'],\n            ['name' => 'Hamina', 'country_code' => 'FI'],\n            ['name' => 'Vernal', 'country_code' => 'US'],\n            ['name' => 'Callosa de Segura', 'country_code' => 'ES'],\n            ['name' => 'Castilho', 'country_code' => 'BR'],\n            ['name' => 'Laurinburg', 'country_code' => 'US'],\n            ['name' => 'Saint-Lazare', 'country_code' => 'CA'],\n            ['name' => 'Hudson', 'country_code' => 'US'],\n            ['name' => 'Chestermere', 'country_code' => 'CA'],\n            ['name' => 'Painesville', 'country_code' => 'US'],\n            ['name' => 'Poperinge', 'country_code' => 'BE'],\n            ['name' => 'Madalena', 'country_code' => 'BR'],\n            ['name' => 'Sherwood', 'country_code' => 'US'],\n            ['name' => 'Santa Vitoria', 'country_code' => 'BR'],\n            ['name' => 'Lake Zurich', 'country_code' => 'US'],\n            ['name' => 'Ba', 'country_code' => 'FJ'],\n            ['name' => 'El Castillo de La Concepcion', 'country_code' => 'NI'],\n            ['name' => 'Comanesti', 'country_code' => 'RO'],\n            ['name' => 'Gubakha', 'country_code' => 'RU'],\n            ['name' => 'Utebo', 'country_code' => 'ES'],\n            ['name' => 'Castellana Grotte', 'country_code' => 'IT'],\n            ['name' => 'Ariccia', 'country_code' => 'IT'],\n            ['name' => 'Amorebieta', 'country_code' => 'ES'],\n            ['name' => 'Volokolamsk', 'country_code' => 'RU'],\n            ['name' => 'Arcore', 'country_code' => 'IT'],\n            ['name' => 'Puerto Armuelles', 'country_code' => 'PA'],\n            ['name' => 'Waldbrol', 'country_code' => 'DE'],\n            ['name' => 'Huanimaro', 'country_code' => 'MX'],\n            ['name' => 'General Martin Miguel de Guemes', 'country_code' => 'AR'],\n            ['name' => 'Riachao do Dantas', 'country_code' => 'BR'],\n            ['name' => 'Upper Allen', 'country_code' => 'US'],\n            ['name' => 'Saint-Lo', 'country_code' => 'FR'],\n            ['name' => 'Hazlet', 'country_code' => 'US'],\n            ['name' => 'Bressuire', 'country_code' => 'FR'],\n            ['name' => 'Rosedale', 'country_code' => 'US'],\n            ['name' => 'Silla', 'country_code' => 'ES'],\n            ['name' => 'Ottawa', 'country_code' => 'US'],\n            ['name' => 'Lerdo de Tejada', 'country_code' => 'MX'],\n            ['name' => 'Sil-li', 'country_code' => 'KP'],\n            ['name' => 'Itigi', 'country_code' => 'TZ'],\n            ['name' => 'Pescia', 'country_code' => 'IT'],\n            ['name' => 'Barrhead', 'country_code' => 'GB'],\n            ['name' => 'Bourne', 'country_code' => 'US'],\n            ['name' => 'Chipiona', 'country_code' => 'ES'],\n            ['name' => 'Cognac', 'country_code' => 'FR'],\n            ['name' => 'Kitatajima', 'country_code' => 'JP'],\n            ['name' => 'Ochtrup', 'country_code' => 'DE'],\n            ['name' => 'Busra ash Sham', 'country_code' => 'SY'],\n            ['name' => 'Huntsville', 'country_code' => 'CA'],\n            ['name' => 'Sulzbach-Rosenberg', 'country_code' => 'DE'],\n            ['name' => 'Guantiankan', 'country_code' => 'CN'],\n            ['name' => 'Meadowbrook', 'country_code' => 'US'],\n            ['name' => 'Sarstedt', 'country_code' => 'DE'],\n            ['name' => 'Liuguang', 'country_code' => 'CN'],\n            ['name' => 'Corner Brook', 'country_code' => 'CA'],\n            ['name' => 'Casa de Oro-Mount Helix', 'country_code' => 'US'],\n            ['name' => 'Xiaba', 'country_code' => 'CN'],\n            ['name' => 'Monroe', 'country_code' => 'US'],\n            ['name' => 'Paulistana', 'country_code' => 'BR'],\n            ['name' => 'Selestat', 'country_code' => 'FR'],\n            ['name' => 'Zaouia Ait Ishak', 'country_code' => 'MA'],\n            ['name' => 'Lake Shore', 'country_code' => 'US'],\n            ['name' => 'Molln', 'country_code' => 'DE'],\n            ['name' => 'Parma Heights', 'country_code' => 'US'],\n            ['name' => 'Puerto El Triunfo', 'country_code' => 'SV'],\n            ['name' => 'Nyandoma', 'country_code' => 'RU'],\n            ['name' => 'Karcag', 'country_code' => 'HU'],\n            ['name' => 'Nottuln', 'country_code' => 'DE'],\n            ['name' => 'South Whitehall', 'country_code' => 'US'],\n            ['name' => 'Mahmudabad Nemuneh', 'country_code' => 'IR'],\n            ['name' => 'Old Jamestown', 'country_code' => 'US'],\n            ['name' => 'Simonesia', 'country_code' => 'BR'],\n            ['name' => 'Monroe', 'country_code' => 'US'],\n            ['name' => 'Pichidegua', 'country_code' => 'CL'],\n            ['name' => 'Selma', 'country_code' => 'US'],\n            ['name' => 'Makakilo', 'country_code' => 'US'],\n            ['name' => 'Karuizawa', 'country_code' => 'JP'],\n            ['name' => 'Helden', 'country_code' => 'NL'],\n            ['name' => 'Tahlequah', 'country_code' => 'US'],\n            ['name' => 'Jnane Bouih', 'country_code' => 'MA'],\n            ['name' => 'Cajari', 'country_code' => 'BR'],\n            ['name' => 'Brockport', 'country_code' => 'US'],\n            ['name' => 'Calvillo', 'country_code' => 'MX'],\n            ['name' => 'Carate Brianza', 'country_code' => 'IT'],\n            ['name' => 'Atok', 'country_code' => 'PH'],\n            ['name' => 'Itatinga', 'country_code' => 'BR'],\n            ['name' => 'Campina Verde', 'country_code' => 'BR'],\n            ['name' => 'Kleppe', 'country_code' => 'NO'],\n            ['name' => 'Arbaoun', 'country_code' => 'DZ'],\n            ['name' => 'Luna', 'country_code' => 'PH'],\n            ['name' => 'Marsberg', 'country_code' => 'DE'],\n            ['name' => 'Norton', 'country_code' => 'US'],\n            ['name' => 'Casalgrande', 'country_code' => 'IT'],\n            ['name' => 'Rockport', 'country_code' => 'US'],\n            ['name' => 'Tradate', 'country_code' => 'IT'],\n            ['name' => 'Upper St. Clair', 'country_code' => 'US'],\n            ['name' => 'Regente Feijo', 'country_code' => 'BR'],\n            ['name' => 'Ekazhevo', 'country_code' => 'RU'],\n            ['name' => 'Varpalota', 'country_code' => 'HU'],\n            ['name' => 'Rio Segundo', 'country_code' => 'AR'],\n            ['name' => 'Oschersleben', 'country_code' => 'DE'],\n            ['name' => 'Hongshui', 'country_code' => 'CN'],\n            ['name' => 'Pocao de Pedras', 'country_code' => 'BR'],\n            ['name' => 'Mesquite', 'country_code' => 'US'],\n            ['name' => 'Agryz', 'country_code' => 'RU'],\n            ['name' => 'Rybnoye', 'country_code' => 'RU'],\n            ['name' => 'Tash-Komur', 'country_code' => 'KG'],\n            ['name' => 'Polonuevo', 'country_code' => 'CO'],\n            ['name' => 'Front Royal', 'country_code' => 'US'],\n            ['name' => 'Eupen', 'country_code' => 'BE'],\n            ['name' => 'San Jose Ojetenam', 'country_code' => 'GT'],\n            ['name' => 'Babanusah', 'country_code' => 'SD'],\n            ['name' => 'Kufstein', 'country_code' => 'AT'],\n            ['name' => 'Chopinzinho', 'country_code' => 'BR'],\n            ['name' => 'West Mifflin', 'country_code' => 'US'],\n            ['name' => 'Doujing', 'country_code' => 'CN'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Cirie', 'country_code' => 'IT'],\n            ['name' => 'Urumita', 'country_code' => 'CO'],\n            ['name' => 'Jakobstad', 'country_code' => 'FI'],\n            ['name' => 'Anguillara Sabazia', 'country_code' => 'IT'],\n            ['name' => 'Rhar el Melah', 'country_code' => 'TN'],\n            ['name' => 'Somerton', 'country_code' => 'US'],\n            ['name' => 'Naklo nad Notecia', 'country_code' => 'PL'],\n            ['name' => 'Blythe', 'country_code' => 'US'],\n            ['name' => 'Southbury', 'country_code' => 'US'],\n            ['name' => 'Borda da Mata', 'country_code' => 'BR'],\n            ['name' => 'Dharmsala', 'country_code' => 'IN'],\n            ['name' => 'Ziar nad Hronom', 'country_code' => 'SK'],\n            ['name' => 'Porto Grande', 'country_code' => 'BR'],\n            ['name' => 'Yuanhucun', 'country_code' => 'CN'],\n            ['name' => 'Cugnaux', 'country_code' => 'FR'],\n            ['name' => 'Oulad Salmane', 'country_code' => 'MA'],\n            ['name' => 'Riverview', 'country_code' => 'CA'],\n            ['name' => 'Bethel', 'country_code' => 'US'],\n            ['name' => 'Sandbach', 'country_code' => 'GB'],\n            ['name' => 'Yahotyn', 'country_code' => 'UA'],\n            ['name' => 'Wangaratta', 'country_code' => 'AU'],\n            ['name' => 'Momchilgrad', 'country_code' => 'BG'],\n            ['name' => 'Malabuyoc', 'country_code' => 'PH'],\n            ['name' => 'Barreira', 'country_code' => 'BR'],\n            ['name' => 'Capoeiras', 'country_code' => 'BR'],\n            ['name' => 'Weil der Stadt', 'country_code' => 'DE'],\n            ['name' => 'Espiritu', 'country_code' => 'PH'],\n            ['name' => 'Ait Bousarane', 'country_code' => 'MA'],\n            ['name' => 'Lloydminster', 'country_code' => 'CA'],\n            ['name' => 'Burghausen', 'country_code' => 'DE'],\n            ['name' => 'Keszthely', 'country_code' => 'HU'],\n            ['name' => 'Horizon City', 'country_code' => 'US'],\n            ['name' => 'Levin', 'country_code' => 'NZ'],\n            ['name' => 'Montgomery', 'country_code' => 'US'],\n            ['name' => 'Tirmitine', 'country_code' => 'DZ'],\n            ['name' => 'Presidente Olegario', 'country_code' => 'BR'],\n            ['name' => 'El Arahal', 'country_code' => 'ES'],\n            ['name' => 'Rawah', 'country_code' => 'IQ'],\n            ['name' => 'Ban Bueng', 'country_code' => 'TH'],\n            ['name' => 'Stillwater', 'country_code' => 'US'],\n            ['name' => 'Cherepanovo', 'country_code' => 'RU'],\n            ['name' => 'Eloy', 'country_code' => 'US'],\n            ['name' => 'Artik', 'country_code' => 'AM'],\n            ['name' => 'Utinga', 'country_code' => 'BR'],\n            ['name' => 'Sint-Gillis-Waas', 'country_code' => 'BE'],\n            ['name' => 'Joliette', 'country_code' => 'CA'],\n            ['name' => 'Atasu', 'country_code' => 'KZ'],\n            ['name' => 'Nesoddtangen', 'country_code' => 'NO'],\n            ['name' => 'Hechingen', 'country_code' => 'DE'],\n            ['name' => 'Tolentino', 'country_code' => 'IT'],\n            ['name' => 'Roznava', 'country_code' => 'SK'],\n            ['name' => 'Adria', 'country_code' => 'IT'],\n            ['name' => 'Meerssen', 'country_code' => 'NL'],\n            ['name' => 'Riom', 'country_code' => 'FR'],\n            ['name' => 'Bruges', 'country_code' => 'FR'],\n            ['name' => 'Diepenbeek', 'country_code' => 'BE'],\n            ['name' => 'Brigham City', 'country_code' => 'US'],\n            ['name' => 'Plaisance-du-Touch', 'country_code' => 'FR'],\n            ['name' => 'Yershov', 'country_code' => 'RU'],\n            ['name' => 'Hemmingen', 'country_code' => 'DE'],\n            ['name' => 'Heinola', 'country_code' => 'FI'],\n            ['name' => 'Capela do Alto', 'country_code' => 'BR'],\n            ['name' => 'Gilching', 'country_code' => 'DE'],\n            ['name' => 'Murrysville', 'country_code' => 'US'],\n            ['name' => 'Julio de Castilhos', 'country_code' => 'BR'],\n            ['name' => 'Candelaria', 'country_code' => 'CU'],\n            ['name' => 'Jasien', 'country_code' => 'PL'],\n            ['name' => 'Pidhorodne', 'country_code' => 'UA'],\n            ['name' => 'Abare', 'country_code' => 'BR'],\n            ['name' => 'Morros', 'country_code' => 'BR'],\n            ['name' => 'Brainerd', 'country_code' => 'US'],\n            ['name' => 'Rio Rico', 'country_code' => 'US'],\n            ['name' => 'Engelskirchen', 'country_code' => 'DE'],\n            ['name' => 'Rhede', 'country_code' => 'DE'],\n            ['name' => 'Mazagao', 'country_code' => 'BR'],\n            ['name' => 'Yellowknife', 'country_code' => 'CA'],\n            ['name' => 'Ibicoara', 'country_code' => 'BR'],\n            ['name' => 'Hoxut', 'country_code' => 'CN'],\n            ['name' => 'Haslett', 'country_code' => 'US'],\n            ['name' => 'Haiger', 'country_code' => 'DE'],\n            ['name' => 'Tole Bi', 'country_code' => 'KZ'],\n            ['name' => 'Sao Gabriel', 'country_code' => 'BR'],\n            ['name' => 'Stowmarket', 'country_code' => 'GB'],\n            ['name' => 'Xihuangcun', 'country_code' => 'CN'],\n            ['name' => 'Tullahoma', 'country_code' => 'US'],\n            ['name' => 'Baldwin', 'country_code' => 'US'],\n            ['name' => 'San Miguel', 'country_code' => 'PH'],\n            ['name' => 'Monkseaton', 'country_code' => 'GB'],\n            ['name' => 'Rolante', 'country_code' => 'BR'],\n            ['name' => 'Tapalpa', 'country_code' => 'MX'],\n            ['name' => 'Terek', 'country_code' => 'RU'],\n            ['name' => 'Tipo-Tipo', 'country_code' => 'PH'],\n            ['name' => 'Someren', 'country_code' => 'NL'],\n            ['name' => 'Monroe', 'country_code' => 'US'],\n            ['name' => 'Aradippou', 'country_code' => 'CY'],\n            ['name' => 'Beloyarskiy', 'country_code' => 'RU'],\n            ['name' => 'Norak', 'country_code' => 'TJ'],\n            ['name' => 'Anna', 'country_code' => 'US'],\n            ['name' => 'Kos', 'country_code' => 'GR'],\n            ['name' => 'Borna', 'country_code' => 'DE'],\n            ['name' => 'Bad Aibling', 'country_code' => 'DE'],\n            ['name' => 'Seesen', 'country_code' => 'DE'],\n            ['name' => 'Danville', 'country_code' => 'US'],\n            ['name' => 'Szigethalom', 'country_code' => 'HU'],\n            ['name' => 'Amatan', 'country_code' => 'MX'],\n            ['name' => 'Buckeburg', 'country_code' => 'DE'],\n            ['name' => 'Tadian', 'country_code' => 'PH'],\n            ['name' => 'Romsey', 'country_code' => 'GB'],\n            ['name' => 'Rio Verde de Mato Grosso', 'country_code' => 'BR'],\n            ['name' => 'Bad Berleburg', 'country_code' => 'DE'],\n            ['name' => 'Capinota', 'country_code' => 'BO'],\n            ['name' => 'Squamish', 'country_code' => 'CA'],\n            ['name' => 'Zossen', 'country_code' => 'DE'],\n            ['name' => 'South Burlington', 'country_code' => 'US'],\n            ['name' => 'Kovylkino', 'country_code' => 'RU'],\n            ['name' => 'Kempston', 'country_code' => 'GB'],\n            ['name' => 'Traiskirchen', 'country_code' => 'AT'],\n            ['name' => 'Reriutaba', 'country_code' => 'BR'],\n            ['name' => 'Lichtenvoorde', 'country_code' => 'NL'],\n            ['name' => 'Regensdorf', 'country_code' => 'CH'],\n            ['name' => 'North Liberty', 'country_code' => 'US'],\n            ['name' => 'Lake Butler', 'country_code' => 'US'],\n            ['name' => 'Vincennes', 'country_code' => 'US'],\n            ['name' => 'Heishanzuicun', 'country_code' => 'CN'],\n            ['name' => 'Ardon', 'country_code' => 'RU'],\n            ['name' => 'Huercal-Overa', 'country_code' => 'ES'],\n            ['name' => 'Echt', 'country_code' => 'NL'],\n            ['name' => 'Godo', 'country_code' => 'JP'],\n            ['name' => 'Kantharalak', 'country_code' => 'TH'],\n            ['name' => 'Sienna Plantation', 'country_code' => 'US'],\n            ['name' => 'Heishuikeng', 'country_code' => 'CN'],\n            ['name' => 'Holtsville', 'country_code' => 'US'],\n            ['name' => 'Kapangan', 'country_code' => 'PH'],\n            ['name' => 'East Dereham', 'country_code' => 'GB'],\n            ['name' => 'Mayen', 'country_code' => 'DE'],\n            ['name' => 'Magitang', 'country_code' => 'CN'],\n            ['name' => 'Abbeville', 'country_code' => 'US'],\n            ['name' => 'Vila Real de Santo Antonio', 'country_code' => 'PT'],\n            ['name' => 'Tettnang', 'country_code' => 'DE'],\n            ['name' => 'Lodeynoye Pole', 'country_code' => 'RU'],\n            ['name' => 'Fecamp', 'country_code' => 'FR'],\n            ['name' => 'Bourbonnais', 'country_code' => 'US'],\n            ['name' => 'Starodub', 'country_code' => 'RU'],\n            ['name' => 'Motru', 'country_code' => 'RO'],\n            ['name' => 'Sipoo', 'country_code' => 'FI'],\n            ['name' => 'Royan', 'country_code' => 'FR'],\n            ['name' => 'Mullheim', 'country_code' => 'DE'],\n            ['name' => 'Ramsbottom', 'country_code' => 'GB'],\n            ['name' => 'Syosset', 'country_code' => 'US'],\n            ['name' => 'Zola Predosa', 'country_code' => 'IT'],\n            ['name' => 'Lancut', 'country_code' => 'PL'],\n            ['name' => 'Matteson', 'country_code' => 'US'],\n            ['name' => 'Papanduva', 'country_code' => 'BR'],\n            ['name' => 'Riviere-du-Loup', 'country_code' => 'CA'],\n            ['name' => 'Lake Forest', 'country_code' => 'US'],\n            ['name' => 'Pariquera-Acu', 'country_code' => 'BR'],\n            ['name' => 'Aguinaldo', 'country_code' => 'PH'],\n            ['name' => 'Quixere', 'country_code' => 'BR'],\n            ['name' => 'Salgado', 'country_code' => 'BR'],\n            ['name' => 'Chiari', 'country_code' => 'IT'],\n            ['name' => 'Cobourg', 'country_code' => 'CA'],\n            ['name' => 'Kolbermoor', 'country_code' => 'DE'],\n            ['name' => 'Krasnystaw', 'country_code' => 'PL'],\n            ['name' => 'Tangbian', 'country_code' => 'CN'],\n            ['name' => 'Dalanzadgad', 'country_code' => 'MN'],\n            ['name' => 'Venceslau Bras', 'country_code' => 'BR'],\n            ['name' => 'Vellmar', 'country_code' => 'DE'],\n            ['name' => 'Angleton', 'country_code' => 'US'],\n            ['name' => 'Ituacu', 'country_code' => 'BR'],\n            ['name' => 'Lower Allen', 'country_code' => 'US'],\n            ['name' => 'Scorze', 'country_code' => 'IT'],\n            ['name' => 'Bad Tolz', 'country_code' => 'DE'],\n            ['name' => 'Tres Barras', 'country_code' => 'BR'],\n            ['name' => 'Pultusk', 'country_code' => 'PL'],\n            ['name' => 'Dorchester', 'country_code' => 'GB'],\n            ['name' => 'Dagohoy', 'country_code' => 'PH'],\n            ['name' => 'Mingjiujie', 'country_code' => 'CN'],\n            ['name' => 'Rayevskiy', 'country_code' => 'RU'],\n            ['name' => 'Cabildo', 'country_code' => 'CL'],\n            ['name' => 'Castaic', 'country_code' => 'US'],\n            ['name' => 'Kamiichi', 'country_code' => 'JP'],\n            ['name' => 'Senges', 'country_code' => 'BR'],\n            ['name' => 'Bad Pyrmont', 'country_code' => 'DE'],\n            ['name' => 'Cocos', 'country_code' => 'BR'],\n            ['name' => 'Canby', 'country_code' => 'US'],\n            ['name' => 'Ferguson', 'country_code' => 'US'],\n            ['name' => 'Montemurlo', 'country_code' => 'IT'],\n            ['name' => 'Aguas Formosas', 'country_code' => 'BR'],\n            ['name' => 'Balta', 'country_code' => 'UA'],\n            ['name' => 'Juquia', 'country_code' => 'BR'],\n            ['name' => 'Wendell', 'country_code' => 'US'],\n            ['name' => 'Marchena', 'country_code' => 'ES'],\n            ['name' => 'San Vito dei Normanni', 'country_code' => 'IT'],\n            ['name' => 'Wittlich', 'country_code' => 'DE'],\n            ['name' => 'Monte Azul Paulista', 'country_code' => 'BR'],\n            ['name' => 'Schwalmtal', 'country_code' => 'DE'],\n            ['name' => 'Paranapanema', 'country_code' => 'BR'],\n            ['name' => 'Ampere', 'country_code' => 'BR'],\n            ['name' => 'Buerarema', 'country_code' => 'BR'],\n            ['name' => 'Terzigno', 'country_code' => 'IT'],\n            ['name' => 'Iiyama', 'country_code' => 'JP'],\n            ['name' => 'Izra', 'country_code' => 'SY'],\n            ['name' => 'Frankfort', 'country_code' => 'US'],\n            ['name' => 'Mukaiengaru', 'country_code' => 'JP'],\n            ['name' => 'Laconia', 'country_code' => 'US'],\n            ['name' => 'Haldensleben', 'country_code' => 'DE'],\n            ['name' => 'Sorgues', 'country_code' => 'FR'],\n            ['name' => 'Atarfe', 'country_code' => 'ES'],\n            ['name' => 'Bergneustadt', 'country_code' => 'DE'],\n            ['name' => 'Butig', 'country_code' => 'PH'],\n            ['name' => 'Lieto', 'country_code' => 'FI'],\n            ['name' => 'Bracciano', 'country_code' => 'IT'],\n            ['name' => 'Tibagi', 'country_code' => 'BR'],\n            ['name' => 'Narni', 'country_code' => 'IT'],\n            ['name' => 'San Antonio Sacatepequez', 'country_code' => 'GT'],\n            ['name' => 'Silverthorne', 'country_code' => 'US'],\n            ['name' => 'Alhandra', 'country_code' => 'BR'],\n            ['name' => 'Altamont', 'country_code' => 'US'],\n            ['name' => 'Aci Sant Antonio', 'country_code' => 'IT'],\n            ['name' => 'Zerong', 'country_code' => 'CN'],\n            ['name' => 'Sidi Redouane', 'country_code' => 'MA'],\n            ['name' => 'Ayaviri', 'country_code' => 'PE'],\n            ['name' => 'Eersel', 'country_code' => 'NL'],\n            ['name' => 'Kralupy nad Vltavou', 'country_code' => 'CZ'],\n            ['name' => 'Varzelandia', 'country_code' => 'BR'],\n            ['name' => 'Korsholm', 'country_code' => 'FI'],\n            ['name' => 'Ban Mae Hia Nai', 'country_code' => 'TH'],\n            ['name' => 'Moncao', 'country_code' => 'PT'],\n            ['name' => 'Sheridan', 'country_code' => 'US'],\n            ['name' => 'Kirovgrad', 'country_code' => 'RU'],\n            ['name' => 'Soure', 'country_code' => 'PT'],\n            ['name' => 'Lebedyan', 'country_code' => 'RU'],\n            ['name' => 'Durant', 'country_code' => 'US'],\n            ['name' => 'Horizontina', 'country_code' => 'BR'],\n            ['name' => 'Agliana', 'country_code' => 'IT'],\n            ['name' => 'Sylvania', 'country_code' => 'US'],\n            ['name' => 'San Miguel', 'country_code' => 'PH'],\n            ['name' => 'Santa Marinella', 'country_code' => 'IT'],\n            ['name' => 'Veresegyhaz', 'country_code' => 'HU'],\n            ['name' => 'Dolynska', 'country_code' => 'UA'],\n            ['name' => 'Lebach', 'country_code' => 'DE'],\n            ['name' => 'Bakal', 'country_code' => 'RU'],\n            ['name' => 'Groesbeek', 'country_code' => 'NL'],\n            ['name' => 'Kronberg', 'country_code' => 'DE'],\n            ['name' => 'Corning', 'country_code' => 'US'],\n            ['name' => 'Anori', 'country_code' => 'BR'],\n            ['name' => 'Arbutus', 'country_code' => 'US'],\n            ['name' => 'Puttlingen', 'country_code' => 'DE'],\n            ['name' => 'Corbetta', 'country_code' => 'IT'],\n            ['name' => 'Milton', 'country_code' => 'US'],\n            ['name' => 'Pfullingen', 'country_code' => 'DE'],\n            ['name' => 'Iati', 'country_code' => 'BR'],\n            ['name' => 'White Oak', 'country_code' => 'US'],\n            ['name' => 'Lgov', 'country_code' => 'RU'],\n            ['name' => 'Zatec', 'country_code' => 'CZ'],\n            ['name' => 'Sao Francisco de Assis', 'country_code' => 'BR'],\n            ['name' => 'Cranbrook', 'country_code' => 'CA'],\n            ['name' => 'Lede', 'country_code' => 'BE'],\n            ['name' => 'Aroeiras', 'country_code' => 'BR'],\n            ['name' => 'Kabudarahang', 'country_code' => 'IR'],\n            ['name' => 'Sommerda', 'country_code' => 'DE'],\n            ['name' => 'Pinole', 'country_code' => 'US'],\n            ['name' => 'Dolny Kubin', 'country_code' => 'SK'],\n            ['name' => 'Erlanger', 'country_code' => 'US'],\n            ['name' => 'Noci', 'country_code' => 'IT'],\n            ['name' => 'Druten', 'country_code' => 'NL'],\n            ['name' => 'Abdulino', 'country_code' => 'RU'],\n            ['name' => 'Ware', 'country_code' => 'GB'],\n            ['name' => 'Bandar-e Kong', 'country_code' => 'IR'],\n            ['name' => 'Jamiltepec', 'country_code' => 'MX'],\n            ['name' => 'Dillingen', 'country_code' => 'DE'],\n            ['name' => 'Altoona', 'country_code' => 'US'],\n            ['name' => 'Bethany', 'country_code' => 'US'],\n            ['name' => 'Uzhur', 'country_code' => 'RU'],\n            ['name' => 'Moreni', 'country_code' => 'RO'],\n            ['name' => 'Buruanga', 'country_code' => 'PH'],\n            ['name' => 'La Union', 'country_code' => 'CO'],\n            ['name' => 'Lumphat', 'country_code' => 'KH'],\n            ['name' => 'Mount Eliza', 'country_code' => 'AU'],\n            ['name' => 'Albolote', 'country_code' => 'ES'],\n            ['name' => 'Port Alfred', 'country_code' => 'ZA'],\n            ['name' => 'Carlisle', 'country_code' => 'US'],\n            ['name' => 'Antas', 'country_code' => 'BR'],\n            ['name' => 'Whitpain', 'country_code' => 'US'],\n            ['name' => 'Huehuetla', 'country_code' => 'MX'],\n            ['name' => 'El Quetzal', 'country_code' => 'GT'],\n            ['name' => 'Valderrama', 'country_code' => 'PH'],\n            ['name' => 'Capanema', 'country_code' => 'BR'],\n            ['name' => 'Valenza', 'country_code' => 'IT'],\n            ['name' => 'Bredene', 'country_code' => 'BE'],\n            ['name' => 'Vera', 'country_code' => 'AR'],\n            ['name' => 'Maracacume', 'country_code' => 'BR'],\n            ['name' => 'Palmi', 'country_code' => 'IT'],\n            ['name' => 'Ait Ben Daoudi', 'country_code' => 'MA'],\n            ['name' => 'Staveley', 'country_code' => 'GB'],\n            ['name' => 'Apora', 'country_code' => 'BR'],\n            ['name' => 'Stevenson Ranch', 'country_code' => 'US'],\n            ['name' => 'Karia Ba Mohamed', 'country_code' => 'MA'],\n            ['name' => 'Dadeldhura', 'country_code' => 'NP'],\n            ['name' => 'Highland', 'country_code' => 'US'],\n            ['name' => 'Liberal', 'country_code' => 'US'],\n            ['name' => 'Ibirama', 'country_code' => 'BR'],\n            ['name' => 'Sebt Gzoula', 'country_code' => 'MA'],\n            ['name' => 'Tazishan', 'country_code' => 'CN'],\n            ['name' => 'Cameron Park', 'country_code' => 'US'],\n            ['name' => 'Pastavy', 'country_code' => 'BY'],\n            ['name' => 'Tak Bai', 'country_code' => 'TH'],\n            ['name' => 'Bad Driburg', 'country_code' => 'DE'],\n            ['name' => 'Camacupa', 'country_code' => 'AO'],\n            ['name' => 'Santiago', 'country_code' => 'PH'],\n            ['name' => 'La Ligua', 'country_code' => 'CL'],\n            ['name' => 'Dupax del Sur', 'country_code' => 'PH'],\n            ['name' => 'Camocim de Sao Felix', 'country_code' => 'BR'],\n            ['name' => 'Halstenbek', 'country_code' => 'DE'],\n            ['name' => 'Castelfidardo', 'country_code' => 'IT'],\n            ['name' => 'Jussara', 'country_code' => 'BR'],\n            ['name' => 'Prenzlau', 'country_code' => 'DE'],\n            ['name' => 'Pinecrest', 'country_code' => 'US'],\n            ['name' => 'Brie-Comte-Robert', 'country_code' => 'FR'],\n            ['name' => 'Santa Teresita', 'country_code' => 'PH'],\n            ['name' => 'Horseheads', 'country_code' => 'US'],\n            ['name' => 'Pirkkala', 'country_code' => 'FI'],\n            ['name' => 'Goyty', 'country_code' => 'RU'],\n            ['name' => 'Cerqueira Cesar', 'country_code' => 'BR'],\n            ['name' => 'Lower Southampton', 'country_code' => 'US'],\n            ['name' => 'Vence', 'country_code' => 'FR'],\n            ['name' => 'Santa Ana Jilotzingo', 'country_code' => 'MX'],\n            ['name' => 'Magsaysay', 'country_code' => 'PH'],\n            ['name' => 'Klaeng', 'country_code' => 'TH'],\n            ['name' => 'Shemonaikha', 'country_code' => 'KZ'],\n            ['name' => 'Nikolayevsk-na-Amure', 'country_code' => 'RU'],\n            ['name' => 'Oberasbach', 'country_code' => 'DE'],\n            ['name' => 'Bruz', 'country_code' => 'FR'],\n            ['name' => 'Moissy-Cramayel', 'country_code' => 'FR'],\n            ['name' => 'Londerzeel', 'country_code' => 'BE'],\n            ['name' => 'Luneville', 'country_code' => 'FR'],\n            ['name' => 'Tiffin', 'country_code' => 'US'],\n            ['name' => 'Ashkezar', 'country_code' => 'IR'],\n            ['name' => 'Sudbury', 'country_code' => 'US'],\n            ['name' => 'Amares', 'country_code' => 'PT'],\n            ['name' => 'Mount Airy', 'country_code' => 'US'],\n            ['name' => 'Concord', 'country_code' => 'US'],\n            ['name' => 'Beaconsfield', 'country_code' => 'CA'],\n            ['name' => 'Lumbatan', 'country_code' => 'PH'],\n            ['name' => 'Ixtlahuacan del Rio', 'country_code' => 'MX'],\n            ['name' => 'Broadview Heights', 'country_code' => 'US'],\n            ['name' => 'Buriti dos Lopes', 'country_code' => 'BR'],\n            ['name' => 'Targu Neamt', 'country_code' => 'RO'],\n            ['name' => 'Gostynin', 'country_code' => 'PL'],\n            ['name' => 'Sint-Genesius-Rode', 'country_code' => 'BE'],\n            ['name' => 'Palma Campania', 'country_code' => 'IT'],\n            ['name' => 'Baena', 'country_code' => 'ES'],\n            ['name' => 'Silvania', 'country_code' => 'BR'],\n            ['name' => 'Ban Na Yang', 'country_code' => 'TH'],\n            ['name' => 'Luna', 'country_code' => 'PH'],\n            ['name' => 'Guernica y Luno', 'country_code' => 'ES'],\n            ['name' => 'Mumbwa', 'country_code' => 'ZM'],\n            ['name' => 'Xinhua', 'country_code' => 'CN'],\n            ['name' => 'Dormentes', 'country_code' => 'BR'],\n            ['name' => 'Toulal', 'country_code' => 'MA'],\n            ['name' => 'Carmo', 'country_code' => 'BR'],\n            ['name' => 'Tlalnelhuayocan', 'country_code' => 'MX'],\n            ['name' => 'Shimomura', 'country_code' => 'JP'],\n            ['name' => 'Guaranesia', 'country_code' => 'BR'],\n            ['name' => 'Radeberg', 'country_code' => 'DE'],\n            ['name' => 'Valenzano', 'country_code' => 'IT'],\n            ['name' => 'Westbrook', 'country_code' => 'US'],\n            ['name' => 'Matipo', 'country_code' => 'BR'],\n            ['name' => 'Cuquio', 'country_code' => 'MX'],\n            ['name' => 'Komarom', 'country_code' => 'HU'],\n            ['name' => 'Wervik', 'country_code' => 'BE'],\n            ['name' => 'Preveza', 'country_code' => 'GR'],\n            ['name' => 'Cabaceiras do Paraguacu', 'country_code' => 'BR'],\n            ['name' => 'Saugerties', 'country_code' => 'US'],\n            ['name' => 'Umburanas', 'country_code' => 'BR'],\n            ['name' => 'Rawa Mazowiecka', 'country_code' => 'PL'],\n            ['name' => 'Alzey', 'country_code' => 'DE'],\n            ['name' => 'Zuidhorn', 'country_code' => 'NL'],\n            ['name' => 'Akureyri', 'country_code' => 'IS'],\n            ['name' => 'Springwater', 'country_code' => 'CA'],\n            ['name' => 'Holden', 'country_code' => 'US'],\n            ['name' => 'Nova Petropolis', 'country_code' => 'BR'],\n            ['name' => 'Pruzhany', 'country_code' => 'BY'],\n            ['name' => 'Caowotan', 'country_code' => 'CN'],\n            ['name' => 'Proletarsk', 'country_code' => 'RU'],\n            ['name' => 'Banovce nad Bebravou', 'country_code' => 'SK'],\n            ['name' => 'Haukipudas', 'country_code' => 'FI'],\n            ['name' => 'Red Bluff', 'country_code' => 'US'],\n            ['name' => 'Villaquilambre', 'country_code' => 'ES'],\n            ['name' => 'Bronte', 'country_code' => 'IT'],\n            ['name' => 'Arcadia', 'country_code' => 'US'],\n            ['name' => 'Westborough', 'country_code' => 'US'],\n            ['name' => 'Dankov', 'country_code' => 'RU'],\n            ['name' => 'God', 'country_code' => 'HU'],\n            ['name' => 'Onega', 'country_code' => 'RU'],\n            ['name' => 'Ghedi', 'country_code' => 'IT'],\n            ['name' => 'Louviers', 'country_code' => 'FR'],\n            ['name' => 'Puerto Natales', 'country_code' => 'CL'],\n            ['name' => 'Porciuncula', 'country_code' => 'BR'],\n            ['name' => 'Warwick', 'country_code' => 'US'],\n            ['name' => 'White Oak', 'country_code' => 'US'],\n            ['name' => 'Time', 'country_code' => 'NO'],\n            ['name' => 'Caconde', 'country_code' => 'BR'],\n            ['name' => 'Shimanovsk', 'country_code' => 'RU'],\n            ['name' => 'La Nucia', 'country_code' => 'ES'],\n            ['name' => 'Fox Crossing', 'country_code' => 'US'],\n            ['name' => 'Ervalia', 'country_code' => 'BR'],\n            ['name' => 'McKeesport', 'country_code' => 'US'],\n            ['name' => 'Beni Zouli', 'country_code' => 'MA'],\n            ['name' => 'Taft', 'country_code' => 'PH'],\n            ['name' => 'Mill Hill', 'country_code' => 'GB'],\n            ['name' => 'Salcaja', 'country_code' => 'GT'],\n            ['name' => 'Las Terrenas', 'country_code' => 'DO'],\n            ['name' => 'La Crau', 'country_code' => 'FR'],\n            ['name' => 'Eitorf', 'country_code' => 'DE'],\n            ['name' => 'Gyomro', 'country_code' => 'HU'],\n            ['name' => 'Ribera', 'country_code' => 'IT'],\n            ['name' => 'Atlapexco', 'country_code' => 'MX'],\n            ['name' => 'Limerick', 'country_code' => 'US'],\n            ['name' => 'Motomachi', 'country_code' => 'JP'],\n            ['name' => 'La Eliana', 'country_code' => 'ES'],\n            ['name' => 'Bideford', 'country_code' => 'GB'],\n            ['name' => 'Qitai', 'country_code' => 'CN'],\n            ['name' => 'Dorval', 'country_code' => 'CA'],\n            ['name' => 'Stroud', 'country_code' => 'US'],\n            ['name' => 'Jiaoxiyakou', 'country_code' => 'CN'],\n            ['name' => 'Montceau-les-Mines', 'country_code' => 'FR'],\n            ['name' => 'Murray Bridge', 'country_code' => 'AU'],\n            ['name' => 'Antonina', 'country_code' => 'BR'],\n            ['name' => 'Lubang', 'country_code' => 'PH'],\n            ['name' => 'Kalynivka', 'country_code' => 'UA'],\n            ['name' => 'Appley Bridge', 'country_code' => 'GB'],\n            ['name' => 'Troy', 'country_code' => 'US'],\n            ['name' => 'Naantali', 'country_code' => 'FI'],\n            ['name' => 'Onalaska', 'country_code' => 'US'],\n            ['name' => 'Castel Maggiore', 'country_code' => 'IT'],\n            ['name' => 'Kapay', 'country_code' => 'PH'],\n            ['name' => 'Pindoretama', 'country_code' => 'BR'],\n            ['name' => 'Rutigliano', 'country_code' => 'IT'],\n            ['name' => 'Waterford', 'country_code' => 'US'],\n            ['name' => 'Ipaba', 'country_code' => 'BR'],\n            ['name' => 'Uwchlan', 'country_code' => 'US'],\n            ['name' => 'Lexington', 'country_code' => 'US'],\n            ['name' => 'Barao do Grajau', 'country_code' => 'BR'],\n            ['name' => 'Moosburg', 'country_code' => 'DE'],\n            ['name' => 'Avion', 'country_code' => 'FR'],\n            ['name' => 'Springboro', 'country_code' => 'US'],\n            ['name' => 'Poulton le Fylde', 'country_code' => 'GB'],\n            ['name' => 'Terra Santa', 'country_code' => 'BR'],\n            ['name' => 'Whitehall', 'country_code' => 'US'],\n            ['name' => 'Sartell', 'country_code' => 'US'],\n            ['name' => 'Tado', 'country_code' => 'CO'],\n            ['name' => 'Narangba', 'country_code' => 'AU'],\n            ['name' => 'Contamana', 'country_code' => 'PE'],\n            ['name' => 'Itatira', 'country_code' => 'BR'],\n            ['name' => 'Polohy', 'country_code' => 'UA'],\n            ['name' => 'Badger', 'country_code' => 'US'],\n            ['name' => 'Paks', 'country_code' => 'HU'],\n            ['name' => 'Chapada dos Guimaraes', 'country_code' => 'BR'],\n            ['name' => 'Cofradia', 'country_code' => 'HN'],\n            ['name' => 'Louny', 'country_code' => 'CZ'],\n            ['name' => 'Five Corners', 'country_code' => 'US'],\n            ['name' => 'Landa de Matamoros', 'country_code' => 'MX'],\n            ['name' => 'Mo i Rana', 'country_code' => 'NO'],\n            ['name' => 'Contenda', 'country_code' => 'BR'],\n            ['name' => 'McAlester', 'country_code' => 'US'],\n            ['name' => 'Hardinxveld-Giessendam', 'country_code' => 'NL'],\n            ['name' => 'Nelidovo', 'country_code' => 'RU'],\n            ['name' => 'Stord', 'country_code' => 'NO'],\n            ['name' => 'Laukaa', 'country_code' => 'FI'],\n            ['name' => 'Hala', 'country_code' => 'CN'],\n            ['name' => 'Conceicao', 'country_code' => 'BR'],\n            ['name' => 'Drunen', 'country_code' => 'NL'],\n            ['name' => 'Szazhalombatta', 'country_code' => 'HU'],\n            ['name' => 'Sestri Levante', 'country_code' => 'IT'],\n            ['name' => 'Mount Isa', 'country_code' => 'AU'],\n            ['name' => 'La Follette', 'country_code' => 'US'],\n            ['name' => 'Velez', 'country_code' => 'CO'],\n            ['name' => 'Alfeld', 'country_code' => 'DE'],\n            ['name' => 'Aberystwyth', 'country_code' => 'GB'],\n            ['name' => 'Le Pontet', 'country_code' => 'FR'],\n            ['name' => 'Fushe-Kruje', 'country_code' => 'AL'],\n            ['name' => 'Muttenz', 'country_code' => 'CH'],\n            ['name' => 'Benicasim', 'country_code' => 'ES'],\n            ['name' => 'Piatykhatky', 'country_code' => 'UA'],\n            ['name' => 'Terrell', 'country_code' => 'US'],\n            ['name' => 'Heanor', 'country_code' => 'GB'],\n            ['name' => 'Tocaima', 'country_code' => 'CO'],\n            ['name' => 'Meylan', 'country_code' => 'FR'],\n            ['name' => 'Kara-Kol', 'country_code' => 'KG'],\n            ['name' => 'Kalach', 'country_code' => 'RU'],\n            ['name' => 'San Lorenzo de El Escorial', 'country_code' => 'ES'],\n            ['name' => 'Natchitoches', 'country_code' => 'US'],\n            ['name' => 'Oulmes', 'country_code' => 'MA'],\n            ['name' => 'Targu Secuiesc', 'country_code' => 'RO'],\n            ['name' => 'Twinsburg', 'country_code' => 'US'],\n            ['name' => 'Taufkirchen', 'country_code' => 'DE'],\n            ['name' => 'Central Point', 'country_code' => 'US'],\n            ['name' => 'Bemmel', 'country_code' => 'NL'],\n            ['name' => 'Esperanza', 'country_code' => 'PH'],\n            ['name' => 'Crimmitschau', 'country_code' => 'DE'],\n            ['name' => 'Seminole', 'country_code' => 'US'],\n            ['name' => 'Burscheid', 'country_code' => 'DE'],\n            ['name' => 'Kilbirnie', 'country_code' => 'GB'],\n            ['name' => 'Dzuunharaa', 'country_code' => 'MN'],\n            ['name' => 'Montville', 'country_code' => 'US'],\n            ['name' => 'Coldwater', 'country_code' => 'US'],\n            ['name' => 'Gossau', 'country_code' => 'CH'],\n            ['name' => 'Porto Acre', 'country_code' => 'BR'],\n            ['name' => 'Owego', 'country_code' => 'US'],\n            ['name' => 'Starobilsk', 'country_code' => 'UA'],\n            ['name' => 'Bareggio', 'country_code' => 'IT'],\n            ['name' => 'Marsciano', 'country_code' => 'IT'],\n            ['name' => 'Batalha', 'country_code' => 'BR'],\n            ['name' => 'Peterhead', 'country_code' => 'GB'],\n            ['name' => 'West Manchester', 'country_code' => 'US'],\n            ['name' => 'Sortavala', 'country_code' => 'RU'],\n            ['name' => 'Victoria', 'country_code' => 'MX'],\n            ['name' => 'Lessines', 'country_code' => 'BE'],\n            ['name' => 'Oirschot', 'country_code' => 'NL'],\n            ['name' => 'Siderno Marina', 'country_code' => 'IT'],\n            ['name' => 'Malacacheta', 'country_code' => 'BR'],\n            ['name' => 'Thorold', 'country_code' => 'CA'],\n            ['name' => 'Ban Mai', 'country_code' => 'TH'],\n            ['name' => 'Santiago de Maria', 'country_code' => 'SV'],\n            ['name' => 'Palmeiras', 'country_code' => 'BR'],\n            ['name' => 'Costa Marques', 'country_code' => 'BR'],\n            ['name' => 'St. John', 'country_code' => 'US'],\n            ['name' => 'Novyy Oskol', 'country_code' => 'RU'],\n            ['name' => 'Osny', 'country_code' => 'FR'],\n            ['name' => 'Renningen', 'country_code' => 'DE'],\n            ['name' => 'Cabusao', 'country_code' => 'PH'],\n            ['name' => 'Engenheiro Coelho', 'country_code' => 'BR'],\n            ['name' => 'Alzenau in Unterfranken', 'country_code' => 'DE'],\n            ['name' => 'Piossasco', 'country_code' => 'IT'],\n            ['name' => 'Middelburg', 'country_code' => 'ZA'],\n            ['name' => 'Neopolis', 'country_code' => 'BR'],\n            ['name' => 'Quitandinha', 'country_code' => 'BR'],\n            ['name' => 'Rawmarsh', 'country_code' => 'GB'],\n            ['name' => 'Grandview', 'country_code' => 'US'],\n            ['name' => 'Huercal de Almeria', 'country_code' => 'ES'],\n            ['name' => 'Kitcharao', 'country_code' => 'PH'],\n            ['name' => 'Marshfield', 'country_code' => 'US'],\n            ['name' => 'Emba', 'country_code' => 'KZ'],\n            ['name' => 'Stekene', 'country_code' => 'BE'],\n            ['name' => 'Vitre', 'country_code' => 'FR'],\n            ['name' => 'Ibitita', 'country_code' => 'BR'],\n            ['name' => 'Konz', 'country_code' => 'DE'],\n            ['name' => 'Farias Brito', 'country_code' => 'BR'],\n            ['name' => 'Cruz Machado', 'country_code' => 'BR'],\n            ['name' => 'Tepetlixpa', 'country_code' => 'MX'],\n            ['name' => 'Pirapemas', 'country_code' => 'BR'],\n            ['name' => 'Rufino', 'country_code' => 'AR'],\n            ['name' => 'Longjia', 'country_code' => 'CN'],\n            ['name' => 'Villa de Leyva', 'country_code' => 'CO'],\n            ['name' => 'Grafton', 'country_code' => 'US'],\n            ['name' => 'Camrose', 'country_code' => 'CA'],\n            ['name' => 'Schneverdingen', 'country_code' => 'DE'],\n            ['name' => 'Orodara', 'country_code' => 'BF'],\n            ['name' => 'Rajmahal', 'country_code' => 'IN'],\n            ['name' => 'Villa Verde', 'country_code' => 'PH'],\n            ['name' => 'Marktoberdorf', 'country_code' => 'DE'],\n            ['name' => 'Domodossola', 'country_code' => 'IT'],\n            ['name' => 'Jbabra', 'country_code' => 'MA'],\n            ['name' => 'Cimarron Hills', 'country_code' => 'US'],\n            ['name' => 'East Lyme', 'country_code' => 'US'],\n            ['name' => 'Wassenberg', 'country_code' => 'DE'],\n            ['name' => 'Miyatoko', 'country_code' => 'JP'],\n            ['name' => 'Scituate', 'country_code' => 'US'],\n            ['name' => 'Sparta', 'country_code' => 'US'],\n            ['name' => 'Carius', 'country_code' => 'BR'],\n            ['name' => 'Venturosa', 'country_code' => 'BR'],\n            ['name' => 'Cafarnaum', 'country_code' => 'BR'],\n            ['name' => 'Bad Reichenhall', 'country_code' => 'DE'],\n            ['name' => 'Alsip', 'country_code' => 'US'],\n            ['name' => 'Toflea', 'country_code' => 'RO'],\n            ['name' => 'Avon', 'country_code' => 'US'],\n            ['name' => 'Homewood', 'country_code' => 'US'],\n            ['name' => 'Orastie', 'country_code' => 'RO'],\n            ['name' => 'Laives', 'country_code' => 'IT'],\n            ['name' => 'Picui', 'country_code' => 'BR'],\n            ['name' => 'Surovikino', 'country_code' => 'RU'],\n            ['name' => 'Or  Aqiva', 'country_code' => 'IL'],\n            ['name' => 'Lora del Rio', 'country_code' => 'ES'],\n            ['name' => 'Sanpaicun', 'country_code' => 'CN'],\n            ['name' => 'Auerbach', 'country_code' => 'DE'],\n            ['name' => 'Ibipeba', 'country_code' => 'BR'],\n            ['name' => 'Port Isabel', 'country_code' => 'US'],\n            ['name' => 'Bacuri', 'country_code' => 'BR'],\n            ['name' => 'Liuma', 'country_code' => 'CN'],\n            ['name' => 'Ban Thum', 'country_code' => 'TH'],\n            ['name' => 'Vovchansk', 'country_code' => 'UA'],\n            ['name' => 'Marinette', 'country_code' => 'US'],\n            ['name' => 'Bergeijk', 'country_code' => 'NL'],\n            ['name' => 'Capua', 'country_code' => 'IT'],\n            ['name' => 'Vlotho', 'country_code' => 'DE'],\n            ['name' => 'Jaguaripe', 'country_code' => 'BR'],\n            ['name' => 'Boa Vista do Tupim', 'country_code' => 'BR'],\n            ['name' => 'Kavalerovo', 'country_code' => 'RU'],\n            ['name' => 'Bay City', 'country_code' => 'US'],\n            ['name' => 'Filomeno Mata', 'country_code' => 'MX'],\n            ['name' => 'Bad Durkheim', 'country_code' => 'DE'],\n            ['name' => 'Hochheim am Main', 'country_code' => 'DE'],\n            ['name' => 'Bals', 'country_code' => 'RO'],\n            ['name' => 'Ansonia', 'country_code' => 'US'],\n            ['name' => 'Weissenburg', 'country_code' => 'DE'],\n            ['name' => 'Chouafaa', 'country_code' => 'MA'],\n            ['name' => 'Bremervorde', 'country_code' => 'DE'],\n            ['name' => 'West Whiteland', 'country_code' => 'US'],\n            ['name' => 'Malnate', 'country_code' => 'IT'],\n            ['name' => 'Bagnols-sur-Ceze', 'country_code' => 'FR'],\n            ['name' => 'Sao Joao dos Poleiros', 'country_code' => 'BR'],\n            ['name' => 'Deerfield', 'country_code' => 'US'],\n            ['name' => 'South Frontenac', 'country_code' => 'CA'],\n            ['name' => 'Augustinopolis', 'country_code' => 'BR'],\n            ['name' => 'Guanzhai', 'country_code' => 'CN'],\n            ['name' => 'Maple Shade', 'country_code' => 'US'],\n            ['name' => 'Tamri', 'country_code' => 'MA'],\n            ['name' => 'Limay', 'country_code' => 'FR'],\n            ['name' => 'Westminster', 'country_code' => 'US'],\n            ['name' => 'Kulu', 'country_code' => 'IN'],\n            ['name' => 'Melegnano', 'country_code' => 'IT'],\n            ['name' => 'Nytva', 'country_code' => 'RU'],\n            ['name' => 'Porto Real', 'country_code' => 'BR'],\n            ['name' => 'Olten', 'country_code' => 'CH'],\n            ['name' => 'Creve Coeur', 'country_code' => 'US'],\n            ['name' => 'Cluses', 'country_code' => 'FR'],\n            ['name' => 'Vanino', 'country_code' => 'RU'],\n            ['name' => 'Aguas de Lindoia', 'country_code' => 'BR'],\n            ['name' => 'Carnaiba', 'country_code' => 'BR'],\n            ['name' => 'Brand', 'country_code' => 'DE'],\n            ['name' => 'Tata', 'country_code' => 'MA'],\n            ['name' => 'Jiabong', 'country_code' => 'PH'],\n            ['name' => 'Hoppegarten', 'country_code' => 'DE'],\n            ['name' => 'Tatsuno', 'country_code' => 'JP'],\n            ['name' => 'Skadovsk', 'country_code' => 'UA'],\n            ['name' => 'Shaogang', 'country_code' => 'CN'],\n            ['name' => 'Orestiada', 'country_code' => 'GR'],\n            ['name' => 'Berea', 'country_code' => 'US'],\n            ['name' => 'Olho d Agua das Cunhas', 'country_code' => 'BR'],\n            ['name' => 'Firminy', 'country_code' => 'FR'],\n            ['name' => 'Cocoa', 'country_code' => 'US'],\n            ['name' => 'Moultrie', 'country_code' => 'US'],\n            ['name' => 'Timoktene', 'country_code' => 'DZ'],\n            ['name' => 'Berkhampstead', 'country_code' => 'GB'],\n            ['name' => 'Unquillo', 'country_code' => 'AR'],\n            ['name' => 'Budrio', 'country_code' => 'IT'],\n            ['name' => 'Houghton Regis', 'country_code' => 'GB'],\n            ['name' => 'Bonen', 'country_code' => 'DE'],\n            ['name' => 'Forest Park', 'country_code' => 'US'],\n            ['name' => 'Marihatag', 'country_code' => 'PH'],\n            ['name' => 'Sinacaban', 'country_code' => 'PH'],\n            ['name' => 'Varjota', 'country_code' => 'BR'],\n            ['name' => 'Pitt Meadows', 'country_code' => 'CA'],\n            ['name' => 'Zagarolo', 'country_code' => 'IT'],\n            ['name' => 'Kristiansund', 'country_code' => 'NO'],\n            ['name' => 'Priozersk', 'country_code' => 'RU'],\n            ['name' => 'Santa Cruz Zenzontepec', 'country_code' => 'MX'],\n            ['name' => 'Anacortes', 'country_code' => 'US'],\n            ['name' => 'Moloacan', 'country_code' => 'MX'],\n            ['name' => 'Lahnstein', 'country_code' => 'DE'],\n            ['name' => 'Sidi Allal Tazi', 'country_code' => 'MA'],\n            ['name' => 'Matagob', 'country_code' => 'PH'],\n            ['name' => 'Asuncion Nochixtlan', 'country_code' => 'MX'],\n            ['name' => 'Shaoyu', 'country_code' => 'CN'],\n            ['name' => 'Heusweiler', 'country_code' => 'DE'],\n            ['name' => 'Borgo San Lorenzo', 'country_code' => 'IT'],\n            ['name' => 'Miedzyrzecz', 'country_code' => 'PL'],\n            ['name' => 'Aberdeen', 'country_code' => 'US'],\n            ['name' => 'Tha Bo', 'country_code' => 'TH'],\n            ['name' => 'Sam Phran', 'country_code' => 'TH'],\n            ['name' => 'Cordenons', 'country_code' => 'IT'],\n            ['name' => 'Fatima', 'country_code' => 'BR'],\n            ['name' => 'Bramhall', 'country_code' => 'GB'],\n            ['name' => 'San Blas Atempa', 'country_code' => 'MX'],\n            ['name' => 'Campo de la Cruz', 'country_code' => 'CO'],\n            ['name' => 'Rancho Mirage', 'country_code' => 'US'],\n            ['name' => 'Sharon', 'country_code' => 'US'],\n            ['name' => 'Kherameh', 'country_code' => 'IR'],\n            ['name' => 'Littau', 'country_code' => 'CH'],\n            ['name' => 'Garuva', 'country_code' => 'BR'],\n            ['name' => 'Siqueira Campos', 'country_code' => 'BR'],\n            ['name' => 'Placido de Castro', 'country_code' => 'BR'],\n            ['name' => 'Kostrzyn nad Odra', 'country_code' => 'PL'],\n            ['name' => 'Dniprorudne', 'country_code' => 'UA'],\n            ['name' => 'Gibsonton', 'country_code' => 'US'],\n            ['name' => 'Del Carmen', 'country_code' => 'PH'],\n            ['name' => 'Taio', 'country_code' => 'BR'],\n            ['name' => 'Viradouro', 'country_code' => 'BR'],\n            ['name' => 'Lynden', 'country_code' => 'US'],\n            ['name' => 'Somma Lombardo', 'country_code' => 'IT'],\n            ['name' => 'Savignano sul Rubicone', 'country_code' => 'IT'],\n            ['name' => 'Elst', 'country_code' => 'NL'],\n            ['name' => 'Swellendam', 'country_code' => 'ZA'],\n            ['name' => 'Beloozerskiy', 'country_code' => 'RU'],\n            ['name' => 'Foum el Anser', 'country_code' => 'MA'],\n            ['name' => 'Guadix', 'country_code' => 'ES'],\n            ['name' => 'Gautier', 'country_code' => 'US'],\n            ['name' => 'Otrokovice', 'country_code' => 'CZ'],\n            ['name' => 'Nara', 'country_code' => 'ML'],\n            ['name' => 'Mayfield Heights', 'country_code' => 'US'],\n            ['name' => 'Piata', 'country_code' => 'BR'],\n            ['name' => 'Breaux Bridge', 'country_code' => 'US'],\n            ['name' => 'Tonantins', 'country_code' => 'BR'],\n            ['name' => 'Arroio Grande', 'country_code' => 'BR'],\n            ['name' => 'Itapaci', 'country_code' => 'BR'],\n            ['name' => 'Almondbury', 'country_code' => 'GB'],\n            ['name' => 'Taft', 'country_code' => 'IR'],\n            ['name' => 'Nerviano', 'country_code' => 'IT'],\n            ['name' => 'Torredembarra', 'country_code' => 'ES'],\n            ['name' => 'Hopkins', 'country_code' => 'US'],\n            ['name' => 'Bekes', 'country_code' => 'HU'],\n            ['name' => 'Albino', 'country_code' => 'IT'],\n            ['name' => 'Villorba', 'country_code' => 'IT'],\n            ['name' => 'Kobylka', 'country_code' => 'PL'],\n            ['name' => 'Wilton', 'country_code' => 'US'],\n            ['name' => 'Lamrasla', 'country_code' => 'MA'],\n            ['name' => 'Tingloy', 'country_code' => 'PH'],\n            ['name' => 'Defiance', 'country_code' => 'US'],\n            ['name' => 'Gheorgheni', 'country_code' => 'RO'],\n            ['name' => 'Monor', 'country_code' => 'HU'],\n            ['name' => 'Itapororoca', 'country_code' => 'BR'],\n            ['name' => 'Madalag', 'country_code' => 'PH'],\n            ['name' => 'Yur yev-Pol skiy', 'country_code' => 'RU'],\n            ['name' => 'Korsun-Shevchenkivskyi', 'country_code' => 'UA'],\n            ['name' => 'Valguarnera Caropepe', 'country_code' => 'IT'],\n            ['name' => 'Stonington', 'country_code' => 'US'],\n            ['name' => 'San Jose Tenango', 'country_code' => 'MX'],\n            ['name' => 'Amvrosiivka', 'country_code' => 'UA'],\n            ['name' => 'Svatove', 'country_code' => 'UA'],\n            ['name' => 'Campos Belos', 'country_code' => 'BR'],\n            ['name' => 'Panagyurishte', 'country_code' => 'BG'],\n            ['name' => 'Iron Mountain', 'country_code' => 'US'],\n            ['name' => 'Durlesti', 'country_code' => 'MD'],\n            ['name' => 'Schwechat', 'country_code' => 'AT'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Formoso do Araguaia', 'country_code' => 'BR'],\n            ['name' => 'Golcar', 'country_code' => 'GB'],\n            ['name' => 'Berea', 'country_code' => 'US'],\n            ['name' => 'Bodegraven', 'country_code' => 'NL'],\n            ['name' => 'Altus', 'country_code' => 'US'],\n            ['name' => 'San Celoni', 'country_code' => 'ES'],\n            ['name' => 'Belo Campo', 'country_code' => 'BR'],\n            ['name' => 'Harinakunda', 'country_code' => 'BD'],\n            ['name' => 'Oroszlany', 'country_code' => 'HU'],\n            ['name' => 'Kadan', 'country_code' => 'CZ'],\n            ['name' => 'Santa Maria di Sala', 'country_code' => 'IT'],\n            ['name' => 'Uvalde', 'country_code' => 'US'],\n            ['name' => 'Nunungan', 'country_code' => 'PH'],\n            ['name' => 'Banting', 'country_code' => 'PH'],\n            ['name' => 'Serra Dourada', 'country_code' => 'BR'],\n            ['name' => 'Garwolin', 'country_code' => 'PL'],\n            ['name' => 'Brushy Creek', 'country_code' => 'US'],\n            ['name' => 'Concepcion de Ataco', 'country_code' => 'SV'],\n            ['name' => 'Ait Bouchta', 'country_code' => 'MA'],\n            ['name' => 'Acatlan', 'country_code' => 'MX'],\n            ['name' => 'Cassano al Ionio', 'country_code' => 'IT'],\n            ['name' => 'Brook Park', 'country_code' => 'US'],\n            ['name' => 'Yoichi', 'country_code' => 'JP'],\n            ['name' => 'Pembroke', 'country_code' => 'US'],\n            ['name' => 'Novopavlovka', 'country_code' => 'KG'],\n            ['name' => 'Braniewo', 'country_code' => 'PL'],\n            ['name' => 'Piuma', 'country_code' => 'BR'],\n            ['name' => 'Middle', 'country_code' => 'US'],\n            ['name' => 'Memuro-minami', 'country_code' => 'JP'],\n            ['name' => 'Wallingford Center', 'country_code' => 'US'],\n            ['name' => 'Grossenhain', 'country_code' => 'DE'],\n            ['name' => 'Santander', 'country_code' => 'PH'],\n            ['name' => 'Carire', 'country_code' => 'BR'],\n            ['name' => 'Qishe', 'country_code' => 'CN'],\n            ['name' => 'Sunnyside', 'country_code' => 'US'],\n            ['name' => 'Pinabacdao', 'country_code' => 'PH'],\n            ['name' => 'Lagoa da Canoa', 'country_code' => 'BR'],\n            ['name' => 'Middelharnis', 'country_code' => 'NL'],\n            ['name' => 'Sorum', 'country_code' => 'NO'],\n            ['name' => 'Serrita', 'country_code' => 'BR'],\n            ['name' => 'Garching bei Munchen', 'country_code' => 'DE'],\n            ['name' => 'Bet She an', 'country_code' => 'IL'],\n            ['name' => 'Fulwood', 'country_code' => 'GB'],\n            ['name' => 'Dobrush', 'country_code' => 'BY'],\n            ['name' => 'Schwalmstadt', 'country_code' => 'DE'],\n            ['name' => 'Jucurutu', 'country_code' => 'BR'],\n            ['name' => 'Boissy-Saint-Leger', 'country_code' => 'FR'],\n            ['name' => 'Shaying', 'country_code' => 'CN'],\n            ['name' => 'Towamencin', 'country_code' => 'US'],\n            ['name' => 'Klaukkala', 'country_code' => 'FI'],\n            ['name' => 'Forst (Lausitz)', 'country_code' => 'DE'],\n            ['name' => 'World Golf Village', 'country_code' => 'US'],\n            ['name' => 'Sycamore', 'country_code' => 'US'],\n            ['name' => 'Franklin Farm', 'country_code' => 'US'],\n            ['name' => 'Charata', 'country_code' => 'AR'],\n            ['name' => 'Vertentes', 'country_code' => 'BR'],\n            ['name' => 'Oyama', 'country_code' => 'JP'],\n            ['name' => 'Avon', 'country_code' => 'US'],\n            ['name' => 'San Gabriel', 'country_code' => 'PH'],\n            ['name' => 'Sikhio', 'country_code' => 'TH'],\n            ['name' => 'Chowchilla', 'country_code' => 'US'],\n            ['name' => 'Felanitx', 'country_code' => 'ES'],\n            ['name' => 'Ronkonkoma', 'country_code' => 'US'],\n            ['name' => 'Polignano a Mare', 'country_code' => 'IT'],\n            ['name' => 'Lagoa do Carro', 'country_code' => 'BR'],\n            ['name' => 'Port Colborne', 'country_code' => 'CA'],\n            ['name' => 'Pocinhos', 'country_code' => 'BR'],\n            ['name' => 'Maltby', 'country_code' => 'GB'],\n            ['name' => 'Lobos', 'country_code' => 'AR'],\n            ['name' => 'Slyudyanka', 'country_code' => 'RU'],\n            ['name' => 'Torrox', 'country_code' => 'ES'],\n            ['name' => 'Buckhaven', 'country_code' => 'GB'],\n            ['name' => 'Newburyport', 'country_code' => 'US'],\n            ['name' => 'Kosvik', 'country_code' => 'NO'],\n            ['name' => 'Colina', 'country_code' => 'BR'],\n            ['name' => 'Schkeuditz', 'country_code' => 'DE'],\n            ['name' => 'Caldas de Montbuy', 'country_code' => 'ES'],\n            ['name' => 'Huitan', 'country_code' => 'GT'],\n            ['name' => 'Condeuba', 'country_code' => 'BR'],\n            ['name' => 'Hampton', 'country_code' => 'US'],\n            ['name' => 'Hessisch Oldendorf', 'country_code' => 'DE'],\n            ['name' => 'Malimono', 'country_code' => 'PH'],\n            ['name' => 'Xochiatipan de Castillo', 'country_code' => 'MX'],\n            ['name' => 'Montornes del Valles', 'country_code' => 'ES'],\n            ['name' => 'Bouarouss', 'country_code' => 'MA'],\n            ['name' => 'Banabuiu', 'country_code' => 'BR'],\n            ['name' => 'Luz', 'country_code' => 'BR'],\n            ['name' => 'Dragasani', 'country_code' => 'RO'],\n            ['name' => 'Isfana', 'country_code' => 'KG'],\n            ['name' => 'Werdohl', 'country_code' => 'DE'],\n            ['name' => 'Kilgore', 'country_code' => 'US'],\n            ['name' => 'Kishi', 'country_code' => 'JP'],\n            ['name' => 'Worth am Rhein', 'country_code' => 'DE'],\n            ['name' => 'Gangwuzhen', 'country_code' => 'CN'],\n            ['name' => 'Baicoi', 'country_code' => 'RO'],\n            ['name' => 'Sapucaia', 'country_code' => 'BR'],\n            ['name' => 'Nigran', 'country_code' => 'ES'],\n            ['name' => 'Bekalta', 'country_code' => 'TN'],\n            ['name' => 'Radford', 'country_code' => 'US'],\n            ['name' => 'Ikniwn', 'country_code' => 'MA'],\n            ['name' => 'Sao Vicente Ferrer', 'country_code' => 'BR'],\n            ['name' => 'Quispamsis', 'country_code' => 'CA'],\n            ['name' => 'Texistepeque', 'country_code' => 'SV'],\n            ['name' => 'Palestine', 'country_code' => 'US'],\n            ['name' => 'Whitestown', 'country_code' => 'US'],\n            ['name' => 'Crawfordsville', 'country_code' => 'US'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Puchov', 'country_code' => 'SK'],\n            ['name' => 'San Kamphaeng', 'country_code' => 'TH'],\n            ['name' => 'Ploemeur', 'country_code' => 'FR'],\n            ['name' => 'Arinos', 'country_code' => 'BR'],\n            ['name' => 'Grangemouth', 'country_code' => 'GB'],\n            ['name' => 'Boerne', 'country_code' => 'US'],\n            ['name' => 'Rikuzen-Takata', 'country_code' => 'JP'],\n            ['name' => 'Pieksamaki', 'country_code' => 'FI'],\n            ['name' => 'Lake Placid', 'country_code' => 'US'],\n            ['name' => 'Carvin', 'country_code' => 'FR'],\n            ['name' => 'Tarifa', 'country_code' => 'ES'],\n            ['name' => 'Lask', 'country_code' => 'PL'],\n            ['name' => 'Dombovar', 'country_code' => 'HU'],\n            ['name' => 'Diadi', 'country_code' => 'PH'],\n            ['name' => 'Alpignano', 'country_code' => 'IT'],\n            ['name' => 'Wemmel', 'country_code' => 'BE'],\n            ['name' => 'Pastrana', 'country_code' => 'PH'],\n            ['name' => 'Muynoq', 'country_code' => 'UZ'],\n            ['name' => 'Rhaude', 'country_code' => 'DE'],\n            ['name' => 'Rio Maria', 'country_code' => 'BR'],\n            ['name' => 'St. Michael', 'country_code' => 'US'],\n            ['name' => 'East Goshen', 'country_code' => 'US'],\n            ['name' => 'Ilam', 'country_code' => 'NP'],\n            ['name' => 'Mont-Saint-Hilaire', 'country_code' => 'CA'],\n            ['name' => 'Maumelle', 'country_code' => 'US'],\n            ['name' => 'Tremedal', 'country_code' => 'BR'],\n            ['name' => 'Windham', 'country_code' => 'US'],\n            ['name' => 'Santo Antonio do Leverger', 'country_code' => 'BR'],\n            ['name' => 'Lavasan', 'country_code' => 'IR'],\n            ['name' => 'Bad Segeberg', 'country_code' => 'DE'],\n            ['name' => 'Parchim', 'country_code' => 'DE'],\n            ['name' => 'Benavente', 'country_code' => 'ES'],\n            ['name' => 'Itacarambi', 'country_code' => 'BR'],\n            ['name' => 'Monthey', 'country_code' => 'CH'],\n            ['name' => 'Hranice', 'country_code' => 'CZ'],\n            ['name' => 'Niles', 'country_code' => 'US'],\n            ['name' => 'Pratteln', 'country_code' => 'CH'],\n            ['name' => 'Avtury', 'country_code' => 'RU'],\n            ['name' => 'Sint-Oedenrode', 'country_code' => 'NL'],\n            ['name' => 'Beruri', 'country_code' => 'BR'],\n            ['name' => 'Central', 'country_code' => 'BR'],\n            ['name' => 'Vestby', 'country_code' => 'NO'],\n            ['name' => 'Somerset', 'country_code' => 'US'],\n            ['name' => 'Morro da Fumaca', 'country_code' => 'BR'],\n            ['name' => 'Menomonie', 'country_code' => 'US'],\n            ['name' => 'Croata', 'country_code' => 'BR'],\n            ['name' => 'Trenton', 'country_code' => 'US'],\n            ['name' => 'Bathurst', 'country_code' => 'CA'],\n            ['name' => 'Cuautitlan', 'country_code' => 'MX'],\n            ['name' => 'Sao Caetano de Odivelas', 'country_code' => 'BR'],\n            ['name' => 'Southeast', 'country_code' => 'US'],\n            ['name' => 'Tapaua', 'country_code' => 'BR'],\n            ['name' => 'San Jose', 'country_code' => 'PH'],\n            ['name' => 'Paraibuna', 'country_code' => 'BR'],\n            ['name' => 'Calenzano', 'country_code' => 'IT'],\n            ['name' => 'Bexbach', 'country_code' => 'DE'],\n            ['name' => 'Saint-Augustin-de-Desmaures', 'country_code' => 'CA'],\n            ['name' => 'Wheatfield', 'country_code' => 'US'],\n            ['name' => 'Solonopole', 'country_code' => 'BR'],\n            ['name' => 'Rizal', 'country_code' => 'PH'],\n            ['name' => 'Feyzabad', 'country_code' => 'IR'],\n            ['name' => 'Matelandia', 'country_code' => 'BR'],\n            ['name' => 'Atalaia do Norte', 'country_code' => 'BR'],\n            ['name' => 'Lagoa Formosa', 'country_code' => 'BR'],\n            ['name' => 'Rutland', 'country_code' => 'US'],\n            ['name' => 'Bloemhof', 'country_code' => 'ZA'],\n            ['name' => 'Marcon', 'country_code' => 'IT'],\n            ['name' => 'Maranello', 'country_code' => 'IT'],\n            ['name' => 'Coronda', 'country_code' => 'AR'],\n            ['name' => 'Ghouazi', 'country_code' => 'MA'],\n            ['name' => 'Sona', 'country_code' => 'IT'],\n            ['name' => 'Imperial', 'country_code' => 'US'],\n            ['name' => 'Orange', 'country_code' => 'US'],\n            ['name' => 'Matigou', 'country_code' => 'CN'],\n            ['name' => 'Mengjiacun', 'country_code' => 'CN'],\n            ['name' => 'Otsego', 'country_code' => 'US'],\n            ['name' => 'Madison', 'country_code' => 'US'],\n            ['name' => 'Madeley', 'country_code' => 'GB'],\n            ['name' => 'Pescantina', 'country_code' => 'IT'],\n            ['name' => 'Madison', 'country_code' => 'US'],\n            ['name' => 'St. Matthews', 'country_code' => 'US'],\n            ['name' => 'Alton', 'country_code' => 'US'],\n            ['name' => 'Cudahy', 'country_code' => 'US'],\n            ['name' => 'Dizicheh', 'country_code' => 'IR'],\n            ['name' => 'Round Lake', 'country_code' => 'US'],\n            ['name' => 'General Juan Madariaga', 'country_code' => 'AR'],\n            ['name' => 'Quanzhang', 'country_code' => 'CN'],\n            ['name' => 'Oak Bay', 'country_code' => 'CA'],\n            ['name' => 'Heidenau', 'country_code' => 'DE'],\n            ['name' => 'Piacabucu', 'country_code' => 'BR'],\n            ['name' => 'Freilassing', 'country_code' => 'DE'],\n            ['name' => 'Oxon Hill', 'country_code' => 'US'],\n            ['name' => 'Pastos Bons', 'country_code' => 'BR'],\n            ['name' => 'Manchester', 'country_code' => 'US'],\n            ['name' => 'Malacky', 'country_code' => 'SK'],\n            ['name' => 'Rypin', 'country_code' => 'PL'],\n            ['name' => 'Beeville', 'country_code' => 'US'],\n            ['name' => 'Sebaste', 'country_code' => 'PH'],\n            ['name' => 'Cary', 'country_code' => 'US'],\n            ['name' => 'Tublay', 'country_code' => 'PH'],\n            ['name' => 'North Wilkesboro', 'country_code' => 'US'],\n            ['name' => 'Freudenberg', 'country_code' => 'DE'],\n            ['name' => 'Yupiltepeque', 'country_code' => 'GT'],\n            ['name' => 'Goffstown', 'country_code' => 'US'],\n            ['name' => 'Duero', 'country_code' => 'PH'],\n            ['name' => 'North Aurora', 'country_code' => 'US'],\n            ['name' => 'Hijuelas', 'country_code' => 'CL'],\n            ['name' => 'Lithia Springs', 'country_code' => 'US'],\n            ['name' => 'Tall  Aran', 'country_code' => 'SY'],\n            ['name' => 'Northallerton', 'country_code' => 'GB'],\n            ['name' => 'Sorrento', 'country_code' => 'IT'],\n            ['name' => 'Bon Air', 'country_code' => 'US'],\n            ['name' => 'Mirangaba', 'country_code' => 'BR'],\n            ['name' => 'Almolonga', 'country_code' => 'GT'],\n            ['name' => 'Bensenville', 'country_code' => 'US'],\n            ['name' => 'Balilihan', 'country_code' => 'PH'],\n            ['name' => 'Sinzig', 'country_code' => 'DE'],\n            ['name' => 'Eastlake', 'country_code' => 'US'],\n            ['name' => 'Beaver Dam', 'country_code' => 'US'],\n            ['name' => 'Muhradah', 'country_code' => 'SY'],\n            ['name' => 'Kelsterbach', 'country_code' => 'DE'],\n            ['name' => 'Nauen', 'country_code' => 'DE'],\n            ['name' => 'Qal ah-ye Zal', 'country_code' => 'AF'],\n            ['name' => 'Itabera', 'country_code' => 'BR'],\n            ['name' => 'Rio Pomba', 'country_code' => 'BR'],\n            ['name' => 'Marcos', 'country_code' => 'PH'],\n            ['name' => 'Safety Harbor', 'country_code' => 'US'],\n            ['name' => 'Mattoon', 'country_code' => 'US'],\n            ['name' => 'Port-de-Bouc', 'country_code' => 'FR'],\n            ['name' => 'Neftegorsk', 'country_code' => 'RU'],\n            ['name' => 'Canapi', 'country_code' => 'BR'],\n            ['name' => 'Colne', 'country_code' => 'GB'],\n            ['name' => 'Ginsheim-Gustavsburg', 'country_code' => 'DE'],\n            ['name' => 'Requena', 'country_code' => 'PE'],\n            ['name' => 'General Deheza', 'country_code' => 'AR'],\n            ['name' => 'Waalre', 'country_code' => 'NL'],\n            ['name' => 'Macomb', 'country_code' => 'US'],\n            ['name' => 'Munguia', 'country_code' => 'ES'],\n            ['name' => 'North Druid Hills', 'country_code' => 'US'],\n            ['name' => 'Baronissi', 'country_code' => 'IT'],\n            ['name' => 'Danao', 'country_code' => 'PH'],\n            ['name' => 'West Columbia', 'country_code' => 'US'],\n            ['name' => 'Arco', 'country_code' => 'IT'],\n            ['name' => 'Oborniki', 'country_code' => 'PL'],\n            ['name' => 'Mirante do Paranapanema', 'country_code' => 'BR'],\n            ['name' => 'Regeneracao', 'country_code' => 'BR'],\n            ['name' => 'Fayetteville', 'country_code' => 'US'],\n            ['name' => 'Messias', 'country_code' => 'BR'],\n            ['name' => 'Mosbrough', 'country_code' => 'GB'],\n            ['name' => 'Sunland Park', 'country_code' => 'US'],\n            ['name' => 'Sabana de Torres', 'country_code' => 'CO'],\n            ['name' => 'Ribat Al Khayr', 'country_code' => 'MA'],\n            ['name' => 'Chateauneuf-les-Martigues', 'country_code' => 'FR'],\n            ['name' => 'Puurs', 'country_code' => 'BE'],\n            ['name' => 'Kharabali', 'country_code' => 'RU'],\n            ['name' => 'Isola Capo Rizzuto', 'country_code' => 'IT'],\n            ['name' => 'Miedzyrzec Podlaski', 'country_code' => 'PL'],\n            ['name' => 'Estelle', 'country_code' => 'US'],\n            ['name' => 'Antenor Navarro', 'country_code' => 'BR'],\n            ['name' => 'Po', 'country_code' => 'BF'],\n            ['name' => 'Melfi', 'country_code' => 'IT'],\n            ['name' => 'Ibirataia', 'country_code' => 'BR'],\n            ['name' => 'Manzanares', 'country_code' => 'ES'],\n            ['name' => 'San Carlos Park', 'country_code' => 'US'],\n            ['name' => 'Pelaya', 'country_code' => 'CO'],\n            ['name' => 'Daimiel', 'country_code' => 'ES'],\n            ['name' => 'San Teodoro', 'country_code' => 'PH'],\n            ['name' => 'Policoro', 'country_code' => 'IT'],\n            ['name' => 'Illertissen', 'country_code' => 'DE'],\n            ['name' => 'Al Qbab', 'country_code' => 'MA'],\n            ['name' => 'Rockland', 'country_code' => 'US'],\n            ['name' => 'Gaoniang', 'country_code' => 'CN'],\n            ['name' => 'Kreuzau', 'country_code' => 'DE'],\n            ['name' => 'Frankenberg', 'country_code' => 'DE'],\n            ['name' => 'Zachary', 'country_code' => 'US'],\n            ['name' => 'Kingsland', 'country_code' => 'US'],\n            ['name' => 'Zapotlan del Rey', 'country_code' => 'MX'],\n            ['name' => 'Marco Island', 'country_code' => 'US'],\n            ['name' => 'L Isle-d Abeau', 'country_code' => 'FR'],\n            ['name' => 'Huntington', 'country_code' => 'US'],\n            ['name' => 'Union de San Antonio', 'country_code' => 'MX'],\n            ['name' => 'Juazeirinho', 'country_code' => 'BR'],\n            ['name' => 'Ingleside', 'country_code' => 'US'],\n            ['name' => 'Humacao', 'country_code' => 'PR'],\n            ['name' => 'Whitemarsh', 'country_code' => 'US'],\n            ['name' => 'Tricase', 'country_code' => 'IT'],\n            ['name' => 'Weilerswist', 'country_code' => 'DE'],\n            ['name' => 'Buchen in Odenwald', 'country_code' => 'DE'],\n            ['name' => 'Marmande', 'country_code' => 'FR'],\n            ['name' => 'Guapiara', 'country_code' => 'BR'],\n            ['name' => 'Monselice', 'country_code' => 'IT'],\n            ['name' => 'Conceicao do Mato Dentro', 'country_code' => 'BR'],\n            ['name' => 'Ustka', 'country_code' => 'PL'],\n            ['name' => 'Wantagh', 'country_code' => 'US'],\n            ['name' => 'Kirsanov', 'country_code' => 'RU'],\n            ['name' => 'Sibutao', 'country_code' => 'PH'],\n            ['name' => 'Golitsyno', 'country_code' => 'RU'],\n            ['name' => 'Lenoir', 'country_code' => 'US'],\n            ['name' => 'Yaguachi Nuevo', 'country_code' => 'EC'],\n            ['name' => 'Zlotoryja', 'country_code' => 'PL'],\n            ['name' => 'Anadia', 'country_code' => 'BR'],\n            ['name' => 'Concord', 'country_code' => 'US'],\n            ['name' => 'Easton', 'country_code' => 'US'],\n            ['name' => 'Ommen', 'country_code' => 'NL'],\n            ['name' => 'Nguigmi', 'country_code' => 'NE'],\n            ['name' => 'Galich', 'country_code' => 'RU'],\n            ['name' => 'New Castle', 'country_code' => 'US'],\n            ['name' => 'Serafina Corea', 'country_code' => 'BR'],\n            ['name' => 'Yuanquan', 'country_code' => 'CN'],\n            ['name' => 'Upton', 'country_code' => 'GB'],\n            ['name' => 'Porto San Giorgio', 'country_code' => 'IT'],\n            ['name' => 'San Bartolo Tutotepec', 'country_code' => 'MX'],\n            ['name' => 'Perry', 'country_code' => 'US'],\n            ['name' => 'Saint Ives', 'country_code' => 'GB'],\n            ['name' => 'Siruma', 'country_code' => 'PH'],\n            ['name' => 'Hannibal', 'country_code' => 'US'],\n            ['name' => 'Holzwickede', 'country_code' => 'DE'],\n            ['name' => 'Gikongoro', 'country_code' => 'RW'],\n            ['name' => 'Douar Oulad Mbarek', 'country_code' => 'MA'],\n            ['name' => 'Jacupiranga', 'country_code' => 'BR'],\n            ['name' => 'Jaguaretama', 'country_code' => 'BR'],\n            ['name' => 'Menasha', 'country_code' => 'US'],\n            ['name' => 'Pontalina', 'country_code' => 'BR'],\n            ['name' => 'Oak Grove', 'country_code' => 'US'],\n            ['name' => 'Rizal', 'country_code' => 'PH'],\n            ['name' => 'Schwarzenbek', 'country_code' => 'DE'],\n            ['name' => 'Scarsdale', 'country_code' => 'US'],\n            ['name' => 'Alton', 'country_code' => 'GB'],\n            ['name' => 'Braunstone', 'country_code' => 'GB'],\n            ['name' => 'Brenham', 'country_code' => 'US'],\n            ['name' => 'Ocean Springs', 'country_code' => 'US'],\n            ['name' => 'Dallas', 'country_code' => 'US'],\n            ['name' => 'Woodcrest', 'country_code' => 'US'],\n            ['name' => 'Libjo', 'country_code' => 'PH'],\n            ['name' => 'Wadgassen', 'country_code' => 'DE'],\n            ['name' => 'Carlentini', 'country_code' => 'IT'],\n            ['name' => 'White Settlement', 'country_code' => 'US'],\n            ['name' => 'High Blantyre', 'country_code' => 'GB'],\n            ['name' => 'Cesson-Sevigne', 'country_code' => 'FR'],\n            ['name' => 'Kukmor', 'country_code' => 'RU'],\n            ['name' => 'Nazare Paulista', 'country_code' => 'BR'],\n            ['name' => 'Schwalbach', 'country_code' => 'DE'],\n            ['name' => 'Rio Claro', 'country_code' => 'BR'],\n            ['name' => 'Salgar', 'country_code' => 'CO'],\n            ['name' => 'Cerro Azul', 'country_code' => 'BR'],\n            ['name' => 'Kongsvinger', 'country_code' => 'NO'],\n            ['name' => 'Mitake', 'country_code' => 'JP'],\n            ['name' => 'Five Forks', 'country_code' => 'US'],\n            ['name' => 'Belterra', 'country_code' => 'BR'],\n            ['name' => 'Knightdale', 'country_code' => 'US'],\n            ['name' => 'Orta Nova', 'country_code' => 'IT'],\n            ['name' => 'Forio', 'country_code' => 'IT'],\n            ['name' => 'Shenandoah', 'country_code' => 'US'],\n            ['name' => 'Ada', 'country_code' => 'US'],\n            ['name' => 'Salonta', 'country_code' => 'RO'],\n            ['name' => 'Broken Hill', 'country_code' => 'AU'],\n            ['name' => 'Miaojiaping', 'country_code' => 'CN'],\n            ['name' => 'Madamba', 'country_code' => 'PH'],\n            ['name' => 'Sobinka', 'country_code' => 'RU'],\n            ['name' => 'Orsay', 'country_code' => 'FR'],\n            ['name' => 'Longjia', 'country_code' => 'CN'],\n            ['name' => 'Naarden', 'country_code' => 'NL'],\n            ['name' => 'Zhongguyue', 'country_code' => 'CN'],\n            ['name' => 'Crossville', 'country_code' => 'US'],\n            ['name' => 'Yutz', 'country_code' => 'FR'],\n            ['name' => 'Las Heras', 'country_code' => 'AR'],\n            ['name' => 'Yanggezhuang', 'country_code' => 'CN'],\n            ['name' => 'Sleaford', 'country_code' => 'GB'],\n            ['name' => 'Bad Sackingen', 'country_code' => 'DE'],\n            ['name' => 'Sao Benedito do Rio Preto', 'country_code' => 'BR'],\n            ['name' => 'Oerlinghausen', 'country_code' => 'DE'],\n            ['name' => 'Sapeacu', 'country_code' => 'BR'],\n            ['name' => 'Pontarlier', 'country_code' => 'FR'],\n            ['name' => 'Beltsville', 'country_code' => 'US'],\n            ['name' => 'Hlybokaye', 'country_code' => 'BY'],\n            ['name' => 'Sangenjo', 'country_code' => 'ES'],\n            ['name' => 'Pirapora do Bom Jesus', 'country_code' => 'BR'],\n            ['name' => 'San Felipe', 'country_code' => 'GT'],\n            ['name' => 'Nao-Me-Toque', 'country_code' => 'BR'],\n            ['name' => 'Lac', 'country_code' => 'AL'],\n            ['name' => 'Latsia', 'country_code' => 'CY'],\n            ['name' => 'Shangjing', 'country_code' => 'CN'],\n            ['name' => 'Bedford', 'country_code' => 'US'],\n            ['name' => 'Santa Elena', 'country_code' => 'AR'],\n            ['name' => 'Colonia', 'country_code' => 'US'],\n            ['name' => 'Outat Oulad Al Haj', 'country_code' => 'MA'],\n            ['name' => 'Ruhango', 'country_code' => 'RW'],\n            ['name' => 'Grenchen', 'country_code' => 'CH'],\n            ['name' => 'Guisborough', 'country_code' => 'GB'],\n            ['name' => 'Portchester', 'country_code' => 'GB'],\n            ['name' => 'Presidente Getulio', 'country_code' => 'BR'],\n            ['name' => 'Moraga', 'country_code' => 'US'],\n            ['name' => 'Beni Fouda', 'country_code' => 'DZ'],\n            ['name' => 'Balaguer', 'country_code' => 'ES'],\n            ['name' => 'Minquan', 'country_code' => 'CN'],\n            ['name' => 'Zaslawye', 'country_code' => 'BY'],\n            ['name' => 'Cairu', 'country_code' => 'BR'],\n            ['name' => 'San Agustin Chahal', 'country_code' => 'GT'],\n            ['name' => 'Ban Song', 'country_code' => 'TH'],\n            ['name' => 'Cassia', 'country_code' => 'BR'],\n            ['name' => 'Pouso Redondo', 'country_code' => 'BR'],\n            ['name' => 'Midway', 'country_code' => 'US'],\n            ['name' => 'Zongo', 'country_code' => 'CD'],\n            ['name' => 'Banora Point', 'country_code' => 'AU'],\n            ['name' => 'Steubenville', 'country_code' => 'US'],\n            ['name' => 'Dingjiagouxiang', 'country_code' => 'CN'],\n            ['name' => 'Glen Parva', 'country_code' => 'GB'],\n            ['name' => 'Fiorano Modenese', 'country_code' => 'IT'],\n            ['name' => 'Newmarket', 'country_code' => 'GB'],\n            ['name' => 'Tavares', 'country_code' => 'US'],\n            ['name' => 'Duijiang', 'country_code' => 'CN'],\n            ['name' => 'Ngara', 'country_code' => 'TZ'],\n            ['name' => 'Concord', 'country_code' => 'US'],\n            ['name' => 'El Roble', 'country_code' => 'CR'],\n            ['name' => 'Belgrade', 'country_code' => 'US'],\n            ['name' => 'Sierre', 'country_code' => 'CH'],\n            ['name' => 'Cipo', 'country_code' => 'BR'],\n            ['name' => 'Popovo', 'country_code' => 'BG'],\n            ['name' => 'Ban Pong', 'country_code' => 'TH'],\n            ['name' => 'Lousa', 'country_code' => 'PT'],\n            ['name' => 'Thornton', 'country_code' => 'GB'],\n            ['name' => 'Foxborough', 'country_code' => 'US'],\n            ['name' => 'Bilar', 'country_code' => 'PH'],\n            ['name' => 'Tanque Novo', 'country_code' => 'BR'],\n            ['name' => 'Laatatra', 'country_code' => 'MA'],\n            ['name' => 'Lackawanna', 'country_code' => 'US'],\n            ['name' => 'Tizi Rached', 'country_code' => 'DZ'],\n            ['name' => 'Melville', 'country_code' => 'US'],\n            ['name' => 'Verdun', 'country_code' => 'FR'],\n            ['name' => 'Boqueirao', 'country_code' => 'BR'],\n            ['name' => 'Ashland', 'country_code' => 'US'],\n            ['name' => 'Wailuku', 'country_code' => 'US'],\n            ['name' => 'Buckhall', 'country_code' => 'US'],\n            ['name' => 'El Dorado', 'country_code' => 'US'],\n            ['name' => 'Salmon Arm', 'country_code' => 'CA'],\n            ['name' => 'Alcochete', 'country_code' => 'PT'],\n            ['name' => 'South Hadley', 'country_code' => 'US'],\n            ['name' => 'Ashton', 'country_code' => 'NZ'],\n            ['name' => 'Tlahuelilpan', 'country_code' => 'MX'],\n            ['name' => 'Fleron', 'country_code' => 'BE'],\n            ['name' => 'Bailen', 'country_code' => 'ES'],\n            ['name' => 'Preganziol', 'country_code' => 'IT'],\n            ['name' => 'Port Alberni', 'country_code' => 'CA'],\n            ['name' => 'Pisticci', 'country_code' => 'IT'],\n            ['name' => 'Verneuil-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Santos Reyes Nopala', 'country_code' => 'MX'],\n            ['name' => 'Novo Airao', 'country_code' => 'BR'],\n            ['name' => 'Ribeirao Branco', 'country_code' => 'BR'],\n            ['name' => 'Ban Phe', 'country_code' => 'TH'],\n            ['name' => 'Greene', 'country_code' => 'US'],\n            ['name' => 'Pianoro', 'country_code' => 'IT'],\n            ['name' => 'Sipacapa', 'country_code' => 'GT'],\n            ['name' => 'Nerang', 'country_code' => 'AU'],\n            ['name' => 'Valle Vista', 'country_code' => 'US'],\n            ['name' => 'Bitam', 'country_code' => 'GA'],\n            ['name' => 'Qal at Mgouna', 'country_code' => 'MA'],\n            ['name' => 'Ait Majdane', 'country_code' => 'MA'],\n            ['name' => 'San Alejo', 'country_code' => 'SV'],\n            ['name' => 'Albert Lea', 'country_code' => 'US'],\n            ['name' => 'Polyarnyy', 'country_code' => 'RU'],\n            ['name' => 'Madison', 'country_code' => 'US'],\n            ['name' => 'Sao Paulo do Potengi', 'country_code' => 'BR'],\n            ['name' => 'Maitland', 'country_code' => 'US'],\n            ['name' => 'Osuna', 'country_code' => 'ES'],\n            ['name' => 'Guidan Roumdji', 'country_code' => 'NE'],\n            ['name' => 'Agua Branca', 'country_code' => 'BR'],\n            ['name' => 'Gretna', 'country_code' => 'US'],\n            ['name' => 'Inza', 'country_code' => 'RU'],\n            ['name' => 'Hatfield', 'country_code' => 'US'],\n            ['name' => 'Arauco', 'country_code' => 'CL'],\n            ['name' => 'Totutla', 'country_code' => 'MX'],\n            ['name' => 'Bendorf', 'country_code' => 'DE'],\n            ['name' => 'Tarrega', 'country_code' => 'ES'],\n            ['name' => 'Milanowek', 'country_code' => 'PL'],\n            ['name' => 'Sinnai', 'country_code' => 'IT'],\n            ['name' => 'Chedaopo', 'country_code' => 'CN'],\n            ['name' => 'Hinsdale', 'country_code' => 'US'],\n            ['name' => 'Rocca di Papa', 'country_code' => 'IT'],\n            ['name' => 'Ain Zaouia', 'country_code' => 'DZ'],\n            ['name' => 'Tougan', 'country_code' => 'BF'],\n            ['name' => 'Seara', 'country_code' => 'BR'],\n            ['name' => 'Santa Fe Springs', 'country_code' => 'US'],\n            ['name' => 'Bilina', 'country_code' => 'CZ'],\n            ['name' => 'Magalhaes de Almeida', 'country_code' => 'BR'],\n            ['name' => 'Bad Munder am Deister', 'country_code' => 'DE'],\n            ['name' => 'Franklin Park', 'country_code' => 'US'],\n            ['name' => 'Bethpage', 'country_code' => 'US'],\n            ['name' => 'La Primavera', 'country_code' => 'CO'],\n            ['name' => 'Awlouz', 'country_code' => 'MA'],\n            ['name' => 'East Massapequa', 'country_code' => 'US'],\n            ['name' => 'Belem', 'country_code' => 'BR'],\n            ['name' => 'Plainville', 'country_code' => 'US'],\n            ['name' => 'Amarante', 'country_code' => 'BR'],\n            ['name' => 'Same', 'country_code' => 'TZ'],\n            ['name' => 'Scordia', 'country_code' => 'IT'],\n            ['name' => 'Filadelfia', 'country_code' => 'BR'],\n            ['name' => 'Brignoles', 'country_code' => 'FR'],\n            ['name' => 'Catriel', 'country_code' => 'AR'],\n            ['name' => 'Wendlingen am Neckar', 'country_code' => 'DE'],\n            ['name' => 'Blooming Grove', 'country_code' => 'US'],\n            ['name' => 'Tabernes de Valldigna', 'country_code' => 'ES'],\n            ['name' => 'Zaysan', 'country_code' => 'KZ'],\n            ['name' => 'Kirksville', 'country_code' => 'US'],\n            ['name' => 'Nipomo', 'country_code' => 'US'],\n            ['name' => 'Nova Era', 'country_code' => 'BR'],\n            ['name' => 'Hopkinton', 'country_code' => 'US'],\n            ['name' => 'Afranio', 'country_code' => 'BR'],\n            ['name' => 'As Suqaylibiyah', 'country_code' => 'SY'],\n            ['name' => 'San Giovanni Valdarno', 'country_code' => 'IT'],\n            ['name' => 'Centerville', 'country_code' => 'US'],\n            ['name' => 'Bad Langensalza', 'country_code' => 'DE'],\n            ['name' => 'Plymouth', 'country_code' => 'US'],\n            ['name' => 'Gorham', 'country_code' => 'US'],\n            ['name' => 'Rubano', 'country_code' => 'IT'],\n            ['name' => 'Raunheim', 'country_code' => 'DE'],\n            ['name' => 'Neerpelt', 'country_code' => 'BE'],\n            ['name' => 'Butner', 'country_code' => 'US'],\n            ['name' => 'Cortes', 'country_code' => 'PH'],\n            ['name' => 'Boulsa', 'country_code' => 'BF'],\n            ['name' => 'Feilding', 'country_code' => 'NZ'],\n            ['name' => 'Sahel', 'country_code' => 'MA'],\n            ['name' => 'Poyo', 'country_code' => 'ES'],\n            ['name' => 'Salem', 'country_code' => 'US'],\n            ['name' => 'Thale', 'country_code' => 'DE'],\n            ['name' => 'Mayorga', 'country_code' => 'PH'],\n            ['name' => 'Marktredwitz', 'country_code' => 'DE'],\n            ['name' => 'Sanary-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Chirpan', 'country_code' => 'BG'],\n            ['name' => 'Tillmans Corner', 'country_code' => 'US'],\n            ['name' => 'Sedeh Lanjan', 'country_code' => 'IR'],\n            ['name' => 'Tabarka', 'country_code' => 'TN'],\n            ['name' => 'Fanipal ', 'country_code' => 'BY'],\n            ['name' => 'Pecanha', 'country_code' => 'BR'],\n            ['name' => 'La Garriga', 'country_code' => 'ES'],\n            ['name' => 'Alotenango', 'country_code' => 'GT'],\n            ['name' => 'Upper Grand Lagoon', 'country_code' => 'US'],\n            ['name' => 'Haslemere', 'country_code' => 'GB'],\n            ['name' => 'Anoka', 'country_code' => 'US'],\n            ['name' => 'Ismaning', 'country_code' => 'DE'],\n            ['name' => 'Remagen', 'country_code' => 'DE'],\n            ['name' => 'Hoganas', 'country_code' => 'SE'],\n            ['name' => 'Terra Roxa d Oeste', 'country_code' => 'BR'],\n            ['name' => 'Castelfiorentino', 'country_code' => 'IT'],\n            ['name' => 'Bobingen', 'country_code' => 'DE'],\n            ['name' => 'Bailesti', 'country_code' => 'RO'],\n            ['name' => 'Miramichi', 'country_code' => 'CA'],\n            ['name' => 'Laurel', 'country_code' => 'US'],\n            ['name' => 'Adelfia', 'country_code' => 'IT'],\n            ['name' => 'Amesbury', 'country_code' => 'US'],\n            ['name' => 'Plast', 'country_code' => 'RU'],\n            ['name' => 'Dar Chaifat', 'country_code' => 'MA'],\n            ['name' => 'Agourai', 'country_code' => 'MA'],\n            ['name' => 'Trossingen', 'country_code' => 'DE'],\n            ['name' => 'Windlesham', 'country_code' => 'GB'],\n            ['name' => 'Marion', 'country_code' => 'US'],\n            ['name' => 'Karukh', 'country_code' => 'AF'],\n            ['name' => 'Tallmadge', 'country_code' => 'US'],\n            ['name' => 'Cafelandia', 'country_code' => 'BR'],\n            ['name' => 'Nanuet', 'country_code' => 'US'],\n            ['name' => 'Negrar', 'country_code' => 'IT'],\n            ['name' => 'Balma', 'country_code' => 'FR'],\n            ['name' => 'Maryland City', 'country_code' => 'US'],\n            ['name' => 'Ketama', 'country_code' => 'MA'],\n            ['name' => 'Son en Breugel', 'country_code' => 'NL'],\n            ['name' => 'Niagara-on-the-Lake', 'country_code' => 'CA'],\n            ['name' => 'Shorewood', 'country_code' => 'US'],\n            ['name' => 'Krasnokumskoye', 'country_code' => 'RU'],\n            ['name' => 'Vero Beach', 'country_code' => 'US'],\n            ['name' => 'Ziracuaretiro', 'country_code' => 'MX'],\n            ['name' => 'Berga', 'country_code' => 'ES'],\n            ['name' => 'Clemson', 'country_code' => 'US'],\n            ['name' => 'Pinili', 'country_code' => 'PH'],\n            ['name' => 'Sulzbach', 'country_code' => 'DE'],\n            ['name' => 'Forssa', 'country_code' => 'FI'],\n            ['name' => 'Karachev', 'country_code' => 'RU'],\n            ['name' => 'Pomaz', 'country_code' => 'HU'],\n            ['name' => 'Spanish Lake', 'country_code' => 'US'],\n            ['name' => 'Kadogawa', 'country_code' => 'JP'],\n            ['name' => 'Suvorov', 'country_code' => 'RU'],\n            ['name' => 'Lewes', 'country_code' => 'GB'],\n            ['name' => 'Sant Elpidio a Mare', 'country_code' => 'IT'],\n            ['name' => 'Lara', 'country_code' => 'AU'],\n            ['name' => 'Concorezzo', 'country_code' => 'IT'],\n            ['name' => 'Pavullo nel Frignano', 'country_code' => 'IT'],\n            ['name' => 'Sao Raimundo das Mangabeiras', 'country_code' => 'BR'],\n            ['name' => 'Lake Mary', 'country_code' => 'US'],\n            ['name' => 'Vechelde', 'country_code' => 'DE'],\n            ['name' => 'Jovellar', 'country_code' => 'PH'],\n            ['name' => 'Horsham', 'country_code' => 'AU'],\n            ['name' => 'Guaranda', 'country_code' => 'CO'],\n            ['name' => 'Calafat', 'country_code' => 'RO'],\n            ['name' => 'Volgorechensk', 'country_code' => 'RU'],\n            ['name' => 'Lakeport', 'country_code' => 'US'],\n            ['name' => 'Sigmaringen', 'country_code' => 'DE'],\n            ['name' => 'Malhada', 'country_code' => 'BR'],\n            ['name' => 'Saint-Lin--Laurentides', 'country_code' => 'CA'],\n            ['name' => 'Mori', 'country_code' => 'JP'],\n            ['name' => 'Knik-Fairview', 'country_code' => 'US'],\n            ['name' => 'Galaz', 'country_code' => 'MA'],\n            ['name' => 'Maruim', 'country_code' => 'BR'],\n            ['name' => 'Martinsburg', 'country_code' => 'US'],\n            ['name' => 'El Rosal', 'country_code' => 'CO'],\n            ['name' => 'Bolhrad', 'country_code' => 'UA'],\n            ['name' => 'Montemor-o-Novo', 'country_code' => 'PT'],\n            ['name' => 'Tinton Falls', 'country_code' => 'US'],\n            ['name' => 'Pedra Preta', 'country_code' => 'BR'],\n            ['name' => 'Freienbach', 'country_code' => 'CH'],\n            ['name' => 'Flora', 'country_code' => 'PH'],\n            ['name' => 'Conchas', 'country_code' => 'BR'],\n            ['name' => 'Puerto Aysen', 'country_code' => 'CL'],\n            ['name' => 'Stowbtsy', 'country_code' => 'BY'],\n            ['name' => 'Capela', 'country_code' => 'BR'],\n            ['name' => 'Nidda', 'country_code' => 'DE'],\n            ['name' => 'Doylestown', 'country_code' => 'US'],\n            ['name' => 'Jenison', 'country_code' => 'US'],\n            ['name' => 'Veinticinco de Mayo', 'country_code' => 'AR'],\n            ['name' => 'Cadoneghe', 'country_code' => 'IT'],\n            ['name' => 'Tapiramuta', 'country_code' => 'BR'],\n            ['name' => 'Dijiasuoxiang', 'country_code' => 'CN'],\n            ['name' => 'La Algaba', 'country_code' => 'ES'],\n            ['name' => 'Los Alcazares', 'country_code' => 'ES'],\n            ['name' => 'Gescher', 'country_code' => 'DE'],\n            ['name' => 'Raychikhinsk', 'country_code' => 'RU'],\n            ['name' => 'Hidrolandia', 'country_code' => 'BR'],\n            ['name' => 'Suesca', 'country_code' => 'CO'],\n            ['name' => 'Montalvania', 'country_code' => 'BR'],\n            ['name' => 'Redland', 'country_code' => 'US'],\n            ['name' => 'Bad Munstereifel', 'country_code' => 'DE'],\n            ['name' => 'Eldorado', 'country_code' => 'AR'],\n            ['name' => 'Gennep', 'country_code' => 'NL'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Mayoyao', 'country_code' => 'PH'],\n            ['name' => 'Nizhnyaya Salda', 'country_code' => 'RU'],\n            ['name' => 'Burlington', 'country_code' => 'US'],\n            ['name' => 'Godfrey', 'country_code' => 'US'],\n            ['name' => 'Fairview', 'country_code' => 'US'],\n            ['name' => 'Pendleton', 'country_code' => 'US'],\n            ['name' => 'Kafr Zayta', 'country_code' => 'SY'],\n            ['name' => 'Beaumont', 'country_code' => 'CA'],\n            ['name' => 'Zandvoort', 'country_code' => 'NL'],\n            ['name' => 'Betulia', 'country_code' => 'CO'],\n            ['name' => 'Taylor', 'country_code' => 'US'],\n            ['name' => 'Rattaphum', 'country_code' => 'TH'],\n            ['name' => 'Eutin', 'country_code' => 'DE'],\n            ['name' => 'Santo Antonio do Amparo', 'country_code' => 'BR'],\n            ['name' => 'Sao Domingos do Prata', 'country_code' => 'BR'],\n            ['name' => 'Pecan Grove', 'country_code' => 'US'],\n            ['name' => 'Heilbad Heiligenstadt', 'country_code' => 'DE'],\n            ['name' => 'Biggleswade', 'country_code' => 'GB'],\n            ['name' => 'Milla ab', 'country_code' => 'MA'],\n            ['name' => 'Ripon', 'country_code' => 'GB'],\n            ['name' => 'Dazhangzi', 'country_code' => 'CN'],\n            ['name' => 'Nederland', 'country_code' => 'US'],\n            ['name' => 'Colonial Heights', 'country_code' => 'US'],\n            ['name' => 'Horn-Bad Meinberg', 'country_code' => 'DE'],\n            ['name' => 'Stockerau', 'country_code' => 'AT'],\n            ['name' => 'Ayacucho', 'country_code' => 'AR'],\n            ['name' => 'Wohlen', 'country_code' => 'CH'],\n            ['name' => 'Morriston', 'country_code' => 'GB'],\n            ['name' => 'Porto Empedocle', 'country_code' => 'IT'],\n            ['name' => 'Portsmouth', 'country_code' => 'US'],\n            ['name' => 'Stafford', 'country_code' => 'US'],\n            ['name' => 'Stockach', 'country_code' => 'DE'],\n            ['name' => 'Krasnoslobodsk', 'country_code' => 'RU'],\n            ['name' => 'Bermeo', 'country_code' => 'ES'],\n            ['name' => 'Willimantic', 'country_code' => 'US'],\n            ['name' => 'G uzor', 'country_code' => 'UZ'],\n            ['name' => 'Guryevsk', 'country_code' => 'RU'],\n            ['name' => 'Mount Barker', 'country_code' => 'AU'],\n            ['name' => 'Wittenberge', 'country_code' => 'DE'],\n            ['name' => 'Hatfield', 'country_code' => 'GB'],\n            ['name' => 'Saviano', 'country_code' => 'IT'],\n            ['name' => 'Souto Soares', 'country_code' => 'BR'],\n            ['name' => 'Ban Thung Tam Sao', 'country_code' => 'TH'],\n            ['name' => 'Shumikha', 'country_code' => 'RU'],\n            ['name' => 'Gussago', 'country_code' => 'IT'],\n            ['name' => 'Harborcreek', 'country_code' => 'US'],\n            ['name' => 'Silver Spring', 'country_code' => 'US'],\n            ['name' => 'Finnentrop', 'country_code' => 'DE'],\n            ['name' => 'Barbastro', 'country_code' => 'ES'],\n            ['name' => 'Schrobenhausen', 'country_code' => 'DE'],\n            ['name' => 'Ocean Acres', 'country_code' => 'US'],\n            ['name' => 'Tapes', 'country_code' => 'BR'],\n            ['name' => 'San Casciano in Val di Pesa', 'country_code' => 'IT'],\n            ['name' => 'Burgdorf', 'country_code' => 'CH'],\n            ['name' => 'Leczyca', 'country_code' => 'PL'],\n            ['name' => 'Tumbao', 'country_code' => 'PH'],\n            ['name' => 'Pisaflores', 'country_code' => 'MX'],\n            ['name' => 'Faxinal', 'country_code' => 'BR'],\n            ['name' => 'Urandi', 'country_code' => 'BR'],\n            ['name' => 'Guben', 'country_code' => 'DE'],\n            ['name' => 'Handlova', 'country_code' => 'SK'],\n            ['name' => 'La Marque', 'country_code' => 'US'],\n            ['name' => 'Svalyava', 'country_code' => 'UA'],\n            ['name' => 'Peso da Regua', 'country_code' => 'PT'],\n            ['name' => 'Konigstein im Taunus', 'country_code' => 'DE'],\n            ['name' => 'Lattes', 'country_code' => 'FR'],\n            ['name' => 'Sawankhalok', 'country_code' => 'TH'],\n            ['name' => 'Cosautlan', 'country_code' => 'MX'],\n            ['name' => 'Carmopolis', 'country_code' => 'BR'],\n            ['name' => 'Braunau am Inn', 'country_code' => 'AT'],\n            ['name' => 'Altena', 'country_code' => 'DE'],\n            ['name' => 'Colchester', 'country_code' => 'US'],\n            ['name' => 'Heckmondwike', 'country_code' => 'GB'],\n            ['name' => 'Baliangao', 'country_code' => 'PH'],\n            ['name' => 'Heysham', 'country_code' => 'GB'],\n            ['name' => 'Porto Murtinho', 'country_code' => 'BR'],\n            ['name' => 'Aubange', 'country_code' => 'BE'],\n            ['name' => 'Versailles', 'country_code' => 'US'],\n            ['name' => 'Morris', 'country_code' => 'US'],\n            ['name' => 'Campagna', 'country_code' => 'IT'],\n            ['name' => 'Kamenz', 'country_code' => 'DE'],\n            ['name' => 'Zarumilla', 'country_code' => 'PE'],\n            ['name' => 'Damme', 'country_code' => 'DE'],\n            ['name' => 'Lemont', 'country_code' => 'US'],\n            ['name' => 'Vera', 'country_code' => 'ES'],\n            ['name' => 'Gainesville', 'country_code' => 'US'],\n            ['name' => 'Cervantes', 'country_code' => 'PH'],\n            ['name' => 'Bucay', 'country_code' => 'PH'],\n            ['name' => 'Kangaba', 'country_code' => 'ML'],\n            ['name' => 'Sayre', 'country_code' => 'US'],\n            ['name' => 'Carovigno', 'country_code' => 'IT'],\n            ['name' => 'Giffnock', 'country_code' => 'GB'],\n            ['name' => 'Bad Wildungen', 'country_code' => 'DE'],\n            ['name' => 'Palanan', 'country_code' => 'PH'],\n            ['name' => 'Podporozhye', 'country_code' => 'RU'],\n            ['name' => 'East Finchley', 'country_code' => 'GB'],\n            ['name' => 'Chertsey', 'country_code' => 'GB'],\n            ['name' => 'Rojales', 'country_code' => 'ES'],\n            ['name' => 'Navalmoral de la Mata', 'country_code' => 'ES'],\n            ['name' => 'Domont', 'country_code' => 'FR'],\n            ['name' => 'Monsenhor Tabosa', 'country_code' => 'BR'],\n            ['name' => 'Portland', 'country_code' => 'US'],\n            ['name' => 'Bom Sucesso', 'country_code' => 'BR'],\n            ['name' => 'Clevelandia', 'country_code' => 'BR'],\n            ['name' => 'Baymak', 'country_code' => 'RU'],\n            ['name' => 'Lindenwold', 'country_code' => 'US'],\n            ['name' => 'Eggenstein-Leopoldshafen', 'country_code' => 'DE'],\n            ['name' => 'Middlesex Centre', 'country_code' => 'CA'],\n            ['name' => 'Pozoblanco', 'country_code' => 'ES'],\n            ['name' => 'Oswestry', 'country_code' => 'GB'],\n            ['name' => 'San Jorge', 'country_code' => 'PH'],\n            ['name' => 'Alcoy', 'country_code' => 'PH'],\n            ['name' => 'Saint-Egreve', 'country_code' => 'FR'],\n            ['name' => 'Calnali', 'country_code' => 'MX'],\n            ['name' => 'Cesario Lange', 'country_code' => 'BR'],\n            ['name' => 'Xintangcun', 'country_code' => 'CN'],\n            ['name' => 'Almeria', 'country_code' => 'PH'],\n            ['name' => 'Clive', 'country_code' => 'US'],\n            ['name' => 'Cumaru', 'country_code' => 'BR'],\n            ['name' => 'Mohacs', 'country_code' => 'HU'],\n            ['name' => 'Ribeiropolis', 'country_code' => 'BR'],\n            ['name' => 'Oneonta', 'country_code' => 'US'],\n            ['name' => 'Santa Magdalena', 'country_code' => 'PH'],\n            ['name' => 'Inverness', 'country_code' => 'CA'],\n            ['name' => 'Shippensburg', 'country_code' => 'US'],\n            ['name' => 'Ambares-et-Lagrave', 'country_code' => 'FR'],\n            ['name' => 'Killingly', 'country_code' => 'US'],\n            ['name' => 'Sudipen', 'country_code' => 'PH'],\n            ['name' => 'Penzberg', 'country_code' => 'DE'],\n            ['name' => 'Pampa', 'country_code' => 'US'],\n            ['name' => 'Stockelsdorf', 'country_code' => 'DE'],\n            ['name' => 'Numbrecht', 'country_code' => 'DE'],\n            ['name' => 'Kempele', 'country_code' => 'FI'],\n            ['name' => 'Dour', 'country_code' => 'BE'],\n            ['name' => 'Cajola', 'country_code' => 'GT'],\n            ['name' => 'Jicin', 'country_code' => 'CZ'],\n            ['name' => 'Marienberg', 'country_code' => 'DE'],\n            ['name' => 'McKinleyville', 'country_code' => 'US'],\n            ['name' => 'Ferndale', 'country_code' => 'US'],\n            ['name' => 'Kozienice', 'country_code' => 'PL'],\n            ['name' => 'Condeixa-a-Nova', 'country_code' => 'PT'],\n            ['name' => 'Fuente-Alamo de Murcia', 'country_code' => 'ES'],\n            ['name' => 'South Ogden', 'country_code' => 'US'],\n            ['name' => 'Elbeuf', 'country_code' => 'FR'],\n            ['name' => 'Aracagi', 'country_code' => 'BR'],\n            ['name' => 'Santana do Cariri', 'country_code' => 'BR'],\n            ['name' => 'Balmazujvaros', 'country_code' => 'HU'],\n            ['name' => 'Itirapina', 'country_code' => 'BR'],\n            ['name' => 'Hayange', 'country_code' => 'FR'],\n            ['name' => 'Stony Plain', 'country_code' => 'CA'],\n            ['name' => 'Poing', 'country_code' => 'DE'],\n            ['name' => 'Sedan', 'country_code' => 'FR'],\n            ['name' => 'Petawawa', 'country_code' => 'CA'],\n            ['name' => 'Albemarle', 'country_code' => 'US'],\n            ['name' => 'Canudos', 'country_code' => 'BR'],\n            ['name' => 'Urucuia', 'country_code' => 'BR'],\n            ['name' => 'Brzesko', 'country_code' => 'PL'],\n            ['name' => 'Adustina', 'country_code' => 'BR'],\n            ['name' => 'Saluzzo', 'country_code' => 'IT'],\n            ['name' => 'Coalinga', 'country_code' => 'US'],\n            ['name' => 'General Luna', 'country_code' => 'PH'],\n            ['name' => 'North Canton', 'country_code' => 'US'],\n            ['name' => 'Saran', 'country_code' => 'FR'],\n            ['name' => 'Saint-Cyr-sur-Loire', 'country_code' => 'FR'],\n            ['name' => 'Konstantinovsk', 'country_code' => 'RU'],\n            ['name' => 'Itaquitinga', 'country_code' => 'BR'],\n            ['name' => 'La Vista', 'country_code' => 'US'],\n            ['name' => 'Elias Fausto', 'country_code' => 'BR'],\n            ['name' => 'Saint-Pierre-des-Corps', 'country_code' => 'FR'],\n            ['name' => 'Urucara', 'country_code' => 'BR'],\n            ['name' => 'Benesov', 'country_code' => 'CZ'],\n            ['name' => 'Ashwaubenon', 'country_code' => 'US'],\n            ['name' => 'Freiberg am Neckar', 'country_code' => 'DE'],\n            ['name' => 'Gubin', 'country_code' => 'PL'],\n            ['name' => 'Dickson', 'country_code' => 'US'],\n            ['name' => 'Kusa', 'country_code' => 'RU'],\n            ['name' => 'Codru', 'country_code' => 'MD'],\n            ['name' => 'North Adams', 'country_code' => 'US'],\n            ['name' => 'Torre Maggiore', 'country_code' => 'IT'],\n            ['name' => 'Capistrano', 'country_code' => 'BR'],\n            ['name' => 'Corbelia', 'country_code' => 'BR'],\n            ['name' => 'Sidi Yakoub', 'country_code' => 'MA'],\n            ['name' => 'Ignacio de la Llave', 'country_code' => 'MX'],\n            ['name' => 'Waxhaw', 'country_code' => 'US'],\n            ['name' => 'San Juan del Sur', 'country_code' => 'NI'],\n            ['name' => 'Kezmarok', 'country_code' => 'SK'],\n            ['name' => 'Lam Luk Ka', 'country_code' => 'TH'],\n            ['name' => 'Ajacuba', 'country_code' => 'MX'],\n            ['name' => 'Saint Andrews', 'country_code' => 'GB'],\n            ['name' => 'Castellaneta', 'country_code' => 'IT'],\n            ['name' => 'Manlin', 'country_code' => 'CN'],\n            ['name' => 'Xinlong', 'country_code' => 'CN'],\n            ['name' => 'Zvenyhorodka', 'country_code' => 'UA'],\n            ['name' => 'Sidi Daoud', 'country_code' => 'DZ'],\n            ['name' => 'North Babylon', 'country_code' => 'US'],\n            ['name' => 'Pinas', 'country_code' => 'EC'],\n            ['name' => 'Long e', 'country_code' => 'CN'],\n            ['name' => 'Kiangan', 'country_code' => 'PH'],\n            ['name' => 'Svitavy', 'country_code' => 'CZ'],\n            ['name' => 'Kunzell', 'country_code' => 'DE'],\n            ['name' => 'Palestina de los Altos', 'country_code' => 'GT'],\n            ['name' => 'Xixinzhuangzhen', 'country_code' => 'CN'],\n            ['name' => 'Bargteheide', 'country_code' => 'DE'],\n            ['name' => 'Kronach', 'country_code' => 'DE'],\n            ['name' => 'Dabas', 'country_code' => 'HU'],\n            ['name' => 'Staphorst', 'country_code' => 'NL'],\n            ['name' => 'Bethlehem', 'country_code' => 'ZA'],\n            ['name' => 'Biliran', 'country_code' => 'PH'],\n            ['name' => 'Eppelborn', 'country_code' => 'DE'],\n            ['name' => 'Rotselaar', 'country_code' => 'BE'],\n            ['name' => 'Wadi Halfa ', 'country_code' => 'SD'],\n            ['name' => 'Landerneau', 'country_code' => 'FR'],\n            ['name' => 'Bastrop', 'country_code' => 'US'],\n            ['name' => 'San Giovanni in Fiore', 'country_code' => 'IT'],\n            ['name' => 'Abelardo Luz', 'country_code' => 'BR'],\n            ['name' => 'Cham', 'country_code' => 'DE'],\n            ['name' => 'Ammon', 'country_code' => 'US'],\n            ['name' => 'Tagounite', 'country_code' => 'MA'],\n            ['name' => 'Rizal', 'country_code' => 'PH'],\n            ['name' => 'Catarman', 'country_code' => 'PH'],\n            ['name' => 'Pelham', 'country_code' => 'CA'],\n            ['name' => 'Tijucas do Sul', 'country_code' => 'BR'],\n            ['name' => 'Bellingham', 'country_code' => 'US'],\n            ['name' => 'Knemis Dades', 'country_code' => 'MA'],\n            ['name' => 'Cestas', 'country_code' => 'FR'],\n            ['name' => 'Tamallalt', 'country_code' => 'MA'],\n            ['name' => 'Resplendor', 'country_code' => 'BR'],\n            ['name' => 'Nova Canaa', 'country_code' => 'BR'],\n            ['name' => 'Yelm', 'country_code' => 'US'],\n            ['name' => 'Yabuki', 'country_code' => 'JP'],\n            ['name' => 'Toijala', 'country_code' => 'FI'],\n            ['name' => 'Xinying', 'country_code' => 'CN'],\n            ['name' => 'Girua', 'country_code' => 'BR'],\n            ['name' => 'Carmopolis de Minas', 'country_code' => 'BR'],\n            ['name' => 'Tolanaro', 'country_code' => 'MG'],\n            ['name' => 'Macatuba', 'country_code' => 'BR'],\n            ['name' => 'Bombon', 'country_code' => 'PH'],\n            ['name' => 'Babenhausen', 'country_code' => 'DE'],\n            ['name' => 'Schwarzenberg', 'country_code' => 'DE'],\n            ['name' => 'Fundao', 'country_code' => 'BR'],\n            ['name' => 'Martinsicuro', 'country_code' => 'IT'],\n            ['name' => 'Marabut', 'country_code' => 'PH'],\n            ['name' => 'Gavrilov-Yam', 'country_code' => 'RU'],\n            ['name' => 'Zafra', 'country_code' => 'ES'],\n            ['name' => 'Parole', 'country_code' => 'US'],\n            ['name' => 'Ban Cho Ho', 'country_code' => 'TH'],\n            ['name' => 'Mauguio', 'country_code' => 'FR'],\n            ['name' => 'Menzelinsk', 'country_code' => 'RU'],\n            ['name' => 'Oulad Amrane', 'country_code' => 'MA'],\n            ['name' => 'Filiasi', 'country_code' => 'RO'],\n            ['name' => 'Agua Fria', 'country_code' => 'BR'],\n            ['name' => 'Itapiranga', 'country_code' => 'BR'],\n            ['name' => 'Preetz', 'country_code' => 'DE'],\n            ['name' => 'Glenvar Heights', 'country_code' => 'US'],\n            ['name' => 'Grottammare', 'country_code' => 'IT'],\n            ['name' => 'Pokrov', 'country_code' => 'RU'],\n            ['name' => 'Mangueirinha', 'country_code' => 'BR'],\n            ['name' => 'Turinsk', 'country_code' => 'RU'],\n            ['name' => 'Palos Hills', 'country_code' => 'US'],\n            ['name' => 'Selwyn', 'country_code' => 'CA'],\n            ['name' => 'Talsint', 'country_code' => 'MA'],\n            ['name' => 'Annonay', 'country_code' => 'FR'],\n            ['name' => 'Povorino', 'country_code' => 'RU'],\n            ['name' => 'Rosario Oeste', 'country_code' => 'BR'],\n            ['name' => 'Seltso', 'country_code' => 'RU'],\n            ['name' => 'Vedelago', 'country_code' => 'IT'],\n            ['name' => 'Khed', 'country_code' => 'IN'],\n            ['name' => 'Mula', 'country_code' => 'ES'],\n            ['name' => 'Sint-Kruis', 'country_code' => 'BE'],\n            ['name' => 'Crixas', 'country_code' => 'BR'],\n            ['name' => 'Brixham', 'country_code' => 'GB'],\n            ['name' => 'Diepholz', 'country_code' => 'DE'],\n            ['name' => 'Camano', 'country_code' => 'US'],\n            ['name' => 'Dongjiangshui', 'country_code' => 'CN'],\n            ['name' => 'Loay', 'country_code' => 'PH'],\n            ['name' => 'Retiro', 'country_code' => 'CO'],\n            ['name' => 'Liuchuan', 'country_code' => 'CN'],\n            ['name' => 'Cernavoda', 'country_code' => 'RO'],\n            ['name' => 'Santa Maria', 'country_code' => 'AR'],\n            ['name' => 'Valencia', 'country_code' => 'EC'],\n            ['name' => 'Dacaozhuang', 'country_code' => 'CN'],\n            ['name' => 'Streator', 'country_code' => 'US'],\n            ['name' => 'Bytow', 'country_code' => 'PL'],\n            ['name' => 'Samarate', 'country_code' => 'IT'],\n            ['name' => 'Wyckoff', 'country_code' => 'US'],\n            ['name' => 'Brookfield', 'country_code' => 'US'],\n            ['name' => 'Lentate sul Seveso', 'country_code' => 'IT'],\n            ['name' => 'Ihosy', 'country_code' => 'MG'],\n            ['name' => 'Liuguoju', 'country_code' => 'CN'],\n            ['name' => 'San Juan Lalana', 'country_code' => 'MX'],\n            ['name' => 'Penamiller', 'country_code' => 'MX'],\n            ['name' => 'Ambriz', 'country_code' => 'AO'],\n            ['name' => 'Aiuaba', 'country_code' => 'BR'],\n            ['name' => 'Steffisburg', 'country_code' => 'CH'],\n            ['name' => 'Realeza', 'country_code' => 'BR'],\n            ['name' => 'Seeheim-Jugenheim', 'country_code' => 'DE'],\n            ['name' => 'East Lampeter', 'country_code' => 'US'],\n            ['name' => 'Osowa', 'country_code' => 'PL'],\n            ['name' => 'Guadalupe Victoria', 'country_code' => 'MX'],\n            ['name' => 'Buffalo', 'country_code' => 'US'],\n            ['name' => 'Lincoln', 'country_code' => 'US'],\n            ['name' => 'Ashmyany', 'country_code' => 'BY'],\n            ['name' => 'Bagnacavallo', 'country_code' => 'IT'],\n            ['name' => 'Al Kilabiyah', 'country_code' => 'SA'],\n            ['name' => 'Sparti', 'country_code' => 'GR'],\n            ['name' => 'Sylacauga', 'country_code' => 'US'],\n            ['name' => 'Oconomowoc', 'country_code' => 'US'],\n            ['name' => 'Giaveno', 'country_code' => 'IT'],\n            ['name' => 'Azeffoun', 'country_code' => 'DZ'],\n            ['name' => 'Jilotepec', 'country_code' => 'MX'],\n            ['name' => 'Grojec', 'country_code' => 'PL'],\n            ['name' => 'Saint-Julien-en-Genevois', 'country_code' => 'FR'],\n            ['name' => 'Tourlaville', 'country_code' => 'FR'],\n            ['name' => 'Webster', 'country_code' => 'US'],\n            ['name' => 'Fort Hunt', 'country_code' => 'US'],\n            ['name' => 'Mateszalka', 'country_code' => 'HU'],\n            ['name' => 'Loyalist', 'country_code' => 'CA'],\n            ['name' => 'Phoenixville', 'country_code' => 'US'],\n            ['name' => 'Batuco', 'country_code' => 'CL'],\n            ['name' => 'Krapkowice', 'country_code' => 'PL'],\n            ['name' => 'Riemst', 'country_code' => 'BE'],\n            ['name' => 'San Jacinto Amilpas', 'country_code' => 'MX'],\n            ['name' => 'Vatutine', 'country_code' => 'UA'],\n            ['name' => 'Pran Buri', 'country_code' => 'TH'],\n            ['name' => 'Terra Rica', 'country_code' => 'BR'],\n            ['name' => 'Brunico', 'country_code' => 'IT'],\n            ['name' => 'America Dourada', 'country_code' => 'BR'],\n            ['name' => 'Mountain Home', 'country_code' => 'US'],\n            ['name' => 'Neratovice', 'country_code' => 'CZ'],\n            ['name' => 'San Jose de Chiquitos', 'country_code' => 'BO'],\n            ['name' => 'Didam', 'country_code' => 'NL'],\n            ['name' => 'Asten', 'country_code' => 'NL'],\n            ['name' => 'Palagonia', 'country_code' => 'IT'],\n            ['name' => 'Findikli', 'country_code' => 'TR'],\n            ['name' => 'Americus', 'country_code' => 'US'],\n            ['name' => 'Cubellas', 'country_code' => 'ES'],\n            ['name' => 'Republic', 'country_code' => 'US'],\n            ['name' => 'Iziaslav', 'country_code' => 'UA'],\n            ['name' => 'Reinheim', 'country_code' => 'DE'],\n            ['name' => 'Santa Cecilia', 'country_code' => 'BR'],\n            ['name' => 'Kelheim', 'country_code' => 'DE'],\n            ['name' => 'Upper Chichester', 'country_code' => 'US'],\n            ['name' => 'Severinia', 'country_code' => 'BR'],\n            ['name' => 'Agrate Brianza', 'country_code' => 'IT'],\n            ['name' => 'Rio Bueno', 'country_code' => 'CL'],\n            ['name' => 'Holzkirchen', 'country_code' => 'DE'],\n            ['name' => 'Dehaqan', 'country_code' => 'IR'],\n            ['name' => 'Lemay', 'country_code' => 'US'],\n            ['name' => 'Ratba', 'country_code' => 'MA'],\n            ['name' => 'Zhukovka', 'country_code' => 'RU'],\n            ['name' => 'Manilva', 'country_code' => 'ES'],\n            ['name' => 'Alvorada D Oeste', 'country_code' => 'BR'],\n            ['name' => 'Buda', 'country_code' => 'US'],\n            ['name' => 'Tomas Oppus', 'country_code' => 'PH'],\n            ['name' => 'Rakovski', 'country_code' => 'BG'],\n            ['name' => 'Katsuura', 'country_code' => 'JP'],\n            ['name' => 'Shahba', 'country_code' => 'SY'],\n            ['name' => 'Famy', 'country_code' => 'PH'],\n            ['name' => 'Sao Pedro do Sul', 'country_code' => 'PT'],\n            ['name' => 'Guarei', 'country_code' => 'BR'],\n            ['name' => 'Alfajayucan', 'country_code' => 'MX'],\n            ['name' => 'Cutlerville', 'country_code' => 'US'],\n            ['name' => 'Marbach am Neckar', 'country_code' => 'DE'],\n            ['name' => 'Chalchihuitan', 'country_code' => 'MX'],\n            ['name' => 'Port Lincoln', 'country_code' => 'AU'],\n            ['name' => 'Hajdunanas', 'country_code' => 'HU'],\n            ['name' => 'Alto Santo', 'country_code' => 'BR'],\n            ['name' => 'Calverton', 'country_code' => 'US'],\n            ['name' => 'Gainesville', 'country_code' => 'US'],\n            ['name' => 'Karratha', 'country_code' => 'AU'],\n            ['name' => 'Heumen', 'country_code' => 'NL'],\n            ['name' => 'Janakkala', 'country_code' => 'FI'],\n            ['name' => 'Poco Fundo', 'country_code' => 'BR'],\n            ['name' => ' Ain Abessa', 'country_code' => 'DZ'],\n            ['name' => 'Leini', 'country_code' => 'IT'],\n            ['name' => 'Stara L ubovna', 'country_code' => 'SK'],\n            ['name' => 'Southbridge', 'country_code' => 'US'],\n            ['name' => 'Wilton', 'country_code' => 'US'],\n            ['name' => 'Bonito', 'country_code' => 'BR'],\n            ['name' => 'Hohenems', 'country_code' => 'AT'],\n            ['name' => 'Tichi', 'country_code' => 'DZ'],\n            ['name' => 'Cagdianao', 'country_code' => 'PH'],\n            ['name' => 'Nova Resende', 'country_code' => 'BR'],\n            ['name' => 'Myrtle Grove', 'country_code' => 'US'],\n            ['name' => 'Burstadt', 'country_code' => 'DE'],\n            ['name' => 'Medicina', 'country_code' => 'IT'],\n            ['name' => 'Sin-le-Noble', 'country_code' => 'FR'],\n            ['name' => 'Montagu', 'country_code' => 'ZA'],\n            ['name' => 'Nova Ipixuna', 'country_code' => 'BR'],\n            ['name' => 'Lake St. Louis', 'country_code' => 'US'],\n            ['name' => 'Midland', 'country_code' => 'CA'],\n            ['name' => 'Bruckmuhl', 'country_code' => 'DE'],\n            ['name' => 'Este', 'country_code' => 'IT'],\n            ['name' => 'Seagoville', 'country_code' => 'US'],\n            ['name' => 'Colwood', 'country_code' => 'CA'],\n            ['name' => 'Bella Vista', 'country_code' => 'PY'],\n            ['name' => 'Guadarrama', 'country_code' => 'ES'],\n            ['name' => 'Chinampa de Gorostiza', 'country_code' => 'MX'],\n            ['name' => 'Westervoort', 'country_code' => 'NL'],\n            ['name' => 'Tejucuoca', 'country_code' => 'BR'],\n            ['name' => 'Crescent City', 'country_code' => 'US'],\n            ['name' => 'Ouaouzgane', 'country_code' => 'MA'],\n            ['name' => 'Colle Salvetti', 'country_code' => 'IT'],\n            ['name' => 'Escoublac', 'country_code' => 'FR'],\n            ['name' => 'Locarno', 'country_code' => 'CH'],\n            ['name' => 'Vallegrande', 'country_code' => 'BO'],\n            ['name' => 'Lille', 'country_code' => 'BE'],\n            ['name' => 'Saalfelden am Steinernen Meer', 'country_code' => 'AT'],\n            ['name' => 'Ubrique', 'country_code' => 'ES'],\n            ['name' => 'Strzegom', 'country_code' => 'PL'],\n            ['name' => 'Campulung Moldovenesc', 'country_code' => 'RO'],\n            ['name' => 'Sidi Lamine', 'country_code' => 'MA'],\n            ['name' => 'Saint-Maximin-la-Sainte-Baume', 'country_code' => 'FR'],\n            ['name' => 'Picayune', 'country_code' => 'US'],\n            ['name' => 'Taguatinga', 'country_code' => 'BR'],\n            ['name' => 'Iglino', 'country_code' => 'RU'],\n            ['name' => 'Pindai', 'country_code' => 'BR'],\n            ['name' => 'Fuying', 'country_code' => 'CN'],\n            ['name' => 'Itariri', 'country_code' => 'BR'],\n            ['name' => 'Rosedale', 'country_code' => 'US'],\n            ['name' => 'North Myrtle Beach', 'country_code' => 'US'],\n            ['name' => 'Ostrov', 'country_code' => 'CZ'],\n            ['name' => 'Gunzenhausen', 'country_code' => 'DE'],\n            ['name' => 'Wayne', 'country_code' => 'US'],\n            ['name' => 'Central Saanich', 'country_code' => 'CA'],\n            ['name' => 'Campanha', 'country_code' => 'BR'],\n            ['name' => 'Tocantins', 'country_code' => 'BR'],\n            ['name' => 'Vendome', 'country_code' => 'FR'],\n            ['name' => 'Bemidji', 'country_code' => 'US'],\n            ['name' => 'Sidi el Mokhfi', 'country_code' => 'MA'],\n            ['name' => 'Sume', 'country_code' => 'BR'],\n            ['name' => 'Calayan', 'country_code' => 'PH'],\n            ['name' => 'Chestnuthill', 'country_code' => 'US'],\n            ['name' => 'Sudak', 'country_code' => 'UA'],\n            ['name' => 'Kushima', 'country_code' => 'JP'],\n            ['name' => 'Lonigo', 'country_code' => 'IT'],\n            ['name' => 'Goodlettsville', 'country_code' => 'US'],\n            ['name' => 'Pajapita', 'country_code' => 'GT'],\n            ['name' => 'Kauhava', 'country_code' => 'FI'],\n            ['name' => 'Mikumi', 'country_code' => 'TZ'],\n            ['name' => 'Ricany', 'country_code' => 'CZ'],\n            ['name' => 'Carnaubal', 'country_code' => 'BR'],\n            ['name' => 'Grossostheim', 'country_code' => 'DE'],\n            ['name' => 'Ham Lake', 'country_code' => 'US'],\n            ['name' => 'El Pinon', 'country_code' => 'CO'],\n            ['name' => 'Cabeceiras de Basto', 'country_code' => 'PT'],\n            ['name' => 'San Rafael', 'country_code' => 'PH'],\n            ['name' => 'Aue', 'country_code' => 'DE'],\n            ['name' => 'Liangyi', 'country_code' => 'CN'],\n            ['name' => 'Sada', 'country_code' => 'ES'],\n            ['name' => 'Fairburn', 'country_code' => 'US'],\n            ['name' => 'Pollensa', 'country_code' => 'ES'],\n            ['name' => 'Kaiwen', 'country_code' => 'CN'],\n            ['name' => 'Ceadir-Lunga', 'country_code' => 'MD'],\n            ['name' => 'Bristol', 'country_code' => 'US'],\n            ['name' => 'Sainte-Catherine', 'country_code' => 'CA'],\n            ['name' => 'Neston', 'country_code' => 'GB'],\n            ['name' => 'Lake Wales', 'country_code' => 'US'],\n            ['name' => 'Sallanches', 'country_code' => 'FR'],\n            ['name' => 'Potirendaba', 'country_code' => 'BR'],\n            ['name' => 'Brasilandia', 'country_code' => 'BR'],\n            ['name' => 'Agudo', 'country_code' => 'BR'],\n            ['name' => 'Port Hope', 'country_code' => 'CA'],\n            ['name' => 'Cerea', 'country_code' => 'IT'],\n            ['name' => 'Gitagum', 'country_code' => 'PH'],\n            ['name' => 'Caravaggio', 'country_code' => 'IT'],\n            ['name' => 'Anamoros', 'country_code' => 'SV'],\n            ['name' => 'Machelen', 'country_code' => 'BE'],\n            ['name' => 'Ponte de Sor', 'country_code' => 'PT'],\n            ['name' => 'Singleton', 'country_code' => 'AU'],\n            ['name' => 'Novomichurinsk', 'country_code' => 'RU'],\n            ['name' => 'Douar Tabouda', 'country_code' => 'MA'],\n            ['name' => 'New Port Richey', 'country_code' => 'US'],\n            ['name' => 'Upper Saucon', 'country_code' => 'US'],\n            ['name' => 'Saint-Basile-le-Grand', 'country_code' => 'CA'],\n            ['name' => 'Morombe', 'country_code' => 'MG'],\n            ['name' => 'Truckee', 'country_code' => 'US'],\n            ['name' => 'Chorfa', 'country_code' => 'DZ'],\n            ['name' => 'Anda', 'country_code' => 'PH'],\n            ['name' => 'Sidi Ettiji', 'country_code' => 'MA'],\n            ['name' => 'Uhersky Brod', 'country_code' => 'CZ'],\n            ['name' => 'Wimborne Minster', 'country_code' => 'GB'],\n            ['name' => 'Leopoldshohe', 'country_code' => 'DE'],\n            ['name' => 'Sunagawa', 'country_code' => 'JP'],\n            ['name' => 'Zirara', 'country_code' => 'MA'],\n            ['name' => 'Capurso', 'country_code' => 'IT'],\n            ['name' => 'Zumarraga', 'country_code' => 'PH'],\n            ['name' => 'Cerro Maggiore', 'country_code' => 'IT'],\n            ['name' => 'Lindsay', 'country_code' => 'US'],\n            ['name' => 'Illingen', 'country_code' => 'DE'],\n            ['name' => 'Hennebont', 'country_code' => 'FR'],\n            ['name' => 'Seacombe', 'country_code' => 'GB'],\n            ['name' => 'Louth', 'country_code' => 'GB'],\n            ['name' => 'Vammala', 'country_code' => 'FI'],\n            ['name' => 'Ansfelden', 'country_code' => 'AT'],\n            ['name' => 'Ibicui', 'country_code' => 'BR'],\n            ['name' => 'Pochep', 'country_code' => 'RU'],\n            ['name' => 'Ibitiara', 'country_code' => 'BR'],\n            ['name' => 'Salesopolis', 'country_code' => 'BR'],\n            ['name' => 'Aston', 'country_code' => 'US'],\n            ['name' => 'Chelmza', 'country_code' => 'PL'],\n            ['name' => 'North Decatur', 'country_code' => 'US'],\n            ['name' => 'Wentang', 'country_code' => 'CN'],\n            ['name' => 'Roznov pod Radhostem', 'country_code' => 'CZ'],\n            ['name' => 'Zequ', 'country_code' => 'CN'],\n            ['name' => 'Cohoes', 'country_code' => 'US'],\n            ['name' => 'Beek', 'country_code' => 'NL'],\n            ['name' => 'Auburn', 'country_code' => 'US'],\n            ['name' => 'Monesiglio', 'country_code' => 'IT'],\n            ['name' => 'Todi', 'country_code' => 'IT'],\n            ['name' => 'Zeulenroda', 'country_code' => 'DE'],\n            ['name' => 'Reggello', 'country_code' => 'IT'],\n            ['name' => 'Federacion', 'country_code' => 'AR'],\n            ['name' => 'Anisoc', 'country_code' => 'GQ'],\n            ['name' => 'McComb', 'country_code' => 'US'],\n            ['name' => 'Highland Village', 'country_code' => 'US'],\n            ['name' => 'Noale', 'country_code' => 'IT'],\n            ['name' => 'Jinji', 'country_code' => 'CN'],\n            ['name' => 'Codogno', 'country_code' => 'IT'],\n            ['name' => 'Miyazu', 'country_code' => 'JP'],\n            ['name' => 'Raposos', 'country_code' => 'BR'],\n            ['name' => 'Athens', 'country_code' => 'US'],\n            ['name' => 'Dilijan', 'country_code' => 'AM'],\n            ['name' => 'Auburndale', 'country_code' => 'US'],\n            ['name' => 'Hunfeld', 'country_code' => 'DE'],\n            ['name' => 'Jiblah', 'country_code' => 'YE'],\n            ['name' => 'Pote', 'country_code' => 'BR'],\n            ['name' => 'Tagana-an', 'country_code' => 'PH'],\n            ['name' => 'Carapebus', 'country_code' => 'BR'],\n            ['name' => 'Santomera', 'country_code' => 'ES'],\n            ['name' => 'Illzach', 'country_code' => 'FR'],\n            ['name' => 'Mifune', 'country_code' => 'JP'],\n            ['name' => 'Ad Dis ash Sharqiyah', 'country_code' => 'YE'],\n            ['name' => 'Santa Maria Petapa', 'country_code' => 'MX'],\n            ['name' => 'Banbridge', 'country_code' => 'GB'],\n            ['name' => 'Denby Dale', 'country_code' => 'GB'],\n            ['name' => 'Tinoc', 'country_code' => 'PH'],\n            ['name' => 'Kovdor', 'country_code' => 'RU'],\n            ['name' => 'Lanquin', 'country_code' => 'GT'],\n            ['name' => 'Scott', 'country_code' => 'US'],\n            ['name' => 'Vesoul', 'country_code' => 'FR'],\n            ['name' => 'Alcantara', 'country_code' => 'PH'],\n            ['name' => 'Zapotlan de Juarez', 'country_code' => 'MX'],\n            ['name' => 'Corabia', 'country_code' => 'RO'],\n            ['name' => 'Gryfice', 'country_code' => 'PL'],\n            ['name' => 'Wolcott', 'country_code' => 'US'],\n            ['name' => 'Montbrison', 'country_code' => 'FR'],\n            ['name' => 'Al Lataminah', 'country_code' => 'SY'],\n            ['name' => 'Umbertide', 'country_code' => 'IT'],\n            ['name' => 'El Segundo', 'country_code' => 'US'],\n            ['name' => 'Holmdel', 'country_code' => 'US'],\n            ['name' => 'Denville', 'country_code' => 'US'],\n            ['name' => 'Xinyuan', 'country_code' => 'CN'],\n            ['name' => 'Mercedes', 'country_code' => 'US'],\n            ['name' => 'Swift Current', 'country_code' => 'CA'],\n            ['name' => 'Pardes Hanna Karkur', 'country_code' => 'IL'],\n            ['name' => 'Macetown', 'country_code' => 'NZ'],\n            ['name' => 'Libertad', 'country_code' => 'PH'],\n            ['name' => 'Centre de Flacq', 'country_code' => 'MU'],\n            ['name' => 'Olecko', 'country_code' => 'PL'],\n            ['name' => 'Norcross', 'country_code' => 'US'],\n            ['name' => 'Burrillville', 'country_code' => 'US'],\n            ['name' => 'Buritama', 'country_code' => 'BR'],\n            ['name' => 'Kurtamysh', 'country_code' => 'RU'],\n            ['name' => 'Jutai', 'country_code' => 'BR'],\n            ['name' => 'Villeneuve-Loubet', 'country_code' => 'FR'],\n            ['name' => 'Tredegar', 'country_code' => 'GB'],\n            ['name' => 'Northbridge', 'country_code' => 'US'],\n            ['name' => 'Batavia', 'country_code' => 'US'],\n            ['name' => 'Edmundston', 'country_code' => 'CA'],\n            ['name' => 'Chinde', 'country_code' => 'MZ'],\n            ['name' => 'Morganton', 'country_code' => 'US'],\n            ['name' => 'Harrisburg', 'country_code' => 'US'],\n            ['name' => 'Weybridge', 'country_code' => 'GB'],\n            ['name' => 'Sainte-Luce-sur-Loire', 'country_code' => 'FR'],\n            ['name' => 'Swansea', 'country_code' => 'US'],\n            ['name' => 'Keflavik', 'country_code' => 'IS'],\n            ['name' => 'Besana in Brianza', 'country_code' => 'IT'],\n            ['name' => 'Berezan', 'country_code' => 'UA'],\n            ['name' => 'Quarteira', 'country_code' => 'PT'],\n            ['name' => 'Delran', 'country_code' => 'US'],\n            ['name' => 'Langenthal', 'country_code' => 'CH'],\n            ['name' => 'West Hempfield', 'country_code' => 'US'],\n            ['name' => 'Uchkeken', 'country_code' => 'RU'],\n            ['name' => 'Bayat', 'country_code' => 'TR'],\n            ['name' => 'Ban Lam Narai', 'country_code' => 'TH'],\n            ['name' => 'Murraysville', 'country_code' => 'US'],\n            ['name' => 'Pedregulho', 'country_code' => 'BR'],\n            ['name' => 'Donaldsonville', 'country_code' => 'US'],\n            ['name' => 'Solvang', 'country_code' => 'US'],\n            ['name' => 'Charqueada', 'country_code' => 'BR'],\n            ['name' => 'Los Osos', 'country_code' => 'US'],\n            ['name' => 'Kisvarda', 'country_code' => 'HU'],\n            ['name' => 'Mapiri', 'country_code' => 'BO'],\n            ['name' => 'Horodok', 'country_code' => 'UA'],\n            ['name' => 'Gardhabaer', 'country_code' => 'IS'],\n            ['name' => 'Saint-Amand-les-Eaux', 'country_code' => 'FR'],\n            ['name' => 'Hovelhof', 'country_code' => 'DE'],\n            ['name' => 'Huissen', 'country_code' => 'NL'],\n            ['name' => 'Ivanava', 'country_code' => 'BY'],\n            ['name' => 'Russell', 'country_code' => 'CA'],\n            ['name' => 'Tururu', 'country_code' => 'BR'],\n            ['name' => 'Groveton', 'country_code' => 'US'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Espartinas', 'country_code' => 'ES'],\n            ['name' => 'Bady Bassitt', 'country_code' => 'BR'],\n            ['name' => 'Seymour', 'country_code' => 'US'],\n            ['name' => 'Longchang', 'country_code' => 'CN'],\n            ['name' => 'Changji', 'country_code' => 'CN'],\n            ['name' => 'Kirchlengern', 'country_code' => 'DE'],\n            ['name' => 'Yaypan', 'country_code' => 'UZ'],\n            ['name' => 'Zhongzai', 'country_code' => 'CN'],\n            ['name' => 'Regenstauf', 'country_code' => 'DE'],\n            ['name' => 'Live Oak', 'country_code' => 'US'],\n            ['name' => 'Rakovnik', 'country_code' => 'CZ'],\n            ['name' => 'Wyke', 'country_code' => 'GB'],\n            ['name' => 'Geddes', 'country_code' => 'US'],\n            ['name' => 'Karema', 'country_code' => 'TZ'],\n            ['name' => 'Lock Haven', 'country_code' => 'US'],\n            ['name' => 'Colon', 'country_code' => 'CR'],\n            ['name' => 'Loimaa', 'country_code' => 'FI'],\n            ['name' => 'Vienna', 'country_code' => 'US'],\n            ['name' => 'Boljoon', 'country_code' => 'PH'],\n            ['name' => 'Country Club Hills', 'country_code' => 'US'],\n            ['name' => 'Durham', 'country_code' => 'US'],\n            ['name' => 'Streetsboro', 'country_code' => 'US'],\n            ['name' => 'Kirchhain', 'country_code' => 'DE'],\n            ['name' => 'Jasper', 'country_code' => 'US'],\n            ['name' => 'Eden', 'country_code' => 'US'],\n            ['name' => 'Pearl River', 'country_code' => 'US'],\n            ['name' => 'Harenkarspel', 'country_code' => 'NL'],\n            ['name' => 'Digne-les-Bains', 'country_code' => 'FR'],\n            ['name' => 'Yunshan', 'country_code' => 'CN'],\n            ['name' => 'Chateaurenard', 'country_code' => 'FR'],\n            ['name' => 'Kozelsk', 'country_code' => 'RU'],\n            ['name' => 'Morretes', 'country_code' => 'BR'],\n            ['name' => 'Silvi Paese', 'country_code' => 'IT'],\n            ['name' => 'Hammam al  Alil', 'country_code' => 'IQ'],\n            ['name' => 'Douglas', 'country_code' => 'US'],\n            ['name' => 'Bovolone', 'country_code' => 'IT'],\n            ['name' => 'Slany', 'country_code' => 'CZ'],\n            ['name' => 'Valmontone', 'country_code' => 'IT'],\n            ['name' => 'Bilohirsk', 'country_code' => 'UA'],\n            ['name' => 'Crowley', 'country_code' => 'US'],\n            ['name' => 'Itaete', 'country_code' => 'BR'],\n            ['name' => 'Highland Springs', 'country_code' => 'US'],\n            ['name' => 'Anori', 'country_code' => 'CO'],\n            ['name' => 'Brackenheim', 'country_code' => 'DE'],\n            ['name' => 'Civita Castellana', 'country_code' => 'IT'],\n            ['name' => 'Harlingen', 'country_code' => 'NL'],\n            ['name' => 'Passa Quatro', 'country_code' => 'BR'],\n            ['name' => 'Taohongpozhen', 'country_code' => 'CN'],\n            ['name' => 'North Grenville', 'country_code' => 'CA'],\n            ['name' => 'Ispica', 'country_code' => 'IT'],\n            ['name' => 'Bruntal', 'country_code' => 'CZ'],\n            ['name' => 'Verrieres-le-Buisson', 'country_code' => 'FR'],\n            ['name' => 'Francheville', 'country_code' => 'FR'],\n            ['name' => 'Sertanopolis', 'country_code' => 'BR'],\n            ['name' => 'Hayes', 'country_code' => 'GB'],\n            ['name' => 'Eibergen', 'country_code' => 'NL'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Bordj Mokhtar', 'country_code' => 'DZ'],\n            ['name' => 'Cinco Ranch', 'country_code' => 'US'],\n            ['name' => 'Sava', 'country_code' => 'IT'],\n            ['name' => 'San Cristobal Cucho', 'country_code' => 'GT'],\n            ['name' => 'Vlijmen', 'country_code' => 'NL'],\n            ['name' => 'Wolf Trap', 'country_code' => 'US'],\n            ['name' => 'Abington', 'country_code' => 'US'],\n            ['name' => 'Lymington', 'country_code' => 'GB'],\n            ['name' => 'Chickasha', 'country_code' => 'US'],\n            ['name' => 'Finsterwalde', 'country_code' => 'DE'],\n            ['name' => 'Pindorama', 'country_code' => 'BR'],\n            ['name' => 'Las Cabezas de San Juan', 'country_code' => 'ES'],\n            ['name' => 'Verkhivtseve', 'country_code' => 'UA'],\n            ['name' => 'Curacautin', 'country_code' => 'CL'],\n            ['name' => 'Przeworsk', 'country_code' => 'PL'],\n            ['name' => 'Lumbayanague', 'country_code' => 'PH'],\n            ['name' => 'Al Hibah', 'country_code' => 'EG'],\n            ['name' => 'Uckfield', 'country_code' => 'GB'],\n            ['name' => 'Portachuelo', 'country_code' => 'BO'],\n            ['name' => 'Kings Park', 'country_code' => 'US'],\n            ['name' => 'Groveland', 'country_code' => 'US'],\n            ['name' => 'Tirhassaline', 'country_code' => 'MA'],\n            ['name' => 'Manturovo', 'country_code' => 'RU'],\n            ['name' => 'Bangor', 'country_code' => 'GB'],\n            ['name' => 'Piera', 'country_code' => 'ES'],\n            ['name' => 'Cinnaminson', 'country_code' => 'US'],\n            ['name' => 'Bituruna', 'country_code' => 'BR'],\n            ['name' => 'La Falda', 'country_code' => 'AR'],\n            ['name' => 'Mount Pleasant', 'country_code' => 'US'],\n            ['name' => 'Collipulli', 'country_code' => 'CL'],\n            ['name' => 'Herisau', 'country_code' => 'CH'],\n            ['name' => 'Aveiro', 'country_code' => 'BR'],\n            ['name' => 'Bad Lippspringe', 'country_code' => 'DE'],\n            ['name' => 'Shiraoi', 'country_code' => 'JP'],\n            ['name' => 'River Falls', 'country_code' => 'US'],\n            ['name' => 'Hernando', 'country_code' => 'US'],\n            ['name' => 'Copparo', 'country_code' => 'IT'],\n            ['name' => 'Acarape', 'country_code' => 'BR'],\n            ['name' => 'Baipingshan', 'country_code' => 'CN'],\n            ['name' => 'Carcarana', 'country_code' => 'AR'],\n            ['name' => 'Wurzen', 'country_code' => 'DE'],\n            ['name' => 'Sao Pedro do Sul', 'country_code' => 'BR'],\n            ['name' => 'Ripon', 'country_code' => 'US'],\n            ['name' => 'Weisswasser/Oberlausitz', 'country_code' => 'DE'],\n            ['name' => 'Penicuik', 'country_code' => 'GB'],\n            ['name' => 'Divrigi', 'country_code' => 'TR'],\n            ['name' => 'Monroe', 'country_code' => 'US'],\n            ['name' => 'Codroipo', 'country_code' => 'IT'],\n            ['name' => 'Montivilliers', 'country_code' => 'FR'],\n            ['name' => 'Hude', 'country_code' => 'DE'],\n            ['name' => 'Petersberg', 'country_code' => 'DE'],\n            ['name' => 'Penn', 'country_code' => 'US'],\n            ['name' => 'Brakel', 'country_code' => 'DE'],\n            ['name' => 'Bang Phae', 'country_code' => 'TH'],\n            ['name' => 'Kierspe', 'country_code' => 'DE'],\n            ['name' => 'Assai', 'country_code' => 'BR'],\n            ['name' => 'Saguday', 'country_code' => 'PH'],\n            ['name' => 'Rio Linda', 'country_code' => 'US'],\n            ['name' => 'Bluffdale', 'country_code' => 'US'],\n            ['name' => 'Dieburg', 'country_code' => 'DE'],\n            ['name' => 'Otacilio Costa', 'country_code' => 'BR'],\n            ['name' => 'Rygge', 'country_code' => 'NO'],\n            ['name' => 'Pecel', 'country_code' => 'HU'],\n            ['name' => 'Oarai', 'country_code' => 'JP'],\n            ['name' => 'East Greenbush', 'country_code' => 'US'],\n            ['name' => 'Storrs', 'country_code' => 'US'],\n            ['name' => 'Santa Fe', 'country_code' => 'PH'],\n            ['name' => 'Tapejara', 'country_code' => 'BR'],\n            ['name' => 'Havelock North', 'country_code' => 'NZ'],\n            ['name' => 'Orimattila', 'country_code' => 'FI'],\n            ['name' => 'Yorkton', 'country_code' => 'CA'],\n            ['name' => 'Schmelz', 'country_code' => 'DE'],\n            ['name' => 'Burley', 'country_code' => 'US'],\n            ['name' => 'Aurora', 'country_code' => 'US'],\n            ['name' => 'Donna', 'country_code' => 'US'],\n            ['name' => 'Ustron', 'country_code' => 'PL'],\n            ['name' => 'Michelstadt', 'country_code' => 'DE'],\n            ['name' => 'Palagiano', 'country_code' => 'IT'],\n            ['name' => 'Straelen', 'country_code' => 'DE'],\n            ['name' => 'Shahriston', 'country_code' => 'TJ'],\n            ['name' => 'Aranyaprathet', 'country_code' => 'TH'],\n            ['name' => 'Douar Azla', 'country_code' => 'MA'],\n            ['name' => 'Loxstedt', 'country_code' => 'DE'],\n            ['name' => 'Tarquinia', 'country_code' => 'IT'],\n            ['name' => 'Schiffweiler', 'country_code' => 'DE'],\n            ['name' => 'Ostashkov', 'country_code' => 'RU'],\n            ['name' => 'Queensbury', 'country_code' => 'GB'],\n            ['name' => 'Ponsacco', 'country_code' => 'IT'],\n            ['name' => 'Red Wing', 'country_code' => 'US'],\n            ['name' => 'Les Herbiers', 'country_code' => 'FR'],\n            ['name' => 'Adjud', 'country_code' => 'RO'],\n            ['name' => 'Halver', 'country_code' => 'DE'],\n            ['name' => 'Walldorf', 'country_code' => 'DE'],\n            ['name' => 'Fallon', 'country_code' => 'US'],\n            ['name' => 'Lyss', 'country_code' => 'CH'],\n            ['name' => 'Chamgardan', 'country_code' => 'IR'],\n            ['name' => 'Novoanninskiy', 'country_code' => 'RU'],\n            ['name' => 'Guerande', 'country_code' => 'FR'],\n            ['name' => 'Itau de Minas', 'country_code' => 'BR'],\n            ['name' => 'Fairview Heights', 'country_code' => 'US'],\n            ['name' => 'Celina', 'country_code' => 'US'],\n            ['name' => 'Timezgana', 'country_code' => 'MA'],\n            ['name' => 'Bikou', 'country_code' => 'CN'],\n            ['name' => 'Ospitaletto', 'country_code' => 'IT'],\n            ['name' => 'Guardamar del Segura', 'country_code' => 'ES'],\n            ['name' => ' Ayn Bni Mathar', 'country_code' => 'MA'],\n            ['name' => 'Gun Barrel City', 'country_code' => 'US'],\n            ['name' => 'Thermi', 'country_code' => 'GR'],\n            ['name' => 'Chaona', 'country_code' => 'CN'],\n            ['name' => 'Kabo', 'country_code' => 'CF'],\n            ['name' => 'Rumilly', 'country_code' => 'FR'],\n            ['name' => 'Arzua', 'country_code' => 'ES'],\n            ['name' => 'Chateau-Thierry', 'country_code' => 'FR'],\n            ['name' => 'North Whitehall', 'country_code' => 'US'],\n            ['name' => 'Cacu', 'country_code' => 'BR'],\n            ['name' => 'Morton', 'country_code' => 'US'],\n            ['name' => 'Port Jervis', 'country_code' => 'US'],\n            ['name' => 'Red Hill', 'country_code' => 'US'],\n            ['name' => 'Vila Bela da Santissima Trindade', 'country_code' => 'BR'],\n            ['name' => 'Petrovsk-Zabaykal skiy', 'country_code' => 'RU'],\n            ['name' => 'Loboc', 'country_code' => 'PH'],\n            ['name' => 'Kaukauna', 'country_code' => 'US'],\n            ['name' => 'San Antonio Oeste', 'country_code' => 'AR'],\n            ['name' => 'Mezokovesd', 'country_code' => 'HU'],\n            ['name' => 'Adwick le Street', 'country_code' => 'GB'],\n            ['name' => 'Addison', 'country_code' => 'US'],\n            ['name' => 'Fort Thomas', 'country_code' => 'US'],\n            ['name' => 'Erwitte', 'country_code' => 'DE'],\n            ['name' => 'Mebane', 'country_code' => 'US'],\n            ['name' => 'Guanagazapa', 'country_code' => 'GT'],\n            ['name' => 'Capinopolis', 'country_code' => 'BR'],\n            ['name' => 'Zegzel', 'country_code' => 'MA'],\n            ['name' => 'Mount Holly', 'country_code' => 'US'],\n            ['name' => 'Alegria', 'country_code' => 'PH'],\n            ['name' => 'Landen', 'country_code' => 'BE'],\n            ['name' => 'Conyers', 'country_code' => 'US'],\n            ['name' => 'Nanzuo', 'country_code' => 'CN'],\n            ['name' => 'Clausthal-Zellerfeld', 'country_code' => 'DE'],\n            ['name' => 'Bruck an der Mur', 'country_code' => 'AT'],\n            ['name' => 'Xiaozhengzhuang', 'country_code' => 'CN'],\n            ['name' => 'Nonantola', 'country_code' => 'IT'],\n            ['name' => 'Igapora', 'country_code' => 'BR'],\n            ['name' => 'Centerton', 'country_code' => 'US'],\n            ['name' => 'Yaojia', 'country_code' => 'CN'],\n            ['name' => 'Sered ', 'country_code' => 'SK'],\n            ['name' => 'East Longmeadow', 'country_code' => 'US'],\n            ['name' => 'Perchtoldsdorf', 'country_code' => 'AT'],\n            ['name' => 'Leixlip', 'country_code' => 'IE'],\n            ['name' => 'Bad Worishofen', 'country_code' => 'DE'],\n            ['name' => 'Merate', 'country_code' => 'IT'],\n            ['name' => 'Stuart', 'country_code' => 'US'],\n            ['name' => 'Sikeston', 'country_code' => 'US'],\n            ['name' => 'Pianezza', 'country_code' => 'IT'],\n            ['name' => 'Sulphur Springs', 'country_code' => 'US'],\n            ['name' => 'Araputanga', 'country_code' => 'BR'],\n            ['name' => 'Breaza', 'country_code' => 'RO'],\n            ['name' => 'San Pedro de Lloc', 'country_code' => 'PE'],\n            ['name' => 'Santa Fe', 'country_code' => 'PH'],\n            ['name' => 'Galliate', 'country_code' => 'IT'],\n            ['name' => 'Ouadhia', 'country_code' => 'DZ'],\n            ['name' => 'Ait Yaazem', 'country_code' => 'MA'],\n            ['name' => 'Poxoreo', 'country_code' => 'BR'],\n            ['name' => 'Bouchabel', 'country_code' => 'MA'],\n            ['name' => 'San Cesareo', 'country_code' => 'IT'],\n            ['name' => 'San Gabriel', 'country_code' => 'EC'],\n            ['name' => 'Boulder City', 'country_code' => 'US'],\n            ['name' => 'Buadiposo-Buntong', 'country_code' => 'PH'],\n            ['name' => 'Centralia', 'country_code' => 'US'],\n            ['name' => 'Palmitos', 'country_code' => 'BR'],\n            ['name' => 'Puerto Pimentel', 'country_code' => 'PE'],\n            ['name' => 'Masmouda', 'country_code' => 'MA'],\n            ['name' => 'Pocking', 'country_code' => 'DE'],\n            ['name' => 'Altinopolis', 'country_code' => 'BR'],\n            ['name' => 'Dixon', 'country_code' => 'US'],\n            ['name' => 'Chai Prakan', 'country_code' => 'TH'],\n            ['name' => 'Horqueta', 'country_code' => 'PY'],\n            ['name' => 'Getulio Vargas', 'country_code' => 'BR'],\n            ['name' => 'Mujui dos Campos', 'country_code' => 'BR'],\n            ['name' => 'Barra de Santo Antonio', 'country_code' => 'BR'],\n            ['name' => 'Bar', 'country_code' => 'UA'],\n            ['name' => 'Troutdale', 'country_code' => 'US'],\n            ['name' => 'Zevenbergen', 'country_code' => 'NL'],\n            ['name' => 'Paulino Neves', 'country_code' => 'BR'],\n            ['name' => 'Iguatemi', 'country_code' => 'BR'],\n            ['name' => 'Wiefelstede', 'country_code' => 'DE'],\n            ['name' => 'Babayurt', 'country_code' => 'RU'],\n            ['name' => 'Huarmey', 'country_code' => 'PE'],\n            ['name' => 'Pelhrimov', 'country_code' => 'CZ'],\n            ['name' => 'San Tomas', 'country_code' => 'PH'],\n            ['name' => 'Quixelo', 'country_code' => 'BR'],\n            ['name' => 'As Sukhnah', 'country_code' => 'SY'],\n            ['name' => 'Iraci', 'country_code' => 'BR'],\n            ['name' => 'Ellington', 'country_code' => 'US'],\n            ['name' => 'Rylsk', 'country_code' => 'RU'],\n            ['name' => 'Conwy', 'country_code' => 'GB'],\n            ['name' => 'Mount Clemens', 'country_code' => 'US'],\n            ['name' => 'Fairview Park', 'country_code' => 'US'],\n            ['name' => 'Discovery Bay', 'country_code' => 'US'],\n            ['name' => 'Evans', 'country_code' => 'US'],\n            ['name' => 'Sukth', 'country_code' => 'AL'],\n            ['name' => 'Ukrainka', 'country_code' => 'UA'],\n            ['name' => 'Potenza Picena', 'country_code' => 'IT'],\n            ['name' => 'Bni Tajjit', 'country_code' => 'MA'],\n            ['name' => 'Wardenburg', 'country_code' => 'DE'],\n            ['name' => 'Corupa', 'country_code' => 'BR'],\n            ['name' => 'Ginatilan', 'country_code' => 'PH'],\n            ['name' => 'Bni Quolla', 'country_code' => 'MA'],\n            ['name' => 'Stallings', 'country_code' => 'US'],\n            ['name' => 'Wendelstein', 'country_code' => 'DE'],\n            ['name' => 'Cambridge', 'country_code' => 'US'],\n            ['name' => 'Joaquim Nabuco', 'country_code' => 'BR'],\n            ['name' => 'Sandhausen', 'country_code' => 'DE'],\n            ['name' => 'Mezotur', 'country_code' => 'HU'],\n            ['name' => 'Minster', 'country_code' => 'GB'],\n            ['name' => 'Baleyara', 'country_code' => 'NE'],\n            ['name' => 'Taucha', 'country_code' => 'DE'],\n            ['name' => 'Lubbenau/Spreewald', 'country_code' => 'DE'],\n            ['name' => 'Frankfort', 'country_code' => 'US'],\n            ['name' => 'Westwood', 'country_code' => 'US'],\n            ['name' => 'Chenove', 'country_code' => 'FR'],\n            ['name' => 'Barrington', 'country_code' => 'US'],\n            ['name' => 'Hongsi', 'country_code' => 'CN'],\n            ['name' => 'Ebersbach an der Fils', 'country_code' => 'DE'],\n            ['name' => 'Chinggil', 'country_code' => 'CN'],\n            ['name' => 'Arteche', 'country_code' => 'PH'],\n            ['name' => 'Csongrad', 'country_code' => 'HU'],\n            ['name' => 'Westchester', 'country_code' => 'US'],\n            ['name' => 'Altopascio', 'country_code' => 'IT'],\n            ['name' => 'Kodinsk', 'country_code' => 'RU'],\n            ['name' => 'Tracadie', 'country_code' => 'CA'],\n            ['name' => 'Alsfeld', 'country_code' => 'DE'],\n            ['name' => 'Whittlesey', 'country_code' => 'GB'],\n            ['name' => 'Dalachi', 'country_code' => 'CN'],\n            ['name' => 'Center Point', 'country_code' => 'US'],\n            ['name' => 'Canyon', 'country_code' => 'US'],\n            ['name' => 'West Haven', 'country_code' => 'US'],\n            ['name' => 'Coulommiers', 'country_code' => 'FR'],\n            ['name' => 'Washougal', 'country_code' => 'US'],\n            ['name' => 'Degtyarsk', 'country_code' => 'RU'],\n            ['name' => 'Aquitania', 'country_code' => 'CO'],\n            ['name' => 'Sassenheim', 'country_code' => 'NL'],\n            ['name' => 'Mulundo', 'country_code' => 'PH'],\n            ['name' => 'Saint-Avertin', 'country_code' => 'FR'],\n            ['name' => 'Ilave', 'country_code' => 'PE'],\n            ['name' => 'Bridgeview', 'country_code' => 'US'],\n            ['name' => 'Telfs', 'country_code' => 'AT'],\n            ['name' => 'Khat Azakane', 'country_code' => 'MA'],\n            ['name' => 'Nyahanga', 'country_code' => 'TZ'],\n            ['name' => 'Troy', 'country_code' => 'US'],\n            ['name' => 'Horodok', 'country_code' => 'UA'],\n            ['name' => 'Nagasu', 'country_code' => 'JP'],\n            ['name' => 'Certaldo', 'country_code' => 'IT'],\n            ['name' => 'Fiano Romano', 'country_code' => 'IT'],\n            ['name' => 'Skhour Rehamna', 'country_code' => 'MA'],\n            ['name' => 'Boudjima', 'country_code' => 'DZ'],\n            ['name' => 'Frogn', 'country_code' => 'NO'],\n            ['name' => 'Lebanon', 'country_code' => 'US'],\n            ['name' => 'Stafa', 'country_code' => 'CH'],\n            ['name' => 'Candoi', 'country_code' => 'BR'],\n            ['name' => 'L Oulja', 'country_code' => 'MA'],\n            ['name' => 'Griffith', 'country_code' => 'US'],\n            ['name' => 'Villa Rica', 'country_code' => 'US'],\n            ['name' => 'Santa Cruz de la Palma', 'country_code' => 'ES'],\n            ['name' => 'Schluchtern', 'country_code' => 'DE'],\n            ['name' => 'Paluan', 'country_code' => 'PH'],\n            ['name' => 'Atescatempa', 'country_code' => 'GT'],\n            ['name' => 'Azzano Decimo', 'country_code' => 'IT'],\n            ['name' => 'Sansepolcro', 'country_code' => 'IT'],\n            ['name' => 'Bassum', 'country_code' => 'DE'],\n            ['name' => 'Fairhaven', 'country_code' => 'US'],\n            ['name' => 'Tizi-n-Tleta', 'country_code' => 'DZ'],\n            ['name' => 'Cortes', 'country_code' => 'PH'],\n            ['name' => 'Weener', 'country_code' => 'DE'],\n            ['name' => 'Alma', 'country_code' => 'US'],\n            ['name' => 'Dianga', 'country_code' => 'CN'],\n            ['name' => 'Bragadiru', 'country_code' => 'RO'],\n            ['name' => 'Fort Leonard Wood', 'country_code' => 'US'],\n            ['name' => 'Chislehurst', 'country_code' => 'GB'],\n            ['name' => 'Kasli', 'country_code' => 'RU'],\n            ['name' => 'Guamare', 'country_code' => 'BR'],\n            ['name' => 'Long Beach', 'country_code' => 'US'],\n            ['name' => 'Villers-les-Nancy', 'country_code' => 'FR'],\n            ['name' => 'Shchigry', 'country_code' => 'RU'],\n            ['name' => 'Lady Lake', 'country_code' => 'US'],\n            ['name' => 'Todmorden', 'country_code' => 'GB'],\n            ['name' => 'Aberdeen', 'country_code' => 'US'],\n            ['name' => 'Welby', 'country_code' => 'US'],\n            ['name' => 'Middletown', 'country_code' => 'US'],\n            ['name' => 'Indianola', 'country_code' => 'US'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Pianco', 'country_code' => 'BR'],\n            ['name' => 'Ban Dung', 'country_code' => 'TH'],\n            ['name' => 'Bracebridge', 'country_code' => 'CA'],\n            ['name' => 'Paglat', 'country_code' => 'PH'],\n            ['name' => 'Seven Pagodas', 'country_code' => 'IN'],\n            ['name' => 'Mennecy', 'country_code' => 'FR'],\n            ['name' => 'Kamyzyak', 'country_code' => 'RU'],\n            ['name' => 'Caetano', 'country_code' => 'BR'],\n            ['name' => 'Fartura', 'country_code' => 'BR'],\n            ['name' => 'Yaransk', 'country_code' => 'RU'],\n            ['name' => 'Barysh', 'country_code' => 'RU'],\n            ['name' => 'Phelan', 'country_code' => 'US'],\n            ['name' => 'Issoire', 'country_code' => 'FR'],\n            ['name' => 'Bastogne', 'country_code' => 'BE'],\n            ['name' => 'Chivolo', 'country_code' => 'CO'],\n            ['name' => 'Santa Maria de Jesus', 'country_code' => 'GT'],\n            ['name' => 'Lakeway', 'country_code' => 'US'],\n            ['name' => 'Alcaniz', 'country_code' => 'ES'],\n            ['name' => 'Ghomrassen', 'country_code' => 'TN'],\n            ['name' => 'Knaresborough', 'country_code' => 'GB'],\n            ['name' => 'Dyer', 'country_code' => 'US'],\n            ['name' => 'Toul', 'country_code' => 'FR'],\n            ['name' => 'Archer Lodge', 'country_code' => 'US'],\n            ['name' => 'Niceville', 'country_code' => 'US'],\n            ['name' => 'Bocsa', 'country_code' => 'RO'],\n            ['name' => 'Blanquefort', 'country_code' => 'FR'],\n            ['name' => 'Middletown', 'country_code' => 'US'],\n            ['name' => 'Trelaze', 'country_code' => 'FR'],\n            ['name' => 'Haddada', 'country_code' => 'MA'],\n            ['name' => 'Calbuco', 'country_code' => 'CL'],\n            ['name' => 'Fussen', 'country_code' => 'DE'],\n            ['name' => 'Bruggen', 'country_code' => 'DE'],\n            ['name' => 'Clearlake', 'country_code' => 'US'],\n            ['name' => 'Dehaq', 'country_code' => 'IR'],\n            ['name' => 'Thundersley', 'country_code' => 'GB'],\n            ['name' => 'Marghita', 'country_code' => 'RO'],\n            ['name' => 'Fillmore', 'country_code' => 'US'],\n            ['name' => 'Yorito', 'country_code' => 'HN'],\n            ['name' => 'Talitsa', 'country_code' => 'RU'],\n            ['name' => 'Rescaldina', 'country_code' => 'IT'],\n            ['name' => 'San Julian', 'country_code' => 'MX'],\n            ['name' => 'Hood River', 'country_code' => 'US'],\n            ['name' => 'Plavsk', 'country_code' => 'RU'],\n            ['name' => 'Bellevue', 'country_code' => 'US'],\n            ['name' => 'Pamiers', 'country_code' => 'FR'],\n            ['name' => 'Xixucun', 'country_code' => 'CN'],\n            ['name' => 'Spanish Springs', 'country_code' => 'US'],\n            ['name' => 'Bikin', 'country_code' => 'RU'],\n            ['name' => 'Maardu', 'country_code' => 'EE'],\n            ['name' => 'Aramil', 'country_code' => 'RU'],\n            ['name' => 'Boskoop', 'country_code' => 'NL'],\n            ['name' => 'Ain Mediouna', 'country_code' => 'MA'],\n            ['name' => 'Port Glasgow', 'country_code' => 'GB'],\n            ['name' => 'Volpiano', 'country_code' => 'IT'],\n            ['name' => 'San Martino Buon Albergo', 'country_code' => 'IT'],\n            ['name' => 'Luzhou', 'country_code' => 'CN'],\n            ['name' => 'Bois-Guillaume', 'country_code' => 'FR'],\n            ['name' => 'Westport', 'country_code' => 'US'],\n            ['name' => 'Comarapa', 'country_code' => 'BO'],\n            ['name' => 'Tabatinga', 'country_code' => 'BR'],\n            ['name' => 'Dinan', 'country_code' => 'FR'],\n            ['name' => 'New Haven', 'country_code' => 'US'],\n            ['name' => 'Oyten', 'country_code' => 'DE'],\n            ['name' => 'Mottola', 'country_code' => 'IT'],\n            ['name' => 'Eilenburg', 'country_code' => 'DE'],\n            ['name' => 'Serta', 'country_code' => 'PT'],\n            ['name' => 'Chiconquiaco', 'country_code' => 'MX'],\n            ['name' => 'Monte Plata', 'country_code' => 'DO'],\n            ['name' => 'Cardonal', 'country_code' => 'MX'],\n            ['name' => 'New River', 'country_code' => 'US'],\n            ['name' => 'Sayville', 'country_code' => 'US'],\n            ['name' => 'Patos', 'country_code' => 'AL'],\n            ['name' => 'Malta', 'country_code' => 'US'],\n            ['name' => 'Dvur Kralove nad Labem', 'country_code' => 'CZ'],\n            ['name' => 'Warwick', 'country_code' => 'AU'],\n            ['name' => 'Alabat', 'country_code' => 'PH'],\n            ['name' => 'Beaucaire', 'country_code' => 'FR'],\n            ['name' => 'Readington', 'country_code' => 'US'],\n            ['name' => 'Tamazouzt', 'country_code' => 'MA'],\n            ['name' => 'Millbrook', 'country_code' => 'US'],\n            ['name' => 'Sidi Allal el Bahraoui', 'country_code' => 'MA'],\n            ['name' => 'Grao Mogol', 'country_code' => 'BR'],\n            ['name' => 'Carthage', 'country_code' => 'US'],\n            ['name' => 'Greater Napanee', 'country_code' => 'CA'],\n            ['name' => 'Breisach am Rhein', 'country_code' => 'DE'],\n            ['name' => 'Skvyra', 'country_code' => 'UA'],\n            ['name' => 'Yuvileine', 'country_code' => 'UA'],\n            ['name' => 'Ras El Oued', 'country_code' => 'MA'],\n            ['name' => 'Ivdel', 'country_code' => 'RU'],\n            ['name' => 'West Lampeter', 'country_code' => 'US'],\n            ['name' => 'Puquio', 'country_code' => 'PE'],\n            ['name' => 'Prospect Heights', 'country_code' => 'US'],\n            ['name' => 'King City', 'country_code' => 'US'],\n            ['name' => 'Opa-locka', 'country_code' => 'US'],\n            ['name' => 'Dilasag', 'country_code' => 'PH'],\n            ['name' => 'Markranstadt', 'country_code' => 'DE'],\n            ['name' => 'Pataskala', 'country_code' => 'US'],\n            ['name' => 'Hedongcun', 'country_code' => 'CN'],\n            ['name' => 'Katav-Ivanovsk', 'country_code' => 'RU'],\n            ['name' => 'Indiaroba', 'country_code' => 'BR'],\n            ['name' => 'Mozarlandia', 'country_code' => 'BR'],\n            ['name' => 'Casalpusterlengo', 'country_code' => 'IT'],\n            ['name' => 'Leso', 'country_code' => 'PH'],\n            ['name' => 'Galatone', 'country_code' => 'IT'],\n            ['name' => 'Rumst', 'country_code' => 'BE'],\n            ['name' => 'Baeza', 'country_code' => 'ES'],\n            ['name' => 'Tillsonburg', 'country_code' => 'CA'],\n            ['name' => 'Sunset', 'country_code' => 'US'],\n            ['name' => 'Machang', 'country_code' => 'CN'],\n            ['name' => 'Wadern', 'country_code' => 'DE'],\n            ['name' => 'Saint-Avold', 'country_code' => 'FR'],\n            ['name' => 'Tenango de Doria', 'country_code' => 'MX'],\n            ['name' => 'Ince-in-Makerfield', 'country_code' => 'GB'],\n            ['name' => 'Restinga Seca', 'country_code' => 'BR'],\n            ['name' => 'Tsukumiura', 'country_code' => 'JP'],\n            ['name' => 'Colchester', 'country_code' => 'US'],\n            ['name' => 'Neustadt in Holstein', 'country_code' => 'DE'],\n            ['name' => 'Grandville', 'country_code' => 'US'],\n            ['name' => 'Jussara', 'country_code' => 'BR'],\n            ['name' => 'Ixhuatlan del Sureste', 'country_code' => 'MX'],\n            ['name' => 'Hibbing', 'country_code' => 'US'],\n            ['name' => 'Sarasota Springs', 'country_code' => 'US'],\n            ['name' => 'Barrocas', 'country_code' => 'BR'],\n            ['name' => 'Laguna Woods', 'country_code' => 'US'],\n            ['name' => 'Derzhavinsk', 'country_code' => 'KZ'],\n            ['name' => 'Hope Mills', 'country_code' => 'US'],\n            ['name' => 'Kumano', 'country_code' => 'JP'],\n            ['name' => 'Ibateguara', 'country_code' => 'BR'],\n            ['name' => 'El Estor', 'country_code' => 'GT'],\n            ['name' => 'Chenlu', 'country_code' => 'CN'],\n            ['name' => 'Surbo', 'country_code' => 'IT'],\n            ['name' => 'Jatauba', 'country_code' => 'BR'],\n            ['name' => 'Sierra Vista Southeast', 'country_code' => 'US'],\n            ['name' => 'Nymburk', 'country_code' => 'CZ'],\n            ['name' => 'Templin', 'country_code' => 'DE'],\n            ['name' => 'Wilmington Island', 'country_code' => 'US'],\n            ['name' => 'Upper Gwynedd', 'country_code' => 'US'],\n            ['name' => 'Kalininsk', 'country_code' => 'RU'],\n            ['name' => 'Lewiston', 'country_code' => 'US'],\n            ['name' => 'Easthampton', 'country_code' => 'US'],\n            ['name' => 'Steinbach', 'country_code' => 'CA'],\n            ['name' => 'Bad Neustadt', 'country_code' => 'DE'],\n            ['name' => 'Papagaios', 'country_code' => 'BR'],\n            ['name' => 'Patton', 'country_code' => 'US'],\n            ['name' => 'Biritinga', 'country_code' => 'BR'],\n            ['name' => 'Lumbreras', 'country_code' => 'ES'],\n            ['name' => 'Naivasha', 'country_code' => 'KE'],\n            ['name' => 'Grossenkneten', 'country_code' => 'DE'],\n            ['name' => 'Humble', 'country_code' => 'US'],\n            ['name' => 'Mamadysh', 'country_code' => 'RU'],\n            ['name' => 'Konigslutter am Elm', 'country_code' => 'DE'],\n            ['name' => 'Echuca', 'country_code' => 'AU'],\n            ['name' => 'Taurianova', 'country_code' => 'IT'],\n            ['name' => 'Lagoa Real', 'country_code' => 'BR'],\n            ['name' => 'Ovruch', 'country_code' => 'UA'],\n            ['name' => 'Carterton', 'country_code' => 'GB'],\n            ['name' => 'Payson', 'country_code' => 'US'],\n            ['name' => 'Bredasdorp', 'country_code' => 'ZA'],\n            ['name' => 'Duxbury', 'country_code' => 'US'],\n            ['name' => 'Port Washington', 'country_code' => 'US'],\n            ['name' => 'Yasnyy', 'country_code' => 'RU'],\n            ['name' => 'Putyvl', 'country_code' => 'UA'],\n            ['name' => 'Nova Ponte', 'country_code' => 'BR'],\n            ['name' => 'Shahr-e Jadid-e Hashtgerd', 'country_code' => 'IR'],\n            ['name' => 'Sopelana', 'country_code' => 'ES'],\n            ['name' => 'Sao Joao Evangelista', 'country_code' => 'BR'],\n            ['name' => 'Macedo de Cavaleiros', 'country_code' => 'PT'],\n            ['name' => 'Bad Essen', 'country_code' => 'DE'],\n            ['name' => 'Pereiro', 'country_code' => 'BR'],\n            ['name' => 'Castenaso', 'country_code' => 'IT'],\n            ['name' => 'Circleville', 'country_code' => 'US'],\n            ['name' => 'Hautmont', 'country_code' => 'FR'],\n            ['name' => 'Longmeadow', 'country_code' => 'US'],\n            ['name' => 'Ulladulla', 'country_code' => 'AU'],\n            ['name' => 'Plochingen', 'country_code' => 'DE'],\n            ['name' => 'Omegna', 'country_code' => 'IT'],\n            ['name' => 'Fullerton', 'country_code' => 'US'],\n            ['name' => 'Itajiba', 'country_code' => 'BR'],\n            ['name' => 'Bengonbeyene', 'country_code' => 'GQ'],\n            ['name' => 'Juma Shahri', 'country_code' => 'UZ'],\n            ['name' => 'Niederkruchten', 'country_code' => 'DE'],\n            ['name' => 'Totteridge', 'country_code' => 'GB'],\n            ['name' => 'Kalocsa', 'country_code' => 'HU'],\n            ['name' => 'Kempsey', 'country_code' => 'AU'],\n            ['name' => 'Kafr Nubl', 'country_code' => 'SY'],\n            ['name' => 'Sterling', 'country_code' => 'US'],\n            ['name' => 'Agua Clara', 'country_code' => 'BR'],\n            ['name' => 'Acajutiba', 'country_code' => 'BR'],\n            ['name' => 'Tiverton', 'country_code' => 'US'],\n            ['name' => 'Sakha', 'country_code' => 'EG'],\n            ['name' => 'White', 'country_code' => 'US'],\n            ['name' => 'Guasca', 'country_code' => 'CO'],\n            ['name' => 'Abadiania', 'country_code' => 'BR'],\n            ['name' => 'Fos-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Cassina de  Pecchi', 'country_code' => 'IT'],\n            ['name' => 'Molinella', 'country_code' => 'IT'],\n            ['name' => 'Saboeiro', 'country_code' => 'BR'],\n            ['name' => 'Punta Umbria', 'country_code' => 'ES'],\n            ['name' => 'Powder Springs', 'country_code' => 'US'],\n            ['name' => 'Ershui', 'country_code' => 'TW'],\n            ['name' => 'Flowing Wells', 'country_code' => 'US'],\n            ['name' => 'Jiaojiazhuang', 'country_code' => 'CN'],\n            ['name' => 'Wenwu', 'country_code' => 'CN'],\n            ['name' => 'Itamonte', 'country_code' => 'BR'],\n            ['name' => 'San Miguel', 'country_code' => 'PH'],\n            ['name' => 'Clark', 'country_code' => 'US'],\n            ['name' => 'Voss', 'country_code' => 'NO'],\n            ['name' => 'San Giorgio Ionico', 'country_code' => 'IT'],\n            ['name' => 'Purcellville', 'country_code' => 'US'],\n            ['name' => 'Nova Olinda', 'country_code' => 'BR'],\n            ['name' => 'Si Satchanalai', 'country_code' => 'TH'],\n            ['name' => 'La Paz', 'country_code' => 'PH'],\n            ['name' => 'Pornic', 'country_code' => 'FR'],\n            ['name' => 'Greenwood Village', 'country_code' => 'US'],\n            ['name' => 'Hanover', 'country_code' => 'CA'],\n            ['name' => 'Milford', 'country_code' => 'US'],\n            ['name' => 'Spittal an der Drau', 'country_code' => 'AT'],\n            ['name' => 'Finale Emilia', 'country_code' => 'IT'],\n            ['name' => 'Despujols', 'country_code' => 'PH'],\n            ['name' => 'Ulverstone', 'country_code' => 'AU'],\n            ['name' => 'Middle Smithfield', 'country_code' => 'US'],\n            ['name' => 'Riposto', 'country_code' => 'IT'],\n            ['name' => 'Terrace', 'country_code' => 'CA'],\n            ['name' => 'Sabinopolis', 'country_code' => 'BR'],\n            ['name' => 'Warren', 'country_code' => 'US'],\n            ['name' => 'Yasnogorsk', 'country_code' => 'RU'],\n            ['name' => 'Paola', 'country_code' => 'IT'],\n            ['name' => 'Tiran', 'country_code' => 'IR'],\n            ['name' => 'Farmingville', 'country_code' => 'US'],\n            ['name' => 'Andrews', 'country_code' => 'US'],\n            ['name' => 'Sumidouro', 'country_code' => 'BR'],\n            ['name' => 'Castelnuovo Rangone', 'country_code' => 'IT'],\n            ['name' => 'Kysucke Nove Mesto', 'country_code' => 'SK'],\n            ['name' => 'Tiszaujvaros', 'country_code' => 'HU'],\n            ['name' => 'Crepy-en-Valois', 'country_code' => 'FR'],\n            ['name' => 'Ostroh', 'country_code' => 'UA'],\n            ['name' => 'Newberry', 'country_code' => 'US'],\n            ['name' => 'Erlensee', 'country_code' => 'DE'],\n            ['name' => 'Parma', 'country_code' => 'US'],\n            ['name' => 'Zhirnovsk', 'country_code' => 'RU'],\n            ['name' => 'Varnsdorf', 'country_code' => 'CZ'],\n            ['name' => 'Blytheville', 'country_code' => 'US'],\n            ['name' => 'Ben Taieb', 'country_code' => 'MA'],\n            ['name' => 'Winkfield', 'country_code' => 'GB'],\n            ['name' => 'Einsiedeln', 'country_code' => 'CH'],\n            ['name' => 'Corbera de Llobregat', 'country_code' => 'ES'],\n            ['name' => 'Kuusamo', 'country_code' => 'FI'],\n            ['name' => 'Midar', 'country_code' => 'MA'],\n            ['name' => 'Shively', 'country_code' => 'US'],\n            ['name' => 'Bruhl', 'country_code' => 'DE'],\n            ['name' => 'Suffield', 'country_code' => 'US'],\n            ['name' => 'Drensteinfurt', 'country_code' => 'DE'],\n            ['name' => 'Featherstone', 'country_code' => 'GB'],\n            ['name' => 'Lagoa dos Gatos', 'country_code' => 'BR'],\n            ['name' => 'Mitchell', 'country_code' => 'US'],\n            ['name' => 'Opera', 'country_code' => 'IT'],\n            ['name' => 'Rakhiv', 'country_code' => 'UA'],\n            ['name' => 'Ipanguacu', 'country_code' => 'BR'],\n            ['name' => 'Kasagi', 'country_code' => 'JP'],\n            ['name' => 'Ac-cahrij', 'country_code' => 'MA'],\n            ['name' => 'Valeggio sul Mincio', 'country_code' => 'IT'],\n            ['name' => 'Casalmaggiore', 'country_code' => 'IT'],\n            ['name' => 'Schonefeld', 'country_code' => 'DE'],\n            ['name' => 'Szarvas', 'country_code' => 'HU'],\n            ['name' => 'West Norriton', 'country_code' => 'US'],\n            ['name' => 'Mortara', 'country_code' => 'IT'],\n            ['name' => 'Tobetsu', 'country_code' => 'JP'],\n            ['name' => 'Helensburgh', 'country_code' => 'GB'],\n            ['name' => 'Atacames', 'country_code' => 'EC'],\n            ['name' => 'Gaillac', 'country_code' => 'FR'],\n            ['name' => 'Graham', 'country_code' => 'US'],\n            ['name' => 'Rio do Antonio', 'country_code' => 'BR'],\n            ['name' => 'Bad Bentheim', 'country_code' => 'DE'],\n            ['name' => 'Lindas', 'country_code' => 'NO'],\n            ['name' => 'Dolo', 'country_code' => 'IT'],\n            ['name' => 'Ceska Trebova', 'country_code' => 'CZ'],\n            ['name' => 'Tanque Verde', 'country_code' => 'US'],\n            ['name' => 'Bolotnoye', 'country_code' => 'RU'],\n            ['name' => 'Serpa', 'country_code' => 'PT'],\n            ['name' => 'Baia-Sprie', 'country_code' => 'RO'],\n            ['name' => 'Alvinopolis', 'country_code' => 'BR'],\n            ['name' => 'Miguelturra', 'country_code' => 'ES'],\n            ['name' => 'Saint-Omer', 'country_code' => 'FR'],\n            ['name' => 'Elkton', 'country_code' => 'US'],\n            ['name' => 'Kinna', 'country_code' => 'SE'],\n            ['name' => 'Santa Ursula', 'country_code' => 'ES'],\n            ['name' => 'Shizukuishi', 'country_code' => 'JP'],\n            ['name' => 'Three Lakes', 'country_code' => 'US'],\n            ['name' => 'South Fayette', 'country_code' => 'US'],\n            ['name' => 'Mangqu', 'country_code' => 'CN'],\n            ['name' => 'Jedrzejow', 'country_code' => 'PL'],\n            ['name' => 'Loncoche', 'country_code' => 'CL'],\n            ['name' => 'Espumoso', 'country_code' => 'BR'],\n            ['name' => 'Bohodukhiv', 'country_code' => 'UA'],\n            ['name' => 'Corridonia', 'country_code' => 'IT'],\n            ['name' => 'Agios Athanasios', 'country_code' => 'CY'],\n            ['name' => 'Caudry', 'country_code' => 'FR'],\n            ['name' => 'At-Bashy', 'country_code' => 'KG'],\n            ['name' => 'Kuala Lipis', 'country_code' => 'MY'],\n            ['name' => 'Fate', 'country_code' => 'US'],\n            ['name' => 'Ipua', 'country_code' => 'BR'],\n            ['name' => 'Poco Branco', 'country_code' => 'BR'],\n            ['name' => 'Ban Na Kham', 'country_code' => 'TH'],\n            ['name' => 'Borborema', 'country_code' => 'BR'],\n            ['name' => 'Najasa', 'country_code' => 'CU'],\n            ['name' => 'Bunnik', 'country_code' => 'NL'],\n            ['name' => 'Soliera', 'country_code' => 'IT'],\n            ['name' => 'Mandal', 'country_code' => 'NO'],\n            ['name' => 'Kunzelsau', 'country_code' => 'DE'],\n            ['name' => 'Hille', 'country_code' => 'DE'],\n            ['name' => 'Riverdale', 'country_code' => 'US'],\n            ['name' => 'Fort Mohave', 'country_code' => 'US'],\n            ['name' => 'Ban Duea', 'country_code' => 'TH'],\n            ['name' => 'Alcantara', 'country_code' => 'PH'],\n            ['name' => 'Castellarano', 'country_code' => 'IT'],\n            ['name' => 'Bonito', 'country_code' => 'BR'],\n            ['name' => 'Chubbuck', 'country_code' => 'US'],\n            ['name' => 'Siemiatycze', 'country_code' => 'PL'],\n            ['name' => 'Dionisio Cerqueira', 'country_code' => 'BR'],\n            ['name' => 'Campos Altos', 'country_code' => 'BR'],\n            ['name' => 'Dastgerd', 'country_code' => 'IR'],\n            ['name' => 'Urziceni', 'country_code' => 'RO'],\n            ['name' => 'Weston', 'country_code' => 'GB'],\n            ['name' => 'North Reading', 'country_code' => 'US'],\n            ['name' => 'Newton', 'country_code' => 'US'],\n            ['name' => 'Banqiao', 'country_code' => 'CN'],\n            ['name' => 'La Grange', 'country_code' => 'US'],\n            ['name' => 'Antrim', 'country_code' => 'US'],\n            ['name' => 'Svetogorsk', 'country_code' => 'RU'],\n            ['name' => 'Hemsworth', 'country_code' => 'GB'],\n            ['name' => 'Burbage', 'country_code' => 'GB'],\n            ['name' => 'Privolzhsk', 'country_code' => 'RU'],\n            ['name' => 'Miami', 'country_code' => 'US'],\n            ['name' => 'Chiaravalle', 'country_code' => 'IT'],\n            ['name' => 'McMinnville', 'country_code' => 'US'],\n            ['name' => 'La Roda', 'country_code' => 'ES'],\n            ['name' => 'Potsdam', 'country_code' => 'US'],\n            ['name' => 'Khamir', 'country_code' => 'YE'],\n            ['name' => 'Parvomay', 'country_code' => 'BG'],\n            ['name' => 'Frei Miguelinho', 'country_code' => 'BR'],\n            ['name' => 'Longwood', 'country_code' => 'US'],\n            ['name' => 'Ipecaeta', 'country_code' => 'BR'],\n            ['name' => 'Baiceng', 'country_code' => 'CN'],\n            ['name' => 'Sayo', 'country_code' => 'JP'],\n            ['name' => 'Wawizaght', 'country_code' => 'MA'],\n            ['name' => 'Schriesheim', 'country_code' => 'DE'],\n            ['name' => 'Ludus', 'country_code' => 'RO'],\n            ['name' => 'Castiglione del Lago', 'country_code' => 'IT'],\n            ['name' => 'Stahnsdorf', 'country_code' => 'DE'],\n            ['name' => 'Rahden', 'country_code' => 'DE'],\n            ['name' => 'Kawasaki', 'country_code' => 'JP'],\n            ['name' => 'Overland', 'country_code' => 'US'],\n            ['name' => 'Dunn', 'country_code' => 'US'],\n            ['name' => 'Sovetsk', 'country_code' => 'RU'],\n            ['name' => 'Alvaraes', 'country_code' => 'BR'],\n            ['name' => 'Khao Yoi', 'country_code' => 'TH'],\n            ['name' => 'Houghton', 'country_code' => 'US'],\n            ['name' => 'Uusikaupunki', 'country_code' => 'FI'],\n            ['name' => 'Cambuci', 'country_code' => 'BR'],\n            ['name' => 'Ladson', 'country_code' => 'US'],\n            ['name' => 'Daigo', 'country_code' => 'JP'],\n            ['name' => 'Nova Timboteua', 'country_code' => 'BR'],\n            ['name' => 'Jurema', 'country_code' => 'BR'],\n            ['name' => 'La Solana', 'country_code' => 'ES'],\n            ['name' => 'Zelenogradsk', 'country_code' => 'RU'],\n            ['name' => 'Abaza', 'country_code' => 'RU'],\n            ['name' => 'Vieiro', 'country_code' => 'ES'],\n            ['name' => 'Fiorenzuola d Arda', 'country_code' => 'IT'],\n            ['name' => 'Itanhandu', 'country_code' => 'BR'],\n            ['name' => 'Boppard', 'country_code' => 'DE'],\n            ['name' => 'Limanowa', 'country_code' => 'PL'],\n            ['name' => 'Blackfoot', 'country_code' => 'US'],\n            ['name' => 'Ifrane', 'country_code' => 'MA'],\n            ['name' => 'Buford', 'country_code' => 'US'],\n            ['name' => 'Tasquillo', 'country_code' => 'MX'],\n            ['name' => 'Lake Geneva', 'country_code' => 'US'],\n            ['name' => 'Harrison', 'country_code' => 'US'],\n            ['name' => 'Ascheberg', 'country_code' => 'DE'],\n            ['name' => 'Simmerath', 'country_code' => 'DE'],\n            ['name' => 'La Grande', 'country_code' => 'US'],\n            ['name' => 'Genappe', 'country_code' => 'BE'],\n            ['name' => 'Balassagyarmat', 'country_code' => 'HU'],\n            ['name' => 'Senlis', 'country_code' => 'FR'],\n            ['name' => 'Barwon Heads', 'country_code' => 'AU'],\n            ['name' => 'Cruzilia', 'country_code' => 'BR'],\n            ['name' => 'Neustadt bei Coburg', 'country_code' => 'DE'],\n            ['name' => 'Panorama', 'country_code' => 'BR'],\n            ['name' => 'Passo de Camarajibe', 'country_code' => 'BR'],\n            ['name' => 'Chiva', 'country_code' => 'ES'],\n            ['name' => 'Narragansett', 'country_code' => 'US'],\n            ['name' => 'Broxbourne', 'country_code' => 'GB'],\n            ['name' => 'Dom Feliciano', 'country_code' => 'BR'],\n            ['name' => 'East Highland Park', 'country_code' => 'US'],\n            ['name' => 'Linguere', 'country_code' => 'SN'],\n            ['name' => 'Fontainebleau', 'country_code' => 'FR'],\n            ['name' => 'Piquet Carneiro', 'country_code' => 'BR'],\n            ['name' => 'Hilvarenbeek', 'country_code' => 'NL'],\n            ['name' => 'Ober-Ramstadt', 'country_code' => 'DE'],\n            ['name' => 'Castanet-Tolosan', 'country_code' => 'FR'],\n            ['name' => 'Australind', 'country_code' => 'AU'],\n            ['name' => 'Outreau', 'country_code' => 'FR'],\n            ['name' => 'Mirandiba', 'country_code' => 'BR'],\n            ['name' => 'Salinas da Margarida', 'country_code' => 'BR'],\n            ['name' => 'Pontivy', 'country_code' => 'FR'],\n            ['name' => 'Mainburg', 'country_code' => 'DE'],\n            ['name' => 'Glen Allen', 'country_code' => 'US'],\n            ['name' => 'Riegelsberg', 'country_code' => 'DE'],\n            ['name' => 'Ratekau', 'country_code' => 'DE'],\n            ['name' => 'Seven Oaks', 'country_code' => 'US'],\n            ['name' => 'Taphan Hin', 'country_code' => 'TH'],\n            ['name' => 'Santa', 'country_code' => 'PH'],\n            ['name' => 'Jelcz-Laskowice', 'country_code' => 'PL'],\n            ['name' => 'Groves', 'country_code' => 'US'],\n            ['name' => 'Pargas', 'country_code' => 'FI'],\n            ['name' => 'Flers', 'country_code' => 'FR'],\n            ['name' => 'Mastic', 'country_code' => 'US'],\n            ['name' => 'Galanta', 'country_code' => 'SK'],\n            ['name' => 'Hofgeismar', 'country_code' => 'DE'],\n            ['name' => 'Hermitage', 'country_code' => 'US'],\n            ['name' => 'Madagh', 'country_code' => 'MA'],\n            ['name' => 'Salitre', 'country_code' => 'BR'],\n            ['name' => 'Forks', 'country_code' => 'US'],\n            ['name' => 'Churumuco de Morelos', 'country_code' => 'MX'],\n            ['name' => 'Petersfield', 'country_code' => 'GB'],\n            ['name' => 'Sulat', 'country_code' => 'PH'],\n            ['name' => 'Hampton', 'country_code' => 'US'],\n            ['name' => 'Sale', 'country_code' => 'AU'],\n            ['name' => 'Torello', 'country_code' => 'ES'],\n            ['name' => 'Cloverly', 'country_code' => 'US'],\n            ['name' => 'Bouc-Bel-Air', 'country_code' => 'FR'],\n            ['name' => 'San Rafael Pie de la Cuesta', 'country_code' => 'GT'],\n            ['name' => 'Ezzhiliga', 'country_code' => 'MA'],\n            ['name' => 'Talladega', 'country_code' => 'US'],\n            ['name' => 'Anazzou', 'country_code' => 'MA'],\n            ['name' => 'Erjie', 'country_code' => 'CN'],\n            ['name' => 'Langenau', 'country_code' => 'DE'],\n            ['name' => 'Coremas', 'country_code' => 'BR'],\n            ['name' => 'Hartford', 'country_code' => 'US'],\n            ['name' => 'Felixlandia', 'country_code' => 'BR'],\n            ['name' => 'Holly Springs', 'country_code' => 'US'],\n            ['name' => 'Quezon', 'country_code' => 'PH'],\n            ['name' => 'Belvedere Park', 'country_code' => 'US'],\n            ['name' => 'Seekonk', 'country_code' => 'US'],\n            ['name' => 'Glucholazy', 'country_code' => 'PL'],\n            ['name' => 'Kerouane', 'country_code' => 'GN'],\n            ['name' => 'Hayden', 'country_code' => 'US'],\n            ['name' => 'Moul El Bergui', 'country_code' => 'MA'],\n            ['name' => 'Middleburg Heights', 'country_code' => 'US'],\n            ['name' => 'Ait Yazza', 'country_code' => 'MA'],\n            ['name' => 'Rellingen', 'country_code' => 'DE'],\n            ['name' => 'Mount Vernon', 'country_code' => 'US'],\n            ['name' => 'Konarka', 'country_code' => 'IN'],\n            ['name' => 'Klimavichy', 'country_code' => 'BY'],\n            ['name' => 'Hilltown', 'country_code' => 'US'],\n            ['name' => 'Huohua', 'country_code' => 'CN'],\n            ['name' => 'Grenzach-Wyhlen', 'country_code' => 'DE'],\n            ['name' => 'Kanegasaki', 'country_code' => 'JP'],\n            ['name' => 'Rubiera', 'country_code' => 'IT'],\n            ['name' => 'Jacaraci', 'country_code' => 'BR'],\n            ['name' => 'Edingen-Neckarhausen', 'country_code' => 'DE'],\n            ['name' => 'Landazuri', 'country_code' => 'CO'],\n            ['name' => 'Amatitan', 'country_code' => 'MX'],\n            ['name' => 'Daisen', 'country_code' => 'JP'],\n            ['name' => 'Villa del Rosario', 'country_code' => 'AR'],\n            ['name' => 'Conguaco', 'country_code' => 'GT'],\n            ['name' => 'Cumru', 'country_code' => 'US'],\n            ['name' => 'Entre Rios de Minas', 'country_code' => 'BR'],\n            ['name' => 'Barro Alto', 'country_code' => 'BR'],\n            ['name' => 'Mendrisio', 'country_code' => 'CH'],\n            ['name' => 'Nyunzu', 'country_code' => 'CD'],\n            ['name' => 'Bakun', 'country_code' => 'PH'],\n            ['name' => 'Pulaski', 'country_code' => 'US'],\n            ['name' => 'Mian Sahib', 'country_code' => 'PK'],\n            ['name' => 'Saint-Rambert', 'country_code' => 'FR'],\n            ['name' => 'Kusnacht', 'country_code' => 'CH'],\n            ['name' => 'Calolziocorte', 'country_code' => 'IT'],\n            ['name' => 'Tarascon', 'country_code' => 'FR'],\n            ['name' => 'Julita', 'country_code' => 'PH'],\n            ['name' => 'Waikanae', 'country_code' => 'NZ'],\n            ['name' => 'Odenthal', 'country_code' => 'DE'],\n            ['name' => 'Campina da Lagoa', 'country_code' => 'BR'],\n            ['name' => 'Grafelfing', 'country_code' => 'DE'],\n            ['name' => 'Northview', 'country_code' => 'US'],\n            ['name' => 'Hohenstein-Ernstthal', 'country_code' => 'DE'],\n            ['name' => 'South Middleton', 'country_code' => 'US'],\n            ['name' => 'Thoen', 'country_code' => 'TH'],\n            ['name' => 'Rochedale', 'country_code' => 'AU'],\n            ['name' => 'Ashtead', 'country_code' => 'GB'],\n            ['name' => 'Olonne-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Tendrara', 'country_code' => 'MA'],\n            ['name' => 'Moreau', 'country_code' => 'US'],\n            ['name' => 'Bom Jesus do Galho', 'country_code' => 'BR'],\n            ['name' => 'Feucht', 'country_code' => 'DE'],\n            ['name' => 'Fraga', 'country_code' => 'ES'],\n            ['name' => 'Itapagipe', 'country_code' => 'BR'],\n            ['name' => 'Agidel', 'country_code' => 'RU'],\n            ['name' => 'Fameck', 'country_code' => 'FR'],\n            ['name' => 'Santa Catalina', 'country_code' => 'PH'],\n            ['name' => 'Serra Preta', 'country_code' => 'BR'],\n            ['name' => 'Castro Daire', 'country_code' => 'PT'],\n            ['name' => 'Chaltyr', 'country_code' => 'RU'],\n            ['name' => 'Munster', 'country_code' => 'DE'],\n            ['name' => 'Bingawan', 'country_code' => 'PH'],\n            ['name' => 'Targuist', 'country_code' => 'MA'],\n            ['name' => 'Pedara', 'country_code' => 'IT'],\n            ['name' => 'Saloa', 'country_code' => 'BR'],\n            ['name' => 'Blaydon', 'country_code' => 'GB'],\n            ['name' => 'Silvino Lobos', 'country_code' => 'PH'],\n            ['name' => 'Bailleul', 'country_code' => 'FR'],\n            ['name' => 'Swallownest', 'country_code' => 'GB'],\n            ['name' => 'Lower Salford', 'country_code' => 'US'],\n            ['name' => 'Den Ham', 'country_code' => 'NL'],\n            ['name' => 'Wakuya', 'country_code' => 'JP'],\n            ['name' => 'Oulad Bou Rahmoun', 'country_code' => 'MA'],\n            ['name' => 'Krasnovishersk', 'country_code' => 'RU'],\n            ['name' => 'Huckeswagen', 'country_code' => 'DE'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Bar-le-Duc', 'country_code' => 'FR'],\n            ['name' => 'Brake', 'country_code' => 'DE'],\n            ['name' => 'Batuan', 'country_code' => 'PH'],\n            ['name' => 'Stony Point', 'country_code' => 'US'],\n            ['name' => 'Italva', 'country_code' => 'BR'],\n            ['name' => 'Horw', 'country_code' => 'CH'],\n            ['name' => 'Chilcuautla', 'country_code' => 'MX'],\n            ['name' => 'Lahoysk', 'country_code' => 'BY'],\n            ['name' => 'Poynton', 'country_code' => 'GB'],\n            ['name' => 'Eldorado', 'country_code' => 'BR'],\n            ['name' => 'Ambaguio', 'country_code' => 'PH'],\n            ['name' => 'Alta', 'country_code' => 'NO'],\n            ['name' => 'Liangwancun', 'country_code' => 'CN'],\n            ['name' => 'Springfield', 'country_code' => 'CA'],\n            ['name' => 'Nazare', 'country_code' => 'PT'],\n            ['name' => 'Chipurupalle', 'country_code' => 'IN'],\n            ['name' => 'Grosse Pointe Woods', 'country_code' => 'US'],\n            ['name' => 'Junin', 'country_code' => 'PE'],\n            ['name' => 'Loviisa', 'country_code' => 'FI'],\n            ['name' => 'Capitao Eneas', 'country_code' => 'BR'],\n            ['name' => 'Castellammare del Golfo', 'country_code' => 'IT'],\n            ['name' => 'Belokurikha', 'country_code' => 'RU'],\n            ['name' => 'Villa Paranacito', 'country_code' => 'AR'],\n            ['name' => 'Azpeitia', 'country_code' => 'ES'],\n            ['name' => 'Kabayan', 'country_code' => 'PH'],\n            ['name' => 'Libagon', 'country_code' => 'PH'],\n            ['name' => 'Triunfo', 'country_code' => 'BR'],\n            ['name' => 'Morlaix', 'country_code' => 'FR'],\n            ['name' => 'Zevio', 'country_code' => 'IT'],\n            ['name' => 'Hueytown', 'country_code' => 'US'],\n            ['name' => 'Penacova', 'country_code' => 'PT'],\n            ['name' => 'Ain Jemaa', 'country_code' => 'MA'],\n            ['name' => 'Kawaminami', 'country_code' => 'JP'],\n            ['name' => 'Port Pirie', 'country_code' => 'AU'],\n            ['name' => 'Aldine', 'country_code' => 'US'],\n            ['name' => 'Tazert', 'country_code' => 'MA'],\n            ['name' => 'Guastalla', 'country_code' => 'IT'],\n            ['name' => 'Chitila', 'country_code' => 'RO'],\n            ['name' => 'Bradley', 'country_code' => 'US'],\n            ['name' => 'Southchase', 'country_code' => 'US'],\n            ['name' => 'Poronaysk', 'country_code' => 'RU'],\n            ['name' => 'Ibipitanga', 'country_code' => 'BR'],\n            ['name' => 'Sannicandro Garganico', 'country_code' => 'IT'],\n            ['name' => 'Santa Luzia', 'country_code' => 'BR'],\n            ['name' => 'San Vito al Tagliamento', 'country_code' => 'IT'],\n            ['name' => 'Markgroningen', 'country_code' => 'DE'],\n            ['name' => 'Tapolca', 'country_code' => 'HU'],\n            ['name' => 'Pendencias', 'country_code' => 'BR'],\n            ['name' => 'Blomberg', 'country_code' => 'DE'],\n            ['name' => 'Tulle', 'country_code' => 'FR'],\n            ['name' => 'Pineto', 'country_code' => 'IT'],\n            ['name' => 'Wittenheim', 'country_code' => 'FR'],\n            ['name' => 'Sarvar', 'country_code' => 'HU'],\n            ['name' => 'Selb', 'country_code' => 'DE'],\n            ['name' => 'Mackworth', 'country_code' => 'GB'],\n            ['name' => 'Santa Maria a Vico', 'country_code' => 'IT'],\n            ['name' => 'Chellaston', 'country_code' => 'GB'],\n            ['name' => 'IJsselmuiden', 'country_code' => 'NL'],\n            ['name' => 'Wentorf bei Hamburg', 'country_code' => 'DE'],\n            ['name' => 'Ribeiro do Amparo', 'country_code' => 'BR'],\n            ['name' => 'Ribnitz-Damgarten', 'country_code' => 'DE'],\n            ['name' => 'Witzenhausen', 'country_code' => 'DE'],\n            ['name' => 'Mexborough', 'country_code' => 'GB'],\n            ['name' => 'Kerman', 'country_code' => 'US'],\n            ['name' => 'Grefrath', 'country_code' => 'DE'],\n            ['name' => 'Xihuangni', 'country_code' => 'CN'],\n            ['name' => 'Pestovo', 'country_code' => 'RU'],\n            ['name' => 'Citta Sant Angelo', 'country_code' => 'IT'],\n            ['name' => 'Tamesis', 'country_code' => 'CO'],\n            ['name' => 'Yinhua', 'country_code' => 'CN'],\n            ['name' => 'Mindelheim', 'country_code' => 'DE'],\n            ['name' => 'Hugo', 'country_code' => 'US'],\n            ['name' => 'Tankal', 'country_code' => 'PH'],\n            ['name' => 'Laterza', 'country_code' => 'IT'],\n            ['name' => 'Sao Joao do Triunfo', 'country_code' => 'BR'],\n            ['name' => 'Sabbah', 'country_code' => 'MA'],\n            ['name' => 'Fray Luis A. Beltran', 'country_code' => 'AR'],\n            ['name' => 'Sao Lourenco da Serra', 'country_code' => 'BR'],\n            ['name' => 'Paralimni', 'country_code' => 'CY'],\n            ['name' => 'Boksitogorsk', 'country_code' => 'RU'],\n            ['name' => 'Humayingcun', 'country_code' => 'CN'],\n            ['name' => 'Jayaque', 'country_code' => 'SV'],\n            ['name' => 'Buttelborn', 'country_code' => 'DE'],\n            ['name' => 'Kingersheim', 'country_code' => 'FR'],\n            ['name' => 'Damascus', 'country_code' => 'US'],\n            ['name' => 'Bilopillya', 'country_code' => 'UA'],\n            ['name' => 'Gross-Zimmern', 'country_code' => 'DE'],\n            ['name' => 'Meru', 'country_code' => 'FR'],\n            ['name' => 'Guiratinga', 'country_code' => 'BR'],\n            ['name' => 'Beckingen', 'country_code' => 'DE'],\n            ['name' => 'Brejoes', 'country_code' => 'BR'],\n            ['name' => 'Campodarsego', 'country_code' => 'IT'],\n            ['name' => 'Sao Felix', 'country_code' => 'BR'],\n            ['name' => 'Motiong', 'country_code' => 'PH'],\n            ['name' => 'Uchiko', 'country_code' => 'JP'],\n            ['name' => 'Berlare', 'country_code' => 'BE'],\n            ['name' => 'Primavera', 'country_code' => 'BR'],\n            ['name' => 'Nampicuan', 'country_code' => 'PH'],\n            ['name' => 'Salyan', 'country_code' => 'NP'],\n            ['name' => 'La Carolina', 'country_code' => 'ES'],\n            ['name' => 'Areado', 'country_code' => 'BR'],\n            ['name' => 'Vergara', 'country_code' => 'ES'],\n            ['name' => 'San Carlos de la Rapita', 'country_code' => 'ES'],\n            ['name' => 'Teolandia', 'country_code' => 'BR'],\n            ['name' => 'Andoain', 'country_code' => 'ES'],\n            ['name' => 'Santa Adelia', 'country_code' => 'BR'],\n            ['name' => 'Curiuva', 'country_code' => 'BR'],\n            ['name' => 'Nakanojomachi', 'country_code' => 'JP'],\n            ['name' => 'Masty', 'country_code' => 'BY'],\n            ['name' => 'Bitburg', 'country_code' => 'DE'],\n            ['name' => 'Skalica', 'country_code' => 'SK'],\n            ['name' => 'Tupi Paulista', 'country_code' => 'BR'],\n            ['name' => 'San Antonio La Paz', 'country_code' => 'GT'],\n            ['name' => 'Tartarugalzinho', 'country_code' => 'BR'],\n            ['name' => 'Tokoroa', 'country_code' => 'NZ'],\n            ['name' => 'Mineral Wells', 'country_code' => 'US'],\n            ['name' => 'Monte Alegre de Sergipe', 'country_code' => 'BR'],\n            ['name' => 'Penrith', 'country_code' => 'GB'],\n            ['name' => 'Neutraubling', 'country_code' => 'DE'],\n            ['name' => 'Majiagoucha', 'country_code' => 'CN'],\n            ['name' => 'Gehrden', 'country_code' => 'DE'],\n            ['name' => 'Samobor', 'country_code' => 'HR'],\n            ['name' => 'Itajobi', 'country_code' => 'BR'],\n            ['name' => 'Huasca de Ocampo', 'country_code' => 'MX'],\n            ['name' => 'Choszczno', 'country_code' => 'PL'],\n            ['name' => 'Laxou', 'country_code' => 'FR'],\n            ['name' => 'Bay Village', 'country_code' => 'US'],\n            ['name' => 'Huchuan', 'country_code' => 'CN'],\n            ['name' => 'Tazarine', 'country_code' => 'MA'],\n            ['name' => 'Candelaria', 'country_code' => 'PR'],\n            ['name' => 'Pequannock', 'country_code' => 'US'],\n            ['name' => 'Arnedo', 'country_code' => 'ES'],\n            ['name' => 'San Juan', 'country_code' => 'PH'],\n            ['name' => 'Gardabani', 'country_code' => 'GE'],\n            ['name' => 'Richterswil', 'country_code' => 'CH'],\n            ['name' => 'Niedernhausen', 'country_code' => 'DE'],\n            ['name' => 'Moura', 'country_code' => 'PT'],\n            ['name' => 'Kutchan', 'country_code' => 'JP'],\n            ['name' => 'Garrel', 'country_code' => 'DE'],\n            ['name' => 'San Pedro Tapanatepec', 'country_code' => 'MX'],\n            ['name' => 'Oroco', 'country_code' => 'BR'],\n            ['name' => 'Ilha de Mocambique', 'country_code' => 'MZ'],\n            ['name' => 'Guipavas', 'country_code' => 'FR'],\n            ['name' => 'Mata Roma', 'country_code' => 'BR'],\n            ['name' => 'Landsberg', 'country_code' => 'DE'],\n            ['name' => 'North Hykeham', 'country_code' => 'GB'],\n            ['name' => 'Meilen', 'country_code' => 'CH'],\n            ['name' => 'Sullivan', 'country_code' => 'US'],\n            ['name' => 'Elk Plain', 'country_code' => 'US'],\n            ['name' => 'Weston', 'country_code' => 'US'],\n            ['name' => 'Cadereyta', 'country_code' => 'MX'],\n            ['name' => 'Sommacampagna', 'country_code' => 'IT'],\n            ['name' => 'Hereford', 'country_code' => 'US'],\n            ['name' => 'Barra de Santa Rosa', 'country_code' => 'BR'],\n            ['name' => 'Gaspe', 'country_code' => 'CA'],\n            ['name' => 'Galion', 'country_code' => 'US'],\n            ['name' => 'Cossato', 'country_code' => 'IT'],\n            ['name' => 'College Park', 'country_code' => 'US'],\n            ['name' => 'El Arenal', 'country_code' => 'MX'],\n            ['name' => 'Dentsville', 'country_code' => 'US'],\n            ['name' => 'Grovetown', 'country_code' => 'US'],\n            ['name' => 'Amlash', 'country_code' => 'IR'],\n            ['name' => 'Rosarno', 'country_code' => 'IT'],\n            ['name' => 'Ciro Marina', 'country_code' => 'IT'],\n            ['name' => 'Pleasanton', 'country_code' => 'US'],\n            ['name' => 'Driouch', 'country_code' => 'MA'],\n            ['name' => 'Nopala de Villagran', 'country_code' => 'MX'],\n            ['name' => 'Great Bend', 'country_code' => 'US'],\n            ['name' => 'Provadia', 'country_code' => 'BG'],\n            ['name' => 'Luino', 'country_code' => 'IT'],\n            ['name' => 'Bela Vista do Paraiso', 'country_code' => 'BR'],\n            ['name' => 'Gualdo Tadino', 'country_code' => 'IT'],\n            ['name' => 'Gantt', 'country_code' => 'US'],\n            ['name' => 'Ratzeburg', 'country_code' => 'DE'],\n            ['name' => 'Oued Jdida', 'country_code' => 'MA'],\n            ['name' => 'Ritterhude', 'country_code' => 'DE'],\n            ['name' => 'Ramechhap', 'country_code' => 'NP'],\n            ['name' => 'Trepuzzi', 'country_code' => 'IT'],\n            ['name' => 'Canutama', 'country_code' => 'BR'],\n            ['name' => 'Porteiras', 'country_code' => 'BR'],\n            ['name' => 'Burshtyn', 'country_code' => 'UA'],\n            ['name' => 'Teignmouth', 'country_code' => 'GB'],\n            ['name' => 'Bhimphedi', 'country_code' => 'NP'],\n            ['name' => 'Rossville', 'country_code' => 'US'],\n            ['name' => 'San Miguel', 'country_code' => 'PH'],\n            ['name' => 'Fortuna', 'country_code' => 'BR'],\n            ['name' => 'Santa Brigida', 'country_code' => 'BR'],\n            ['name' => 'Ban Bang Muang', 'country_code' => 'TH'],\n            ['name' => 'Rasnov', 'country_code' => 'RO'],\n            ['name' => 'Kulunda', 'country_code' => 'RU'],\n            ['name' => 'Sultandagi', 'country_code' => 'TR'],\n            ['name' => 'Plainfield', 'country_code' => 'US'],\n            ['name' => 'Teixeira', 'country_code' => 'BR'],\n            ['name' => 'La Fleche', 'country_code' => 'FR'],\n            ['name' => 'Graca', 'country_code' => 'BR'],\n            ['name' => 'Pont-a-Mousson', 'country_code' => 'FR'],\n            ['name' => 'Tulchyn', 'country_code' => 'UA'],\n            ['name' => 'Kochkor-Ata', 'country_code' => 'KG'],\n            ['name' => 'Bennington', 'country_code' => 'US'],\n            ['name' => 'Burbach', 'country_code' => 'DE'],\n            ['name' => 'Jiquirica', 'country_code' => 'BR'],\n            ['name' => 'Kenora', 'country_code' => 'CA'],\n            ['name' => 'Rosa', 'country_code' => 'IT'],\n            ['name' => 'Englewood', 'country_code' => 'US'],\n            ['name' => 'Kok-Janggak', 'country_code' => 'KG'],\n            ['name' => 'Qantir', 'country_code' => 'EG'],\n            ['name' => 'Hilchenbach', 'country_code' => 'DE'],\n            ['name' => 'Mering', 'country_code' => 'DE'],\n            ['name' => 'Meco', 'country_code' => 'ES'],\n            ['name' => 'Punata', 'country_code' => 'BO'],\n            ['name' => 'Skipton', 'country_code' => 'GB'],\n            ['name' => 'Vil nyans k', 'country_code' => 'UA'],\n            ['name' => 'Thouars', 'country_code' => 'FR'],\n            ['name' => 'Jamestown', 'country_code' => 'US'],\n            ['name' => 'Horta', 'country_code' => 'PT'],\n            ['name' => 'Exeter', 'country_code' => 'US'],\n            ['name' => 'Cowdenbeath', 'country_code' => 'GB'],\n            ['name' => 'Leninsk', 'country_code' => 'RU'],\n            ['name' => 'West Richland', 'country_code' => 'US'],\n            ['name' => 'Alexandreia', 'country_code' => 'GR'],\n            ['name' => 'Viseu de Sus', 'country_code' => 'RO'],\n            ['name' => 'Salkhad', 'country_code' => 'SY'],\n            ['name' => 'Chepica', 'country_code' => 'CL'],\n            ['name' => 'Ylivieska', 'country_code' => 'FI'],\n            ['name' => 'Park City', 'country_code' => 'US'],\n            ['name' => 'Oldsmar', 'country_code' => 'US'],\n            ['name' => 'Spitak', 'country_code' => 'AM'],\n            ['name' => 'Lohfelden', 'country_code' => 'DE'],\n            ['name' => 'Washington Court House', 'country_code' => 'US'],\n            ['name' => 'Sasso Marconi', 'country_code' => 'IT'],\n            ['name' => 'Northborough', 'country_code' => 'US'],\n            ['name' => 'Coto de Caza', 'country_code' => 'US'],\n            ['name' => 'Whitman', 'country_code' => 'US'],\n            ['name' => 'Clifton', 'country_code' => 'GB'],\n            ['name' => 'Mizil', 'country_code' => 'RO'],\n            ['name' => 'Canteleu', 'country_code' => 'FR'],\n            ['name' => 'Obando', 'country_code' => 'CO'],\n            ['name' => 'Tamarana', 'country_code' => 'BR'],\n            ['name' => 'Pontinia', 'country_code' => 'IT'],\n            ['name' => 'Sorso', 'country_code' => 'IT'],\n            ['name' => 'Carmignano', 'country_code' => 'IT'],\n            ['name' => 'Esbiaat', 'country_code' => 'MA'],\n            ['name' => 'Zapolyarnyy', 'country_code' => 'RU'],\n            ['name' => 'Breukelen', 'country_code' => 'NL'],\n            ['name' => 'Morwell', 'country_code' => 'AU'],\n            ['name' => 'Uhingen', 'country_code' => 'DE'],\n            ['name' => 'Tierra Blanca', 'country_code' => 'MX'],\n            ['name' => 'Berkovitsa', 'country_code' => 'BG'],\n            ['name' => 'Bludenz', 'country_code' => 'AT'],\n            ['name' => 'Turnov', 'country_code' => 'CZ'],\n            ['name' => 'Douar Souk L qolla', 'country_code' => 'MA'],\n            ['name' => 'Neu-Anspach', 'country_code' => 'DE'],\n            ['name' => 'Upper Southampton', 'country_code' => 'US'],\n            ['name' => 'Qiaoyang', 'country_code' => 'CN'],\n            ['name' => 'Bad Bramstedt', 'country_code' => 'DE'],\n            ['name' => 'Bonanza', 'country_code' => 'NI'],\n            ['name' => 'Massalubrense', 'country_code' => 'IT'],\n            ['name' => 'San Juan', 'country_code' => 'PH'],\n            ['name' => 'Depew', 'country_code' => 'US'],\n            ['name' => 'Susanville', 'country_code' => 'US'],\n            ['name' => 'Chaguarama', 'country_code' => 'VE'],\n            ['name' => 'Mariestad', 'country_code' => 'SE'],\n            ['name' => 'Aghbal', 'country_code' => 'MA'],\n            ['name' => 'Belchertown', 'country_code' => 'US'],\n            ['name' => 'Mittweida', 'country_code' => 'DE'],\n            ['name' => 'Swampscott', 'country_code' => 'US'],\n            ['name' => 'Iharana', 'country_code' => 'MG'],\n            ['name' => 'Vandalia', 'country_code' => 'US'],\n            ['name' => 'Auriflama', 'country_code' => 'BR'],\n            ['name' => 'Botelhos', 'country_code' => 'BR'],\n            ['name' => 'Carmo de Minas', 'country_code' => 'BR'],\n            ['name' => 'Tabant', 'country_code' => 'MA'],\n            ['name' => 'Willow Grove', 'country_code' => 'US'],\n            ['name' => 'Shlisselburg', 'country_code' => 'RU'],\n            ['name' => 'Jardim de Piranhas', 'country_code' => 'BR'],\n            ['name' => 'Brasil Novo', 'country_code' => 'BR'],\n            ['name' => 'Ipora', 'country_code' => 'BR'],\n            ['name' => 'Drahichyn', 'country_code' => 'BY'],\n            ['name' => 'Araceli', 'country_code' => 'PH'],\n            ['name' => 'Coribe', 'country_code' => 'BR'],\n            ['name' => 'Czluchow', 'country_code' => 'PL'],\n            ['name' => 'Malo', 'country_code' => 'IT'],\n            ['name' => 'Jinta', 'country_code' => 'CN'],\n            ['name' => 'Reboucas', 'country_code' => 'BR'],\n            ['name' => 'Verdal', 'country_code' => 'NO'],\n            ['name' => 'Andresy', 'country_code' => 'FR'],\n            ['name' => 'Detva', 'country_code' => 'SK'],\n            ['name' => 'Tsumeb', 'country_code' => 'NA'],\n            ['name' => 'Pudtol', 'country_code' => 'PH'],\n            ['name' => 'Serhetabat', 'country_code' => 'TM'],\n            ['name' => 'Gourrama', 'country_code' => 'MA'],\n            ['name' => 'Cold Lake', 'country_code' => 'CA'],\n            ['name' => 'Saint-Fargeau', 'country_code' => 'FR'],\n            ['name' => 'Sarmin', 'country_code' => 'SY'],\n            ['name' => 'Woippy', 'country_code' => 'FR'],\n            ['name' => 'Novi Pazar', 'country_code' => 'BG'],\n            ['name' => 'Quinapundan', 'country_code' => 'PH'],\n            ['name' => 'Bni Darkoul', 'country_code' => 'MA'],\n            ['name' => 'Cuarte de Huerva', 'country_code' => 'ES'],\n            ['name' => 'Avrille', 'country_code' => 'FR'],\n            ['name' => 'Fort Carson', 'country_code' => 'US'],\n            ['name' => 'Tall Abyad', 'country_code' => 'SY'],\n            ['name' => 'Pallasovka', 'country_code' => 'RU'],\n            ['name' => 'Saint-Jean-de-Luz', 'country_code' => 'FR'],\n            ['name' => 'Nobres', 'country_code' => 'BR'],\n            ['name' => 'Mantua', 'country_code' => 'US'],\n            ['name' => 'Beech Grove', 'country_code' => 'US'],\n            ['name' => 'Hewitt', 'country_code' => 'US'],\n            ['name' => 'Nastola', 'country_code' => 'FI'],\n            ['name' => 'Thompson', 'country_code' => 'US'],\n            ['name' => 'Levoca', 'country_code' => 'SK'],\n            ['name' => 'Magione', 'country_code' => 'IT'],\n            ['name' => 'Cassano delle Murge', 'country_code' => 'IT'],\n            ['name' => 'Cunit', 'country_code' => 'ES'],\n            ['name' => 'Tehachapi', 'country_code' => 'US'],\n            ['name' => 'Buhusi', 'country_code' => 'RO'],\n            ['name' => 'Meerane', 'country_code' => 'DE'],\n            ['name' => 'Cabanas', 'country_code' => 'GT'],\n            ['name' => 'Nyzhnia Krynka', 'country_code' => 'UA'],\n            ['name' => 'Sisian', 'country_code' => 'AM'],\n            ['name' => 'Nerchinsk', 'country_code' => 'RU'],\n            ['name' => 'Pugachev', 'country_code' => 'RU'],\n            ['name' => 'Gryazovets', 'country_code' => 'RU'],\n            ['name' => 'Sukhinichi', 'country_code' => 'RU'],\n            ['name' => 'Pedro Velho', 'country_code' => 'BR'],\n            ['name' => 'Vinci', 'country_code' => 'IT'],\n            ['name' => 'Impruneta', 'country_code' => 'IT'],\n            ['name' => 'Radomir', 'country_code' => 'BG'],\n            ['name' => 'Busto Garolfo', 'country_code' => 'IT'],\n            ['name' => 'Astoria', 'country_code' => 'US'],\n            ['name' => 'Shuichecun', 'country_code' => 'CN'],\n            ['name' => 'Fritzlar', 'country_code' => 'DE'],\n            ['name' => 'Lons', 'country_code' => 'FR'],\n            ['name' => 'Candeias', 'country_code' => 'BR'],\n            ['name' => 'Alamo', 'country_code' => 'US'],\n            ['name' => 'Paiania', 'country_code' => 'GR'],\n            ['name' => 'Santa Croce sull  Arno', 'country_code' => 'IT'],\n            ['name' => 'Gidole', 'country_code' => 'ET'],\n            ['name' => 'Kondrovo', 'country_code' => 'RU'],\n            ['name' => 'Kizel', 'country_code' => 'RU'],\n            ['name' => 'Zmiiv', 'country_code' => 'UA'],\n            ['name' => 'Gondomar', 'country_code' => 'ES'],\n            ['name' => 'Podebrady', 'country_code' => 'CZ'],\n            ['name' => 'Jisr ez Zarqa', 'country_code' => 'IL'],\n            ['name' => 'Mascote', 'country_code' => 'BR'],\n            ['name' => 'Taft', 'country_code' => 'US'],\n            ['name' => 'Amersham', 'country_code' => 'GB'],\n            ['name' => 'Ferndale', 'country_code' => 'US'],\n            ['name' => 'Victoria', 'country_code' => 'PH'],\n            ['name' => 'Namanga', 'country_code' => 'KE'],\n            ['name' => 'Livingston', 'country_code' => 'US'],\n            ['name' => 'Whitewater', 'country_code' => 'US'],\n            ['name' => 'Clarksdale', 'country_code' => 'US'],\n            ['name' => 'Romilly-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'West Lealman', 'country_code' => 'US'],\n            ['name' => 'Mondolfo', 'country_code' => 'IT'],\n            ['name' => 'Vrbovec', 'country_code' => 'HR'],\n            ['name' => 'Arona', 'country_code' => 'IT'],\n            ['name' => 'Warragul', 'country_code' => 'AU'],\n            ['name' => 'Franklin Park', 'country_code' => 'US'],\n            ['name' => 'Ramsey', 'country_code' => 'US'],\n            ['name' => 'Palmital', 'country_code' => 'BR'],\n            ['name' => 'Collecchio', 'country_code' => 'IT'],\n            ['name' => 'New Freedom', 'country_code' => 'US'],\n            ['name' => 'Alpine', 'country_code' => 'US'],\n            ['name' => 'Victor', 'country_code' => 'US'],\n            ['name' => 'San Policarpo', 'country_code' => 'PH'],\n            ['name' => 'Gafanha da Nazare', 'country_code' => 'PT'],\n            ['name' => 'Chateau-d Olonne', 'country_code' => 'FR'],\n            ['name' => 'Phra Samut Chedi', 'country_code' => 'TH'],\n            ['name' => 'Great Falls', 'country_code' => 'US'],\n            ['name' => 'Yankton', 'country_code' => 'US'],\n            ['name' => 'Nzalat Laadam', 'country_code' => 'MA'],\n            ['name' => 'London', 'country_code' => 'US'],\n            ['name' => 'Fujisaki', 'country_code' => 'JP'],\n            ['name' => 'Oftringen', 'country_code' => 'CH'],\n            ['name' => 'Rotenburg an der Fulda', 'country_code' => 'DE'],\n            ['name' => 'Audincourt', 'country_code' => 'FR'],\n            ['name' => 'Markt Schwaben', 'country_code' => 'DE'],\n            ['name' => 'Ternitz', 'country_code' => 'AT'],\n            ['name' => 'Chegdomyn', 'country_code' => 'RU'],\n            ['name' => 'Pattensen', 'country_code' => 'DE'],\n            ['name' => 'Nioro', 'country_code' => 'ML'],\n            ['name' => 'Salem Lakes', 'country_code' => 'US'],\n            ['name' => 'Bayeux', 'country_code' => 'FR'],\n            ['name' => 'Petrolandia', 'country_code' => 'BR'],\n            ['name' => 'Brooklyn Park', 'country_code' => 'US'],\n            ['name' => 'Saint-Brevin-les-Pins', 'country_code' => 'FR'],\n            ['name' => 'Navashino', 'country_code' => 'RU'],\n            ['name' => 'Hampton Bays', 'country_code' => 'US'],\n            ['name' => 'Mions', 'country_code' => 'FR'],\n            ['name' => 'Spenge', 'country_code' => 'DE'],\n            ['name' => 'Grodzisk Wielkopolski', 'country_code' => 'PL'],\n            ['name' => 'Kontiolahti', 'country_code' => 'FI'],\n            ['name' => 'Betsukai', 'country_code' => 'JP'],\n            ['name' => 'Huasuo', 'country_code' => 'CN'],\n            ['name' => 'Ighrem n Ougdal', 'country_code' => 'MA'],\n            ['name' => 'Jackson', 'country_code' => 'US'],\n            ['name' => 'Sai Buri', 'country_code' => 'TH'],\n            ['name' => 'Uryzhar', 'country_code' => 'KZ'],\n            ['name' => 'Nevel', 'country_code' => 'RU'],\n            ['name' => 'Summerside', 'country_code' => 'CA'],\n            ['name' => 'Lobau', 'country_code' => 'DE'],\n            ['name' => 'Comox', 'country_code' => 'CA'],\n            ['name' => 'Bom Lugar', 'country_code' => 'BR'],\n            ['name' => 'Karabanovo', 'country_code' => 'RU'],\n            ['name' => 'Fortim', 'country_code' => 'BR'],\n            ['name' => 'Wombourn', 'country_code' => 'GB'],\n            ['name' => 'Montelupo Fiorentino', 'country_code' => 'IT'],\n            ['name' => 'Amay', 'country_code' => 'BE'],\n            ['name' => 'Maglie', 'country_code' => 'IT'],\n            ['name' => 'El Paisnal', 'country_code' => 'SV'],\n            ['name' => 'Cehegin', 'country_code' => 'ES'],\n            ['name' => 'Katyr-Yurt', 'country_code' => 'RU'],\n            ['name' => 'Nova Trento', 'country_code' => 'BR'],\n            ['name' => 'Yazoo City', 'country_code' => 'US'],\n            ['name' => 'Mount Washington', 'country_code' => 'US'],\n            ['name' => 'Upanema', 'country_code' => 'BR'],\n            ['name' => 'Sylvan Lake', 'country_code' => 'CA'],\n            ['name' => 'Jacksonville', 'country_code' => 'US'],\n            ['name' => 'California', 'country_code' => 'US'],\n            ['name' => 'Vennesla', 'country_code' => 'NO'],\n            ['name' => 'Orbetello', 'country_code' => 'IT'],\n            ['name' => 'Anao-aon', 'country_code' => 'PH'],\n            ['name' => 'Guilford', 'country_code' => 'US'],\n            ['name' => 'Ivanic-Grad', 'country_code' => 'HR'],\n            ['name' => 'Bissendorf', 'country_code' => 'DE'],\n            ['name' => 'Grimes', 'country_code' => 'US'],\n            ['name' => 'Andorinha', 'country_code' => 'BR'],\n            ['name' => 'Tabuse', 'country_code' => 'JP'],\n            ['name' => 'Buritirama', 'country_code' => 'BR'],\n            ['name' => 'Presidente Dutra', 'country_code' => 'BR'],\n            ['name' => 'Bangui', 'country_code' => 'PH'],\n            ['name' => 'Huizucar', 'country_code' => 'SV'],\n            ['name' => 'Tepetzintla', 'country_code' => 'MX'],\n            ['name' => 'Bellair-Meadowbrook Terrace', 'country_code' => 'US'],\n            ['name' => 'Obanazawa', 'country_code' => 'JP'],\n            ['name' => 'Lamont', 'country_code' => 'US'],\n            ['name' => 'Castel San Giorgio', 'country_code' => 'IT'],\n            ['name' => 'Lebanon', 'country_code' => 'US'],\n            ['name' => 'Dorfen', 'country_code' => 'DE'],\n            ['name' => 'Roncade', 'country_code' => 'IT'],\n            ['name' => 'Lalibela', 'country_code' => 'ET'],\n            ['name' => 'Morpeth', 'country_code' => 'GB'],\n            ['name' => 'Ait Yaich', 'country_code' => 'DZ'],\n            ['name' => 'Ekenas', 'country_code' => 'FI'],\n            ['name' => 'Rixheim', 'country_code' => 'FR'],\n            ['name' => 'Villa San Giovanni', 'country_code' => 'IT'],\n            ['name' => 'Correia Pinto', 'country_code' => 'BR'],\n            ['name' => 'Shimubi', 'country_code' => 'CN'],\n            ['name' => 'Cidelandia', 'country_code' => 'BR'],\n            ['name' => 'Lauchhammer', 'country_code' => 'DE'],\n            ['name' => 'Saint Joseph', 'country_code' => 'TT'],\n            ['name' => 'Sidmant al Jabal', 'country_code' => 'EG'],\n            ['name' => 'Tubaran', 'country_code' => 'PH'],\n            ['name' => 'Bhalil', 'country_code' => 'MA'],\n            ['name' => 'Amberieu-en-Bugey', 'country_code' => 'FR'],\n            ['name' => 'Novi Iskar', 'country_code' => 'BG'],\n            ['name' => 'Piano di Sorrento', 'country_code' => 'IT'],\n            ['name' => 'Maydolong', 'country_code' => 'PH'],\n            ['name' => 'Rokycany', 'country_code' => 'CZ'],\n            ['name' => 'Hot Springs Village', 'country_code' => 'US'],\n            ['name' => 'St. Simons', 'country_code' => 'US'],\n            ['name' => 'Berettyoujfalu', 'country_code' => 'HU'],\n            ['name' => 'Campbellsville', 'country_code' => 'US'],\n            ['name' => 'Muri', 'country_code' => 'CH'],\n            ['name' => 'Kushimoto', 'country_code' => 'JP'],\n            ['name' => 'Xexeu', 'country_code' => 'BR'],\n            ['name' => 'Nishinoomote', 'country_code' => 'JP'],\n            ['name' => 'Usingen', 'country_code' => 'DE'],\n            ['name' => 'Malsch', 'country_code' => 'DE'],\n            ['name' => 'Broome', 'country_code' => 'AU'],\n            ['name' => 'Roquebrune-sur-Argens', 'country_code' => 'FR'],\n            ['name' => 'Tsivilsk', 'country_code' => 'RU'],\n            ['name' => 'Ledyard', 'country_code' => 'US'],\n            ['name' => 'Danilov', 'country_code' => 'RU'],\n            ['name' => 'Maqat', 'country_code' => 'KZ'],\n            ['name' => 'Vargem da Roca', 'country_code' => 'BR'],\n            ['name' => 'Monteroni di Lecce', 'country_code' => 'IT'],\n            ['name' => 'San Ramon', 'country_code' => 'PE'],\n            ['name' => 'Cicekdagi', 'country_code' => 'TR'],\n            ['name' => 'Bedford', 'country_code' => 'US'],\n            ['name' => 'Oulad Driss', 'country_code' => 'MA'],\n            ['name' => 'Trinitapoli', 'country_code' => 'IT'],\n            ['name' => 'Nocatee', 'country_code' => 'US'],\n            ['name' => 'Tonawanda', 'country_code' => 'US'],\n            ['name' => 'Soledade', 'country_code' => 'BR'],\n            ['name' => 'Lope de Vega', 'country_code' => 'PH'],\n            ['name' => 'Bang Racham', 'country_code' => 'TH'],\n            ['name' => 'Cambridge', 'country_code' => 'US'],\n            ['name' => 'Angical', 'country_code' => 'BR'],\n            ['name' => 'Bad Wurzach', 'country_code' => 'DE'],\n            ['name' => 'Governador Celso Ramos', 'country_code' => 'BR'],\n            ['name' => 'Pilisvorosvar', 'country_code' => 'HU'],\n            ['name' => 'Wymondham', 'country_code' => 'GB'],\n            ['name' => 'Arzgir', 'country_code' => 'RU'],\n            ['name' => 'Xincun', 'country_code' => 'CN'],\n            ['name' => 'Kinogitan', 'country_code' => 'PH'],\n            ['name' => 'Ashiya', 'country_code' => 'JP'],\n            ['name' => 'Holliston', 'country_code' => 'US'],\n            ['name' => 'Montataire', 'country_code' => 'FR'],\n            ['name' => 'Wschowa', 'country_code' => 'PL'],\n            ['name' => 'Great Baddow', 'country_code' => 'GB'],\n            ['name' => 'Berck-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Calera', 'country_code' => 'US'],\n            ['name' => 'Ochakiv', 'country_code' => 'UA'],\n            ['name' => 'Budakeszi', 'country_code' => 'HU'],\n            ['name' => 'Travagliato', 'country_code' => 'IT'],\n            ['name' => 'Sanjiang Nongchang', 'country_code' => 'CN'],\n            ['name' => 'Massaranduba', 'country_code' => 'BR'],\n            ['name' => 'Tolland', 'country_code' => 'US'],\n            ['name' => 'Stein bei Nurnberg', 'country_code' => 'DE'],\n            ['name' => 'Patnanungan', 'country_code' => 'PH'],\n            ['name' => 'Askim', 'country_code' => 'NO'],\n            ['name' => 'Raamsdonk', 'country_code' => 'NL'],\n            ['name' => 'Port Augusta', 'country_code' => 'AU'],\n            ['name' => 'Carmen de Areco', 'country_code' => 'AR'],\n            ['name' => 'Rehlingen-Siersburg', 'country_code' => 'DE'],\n            ['name' => 'Lubbeek', 'country_code' => 'BE'],\n            ['name' => 'Youngsville', 'country_code' => 'US'],\n            ['name' => 'Tayum', 'country_code' => 'PH'],\n            ['name' => 'Candiba', 'country_code' => 'BR'],\n            ['name' => 'Royse City', 'country_code' => 'US'],\n            ['name' => 'Brazopolis', 'country_code' => 'BR'],\n            ['name' => 'Ardestan', 'country_code' => 'IR'],\n            ['name' => 'Farnborough', 'country_code' => 'GB'],\n            ['name' => 'Azalea Park', 'country_code' => 'US'],\n            ['name' => 'Versoix', 'country_code' => 'CH'],\n            ['name' => 'Hulyaypole', 'country_code' => 'UA'],\n            ['name' => 'Pomorie', 'country_code' => 'BG'],\n            ['name' => 'Lauda-Konigshofen', 'country_code' => 'DE'],\n            ['name' => 'Bischofsheim', 'country_code' => 'DE'],\n            ['name' => 'Hartsville', 'country_code' => 'US'],\n            ['name' => 'Worthington', 'country_code' => 'US'],\n            ['name' => 'Zontecomatlan de Lopez y Fuentes', 'country_code' => 'MX'],\n            ['name' => 'Penrith', 'country_code' => 'AU'],\n            ['name' => 'North Fayette', 'country_code' => 'US'],\n            ['name' => 'Gland', 'country_code' => 'CH'],\n            ['name' => 'Ihtiman', 'country_code' => 'BG'],\n            ['name' => ' Alavicheh', 'country_code' => 'IR'],\n            ['name' => 'Troon', 'country_code' => 'GB'],\n            ['name' => 'Mascali', 'country_code' => 'IT'],\n            ['name' => 'Nyagatare', 'country_code' => 'RW'],\n            ['name' => 'Cafelandia', 'country_code' => 'BR'],\n            ['name' => 'Saint-Jacques-de-la-Lande', 'country_code' => 'FR'],\n            ['name' => 'Condoto', 'country_code' => 'CO'],\n            ['name' => 'Brad', 'country_code' => 'RO'],\n            ['name' => 'Bollullos par del Condado', 'country_code' => 'ES'],\n            ['name' => 'General MacArthur', 'country_code' => 'PH'],\n            ['name' => 'Ottweiler', 'country_code' => 'DE'],\n            ['name' => 'Sanderstead', 'country_code' => 'GB'],\n            ['name' => 'Baiersbronn', 'country_code' => 'DE'],\n            ['name' => 'Plerin', 'country_code' => 'FR'],\n            ['name' => 'Abong Mbang', 'country_code' => 'CM'],\n            ['name' => 'Latiano', 'country_code' => 'IT'],\n            ['name' => 'Zollikon', 'country_code' => 'CH'],\n            ['name' => 'Simoes', 'country_code' => 'BR'],\n            ['name' => 'Las Vegas', 'country_code' => 'US'],\n            ['name' => 'Ban Kaeng', 'country_code' => 'TH'],\n            ['name' => 'Alfredo Chaves', 'country_code' => 'BR'],\n            ['name' => 'Bicas', 'country_code' => 'BR'],\n            ['name' => 'Noya', 'country_code' => 'ES'],\n            ['name' => 'Southern Pines', 'country_code' => 'US'],\n            ['name' => 'Goure', 'country_code' => 'NE'],\n            ['name' => 'Cicciano', 'country_code' => 'IT'],\n            ['name' => 'Lopik', 'country_code' => 'NL'],\n            ['name' => 'Djanet', 'country_code' => 'DZ'],\n            ['name' => 'Forster', 'country_code' => 'AU'],\n            ['name' => 'Hershey', 'country_code' => 'US'],\n            ['name' => 'Tepecoyo', 'country_code' => 'SV'],\n            ['name' => 'Berea', 'country_code' => 'US'],\n            ['name' => 'Saraland', 'country_code' => 'US'],\n            ['name' => 'Ipaucu', 'country_code' => 'BR'],\n            ['name' => 'Kuurne', 'country_code' => 'BE'],\n            ['name' => 'El Dorado', 'country_code' => 'US'],\n            ['name' => 'Darlowo', 'country_code' => 'PL'],\n            ['name' => 'Manor', 'country_code' => 'US'],\n            ['name' => 'Williamstown', 'country_code' => 'US'],\n            ['name' => 'Matias Barbosa', 'country_code' => 'BR'],\n            ['name' => 'Chelsfield', 'country_code' => 'GB'],\n            ['name' => 'Jever', 'country_code' => 'DE'],\n            ['name' => 'Eberbach', 'country_code' => 'DE'],\n            ['name' => 'Wilbraham', 'country_code' => 'US'],\n            ['name' => 'Bacuag', 'country_code' => 'PH'],\n            ['name' => 'Paradise Valley', 'country_code' => 'US'],\n            ['name' => 'Radomyshl', 'country_code' => 'UA'],\n            ['name' => 'Santa Maria do Suacui', 'country_code' => 'BR'],\n            ['name' => 'Alzano Lombardo', 'country_code' => 'IT'],\n            ['name' => 'Pastores', 'country_code' => 'GT'],\n            ['name' => 'Klasterec nad Ohri', 'country_code' => 'CZ'],\n            ['name' => 'Pewaukee', 'country_code' => 'US'],\n            ['name' => 'Lapua', 'country_code' => 'FI'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Nafplio', 'country_code' => 'GR'],\n            ['name' => 'Heswall', 'country_code' => 'GB'],\n            ['name' => 'Roncq', 'country_code' => 'FR'],\n            ['name' => 'Urbino', 'country_code' => 'IT'],\n            ['name' => 'Ayt  Attou ou L Arbi', 'country_code' => 'MA'],\n            ['name' => 'Priverno', 'country_code' => 'IT'],\n            ['name' => 'Mocha', 'country_code' => 'YE'],\n            ['name' => 'Langwedel', 'country_code' => 'DE'],\n            ['name' => 'Warwick', 'country_code' => 'US'],\n            ['name' => 'Olsberg', 'country_code' => 'DE'],\n            ['name' => 'Windham', 'country_code' => 'US'],\n            ['name' => 'Cadaval', 'country_code' => 'PT'],\n            ['name' => 'Nea Alikarnassos', 'country_code' => 'GR'],\n            ['name' => 'Oschatz', 'country_code' => 'DE'],\n            ['name' => 'Villa Yapacani', 'country_code' => 'BO'],\n            ['name' => 'Rio Branco', 'country_code' => 'UY'],\n            ['name' => 'Majia', 'country_code' => 'CN'],\n            ['name' => 'Bezou', 'country_code' => 'MA'],\n            ['name' => 'Boninal', 'country_code' => 'BR'],\n            ['name' => 'Usti nad Orlici', 'country_code' => 'CZ'],\n            ['name' => 'Saint-Genis-Pouilly', 'country_code' => 'FR'],\n            ['name' => 'Boula wane', 'country_code' => 'MA'],\n            ['name' => 'Gonzalez', 'country_code' => 'US'],\n            ['name' => 'Curua', 'country_code' => 'BR'],\n            ['name' => 'Port Orchard', 'country_code' => 'US'],\n            ['name' => 'Yanhewan', 'country_code' => 'CN'],\n            ['name' => 'San Julian', 'country_code' => 'PH'],\n            ['name' => 'Boa Nova', 'country_code' => 'BR'],\n            ['name' => 'Guaraniacu', 'country_code' => 'BR'],\n            ['name' => 'Forest City', 'country_code' => 'US'],\n            ['name' => 'Apuiares', 'country_code' => 'BR'],\n            ['name' => 'Qazyqurt', 'country_code' => 'KZ'],\n            ['name' => 'Pucioasa', 'country_code' => 'RO'],\n            ['name' => 'Zemamra', 'country_code' => 'MA'],\n            ['name' => 'Santa Branca', 'country_code' => 'BR'],\n            ['name' => 'Breza', 'country_code' => 'BA'],\n            ['name' => 'Tibau do Sul', 'country_code' => 'BR'],\n            ['name' => 'Bosobolo', 'country_code' => 'CD'],\n            ['name' => 'Douarnenez', 'country_code' => 'FR'],\n            ['name' => 'Santa Filomena', 'country_code' => 'BR'],\n            ['name' => 'Muscle Shoals', 'country_code' => 'US'],\n            ['name' => 'Jennings', 'country_code' => 'US'],\n            ['name' => 'Tlayacapan', 'country_code' => 'MX'],\n            ['name' => 'Henderson', 'country_code' => 'US'],\n            ['name' => 'Stanytsia Luhanska', 'country_code' => 'UA'],\n            ['name' => 'Boa Esperanca do Sul', 'country_code' => 'BR'],\n            ['name' => 'Leno', 'country_code' => 'IT'],\n            ['name' => 'Connersville', 'country_code' => 'US'],\n            ['name' => 'Royal Kunia', 'country_code' => 'US'],\n            ['name' => 'Neustadt an der Donau', 'country_code' => 'DE'],\n            ['name' => 'Maxcanu', 'country_code' => 'MX'],\n            ['name' => 'Caldas', 'country_code' => 'BR'],\n            ['name' => 'Much', 'country_code' => 'DE'],\n            ['name' => 'Goonellabah', 'country_code' => 'AU'],\n            ['name' => 'Antequera', 'country_code' => 'PH'],\n            ['name' => 'Tsimlyansk', 'country_code' => 'RU'],\n            ['name' => 'Ust -Ordynskiy', 'country_code' => 'RU'],\n            ['name' => 'Metuchen', 'country_code' => 'US'],\n            ['name' => 'Barra do Mendes', 'country_code' => 'BR'],\n            ['name' => 'Agua Boa', 'country_code' => 'BR'],\n            ['name' => 'Lieusaint', 'country_code' => 'FR'],\n            ['name' => 'Vatra Dornei', 'country_code' => 'RO'],\n            ['name' => 'Kearsley', 'country_code' => 'GB'],\n            ['name' => 'Alterosa', 'country_code' => 'BR'],\n            ['name' => 'Grain Valley', 'country_code' => 'US'],\n            ['name' => 'Milnrow', 'country_code' => 'GB'],\n            ['name' => 'Bad Camberg', 'country_code' => 'DE'],\n            ['name' => 'Villaviciosa', 'country_code' => 'ES'],\n            ['name' => 'Iflissen', 'country_code' => 'DZ'],\n            ['name' => 'Tubod', 'country_code' => 'PH'],\n            ['name' => 'Sopetran', 'country_code' => 'CO'],\n            ['name' => 'Pinhalzinho', 'country_code' => 'BR'],\n            ['name' => 'Mount Dora', 'country_code' => 'US'],\n            ['name' => 'Cefalu', 'country_code' => 'IT'],\n            ['name' => 'Barroquinha', 'country_code' => 'BR'],\n            ['name' => 'Skippack', 'country_code' => 'US'],\n            ['name' => 'Stezzano', 'country_code' => 'IT'],\n            ['name' => 'Langenselbold', 'country_code' => 'DE'],\n            ['name' => 'Worgl', 'country_code' => 'AT'],\n            ['name' => 'Cuevas del Almanzora', 'country_code' => 'ES'],\n            ['name' => 'Uibai', 'country_code' => 'BR'],\n            ['name' => 'Oleggio', 'country_code' => 'IT'],\n            ['name' => 'San Juan', 'country_code' => 'TT'],\n            ['name' => 'Scheemda', 'country_code' => 'NL'],\n            ['name' => 'Orikhiv', 'country_code' => 'UA'],\n            ['name' => 'Lotte', 'country_code' => 'DE'],\n            ['name' => 'Abony', 'country_code' => 'HU'],\n            ['name' => 'Ceres', 'country_code' => 'AR'],\n            ['name' => 'Hola Prystan', 'country_code' => 'UA'],\n            ['name' => 'Squinzano', 'country_code' => 'IT'],\n            ['name' => 'Progreso', 'country_code' => 'MX'],\n            ['name' => 'West Lincoln', 'country_code' => 'CA'],\n            ['name' => 'Dryden', 'country_code' => 'US'],\n            ['name' => 'Liedekerke', 'country_code' => 'BE'],\n            ['name' => 'Krasnyy Kut', 'country_code' => 'RU'],\n            ['name' => 'Pe de Serra', 'country_code' => 'BR'],\n            ['name' => 'Manoel Vitorino', 'country_code' => 'BR'],\n            ['name' => 'Dueville', 'country_code' => 'IT'],\n            ['name' => 'Alausi', 'country_code' => 'EC'],\n            ['name' => 'Wangjiaxian', 'country_code' => 'CN'],\n            ['name' => 'Bo ness', 'country_code' => 'GB'],\n            ['name' => 'Schneeberg', 'country_code' => 'DE'],\n            ['name' => 'Torrijos', 'country_code' => 'ES'],\n            ['name' => 'Fiesole', 'country_code' => 'IT'],\n            ['name' => 'Argentan', 'country_code' => 'FR'],\n            ['name' => 'Glasgow', 'country_code' => 'US'],\n            ['name' => 'Locorotondo', 'country_code' => 'IT'],\n            ['name' => 'Little Falls', 'country_code' => 'US'],\n            ['name' => 'Casinhas', 'country_code' => 'BR'],\n            ['name' => 'Branchburg', 'country_code' => 'US'],\n            ['name' => 'Fraser', 'country_code' => 'US'],\n            ['name' => 'Riedisheim', 'country_code' => 'FR'],\n            ['name' => 'Ourtzagh', 'country_code' => 'MA'],\n            ['name' => 'Rovinj', 'country_code' => 'HR'],\n            ['name' => 'Sun Lakes', 'country_code' => 'US'],\n            ['name' => 'Sidi Azzouz', 'country_code' => 'MA'],\n            ['name' => 'Wilsdruff', 'country_code' => 'DE'],\n            ['name' => 'Corinth', 'country_code' => 'US'],\n            ['name' => 'Ulchin', 'country_code' => 'KR'],\n            ['name' => 'Gernsbach', 'country_code' => 'DE'],\n            ['name' => 'Dimiao', 'country_code' => 'PH'],\n            ['name' => 'Mahinog', 'country_code' => 'PH'],\n            ['name' => 'Hartselle', 'country_code' => 'US'],\n            ['name' => 'East Bridgewater', 'country_code' => 'US'],\n            ['name' => 'Ollioules', 'country_code' => 'FR'],\n            ['name' => 'Matane', 'country_code' => 'CA'],\n            ['name' => 'Arroio dos Ratos', 'country_code' => 'BR'],\n            ['name' => 'Shamalgan', 'country_code' => 'KZ'],\n            ['name' => 'Thonotosassa', 'country_code' => 'US'],\n            ['name' => 'Hanover', 'country_code' => 'US'],\n            ['name' => 'Tagalft', 'country_code' => 'MA'],\n            ['name' => 'Munsingen', 'country_code' => 'DE'],\n            ['name' => 'Zemrane', 'country_code' => 'MA'],\n            ['name' => 'Hlucin', 'country_code' => 'CZ'],\n            ['name' => 'Fostoria', 'country_code' => 'US'],\n            ['name' => 'Tenafly', 'country_code' => 'US'],\n            ['name' => 'Brooks', 'country_code' => 'CA'],\n            ['name' => 'Taggia', 'country_code' => 'IT'],\n            ['name' => 'Amantea', 'country_code' => 'IT'],\n            ['name' => 'Tornesch', 'country_code' => 'DE'],\n            ['name' => 'Immenstadt im Allgau', 'country_code' => 'DE'],\n            ['name' => 'Gargzdai', 'country_code' => 'LT'],\n            ['name' => 'Maisach', 'country_code' => 'DE'],\n            ['name' => 'Caselle Torinese', 'country_code' => 'IT'],\n            ['name' => 'Beekman', 'country_code' => 'US'],\n            ['name' => 'Yamada', 'country_code' => 'JP'],\n            ['name' => 'Sassenberg', 'country_code' => 'DE'],\n            ['name' => 'Zaouiat Moulay Bouchta El Khammar', 'country_code' => 'MA'],\n            ['name' => 'North Strabane', 'country_code' => 'US'],\n            ['name' => 'Chaparral', 'country_code' => 'US'],\n            ['name' => 'Gorssel', 'country_code' => 'NL'],\n            ['name' => 'Polyarnyye Zori', 'country_code' => 'RU'],\n            ['name' => 'Scottsboro', 'country_code' => 'US'],\n            ['name' => 'Cliftonville', 'country_code' => 'GB'],\n            ['name' => 'Ascension', 'country_code' => 'BO'],\n            ['name' => 'Shirebrook', 'country_code' => 'GB'],\n            ['name' => 'Leverano', 'country_code' => 'IT'],\n            ['name' => 'Dippoldiswalde', 'country_code' => 'DE'],\n            ['name' => 'Lockhart', 'country_code' => 'US'],\n            ['name' => 'Middlewich', 'country_code' => 'GB'],\n            ['name' => 'Geldagana', 'country_code' => 'RU'],\n            ['name' => 'Haaren', 'country_code' => 'NL'],\n            ['name' => 'Thibodaux', 'country_code' => 'US'],\n            ['name' => 'Marmeleiro', 'country_code' => 'BR'],\n            ['name' => 'Marostica', 'country_code' => 'IT'],\n            ['name' => 'Igrapiuna', 'country_code' => 'BR'],\n            ['name' => 'Sanpozhen', 'country_code' => 'CN'],\n            ['name' => 'Sainte-Anne-des-Plaines', 'country_code' => 'CA'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Bom Principio', 'country_code' => 'BR'],\n            ['name' => 'Itinga', 'country_code' => 'BR'],\n            ['name' => 'Ilhota', 'country_code' => 'BR'],\n            ['name' => 'Paranhos', 'country_code' => 'BR'],\n            ['name' => 'San Andres Timilpan', 'country_code' => 'MX'],\n            ['name' => 'Sainte-Maxime', 'country_code' => 'FR'],\n            ['name' => 'Port Hedland', 'country_code' => 'AU'],\n            ['name' => 'Fisciano', 'country_code' => 'IT'],\n            ['name' => 'Cotegipe', 'country_code' => 'BR'],\n            ['name' => 'Peumo', 'country_code' => 'CL'],\n            ['name' => 'Taglio', 'country_code' => 'IT'],\n            ['name' => 'Chudovo', 'country_code' => 'RU'],\n            ['name' => 'Hettstedt', 'country_code' => 'DE'],\n            ['name' => 'Beasain', 'country_code' => 'ES'],\n            ['name' => 'Pazar', 'country_code' => 'TR'],\n            ['name' => 'Alginet', 'country_code' => 'ES'],\n            ['name' => 'Bradley Gardens', 'country_code' => 'US'],\n            ['name' => 'Schiffdorf', 'country_code' => 'DE'],\n            ['name' => 'Hanover', 'country_code' => 'US'],\n            ['name' => 'Det Udom', 'country_code' => 'TH'],\n            ['name' => 'Lagangilang', 'country_code' => 'PH'],\n            ['name' => 'San Cristobal', 'country_code' => 'AR'],\n            ['name' => 'Greenlawn', 'country_code' => 'US'],\n            ['name' => 'Wulong', 'country_code' => 'CN'],\n            ['name' => 'Robbinsdale', 'country_code' => 'US'],\n            ['name' => 'Valday', 'country_code' => 'RU'],\n            ['name' => 'Pak Thong Chai', 'country_code' => 'TH'],\n            ['name' => 'Carlopolis', 'country_code' => 'BR'],\n            ['name' => 'Yanshuiguan', 'country_code' => 'CN'],\n            ['name' => 'Eching', 'country_code' => 'DE'],\n            ['name' => 'Tafrant', 'country_code' => 'MA'],\n            ['name' => 'Clewiston', 'country_code' => 'US'],\n            ['name' => 'Feldkirchen', 'country_code' => 'AT'],\n            ['name' => 'Zolote', 'country_code' => 'UA'],\n            ['name' => 'Tounfit', 'country_code' => 'MA'],\n            ['name' => 'Furukawamen', 'country_code' => 'JP'],\n            ['name' => 'Markdorf', 'country_code' => 'DE'],\n            ['name' => 'Rio Piracicaba', 'country_code' => 'BR'],\n            ['name' => 'Abadla', 'country_code' => 'DZ'],\n            ['name' => 'Warren', 'country_code' => 'US'],\n            ['name' => 'Chippewa Falls', 'country_code' => 'US'],\n            ['name' => 'Lakinsk', 'country_code' => 'RU'],\n            ['name' => 'Robbinsville', 'country_code' => 'US'],\n            ['name' => 'Artena', 'country_code' => 'IT'],\n            ['name' => 'West Nipissing / Nipissing Ouest', 'country_code' => 'CA'],\n            ['name' => 'Maurilandia', 'country_code' => 'BR'],\n            ['name' => 'Uslar', 'country_code' => 'DE'],\n            ['name' => 'Ocean View', 'country_code' => 'US'],\n            ['name' => 'Astolfo Dutra', 'country_code' => 'BR'],\n            ['name' => 'Cienega de Flores', 'country_code' => 'MX'],\n            ['name' => 'Glasgow', 'country_code' => 'US'],\n            ['name' => 'Langerwehe', 'country_code' => 'DE'],\n            ['name' => 'Cervignano del Friuli', 'country_code' => 'IT'],\n            ['name' => 'Ostwald', 'country_code' => 'FR'],\n            ['name' => 'Tsukawaki', 'country_code' => 'JP'],\n            ['name' => 'Bridgetown', 'country_code' => 'US'],\n            ['name' => 'Warrington', 'country_code' => 'US'],\n            ['name' => 'Carballino', 'country_code' => 'ES'],\n            ['name' => 'Temsamane', 'country_code' => 'MA'],\n            ['name' => 'Yakhroma', 'country_code' => 'RU'],\n            ['name' => 'Midlothian', 'country_code' => 'US'],\n            ['name' => 'Estremoz', 'country_code' => 'PT'],\n            ['name' => 'Denzlingen', 'country_code' => 'DE'],\n            ['name' => 'Summerfield', 'country_code' => 'US'],\n            ['name' => 'Medvezhyegorsk', 'country_code' => 'RU'],\n            ['name' => 'Koundara', 'country_code' => 'GN'],\n            ['name' => 'Tenerife', 'country_code' => 'CO'],\n            ['name' => 'Eski Ikan', 'country_code' => 'KZ'],\n            ['name' => 'Coronel Bogado', 'country_code' => 'PY'],\n            ['name' => 'El Barrio de la Soledad', 'country_code' => 'MX'],\n            ['name' => 'Bua Yai', 'country_code' => 'TH'],\n            ['name' => 'Cisnadie', 'country_code' => 'RO'],\n            ['name' => 'Hollins', 'country_code' => 'US'],\n            ['name' => 'Schwabmunchen', 'country_code' => 'DE'],\n            ['name' => 'Lebedyn', 'country_code' => 'UA'],\n            ['name' => 'Ban Mae Kaluang', 'country_code' => 'TH'],\n            ['name' => 'Tarumirim', 'country_code' => 'BR'],\n            ['name' => 'Rezzato', 'country_code' => 'IT'],\n            ['name' => 'Takerbouzt', 'country_code' => 'DZ'],\n            ['name' => 'Cristopolis', 'country_code' => 'BR'],\n            ['name' => 'Mountain Home', 'country_code' => 'US'],\n            ['name' => 'Alexander City', 'country_code' => 'US'],\n            ['name' => 'Korneuburg', 'country_code' => 'AT'],\n            ['name' => 'Svetlogorsk', 'country_code' => 'RU'],\n            ['name' => 'Wang anzhen', 'country_code' => 'CN'],\n            ['name' => 'Marechal Floriano', 'country_code' => 'BR'],\n            ['name' => 'Sines', 'country_code' => 'PT'],\n            ['name' => 'Santo Antonio dos Lopes', 'country_code' => 'BR'],\n            ['name' => 'Cambados', 'country_code' => 'ES'],\n            ['name' => 'Frankenberg', 'country_code' => 'DE'],\n            ['name' => 'Camden', 'country_code' => 'US'],\n            ['name' => 'Kashin', 'country_code' => 'RU'],\n            ['name' => 'Tergnier', 'country_code' => 'FR'],\n            ['name' => 'San Marcos', 'country_code' => 'HN'],\n            ['name' => 'Bondeno', 'country_code' => 'IT'],\n            ['name' => 'Matican', 'country_code' => 'XK'],\n            ['name' => 'Dayr al Barsha', 'country_code' => 'EG'],\n            ['name' => 'Otopeni', 'country_code' => 'RO'],\n            ['name' => 'Rosemere', 'country_code' => 'CA'],\n            ['name' => 'Corat', 'country_code' => 'AZ'],\n            ['name' => 'Hooksett', 'country_code' => 'US'],\n            ['name' => 'Maria da Fe', 'country_code' => 'BR'],\n            ['name' => 'Lubsko', 'country_code' => 'PL'],\n            ['name' => 'Toppenish', 'country_code' => 'US'],\n            ['name' => 'Ozark', 'country_code' => 'US'],\n            ['name' => 'Kouroussa', 'country_code' => 'GN'],\n            ['name' => 'Douglas', 'country_code' => 'US'],\n            ['name' => 'Magdiwang', 'country_code' => 'PH'],\n            ['name' => 'Raydah', 'country_code' => 'YE'],\n            ['name' => 'Kawaii', 'country_code' => 'JP'],\n            ['name' => 'Almoloya de Alquisiras', 'country_code' => 'MX'],\n            ['name' => 'Matungao', 'country_code' => 'PH'],\n            ['name' => 'Eastham', 'country_code' => 'GB'],\n            ['name' => 'Santiago Ixtayutla', 'country_code' => 'MX'],\n            ['name' => 'Malone', 'country_code' => 'US'],\n            ['name' => 'Santa Juliana', 'country_code' => 'BR'],\n            ['name' => 'Guape', 'country_code' => 'BR'],\n            ['name' => 'Vinto', 'country_code' => 'BO'],\n            ['name' => 'Sankt Leon-Rot', 'country_code' => 'DE'],\n            ['name' => 'North Auburn', 'country_code' => 'US'],\n            ['name' => 'Hard', 'country_code' => 'AT'],\n            ['name' => 'Juan de Acosta', 'country_code' => 'CO'],\n            ['name' => 'Douar Hammadi', 'country_code' => 'MA'],\n            ['name' => 'Germasogeia', 'country_code' => 'CY'],\n            ['name' => 'Shichinohe', 'country_code' => 'JP'],\n            ['name' => 'Mill Valley', 'country_code' => 'US'],\n            ['name' => 'La Carlota', 'country_code' => 'ES'],\n            ['name' => 'Chalfont Saint Peter', 'country_code' => 'GB'],\n            ['name' => 'Wennigsen', 'country_code' => 'DE'],\n            ['name' => 'Niederzier', 'country_code' => 'DE'],\n            ['name' => 'Pilas', 'country_code' => 'ES'],\n            ['name' => 'Quakenbruck', 'country_code' => 'DE'],\n            ['name' => 'Tamaqua', 'country_code' => 'US'],\n            ['name' => 'Taruma', 'country_code' => 'BR'],\n            ['name' => 'Bickley', 'country_code' => 'GB'],\n            ['name' => 'Mistassini', 'country_code' => 'CA'],\n            ['name' => 'Bou Izakarn', 'country_code' => 'MA'],\n            ['name' => 'Valenca', 'country_code' => 'PT'],\n            ['name' => 'Hatten', 'country_code' => 'DE'],\n            ['name' => 'Destin', 'country_code' => 'US'],\n            ['name' => 'Amriswil', 'country_code' => 'CH'],\n            ['name' => 'Ocher', 'country_code' => 'RU'],\n            ['name' => 'Kivertsi', 'country_code' => 'UA'],\n            ['name' => 'Maridi', 'country_code' => 'SS'],\n            ['name' => 'El Porvenir de Velasco Suarez', 'country_code' => 'MX'],\n            ['name' => 'Zherdevka', 'country_code' => 'RU'],\n            ['name' => 'Hayashima', 'country_code' => 'JP'],\n            ['name' => 'Wittstock', 'country_code' => 'DE'],\n            ['name' => 'Venev', 'country_code' => 'RU'],\n            ['name' => 'Murrhardt', 'country_code' => 'DE'],\n            ['name' => 'West Boldon', 'country_code' => 'GB'],\n            ['name' => 'Ad Dab ah', 'country_code' => 'EG'],\n            ['name' => 'Puspokladany', 'country_code' => 'HU'],\n            ['name' => 'Salida', 'country_code' => 'US'],\n            ['name' => 'Torquay', 'country_code' => 'AU'],\n            ['name' => 'Lewisville', 'country_code' => 'US'],\n            ['name' => 'Sakaki', 'country_code' => 'JP'],\n            ['name' => 'Kings Park West', 'country_code' => 'US'],\n            ['name' => 'Nilo Pecanha', 'country_code' => 'BR'],\n            ['name' => 'Belison', 'country_code' => 'PH'],\n            ['name' => 'Malvik', 'country_code' => 'NO'],\n            ['name' => 'Guia', 'country_code' => 'ES'],\n            ['name' => 'Kaoma', 'country_code' => 'ZM'],\n            ['name' => 'Caln', 'country_code' => 'US'],\n            ['name' => 'Mirinzal', 'country_code' => 'BR'],\n            ['name' => 'Bad Ischl', 'country_code' => 'AT'],\n            ['name' => 'Torre del Campo', 'country_code' => 'ES'],\n            ['name' => 'Eppstein', 'country_code' => 'DE'],\n            ['name' => 'East Wenatchee', 'country_code' => 'US'],\n            ['name' => 'Golub-Dobrzyn', 'country_code' => 'PL'],\n            ['name' => 'Lindenhurst', 'country_code' => 'US'],\n            ['name' => 'Phillipsburg', 'country_code' => 'US'],\n            ['name' => 'Biatorbagy', 'country_code' => 'HU'],\n            ['name' => 'Rio Casca', 'country_code' => 'BR'],\n            ['name' => 'Covington', 'country_code' => 'US'],\n            ['name' => 'Jefferson Valley-Yorktown', 'country_code' => 'US'],\n            ['name' => 'Piquete', 'country_code' => 'BR'],\n            ['name' => 'Rincon', 'country_code' => 'US'],\n            ['name' => 'Baianopolis', 'country_code' => 'BR'],\n            ['name' => 'California City', 'country_code' => 'US'],\n            ['name' => 'Maasbracht', 'country_code' => 'NL'],\n            ['name' => 'Rizal', 'country_code' => 'PH'],\n            ['name' => 'Taos', 'country_code' => 'US'],\n            ['name' => 'Raynham', 'country_code' => 'US'],\n            ['name' => 'Neuenkirchen', 'country_code' => 'DE'],\n            ['name' => 'Marchtrenk', 'country_code' => 'AT'],\n            ['name' => 'Titiribi', 'country_code' => 'CO'],\n            ['name' => 'North Branford', 'country_code' => 'US'],\n            ['name' => 'Porecatu', 'country_code' => 'BR'],\n            ['name' => 'Beilen', 'country_code' => 'NL'],\n            ['name' => 'Hopatcong', 'country_code' => 'US'],\n            ['name' => 'Puerto Deseado', 'country_code' => 'AR'],\n            ['name' => 'Nafpaktos', 'country_code' => 'GR'],\n            ['name' => 'Hidalgo', 'country_code' => 'US'],\n            ['name' => 'Isny im Allgau', 'country_code' => 'DE'],\n            ['name' => 'Kadena', 'country_code' => 'JP'],\n            ['name' => 'Nannestad', 'country_code' => 'NO'],\n            ['name' => 'Fokino', 'country_code' => 'RU'],\n            ['name' => 'Cambridge', 'country_code' => 'US'],\n            ['name' => 'Abensberg', 'country_code' => 'DE'],\n            ['name' => 'Gardendale', 'country_code' => 'US'],\n            ['name' => 'Mucambo', 'country_code' => 'BR'],\n            ['name' => 'Antioch', 'country_code' => 'US'],\n            ['name' => 'Uitgeest', 'country_code' => 'NL'],\n            ['name' => 'Veglie', 'country_code' => 'IT'],\n            ['name' => 'Engenheiro Paulo de Frontin', 'country_code' => 'BR'],\n            ['name' => 'Bou Fekrane', 'country_code' => 'MA'],\n            ['name' => 'Grand Falls', 'country_code' => 'CA'],\n            ['name' => 'Rheinfelden', 'country_code' => 'CH'],\n            ['name' => 'Olgiate Olona', 'country_code' => 'IT'],\n            ['name' => 'Kerben', 'country_code' => 'KG'],\n            ['name' => 'Lakoucun', 'country_code' => 'CN'],\n            ['name' => 'Nioaque', 'country_code' => 'BR'],\n            ['name' => 'Ipiranga', 'country_code' => 'BR'],\n            ['name' => 'Zimnicea', 'country_code' => 'RO'],\n            ['name' => 'Kakunodatemachi', 'country_code' => 'JP'],\n            ['name' => 'Grunstadt', 'country_code' => 'DE'],\n            ['name' => 'Santa Luzia do Itanhy', 'country_code' => 'BR'],\n            ['name' => 'San Ferdinando di Puglia', 'country_code' => 'IT'],\n            ['name' => 'Knottingley', 'country_code' => 'GB'],\n            ['name' => 'Satoraljaujhely', 'country_code' => 'HU'],\n            ['name' => 'New Paltz', 'country_code' => 'US'],\n            ['name' => 'Astravyets', 'country_code' => 'BY'],\n            ['name' => 'Johnson City', 'country_code' => 'US'],\n            ['name' => 'Itaguacu', 'country_code' => 'BR'],\n            ['name' => 'Novoulyanovsk', 'country_code' => 'RU'],\n            ['name' => 'Kisanuki', 'country_code' => 'JP'],\n            ['name' => 'Balangiga', 'country_code' => 'PH'],\n            ['name' => 'Narvik', 'country_code' => 'NO'],\n            ['name' => 'Fara in Sabina', 'country_code' => 'IT'],\n            ['name' => 'Hendersonville', 'country_code' => 'US'],\n            ['name' => 'Clearview', 'country_code' => 'CA'],\n            ['name' => 'Seabrook', 'country_code' => 'US'],\n            ['name' => 'Nelas', 'country_code' => 'PT'],\n            ['name' => 'Mashpee', 'country_code' => 'US'],\n            ['name' => 'Eynesil', 'country_code' => 'TR'],\n            ['name' => 'Crowley', 'country_code' => 'US'],\n            ['name' => 'Sidi Abdelkarim', 'country_code' => 'MA'],\n            ['name' => 'Sauk Rapids', 'country_code' => 'US'],\n            ['name' => 'Mapanas', 'country_code' => 'PH'],\n            ['name' => 'Boutilimit', 'country_code' => 'MR'],\n            ['name' => 'Vetralla', 'country_code' => 'IT'],\n            ['name' => 'Greendale', 'country_code' => 'US'],\n            ['name' => 'Bedford', 'country_code' => 'US'],\n            ['name' => 'Mayrtup', 'country_code' => 'RU'],\n            ['name' => 'Lubben (Spreewald)', 'country_code' => 'DE'],\n            ['name' => 'Anatuya', 'country_code' => 'AR'],\n            ['name' => 'Emerald', 'country_code' => 'AU'],\n            ['name' => 'Canals', 'country_code' => 'ES'],\n            ['name' => 'Lockhart', 'country_code' => 'US'],\n            ['name' => 'New Franklin', 'country_code' => 'US'],\n            ['name' => 'Tamm', 'country_code' => 'DE'],\n            ['name' => 'Vohringen', 'country_code' => 'DE'],\n            ['name' => 'Leuna', 'country_code' => 'DE'],\n            ['name' => 'Chelsea', 'country_code' => 'US'],\n            ['name' => 'Larena', 'country_code' => 'PH'],\n            ['name' => 'Crissiumal', 'country_code' => 'BR'],\n            ['name' => 'Ionia', 'country_code' => 'US'],\n            ['name' => 'Pineville', 'country_code' => 'US'],\n            ['name' => 'Grafing bei Munchen', 'country_code' => 'DE'],\n            ['name' => 'Suluktu', 'country_code' => 'KG'],\n            ['name' => 'Lukoyanov', 'country_code' => 'RU'],\n            ['name' => 'Torokbalint', 'country_code' => 'HU'],\n            ['name' => 'Aldenhoven', 'country_code' => 'DE'],\n            ['name' => 'Cheadle', 'country_code' => 'GB'],\n            ['name' => 'Tostedt', 'country_code' => 'DE'],\n            ['name' => 'Tempio Pausania', 'country_code' => 'IT'],\n            ['name' => 'Iona', 'country_code' => 'US'],\n            ['name' => 'Ystrad Mynach', 'country_code' => 'GB'],\n            ['name' => 'Patrocinio Paulista', 'country_code' => 'BR'],\n            ['name' => 'Villalba', 'country_code' => 'ES'],\n            ['name' => 'Castelsarrasin', 'country_code' => 'FR'],\n            ['name' => 'Cleveland', 'country_code' => 'US'],\n            ['name' => 'Cabo Verde', 'country_code' => 'BR'],\n            ['name' => 'Greensburg', 'country_code' => 'US'],\n            ['name' => 'Bebra', 'country_code' => 'DE'],\n            ['name' => 'Middleburg', 'country_code' => 'US'],\n            ['name' => 'Santiago de Anaya', 'country_code' => 'MX'],\n            ['name' => 'Bamble', 'country_code' => 'NO'],\n            ['name' => 'Zhipingxiang', 'country_code' => 'CN'],\n            ['name' => 'Montabaur', 'country_code' => 'DE'],\n            ['name' => 'Aracatu', 'country_code' => 'BR'],\n            ['name' => 'Harrison', 'country_code' => 'US'],\n            ['name' => 'Villacidro', 'country_code' => 'IT'],\n            ['name' => 'Bergschenhoek', 'country_code' => 'NL'],\n            ['name' => 'Gouveia', 'country_code' => 'PT'],\n            ['name' => 'Paraiso do Norte', 'country_code' => 'BR'],\n            ['name' => 'Sarezzo', 'country_code' => 'IT'],\n            ['name' => 'Mjolby', 'country_code' => 'SE'],\n            ['name' => 'Chesterton', 'country_code' => 'US'],\n            ['name' => 'Maria', 'country_code' => 'PH'],\n            ['name' => 'Steamboat Springs', 'country_code' => 'US'],\n            ['name' => 'St. Clair', 'country_code' => 'CA'],\n            ['name' => 'Talwat', 'country_code' => 'MA'],\n            ['name' => 'Holzgerlingen', 'country_code' => 'DE'],\n            ['name' => 'Sweden', 'country_code' => 'US'],\n            ['name' => 'Black Forest', 'country_code' => 'US'],\n            ['name' => 'Lomas de Sargentillo', 'country_code' => 'EC'],\n            ['name' => 'Fort Payne', 'country_code' => 'US'],\n            ['name' => 'Casatenovo', 'country_code' => 'IT'],\n            ['name' => 'Moudjbara', 'country_code' => 'DZ'],\n            ['name' => 'Schmolln', 'country_code' => 'DE'],\n            ['name' => 'Oberhaching', 'country_code' => 'DE'],\n            ['name' => 'Montepulciano', 'country_code' => 'IT'],\n            ['name' => 'Castel San Giovanni', 'country_code' => 'IT'],\n            ['name' => 'Aleksandrow Kujawski', 'country_code' => 'PL'],\n            ['name' => 'Cherry Hill Mall', 'country_code' => 'US'],\n            ['name' => 'Fruitville', 'country_code' => 'US'],\n            ['name' => 'Mor', 'country_code' => 'HU'],\n            ['name' => 'Wanding', 'country_code' => 'CN'],\n            ['name' => 'Lakewood Park', 'country_code' => 'US'],\n            ['name' => 'Rio de Oro', 'country_code' => 'CO'],\n            ['name' => 'El Carmen de Atrato', 'country_code' => 'CO'],\n            ['name' => 'Sao Joao do Araguaia', 'country_code' => 'BR'],\n            ['name' => 'Guazacapan', 'country_code' => 'GT'],\n            ['name' => 'Galmi', 'country_code' => 'NE'],\n            ['name' => 'Callaway', 'country_code' => 'US'],\n            ['name' => 'Oatfield', 'country_code' => 'US'],\n            ['name' => 'Phalaborwa', 'country_code' => 'ZA'],\n            ['name' => 'Kalkar', 'country_code' => 'DE'],\n            ['name' => 'Beylul', 'country_code' => 'ER'],\n            ['name' => 'Muggia', 'country_code' => 'IT'],\n            ['name' => 'Pomfret', 'country_code' => 'US'],\n            ['name' => 'Cordoba', 'country_code' => 'CO'],\n            ['name' => 'Waunakee', 'country_code' => 'US'],\n            ['name' => 'Famenin', 'country_code' => 'IR'],\n            ['name' => 'Wixom', 'country_code' => 'US'],\n            ['name' => 'Luling', 'country_code' => 'US'],\n            ['name' => 'Canton', 'country_code' => 'US'],\n            ['name' => 'La Puebla', 'country_code' => 'ES'],\n            ['name' => 'Chumpak', 'country_code' => 'CN'],\n            ['name' => 'Sanlucar la Mayor', 'country_code' => 'ES'],\n            ['name' => 'Eggenfelden', 'country_code' => 'DE'],\n            ['name' => 'Genthin', 'country_code' => 'DE'],\n            ['name' => 'Pell City', 'country_code' => 'US'],\n            ['name' => 'Lariano', 'country_code' => 'IT'],\n            ['name' => 'Belm', 'country_code' => 'DE'],\n            ['name' => 'Pecos', 'country_code' => 'US'],\n            ['name' => 'Sampaloc', 'country_code' => 'PH'],\n            ['name' => 'Taiyong', 'country_code' => 'CN'],\n            ['name' => 'Peabiru', 'country_code' => 'BR'],\n            ['name' => 'Bay St. Louis', 'country_code' => 'US'],\n            ['name' => 'Biscarrosse', 'country_code' => 'FR'],\n            ['name' => 'Huangyadong', 'country_code' => 'CN'],\n            ['name' => 'Gisborne', 'country_code' => 'AU'],\n            ['name' => 'La Entrada', 'country_code' => 'HN'],\n            ['name' => 'Vieste', 'country_code' => 'IT'],\n            ['name' => 'Mittegrossefehn', 'country_code' => 'DE'],\n            ['name' => 'Belle Chasse', 'country_code' => 'US'],\n            ['name' => 'Trubchevsk', 'country_code' => 'RU'],\n            ['name' => 'Thala', 'country_code' => 'TN'],\n            ['name' => 'Havre de Grace', 'country_code' => 'US'],\n            ['name' => 'Montesarchio', 'country_code' => 'IT'],\n            ['name' => 'Taishi', 'country_code' => 'JP'],\n            ['name' => 'Monroe', 'country_code' => 'US'],\n            ['name' => 'East Norriton', 'country_code' => 'US'],\n            ['name' => 'Ovidiu', 'country_code' => 'RO'],\n            ['name' => 'Statte', 'country_code' => 'IT'],\n            ['name' => 'D Iberville', 'country_code' => 'US'],\n            ['name' => 'Ibiraci', 'country_code' => 'BR'],\n            ['name' => 'Cayce', 'country_code' => 'US'],\n            ['name' => 'Chodov', 'country_code' => 'CZ'],\n            ['name' => 'Effingham', 'country_code' => 'US'],\n            ['name' => 'Santaquin', 'country_code' => 'US'],\n            ['name' => 'Guapo', 'country_code' => 'BR'],\n            ['name' => 'Hobe Sound', 'country_code' => 'US'],\n            ['name' => 'Misano Adriatico', 'country_code' => 'IT'],\n            ['name' => 'Dubovka', 'country_code' => 'RU'],\n            ['name' => 'Santo Augusto', 'country_code' => 'BR'],\n            ['name' => 'Alto Alegre dos Parecis', 'country_code' => 'BR'],\n            ['name' => 'Zeven', 'country_code' => 'DE'],\n            ['name' => 'Acala', 'country_code' => 'MX'],\n            ['name' => 'Tako', 'country_code' => 'JP'],\n            ['name' => 'Uxbridge', 'country_code' => 'US'],\n            ['name' => 'Wauchula', 'country_code' => 'US'],\n            ['name' => 'Colesville', 'country_code' => 'US'],\n            ['name' => 'Canmore', 'country_code' => 'CA'],\n            ['name' => 'Vianopolis', 'country_code' => 'BR'],\n            ['name' => 'Goshen', 'country_code' => 'US'],\n            ['name' => 'Ivai', 'country_code' => 'BR'],\n            ['name' => 'Dayton', 'country_code' => 'US'],\n            ['name' => 'Reidsville', 'country_code' => 'US'],\n            ['name' => 'Ban Bang Non', 'country_code' => 'TH'],\n            ['name' => 'Engenheiro Beltrao', 'country_code' => 'BR'],\n            ['name' => 'Hutchinson', 'country_code' => 'US'],\n            ['name' => 'Beesel', 'country_code' => 'NL'],\n            ['name' => 'Dallas', 'country_code' => 'US'],\n            ['name' => 'Plumstead', 'country_code' => 'US'],\n            ['name' => 'Mambore', 'country_code' => 'BR'],\n            ['name' => 'Wanzleben', 'country_code' => 'DE'],\n            ['name' => 'Spiesen-Elversberg', 'country_code' => 'DE'],\n            ['name' => 'Oxford', 'country_code' => 'US'],\n            ['name' => 'Noyon', 'country_code' => 'FR'],\n            ['name' => 'Toplita', 'country_code' => 'RO'],\n            ['name' => 'Pacaembu', 'country_code' => 'BR'],\n            ['name' => 'Asslar', 'country_code' => 'DE'],\n            ['name' => 'Kiskoros', 'country_code' => 'HU'],\n            ['name' => 'Beacon', 'country_code' => 'US'],\n            ['name' => 'Primeira Cruz', 'country_code' => 'BR'],\n            ['name' => 'Ipswich', 'country_code' => 'US'],\n            ['name' => 'Dumas', 'country_code' => 'US'],\n            ['name' => 'Raymondville', 'country_code' => 'US'],\n            ['name' => 'Anapurus', 'country_code' => 'BR'],\n            ['name' => 'Frederick', 'country_code' => 'US'],\n            ['name' => 'Novellara', 'country_code' => 'IT'],\n            ['name' => 'Artesia', 'country_code' => 'US'],\n            ['name' => 'Valbonne', 'country_code' => 'FR'],\n            ['name' => 'Polotitlan de la Ilustracion', 'country_code' => 'MX'],\n            ['name' => 'New Fairfield', 'country_code' => 'US'],\n            ['name' => 'Ban Bang Sai', 'country_code' => 'TH'],\n            ['name' => 'Soller', 'country_code' => 'ES'],\n            ['name' => 'Fagnano Olona', 'country_code' => 'IT'],\n            ['name' => 'Ping anbao', 'country_code' => 'CN'],\n            ['name' => 'North Mankato', 'country_code' => 'US'],\n            ['name' => 'Tucacas', 'country_code' => 'VE'],\n            ['name' => 'Ielmo Marinho', 'country_code' => 'BR'],\n            ['name' => 'Lithgow', 'country_code' => 'AU'],\n            ['name' => 'Meckenbeuren', 'country_code' => 'DE'],\n            ['name' => 'Shawangunk', 'country_code' => 'US'],\n            ['name' => 'Mar de Ajo', 'country_code' => 'AR'],\n            ['name' => 'Maracai', 'country_code' => 'BR'],\n            ['name' => 'Dennis', 'country_code' => 'US'],\n            ['name' => 'Glenpool', 'country_code' => 'US'],\n            ['name' => 'Oil City', 'country_code' => 'US'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'Brejo do Cruz', 'country_code' => 'BR'],\n            ['name' => 'Gien', 'country_code' => 'FR'],\n            ['name' => 'Hammonton', 'country_code' => 'US'],\n            ['name' => 'Orange', 'country_code' => 'US'],\n            ['name' => 'New Kingman-Butler', 'country_code' => 'US'],\n            ['name' => 'Tracunhaem', 'country_code' => 'BR'],\n            ['name' => 'Newhaven', 'country_code' => 'GB'],\n            ['name' => 'Nidzica', 'country_code' => 'PL'],\n            ['name' => 'Dalkeith', 'country_code' => 'GB'],\n            ['name' => 'Kamigori', 'country_code' => 'JP'],\n            ['name' => 'Diego de Almagro', 'country_code' => 'CL'],\n            ['name' => 'Deming', 'country_code' => 'US'],\n            ['name' => 'Oulad Chikh', 'country_code' => 'MA'],\n            ['name' => 'Big Rapids', 'country_code' => 'US'],\n            ['name' => 'Zhovkva', 'country_code' => 'UA'],\n            ['name' => 'Miami Springs', 'country_code' => 'US'],\n            ['name' => 'San Prisco', 'country_code' => 'IT'],\n            ['name' => 'Itapetim', 'country_code' => 'BR'],\n            ['name' => 'Pirallahi', 'country_code' => 'AZ'],\n            ['name' => 'Fulshear', 'country_code' => 'US'],\n            ['name' => 'Miraima', 'country_code' => 'BR'],\n            ['name' => 'Cromwell', 'country_code' => 'US'],\n            ['name' => 'South Venice', 'country_code' => 'US'],\n            ['name' => 'Khmis Sidi al  Aydi', 'country_code' => 'MA'],\n            ['name' => 'Ataleia', 'country_code' => 'BR'],\n            ['name' => 'Demerval Lobao', 'country_code' => 'BR'],\n            ['name' => 'Chaoyangdicun', 'country_code' => 'CN'],\n            ['name' => 'Gaesti', 'country_code' => 'RO'],\n            ['name' => 'Douar Lehgagcha', 'country_code' => 'MA'],\n            ['name' => 'Allouez', 'country_code' => 'US'],\n            ['name' => 'Princeton', 'country_code' => 'US'],\n            ['name' => 'Valburg', 'country_code' => 'NL'],\n            ['name' => 'Baraboo', 'country_code' => 'US'],\n            ['name' => 'Gura Humorului', 'country_code' => 'RO'],\n            ['name' => 'Zhashkiv', 'country_code' => 'UA'],\n            ['name' => 'Lanuvio', 'country_code' => 'IT'],\n            ['name' => 'Cavarzere', 'country_code' => 'IT'],\n            ['name' => 'Jericho', 'country_code' => 'US'],\n            ['name' => 'North Battleford', 'country_code' => 'CA'],\n            ['name' => 'Salisbury', 'country_code' => 'US'],\n            ['name' => 'Kauhajoki', 'country_code' => 'FI'],\n            ['name' => 'Wanze', 'country_code' => 'BE'],\n            ['name' => 'Philippsburg', 'country_code' => 'DE'],\n            ['name' => 'Erbach', 'country_code' => 'DE'],\n            ['name' => 'Rustington', 'country_code' => 'GB'],\n            ['name' => 'Pembroke', 'country_code' => 'CA'],\n            ['name' => 'Jinmingsi', 'country_code' => 'CN'],\n            ['name' => 'El Sobrante', 'country_code' => 'US'],\n            ['name' => 'Schwaz', 'country_code' => 'AT'],\n            ['name' => 'Cahokia', 'country_code' => 'US'],\n            ['name' => 'Niquinohomo', 'country_code' => 'NI'],\n            ['name' => 'Springdale', 'country_code' => 'US'],\n            ['name' => 'Oak Island', 'country_code' => 'US'],\n            ['name' => 'Saint-Gilles', 'country_code' => 'FR'],\n            ['name' => 'Melsungen', 'country_code' => 'DE'],\n            ['name' => 'Gramercy', 'country_code' => 'US'],\n            ['name' => 'Atlantic Beach', 'country_code' => 'US'],\n            ['name' => 'Zabreh', 'country_code' => 'CZ'],\n            ['name' => 'Hassfurt', 'country_code' => 'DE'],\n            ['name' => 'Guapi', 'country_code' => 'CO'],\n            ['name' => 'Teays Valley', 'country_code' => 'US'],\n            ['name' => 'Ephrata', 'country_code' => 'US'],\n            ['name' => 'Sant Angelo Lodigiano', 'country_code' => 'IT'],\n            ['name' => 'Oosterzele', 'country_code' => 'BE'],\n            ['name' => 'Oak Park', 'country_code' => 'US'],\n            ['name' => 'Uruana', 'country_code' => 'BR'],\n            ['name' => 'Ban Tha Luang Lang', 'country_code' => 'TH'],\n            ['name' => 'Arcozelo', 'country_code' => 'PT'],\n            ['name' => 'Santa Cruz de Bezana', 'country_code' => 'ES'],\n            ['name' => 'Couvin', 'country_code' => 'BE'],\n            ['name' => 'Zacualpan', 'country_code' => 'MX'],\n            ['name' => 'Saddle Brook', 'country_code' => 'US'],\n            ['name' => 'Horodyshche', 'country_code' => 'UA'],\n            ['name' => 'San Pietro Vernotico', 'country_code' => 'IT'],\n            ['name' => 'Apostolove', 'country_code' => 'UA'],\n            ['name' => 'Richmond Hill', 'country_code' => 'US'],\n            ['name' => 'Forlimpopoli', 'country_code' => 'IT'],\n            ['name' => 'Peri-Mirim', 'country_code' => 'BR'],\n            ['name' => 'Granville', 'country_code' => 'FR'],\n            ['name' => 'Brandermill', 'country_code' => 'US'],\n            ['name' => 'Sao Jose do Cedro', 'country_code' => 'BR'],\n            ['name' => 'Joaquim Pires', 'country_code' => 'BR'],\n            ['name' => 'Machados', 'country_code' => 'BR'],\n            ['name' => 'Latisana', 'country_code' => 'IT'],\n            ['name' => 'Yamanobe', 'country_code' => 'JP'],\n            ['name' => 'Berre-l Etang', 'country_code' => 'FR'],\n            ['name' => 'Alagoinha', 'country_code' => 'BR'],\n            ['name' => 'Jupi', 'country_code' => 'BR'],\n            ['name' => 'Lamas', 'country_code' => 'PE'],\n            ['name' => 'Sedriano', 'country_code' => 'IT'],\n            ['name' => 'Ak-Dovurak', 'country_code' => 'RU'],\n            ['name' => 'Lich', 'country_code' => 'DE'],\n            ['name' => 'Great Driffield', 'country_code' => 'GB'],\n            ['name' => 'Rutherford', 'country_code' => 'AU'],\n            ['name' => 'Llanera', 'country_code' => 'ES'],\n            ['name' => 'Calanogas', 'country_code' => 'PH'],\n            ['name' => 'Forrest City', 'country_code' => 'US'],\n            ['name' => 'Sun Village', 'country_code' => 'US'],\n            ['name' => 'Vilanova del Cami', 'country_code' => 'ES'],\n            ['name' => 'Santana do Matos', 'country_code' => 'BR'],\n            ['name' => 'San Agustin de Guadalix', 'country_code' => 'ES'],\n            ['name' => 'Arzachena', 'country_code' => 'IT'],\n            ['name' => 'Crispiano', 'country_code' => 'IT'],\n            ['name' => 'Jardin', 'country_code' => 'CO'],\n            ['name' => 'Eichstatt', 'country_code' => 'DE'],\n            ['name' => 'Bokod', 'country_code' => 'PH'],\n            ['name' => 'Moorestown-Lenola', 'country_code' => 'US'],\n            ['name' => 'Melenki', 'country_code' => 'RU'],\n            ['name' => 'Mwinilunga', 'country_code' => 'ZM'],\n            ['name' => 'Heliopolis', 'country_code' => 'BR'],\n            ['name' => 'Wayland', 'country_code' => 'US'],\n            ['name' => 'Neckargemund', 'country_code' => 'DE'],\n            ['name' => 'Zarghun Shahr', 'country_code' => 'AF'],\n            ['name' => 'Bovenden', 'country_code' => 'DE'],\n            ['name' => 'Jindayris', 'country_code' => 'SY'],\n            ['name' => 'Marienheide', 'country_code' => 'DE'],\n            ['name' => 'Lauterbach', 'country_code' => 'DE'],\n            ['name' => 'Pelham', 'country_code' => 'US'],\n            ['name' => 'Fergus Falls', 'country_code' => 'US'],\n            ['name' => 'Passa e Fica', 'country_code' => 'BR'],\n            ['name' => 'Wlodawa', 'country_code' => 'PL'],\n            ['name' => 'Verin', 'country_code' => 'ES'],\n            ['name' => 'Spaichingen', 'country_code' => 'DE'],\n            ['name' => 'Dores do Indaia', 'country_code' => 'BR'],\n            ['name' => 'Angermunde', 'country_code' => 'DE'],\n            ['name' => 'Ampthill', 'country_code' => 'GB'],\n            ['name' => 'Selston', 'country_code' => 'GB'],\n            ['name' => 'Feliz', 'country_code' => 'BR'],\n            ['name' => 'Aurora', 'country_code' => 'US'],\n            ['name' => 'Kupino', 'country_code' => 'RU'],\n            ['name' => 'Ponduru', 'country_code' => 'IN'],\n            ['name' => 'Chiran', 'country_code' => 'JP'],\n            ['name' => 'Pedro Afonso', 'country_code' => 'BR'],\n            ['name' => 'Mont-Laurier', 'country_code' => 'CA'],\n            ['name' => 'Munchenstein', 'country_code' => 'CH'],\n            ['name' => 'Ahrensfelde', 'country_code' => 'DE'],\n            ['name' => 'Forres', 'country_code' => 'GB'],\n            ['name' => 'Goldap', 'country_code' => 'PL'],\n            ['name' => 'Hilpoltstein', 'country_code' => 'DE'],\n            ['name' => 'San Vicente', 'country_code' => 'PH'],\n            ['name' => 'La Quiaca', 'country_code' => 'AR'],\n            ['name' => 'Conneaut', 'country_code' => 'US'],\n            ['name' => 'Nether Providence', 'country_code' => 'US'],\n            ['name' => 'Mansidao', 'country_code' => 'BR'],\n            ['name' => 'Biedenkopf', 'country_code' => 'DE'],\n            ['name' => 'Chalette-sur-Loing', 'country_code' => 'FR'],\n            ['name' => 'Sao Ludgero', 'country_code' => 'BR'],\n            ['name' => 'Tenente Portela', 'country_code' => 'BR'],\n            ['name' => 'Bollene', 'country_code' => 'FR'],\n            ['name' => 'Thomaston', 'country_code' => 'US'],\n            ['name' => 'Otley', 'country_code' => 'GB'],\n            ['name' => 'Strathmore', 'country_code' => 'CA'],\n            ['name' => 'Virgem da Lapa', 'country_code' => 'BR'],\n            ['name' => 'Abre Campo', 'country_code' => 'BR'],\n            ['name' => 'Levelland', 'country_code' => 'US'],\n            ['name' => 'Bandarbeyla', 'country_code' => 'SO'],\n            ['name' => 'Filandia', 'country_code' => 'CO'],\n            ['name' => 'Mbulu', 'country_code' => 'TZ'],\n            ['name' => 'Grunberg', 'country_code' => 'DE'],\n            ['name' => 'Jaguapita', 'country_code' => 'BR'],\n            ['name' => 'Palmetto', 'country_code' => 'US'],\n            ['name' => 'Neunkirchen', 'country_code' => 'DE'],\n            ['name' => 'Puxinana', 'country_code' => 'BR'],\n            ['name' => 'Piney Green', 'country_code' => 'US'],\n            ['name' => 'Caledon', 'country_code' => 'ZA'],\n            ['name' => 'Xireg', 'country_code' => 'CN'],\n            ['name' => 'Fort Campbell North', 'country_code' => 'US'],\n            ['name' => 'Schoonhoven', 'country_code' => 'NL'],\n            ['name' => 'Camponogara', 'country_code' => 'IT'],\n            ['name' => 'Millbury', 'country_code' => 'US'],\n            ['name' => 'Mangha', 'country_code' => 'CN'],\n            ['name' => 'Andarai', 'country_code' => 'BR'],\n            ['name' => 'Motupe', 'country_code' => 'PE'],\n            ['name' => 'Cumnock', 'country_code' => 'GB'],\n            ['name' => 'Cobh', 'country_code' => 'IE'],\n            ['name' => 'Kuleshovka', 'country_code' => 'RU'],\n            ['name' => 'Altos del Rosario', 'country_code' => 'CO'],\n            ['name' => 'Pierrelatte', 'country_code' => 'FR'],\n            ['name' => 'Jimbolia', 'country_code' => 'RO'],\n            ['name' => 'Alleroy', 'country_code' => 'RU'],\n            ['name' => 'Schermbeck', 'country_code' => 'DE'],\n            ['name' => 'Bergen', 'country_code' => 'DE'],\n            ['name' => 'Conceicao do Rio Verde', 'country_code' => 'BR'],\n            ['name' => 'Massaranduba', 'country_code' => 'BR'],\n            ['name' => 'Blegny', 'country_code' => 'BE'],\n            ['name' => 'Torredonjimeno', 'country_code' => 'ES'],\n            ['name' => 'Tamsaout', 'country_code' => 'MA'],\n            ['name' => 'San Pedro Pochutla', 'country_code' => 'MX'],\n            ['name' => 'Vedi', 'country_code' => 'AM'],\n            ['name' => 'Saugeen Shores', 'country_code' => 'CA'],\n            ['name' => 'Camapua', 'country_code' => 'BR'],\n            ['name' => 'Quatipuru', 'country_code' => 'BR'],\n            ['name' => 'Margraten', 'country_code' => 'NL'],\n            ['name' => 'Wells', 'country_code' => 'GB'],\n            ['name' => 'Hickory Hills', 'country_code' => 'US'],\n            ['name' => 'Quartucciu', 'country_code' => 'IT'],\n            ['name' => 'Khomam', 'country_code' => 'IR'],\n            ['name' => 'Meruoca', 'country_code' => 'BR'],\n            ['name' => 'Quata', 'country_code' => 'BR'],\n            ['name' => 'Robinson', 'country_code' => 'US'],\n            ['name' => 'Hinabangan', 'country_code' => 'PH'],\n            ['name' => 'Beach Park', 'country_code' => 'US'],\n            ['name' => 'Burglengenfeld', 'country_code' => 'DE'],\n            ['name' => 'Bully-les-Mines', 'country_code' => 'FR'],\n            ['name' => 'General Carneiro', 'country_code' => 'BR'],\n            ['name' => 'Winsum', 'country_code' => 'NL'],\n            ['name' => 'East Milton', 'country_code' => 'US'],\n            ['name' => 'Satuba', 'country_code' => 'BR'],\n            ['name' => 'Grammichele', 'country_code' => 'IT'],\n            ['name' => 'Hunxe', 'country_code' => 'DE'],\n            ['name' => 'Tomino', 'country_code' => 'ES'],\n            ['name' => 'Fontenay-le-Comte', 'country_code' => 'FR'],\n            ['name' => 'Weissenhorn', 'country_code' => 'DE'],\n            ['name' => 'Dishashah', 'country_code' => 'EG'],\n            ['name' => 'Sharonville', 'country_code' => 'US'],\n            ['name' => 'Lappersdorf', 'country_code' => 'DE'],\n            ['name' => 'Santa Marcela', 'country_code' => 'PH'],\n            ['name' => 'Cacequi', 'country_code' => 'BR'],\n            ['name' => 'West Freehold', 'country_code' => 'US'],\n            ['name' => 'Middlesex', 'country_code' => 'US'],\n            ['name' => 'Thompson', 'country_code' => 'CA'],\n            ['name' => 'Lagoa da Confusao', 'country_code' => 'BR'],\n            ['name' => 'Quierschied', 'country_code' => 'DE'],\n            ['name' => 'San Jorge', 'country_code' => 'GT'],\n            ['name' => 'Castelfranco di Sotto', 'country_code' => 'IT'],\n            ['name' => 'Spring Creek', 'country_code' => 'US'],\n            ['name' => 'St. James', 'country_code' => 'US'],\n            ['name' => 'Vigodarzere', 'country_code' => 'IT'],\n            ['name' => 'Nikolayevsk', 'country_code' => 'RU'],\n            ['name' => 'Maumee', 'country_code' => 'US'],\n            ['name' => 'Caldeirao Grande', 'country_code' => 'BR'],\n            ['name' => 'Alto Parana', 'country_code' => 'BR'],\n            ['name' => 'Lawrenceburg', 'country_code' => 'US'],\n            ['name' => 'Brevard', 'country_code' => 'US'],\n            ['name' => 'Saint-Paul-les-Dax', 'country_code' => 'FR'],\n            ['name' => 'Erbach', 'country_code' => 'DE'],\n            ['name' => 'Sao Pedro do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Bad Laasphe', 'country_code' => 'DE'],\n            ['name' => 'Salzano', 'country_code' => 'IT'],\n            ['name' => 'Sternberk', 'country_code' => 'CZ'],\n            ['name' => 'Beyne-Heusay', 'country_code' => 'BE'],\n            ['name' => 'Ad Duraykish', 'country_code' => 'SY'],\n            ['name' => 'Rio Vermelho', 'country_code' => 'BR'],\n            ['name' => 'Lavaltrie', 'country_code' => 'CA'],\n            ['name' => 'Bowral', 'country_code' => 'AU'],\n            ['name' => 'Lengede', 'country_code' => 'DE'],\n            ['name' => 'Rottingdean', 'country_code' => 'GB'],\n            ['name' => 'Glubczyce', 'country_code' => 'PL'],\n            ['name' => 'Ixcatepec', 'country_code' => 'MX'],\n            ['name' => 'Nicosia', 'country_code' => 'IT'],\n            ['name' => 'Gran', 'country_code' => 'NO'],\n            ['name' => 'Arcadia', 'country_code' => 'US'],\n            ['name' => 'Sunjiayan', 'country_code' => 'CN'],\n            ['name' => 'Lorsch', 'country_code' => 'DE'],\n            ['name' => 'Bridport', 'country_code' => 'GB'],\n            ['name' => 'Hosbach', 'country_code' => 'DE'],\n            ['name' => 'San Martino di Lupari', 'country_code' => 'IT'],\n            ['name' => 'Santa Luzia', 'country_code' => 'BR'],\n            ['name' => 'Adams', 'country_code' => 'US'],\n            ['name' => 'Talne', 'country_code' => 'UA'],\n            ['name' => 'San Marco in Lamis', 'country_code' => 'IT'],\n            ['name' => 'Cajabamba', 'country_code' => 'PE'],\n            ['name' => 'Mirabela', 'country_code' => 'BR'],\n            ['name' => 'Trogir', 'country_code' => 'HR'],\n            ['name' => 'Crevalcore', 'country_code' => 'IT'],\n            ['name' => 'Kirchheim bei Munchen', 'country_code' => 'DE'],\n            ['name' => 'Afir', 'country_code' => 'DZ'],\n            ['name' => 'Rio de Contas', 'country_code' => 'BR'],\n            ['name' => 'Broxburn', 'country_code' => 'GB'],\n            ['name' => 'Montefiascone', 'country_code' => 'IT'],\n            ['name' => 'Zelzate', 'country_code' => 'BE'],\n            ['name' => 'Vicovu de Sus', 'country_code' => 'RO'],\n            ['name' => 'Samorin', 'country_code' => 'SK'],\n            ['name' => 'Beverstedt', 'country_code' => 'DE'],\n            ['name' => 'Saint-Martin-de-Crau', 'country_code' => 'FR'],\n            ['name' => 'Kastoria', 'country_code' => 'GR'],\n            ['name' => 'Hersham', 'country_code' => 'GB'],\n            ['name' => 'Soddy-Daisy', 'country_code' => 'US'],\n            ['name' => 'Melilli', 'country_code' => 'IT'],\n            ['name' => 'Terra Boa', 'country_code' => 'BR'],\n            ['name' => 'Moberly', 'country_code' => 'US'],\n            ['name' => 'Plougastel-Daoulas', 'country_code' => 'FR'],\n            ['name' => 'Bacup', 'country_code' => 'GB'],\n            ['name' => 'Port Clinton', 'country_code' => 'US'],\n            ['name' => 'Zhukovo', 'country_code' => 'RU'],\n            ['name' => 'Hochstadt an der Aisch', 'country_code' => 'DE'],\n            ['name' => 'Canton', 'country_code' => 'US'],\n            ['name' => 'Agua Blanca', 'country_code' => 'GT'],\n            ['name' => 'San Javier', 'country_code' => 'AR'],\n            ['name' => 'Aguas Vermelhas', 'country_code' => 'BR'],\n            ['name' => 'Grez-Doiceau', 'country_code' => 'BE'],\n            ['name' => 'San Gennaro Vesuviano', 'country_code' => 'IT'],\n            ['name' => 'Waianae', 'country_code' => 'US'],\n            ['name' => 'Qingxicun', 'country_code' => 'CN'],\n            ['name' => 'Vadnais Heights', 'country_code' => 'US'],\n            ['name' => 'Wood Dale', 'country_code' => 'US'],\n            ['name' => 'Panukulan', 'country_code' => 'PH'],\n            ['name' => 'Montespertoli', 'country_code' => 'IT'],\n            ['name' => 'Haaren', 'country_code' => 'DE'],\n            ['name' => 'Brecksville', 'country_code' => 'US'],\n            ['name' => 'Wolsztyn', 'country_code' => 'PL'],\n            ['name' => 'Frias', 'country_code' => 'AR'],\n            ['name' => 'Bad Soden-Salmunster', 'country_code' => 'DE'],\n            ['name' => 'Eichenau', 'country_code' => 'DE'],\n            ['name' => 'Saarwellingen', 'country_code' => 'DE'],\n            ['name' => 'Aghbala', 'country_code' => 'MA'],\n            ['name' => 'Dakit', 'country_code' => 'PH'],\n            ['name' => 'New Providence', 'country_code' => 'US'],\n            ['name' => 'Maribondo', 'country_code' => 'BR'],\n            ['name' => 'Radnevo', 'country_code' => 'BG'],\n            ['name' => 'Betanzos', 'country_code' => 'ES'],\n            ['name' => 'Quatis', 'country_code' => 'BR'],\n            ['name' => 'Krumbach', 'country_code' => 'DE'],\n            ['name' => 'Ettenheim', 'country_code' => 'DE'],\n            ['name' => 'Alexandria', 'country_code' => 'BR'],\n            ['name' => 'Kaharlyk', 'country_code' => 'UA'],\n            ['name' => 'El Barco de Valdeorras', 'country_code' => 'ES'],\n            ['name' => 'Shiloh', 'country_code' => 'US'],\n            ['name' => 'Pfullendorf', 'country_code' => 'DE'],\n            ['name' => 'Shangping', 'country_code' => 'CN'],\n            ['name' => 'Rantoul', 'country_code' => 'US'],\n            ['name' => 'High River', 'country_code' => 'CA'],\n            ['name' => 'Colonial Park', 'country_code' => 'US'],\n            ['name' => 'Serra Branca', 'country_code' => 'BR'],\n            ['name' => 'Tomar do Geru', 'country_code' => 'BR'],\n            ['name' => 'Bagulin', 'country_code' => 'PH'],\n            ['name' => 'Drobak', 'country_code' => 'NO'],\n            ['name' => 'Manerbio', 'country_code' => 'IT'],\n            ['name' => 'Tianguistengo', 'country_code' => 'MX'],\n            ['name' => 'Spiez', 'country_code' => 'CH'],\n            ['name' => 'Broadlands', 'country_code' => 'US'],\n            ['name' => 'Marly', 'country_code' => 'FR'],\n            ['name' => 'Shepshed', 'country_code' => 'GB'],\n            ['name' => 'Barra do Ribeiro', 'country_code' => 'BR'],\n            ['name' => 'Presidente Bernardes', 'country_code' => 'BR'],\n            ['name' => 'Boston', 'country_code' => 'PH'],\n            ['name' => 'Cha da Alegria', 'country_code' => 'BR'],\n            ['name' => 'Mqam at Tolba', 'country_code' => 'MA'],\n            ['name' => 'Feldbach', 'country_code' => 'AT'],\n            ['name' => 'Genas', 'country_code' => 'FR'],\n            ['name' => 'Lourdes', 'country_code' => 'FR'],\n            ['name' => 'Mario Campos', 'country_code' => 'BR'],\n            ['name' => 'Kingston', 'country_code' => 'US'],\n            ['name' => 'Talanga', 'country_code' => 'HN'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Hazel Crest', 'country_code' => 'US'],\n            ['name' => 'Price', 'country_code' => 'US'],\n            ['name' => 'Vitry-le-Francois', 'country_code' => 'FR'],\n            ['name' => 'LaBelle', 'country_code' => 'US'],\n            ['name' => 'Arruda dos Vinhos', 'country_code' => 'PT'],\n            ['name' => 'Reeuwijk', 'country_code' => 'NL'],\n            ['name' => 'Trebur', 'country_code' => 'DE'],\n            ['name' => 'Creutzwald', 'country_code' => 'FR'],\n            ['name' => 'Nesebar', 'country_code' => 'BG'],\n            ['name' => 'Panchgani', 'country_code' => 'IN'],\n            ['name' => 'Vernouillet', 'country_code' => 'FR'],\n            ['name' => 'Santa Coloma de Farnes', 'country_code' => 'ES'],\n            ['name' => 'Eloxochitlan', 'country_code' => 'MX'],\n            ['name' => 'Charlton', 'country_code' => 'US'],\n            ['name' => 'Landau an der Isar', 'country_code' => 'DE'],\n            ['name' => 'Carluke', 'country_code' => 'GB'],\n            ['name' => 'Urupes', 'country_code' => 'BR'],\n            ['name' => 'Ilamatlan', 'country_code' => 'MX'],\n            ['name' => 'Chanaral', 'country_code' => 'CL'],\n            ['name' => 'Calderara di Reno', 'country_code' => 'IT'],\n            ['name' => 'Alpena', 'country_code' => 'US'],\n            ['name' => 'Halsteren', 'country_code' => 'NL'],\n            ['name' => 'Knittelfeld', 'country_code' => 'AT'],\n            ['name' => 'Flint', 'country_code' => 'GB'],\n            ['name' => 'Chateaudun', 'country_code' => 'FR'],\n            ['name' => 'Roudnice nad Labem', 'country_code' => 'CZ'],\n            ['name' => 'Loningen', 'country_code' => 'DE'],\n            ['name' => 'Ketsch', 'country_code' => 'DE'],\n            ['name' => 'Manuel Ribas', 'country_code' => 'BR'],\n            ['name' => 'Tezze sul Brenta', 'country_code' => 'IT'],\n            ['name' => 'Patti', 'country_code' => 'IT'],\n            ['name' => 'Ribeirao do Pinhal', 'country_code' => 'BR'],\n            ['name' => 'Busra al Harir', 'country_code' => 'SY'],\n            ['name' => 'Kussnacht', 'country_code' => 'CH'],\n            ['name' => 'Dok Kham Tai', 'country_code' => 'TH'],\n            ['name' => 'Gricignano d Aversa', 'country_code' => 'IT'],\n            ['name' => 'Conway', 'country_code' => 'US'],\n            ['name' => 'Kettering', 'country_code' => 'US'],\n            ['name' => 'Woudenberg', 'country_code' => 'NL'],\n            ['name' => 'Llanes', 'country_code' => 'ES'],\n            ['name' => 'Mayenne', 'country_code' => 'FR'],\n            ['name' => 'Manati', 'country_code' => 'CO'],\n            ['name' => 'Rocky Point', 'country_code' => 'US'],\n            ['name' => 'Ainsdale', 'country_code' => 'GB'],\n            ['name' => 'Kissane Ltouqi', 'country_code' => 'MA'],\n            ['name' => 'Castelnuovo di Verona', 'country_code' => 'IT'],\n            ['name' => 'Loreto', 'country_code' => 'IT'],\n            ['name' => 'Sant Sadurni d Anoia', 'country_code' => 'ES'],\n            ['name' => 'Casale sul Sile', 'country_code' => 'IT'],\n            ['name' => 'Neunkirchen', 'country_code' => 'AT'],\n            ['name' => 'Pervomaysk', 'country_code' => 'RU'],\n            ['name' => 'Lavello', 'country_code' => 'IT'],\n            ['name' => 'Elizabethton', 'country_code' => 'US'],\n            ['name' => 'Ficarazzi', 'country_code' => 'IT'],\n            ['name' => 'Miranorte', 'country_code' => 'BR'],\n            ['name' => 'Wauconda', 'country_code' => 'US'],\n            ['name' => 'Lake Forest Park', 'country_code' => 'US'],\n            ['name' => 'Aconibe', 'country_code' => 'GQ'],\n            ['name' => 'Quattro Castella', 'country_code' => 'IT'],\n            ['name' => 'Gex', 'country_code' => 'FR'],\n            ['name' => 'Ban Chorakhe Samphan', 'country_code' => 'TH'],\n            ['name' => 'Nules', 'country_code' => 'ES'],\n            ['name' => 'Vicuna', 'country_code' => 'CL'],\n            ['name' => 'Schuttorf', 'country_code' => 'DE'],\n            ['name' => 'Brunn am Gebirge', 'country_code' => 'AT'],\n            ['name' => 'Zehdenick', 'country_code' => 'DE'],\n            ['name' => 'Avenal', 'country_code' => 'US'],\n            ['name' => 'Buchloe', 'country_code' => 'DE'],\n            ['name' => 'Fereydunshahr', 'country_code' => 'IR'],\n            ['name' => 'Rogers', 'country_code' => 'US'],\n            ['name' => 'Formello', 'country_code' => 'IT'],\n            ['name' => 'Maasbree', 'country_code' => 'NL'],\n            ['name' => 'Kaspi', 'country_code' => 'GE'],\n            ['name' => 'Marshall', 'country_code' => 'US'],\n            ['name' => 'Mechtras', 'country_code' => 'DZ'],\n            ['name' => 'Rionero in Vulture', 'country_code' => 'IT'],\n            ['name' => 'Champasak', 'country_code' => 'LA'],\n            ['name' => 'Standish', 'country_code' => 'GB'],\n            ['name' => 'Varzea Nova', 'country_code' => 'BR'],\n            ['name' => 'Saint-Orens-de-Gameville', 'country_code' => 'FR'],\n            ['name' => 'Jensen Beach', 'country_code' => 'US'],\n            ['name' => 'Jimboomba', 'country_code' => 'AU'],\n            ['name' => 'Uttoxeter', 'country_code' => 'GB'],\n            ['name' => 'Fruita', 'country_code' => 'US'],\n            ['name' => 'Homosassa Springs', 'country_code' => 'US'],\n            ['name' => 'Severn', 'country_code' => 'CA'],\n            ['name' => 'Paripueira', 'country_code' => 'BR'],\n            ['name' => 'Mutterstadt', 'country_code' => 'DE'],\n            ['name' => 'Friedland', 'country_code' => 'DE'],\n            ['name' => 'Middlesborough', 'country_code' => 'US'],\n            ['name' => 'Bad Durrheim', 'country_code' => 'DE'],\n            ['name' => 'Tahannawt', 'country_code' => 'MA'],\n            ['name' => 'Harnes', 'country_code' => 'FR'],\n            ['name' => 'Costessey', 'country_code' => 'GB'],\n            ['name' => 'Itaguara', 'country_code' => 'BR'],\n            ['name' => 'Les Ponts-de-Ce', 'country_code' => 'FR'],\n            ['name' => 'Wake', 'country_code' => 'JP'],\n            ['name' => 'Wehr', 'country_code' => 'DE'],\n            ['name' => 'Red Oak', 'country_code' => 'US'],\n            ['name' => 'Olivehurst', 'country_code' => 'US'],\n            ['name' => 'Big Bear City', 'country_code' => 'US'],\n            ['name' => 'Aguilar', 'country_code' => 'ES'],\n            ['name' => 'Martinho Campos', 'country_code' => 'BR'],\n            ['name' => 'Pont-Sainte-Maxence', 'country_code' => 'FR'],\n            ['name' => 'Brig-Glis', 'country_code' => 'CH'],\n            ['name' => 'Marion', 'country_code' => 'US'],\n            ['name' => 'Wernau', 'country_code' => 'DE'],\n            ['name' => 'Muisne', 'country_code' => 'EC'],\n            ['name' => 'Rommerskirchen', 'country_code' => 'DE'],\n            ['name' => 'San Jacinto del Cauca', 'country_code' => 'CO'],\n            ['name' => 'Alexandria', 'country_code' => 'GB'],\n            ['name' => 'Khoyniki', 'country_code' => 'BY'],\n            ['name' => 'Fortuna', 'country_code' => 'US'],\n            ['name' => 'Santa Fe', 'country_code' => 'US'],\n            ['name' => 'North Valley', 'country_code' => 'US'],\n            ['name' => 'Chiampo', 'country_code' => 'IT'],\n            ['name' => 'Schinnen', 'country_code' => 'NL'],\n            ['name' => 'Ruza', 'country_code' => 'RU'],\n            ['name' => 'Giporlos', 'country_code' => 'PH'],\n            ['name' => 'Tagoloan', 'country_code' => 'PH'],\n            ['name' => 'Lindale', 'country_code' => 'US'],\n            ['name' => 'Oboyan', 'country_code' => 'RU'],\n            ['name' => 'Verona', 'country_code' => 'US'],\n            ['name' => 'Capaci', 'country_code' => 'IT'],\n            ['name' => 'Akhty', 'country_code' => 'RU'],\n            ['name' => 'Keerbergen', 'country_code' => 'BE'],\n            ['name' => 'Englewood', 'country_code' => 'US'],\n            ['name' => 'Lakeland South', 'country_code' => 'US'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Le Relecq-Kerhuon', 'country_code' => 'FR'],\n            ['name' => 'Jasper', 'country_code' => 'US'],\n            ['name' => 'Golyshmanovo', 'country_code' => 'RU'],\n            ['name' => 'Balchik', 'country_code' => 'BG'],\n            ['name' => 'Short Hills', 'country_code' => 'US'],\n            ['name' => 'Calcinaia', 'country_code' => 'IT'],\n            ['name' => 'Huron', 'country_code' => 'US'],\n            ['name' => 'Arroio do Tigre', 'country_code' => 'BR'],\n            ['name' => 'Amilly', 'country_code' => 'FR'],\n            ['name' => 'Itapui', 'country_code' => 'BR'],\n            ['name' => 'Tauberbischofsheim', 'country_code' => 'DE'],\n            ['name' => 'El Tabo', 'country_code' => 'CL'],\n            ['name' => 'Sault Ste. Marie', 'country_code' => 'US'],\n            ['name' => 'Nemours', 'country_code' => 'FR'],\n            ['name' => 'Bollnas', 'country_code' => 'SE'],\n            ['name' => 'Te Awamutu', 'country_code' => 'NZ'],\n            ['name' => 'Saka', 'country_code' => 'JP'],\n            ['name' => 'Serrolandia', 'country_code' => 'BR'],\n            ['name' => 'Espita', 'country_code' => 'MX'],\n            ['name' => 'Qigexingcun', 'country_code' => 'CN'],\n            ['name' => 'Plattling', 'country_code' => 'DE'],\n            ['name' => 'Colac', 'country_code' => 'AU'],\n            ['name' => 'Mijdrecht', 'country_code' => 'NL'],\n            ['name' => 'Paso de los Toros', 'country_code' => 'UY'],\n            ['name' => 'Andover', 'country_code' => 'US'],\n            ['name' => 'Rosas', 'country_code' => 'CO'],\n            ['name' => 'Santa Maria a Monte', 'country_code' => 'IT'],\n            ['name' => 'Buchs', 'country_code' => 'CH'],\n            ['name' => 'Luis Antonio', 'country_code' => 'BR'],\n            ['name' => 'Dossenheim', 'country_code' => 'DE'],\n            ['name' => 'Gmunden', 'country_code' => 'AT'],\n            ['name' => 'Zelenodolsk', 'country_code' => 'UA'],\n            ['name' => 'Matsushima', 'country_code' => 'JP'],\n            ['name' => 'Brookside', 'country_code' => 'US'],\n            ['name' => 'Sison', 'country_code' => 'PH'],\n            ['name' => 'Veyrier', 'country_code' => 'CH'],\n            ['name' => 'South Park Township', 'country_code' => 'US'],\n            ['name' => 'South Park', 'country_code' => 'US'],\n            ['name' => 'Arara', 'country_code' => 'BR'],\n            ['name' => 'Tachov', 'country_code' => 'CZ'],\n            ['name' => 'Mountain Park', 'country_code' => 'US'],\n            ['name' => 'Carpenedolo', 'country_code' => 'IT'],\n            ['name' => 'Ubstadt-Weiher', 'country_code' => 'DE'],\n            ['name' => 'Varazze', 'country_code' => 'IT'],\n            ['name' => 'Gourock', 'country_code' => 'GB'],\n            ['name' => 'Shanyincun', 'country_code' => 'CN'],\n            ['name' => 'Carpinteria', 'country_code' => 'US'],\n            ['name' => 'Grimstad', 'country_code' => 'NO'],\n            ['name' => 'Gueret', 'country_code' => 'FR'],\n            ['name' => 'Mogeiro', 'country_code' => 'BR'],\n            ['name' => 'Joaquin V. Gonzalez', 'country_code' => 'AR'],\n            ['name' => 'San Jose de Maipo', 'country_code' => 'CL'],\n            ['name' => 'Besigheim', 'country_code' => 'DE'],\n            ['name' => 'Glenn Heights', 'country_code' => 'US'],\n            ['name' => 'Pegnitz', 'country_code' => 'DE'],\n            ['name' => 'Ribeira Brava', 'country_code' => 'PT'],\n            ['name' => 'Powell', 'country_code' => 'US'],\n            ['name' => 'Sainte-Sophie', 'country_code' => 'CA'],\n            ['name' => 'Itagi', 'country_code' => 'BR'],\n            ['name' => 'Palombara Sabina', 'country_code' => 'IT'],\n            ['name' => 'Cavallino', 'country_code' => 'IT'],\n            ['name' => 'Autun', 'country_code' => 'FR'],\n            ['name' => 'Plouzane', 'country_code' => 'FR'],\n            ['name' => 'Friesenheim', 'country_code' => 'DE'],\n            ['name' => 'Rodental', 'country_code' => 'DE'],\n            ['name' => 'Wasserburg am Inn', 'country_code' => 'DE'],\n            ['name' => 'Lyndhurst', 'country_code' => 'US'],\n            ['name' => 'North Walsham', 'country_code' => 'GB'],\n            ['name' => 'Cesky Krumlov', 'country_code' => 'CZ'],\n            ['name' => 'Artondale', 'country_code' => 'US'],\n            ['name' => 'Yakage', 'country_code' => 'JP'],\n            ['name' => 'Glenn Dale', 'country_code' => 'US'],\n            ['name' => 'Western Springs', 'country_code' => 'US'],\n            ['name' => 'Okmulgee', 'country_code' => 'US'],\n            ['name' => 'Luderitz', 'country_code' => 'NA'],\n            ['name' => 'Campo de Criptana', 'country_code' => 'ES'],\n            ['name' => 'DeRidder', 'country_code' => 'US'],\n            ['name' => 'Sarria', 'country_code' => 'ES'],\n            ['name' => 'Azle', 'country_code' => 'US'],\n            ['name' => 'Newtown', 'country_code' => 'US'],\n            ['name' => 'Bugugoucun', 'country_code' => 'CN'],\n            ['name' => 'Vidalia', 'country_code' => 'US'],\n            ['name' => 'Swansea', 'country_code' => 'US'],\n            ['name' => 'Moss Point', 'country_code' => 'US'],\n            ['name' => 'Nordestina', 'country_code' => 'BR'],\n            ['name' => 'Fort Morgan', 'country_code' => 'US'],\n            ['name' => 'Moissac', 'country_code' => 'FR'],\n            ['name' => 'Itirucu', 'country_code' => 'BR'],\n            ['name' => 'Dardenne Prairie', 'country_code' => 'US'],\n            ['name' => 'Sudbury', 'country_code' => 'GB'],\n            ['name' => 'Tanagura', 'country_code' => 'JP'],\n            ['name' => 'Castiglion Fiorentino', 'country_code' => 'IT'],\n            ['name' => 'Bischwiller', 'country_code' => 'FR'],\n            ['name' => 'Bad Salzdetfurth', 'country_code' => 'DE'],\n            ['name' => 'Moorreesburg', 'country_code' => 'ZA'],\n            ['name' => 'Porto Recanati', 'country_code' => 'IT'],\n            ['name' => 'Jitauna', 'country_code' => 'BR'],\n            ['name' => 'As', 'country_code' => 'CZ'],\n            ['name' => 'Ubach over Worms', 'country_code' => 'NL'],\n            ['name' => 'Trebaseleghe', 'country_code' => 'IT'],\n            ['name' => 'River Ridge', 'country_code' => 'US'],\n            ['name' => 'Neustadt', 'country_code' => 'DE'],\n            ['name' => 'Kasumkent', 'country_code' => 'RU'],\n            ['name' => 'Newark', 'country_code' => 'US'],\n            ['name' => 'Cremlingen', 'country_code' => 'DE'],\n            ['name' => 'Dinklage', 'country_code' => 'DE'],\n            ['name' => 'Aubergenville', 'country_code' => 'FR'],\n            ['name' => 'Van Buren', 'country_code' => 'US'],\n            ['name' => 'Sitio do Mato', 'country_code' => 'BR'],\n            ['name' => 'Retirolandia', 'country_code' => 'BR'],\n            ['name' => 'Puerto San Martin', 'country_code' => 'AR'],\n            ['name' => 'Buenos Aires', 'country_code' => 'BR'],\n            ['name' => 'Nong Khae', 'country_code' => 'TH'],\n            ['name' => 'Tocumbo', 'country_code' => 'MX'],\n            ['name' => 'Medway', 'country_code' => 'US'],\n            ['name' => 'Reggada', 'country_code' => 'MA'],\n            ['name' => 'Mounds View', 'country_code' => 'US'],\n            ['name' => 'Dalby', 'country_code' => 'AU'],\n            ['name' => 'Boudenib', 'country_code' => 'MA'],\n            ['name' => 'Chiroqchi', 'country_code' => 'UZ'],\n            ['name' => 'Imbau', 'country_code' => 'BR'],\n            ['name' => 'Jefferson', 'country_code' => 'US'],\n            ['name' => 'Saint-Charles-Borromee', 'country_code' => 'CA'],\n            ['name' => 'Zella-Mehlis', 'country_code' => 'DE'],\n            ['name' => 'Kerepestarcsa', 'country_code' => 'HU'],\n            ['name' => 'Capo d Orlando', 'country_code' => 'IT'],\n            ['name' => 'Hullhorst', 'country_code' => 'DE'],\n            ['name' => 'Velen', 'country_code' => 'DE'],\n            ['name' => 'Carros', 'country_code' => 'FR'],\n            ['name' => 'Nosivka', 'country_code' => 'UA'],\n            ['name' => 'Berkeley Heights', 'country_code' => 'US'],\n            ['name' => 'Portage La Prairie', 'country_code' => 'CA'],\n            ['name' => 'Cocotitlan', 'country_code' => 'MX'],\n            ['name' => 'Ruti', 'country_code' => 'CH'],\n            ['name' => 'Wiesmoor', 'country_code' => 'DE'],\n            ['name' => 'Santo Nino', 'country_code' => 'PH'],\n            ['name' => 'Usumatlan', 'country_code' => 'GT'],\n            ['name' => 'Rochester', 'country_code' => 'US'],\n            ['name' => 'Solana Beach', 'country_code' => 'US'],\n            ['name' => 'Borodyanka', 'country_code' => 'UA'],\n            ['name' => 'Kiiminki', 'country_code' => 'FI'],\n            ['name' => 'Sendenhorst', 'country_code' => 'DE'],\n            ['name' => 'Nesconset', 'country_code' => 'US'],\n            ['name' => 'Richton Park', 'country_code' => 'US'],\n            ['name' => 'Franconia', 'country_code' => 'US'],\n            ['name' => 'Seravezza', 'country_code' => 'IT'],\n            ['name' => 'Mogocha', 'country_code' => 'RU'],\n            ['name' => 'Montegranaro', 'country_code' => 'IT'],\n            ['name' => 'Slobozhanske', 'country_code' => 'UA'],\n            ['name' => 'Beyla', 'country_code' => 'GN'],\n            ['name' => 'Calcinato', 'country_code' => 'IT'],\n            ['name' => 'Svirsk', 'country_code' => 'RU'],\n            ['name' => 'Trzebnica', 'country_code' => 'PL'],\n            ['name' => 'Comines', 'country_code' => 'FR'],\n            ['name' => 'Cairo Montenotte', 'country_code' => 'IT'],\n            ['name' => 'Herbrechtingen', 'country_code' => 'DE'],\n            ['name' => 'Mahao', 'country_code' => 'CN'],\n            ['name' => 'Palos Verdes Estates', 'country_code' => 'US'],\n            ['name' => 'Pontecorvo', 'country_code' => 'IT'],\n            ['name' => 'Manching', 'country_code' => 'DE'],\n            ['name' => 'Chulumani', 'country_code' => 'BO'],\n            ['name' => 'Ulvila', 'country_code' => 'FI'],\n            ['name' => 'Novouzensk', 'country_code' => 'RU'],\n            ['name' => 'Esneux', 'country_code' => 'BE'],\n            ['name' => 'Gvardeysk', 'country_code' => 'RU'],\n            ['name' => 'El Kansera', 'country_code' => 'MA'],\n            ['name' => 'Richland', 'country_code' => 'US'],\n            ['name' => 'San Biagio di Callalta', 'country_code' => 'IT'],\n            ['name' => 'Woodinville', 'country_code' => 'US'],\n            ['name' => 'Serra Azul', 'country_code' => 'BR'],\n            ['name' => 'Leonforte', 'country_code' => 'IT'],\n            ['name' => 'Bergen', 'country_code' => 'NL'],\n            ['name' => 'Sillamae', 'country_code' => 'EE'],\n            ['name' => 'Ostringen', 'country_code' => 'DE'],\n            ['name' => 'Agdangan', 'country_code' => 'PH'],\n            ['name' => 'Manorville', 'country_code' => 'US'],\n            ['name' => 'Damaishan', 'country_code' => 'CN'],\n            ['name' => 'Tamahu', 'country_code' => 'GT'],\n            ['name' => 'Apricena', 'country_code' => 'IT'],\n            ['name' => 'Beverungen', 'country_code' => 'DE'],\n            ['name' => 'Bellefontaine', 'country_code' => 'US'],\n            ['name' => 'Andkhoy', 'country_code' => 'AF'],\n            ['name' => 'Lapinig', 'country_code' => 'PH'],\n            ['name' => 'Timberlake', 'country_code' => 'US'],\n            ['name' => 'Kent', 'country_code' => 'US'],\n            ['name' => 'Morbegno', 'country_code' => 'IT'],\n            ['name' => 'Chigwell', 'country_code' => 'GB'],\n            ['name' => 'Sabinov', 'country_code' => 'SK'],\n            ['name' => 'Ban Tat', 'country_code' => 'TH'],\n            ['name' => 'Al Muzayrib', 'country_code' => 'SY'],\n            ['name' => 'Picana', 'country_code' => 'ES'],\n            ['name' => 'Channahon', 'country_code' => 'US'],\n            ['name' => 'Port Royal', 'country_code' => 'US'],\n            ['name' => 'Verona', 'country_code' => 'US'],\n            ['name' => 'Ceyu', 'country_code' => 'CN'],\n            ['name' => 'Plaza Huincul', 'country_code' => 'AR'],\n            ['name' => 'Bensville', 'country_code' => 'US'],\n            ['name' => 'Ocna Mures', 'country_code' => 'RO'],\n            ['name' => 'Bolintin Vale', 'country_code' => 'RO'],\n            ['name' => 'Rossdorf', 'country_code' => 'DE'],\n            ['name' => 'Clayton', 'country_code' => 'US'],\n            ['name' => 'East Islip', 'country_code' => 'US'],\n            ['name' => 'Affoltern am Albis', 'country_code' => 'CH'],\n            ['name' => 'Odoorn', 'country_code' => 'NL'],\n            ['name' => 'Razlog', 'country_code' => 'BG'],\n            ['name' => 'Raffadali', 'country_code' => 'IT'],\n            ['name' => 'Vila Pouca de Aguiar', 'country_code' => 'PT'],\n            ['name' => 'Weilburg', 'country_code' => 'DE'],\n            ['name' => 'Vasylivka', 'country_code' => 'UA'],\n            ['name' => 'Uropa', 'country_code' => 'BR'],\n            ['name' => 'Stamboliyski', 'country_code' => 'BG'],\n            ['name' => 'Asjen', 'country_code' => 'MA'],\n            ['name' => 'New Ulm', 'country_code' => 'US'],\n            ['name' => 'La Queue-en-Brie', 'country_code' => 'FR'],\n            ['name' => 'Farmington', 'country_code' => 'US'],\n            ['name' => 'Harrow on the Hill', 'country_code' => 'GB'],\n            ['name' => 'Nova Londrina', 'country_code' => 'BR'],\n            ['name' => 'Monteux', 'country_code' => 'FR'],\n            ['name' => 'Somain', 'country_code' => 'FR'],\n            ['name' => 'Barsbuttel', 'country_code' => 'DE'],\n            ['name' => 'Ansiao', 'country_code' => 'PT'],\n            ['name' => 'Bridgnorth', 'country_code' => 'GB'],\n            ['name' => 'Miranda do Corvo', 'country_code' => 'PT'],\n            ['name' => 'Barrafranca', 'country_code' => 'IT'],\n            ['name' => 'Balatonfured', 'country_code' => 'HU'],\n            ['name' => 'Oncativo', 'country_code' => 'AR'],\n            ['name' => 'Tatarikan', 'country_code' => 'PH'],\n            ['name' => 'Jurua', 'country_code' => 'BR'],\n            ['name' => 'Huguan Nongchang', 'country_code' => 'CN'],\n            ['name' => 'Yzeure', 'country_code' => 'FR'],\n            ['name' => 'Belev', 'country_code' => 'RU'],\n            ['name' => 'Newington', 'country_code' => 'US'],\n            ['name' => 'Spilamberto', 'country_code' => 'IT'],\n            ['name' => 'Baker', 'country_code' => 'US'],\n            ['name' => 'Mazatlan Villa de Flores', 'country_code' => 'MX'],\n            ['name' => 'Thames Centre', 'country_code' => 'CA'],\n            ['name' => 'Alora', 'country_code' => 'ES'],\n            ['name' => 'Presidente Janio Quadros', 'country_code' => 'BR'],\n            ['name' => 'Krasnozavodsk', 'country_code' => 'RU'],\n            ['name' => 'Ceuti', 'country_code' => 'ES'],\n            ['name' => 'Yvetot', 'country_code' => 'FR'],\n            ['name' => 'Monte Belo', 'country_code' => 'BR'],\n            ['name' => 'Cedar Lake', 'country_code' => 'US'],\n            ['name' => 'Singuilucan', 'country_code' => 'MX'],\n            ['name' => 'Globe', 'country_code' => 'US'],\n            ['name' => 'Newton', 'country_code' => 'US'],\n            ['name' => 'Uyar', 'country_code' => 'RU'],\n            ['name' => 'Wolfhagen', 'country_code' => 'DE'],\n            ['name' => 'Sankt Georgen im Schwarzwald', 'country_code' => 'DE'],\n            ['name' => 'Campiglia Marittima', 'country_code' => 'IT'],\n            ['name' => 'Warrenville', 'country_code' => 'US'],\n            ['name' => 'Banos', 'country_code' => 'EC'],\n            ['name' => 'Barentin', 'country_code' => 'FR'],\n            ['name' => 'Abrera', 'country_code' => 'ES'],\n            ['name' => 'Lower Moreland', 'country_code' => 'US'],\n            ['name' => 'Terrasini Favarotta', 'country_code' => 'IT'],\n            ['name' => 'Mississippi Mills', 'country_code' => 'CA'],\n            ['name' => 'Bonyhad', 'country_code' => 'HU'],\n            ['name' => 'Schleiden', 'country_code' => 'DE'],\n            ['name' => 'Spreitenbach', 'country_code' => 'CH'],\n            ['name' => 'Monteprandone', 'country_code' => 'IT'],\n            ['name' => 'Zabaykalsk', 'country_code' => 'RU'],\n            ['name' => 'Luis Alves', 'country_code' => 'BR'],\n            ['name' => 'Hockessin', 'country_code' => 'US'],\n            ['name' => 'Powell River', 'country_code' => 'CA'],\n            ['name' => 'Sete Barras', 'country_code' => 'BR'],\n            ['name' => 'Waltershausen', 'country_code' => 'DE'],\n            ['name' => 'Velykodolynske', 'country_code' => 'UA'],\n            ['name' => 'Petushki', 'country_code' => 'RU'],\n            ['name' => 'L Union', 'country_code' => 'FR'],\n            ['name' => 'Rendon', 'country_code' => 'US'],\n            ['name' => 'South Glengarry', 'country_code' => 'CA'],\n            ['name' => 'Adygeysk', 'country_code' => 'RU'],\n            ['name' => 'Noeux-les-Mines', 'country_code' => 'FR'],\n            ['name' => 'Sidi Yahia', 'country_code' => 'MA'],\n            ['name' => 'Hajdusamson', 'country_code' => 'HU'],\n            ['name' => 'Balneario do Rincao', 'country_code' => 'BR'],\n            ['name' => 'Adi Keyh', 'country_code' => 'ER'],\n            ['name' => 'Sandpoint', 'country_code' => 'US'],\n            ['name' => 'Loveland', 'country_code' => 'US'],\n            ['name' => 'Missoes', 'country_code' => 'BR'],\n            ['name' => 'Bedburg', 'country_code' => 'DE'],\n            ['name' => 'Yavoriv', 'country_code' => 'UA'],\n            ['name' => 'Raymond Terrace', 'country_code' => 'AU'],\n            ['name' => 'Bolsover', 'country_code' => 'GB'],\n            ['name' => 'Avigliana', 'country_code' => 'IT'],\n            ['name' => 'Trenton', 'country_code' => 'US'],\n            ['name' => 'Sali', 'country_code' => 'DZ'],\n            ['name' => 'Izium', 'country_code' => 'UA'],\n            ['name' => 'Tapiratiba', 'country_code' => 'BR'],\n            ['name' => 'Qulan', 'country_code' => 'KZ'],\n            ['name' => 'Abaran', 'country_code' => 'ES'],\n            ['name' => 'Strunino', 'country_code' => 'RU'],\n            ['name' => 'Coolidge', 'country_code' => 'US'],\n            ['name' => 'North Perth', 'country_code' => 'CA'],\n            ['name' => 'Kaspiyskiy', 'country_code' => 'RU'],\n            ['name' => 'North Palm Beach', 'country_code' => 'US'],\n            ['name' => 'Piratininga', 'country_code' => 'BR'],\n            ['name' => 'Schodack', 'country_code' => 'US'],\n            ['name' => 'Balsa Nova', 'country_code' => 'BR'],\n            ['name' => 'Seclin', 'country_code' => 'FR'],\n            ['name' => 'Pine', 'country_code' => 'US'],\n            ['name' => 'Mercier', 'country_code' => 'CA'],\n            ['name' => 'Stoughton', 'country_code' => 'US'],\n            ['name' => 'Mount Vernon', 'country_code' => 'US'],\n            ['name' => 'Milha', 'country_code' => 'BR'],\n            ['name' => 'South Stormont', 'country_code' => 'CA'],\n            ['name' => 'Aubenas', 'country_code' => 'FR'],\n            ['name' => 'Warrensville Heights', 'country_code' => 'US'],\n            ['name' => 'Nossa Senhora do Livramento', 'country_code' => 'BR'],\n            ['name' => 'Olen', 'country_code' => 'BE'],\n            ['name' => 'Scheessel', 'country_code' => 'DE'],\n            ['name' => 'Barssel', 'country_code' => 'DE'],\n            ['name' => 'Worthington', 'country_code' => 'US'],\n            ['name' => 'Plover', 'country_code' => 'US'],\n            ['name' => 'Villecresnes', 'country_code' => 'FR'],\n            ['name' => 'Goiatins', 'country_code' => 'BR'],\n            ['name' => 'Arcachon', 'country_code' => 'FR'],\n            ['name' => 'Martinsville', 'country_code' => 'US'],\n            ['name' => 'Ksar Sghir', 'country_code' => 'MA'],\n            ['name' => 'Honggu', 'country_code' => 'CN'],\n            ['name' => 'Chos Malal', 'country_code' => 'AR'],\n            ['name' => 'Wickede', 'country_code' => 'DE'],\n            ['name' => 'Song Phi Nong', 'country_code' => 'TH'],\n            ['name' => 'Ciudad Insurgentes', 'country_code' => 'MX'],\n            ['name' => 'Mahomet', 'country_code' => 'US'],\n            ['name' => 'Oftersheim', 'country_code' => 'DE'],\n            ['name' => 'Olfen', 'country_code' => 'DE'],\n            ['name' => 'Lagoa Dourada', 'country_code' => 'BR'],\n            ['name' => 'Tonosho', 'country_code' => 'JP'],\n            ['name' => 'Governador Dix-Sept Rosado', 'country_code' => 'BR'],\n            ['name' => 'Superior', 'country_code' => 'US'],\n            ['name' => 'Oxford', 'country_code' => 'US'],\n            ['name' => 'Sarrebourg', 'country_code' => 'FR'],\n            ['name' => 'Antonio Prado', 'country_code' => 'BR'],\n            ['name' => 'Cusset', 'country_code' => 'FR'],\n            ['name' => 'Noceto', 'country_code' => 'IT'],\n            ['name' => 'Lone Tree', 'country_code' => 'US'],\n            ['name' => 'Montgomeryville', 'country_code' => 'US'],\n            ['name' => 'Bagnolo Mella', 'country_code' => 'IT'],\n            ['name' => 'East Greenwich', 'country_code' => 'US'],\n            ['name' => 'South Daytona', 'country_code' => 'US'],\n            ['name' => 'Saint-Colomban', 'country_code' => 'CA'],\n            ['name' => 'Macara', 'country_code' => 'EC'],\n            ['name' => 'Claye-Souilly', 'country_code' => 'FR'],\n            ['name' => 'Riverdale', 'country_code' => 'US'],\n            ['name' => 'Pingtiancun', 'country_code' => 'CN'],\n            ['name' => 'Lumberton', 'country_code' => 'US'],\n            ['name' => 'Villas', 'country_code' => 'US'],\n            ['name' => 'York', 'country_code' => 'US'],\n            ['name' => 'Brenes', 'country_code' => 'ES'],\n            ['name' => 'Herzberg am Harz', 'country_code' => 'DE'],\n            ['name' => 'Sebt Bni Garfett', 'country_code' => 'MA'],\n            ['name' => 'Celakovice', 'country_code' => 'CZ'],\n            ['name' => 'Treuchtlingen', 'country_code' => 'DE'],\n            ['name' => 'Moody', 'country_code' => 'US'],\n            ['name' => 'Chernigovka', 'country_code' => 'RU'],\n            ['name' => 'Notodden', 'country_code' => 'NO'],\n            ['name' => 'Frecheirinha', 'country_code' => 'BR'],\n            ['name' => 'McPherson', 'country_code' => 'US'],\n            ['name' => 'Stolin', 'country_code' => 'BY'],\n            ['name' => 'Alaverdi', 'country_code' => 'AM'],\n            ['name' => 'Tetiiv', 'country_code' => 'UA'],\n            ['name' => 'Hersbruck', 'country_code' => 'DE'],\n            ['name' => 'Auriol', 'country_code' => 'FR'],\n            ['name' => 'Vieira do Minho', 'country_code' => 'PT'],\n            ['name' => 'Rothenbach an der Pegnitz', 'country_code' => 'DE'],\n            ['name' => 'Lacombe', 'country_code' => 'CA'],\n            ['name' => 'Honiton', 'country_code' => 'GB'],\n            ['name' => 'Alcacer do Sal', 'country_code' => 'PT'],\n            ['name' => 'Fort Lewis', 'country_code' => 'US'],\n            ['name' => 'Davidson', 'country_code' => 'US'],\n            ['name' => 'Edgewood', 'country_code' => 'US'],\n            ['name' => 'Kaji', 'country_code' => 'CN'],\n            ['name' => 'Suamico', 'country_code' => 'US'],\n            ['name' => 'Borgo San Dalmazzo', 'country_code' => 'IT'],\n            ['name' => 'La Chapelle-Saint-Luc', 'country_code' => 'FR'],\n            ['name' => 'San Marino', 'country_code' => 'US'],\n            ['name' => 'Spring Garden', 'country_code' => 'US'],\n            ['name' => 'Senador Jose Porfirio', 'country_code' => 'BR'],\n            ['name' => 'Esperance', 'country_code' => 'AU'],\n            ['name' => 'Turvo', 'country_code' => 'BR'],\n            ['name' => 'Santo Stino di Livenza', 'country_code' => 'IT'],\n            ['name' => 'Parigi', 'country_code' => 'IN'],\n            ['name' => 'Muswellbrook', 'country_code' => 'AU'],\n            ['name' => 'Carnaubeira da Penha', 'country_code' => 'BR'],\n            ['name' => 'Capul', 'country_code' => 'PH'],\n            ['name' => 'Tabocas do Brejo Velho', 'country_code' => 'BR'],\n            ['name' => 'Gartringen', 'country_code' => 'DE'],\n            ['name' => 'Solofra', 'country_code' => 'IT'],\n            ['name' => 'Trentham', 'country_code' => 'GB'],\n            ['name' => 'Portland', 'country_code' => 'US'],\n            ['name' => 'Argentona', 'country_code' => 'ES'],\n            ['name' => 'Bou Adel', 'country_code' => 'MA'],\n            ['name' => 'Maktar', 'country_code' => 'TN'],\n            ['name' => 'Shiwan', 'country_code' => 'CN'],\n            ['name' => 'Anolaima', 'country_code' => 'CO'],\n            ['name' => 'Strand', 'country_code' => 'NO'],\n            ['name' => 'Palleja', 'country_code' => 'ES'],\n            ['name' => 'Morungaba', 'country_code' => 'BR'],\n            ['name' => 'Huai Yot', 'country_code' => 'TH'],\n            ['name' => 'Fort Drum', 'country_code' => 'US'],\n            ['name' => 'Bonneville', 'country_code' => 'FR'],\n            ['name' => 'Colesberg', 'country_code' => 'ZA'],\n            ['name' => 'Trezzo sull Adda', 'country_code' => 'IT'],\n            ['name' => 'West Bradford', 'country_code' => 'US'],\n            ['name' => 'Graulhet', 'country_code' => 'FR'],\n            ['name' => 'Bni Khloug', 'country_code' => 'MA'],\n            ['name' => 'Wanderley', 'country_code' => 'BR'],\n            ['name' => 'Teror', 'country_code' => 'ES'],\n            ['name' => 'Chatham', 'country_code' => 'US'],\n            ['name' => 'Divnoye', 'country_code' => 'RU'],\n            ['name' => 'Oulad Rahmoun', 'country_code' => 'MA'],\n            ['name' => 'Amity', 'country_code' => 'US'],\n            ['name' => 'Chaiyo', 'country_code' => 'TH'],\n            ['name' => 'Amboise', 'country_code' => 'FR'],\n            ['name' => 'Flexeiras', 'country_code' => 'BR'],\n            ['name' => 'Kanel', 'country_code' => 'SN'],\n            ['name' => 'Lakeland Village', 'country_code' => 'US'],\n            ['name' => 'Sooke', 'country_code' => 'CA'],\n            ['name' => 'Bruay-sur-l Escaut', 'country_code' => 'FR'],\n            ['name' => 'Borgaro Torinese', 'country_code' => 'IT'],\n            ['name' => 'Marianske Lazne', 'country_code' => 'CZ'],\n            ['name' => 'Bellefonte', 'country_code' => 'US'],\n            ['name' => 'Kaufungen', 'country_code' => 'DE'],\n            ['name' => 'Rozhyshche', 'country_code' => 'UA'],\n            ['name' => 'Haselunne', 'country_code' => 'DE'],\n            ['name' => 'Wolverton', 'country_code' => 'GB'],\n            ['name' => 'Teutschenthal', 'country_code' => 'DE'],\n            ['name' => 'Brzeg Dolny', 'country_code' => 'PL'],\n            ['name' => 'Mercogliano', 'country_code' => 'IT'],\n            ['name' => 'Fene', 'country_code' => 'ES'],\n            ['name' => 'Tapilula', 'country_code' => 'MX'],\n            ['name' => 'Forest Hill', 'country_code' => 'US'],\n            ['name' => 'Piketberg', 'country_code' => 'ZA'],\n            ['name' => 'Borgosesia', 'country_code' => 'IT'],\n            ['name' => 'Itayanagi', 'country_code' => 'JP'],\n            ['name' => 'Gornyak', 'country_code' => 'RU'],\n            ['name' => 'Franeker', 'country_code' => 'NL'],\n            ['name' => 'Montecorvino Rovella', 'country_code' => 'IT'],\n            ['name' => 'Vail', 'country_code' => 'US'],\n            ['name' => 'Licinio de Almeida', 'country_code' => 'BR'],\n            ['name' => 'Peissenberg', 'country_code' => 'DE'],\n            ['name' => 'Pola de Laviana', 'country_code' => 'ES'],\n            ['name' => 'Pianiga', 'country_code' => 'IT'],\n            ['name' => 'Cypress Lake', 'country_code' => 'US'],\n            ['name' => 'Dawson Creek', 'country_code' => 'CA'],\n            ['name' => 'Gladeview', 'country_code' => 'US'],\n            ['name' => 'Schongau', 'country_code' => 'DE'],\n            ['name' => 'Maravilla Tenejapa', 'country_code' => 'MX'],\n            ['name' => 'Tarnos', 'country_code' => 'FR'],\n            ['name' => 'Arrigorriaga', 'country_code' => 'ES'],\n            ['name' => 'Tashi', 'country_code' => 'CN'],\n            ['name' => 'Ulubey', 'country_code' => 'TR'],\n            ['name' => 'Arluno', 'country_code' => 'IT'],\n            ['name' => 'Triel-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Byala Slatina', 'country_code' => 'BG'],\n            ['name' => 'Monte San Giovanni Campano', 'country_code' => 'IT'],\n            ['name' => 'Baras', 'country_code' => 'PH'],\n            ['name' => 'Borger', 'country_code' => 'NL'],\n            ['name' => 'Grave', 'country_code' => 'NL'],\n            ['name' => 'Monfort Heights', 'country_code' => 'US'],\n            ['name' => 'Lipari', 'country_code' => 'IT'],\n            ['name' => 'Braselton', 'country_code' => 'US'],\n            ['name' => 'Syston', 'country_code' => 'GB'],\n            ['name' => 'Lapeer', 'country_code' => 'US'],\n            ['name' => 'Sulingen', 'country_code' => 'DE'],\n            ['name' => 'Yuza', 'country_code' => 'JP'],\n            ['name' => 'Herk-de-Stad', 'country_code' => 'BE'],\n            ['name' => 'Oulad Ouchchih', 'country_code' => 'MA'],\n            ['name' => 'Dunmore', 'country_code' => 'US'],\n            ['name' => 'Crayford', 'country_code' => 'GB'],\n            ['name' => 'Cristais', 'country_code' => 'BR'],\n            ['name' => 'Georgetown', 'country_code' => 'US'],\n            ['name' => 'Flitwick', 'country_code' => 'GB'],\n            ['name' => 'Kittanning', 'country_code' => 'US'],\n            ['name' => 'Lucena', 'country_code' => 'BR'],\n            ['name' => 'Kushk', 'country_code' => 'IR'],\n            ['name' => 'Nova Crixas', 'country_code' => 'BR'],\n            ['name' => 'Santa Margarita', 'country_code' => 'ES'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'Castellbisbal', 'country_code' => 'ES'],\n            ['name' => 'Vocklabruck', 'country_code' => 'AT'],\n            ['name' => 'Ibaretama', 'country_code' => 'BR'],\n            ['name' => 'Ribeirao Bonito', 'country_code' => 'BR'],\n            ['name' => 'Pualas', 'country_code' => 'PH'],\n            ['name' => 'Mar de Espanha', 'country_code' => 'BR'],\n            ['name' => 'Kapelle', 'country_code' => 'NL'],\n            ['name' => 'De Haan', 'country_code' => 'BE'],\n            ['name' => 'Vinings', 'country_code' => 'US'],\n            ['name' => 'Sharon', 'country_code' => 'US'],\n            ['name' => 'Pien', 'country_code' => 'BR'],\n            ['name' => 'Claremont', 'country_code' => 'US'],\n            ['name' => 'Castel Goffredo', 'country_code' => 'IT'],\n            ['name' => 'El Qaa', 'country_code' => 'LB'],\n            ['name' => 'Gerpinnes', 'country_code' => 'BE'],\n            ['name' => 'Batuan', 'country_code' => 'PH'],\n            ['name' => 'Rivarolo Canavese', 'country_code' => 'IT'],\n            ['name' => 'Oakland', 'country_code' => 'US'],\n            ['name' => 'Zhongling', 'country_code' => 'CN'],\n            ['name' => 'Fallsburg', 'country_code' => 'US'],\n            ['name' => 'Brzeziny', 'country_code' => 'PL'],\n            ['name' => 'Lake Country', 'country_code' => 'CA'],\n            ['name' => 'Vel ky Krtis', 'country_code' => 'SK'],\n            ['name' => 'Pfarrkirchen', 'country_code' => 'DE'],\n            ['name' => 'Sao Jose do Campestre', 'country_code' => 'BR'],\n            ['name' => 'Chilca', 'country_code' => 'PE'],\n            ['name' => 'Governador Lindenberg', 'country_code' => 'BR'],\n            ['name' => 'Sim', 'country_code' => 'RU'],\n            ['name' => 'Tinglayan', 'country_code' => 'PH'],\n            ['name' => 'Staryye Atagi', 'country_code' => 'RU'],\n            ['name' => 'Sagay', 'country_code' => 'PH'],\n            ['name' => 'Dorog', 'country_code' => 'HU'],\n            ['name' => 'San Clemente', 'country_code' => 'PH'],\n            ['name' => 'Michendorf', 'country_code' => 'DE'],\n            ['name' => 'Avrig', 'country_code' => 'RO'],\n            ['name' => 'Ergolding', 'country_code' => 'DE'],\n            ['name' => 'Chiatura', 'country_code' => 'GE'],\n            ['name' => 'Frutillar', 'country_code' => 'CL'],\n            ['name' => 'Ban Laem', 'country_code' => 'TH'],\n            ['name' => 'Libertad', 'country_code' => 'PH'],\n            ['name' => 'Verde Village', 'country_code' => 'US'],\n            ['name' => 'Uruoca', 'country_code' => 'BR'],\n            ['name' => 'Malaryta', 'country_code' => 'BY'],\n            ['name' => 'Trent Hills', 'country_code' => 'CA'],\n            ['name' => 'Mockern', 'country_code' => 'DE'],\n            ['name' => 'Sidmouth', 'country_code' => 'GB'],\n            ['name' => 'Lubaczow', 'country_code' => 'PL'],\n            ['name' => 'Kaeng Khoi', 'country_code' => 'TH'],\n            ['name' => 'Le Chambon-Feugerolles', 'country_code' => 'FR'],\n            ['name' => 'Puren', 'country_code' => 'CL'],\n            ['name' => 'Vyazemskiy', 'country_code' => 'RU'],\n            ['name' => 'Lynnfield', 'country_code' => 'US'],\n            ['name' => 'Irondale', 'country_code' => 'US'],\n            ['name' => 'Maglod', 'country_code' => 'HU'],\n            ['name' => 'Tizgane', 'country_code' => 'MA'],\n            ['name' => 'Weinsberg', 'country_code' => 'DE'],\n            ['name' => 'Tierra Amarilla', 'country_code' => 'CL'],\n            ['name' => 'Sainte-Marie', 'country_code' => 'CA'],\n            ['name' => 'Dorking', 'country_code' => 'GB'],\n            ['name' => 'Surkhakhi', 'country_code' => 'RU'],\n            ['name' => 'Kasba Tanora', 'country_code' => 'MA'],\n            ['name' => 'Lake Wylie', 'country_code' => 'US'],\n            ['name' => 'Agutaya', 'country_code' => 'PH'],\n            ['name' => 'Sturgis', 'country_code' => 'US'],\n            ['name' => 'Loganville', 'country_code' => 'US'],\n            ['name' => 'Brugg', 'country_code' => 'CH'],\n            ['name' => 'Bassersdorf', 'country_code' => 'CH'],\n            ['name' => 'Hemsbach', 'country_code' => 'DE'],\n            ['name' => 'San Bartolo', 'country_code' => 'GT'],\n            ['name' => 'Novhorod-Siverskyi', 'country_code' => 'UA'],\n            ['name' => 'Jequeri', 'country_code' => 'BR'],\n            ['name' => 'Salobrena', 'country_code' => 'ES'],\n            ['name' => 'Lawrenceburg', 'country_code' => 'US'],\n            ['name' => 'Sacacoyo', 'country_code' => 'SV'],\n            ['name' => 'Choro', 'country_code' => 'BR'],\n            ['name' => 'Chiquimulilla', 'country_code' => 'GT'],\n            ['name' => 'Lakeland North', 'country_code' => 'US'],\n            ['name' => 'Grumo Appula', 'country_code' => 'IT'],\n            ['name' => 'Cambuquira', 'country_code' => 'BR'],\n            ['name' => 'West Carrollton', 'country_code' => 'US'],\n            ['name' => 'Itaipe', 'country_code' => 'BR'],\n            ['name' => 'Kilindoni', 'country_code' => 'TZ'],\n            ['name' => 'Chorleywood', 'country_code' => 'GB'],\n            ['name' => 'Oxapampa', 'country_code' => 'PE'],\n            ['name' => 'Costa de Caparica', 'country_code' => 'PT'],\n            ['name' => 'Finneytown', 'country_code' => 'US'],\n            ['name' => 'Camabatela', 'country_code' => 'AO'],\n            ['name' => 'Ridge', 'country_code' => 'US'],\n            ['name' => 'Guelph/Eramosa', 'country_code' => 'CA'],\n            ['name' => 'Mostardas', 'country_code' => 'BR'],\n            ['name' => 'Mericourt', 'country_code' => 'FR'],\n            ['name' => 'Glen Carbon', 'country_code' => 'US'],\n            ['name' => 'Arhribs', 'country_code' => 'DZ'],\n            ['name' => 'Sala Consilina', 'country_code' => 'IT'],\n            ['name' => 'Mutia', 'country_code' => 'PH'],\n            ['name' => 'Locri', 'country_code' => 'IT'],\n            ['name' => 'Neuhausen auf den Fildern', 'country_code' => 'DE'],\n            ['name' => 'Bretzfeld', 'country_code' => 'DE'],\n            ['name' => 'Cuisnahuat', 'country_code' => 'SV'],\n            ['name' => 'Ifs', 'country_code' => 'FR'],\n            ['name' => 'Kriftel', 'country_code' => 'DE'],\n            ['name' => 'Bershad', 'country_code' => 'UA'],\n            ['name' => 'Raismes', 'country_code' => 'FR'],\n            ['name' => 'New Hanover', 'country_code' => 'US'],\n            ['name' => 'Marshall', 'country_code' => 'US'],\n            ['name' => 'Medfield', 'country_code' => 'US'],\n            ['name' => 'Berwick-Upon-Tweed', 'country_code' => 'GB'],\n            ['name' => 'Jaromer', 'country_code' => 'CZ'],\n            ['name' => 'Syasstroy', 'country_code' => 'RU'],\n            ['name' => 'Lake Tapps', 'country_code' => 'US'],\n            ['name' => 'Samashki', 'country_code' => 'RU'],\n            ['name' => 'Spearfish', 'country_code' => 'US'],\n            ['name' => 'Silago', 'country_code' => 'PH'],\n            ['name' => 'Mora', 'country_code' => 'SE'],\n            ['name' => 'Limburgerhof', 'country_code' => 'DE'],\n            ['name' => 'Francofonte', 'country_code' => 'IT'],\n            ['name' => 'Plan-de-Cuques', 'country_code' => 'FR'],\n            ['name' => 'East Hampton', 'country_code' => 'US'],\n            ['name' => 'Ujfeherto', 'country_code' => 'HU'],\n            ['name' => 'Gyomaendrod', 'country_code' => 'HU'],\n            ['name' => 'Los Lagos', 'country_code' => 'CL'],\n            ['name' => 'Brignais', 'country_code' => 'FR'],\n            ['name' => 'Truro', 'country_code' => 'CA'],\n            ['name' => 'Steinheim', 'country_code' => 'DE'],\n            ['name' => 'Amos', 'country_code' => 'CA'],\n            ['name' => 'Figline Valdarno', 'country_code' => 'IT'],\n            ['name' => 'Lawaan', 'country_code' => 'PH'],\n            ['name' => 'Souakene', 'country_code' => 'MA'],\n            ['name' => 'Cedartown', 'country_code' => 'US'],\n            ['name' => 'Ban Tom Klang', 'country_code' => 'TH'],\n            ['name' => 'Diebougou', 'country_code' => 'BF'],\n            ['name' => 'Perehinske', 'country_code' => 'UA'],\n            ['name' => 'Dubak', 'country_code' => 'IN'],\n            ['name' => 'Krupka', 'country_code' => 'CZ'],\n            ['name' => 'Pecica', 'country_code' => 'RO'],\n            ['name' => 'Zawiat Moulay Brahim', 'country_code' => 'MA'],\n            ['name' => 'Teroual', 'country_code' => 'MA'],\n            ['name' => 'Provins', 'country_code' => 'FR'],\n            ['name' => 'Gorokhovets', 'country_code' => 'RU'],\n            ['name' => 'Hajduhadhaz', 'country_code' => 'HU'],\n            ['name' => 'Cloquet', 'country_code' => 'US'],\n            ['name' => 'Weigelstown', 'country_code' => 'US'],\n            ['name' => 'Rosario del Tala', 'country_code' => 'AR'],\n            ['name' => 'Betma', 'country_code' => 'IN'],\n            ['name' => 'Lilburn', 'country_code' => 'US'],\n            ['name' => 'South Sioux City', 'country_code' => 'US'],\n            ['name' => 'Simeria', 'country_code' => 'RO'],\n            ['name' => 'Valverde del Camino', 'country_code' => 'ES'],\n            ['name' => 'Maryville', 'country_code' => 'US'],\n            ['name' => 'The Nation / La Nation', 'country_code' => 'CA'],\n            ['name' => 'Taldom', 'country_code' => 'RU'],\n            ['name' => 'Bohmte', 'country_code' => 'DE'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Churchdown', 'country_code' => 'GB'],\n            ['name' => 'Cidade Gaucha', 'country_code' => 'BR'],\n            ['name' => 'Olintla', 'country_code' => 'MX'],\n            ['name' => 'Wawarsing', 'country_code' => 'US'],\n            ['name' => 'Pichilemu', 'country_code' => 'CL'],\n            ['name' => 'Mikashevichy', 'country_code' => 'BY'],\n            ['name' => 'Bamber Bridge', 'country_code' => 'GB'],\n            ['name' => 'Brunswick', 'country_code' => 'US'],\n            ['name' => 'Villafranca de los Barros', 'country_code' => 'ES'],\n            ['name' => 'Iferhounene', 'country_code' => 'DZ'],\n            ['name' => 'Sankt Veit an der Glan', 'country_code' => 'AT'],\n            ['name' => 'Maizieres-les-Metz', 'country_code' => 'FR'],\n            ['name' => 'College', 'country_code' => 'US'],\n            ['name' => 'Fontanafredda', 'country_code' => 'IT'],\n            ['name' => 'Ascot', 'country_code' => 'GB'],\n            ['name' => 'Ashibetsu', 'country_code' => 'JP'],\n            ['name' => 'Wachtersbach', 'country_code' => 'DE'],\n            ['name' => 'L Isle-Adam', 'country_code' => 'FR'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'Pinheiro Machado', 'country_code' => 'BR'],\n            ['name' => 'Linnich', 'country_code' => 'DE'],\n            ['name' => 'Kalyazin', 'country_code' => 'RU'],\n            ['name' => 'Hadamar', 'country_code' => 'DE'],\n            ['name' => 'Santa Ana de Yacuma', 'country_code' => 'BO'],\n            ['name' => 'Laamarna', 'country_code' => 'MA'],\n            ['name' => 'Areal', 'country_code' => 'BR'],\n            ['name' => 'Sao Sebastiao do Uatuma', 'country_code' => 'BR'],\n            ['name' => 'Burj al  Arab', 'country_code' => 'EG'],\n            ['name' => 'Lahaina', 'country_code' => 'US'],\n            ['name' => 'Gibraleon', 'country_code' => 'ES'],\n            ['name' => 'San Francisco de Mostazal', 'country_code' => 'CL'],\n            ['name' => 'Rognac', 'country_code' => 'FR'],\n            ['name' => 'Santiago Amoltepec', 'country_code' => 'MX'],\n            ['name' => 'Peligros', 'country_code' => 'ES'],\n            ['name' => 'Saint-Jean', 'country_code' => 'FR'],\n            ['name' => 'Glendale', 'country_code' => 'US'],\n            ['name' => 'Si Mustapha', 'country_code' => 'DZ'],\n            ['name' => 'Florange', 'country_code' => 'FR'],\n            ['name' => 'Lauria Inferiore', 'country_code' => 'IT'],\n            ['name' => 'Warsop', 'country_code' => 'GB'],\n            ['name' => 'Saude', 'country_code' => 'BR'],\n            ['name' => 'Zag', 'country_code' => 'MA'],\n            ['name' => 'Terryville', 'country_code' => 'US'],\n            ['name' => 'Othello', 'country_code' => 'US'],\n            ['name' => 'Santa Cruz da Baixa Verde', 'country_code' => 'BR'],\n            ['name' => 'Mineiros do Tiete', 'country_code' => 'BR'],\n            ['name' => 'Joanopolis', 'country_code' => 'BR'],\n            ['name' => 'Sant Agata di Militello', 'country_code' => 'IT'],\n            ['name' => 'Gulf Shores', 'country_code' => 'US'],\n            ['name' => 'Ingersoll', 'country_code' => 'CA'],\n            ['name' => 'Dorridge', 'country_code' => 'GB'],\n            ['name' => 'Avanhandava', 'country_code' => 'BR'],\n            ['name' => 'Khasanya', 'country_code' => 'RU'],\n            ['name' => 'Simplicio Mendes', 'country_code' => 'BR'],\n            ['name' => 'Yulee', 'country_code' => 'US'],\n            ['name' => 'Athens', 'country_code' => 'US'],\n            ['name' => 'Jupiter Farms', 'country_code' => 'US'],\n            ['name' => 'Tarboro', 'country_code' => 'US'],\n            ['name' => 'Steinheim am der Murr', 'country_code' => 'DE'],\n            ['name' => 'San Salvador', 'country_code' => 'AR'],\n            ['name' => 'Brunsbuttel', 'country_code' => 'DE'],\n            ['name' => 'Wickliffe', 'country_code' => 'US'],\n            ['name' => 'Lamballe', 'country_code' => 'FR'],\n            ['name' => 'Ban Muang Ngam', 'country_code' => 'TH'],\n            ['name' => 'Jilava', 'country_code' => 'RO'],\n            ['name' => 'Snezhnogorsk', 'country_code' => 'RU'],\n            ['name' => 'Qiaotouba', 'country_code' => 'CN'],\n            ['name' => 'Librazhd-Qender', 'country_code' => 'AL'],\n            ['name' => 'Vrchlabi', 'country_code' => 'CZ'],\n            ['name' => 'Kucove', 'country_code' => 'AL'],\n            ['name' => 'Elgin', 'country_code' => 'US'],\n            ['name' => 'Sinalunga', 'country_code' => 'IT'],\n            ['name' => 'Altavilla Vicentina', 'country_code' => 'IT'],\n            ['name' => 'Canet-en-Roussillon', 'country_code' => 'FR'],\n            ['name' => 'Croxley Green', 'country_code' => 'GB'],\n            ['name' => 'Mercerville', 'country_code' => 'US'],\n            ['name' => 'Tacaimbo', 'country_code' => 'BR'],\n            ['name' => 'La Homa', 'country_code' => 'US'],\n            ['name' => 'Paullo', 'country_code' => 'IT'],\n            ['name' => 'Dover', 'country_code' => 'US'],\n            ['name' => 'Spondon', 'country_code' => 'GB'],\n            ['name' => 'Dongyuancun', 'country_code' => 'CN'],\n            ['name' => 'Greenville', 'country_code' => 'US'],\n            ['name' => 'Neuenburg am Rhein', 'country_code' => 'DE'],\n            ['name' => 'Borger', 'country_code' => 'US'],\n            ['name' => 'Alat', 'country_code' => 'AZ'],\n            ['name' => 'Mato Verde', 'country_code' => 'BR'],\n            ['name' => 'Zofingen', 'country_code' => 'CH'],\n            ['name' => 'Bonita', 'country_code' => 'US'],\n            ['name' => 'Derventa', 'country_code' => 'BA'],\n            ['name' => 'Albertirsa', 'country_code' => 'HU'],\n            ['name' => 'Charlotte', 'country_code' => 'US'],\n            ['name' => 'Chok Chai', 'country_code' => 'TH'],\n            ['name' => 'Gangelt', 'country_code' => 'DE'],\n            ['name' => 'Andernos-les-Bains', 'country_code' => 'FR'],\n            ['name' => 'Broussard', 'country_code' => 'US'],\n            ['name' => 'Saint-Esteve', 'country_code' => 'FR'],\n            ['name' => 'Los Santos', 'country_code' => 'CO'],\n            ['name' => 'Bad Urach', 'country_code' => 'DE'],\n            ['name' => 'Winterberg', 'country_code' => 'DE'],\n            ['name' => 'Beaconsfield', 'country_code' => 'GB'],\n            ['name' => 'Dorado', 'country_code' => 'PR'],\n            ['name' => 'Olgiate Comasco', 'country_code' => 'IT'],\n            ['name' => 'Leibnitz', 'country_code' => 'AT'],\n            ['name' => 'Horndean', 'country_code' => 'GB'],\n            ['name' => 'Pieve di Soligo', 'country_code' => 'IT'],\n            ['name' => 'Ait Youssef Ou Ali', 'country_code' => 'MA'],\n            ['name' => 'Gaimersheim', 'country_code' => 'DE'],\n            ['name' => 'Herrin', 'country_code' => 'US'],\n            ['name' => 'Hungen', 'country_code' => 'DE'],\n            ['name' => 'Milovice', 'country_code' => 'CZ'],\n            ['name' => 'Kamianka-Dniprovska', 'country_code' => 'UA'],\n            ['name' => 'Blaubeuren', 'country_code' => 'DE'],\n            ['name' => 'Orzinuovi', 'country_code' => 'IT'],\n            ['name' => 'San Miguel de Salcedo', 'country_code' => 'EC'],\n            ['name' => 'Amesbury', 'country_code' => 'GB'],\n            ['name' => 'Hattem', 'country_code' => 'NL'],\n            ['name' => 'Pionerskiy', 'country_code' => 'RU'],\n            ['name' => 'Kasaishi', 'country_code' => 'JP'],\n            ['name' => 'Choctaw', 'country_code' => 'US'],\n            ['name' => 'Tepetzintla', 'country_code' => 'MX'],\n            ['name' => 'Vejer de la Frontera', 'country_code' => 'ES'],\n            ['name' => 'Alpen', 'country_code' => 'DE'],\n            ['name' => 'Manvel', 'country_code' => 'US'],\n            ['name' => 'Windsor Locks', 'country_code' => 'US'],\n            ['name' => 'Ronchi dei Legionari', 'country_code' => 'IT'],\n            ['name' => 'Shilka', 'country_code' => 'RU'],\n            ['name' => 'Fonsorbes', 'country_code' => 'FR'],\n            ['name' => 'Chaval', 'country_code' => 'BR'],\n            ['name' => 'Kantang', 'country_code' => 'TH'],\n            ['name' => 'Los Alamos', 'country_code' => 'US'],\n            ['name' => 'Oregon', 'country_code' => 'US'],\n            ['name' => 'Candelaria', 'country_code' => 'CO'],\n            ['name' => 'Albatera', 'country_code' => 'ES'],\n            ['name' => 'Barbosa Ferraz', 'country_code' => 'BR'],\n            ['name' => 'Commerce', 'country_code' => 'US'],\n            ['name' => 'Winkler', 'country_code' => 'CA'],\n            ['name' => 'Fehmarnsund', 'country_code' => 'DE'],\n            ['name' => 'Chauny', 'country_code' => 'FR'],\n            ['name' => 'Taylorville', 'country_code' => 'US'],\n            ['name' => 'Ibicuitinga', 'country_code' => 'BR'],\n            ['name' => 'Riviera Beach', 'country_code' => 'US'],\n            ['name' => 'Porto', 'country_code' => 'BR'],\n            ['name' => 'Port Neches', 'country_code' => 'US'],\n            ['name' => 'Wetaskiwin', 'country_code' => 'CA'],\n            ['name' => 'Shchastia', 'country_code' => 'UA'],\n            ['name' => 'Jataizinho', 'country_code' => 'BR'],\n            ['name' => 'Emiliano Zapata', 'country_code' => 'MX'],\n            ['name' => 'Ounagha', 'country_code' => 'MA'],\n            ['name' => 'Prineville', 'country_code' => 'US'],\n            ['name' => 'Oissel', 'country_code' => 'FR'],\n            ['name' => 'Anzola dell Emilia', 'country_code' => 'IT'],\n            ['name' => 'El Adjiba', 'country_code' => 'DZ'],\n            ['name' => 'Sao Goncalo do Para', 'country_code' => 'BR'],\n            ['name' => 'Baykalsk', 'country_code' => 'RU'],\n            ['name' => 'Lakeland', 'country_code' => 'US'],\n            ['name' => 'Peru', 'country_code' => 'US'],\n            ['name' => 'Lauenburg', 'country_code' => 'DE'],\n            ['name' => 'Vakhrusheve', 'country_code' => 'UA'],\n            ['name' => 'Maxaranguape', 'country_code' => 'BR'],\n            ['name' => 'Dalmatovo', 'country_code' => 'RU'],\n            ['name' => 'White House', 'country_code' => 'US'],\n            ['name' => 'Niefern-Oschelbronn', 'country_code' => 'DE'],\n            ['name' => 'Santa Barbara de Pinto', 'country_code' => 'CO'],\n            ['name' => 'Keokuk', 'country_code' => 'US'],\n            ['name' => 'Kalajoki', 'country_code' => 'FI'],\n            ['name' => 'Xiaping', 'country_code' => 'CN'],\n            ['name' => 'Greetland', 'country_code' => 'GB'],\n            ['name' => 'Yemva', 'country_code' => 'RU'],\n            ['name' => 'Junin de los Andes', 'country_code' => 'AR'],\n            ['name' => 'Sao Geraldo', 'country_code' => 'BR'],\n            ['name' => 'St. Ann', 'country_code' => 'US'],\n            ['name' => 'Monte Compatri', 'country_code' => 'IT'],\n            ['name' => 'Jaciara', 'country_code' => 'BR'],\n            ['name' => 'Mablethorpe', 'country_code' => 'GB'],\n            ['name' => 'Lana', 'country_code' => 'IT'],\n            ['name' => 'Hirschaid', 'country_code' => 'DE'],\n            ['name' => 'Durmersheim', 'country_code' => 'DE'],\n            ['name' => 'Cardoso Moreira', 'country_code' => 'BR'],\n            ['name' => 'Oshikango', 'country_code' => 'NA'],\n            ['name' => 'Wadhraf', 'country_code' => 'TN'],\n            ['name' => 'Newtown', 'country_code' => 'GB'],\n            ['name' => 'Itiquira', 'country_code' => 'BR'],\n            ['name' => 'Brandfort', 'country_code' => 'ZA'],\n            ['name' => 'Berja', 'country_code' => 'ES'],\n            ['name' => 'Seringueiras', 'country_code' => 'BR'],\n            ['name' => 'Cinisi', 'country_code' => 'IT'],\n            ['name' => 'Darfield', 'country_code' => 'GB'],\n            ['name' => 'San Mauro Pascoli', 'country_code' => 'IT'],\n            ['name' => 'Alcudia de Carlet', 'country_code' => 'ES'],\n            ['name' => 'Lavagna', 'country_code' => 'IT'],\n            ['name' => 'Wieringerwerf', 'country_code' => 'NL'],\n            ['name' => 'Duartina', 'country_code' => 'BR'],\n            ['name' => 'Cananeia', 'country_code' => 'BR'],\n            ['name' => 'Calanasan', 'country_code' => 'PH'],\n            ['name' => 'Yuzha', 'country_code' => 'RU'],\n            ['name' => 'Camposampiero', 'country_code' => 'IT'],\n            ['name' => 'Beniel', 'country_code' => 'ES'],\n            ['name' => 'Moreira Sales', 'country_code' => 'BR'],\n            ['name' => 'Tranent', 'country_code' => 'GB'],\n            ['name' => 'Galashiels', 'country_code' => 'GB'],\n            ['name' => 'Gorazde', 'country_code' => 'BA'],\n            ['name' => 'Mastic Beach', 'country_code' => 'US'],\n            ['name' => 'Rong Kwang', 'country_code' => 'TH'],\n            ['name' => 'Santol', 'country_code' => 'PH'],\n            ['name' => 'Justice', 'country_code' => 'US'],\n            ['name' => 'Spresiano', 'country_code' => 'IT'],\n            ['name' => 'Central Elgin', 'country_code' => 'CA'],\n            ['name' => 'Tiszavasvari', 'country_code' => 'HU'],\n            ['name' => 'Graben-Neudorf', 'country_code' => 'DE'],\n            ['name' => 'San Pietro in Casale', 'country_code' => 'IT'],\n            ['name' => 'Gavardo', 'country_code' => 'IT'],\n            ['name' => 'Taguai', 'country_code' => 'BR'],\n            ['name' => 'Anklam', 'country_code' => 'DE'],\n            ['name' => 'German Flatts', 'country_code' => 'US'],\n            ['name' => 'Saint-Germain-les-Arpajon', 'country_code' => 'FR'],\n            ['name' => 'Cumpana', 'country_code' => 'RO'],\n            ['name' => 'Elfers', 'country_code' => 'US'],\n            ['name' => 'Lewisboro', 'country_code' => 'US'],\n            ['name' => 'Fuldatal', 'country_code' => 'DE'],\n            ['name' => 'Fulton', 'country_code' => 'US'],\n            ['name' => 'Minneola', 'country_code' => 'US'],\n            ['name' => 'Anna Regina', 'country_code' => 'GY'],\n            ['name' => 'Valu lui Traian', 'country_code' => 'RO'],\n            ['name' => 'Oskaloosa', 'country_code' => 'US'],\n            ['name' => 'Buchach', 'country_code' => 'UA'],\n            ['name' => 'Santa Ana Maya', 'country_code' => 'MX'],\n            ['name' => 'Lienz', 'country_code' => 'AT'],\n            ['name' => 'Urbana', 'country_code' => 'US'],\n            ['name' => 'Mecatlan', 'country_code' => 'MX'],\n            ['name' => 'Benifayo', 'country_code' => 'ES'],\n            ['name' => 'Grand Terrace', 'country_code' => 'US'],\n            ['name' => 'Rielasingen-Worblingen', 'country_code' => 'DE'],\n            ['name' => 'Panama City Beach', 'country_code' => 'US'],\n            ['name' => 'Woodland Park', 'country_code' => 'US'],\n            ['name' => 'Teixeira Soares', 'country_code' => 'BR'],\n            ['name' => 'Menfi', 'country_code' => 'IT'],\n            ['name' => 'Rosbach vor der Hohe', 'country_code' => 'DE'],\n            ['name' => 'Beydag', 'country_code' => 'TR'],\n            ['name' => 'Richmond', 'country_code' => 'US'],\n            ['name' => 'Nelson Bay', 'country_code' => 'AU'],\n            ['name' => 'Jackson', 'country_code' => 'US'],\n            ['name' => 'Russi', 'country_code' => 'IT'],\n            ['name' => 'Altenstadt', 'country_code' => 'DE'],\n            ['name' => 'Kataysk', 'country_code' => 'RU'],\n            ['name' => 'Quimperle', 'country_code' => 'FR'],\n            ['name' => 'Saint-Andre-de-Cubzac', 'country_code' => 'FR'],\n            ['name' => 'Pennsville', 'country_code' => 'US'],\n            ['name' => 'Elland', 'country_code' => 'GB'],\n            ['name' => 'El khotovo', 'country_code' => 'RU'],\n            ['name' => 'Rottofreno', 'country_code' => 'IT'],\n            ['name' => 'Fredericksburg', 'country_code' => 'US'],\n            ['name' => 'Neerijnen', 'country_code' => 'NL'],\n            ['name' => 'Le Haillan', 'country_code' => 'FR'],\n            ['name' => 'Carmiano', 'country_code' => 'IT'],\n            ['name' => 'Mira', 'country_code' => 'PT'],\n            ['name' => 'Revuca', 'country_code' => 'SK'],\n            ['name' => 'Muscoy', 'country_code' => 'US'],\n            ['name' => 'Mende', 'country_code' => 'FR'],\n            ['name' => 'Lila', 'country_code' => 'PH'],\n            ['name' => 'Vysoke Myto', 'country_code' => 'CZ'],\n            ['name' => 'Estepa', 'country_code' => 'ES'],\n            ['name' => 'Ubaporanga', 'country_code' => 'BR'],\n            ['name' => 'Belmont', 'country_code' => 'US'],\n            ['name' => 'Koriukivka', 'country_code' => 'UA'],\n            ['name' => 'Twistringen', 'country_code' => 'DE'],\n            ['name' => 'Petrov Val', 'country_code' => 'RU'],\n            ['name' => 'Edemissen', 'country_code' => 'DE'],\n            ['name' => 'Frohburg', 'country_code' => 'DE'],\n            ['name' => 'Mwingi', 'country_code' => 'KE'],\n            ['name' => 'Bolbec', 'country_code' => 'FR'],\n            ['name' => 'Florence', 'country_code' => 'US'],\n            ['name' => 'Bernalda', 'country_code' => 'IT'],\n            ['name' => 'Annapolis Neck', 'country_code' => 'US'],\n            ['name' => 'Lachute', 'country_code' => 'CA'],\n            ['name' => 'Xavantes', 'country_code' => 'BR'],\n            ['name' => 'Reshuijie', 'country_code' => 'CN'],\n            ['name' => 'Woolwich', 'country_code' => 'US'],\n            ['name' => 'Oberwil', 'country_code' => 'CH'],\n            ['name' => 'La Carlota', 'country_code' => 'AR'],\n            ['name' => 'Nanzhai', 'country_code' => 'CN'],\n            ['name' => 'Jacksonville', 'country_code' => 'US'],\n            ['name' => 'Culfa', 'country_code' => 'AZ'],\n            ['name' => 'Brzeszcze', 'country_code' => 'PL'],\n            ['name' => 'Feuchtwangen', 'country_code' => 'DE'],\n            ['name' => 'Currimao', 'country_code' => 'PH'],\n            ['name' => 'Bad Windsheim', 'country_code' => 'DE'],\n            ['name' => 'Ebersberg', 'country_code' => 'DE'],\n            ['name' => 'Sheerness', 'country_code' => 'GB'],\n            ['name' => 'Ugento', 'country_code' => 'IT'],\n            ['name' => 'Astley', 'country_code' => 'GB'],\n            ['name' => 'Sao Romao', 'country_code' => 'BR'],\n            ['name' => 'Laguna Paiva', 'country_code' => 'AR'],\n            ['name' => 'Alkhan-Kala', 'country_code' => 'RU'],\n            ['name' => 'Endicott', 'country_code' => 'US'],\n            ['name' => 'Tezoatlan de Segura y Luna', 'country_code' => 'MX'],\n            ['name' => 'Grunwald', 'country_code' => 'DE'],\n            ['name' => 'Bad Abbach', 'country_code' => 'DE'],\n            ['name' => 'Motta Sant Anastasia', 'country_code' => 'IT'],\n            ['name' => 'Culcheth', 'country_code' => 'GB'],\n            ['name' => 'Niel', 'country_code' => 'BE'],\n            ['name' => 'Erkner', 'country_code' => 'DE'],\n            ['name' => 'Kamin-Kashyrskyi', 'country_code' => 'UA'],\n            ['name' => 'Jaidte Lbatma', 'country_code' => 'MA'],\n            ['name' => 'Kameshkovo', 'country_code' => 'RU'],\n            ['name' => 'Hopewell', 'country_code' => 'US'],\n            ['name' => 'Cheney', 'country_code' => 'US'],\n            ['name' => 'Valmadrera', 'country_code' => 'IT'],\n            ['name' => 'Lindenberg im Allgau', 'country_code' => 'DE'],\n            ['name' => 'Stainland', 'country_code' => 'GB'],\n            ['name' => 'Ocana', 'country_code' => 'ES'],\n            ['name' => 'San Severino Marche', 'country_code' => 'IT'],\n            ['name' => 'Palos Heights', 'country_code' => 'US'],\n            ['name' => 'Andrelandia', 'country_code' => 'BR'],\n            ['name' => 'West Grey', 'country_code' => 'CA'],\n            ['name' => 'Kozloduy', 'country_code' => 'BG'],\n            ['name' => 'Dom Basilio', 'country_code' => 'BR'],\n            ['name' => 'Beelitz', 'country_code' => 'DE'],\n            ['name' => 'Goor', 'country_code' => 'NL'],\n            ['name' => 'Charmahin', 'country_code' => 'IR'],\n            ['name' => 'Cedar Grove', 'country_code' => 'US'],\n            ['name' => 'Xinyingheyan', 'country_code' => 'CN'],\n            ['name' => 'Parksville', 'country_code' => 'CA'],\n            ['name' => 'Boumalne', 'country_code' => 'MA'],\n            ['name' => 'Taviano', 'country_code' => 'IT'],\n            ['name' => 'Boone', 'country_code' => 'US'],\n            ['name' => 'Nurmo', 'country_code' => 'FI'],\n            ['name' => 'Rainhill', 'country_code' => 'GB'],\n            ['name' => 'North St. Paul', 'country_code' => 'US'],\n            ['name' => 'Satao', 'country_code' => 'PT'],\n            ['name' => 'Dokkum', 'country_code' => 'NL'],\n            ['name' => 'Nobeji', 'country_code' => 'JP'],\n            ['name' => 'Wadersloh', 'country_code' => 'DE'],\n            ['name' => 'Moglingen', 'country_code' => 'DE'],\n            ['name' => 'Bickenhill', 'country_code' => 'GB'],\n            ['name' => 'Burgos', 'country_code' => 'PH'],\n            ['name' => 'Ocean Pines', 'country_code' => 'US'],\n            ['name' => 'Valentim Gentil', 'country_code' => 'BR'],\n            ['name' => 'Le Pont-de-Claix', 'country_code' => 'FR'],\n            ['name' => 'Shichuanxiang', 'country_code' => 'CN'],\n            ['name' => 'Mortugaba', 'country_code' => 'BR'],\n            ['name' => 'Arroyo Seco', 'country_code' => 'MX'],\n            ['name' => 'Axel', 'country_code' => 'NL'],\n            ['name' => 'Culaba', 'country_code' => 'PH'],\n            ['name' => 'Gundelfingen', 'country_code' => 'DE'],\n            ['name' => 'Cornedo Vicentino', 'country_code' => 'IT'],\n            ['name' => 'Zunil', 'country_code' => 'GT'],\n            ['name' => 'Hinundayan', 'country_code' => 'PH'],\n            ['name' => 'Cowansville', 'country_code' => 'CA'],\n            ['name' => 'Rocca Priora', 'country_code' => 'IT'],\n            ['name' => 'Nina Rodrigues', 'country_code' => 'BR'],\n            ['name' => 'Paris', 'country_code' => 'US'],\n            ['name' => 'Xinchangcun', 'country_code' => 'CN'],\n            ['name' => 'Irmo', 'country_code' => 'US'],\n            ['name' => 'Shuangxianxiang', 'country_code' => 'CN'],\n            ['name' => 'Hnivan', 'country_code' => 'UA'],\n            ['name' => 'Bottesford', 'country_code' => 'GB'],\n            ['name' => 'Cecil', 'country_code' => 'US'],\n            ['name' => 'Plan-les-Ouates', 'country_code' => 'CH'],\n            ['name' => 'Velten', 'country_code' => 'DE'],\n            ['name' => 'Ilicinia', 'country_code' => 'BR'],\n            ['name' => 'Sulz am Neckar', 'country_code' => 'DE'],\n            ['name' => 'Epping', 'country_code' => 'GB'],\n            ['name' => 'San Anselmo', 'country_code' => 'US'],\n            ['name' => 'Marysville', 'country_code' => 'US'],\n            ['name' => 'Hessisch Lichtenau', 'country_code' => 'DE'],\n            ['name' => 'Aracas', 'country_code' => 'BR'],\n            ['name' => 'Edeia', 'country_code' => 'BR'],\n            ['name' => 'Tsuruta', 'country_code' => 'JP'],\n            ['name' => 'Ulster', 'country_code' => 'US'],\n            ['name' => 'Thame', 'country_code' => 'GB'],\n            ['name' => 'Oulad Fares', 'country_code' => 'MA'],\n            ['name' => 'Santany', 'country_code' => 'ES'],\n            ['name' => 'Bayona', 'country_code' => 'ES'],\n            ['name' => 'Eyvanekey', 'country_code' => 'IR'],\n            ['name' => 'Oulad Aissa', 'country_code' => 'MA'],\n            ['name' => 'Cortes', 'country_code' => 'BR'],\n            ['name' => 'Woodhaven', 'country_code' => 'US'],\n            ['name' => 'Preussisch Oldendorf', 'country_code' => 'DE'],\n            ['name' => 'Bni Drar', 'country_code' => 'MA'],\n            ['name' => 'Brejetuba', 'country_code' => 'BR'],\n            ['name' => 'Novalukoml ', 'country_code' => 'BY'],\n            ['name' => 'Bad Freienwalde', 'country_code' => 'DE'],\n            ['name' => 'Bedford', 'country_code' => 'US'],\n            ['name' => 'Sable-sur-Sarthe', 'country_code' => 'FR'],\n            ['name' => 'Cerro Grande', 'country_code' => 'BR'],\n            ['name' => 'Sever do Vouga', 'country_code' => 'PT'],\n            ['name' => 'Trophy Club', 'country_code' => 'US'],\n            ['name' => 'Xinbocun', 'country_code' => 'CN'],\n            ['name' => 'Beryslav', 'country_code' => 'UA'],\n            ['name' => 'Romanshorn', 'country_code' => 'CH'],\n            ['name' => 'Rezvanshahr', 'country_code' => 'IR'],\n            ['name' => 'Cornwall', 'country_code' => 'US'],\n            ['name' => 'Riverton', 'country_code' => 'US'],\n            ['name' => 'Santa Mariana', 'country_code' => 'BR'],\n            ['name' => 'Niepolomice', 'country_code' => 'PL'],\n            ['name' => 'Magsaysay', 'country_code' => 'PH'],\n            ['name' => 'Shepherdsville', 'country_code' => 'US'],\n            ['name' => 'Teotepeque', 'country_code' => 'SV'],\n            ['name' => 'Teano', 'country_code' => 'IT'],\n            ['name' => 'Kalymnos', 'country_code' => 'GR'],\n            ['name' => 'Becancour', 'country_code' => 'CA'],\n            ['name' => 'Murnau am Staffelsee', 'country_code' => 'DE'],\n            ['name' => 'Moldova Noua', 'country_code' => 'RO'],\n            ['name' => 'Maqu', 'country_code' => 'CN'],\n            ['name' => 'Terranuova Bracciolini', 'country_code' => 'IT'],\n            ['name' => 'Iaciara', 'country_code' => 'BR'],\n            ['name' => 'Sao Luis do Curu', 'country_code' => 'BR'],\n            ['name' => 'Coventry', 'country_code' => 'US'],\n            ['name' => 'Plymouth', 'country_code' => 'US'],\n            ['name' => 'Manchester', 'country_code' => 'US'],\n            ['name' => 'Pidigan', 'country_code' => 'PH'],\n            ['name' => 'Gladenbach', 'country_code' => 'DE'],\n            ['name' => 'Nagykata', 'country_code' => 'HU'],\n            ['name' => 'Jardim do Serido', 'country_code' => 'BR'],\n            ['name' => 'Waconia', 'country_code' => 'US'],\n            ['name' => 'Stony Brook', 'country_code' => 'US'],\n            ['name' => 'Mesker-Yurt', 'country_code' => 'RU'],\n            ['name' => 'Vardenis', 'country_code' => 'AM'],\n            ['name' => 'Saboya', 'country_code' => 'CO'],\n            ['name' => 'Taiynsha', 'country_code' => 'KZ'],\n            ['name' => 'Pfaffikon', 'country_code' => 'CH'],\n            ['name' => 'Caapiranga', 'country_code' => 'BR'],\n            ['name' => 'St. Peter', 'country_code' => 'US'],\n            ['name' => 'Possneck', 'country_code' => 'DE'],\n            ['name' => 'Kingsbury', 'country_code' => 'US'],\n            ['name' => 'Saint Ives', 'country_code' => 'GB'],\n            ['name' => 'Lymm', 'country_code' => 'GB'],\n            ['name' => 'Kelso', 'country_code' => 'US'],\n            ['name' => 'Betton', 'country_code' => 'FR'],\n            ['name' => 'Nevele', 'country_code' => 'BE'],\n            ['name' => 'Villeneuve-les-Avignon', 'country_code' => 'FR'],\n            ['name' => 'Cuichapa', 'country_code' => 'MX'],\n            ['name' => 'North Smithfield', 'country_code' => 'US'],\n            ['name' => 'Juvignac', 'country_code' => 'FR'],\n            ['name' => 'Bom Retiro do Sul', 'country_code' => 'BR'],\n            ['name' => 'Titisee-Neustadt', 'country_code' => 'DE'],\n            ['name' => 'Gharbia', 'country_code' => 'MA'],\n            ['name' => 'Eraclea', 'country_code' => 'IT'],\n            ['name' => 'Khvalynsk', 'country_code' => 'RU'],\n            ['name' => 'Sao Sebastiao da Grama', 'country_code' => 'BR'],\n            ['name' => 'Elkhorn', 'country_code' => 'US'],\n            ['name' => 'Ongwediva', 'country_code' => 'NA'],\n            ['name' => 'Lizzanello', 'country_code' => 'IT'],\n            ['name' => 'Sannicolau Mare', 'country_code' => 'RO'],\n            ['name' => 'Setubinha', 'country_code' => 'BR'],\n            ['name' => 'Gatesville', 'country_code' => 'US'],\n            ['name' => 'Vobkent Shahri', 'country_code' => 'UZ'],\n            ['name' => 'Kavarna', 'country_code' => 'BG'],\n            ['name' => 'Las Parejas', 'country_code' => 'AR'],\n            ['name' => 'Rankweil', 'country_code' => 'AT'],\n            ['name' => 'Monte Sant Angelo', 'country_code' => 'IT'],\n            ['name' => 'Ludwigslust', 'country_code' => 'DE'],\n            ['name' => 'Lom Sak', 'country_code' => 'TH'],\n            ['name' => 'Ried im Innkreis', 'country_code' => 'AT'],\n            ['name' => 'Oulad Amrane el Mekki', 'country_code' => 'MA'],\n            ['name' => 'Perez', 'country_code' => 'PH'],\n            ['name' => 'Goldenrod', 'country_code' => 'US'],\n            ['name' => 'Budel', 'country_code' => 'NL'],\n            ['name' => 'Granarolo del l Emilia', 'country_code' => 'IT'],\n            ['name' => 'Villa Literno', 'country_code' => 'IT'],\n            ['name' => 'Virginia', 'country_code' => 'US'],\n            ['name' => 'Juterbog', 'country_code' => 'DE'],\n            ['name' => 'Capdepera', 'country_code' => 'ES'],\n            ['name' => 'Logan', 'country_code' => 'US'],\n            ['name' => 'Jork', 'country_code' => 'DE'],\n            ['name' => 'Lontras', 'country_code' => 'BR'],\n            ['name' => 'Monteforte Irpino', 'country_code' => 'IT'],\n            ['name' => 'Nkheila', 'country_code' => 'MA'],\n            ['name' => 'Chino Valley', 'country_code' => 'US'],\n            ['name' => 'Inverell', 'country_code' => 'AU'],\n            ['name' => 'Gisors', 'country_code' => 'FR'],\n            ['name' => 'Lakeside', 'country_code' => 'US'],\n            ['name' => 'Newington Forest', 'country_code' => 'US'],\n            ['name' => 'Blue Ash', 'country_code' => 'US'],\n            ['name' => 'Alto do Rodrigues', 'country_code' => 'BR'],\n            ['name' => 'Chateaubriant', 'country_code' => 'FR'],\n            ['name' => 'Lewisburg', 'country_code' => 'US'],\n            ['name' => 'Wilmington', 'country_code' => 'US'],\n            ['name' => 'Egelsbach', 'country_code' => 'DE'],\n            ['name' => 'Occhiobello', 'country_code' => 'IT'],\n            ['name' => 'Tyngsborough', 'country_code' => 'US'],\n            ['name' => 'Teningen', 'country_code' => 'DE'],\n            ['name' => 'Bitetto', 'country_code' => 'IT'],\n            ['name' => 'Meze', 'country_code' => 'FR'],\n            ['name' => 'Harrison', 'country_code' => 'US'],\n            ['name' => 'Yakouren', 'country_code' => 'DZ'],\n            ['name' => 'Holly Hill', 'country_code' => 'US'],\n            ['name' => 'Heddesheim', 'country_code' => 'DE'],\n            ['name' => 'Jardim Alegre', 'country_code' => 'BR'],\n            ['name' => 'Lansdowne', 'country_code' => 'US'],\n            ['name' => 'Foca', 'country_code' => 'BA'],\n            ['name' => 'Hatillo de Loba', 'country_code' => 'CO'],\n            ['name' => 'Ain Kansara', 'country_code' => 'MA'],\n            ['name' => 'Rushall', 'country_code' => 'GB'],\n            ['name' => 'Pont-du-Chateau', 'country_code' => 'FR'],\n            ['name' => 'Diosd', 'country_code' => 'HU'],\n            ['name' => 'New Baltimore', 'country_code' => 'US'],\n            ['name' => 'Rio Paranaiba', 'country_code' => 'BR'],\n            ['name' => 'Palmares Paulista', 'country_code' => 'BR'],\n            ['name' => 'Chambray-les-Tours', 'country_code' => 'FR'],\n            ['name' => 'Gulfport', 'country_code' => 'US'],\n            ['name' => 'Forestville', 'country_code' => 'US'],\n            ['name' => 'Vidauban', 'country_code' => 'FR'],\n            ['name' => 'Derby', 'country_code' => 'US'],\n            ['name' => 'Kewanee', 'country_code' => 'US'],\n            ['name' => 'Bueu', 'country_code' => 'ES'],\n            ['name' => 'Orange City', 'country_code' => 'US'],\n            ['name' => 'Sawadah', 'country_code' => 'EG'],\n            ['name' => 'Malloussa', 'country_code' => 'MA'],\n            ['name' => 'Acala del Rio', 'country_code' => 'ES'],\n            ['name' => 'Heythuysen', 'country_code' => 'NL'],\n            ['name' => 'Lakeland Highlands', 'country_code' => 'US'],\n            ['name' => 'Jacinto', 'country_code' => 'BR'],\n            ['name' => 'La Motte-Servolex', 'country_code' => 'FR'],\n            ['name' => 'Matina', 'country_code' => 'BR'],\n            ['name' => 'Farciennes', 'country_code' => 'BE'],\n            ['name' => 'Ulverston', 'country_code' => 'GB'],\n            ['name' => 'Bastrop', 'country_code' => 'US'],\n            ['name' => 'Anama', 'country_code' => 'BR'],\n            ['name' => 'Zupanja', 'country_code' => 'HR'],\n            ['name' => 'Nordstemmen', 'country_code' => 'DE'],\n            ['name' => 'Sernovodsk', 'country_code' => 'RU'],\n            ['name' => 'Gladstone', 'country_code' => 'US'],\n            ['name' => 'Khem Karan', 'country_code' => 'IN'],\n            ['name' => 'Cookstown', 'country_code' => 'GB'],\n            ['name' => 'Uren', 'country_code' => 'RU'],\n            ['name' => 'Wietmarschen', 'country_code' => 'DE'],\n            ['name' => 'Berilo', 'country_code' => 'BR'],\n            ['name' => 'Sant Ambrogio di Valpolicella', 'country_code' => 'IT'],\n            ['name' => 'Spilimbergo', 'country_code' => 'IT'],\n            ['name' => 'Mirante da Serra', 'country_code' => 'BR'],\n            ['name' => 'Bibbiena', 'country_code' => 'IT'],\n            ['name' => 'Hagenow', 'country_code' => 'DE'],\n            ['name' => 'Bodaybo', 'country_code' => 'RU'],\n            ['name' => 'Teotlaltzingo', 'country_code' => 'MX'],\n            ['name' => 'Winnetka', 'country_code' => 'US'],\n            ['name' => 'Markham', 'country_code' => 'US'],\n            ['name' => 'Mixtla de Altamirano', 'country_code' => 'MX'],\n            ['name' => 'Gravenhurst', 'country_code' => 'CA'],\n            ['name' => 'Sakib', 'country_code' => 'JO'],\n            ['name' => 'Marion', 'country_code' => 'US'],\n            ['name' => 'Torri di Quartesolo', 'country_code' => 'IT'],\n            ['name' => 'Aj Jourf', 'country_code' => 'MA'],\n            ['name' => ' Anadan', 'country_code' => 'SY'],\n            ['name' => 'Leon Valley', 'country_code' => 'US'],\n            ['name' => 'Joppatowne', 'country_code' => 'US'],\n            ['name' => 'West Plains', 'country_code' => 'US'],\n            ['name' => 'Lehre', 'country_code' => 'DE'],\n            ['name' => 'Delhi', 'country_code' => 'US'],\n            ['name' => 'Oosterbroek', 'country_code' => 'NL'],\n            ['name' => 'Leutenbach', 'country_code' => 'DE'],\n            ['name' => 'Winchester', 'country_code' => 'US'],\n            ['name' => 'New Mills', 'country_code' => 'GB'],\n            ['name' => 'Enns', 'country_code' => 'AT'],\n            ['name' => 'Marumori', 'country_code' => 'JP'],\n            ['name' => 'Linkenheim-Hochstetten', 'country_code' => 'DE'],\n            ['name' => 'Saint-Saulve', 'country_code' => 'FR'],\n            ['name' => 'Hexham', 'country_code' => 'GB'],\n            ['name' => 'Darmanesti', 'country_code' => 'RO'],\n            ['name' => 'Monovar', 'country_code' => 'ES'],\n            ['name' => 'Newcastle', 'country_code' => 'US'],\n            ['name' => 'New Kensington', 'country_code' => 'US'],\n            ['name' => 'Maraial', 'country_code' => 'BR'],\n            ['name' => 'Sakawa', 'country_code' => 'JP'],\n            ['name' => 'Nembro', 'country_code' => 'IT'],\n            ['name' => 'Cordoba', 'country_code' => 'CO'],\n            ['name' => 'Stradella', 'country_code' => 'IT'],\n            ['name' => 'Weinfelden', 'country_code' => 'CH'],\n            ['name' => 'Beatrice', 'country_code' => 'US'],\n            ['name' => 'Tzintzuntzan', 'country_code' => 'MX'],\n            ['name' => 'Zeuthen', 'country_code' => 'DE'],\n            ['name' => 'Brieselang', 'country_code' => 'DE'],\n            ['name' => 'Prieska', 'country_code' => 'ZA'],\n            ['name' => 'Poquoson', 'country_code' => 'US'],\n            ['name' => 'Itanhomi', 'country_code' => 'BR'],\n            ['name' => 'Tortoreto', 'country_code' => 'IT'],\n            ['name' => 'Tholey', 'country_code' => 'DE'],\n            ['name' => 'Arth', 'country_code' => 'CH'],\n            ['name' => 'Taurisano', 'country_code' => 'IT'],\n            ['name' => 'Antonio Cardoso', 'country_code' => 'BR'],\n            ['name' => 'Clayton', 'country_code' => 'US'],\n            ['name' => 'Rovinari', 'country_code' => 'RO'],\n            ['name' => 'Piripa', 'country_code' => 'BR'],\n            ['name' => 'Casier', 'country_code' => 'IT'],\n            ['name' => 'Iguaraci', 'country_code' => 'BR'],\n            ['name' => 'Perth East', 'country_code' => 'CA'],\n            ['name' => 'Vecchiano', 'country_code' => 'IT'],\n            ['name' => 'Gaildorf', 'country_code' => 'DE'],\n            ['name' => 'St. Marys', 'country_code' => 'US'],\n            ['name' => 'Velddrif', 'country_code' => 'ZA'],\n            ['name' => 'Bad Sassendorf', 'country_code' => 'DE'],\n            ['name' => 'Citlaltepec', 'country_code' => 'MX'],\n            ['name' => 'Gotzis', 'country_code' => 'AT'],\n            ['name' => 'Na Wa', 'country_code' => 'TH'],\n            ['name' => 'Ottawa', 'country_code' => 'US'],\n            ['name' => 'Larkspur', 'country_code' => 'US'],\n            ['name' => 'Kampenhout', 'country_code' => 'BE'],\n            ['name' => 'Cottonwood', 'country_code' => 'US'],\n            ['name' => 'Mays Chapel', 'country_code' => 'US'],\n            ['name' => 'Shady Hills', 'country_code' => 'US'],\n            ['name' => 'Vulcanesti', 'country_code' => 'MD'],\n            ['name' => 'Vilsbiburg', 'country_code' => 'DE'],\n            ['name' => 'Valenii de Munte', 'country_code' => 'RO'],\n            ['name' => 'Palestina', 'country_code' => 'BR'],\n            ['name' => 'Bankya', 'country_code' => 'BG'],\n            ['name' => 'Wegorzewo', 'country_code' => 'PL'],\n            ['name' => 'Boloso', 'country_code' => 'CG'],\n            ['name' => 'Lincolnwood', 'country_code' => 'US'],\n            ['name' => 'Biri', 'country_code' => 'PH'],\n            ['name' => 'Atripalda', 'country_code' => 'IT'],\n            ['name' => 'Burladingen', 'country_code' => 'DE'],\n            ['name' => 'Botlikh', 'country_code' => 'RU'],\n            ['name' => 'Axixa', 'country_code' => 'BR'],\n            ['name' => 'Arkansas City', 'country_code' => 'US'],\n            ['name' => 'Dabuleni', 'country_code' => 'RO'],\n            ['name' => 'Sapna', 'country_code' => 'BA'],\n            ['name' => 'Saint-Ave', 'country_code' => 'FR'],\n            ['name' => 'Saubara', 'country_code' => 'BR'],\n            ['name' => 'Paulista', 'country_code' => 'BR'],\n            ['name' => 'Querencia do Norte', 'country_code' => 'BR'],\n            ['name' => 'North Castle', 'country_code' => 'US'],\n            ['name' => 'Elon', 'country_code' => 'US'],\n            ['name' => 'Palmer', 'country_code' => 'US'],\n            ['name' => 'Lumberton', 'country_code' => 'US'],\n            ['name' => 'Emstek', 'country_code' => 'DE'],\n            ['name' => 'Perleberg', 'country_code' => 'DE'],\n            ['name' => 'Massena', 'country_code' => 'US'],\n            ['name' => 'Aleksandrovsk', 'country_code' => 'RU'],\n            ['name' => 'West Monroe', 'country_code' => 'US'],\n            ['name' => 'Parker', 'country_code' => 'US'],\n            ['name' => 'Chateau-Gontier', 'country_code' => 'FR'],\n            ['name' => 'Antonio Goncalves', 'country_code' => 'BR'],\n            ['name' => 'Fourmies', 'country_code' => 'FR'],\n            ['name' => 'Mulungu do Morro', 'country_code' => 'BR'],\n            ['name' => 'Wolgast', 'country_code' => 'DE'],\n            ['name' => 'Ebejico', 'country_code' => 'CO'],\n            ['name' => 'Parkes', 'country_code' => 'AU'],\n            ['name' => 'Gatumba', 'country_code' => 'BI'],\n            ['name' => 'Ahram', 'country_code' => 'IR'],\n            ['name' => 'Krasnyy Yar', 'country_code' => 'RU'],\n            ['name' => 'Pedras de Maria da Cruz', 'country_code' => 'BR'],\n            ['name' => 'Batesville', 'country_code' => 'US'],\n            ['name' => 'Prince Rupert', 'country_code' => 'CA'],\n            ['name' => 'Amherst', 'country_code' => 'US'],\n            ['name' => 'Grenada', 'country_code' => 'US'],\n            ['name' => 'Mineral del Monte', 'country_code' => 'MX'],\n            ['name' => 'Balbalan', 'country_code' => 'PH'],\n            ['name' => 'Loreto', 'country_code' => 'BR'],\n            ['name' => 'Kibungo', 'country_code' => 'RW'],\n            ['name' => 'Canapolis', 'country_code' => 'BR'],\n            ['name' => 'Osako', 'country_code' => 'JP'],\n            ['name' => 'Carmo da Cachoeira', 'country_code' => 'BR'],\n            ['name' => 'Mettlach', 'country_code' => 'DE'],\n            ['name' => 'Neuenrade', 'country_code' => 'DE'],\n            ['name' => 'Villamartin', 'country_code' => 'ES'],\n            ['name' => 'Portoferraio', 'country_code' => 'IT'],\n            ['name' => 'Castelnaudary', 'country_code' => 'FR'],\n            ['name' => 'Bellegarde-sur-Valserine', 'country_code' => 'FR'],\n            ['name' => 'Suchanino', 'country_code' => 'PL'],\n            ['name' => 'North Union', 'country_code' => 'US'],\n            ['name' => 'Isola del Liri', 'country_code' => 'IT'],\n            ['name' => 'Ishpeming', 'country_code' => 'US'],\n            ['name' => 'Jesup', 'country_code' => 'US'],\n            ['name' => 'Ringwood', 'country_code' => 'US'],\n            ['name' => 'Zhengdong', 'country_code' => 'CN'],\n            ['name' => 'Ullo', 'country_code' => 'HU'],\n            ['name' => 'Neustadt', 'country_code' => 'DE'],\n            ['name' => 'Oberschleissheim', 'country_code' => 'DE'],\n            ['name' => 'Overlea', 'country_code' => 'US'],\n            ['name' => 'Speedway', 'country_code' => 'US'],\n            ['name' => 'Lagoa do Ouro', 'country_code' => 'BR'],\n            ['name' => 'Montegrotto Terme', 'country_code' => 'IT'],\n            ['name' => 'Santa Fe', 'country_code' => 'BR'],\n            ['name' => 'Enumclaw', 'country_code' => 'US'],\n            ['name' => 'Lonate Pozzolo', 'country_code' => 'IT'],\n            ['name' => 'Rijkevorsel', 'country_code' => 'BE'],\n            ['name' => 'Santa Lucia', 'country_code' => 'CO'],\n            ['name' => 'Uzyn', 'country_code' => 'UA'],\n            ['name' => 'Roding', 'country_code' => 'DE'],\n            ['name' => 'Mettingen', 'country_code' => 'DE'],\n            ['name' => 'Ilmajoki', 'country_code' => 'FI'],\n            ['name' => 'Zwonitz', 'country_code' => 'DE'],\n            ['name' => 'Unterfohring', 'country_code' => 'DE'],\n            ['name' => 'Ban Bo Luang', 'country_code' => 'TH'],\n            ['name' => 'Novy Bor', 'country_code' => 'CZ'],\n            ['name' => 'Neosho', 'country_code' => 'US'],\n            ['name' => 'Wells Branch', 'country_code' => 'US'],\n            ['name' => 'North Greenbush', 'country_code' => 'US'],\n            ['name' => 'Leominster', 'country_code' => 'GB'],\n            ['name' => 'Hirao', 'country_code' => 'JP'],\n            ['name' => 'Rehoboth', 'country_code' => 'US'],\n            ['name' => 'Laichingen', 'country_code' => 'DE'],\n            ['name' => 'Lincoln City', 'country_code' => 'US'],\n            ['name' => 'Prevost', 'country_code' => 'CA'],\n            ['name' => 'Essenbach', 'country_code' => 'DE'],\n            ['name' => 'Planegg', 'country_code' => 'DE'],\n            ['name' => 'Liperi', 'country_code' => 'FI'],\n            ['name' => 'Highlands', 'country_code' => 'US'],\n            ['name' => 'Pace', 'country_code' => 'FR'],\n            ['name' => 'Steha', 'country_code' => 'MA'],\n            ['name' => 'Northlake', 'country_code' => 'US'],\n            ['name' => 'Guebwiller', 'country_code' => 'FR'],\n            ['name' => 'Nussloch', 'country_code' => 'DE'],\n            ['name' => 'Eatontown', 'country_code' => 'US'],\n            ['name' => 'Bolanos de Calatrava', 'country_code' => 'ES'],\n            ['name' => 'Belem de Maria', 'country_code' => 'BR'],\n            ['name' => 'Issum', 'country_code' => 'DE'],\n            ['name' => 'Newport', 'country_code' => 'US'],\n            ['name' => 'Albox', 'country_code' => 'ES'],\n            ['name' => 'Lauffen am Neckar', 'country_code' => 'DE'],\n            ['name' => 'New Garden', 'country_code' => 'US'],\n            ['name' => 'Nova Gradiska', 'country_code' => 'HR'],\n            ['name' => 'Colares', 'country_code' => 'BR'],\n            ['name' => 'Sao Francisco do Maranhao', 'country_code' => 'BR'],\n            ['name' => 'Bad Voslau', 'country_code' => 'AT'],\n            ['name' => 'Eura', 'country_code' => 'FI'],\n            ['name' => 'Schwieberdingen', 'country_code' => 'DE'],\n            ['name' => 'Boskovice', 'country_code' => 'CZ'],\n            ['name' => 'Cesson', 'country_code' => 'FR'],\n            ['name' => 'Harwich', 'country_code' => 'US'],\n            ['name' => 'Sollies-Pont', 'country_code' => 'FR'],\n            ['name' => 'Ladenburg', 'country_code' => 'DE'],\n            ['name' => 'Aubiere', 'country_code' => 'FR'],\n            ['name' => 'Harrislee', 'country_code' => 'DE'],\n            ['name' => 'Mayate', 'country_code' => 'MA'],\n            ['name' => 'Bajiao', 'country_code' => 'CN'],\n            ['name' => 'Falmouth', 'country_code' => 'US'],\n            ['name' => 'Congonhal', 'country_code' => 'BR'],\n            ['name' => 'Cangas de Narcea', 'country_code' => 'ES'],\n            ['name' => 'Tabapua', 'country_code' => 'BR'],\n            ['name' => 'Vehkalahti', 'country_code' => 'FI'],\n            ['name' => 'Sainte-Adele', 'country_code' => 'CA'],\n            ['name' => 'Capela do Alto Alegre', 'country_code' => 'BR'],\n            ['name' => 'Freeport', 'country_code' => 'US'],\n            ['name' => 'Webb City', 'country_code' => 'US'],\n            ['name' => 'Pulsano', 'country_code' => 'IT'],\n            ['name' => 'Auchel', 'country_code' => 'FR'],\n            ['name' => 'Tabua', 'country_code' => 'PT'],\n            ['name' => 'Islamey', 'country_code' => 'RU'],\n            ['name' => 'San Valentino Torio', 'country_code' => 'IT'],\n            ['name' => 'Capela de Santana', 'country_code' => 'BR'],\n            ['name' => 'Cherlak', 'country_code' => 'RU'],\n            ['name' => 'Rosdorf', 'country_code' => 'DE'],\n            ['name' => 'Leingarten', 'country_code' => 'DE'],\n            ['name' => 'Ichinomiya', 'country_code' => 'JP'],\n            ['name' => 'Lebon Regis', 'country_code' => 'BR'],\n            ['name' => 'Saint-Cyr-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Vedene', 'country_code' => 'FR'],\n            ['name' => 'Sassenage', 'country_code' => 'FR'],\n            ['name' => 'Nova Dubnica', 'country_code' => 'SK'],\n            ['name' => 'Curiti', 'country_code' => 'CO'],\n            ['name' => 'Woodward', 'country_code' => 'US'],\n            ['name' => 'Knowsley', 'country_code' => 'GB'],\n            ['name' => 'Bicske', 'country_code' => 'HU'],\n            ['name' => 'Lower Pottsgrove', 'country_code' => 'US'],\n            ['name' => 'Melissa', 'country_code' => 'US'],\n            ['name' => 'Brock Hall', 'country_code' => 'US'],\n            ['name' => 'Drouin', 'country_code' => 'AU'],\n            ['name' => 'Uacu Cungo', 'country_code' => 'AO'],\n            ['name' => 'Weston', 'country_code' => 'US'],\n            ['name' => 'Rogerstone', 'country_code' => 'GB'],\n            ['name' => 'Socuellamos', 'country_code' => 'ES'],\n            ['name' => 'James Island', 'country_code' => 'US'],\n            ['name' => 'Kingsburg', 'country_code' => 'US'],\n            ['name' => 'Oulad Daoud', 'country_code' => 'MA'],\n            ['name' => 'Palmacia', 'country_code' => 'BR'],\n            ['name' => 'Caimito', 'country_code' => 'CO'],\n            ['name' => 'San Carlos Yautepec', 'country_code' => 'MX'],\n            ['name' => 'Oiba', 'country_code' => 'CO'],\n            ['name' => 'Pepperell', 'country_code' => 'US'],\n            ['name' => 'Brwinow', 'country_code' => 'PL'],\n            ['name' => 'Liuba', 'country_code' => 'CN'],\n            ['name' => 'Ventania', 'country_code' => 'BR'],\n            ['name' => 'Comarnic', 'country_code' => 'RO'],\n            ['name' => 'Xichu', 'country_code' => 'MX'],\n            ['name' => 'Denkendorf', 'country_code' => 'DE'],\n            ['name' => 'Guimaraes', 'country_code' => 'BR'],\n            ['name' => 'Margherita di Savoia', 'country_code' => 'IT'],\n            ['name' => 'Vosselaar', 'country_code' => 'BE'],\n            ['name' => 'Mestrino', 'country_code' => 'IT'],\n            ['name' => 'Platteville', 'country_code' => 'US'],\n            ['name' => 'Nonoai', 'country_code' => 'BR'],\n            ['name' => 'Susegana', 'country_code' => 'IT'],\n            ['name' => 'Rio do Pires', 'country_code' => 'BR'],\n            ['name' => 'Laren', 'country_code' => 'NL'],\n            ['name' => 'Eureka', 'country_code' => 'US'],\n            ['name' => 'Lovington', 'country_code' => 'US'],\n            ['name' => 'Ban Bang Yai', 'country_code' => 'TH'],\n            ['name' => 'Son Servera', 'country_code' => 'ES'],\n            ['name' => 'Jacala', 'country_code' => 'MX'],\n            ['name' => 'Priolo Gargallo', 'country_code' => 'IT'],\n            ['name' => 'Kentville', 'country_code' => 'CA'],\n            ['name' => 'Baohe', 'country_code' => 'CN'],\n            ['name' => 'Weiz', 'country_code' => 'AT'],\n            ['name' => 'Baxiangshan', 'country_code' => 'CN'],\n            ['name' => 'Chevigny-Saint-Sauveur', 'country_code' => 'FR'],\n            ['name' => 'Gambettola', 'country_code' => 'IT'],\n            ['name' => 'Little Chute', 'country_code' => 'US'],\n            ['name' => 'Bainbridge', 'country_code' => 'US'],\n            ['name' => 'Tiszakecske', 'country_code' => 'HU'],\n            ['name' => 'Saint-Martin-Boulogne', 'country_code' => 'FR'],\n            ['name' => 'Welver', 'country_code' => 'DE'],\n            ['name' => 'Erfelek', 'country_code' => 'TR'],\n            ['name' => 'Wang Saphung', 'country_code' => 'TH'],\n            ['name' => 'San Andres de Llevaneras', 'country_code' => 'ES'],\n            ['name' => 'San Antonio Palopo', 'country_code' => 'GT'],\n            ['name' => 'Xincheng', 'country_code' => 'CN'],\n            ['name' => 'Sedro-Woolley', 'country_code' => 'US'],\n            ['name' => 'Minden', 'country_code' => 'US'],\n            ['name' => 'Flores de Goias', 'country_code' => 'BR'],\n            ['name' => 'Ardanuc', 'country_code' => 'TR'],\n            ['name' => 'Oestrich-Winkel', 'country_code' => 'DE'],\n            ['name' => 'Novoishimskiy', 'country_code' => 'KZ'],\n            ['name' => 'Alfonsine', 'country_code' => 'IT'],\n            ['name' => 'Grantsville', 'country_code' => 'US'],\n            ['name' => 'Somerville', 'country_code' => 'US'],\n            ['name' => 'Middle Valley', 'country_code' => 'US'],\n            ['name' => 'Sao Miguel das Matas', 'country_code' => 'BR'],\n            ['name' => 'Oswaldtwistle', 'country_code' => 'GB'],\n            ['name' => 'Alavus', 'country_code' => 'FI'],\n            ['name' => 'Castelginest', 'country_code' => 'FR'],\n            ['name' => 'Fiume Veneto', 'country_code' => 'IT'],\n            ['name' => 'Loano', 'country_code' => 'IT'],\n            ['name' => 'Opmeer', 'country_code' => 'NL'],\n            ['name' => 'Ait Amar', 'country_code' => 'MA'],\n            ['name' => 'Toropets', 'country_code' => 'RU'],\n            ['name' => 'Ipaumirim', 'country_code' => 'BR'],\n            ['name' => 'Dario Meira', 'country_code' => 'BR'],\n            ['name' => 'Union Park', 'country_code' => 'US'],\n            ['name' => 'Havixbeck', 'country_code' => 'DE'],\n            ['name' => 'Don Sak', 'country_code' => 'TH'],\n            ['name' => 'Joaquim Tavora', 'country_code' => 'BR'],\n            ['name' => 'Martuni', 'country_code' => 'AM'],\n            ['name' => 'South Charleston', 'country_code' => 'US'],\n            ['name' => 'Fairfax Station', 'country_code' => 'US'],\n            ['name' => 'Souq Jamaa Fdalate', 'country_code' => 'MA'],\n            ['name' => 'Sowerby Bridge', 'country_code' => 'GB'],\n            ['name' => 'Sao Pedro da Agua Branca', 'country_code' => 'BR'],\n            ['name' => 'Huite', 'country_code' => 'GT'],\n            ['name' => 'Corbas', 'country_code' => 'FR'],\n            ['name' => 'Thiers', 'country_code' => 'FR'],\n            ['name' => 'Lanuza', 'country_code' => 'PH'],\n            ['name' => 'Al Fayd', 'country_code' => 'MA'],\n            ['name' => 'Leeds', 'country_code' => 'US'],\n            ['name' => 'Holiday City-Berkeley', 'country_code' => 'US'],\n            ['name' => 'Beniajan', 'country_code' => 'ES'],\n            ['name' => 'Bad Fallingbostel', 'country_code' => 'DE'],\n            ['name' => 'East Bethel', 'country_code' => 'US'],\n            ['name' => 'Richland', 'country_code' => 'US'],\n            ['name' => 'Villefranche-de-Rouergue', 'country_code' => 'FR'],\n            ['name' => 'Southwick', 'country_code' => 'GB'],\n            ['name' => 'Festus', 'country_code' => 'US'],\n            ['name' => 'Aperibe', 'country_code' => 'BR'],\n            ['name' => 'Giffoni Valle Piana', 'country_code' => 'IT'],\n            ['name' => 'Valentigney', 'country_code' => 'FR'],\n            ['name' => 'Riverview', 'country_code' => 'US'],\n            ['name' => 'Villepreux', 'country_code' => 'FR'],\n            ['name' => 'Altstatten', 'country_code' => 'CH'],\n            ['name' => 'Bath', 'country_code' => 'US'],\n            ['name' => 'Saint-Gaudens', 'country_code' => 'FR'],\n            ['name' => 'Meitingen', 'country_code' => 'DE'],\n            ['name' => 'Nong Bua', 'country_code' => 'TH'],\n            ['name' => 'Gainza', 'country_code' => 'PH'],\n            ['name' => 'Smithfield', 'country_code' => 'US'],\n            ['name' => 'Comasagua', 'country_code' => 'SV'],\n            ['name' => 'Koszeg', 'country_code' => 'HU'],\n            ['name' => 'Swan Hill', 'country_code' => 'AU'],\n            ['name' => 'Blaricum', 'country_code' => 'NL'],\n            ['name' => 'Korb', 'country_code' => 'DE'],\n            ['name' => 'Cave', 'country_code' => 'IT'],\n            ['name' => 'Galvarino', 'country_code' => 'CL'],\n            ['name' => 'Mainvilliers', 'country_code' => 'FR'],\n            ['name' => 'Weatherford', 'country_code' => 'US'],\n            ['name' => 'Miller Place', 'country_code' => 'US'],\n            ['name' => 'Bilovodsk', 'country_code' => 'UA'],\n            ['name' => 'Lichtenstein', 'country_code' => 'DE'],\n            ['name' => 'Longuenesse', 'country_code' => 'FR'],\n            ['name' => 'Sajoszentpeter', 'country_code' => 'HU'],\n            ['name' => 'Ponteland', 'country_code' => 'GB'],\n            ['name' => 'Betania', 'country_code' => 'BR'],\n            ['name' => 'El Arba Des Bir Lenni', 'country_code' => 'MA'],\n            ['name' => 'Rapho', 'country_code' => 'US'],\n            ['name' => 'Beauharnois', 'country_code' => 'CA'],\n            ['name' => 'Anao', 'country_code' => 'PH'],\n            ['name' => 'Ain Beida', 'country_code' => 'MA'],\n            ['name' => 'Les Iles-de-la-Madeleine', 'country_code' => 'CA'],\n            ['name' => 'Zlate Moravce', 'country_code' => 'SK'],\n            ['name' => 'Issoudun', 'country_code' => 'FR'],\n            ['name' => 'Josefina', 'country_code' => 'PH'],\n            ['name' => 'Nyirbator', 'country_code' => 'HU'],\n            ['name' => 'Doesburg', 'country_code' => 'NL'],\n            ['name' => 'Princetown', 'country_code' => 'GY'],\n            ['name' => 'Kissing', 'country_code' => 'DE'],\n            ['name' => 'Volosovo', 'country_code' => 'RU'],\n            ['name' => 'Campo Alegre', 'country_code' => 'BR'],\n            ['name' => 'Spring Lake', 'country_code' => 'US'],\n            ['name' => 'Bomlo', 'country_code' => 'NO'],\n            ['name' => 'Poranga', 'country_code' => 'BR'],\n            ['name' => 'Holyhead', 'country_code' => 'GB'],\n            ['name' => 'Krasnousol skiy', 'country_code' => 'RU'],\n            ['name' => 'Patu', 'country_code' => 'BR'],\n            ['name' => 'Folkston', 'country_code' => 'US'],\n            ['name' => 'Sarbogard', 'country_code' => 'HU'],\n            ['name' => 'Macedonia', 'country_code' => 'US'],\n            ['name' => 'Casteldaccia', 'country_code' => 'IT'],\n            ['name' => 'Hildburghausen', 'country_code' => 'DE'],\n            ['name' => 'Tlacolulan', 'country_code' => 'MX'],\n            ['name' => 'Carnot-Moon', 'country_code' => 'US'],\n            ['name' => 'Jerome', 'country_code' => 'US'],\n            ['name' => 'Kasaji', 'country_code' => 'CD'],\n            ['name' => 'Pritzwalk', 'country_code' => 'DE'],\n            ['name' => 'Geisenheim', 'country_code' => 'DE'],\n            ['name' => 'Prairie Ridge', 'country_code' => 'US'],\n            ['name' => 'Matmata', 'country_code' => 'MA'],\n            ['name' => 'Union', 'country_code' => 'US'],\n            ['name' => 'Montrose', 'country_code' => 'GB'],\n            ['name' => 'Hamilton Square', 'country_code' => 'US'],\n            ['name' => 'Erbaocun', 'country_code' => 'CN'],\n            ['name' => 'Abergele', 'country_code' => 'GB'],\n            ['name' => 'Moncks Corner', 'country_code' => 'US'],\n            ['name' => 'Ghabaghib', 'country_code' => 'SY'],\n            ['name' => 'Goulds', 'country_code' => 'US'],\n            ['name' => 'Killarney', 'country_code' => 'IE'],\n            ['name' => 'Dinkelsbuhl', 'country_code' => 'DE'],\n            ['name' => 'Alijo', 'country_code' => 'PT'],\n            ['name' => 'Caldogno', 'country_code' => 'IT'],\n            ['name' => 'North Lebanon', 'country_code' => 'US'],\n            ['name' => 'Palos de la Frontera', 'country_code' => 'ES'],\n            ['name' => 'Santa Flavia', 'country_code' => 'IT'],\n            ['name' => 'Batonyterenye', 'country_code' => 'HU'],\n            ['name' => 'Mykhailivka', 'country_code' => 'UA'],\n            ['name' => 'Chaumont-Gistoux', 'country_code' => 'BE'],\n            ['name' => 'Santona', 'country_code' => 'ES'],\n            ['name' => 'Newton', 'country_code' => 'US'],\n            ['name' => 'Cedro', 'country_code' => 'BR'],\n            ['name' => 'Janow Lubelski', 'country_code' => 'PL'],\n            ['name' => 'Maltby', 'country_code' => 'US'],\n            ['name' => 'Jiajin', 'country_code' => 'CN'],\n            ['name' => 'Gardone Val Trompia', 'country_code' => 'IT'],\n            ['name' => 'Cogolin', 'country_code' => 'FR'],\n            ['name' => 'Villebon-sur-Yvette', 'country_code' => 'FR'],\n            ['name' => 'Garden City', 'country_code' => 'US'],\n            ['name' => 'Somersworth', 'country_code' => 'US'],\n            ['name' => 'Serravalle Pistoiese', 'country_code' => 'IT'],\n            ['name' => 'Bordentown', 'country_code' => 'US'],\n            ['name' => 'Diez', 'country_code' => 'DE'],\n            ['name' => 'Norton', 'country_code' => 'US'],\n            ['name' => 'Bad Durrenberg', 'country_code' => 'DE'],\n            ['name' => 'Tigzirt', 'country_code' => 'DZ'],\n            ['name' => 'Ellwood City', 'country_code' => 'US'],\n            ['name' => 'Glenwood Springs', 'country_code' => 'US'],\n            ['name' => 'Great Wyrley', 'country_code' => 'GB'],\n            ['name' => 'Greensburg', 'country_code' => 'US'],\n            ['name' => 'Tucson Estates', 'country_code' => 'US'],\n            ['name' => 'Pavlikeni', 'country_code' => 'BG'],\n            ['name' => 'Negresti-Oas', 'country_code' => 'RO'],\n            ['name' => 'Macclenny', 'country_code' => 'US'],\n            ['name' => 'Echelon', 'country_code' => 'US'],\n            ['name' => 'East Grand Rapids', 'country_code' => 'US'],\n            ['name' => 'Drolshagen', 'country_code' => 'DE'],\n            ['name' => 'Newberry', 'country_code' => 'US'],\n            ['name' => 'Cernay', 'country_code' => 'FR'],\n            ['name' => 'Sidi Amer El Hadi', 'country_code' => 'MA'],\n            ['name' => 'Villeneuve-Tolosane', 'country_code' => 'FR'],\n            ['name' => 'La Puebla del Rio', 'country_code' => 'ES'],\n            ['name' => 'Chuquicamata', 'country_code' => 'CL'],\n            ['name' => 'Arenzano', 'country_code' => 'IT'],\n            ['name' => 'Cungus', 'country_code' => 'TR'],\n            ['name' => 'Myjava', 'country_code' => 'SK'],\n            ['name' => 'Sandy', 'country_code' => 'GB'],\n            ['name' => 'Onet Village', 'country_code' => 'FR'],\n            ['name' => 'Lansing', 'country_code' => 'US'],\n            ['name' => 'Tizi Nisly', 'country_code' => 'MA'],\n            ['name' => 'Campobello di Mazara', 'country_code' => 'IT'],\n            ['name' => 'Mondai', 'country_code' => 'BR'],\n            ['name' => 'Brookhaven', 'country_code' => 'US'],\n            ['name' => 'Nowe Miasto Lubawskie', 'country_code' => 'PL'],\n            ['name' => 'Winfield', 'country_code' => 'US'],\n            ['name' => 'Finale Ligure', 'country_code' => 'IT'],\n            ['name' => 'Olivenza', 'country_code' => 'ES'],\n            ['name' => 'Norwalk', 'country_code' => 'US'],\n            ['name' => 'Nambour', 'country_code' => 'AU'],\n            ['name' => 'West Deer', 'country_code' => 'US'],\n            ['name' => 'Sassenburg', 'country_code' => 'DE'],\n            ['name' => 'Camp Pendleton South', 'country_code' => 'US'],\n            ['name' => 'Hudson', 'country_code' => 'US'],\n            ['name' => 'Clermont', 'country_code' => 'FR'],\n            ['name' => 'Qazmalar', 'country_code' => 'AZ'],\n            ['name' => 'Belp', 'country_code' => 'CH'],\n            ['name' => 'Vaux-le-Penil', 'country_code' => 'FR'],\n            ['name' => 'Spencer', 'country_code' => 'US'],\n            ['name' => 'Pozharan', 'country_code' => 'XK'],\n            ['name' => 'Robinson', 'country_code' => 'US'],\n            ['name' => 'San Michele al Tagliamento', 'country_code' => 'IT'],\n            ['name' => 'Newport East', 'country_code' => 'US'],\n            ['name' => 'Pilis', 'country_code' => 'HU'],\n            ['name' => 'Portales', 'country_code' => 'US'],\n            ['name' => 'Castenedolo', 'country_code' => 'IT'],\n            ['name' => 'Bechloul', 'country_code' => 'DZ'],\n            ['name' => 'Miesbach', 'country_code' => 'DE'],\n            ['name' => 'Amelia', 'country_code' => 'IT'],\n            ['name' => 'Downham Market', 'country_code' => 'GB'],\n            ['name' => 'Maniago', 'country_code' => 'IT'],\n            ['name' => 'Meghraj', 'country_code' => 'IN'],\n            ['name' => 'Wellington North', 'country_code' => 'CA'],\n            ['name' => 'Ploufragan', 'country_code' => 'FR'],\n            ['name' => 'St. Andrews', 'country_code' => 'CA'],\n            ['name' => 'Veurne', 'country_code' => 'BE'],\n            ['name' => 'Torton', 'country_code' => 'GB'],\n            ['name' => 'Sao Sebastiao de Lagoa de Roca', 'country_code' => 'BR'],\n            ['name' => 'Port Washington', 'country_code' => 'US'],\n            ['name' => 'Somerville', 'country_code' => 'AU'],\n            ['name' => 'Wootton', 'country_code' => 'GB'],\n            ['name' => 'Villa Aldama', 'country_code' => 'MX'],\n            ['name' => 'Maxhutte-Haidhof', 'country_code' => 'DE'],\n            ['name' => 'Waimea', 'country_code' => 'US'],\n            ['name' => 'Lendinara', 'country_code' => 'IT'],\n            ['name' => 'Eijsden', 'country_code' => 'NL'],\n            ['name' => 'Arkadak', 'country_code' => 'RU'],\n            ['name' => 'Green River', 'country_code' => 'US'],\n            ['name' => 'Tremonton', 'country_code' => 'US'],\n            ['name' => 'Ibira', 'country_code' => 'BR'],\n            ['name' => 'Terra Alta', 'country_code' => 'BR'],\n            ['name' => 'Bitritto', 'country_code' => 'IT'],\n            ['name' => 'Osterhofen', 'country_code' => 'DE'],\n            ['name' => 'Carleton Place', 'country_code' => 'CA'],\n            ['name' => 'Vendas Novas', 'country_code' => 'PT'],\n            ['name' => 'Santa Cruz Itundujia', 'country_code' => 'MX'],\n            ['name' => 'Ivybridge', 'country_code' => 'GB'],\n            ['name' => 'Palmilla', 'country_code' => 'CL'],\n            ['name' => 'Ban Phan Don', 'country_code' => 'TH'],\n            ['name' => 'Cottage Grove', 'country_code' => 'US'],\n            ['name' => 'Pellezzano', 'country_code' => 'IT'],\n            ['name' => 'Ojuelos de Jalisco', 'country_code' => 'MX'],\n            ['name' => 'Ban Bang Lamung', 'country_code' => 'TH'],\n            ['name' => 'Neuville-en-Ferrain', 'country_code' => 'FR'],\n            ['name' => 'Inhangapi', 'country_code' => 'BR'],\n            ['name' => 'Upper', 'country_code' => 'US'],\n            ['name' => 'Budelsdorf', 'country_code' => 'DE'],\n            ['name' => 'Sarospatak', 'country_code' => 'HU'],\n            ['name' => 'Macerata Campania', 'country_code' => 'IT'],\n            ['name' => 'Ukrainsk', 'country_code' => 'UA'],\n            ['name' => 'Novaya Lyalya', 'country_code' => 'RU'],\n            ['name' => 'Mazzarino', 'country_code' => 'IT'],\n            ['name' => 'Guidel', 'country_code' => 'FR'],\n            ['name' => 'Valley Falls', 'country_code' => 'US'],\n            ['name' => 'Stafford', 'country_code' => 'US'],\n            ['name' => 'El Palmar', 'country_code' => 'GT'],\n            ['name' => 'Ban Bang Toei', 'country_code' => 'TH'],\n            ['name' => 'Bopfingen', 'country_code' => 'DE'],\n            ['name' => 'Berkley', 'country_code' => 'US'],\n            ['name' => 'Nacozari Viejo', 'country_code' => 'MX'],\n            ['name' => 'Peixe', 'country_code' => 'BR'],\n            ['name' => 'Alamedin', 'country_code' => 'KG'],\n            ['name' => 'Robertsville', 'country_code' => 'US'],\n            ['name' => 'Matino', 'country_code' => 'IT'],\n            ['name' => 'Saint-Pierre-du-Perray', 'country_code' => 'FR'],\n            ['name' => 'Delavan', 'country_code' => 'US'],\n            ['name' => 'Langgons', 'country_code' => 'DE'],\n            ['name' => 'Horodnia', 'country_code' => 'UA'],\n            ['name' => 'Abasolo', 'country_code' => 'MX'],\n            ['name' => 'Sandown', 'country_code' => 'GB'],\n            ['name' => 'Kingston', 'country_code' => 'AU'],\n            ['name' => 'Patterson', 'country_code' => 'US'],\n            ['name' => 'Vineyard', 'country_code' => 'US'],\n            ['name' => 'Elgoibar', 'country_code' => 'ES'],\n            ['name' => 'Sogndal', 'country_code' => 'NO'],\n            ['name' => 'Zetel', 'country_code' => 'DE'],\n            ['name' => 'Coswig', 'country_code' => 'DE'],\n            ['name' => 'Mulheim-Karlich', 'country_code' => 'DE'],\n            ['name' => 'Kuchinarai', 'country_code' => 'TH'],\n            ['name' => 'Ovidiopol', 'country_code' => 'UA'],\n            ['name' => 'Isperih', 'country_code' => 'BG'],\n            ['name' => 'Richfield', 'country_code' => 'US'],\n            ['name' => 'Port Lavaca', 'country_code' => 'US'],\n            ['name' => 'Whistler', 'country_code' => 'CA'],\n            ['name' => 'Macajuba', 'country_code' => 'BR'],\n            ['name' => 'Moulay Driss Zerhoun', 'country_code' => 'MA'],\n            ['name' => 'Otsego', 'country_code' => 'US'],\n            ['name' => 'Malvern', 'country_code' => 'US'],\n            ['name' => 'Cricova', 'country_code' => 'MD'],\n            ['name' => 'Monschau', 'country_code' => 'DE'],\n            ['name' => 'Cadillac', 'country_code' => 'US'],\n            ['name' => 'Holesov', 'country_code' => 'CZ'],\n            ['name' => 'Malargue', 'country_code' => 'AR'],\n            ['name' => 'Worb', 'country_code' => 'CH'],\n            ['name' => 'Inzago', 'country_code' => 'IT'],\n            ['name' => 'Santiago', 'country_code' => 'CR'],\n            ['name' => 'Lake Station', 'country_code' => 'US'],\n            ['name' => 'Healdsburg', 'country_code' => 'US'],\n            ['name' => 'Brighton', 'country_code' => 'CA'],\n            ['name' => 'Sao Felix do Araguaia', 'country_code' => 'BR'],\n            ['name' => 'Tolcayuca', 'country_code' => 'MX'],\n            ['name' => 'Sandy', 'country_code' => 'US'],\n            ['name' => 'Bocaina', 'country_code' => 'BR'],\n            ['name' => 'East Renton Highlands', 'country_code' => 'US'],\n            ['name' => 'East Whiteland', 'country_code' => 'US'],\n            ['name' => 'Rodenbach', 'country_code' => 'DE'],\n            ['name' => 'Casino', 'country_code' => 'AU'],\n            ['name' => 'Scornicesti', 'country_code' => 'RO'],\n            ['name' => 'Red Bank', 'country_code' => 'US'],\n            ['name' => 'Brown Deer', 'country_code' => 'US'],\n            ['name' => 'Ban Wiang Phan', 'country_code' => 'TH'],\n            ['name' => 'Azcoitia', 'country_code' => 'ES'],\n            ['name' => 'Crestwood', 'country_code' => 'US'],\n            ['name' => 'Grants', 'country_code' => 'US'],\n            ['name' => 'Wormer', 'country_code' => 'NL'],\n            ['name' => 'Gouvea', 'country_code' => 'BR'],\n            ['name' => 'Opatija', 'country_code' => 'HR'],\n            ['name' => 'Moldava nad Bodvou', 'country_code' => 'SK'],\n            ['name' => 'Rio dos Cedros', 'country_code' => 'BR'],\n            ['name' => 'Ceu Azul', 'country_code' => 'BR'],\n            ['name' => 'Dolo Bay', 'country_code' => 'ET'],\n            ['name' => 'Caetanopolis', 'country_code' => 'BR'],\n            ['name' => 'Neuhausen am Rheinfall', 'country_code' => 'CH'],\n            ['name' => 'Chaplygin', 'country_code' => 'RU'],\n            ['name' => 'Wrentham', 'country_code' => 'US'],\n            ['name' => 'Prudhoe', 'country_code' => 'GB'],\n            ['name' => 'Uberherrn', 'country_code' => 'DE'],\n            ['name' => 'Haradok', 'country_code' => 'BY'],\n            ['name' => 'Malibu', 'country_code' => 'US'],\n            ['name' => 'Porto-Vecchio', 'country_code' => 'FR'],\n            ['name' => 'Pornichet', 'country_code' => 'FR'],\n            ['name' => 'Alto Rio Doce', 'country_code' => 'BR'],\n            ['name' => 'Castano Primo', 'country_code' => 'IT'],\n            ['name' => 'Smyrna', 'country_code' => 'US'],\n            ['name' => 'Conceicao dos Ouros', 'country_code' => 'BR'],\n            ['name' => 'Mudgee', 'country_code' => 'AU'],\n            ['name' => 'Tifni', 'country_code' => 'MA'],\n            ['name' => 'Codigoro', 'country_code' => 'IT'],\n            ['name' => 'Obidos', 'country_code' => 'PT'],\n            ['name' => 'Mareeba', 'country_code' => 'AU'],\n            ['name' => 'Campagnano di Roma', 'country_code' => 'IT'],\n            ['name' => 'Cisneros', 'country_code' => 'CO'],\n            ['name' => 'Halasztelek', 'country_code' => 'HU'],\n            ['name' => 'Benedito Novo', 'country_code' => 'BR'],\n            ['name' => 'Baranivka', 'country_code' => 'UA'],\n            ['name' => 'Market Drayton', 'country_code' => 'GB'],\n            ['name' => 'Labin', 'country_code' => 'HR'],\n            ['name' => 'Venosa', 'country_code' => 'IT'],\n            ['name' => 'Bucyrus', 'country_code' => 'US'],\n            ['name' => 'Mombris', 'country_code' => 'DE'],\n            ['name' => 'Zayukovo', 'country_code' => 'RU'],\n            ['name' => 'Santo Antonio do Jacinto', 'country_code' => 'BR'],\n            ['name' => 'La Roche-sur-Foron', 'country_code' => 'FR'],\n            ['name' => 'Cafayate', 'country_code' => 'AR'],\n            ['name' => 'Medina Sidonia', 'country_code' => 'ES'],\n            ['name' => 'Valencia West', 'country_code' => 'US'],\n            ['name' => 'Viera East', 'country_code' => 'US'],\n            ['name' => 'Phon', 'country_code' => 'TH'],\n            ['name' => 'Lommedalen', 'country_code' => 'NO'],\n            ['name' => 'San Pedro', 'country_code' => 'BZ'],\n            ['name' => 'Guspini', 'country_code' => 'IT'],\n            ['name' => 'Targu Lapus', 'country_code' => 'RO'],\n            ['name' => 'Obernai', 'country_code' => 'FR'],\n            ['name' => 'Hauzenberg', 'country_code' => 'DE'],\n            ['name' => 'Cuers', 'country_code' => 'FR'],\n            ['name' => 'Sainte-Savine', 'country_code' => 'FR'],\n            ['name' => 'Tiny', 'country_code' => 'CA'],\n            ['name' => 'Irupi', 'country_code' => 'BR'],\n            ['name' => 'Norfolk', 'country_code' => 'US'],\n            ['name' => 'Kankaanpaa', 'country_code' => 'FI'],\n            ['name' => 'Sitio do Quinto', 'country_code' => 'BR'],\n            ['name' => 'Riolandia', 'country_code' => 'BR'],\n            ['name' => 'Trofarello', 'country_code' => 'IT'],\n            ['name' => 'Cologno al Serio', 'country_code' => 'IT'],\n            ['name' => 'Tring', 'country_code' => 'GB'],\n            ['name' => 'Tomball', 'country_code' => 'US'],\n            ['name' => 'Ganserndorf', 'country_code' => 'AT'],\n            ['name' => 'Hawera', 'country_code' => 'NZ'],\n            ['name' => 'Lieksa', 'country_code' => 'FI'],\n            ['name' => 'Dolinsk', 'country_code' => 'RU'],\n            ['name' => 'Jaqueira', 'country_code' => 'BR'],\n            ['name' => 'Vlasim', 'country_code' => 'CZ'],\n            ['name' => 'Padiham', 'country_code' => 'GB'],\n            ['name' => 'Florida City', 'country_code' => 'US'],\n            ['name' => 'Etaples', 'country_code' => 'FR'],\n            ['name' => 'Arataca', 'country_code' => 'BR'],\n            ['name' => 'Cisternino', 'country_code' => 'IT'],\n            ['name' => 'Courrieres', 'country_code' => 'FR'],\n            ['name' => 'Zero Branco', 'country_code' => 'IT'],\n            ['name' => 'Vasylkivka', 'country_code' => 'UA'],\n            ['name' => 'Wanaque', 'country_code' => 'US'],\n            ['name' => 'Englefield Green', 'country_code' => 'GB'],\n            ['name' => 'Hollabrunn', 'country_code' => 'AT'],\n            ['name' => 'Scotts Valley', 'country_code' => 'US'],\n            ['name' => 'Gora', 'country_code' => 'PL'],\n            ['name' => 'Jarabulus', 'country_code' => 'SY'],\n            ['name' => 'Sao Joao do Manhuacu', 'country_code' => 'BR'],\n            ['name' => 'Stokke', 'country_code' => 'NO'],\n            ['name' => 'Jose Maria Morelos', 'country_code' => 'MX'],\n            ['name' => 'Darnetal', 'country_code' => 'FR'],\n            ['name' => 'Puente Nacional', 'country_code' => 'CO'],\n            ['name' => 'Robstown', 'country_code' => 'US'],\n            ['name' => 'Mezdra', 'country_code' => 'BG'],\n            ['name' => 'Georgetown', 'country_code' => 'US'],\n            ['name' => 'Sunninghill', 'country_code' => 'GB'],\n            ['name' => 'Kruje', 'country_code' => 'AL'],\n            ['name' => 'Rurrenabaque', 'country_code' => 'BO'],\n            ['name' => 'Apen', 'country_code' => 'DE'],\n            ['name' => 'Lake Los Angeles', 'country_code' => 'US'],\n            ['name' => 'Aesch', 'country_code' => 'CH'],\n            ['name' => 'Choppington', 'country_code' => 'GB'],\n            ['name' => 'Sinzheim', 'country_code' => 'DE'],\n            ['name' => 'Wolnzach', 'country_code' => 'DE'],\n            ['name' => 'Wolmirstedt', 'country_code' => 'DE'],\n            ['name' => 'Ross on Wye', 'country_code' => 'GB'],\n            ['name' => 'Carbonera', 'country_code' => 'IT'],\n            ['name' => 'Raubling', 'country_code' => 'DE'],\n            ['name' => 'North Tidworth', 'country_code' => 'GB'],\n            ['name' => 'Arlington', 'country_code' => 'US'],\n            ['name' => 'Wanderlandia', 'country_code' => 'BR'],\n            ['name' => 'Magdagachi', 'country_code' => 'RU'],\n            ['name' => 'Teixeiras', 'country_code' => 'BR'],\n            ['name' => 'Al M aziz', 'country_code' => 'MA'],\n            ['name' => 'Vauvert', 'country_code' => 'FR'],\n            ['name' => 'Somerset', 'country_code' => 'US'],\n            ['name' => 'Pimenteiras', 'country_code' => 'BR'],\n            ['name' => 'Bonito de Santa Fe', 'country_code' => 'BR'],\n            ['name' => 'Nemyriv', 'country_code' => 'UA'],\n            ['name' => 'Rio Colorado', 'country_code' => 'AR'],\n            ['name' => 'Velke Mezirici', 'country_code' => 'CZ'],\n            ['name' => 'Matca', 'country_code' => 'RO'],\n            ['name' => 'Elma', 'country_code' => 'US'],\n            ['name' => 'Excelsior Springs', 'country_code' => 'US'],\n            ['name' => 'Diamond Springs', 'country_code' => 'US'],\n            ['name' => 'Lundazi', 'country_code' => 'ZM'],\n            ['name' => 'Gerstetten', 'country_code' => 'DE'],\n            ['name' => 'Kalaoa', 'country_code' => 'US'],\n            ['name' => 'Deutschlandsberg', 'country_code' => 'AT'],\n            ['name' => 'Grafenhainichen', 'country_code' => 'DE'],\n            ['name' => 'Sint Anthonis', 'country_code' => 'NL'],\n            ['name' => 'Laredo', 'country_code' => 'ES'],\n            ['name' => 'Saverne', 'country_code' => 'FR'],\n            ['name' => 'Dudley', 'country_code' => 'US'],\n            ['name' => 'Poggio a Caiano', 'country_code' => 'IT'],\n            ['name' => 'Portomaggiore', 'country_code' => 'IT'],\n            ['name' => 'Angicos', 'country_code' => 'BR'],\n            ['name' => 'Carver', 'country_code' => 'US'],\n            ['name' => 'Cordele', 'country_code' => 'US'],\n            ['name' => 'Orchha', 'country_code' => 'IN'],\n            ['name' => 'Musile di Piave', 'country_code' => 'IT'],\n            ['name' => 'Mendota', 'country_code' => 'US'],\n            ['name' => 'Grafton', 'country_code' => 'US'],\n            ['name' => 'Tegueste', 'country_code' => 'ES'],\n            ['name' => 'Mohnesee', 'country_code' => 'DE'],\n            ['name' => 'Tamezmout', 'country_code' => 'MA'],\n            ['name' => 'Athol', 'country_code' => 'US'],\n            ['name' => 'Jodar', 'country_code' => 'ES'],\n            ['name' => 'Plymouth', 'country_code' => 'US'],\n            ['name' => 'Pacoti', 'country_code' => 'BR'],\n            ['name' => 'Isola della Scala', 'country_code' => 'IT'],\n            ['name' => 'Eufaula', 'country_code' => 'US'],\n            ['name' => 'Frenstat pod Radhostem', 'country_code' => 'CZ'],\n            ['name' => 'Glen Rock', 'country_code' => 'US'],\n            ['name' => 'Cocoa Beach', 'country_code' => 'US'],\n            ['name' => 'Altdorf', 'country_code' => 'DE'],\n            ['name' => 'Prymorsk', 'country_code' => 'UA'],\n            ['name' => 'Ravanusa', 'country_code' => 'IT'],\n            ['name' => 'Aniche', 'country_code' => 'FR'],\n            ['name' => 'Taormina', 'country_code' => 'IT'],\n            ['name' => 'Benaguacil', 'country_code' => 'ES'],\n            ['name' => 'Motegi', 'country_code' => 'JP'],\n            ['name' => 'Nossa Senhora dos Milagres', 'country_code' => 'BR'],\n            ['name' => 'Mena', 'country_code' => 'UA'],\n            ['name' => 'Ubai', 'country_code' => 'BR'],\n            ['name' => 'Bagamanoc', 'country_code' => 'PH'],\n            ['name' => 'Oliva', 'country_code' => 'AR'],\n            ['name' => 'Campo do Meio', 'country_code' => 'BR'],\n            ['name' => 'Bullas', 'country_code' => 'ES'],\n            ['name' => 'Billerbeck', 'country_code' => 'DE'],\n            ['name' => 'Nyazepetrovsk', 'country_code' => 'RU'],\n            ['name' => 'Ouro Branco', 'country_code' => 'BR'],\n            ['name' => 'Mitai', 'country_code' => 'JP'],\n            ['name' => 'Clute', 'country_code' => 'US'],\n            ['name' => 'Rodeio', 'country_code' => 'BR'],\n            ['name' => 'Tamalpais-Homestead Valley', 'country_code' => 'US'],\n            ['name' => 'Gander', 'country_code' => 'CA'],\n            ['name' => 'Allonnes', 'country_code' => 'FR'],\n            ['name' => 'Ovada', 'country_code' => 'IT'],\n            ['name' => 'Port St. John', 'country_code' => 'US'],\n            ['name' => 'Eningen unter Achalm', 'country_code' => 'DE'],\n            ['name' => 'Caorle', 'country_code' => 'IT'],\n            ['name' => 'Chantilly', 'country_code' => 'FR'],\n            ['name' => 'Hinwil', 'country_code' => 'CH'],\n            ['name' => 'Hazerswoude-Dorp', 'country_code' => 'NL'],\n            ['name' => 'Southborough', 'country_code' => 'GB'],\n            ['name' => 'Isaszeg', 'country_code' => 'HU'],\n            ['name' => 'Septemes-les-Vallons', 'country_code' => 'FR'],\n            ['name' => 'Serra do Salitre', 'country_code' => 'BR'],\n            ['name' => 'Endwell', 'country_code' => 'US'],\n            ['name' => 'Udachnyy', 'country_code' => 'RU'],\n            ['name' => 'Guaicara', 'country_code' => 'BR'],\n            ['name' => 'Xiaoba', 'country_code' => 'CN'],\n            ['name' => 'Salaya', 'country_code' => 'TH'],\n            ['name' => 'Redentora', 'country_code' => 'BR'],\n            ['name' => 'Iver', 'country_code' => 'GB'],\n            ['name' => 'Imarui', 'country_code' => 'BR'],\n            ['name' => 'Lyuban ', 'country_code' => 'BY'],\n            ['name' => 'Diao ecun', 'country_code' => 'CN'],\n            ['name' => 'Sant Joan de Vilatorrada', 'country_code' => 'ES'],\n            ['name' => 'Esquipulas Palo Gordo', 'country_code' => 'GT'],\n            ['name' => 'Tabontabon', 'country_code' => 'PH'],\n            ['name' => 'Plano', 'country_code' => 'US'],\n            ['name' => 'Madison Heights', 'country_code' => 'US'],\n            ['name' => 'Port Morant', 'country_code' => 'JM'],\n            ['name' => 'Huandacareo', 'country_code' => 'MX'],\n            ['name' => 'Kurim', 'country_code' => 'CZ'],\n            ['name' => 'Rudersberg', 'country_code' => 'DE'],\n            ['name' => 'Guthrie', 'country_code' => 'US'],\n            ['name' => 'Dranesville', 'country_code' => 'US'],\n            ['name' => 'Royal Wootton Bassett', 'country_code' => 'GB'],\n            ['name' => 'Rothesay', 'country_code' => 'CA'],\n            ['name' => 'Pilar', 'country_code' => 'PH'],\n            ['name' => 'Burgthann', 'country_code' => 'DE'],\n            ['name' => 'Schwaigern', 'country_code' => 'DE'],\n            ['name' => 'El Campo', 'country_code' => 'US'],\n            ['name' => 'Varzaneh', 'country_code' => 'IR'],\n            ['name' => 'Fortaleza dos Nogueiras', 'country_code' => 'BR'],\n            ['name' => 'Trecastagni', 'country_code' => 'IT'],\n            ['name' => 'Videle', 'country_code' => 'RO'],\n            ['name' => 'Whitburn', 'country_code' => 'GB'],\n            ['name' => 'Annoeullin', 'country_code' => 'FR'],\n            ['name' => 'Mala Vyska', 'country_code' => 'UA'],\n            ['name' => 'Bonate di Sopra', 'country_code' => 'IT'],\n            ['name' => 'Oulad Friha', 'country_code' => 'MA'],\n            ['name' => 'Panajachel', 'country_code' => 'GT'],\n            ['name' => 'Drawsko Pomorskie', 'country_code' => 'PL'],\n            ['name' => 'Budakalasz', 'country_code' => 'HU'],\n            ['name' => 'Accokeek', 'country_code' => 'US'],\n            ['name' => 'Mistelbach', 'country_code' => 'AT'],\n            ['name' => 'Gravatal', 'country_code' => 'BR'],\n            ['name' => 'Svidnik', 'country_code' => 'SK'],\n            ['name' => 'Saint Helena Bay', 'country_code' => 'ZA'],\n            ['name' => 'Rangsdorf', 'country_code' => 'DE'],\n            ['name' => 'Krynica', 'country_code' => 'PL'],\n            ['name' => 'Doornspijk', 'country_code' => 'NL'],\n            ['name' => 'Kalmiuske', 'country_code' => 'UA'],\n            ['name' => 'Brock', 'country_code' => 'CA'],\n            ['name' => 'Kirchhundem', 'country_code' => 'DE'],\n            ['name' => 'Evanston', 'country_code' => 'US'],\n            ['name' => 'Stupava', 'country_code' => 'SK'],\n            ['name' => 'Nzeto', 'country_code' => 'AO'],\n            ['name' => 'Tudela', 'country_code' => 'PH'],\n            ['name' => 'Dautphe', 'country_code' => 'DE'],\n            ['name' => 'Eccleston', 'country_code' => 'GB'],\n            ['name' => 'Randaberg', 'country_code' => 'NO'],\n            ['name' => 'Anatoli', 'country_code' => 'GR'],\n            ['name' => 'Hipperholme', 'country_code' => 'GB'],\n            ['name' => 'Vernouillet', 'country_code' => 'FR'],\n            ['name' => 'Itabirinha de Mantena', 'country_code' => 'BR'],\n            ['name' => 'Mohlin', 'country_code' => 'CH'],\n            ['name' => 'Sidi Moussa Ben Ali', 'country_code' => 'MA'],\n            ['name' => 'Bad Nenndorf', 'country_code' => 'DE'],\n            ['name' => 'Teulada', 'country_code' => 'ES'],\n            ['name' => 'Walldurn', 'country_code' => 'DE'],\n            ['name' => 'Schoningen', 'country_code' => 'DE'],\n            ['name' => 'Bytca', 'country_code' => 'SK'],\n            ['name' => 'Calheta', 'country_code' => 'PT'],\n            ['name' => 'Pir Bakran', 'country_code' => 'IR'],\n            ['name' => 'Oignies', 'country_code' => 'FR'],\n            ['name' => 'Gravelines', 'country_code' => 'FR'],\n            ['name' => 'Belmonte Mezzagno', 'country_code' => 'IT'],\n            ['name' => 'Camisano Vicentino', 'country_code' => 'IT'],\n            ['name' => 'Derdara', 'country_code' => 'MA'],\n            ['name' => 'Chegem Vtoroy', 'country_code' => 'RU'],\n            ['name' => 'Pontiac', 'country_code' => 'US'],\n            ['name' => 'Griswold', 'country_code' => 'US'],\n            ['name' => 'Dingman', 'country_code' => 'US'],\n            ['name' => 'Stonehaven', 'country_code' => 'GB'],\n            ['name' => 'Lenvik', 'country_code' => 'NO'],\n            ['name' => 'Cachoeira de Minas', 'country_code' => 'BR'],\n            ['name' => 'Sidi Kasem', 'country_code' => 'MA'],\n            ['name' => 'La Union', 'country_code' => 'CO'],\n            ['name' => 'Paranatama', 'country_code' => 'BR'],\n            ['name' => 'Summerland', 'country_code' => 'CA'],\n            ['name' => 'Bradwell', 'country_code' => 'GB'],\n            ['name' => 'Kuruman', 'country_code' => 'ZA'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Gold Canyon', 'country_code' => 'US'],\n            ['name' => 'Selsey', 'country_code' => 'GB'],\n            ['name' => 'Batemans Bay', 'country_code' => 'AU'],\n            ['name' => 'Likhoslavl', 'country_code' => 'RU'],\n            ['name' => 'Den Chai', 'country_code' => 'TH'],\n            ['name' => 'Firminopolis', 'country_code' => 'BR'],\n            ['name' => 'Boscotrecase', 'country_code' => 'IT'],\n            ['name' => 'Kem', 'country_code' => 'RU'],\n            ['name' => 'Antonio Carlos', 'country_code' => 'BR'],\n            ['name' => 'Dzouz', 'country_code' => 'MA'],\n            ['name' => 'Ulricehamn', 'country_code' => 'SE'],\n            ['name' => 'Shengping', 'country_code' => 'CN'],\n            ['name' => 'Onate', 'country_code' => 'ES'],\n            ['name' => 'Diepenveen', 'country_code' => 'NL'],\n            ['name' => 'Cedarburg', 'country_code' => 'US'],\n            ['name' => 'Sacueni', 'country_code' => 'RO'],\n            ['name' => 'Claiborne', 'country_code' => 'US'],\n            ['name' => 'Temamatla', 'country_code' => 'MX'],\n            ['name' => 'Kenzhe', 'country_code' => 'RU'],\n            ['name' => 'Sursee', 'country_code' => 'CH'],\n            ['name' => ' Ain Roua', 'country_code' => 'DZ'],\n            ['name' => 'Putnam Valley', 'country_code' => 'US'],\n            ['name' => 'La Riche', 'country_code' => 'FR'],\n            ['name' => 'Waltikon', 'country_code' => 'CH'],\n            ['name' => 'De Panne', 'country_code' => 'BE'],\n            ['name' => 'Langelsheim', 'country_code' => 'DE'],\n            ['name' => 'North Middleton', 'country_code' => 'US'],\n            ['name' => 'Stollberg', 'country_code' => 'DE'],\n            ['name' => 'Werther', 'country_code' => 'DE'],\n            ['name' => 'Ezanville', 'country_code' => 'FR'],\n            ['name' => 'Ghinda e', 'country_code' => 'ER'],\n            ['name' => 'Peiting', 'country_code' => 'DE'],\n            ['name' => 'Beachwood', 'country_code' => 'US'],\n            ['name' => 'Seven Hills', 'country_code' => 'US'],\n            ['name' => 'Siniscola', 'country_code' => 'IT'],\n            ['name' => 'Upper Montclair', 'country_code' => 'US'],\n            ['name' => 'Rutesheim', 'country_code' => 'DE'],\n            ['name' => 'Epazoyucan', 'country_code' => 'MX'],\n            ['name' => 'Hohenkirchen-Siegertsbrunn', 'country_code' => 'DE'],\n            ['name' => 'Tadley', 'country_code' => 'GB'],\n            ['name' => 'Ciechocinek', 'country_code' => 'PL'],\n            ['name' => 'Harsum', 'country_code' => 'DE'],\n            ['name' => 'Martinsville', 'country_code' => 'US'],\n            ['name' => 'Sesto Calende', 'country_code' => 'IT'],\n            ['name' => 'Cranleigh', 'country_code' => 'GB'],\n            ['name' => 'Recke', 'country_code' => 'DE'],\n            ['name' => 'Val-des-Monts', 'country_code' => 'CA'],\n            ['name' => 'Paranacity', 'country_code' => 'BR'],\n            ['name' => 'Jucati', 'country_code' => 'BR'],\n            ['name' => 'Cerrillos', 'country_code' => 'AR'],\n            ['name' => 'Elk City', 'country_code' => 'US'],\n            ['name' => 'Bouabout', 'country_code' => 'MA'],\n            ['name' => 'Satuek', 'country_code' => 'TH'],\n            ['name' => 'Tawnza', 'country_code' => 'MA'],\n            ['name' => 'Andraitx', 'country_code' => 'ES'],\n            ['name' => 'Riesi', 'country_code' => 'IT'],\n            ['name' => 'Holywood', 'country_code' => 'GB'],\n            ['name' => 'Mulungu', 'country_code' => 'BR'],\n            ['name' => 'Leatherhead', 'country_code' => 'GB'],\n            ['name' => 'Yuasa', 'country_code' => 'JP'],\n            ['name' => 'Scottdale', 'country_code' => 'US'],\n            ['name' => 'Tache', 'country_code' => 'CA'],\n            ['name' => 'Severnyy', 'country_code' => 'RU'],\n            ['name' => 'Grobbendonk', 'country_code' => 'BE'],\n            ['name' => 'Sablan', 'country_code' => 'PH'],\n            ['name' => 'Raesfeld', 'country_code' => 'DE'],\n            ['name' => 'Prinsenbeek', 'country_code' => 'NL'],\n            ['name' => 'Silver City', 'country_code' => 'US'],\n            ['name' => 'Upper Uwchlan', 'country_code' => 'US'],\n            ['name' => 'Wambrechies', 'country_code' => 'FR'],\n            ['name' => 'Duas Barras', 'country_code' => 'BR'],\n            ['name' => 'Resende Costa', 'country_code' => 'BR'],\n            ['name' => 'Melito di Porto Salvo', 'country_code' => 'IT'],\n            ['name' => 'Agareb', 'country_code' => 'TN'],\n            ['name' => 'Douar Trougout', 'country_code' => 'MA'],\n            ['name' => 'Gluckstadt', 'country_code' => 'DE'],\n            ['name' => 'Ferreiros', 'country_code' => 'BR'],\n            ['name' => 'Wakefield', 'country_code' => 'US'],\n            ['name' => 'Wittingen', 'country_code' => 'DE'],\n            ['name' => 'Esil', 'country_code' => 'KZ'],\n            ['name' => 'Dolores', 'country_code' => 'PH'],\n            ['name' => 'Whitchurch', 'country_code' => 'GB'],\n            ['name' => 'Montanhas', 'country_code' => 'BR'],\n            ['name' => 'Drezna', 'country_code' => 'RU'],\n            ['name' => 'Rheinau', 'country_code' => 'DE'],\n            ['name' => 'Omaruru', 'country_code' => 'NA'],\n            ['name' => 'Kin', 'country_code' => 'JP'],\n            ['name' => 'Mitchellville', 'country_code' => 'US'],\n            ['name' => 'Lezignan-Corbieres', 'country_code' => 'FR'],\n            ['name' => 'Cholpon-Ata', 'country_code' => 'KG'],\n            ['name' => 'Carmo da Mata', 'country_code' => 'BR'],\n            ['name' => 'Bannewitz', 'country_code' => 'DE'],\n            ['name' => 'Suyo', 'country_code' => 'PH'],\n            ['name' => 'Roncador', 'country_code' => 'BR'],\n            ['name' => 'Plankstadt', 'country_code' => 'DE'],\n            ['name' => 'Alto Garcas', 'country_code' => 'BR'],\n            ['name' => 'Santana', 'country_code' => 'RO'],\n            ['name' => 'Sebastiao Laranjeiras', 'country_code' => 'BR'],\n            ['name' => 'Normandia', 'country_code' => 'BR'],\n            ['name' => 'Targu Ocna', 'country_code' => 'RO'],\n            ['name' => 'Saint-Cyprien', 'country_code' => 'FR'],\n            ['name' => 'Kuriyama', 'country_code' => 'JP'],\n            ['name' => 'Castelvetro di Modena', 'country_code' => 'IT'],\n            ['name' => 'Spirit Lake', 'country_code' => 'US'],\n            ['name' => 'Woodland Park', 'country_code' => 'US'],\n            ['name' => 'Barbadanes', 'country_code' => 'ES'],\n            ['name' => 'Masanasa', 'country_code' => 'ES'],\n            ['name' => 'Largs', 'country_code' => 'GB'],\n            ['name' => 'Chorrocho', 'country_code' => 'BR'],\n            ['name' => 'Tagta', 'country_code' => 'TM'],\n            ['name' => 'Roca Sales', 'country_code' => 'BR'],\n            ['name' => 'Scharbeutz', 'country_code' => 'DE'],\n            ['name' => 'Brattleboro', 'country_code' => 'US'],\n            ['name' => 'Padre Burgos', 'country_code' => 'PH'],\n            ['name' => 'Bom Jesus', 'country_code' => 'BR'],\n            ['name' => 'Creazzo', 'country_code' => 'IT'],\n            ['name' => 'Xambioa', 'country_code' => 'BR'],\n            ['name' => 'Panazol', 'country_code' => 'FR'],\n            ['name' => 'Zvenigovo', 'country_code' => 'RU'],\n            ['name' => 'Valdez', 'country_code' => 'EC'],\n            ['name' => 'Bridgeton', 'country_code' => 'US'],\n            ['name' => 'Lower Gwynedd', 'country_code' => 'US'],\n            ['name' => 'Lokhvytsya', 'country_code' => 'UA'],\n            ['name' => 'Montopoli in Val d Arno', 'country_code' => 'IT'],\n            ['name' => 'Nova Laranjeiras', 'country_code' => 'BR'],\n            ['name' => 'Mexico', 'country_code' => 'US'],\n            ['name' => 'Guayabal', 'country_code' => 'CO'],\n            ['name' => 'Myronivka', 'country_code' => 'UA'],\n            ['name' => 'Unicov', 'country_code' => 'CZ'],\n            ['name' => 'Blundellsands', 'country_code' => 'GB'],\n            ['name' => 'Santa Maria', 'country_code' => 'BR'],\n            ['name' => 'Archdale', 'country_code' => 'US'],\n            ['name' => 'Balve', 'country_code' => 'DE'],\n            ['name' => 'Rothenburg ob der Tauber', 'country_code' => 'DE'],\n            ['name' => 'Coronel Dorrego', 'country_code' => 'AR'],\n            ['name' => 'Scalea', 'country_code' => 'IT'],\n            ['name' => 'Ostrhauderfehn', 'country_code' => 'DE'],\n            ['name' => 'Zierikzee', 'country_code' => 'NL'],\n            ['name' => 'Amneville', 'country_code' => 'FR'],\n            ['name' => 'Yakymivka', 'country_code' => 'UA'],\n            ['name' => 'Divinolandia', 'country_code' => 'BR'],\n            ['name' => 'Marktheidenfeld', 'country_code' => 'DE'],\n            ['name' => 'Lurate Caccivio', 'country_code' => 'IT'],\n            ['name' => 'Utiel', 'country_code' => 'ES'],\n            ['name' => 'Crikvenica', 'country_code' => 'HR'],\n            ['name' => 'Lutry', 'country_code' => 'CH'],\n            ['name' => 'Domazlice', 'country_code' => 'CZ'],\n            ['name' => 'Bogalusa', 'country_code' => 'US'],\n            ['name' => 'Center', 'country_code' => 'US'],\n            ['name' => 'Paceco', 'country_code' => 'IT'],\n            ['name' => 'Lenzburg', 'country_code' => 'CH'],\n            ['name' => 'Poldasht', 'country_code' => 'IR'],\n            ['name' => 'Buriti do Tocantins', 'country_code' => 'BR'],\n            ['name' => 'El Khemis des Beni Chegdal', 'country_code' => 'MA'],\n            ['name' => 'Ain Legdah', 'country_code' => 'MA'],\n            ['name' => 'Newport', 'country_code' => 'US'],\n            ['name' => 'Hanover', 'country_code' => 'US'],\n            ['name' => 'Pfastatt', 'country_code' => 'FR'],\n            ['name' => 'Elwood', 'country_code' => 'US'],\n            ['name' => 'Muquem de Sao Francisco', 'country_code' => 'BR'],\n            ['name' => 'Cerese', 'country_code' => 'IT'],\n            ['name' => 'Ochsenfurt', 'country_code' => 'DE'],\n            ['name' => 'Santiago del Teide', 'country_code' => 'ES'],\n            ['name' => 'Laracha', 'country_code' => 'ES'],\n            ['name' => 'Aginskoye', 'country_code' => 'RU'],\n            ['name' => 'Florham Park', 'country_code' => 'US'],\n            ['name' => 'Florennes', 'country_code' => 'BE'],\n            ['name' => 'Ahlaf', 'country_code' => 'MA'],\n            ['name' => 'Trinity', 'country_code' => 'US'],\n            ['name' => 'Mack', 'country_code' => 'US'],\n            ['name' => 'Geisenfeld', 'country_code' => 'DE'],\n            ['name' => 'Klyetsk', 'country_code' => 'BY'],\n            ['name' => 'Lahfayr', 'country_code' => 'MA'],\n            ['name' => 'Montmagny', 'country_code' => 'CA'],\n            ['name' => 'Kostinbrod', 'country_code' => 'BG'],\n            ['name' => 'Glenfield', 'country_code' => 'GB'],\n            ['name' => 'Cornate d Adda', 'country_code' => 'IT'],\n            ['name' => 'Jaguari', 'country_code' => 'BR'],\n            ['name' => 'Roma', 'country_code' => 'US'],\n            ['name' => 'Acuitzio del Canje', 'country_code' => 'MX'],\n            ['name' => 'Mountain Top', 'country_code' => 'US'],\n            ['name' => 'Chkalovsk', 'country_code' => 'RU'],\n            ['name' => 'Port Salerno', 'country_code' => 'US'],\n            ['name' => 'Urai', 'country_code' => 'BR'],\n            ['name' => 'Schipluiden', 'country_code' => 'NL'],\n            ['name' => 'Castelli Calepio', 'country_code' => 'IT'],\n            ['name' => 'Avigliano', 'country_code' => 'IT'],\n            ['name' => 'Alto Paraguai', 'country_code' => 'BR'],\n            ['name' => 'Briancon', 'country_code' => 'FR'],\n            ['name' => 'Castel Mella', 'country_code' => 'IT'],\n            ['name' => 'Kyjov', 'country_code' => 'CZ'],\n            ['name' => 'Magalia', 'country_code' => 'US'],\n            ['name' => 'Sales Oliveira', 'country_code' => 'BR'],\n            ['name' => 'Nieuwenhagen', 'country_code' => 'NL'],\n            ['name' => 'Retie', 'country_code' => 'BE'],\n            ['name' => 'Duruma', 'country_code' => 'SA'],\n            ['name' => 'Gerasdorf bei Wien', 'country_code' => 'AT'],\n            ['name' => 'Karlsdorf-Neuthard', 'country_code' => 'DE'],\n            ['name' => 'Welzheim', 'country_code' => 'DE'],\n            ['name' => 'Maxeville', 'country_code' => 'FR'],\n            ['name' => 'Phanat Nikhom', 'country_code' => 'TH'],\n            ['name' => 'Naliya', 'country_code' => 'IN'],\n            ['name' => 'Egersund', 'country_code' => 'NO'],\n            ['name' => 'Gelves', 'country_code' => 'ES'],\n            ['name' => 'Hanover', 'country_code' => 'US'],\n            ['name' => 'Magnolia', 'country_code' => 'US'],\n            ['name' => 'Emmaus', 'country_code' => 'US'],\n            ['name' => 'Holic', 'country_code' => 'SK'],\n            ['name' => 'Moita Bonita', 'country_code' => 'BR'],\n            ['name' => 'Amdel', 'country_code' => 'MA'],\n            ['name' => 'Capitao de Campos', 'country_code' => 'BR'],\n            ['name' => 'Bad Schwalbach', 'country_code' => 'DE'],\n            ['name' => 'Racale', 'country_code' => 'IT'],\n            ['name' => 'Gracemere', 'country_code' => 'AU'],\n            ['name' => 'Piazzola sul Brenta', 'country_code' => 'IT'],\n            ['name' => 'Jackson', 'country_code' => 'US'],\n            ['name' => 'Ban Bo Phlap', 'country_code' => 'TH'],\n            ['name' => 'Nanakuli', 'country_code' => 'US'],\n            ['name' => 'Byerazino', 'country_code' => 'BY'],\n            ['name' => 'Hejiaji', 'country_code' => 'CN'],\n            ['name' => 'Boldesti-Scaeni', 'country_code' => 'RO'],\n            ['name' => 'Resende', 'country_code' => 'PT'],\n            ['name' => 'Ecaussinnes-Lalaing', 'country_code' => 'BE'],\n            ['name' => 'Saint-Junien', 'country_code' => 'FR'],\n            ['name' => 'Lencois', 'country_code' => 'BR'],\n            ['name' => 'Mamakating', 'country_code' => 'US'],\n            ['name' => 'Webster', 'country_code' => 'US'],\n            ['name' => 'Riorges', 'country_code' => 'FR'],\n            ['name' => 'Venafro', 'country_code' => 'IT'],\n            ['name' => 'Benisa', 'country_code' => 'ES'],\n            ['name' => 'Oravita', 'country_code' => 'RO'],\n            ['name' => 'La Maddalena', 'country_code' => 'IT'],\n            ['name' => 'Kormend', 'country_code' => 'HU'],\n            ['name' => 'Fagundes', 'country_code' => 'BR'],\n            ['name' => 'Richland', 'country_code' => 'US'],\n            ['name' => 'Hasbergen', 'country_code' => 'DE'],\n            ['name' => 'Douar Oulad Naoual', 'country_code' => 'MA'],\n            ['name' => 'Laqraqra', 'country_code' => 'MA'],\n            ['name' => 'Eidsberg', 'country_code' => 'NO'],\n            ['name' => 'Elizabethtown', 'country_code' => 'US'],\n            ['name' => 'East Windsor', 'country_code' => 'US'],\n            ['name' => 'Mancha Real', 'country_code' => 'ES'],\n            ['name' => 'Botticino Sera', 'country_code' => 'IT'],\n            ['name' => 'Stelle', 'country_code' => 'DE'],\n            ['name' => 'Dinard', 'country_code' => 'FR'],\n            ['name' => 'Show Low', 'country_code' => 'US'],\n            ['name' => 'Nikel', 'country_code' => 'RU'],\n            ['name' => 'Trostberg an der Alz', 'country_code' => 'DE'],\n            ['name' => 'Erin', 'country_code' => 'CA'],\n            ['name' => 'Jimani', 'country_code' => 'DO'],\n            ['name' => 'Aratuba', 'country_code' => 'BR'],\n            ['name' => 'Duque Bacelar', 'country_code' => 'BR'],\n            ['name' => 'Wildau', 'country_code' => 'DE'],\n            ['name' => 'Acate', 'country_code' => 'IT'],\n            ['name' => 'Cadolzburg', 'country_code' => 'DE'],\n            ['name' => 'Kall', 'country_code' => 'DE'],\n            ['name' => 'Flawil', 'country_code' => 'CH'],\n            ['name' => 'Lamsabih', 'country_code' => 'MA'],\n            ['name' => 'Estiva', 'country_code' => 'BR'],\n            ['name' => 'Douchy-les-Mines', 'country_code' => 'FR'],\n            ['name' => 'Douar Sgarta', 'country_code' => 'MA'],\n            ['name' => 'Woods Cross', 'country_code' => 'US'],\n            ['name' => 'Curimata', 'country_code' => 'BR'],\n            ['name' => 'Baldock', 'country_code' => 'GB'],\n            ['name' => 'Belen', 'country_code' => 'PY'],\n            ['name' => 'Byram', 'country_code' => 'US'],\n            ['name' => 'North Bellport', 'country_code' => 'US'],\n            ['name' => 'Chapantongo', 'country_code' => 'MX'],\n            ['name' => 'Fort Bliss', 'country_code' => 'US'],\n            ['name' => 'Gentio do Ouro', 'country_code' => 'BR'],\n            ['name' => 'Sorsk', 'country_code' => 'RU'],\n            ['name' => 'Highland', 'country_code' => 'US'],\n            ['name' => 'Yuryuzan', 'country_code' => 'RU'],\n            ['name' => 'Timahdit', 'country_code' => 'MA'],\n            ['name' => 'Kastav', 'country_code' => 'HR'],\n            ['name' => 'Kennebunk', 'country_code' => 'US'],\n            ['name' => 'Lyndon', 'country_code' => 'US'],\n            ['name' => 'Adendorf', 'country_code' => 'DE'],\n            ['name' => 'Cazzago San Martino', 'country_code' => 'IT'],\n            ['name' => 'Covenas', 'country_code' => 'CO'],\n            ['name' => 'Eckington', 'country_code' => 'GB'],\n            ['name' => 'Abaiara', 'country_code' => 'BR'],\n            ['name' => 'Waidhofen an der Ybbs', 'country_code' => 'AT'],\n            ['name' => 'Alassio', 'country_code' => 'IT'],\n            ['name' => 'Salisbury', 'country_code' => 'US'],\n            ['name' => 'Horbury', 'country_code' => 'GB'],\n            ['name' => 'Hailey', 'country_code' => 'US'],\n            ['name' => 'Snovsk', 'country_code' => 'UA'],\n            ['name' => 'Jamaat Shaim', 'country_code' => 'MA'],\n            ['name' => 'Scottsburg', 'country_code' => 'US'],\n            ['name' => 'Saint-Hilaire-de-Riez', 'country_code' => 'FR'],\n            ['name' => 'Suhr', 'country_code' => 'CH'],\n            ['name' => 'Chassieu', 'country_code' => 'FR'],\n            ['name' => 'Portes-les-Valence', 'country_code' => 'FR'],\n            ['name' => 'Sant Ilario d Enza', 'country_code' => 'IT'],\n            ['name' => 'Schonaich', 'country_code' => 'DE'],\n            ['name' => 'Kingsnorth', 'country_code' => 'GB'],\n            ['name' => 'Urbana', 'country_code' => 'US'],\n            ['name' => 'Lijiacha', 'country_code' => 'CN'],\n            ['name' => 'Schiller Park', 'country_code' => 'US'],\n            ['name' => 'Fenton', 'country_code' => 'US'],\n            ['name' => 'Louvres', 'country_code' => 'FR'],\n            ['name' => 'Lajosmizse', 'country_code' => 'HU'],\n            ['name' => 'Alcantaras', 'country_code' => 'BR'],\n            ['name' => 'Lunenburg', 'country_code' => 'US'],\n            ['name' => 'Bayou Blue', 'country_code' => 'US'],\n            ['name' => 'Chekmagush', 'country_code' => 'RU'],\n            ['name' => 'Los Alamitos', 'country_code' => 'US'],\n            ['name' => 'Destrehan', 'country_code' => 'US'],\n            ['name' => 'Salcedo', 'country_code' => 'PH'],\n            ['name' => 'Shevington', 'country_code' => 'GB'],\n            ['name' => 'Minooka', 'country_code' => 'US'],\n            ['name' => 'Cividale del Friuli', 'country_code' => 'IT'],\n            ['name' => 'Burrel', 'country_code' => 'AL'],\n            ['name' => 'Terra de Areia', 'country_code' => 'BR'],\n            ['name' => 'Gardere', 'country_code' => 'US'],\n            ['name' => 'Talaigua Nuevo', 'country_code' => 'CO'],\n            ['name' => 'Calan', 'country_code' => 'RO'],\n            ['name' => 'Tilmi', 'country_code' => 'MA'],\n            ['name' => 'Kiato', 'country_code' => 'GR'],\n            ['name' => 'Monte Quemado', 'country_code' => 'AR'],\n            ['name' => 'Cascades', 'country_code' => 'US'],\n            ['name' => 'Kincardine', 'country_code' => 'CA'],\n            ['name' => 'Porto Firme', 'country_code' => 'BR'],\n            ['name' => 'Hillsborough', 'country_code' => 'US'],\n            ['name' => 'Lansing', 'country_code' => 'US'],\n            ['name' => 'El Ghourdane', 'country_code' => 'MA'],\n            ['name' => 'Onoto', 'country_code' => 'VE'],\n            ['name' => 'Tsqaltubo', 'country_code' => 'GE'],\n            ['name' => 'Gardony', 'country_code' => 'HU'],\n            ['name' => 'Gardnerville Ranchos', 'country_code' => 'US'],\n            ['name' => 'Sankt Johann im Pongau', 'country_code' => 'AT'],\n            ['name' => 'Gornozavodsk', 'country_code' => 'RU'],\n            ['name' => 'Collegedale', 'country_code' => 'US'],\n            ['name' => 'Herbolzheim', 'country_code' => 'DE'],\n            ['name' => 'Summerfield', 'country_code' => 'US'],\n            ['name' => 'Great Harwood', 'country_code' => 'GB'],\n            ['name' => 'Nueva Helvecia', 'country_code' => 'UY'],\n            ['name' => 'Agcogon', 'country_code' => 'PH'],\n            ['name' => 'Humahuaca', 'country_code' => 'AR'],\n            ['name' => 'Vila Franca do Campo', 'country_code' => 'PT'],\n            ['name' => 'Oxted', 'country_code' => 'GB'],\n            ['name' => 'Lang Suan', 'country_code' => 'TH'],\n            ['name' => 'Yangirabot', 'country_code' => 'UZ'],\n            ['name' => 'Caotan', 'country_code' => 'CN'],\n            ['name' => 'Lakeville', 'country_code' => 'US'],\n            ['name' => 'Cepagatti', 'country_code' => 'IT'],\n            ['name' => 'Soham', 'country_code' => 'GB'],\n            ['name' => 'Snyder', 'country_code' => 'US'],\n            ['name' => 'Anguera', 'country_code' => 'BR'],\n            ['name' => 'Tarrytown', 'country_code' => 'US'],\n            ['name' => 'South Normanton', 'country_code' => 'GB'],\n            ['name' => 'Viera West', 'country_code' => 'US'],\n            ['name' => 'Bang Ban', 'country_code' => 'TH'],\n            ['name' => 'Wyandanch', 'country_code' => 'US'],\n            ['name' => 'Fairfield', 'country_code' => 'US'],\n            ['name' => 'Eugenopolis', 'country_code' => 'BR'],\n            ['name' => 'Mount Sterling', 'country_code' => 'US'],\n            ['name' => 'Pocao', 'country_code' => 'BR'],\n            ['name' => 'Belen', 'country_code' => 'AR'],\n            ['name' => 'Granby', 'country_code' => 'US'],\n            ['name' => 'Ravenna', 'country_code' => 'US'],\n            ['name' => 'Catskill', 'country_code' => 'US'],\n            ['name' => 'Ipaporanga', 'country_code' => 'BR'],\n            ['name' => 'Bellmawr', 'country_code' => 'US'],\n            ['name' => 'Makoua', 'country_code' => 'CG'],\n            ['name' => 'Touama', 'country_code' => 'MA'],\n            ['name' => 'Campos del Puerto', 'country_code' => 'ES'],\n            ['name' => 'Grigny', 'country_code' => 'FR'],\n            ['name' => 'Bojaca', 'country_code' => 'CO'],\n            ['name' => 'Ouaklim Oukider', 'country_code' => 'MA'],\n            ['name' => 'Tortoli', 'country_code' => 'IT'],\n            ['name' => 'Sidi Abdellah Ben Taazizt', 'country_code' => 'MA'],\n            ['name' => 'Lardero', 'country_code' => 'ES'],\n            ['name' => 'San Giustino', 'country_code' => 'IT'],\n            ['name' => 'Angola', 'country_code' => 'US'],\n            ['name' => 'Alatyr', 'country_code' => 'RU'],\n            ['name' => 'Sao Jeronimo da Serra', 'country_code' => 'BR'],\n            ['name' => 'Charouine', 'country_code' => 'DZ'],\n            ['name' => 'Usmate Velate', 'country_code' => 'IT'],\n            ['name' => 'Aramari', 'country_code' => 'BR'],\n            ['name' => 'Coshocton', 'country_code' => 'US'],\n            ['name' => 'Floresta Azul', 'country_code' => 'BR'],\n            ['name' => 'Rumburk', 'country_code' => 'CZ'],\n            ['name' => 'La Chapelle-Saint-Mesmin', 'country_code' => 'FR'],\n            ['name' => 'Campo Redondo', 'country_code' => 'BR'],\n            ['name' => 'Tarare', 'country_code' => 'FR'],\n            ['name' => 'Neede', 'country_code' => 'NL'],\n            ['name' => 'Passy', 'country_code' => 'FR'],\n            ['name' => 'Mendota Heights', 'country_code' => 'US'],\n            ['name' => 'Palmares do Sul', 'country_code' => 'BR'],\n            ['name' => 'Iuiu', 'country_code' => 'BR'],\n            ['name' => 'Bleiswijk', 'country_code' => 'NL'],\n            ['name' => 'Gross-Enzersdorf', 'country_code' => 'AT'],\n            ['name' => 'Wantage', 'country_code' => 'GB'],\n            ['name' => 'Haysville', 'country_code' => 'US'],\n            ['name' => 'Nauheim', 'country_code' => 'DE'],\n            ['name' => 'Mulsen', 'country_code' => 'DE'],\n            ['name' => 'New Britain', 'country_code' => 'US'],\n            ['name' => 'Avelino Lopes', 'country_code' => 'BR'],\n            ['name' => 'Tega Cay', 'country_code' => 'US'],\n            ['name' => 'Zelhem', 'country_code' => 'NL'],\n            ['name' => 'Ichinohe', 'country_code' => 'JP'],\n            ['name' => 'Amherst', 'country_code' => 'US'],\n            ['name' => 'Dammartin-en-Goele', 'country_code' => 'FR'],\n            ['name' => 'Dent', 'country_code' => 'US'],\n            ['name' => 'Paramoti', 'country_code' => 'BR'],\n            ['name' => 'Chantepie', 'country_code' => 'FR'],\n            ['name' => 'Sogne', 'country_code' => 'NO'],\n            ['name' => 'Cislago', 'country_code' => 'IT'],\n            ['name' => 'Krosno Odrzanskie', 'country_code' => 'PL'],\n            ['name' => 'Sant Agata de  Goti', 'country_code' => 'IT'],\n            ['name' => 'Eisenberg', 'country_code' => 'DE'],\n            ['name' => 'Imuris', 'country_code' => 'MX'],\n            ['name' => 'Villerupt', 'country_code' => 'FR'],\n            ['name' => 'Hucclecote', 'country_code' => 'GB'],\n            ['name' => 'Etropole', 'country_code' => 'BG'],\n            ['name' => 'Angelim', 'country_code' => 'BR'],\n            ['name' => 'Maryport', 'country_code' => 'GB'],\n            ['name' => 'Burtonwood', 'country_code' => 'GB'],\n            ['name' => 'Honmachi', 'country_code' => 'JP'],\n            ['name' => 'Bailin', 'country_code' => 'CN'],\n            ['name' => 'Haddonfield', 'country_code' => 'US'],\n            ['name' => 'Abjij', 'country_code' => 'EG'],\n            ['name' => 'Sao Domingos', 'country_code' => 'BR'],\n            ['name' => 'Iazizatene', 'country_code' => 'MA'],\n            ['name' => 'Groton', 'country_code' => 'US'],\n            ['name' => 'Fil akovo', 'country_code' => 'SK'],\n            ['name' => 'Westerkappeln', 'country_code' => 'DE'],\n            ['name' => 'Illintsi', 'country_code' => 'UA'],\n            ['name' => 'Vieux-Conde', 'country_code' => 'FR'],\n            ['name' => 'Beachwood', 'country_code' => 'US'],\n            ['name' => 'Bradford', 'country_code' => 'US'],\n            ['name' => 'Prien am Chiemsee', 'country_code' => 'DE'],\n            ['name' => 'North Vernon', 'country_code' => 'US'],\n            ['name' => 'Samford', 'country_code' => 'AU'],\n            ['name' => 'Kaset Wisai', 'country_code' => 'TH'],\n            ['name' => 'Nhandeara', 'country_code' => 'BR'],\n            ['name' => 'Irineopolis', 'country_code' => 'BR'],\n            ['name' => 'Sturovo', 'country_code' => 'SK'],\n            ['name' => 'Leicester', 'country_code' => 'US'],\n            ['name' => 'Getulina', 'country_code' => 'BR'],\n            ['name' => 'Travilah', 'country_code' => 'US'],\n            ['name' => 'Saire', 'country_code' => 'BR'],\n            ['name' => 'Le Pradet', 'country_code' => 'FR'],\n            ['name' => 'Kaneohe Station', 'country_code' => 'US'],\n            ['name' => 'Winton', 'country_code' => 'US'],\n            ['name' => 'Boguchar', 'country_code' => 'RU'],\n            ['name' => 'Magurele', 'country_code' => 'RO'],\n            ['name' => 'Presidente Vargas', 'country_code' => 'BR'],\n            ['name' => 'Kleinblittersdorf', 'country_code' => 'DE'],\n            ['name' => 'Celina', 'country_code' => 'US'],\n            ['name' => 'Urubici', 'country_code' => 'BR'],\n            ['name' => 'Hartsville', 'country_code' => 'US'],\n            ['name' => 'Tha Chang', 'country_code' => 'TH'],\n            ['name' => 'Canyon Lake', 'country_code' => 'US'],\n            ['name' => 'Sant Antioco', 'country_code' => 'IT'],\n            ['name' => 'North Dundas', 'country_code' => 'CA'],\n            ['name' => 'Aulla', 'country_code' => 'IT'],\n            ['name' => 'El Playon', 'country_code' => 'CO'],\n            ['name' => 'Marcali', 'country_code' => 'HU'],\n            ['name' => 'Oberderdingen', 'country_code' => 'DE'],\n            ['name' => 'Krizevci', 'country_code' => 'HR'],\n            ['name' => 'Drochtersen', 'country_code' => 'DE'],\n            ['name' => 'Pirangi', 'country_code' => 'BR'],\n            ['name' => 'Piranhas', 'country_code' => 'BR'],\n            ['name' => 'Ulrum', 'country_code' => 'NL'],\n            ['name' => 'Burkburnett', 'country_code' => 'US'],\n            ['name' => 'Lighthouse Point', 'country_code' => 'US'],\n            ['name' => 'Eunice', 'country_code' => 'US'],\n            ['name' => 'Monmouth', 'country_code' => 'GB'],\n            ['name' => 'Tetyushi', 'country_code' => 'RU'],\n            ['name' => 'Sonseca', 'country_code' => 'ES'],\n            ['name' => 'Joquicingo', 'country_code' => 'MX'],\n            ['name' => 'Mineral de Angangueo', 'country_code' => 'MX'],\n            ['name' => 'Montlouis-sur-Loire', 'country_code' => 'FR'],\n            ['name' => 'Matias Cardoso', 'country_code' => 'BR'],\n            ['name' => 'Hallbergmoos', 'country_code' => 'DE'],\n            ['name' => 'Jesenik', 'country_code' => 'CZ'],\n            ['name' => 'Santa Cruz', 'country_code' => 'EC'],\n            ['name' => 'Edd', 'country_code' => 'ER'],\n            ['name' => 'Douar Jwalla', 'country_code' => 'MA'],\n            ['name' => 'Saint-Jean-de-Vedas', 'country_code' => 'FR'],\n            ['name' => 'Greentree', 'country_code' => 'US'],\n            ['name' => 'Engenheiro Caldas', 'country_code' => 'BR'],\n            ['name' => 'Beaumont-sur-Oise', 'country_code' => 'FR'],\n            ['name' => 'Draksharama', 'country_code' => 'IN'],\n            ['name' => 'Sagada', 'country_code' => 'PH'],\n            ['name' => 'Zaouiet Says', 'country_code' => 'MA'],\n            ['name' => 'Friedrichsthal', 'country_code' => 'DE'],\n            ['name' => 'Saltcoats', 'country_code' => 'GB'],\n            ['name' => 'Wellesley', 'country_code' => 'CA'],\n            ['name' => 'Capilla del Monte', 'country_code' => 'AR'],\n            ['name' => 'Apt', 'country_code' => 'FR'],\n            ['name' => 'Estevan', 'country_code' => 'CA'],\n            ['name' => 'Le Luc', 'country_code' => 'FR'],\n            ['name' => 'Polistena', 'country_code' => 'IT'],\n            ['name' => 'Portland', 'country_code' => 'AU'],\n            ['name' => 'Barton upon Humber', 'country_code' => 'GB'],\n            ['name' => 'Therwil', 'country_code' => 'CH'],\n            ['name' => 'North Saanich', 'country_code' => 'CA'],\n            ['name' => 'Lauingen', 'country_code' => 'DE'],\n            ['name' => 'Plaridel', 'country_code' => 'PH'],\n            ['name' => 'Westview', 'country_code' => 'US'],\n            ['name' => 'Otar', 'country_code' => 'KZ'],\n            ['name' => 'San Francisco', 'country_code' => 'HN'],\n            ['name' => 'Bewdley', 'country_code' => 'GB'],\n            ['name' => 'Sanjiaocheng', 'country_code' => 'CN'],\n            ['name' => 'Hericourt', 'country_code' => 'FR'],\n            ['name' => 'Majdal Shams', 'country_code' => 'IL'],\n            ['name' => 'Balingoan', 'country_code' => 'PH'],\n            ['name' => 'DuBois', 'country_code' => 'US'],\n            ['name' => 'Lamesa', 'country_code' => 'US'],\n            ['name' => 'Vire', 'country_code' => 'FR'],\n            ['name' => 'Korablino', 'country_code' => 'RU'],\n            ['name' => 'North Logan', 'country_code' => 'US'],\n            ['name' => 'Berlin', 'country_code' => 'US'],\n            ['name' => 'Goldach', 'country_code' => 'CH'],\n            ['name' => 'Morazan', 'country_code' => 'GT'],\n            ['name' => 'Cerreto Guidi', 'country_code' => 'IT'],\n            ['name' => 'Boguchany', 'country_code' => 'RU'],\n            ['name' => 'Boujediane', 'country_code' => 'MA'],\n            ['name' => 'Waupun', 'country_code' => 'US'],\n            ['name' => 'Jeumont', 'country_code' => 'FR'],\n            ['name' => 'Kursavka', 'country_code' => 'RU'],\n            ['name' => 'Tyrnavos', 'country_code' => 'GR'],\n            ['name' => 'Fino Mornasco', 'country_code' => 'IT'],\n            ['name' => 'Florestopolis', 'country_code' => 'BR'],\n            ['name' => 'Big Lake', 'country_code' => 'US'],\n            ['name' => 'Hillsdale', 'country_code' => 'US'],\n            ['name' => 'Divisopolis', 'country_code' => 'BR'],\n            ['name' => 'Calcado', 'country_code' => 'BR'],\n            ['name' => 'Broomall', 'country_code' => 'US'],\n            ['name' => 'San Jose de Aerocuar', 'country_code' => 'VE'],\n            ['name' => 'Santa Croce Camerina', 'country_code' => 'IT'],\n            ['name' => 'Jamapa', 'country_code' => 'MX'],\n            ['name' => 'Eichenzell', 'country_code' => 'DE'],\n            ['name' => 'Gloucester City', 'country_code' => 'US'],\n            ['name' => 'Chulym', 'country_code' => 'RU'],\n            ['name' => 'Sansare', 'country_code' => 'GT'],\n            ['name' => 'Armstrong', 'country_code' => 'AR'],\n            ['name' => 'Cabestany', 'country_code' => 'FR'],\n            ['name' => 'Qasr-e Shirin', 'country_code' => 'IR'],\n            ['name' => 'Herrsching am Ammersee', 'country_code' => 'DE'],\n            ['name' => 'Shahmirzad', 'country_code' => 'IR'],\n            ['name' => 'Grand Rapids', 'country_code' => 'US'],\n            ['name' => 'Alto Parnaiba', 'country_code' => 'BR'],\n            ['name' => 'Staryya Darohi', 'country_code' => 'BY'],\n            ['name' => 'Emsworth', 'country_code' => 'GB'],\n            ['name' => 'Santa Ana Huista', 'country_code' => 'GT'],\n            ['name' => 'Rychnov nad Kneznou', 'country_code' => 'CZ'],\n            ['name' => 'Bondoufle', 'country_code' => 'FR'],\n            ['name' => 'Santa Ines', 'country_code' => 'BR'],\n            ['name' => 'Braunfels', 'country_code' => 'DE'],\n            ['name' => 'Valkeala', 'country_code' => 'FI'],\n            ['name' => 'Lorch', 'country_code' => 'DE'],\n            ['name' => 'Xintianfeng', 'country_code' => 'CN'],\n            ['name' => 'Montechiarugolo', 'country_code' => 'IT'],\n            ['name' => 'Gengenbach', 'country_code' => 'DE'],\n            ['name' => 'Trofaiach', 'country_code' => 'AT'],\n            ['name' => 'Hawaiian Paradise Park', 'country_code' => 'US'],\n            ['name' => 'Rianxo', 'country_code' => 'ES'],\n            ['name' => 'Arizona City', 'country_code' => 'US'],\n            ['name' => 'Tagoloan', 'country_code' => 'PH'],\n            ['name' => 'Barros Cassal', 'country_code' => 'BR'],\n            ['name' => 'Kirchseeon', 'country_code' => 'DE'],\n            ['name' => 'Susice', 'country_code' => 'CZ'],\n            ['name' => 'Centenario do Sul', 'country_code' => 'BR'],\n            ['name' => 'Ebreichsdorf', 'country_code' => 'AT'],\n            ['name' => 'Seymour', 'country_code' => 'US'],\n            ['name' => 'Belzig', 'country_code' => 'DE'],\n            ['name' => 'Kariat Ben Aouda', 'country_code' => 'MA'],\n            ['name' => 'Hormigueros', 'country_code' => 'PR'],\n            ['name' => 'Congaz', 'country_code' => 'MD'],\n            ['name' => 'Humpolec', 'country_code' => 'CZ'],\n            ['name' => 'Camp Verde', 'country_code' => 'US'],\n            ['name' => 'Ilfracombe', 'country_code' => 'GB'],\n            ['name' => 'Handewitt', 'country_code' => 'DE'],\n            ['name' => 'Weddington', 'country_code' => 'US'],\n            ['name' => 'Si Wilai', 'country_code' => 'TH'],\n            ['name' => 'Cameri', 'country_code' => 'IT'],\n            ['name' => 'Areiopolis', 'country_code' => 'BR'],\n            ['name' => 'Corleone', 'country_code' => 'IT'],\n            ['name' => 'Harlau', 'country_code' => 'RO'],\n            ['name' => 'Ogose', 'country_code' => 'JP'],\n            ['name' => 'Ridgefield', 'country_code' => 'US'],\n            ['name' => 'Vore', 'country_code' => 'AL'],\n            ['name' => 'Regen', 'country_code' => 'DE'],\n            ['name' => 'Cunha Pora', 'country_code' => 'BR'],\n            ['name' => 'Knezha', 'country_code' => 'BG'],\n            ['name' => 'Poulsbo', 'country_code' => 'US'],\n            ['name' => 'Nantucket', 'country_code' => 'US'],\n            ['name' => 'Miastko', 'country_code' => 'PL'],\n            ['name' => 'Zakamensk', 'country_code' => 'RU'],\n            ['name' => 'Stayton', 'country_code' => 'US'],\n            ['name' => 'Springdale', 'country_code' => 'US'],\n            ['name' => 'Enebakk', 'country_code' => 'NO'],\n            ['name' => 'Trevignano', 'country_code' => 'IT'],\n            ['name' => 'Capena', 'country_code' => 'IT'],\n            ['name' => 'Varre-Sai', 'country_code' => 'BR'],\n            ['name' => 'Byelaazyorsk', 'country_code' => 'BY'],\n            ['name' => 'Tinchlik', 'country_code' => 'UZ'],\n            ['name' => 'Peschiera del Garda', 'country_code' => 'IT'],\n            ['name' => 'Brookings', 'country_code' => 'US'],\n            ['name' => 'Xinyaoshang', 'country_code' => 'CN'],\n            ['name' => 'Damascus', 'country_code' => 'US'],\n            ['name' => 'Tres Cachoeiras', 'country_code' => 'BR'],\n            ['name' => 'Aizoain', 'country_code' => 'ES'],\n            ['name' => 'Osterwieck', 'country_code' => 'DE'],\n            ['name' => 'Betzdorf', 'country_code' => 'DE'],\n            ['name' => 'Baley', 'country_code' => 'RU'],\n            ['name' => 'Red Hook', 'country_code' => 'US'],\n            ['name' => 'Shepperton', 'country_code' => 'GB'],\n            ['name' => 'Floha', 'country_code' => 'DE'],\n            ['name' => 'Niles', 'country_code' => 'US'],\n            ['name' => 'Wisla', 'country_code' => 'PL'],\n            ['name' => 'Khlung', 'country_code' => 'TH'],\n            ['name' => 'Takad Sahel', 'country_code' => 'MA'],\n            ['name' => 'Longtaixiang', 'country_code' => 'CN'],\n            ['name' => 'Buxerolles', 'country_code' => 'FR'],\n            ['name' => 'Sa in Qal eh', 'country_code' => 'IR'],\n            ['name' => 'Fuller Heights', 'country_code' => 'US'],\n            ['name' => 'Bir Ghbalou', 'country_code' => 'DZ'],\n            ['name' => 'Gucheng', 'country_code' => 'CN'],\n            ['name' => 'Tolna', 'country_code' => 'HU'],\n            ['name' => 'Leers', 'country_code' => 'FR'],\n            ['name' => 'Hikawadai', 'country_code' => 'JP'],\n            ['name' => 'Kirensk', 'country_code' => 'RU'],\n            ['name' => 'Acari', 'country_code' => 'BR'],\n            ['name' => 'Potengi', 'country_code' => 'BR'],\n            ['name' => 'Bertinoro', 'country_code' => 'IT'],\n            ['name' => 'Mango', 'country_code' => 'US'],\n            ['name' => 'Primeiro de Maio', 'country_code' => 'BR'],\n            ['name' => 'Fitzgerald', 'country_code' => 'US'],\n            ['name' => 'Barra do Sul', 'country_code' => 'BR'],\n            ['name' => 'Parthenay', 'country_code' => 'FR'],\n            ['name' => 'Huntingdon', 'country_code' => 'US'],\n            ['name' => 'Hagen im Bremischen', 'country_code' => 'DE'],\n            ['name' => 'Inacio Martins', 'country_code' => 'BR'],\n            ['name' => 'Selma', 'country_code' => 'US'],\n            ['name' => 'Warka', 'country_code' => 'PL'],\n            ['name' => 'Fronteiras', 'country_code' => 'BR'],\n            ['name' => 'Campolongo Maggiore', 'country_code' => 'IT'],\n            ['name' => 'Satellite Beach', 'country_code' => 'US'],\n            ['name' => 'Wangjiabian', 'country_code' => 'CN'],\n            ['name' => 'Wen anyi', 'country_code' => 'CN'],\n            ['name' => 'Mawu', 'country_code' => 'CN'],\n            ['name' => 'Agua de Dios', 'country_code' => 'CO'],\n            ['name' => 'El Aguila', 'country_code' => 'CO'],\n            ['name' => 'Hammelburg', 'country_code' => 'DE'],\n            ['name' => 'Charlton Kings', 'country_code' => 'GB'],\n            ['name' => 'Campinorte', 'country_code' => 'BR'],\n            ['name' => 'Mayfield', 'country_code' => 'US'],\n            ['name' => 'Aydincik', 'country_code' => 'TR'],\n            ['name' => 'Lanham', 'country_code' => 'US'],\n            ['name' => 'Sosnivka', 'country_code' => 'UA'],\n            ['name' => 'Franklin Lakes', 'country_code' => 'US'],\n            ['name' => 'Bischofswerda', 'country_code' => 'DE'],\n            ['name' => 'Gulf Gate Estates', 'country_code' => 'US'],\n            ['name' => 'De Pinte', 'country_code' => 'BE'],\n            ['name' => 'Chicureo Abajo', 'country_code' => 'CL'],\n            ['name' => 'Skelton', 'country_code' => 'GB'],\n            ['name' => 'Montale', 'country_code' => 'IT'],\n            ['name' => 'Veseli nad Moravou', 'country_code' => 'CZ'],\n            ['name' => 'Yorktown', 'country_code' => 'US'],\n            ['name' => 'Town and Country', 'country_code' => 'US'],\n            ['name' => 'Gottmadingen', 'country_code' => 'DE'],\n            ['name' => 'Monte San Pietro', 'country_code' => 'IT'],\n            ['name' => 'Miyato', 'country_code' => 'JP'],\n            ['name' => 'Nazyvayevsk', 'country_code' => 'RU'],\n            ['name' => 'Parapua', 'country_code' => 'BR'],\n            ['name' => 'Ostbevern', 'country_code' => 'DE'],\n            ['name' => 'Bollullos de la Mitacion', 'country_code' => 'ES'],\n            ['name' => 'Fao Rai', 'country_code' => 'TH'],\n            ['name' => 'Beius', 'country_code' => 'RO'],\n            ['name' => 'Panguipulli', 'country_code' => 'CL'],\n            ['name' => 'Tournon-sur-Rhone', 'country_code' => 'FR'],\n            ['name' => 'Giardini', 'country_code' => 'IT'],\n            ['name' => 'Fulton', 'country_code' => 'US'],\n            ['name' => 'Mount Sinai', 'country_code' => 'US'],\n            ['name' => 'Princess Anne', 'country_code' => 'US'],\n            ['name' => 'Jefferson Hills', 'country_code' => 'US'],\n            ['name' => 'Marly', 'country_code' => 'FR'],\n            ['name' => 'Pedernales', 'country_code' => 'DO'],\n            ['name' => 'Lindon', 'country_code' => 'US'],\n            ['name' => 'Stannington', 'country_code' => 'GB'],\n            ['name' => 'Al  Amadiyah', 'country_code' => 'IQ'],\n            ['name' => 'Pedersore', 'country_code' => 'FI'],\n            ['name' => 'Hamilton', 'country_code' => 'US'],\n            ['name' => 'Induno Olona', 'country_code' => 'IT'],\n            ['name' => 'Vilyuysk', 'country_code' => 'RU'],\n            ['name' => 'Canton', 'country_code' => 'US'],\n            ['name' => 'Feldkirchen-Westerham', 'country_code' => 'DE'],\n            ['name' => 'Maysville', 'country_code' => 'US'],\n            ['name' => 'Sao Jose do Jacuipe', 'country_code' => 'BR'],\n            ['name' => 'South Yarmouth', 'country_code' => 'US'],\n            ['name' => 'Campton Hills', 'country_code' => 'US'],\n            ['name' => 'Tysvaer', 'country_code' => 'NO'],\n            ['name' => 'Woodbury', 'country_code' => 'US'],\n            ['name' => 'Rifle', 'country_code' => 'US'],\n            ['name' => 'Motta di Livenza', 'country_code' => 'IT'],\n            ['name' => 'Narimanov', 'country_code' => 'RU'],\n            ['name' => 'Iacanga', 'country_code' => 'BR'],\n            ['name' => 'Bennettsville', 'country_code' => 'US'],\n            ['name' => 'Stropkov', 'country_code' => 'SK'],\n            ['name' => 'Walden', 'country_code' => 'US'],\n            ['name' => 'Grove City', 'country_code' => 'US'],\n            ['name' => 'Fervedouro', 'country_code' => 'BR'],\n            ['name' => 'Burgstadt', 'country_code' => 'DE'],\n            ['name' => 'San Nicolas Buenos Aires', 'country_code' => 'MX'],\n            ['name' => 'Tepetlan', 'country_code' => 'MX'],\n            ['name' => 'Lexington Park', 'country_code' => 'US'],\n            ['name' => 'Canandaigua', 'country_code' => 'US'],\n            ['name' => 'Merriam', 'country_code' => 'US'],\n            ['name' => 'Jandaira', 'country_code' => 'BR'],\n            ['name' => 'Sao Pedro do Ivai', 'country_code' => 'BR'],\n            ['name' => 'Andacollo', 'country_code' => 'CL'],\n            ['name' => 'Olbernhau', 'country_code' => 'DE'],\n            ['name' => 'Guilherand', 'country_code' => 'FR'],\n            ['name' => 'Altamira do Maranhao', 'country_code' => 'BR'],\n            ['name' => 'Westwood', 'country_code' => 'US'],\n            ['name' => 'Lower Burrell', 'country_code' => 'US'],\n            ['name' => 'Iapu', 'country_code' => 'BR'],\n            ['name' => 'Valley Center', 'country_code' => 'US'],\n            ['name' => 'Nova Ubirata', 'country_code' => 'BR'],\n            ['name' => 'Brotas de Macaubas', 'country_code' => 'BR'],\n            ['name' => 'East Hanover', 'country_code' => 'US'],\n            ['name' => 'Sigatoka', 'country_code' => 'FJ'],\n            ['name' => 'Silverton', 'country_code' => 'US'],\n            ['name' => 'Villa La Angostura', 'country_code' => 'AR'],\n            ['name' => 'Wahpeton', 'country_code' => 'US'],\n            ['name' => 'Bolivar', 'country_code' => 'US'],\n            ['name' => 'Storm Lake', 'country_code' => 'US'],\n            ['name' => 'Costesti', 'country_code' => 'MD'],\n            ['name' => 'Onna', 'country_code' => 'JP'],\n            ['name' => 'Thouare-sur-Loire', 'country_code' => 'FR'],\n            ['name' => 'Gemona del Friuli', 'country_code' => 'IT'],\n            ['name' => 'Biganos', 'country_code' => 'FR'],\n            ['name' => 'Rostraver', 'country_code' => 'US'],\n            ['name' => 'Whitehall', 'country_code' => 'US'],\n            ['name' => 'Galimuyod', 'country_code' => 'PH'],\n            ['name' => 'Sosnovka', 'country_code' => 'RU'],\n            ['name' => 'Obuse', 'country_code' => 'JP'],\n            ['name' => 'Santana do Mundau', 'country_code' => 'BR'],\n            ['name' => 'Et Tira', 'country_code' => 'IL'],\n            ['name' => 'Urdorf', 'country_code' => 'CH'],\n            ['name' => 'Pingtouchuanxiang', 'country_code' => 'CN'],\n            ['name' => 'Lake Grove', 'country_code' => 'US'],\n            ['name' => 'Itzer', 'country_code' => 'MA'],\n            ['name' => 'Igaratinga', 'country_code' => 'BR'],\n            ['name' => 'Moss Bluff', 'country_code' => 'US'],\n            ['name' => 'Nieder-Olm', 'country_code' => 'DE'],\n            ['name' => 'Young', 'country_code' => 'AU'],\n            ['name' => 'Norwell', 'country_code' => 'US'],\n            ['name' => 'Shalushka', 'country_code' => 'RU'],\n            ['name' => 'Ponte Serrada', 'country_code' => 'BR'],\n            ['name' => 'Grosse Pointe Park', 'country_code' => 'US'],\n            ['name' => 'Sao Goncalo do Rio Abaixo', 'country_code' => 'BR'],\n            ['name' => 'Four Corners', 'country_code' => 'US'],\n            ['name' => 'Afonso Bezerra', 'country_code' => 'BR'],\n            ['name' => 'Schleusingen', 'country_code' => 'DE'],\n            ['name' => 'Grand Haven', 'country_code' => 'US'],\n            ['name' => 'Snodland', 'country_code' => 'GB'],\n            ['name' => 'Borovsk', 'country_code' => 'RU'],\n            ['name' => 'Holbrook', 'country_code' => 'US'],\n            ['name' => 'Igarape Grande', 'country_code' => 'BR'],\n            ['name' => 'Dek emhare', 'country_code' => 'ER'],\n            ['name' => 'Hakone', 'country_code' => 'JP'],\n            ['name' => 'Vera Cruz', 'country_code' => 'BR'],\n            ['name' => 'Two Rivers', 'country_code' => 'US'],\n            ['name' => 'Botupora', 'country_code' => 'BR'],\n            ['name' => 'Gleisdorf', 'country_code' => 'AT'],\n            ['name' => 'Martinengo', 'country_code' => 'IT'],\n            ['name' => 'Methil', 'country_code' => 'GB'],\n            ['name' => 'Siano', 'country_code' => 'IT'],\n            ['name' => 'Jafra', 'country_code' => 'MA'],\n            ['name' => 'Lawrenceburg', 'country_code' => 'US'],\n            ['name' => 'Mossley', 'country_code' => 'GB'],\n            ['name' => 'Draganesti-Olt', 'country_code' => 'RO'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'Zhydachiv', 'country_code' => 'UA'],\n            ['name' => 'Dobbs Ferry', 'country_code' => 'US'],\n            ['name' => 'Ruthen', 'country_code' => 'DE'],\n            ['name' => 'Locate di Triulzi', 'country_code' => 'IT'],\n            ['name' => 'Volkermarkt', 'country_code' => 'AT'],\n            ['name' => 'Chiltiupan', 'country_code' => 'SV'],\n            ['name' => 'Grezzana', 'country_code' => 'IT'],\n            ['name' => 'Bernex', 'country_code' => 'CH'],\n            ['name' => 'Bueno Brandao', 'country_code' => 'BR'],\n            ['name' => 'Zasechnoye', 'country_code' => 'RU'],\n            ['name' => 'Cori', 'country_code' => 'IT'],\n            ['name' => 'Estiva Gerbi', 'country_code' => 'BR'],\n            ['name' => 'Warman', 'country_code' => 'CA'],\n            ['name' => 'Karabash', 'country_code' => 'RU'],\n            ['name' => 'Kingaroy', 'country_code' => 'AU'],\n            ['name' => 'Kiskunmajsa', 'country_code' => 'HU'],\n            ['name' => 'Celano', 'country_code' => 'IT'],\n            ['name' => 'Zumaia', 'country_code' => 'ES'],\n            ['name' => 'Xudat', 'country_code' => 'AZ'],\n            ['name' => 'Akyaka', 'country_code' => 'TR'],\n            ['name' => 'Grove', 'country_code' => 'ES'],\n            ['name' => 'Montecchio Emilia', 'country_code' => 'IT'],\n            ['name' => 'San Felice sul Panaro', 'country_code' => 'IT'],\n            ['name' => 'Knowle', 'country_code' => 'GB'],\n            ['name' => 'Verkhniy Tagil', 'country_code' => 'RU'],\n            ['name' => 'Shiloh', 'country_code' => 'US'],\n            ['name' => 'Barberino di Mugello', 'country_code' => 'IT'],\n            ['name' => 'Munhall', 'country_code' => 'US'],\n            ['name' => 'Wiener Neudorf', 'country_code' => 'AT'],\n            ['name' => 'Texcatepec', 'country_code' => 'MX'],\n            ['name' => 'Somers', 'country_code' => 'US'],\n            ['name' => 'Los Corrales de Buelna', 'country_code' => 'ES'],\n            ['name' => 'Ma ai', 'country_code' => 'CN'],\n            ['name' => 'Altensteig', 'country_code' => 'DE'],\n            ['name' => 'Solymar', 'country_code' => 'HU'],\n            ['name' => 'Lake Morton-Berrydale', 'country_code' => 'US'],\n            ['name' => 'La Tuque', 'country_code' => 'CA'],\n            ['name' => 'Norwich', 'country_code' => 'CA'],\n            ['name' => 'Bocaiuva do Sul', 'country_code' => 'BR'],\n            ['name' => 'Florence', 'country_code' => 'US'],\n            ['name' => 'Loyalsock', 'country_code' => 'US'],\n            ['name' => 'Shagonar', 'country_code' => 'RU'],\n            ['name' => 'Browns Mills', 'country_code' => 'US'],\n            ['name' => 'Cristuru Secuiesc', 'country_code' => 'RO'],\n            ['name' => 'Guymon', 'country_code' => 'US'],\n            ['name' => 'Alberobello', 'country_code' => 'IT'],\n            ['name' => 'Phibun Mangsahan', 'country_code' => 'TH'],\n            ['name' => 'Meaford', 'country_code' => 'CA'],\n            ['name' => 'La Puebla de Cazalla', 'country_code' => 'ES'],\n            ['name' => 'Al Atarib', 'country_code' => 'SY'],\n            ['name' => 'Pike Creek Valley', 'country_code' => 'US'],\n            ['name' => 'Sussen', 'country_code' => 'DE'],\n            ['name' => 'Caracol', 'country_code' => 'BR'],\n            ['name' => 'Oued Amlil', 'country_code' => 'MA'],\n            ['name' => 'Estanzuela', 'country_code' => 'GT'],\n            ['name' => 'Marck', 'country_code' => 'FR'],\n            ['name' => 'Mondeville', 'country_code' => 'FR'],\n            ['name' => 'Pompton Lakes', 'country_code' => 'US'],\n            ['name' => 'Millsboro', 'country_code' => 'US'],\n            ['name' => 'Pedro de Toledo', 'country_code' => 'BR'],\n            ['name' => 'General Salgado', 'country_code' => 'BR'],\n            ['name' => 'Phrai Bueng', 'country_code' => 'TH'],\n            ['name' => 'Kings Mountain', 'country_code' => 'US'],\n            ['name' => 'Prachatice', 'country_code' => 'CZ'],\n            ['name' => 'Sussex', 'country_code' => 'US'],\n            ['name' => 'El Tarra', 'country_code' => 'CO'],\n            ['name' => 'Sao Tiago', 'country_code' => 'BR'],\n            ['name' => 'Schkopau', 'country_code' => 'DE'],\n            ['name' => 'Rokytne', 'country_code' => 'UA'],\n            ['name' => 'La Palma del Condado', 'country_code' => 'ES'],\n            ['name' => 'Saint-Laurent-de-la-Salanque', 'country_code' => 'FR'],\n            ['name' => 'Rio do Fogo', 'country_code' => 'BR'],\n            ['name' => 'Lomazzo', 'country_code' => 'IT'],\n            ['name' => 'Keila', 'country_code' => 'EE'],\n            ['name' => 'Ballston', 'country_code' => 'US'],\n            ['name' => 'Adjala-Tosorontio', 'country_code' => 'CA'],\n            ['name' => 'Pearsall', 'country_code' => 'US'],\n            ['name' => 'Medesano', 'country_code' => 'IT'],\n            ['name' => 'Barmstedt', 'country_code' => 'DE'],\n            ['name' => 'Ocean City', 'country_code' => 'US'],\n            ['name' => 'Astorga', 'country_code' => 'ES'],\n            ['name' => 'Matsuda-soryo', 'country_code' => 'JP'],\n            ['name' => 'Chambly', 'country_code' => 'FR'],\n            ['name' => 'Punitaqui', 'country_code' => 'CL'],\n            ['name' => 'Pontchateau', 'country_code' => 'FR'],\n            ['name' => 'Wooburn', 'country_code' => 'GB'],\n            ['name' => 'Neuhof', 'country_code' => 'DE'],\n            ['name' => 'Largo', 'country_code' => 'US'],\n            ['name' => 'Hurzuf', 'country_code' => 'UA'],\n            ['name' => 'Neman', 'country_code' => 'RU'],\n            ['name' => 'Salo', 'country_code' => 'IT'],\n            ['name' => 'Pont-Saint-Esprit', 'country_code' => 'FR'],\n            ['name' => 'Canelli', 'country_code' => 'IT'],\n            ['name' => 'Springbok', 'country_code' => 'ZA'],\n            ['name' => 'West Point', 'country_code' => 'US'],\n            ['name' => 'Gonzales', 'country_code' => 'US'],\n            ['name' => 'Sultanhani', 'country_code' => 'TR'],\n            ['name' => 'Sidi Namane', 'country_code' => 'DZ'],\n            ['name' => 'Liberty Lake', 'country_code' => 'US'],\n            ['name' => 'Bad Iburg', 'country_code' => 'DE'],\n            ['name' => 'Earlestown', 'country_code' => 'GB'],\n            ['name' => 'Ardrossan', 'country_code' => 'GB'],\n            ['name' => 'Spencer', 'country_code' => 'US'],\n            ['name' => 'Chalco', 'country_code' => 'US'],\n            ['name' => 'Herxheim', 'country_code' => 'DE'],\n            ['name' => 'Aylesford', 'country_code' => 'GB'],\n            ['name' => 'Zwettl', 'country_code' => 'AT'],\n            ['name' => 'Donzdorf', 'country_code' => 'DE'],\n            ['name' => 'Boizenburg', 'country_code' => 'DE'],\n            ['name' => 'Arceburgo', 'country_code' => 'BR'],\n            ['name' => 'Ripoll', 'country_code' => 'ES'],\n            ['name' => 'Elhovo', 'country_code' => 'BG'],\n            ['name' => 'Engen', 'country_code' => 'DE'],\n            ['name' => 'Gerzat', 'country_code' => 'FR'],\n            ['name' => 'Pelissanne', 'country_code' => 'FR'],\n            ['name' => 'Willistown', 'country_code' => 'US'],\n            ['name' => 'Desborough', 'country_code' => 'GB'],\n            ['name' => 'Saddlebrooke', 'country_code' => 'US'],\n            ['name' => 'Decatur', 'country_code' => 'US'],\n            ['name' => 'Isselburg', 'country_code' => 'DE'],\n            ['name' => 'Heath', 'country_code' => 'US'],\n            ['name' => 'Hamilton Township', 'country_code' => 'CA'],\n            ['name' => 'Lagoa do Mato', 'country_code' => 'BR'],\n            ['name' => 'Kandry', 'country_code' => 'RU'],\n            ['name' => 'Concepcion', 'country_code' => 'PH'],\n            ['name' => 'Kaufering', 'country_code' => 'DE'],\n            ['name' => 'Serido', 'country_code' => 'BR'],\n            ['name' => 'Villers-la-Ville', 'country_code' => 'BE'],\n            ['name' => 'Pirauba', 'country_code' => 'BR'],\n            ['name' => 'Trabia', 'country_code' => 'IT'],\n            ['name' => 'Cacimbinhas', 'country_code' => 'BR'],\n            ['name' => 'Guantingzhan', 'country_code' => 'CN'],\n            ['name' => 'Cadelbosco di Sopra', 'country_code' => 'IT'],\n            ['name' => 'Alella', 'country_code' => 'ES'],\n            ['name' => 'Sanjiangkou', 'country_code' => 'CN'],\n            ['name' => 'Seberi', 'country_code' => 'BR'],\n            ['name' => 'New Albany', 'country_code' => 'US'],\n            ['name' => 'Ilvesheim', 'country_code' => 'DE'],\n            ['name' => 'Villers-Cotterets', 'country_code' => 'FR'],\n            ['name' => 'Massa Lombarda', 'country_code' => 'IT'],\n            ['name' => 'Alburquerque', 'country_code' => 'PH'],\n            ['name' => 'Malente', 'country_code' => 'DE'],\n            ['name' => 'Casaluce', 'country_code' => 'IT'],\n            ['name' => 'Montignoso', 'country_code' => 'IT'],\n            ['name' => 'Figuig', 'country_code' => 'MA'],\n            ['name' => 'Vermillion', 'country_code' => 'US'],\n            ['name' => 'Weinbohla', 'country_code' => 'DE'],\n            ['name' => 'Stephanskirchen', 'country_code' => 'DE'],\n            ['name' => 'Wantage', 'country_code' => 'US'],\n            ['name' => 'Westtown', 'country_code' => 'US'],\n            ['name' => 'Novgorodskoye', 'country_code' => 'UA'],\n            ['name' => 'Hagondange', 'country_code' => 'FR'],\n            ['name' => 'Kisujszallas', 'country_code' => 'HU'],\n            ['name' => 'Pau Brasil', 'country_code' => 'BR'],\n            ['name' => 'Prudente de Morais', 'country_code' => 'BR'],\n            ['name' => 'Manchester', 'country_code' => 'US'],\n            ['name' => 'Kamen -Rybolov', 'country_code' => 'RU'],\n            ['name' => 'Bobrovytsia', 'country_code' => 'UA'],\n            ['name' => 'Itarana', 'country_code' => 'BR'],\n            ['name' => 'Bobrynets', 'country_code' => 'UA'],\n            ['name' => 'Sagarejo', 'country_code' => 'GE'],\n            ['name' => 'Erstein', 'country_code' => 'FR'],\n            ['name' => 'Ville-la-Grand', 'country_code' => 'FR'],\n            ['name' => 'Barano d Ischia', 'country_code' => 'IT'],\n            ['name' => 'Alberique', 'country_code' => 'ES'],\n            ['name' => 'Le Cres', 'country_code' => 'FR'],\n            ['name' => 'Pocono', 'country_code' => 'US'],\n            ['name' => 'Ban Lueak', 'country_code' => 'TH'],\n            ['name' => 'Goldbach', 'country_code' => 'DE'],\n            ['name' => 'Yungay', 'country_code' => 'CL'],\n            ['name' => 'Braine-le-Chateau', 'country_code' => 'BE'],\n            ['name' => 'Sao Bento do Sapucai', 'country_code' => 'BR'],\n            ['name' => 'Cusseta', 'country_code' => 'US'],\n            ['name' => 'San Maurizio Canavese', 'country_code' => 'IT'],\n            ['name' => 'Borgloon', 'country_code' => 'BE'],\n            ['name' => 'Surazh', 'country_code' => 'RU'],\n            ['name' => 'Tenango del Aire', 'country_code' => 'MX'],\n            ['name' => 'Felton', 'country_code' => 'GB'],\n            ['name' => 'Walker Mill', 'country_code' => 'US'],\n            ['name' => 'Feyzin', 'country_code' => 'FR'],\n            ['name' => 'Dourdan', 'country_code' => 'FR'],\n            ['name' => 'Tenente Ananias', 'country_code' => 'BR'],\n            ['name' => 'Ramacca', 'country_code' => 'IT'],\n            ['name' => 'Davos', 'country_code' => 'CH'],\n            ['name' => 'Elkins', 'country_code' => 'US'],\n            ['name' => 'Halfway', 'country_code' => 'US'],\n            ['name' => 'Pua', 'country_code' => 'TH'],\n            ['name' => 'Nivala', 'country_code' => 'FI'],\n            ['name' => 'Bofete', 'country_code' => 'BR'],\n            ['name' => 'San Juanito de Escobedo', 'country_code' => 'MX'],\n            ['name' => 'Langenzenn', 'country_code' => 'DE'],\n            ['name' => 'Boekel', 'country_code' => 'NL'],\n            ['name' => 'Court-Saint-Etienne', 'country_code' => 'BE'],\n            ['name' => 'Dayr as Sanquriyah', 'country_code' => 'EG'],\n            ['name' => 'Itapebi', 'country_code' => 'BR'],\n            ['name' => 'Mesyagutovo', 'country_code' => 'RU'],\n            ['name' => 'Krzeszowice', 'country_code' => 'PL'],\n            ['name' => 'Carnaubais', 'country_code' => 'BR'],\n            ['name' => 'Kangaroo Flat', 'country_code' => 'AU'],\n            ['name' => 'Beni Abbes', 'country_code' => 'DZ'],\n            ['name' => 'Kursenai', 'country_code' => 'LT'],\n            ['name' => 'Le Locle', 'country_code' => 'CH'],\n            ['name' => 'Kranuan', 'country_code' => 'TH'],\n            ['name' => 'Soquel', 'country_code' => 'US'],\n            ['name' => 'Mogotes', 'country_code' => 'CO'],\n            ['name' => 'Milton', 'country_code' => 'US'],\n            ['name' => 'Lollar', 'country_code' => 'DE'],\n            ['name' => 'Scartho', 'country_code' => 'GB'],\n            ['name' => 'Koronowo', 'country_code' => 'PL'],\n            ['name' => 'Sprendlingen', 'country_code' => 'DE'],\n            ['name' => 'Tosagua', 'country_code' => 'EC'],\n            ['name' => 'Amioun', 'country_code' => 'LB'],\n            ['name' => 'Holbeach', 'country_code' => 'GB'],\n            ['name' => 'St. Clements', 'country_code' => 'CA'],\n            ['name' => 'Khorol', 'country_code' => 'RU'],\n            ['name' => 'Santa Maria de Itabira', 'country_code' => 'BR'],\n            ['name' => 'Omurtag', 'country_code' => 'BG'],\n            ['name' => 'Fort Meade', 'country_code' => 'US'],\n            ['name' => 'Sam Ko', 'country_code' => 'TH'],\n            ['name' => 'La Escala', 'country_code' => 'ES'],\n            ['name' => 'Montgomery', 'country_code' => 'US'],\n            ['name' => 'Serris', 'country_code' => 'FR'],\n            ['name' => 'Apiuna', 'country_code' => 'BR'],\n            ['name' => 'Saint-Amable', 'country_code' => 'CA'],\n            ['name' => 'Weyburn', 'country_code' => 'CA'],\n            ['name' => 'Strasshof an der Nordbahn', 'country_code' => 'AT'],\n            ['name' => 'Lauterach', 'country_code' => 'AT'],\n            ['name' => 'Itri', 'country_code' => 'IT'],\n            ['name' => 'Primavera', 'country_code' => 'BR'],\n            ['name' => 'Hanover', 'country_code' => 'US'],\n            ['name' => 'Tacima', 'country_code' => 'BR'],\n            ['name' => 'Beclean', 'country_code' => 'RO'],\n            ['name' => 'Lake Monticello', 'country_code' => 'US'],\n            ['name' => 'Jordania', 'country_code' => 'BR'],\n            ['name' => 'Lowes Island', 'country_code' => 'US'],\n            ['name' => 'Sarmiento', 'country_code' => 'AR'],\n            ['name' => 'Manabo', 'country_code' => 'PH'],\n            ['name' => 'Kearney', 'country_code' => 'US'],\n            ['name' => 'West Caldwell', 'country_code' => 'US'],\n            ['name' => 'Bacliff', 'country_code' => 'US'],\n            ['name' => 'Erlenbach am Main', 'country_code' => 'DE'],\n            ['name' => 'Rosario', 'country_code' => 'PH'],\n            ['name' => 'Essex Junction', 'country_code' => 'US'],\n            ['name' => 'Grigiskes', 'country_code' => 'LT'],\n            ['name' => 'Reguengos de Monsaraz', 'country_code' => 'PT'],\n            ['name' => 'Raeren', 'country_code' => 'BE'],\n            ['name' => 'Manevychi', 'country_code' => 'UA'],\n            ['name' => 'Amatura', 'country_code' => 'BR'],\n            ['name' => 'Celldomolk', 'country_code' => 'HU'],\n            ['name' => 'Ngorongoro', 'country_code' => 'TZ'],\n            ['name' => 'Ferros', 'country_code' => 'BR'],\n            ['name' => 'Ban Ko', 'country_code' => 'TH'],\n            ['name' => 'Hrebinka', 'country_code' => 'UA'],\n            ['name' => 'Kitee', 'country_code' => 'FI'],\n            ['name' => 'Bestwig', 'country_code' => 'DE'],\n            ['name' => 'Winchendon', 'country_code' => 'US'],\n            ['name' => 'Lavaur', 'country_code' => 'FR'],\n            ['name' => 'Pleasant View', 'country_code' => 'US'],\n            ['name' => 'Weingarten', 'country_code' => 'DE'],\n            ['name' => 'Wasilla', 'country_code' => 'US'],\n            ['name' => 'Orsta', 'country_code' => 'NO'],\n            ['name' => 'Sharg un', 'country_code' => 'UZ'],\n            ['name' => 'Xiaozui', 'country_code' => 'CN'],\n            ['name' => 'Forest', 'country_code' => 'US'],\n            ['name' => 'Cantillana', 'country_code' => 'ES'],\n            ['name' => 'Baryshivka', 'country_code' => 'UA'],\n            ['name' => 'Maur', 'country_code' => 'CH'],\n            ['name' => 'Oak Grove', 'country_code' => 'US'],\n            ['name' => 'Gaohucun', 'country_code' => 'CN'],\n            ['name' => 'South Dundas', 'country_code' => 'CA'],\n            ['name' => 'Aberbargoed', 'country_code' => 'GB'],\n            ['name' => 'Weeze', 'country_code' => 'DE'],\n            ['name' => 'Kingsteignton', 'country_code' => 'GB'],\n            ['name' => 'Rincao', 'country_code' => 'BR'],\n            ['name' => 'Fiuggi', 'country_code' => 'IT'],\n            ['name' => 'Pirapetinga', 'country_code' => 'BR'],\n            ['name' => 'Itapitanga', 'country_code' => 'BR'],\n            ['name' => 'Sevilla', 'country_code' => 'PH'],\n            ['name' => 'Diavata', 'country_code' => 'GR'],\n            ['name' => 'Imi Mokorn', 'country_code' => 'MA'],\n            ['name' => 'Zhatay', 'country_code' => 'RU'],\n            ['name' => 'Parnagua', 'country_code' => 'BR'],\n            ['name' => 'Mae Ai', 'country_code' => 'TH'],\n            ['name' => 'Braunsbedra', 'country_code' => 'DE'],\n            ['name' => 'Khrystynivka', 'country_code' => 'UA'],\n            ['name' => 'River Forest', 'country_code' => 'US'],\n            ['name' => 'Randazzo', 'country_code' => 'IT'],\n            ['name' => 'Ogano', 'country_code' => 'JP'],\n            ['name' => 'Fontaine-les-Dijon', 'country_code' => 'FR'],\n            ['name' => 'Soyaniquilpan', 'country_code' => 'MX'],\n            ['name' => 'Wang Sombun', 'country_code' => 'TH'],\n            ['name' => 'Tecoh', 'country_code' => 'MX'],\n            ['name' => 'Kolno', 'country_code' => 'PL'],\n            ['name' => 'Pont-Audemer', 'country_code' => 'FR'],\n            ['name' => 'La Baneza', 'country_code' => 'ES'],\n            ['name' => 'Villiersdorp', 'country_code' => 'ZA'],\n            ['name' => 'Haigerloch', 'country_code' => 'DE'],\n            ['name' => 'Cheval', 'country_code' => 'US'],\n            ['name' => 'Ararenda', 'country_code' => 'BR'],\n            ['name' => 'The Pinery', 'country_code' => 'US'],\n            ['name' => 'Poiana Mare', 'country_code' => 'RO'],\n            ['name' => 'Tiszafoldvar', 'country_code' => 'HU'],\n            ['name' => 'Juripiranga', 'country_code' => 'BR'],\n            ['name' => 'Tezontepec', 'country_code' => 'MX'],\n            ['name' => 'Dali', 'country_code' => 'CY'],\n            ['name' => 'Uzda', 'country_code' => 'BY'],\n            ['name' => 'Panthersville', 'country_code' => 'US'],\n            ['name' => 'Santo Domingo', 'country_code' => 'CO'],\n            ['name' => 'Tiszafured', 'country_code' => 'HU'],\n            ['name' => 'Furth', 'country_code' => 'DE'],\n            ['name' => 'Smithville', 'country_code' => 'US'],\n            ['name' => 'Mount Kisco', 'country_code' => 'US'],\n            ['name' => 'Guaraci', 'country_code' => 'BR'],\n            ['name' => 'Orlu', 'country_code' => 'NG'],\n            ['name' => 'Douar Bouchfaa', 'country_code' => 'MA'],\n            ['name' => 'Sierra Madre', 'country_code' => 'US'],\n            ['name' => 'Bananal', 'country_code' => 'BR'],\n            ['name' => 'Lower Saucon', 'country_code' => 'US'],\n            ['name' => 'Totowa', 'country_code' => 'US'],\n            ['name' => 'Zuchwil', 'country_code' => 'CH'],\n            ['name' => 'Messstetten', 'country_code' => 'DE'],\n            ['name' => 'Totolapan', 'country_code' => 'MX'],\n            ['name' => 'Blandford Forum', 'country_code' => 'GB'],\n            ['name' => 'Merces', 'country_code' => 'BR'],\n            ['name' => 'Bleicherode', 'country_code' => 'DE'],\n            ['name' => 'Marasesti', 'country_code' => 'RO'],\n            ['name' => 'Demmin', 'country_code' => 'DE'],\n            ['name' => 'Hochdorf', 'country_code' => 'CH'],\n            ['name' => 'Abram', 'country_code' => 'GB'],\n            ['name' => 'Mery-sur-Oise', 'country_code' => 'FR'],\n            ['name' => 'Le Taillan-Medoc', 'country_code' => 'FR'],\n            ['name' => 'Oloron-Sainte-Marie', 'country_code' => 'FR'],\n            ['name' => 'Diedorf', 'country_code' => 'DE'],\n            ['name' => 'Urlati', 'country_code' => 'RO'],\n            ['name' => 'Wald-Michelbach', 'country_code' => 'DE'],\n            ['name' => 'San German', 'country_code' => 'PR'],\n            ['name' => 'Magny-le-Hongre', 'country_code' => 'FR'],\n            ['name' => 'Pencoed', 'country_code' => 'GB'],\n            ['name' => 'Castleton', 'country_code' => 'GB'],\n            ['name' => 'Wittelsheim', 'country_code' => 'FR'],\n            ['name' => 'Hanson', 'country_code' => 'US'],\n            ['name' => 'Orono', 'country_code' => 'US'],\n            ['name' => 'Yeghvard', 'country_code' => 'AM'],\n            ['name' => 'Birkenfeld', 'country_code' => 'DE'],\n            ['name' => 'Highland Park', 'country_code' => 'US'],\n            ['name' => 'Vigonovo', 'country_code' => 'IT'],\n            ['name' => 'Foum Jam a', 'country_code' => 'MA'],\n            ['name' => 'Tanant', 'country_code' => 'MA'],\n            ['name' => 'Otsuchi', 'country_code' => 'JP'],\n            ['name' => 'Kongen', 'country_code' => 'DE'],\n            ['name' => 'Yuzhno-Sukhokumsk', 'country_code' => 'RU'],\n            ['name' => 'Rackeve', 'country_code' => 'HU'],\n            ['name' => 'Kranenburg', 'country_code' => 'DE'],\n            ['name' => 'Tlachichilco', 'country_code' => 'MX'],\n            ['name' => 'North Branch', 'country_code' => 'US'],\n            ['name' => 'Rebola', 'country_code' => 'GQ'],\n            ['name' => 'Lerici', 'country_code' => 'IT'],\n            ['name' => 'Winnemucca', 'country_code' => 'US'],\n            ['name' => 'Castle Pines', 'country_code' => 'US'],\n            ['name' => 'Iwai', 'country_code' => 'JP'],\n            ['name' => 'Pintadas', 'country_code' => 'BR'],\n            ['name' => 'Shannon', 'country_code' => 'IE'],\n            ['name' => 'Arbaa Sahel', 'country_code' => 'MA'],\n            ['name' => 'Goianapolis', 'country_code' => 'BR'],\n            ['name' => 'Nizza Monferrato', 'country_code' => 'IT'],\n            ['name' => 'Taouloukoult', 'country_code' => 'MA'],\n            ['name' => 'Burr Ridge', 'country_code' => 'US'],\n            ['name' => 'Galena Park', 'country_code' => 'US'],\n            ['name' => 'L Ile-Perrot', 'country_code' => 'CA'],\n            ['name' => 'Notre-Dame-de-l Ile-Perrot', 'country_code' => 'CA'],\n            ['name' => 'Felsberg', 'country_code' => 'DE'],\n            ['name' => 'Tangerhutte', 'country_code' => 'DE'],\n            ['name' => 'Maynard', 'country_code' => 'US'],\n            ['name' => 'Myrtle Grove', 'country_code' => 'US'],\n            ['name' => 'Williams Lake', 'country_code' => 'CA'],\n            ['name' => 'Bischofshofen', 'country_code' => 'AT'],\n            ['name' => 'Quincy-sous-Senart', 'country_code' => 'FR'],\n            ['name' => 'Ludington', 'country_code' => 'US'],\n            ['name' => 'Santa Catarina Ayotzingo', 'country_code' => 'MX'],\n            ['name' => 'Camden', 'country_code' => 'US'],\n            ['name' => 'Vanzago', 'country_code' => 'IT'],\n            ['name' => 'Sao Luis do Paraitinga', 'country_code' => 'BR'],\n            ['name' => 'Aigle', 'country_code' => 'CH'],\n            ['name' => 'Nadezhda', 'country_code' => 'RU'],\n            ['name' => 'Coriano', 'country_code' => 'IT'],\n            ['name' => 'Orthez', 'country_code' => 'FR'],\n            ['name' => 'Bellmead', 'country_code' => 'US'],\n            ['name' => 'Mount Evelyn', 'country_code' => 'AU'],\n            ['name' => 'Caslav', 'country_code' => 'CZ'],\n            ['name' => 'Southwater', 'country_code' => 'GB'],\n            ['name' => 'Elliot Lake', 'country_code' => 'CA'],\n            ['name' => 'Aguadilla', 'country_code' => 'PR'],\n            ['name' => 'Praskoveya', 'country_code' => 'RU'],\n            ['name' => 'Fontoura Xavier', 'country_code' => 'BR'],\n            ['name' => 'Bourg-de-Peage', 'country_code' => 'FR'],\n            ['name' => 'Muskegon Heights', 'country_code' => 'US'],\n            ['name' => 'Pola de Lena', 'country_code' => 'ES'],\n            ['name' => 'Balderton', 'country_code' => 'GB'],\n            ['name' => 'Cedral', 'country_code' => 'BR'],\n            ['name' => 'Sao Bras de Alportel', 'country_code' => 'PT'],\n            ['name' => 'Mapleton', 'country_code' => 'US'],\n            ['name' => 'Fruitland Park', 'country_code' => 'US'],\n            ['name' => 'Winchester', 'country_code' => 'US'],\n            ['name' => 'Murtosa', 'country_code' => 'PT'],\n            ['name' => 'Juruaia', 'country_code' => 'BR'],\n            ['name' => 'Tafalla', 'country_code' => 'ES'],\n            ['name' => 'Ichnia', 'country_code' => 'UA'],\n            ['name' => 'Penarroya-Pueblonuevo', 'country_code' => 'ES'],\n            ['name' => 'Al Musayfirah', 'country_code' => 'SY'],\n            ['name' => 'Diessen am Ammersee', 'country_code' => 'DE'],\n            ['name' => 'Tamanar', 'country_code' => 'MA'],\n            ['name' => 'Arkadelphia', 'country_code' => 'US'],\n            ['name' => 'Zavitinsk', 'country_code' => 'RU'],\n            ['name' => 'San Pablo Huixtepec', 'country_code' => 'MX'],\n            ['name' => 'Bondues', 'country_code' => 'FR'],\n            ['name' => 'Leognan', 'country_code' => 'FR'],\n            ['name' => 'Waiuku', 'country_code' => 'NZ'],\n            ['name' => 'Rochelle', 'country_code' => 'US'],\n            ['name' => 'Abadou', 'country_code' => 'MA'],\n            ['name' => 'Gignac-la-Nerthe', 'country_code' => 'FR'],\n            ['name' => 'Gig Harbor', 'country_code' => 'US'],\n            ['name' => 'Poirino', 'country_code' => 'IT'],\n            ['name' => 'Bentley', 'country_code' => 'AU'],\n            ['name' => 'Frodsham', 'country_code' => 'GB'],\n            ['name' => 'San Ricardo', 'country_code' => 'PH'],\n            ['name' => 'Sidi Bousber', 'country_code' => 'MA'],\n            ['name' => 'Nakayama', 'country_code' => 'JP'],\n            ['name' => 'Garrucha', 'country_code' => 'ES'],\n            ['name' => 'Villa Purificacion', 'country_code' => 'MX'],\n            ['name' => 'Umarizal', 'country_code' => 'BR'],\n            ['name' => 'Dinagat', 'country_code' => 'PH'],\n            ['name' => 'Crestwood', 'country_code' => 'US'],\n            ['name' => 'Salemi', 'country_code' => 'IT'],\n            ['name' => 'Farmersville', 'country_code' => 'US'],\n            ['name' => 'Brejolandia', 'country_code' => 'BR'],\n            ['name' => 'Waterford', 'country_code' => 'US'],\n            ['name' => 'Smithfield', 'country_code' => 'US'],\n            ['name' => 'Gateway', 'country_code' => 'US'],\n            ['name' => 'Chenango', 'country_code' => 'US'],\n            ['name' => 'Silea', 'country_code' => 'IT'],\n            ['name' => 'Cantley', 'country_code' => 'CA'],\n            ['name' => 'Torre Santa Susanna', 'country_code' => 'IT'],\n            ['name' => 'Had Laaounate', 'country_code' => 'MA'],\n            ['name' => 'Raceland', 'country_code' => 'US'],\n            ['name' => 'Jibou', 'country_code' => 'RO'],\n            ['name' => 'Gilbues', 'country_code' => 'BR'],\n            ['name' => 'Sweet Home', 'country_code' => 'US'],\n            ['name' => 'Ribeirao Claro', 'country_code' => 'BR'],\n            ['name' => 'Inkerman', 'country_code' => 'UA'],\n            ['name' => 'Ickenham', 'country_code' => 'GB'],\n            ['name' => 'Pariconia', 'country_code' => 'BR'],\n            ['name' => 'Nova Olinda', 'country_code' => 'BR'],\n            ['name' => 'DeForest', 'country_code' => 'US'],\n            ['name' => 'Riedlingen', 'country_code' => 'DE'],\n            ['name' => 'Cleveland', 'country_code' => 'US'],\n            ['name' => 'Avon Park', 'country_code' => 'US'],\n            ['name' => 'Hameenkyro', 'country_code' => 'FI'],\n            ['name' => 'Agdz', 'country_code' => 'MA'],\n            ['name' => 'Cowra', 'country_code' => 'AU'],\n            ['name' => 'Lichtenau', 'country_code' => 'DE'],\n            ['name' => 'Rhosllanerchrugog', 'country_code' => 'GB'],\n            ['name' => 'Burgkirchen an der Alz', 'country_code' => 'DE'],\n            ['name' => 'Szigetvar', 'country_code' => 'HU'],\n            ['name' => 'Nossen', 'country_code' => 'DE'],\n            ['name' => 'Gernsheim', 'country_code' => 'DE'],\n            ['name' => 'Fondettes', 'country_code' => 'FR'],\n            ['name' => 'Itaueira', 'country_code' => 'BR'],\n            ['name' => 'Aver-o-Mar', 'country_code' => 'PT'],\n            ['name' => 'Branquinha', 'country_code' => 'BR'],\n            ['name' => 'Darling', 'country_code' => 'ZA'],\n            ['name' => 'Merchweiler', 'country_code' => 'DE'],\n            ['name' => 'Villacarrillo', 'country_code' => 'ES'],\n            ['name' => 'Hetane', 'country_code' => 'MA'],\n            ['name' => 'Van Wert', 'country_code' => 'US'],\n            ['name' => 'Almoloya', 'country_code' => 'MX'],\n            ['name' => 'Atessa', 'country_code' => 'IT'],\n            ['name' => 'Otelu Rosu', 'country_code' => 'RO'],\n            ['name' => 'Rombas', 'country_code' => 'FR'],\n            ['name' => 'Recco', 'country_code' => 'IT'],\n            ['name' => 'Canelinha', 'country_code' => 'BR'],\n            ['name' => 'Orsova', 'country_code' => 'RO'],\n            ['name' => 'Baraclandia', 'country_code' => 'BR'],\n            ['name' => 'Amtar', 'country_code' => 'MA'],\n            ['name' => 'Faxinal dos Guedes', 'country_code' => 'BR'],\n            ['name' => 'Chuqung', 'country_code' => 'CN'],\n            ['name' => 'Garden City', 'country_code' => 'US'],\n            ['name' => 'Zawyat Ahancal', 'country_code' => 'MA'],\n            ['name' => 'Newburn', 'country_code' => 'GB'],\n            ['name' => 'Roccapiemonte', 'country_code' => 'IT'],\n            ['name' => 'Sao Sebastiao do Maranhao', 'country_code' => 'BR'],\n            ['name' => 'Borculo', 'country_code' => 'NL'],\n            ['name' => 'Waldkirchen', 'country_code' => 'DE'],\n            ['name' => 'Paimio', 'country_code' => 'FI'],\n            ['name' => 'Nelson', 'country_code' => 'CA'],\n            ['name' => 'Knin', 'country_code' => 'HR'],\n            ['name' => 'Weilheim an der Teck', 'country_code' => 'DE'],\n            ['name' => 'Tubara', 'country_code' => 'CO'],\n            ['name' => 'Querfurt', 'country_code' => 'DE'],\n            ['name' => 'Hornell', 'country_code' => 'US'],\n            ['name' => 'Pacific', 'country_code' => 'US'],\n            ['name' => 'Huetor-Tajar', 'country_code' => 'ES'],\n            ['name' => 'Trajano de Morais', 'country_code' => 'BR'],\n            ['name' => 'Castrolibero', 'country_code' => 'IT'],\n            ['name' => 'Altotting', 'country_code' => 'DE'],\n            ['name' => 'Mara Rosa', 'country_code' => 'BR'],\n            ['name' => 'La Trinite', 'country_code' => 'FR'],\n            ['name' => 'Sosenskiy', 'country_code' => 'RU'],\n            ['name' => 'Newcastle', 'country_code' => 'US'],\n            ['name' => 'Tnine Sidi Lyamani', 'country_code' => 'MA'],\n            ['name' => 'Vysokovsk', 'country_code' => 'RU'],\n            ['name' => 'Bargas', 'country_code' => 'ES'],\n            ['name' => 'Ketchikan', 'country_code' => 'US'],\n            ['name' => 'Alamosa', 'country_code' => 'US'],\n            ['name' => 'Gudofredo Viana', 'country_code' => 'BR'],\n            ['name' => 'Kuiyibagecun', 'country_code' => 'CN'],\n            ['name' => 'Castelletto sopra Ticino', 'country_code' => 'IT'],\n            ['name' => 'Trets', 'country_code' => 'FR'],\n            ['name' => 'Toccoa', 'country_code' => 'US'],\n            ['name' => 'Arraias', 'country_code' => 'BR'],\n            ['name' => 'Brooklyn', 'country_code' => 'US'],\n            ['name' => 'Souq Sebt Says', 'country_code' => 'MA'],\n            ['name' => 'Saks', 'country_code' => 'US'],\n            ['name' => 'Vittuone', 'country_code' => 'IT'],\n            ['name' => 'Conselve', 'country_code' => 'IT'],\n            ['name' => 'Kolarovo', 'country_code' => 'SK'],\n            ['name' => 'Mouans-Sartoux', 'country_code' => 'FR'],\n            ['name' => 'Sucupira do Norte', 'country_code' => 'BR'],\n            ['name' => 'Corcuera', 'country_code' => 'PH'],\n            ['name' => 'Millington', 'country_code' => 'US'],\n            ['name' => 'Iretama', 'country_code' => 'BR'],\n            ['name' => 'Cassa de la Selva', 'country_code' => 'ES'],\n            ['name' => 'Murata', 'country_code' => 'JP'],\n            ['name' => 'Lazaro Cardenas', 'country_code' => 'MX'],\n            ['name' => 'Birchington', 'country_code' => 'GB'],\n            ['name' => 'Urrugne', 'country_code' => 'FR'],\n            ['name' => 'Georgetown', 'country_code' => 'US'],\n            ['name' => 'Ogdensburg', 'country_code' => 'US'],\n            ['name' => 'Bobenheim-Roxheim', 'country_code' => 'DE'],\n            ['name' => 'Ain Zora', 'country_code' => 'MA'],\n            ['name' => 'Geneseo', 'country_code' => 'US'],\n            ['name' => 'Wyomissing', 'country_code' => 'US'],\n            ['name' => 'Scituate', 'country_code' => 'US'],\n            ['name' => 'Jacinto Machado', 'country_code' => 'BR'],\n            ['name' => 'Petal', 'country_code' => 'US'],\n            ['name' => 'Lambton Shores', 'country_code' => 'CA'],\n            ['name' => 'Anderson', 'country_code' => 'US'],\n            ['name' => 'Santiago Suchilquitongo', 'country_code' => 'MX'],\n            ['name' => 'Isola Vicentina', 'country_code' => 'IT'],\n            ['name' => 'Villeneuve-les-Maguelone', 'country_code' => 'FR'],\n            ['name' => 'Sao Joao', 'country_code' => 'BR'],\n            ['name' => 'Toundout', 'country_code' => 'MA'],\n            ['name' => 'Mokrisset', 'country_code' => 'MA'],\n            ['name' => 'Hochberg', 'country_code' => 'DE'],\n            ['name' => 'Mussomeli', 'country_code' => 'IT'],\n            ['name' => 'Monte Alegre do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Monroe', 'country_code' => 'US'],\n            ['name' => 'Bovingdon', 'country_code' => 'GB'],\n            ['name' => 'Easttown', 'country_code' => 'US'],\n            ['name' => 'Norvenich', 'country_code' => 'DE'],\n            ['name' => 'Monnickendam', 'country_code' => 'NL'],\n            ['name' => 'Ozieri', 'country_code' => 'IT'],\n            ['name' => 'Jablanica', 'country_code' => 'BA'],\n            ['name' => 'Tourza', 'country_code' => 'MA'],\n            ['name' => 'Atchison', 'country_code' => 'US'],\n            ['name' => 'Benito Juarez', 'country_code' => 'AR'],\n            ['name' => 'Escaudain', 'country_code' => 'FR'],\n            ['name' => 'Schalksmuhle', 'country_code' => 'DE'],\n            ['name' => 'Kimpese', 'country_code' => 'CD'],\n            ['name' => 'Aerzen', 'country_code' => 'DE'],\n            ['name' => 'Peschanokopskoye', 'country_code' => 'RU'],\n            ['name' => 'Khilok', 'country_code' => 'RU'],\n            ['name' => 'Biskupiec', 'country_code' => 'PL'],\n            ['name' => 'Gommern', 'country_code' => 'DE'],\n            ['name' => 'Mold', 'country_code' => 'GB'],\n            ['name' => 'Malaya Vishera', 'country_code' => 'RU'],\n            ['name' => 'Cajapio', 'country_code' => 'BR'],\n            ['name' => 'Bibbiano', 'country_code' => 'IT'],\n            ['name' => 'Pinto', 'country_code' => 'CL'],\n            ['name' => 'Strehaia', 'country_code' => 'RO'],\n            ['name' => 'Songo', 'country_code' => 'AO'],\n            ['name' => 'Highland City', 'country_code' => 'US'],\n            ['name' => 'Ait Hani', 'country_code' => 'MA'],\n            ['name' => 'Saint-Gely-du-Fesc', 'country_code' => 'FR'],\n            ['name' => 'Mildenhall', 'country_code' => 'GB'],\n            ['name' => 'Tarazona de Aragon', 'country_code' => 'ES'],\n            ['name' => 'Santa Teresinha', 'country_code' => 'BR'],\n            ['name' => 'Imst', 'country_code' => 'AT'],\n            ['name' => 'Virginopolis', 'country_code' => 'BR'],\n            ['name' => 'Rignano Flaminio', 'country_code' => 'IT'],\n            ['name' => 'Santa Margarita de Mombuy', 'country_code' => 'ES'],\n            ['name' => 'Porto Xavier', 'country_code' => 'BR'],\n            ['name' => 'Ludlow', 'country_code' => 'GB'],\n            ['name' => 'Lavinia', 'country_code' => 'BR'],\n            ['name' => 'Markt Indersdorf', 'country_code' => 'DE'],\n            ['name' => 'Kraluv Dvur', 'country_code' => 'CZ'],\n            ['name' => 'Canteras', 'country_code' => 'ES'],\n            ['name' => 'Baran ', 'country_code' => 'BY'],\n            ['name' => 'Pirpirituba', 'country_code' => 'BR'],\n            ['name' => 'Bohl-Iggelheim', 'country_code' => 'DE'],\n            ['name' => 'Scherpenzeel', 'country_code' => 'NL'],\n            ['name' => 'Barcs', 'country_code' => 'HU'],\n            ['name' => 'Serra Caiada', 'country_code' => 'BR'],\n            ['name' => 'Bangshang', 'country_code' => 'CN'],\n            ['name' => 'Bom Repouso', 'country_code' => 'BR'],\n            ['name' => 'Vorsma', 'country_code' => 'RU'],\n            ['name' => 'Morbach', 'country_code' => 'DE'],\n            ['name' => 'Castelnovo ne  Monti', 'country_code' => 'IT'],\n            ['name' => 'Badia Polesine', 'country_code' => 'IT'],\n            ['name' => 'Kapaa', 'country_code' => 'US'],\n            ['name' => 'Bom Jesus da Serra', 'country_code' => 'BR'],\n            ['name' => 'Doorn', 'country_code' => 'NL'],\n            ['name' => 'Urgnano', 'country_code' => 'IT'],\n            ['name' => 'Waterloo', 'country_code' => 'US'],\n            ['name' => 'Wyndham', 'country_code' => 'US'],\n            ['name' => 'Montividiu', 'country_code' => 'BR'],\n            ['name' => 'Naganuma', 'country_code' => 'JP'],\n            ['name' => 'San Vicente', 'country_code' => 'PH'],\n            ['name' => 'Ruppichteroth', 'country_code' => 'DE'],\n            ['name' => 'Sortland', 'country_code' => 'NO'],\n            ['name' => 'Borjomi', 'country_code' => 'GE'],\n            ['name' => 'San Pedro La Laguna', 'country_code' => 'GT'],\n            ['name' => 'Norton', 'country_code' => 'US'],\n            ['name' => 'Ban Bang Phlap', 'country_code' => 'TH'],\n            ['name' => 'Fairfield', 'country_code' => 'US'],\n            ['name' => 'Tilougguit', 'country_code' => 'MA'],\n            ['name' => 'Jesenice', 'country_code' => 'CZ'],\n            ['name' => 'Greencastle', 'country_code' => 'US'],\n            ['name' => 'Covington', 'country_code' => 'US'],\n            ['name' => 'Santa Teresa di Riva', 'country_code' => 'IT'],\n            ['name' => 'Three Rivers', 'country_code' => 'US'],\n            ['name' => 'Dombasle-sur-Meurthe', 'country_code' => 'FR'],\n            ['name' => 'Hilter', 'country_code' => 'DE'],\n            ['name' => 'Armanaz', 'country_code' => 'SY'],\n            ['name' => 'Timonium', 'country_code' => 'US'],\n            ['name' => 'Chateaugiron', 'country_code' => 'FR'],\n            ['name' => 'Wilkau-Hasslau', 'country_code' => 'DE'],\n            ['name' => 'East Cocalico', 'country_code' => 'US'],\n            ['name' => 'Castalla', 'country_code' => 'ES'],\n            ['name' => 'Grevesmuhlen', 'country_code' => 'DE'],\n            ['name' => 'Veitshochheim', 'country_code' => 'DE'],\n            ['name' => 'Partanna', 'country_code' => 'IT'],\n            ['name' => 'Frontera', 'country_code' => 'AR'],\n            ['name' => 'Campi Salentina', 'country_code' => 'IT'],\n            ['name' => 'Litomysl', 'country_code' => 'CZ'],\n            ['name' => 'Grossos', 'country_code' => 'BR'],\n            ['name' => 'Torotoro', 'country_code' => 'BO'],\n            ['name' => 'Kamifurano', 'country_code' => 'JP'],\n            ['name' => 'Aragoiania', 'country_code' => 'BR'],\n            ['name' => 'Ben N Choud', 'country_code' => 'DZ'],\n            ['name' => 'Morro Bay', 'country_code' => 'US'],\n            ['name' => 'Argeles-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Bordj Okhriss', 'country_code' => 'DZ'],\n            ['name' => 'Lowell', 'country_code' => 'US'],\n            ['name' => 'Trescore Balneario', 'country_code' => 'IT'],\n            ['name' => 'Cutro', 'country_code' => 'IT'],\n            ['name' => 'Zmeinogorsk', 'country_code' => 'RU'],\n            ['name' => 'Ban Thung Khao Phuang', 'country_code' => 'TH'],\n            ['name' => 'La Ferte-sous-Jouarre', 'country_code' => 'FR'],\n            ['name' => 'Paris', 'country_code' => 'US'],\n            ['name' => 'Dnestrovsc', 'country_code' => 'MD'],\n            ['name' => 'Ironton', 'country_code' => 'US'],\n            ['name' => 'Star', 'country_code' => 'US'],\n            ['name' => 'Fairview', 'country_code' => 'US'],\n            ['name' => 'Kauniainen', 'country_code' => 'FI'],\n            ['name' => 'Pasadena Hills', 'country_code' => 'US'],\n            ['name' => 'Ibiassuce', 'country_code' => 'BR'],\n            ['name' => 'Acushnet', 'country_code' => 'US'],\n            ['name' => 'Concordia Sagittaria', 'country_code' => 'IT'],\n            ['name' => 'Arlesheim', 'country_code' => 'CH'],\n            ['name' => 'Bagnara Calabra', 'country_code' => 'IT'],\n            ['name' => 'Alcaudete', 'country_code' => 'ES'],\n            ['name' => 'Mapleton', 'country_code' => 'CA'],\n            ['name' => 'Sidi Abdallah', 'country_code' => 'MA'],\n            ['name' => 'Sotkamo', 'country_code' => 'FI'],\n            ['name' => 'Alcora', 'country_code' => 'ES'],\n            ['name' => 'Sinaia', 'country_code' => 'RO'],\n            ['name' => 'Appenweier', 'country_code' => 'DE'],\n            ['name' => 'Sangao', 'country_code' => 'BR'],\n            ['name' => 'Shumanay', 'country_code' => 'UZ'],\n            ['name' => 'Villanueva de Arosa', 'country_code' => 'ES'],\n            ['name' => 'Prakhon Chai', 'country_code' => 'TH'],\n            ['name' => 'Milton', 'country_code' => 'US'],\n            ['name' => 'Sandy', 'country_code' => 'US'],\n            ['name' => 'Topoloveni', 'country_code' => 'RO'],\n            ['name' => 'Albert', 'country_code' => 'FR'],\n            ['name' => 'La Londe-les-Maures', 'country_code' => 'FR'],\n            ['name' => 'Hochst im Odenwald', 'country_code' => 'DE'],\n            ['name' => 'Bad Lauterberg', 'country_code' => 'DE'],\n            ['name' => 'Regidor', 'country_code' => 'CO'],\n            ['name' => 'Vaals', 'country_code' => 'NL'],\n            ['name' => 'San Giorgio del Sannio', 'country_code' => 'IT'],\n            ['name' => 'La Guardia', 'country_code' => 'ES'],\n            ['name' => 'Lloyd', 'country_code' => 'US'],\n            ['name' => 'San Diego Country Estates', 'country_code' => 'US'],\n            ['name' => 'Valdobbiadene', 'country_code' => 'IT'],\n            ['name' => 'Columbia', 'country_code' => 'US'],\n            ['name' => 'Phai Sali', 'country_code' => 'TH'],\n            ['name' => 'Senhora dos Remedios', 'country_code' => 'BR'],\n            ['name' => 'Bolekhiv', 'country_code' => 'UA'],\n            ['name' => 'Hockley', 'country_code' => 'GB'],\n            ['name' => 'Altenholz', 'country_code' => 'DE'],\n            ['name' => 'Roscoe', 'country_code' => 'US'],\n            ['name' => 'Targu Frumos', 'country_code' => 'RO'],\n            ['name' => 'Schwaikheim', 'country_code' => 'DE'],\n            ['name' => 'Guadalupe', 'country_code' => 'BR'],\n            ['name' => 'Altofonte', 'country_code' => 'IT'],\n            ['name' => 'Douglass', 'country_code' => 'US'],\n            ['name' => 'Natuba', 'country_code' => 'BR'],\n            ['name' => 'Maria Enzersdorf', 'country_code' => 'AT'],\n            ['name' => 'Nova Europa', 'country_code' => 'BR'],\n            ['name' => 'Tiztoutine', 'country_code' => 'MA'],\n            ['name' => 'Jefferson', 'country_code' => 'US'],\n            ['name' => 'Little Canada', 'country_code' => 'US'],\n            ['name' => 'Rosaryville', 'country_code' => 'US'],\n            ['name' => 'Wapakoneta', 'country_code' => 'US'],\n            ['name' => 'Cavriago', 'country_code' => 'IT'],\n            ['name' => 'Hambuhren', 'country_code' => 'DE'],\n            ['name' => 'Alpine', 'country_code' => 'US'],\n            ['name' => 'Perols', 'country_code' => 'FR'],\n            ['name' => 'Lahstedt', 'country_code' => 'DE'],\n            ['name' => 'San Vendemiano', 'country_code' => 'IT'],\n            ['name' => 'Fuveau', 'country_code' => 'FR'],\n            ['name' => 'Reiskirchen', 'country_code' => 'DE'],\n            ['name' => 'Iramaia', 'country_code' => 'BR'],\n            ['name' => 'Huittinen', 'country_code' => 'FI'],\n            ['name' => 'Lyuboml ', 'country_code' => 'UA'],\n            ['name' => 'Langhirano', 'country_code' => 'IT'],\n            ['name' => 'Farmington', 'country_code' => 'US'],\n            ['name' => 'Ivangorod', 'country_code' => 'RU'],\n            ['name' => 'Douar Echbanat', 'country_code' => 'MA'],\n            ['name' => 'Olekminsk', 'country_code' => 'RU'],\n            ['name' => 'Volda', 'country_code' => 'NO'],\n            ['name' => 'Doctor Phillips', 'country_code' => 'US'],\n            ['name' => 'East Greenwich', 'country_code' => 'US'],\n            ['name' => 'Warren', 'country_code' => 'US'],\n            ['name' => 'Costesti', 'country_code' => 'RO'],\n            ['name' => 'Beneditinos', 'country_code' => 'BR'],\n            ['name' => 'Karkamis', 'country_code' => 'TR'],\n            ['name' => 'Wittenbach', 'country_code' => 'CH'],\n            ['name' => 'Exeter', 'country_code' => 'US'],\n            ['name' => 'Martin', 'country_code' => 'US'],\n            ['name' => 'Pitkyaranta', 'country_code' => 'RU'],\n            ['name' => 'Gossau', 'country_code' => 'CH'],\n            ['name' => 'Gifford', 'country_code' => 'US'],\n            ['name' => 'Georgian Bluffs', 'country_code' => 'CA'],\n            ['name' => 'Wendeburg', 'country_code' => 'DE'],\n            ['name' => 'Bernalillo', 'country_code' => 'US'],\n            ['name' => 'Oelsnitz', 'country_code' => 'DE'],\n            ['name' => 'Kangning', 'country_code' => 'CN'],\n            ['name' => 'Olevsk', 'country_code' => 'UA'],\n            ['name' => 'Jaltocan', 'country_code' => 'MX'],\n            ['name' => 'Great Missenden', 'country_code' => 'GB'],\n            ['name' => 'Minobu', 'country_code' => 'JP'],\n            ['name' => 'Aradeo', 'country_code' => 'IT'],\n            ['name' => 'Pine Castle', 'country_code' => 'US'],\n            ['name' => 'Mios', 'country_code' => 'FR'],\n            ['name' => 'Point Pleasant', 'country_code' => 'US'],\n            ['name' => 'La Farlede', 'country_code' => 'FR'],\n            ['name' => 'Tomblaine', 'country_code' => 'FR'],\n            ['name' => 'Cape Canaveral', 'country_code' => 'US'],\n            ['name' => 'Bogen', 'country_code' => 'DE'],\n            ['name' => 'Sweetwater', 'country_code' => 'US'],\n            ['name' => 'Brikcha', 'country_code' => 'MA'],\n            ['name' => 'Neuenhof', 'country_code' => 'CH'],\n            ['name' => 'Fairview Shores', 'country_code' => 'US'],\n            ['name' => 'Worth', 'country_code' => 'US'],\n            ['name' => 'Pulpi', 'country_code' => 'ES'],\n            ['name' => 'Rio Acima', 'country_code' => 'BR'],\n            ['name' => 'Portage', 'country_code' => 'US'],\n            ['name' => 'Shenjiaba', 'country_code' => 'CN'],\n            ['name' => 'Tanaina', 'country_code' => 'US'],\n            ['name' => 'Vigasio', 'country_code' => 'IT'],\n            ['name' => 'Salanso', 'country_code' => 'BF'],\n            ['name' => 'Arvorezinha', 'country_code' => 'BR'],\n            ['name' => 'Fort William', 'country_code' => 'GB'],\n            ['name' => 'Sudogda', 'country_code' => 'RU'],\n            ['name' => 'Haikoucun', 'country_code' => 'CN'],\n            ['name' => 'Santiago', 'country_code' => 'PE'],\n            ['name' => 'Bedford Heights', 'country_code' => 'US'],\n            ['name' => 'Bujari', 'country_code' => 'BR'],\n            ['name' => 'Altenberge', 'country_code' => 'DE'],\n            ['name' => 'Candas', 'country_code' => 'ES'],\n            ['name' => 'Zuyevka', 'country_code' => 'RU'],\n            ['name' => 'Hull', 'country_code' => 'US'],\n            ['name' => 'Nanfang', 'country_code' => 'CN'],\n            ['name' => 'Miribel', 'country_code' => 'FR'],\n            ['name' => 'Sylva', 'country_code' => 'RU'],\n            ['name' => 'Bogue', 'country_code' => 'MR'],\n            ['name' => 'Morlenbach', 'country_code' => 'DE'],\n            ['name' => 'Phon Charoen', 'country_code' => 'TH'],\n            ['name' => 'Oulad Slim', 'country_code' => 'MA'],\n            ['name' => 'Fox Lake', 'country_code' => 'US'],\n            ['name' => 'Cittanova', 'country_code' => 'IT'],\n            ['name' => 'Pembroke Dock', 'country_code' => 'GB'],\n            ['name' => 'Sovata', 'country_code' => 'RO'],\n            ['name' => 'Ivankiv', 'country_code' => 'UA'],\n            ['name' => 'Cristino Castro', 'country_code' => 'BR'],\n            ['name' => 'Oak Hills', 'country_code' => 'US'],\n            ['name' => 'San Juan La Laguna', 'country_code' => 'GT'],\n            ['name' => 'Millstone', 'country_code' => 'US'],\n            ['name' => 'Tiddas', 'country_code' => 'MA'],\n            ['name' => 'Linthicum', 'country_code' => 'US'],\n            ['name' => 'Schwaig', 'country_code' => 'DE'],\n            ['name' => 'Fountain Inn', 'country_code' => 'US'],\n            ['name' => 'Cabanaquinta', 'country_code' => 'ES'],\n            ['name' => 'New Baltimore', 'country_code' => 'US'],\n            ['name' => 'Grossburgwedel', 'country_code' => 'DE'],\n            ['name' => 'Parana', 'country_code' => 'BR'],\n            ['name' => 'Wellington', 'country_code' => 'US'],\n            ['name' => 'Beni Oulid', 'country_code' => 'MA'],\n            ['name' => 'Awfouss', 'country_code' => 'MA'],\n            ['name' => 'Quinto di Treviso', 'country_code' => 'IT'],\n            ['name' => 'Nevelsk', 'country_code' => 'RU'],\n            ['name' => 'Kendallville', 'country_code' => 'US'],\n            ['name' => 'Krasnoilsk', 'country_code' => 'UA'],\n            ['name' => 'Bomporto', 'country_code' => 'IT'],\n            ['name' => 'Coroneo', 'country_code' => 'MX'],\n            ['name' => 'Raymond', 'country_code' => 'US'],\n            ['name' => 'Molango', 'country_code' => 'MX'],\n            ['name' => 'Panaon', 'country_code' => 'PH'],\n            ['name' => 'Sumner', 'country_code' => 'US'],\n            ['name' => 'Volpago del Montello', 'country_code' => 'IT'],\n            ['name' => 'Felling', 'country_code' => 'GB'],\n            ['name' => 'Hughenden', 'country_code' => 'GB'],\n            ['name' => 'Tangermunde', 'country_code' => 'DE'],\n            ['name' => 'Limoux', 'country_code' => 'FR'],\n            ['name' => 'Roseira', 'country_code' => 'BR'],\n            ['name' => 'Ban Klang', 'country_code' => 'TH'],\n            ['name' => 'Werlte', 'country_code' => 'DE'],\n            ['name' => 'Corral de Bustos', 'country_code' => 'AR'],\n            ['name' => 'Pine Hill', 'country_code' => 'US'],\n            ['name' => 'Planura', 'country_code' => 'BR'],\n            ['name' => 'Rawdon', 'country_code' => 'CA'],\n            ['name' => 'Riachuelo', 'country_code' => 'BR'],\n            ['name' => 'Forestville', 'country_code' => 'US'],\n            ['name' => 'Tha Muang', 'country_code' => 'TH'],\n            ['name' => 'Anrochte', 'country_code' => 'DE'],\n            ['name' => 'Hudson', 'country_code' => 'US'],\n            ['name' => 'Shasta Lake', 'country_code' => 'US'],\n            ['name' => 'Kragero', 'country_code' => 'NO'],\n            ['name' => 'Bordighera', 'country_code' => 'IT'],\n            ['name' => 'Carmen', 'country_code' => 'PH'],\n            ['name' => 'Hamilton', 'country_code' => 'AU'],\n            ['name' => 'Lehigh', 'country_code' => 'US'],\n            ['name' => 'Campbellton', 'country_code' => 'CA'],\n            ['name' => 'Appleton', 'country_code' => 'GB'],\n            ['name' => 'Dayton', 'country_code' => 'US'],\n            ['name' => 'Belaya Kholunitsa', 'country_code' => 'RU'],\n            ['name' => 'Rodeo', 'country_code' => 'US'],\n            ['name' => 'View Royal', 'country_code' => 'CA'],\n            ['name' => 'Luanco', 'country_code' => 'ES'],\n            ['name' => 'Te Puke', 'country_code' => 'NZ'],\n            ['name' => 'Worcester', 'country_code' => 'US'],\n            ['name' => 'Pirai do Norte', 'country_code' => 'BR'],\n            ['name' => 'West Point', 'country_code' => 'US'],\n            ['name' => 'Vidor', 'country_code' => 'US'],\n            ['name' => 'Leones', 'country_code' => 'AR'],\n            ['name' => 'Tutrakan', 'country_code' => 'BG'],\n            ['name' => 'Weil im Schonbuch', 'country_code' => 'DE'],\n            ['name' => 'Terralba', 'country_code' => 'IT'],\n            ['name' => 'Jaguaribara', 'country_code' => 'BR'],\n            ['name' => 'Cajobi', 'country_code' => 'BR'],\n            ['name' => 'Pasewalk', 'country_code' => 'DE'],\n            ['name' => 'Ianca', 'country_code' => 'RO'],\n            ['name' => 'Jaqma', 'country_code' => 'MA'],\n            ['name' => 'New Port Richey East', 'country_code' => 'US'],\n            ['name' => 'Bellefontaine Neighbors', 'country_code' => 'US'],\n            ['name' => 'Portet-sur-Garonne', 'country_code' => 'FR'],\n            ['name' => 'Salinas', 'country_code' => 'UY'],\n            ['name' => 'Dar El Kebdani', 'country_code' => 'MA'],\n            ['name' => 'Vermilion', 'country_code' => 'US'],\n            ['name' => 'Calatrava', 'country_code' => 'PH'],\n            ['name' => 'Lyngdal', 'country_code' => 'NO'],\n            ['name' => 'South Union', 'country_code' => 'US'],\n            ['name' => 'Itamogi', 'country_code' => 'BR'],\n            ['name' => 'Puerto Quijarro', 'country_code' => 'BO'],\n            ['name' => 'Morsbach', 'country_code' => 'DE'],\n            ['name' => 'El Realejo', 'country_code' => 'NI'],\n            ['name' => 'Quetigny', 'country_code' => 'FR'],\n            ['name' => 'Dolhasca', 'country_code' => 'RO'],\n            ['name' => 'Lipova', 'country_code' => 'RO'],\n            ['name' => 'Catunda', 'country_code' => 'BR'],\n            ['name' => 'Harfleur', 'country_code' => 'FR'],\n            ['name' => 'Vaprio d Adda', 'country_code' => 'IT'],\n            ['name' => 'Roche-la-Moliere', 'country_code' => 'FR'],\n            ['name' => 'Kapuvar', 'country_code' => 'HU'],\n            ['name' => 'Bonham', 'country_code' => 'US'],\n            ['name' => 'Kapyl ', 'country_code' => 'BY'],\n            ['name' => 'Bad Frankenhausen', 'country_code' => 'DE'],\n            ['name' => 'Bowen', 'country_code' => 'AU'],\n            ['name' => 'Frydlant nad Ostravici', 'country_code' => 'CZ'],\n            ['name' => 'Kennett', 'country_code' => 'US'],\n            ['name' => 'Tokol', 'country_code' => 'HU'],\n            ['name' => 'Verucchio', 'country_code' => 'IT'],\n            ['name' => 'Heves', 'country_code' => 'HU'],\n            ['name' => 'Prestonpans', 'country_code' => 'GB'],\n            ['name' => 'Verkhnodniprovsk', 'country_code' => 'UA'],\n            ['name' => 'Pilar', 'country_code' => 'PH'],\n            ['name' => 'Qiushanxiang', 'country_code' => 'CN'],\n            ['name' => 'Troy', 'country_code' => 'US'],\n            ['name' => 'Fort Bragg', 'country_code' => 'US'],\n            ['name' => 'Madridejos', 'country_code' => 'ES'],\n            ['name' => 'Koflach', 'country_code' => 'AT'],\n            ['name' => 'Biot', 'country_code' => 'FR'],\n            ['name' => 'Steinau an der Strasse', 'country_code' => 'DE'],\n            ['name' => 'Klipphausen', 'country_code' => 'DE'],\n            ['name' => 'Borgosatollo', 'country_code' => 'IT'],\n            ['name' => 'Lyons', 'country_code' => 'US'],\n            ['name' => 'Sylva', 'country_code' => 'RU'],\n            ['name' => 'Corumba de Goias', 'country_code' => 'BR'],\n            ['name' => 'Amurrio', 'country_code' => 'ES'],\n            ['name' => 'Werneck', 'country_code' => 'DE'],\n            ['name' => 'Maria Pinto', 'country_code' => 'CL'],\n            ['name' => 'Kut Chap', 'country_code' => 'TH'],\n            ['name' => 'Neuenstadt am Kocher', 'country_code' => 'DE'],\n            ['name' => 'Bounaamane', 'country_code' => 'MA'],\n            ['name' => 'Ardino', 'country_code' => 'BG'],\n            ['name' => 'Urucania', 'country_code' => 'BR'],\n            ['name' => 'Wells', 'country_code' => 'US'],\n            ['name' => 'Bernay', 'country_code' => 'FR'],\n            ['name' => 'Miami Shores', 'country_code' => 'US'],\n            ['name' => 'Letychiv', 'country_code' => 'UA'],\n            ['name' => 'Shamva', 'country_code' => 'ZW'],\n            ['name' => 'Murfatlar', 'country_code' => 'RO'],\n            ['name' => 'Munchberg', 'country_code' => 'DE'],\n            ['name' => 'Vaiano', 'country_code' => 'IT'],\n            ['name' => 'Bethanie', 'country_code' => 'NA'],\n            ['name' => 'Levanger', 'country_code' => 'NO'],\n            ['name' => 'Kenzingen', 'country_code' => 'DE'],\n            ['name' => 'San Felice Circeo', 'country_code' => 'IT'],\n            ['name' => 'Forde', 'country_code' => 'NO'],\n            ['name' => 'Kirkel', 'country_code' => 'DE'],\n            ['name' => 'Capriolo', 'country_code' => 'IT'],\n            ['name' => 'Essey-les-Nancy', 'country_code' => 'FR'],\n            ['name' => 'Taksimo', 'country_code' => 'RU'],\n            ['name' => 'Buenopolis', 'country_code' => 'BR'],\n            ['name' => 'Fortuna', 'country_code' => 'ES'],\n            ['name' => 'Korolevo', 'country_code' => 'UA'],\n            ['name' => 'Aydarken', 'country_code' => 'KG'],\n            ['name' => 'Nagyatad', 'country_code' => 'HU'],\n            ['name' => 'Bela Vista de Minas', 'country_code' => 'BR'],\n            ['name' => 'Aulendorf', 'country_code' => 'DE'],\n            ['name' => 'Columbia', 'country_code' => 'US'],\n            ['name' => 'Oostzaan', 'country_code' => 'NL'],\n            ['name' => 'Lukovit', 'country_code' => 'BG'],\n            ['name' => 'Payerne', 'country_code' => 'CH'],\n            ['name' => 'Vignate', 'country_code' => 'IT'],\n            ['name' => 'Beverly Hills', 'country_code' => 'US'],\n            ['name' => 'West Hanover', 'country_code' => 'US'],\n            ['name' => 'Conceicao da Aparecida', 'country_code' => 'BR'],\n            ['name' => 'Sobral de Monte Agraco', 'country_code' => 'PT'],\n            ['name' => 'Goito', 'country_code' => 'IT'],\n            ['name' => 'Konigsbach-Stein', 'country_code' => 'DE'],\n            ['name' => 'Lexington', 'country_code' => 'US'],\n            ['name' => 'Neuenhaus', 'country_code' => 'DE'],\n            ['name' => 'Teocuitatlan de Corona', 'country_code' => 'MX'],\n            ['name' => 'Richmond Heights', 'country_code' => 'US'],\n            ['name' => 'Buzdyak', 'country_code' => 'RU'],\n            ['name' => 'Ban Bong Tai', 'country_code' => 'TH'],\n            ['name' => 'Harrison', 'country_code' => 'US'],\n            ['name' => 'Csorna', 'country_code' => 'HU'],\n            ['name' => 'Mariluz', 'country_code' => 'BR'],\n            ['name' => 'Marpingen', 'country_code' => 'DE'],\n            ['name' => 'Sedona', 'country_code' => 'US'],\n            ['name' => 'San Vicente de Castellet', 'country_code' => 'ES'],\n            ['name' => 'Ksar Lmajaz', 'country_code' => 'MA'],\n            ['name' => 'Ben Nasseur', 'country_code' => 'DZ'],\n            ['name' => 'Biandanshan', 'country_code' => 'CN'],\n            ['name' => 'Ninheira', 'country_code' => 'BR'],\n            ['name' => 'Santa Teresa', 'country_code' => 'BR'],\n            ['name' => 'Lenguazaque', 'country_code' => 'CO'],\n            ['name' => 'Santa Maria Madalena', 'country_code' => 'BR'],\n            ['name' => 'Ottendorf-Okrilla', 'country_code' => 'DE'],\n            ['name' => 'Summerville', 'country_code' => 'US'],\n            ['name' => 'Volterra', 'country_code' => 'IT'],\n            ['name' => 'Crosia', 'country_code' => 'IT'],\n            ['name' => 'Januario Cicco', 'country_code' => 'BR'],\n            ['name' => 'Saint-Gregoire', 'country_code' => 'FR'],\n            ['name' => 'Bieber', 'country_code' => 'DE'],\n            ['name' => 'Francisco Badaro', 'country_code' => 'BR'],\n            ['name' => 'Dettingen an der Erms', 'country_code' => 'DE'],\n            ['name' => 'Vytegra', 'country_code' => 'RU'],\n            ['name' => 'Chavinda', 'country_code' => 'MX'],\n            ['name' => 'Welkenraedt', 'country_code' => 'BE'],\n            ['name' => 'Union City', 'country_code' => 'US'],\n            ['name' => 'Aghbalou n Kerdous', 'country_code' => 'MA'],\n            ['name' => 'Vernon', 'country_code' => 'US'],\n            ['name' => 'South Huntington', 'country_code' => 'US'],\n            ['name' => 'Carmaux', 'country_code' => 'FR'],\n            ['name' => 'Fort Madison', 'country_code' => 'US'],\n            ['name' => 'Aich', 'country_code' => 'DE'],\n            ['name' => 'Nor Hachn', 'country_code' => 'AM'],\n            ['name' => 'Santa Cruz do Arari', 'country_code' => 'BR'],\n            ['name' => 'Campos Lindos', 'country_code' => 'BR'],\n            ['name' => 'Tyukalinsk', 'country_code' => 'RU'],\n            ['name' => 'Banska Stiavnica', 'country_code' => 'SK'],\n            ['name' => 'Frouzins', 'country_code' => 'FR'],\n            ['name' => 'Montemarciano', 'country_code' => 'IT'],\n            ['name' => 'Coldstream', 'country_code' => 'CA'],\n            ['name' => 'Mandello del Lario', 'country_code' => 'IT'],\n            ['name' => 'Natonin', 'country_code' => 'PH'],\n            ['name' => 'Bowdon', 'country_code' => 'GB'],\n            ['name' => 'Nanticoke', 'country_code' => 'US'],\n            ['name' => 'Bad Ems', 'country_code' => 'DE'],\n            ['name' => 'Santa Terezinha de Goias', 'country_code' => 'BR'],\n            ['name' => 'Blairgowrie', 'country_code' => 'GB'],\n            ['name' => 'Cermenate', 'country_code' => 'IT'],\n            ['name' => 'Chester', 'country_code' => 'CA'],\n            ['name' => 'Sgamna', 'country_code' => 'MA'],\n            ['name' => 'Argayash', 'country_code' => 'RU'],\n            ['name' => 'Brumath', 'country_code' => 'FR'],\n            ['name' => 'Teteven', 'country_code' => 'BG'],\n            ['name' => 'Santo Stefano di Magra', 'country_code' => 'IT'],\n            ['name' => 'Hillsdale', 'country_code' => 'US'],\n            ['name' => 'Queens', 'country_code' => 'CA'],\n            ['name' => 'Kambarka', 'country_code' => 'RU'],\n            ['name' => 'Bilenke', 'country_code' => 'UA'],\n            ['name' => 'Comstock Park', 'country_code' => 'US'],\n            ['name' => 'Burgau', 'country_code' => 'DE'],\n            ['name' => 'El Alamo', 'country_code' => 'ES'],\n            ['name' => 'Dores de Campos', 'country_code' => 'BR'],\n            ['name' => 'Fredonia', 'country_code' => 'US'],\n            ['name' => 'Rayen', 'country_code' => 'IR'],\n            ['name' => 'Petrolina de Goias', 'country_code' => 'BR'],\n            ['name' => 'Novi di Modena', 'country_code' => 'IT'],\n            ['name' => 'Soyaux', 'country_code' => 'FR'],\n            ['name' => 'Sermoneta', 'country_code' => 'IT'],\n            ['name' => 'Rouvroy', 'country_code' => 'FR'],\n            ['name' => 'Helena-West Helena', 'country_code' => 'US'],\n            ['name' => 'Chatham', 'country_code' => 'US'],\n            ['name' => 'Park Forest Village', 'country_code' => 'US'],\n            ['name' => 'Nehoiu', 'country_code' => 'RO'],\n            ['name' => 'Forest Acres', 'country_code' => 'US'],\n            ['name' => 'Oakengates', 'country_code' => 'GB'],\n            ['name' => 'Coal', 'country_code' => 'US'],\n            ['name' => 'Tha Mai', 'country_code' => 'TH'],\n            ['name' => 'Reading', 'country_code' => 'US'],\n            ['name' => 'Zaozernyy', 'country_code' => 'RU'],\n            ['name' => 'Sixaola', 'country_code' => 'CR'],\n            ['name' => 'Groairas', 'country_code' => 'BR'],\n            ['name' => 'Hecelchakan', 'country_code' => 'MX'],\n            ['name' => 'Morrovalle', 'country_code' => 'IT'],\n            ['name' => 'London Colney', 'country_code' => 'GB'],\n            ['name' => 'Santa Clara La Laguna', 'country_code' => 'GT'],\n            ['name' => 'Vashon', 'country_code' => 'US'],\n            ['name' => 'Grand-Couronne', 'country_code' => 'FR'],\n            ['name' => 'Nieuw-Lekkerland', 'country_code' => 'NL'],\n            ['name' => 'Canton', 'country_code' => 'US'],\n            ['name' => 'Alvorada do Sul', 'country_code' => 'BR'],\n            ['name' => 'Coroaci', 'country_code' => 'BR'],\n            ['name' => 'Weston', 'country_code' => 'US'],\n            ['name' => 'San Jose de Feliciano', 'country_code' => 'AR'],\n            ['name' => 'Fiumefreddo di Sicilia', 'country_code' => 'IT'],\n            ['name' => 'Miradouro', 'country_code' => 'BR'],\n            ['name' => 'Kilkunda', 'country_code' => 'IN'],\n            ['name' => 'Augustdorf', 'country_code' => 'DE'],\n            ['name' => 'Sant Egidio alla Vibrata', 'country_code' => 'IT'],\n            ['name' => 'Corfe Mullen', 'country_code' => 'GB'],\n            ['name' => 'Pliezhausen', 'country_code' => 'DE'],\n            ['name' => 'Ertil', 'country_code' => 'RU'],\n            ['name' => 'Chivhu', 'country_code' => 'ZW'],\n            ['name' => 'Arden Hills', 'country_code' => 'US'],\n            ['name' => 'Sidi Rahhal', 'country_code' => 'MA'],\n            ['name' => 'Lillers', 'country_code' => 'FR'],\n            ['name' => 'Pine Ridge', 'country_code' => 'US'],\n            ['name' => 'Selkirk', 'country_code' => 'CA'],\n            ['name' => 'Saint-Felicien', 'country_code' => 'CA'],\n            ['name' => 'Haelen', 'country_code' => 'NL'],\n            ['name' => 'Marano Vicentino', 'country_code' => 'IT'],\n            ['name' => 'Medulla', 'country_code' => 'US'],\n            ['name' => 'Sao Francisco', 'country_code' => 'BR'],\n            ['name' => 'Lanskroun', 'country_code' => 'CZ'],\n            ['name' => 'Slatina', 'country_code' => 'HR'],\n            ['name' => 'Independence', 'country_code' => 'US'],\n            ['name' => 'Liphook', 'country_code' => 'GB'],\n            ['name' => 'Rubim', 'country_code' => 'BR'],\n            ['name' => 'Doraville', 'country_code' => 'US'],\n            ['name' => 'Oster', 'country_code' => 'UA'],\n            ['name' => 'Rum', 'country_code' => 'AT'],\n            ['name' => 'Busca', 'country_code' => 'IT'],\n            ['name' => 'Steinen', 'country_code' => 'DE'],\n            ['name' => 'Caldera', 'country_code' => 'CL'],\n            ['name' => 'Hawkesbury', 'country_code' => 'CA'],\n            ['name' => 'Soverato Marina', 'country_code' => 'IT'],\n            ['name' => 'La tamna', 'country_code' => 'MA'],\n            ['name' => 'Sao Joao d Alianca', 'country_code' => 'BR'],\n            ['name' => 'Moimenta da Beira', 'country_code' => 'PT'],\n            ['name' => 'Santa Isabel Cholula', 'country_code' => 'MX'],\n            ['name' => 'Birkenau', 'country_code' => 'DE'],\n            ['name' => 'Coronel Freitas', 'country_code' => 'BR'],\n            ['name' => 'Nordkirchen', 'country_code' => 'DE'],\n            ['name' => 'Plattekill', 'country_code' => 'US'],\n            ['name' => 'Lonquimay', 'country_code' => 'CL'],\n            ['name' => 'Meuselwitz', 'country_code' => 'DE'],\n            ['name' => 'Cypress Gardens', 'country_code' => 'US'],\n            ['name' => 'Itape', 'country_code' => 'BR'],\n            ['name' => 'Taufkirchen', 'country_code' => 'DE'],\n            ['name' => 'Eumseong', 'country_code' => 'KR'],\n            ['name' => 'Lugovoy', 'country_code' => 'KZ'],\n            ['name' => 'Pebble Creek', 'country_code' => 'US'],\n            ['name' => 'Martinopole', 'country_code' => 'BR'],\n            ['name' => 'Mucuge', 'country_code' => 'BR'],\n            ['name' => 'Melvindale', 'country_code' => 'US'],\n            ['name' => 'Fanzhao', 'country_code' => 'CN'],\n            ['name' => 'Wildberg', 'country_code' => 'DE'],\n            ['name' => 'Elmas', 'country_code' => 'IT'],\n            ['name' => 'Sauk Village', 'country_code' => 'US'],\n            ['name' => 'Bisignano', 'country_code' => 'IT'],\n            ['name' => 'Ronda Alta', 'country_code' => 'BR'],\n            ['name' => 'Marawi', 'country_code' => 'SD'],\n            ['name' => 'Pescaria Brava', 'country_code' => 'BR'],\n            ['name' => 'Clearfield', 'country_code' => 'US'],\n            ['name' => 'Andergrove', 'country_code' => 'AU'],\n            ['name' => 'Radyvyliv', 'country_code' => 'UA'],\n            ['name' => 'Pella', 'country_code' => 'US'],\n            ['name' => 'Charala', 'country_code' => 'CO'],\n            ['name' => 'Luza', 'country_code' => 'RU'],\n            ['name' => 'Terra Nova', 'country_code' => 'BR'],\n            ['name' => 'Calasparra', 'country_code' => 'ES'],\n            ['name' => 'Tarashcha', 'country_code' => 'UA'],\n            ['name' => 'Cuorgne', 'country_code' => 'IT'],\n            ['name' => 'Oppeano', 'country_code' => 'IT'],\n            ['name' => 'Vetraz-Monthoux', 'country_code' => 'FR'],\n            ['name' => 'Wingles', 'country_code' => 'FR'],\n            ['name' => 'Sedico', 'country_code' => 'IT'],\n            ['name' => 'Blumberg', 'country_code' => 'DE'],\n            ['name' => 'Bad Orb', 'country_code' => 'DE'],\n            ['name' => 'Pires Ferreira', 'country_code' => 'BR'],\n            ['name' => 'Sparta', 'country_code' => 'US'],\n            ['name' => 'Flamanzi', 'country_code' => 'RO'],\n            ['name' => 'Box Elder', 'country_code' => 'US'],\n            ['name' => 'Middle Island', 'country_code' => 'US'],\n            ['name' => 'Friedeburg', 'country_code' => 'DE'],\n            ['name' => 'Roberval', 'country_code' => 'CA'],\n            ['name' => 'Bad Wildbad', 'country_code' => 'DE'],\n            ['name' => 'Borzna', 'country_code' => 'UA'],\n            ['name' => 'Brandizzo', 'country_code' => 'IT'],\n            ['name' => 'Jemaat Oulad Mhamed', 'country_code' => 'MA'],\n            ['name' => 'Shyroke', 'country_code' => 'UA'],\n            ['name' => 'Sniatyn', 'country_code' => 'UA'],\n            ['name' => 'Sainte-Agathe-des-Monts', 'country_code' => 'CA'],\n            ['name' => 'Qovlar', 'country_code' => 'AZ'],\n            ['name' => 'Pithiviers', 'country_code' => 'FR'],\n            ['name' => 'Steinfeld', 'country_code' => 'DE'],\n            ['name' => 'Emsburen', 'country_code' => 'DE'],\n            ['name' => 'Catanduvas', 'country_code' => 'BR'],\n            ['name' => 'Teplodar', 'country_code' => 'UA'],\n            ['name' => 'Kenafif', 'country_code' => 'MA'],\n            ['name' => 'Mstsislaw', 'country_code' => 'BY'],\n            ['name' => 'Barrington', 'country_code' => 'US'],\n            ['name' => 'Launaguet', 'country_code' => 'FR'],\n            ['name' => 'Oggiono', 'country_code' => 'IT'],\n            ['name' => 'North Dumfries', 'country_code' => 'CA'],\n            ['name' => 'Carqueiranne', 'country_code' => 'FR'],\n            ['name' => 'Medina', 'country_code' => 'CO'],\n            ['name' => 'Tutzing', 'country_code' => 'DE'],\n            ['name' => 'Houthulst', 'country_code' => 'BE'],\n            ['name' => 'Rehburg-Loccum', 'country_code' => 'DE'],\n            ['name' => 'Pechea', 'country_code' => 'RO'],\n            ['name' => 'Csomor', 'country_code' => 'HU'],\n            ['name' => 'Governador Archer', 'country_code' => 'BR'],\n            ['name' => 'Ainring', 'country_code' => 'DE'],\n            ['name' => 'Fort Lupton', 'country_code' => 'US'],\n            ['name' => 'Nong Ki', 'country_code' => 'TH'],\n            ['name' => 'Simbach am Inn', 'country_code' => 'DE'],\n            ['name' => 'Rideau Lakes', 'country_code' => 'CA'],\n            ['name' => 'Luis Gomes', 'country_code' => 'BR'],\n            ['name' => 'Tolmezzo', 'country_code' => 'IT'],\n            ['name' => 'Asola', 'country_code' => 'IT'],\n            ['name' => 'Victoria', 'country_code' => 'US'],\n            ['name' => 'Alesd', 'country_code' => 'RO'],\n            ['name' => 'Goytapa', 'country_code' => 'AZ'],\n            ['name' => 'Wahlstedt', 'country_code' => 'DE'],\n            ['name' => 'Niebull', 'country_code' => 'DE'],\n            ['name' => 'Castellamonte', 'country_code' => 'IT'],\n            ['name' => 'Za roura', 'country_code' => 'MA'],\n            ['name' => 'Gunbarrel', 'country_code' => 'US'],\n            ['name' => 'Bluffton', 'country_code' => 'US'],\n            ['name' => 'Lizzano', 'country_code' => 'IT'],\n            ['name' => 'Kushijima', 'country_code' => 'JP'],\n            ['name' => 'Kirchzarten', 'country_code' => 'DE'],\n            ['name' => 'Sechelt', 'country_code' => 'CA'],\n            ['name' => 'Cetraro', 'country_code' => 'IT'],\n            ['name' => 'Santa Maria de Palautordera', 'country_code' => 'ES'],\n            ['name' => 'Prelouc', 'country_code' => 'CZ'],\n            ['name' => 'Waverly', 'country_code' => 'US'],\n            ['name' => 'Pullach im Isartal', 'country_code' => 'DE'],\n            ['name' => 'Altusried', 'country_code' => 'DE'],\n            ['name' => 'Aldenham', 'country_code' => 'GB'],\n            ['name' => 'Tissaf', 'country_code' => 'MA'],\n            ['name' => 'Molsheim', 'country_code' => 'FR'],\n            ['name' => 'Jocoro', 'country_code' => 'SV'],\n            ['name' => 'Looc', 'country_code' => 'PH'],\n            ['name' => 'Mikhaylov', 'country_code' => 'RU'],\n            ['name' => 'Skidal ', 'country_code' => 'BY'],\n            ['name' => 'Beccles', 'country_code' => 'GB'],\n            ['name' => 'Souama', 'country_code' => 'DZ'],\n            ['name' => 'Cingoli', 'country_code' => 'IT'],\n            ['name' => 'Takahama', 'country_code' => 'JP'],\n            ['name' => 'Alto Piquiri', 'country_code' => 'BR'],\n            ['name' => 'Fife', 'country_code' => 'US'],\n            ['name' => 'Lehman', 'country_code' => 'US'],\n            ['name' => 'Phak Hai', 'country_code' => 'TH'],\n            ['name' => 'Sinimbu', 'country_code' => 'BR'],\n            ['name' => 'Caatiba', 'country_code' => 'BR'],\n            ['name' => 'Almoloya del Rio', 'country_code' => 'MX'],\n            ['name' => 'Le Passage', 'country_code' => 'FR'],\n            ['name' => 'Ouistreham', 'country_code' => 'FR'],\n            ['name' => 'Kokoszki', 'country_code' => 'PL'],\n            ['name' => 'Kawara', 'country_code' => 'JP'],\n            ['name' => 'Assendelft', 'country_code' => 'NL'],\n            ['name' => 'Kampong Tunah Jambu', 'country_code' => 'BN'],\n            ['name' => 'Sofiivka', 'country_code' => 'UA'],\n            ['name' => 'Covasna', 'country_code' => 'RO'],\n            ['name' => 'Somers Point', 'country_code' => 'US'],\n            ['name' => 'Balangkayan', 'country_code' => 'PH'],\n            ['name' => 'Novo Horizonte', 'country_code' => 'BR'],\n            ['name' => 'Woodmere', 'country_code' => 'US'],\n            ['name' => 'Naters', 'country_code' => 'CH'],\n            ['name' => 'Granada', 'country_code' => 'CO'],\n            ['name' => 'Alguazas', 'country_code' => 'ES'],\n            ['name' => 'Mazamet', 'country_code' => 'FR'],\n            ['name' => 'Seye', 'country_code' => 'MX'],\n            ['name' => 'Pernes-les-Fontaines', 'country_code' => 'FR'],\n            ['name' => 'Nove Mesto na Morave', 'country_code' => 'CZ'],\n            ['name' => 'Yermolino', 'country_code' => 'RU'],\n            ['name' => 'Moree', 'country_code' => 'AU'],\n            ['name' => 'Ban Bu Sung', 'country_code' => 'TH'],\n            ['name' => 'Cachoeira dos Indios', 'country_code' => 'BR'],\n            ['name' => 'Willstatt', 'country_code' => 'DE'],\n            ['name' => 'Racconigi', 'country_code' => 'IT'],\n            ['name' => 'Byarozawka', 'country_code' => 'BY'],\n            ['name' => 'Pogliano Milanese', 'country_code' => 'IT'],\n            ['name' => 'Laakirchen', 'country_code' => 'AT'],\n            ['name' => 'Canapolis', 'country_code' => 'BR'],\n            ['name' => 'Calcoene', 'country_code' => 'BR'],\n            ['name' => 'Bucine', 'country_code' => 'IT'],\n            ['name' => 'Magstadt', 'country_code' => 'DE'],\n            ['name' => 'Tocina', 'country_code' => 'ES'],\n            ['name' => 'Caem', 'country_code' => 'BR'],\n            ['name' => 'Sung Noen', 'country_code' => 'TH'],\n            ['name' => 'Gages Lake', 'country_code' => 'US'],\n            ['name' => 'Embrach', 'country_code' => 'CH'],\n            ['name' => 'Haxby', 'country_code' => 'GB'],\n            ['name' => 'Asbury Lake', 'country_code' => 'US'],\n            ['name' => 'Saint-Loubes', 'country_code' => 'FR'],\n            ['name' => 'Pike Road', 'country_code' => 'US'],\n            ['name' => 'Mainaschaff', 'country_code' => 'DE'],\n            ['name' => 'Mengibar', 'country_code' => 'ES'],\n            ['name' => 'Ozimek', 'country_code' => 'PL'],\n            ['name' => 'Opochka', 'country_code' => 'RU'],\n            ['name' => 'Jucurucu', 'country_code' => 'BR'],\n            ['name' => 'Havre', 'country_code' => 'US'],\n            ['name' => 'Gavirate', 'country_code' => 'IT'],\n            ['name' => 'Snohomish', 'country_code' => 'US'],\n            ['name' => 'Southampton', 'country_code' => 'US'],\n            ['name' => 'Heubach', 'country_code' => 'DE'],\n            ['name' => 'Singera', 'country_code' => 'MD'],\n            ['name' => 'La Mision', 'country_code' => 'MX'],\n            ['name' => 'Ipuiuna', 'country_code' => 'BR'],\n            ['name' => 'Salvatierra de Mino', 'country_code' => 'ES'],\n            ['name' => 'Welwyn', 'country_code' => 'GB'],\n            ['name' => 'Paranaiguana', 'country_code' => 'BR'],\n            ['name' => 'Yaotsu', 'country_code' => 'JP'],\n            ['name' => 'Choele Choel', 'country_code' => 'AR'],\n            ['name' => 'Argelato', 'country_code' => 'IT'],\n            ['name' => 'Ech Chaibat', 'country_code' => 'MA'],\n            ['name' => 'Wald', 'country_code' => 'CH'],\n            ['name' => 'Al Wafrah', 'country_code' => 'KW'],\n            ['name' => 'Bruino', 'country_code' => 'IT'],\n            ['name' => 'Waynesville', 'country_code' => 'US'],\n            ['name' => 'Glocester', 'country_code' => 'US'],\n            ['name' => 'Rinopolis', 'country_code' => 'BR'],\n            ['name' => 'Auterive', 'country_code' => 'FR'],\n            ['name' => 'Clarion', 'country_code' => 'US'],\n            ['name' => 'Kutztown', 'country_code' => 'US'],\n            ['name' => 'Zavolzhsk', 'country_code' => 'RU'],\n            ['name' => 'Iwashita', 'country_code' => 'JP'],\n            ['name' => 'Schotten', 'country_code' => 'DE'],\n            ['name' => 'Tolbazy', 'country_code' => 'RU'],\n            ['name' => 'Steinhaus', 'country_code' => 'CH'],\n            ['name' => 'Binefar', 'country_code' => 'ES'],\n            ['name' => 'Agua Branca', 'country_code' => 'BR'],\n            ['name' => 'Salaverry', 'country_code' => 'PE'],\n            ['name' => 'Sovicille', 'country_code' => 'IT'],\n            ['name' => 'Conway', 'country_code' => 'US'],\n            ['name' => 'Danville', 'country_code' => 'US'],\n            ['name' => 'Southport', 'country_code' => 'US'],\n            ['name' => 'Keuruu', 'country_code' => 'FI'],\n            ['name' => 'Vienna', 'country_code' => 'US'],\n            ['name' => 'Ipupiara', 'country_code' => 'BR'],\n            ['name' => 'Grosshansdorf', 'country_code' => 'DE'],\n            ['name' => 'Manville', 'country_code' => 'US'],\n            ['name' => 'Southborough', 'country_code' => 'US'],\n            ['name' => 'Bel Air', 'country_code' => 'US'],\n            ['name' => 'Warr Acres', 'country_code' => 'US'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Lysa nad Labem', 'country_code' => 'CZ'],\n            ['name' => 'Rudesheim am Rhein', 'country_code' => 'DE'],\n            ['name' => 'Judenburg', 'country_code' => 'AT'],\n            ['name' => 'Illora', 'country_code' => 'ES'],\n            ['name' => 'Foz', 'country_code' => 'ES'],\n            ['name' => 'Tipp City', 'country_code' => 'US'],\n            ['name' => 'Sulzbach', 'country_code' => 'DE'],\n            ['name' => 'Aruana', 'country_code' => 'BR'],\n            ['name' => 'Klotze', 'country_code' => 'DE'],\n            ['name' => 'Struthers', 'country_code' => 'US'],\n            ['name' => 'Lincoln Park', 'country_code' => 'US'],\n            ['name' => 'Chapel en le Frith', 'country_code' => 'GB'],\n            ['name' => 'North Glengarry', 'country_code' => 'CA'],\n            ['name' => 'Kurort Steinbach-Hallenberg', 'country_code' => 'DE'],\n            ['name' => 'Satipo', 'country_code' => 'PE'],\n            ['name' => 'Puentes de Garcia Rodriguez', 'country_code' => 'ES'],\n            ['name' => 'Zaggota', 'country_code' => 'MA'],\n            ['name' => 'Kamalasai', 'country_code' => 'TH'],\n            ['name' => 'Digora', 'country_code' => 'RU'],\n            ['name' => 'Waldwick', 'country_code' => 'US'],\n            ['name' => 'Gambolo', 'country_code' => 'IT'],\n            ['name' => 'Melendugno', 'country_code' => 'IT'],\n            ['name' => 'Conde-sur-l Escaut', 'country_code' => 'FR'],\n            ['name' => 'Shawano', 'country_code' => 'US'],\n            ['name' => 'Poienile de sub Munte', 'country_code' => 'RO'],\n            ['name' => 'Fairview', 'country_code' => 'US'],\n            ['name' => 'Red Bank', 'country_code' => 'US'],\n            ['name' => 'Mountsorrel', 'country_code' => 'GB'],\n            ['name' => 'Meldola', 'country_code' => 'IT'],\n            ['name' => 'Cabries', 'country_code' => 'FR'],\n            ['name' => 'Maiquinique', 'country_code' => 'BR'],\n            ['name' => 'Lescar', 'country_code' => 'FR'],\n            ['name' => 'College', 'country_code' => 'US'],\n            ['name' => 'Macomer', 'country_code' => 'IT'],\n            ['name' => 'Alfredo Wagner', 'country_code' => 'BR'],\n            ['name' => 'Krivodanovka', 'country_code' => 'RU'],\n            ['name' => 'Nova Veneza', 'country_code' => 'BR'],\n            ['name' => 'Oberhausen-Rheinhausen', 'country_code' => 'DE'],\n            ['name' => 'Nogliki', 'country_code' => 'RU'],\n            ['name' => 'Nideggen', 'country_code' => 'DE'],\n            ['name' => 'South Huron', 'country_code' => 'CA'],\n            ['name' => 'Dylym', 'country_code' => 'RU'],\n            ['name' => 'Mengen', 'country_code' => 'DE'],\n            ['name' => 'Brembate', 'country_code' => 'IT'],\n            ['name' => 'Progress', 'country_code' => 'US'],\n            ['name' => 'Marieville', 'country_code' => 'CA'],\n            ['name' => 'Wiang Sa', 'country_code' => 'TH'],\n            ['name' => 'Fairmount', 'country_code' => 'US'],\n            ['name' => 'Ontario', 'country_code' => 'US'],\n            ['name' => 'Pintuyan', 'country_code' => 'PH'],\n            ['name' => 'Mori', 'country_code' => 'IT'],\n            ['name' => 'Wolfersheim', 'country_code' => 'DE'],\n            ['name' => 'Bou Nouh', 'country_code' => 'DZ'],\n            ['name' => 'Rosstal', 'country_code' => 'DE'],\n            ['name' => 'Old Saybrook', 'country_code' => 'US'],\n            ['name' => ' Ain Leuh', 'country_code' => 'MA'],\n            ['name' => 'Kirkland', 'country_code' => 'US'],\n            ['name' => 'Arques', 'country_code' => 'FR'],\n            ['name' => 'Hongliuwan', 'country_code' => 'CN'],\n            ['name' => 'Cedar Hills', 'country_code' => 'US'],\n            ['name' => 'Hobart', 'country_code' => 'US'],\n            ['name' => 'Dallgow-Doberitz', 'country_code' => 'DE'],\n            ['name' => 'Le Mars', 'country_code' => 'US'],\n            ['name' => 'Radisani', 'country_code' => 'MK'],\n            ['name' => 'Caudete', 'country_code' => 'ES'],\n            ['name' => 'Crigglestone', 'country_code' => 'GB'],\n            ['name' => 'Acucena', 'country_code' => 'BR'],\n            ['name' => 'Cresson', 'country_code' => 'US'],\n            ['name' => 'Standish', 'country_code' => 'US'],\n            ['name' => 'Harrisonville', 'country_code' => 'US'],\n            ['name' => 'Makale', 'country_code' => 'ID'],\n            ['name' => 'Sannicandro di Bari', 'country_code' => 'IT'],\n            ['name' => 'Divonne-les-Bains', 'country_code' => 'FR'],\n            ['name' => 'Kummersbruck', 'country_code' => 'DE'],\n            ['name' => 'Asagi Ayibli', 'country_code' => 'AZ'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'San Agustin de las Juntas', 'country_code' => 'MX'],\n            ['name' => 'Kosching', 'country_code' => 'DE'],\n            ['name' => 'Brandon', 'country_code' => 'US'],\n            ['name' => 'Metsamor', 'country_code' => 'AM'],\n            ['name' => 'Littleton', 'country_code' => 'US'],\n            ['name' => 'Carneirinho', 'country_code' => 'BR'],\n            ['name' => 'Ikryanoye', 'country_code' => 'RU'],\n            ['name' => 'Tsuno', 'country_code' => 'JP'],\n            ['name' => 'Lenggries', 'country_code' => 'DE'],\n            ['name' => 'Aire-sur-la-Lys', 'country_code' => 'FR'],\n            ['name' => 'Taghbalt', 'country_code' => 'MA'],\n            ['name' => 'Milford', 'country_code' => 'US'],\n            ['name' => 'Tiana', 'country_code' => 'ES'],\n            ['name' => 'Tarnok', 'country_code' => 'HU'],\n            ['name' => 'Le Beausset', 'country_code' => 'FR'],\n            ['name' => 'Nolensville', 'country_code' => 'US'],\n            ['name' => 'Kosh-Agach', 'country_code' => 'RU'],\n            ['name' => 'Inverigo', 'country_code' => 'IT'],\n            ['name' => 'Ivancice', 'country_code' => 'CZ'],\n            ['name' => 'Kargopol', 'country_code' => 'RU'],\n            ['name' => 'San Pancrazio Salentino', 'country_code' => 'IT'],\n            ['name' => 'Figeac', 'country_code' => 'FR'],\n            ['name' => 'Garlasco', 'country_code' => 'IT'],\n            ['name' => 'Rodinghausen', 'country_code' => 'DE'],\n            ['name' => 'Isabela', 'country_code' => 'PR'],\n            ['name' => 'Wood River', 'country_code' => 'US'],\n            ['name' => 'Friendly', 'country_code' => 'US'],\n            ['name' => 'Ban Ratchakrut', 'country_code' => 'TH'],\n            ['name' => 'Hoek van Holland', 'country_code' => 'NL'],\n            ['name' => 'Ollerton', 'country_code' => 'GB'],\n            ['name' => 'Barga', 'country_code' => 'IT'],\n            ['name' => 'Kubrat', 'country_code' => 'BG'],\n            ['name' => 'Sleepy Hollow', 'country_code' => 'US'],\n            ['name' => 'Caspe', 'country_code' => 'ES'],\n            ['name' => 'Euxton', 'country_code' => 'GB'],\n            ['name' => 'Colindres', 'country_code' => 'ES'],\n            ['name' => 'Sankt Andra', 'country_code' => 'AT'],\n            ['name' => 'Surany', 'country_code' => 'SK'],\n            ['name' => 'Fair Oaks Ranch', 'country_code' => 'US'],\n            ['name' => 'Robore', 'country_code' => 'BO'],\n            ['name' => 'Sipacate', 'country_code' => 'GT'],\n            ['name' => 'Heteren', 'country_code' => 'NL'],\n            ['name' => 'Bou nane', 'country_code' => 'MA'],\n            ['name' => 'North Versailles', 'country_code' => 'US'],\n            ['name' => 'Nohfelden', 'country_code' => 'DE'],\n            ['name' => 'Valea lui Mihai', 'country_code' => 'RO'],\n            ['name' => 'Monteriggioni', 'country_code' => 'IT'],\n            ['name' => 'Lentvaris', 'country_code' => 'LT'],\n            ['name' => 'Merzenich', 'country_code' => 'DE'],\n            ['name' => 'Moba', 'country_code' => 'CD'],\n            ['name' => 'Holmen', 'country_code' => 'US'],\n            ['name' => 'Croydon', 'country_code' => 'US'],\n            ['name' => 'San Pedro Huamelula', 'country_code' => 'MX'],\n            ['name' => 'Santa Maria Ajoloapan', 'country_code' => 'MX'],\n            ['name' => 'Tay', 'country_code' => 'CA'],\n            ['name' => 'Santa Margherita Ligure', 'country_code' => 'IT'],\n            ['name' => 'Coweta', 'country_code' => 'US'],\n            ['name' => 'Suaita', 'country_code' => 'CO'],\n            ['name' => 'Dubove', 'country_code' => 'UA'],\n            ['name' => 'Villamarchante', 'country_code' => 'ES'],\n            ['name' => 'Ohrdruf', 'country_code' => 'DE'],\n            ['name' => 'Fairmont', 'country_code' => 'US'],\n            ['name' => 'Coycoyan de las Flores', 'country_code' => 'MX'],\n            ['name' => 'Valozhyn', 'country_code' => 'BY'],\n            ['name' => 'Moravska Trebova', 'country_code' => 'CZ'],\n            ['name' => 'Warrenton', 'country_code' => 'US'],\n            ['name' => 'Volodarsk', 'country_code' => 'RU'],\n            ['name' => 'Gassino Torinese', 'country_code' => 'IT'],\n            ['name' => 'Caraibas', 'country_code' => 'BR'],\n            ['name' => 'Wielsbeke', 'country_code' => 'BE'],\n            ['name' => 'Purkersdorf', 'country_code' => 'AT'],\n            ['name' => 'Kami-kawabe', 'country_code' => 'JP'],\n            ['name' => 'Tafersit', 'country_code' => 'MA'],\n            ['name' => 'San Juan', 'country_code' => 'PH'],\n            ['name' => 'Progress Village', 'country_code' => 'US'],\n            ['name' => 'Nogent-le-Rotrou', 'country_code' => 'FR'],\n            ['name' => 'Pleasant Hill', 'country_code' => 'US'],\n            ['name' => 'Galleh Dar', 'country_code' => 'IR'],\n            ['name' => 'Taltal', 'country_code' => 'CL'],\n            ['name' => 'Vuktyl', 'country_code' => 'RU'],\n            ['name' => 'Senanga', 'country_code' => 'ZM'],\n            ['name' => 'Maisenhausen', 'country_code' => 'DE'],\n            ['name' => 'Waggaman', 'country_code' => 'US'],\n            ['name' => 'Alajarvi', 'country_code' => 'FI'],\n            ['name' => 'Aveley', 'country_code' => 'GB'],\n            ['name' => 'Kirchlinteln', 'country_code' => 'DE'],\n            ['name' => 'Non Sung', 'country_code' => 'TH'],\n            ['name' => 'Buckie', 'country_code' => 'GB'],\n            ['name' => 'Hiranai', 'country_code' => 'JP'],\n            ['name' => 'Jerez', 'country_code' => 'GT'],\n            ['name' => 'Laurens', 'country_code' => 'US'],\n            ['name' => 'Hoeselt', 'country_code' => 'BE'],\n            ['name' => 'Uchoa', 'country_code' => 'BR'],\n            ['name' => 'Midland', 'country_code' => 'US'],\n            ['name' => 'Bull Mountain', 'country_code' => 'US'],\n            ['name' => 'Flat Rock', 'country_code' => 'US'],\n            ['name' => 'Saint-Amand-Montrond', 'country_code' => 'FR'],\n            ['name' => 'Quartz Hill', 'country_code' => 'US'],\n            ['name' => 'Niederhasli', 'country_code' => 'CH'],\n            ['name' => 'Molalla', 'country_code' => 'US'],\n            ['name' => 'Gar', 'country_code' => 'CN'],\n            ['name' => 'Bonfinopolis', 'country_code' => 'BR'],\n            ['name' => 'Bude', 'country_code' => 'GB'],\n            ['name' => 'Hlinsko', 'country_code' => 'CZ'],\n            ['name' => 'Scotchtown', 'country_code' => 'US'],\n            ['name' => 'Pyetrykaw', 'country_code' => 'BY'],\n            ['name' => 'Giesen', 'country_code' => 'DE'],\n            ['name' => 'Alden', 'country_code' => 'US'],\n            ['name' => 'River Vale', 'country_code' => 'US'],\n            ['name' => 'Fort Oglethorpe', 'country_code' => 'US'],\n            ['name' => 'Pinos Puente', 'country_code' => 'ES'],\n            ['name' => 'Visbek', 'country_code' => 'DE'],\n            ['name' => 'Ratne', 'country_code' => 'UA'],\n            ['name' => 'Saint-Pierre-du-Mont', 'country_code' => 'FR'],\n            ['name' => 'Lapinlahti', 'country_code' => 'FI'],\n            ['name' => 'Alkhan-Yurt', 'country_code' => 'RU'],\n            ['name' => 'Tarhjicht', 'country_code' => 'MA'],\n            ['name' => 'Darabani', 'country_code' => 'RO'],\n            ['name' => 'Ruffano', 'country_code' => 'IT'],\n            ['name' => 'Magnago', 'country_code' => 'IT'],\n            ['name' => 'Campobello di Licata', 'country_code' => 'IT'],\n            ['name' => 'Boves', 'country_code' => 'IT'],\n            ['name' => 'Alcoa', 'country_code' => 'US'],\n            ['name' => 'Vlist', 'country_code' => 'NL'],\n            ['name' => 'Boudinar', 'country_code' => 'MA'],\n            ['name' => 'Fernan-Nunez', 'country_code' => 'ES'],\n            ['name' => 'Lake Arbor', 'country_code' => 'US'],\n            ['name' => 'Rute', 'country_code' => 'ES'],\n            ['name' => 'Ii', 'country_code' => 'FI'],\n            ['name' => 'Garden Acres', 'country_code' => 'US'],\n            ['name' => 'Toging am Inn', 'country_code' => 'DE'],\n            ['name' => 'Miandasht', 'country_code' => 'IR'],\n            ['name' => 'Bad Konig', 'country_code' => 'DE'],\n            ['name' => 'Pasian di Prato', 'country_code' => 'IT'],\n            ['name' => 'Oued Laou', 'country_code' => 'MA'],\n            ['name' => 'Mont-Saint-Martin', 'country_code' => 'FR'],\n            ['name' => 'Blain', 'country_code' => 'FR'],\n            ['name' => 'Pereshchepyne', 'country_code' => 'UA'],\n            ['name' => 'Anisio de Abreu', 'country_code' => 'BR'],\n            ['name' => 'Daruvar', 'country_code' => 'HR'],\n            ['name' => 'Santa Cruz Atizapan', 'country_code' => 'MX'],\n            ['name' => 'Dongcha', 'country_code' => 'CN'],\n            ['name' => 'Goldenstedt', 'country_code' => 'DE'],\n            ['name' => 'Liesveld', 'country_code' => 'NL'],\n            ['name' => 'Orland', 'country_code' => 'US'],\n            ['name' => 'Cuicatlan', 'country_code' => 'MX'],\n            ['name' => 'Fouesnant', 'country_code' => 'FR'],\n            ['name' => 'Itatiaiucu', 'country_code' => 'BR'],\n            ['name' => 'Helotes', 'country_code' => 'US'],\n            ['name' => 'Saint-Jean-le-Blanc', 'country_code' => 'FR'],\n            ['name' => 'Sorkheh', 'country_code' => 'IR'],\n            ['name' => 'Leppavirta', 'country_code' => 'FI'],\n            ['name' => 'Mareno di Piave', 'country_code' => 'IT'],\n            ['name' => 'Aytre', 'country_code' => 'FR'],\n            ['name' => 'Bee Ridge', 'country_code' => 'US'],\n            ['name' => 'Gessate', 'country_code' => 'IT'],\n            ['name' => 'Ploermel', 'country_code' => 'FR'],\n            ['name' => 'Haddington', 'country_code' => 'GB'],\n            ['name' => 'Constantina', 'country_code' => 'BR'],\n            ['name' => 'Frickenhausen', 'country_code' => 'DE'],\n            ['name' => 'Monte Escobedo', 'country_code' => 'MX'],\n            ['name' => 'Amatenango del Valle', 'country_code' => 'MX'],\n            ['name' => 'Sande', 'country_code' => 'NO'],\n            ['name' => 'Merville', 'country_code' => 'FR'],\n            ['name' => 'Liminka', 'country_code' => 'FI'],\n            ['name' => 'Estavayer-le-Lac', 'country_code' => 'CH'],\n            ['name' => 'Key Largo', 'country_code' => 'US'],\n            ['name' => 'Masquefa', 'country_code' => 'ES'],\n            ['name' => 'Kourimat', 'country_code' => 'MA'],\n            ['name' => 'Ribadeo', 'country_code' => 'ES'],\n            ['name' => 'Lambesc', 'country_code' => 'FR'],\n            ['name' => 'Piedras Blancas', 'country_code' => 'ES'],\n            ['name' => 'Boucau', 'country_code' => 'FR'],\n            ['name' => 'Saint-Doulchard', 'country_code' => 'FR'],\n            ['name' => 'Nea Moudania', 'country_code' => 'GR'],\n            ['name' => 'Outa Bouabane', 'country_code' => 'MA'],\n            ['name' => 'Westphalia', 'country_code' => 'US'],\n            ['name' => 'Worth', 'country_code' => 'GB'],\n            ['name' => 'Umburetama', 'country_code' => 'BR'],\n            ['name' => 'Conselice', 'country_code' => 'IT'],\n            ['name' => 'Foix', 'country_code' => 'FR'],\n            ['name' => 'Wabash', 'country_code' => 'US'],\n            ['name' => 'Pokrovske', 'country_code' => 'UA'],\n            ['name' => 'Saint-Remy-de-Provence', 'country_code' => 'FR'],\n            ['name' => 'Zell am See', 'country_code' => 'AT'],\n            ['name' => 'Gunnedah', 'country_code' => 'AU'],\n            ['name' => 'Zaozersk', 'country_code' => 'RU'],\n            ['name' => 'Itapeva', 'country_code' => 'BR'],\n            ['name' => 'East Bradford', 'country_code' => 'US'],\n            ['name' => 'Novyye Atagi', 'country_code' => 'RU'],\n            ['name' => 'Bad Breisig', 'country_code' => 'DE'],\n            ['name' => 'Saint-Lys', 'country_code' => 'FR'],\n            ['name' => 'Montescaglioso', 'country_code' => 'IT'],\n            ['name' => 'Garliava', 'country_code' => 'LT'],\n            ['name' => 'Bad Gandersheim', 'country_code' => 'DE'],\n            ['name' => 'Deruta', 'country_code' => 'IT'],\n            ['name' => 'Winterville', 'country_code' => 'US'],\n            ['name' => 'Capim Branco', 'country_code' => 'BR'],\n            ['name' => 'Ilsfeld', 'country_code' => 'DE'],\n            ['name' => 'Pia', 'country_code' => 'FR'],\n            ['name' => 'Bogande', 'country_code' => 'BF'],\n            ['name' => 'Urzhum', 'country_code' => 'RU'],\n            ['name' => 'Byalynichy', 'country_code' => 'BY'],\n            ['name' => 'Ramsey', 'country_code' => 'GB'],\n            ['name' => 'Castel Bolognese', 'country_code' => 'IT'],\n            ['name' => 'Porto Rafti', 'country_code' => 'GR'],\n            ['name' => 'Cosne sur Loire', 'country_code' => 'FR'],\n            ['name' => 'Jilotlan de los Dolores', 'country_code' => 'MX'],\n            ['name' => 'Vargem', 'country_code' => 'BR'],\n            ['name' => 'Clay', 'country_code' => 'US'],\n            ['name' => 'Celebration', 'country_code' => 'US'],\n            ['name' => 'Saarijarvi', 'country_code' => 'FI'],\n            ['name' => 'Arteaga', 'country_code' => 'MX'],\n            ['name' => 'Temiskaming Shores', 'country_code' => 'CA'],\n            ['name' => 'Wilnecote', 'country_code' => 'GB'],\n            ['name' => 'Carregal do Sal', 'country_code' => 'PT'],\n            ['name' => 'Towcester', 'country_code' => 'GB'],\n            ['name' => 'Caldas de Reyes', 'country_code' => 'ES'],\n            ['name' => 'St. Albans', 'country_code' => 'US'],\n            ['name' => 'Altmunster', 'country_code' => 'AT'],\n            ['name' => 'Talachyn', 'country_code' => 'BY'],\n            ['name' => 'Berd', 'country_code' => 'AM'],\n            ['name' => 'Poggio Renatico', 'country_code' => 'IT'],\n            ['name' => 'Fallanden', 'country_code' => 'CH'],\n            ['name' => 'Mirante', 'country_code' => 'BR'],\n            ['name' => 'Mission', 'country_code' => 'US'],\n            ['name' => 'Margarita', 'country_code' => 'CO'],\n            ['name' => 'Monticello Conte Otto', 'country_code' => 'IT'],\n            ['name' => 'Osthofen', 'country_code' => 'DE'],\n            ['name' => 'Pantano Grande', 'country_code' => 'BR'],\n            ['name' => 'Trancoso', 'country_code' => 'PT'],\n            ['name' => 'Oulunsalo', 'country_code' => 'FI'],\n            ['name' => 'Berwick', 'country_code' => 'US'],\n            ['name' => 'Grossrohrsdorf', 'country_code' => 'DE'],\n            ['name' => 'Lago Ranco', 'country_code' => 'CL'],\n            ['name' => 'Nong Wua So', 'country_code' => 'TH'],\n            ['name' => 'Alachua', 'country_code' => 'US'],\n            ['name' => 'Magny-les-Hameaux', 'country_code' => 'FR'],\n            ['name' => 'Aarburg', 'country_code' => 'CH'],\n            ['name' => 'San Giovanni in Marignano', 'country_code' => 'IT'],\n            ['name' => 'Nea Artaki', 'country_code' => 'GR'],\n            ['name' => 'Kinnelon', 'country_code' => 'US'],\n            ['name' => 'Worsborough', 'country_code' => 'GB'],\n            ['name' => 'Ventnor City', 'country_code' => 'US'],\n            ['name' => 'Colts Neck', 'country_code' => 'US'],\n            ['name' => 'Fuente Palmera', 'country_code' => 'ES'],\n            ['name' => 'Rockcreek', 'country_code' => 'US'],\n            ['name' => 'Bellinzago Novarese', 'country_code' => 'IT'],\n            ['name' => 'Qiziltepa', 'country_code' => 'UZ'],\n            ['name' => 'Mezobereny', 'country_code' => 'HU'],\n            ['name' => 'Resana', 'country_code' => 'IT'],\n            ['name' => 'Chimay', 'country_code' => 'BE'],\n            ['name' => 'Rothrist', 'country_code' => 'CH'],\n            ['name' => 'Emmett', 'country_code' => 'US'],\n            ['name' => 'Brandis', 'country_code' => 'DE'],\n            ['name' => 'Sugar Grove', 'country_code' => 'US'],\n            ['name' => 'Kushnarenkovo', 'country_code' => 'RU'],\n            ['name' => 'Beuvry', 'country_code' => 'FR'],\n            ['name' => 'Bockenem', 'country_code' => 'DE'],\n            ['name' => 'River Grove', 'country_code' => 'US'],\n            ['name' => 'Toudja', 'country_code' => 'DZ'],\n            ['name' => 'Revel', 'country_code' => 'FR'],\n            ['name' => 'Hinton', 'country_code' => 'CA'],\n            ['name' => 'Zinkiv', 'country_code' => 'UA'],\n            ['name' => 'Saint-Sauveur', 'country_code' => 'CA'],\n            ['name' => 'Great Billing', 'country_code' => 'GB'],\n            ['name' => 'Titu', 'country_code' => 'RO'],\n            ['name' => 'Lucon', 'country_code' => 'FR'],\n            ['name' => 'Quesnel', 'country_code' => 'CA'],\n            ['name' => 'Pilar', 'country_code' => 'PH'],\n            ['name' => 'South Lebanon', 'country_code' => 'US'],\n            ['name' => 'Torrinha', 'country_code' => 'BR'],\n            ['name' => 'Mora', 'country_code' => 'ES'],\n            ['name' => 'Varna', 'country_code' => 'RU'],\n            ['name' => 'Ruoqiang', 'country_code' => 'CN'],\n            ['name' => 'Pierrelaye', 'country_code' => 'FR'],\n            ['name' => 'Ashukino', 'country_code' => 'RU'],\n            ['name' => 'Norosi', 'country_code' => 'CO'],\n            ['name' => 'Dodworth', 'country_code' => 'GB'],\n            ['name' => 'Pingree Grove', 'country_code' => 'US'],\n            ['name' => 'Ellon', 'country_code' => 'GB'],\n            ['name' => 'Middleton', 'country_code' => 'US'],\n            ['name' => 'Fort Irwin', 'country_code' => 'US'],\n            ['name' => 'Sherborne', 'country_code' => 'GB'],\n            ['name' => 'Ananas', 'country_code' => 'BR'],\n            ['name' => 'Vries', 'country_code' => 'NL'],\n            ['name' => 'Northampton', 'country_code' => 'US'],\n            ['name' => 'Matadepera', 'country_code' => 'ES'],\n            ['name' => 'Serafimovskiy', 'country_code' => 'RU'],\n            ['name' => 'Nueva Guadalupe', 'country_code' => 'SV'],\n            ['name' => 'Bueng Khong Long', 'country_code' => 'TH'],\n            ['name' => 'Kobeliaky', 'country_code' => 'UA'],\n            ['name' => 'Beilngries', 'country_code' => 'DE'],\n            ['name' => 'Berezivka', 'country_code' => 'UA'],\n            ['name' => 'Gudensberg', 'country_code' => 'DE'],\n            ['name' => 'Makariv', 'country_code' => 'UA'],\n            ['name' => 'Sarapui', 'country_code' => 'BR'],\n            ['name' => 'Belomorsk', 'country_code' => 'RU'],\n            ['name' => 'Broni', 'country_code' => 'IT'],\n            ['name' => 'Ellisville', 'country_code' => 'US'],\n            ['name' => 'Piombino Dese', 'country_code' => 'IT'],\n            ['name' => 'Muurame', 'country_code' => 'FI'],\n            ['name' => 'Litovel', 'country_code' => 'CZ'],\n            ['name' => 'La Salvetat-Saint-Gilles', 'country_code' => 'FR'],\n            ['name' => 'Madera Acres', 'country_code' => 'US'],\n            ['name' => 'Bad Liebenzell', 'country_code' => 'DE'],\n            ['name' => 'Roztoky', 'country_code' => 'CZ'],\n            ['name' => 'Gloucester Point', 'country_code' => 'US'],\n            ['name' => 'Elizabethtown-Kitley', 'country_code' => 'CA'],\n            ['name' => 'Photharam', 'country_code' => 'TH'],\n            ['name' => 'Burgos', 'country_code' => 'PH'],\n            ['name' => 'Pluderhausen', 'country_code' => 'DE'],\n            ['name' => 'Brandywine', 'country_code' => 'US'],\n            ['name' => 'Morinville', 'country_code' => 'CA'],\n            ['name' => 'Chom Thong', 'country_code' => 'TH'],\n            ['name' => 'Hohr-Grenzhausen', 'country_code' => 'DE'],\n            ['name' => 'La Tour-du-Pin', 'country_code' => 'FR'],\n            ['name' => 'Mikun', 'country_code' => 'RU'],\n            ['name' => 'Hateg', 'country_code' => 'RO'],\n            ['name' => 'Veauche', 'country_code' => 'FR'],\n            ['name' => 'Brewster', 'country_code' => 'US'],\n            ['name' => 'T q ibuli', 'country_code' => 'GE'],\n            ['name' => 'Artigues-pres-Bordeaux', 'country_code' => 'FR'],\n            ['name' => 'Oldenburg in Holstein', 'country_code' => 'DE'],\n            ['name' => 'Nersingen', 'country_code' => 'DE'],\n            ['name' => 'Saint-Barthelemy-d Anjou', 'country_code' => 'FR'],\n            ['name' => 'Matamata', 'country_code' => 'NZ'],\n            ['name' => 'Carroll', 'country_code' => 'US'],\n            ['name' => 'Carlton Colville', 'country_code' => 'GB'],\n            ['name' => 'Schlitz', 'country_code' => 'DE'],\n            ['name' => 'Zorneding', 'country_code' => 'DE'],\n            ['name' => 'Port Townsend', 'country_code' => 'US'],\n            ['name' => 'Ban Krot', 'country_code' => 'TH'],\n            ['name' => 'Coffeyville', 'country_code' => 'US'],\n            ['name' => 'Suntar', 'country_code' => 'RU'],\n            ['name' => 'Heilsbronn', 'country_code' => 'DE'],\n            ['name' => 'Osterburg', 'country_code' => 'DE'],\n            ['name' => 'Chillicothe', 'country_code' => 'US'],\n            ['name' => 'Lake Barcroft', 'country_code' => 'US'],\n            ['name' => 'Burtonsville', 'country_code' => 'US'],\n            ['name' => 'Skopin', 'country_code' => 'RU'],\n            ['name' => 'Wamel', 'country_code' => 'NL'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Robertsdale', 'country_code' => 'US'],\n            ['name' => 'Halikko', 'country_code' => 'FI'],\n            ['name' => 'Triuggio', 'country_code' => 'IT'],\n            ['name' => 'Aizenay', 'country_code' => 'FR'],\n            ['name' => 'Almusafes', 'country_code' => 'ES'],\n            ['name' => 'Dolianova', 'country_code' => 'IT'],\n            ['name' => 'Mozzate', 'country_code' => 'IT'],\n            ['name' => 'Masku', 'country_code' => 'FI'],\n            ['name' => 'Baker City', 'country_code' => 'US'],\n            ['name' => 'Dorogobuzh', 'country_code' => 'RU'],\n            ['name' => 'Tisnov', 'country_code' => 'CZ'],\n            ['name' => 'Totma', 'country_code' => 'RU'],\n            ['name' => 'Sorbolo', 'country_code' => 'IT'],\n            ['name' => 'Everswinkel', 'country_code' => 'DE'],\n            ['name' => 'Vardenik', 'country_code' => 'AM'],\n            ['name' => 'Florania', 'country_code' => 'BR'],\n            ['name' => 'Cobham', 'country_code' => 'GB'],\n            ['name' => 'Chiang Klang', 'country_code' => 'TH'],\n            ['name' => 'Itasca', 'country_code' => 'US'],\n            ['name' => 'Grey Highlands', 'country_code' => 'CA'],\n            ['name' => 'Atherstone', 'country_code' => 'GB'],\n            ['name' => 'Sidi Bou Othmane', 'country_code' => 'MA'],\n            ['name' => 'Ware', 'country_code' => 'US'],\n            ['name' => 'Margny-les-Compiegne', 'country_code' => 'FR'],\n            ['name' => 'Jennings', 'country_code' => 'US'],\n            ['name' => 'Folignano', 'country_code' => 'IT'],\n            ['name' => 'Axixa do Tocantins', 'country_code' => 'BR'],\n            ['name' => 'Thap Khlo', 'country_code' => 'TH'],\n            ['name' => 'Guntramsdorf', 'country_code' => 'AT'],\n            ['name' => 'Villarrubia de los Ojos', 'country_code' => 'ES'],\n            ['name' => 'Tadla', 'country_code' => 'MA'],\n            ['name' => 'Woodbury', 'country_code' => 'US'],\n            ['name' => 'Leeton', 'country_code' => 'AU'],\n            ['name' => 'Mentone', 'country_code' => 'US'],\n            ['name' => 'Little River', 'country_code' => 'US'],\n            ['name' => 'Alcarraz', 'country_code' => 'ES'],\n            ['name' => 'Mittagong', 'country_code' => 'AU'],\n            ['name' => 'Biei', 'country_code' => 'JP'],\n            ['name' => 'Spelle', 'country_code' => 'DE'],\n            ['name' => 'Vega Alta', 'country_code' => 'PR'],\n            ['name' => 'Cody', 'country_code' => 'US'],\n            ['name' => 'Mooresville', 'country_code' => 'US'],\n            ['name' => 'Nyurba', 'country_code' => 'RU'],\n            ['name' => 'Conning Towers Nautilus Park', 'country_code' => 'US'],\n            ['name' => 'Albano Sant Alessandro', 'country_code' => 'IT'],\n            ['name' => 'Mae Rim', 'country_code' => 'TH'],\n            ['name' => 'Ostercappeln', 'country_code' => 'DE'],\n            ['name' => 'Treillieres', 'country_code' => 'FR'],\n            ['name' => 'Matelica', 'country_code' => 'IT'],\n            ['name' => 'Aklim', 'country_code' => 'MA'],\n            ['name' => 'Flero', 'country_code' => 'IT'],\n            ['name' => 'Sorisole', 'country_code' => 'IT'],\n            ['name' => 'Souffelweyersheim', 'country_code' => 'FR'],\n            ['name' => 'Aulnoye-Aymeries', 'country_code' => 'FR'],\n            ['name' => 'Aghbalou Aqourar', 'country_code' => 'MA'],\n            ['name' => 'Suzdal', 'country_code' => 'RU'],\n            ['name' => 'Kemberg', 'country_code' => 'DE'],\n            ['name' => 'George Mason', 'country_code' => 'US'],\n            ['name' => 'Caturama', 'country_code' => 'BR'],\n            ['name' => 'Hostotipaquillo', 'country_code' => 'MX'],\n            ['name' => 'Fort Salonga', 'country_code' => 'US'],\n            ['name' => 'Studenka', 'country_code' => 'CZ'],\n            ['name' => 'Russellville', 'country_code' => 'US'],\n            ['name' => 'Tweed Heads', 'country_code' => 'AU'],\n            ['name' => 'Annan', 'country_code' => 'GB'],\n            ['name' => 'Podu Iloaiei', 'country_code' => 'RO'],\n            ['name' => 'Hattula', 'country_code' => 'FI'],\n            ['name' => 'Nordwalde', 'country_code' => 'DE'],\n            ['name' => 'Mendicino', 'country_code' => 'IT'],\n            ['name' => 'Sevilla La Nueva', 'country_code' => 'ES'],\n            ['name' => 'North Bend', 'country_code' => 'US'],\n            ['name' => 'Clarksville', 'country_code' => 'US'],\n            ['name' => 'Grimmen', 'country_code' => 'DE'],\n            ['name' => 'Loria', 'country_code' => 'IT'],\n            ['name' => 'Eisenberg', 'country_code' => 'DE'],\n            ['name' => 'Redon', 'country_code' => 'FR'],\n            ['name' => 'Basse-Goulaine', 'country_code' => 'FR'],\n            ['name' => 'Neustadt', 'country_code' => 'DE'],\n            ['name' => 'Wagner', 'country_code' => 'BR'],\n            ['name' => 'Sarkad', 'country_code' => 'HU'],\n            ['name' => 'Philipsburg', 'country_code' => 'US'],\n            ['name' => 'Denham Springs', 'country_code' => 'US'],\n            ['name' => 'Cardeal da Silva', 'country_code' => 'BR'],\n            ['name' => 'Glencoe', 'country_code' => 'NZ'],\n            ['name' => 'Scaggsville', 'country_code' => 'US'],\n            ['name' => 'Corte Madera', 'country_code' => 'US'],\n            ['name' => 'Umbrete', 'country_code' => 'ES'],\n            ['name' => 'Douar Lehouifrat', 'country_code' => 'MA'],\n            ['name' => 'Oberstdorf', 'country_code' => 'DE'],\n            ['name' => 'Akhuryan', 'country_code' => 'AM'],\n            ['name' => 'Jewett City', 'country_code' => 'US'],\n            ['name' => 'Cuero', 'country_code' => 'US'],\n            ['name' => 'Butler', 'country_code' => 'US'],\n            ['name' => 'Fauske', 'country_code' => 'NO'],\n            ['name' => 'Argostoli', 'country_code' => 'GR'],\n            ['name' => 'Grado', 'country_code' => 'ES'],\n            ['name' => 'Felpham', 'country_code' => 'GB'],\n            ['name' => 'Nopaltepec', 'country_code' => 'MX'],\n            ['name' => 'Sangeorz-Bai', 'country_code' => 'RO'],\n            ['name' => 'Ussel', 'country_code' => 'FR'],\n            ['name' => 'Sidi Ahmed El Khadir', 'country_code' => 'MA'],\n            ['name' => 'Budd Lake', 'country_code' => 'US'],\n            ['name' => 'La Ravoire', 'country_code' => 'FR'],\n            ['name' => 'San Pedro', 'country_code' => 'CL'],\n            ['name' => 'Vesele', 'country_code' => 'UA'],\n            ['name' => 'Pizzo', 'country_code' => 'IT'],\n            ['name' => 'Nakao', 'country_code' => 'JP'],\n            ['name' => 'Columbia City', 'country_code' => 'US'],\n            ['name' => 'Aleksandrov Gay', 'country_code' => 'RU'],\n            ['name' => 'Punta del Este', 'country_code' => 'UY'],\n            ['name' => 'Voitsberg', 'country_code' => 'AT'],\n            ['name' => 'Yalaguina', 'country_code' => 'NI'],\n            ['name' => 'Zafferana Etnea', 'country_code' => 'IT'],\n            ['name' => 'Kittery', 'country_code' => 'US'],\n            ['name' => 'Nolinsk', 'country_code' => 'RU'],\n            ['name' => 'Ingre', 'country_code' => 'FR'],\n            ['name' => 'Liteni', 'country_code' => 'RO'],\n            ['name' => 'Blacklick Estates', 'country_code' => 'US'],\n            ['name' => 'Alsbach-Hahnlein', 'country_code' => 'DE'],\n            ['name' => 'Huaniqueo de Morales', 'country_code' => 'MX'],\n            ['name' => 'Idanha-a-Nova', 'country_code' => 'PT'],\n            ['name' => 'Bearsted', 'country_code' => 'GB'],\n            ['name' => 'Farsund', 'country_code' => 'NO'],\n            ['name' => 'Halen', 'country_code' => 'BE'],\n            ['name' => 'Bni Boufrah', 'country_code' => 'MA'],\n            ['name' => 'East Aurora', 'country_code' => 'US'],\n            ['name' => 'Southwick', 'country_code' => 'US'],\n            ['name' => 'Nove Mesto nad Metuji', 'country_code' => 'CZ'],\n            ['name' => 'Loudeac', 'country_code' => 'FR'],\n            ['name' => 'Heiligenhafen', 'country_code' => 'DE'],\n            ['name' => 'Shchuchye', 'country_code' => 'RU'],\n            ['name' => 'Akabira', 'country_code' => 'JP'],\n            ['name' => 'Rio Vista', 'country_code' => 'US'],\n            ['name' => 'Imias', 'country_code' => 'CU'],\n            ['name' => 'Dungarvan', 'country_code' => 'IE'],\n            ['name' => 'Herkimer', 'country_code' => 'US'],\n            ['name' => 'Philipstown', 'country_code' => 'US'],\n            ['name' => 'Alexandria', 'country_code' => 'US'],\n            ['name' => 'Wehrheim', 'country_code' => 'DE'],\n            ['name' => 'Eidson Road', 'country_code' => 'US'],\n            ['name' => 'Dushanove', 'country_code' => 'XK'],\n            ['name' => 'Bisingen', 'country_code' => 'DE'],\n            ['name' => 'Ehningen', 'country_code' => 'DE'],\n            ['name' => 'Leguevin', 'country_code' => 'FR'],\n            ['name' => 'San Marzano di San Giuseppe', 'country_code' => 'IT'],\n            ['name' => 'Saint-Aubin-les-Elbeuf', 'country_code' => 'FR'],\n            ['name' => 'Stratford', 'country_code' => 'CA'],\n            ['name' => 'Lavis', 'country_code' => 'IT'],\n            ['name' => 'Prospect', 'country_code' => 'US'],\n            ['name' => 'Plains', 'country_code' => 'US'],\n            ['name' => 'Boaz', 'country_code' => 'US'],\n            ['name' => 'Cuellar', 'country_code' => 'ES'],\n            ['name' => 'Kawanishicho', 'country_code' => 'JP'],\n            ['name' => 'Benalla', 'country_code' => 'AU'],\n            ['name' => 'Pleasant Valley', 'country_code' => 'US'],\n            ['name' => 'Foiano della Chiana', 'country_code' => 'IT'],\n            ['name' => 'Chesapeake Ranch Estates', 'country_code' => 'US'],\n            ['name' => 'La Matanza de Acentejo', 'country_code' => 'ES'],\n            ['name' => 'Countryside', 'country_code' => 'US'],\n            ['name' => 'Porto Tolle', 'country_code' => 'IT'],\n            ['name' => 'Matlock', 'country_code' => 'GB'],\n            ['name' => 'Cavriglia', 'country_code' => 'IT'],\n            ['name' => 'Maserada sul Piave', 'country_code' => 'IT'],\n            ['name' => 'St. Francis', 'country_code' => 'US'],\n            ['name' => 'Awans', 'country_code' => 'BE'],\n            ['name' => 'Holywell', 'country_code' => 'GB'],\n            ['name' => 'Alhendin', 'country_code' => 'ES'],\n            ['name' => 'Pasil', 'country_code' => 'PH'],\n            ['name' => 'Schmitten', 'country_code' => 'DE'],\n            ['name' => 'Kola', 'country_code' => 'RU'],\n            ['name' => 'Hohenmolsen', 'country_code' => 'DE'],\n            ['name' => 'Seysses', 'country_code' => 'FR'],\n            ['name' => 'Formoso', 'country_code' => 'BR'],\n            ['name' => 'Tzitzio', 'country_code' => 'MX'],\n            ['name' => 'Visselhovede', 'country_code' => 'DE'],\n            ['name' => 'Dassel', 'country_code' => 'DE'],\n            ['name' => 'Holualoa', 'country_code' => 'US'],\n            ['name' => 'Immingham', 'country_code' => 'GB'],\n            ['name' => 'Bersted', 'country_code' => 'GB'],\n            ['name' => 'Swanage', 'country_code' => 'GB'],\n            ['name' => 'East Rutherford', 'country_code' => 'US'],\n            ['name' => 'Pechory', 'country_code' => 'RU'],\n            ['name' => 'Williston', 'country_code' => 'US'],\n            ['name' => 'Frei Inocencio', 'country_code' => 'BR'],\n            ['name' => 'Valerik', 'country_code' => 'RU'],\n            ['name' => 'Fort Valley', 'country_code' => 'US'],\n            ['name' => 'Joigny', 'country_code' => 'FR'],\n            ['name' => 'Castelleone', 'country_code' => 'IT'],\n            ['name' => 'Laubach', 'country_code' => 'DE'],\n            ['name' => 'Commerce', 'country_code' => 'US'],\n            ['name' => 'Alfred and Plantagenet', 'country_code' => 'CA'],\n            ['name' => 'West Tawakoni', 'country_code' => 'US'],\n            ['name' => 'Irigny', 'country_code' => 'FR'],\n            ['name' => 'Ilsenburg', 'country_code' => 'DE'],\n            ['name' => 'Tryavna', 'country_code' => 'BG'],\n            ['name' => 'Olivares', 'country_code' => 'ES'],\n            ['name' => 'Schonwalde-Siedlung', 'country_code' => 'DE'],\n            ['name' => 'Monte Porzio Catone', 'country_code' => 'IT'],\n            ['name' => 'Khodoriv', 'country_code' => 'UA'],\n            ['name' => 'Antonio Dias', 'country_code' => 'BR'],\n            ['name' => 'Warrenton', 'country_code' => 'US'],\n            ['name' => 'Marysville', 'country_code' => 'US'],\n            ['name' => 'Marlton', 'country_code' => 'US'],\n            ['name' => 'Greenville', 'country_code' => 'US'],\n            ['name' => 'Attnang-Puchheim', 'country_code' => 'AT'],\n            ['name' => 'Ledbury', 'country_code' => 'GB'],\n            ['name' => 'Krasnogvardeyskoye', 'country_code' => 'RU'],\n            ['name' => 'Ayntap', 'country_code' => 'AM'],\n            ['name' => 'Nepi', 'country_code' => 'IT'],\n            ['name' => 'Fiesso d Artico', 'country_code' => 'IT'],\n            ['name' => 'Douar Messassa', 'country_code' => 'MA'],\n            ['name' => 'Lesquin', 'country_code' => 'FR'],\n            ['name' => 'Alfaro', 'country_code' => 'ES'],\n            ['name' => 'Stary Sacz', 'country_code' => 'PL'],\n            ['name' => 'Burlington', 'country_code' => 'US'],\n            ['name' => 'Candiota', 'country_code' => 'BR'],\n            ['name' => 'Rio del Mar', 'country_code' => 'US'],\n            ['name' => 'La Victoria de Acentejo', 'country_code' => 'ES'],\n            ['name' => 'Brand-Erbisdorf', 'country_code' => 'DE'],\n            ['name' => 'Harsova', 'country_code' => 'RO'],\n            ['name' => 'Couzeix', 'country_code' => 'FR'],\n            ['name' => 'Solsona', 'country_code' => 'ES'],\n            ['name' => 'Oulad Imloul', 'country_code' => 'MA'],\n            ['name' => 'Picture Rocks', 'country_code' => 'US'],\n            ['name' => 'Aguia Branca', 'country_code' => 'BR'],\n            ['name' => 'Penn', 'country_code' => 'US'],\n            ['name' => 'Besozzo', 'country_code' => 'IT'],\n            ['name' => 'Zwiesel', 'country_code' => 'DE'],\n            ['name' => 'Cameron', 'country_code' => 'US'],\n            ['name' => 'Waterford', 'country_code' => 'US'],\n            ['name' => 'Memphis', 'country_code' => 'US'],\n            ['name' => 'Pinhel', 'country_code' => 'PT'],\n            ['name' => 'Traversetolo', 'country_code' => 'IT'],\n            ['name' => 'Masera di Padova', 'country_code' => 'IT'],\n            ['name' => 'Mont-Tremblant', 'country_code' => 'CA'],\n            ['name' => 'Martensville', 'country_code' => 'CA'],\n            ['name' => 'Barleben', 'country_code' => 'DE'],\n            ['name' => 'Fort Stewart', 'country_code' => 'US'],\n            ['name' => 'Hartford', 'country_code' => 'US'],\n            ['name' => 'Costa Volpino', 'country_code' => 'IT'],\n            ['name' => 'Port Wentworth', 'country_code' => 'US'],\n            ['name' => 'Yorkshire', 'country_code' => 'US'],\n            ['name' => 'Uracoa', 'country_code' => 'VE'],\n            ['name' => 'Scionzier', 'country_code' => 'FR'],\n            ['name' => 'Hermantown', 'country_code' => 'US'],\n            ['name' => 'Zadonsk', 'country_code' => 'RU'],\n            ['name' => 'Irthlingborough', 'country_code' => 'GB'],\n            ['name' => 'Winfield', 'country_code' => 'US'],\n            ['name' => 'Striano', 'country_code' => 'IT'],\n            ['name' => 'Twist', 'country_code' => 'DE'],\n            ['name' => 'Alcanar', 'country_code' => 'ES'],\n            ['name' => 'Oxford', 'country_code' => 'US'],\n            ['name' => 'Manduri', 'country_code' => 'BR'],\n            ['name' => 'Coleford', 'country_code' => 'GB'],\n            ['name' => 'Cold Springs', 'country_code' => 'US'],\n            ['name' => 'Golbey', 'country_code' => 'FR'],\n            ['name' => 'Powdersville', 'country_code' => 'US'],\n            ['name' => 'La Plata', 'country_code' => 'US'],\n            ['name' => 'Merrill', 'country_code' => 'US'],\n            ['name' => 'Luckau', 'country_code' => 'DE'],\n            ['name' => 'Oststeinbek', 'country_code' => 'DE'],\n            ['name' => 'Bithlo', 'country_code' => 'US'],\n            ['name' => 'Penn Forest', 'country_code' => 'US'],\n            ['name' => 'Rondon', 'country_code' => 'BR'],\n            ['name' => 'Gatteo', 'country_code' => 'IT'],\n            ['name' => 'Landivisiau', 'country_code' => 'FR'],\n            ['name' => 'Santa Lucia di Piave', 'country_code' => 'IT'],\n            ['name' => 'Chevy Chase', 'country_code' => 'US'],\n            ['name' => 'Borogani', 'country_code' => 'MD'],\n            ['name' => 'Wadebridge', 'country_code' => 'GB'],\n            ['name' => 'San Juan del Puerto', 'country_code' => 'ES'],\n            ['name' => 'Paula Candido', 'country_code' => 'BR'],\n            ['name' => 'Worpswede', 'country_code' => 'DE'],\n            ['name' => 'Elsenfeld', 'country_code' => 'DE'],\n            ['name' => 'Zschopau', 'country_code' => 'DE'],\n            ['name' => 'Trebbin', 'country_code' => 'DE'],\n            ['name' => 'Valsequillo de Gran Canaria', 'country_code' => 'ES'],\n            ['name' => 'Sierning', 'country_code' => 'AT'],\n            ['name' => 'Wilmore', 'country_code' => 'US'],\n            ['name' => 'Saint-Raymond', 'country_code' => 'CA'],\n            ['name' => 'Bilozerka', 'country_code' => 'UA'],\n            ['name' => 'San Pedro Ixtlahuaca', 'country_code' => 'MX'],\n            ['name' => 'Audley', 'country_code' => 'GB'],\n            ['name' => 'Saint-Sulpice-la-Pointe', 'country_code' => 'FR'],\n            ['name' => 'Rainbow City', 'country_code' => 'US'],\n            ['name' => 'Levokumskoye', 'country_code' => 'RU'],\n            ['name' => 'Saint-Pierre-les-Elbeuf', 'country_code' => 'FR'],\n            ['name' => 'Brugnera', 'country_code' => 'IT'],\n            ['name' => 'Mizhhiria', 'country_code' => 'UA'],\n            ['name' => 'Velyka Dymerka', 'country_code' => 'UA'],\n            ['name' => 'Miajadas', 'country_code' => 'ES'],\n            ['name' => 'Santiponce', 'country_code' => 'ES'],\n            ['name' => 'Santa Maria', 'country_code' => 'AR'],\n            ['name' => 'Howell', 'country_code' => 'US'],\n            ['name' => 'Pleasant Grove', 'country_code' => 'US'],\n            ['name' => 'Blackhawk', 'country_code' => 'US'],\n            ['name' => 'Palmeira d Oeste', 'country_code' => 'BR'],\n            ['name' => 'Libercourt', 'country_code' => 'FR'],\n            ['name' => 'Emu Plains', 'country_code' => 'AU'],\n            ['name' => 'Ubbergen', 'country_code' => 'NL'],\n            ['name' => 'Hope', 'country_code' => 'US'],\n            ['name' => 'Roxboro', 'country_code' => 'US'],\n            ['name' => 'Cebazat', 'country_code' => 'FR'],\n            ['name' => 'Sarahs', 'country_code' => 'TM'],\n            ['name' => 'Bishop', 'country_code' => 'US'],\n            ['name' => 'Petersberg', 'country_code' => 'DE'],\n            ['name' => 'Kanchanadit', 'country_code' => 'TH'],\n            ['name' => 'Breuillet', 'country_code' => 'FR'],\n            ['name' => 'Middletown', 'country_code' => 'US'],\n            ['name' => 'Greenville', 'country_code' => 'US'],\n            ['name' => 'Tatoufet', 'country_code' => 'MA'],\n            ['name' => 'Pizarra', 'country_code' => 'ES'],\n            ['name' => 'Puebla del Caraminal', 'country_code' => 'ES'],\n            ['name' => 'Cepin', 'country_code' => 'HR'],\n            ['name' => 'Obersiggenthal', 'country_code' => 'CH'],\n            ['name' => 'Valreas', 'country_code' => 'FR'],\n            ['name' => 'Sankt Johann in Tirol', 'country_code' => 'AT'],\n            ['name' => 'St. Pete Beach', 'country_code' => 'US'],\n            ['name' => 'Rice Lake', 'country_code' => 'US'],\n            ['name' => 'Lototla', 'country_code' => 'MX'],\n            ['name' => 'Hayle', 'country_code' => 'GB'],\n            ['name' => 'Zawyat Sidi Ben Hamdoun', 'country_code' => 'MA'],\n            ['name' => 'Bang Khla', 'country_code' => 'TH'],\n            ['name' => 'Bakaly', 'country_code' => 'RU'],\n            ['name' => 'Bunol', 'country_code' => 'ES'],\n            ['name' => 'La Grande-Motte', 'country_code' => 'FR'],\n            ['name' => 'Manuel Urbano', 'country_code' => 'BR'],\n            ['name' => 'North Gates', 'country_code' => 'US'],\n            ['name' => 'Bezliudivka', 'country_code' => 'UA'],\n            ['name' => 'Vares', 'country_code' => 'BA'],\n            ['name' => 'Reinfeld', 'country_code' => 'DE'],\n            ['name' => 'Gore', 'country_code' => 'ET'],\n            ['name' => 'Altlandsberg', 'country_code' => 'DE'],\n            ['name' => 'Alderwood Manor', 'country_code' => 'US'],\n            ['name' => 'Thurso', 'country_code' => 'GB'],\n            ['name' => 'Ingenbohl', 'country_code' => 'CH'],\n            ['name' => 'Niesky', 'country_code' => 'DE'],\n            ['name' => 'Lwowek Slaski', 'country_code' => 'PL'],\n            ['name' => 'Capriate San Gervasio', 'country_code' => 'IT'],\n            ['name' => 'Bni Gmil', 'country_code' => 'MA'],\n            ['name' => 'Paray-le-Monial', 'country_code' => 'FR'],\n            ['name' => 'Sugbongkogon', 'country_code' => 'PH'],\n            ['name' => 'El Campo', 'country_code' => 'ES'],\n            ['name' => 'Ehringshausen', 'country_code' => 'DE'],\n            ['name' => 'Yamakita', 'country_code' => 'JP'],\n            ['name' => 'Casorate Primo', 'country_code' => 'IT'],\n            ['name' => 'Tombos', 'country_code' => 'BR'],\n            ['name' => 'Ecorse', 'country_code' => 'US'],\n            ['name' => 'Ouroeste', 'country_code' => 'BR'],\n            ['name' => 'Harleysville', 'country_code' => 'US'],\n            ['name' => 'Schubelbach', 'country_code' => 'CH'],\n            ['name' => 'Fairview', 'country_code' => 'US'],\n            ['name' => 'Reichenbach an der Fils', 'country_code' => 'DE'],\n            ['name' => 'Tanudan', 'country_code' => 'PH'],\n            ['name' => 'Treorchy', 'country_code' => 'GB'],\n            ['name' => 'The Village', 'country_code' => 'US'],\n            ['name' => 'Mount Holly', 'country_code' => 'US'],\n            ['name' => 'Oudenburg', 'country_code' => 'BE'],\n            ['name' => 'Woodbury', 'country_code' => 'US'],\n            ['name' => 'Langnau', 'country_code' => 'CH'],\n            ['name' => 'Furstenau', 'country_code' => 'DE'],\n            ['name' => 'Japura', 'country_code' => 'BR'],\n            ['name' => 'Senmanat', 'country_code' => 'ES'],\n            ['name' => 'Burela de Cabo', 'country_code' => 'ES'],\n            ['name' => 'Chita', 'country_code' => 'CO'],\n            ['name' => 'Edeleny', 'country_code' => 'HU'],\n            ['name' => 'Eagle Point', 'country_code' => 'US'],\n            ['name' => 'Alayor', 'country_code' => 'ES'],\n            ['name' => 'Craig', 'country_code' => 'US'],\n            ['name' => 'Willoughby Hills', 'country_code' => 'US'],\n            ['name' => 'Nalbach', 'country_code' => 'DE'],\n            ['name' => 'Voreppe', 'country_code' => 'FR'],\n            ['name' => 'Castel Gandolfo', 'country_code' => 'IT'],\n            ['name' => 'Pohrebyshche', 'country_code' => 'UA'],\n            ['name' => 'Walterboro', 'country_code' => 'US'],\n            ['name' => 'Hazle', 'country_code' => 'US'],\n            ['name' => 'Amherst', 'country_code' => 'CA'],\n            ['name' => 'Arenys de Munt', 'country_code' => 'ES'],\n            ['name' => 'Legnaro', 'country_code' => 'IT'],\n            ['name' => 'White Meadow Lake', 'country_code' => 'US'],\n            ['name' => 'Sankt Valentin', 'country_code' => 'AT'],\n            ['name' => 'Istrana', 'country_code' => 'IT'],\n            ['name' => 'Mount Vista', 'country_code' => 'US'],\n            ['name' => 'Lowell', 'country_code' => 'US'],\n            ['name' => 'Luchow', 'country_code' => 'DE'],\n            ['name' => 'Fossombrone', 'country_code' => 'IT'],\n            ['name' => 'El Amim', 'country_code' => 'MA'],\n            ['name' => 'Neuried', 'country_code' => 'DE'],\n            ['name' => 'Rehau', 'country_code' => 'DE'],\n            ['name' => 'Ecatzingo', 'country_code' => 'MX'],\n            ['name' => 'Ban Tha Phra', 'country_code' => 'TH'],\n            ['name' => 'Silsbee', 'country_code' => 'US'],\n            ['name' => 'Tadworth', 'country_code' => 'GB'],\n            ['name' => 'Sturbridge', 'country_code' => 'US'],\n            ['name' => 'Sebnitz', 'country_code' => 'DE'],\n            ['name' => 'Viagrande', 'country_code' => 'IT'],\n            ['name' => 'Orchies', 'country_code' => 'FR'],\n            ['name' => 'Burayevo', 'country_code' => 'RU'],\n            ['name' => 'Aragona', 'country_code' => 'IT'],\n            ['name' => 'Usworth', 'country_code' => 'GB'],\n            ['name' => 'Coulaines', 'country_code' => 'FR'],\n            ['name' => 'Harvard', 'country_code' => 'US'],\n            ['name' => 'Pagqen', 'country_code' => 'CN'],\n            ['name' => 'Villa Castelli', 'country_code' => 'IT'],\n            ['name' => 'Hostivice', 'country_code' => 'CZ'],\n            ['name' => 'Marnate', 'country_code' => 'IT'],\n            ['name' => 'La Loggia', 'country_code' => 'IT'],\n            ['name' => 'Central City', 'country_code' => 'US'],\n            ['name' => 'Elne', 'country_code' => 'FR'],\n            ['name' => 'Shanklin', 'country_code' => 'GB'],\n            ['name' => 'Obernkirchen', 'country_code' => 'DE'],\n            ['name' => 'Tell City', 'country_code' => 'US'],\n            ['name' => 'Belley', 'country_code' => 'FR'],\n            ['name' => 'Odobesti', 'country_code' => 'RO'],\n            ['name' => 'Oberentfelden', 'country_code' => 'CH'],\n            ['name' => 'Sawbridgeworth', 'country_code' => 'GB'],\n            ['name' => 'Aschheim', 'country_code' => 'DE'],\n            ['name' => 'Bansko', 'country_code' => 'BG'],\n            ['name' => 'Neu Bleckede', 'country_code' => 'DE'],\n            ['name' => 'Nueva Era', 'country_code' => 'PH'],\n            ['name' => 'Lambertville', 'country_code' => 'US'],\n            ['name' => 'San Fausto de Campcentellas', 'country_code' => 'ES'],\n            ['name' => 'Ikeda', 'country_code' => 'JP'],\n            ['name' => 'Palomares del Rio', 'country_code' => 'ES'],\n            ['name' => 'Roxborough Park', 'country_code' => 'US'],\n            ['name' => 'Colmenarejo', 'country_code' => 'ES'],\n            ['name' => 'Rye Brook', 'country_code' => 'US'],\n            ['name' => 'Reedsburg', 'country_code' => 'US'],\n            ['name' => 'Gomaringen', 'country_code' => 'DE'],\n            ['name' => 'Cervera', 'country_code' => 'ES'],\n            ['name' => 'Agudos do Sul', 'country_code' => 'BR'],\n            ['name' => 'Laurel', 'country_code' => 'US'],\n            ['name' => 'Fair Oaks', 'country_code' => 'US'],\n            ['name' => 'Sassnitz', 'country_code' => 'DE'],\n            ['name' => 'Gonfreville-l Orcher', 'country_code' => 'FR'],\n            ['name' => 'Zacualpan de Amilpas', 'country_code' => 'MX'],\n            ['name' => 'DuPont', 'country_code' => 'US'],\n            ['name' => 'Runkel', 'country_code' => 'DE'],\n            ['name' => 'Sao Domingos', 'country_code' => 'BR'],\n            ['name' => 'Schaafheim', 'country_code' => 'DE'],\n            ['name' => 'Hebron', 'country_code' => 'US'],\n            ['name' => 'Miltenberg', 'country_code' => 'DE'],\n            ['name' => 'Nyzhnohirskyi', 'country_code' => 'UA'],\n            ['name' => 'Mound', 'country_code' => 'US'],\n            ['name' => 'Jessup', 'country_code' => 'US'],\n            ['name' => 'Mosciano Sant Angelo', 'country_code' => 'IT'],\n            ['name' => 'Boiling Springs', 'country_code' => 'US'],\n            ['name' => 'Nakoushi', 'country_code' => 'JP'],\n            ['name' => 'Aleksandrovsk-Sakhalinskiy', 'country_code' => 'RU'],\n            ['name' => 'Wallerfangen', 'country_code' => 'DE'],\n            ['name' => 'Puerto Morelos', 'country_code' => 'MX'],\n            ['name' => 'Wakefield-Peacedale', 'country_code' => 'US'],\n            ['name' => 'Erwin', 'country_code' => 'US'],\n            ['name' => 'Savignano sul Panaro', 'country_code' => 'IT'],\n            ['name' => 'Huedin', 'country_code' => 'RO'],\n            ['name' => 'Waltenhofen', 'country_code' => 'DE'],\n            ['name' => 'Rigby', 'country_code' => 'US'],\n            ['name' => 'Rudnya', 'country_code' => 'RU'],\n            ['name' => 'Aniskino', 'country_code' => 'RU'],\n            ['name' => 'Martano', 'country_code' => 'IT'],\n            ['name' => 'Caracuaro', 'country_code' => 'MX'],\n            ['name' => 'Fort Stockton', 'country_code' => 'US'],\n            ['name' => 'Buriti Alegre', 'country_code' => 'BR'],\n            ['name' => 'Gaggiano', 'country_code' => 'IT'],\n            ['name' => 'Onnaing', 'country_code' => 'FR'],\n            ['name' => 'Iseo', 'country_code' => 'IT'],\n            ['name' => 'Le Mesnil-Esnard', 'country_code' => 'FR'],\n            ['name' => 'Dietlikon', 'country_code' => 'CH'],\n            ['name' => 'Lesnoy Gorodok', 'country_code' => 'RU'],\n            ['name' => 'Belvedere Marittimo', 'country_code' => 'IT'],\n            ['name' => 'Ramara', 'country_code' => 'CA'],\n            ['name' => 'Aadorf', 'country_code' => 'CH'],\n            ['name' => 'Lamarao', 'country_code' => 'BR'],\n            ['name' => 'Airway Heights', 'country_code' => 'US'],\n            ['name' => 'Minano', 'country_code' => 'JP'],\n            ['name' => 'Sindos', 'country_code' => 'GR'],\n            ['name' => 'Riacho dos Machados', 'country_code' => 'BR'],\n            ['name' => 'Planaltino', 'country_code' => 'BR'],\n            ['name' => 'Juraqan', 'country_code' => 'IR'],\n            ['name' => 'Vettweiss', 'country_code' => 'DE'],\n            ['name' => 'Olst', 'country_code' => 'NL'],\n            ['name' => 'Yutsa', 'country_code' => 'RU'],\n            ['name' => 'Santanopolis', 'country_code' => 'BR'],\n            ['name' => 'Castellabate', 'country_code' => 'IT'],\n            ['name' => 'Wustermark', 'country_code' => 'DE'],\n            ['name' => 'Tanfield', 'country_code' => 'GB'],\n            ['name' => 'Parsons', 'country_code' => 'US'],\n            ['name' => 'Parabita', 'country_code' => 'IT'],\n            ['name' => 'Rauenberg', 'country_code' => 'DE'],\n            ['name' => 'Zwenkau', 'country_code' => 'DE'],\n            ['name' => 'Ortuella', 'country_code' => 'ES'],\n            ['name' => 'Wertingen', 'country_code' => 'DE'],\n            ['name' => 'Fayetteville', 'country_code' => 'US'],\n            ['name' => 'Townsend', 'country_code' => 'US'],\n            ['name' => 'Larmor-Plage', 'country_code' => 'FR'],\n            ['name' => 'El Molar', 'country_code' => 'ES'],\n            ['name' => 'Polinya', 'country_code' => 'ES'],\n            ['name' => 'Gooik', 'country_code' => 'BE'],\n            ['name' => 'Meadowbrook', 'country_code' => 'US'],\n            ['name' => 'Sidi El Hattab', 'country_code' => 'MA'],\n            ['name' => 'Olho d Agua do Casado', 'country_code' => 'BR'],\n            ['name' => 'Chiasso', 'country_code' => 'CH'],\n            ['name' => 'Lititz', 'country_code' => 'US'],\n            ['name' => 'Marcy', 'country_code' => 'US'],\n            ['name' => 'Leeds and the Thousand Islands', 'country_code' => 'CA'],\n            ['name' => 'Siler City', 'country_code' => 'US'],\n            ['name' => 'Buchs', 'country_code' => 'CH'],\n            ['name' => 'Filottrano', 'country_code' => 'IT'],\n            ['name' => 'Varzea do Poco', 'country_code' => 'BR'],\n            ['name' => 'Platte City', 'country_code' => 'US'],\n            ['name' => 'Lantana', 'country_code' => 'US'],\n            ['name' => 'Carignan', 'country_code' => 'CA'],\n            ['name' => 'La Chapelle d Armentieres', 'country_code' => 'FR'],\n            ['name' => 'Dunblane', 'country_code' => 'GB'],\n            ['name' => 'Brockton', 'country_code' => 'CA'],\n            ['name' => 'Bezhetsk', 'country_code' => 'RU'],\n            ['name' => 'Woodfield', 'country_code' => 'US'],\n            ['name' => 'Codsall', 'country_code' => 'GB'],\n            ['name' => 'Mount Airy', 'country_code' => 'US'],\n            ['name' => 'Mhajar', 'country_code' => 'MA'],\n            ['name' => 'Farsala', 'country_code' => 'GR'],\n            ['name' => 'Carignano', 'country_code' => 'IT'],\n            ['name' => 'Ter Aar', 'country_code' => 'NL'],\n            ['name' => 'Budenheim', 'country_code' => 'DE'],\n            ['name' => 'Kirs', 'country_code' => 'RU'],\n            ['name' => 'Andre Fernandes', 'country_code' => 'BR'],\n            ['name' => 'Mohelnice', 'country_code' => 'CZ'],\n            ['name' => 'Missaglia', 'country_code' => 'IT'],\n            ['name' => 'Cervello', 'country_code' => 'ES'],\n            ['name' => 'Shira', 'country_code' => 'RU'],\n            ['name' => 'Sudlohn', 'country_code' => 'DE'],\n            ['name' => 'Maravilha', 'country_code' => 'BR'],\n            ['name' => 'Aniva', 'country_code' => 'RU'],\n            ['name' => 'Dubrovytsya', 'country_code' => 'UA'],\n            ['name' => 'Carencro', 'country_code' => 'US'],\n            ['name' => 'Au', 'country_code' => 'CH'],\n            ['name' => 'Lillebonne', 'country_code' => 'FR'],\n            ['name' => 'Lovosice', 'country_code' => 'CZ'],\n            ['name' => 'Asolo', 'country_code' => 'IT'],\n            ['name' => 'Sabangan', 'country_code' => 'PH'],\n            ['name' => 'Sutton', 'country_code' => 'US'],\n            ['name' => 'La Ferte-Bernard', 'country_code' => 'FR'],\n            ['name' => 'Winslow', 'country_code' => 'US'],\n            ['name' => 'Ruidoso', 'country_code' => 'US'],\n            ['name' => 'Laghzawna', 'country_code' => 'MA'],\n            ['name' => 'Pandino', 'country_code' => 'IT'],\n            ['name' => 'Gramsh', 'country_code' => 'AL'],\n            ['name' => 'South Strabane', 'country_code' => 'US'],\n            ['name' => 'Araujos', 'country_code' => 'BR'],\n            ['name' => 'Ocsa', 'country_code' => 'HU'],\n            ['name' => 'Tissint', 'country_code' => 'MA'],\n            ['name' => 'Hunduan', 'country_code' => 'PH'],\n            ['name' => 'Hondo', 'country_code' => 'US'],\n            ['name' => 'Miles City', 'country_code' => 'US'],\n            ['name' => 'Grigoriopol', 'country_code' => 'MD'],\n            ['name' => 'Trebisacce', 'country_code' => 'IT'],\n            ['name' => 'Harqalah', 'country_code' => 'TN'],\n            ['name' => 'Brownsville', 'country_code' => 'US'],\n            ['name' => 'Wallan', 'country_code' => 'AU'],\n            ['name' => 'Maidencreek', 'country_code' => 'US'],\n            ['name' => 'Granada', 'country_code' => 'CO'],\n            ['name' => 'Cullar-Vega', 'country_code' => 'ES'],\n            ['name' => 'Manistee', 'country_code' => 'US'],\n            ['name' => 'Teisendorf', 'country_code' => 'DE'],\n            ['name' => 'Rayne', 'country_code' => 'US'],\n            ['name' => 'Sauzal', 'country_code' => 'ES'],\n            ['name' => 'Wunsiedel', 'country_code' => 'DE'],\n            ['name' => 'Dielheim', 'country_code' => 'DE'],\n            ['name' => 'Bad Laer', 'country_code' => 'DE'],\n            ['name' => 'Castelli', 'country_code' => 'AR'],\n            ['name' => 'Augusta', 'country_code' => 'US'],\n            ['name' => 'Carbonita', 'country_code' => 'BR'],\n            ['name' => 'Le Muy', 'country_code' => 'FR'],\n            ['name' => 'Gammasa', 'country_code' => 'MA'],\n            ['name' => 'Orivesi', 'country_code' => 'FI'],\n            ['name' => 'Varzedo', 'country_code' => 'BR'],\n            ['name' => 'Spata', 'country_code' => 'GR'],\n            ['name' => 'Krasnoslobodsk', 'country_code' => 'RU'],\n            ['name' => 'Ichenhausen', 'country_code' => 'DE'],\n            ['name' => 'New Richmond', 'country_code' => 'US'],\n            ['name' => 'Greenwood', 'country_code' => 'US'],\n            ['name' => 'Ameskroud', 'country_code' => 'MA'],\n            ['name' => 'Laufenburg (Baden)', 'country_code' => 'DE'],\n            ['name' => 'Gouvieux', 'country_code' => 'FR'],\n            ['name' => 'Sao Sebastiao do Alto', 'country_code' => 'BR'],\n            ['name' => 'Krichim', 'country_code' => 'BG'],\n            ['name' => 'Lidzbark', 'country_code' => 'PL'],\n            ['name' => 'Tenabo', 'country_code' => 'MX'],\n            ['name' => 'Noventa Vicentina', 'country_code' => 'IT'],\n            ['name' => 'Monticello', 'country_code' => 'US'],\n            ['name' => 'Treia', 'country_code' => 'IT'],\n            ['name' => 'St. Stephens', 'country_code' => 'US'],\n            ['name' => 'Santa Comba', 'country_code' => 'ES'],\n            ['name' => 'Little Falls', 'country_code' => 'US'],\n            ['name' => 'Panganiban', 'country_code' => 'PH'],\n            ['name' => 'Great Dunmow', 'country_code' => 'GB'],\n            ['name' => 'Braslaw', 'country_code' => 'BY'],\n            ['name' => 'Pirambu', 'country_code' => 'BR'],\n            ['name' => 'Verkhneyarkeyevo', 'country_code' => 'RU'],\n            ['name' => 'Kandel', 'country_code' => 'DE'],\n            ['name' => 'Bryan', 'country_code' => 'US'],\n            ['name' => 'La Bruyere', 'country_code' => 'BE'],\n            ['name' => 'Groenlo', 'country_code' => 'NL'],\n            ['name' => 'Amityville', 'country_code' => 'US'],\n            ['name' => 'Lamorlaye', 'country_code' => 'FR'],\n            ['name' => 'Porcari', 'country_code' => 'IT'],\n            ['name' => 'Tomah', 'country_code' => 'US'],\n            ['name' => 'Narpes', 'country_code' => 'FI'],\n            ['name' => 'Tysmenytsia', 'country_code' => 'UA'],\n            ['name' => 'Sene', 'country_code' => 'FR'],\n            ['name' => 'Reinach', 'country_code' => 'CH'],\n            ['name' => 'Douar Ezzerarda', 'country_code' => 'MA'],\n            ['name' => 'San Antonio', 'country_code' => 'PH'],\n            ['name' => 'Cavalcante', 'country_code' => 'BR'],\n            ['name' => 'Brunswick', 'country_code' => 'US'],\n            ['name' => 'Le Mont-sur-Lausanne', 'country_code' => 'CH'],\n            ['name' => 'Usakos', 'country_code' => 'NA'],\n            ['name' => 'Bovalino Marina', 'country_code' => 'IT'],\n            ['name' => 'Morieres-les-Avignon', 'country_code' => 'FR'],\n            ['name' => 'Campo Ere', 'country_code' => 'BR'],\n            ['name' => 'Navoloki', 'country_code' => 'RU'],\n            ['name' => 'Sompting', 'country_code' => 'GB'],\n            ['name' => 'Unieux', 'country_code' => 'FR'],\n            ['name' => 'Roanoke', 'country_code' => 'US'],\n            ['name' => 'Argoncilhe', 'country_code' => 'PT'],\n            ['name' => 'Francisville', 'country_code' => 'US'],\n            ['name' => 'Hickam Housing', 'country_code' => 'US'],\n            ['name' => 'Laurentian Valley', 'country_code' => 'CA'],\n            ['name' => 'Muro del Alcoy', 'country_code' => 'ES'],\n            ['name' => 'Navasota', 'country_code' => 'US'],\n            ['name' => 'Le Rheu', 'country_code' => 'FR'],\n            ['name' => 'Erdokertes', 'country_code' => 'HU'],\n            ['name' => 'Calusco d Adda', 'country_code' => 'IT'],\n            ['name' => 'Eemnes', 'country_code' => 'NL'],\n            ['name' => 'Elsloo', 'country_code' => 'NL'],\n            ['name' => 'Coccaglio', 'country_code' => 'IT'],\n            ['name' => 'Schlangen', 'country_code' => 'DE'],\n            ['name' => 'Bandol', 'country_code' => 'FR'],\n            ['name' => 'Irshava', 'country_code' => 'UA'],\n            ['name' => 'Igarata', 'country_code' => 'BR'],\n            ['name' => 'Livron-sur-Drome', 'country_code' => 'FR'],\n            ['name' => 'Flowood', 'country_code' => 'US'],\n            ['name' => 'Pryor Creek', 'country_code' => 'US'],\n            ['name' => 'Ouled Rached', 'country_code' => 'DZ'],\n            ['name' => 'Hingyon', 'country_code' => 'PH'],\n            ['name' => 'Parempuyre', 'country_code' => 'FR'],\n            ['name' => 'Kargat', 'country_code' => 'RU'],\n            ['name' => 'Nea Peramos', 'country_code' => 'GR'],\n            ['name' => 'Currumbin', 'country_code' => 'AU'],\n            ['name' => 'Bardmoor', 'country_code' => 'US'],\n            ['name' => 'East St. Paul', 'country_code' => 'CA'],\n            ['name' => 'Crissier', 'country_code' => 'CH'],\n            ['name' => 'Perigny', 'country_code' => 'FR'],\n            ['name' => 'Santa Coloma de Cervello', 'country_code' => 'ES'],\n            ['name' => 'Ifigha', 'country_code' => 'DZ'],\n            ['name' => 'Bloomfield', 'country_code' => 'US'],\n            ['name' => 'Cairo', 'country_code' => 'US'],\n            ['name' => 'Tonneins', 'country_code' => 'FR'],\n            ['name' => 'Rafelbunol', 'country_code' => 'ES'],\n            ['name' => 'Castegnato', 'country_code' => 'IT'],\n            ['name' => 'Tayr Ma lah', 'country_code' => 'SY'],\n            ['name' => 'Aidlingen', 'country_code' => 'DE'],\n            ['name' => 'Rio das Flores', 'country_code' => 'BR'],\n            ['name' => 'Dayton', 'country_code' => 'US'],\n            ['name' => 'Siteia', 'country_code' => 'GR'],\n            ['name' => 'Kyritz', 'country_code' => 'DE'],\n            ['name' => 'Boonville', 'country_code' => 'US'],\n            ['name' => 'Les Sorinieres', 'country_code' => 'FR'],\n            ['name' => 'Richterich', 'country_code' => 'DE'],\n            ['name' => 'Putnam', 'country_code' => 'US'],\n            ['name' => 'Bli Bli', 'country_code' => 'AU'],\n            ['name' => 'Louisville', 'country_code' => 'US'],\n            ['name' => 'Beverly Hills', 'country_code' => 'US'],\n            ['name' => 'Salisbury', 'country_code' => 'US'],\n            ['name' => 'Baia Formosa', 'country_code' => 'BR'],\n            ['name' => 'Nova Paka', 'country_code' => 'CZ'],\n            ['name' => 'Nieuwleusen', 'country_code' => 'NL'],\n            ['name' => 'Brownfield', 'country_code' => 'US'],\n            ['name' => 'Tvrdosin', 'country_code' => 'SK'],\n            ['name' => 'Clay Cross', 'country_code' => 'GB'],\n            ['name' => 'Caputira', 'country_code' => 'BR'],\n            ['name' => 'Cappelle-la-Grande', 'country_code' => 'FR'],\n            ['name' => 'Santa Maria de Cayon', 'country_code' => 'ES'],\n            ['name' => 'Hackettstown', 'country_code' => 'US'],\n            ['name' => 'Pesca', 'country_code' => 'CO'],\n            ['name' => 'Stuarts Draft', 'country_code' => 'US'],\n            ['name' => 'Bay Minette', 'country_code' => 'US'],\n            ['name' => 'Isbergues', 'country_code' => 'FR'],\n            ['name' => 'Monteforte d Alpone', 'country_code' => 'IT'],\n            ['name' => 'Lorraine', 'country_code' => 'CA'],\n            ['name' => 'Khotyn', 'country_code' => 'UA'],\n            ['name' => 'Golden Hills', 'country_code' => 'US'],\n            ['name' => 'Thompson', 'country_code' => 'US'],\n            ['name' => 'Verkhneuralsk', 'country_code' => 'RU'],\n            ['name' => 'Podenzano', 'country_code' => 'IT'],\n            ['name' => 'Edwards', 'country_code' => 'US'],\n            ['name' => 'Nagykallo', 'country_code' => 'HU'],\n            ['name' => 'Ariranha', 'country_code' => 'BR'],\n            ['name' => 'Loreto', 'country_code' => 'PH'],\n            ['name' => 'Masandra', 'country_code' => 'UA'],\n            ['name' => 'Woodmoor', 'country_code' => 'US'],\n            ['name' => 'Liberty', 'country_code' => 'US'],\n            ['name' => 'Ipiranga do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Pfedelbach', 'country_code' => 'DE'],\n            ['name' => 'Vendin-le-Vieil', 'country_code' => 'FR'],\n            ['name' => 'Segni', 'country_code' => 'IT'],\n            ['name' => 'Saline', 'country_code' => 'US'],\n            ['name' => 'Catral', 'country_code' => 'ES'],\n            ['name' => 'Villars', 'country_code' => 'FR'],\n            ['name' => 'Courcelles-les-Lens', 'country_code' => 'FR'],\n            ['name' => 'St. Augustine Shores', 'country_code' => 'US'],\n            ['name' => 'Madras', 'country_code' => 'US'],\n            ['name' => 'Ineu', 'country_code' => 'RO'],\n            ['name' => 'San Sebastian de la Gomera', 'country_code' => 'ES'],\n            ['name' => 'Pietra Ligure', 'country_code' => 'IT'],\n            ['name' => 'Catuipe', 'country_code' => 'BR'],\n            ['name' => 'Caluco', 'country_code' => 'SV'],\n            ['name' => 'Kaleybar', 'country_code' => 'IR'],\n            ['name' => 'Vallet', 'country_code' => 'FR'],\n            ['name' => 'Cherasco', 'country_code' => 'IT'],\n            ['name' => 'Vallendar', 'country_code' => 'DE'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'Porangaba', 'country_code' => 'BR'],\n            ['name' => 'Banaruyeh', 'country_code' => 'IR'],\n            ['name' => 'Hohenhameln', 'country_code' => 'DE'],\n            ['name' => 'Ngaruawahia', 'country_code' => 'NZ'],\n            ['name' => 'Lacchiarella', 'country_code' => 'IT'],\n            ['name' => 'Le Petit-Couronne', 'country_code' => 'FR'],\n            ['name' => 'Heath', 'country_code' => 'US'],\n            ['name' => 'Sainte-Julienne', 'country_code' => 'CA'],\n            ['name' => 'Claymont', 'country_code' => 'US'],\n            ['name' => 'Tirano', 'country_code' => 'IT'],\n            ['name' => 'Zanica', 'country_code' => 'IT'],\n            ['name' => 'Chaponost', 'country_code' => 'FR'],\n            ['name' => 'Shimizu', 'country_code' => 'JP'],\n            ['name' => 'Blackfalds', 'country_code' => 'CA'],\n            ['name' => 'Stansbury Park', 'country_code' => 'US'],\n            ['name' => 'Rotonda', 'country_code' => 'US'],\n            ['name' => 'Marlboro Village', 'country_code' => 'US'],\n            ['name' => 'Luzzi', 'country_code' => 'IT'],\n            ['name' => 'Belousovo', 'country_code' => 'RU'],\n            ['name' => 'Lenoir City', 'country_code' => 'US'],\n            ['name' => 'Reggiolo', 'country_code' => 'IT'],\n            ['name' => 'Birch Bay', 'country_code' => 'US'],\n            ['name' => 'Portland', 'country_code' => 'US'],\n            ['name' => 'Edingerhof', 'country_code' => 'DE'],\n            ['name' => 'Smilde', 'country_code' => 'NL'],\n            ['name' => 'Coqueiral', 'country_code' => 'BR'],\n            ['name' => 'Hartland', 'country_code' => 'US'],\n            ['name' => 'Nakhon Thai', 'country_code' => 'TH'],\n            ['name' => 'Waihee-Waiehu', 'country_code' => 'US'],\n            ['name' => 'Landquart', 'country_code' => 'CH'],\n            ['name' => 'Sint-Martens-Lennik', 'country_code' => 'BE'],\n            ['name' => 'Moore', 'country_code' => 'US'],\n            ['name' => 'College Place', 'country_code' => 'US'],\n            ['name' => 'Svit', 'country_code' => 'SK'],\n            ['name' => 'Liberty', 'country_code' => 'US'],\n            ['name' => 'Inveruno', 'country_code' => 'IT'],\n            ['name' => 'Trumpington', 'country_code' => 'GB'],\n            ['name' => 'Bad Bevensen', 'country_code' => 'DE'],\n            ['name' => 'Stevenston', 'country_code' => 'GB'],\n            ['name' => 'Montoro', 'country_code' => 'ES'],\n            ['name' => 'Vel ke Kapusany', 'country_code' => 'SK'],\n            ['name' => 'Nong Kung Si', 'country_code' => 'TH'],\n            ['name' => 'Teolo', 'country_code' => 'IT'],\n            ['name' => 'Holten', 'country_code' => 'NL'],\n            ['name' => 'Velykyi Bychkiv', 'country_code' => 'UA'],\n            ['name' => 'Capbreton', 'country_code' => 'FR'],\n            ['name' => 'Cisterniga', 'country_code' => 'ES'],\n            ['name' => 'Hombrechtikon', 'country_code' => 'CH'],\n            ['name' => 'Zimmerman', 'country_code' => 'US'],\n            ['name' => 'Hemau', 'country_code' => 'DE'],\n            ['name' => 'Freetown', 'country_code' => 'US'],\n            ['name' => 'Hohenbrunn', 'country_code' => 'DE'],\n            ['name' => 'Biblis', 'country_code' => 'DE'],\n            ['name' => 'Zorbig', 'country_code' => 'DE'],\n            ['name' => 'Newfane', 'country_code' => 'US'],\n            ['name' => 'Dardilly', 'country_code' => 'FR'],\n            ['name' => 'Wesley Chapel', 'country_code' => 'US'],\n            ['name' => 'Burscough', 'country_code' => 'GB'],\n            ['name' => 'Malahide', 'country_code' => 'CA'],\n            ['name' => 'Shijak', 'country_code' => 'AL'],\n            ['name' => 'Urbach', 'country_code' => 'DE'],\n            ['name' => 'Suwannaphum', 'country_code' => 'TH'],\n            ['name' => 'Didymoteicho', 'country_code' => 'GR'],\n            ['name' => 'Seddouk Oufella', 'country_code' => 'DZ'],\n            ['name' => 'Detroit Lakes', 'country_code' => 'US'],\n            ['name' => 'Gerstungen', 'country_code' => 'DE'],\n            ['name' => 'La Fare-les-Oliviers', 'country_code' => 'FR'],\n            ['name' => 'Gonzaga', 'country_code' => 'IT'],\n            ['name' => 'Hunenberg', 'country_code' => 'CH'],\n            ['name' => 'Fultondale', 'country_code' => 'US'],\n            ['name' => 'Tlahuiltepa', 'country_code' => 'MX'],\n            ['name' => 'North College Hill', 'country_code' => 'US'],\n            ['name' => 'Sao Jose do Cerrito', 'country_code' => 'BR'],\n            ['name' => 'Herculandia', 'country_code' => 'BR'],\n            ['name' => 'Torgelow', 'country_code' => 'DE'],\n            ['name' => 'Gnarrenburg', 'country_code' => 'DE'],\n            ['name' => 'Pozo Almonte', 'country_code' => 'CL'],\n            ['name' => 'Tanakoub', 'country_code' => 'MA'],\n            ['name' => 'Westerland', 'country_code' => 'DE'],\n            ['name' => 'Casteloes de Cepeda', 'country_code' => 'PT'],\n            ['name' => 'Horodenka', 'country_code' => 'UA'],\n            ['name' => 'Cape Elizabeth', 'country_code' => 'US'],\n            ['name' => 'Tecklenburg', 'country_code' => 'DE'],\n            ['name' => 'Cross Lanes', 'country_code' => 'US'],\n            ['name' => 'Lo Miranda', 'country_code' => 'CL'],\n            ['name' => 'Benner', 'country_code' => 'US'],\n            ['name' => 'Fuldabruck', 'country_code' => 'DE'],\n            ['name' => 'Zavyalovo', 'country_code' => 'RU'],\n            ['name' => 'Wolfurt', 'country_code' => 'AT'],\n            ['name' => 'Oulad Cherif', 'country_code' => 'MA'],\n            ['name' => 'Santa Maria del Tule', 'country_code' => 'MX'],\n            ['name' => 'Chotebor', 'country_code' => 'CZ'],\n            ['name' => 'Marathon', 'country_code' => 'US'],\n            ['name' => 'Westwood', 'country_code' => 'US'],\n            ['name' => 'Sidi Lahsene', 'country_code' => 'MA'],\n            ['name' => 'Mendig', 'country_code' => 'DE'],\n            ['name' => 'Valky', 'country_code' => 'UA'],\n            ['name' => 'Altenbeken', 'country_code' => 'DE'],\n            ['name' => 'Salto Grande', 'country_code' => 'BR'],\n            ['name' => 'Biberist', 'country_code' => 'CH'],\n            ['name' => 'Kolkwitz', 'country_code' => 'DE'],\n            ['name' => 'Lexington', 'country_code' => 'US'],\n            ['name' => 'Blackstone', 'country_code' => 'US'],\n            ['name' => 'Bohemia', 'country_code' => 'US'],\n            ['name' => 'Hernando', 'country_code' => 'US'],\n            ['name' => 'Dumont', 'country_code' => 'BR'],\n            ['name' => 'Hawkinge', 'country_code' => 'GB'],\n            ['name' => 'Pokrovsk', 'country_code' => 'RU'],\n            ['name' => 'Troina', 'country_code' => 'IT'],\n            ['name' => 'Malalbergo', 'country_code' => 'IT'],\n            ['name' => 'Nizhniye Sergi', 'country_code' => 'RU'],\n            ['name' => 'Bad Liebenwerda', 'country_code' => 'DE'],\n            ['name' => 'Neshannock', 'country_code' => 'US'],\n            ['name' => 'Natividade', 'country_code' => 'BR'],\n            ['name' => 'Currie', 'country_code' => 'GB'],\n            ['name' => 'Kalanchak', 'country_code' => 'UA'],\n            ['name' => 'Melgaco', 'country_code' => 'PT'],\n            ['name' => 'Hastings', 'country_code' => 'US'],\n            ['name' => 'Cheat Lake', 'country_code' => 'US'],\n            ['name' => 'Harahan', 'country_code' => 'US'],\n            ['name' => 'Paszto', 'country_code' => 'HU'],\n            ['name' => 'Sredets', 'country_code' => 'BG'],\n            ['name' => 'Le Thor', 'country_code' => 'FR'],\n            ['name' => 'Washington Terrace', 'country_code' => 'US'],\n            ['name' => 'Salzhemmendorf', 'country_code' => 'DE'],\n            ['name' => 'Sultan', 'country_code' => 'US'],\n            ['name' => 'Wendover', 'country_code' => 'GB'],\n            ['name' => 'Pong Nam Ron', 'country_code' => 'TH'],\n            ['name' => 'Muncy', 'country_code' => 'US'],\n            ['name' => 'Madeira', 'country_code' => 'US'],\n            ['name' => 'Colorno', 'country_code' => 'IT'],\n            ['name' => 'Princes Risborough', 'country_code' => 'GB'],\n            ['name' => 'Saidia', 'country_code' => 'MA'],\n            ['name' => 'Abaira', 'country_code' => 'BR'],\n            ['name' => 'Valldoreix', 'country_code' => 'ES'],\n            ['name' => 'Carneiros', 'country_code' => 'BR'],\n            ['name' => 'Anthony', 'country_code' => 'US'],\n            ['name' => 'Obukhivka', 'country_code' => 'UA'],\n            ['name' => 'Rosario do Catete', 'country_code' => 'BR'],\n            ['name' => 'Clermont-l Herault', 'country_code' => 'FR'],\n            ['name' => 'Lempdes', 'country_code' => 'FR'],\n            ['name' => 'Gridley', 'country_code' => 'US'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Saint-Paul-Trois-Chateaux', 'country_code' => 'FR'],\n            ['name' => 'Heroldsberg', 'country_code' => 'DE'],\n            ['name' => 'San Fructuoso de Bages', 'country_code' => 'ES'],\n            ['name' => 'Ziebice', 'country_code' => 'PL'],\n            ['name' => 'Veliki Preslav', 'country_code' => 'BG'],\n            ['name' => 'Kendall Park', 'country_code' => 'US'],\n            ['name' => 'Douar Snada', 'country_code' => 'MA'],\n            ['name' => 'Haram', 'country_code' => 'NO'],\n            ['name' => 'Manchester', 'country_code' => 'US'],\n            ['name' => 'Saint-Claude', 'country_code' => 'FR'],\n            ['name' => 'Skovorodino', 'country_code' => 'RU'],\n            ['name' => 'Mittenwalde', 'country_code' => 'DE'],\n            ['name' => 'Roquevaire', 'country_code' => 'FR'],\n            ['name' => 'Furth im Wald', 'country_code' => 'DE'],\n            ['name' => 'Walworth', 'country_code' => 'US'],\n            ['name' => 'Kamien Pomorski', 'country_code' => 'PL'],\n            ['name' => 'Soresina', 'country_code' => 'IT'],\n            ['name' => 'Girard', 'country_code' => 'US'],\n            ['name' => 'Montagnana', 'country_code' => 'IT'],\n            ['name' => 'Coronel Murta', 'country_code' => 'BR'],\n            ['name' => 'Hirayama', 'country_code' => 'JP'],\n            ['name' => 'Moss Vale', 'country_code' => 'AU'],\n            ['name' => 'I-n-Amenas', 'country_code' => 'DZ'],\n            ['name' => 'Hillview', 'country_code' => 'US'],\n            ['name' => 'Burlington', 'country_code' => 'US'],\n            ['name' => 'Stryzhavka', 'country_code' => 'UA'],\n            ['name' => 'Almargem', 'country_code' => 'PT'],\n            ['name' => 'Baluntaicun', 'country_code' => 'CN'],\n            ['name' => 'Oromocto', 'country_code' => 'CA'],\n            ['name' => 'La Cruz', 'country_code' => 'CR'],\n            ['name' => 'Ponte Buggianese', 'country_code' => 'IT'],\n            ['name' => 'Steger', 'country_code' => 'US'],\n            ['name' => 'Sans Souci', 'country_code' => 'US'],\n            ['name' => 'Serramanna', 'country_code' => 'IT'],\n            ['name' => 'Tarcento', 'country_code' => 'IT'],\n            ['name' => 'Tineo', 'country_code' => 'ES'],\n            ['name' => 'White Marsh', 'country_code' => 'US'],\n            ['name' => 'Yaxley', 'country_code' => 'GB'],\n            ['name' => 'Sidi Ouassay', 'country_code' => 'MA'],\n            ['name' => 'Spanish Fort', 'country_code' => 'US'],\n            ['name' => 'Krompachy', 'country_code' => 'SK'],\n            ['name' => 'Savenay', 'country_code' => 'FR'],\n            ['name' => 'Longvic', 'country_code' => 'FR'],\n            ['name' => 'Windisch', 'country_code' => 'CH'],\n            ['name' => 'Wanaka', 'country_code' => 'NZ'],\n            ['name' => 'Notre-Dame-de-Gravenchon', 'country_code' => 'FR'],\n            ['name' => 'Chtiba', 'country_code' => 'MA'],\n            ['name' => 'Lake Elmo', 'country_code' => 'US'],\n            ['name' => 'Bethalto', 'country_code' => 'US'],\n            ['name' => 'Dallas', 'country_code' => 'US'],\n            ['name' => 'Obyachevo', 'country_code' => 'RU'],\n            ['name' => 'Brewood', 'country_code' => 'GB'],\n            ['name' => 'Trittau', 'country_code' => 'DE'],\n            ['name' => 'Bir Tam Tam', 'country_code' => 'MA'],\n            ['name' => 'Cloverdale', 'country_code' => 'US'],\n            ['name' => 'Copceac', 'country_code' => 'MD'],\n            ['name' => 'Achicourt', 'country_code' => 'FR'],\n            ['name' => 'Borgoricco', 'country_code' => 'IT'],\n            ['name' => 'Independent Hill', 'country_code' => 'US'],\n            ['name' => 'Mendon', 'country_code' => 'US'],\n            ['name' => 'Crawford', 'country_code' => 'US'],\n            ['name' => 'Malzeville', 'country_code' => 'FR'],\n            ['name' => 'Furtwangen im Schwarzwald', 'country_code' => 'DE'],\n            ['name' => 'Sabinanigo', 'country_code' => 'ES'],\n            ['name' => 'Gretz-Armainvilliers', 'country_code' => 'FR'],\n            ['name' => 'Unterageri', 'country_code' => 'CH'],\n            ['name' => 'Santo Domingo Petapa', 'country_code' => 'MX'],\n            ['name' => 'Abdurahmoni Jomi', 'country_code' => 'TJ'],\n            ['name' => 'Good Hope', 'country_code' => 'US'],\n            ['name' => 'Luzzara', 'country_code' => 'IT'],\n            ['name' => 'Checy', 'country_code' => 'FR'],\n            ['name' => 'Lynwood', 'country_code' => 'US'],\n            ['name' => 'Basalt', 'country_code' => 'US'],\n            ['name' => 'Ivins', 'country_code' => 'US'],\n            ['name' => 'Egg', 'country_code' => 'CH'],\n            ['name' => 'Neuhaus am Rennweg', 'country_code' => 'DE'],\n            ['name' => 'Tibana', 'country_code' => 'CO'],\n            ['name' => 'Fujisawacho-niinuma', 'country_code' => 'JP'],\n            ['name' => 'Suances', 'country_code' => 'ES'],\n            ['name' => 'Curno', 'country_code' => 'IT'],\n            ['name' => 'Wagoner', 'country_code' => 'US'],\n            ['name' => 'Elsfleth', 'country_code' => 'DE'],\n            ['name' => 'Nagaoki', 'country_code' => 'JP'],\n            ['name' => 'Olds', 'country_code' => 'CA'],\n            ['name' => 'Piriapolis', 'country_code' => 'UY'],\n            ['name' => 'Verdello', 'country_code' => 'IT'],\n            ['name' => 'Plainville', 'country_code' => 'US'],\n            ['name' => 'Zychlin', 'country_code' => 'PL'],\n            ['name' => 'Brimington', 'country_code' => 'GB'],\n            ['name' => 'Segorbe', 'country_code' => 'ES'],\n            ['name' => 'Bethel', 'country_code' => 'US'],\n            ['name' => 'Mwaline al Oued', 'country_code' => 'MA'],\n            ['name' => 'Roussillon', 'country_code' => 'FR'],\n            ['name' => 'St. Marys', 'country_code' => 'US'],\n            ['name' => 'Elwood', 'country_code' => 'US'],\n            ['name' => 'Zogno', 'country_code' => 'IT'],\n            ['name' => 'Waldheim', 'country_code' => 'DE'],\n            ['name' => 'Horokhiv', 'country_code' => 'UA'],\n            ['name' => 'San Cesario di Lecce', 'country_code' => 'IT'],\n            ['name' => 'Aratuipe', 'country_code' => 'BR'],\n            ['name' => 'Karis', 'country_code' => 'FI'],\n            ['name' => 'Salcea', 'country_code' => 'RO'],\n            ['name' => 'Timmendorfer Strand', 'country_code' => 'DE'],\n            ['name' => 'Sitio Novo de Goias', 'country_code' => 'BR'],\n            ['name' => 'Redding', 'country_code' => 'US'],\n            ['name' => 'Neuotting', 'country_code' => 'DE'],\n            ['name' => 'Bloomingdale', 'country_code' => 'US'],\n            ['name' => 'Parakar', 'country_code' => 'AM'],\n            ['name' => 'Sullivan', 'country_code' => 'US'],\n            ['name' => 'Rensselaer', 'country_code' => 'US'],\n            ['name' => 'Clifton Springs', 'country_code' => 'AU'],\n            ['name' => 'Tournan-en-Brie', 'country_code' => 'FR'],\n            ['name' => 'Tinajdad', 'country_code' => 'MA'],\n            ['name' => 'Ortenberg', 'country_code' => 'DE'],\n            ['name' => 'Petilia Policastro', 'country_code' => 'IT'],\n            ['name' => 'Mikhaylovka', 'country_code' => 'RU'],\n            ['name' => 'Hallstadt', 'country_code' => 'DE'],\n            ['name' => 'Woltersdorf', 'country_code' => 'DE'],\n            ['name' => 'Memmelsdorf', 'country_code' => 'DE'],\n            ['name' => 'Akat Amnuai', 'country_code' => 'TH'],\n            ['name' => 'Bingham', 'country_code' => 'GB'],\n            ['name' => 'Abalessa', 'country_code' => 'DZ'],\n            ['name' => 'Perkiomen', 'country_code' => 'US'],\n            ['name' => 'Audubon', 'country_code' => 'US'],\n            ['name' => 'Verdejante', 'country_code' => 'BR'],\n            ['name' => 'Aviano', 'country_code' => 'IT'],\n            ['name' => 'Calimesa', 'country_code' => 'US'],\n            ['name' => 'Dunn Loring', 'country_code' => 'US'],\n            ['name' => 'Modra', 'country_code' => 'SK'],\n            ['name' => 'Plon', 'country_code' => 'DE'],\n            ['name' => 'Monteroni d Arbia', 'country_code' => 'IT'],\n            ['name' => 'Flossmoor', 'country_code' => 'US'],\n            ['name' => 'Beckett Ridge', 'country_code' => 'US'],\n            ['name' => 'Plymouth', 'country_code' => 'US'],\n            ['name' => 'Ridgefield', 'country_code' => 'US'],\n            ['name' => 'Bruchhausen-Vilsen', 'country_code' => 'DE'],\n            ['name' => 'Shaftesbury', 'country_code' => 'GB'],\n            ['name' => 'Hooper', 'country_code' => 'US'],\n            ['name' => 'Castagneto Carducci', 'country_code' => 'IT'],\n            ['name' => 'Tombolo', 'country_code' => 'IT'],\n            ['name' => 'Minyar', 'country_code' => 'RU'],\n            ['name' => 'Rathdrum', 'country_code' => 'US'],\n            ['name' => 'Bichura', 'country_code' => 'RU'],\n            ['name' => 'Villa Chalcatongo de Hidalgo', 'country_code' => 'MX'],\n            ['name' => 'Thief River Falls', 'country_code' => 'US'],\n            ['name' => 'Kressbronn am Bodensee', 'country_code' => 'DE'],\n            ['name' => 'Canilla', 'country_code' => 'GT'],\n            ['name' => 'Thorigne-Fouillard', 'country_code' => 'FR'],\n            ['name' => 'San Zenon', 'country_code' => 'CO'],\n            ['name' => 'Fairview', 'country_code' => 'US'],\n            ['name' => 'Devnya', 'country_code' => 'BG'],\n            ['name' => 'Saint-Philbert-de-Grand-Lieu', 'country_code' => 'FR'],\n            ['name' => 'Pa in Chaf', 'country_code' => 'IR'],\n            ['name' => 'Oudover', 'country_code' => 'NL'],\n            ['name' => 'Palmeiras', 'country_code' => 'BR'],\n            ['name' => 'Katoomba', 'country_code' => 'AU'],\n            ['name' => 'Ystradgynlais', 'country_code' => 'GB'],\n            ['name' => 'Terra Roxa', 'country_code' => 'BR'],\n            ['name' => 'Urania', 'country_code' => 'BR'],\n            ['name' => 'Chadan', 'country_code' => 'RU'],\n            ['name' => 'Iijima', 'country_code' => 'JP'],\n            ['name' => 'Whitnash', 'country_code' => 'GB'],\n            ['name' => 'Fairview', 'country_code' => 'US'],\n            ['name' => 'Kisslegg', 'country_code' => 'DE'],\n            ['name' => 'Lorgues', 'country_code' => 'FR'],\n            ['name' => 'Estanzuelas', 'country_code' => 'SV'],\n            ['name' => 'Anaconda', 'country_code' => 'US'],\n            ['name' => 'Seini', 'country_code' => 'RO'],\n            ['name' => 'Duchcov', 'country_code' => 'CZ'],\n            ['name' => 'Waziers', 'country_code' => 'FR'],\n            ['name' => 'Nangis', 'country_code' => 'FR'],\n            ['name' => 'Huron East', 'country_code' => 'CA'],\n            ['name' => 'Castelnuovo Berardenga', 'country_code' => 'IT'],\n            ['name' => 'Murrells Inlet', 'country_code' => 'US'],\n            ['name' => 'Kaeng Khro', 'country_code' => 'TH'],\n            ['name' => 'Oberriet', 'country_code' => 'CH'],\n            ['name' => 'Tulbagh', 'country_code' => 'ZA'],\n            ['name' => 'Gtarna', 'country_code' => 'MA'],\n            ['name' => 'Borgholzhausen', 'country_code' => 'DE'],\n            ['name' => 'Cockermouth', 'country_code' => 'GB'],\n            ['name' => 'Grabels', 'country_code' => 'FR'],\n            ['name' => 'Velyki Luchky', 'country_code' => 'UA'],\n            ['name' => 'Binasco', 'country_code' => 'IT'],\n            ['name' => 'Union', 'country_code' => 'US'],\n            ['name' => 'Boukhralfa', 'country_code' => 'DZ'],\n            ['name' => 'Muhlhausen', 'country_code' => 'DE'],\n            ['name' => 'El Espinar', 'country_code' => 'ES'],\n            ['name' => 'Iguidiy', 'country_code' => 'MA'],\n            ['name' => 'Coutances', 'country_code' => 'FR'],\n            ['name' => 'Lachen', 'country_code' => 'CH'],\n            ['name' => 'Woodburn', 'country_code' => 'US'],\n            ['name' => 'Le Teil', 'country_code' => 'FR'],\n            ['name' => 'Challapata', 'country_code' => 'BO'],\n            ['name' => 'Elze', 'country_code' => 'DE'],\n            ['name' => 'Schulzendorf', 'country_code' => 'DE'],\n            ['name' => 'Civitella in Val di Chiana', 'country_code' => 'IT'],\n            ['name' => 'Freystadt', 'country_code' => 'DE'],\n            ['name' => 'Guardiagrele', 'country_code' => 'IT'],\n            ['name' => 'Monett', 'country_code' => 'US'],\n            ['name' => 'Cogoleto', 'country_code' => 'IT'],\n            ['name' => 'Doberlug-Kirchhain', 'country_code' => 'DE'],\n            ['name' => 'Tarusa', 'country_code' => 'RU'],\n            ['name' => 'Velden am Worthersee', 'country_code' => 'AT'],\n            ['name' => 'Bolokhovo', 'country_code' => 'RU'],\n            ['name' => 'Embalse', 'country_code' => 'AR'],\n            ['name' => 'Sangeorgiu de Mures', 'country_code' => 'RO'],\n            ['name' => 'Almagro', 'country_code' => 'PH'],\n            ['name' => 'Mnichovo Hradiste', 'country_code' => 'CZ'],\n            ['name' => 'Grinnell', 'country_code' => 'US'],\n            ['name' => 'Jersey Shore', 'country_code' => 'US'],\n            ['name' => 'Cutrofiano', 'country_code' => 'IT'],\n            ['name' => 'Grosse Pointe Farms', 'country_code' => 'US'],\n            ['name' => 'Rapid Valley', 'country_code' => 'US'],\n            ['name' => 'Thung Sai', 'country_code' => 'TH'],\n            ['name' => 'Tiachiv', 'country_code' => 'UA'],\n            ['name' => 'Kosum Phisai', 'country_code' => 'TH'],\n            ['name' => 'Linganore', 'country_code' => 'US'],\n            ['name' => 'Edgewater', 'country_code' => 'US'],\n            ['name' => 'Vergiate', 'country_code' => 'IT'],\n            ['name' => 'Nittenau', 'country_code' => 'DE'],\n            ['name' => 'Sao Jorge d Oeste', 'country_code' => 'BR'],\n            ['name' => 'Farra di Soligo', 'country_code' => 'IT'],\n            ['name' => 'Stara Tura', 'country_code' => 'SK'],\n            ['name' => 'Atmore', 'country_code' => 'US'],\n            ['name' => 'Somero', 'country_code' => 'FI'],\n            ['name' => 'Roccastrada', 'country_code' => 'IT'],\n            ['name' => 'Trissino', 'country_code' => 'IT'],\n            ['name' => 'Whitwick', 'country_code' => 'GB'],\n            ['name' => 'Felino', 'country_code' => 'IT'],\n            ['name' => 'Guananico', 'country_code' => 'DO'],\n            ['name' => 'Kharovsk', 'country_code' => 'RU'],\n            ['name' => 'Dzhalka', 'country_code' => 'RU'],\n            ['name' => 'West Caln', 'country_code' => 'US'],\n            ['name' => 'Waldenbuch', 'country_code' => 'DE'],\n            ['name' => 'Loeches', 'country_code' => 'ES'],\n            ['name' => 'Rada Tilly', 'country_code' => 'AR'],\n            ['name' => 'Economy', 'country_code' => 'US'],\n            ['name' => 'Kratovo', 'country_code' => 'RU'],\n            ['name' => 'Emerainville', 'country_code' => 'FR'],\n            ['name' => 'Villa Morelos', 'country_code' => 'MX'],\n            ['name' => 'Plymouth', 'country_code' => 'US'],\n            ['name' => 'Burton', 'country_code' => 'US'],\n            ['name' => 'Chitcani', 'country_code' => 'MD'],\n            ['name' => 'Berthoud', 'country_code' => 'US'],\n            ['name' => 'Bellerive-sur-Allier', 'country_code' => 'FR'],\n            ['name' => 'Epanomi', 'country_code' => 'GR'],\n            ['name' => 'Whitestown', 'country_code' => 'US'],\n            ['name' => 'Galbiate', 'country_code' => 'IT'],\n            ['name' => 'Portlethen', 'country_code' => 'GB'],\n            ['name' => 'Queven', 'country_code' => 'FR'],\n            ['name' => 'Breckerfeld', 'country_code' => 'DE'],\n            ['name' => 'San Elizario', 'country_code' => 'US'],\n            ['name' => 'Dillon', 'country_code' => 'US'],\n            ['name' => 'L Isle-Jourdain', 'country_code' => 'FR'],\n            ['name' => 'Herzberg', 'country_code' => 'DE'],\n            ['name' => 'Siklos', 'country_code' => 'HU'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'Tha Luang', 'country_code' => 'TH'],\n            ['name' => 'Livno', 'country_code' => 'BA'],\n            ['name' => 'Casca', 'country_code' => 'BR'],\n            ['name' => 'Tiburon', 'country_code' => 'US'],\n            ['name' => 'Monmouth', 'country_code' => 'US'],\n            ['name' => 'Silves', 'country_code' => 'BR'],\n            ['name' => 'Highland Park', 'country_code' => 'US'],\n            ['name' => 'Queensferry', 'country_code' => 'GB'],\n            ['name' => 'Sugarmill Woods', 'country_code' => 'US'],\n            ['name' => 'Grenade', 'country_code' => 'FR'],\n            ['name' => 'Dorverden', 'country_code' => 'DE'],\n            ['name' => 'Vinhais', 'country_code' => 'PT'],\n            ['name' => 'Golden Valley', 'country_code' => 'US'],\n            ['name' => 'Verkhnyaya Tura', 'country_code' => 'RU'],\n            ['name' => 'Northwest Harborcreek', 'country_code' => 'US'],\n            ['name' => 'Lancon-Provence', 'country_code' => 'FR'],\n            ['name' => 'Hoevelaken', 'country_code' => 'NL'],\n            ['name' => 'Erzhausen', 'country_code' => 'DE'],\n            ['name' => 'Kuvshinovo', 'country_code' => 'RU'],\n            ['name' => 'Lunner', 'country_code' => 'NO'],\n            ['name' => 'Chrysoupoli', 'country_code' => 'GR'],\n            ['name' => 'Muhos', 'country_code' => 'FI'],\n            ['name' => 'Waldfeucht', 'country_code' => 'DE'],\n            ['name' => 'Jeannette', 'country_code' => 'US'],\n            ['name' => 'Policka', 'country_code' => 'CZ'],\n            ['name' => 'Rafard', 'country_code' => 'BR'],\n            ['name' => 'Bellheim', 'country_code' => 'DE'],\n            ['name' => 'Marlton', 'country_code' => 'US'],\n            ['name' => 'Werneuchen', 'country_code' => 'DE'],\n            ['name' => 'Guerrero', 'country_code' => 'MX'],\n            ['name' => 'Armadale', 'country_code' => 'GB'],\n            ['name' => 'Swalmen', 'country_code' => 'NL'],\n            ['name' => 'Windermere', 'country_code' => 'GB'],\n            ['name' => 'Sutherlin', 'country_code' => 'US'],\n            ['name' => 'Had Dra', 'country_code' => 'MA'],\n            ['name' => 'Bolnisi', 'country_code' => 'GE'],\n            ['name' => 'Abcoude', 'country_code' => 'NL'],\n            ['name' => 'Khoni', 'country_code' => 'GE'],\n            ['name' => 'Wollert', 'country_code' => 'AU'],\n            ['name' => 'Picnic Point', 'country_code' => 'US'],\n            ['name' => 'Villafranca Tirrena', 'country_code' => 'IT'],\n            ['name' => 'Obernburg am Main', 'country_code' => 'DE'],\n            ['name' => 'Barrington', 'country_code' => 'US'],\n            ['name' => 'Newmarket', 'country_code' => 'US'],\n            ['name' => 'Villa Guardia', 'country_code' => 'IT'],\n            ['name' => 'Hirson', 'country_code' => 'FR'],\n            ['name' => 'Rivesaltes', 'country_code' => 'FR'],\n            ['name' => 'Seaside', 'country_code' => 'US'],\n            ['name' => 'Nort-sur-Erdre', 'country_code' => 'FR'],\n            ['name' => 'Sint-Martens-Latem', 'country_code' => 'BE'],\n            ['name' => 'Kelso', 'country_code' => 'AU'],\n            ['name' => 'Subiaco', 'country_code' => 'IT'],\n            ['name' => 'Ceprano', 'country_code' => 'IT'],\n            ['name' => 'Campogalliano', 'country_code' => 'IT'],\n            ['name' => 'Merrimac', 'country_code' => 'AU'],\n            ['name' => 'Laveno-Mombello', 'country_code' => 'IT'],\n            ['name' => 'Marshall', 'country_code' => 'US'],\n            ['name' => 'Privas', 'country_code' => 'FR'],\n            ['name' => 'North Codorus', 'country_code' => 'US'],\n            ['name' => 'Volvera', 'country_code' => 'IT'],\n            ['name' => 'Binisalem', 'country_code' => 'ES'],\n            ['name' => 'Livingston', 'country_code' => 'US'],\n            ['name' => 'Morlupo', 'country_code' => 'IT'],\n            ['name' => 'Neves Paulista', 'country_code' => 'BR'],\n            ['name' => 'Entraigues-sur-la-Sorgue', 'country_code' => 'FR'],\n            ['name' => 'Fort Polk South', 'country_code' => 'US'],\n            ['name' => 'Cherry Hinton', 'country_code' => 'GB'],\n            ['name' => 'Micco', 'country_code' => 'US'],\n            ['name' => 'Hornsea', 'country_code' => 'GB'],\n            ['name' => 'Santa Rita de Caldas', 'country_code' => 'BR'],\n            ['name' => 'Flekkefjord', 'country_code' => 'NO'],\n            ['name' => 'Kozova', 'country_code' => 'UA'],\n            ['name' => 'Puig', 'country_code' => 'ES'],\n            ['name' => 'Ballenstedt', 'country_code' => 'DE'],\n            ['name' => 'Chanute', 'country_code' => 'US'],\n            ['name' => 'Beecher', 'country_code' => 'US'],\n            ['name' => 'Linselles', 'country_code' => 'FR'],\n            ['name' => 'Rakitovo', 'country_code' => 'BG'],\n            ['name' => 'Libonik', 'country_code' => 'AL'],\n            ['name' => 'Ayr', 'country_code' => 'AU'],\n            ['name' => 'Stanley', 'country_code' => 'CA'],\n            ['name' => 'Monistrol-sur-Loire', 'country_code' => 'FR'],\n            ['name' => 'Indianola', 'country_code' => 'US'],\n            ['name' => 'San Giorgio di Piano', 'country_code' => 'IT'],\n            ['name' => 'Ferryhill', 'country_code' => 'GB'],\n            ['name' => 'Uspenka', 'country_code' => 'UA'],\n            ['name' => 'Brewer', 'country_code' => 'US'],\n            ['name' => 'Sande', 'country_code' => 'DE'],\n            ['name' => 'Candeal', 'country_code' => 'BR'],\n            ['name' => 'Albinea', 'country_code' => 'IT'],\n            ['name' => 'Corozal', 'country_code' => 'PR'],\n            ['name' => 'La Grange', 'country_code' => 'US'],\n            ['name' => 'McFarland', 'country_code' => 'US'],\n            ['name' => 'Silver Springs Shores', 'country_code' => 'US'],\n            ['name' => 'Shelby', 'country_code' => 'US'],\n            ['name' => 'Weare', 'country_code' => 'US'],\n            ['name' => 'Rhymney', 'country_code' => 'GB'],\n            ['name' => 'Pineville', 'country_code' => 'US'],\n            ['name' => 'Wervershoof', 'country_code' => 'NL'],\n            ['name' => 'Thap Than', 'country_code' => 'TH'],\n            ['name' => 'Tregueux', 'country_code' => 'FR'],\n            ['name' => 'Montalto di Castro', 'country_code' => 'IT'],\n            ['name' => 'Sint-Amands', 'country_code' => 'BE'],\n            ['name' => 'Cavenago di Brianza', 'country_code' => 'IT'],\n            ['name' => 'La Ricamarie', 'country_code' => 'FR'],\n            ['name' => 'Woodway', 'country_code' => 'US'],\n            ['name' => 'Queimada Nova', 'country_code' => 'BR'],\n            ['name' => 'Oakbrook', 'country_code' => 'US'],\n            ['name' => 'Valley Cottage', 'country_code' => 'US'],\n            ['name' => 'Lindstrom', 'country_code' => 'US'],\n            ['name' => 'Littleport', 'country_code' => 'GB'],\n            ['name' => 'Pomichna', 'country_code' => 'UA'],\n            ['name' => 'Shiprock', 'country_code' => 'US'],\n            ['name' => 'Zawyat Sidi al Mekki', 'country_code' => 'MA'],\n            ['name' => 'Cinderford', 'country_code' => 'GB'],\n            ['name' => 'Babadag', 'country_code' => 'RO'],\n            ['name' => 'St. Anthony', 'country_code' => 'US'],\n            ['name' => 'Busteni', 'country_code' => 'RO'],\n            ['name' => 'Peymeinade', 'country_code' => 'FR'],\n            ['name' => 'Jauru', 'country_code' => 'BR'],\n            ['name' => 'Koekelare', 'country_code' => 'BE'],\n            ['name' => 'Uricani', 'country_code' => 'RO'],\n            ['name' => 'Presque Isle', 'country_code' => 'US'],\n            ['name' => 'East Haddam', 'country_code' => 'US'],\n            ['name' => 'Manzanares el Real', 'country_code' => 'ES'],\n            ['name' => 'Worplesdon', 'country_code' => 'GB'],\n            ['name' => 'Volkach', 'country_code' => 'DE'],\n            ['name' => 'Karkkila', 'country_code' => 'FI'],\n            ['name' => 'Puerto Octay', 'country_code' => 'CL'],\n            ['name' => 'Engerwitzdorf', 'country_code' => 'AT'],\n            ['name' => 'Ochsenhausen', 'country_code' => 'DE'],\n            ['name' => 'Hamlin', 'country_code' => 'US'],\n            ['name' => 'Santa Venerina', 'country_code' => 'IT'],\n            ['name' => 'San Francisco Ixhuatan', 'country_code' => 'MX'],\n            ['name' => 'Saint-Germain-les-Corbeil', 'country_code' => 'FR'],\n            ['name' => 'Manteno', 'country_code' => 'US'],\n            ['name' => 'Yelnya', 'country_code' => 'RU'],\n            ['name' => 'Vera Cruz do Oeste', 'country_code' => 'BR'],\n            ['name' => 'Pocrane', 'country_code' => 'BR'],\n            ['name' => 'Lake Mohawk', 'country_code' => 'US'],\n            ['name' => 'Crest', 'country_code' => 'FR'],\n            ['name' => 'Wenzenbach', 'country_code' => 'DE'],\n            ['name' => 'Mbamba Bay', 'country_code' => 'TZ'],\n            ['name' => 'Dexter', 'country_code' => 'US'],\n            ['name' => 'Diss', 'country_code' => 'GB'],\n            ['name' => 'Delta', 'country_code' => 'US'],\n            ['name' => 'Szentgotthard', 'country_code' => 'HU'],\n            ['name' => 'Foum Zguid', 'country_code' => 'MA'],\n            ['name' => 'Smimou', 'country_code' => 'MA'],\n            ['name' => 'Dobris', 'country_code' => 'CZ'],\n            ['name' => 'Chamical', 'country_code' => 'AR'],\n            ['name' => 'Chop', 'country_code' => 'UA'],\n            ['name' => 'Fully', 'country_code' => 'CH'],\n            ['name' => 'Piovene Rocchette', 'country_code' => 'IT'],\n            ['name' => 'Mechanicsburg', 'country_code' => 'US'],\n            ['name' => 'Albion', 'country_code' => 'US'],\n            ['name' => 'Chyhyryn', 'country_code' => 'UA'],\n            ['name' => 'Merstham', 'country_code' => 'GB'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Domerat', 'country_code' => 'FR'],\n            ['name' => 'Tepechitlan', 'country_code' => 'MX'],\n            ['name' => 'Banak', 'country_code' => 'IR'],\n            ['name' => 'Haiku-Pauwela', 'country_code' => 'US'],\n            ['name' => 'Vel ky Meder', 'country_code' => 'SK'],\n            ['name' => 'Skidaway Island', 'country_code' => 'US'],\n            ['name' => 'LaSalle', 'country_code' => 'US']\n        ]);\n    DB::table('cities')->insert([\n            ['name' => 'Fairfield Glade', 'country_code' => 'US'],\n            ['name' => 'Belleville', 'country_code' => 'FR'],\n            ['name' => 'Waseca', 'country_code' => 'US'],\n            ['name' => 'Fehrbellin', 'country_code' => 'DE'],\n            ['name' => 'Breganze', 'country_code' => 'IT'],\n            ['name' => 'Psyzh', 'country_code' => 'RU'],\n            ['name' => 'Chocen', 'country_code' => 'CZ'],\n            ['name' => 'Sarlat-la-Caneda', 'country_code' => 'FR'],\n            ['name' => 'Great Cornard', 'country_code' => 'GB'],\n            ['name' => 'Terville', 'country_code' => 'FR'],\n            ['name' => 'Potiragua', 'country_code' => 'BR'],\n            ['name' => 'Monastyryshche', 'country_code' => 'UA'],\n            ['name' => 'Marguerittes', 'country_code' => 'FR'],\n            ['name' => 'Garching an der Alz', 'country_code' => 'DE'],\n            ['name' => 'Murphysboro', 'country_code' => 'US'],\n            ['name' => 'Santo Tomas de los Platanos', 'country_code' => 'MX'],\n            ['name' => 'East Nottingham', 'country_code' => 'US'],\n            ['name' => 'Bumbesti-Jiu', 'country_code' => 'RO'],\n            ['name' => 'Florstadt', 'country_code' => 'DE'],\n            ['name' => 'Nuqui', 'country_code' => 'CO'],\n            ['name' => 'Noisy-le-Roi', 'country_code' => 'FR'],\n            ['name' => 'Morpara', 'country_code' => 'BR'],\n            ['name' => 'Fallston', 'country_code' => 'US'],\n            ['name' => 'Triangle', 'country_code' => 'US'],\n            ['name' => 'Saint-Vallier', 'country_code' => 'FR'],\n            ['name' => 'San Pablo Villa de Mitla', 'country_code' => 'MX'],\n            ['name' => 'Kui Buri', 'country_code' => 'TH'],\n            ['name' => 'Kiskunlachaza', 'country_code' => 'HU'],\n            ['name' => 'Borgo', 'country_code' => 'FR'],\n            ['name' => 'Chester', 'country_code' => 'US'],\n            ['name' => 'Sabaoani', 'country_code' => 'RO'],\n            ['name' => 'Horden', 'country_code' => 'GB'],\n            ['name' => 'Vicopisano', 'country_code' => 'IT'],\n            ['name' => 'Minerbio', 'country_code' => 'IT'],\n            ['name' => 'Parque del Plata', 'country_code' => 'UY'],\n            ['name' => 'Derby', 'country_code' => 'US'],\n            ['name' => 'Penetanguishene', 'country_code' => 'CA'],\n            ['name' => 'Byfleet', 'country_code' => 'GB'],\n            ['name' => 'Ala', 'country_code' => 'IT'],\n            ['name' => 'Schleiz', 'country_code' => 'DE'],\n            ['name' => 'Lacombe', 'country_code' => 'US'],\n            ['name' => 'Povarovo', 'country_code' => 'RU'],\n            ['name' => 'Felida', 'country_code' => 'US'],\n            ['name' => 'Dashouping', 'country_code' => 'CN'],\n            ['name' => 'Velaux', 'country_code' => 'FR'],\n            ['name' => 'Tlumach', 'country_code' => 'UA'],\n            ['name' => 'Macedon', 'country_code' => 'US'],\n            ['name' => 'Itapiranga', 'country_code' => 'BR'],\n            ['name' => 'Naunhof', 'country_code' => 'DE'],\n            ['name' => 'Entre Ijuis', 'country_code' => 'BR'],\n            ['name' => 'Airola', 'country_code' => 'IT'],\n            ['name' => 'Kusterdingen', 'country_code' => 'DE'],\n            ['name' => 'Thames', 'country_code' => 'NZ'],\n            ['name' => 'Rain', 'country_code' => 'DE'],\n            ['name' => 'Sekimachi', 'country_code' => 'JP'],\n            ['name' => 'Eslohe', 'country_code' => 'DE'],\n            ['name' => 'Hermsdorf', 'country_code' => 'DE'],\n            ['name' => 'Summit', 'country_code' => 'US'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'Salach', 'country_code' => 'DE'],\n            ['name' => 'Auerbach', 'country_code' => 'DE'],\n            ['name' => 'Qualicum Beach', 'country_code' => 'CA'],\n            ['name' => 'Tepetitlan', 'country_code' => 'MX'],\n            ['name' => 'Floro', 'country_code' => 'NO'],\n            ['name' => 'Neuville-sur-Saone', 'country_code' => 'FR'],\n            ['name' => 'San Ramon', 'country_code' => 'UY'],\n            ['name' => 'Almagro', 'country_code' => 'ES'],\n            ['name' => 'Sautron', 'country_code' => 'FR'],\n            ['name' => 'Hanko', 'country_code' => 'FI'],\n            ['name' => 'Lake Arrowhead', 'country_code' => 'US'],\n            ['name' => 'Clusone', 'country_code' => 'IT'],\n            ['name' => 'Paulo de Faria', 'country_code' => 'BR'],\n            ['name' => 'Iskourane', 'country_code' => 'MA'],\n            ['name' => 'Oakwood', 'country_code' => 'US'],\n            ['name' => 'Bockhorn', 'country_code' => 'DE'],\n            ['name' => 'Sturgeon Bay', 'country_code' => 'US'],\n            ['name' => 'Mikhaylovsk', 'country_code' => 'RU'],\n            ['name' => 'Deutsch-Wagram', 'country_code' => 'AT'],\n            ['name' => 'Harrisburg', 'country_code' => 'US'],\n            ['name' => 'Liman', 'country_code' => 'AZ'],\n            ['name' => 'Eceabat', 'country_code' => 'TR'],\n            ['name' => 'Independence', 'country_code' => 'US'],\n            ['name' => 'Meine', 'country_code' => 'DE'],\n            ['name' => 'Quibala', 'country_code' => 'AO'],\n            ['name' => 'Taxkorgan', 'country_code' => 'CN'],\n            ['name' => 'Jouy-en-Josas', 'country_code' => 'FR'],\n            ['name' => 'Lequile', 'country_code' => 'IT'],\n            ['name' => 'Forestdale', 'country_code' => 'US'],\n            ['name' => 'San Giuseppe Iato', 'country_code' => 'IT'],\n            ['name' => 'Capri', 'country_code' => 'IT'],\n            ['name' => 'Achacachi', 'country_code' => 'BO'],\n            ['name' => 'Orte', 'country_code' => 'IT'],\n            ['name' => 'Suoyarvi', 'country_code' => 'RU'],\n            ['name' => 'Nordheim', 'country_code' => 'DE'],\n            ['name' => 'Serafimovich', 'country_code' => 'RU'],\n            ['name' => 'Hilzingen', 'country_code' => 'DE'],\n            ['name' => 'Boonton', 'country_code' => 'US'],\n            ['name' => 'Penig', 'country_code' => 'DE'],\n            ['name' => 'Camenca', 'country_code' => 'MD'],\n            ['name' => 'Ilarionove', 'country_code' => 'UA'],\n            ['name' => 'Oak Grove', 'country_code' => 'US'],\n            ['name' => 'Harrodsburg', 'country_code' => 'US'],\n            ['name' => 'Sheffield Lake', 'country_code' => 'US'],\n            ['name' => 'Saint-Chamas', 'country_code' => 'FR'],\n            ['name' => 'Pedrinhas', 'country_code' => 'BR'],\n            ['name' => 'Morada Nova de Minas', 'country_code' => 'BR'],\n            ['name' => 'Silleda', 'country_code' => 'ES'],\n            ['name' => 'Tarrafas', 'country_code' => 'BR'],\n            ['name' => 'Topchikha', 'country_code' => 'RU'],\n            ['name' => 'Malhada de Pedras', 'country_code' => 'BR'],\n            ['name' => 'Szerencs', 'country_code' => 'HU'],\n            ['name' => 'Baia da Traicao', 'country_code' => 'BR'],\n            ['name' => 'Cedar Hills', 'country_code' => 'US'],\n            ['name' => 'Belsh', 'country_code' => 'AL'],\n            ['name' => 'Upper Leacock', 'country_code' => 'US'],\n            ['name' => 'Ararat', 'country_code' => 'AU'],\n            ['name' => 'Kozlovka', 'country_code' => 'RU'],\n            ['name' => 'Ait Ouaoumana', 'country_code' => 'MA'],\n            ['name' => 'Aledo', 'country_code' => 'US'],\n            ['name' => 'Makhambet', 'country_code' => 'KZ'],\n            ['name' => 'Sellersburg', 'country_code' => 'US'],\n            ['name' => 'Cordisburgo', 'country_code' => 'BR'],\n            ['name' => 'Charters Towers', 'country_code' => 'AU'],\n            ['name' => 'Stadtilm', 'country_code' => 'DE'],\n            ['name' => 'Blanchard', 'country_code' => 'US'],\n            ['name' => 'Wattwil', 'country_code' => 'CH'],\n            ['name' => 'San Jose de Gracia', 'country_code' => 'MX'],\n            ['name' => 'Takua Pa', 'country_code' => 'TH'],\n            ['name' => 'Lisbon', 'country_code' => 'US'],\n            ['name' => 'Southside', 'country_code' => 'US'],\n            ['name' => 'Whitehouse', 'country_code' => 'US'],\n            ['name' => 'Sadanga', 'country_code' => 'PH'],\n            ['name' => 'Merrydale', 'country_code' => 'US'],\n            ['name' => 'Polaniec', 'country_code' => 'PL'],\n            ['name' => 'South Abington', 'country_code' => 'US'],\n            ['name' => 'Castelnuovo di Magra', 'country_code' => 'IT'],\n            ['name' => 'Alvarado', 'country_code' => 'CO'],\n            ['name' => 'Ait Ikkou', 'country_code' => 'MA'],\n            ['name' => 'Caister-on-Sea', 'country_code' => 'GB'],\n            ['name' => 'Sheffield', 'country_code' => 'US'],\n            ['name' => 'St. Albans', 'country_code' => 'US'],\n            ['name' => 'Brejao', 'country_code' => 'BR'],\n            ['name' => 'Msemrir', 'country_code' => 'MA'],\n            ['name' => 'Pudozh', 'country_code' => 'RU'],\n            ['name' => 'Minervino Murge', 'country_code' => 'IT'],\n            ['name' => 'Pittsgrove', 'country_code' => 'US'],\n            ['name' => 'Sao Sebastiao da Amoreira', 'country_code' => 'BR'],\n            ['name' => 'Langenzersdorf', 'country_code' => 'AT'],\n            ['name' => 'Rossano Veneto', 'country_code' => 'IT'],\n            ['name' => 'Ouricangas', 'country_code' => 'BR'],\n            ['name' => 'Rainworth', 'country_code' => 'GB'],\n            ['name' => 'Koror', 'country_code' => 'PW'],\n            ['name' => 'Septemvri', 'country_code' => 'BG'],\n            ['name' => 'Rye', 'country_code' => 'AU'],\n            ['name' => 'Santa Maria Xadani', 'country_code' => 'MX'],\n            ['name' => 'Bad Schussenried', 'country_code' => 'DE'],\n            ['name' => 'Landstuhl', 'country_code' => 'DE'],\n            ['name' => 'O Hara', 'country_code' => 'US'],\n            ['name' => 'Oakland', 'country_code' => 'US'],\n            ['name' => 'San Isidro', 'country_code' => 'PH'],\n            ['name' => 'West Haven-Sylvan', 'country_code' => 'US'],\n            ['name' => 'Innsbrook', 'country_code' => 'US'],\n            ['name' => 'Rodelas', 'country_code' => 'BR'],\n            ['name' => 'Imilchil', 'country_code' => 'MA'],\n            ['name' => 'Marilandia do Sul', 'country_code' => 'BR'],\n            ['name' => 'Palhano', 'country_code' => 'BR'],\n            ['name' => 'Bad Lauchstadt', 'country_code' => 'DE'],\n            ['name' => 'Anaurilandia', 'country_code' => 'BR'],\n            ['name' => 'Evergreen', 'country_code' => 'US'],\n            ['name' => 'Kolbuszowa', 'country_code' => 'PL'],\n            ['name' => 'Vif', 'country_code' => 'FR'],\n            ['name' => 'San Joaquin', 'country_code' => 'MX'],\n            ['name' => 'Bad Bergzabern', 'country_code' => 'DE'],\n            ['name' => 'Logan', 'country_code' => 'US'],\n            ['name' => 'Vrable', 'country_code' => 'SK'],\n            ['name' => 'Gilgit', 'country_code' => 'PK'],\n            ['name' => 'Nova Bassano', 'country_code' => 'BR'],\n            ['name' => 'Ak ordat', 'country_code' => 'ER'],\n            ['name' => 'El Chol', 'country_code' => 'GT'],\n            ['name' => 'Nierstein', 'country_code' => 'DE'],\n            ['name' => 'Rignano sull Arno', 'country_code' => 'IT'],\n            ['name' => 'Piliscsaba', 'country_code' => 'HU'],\n            ['name' => 'Ciudad Cerralvo', 'country_code' => 'MX'],\n            ['name' => 'Lenox', 'country_code' => 'US'],\n            ['name' => 'Gresham Park', 'country_code' => 'US'],\n            ['name' => 'Foritz', 'country_code' => 'DE'],\n            ['name' => 'Oulad Rahal', 'country_code' => 'MA'],\n            ['name' => 'Loenen', 'country_code' => 'NL'],\n            ['name' => 'Bang Mun Nak', 'country_code' => 'TH'],\n            ['name' => 'Bom Jardim de Goias', 'country_code' => 'BR'],\n            ['name' => 'Congonhinhas', 'country_code' => 'BR'],\n            ['name' => 'Bussy', 'country_code' => 'CH'],\n            ['name' => 'Bouhlou', 'country_code' => 'MA'],\n            ['name' => 'Buda-Kashalyova', 'country_code' => 'BY'],\n            ['name' => 'Neya', 'country_code' => 'RU'],\n            ['name' => 'Barth', 'country_code' => 'DE'],\n            ['name' => 'Iaboutene', 'country_code' => 'MA'],\n            ['name' => 'Notre-Dame-des-Prairies', 'country_code' => 'CA'],\n            ['name' => 'Polesworth', 'country_code' => 'GB'],\n            ['name' => 'Vallecrosia', 'country_code' => 'IT'],\n            ['name' => 'Weilmunster', 'country_code' => 'DE'],\n            ['name' => 'Hamilton', 'country_code' => 'US'],\n            ['name' => 'Brecon', 'country_code' => 'GB'],\n            ['name' => 'Hemmoor', 'country_code' => 'DE'],\n            ['name' => 'Erchie', 'country_code' => 'IT'],\n            ['name' => 'West Perth', 'country_code' => 'CA'],\n            ['name' => 'Vestigne', 'country_code' => 'IT'],\n            ['name' => 'Poteau', 'country_code' => 'US'],\n            ['name' => 'Tona', 'country_code' => 'ES'],\n            ['name' => 'Ponta do Sol', 'country_code' => 'PT'],\n            ['name' => 'Old Orchard Beach', 'country_code' => 'US'],\n            ['name' => 'Taftanaz', 'country_code' => 'SY'],\n            ['name' => 'Moe', 'country_code' => 'AU'],\n            ['name' => 'Roetgen', 'country_code' => 'DE'],\n            ['name' => 'Cabo Rojo', 'country_code' => 'PR'],\n            ['name' => 'Agadir Melloul', 'country_code' => 'MA'],\n            ['name' => 'Douglas', 'country_code' => 'US'],\n            ['name' => 'New Prague', 'country_code' => 'US'],\n            ['name' => 'Cheste', 'country_code' => 'ES'],\n            ['name' => 'Lajedo do Tabocal', 'country_code' => 'BR'],\n            ['name' => 'Vaujours', 'country_code' => 'FR'],\n            ['name' => 'Sao Jose da Bela Vista', 'country_code' => 'BR'],\n            ['name' => 'Rreshen', 'country_code' => 'AL'],\n            ['name' => 'Pa Sang', 'country_code' => 'TH'],\n            ['name' => 'Taragi', 'country_code' => 'JP'],\n            ['name' => 'Jackson', 'country_code' => 'US'],\n            ['name' => 'Soeda', 'country_code' => 'JP'],\n            ['name' => 'Icaraima', 'country_code' => 'BR'],\n            ['name' => 'Woodbury', 'country_code' => 'US'],\n            ['name' => 'Kodiak', 'country_code' => 'US'],\n            ['name' => 'Kirk of Shotts', 'country_code' => 'GB'],\n            ['name' => 'Schwarzenbruck', 'country_code' => 'DE'],\n            ['name' => 'Cordeiros', 'country_code' => 'BR'],\n            ['name' => 'San Lorenzo de Descardazar', 'country_code' => 'ES'],\n            ['name' => 'Pratapolis', 'country_code' => 'BR'],\n            ['name' => 'Guichen', 'country_code' => 'FR'],\n            ['name' => 'Deniliquin', 'country_code' => 'AU'],\n            ['name' => 'Pibrac', 'country_code' => 'FR'],\n            ['name' => 'Cuggiono', 'country_code' => 'IT'],\n            ['name' => 'Guamiranga', 'country_code' => 'BR'],\n            ['name' => 'Altenerding', 'country_code' => 'DE'],\n            ['name' => 'Castelnuovo di Porto', 'country_code' => 'IT'],\n            ['name' => 'Aliquippa', 'country_code' => 'US'],\n            ['name' => 'Valle de Guadalupe', 'country_code' => 'MX'],\n            ['name' => 'Bridgeport', 'country_code' => 'US'],\n            ['name' => 'Grossbottwar', 'country_code' => 'DE'],\n            ['name' => 'Crolles', 'country_code' => 'FR'],\n            ['name' => 'Berkeley', 'country_code' => 'US'],\n            ['name' => 'Dinxperlo', 'country_code' => 'NL'],\n            ['name' => 'Efringen-Kirchen', 'country_code' => 'DE'],\n            ['name' => 'Santa Barbara do Sul', 'country_code' => 'BR'],\n            ['name' => 'Riverdale', 'country_code' => 'US'],\n            ['name' => 'Phimai', 'country_code' => 'TH'],\n            ['name' => 'Darley', 'country_code' => 'AU'],\n            ['name' => 'Lower Swatara', 'country_code' => 'US'],\n            ['name' => 'Coutras', 'country_code' => 'FR'],\n            ['name' => 'Amarzgane', 'country_code' => 'MA'],\n            ['name' => 'Shopokov', 'country_code' => 'KG'],\n            ['name' => 'Pianella', 'country_code' => 'IT'],\n            ['name' => 'Uhldingen-Muhlhofen', 'country_code' => 'DE'],\n            ['name' => 'Zoeterwoude', 'country_code' => 'NL'],\n            ['name' => 'Covington', 'country_code' => 'US'],\n            ['name' => 'Barlin', 'country_code' => 'FR'],\n            ['name' => 'Horice', 'country_code' => 'CZ'],\n            ['name' => 'Dornstadt', 'country_code' => 'DE'],\n            ['name' => 'Mkazi', 'country_code' => 'KM'],\n            ['name' => 'Sonsbeck', 'country_code' => 'DE'],\n            ['name' => 'Balsamo', 'country_code' => 'BR'],\n            ['name' => 'Castelbuono', 'country_code' => 'IT'],\n            ['name' => 'El Marmouta', 'country_code' => 'MA'],\n            ['name' => 'Rhinelander', 'country_code' => 'US'],\n            ['name' => 'Seabrook', 'country_code' => 'US'],\n            ['name' => 'San Jacinto', 'country_code' => 'UY'],\n            ['name' => 'Otaki', 'country_code' => 'JP'],\n            ['name' => 'Chartres-de-Bretagne', 'country_code' => 'FR'],\n            ['name' => 'Ville Platte', 'country_code' => 'US'],\n            ['name' => 'Cavan Monaghan', 'country_code' => 'CA'],\n            ['name' => 'Olmsted Falls', 'country_code' => 'US'],\n            ['name' => 'Boville Ernica', 'country_code' => 'IT'],\n            ['name' => 'Woodbridge', 'country_code' => 'US'],\n            ['name' => 'Mansfeld', 'country_code' => 'DE'],\n            ['name' => 'Glencoe', 'country_code' => 'US'],\n            ['name' => 'Lyaskovets', 'country_code' => 'BG'],\n            ['name' => 'Kryzhopil', 'country_code' => 'UA'],\n            ['name' => 'Poisy', 'country_code' => 'FR'],\n            ['name' => 'Orange Park', 'country_code' => 'US'],\n            ['name' => 'Agnita', 'country_code' => 'RO'],\n            ['name' => 'Murzzuschlag', 'country_code' => 'AT'],\n            ['name' => 'Kumphawapi', 'country_code' => 'TH'],\n            ['name' => 'Semily', 'country_code' => 'CZ'],\n            ['name' => 'Krumovgrad', 'country_code' => 'BG'],\n            ['name' => 'Guajeru', 'country_code' => 'BR'],\n            ['name' => 'Canal Winchester', 'country_code' => 'US'],\n            ['name' => 'Absecon', 'country_code' => 'US'],\n            ['name' => 'Kappeln', 'country_code' => 'DE'],\n            ['name' => 'Yacimiento Rio Turbio', 'country_code' => 'AR'],\n            ['name' => 'Yang Talat', 'country_code' => 'TH'],\n            ['name' => 'Mazingarbe', 'country_code' => 'FR'],\n            ['name' => 'Glens Falls North', 'country_code' => 'US'],\n            ['name' => 'Palm Beach', 'country_code' => 'US'],\n            ['name' => 'Origgio', 'country_code' => 'IT'],\n            ['name' => 'Venelles', 'country_code' => 'FR'],\n            ['name' => 'Casarsa della Delizia', 'country_code' => 'IT'],\n            ['name' => 'Soltsy', 'country_code' => 'RU'],\n            ['name' => 'Caimanera', 'country_code' => 'CU'],\n            ['name' => 'West Donegal', 'country_code' => 'US'],\n            ['name' => 'Gorodovikovsk', 'country_code' => 'RU'],\n            ['name' => 'Ban Na', 'country_code' => 'TH'],\n            ['name' => 'Balatonalmadi', 'country_code' => 'HU'],\n            ['name' => 'Rochford', 'country_code' => 'GB'],\n            ['name' => 'Nam Som', 'country_code' => 'TH'],\n            ['name' => 'Molbergen', 'country_code' => 'DE'],\n            ['name' => 'Old Colwyn', 'country_code' => 'GB'],\n            ['name' => 'Cedral', 'country_code' => 'BR'],\n            ['name' => 'Dentergem', 'country_code' => 'BE'],\n            ['name' => 'Topsham', 'country_code' => 'US'],\n            ['name' => 'Tiqqi', 'country_code' => 'MA'],\n            ['name' => 'Armazem', 'country_code' => 'BR'],\n            ['name' => 'Pribor', 'country_code' => 'CZ'],\n            ['name' => 'Saint-Jean-de-Monts', 'country_code' => 'FR'],\n            ['name' => 'Nanzhangcheng', 'country_code' => 'CN'],\n            ['name' => 'Kuhmo', 'country_code' => 'FI'],\n            ['name' => 'Sidi Dahbi', 'country_code' => 'MA'],\n            ['name' => 'Heek', 'country_code' => 'DE'],\n            ['name' => 'Tordesillas', 'country_code' => 'ES'],\n            ['name' => 'North Sarasota', 'country_code' => 'US'],\n            ['name' => 'Tomazina', 'country_code' => 'BR'],\n            ['name' => 'Hurtgenwald', 'country_code' => 'DE'],\n            ['name' => 'Hassi Berkane', 'country_code' => 'MA'],\n            ['name' => 'Iles', 'country_code' => 'CO'],\n            ['name' => 'Flieden', 'country_code' => 'DE'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Richmond Heights', 'country_code' => 'US'],\n            ['name' => 'Redencao do Gurgueia', 'country_code' => 'BR'],\n            ['name' => 'Oakville', 'country_code' => 'US'],\n            ['name' => 'Kukrahill', 'country_code' => 'NI'],\n            ['name' => 'Santa Barbara', 'country_code' => 'MX'],\n            ['name' => 'Arnprior', 'country_code' => 'CA'],\n            ['name' => 'Clanton', 'country_code' => 'US'],\n            ['name' => 'Borsdorf', 'country_code' => 'DE'],\n            ['name' => 'Conthey', 'country_code' => 'CH'],\n            ['name' => 'Prata di Pordenone', 'country_code' => 'IT'],\n            ['name' => 'Bad Sooden-Allendorf', 'country_code' => 'DE'],\n            ['name' => 'Heel', 'country_code' => 'NL'],\n            ['name' => 'Padul', 'country_code' => 'ES'],\n            ['name' => 'Roznov', 'country_code' => 'RO'],\n            ['name' => 'Mariinskiy Posad', 'country_code' => 'RU'],\n            ['name' => 'Tirschenreuth', 'country_code' => 'DE'],\n            ['name' => 'Kuppenheim', 'country_code' => 'DE'],\n            ['name' => 'Belozersk', 'country_code' => 'RU'],\n            ['name' => 'Saint-Marcellin', 'country_code' => 'FR'],\n            ['name' => 'Araguacu', 'country_code' => 'BR'],\n            ['name' => 'Iernut', 'country_code' => 'RO'],\n            ['name' => 'Zapatoca', 'country_code' => 'CO'],\n            ['name' => 'Airmont', 'country_code' => 'US'],\n            ['name' => 'Quakertown', 'country_code' => 'US'],\n            ['name' => 'Walmer', 'country_code' => 'GB'],\n            ['name' => 'Hausham', 'country_code' => 'DE'],\n            ['name' => 'Tleta Taghramt', 'country_code' => 'MA'],\n            ['name' => 'Kleinostheim', 'country_code' => 'DE'],\n            ['name' => 'Sodankyla', 'country_code' => 'FI'],\n            ['name' => 'Jacou', 'country_code' => 'FR'],\n            ['name' => 'Les Angles', 'country_code' => 'FR'],\n            ['name' => 'Esopus', 'country_code' => 'US'],\n            ['name' => 'Castiglione Olona', 'country_code' => 'IT'],\n            ['name' => 'Smiths Falls', 'country_code' => 'CA'],\n            ['name' => 'Monson', 'country_code' => 'US'],\n            ['name' => 'Citrus Springs', 'country_code' => 'US'],\n            ['name' => 'Villamediana de Iregua', 'country_code' => 'ES'],\n            ['name' => 'San Esteban', 'country_code' => 'PH'],\n            ['name' => 'Miyada', 'country_code' => 'JP'],\n            ['name' => 'Seebad Heringsdorf', 'country_code' => 'DE'],\n            ['name' => 'Bad Rothenfelde', 'country_code' => 'DE'],\n            ['name' => 'Jarny', 'country_code' => 'FR'],\n            ['name' => 'Monte San Savino', 'country_code' => 'IT'],\n            ['name' => 'Azandarian', 'country_code' => 'IR'],\n            ['name' => 'Lubuagan', 'country_code' => 'PH'],\n            ['name' => 'Redovan', 'country_code' => 'ES'],\n            ['name' => 'Mucheln', 'country_code' => 'DE'],\n            ['name' => 'Villas', 'country_code' => 'US'],\n            ['name' => 'Falaise', 'country_code' => 'FR'],\n            ['name' => 'Jesus Nazareno', 'country_code' => 'AR'],\n            ['name' => 'Berching', 'country_code' => 'DE'],\n            ['name' => 'Tagapul-an', 'country_code' => 'PH'],\n            ['name' => 'Frankfort Square', 'country_code' => 'US'],\n            ['name' => 'Monsenhor Paulo', 'country_code' => 'BR'],\n            ['name' => 'Santa Isabel do Ivai', 'country_code' => 'BR'],\n            ['name' => 'Upholland', 'country_code' => 'GB'],\n            ['name' => 'Pont-l Abbe', 'country_code' => 'FR'],\n            ['name' => 'Wharton', 'country_code' => 'US'],\n            ['name' => 'Redlands', 'country_code' => 'US'],\n            ['name' => 'Dionisio', 'country_code' => 'BR'],\n            ['name' => 'Stillwater', 'country_code' => 'US'],\n            ['name' => 'Hajdudorog', 'country_code' => 'HU'],\n            ['name' => 'South Kensington', 'country_code' => 'US'],\n            ['name' => 'Calbe', 'country_code' => 'DE'],\n            ['name' => 'Tashir', 'country_code' => 'AM'],\n            ['name' => 'Llagostera', 'country_code' => 'ES'],\n            ['name' => 'Fara Gera d Adda', 'country_code' => 'IT'],\n            ['name' => 'Canonsburg', 'country_code' => 'US'],\n            ['name' => 'Sandrigo', 'country_code' => 'IT'],\n            ['name' => 'Edgewood', 'country_code' => 'US'],\n            ['name' => 'Seyssins', 'country_code' => 'FR'],\n            ['name' => 'Graham', 'country_code' => 'US'],\n            ['name' => 'Tifra', 'country_code' => 'DZ'],\n            ['name' => 'Solarino', 'country_code' => 'IT'],\n            ['name' => 'Hainichen', 'country_code' => 'DE'],\n            ['name' => 'Serra dos Aimores', 'country_code' => 'BR'],\n            ['name' => 'New Albany', 'country_code' => 'US'],\n            ['name' => 'Clarendon Hills', 'country_code' => 'US'],\n            ['name' => 'Needles', 'country_code' => 'US'],\n            ['name' => 'Hausjarvi', 'country_code' => 'FI'],\n            ['name' => 'Uzes', 'country_code' => 'FR'],\n            ['name' => 'Forst', 'country_code' => 'DE'],\n            ['name' => 'Saint-Jean-d Illac', 'country_code' => 'FR'],\n            ['name' => 'Porkhov', 'country_code' => 'RU'],\n            ['name' => 'Amalou', 'country_code' => 'DZ'],\n            ['name' => 'Vasarosnameny', 'country_code' => 'HU'],\n            ['name' => 'Pino Troinese', 'country_code' => 'IT'],\n            ['name' => 'Norton Canes', 'country_code' => 'GB'],\n            ['name' => 'Nossa Senhora dos Remedios', 'country_code' => 'BR'],\n            ['name' => 'Roverbella', 'country_code' => 'IT'],\n            ['name' => 'Stainz', 'country_code' => 'AT'],\n            ['name' => 'Hernani', 'country_code' => 'PH'],\n            ['name' => 'Ibirapua', 'country_code' => 'BR'],\n            ['name' => 'Junin', 'country_code' => 'CO'],\n            ['name' => 'Obertraubling', 'country_code' => 'DE'],\n            ['name' => 'Ripponden', 'country_code' => 'GB'],\n            ['name' => 'Santa Lucia', 'country_code' => 'BR'],\n            ['name' => 'Steti', 'country_code' => 'CZ'],\n            ['name' => 'Volchansk', 'country_code' => 'RU'],\n            ['name' => 'Belo Pole', 'country_code' => 'BG'],\n            ['name' => 'Lincoln', 'country_code' => 'NZ'],\n            ['name' => 'Gremyachinsk', 'country_code' => 'RU'],\n            ['name' => 'Hemmingen', 'country_code' => 'DE'],\n            ['name' => 'Pitman', 'country_code' => 'US'],\n            ['name' => 'Rock Falls', 'country_code' => 'US'],\n            ['name' => 'Baraolt', 'country_code' => 'RO'],\n            ['name' => 'Sao Vicente do Sul', 'country_code' => 'BR'],\n            ['name' => 'Motta Visconti', 'country_code' => 'IT'],\n            ['name' => 'Heikendorf', 'country_code' => 'DE'],\n            ['name' => 'Palazzolo Acreide', 'country_code' => 'IT'],\n            ['name' => 'Perkasie', 'country_code' => 'US'],\n            ['name' => 'Clayton', 'country_code' => 'US'],\n            ['name' => 'Moranbah', 'country_code' => 'AU'],\n            ['name' => 'Forbes', 'country_code' => 'AU'],\n            ['name' => 'Guiricema', 'country_code' => 'BR'],\n            ['name' => 'Cortez', 'country_code' => 'US'],\n            ['name' => 'Sileby', 'country_code' => 'GB'],\n            ['name' => 'Bembibre', 'country_code' => 'ES'],\n            ['name' => 'Calvisano', 'country_code' => 'IT'],\n            ['name' => 'Evron', 'country_code' => 'FR'],\n            ['name' => 'Princeton', 'country_code' => 'US'],\n            ['name' => 'Saint-Renan', 'country_code' => 'FR'],\n            ['name' => 'Rava-Rus ka', 'country_code' => 'UA'],\n            ['name' => 'Olney', 'country_code' => 'US'],\n            ['name' => 'Sanger', 'country_code' => 'US'],\n            ['name' => 'Barntrup', 'country_code' => 'DE'],\n            ['name' => 'Hadleigh', 'country_code' => 'GB'],\n            ['name' => 'Ban Buak Khang', 'country_code' => 'TH'],\n            ['name' => 'Cape St. Claire', 'country_code' => 'US'],\n            ['name' => 'Reichelsheim', 'country_code' => 'DE'],\n            ['name' => 'Steinheim am Albuch', 'country_code' => 'DE'],\n            ['name' => 'Modelu', 'country_code' => 'RO'],\n            ['name' => 'Koscielisko', 'country_code' => 'PL'],\n            ['name' => 'Solotvyno', 'country_code' => 'UA'],\n            ['name' => 'Paray-Vieille-Poste', 'country_code' => 'FR'],\n            ['name' => 'Seneca Falls', 'country_code' => 'US'],\n            ['name' => 'Kirby', 'country_code' => 'US'],\n            ['name' => 'Pont-Rouge', 'country_code' => 'CA'],\n            ['name' => 'Staufenberg', 'country_code' => 'DE'],\n            ['name' => 'El Corrillo', 'country_code' => 'ES'],\n            ['name' => 'Chamonix-Mont-Blanc', 'country_code' => 'FR'],\n            ['name' => 'Vado Ligure', 'country_code' => 'IT'],\n            ['name' => 'Tasnad', 'country_code' => 'RO'],\n            ['name' => 'Szeghalom', 'country_code' => 'HU'],\n            ['name' => 'Furstenfeld', 'country_code' => 'AT'],\n            ['name' => 'Tlanalapa', 'country_code' => 'MX'],\n            ['name' => 'Smizany', 'country_code' => 'SK'],\n            ['name' => 'Neuenkirchen', 'country_code' => 'DE'],\n            ['name' => 'Glenwood', 'country_code' => 'US'],\n            ['name' => 'Maryborough', 'country_code' => 'AU'],\n            ['name' => 'Dumbarton', 'country_code' => 'US'],\n            ['name' => 'Grunheide', 'country_code' => 'DE'],\n            ['name' => 'Garden City', 'country_code' => 'US'],\n            ['name' => 'Alvorada do Norte', 'country_code' => 'BR'],\n            ['name' => 'Kirchen', 'country_code' => 'DE'],\n            ['name' => 'Baillargues', 'country_code' => 'FR'],\n            ['name' => 'Monte Urano', 'country_code' => 'IT'],\n            ['name' => 'Crestline', 'country_code' => 'US'],\n            ['name' => 'Gyumai', 'country_code' => 'CN'],\n            ['name' => 'Jerseyville', 'country_code' => 'US'],\n            ['name' => 'Corella', 'country_code' => 'PH'],\n            ['name' => 'Piranguinho', 'country_code' => 'BR'],\n            ['name' => 'Bessancourt', 'country_code' => 'FR'],\n            ['name' => 'Champlain', 'country_code' => 'CA'],\n            ['name' => 'Perg', 'country_code' => 'AT'],\n            ['name' => 'Chiusi', 'country_code' => 'IT'],\n            ['name' => 'Citrusdal', 'country_code' => 'ZA'],\n            ['name' => 'New Scotland', 'country_code' => 'US'],\n            ['name' => 'Spello', 'country_code' => 'IT'],\n            ['name' => 'Weida', 'country_code' => 'DE'],\n            ['name' => 'Ulstein', 'country_code' => 'NO'],\n            ['name' => 'Thompsonville', 'country_code' => 'US'],\n            ['name' => 'Bersenbruck', 'country_code' => 'DE'],\n            ['name' => 'Castelnovo di Sotto', 'country_code' => 'IT'],\n            ['name' => 'Pegomas', 'country_code' => 'FR'],\n            ['name' => 'Feldkirchen', 'country_code' => 'DE'],\n            ['name' => 'Mrakovo', 'country_code' => 'RU'],\n            ['name' => 'Secovce', 'country_code' => 'SK'],\n            ['name' => 'Ronciglione', 'country_code' => 'IT'],\n            ['name' => 'Babeni', 'country_code' => 'RO'],\n            ['name' => 'Nevada', 'country_code' => 'US'],\n            ['name' => 'Bonnybridge', 'country_code' => 'GB'],\n            ['name' => 'Tuneiras do Oeste', 'country_code' => 'BR'],\n            ['name' => 'Coaticook', 'country_code' => 'CA'],\n            ['name' => 'Des Peres', 'country_code' => 'US'],\n            ['name' => 'Raunds', 'country_code' => 'GB'],\n            ['name' => 'Tangara', 'country_code' => 'BR'],\n            ['name' => 'Perryville', 'country_code' => 'US'],\n            ['name' => 'Corrales', 'country_code' => 'US'],\n            ['name' => 'London Grove', 'country_code' => 'US'],\n            ['name' => 'Tibro', 'country_code' => 'SE'],\n            ['name' => 'Sao Miguel', 'country_code' => 'BR'],\n            ['name' => 'Kortessem', 'country_code' => 'BE'],\n            ['name' => 'Fort Knox', 'country_code' => 'US'],\n            ['name' => 'Greenville', 'country_code' => 'US'],\n            ['name' => 'Georgetown', 'country_code' => 'US'],\n            ['name' => 'Nakhon Chai Si', 'country_code' => 'TH'],\n            ['name' => 'Park Ridge', 'country_code' => 'US'],\n            ['name' => 'Fern Park', 'country_code' => 'US'],\n            ['name' => 'Uglegorsk', 'country_code' => 'RU'],\n            ['name' => 'San Gavino Monreale', 'country_code' => 'IT'],\n            ['name' => 'Edgewater Park', 'country_code' => 'US'],\n            ['name' => 'Santana do Manhuacu', 'country_code' => 'BR'],\n            ['name' => 'Toro', 'country_code' => 'ES'],\n            ['name' => 'Villanueva de Cordoba', 'country_code' => 'ES'],\n            ['name' => 'Chikhli', 'country_code' => 'IN'],\n            ['name' => 'Ueckermunde', 'country_code' => 'DE'],\n            ['name' => 'Altavilla Milicia', 'country_code' => 'IT'],\n            ['name' => 'La Colle-sur-Loup', 'country_code' => 'FR'],\n            ['name' => 'Virginia', 'country_code' => 'BR'],\n            ['name' => 'Pickering', 'country_code' => 'GB'],\n            ['name' => 'Waltham Cross', 'country_code' => 'GB'],\n            ['name' => 'Kirn', 'country_code' => 'DE'],\n            ['name' => 'Monte Alegre de Goias', 'country_code' => 'BR'],\n            ['name' => 'Nazareno', 'country_code' => 'BR'],\n            ['name' => 'Rutland', 'country_code' => 'US'],\n            ['name' => 'Montesano', 'country_code' => 'US'],\n            ['name' => 'Zomergem', 'country_code' => 'BE'],\n            ['name' => 'Bicaz', 'country_code' => 'RO'],\n            ['name' => 'Gubden', 'country_code' => 'RU'],\n            ['name' => 'Pleasant Hill', 'country_code' => 'US'],\n            ['name' => 'Vallo della Lucania', 'country_code' => 'IT'],\n            ['name' => 'Mels', 'country_code' => 'CH'],\n            ['name' => 'Mata Verde', 'country_code' => 'BR'],\n            ['name' => 'Aureilhan', 'country_code' => 'FR'],\n            ['name' => 'Perl', 'country_code' => 'DE'],\n            ['name' => 'Andalusia', 'country_code' => 'US'],\n            ['name' => 'Zoutleeuw', 'country_code' => 'BE'],\n            ['name' => 'Capitolio', 'country_code' => 'BR'],\n            ['name' => 'Ballsh', 'country_code' => 'AL'],\n            ['name' => 'El Espinal', 'country_code' => 'MX'],\n            ['name' => 'Cerveny Kostelec', 'country_code' => 'CZ'],\n            ['name' => 'Busk', 'country_code' => 'UA'],\n            ['name' => 'Polegate', 'country_code' => 'GB'],\n            ['name' => 'Grossraschen', 'country_code' => 'DE'],\n            ['name' => 'Barvynkove', 'country_code' => 'UA'],\n            ['name' => 'Fermignano', 'country_code' => 'IT'],\n            ['name' => 'Nogara', 'country_code' => 'IT'],\n            ['name' => 'Newstead', 'country_code' => 'US'],\n            ['name' => 'Scott', 'country_code' => 'US'],\n            ['name' => 'Nadudvar', 'country_code' => 'HU'],\n            ['name' => 'Harlington', 'country_code' => 'GB'],\n            ['name' => 'Westampton', 'country_code' => 'US'],\n            ['name' => 'Minto', 'country_code' => 'CA'],\n            ['name' => 'Dunafoldvar', 'country_code' => 'HU'],\n            ['name' => 'Zoppola', 'country_code' => 'IT'],\n            ['name' => 'Binfield', 'country_code' => 'GB'],\n            ['name' => 'Incline Village', 'country_code' => 'US'],\n            ['name' => 'Glenshaw', 'country_code' => 'US'],\n            ['name' => 'Mount Pleasant', 'country_code' => 'US'],\n            ['name' => 'Cresskill', 'country_code' => 'US'],\n            ['name' => 'Earlimart', 'country_code' => 'US'],\n            ['name' => 'Morden', 'country_code' => 'CA'],\n            ['name' => 'Hakubacho', 'country_code' => 'JP'],\n            ['name' => 'Hawthorn Woods', 'country_code' => 'US'],\n            ['name' => 'Cologna Veneta', 'country_code' => 'IT'],\n            ['name' => 'Unterwellenborn', 'country_code' => 'DE'],\n            ['name' => 'Ferreira do Zezere', 'country_code' => 'PT'],\n            ['name' => 'La Libertad', 'country_code' => 'GT'],\n            ['name' => 'Lakhzazra', 'country_code' => 'MA'],\n            ['name' => 'Caerano di San Marco', 'country_code' => 'IT'],\n            ['name' => 'Reocin', 'country_code' => 'ES'],\n            ['name' => 'Bientina', 'country_code' => 'IT'],\n            ['name' => 'Reginopolis', 'country_code' => 'BR'],\n            ['name' => 'Middlebury', 'country_code' => 'US'],\n            ['name' => 'Nishiowa', 'country_code' => 'JP'],\n            ['name' => 'Tihna al Jabal', 'country_code' => 'EG'],\n            ['name' => 'Marlborough', 'country_code' => 'US'],\n            ['name' => 'Vigliano Biellese', 'country_code' => 'IT'],\n            ['name' => 'Marcoussis', 'country_code' => 'FR'],\n            ['name' => 'Klingenthal', 'country_code' => 'DE'],\n            ['name' => 'Comendador Levy Gasparian', 'country_code' => 'BR'],\n            ['name' => 'Santhia', 'country_code' => 'IT'],\n            ['name' => 'Bushtyno', 'country_code' => 'UA'],\n            ['name' => 'Hoquiam', 'country_code' => 'US'],\n            ['name' => 'Lambarkiyine', 'country_code' => 'MA'],\n            ['name' => 'Sortino', 'country_code' => 'IT'],\n            ['name' => 'Antonio Carlos', 'country_code' => 'BR'],\n            ['name' => 'Penkridge', 'country_code' => 'GB'],\n            ['name' => 'Brigantine', 'country_code' => 'US'],\n            ['name' => 'Teterow', 'country_code' => 'DE'],\n            ['name' => 'Elimaki', 'country_code' => 'FI'],\n            ['name' => 'Dobrada', 'country_code' => 'BR'],\n            ['name' => 'Le Poire-sur-Vie', 'country_code' => 'FR'],\n            ['name' => 'Fishersville', 'country_code' => 'US'],\n            ['name' => 'Kings Grant', 'country_code' => 'US'],\n            ['name' => 'Concordia sulla Secchia', 'country_code' => 'IT'],\n            ['name' => 'Kennedale', 'country_code' => 'US'],\n            ['name' => 'Brightlingsea', 'country_code' => 'GB'],\n            ['name' => 'Biederitz', 'country_code' => 'DE'],\n            ['name' => 'Usiacuri', 'country_code' => 'CO'],\n            ['name' => 'Gross Kreutz', 'country_code' => 'DE'],\n            ['name' => 'Lienen', 'country_code' => 'DE'],\n            ['name' => 'Andrushivka', 'country_code' => 'UA'],\n            ['name' => 'San Sebastian', 'country_code' => 'PR'],\n            ['name' => 'Matawan', 'country_code' => 'US'],\n            ['name' => 'Premnitz', 'country_code' => 'DE'],\n            ['name' => 'Monahans', 'country_code' => 'US'],\n            ['name' => 'Elz', 'country_code' => 'DE'],\n            ['name' => 'Skewen', 'country_code' => 'GB'],\n            ['name' => 'Grossenluder', 'country_code' => 'DE'],\n            ['name' => 'Bigastro', 'country_code' => 'ES'],\n            ['name' => 'San Sperate', 'country_code' => 'IT'],\n            ['name' => 'Iksane', 'country_code' => 'MA'],\n            ['name' => 'Dorgali', 'country_code' => 'IT'],\n            ['name' => 'Santa Eulalia', 'country_code' => 'MX'],\n            ['name' => 'Plabennec', 'country_code' => 'FR'],\n            ['name' => 'Springwood', 'country_code' => 'AU'],\n            ['name' => 'Ferrandina', 'country_code' => 'IT'],\n            ['name' => 'Nefasit', 'country_code' => 'ER'],\n            ['name' => 'Langueux', 'country_code' => 'FR'],\n            ['name' => 'Adelsdorf', 'country_code' => 'DE'],\n            ['name' => 'North Madison', 'country_code' => 'US'],\n            ['name' => 'Bang Len', 'country_code' => 'TH'],\n            ['name' => 'Laishevo', 'country_code' => 'RU'],\n            ['name' => 'Sarzeau', 'country_code' => 'FR'],\n            ['name' => 'Oppenheim', 'country_code' => 'DE'],\n            ['name' => 'Ustyuzhna', 'country_code' => 'RU'],\n            ['name' => 'Prairie du Sac', 'country_code' => 'US'],\n            ['name' => 'Yasinia', 'country_code' => 'UA'],\n            ['name' => 'Nazaria', 'country_code' => 'BR'],\n            ['name' => 'Lutzen', 'country_code' => 'DE'],\n            ['name' => 'La Belleza', 'country_code' => 'CO'],\n            ['name' => 'York', 'country_code' => 'US'],\n            ['name' => 'Oulad Khallouf', 'country_code' => 'MA'],\n            ['name' => 'Amapa', 'country_code' => 'BR'],\n            ['name' => 'Hampstead', 'country_code' => 'US'],\n            ['name' => 'Salem', 'country_code' => 'US'],\n            ['name' => 'Highfields', 'country_code' => 'AU'],\n            ['name' => 'Paddock Wood', 'country_code' => 'GB'],\n            ['name' => 'Canford Cliffs', 'country_code' => 'GB'],\n            ['name' => 'Byureghavan', 'country_code' => 'AM'],\n            ['name' => 'Colmeia', 'country_code' => 'BR'],\n            ['name' => 'Saint-Remy-les-Chevreuse', 'country_code' => 'FR'],\n            ['name' => 'Gavorrano', 'country_code' => 'IT'],\n            ['name' => 'Hyrum', 'country_code' => 'US'],\n            ['name' => 'Lipki', 'country_code' => 'RU'],\n            ['name' => 'Kahl am Main', 'country_code' => 'DE'],\n            ['name' => 'Richlands', 'country_code' => 'US'],\n            ['name' => 'Ittiri', 'country_code' => 'IT'],\n            ['name' => 'Schieder-Schwalenberg', 'country_code' => 'DE'],\n            ['name' => 'Vorden', 'country_code' => 'NL'],\n            ['name' => 'Ladue', 'country_code' => 'US'],\n            ['name' => 'Rockland', 'country_code' => 'US'],\n            ['name' => 'Caerleon', 'country_code' => 'GB'],\n            ['name' => 'Verkhoturye', 'country_code' => 'RU'],\n            ['name' => 'Simmern', 'country_code' => 'DE'],\n            ['name' => 'Kosiv', 'country_code' => 'UA'],\n            ['name' => 'Takieta', 'country_code' => 'NE'],\n            ['name' => 'Alamo Heights', 'country_code' => 'US'],\n            ['name' => 'Leporano', 'country_code' => 'IT'],\n            ['name' => 'Sawang Daen Din', 'country_code' => 'TH'],\n            ['name' => 'Le Grau-du-Roi', 'country_code' => 'FR'],\n            ['name' => 'Schuylkill', 'country_code' => 'US'],\n            ['name' => 'Reserve', 'country_code' => 'US'],\n            ['name' => 'Takaharu', 'country_code' => 'JP'],\n            ['name' => 'Osternienburg', 'country_code' => 'DE'],\n            ['name' => 'Lauta', 'country_code' => 'DE'],\n            ['name' => 'Camutanga', 'country_code' => 'BR'],\n            ['name' => 'Orting', 'country_code' => 'US'],\n            ['name' => 'Ponte di Piave', 'country_code' => 'IT'],\n            ['name' => 'Tuba City', 'country_code' => 'US'],\n            ['name' => 'Mono', 'country_code' => 'CA'],\n            ['name' => 'Quirino', 'country_code' => 'PH'],\n            ['name' => 'Rulzheim', 'country_code' => 'DE'],\n            ['name' => 'Untergruppenbach', 'country_code' => 'DE'],\n            ['name' => 'Wattens', 'country_code' => 'AT'],\n            ['name' => 'Francisco Santos', 'country_code' => 'BR'],\n            ['name' => 'Cabezon de la Sal', 'country_code' => 'ES'],\n            ['name' => 'Kiuruvesi', 'country_code' => 'FI'],\n            ['name' => 'Martins Soares', 'country_code' => 'BR'],\n            ['name' => 'Muzo', 'country_code' => 'CO'],\n            ['name' => 'Signal Mountain', 'country_code' => 'US'],\n            ['name' => 'Fairmount', 'country_code' => 'US'],\n            ['name' => 'Goundam', 'country_code' => 'ML'],\n            ['name' => 'Nonnweiler', 'country_code' => 'DE'],\n            ['name' => 'Riverside', 'country_code' => 'US'],\n            ['name' => 'Corning', 'country_code' => 'US'],\n            ['name' => 'Mauleon', 'country_code' => 'FR'],\n            ['name' => 'Geroskipou', 'country_code' => 'CY'],\n            ['name' => 'Orrville', 'country_code' => 'US'],\n            ['name' => 'Niederwerrn', 'country_code' => 'DE'],\n            ['name' => 'Aigues-Mortes', 'country_code' => 'FR'],\n            ['name' => 'East Brandywine', 'country_code' => 'US'],\n            ['name' => 'Foyos', 'country_code' => 'ES'],\n            ['name' => 'Itaucu', 'country_code' => 'BR'],\n            ['name' => 'Riacho dos Cavalos', 'country_code' => 'BR'],\n            ['name' => 'Elsmere', 'country_code' => 'US'],\n            ['name' => 'Aksakovo', 'country_code' => 'BG'],\n            ['name' => 'Farmville', 'country_code' => 'US'],\n            ['name' => 'Schnaittach', 'country_code' => 'DE'],\n            ['name' => 'Wissen', 'country_code' => 'DE'],\n            ['name' => 'Bovezzo', 'country_code' => 'IT'],\n            ['name' => 'Bompas', 'country_code' => 'FR'],\n            ['name' => 'Tanquinho', 'country_code' => 'BR'],\n            ['name' => 'Feurs', 'country_code' => 'FR'],\n            ['name' => 'Saint-Maixent-l Ecole', 'country_code' => 'FR'],\n            ['name' => 'Long Hill', 'country_code' => 'US'],\n            ['name' => 'Sheridan', 'country_code' => 'US'],\n            ['name' => 'Innisfail', 'country_code' => 'AU'],\n            ['name' => 'Hengelo', 'country_code' => 'NL'],\n            ['name' => 'Torre de Moncorvo', 'country_code' => 'PT'],\n            ['name' => 'Sanatoga', 'country_code' => 'US'],\n            ['name' => 'Bad Endorf', 'country_code' => 'DE'],\n            ['name' => 'Tuparendi', 'country_code' => 'BR'],\n            ['name' => 'Borgentreich', 'country_code' => 'DE'],\n            ['name' => 'Richmond', 'country_code' => 'GB'],\n            ['name' => 'Tasso Fragoso', 'country_code' => 'BR'],\n            ['name' => 'Cagli', 'country_code' => 'IT'],\n            ['name' => 'Birkenwerder', 'country_code' => 'DE'],\n            ['name' => 'Simeonovgrad', 'country_code' => 'BG'],\n            ['name' => 'Kalifornsky', 'country_code' => 'US'],\n            ['name' => 'Strathaven', 'country_code' => 'GB'],\n            ['name' => 'Willowbrook', 'country_code' => 'US'],\n            ['name' => 'Isaias Coelho', 'country_code' => 'BR'],\n            ['name' => 'Itamari', 'country_code' => 'BR'],\n            ['name' => 'Olleria', 'country_code' => 'ES'],\n            ['name' => 'Whitworth', 'country_code' => 'GB'],\n            ['name' => 'Verkhniy Mamon', 'country_code' => 'RU'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Green Cove Springs', 'country_code' => 'US'],\n            ['name' => 'Solebury', 'country_code' => 'US'],\n            ['name' => 'Caprino Veronese', 'country_code' => 'IT'],\n            ['name' => 'White Horse', 'country_code' => 'US'],\n            ['name' => 'Meltham', 'country_code' => 'GB'],\n            ['name' => 'Perry Heights', 'country_code' => 'US'],\n            ['name' => 'Kellinghusen', 'country_code' => 'DE'],\n            ['name' => 'Poytya', 'country_code' => 'FI'],\n            ['name' => 'Rhos-on-Sea', 'country_code' => 'GB'],\n            ['name' => 'Urom', 'country_code' => 'HU'],\n            ['name' => 'Lake Villa', 'country_code' => 'US'],\n            ['name' => 'Joia', 'country_code' => 'BR'],\n            ['name' => 'Colditz', 'country_code' => 'DE'],\n            ['name' => 'Guntersville', 'country_code' => 'US'],\n            ['name' => 'Krupki', 'country_code' => 'BY'],\n            ['name' => 'Grosskrotzenburg', 'country_code' => 'DE'],\n            ['name' => 'Oualidia', 'country_code' => 'MA'],\n            ['name' => 'Karmaskaly', 'country_code' => 'RU'],\n            ['name' => 'Montvale', 'country_code' => 'US'],\n            ['name' => 'Rumlang', 'country_code' => 'CH'],\n            ['name' => 'Aspen', 'country_code' => 'US'],\n            ['name' => 'Tunga', 'country_code' => 'PH'],\n            ['name' => 'Ione', 'country_code' => 'US'],\n            ['name' => 'Hoeven', 'country_code' => 'NL'],\n            ['name' => 'Joane', 'country_code' => 'PT'],\n            ['name' => 'Litchfield', 'country_code' => 'US'],\n            ['name' => 'Paverama', 'country_code' => 'BR'],\n            ['name' => 'Sanluri', 'country_code' => 'IT'],\n            ['name' => 'Brooksville', 'country_code' => 'US'],\n            ['name' => 'Buhlertal', 'country_code' => 'DE'],\n            ['name' => 'Riverside', 'country_code' => 'US'],\n            ['name' => 'Wyoming', 'country_code' => 'US'],\n            ['name' => 'Staufen im Breisgau', 'country_code' => 'DE'],\n            ['name' => 'West Frankfort', 'country_code' => 'US'],\n            ['name' => 'Yasnohirka', 'country_code' => 'UA'],\n            ['name' => 'Novoselitskoye', 'country_code' => 'RU'],\n            ['name' => 'Non Sang', 'country_code' => 'TH'],\n            ['name' => 'Mamurras', 'country_code' => 'AL'],\n            ['name' => 'Iwaizumi', 'country_code' => 'JP'],\n            ['name' => 'Pochinok', 'country_code' => 'RU'],\n            ['name' => 'Indian Harbour Beach', 'country_code' => 'US'],\n            ['name' => 'Dzhebel', 'country_code' => 'BG'],\n            ['name' => 'Helmbrechts', 'country_code' => 'DE'],\n            ['name' => 'Lake Park', 'country_code' => 'US'],\n            ['name' => 'Sala Bolognese', 'country_code' => 'IT'],\n            ['name' => 'Murten', 'country_code' => 'CH'],\n            ['name' => 'Marcolandia', 'country_code' => 'BR'],\n            ['name' => 'Lanco', 'country_code' => 'CL'],\n            ['name' => 'Kildare', 'country_code' => 'IE'],\n            ['name' => 'Lucas', 'country_code' => 'US'],\n            ['name' => 'Japaratinga', 'country_code' => 'BR'],\n            ['name' => 'Araponga', 'country_code' => 'BR'],\n            ['name' => 'Piedmont', 'country_code' => 'US'],\n            ['name' => 'Dubovskoye', 'country_code' => 'RU'],\n            ['name' => 'Minusio', 'country_code' => 'CH'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Itaquara', 'country_code' => 'BR'],\n            ['name' => 'Talnique', 'country_code' => 'SV'],\n            ['name' => 'Talambote', 'country_code' => 'MA'],\n            ['name' => 'Bad Grund', 'country_code' => 'DE'],\n            ['name' => 'Chumsaeng', 'country_code' => 'TH'],\n            ['name' => 'Canet de Berenguer', 'country_code' => 'ES'],\n            ['name' => 'Habo', 'country_code' => 'SE'],\n            ['name' => 'Moordrecht', 'country_code' => 'NL'],\n            ['name' => 'Grossbeeren', 'country_code' => 'DE'],\n            ['name' => 'Obluchye', 'country_code' => 'RU'],\n            ['name' => 'Conover', 'country_code' => 'US'],\n            ['name' => 'Mournies', 'country_code' => 'GR'],\n            ['name' => 'Gingelom', 'country_code' => 'BE'],\n            ['name' => 'Dulovo', 'country_code' => 'BG'],\n            ['name' => 'Padron', 'country_code' => 'ES'],\n            ['name' => 'Wetumpka', 'country_code' => 'US'],\n            ['name' => 'Port-Saint-Louis-du-Rhone', 'country_code' => 'FR'],\n            ['name' => 'Lossnitz', 'country_code' => 'DE'],\n            ['name' => 'Vietri sul Mare', 'country_code' => 'IT'],\n            ['name' => 'Ladysmith', 'country_code' => 'CA'],\n            ['name' => 'Conkal', 'country_code' => 'MX'],\n            ['name' => 'Laitila', 'country_code' => 'FI'],\n            ['name' => 'Divjake', 'country_code' => 'AL'],\n            ['name' => 'East Grand Forks', 'country_code' => 'US'],\n            ['name' => 'Mansfield', 'country_code' => 'US'],\n            ['name' => 'Bridgewater', 'country_code' => 'CA'],\n            ['name' => 'Ottobeuren', 'country_code' => 'DE'],\n            ['name' => 'Decimomannu', 'country_code' => 'IT'],\n            ['name' => 'Janze', 'country_code' => 'FR'],\n            ['name' => 'Agua Blanca Iturbide', 'country_code' => 'MX'],\n            ['name' => 'Guaracai', 'country_code' => 'BR'],\n            ['name' => 'Park Hills', 'country_code' => 'US'],\n            ['name' => 'Yarmouth', 'country_code' => 'US'],\n            ['name' => 'Nova Gloria', 'country_code' => 'BR'],\n            ['name' => 'Messkirch', 'country_code' => 'DE'],\n            ['name' => 'Libertad', 'country_code' => 'PH'],\n            ['name' => 'Laurel', 'country_code' => 'US'],\n            ['name' => 'Edgemere', 'country_code' => 'US'],\n            ['name' => 'Cullompton', 'country_code' => 'GB'],\n            ['name' => 'Ilha das Flores', 'country_code' => 'BR'],\n            ['name' => 'Freistadt', 'country_code' => 'AT'],\n            ['name' => 'Southampton', 'country_code' => 'US'],\n            ['name' => 'Berg', 'country_code' => 'DE'],\n            ['name' => 'Laanoussar', 'country_code' => 'MA'],\n            ['name' => 'Ergue-Gaberic', 'country_code' => 'FR'],\n            ['name' => 'Mooroopna', 'country_code' => 'AU'],\n            ['name' => 'Dirksland', 'country_code' => 'NL'],\n            ['name' => 'San Damiano d Asti', 'country_code' => 'IT'],\n            ['name' => 'Morrisville', 'country_code' => 'US'],\n            ['name' => 'Rawlins', 'country_code' => 'US'],\n            ['name' => 'Tizoual', 'country_code' => 'MA'],\n            ['name' => 'Legazpia', 'country_code' => 'ES'],\n            ['name' => 'Negresti', 'country_code' => 'RO'],\n            ['name' => 'Saint-Gilles-Croix-de-Vie', 'country_code' => 'FR'],\n            ['name' => 'Narrabri', 'country_code' => 'AU'],\n            ['name' => 'Succasunna', 'country_code' => 'US'],\n            ['name' => 'Ait Ali Mimoune', 'country_code' => 'MA'],\n            ['name' => 'Ouderkerk aan de Amstel', 'country_code' => 'NL'],\n            ['name' => 'Plumsted', 'country_code' => 'US'],\n            ['name' => 'Perryton', 'country_code' => 'US'],\n            ['name' => 'Yatton', 'country_code' => 'GB'],\n            ['name' => 'Bordesholm', 'country_code' => 'DE'],\n            ['name' => 'Closter', 'country_code' => 'US'],\n            ['name' => 'Le Loroux-Bottereau', 'country_code' => 'FR'],\n            ['name' => 'Barra de Sao Miguel', 'country_code' => 'BR'],\n            ['name' => 'St. Johns', 'country_code' => 'US'],\n            ['name' => 'Trooz', 'country_code' => 'BE'],\n            ['name' => 'Terrace Heights', 'country_code' => 'US'],\n            ['name' => 'Siegsdorf', 'country_code' => 'DE'],\n            ['name' => 'Worrstadt', 'country_code' => 'DE'],\n            ['name' => 'Frostburg', 'country_code' => 'US'],\n            ['name' => 'Kingscliff', 'country_code' => 'AU'],\n            ['name' => 'Moritzburg', 'country_code' => 'DE'],\n            ['name' => 'Moulay Bou  azza', 'country_code' => 'MA'],\n            ['name' => 'Lypovets', 'country_code' => 'UA'],\n            ['name' => 'Dunavarsany', 'country_code' => 'HU'],\n            ['name' => 'Boured', 'country_code' => 'MA'],\n            ['name' => 'Le Soler', 'country_code' => 'FR'],\n            ['name' => 'Rolesville', 'country_code' => 'US'],\n            ['name' => 'Stra', 'country_code' => 'IT'],\n            ['name' => 'Sorbiers', 'country_code' => 'FR'],\n            ['name' => 'Biryusinsk', 'country_code' => 'RU'],\n            ['name' => 'Bo ston', 'country_code' => 'UZ'],\n            ['name' => 'Mina Clavero', 'country_code' => 'AR'],\n            ['name' => 'Viechtach', 'country_code' => 'DE'],\n            ['name' => 'Heuchelheim', 'country_code' => 'DE'],\n            ['name' => 'Turkeve', 'country_code' => 'HU'],\n            ['name' => 'Neuenburg', 'country_code' => 'DE'],\n            ['name' => 'Booneville', 'country_code' => 'US'],\n            ['name' => 'Sallisaw', 'country_code' => 'US'],\n            ['name' => 'Fusignano', 'country_code' => 'IT'],\n            ['name' => 'Vohburg an der Donau', 'country_code' => 'DE'],\n            ['name' => 'East York', 'country_code' => 'US'],\n            ['name' => 'Cabrils', 'country_code' => 'ES'],\n            ['name' => 'Owani', 'country_code' => 'JP'],\n            ['name' => 'Herencia', 'country_code' => 'ES'],\n            ['name' => 'Fabrica di Roma', 'country_code' => 'IT'],\n            ['name' => 'Sitka', 'country_code' => 'US'],\n            ['name' => 'Verolanuova', 'country_code' => 'IT'],\n            ['name' => 'Campo Maior', 'country_code' => 'PT'],\n            ['name' => 'Stuttgart', 'country_code' => 'US'],\n            ['name' => 'Bolgar', 'country_code' => 'RU'],\n            ['name' => 'Visp', 'country_code' => 'CH'],\n            ['name' => 'Namsos', 'country_code' => 'NO'],\n            ['name' => 'Billingshurst', 'country_code' => 'GB'],\n            ['name' => 'Pocklington', 'country_code' => 'GB'],\n            ['name' => 'Bouaye', 'country_code' => 'FR'],\n            ['name' => 'Coxsackie', 'country_code' => 'US'],\n            ['name' => 'Guatape', 'country_code' => 'CO'],\n            ['name' => 'Derecske', 'country_code' => 'HU'],\n            ['name' => 'Concord', 'country_code' => 'US'],\n            ['name' => 'Mystic Island', 'country_code' => 'US'],\n            ['name' => 'Waterford', 'country_code' => 'US'],\n            ['name' => 'Cohasset', 'country_code' => 'US'],\n            ['name' => 'Titz', 'country_code' => 'DE'],\n            ['name' => 'Geri', 'country_code' => 'CY'],\n            ['name' => 'Shinfield', 'country_code' => 'GB'],\n            ['name' => 'Trevi', 'country_code' => 'IT'],\n            ['name' => 'Kecel', 'country_code' => 'HU'],\n            ['name' => 'Steenwijkerwold', 'country_code' => 'NL'],\n            ['name' => 'Willow Street', 'country_code' => 'US'],\n            ['name' => 'Trignac', 'country_code' => 'FR'],\n            ['name' => 'Lansdowne', 'country_code' => 'US'],\n            ['name' => 'Allersberg', 'country_code' => 'DE'],\n            ['name' => 'Elisio Medrado', 'country_code' => 'BR'],\n            ['name' => 'Hillsboro', 'country_code' => 'US'],\n            ['name' => 'Summit View', 'country_code' => 'US'],\n            ['name' => 'Vedano Olona', 'country_code' => 'IT'],\n            ['name' => 'San Ildefonso', 'country_code' => 'PH'],\n            ['name' => 'Corona de Tucson', 'country_code' => 'US'],\n            ['name' => 'Habay-la-Vieille', 'country_code' => 'BE'],\n            ['name' => 'Novoli', 'country_code' => 'IT'],\n            ['name' => 'Cacalchen', 'country_code' => 'MX'],\n            ['name' => 'Carnoux-en-Provence', 'country_code' => 'FR'],\n            ['name' => 'Bushkill', 'country_code' => 'US'],\n            ['name' => 'Middleton', 'country_code' => 'US'],\n            ['name' => 'Estrela d Oeste', 'country_code' => 'BR'],\n            ['name' => 'Lure', 'country_code' => 'FR'],\n            ['name' => 'General Camara', 'country_code' => 'BR'],\n            ['name' => 'L Aigle', 'country_code' => 'FR'],\n            ['name' => 'Douar Mezaoura', 'country_code' => 'MA'],\n            ['name' => 'Oude Pekela', 'country_code' => 'NL'],\n            ['name' => 'Lege-Cap-Ferret', 'country_code' => 'FR'],\n            ['name' => 'Toritto', 'country_code' => 'IT'],\n            ['name' => 'Orocue', 'country_code' => 'CO'],\n            ['name' => 'San Pablo Huitzo', 'country_code' => 'MX'],\n            ['name' => 'Bretowo', 'country_code' => 'PL'],\n            ['name' => 'Moyeuvre-Grande', 'country_code' => 'FR'],\n            ['name' => 'Tuscumbia', 'country_code' => 'US'],\n            ['name' => 'Vetluga', 'country_code' => 'RU'],\n            ['name' => 'Nzalat Bni Amar', 'country_code' => 'MA'],\n            ['name' => 'Tobyhanna', 'country_code' => 'US'],\n            ['name' => 'As Sallum', 'country_code' => 'EG'],\n            ['name' => 'Mason', 'country_code' => 'US'],\n            ['name' => 'Ghassat', 'country_code' => 'MA'],\n            ['name' => 'Vern-sur-Seiche', 'country_code' => 'FR'],\n            ['name' => 'Norten-Hardenberg', 'country_code' => 'DE'],\n            ['name' => 'Dauphin', 'country_code' => 'CA'],\n            ['name' => 'Houplines', 'country_code' => 'FR'],\n            ['name' => 'Humboldt', 'country_code' => 'US'],\n            ['name' => 'Baiersdorf', 'country_code' => 'DE'],\n            ['name' => 'Barton', 'country_code' => 'US'],\n            ['name' => 'Chantonnay', 'country_code' => 'FR'],\n            ['name' => 'Stockstadt am Main', 'country_code' => 'DE'],\n            ['name' => 'Navia', 'country_code' => 'ES'],\n            ['name' => 'Lesmurdie', 'country_code' => 'AU'],\n            ['name' => 'Fontaniva', 'country_code' => 'IT'],\n            ['name' => 'Deliatyn', 'country_code' => 'UA'],\n            ['name' => 'North Londonderry', 'country_code' => 'US'],\n            ['name' => 'Monforte del Cid', 'country_code' => 'ES'],\n            ['name' => 'Kirchberg', 'country_code' => 'DE'],\n            ['name' => 'Otterburn Park', 'country_code' => 'CA'],\n            ['name' => 'Barby', 'country_code' => 'DE'],\n            ['name' => 'Bremgarten', 'country_code' => 'CH'],\n            ['name' => 'Helena Valley Southeast', 'country_code' => 'US'],\n            ['name' => 'Limena', 'country_code' => 'IT'],\n            ['name' => 'Sunset Hills', 'country_code' => 'US'],\n            ['name' => 'Ibiai', 'country_code' => 'BR'],\n            ['name' => 'Lanivtsi', 'country_code' => 'UA'],\n            ['name' => 'Sand Lake', 'country_code' => 'US'],\n            ['name' => 'Tha Maka', 'country_code' => 'TH'],\n            ['name' => 'Aughton', 'country_code' => 'GB'],\n            ['name' => 'Imoulas', 'country_code' => 'MA'],\n            ['name' => 'University of Virginia', 'country_code' => 'US'],\n            ['name' => 'Muri', 'country_code' => 'CH'],\n            ['name' => 'Zazeran', 'country_code' => 'IR'],\n            ['name' => 'Gravellona Toce', 'country_code' => 'IT'],\n            ['name' => 'Neulengbach', 'country_code' => 'AT'],\n            ['name' => 'Cariati', 'country_code' => 'IT'],\n            ['name' => 'Freeport', 'country_code' => 'US'],\n            ['name' => 'Bad Feilnbach', 'country_code' => 'DE'],\n            ['name' => 'Zwingenberg', 'country_code' => 'DE'],\n            ['name' => 'Audenge', 'country_code' => 'FR'],\n            ['name' => 'Vyetka', 'country_code' => 'BY'],\n            ['name' => 'Bulaevo', 'country_code' => 'KZ'],\n            ['name' => 'Prien', 'country_code' => 'US'],\n            ['name' => 'Guabito', 'country_code' => 'PA'],\n            ['name' => 'Onalaska', 'country_code' => 'US'],\n            ['name' => 'Santa Rosa', 'country_code' => 'BR'],\n            ['name' => 'Noyelles-sous-Lens', 'country_code' => 'FR'],\n            ['name' => 'Macin', 'country_code' => 'RO'],\n            ['name' => 'Bystrice pod Hostynem', 'country_code' => 'CZ'],\n            ['name' => 'Campillos', 'country_code' => 'ES'],\n            ['name' => 'Tumbiscatio de Ruiz', 'country_code' => 'MX'],\n            ['name' => 'Lontra', 'country_code' => 'BR'],\n            ['name' => 'Marcacao', 'country_code' => 'BR'],\n            ['name' => 'Taber', 'country_code' => 'CA'],\n            ['name' => 'U Thong', 'country_code' => 'TH'],\n            ['name' => 'Pine Lake Park', 'country_code' => 'US'],\n            ['name' => 'Kerrouchen', 'country_code' => 'MA'],\n            ['name' => 'West Manheim', 'country_code' => 'US'],\n            ['name' => 'Mrizig', 'country_code' => 'MA'],\n            ['name' => 'Phayakkhaphum Phisai', 'country_code' => 'TH'],\n            ['name' => 'Pezenas', 'country_code' => 'FR'],\n            ['name' => 'Los Altos Hills', 'country_code' => 'US'],\n            ['name' => 'Witley', 'country_code' => 'GB'],\n            ['name' => 'Tomesti', 'country_code' => 'RO'],\n            ['name' => 'Yadrin', 'country_code' => 'RU'],\n            ['name' => 'Jaszapati', 'country_code' => 'HU'],\n            ['name' => 'Meximieux', 'country_code' => 'FR'],\n            ['name' => 'Magtymguly', 'country_code' => 'TM'],\n            ['name' => 'Aspach', 'country_code' => 'DE'],\n            ['name' => 'Santa Clara', 'country_code' => 'US'],\n            ['name' => 'Upper Makefield', 'country_code' => 'US'],\n            ['name' => 'Uedem', 'country_code' => 'DE'],\n            ['name' => 'Oranienbaum', 'country_code' => 'DE'],\n            ['name' => 'Monticello', 'country_code' => 'US'],\n            ['name' => 'South Bruce Peninsula', 'country_code' => 'CA'],\n            ['name' => 'Vyshkovo', 'country_code' => 'UA'],\n            ['name' => 'Kitzbuhel', 'country_code' => 'AT'],\n            ['name' => 'Liancourt', 'country_code' => 'FR'],\n            ['name' => 'Gigmoto', 'country_code' => 'PH'],\n            ['name' => 'Edson', 'country_code' => 'CA'],\n            ['name' => 'Neunburg vorm Wald', 'country_code' => 'DE'],\n            ['name' => 'Bonnigheim', 'country_code' => 'DE'],\n            ['name' => 'Seaton', 'country_code' => 'GB'],\n            ['name' => 'Gewane', 'country_code' => 'ET'],\n            ['name' => 'Tuscania', 'country_code' => 'IT'],\n            ['name' => 'Brejo Grande', 'country_code' => 'BR'],\n            ['name' => 'Ogden', 'country_code' => 'US'],\n            ['name' => 'Guilers', 'country_code' => 'FR'],\n            ['name' => 'Rivolta d Adda', 'country_code' => 'IT'],\n            ['name' => 'Oberstenfeld', 'country_code' => 'DE'],\n            ['name' => 'Damnoen Saduak', 'country_code' => 'TH'],\n            ['name' => 'Wollerau', 'country_code' => 'CH'],\n            ['name' => 'Lake of the Woods', 'country_code' => 'US'],\n            ['name' => 'Congers', 'country_code' => 'US'],\n            ['name' => 'Cairate', 'country_code' => 'IT'],\n            ['name' => 'La Verpilliere', 'country_code' => 'FR'],\n            ['name' => 'Ashland', 'country_code' => 'US'],\n            ['name' => 'Agdara', 'country_code' => 'AZ'],\n            ['name' => 'Makaha', 'country_code' => 'US'],\n            ['name' => 'Villard-Bonnot', 'country_code' => 'FR'],\n            ['name' => 'Spring Valley Lake', 'country_code' => 'US'],\n            ['name' => 'Alvorada', 'country_code' => 'BR'],\n            ['name' => 'San Juan Talpa', 'country_code' => 'SV'],\n            ['name' => 'Reichertshofen', 'country_code' => 'DE'],\n            ['name' => 'Bayport', 'country_code' => 'US'],\n            ['name' => 'Keminmaa', 'country_code' => 'FI'],\n            ['name' => 'Wietze', 'country_code' => 'DE'],\n            ['name' => 'Savoy', 'country_code' => 'US'],\n            ['name' => 'Yuryevets', 'country_code' => 'RU'],\n            ['name' => 'Pfronten', 'country_code' => 'DE'],\n            ['name' => 'Janoshalma', 'country_code' => 'HU'],\n            ['name' => 'Fair Lakes', 'country_code' => 'US'],\n            ['name' => 'Kahriz Sang', 'country_code' => 'IR'],\n            ['name' => 'Tecumseh', 'country_code' => 'US'],\n            ['name' => 'Moser', 'country_code' => 'DE'],\n            ['name' => 'Dover', 'country_code' => 'US'],\n            ['name' => 'Soriano nel Cimino', 'country_code' => 'IT'],\n            ['name' => 'North Haledon', 'country_code' => 'US'],\n            ['name' => 'Leforest', 'country_code' => 'FR'],\n            ['name' => 'Coxhoe', 'country_code' => 'GB'],\n            ['name' => 'Dornstetten', 'country_code' => 'DE'],\n            ['name' => 'Paris', 'country_code' => 'US'],\n            ['name' => 'La Bassee', 'country_code' => 'FR'],\n            ['name' => 'Sirnach', 'country_code' => 'CH'],\n            ['name' => 'Serramazzoni', 'country_code' => 'IT'],\n            ['name' => 'Ponte nell Alpi', 'country_code' => 'IT'],\n            ['name' => 'Hochst', 'country_code' => 'AT'],\n            ['name' => 'Salice Salentino', 'country_code' => 'IT'],\n            ['name' => 'El Porvenir', 'country_code' => 'SV'],\n            ['name' => 'Gaylord', 'country_code' => 'US'],\n            ['name' => 'Aransas Pass', 'country_code' => 'US'],\n            ['name' => 'East Cowes', 'country_code' => 'GB'],\n            ['name' => 'Grafenau', 'country_code' => 'DE'],\n            ['name' => 'Champagnole', 'country_code' => 'FR'],\n            ['name' => 'Ostseebad Kuhlungsborn', 'country_code' => 'DE'],\n            ['name' => 'Ellicott', 'country_code' => 'US'],\n            ['name' => 'Carbondale', 'country_code' => 'US'],\n            ['name' => 'Arab', 'country_code' => 'US'],\n            ['name' => 'Monte San Giusto', 'country_code' => 'IT'],\n            ['name' => 'Kandern', 'country_code' => 'DE'],\n            ['name' => 'Long Branch', 'country_code' => 'US'],\n            ['name' => 'Chateauneuf-sur-Loire', 'country_code' => 'FR'],\n            ['name' => 'Quarto d Altino', 'country_code' => 'IT'],\n            ['name' => 'Peebles', 'country_code' => 'GB'],\n            ['name' => 'San Miguel del Puerto', 'country_code' => 'MX'],\n            ['name' => 'Neusiedl am See', 'country_code' => 'AT'],\n            ['name' => 'Fairless Hills', 'country_code' => 'US'],\n            ['name' => 'Milevsko', 'country_code' => 'CZ'],\n            ['name' => 'Althengstett', 'country_code' => 'DE'],\n            ['name' => 'Sao Pedro dos Ferros', 'country_code' => 'BR'],\n            ['name' => 'Ahrensbok', 'country_code' => 'DE'],\n            ['name' => 'Venegono Superiore', 'country_code' => 'IT'],\n            ['name' => 'Taglio di Po', 'country_code' => 'IT'],\n            ['name' => 'Khanu Woralaksaburi', 'country_code' => 'TH'],\n            ['name' => 'San Sebastian Tecomaxtlahuaca', 'country_code' => 'MX'],\n            ['name' => 'Ventanas', 'country_code' => 'CL'],\n            ['name' => 'Lugau', 'country_code' => 'DE'],\n            ['name' => 'Bolano', 'country_code' => 'IT'],\n            ['name' => 'Saint-Nicolas-de-Port', 'country_code' => 'FR'],\n            ['name' => 'Highland Heights', 'country_code' => 'US'],\n            ['name' => 'Recas', 'country_code' => 'RO'],\n            ['name' => 'Hassocks', 'country_code' => 'GB'],\n            ['name' => 'Narowlya', 'country_code' => 'BY'],\n            ['name' => 'Kamyanyets', 'country_code' => 'BY'],\n            ['name' => 'Somers', 'country_code' => 'US'],\n            ['name' => 'Charlestown', 'country_code' => 'US'],\n            ['name' => 'Santa Luzia D Oeste', 'country_code' => 'BR'],\n            ['name' => 'Fletcher', 'country_code' => 'US'],\n            ['name' => 'Blankenheim', 'country_code' => 'DE'],\n            ['name' => 'Domat/Ems', 'country_code' => 'CH'],\n            ['name' => 'Louveciennes', 'country_code' => 'FR'],\n            ['name' => 'Macurure', 'country_code' => 'BR'],\n            ['name' => 'Santiago Yosondua', 'country_code' => 'MX'],\n            ['name' => 'Wettringen', 'country_code' => 'DE'],\n            ['name' => 'Tubajon', 'country_code' => 'PH'],\n            ['name' => 'Monserrat', 'country_code' => 'ES'],\n            ['name' => 'Arealva', 'country_code' => 'BR'],\n            ['name' => 'Warsash', 'country_code' => 'GB'],\n            ['name' => 'Langnau am Albis', 'country_code' => 'CH'],\n            ['name' => 'Kilmore', 'country_code' => 'AU'],\n            ['name' => 'Druid Hills', 'country_code' => 'US'],\n            ['name' => 'Baxter', 'country_code' => 'US'],\n            ['name' => 'Puget-sur-Argens', 'country_code' => 'FR'],\n            ['name' => 'Peasedown Saint John', 'country_code' => 'GB'],\n            ['name' => 'Sauerlach', 'country_code' => 'DE'],\n            ['name' => 'Leisnig', 'country_code' => 'DE'],\n            ['name' => 'Vert-Saint-Denis', 'country_code' => 'FR'],\n            ['name' => 'Seffner', 'country_code' => 'US'],\n            ['name' => 'Petrosino', 'country_code' => 'IT'],\n            ['name' => 'Vila Vicosa', 'country_code' => 'PT'],\n            ['name' => 'Ouro Verde', 'country_code' => 'BR'],\n            ['name' => 'Marcelino Vieira', 'country_code' => 'BR'],\n            ['name' => 'Ballan-Mire', 'country_code' => 'FR'],\n            ['name' => 'Vernon', 'country_code' => 'US'],\n            ['name' => 'Millersville', 'country_code' => 'US'],\n            ['name' => 'Rottenburg an der Laaber', 'country_code' => 'DE'],\n            ['name' => 'Wimauma', 'country_code' => 'US'],\n            ['name' => 'Figueira', 'country_code' => 'BR'],\n            ['name' => 'Hirslen', 'country_code' => 'CH'],\n            ['name' => 'Brasileira', 'country_code' => 'BR'],\n            ['name' => 'Miramar Beach', 'country_code' => 'US'],\n            ['name' => 'Appiano Gentile', 'country_code' => 'IT'],\n            ['name' => 'Hempstead', 'country_code' => 'US'],\n            ['name' => 'Gargenville', 'country_code' => 'FR'],\n            ['name' => 'Garrni', 'country_code' => 'AM'],\n            ['name' => 'Chinon', 'country_code' => 'FR'],\n            ['name' => 'Wognum', 'country_code' => 'NL'],\n            ['name' => 'Reignier', 'country_code' => 'FR'],\n            ['name' => 'San Vicente', 'country_code' => 'PH'],\n            ['name' => 'Knittlingen', 'country_code' => 'DE'],\n            ['name' => 'Anahawan', 'country_code' => 'PH'],\n            ['name' => 'Hohberg', 'country_code' => 'DE'],\n            ['name' => 'Gulf Hills', 'country_code' => 'US'],\n            ['name' => 'Buckhannon', 'country_code' => 'US'],\n            ['name' => 'Saint-Jean-de-Maurienne', 'country_code' => 'FR'],\n            ['name' => 'Texmelucan', 'country_code' => 'MX'],\n            ['name' => 'Ransbach-Baumbach', 'country_code' => 'DE'],\n            ['name' => 'Kulpsville', 'country_code' => 'US'],\n            ['name' => 'Socorro', 'country_code' => 'US'],\n            ['name' => 'Akhalkalaki', 'country_code' => 'GE'],\n            ['name' => 'West Livingston', 'country_code' => 'US'],\n            ['name' => 'Toton', 'country_code' => 'GB'],\n            ['name' => 'Tallulah', 'country_code' => 'US'],\n            ['name' => 'Talalora', 'country_code' => 'PH'],\n            ['name' => 'Northam', 'country_code' => 'GB'],\n            ['name' => 'Messancy', 'country_code' => 'BE'],\n            ['name' => 'Ikata-cho', 'country_code' => 'JP'],\n            ['name' => 'None', 'country_code' => 'IT'],\n            ['name' => 'Heiden', 'country_code' => 'DE'],\n            ['name' => 'Orono', 'country_code' => 'US'],\n            ['name' => 'Thann', 'country_code' => 'FR'],\n            ['name' => 'Bath', 'country_code' => 'US'],\n            ['name' => 'Highworth', 'country_code' => 'GB'],\n            ['name' => 'Oostvoorne', 'country_code' => 'NL'],\n            ['name' => 'Suomussalmi', 'country_code' => 'FI'],\n            ['name' => 'Rodeiro', 'country_code' => 'BR'],\n            ['name' => 'Mala Danylivka', 'country_code' => 'UA'],\n            ['name' => 'Bailly-Romainvilliers', 'country_code' => 'FR'],\n            ['name' => 'Proenca-a-Nova', 'country_code' => 'PT'],\n            ['name' => 'Kalampaka', 'country_code' => 'GR'],\n            ['name' => 'Clover', 'country_code' => 'US'],\n            ['name' => 'Zell am Harmersbach', 'country_code' => 'DE'],\n            ['name' => 'Petoskey', 'country_code' => 'US'],\n            ['name' => 'Boiano', 'country_code' => 'IT'],\n            ['name' => 'Gettorf', 'country_code' => 'DE'],\n            ['name' => 'Beaver Falls', 'country_code' => 'US'],\n            ['name' => 'Ait Tagalla', 'country_code' => 'MA'],\n            ['name' => 'Nova Itarana', 'country_code' => 'BR'],\n            ['name' => 'Farnham', 'country_code' => 'CA'],\n            ['name' => 'Cristalandia do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Chaboksar', 'country_code' => 'IR'],\n            ['name' => 'Lauchringen', 'country_code' => 'DE'],\n            ['name' => 'L Arbresle', 'country_code' => 'FR'],\n            ['name' => 'Tillamook', 'country_code' => 'US'],\n            ['name' => 'Saint-Apollinaire', 'country_code' => 'FR'],\n            ['name' => 'Dietmannsried', 'country_code' => 'DE'],\n            ['name' => 'Konnern', 'country_code' => 'DE'],\n            ['name' => 'Oak Hills Place', 'country_code' => 'US'],\n            ['name' => 'Westwego', 'country_code' => 'US'],\n            ['name' => 'Ketovo', 'country_code' => 'RU'],\n            ['name' => 'Bulqize', 'country_code' => 'AL'],\n            ['name' => 'Aratoca', 'country_code' => 'CO'],\n            ['name' => 'Flowery Branch', 'country_code' => 'US'],\n            ['name' => 'Montezuma', 'country_code' => 'BR'],\n            ['name' => 'Falkenstein', 'country_code' => 'DE'],\n            ['name' => 'Dalton in Furness', 'country_code' => 'GB'],\n            ['name' => 'Durrington', 'country_code' => 'GB'],\n            ['name' => 'Houdain', 'country_code' => 'FR'],\n            ['name' => 'St. Joseph', 'country_code' => 'US'],\n            ['name' => 'Massa Marittima', 'country_code' => 'IT'],\n            ['name' => 'Yarrawonga', 'country_code' => 'AU'],\n            ['name' => 'Holly', 'country_code' => 'US'],\n            ['name' => 'Quincy', 'country_code' => 'US'],\n            ['name' => 'Bodenheim', 'country_code' => 'DE'],\n            ['name' => 'Larkfield-Wikiup', 'country_code' => 'US'],\n            ['name' => 'Frostproof', 'country_code' => 'US'],\n            ['name' => 'Egremont', 'country_code' => 'GB'],\n            ['name' => 'Bohorodchany', 'country_code' => 'UA'],\n            ['name' => 'West Earl', 'country_code' => 'US'],\n            ['name' => 'Giannouli', 'country_code' => 'GR'],\n            ['name' => 'Comercinho', 'country_code' => 'BR'],\n            ['name' => 'Myskhako', 'country_code' => 'RU'],\n            ['name' => 'Dalhart', 'country_code' => 'US'],\n            ['name' => 'East Donegal', 'country_code' => 'US'],\n            ['name' => 'Rorschacherberg', 'country_code' => 'CH'],\n            ['name' => 'Strullendorf', 'country_code' => 'DE'],\n            ['name' => 'Garrison', 'country_code' => 'US'],\n            ['name' => 'Niala Kondapalle', 'country_code' => 'IN'],\n            ['name' => 'Dannenberg', 'country_code' => 'DE'],\n            ['name' => 'Bormes-les-Mimosas', 'country_code' => 'FR'],\n            ['name' => 'Gonzales', 'country_code' => 'US'],\n            ['name' => 'Wroughton', 'country_code' => 'GB'],\n            ['name' => 'Zirl', 'country_code' => 'AT'],\n            ['name' => 'San Francisco', 'country_code' => 'CO'],\n            ['name' => 'Agua Caliente', 'country_code' => 'SV'],\n            ['name' => 'Chonnabot', 'country_code' => 'TH'],\n            ['name' => 'Meinersen', 'country_code' => 'DE'],\n            ['name' => 'Cleator Moor', 'country_code' => 'GB'],\n            ['name' => 'Orosi', 'country_code' => 'US'],\n            ['name' => 'Runnemede', 'country_code' => 'US'],\n            ['name' => 'Bel Aire', 'country_code' => 'US'],\n            ['name' => 'Aracena', 'country_code' => 'ES'],\n            ['name' => 'Le Teich', 'country_code' => 'FR'],\n            ['name' => 'Milton', 'country_code' => 'US'],\n            ['name' => 'Cervaro', 'country_code' => 'IT'],\n            ['name' => 'Tazeh Shahr', 'country_code' => 'IR'],\n            ['name' => 'Aurora', 'country_code' => 'US'],\n            ['name' => 'Dodji', 'country_code' => 'SN'],\n            ['name' => 'Silsden', 'country_code' => 'GB'],\n            ['name' => 'Firebaugh', 'country_code' => 'US'],\n            ['name' => 'Kunszentmiklos', 'country_code' => 'HU'],\n            ['name' => 'Whitefish', 'country_code' => 'US'],\n            ['name' => 'Lopatcong', 'country_code' => 'US'],\n            ['name' => 'Goffs Oak', 'country_code' => 'GB'],\n            ['name' => 'Eckbolsheim', 'country_code' => 'FR'],\n            ['name' => 'Mahtomedi', 'country_code' => 'US'],\n            ['name' => 'Lowenberg', 'country_code' => 'DE'],\n            ['name' => 'Altrip', 'country_code' => 'DE'],\n            ['name' => 'Wavrin', 'country_code' => 'FR'],\n            ['name' => 'West Vero Corridor', 'country_code' => 'US'],\n            ['name' => 'Kapuskasing', 'country_code' => 'CA'],\n            ['name' => 'Les Andelys', 'country_code' => 'FR'],\n            ['name' => 'Floris', 'country_code' => 'US'],\n            ['name' => 'Aparecida', 'country_code' => 'BR'],\n            ['name' => 'Coleshill', 'country_code' => 'GB'],\n            ['name' => 'Bargara', 'country_code' => 'AU'],\n            ['name' => 'Tolstoy-Yurt', 'country_code' => 'RU'],\n            ['name' => 'Prabuty', 'country_code' => 'PL'],\n            ['name' => 'Le Coteau', 'country_code' => 'FR'],\n            ['name' => 'Uramita', 'country_code' => 'CO'],\n            ['name' => 'Savannah', 'country_code' => 'US'],\n            ['name' => 'Grossrosseln', 'country_code' => 'DE'],\n            ['name' => 'Najera', 'country_code' => 'ES'],\n            ['name' => 'Deizisau', 'country_code' => 'DE'],\n            ['name' => 'Brighton', 'country_code' => 'US'],\n            ['name' => 'Wachtendonk', 'country_code' => 'DE'],\n            ['name' => 'Hongwansi', 'country_code' => 'CN'],\n            ['name' => 'Bismark', 'country_code' => 'DE'],\n            ['name' => 'Seiersberg', 'country_code' => 'AT'],\n            ['name' => 'Tonnay-Charente', 'country_code' => 'FR'],\n            ['name' => 'Boxford', 'country_code' => 'US'],\n            ['name' => 'Guapua', 'country_code' => 'BR'],\n            ['name' => 'Ron Phibun', 'country_code' => 'TH'],\n            ['name' => 'Liezen', 'country_code' => 'AT'],\n            ['name' => 'Montague', 'country_code' => 'US'],\n            ['name' => 'Grottaminarda', 'country_code' => 'IT'],\n            ['name' => 'Paliano', 'country_code' => 'IT'],\n            ['name' => 'Mount Joy', 'country_code' => 'US'],\n            ['name' => 'McRae-Helena', 'country_code' => 'US'],\n            ['name' => 'Trinidad', 'country_code' => 'US'],\n            ['name' => 'Kenton', 'country_code' => 'US'],\n            ['name' => 'Campo Florido', 'country_code' => 'BR'],\n            ['name' => 'Bahnemir', 'country_code' => 'IR'],\n            ['name' => 'Auby', 'country_code' => 'FR'],\n            ['name' => 'Racalmuto', 'country_code' => 'IT'],\n            ['name' => 'Carl Junction', 'country_code' => 'US'],\n            ['name' => 'Bad Schmiedeberg', 'country_code' => 'DE'],\n            ['name' => 'Rakkestad', 'country_code' => 'NO'],\n            ['name' => 'Carnauba dos Dantas', 'country_code' => 'BR'],\n            ['name' => 'Agira', 'country_code' => 'IT'],\n            ['name' => 'Southeast Arcadia', 'country_code' => 'US'],\n            ['name' => 'Sausset-les-Pins', 'country_code' => 'FR'],\n            ['name' => 'Kinderhook', 'country_code' => 'US'],\n            ['name' => 'La Malbaie', 'country_code' => 'CA'],\n            ['name' => 'Thedinghausen', 'country_code' => 'DE'],\n            ['name' => 'Boulemane', 'country_code' => 'MA'],\n            ['name' => 'Paw Paw', 'country_code' => 'US'],\n            ['name' => 'Cachoeira Dourada', 'country_code' => 'BR'],\n            ['name' => 'Kiunga', 'country_code' => 'PG'],\n            ['name' => 'Tidaholm', 'country_code' => 'SE'],\n            ['name' => 'Lake City', 'country_code' => 'US'],\n            ['name' => 'Buriti dos Montes', 'country_code' => 'BR'],\n            ['name' => 'Ballancourt', 'country_code' => 'FR'],\n            ['name' => 'Ribeirao do Largo', 'country_code' => 'BR'],\n            ['name' => 'Mataraca', 'country_code' => 'BR'],\n            ['name' => 'Radcliffe on Trent', 'country_code' => 'GB'],\n            ['name' => 'Vobarno', 'country_code' => 'IT'],\n            ['name' => 'San Sebastian', 'country_code' => 'PH'],\n            ['name' => 'Lanark', 'country_code' => 'GB'],\n            ['name' => 'Skowhegan', 'country_code' => 'US'],\n            ['name' => 'Furstenzell', 'country_code' => 'DE'],\n            ['name' => 'Moengo', 'country_code' => 'SR'],\n            ['name' => 'Erwin', 'country_code' => 'US'],\n            ['name' => 'Pudasjarvi', 'country_code' => 'FI'],\n            ['name' => 'Courtry', 'country_code' => 'FR'],\n            ['name' => 'Krailling', 'country_code' => 'DE'],\n            ['name' => 'Colorado City', 'country_code' => 'US'],\n            ['name' => 'Oak Grove', 'country_code' => 'US'],\n            ['name' => 'Karumai', 'country_code' => 'JP'],\n            ['name' => 'Biguglia', 'country_code' => 'FR'],\n            ['name' => 'La Penne-sur-Huveaune', 'country_code' => 'FR'],\n            ['name' => 'Pawling', 'country_code' => 'US'],\n            ['name' => 'Romagnat', 'country_code' => 'FR'],\n            ['name' => 'Seuzach', 'country_code' => 'CH'],\n            ['name' => 'Kosterevo', 'country_code' => 'RU'],\n            ['name' => 'Santa Barbara', 'country_code' => 'BR'],\n            ['name' => 'Kiama', 'country_code' => 'AU'],\n            ['name' => 'Shengjin', 'country_code' => 'AL'],\n            ['name' => 'Durnten', 'country_code' => 'CH'],\n            ['name' => 'Souk Khmis Bni Arouss', 'country_code' => 'MA'],\n            ['name' => 'Cintruenigo', 'country_code' => 'ES'],\n            ['name' => 'Moundsville', 'country_code' => 'US'],\n            ['name' => 'Campoformido', 'country_code' => 'IT'],\n            ['name' => 'Villa di Serio', 'country_code' => 'IT'],\n            ['name' => 'Pereiras', 'country_code' => 'BR'],\n            ['name' => 'Claix', 'country_code' => 'FR'],\n            ['name' => 'Cumberland Hill', 'country_code' => 'US'],\n            ['name' => 'Santana da Boa Vista', 'country_code' => 'BR'],\n            ['name' => 'Hanawa', 'country_code' => 'JP'],\n            ['name' => 'Sawang Wirawong', 'country_code' => 'TH'],\n            ['name' => 'Schierling', 'country_code' => 'DE'],\n            ['name' => 'Warlingham', 'country_code' => 'GB'],\n            ['name' => 'San Giovanni Gemini', 'country_code' => 'IT'],\n            ['name' => 'Montecito', 'country_code' => 'US'],\n            ['name' => 'Denison', 'country_code' => 'US'],\n            ['name' => 'Almirante', 'country_code' => 'PA'],\n            ['name' => 'Pena Forte', 'country_code' => 'BR'],\n            ['name' => 'Sirmione', 'country_code' => 'IT'],\n            ['name' => 'Locust Grove', 'country_code' => 'US'],\n            ['name' => 'Buxton', 'country_code' => 'US'],\n            ['name' => 'Half Moon', 'country_code' => 'US'],\n            ['name' => 'Lugoff', 'country_code' => 'US'],\n            ['name' => 'Vicchio', 'country_code' => 'IT'],\n            ['name' => 'Fuscaldo', 'country_code' => 'IT'],\n            ['name' => 'Costabissara', 'country_code' => 'IT'],\n            ['name' => 'Fort Mitchell', 'country_code' => 'US'],\n            ['name' => 'Conewago', 'country_code' => 'US'],\n            ['name' => 'Palmeirina', 'country_code' => 'BR'],\n            ['name' => 'Mockmuhl', 'country_code' => 'DE'],\n            ['name' => 'Manhattan', 'country_code' => 'US'],\n            ['name' => 'Honey Brook', 'country_code' => 'US'],\n            ['name' => 'Sibilia', 'country_code' => 'GT'],\n            ['name' => 'Brooklyn', 'country_code' => 'US'],\n            ['name' => 'North Weeki Wachee', 'country_code' => 'US'],\n            ['name' => 'Crowthorne', 'country_code' => 'GB'],\n            ['name' => 'Mammoth Lakes', 'country_code' => 'US'],\n            ['name' => 'Akranes', 'country_code' => 'IS'],\n            ['name' => 'Bongaree', 'country_code' => 'AU'],\n            ['name' => 'Meggen', 'country_code' => 'CH'],\n            ['name' => 'Bayabas', 'country_code' => 'PH'],\n            ['name' => 'Millis', 'country_code' => 'US'],\n            ['name' => 'Trebon', 'country_code' => 'CZ'],\n            ['name' => 'Ruurlo', 'country_code' => 'NL'],\n            ['name' => 'Oberkochen', 'country_code' => 'DE'],\n            ['name' => 'Johnstown', 'country_code' => 'US'],\n            ['name' => 'Slapanice', 'country_code' => 'CZ'],\n            ['name' => 'Le Mesnil-le-Roi', 'country_code' => 'FR'],\n            ['name' => 'Spotswood', 'country_code' => 'US'],\n            ['name' => 'Sychevka', 'country_code' => 'RU'],\n            ['name' => 'Oulad Chbana', 'country_code' => 'MA'],\n            ['name' => 'Haddam', 'country_code' => 'US'],\n            ['name' => 'Waynesburg', 'country_code' => 'US'],\n            ['name' => 'Langenargen', 'country_code' => 'DE'],\n            ['name' => 'Shankoucun', 'country_code' => 'CN'],\n            ['name' => 'Kennett', 'country_code' => 'US'],\n            ['name' => 'Irapuru', 'country_code' => 'BR'],\n            ['name' => 'Thomson', 'country_code' => 'US'],\n            ['name' => 'Gattinara', 'country_code' => 'IT'],\n            ['name' => 'Irondale', 'country_code' => 'US'],\n            ['name' => 'Meghraoua', 'country_code' => 'MA'],\n            ['name' => 'Prim Decembrie', 'country_code' => 'RO'],\n            ['name' => 'Renfrew', 'country_code' => 'CA'],\n            ['name' => 'Neustadt', 'country_code' => 'DE'],\n            ['name' => 'Hongmao', 'country_code' => 'CN'],\n            ['name' => 'Guenange', 'country_code' => 'FR'],\n            ['name' => 'Bruck an der Leitha', 'country_code' => 'AT'],\n            ['name' => 'Dudingen', 'country_code' => 'CH'],\n            ['name' => 'Stornoway', 'country_code' => 'GB'],\n            ['name' => 'Novaya Ladoga', 'country_code' => 'RU'],\n            ['name' => 'Westlake Village', 'country_code' => 'US'],\n            ['name' => 'Hasselt', 'country_code' => 'NL'],\n            ['name' => 'San Daniele del Friuli', 'country_code' => 'IT'],\n            ['name' => 'Mirleft', 'country_code' => 'MA'],\n            ['name' => 'Passa Tempo', 'country_code' => 'BR'],\n            ['name' => 'Harmelen', 'country_code' => 'NL'],\n            ['name' => 'Castle Shannon', 'country_code' => 'US'],\n            ['name' => 'Catarina', 'country_code' => 'NI'],\n            ['name' => 'North Elba', 'country_code' => 'US'],\n            ['name' => 'Coaldale', 'country_code' => 'CA'],\n            ['name' => 'Rymarov', 'country_code' => 'CZ'],\n            ['name' => 'Zhanibek', 'country_code' => 'KZ'],\n            ['name' => 'Zavodske', 'country_code' => 'UA'],\n            ['name' => 'Chester', 'country_code' => 'US'],\n            ['name' => 'Lipnik nad Becvou', 'country_code' => 'CZ'],\n            ['name' => 'Archidona', 'country_code' => 'ES'],\n            ['name' => 'Landeck', 'country_code' => 'AT'],\n            ['name' => 'Endirey', 'country_code' => 'RU'],\n            ['name' => 'Pagsanghan', 'country_code' => 'PH'],\n            ['name' => 'Napoleon', 'country_code' => 'US'],\n            ['name' => 'Vau i Dejes', 'country_code' => 'AL'],\n            ['name' => 'Schomberg', 'country_code' => 'DE'],\n            ['name' => 'Willebadessen', 'country_code' => 'DE'],\n            ['name' => 'Komsomolsk', 'country_code' => 'RU'],\n            ['name' => 'Novi Sanzhary', 'country_code' => 'UA'],\n            ['name' => 'Upper Saddle River', 'country_code' => 'US'],\n            ['name' => 'Chinique', 'country_code' => 'GT'],\n            ['name' => 'Melqa el Ouidane', 'country_code' => 'MA'],\n            ['name' => 'Donges', 'country_code' => 'FR'],\n            ['name' => 'Chantada', 'country_code' => 'ES'],\n            ['name' => 'Mahopac', 'country_code' => 'US'],\n            ['name' => 'Tarfaya', 'country_code' => 'MA'],\n            ['name' => 'Temperance', 'country_code' => 'US'],\n            ['name' => 'Maxdorf', 'country_code' => 'DE'],\n            ['name' => 'Corella', 'country_code' => 'ES'],\n            ['name' => 'Oberlin', 'country_code' => 'US'],\n            ['name' => 'Thaon-les-Vosges', 'country_code' => 'FR'],\n            ['name' => 'Taourga', 'country_code' => 'DZ'],\n            ['name' => 'High Ackworth', 'country_code' => 'GB'],\n            ['name' => 'Arnstein', 'country_code' => 'DE'],\n            ['name' => 'Motavita', 'country_code' => 'CO'],\n            ['name' => 'Cernosice', 'country_code' => 'CZ'],\n            ['name' => 'Reusel', 'country_code' => 'NL'],\n            ['name' => 'Vineuil', 'country_code' => 'FR'],\n            ['name' => 'Twin Lakes', 'country_code' => 'US'],\n            ['name' => 'Lake Norman of Catawba', 'country_code' => 'US'],\n            ['name' => 'Jefferson City', 'country_code' => 'US'],\n            ['name' => 'Country Club Estates', 'country_code' => 'US'],\n            ['name' => 'Lysianka', 'country_code' => 'UA'],\n            ['name' => 'Kirawsk', 'country_code' => 'BY'],\n            ['name' => 'Kvasyliv', 'country_code' => 'UA'],\n            ['name' => 'Harefield', 'country_code' => 'GB'],\n            ['name' => 'Rhoon', 'country_code' => 'NL'],\n            ['name' => 'Kenilworth', 'country_code' => 'US'],\n            ['name' => 'Eguilles', 'country_code' => 'FR'],\n            ['name' => 'Carboneras', 'country_code' => 'ES'],\n            ['name' => 'Chiaramonte Gulfi', 'country_code' => 'IT'],\n            ['name' => 'Bad Herrenalb', 'country_code' => 'DE'],\n            ['name' => 'Ercsi', 'country_code' => 'HU'],\n            ['name' => 'Loppi', 'country_code' => 'FI'],\n            ['name' => 'Albarradas', 'country_code' => 'MX'],\n            ['name' => 'Krasnopillya', 'country_code' => 'UA'],\n            ['name' => 'Beauzelle', 'country_code' => 'FR'],\n            ['name' => 'Fifi', 'country_code' => 'MA'],\n            ['name' => 'Jesteburg', 'country_code' => 'DE'],\n            ['name' => 'Corumbaiba', 'country_code' => 'BR'],\n            ['name' => 'Bedekovcina', 'country_code' => 'HR'],\n            ['name' => 'Gleize', 'country_code' => 'FR'],\n            ['name' => 'Schroeppel', 'country_code' => 'US'],\n            ['name' => 'Thuir', 'country_code' => 'FR'],\n            ['name' => 'Caccamo', 'country_code' => 'IT'],\n            ['name' => 'Granichen', 'country_code' => 'CH'],\n            ['name' => 'Porto de Pedras', 'country_code' => 'BR'],\n            ['name' => 'Uribe', 'country_code' => 'CO'],\n            ['name' => 'Burgos', 'country_code' => 'PH'],\n            ['name' => 'Mikasa', 'country_code' => 'JP'],\n            ['name' => 'Cortlandville', 'country_code' => 'US'],\n            ['name' => 'Ellsworth', 'country_code' => 'US'],\n            ['name' => 'Wedgefield', 'country_code' => 'US'],\n            ['name' => 'Luisant', 'country_code' => 'FR'],\n            ['name' => 'Campomarino', 'country_code' => 'IT'],\n            ['name' => 'Itamarati', 'country_code' => 'BR'],\n            ['name' => 'Ergoldsbach', 'country_code' => 'DE'],\n            ['name' => 'Clanwilliam', 'country_code' => 'ZA'],\n            ['name' => 'Vrutky', 'country_code' => 'SK'],\n            ['name' => 'Nova Fatima', 'country_code' => 'BR'],\n            ['name' => 'Vetschau/Spreewald', 'country_code' => 'DE'],\n            ['name' => 'Teuchern', 'country_code' => 'DE'],\n            ['name' => 'Monona', 'country_code' => 'US'],\n            ['name' => 'Grumello del Monte', 'country_code' => 'IT'],\n            ['name' => 'South Londonderry', 'country_code' => 'US'],\n            ['name' => 'Verkhnyaya Khava', 'country_code' => 'RU'],\n            ['name' => 'West Thurrock', 'country_code' => 'GB'],\n            ['name' => 'Manali', 'country_code' => 'IN'],\n            ['name' => 'Kef el Rhar', 'country_code' => 'MA'],\n            ['name' => 'Fresnes-sur-Escaut', 'country_code' => 'FR'],\n            ['name' => 'Major Vieira', 'country_code' => 'BR'],\n            ['name' => 'Center Line', 'country_code' => 'US'],\n            ['name' => 'Venice Gardens', 'country_code' => 'US'],\n            ['name' => 'Domnesti', 'country_code' => 'RO'],\n            ['name' => 'Pismo Beach', 'country_code' => 'US'],\n            ['name' => 'Beebe', 'country_code' => 'US'],\n            ['name' => 'Bramcote', 'country_code' => 'GB'],\n            ['name' => 'Isle', 'country_code' => 'FR'],\n            ['name' => 'Milliken', 'country_code' => 'US'],\n            ['name' => 'Montorio al Vomano', 'country_code' => 'IT'],\n            ['name' => 'Black Mountain', 'country_code' => 'US'],\n            ['name' => 'Cenes de la Vega', 'country_code' => 'ES'],\n            ['name' => 'Hettange-Grande', 'country_code' => 'FR'],\n            ['name' => 'Charnay-les-Macon', 'country_code' => 'FR'],\n            ['name' => 'Dzidzantun', 'country_code' => 'MX'],\n            ['name' => 'Siret', 'country_code' => 'RO'],\n            ['name' => 'San Miguel Quetzaltepec', 'country_code' => 'MX'],\n            ['name' => 'Kerikeri', 'country_code' => 'NZ'],\n            ['name' => 'Pasching', 'country_code' => 'AT'],\n            ['name' => 'Arico el Nuevo', 'country_code' => 'ES'],\n            ['name' => 'Belene', 'country_code' => 'BG'],\n            ['name' => 'Crestwood Village', 'country_code' => 'US'],\n            ['name' => 'Todos Santos', 'country_code' => 'MX'],\n            ['name' => 'Cellole', 'country_code' => 'IT'],\n            ['name' => 'Imi n-Tlit', 'country_code' => 'MA'],\n            ['name' => 'El Divisadero', 'country_code' => 'SV'],\n            ['name' => 'Neuves-Maisons', 'country_code' => 'FR'],\n            ['name' => 'Venhuizen', 'country_code' => 'NL'],\n            ['name' => 'Niagara', 'country_code' => 'US'],\n            ['name' => 'Tavullia', 'country_code' => 'IT'],\n            ['name' => 'Los Santos de Maimona', 'country_code' => 'ES'],\n            ['name' => 'Watton', 'country_code' => 'GB'],\n            ['name' => 'Meadow Lakes', 'country_code' => 'US'],\n            ['name' => 'Selters', 'country_code' => 'DE'],\n            ['name' => 'Sogel', 'country_code' => 'DE'],\n            ['name' => 'Pedreguer', 'country_code' => 'ES'],\n            ['name' => 'Center Moriches', 'country_code' => 'US'],\n            ['name' => 'Litchfield', 'country_code' => 'US'],\n            ['name' => 'Portugal Cove-St. Philip s', 'country_code' => 'CA'],\n            ['name' => 'Vale do Paraiso', 'country_code' => 'BR'],\n            ['name' => 'Beeskow', 'country_code' => 'DE'],\n            ['name' => 'Tarutyne', 'country_code' => 'UA'],\n            ['name' => 'Port Jefferson', 'country_code' => 'US'],\n            ['name' => 'Middleport', 'country_code' => 'US'],\n            ['name' => 'Eaton', 'country_code' => 'US'],\n            ['name' => 'Heino', 'country_code' => 'NL'],\n            ['name' => 'Pisogne', 'country_code' => 'IT'],\n            ['name' => 'Beloslav', 'country_code' => 'BG'],\n            ['name' => 'Guarani das Missoes', 'country_code' => 'BR'],\n            ['name' => 'Tuskegee', 'country_code' => 'US'],\n            ['name' => 'Quinchao', 'country_code' => 'CL'],\n            ['name' => 'Breda di Piave', 'country_code' => 'IT'],\n            ['name' => 'Bonsecours', 'country_code' => 'FR'],\n            ['name' => 'Roquetas', 'country_code' => 'ES'],\n            ['name' => 'Zorra', 'country_code' => 'CA'],\n            ['name' => 'Daun', 'country_code' => 'DE'],\n            ['name' => 'Soustons', 'country_code' => 'FR'],\n            ['name' => 'Ephrata', 'country_code' => 'US'],\n            ['name' => 'Rockwood', 'country_code' => 'US'],\n            ['name' => 'Kindberg', 'country_code' => 'AT'],\n            ['name' => 'Canton', 'country_code' => 'US'],\n            ['name' => 'Nagykovacsi', 'country_code' => 'HU'],\n            ['name' => 'Fehergyarmat', 'country_code' => 'HU'],\n            ['name' => 'Neuendettelsau', 'country_code' => 'DE'],\n            ['name' => 'Bystrice nad Pernstejnem', 'country_code' => 'CZ'],\n            ['name' => 'Vorselaar', 'country_code' => 'BE'],\n            ['name' => 'Leesville', 'country_code' => 'US'],\n            ['name' => 'Cosala', 'country_code' => 'MX'],\n            ['name' => 'Peronne', 'country_code' => 'FR'],\n            ['name' => 'Oradell', 'country_code' => 'US'],\n            ['name' => 'Kitimat', 'country_code' => 'CA'],\n            ['name' => 'Minnetrista', 'country_code' => 'US'],\n            ['name' => 'Templeton', 'country_code' => 'US'],\n            ['name' => 'Merrow', 'country_code' => 'GB'],\n            ['name' => 'Tarouca', 'country_code' => 'PT'],\n            ['name' => 'Gering', 'country_code' => 'US'],\n            ['name' => 'Manhush', 'country_code' => 'UA'],\n            ['name' => 'Sanctuary Point', 'country_code' => 'AU'],\n            ['name' => 'Levico Terme', 'country_code' => 'IT'],\n            ['name' => 'Kyabram', 'country_code' => 'AU'],\n            ['name' => 'Bad Endbach', 'country_code' => 'DE'],\n            ['name' => 'Guimarania', 'country_code' => 'BR'],\n            ['name' => 'Sidi  Ali Bou Aqba', 'country_code' => 'MA'],\n            ['name' => 'Shelburne', 'country_code' => 'CA'],\n            ['name' => 'Adams', 'country_code' => 'US'],\n            ['name' => 'Bagnes', 'country_code' => 'CH'],\n            ['name' => 'Serra Ricco', 'country_code' => 'IT'],\n            ['name' => 'Bassens', 'country_code' => 'FR'],\n            ['name' => 'Villanueva del Arzobispo', 'country_code' => 'ES'],\n            ['name' => 'Gongogi', 'country_code' => 'BR'],\n            ['name' => 'Irai', 'country_code' => 'BR'],\n            ['name' => 'Monts', 'country_code' => 'FR'],\n            ['name' => 'Leao', 'country_code' => 'BR'],\n            ['name' => 'Tricesimo', 'country_code' => 'IT'],\n            ['name' => 'Alnwick', 'country_code' => 'GB'],\n            ['name' => 'Harrison', 'country_code' => 'US'],\n            ['name' => 'Healesville', 'country_code' => 'AU'],\n            ['name' => 'Medyn', 'country_code' => 'RU'],\n            ['name' => 'Gratkorn', 'country_code' => 'AT'],\n            ['name' => 'Bad Lausick', 'country_code' => 'DE'],\n            ['name' => 'Kennedy', 'country_code' => 'US'],\n            ['name' => 'Medebach', 'country_code' => 'DE'],\n            ['name' => 'Remiremont', 'country_code' => 'FR'],\n            ['name' => 'Hazard', 'country_code' => 'US'],\n            ['name' => 'Summit Park', 'country_code' => 'US'],\n            ['name' => 'Ponte Alta do Tocantins', 'country_code' => 'BR'],\n            ['name' => 'Gray', 'country_code' => 'US'],\n            ['name' => 'Vidreras', 'country_code' => 'ES'],\n            ['name' => 'Nor Kharberd', 'country_code' => 'AM'],\n            ['name' => 'Cherry Valley', 'country_code' => 'US'],\n            ['name' => 'Untersiggenthal', 'country_code' => 'CH'],\n            ['name' => 'Omak', 'country_code' => 'US'],\n            ['name' => 'Vandenberg Village', 'country_code' => 'US'],\n            ['name' => 'Vityazevo', 'country_code' => 'RU'],\n            ['name' => 'West Dundee', 'country_code' => 'US'],\n            ['name' => 'Loreggia', 'country_code' => 'IT'],\n            ['name' => 'Totnes', 'country_code' => 'GB'],\n            ['name' => 'Blandon', 'country_code' => 'US'],\n            ['name' => 'San Esteban Sasroviras', 'country_code' => 'ES'],\n            ['name' => 'El Meghassine', 'country_code' => 'MA'],\n            ['name' => 'Winterbach', 'country_code' => 'DE'],\n            ['name' => 'Borgonovo Val Tidone', 'country_code' => 'IT'],\n            ['name' => 'Duvall', 'country_code' => 'US'],\n            ['name' => 'Serra Negra do Norte', 'country_code' => 'BR'],\n            ['name' => 'Saint-Affrique', 'country_code' => 'FR'],\n            ['name' => 'Yaremche', 'country_code' => 'UA'],\n            ['name' => 'Laihia', 'country_code' => 'FI'],\n            ['name' => 'Collier', 'country_code' => 'US'],\n            ['name' => 'Ayer', 'country_code' => 'US'],\n            ['name' => 'Oederan', 'country_code' => 'DE'],\n            ['name' => 'Mezguitem', 'country_code' => 'MA'],\n            ['name' => 'Solosuchiapa', 'country_code' => 'MX'],\n            ['name' => 'Ananiv', 'country_code' => 'UA'],\n            ['name' => 'Vinton', 'country_code' => 'US'],\n            ['name' => 'Gurjaani', 'country_code' => 'GE'],\n            ['name' => 'Olvera', 'country_code' => 'ES'],\n            ['name' => 'Kawerau', 'country_code' => 'NZ'],\n            ['name' => 'Notre-Dame-de-Bondeville', 'country_code' => 'FR'],\n            ['name' => 'Wissous', 'country_code' => 'FR'],\n            ['name' => 'Joshua', 'country_code' => 'US'],\n            ['name' => 'Livadia', 'country_code' => 'CY'],\n            ['name' => 'Melton', 'country_code' => 'AU'],\n            ['name' => 'Peixe-Boi', 'country_code' => 'BR'],\n            ['name' => 'Clausthal', 'country_code' => 'DE'],\n            ['name' => 'Kirchheimbolanden', 'country_code' => 'DE'],\n            ['name' => 'Oak Hill', 'country_code' => 'US'],\n            ['name' => 'Santa Cruz do Monte Castelo', 'country_code' => 'BR'],\n            ['name' => 'Burpengary', 'country_code' => 'AU'],\n            ['name' => 'Herrieden', 'country_code' => 'DE'],\n            ['name' => 'Hadfield', 'country_code' => 'GB'],\n            ['name' => 'Monument', 'country_code' => 'US'],\n            ['name' => 'Hopkinton', 'country_code' => 'US'],\n            ['name' => 'Reilingen', 'country_code' => 'DE'],\n            ['name' => 'Turbigo', 'country_code' => 'IT'],\n            ['name' => 'Bosel', 'country_code' => 'DE'],\n            ['name' => 'Monachil', 'country_code' => 'ES'],\n            ['name' => 'Orizania', 'country_code' => 'BR'],\n            ['name' => 'Algermissen', 'country_code' => 'DE'],\n            ['name' => 'Croton-on-Hudson', 'country_code' => 'US'],\n            ['name' => 'Zapadnaya Dvina', 'country_code' => 'RU'],\n            ['name' => 'Saint-Julien-les-Villas', 'country_code' => 'FR'],\n            ['name' => 'Bellevue', 'country_code' => 'US'],\n            ['name' => 'Briarcliff Manor', 'country_code' => 'US'],\n            ['name' => 'Sodus', 'country_code' => 'US'],\n            ['name' => 'Olonets', 'country_code' => 'RU'],\n            ['name' => 'Targu Carbunesti', 'country_code' => 'RO'],\n            ['name' => 'Carmignano di Brenta', 'country_code' => 'IT'],\n            ['name' => 'Alliance', 'country_code' => 'US'],\n            ['name' => 'Wickenburg', 'country_code' => 'US'],\n            ['name' => 'Heimberg', 'country_code' => 'CH'],\n            ['name' => 'Sterling', 'country_code' => 'US'],\n            ['name' => 'Allegheny', 'country_code' => 'US'],\n            ['name' => 'Reppenstedt', 'country_code' => 'DE'],\n            ['name' => 'Kunszentmarton', 'country_code' => 'HU'],\n            ['name' => 'Moraujo', 'country_code' => 'BR'],\n            ['name' => 'Teteringen', 'country_code' => 'NL'],\n            ['name' => 'Pinoso', 'country_code' => 'ES'],\n            ['name' => 'Trevoux', 'country_code' => 'FR'],\n            ['name' => 'Valencina de la Concepcion', 'country_code' => 'ES'],\n            ['name' => 'Selah', 'country_code' => 'US'],\n            ['name' => 'Tafraoutane', 'country_code' => 'MA'],\n            ['name' => 'Ecouen', 'country_code' => 'FR'],\n            ['name' => 'Vista Alegre do Alto', 'country_code' => 'BR'],\n            ['name' => 'Kushuhum', 'country_code' => 'UA'],\n            ['name' => 'Hammerfest', 'country_code' => 'NO'],\n            ['name' => 'Pedraza', 'country_code' => 'CO'],\n            ['name' => 'Shorewood', 'country_code' => 'US'],\n            ['name' => 'Languidic', 'country_code' => 'FR'],\n            ['name' => 'Bruchmuhlbach-Miesau', 'country_code' => 'DE'],\n            ['name' => 'Agerola', 'country_code' => 'IT'],\n            ['name' => 'Saint-Hippolyte', 'country_code' => 'CA'],\n            ['name' => 'California', 'country_code' => 'BR'],\n            ['name' => 'Postbauer-Heng', 'country_code' => 'DE'],\n            ['name' => 'Helena Valley West Central', 'country_code' => 'US'],\n            ['name' => 'Aguas da Prata', 'country_code' => 'BR'],\n            ['name' => 'Applewood', 'country_code' => 'US'],\n            ['name' => 'Jackson', 'country_code' => 'US'],\n            ['name' => 'Aguelhok', 'country_code' => 'ML'],\n            ['name' => 'Cologne', 'country_code' => 'IT'],\n            ['name' => 'Soisy-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Yungay', 'country_code' => 'PE'],\n            ['name' => 'Kronenwetter', 'country_code' => 'US'],\n            ['name' => 'Schweich', 'country_code' => 'DE'],\n            ['name' => 'Publier', 'country_code' => 'FR'],\n            ['name' => 'Dzyatlava', 'country_code' => 'BY'],\n            ['name' => 'Maravilhas', 'country_code' => 'BR'],\n            ['name' => 'Saint-Priest-en-Jarez', 'country_code' => 'FR'],\n            ['name' => 'Gilberts', 'country_code' => 'US'],\n            ['name' => 'Bargersville', 'country_code' => 'US'],\n            ['name' => 'Avella', 'country_code' => 'IT'],\n            ['name' => 'Colico', 'country_code' => 'IT'],\n            ['name' => 'Treuen', 'country_code' => 'DE'],\n            ['name' => 'Sacrofano', 'country_code' => 'IT'],\n            ['name' => 'Hampton', 'country_code' => 'US'],\n            ['name' => 'Sudden Valley', 'country_code' => 'US'],\n            ['name' => 'Freisen', 'country_code' => 'DE'],\n            ['name' => 'Campo do Tenente', 'country_code' => 'BR'],\n            ['name' => 'Hollymead', 'country_code' => 'US'],\n            ['name' => 'Rockmart', 'country_code' => 'US'],\n            ['name' => 'Tyn nad Vltavou', 'country_code' => 'CZ'],\n            ['name' => 'Sankt Andra vor dem Hagenthale', 'country_code' => 'AT'],\n            ['name' => 'Valmaseda', 'country_code' => 'ES'],\n            ['name' => 'Monte do Carmo', 'country_code' => 'BR'],\n            ['name' => 'Schellerten', 'country_code' => 'DE'],\n            ['name' => 'Lake Carmel', 'country_code' => 'US'],\n            ['name' => 'Lockwood', 'country_code' => 'US'],\n            ['name' => 'Wyoming', 'country_code' => 'US'],\n            ['name' => 'Montreuil-Juigne', 'country_code' => 'FR'],\n            ['name' => 'Semenivka', 'country_code' => 'UA'],\n            ['name' => 'Jockgrim', 'country_code' => 'DE'],\n            ['name' => 'Beynes', 'country_code' => 'FR'],\n            ['name' => 'Lake Dallas', 'country_code' => 'US'],\n            ['name' => 'Banayoyo', 'country_code' => 'PH'],\n            ['name' => 'Sampedor', 'country_code' => 'ES'],\n            ['name' => 'Pravia', 'country_code' => 'ES'],\n            ['name' => 'Bloomingdale', 'country_code' => 'US'],\n            ['name' => 'Schoonebeek', 'country_code' => 'NL'],\n            ['name' => 'Rothenburg', 'country_code' => 'CH'],\n            ['name' => 'Arevalo', 'country_code' => 'ES'],\n            ['name' => 'Manziana', 'country_code' => 'IT'],\n            ['name' => 'Ramstein-Miesenbach', 'country_code' => 'DE'],\n            ['name' => 'Maracalagonis', 'country_code' => 'IT'],\n            ['name' => 'Rolling Hills Estates', 'country_code' => 'US'],\n            ['name' => 'Tapirai', 'country_code' => 'BR'],\n            ['name' => 'El Metline', 'country_code' => 'TN'],\n            ['name' => 'Moirans', 'country_code' => 'FR'],\n            ['name' => 'Tamasi', 'country_code' => 'HU'],\n            ['name' => 'Uckange', 'country_code' => 'FR'],\n            ['name' => 'Lisses', 'country_code' => 'FR'],\n            ['name' => 'Bestensee', 'country_code' => 'DE'],\n            ['name' => 'South Cleveland', 'country_code' => 'US'],\n            ['name' => 'Casteltermini', 'country_code' => 'IT'],\n            ['name' => 'Willits', 'country_code' => 'US'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'Kottingbrunn', 'country_code' => 'AT'],\n            ['name' => 'Chisineu Cris', 'country_code' => 'RO'],\n            ['name' => 'Clisson', 'country_code' => 'FR'],\n            ['name' => 'Willerby', 'country_code' => 'GB'],\n            ['name' => 'Namestovo', 'country_code' => 'SK'],\n            ['name' => 'Melnikovo', 'country_code' => 'RU'],\n            ['name' => 'Skiatook', 'country_code' => 'US'],\n            ['name' => 'Alpestre', 'country_code' => 'BR'],\n            ['name' => 'Decorah', 'country_code' => 'US'],\n            ['name' => 'Itanagra', 'country_code' => 'BR'],\n            ['name' => 'Elsterwerda', 'country_code' => 'DE'],\n            ['name' => 'Iepe', 'country_code' => 'BR'],\n            ['name' => 'Ascurra', 'country_code' => 'BR'],\n            ['name' => 'Clydach', 'country_code' => 'GB'],\n            ['name' => 'Brookhaven', 'country_code' => 'US'],\n            ['name' => 'Macaubal', 'country_code' => 'BR'],\n            ['name' => 'Delligsen', 'country_code' => 'DE'],\n            ['name' => 'Diamondhead', 'country_code' => 'US'],\n            ['name' => 'Akrehamn', 'country_code' => 'NO'],\n            ['name' => 'Candelo', 'country_code' => 'IT'],\n            ['name' => 'Floresville', 'country_code' => 'US'],\n            ['name' => 'Bedminster', 'country_code' => 'US'],\n            ['name' => 'Ripley', 'country_code' => 'US'],\n            ['name' => 'Wintzenheim', 'country_code' => 'FR'],\n            ['name' => 'Chardon', 'country_code' => 'US'],\n            ['name' => 'Lancaster', 'country_code' => 'US'],\n            ['name' => 'Morehead', 'country_code' => 'US'],\n            ['name' => 'Langres', 'country_code' => 'FR'],\n            ['name' => 'Arazane', 'country_code' => 'MA'],\n            ['name' => 'Kups', 'country_code' => 'DE'],\n            ['name' => 'Boston', 'country_code' => 'US'],\n            ['name' => 'Arcugnano', 'country_code' => 'IT'],\n            ['name' => 'Iguatama', 'country_code' => 'BR'],\n            ['name' => 'Angmering', 'country_code' => 'GB'],\n            ['name' => 'Arta', 'country_code' => 'ES'],\n            ['name' => 'Ripon', 'country_code' => 'US'],\n            ['name' => 'Dubi', 'country_code' => 'CZ'],\n            ['name' => 'Rheinsberg', 'country_code' => 'DE'],\n            ['name' => 'Taseyevo', 'country_code' => 'RU'],\n            ['name' => 'Castlegar', 'country_code' => 'CA'],\n            ['name' => 'Mihailesti', 'country_code' => 'RO'],\n            ['name' => 'Titchfield', 'country_code' => 'GB'],\n            ['name' => 'Krasnokholmskiy', 'country_code' => 'RU'],\n            ['name' => 'Anacapri', 'country_code' => 'IT'],\n            ['name' => 'Bad Duben', 'country_code' => 'DE'],\n            ['name' => 'Odessa', 'country_code' => 'US'],\n            ['name' => 'Saint-Victoret', 'country_code' => 'FR'],\n            ['name' => 'Jermuk', 'country_code' => 'AM'],\n            ['name' => 'Saint-Vincent-de-Tyrosse', 'country_code' => 'FR'],\n            ['name' => 'Treze Tilias', 'country_code' => 'BR'],\n            ['name' => 'Villaverde del Rio', 'country_code' => 'ES'],\n            ['name' => 'Mayo', 'country_code' => 'US'],\n            ['name' => 'Hamilton', 'country_code' => 'US'],\n            ['name' => 'Northfield', 'country_code' => 'US'],\n            ['name' => 'Lodi Vecchio', 'country_code' => 'IT'],\n            ['name' => 'Tropea', 'country_code' => 'IT'],\n            ['name' => 'Altomunster', 'country_code' => 'DE'],\n            ['name' => 'Menominee', 'country_code' => 'US'],\n            ['name' => 'Brion', 'country_code' => 'ES'],\n            ['name' => 'Lagoa Alegre', 'country_code' => 'BR'],\n            ['name' => 'La Couronne', 'country_code' => 'FR'],\n            ['name' => 'Berango', 'country_code' => 'ES'],\n            ['name' => 'Heyin', 'country_code' => 'CN'],\n            ['name' => 'Ceret', 'country_code' => 'FR'],\n            ['name' => 'Svoge', 'country_code' => 'BG'],\n            ['name' => 'Pidvolochysk', 'country_code' => 'UA'],\n            ['name' => 'Sezimovo Usti', 'country_code' => 'CZ'],\n            ['name' => 'Pleasant Hills', 'country_code' => 'US'],\n            ['name' => 'Pahokee', 'country_code' => 'US'],\n            ['name' => 'Moulay Abdelkader', 'country_code' => 'MA'],\n            ['name' => 'Insar', 'country_code' => 'RU'],\n            ['name' => 'Ahuimanu', 'country_code' => 'US'],\n            ['name' => 'Crete', 'country_code' => 'US'],\n            ['name' => 'Saint-Prix', 'country_code' => 'FR'],\n            ['name' => 'Lagkadas', 'country_code' => 'GR'],\n            ['name' => 'Topolobampo', 'country_code' => 'MX'],\n            ['name' => 'Mamonovo', 'country_code' => 'RU'],\n            ['name' => 'Loudoun Valley Estates', 'country_code' => 'US'],\n            ['name' => 'Chestnut Ridge', 'country_code' => 'US'],\n            ['name' => 'Laurel Hill', 'country_code' => 'US'],\n            ['name' => 'Island Lake', 'country_code' => 'US'],\n            ['name' => 'Icem', 'country_code' => 'BR'],\n            ['name' => 'Estrela do Sul', 'country_code' => 'BR'],\n            ['name' => 'Seasalter', 'country_code' => 'GB'],\n            ['name' => 'Puentedeume', 'country_code' => 'ES'],\n            ['name' => 'Church Point', 'country_code' => 'CA'],\n            ['name' => 'Lesneven', 'country_code' => 'FR'],\n            ['name' => 'Lochgelly', 'country_code' => 'GB'],\n            ['name' => 'Rychvald', 'country_code' => 'CZ'],\n            ['name' => 'Lagord', 'country_code' => 'FR'],\n            ['name' => 'Puerto Parra', 'country_code' => 'CO'],\n            ['name' => 'Ida Ou Azza', 'country_code' => 'MA'],\n            ['name' => 'Oak Brook', 'country_code' => 'US'],\n            ['name' => 'Santana de Pirapama', 'country_code' => 'BR'],\n            ['name' => 'Penalva do Castelo', 'country_code' => 'PT'],\n            ['name' => 'Kozhevnikovo', 'country_code' => 'RU'],\n            ['name' => 'Zeltweg', 'country_code' => 'AT'],\n            ['name' => 'Seaford', 'country_code' => 'US'],\n            ['name' => 'Palagianello', 'country_code' => 'IT'],\n            ['name' => 'Neresheim', 'country_code' => 'DE'],\n            ['name' => 'Jequitai', 'country_code' => 'BR'],\n            ['name' => 'Narre Warren North', 'country_code' => 'AU'],\n            ['name' => 'Rommelshausen', 'country_code' => 'DE'],\n            ['name' => 'Cruzeta', 'country_code' => 'BR'],\n            ['name' => 'Tara', 'country_code' => 'JP'],\n            ['name' => 'Caldas de Malavella', 'country_code' => 'ES'],\n            ['name' => 'Antoing', 'country_code' => 'BE'],\n            ['name' => 'Centellas', 'country_code' => 'ES'],\n            ['name' => 'Millom', 'country_code' => 'GB'],\n            ['name' => 'Loftus', 'country_code' => 'GB'],\n            ['name' => 'Pedra Lavrada', 'country_code' => 'BR'],\n            ['name' => 'Crediton', 'country_code' => 'GB'],\n            ['name' => 'Cumiana', 'country_code' => 'IT'],\n            ['name' => 'Evergreen', 'country_code' => 'US'],\n            ['name' => 'Pershore', 'country_code' => 'GB'],\n            ['name' => 'Nurmes', 'country_code' => 'FI'],\n            ['name' => 'Digoin', 'country_code' => 'FR'],\n            ['name' => 'Helvecia', 'country_code' => 'AR'],\n            ['name' => 'Nikolsk', 'country_code' => 'RU'],\n            ['name' => 'Berchtesgaden', 'country_code' => 'DE'],\n            ['name' => 'Cumberland', 'country_code' => 'US'],\n            ['name' => 'Vizille', 'country_code' => 'FR'],\n            ['name' => 'Butzow', 'country_code' => 'DE'],\n            ['name' => 'Cartoceto', 'country_code' => 'IT'],\n            ['name' => 'Clementina', 'country_code' => 'BR'],\n            ['name' => 'Mascoutah', 'country_code' => 'US'],\n            ['name' => 'Almyros', 'country_code' => 'GR'],\n            ['name' => 'Brazil', 'country_code' => 'US'],\n            ['name' => 'Chiavenna', 'country_code' => 'IT'],\n            ['name' => 'Vertentes do Lerio', 'country_code' => 'BR'],\n            ['name' => 'Illingen', 'country_code' => 'DE'],\n            ['name' => 'Goring by Sea', 'country_code' => 'GB'],\n            ['name' => 'Iaras', 'country_code' => 'BR'],\n            ['name' => 'Bosa', 'country_code' => 'IT'],\n            ['name' => 'Lanchyn', 'country_code' => 'UA'],\n            ['name' => 'North Coventry', 'country_code' => 'US'],\n            ['name' => 'Aberdeen', 'country_code' => 'US'],\n            ['name' => 'Jennings Lodge', 'country_code' => 'US'],\n            ['name' => 'Tullins', 'country_code' => 'FR'],\n            ['name' => 'Kozelets', 'country_code' => 'UA'],\n            ['name' => 'Saint-Denis-en-Val', 'country_code' => 'FR'],\n            ['name' => 'Jefferson', 'country_code' => 'US'],\n            ['name' => 'Manhasset', 'country_code' => 'US'],\n            ['name' => 'Green', 'country_code' => 'US'],\n            ['name' => 'Santa Maria di Licodia', 'country_code' => 'IT'],\n            ['name' => 'Torrile', 'country_code' => 'IT'],\n            ['name' => 'Mineral del Chico', 'country_code' => 'MX'],\n            ['name' => 'Lillesand', 'country_code' => 'NO'],\n            ['name' => 'Lampasas', 'country_code' => 'US'],\n            ['name' => 'Drumheller', 'country_code' => 'CA'],\n            ['name' => 'La Montagne', 'country_code' => 'FR'],\n            ['name' => 'Kirkland Lake', 'country_code' => 'CA'],\n            ['name' => 'Firuraq', 'country_code' => 'IR'],\n            ['name' => 'Krasnyy Yar', 'country_code' => 'RU'],\n            ['name' => 'Village Green-Green Ridge', 'country_code' => 'US'],\n            ['name' => 'Liebenburg', 'country_code' => 'DE'],\n            ['name' => 'Krupina', 'country_code' => 'SK'],\n            ['name' => 'Almodovar del Rio', 'country_code' => 'ES'],\n            ['name' => 'Rizziconi', 'country_code' => 'IT'],\n            ['name' => 'Marmirolo', 'country_code' => 'IT'],\n            ['name' => 'Byram', 'country_code' => 'US'],\n            ['name' => 'Hengersberg', 'country_code' => 'DE'],\n            ['name' => 'Dabnou', 'country_code' => 'NE'],\n            ['name' => 'Koufalia', 'country_code' => 'GR'],\n            ['name' => 'Kensington', 'country_code' => 'US'],\n            ['name' => 'Toscolano', 'country_code' => 'IT'],\n            ['name' => 'Polgar', 'country_code' => 'HU'],\n            ['name' => 'Wittem', 'country_code' => 'NL'],\n            ['name' => 'Willisau', 'country_code' => 'CH'],\n            ['name' => 'Artemivsk', 'country_code' => 'UA'],\n            ['name' => 'Tuparetama', 'country_code' => 'BR'],\n            ['name' => 'Domene', 'country_code' => 'FR'],\n            ['name' => 'Fort Belvoir', 'country_code' => 'US'],\n            ['name' => 'West Boylston', 'country_code' => 'US'],\n            ['name' => 'Brentwood', 'country_code' => 'US'],\n            ['name' => 'Cambira', 'country_code' => 'BR'],\n            ['name' => 'Chalford', 'country_code' => 'GB'],\n            ['name' => 'Laughlin', 'country_code' => 'US'],\n            ['name' => 'San Felipe Tejalapan', 'country_code' => 'MX'],\n            ['name' => 'Muniz Ferreira', 'country_code' => 'BR'],\n            ['name' => 'Mozzecane', 'country_code' => 'IT'],\n            ['name' => 'Abatskoye', 'country_code' => 'RU'],\n            ['name' => 'Chartiers', 'country_code' => 'US'],\n            ['name' => 'Aztec', 'country_code' => 'US'],\n            ['name' => 'St. Martin', 'country_code' => 'US'],\n            ['name' => 'La Junta', 'country_code' => 'US'],\n            ['name' => 'Kinchil', 'country_code' => 'MX'],\n            ['name' => 'Altenberg', 'country_code' => 'DE'],\n            ['name' => 'Alfonso Castaneda', 'country_code' => 'PH'],\n            ['name' => 'Murphy', 'country_code' => 'US'],\n            ['name' => 'Brockworth', 'country_code' => 'GB'],\n            ['name' => 'Gieres', 'country_code' => 'FR'],\n            ['name' => 'Leck', 'country_code' => 'DE'],\n            ['name' => 'Yahiko', 'country_code' => 'JP'],\n            ['name' => 'Denny', 'country_code' => 'GB'],\n            ['name' => 'Gelida', 'country_code' => 'ES'],\n            ['name' => 'Bosanski Petrovac', 'country_code' => 'BA'],\n            ['name' => 'Southwest Ranches', 'country_code' => 'US'],\n            ['name' => 'Quincy', 'country_code' => 'US'],\n            ['name' => 'Numansdorp', 'country_code' => 'NL'],\n            ['name' => 'Tukan', 'country_code' => 'RU'],\n            ['name' => 'Timbo Grande', 'country_code' => 'BR'],\n            ['name' => 'Tonila', 'country_code' => 'MX'],\n            ['name' => 'San Luis de Palenque', 'country_code' => 'CO'],\n            ['name' => 'Richland Hills', 'country_code' => 'US'],\n            ['name' => 'Dannstadt-Schauernheim', 'country_code' => 'DE'],\n            ['name' => 'Hellenthal', 'country_code' => 'DE'],\n            ['name' => 'Mogosoaia', 'country_code' => 'RO'],\n            ['name' => 'Maryville', 'country_code' => 'US'],\n            ['name' => 'Geispolsheim', 'country_code' => 'FR'],\n            ['name' => 'Sohlde', 'country_code' => 'DE'],\n            ['name' => 'Santa Eulalia de Ronsana', 'country_code' => 'ES'],\n            ['name' => 'Dornach', 'country_code' => 'CH'],\n            ['name' => 'Meta', 'country_code' => 'IT'],\n            ['name' => 'Cavalaire-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Bad Liebenstein', 'country_code' => 'DE'],\n            ['name' => 'Fouquieres-les-Lens', 'country_code' => 'FR'],\n            ['name' => 'Gerardmer', 'country_code' => 'FR'],\n            ['name' => 'Baltimore Highlands', 'country_code' => 'US'],\n            ['name' => 'Dolores', 'country_code' => 'ES'],\n            ['name' => 'Berg', 'country_code' => 'DE'],\n            ['name' => 'Porterville', 'country_code' => 'ZA'],\n            ['name' => 'Mrkonjic Grad', 'country_code' => 'BA'],\n            ['name' => 'Sao Joao do Oriente', 'country_code' => 'BR'],\n            ['name' => 'Tignieu', 'country_code' => 'FR'],\n            ['name' => 'Herzogenburg', 'country_code' => 'AT'],\n            ['name' => 'Nejdek', 'country_code' => 'CZ'],\n            ['name' => 'Saint-Peray', 'country_code' => 'FR'],\n            ['name' => 'Liptovsky Hradok', 'country_code' => 'SK'],\n            ['name' => 'Slawharad', 'country_code' => 'BY'],\n            ['name' => 'Villmergen', 'country_code' => 'CH'],\n            ['name' => 'Vols', 'country_code' => 'AT'],\n            ['name' => 'Newport-On-Tay', 'country_code' => 'GB'],\n            ['name' => 'Leegebruch', 'country_code' => 'DE'],\n            ['name' => 'Marseillan', 'country_code' => 'FR'],\n            ['name' => 'Higham Ferrers', 'country_code' => 'GB'],\n            ['name' => 'Hillside', 'country_code' => 'US'],\n            ['name' => 'Bous', 'country_code' => 'DE'],\n            ['name' => 'Hufingen', 'country_code' => 'DE'],\n            ['name' => 'Anse', 'country_code' => 'FR'],\n            ['name' => 'Columbiana', 'country_code' => 'US'],\n            ['name' => 'Marchamalo', 'country_code' => 'ES'],\n            ['name' => 'Galliera Veneta', 'country_code' => 'IT'],\n            ['name' => 'Logan', 'country_code' => 'US'],\n            ['name' => 'Batesville', 'country_code' => 'US'],\n            ['name' => 'Herzogenbuchsee', 'country_code' => 'CH'],\n            ['name' => 'Glastonbury Center', 'country_code' => 'US'],\n            ['name' => 'Vorzel', 'country_code' => 'UA'],\n            ['name' => 'Malemort-sur-Correze', 'country_code' => 'FR'],\n            ['name' => 'Trigueros', 'country_code' => 'ES'],\n            ['name' => 'Sao Joao do Jaguaribe', 'country_code' => 'BR'],\n            ['name' => 'Arkhipo-Osipovka', 'country_code' => 'RU'],\n            ['name' => 'Chaiya', 'country_code' => 'TH'],\n            ['name' => 'Nasice', 'country_code' => 'HR'],\n            ['name' => 'Baldim', 'country_code' => 'BR'],\n            ['name' => 'Rethel', 'country_code' => 'FR'],\n            ['name' => 'Sheboygan Falls', 'country_code' => 'US'],\n            ['name' => 'Ruelle-sur-Touvre', 'country_code' => 'FR'],\n            ['name' => 'Dumbravita', 'country_code' => 'RO'],\n            ['name' => 'Cherykaw', 'country_code' => 'BY'],\n            ['name' => 'Lyubimets', 'country_code' => 'BG'],\n            ['name' => 'Cambiago', 'country_code' => 'IT'],\n            ['name' => 'Salzbergen', 'country_code' => 'DE'],\n            ['name' => 'Uetikon am See', 'country_code' => 'CH'],\n            ['name' => 'Wytheville', 'country_code' => 'US'],\n            ['name' => 'Viladecaballs', 'country_code' => 'ES'],\n            ['name' => 'Teggiano', 'country_code' => 'IT'],\n            ['name' => 'Hipadpad', 'country_code' => 'PH'],\n            ['name' => 'Hollis', 'country_code' => 'US'],\n            ['name' => 'St. Francis', 'country_code' => 'US'],\n            ['name' => 'Peresecina', 'country_code' => 'MD'],\n            ['name' => 'Degache', 'country_code' => 'TN'],\n            ['name' => 'Sidi Ahmed Ben Aissa', 'country_code' => 'MA'],\n            ['name' => 'Hitchcock', 'country_code' => 'US'],\n            ['name' => 'La Puebla de Montalban', 'country_code' => 'ES'],\n            ['name' => 'Colombelles', 'country_code' => 'FR'],\n            ['name' => 'Had Kourt', 'country_code' => 'MA'],\n            ['name' => 'Nieppe', 'country_code' => 'FR'],\n            ['name' => 'Bollington', 'country_code' => 'GB'],\n            ['name' => 'Langon', 'country_code' => 'FR'],\n            ['name' => 'Toulouges', 'country_code' => 'FR'],\n            ['name' => 'Mandurah', 'country_code' => 'AU'],\n            ['name' => 'Catalina', 'country_code' => 'US'],\n            ['name' => 'Gorodishche', 'country_code' => 'RU'],\n            ['name' => 'Sontra', 'country_code' => 'DE'],\n            ['name' => 'Villa Cortese', 'country_code' => 'IT'],\n            ['name' => 'Villanueva del Ariscal', 'country_code' => 'ES'],\n            ['name' => 'Talat-n-Ya qoub', 'country_code' => 'MA'],\n            ['name' => 'Olsztyn', 'country_code' => 'PL'],\n            ['name' => 'Dryanovo', 'country_code' => 'BG'],\n            ['name' => 'Annfield Plain', 'country_code' => 'GB'],\n            ['name' => 'Grasberg', 'country_code' => 'DE'],\n            ['name' => 'Durande', 'country_code' => 'BR'],\n            ['name' => 'Bonner Springs', 'country_code' => 'US'],\n            ['name' => 'Pasiano', 'country_code' => 'IT'],\n            ['name' => 'Wachtebeke', 'country_code' => 'BE'],\n            ['name' => 'Senador Firmino', 'country_code' => 'BR'],\n            ['name' => 'Long Grove', 'country_code' => 'US'],\n            ['name' => 'Camp Hill', 'country_code' => 'US'],\n            ['name' => 'Mansfield Center', 'country_code' => 'US'],\n            ['name' => 'Sao Joao da Pesqueira', 'country_code' => 'PT'],\n            ['name' => 'Hradek nad Nisou', 'country_code' => 'CZ'],\n            ['name' => 'Itaicaba', 'country_code' => 'BR'],\n            ['name' => 'Vere', 'country_code' => 'BR'],\n            ['name' => 'Wilmington Manor', 'country_code' => 'US'],\n            ['name' => 'Malagon', 'country_code' => 'ES'],\n            ['name' => 'Olginate', 'country_code' => 'IT'],\n            ['name' => 'Borrazopolis', 'country_code' => 'BR'],\n            ['name' => 'Nazario', 'country_code' => 'BR'],\n            ['name' => 'Xiaoshengcun', 'country_code' => 'CN'],\n            ['name' => 'Doue-la-Fontaine', 'country_code' => 'FR'],\n            ['name' => 'Topanga', 'country_code' => 'US'],\n            ['name' => 'Tura', 'country_code' => 'HU'],\n            ['name' => 'Erval Seco', 'country_code' => 'BR'],\n            ['name' => 'Bergkirchen', 'country_code' => 'DE'],\n            ['name' => 'Argyle', 'country_code' => 'CA'],\n            ['name' => 'Torbay', 'country_code' => 'CA'],\n            ['name' => 'Leopoldo de Bulhoes', 'country_code' => 'BR'],\n            ['name' => 'Downingtown', 'country_code' => 'US'],\n            ['name' => 'Grand Ledge', 'country_code' => 'US'],\n            ['name' => 'Aldingen', 'country_code' => 'DE'],\n            ['name' => 'Nong Phai', 'country_code' => 'TH'],\n            ['name' => 'Stony Stratford', 'country_code' => 'GB'],\n            ['name' => 'Saltinho', 'country_code' => 'BR'],\n            ['name' => 'Sandorfalva', 'country_code' => 'HU'],\n            ['name' => 'San Julian', 'country_code' => 'AR'],\n            ['name' => 'Jalasjarvi', 'country_code' => 'FI'],\n            ['name' => 'Meland', 'country_code' => 'NO'],\n            ['name' => 'Old Forge', 'country_code' => 'US'],\n            ['name' => 'Upton', 'country_code' => 'US'],\n            ['name' => 'Tenampa', 'country_code' => 'MX'],\n            ['name' => 'Pelago', 'country_code' => 'IT'],\n            ['name' => 'Lincolnshire', 'country_code' => 'US'],\n            ['name' => 'Kinmel', 'country_code' => 'GB'],\n            ['name' => 'Cormontreuil', 'country_code' => 'FR'],\n            ['name' => 'Blair', 'country_code' => 'US'],\n            ['name' => 'Naila', 'country_code' => 'DE'],\n            ['name' => 'Jersey Village', 'country_code' => 'US'],\n            ['name' => 'Lexington', 'country_code' => 'US'],\n            ['name' => 'Tavernelle in Val di Pesa', 'country_code' => 'IT'],\n            ['name' => 'Richfield', 'country_code' => 'US'],\n            ['name' => 'Itobi', 'country_code' => 'BR'],\n            ['name' => 'Ancenis', 'country_code' => 'FR'],\n            ['name' => 'Liffre', 'country_code' => 'FR'],\n            ['name' => 'Centerville', 'country_code' => 'US'],\n            ['name' => 'Bouffemont', 'country_code' => 'FR'],\n            ['name' => 'Kyneton', 'country_code' => 'AU'],\n            ['name' => 'West Long Branch', 'country_code' => 'US'],\n            ['name' => 'Dilolo', 'country_code' => 'CD'],\n            ['name' => 'Flushing', 'country_code' => 'US'],\n            ['name' => 'Trzemeszno', 'country_code' => 'PL'],\n            ['name' => 'Middletown', 'country_code' => 'US'],\n            ['name' => 'Vratimov', 'country_code' => 'CZ'],\n            ['name' => 'Sao Miguel dos Milagres', 'country_code' => 'BR'],\n            ['name' => 'Dorentrup', 'country_code' => 'DE'],\n            ['name' => 'Ashland', 'country_code' => 'US'],\n            ['name' => 'Guaraquecaba', 'country_code' => 'BR'],\n            ['name' => 'Juarez Tavora', 'country_code' => 'BR'],\n            ['name' => 'Mably', 'country_code' => 'FR'],\n            ['name' => 'Fruitvale', 'country_code' => 'US'],\n            ['name' => 'Mynamaki', 'country_code' => 'FI'],\n            ['name' => 'Petrvald', 'country_code' => 'CZ'],\n            ['name' => 'Burley in Wharfedale', 'country_code' => 'GB'],\n            ['name' => 'Temax', 'country_code' => 'MX'],\n            ['name' => 'Flein', 'country_code' => 'DE'],\n            ['name' => 'Seminole', 'country_code' => 'US'],\n            ['name' => 'Altoona', 'country_code' => 'US'],\n            ['name' => 'Grand Blanc', 'country_code' => 'US'],\n            ['name' => 'Abadiano Celayeta', 'country_code' => 'ES'],\n            ['name' => 'Schonungen', 'country_code' => 'DE'],\n            ['name' => 'Zingem', 'country_code' => 'BE'],\n            ['name' => 'Abingdon', 'country_code' => 'US'],\n            ['name' => 'Ide', 'country_code' => 'JP'],\n            ['name' => 'Wilmington', 'country_code' => 'GB'],\n            ['name' => 'Kelty', 'country_code' => 'GB'],\n            ['name' => 'Willesborough', 'country_code' => 'GB'],\n            ['name' => 'Lesigny', 'country_code' => 'FR'],\n            ['name' => 'La Peche', 'country_code' => 'CA'],\n            ['name' => 'Edenbridge', 'country_code' => 'GB'],\n            ['name' => 'Gendt', 'country_code' => 'NL'],\n            ['name' => 'Bridge City', 'country_code' => 'US'],\n            ['name' => 'Bow', 'country_code' => 'US'],\n            ['name' => 'Crescentino', 'country_code' => 'IT'],\n            ['name' => 'Madeira', 'country_code' => 'BR'],\n            ['name' => 'Altach', 'country_code' => 'AT'],\n            ['name' => 'Weissach', 'country_code' => 'DE'],\n            ['name' => 'Thung Saliam', 'country_code' => 'TH'],\n            ['name' => 'Myory', 'country_code' => 'BY'],\n            ['name' => 'Carpaneto Piacentino', 'country_code' => 'IT'],\n            ['name' => 'Bol sheust ikinskoye', 'country_code' => 'RU'],\n            ['name' => 'Rimpar', 'country_code' => 'DE'],\n            ['name' => 'Khondab', 'country_code' => 'IR'],\n            ['name' => 'Woodlake', 'country_code' => 'US'],\n            ['name' => 'Timezgadiouine', 'country_code' => 'MA'],\n            ['name' => 'Hastings-on-Hudson', 'country_code' => 'US'],\n            ['name' => 'Fieni', 'country_code' => 'RO'],\n            ['name' => 'Fremantle', 'country_code' => 'AU'],\n            ['name' => 'Bex', 'country_code' => 'CH'],\n            ['name' => 'Pantelleria', 'country_code' => 'IT'],\n            ['name' => 'Pivdenne', 'country_code' => 'UA'],\n            ['name' => 'Pontcharra', 'country_code' => 'FR'],\n            ['name' => 'Boostedt', 'country_code' => 'DE'],\n            ['name' => 'Hardyston', 'country_code' => 'US'],\n            ['name' => 'Rohatyn', 'country_code' => 'UA'],\n            ['name' => 'Stribro', 'country_code' => 'CZ'],\n            ['name' => 'Bryans Road', 'country_code' => 'US'],\n            ['name' => 'Banff', 'country_code' => 'CA'],\n            ['name' => 'Innisfail', 'country_code' => 'CA'],\n            ['name' => 'York', 'country_code' => 'US'],\n            ['name' => 'Waterboro', 'country_code' => 'US'],\n            ['name' => 'Cobena', 'country_code' => 'ES'],\n            ['name' => 'Paratebueno', 'country_code' => 'CO'],\n            ['name' => 'Courdimanche', 'country_code' => 'FR'],\n            ['name' => 'Lalla Takerkoust', 'country_code' => 'MA'],\n            ['name' => 'Ashland', 'country_code' => 'US'],\n            ['name' => 'Halifax', 'country_code' => 'US'],\n            ['name' => 'San Colombano al Lambro', 'country_code' => 'IT'],\n            ['name' => 'Princeton', 'country_code' => 'US'],\n            ['name' => 'Sangaree', 'country_code' => 'US'],\n            ['name' => 'La Talaudiere', 'country_code' => 'FR'],\n            ['name' => 'Questembert', 'country_code' => 'FR'],\n            ['name' => 'Bosteri', 'country_code' => 'KG'],\n            ['name' => 'Itapirapua', 'country_code' => 'BR'],\n            ['name' => 'Templeton', 'country_code' => 'US'],\n            ['name' => 'North Cornwall', 'country_code' => 'US'],\n            ['name' => 'Spring', 'country_code' => 'US'],\n            ['name' => 'Fakenham', 'country_code' => 'GB'],\n            ['name' => 'Frenkendorf', 'country_code' => 'CH'],\n            ['name' => 'Los Fresnos', 'country_code' => 'US'],\n            ['name' => 'South Weber', 'country_code' => 'US'],\n            ['name' => 'Woodstock', 'country_code' => 'US'],\n            ['name' => 'Barra do Turvo', 'country_code' => 'BR'],\n            ['name' => 'Mazapa', 'country_code' => 'MX'],\n            ['name' => 'Watford City', 'country_code' => 'US'],\n            ['name' => 'Crookston', 'country_code' => 'US'],\n            ['name' => 'Sao Vicente de Minas', 'country_code' => 'BR'],\n            ['name' => 'Chastre-Villeroux-Blanmont', 'country_code' => 'BE'],\n            ['name' => 'Talmont-Saint-Hilaire', 'country_code' => 'FR'],\n            ['name' => 'Madison Park', 'country_code' => 'US'],\n            ['name' => 'Fohnsdorf', 'country_code' => 'AT'],\n            ['name' => 'Farington', 'country_code' => 'GB'],\n            ['name' => 'Covington', 'country_code' => 'US'],\n            ['name' => 'Oberstaufen', 'country_code' => 'DE'],\n            ['name' => 'Cox', 'country_code' => 'ES'],\n            ['name' => 'Khon Buri', 'country_code' => 'TH'],\n            ['name' => 'Nemishayeve', 'country_code' => 'UA'],\n            ['name' => 'San Gimignano', 'country_code' => 'IT'],\n            ['name' => 'Latrobe', 'country_code' => 'US'],\n            ['name' => 'Lamporecchio', 'country_code' => 'IT'],\n            ['name' => 'Nicolet', 'country_code' => 'CA'],\n            ['name' => 'Saint-Yrieix-sur-Charente', 'country_code' => 'FR'],\n            ['name' => 'Soeng Sang', 'country_code' => 'TH'],\n            ['name' => 'Nuevo Cuscatlan', 'country_code' => 'SV'],\n            ['name' => 'Rrogozhine', 'country_code' => 'AL'],\n            ['name' => 'DeFuniak Springs', 'country_code' => 'US'],\n            ['name' => 'Williamsburg', 'country_code' => 'US'],\n            ['name' => 'Rockwood', 'country_code' => 'CA'],\n            ['name' => 'Olivette', 'country_code' => 'US'],\n            ['name' => 'Baldwinsville', 'country_code' => 'US'],\n            ['name' => 'Sound Beach', 'country_code' => 'US'],\n            ['name' => 'Saviese', 'country_code' => 'CH'],\n            ['name' => 'Kral ovsky Chlmec', 'country_code' => 'SK'],\n            ['name' => 'Aibonito', 'country_code' => 'PR'],\n            ['name' => 'Winters', 'country_code' => 'US'],\n            ['name' => 'Ruschlikon', 'country_code' => 'CH'],\n            ['name' => 'Breckenridge', 'country_code' => 'US'],\n            ['name' => 'Interlaken', 'country_code' => 'US'],\n            ['name' => 'Southgate', 'country_code' => 'US'],\n            ['name' => 'Soncino', 'country_code' => 'IT'],\n            ['name' => 'Sarandi del Yi', 'country_code' => 'UY'],\n            ['name' => 'Calau', 'country_code' => 'DE'],\n            ['name' => 'Makushino', 'country_code' => 'RU'],\n            ['name' => 'Medina', 'country_code' => 'US'],\n            ['name' => 'Strathmore', 'country_code' => 'US'],\n            ['name' => 'Bubikon', 'country_code' => 'CH'],\n            ['name' => 'Greenville', 'country_code' => 'US'],\n            ['name' => 'Curtarolo', 'country_code' => 'IT'],\n            ['name' => 'Apuarema', 'country_code' => 'BR'],\n            ['name' => 'Ban Phue', 'country_code' => 'TH'],\n            ['name' => 'Curral de Dentro', 'country_code' => 'BR'],\n            ['name' => 'Seville', 'country_code' => 'US'],\n            ['name' => 'Reisbach', 'country_code' => 'DE'],\n            ['name' => 'Rainford', 'country_code' => 'GB'],\n            ['name' => 'Contes', 'country_code' => 'FR'],\n            ['name' => 'Zavareh', 'country_code' => 'IR'],\n            ['name' => 'Umm Walad', 'country_code' => 'SY'],\n            ['name' => 'Ibirajuba', 'country_code' => 'BR'],\n            ['name' => 'Budesti', 'country_code' => 'RO'],\n            ['name' => 'Collie', 'country_code' => 'AU'],\n            ['name' => 'Villa General Belgrano', 'country_code' => 'AR'],\n            ['name' => 'San Zenone', 'country_code' => 'IT'],\n            ['name' => 'Benningen am Neckar', 'country_code' => 'DE'],\n            ['name' => 'Kenai', 'country_code' => 'US'],\n            ['name' => 'Santana', 'country_code' => 'CO'],\n            ['name' => 'Carnegie', 'country_code' => 'US'],\n            ['name' => 'Aubrey', 'country_code' => 'US'],\n            ['name' => 'Monte Alegre do Sul', 'country_code' => 'BR'],\n            ['name' => 'Carnago', 'country_code' => 'IT'],\n            ['name' => 'Irapua', 'country_code' => 'BR'],\n            ['name' => 'Oberglatt', 'country_code' => 'CH'],\n            ['name' => 'Sarandi Grande', 'country_code' => 'UY'],\n            ['name' => 'Hook', 'country_code' => 'GB'],\n            ['name' => 'Castro del Rio', 'country_code' => 'ES'],\n            ['name' => 'Pittston', 'country_code' => 'US'],\n            ['name' => 'Marcellina', 'country_code' => 'IT'],\n            ['name' => 'Coulounieix', 'country_code' => 'FR'],\n            ['name' => 'Benahavis', 'country_code' => 'ES'],\n            ['name' => 'Saint-Benoit', 'country_code' => 'FR'],\n            ['name' => 'Kinvere', 'country_code' => 'GB'],\n            ['name' => 'Santana', 'country_code' => 'PT'],\n            ['name' => 'Santa Ana', 'country_code' => 'GT'],\n            ['name' => 'Castellalto', 'country_code' => 'IT'],\n            ['name' => 'Charlestown', 'country_code' => 'US'],\n            ['name' => 'Santa Maria del Oro', 'country_code' => 'MX'],\n            ['name' => 'Holly Springs', 'country_code' => 'US'],\n            ['name' => 'Abatia', 'country_code' => 'BR'],\n            ['name' => 'Deols', 'country_code' => 'FR'],\n            ['name' => 'Pyhaselka', 'country_code' => 'FI'],\n            ['name' => 'Allstedt', 'country_code' => 'DE'],\n            ['name' => 'Rochefort-du-Gard', 'country_code' => 'FR'],\n            ['name' => 'Waltham', 'country_code' => 'GB'],\n            ['name' => 'Auxonne', 'country_code' => 'FR'],\n            ['name' => 'Behren-les-Forbach', 'country_code' => 'FR'],\n            ['name' => 'Mirabella Eclano', 'country_code' => 'IT'],\n            ['name' => 'Gerolstein', 'country_code' => 'DE'],\n            ['name' => 'Bornos', 'country_code' => 'ES'],\n            ['name' => 'Malaya Purga', 'country_code' => 'RU'],\n            ['name' => 'Vergato', 'country_code' => 'IT'],\n            ['name' => 'Barge', 'country_code' => 'IT'],\n            ['name' => 'Reinsdorf', 'country_code' => 'DE'],\n            ['name' => 'Harzgerode', 'country_code' => 'DE'],\n            ['name' => 'Parai', 'country_code' => 'BR'],\n            ['name' => 'Eisfeld', 'country_code' => 'DE'],\n            ['name' => 'Jaszarokszallas', 'country_code' => 'HU'],\n            ['name' => 'Pratola Peligna', 'country_code' => 'IT'],\n            ['name' => 'San Jose de Buan', 'country_code' => 'PH'],\n            ['name' => 'Withamsville', 'country_code' => 'US'],\n            ['name' => 'Benatky nad Jizerou', 'country_code' => 'CZ'],\n            ['name' => 'Mattighofen', 'country_code' => 'AT'],\n            ['name' => 'Kaufman', 'country_code' => 'US'],\n            ['name' => 'Panciu', 'country_code' => 'RO'],\n            ['name' => 'Saarburg', 'country_code' => 'DE'],\n            ['name' => 'Araguapaz', 'country_code' => 'BR'],\n            ['name' => 'Claro dos Pocoes', 'country_code' => 'BR'],\n            ['name' => 'Campbell', 'country_code' => 'US'],\n            ['name' => 'Neuhofen', 'country_code' => 'DE'],\n            ['name' => 'Saint-Didier-au-Mont-d Or', 'country_code' => 'FR'],\n            ['name' => 'Mhlume', 'country_code' => 'SZ'],\n            ['name' => 'Chester', 'country_code' => 'US'],\n            ['name' => 'Ouirgane', 'country_code' => 'MA'],\n            ['name' => 'Alpiarca', 'country_code' => 'PT'],\n            ['name' => 'Martignas-sur-Jalle', 'country_code' => 'FR'],\n            ['name' => 'Dongping', 'country_code' => 'CN'],\n            ['name' => 'Jouamaa', 'country_code' => 'MA'],\n            ['name' => 'Escalquens', 'country_code' => 'FR'],\n            ['name' => 'Lodeve', 'country_code' => 'FR'],\n            ['name' => 'Peniscola', 'country_code' => 'ES'],\n            ['name' => 'Providence', 'country_code' => 'US'],\n            ['name' => 'Oberwart', 'country_code' => 'AT'],\n            ['name' => 'Rubelita', 'country_code' => 'BR'],\n            ['name' => 'Chobham', 'country_code' => 'GB'],\n            ['name' => 'Arneiroz', 'country_code' => 'BR'],\n            ['name' => 'Milan', 'country_code' => 'US'],\n            ['name' => 'Crewkerne', 'country_code' => 'GB'],\n            ['name' => 'Q vareli', 'country_code' => 'GE'],\n            ['name' => 'Turzovka', 'country_code' => 'SK'],\n            ['name' => 'Ertis', 'country_code' => 'KZ'],\n            ['name' => 'Drummond/North Elmsley', 'country_code' => 'CA'],\n            ['name' => 'Vigarano Mainarda', 'country_code' => 'IT'],\n            ['name' => 'Fivizzano', 'country_code' => 'IT'],\n            ['name' => 'Rhinebeck', 'country_code' => 'US'],\n            ['name' => 'Oroville East', 'country_code' => 'US'],\n            ['name' => 'Estes Park', 'country_code' => 'US'],\n            ['name' => 'Gerbrunn', 'country_code' => 'DE'],\n            ['name' => 'Santa Rosa de Rio Primero', 'country_code' => 'AR'],\n            ['name' => 'Vega de San Mateo', 'country_code' => 'ES'],\n            ['name' => 'Kemijarvi', 'country_code' => 'FI'],\n            ['name' => 'Waite Park', 'country_code' => 'US'],\n            ['name' => 'Reszel', 'country_code' => 'PL'],\n            ['name' => 'Beaugency', 'country_code' => 'FR'],\n            ['name' => 'Antigo', 'country_code' => 'US'],\n            ['name' => 'Jamsankoski', 'country_code' => 'FI'],\n            ['name' => 'Rosporden', 'country_code' => 'FR'],\n            ['name' => 'Westminster', 'country_code' => 'US'],\n            ['name' => 'Park City', 'country_code' => 'US'],\n            ['name' => 'Coronel Bicaco', 'country_code' => 'BR'],\n            ['name' => 'Zelo Buon Persico', 'country_code' => 'IT'],\n            ['name' => 'Loffingen', 'country_code' => 'DE'],\n            ['name' => 'Greenfield', 'country_code' => 'US'],\n            ['name' => 'Azuaga', 'country_code' => 'ES'],\n            ['name' => 'Binuangan', 'country_code' => 'PH'],\n            ['name' => 'Longridge', 'country_code' => 'GB'],\n            ['name' => 'Saint-Thibault-des-Vignes', 'country_code' => 'FR'],\n            ['name' => 'Forsyth', 'country_code' => 'US'],\n            ['name' => 'San Diego', 'country_code' => 'GT'],\n            ['name' => 'Jerico', 'country_code' => 'BR'],\n            ['name' => 'McGregor', 'country_code' => 'US'],\n            ['name' => 'Tenterden', 'country_code' => 'GB'],\n            ['name' => 'San Giorgio di Nogaro', 'country_code' => 'IT'],\n            ['name' => 'Vitulazio', 'country_code' => 'IT'],\n            ['name' => 'Al Orjane', 'country_code' => 'MA'],\n            ['name' => 'Cheraw', 'country_code' => 'US'],\n            ['name' => 'Swainsboro', 'country_code' => 'US'],\n            ['name' => 'Onil', 'country_code' => 'ES'],\n            ['name' => 'Ebensee', 'country_code' => 'AT'],\n            ['name' => 'Nyiradony', 'country_code' => 'HU'],\n            ['name' => 'Ondara', 'country_code' => 'ES'],\n            ['name' => 'Citta della Pieve', 'country_code' => 'IT'],\n            ['name' => 'Moutier', 'country_code' => 'CH'],\n            ['name' => 'Paulo Jacinto', 'country_code' => 'BR'],\n            ['name' => 'Ruisbroek', 'country_code' => 'BE'],\n            ['name' => 'Jasper', 'country_code' => 'US'],\n            ['name' => 'Wynne', 'country_code' => 'US'],\n            ['name' => 'Dryden', 'country_code' => 'CA'],\n            ['name' => 'Altbach', 'country_code' => 'DE'],\n            ['name' => 'Kryve Ozero', 'country_code' => 'UA'],\n            ['name' => 'Round Lake Park', 'country_code' => 'US'],\n            ['name' => 'Neufchateau', 'country_code' => 'BE'],\n            ['name' => 'Villers-Saint-Paul', 'country_code' => 'FR'],\n            ['name' => 'Pulsnitz', 'country_code' => 'DE'],\n            ['name' => 'Gallneukirchen', 'country_code' => 'AT'],\n            ['name' => 'Lekkerkerk', 'country_code' => 'NL'],\n            ['name' => 'Korkmaskala', 'country_code' => 'RU'],\n            ['name' => 'Pium', 'country_code' => 'BR'],\n            ['name' => 'Vico del Gargano', 'country_code' => 'IT'],\n            ['name' => 'Quarryville', 'country_code' => 'US'],\n            ['name' => 'Zlatograd', 'country_code' => 'BG'],\n            ['name' => 'Belo Vale', 'country_code' => 'BR'],\n            ['name' => 'Pedro Gomes', 'country_code' => 'BR'],\n            ['name' => 'Salida', 'country_code' => 'US'],\n            ['name' => 'South Boston', 'country_code' => 'US'],\n            ['name' => 'Callosa de Ensarria', 'country_code' => 'ES'],\n            ['name' => 'Citrus Hills', 'country_code' => 'US'],\n            ['name' => 'Middlebury', 'country_code' => 'US'],\n            ['name' => 'Fort Frances', 'country_code' => 'CA'],\n            ['name' => 'Bad Wimpfen', 'country_code' => 'DE'],\n            ['name' => 'Zinat', 'country_code' => 'MA'],\n            ['name' => 'Albion', 'country_code' => 'US'],\n            ['name' => 'Bang Pa-in', 'country_code' => 'TH'],\n            ['name' => 'Rosswein', 'country_code' => 'DE'],\n            ['name' => 'Khoroshiv', 'country_code' => 'UA'],\n            ['name' => 'Al Kafr', 'country_code' => 'SY'],\n            ['name' => 'Carneys Point', 'country_code' => 'US'],\n            ['name' => 'Gerena', 'country_code' => 'ES'],\n            ['name' => 'East Huntingdon', 'country_code' => 'US'],\n            ['name' => 'Wading River', 'country_code' => 'US'],\n            ['name' => 'Tobarra', 'country_code' => 'ES'],\n            ['name' => 'Fosso', 'country_code' => 'IT'],\n            ['name' => 'Boqueirao do Leao', 'country_code' => 'BR'],\n            ['name' => 'San Marco Evangelista', 'country_code' => 'IT'],\n            ['name' => 'Bilac', 'country_code' => 'BR'],\n            ['name' => 'Barvikha', 'country_code' => 'RU'],\n            ['name' => 'Salem', 'country_code' => 'US'],\n            ['name' => 'Dighton', 'country_code' => 'US'],\n            ['name' => 'Sisteron', 'country_code' => 'FR'],\n            ['name' => 'Branesti', 'country_code' => 'RO'],\n            ['name' => 'Dolgoderevenskoye', 'country_code' => 'RU'],\n            ['name' => 'Lorqui', 'country_code' => 'ES'],\n            ['name' => 'Ensisheim', 'country_code' => 'FR'],\n            ['name' => 'Pluvigner', 'country_code' => 'FR'],\n            ['name' => 'Payette', 'country_code' => 'US'],\n            ['name' => 'Vlahita', 'country_code' => 'RO'],\n            ['name' => 'North Tamborine', 'country_code' => 'AU'],\n            ['name' => 'Grove', 'country_code' => 'US'],\n            ['name' => 'Bunde', 'country_code' => 'DE'],\n            ['name' => 'Celorico da Beira', 'country_code' => 'PT'],\n            ['name' => 'Gettysburg', 'country_code' => 'US'],\n            ['name' => 'Sotomayor', 'country_code' => 'ES'],\n            ['name' => 'Montecristo', 'country_code' => 'MX'],\n            ['name' => 'Langenlois', 'country_code' => 'AT'],\n            ['name' => 'Trostianets', 'country_code' => 'UA'],\n            ['name' => 'Linas', 'country_code' => 'FR'],\n            ['name' => 'Highlands', 'country_code' => 'US'],\n            ['name' => 'Chirnogi', 'country_code' => 'RO'],\n            ['name' => 'Welcome', 'country_code' => 'US'],\n            ['name' => 'La Sarre', 'country_code' => 'CA'],\n            ['name' => 'Wick', 'country_code' => 'GB'],\n            ['name' => 'Vezzano Ligure', 'country_code' => 'IT'],\n            ['name' => 'Valley', 'country_code' => 'US'],\n            ['name' => 'Upper Milford', 'country_code' => 'US'],\n            ['name' => 'Solesino', 'country_code' => 'IT'],\n            ['name' => 'Campeni', 'country_code' => 'RO'],\n            ['name' => 'Shelburne', 'country_code' => 'US'],\n            ['name' => 'Corte Franca', 'country_code' => 'IT'],\n            ['name' => 'Kasson', 'country_code' => 'US'],\n            ['name' => 'Frydlant', 'country_code' => 'CZ'],\n            ['name' => 'Granite Falls', 'country_code' => 'US'],\n            ['name' => 'Creston', 'country_code' => 'US'],\n            ['name' => 'Kingsbridge', 'country_code' => 'GB'],\n            ['name' => 'Clear Lake', 'country_code' => 'US'],\n            ['name' => 'Jacui', 'country_code' => 'BR'],\n            ['name' => 'Bad Fussing', 'country_code' => 'DE'],\n            ['name' => 'Aussonne', 'country_code' => 'FR'],\n            ['name' => 'Murwillumbah', 'country_code' => 'AU'],\n            ['name' => 'Trail', 'country_code' => 'CA'],\n            ['name' => 'Senador Sa', 'country_code' => 'BR'],\n            ['name' => 'Belinskiy', 'country_code' => 'RU'],\n            ['name' => 'Nicolosi', 'country_code' => 'IT'],\n            ['name' => 'Quievrechain', 'country_code' => 'FR'],\n            ['name' => 'Serrania', 'country_code' => 'BR'],\n            ['name' => 'Dittelbrunn', 'country_code' => 'DE'],\n            ['name' => 'Steele Creek', 'country_code' => 'US'],\n            ['name' => 'Omer', 'country_code' => 'IL'],\n            ['name' => 'San Filippo della Mela', 'country_code' => 'IT'],\n            ['name' => 'Oundle', 'country_code' => 'GB'],\n            ['name' => 'Chandler', 'country_code' => 'CA'],\n            ['name' => 'Pignan', 'country_code' => 'FR'],\n            ['name' => 'Stone Mills', 'country_code' => 'CA'],\n            ['name' => 'Villa d Alme', 'country_code' => 'IT'],\n            ['name' => 'Thornbury', 'country_code' => 'US'],\n            ['name' => 'Sao Jose da Lagoa Tapada', 'country_code' => 'BR'],\n            ['name' => 'Spinetoli', 'country_code' => 'IT'],\n            ['name' => 'Novoselytsia', 'country_code' => 'UA'],\n            ['name' => 'Melissano', 'country_code' => 'IT'],\n            ['name' => 'Fort Scott', 'country_code' => 'US'],\n            ['name' => 'Baienfurt', 'country_code' => 'DE'],\n            ['name' => 'Pukalani', 'country_code' => 'US'],\n            ['name' => 'Calimanesti', 'country_code' => 'RO'],\n            ['name' => 'Cee', 'country_code' => 'ES'],\n            ['name' => 'Hornsby Bend', 'country_code' => 'US'],\n            ['name' => 'Dermbach', 'country_code' => 'DE'],\n            ['name' => 'Loten', 'country_code' => 'NO'],\n            ['name' => 'Kremmen', 'country_code' => 'DE'],\n            ['name' => 'Markneukirchen', 'country_code' => 'DE'],\n            ['name' => 'Kingsbury', 'country_code' => 'GB'],\n            ['name' => 'Sarnico', 'country_code' => 'IT'],\n            ['name' => 'Cotignola', 'country_code' => 'IT'],\n            ['name' => 'Cootamundra', 'country_code' => 'AU'],\n            ['name' => 'Chapultenango', 'country_code' => 'MX'],\n            ['name' => 'Alto Paraiso de Goias', 'country_code' => 'BR'],\n            ['name' => 'Conego Marinho', 'country_code' => 'BR'],\n            ['name' => 'Oulad Hassoune', 'country_code' => 'MA'],\n            ['name' => 'Dykanka', 'country_code' => 'UA'],\n            ['name' => 'Plaistow', 'country_code' => 'US'],\n            ['name' => 'Hanover', 'country_code' => 'CA'],\n            ['name' => 'Lamarque', 'country_code' => 'AR'],\n            ['name' => 'Munnerstadt', 'country_code' => 'DE'],\n            ['name' => 'Calden', 'country_code' => 'DE'],\n            ['name' => 'Pressbaum', 'country_code' => 'AT'],\n            ['name' => 'Kahla', 'country_code' => 'DE'],\n            ['name' => 'Treherbert', 'country_code' => 'GB'],\n            ['name' => 'Polk', 'country_code' => 'US'],\n            ['name' => 'Caluso', 'country_code' => 'IT'],\n            ['name' => 'Las Lomitas', 'country_code' => 'AR'],\n            ['name' => 'Charikot', 'country_code' => 'NP'],\n            ['name' => 'Robbiate', 'country_code' => 'IT'],\n            ['name' => 'Sao Miguel das Missoes', 'country_code' => 'BR'],\n            ['name' => 'Jati', 'country_code' => 'BR'],\n            ['name' => 'Boultham', 'country_code' => 'GB'],\n            ['name' => 'Migennes', 'country_code' => 'FR'],\n            ['name' => 'Carbondale', 'country_code' => 'US'],\n            ['name' => 'Robinwood', 'country_code' => 'US'],\n            ['name' => 'Staritsa', 'country_code' => 'RU'],\n            ['name' => 'Xavantina', 'country_code' => 'BR'],\n            ['name' => 'Sant Angelo di Piove di Sacco', 'country_code' => 'IT'],\n            ['name' => 'Berwick', 'country_code' => 'US'],\n            ['name' => 'Teresva', 'country_code' => 'UA'],\n            ['name' => 'Lavras do Sul', 'country_code' => 'BR'],\n            ['name' => 'Palmeiropolis', 'country_code' => 'BR'],\n            ['name' => 'El Paso', 'country_code' => 'ES'],\n            ['name' => 'Sonnino', 'country_code' => 'IT'],\n            ['name' => 'Manazuru', 'country_code' => 'JP'],\n            ['name' => 'Hardegsen', 'country_code' => 'DE'],\n            ['name' => 'Jassans-Riottier', 'country_code' => 'FR'],\n            ['name' => 'Ankum', 'country_code' => 'DE'],\n            ['name' => 'Perry', 'country_code' => 'US'],\n            ['name' => 'San Miguel Siguila', 'country_code' => 'GT'],\n            ['name' => 'Hopsten', 'country_code' => 'DE'],\n            ['name' => 'Wissembourg', 'country_code' => 'FR'],\n            ['name' => 'Hongliuyuan', 'country_code' => 'CN'],\n            ['name' => 'Sebastopol', 'country_code' => 'US'],\n            ['name' => 'Center', 'country_code' => 'US'],\n            ['name' => 'Santa Giustina in Colle', 'country_code' => 'IT'],\n            ['name' => 'Coromoro', 'country_code' => 'CO'],\n            ['name' => 'Upper Hanover', 'country_code' => 'US'],\n            ['name' => 'Ilminster', 'country_code' => 'GB'],\n            ['name' => 'Mezzolombardo', 'country_code' => 'IT'],\n            ['name' => 'Carosino', 'country_code' => 'IT'],\n            ['name' => 'Webster City', 'country_code' => 'US'],\n            ['name' => 'Treharris', 'country_code' => 'GB'],\n            ['name' => 'Wivenhoe', 'country_code' => 'GB'],\n            ['name' => 'Hastings', 'country_code' => 'US'],\n            ['name' => 'Adro', 'country_code' => 'IT'],\n            ['name' => 'Plain City', 'country_code' => 'US'],\n            ['name' => 'Indiantown', 'country_code' => 'US'],\n            ['name' => 'Staranzano', 'country_code' => 'IT'],\n            ['name' => 'Fort Dix', 'country_code' => 'US'],\n            ['name' => 'Gali', 'country_code' => 'GE'],\n            ['name' => 'Paty', 'country_code' => 'HU'],\n            ['name' => 'Horovice', 'country_code' => 'CZ'],\n            ['name' => 'Southwell', 'country_code' => 'GB'],\n            ['name' => 'Coimbra', 'country_code' => 'BR'],\n            ['name' => 'Collinsville', 'country_code' => 'US'],\n            ['name' => 'South-West Oxford', 'country_code' => 'CA'],\n            ['name' => 'Acton Vale', 'country_code' => 'CA'],\n            ['name' => 'Uvaly', 'country_code' => 'CZ'],\n            ['name' => 'Saltara', 'country_code' => 'IT'],\n            ['name' => 'Inakadate', 'country_code' => 'JP'],\n            ['name' => 'Juranda', 'country_code' => 'BR'],\n            ['name' => 'Villamayor', 'country_code' => 'ES'],\n            ['name' => 'Tervel', 'country_code' => 'BG'],\n            ['name' => 'Cognin', 'country_code' => 'FR'],\n            ['name' => 'Wellington', 'country_code' => 'US'],\n            ['name' => 'Boulazac', 'country_code' => 'FR'],\n            ['name' => 'Pinon Hills', 'country_code' => 'US'],\n            ['name' => 'Jrvezh', 'country_code' => 'AM'],\n            ['name' => 'Honfleur', 'country_code' => 'FR'],\n            ['name' => 'Balaruc-les-Bains', 'country_code' => 'FR'],\n            ['name' => 'Auburn', 'country_code' => 'US'],\n            ['name' => 'Lagoa Salgada', 'country_code' => 'BR'],\n            ['name' => 'Thurmont', 'country_code' => 'US'],\n            ['name' => 'Old Jefferson', 'country_code' => 'US'],\n            ['name' => 'Donje Zabare', 'country_code' => 'XK'],\n            ['name' => 'Groitzsch', 'country_code' => 'DE'],\n            ['name' => 'Borgetto', 'country_code' => 'IT'],\n            ['name' => 'Beaupreau', 'country_code' => 'FR'],\n            ['name' => 'North Patchogue', 'country_code' => 'US'],\n            ['name' => 'Vosendorf', 'country_code' => 'AT'],\n            ['name' => 'Brighton', 'country_code' => 'US'],\n            ['name' => 'Oakdale', 'country_code' => 'US'],\n            ['name' => 'Homecourt', 'country_code' => 'FR'],\n            ['name' => 'San Antonio', 'country_code' => 'PR'],\n            ['name' => 'Lamar', 'country_code' => 'US'],\n            ['name' => 'Catigua', 'country_code' => 'BR'],\n            ['name' => 'Butler', 'country_code' => 'US'],\n            ['name' => 'Chehalis', 'country_code' => 'US'],\n            ['name' => 'Roccasecca', 'country_code' => 'IT'],\n            ['name' => 'Al Mazra ah', 'country_code' => 'SY'],\n            ['name' => 'Vapniarka', 'country_code' => 'UA'],\n            ['name' => 'Richmond', 'country_code' => 'US'],\n            ['name' => 'Etowah', 'country_code' => 'US'],\n            ['name' => 'Villa Diaz Ordaz', 'country_code' => 'MX'],\n            ['name' => 'Intorsura Buzaului', 'country_code' => 'RO'],\n            ['name' => 'Solone', 'country_code' => 'UA'],\n            ['name' => 'Ipumirim', 'country_code' => 'BR'],\n            ['name' => 'Sieghartskirchen', 'country_code' => 'AT'],\n            ['name' => 'Bromont', 'country_code' => 'CA'],\n            ['name' => 'Guisona', 'country_code' => 'ES'],\n            ['name' => 'Sykkylven', 'country_code' => 'NO'],\n            ['name' => 'Seefeld', 'country_code' => 'DE'],\n            ['name' => 'Waller', 'country_code' => 'US'],\n            ['name' => 'Sao Jose dos Brasilios', 'country_code' => 'BR'],\n            ['name' => 'Askarovo', 'country_code' => 'RU'],\n            ['name' => 'Mikulov', 'country_code' => 'CZ'],\n            ['name' => 'Chippewa', 'country_code' => 'US'],\n            ['name' => 'Windsor', 'country_code' => 'US'],\n            ['name' => 'Orange', 'country_code' => 'US'],\n            ['name' => 'Beckwith', 'country_code' => 'CA'],\n            ['name' => 'Ban Duea', 'country_code' => 'TH'],\n            ['name' => 'Flintbek', 'country_code' => 'DE'],\n            ['name' => 'Inocencia', 'country_code' => 'BR'],\n            ['name' => 'Scotia', 'country_code' => 'US'],\n            ['name' => 'Big Flats', 'country_code' => 'US'],\n            ['name' => 'Ferno', 'country_code' => 'IT'],\n            ['name' => 'East Manchester', 'country_code' => 'US'],\n            ['name' => 'Tecuanipan', 'country_code' => 'MX'],\n            ['name' => 'Porec', 'country_code' => 'HR'],\n            ['name' => 'Orbottyan', 'country_code' => 'HU'],\n            ['name' => 'Lindoia', 'country_code' => 'BR'],\n            ['name' => 'Marshfield', 'country_code' => 'US'],\n            ['name' => 'Oroso', 'country_code' => 'ES'],\n            ['name' => 'Egly', 'country_code' => 'FR'],\n            ['name' => 'Derendingen', 'country_code' => 'CH'],\n            ['name' => 'Calimera', 'country_code' => 'IT'],\n            ['name' => 'Saint-Alban', 'country_code' => 'FR'],\n            ['name' => 'Sahuaripa', 'country_code' => 'MX'],\n            ['name' => 'Shirley', 'country_code' => 'US'],\n            ['name' => 'Vorchdorf', 'country_code' => 'AT'],\n            ['name' => 'Eden', 'country_code' => 'US'],\n            ['name' => 'Devils Lake', 'country_code' => 'US'],\n            ['name' => 'River Oaks', 'country_code' => 'US'],\n            ['name' => 'Mapello', 'country_code' => 'IT'],\n            ['name' => 'Mitsamiouli', 'country_code' => 'KM'],\n            ['name' => 'Bairnsdale', 'country_code' => 'AU'],\n            ['name' => 'Beni Aissi', 'country_code' => 'DZ'],\n            ['name' => 'Saint-Aubin-de-Medoc', 'country_code' => 'FR'],\n            ['name' => 'Goderich', 'country_code' => 'CA'],\n            ['name' => 'Inden', 'country_code' => 'DE'],\n            ['name' => 'Waupaca', 'country_code' => 'US'],\n            ['name' => 'Wapato', 'country_code' => 'US'],\n            ['name' => 'Sappemeer', 'country_code' => 'NL'],\n            ['name' => 'Chernyy Yar', 'country_code' => 'RU'],\n            ['name' => 'Saint Agnes', 'country_code' => 'GB'],\n            ['name' => 'Dzilam Gonzalez', 'country_code' => 'MX'],\n            ['name' => 'South Beloit', 'country_code' => 'US'],\n            ['name' => 'Povegliano Veronese', 'country_code' => 'IT'],\n            ['name' => 'Ollon', 'country_code' => 'CH'],\n            ['name' => 'Oulainen', 'country_code' => 'FI'],\n            ['name' => 'Pederobba', 'country_code' => 'IT'],\n            ['name' => 'Kula', 'country_code' => 'US'],\n            ['name' => 'Yenotayevka', 'country_code' => 'RU'],\n            ['name' => 'Tocantinia', 'country_code' => 'BR'],\n            ['name' => 'Broadview', 'country_code' => 'US'],\n            ['name' => 'Brisighella', 'country_code' => 'IT'],\n            ['name' => 'Naro', 'country_code' => 'IT'],\n            ['name' => 'Cushing', 'country_code' => 'US'],\n            ['name' => 'Astigarraga', 'country_code' => 'ES'],\n            ['name' => 'La Tronche', 'country_code' => 'FR'],\n            ['name' => 'Divion', 'country_code' => 'FR'],\n            ['name' => 'Pike Creek', 'country_code' => 'US'],\n            ['name' => 'Milan', 'country_code' => 'US'],\n            ['name' => 'Allegany', 'country_code' => 'US'],\n            ['name' => 'Pedrao', 'country_code' => 'BR'],\n            ['name' => 'Teublitz', 'country_code' => 'DE'],\n            ['name' => 'Gaoual', 'country_code' => 'GN'],\n            ['name' => 'Senatobia', 'country_code' => 'US'],\n            ['name' => 'Mattersburg', 'country_code' => 'AT'],\n            ['name' => 'Lajeado Novo', 'country_code' => 'BR'],\n            ['name' => 'Pleinfeld', 'country_code' => 'DE'],\n            ['name' => 'Kokemaki', 'country_code' => 'FI'],\n            ['name' => 'Tarso', 'country_code' => 'CO'],\n            ['name' => 'Sioux Center', 'country_code' => 'US'],\n            ['name' => 'Mordelles', 'country_code' => 'FR'],\n            ['name' => 'Winslow', 'country_code' => 'US'],\n            ['name' => 'Lagoa de Pedra', 'country_code' => 'BR'],\n            ['name' => 'Escalon', 'country_code' => 'US'],\n            ['name' => 'Abira', 'country_code' => 'JP'],\n            ['name' => 'Hnust a', 'country_code' => 'SK'],\n            ['name' => 'Stromstad', 'country_code' => 'SE'],\n            ['name' => 'Turkheim', 'country_code' => 'DE'],\n            ['name' => 'Lake Shore', 'country_code' => 'US'],\n            ['name' => 'Thomaston', 'country_code' => 'US'],\n            ['name' => 'Broumov', 'country_code' => 'CZ'],\n            ['name' => 'Omitlan de Juarez', 'country_code' => 'MX'],\n            ['name' => 'Farmington', 'country_code' => 'US'],\n            ['name' => 'Pulaski', 'country_code' => 'US'],\n            ['name' => 'Emerson', 'country_code' => 'US'],\n            ['name' => 'Dolni Chiflik', 'country_code' => 'BG'],\n            ['name' => 'Mglin', 'country_code' => 'RU'],\n            ['name' => 'Hrinova', 'country_code' => 'SK'],\n            ['name' => 'Ambalema', 'country_code' => 'CO'],\n            ['name' => 'Bernardsville', 'country_code' => 'US'],\n            ['name' => 'Hurbanovo', 'country_code' => 'SK'],\n            ['name' => 'Beni Oual Sehira', 'country_code' => 'MA'],\n            ['name' => 'Caribou', 'country_code' => 'US'],\n            ['name' => 'Tuttle', 'country_code' => 'US'],\n            ['name' => 'Sulzbach am Main', 'country_code' => 'DE'],\n            ['name' => 'Uthumphon Phisai', 'country_code' => 'TH'],\n            ['name' => 'Velykyy Bereznyy', 'country_code' => 'UA'],\n            ['name' => 'Mhamid el Rhozlane', 'country_code' => 'MA'],\n            ['name' => 'Cavaria', 'country_code' => 'IT'],\n            ['name' => 'Grosskarolinenfeld', 'country_code' => 'DE'],\n            ['name' => 'Renchen', 'country_code' => 'DE'],\n            ['name' => 'Stolzenau', 'country_code' => 'DE'],\n            ['name' => 'Hang Dong', 'country_code' => 'TH'],\n            ['name' => 'Bilovec', 'country_code' => 'CZ'],\n            ['name' => 'Palmyra', 'country_code' => 'US'],\n            ['name' => 'LaFayette', 'country_code' => 'US'],\n            ['name' => 'Romaniv', 'country_code' => 'UA'],\n            ['name' => 'Amerongen', 'country_code' => 'NL'],\n            ['name' => 'Almas', 'country_code' => 'BR'],\n            ['name' => 'Jenbach', 'country_code' => 'AT'],\n            ['name' => 'Palmyra', 'country_code' => 'US'],\n            ['name' => 'Strasswalchen', 'country_code' => 'AT'],\n            ['name' => 'Castello di Godego', 'country_code' => 'IT'],\n            ['name' => 'Paulo Lopes', 'country_code' => 'BR'],\n            ['name' => 'Denham', 'country_code' => 'GB'],\n            ['name' => 'Livonia', 'country_code' => 'US'],\n            ['name' => 'La Rambla', 'country_code' => 'ES'],\n            ['name' => 'Castel Madama', 'country_code' => 'IT'],\n            ['name' => 'Ait Hammou', 'country_code' => 'MA'],\n            ['name' => 'Ipuacu', 'country_code' => 'BR'],\n            ['name' => 'Joshua Tree', 'country_code' => 'US'],\n            ['name' => 'Pakefield', 'country_code' => 'GB'],\n            ['name' => 'Passirano', 'country_code' => 'IT'],\n            ['name' => 'Ras Kebdana', 'country_code' => 'MA'],\n            ['name' => 'Burton Latimer', 'country_code' => 'GB'],\n            ['name' => 'Camerano', 'country_code' => 'IT'],\n            ['name' => 'Grodig', 'country_code' => 'AT'],\n            ['name' => 'Sao Pedro do Turvo', 'country_code' => 'BR'],\n            ['name' => 'Kotake', 'country_code' => 'JP'],\n            ['name' => 'Saint-Berthevin', 'country_code' => 'FR'],\n            ['name' => 'Ait Hadi', 'country_code' => 'MA'],\n            ['name' => 'Leola', 'country_code' => 'US'],\n            ['name' => 'Dayton', 'country_code' => 'US'],\n            ['name' => 'Plympton-Wyoming', 'country_code' => 'CA'],\n            ['name' => 'Central Huron', 'country_code' => 'CA'],\n            ['name' => 'Le Mesnil-Saint-Denis', 'country_code' => 'FR'],\n            ['name' => 'Inwood', 'country_code' => 'US'],\n            ['name' => 'Nykarleby', 'country_code' => 'FI'],\n            ['name' => 'Inimutaba', 'country_code' => 'BR'],\n            ['name' => 'Petite-Rosselle', 'country_code' => 'FR'],\n            ['name' => 'Umari', 'country_code' => 'BR'],\n            ['name' => 'Plumas Lake', 'country_code' => 'US'],\n            ['name' => 'Elorrio', 'country_code' => 'ES'],\n            ['name' => 'Banchory', 'country_code' => 'GB'],\n            ['name' => 'Fuzesabony', 'country_code' => 'HU'],\n            ['name' => 'Florestal', 'country_code' => 'BR'],\n            ['name' => 'Kunhegyes', 'country_code' => 'HU'],\n            ['name' => 'Rade', 'country_code' => 'NO'],\n            ['name' => 'Barr', 'country_code' => 'FR'],\n            ['name' => 'San Nicolas', 'country_code' => 'ES'],\n            ['name' => 'Nakata', 'country_code' => 'JP'],\n            ['name' => 'Gaillon', 'country_code' => 'FR'],\n            ['name' => 'Bad Sachsa', 'country_code' => 'DE'],\n            ['name' => 'Hales Corners', 'country_code' => 'US'],\n            ['name' => 'Orbe', 'country_code' => 'CH'],\n            ['name' => 'Schaghticoke', 'country_code' => 'US'],\n            ['name' => 'Rigaud', 'country_code' => 'CA'],\n            ['name' => 'Hughson', 'country_code' => 'US'],\n            ['name' => 'Kleinmond', 'country_code' => 'ZA'],\n            ['name' => 'Scappoose', 'country_code' => 'US'],\n            ['name' => 'Perros-Guirec', 'country_code' => 'FR'],\n            ['name' => 'Inami', 'country_code' => 'JP'],\n            ['name' => 'Lawrence', 'country_code' => 'US'],\n            ['name' => 'Urraween', 'country_code' => 'AU'],\n            ['name' => 'McCook', 'country_code' => 'US'],\n            ['name' => 'East Fallowfield', 'country_code' => 'US'],\n            ['name' => 'La Alianza', 'country_code' => 'HN'],\n            ['name' => 'Campofelice di Roccella', 'country_code' => 'IT'],\n            ['name' => 'Brejinho', 'country_code' => 'BR'],\n            ['name' => 'Dairago', 'country_code' => 'IT'],\n            ['name' => 'Schutterwald', 'country_code' => 'DE'],\n            ['name' => 'Sinzing', 'country_code' => 'DE'],\n            ['name' => 'Moema', 'country_code' => 'BR'],\n            ['name' => 'Cormons', 'country_code' => 'IT'],\n            ['name' => 'Lago Vista', 'country_code' => 'US'],\n            ['name' => 'Columbia Falls', 'country_code' => 'US'],\n            ['name' => 'Khoshk Bijar', 'country_code' => 'IR'],\n            ['name' => 'Curtici', 'country_code' => 'RO'],\n            ['name' => 'Sant Agata Bolognese', 'country_code' => 'IT'],\n            ['name' => 'Dry Run', 'country_code' => 'US'],\n            ['name' => 'Granito', 'country_code' => 'BR'],\n            ['name' => 'Rio d Oeste', 'country_code' => 'BR'],\n            ['name' => 'Jackson', 'country_code' => 'US'],\n            ['name' => 'Durach', 'country_code' => 'DE'],\n            ['name' => 'Shiranuka', 'country_code' => 'JP'],\n            ['name' => 'New Hanover', 'country_code' => 'US'],\n            ['name' => 'Marshall', 'country_code' => 'US'],\n            ['name' => 'Rizal', 'country_code' => 'PH'],\n            ['name' => 'Sa Bot', 'country_code' => 'TH'],\n            ['name' => 'Kruhlaye', 'country_code' => 'BY'],\n            ['name' => 'Nettersheim', 'country_code' => 'DE'],\n            ['name' => 'Lower Windsor', 'country_code' => 'US'],\n            ['name' => 'Quatigua', 'country_code' => 'BR'],\n            ['name' => 'Meldorf', 'country_code' => 'DE'],\n            ['name' => 'Easton', 'country_code' => 'US'],\n            ['name' => 'Market Deeping', 'country_code' => 'GB'],\n            ['name' => 'Saujon', 'country_code' => 'FR'],\n            ['name' => 'Montrose', 'country_code' => 'US'],\n            ['name' => 'Llandudno Junction', 'country_code' => 'GB'],\n            ['name' => 'Albertville', 'country_code' => 'US'],\n            ['name' => 'Porters Neck', 'country_code' => 'US'],\n            ['name' => 'Gold River', 'country_code' => 'US'],\n            ['name' => 'Assis Brasil', 'country_code' => 'BR'],\n            ['name' => 'Sidi al Ghandour', 'country_code' => 'MA'],\n            ['name' => 'Magnanville', 'country_code' => 'FR'],\n            ['name' => 'Mondim de Basto', 'country_code' => 'PT'],\n            ['name' => 'Anina', 'country_code' => 'RO'],\n            ['name' => 'Barao do Triunfo', 'country_code' => 'BR'],\n            ['name' => 'Berlin', 'country_code' => 'US'],\n            ['name' => 'Delafield', 'country_code' => 'US'],\n            ['name' => 'Lossburg', 'country_code' => 'DE'],\n            ['name' => 'Nea Kallikrateia', 'country_code' => 'GR'],\n            ['name' => 'Burkardroth', 'country_code' => 'DE'],\n            ['name' => 'Dno', 'country_code' => 'RU'],\n            ['name' => 'Montecosaro', 'country_code' => 'IT'],\n            ['name' => 'Mount Horeb', 'country_code' => 'US'],\n            ['name' => 'Big Stone Gap', 'country_code' => 'US'],\n            ['name' => 'Gonzales', 'country_code' => 'US'],\n            ['name' => 'Royalton', 'country_code' => 'US'],\n            ['name' => 'Zane', 'country_code' => 'IT'],\n            ['name' => 'Brecknock', 'country_code' => 'US'],\n            ['name' => 'Pikeville', 'country_code' => 'US'],\n            ['name' => 'Teteles de Avila Castillo', 'country_code' => 'MX'],\n            ['name' => 'Fehring', 'country_code' => 'AT'],\n            ['name' => 'Himberg', 'country_code' => 'AT'],\n            ['name' => 'Chauray', 'country_code' => 'FR'],\n            ['name' => 'Baurci', 'country_code' => 'MD'],\n            ['name' => 'Haddon Heights', 'country_code' => 'US'],\n            ['name' => 'Page', 'country_code' => 'US'],\n            ['name' => 'Maripi', 'country_code' => 'CO'],\n            ['name' => 'Bindlach', 'country_code' => 'DE'],\n            ['name' => 'Saint-Andre-de-la-Roche', 'country_code' => 'FR'],\n            ['name' => 'Ortenburg', 'country_code' => 'DE'],\n            ['name' => 'North Hanover', 'country_code' => 'US'],\n            ['name' => 'Phu Kradueng', 'country_code' => 'TH'],\n            ['name' => 'La Ferte-Saint-Aubin', 'country_code' => 'FR'],\n            ['name' => 'Fairfax', 'country_code' => 'US'],\n            ['name' => 'Dummerstorf', 'country_code' => 'DE'],\n            ['name' => 'Abtsgmund', 'country_code' => 'DE'],\n            ['name' => 'Dumbraveni', 'country_code' => 'RO'],\n            ['name' => 'Konigsee', 'country_code' => 'DE'],\n            ['name' => 'Longpont-sur-Orge', 'country_code' => 'FR'],\n            ['name' => 'Albbruck', 'country_code' => 'DE'],\n            ['name' => 'Zlatna', 'country_code' => 'RO'],\n            ['name' => 'Drvar', 'country_code' => 'BA'],\n            ['name' => 'Corte', 'country_code' => 'FR'],\n            ['name' => 'Yreka', 'country_code' => 'US'],\n            ['name' => 'Benton', 'country_code' => 'US'],\n            ['name' => 'Norwich', 'country_code' => 'US'],\n            ['name' => 'Peseux', 'country_code' => 'CH'],\n            ['name' => 'Marengo', 'country_code' => 'US'],\n            ['name' => 'Louiseville', 'country_code' => 'CA'],\n            ['name' => 'Laje de Muriae', 'country_code' => 'BR'],\n            ['name' => 'Douar Brarba', 'country_code' => 'MA'],\n            ['name' => 'Felizburgo', 'country_code' => 'BR'],\n            ['name' => 'Slavkov u Brna', 'country_code' => 'CZ'],\n            ['name' => 'Bad Goisern', 'country_code' => 'AT'],\n            ['name' => 'Stonehouse', 'country_code' => 'GB'],\n            ['name' => 'Fairlawn', 'country_code' => 'US'],\n            ['name' => 'Williamstown', 'country_code' => 'US'],\n            ['name' => 'Goioxim', 'country_code' => 'BR'],\n            ['name' => 'Bischofswiesen', 'country_code' => 'DE'],\n            ['name' => 'Robinson', 'country_code' => 'US'],\n            ['name' => 'Sao Joao Batista do Gloria', 'country_code' => 'BR'],\n            ['name' => 'Pieve di Cento', 'country_code' => 'IT'],\n            ['name' => 'El Centenario', 'country_code' => 'MX'],\n            ['name' => 'Bernolakovo', 'country_code' => 'SK'],\n            ['name' => 'Adassil', 'country_code' => 'MA'],\n            ['name' => 'Saintry-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Crozon', 'country_code' => 'FR'],\n            ['name' => 'Trombudo Central', 'country_code' => 'BR'],\n            ['name' => 'Tyrone', 'country_code' => 'US'],\n            ['name' => 'Chesterfield', 'country_code' => 'US'],\n            ['name' => 'Castlemaine', 'country_code' => 'AU'],\n            ['name' => 'Chibougamau', 'country_code' => 'CA'],\n            ['name' => 'Alpercata', 'country_code' => 'BR'],\n            ['name' => 'Swaffham', 'country_code' => 'GB'],\n            ['name' => 'North Star', 'country_code' => 'US'],\n            ['name' => 'Nole', 'country_code' => 'IT'],\n            ['name' => 'Purcell', 'country_code' => 'US'],\n            ['name' => 'Lowell', 'country_code' => 'US'],\n            ['name' => 'Lambsheim', 'country_code' => 'DE'],\n            ['name' => 'Landen', 'country_code' => 'US'],\n            ['name' => 'San Isidro', 'country_code' => 'PH'],\n            ['name' => 'Canicattini Bagni', 'country_code' => 'IT'],\n            ['name' => 'Sparanise', 'country_code' => 'IT'],\n            ['name' => 'Vohenstrauss', 'country_code' => 'DE'],\n            ['name' => 'Tazoult', 'country_code' => 'MA'],\n            ['name' => 'Saint-Ismier', 'country_code' => 'FR'],\n            ['name' => 'Miranda do Douro', 'country_code' => 'PT'],\n            ['name' => 'Birkenfeld', 'country_code' => 'DE'],\n            ['name' => 'Villarejo de Salvanes', 'country_code' => 'ES'],\n            ['name' => 'Curarrehue', 'country_code' => 'CL'],\n            ['name' => 'Longiano', 'country_code' => 'IT'],\n            ['name' => 'Maracaja', 'country_code' => 'BR'],\n            ['name' => 'Haslach im Kinzigtal', 'country_code' => 'DE'],\n            ['name' => 'Dos Palos', 'country_code' => 'US'],\n            ['name' => 'Saint-Juery', 'country_code' => 'FR'],\n            ['name' => 'Chateaubourg', 'country_code' => 'FR'],\n            ['name' => 'Loreto Aprutino', 'country_code' => 'IT'],\n            ['name' => 'Vimperk', 'country_code' => 'CZ'],\n            ['name' => 'Sahy', 'country_code' => 'SK'],\n            ['name' => 'Valverde de la Virgen', 'country_code' => 'ES'],\n            ['name' => 'Aylmer', 'country_code' => 'CA'],\n            ['name' => 'Irajuba', 'country_code' => 'BR'],\n            ['name' => 'Louvroil', 'country_code' => 'FR'],\n            ['name' => 'Campo Belo do Sul', 'country_code' => 'BR'],\n            ['name' => 'Peqin', 'country_code' => 'AL'],\n            ['name' => 'Tafetachte', 'country_code' => 'MA'],\n            ['name' => 'Park Street', 'country_code' => 'GB'],\n            ['name' => 'Oceano', 'country_code' => 'US'],\n            ['name' => 'Kirgiz-Miyaki', 'country_code' => 'RU'],\n            ['name' => 'Napajedla', 'country_code' => 'CZ'],\n            ['name' => 'Fairfield', 'country_code' => 'US'],\n            ['name' => 'Grossmehring', 'country_code' => 'DE'],\n            ['name' => 'Krasnokutsk', 'country_code' => 'UA'],\n            ['name' => 'Volta Mantovana', 'country_code' => 'IT'],\n            ['name' => 'Nova Bana', 'country_code' => 'SK'],\n            ['name' => 'Piikkio', 'country_code' => 'FI'],\n            ['name' => 'Asbach', 'country_code' => 'DE'],\n            ['name' => 'Homberg', 'country_code' => 'DE'],\n            ['name' => 'Sappington', 'country_code' => 'US'],\n            ['name' => 'Maurice River', 'country_code' => 'US'],\n            ['name' => 'Torregrotta', 'country_code' => 'IT'],\n            ['name' => 'Serranopolis', 'country_code' => 'BR'],\n            ['name' => 'Brena Alta', 'country_code' => 'ES'],\n            ['name' => 'Paimpol', 'country_code' => 'FR'],\n            ['name' => 'Malchin', 'country_code' => 'DE'],\n            ['name' => 'Blaxland', 'country_code' => 'AU'],\n            ['name' => 'Killi', 'country_code' => 'SY'],\n            ['name' => 'Askawn', 'country_code' => 'MA'],\n            ['name' => 'Chonan', 'country_code' => 'JP'],\n            ['name' => 'Bilisht', 'country_code' => 'AL'],\n            ['name' => 'Sao Jose da Barra', 'country_code' => 'BR'],\n            ['name' => 'Brugine', 'country_code' => 'IT'],\n            ['name' => 'Taznakht', 'country_code' => 'MA'],\n            ['name' => 'McCordsville', 'country_code' => 'US'],\n            ['name' => 'Librazhd', 'country_code' => 'AL'],\n            ['name' => 'Sovetsk', 'country_code' => 'RU'],\n            ['name' => 'Le Peage-de-Roussillon', 'country_code' => 'FR'],\n            ['name' => 'Jurancon', 'country_code' => 'FR'],\n            ['name' => 'Silvis', 'country_code' => 'US'],\n            ['name' => 'Kampong Mata Mata', 'country_code' => 'BN'],\n            ['name' => 'Bilton', 'country_code' => 'GB'],\n            ['name' => 'Newport', 'country_code' => 'US'],\n            ['name' => 'Anna Paulowna', 'country_code' => 'NL'],\n            ['name' => 'Southwood Acres', 'country_code' => 'US'],\n            ['name' => 'Friedrichroda', 'country_code' => 'DE'],\n            ['name' => 'Mount Shasta', 'country_code' => 'US'],\n            ['name' => 'San Marco Argentano', 'country_code' => 'IT'],\n            ['name' => 'Salair', 'country_code' => 'RU'],\n            ['name' => 'Kirillov', 'country_code' => 'RU'],\n            ['name' => 'Buttapietra', 'country_code' => 'IT'],\n            ['name' => 'West Brandywine', 'country_code' => 'US'],\n            ['name' => 'Ojai', 'country_code' => 'US'],\n            ['name' => 'South Berwick', 'country_code' => 'US'],\n            ['name' => 'Albunol', 'country_code' => 'ES'],\n            ['name' => 'Kriz', 'country_code' => 'HR'],\n            ['name' => 'Monticello', 'country_code' => 'US'],\n            ['name' => 'Lennox Head', 'country_code' => 'AU'],\n            ['name' => 'Alstahaug', 'country_code' => 'NO'],\n            ['name' => 'Douar Oulad Boussaken', 'country_code' => 'MA'],\n            ['name' => 'Francisco Leon', 'country_code' => 'MX'],\n            ['name' => 'Guatapara', 'country_code' => 'BR'],\n            ['name' => 'Cha Preta', 'country_code' => 'BR'],\n            ['name' => 'Nisa', 'country_code' => 'PT'],\n            ['name' => 'Ra-ngae', 'country_code' => 'TH'],\n            ['name' => 'Lahouarta', 'country_code' => 'MA'],\n            ['name' => 'Smithfield', 'country_code' => 'US'],\n            ['name' => 'Delson', 'country_code' => 'CA'],\n            ['name' => 'Villa Hills', 'country_code' => 'US'],\n            ['name' => 'South Heidelberg', 'country_code' => 'US'],\n            ['name' => 'Radeburg', 'country_code' => 'DE'],\n            ['name' => 'Montblanch', 'country_code' => 'ES'],\n            ['name' => 'St. Gabriel', 'country_code' => 'US'],\n            ['name' => 'Pillaro', 'country_code' => 'EC'],\n            ['name' => 'San Emilio', 'country_code' => 'PH'],\n            ['name' => 'Bidart', 'country_code' => 'FR'],\n            ['name' => 'Almodovar', 'country_code' => 'PT'],\n            ['name' => 'Tito', 'country_code' => 'IT'],\n            ['name' => 'Lander', 'country_code' => 'US'],\n            ['name' => 'Trstena', 'country_code' => 'SK'],\n            ['name' => 'Palmer', 'country_code' => 'US'],\n            ['name' => 'Wabern', 'country_code' => 'DE'],\n            ['name' => 'Sheringham', 'country_code' => 'GB'],\n            ['name' => 'Itacaja', 'country_code' => 'BR'],\n            ['name' => 'Dock Junction', 'country_code' => 'US'],\n            ['name' => 'Otterndorf', 'country_code' => 'DE'],\n            ['name' => 'Nadlac', 'country_code' => 'RO'],\n            ['name' => 'Pelinia', 'country_code' => 'MD'],\n            ['name' => 'Bomaderry', 'country_code' => 'AU'],\n            ['name' => 'Poviglio', 'country_code' => 'IT'],\n            ['name' => 'Thung Fon', 'country_code' => 'TH'],\n            ['name' => 'Ten Boer', 'country_code' => 'NL'],\n            ['name' => 'Moravske Budejovice', 'country_code' => 'CZ'],\n            ['name' => 'Sevenum', 'country_code' => 'NL'],\n            ['name' => 'Techirghiol', 'country_code' => 'RO'],\n            ['name' => 'Amara', 'country_code' => 'RO'],\n            ['name' => 'Kottmarsdorf', 'country_code' => 'DE'],\n            ['name' => 'Keystone Heights', 'country_code' => 'US'],\n            ['name' => 'Balestrate', 'country_code' => 'IT'],\n            ['name' => 'West Cocalico', 'country_code' => 'US'],\n            ['name' => 'Haapajarvi', 'country_code' => 'FI'],\n            ['name' => 'Ceriano Laghetto', 'country_code' => 'IT'],\n            ['name' => 'Benacazon', 'country_code' => 'ES'],\n            ['name' => 'Lenti', 'country_code' => 'HU'],\n            ['name' => 'Begas', 'country_code' => 'ES'],\n            ['name' => 'Braunton', 'country_code' => 'GB'],\n            ['name' => 'Tsarychanka', 'country_code' => 'UA'],\n            ['name' => 'Altaneira', 'country_code' => 'BR'],\n            ['name' => 'Bain-de-Bretagne', 'country_code' => 'FR'],\n            ['name' => 'Legden', 'country_code' => 'DE'],\n            ['name' => 'Sidi  Allal al Mcader', 'country_code' => 'MA'],\n            ['name' => 'Pordic', 'country_code' => 'FR'],\n            ['name' => 'Douar Tassift', 'country_code' => 'MA'],\n            ['name' => 'Gundelsheim', 'country_code' => 'DE'],\n            ['name' => 'Carhaix-Plouguer', 'country_code' => 'FR'],\n            ['name' => 'Erlenbach', 'country_code' => 'CH'],\n            ['name' => 'White Oak', 'country_code' => 'US'],\n            ['name' => 'Rockton', 'country_code' => 'US'],\n            ['name' => 'Tha Ruea', 'country_code' => 'TH'],\n            ['name' => 'Cheadle', 'country_code' => 'GB'],\n            ['name' => 'Treuenbrietzen', 'country_code' => 'DE'],\n            ['name' => 'Yubari', 'country_code' => 'JP'],\n            ['name' => 'Gedern', 'country_code' => 'DE'],\n            ['name' => 'Markelo', 'country_code' => 'NL'],\n            ['name' => 'Nyergesujfalu', 'country_code' => 'HU'],\n            ['name' => 'Lagnieu', 'country_code' => 'FR'],\n            ['name' => 'Geisenhausen', 'country_code' => 'DE'],\n            ['name' => 'Holdorf', 'country_code' => 'DE'],\n            ['name' => 'Rhoose', 'country_code' => 'GB'],\n            ['name' => 'Ashland', 'country_code' => 'US'],\n            ['name' => 'Muribeca', 'country_code' => 'BR'],\n            ['name' => 'Eibenstock', 'country_code' => 'DE'],\n            ['name' => 'Bernkastel-Kues', 'country_code' => 'DE'],\n            ['name' => 'Bellegarde', 'country_code' => 'FR'],\n            ['name' => 'Arconate', 'country_code' => 'IT'],\n            ['name' => 'Malmyzh', 'country_code' => 'RU'],\n            ['name' => 'Leipheim', 'country_code' => 'DE'],\n            ['name' => 'Wingerworth', 'country_code' => 'GB'],\n            ['name' => 'Florence', 'country_code' => 'US'],\n            ['name' => 'Coracora', 'country_code' => 'PE'],\n            ['name' => 'Sissach', 'country_code' => 'CH'],\n            ['name' => 'Old Town', 'country_code' => 'US'],\n            ['name' => 'Edgerton', 'country_code' => 'US'],\n            ['name' => 'Lautern', 'country_code' => 'DE'],\n            ['name' => 'New London', 'country_code' => 'US'],\n            ['name' => 'Kuchl', 'country_code' => 'AT'],\n            ['name' => 'Shibecha', 'country_code' => 'JP'],\n            ['name' => 'Audun-le-Tiche', 'country_code' => 'FR'],\n            ['name' => 'Altendorf', 'country_code' => 'CH'],\n            ['name' => 'Talayuela', 'country_code' => 'ES'],\n            ['name' => 'Stratham', 'country_code' => 'US'],\n            ['name' => 'Kingswood', 'country_code' => 'GB'],\n            ['name' => 'Saint-Etienne-de-Montluc', 'country_code' => 'FR'],\n            ['name' => 'Oulad Cherki', 'country_code' => 'MA'],\n            ['name' => 'Isyangulovo', 'country_code' => 'RU'],\n            ['name' => 'Emlichheim', 'country_code' => 'DE'],\n            ['name' => 'Pfaffenhofen an der Roth', 'country_code' => 'DE'],\n            ['name' => 'Waldstetten', 'country_code' => 'DE'],\n            ['name' => 'Oued El Makhazine', 'country_code' => 'MA'],\n            ['name' => 'Shenfield', 'country_code' => 'GB'],\n            ['name' => 'Kimberley', 'country_code' => 'CA'],\n            ['name' => 'Cesky Brod', 'country_code' => 'CZ'],\n            ['name' => 'Rufina', 'country_code' => 'IT'],\n            ['name' => 'Kargasok', 'country_code' => 'RU'],\n            ['name' => 'Weikersheim', 'country_code' => 'DE'],\n            ['name' => 'Laguna Carapa', 'country_code' => 'BR'],\n            ['name' => 'Mutlangen', 'country_code' => 'DE'],\n            ['name' => 'North Bend', 'country_code' => 'US'],\n            ['name' => 'Norg', 'country_code' => 'NL'],\n            ['name' => 'Shenstone', 'country_code' => 'GB'],\n            ['name' => 'Soave', 'country_code' => 'IT'],\n            ['name' => 'Hiawatha', 'country_code' => 'US'],\n            ['name' => 'Mansoa', 'country_code' => 'GW'],\n            ['name' => 'Sennori', 'country_code' => 'IT'],\n            ['name' => 'Collado Mediano', 'country_code' => 'ES'],\n            ['name' => 'Hubbard', 'country_code' => 'US'],\n            ['name' => 'River Rouge', 'country_code' => 'US'],\n            ['name' => 'Joviania', 'country_code' => 'BR'],\n            ['name' => 'Kaplice', 'country_code' => 'CZ'],\n            ['name' => 'Sandwich', 'country_code' => 'US'],\n            ['name' => 'Oebisfelde', 'country_code' => 'DE'],\n            ['name' => 'Maripipi', 'country_code' => 'PH'],\n            ['name' => 'Belen', 'country_code' => 'US'],\n            ['name' => 'Kalsdorf bei Graz', 'country_code' => 'AT'],\n            ['name' => 'Marion', 'country_code' => 'US'],\n            ['name' => 'Inverness', 'country_code' => 'US'],\n            ['name' => 'Waitara', 'country_code' => 'NZ'],\n            ['name' => 'Elassona', 'country_code' => 'GR'],\n            ['name' => 'Great Bookham', 'country_code' => 'GB'],\n            ['name' => 'Cotati', 'country_code' => 'US'],\n            ['name' => 'Wauseon', 'country_code' => 'US'],\n            ['name' => 'Soltvadkert', 'country_code' => 'HU'],\n            ['name' => 'Beauvechain', 'country_code' => 'BE'],\n            ['name' => 'Cranves-Sales', 'country_code' => 'FR'],\n            ['name' => 'Atherton', 'country_code' => 'AU'],\n            ['name' => 'Ouro', 'country_code' => 'BR'],\n            ['name' => 'Inconfidentes', 'country_code' => 'BR'],\n            ['name' => 'Paulo Frontin', 'country_code' => 'BR'],\n            ['name' => 'Victoria', 'country_code' => 'RO'],\n            ['name' => 'Cercedilla', 'country_code' => 'ES'],\n            ['name' => 'Mills River', 'country_code' => 'US'],\n            ['name' => 'Salete', 'country_code' => 'BR'],\n            ['name' => 'Untermeitingen', 'country_code' => 'DE'],\n            ['name' => 'Calverton', 'country_code' => 'GB'],\n            ['name' => 'Saranac Lake', 'country_code' => 'US'],\n            ['name' => 'Rzhyshchiv', 'country_code' => 'UA'],\n            ['name' => 'Sanibel', 'country_code' => 'US'],\n            ['name' => 'Bou Iferda', 'country_code' => 'MA'],\n            ['name' => 'Torrita di Siena', 'country_code' => 'IT'],\n            ['name' => 'Teya', 'country_code' => 'ES'],\n            ['name' => 'Auvers-sur-Oise', 'country_code' => 'FR'],\n            ['name' => 'Mezhova', 'country_code' => 'UA'],\n            ['name' => 'Farmington', 'country_code' => 'US'],\n            ['name' => 'Suonenjoki', 'country_code' => 'FI'],\n            ['name' => 'Blandford-Blenheim', 'country_code' => 'CA'],\n            ['name' => 'Simacota', 'country_code' => 'CO'],\n            ['name' => 'Santa Terezinha', 'country_code' => 'BR'],\n            ['name' => 'Soldotna', 'country_code' => 'US'],\n            ['name' => 'Simitli', 'country_code' => 'BG'],\n            ['name' => 'Pirdop', 'country_code' => 'BG'],\n            ['name' => 'Trimbach', 'country_code' => 'CH'],\n            ['name' => 'Devavanya', 'country_code' => 'HU'],\n            ['name' => 'Andorra', 'country_code' => 'ES'],\n            ['name' => 'Port Jefferson Station', 'country_code' => 'US'],\n            ['name' => 'Monsenhor Hipolito', 'country_code' => 'BR'],\n            ['name' => 'Old Lyme', 'country_code' => 'US'],\n            ['name' => 'Bayham', 'country_code' => 'CA'],\n            ['name' => 'Ivolginsk', 'country_code' => 'RU'],\n            ['name' => 'Tain-l Hermitage', 'country_code' => 'FR'],\n            ['name' => 'Reiden', 'country_code' => 'CH'],\n            ['name' => 'Greenville', 'country_code' => 'US'],\n            ['name' => 'Patarlagele', 'country_code' => 'RO'],\n            ['name' => 'Loos-en-Gohelle', 'country_code' => 'FR'],\n            ['name' => 'Murr', 'country_code' => 'DE'],\n            ['name' => 'West Concord', 'country_code' => 'US'],\n            ['name' => 'New Bremen', 'country_code' => 'US'],\n            ['name' => 'Betheny', 'country_code' => 'FR'],\n            ['name' => 'Neugersdorf', 'country_code' => 'DE'],\n            ['name' => 'Mittenwald', 'country_code' => 'DE'],\n            ['name' => 'Lignano Sabbiadoro', 'country_code' => 'IT'],\n            ['name' => 'Buchrain', 'country_code' => 'CH'],\n            ['name' => 'Mentor-on-the-Lake', 'country_code' => 'US'],\n            ['name' => 'Saint-Christol-lez-Ales', 'country_code' => 'FR'],\n            ['name' => 'Aiquile', 'country_code' => 'BO'],\n            ['name' => 'Villa del Rio', 'country_code' => 'ES'],\n            ['name' => 'Waterloo', 'country_code' => 'US'],\n            ['name' => 'East Marlborough', 'country_code' => 'US'],\n            ['name' => 'Arbaa Ayacha', 'country_code' => 'MA'],\n            ['name' => 'Ancient Oaks', 'country_code' => 'US'],\n            ['name' => 'Tuncurry', 'country_code' => 'AU'],\n            ['name' => 'Farr West', 'country_code' => 'US'],\n            ['name' => 'Odry', 'country_code' => 'CZ'],\n            ['name' => 'Morteau', 'country_code' => 'FR'],\n            ['name' => 'Syanno', 'country_code' => 'BY'],\n            ['name' => 'Homun', 'country_code' => 'MX'],\n            ['name' => 'Livramento', 'country_code' => 'BR'],\n            ['name' => 'South Apopka', 'country_code' => 'US'],\n            ['name' => 'Pembroke', 'country_code' => 'US'],\n            ['name' => 'Komijan', 'country_code' => 'IR'],\n            ['name' => 'Nobitz', 'country_code' => 'DE'],\n            ['name' => 'Robeson', 'country_code' => 'US'],\n            ['name' => 'Upper Deerfield', 'country_code' => 'US'],\n            ['name' => 'Bujalance', 'country_code' => 'ES'],\n            ['name' => 'Militello in Val di Catania', 'country_code' => 'IT'],\n            ['name' => 'Ibirarema', 'country_code' => 'BR'],\n            ['name' => 'Gromitz', 'country_code' => 'DE'],\n            ['name' => 'Tornal a', 'country_code' => 'SK'],\n            ['name' => 'Reyes', 'country_code' => 'BO'],\n            ['name' => 'Sericita', 'country_code' => 'BR'],\n            ['name' => 'Canovanas', 'country_code' => 'PR'],\n            ['name' => 'Providence Village', 'country_code' => 'US'],\n            ['name' => 'Buchs', 'country_code' => 'CH'],\n            ['name' => 'Esashi', 'country_code' => 'JP'],\n            ['name' => 'Murg', 'country_code' => 'DE'],\n            ['name' => 'Cazorla', 'country_code' => 'ES'],\n            ['name' => 'Inverness', 'country_code' => 'US'],\n            ['name' => 'Le Roy', 'country_code' => 'US'],\n            ['name' => 'Gypsum', 'country_code' => 'US'],\n            ['name' => 'Clarkston', 'country_code' => 'US'],\n            ['name' => 'Segre', 'country_code' => 'FR'],\n            ['name' => 'Arraiolos', 'country_code' => 'PT'],\n            ['name' => 'Bruzual', 'country_code' => 'VE'],\n            ['name' => 'Canova', 'country_code' => 'IT'],\n            ['name' => 'Tolleson', 'country_code' => 'US'],\n            ['name' => 'Groditz', 'country_code' => 'DE'],\n            ['name' => 'Luserna San Giovanni', 'country_code' => 'IT'],\n            ['name' => 'Carinola', 'country_code' => 'IT'],\n            ['name' => 'New Roads', 'country_code' => 'US'],\n            ['name' => 'San Diego de Alejandria', 'country_code' => 'MX'],\n            ['name' => 'Fabregues', 'country_code' => 'FR'],\n            ['name' => 'Ponchatoula', 'country_code' => 'US'],\n            ['name' => 'La Concordia', 'country_code' => 'NI'],\n            ['name' => 'Strathalbyn', 'country_code' => 'AU'],\n            ['name' => 'Mapimi', 'country_code' => 'MX'],\n            ['name' => 'Slivnitsa', 'country_code' => 'BG'],\n            ['name' => 'Poiares', 'country_code' => 'PT'],\n            ['name' => 'Camp Pendleton North', 'country_code' => 'US'],\n            ['name' => 'Santa Marta de Penaguiao', 'country_code' => 'PT'],\n            ['name' => 'Antonio Olinto', 'country_code' => 'BR'],\n            ['name' => 'Humberston', 'country_code' => 'GB'],\n            ['name' => 'Roggiano Gravina', 'country_code' => 'IT'],\n            ['name' => 'Smithville', 'country_code' => 'US'],\n            ['name' => 'East Pikeland', 'country_code' => 'US'],\n            ['name' => 'Eden Isle', 'country_code' => 'US'],\n            ['name' => 'Ban Chan', 'country_code' => 'TH'],\n            ['name' => 'Bannockburn', 'country_code' => 'GB'],\n            ['name' => 'Wolkersdorf im Weinviertel', 'country_code' => 'AT'],\n            ['name' => 'Pomona', 'country_code' => 'US'],\n            ['name' => 'Uyskoye', 'country_code' => 'RU'],\n            ['name' => 'Pontevico', 'country_code' => 'IT'],\n            ['name' => 'Houston', 'country_code' => 'GB'],\n            ['name' => 'Cabeceiras', 'country_code' => 'BR'],\n            ['name' => 'Nazarezinho', 'country_code' => 'BR'],\n            ['name' => 'Itagimirim', 'country_code' => 'BR'],\n            ['name' => 'Stegaurach', 'country_code' => 'DE'],\n            ['name' => 'Itaju do Colonia', 'country_code' => 'BR'],\n            ['name' => 'Derio', 'country_code' => 'ES'],\n            ['name' => 'Charles City', 'country_code' => 'US'],\n            ['name' => 'Dettelbach', 'country_code' => 'DE'],\n            ['name' => 'Herne', 'country_code' => 'GB'],\n            ['name' => 'Ulmeni', 'country_code' => 'RO'],\n            ['name' => 'Longueau', 'country_code' => 'FR'],\n            ['name' => 'Villemandeur', 'country_code' => 'FR'],\n            ['name' => 'Paraiso do Sul', 'country_code' => 'BR'],\n            ['name' => 'Bourbourg', 'country_code' => 'FR'],\n            ['name' => 'Turceni', 'country_code' => 'RO'],\n            ['name' => 'Nakhon Luang', 'country_code' => 'TH'],\n            ['name' => 'Pedro Munoz', 'country_code' => 'ES'],\n            ['name' => 'Rednitzhembach', 'country_code' => 'DE'],\n            ['name' => 'Passo do Sertao', 'country_code' => 'BR'],\n            ['name' => 'Harjavalta', 'country_code' => 'FI'],\n            ['name' => 'Allensbach', 'country_code' => 'DE'],\n            ['name' => 'Stanwood', 'country_code' => 'US'],\n            ['name' => 'Si Chiang Mai', 'country_code' => 'TH'],\n            ['name' => 'Noventa di Piave', 'country_code' => 'IT'],\n            ['name' => 'Augusta', 'country_code' => 'CA'],\n            ['name' => 'Hampden', 'country_code' => 'US'],\n            ['name' => 'St. Rose', 'country_code' => 'US'],\n            ['name' => 'Saint-Pierre', 'country_code' => 'FR'],\n            ['name' => 'St. Joseph', 'country_code' => 'US'],\n            ['name' => 'Borova', 'country_code' => 'UA'],\n            ['name' => 'Caicara', 'country_code' => 'BR'],\n            ['name' => 'Abersychan', 'country_code' => 'GB'],\n            ['name' => 'San Fior di Sopra', 'country_code' => 'IT'],\n            ['name' => 'Lallaing', 'country_code' => 'FR'],\n            ['name' => 'Arechavaleta', 'country_code' => 'ES'],\n            ['name' => 'Sergeevka', 'country_code' => 'KZ'],\n            ['name' => 'Crumlin', 'country_code' => 'GB'],\n            ['name' => 'Hudsonville', 'country_code' => 'US'],\n            ['name' => 'Saint-Julien-de-Concelles', 'country_code' => 'FR'],\n            ['name' => 'Chemille', 'country_code' => 'FR'],\n            ['name' => 'Ebern', 'country_code' => 'DE'],\n            ['name' => 'Indaiabira', 'country_code' => 'BR'],\n            ['name' => 'San Antonino Monteverde', 'country_code' => 'MX'],\n            ['name' => 'Claygate', 'country_code' => 'GB'],\n            ['name' => 'Tall Tamr', 'country_code' => 'SY'],\n            ['name' => 'Spring Hill', 'country_code' => 'US'],\n            ['name' => 'Philadelphia', 'country_code' => 'US'],\n            ['name' => 'Chalastra', 'country_code' => 'GR'],\n            ['name' => 'Monteiropolis', 'country_code' => 'BR'],\n            ['name' => 'Bellbrook', 'country_code' => 'US'],\n            ['name' => 'Mexia', 'country_code' => 'US'],\n            ['name' => 'Frankfort', 'country_code' => 'US'],\n            ['name' => 'Kenwood', 'country_code' => 'US'],\n            ['name' => 'Middleborough Center', 'country_code' => 'US'],\n            ['name' => 'Montoir-de-Bretagne', 'country_code' => 'FR'],\n            ['name' => 'Iwye', 'country_code' => 'BY'],\n            ['name' => 'Mantua', 'country_code' => 'US'],\n            ['name' => 'Zbaszyn', 'country_code' => 'PL'],\n            ['name' => 'Portalegre', 'country_code' => 'BR'],\n            ['name' => 'Mourenx', 'country_code' => 'FR'],\n            ['name' => 'Makawao', 'country_code' => 'US'],\n            ['name' => 'Frankstown', 'country_code' => 'US'],\n            ['name' => 'Seymour', 'country_code' => 'AU'],\n            ['name' => 'Gibsonville', 'country_code' => 'US'],\n            ['name' => 'Parsberg', 'country_code' => 'DE'],\n            ['name' => 'Elzach', 'country_code' => 'DE'],\n            ['name' => 'Dade City', 'country_code' => 'US'],\n            ['name' => 'Fresia', 'country_code' => 'CL'],\n            ['name' => 'Duba-Yurt', 'country_code' => 'RU'],\n            ['name' => 'Cuincy', 'country_code' => 'FR'],\n            ['name' => 'Caraa', 'country_code' => 'BR'],\n            ['name' => 'Nortorf', 'country_code' => 'DE'],\n            ['name' => 'La Gaude', 'country_code' => 'FR'],\n            ['name' => 'Puslinch', 'country_code' => 'CA'],\n            ['name' => 'Schesslitz', 'country_code' => 'DE'],\n            ['name' => 'Forte dei Marmi', 'country_code' => 'IT'],\n            ['name' => 'Middlesex', 'country_code' => 'US'],\n            ['name' => 'Red Chute', 'country_code' => 'US'],\n            ['name' => 'Yssingeaux', 'country_code' => 'FR'],\n            ['name' => 'Pogoanele', 'country_code' => 'RO'],\n            ['name' => 'Lavrio', 'country_code' => 'GR'],\n            ['name' => 'Village St. George', 'country_code' => 'US'],\n            ['name' => 'Winooski', 'country_code' => 'US'],\n            ['name' => 'Alvaiazere', 'country_code' => 'PT'],\n            ['name' => 'Morciano di Romagna', 'country_code' => 'IT'],\n            ['name' => 'Rudno', 'country_code' => 'UA'],\n            ['name' => 'Belem do Brejo do Cruz', 'country_code' => 'BR'],\n            ['name' => 'Whaley Bridge', 'country_code' => 'GB'],\n            ['name' => 'Kuklen', 'country_code' => 'BG'],\n            ['name' => 'Bourg-Saint-Andeol', 'country_code' => 'FR'],\n            ['name' => 'Wriezen', 'country_code' => 'DE'],\n            ['name' => 'Matuguinao', 'country_code' => 'PH'],\n            ['name' => 'Maxatawny', 'country_code' => 'US'],\n            ['name' => 'Zapotitlan', 'country_code' => 'MX'],\n            ['name' => 'Coeymans', 'country_code' => 'US'],\n            ['name' => 'Manciano', 'country_code' => 'IT'],\n            ['name' => 'Sturry', 'country_code' => 'GB'],\n            ['name' => 'Rabaul', 'country_code' => 'PG'],\n            ['name' => 'Nazare do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Prestice', 'country_code' => 'CZ'],\n            ['name' => 'Campo Largo', 'country_code' => 'BR'],\n            ['name' => 'Emmering', 'country_code' => 'DE'],\n            ['name' => 'Santa Luzia do Norte', 'country_code' => 'BR'],\n            ['name' => 'Valley Center', 'country_code' => 'US'],\n            ['name' => 'Tyrvaa', 'country_code' => 'FI'],\n            ['name' => 'Castiglione della Pescaia', 'country_code' => 'IT'],\n            ['name' => 'Luisiana', 'country_code' => 'BR'],\n            ['name' => 'Vila Nova da Barquinha', 'country_code' => 'PT'],\n            ['name' => 'Menziken', 'country_code' => 'CH'],\n            ['name' => 'Cannington', 'country_code' => 'AU'],\n            ['name' => 'Enkenbach-Alsenborn', 'country_code' => 'DE'],\n            ['name' => 'Santo Domingo de Guzman', 'country_code' => 'SV'],\n            ['name' => 'Umatilla', 'country_code' => 'US'],\n            ['name' => 'Cehu Silvaniei', 'country_code' => 'RO'],\n            ['name' => 'Oak Grove', 'country_code' => 'US'],\n            ['name' => 'Strasburg', 'country_code' => 'US'],\n            ['name' => 'Wauchope', 'country_code' => 'AU'],\n            ['name' => 'Vanrhynsdorp', 'country_code' => 'ZA'],\n            ['name' => 'Geneva', 'country_code' => 'US'],\n            ['name' => 'Klichaw', 'country_code' => 'BY'],\n            ['name' => 'Menucourt', 'country_code' => 'FR'],\n            ['name' => 'Namborn', 'country_code' => 'DE'],\n            ['name' => 'Bardowick', 'country_code' => 'DE'],\n            ['name' => 'Immenhausen', 'country_code' => 'DE'],\n            ['name' => 'Gau-Algesheim', 'country_code' => 'DE'],\n            ['name' => 'Whiteville', 'country_code' => 'US'],\n            ['name' => 'Novolakskoye', 'country_code' => 'RU'],\n            ['name' => 'Derry', 'country_code' => 'US'],\n            ['name' => 'Whitchurch', 'country_code' => 'GB'],\n            ['name' => 'Freyung', 'country_code' => 'DE'],\n            ['name' => 'Manuel Viana', 'country_code' => 'BR'],\n            ['name' => 'Vila Nova de Foz Coa', 'country_code' => 'PT'],\n            ['name' => 'University of California-Davis', 'country_code' => 'US'],\n            ['name' => 'Belmont', 'country_code' => 'US'],\n            ['name' => 'Serignan', 'country_code' => 'FR'],\n            ['name' => 'Nailsworth', 'country_code' => 'GB'],\n            ['name' => 'Soata', 'country_code' => 'CO'],\n            ['name' => 'Farnham Royal', 'country_code' => 'GB'],\n            ['name' => 'Ephraim', 'country_code' => 'US'],\n            ['name' => 'Buffalo', 'country_code' => 'US'],\n            ['name' => 'Campagna Lupia', 'country_code' => 'IT'],\n            ['name' => 'Karpenisi', 'country_code' => 'GR'],\n            ['name' => 'Santo Antonio do Retiro', 'country_code' => 'BR'],\n            ['name' => 'Cavle', 'country_code' => 'HR'],\n            ['name' => 'Ruddington', 'country_code' => 'GB'],\n            ['name' => 'Heringen', 'country_code' => 'DE'],\n            ['name' => 'Lochbuie', 'country_code' => 'US'],\n            ['name' => 'North Springfield', 'country_code' => 'US'],\n            ['name' => 'Faringdon', 'country_code' => 'GB'],\n            ['name' => 'Torreperogil', 'country_code' => 'ES'],\n            ['name' => 'Teteghem', 'country_code' => 'FR'],\n            ['name' => 'Pfalzgrafenweiler', 'country_code' => 'DE'],\n            ['name' => 'Dacice', 'country_code' => 'CZ'],\n            ['name' => 'Rosales', 'country_code' => 'MX'],\n            ['name' => 'Briton Ferry', 'country_code' => 'GB'],\n            ['name' => 'Lakhdenpokhya', 'country_code' => 'RU'],\n            ['name' => 'Soultz-Haut-Rhin', 'country_code' => 'FR'],\n            ['name' => 'Uddingston', 'country_code' => 'GB'],\n            ['name' => 'Longboat Key', 'country_code' => 'US'],\n            ['name' => 'Saint-Bonnet-de-Mure', 'country_code' => 'FR'],\n            ['name' => 'Taga', 'country_code' => 'JP'],\n            ['name' => 'Tseri', 'country_code' => 'CY'],\n            ['name' => 'Buena Vista', 'country_code' => 'US'],\n            ['name' => 'Dahlonega', 'country_code' => 'US'],\n            ['name' => 'Cavezzo', 'country_code' => 'IT'],\n            ['name' => 'Bourg-Saint-Maurice', 'country_code' => 'FR'],\n            ['name' => 'Montecassiano', 'country_code' => 'IT'],\n            ['name' => 'Nebraska City', 'country_code' => 'US'],\n            ['name' => 'Cordignano', 'country_code' => 'IT'],\n            ['name' => 'Hiraizumi', 'country_code' => 'JP'],\n            ['name' => 'Lymanske', 'country_code' => 'UA'],\n            ['name' => 'Konigsbronn', 'country_code' => 'DE'],\n            ['name' => 'Hardeeville', 'country_code' => 'US'],\n            ['name' => 'Connellsville', 'country_code' => 'US'],\n            ['name' => 'Novafeltria', 'country_code' => 'IT'],\n            ['name' => 'Torrington', 'country_code' => 'US'],\n            ['name' => 'Castro Verde', 'country_code' => 'PT'],\n            ['name' => 'Cassis', 'country_code' => 'FR'],\n            ['name' => 'Quesnoy-sur-Deule', 'country_code' => 'FR'],\n            ['name' => 'Helensburgh', 'country_code' => 'AU'],\n            ['name' => 'New Cumberland', 'country_code' => 'US'],\n            ['name' => 'Putzbrunn', 'country_code' => 'DE'],\n            ['name' => 'Nyrany', 'country_code' => 'CZ'],\n            ['name' => 'Saint-Macaire-en-Mauges', 'country_code' => 'FR'],\n            ['name' => 'Pompey', 'country_code' => 'US'],\n            ['name' => 'Pinehurst', 'country_code' => 'US'],\n            ['name' => 'Altofts', 'country_code' => 'GB'],\n            ['name' => 'Cristalandia', 'country_code' => 'BR'],\n            ['name' => 'Huron', 'country_code' => 'US'],\n            ['name' => 'Beauport', 'country_code' => 'CA'],\n            ['name' => 'Petropavlovka', 'country_code' => 'RU'],\n            ['name' => 'Yass', 'country_code' => 'AU'],\n            ['name' => 'Quiliano', 'country_code' => 'IT'],\n            ['name' => 'Alta Sierra', 'country_code' => 'US'],\n            ['name' => 'Hitzendorf', 'country_code' => 'AT'],\n            ['name' => 'Mertola', 'country_code' => 'PT'],\n            ['name' => 'Wagenfeld', 'country_code' => 'DE'],\n            ['name' => 'Terras de Bouro', 'country_code' => 'PT'],\n            ['name' => 'Northridge', 'country_code' => 'US'],\n            ['name' => 'Moab', 'country_code' => 'US'],\n            ['name' => 'Gluszyca', 'country_code' => 'PL'],\n            ['name' => 'Ajuricaba', 'country_code' => 'BR'],\n            ['name' => 'Arpino', 'country_code' => 'IT'],\n            ['name' => 'Wildwood', 'country_code' => 'US'],\n            ['name' => 'New Sewickley', 'country_code' => 'US'],\n            ['name' => 'Nuporanga', 'country_code' => 'BR'],\n            ['name' => 'Baywood', 'country_code' => 'US'],\n            ['name' => 'Cupcini', 'country_code' => 'MD'],\n            ['name' => 'Desterro de Entre Rios', 'country_code' => 'BR'],\n            ['name' => 'Sobeslav', 'country_code' => 'CZ'],\n            ['name' => 'Cotgrave', 'country_code' => 'GB'],\n            ['name' => 'Northport', 'country_code' => 'US'],\n            ['name' => 'Ralston', 'country_code' => 'US'],\n            ['name' => 'Santana da Vargem', 'country_code' => 'BR'],\n            ['name' => 'Sedziszow Malopolski', 'country_code' => 'PL'],\n            ['name' => 'Bardolino', 'country_code' => 'IT'],\n            ['name' => 'Finestrat', 'country_code' => 'ES'],\n            ['name' => 'Tautii Magherus', 'country_code' => 'RO'],\n            ['name' => 'Madison', 'country_code' => 'US'],\n            ['name' => 'Tanglewilde', 'country_code' => 'US'],\n            ['name' => 'Lengenfeld', 'country_code' => 'DE'],\n            ['name' => 'Salles', 'country_code' => 'FR'],\n            ['name' => 'Montelabbate', 'country_code' => 'IT'],\n            ['name' => 'Ormond-by-the-Sea', 'country_code' => 'US'],\n            ['name' => 'Wawayanda', 'country_code' => 'US'],\n            ['name' => 'Jaraguari', 'country_code' => 'BR'],\n            ['name' => 'Delphos', 'country_code' => 'US'],\n            ['name' => 'Stevensville', 'country_code' => 'US'],\n            ['name' => 'Lihue', 'country_code' => 'US'],\n            ['name' => 'Gatton', 'country_code' => 'AU'],\n            ['name' => 'North Berwick', 'country_code' => 'GB'],\n            ['name' => 'Hasparren', 'country_code' => 'FR'],\n            ['name' => 'Murillo', 'country_code' => 'US'],\n            ['name' => 'Uznach', 'country_code' => 'CH'],\n            ['name' => 'Frielendorf', 'country_code' => 'DE'],\n            ['name' => 'Wissmar', 'country_code' => 'DE'],\n            ['name' => 'Hinte', 'country_code' => 'DE'],\n            ['name' => 'Cernobbio', 'country_code' => 'IT'],\n            ['name' => 'St. Louis', 'country_code' => 'US'],\n            ['name' => 'Saint-Remi', 'country_code' => 'CA'],\n            ['name' => 'St. Marys', 'country_code' => 'CA'],\n            ['name' => 'Valognes', 'country_code' => 'FR'],\n            ['name' => 'Gerolzhofen', 'country_code' => 'DE'],\n            ['name' => 'Naka', 'country_code' => 'JP'],\n            ['name' => 'Muxton', 'country_code' => 'GB'],\n            ['name' => 'Hobart', 'country_code' => 'US'],\n            ['name' => 'Douar Drissiine', 'country_code' => 'MA'],\n            ['name' => 'Montalbano Ionico', 'country_code' => 'IT'],\n            ['name' => 'Tona', 'country_code' => 'CO'],\n            ['name' => 'Starokucherganovka', 'country_code' => 'RU'],\n            ['name' => 'Pleasantville', 'country_code' => 'US'],\n            ['name' => 'Saerbeck', 'country_code' => 'DE'],\n            ['name' => 'Neptune Beach', 'country_code' => 'US'],\n            ['name' => 'Annweiler am Trifels', 'country_code' => 'DE'],\n            ['name' => 'Suce-sur-Erdre', 'country_code' => 'FR'],\n            ['name' => 'Ash Vale', 'country_code' => 'GB'],\n            ['name' => 'Shyriaieve', 'country_code' => 'UA'],\n            ['name' => 'Almeida', 'country_code' => 'PT'],\n            ['name' => 'Othis', 'country_code' => 'FR'],\n            ['name' => 'Crystal City', 'country_code' => 'US'],\n            ['name' => 'Antonina do Norte', 'country_code' => 'BR'],\n            ['name' => 'Gioiosa Ionica', 'country_code' => 'IT'],\n            ['name' => 'Saint-Remy', 'country_code' => 'FR'],\n            ['name' => 'Tuntenhausen', 'country_code' => 'DE'],\n            ['name' => 'Koshekhabl', 'country_code' => 'RU'],\n            ['name' => 'Saint-Jean-d Angely', 'country_code' => 'FR'],\n            ['name' => 'Engenheiro Navarro', 'country_code' => 'BR'],\n            ['name' => 'Colipa', 'country_code' => 'MX'],\n            ['name' => 'Guidoval', 'country_code' => 'BR'],\n            ['name' => 'Union Grove', 'country_code' => 'US'],\n            ['name' => 'Thal', 'country_code' => 'CH'],\n            ['name' => 'Lichtenwalde', 'country_code' => 'DE'],\n            ['name' => 'Absam', 'country_code' => 'AT'],\n            ['name' => 'San Vicente de Mont-Alt', 'country_code' => 'ES'],\n            ['name' => 'Reduto', 'country_code' => 'BR'],\n            ['name' => 'Busti', 'country_code' => 'US'],\n            ['name' => 'Cubati', 'country_code' => 'BR'],\n            ['name' => 'Kapoeta', 'country_code' => 'SS'],\n            ['name' => 'Grove', 'country_code' => 'GB'],\n            ['name' => 'Jussiape', 'country_code' => 'BR'],\n            ['name' => 'Chianciano Terme', 'country_code' => 'IT'],\n            ['name' => 'Elin Pelin', 'country_code' => 'BG'],\n            ['name' => 'Ouardana', 'country_code' => 'MA'],\n            ['name' => 'Bernau am Chiemsee', 'country_code' => 'DE'],\n            ['name' => 'Fordingbridge', 'country_code' => 'GB'],\n            ['name' => 'Richland', 'country_code' => 'US'],\n            ['name' => 'Bamnet Narong', 'country_code' => 'TH'],\n            ['name' => 'Bedford', 'country_code' => 'US'],\n            ['name' => 'Belle Isle', 'country_code' => 'US'],\n            ['name' => 'Poninka', 'country_code' => 'UA'],\n            ['name' => 'Immenstaad am Bodensee', 'country_code' => 'DE'],\n            ['name' => 'Woodstock', 'country_code' => 'US'],\n            ['name' => 'Vazzola', 'country_code' => 'IT'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Cagnano Varano', 'country_code' => 'IT'],\n            ['name' => 'Collinsville', 'country_code' => 'US'],\n            ['name' => 'Willow Oak', 'country_code' => 'US'],\n            ['name' => 'Lith', 'country_code' => 'NL'],\n            ['name' => 'Chipping Ongar', 'country_code' => 'GB'],\n            ['name' => 'Emmitsburg', 'country_code' => 'US'],\n            ['name' => 'Drayton Valley', 'country_code' => 'CA'],\n            ['name' => 'Sao Jose de Uba', 'country_code' => 'BR'],\n            ['name' => 'Willows', 'country_code' => 'US'],\n            ['name' => 'Parkville', 'country_code' => 'US'],\n            ['name' => 'Roosevelt', 'country_code' => 'US'],\n            ['name' => 'East Hills', 'country_code' => 'US'],\n            ['name' => 'Pontremoli', 'country_code' => 'IT'],\n            ['name' => 'Tomatlan', 'country_code' => 'MX'],\n            ['name' => 'Regalbuto', 'country_code' => 'IT'],\n            ['name' => 'Acton', 'country_code' => 'US'],\n            ['name' => 'Rockport', 'country_code' => 'US'],\n            ['name' => 'Saint-Pathus', 'country_code' => 'FR'],\n            ['name' => 'Dingelstadt', 'country_code' => 'DE'],\n            ['name' => 'La Feria', 'country_code' => 'US'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Darganata', 'country_code' => 'TM'],\n            ['name' => 'Wolfschlugen', 'country_code' => 'DE'],\n            ['name' => 'Kurri Kurri', 'country_code' => 'AU'],\n            ['name' => 'Rovello Porro', 'country_code' => 'IT'],\n            ['name' => 'Stavelot', 'country_code' => 'BE'],\n            ['name' => 'Cornebarrieu', 'country_code' => 'FR'],\n            ['name' => 'Ponoka', 'country_code' => 'CA'],\n            ['name' => 'West Byfleet', 'country_code' => 'GB'],\n            ['name' => 'Steinenbronn', 'country_code' => 'DE'],\n            ['name' => 'Krasnogvardeyskoye', 'country_code' => 'RU'],\n            ['name' => 'Rivergaro', 'country_code' => 'IT'],\n            ['name' => 'Varallo', 'country_code' => 'IT'],\n            ['name' => 'Tappan', 'country_code' => 'US'],\n            ['name' => 'Roccadaspide', 'country_code' => 'IT'],\n            ['name' => 'Pottendorf', 'country_code' => 'AT'],\n            ['name' => 'Cochituate', 'country_code' => 'US'],\n            ['name' => 'Ferrol', 'country_code' => 'PH'],\n            ['name' => 'Amarkantak', 'country_code' => 'IN'],\n            ['name' => 'St. Johnsbury', 'country_code' => 'US'],\n            ['name' => 'Saint-Just-sur-Loire', 'country_code' => 'FR'],\n            ['name' => 'Tlalnepantla', 'country_code' => 'MX'],\n            ['name' => 'Yakshur-Bod ya', 'country_code' => 'RU'],\n            ['name' => 'Pelluhue', 'country_code' => 'CL'],\n            ['name' => 'Zacualpan', 'country_code' => 'MX'],\n            ['name' => 'Massanet de la Selva', 'country_code' => 'ES'],\n            ['name' => 'Durham', 'country_code' => 'US'],\n            ['name' => 'Whitinsville', 'country_code' => 'US'],\n            ['name' => 'Labrador City', 'country_code' => 'CA'],\n            ['name' => 'Feignies', 'country_code' => 'FR'],\n            ['name' => 'Batesville', 'country_code' => 'US'],\n            ['name' => 'Altavilla Silentina', 'country_code' => 'IT'],\n            ['name' => 'Neckartenzlingen', 'country_code' => 'DE'],\n            ['name' => 'Lake Lorraine', 'country_code' => 'US'],\n            ['name' => 'Chichimila', 'country_code' => 'MX'],\n            ['name' => 'Coundon', 'country_code' => 'GB'],\n            ['name' => 'Ikaalinen', 'country_code' => 'FI'],\n            ['name' => 'Spino d Adda', 'country_code' => 'IT'],\n            ['name' => 'Seward', 'country_code' => 'US'],\n            ['name' => 'Midland Park', 'country_code' => 'US'],\n            ['name' => 'Lebanon', 'country_code' => 'US'],\n            ['name' => 'Beaumont', 'country_code' => 'BE'],\n            ['name' => 'Moapa Valley', 'country_code' => 'US'],\n            ['name' => 'Middletown', 'country_code' => 'US'],\n            ['name' => 'Algarrobo', 'country_code' => 'ES'],\n            ['name' => 'Faverges', 'country_code' => 'FR'],\n            ['name' => 'Ensdorf', 'country_code' => 'DE'],\n            ['name' => 'Huescar', 'country_code' => 'ES'],\n            ['name' => 'Rives', 'country_code' => 'FR'],\n            ['name' => 'Asnes', 'country_code' => 'NO'],\n            ['name' => 'West Mersea', 'country_code' => 'GB'],\n            ['name' => 'Camerota', 'country_code' => 'IT'],\n            ['name' => 'Campli', 'country_code' => 'IT'],\n            ['name' => 'Lemwerder', 'country_code' => 'DE'],\n            ['name' => 'Klawer', 'country_code' => 'ZA'],\n            ['name' => 'Fukaura', 'country_code' => 'JP'],\n            ['name' => 'Gioiosa Marea', 'country_code' => 'IT'],\n            ['name' => 'Durcal', 'country_code' => 'ES'],\n            ['name' => 'Tarabai', 'country_code' => 'BR'],\n            ['name' => 'Corbin', 'country_code' => 'US'],\n            ['name' => 'Ferlach', 'country_code' => 'AT'],\n            ['name' => 'Marathonas', 'country_code' => 'GR'],\n            ['name' => 'Arnoldstein', 'country_code' => 'AT'],\n            ['name' => 'Skaneateles', 'country_code' => 'US'],\n            ['name' => 'Cooma', 'country_code' => 'AU'],\n            ['name' => 'Jackson', 'country_code' => 'US'],\n            ['name' => 'Riverdale Park', 'country_code' => 'US'],\n            ['name' => 'Shenango', 'country_code' => 'US'],\n            ['name' => 'Donnacona', 'country_code' => 'CA'],\n            ['name' => 'Wurenlos', 'country_code' => 'CH'],\n            ['name' => 'Fuentes de Andalucia', 'country_code' => 'ES'],\n            ['name' => 'Ugine', 'country_code' => 'FR'],\n            ['name' => 'Mimizan', 'country_code' => 'FR'],\n            ['name' => 'Knoxville', 'country_code' => 'US'],\n            ['name' => 'Swanzey', 'country_code' => 'US'],\n            ['name' => 'Saint-Jean-Bonnefonds', 'country_code' => 'FR'],\n            ['name' => 'Hedon', 'country_code' => 'GB'],\n            ['name' => 'Polykastro', 'country_code' => 'GR'],\n            ['name' => 'West Bridgewater', 'country_code' => 'US'],\n            ['name' => 'Grabs', 'country_code' => 'CH'],\n            ['name' => 'Pegognaga', 'country_code' => 'IT'],\n            ['name' => 'Hanga Roa', 'country_code' => 'CL'],\n            ['name' => 'Cappeln', 'country_code' => 'DE'],\n            ['name' => 'Roda de Bara', 'country_code' => 'ES'],\n            ['name' => 'Feldkirchen bei Graz', 'country_code' => 'AT'],\n            ['name' => 'Cassolnovo', 'country_code' => 'IT'],\n            ['name' => 'Unionville', 'country_code' => 'US'],\n            ['name' => 'Gunnison', 'country_code' => 'US'],\n            ['name' => 'Ibiraiaras', 'country_code' => 'BR'],\n            ['name' => 'Wiesendangen', 'country_code' => 'CH'],\n            ['name' => 'Church Gresley', 'country_code' => 'GB'],\n            ['name' => 'K ajaran', 'country_code' => 'AM'],\n            ['name' => 'Spezzano Albanese', 'country_code' => 'IT'],\n            ['name' => 'Carhue', 'country_code' => 'AR'],\n            ['name' => 'Merzhausen', 'country_code' => 'DE'],\n            ['name' => 'Conewago', 'country_code' => 'US'],\n            ['name' => 'Santi Cosma e Damiano', 'country_code' => 'IT'],\n            ['name' => 'Cisano Bergamasco', 'country_code' => 'IT'],\n            ['name' => 'San Vicente Pacaya', 'country_code' => 'GT'],\n            ['name' => 'La Grandeza', 'country_code' => 'MX'],\n            ['name' => 'Souk el Had', 'country_code' => 'DZ'],\n            ['name' => 'Morrow', 'country_code' => 'US'],\n            ['name' => 'Gueugnon', 'country_code' => 'FR'],\n            ['name' => 'Maasland', 'country_code' => 'NL'],\n            ['name' => 'Atlantida', 'country_code' => 'UY'],\n            ['name' => 'Abel Figueiredo', 'country_code' => 'BR'],\n            ['name' => 'Semenovka', 'country_code' => 'RU'],\n            ['name' => 'Grazzanise', 'country_code' => 'IT'],\n            ['name' => 'Southgate', 'country_code' => 'CA'],\n            ['name' => 'Belzyce', 'country_code' => 'PL'],\n            ['name' => 'Downside', 'country_code' => 'GB'],\n            ['name' => 'Sapri', 'country_code' => 'IT'],\n            ['name' => 'Alfdorf', 'country_code' => 'DE'],\n            ['name' => 'Sandston', 'country_code' => 'US'],\n            ['name' => 'Cles', 'country_code' => 'IT'],\n            ['name' => 'Vodnany', 'country_code' => 'CZ'],\n            ['name' => 'Socha', 'country_code' => 'CO'],\n            ['name' => 'Pembroke', 'country_code' => 'US'],\n            ['name' => 'Kato Achaia', 'country_code' => 'GR'],\n            ['name' => 'Earl', 'country_code' => 'US'],\n            ['name' => 'Trino', 'country_code' => 'IT'],\n            ['name' => 'Roccarainola', 'country_code' => 'IT'],\n            ['name' => 'Belle Plaine', 'country_code' => 'US'],\n            ['name' => 'Baricella', 'country_code' => 'IT'],\n            ['name' => 'Santiago', 'country_code' => 'MX'],\n            ['name' => 'Antonio Martins', 'country_code' => 'BR'],\n            ['name' => 'Sobotka', 'country_code' => 'PL'],\n            ['name' => 'Nuevo', 'country_code' => 'US'],\n            ['name' => 'Wimereux', 'country_code' => 'FR'],\n            ['name' => 'Enoch', 'country_code' => 'US'],\n            ['name' => 'Caulonia', 'country_code' => 'IT'],\n            ['name' => 'Gerbstedt', 'country_code' => 'DE'],\n            ['name' => 'Nuriootpa', 'country_code' => 'AU'],\n            ['name' => 'Rodalben', 'country_code' => 'DE'],\n            ['name' => 'Cajvana', 'country_code' => 'RO'],\n            ['name' => 'Pedro Avelino', 'country_code' => 'BR'],\n            ['name' => 'Tregunc', 'country_code' => 'FR'],\n            ['name' => 'Pacific', 'country_code' => 'US'],\n            ['name' => 'McNab/Braeside', 'country_code' => 'CA'],\n            ['name' => 'Dronero', 'country_code' => 'IT'],\n            ['name' => 'Puilboreau', 'country_code' => 'FR'],\n            ['name' => 'Vernole', 'country_code' => 'IT'],\n            ['name' => 'Grubbenvorst', 'country_code' => 'NL'],\n            ['name' => 'Utuado', 'country_code' => 'PR'],\n            ['name' => 'Canfield', 'country_code' => 'US'],\n            ['name' => 'Eugendorf', 'country_code' => 'AT'],\n            ['name' => 'Brioude', 'country_code' => 'FR'],\n            ['name' => 'Independence', 'country_code' => 'US'],\n            ['name' => 'Rouadi', 'country_code' => 'MA'],\n            ['name' => 'Elsa', 'country_code' => 'US'],\n            ['name' => 'Haapavesi', 'country_code' => 'FI'],\n            ['name' => 'Assoul', 'country_code' => 'MA'],\n            ['name' => 'Centerville', 'country_code' => 'US'],\n            ['name' => 'Commerce', 'country_code' => 'US'],\n            ['name' => 'Murgeni', 'country_code' => 'RO'],\n            ['name' => 'Scorrano', 'country_code' => 'IT'],\n            ['name' => 'General Toshevo', 'country_code' => 'BG'],\n            ['name' => 'Austell', 'country_code' => 'US'],\n            ['name' => 'Faro', 'country_code' => 'BR'],\n            ['name' => 'Moncofar', 'country_code' => 'ES'],\n            ['name' => 'Montfort-sur-Meu', 'country_code' => 'FR'],\n            ['name' => 'Jettingen-Scheppach', 'country_code' => 'DE'],\n            ['name' => 'Jacuipe', 'country_code' => 'BR'],\n            ['name' => 'Urbania', 'country_code' => 'IT'],\n            ['name' => 'Vipiteno', 'country_code' => 'IT'],\n            ['name' => 'Centallo', 'country_code' => 'IT'],\n            ['name' => 'Esher', 'country_code' => 'GB'],\n            ['name' => 'Grasbrunn', 'country_code' => 'DE'],\n            ['name' => 'Venegono Inferiore', 'country_code' => 'IT'],\n            ['name' => 'Huautepec', 'country_code' => 'MX'],\n            ['name' => 'Fontanellato', 'country_code' => 'IT'],\n            ['name' => 'Hartha', 'country_code' => 'DE'],\n            ['name' => 'Cerrik', 'country_code' => 'AL'],\n            ['name' => 'Dois Irmaos do Tocantins', 'country_code' => 'BR'],\n            ['name' => 'Les Arcs', 'country_code' => 'FR'],\n            ['name' => 'Parkville', 'country_code' => 'US'],\n            ['name' => 'East Vincent', 'country_code' => 'US'],\n            ['name' => 'Macdonald', 'country_code' => 'CA'],\n            ['name' => 'Durgeli', 'country_code' => 'RU'],\n            ['name' => 'Schwarzenbach an der Saale', 'country_code' => 'DE'],\n            ['name' => 'Hillsborough', 'country_code' => 'US'],\n            ['name' => 'Myadzyel', 'country_code' => 'BY'],\n            ['name' => 'Bagneres-de-Bigorre', 'country_code' => 'FR'],\n            ['name' => 'Capellades', 'country_code' => 'ES'],\n            ['name' => 'Crozet', 'country_code' => 'US'],\n            ['name' => 'Chuarrancho', 'country_code' => 'GT'],\n            ['name' => 'Navarcles', 'country_code' => 'ES'],\n            ['name' => 'Cava Manara', 'country_code' => 'IT'],\n            ['name' => 'Araguacema', 'country_code' => 'BR'],\n            ['name' => 'Senas', 'country_code' => 'FR'],\n            ['name' => 'Champagne-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Pollock Pines', 'country_code' => 'US'],\n            ['name' => 'Sassoferrato', 'country_code' => 'IT'],\n            ['name' => 'Sao Miguel de Taipu', 'country_code' => 'BR'],\n            ['name' => 'Outokumpu', 'country_code' => 'FI'],\n            ['name' => 'Gilford', 'country_code' => 'US'],\n            ['name' => 'Magaramkent', 'country_code' => 'RU'],\n            ['name' => 'Laurentino', 'country_code' => 'BR'],\n            ['name' => 'Zibido San Giacomo', 'country_code' => 'IT'],\n            ['name' => 'Tyrone', 'country_code' => 'US'],\n            ['name' => 'Larose', 'country_code' => 'US'],\n            ['name' => 'Lanton', 'country_code' => 'FR'],\n            ['name' => 'Le Perray-en-Yvelines', 'country_code' => 'FR'],\n            ['name' => 'Lawrenceville', 'country_code' => 'US'],\n            ['name' => 'Fundulea', 'country_code' => 'RO'],\n            ['name' => 'Murston', 'country_code' => 'GB'],\n            ['name' => 'Eu', 'country_code' => 'FR'],\n            ['name' => 'Waging am See', 'country_code' => 'DE'],\n            ['name' => 'Brook Highland', 'country_code' => 'US'],\n            ['name' => 'Saint-Mandrier-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Baie-Saint-Paul', 'country_code' => 'CA'],\n            ['name' => 'Onishi', 'country_code' => 'JP'],\n            ['name' => 'Ayotzintepec', 'country_code' => 'MX'],\n            ['name' => 'Bo Phloi', 'country_code' => 'TH'],\n            ['name' => 'Cottage Grove', 'country_code' => 'US'],\n            ['name' => 'Pleurtuit', 'country_code' => 'FR'],\n            ['name' => 'Sains-en-Gohelle', 'country_code' => 'FR'],\n            ['name' => 'De Soto', 'country_code' => 'US'],\n            ['name' => 'San Benedetto Po', 'country_code' => 'IT'],\n            ['name' => 'Palmyra', 'country_code' => 'US'],\n            ['name' => 'Sao Tome das Letras', 'country_code' => 'BR'],\n            ['name' => 'Bouchemaine', 'country_code' => 'FR'],\n            ['name' => 'Nappanee', 'country_code' => 'US'],\n            ['name' => 'Merritt', 'country_code' => 'CA'],\n            ['name' => 'Treze de Maio', 'country_code' => 'BR'],\n            ['name' => 'Atherton', 'country_code' => 'US'],\n            ['name' => 'Bellante', 'country_code' => 'IT'],\n            ['name' => 'Stryn', 'country_code' => 'NO'],\n            ['name' => 'Nienhagen', 'country_code' => 'DE'],\n            ['name' => 'Delfinopolis', 'country_code' => 'BR'],\n            ['name' => 'Saint-Rambert-d Albon', 'country_code' => 'FR'],\n            ['name' => 'Bluewater', 'country_code' => 'CA'],\n            ['name' => 'Krasnyy Klyuch', 'country_code' => 'RU'],\n            ['name' => 'Nibley', 'country_code' => 'US'],\n            ['name' => 'Dalcahue', 'country_code' => 'CL'],\n            ['name' => 'Kingsland', 'country_code' => 'US'],\n            ['name' => 'Walled Lake', 'country_code' => 'US'],\n            ['name' => 'Santana dos Garrotes', 'country_code' => 'BR'],\n            ['name' => 'Stow', 'country_code' => 'US'],\n            ['name' => 'Machacalis', 'country_code' => 'BR'],\n            ['name' => 'Manduel', 'country_code' => 'FR'],\n            ['name' => 'Buttigliera Alta', 'country_code' => 'IT'],\n            ['name' => 'East Zorra-Tavistock', 'country_code' => 'CA'],\n            ['name' => 'Pozzuolo del Friuli', 'country_code' => 'IT'],\n            ['name' => 'Bedminster', 'country_code' => 'US'],\n            ['name' => 'Museros', 'country_code' => 'ES'],\n            ['name' => 'Orosei', 'country_code' => 'IT'],\n            ['name' => 'San Jose de Cusmapa', 'country_code' => 'NI'],\n            ['name' => 'Porrentruy', 'country_code' => 'CH'],\n            ['name' => 'Pinhoe', 'country_code' => 'GB'],\n            ['name' => 'Holle', 'country_code' => 'DE'],\n            ['name' => 'Bednodem yanovsk', 'country_code' => 'RU'],\n            ['name' => 'Akhmeta', 'country_code' => 'GE'],\n            ['name' => 'Boavita', 'country_code' => 'CO'],\n            ['name' => 'Pantigliate', 'country_code' => 'IT'],\n            ['name' => 'Eno', 'country_code' => 'FI'],\n            ['name' => 'Salento', 'country_code' => 'CO'],\n            ['name' => 'Letavertes', 'country_code' => 'HU'],\n            ['name' => 'Winsted', 'country_code' => 'US'],\n            ['name' => 'Ko Pha-Ngan', 'country_code' => 'TH'],\n            ['name' => 'Isliam-Terek', 'country_code' => 'UA'],\n            ['name' => 'Novy Bydzov', 'country_code' => 'CZ'],\n            ['name' => 'Trelissac', 'country_code' => 'FR'],\n            ['name' => 'Sao Tomas de Aquino', 'country_code' => 'BR'],\n            ['name' => 'Chauvigny', 'country_code' => 'FR'],\n            ['name' => 'Bonne Terre', 'country_code' => 'US'],\n            ['name' => 'Live Oak', 'country_code' => 'US'],\n            ['name' => 'Attica', 'country_code' => 'US'],\n            ['name' => 'Saveni', 'country_code' => 'RO'],\n            ['name' => 'Rockville', 'country_code' => 'US'],\n            ['name' => 'Chatel-Saint-Denis', 'country_code' => 'CH'],\n            ['name' => 'Etrechy', 'country_code' => 'FR'],\n            ['name' => 'Calipatria', 'country_code' => 'US'],\n            ['name' => 'Mead', 'country_code' => 'US'],\n            ['name' => 'Green Brook', 'country_code' => 'US'],\n            ['name' => 'Novosokolniki', 'country_code' => 'RU'],\n            ['name' => 'Montellano', 'country_code' => 'ES'],\n            ['name' => 'Campomorone', 'country_code' => 'IT'],\n            ['name' => 'Salzweg', 'country_code' => 'DE'],\n            ['name' => 'Parkwood', 'country_code' => 'US'],\n            ['name' => 'Capetinga', 'country_code' => 'BR'],\n            ['name' => 'Deeping Saint James', 'country_code' => 'GB'],\n            ['name' => 'Colonia Venustiano Carranza', 'country_code' => 'MX'],\n            ['name' => 'Sedlcany', 'country_code' => 'CZ'],\n            ['name' => 'Ebermannstadt', 'country_code' => 'DE'],\n            ['name' => 'Oued Naanaa', 'country_code' => 'MA'],\n            ['name' => 'Timlilt', 'country_code' => 'MA'],\n            ['name' => 'Wallersdorf', 'country_code' => 'DE'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Russellville', 'country_code' => 'US'],\n            ['name' => 'Asciano', 'country_code' => 'IT'],\n            ['name' => 'Saint-Georges', 'country_code' => 'BE'],\n            ['name' => 'New Romney', 'country_code' => 'GB'],\n            ['name' => 'Krasnyy Chikoy', 'country_code' => 'RU'],\n            ['name' => 'Southam', 'country_code' => 'GB'],\n            ['name' => 'Eiterfeld', 'country_code' => 'DE'],\n            ['name' => 'Assebbab', 'country_code' => 'MA'],\n            ['name' => 'Naque', 'country_code' => 'BR'],\n            ['name' => 'Pinson', 'country_code' => 'US'],\n            ['name' => 'Stoneham-et-Tewkesbury', 'country_code' => 'CA'],\n            ['name' => 'Rishton', 'country_code' => 'GB'],\n            ['name' => 'Ruhpolding', 'country_code' => 'DE'],\n            ['name' => 'Gryfow Slaski', 'country_code' => 'PL'],\n            ['name' => 'Palmitinho', 'country_code' => 'BR'],\n            ['name' => 'Douar Oulad Amer', 'country_code' => 'MA'],\n            ['name' => 'Novo Areal', 'country_code' => 'BR'],\n            ['name' => 'Katlenburg-Lindau', 'country_code' => 'DE'],\n            ['name' => 'Benalup de Sidonia', 'country_code' => 'ES'],\n            ['name' => 'Selma', 'country_code' => 'US'],\n            ['name' => 'Serino', 'country_code' => 'IT'],\n            ['name' => 'Bammental', 'country_code' => 'DE'],\n            ['name' => 'Sidi Yahia Sawad', 'country_code' => 'MA'],\n            ['name' => 'Tlilapan', 'country_code' => 'MX'],\n            ['name' => 'Kupiansk', 'country_code' => 'UA'],\n            ['name' => 'Schonkirchen', 'country_code' => 'DE'],\n            ['name' => 'Amaral Ferrador', 'country_code' => 'BR'],\n            ['name' => 'Marble Falls', 'country_code' => 'US'],\n            ['name' => 'Llissa de Vall', 'country_code' => 'ES'],\n            ['name' => 'El Triunfo', 'country_code' => 'SV'],\n            ['name' => 'Monte San Vito', 'country_code' => 'IT'],\n            ['name' => 'Okhansk', 'country_code' => 'RU'],\n            ['name' => 'Bridge of Allan', 'country_code' => 'GB'],\n            ['name' => 'Montluel', 'country_code' => 'FR'],\n            ['name' => 'Erndtebruck', 'country_code' => 'DE'],\n            ['name' => 'Manoppello', 'country_code' => 'IT'],\n            ['name' => 'Ellerau', 'country_code' => 'DE'],\n            ['name' => 'Mantta', 'country_code' => 'FI'],\n            ['name' => 'Asbestos', 'country_code' => 'CA'],\n            ['name' => 'Junco do Serido', 'country_code' => 'BR'],\n            ['name' => 'Herscheid', 'country_code' => 'DE'],\n            ['name' => 'Lavrinhas', 'country_code' => 'BR'],\n            ['name' => 'Decatur', 'country_code' => 'US'],\n            ['name' => 'Fort Myers Beach', 'country_code' => 'US'],\n            ['name' => 'Theix', 'country_code' => 'FR'],\n            ['name' => 'Oberndorf bei Salzburg', 'country_code' => 'AT'],\n            ['name' => 'Dunbar', 'country_code' => 'US'],\n            ['name' => 'Mogyorod', 'country_code' => 'HU'],\n            ['name' => 'Nambu', 'country_code' => 'JP'],\n            ['name' => 'Roncoferraro', 'country_code' => 'IT'],\n            ['name' => 'Casteggio', 'country_code' => 'IT'],\n            ['name' => 'Cologny', 'country_code' => 'CH'],\n            ['name' => 'Serra Redonda', 'country_code' => 'BR'],\n            ['name' => 'Neukirchen', 'country_code' => 'DE'],\n            ['name' => 'Borgo a Mozzano', 'country_code' => 'IT'],\n            ['name' => 'Hensies', 'country_code' => 'BE'],\n            ['name' => 'Stadtroda', 'country_code' => 'DE'],\n            ['name' => 'Bom Sucesso', 'country_code' => 'BR'],\n            ['name' => 'Trith-Saint-Leger', 'country_code' => 'FR'],\n            ['name' => 'Buzias', 'country_code' => 'RO'],\n            ['name' => 'Genadendal', 'country_code' => 'ZA'],\n            ['name' => 'Byron Center', 'country_code' => 'US'],\n            ['name' => 'Homestead Meadows South', 'country_code' => 'US'],\n            ['name' => 'Portage Lakes', 'country_code' => 'US'],\n            ['name' => 'Meridianville', 'country_code' => 'US'],\n            ['name' => 'Wiernsheim', 'country_code' => 'DE'],\n            ['name' => 'Homeland', 'country_code' => 'US'],\n            ['name' => 'Osceola', 'country_code' => 'US'],\n            ['name' => 'Syracuse', 'country_code' => 'US'],\n            ['name' => 'Eberdingen', 'country_code' => 'DE'],\n            ['name' => 'Clarkson', 'country_code' => 'US'],\n            ['name' => 'Neustadt-Glewe', 'country_code' => 'DE'],\n            ['name' => 'Andreapol', 'country_code' => 'RU'],\n            ['name' => 'Borgo', 'country_code' => 'IT'],\n            ['name' => 'Chiang Kham', 'country_code' => 'TH'],\n            ['name' => 'Central de Minas', 'country_code' => 'BR'],\n            ['name' => 'Besao', 'country_code' => 'PH'],\n            ['name' => 'Guia Lopes', 'country_code' => 'BR'],\n            ['name' => 'Marshfield', 'country_code' => 'GB'],\n            ['name' => 'Flatwoods', 'country_code' => 'US'],\n            ['name' => 'Sharhorod', 'country_code' => 'UA'],\n            ['name' => 'Santa Filomena do Maranhao', 'country_code' => 'BR'],\n            ['name' => 'Ruinen', 'country_code' => 'NL'],\n            ['name' => 'Petropavlivka', 'country_code' => 'UA'],\n            ['name' => 'Segarcea', 'country_code' => 'RO'],\n            ['name' => 'Quievrain', 'country_code' => 'BE'],\n            ['name' => 'Quarrington', 'country_code' => 'GB'],\n            ['name' => 'Fair Plain', 'country_code' => 'US'],\n            ['name' => 'Gateway', 'country_code' => 'US'],\n            ['name' => 'Shibayama', 'country_code' => 'JP'],\n            ['name' => 'Naquera', 'country_code' => 'ES'],\n            ['name' => 'Mount Ivy', 'country_code' => 'US'],\n            ['name' => 'Nova Ibia', 'country_code' => 'BR'],\n            ['name' => 'Sommatino', 'country_code' => 'IT'],\n            ['name' => 'Milton-Freewater', 'country_code' => 'US'],\n            ['name' => 'Ceyrat', 'country_code' => 'FR'],\n            ['name' => 'Buttstadt', 'country_code' => 'DE'],\n            ['name' => 'Dietenheim', 'country_code' => 'DE'],\n            ['name' => 'Itteville', 'country_code' => 'FR'],\n            ['name' => 'Frouard', 'country_code' => 'FR'],\n            ['name' => 'Ichemrarn', 'country_code' => 'MA'],\n            ['name' => 'Horbranz', 'country_code' => 'AT'],\n            ['name' => 'Coppenbrugge', 'country_code' => 'DE'],\n            ['name' => 'Nyons', 'country_code' => 'FR'],\n            ['name' => 'River Park', 'country_code' => 'US'],\n            ['name' => 'Marne', 'country_code' => 'DE'],\n            ['name' => 'Sakyla', 'country_code' => 'FI'],\n            ['name' => 'Novska', 'country_code' => 'HR'],\n            ['name' => 'Huron-Kinloss', 'country_code' => 'CA'],\n            ['name' => 'Lazise', 'country_code' => 'IT'],\n            ['name' => 'Brunstatt', 'country_code' => 'FR'],\n            ['name' => 'Sausalito', 'country_code' => 'US'],\n            ['name' => 'Alecrim', 'country_code' => 'BR'],\n            ['name' => 'Martignacco', 'country_code' => 'IT'],\n            ['name' => 'Senise', 'country_code' => 'IT'],\n            ['name' => 'Periquito', 'country_code' => 'BR'],\n            ['name' => 'South Lockport', 'country_code' => 'US'],\n            ['name' => 'Chadegan', 'country_code' => 'IR'],\n            ['name' => 'Highland Heights', 'country_code' => 'US'],\n            ['name' => 'Woodlake', 'country_code' => 'US'],\n            ['name' => 'Barnesville', 'country_code' => 'US'],\n            ['name' => 'Edenkoben', 'country_code' => 'DE'],\n            ['name' => 'Bomlitz', 'country_code' => 'DE'],\n            ['name' => 'Rungis', 'country_code' => 'FR'],\n            ['name' => 'Tlapanaloya', 'country_code' => 'MX'],\n            ['name' => 'Delaware', 'country_code' => 'US'],\n            ['name' => 'Robecco sul Naviglio', 'country_code' => 'IT'],\n            ['name' => 'Altmannstein', 'country_code' => 'DE'],\n            ['name' => 'Laneuveville-devant-Nancy', 'country_code' => 'FR'],\n            ['name' => 'Ittre', 'country_code' => 'BE'],\n            ['name' => 'Kirkleatham', 'country_code' => 'GB'],\n            ['name' => 'Oliena', 'country_code' => 'IT'],\n            ['name' => 'Newbury', 'country_code' => 'US'],\n            ['name' => 'Berrien Springs', 'country_code' => 'US'],\n            ['name' => 'Mzefroune', 'country_code' => 'MA'],\n            ['name' => 'St. Helena', 'country_code' => 'US'],\n            ['name' => 'Polch', 'country_code' => 'DE'],\n            ['name' => 'Tismana', 'country_code' => 'RO'],\n            ['name' => 'Molochansk', 'country_code' => 'UA'],\n            ['name' => 'Hudson Falls', 'country_code' => 'US'],\n            ['name' => 'Ciboure', 'country_code' => 'FR'],\n            ['name' => 'Saulx-les-Chartreux', 'country_code' => 'FR'],\n            ['name' => 'Veitsbronn', 'country_code' => 'DE'],\n            ['name' => 'Sainte-Pazanne', 'country_code' => 'FR'],\n            ['name' => 'Ungheni', 'country_code' => 'RO'],\n            ['name' => 'Noble', 'country_code' => 'US'],\n            ['name' => 'Gulf Park Estates', 'country_code' => 'US'],\n            ['name' => 'Caudan', 'country_code' => 'FR'],\n            ['name' => 'Lastrup', 'country_code' => 'DE'],\n            ['name' => 'Fehraltorf', 'country_code' => 'CH'],\n            ['name' => 'Sotuta', 'country_code' => 'MX'],\n            ['name' => 'Settimo San Pietro', 'country_code' => 'IT'],\n            ['name' => 'Redondo', 'country_code' => 'PT'],\n            ['name' => 'Pancota', 'country_code' => 'RO'],\n            ['name' => 'Oak Ridge', 'country_code' => 'US'],\n            ['name' => 'Sao Bras', 'country_code' => 'BR'],\n            ['name' => 'Irai de Minas', 'country_code' => 'BR'],\n            ['name' => 'Honley', 'country_code' => 'GB'],\n            ['name' => 'Rochester', 'country_code' => 'US'],\n            ['name' => 'Mallersdorf-Pfaffenberg', 'country_code' => 'DE'],\n            ['name' => 'In Guezzam', 'country_code' => 'DZ'],\n            ['name' => 'Acigne', 'country_code' => 'FR'],\n            ['name' => 'Bothwell', 'country_code' => 'GB'],\n            ['name' => 'Albisola Marina', 'country_code' => 'IT'],\n            ['name' => 'Tumut', 'country_code' => 'AU'],\n            ['name' => 'Diepoldsau', 'country_code' => 'CH'],\n            ['name' => 'Orange City', 'country_code' => 'US'],\n            ['name' => 'Coteau-du-Lac', 'country_code' => 'CA'],\n            ['name' => 'Jussara', 'country_code' => 'BR'],\n            ['name' => 'Aigina', 'country_code' => 'GR'],\n            ['name' => 'Carnarvon', 'country_code' => 'ZA'],\n            ['name' => 'Hecklingen', 'country_code' => 'DE'],\n            ['name' => 'Kaitaia', 'country_code' => 'NZ'],\n            ['name' => 'Grassau', 'country_code' => 'DE'],\n            ['name' => 'Shinmachi', 'country_code' => 'JP'],\n            ['name' => 'Seminole', 'country_code' => 'US'],\n            ['name' => 'Moringen', 'country_code' => 'DE'],\n            ['name' => 'San Clemente', 'country_code' => 'ES'],\n            ['name' => 'Sunndalsora', 'country_code' => 'NO'],\n            ['name' => 'Piskivka', 'country_code' => 'UA'],\n            ['name' => 'Sant Agostino', 'country_code' => 'IT'],\n            ['name' => 'Meleiro', 'country_code' => 'BR'],\n            ['name' => 'Groesbeck', 'country_code' => 'US'],\n            ['name' => 'Campestre', 'country_code' => 'BR'],\n            ['name' => 'Litochoro', 'country_code' => 'GR'],\n            ['name' => 'Chabeuil', 'country_code' => 'FR'],\n            ['name' => 'Springs', 'country_code' => 'US'],\n            ['name' => 'Marksville', 'country_code' => 'US'],\n            ['name' => 'Truth or Consequences', 'country_code' => 'US'],\n            ['name' => 'Mondelange', 'country_code' => 'FR'],\n            ['name' => 'Les Essarts-le-Roi', 'country_code' => 'FR'],\n            ['name' => 'Nanteuil-les-Meaux', 'country_code' => 'FR'],\n            ['name' => 'Polessk', 'country_code' => 'RU'],\n            ['name' => 'Surgeres', 'country_code' => 'FR'],\n            ['name' => 'Summit', 'country_code' => 'US'],\n            ['name' => 'Laurium', 'country_code' => 'US'],\n            ['name' => 'Sarmasu', 'country_code' => 'RO'],\n            ['name' => 'Pignola', 'country_code' => 'IT'],\n            ['name' => 'Blythebridge', 'country_code' => 'GB'],\n            ['name' => 'Archbald', 'country_code' => 'US'],\n            ['name' => 'Busseto', 'country_code' => 'IT'],\n            ['name' => 'Neukieritzsch', 'country_code' => 'DE'],\n            ['name' => 'Providence', 'country_code' => 'US'],\n            ['name' => 'Puerto Serrano', 'country_code' => 'ES'],\n            ['name' => 'Schliersee', 'country_code' => 'DE'],\n            ['name' => 'Pinotepa de Don Luis', 'country_code' => 'MX'],\n            ['name' => 'Willis', 'country_code' => 'US'],\n            ['name' => 'Algrange', 'country_code' => 'FR'],\n            ['name' => 'Neo Karlovasi', 'country_code' => 'GR'],\n            ['name' => 'Cannonvale', 'country_code' => 'AU'],\n            ['name' => 'Zaouiat Sidi Hammou Ben Hmida', 'country_code' => 'MA'],\n            ['name' => 'Krasno nad Kysucou', 'country_code' => 'SK'],\n            ['name' => 'Gradisca d Isonzo', 'country_code' => 'IT'],\n            ['name' => 'Herbignac', 'country_code' => 'FR'],\n            ['name' => 'Eyguieres', 'country_code' => 'FR'],\n            ['name' => 'Ustaritz', 'country_code' => 'FR'],\n            ['name' => 'Formigueiro', 'country_code' => 'BR'],\n            ['name' => 'Rancho Calaveras', 'country_code' => 'US'],\n            ['name' => 'Tenamaxtlan', 'country_code' => 'MX'],\n            ['name' => 'The Blue Mountains', 'country_code' => 'CA'],\n            ['name' => 'Meopham', 'country_code' => 'GB'],\n            ['name' => 'Aridaia', 'country_code' => 'GR'],\n            ['name' => 'Tuzamapan', 'country_code' => 'MX'],\n            ['name' => 'Cerano', 'country_code' => 'IT'],\n            ['name' => 'Eston', 'country_code' => 'GB'],\n            ['name' => 'Abercynon', 'country_code' => 'GB'],\n            ['name' => 'Yarkovo', 'country_code' => 'RU'],\n            ['name' => 'Kentfield', 'country_code' => 'US'],\n            ['name' => 'Labico', 'country_code' => 'IT'],\n            ['name' => 'Salto da Divisa', 'country_code' => 'BR'],\n            ['name' => 'Limours', 'country_code' => 'FR'],\n            ['name' => 'Kiel', 'country_code' => 'US'],\n            ['name' => 'Gouverneur', 'country_code' => 'US'],\n            ['name' => 'Racari', 'country_code' => 'RO'],\n            ['name' => 'Tubinskiy', 'country_code' => 'RU'],\n            ['name' => 'Kistelek', 'country_code' => 'HU'],\n            ['name' => 'Villasor', 'country_code' => 'IT'],\n            ['name' => 'Frutigen', 'country_code' => 'CH'],\n            ['name' => 'Wigton', 'country_code' => 'GB'],\n            ['name' => 'Carlton', 'country_code' => 'GB'],\n            ['name' => 'Wellsville', 'country_code' => 'US'],\n            ['name' => 'Mount Carmel', 'country_code' => 'US'],\n            ['name' => 'Grand-Charmont', 'country_code' => 'FR'],\n            ['name' => 'Chaek', 'country_code' => 'KG'],\n            ['name' => 'Newbridge', 'country_code' => 'GB'],\n            ['name' => 'Schwerzenbach', 'country_code' => 'CH'],\n            ['name' => 'Reichelsheim', 'country_code' => 'DE'],\n            ['name' => 'Carnforth', 'country_code' => 'GB'],\n            ['name' => 'Geithain', 'country_code' => 'DE'],\n            ['name' => 'Sapucai-Mirim', 'country_code' => 'BR'],\n            ['name' => 'Bonndorf im Schwarzwald', 'country_code' => 'DE'],\n            ['name' => 'Melesse', 'country_code' => 'FR'],\n            ['name' => 'Polgardi', 'country_code' => 'HU'],\n            ['name' => 'Lutterbach', 'country_code' => 'FR'],\n            ['name' => 'Fuente el Saz', 'country_code' => 'ES'],\n            ['name' => 'Marina di Gioiosa Ionica', 'country_code' => 'IT'],\n            ['name' => 'Marcallo con Casone', 'country_code' => 'IT'],\n            ['name' => 'Camerino', 'country_code' => 'IT'],\n            ['name' => 'Epone', 'country_code' => 'FR'],\n            ['name' => 'Whitewater Region', 'country_code' => 'CA'],\n            ['name' => 'Chessy', 'country_code' => 'FR'],\n            ['name' => 'Virrat', 'country_code' => 'FI'],\n            ['name' => 'Ruswil', 'country_code' => 'CH'],\n            ['name' => 'Preesall', 'country_code' => 'GB'],\n            ['name' => 'Crete', 'country_code' => 'US'],\n            ['name' => 'Meraux', 'country_code' => 'US'],\n            ['name' => 'Point Vernon', 'country_code' => 'AU'],\n            ['name' => 'Kiefersfelden', 'country_code' => 'DE'],\n            ['name' => 'Vorozhba', 'country_code' => 'UA'],\n            ['name' => 'Garden Home-Whitford', 'country_code' => 'US'],\n            ['name' => 'Kravare', 'country_code' => 'CZ'],\n            ['name' => 'Mezhdurechenskoye', 'country_code' => 'KZ'],\n            ['name' => 'Lutzelbach', 'country_code' => 'DE'],\n            ['name' => 'St. Augustine Beach', 'country_code' => 'US'],\n            ['name' => 'Oppdal', 'country_code' => 'NO'],\n            ['name' => 'Sosnytsia', 'country_code' => 'UA'],\n            ['name' => 'Velika Kladusa', 'country_code' => 'BA'],\n            ['name' => 'Kouango', 'country_code' => 'CF'],\n            ['name' => 'Warnemunde', 'country_code' => 'DE'],\n            ['name' => 'Rosny-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Praia a Mare', 'country_code' => 'IT'],\n            ['name' => 'Pilawa Gorna', 'country_code' => 'PL'],\n            ['name' => 'Solyanka', 'country_code' => 'RU'],\n            ['name' => 'Cazenovia', 'country_code' => 'US'],\n            ['name' => 'Zuni Pueblo', 'country_code' => 'US'],\n            ['name' => 'Ovacik', 'country_code' => 'TR'],\n            ['name' => 'Vimianzo', 'country_code' => 'ES'],\n            ['name' => 'Vacarisas', 'country_code' => 'ES'],\n            ['name' => 'Luxeuil-les-Bains', 'country_code' => 'FR'],\n            ['name' => 'Ponto Belo', 'country_code' => 'BR'],\n            ['name' => 'Pryvillya', 'country_code' => 'UA'],\n            ['name' => 'Xochicoatlan', 'country_code' => 'MX'],\n            ['name' => 'Lipany', 'country_code' => 'SK'],\n            ['name' => 'Olevano sul Tusciano', 'country_code' => 'IT'],\n            ['name' => 'Torrisholme', 'country_code' => 'GB'],\n            ['name' => 'Cabeceira Grande', 'country_code' => 'BR'],\n            ['name' => 'Nambucca Heads', 'country_code' => 'AU'],\n            ['name' => 'Mendota', 'country_code' => 'US'],\n            ['name' => 'Saint-Pee-sur-Nivelle', 'country_code' => 'FR'],\n            ['name' => 'Laer', 'country_code' => 'DE'],\n            ['name' => 'Labenne', 'country_code' => 'FR'],\n            ['name' => 'Guatavita', 'country_code' => 'CO'],\n            ['name' => 'Cos Cob', 'country_code' => 'US'],\n            ['name' => 'Xacmaz', 'country_code' => 'AZ'],\n            ['name' => 'Herrliberg', 'country_code' => 'CH'],\n            ['name' => 'Sao Miguel do Anta', 'country_code' => 'BR'],\n            ['name' => 'Tixpehual', 'country_code' => 'MX'],\n            ['name' => 'Adel', 'country_code' => 'US'],\n            ['name' => 'Wynyard', 'country_code' => 'AU'],\n            ['name' => 'Champigneulles', 'country_code' => 'FR'],\n            ['name' => 'Cangyanshanzhen', 'country_code' => 'CN'],\n            ['name' => 'Vendargues', 'country_code' => 'FR'],\n            ['name' => 'Zirc', 'country_code' => 'HU'],\n            ['name' => 'Heathrow', 'country_code' => 'US'],\n            ['name' => 'Calverton', 'country_code' => 'US'],\n            ['name' => 'Galliano', 'country_code' => 'US'],\n            ['name' => 'Alliste', 'country_code' => 'IT'],\n            ['name' => 'Faina', 'country_code' => 'BR'],\n            ['name' => 'Eagle', 'country_code' => 'US'],\n            ['name' => 'Vetroz', 'country_code' => 'CH'],\n            ['name' => 'Caussade', 'country_code' => 'FR'],\n            ['name' => 'Hillsboro', 'country_code' => 'US'],\n            ['name' => 'Oakdale', 'country_code' => 'US'],\n            ['name' => 'Tomakivka', 'country_code' => 'UA'],\n            ['name' => 'Schwarzenburg', 'country_code' => 'CH'],\n            ['name' => 'Pauliceia', 'country_code' => 'BR'],\n            ['name' => 'Barberton', 'country_code' => 'US'],\n            ['name' => 'Kieta', 'country_code' => 'PG'],\n            ['name' => 'Bad Hofgastein', 'country_code' => 'AT'],\n            ['name' => 'Zeliezovce', 'country_code' => 'SK'],\n            ['name' => 'Conquista', 'country_code' => 'BR'],\n            ['name' => 'Shevchenkove', 'country_code' => 'UA'],\n            ['name' => 'Abadia dos Dourados', 'country_code' => 'BR'],\n            ['name' => 'Lozen', 'country_code' => 'BG'],\n            ['name' => 'Keyport', 'country_code' => 'US'],\n            ['name' => 'Whitianga', 'country_code' => 'NZ'],\n            ['name' => 'Bunola', 'country_code' => 'ES'],\n            ['name' => 'Beacon Square', 'country_code' => 'US'],\n            ['name' => 'North Mackay', 'country_code' => 'AU'],\n            ['name' => 'Wustenrot', 'country_code' => 'DE'],\n            ['name' => 'Ammanford', 'country_code' => 'GB'],\n            ['name' => 'Vilshany', 'country_code' => 'UA'],\n            ['name' => 'Schelklingen', 'country_code' => 'DE'],\n            ['name' => 'Heillecourt', 'country_code' => 'FR'],\n            ['name' => 'Jarovnice', 'country_code' => 'SK'],\n            ['name' => 'Laudenbach', 'country_code' => 'DE'],\n            ['name' => 'Villadossola', 'country_code' => 'IT'],\n            ['name' => 'Brier', 'country_code' => 'US'],\n            ['name' => 'Givet', 'country_code' => 'FR'],\n            ['name' => 'Trumann', 'country_code' => 'US'],\n            ['name' => 'Santa Giustina', 'country_code' => 'IT'],\n            ['name' => 'La Ametlla de Mar', 'country_code' => 'ES'],\n            ['name' => 'Milltown', 'country_code' => 'US'],\n            ['name' => 'Vyerkhnyadzvinsk', 'country_code' => 'BY'],\n            ['name' => 'Agua Doce', 'country_code' => 'BR'],\n            ['name' => 'Pleidelsheim', 'country_code' => 'DE'],\n            ['name' => 'Epping', 'country_code' => 'US'],\n            ['name' => 'Almacellas', 'country_code' => 'ES'],\n            ['name' => 'Chynadiyovo', 'country_code' => 'UA'],\n            ['name' => 'Arosio', 'country_code' => 'IT'],\n            ['name' => 'Hamilton', 'country_code' => 'US'],\n            ['name' => 'Dubrowna', 'country_code' => 'BY'],\n            ['name' => 'Le Pian-Medoc', 'country_code' => 'FR'],\n            ['name' => 'Leitchfield', 'country_code' => 'US'],\n            ['name' => 'Confins', 'country_code' => 'BR'],\n            ['name' => 'Calamonte', 'country_code' => 'ES'],\n            ['name' => 'Galileia', 'country_code' => 'BR'],\n            ['name' => 'Burgebrach', 'country_code' => 'DE'],\n            ['name' => 'Carapelle', 'country_code' => 'IT'],\n            ['name' => 'Indianopolis', 'country_code' => 'BR'],\n            ['name' => 'Bohlen', 'country_code' => 'DE'],\n            ['name' => 'Assais', 'country_code' => 'MA'],\n            ['name' => 'Creswell', 'country_code' => 'US'],\n            ['name' => 'Edwardsburgh/Cardinal', 'country_code' => 'CA'],\n            ['name' => 'Hartberg', 'country_code' => 'AT'],\n            ['name' => 'Nerac', 'country_code' => 'FR'],\n            ['name' => 'Bondurant', 'country_code' => 'US'],\n            ['name' => 'San Buenaventura', 'country_code' => 'MX'],\n            ['name' => 'Charoen Sin', 'country_code' => 'TH'],\n            ['name' => 'Freckleton', 'country_code' => 'GB'],\n            ['name' => 'Haworth', 'country_code' => 'GB'],\n            ['name' => 'Argamasilla de Alba', 'country_code' => 'ES'],\n            ['name' => 'Stratford', 'country_code' => 'US'],\n            ['name' => 'Arapora', 'country_code' => 'BR'],\n            ['name' => 'Prairie View', 'country_code' => 'US'],\n            ['name' => 'Catoosa', 'country_code' => 'US'],\n            ['name' => 'Borgo Val di Taro', 'country_code' => 'IT'],\n            ['name' => 'Paintsville', 'country_code' => 'US'],\n            ['name' => 'Atkinson', 'country_code' => 'US'],\n            ['name' => 'Dielsdorf', 'country_code' => 'CH'],\n            ['name' => 'Neoi Epivates', 'country_code' => 'GR'],\n            ['name' => 'Taliwine', 'country_code' => 'MA'],\n            ['name' => 'Ipeuna', 'country_code' => 'BR'],\n            ['name' => 'Artern', 'country_code' => 'DE'],\n            ['name' => 'Akyar', 'country_code' => 'RU'],\n            ['name' => 'Texhuacan', 'country_code' => 'MX'],\n            ['name' => 'San Cipriano Picentino', 'country_code' => 'IT'],\n            ['name' => 'Ogunimachi', 'country_code' => 'JP'],\n            ['name' => 'Pledran', 'country_code' => 'FR'],\n            ['name' => 'Plymouth Meeting', 'country_code' => 'US'],\n            ['name' => 'Ixtenco', 'country_code' => 'MX'],\n            ['name' => 'Cliza', 'country_code' => 'BO'],\n            ['name' => 'Palmopolis', 'country_code' => 'BR'],\n            ['name' => 'Colbe', 'country_code' => 'DE'],\n            ['name' => 'Divinopolis do Tocantins', 'country_code' => 'BR'],\n            ['name' => 'Teshikaga', 'country_code' => 'JP'],\n            ['name' => 'Bremen', 'country_code' => 'US'],\n            ['name' => 'Marzabotto', 'country_code' => 'IT'],\n            ['name' => 'Caraglio', 'country_code' => 'IT'],\n            ['name' => 'Lercara Friddi', 'country_code' => 'IT'],\n            ['name' => 'Enderby', 'country_code' => 'GB'],\n            ['name' => 'Birmensdorf', 'country_code' => 'CH'],\n            ['name' => 'Ocean City', 'country_code' => 'US'],\n            ['name' => 'Sao Jose do Ouro', 'country_code' => 'BR'],\n            ['name' => 'Samahil', 'country_code' => 'MX'],\n            ['name' => 'Dobroslav', 'country_code' => 'UA'],\n            ['name' => 'Upper Freehold', 'country_code' => 'US'],\n            ['name' => 'Roost-Warendin', 'country_code' => 'FR'],\n            ['name' => 'Selfoss', 'country_code' => 'IS'],\n            ['name' => 'Azgour', 'country_code' => 'MA'],\n            ['name' => 'Aya', 'country_code' => 'JP'],\n            ['name' => 'Nova Siri', 'country_code' => 'IT'],\n            ['name' => 'Holice', 'country_code' => 'CZ'],\n            ['name' => 'Cojusna', 'country_code' => 'MD'],\n            ['name' => 'Kornik', 'country_code' => 'PL'],\n            ['name' => 'Zolakar', 'country_code' => 'AM'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Roskovec', 'country_code' => 'AL'],\n            ['name' => 'Baarle-Nassau', 'country_code' => 'NL'],\n            ['name' => 'Hochstadt an der Donau', 'country_code' => 'DE'],\n            ['name' => 'Vandalia', 'country_code' => 'US'],\n            ['name' => 'Tommot', 'country_code' => 'RU'],\n            ['name' => 'Edgemoor', 'country_code' => 'US'],\n            ['name' => 'Southampton', 'country_code' => 'US'],\n            ['name' => 'Westmere', 'country_code' => 'US'],\n            ['name' => 'Sainte-Anne-des-Monts', 'country_code' => 'CA'],\n            ['name' => 'Fort Meade', 'country_code' => 'US'],\n            ['name' => 'Vengerovo', 'country_code' => 'RU'],\n            ['name' => 'Mileto', 'country_code' => 'IT'],\n            ['name' => 'Osprey', 'country_code' => 'US'],\n            ['name' => 'Gniew', 'country_code' => 'PL'],\n            ['name' => 'Thyez', 'country_code' => 'FR'],\n            ['name' => 'Farmington', 'country_code' => 'US'],\n            ['name' => 'Newton Grange', 'country_code' => 'GB'],\n            ['name' => 'Limasawa', 'country_code' => 'PH'],\n            ['name' => 'Franklin', 'country_code' => 'US'],\n            ['name' => 'Waddington', 'country_code' => 'GB'],\n            ['name' => 'San Luis', 'country_code' => 'ES'],\n            ['name' => 'Geiselhoring', 'country_code' => 'DE'],\n            ['name' => 'Sabaudia', 'country_code' => 'BR'],\n            ['name' => 'Peru', 'country_code' => 'US'],\n            ['name' => 'Askino', 'country_code' => 'RU'],\n            ['name' => 'Roma', 'country_code' => 'AU'],\n            ['name' => 'Divisa Alegre', 'country_code' => 'BR'],\n            ['name' => 'Casares', 'country_code' => 'ES'],\n            ['name' => 'Fort Pierce North', 'country_code' => 'US'],\n            ['name' => 'Romhild', 'country_code' => 'DE'],\n            ['name' => 'San Jose del Progreso', 'country_code' => 'MX'],\n            ['name' => 'Ploeren', 'country_code' => 'FR'],\n            ['name' => 'Salgareda', 'country_code' => 'IT'],\n            ['name' => 'Burguillos', 'country_code' => 'ES'],\n            ['name' => 'Canohes', 'country_code' => 'FR'],\n            ['name' => 'Felsozsolca', 'country_code' => 'HU'],\n            ['name' => 'Rodenberg', 'country_code' => 'DE'],\n            ['name' => 'Sturgis', 'country_code' => 'US'],\n            ['name' => 'Sao Carlos do Ivai', 'country_code' => 'BR'],\n            ['name' => 'Aguiarnopolis', 'country_code' => 'BR'],\n            ['name' => 'Seraitang', 'country_code' => 'CN'],\n            ['name' => 'Neufchateau', 'country_code' => 'FR'],\n            ['name' => 'West Samoset', 'country_code' => 'US'],\n            ['name' => 'Bern', 'country_code' => 'US'],\n            ['name' => 'Treasure Island', 'country_code' => 'US'],\n            ['name' => 'Iitti', 'country_code' => 'FI'],\n            ['name' => 'Estaires', 'country_code' => 'FR'],\n            ['name' => 'Talmaciu', 'country_code' => 'RO'],\n            ['name' => 'Cegrane', 'country_code' => 'MK'],\n            ['name' => 'Branston', 'country_code' => 'GB'],\n            ['name' => 'Tizi Ouzli', 'country_code' => 'MA'],\n            ['name' => 'Schoppingen', 'country_code' => 'DE'],\n            ['name' => 'Spring Lake Park', 'country_code' => 'US'],\n            ['name' => 'Paradas', 'country_code' => 'ES'],\n            ['name' => 'Olevano Romano', 'country_code' => 'IT'],\n            ['name' => 'Black Jack', 'country_code' => 'US'],\n            ['name' => 'Camposano', 'country_code' => 'IT'],\n            ['name' => 'Lewisburg', 'country_code' => 'US'],\n            ['name' => 'Susa', 'country_code' => 'IT'],\n            ['name' => 'Guican', 'country_code' => 'CO'],\n            ['name' => 'Maquine', 'country_code' => 'BR'],\n            ['name' => 'Carrigtohill', 'country_code' => 'IE'],\n            ['name' => 'Heber Springs', 'country_code' => 'US'],\n            ['name' => 'Senafe', 'country_code' => 'ER'],\n            ['name' => 'Muncheberg', 'country_code' => 'DE'],\n            ['name' => 'Saue', 'country_code' => 'EE'],\n            ['name' => 'Galia', 'country_code' => 'BR'],\n            ['name' => 'Conemaugh', 'country_code' => 'US'],\n            ['name' => 'West Slope', 'country_code' => 'US'],\n            ['name' => 'Villmar', 'country_code' => 'DE'],\n            ['name' => 'Guarena', 'country_code' => 'ES'],\n            ['name' => 'Glorinha', 'country_code' => 'BR'],\n            ['name' => 'El Maader El Kabir', 'country_code' => 'MA'],\n            ['name' => 'Woodland', 'country_code' => 'US'],\n            ['name' => 'Ostiglia', 'country_code' => 'IT'],\n            ['name' => 'Devin', 'country_code' => 'BG'],\n            ['name' => 'Veszto', 'country_code' => 'HU'],\n            ['name' => 'Tiros', 'country_code' => 'BR'],\n            ['name' => 'Old Chelsea', 'country_code' => 'CA'],\n            ['name' => 'Tiefenbach', 'country_code' => 'DE'],\n            ['name' => 'Moelan-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Saham al Jawlan', 'country_code' => 'SY'],\n            ['name' => 'Mercato Saraceno', 'country_code' => 'IT'],\n            ['name' => 'Oberrieden', 'country_code' => 'CH'],\n            ['name' => 'Volkmarsen', 'country_code' => 'DE'],\n            ['name' => 'Erp', 'country_code' => 'NL'],\n            ['name' => 'Westbrook', 'country_code' => 'US'],\n            ['name' => 'Cambo-les-Bains', 'country_code' => 'FR'],\n            ['name' => 'Chasse-sur-Rhone', 'country_code' => 'FR'],\n            ['name' => 'Ferreira Gomes', 'country_code' => 'BR'],\n            ['name' => 'Sikatuna', 'country_code' => 'PH'],\n            ['name' => 'Orgeval', 'country_code' => 'FR'],\n            ['name' => 'Interlaken', 'country_code' => 'CH'],\n            ['name' => 'Zakan-Yurt', 'country_code' => 'RU'],\n            ['name' => 'Garabogaz', 'country_code' => 'TM'],\n            ['name' => 'Great Barrington', 'country_code' => 'US'],\n            ['name' => 'Nandy', 'country_code' => 'FR'],\n            ['name' => 'Gulf Breeze', 'country_code' => 'US'],\n            ['name' => 'Infiesto', 'country_code' => 'ES'],\n            ['name' => 'Boa Vista', 'country_code' => 'BR'],\n            ['name' => 'Guenes', 'country_code' => 'ES'],\n            ['name' => 'Viola', 'country_code' => 'US'],\n            ['name' => 'Freeland', 'country_code' => 'US'],\n            ['name' => 'Noyelles-Godault', 'country_code' => 'FR'],\n            ['name' => 'Schoorl', 'country_code' => 'NL'],\n            ['name' => 'Bandjoun', 'country_code' => 'CM'],\n            ['name' => 'Avon', 'country_code' => 'US'],\n            ['name' => 'Lake Mills', 'country_code' => 'US'],\n            ['name' => 'Byron', 'country_code' => 'US'],\n            ['name' => 'Limeira d Oeste', 'country_code' => 'BR'],\n            ['name' => 'Hulin', 'country_code' => 'CZ'],\n            ['name' => 'Latimer', 'country_code' => 'US'],\n            ['name' => 'Loison-sous-Lens', 'country_code' => 'FR'],\n            ['name' => 'Loudun', 'country_code' => 'FR'],\n            ['name' => 'Thermalito', 'country_code' => 'US'],\n            ['name' => 'Whitemarsh Island', 'country_code' => 'US'],\n            ['name' => 'Colusa', 'country_code' => 'US'],\n            ['name' => 'Union', 'country_code' => 'US'],\n            ['name' => 'Junction City', 'country_code' => 'US'],\n            ['name' => 'Taradell', 'country_code' => 'ES'],\n            ['name' => 'Santiago Yaveo', 'country_code' => 'MX'],\n            ['name' => 'Ait Said', 'country_code' => 'MA'],\n            ['name' => 'Merrimac', 'country_code' => 'US'],\n            ['name' => 'Ben Lomond', 'country_code' => 'US'],\n            ['name' => 'Stawell', 'country_code' => 'AU'],\n            ['name' => 'Fabbrico', 'country_code' => 'IT'],\n            ['name' => 'Bossoroca', 'country_code' => 'BR'],\n            ['name' => 'Kampong Beribi', 'country_code' => 'BN'],\n            ['name' => 'Marilena', 'country_code' => 'BR'],\n            ['name' => 'Stare Mesto', 'country_code' => 'CZ'],\n            ['name' => 'University Park', 'country_code' => 'US'],\n            ['name' => 'Ban Haet', 'country_code' => 'TH'],\n            ['name' => 'Yeniceoba', 'country_code' => 'TR'],\n            ['name' => 'Akka', 'country_code' => 'MA'],\n            ['name' => 'Beerwah', 'country_code' => 'AU'],\n            ['name' => 'Sury-le-Comtal', 'country_code' => 'FR'],\n            ['name' => 'Gleneagle', 'country_code' => 'US'],\n            ['name' => 'Mountainside', 'country_code' => 'US'],\n            ['name' => 'Saint-Pol-de-Leon', 'country_code' => 'FR'],\n            ['name' => 'Ludres', 'country_code' => 'FR'],\n            ['name' => 'Lienden', 'country_code' => 'NL'],\n            ['name' => 'Jerichow', 'country_code' => 'DE'],\n            ['name' => 'Jevnaker', 'country_code' => 'NO'],\n            ['name' => 'Brendola', 'country_code' => 'IT'],\n            ['name' => 'Bonfim', 'country_code' => 'BR'],\n            ['name' => 'Battle', 'country_code' => 'GB'],\n            ['name' => 'Moores Mill', 'country_code' => 'US'],\n            ['name' => 'East Buffalo', 'country_code' => 'US'],\n            ['name' => 'Vitorino', 'country_code' => 'BR'],\n            ['name' => 'Constanti', 'country_code' => 'ES'],\n            ['name' => 'Sao Sebastiao do Curral', 'country_code' => 'BR'],\n            ['name' => 'Peronnas', 'country_code' => 'FR'],\n            ['name' => 'Mambai', 'country_code' => 'BR'],\n            ['name' => 'Perry', 'country_code' => 'US'],\n            ['name' => 'Aydemir', 'country_code' => 'BG'],\n            ['name' => 'Chestertown', 'country_code' => 'US'],\n            ['name' => 'Saint-Alban-Leysse', 'country_code' => 'FR'],\n            ['name' => 'Notaresco', 'country_code' => 'IT'],\n            ['name' => 'Cheddleton', 'country_code' => 'GB'],\n            ['name' => 'Almenno San Salvatore', 'country_code' => 'IT'],\n            ['name' => 'Labarthe-sur-Leze', 'country_code' => 'FR'],\n            ['name' => 'Brindas', 'country_code' => 'FR'],\n            ['name' => 'Pietraperzia', 'country_code' => 'IT'],\n            ['name' => 'Saanen', 'country_code' => 'CH'],\n            ['name' => 'North Stormont', 'country_code' => 'CA'],\n            ['name' => 'Mojacar', 'country_code' => 'ES'],\n            ['name' => 'St. Martinville', 'country_code' => 'US'],\n            ['name' => 'Harrisville', 'country_code' => 'US'],\n            ['name' => 'Pottmes', 'country_code' => 'DE'],\n            ['name' => 'Fishtoft', 'country_code' => 'GB'],\n            ['name' => 'Oulad Sbih', 'country_code' => 'MA'],\n            ['name' => 'Cuitegi', 'country_code' => 'BR'],\n            ['name' => 'Assays', 'country_code' => 'MA'],\n            ['name' => 'Beaufort-en-Vallee', 'country_code' => 'FR'],\n            ['name' => 'Oakley', 'country_code' => 'GB'],\n            ['name' => 'Huron', 'country_code' => 'US'],\n            ['name' => 'Mechanicstown', 'country_code' => 'US'],\n            ['name' => 'Alnwick/Haldimand', 'country_code' => 'CA'],\n            ['name' => 'Rosice', 'country_code' => 'CZ'],\n            ['name' => 'Newbiggin-by-the-Sea', 'country_code' => 'GB'],\n            ['name' => 'Oberuzwil', 'country_code' => 'CH'],\n            ['name' => 'Loomis', 'country_code' => 'US'],\n            ['name' => 'Nervesa della Battaglia', 'country_code' => 'IT'],\n            ['name' => 'Northam', 'country_code' => 'AU'],\n            ['name' => 'Balozi', 'country_code' => 'LV'],\n            ['name' => 'Sawtry', 'country_code' => 'GB'],\n            ['name' => 'Jackson', 'country_code' => 'US'],\n            ['name' => 'Montegiorgio', 'country_code' => 'IT'],\n            ['name' => 'Thorpe', 'country_code' => 'GB'],\n            ['name' => 'Bergondo', 'country_code' => 'ES'],\n            ['name' => 'Montaigu', 'country_code' => 'FR'],\n            ['name' => 'Schwendi', 'country_code' => 'DE'],\n            ['name' => 'Dozza', 'country_code' => 'IT'],\n            ['name' => 'Wutoschingen', 'country_code' => 'DE'],\n            ['name' => 'Great Chart', 'country_code' => 'GB'],\n            ['name' => 'Nagatoro', 'country_code' => 'JP'],\n            ['name' => 'King', 'country_code' => 'US'],\n            ['name' => 'Breidenbach', 'country_code' => 'DE'],\n            ['name' => 'West Glens Falls', 'country_code' => 'US'],\n            ['name' => 'Leinburg', 'country_code' => 'DE'],\n            ['name' => 'Herdorf', 'country_code' => 'DE'],\n            ['name' => 'Youngtown', 'country_code' => 'US'],\n            ['name' => 'Mesola', 'country_code' => 'IT'],\n            ['name' => 'Phelps', 'country_code' => 'US'],\n            ['name' => 'Upper Nazareth', 'country_code' => 'US'],\n            ['name' => 'Lemoore Station', 'country_code' => 'US'],\n            ['name' => 'Erere', 'country_code' => 'BR'],\n            ['name' => 'Lutherville', 'country_code' => 'US'],\n            ['name' => 'Floresta', 'country_code' => 'BR'],\n            ['name' => 'Milford', 'country_code' => 'US'],\n            ['name' => 'Spisska Bela', 'country_code' => 'SK'],\n            ['name' => 'Upper Mount Bethel', 'country_code' => 'US'],\n            ['name' => 'Greenbrier', 'country_code' => 'US'],\n            ['name' => 'Letovice', 'country_code' => 'CZ'],\n            ['name' => 'Southbourne', 'country_code' => 'GB'],\n            ['name' => 'Tabernacle', 'country_code' => 'US'],\n            ['name' => 'Venta de Banos', 'country_code' => 'ES'],\n            ['name' => 'Horncastle', 'country_code' => 'GB'],\n            ['name' => 'Nizhnyaya Tavda', 'country_code' => 'RU'],\n            ['name' => 'Georgensgmund', 'country_code' => 'DE'],\n            ['name' => 'Saint-Pierre-d Oleron', 'country_code' => 'FR'],\n            ['name' => 'Meung-sur-Loire', 'country_code' => 'FR'],\n            ['name' => 'Maulbronn', 'country_code' => 'DE'],\n            ['name' => 'Negreira', 'country_code' => 'ES'],\n            ['name' => 'Lecanto', 'country_code' => 'US'],\n            ['name' => 'Curinga', 'country_code' => 'IT'],\n            ['name' => 'Ribeiro Goncalves', 'country_code' => 'BR'],\n            ['name' => 'Montebello Vicentino', 'country_code' => 'IT'],\n            ['name' => 'Sandycroft', 'country_code' => 'GB'],\n            ['name' => 'Mount Cotton', 'country_code' => 'AU'],\n            ['name' => 'Risor', 'country_code' => 'NO'],\n            ['name' => 'Eldridge', 'country_code' => 'US'],\n            ['name' => 'Teius', 'country_code' => 'RO'],\n            ['name' => 'East Earl', 'country_code' => 'US'],\n            ['name' => 'Hulha Negra', 'country_code' => 'BR'],\n            ['name' => 'Dobruska', 'country_code' => 'CZ'],\n            ['name' => 'Old Greenwich', 'country_code' => 'US'],\n            ['name' => 'Malvern Link', 'country_code' => 'GB'],\n            ['name' => 'Idabel', 'country_code' => 'US'],\n            ['name' => 'Mehun-sur-Yevre', 'country_code' => 'FR'],\n            ['name' => 'Piedimonte San Germano', 'country_code' => 'IT'],\n            ['name' => 'South Patrick Shores', 'country_code' => 'US'],\n            ['name' => 'Peace River', 'country_code' => 'CA'],\n            ['name' => 'Isenbuttel', 'country_code' => 'DE'],\n            ['name' => 'Sunnyvale', 'country_code' => 'US'],\n            ['name' => 'Bee Cave', 'country_code' => 'US'],\n            ['name' => 'Haag in Oberbayern', 'country_code' => 'DE'],\n            ['name' => 'Lovejoy', 'country_code' => 'US'],\n            ['name' => 'Gigean', 'country_code' => 'FR'],\n            ['name' => 'Clay', 'country_code' => 'US'],\n            ['name' => 'Torgiano', 'country_code' => 'IT'],\n            ['name' => 'Sallent', 'country_code' => 'ES'],\n            ['name' => 'Garsten', 'country_code' => 'AT'],\n            ['name' => 'Chugqensumdo', 'country_code' => 'CN'],\n            ['name' => 'Sekigahara', 'country_code' => 'JP'],\n            ['name' => 'Acs', 'country_code' => 'HU'],\n            ['name' => 'Almenno San Bartolomeo', 'country_code' => 'IT'],\n            ['name' => 'Loriol-sur-Drome', 'country_code' => 'FR'],\n            ['name' => 'Machern', 'country_code' => 'DE'],\n            ['name' => 'Fircrest', 'country_code' => 'US'],\n            ['name' => 'Landore', 'country_code' => 'GB'],\n            ['name' => 'Annezin', 'country_code' => 'FR'],\n            ['name' => 'Altenkirchen', 'country_code' => 'DE'],\n            ['name' => 'Gelterkinden', 'country_code' => 'CH'],\n            ['name' => 'Ladbergen', 'country_code' => 'DE'],\n            ['name' => 'Dunbar', 'country_code' => 'US'],\n            ['name' => 'Bietigheim', 'country_code' => 'DE'],\n            ['name' => 'Hainburg an der Donau', 'country_code' => 'AT'],\n            ['name' => 'Balan', 'country_code' => 'RO'],\n            ['name' => 'Tagliacozzo', 'country_code' => 'IT'],\n            ['name' => 'Puchezh', 'country_code' => 'RU'],\n            ['name' => 'Alstonville', 'country_code' => 'AU'],\n            ['name' => 'Ivanka pri Dunaji', 'country_code' => 'SK'],\n            ['name' => 'Brixworth', 'country_code' => 'GB'],\n            ['name' => 'Livada', 'country_code' => 'RO'],\n            ['name' => 'Lincoln', 'country_code' => 'US'],\n            ['name' => 'Careacu', 'country_code' => 'BR'],\n            ['name' => 'Klundert', 'country_code' => 'NL'],\n            ['name' => 'Cacimbas', 'country_code' => 'BR'],\n            ['name' => 'Renascenca', 'country_code' => 'BR'],\n            ['name' => 'Milo', 'country_code' => 'US'],\n            ['name' => 'San Vincenzo', 'country_code' => 'IT'],\n            ['name' => 'Mozonte', 'country_code' => 'NI'],\n            ['name' => 'Huntertown', 'country_code' => 'US'],\n            ['name' => 'Saint-Andre-des-Eaux', 'country_code' => 'FR'],\n            ['name' => 'Oberhausbergen', 'country_code' => 'FR'],\n            ['name' => 'Mejji', 'country_code' => 'MA'],\n            ['name' => 'Lagoa de Sao Francisco', 'country_code' => 'BR'],\n            ['name' => 'Ocampo', 'country_code' => 'MX'],\n            ['name' => 'Bilmak', 'country_code' => 'UA'],\n            ['name' => 'Saint Blazey', 'country_code' => 'GB'],\n            ['name' => 'Crossett', 'country_code' => 'US'],\n            ['name' => 'Vidigulfo', 'country_code' => 'IT'],\n            ['name' => 'Puerto Narino', 'country_code' => 'CO'],\n            ['name' => 'Waldeck', 'country_code' => 'DE'],\n            ['name' => 'Kropp', 'country_code' => 'DE'],\n            ['name' => 'Ostrach', 'country_code' => 'DE'],\n            ['name' => 'Knyaginino', 'country_code' => 'RU'],\n            ['name' => 'Jose Pedro Varela', 'country_code' => 'UY'],\n            ['name' => 'Baboua', 'country_code' => 'CF'],\n            ['name' => 'Herval', 'country_code' => 'BR'],\n            ['name' => 'Santo Antonio do Pinhal', 'country_code' => 'BR'],\n            ['name' => 'Margaret River', 'country_code' => 'AU'],\n            ['name' => 'Belo Monte', 'country_code' => 'BR'],\n            ['name' => 'Taneytown', 'country_code' => 'US'],\n            ['name' => 'Mount Vernon', 'country_code' => 'US'],\n            ['name' => 'Glen Innes', 'country_code' => 'AU'],\n            ['name' => 'Kostenets', 'country_code' => 'BG'],\n            ['name' => 'Roteiro', 'country_code' => 'BR'],\n            ['name' => 'San Francisco del Norte', 'country_code' => 'NI'],\n            ['name' => 'Penarrubia', 'country_code' => 'PH'],\n            ['name' => 'Angical do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Cittaducale', 'country_code' => 'IT'],\n            ['name' => 'Puerto Aventuras', 'country_code' => 'MX'],\n            ['name' => 'Fort Myers Shores', 'country_code' => 'US'],\n            ['name' => 'Bovenkarspel', 'country_code' => 'NL'],\n            ['name' => 'Offenbach an der Queich', 'country_code' => 'DE'],\n            ['name' => 'Vizinga', 'country_code' => 'RU'],\n            ['name' => 'Lossiemouth', 'country_code' => 'GB'],\n            ['name' => 'Kirtland', 'country_code' => 'US'],\n            ['name' => 'Bishops Waltham', 'country_code' => 'GB'],\n            ['name' => 'Hornostaivka', 'country_code' => 'UA'],\n            ['name' => 'Castello d Argile', 'country_code' => 'IT'],\n            ['name' => 'Lakes of the Four Seasons', 'country_code' => 'US'],\n            ['name' => 'Na Duang', 'country_code' => 'TH'],\n            ['name' => 'Verneuil-sur-Avre', 'country_code' => 'FR'],\n            ['name' => 'Rheurdt', 'country_code' => 'DE'],\n            ['name' => 'Loanhead', 'country_code' => 'GB'],\n            ['name' => 'Tyrnava', 'country_code' => 'FI'],\n            ['name' => 'Gilwala', 'country_code' => 'PK'],\n            ['name' => 'Znada', 'country_code' => 'MA'],\n            ['name' => 'Bolzano Vicentino', 'country_code' => 'IT'],\n            ['name' => 'Oensingen', 'country_code' => 'CH'],\n            ['name' => 'Faget', 'country_code' => 'RO'],\n            ['name' => 'Turis', 'country_code' => 'ES'],\n            ['name' => 'Yamba', 'country_code' => 'AU'],\n            ['name' => 'Nagaya', 'country_code' => 'JP'],\n            ['name' => 'Senov', 'country_code' => 'CZ'],\n            ['name' => 'Inari', 'country_code' => 'FI'],\n            ['name' => 'Marion', 'country_code' => 'US'],\n            ['name' => 'Kristinestad', 'country_code' => 'FI'],\n            ['name' => 'Chui', 'country_code' => 'BR'],\n            ['name' => 'San Martin', 'country_code' => 'US'],\n            ['name' => 'Arran-Elderslie', 'country_code' => 'CA'],\n            ['name' => 'Ban Bang Pakong', 'country_code' => 'TH'],\n            ['name' => 'Kimberly', 'country_code' => 'US'],\n            ['name' => 'Taylor Mill', 'country_code' => 'US'],\n            ['name' => 'Marmolejo', 'country_code' => 'ES'],\n            ['name' => 'Yardville', 'country_code' => 'US'],\n            ['name' => 'East Shoreham', 'country_code' => 'US'],\n            ['name' => 'Bani Bangou', 'country_code' => 'NE'],\n            ['name' => 'Nachrodt-Wiblingwerde', 'country_code' => 'DE'],\n            ['name' => 'Ouvidor', 'country_code' => 'BR'],\n            ['name' => 'Arges', 'country_code' => 'ES'],\n            ['name' => 'Cromwell', 'country_code' => 'NZ'],\n            ['name' => 'South Hanover', 'country_code' => 'US'],\n            ['name' => 'Ytyk-Kyuyel ', 'country_code' => 'RU'],\n            ['name' => 'Mutzig', 'country_code' => 'FR'],\n            ['name' => 'Velizh', 'country_code' => 'RU'],\n            ['name' => 'Bienenbuttel', 'country_code' => 'DE'],\n            ['name' => 'Valley Park', 'country_code' => 'US'],\n            ['name' => 'General Fernandez Oro', 'country_code' => 'AR'],\n            ['name' => 'Saint-Yrieix-la-Perche', 'country_code' => 'FR'],\n            ['name' => 'Waldsassen', 'country_code' => 'DE'],\n            ['name' => 'Waldmunchen', 'country_code' => 'DE'],\n            ['name' => 'Svelvik', 'country_code' => 'NO'],\n            ['name' => 'Natividade da Serra', 'country_code' => 'BR'],\n            ['name' => 'Thousand Palms', 'country_code' => 'US'],\n            ['name' => 'Amory', 'country_code' => 'US'],\n            ['name' => 'Perola do Oeste', 'country_code' => 'BR'],\n            ['name' => 'Brech', 'country_code' => 'FR'],\n            ['name' => 'Columbus', 'country_code' => 'US'],\n            ['name' => 'Celeiroz', 'country_code' => 'PT'],\n            ['name' => 'Waterford', 'country_code' => 'AU'],\n            ['name' => 'Lake Mathews', 'country_code' => 'US'],\n            ['name' => 'Marvin', 'country_code' => 'US'],\n            ['name' => 'Itambaraca', 'country_code' => 'BR'],\n            ['name' => 'Heitersheim', 'country_code' => 'DE'],\n            ['name' => 'Fowler', 'country_code' => 'US'],\n            ['name' => 'Mellingen', 'country_code' => 'CH'],\n            ['name' => 'Le Cendre', 'country_code' => 'FR'],\n            ['name' => 'Kervignac', 'country_code' => 'FR'],\n            ['name' => 'Malaunay', 'country_code' => 'FR'],\n            ['name' => 'Fishhook', 'country_code' => 'US'],\n            ['name' => 'Kraslice', 'country_code' => 'CZ'],\n            ['name' => 'Ampfing', 'country_code' => 'DE'],\n            ['name' => 'San Feliu de Codinas', 'country_code' => 'ES'],\n            ['name' => 'Courtepin', 'country_code' => 'CH'],\n            ['name' => 'Landriano', 'country_code' => 'IT'],\n            ['name' => 'Hoosick', 'country_code' => 'US'],\n            ['name' => 'Almese', 'country_code' => 'IT'],\n            ['name' => 'Castel di Sangro', 'country_code' => 'IT'],\n            ['name' => 'Hersin-Coupigny', 'country_code' => 'FR'],\n            ['name' => 'Hombourg-Haut', 'country_code' => 'FR'],\n            ['name' => 'Breinigsville', 'country_code' => 'US'],\n            ['name' => 'Marles-les-Mines', 'country_code' => 'FR'],\n            ['name' => 'Douar el Caid el Gueddari', 'country_code' => 'MA'],\n            ['name' => 'Gordonvale', 'country_code' => 'AU'],\n            ['name' => 'Terezinha', 'country_code' => 'BR'],\n            ['name' => 'Lincoln', 'country_code' => 'US'],\n            ['name' => 'Charagua', 'country_code' => 'BO'],\n            ['name' => 'Mimon', 'country_code' => 'CZ'],\n            ['name' => 'Kishkenekol', 'country_code' => 'KZ'],\n            ['name' => 'Groveland', 'country_code' => 'US'],\n            ['name' => 'Poggio Rusco', 'country_code' => 'IT'],\n            ['name' => 'Melenci', 'country_code' => 'RS'],\n            ['name' => 'Tumiritinga', 'country_code' => 'BR'],\n            ['name' => 'Untergrombach', 'country_code' => 'DE'],\n            ['name' => 'Dovolnoye', 'country_code' => 'RU'],\n            ['name' => 'Blainville-sur-Orne', 'country_code' => 'FR'],\n            ['name' => 'Santa Cruz da Vitoria', 'country_code' => 'BR'],\n            ['name' => 'Fukuyama', 'country_code' => 'JP'],\n            ['name' => 'Myers Corner', 'country_code' => 'US'],\n            ['name' => 'Ispringen', 'country_code' => 'DE'],\n            ['name' => 'Mede', 'country_code' => 'IT'],\n            ['name' => 'Plouguerneau', 'country_code' => 'FR'],\n            ['name' => 'Malchow', 'country_code' => 'DE'],\n            ['name' => 'Luftkurort Arendsee', 'country_code' => 'DE'],\n            ['name' => ' Ayn  Isa', 'country_code' => 'SY'],\n            ['name' => 'Trappenkamp', 'country_code' => 'DE'],\n            ['name' => 'Ghafsai', 'country_code' => 'MA'],\n            ['name' => 'Colombier', 'country_code' => 'CH'],\n            ['name' => 'Boa Vista do Burica', 'country_code' => 'BR'],\n            ['name' => 'Parkano', 'country_code' => 'FI'],\n            ['name' => 'Zerkat', 'country_code' => 'MA'],\n            ['name' => 'Saint-Zotique', 'country_code' => 'CA'],\n            ['name' => 'Greifenstein', 'country_code' => 'DE'],\n            ['name' => 'Cellamare', 'country_code' => 'IT'],\n            ['name' => 'La Canonja', 'country_code' => 'ES'],\n            ['name' => 'Riudoms', 'country_code' => 'ES'],\n            ['name' => 'Quixaba', 'country_code' => 'BR'],\n            ['name' => 'Reutte', 'country_code' => 'AT'],\n            ['name' => 'Oleksandrivsk', 'country_code' => 'UA'],\n            ['name' => 'Danbury', 'country_code' => 'GB'],\n            ['name' => 'Castro Marim', 'country_code' => 'PT'],\n            ['name' => 'Millersville', 'country_code' => 'US'],\n            ['name' => 'Ciserano', 'country_code' => 'IT'],\n            ['name' => 'Glashutte', 'country_code' => 'DE'],\n            ['name' => 'Cornuda', 'country_code' => 'IT'],\n            ['name' => 'Cortland', 'country_code' => 'US'],\n            ['name' => 'Crisolita', 'country_code' => 'BR'],\n            ['name' => 'Serra San Bruno', 'country_code' => 'IT'],\n            ['name' => 'Eggersdorf bei Graz', 'country_code' => 'AT'],\n            ['name' => 'Cazaclia', 'country_code' => 'MD'],\n            ['name' => 'Sofiivka', 'country_code' => 'UA'],\n            ['name' => 'Mitterteich', 'country_code' => 'DE'],\n            ['name' => 'Montelepre', 'country_code' => 'IT'],\n            ['name' => 'Guanica', 'country_code' => 'PR'],\n            ['name' => 'San Donaci', 'country_code' => 'IT'],\n            ['name' => 'Chatelaillon-Plage', 'country_code' => 'FR'],\n            ['name' => 'Annaburg', 'country_code' => 'DE'],\n            ['name' => 'Santo Antonio da Alegria', 'country_code' => 'BR'],\n            ['name' => 'Irshansk', 'country_code' => 'UA'],\n            ['name' => 'East Coventry', 'country_code' => 'US'],\n            ['name' => 'Oedheim', 'country_code' => 'DE'],\n            ['name' => 'Hardheim', 'country_code' => 'DE'],\n            ['name' => 'Santa Clara do Sul', 'country_code' => 'BR'],\n            ['name' => 'Ibrany', 'country_code' => 'HU'],\n            ['name' => 'Grand-Fort-Philippe', 'country_code' => 'FR'],\n            ['name' => 'Williamson', 'country_code' => 'US'],\n            ['name' => 'Avallon', 'country_code' => 'FR'],\n            ['name' => 'Larino', 'country_code' => 'IT'],\n            ['name' => 'Plymouth', 'country_code' => 'US'],\n            ['name' => 'Desert Palms', 'country_code' => 'US'],\n            ['name' => 'Acua', 'country_code' => 'BR'],\n            ['name' => 'Lathen', 'country_code' => 'DE'],\n            ['name' => 'Indian River Estates', 'country_code' => 'US'],\n            ['name' => 'Cedeira', 'country_code' => 'ES'],\n            ['name' => 'Ghisalba', 'country_code' => 'IT'],\n            ['name' => 'Yetkul', 'country_code' => 'RU'],\n            ['name' => 'Kamihonbetsu', 'country_code' => 'JP'],\n            ['name' => 'Sutri', 'country_code' => 'IT'],\n            ['name' => 'Asten', 'country_code' => 'AT'],\n            ['name' => 'Odolena Voda', 'country_code' => 'CZ'],\n            ['name' => 'Cranbrook', 'country_code' => 'GB'],\n            ['name' => 'Fuente del Maestre', 'country_code' => 'ES'],\n            ['name' => 'Medzilaborce', 'country_code' => 'SK'],\n            ['name' => 'Alilem', 'country_code' => 'PH'],\n            ['name' => 'Gemenos', 'country_code' => 'FR'],\n            ['name' => 'Petershausen', 'country_code' => 'DE'],\n            ['name' => 'Kochi', 'country_code' => 'JP'],\n            ['name' => 'La Bouilladisse', 'country_code' => 'FR'],\n            ['name' => 'Santiago Maravatio', 'country_code' => 'MX'],\n            ['name' => 'Pembroke Park', 'country_code' => 'US'],\n            ['name' => 'Vezin-le-Coquet', 'country_code' => 'FR'],\n            ['name' => 'Horbourg', 'country_code' => 'FR'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Sobrance', 'country_code' => 'SK'],\n            ['name' => 'Lake Hallie', 'country_code' => 'US'],\n            ['name' => 'Ellettsville', 'country_code' => 'US'],\n            ['name' => 'Diano Marina', 'country_code' => 'IT'],\n            ['name' => 'Arapoema', 'country_code' => 'BR'],\n            ['name' => 'Sapopema', 'country_code' => 'BR'],\n            ['name' => 'Saint-Florent-sur-Cher', 'country_code' => 'FR'],\n            ['name' => 'Ambert', 'country_code' => 'FR'],\n            ['name' => 'Guglingen', 'country_code' => 'DE'],\n            ['name' => 'Saint-Girons', 'country_code' => 'FR'],\n            ['name' => 'Sankt Margrethen', 'country_code' => 'CH'],\n            ['name' => 'Moraleja', 'country_code' => 'ES'],\n            ['name' => 'Kremsmunster', 'country_code' => 'AT'],\n            ['name' => 'Guged', 'country_code' => 'IR'],\n            ['name' => 'Prairie Grove', 'country_code' => 'US'],\n            ['name' => 'Tvarditsa', 'country_code' => 'BG'],\n            ['name' => 'Timoulilt', 'country_code' => 'MA'],\n            ['name' => 'Napili-Honokowai', 'country_code' => 'US'],\n            ['name' => 'Buia', 'country_code' => 'IT'],\n            ['name' => 'Khmis Sidi Yahia', 'country_code' => 'MA'],\n            ['name' => 'Gorom-Gorom', 'country_code' => 'BF'],\n            ['name' => 'Montevallo', 'country_code' => 'US'],\n            ['name' => 'Sinn', 'country_code' => 'DE'],\n            ['name' => 'Kimberley', 'country_code' => 'GB'],\n            ['name' => 'Marineo', 'country_code' => 'IT'],\n            ['name' => 'Countesthorpe', 'country_code' => 'GB'],\n            ['name' => 'Beromunster', 'country_code' => 'CH'],\n            ['name' => 'Mount Healthy', 'country_code' => 'US'],\n            ['name' => 'Change', 'country_code' => 'FR'],\n            ['name' => 'Enying', 'country_code' => 'HU'],\n            ['name' => 'Clover Creek', 'country_code' => 'US'],\n            ['name' => 'Allendale', 'country_code' => 'US'],\n            ['name' => 'Luislandia', 'country_code' => 'BR'],\n            ['name' => 'Marange-Silvange', 'country_code' => 'FR'],\n            ['name' => 'Bois-le-Roi', 'country_code' => 'FR'],\n            ['name' => 'Marignier', 'country_code' => 'FR'],\n            ['name' => 'Rupert', 'country_code' => 'US'],\n            ['name' => 'Snowflake', 'country_code' => 'US'],\n            ['name' => 'Bayville', 'country_code' => 'US'],\n            ['name' => 'Ijoukak', 'country_code' => 'MA'],\n            ['name' => 'Puebla de Alfinden', 'country_code' => 'ES'],\n            ['name' => 'Perechyn', 'country_code' => 'UA'],\n            ['name' => 'Douar Oulad Mkoudou', 'country_code' => 'MA'],\n            ['name' => 'Mount Hope', 'country_code' => 'US'],\n            ['name' => 'Litchfield', 'country_code' => 'US'],\n            ['name' => 'Muggensturm', 'country_code' => 'DE'],\n            ['name' => 'Berkley', 'country_code' => 'US'],\n            ['name' => 'Boxberg', 'country_code' => 'DE'],\n            ['name' => 'Schildow', 'country_code' => 'DE'],\n            ['name' => 'Cubara', 'country_code' => 'CO'],\n            ['name' => 'Verzuolo', 'country_code' => 'IT'],\n            ['name' => 'Glandorf', 'country_code' => 'DE'],\n            ['name' => 'Jimena de la Frontera', 'country_code' => 'ES'],\n            ['name' => 'Weisendorf', 'country_code' => 'DE'],\n            ['name' => 'Maple Glen', 'country_code' => 'US'],\n            ['name' => 'Eatonton', 'country_code' => 'US'],\n            ['name' => 'Tuxcueca', 'country_code' => 'MX'],\n            ['name' => 'Kamennogorsk', 'country_code' => 'RU'],\n            ['name' => 'Kiama Downs', 'country_code' => 'AU'],\n            ['name' => 'Catugi', 'country_code' => 'BR'],\n            ['name' => 'Bulkington', 'country_code' => 'GB'],\n            ['name' => 'Thones', 'country_code' => 'FR'],\n            ['name' => 'Bellwood', 'country_code' => 'US'],\n            ['name' => 'Vora', 'country_code' => 'FI'],\n            ['name' => 'Obdam', 'country_code' => 'NL'],\n            ['name' => 'Alvechurch', 'country_code' => 'GB'],\n            ['name' => 'Aleksandrovskoye', 'country_code' => 'RU'],\n            ['name' => 'Lacy-Lakeview', 'country_code' => 'US'],\n            ['name' => 'Bad Bruckenau', 'country_code' => 'DE'],\n            ['name' => 'Saint-Marcel-les-Valence', 'country_code' => 'FR'],\n            ['name' => 'Kosciusko', 'country_code' => 'US'],\n            ['name' => 'Tunkhannock', 'country_code' => 'US'],\n            ['name' => 'Hinojosa del Duque', 'country_code' => 'ES'],\n            ['name' => 'Rajamaki', 'country_code' => 'FI'],\n            ['name' => 'Orchard Mesa', 'country_code' => 'US'],\n            ['name' => 'Roaring Spring', 'country_code' => 'US'],\n            ['name' => 'Calonne-Ricouart', 'country_code' => 'FR'],\n            ['name' => 'San Martino Siccomario', 'country_code' => 'IT'],\n            ['name' => 'Woodfin', 'country_code' => 'US'],\n            ['name' => 'Eggolsheim', 'country_code' => 'DE'],\n            ['name' => 'Pollenza', 'country_code' => 'IT'],\n            ['name' => 'Saint-Marcel', 'country_code' => 'FR'],\n            ['name' => 'Rumson', 'country_code' => 'US'],\n            ['name' => 'Pedra Bonita', 'country_code' => 'BR'],\n            ['name' => 'Saint-Prex', 'country_code' => 'CH'],\n            ['name' => 'Bazargan', 'country_code' => 'IR'],\n            ['name' => 'Letohrad', 'country_code' => 'CZ'],\n            ['name' => 'Broadway', 'country_code' => 'US'],\n            ['name' => 'Medina', 'country_code' => 'US'],\n            ['name' => 'San Juan Mixtepec', 'country_code' => 'MX'],\n            ['name' => 'Orio', 'country_code' => 'ES'],\n            ['name' => 'Kaiseraugst', 'country_code' => 'CH'],\n            ['name' => 'Val-Shefford', 'country_code' => 'CA'],\n            ['name' => 'Harrisburg', 'country_code' => 'US'],\n            ['name' => 'Et Tnine des Beni Ammart', 'country_code' => 'MA'],\n            ['name' => 'Velden', 'country_code' => 'DE'],\n            ['name' => 'Douro-Dummer', 'country_code' => 'CA'],\n            ['name' => 'Schwabhausen', 'country_code' => 'DE'],\n            ['name' => 'Frohnleiten', 'country_code' => 'AT'],\n            ['name' => 'Yaring', 'country_code' => 'TH'],\n            ['name' => 'Ilshofen', 'country_code' => 'DE'],\n            ['name' => 'Phanom Sarakham', 'country_code' => 'TH'],\n            ['name' => 'Santa Lucia Monte Verde', 'country_code' => 'MX'],\n            ['name' => 'Gamovo', 'country_code' => 'RU'],\n            ['name' => 'Bouillargues', 'country_code' => 'FR'],\n            ['name' => 'Kampong Mulaut', 'country_code' => 'BN'],\n            ['name' => 'Pottsville', 'country_code' => 'AU'],\n            ['name' => 'Bermuda Dunes', 'country_code' => 'US'],\n            ['name' => 'New Hartford', 'country_code' => 'US'],\n            ['name' => 'Cellino San Marco', 'country_code' => 'IT'],\n            ['name' => 'Hermeskeil', 'country_code' => 'DE'],\n            ['name' => 'Dusslingen', 'country_code' => 'DE'],\n            ['name' => 'Villers-le-Bouillet', 'country_code' => 'BE'],\n            ['name' => 'Pavilly', 'country_code' => 'FR'],\n            ['name' => 'Losone', 'country_code' => 'CH'],\n            ['name' => 'New Alresford', 'country_code' => 'GB'],\n            ['name' => 'Viriat', 'country_code' => 'FR'],\n            ['name' => 'Wilhelmsburg', 'country_code' => 'AT'],\n            ['name' => 'Pendleton', 'country_code' => 'US'],\n            ['name' => 'Bol shaya Chernigovka', 'country_code' => 'RU'],\n            ['name' => 'Kuttigen', 'country_code' => 'CH'],\n            ['name' => 'Bucovice', 'country_code' => 'CZ'],\n            ['name' => 'Gochsheim', 'country_code' => 'DE'],\n            ['name' => 'Olney', 'country_code' => 'GB'],\n            ['name' => 'That Phanom', 'country_code' => 'TH'],\n            ['name' => 'Bullskin', 'country_code' => 'US'],\n            ['name' => 'Horstmar', 'country_code' => 'DE'],\n            ['name' => 'San Cesario sul Panaro', 'country_code' => 'IT'],\n            ['name' => 'Cinquefrondi', 'country_code' => 'IT'],\n            ['name' => 'Castelnau-d Estretefonds', 'country_code' => 'FR'],\n            ['name' => 'Chalonnes-sur-Loire', 'country_code' => 'FR'],\n            ['name' => 'Sottrum', 'country_code' => 'DE'],\n            ['name' => 'Phan Thong', 'country_code' => 'TH'],\n            ['name' => 'Villabe', 'country_code' => 'FR'],\n            ['name' => 'Lityn', 'country_code' => 'UA'],\n            ['name' => 'Corbie', 'country_code' => 'FR'],\n            ['name' => 'Rohrmoos', 'country_code' => 'DE'],\n            ['name' => 'Staryi Sambir', 'country_code' => 'UA'],\n            ['name' => 'Wescosville', 'country_code' => 'US'],\n            ['name' => 'Chinchilla', 'country_code' => 'AU'],\n            ['name' => 'Blatna', 'country_code' => 'CZ'],\n            ['name' => 'Avetrana', 'country_code' => 'IT'],\n            ['name' => 'Rinconada', 'country_code' => 'AR'],\n            ['name' => 'Omachi', 'country_code' => 'JP'],\n            ['name' => 'Karagay', 'country_code' => 'RU'],\n            ['name' => 'Kronoby', 'country_code' => 'FI'],\n            ['name' => 'Pontenure', 'country_code' => 'IT'],\n            ['name' => 'Hage', 'country_code' => 'DE'],\n            ['name' => 'Trezzano Rosa', 'country_code' => 'IT'],\n            ['name' => 'Ashoro', 'country_code' => 'JP'],\n            ['name' => 'Gramsbergen', 'country_code' => 'NL'],\n            ['name' => 'Roeland Park', 'country_code' => 'US'],\n            ['name' => 'Plessisville', 'country_code' => 'CA'],\n            ['name' => 'Palkane', 'country_code' => 'FI'],\n            ['name' => 'Hanover', 'country_code' => 'US'],\n            ['name' => 'Horn', 'country_code' => 'AT'],\n            ['name' => 'Dayton', 'country_code' => 'US'],\n            ['name' => 'Lucas Valley-Marinwood', 'country_code' => 'US'],\n            ['name' => 'Zevenhuizen', 'country_code' => 'NL'],\n            ['name' => 'Arbucias', 'country_code' => 'ES'],\n            ['name' => 'Sawley', 'country_code' => 'GB'],\n            ['name' => 'Faxinal do Soturno', 'country_code' => 'BR'],\n            ['name' => 'Montenero di Bisaccia', 'country_code' => 'IT'],\n            ['name' => 'Tafingoult', 'country_code' => 'MA'],\n            ['name' => 'Louhans', 'country_code' => 'FR'],\n            ['name' => 'Cherryville', 'country_code' => 'US'],\n            ['name' => 'Pecquencourt', 'country_code' => 'FR'],\n            ['name' => 'Belfast', 'country_code' => 'US'],\n            ['name' => 'Ritchot', 'country_code' => 'CA'],\n            ['name' => 'Putnok', 'country_code' => 'HU'],\n            ['name' => 'Padre Marcos', 'country_code' => 'BR'],\n            ['name' => 'Alcala de Chivert', 'country_code' => 'ES'],\n            ['name' => 'Fishguard', 'country_code' => 'GB'],\n            ['name' => 'Nevada', 'country_code' => 'US'],\n            ['name' => 'Lichtetanne', 'country_code' => 'DE'],\n            ['name' => 'Gouesnou', 'country_code' => 'FR'],\n            ['name' => 'Sevsk', 'country_code' => 'RU'],\n            ['name' => 'Alpicat', 'country_code' => 'ES'],\n            ['name' => 'Lysterfield', 'country_code' => 'AU'],\n            ['name' => 'Saint-Maurice-l Exil', 'country_code' => 'FR'],\n            ['name' => 'Teufen', 'country_code' => 'CH'],\n            ['name' => 'Sallapadan', 'country_code' => 'PH'],\n            ['name' => 'Calci', 'country_code' => 'IT'],\n            ['name' => 'Ijaci', 'country_code' => 'BR'],\n            ['name' => 'Sumirago', 'country_code' => 'IT'],\n            ['name' => 'Montauroux', 'country_code' => 'FR'],\n            ['name' => 'Viitasaari', 'country_code' => 'FI'],\n            ['name' => 'Eppertshausen', 'country_code' => 'DE'],\n            ['name' => 'Svesa', 'country_code' => 'UA'],\n            ['name' => 'Mindszent', 'country_code' => 'HU'],\n            ['name' => 'Arnstedt', 'country_code' => 'DE'],\n            ['name' => 'Otonabee-South Monaghan', 'country_code' => 'CA'],\n            ['name' => 'Pinhao', 'country_code' => 'BR'],\n            ['name' => 'Schladming', 'country_code' => 'AT'],\n            ['name' => 'Las Pedroneras', 'country_code' => 'ES'],\n            ['name' => 'Zierenberg', 'country_code' => 'DE'],\n            ['name' => 'Cwmafan', 'country_code' => 'GB'],\n            ['name' => 'Neuenstein', 'country_code' => 'DE'],\n            ['name' => 'Misinto', 'country_code' => 'IT'],\n            ['name' => 'Dunlap', 'country_code' => 'US'],\n            ['name' => 'South Molton', 'country_code' => 'GB'],\n            ['name' => 'Sainte-Livrade-sur-Lot', 'country_code' => 'FR'],\n            ['name' => 'Pizzighettone', 'country_code' => 'IT'],\n            ['name' => 'Nong Chik', 'country_code' => 'TH'],\n            ['name' => 'Knetzgau', 'country_code' => 'DE'],\n            ['name' => 'Guaranta', 'country_code' => 'BR'],\n            ['name' => 'Montdidier', 'country_code' => 'FR'],\n            ['name' => 'Vairano Patenora', 'country_code' => 'IT'],\n            ['name' => 'Albizzate', 'country_code' => 'IT'],\n            ['name' => 'Ar Rawdah', 'country_code' => 'YE'],\n            ['name' => 'Marcaria', 'country_code' => 'IT'],\n            ['name' => 'Church Hill', 'country_code' => 'US'],\n            ['name' => 'Exeter', 'country_code' => 'US'],\n            ['name' => 'Potomac Mills', 'country_code' => 'US'],\n            ['name' => 'Shediac', 'country_code' => 'CA'],\n            ['name' => 'Tatatila', 'country_code' => 'MX'],\n            ['name' => 'Bickenbach', 'country_code' => 'DE'],\n            ['name' => 'Briviesca', 'country_code' => 'ES'],\n            ['name' => 'Verkhniye Tatyshly', 'country_code' => 'RU'],\n            ['name' => 'Tangstedt', 'country_code' => 'DE'],\n            ['name' => 'San Antonio de Vilamajor', 'country_code' => 'ES'],\n            ['name' => 'Neuffen', 'country_code' => 'DE'],\n            ['name' => 'Cooranbong', 'country_code' => 'AU'],\n            ['name' => 'Illogan', 'country_code' => 'GB'],\n            ['name' => 'Straldzha', 'country_code' => 'BG'],\n            ['name' => 'Hopefield', 'country_code' => 'ZA'],\n            ['name' => 'Eichendorf', 'country_code' => 'DE'],\n            ['name' => 'Lachendorf', 'country_code' => 'DE'],\n            ['name' => 'Linwood', 'country_code' => 'US'],\n            ['name' => 'Ashville', 'country_code' => 'US'],\n            ['name' => 'Barro Duro', 'country_code' => 'BR'],\n            ['name' => 'Wirksworth', 'country_code' => 'GB'],\n            ['name' => 'Ventnor', 'country_code' => 'GB'],\n            ['name' => 'Kizilskoye', 'country_code' => 'RU'],\n            ['name' => 'Pilsting', 'country_code' => 'DE'],\n            ['name' => 'Valley Falls', 'country_code' => 'US'],\n            ['name' => 'Sandersville', 'country_code' => 'US'],\n            ['name' => 'Colnbrook', 'country_code' => 'GB'],\n            ['name' => 'Rissa', 'country_code' => 'NO'],\n            ['name' => 'Chapelhall', 'country_code' => 'GB'],\n            ['name' => 'Blairsville', 'country_code' => 'US'],\n            ['name' => 'Fegersheim', 'country_code' => 'FR'],\n            ['name' => 'Douvaine', 'country_code' => 'FR'],\n            ['name' => 'Bridgeport', 'country_code' => 'US'],\n            ['name' => 'Gualtieri', 'country_code' => 'IT'],\n            ['name' => 'Diekholzen', 'country_code' => 'DE'],\n            ['name' => 'Ascona', 'country_code' => 'CH'],\n            ['name' => 'Hunters Quay', 'country_code' => 'GB'],\n            ['name' => 'Sturtevant', 'country_code' => 'US'],\n            ['name' => 'Nyirtelek', 'country_code' => 'HU'],\n            ['name' => 'Eaunes', 'country_code' => 'FR'],\n            ['name' => 'Slave Lake', 'country_code' => 'CA'],\n            ['name' => 'Port-Cartier', 'country_code' => 'CA'],\n            ['name' => 'Castronno', 'country_code' => 'IT'],\n            ['name' => 'Litchfield', 'country_code' => 'US'],\n            ['name' => 'Sammichele di Bari', 'country_code' => 'IT'],\n            ['name' => 'San Adrian', 'country_code' => 'ES'],\n            ['name' => 'Verkhniye Kigi', 'country_code' => 'RU'],\n            ['name' => 'Cherry Hills Village', 'country_code' => 'US'],\n            ['name' => 'Souda', 'country_code' => 'GR'],\n            ['name' => 'Grandes Rios', 'country_code' => 'BR'],\n            ['name' => 'Barrington', 'country_code' => 'CA'],\n            ['name' => 'Douar El Gouzal', 'country_code' => 'MA'],\n            ['name' => 'Barao de Cotegipe', 'country_code' => 'BR'],\n            ['name' => 'Kozarmisleny', 'country_code' => 'HU'],\n            ['name' => 'Pocahontas', 'country_code' => 'US'],\n            ['name' => 'Morrilton', 'country_code' => 'US'],\n            ['name' => 'La Moncada', 'country_code' => 'MX'],\n            ['name' => 'Saint-Genest-Lerpt', 'country_code' => 'FR'],\n            ['name' => 'Osterburken', 'country_code' => 'DE'],\n            ['name' => 'Corjeuti', 'country_code' => 'MD'],\n            ['name' => 'Blanca', 'country_code' => 'ES'],\n            ['name' => 'Chatenoy-le-Royal', 'country_code' => 'FR'],\n            ['name' => 'Bellingwolde', 'country_code' => 'NL'],\n            ['name' => 'Barrington', 'country_code' => 'US'],\n            ['name' => 'Fislisbach', 'country_code' => 'CH'],\n            ['name' => 'Shikama', 'country_code' => 'JP'],\n            ['name' => 'Mariopolis', 'country_code' => 'BR'],\n            ['name' => 'Belle Haven', 'country_code' => 'US'],\n            ['name' => 'Bolligen', 'country_code' => 'CH'],\n            ['name' => 'Tanvald', 'country_code' => 'CZ'],\n            ['name' => 'Capannoli', 'country_code' => 'IT'],\n            ['name' => 'Zavetnoye', 'country_code' => 'RU'],\n            ['name' => 'Independencia', 'country_code' => 'BR'],\n            ['name' => 'Juana Diaz', 'country_code' => 'PR'],\n            ['name' => 'Tecumseh', 'country_code' => 'US'],\n            ['name' => 'Chatel-Guyon', 'country_code' => 'FR'],\n            ['name' => 'Mecca', 'country_code' => 'US'],\n            ['name' => 'Rocky Mountain House', 'country_code' => 'CA'],\n            ['name' => 'Flers-en-Escrebieux', 'country_code' => 'FR'],\n            ['name' => 'Poggio Mirteto', 'country_code' => 'IT'],\n            ['name' => 'Mira Monte', 'country_code' => 'US'],\n            ['name' => 'Gournay-en-Bray', 'country_code' => 'FR'],\n            ['name' => 'Einhausen', 'country_code' => 'DE'],\n            ['name' => 'Kounoupidiana', 'country_code' => 'GR'],\n            ['name' => 'Creel', 'country_code' => 'MX'],\n            ['name' => 'Pea Ridge', 'country_code' => 'US'],\n            ['name' => 'Belmont', 'country_code' => 'US'],\n            ['name' => 'Palma', 'country_code' => 'BR'],\n            ['name' => 'Yemilchyne', 'country_code' => 'UA'],\n            ['name' => 'Tsiolkovskiy', 'country_code' => 'RU'],\n            ['name' => 'Green Knoll', 'country_code' => 'US'],\n            ['name' => 'Ban Hua Saphan', 'country_code' => 'TH'],\n            ['name' => 'Villamuriel de Cerrato', 'country_code' => 'ES'],\n            ['name' => 'Chatsworth', 'country_code' => 'CA'],\n            ['name' => 'Trysil', 'country_code' => 'NO'],\n            ['name' => 'Lloseta', 'country_code' => 'ES'],\n            ['name' => 'Dona Eusebia', 'country_code' => 'BR'],\n            ['name' => 'Veneta', 'country_code' => 'US'],\n            ['name' => 'North Syracuse', 'country_code' => 'US'],\n            ['name' => 'Kirchberg', 'country_code' => 'CH'],\n            ['name' => 'Uffenheim', 'country_code' => 'DE'],\n            ['name' => 'Jiaotanzhuang', 'country_code' => 'CN'],\n            ['name' => 'Anta', 'country_code' => 'BR'],\n            ['name' => 'Amga', 'country_code' => 'RU'],\n            ['name' => 'Ghadamis', 'country_code' => 'LY'],\n            ['name' => 'Monte Aguila', 'country_code' => 'CL'],\n            ['name' => 'Bellona', 'country_code' => 'IT'],\n            ['name' => 'Stephenville', 'country_code' => 'CA'],\n            ['name' => 'Schlangenbad', 'country_code' => 'DE'],\n            ['name' => 'Le Palais-sur-Vienne', 'country_code' => 'FR'],\n            ['name' => 'Cadaujac', 'country_code' => 'FR'],\n            ['name' => 'Cornetu', 'country_code' => 'RO'],\n            ['name' => 'Battlefield', 'country_code' => 'US'],\n            ['name' => 'Grezieu-la-Varenne', 'country_code' => 'FR'],\n            ['name' => 'East Leake', 'country_code' => 'GB'],\n            ['name' => 'North Caldwell', 'country_code' => 'US'],\n            ['name' => 'Beaver Dam', 'country_code' => 'US'],\n            ['name' => 'Prades', 'country_code' => 'FR'],\n            ['name' => 'Metsavan', 'country_code' => 'AM'],\n            ['name' => 'Roccella Ionica', 'country_code' => 'IT'],\n            ['name' => 'Guinisiliban', 'country_code' => 'PH'],\n            ['name' => 'Ladera Heights', 'country_code' => 'US'],\n            ['name' => 'Stewarton', 'country_code' => 'GB'],\n            ['name' => 'Bezopasnoye', 'country_code' => 'RU'],\n            ['name' => 'Winthrop Harbor', 'country_code' => 'US'],\n            ['name' => 'Whitmore Lake', 'country_code' => 'US'],\n            ['name' => 'Neuhofen an der Krems', 'country_code' => 'AT'],\n            ['name' => 'Verkhneye Kazanishche', 'country_code' => 'RU'],\n            ['name' => 'Market Weighton', 'country_code' => 'GB'],\n            ['name' => 'Hillsboro', 'country_code' => 'US'],\n            ['name' => 'Valdovino', 'country_code' => 'ES'],\n            ['name' => 'L Hopital', 'country_code' => 'FR'],\n            ['name' => 'Arquata Scrivia', 'country_code' => 'IT'],\n            ['name' => 'Diamante', 'country_code' => 'BR'],\n            ['name' => 'Grao Para', 'country_code' => 'BR'],\n            ['name' => 'Brewton', 'country_code' => 'US'],\n            ['name' => 'Tamanredjo', 'country_code' => 'SR'],\n            ['name' => 'Limbricht', 'country_code' => 'NL'],\n            ['name' => 'Anavyssos', 'country_code' => 'GR'],\n            ['name' => 'Orlov', 'country_code' => 'RU'],\n            ['name' => 'Kermit', 'country_code' => 'US'],\n            ['name' => 'Belisce', 'country_code' => 'HR'],\n            ['name' => 'Demopolis', 'country_code' => 'US'],\n            ['name' => 'Thalheim', 'country_code' => 'DE'],\n            ['name' => 'Veigne', 'country_code' => 'FR'],\n            ['name' => 'Awjilah', 'country_code' => 'LY'],\n            ['name' => 'Sao Jose do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Santa Cruz', 'country_code' => 'BR'],\n            ['name' => 'Dalton', 'country_code' => 'US'],\n            ['name' => 'Burgkunstadt', 'country_code' => 'DE'],\n            ['name' => 'Guairaca', 'country_code' => 'BR'],\n            ['name' => 'Labruguiere', 'country_code' => 'FR'],\n            ['name' => 'Saint-Pryve-Saint-Mesmin', 'country_code' => 'FR'],\n            ['name' => 'Talent', 'country_code' => 'US'],\n            ['name' => 'Carral', 'country_code' => 'ES'],\n            ['name' => 'Dubnany', 'country_code' => 'CZ'],\n            ['name' => 'Sudova Vyshnya', 'country_code' => 'UA'],\n            ['name' => 'Almensilla', 'country_code' => 'ES'],\n            ['name' => 'Pan de Azucar', 'country_code' => 'UY'],\n            ['name' => 'Jaraiz de la Vera', 'country_code' => 'ES'],\n            ['name' => 'Hamilton', 'country_code' => 'US'],\n            ['name' => 'Trinity', 'country_code' => 'US'],\n            ['name' => 'Ploce', 'country_code' => 'HR'],\n            ['name' => 'Oberding', 'country_code' => 'DE'],\n            ['name' => 'Uthai', 'country_code' => 'TH'],\n            ['name' => 'Normandy Park', 'country_code' => 'US'],\n            ['name' => 'Peterborough', 'country_code' => 'US'],\n            ['name' => 'Essex', 'country_code' => 'US'],\n            ['name' => 'Montesano sulla Marcellana', 'country_code' => 'IT'],\n            ['name' => 'Santa Fe do Araguaia', 'country_code' => 'BR'],\n            ['name' => 'Kerkwijk', 'country_code' => 'NL'],\n            ['name' => 'Bridge City', 'country_code' => 'US'],\n            ['name' => 'Echallens', 'country_code' => 'CH'],\n            ['name' => 'Ambridge', 'country_code' => 'US'],\n            ['name' => 'Amite City', 'country_code' => 'US'],\n            ['name' => 'Saint-Flour', 'country_code' => 'FR'],\n            ['name' => 'Catasauqua', 'country_code' => 'US'],\n            ['name' => 'Ivanychi', 'country_code' => 'UA'],\n            ['name' => 'Passo do Sobrado', 'country_code' => 'BR'],\n            ['name' => 'Lydd', 'country_code' => 'GB'],\n            ['name' => 'Kirchheim am Neckar', 'country_code' => 'DE'],\n            ['name' => 'Afonso Cunha', 'country_code' => 'BR'],\n            ['name' => 'Rodewisch', 'country_code' => 'DE'],\n            ['name' => 'Cocoa West', 'country_code' => 'US'],\n            ['name' => 'Pryazovske', 'country_code' => 'UA'],\n            ['name' => 'Tetecala', 'country_code' => 'MX'],\n            ['name' => 'Lat Yao', 'country_code' => 'TH'],\n            ['name' => 'Tuddern', 'country_code' => 'DE'],\n            ['name' => 'Strongoli', 'country_code' => 'IT'],\n            ['name' => 'Mainleus', 'country_code' => 'DE'],\n            ['name' => 'Alessano', 'country_code' => 'IT'],\n            ['name' => 'Strensall', 'country_code' => 'GB'],\n            ['name' => 'Dingwall', 'country_code' => 'GB'],\n            ['name' => 'Tsuman', 'country_code' => 'UA'],\n            ['name' => 'Slatyne', 'country_code' => 'UA'],\n            ['name' => 'Nikhom Kham Soi', 'country_code' => 'TH'],\n            ['name' => 'Nishiharadai', 'country_code' => 'JP'],\n            ['name' => 'Gyorujbarat', 'country_code' => 'HU'],\n            ['name' => 'Forestbrook', 'country_code' => 'US'],\n            ['name' => 'Thannhausen', 'country_code' => 'DE'],\n            ['name' => 'Gallicano nel Lazio', 'country_code' => 'IT'],\n            ['name' => 'Cipotanea', 'country_code' => 'BR'],\n            ['name' => 'Siziano', 'country_code' => 'IT'],\n            ['name' => 'Kerekegyhaza', 'country_code' => 'HU'],\n            ['name' => 'Eliot', 'country_code' => 'US'],\n            ['name' => 'Treforest', 'country_code' => 'GB'],\n            ['name' => 'Templeuve', 'country_code' => 'FR'],\n            ['name' => 'Morro Reuter', 'country_code' => 'BR'],\n            ['name' => 'Bad Blankenburg', 'country_code' => 'DE'],\n            ['name' => 'Capranica', 'country_code' => 'IT'],\n            ['name' => 'Bethel', 'country_code' => 'US'],\n            ['name' => 'Nova Alianca', 'country_code' => 'BR'],\n            ['name' => 'Tuiuti', 'country_code' => 'BR'],\n            ['name' => 'Lavelanet', 'country_code' => 'FR'],\n            ['name' => 'Aratiba', 'country_code' => 'BR'],\n            ['name' => 'Buc', 'country_code' => 'FR'],\n            ['name' => 'Meolo', 'country_code' => 'IT'],\n            ['name' => 'Northgate', 'country_code' => 'US'],\n            ['name' => 'Sretensk', 'country_code' => 'RU'],\n            ['name' => 'Gonnosfanadiga', 'country_code' => 'IT'],\n            ['name' => 'Makaryev', 'country_code' => 'RU'],\n            ['name' => 'Svetla nad Sazavou', 'country_code' => 'CZ'],\n            ['name' => 'Turcianske Teplice', 'country_code' => 'SK'],\n            ['name' => 'Havelberg', 'country_code' => 'DE'],\n            ['name' => 'Ishqoshim', 'country_code' => 'TJ'],\n            ['name' => 'Varshets', 'country_code' => 'BG'],\n            ['name' => 'Isen', 'country_code' => 'JP'],\n            ['name' => 'Calatafimi', 'country_code' => 'IT'],\n            ['name' => 'Aguas Mornas', 'country_code' => 'BR'],\n            ['name' => 'Livigno', 'country_code' => 'IT'],\n            ['name' => 'Roseti', 'country_code' => 'RO'],\n            ['name' => 'Devon', 'country_code' => 'CA'],\n            ['name' => 'Lehliu-Gara', 'country_code' => 'RO'],\n            ['name' => 'Arcole', 'country_code' => 'IT'],\n            ['name' => 'Solbiate Olona', 'country_code' => 'IT'],\n            ['name' => 'Oneonta', 'country_code' => 'US'],\n            ['name' => 'Mamonas', 'country_code' => 'BR'],\n            ['name' => 'Phu Khiao', 'country_code' => 'TH'],\n            ['name' => 'Bua Chet', 'country_code' => 'TH'],\n            ['name' => 'Condom', 'country_code' => 'FR'],\n            ['name' => 'Lezo', 'country_code' => 'ES'],\n            ['name' => 'Khok Samrong', 'country_code' => 'TH'],\n            ['name' => 'Ribeira de Pena', 'country_code' => 'PT'],\n            ['name' => 'Agapovka', 'country_code' => 'RU'],\n            ['name' => 'Mont Belvieu', 'country_code' => 'US'],\n            ['name' => 'Bilokurakyne', 'country_code' => 'UA'],\n            ['name' => 'Teglas', 'country_code' => 'HU'],\n            ['name' => 'Challes-les-Eaux', 'country_code' => 'FR'],\n            ['name' => 'Guarda Mor', 'country_code' => 'BR'],\n            ['name' => 'Grossalmerode', 'country_code' => 'DE'],\n            ['name' => 'Porter', 'country_code' => 'US'],\n            ['name' => 'Sao Jose do Jacuri', 'country_code' => 'BR'],\n            ['name' => 'Cold Spring', 'country_code' => 'US'],\n            ['name' => 'Makarov', 'country_code' => 'RU'],\n            ['name' => 'San Giorgio in Bosco', 'country_code' => 'IT'],\n            ['name' => 'Velez Rubio', 'country_code' => 'ES'],\n            ['name' => 'Scriba', 'country_code' => 'US'],\n            ['name' => 'Harvard', 'country_code' => 'US'],\n            ['name' => 'Fossacesia', 'country_code' => 'IT'],\n            ['name' => 'Keene', 'country_code' => 'US'],\n            ['name' => 'Walnut Ridge', 'country_code' => 'US'],\n            ['name' => 'Topsfield', 'country_code' => 'US'],\n            ['name' => 'Krimpen aan de Lek', 'country_code' => 'NL'],\n            ['name' => 'Thompson s Station', 'country_code' => 'US'],\n            ['name' => 'Condor', 'country_code' => 'BR'],\n            ['name' => 'Schoffengrund', 'country_code' => 'DE'],\n            ['name' => 'Stickney', 'country_code' => 'US'],\n            ['name' => 'Aszod', 'country_code' => 'HU'],\n            ['name' => 'Ohio', 'country_code' => 'US'],\n            ['name' => 'Haparanda', 'country_code' => 'SE'],\n            ['name' => 'Burwell', 'country_code' => 'GB'],\n            ['name' => 'Spassk-Ryazanskiy', 'country_code' => 'RU'],\n            ['name' => 'Wentworth Falls', 'country_code' => 'AU'],\n            ['name' => 'Ploudalmezeau', 'country_code' => 'FR'],\n            ['name' => 'Quinzano d Oglio', 'country_code' => 'IT'],\n            ['name' => 'Sertao de Santana', 'country_code' => 'BR'],\n            ['name' => 'Green Hill', 'country_code' => 'US'],\n            ['name' => 'Raon-l Etape', 'country_code' => 'FR'],\n            ['name' => 'Seeboden', 'country_code' => 'AT'],\n            ['name' => 'Rossford', 'country_code' => 'US'],\n            ['name' => 'Blackwell', 'country_code' => 'US'],\n            ['name' => 'Aguas de Chapeco', 'country_code' => 'BR'],\n            ['name' => 'Serzhen -Yurt', 'country_code' => 'RU'],\n            ['name' => 'Outjo', 'country_code' => 'NA'],\n            ['name' => 'Candido Godoi', 'country_code' => 'BR'],\n            ['name' => 'Bad Marienberg', 'country_code' => 'DE'],\n            ['name' => 'Wathlingen', 'country_code' => 'DE'],\n            ['name' => 'Insuratei', 'country_code' => 'RO'],\n            ['name' => 'Nemsova', 'country_code' => 'SK'],\n            ['name' => 'Hiroo', 'country_code' => 'JP'],\n            ['name' => 'Andijk', 'country_code' => 'NL'],\n            ['name' => 'Scone', 'country_code' => 'AU'],\n            ['name' => 'Blonay', 'country_code' => 'CH'],\n            ['name' => 'Ottersweier', 'country_code' => 'DE'],\n            ['name' => 'Fairfield', 'country_code' => 'US'],\n            ['name' => 'Lawrence', 'country_code' => 'US'],\n            ['name' => 'Codevigo', 'country_code' => 'IT'],\n            ['name' => 'Barrow upon Soar', 'country_code' => 'GB'],\n            ['name' => 'Juva', 'country_code' => 'FI'],\n            ['name' => 'Ras Ijerri', 'country_code' => 'MA'],\n            ['name' => 'Roslyn Heights', 'country_code' => 'US'],\n            ['name' => 'Allegheny', 'country_code' => 'US'],\n            ['name' => 'Albanella', 'country_code' => 'IT'],\n            ['name' => 'Gignac', 'country_code' => 'FR'],\n            ['name' => 'South Hill', 'country_code' => 'US'],\n            ['name' => 'Spinazzola', 'country_code' => 'IT'],\n            ['name' => 'Vestnes', 'country_code' => 'NO'],\n            ['name' => 'Gata de Gorgos', 'country_code' => 'ES'],\n            ['name' => 'Earlswood', 'country_code' => 'GB'],\n            ['name' => 'Quirihue', 'country_code' => 'CL'],\n            ['name' => 'Waki', 'country_code' => 'JP'],\n            ['name' => 'Waikoloa Village', 'country_code' => 'US'],\n            ['name' => 'Veseli nad Luznici', 'country_code' => 'CZ'],\n            ['name' => 'Sehma', 'country_code' => 'DE'],\n            ['name' => 'Keyes', 'country_code' => 'US'],\n            ['name' => 'Cumming', 'country_code' => 'US'],\n            ['name' => 'Cregy-les-Meaux', 'country_code' => 'FR'],\n            ['name' => 'Zaratan', 'country_code' => 'ES'],\n            ['name' => 'Dettingen unter Teck', 'country_code' => 'DE'],\n            ['name' => 'Katikati', 'country_code' => 'NZ'],\n            ['name' => 'Portage', 'country_code' => 'US'],\n            ['name' => 'Linz am Rhein', 'country_code' => 'DE'],\n            ['name' => 'South Elmsall', 'country_code' => 'GB'],\n            ['name' => 'Fox Point', 'country_code' => 'US'],\n            ['name' => 'Castelgomberto', 'country_code' => 'IT'],\n            ['name' => 'Porto do Mangue', 'country_code' => 'BR'],\n            ['name' => 'Rosolina', 'country_code' => 'IT'],\n            ['name' => 'Bruguieres', 'country_code' => 'FR'],\n            ['name' => 'Beaudesert', 'country_code' => 'AU'],\n            ['name' => 'Slippery Rock', 'country_code' => 'US'],\n            ['name' => 'Clairton', 'country_code' => 'US'],\n            ['name' => 'Oakmont', 'country_code' => 'US'],\n            ['name' => 'Sao Francisco de Oliveira', 'country_code' => 'BR'],\n            ['name' => 'Fairview', 'country_code' => 'US'],\n            ['name' => 'Melhus', 'country_code' => 'NO'],\n            ['name' => 'Plaquemine', 'country_code' => 'US'],\n            ['name' => 'Agria', 'country_code' => 'GR'],\n            ['name' => 'Elkin', 'country_code' => 'US'],\n            ['name' => 'Nova Palma', 'country_code' => 'BR'],\n            ['name' => 'Beyram', 'country_code' => 'IR'],\n            ['name' => 'Bischofszell', 'country_code' => 'CH'],\n            ['name' => 'Plattsmouth', 'country_code' => 'US'],\n            ['name' => 'De Queen', 'country_code' => 'US'],\n            ['name' => 'Swanton', 'country_code' => 'US'],\n            ['name' => 'Hapeville', 'country_code' => 'US'],\n            ['name' => 'Laurence Harbor', 'country_code' => 'US'],\n            ['name' => 'Montech', 'country_code' => 'FR'],\n            ['name' => 'Plaidt', 'country_code' => 'DE'],\n            ['name' => 'L Isle-d Espagnac', 'country_code' => 'FR'],\n            ['name' => 'Marisopolis', 'country_code' => 'BR'],\n            ['name' => 'Zellingen', 'country_code' => 'DE'],\n            ['name' => 'Beaurains', 'country_code' => 'FR'],\n            ['name' => 'Pa Daet', 'country_code' => 'TH'],\n            ['name' => 'Bursledon', 'country_code' => 'GB'],\n            ['name' => 'Lurago d Erba', 'country_code' => 'IT'],\n            ['name' => 'Pedda Nandipadu', 'country_code' => 'IN'],\n            ['name' => 'Olula del Rio', 'country_code' => 'ES'],\n            ['name' => 'Eibiswald', 'country_code' => 'AT'],\n            ['name' => 'Sao Jose da Boa Vista', 'country_code' => 'BR'],\n            ['name' => 'Moudon', 'country_code' => 'CH'],\n            ['name' => 'Villaverla', 'country_code' => 'IT'],\n            ['name' => 'Atlantic', 'country_code' => 'US'],\n            ['name' => 'Blaby', 'country_code' => 'GB'],\n            ['name' => 'Ramillies-Offus', 'country_code' => 'BE'],\n            ['name' => 'Jowzdan', 'country_code' => 'IR'],\n            ['name' => 'Parentis-en-Born', 'country_code' => 'FR'],\n            ['name' => 'Sesto al Reghena', 'country_code' => 'IT'],\n            ['name' => 'Cagayancillo', 'country_code' => 'PH'],\n            ['name' => 'Granby', 'country_code' => 'US'],\n            ['name' => 'Friedland', 'country_code' => 'DE'],\n            ['name' => 'Horneburg', 'country_code' => 'DE'],\n            ['name' => 'Sant Arcangelo', 'country_code' => 'IT'],\n            ['name' => 'Dinkelscherben', 'country_code' => 'DE'],\n            ['name' => 'Brolo', 'country_code' => 'IT'],\n            ['name' => 'Torrellas de Llobregat', 'country_code' => 'ES'],\n            ['name' => 'Orindiuva', 'country_code' => 'BR'],\n            ['name' => 'Boudry', 'country_code' => 'CH'],\n            ['name' => 'Morro do Chapeu', 'country_code' => 'BR'],\n            ['name' => 'Yarmouth', 'country_code' => 'CA'],\n            ['name' => 'Mature', 'country_code' => 'BR'],\n            ['name' => 'Dan Khun Thot', 'country_code' => 'TH'],\n            ['name' => 'Altlussheim', 'country_code' => 'DE'],\n            ['name' => 'Russells Point', 'country_code' => 'US'],\n            ['name' => 'Martins Ferry', 'country_code' => 'US'],\n            ['name' => 'Bom Jardim de Minas', 'country_code' => 'BR'],\n            ['name' => 'Vargem Alegre', 'country_code' => 'BR'],\n            ['name' => 'Port Mathurin', 'country_code' => 'MU'],\n            ['name' => 'Calstock', 'country_code' => 'GB'],\n            ['name' => 'Dromana', 'country_code' => 'AU'],\n            ['name' => 'Douar Tassila Imassouane', 'country_code' => 'MA'],\n            ['name' => 'Milford', 'country_code' => 'US'],\n            ['name' => 'Dobrotvir', 'country_code' => 'UA'],\n            ['name' => 'Bispingen', 'country_code' => 'DE'],\n            ['name' => 'Weaverham', 'country_code' => 'GB'],\n            ['name' => 'Kingston', 'country_code' => 'US'],\n            ['name' => 'Bagrationovsk', 'country_code' => 'RU'],\n            ['name' => 'Schallstadt', 'country_code' => 'DE'],\n            ['name' => 'Bacsalmas', 'country_code' => 'HU'],\n            ['name' => 'Air Force Academy', 'country_code' => 'US'],\n            ['name' => 'De Soto', 'country_code' => 'US'],\n            ['name' => 'Blankenhain', 'country_code' => 'DE'],\n            ['name' => 'Novo Oriente', 'country_code' => 'BR'],\n            ['name' => 'Avon', 'country_code' => 'US'],\n            ['name' => 'Luis Domingues', 'country_code' => 'BR'],\n            ['name' => 'Silacayoapam', 'country_code' => 'MX'],\n            ['name' => 'Offanengo', 'country_code' => 'IT'],\n            ['name' => 'Barzano', 'country_code' => 'IT'],\n            ['name' => 'Casorate Sempione', 'country_code' => 'IT'],\n            ['name' => 'Castries', 'country_code' => 'FR'],\n            ['name' => 'New Inn', 'country_code' => 'GB'],\n            ['name' => 'Nilsia', 'country_code' => 'FI'],\n            ['name' => 'Salem', 'country_code' => 'US'],\n            ['name' => 'Leves', 'country_code' => 'FR'],\n            ['name' => 'Chrastava', 'country_code' => 'CZ'],\n            ['name' => 'Metelen', 'country_code' => 'DE'],\n            ['name' => 'Heathcote', 'country_code' => 'US'],\n            ['name' => 'Jaunay-Clan', 'country_code' => 'FR'],\n            ['name' => 'Balsthal', 'country_code' => 'CH'],\n            ['name' => 'Rittman', 'country_code' => 'US'],\n            ['name' => 'Bangor Base', 'country_code' => 'US'],\n            ['name' => 'Saint-Cyr-au-Mont-d Or', 'country_code' => 'FR'],\n            ['name' => 'Brignano Gera d Adda', 'country_code' => 'IT'],\n            ['name' => 'Lassance', 'country_code' => 'BR'],\n            ['name' => 'Anadarko', 'country_code' => 'US'],\n            ['name' => 'Slavicin', 'country_code' => 'CZ'],\n            ['name' => 'Barnstorf', 'country_code' => 'DE'],\n            ['name' => 'Bahman', 'country_code' => 'IR'],\n            ['name' => 'Dourges', 'country_code' => 'FR'],\n            ['name' => 'Botumirim', 'country_code' => 'BR'],\n            ['name' => 'Weiskirchen', 'country_code' => 'DE'],\n            ['name' => 'Laudun-l Ardoise', 'country_code' => 'FR'],\n            ['name' => 'Zell im Wiesental', 'country_code' => 'DE'],\n            ['name' => 'Schriever', 'country_code' => 'US'],\n            ['name' => 'Sommariva del Bosco', 'country_code' => 'IT'],\n            ['name' => 'Harrah', 'country_code' => 'US'],\n            ['name' => 'Monticello', 'country_code' => 'US'],\n            ['name' => 'Obergunzburg', 'country_code' => 'DE'],\n            ['name' => 'Podborany', 'country_code' => 'CZ'],\n            ['name' => 'Williamston', 'country_code' => 'US'],\n            ['name' => 'Homeacre-Lyndora', 'country_code' => 'US'],\n            ['name' => 'Oishida', 'country_code' => 'JP'],\n            ['name' => 'Brannenburg', 'country_code' => 'DE'],\n            ['name' => 'Doutor Severiano', 'country_code' => 'BR'],\n            ['name' => 'Bakum', 'country_code' => 'DE'],\n            ['name' => 'Nossa Senhora de Lourdes', 'country_code' => 'BR'],\n            ['name' => 'Pratt', 'country_code' => 'US'],\n            ['name' => 'Basehor', 'country_code' => 'US'],\n            ['name' => 'Dudenhofen', 'country_code' => 'DE'],\n            ['name' => 'Geneseo', 'country_code' => 'US'],\n            ['name' => 'Benfeld', 'country_code' => 'FR'],\n            ['name' => 'Millingen aan de Rijn', 'country_code' => 'NL'],\n            ['name' => 'Severance', 'country_code' => 'US'],\n            ['name' => 'Ocean Shores', 'country_code' => 'US'],\n            ['name' => 'San Michele Salentino', 'country_code' => 'IT'],\n            ['name' => 'Kondor', 'country_code' => 'IR'],\n            ['name' => 'Sciez', 'country_code' => 'FR'],\n            ['name' => 'La Habra Heights', 'country_code' => 'US'],\n            ['name' => 'Gangkofen', 'country_code' => 'DE'],\n            ['name' => 'San Ramon', 'country_code' => 'BO'],\n            ['name' => 'Caneva', 'country_code' => 'IT'],\n            ['name' => 'East Rochester', 'country_code' => 'US'],\n            ['name' => 'Cournonterral', 'country_code' => 'FR'],\n            ['name' => 'Dragalina', 'country_code' => 'RO'],\n            ['name' => 'Rio Sono', 'country_code' => 'BR'],\n            ['name' => 'Mulvane', 'country_code' => 'US'],\n            ['name' => 'Beerfelden', 'country_code' => 'DE'],\n            ['name' => 'Tiradentes', 'country_code' => 'BR'],\n            ['name' => 'Looe', 'country_code' => 'GB'],\n            ['name' => 'Bungay', 'country_code' => 'GB'],\n            ['name' => 'Camilla', 'country_code' => 'US'],\n            ['name' => 'Lynchburg', 'country_code' => 'US'],\n            ['name' => 'Hillandale', 'country_code' => 'US'],\n            ['name' => 'Yar-Sale', 'country_code' => 'RU'],\n            ['name' => 'Zarnovica', 'country_code' => 'SK'],\n            ['name' => 'Schwarzenfeld', 'country_code' => 'DE'],\n            ['name' => 'Grayvoron', 'country_code' => 'RU'],\n            ['name' => 'Taksony', 'country_code' => 'HU'],\n            ['name' => 'Weiler-Simmerberg', 'country_code' => 'DE'],\n            ['name' => 'Medolla', 'country_code' => 'IT'],\n            ['name' => 'Iacri', 'country_code' => 'BR'],\n            ['name' => 'Stratmoor', 'country_code' => 'US'],\n            ['name' => 'Saint-Jean-de-Boiseau', 'country_code' => 'FR'],\n            ['name' => 'Jonage', 'country_code' => 'FR'],\n            ['name' => 'Granville', 'country_code' => 'US'],\n            ['name' => 'Mestigmer', 'country_code' => 'MA'],\n            ['name' => 'Bon-Encontre', 'country_code' => 'FR'],\n            ['name' => 'Sernaglia della Battaglia', 'country_code' => 'IT'],\n            ['name' => 'Sao Martinho', 'country_code' => 'PT'],\n            ['name' => 'Pimonte', 'country_code' => 'IT'],\n            ['name' => 'Brejo dos Santos', 'country_code' => 'BR'],\n            ['name' => 'Ares', 'country_code' => 'FR'],\n            ['name' => 'Abercarn', 'country_code' => 'GB'],\n            ['name' => 'Asiago', 'country_code' => 'IT'],\n            ['name' => 'Juti', 'country_code' => 'BR'],\n            ['name' => 'Drabiv', 'country_code' => 'UA'],\n            ['name' => 'Pont-Saint-Martin', 'country_code' => 'FR'],\n            ['name' => 'Buena Vista', 'country_code' => 'US'],\n            ['name' => 'Lagoao', 'country_code' => 'BR'],\n            ['name' => 'Sardarapat', 'country_code' => 'AM'],\n            ['name' => 'Ida Ou Gailal', 'country_code' => 'MA'],\n            ['name' => 'Duanesburg', 'country_code' => 'US'],\n            ['name' => 'Prairie du Chien', 'country_code' => 'US'],\n            ['name' => 'Winterlingen', 'country_code' => 'DE'],\n            ['name' => 'Wiset Chaichan', 'country_code' => 'TH'],\n            ['name' => 'Drayton', 'country_code' => 'GB'],\n            ['name' => 'Silver Lake', 'country_code' => 'US'],\n            ['name' => 'Shalya', 'country_code' => 'RU'],\n            ['name' => 'Maiolati Spontini', 'country_code' => 'IT'],\n            ['name' => 'Laage', 'country_code' => 'DE'],\n            ['name' => 'Miraflores de la Sierra', 'country_code' => 'ES'],\n            ['name' => 'Laranjal', 'country_code' => 'BR'],\n            ['name' => 'Sarria de Ter', 'country_code' => 'ES'],\n            ['name' => 'Monzuno', 'country_code' => 'IT'],\n            ['name' => 'Irvington', 'country_code' => 'US'],\n            ['name' => 'Prestonsburg', 'country_code' => 'US'],\n            ['name' => 'Uetendorf', 'country_code' => 'CH'],\n            ['name' => 'Gomez Farias', 'country_code' => 'MX'],\n            ['name' => 'Hamilton', 'country_code' => 'US'],\n            ['name' => 'Rosenfeld', 'country_code' => 'DE'],\n            ['name' => 'Nagyecsed', 'country_code' => 'HU'],\n            ['name' => 'Selviria', 'country_code' => 'BR'],\n            ['name' => 'Zusmarshausen', 'country_code' => 'DE'],\n            ['name' => 'Neumarkt am Wallersee', 'country_code' => 'AT'],\n            ['name' => 'Lentilly', 'country_code' => 'FR'],\n            ['name' => 'Sidley', 'country_code' => 'GB'],\n            ['name' => 'Fockbek', 'country_code' => 'DE'],\n            ['name' => 'Marsillargues', 'country_code' => 'FR'],\n            ['name' => 'Moraine', 'country_code' => 'US'],\n            ['name' => 'Castle Donnington', 'country_code' => 'GB'],\n            ['name' => 'Penn Yan', 'country_code' => 'US'],\n            ['name' => 'Scenic Oaks', 'country_code' => 'US'],\n            ['name' => 'Lanchkhuti', 'country_code' => 'GE'],\n            ['name' => 'Ras Tabouda', 'country_code' => 'MA'],\n            ['name' => 'Gorliz-Elexalde', 'country_code' => 'ES'],\n            ['name' => 'Columbia', 'country_code' => 'US'],\n            ['name' => 'Moya', 'country_code' => 'ES'],\n            ['name' => 'Villanuova sul clisi', 'country_code' => 'IT'],\n            ['name' => 'Mendes Pimentel', 'country_code' => 'BR'],\n            ['name' => 'Seloncourt', 'country_code' => 'FR'],\n            ['name' => 'Genoa', 'country_code' => 'US'],\n            ['name' => 'Otis Orchards-East Farms', 'country_code' => 'US'],\n            ['name' => 'Sidney', 'country_code' => 'US'],\n            ['name' => 'Fagagna', 'country_code' => 'IT'],\n            ['name' => 'Herrera', 'country_code' => 'ES'],\n            ['name' => 'Boischatel', 'country_code' => 'CA'],\n            ['name' => 'Loutolim', 'country_code' => 'IN'],\n            ['name' => 'Dalaba', 'country_code' => 'GN'],\n            ['name' => 'Baykalovo', 'country_code' => 'RU'],\n            ['name' => 'Bauvin', 'country_code' => 'FR'],\n            ['name' => 'South Grafton', 'country_code' => 'AU'],\n            ['name' => 'Kolleda', 'country_code' => 'DE'],\n            ['name' => 'Loches', 'country_code' => 'FR'],\n            ['name' => 'Berdigestyakh', 'country_code' => 'RU'],\n            ['name' => 'Darnestown', 'country_code' => 'US'],\n            ['name' => 'Urnieta', 'country_code' => 'ES'],\n            ['name' => 'Collins', 'country_code' => 'US'],\n            ['name' => 'Hebron', 'country_code' => 'US'],\n            ['name' => 'Essingen', 'country_code' => 'DE'],\n            ['name' => 'Glendive', 'country_code' => 'US'],\n            ['name' => 'Cuddington', 'country_code' => 'GB'],\n            ['name' => 'Epernon', 'country_code' => 'FR'],\n            ['name' => 'Yorketown', 'country_code' => 'US'],\n            ['name' => 'Guichon', 'country_code' => 'UY'],\n            ['name' => 'Bizhbulyak', 'country_code' => 'RU'],\n            ['name' => 'Oficina Maria Elena', 'country_code' => 'CL'],\n            ['name' => 'Barra do Rocha', 'country_code' => 'BR'],\n            ['name' => 'Wem', 'country_code' => 'GB'],\n            ['name' => 'Santo Antonio de Lisboa', 'country_code' => 'BR'],\n            ['name' => 'Umkirch', 'country_code' => 'DE'],\n            ['name' => 'Liss', 'country_code' => 'GB'],\n            ['name' => 'Ingeniero Guillermo N. Juarez', 'country_code' => 'AR'],\n            ['name' => 'Nufringen', 'country_code' => 'DE'],\n            ['name' => 'Uzzano', 'country_code' => 'IT'],\n            ['name' => 'Lake Murray of Richland', 'country_code' => 'US'],\n            ['name' => 'Encs', 'country_code' => 'HU'],\n            ['name' => 'Subbiano', 'country_code' => 'IT'],\n            ['name' => 'Pont-Sainte-Marie', 'country_code' => 'FR'],\n            ['name' => 'Pereiro de Aguiar', 'country_code' => 'ES'],\n            ['name' => 'Commentry', 'country_code' => 'FR'],\n            ['name' => 'Belgioioso', 'country_code' => 'IT'],\n            ['name' => 'Lubz', 'country_code' => 'DE'],\n            ['name' => 'Klingenberg am Main', 'country_code' => 'DE'],\n            ['name' => 'Marolles-en-Hurepoix', 'country_code' => 'FR'],\n            ['name' => 'Beni Sidal Louta', 'country_code' => 'MA'],\n            ['name' => 'Tiyghmi', 'country_code' => 'MA'],\n            ['name' => 'Porto Cesareo', 'country_code' => 'IT'],\n            ['name' => 'Girvan', 'country_code' => 'GB'],\n            ['name' => 'Saidat', 'country_code' => 'MA'],\n            ['name' => 'Swanscombe', 'country_code' => 'GB'],\n            ['name' => 'Ironwood', 'country_code' => 'US'],\n            ['name' => 'Macambira', 'country_code' => 'BR'],\n            ['name' => 'Burghaun', 'country_code' => 'DE'],\n            ['name' => 'Halych', 'country_code' => 'UA'],\n            ['name' => 'Breal-sous-Montfort', 'country_code' => 'FR'],\n            ['name' => 'Tancherfi', 'country_code' => 'MA'],\n            ['name' => 'Collepasso', 'country_code' => 'IT'],\n            ['name' => 'Trochtelfingen', 'country_code' => 'DE'],\n            ['name' => 'Sealy', 'country_code' => 'US'],\n            ['name' => 'Iscar', 'country_code' => 'ES'],\n            ['name' => 'Falkenberg', 'country_code' => 'DE'],\n            ['name' => 'Aparan', 'country_code' => 'AM'],\n            ['name' => 'Deta', 'country_code' => 'RO'],\n            ['name' => 'Strambino', 'country_code' => 'IT'],\n            ['name' => 'Saint-Just-en-Chaussee', 'country_code' => 'FR'],\n            ['name' => 'San Marcello Pistoiese', 'country_code' => 'IT'],\n            ['name' => 'Beelen', 'country_code' => 'DE'],\n            ['name' => 'La Grand-Croix', 'country_code' => 'FR'],\n            ['name' => 'Torreglia', 'country_code' => 'IT'],\n            ['name' => 'Dmitriyev-L govskiy', 'country_code' => 'RU'],\n            ['name' => 'Emporia', 'country_code' => 'US'],\n            ['name' => 'Bekkevoort', 'country_code' => 'BE'],\n            ['name' => 'Corrego Fundo', 'country_code' => 'BR'],\n            ['name' => 'Carrollton', 'country_code' => 'US'],\n            ['name' => 'Wervicq-Sud', 'country_code' => 'FR'],\n            ['name' => 'Quintana', 'country_code' => 'BR'],\n            ['name' => 'Mundo Novo', 'country_code' => 'BR'],\n            ['name' => 'Ligonier', 'country_code' => 'US'],\n            ['name' => 'Inverness Highlands South', 'country_code' => 'US'],\n            ['name' => 'East Falmouth', 'country_code' => 'US'],\n            ['name' => 'Beilstein', 'country_code' => 'DE'],\n            ['name' => 'Upper Sandusky', 'country_code' => 'US'],\n            ['name' => 'Mer', 'country_code' => 'FR'],\n            ['name' => 'Gammertingen', 'country_code' => 'DE'],\n            ['name' => 'Burkhardtsdorf', 'country_code' => 'DE'],\n            ['name' => 'Vine Grove', 'country_code' => 'US'],\n            ['name' => 'Portel', 'country_code' => 'PT'],\n            ['name' => 'Wrestedt', 'country_code' => 'DE'],\n            ['name' => 'Padre Carvalho', 'country_code' => 'BR'],\n            ['name' => 'Kununurra', 'country_code' => 'AU'],\n            ['name' => 'Meersburg', 'country_code' => 'DE'],\n            ['name' => 'Martfu', 'country_code' => 'HU'],\n            ['name' => 'Litchfield Park', 'country_code' => 'US'],\n            ['name' => 'Devine', 'country_code' => 'US'],\n            ['name' => 'Dunningen', 'country_code' => 'DE'],\n            ['name' => 'Si Prachan', 'country_code' => 'TH'],\n            ['name' => 'Malesherbes', 'country_code' => 'FR'],\n            ['name' => 'Orange Lake', 'country_code' => 'US'],\n            ['name' => 'Mornant', 'country_code' => 'FR'],\n            ['name' => 'Rumelange', 'country_code' => 'LU'],\n            ['name' => 'Cambiano', 'country_code' => 'IT'],\n            ['name' => 'Gersheim', 'country_code' => 'DE'],\n            ['name' => 'Oelwein', 'country_code' => 'US'],\n            ['name' => 'Santo Domingo de la Calzada', 'country_code' => 'ES'],\n            ['name' => 'Zouar', 'country_code' => 'TD'],\n            ['name' => 'Abbadia San Salvatore', 'country_code' => 'IT'],\n            ['name' => 'Santa Margherita di Belice', 'country_code' => 'IT'],\n            ['name' => 'Wheathampstead', 'country_code' => 'GB'],\n            ['name' => 'Rosal', 'country_code' => 'ES'],\n            ['name' => 'Ixtapan del Oro', 'country_code' => 'MX'],\n            ['name' => 'Carthage', 'country_code' => 'US'],\n            ['name' => 'Crystal Lake', 'country_code' => 'US'],\n            ['name' => 'Grossbreitenbach', 'country_code' => 'DE'],\n            ['name' => 'Hurricane', 'country_code' => 'US'],\n            ['name' => 'Cottenham', 'country_code' => 'GB'],\n            ['name' => 'Machecoul', 'country_code' => 'FR'],\n            ['name' => 'Corinth', 'country_code' => 'US'],\n            ['name' => 'North Riverside', 'country_code' => 'US'],\n            ['name' => 'Le Blanc', 'country_code' => 'FR'],\n            ['name' => 'San Miguel de Salinas', 'country_code' => 'ES'],\n            ['name' => 'Cheverly', 'country_code' => 'US'],\n            ['name' => 'Savage', 'country_code' => 'US'],\n            ['name' => 'Sils', 'country_code' => 'ES'],\n            ['name' => 'Yermolayevo', 'country_code' => 'RU'],\n            ['name' => 'Aussillon', 'country_code' => 'FR'],\n            ['name' => 'Hjo', 'country_code' => 'SE'],\n            ['name' => 'Sengiley', 'country_code' => 'RU'],\n            ['name' => 'Huttlingen', 'country_code' => 'DE'],\n            ['name' => 'Bridgeport', 'country_code' => 'US'],\n            ['name' => 'Sao Francisco do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Kostelec nad Orlici', 'country_code' => 'CZ'],\n            ['name' => 'Mesoraca', 'country_code' => 'IT'],\n            ['name' => 'Valley City', 'country_code' => 'US'],\n            ['name' => 'Cairo', 'country_code' => 'US'],\n            ['name' => 'Francisco Alves', 'country_code' => 'BR'],\n            ['name' => 'Salem', 'country_code' => 'US'],\n            ['name' => 'Douglas', 'country_code' => 'US'],\n            ['name' => 'Tafraout', 'country_code' => 'MA'],\n            ['name' => 'Cacaulandia', 'country_code' => 'BR'],\n            ['name' => 'Greenville', 'country_code' => 'US'],\n            ['name' => 'Pegau', 'country_code' => 'DE'],\n            ['name' => 'Kittila', 'country_code' => 'FI'],\n            ['name' => 'Santes', 'country_code' => 'FR'],\n            ['name' => 'Gogolin', 'country_code' => 'PL'],\n            ['name' => 'Melut', 'country_code' => 'SS'],\n            ['name' => 'Orlovista', 'country_code' => 'US'],\n            ['name' => 'Eudora', 'country_code' => 'US'],\n            ['name' => 'Walkersville', 'country_code' => 'US'],\n            ['name' => 'Bischberg', 'country_code' => 'DE'],\n            ['name' => 'Usurbil', 'country_code' => 'ES'],\n            ['name' => 'Garrett', 'country_code' => 'US'],\n            ['name' => 'Zimmern ob Rottweil', 'country_code' => 'DE'],\n            ['name' => 'Bowleys Quarters', 'country_code' => 'US'],\n            ['name' => 'Naco', 'country_code' => 'MX'],\n            ['name' => 'Recoaro Terme', 'country_code' => 'IT'],\n            ['name' => 'Higashikyoshin', 'country_code' => 'JP'],\n            ['name' => 'San Canzian d lsonzo', 'country_code' => 'IT'],\n            ['name' => 'Horgos', 'country_code' => 'RS'],\n            ['name' => 'Prathai', 'country_code' => 'TH'],\n            ['name' => 'Littlestown', 'country_code' => 'US'],\n            ['name' => 'Lee', 'country_code' => 'US'],\n            ['name' => 'Rio Saliceto', 'country_code' => 'IT'],\n            ['name' => 'Parry Sound', 'country_code' => 'CA'],\n            ['name' => 'Anchieta', 'country_code' => 'BR'],\n            ['name' => 'Embrun', 'country_code' => 'FR'],\n            ['name' => 'Kappelrodeck', 'country_code' => 'DE'],\n            ['name' => 'Capim', 'country_code' => 'BR'],\n            ['name' => 'Sickte', 'country_code' => 'DE'],\n            ['name' => 'Szentlorinc', 'country_code' => 'HU'],\n            ['name' => 'Sardoa', 'country_code' => 'BR'],\n            ['name' => 'Burnet', 'country_code' => 'US'],\n            ['name' => 'Comandante Luis Piedra Buena', 'country_code' => 'AR'],\n            ['name' => 'Kerns', 'country_code' => 'CH'],\n            ['name' => 'Lincroft', 'country_code' => 'US'],\n            ['name' => 'Monte San Biagio', 'country_code' => 'IT'],\n            ['name' => 'Mszczonow', 'country_code' => 'PL'],\n            ['name' => 'Lezoux', 'country_code' => 'FR'],\n            ['name' => 'Toma', 'country_code' => 'JP'],\n            ['name' => 'Jordan', 'country_code' => 'US'],\n            ['name' => 'Talmaza', 'country_code' => 'MD'],\n            ['name' => 'Alpirsbach', 'country_code' => 'DE'],\n            ['name' => 'Sabrosa', 'country_code' => 'PT'],\n            ['name' => 'Gojar', 'country_code' => 'ES'],\n            ['name' => 'Hampstead', 'country_code' => 'US'],\n            ['name' => 'Ceggia', 'country_code' => 'IT'],\n            ['name' => 'Aurec-sur-Loire', 'country_code' => 'FR'],\n            ['name' => 'Tasco', 'country_code' => 'CO'],\n            ['name' => 'Carolina Beach', 'country_code' => 'US'],\n            ['name' => 'Mount Vernon', 'country_code' => 'US'],\n            ['name' => 'Ridgeway', 'country_code' => 'US'],\n            ['name' => 'Lionville', 'country_code' => 'US'],\n            ['name' => 'Tabuaco', 'country_code' => 'PT'],\n            ['name' => 'Oberboihingen', 'country_code' => 'DE'],\n            ['name' => 'Shamong', 'country_code' => 'US'],\n            ['name' => 'Pointe-Calumet', 'country_code' => 'CA'],\n            ['name' => 'Jussari', 'country_code' => 'BR'],\n            ['name' => 'Carrazeda de Anciaes', 'country_code' => 'PT'],\n            ['name' => 'La Glacerie', 'country_code' => 'FR'],\n            ['name' => 'Blaenavon', 'country_code' => 'GB'],\n            ['name' => 'Papudo', 'country_code' => 'CL'],\n            ['name' => 'Grybow', 'country_code' => 'PL'],\n            ['name' => 'Ramtown', 'country_code' => 'US'],\n            ['name' => 'Bethoncourt', 'country_code' => 'FR'],\n            ['name' => 'Terrasson-Lavilledieu', 'country_code' => 'FR'],\n            ['name' => 'Sao Juliao', 'country_code' => 'BR'],\n            ['name' => 'Grafenwohr', 'country_code' => 'DE'],\n            ['name' => 'San Giovanni al Natisone', 'country_code' => 'IT'],\n            ['name' => 'Santa Maria Yucuhiti', 'country_code' => 'MX'],\n            ['name' => 'Killingworth', 'country_code' => 'US'],\n            ['name' => 'Wittenburg', 'country_code' => 'DE'],\n            ['name' => 'Waldsee', 'country_code' => 'DE'],\n            ['name' => 'Cana', 'country_code' => 'SK'],\n            ['name' => 'Meredith', 'country_code' => 'US'],\n            ['name' => 'Rockford', 'country_code' => 'US'],\n            ['name' => 'Fenain', 'country_code' => 'FR'],\n            ['name' => 'Le Barcares', 'country_code' => 'FR'],\n            ['name' => 'Douar Oulad Jaber', 'country_code' => 'MA'],\n            ['name' => 'Steilacoom', 'country_code' => 'US'],\n            ['name' => 'Opp', 'country_code' => 'US'],\n            ['name' => 'Abilene', 'country_code' => 'US'],\n            ['name' => 'Warkworth', 'country_code' => 'NZ'],\n            ['name' => 'Nackenheim', 'country_code' => 'DE'],\n            ['name' => 'Fossalta di Portogruaro', 'country_code' => 'IT'],\n            ['name' => 'Sandown', 'country_code' => 'US'],\n            ['name' => 'Valdoie', 'country_code' => 'FR'],\n            ['name' => 'Wadomari', 'country_code' => 'JP'],\n            ['name' => 'Jegenstorf', 'country_code' => 'CH'],\n            ['name' => 'Rhome', 'country_code' => 'US'],\n            ['name' => 'Aptos', 'country_code' => 'US'],\n            ['name' => 'Lesina', 'country_code' => 'IT'],\n            ['name' => 'Povoacao', 'country_code' => 'PT'],\n            ['name' => 'Zell', 'country_code' => 'CH'],\n            ['name' => 'Belpre', 'country_code' => 'US'],\n            ['name' => 'Mudersbach', 'country_code' => 'DE'],\n            ['name' => 'Crockett', 'country_code' => 'US'],\n            ['name' => 'Zamberk', 'country_code' => 'CZ'],\n            ['name' => 'Ellenville', 'country_code' => 'US'],\n            ['name' => 'East End', 'country_code' => 'US'],\n            ['name' => 'Oranzherei', 'country_code' => 'RU'],\n            ['name' => 'Alexandra', 'country_code' => 'NZ'],\n            ['name' => 'Yazykovo', 'country_code' => 'RU'],\n            ['name' => 'Rushville', 'country_code' => 'US'],\n            ['name' => 'Cavaion Veronese', 'country_code' => 'IT'],\n            ['name' => 'Saint-Genis-les-Ollieres', 'country_code' => 'FR'],\n            ['name' => 'International Falls', 'country_code' => 'US'],\n            ['name' => 'Calcinate', 'country_code' => 'IT'],\n            ['name' => 'Luba', 'country_code' => 'PH'],\n            ['name' => 'Atengo', 'country_code' => 'MX'],\n            ['name' => 'Permet', 'country_code' => 'AL'],\n            ['name' => 'Piatra Olt', 'country_code' => 'RO'],\n            ['name' => 'Saint-Arnoult-en-Yvelines', 'country_code' => 'FR'],\n            ['name' => 'Naracoorte', 'country_code' => 'AU'],\n            ['name' => 'Adrianopolis', 'country_code' => 'BR'],\n            ['name' => 'Villennes-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Corowa', 'country_code' => 'AU'],\n            ['name' => 'Rogersville', 'country_code' => 'US'],\n            ['name' => 'Prosser', 'country_code' => 'US'],\n            ['name' => 'Groot-Valkenisse', 'country_code' => 'NL'],\n            ['name' => 'West Point', 'country_code' => 'US'],\n            ['name' => 'Carroll', 'country_code' => 'US'],\n            ['name' => 'Nephi', 'country_code' => 'US'],\n            ['name' => 'Richboro', 'country_code' => 'US'],\n            ['name' => 'Pulianas', 'country_code' => 'ES'],\n            ['name' => 'Cullowhee', 'country_code' => 'US'],\n            ['name' => 'Baud', 'country_code' => 'FR'],\n            ['name' => 'Adelebsen', 'country_code' => 'DE'],\n            ['name' => 'Arenas de San Pedro', 'country_code' => 'ES'],\n            ['name' => 'Headley', 'country_code' => 'GB'],\n            ['name' => 'Warmond', 'country_code' => 'NL'],\n            ['name' => 'Arpajon-sur-Cere', 'country_code' => 'FR'],\n            ['name' => 'Beaubassin East / Beaubassin-est', 'country_code' => 'CA'],\n            ['name' => 'Woolgoolga', 'country_code' => 'AU'],\n            ['name' => 'Chervonohryhorivka', 'country_code' => 'UA'],\n            ['name' => 'Saint-Martin-le-Vinoux', 'country_code' => 'FR'],\n            ['name' => 'Kizhinga', 'country_code' => 'RU'],\n            ['name' => 'Mims', 'country_code' => 'US'],\n            ['name' => 'Village of Oak Creek', 'country_code' => 'US'],\n            ['name' => 'Pieksamaen Maalaiskunta', 'country_code' => 'FI'],\n            ['name' => 'Newport', 'country_code' => 'US'],\n            ['name' => 'Jasper', 'country_code' => 'US'],\n            ['name' => 'Bela Vista do Toldo', 'country_code' => 'BR'],\n            ['name' => 'Gebenstorf', 'country_code' => 'CH'],\n            ['name' => 'Stavyshche', 'country_code' => 'UA'],\n            ['name' => 'Santa Maria do Erval', 'country_code' => 'BR'],\n            ['name' => 'Arandu', 'country_code' => 'BR'],\n            ['name' => 'Nitro', 'country_code' => 'US'],\n            ['name' => 'Nicotera', 'country_code' => 'IT'],\n            ['name' => 'Saint-Andre-de-Sangonis', 'country_code' => 'FR'],\n            ['name' => 'Rowley', 'country_code' => 'US'],\n            ['name' => 'Wainfleet', 'country_code' => 'CA'],\n            ['name' => 'Shimonita', 'country_code' => 'JP'],\n            ['name' => 'Usolye', 'country_code' => 'RU'],\n            ['name' => 'Okehampton', 'country_code' => 'GB'],\n            ['name' => 'San Carlos', 'country_code' => 'BO'],\n            ['name' => 'Rudiano', 'country_code' => 'IT'],\n            ['name' => 'Kronau', 'country_code' => 'DE'],\n            ['name' => 'Petropavlivs ka Borshchahivka', 'country_code' => 'UA'],\n            ['name' => 'Wharton', 'country_code' => 'US'],\n            ['name' => 'Serravalle Scrivia', 'country_code' => 'IT'],\n            ['name' => 'Traismauer', 'country_code' => 'AT'],\n            ['name' => 'Rupperswil', 'country_code' => 'CH'],\n            ['name' => 'Johnsburg', 'country_code' => 'US'],\n            ['name' => 'Fort Riley', 'country_code' => 'US'],\n            ['name' => 'Marlborough', 'country_code' => 'US'],\n            ['name' => 'Vinkivtsi', 'country_code' => 'UA'],\n            ['name' => 'Pirajuba', 'country_code' => 'BR'],\n            ['name' => 'Sunbury', 'country_code' => 'US'],\n            ['name' => 'Laa an der Thaya', 'country_code' => 'AT'],\n            ['name' => 'Turbiv', 'country_code' => 'UA'],\n            ['name' => 'Bujor', 'country_code' => 'RO'],\n            ['name' => 'Horsching', 'country_code' => 'AT'],\n            ['name' => 'Wollochet', 'country_code' => 'US'],\n            ['name' => 'Stockstadt am Rhein', 'country_code' => 'DE'],\n            ['name' => 'Chirsova', 'country_code' => 'MD'],\n            ['name' => 'Grandchamps-des-Fontaines', 'country_code' => 'FR'],\n            ['name' => 'Feytiat', 'country_code' => 'FR'],\n            ['name' => 'Goondiwindi', 'country_code' => 'AU'],\n            ['name' => 'Villa Cura Brochero', 'country_code' => 'AR'],\n            ['name' => 'Pulnoy', 'country_code' => 'FR'],\n            ['name' => 'Cogorno', 'country_code' => 'IT'],\n            ['name' => 'Keyser', 'country_code' => 'US'],\n            ['name' => 'Dohna', 'country_code' => 'DE'],\n            ['name' => 'Holmes Chapel', 'country_code' => 'GB'],\n            ['name' => 'Ichu', 'country_code' => 'BR'],\n            ['name' => 'Chizu', 'country_code' => 'JP'],\n            ['name' => 'Itirapua', 'country_code' => 'BR'],\n            ['name' => 'Beith', 'country_code' => 'GB'],\n            ['name' => 'Velyki Mosty', 'country_code' => 'UA'],\n            ['name' => 'Tanque d Arca', 'country_code' => 'BR'],\n            ['name' => 'Dussen', 'country_code' => 'NL'],\n            ['name' => 'Charbonnieres-les-Bains', 'country_code' => 'FR'],\n            ['name' => 'Trevelin', 'country_code' => 'AR'],\n            ['name' => 'Dadaab', 'country_code' => 'KE'],\n            ['name' => 'Vanzaghello', 'country_code' => 'IT'],\n            ['name' => 'Kathleen', 'country_code' => 'US'],\n            ['name' => 'Ait Bou Madhi', 'country_code' => 'DZ'],\n            ['name' => 'Combee Settlement', 'country_code' => 'US'],\n            ['name' => 'Henderson', 'country_code' => 'US'],\n            ['name' => 'Mahdalynivka', 'country_code' => 'UA'],\n            ['name' => 'Cynthiana', 'country_code' => 'US'],\n            ['name' => 'Tabor City', 'country_code' => 'US'],\n            ['name' => 'North Fort Lewis', 'country_code' => 'US'],\n            ['name' => 'Cramahe', 'country_code' => 'CA'],\n            ['name' => 'Fenton', 'country_code' => 'US'],\n            ['name' => 'Beauceville', 'country_code' => 'CA'],\n            ['name' => 'Pinhalao', 'country_code' => 'BR'],\n            ['name' => 'Ihringen', 'country_code' => 'DE'],\n            ['name' => 'Buq ata', 'country_code' => 'IL'],\n            ['name' => 'West Hattiesburg', 'country_code' => 'US'],\n            ['name' => 'North Middlesex', 'country_code' => 'CA'],\n            ['name' => 'Karmir Gyukh', 'country_code' => 'AM'],\n            ['name' => 'Armamar', 'country_code' => 'PT'],\n            ['name' => 'Hronov', 'country_code' => 'CZ'],\n            ['name' => 'Allegan', 'country_code' => 'US'],\n            ['name' => 'Dacula', 'country_code' => 'US'],\n            ['name' => 'Saint-Quentin-Fallavier', 'country_code' => 'FR'],\n            ['name' => 'Matarnia', 'country_code' => 'PL'],\n            ['name' => 'Canejan', 'country_code' => 'FR'],\n            ['name' => 'Schuyler', 'country_code' => 'US'],\n            ['name' => 'Tipton', 'country_code' => 'US'],\n            ['name' => 'Clarkston Heights-Vineland', 'country_code' => 'US'],\n            ['name' => 'Tortorici', 'country_code' => 'IT'],\n            ['name' => 'Vidal Ramos', 'country_code' => 'BR'],\n            ['name' => 'Galax', 'country_code' => 'US'],\n            ['name' => 'Messini', 'country_code' => 'GR'],\n            ['name' => 'Ravarino', 'country_code' => 'IT'],\n            ['name' => 'San Polo d Enza in Caviano', 'country_code' => 'IT'],\n            ['name' => 'Palosco', 'country_code' => 'IT'],\n            ['name' => 'Mattinata', 'country_code' => 'IT'],\n            ['name' => 'Baixio', 'country_code' => 'BR'],\n            ['name' => 'Jan Phyl Village', 'country_code' => 'US'],\n            ['name' => 'Swarthmore', 'country_code' => 'US'],\n            ['name' => 'Krk', 'country_code' => 'HR'],\n            ['name' => 'Izumizaki', 'country_code' => 'JP'],\n            ['name' => 'Neumarkt-Sankt Veit', 'country_code' => 'DE'],\n            ['name' => 'Chipping Norton', 'country_code' => 'GB'],\n            ['name' => 'Carmel Hamlet', 'country_code' => 'US'],\n            ['name' => 'Kalefeld', 'country_code' => 'DE'],\n            ['name' => 'Bondorf', 'country_code' => 'DE'],\n            ['name' => 'Dobrany', 'country_code' => 'CZ'],\n            ['name' => 'Immendingen', 'country_code' => 'DE'],\n            ['name' => 'Toledo', 'country_code' => 'BR'],\n            ['name' => 'Lazcano', 'country_code' => 'ES'],\n            ['name' => 'Hachenburg', 'country_code' => 'DE'],\n            ['name' => 'Walluf', 'country_code' => 'DE'],\n            ['name' => 'Maarn', 'country_code' => 'NL'],\n            ['name' => 'Staraya Mayna', 'country_code' => 'RU'],\n            ['name' => 'Arrinj', 'country_code' => 'AM'],\n            ['name' => 'Gladewater', 'country_code' => 'US'],\n            ['name' => 'Zalaszentgrot', 'country_code' => 'HU'],\n            ['name' => 'Litzendorf', 'country_code' => 'DE'],\n            ['name' => 'Iowa Park', 'country_code' => 'US'],\n            ['name' => 'Migne', 'country_code' => 'FR'],\n            ['name' => 'Yaphank', 'country_code' => 'US'],\n            ['name' => 'St. John', 'country_code' => 'US'],\n            ['name' => 'Inhauma', 'country_code' => 'BR'],\n            ['name' => 'Penon Blanco', 'country_code' => 'MX'],\n            ['name' => 'Amapora', 'country_code' => 'BR'],\n            ['name' => 'Mattapoisett', 'country_code' => 'US'],\n            ['name' => 'Crocetta del Montello', 'country_code' => 'IT'],\n            ['name' => 'Svislach', 'country_code' => 'BY'],\n            ['name' => 'Theodore', 'country_code' => 'US'],\n            ['name' => 'Souq at Tlata des Loulad', 'country_code' => 'MA'],\n            ['name' => 'Fegyvernek', 'country_code' => 'HU'],\n            ['name' => 'Karasburg', 'country_code' => 'NA'],\n            ['name' => 'Paraiso', 'country_code' => 'BR'],\n            ['name' => 'Mercedes', 'country_code' => 'PH'],\n            ['name' => 'Pepper Pike', 'country_code' => 'US'],\n            ['name' => 'Red Lion', 'country_code' => 'US'],\n            ['name' => 'Vrbove', 'country_code' => 'SK'],\n            ['name' => 'Verkhnevilyuysk', 'country_code' => 'RU'],\n            ['name' => 'Echapora', 'country_code' => 'BR'],\n            ['name' => 'Deisslingen', 'country_code' => 'DE'],\n            ['name' => 'Hamlet', 'country_code' => 'US'],\n            ['name' => 'Olival', 'country_code' => 'PT'],\n            ['name' => 'Fazenda Nova', 'country_code' => 'BR'],\n            ['name' => 'Pentling', 'country_code' => 'DE'],\n            ['name' => 'Spirano', 'country_code' => 'IT'],\n            ['name' => 'Carry-le-Rouet', 'country_code' => 'FR'],\n            ['name' => 'El Main', 'country_code' => 'DZ'],\n            ['name' => 'Myrina', 'country_code' => 'GR'],\n            ['name' => 'Granby', 'country_code' => 'US'],\n            ['name' => 'White Oak', 'country_code' => 'US'],\n            ['name' => 'Amqui', 'country_code' => 'CA'],\n            ['name' => 'Axams', 'country_code' => 'AT'],\n            ['name' => 'Norderney', 'country_code' => 'DE'],\n            ['name' => 'Dotlingen', 'country_code' => 'DE'],\n            ['name' => 'Wolfeboro', 'country_code' => 'US'],\n            ['name' => 'Chambourcy', 'country_code' => 'FR'],\n            ['name' => 'Kis', 'country_code' => 'AZ'],\n            ['name' => 'Sainte-Catherine-de-la-Jacques-Cartier', 'country_code' => 'CA'],\n            ['name' => 'Trasacco', 'country_code' => 'IT'],\n            ['name' => 'Vila Boa', 'country_code' => 'BR'],\n            ['name' => 'Georges', 'country_code' => 'US'],\n            ['name' => 'Comstock Northwest', 'country_code' => 'US'],\n            ['name' => 'Allariz', 'country_code' => 'ES'],\n            ['name' => 'Florian', 'country_code' => 'CO'],\n            ['name' => 'Enrique Villanueva', 'country_code' => 'PH'],\n            ['name' => 'Mesoy', 'country_code' => 'NO'],\n            ['name' => 'Islamorada, Village of Islands', 'country_code' => 'US'],\n            ['name' => 'Horezu', 'country_code' => 'RO'],\n            ['name' => 'Astrakhan', 'country_code' => 'KZ'],\n            ['name' => 'Markt Sankt Florian', 'country_code' => 'AT'],\n            ['name' => 'Teplyk', 'country_code' => 'UA'],\n            ['name' => 'San Benigno Canavese', 'country_code' => 'IT'],\n            ['name' => 'Anhembi', 'country_code' => 'BR'],\n            ['name' => 'Mascotte', 'country_code' => 'US'],\n            ['name' => 'Mnisek pod Brdy', 'country_code' => 'CZ'],\n            ['name' => 'Bataszek', 'country_code' => 'HU'],\n            ['name' => 'Roveredo in Piano', 'country_code' => 'IT'],\n            ['name' => 'Marly-la-Ville', 'country_code' => 'FR'],\n            ['name' => 'Cobleskill', 'country_code' => 'US'],\n            ['name' => 'Newarthill', 'country_code' => 'GB'],\n            ['name' => 'Loon-Plage', 'country_code' => 'FR'],\n            ['name' => 'Almenara', 'country_code' => 'ES'],\n            ['name' => 'Wagna', 'country_code' => 'AT'],\n            ['name' => 'Jedlicze', 'country_code' => 'PL'],\n            ['name' => 'Farebersviller', 'country_code' => 'FR'],\n            ['name' => 'Saint-Denis-les-Bourg', 'country_code' => 'FR'],\n            ['name' => 'Bonchamp-les-Laval', 'country_code' => 'FR'],\n            ['name' => 'Sertao', 'country_code' => 'BR'],\n            ['name' => 'Zubtsov', 'country_code' => 'RU'],\n            ['name' => 'Jouars-Pontchartrain', 'country_code' => 'FR'],\n            ['name' => 'Pass Christian', 'country_code' => 'US'],\n            ['name' => 'Lochau', 'country_code' => 'AT'],\n            ['name' => 'Balkany', 'country_code' => 'HU'],\n            ['name' => 'Change', 'country_code' => 'FR'],\n            ['name' => 'Neustadt', 'country_code' => 'DE'],\n            ['name' => 'Cobram', 'country_code' => 'AU'],\n            ['name' => 'Hutthurm', 'country_code' => 'DE'],\n            ['name' => 'Jeanerette', 'country_code' => 'US'],\n            ['name' => 'Delano', 'country_code' => 'US'],\n            ['name' => 'Waveland', 'country_code' => 'US'],\n            ['name' => 'Itaruma', 'country_code' => 'BR'],\n            ['name' => 'Besnate', 'country_code' => 'IT'],\n            ['name' => 'Remanzacco', 'country_code' => 'IT'],\n            ['name' => 'North Hobbs', 'country_code' => 'US'],\n            ['name' => 'Luisburgo', 'country_code' => 'BR'],\n            ['name' => 'Fronton', 'country_code' => 'FR'],\n            ['name' => 'Mallemort', 'country_code' => 'FR'],\n            ['name' => 'Nattheim', 'country_code' => 'DE'],\n            ['name' => 'Forest Hills', 'country_code' => 'US'],\n            ['name' => 'Stonewood', 'country_code' => 'GB'],\n            ['name' => 'Lubizhde', 'country_code' => 'XK'],\n            ['name' => 'Marsh Harbour', 'country_code' => 'BS'],\n            ['name' => 'El Rio', 'country_code' => 'US'],\n            ['name' => 'Tarleton', 'country_code' => 'GB'],\n            ['name' => 'Nenzing', 'country_code' => 'AT'],\n            ['name' => 'Altkirch', 'country_code' => 'FR'],\n            ['name' => 'Delle', 'country_code' => 'FR'],\n            ['name' => 'Cumberland', 'country_code' => 'US'],\n            ['name' => 'Lely Resort', 'country_code' => 'US'],\n            ['name' => 'Carloforte', 'country_code' => 'IT'],\n            ['name' => 'Marton', 'country_code' => 'NZ'],\n            ['name' => 'Poggiardo', 'country_code' => 'IT'],\n            ['name' => 'Ihsim', 'country_code' => 'SY'],\n            ['name' => 'East Porterville', 'country_code' => 'US'],\n            ['name' => 'Clarenville', 'country_code' => 'CA'],\n            ['name' => 'Kuchen', 'country_code' => 'DE'],\n            ['name' => 'Bonstetten', 'country_code' => 'CH'],\n            ['name' => 'Munhoz', 'country_code' => 'BR'],\n            ['name' => 'Ranchettes', 'country_code' => 'US'],\n            ['name' => 'Mazan', 'country_code' => 'FR'],\n            ['name' => 'Montebello Ionico', 'country_code' => 'IT'],\n            ['name' => 'Nouzonville', 'country_code' => 'FR'],\n            ['name' => 'Sotnikovo', 'country_code' => 'RU'],\n            ['name' => 'Boiling Spring Lakes', 'country_code' => 'US'],\n            ['name' => 'Wannweil', 'country_code' => 'DE'],\n            ['name' => 'Geisingen', 'country_code' => 'DE'],\n            ['name' => 'Lioni', 'country_code' => 'IT'],\n            ['name' => 'Nogent-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Port Saint John s', 'country_code' => 'ZA'],\n            ['name' => 'Rio Grande do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Mikhaylovka', 'country_code' => 'RU'],\n            ['name' => 'Phanna Nikhom', 'country_code' => 'TH'],\n            ['name' => 'Obererli', 'country_code' => 'CH'],\n            ['name' => 'Sao Francisco de Goias', 'country_code' => 'BR'],\n            ['name' => 'Oberlungwitz', 'country_code' => 'DE'],\n            ['name' => 'Godega di Sant Urbano', 'country_code' => 'IT'],\n            ['name' => 'Nor Geghi', 'country_code' => 'AM'],\n            ['name' => 'Guidizzolo', 'country_code' => 'IT'],\n            ['name' => 'Stone Mountain', 'country_code' => 'US'],\n            ['name' => 'Ashburnham', 'country_code' => 'US'],\n            ['name' => 'Mont-Joli', 'country_code' => 'CA'],\n            ['name' => 'Campo Limpo', 'country_code' => 'BR'],\n            ['name' => 'Gaiarine', 'country_code' => 'IT'],\n            ['name' => 'Octeville-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Casorezzo', 'country_code' => 'IT'],\n            ['name' => 'Tammela', 'country_code' => 'FI'],\n            ['name' => 'Hohenlockstedt', 'country_code' => 'DE'],\n            ['name' => 'Sao Francisco de Sales', 'country_code' => 'BR'],\n            ['name' => 'Sursk', 'country_code' => 'RU'],\n            ['name' => 'Glucksburg', 'country_code' => 'DE'],\n            ['name' => 'Zelezny Brod', 'country_code' => 'CZ'],\n            ['name' => 'Kupferzell', 'country_code' => 'DE'],\n            ['name' => 'Covedale', 'country_code' => 'US'],\n            ['name' => 'California', 'country_code' => 'US'],\n            ['name' => 'Ardud', 'country_code' => 'RO'],\n            ['name' => 'Unterpremstatten', 'country_code' => 'AT'],\n            ['name' => 'Oberthal', 'country_code' => 'DE'],\n            ['name' => 'St. Robert', 'country_code' => 'US'],\n            ['name' => 'New Castle', 'country_code' => 'US'],\n            ['name' => 'Gildersome', 'country_code' => 'GB'],\n            ['name' => 'Rotha', 'country_code' => 'DE'],\n            ['name' => 'Oakland', 'country_code' => 'US'],\n            ['name' => 'Rechberghausen', 'country_code' => 'DE'],\n            ['name' => 'Mortagne-sur-Sevre', 'country_code' => 'FR'],\n            ['name' => 'Dabrowa Bialostocka', 'country_code' => 'PL'],\n            ['name' => 'Ploneour-Lanvern', 'country_code' => 'FR'],\n            ['name' => 'Figueira de Castelo Rodrigo', 'country_code' => 'PT'],\n            ['name' => 'Pernio', 'country_code' => 'FI'],\n            ['name' => 'Saleilles', 'country_code' => 'FR'],\n            ['name' => 'Ghidighici', 'country_code' => 'MD'],\n            ['name' => 'Lebanon', 'country_code' => 'US'],\n            ['name' => 'Wainwright', 'country_code' => 'CA'],\n            ['name' => 'Noyal-sur-Vilaine', 'country_code' => 'FR'],\n            ['name' => 'Ivankovo', 'country_code' => 'HR'],\n            ['name' => 'Birstein', 'country_code' => 'DE'],\n            ['name' => 'Elven', 'country_code' => 'FR'],\n            ['name' => 'Burntisland', 'country_code' => 'GB'],\n            ['name' => 'Howland Center', 'country_code' => 'US'],\n            ['name' => 'Tortora', 'country_code' => 'IT'],\n            ['name' => 'Silvianopolis', 'country_code' => 'BR'],\n            ['name' => 'Mamers', 'country_code' => 'FR'],\n            ['name' => 'Donji Miholjac', 'country_code' => 'HR'],\n            ['name' => 'Sao Goncalo do Abaete', 'country_code' => 'BR'],\n            ['name' => 'Sao Jose de Gaiana', 'country_code' => 'BR'],\n            ['name' => 'Pigeon Forge', 'country_code' => 'US'],\n            ['name' => 'Gmund am Tegernsee', 'country_code' => 'DE'],\n            ['name' => 'Aradan', 'country_code' => 'IR'],\n            ['name' => 'Huntington Woods', 'country_code' => 'US'],\n            ['name' => 'Lower Nazareth', 'country_code' => 'US'],\n            ['name' => 'Rong Kham', 'country_code' => 'TH'],\n            ['name' => 'North East', 'country_code' => 'US'],\n            ['name' => 'Progresso', 'country_code' => 'BR'],\n            ['name' => 'Tazouta', 'country_code' => 'MA'],\n            ['name' => 'Taiacu', 'country_code' => 'BR'],\n            ['name' => 'Hooge Zwaluwe', 'country_code' => 'NL'],\n            ['name' => 'Blahovishchenske', 'country_code' => 'UA'],\n            ['name' => 'Viator', 'country_code' => 'ES'],\n            ['name' => 'Maffra', 'country_code' => 'AU'],\n            ['name' => 'Richmond', 'country_code' => 'US'],\n            ['name' => 'Antis', 'country_code' => 'US'],\n            ['name' => 'Ingeniero Jacobacci', 'country_code' => 'AR'],\n            ['name' => 'Pontal do Araguaia', 'country_code' => 'BR'],\n            ['name' => 'Fairwood', 'country_code' => 'US'],\n            ['name' => 'Kingston', 'country_code' => 'US'],\n            ['name' => 'Tahmoor', 'country_code' => 'AU'],\n            ['name' => 'East Glenville', 'country_code' => 'US'],\n            ['name' => 'Guer', 'country_code' => 'FR'],\n            ['name' => 'Santa Cruz do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Lake Alfred', 'country_code' => 'US'],\n            ['name' => 'Nong Song Hong', 'country_code' => 'TH'],\n            ['name' => 'Plescop', 'country_code' => 'FR'],\n            ['name' => 'Zeitlarn', 'country_code' => 'DE'],\n            ['name' => 'Santa Filomena', 'country_code' => 'BR'],\n            ['name' => 'Izon', 'country_code' => 'FR'],\n            ['name' => 'Snyderville', 'country_code' => 'US'],\n            ['name' => 'Morris Plains', 'country_code' => 'US'],\n            ['name' => 'Lambert s Bay', 'country_code' => 'ZA'],\n            ['name' => 'Pinxton', 'country_code' => 'GB'],\n            ['name' => 'Powell', 'country_code' => 'US'],\n            ['name' => 'Glyncorrwg', 'country_code' => 'GB'],\n            ['name' => 'Contrecoeur', 'country_code' => 'CA'],\n            ['name' => 'Piana degli Albanesi', 'country_code' => 'IT'],\n            ['name' => 'Heric', 'country_code' => 'FR'],\n            ['name' => 'Hampshire', 'country_code' => 'US'],\n            ['name' => 'Enola', 'country_code' => 'US'],\n            ['name' => 'Ingeniero Luis A. Huergo', 'country_code' => 'AR'],\n            ['name' => 'Sainghin-en-Weppes', 'country_code' => 'FR'],\n            ['name' => 'Sarrians', 'country_code' => 'FR'],\n            ['name' => 'Berghem', 'country_code' => 'NL'],\n            ['name' => 'Salton City', 'country_code' => 'US'],\n            ['name' => 'Blue Bell', 'country_code' => 'US'],\n            ['name' => 'Corcoran', 'country_code' => 'US'],\n            ['name' => 'Blanzy', 'country_code' => 'FR'],\n            ['name' => 'Collecorvino', 'country_code' => 'IT'],\n            ['name' => 'Ocean City', 'country_code' => 'US'],\n            ['name' => 'Dives-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'General Sampaio', 'country_code' => 'BR'],\n            ['name' => 'Walker', 'country_code' => 'US'],\n            ['name' => 'St. James', 'country_code' => 'US'],\n            ['name' => 'Spangenberg', 'country_code' => 'DE'],\n            ['name' => 'Bir Anzarane', 'country_code' => 'MA'],\n            ['name' => 'Kirchbichl', 'country_code' => 'AT'],\n            ['name' => 'Ebersdorf bei Coburg', 'country_code' => 'DE'],\n            ['name' => 'Woodend', 'country_code' => 'AU'],\n            ['name' => 'Puebla de la Calzada', 'country_code' => 'ES'],\n            ['name' => 'Hvardiys ke', 'country_code' => 'UA'],\n            ['name' => 'Geghahovit', 'country_code' => 'AM'],\n            ['name' => 'Inaciolandia', 'country_code' => 'BR'],\n            ['name' => 'Camp Swift', 'country_code' => 'US'],\n            ['name' => 'South Run', 'country_code' => 'US'],\n            ['name' => 'Pecan Plantation', 'country_code' => 'US'],\n            ['name' => 'Nieul-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Vernaison', 'country_code' => 'FR'],\n            ['name' => 'Tapioszecso', 'country_code' => 'HU'],\n            ['name' => 'Cadeo', 'country_code' => 'IT'],\n            ['name' => 'Elva', 'country_code' => 'EE'],\n            ['name' => 'New Whiteland', 'country_code' => 'US'],\n            ['name' => 'La Roquette-sur-Siagne', 'country_code' => 'FR'],\n            ['name' => 'Sylvester', 'country_code' => 'US'],\n            ['name' => 'Balabyne', 'country_code' => 'UA'],\n            ['name' => 'Boonville', 'country_code' => 'US'],\n            ['name' => 'Inverloch', 'country_code' => 'AU'],\n            ['name' => 'Pouso Alto', 'country_code' => 'BR'],\n            ['name' => 'Boothwyn', 'country_code' => 'US'],\n            ['name' => 'Moergestel', 'country_code' => 'NL'],\n            ['name' => 'Orange Beach', 'country_code' => 'US'],\n            ['name' => 'Silandro', 'country_code' => 'IT'],\n            ['name' => 'La Ville-aux-Dames', 'country_code' => 'FR'],\n            ['name' => 'Serraria', 'country_code' => 'BR'],\n            ['name' => 'Buena Vista', 'country_code' => 'US'],\n            ['name' => 'Solvay', 'country_code' => 'US'],\n            ['name' => 'Whittlesea', 'country_code' => 'AU'],\n            ['name' => 'Champion Heights', 'country_code' => 'US'],\n            ['name' => 'East Foothills', 'country_code' => 'US'],\n            ['name' => 'South Gate Ridge', 'country_code' => 'US'],\n            ['name' => 'Bodelshausen', 'country_code' => 'DE'],\n            ['name' => 'Newberry', 'country_code' => 'US'],\n            ['name' => 'Brena Baja', 'country_code' => 'ES'],\n            ['name' => 'Amrharas', 'country_code' => 'MA'],\n            ['name' => 'Niedergorsdorf', 'country_code' => 'DE'],\n            ['name' => 'Noormarkku', 'country_code' => 'FI'],\n            ['name' => 'Sao Joao do Sabugi', 'country_code' => 'BR'],\n            ['name' => 'Cammarata', 'country_code' => 'IT'],\n            ['name' => 'Marnaz', 'country_code' => 'FR'],\n            ['name' => 'Mayfield', 'country_code' => 'US'],\n            ['name' => 'Carentan', 'country_code' => 'FR'],\n            ['name' => 'Lardy', 'country_code' => 'FR'],\n            ['name' => 'Esvres', 'country_code' => 'FR'],\n            ['name' => 'Glenwood', 'country_code' => 'US'],\n            ['name' => 'Vesyegonsk', 'country_code' => 'RU'],\n            ['name' => 'Homer', 'country_code' => 'US'],\n            ['name' => 'Aire-sur-l Adour', 'country_code' => 'FR'],\n            ['name' => 'Rolde', 'country_code' => 'NL'],\n            ['name' => 'Zhur', 'country_code' => 'XK'],\n            ['name' => 'West Greenwich', 'country_code' => 'US'],\n            ['name' => 'Trans-en-Provence', 'country_code' => 'FR'],\n            ['name' => 'Kenedy', 'country_code' => 'US'],\n            ['name' => 'Pimmit Hills', 'country_code' => 'US'],\n            ['name' => 'Casalbordino', 'country_code' => 'IT'],\n            ['name' => 'Edinboro', 'country_code' => 'US'],\n            ['name' => 'Murashi', 'country_code' => 'RU'],\n            ['name' => 'Domusnovas', 'country_code' => 'IT'],\n            ['name' => 'Fruit Heights', 'country_code' => 'US'],\n            ['name' => 'Addis', 'country_code' => 'US'],\n            ['name' => 'Montgomery', 'country_code' => 'US'],\n            ['name' => 'Soledade de Minas', 'country_code' => 'BR'],\n            ['name' => 'Nikolo-Berezovka', 'country_code' => 'RU'],\n            ['name' => 'Colombia', 'country_code' => 'BR'],\n            ['name' => 'Swanwick', 'country_code' => 'GB'],\n            ['name' => 'Morahalom', 'country_code' => 'HU'],\n            ['name' => 'Gloggnitz', 'country_code' => 'AT'],\n            ['name' => 'Biasca', 'country_code' => 'CH'],\n            ['name' => 'Demidov', 'country_code' => 'RU'],\n            ['name' => 'Sao Joao da Ponta', 'country_code' => 'BR'],\n            ['name' => 'Rohrbach', 'country_code' => 'DE'],\n            ['name' => 'Wailea', 'country_code' => 'US'],\n            ['name' => 'Nicolas Flores', 'country_code' => 'MX'],\n            ['name' => 'Maule', 'country_code' => 'FR'],\n            ['name' => 'Khur', 'country_code' => 'IR'],\n            ['name' => 'Hustopece', 'country_code' => 'CZ'],\n            ['name' => 'Sittensen', 'country_code' => 'DE'],\n            ['name' => 'Motta San Giovanni', 'country_code' => 'IT'],\n            ['name' => 'Outes', 'country_code' => 'ES'],\n            ['name' => 'Poppi', 'country_code' => 'IT'],\n            ['name' => 'Barao', 'country_code' => 'BR'],\n            ['name' => 'Tarazona de la Mancha', 'country_code' => 'ES'],\n            ['name' => 'Nabburg', 'country_code' => 'DE'],\n            ['name' => 'Tsarevo', 'country_code' => 'BG'],\n            ['name' => 'Saint-Zacharie', 'country_code' => 'FR'],\n            ['name' => 'Curcani', 'country_code' => 'RO'],\n            ['name' => 'Bad Honningen', 'country_code' => 'DE'],\n            ['name' => 'Savinesti', 'country_code' => 'RO'],\n            ['name' => 'Hethersett', 'country_code' => 'GB'],\n            ['name' => 'Liverdun', 'country_code' => 'FR'],\n            ['name' => 'Saint-Symphorien-d Ozon', 'country_code' => 'FR'],\n            ['name' => 'Verona', 'country_code' => 'US'],\n            ['name' => 'Chelan', 'country_code' => 'US'],\n            ['name' => 'Saint-Jory', 'country_code' => 'FR'],\n            ['name' => 'Pea Ridge', 'country_code' => 'US'],\n            ['name' => 'Americano Brasil', 'country_code' => 'BR'],\n            ['name' => 'La Primaube', 'country_code' => 'FR'],\n            ['name' => 'Blakely', 'country_code' => 'US'],\n            ['name' => 'Saint-Sebastien-de-Morsent', 'country_code' => 'FR'],\n            ['name' => 'Prades-le-Lez', 'country_code' => 'FR'],\n            ['name' => 'Grayson Valley', 'country_code' => 'US'],\n            ['name' => 'Vigneux-de-Bretagne', 'country_code' => 'FR'],\n            ['name' => 'Vouneuil-sous-Biard', 'country_code' => 'FR'],\n            ['name' => 'Corry', 'country_code' => 'US'],\n            ['name' => 'Rio das Antas', 'country_code' => 'BR'],\n            ['name' => 'Siuntio', 'country_code' => 'FI'],\n            ['name' => 'Villabona', 'country_code' => 'ES'],\n            ['name' => 'Fontenilles', 'country_code' => 'FR'],\n            ['name' => 'Partenit', 'country_code' => 'UA'],\n            ['name' => 'Gelnica', 'country_code' => 'SK'],\n            ['name' => 'Takhtamukay', 'country_code' => 'RU'],\n            ['name' => 'Twin Lakes', 'country_code' => 'US'],\n            ['name' => 'Dennis', 'country_code' => 'US'],\n            ['name' => 'Wilkins', 'country_code' => 'US'],\n            ['name' => 'East Calder', 'country_code' => 'GB'],\n            ['name' => 'Gunskirchen', 'country_code' => 'AT'],\n            ['name' => 'Schaftlarn', 'country_code' => 'DE'],\n            ['name' => 'Avra Valley', 'country_code' => 'US'],\n            ['name' => 'Buchen', 'country_code' => 'DE'],\n            ['name' => 'Sermide', 'country_code' => 'IT'],\n            ['name' => 'Everman', 'country_code' => 'US'],\n            ['name' => 'Parecis', 'country_code' => 'BR'],\n            ['name' => 'Luco dei Marsi', 'country_code' => 'IT'],\n            ['name' => 'Suria', 'country_code' => 'ES'],\n            ['name' => 'Rowlands Gill', 'country_code' => 'GB'],\n            ['name' => 'Union Gap', 'country_code' => 'US'],\n            ['name' => 'Seichamps', 'country_code' => 'FR'],\n            ['name' => 'Bellach', 'country_code' => 'CH'],\n            ['name' => 'Ternay', 'country_code' => 'FR'],\n            ['name' => 'Stowe', 'country_code' => 'US'],\n            ['name' => 'Kirchardt', 'country_code' => 'DE'],\n            ['name' => 'Fassberg', 'country_code' => 'DE'],\n            ['name' => 'Sachkhere', 'country_code' => 'GE'],\n            ['name' => 'Sant Elia Fiumerapido', 'country_code' => 'IT'],\n            ['name' => 'Revin', 'country_code' => 'FR'],\n            ['name' => 'Saint-Joseph-du-Lac', 'country_code' => 'CA'],\n            ['name' => 'Plainfield', 'country_code' => 'US'],\n            ['name' => 'Belfeld', 'country_code' => 'NL'],\n            ['name' => 'Porcuna', 'country_code' => 'ES'],\n            ['name' => 'Heliconia', 'country_code' => 'CO'],\n            ['name' => 'Campo San Martino', 'country_code' => 'IT'],\n            ['name' => 'Satsuma', 'country_code' => 'US'],\n            ['name' => 'Prinzapolka', 'country_code' => 'NI'],\n            ['name' => 'Tuakau', 'country_code' => 'NZ'],\n            ['name' => 'Kirton', 'country_code' => 'GB'],\n            ['name' => 'Temnikov', 'country_code' => 'RU'],\n            ['name' => 'Thoiry', 'country_code' => 'FR'],\n            ['name' => 'Lutjenburg', 'country_code' => 'DE'],\n            ['name' => 'Vilseck', 'country_code' => 'DE'],\n            ['name' => 'Riviersonderend', 'country_code' => 'ZA'],\n            ['name' => 'Dyce', 'country_code' => 'GB'],\n            ['name' => 'Ascoli Satriano', 'country_code' => 'IT'],\n            ['name' => 'Slanic', 'country_code' => 'RO'],\n            ['name' => 'Caracol', 'country_code' => 'BR'],\n            ['name' => 'Lendelede', 'country_code' => 'BE'],\n            ['name' => 'Berceni', 'country_code' => 'RO'],\n            ['name' => 'Vendenheim', 'country_code' => 'FR'],\n            ['name' => 'Sheridan', 'country_code' => 'US'],\n            ['name' => 'Le Lavandou', 'country_code' => 'FR'],\n            ['name' => 'Truccazzano', 'country_code' => 'IT'],\n            ['name' => 'Leonardtown', 'country_code' => 'US'],\n            ['name' => 'Poussan', 'country_code' => 'FR'],\n            ['name' => 'Westhausen', 'country_code' => 'DE'],\n            ['name' => 'Steyning', 'country_code' => 'GB'],\n            ['name' => 'Parmain', 'country_code' => 'FR'],\n            ['name' => 'Hope', 'country_code' => 'CA'],\n            ['name' => 'Gimli', 'country_code' => 'CA'],\n            ['name' => 'Eastman', 'country_code' => 'US'],\n            ['name' => 'Kusatsu', 'country_code' => 'JP'],\n            ['name' => 'Yeranos', 'country_code' => 'AM'],\n            ['name' => 'Dusheti', 'country_code' => 'GE'],\n            ['name' => 'Asakawa', 'country_code' => 'JP'],\n            ['name' => 'San Cristobal Acasaguastlan', 'country_code' => 'GT'],\n            ['name' => 'Darcinopolis', 'country_code' => 'BR'],\n            ['name' => 'High Springs', 'country_code' => 'US'],\n            ['name' => 'Doullens', 'country_code' => 'FR'],\n            ['name' => 'Konigsfeld im Schwarzwald', 'country_code' => 'DE'],\n            ['name' => 'Orsett', 'country_code' => 'GB'],\n            ['name' => 'University at Buffalo', 'country_code' => 'US'],\n            ['name' => 'Olhos d Agua', 'country_code' => 'BR'],\n            ['name' => 'Vaison-la-Romaine', 'country_code' => 'FR'],\n            ['name' => 'Au in der Hallertau', 'country_code' => 'DE'],\n            ['name' => 'Silveiras', 'country_code' => 'BR'],\n            ['name' => 'Pembury', 'country_code' => 'GB'],\n            ['name' => 'Ibiracatu', 'country_code' => 'BR'],\n            ['name' => 'Jandaia', 'country_code' => 'BR'],\n            ['name' => 'Loimaan Kunta', 'country_code' => 'FI'],\n            ['name' => 'Solt', 'country_code' => 'HU'],\n            ['name' => 'Untergriesbach', 'country_code' => 'DE'],\n            ['name' => 'Huntingburg', 'country_code' => 'US'],\n            ['name' => 'Almadina', 'country_code' => 'BR'],\n            ['name' => 'Dainville', 'country_code' => 'FR'],\n            ['name' => 'Cocal dos Alves', 'country_code' => 'BR'],\n            ['name' => 'Nieheim', 'country_code' => 'DE'],\n            ['name' => 'Pontotoc', 'country_code' => 'US'],\n            ['name' => 'Pierrefeu-du-Var', 'country_code' => 'FR'],\n            ['name' => 'Lingenfeld', 'country_code' => 'DE'],\n            ['name' => 'Emerald', 'country_code' => 'AU'],\n            ['name' => 'Treffurt', 'country_code' => 'DE'],\n            ['name' => 'Monterenzio', 'country_code' => 'IT'],\n            ['name' => 'Beacon Falls', 'country_code' => 'US'],\n            ['name' => 'East Farmingdale', 'country_code' => 'US'],\n            ['name' => 'Richmond', 'country_code' => 'AU'],\n            ['name' => 'Dartmouth', 'country_code' => 'GB'],\n            ['name' => 'Clyde', 'country_code' => 'US'],\n            ['name' => 'Tyniste nad Orlici', 'country_code' => 'CZ'],\n            ['name' => 'Itumirim', 'country_code' => 'BR'],\n            ['name' => 'Mantyharju', 'country_code' => 'FI'],\n            ['name' => 'Yoshinoyama', 'country_code' => 'JP'],\n            ['name' => 'Eagar', 'country_code' => 'US'],\n            ['name' => 'Ida Ou Moumene', 'country_code' => 'MA'],\n            ['name' => 'Senador Eloi de Souza', 'country_code' => 'BR'],\n            ['name' => 'Sao Joao da Serra', 'country_code' => 'BR'],\n            ['name' => 'Gyangze', 'country_code' => 'CN'],\n            ['name' => 'Branford Center', 'country_code' => 'US'],\n            ['name' => 'Rib Mountain', 'country_code' => 'US'],\n            ['name' => 'Adligenswil', 'country_code' => 'CH'],\n            ['name' => 'Kuybyshevo', 'country_code' => 'RU'],\n            ['name' => 'Henryetta', 'country_code' => 'US'],\n            ['name' => 'Unterseen', 'country_code' => 'CH'],\n            ['name' => 'Magny-en-Vexin', 'country_code' => 'FR'],\n            ['name' => 'Montgomery', 'country_code' => 'US'],\n            ['name' => 'Fort Edward', 'country_code' => 'US'],\n            ['name' => 'Barra Longa', 'country_code' => 'BR'],\n            ['name' => 'Polygyros', 'country_code' => 'GR'],\n            ['name' => 'Szabadszallas', 'country_code' => 'HU'],\n            ['name' => 'Rusko', 'country_code' => 'FI'],\n            ['name' => 'San Gerardo', 'country_code' => 'SV'],\n            ['name' => 'Odesskoye', 'country_code' => 'RU'],\n            ['name' => 'Erdweg', 'country_code' => 'DE'],\n            ['name' => 'Jemna', 'country_code' => 'TN'],\n            ['name' => 'Hemhofen', 'country_code' => 'DE'],\n            ['name' => 'Simsbury Center', 'country_code' => 'US'],\n            ['name' => 'Chanceford', 'country_code' => 'US'],\n            ['name' => 'Wassertrudingen', 'country_code' => 'DE'],\n            ['name' => 'Kojetin', 'country_code' => 'CZ'],\n            ['name' => 'Sainte-Sigolene', 'country_code' => 'FR'],\n            ['name' => 'Monteiasi', 'country_code' => 'IT'],\n            ['name' => 'Kulary', 'country_code' => 'RU'],\n            ['name' => 'Clinton', 'country_code' => 'US'],\n            ['name' => 'Evansville', 'country_code' => 'US'],\n            ['name' => 'Bonares', 'country_code' => 'ES'],\n            ['name' => 'San Pol de Mar', 'country_code' => 'ES'],\n            ['name' => 'Pardinho', 'country_code' => 'BR'],\n            ['name' => 'Saxon', 'country_code' => 'CH'],\n            ['name' => 'Lanett', 'country_code' => 'US'],\n            ['name' => 'Quinto Vicentino', 'country_code' => 'IT'],\n            ['name' => 'Veintiocho de Noviembre', 'country_code' => 'AR'],\n            ['name' => 'Pignataro Maggiore', 'country_code' => 'IT'],\n            ['name' => 'Nurensdorf', 'country_code' => 'CH'],\n            ['name' => 'Ares', 'country_code' => 'ES'],\n            ['name' => 'Ujszasz', 'country_code' => 'HU'],\n            ['name' => 'Ballingry', 'country_code' => 'GB'],\n            ['name' => 'Raleigh Hills', 'country_code' => 'US'],\n            ['name' => 'Naintre', 'country_code' => 'FR'],\n            ['name' => 'Bridgewater', 'country_code' => 'US'],\n            ['name' => 'Kleinwallstadt', 'country_code' => 'DE'],\n            ['name' => 'Lausen', 'country_code' => 'CH'],\n            ['name' => 'Southampton', 'country_code' => 'US'],\n            ['name' => 'Northfield', 'country_code' => 'US'],\n            ['name' => 'Graca Aranha', 'country_code' => 'BR'],\n            ['name' => 'Vernio', 'country_code' => 'IT'],\n            ['name' => 'Santorso', 'country_code' => 'IT'],\n            ['name' => 'Glenarden', 'country_code' => 'US'],\n            ['name' => 'East Pasadena', 'country_code' => 'US'],\n            ['name' => 'Kechoulah', 'country_code' => 'MA'],\n            ['name' => 'Sint Pancras', 'country_code' => 'NL'],\n            ['name' => 'Trunovskoye', 'country_code' => 'RU'],\n            ['name' => 'Maiano', 'country_code' => 'IT'],\n            ['name' => 'Saint-Jorioz', 'country_code' => 'FR'],\n            ['name' => 'Hofbieber', 'country_code' => 'DE'],\n            ['name' => 'Ronco all Adige', 'country_code' => 'IT'],\n            ['name' => 'Potiretama', 'country_code' => 'BR'],\n            ['name' => 'New Norfolk', 'country_code' => 'AU'],\n            ['name' => 'Gurinhata', 'country_code' => 'BR'],\n            ['name' => 'Pelican Bay', 'country_code' => 'US'],\n            ['name' => 'Dornhan', 'country_code' => 'DE'],\n            ['name' => 'Tequesta', 'country_code' => 'US'],\n            ['name' => 'Montbonnot-Saint-Martin', 'country_code' => 'FR'],\n            ['name' => 'Clapiers', 'country_code' => 'FR'],\n            ['name' => 'Alpnach', 'country_code' => 'CH'],\n            ['name' => 'Broughton', 'country_code' => 'GB'],\n            ['name' => 'Elm Grove', 'country_code' => 'US'],\n            ['name' => 'Borso del Grappa', 'country_code' => 'IT'],\n            ['name' => 'Genazzano', 'country_code' => 'IT'],\n            ['name' => 'Varnita', 'country_code' => 'MD'],\n            ['name' => 'Sidi Mbark', 'country_code' => 'MA'],\n            ['name' => 'Welshpool', 'country_code' => 'GB'],\n            ['name' => 'Lom Kao', 'country_code' => 'TH'],\n            ['name' => 'Carlstadt', 'country_code' => 'US'],\n            ['name' => 'Vaugneray', 'country_code' => 'FR'],\n            ['name' => 'Sumeg', 'country_code' => 'HU'],\n            ['name' => 'Torrebelvicino', 'country_code' => 'IT'],\n            ['name' => 'North Windham', 'country_code' => 'US'],\n            ['name' => 'Cochran', 'country_code' => 'US'],\n            ['name' => 'Sedgefield', 'country_code' => 'GB'],\n            ['name' => 'Riantec', 'country_code' => 'FR'],\n            ['name' => 'Eucalyptus Hills', 'country_code' => 'US'],\n            ['name' => 'Arlington Heights', 'country_code' => 'US'],\n            ['name' => 'Brownville', 'country_code' => 'US'],\n            ['name' => 'Sosnovo-Ozerskoye', 'country_code' => 'RU'],\n            ['name' => 'Helmshore', 'country_code' => 'GB'],\n            ['name' => 'Castelsardo', 'country_code' => 'IT'],\n            ['name' => 'Emskirchen', 'country_code' => 'DE'],\n            ['name' => 'Novokhopersk', 'country_code' => 'RU'],\n            ['name' => 'Jambeiro', 'country_code' => 'BR'],\n            ['name' => 'Shikhany', 'country_code' => 'RU'],\n            ['name' => 'Bo', 'country_code' => 'NO'],\n            ['name' => 'Independence', 'country_code' => 'US'],\n            ['name' => 'Lebanon', 'country_code' => 'US'],\n            ['name' => 'Laurel Bay', 'country_code' => 'US'],\n            ['name' => 'Braunlage', 'country_code' => 'DE'],\n            ['name' => 'Garrettsville', 'country_code' => 'US'],\n            ['name' => 'Abanilla', 'country_code' => 'ES'],\n            ['name' => 'Pollau', 'country_code' => 'AT'],\n            ['name' => 'Douvrin', 'country_code' => 'FR'],\n            ['name' => 'Fundeni', 'country_code' => 'RO'],\n            ['name' => 'Frick', 'country_code' => 'CH'],\n            ['name' => 'Kirchentellinsfurt', 'country_code' => 'DE'],\n            ['name' => 'Gardnerville', 'country_code' => 'US'],\n            ['name' => 'Gnas', 'country_code' => 'AT'],\n            ['name' => 'Candiolo', 'country_code' => 'IT'],\n            ['name' => 'Fleurance', 'country_code' => 'FR'],\n            ['name' => 'Lochgau', 'country_code' => 'DE'],\n            ['name' => 'Isanti', 'country_code' => 'US'],\n            ['name' => 'Taciba', 'country_code' => 'BR'],\n            ['name' => 'Vizzini', 'country_code' => 'IT'],\n            ['name' => 'Mainhardt', 'country_code' => 'DE'],\n            ['name' => 'Otaci', 'country_code' => 'MD'],\n            ['name' => 'Monroe', 'country_code' => 'US'],\n            ['name' => 'Norena', 'country_code' => 'ES'],\n            ['name' => 'Lannemezan', 'country_code' => 'FR'],\n            ['name' => 'Punxsutawney', 'country_code' => 'US'],\n            ['name' => 'Country Homes', 'country_code' => 'US'],\n            ['name' => 'Wailua Homesteads', 'country_code' => 'US'],\n            ['name' => 'Hergiswil', 'country_code' => 'CH'],\n            ['name' => 'Kehychivka', 'country_code' => 'UA'],\n            ['name' => 'Haute-Goulaine', 'country_code' => 'FR'],\n            ['name' => 'Chiquilistlan', 'country_code' => 'MX'],\n            ['name' => 'Brigg', 'country_code' => 'GB'],\n            ['name' => 'Sidney', 'country_code' => 'US'],\n            ['name' => 'Mendon', 'country_code' => 'US'],\n            ['name' => 'Princeton', 'country_code' => 'US'],\n            ['name' => 'Fahrland', 'country_code' => 'DE'],\n            ['name' => 'Aznalcollar', 'country_code' => 'ES'],\n            ['name' => 'Moulay Bouzarqtoune', 'country_code' => 'MA'],\n            ['name' => 'Spydeberg', 'country_code' => 'NO'],\n            ['name' => 'Bartonville', 'country_code' => 'US'],\n            ['name' => 'Ixcateopan de Cuauhtemoc', 'country_code' => 'MX'],\n            ['name' => 'Chena Ridge', 'country_code' => 'US'],\n            ['name' => 'Pauls Valley', 'country_code' => 'US'],\n            ['name' => 'Saint-Apollinaire', 'country_code' => 'CA'],\n            ['name' => 'Wanon Niwat', 'country_code' => 'TH'],\n            ['name' => 'Tazemmourt', 'country_code' => 'MA'],\n            ['name' => 'Munford', 'country_code' => 'US'],\n            ['name' => 'Tarrant', 'country_code' => 'US'],\n            ['name' => 'Los Chaves', 'country_code' => 'US'],\n            ['name' => 'Woodville', 'country_code' => 'GB'],\n            ['name' => 'Fornovo di Taro', 'country_code' => 'IT'],\n            ['name' => 'Wildon', 'country_code' => 'AT'],\n            ['name' => 'Wilhering', 'country_code' => 'AT'],\n            ['name' => 'Santo Antonio do Jardim', 'country_code' => 'BR'],\n            ['name' => 'Los Ranchos de Albuquerque', 'country_code' => 'US'],\n            ['name' => 'Megalopoli', 'country_code' => 'GR'],\n            ['name' => 'Prrenjas', 'country_code' => 'AL'],\n            ['name' => 'San Antonio Canada', 'country_code' => 'MX'],\n            ['name' => 'Edgewood', 'country_code' => 'US'],\n            ['name' => 'Windsbach', 'country_code' => 'DE'],\n            ['name' => 'Aquia Harbour', 'country_code' => 'US'],\n            ['name' => 'Nereto', 'country_code' => 'IT'],\n            ['name' => 'Indian Hills', 'country_code' => 'US'],\n            ['name' => 'Bresje', 'country_code' => 'XK'],\n            ['name' => 'Coursan', 'country_code' => 'FR'],\n            ['name' => 'Klaebu', 'country_code' => 'NO'],\n            ['name' => 'El Granada', 'country_code' => 'US'],\n            ['name' => 'Pai Pedro', 'country_code' => 'BR'],\n            ['name' => 'Villefranche-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'Concepcion de Buenos Aires', 'country_code' => 'MX'],\n            ['name' => 'San Giovanni Suergiu', 'country_code' => 'IT'],\n            ['name' => 'Serradifalco', 'country_code' => 'IT'],\n            ['name' => 'Alkoven', 'country_code' => 'AT'],\n            ['name' => 'Acque Dolci', 'country_code' => 'IT'],\n            ['name' => 'Thelepte', 'country_code' => 'TN'],\n            ['name' => 'Chalfont Saint Giles', 'country_code' => 'GB'],\n            ['name' => 'Tillicoultry', 'country_code' => 'GB'],\n            ['name' => 'Anta Gorda', 'country_code' => 'BR'],\n            ['name' => 'Alcudia de Crespins', 'country_code' => 'ES'],\n            ['name' => 'Gauchy', 'country_code' => 'FR'],\n            ['name' => 'Niedereschach', 'country_code' => 'DE'],\n            ['name' => 'Pueai Noi', 'country_code' => 'TH'],\n            ['name' => 'Rio Espera', 'country_code' => 'BR'],\n            ['name' => 'Lucciana', 'country_code' => 'FR'],\n            ['name' => 'Rosate', 'country_code' => 'IT'],\n            ['name' => 'Stewartville', 'country_code' => 'US'],\n            ['name' => 'Filiatra', 'country_code' => 'GR'],\n            ['name' => 'Pagham', 'country_code' => 'GB'],\n            ['name' => 'Navas', 'country_code' => 'ES'],\n            ['name' => 'Janossomorja', 'country_code' => 'HU'],\n            ['name' => 'Oulad Amghar', 'country_code' => 'MA'],\n            ['name' => 'Bensley', 'country_code' => 'US'],\n            ['name' => 'Hordle', 'country_code' => 'GB'],\n            ['name' => 'Mesquita', 'country_code' => 'BR'],\n            ['name' => 'Shrewsbury', 'country_code' => 'US'],\n            ['name' => 'Adlington', 'country_code' => 'GB'],\n            ['name' => 'Madalena', 'country_code' => 'PT'],\n            ['name' => 'Riedenburg', 'country_code' => 'DE'],\n            ['name' => 'Villemur-sur-Tarn', 'country_code' => 'FR'],\n            ['name' => 'Alpine', 'country_code' => 'US'],\n            ['name' => 'Lindau', 'country_code' => 'CH'],\n            ['name' => 'Meriel', 'country_code' => 'FR'],\n            ['name' => 'Harlan', 'country_code' => 'US'],\n            ['name' => 'Ginoza', 'country_code' => 'JP'],\n            ['name' => 'Los Villares', 'country_code' => 'ES'],\n            ['name' => 'Hindon Hill', 'country_code' => 'CA'],\n            ['name' => 'East Ballina', 'country_code' => 'AU'],\n            ['name' => 'Dinguiraye', 'country_code' => 'GN'],\n            ['name' => 'Krume', 'country_code' => 'AL'],\n            ['name' => 'Willard', 'country_code' => 'US'],\n            ['name' => 'Puttershoek', 'country_code' => 'NL'],\n            ['name' => 'Roquefort-la-Bedoule', 'country_code' => 'FR'],\n            ['name' => 'Biloela', 'country_code' => 'AU'],\n            ['name' => 'Hastiere-par-dela', 'country_code' => 'BE'],\n            ['name' => 'Ontario', 'country_code' => 'US'],\n            ['name' => 'Artes', 'country_code' => 'ES'],\n            ['name' => 'Meyreuil', 'country_code' => 'FR'],\n            ['name' => 'Aubignan', 'country_code' => 'FR'],\n            ['name' => 'Pedra Bela', 'country_code' => 'BR'],\n            ['name' => 'Wheelersburg', 'country_code' => 'US'],\n            ['name' => 'Cheshire Village', 'country_code' => 'US'],\n            ['name' => 'Dol-de-Bretagne', 'country_code' => 'FR'],\n            ['name' => 'Albaida', 'country_code' => 'ES'],\n            ['name' => 'Marcellus', 'country_code' => 'US'],\n            ['name' => 'Hurley', 'country_code' => 'US'],\n            ['name' => 'Les Cedres', 'country_code' => 'CA'],\n            ['name' => 'Steinfort', 'country_code' => 'LU'],\n            ['name' => 'Meijel', 'country_code' => 'NL'],\n            ['name' => 'Worragee', 'country_code' => 'AU'],\n            ['name' => 'Montauban-de-Bretagne', 'country_code' => 'FR'],\n            ['name' => 'Vilaboa', 'country_code' => 'ES'],\n            ['name' => 'Sannicola', 'country_code' => 'IT'],\n            ['name' => 'Noves', 'country_code' => 'FR'],\n            ['name' => 'Roye', 'country_code' => 'FR'],\n            ['name' => 'La Broquerie', 'country_code' => 'CA'],\n            ['name' => 'Saint-Mitre-les-Remparts', 'country_code' => 'FR'],\n            ['name' => 'Ahtari', 'country_code' => 'FI'],\n            ['name' => 'Aixe-sur-Vienne', 'country_code' => 'FR'],\n            ['name' => 'Colney Heath', 'country_code' => 'GB'],\n            ['name' => 'Labunista', 'country_code' => 'MK'],\n            ['name' => 'Alezio', 'country_code' => 'IT'],\n            ['name' => 'Ostricourt', 'country_code' => 'FR'],\n            ['name' => 'Verkhniy Avzyan', 'country_code' => 'RU'],\n            ['name' => 'Williams', 'country_code' => 'US'],\n            ['name' => 'Neftenbach', 'country_code' => 'CH'],\n            ['name' => 'Clifton Springs', 'country_code' => 'US'],\n            ['name' => 'Santa Catarina', 'country_code' => 'MX'],\n            ['name' => 'Butjadingen', 'country_code' => 'DE'],\n            ['name' => 'Ceriale', 'country_code' => 'IT'],\n            ['name' => 'Nova Olinda', 'country_code' => 'BR'],\n            ['name' => 'Bad Konigshofen im Grabfeld', 'country_code' => 'DE'],\n            ['name' => 'Breitenfurth bei Wien', 'country_code' => 'AT'],\n            ['name' => 'Sebis', 'country_code' => 'RO'],\n            ['name' => 'Merville', 'country_code' => 'FR'],\n            ['name' => 'Mrgashat', 'country_code' => 'AM'],\n            ['name' => 'Guadasuar', 'country_code' => 'ES'],\n            ['name' => 'Sandnessjoen', 'country_code' => 'NO'],\n            ['name' => 'Gozzano', 'country_code' => 'IT'],\n            ['name' => 'Verkh-Tula', 'country_code' => 'RU'],\n            ['name' => 'Chorvatsky Grob', 'country_code' => 'SK'],\n            ['name' => 'South Williamsport', 'country_code' => 'US'],\n            ['name' => 'Westmoreland', 'country_code' => 'US'],\n            ['name' => 'La Wantzenau', 'country_code' => 'FR'],\n            ['name' => 'Chevreuse', 'country_code' => 'FR'],\n            ['name' => 'Allershausen', 'country_code' => 'DE'],\n            ['name' => 'Kent', 'country_code' => 'CA'],\n            ['name' => 'Baltmannsweiler', 'country_code' => 'DE'],\n            ['name' => 'Vilafant', 'country_code' => 'ES'],\n            ['name' => 'Itueta', 'country_code' => 'BR'],\n            ['name' => 'Carcare', 'country_code' => 'IT'],\n            ['name' => 'Munchwilen', 'country_code' => 'CH'],\n            ['name' => 'Uchaly', 'country_code' => 'RU'],\n            ['name' => 'Altafulla', 'country_code' => 'ES'],\n            ['name' => 'Geislingen', 'country_code' => 'DE'],\n            ['name' => 'Ostellato', 'country_code' => 'IT'],\n            ['name' => 'Pacuja', 'country_code' => 'BR'],\n            ['name' => 'Saint-Georges-d Orques', 'country_code' => 'FR'],\n            ['name' => 'Bagnolo Piemonte', 'country_code' => 'IT'],\n            ['name' => 'Campo Alegre de Goias', 'country_code' => 'BR'],\n            ['name' => 'Ulety', 'country_code' => 'RU'],\n            ['name' => 'San Lucido', 'country_code' => 'IT'],\n            ['name' => 'Cirali', 'country_code' => 'TR'],\n            ['name' => 'Waihi', 'country_code' => 'NZ'],\n            ['name' => 'Alban', 'country_code' => 'CO'],\n            ['name' => 'Coloso', 'country_code' => 'CO'],\n            ['name' => 'Monchique', 'country_code' => 'PT'],\n            ['name' => 'Donzere', 'country_code' => 'FR'],\n            ['name' => 'Maurik', 'country_code' => 'NL'],\n            ['name' => 'Bechhofen', 'country_code' => 'DE'],\n            ['name' => 'Bagnolo San Vito', 'country_code' => 'IT'],\n            ['name' => 'Saint-Hilaire-du-Harcouet', 'country_code' => 'FR'],\n            ['name' => 'Sao Vicente', 'country_code' => 'BR'],\n            ['name' => 'Moosinning', 'country_code' => 'DE'],\n            ['name' => 'Zumikon', 'country_code' => 'CH'],\n            ['name' => 'Thalgau', 'country_code' => 'AT'],\n            ['name' => 'Rindge', 'country_code' => 'US'],\n            ['name' => 'Sersheim', 'country_code' => 'DE'],\n            ['name' => 'Divisa Nova', 'country_code' => 'BR'],\n            ['name' => 'Rhuthun', 'country_code' => 'GB'],\n            ['name' => 'Fort Ann', 'country_code' => 'US'],\n            ['name' => 'Arnemuiden', 'country_code' => 'NL'],\n            ['name' => 'Lindfield', 'country_code' => 'GB'],\n            ['name' => 'Askern', 'country_code' => 'GB'],\n            ['name' => 'Ouro Verde de Minas', 'country_code' => 'BR'],\n            ['name' => 'Shihoro', 'country_code' => 'JP'],\n            ['name' => 'Colonia do Gurgueia', 'country_code' => 'BR'],\n            ['name' => 'Nelsonville', 'country_code' => 'US'],\n            ['name' => 'Writtle', 'country_code' => 'GB'],\n            ['name' => 'Kastellaun', 'country_code' => 'DE'],\n            ['name' => 'Obfelden', 'country_code' => 'CH'],\n            ['name' => 'Magdalena Tequisistlan', 'country_code' => 'MX'],\n            ['name' => 'Childress', 'country_code' => 'US'],\n            ['name' => 'Brezoi', 'country_code' => 'RO'],\n            ['name' => 'Lonate Ceppino', 'country_code' => 'IT'],\n            ['name' => 'Staplehurst', 'country_code' => 'GB'],\n            ['name' => 'Bni Abdellah', 'country_code' => 'MA'],\n            ['name' => 'Kotel', 'country_code' => 'BG'],\n            ['name' => 'Kabansk', 'country_code' => 'RU'],\n            ['name' => 'Oraison', 'country_code' => 'FR'],\n            ['name' => 'Deschutes River Woods', 'country_code' => 'US'],\n            ['name' => 'Dover', 'country_code' => 'US'],\n            ['name' => 'Tweed', 'country_code' => 'CA'],\n            ['name' => 'Laufen', 'country_code' => 'CH'],\n            ['name' => 'Brookhaven', 'country_code' => 'US'],\n            ['name' => 'Carrizo Springs', 'country_code' => 'US'],\n            ['name' => 'Totkomlos', 'country_code' => 'HU'],\n            ['name' => 'Maintirano', 'country_code' => 'MG'],\n            ['name' => 'Sanitz', 'country_code' => 'DE'],\n            ['name' => 'Belusa', 'country_code' => 'SK'],\n            ['name' => 'Combourg', 'country_code' => 'FR'],\n            ['name' => 'Wasselonne', 'country_code' => 'FR'],\n            ['name' => 'Lossa', 'country_code' => 'DE'],\n            ['name' => 'Riverside', 'country_code' => 'US'],\n            ['name' => 'Mel', 'country_code' => 'IT'],\n            ['name' => 'Itaguatins', 'country_code' => 'BR'],\n            ['name' => 'Pau D Arco', 'country_code' => 'BR'],\n            ['name' => 'Mishkino', 'country_code' => 'RU'],\n            ['name' => 'Barbourville', 'country_code' => 'US'],\n            ['name' => 'Buttenwiesen', 'country_code' => 'DE'],\n            ['name' => 'Dubasarii Vechi', 'country_code' => 'MD'],\n            ['name' => 'Calvisson', 'country_code' => 'FR'],\n            ['name' => 'Dacono', 'country_code' => 'US'],\n            ['name' => 'Union', 'country_code' => 'US'],\n            ['name' => 'Tapa', 'country_code' => 'EE'],\n            ['name' => 'Chapeu', 'country_code' => 'BR'],\n            ['name' => 'Bagni di Lucca', 'country_code' => 'IT'],\n            ['name' => 'Cartes', 'country_code' => 'ES'],\n            ['name' => 'Saint-Galmier', 'country_code' => 'FR'],\n            ['name' => 'Wilna', 'country_code' => 'US'],\n            ['name' => 'Tea', 'country_code' => 'US'],\n            ['name' => 'Hambrucken', 'country_code' => 'DE'],\n            ['name' => 'Milhaud', 'country_code' => 'FR'],\n            ['name' => 'Rohrdorf', 'country_code' => 'DE'],\n            ['name' => 'Rensselaer', 'country_code' => 'US'],\n            ['name' => 'Saint-Felix-de-Valois', 'country_code' => 'CA'],\n            ['name' => 'Xambre', 'country_code' => 'BR'],\n            ['name' => 'Krasavino', 'country_code' => 'RU'],\n            ['name' => 'Khlevnoye', 'country_code' => 'RU'],\n            ['name' => 'Corsano', 'country_code' => 'IT'],\n            ['name' => 'Penela', 'country_code' => 'PT'],\n            ['name' => 'Bottanuco', 'country_code' => 'IT'],\n            ['name' => 'Beaucourt', 'country_code' => 'FR'],\n            ['name' => 'Deryneia', 'country_code' => 'CY'],\n            ['name' => 'Gualdo Cattaneo', 'country_code' => 'IT'],\n            ['name' => 'Great Warley Street', 'country_code' => 'GB'],\n            ['name' => 'Schlusselfeld', 'country_code' => 'DE'],\n            ['name' => 'La Ferte-Mace', 'country_code' => 'FR'],\n            ['name' => 'Volodarka', 'country_code' => 'UA'],\n            ['name' => 'Billigheim', 'country_code' => 'DE'],\n            ['name' => 'Chepes', 'country_code' => 'AR'],\n            ['name' => 'Timelkam', 'country_code' => 'AT'],\n            ['name' => 'Nove Straseci', 'country_code' => 'CZ'],\n            ['name' => 'Ban Chet Samian', 'country_code' => 'TH'],\n            ['name' => 'Sales', 'country_code' => 'BR'],\n            ['name' => 'Pinehurst', 'country_code' => 'US'],\n            ['name' => 'Finley', 'country_code' => 'US'],\n            ['name' => 'Betania do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Mugeln', 'country_code' => 'DE'],\n            ['name' => 'Darjazin', 'country_code' => 'IR'],\n            ['name' => 'Stoke Mandeville', 'country_code' => 'GB'],\n            ['name' => 'Felipe Guerra', 'country_code' => 'BR'],\n            ['name' => 'Chatham', 'country_code' => 'US'],\n            ['name' => 'Parabel ', 'country_code' => 'RU'],\n            ['name' => 'Seaton Carew', 'country_code' => 'GB'],\n            ['name' => 'Pluak Daeng', 'country_code' => 'TH'],\n            ['name' => 'Pluneret', 'country_code' => 'FR'],\n            ['name' => 'Nerokouros', 'country_code' => 'GR'],\n            ['name' => 'Cumberland', 'country_code' => 'US'],\n            ['name' => 'Montmorillon', 'country_code' => 'FR'],\n            ['name' => 'Douar Tazrout', 'country_code' => 'MA'],\n            ['name' => 'Ra s al Khashufah', 'country_code' => 'SY'],\n            ['name' => 'Querqueville', 'country_code' => 'FR'],\n            ['name' => 'Azovo', 'country_code' => 'RU'],\n            ['name' => 'Aiuruoca', 'country_code' => 'BR'],\n            ['name' => 'Chillicothe', 'country_code' => 'US'],\n            ['name' => 'Bay Roberts', 'country_code' => 'CA'],\n            ['name' => 'La Gorgue', 'country_code' => 'FR'],\n            ['name' => 'Crofton', 'country_code' => 'GB'],\n            ['name' => 'Ascea', 'country_code' => 'IT'],\n            ['name' => 'Hainesport', 'country_code' => 'US'],\n            ['name' => 'Fort Shawnee', 'country_code' => 'US'],\n            ['name' => 'Metropolis', 'country_code' => 'US'],\n            ['name' => 'Oshakan', 'country_code' => 'AM'],\n            ['name' => 'Maquoketa', 'country_code' => 'US'],\n            ['name' => 'Watchung', 'country_code' => 'US'],\n            ['name' => 'Davenport', 'country_code' => 'US'],\n            ['name' => 'Zhongcha', 'country_code' => 'CN'],\n            ['name' => 'Zeeland', 'country_code' => 'NL'],\n            ['name' => 'Los Reyes', 'country_code' => 'MX'],\n            ['name' => 'Godstone', 'country_code' => 'GB'],\n            ['name' => 'Portland', 'country_code' => 'US'],\n            ['name' => 'Williamsburg', 'country_code' => 'US'],\n            ['name' => 'St. Thomas', 'country_code' => 'US'],\n            ['name' => 'Herrnhut', 'country_code' => 'DE'],\n            ['name' => 'Matsuzaki', 'country_code' => 'JP'],\n            ['name' => 'Soligalich', 'country_code' => 'RU'],\n            ['name' => 'Du Quoin', 'country_code' => 'US'],\n            ['name' => 'Rajec', 'country_code' => 'SK'],\n            ['name' => 'Angles', 'country_code' => 'ES'],\n            ['name' => 'Tessalit', 'country_code' => 'ML'],\n            ['name' => 'Baldwin', 'country_code' => 'US'],\n            ['name' => 'Villanova Mondovi', 'country_code' => 'IT'],\n            ['name' => 'Burghfield', 'country_code' => 'GB'],\n            ['name' => 'Bons-en-Chablais', 'country_code' => 'FR'],\n            ['name' => 'Ibiara', 'country_code' => 'BR'],\n            ['name' => 'Karlshuld', 'country_code' => 'DE'],\n            ['name' => 'Blean', 'country_code' => 'GB'],\n            ['name' => 'Amalfi', 'country_code' => 'IT'],\n            ['name' => 'Elburn', 'country_code' => 'US'],\n            ['name' => 'Ashton-Sandy Spring', 'country_code' => 'US'],\n            ['name' => 'Belyayevka', 'country_code' => 'RU'],\n            ['name' => 'Jose da Penha', 'country_code' => 'BR'],\n            ['name' => 'Tarp', 'country_code' => 'DE'],\n            ['name' => 'Hittfeld', 'country_code' => 'DE'],\n            ['name' => 'Hillsborough', 'country_code' => 'US'],\n            ['name' => 'Yukhnov', 'country_code' => 'RU'],\n            ['name' => 'Kingston', 'country_code' => 'US'],\n            ['name' => 'Kvinesdal', 'country_code' => 'NO'],\n            ['name' => 'Santa Albertina', 'country_code' => 'BR'],\n            ['name' => 'Porvenir', 'country_code' => 'CL'],\n            ['name' => 'Coristanco', 'country_code' => 'ES'],\n            ['name' => 'Castelnuovo di Garfagnana', 'country_code' => 'IT'],\n            ['name' => 'Windsor', 'country_code' => 'US'],\n            ['name' => 'Melfort', 'country_code' => 'CA'],\n            ['name' => 'San Dorligo della Valle', 'country_code' => 'IT'],\n            ['name' => 'Villa Bartolomea', 'country_code' => 'IT'],\n            ['name' => 'Coulogne', 'country_code' => 'FR'],\n            ['name' => 'Pinkafeld', 'country_code' => 'AT'],\n            ['name' => 'Upice', 'country_code' => 'CZ'],\n            ['name' => 'Cristalia', 'country_code' => 'BR'],\n            ['name' => 'Bathmen', 'country_code' => 'NL'],\n            ['name' => 'Eastampton', 'country_code' => 'US'],\n            ['name' => 'Wingham', 'country_code' => 'AU'],\n            ['name' => 'Bramley', 'country_code' => 'GB'],\n            ['name' => 'Trebechovice pod Orebem', 'country_code' => 'CZ'],\n            ['name' => 'Stadtoldendorf', 'country_code' => 'DE'],\n            ['name' => 'Almodovar del Campo', 'country_code' => 'ES'],\n            ['name' => 'Homeland Park', 'country_code' => 'US'],\n            ['name' => 'Karaidel', 'country_code' => 'RU'],\n            ['name' => 'Lewistown', 'country_code' => 'US'],\n            ['name' => 'Durham', 'country_code' => 'US'],\n            ['name' => 'Winfield', 'country_code' => 'US'],\n            ['name' => 'Alnashi', 'country_code' => 'RU'],\n            ['name' => 'Bredstedt', 'country_code' => 'DE'],\n            ['name' => 'Wemding', 'country_code' => 'DE'],\n            ['name' => 'Tegernheim', 'country_code' => 'DE'],\n            ['name' => 'Cut Off', 'country_code' => 'US'],\n            ['name' => 'Tapioszele', 'country_code' => 'HU'],\n            ['name' => 'Murca', 'country_code' => 'PT'],\n            ['name' => 'Membrilla', 'country_code' => 'ES'],\n            ['name' => 'Louisville', 'country_code' => 'US'],\n            ['name' => 'Winthrop', 'country_code' => 'US'],\n            ['name' => 'Gannat', 'country_code' => 'FR'],\n            ['name' => 'Bussoleno', 'country_code' => 'IT'],\n            ['name' => 'Northern Cambria', 'country_code' => 'US'],\n            ['name' => 'Camalau', 'country_code' => 'BR'],\n            ['name' => 'Costigliole d Asti', 'country_code' => 'IT'],\n            ['name' => 'Balatonboglar', 'country_code' => 'HU'],\n            ['name' => 'Romentino', 'country_code' => 'IT'],\n            ['name' => 'Rousinov', 'country_code' => 'CZ'],\n            ['name' => 'Bedarieux', 'country_code' => 'FR'],\n            ['name' => 'Pevely', 'country_code' => 'US'],\n            ['name' => 'Sao Pedro de Alcantara', 'country_code' => 'BR'],\n            ['name' => 'South Monroe', 'country_code' => 'US'],\n            ['name' => 'Bourne End', 'country_code' => 'GB'],\n            ['name' => 'Douar Oulad Bou Krae El Fouqani', 'country_code' => 'MA'],\n            ['name' => 'Hungerford', 'country_code' => 'GB'],\n            ['name' => 'Bonnyville', 'country_code' => 'CA'],\n            ['name' => 'Sutamarchan', 'country_code' => 'CO'],\n            ['name' => 'Stornara', 'country_code' => 'IT'],\n            ['name' => 'Fayence', 'country_code' => 'FR'],\n            ['name' => 'Hellam', 'country_code' => 'US'],\n            ['name' => 'Westerburg', 'country_code' => 'DE'],\n            ['name' => 'Velesta', 'country_code' => 'MK'],\n            ['name' => 'Kisanpur', 'country_code' => 'NP'],\n            ['name' => 'Ettingen', 'country_code' => 'CH'],\n            ['name' => 'Robbio', 'country_code' => 'IT'],\n            ['name' => 'Corigliano d Otranto', 'country_code' => 'IT'],\n            ['name' => 'Lagodekhi', 'country_code' => 'GE'],\n            ['name' => 'Gieten', 'country_code' => 'NL'],\n            ['name' => 'Micheldorf in Oberosterreich', 'country_code' => 'AT'],\n            ['name' => 'Kivioli', 'country_code' => 'EE'],\n            ['name' => 'Chinnor', 'country_code' => 'GB'],\n            ['name' => 'Kazimierza Wielka', 'country_code' => 'PL'],\n            ['name' => 'Berhida', 'country_code' => 'HU'],\n            ['name' => 'Jablunkov', 'country_code' => 'CZ'],\n            ['name' => 'North Hills', 'country_code' => 'US'],\n            ['name' => 'Andebu', 'country_code' => 'NO'],\n            ['name' => 'Carbonne', 'country_code' => 'FR'],\n            ['name' => 'Murs-Erigne', 'country_code' => 'FR'],\n            ['name' => 'Novobelokatay', 'country_code' => 'RU'],\n            ['name' => 'Bad Saarow-Pieskow', 'country_code' => 'DE'],\n            ['name' => 'Valga', 'country_code' => 'ES'],\n            ['name' => 'Lakemoor', 'country_code' => 'US'],\n            ['name' => 'Karstadt', 'country_code' => 'DE'],\n            ['name' => 'Guardo', 'country_code' => 'ES'],\n            ['name' => 'Americo de Campos', 'country_code' => 'BR'],\n            ['name' => 'Quincy-Voisins', 'country_code' => 'FR'],\n            ['name' => 'Isen', 'country_code' => 'DE'],\n            ['name' => 'Fatezh', 'country_code' => 'RU'],\n            ['name' => 'Lower Heidelberg', 'country_code' => 'US'],\n            ['name' => 'Trooper', 'country_code' => 'US'],\n            ['name' => 'Vail', 'country_code' => 'US'],\n            ['name' => 'Echzell', 'country_code' => 'DE'],\n            ['name' => 'Zaraysk', 'country_code' => 'RU'],\n            ['name' => 'Lengnau', 'country_code' => 'CH'],\n            ['name' => 'Inniswold', 'country_code' => 'US'],\n            ['name' => 'Peypin', 'country_code' => 'FR'],\n            ['name' => 'Axminster', 'country_code' => 'GB'],\n            ['name' => 'Girifalco', 'country_code' => 'IT'],\n            ['name' => 'Steelton', 'country_code' => 'US'],\n            ['name' => 'Lesparre-Medoc', 'country_code' => 'FR'],\n            ['name' => 'Le Poinconnet', 'country_code' => 'FR'],\n            ['name' => 'Sao Joao de Manteninha', 'country_code' => 'BR'],\n            ['name' => 'Haiterbach', 'country_code' => 'DE'],\n            ['name' => 'Maria Helena', 'country_code' => 'BR'],\n            ['name' => 'Santa Barbara do Rio Pardo', 'country_code' => 'BR'],\n            ['name' => 'Pusztaszabolcs', 'country_code' => 'HU'],\n            ['name' => 'Northville', 'country_code' => 'US'],\n            ['name' => 'Johnson Lane', 'country_code' => 'US'],\n            ['name' => 'Lucerne Valley', 'country_code' => 'US'],\n            ['name' => 'Kao Liao', 'country_code' => 'TH'],\n            ['name' => 'St. Clair', 'country_code' => 'US'],\n            ['name' => 'Ao Luek', 'country_code' => 'TH'],\n            ['name' => 'East Alton', 'country_code' => 'US'],\n            ['name' => 'La Creche', 'country_code' => 'FR'],\n            ['name' => 'Rocky Mount', 'country_code' => 'US'],\n            ['name' => 'Dedoplists q aro', 'country_code' => 'GE'],\n            ['name' => 'San Miguel Panixtlahuaca', 'country_code' => 'MX'],\n            ['name' => 'Desselgem', 'country_code' => 'BE'],\n            ['name' => 'Beniganim', 'country_code' => 'ES'],\n            ['name' => 'Stettler', 'country_code' => 'CA'],\n            ['name' => 'Dionysos', 'country_code' => 'GR'],\n            ['name' => 'Munzenberg', 'country_code' => 'DE'],\n            ['name' => 'Rochlitz', 'country_code' => 'DE'],\n            ['name' => 'Kungsor', 'country_code' => 'SE'],\n            ['name' => 'Vidigueira', 'country_code' => 'PT'],\n            ['name' => 'Sireti', 'country_code' => 'MD'],\n            ['name' => 'Andover', 'country_code' => 'US'],\n            ['name' => 'Eberndorf', 'country_code' => 'AT'],\n            ['name' => 'Modrice', 'country_code' => 'CZ'],\n            ['name' => 'Kozaki', 'country_code' => 'JP'],\n            ['name' => 'Barnhart', 'country_code' => 'US'],\n            ['name' => 'Fruta de Leite', 'country_code' => 'BR'],\n            ['name' => 'Villeneuve', 'country_code' => 'CH'],\n            ['name' => 'Eurajoki', 'country_code' => 'FI'],\n            ['name' => 'Mila Doce', 'country_code' => 'US'],\n            ['name' => 'Hopedale', 'country_code' => 'US'],\n            ['name' => 'Tashtyp', 'country_code' => 'RU'],\n            ['name' => 'Fernandes Pinheiro', 'country_code' => 'BR'],\n            ['name' => 'Waldbrunn', 'country_code' => 'DE'],\n            ['name' => 'New London', 'country_code' => 'US'],\n            ['name' => 'Gowanda', 'country_code' => 'US'],\n            ['name' => 'Shields', 'country_code' => 'US'],\n            ['name' => 'Sharan', 'country_code' => 'RU'],\n            ['name' => 'Shatsk', 'country_code' => 'RU'],\n            ['name' => 'Progreso', 'country_code' => 'US'],\n            ['name' => 'Gray', 'country_code' => 'US'],\n            ['name' => 'Picerno', 'country_code' => 'IT'],\n            ['name' => 'Frasin', 'country_code' => 'RO'],\n            ['name' => 'Westville', 'country_code' => 'US'],\n            ['name' => 'Studley', 'country_code' => 'GB'],\n            ['name' => 'Sterlibashevo', 'country_code' => 'RU'],\n            ['name' => 'Callington', 'country_code' => 'GB'],\n            ['name' => 'Davyd-Haradok', 'country_code' => 'BY'],\n            ['name' => 'Itau', 'country_code' => 'BR'],\n            ['name' => 'Charlestown', 'country_code' => 'US'],\n            ['name' => 'Dechy', 'country_code' => 'FR'],\n            ['name' => 'Yoakum', 'country_code' => 'US'],\n            ['name' => 'Darlington', 'country_code' => 'US'],\n            ['name' => 'Kaba', 'country_code' => 'HU'],\n            ['name' => 'Canale', 'country_code' => 'IT'],\n            ['name' => 'Rodeio Bonito', 'country_code' => 'BR'],\n            ['name' => 'Tinzart', 'country_code' => 'MA'],\n            ['name' => 'Ubarana', 'country_code' => 'BR'],\n            ['name' => 'Waakirchen', 'country_code' => 'DE'],\n            ['name' => 'Ornago', 'country_code' => 'IT'],\n            ['name' => 'Montalcino', 'country_code' => 'IT'],\n            ['name' => 'Wolfach', 'country_code' => 'DE'],\n            ['name' => 'East Preston', 'country_code' => 'GB'],\n            ['name' => 'Raton', 'country_code' => 'US'],\n            ['name' => 'Mojen', 'country_code' => 'IR'],\n            ['name' => 'Al Qutaylibiyah', 'country_code' => 'SY'],\n            ['name' => 'Shefar am', 'country_code' => 'IL'],\n            ['name' => 'Certosa di Pavia', 'country_code' => 'IT'],\n            ['name' => 'Goodrich', 'country_code' => 'US'],\n            ['name' => 'East Hanover', 'country_code' => 'US'],\n            ['name' => 'Psachna', 'country_code' => 'GR'],\n            ['name' => 'Fontenay-Tresigny', 'country_code' => 'FR'],\n            ['name' => 'Ararica', 'country_code' => 'BR'],\n            ['name' => 'Freshwater', 'country_code' => 'GB'],\n            ['name' => 'Morshyn', 'country_code' => 'UA'],\n            ['name' => 'Leongatha', 'country_code' => 'AU'],\n            ['name' => 'Saint-Calixte', 'country_code' => 'CA'],\n            ['name' => 'Longare', 'country_code' => 'IT'],\n            ['name' => 'Campina do Monte Alegre', 'country_code' => 'BR'],\n            ['name' => 'Countryside', 'country_code' => 'US'],\n            ['name' => 'Furiani', 'country_code' => 'FR'],\n            ['name' => 'Xylokastro', 'country_code' => 'GR'],\n            ['name' => 'Sullivan City', 'country_code' => 'US'],\n            ['name' => 'Lac-Megantic', 'country_code' => 'CA'],\n            ['name' => 'Tucunduva', 'country_code' => 'BR'],\n            ['name' => 'Tremp', 'country_code' => 'ES'],\n            ['name' => 'Perth', 'country_code' => 'CA'],\n            ['name' => 'Etalle', 'country_code' => 'BE'],\n            ['name' => 'Mucuchies', 'country_code' => 'VE'],\n            ['name' => 'Loro Ciuffenna', 'country_code' => 'IT'],\n            ['name' => 'Pyrbaum', 'country_code' => 'DE'],\n            ['name' => 'Keswick', 'country_code' => 'GB'],\n            ['name' => 'Paradise', 'country_code' => 'US'],\n            ['name' => 'Leun', 'country_code' => 'DE'],\n            ['name' => 'Hausach', 'country_code' => 'DE'],\n            ['name' => 'Boe', 'country_code' => 'FR'],\n            ['name' => 'Havelte', 'country_code' => 'NL'],\n            ['name' => 'Leiston', 'country_code' => 'GB'],\n            ['name' => 'Blaichach', 'country_code' => 'DE'],\n            ['name' => 'Pagosa Springs', 'country_code' => 'US'],\n            ['name' => 'Santa Maria da Serra', 'country_code' => 'BR'],\n            ['name' => 'Mullica', 'country_code' => 'US'],\n            ['name' => 'Woodcreek', 'country_code' => 'US'],\n            ['name' => 'Surnadal', 'country_code' => 'NO'],\n            ['name' => 'Santa Helena', 'country_code' => 'BR'],\n            ['name' => 'Dettenhausen', 'country_code' => 'DE'],\n            ['name' => 'Logan', 'country_code' => 'US'],\n            ['name' => 'Paula Freitas', 'country_code' => 'BR'],\n            ['name' => 'Dumfries', 'country_code' => 'US'],\n            ['name' => 'Homer', 'country_code' => 'US'],\n            ['name' => 'Oliver Paipoonge', 'country_code' => 'CA'],\n            ['name' => 'Braunlingen', 'country_code' => 'DE'],\n            ['name' => 'Tynec nad Sazavou', 'country_code' => 'CZ'],\n            ['name' => 'Gransee', 'country_code' => 'DE'],\n            ['name' => 'Wesley Hills', 'country_code' => 'US'],\n            ['name' => 'Mineola', 'country_code' => 'US'],\n            ['name' => 'Finderne', 'country_code' => 'US'],\n            ['name' => 'San Donato di Lecce', 'country_code' => 'IT'],\n            ['name' => 'Coqueiro Seco', 'country_code' => 'BR'],\n            ['name' => 'Marennes', 'country_code' => 'FR'],\n            ['name' => 'Zebulon', 'country_code' => 'US'],\n            ['name' => 'Banatski Karlovac', 'country_code' => 'RS'],\n            ['name' => 'Pocking', 'country_code' => 'DE'],\n            ['name' => 'Cresaptown', 'country_code' => 'US'],\n            ['name' => 'Granville', 'country_code' => 'US'],\n            ['name' => 'Akbarabad', 'country_code' => 'IR'],\n            ['name' => 'Kaltennordheim', 'country_code' => 'DE'],\n            ['name' => 'Littleton', 'country_code' => 'US'],\n            ['name' => 'Barra de Sao Miguel', 'country_code' => 'BR'],\n            ['name' => 'Sao Joao do Caiua', 'country_code' => 'BR'],\n            ['name' => 'Ospedaletto Euganeo', 'country_code' => 'IT'],\n            ['name' => 'Palmwoods', 'country_code' => 'AU'],\n            ['name' => 'Staunton', 'country_code' => 'US'],\n            ['name' => 'Taylor', 'country_code' => 'US'],\n            ['name' => 'Roanoke', 'country_code' => 'US'],\n            ['name' => 'Groton', 'country_code' => 'US'],\n            ['name' => 'Vias', 'country_code' => 'FR'],\n            ['name' => 'Greenacres', 'country_code' => 'US'],\n            ['name' => 'Bazarnyye Mataki', 'country_code' => 'RU'],\n            ['name' => 'Chambarak', 'country_code' => 'AM'],\n            ['name' => 'Dunsborough', 'country_code' => 'AU'],\n            ['name' => 'Ruhen', 'country_code' => 'DE'],\n            ['name' => 'Schwarmstedt', 'country_code' => 'DE'],\n            ['name' => 'Le Valdahon', 'country_code' => 'FR'],\n            ['name' => 'Wilnis', 'country_code' => 'NL'],\n            ['name' => 'Kipfenberg', 'country_code' => 'DE'],\n            ['name' => 'El Arba Bouzemmour', 'country_code' => 'MA'],\n            ['name' => 'Alzamay', 'country_code' => 'RU'],\n            ['name' => 'Ubinskoye', 'country_code' => 'RU'],\n            ['name' => 'Luzerne', 'country_code' => 'US'],\n            ['name' => 'Koreiz', 'country_code' => 'UA'],\n            ['name' => 'Ceva', 'country_code' => 'IT'],\n            ['name' => 'Bracigliano', 'country_code' => 'IT'],\n            ['name' => 'Fontanelle', 'country_code' => 'IT'],\n            ['name' => 'Trebes', 'country_code' => 'FR'],\n            ['name' => 'Saint-Memmie', 'country_code' => 'FR'],\n            ['name' => 'Horst', 'country_code' => 'DE'],\n            ['name' => 'Rio Manso', 'country_code' => 'BR'],\n            ['name' => 'Waibstadt', 'country_code' => 'DE'],\n            ['name' => 'Maiori', 'country_code' => 'IT'],\n            ['name' => 'Buyni Qarah', 'country_code' => 'AF'],\n            ['name' => 'Uelsen', 'country_code' => 'DE'],\n            ['name' => 'Turuntayevo', 'country_code' => 'RU'],\n            ['name' => 'Eagleton Village', 'country_code' => 'US'],\n            ['name' => 'Aljezur', 'country_code' => 'PT'],\n            ['name' => 'Selinsgrove', 'country_code' => 'US'],\n            ['name' => 'Tournus', 'country_code' => 'FR'],\n            ['name' => 'Murovani Kurylivtsi', 'country_code' => 'UA'],\n            ['name' => 'Bandeira do Sul', 'country_code' => 'BR'],\n            ['name' => 'Hampstead', 'country_code' => 'US'],\n            ['name' => 'Gataia', 'country_code' => 'RO'],\n            ['name' => 'Schonenberg-Kubelberg', 'country_code' => 'DE'],\n            ['name' => 'Borabue', 'country_code' => 'TH'],\n            ['name' => 'Nasrabad', 'country_code' => 'IR'],\n            ['name' => 'Bagno di Romagna', 'country_code' => 'IT'],\n            ['name' => 'Ozerne', 'country_code' => 'UA'],\n            ['name' => 'Courthezon', 'country_code' => 'FR'],\n            ['name' => 'Aimargues', 'country_code' => 'FR'],\n            ['name' => 'Radenthein', 'country_code' => 'AT'],\n            ['name' => 'Visegrad', 'country_code' => 'BA'],\n            ['name' => 'Rogliano', 'country_code' => 'IT'],\n            ['name' => 'Hermon', 'country_code' => 'US'],\n            ['name' => 'Sweetwater', 'country_code' => 'US'],\n            ['name' => 'Huai Mek', 'country_code' => 'TH'],\n            ['name' => 'Sambuca di Sicilia', 'country_code' => 'IT'],\n            ['name' => 'Old Tappan', 'country_code' => 'US'],\n            ['name' => 'Hebertshausen', 'country_code' => 'DE'],\n            ['name' => 'Willington', 'country_code' => 'US'],\n            ['name' => 'Ober-Morlen', 'country_code' => 'DE'],\n            ['name' => 'Ait Ouakrim', 'country_code' => 'MA'],\n            ['name' => 'Viggiu', 'country_code' => 'IT'],\n            ['name' => 'Mengerskirchen', 'country_code' => 'DE'],\n            ['name' => 'Drighlington', 'country_code' => 'GB'],\n            ['name' => 'Fismes', 'country_code' => 'FR'],\n            ['name' => 'Naturno', 'country_code' => 'IT'],\n            ['name' => 'Lannilis', 'country_code' => 'FR'],\n            ['name' => 'Willard', 'country_code' => 'US'],\n            ['name' => 'Gaurama', 'country_code' => 'BR'],\n            ['name' => 'Los Yebenes', 'country_code' => 'ES'],\n            ['name' => 'Ybbs an der Donau', 'country_code' => 'AT'],\n            ['name' => 'Simiane-Collongue', 'country_code' => 'FR'],\n            ['name' => 'Madisonville', 'country_code' => 'US'],\n            ['name' => 'Loudon', 'country_code' => 'US'],\n            ['name' => 'Slaton', 'country_code' => 'US'],\n            ['name' => 'Buti', 'country_code' => 'IT'],\n            ['name' => 'Frei Gaspar', 'country_code' => 'BR'],\n            ['name' => 'Mouroux', 'country_code' => 'FR'],\n            ['name' => 'Flines-les-Raches', 'country_code' => 'FR'],\n            ['name' => 'Chamberlayne', 'country_code' => 'US'],\n            ['name' => 'Irymple', 'country_code' => 'AU'],\n            ['name' => 'Uttenreuth', 'country_code' => 'DE'],\n            ['name' => 'Aragominas', 'country_code' => 'BR'],\n            ['name' => 'Santa Luz', 'country_code' => 'BR'],\n            ['name' => 'Weischlitz', 'country_code' => 'DE'],\n            ['name' => 'Montezuma', 'country_code' => 'US'],\n            ['name' => 'Dulliken', 'country_code' => 'CH'],\n            ['name' => 'Vargarda', 'country_code' => 'SE'],\n            ['name' => 'Biesenthal', 'country_code' => 'DE'],\n            ['name' => 'Sollies-Toucas', 'country_code' => 'FR'],\n            ['name' => 'Port-la-Nouvelle', 'country_code' => 'FR'],\n            ['name' => 'Massanetta Springs', 'country_code' => 'US'],\n            ['name' => 'Lovere', 'country_code' => 'IT'],\n            ['name' => 'Briey', 'country_code' => 'FR'],\n            ['name' => 'Bryukhovychi', 'country_code' => 'UA'],\n            ['name' => 'Gustine', 'country_code' => 'US'],\n            ['name' => 'Wellesbourne Hastings', 'country_code' => 'GB'],\n            ['name' => 'Erquinghem-Lys', 'country_code' => 'FR'],\n            ['name' => 'Alhama de Granada', 'country_code' => 'ES'],\n            ['name' => 'Gattatico', 'country_code' => 'IT'],\n            ['name' => 'Korocha', 'country_code' => 'RU'],\n            ['name' => 'Moeiwadi', 'country_code' => 'TH'],\n            ['name' => 'Poltar', 'country_code' => 'SK'],\n            ['name' => 'Mezokovacshaza', 'country_code' => 'HU'],\n            ['name' => 'San Juan Numi', 'country_code' => 'MX'],\n            ['name' => 'Nolanville', 'country_code' => 'US'],\n            ['name' => 'Tittmoning', 'country_code' => 'DE'],\n            ['name' => 'Mindyak', 'country_code' => 'RU'],\n            ['name' => 'Dierdorf', 'country_code' => 'DE'],\n            ['name' => 'Speichersdorf', 'country_code' => 'DE'],\n            ['name' => 'Boulay-Moselle', 'country_code' => 'FR'],\n            ['name' => 'Pliening', 'country_code' => 'DE'],\n            ['name' => 'Rottach-Egern', 'country_code' => 'DE'],\n            ['name' => 'Poloni', 'country_code' => 'BR'],\n            ['name' => 'Constantina', 'country_code' => 'ES'],\n            ['name' => 'Argamasilla de Calatrava', 'country_code' => 'ES'],\n            ['name' => 'Windcrest', 'country_code' => 'US'],\n            ['name' => 'Spring Ridge', 'country_code' => 'US'],\n            ['name' => 'Phachi', 'country_code' => 'TH'],\n            ['name' => 'Paternion', 'country_code' => 'AT'],\n            ['name' => 'Otranto', 'country_code' => 'IT'],\n            ['name' => 'Brookville', 'country_code' => 'US'],\n            ['name' => 'Abtenau', 'country_code' => 'AT'],\n            ['name' => 'Marlow Heights', 'country_code' => 'US'],\n            ['name' => 'Ighil', 'country_code' => 'MA'],\n            ['name' => 'Wormhout', 'country_code' => 'FR'],\n            ['name' => 'Hagenbach', 'country_code' => 'DE'],\n            ['name' => 'Al Mulayhah al Gharbiyah', 'country_code' => 'SY'],\n            ['name' => 'Campagnola Emilia', 'country_code' => 'IT'],\n            ['name' => 'Busalla', 'country_code' => 'IT'],\n            ['name' => 'Turpin Hills', 'country_code' => 'US'],\n            ['name' => 'Wirges', 'country_code' => 'DE'],\n            ['name' => 'Castelverde', 'country_code' => 'IT'],\n            ['name' => 'Luling', 'country_code' => 'US'],\n            ['name' => 'Humboldt', 'country_code' => 'CA'],\n            ['name' => 'Camporosso', 'country_code' => 'IT'],\n            ['name' => 'Mereni', 'country_code' => 'MD'],\n            ['name' => 'Ernee', 'country_code' => 'FR'],\n            ['name' => 'Mikomeseng', 'country_code' => 'GQ'],\n            ['name' => 'Le Puy-Sainte-Reparade', 'country_code' => 'FR'],\n            ['name' => 'Tahitofalu', 'country_code' => 'HU'],\n            ['name' => 'Azatan', 'country_code' => 'AM'],\n            ['name' => 'Amersid', 'country_code' => 'MA'],\n            ['name' => 'Vilppula', 'country_code' => 'FI'],\n            ['name' => 'Martlesham', 'country_code' => 'GB'],\n            ['name' => 'Glendale', 'country_code' => 'US'],\n            ['name' => 'Hutchins', 'country_code' => 'US'],\n            ['name' => 'Chester', 'country_code' => 'US'],\n            ['name' => 'Furstenberg', 'country_code' => 'DE'],\n            ['name' => 'Cortina d Ampezzo', 'country_code' => 'IT'],\n            ['name' => 'Vilanova de la Roca', 'country_code' => 'ES'],\n            ['name' => 'Belton', 'country_code' => 'US'],\n            ['name' => 'Margate City', 'country_code' => 'US'],\n            ['name' => 'Posen', 'country_code' => 'US'],\n            ['name' => 'Delvine', 'country_code' => 'AL'],\n            ['name' => 'Dowagiac', 'country_code' => 'US'],\n            ['name' => 'Alma', 'country_code' => 'US'],\n            ['name' => 'Dompierre-sur-Mer', 'country_code' => 'FR'],\n            ['name' => 'La Chevroliere', 'country_code' => 'FR'],\n            ['name' => ' Assal al Ward', 'country_code' => 'SY'],\n            ['name' => 'Nieuwe Pekela', 'country_code' => 'NL'],\n            ['name' => 'Chlumec nad Cidlinou', 'country_code' => 'CZ'],\n            ['name' => 'Las Flores', 'country_code' => 'US'],\n            ['name' => 'Birnbach', 'country_code' => 'DE'],\n            ['name' => 'Vereide', 'country_code' => 'NO'],\n            ['name' => 'Grebenstein', 'country_code' => 'DE'],\n            ['name' => 'Franklin Center', 'country_code' => 'US'],\n            ['name' => 'Angera', 'country_code' => 'IT'],\n            ['name' => 'Sobralia', 'country_code' => 'BR'],\n            ['name' => 'Saint-Denis-de-Pile', 'country_code' => 'FR'],\n            ['name' => 'Rosendale', 'country_code' => 'US'],\n            ['name' => 'Algaida', 'country_code' => 'ES'],\n            ['name' => 'Viarmes', 'country_code' => 'FR'],\n            ['name' => 'Helsa', 'country_code' => 'DE'],\n            ['name' => 'Dawran ad Daydah', 'country_code' => 'YE'],\n            ['name' => 'Weidenberg', 'country_code' => 'DE'],\n            ['name' => 'Cilavegna', 'country_code' => 'IT'],\n            ['name' => 'La Chapelle-Basse-Mer', 'country_code' => 'FR'],\n            ['name' => 'Paulsboro', 'country_code' => 'US'],\n            ['name' => 'Alandroal', 'country_code' => 'PT'],\n            ['name' => 'Bohain-en-Vermandois', 'country_code' => 'FR'],\n            ['name' => 'Martonvasar', 'country_code' => 'HU'],\n            ['name' => 'New Martinsville', 'country_code' => 'US'],\n            ['name' => 'Breese', 'country_code' => 'US'],\n            ['name' => 'Verkhovyna', 'country_code' => 'UA'],\n            ['name' => 'Red Cliffs', 'country_code' => 'AU'],\n            ['name' => 'Mount Arlington', 'country_code' => 'US'],\n            ['name' => 'Neubulach', 'country_code' => 'DE'],\n            ['name' => 'Botley', 'country_code' => 'GB'],\n            ['name' => 'Old Fig Garden', 'country_code' => 'US'],\n            ['name' => 'Pontiac', 'country_code' => 'CA'],\n            ['name' => 'Silver Lakes', 'country_code' => 'US'],\n            ['name' => 'Arnage', 'country_code' => 'FR'],\n            ['name' => 'Gracho Cardoso', 'country_code' => 'BR'],\n            ['name' => 'Tacherting', 'country_code' => 'DE'],\n            ['name' => 'Ross', 'country_code' => 'US'],\n            ['name' => 'Sluknov', 'country_code' => 'CZ'],\n            ['name' => 'Calvi', 'country_code' => 'FR'],\n            ['name' => 'Cumnor', 'country_code' => 'GB'],\n            ['name' => 'Harris Hill', 'country_code' => 'US'],\n            ['name' => 'Carterville', 'country_code' => 'US'],\n            ['name' => 'Orchard Homes', 'country_code' => 'US'],\n            ['name' => 'Celra', 'country_code' => 'ES'],\n            ['name' => 'Buochs', 'country_code' => 'CH'],\n            ['name' => 'Haimhausen', 'country_code' => 'DE'],\n            ['name' => 'Kartal', 'country_code' => 'HU'],\n            ['name' => 'Saint-Georges-de-Didonne', 'country_code' => 'FR'],\n            ['name' => 'Esquivias', 'country_code' => 'ES'],\n            ['name' => 'Yakoruda', 'country_code' => 'BG'],\n            ['name' => 'La Selva', 'country_code' => 'ES'],\n            ['name' => 'Littlefield', 'country_code' => 'US'],\n            ['name' => 'Paterna de Rivera', 'country_code' => 'ES'],\n            ['name' => 'Sidi Harazem', 'country_code' => 'MA'],\n            ['name' => 'Willow Park', 'country_code' => 'US'],\n            ['name' => 'Dello', 'country_code' => 'IT'],\n            ['name' => 'Hartwell', 'country_code' => 'US'],\n            ['name' => 'Villa del Conte', 'country_code' => 'IT'],\n            ['name' => 'Saint-Pierre-d Irube', 'country_code' => 'FR'],\n            ['name' => 'Shintoku', 'country_code' => 'JP'],\n            ['name' => 'Hambergen', 'country_code' => 'DE'],\n            ['name' => 'Woodcliff Lake', 'country_code' => 'US'],\n            ['name' => 'Rijsbergen', 'country_code' => 'NL'],\n            ['name' => 'Cave Creek', 'country_code' => 'US'],\n            ['name' => 'Seon', 'country_code' => 'CH'],\n            ['name' => 'Chelsea', 'country_code' => 'US'],\n            ['name' => 'Wusterhausen', 'country_code' => 'DE'],\n            ['name' => 'San Secondo Parmense', 'country_code' => 'IT'],\n            ['name' => 'Roseland', 'country_code' => 'US'],\n            ['name' => 'Babenhausen', 'country_code' => 'DE'],\n            ['name' => 'Glina', 'country_code' => 'RO'],\n            ['name' => 'Wallers', 'country_code' => 'FR'],\n            ['name' => 'Aroazes', 'country_code' => 'BR'],\n            ['name' => 'Ohira', 'country_code' => 'JP'],\n            ['name' => 'Langquaid', 'country_code' => 'DE'],\n            ['name' => 'Brescello', 'country_code' => 'IT'],\n            ['name' => 'Gossolengo', 'country_code' => 'IT'],\n            ['name' => 'Sauvian', 'country_code' => 'FR'],\n            ['name' => 'Grotte', 'country_code' => 'IT'],\n            ['name' => 'Saint-Cannat', 'country_code' => 'FR'],\n            ['name' => 'Greenwood', 'country_code' => 'US'],\n            ['name' => 'Yeles', 'country_code' => 'ES'],\n            ['name' => 'Jaszfenyszaru', 'country_code' => 'HU'],\n            ['name' => 'Filyro', 'country_code' => 'GR'],\n            ['name' => 'Moosic', 'country_code' => 'US'],\n            ['name' => 'Tancoco', 'country_code' => 'MX'],\n            ['name' => 'Guines', 'country_code' => 'FR'],\n            ['name' => 'Potcoava', 'country_code' => 'RO'],\n            ['name' => 'Melicucco', 'country_code' => 'IT'],\n            ['name' => 'Les Avenieres', 'country_code' => 'FR'],\n            ['name' => 'Alfacar', 'country_code' => 'ES'],\n            ['name' => 'Fontevivo', 'country_code' => 'IT'],\n            ['name' => 'Hellertown', 'country_code' => 'US'],\n            ['name' => 'South Hooksett', 'country_code' => 'US'],\n            ['name' => 'Cancello', 'country_code' => 'IT'],\n            ['name' => 'Aragatsavan', 'country_code' => 'AM'],\n            ['name' => 'Guagnano', 'country_code' => 'IT'],\n            ['name' => 'Berne', 'country_code' => 'US'],\n            ['name' => 'West Clarkston-Highland', 'country_code' => 'US'],\n            ['name' => 'Houlton', 'country_code' => 'US'],\n            ['name' => 'Bni Hadifa', 'country_code' => 'MA'],\n            ['name' => 'Chagny', 'country_code' => 'FR'],\n            ['name' => 'Orjiva', 'country_code' => 'ES'],\n            ['name' => 'St. Paul', 'country_code' => 'CA'],\n            ['name' => 'Chernihivka', 'country_code' => 'UA'],\n            ['name' => 'Arkhangelskoye', 'country_code' => 'RU'],\n            ['name' => 'Palmanova', 'country_code' => 'IT'],\n            ['name' => 'Fenouillet', 'country_code' => 'FR'],\n            ['name' => 'Dasing', 'country_code' => 'DE'],\n            ['name' => 'Tuglie', 'country_code' => 'IT'],\n            ['name' => 'Eschau', 'country_code' => 'FR'],\n            ['name' => 'Poshekhonye', 'country_code' => 'RU'],\n            ['name' => 'Baar-Ebenhausen', 'country_code' => 'DE'],\n            ['name' => 'Thalheim bei Wels', 'country_code' => 'AT'],\n            ['name' => 'Sibbesse', 'country_code' => 'DE'],\n            ['name' => 'Tatsugo', 'country_code' => 'JP'],\n            ['name' => 'Eldorado at Santa Fe', 'country_code' => 'US'],\n            ['name' => 'Firmino Alves', 'country_code' => 'BR'],\n            ['name' => 'Vayk', 'country_code' => 'AM'],\n            ['name' => 'Villanova d Asti', 'country_code' => 'IT'],\n            ['name' => 'Schwarzheide', 'country_code' => 'DE'],\n            ['name' => 'Ferriere-la-Grande', 'country_code' => 'FR'],\n            ['name' => 'Kremasti', 'country_code' => 'GR'],\n            ['name' => 'Kameno', 'country_code' => 'BG'],\n            ['name' => 'Ouderkerk aan den IJssel', 'country_code' => 'NL'],\n            ['name' => 'Senhora de Oliveira', 'country_code' => 'BR'],\n            ['name' => 'Mattydale', 'country_code' => 'US'],\n            ['name' => 'Wilson', 'country_code' => 'US'],\n            ['name' => 'Sertaneja', 'country_code' => 'BR'],\n            ['name' => 'Itaverava', 'country_code' => 'BR'],\n            ['name' => 'Fuzesgyarmat', 'country_code' => 'HU'],\n            ['name' => 'Szecseny', 'country_code' => 'HU'],\n            ['name' => 'Harvest', 'country_code' => 'US'],\n            ['name' => 'Audruicq', 'country_code' => 'FR'],\n            ['name' => 'Balerno', 'country_code' => 'GB'],\n            ['name' => 'Aylsham', 'country_code' => 'GB'],\n            ['name' => 'Lebanon', 'country_code' => 'US'],\n            ['name' => 'Non Sila', 'country_code' => 'TH'],\n            ['name' => 'Chatuzange-le-Goubet', 'country_code' => 'FR'],\n            ['name' => 'Phayuha Khiri', 'country_code' => 'TH'],\n            ['name' => 'Brookshire', 'country_code' => 'US'],\n            ['name' => 'Bright', 'country_code' => 'US'],\n            ['name' => 'Gray', 'country_code' => 'FR'],\n            ['name' => 'Chauchina', 'country_code' => 'ES'],\n            ['name' => 'Sausheim', 'country_code' => 'FR'],\n            ['name' => 'Arce', 'country_code' => 'IT'],\n            ['name' => 'Montrond-les-Bains', 'country_code' => 'FR'],\n            ['name' => 'Volo', 'country_code' => 'US'],\n            ['name' => 'Ramblewood', 'country_code' => 'US'],\n            ['name' => 'Tewksbury', 'country_code' => 'US'],\n            ['name' => 'Plouay', 'country_code' => 'FR'],\n            ['name' => 'Arroyo de la Luz', 'country_code' => 'ES'],\n            ['name' => 'Serra de Sao Bento', 'country_code' => 'BR'],\n            ['name' => 'Kippenheim', 'country_code' => 'DE'],\n            ['name' => 'Riolo Terme', 'country_code' => 'IT'],\n            ['name' => 'Wittichenau', 'country_code' => 'DE'],\n            ['name' => 'Leopoldsdorf', 'country_code' => 'AT'],\n            ['name' => 'Lake Mohegan', 'country_code' => 'US'],\n            ['name' => 'Orleans', 'country_code' => 'US'],\n            ['name' => 'Jilemnice', 'country_code' => 'CZ'],\n            ['name' => 'Rocca di Neto', 'country_code' => 'IT'],\n            ['name' => 'Fischamend', 'country_code' => 'AT'],\n            ['name' => 'Cambria', 'country_code' => 'US'],\n            ['name' => 'Beardstown', 'country_code' => 'US'],\n            ['name' => 'Manasquan', 'country_code' => 'US'],\n            ['name' => 'Sala Baganza', 'country_code' => 'IT'],\n            ['name' => 'Nagyhalasz', 'country_code' => 'HU'],\n            ['name' => 'Woodstock', 'country_code' => 'US'],\n            ['name' => 'Liberato Salzano', 'country_code' => 'BR'],\n            ['name' => 'Veselynove', 'country_code' => 'UA'],\n            ['name' => 'San Paolo di Civitate', 'country_code' => 'IT'],\n            ['name' => 'Walenstadt', 'country_code' => 'CH'],\n            ['name' => 'Aschau im Chiemgau', 'country_code' => 'DE'],\n            ['name' => 'Marianna', 'country_code' => 'US'],\n            ['name' => 'Trest ', 'country_code' => 'CZ'],\n            ['name' => 'Moravsky Krumlov', 'country_code' => 'CZ'],\n            ['name' => 'Schliengen', 'country_code' => 'DE'],\n            ['name' => 'Markfield', 'country_code' => 'GB'],\n            ['name' => 'Pont-Eveque', 'country_code' => 'FR'],\n            ['name' => 'Britania', 'country_code' => 'BR'],\n            ['name' => 'Semeac', 'country_code' => 'FR'],\n            ['name' => 'West Bountiful', 'country_code' => 'US'],\n            ['name' => 'Fellsmere', 'country_code' => 'US'],\n            ['name' => 'Mondorf-les-Bains', 'country_code' => 'LU'],\n            ['name' => 'Lyndon', 'country_code' => 'US'],\n            ['name' => 'Wernberg', 'country_code' => 'AT'],\n            ['name' => 'Oscadnica', 'country_code' => 'SK'],\n            ['name' => 'Gorebridge', 'country_code' => 'GB'],\n            ['name' => 'Castuera', 'country_code' => 'ES'],\n            ['name' => 'Svaty Jur', 'country_code' => 'SK'],\n            ['name' => 'Hrebinky', 'country_code' => 'UA'],\n            ['name' => 'Selkirk', 'country_code' => 'GB'],\n            ['name' => 'Tomislavgrad', 'country_code' => 'BA'],\n            ['name' => 'Ban Bang Tabun', 'country_code' => 'TH'],\n            ['name' => 'Schrozberg', 'country_code' => 'DE'],\n            ['name' => 'Mount Zion', 'country_code' => 'US'],\n            ['name' => 'Piedmont', 'country_code' => 'US'],\n            ['name' => 'Casaleone', 'country_code' => 'IT'],\n            ['name' => 'Fernando Prestes', 'country_code' => 'BR'],\n            ['name' => 'Turi', 'country_code' => 'EE'],\n            ['name' => 'Norwood', 'country_code' => 'US'],\n            ['name' => 'China', 'country_code' => 'JP'],\n            ['name' => 'Riachos', 'country_code' => 'PT'],\n            ['name' => 'Santa Barbara', 'country_code' => 'BR'],\n            ['name' => 'Patterson', 'country_code' => 'US'],\n            ['name' => 'Dosrius', 'country_code' => 'ES'],\n            ['name' => 'Debesy', 'country_code' => 'RU'],\n            ['name' => 'Villa Park', 'country_code' => 'US'],\n            ['name' => 'Novaya Mayna', 'country_code' => 'RU'],\n            ['name' => 'Dobrovelychkivka', 'country_code' => 'UA'],\n            ['name' => 'Tupper Lake', 'country_code' => 'US'],\n            ['name' => 'Sveio', 'country_code' => 'NO'],\n            ['name' => 'Belogradchik', 'country_code' => 'BG'],\n            ['name' => 'Severiano Melo', 'country_code' => 'BR'],\n            ['name' => 'San Giorgio Piacentino', 'country_code' => 'IT'],\n            ['name' => 'Vadso', 'country_code' => 'NO'],\n            ['name' => 'Lyubeshiv', 'country_code' => 'UA'],\n            ['name' => 'Mouy', 'country_code' => 'FR'],\n            ['name' => 'Rudna', 'country_code' => 'CZ'],\n            ['name' => 'Highgrove', 'country_code' => 'US'],\n            ['name' => 'The Village of Indian Hill', 'country_code' => 'US'],\n            ['name' => 'Solidao', 'country_code' => 'BR'],\n            ['name' => 'Sudzha', 'country_code' => 'RU'],\n            ['name' => 'Wangen bei Olten', 'country_code' => 'CH'],\n            ['name' => 'Turner', 'country_code' => 'US'],\n            ['name' => 'Markt Erlbach', 'country_code' => 'DE'],\n            ['name' => 'Conley', 'country_code' => 'US'],\n            ['name' => 'Little Silver', 'country_code' => 'US'],\n            ['name' => 'Jahnsdorf', 'country_code' => 'DE'],\n            ['name' => 'Slobozia Mare', 'country_code' => 'MD'],\n            ['name' => 'Edna', 'country_code' => 'US'],\n            ['name' => 'Peoria Heights', 'country_code' => 'US'],\n            ['name' => 'Dunboyne', 'country_code' => 'IE'],\n            ['name' => 'Llerena', 'country_code' => 'ES'],\n            ['name' => 'Cestica', 'country_code' => 'HR'],\n            ['name' => 'Montehermoso', 'country_code' => 'ES'],\n            ['name' => 'Hilton', 'country_code' => 'US'],\n            ['name' => 'Sewickley', 'country_code' => 'US'],\n            ['name' => 'Eschede', 'country_code' => 'DE'],\n            ['name' => 'Dyshne-Vedeno', 'country_code' => 'RU'],\n            ['name' => 'Meymeh', 'country_code' => 'IR'],\n            ['name' => 'Granite Shoals', 'country_code' => 'US'],\n            ['name' => 'Palmview', 'country_code' => 'US'],\n            ['name' => 'Fountainhead-Orchard Hills', 'country_code' => 'US'],\n            ['name' => 'La Guancha', 'country_code' => 'ES'],\n            ['name' => 'Stavern', 'country_code' => 'NO'],\n            ['name' => 'Calumbi', 'country_code' => 'BR'],\n            ['name' => 'Eaton', 'country_code' => 'US'],\n            ['name' => 'Cambria', 'country_code' => 'US'],\n            ['name' => 'Vetovo', 'country_code' => 'BG'],\n            ['name' => 'Domsod', 'country_code' => 'HU'],\n            ['name' => 'Gas City', 'country_code' => 'US'],\n            ['name' => 'Brownfields', 'country_code' => 'US'],\n            ['name' => 'San Hilario Sacalm', 'country_code' => 'ES'],\n            ['name' => 'Trivero', 'country_code' => 'IT'],\n            ['name' => 'Attalla', 'country_code' => 'US'],\n            ['name' => 'Belding', 'country_code' => 'US'],\n            ['name' => 'Bannockburn', 'country_code' => 'AU'],\n            ['name' => 'Le Boulou', 'country_code' => 'FR'],\n            ['name' => 'Crafton', 'country_code' => 'US'],\n            ['name' => 'Harris', 'country_code' => 'US'],\n            ['name' => 'Washingtonville', 'country_code' => 'US'],\n            ['name' => 'Suolahti', 'country_code' => 'FI'],\n            ['name' => 'Brush', 'country_code' => 'US'],\n            ['name' => 'Chiaravalle Centrale', 'country_code' => 'IT'],\n            ['name' => 'Jaramataia', 'country_code' => 'BR'],\n            ['name' => 'Patrocinio do Muriae', 'country_code' => 'BR'],\n            ['name' => 'Ajdir', 'country_code' => 'MA'],\n            ['name' => 'Huelma', 'country_code' => 'ES'],\n            ['name' => 'Wartenberg', 'country_code' => 'DE'],\n            ['name' => 'Tamsweg', 'country_code' => 'AT'],\n            ['name' => 'Dobsina', 'country_code' => 'SK'],\n            ['name' => 'Piacatu', 'country_code' => 'BR'],\n            ['name' => 'Ait el Farsi', 'country_code' => 'MA'],\n            ['name' => 'Trenton', 'country_code' => 'US'],\n            ['name' => 'Fort Lee', 'country_code' => 'US'],\n            ['name' => 'Oak Point', 'country_code' => 'US'],\n            ['name' => 'West Modesto', 'country_code' => 'US'],\n            ['name' => 'Kampong Rimba', 'country_code' => 'BN'],\n            ['name' => 'Torreblanca', 'country_code' => 'ES'],\n            ['name' => 'Dickson City', 'country_code' => 'US'],\n            ['name' => 'Medina de Pomar', 'country_code' => 'ES'],\n            ['name' => 'Romont', 'country_code' => 'CH'],\n            ['name' => 'Coroados', 'country_code' => 'BR'],\n            ['name' => 'El Aargub', 'country_code' => 'MA'],\n            ['name' => 'Vergeze', 'country_code' => 'FR'],\n            ['name' => 'Oulad Zarrad', 'country_code' => 'MA'],\n            ['name' => 'Arafo', 'country_code' => 'ES'],\n            ['name' => 'Viana do Alentejo', 'country_code' => 'PT'],\n            ['name' => 'Arienzo', 'country_code' => 'IT'],\n            ['name' => 'Grossschirma', 'country_code' => 'DE'],\n            ['name' => 'Takamori', 'country_code' => 'JP'],\n            ['name' => 'Valer', 'country_code' => 'NO'],\n            ['name' => 'Negrepelisse', 'country_code' => 'FR'],\n            ['name' => 'Tres Fronteiras', 'country_code' => 'BR'],\n            ['name' => 'Saint-Martin-de-Seignanx', 'country_code' => 'FR'],\n            ['name' => 'Elena', 'country_code' => 'BG'],\n            ['name' => 'Ribadesella', 'country_code' => 'ES'],\n            ['name' => 'Hilmar-Irwin', 'country_code' => 'US'],\n            ['name' => 'Violet', 'country_code' => 'US'],\n            ['name' => 'Mendham', 'country_code' => 'US'],\n            ['name' => 'Lansdowne', 'country_code' => 'IN'],\n            ['name' => 'Szada', 'country_code' => 'HU'],\n            ['name' => 'Bodenwerder', 'country_code' => 'DE'],\n            ['name' => 'Brunnthal', 'country_code' => 'DE'],\n            ['name' => 'Davoli', 'country_code' => 'IT'],\n            ['name' => 'Rabastens', 'country_code' => 'FR'],\n            ['name' => 'White Rock', 'country_code' => 'US'],\n            ['name' => 'Sao Domingos das Dores', 'country_code' => 'BR'],\n            ['name' => 'Flanders', 'country_code' => 'US'],\n            ['name' => 'Findlay', 'country_code' => 'US'],\n            ['name' => 'Fischbachau', 'country_code' => 'DE'],\n            ['name' => 'Schattdorf', 'country_code' => 'CH'],\n            ['name' => 'Tiefenbronn', 'country_code' => 'DE'],\n            ['name' => 'Bagshot', 'country_code' => 'GB'],\n            ['name' => 'Onagawa', 'country_code' => 'JP'],\n            ['name' => 'Hanstedt', 'country_code' => 'DE'],\n            ['name' => 'Sansom Park', 'country_code' => 'US'],\n            ['name' => 'Nocera Umbra', 'country_code' => 'IT'],\n            ['name' => 'North Manchester', 'country_code' => 'US'],\n            ['name' => 'Asbury', 'country_code' => 'US'],\n            ['name' => 'Riedering', 'country_code' => 'DE'],\n            ['name' => 'Bascharage', 'country_code' => 'LU'],\n            ['name' => 'Fort Wright', 'country_code' => 'US'],\n            ['name' => 'Marsannay-la-Cote', 'country_code' => 'FR'],\n            ['name' => 'Sancraiu de Mures', 'country_code' => 'RO'],\n            ['name' => 'Traben-Trarbach', 'country_code' => 'DE'],\n            ['name' => 'Melk', 'country_code' => 'AT'],\n            ['name' => 'Rancho Murieta', 'country_code' => 'US'],\n            ['name' => 'Niederorschel', 'country_code' => 'DE'],\n            ['name' => 'Hosszupalyi', 'country_code' => 'HU'],\n            ['name' => 'Tichla', 'country_code' => 'MA'],\n            ['name' => 'Bergheim', 'country_code' => 'AT'],\n            ['name' => 'Pong', 'country_code' => 'TH'],\n            ['name' => 'Lee', 'country_code' => 'US'],\n            ['name' => 'Petrolia', 'country_code' => 'CA'],\n            ['name' => 'Alkhazurovo', 'country_code' => 'RU'],\n            ['name' => 'Ebbs', 'country_code' => 'AT'],\n            ['name' => 'Elbridge', 'country_code' => 'US'],\n            ['name' => 'West Yarmouth', 'country_code' => 'US'],\n            ['name' => 'Ensues-la-Redonne', 'country_code' => 'FR'],\n            ['name' => 'Aldeamayor de San Martin', 'country_code' => 'ES'],\n            ['name' => 'Eglisau', 'country_code' => 'CH'],\n            ['name' => 'Lomnice nad Popelkou', 'country_code' => 'CZ'],\n            ['name' => 'Alaro', 'country_code' => 'ES'],\n            ['name' => 'Warrenton', 'country_code' => 'US'],\n            ['name' => 'Coublevie', 'country_code' => 'FR'],\n            ['name' => 'Sao Nicolau', 'country_code' => 'BR'],\n            ['name' => 'Decazeville', 'country_code' => 'FR'],\n            ['name' => 'Sinton', 'country_code' => 'US'],\n            ['name' => 'New Gloucester', 'country_code' => 'US'],\n            ['name' => 'Pyrford', 'country_code' => 'GB'],\n            ['name' => 'Geltendorf', 'country_code' => 'DE'],\n            ['name' => 'Kapustin Yar', 'country_code' => 'RU'],\n            ['name' => 'East Rockhill', 'country_code' => 'US'],\n            ['name' => 'Bannalec', 'country_code' => 'FR'],\n            ['name' => 'Veredinha', 'country_code' => 'BR'],\n            ['name' => 'Fair Haven', 'country_code' => 'US'],\n            ['name' => 'Fabens', 'country_code' => 'US'],\n            ['name' => 'Erdmannhausen', 'country_code' => 'DE'],\n            ['name' => 'Wernberg-Koblitz', 'country_code' => 'DE'],\n            ['name' => 'Pavia di Udine', 'country_code' => 'IT'],\n            ['name' => 'Lee Acres', 'country_code' => 'US'],\n            ['name' => 'Moulins-les-Metz', 'country_code' => 'FR'],\n            ['name' => 'Zsambek', 'country_code' => 'HU'],\n            ['name' => 'Dagmersellen', 'country_code' => 'CH'],\n            ['name' => 'Oleiros', 'country_code' => 'PT'],\n            ['name' => 'Pomarance', 'country_code' => 'IT'],\n            ['name' => 'Naples Park', 'country_code' => 'US'],\n            ['name' => 'Luzerna', 'country_code' => 'BR'],\n            ['name' => 'Uncia', 'country_code' => 'BO'],\n            ['name' => 'Benton', 'country_code' => 'US'],\n            ['name' => 'Blairstown', 'country_code' => 'US'],\n            ['name' => 'Roquemaure', 'country_code' => 'FR'],\n            ['name' => 'Zubri', 'country_code' => 'CZ'],\n            ['name' => 'Botzingen', 'country_code' => 'DE'],\n            ['name' => 'Wasungen', 'country_code' => 'DE'],\n            ['name' => 'Diamante', 'country_code' => 'IT'],\n            ['name' => 'Tat', 'country_code' => 'HU'],\n            ['name' => 'Nord-Fron', 'country_code' => 'NO'],\n            ['name' => 'Fort Washington', 'country_code' => 'US'],\n            ['name' => 'Celanova', 'country_code' => 'ES'],\n            ['name' => 'Ambazac', 'country_code' => 'FR'],\n            ['name' => 'Crosspointe', 'country_code' => 'US'],\n            ['name' => 'Thayngen', 'country_code' => 'CH'],\n            ['name' => 'Sennwald', 'country_code' => 'CH'],\n            ['name' => 'Pato Bragado', 'country_code' => 'BR'],\n            ['name' => 'Volney', 'country_code' => 'US'],\n            ['name' => 'Chale', 'country_code' => 'BR'],\n            ['name' => 'Piding', 'country_code' => 'DE'],\n            ['name' => 'Gugark', 'country_code' => 'AM'],\n            ['name' => 'Longswamp', 'country_code' => 'US'],\n            ['name' => 'Ait Ban', 'country_code' => 'MA'],\n            ['name' => 'Lorinci', 'country_code' => 'HU'],\n            ['name' => 'Santa Ernestina', 'country_code' => 'BR'],\n            ['name' => 'Chitaraque', 'country_code' => 'CO'],\n            ['name' => 'Southwest Middlesex', 'country_code' => 'CA'],\n            ['name' => 'Montpon-Menesterol', 'country_code' => 'FR'],\n            ['name' => 'Bol shaya Kudara', 'country_code' => 'RU'],\n            ['name' => 'Guaimbe', 'country_code' => 'BR'],\n            ['name' => 'Vitkov', 'country_code' => 'CZ'],\n            ['name' => 'Oceanport', 'country_code' => 'US'],\n            ['name' => 'Hjarup', 'country_code' => 'SE'],\n            ['name' => 'Lammi', 'country_code' => 'FI'],\n            ['name' => 'South Haven', 'country_code' => 'US'],\n            ['name' => 'Paola', 'country_code' => 'US'],\n            ['name' => 'Rumford', 'country_code' => 'US'],\n            ['name' => 'Velence', 'country_code' => 'HU'],\n            ['name' => 'Wessling', 'country_code' => 'DE'],\n            ['name' => 'Monroeville', 'country_code' => 'US'],\n            ['name' => 'Cividate al Piano', 'country_code' => 'IT'],\n            ['name' => 'Gergebil', 'country_code' => 'RU'],\n            ['name' => 'Zapata', 'country_code' => 'US'],\n            ['name' => 'San Andres Huayapam', 'country_code' => 'MX'],\n            ['name' => 'Briec', 'country_code' => 'FR'],\n            ['name' => 'Mezocsat', 'country_code' => 'HU'],\n            ['name' => 'Genzano di Lucania', 'country_code' => 'IT'],\n            ['name' => 'Vladimiro-Aleksandrovskoye', 'country_code' => 'RU'],\n            ['name' => 'Union', 'country_code' => 'US'],\n            ['name' => 'Grafton', 'country_code' => 'US'],\n            ['name' => 'Gabicce', 'country_code' => 'IT'],\n            ['name' => 'Rio Pinar', 'country_code' => 'US'],\n            ['name' => 'Tubo', 'country_code' => 'PH'],\n            ['name' => 'Passignano sul Trasimeno', 'country_code' => 'IT'],\n            ['name' => 'La Cadiere-d Azur', 'country_code' => 'FR'],\n            ['name' => 'Hopfgarten im Brixental', 'country_code' => 'AT'],\n            ['name' => 'Grabow', 'country_code' => 'DE'],\n            ['name' => 'Trevignano Romano', 'country_code' => 'IT'],\n            ['name' => 'Ulysses', 'country_code' => 'US'],\n            ['name' => 'New Boston', 'country_code' => 'US'],\n            ['name' => 'Ilava', 'country_code' => 'SK'],\n            ['name' => 'Primorsk', 'country_code' => 'RU'],\n            ['name' => 'Mengjiazhuang', 'country_code' => 'CN'],\n            ['name' => 'Ondres', 'country_code' => 'FR'],\n            ['name' => 'Front of Yonge', 'country_code' => 'CA'],\n            ['name' => 'Montepaone', 'country_code' => 'IT'],\n            ['name' => 'Kunovice', 'country_code' => 'CZ'],\n            ['name' => 'Saratoga', 'country_code' => 'US'],\n            ['name' => 'Santa Rita do Itueto', 'country_code' => 'BR'],\n            ['name' => 'Sillingy', 'country_code' => 'FR'],\n            ['name' => 'Genlis', 'country_code' => 'FR'],\n            ['name' => 'Malta', 'country_code' => 'BR'],\n            ['name' => 'Claverack', 'country_code' => 'US'],\n            ['name' => 'Dripping Springs', 'country_code' => 'US'],\n            ['name' => 'Vegreville', 'country_code' => 'CA'],\n            ['name' => 'Saint-Laurent-de-Mure', 'country_code' => 'FR'],\n            ['name' => 'Wareham', 'country_code' => 'GB'],\n            ['name' => 'Grafton', 'country_code' => 'US'],\n            ['name' => 'Highland', 'country_code' => 'US'],\n            ['name' => 'Douglass Hills', 'country_code' => 'US'],\n            ['name' => 'Bystrice', 'country_code' => 'CZ'],\n            ['name' => 'Lamspringe', 'country_code' => 'DE'],\n            ['name' => 'Jones', 'country_code' => 'PH'],\n            ['name' => 'Spring Grove', 'country_code' => 'US'],\n            ['name' => 'Woods Creek', 'country_code' => 'US'],\n            ['name' => 'Casalserugo', 'country_code' => 'IT'],\n            ['name' => 'Gan', 'country_code' => 'FR'],\n            ['name' => 'Reichshoffen', 'country_code' => 'FR'],\n            ['name' => 'Hirschau', 'country_code' => 'DE'],\n            ['name' => 'Prado del Rey', 'country_code' => 'ES'],\n            ['name' => 'Laie', 'country_code' => 'US'],\n            ['name' => 'Barguzin', 'country_code' => 'RU'],\n            ['name' => 'Cedro de Sao Joao', 'country_code' => 'BR'],\n            ['name' => 'Kembs', 'country_code' => 'FR'],\n            ['name' => 'Belle Fourche', 'country_code' => 'US'],\n            ['name' => 'Chickasaw', 'country_code' => 'US'],\n            ['name' => 'Nazareth', 'country_code' => 'US'],\n            ['name' => 'Allendorf', 'country_code' => 'DE'],\n            ['name' => 'Pouzauges', 'country_code' => 'FR'],\n            ['name' => 'Barabash', 'country_code' => 'RU'],\n            ['name' => 'Sontheim an der Brenz', 'country_code' => 'DE'],\n            ['name' => 'Mugnano del Cardinale', 'country_code' => 'IT'],\n            ['name' => 'Turiys k', 'country_code' => 'UA'],\n            ['name' => 'Elmwood', 'country_code' => 'US'],\n            ['name' => 'Munderkingen', 'country_code' => 'DE'],\n            ['name' => 'Ylistaro', 'country_code' => 'FI'],\n            ['name' => 'Sainte-Brigitte-de-Laval', 'country_code' => 'CA'],\n            ['name' => 'Saint-Pierre-les-Nemours', 'country_code' => 'FR'],\n            ['name' => 'Konolfingen Dorf', 'country_code' => 'CH'],\n            ['name' => 'Grossschonau', 'country_code' => 'DE'],\n            ['name' => 'Divilaca', 'country_code' => 'PH'],\n            ['name' => 'Mezzocorona', 'country_code' => 'IT'],\n            ['name' => 'Shatrovo', 'country_code' => 'RU'],\n            ['name' => 'Penamacor', 'country_code' => 'PT'],\n            ['name' => 'Dniprovske', 'country_code' => 'UA'],\n            ['name' => 'Babak', 'country_code' => 'AZ'],\n            ['name' => 'La Cenia', 'country_code' => 'ES'],\n            ['name' => 'Vercheres', 'country_code' => 'CA'],\n            ['name' => 'Apice', 'country_code' => 'IT'],\n            ['name' => 'Oleksandriiske', 'country_code' => 'UA'],\n            ['name' => 'Hopkinton', 'country_code' => 'US'],\n            ['name' => 'Bobov Dol', 'country_code' => 'BG'],\n            ['name' => 'Marchwood', 'country_code' => 'GB'],\n            ['name' => 'Westenschouwen', 'country_code' => 'NL'],\n            ['name' => 'The Pas', 'country_code' => 'CA'],\n            ['name' => 'Duffield', 'country_code' => 'GB'],\n            ['name' => 'Wrightsville', 'country_code' => 'US'],\n            ['name' => 'Linglestown', 'country_code' => 'US'],\n            ['name' => 'Sigean', 'country_code' => 'FR'],\n            ['name' => 'Hamanaka-sakuraminami', 'country_code' => 'JP'],\n            ['name' => 'Dalen', 'country_code' => 'NL'],\n            ['name' => 'Saint-Cesaire', 'country_code' => 'CA'],\n            ['name' => 'Nuits-Saint-Georges', 'country_code' => 'FR'],\n            ['name' => 'Les Essarts', 'country_code' => 'FR'],\n            ['name' => 'Satteldorf', 'country_code' => 'DE'],\n            ['name' => 'Rottendorf', 'country_code' => 'DE'],\n            ['name' => 'Ruhla', 'country_code' => 'DE'],\n            ['name' => 'Caldeirao Grande', 'country_code' => 'BR'],\n            ['name' => 'Leutershausen', 'country_code' => 'DE'],\n            ['name' => 'Igersheim', 'country_code' => 'DE'],\n            ['name' => 'Nakkila', 'country_code' => 'FI'],\n            ['name' => 'Cocalinho', 'country_code' => 'BR'],\n            ['name' => 'Glenbrook', 'country_code' => 'AU'],\n            ['name' => 'San Tammaro', 'country_code' => 'IT'],\n            ['name' => 'Bacurituba', 'country_code' => 'BR'],\n            ['name' => 'Virgolandia', 'country_code' => 'BR'],\n            ['name' => 'Saint-Gervais-les-Bains', 'country_code' => 'FR'],\n            ['name' => 'Panicale', 'country_code' => 'IT'],\n            ['name' => 'Marsico Vetere', 'country_code' => 'IT'],\n            ['name' => 'Prum', 'country_code' => 'DE'],\n            ['name' => 'Grangetown', 'country_code' => 'GB'],\n            ['name' => 'Topolovgrad', 'country_code' => 'BG'],\n            ['name' => 'Princeton', 'country_code' => 'US'],\n            ['name' => 'Tafadna', 'country_code' => 'MA'],\n            ['name' => 'Gavrilov Posad', 'country_code' => 'RU'],\n            ['name' => 'Nunchritz', 'country_code' => 'DE'],\n            ['name' => 'Borderes-sur-l Echez', 'country_code' => 'FR'],\n            ['name' => 'Alianca do Tocantins', 'country_code' => 'BR'],\n            ['name' => 'Ebensfeld', 'country_code' => 'DE'],\n            ['name' => 'Quistello', 'country_code' => 'IT'],\n            ['name' => 'Hollidaysburg', 'country_code' => 'US'],\n            ['name' => 'Loughman', 'country_code' => 'US'],\n            ['name' => 'Manchester', 'country_code' => 'US'],\n            ['name' => 'Dove Valley', 'country_code' => 'US'],\n            ['name' => 'Manzariyeh', 'country_code' => 'IR'],\n            ['name' => 'Sigayevo', 'country_code' => 'RU'],\n            ['name' => 'Bad Boll', 'country_code' => 'DE'],\n            ['name' => 'Tellico Village', 'country_code' => 'US'],\n            ['name' => 'La Ronge', 'country_code' => 'CA'],\n            ['name' => 'Narjeh', 'country_code' => 'IR'],\n            ['name' => 'Belin-Beliet', 'country_code' => 'FR'],\n            ['name' => 'Kelso', 'country_code' => 'GB'],\n            ['name' => 'Casoli', 'country_code' => 'IT'],\n            ['name' => 'Himmelpforten', 'country_code' => 'DE'],\n            ['name' => 'Arradon', 'country_code' => 'FR'],\n            ['name' => 'Stolpen', 'country_code' => 'DE'],\n            ['name' => 'Cupra Marittima', 'country_code' => 'IT'],\n            ['name' => 'Perobal', 'country_code' => 'BR'],\n            ['name' => 'Saint-Martin-d Uriage', 'country_code' => 'FR'],\n            ['name' => 'Sao Jose do Goiabal', 'country_code' => 'BR'],\n            ['name' => 'Zermatt', 'country_code' => 'CH'],\n            ['name' => 'Estherville', 'country_code' => 'US'],\n            ['name' => 'Philomath', 'country_code' => 'US'],\n            ['name' => 'Greenbrier', 'country_code' => 'US'],\n            ['name' => 'Wilton', 'country_code' => 'US'],\n            ['name' => 'Tay Valley', 'country_code' => 'CA'],\n            ['name' => 'Jonquieres', 'country_code' => 'FR'],\n            ['name' => 'Mechra-Hommadi', 'country_code' => 'MA'],\n            ['name' => 'Butgenbach', 'country_code' => 'BE'],\n            ['name' => 'Mathis', 'country_code' => 'US'],\n            ['name' => 'Vadul lui Voda', 'country_code' => 'MD'],\n            ['name' => 'Villa Huidobro', 'country_code' => 'AR'],\n            ['name' => 'Salteras', 'country_code' => 'ES'],\n            ['name' => 'Dietenhofen', 'country_code' => 'DE'],\n            ['name' => 'Hartford City', 'country_code' => 'US'],\n            ['name' => 'Wayne', 'country_code' => 'US'],\n            ['name' => 'Santa Marta de Ortigueira', 'country_code' => 'ES'],\n            ['name' => 'Zeithain', 'country_code' => 'DE'],\n            ['name' => 'Moglia', 'country_code' => 'IT'],\n            ['name' => 'Sasbach', 'country_code' => 'DE'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Barrolandia', 'country_code' => 'BR'],\n            ['name' => 'Paradise', 'country_code' => 'US'],\n            ['name' => 'Montefalco', 'country_code' => 'IT'],\n            ['name' => 'Myshkin', 'country_code' => 'RU'],\n            ['name' => 'Oberammergau', 'country_code' => 'DE'],\n            ['name' => 'Eastwood', 'country_code' => 'US'],\n            ['name' => 'Bruckberg', 'country_code' => 'DE'],\n            ['name' => 'Sarcedo', 'country_code' => 'IT'],\n            ['name' => 'La Roque-d Antheron', 'country_code' => 'FR'],\n            ['name' => 'Sannazzaro de  Burgondi', 'country_code' => 'IT'],\n            ['name' => 'Subkhankulovo', 'country_code' => 'RU'],\n            ['name' => 'Miercurea Nirajului', 'country_code' => 'RO'],\n            ['name' => 'Richmond', 'country_code' => 'US'],\n            ['name' => 'Gardiner', 'country_code' => 'US'],\n            ['name' => 'Wilmington', 'country_code' => 'US'],\n            ['name' => 'Pranchita', 'country_code' => 'BR'],\n            ['name' => 'Puhoi', 'country_code' => 'MD'],\n            ['name' => 'Vohl', 'country_code' => 'DE'],\n            ['name' => 'Paoli', 'country_code' => 'US'],\n            ['name' => 'Schwertberg', 'country_code' => 'AT'],\n            ['name' => 'Custonaci', 'country_code' => 'IT'],\n            ['name' => 'Elsbethen', 'country_code' => 'AT'],\n            ['name' => 'Zipacon', 'country_code' => 'CO'],\n            ['name' => 'Povegliano', 'country_code' => 'IT'],\n            ['name' => 'Haag', 'country_code' => 'AT'],\n            ['name' => 'Jemaat Moul Blad', 'country_code' => 'MA'],\n            ['name' => 'Domburg', 'country_code' => 'SR'],\n            ['name' => 'Longton', 'country_code' => 'GB'],\n            ['name' => 'Neuenkirchen', 'country_code' => 'DE'],\n            ['name' => 'Chubar', 'country_code' => 'IR'],\n            ['name' => 'Taiuva', 'country_code' => 'BR'],\n            ['name' => 'Telgate', 'country_code' => 'IT'],\n            ['name' => 'Gareoult', 'country_code' => 'FR'],\n            ['name' => 'Nederhorst den Berg', 'country_code' => 'NL'],\n            ['name' => 'San Sebastian del Oeste', 'country_code' => 'MX'],\n            ['name' => 'Starke', 'country_code' => 'US'],\n            ['name' => 'East Flat Rock', 'country_code' => 'US'],\n            ['name' => 'Dandridge', 'country_code' => 'US'],\n            ['name' => 'Cambria', 'country_code' => 'US'],\n            ['name' => 'Lambres-les-Douai', 'country_code' => 'FR'],\n            ['name' => 'Gadebusch', 'country_code' => 'DE'],\n            ['name' => 'Corydon', 'country_code' => 'US'],\n            ['name' => 'Chonchi', 'country_code' => 'CL'],\n            ['name' => 'Nueva-Carteya', 'country_code' => 'ES'],\n            ['name' => 'Huejucar', 'country_code' => 'MX'],\n            ['name' => 'Aiffres', 'country_code' => 'FR'],\n            ['name' => 'Kolitzheim', 'country_code' => 'DE'],\n            ['name' => 'Upper Pottsgrove', 'country_code' => 'US'],\n            ['name' => 'Peveragno', 'country_code' => 'IT'],\n            ['name' => 'Poncarale', 'country_code' => 'IT'],\n            ['name' => 'Couto de Magalhaes', 'country_code' => 'BR'],\n            ['name' => 'Fulnek', 'country_code' => 'CZ'],\n            ['name' => 'Straznice', 'country_code' => 'CZ'],\n            ['name' => 'Pontoon Beach', 'country_code' => 'US'],\n            ['name' => 'Ban Krang', 'country_code' => 'TH'],\n            ['name' => 'Porreras', 'country_code' => 'ES'],\n            ['name' => 'Boretto', 'country_code' => 'IT'],\n            ['name' => 'Adams', 'country_code' => 'US'],\n            ['name' => 'Oye-Plage', 'country_code' => 'FR'],\n            ['name' => 'Borgo San Giacomo', 'country_code' => 'IT'],\n            ['name' => 'Rakova', 'country_code' => 'SK'],\n            ['name' => 'Ventabren', 'country_code' => 'FR'],\n            ['name' => 'Champlain', 'country_code' => 'US'],\n            ['name' => 'Byron', 'country_code' => 'US'],\n            ['name' => 'South Bruce', 'country_code' => 'CA'],\n            ['name' => 'Wyndmoor', 'country_code' => 'US'],\n            ['name' => 'Caiazzo', 'country_code' => 'IT'],\n            ['name' => 'Samsula-Spruce Creek', 'country_code' => 'US'],\n            ['name' => 'Zephyrhills South', 'country_code' => 'US'],\n            ['name' => 'Unkel', 'country_code' => 'DE'],\n            ['name' => 'Bohmenkirch', 'country_code' => 'DE'],\n            ['name' => 'Goiandira', 'country_code' => 'BR'],\n            ['name' => 'Etoile-sur-Rhone', 'country_code' => 'FR'],\n            ['name' => 'Kangasniemi', 'country_code' => 'FI'],\n            ['name' => 'Bang Sai', 'country_code' => 'TH'],\n            ['name' => 'Lakehills', 'country_code' => 'US'],\n            ['name' => 'Kosmonosy', 'country_code' => 'CZ'],\n            ['name' => 'Elstree', 'country_code' => 'GB'],\n            ['name' => 'Dymer', 'country_code' => 'UA'],\n            ['name' => 'Taquarivai', 'country_code' => 'BR'],\n            ['name' => 'Beni Ounif', 'country_code' => 'DZ'],\n            ['name' => 'Alva', 'country_code' => 'US'],\n            ['name' => 'Atarjea', 'country_code' => 'MX'],\n            ['name' => 'Hotton', 'country_code' => 'BE'],\n            ['name' => 'Campinas do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Milton', 'country_code' => 'US'],\n            ['name' => 'Onrus', 'country_code' => 'ZA'],\n            ['name' => 'Spielberg bei Knittelfeld', 'country_code' => 'AT'],\n            ['name' => 'Oreland', 'country_code' => 'US'],\n            ['name' => 'Abenberg', 'country_code' => 'DE'],\n            ['name' => 'Corguinho', 'country_code' => 'BR'],\n            ['name' => 'Mellrichstadt', 'country_code' => 'DE'],\n            ['name' => 'Mugardos', 'country_code' => 'ES'],\n            ['name' => 'Ellrich', 'country_code' => 'DE'],\n            ['name' => 'Root', 'country_code' => 'CH'],\n            ['name' => 'Frantiskovy Lazne', 'country_code' => 'CZ'],\n            ['name' => 'Wright', 'country_code' => 'US'],\n            ['name' => 'Riga', 'country_code' => 'US'],\n            ['name' => 'Groveport', 'country_code' => 'US'],\n            ['name' => 'Olivarez', 'country_code' => 'US'],\n            ['name' => 'Willow Springs', 'country_code' => 'US'],\n            ['name' => 'Bentivoglio', 'country_code' => 'IT'],\n            ['name' => 'Waidhofen an der Thaya', 'country_code' => 'AT'],\n            ['name' => 'Chazelles-sur-Lyon', 'country_code' => 'FR'],\n            ['name' => 'Cana Verde', 'country_code' => 'BR'],\n            ['name' => 'Gardiner', 'country_code' => 'US'],\n            ['name' => 'Forino', 'country_code' => 'IT'],\n            ['name' => 'Neuville-de-Poitou', 'country_code' => 'FR'],\n            ['name' => 'Hradec nad Moravici', 'country_code' => 'CZ'],\n            ['name' => 'Chudniv', 'country_code' => 'UA'],\n            ['name' => 'Strazhitsa', 'country_code' => 'BG'],\n            ['name' => 'Izsak', 'country_code' => 'HU'],\n            ['name' => 'Giebelstadt', 'country_code' => 'DE'],\n            ['name' => 'Neilston', 'country_code' => 'GB'],\n            ['name' => 'Beratzhausen', 'country_code' => 'DE'],\n            ['name' => 'Attert', 'country_code' => 'BE'],\n            ['name' => 'McMasterville', 'country_code' => 'CA'],\n            ['name' => 'Botricello', 'country_code' => 'IT'],\n            ['name' => 'Sovere', 'country_code' => 'IT'],\n            ['name' => 'Vel ky Saris', 'country_code' => 'SK'],\n            ['name' => 'Sao Cristovao do Sul', 'country_code' => 'BR'],\n            ['name' => 'West Pennsboro', 'country_code' => 'US'],\n            ['name' => 'Ochtendung', 'country_code' => 'DE'],\n            ['name' => 'Copsa Mica', 'country_code' => 'RO'],\n            ['name' => 'Savyntsi', 'country_code' => 'UA'],\n            ['name' => 'Broshniv-Osada', 'country_code' => 'UA'],\n            ['name' => 'Schoppenstedt', 'country_code' => 'DE'],\n            ['name' => 'Pittstown', 'country_code' => 'US'],\n            ['name' => 'Klyuchevka', 'country_code' => 'KG'],\n            ['name' => 'Starobaltachevo', 'country_code' => 'RU'],\n            ['name' => 'Ostseebad Binz', 'country_code' => 'DE'],\n            ['name' => 'Jonesborough', 'country_code' => 'US'],\n            ['name' => 'Glattfelden', 'country_code' => 'CH'],\n            ['name' => 'Harburg', 'country_code' => 'DE'],\n            ['name' => 'Lenzing', 'country_code' => 'AT'],\n            ['name' => 'Kingstree', 'country_code' => 'US'],\n            ['name' => 'Anna', 'country_code' => 'US'],\n            ['name' => 'Lake Delton', 'country_code' => 'US'],\n            ['name' => 'Dayton', 'country_code' => 'US'],\n            ['name' => 'Cottleville', 'country_code' => 'US'],\n            ['name' => 'Bowling Green', 'country_code' => 'US'],\n            ['name' => 'Le Barp', 'country_code' => 'FR'],\n            ['name' => 'Ille-sur-Tet', 'country_code' => 'FR'],\n            ['name' => 'Ispra', 'country_code' => 'IT'],\n            ['name' => 'Geveze', 'country_code' => 'FR'],\n            ['name' => 'Blaine', 'country_code' => 'US'],\n            ['name' => 'Guenfouda', 'country_code' => 'MA'],\n            ['name' => 'Wyke Regis', 'country_code' => 'GB'],\n            ['name' => 'Dicomano', 'country_code' => 'IT'],\n            ['name' => 'Oberkotzau', 'country_code' => 'DE'],\n            ['name' => 'Lackland AFB', 'country_code' => 'US'],\n            ['name' => 'Elverta', 'country_code' => 'US'],\n            ['name' => 'Kemnath', 'country_code' => 'DE'],\n            ['name' => 'Macael', 'country_code' => 'ES'],\n            ['name' => 'Cavour', 'country_code' => 'IT'],\n            ['name' => 'Mansfield', 'country_code' => 'US'],\n            ['name' => 'San Cipirello', 'country_code' => 'IT'],\n            ['name' => 'Rusk', 'country_code' => 'US'],\n            ['name' => 'Kirkwood', 'country_code' => 'US'],\n            ['name' => 'Kibale', 'country_code' => 'UG'],\n            ['name' => 'Novoyegor yevskoye', 'country_code' => 'RU'],\n            ['name' => 'Leacock', 'country_code' => 'US'],\n            ['name' => 'Valence', 'country_code' => 'FR'],\n            ['name' => 'Soleto', 'country_code' => 'IT'],\n            ['name' => 'Redcliff', 'country_code' => 'CA'],\n            ['name' => 'Barra do Chapeu', 'country_code' => 'BR'],\n            ['name' => 'Smithfield Heights', 'country_code' => 'AU'],\n            ['name' => 'Affing', 'country_code' => 'DE'],\n            ['name' => 'Castiglione dei Pepoli', 'country_code' => 'IT'],\n            ['name' => 'Ingelfingen', 'country_code' => 'DE'],\n            ['name' => 'Galliera', 'country_code' => 'IT'],\n            ['name' => 'Hohenwestedt', 'country_code' => 'DE'],\n            ['name' => 'Dhar Souk', 'country_code' => 'MA'],\n            ['name' => 'Puente Caldelas', 'country_code' => 'ES'],\n            ['name' => 'Linton', 'country_code' => 'US'],\n            ['name' => 'Aquino', 'country_code' => 'IT'],\n            ['name' => 'Richland', 'country_code' => 'US'],\n            ['name' => 'Alambari', 'country_code' => 'BR'],\n            ['name' => 'Hartford', 'country_code' => 'GB'],\n            ['name' => 'Cravolandia', 'country_code' => 'BR'],\n            ['name' => 'Korishe', 'country_code' => 'XK'],\n            ['name' => 'Semmes', 'country_code' => 'US'],\n            ['name' => 'General Carneiro', 'country_code' => 'BR'],\n            ['name' => 'Pannal', 'country_code' => 'GB'],\n            ['name' => 'Caiana', 'country_code' => 'BR'],\n            ['name' => 'Xoxocotla', 'country_code' => 'MX'],\n            ['name' => 'Glashutten', 'country_code' => 'DE'],\n            ['name' => 'Benejuzar', 'country_code' => 'ES'],\n            ['name' => 'Waldmohr', 'country_code' => 'DE'],\n            ['name' => 'Wilhermsdorf', 'country_code' => 'DE'],\n            ['name' => 'Gmund', 'country_code' => 'AT'],\n            ['name' => 'Palmview South', 'country_code' => 'US'],\n            ['name' => 'Honesdale', 'country_code' => 'US'],\n            ['name' => 'Poland', 'country_code' => 'US'],\n            ['name' => 'Sao Pedro do Suacui', 'country_code' => 'BR'],\n            ['name' => 'Zilair', 'country_code' => 'RU'],\n            ['name' => 'Onguday', 'country_code' => 'RU'],\n            ['name' => 'Warren', 'country_code' => 'US'],\n            ['name' => 'Contulmo', 'country_code' => 'CL'],\n            ['name' => 'Torchiarolo', 'country_code' => 'IT'],\n            ['name' => 'Lipcani', 'country_code' => 'MD'],\n            ['name' => 'Aginskoye', 'country_code' => 'RU'],\n            ['name' => 'Codogne', 'country_code' => 'IT'],\n            ['name' => 'Pedro Vicente Maldonado', 'country_code' => 'EC'],\n            ['name' => 'Poysdorf', 'country_code' => 'AT'],\n            ['name' => 'Amphawa', 'country_code' => 'TH'],\n            ['name' => 'Tonganoxie', 'country_code' => 'US'],\n            ['name' => 'Saint-Cheron', 'country_code' => 'FR'],\n            ['name' => 'Bergrheinfeld', 'country_code' => 'DE'],\n            ['name' => 'Souppes-sur-Loing', 'country_code' => 'FR'],\n            ['name' => 'Dargaville', 'country_code' => 'NZ'],\n            ['name' => 'Maralik', 'country_code' => 'AM'],\n            ['name' => 'Marlin', 'country_code' => 'US'],\n            ['name' => 'Oxford', 'country_code' => 'US'],\n            ['name' => 'Tynset', 'country_code' => 'NO'],\n            ['name' => 'Saint-Astier', 'country_code' => 'FR'],\n            ['name' => 'Rochester', 'country_code' => 'US'],\n            ['name' => 'San Vito Chietino', 'country_code' => 'IT'],\n            ['name' => 'Islip Terrace', 'country_code' => 'US'],\n            ['name' => 'Anghiari', 'country_code' => 'IT'],\n            ['name' => 'Bessemer City', 'country_code' => 'US'],\n            ['name' => 'Aguiar', 'country_code' => 'BR'],\n            ['name' => 'Drebkau', 'country_code' => 'DE'],\n            ['name' => 'Romelandia', 'country_code' => 'BR'],\n            ['name' => 'Gandino', 'country_code' => 'IT'],\n            ['name' => 'Mulsanne', 'country_code' => 'FR'],\n            ['name' => 'Siesta Key', 'country_code' => 'US'],\n            ['name' => 'Beaucouze', 'country_code' => 'FR'],\n            ['name' => 'Barbing', 'country_code' => 'DE'],\n            ['name' => 'Wegscheid', 'country_code' => 'DE'],\n            ['name' => 'Zakamenne', 'country_code' => 'SK'],\n            ['name' => 'Nueil-les-Aubiers', 'country_code' => 'FR'],\n            ['name' => 'Tomashpil', 'country_code' => 'UA'],\n            ['name' => 'New Carlisle', 'country_code' => 'US'],\n            ['name' => 'Kumhausen', 'country_code' => 'DE'],\n            ['name' => 'Povoletto', 'country_code' => 'IT'],\n            ['name' => 'Aubigny-sur-Nere', 'country_code' => 'FR'],\n            ['name' => 'Deba', 'country_code' => 'ES'],\n            ['name' => 'Deggingen', 'country_code' => 'DE'],\n            ['name' => 'Ploumagoar', 'country_code' => 'FR'],\n            ['name' => 'Slinger', 'country_code' => 'US'],\n            ['name' => 'Aceuchal', 'country_code' => 'ES'],\n            ['name' => 'Bowling', 'country_code' => 'GB'],\n            ['name' => 'Dayr al Bukht', 'country_code' => 'SY'],\n            ['name' => 'Mali', 'country_code' => 'GN'],\n            ['name' => 'Schonau am Konigssee', 'country_code' => 'DE'],\n            ['name' => 'Cochem', 'country_code' => 'DE'],\n            ['name' => 'Kerimaki', 'country_code' => 'FI'],\n            ['name' => 'Feusisberg', 'country_code' => 'CH'],\n            ['name' => 'Stochov', 'country_code' => 'CZ'],\n            ['name' => 'Korop', 'country_code' => 'UA'],\n            ['name' => 'Lake Bluff', 'country_code' => 'US'],\n            ['name' => 'Waterford', 'country_code' => 'US'],\n            ['name' => 'Boxborough', 'country_code' => 'US'],\n            ['name' => 'Caiua', 'country_code' => 'BR'],\n            ['name' => 'Cavallermaggiore', 'country_code' => 'IT'],\n            ['name' => 'Presidente Bernardes', 'country_code' => 'BR'],\n            ['name' => 'Frankenmuth', 'country_code' => 'US'],\n            ['name' => 'Eureka', 'country_code' => 'US'],\n            ['name' => 'Balsfjord', 'country_code' => 'NO'],\n            ['name' => 'Guxhagen', 'country_code' => 'DE'],\n            ['name' => 'Nova Borova', 'country_code' => 'UA'],\n            ['name' => 'Stroudsburg', 'country_code' => 'US'],\n            ['name' => 'Duquesne', 'country_code' => 'US'],\n            ['name' => 'Preston', 'country_code' => 'US'],\n            ['name' => 'Malax', 'country_code' => 'FI'],\n            ['name' => 'Otterberg', 'country_code' => 'DE'],\n            ['name' => 'Villanueva', 'country_code' => 'CO'],\n            ['name' => 'Ertingen', 'country_code' => 'DE'],\n            ['name' => 'Inga', 'country_code' => 'FI'],\n            ['name' => 'Tracyton', 'country_code' => 'US'],\n            ['name' => 'Champagne-sur-Oise', 'country_code' => 'FR'],\n            ['name' => 'Conceicao do Para', 'country_code' => 'BR'],\n            ['name' => 'Cancale', 'country_code' => 'FR'],\n            ['name' => 'San Nicolas Tolentino', 'country_code' => 'MX'],\n            ['name' => 'Nashville', 'country_code' => 'US'],\n            ['name' => 'Leadville', 'country_code' => 'US'],\n            ['name' => 'Battonya', 'country_code' => 'HU'],\n            ['name' => 'Brebieres', 'country_code' => 'FR'],\n            ['name' => 'Seelow', 'country_code' => 'DE'],\n            ['name' => 'Vila do Porto', 'country_code' => 'PT'],\n            ['name' => 'Darkush', 'country_code' => 'SY'],\n            ['name' => 'Heiningen', 'country_code' => 'DE'],\n            ['name' => 'Commercy', 'country_code' => 'FR'],\n            ['name' => 'Dabancheng', 'country_code' => 'CN'],\n            ['name' => 'Japi', 'country_code' => 'BR'],\n            ['name' => 'Egling', 'country_code' => 'DE'],\n            ['name' => 'Ceiba', 'country_code' => 'PR'],\n            ['name' => 'Espenau', 'country_code' => 'DE'],\n            ['name' => 'Meckesheim', 'country_code' => 'DE'],\n            ['name' => 'Berryville', 'country_code' => 'US'],\n            ['name' => 'Vinita', 'country_code' => 'US'],\n            ['name' => 'Arjona', 'country_code' => 'ES'],\n            ['name' => 'Neviano', 'country_code' => 'IT'],\n            ['name' => 'Saint-Privat-des-Vieux', 'country_code' => 'FR'],\n            ['name' => 'Algodonales', 'country_code' => 'ES'],\n            ['name' => 'Hubynykha', 'country_code' => 'UA'],\n            ['name' => 'Altenkunstadt', 'country_code' => 'DE'],\n            ['name' => 'Tidenham', 'country_code' => 'GB'],\n            ['name' => 'Siatista', 'country_code' => 'GR'],\n            ['name' => 'Otyniia', 'country_code' => 'UA'],\n            ['name' => 'Sao Jorge do Ivai', 'country_code' => 'BR'],\n            ['name' => 'Connell', 'country_code' => 'US'],\n            ['name' => 'Buckner', 'country_code' => 'US'],\n            ['name' => 'Itaara', 'country_code' => 'BR'],\n            ['name' => 'Sarina', 'country_code' => 'AU'],\n            ['name' => 'Taylorsville', 'country_code' => 'US'],\n            ['name' => 'Glencoe', 'country_code' => 'US'],\n            ['name' => 'Wappingers Falls', 'country_code' => 'US'],\n            ['name' => 'Lake Park', 'country_code' => 'US'],\n            ['name' => 'Ada', 'country_code' => 'US'],\n            ['name' => 'Bento Fernandes', 'country_code' => 'BR'],\n            ['name' => 'Renswoude', 'country_code' => 'NL'],\n            ['name' => 'Drusenheim', 'country_code' => 'FR'],\n            ['name' => 'Lohra', 'country_code' => 'DE'],\n            ['name' => 'Exeter', 'country_code' => 'US'],\n            ['name' => 'Grand-Champ', 'country_code' => 'FR'],\n            ['name' => 'Rondinha', 'country_code' => 'BR'],\n            ['name' => 'Shalazhi', 'country_code' => 'RU'],\n            ['name' => 'Hidden Valley Lake', 'country_code' => 'US'],\n            ['name' => 'Barre', 'country_code' => 'US'],\n            ['name' => 'Waterville', 'country_code' => 'US'],\n            ['name' => 'Piolenc', 'country_code' => 'FR'],\n            ['name' => 'Canzo', 'country_code' => 'IT'],\n            ['name' => 'Kae Dam', 'country_code' => 'TH'],\n            ['name' => 'Waimanalo', 'country_code' => 'US'],\n            ['name' => 'Lendak', 'country_code' => 'SK'],\n            ['name' => 'Anamosa', 'country_code' => 'US'],\n            ['name' => 'Golega', 'country_code' => 'PT'],\n            ['name' => 'Zeeland', 'country_code' => 'US'],\n            ['name' => 'Forest', 'country_code' => 'US'],\n            ['name' => 'Favria', 'country_code' => 'IT'],\n            ['name' => 'Cotronei', 'country_code' => 'IT'],\n            ['name' => 'Loudon', 'country_code' => 'US'],\n            ['name' => 'Pelham Manor', 'country_code' => 'US'],\n            ['name' => 'Monticello', 'country_code' => 'US'],\n            ['name' => 'Nedryhayliv', 'country_code' => 'UA'],\n            ['name' => 'Coronel Ezequiel', 'country_code' => 'BR'],\n            ['name' => 'Guaraci', 'country_code' => 'BR'],\n            ['name' => 'Amagi', 'country_code' => 'JP'],\n            ['name' => 'Colorado City', 'country_code' => 'US'],\n            ['name' => 'Weldon Spring', 'country_code' => 'US'],\n            ['name' => 'Montemiletto', 'country_code' => 'IT'],\n            ['name' => 'Jestetten', 'country_code' => 'DE'],\n            ['name' => 'Stara Syniava', 'country_code' => 'UA'],\n            ['name' => 'San Ciprian de Vinas', 'country_code' => 'ES'],\n            ['name' => 'Kannus', 'country_code' => 'FI'],\n            ['name' => 'Casariche', 'country_code' => 'ES'],\n            ['name' => 'Hidden Valley', 'country_code' => 'US'],\n            ['name' => 'Hachirougata', 'country_code' => 'JP'],\n            ['name' => 'Cap Malheureux', 'country_code' => 'MU'],\n            ['name' => 'Chiquiza', 'country_code' => 'CO'],\n            ['name' => 'Lieboch', 'country_code' => 'AT'],\n            ['name' => 'Falcon Heights', 'country_code' => 'US'],\n            ['name' => 'Ore', 'country_code' => 'GB'],\n            ['name' => 'Feres', 'country_code' => 'GR'],\n            ['name' => 'Lichk', 'country_code' => 'AM'],\n            ['name' => 'Campinas do Sul', 'country_code' => 'BR'],\n            ['name' => 'Strawberry', 'country_code' => 'US'],\n            ['name' => 'South Huntingdon', 'country_code' => 'US'],\n            ['name' => 'Incourt', 'country_code' => 'BE'],\n            ['name' => 'Machadinho', 'country_code' => 'BR'],\n            ['name' => 'Estenfeld', 'country_code' => 'DE'],\n            ['name' => 'Atlanta', 'country_code' => 'US'],\n            ['name' => 'Obrigheim', 'country_code' => 'DE'],\n            ['name' => 'Saint Legier-La Chiesaz', 'country_code' => 'CH'],\n            ['name' => 'Zschorlau', 'country_code' => 'DE'],\n            ['name' => 'Horni Slavkov', 'country_code' => 'CZ'],\n            ['name' => 'Warthausen', 'country_code' => 'DE'],\n            ['name' => 'Weiser', 'country_code' => 'US'],\n            ['name' => 'Yosemite Lakes', 'country_code' => 'US'],\n            ['name' => 'Ambleve', 'country_code' => 'BE'],\n            ['name' => 'Erlenbach', 'country_code' => 'DE'],\n            ['name' => 'Kirchdorf am Inn', 'country_code' => 'DE'],\n            ['name' => 'Barnard Castle', 'country_code' => 'GB'],\n            ['name' => 'Harrietstown', 'country_code' => 'US'],\n            ['name' => 'Hopewell', 'country_code' => 'US'],\n            ['name' => 'Nassogne', 'country_code' => 'BE'],\n            ['name' => 'San Benito', 'country_code' => 'PH'],\n            ['name' => 'Trilport', 'country_code' => 'FR'],\n            ['name' => 'Brejinho de Nazare', 'country_code' => 'BR'],\n            ['name' => 'Clare', 'country_code' => 'US'],\n            ['name' => 'Byron Bay', 'country_code' => 'AU'],\n            ['name' => 'Horgenzell', 'country_code' => 'DE'],\n            ['name' => 'Esterwegen', 'country_code' => 'DE'],\n            ['name' => 'San Quintin', 'country_code' => 'PH'],\n            ['name' => 'Sabino', 'country_code' => 'BR'],\n            ['name' => 'Wool', 'country_code' => 'GB'],\n            ['name' => 'Bom Jesus do Amparo', 'country_code' => 'BR'],\n            ['name' => 'Gersfeld', 'country_code' => 'DE'],\n            ['name' => 'Highland Lakes', 'country_code' => 'US'],\n            ['name' => 'Germantown', 'country_code' => 'US'],\n            ['name' => 'Wangen', 'country_code' => 'CH'],\n            ['name' => 'Plouhinec', 'country_code' => 'FR'],\n            ['name' => 'Nong Muang', 'country_code' => 'TH'],\n            ['name' => 'Pequizeiro', 'country_code' => 'BR'],\n            ['name' => 'Luisiania', 'country_code' => 'BR'],\n            ['name' => 'Hamptonburgh', 'country_code' => 'US'],\n            ['name' => 'Chatillon-sur-Seine', 'country_code' => 'FR'],\n            ['name' => 'Dietramszell', 'country_code' => 'DE'],\n            ['name' => 'Brosteni', 'country_code' => 'RO'],\n            ['name' => 'Bagan', 'country_code' => 'RU'],\n            ['name' => 'Pirangucu', 'country_code' => 'BR'],\n            ['name' => 'Baxley', 'country_code' => 'US'],\n            ['name' => 'Santa Teresa', 'country_code' => 'US'],\n            ['name' => 'Boa Ventura', 'country_code' => 'BR'],\n            ['name' => 'Carlinville', 'country_code' => 'US'],\n            ['name' => 'Smigiel', 'country_code' => 'PL'],\n            ['name' => 'Montanaro', 'country_code' => 'IT'],\n            ['name' => 'Bernhardswald', 'country_code' => 'DE'],\n            ['name' => 'Aramina', 'country_code' => 'BR'],\n            ['name' => 'Bethany', 'country_code' => 'US'],\n            ['name' => 'Sherwood Manor', 'country_code' => 'US'],\n            ['name' => 'Bidokht', 'country_code' => 'IR'],\n            ['name' => 'Meano', 'country_code' => 'ES'],\n            ['name' => 'Kham Sakae Saeng', 'country_code' => 'TH'],\n            ['name' => 'Elberton', 'country_code' => 'US'],\n            ['name' => 'Kayenta', 'country_code' => 'US'],\n            ['name' => 'Bertolinia', 'country_code' => 'BR'],\n            ['name' => 'Vechigen', 'country_code' => 'CH'],\n            ['name' => 'Ebstorf', 'country_code' => 'DE'],\n            ['name' => 'Dolni Lutyne', 'country_code' => 'CZ'],\n            ['name' => 'Winston', 'country_code' => 'US'],\n            ['name' => 'Hluboka nad Vltavou', 'country_code' => 'CZ'],\n            ['name' => 'Rivanazzano', 'country_code' => 'IT'],\n            ['name' => 'Sollenau', 'country_code' => 'AT'],\n            ['name' => 'Almazan', 'country_code' => 'ES'],\n            ['name' => 'Pyhajarvi', 'country_code' => 'FI'],\n            ['name' => 'Guitiriz', 'country_code' => 'ES'],\n            ['name' => 'Nachalovo', 'country_code' => 'RU'],\n            ['name' => 'Faulquemont', 'country_code' => 'FR'],\n            ['name' => 'Hagendorf', 'country_code' => 'CH'],\n            ['name' => 'Wellston', 'country_code' => 'US'],\n            ['name' => 'San Pietro di Feletto', 'country_code' => 'IT'],\n            ['name' => 'Blackrod', 'country_code' => 'GB'],\n            ['name' => 'Rockdale', 'country_code' => 'US'],\n            ['name' => 'Stornarella', 'country_code' => 'IT'],\n            ['name' => 'Villapiana', 'country_code' => 'IT'],\n            ['name' => 'Presicce', 'country_code' => 'IT'],\n            ['name' => 'Viry', 'country_code' => 'FR'],\n            ['name' => 'Jubbah', 'country_code' => 'SA'],\n            ['name' => 'Penn', 'country_code' => 'US'],\n            ['name' => 'Holdenville', 'country_code' => 'US'],\n            ['name' => 'Swartz Creek', 'country_code' => 'US'],\n            ['name' => 'Mutriku', 'country_code' => 'ES'],\n            ['name' => 'Aying', 'country_code' => 'DE'],\n            ['name' => 'Ladyville', 'country_code' => 'BZ'],\n            ['name' => 'Tympaki', 'country_code' => 'GR'],\n            ['name' => 'Viiala', 'country_code' => 'FI'],\n            ['name' => 'Gravenwiesbach', 'country_code' => 'DE'],\n            ['name' => 'Aguiar da Beira', 'country_code' => 'PT'],\n            ['name' => 'Phanom Thuan', 'country_code' => 'TH'],\n            ['name' => 'Lanzo Torinese', 'country_code' => 'IT'],\n            ['name' => 'Rangendingen', 'country_code' => 'DE'],\n            ['name' => 'Feldkirchen an der Donau', 'country_code' => 'AT'],\n            ['name' => 'Mirecourt', 'country_code' => 'FR'],\n            ['name' => 'Marbletown', 'country_code' => 'US'],\n            ['name' => 'Makhkety', 'country_code' => 'RU'],\n            ['name' => 'Carroll', 'country_code' => 'US'],\n            ['name' => 'Glabbeek-Zuurbemde', 'country_code' => 'BE'],\n            ['name' => 'Saint-Philippe', 'country_code' => 'CA'],\n            ['name' => 'Jamestown', 'country_code' => 'US'],\n            ['name' => 'Gabcikovo', 'country_code' => 'SK'],\n            ['name' => 'Archidona', 'country_code' => 'EC'],\n            ['name' => 'Caparao', 'country_code' => 'BR'],\n            ['name' => 'Schrems', 'country_code' => 'AT'],\n            ['name' => 'Teuva', 'country_code' => 'FI'],\n            ['name' => 'Imigdal', 'country_code' => 'MA'],\n            ['name' => 'Dzierzgon', 'country_code' => 'PL'],\n            ['name' => 'Riltsi', 'country_code' => 'BG'],\n            ['name' => 'Lagonegro', 'country_code' => 'IT'],\n            ['name' => 'Mena', 'country_code' => 'US'],\n            ['name' => 'Casal Velino', 'country_code' => 'IT'],\n            ['name' => 'Sambaiba', 'country_code' => 'BR'],\n            ['name' => 'Stokesdale', 'country_code' => 'US'],\n            ['name' => 'Caprarola', 'country_code' => 'IT'],\n            ['name' => 'Lanusei', 'country_code' => 'IT'],\n            ['name' => 'Fort Plain', 'country_code' => 'US'],\n            ['name' => 'Kalaheo', 'country_code' => 'US'],\n            ['name' => 'Corlateni', 'country_code' => 'MD'],\n            ['name' => 'Wolfforth', 'country_code' => 'US'],\n            ['name' => 'Fairview', 'country_code' => 'US'],\n            ['name' => 'General Conesa', 'country_code' => 'AR'],\n            ['name' => 'Jaszladany', 'country_code' => 'HU'],\n            ['name' => 'Borriol', 'country_code' => 'ES'],\n            ['name' => 'Vaileka', 'country_code' => 'FJ'],\n            ['name' => 'Perranzabuloe', 'country_code' => 'GB'],\n            ['name' => 'Pregarten', 'country_code' => 'AT'],\n            ['name' => 'Castelvetro Piacentino', 'country_code' => 'IT'],\n            ['name' => 'Vila de Porto Santo', 'country_code' => 'PT'],\n            ['name' => 'Tvardita', 'country_code' => 'MD'],\n            ['name' => 'Bol shoye Nagatkino', 'country_code' => 'RU'],\n            ['name' => 'Laufach', 'country_code' => 'DE'],\n            ['name' => 'Saint-Etienne-au-Mont', 'country_code' => 'FR'],\n            ['name' => 'Kremnica', 'country_code' => 'SK'],\n            ['name' => 'San Antonio de los Cobres', 'country_code' => 'AR'],\n            ['name' => 'Manteo', 'country_code' => 'US'],\n            ['name' => 'Acquapendente', 'country_code' => 'IT'],\n            ['name' => 'Greenwich', 'country_code' => 'US'],\n            ['name' => 'Kuzumaki', 'country_code' => 'JP'],\n            ['name' => 'Kouli Kouara', 'country_code' => 'NE'],\n            ['name' => 'Lekala', 'country_code' => 'BW'],\n            ['name' => 'Agramunt', 'country_code' => 'ES'],\n            ['name' => 'Cucq', 'country_code' => 'FR'],\n            ['name' => 'Peculiar', 'country_code' => 'US'],\n            ['name' => 'Muldrow', 'country_code' => 'US'],\n            ['name' => 'Breckenridge', 'country_code' => 'US'],\n            ['name' => 'Vic-le-Comte', 'country_code' => 'FR'],\n            ['name' => 'Somerdale', 'country_code' => 'US'],\n            ['name' => 'Desaguadero', 'country_code' => 'PE'],\n            ['name' => 'Sparta', 'country_code' => 'US'],\n            ['name' => 'Tharandt', 'country_code' => 'DE'],\n            ['name' => 'Beekmantown', 'country_code' => 'US'],\n            ['name' => 'Dulles Town Center', 'country_code' => 'US'],\n            ['name' => 'Pommelsbrunn', 'country_code' => 'DE'],\n            ['name' => 'Calatabiano', 'country_code' => 'IT'],\n            ['name' => 'Sulzbach an der Murr', 'country_code' => 'DE'],\n            ['name' => 'Nandlstadt', 'country_code' => 'DE'],\n            ['name' => 'Caramanta', 'country_code' => 'CO'],\n            ['name' => 'Oryahovo', 'country_code' => 'BG'],\n            ['name' => 'Sant Omero', 'country_code' => 'IT'],\n            ['name' => 'Macachin', 'country_code' => 'AR'],\n            ['name' => 'Niedenstein', 'country_code' => 'DE'],\n            ['name' => 'Hartley', 'country_code' => 'GB'],\n            ['name' => 'Limana', 'country_code' => 'IT'],\n            ['name' => 'Plana', 'country_code' => 'CZ'],\n            ['name' => 'Condat-sur-Vienne', 'country_code' => 'FR'],\n            ['name' => 'Indian Wells', 'country_code' => 'US'],\n            ['name' => 'Quincy', 'country_code' => 'US'],\n            ['name' => 'Bar Harbor', 'country_code' => 'US'],\n            ['name' => 'Alameda', 'country_code' => 'ES'],\n            ['name' => 'Bine Al Widane', 'country_code' => 'MA'],\n            ['name' => 'Borgo Ticino', 'country_code' => 'IT'],\n            ['name' => 'Benedito Leite', 'country_code' => 'BR'],\n            ['name' => 'Basiliano', 'country_code' => 'IT'],\n            ['name' => 'Zhizdra', 'country_code' => 'RU'],\n            ['name' => 'Pervomayskoye', 'country_code' => 'RU'],\n            ['name' => 'Williams', 'country_code' => 'US'],\n            ['name' => 'Alcantil', 'country_code' => 'BR'],\n            ['name' => 'Telc', 'country_code' => 'CZ'],\n            ['name' => 'Colle Umberto', 'country_code' => 'IT'],\n            ['name' => 'Charleston', 'country_code' => 'US'],\n            ['name' => 'Richelieu', 'country_code' => 'CA'],\n            ['name' => 'Notre-Dame-du-Mont-Carmel', 'country_code' => 'CA'],\n            ['name' => 'Rockenhausen', 'country_code' => 'DE'],\n            ['name' => 'Kurumkan', 'country_code' => 'RU'],\n            ['name' => 'Rye', 'country_code' => 'US'],\n            ['name' => 'Fragagnano', 'country_code' => 'IT'],\n            ['name' => 'Campo Novo', 'country_code' => 'BR'],\n            ['name' => 'Cameron', 'country_code' => 'US'],\n            ['name' => 'New Holland', 'country_code' => 'US'],\n            ['name' => 'L Ange-Gardien', 'country_code' => 'CA'],\n            ['name' => 'Pana', 'country_code' => 'US'],\n            ['name' => 'Arzakan', 'country_code' => 'AM'],\n            ['name' => 'Cabaceiras', 'country_code' => 'BR'],\n            ['name' => 'Sladkovicovo', 'country_code' => 'SK'],\n            ['name' => 'Abegondo', 'country_code' => 'ES'],\n            ['name' => 'Caxinga', 'country_code' => 'BR'],\n            ['name' => 'Sainte-Martine', 'country_code' => 'CA'],\n            ['name' => 'Hisya ', 'country_code' => 'SY'],\n            ['name' => 'Rot am See', 'country_code' => 'DE'],\n            ['name' => 'Niederaula', 'country_code' => 'DE'],\n            ['name' => 'Itaguaru', 'country_code' => 'BR'],\n            ['name' => 'Chinchon', 'country_code' => 'ES'],\n            ['name' => 'Komadi', 'country_code' => 'HU'],\n            ['name' => 'Woodside', 'country_code' => 'US'],\n            ['name' => 'Brauna', 'country_code' => 'BR'],\n            ['name' => 'Giavera del Montello', 'country_code' => 'IT'],\n            ['name' => 'Hugelsheim', 'country_code' => 'DE'],\n            ['name' => 'Padula', 'country_code' => 'IT'],\n            ['name' => 'Missillac', 'country_code' => 'FR'],\n            ['name' => 'Wesendorf', 'country_code' => 'DE'],\n            ['name' => 'Harwinton', 'country_code' => 'US'],\n            ['name' => 'Colibasi', 'country_code' => 'MD'],\n            ['name' => 'Penmarch', 'country_code' => 'FR'],\n            ['name' => 'Taiki', 'country_code' => 'JP'],\n            ['name' => 'Bedarrides', 'country_code' => 'FR'],\n            ['name' => 'Jokioinen', 'country_code' => 'FI'],\n            ['name' => 'San Simon de Guerrero', 'country_code' => 'MX'],\n            ['name' => 'Nursling', 'country_code' => 'GB'],\n            ['name' => 'Adel', 'country_code' => 'US'],\n            ['name' => 'Vamospercs', 'country_code' => 'HU'],\n            ['name' => 'Barton on Sea', 'country_code' => 'GB'],\n            ['name' => 'Novaci-Straini', 'country_code' => 'RO'],\n            ['name' => 'Sam Sung', 'country_code' => 'TH'],\n            ['name' => 'Pfreimd', 'country_code' => 'DE'],\n            ['name' => 'Batinci', 'country_code' => 'MK'],\n            ['name' => 'Ahlerstedt', 'country_code' => 'DE'],\n            ['name' => 'Illasi', 'country_code' => 'IT'],\n            ['name' => 'Stary Plzenec', 'country_code' => 'CZ'],\n            ['name' => 'Lyons', 'country_code' => 'US'],\n            ['name' => 'Zistersdorf', 'country_code' => 'AT'],\n            ['name' => 'Earls Barton', 'country_code' => 'GB'],\n            ['name' => 'Bad Gleichenberg', 'country_code' => 'AT'],\n            ['name' => 'Morristown', 'country_code' => 'US'],\n            ['name' => 'Glonn', 'country_code' => 'DE'],\n            ['name' => 'Independence', 'country_code' => 'US'],\n            ['name' => 'Baindt', 'country_code' => 'DE'],\n            ['name' => 'Vrontados', 'country_code' => 'GR'],\n            ['name' => 'Jim Thorpe', 'country_code' => 'US'],\n            ['name' => 'Poretskoye', 'country_code' => 'RU'],\n            ['name' => 'Joanesia', 'country_code' => 'BR'],\n            ['name' => 'Valle de Juarez', 'country_code' => 'MX'],\n            ['name' => 'Bilton', 'country_code' => 'GB'],\n            ['name' => 'Terrell Hills', 'country_code' => 'US'],\n            ['name' => 'Dorpen', 'country_code' => 'DE'],\n            ['name' => 'Longuyon', 'country_code' => 'FR'],\n            ['name' => 'Auburn', 'country_code' => 'US'],\n            ['name' => 'Carlisle', 'country_code' => 'US'],\n            ['name' => 'Piterka', 'country_code' => 'RU'],\n            ['name' => 'Caseara', 'country_code' => 'BR'],\n            ['name' => 'Colby', 'country_code' => 'US'],\n            ['name' => 'Centerville', 'country_code' => 'US'],\n            ['name' => 'Jamul', 'country_code' => 'US'],\n            ['name' => 'East Moriches', 'country_code' => 'US'],\n            ['name' => 'Saliste', 'country_code' => 'RO'],\n            ['name' => 'Villaviciosa', 'country_code' => 'PH'],\n            ['name' => 'Velas', 'country_code' => 'PT'],\n            ['name' => 'Springhill', 'country_code' => 'US'],\n            ['name' => 'Catas Altas', 'country_code' => 'BR'],\n            ['name' => 'Monte Libretti', 'country_code' => 'IT'],\n            ['name' => 'Castrignano del Capo', 'country_code' => 'IT'],\n            ['name' => 'Santa Teresa Gallura', 'country_code' => 'IT'],\n            ['name' => 'Schermerhorn', 'country_code' => 'NL'],\n            ['name' => 'Imouzzer des Ida ou Tanane', 'country_code' => 'MA'],\n            ['name' => 'Gazzo Veronese', 'country_code' => 'IT'],\n            ['name' => 'Marquise', 'country_code' => 'FR'],\n            ['name' => 'Entre-Folhas', 'country_code' => 'BR'],\n            ['name' => 'Jampruca', 'country_code' => 'BR'],\n            ['name' => 'Malpica', 'country_code' => 'ES'],\n            ['name' => 'La Grand-Combe', 'country_code' => 'FR'],\n            ['name' => 'South Pittsburg', 'country_code' => 'US'],\n            ['name' => 'Eaton Rapids', 'country_code' => 'US'],\n            ['name' => 'Datas', 'country_code' => 'BR'],\n            ['name' => 'Gizzeria', 'country_code' => 'IT'],\n            ['name' => 'Chateaulin', 'country_code' => 'FR'],\n            ['name' => 'Pulyny', 'country_code' => 'UA'],\n            ['name' => 'Gilbertsville', 'country_code' => 'US'],\n            ['name' => 'Robbins', 'country_code' => 'US'],\n            ['name' => 'Saint-Pie', 'country_code' => 'CA'],\n            ['name' => 'Maraba Paulista', 'country_code' => 'BR'],\n            ['name' => 'Porto Lucena', 'country_code' => 'BR'],\n            ['name' => 'Heroldsbach', 'country_code' => 'DE'],\n            ['name' => 'Northwood', 'country_code' => 'US'],\n            ['name' => 'Cardenden', 'country_code' => 'GB'],\n            ['name' => 'Silvanopolis', 'country_code' => 'BR'],\n            ['name' => 'Eltmann', 'country_code' => 'DE'],\n            ['name' => 'Mouguerre', 'country_code' => 'FR'],\n            ['name' => 'Paranga', 'country_code' => 'RU'],\n            ['name' => 'St. Augustine South', 'country_code' => 'US'],\n            ['name' => 'Sidney', 'country_code' => 'US'],\n            ['name' => 'Archangelos', 'country_code' => 'GR'],\n            ['name' => 'Black River Falls', 'country_code' => 'US'],\n            ['name' => 'Sankt Ruprecht an der Raab', 'country_code' => 'AT'],\n            ['name' => 'Grossposna', 'country_code' => 'DE'],\n            ['name' => 'West Vincent', 'country_code' => 'US'],\n            ['name' => 'Grieskirchen', 'country_code' => 'AT'],\n            ['name' => 'Maslog', 'country_code' => 'PH'],\n            ['name' => 'Skydra', 'country_code' => 'GR'],\n            ['name' => 'Quorndon', 'country_code' => 'GB'],\n            ['name' => 'Honeoye Falls', 'country_code' => 'US'],\n            ['name' => 'Peachland', 'country_code' => 'CA'],\n            ['name' => 'Fruitland', 'country_code' => 'US'],\n            ['name' => 'Neudenau', 'country_code' => 'DE'],\n            ['name' => 'Linguaglossa', 'country_code' => 'IT'],\n            ['name' => 'Rockwood', 'country_code' => 'US'],\n            ['name' => 'Teojomulco', 'country_code' => 'MX'],\n            ['name' => 'Debeljaca', 'country_code' => 'RS'],\n            ['name' => 'Coraopolis', 'country_code' => 'US'],\n            ['name' => 'Scharding', 'country_code' => 'AT'],\n            ['name' => 'Ofterdingen', 'country_code' => 'DE'],\n            ['name' => 'Szikszo', 'country_code' => 'HU'],\n            ['name' => 'Ludersdorf', 'country_code' => 'DE'],\n            ['name' => 'Vernon', 'country_code' => 'US'],\n            ['name' => 'Shady Side', 'country_code' => 'US'],\n            ['name' => 'Tremosna', 'country_code' => 'CZ'],\n            ['name' => 'Iffezheim', 'country_code' => 'DE'],\n            ['name' => 'Esine', 'country_code' => 'IT'],\n            ['name' => 'Waynesboro', 'country_code' => 'US'],\n            ['name' => 'Ashfield-Colborne-Wawanosh', 'country_code' => 'CA'],\n            ['name' => 'Wackersdorf', 'country_code' => 'DE'],\n            ['name' => 'Monaca', 'country_code' => 'US'],\n            ['name' => 'Dalry', 'country_code' => 'GB'],\n            ['name' => 'Mittersill', 'country_code' => 'AT'],\n            ['name' => 'Bad Hall', 'country_code' => 'AT'],\n            ['name' => 'Blere', 'country_code' => 'FR'],\n            ['name' => 'El Limon', 'country_code' => 'MX'],\n            ['name' => 'Librilla', 'country_code' => 'ES'],\n            ['name' => 'Itacambira', 'country_code' => 'BR'],\n            ['name' => 'Santo Inacio', 'country_code' => 'BR'],\n            ['name' => 'Thum', 'country_code' => 'DE'],\n            ['name' => 'Benkovski', 'country_code' => 'BG'],\n            ['name' => 'Jackson', 'country_code' => 'US'],\n            ['name' => 'Jeceaba', 'country_code' => 'BR'],\n            ['name' => 'Rheinzabern', 'country_code' => 'DE'],\n            ['name' => 'Nova Esperanca', 'country_code' => 'BR'],\n            ['name' => 'Columbia', 'country_code' => 'US'],\n            ['name' => 'Lafayette', 'country_code' => 'US'],\n            ['name' => 'Hobol', 'country_code' => 'NO'],\n            ['name' => 'Weitnau', 'country_code' => 'DE'],\n            ['name' => 'Cigales', 'country_code' => 'ES'],\n            ['name' => 'Ripi', 'country_code' => 'IT'],\n            ['name' => 'Angier', 'country_code' => 'US'],\n            ['name' => 'Batesburg-Leesville', 'country_code' => 'US'],\n            ['name' => 'North Sewickley', 'country_code' => 'US'],\n            ['name' => 'Gemmingen', 'country_code' => 'DE'],\n            ['name' => 'Denver City', 'country_code' => 'US'],\n            ['name' => 'Chadron', 'country_code' => 'US'],\n            ['name' => 'Ferriday', 'country_code' => 'US'],\n            ['name' => 'Kisber', 'country_code' => 'HU'],\n            ['name' => 'Ixtapangajoya', 'country_code' => 'MX'],\n            ['name' => 'Buchenbach', 'country_code' => 'DE'],\n            ['name' => 'New Hempstead', 'country_code' => 'US'],\n            ['name' => 'Gazzaniga', 'country_code' => 'IT'],\n            ['name' => 'Coal City', 'country_code' => 'US'],\n            ['name' => 'San Miguel Panan', 'country_code' => 'GT'],\n            ['name' => 'Kusel', 'country_code' => 'DE'],\n            ['name' => 'Vitorchiano', 'country_code' => 'IT'],\n            ['name' => 'Canal Fulton', 'country_code' => 'US'],\n            ['name' => 'Holdrege', 'country_code' => 'US'],\n            ['name' => 'Sebezh', 'country_code' => 'RU'],\n            ['name' => 'Baia de Arama', 'country_code' => 'RO'],\n            ['name' => 'Sully-sur-Loire', 'country_code' => 'FR'],\n            ['name' => 'Altentreptow', 'country_code' => 'DE'],\n            ['name' => 'East Port Orchard', 'country_code' => 'US'],\n            ['name' => 'Skalite', 'country_code' => 'SK'],\n            ['name' => 'Zdvinsk', 'country_code' => 'RU'],\n            ['name' => 'Battenberg', 'country_code' => 'DE'],\n            ['name' => 'Gagliano del Capo', 'country_code' => 'IT'],\n            ['name' => 'Basdorf', 'country_code' => 'DE'],\n            ['name' => 'Qaminis', 'country_code' => 'LY'],\n            ['name' => 'Takae', 'country_code' => 'JP'],\n            ['name' => 'Centuripe', 'country_code' => 'IT'],\n            ['name' => 'Tota', 'country_code' => 'CO'],\n            ['name' => 'Rakoczifalva', 'country_code' => 'HU'],\n            ['name' => 'Salamanca', 'country_code' => 'US'],\n            ['name' => 'Monticelli d Ongina', 'country_code' => 'IT'],\n            ['name' => 'Valparaiso', 'country_code' => 'US'],\n            ['name' => 'Rosheim', 'country_code' => 'FR'],\n            ['name' => 'Talavera La Real', 'country_code' => 'ES'],\n            ['name' => 'Valatie', 'country_code' => 'US'],\n            ['name' => 'Chateau-Arnoux-Saint-Auban', 'country_code' => 'FR'],\n            ['name' => 'Rodigo', 'country_code' => 'IT'],\n            ['name' => 'Los Montesinos', 'country_code' => 'ES'],\n            ['name' => 'Laaber', 'country_code' => 'DE'],\n            ['name' => 'Villanueva del Trabuco', 'country_code' => 'ES'],\n            ['name' => 'Pagnacco', 'country_code' => 'IT'],\n            ['name' => 'Ourique', 'country_code' => 'PT'],\n            ['name' => 'Algona', 'country_code' => 'US'],\n            ['name' => 'Mocksville', 'country_code' => 'US'],\n            ['name' => 'Trent Lakes', 'country_code' => 'CA'],\n            ['name' => 'Leglise', 'country_code' => 'BE'],\n            ['name' => 'La Ferriere', 'country_code' => 'FR'],\n            ['name' => 'Senador Amaral', 'country_code' => 'BR'],\n            ['name' => 'San Vicente de Alcantara', 'country_code' => 'ES'],\n            ['name' => 'Ohlsdorf', 'country_code' => 'AT'],\n            ['name' => 'Giussago', 'country_code' => 'IT'],\n            ['name' => 'Rocbaron', 'country_code' => 'FR'],\n            ['name' => 'Palermo', 'country_code' => 'US'],\n            ['name' => 'Floral City', 'country_code' => 'US'],\n            ['name' => 'Centerport', 'country_code' => 'US'],\n            ['name' => 'Jacare dos Homens', 'country_code' => 'BR'],\n            ['name' => 'Pinckneyville', 'country_code' => 'US'],\n            ['name' => 'Northern Rockies', 'country_code' => 'CA'],\n            ['name' => 'New Castle', 'country_code' => 'US'],\n            ['name' => 'Kinross', 'country_code' => 'GB'],\n            ['name' => 'Purulha', 'country_code' => 'GT'],\n            ['name' => 'Celopek', 'country_code' => 'MK'],\n            ['name' => 'Smiths Station', 'country_code' => 'US'],\n            ['name' => 'Simancas', 'country_code' => 'ES'],\n            ['name' => 'Scaer', 'country_code' => 'FR'],\n            ['name' => 'Warm Mineral Springs', 'country_code' => 'US'],\n            ['name' => 'Manitou Springs', 'country_code' => 'US'],\n            ['name' => 'Kale', 'country_code' => 'MM'],\n            ['name' => 'Stadl-Paura', 'country_code' => 'AT'],\n            ['name' => 'Rambervillers', 'country_code' => 'FR'],\n            ['name' => 'General Bravo', 'country_code' => 'MX'],\n            ['name' => 'Heimsheim', 'country_code' => 'DE'],\n            ['name' => 'Komsomolskoye', 'country_code' => 'RU'],\n            ['name' => 'Muro Lucano', 'country_code' => 'IT'],\n            ['name' => 'Bidford-on-Avon', 'country_code' => 'GB'],\n            ['name' => 'Northfield', 'country_code' => 'US'],\n            ['name' => 'Zlynka', 'country_code' => 'RU'],\n            ['name' => 'Berlin', 'country_code' => 'US'],\n            ['name' => 'Central', 'country_code' => 'US'],\n            ['name' => 'Hitzkirch', 'country_code' => 'CH'],\n            ['name' => 'Stuhlingen', 'country_code' => 'DE'],\n            ['name' => 'Osterronfeld', 'country_code' => 'DE'],\n            ['name' => 'La Grange', 'country_code' => 'US'],\n            ['name' => 'Pechenizhyn', 'country_code' => 'UA'],\n            ['name' => 'Winterset', 'country_code' => 'US'],\n            ['name' => 'Manchester-by-the-Sea', 'country_code' => 'US'],\n            ['name' => 'Lemmon Valley', 'country_code' => 'US'],\n            ['name' => 'Polla', 'country_code' => 'IT'],\n            ['name' => 'Fraureuth', 'country_code' => 'DE'],\n            ['name' => 'Exton', 'country_code' => 'US'],\n            ['name' => 'Bridgton', 'country_code' => 'US'],\n            ['name' => 'Valencia de Alcantara', 'country_code' => 'ES'],\n            ['name' => 'Entrambasaguas', 'country_code' => 'ES'],\n            ['name' => 'Nagbukel', 'country_code' => 'PH'],\n            ['name' => 'Vienna', 'country_code' => 'US'],\n            ['name' => 'Bellows Falls', 'country_code' => 'US'],\n            ['name' => 'Oppido Mamertina', 'country_code' => 'IT'],\n            ['name' => 'Darda', 'country_code' => 'HR'],\n            ['name' => 'Trhove Sviny', 'country_code' => 'CZ'],\n            ['name' => 'Saint-Michel-Chef-Chef', 'country_code' => 'FR'],\n            ['name' => 'Measham', 'country_code' => 'GB'],\n            ['name' => 'Wonthaggi', 'country_code' => 'AU'],\n            ['name' => 'Marilla', 'country_code' => 'US'],\n            ['name' => 'Neuhausen', 'country_code' => 'DE'],\n            ['name' => 'Totontepec Villa de Morelos', 'country_code' => 'MX'],\n            ['name' => 'Acula', 'country_code' => 'MX'],\n            ['name' => 'Decize', 'country_code' => 'FR'],\n            ['name' => 'Orwigsburg', 'country_code' => 'US'],\n            ['name' => 'Citrus Park', 'country_code' => 'US'],\n            ['name' => 'Albaredo d Adige', 'country_code' => 'IT'],\n            ['name' => 'Newmains', 'country_code' => 'GB'],\n            ['name' => 'Caldwell', 'country_code' => 'US'],\n            ['name' => 'Sao Tome', 'country_code' => 'BR'],\n            ['name' => 'Trogstad', 'country_code' => 'NO'],\n            ['name' => 'Pohorelice', 'country_code' => 'CZ'],\n            ['name' => 'Cleveland', 'country_code' => 'US'],\n            ['name' => 'Lisbon', 'country_code' => 'US'],\n            ['name' => 'Odzun', 'country_code' => 'AM'],\n            ['name' => 'Momignies', 'country_code' => 'BE'],\n            ['name' => 'Turvelandia', 'country_code' => 'BR'],\n            ['name' => 'Polson', 'country_code' => 'US'],\n            ['name' => 'Cavalero', 'country_code' => 'US'],\n            ['name' => 'Carsoli', 'country_code' => 'IT'],\n            ['name' => 'Hanna', 'country_code' => 'IR'],\n            ['name' => 'Ciacova', 'country_code' => 'RO'],\n            ['name' => 'Hoshcha', 'country_code' => 'UA'],\n            ['name' => 'Bodenkirchen', 'country_code' => 'DE'],\n            ['name' => 'Rapolano Terme', 'country_code' => 'IT'],\n            ['name' => 'Pettenbach', 'country_code' => 'AT'],\n            ['name' => 'Estacada', 'country_code' => 'US'],\n            ['name' => 'Chackbay', 'country_code' => 'US'],\n            ['name' => 'West St. Paul', 'country_code' => 'CA'],\n            ['name' => 'Vanju-Mare', 'country_code' => 'RO'],\n            ['name' => 'Bellpuig', 'country_code' => 'ES'],\n            ['name' => 'Lindenfels', 'country_code' => 'DE'],\n            ['name' => 'Manchester', 'country_code' => 'US'],\n            ['name' => 'Windsor', 'country_code' => 'CA'],\n            ['name' => 'Mahlberg', 'country_code' => 'DE'],\n            ['name' => 'Clarinda', 'country_code' => 'US'],\n            ['name' => 'Ribadumia', 'country_code' => 'ES'],\n            ['name' => 'Santa Cristina de Aro', 'country_code' => 'ES'],\n            ['name' => 'Pytalovo', 'country_code' => 'RU'],\n            ['name' => 'Sunset', 'country_code' => 'US'],\n            ['name' => 'Wind Lake', 'country_code' => 'US'],\n            ['name' => 'Porto dos Gauchos', 'country_code' => 'BR'],\n            ['name' => 'Penn Estates', 'country_code' => 'US'],\n            ['name' => 'Valencia de Don Juan', 'country_code' => 'ES'],\n            ['name' => 'Janduis', 'country_code' => 'BR'],\n            ['name' => 'Horodnytsia', 'country_code' => 'UA'],\n            ['name' => 'Alness', 'country_code' => 'GB'],\n            ['name' => 'Dickinson', 'country_code' => 'US'],\n            ['name' => 'St. Paul Park', 'country_code' => 'US'],\n            ['name' => 'Simonton Lake', 'country_code' => 'US'],\n            ['name' => 'Redbourn', 'country_code' => 'GB'],\n            ['name' => 'Krieglach', 'country_code' => 'AT'],\n            ['name' => 'Veronella', 'country_code' => 'IT'],\n            ['name' => 'Gottolengo', 'country_code' => 'IT'],\n            ['name' => 'Sarroch', 'country_code' => 'IT'],\n            ['name' => 'Noyemberyan', 'country_code' => 'AM'],\n            ['name' => 'Le Rove', 'country_code' => 'FR'],\n            ['name' => 'Liberdade', 'country_code' => 'BR'],\n            ['name' => 'Ward', 'country_code' => 'US'],\n            ['name' => 'Gualchos', 'country_code' => 'ES'],\n            ['name' => 'Parres', 'country_code' => 'ES'],\n            ['name' => 'Pishchanka', 'country_code' => 'UA'],\n            ['name' => 'Roundway', 'country_code' => 'GB'],\n            ['name' => 'Hockinson', 'country_code' => 'US'],\n            ['name' => 'Velden', 'country_code' => 'NL'],\n            ['name' => 'Uhlingen-Birkendorf', 'country_code' => 'DE'],\n            ['name' => 'Pabrade', 'country_code' => 'LT'],\n            ['name' => 'Englewood Cliffs', 'country_code' => 'US'],\n            ['name' => 'James City', 'country_code' => 'US'],\n            ['name' => 'Oberaudorf', 'country_code' => 'DE'],\n            ['name' => 'Feira Nova', 'country_code' => 'BR'],\n            ['name' => 'Anthony', 'country_code' => 'US'],\n            ['name' => 'Redstone', 'country_code' => 'US'],\n            ['name' => 'Shepherdstown', 'country_code' => 'US'],\n            ['name' => 'North Oaks', 'country_code' => 'US'],\n            ['name' => 'Creston', 'country_code' => 'CA'],\n            ['name' => 'Smithers', 'country_code' => 'CA'],\n            ['name' => 'Breitenbrunn', 'country_code' => 'DE'],\n            ['name' => 'Bajram Curri', 'country_code' => 'AL'],\n            ['name' => 'Mattawa', 'country_code' => 'US'],\n            ['name' => 'Bederkesa', 'country_code' => 'DE'],\n            ['name' => 'Caruthersville', 'country_code' => 'US'],\n            ['name' => 'Port LaBelle', 'country_code' => 'US'],\n            ['name' => 'Brookline', 'country_code' => 'US'],\n            ['name' => 'Cornwall', 'country_code' => 'CA'],\n            ['name' => 'Castellucchio', 'country_code' => 'IT'],\n            ['name' => 'Maruggio', 'country_code' => 'IT'],\n            ['name' => 'San Pedro de Atacama', 'country_code' => 'CL'],\n            ['name' => 'Campegine', 'country_code' => 'IT'],\n            ['name' => 'Ligne', 'country_code' => 'FR'],\n            ['name' => 'Williamson', 'country_code' => 'US'],\n            ['name' => 'Mollina', 'country_code' => 'ES'],\n            ['name' => 'Travelers Rest', 'country_code' => 'US'],\n            ['name' => 'Newport', 'country_code' => 'US'],\n            ['name' => 'Rincon Valley', 'country_code' => 'US'],\n            ['name' => 'Kyparissia', 'country_code' => 'GR'],\n            ['name' => 'Meadow Lake', 'country_code' => 'CA'],\n            ['name' => 'Balatonlelle', 'country_code' => 'HU'],\n            ['name' => 'East Quogue', 'country_code' => 'US'],\n            ['name' => 'Figueiropolis', 'country_code' => 'BR'],\n            ['name' => 'Shatsk', 'country_code' => 'UA'],\n            ['name' => 'Velburg', 'country_code' => 'DE'],\n            ['name' => 'Alsonemedi', 'country_code' => 'HU'],\n            ['name' => 'Blaufelden', 'country_code' => 'DE'],\n            ['name' => 'Jaboti', 'country_code' => 'BR'],\n            ['name' => 'Macon', 'country_code' => 'US'],\n            ['name' => 'Schweitenkirchen', 'country_code' => 'DE'],\n            ['name' => 'Kunmadaras', 'country_code' => 'HU'],\n            ['name' => 'Frankford', 'country_code' => 'US'],\n            ['name' => 'Tassamert', 'country_code' => 'DZ'],\n            ['name' => 'Botuvera', 'country_code' => 'BR'],\n            ['name' => 'Rupea', 'country_code' => 'RO'],\n            ['name' => 'Saint-Gilles', 'country_code' => 'FR'],\n            ['name' => 'Spas-Klepiki', 'country_code' => 'RU'],\n            ['name' => 'Polna', 'country_code' => 'CZ'],\n            ['name' => 'Pyhtaa', 'country_code' => 'FI'],\n            ['name' => 'Lanark Highlands', 'country_code' => 'CA'],\n            ['name' => 'Ilomantsi', 'country_code' => 'FI'],\n            ['name' => 'Velka Bites', 'country_code' => 'CZ'],\n            ['name' => 'Chiusa', 'country_code' => 'IT'],\n            ['name' => 'Morganfield', 'country_code' => 'US'],\n            ['name' => 'Apple Valley', 'country_code' => 'US'],\n            ['name' => 'Palmerton', 'country_code' => 'US'],\n            ['name' => 'San Leon', 'country_code' => 'US'],\n            ['name' => 'Chions', 'country_code' => 'IT'],\n            ['name' => 'Horazd ovice', 'country_code' => 'CZ'],\n            ['name' => 'Montefrio', 'country_code' => 'ES'],\n            ['name' => 'Doutor Mauricio Cardoso', 'country_code' => 'BR'],\n            ['name' => 'Jonesboro', 'country_code' => 'US'],\n            ['name' => 'Morris', 'country_code' => 'US'],\n            ['name' => 'Terrujem', 'country_code' => 'PT'],\n            ['name' => 'Tickhill', 'country_code' => 'GB'],\n            ['name' => 'La Balme-de-Sillingy', 'country_code' => 'FR'],\n            ['name' => 'Bakov nad Jizerou', 'country_code' => 'CZ'],\n            ['name' => 'Puchuncavi', 'country_code' => 'CL'],\n            ['name' => 'Nava', 'country_code' => 'ES'],\n            ['name' => 'McGregor', 'country_code' => 'US'],\n            ['name' => 'Sackville', 'country_code' => 'CA'],\n            ['name' => 'Triftern', 'country_code' => 'DE'],\n            ['name' => 'Viadutos', 'country_code' => 'BR'],\n            ['name' => 'Bratske', 'country_code' => 'UA'],\n            ['name' => 'Ceska Kamenice', 'country_code' => 'CZ'],\n            ['name' => 'Westernport', 'country_code' => 'US'],\n            ['name' => 'Muravera', 'country_code' => 'IT'],\n            ['name' => 'Maze', 'country_code' => 'FR'],\n            ['name' => 'Geoagiu', 'country_code' => 'RO'],\n            ['name' => 'Mapire', 'country_code' => 'VE'],\n            ['name' => 'Holysov', 'country_code' => 'CZ'],\n            ['name' => 'Saint-Pourcain-sur-Sioule', 'country_code' => 'FR'],\n            ['name' => 'Wake Village', 'country_code' => 'US'],\n            ['name' => 'Canino', 'country_code' => 'IT'],\n            ['name' => 'Grand Falls', 'country_code' => 'CA'],\n            ['name' => 'Kdyne', 'country_code' => 'CZ'],\n            ['name' => 'Tiszalok', 'country_code' => 'HU'],\n            ['name' => 'Santa Caterina Villarmosa', 'country_code' => 'IT'],\n            ['name' => 'Mourmelon-le-Grand', 'country_code' => 'FR'],\n            ['name' => 'Briare', 'country_code' => 'FR'],\n            ['name' => 'San Ildefonso', 'country_code' => 'ES'],\n            ['name' => 'Avondale', 'country_code' => 'US'],\n            ['name' => 'Cochrane', 'country_code' => 'CA'],\n            ['name' => 'Bol shoye Sorokino', 'country_code' => 'RU'],\n            ['name' => 'New Ipswich', 'country_code' => 'US'],\n            ['name' => 'Hawaiian Beaches', 'country_code' => 'US'],\n            ['name' => 'Bilibino', 'country_code' => 'RU'],\n            ['name' => 'Hadley', 'country_code' => 'US'],\n            ['name' => 'Coreglia Antelminelli', 'country_code' => 'IT'],\n            ['name' => 'Sedelnikovo', 'country_code' => 'RU'],\n            ['name' => 'Gommiswald', 'country_code' => 'CH'],\n            ['name' => 'Ruokolahti', 'country_code' => 'FI'],\n            ['name' => 'Opishnya', 'country_code' => 'UA'],\n            ['name' => 'Le Pellerin', 'country_code' => 'FR'],\n            ['name' => 'Correzzola', 'country_code' => 'IT'],\n            ['name' => 'Marystown', 'country_code' => 'CA'],\n            ['name' => 'Kolosovka', 'country_code' => 'RU'],\n            ['name' => 'Ocean Shores', 'country_code' => 'AU'],\n            ['name' => 'McKenzie', 'country_code' => 'US'],\n            ['name' => 'Bom Principio', 'country_code' => 'BR'],\n            ['name' => 'Uhrichsville', 'country_code' => 'US'],\n            ['name' => 'Saint-Germain-du-Puy', 'country_code' => 'FR'],\n            ['name' => 'Lehighton', 'country_code' => 'US'],\n            ['name' => 'Vicente Dutra', 'country_code' => 'BR'],\n            ['name' => 'Minot AFB', 'country_code' => 'US'],\n            ['name' => 'Grossheubach', 'country_code' => 'DE'],\n            ['name' => 'Fort Rucker', 'country_code' => 'US'],\n            ['name' => 'Bandar-e Rig', 'country_code' => 'IR'],\n            ['name' => 'Zolynia', 'country_code' => 'PL'],\n            ['name' => 'Andorf', 'country_code' => 'AT'],\n            ['name' => 'Lohsa', 'country_code' => 'DE'],\n            ['name' => 'Camarinas', 'country_code' => 'ES'],\n            ['name' => 'Fruitland', 'country_code' => 'US'],\n            ['name' => 'Locmaria-Plouzane', 'country_code' => 'FR'],\n            ['name' => 'Villeneuve-sur-Yonne', 'country_code' => 'FR'],\n            ['name' => 'Taliouine', 'country_code' => 'MA'],\n            ['name' => 'Plesse', 'country_code' => 'FR'],\n            ['name' => 'Castelnuovo Scrivia', 'country_code' => 'IT'],\n            ['name' => 'Molchanovo', 'country_code' => 'RU'],\n            ['name' => 'Gweta', 'country_code' => 'BW'],\n            ['name' => 'Savannah', 'country_code' => 'US'],\n            ['name' => 'Jefferson', 'country_code' => 'US'],\n            ['name' => 'Lampazos de Naranjo', 'country_code' => 'MX'],\n            ['name' => 'Khatassy', 'country_code' => 'RU'],\n            ['name' => 'Tha Wang Pha', 'country_code' => 'TH'],\n            ['name' => 'Wiedemar', 'country_code' => 'DE'],\n            ['name' => 'Ceska Skalice', 'country_code' => 'CZ'],\n            ['name' => 'Zovuni', 'country_code' => 'AM'],\n            ['name' => 'Hirbovat', 'country_code' => 'MD'],\n            ['name' => 'Cordoba', 'country_code' => 'CO'],\n            ['name' => 'Avdon', 'country_code' => 'RU'],\n            ['name' => 'Grans', 'country_code' => 'FR'],\n            ['name' => 'Fairport', 'country_code' => 'US'],\n            ['name' => 'Union Beach', 'country_code' => 'US'],\n            ['name' => 'Pawcatuck', 'country_code' => 'US'],\n            ['name' => 'Bessan', 'country_code' => 'FR'],\n            ['name' => 'Berri', 'country_code' => 'AU'],\n            ['name' => 'Hightstown', 'country_code' => 'US'],\n            ['name' => 'East Granby', 'country_code' => 'US'],\n            ['name' => 'Suvorovo', 'country_code' => 'BG'],\n            ['name' => 'Rochedo', 'country_code' => 'BR'],\n            ['name' => 'Conches-en-Ouche', 'country_code' => 'FR'],\n            ['name' => 'Alton', 'country_code' => 'US'],\n            ['name' => 'Brady', 'country_code' => 'US'],\n            ['name' => 'Brent', 'country_code' => 'US'],\n            ['name' => 'Eagleville', 'country_code' => 'US'],\n            ['name' => 'Ovelgonne', 'country_code' => 'DE'],\n            ['name' => 'Kelly', 'country_code' => 'US'],\n            ['name' => 'Henfield', 'country_code' => 'GB'],\n            ['name' => 'Alburquerque', 'country_code' => 'ES'],\n            ['name' => 'Krivosheino', 'country_code' => 'RU'],\n            ['name' => 'Camogli', 'country_code' => 'IT'],\n            ['name' => 'Bulverde', 'country_code' => 'US'],\n            ['name' => 'Alto del Carmen', 'country_code' => 'CL'],\n            ['name' => 'Waeng Yai', 'country_code' => 'TH'],\n            ['name' => 'Pacy-sur-Eure', 'country_code' => 'FR'],\n            ['name' => 'Bolton', 'country_code' => 'US'],\n            ['name' => 'Kirchberg in Tirol', 'country_code' => 'AT'],\n            ['name' => 'Guglionesi', 'country_code' => 'IT'],\n            ['name' => 'Hareid', 'country_code' => 'NO'],\n            ['name' => 'Pottenstein', 'country_code' => 'DE'],\n            ['name' => 'Znamenskoye', 'country_code' => 'RU'],\n            ['name' => 'Komyshuvakha', 'country_code' => 'UA'],\n            ['name' => 'Longarone', 'country_code' => 'IT'],\n            ['name' => 'Dom Cavati', 'country_code' => 'BR'],\n            ['name' => 'Odelzhausen', 'country_code' => 'DE'],\n            ['name' => 'Santa Maria do Salto', 'country_code' => 'BR'],\n            ['name' => 'Paxtonia', 'country_code' => 'US'],\n            ['name' => 'Ochamchire', 'country_code' => 'GE'],\n            ['name' => 'Waynesville', 'country_code' => 'US'],\n            ['name' => 'Ayora', 'country_code' => 'ES'],\n            ['name' => 'Naie', 'country_code' => 'JP'],\n            ['name' => 'Kappel-Grafenhausen', 'country_code' => 'DE'],\n            ['name' => 'Cerda', 'country_code' => 'IT'],\n            ['name' => 'Mount Carmel', 'country_code' => 'US'],\n            ['name' => 'Waldems', 'country_code' => 'DE'],\n            ['name' => 'Borkum', 'country_code' => 'DE'],\n            ['name' => 'Parazinho', 'country_code' => 'BR'],\n            ['name' => 'Oettingen in Bayern', 'country_code' => 'DE'],\n            ['name' => 'Kings Point', 'country_code' => 'US'],\n            ['name' => 'Bear Valley Springs', 'country_code' => 'US'],\n            ['name' => 'San Jose de Pare', 'country_code' => 'CO'],\n            ['name' => 'Benjamin Hill', 'country_code' => 'MX'],\n            ['name' => 'Maser', 'country_code' => 'IT'],\n            ['name' => 'Orange', 'country_code' => 'US'],\n            ['name' => 'Kahaluu-Keauhou', 'country_code' => 'US'],\n            ['name' => 'Vacha', 'country_code' => 'DE'],\n            ['name' => 'Carroll', 'country_code' => 'US'],\n            ['name' => 'Cannobio', 'country_code' => 'IT'],\n            ['name' => 'Ronneburg', 'country_code' => 'DE'],\n            ['name' => 'Vigone', 'country_code' => 'IT'],\n            ['name' => 'Wanroij', 'country_code' => 'NL'],\n            ['name' => 'Polop', 'country_code' => 'ES'],\n            ['name' => 'Iola', 'country_code' => 'US'],\n            ['name' => 'Tizagzawine', 'country_code' => 'MA'],\n            ['name' => 'Pechenihy', 'country_code' => 'UA'],\n            ['name' => 'Vila do Bispo', 'country_code' => 'PT'],\n            ['name' => 'Landri Sales', 'country_code' => 'BR'],\n            ['name' => 'Zephyrhills West', 'country_code' => 'US'],\n            ['name' => 'Malles Venosta', 'country_code' => 'IT'],\n            ['name' => 'Volta Grande', 'country_code' => 'BR'],\n            ['name' => 'San Giovanni Ilarione', 'country_code' => 'IT'],\n            ['name' => 'Garnet', 'country_code' => 'US'],\n            ['name' => 'Avai', 'country_code' => 'BR'],\n            ['name' => 'Igensdorf', 'country_code' => 'DE'],\n            ['name' => 'Lake Fenton', 'country_code' => 'US'],\n            ['name' => 'Novohuivynske', 'country_code' => 'UA'],\n            ['name' => 'Kyshtovka', 'country_code' => 'RU'],\n            ['name' => 'Baliza', 'country_code' => 'BR'],\n            ['name' => 'Old Bethpage', 'country_code' => 'US'],\n            ['name' => 'South Sarasota', 'country_code' => 'US'],\n            ['name' => 'Jaffrey', 'country_code' => 'US'],\n            ['name' => 'Corropoli', 'country_code' => 'IT'],\n            ['name' => 'Laces', 'country_code' => 'IT'],\n            ['name' => 'North Dansville', 'country_code' => 'US'],\n            ['name' => 'Marano sul Panaro', 'country_code' => 'IT'],\n            ['name' => 'Nalbandyan', 'country_code' => 'AM'],\n            ['name' => 'Chepelare', 'country_code' => 'BG'],\n            ['name' => 'Midway', 'country_code' => 'US'],\n            ['name' => 'La Campana', 'country_code' => 'ES'],\n            ['name' => 'Cuges-les-Pins', 'country_code' => 'FR'],\n            ['name' => 'Big Bear Lake', 'country_code' => 'US'],\n            ['name' => 'Titusville', 'country_code' => 'US'],\n            ['name' => 'St. Clair', 'country_code' => 'US'],\n            ['name' => 'Austevoll', 'country_code' => 'NO'],\n            ['name' => 'Bratslav', 'country_code' => 'UA'],\n            ['name' => 'Grayson', 'country_code' => 'US'],\n            ['name' => 'Stara Vyzhivka', 'country_code' => 'UA'],\n            ['name' => 'Red Oak', 'country_code' => 'US'],\n            ['name' => 'Cave Springs', 'country_code' => 'US'],\n            ['name' => 'Peal de Becerro', 'country_code' => 'ES'],\n            ['name' => 'Acorizal', 'country_code' => 'BR'],\n            ['name' => 'Wadesboro', 'country_code' => 'US'],\n            ['name' => 'Frei', 'country_code' => 'NO'],\n            ['name' => 'Arcabuco', 'country_code' => 'CO'],\n            ['name' => 'Edwinstowe', 'country_code' => 'GB'],\n            ['name' => 'Ripley', 'country_code' => 'US'],\n            ['name' => 'Drebach', 'country_code' => 'DE'],\n            ['name' => 'Altenstadt', 'country_code' => 'DE'],\n            ['name' => 'Sioux Lookout', 'country_code' => 'CA'],\n            ['name' => 'Zarat', 'country_code' => 'TN'],\n            ['name' => 'Divina Pastora', 'country_code' => 'BR'],\n            ['name' => 'Peyrolles-en-Provence', 'country_code' => 'FR'],\n            ['name' => 'Sevelen', 'country_code' => 'CH'],\n            ['name' => 'Arzberg', 'country_code' => 'DE'],\n            ['name' => 'Ardore', 'country_code' => 'IT'],\n            ['name' => 'Hawkinsville', 'country_code' => 'US'],\n            ['name' => 'Forsyth', 'country_code' => 'US'],\n            ['name' => 'Santana do Itarare', 'country_code' => 'BR'],\n            ['name' => 'Csakvar', 'country_code' => 'HU'],\n            ['name' => 'Pourrieres', 'country_code' => 'FR'],\n            ['name' => 'Le Bourget-du-Lac', 'country_code' => 'FR'],\n            ['name' => 'Sechenovo', 'country_code' => 'RU'],\n            ['name' => 'Didsbury', 'country_code' => 'CA'],\n            ['name' => 'Yamanaka', 'country_code' => 'JP'],\n            ['name' => 'Thalmassing', 'country_code' => 'DE'],\n            ['name' => 'Rothschild', 'country_code' => 'US'],\n            ['name' => 'Lomovka', 'country_code' => 'RU'],\n            ['name' => 'Fraubrunnen', 'country_code' => 'CH'],\n            ['name' => 'Delhi Hills', 'country_code' => 'US'],\n            ['name' => 'Ban Bang Pramung', 'country_code' => 'TH'],\n            ['name' => 'Grossaitingen', 'country_code' => 'DE'],\n            ['name' => 'Champniers', 'country_code' => 'FR'],\n            ['name' => 'Belvedere', 'country_code' => 'US'],\n            ['name' => 'El Cocuy', 'country_code' => 'CO'],\n            ['name' => 'Shaykh al Hadid', 'country_code' => 'SY'],\n            ['name' => 'Centola', 'country_code' => 'IT'],\n            ['name' => 'Wermsdorf', 'country_code' => 'DE'],\n            ['name' => 'Bucchianico', 'country_code' => 'IT'],\n            ['name' => 'Angelina', 'country_code' => 'BR'],\n            ['name' => 'Lagundo', 'country_code' => 'IT'],\n            ['name' => 'Pecan Acres', 'country_code' => 'US'],\n            ['name' => 'Timzguida Ouftas', 'country_code' => 'MA'],\n            ['name' => 'Dom Silverio', 'country_code' => 'BR'],\n            ['name' => 'Villers-le-Lac', 'country_code' => 'FR'],\n            ['name' => 'Nea Anchialos', 'country_code' => 'GR'],\n            ['name' => 'Esporlas', 'country_code' => 'ES'],\n            ['name' => 'Rottenmann', 'country_code' => 'AT'],\n            ['name' => 'Wilhelmsdorf', 'country_code' => 'DE'],\n            ['name' => 'Syumsi', 'country_code' => 'RU'],\n            ['name' => 'Mansue', 'country_code' => 'IT'],\n            ['name' => 'Marianopolis do Tocantins', 'country_code' => 'BR'],\n            ['name' => 'Guemene-Penfao', 'country_code' => 'FR'],\n            ['name' => 'Howard Springs', 'country_code' => 'AU'],\n            ['name' => 'Alcover', 'country_code' => 'ES'],\n            ['name' => 'Villette-d Anthon', 'country_code' => 'FR'],\n            ['name' => 'Francinopolis', 'country_code' => 'BR'],\n            ['name' => 'Novomykolayivka', 'country_code' => 'UA'],\n            ['name' => 'Parigne-l Eveque', 'country_code' => 'FR'],\n            ['name' => 'Giddings', 'country_code' => 'US'],\n            ['name' => 'Beya', 'country_code' => 'RU'],\n            ['name' => 'Houffalize', 'country_code' => 'BE'],\n            ['name' => 'Baretswil', 'country_code' => 'CH'],\n            ['name' => 'Servian', 'country_code' => 'FR'],\n            ['name' => 'Abrud', 'country_code' => 'RO'],\n            ['name' => 'Venus', 'country_code' => 'US'],\n            ['name' => 'Orchomenos', 'country_code' => 'GR'],\n            ['name' => 'Jilove', 'country_code' => 'CZ'],\n            ['name' => 'Castelbellino', 'country_code' => 'IT'],\n            ['name' => 'Turangi', 'country_code' => 'NZ'],\n            ['name' => 'Worthsee', 'country_code' => 'DE'],\n            ['name' => 'Fernie', 'country_code' => 'CA'],\n            ['name' => 'Deer Lake', 'country_code' => 'CA'],\n            ['name' => 'Luynes', 'country_code' => 'FR'],\n            ['name' => 'Hankasalmi', 'country_code' => 'FI'],\n            ['name' => 'Tvrdosovce', 'country_code' => 'SK'],\n            ['name' => 'Otero de Rey', 'country_code' => 'ES'],\n            ['name' => 'Sankt Johann', 'country_code' => 'DE'],\n            ['name' => 'Perry', 'country_code' => 'US'],\n            ['name' => 'Carlyss', 'country_code' => 'US'],\n            ['name' => 'Tapioszentmarton', 'country_code' => 'HU'],\n            ['name' => 'Doksy', 'country_code' => 'CZ'],\n            ['name' => 'Calberlah', 'country_code' => 'DE'],\n            ['name' => 'Calistoga', 'country_code' => 'US'],\n            ['name' => 'Perushtitsa', 'country_code' => 'BG'],\n            ['name' => 'Odessa', 'country_code' => 'US'],\n            ['name' => 'Kalynivka', 'country_code' => 'UA'],\n            ['name' => 'Chemerivtsi', 'country_code' => 'UA'],\n            ['name' => 'Francisco Dumont', 'country_code' => 'BR'],\n            ['name' => 'Steyerberg', 'country_code' => 'DE'],\n            ['name' => 'Brensbach', 'country_code' => 'DE'],\n            ['name' => 'Holmfirth', 'country_code' => 'GB'],\n            ['name' => 'Poolesville', 'country_code' => 'US'],\n            ['name' => 'Pedrera', 'country_code' => 'ES'],\n            ['name' => 'Eckersdorf', 'country_code' => 'DE'],\n            ['name' => 'Livingston', 'country_code' => 'US'],\n            ['name' => 'Walkertown', 'country_code' => 'US'],\n            ['name' => 'Osceola', 'country_code' => 'US'],\n            ['name' => 'Yarmouth Port', 'country_code' => 'US'],\n            ['name' => 'Parikkala', 'country_code' => 'FI'],\n            ['name' => 'Sachseln', 'country_code' => 'CH'],\n            ['name' => 'Gbely', 'country_code' => 'SK'],\n            ['name' => 'Briar', 'country_code' => 'US'],\n            ['name' => 'Wenham', 'country_code' => 'US'],\n            ['name' => 'Ranson', 'country_code' => 'US'],\n            ['name' => 'Capistrello', 'country_code' => 'IT'],\n            ['name' => 'Portoscuso', 'country_code' => 'IT'],\n            ['name' => 'Gouvy', 'country_code' => 'BE'],\n            ['name' => 'Alcala de los Gazules', 'country_code' => 'ES'],\n            ['name' => 'Dores de Guanhaes', 'country_code' => 'BR'],\n            ['name' => 'Holytown', 'country_code' => 'GB'],\n            ['name' => 'Santana de Mangueira', 'country_code' => 'BR'],\n            ['name' => 'Oderwitz', 'country_code' => 'DE'],\n            ['name' => 'Moral de Calatrava', 'country_code' => 'ES'],\n            ['name' => 'Salem', 'country_code' => 'US'],\n            ['name' => 'Sanom', 'country_code' => 'TH'],\n            ['name' => 'Prroshyan', 'country_code' => 'AM'],\n            ['name' => 'Birkenes', 'country_code' => 'NO'],\n            ['name' => 'Neda', 'country_code' => 'ES'],\n            ['name' => 'Seubersdorf', 'country_code' => 'DE'],\n            ['name' => 'Buje', 'country_code' => 'HR'],\n            ['name' => 'Lake Wildwood', 'country_code' => 'US'],\n            ['name' => 'West Rockhill', 'country_code' => 'US'],\n            ['name' => 'Washington', 'country_code' => 'US'],\n            ['name' => 'Samassi', 'country_code' => 'IT'],\n            ['name' => 'La Souterraine', 'country_code' => 'FR'],\n            ['name' => 'Tricarico', 'country_code' => 'IT'],\n            ['name' => 'Ruskington', 'country_code' => 'GB'],\n            ['name' => 'Luhacovice', 'country_code' => 'CZ'],\n            ['name' => 'Sasykoli', 'country_code' => 'RU'],\n            ['name' => 'Gramastetten', 'country_code' => 'AT'],\n            ['name' => 'Xibaipo', 'country_code' => 'CN'],\n            ['name' => 'Radoaia', 'country_code' => 'MD'],\n            ['name' => 'Hendron', 'country_code' => 'US'],\n            ['name' => 'Bangor', 'country_code' => 'US'],\n            ['name' => 'Londonderry', 'country_code' => 'US'],\n            ['name' => 'Bethel', 'country_code' => 'US'],\n            ['name' => 'Woodstock', 'country_code' => 'CA'],\n            ['name' => 'Rio do Prado', 'country_code' => 'BR'],\n            ['name' => 'Laille', 'country_code' => 'FR'],\n            ['name' => 'Hollywood', 'country_code' => 'US'],\n            ['name' => 'Ses Salines', 'country_code' => 'ES'],\n            ['name' => 'Byron', 'country_code' => 'US'],\n            ['name' => 'Ballston Spa', 'country_code' => 'US'],\n            ['name' => 'Nong Na Kham', 'country_code' => 'TH'],\n            ['name' => 'Bisbee', 'country_code' => 'US'],\n            ['name' => 'Vaglia', 'country_code' => 'IT'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Chisago City', 'country_code' => 'US'],\n            ['name' => 'Carlisle', 'country_code' => 'US'],\n            ['name' => 'Sariegos', 'country_code' => 'ES'],\n            ['name' => 'Santiago Zacatepec', 'country_code' => 'MX'],\n            ['name' => 'Union City', 'country_code' => 'US'],\n            ['name' => 'North Stonington', 'country_code' => 'US'],\n            ['name' => 'Laureana di Borrello', 'country_code' => 'IT'],\n            ['name' => 'Myrtletown', 'country_code' => 'US'],\n            ['name' => 'Almaden', 'country_code' => 'ES'],\n            ['name' => 'Victor Meireles', 'country_code' => 'BR'],\n            ['name' => 'Chiny', 'country_code' => 'BE'],\n            ['name' => 'Kut Bak', 'country_code' => 'TH'],\n            ['name' => 'Gilmer', 'country_code' => 'US'],\n            ['name' => 'Williamsville', 'country_code' => 'US'],\n            ['name' => 'Martic', 'country_code' => 'US'],\n            ['name' => 'Guaramiranga', 'country_code' => 'BR'],\n            ['name' => 'Bugyi', 'country_code' => 'HU'],\n            ['name' => 'Jequitiba', 'country_code' => 'BR'],\n            ['name' => 'Jinzhong', 'country_code' => 'CN'],\n            ['name' => 'Vereya', 'country_code' => 'RU'],\n            ['name' => 'San Jose del Golfo', 'country_code' => 'GT'],\n            ['name' => 'Manoel Emidio', 'country_code' => 'BR'],\n            ['name' => 'Layhill', 'country_code' => 'US'],\n            ['name' => 'Elmsford', 'country_code' => 'US'],\n            ['name' => 'Center', 'country_code' => 'US'],\n            ['name' => 'Farmers Loop', 'country_code' => 'US'],\n            ['name' => 'Warren', 'country_code' => 'US'],\n            ['name' => 'Amoneburg', 'country_code' => 'DE'],\n            ['name' => 'Kyren', 'country_code' => 'RU'],\n            ['name' => 'Halsbrucke', 'country_code' => 'DE'],\n            ['name' => 'Quesada', 'country_code' => 'ES'],\n            ['name' => 'Jicalapa', 'country_code' => 'SV'],\n            ['name' => 'Driedorf', 'country_code' => 'DE'],\n            ['name' => 'Ribadavia', 'country_code' => 'ES'],\n            ['name' => 'Selty', 'country_code' => 'RU'],\n            ['name' => 'Sao Francisco do Gloria', 'country_code' => 'BR'],\n            ['name' => 'Tunari', 'country_code' => 'RO'],\n            ['name' => 'Val-David', 'country_code' => 'CA'],\n            ['name' => 'Akarma', 'country_code' => 'MA'],\n            ['name' => 'Robel', 'country_code' => 'DE'],\n            ['name' => 'Montrose', 'country_code' => 'US'],\n            ['name' => 'Pinardville', 'country_code' => 'US'],\n            ['name' => 'Rodniki', 'country_code' => 'RU'],\n            ['name' => 'Tiouli', 'country_code' => 'MA'],\n            ['name' => 'Frensdorf', 'country_code' => 'DE'],\n            ['name' => 'Jaszkiser', 'country_code' => 'HU'],\n            ['name' => 'Bulboaca', 'country_code' => 'MD'],\n            ['name' => 'Baystonhill', 'country_code' => 'GB'],\n            ['name' => 'Vila Nova de Paiva', 'country_code' => 'PT'],\n            ['name' => 'Gresford', 'country_code' => 'GB'],\n            ['name' => 'Rabca', 'country_code' => 'SK'],\n            ['name' => 'Aberdeen', 'country_code' => 'US'],\n            ['name' => 'Lagoa do Sitio', 'country_code' => 'BR'],\n            ['name' => 'Sankt Peter in der Au Markt', 'country_code' => 'AT'],\n            ['name' => 'Konstantinovka', 'country_code' => 'RU'],\n            ['name' => 'Diboll', 'country_code' => 'US'],\n            ['name' => 'Hutchinson Island South', 'country_code' => 'US'],\n            ['name' => 'Salto do Itarare', 'country_code' => 'BR'],\n            ['name' => 'Izmorene', 'country_code' => 'MA'],\n            ['name' => 'Wiggensbach', 'country_code' => 'DE'],\n            ['name' => 'Williamston', 'country_code' => 'US'],\n            ['name' => 'Ravena', 'country_code' => 'US'],\n            ['name' => 'Skutec', 'country_code' => 'CZ'],\n            ['name' => 'In Buri', 'country_code' => 'TH'],\n            ['name' => 'San Cristobal Amatlan', 'country_code' => 'MX'],\n            ['name' => 'Ettrick', 'country_code' => 'US'],\n            ['name' => 'Tannum Sands', 'country_code' => 'AU'],\n            ['name' => 'Thatcher', 'country_code' => 'US'],\n            ['name' => 'South Bay', 'country_code' => 'US'],\n            ['name' => 'Hofheim in Unterfranken', 'country_code' => 'DE'],\n            ['name' => 'Grassano', 'country_code' => 'IT'],\n            ['name' => 'Ocean Bluff-Brant Rock', 'country_code' => 'US'],\n            ['name' => 'Boheimkirchen', 'country_code' => 'AT'],\n            ['name' => 'Baselga di Pine', 'country_code' => 'IT'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Timber Pines', 'country_code' => 'US'],\n            ['name' => 'Llangefni', 'country_code' => 'GB'],\n            ['name' => 'West Wendover', 'country_code' => 'US'],\n            ['name' => 'Larsmo', 'country_code' => 'FI'],\n            ['name' => 'Obetz', 'country_code' => 'US'],\n            ['name' => 'Muhlhausen', 'country_code' => 'DE'],\n            ['name' => 'Cristiano Otoni', 'country_code' => 'BR'],\n            ['name' => 'Chipping Sodbury', 'country_code' => 'GB'],\n            ['name' => 'Staroye Shaygovo', 'country_code' => 'RU'],\n            ['name' => 'Douar Oulad Amer Leqliaa', 'country_code' => 'MA'],\n            ['name' => 'Florensac', 'country_code' => 'FR'],\n            ['name' => 'DeWitt', 'country_code' => 'US'],\n            ['name' => 'Ranstadt', 'country_code' => 'DE'],\n            ['name' => 'Ubersee', 'country_code' => 'DE'],\n            ['name' => 'Forchtenberg', 'country_code' => 'DE'],\n            ['name' => 'Aghbar', 'country_code' => 'MA'],\n            ['name' => 'Sawmills', 'country_code' => 'US'],\n            ['name' => 'Paulden', 'country_code' => 'US'],\n            ['name' => 'Newfield', 'country_code' => 'US'],\n            ['name' => 'Shebalino', 'country_code' => 'RU'],\n            ['name' => 'Maetinga', 'country_code' => 'BR'],\n            ['name' => 'Malishka', 'country_code' => 'AM'],\n            ['name' => 'Los Menucos', 'country_code' => 'AR'],\n            ['name' => 'Forcalquier', 'country_code' => 'FR'],\n            ['name' => 'Attica', 'country_code' => 'US'],\n            ['name' => 'Flin Flon', 'country_code' => 'CA'],\n            ['name' => 'Kulsheim', 'country_code' => 'DE'],\n            ['name' => 'Sainte-Marie-aux-Mines', 'country_code' => 'FR'],\n            ['name' => 'Celle Ligure', 'country_code' => 'IT'],\n            ['name' => 'Mount Olive', 'country_code' => 'US'],\n            ['name' => 'Mae Chai', 'country_code' => 'TH'],\n            ['name' => 'Nesvady', 'country_code' => 'SK'],\n            ['name' => 'Boulder Creek', 'country_code' => 'US'],\n            ['name' => 'Weisenberg', 'country_code' => 'US'],\n            ['name' => 'Salmourao', 'country_code' => 'BR'],\n            ['name' => 'Kings Langley', 'country_code' => 'GB'],\n            ['name' => 'Marquina-Jemein', 'country_code' => 'ES'],\n            ['name' => 'Erval Grande', 'country_code' => 'BR'],\n            ['name' => 'Weitramsdorf', 'country_code' => 'DE'],\n            ['name' => 'Tichigan', 'country_code' => 'US'],\n            ['name' => 'Conklin', 'country_code' => 'US'],\n            ['name' => 'Walton', 'country_code' => 'US'],\n            ['name' => 'Severnoye', 'country_code' => 'RU'],\n            ['name' => 'Hampden', 'country_code' => 'US'],\n            ['name' => 'Parker', 'country_code' => 'US'],\n            ['name' => 'Pound Ridge', 'country_code' => 'US'],\n            ['name' => 'Tiszaluc', 'country_code' => 'HU'],\n            ['name' => 'Abuzeydabad', 'country_code' => 'IR'],\n            ['name' => 'Agricolandia', 'country_code' => 'BR'],\n            ['name' => 'Dunlap', 'country_code' => 'US'],\n            ['name' => 'Doffing', 'country_code' => 'US'],\n            ['name' => 'Vedeno', 'country_code' => 'RU'],\n            ['name' => 'Bad Wiessee', 'country_code' => 'DE'],\n            ['name' => 'Fahrenzhausen', 'country_code' => 'DE'],\n            ['name' => 'Vomp', 'country_code' => 'AT'],\n            ['name' => 'Volovets', 'country_code' => 'UA'],\n            ['name' => 'Collegeville', 'country_code' => 'US'],\n            ['name' => 'Zlatitsa', 'country_code' => 'BG'],\n            ['name' => 'Saint-Mars-du-Desert', 'country_code' => 'FR'],\n            ['name' => 'West Pleasant View', 'country_code' => 'US'],\n            ['name' => 'Obersontheim', 'country_code' => 'DE'],\n            ['name' => 'Ninotsminda', 'country_code' => 'GE'],\n            ['name' => 'Bedford', 'country_code' => 'US'],\n            ['name' => 'Villadose', 'country_code' => 'IT'],\n            ['name' => 'Grandwood Park', 'country_code' => 'US'],\n            ['name' => 'La Caniza', 'country_code' => 'ES'],\n            ['name' => 'Creve Coeur', 'country_code' => 'US'],\n            ['name' => 'Sterling', 'country_code' => 'US'],\n            ['name' => 'Muzillac', 'country_code' => 'FR'],\n            ['name' => 'Broadalbin', 'country_code' => 'US'],\n            ['name' => 'Pfeffenhausen', 'country_code' => 'DE'],\n            ['name' => 'North Salem', 'country_code' => 'US'],\n            ['name' => 'Cierny Balog', 'country_code' => 'SK'],\n            ['name' => 'Rehfelde', 'country_code' => 'DE'],\n            ['name' => 'Sangeorgiu de Padure', 'country_code' => 'RO'],\n            ['name' => 'Monheim', 'country_code' => 'DE'],\n            ['name' => 'Zapfendorf', 'country_code' => 'DE'],\n            ['name' => 'Hudson', 'country_code' => 'CA'],\n            ['name' => 'Crawfordville', 'country_code' => 'US'],\n            ['name' => 'Bigoudine', 'country_code' => 'MA'],\n            ['name' => 'Dvory nad Zitavou', 'country_code' => 'SK'],\n            ['name' => 'Ibiquera', 'country_code' => 'BR'],\n            ['name' => 'Maratea', 'country_code' => 'IT'],\n            ['name' => 'Victor Harbor', 'country_code' => 'AU'],\n            ['name' => 'Berdyuzhye', 'country_code' => 'RU'],\n            ['name' => 'Plouigneau', 'country_code' => 'FR'],\n            ['name' => 'Tamboara', 'country_code' => 'BR'],\n            ['name' => 'Lake City', 'country_code' => 'US'],\n            ['name' => 'Erbendorf', 'country_code' => 'DE'],\n            ['name' => 'La Garnache', 'country_code' => 'FR'],\n            ['name' => 'Pornainen', 'country_code' => 'FI'],\n            ['name' => 'Gruissan', 'country_code' => 'FR'],\n            ['name' => 'Gananoque', 'country_code' => 'CA'],\n            ['name' => 'Fezouane', 'country_code' => 'MA'],\n            ['name' => 'Rackwitz', 'country_code' => 'DE'],\n            ['name' => 'Oulad Messaoud', 'country_code' => 'MA'],\n            ['name' => 'River Ridge', 'country_code' => 'US'],\n            ['name' => 'Grigor evka', 'country_code' => 'KG'],\n            ['name' => 'Ochi', 'country_code' => 'JP'],\n            ['name' => 'Peize', 'country_code' => 'NL'],\n            ['name' => 'Marcelino Ramos', 'country_code' => 'BR'],\n            ['name' => 'Felicio dos Santos', 'country_code' => 'BR'],\n            ['name' => 'Erwin', 'country_code' => 'US'],\n            ['name' => 'Crihana Veche', 'country_code' => 'MD'],\n            ['name' => 'Grosse Pointe', 'country_code' => 'US'],\n            ['name' => 'Oerlenbach', 'country_code' => 'DE'],\n            ['name' => 'Cazouls-les-Beziers', 'country_code' => 'FR'],\n            ['name' => 'Zyryanskoye', 'country_code' => 'RU'],\n            ['name' => 'Schwaan', 'country_code' => 'DE'],\n            ['name' => 'Blauvelt', 'country_code' => 'US'],\n            ['name' => 'Maine', 'country_code' => 'US'],\n            ['name' => 'Greene', 'country_code' => 'US'],\n            ['name' => 'Alcala del Valle', 'country_code' => 'ES'],\n            ['name' => 'Brochier', 'country_code' => 'BR'],\n            ['name' => 'Hanamaulu', 'country_code' => 'US'],\n            ['name' => 'Bliss Corner', 'country_code' => 'US'],\n            ['name' => 'Grambling', 'country_code' => 'US'],\n            ['name' => 'San Dionisio del Mar', 'country_code' => 'MX'],\n            ['name' => 'Milisauti', 'country_code' => 'RO'],\n            ['name' => 'Vila Propicio', 'country_code' => 'BR'],\n            ['name' => 'Bitche', 'country_code' => 'FR'],\n            ['name' => 'Krasnyy Kholm', 'country_code' => 'RU'],\n            ['name' => 'Ottawa', 'country_code' => 'US'],\n            ['name' => 'Ebnat-Kappel', 'country_code' => 'CH'],\n            ['name' => 'Las Navas del Marques', 'country_code' => 'ES'],\n            ['name' => 'Birdsboro', 'country_code' => 'US'],\n            ['name' => 'Upper Yoder', 'country_code' => 'US'],\n            ['name' => 'Bristol', 'country_code' => 'US'],\n            ['name' => 'Gameleiras', 'country_code' => 'BR'],\n            ['name' => 'Rafael Fernandes', 'country_code' => 'BR'],\n            ['name' => 'St. Clairsville', 'country_code' => 'US'],\n            ['name' => 'Waterbury', 'country_code' => 'US'],\n            ['name' => 'Ayden', 'country_code' => 'US'],\n            ['name' => 'Russkiy Kameshkir', 'country_code' => 'RU'],\n            ['name' => 'Turriff', 'country_code' => 'GB'],\n            ['name' => 'Combarbala', 'country_code' => 'CL'],\n            ['name' => 'Colebrookdale', 'country_code' => 'US'],\n            ['name' => 'Idrinskoye', 'country_code' => 'RU'],\n            ['name' => 'Margaret', 'country_code' => 'US'],\n            ['name' => 'Condofuri', 'country_code' => 'IT'],\n            ['name' => 'Iznalloz', 'country_code' => 'ES'],\n            ['name' => 'Aetsa', 'country_code' => 'FI'],\n            ['name' => 'Assoro', 'country_code' => 'IT'],\n            ['name' => 'Lenzkirch', 'country_code' => 'DE'],\n            ['name' => 'Colville', 'country_code' => 'US'],\n            ['name' => 'Bierutow', 'country_code' => 'PL'],\n            ['name' => 'Mukhorshibir', 'country_code' => 'RU'],\n            ['name' => 'Tourves', 'country_code' => 'FR'],\n            ['name' => 'Holland', 'country_code' => 'US'],\n            ['name' => 'Beas de Segura', 'country_code' => 'ES'],\n            ['name' => 'Goianorte', 'country_code' => 'BR'],\n            ['name' => 'Ghent', 'country_code' => 'US'],\n            ['name' => 'Marion', 'country_code' => 'US'],\n            ['name' => 'Shibetsu', 'country_code' => 'JP'],\n            ['name' => 'Sumiswald', 'country_code' => 'CH'],\n            ['name' => 'Sievi', 'country_code' => 'FI'],\n            ['name' => 'Primera', 'country_code' => 'US'],\n            ['name' => 'Chester', 'country_code' => 'US'],\n            ['name' => 'Oshamambe', 'country_code' => 'JP'],\n            ['name' => 'Humboldt', 'country_code' => 'US'],\n            ['name' => 'Askola', 'country_code' => 'FI'],\n            ['name' => 'Sergeant Bluff', 'country_code' => 'US'],\n            ['name' => 'Homestead Meadows North', 'country_code' => 'US'],\n            ['name' => 'Lonsee', 'country_code' => 'DE'],\n            ['name' => 'Caturai', 'country_code' => 'BR'],\n            ['name' => 'Freren', 'country_code' => 'DE'],\n            ['name' => 'Japura', 'country_code' => 'BR'],\n            ['name' => 'Spring Valley', 'country_code' => 'US'],\n            ['name' => 'Oberthulba', 'country_code' => 'DE'],\n            ['name' => 'Flagler Beach', 'country_code' => 'US'],\n            ['name' => 'Canutillo', 'country_code' => 'US'],\n            ['name' => 'Rainsville', 'country_code' => 'US'],\n            ['name' => 'Khatukay', 'country_code' => 'RU'],\n            ['name' => 'Brokenhead', 'country_code' => 'CA'],\n            ['name' => 'Saint-Paul', 'country_code' => 'CA'],\n            ['name' => 'Recani', 'country_code' => 'MA'],\n            ['name' => 'Lone Grove', 'country_code' => 'US'],\n            ['name' => 'La Puebla de Almoradiel', 'country_code' => 'ES'],\n            ['name' => 'Penafiel', 'country_code' => 'ES'],\n            ['name' => 'Oliva de la Frontera', 'country_code' => 'ES'],\n            ['name' => 'Silver Hill', 'country_code' => 'US'],\n            ['name' => 'Colona', 'country_code' => 'US'],\n            ['name' => 'Alfandega da Fe', 'country_code' => 'PT'],\n            ['name' => 'Catuti', 'country_code' => 'BR'],\n            ['name' => 'Madre de Deus de Minas', 'country_code' => 'BR'],\n            ['name' => 'Egyek', 'country_code' => 'HU'],\n            ['name' => 'Krauchenwies', 'country_code' => 'DE'],\n            ['name' => 'Negru Voda', 'country_code' => 'RO'],\n            ['name' => 'Halac', 'country_code' => 'TM'],\n            ['name' => 'Joroinen', 'country_code' => 'FI'],\n            ['name' => 'Bab Boudir', 'country_code' => 'MA'],\n            ['name' => 'Valverde', 'country_code' => 'ES'],\n            ['name' => 'Montecastrilli', 'country_code' => 'IT'],\n            ['name' => 'Battlement Mesa', 'country_code' => 'US'],\n            ['name' => 'Post', 'country_code' => 'US'],\n            ['name' => 'Dmitrovsk-Orlovskiy', 'country_code' => 'RU'],\n            ['name' => 'Bowie', 'country_code' => 'US'],\n            ['name' => 'Northumberland', 'country_code' => 'US'],\n            ['name' => 'Spalt', 'country_code' => 'DE'],\n            ['name' => 'McGuire AFB', 'country_code' => 'US'],\n            ['name' => 'Guzolandia', 'country_code' => 'BR'],\n            ['name' => 'Montbard', 'country_code' => 'FR'],\n            ['name' => 'Serra do Navio', 'country_code' => 'BR'],\n            ['name' => 'Carmi', 'country_code' => 'US'],\n            ['name' => 'Paris', 'country_code' => 'US'],\n            ['name' => 'Oberviechtach', 'country_code' => 'DE'],\n            ['name' => 'Lesignano de  Bagni', 'country_code' => 'IT'],\n            ['name' => 'Ilok', 'country_code' => 'HR'],\n            ['name' => 'Kings Park', 'country_code' => 'US'],\n            ['name' => 'Quantico Base', 'country_code' => 'US'],\n            ['name' => 'Mineo', 'country_code' => 'IT'],\n            ['name' => 'Thung Yai', 'country_code' => 'TH'],\n            ['name' => 'Oyer', 'country_code' => 'NO'],\n            ['name' => 'Stara Moravica', 'country_code' => 'RS'],\n            ['name' => 'Gargalianoi', 'country_code' => 'GR'],\n            ['name' => 'Coco', 'country_code' => 'PR'],\n            ['name' => 'Lake', 'country_code' => 'US'],\n            ['name' => 'Salbris', 'country_code' => 'FR'],\n            ['name' => 'Labranzagrande', 'country_code' => 'CO'],\n            ['name' => 'Utica', 'country_code' => 'US'],\n            ['name' => 'Schuylkill Haven', 'country_code' => 'US'],\n            ['name' => 'Lacanau', 'country_code' => 'FR'],\n            ['name' => 'Hollfeld', 'country_code' => 'DE'],\n            ['name' => 'Korpilahti', 'country_code' => 'FI'],\n            ['name' => 'Scott City', 'country_code' => 'US'],\n            ['name' => 'Portland', 'country_code' => 'US'],\n            ['name' => 'Poplar Grove', 'country_code' => 'US'],\n            ['name' => 'Tineg', 'country_code' => 'PH'],\n            ['name' => 'Sao Jose da Varginha', 'country_code' => 'BR'],\n            ['name' => 'Naumburg', 'country_code' => 'DE'],\n            ['name' => 'Phanom', 'country_code' => 'TH'],\n            ['name' => 'Bozhurishte', 'country_code' => 'BG'],\n            ['name' => 'Bevagna', 'country_code' => 'IT'],\n            ['name' => 'Buellton', 'country_code' => 'US'],\n            ['name' => 'Daleville', 'country_code' => 'US'],\n            ['name' => 'Susel', 'country_code' => 'DE'],\n            ['name' => 'Castro de Rey', 'country_code' => 'ES'],\n            ['name' => 'Belleview', 'country_code' => 'US'],\n            ['name' => 'Schuyler Falls', 'country_code' => 'US'],\n            ['name' => 'Denair', 'country_code' => 'US'],\n            ['name' => 'Westlock', 'country_code' => 'CA'],\n            ['name' => 'Bocaina de Minas', 'country_code' => 'BR'],\n            ['name' => 'Cacique Doble', 'country_code' => 'BR'],\n            ['name' => 'Ostrov', 'country_code' => 'RO'],\n            ['name' => 'Highland Lakes', 'country_code' => 'US'],\n            ['name' => 'Johnstown', 'country_code' => 'US'],\n            ['name' => 'Caicara', 'country_code' => 'BR'],\n            ['name' => 'Temiscouata-sur-le-Lac', 'country_code' => 'CA'],\n            ['name' => 'Pojo', 'country_code' => 'FI'],\n            ['name' => 'Dickinson', 'country_code' => 'US'],\n            ['name' => 'Klavdiyevo-Tarasove', 'country_code' => 'UA'],\n            ['name' => 'Turvolandia', 'country_code' => 'BR'],\n            ['name' => 'Sousel', 'country_code' => 'PT'],\n            ['name' => 'South Haven', 'country_code' => 'US'],\n            ['name' => 'Hugo', 'country_code' => 'US'],\n            ['name' => 'Tice', 'country_code' => 'US'],\n            ['name' => 'Jalcomulco', 'country_code' => 'MX'],\n            ['name' => 'Mexico', 'country_code' => 'US'],\n            ['name' => 'Town and Country', 'country_code' => 'US'],\n            ['name' => 'Quinta do Sol', 'country_code' => 'BR'],\n            ['name' => 'Lakeview', 'country_code' => 'US'],\n            ['name' => 'Morganville', 'country_code' => 'US'],\n            ['name' => 'New Burlington', 'country_code' => 'US'],\n            ['name' => 'Mockrehna', 'country_code' => 'DE'],\n            ['name' => 'Bol shoye Boldino', 'country_code' => 'RU'],\n            ['name' => 'Shannon', 'country_code' => 'CA'],\n            ['name' => 'Osoyoos', 'country_code' => 'CA'],\n            ['name' => 'Crucilandia', 'country_code' => 'BR'],\n            ['name' => 'Holbrook', 'country_code' => 'US'],\n            ['name' => 'Four Corners', 'country_code' => 'US'],\n            ['name' => 'Rio Hondo', 'country_code' => 'US'],\n            ['name' => 'Sheldon', 'country_code' => 'US'],\n            ['name' => 'Lyubim', 'country_code' => 'RU'],\n            ['name' => 'North Fond du Lac', 'country_code' => 'US'],\n            ['name' => 'Shelby', 'country_code' => 'US'],\n            ['name' => 'Crestwood', 'country_code' => 'US'],\n            ['name' => 'Middle Paxton', 'country_code' => 'US'],\n            ['name' => 'Whiston', 'country_code' => 'GB'],\n            ['name' => 'Moulay Driss Aghbal', 'country_code' => 'MA'],\n            ['name' => 'Isaccea', 'country_code' => 'RO'],\n            ['name' => 'Jose Raydam', 'country_code' => 'BR'],\n            ['name' => 'Middleton-on-Sea', 'country_code' => 'GB'],\n            ['name' => 'Fox Chapel', 'country_code' => 'US'],\n            ['name' => 'Vinton', 'country_code' => 'US'],\n            ['name' => 'Palestina', 'country_code' => 'BR'],\n            ['name' => 'De Motte', 'country_code' => 'US'],\n            ['name' => 'Silver Springs', 'country_code' => 'US'],\n            ['name' => 'Maplewood', 'country_code' => 'US'],\n            ['name' => 'Laraquete', 'country_code' => 'CL'],\n            ['name' => 'Chaiten', 'country_code' => 'CL'],\n            ['name' => 'Glencoe', 'country_code' => 'US'],\n            ['name' => 'Kolochava', 'country_code' => 'UA'],\n            ['name' => 'Hearst', 'country_code' => 'CA'],\n            ['name' => 'West Mead', 'country_code' => 'US'],\n            ['name' => 'Canterbury', 'country_code' => 'US'],\n            ['name' => 'Adams', 'country_code' => 'US'],\n            ['name' => 'Shanor-Northvue', 'country_code' => 'US'],\n            ['name' => 'Dachi', 'country_code' => 'CN'],\n            ['name' => 'Domeikava', 'country_code' => 'LT'],\n            ['name' => 'Tiszaalpar', 'country_code' => 'HU'],\n            ['name' => 'Shipston on Stour', 'country_code' => 'GB'],\n            ['name' => 'Itaja', 'country_code' => 'BR'],\n            ['name' => 'Bella', 'country_code' => 'IT'],\n            ['name' => 'Sao Goncalo do Piaui', 'country_code' => 'BR'],\n            ['name' => 'Massac', 'country_code' => 'US'],\n            ['name' => 'Lower Oxford', 'country_code' => 'US'],\n            ['name' => 'Naganohara', 'country_code' => 'JP'],\n            ['name' => 'Alvaro de Carvalho', 'country_code' => 'BR'],\n            ['name' => 'Munroe Falls', 'country_code' => 'US'],\n            ['name' => 'Saltillo', 'country_code' => 'US'],\n            ['name' => 'Monee', 'country_code' => 'US'],\n            ['name' => 'Imagane', 'country_code' => 'JP'],\n            ['name' => 'Vedra', 'country_code' => 'ES'],\n            ['name' => 'Agnone', 'country_code' => 'IT'],\n            ['name' => 'Sao Pedro da Uniao', 'country_code' => 'BR'],\n            ['name' => 'Iowa Falls', 'country_code' => 'US'],\n            ['name' => 'Roseburg North', 'country_code' => 'US'],\n            ['name' => 'Ipigua', 'country_code' => 'BR'],\n            ['name' => 'Congonhas do Norte', 'country_code' => 'BR'],\n            ['name' => 'Buckley', 'country_code' => 'US'],\n            ['name' => 'Nottingham', 'country_code' => 'US'],\n            ['name' => 'Scott', 'country_code' => 'US'],\n            ['name' => 'Gretna', 'country_code' => 'US'],\n            ['name' => 'Candor', 'country_code' => 'US'],\n            ['name' => 'Stewartstown', 'country_code' => 'US'],\n            ['name' => 'Hitra', 'country_code' => 'NO'],\n            ['name' => 'Z.hurivka', 'country_code' => 'UA'],\n            ['name' => 'Bohdanivka', 'country_code' => 'UA'],\n            ['name' => 'Baile Herculane', 'country_code' => 'RO'],\n            ['name' => 'Florai', 'country_code' => 'BR'],\n            ['name' => 'West Hills', 'country_code' => 'US'],\n            ['name' => 'Glen Head', 'country_code' => 'US'],\n            ['name' => 'Cerceda', 'country_code' => 'ES'],\n            ['name' => 'Descoberto', 'country_code' => 'BR'],\n            ['name' => 'Azrar', 'country_code' => 'MA'],\n            ['name' => 'Clifton', 'country_code' => 'US'],\n            ['name' => 'Pratania', 'country_code' => 'BR'],\n            ['name' => 'Candeleda', 'country_code' => 'ES'],\n            ['name' => 'Offutt AFB', 'country_code' => 'US'],\n            ['name' => 'Berkeley', 'country_code' => 'US'],\n            ['name' => 'Wayne', 'country_code' => 'US'],\n            ['name' => 'Wakefield', 'country_code' => 'US'],\n            ['name' => 'Carver', 'country_code' => 'US'],\n            ['name' => 'Dundee', 'country_code' => 'US'],\n            ['name' => 'North Scituate', 'country_code' => 'US'],\n            ['name' => 'Braunas', 'country_code' => 'BR'],\n            ['name' => 'Montevideo', 'country_code' => 'US'],\n            ['name' => 'Sulphur', 'country_code' => 'US'],\n            ['name' => 'Summit', 'country_code' => 'US'],\n            ['name' => 'Ibertioga', 'country_code' => 'BR'],\n            ['name' => 'Springfield', 'country_code' => 'US'],\n            ['name' => 'Colesville', 'country_code' => 'US'],\n            ['name' => 'Amelia', 'country_code' => 'US'],\n            ['name' => 'Palmeira', 'country_code' => 'BR'],\n            ['name' => 'Juuka', 'country_code' => 'FI'],\n            ['name' => 'Vargem Grande do Rio Pardo', 'country_code' => 'BR'],\n            ['name' => 'Barling', 'country_code' => 'US'],\n            ['name' => 'Krum', 'country_code' => 'US'],\n            ['name' => 'Tolfa', 'country_code' => 'IT'],\n            ['name' => 'Alfred', 'country_code' => 'US'],\n            ['name' => 'Bom Sucesso', 'country_code' => 'BR'],\n            ['name' => 'San Jeronimo Coatlan', 'country_code' => 'MX'],\n            ['name' => 'Uvat', 'country_code' => 'RU'],\n            ['name' => 'Rockingham', 'country_code' => 'US'],\n            ['name' => 'Jericho', 'country_code' => 'US'],\n            ['name' => 'Terryville', 'country_code' => 'US'],\n            ['name' => 'La Crescent', 'country_code' => 'US'],\n            ['name' => 'Piedade dos Gerais', 'country_code' => 'BR'],\n            ['name' => 'Cuparaque', 'country_code' => 'BR'],\n            ['name' => 'Admont', 'country_code' => 'AT'],\n            ['name' => 'Sand', 'country_code' => 'NO'],\n            ['name' => 'Worland', 'country_code' => 'US'],\n            ['name' => 'Olyphant', 'country_code' => 'US'],\n            ['name' => 'Stafford Springs', 'country_code' => 'US'],\n            ['name' => 'Whiskey Creek', 'country_code' => 'US'],\n            ['name' => 'Doney Park', 'country_code' => 'US'],\n            ['name' => 'Glennville', 'country_code' => 'US'],\n            ['name' => 'Sea Cliff', 'country_code' => 'US'],\n            ['name' => 'Lackawaxen', 'country_code' => 'US'],\n            ['name' => 'Jose Boiteux', 'country_code' => 'BR'],\n            ['name' => 'Abbeville', 'country_code' => 'US'],\n            ['name' => 'Muleshoe', 'country_code' => 'US'],\n            ['name' => 'Charlestown', 'country_code' => 'US'],\n            ['name' => 'Chukhloma', 'country_code' => 'RU'],\n            ['name' => 'Deerfield', 'country_code' => 'US'],\n            ['name' => 'Granville', 'country_code' => 'US'],\n            ['name' => 'West Salem', 'country_code' => 'US'],\n            ['name' => 'Mossamedes', 'country_code' => 'BR'],\n            ['name' => 'Guerneville', 'country_code' => 'US'],\n            ['name' => 'Dinapigue', 'country_code' => 'PH'],\n            ['name' => 'Bom Jesus do Tocantins', 'country_code' => 'BR'],\n            ['name' => 'Hawaiian Ocean View', 'country_code' => 'US'],\n            ['name' => 'West Sayville', 'country_code' => 'US'],\n            ['name' => 'Mullins', 'country_code' => 'US'],\n            ['name' => 'Peach Bottom', 'country_code' => 'US'],\n            ['name' => 'Waldoboro', 'country_code' => 'US'],\n            ['name' => 'Swoyersville', 'country_code' => 'US'],\n            ['name' => 'Hoopeston', 'country_code' => 'US'],\n            ['name' => 'Chechelnyk', 'country_code' => 'UA'],\n            ['name' => 'Greenfield', 'country_code' => 'US'],\n            ['name' => 'Hudson', 'country_code' => 'US'],\n            ['name' => 'Ridgeland', 'country_code' => 'US'],\n            ['name' => 'Dwight', 'country_code' => 'US'],\n            ['name' => 'Oak Park Heights', 'country_code' => 'US'],\n            ['name' => 'Gillespie', 'country_code' => 'US'],\n            ['name' => 'Midfield', 'country_code' => 'US'],\n            ['name' => 'Antigonish', 'country_code' => 'CA'],\n            ['name' => 'Igarka', 'country_code' => 'RU'],\n            ['name' => 'Ingham', 'country_code' => 'AU'],\n            ['name' => 'Oranjemund', 'country_code' => 'NA'],\n            ['name' => 'Manjimup', 'country_code' => 'AU'],\n            ['name' => 'Nata', 'country_code' => 'BW'],\n            ['name' => 'Carnarvon', 'country_code' => 'AU'],\n            ['name' => 'Turukhansk', 'country_code' => 'RU'],\n            ['name' => 'Susuman', 'country_code' => 'RU'],\n            ['name' => 'Bagdarin', 'country_code' => 'RU'],\n            ['name' => 'Smithton', 'country_code' => 'AU'],\n            ['name' => 'Svolvaer', 'country_code' => 'NO'],\n            ['name' => 'Narrogin', 'country_code' => 'AU'],\n            ['name' => 'Westport', 'country_code' => 'NZ'],\n            ['name' => 'Perito Moreno', 'country_code' => 'AR'],\n            ['name' => 'Newman', 'country_code' => 'AU'],\n            ['name' => 'Otavi', 'country_code' => 'NA'],\n            ['name' => 'Tepelene', 'country_code' => 'AL'],\n            ['name' => 'Camargo', 'country_code' => 'BO'],\n            ['name' => 'Gobernador Gregores', 'country_code' => 'AR'],\n            ['name' => 'Abra Pampa', 'country_code' => 'AR'],\n            ['name' => 'Pofadder', 'country_code' => 'ZA'],\n            ['name' => 'Victorica', 'country_code' => 'AR'],\n            ['name' => 'La Paz', 'country_code' => 'AR'],\n            ['name' => 'Kyaukpyu', 'country_code' => 'MM'],\n            ['name' => 'Sokolo', 'country_code' => 'ML'],\n            ['name' => 'Merimbula', 'country_code' => 'AU'],\n            ['name' => 'Manica', 'country_code' => 'MZ'],\n            ['name' => 'Katanning', 'country_code' => 'AU'],\n            ['name' => 'Dehiba', 'country_code' => 'TN'],\n            ['name' => 'Comandante Fontana', 'country_code' => 'AR'],\n            ['name' => 'Erseke', 'country_code' => 'AL'],\n            ['name' => 'Weipa', 'country_code' => 'AU'],\n            ['name' => 'Wallaroo', 'country_code' => 'AU'],\n            ['name' => 'Renwick', 'country_code' => 'NZ'],\n            ['name' => 'Mitzic', 'country_code' => 'GA'],\n            ['name' => 'Brus Laguna', 'country_code' => 'HN'],\n            ['name' => 'Corovode', 'country_code' => 'AL'],\n            ['name' => 'Pevek', 'country_code' => 'RU'],\n            ['name' => 'El Maiten', 'country_code' => 'AR'],\n            ['name' => 'Central Coast', 'country_code' => 'AU'],\n            ['name' => 'Karmah an Nuzul', 'country_code' => 'SD'],\n            ['name' => 'Mayumba', 'country_code' => 'GA'],\n            ['name' => 'La Paloma', 'country_code' => 'UY'],\n            ['name' => 'Nautla', 'country_code' => 'MX'],\n            ['name' => 'Finnsnes', 'country_code' => 'NO'],\n            ['name' => 'Sapouy', 'country_code' => 'BF'],\n            ['name' => 'Sicasica', 'country_code' => 'BO'],\n            ['name' => 'Teseney', 'country_code' => 'ER'],\n            ['name' => 'Ulaan-Uul', 'country_code' => 'MN'],\n            ['name' => 'Yomou', 'country_code' => 'GN'],\n            ['name' => 'Lavumisa', 'country_code' => 'SZ'],\n            ['name' => 'Proserpine', 'country_code' => 'AU'],\n            ['name' => 'Port Douglas', 'country_code' => 'AU'],\n            ['name' => 'Baltasar Brum', 'country_code' => 'UY'],\n            ['name' => 'Clare', 'country_code' => 'AU'],\n            ['name' => 'Tom Price', 'country_code' => 'AU'],\n            ['name' => 'Hokitika', 'country_code' => 'NZ'],\n            ['name' => 'Kirkenes', 'country_code' => 'NO'],\n            ['name' => 'Te Anau', 'country_code' => 'NZ'],\n            ['name' => 'Santa Barbara', 'country_code' => 'CL'],\n            ['name' => 'Srednekolymsk', 'country_code' => 'RU'],\n            ['name' => 'Magdalena', 'country_code' => 'BO'],\n            ['name' => 'Zhigansk', 'country_code' => 'RU'],\n            ['name' => 'Charleville', 'country_code' => 'AU'],\n            ['name' => 'Sebba', 'country_code' => 'BF'],\n            ['name' => 'Mopipi', 'country_code' => 'BW'],\n            ['name' => 'Donegal', 'country_code' => 'IE'],\n            ['name' => 'Mezen', 'country_code' => 'RU'],\n            ['name' => 'Caballococha', 'country_code' => 'PE'],\n            ['name' => 'Teeli', 'country_code' => 'RU'],\n            ['name' => 'Sinnamary', 'country_code' => 'GF'],\n            ['name' => 'Cloncurry', 'country_code' => 'AU'],\n            ['name' => 'Bordertown', 'country_code' => 'AU'],\n            ['name' => 'Aigua', 'country_code' => 'UY'],\n            ['name' => 'Mkokotoni', 'country_code' => 'TZ'],\n            ['name' => 'Buur Gaabo', 'country_code' => 'SO'],\n            ['name' => 'Karungu', 'country_code' => 'KE'],\n            ['name' => 'Mangbwalu', 'country_code' => 'CD'],\n            ['name' => 'I-n-Amguel', 'country_code' => 'DZ'],\n            ['name' => 'Longreach', 'country_code' => 'AU'],\n            ['name' => 'Merredin', 'country_code' => 'AU'],\n            ['name' => 'Samaipata', 'country_code' => 'BO'],\n            ['name' => 'Padilla', 'country_code' => 'BO'],\n            ['name' => 'Pampa del Infierno', 'country_code' => 'AR'],\n            ['name' => 'Kailu', 'country_code' => 'CN'],\n            ['name' => 'Urubamba', 'country_code' => 'PE'],\n            ['name' => 'Hlatikulu', 'country_code' => 'SZ'],\n            ['name' => 'Rio Mayo', 'country_code' => 'AR'],\n            ['name' => 'Cochrane', 'country_code' => 'CL'],\n            ['name' => 'Puerto Villamil', 'country_code' => 'EC'],\n            ['name' => 'Saint-Georges', 'country_code' => 'GF'],\n            ['name' => 'Scottsdale', 'country_code' => 'AU'],\n            ['name' => 'Rorvik', 'country_code' => 'NO'],\n            ['name' => 'Isafjordhur', 'country_code' => 'IS'],\n            ['name' => 'Bourke', 'country_code' => 'AU'],\n            ['name' => 'Chumbicha', 'country_code' => 'AR'],\n            ['name' => 'Huasco', 'country_code' => 'CL'],\n            ['name' => 'Severo-Kuril sk', 'country_code' => 'RU'],\n            ['name' => 'Nauta', 'country_code' => 'PE'],\n            ['name' => 'Exmouth', 'country_code' => 'AU'],\n            ['name' => 'Queenstown', 'country_code' => 'AU'],\n            ['name' => 'Tarabuco', 'country_code' => 'BO'],\n            ['name' => 'Baures', 'country_code' => 'BO'],\n            ['name' => 'Al  Alamayn', 'country_code' => 'EG'],\n            ['name' => 'El Dorado', 'country_code' => 'VE'],\n            ['name' => 'Hofn', 'country_code' => 'IS'],\n            ['name' => 'Boffa', 'country_code' => 'GN'],\n            ['name' => 'Dondo', 'country_code' => 'AO'],\n            ['name' => 'Jurado', 'country_code' => 'CO'],\n            ['name' => 'Coroico', 'country_code' => 'BO'],\n            ['name' => 'Egilsstadhir', 'country_code' => 'IS'],\n            ['name' => 'Mount Barker', 'country_code' => 'AU'],\n            ['name' => 'Saskylakh', 'country_code' => 'RU'],\n            ['name' => 'Lehututu', 'country_code' => 'BW'],\n            ['name' => 'Roura', 'country_code' => 'GF'],\n            ['name' => 'Sorata', 'country_code' => 'BO'],\n            ['name' => 'Plumtree', 'country_code' => 'ZW'],\n            ['name' => 'Kaikoura', 'country_code' => 'NZ'],\n            ['name' => 'Katwe', 'country_code' => 'UG'],\n            ['name' => 'Alexander Bay', 'country_code' => 'ZA'],\n            ['name' => 'Mejillones', 'country_code' => 'CL'],\n            ['name' => 'Wagin', 'country_code' => 'AU'],\n            ['name' => 'Tasiilaq', 'country_code' => 'GL'],\n            ['name' => 'Kingston South East', 'country_code' => 'AU'],\n            ['name' => 'Tumby Bay', 'country_code' => 'AU'],\n            ['name' => 'Borgarnes', 'country_code' => 'IS'],\n            ['name' => 'Qasigiannguit', 'country_code' => 'GL'],\n            ['name' => 'Puerto Williams', 'country_code' => 'CL'],\n            ['name' => 'Novyy Port', 'country_code' => 'RU'],\n            ['name' => 'Kalbarri', 'country_code' => 'AU'],\n            ['name' => 'Nokaneng', 'country_code' => 'BW'],\n            ['name' => 'Port Denison', 'country_code' => 'AU'],\n            ['name' => 'Penola', 'country_code' => 'AU'],\n            ['name' => 'Artemovsk', 'country_code' => 'RU'],\n            ['name' => 'Streaky Bay', 'country_code' => 'AU'],\n            ['name' => 'Cuevo', 'country_code' => 'BO'],\n            ['name' => 'Qaanaaq', 'country_code' => 'GL'],\n            ['name' => 'Halls Creek', 'country_code' => 'AU'],\n            ['name' => 'Trancas', 'country_code' => 'AR'],\n            ['name' => 'Uummannaq', 'country_code' => 'GL'],\n            ['name' => 'Peterborough', 'country_code' => 'AU'],\n            ['name' => 'Alto Rio Senguer', 'country_code' => 'AR'],\n            ['name' => 'Sierra Colorada', 'country_code' => 'AR'],\n            ['name' => 'Iracoubo', 'country_code' => 'GF'],\n            ['name' => 'Ouyen', 'country_code' => 'AU'],\n            ['name' => 'Chibemba', 'country_code' => 'AO'],\n            ['name' => 'Tajarhi', 'country_code' => 'LY'],\n            ['name' => 'Katherine', 'country_code' => 'AU'],\n            ['name' => 'Lokwabe', 'country_code' => 'BW'],\n            ['name' => 'Chibia', 'country_code' => 'AO'],\n            ['name' => 'Paamiut', 'country_code' => 'GL'],\n            ['name' => 'Barcaldine', 'country_code' => 'AU'],\n            ['name' => 'Tsau', 'country_code' => 'BW'],\n            ['name' => 'Tarutung', 'country_code' => 'ID'],\n            ['name' => 'Nakhodka', 'country_code' => 'RU'],\n            ['name' => 'Jaque', 'country_code' => 'PA'],\n            ['name' => 'Ourense', 'country_code' => 'ES'],\n            ['name' => 'Lavrentiya', 'country_code' => 'RU'],\n            ['name' => 'Cowell', 'country_code' => 'AU'],\n            ['name' => 'Principe da Beira', 'country_code' => 'BR'],\n            ['name' => 'Meningie', 'country_code' => 'AU'],\n            ['name' => 'Las Lajas', 'country_code' => 'AR'],\n            ['name' => 'Upernavik', 'country_code' => 'GL'],\n            ['name' => 'Hughenden', 'country_code' => 'AU'],\n            ['name' => 'Verkhoyansk', 'country_code' => 'RU'],\n            ['name' => 'Meekatharra', 'country_code' => 'AU'],\n            ['name' => 'Uad Damran', 'country_code' => 'MA'],\n            ['name' => 'Yulara', 'country_code' => 'AU'],\n            ['name' => 'Wyndham', 'country_code' => 'AU'],\n            ['name' => 'Susques', 'country_code' => 'AR'],\n            ['name' => 'Chumikan', 'country_code' => 'RU'],\n            ['name' => 'Roebourne', 'country_code' => 'AU'],\n            ['name' => 'Yelimane', 'country_code' => 'ML'],\n            ['name' => 'Kaupanger', 'country_code' => 'NO'],\n            ['name' => 'Tunduru', 'country_code' => 'TZ'],\n            ['name' => 'Bicheno', 'country_code' => 'AU'],\n            ['name' => 'Kullorsuaq', 'country_code' => 'GL'],\n            ['name' => 'Winton', 'country_code' => 'AU'],\n            ['name' => 'Oatlands', 'country_code' => 'AU'],\n            ['name' => 'Godhavn', 'country_code' => 'GL'],\n            ['name' => 'Leonora', 'country_code' => 'AU'],\n            ['name' => 'Gingin', 'country_code' => 'AU'],\n            ['name' => 'Ayan', 'country_code' => 'RU'],\n            ['name' => 'Wilcannia', 'country_code' => 'AU'],\n            ['name' => 'Onslow', 'country_code' => 'AU'],\n            ['name' => 'Laverton', 'country_code' => 'AU'],\n            ['name' => 'Morawa', 'country_code' => 'AU'],\n            ['name' => 'Southern Cross', 'country_code' => 'AU'],\n            ['name' => 'Omolon', 'country_code' => 'RU'],\n            ['name' => 'Linxi', 'country_code' => 'CN'],\n            ['name' => 'Comallo', 'country_code' => 'AR'],\n            ['name' => 'Norseman', 'country_code' => 'AU'],\n            ['name' => 'Ravensthorpe', 'country_code' => 'AU'],\n            ['name' => 'Eidsvold', 'country_code' => 'AU'],\n            ['name' => 'Pannawonica', 'country_code' => 'AU'],\n            ['name' => 'Rodeo', 'country_code' => 'AR'],\n            ['name' => 'Ubombo', 'country_code' => 'ZA'],\n            ['name' => 'Kimba', 'country_code' => 'AU'],\n            ['name' => 'Peterborough', 'country_code' => 'GB'],\n            ['name' => 'Mount Magnet', 'country_code' => 'AU'],\n            ['name' => 'Three Springs', 'country_code' => 'AU'],\n            ['name' => 'Uelen', 'country_code' => 'RU'],\n            ['name' => 'Theodore', 'country_code' => 'AU'],\n            ['name' => 'Gastre', 'country_code' => 'AR'],\n            ['name' => 'Tinogasta', 'country_code' => 'AR'],\n            ['name' => 'Halfmoon Bay', 'country_code' => 'NZ'],\n            ['name' => 'Lemsid', 'country_code' => 'MA'],\n            ['name' => 'Mikhalkino', 'country_code' => 'RU'],\n            ['name' => 'Lasserre', 'country_code' => 'GP'],\n            ['name' => 'Scoresbysund', 'country_code' => 'GL'],\n            ['name' => 'Telsen', 'country_code' => 'AR'],\n            ['name' => 'Karumba', 'country_code' => 'AU'],\n            ['name' => 'Richmond', 'country_code' => 'AU'],\n            ['name' => 'Andamooka', 'country_code' => 'AU'],\n            ['name' => 'Georgetown', 'country_code' => 'AU'],\n            ['name' => 'Xangongo', 'country_code' => 'AO'],\n            ['name' => 'Boulia', 'country_code' => 'AU'],\n            ['name' => 'Espungabera', 'country_code' => 'MZ'],\n            ['name' => 'Adelaide River', 'country_code' => 'AU'],\n            ['name' => 'Burketown', 'country_code' => 'AU'],\n            ['name' => 'Progress', 'country_code' => 'RU'],\n            ['name' => 'Kairaki', 'country_code' => 'NZ'],\n            ['name' => 'Ivanhoe', 'country_code' => 'AU'],\n            ['name' => 'Nimule', 'country_code' => 'SS'],\n            ['name' => 'Thargomindah', 'country_code' => 'AU'],\n            ['name' => 'Pine Creek', 'country_code' => 'AU'],\n            ['name' => 'Ikela', 'country_code' => 'CD'],\n            ['name' => 'Cazombo', 'country_code' => 'AO'],\n            ['name' => 'Shoyna', 'country_code' => 'RU'],\n            ['name' => 'Enurmino', 'country_code' => 'RU'],\n            ['name' => 'Timbedgha', 'country_code' => 'MR'],\n            ['name' => 'Greytown', 'country_code' => 'NI'],\n            ['name' => 'Camooweal', 'country_code' => 'AU'],\n            ['name' => 'Vilankulo', 'country_code' => 'MZ'],\n            ['name' => 'Quipungo', 'country_code' => 'AO'],\n            ['name' => 'Sayhut', 'country_code' => 'YE'],\n            ['name' => 'Korf', 'country_code' => 'RU'],\n            ['name' => 'La Esmeralda', 'country_code' => 'VE'],\n            ['name' => 'Birdsville', 'country_code' => 'AU'],\n            ['name' => 'Bedourie', 'country_code' => 'AU'],\n            ['name' => 'Windorah', 'country_code' => 'AU'],\n            ['name' => 'Punta Prieta', 'country_code' => 'MX'],\n            ['name' => 'Al  Uqaylah', 'country_code' => 'LY'],\n            ['name' => 'Ituni', 'country_code' => 'GY'],\n            ['name' => 'Southend', 'country_code' => 'GB'],\n            ['name' => 'Kovda', 'country_code' => 'RU'],\n            ['name' => 'Kingoonya', 'country_code' => 'AU'],\n            ['name' => 'Hodrogo', 'country_code' => 'MN'],\n            ['name' => 'Tiyerbes', 'country_code' => 'RU'],\n            ['name' => 'Ust -Nyukzha', 'country_code' => 'RU'],\n            ['name' => 'Chegga', 'country_code' => 'MR'],\n            ['name' => 'Zhilinda', 'country_code' => 'RU'],\n            ['name' => 'Ust -Olenek', 'country_code' => 'RU'],\n            ['name' => 'Olenek', 'country_code' => 'RU'],\n            ['name' => 'Ambarchik', 'country_code' => 'RU'],\n            ['name' => 'Logashkino', 'country_code' => 'RU'],\n            ['name' => 'Bolsward', 'country_code' => 'NL'],\n            ['name' => 'Mazoe', 'country_code' => 'ZW'],\n            ['name' => 'Al Qurayyat', 'country_code' => 'SA'],\n            ['name' => 'Yueyaquan', 'country_code' => 'CN'],\n            ['name' => 'Gamba', 'country_code' => 'GA'],\n            ['name' => 'Jixian', 'country_code' => 'CN'],\n            ['name' => 'Ksar Oulad Azzouz', 'country_code' => 'MA'],\n            ['name' => 'Qarabalyq', 'country_code' => 'KZ'],\n            ['name' => 'Mandritsara', 'country_code' => 'MG'],\n            ['name' => 'Lakha Nevre', 'country_code' => 'RU'],\n            ['name' => 'Olmos', 'country_code' => 'PE'],\n            ['name' => 'Dangcheng', 'country_code' => 'CN'],\n            ['name' => 'Xiba', 'country_code' => 'CN'],\n            ['name' => 'Shiyuan', 'country_code' => 'CN'],\n            ['name' => 'Zengjiaba', 'country_code' => 'CN'],\n            ['name' => 'Aqadyr', 'country_code' => 'KZ'],\n            ['name' => 'Sembe', 'country_code' => 'CG'],\n            ['name' => 'Tounfafi', 'country_code' => 'NE'],\n            ['name' => 'Xiada', 'country_code' => 'CN'],\n            ['name' => 'Bou Zemou', 'country_code' => 'MA'],\n            ['name' => 'Sultan-Yangiyurt', 'country_code' => 'RU'],\n            ['name' => 'Dombarovskiy', 'country_code' => 'RU'],\n            ['name' => 'Novogagatli', 'country_code' => 'RU'],\n            ['name' => 'Igrim', 'country_code' => 'RU'],\n            ['name' => 'Soldato-Aleksandrovskoye', 'country_code' => 'RU'],\n            ['name' => 'Zhangping', 'country_code' => 'CN'],\n            ['name' => 'Pedro Luro', 'country_code' => 'AR'],\n            ['name' => 'Benbutucun', 'country_code' => 'CN'],\n            ['name' => 'Douar Oulad Bouziane', 'country_code' => 'MA'],\n            ['name' => 'Chechen-Aul', 'country_code' => 'RU'],\n            ['name' => 'Weerselo', 'country_code' => 'NL'],\n            ['name' => 'Moisei', 'country_code' => 'RO'],\n            ['name' => 'Ban Kham Pom', 'country_code' => 'TH'],\n            ['name' => 'Douar El Mellaliyine', 'country_code' => 'MA'],\n            ['name' => 'Bandio', 'country_code' => 'NE'],\n            ['name' => 'Mikhaylovskoye', 'country_code' => 'RU'],\n            ['name' => 'Saumalkol', 'country_code' => 'KZ'],\n            ['name' => 'Xiangping', 'country_code' => 'CN'],\n            ['name' => 'Monte Cristo', 'country_code' => 'AR'],\n            ['name' => 'Kawara', 'country_code' => 'NE'],\n            ['name' => 'Leichi', 'country_code' => 'CN'],\n            ['name' => 'Sholaqqorghan', 'country_code' => 'KZ'],\n            ['name' => 'Podstepki', 'country_code' => 'RU'],\n            ['name' => 'Ust -Nera', 'country_code' => 'RU'],\n            ['name' => 'Dazhuangzi', 'country_code' => 'CN'],\n            ['name' => 'Vinsady', 'country_code' => 'RU'],\n            ['name' => 'Jumla', 'country_code' => 'NP'],\n            ['name' => 'Coatetelco', 'country_code' => 'MX'],\n            ['name' => 'Ixtapa Zihuatanejo', 'country_code' => 'MX'],\n            ['name' => 'Shar', 'country_code' => 'KZ'],\n            ['name' => 'Mandishah', 'country_code' => 'EG'],\n            ['name' => 'Liesti', 'country_code' => 'RO'],\n            ['name' => 'Qashyr', 'country_code' => 'KZ'],\n            ['name' => 'Daping', 'country_code' => 'CN'],\n            ['name' => 'Yanchep', 'country_code' => 'AU'],\n            ['name' => 'Zhangaozen', 'country_code' => 'KZ'],\n            ['name' => 'Toulou', 'country_code' => 'NE'],\n            ['name' => 'Marrupa', 'country_code' => 'MZ'],\n            ['name' => 'Verkhniye Achaluki', 'country_code' => 'RU'],\n            ['name' => 'Gidan Ider', 'country_code' => 'NE'],\n            ['name' => 'Al Quway iyah', 'country_code' => 'SA'],\n            ['name' => 'Marginea', 'country_code' => 'RO'],\n            ['name' => 'Nerubaiske', 'country_code' => 'UA'],\n            ['name' => 'Chermen', 'country_code' => 'RU'],\n            ['name' => 'Vicam Pueblo', 'country_code' => 'MX'],\n            ['name' => 'Zhujiagua', 'country_code' => 'CN'],\n            ['name' => 'Corman Park No. 344', 'country_code' => 'CA'],\n            ['name' => 'Aqsu', 'country_code' => 'KZ'],\n            ['name' => 'Justiniano Posse', 'country_code' => 'AR'],\n            ['name' => 'Elin-Yurt', 'country_code' => 'RU'],\n            ['name' => 'Ban Tham', 'country_code' => 'TH'],\n            ['name' => 'Ban Pa Lu Ru', 'country_code' => 'TH'],\n            ['name' => 'Alougoum', 'country_code' => 'MA'],\n            ['name' => 'Mihail Kogalniceanu', 'country_code' => 'RO'],\n            ['name' => 'Masindi Port', 'country_code' => 'UG'],\n            ['name' => 'Hukou', 'country_code' => 'CN'],\n            ['name' => 'Ivanivka', 'country_code' => 'UA'],\n            ['name' => 'Olovyannaya', 'country_code' => 'RU'],\n            ['name' => 'Baili', 'country_code' => 'CN'],\n            ['name' => 'Qarqaraly', 'country_code' => 'KZ'],\n            ['name' => 'Khomutovo', 'country_code' => 'RU'],\n            ['name' => 'Sarmakovo', 'country_code' => 'RU'],\n            ['name' => 'Putina', 'country_code' => 'PE'],\n            ['name' => 'Happy Valley', 'country_code' => 'CA'],\n            ['name' => 'Borcea', 'country_code' => 'RO'],\n            ['name' => 'Oldeani', 'country_code' => 'TZ'],\n            ['name' => 'Ban Banlang', 'country_code' => 'TH'],\n            ['name' => 'Ban Huai Mai', 'country_code' => 'TH'],\n            ['name' => 'Grabovo', 'country_code' => 'RU'],\n            ['name' => 'Afumati', 'country_code' => 'RO'],\n            ['name' => 'Guazhoucun', 'country_code' => 'CN'],\n            ['name' => 'Qusmuryn', 'country_code' => 'KZ'],\n            ['name' => 'Staraya Sunzha', 'country_code' => 'RU'],\n            ['name' => 'Kontcha', 'country_code' => 'CM'],\n            ['name' => 'Matarka', 'country_code' => 'MA'],\n            ['name' => 'Baksanenok', 'country_code' => 'RU'],\n            ['name' => 'Ain Bida', 'country_code' => 'MA'],\n            ['name' => 'Lumina', 'country_code' => 'RO'],\n            ['name' => 'Ch osan-up', 'country_code' => 'KP'],\n            ['name' => 'Ban Pao', 'country_code' => 'TH'],\n            ['name' => 'Benoy-Yurt', 'country_code' => 'RU'],\n            ['name' => 'Iqaluit', 'country_code' => 'CA'],\n            ['name' => 'Kalabo', 'country_code' => 'ZM'],\n            ['name' => 'Velykyi Dalnyk', 'country_code' => 'UA'],\n            ['name' => 'Bansang', 'country_code' => 'GM'],\n            ['name' => 'Baguey', 'country_code' => 'NE'],\n            ['name' => 'Bayghanin', 'country_code' => 'KZ'],\n            ['name' => 'Gucheng', 'country_code' => 'CN'],\n            ['name' => 'Holmestrand', 'country_code' => 'NO'],\n            ['name' => 'Kabardinka', 'country_code' => 'RU'],\n            ['name' => 'Senillosa', 'country_code' => 'AR'],\n            ['name' => 'Morfou', 'country_code' => 'CY'],\n            ['name' => 'Ivanovskoye', 'country_code' => 'RU'],\n            ['name' => 'Birnin Kazoe', 'country_code' => 'NE'],\n            ['name' => 'Tranqueras', 'country_code' => 'UY'],\n            ['name' => 'Sipoteni', 'country_code' => 'MD'],\n            ['name' => 'Neiafu', 'country_code' => 'TO'],\n            ['name' => 'Laguna Larga', 'country_code' => 'AR'],\n            ['name' => 'Yaama', 'country_code' => 'NE'],\n            ['name' => 'Luan Chau', 'country_code' => 'VN'],\n            ['name' => 'Sierra Grande', 'country_code' => 'AR'],\n            ['name' => 'Mzizal', 'country_code' => 'MA'],\n            ['name' => 'Kurush', 'country_code' => 'RU'],\n            ['name' => 'Basing', 'country_code' => 'GB'],\n            ['name' => 'Osakarovka', 'country_code' => 'KZ'],\n            ['name' => 'Bossembele', 'country_code' => 'CF'],\n            ['name' => 'Dalakovo', 'country_code' => 'RU'],\n            ['name' => 'Peterculter', 'country_code' => 'GB'],\n            ['name' => 'Nkob', 'country_code' => 'MA'],\n            ['name' => 'Ban Bua Ngam', 'country_code' => 'TH'],\n            ['name' => 'Hafendorf', 'country_code' => 'AT'],\n            ['name' => 'Bestobe', 'country_code' => 'KZ'],\n            ['name' => 'Tobyl', 'country_code' => 'KZ'],\n            ['name' => 'Dumbraveni', 'country_code' => 'RO'],\n            ['name' => 'Okondja', 'country_code' => 'GA'],\n            ['name' => 'Santa Rosa', 'country_code' => 'AR'],\n            ['name' => 'Berdakel', 'country_code' => 'RU'],\n            ['name' => 'Sichon', 'country_code' => 'TH'],\n            ['name' => 'Brownsburg', 'country_code' => 'CA'],\n            ['name' => 'Dafawa', 'country_code' => 'NE'],\n            ['name' => 'Ban Karaket', 'country_code' => 'TH'],\n            ['name' => 'Datian', 'country_code' => 'CN'],\n            ['name' => 'Taza', 'country_code' => 'NE'],\n            ['name' => 'Zambezi', 'country_code' => 'ZM'],\n            ['name' => 'Dosey', 'country_code' => 'NE'],\n            ['name' => 'Guanzhuang', 'country_code' => 'CN'],\n            ['name' => 'Angoul Denya', 'country_code' => 'NE'],\n            ['name' => 'Melekeok', 'country_code' => 'PW'],\n            ['name' => 'Rio Primero', 'country_code' => 'AR'],\n            ['name' => 'La Punta', 'country_code' => 'CL'],\n            ['name' => 'Quellon', 'country_code' => 'CL'],\n            ['name' => 'Staryy Cherek', 'country_code' => 'RU'],\n            ['name' => 'Bghaghza', 'country_code' => 'MA'],\n            ['name' => 'Azitan', 'country_code' => 'CN'],\n            ['name' => 'Nicoadala', 'country_code' => 'MZ'],\n            ['name' => 'Sidi Bettach', 'country_code' => 'MA'],\n            ['name' => 'Yangjiagetai', 'country_code' => 'CN'],\n            ['name' => 'Ban Kamphuan', 'country_code' => 'TH'],\n            ['name' => 'Dovhe', 'country_code' => 'UA'],\n            ['name' => 'Psygansu', 'country_code' => 'RU'],\n            ['name' => 'Karibib', 'country_code' => 'NA'],\n            ['name' => 'Toubout', 'country_code' => 'NE'],\n            ['name' => 'Ban Wang Kalang', 'country_code' => 'TH'],\n            ['name' => 'Zholymbet', 'country_code' => 'KZ'],\n            ['name' => 'Tuzla', 'country_code' => 'RO'],\n            ['name' => 'Nova Maiachka', 'country_code' => 'UA'],\n            ['name' => 'Supsekh', 'country_code' => 'RU'],\n            ['name' => 'Outerbat', 'country_code' => 'MA'],\n            ['name' => 'Velyki Komiaty', 'country_code' => 'UA'],\n            ['name' => 'Laba', 'country_code' => 'NE'],\n            ['name' => 'Levokumka', 'country_code' => 'RU'],\n            ['name' => 'Moussadeye', 'country_code' => 'NE'],\n            ['name' => 'Golfito', 'country_code' => 'CR'],\n            ['name' => 'Khandyga', 'country_code' => 'RU'],\n            ['name' => 'Taouz', 'country_code' => 'MA'],\n            ['name' => 'Beni Khaled', 'country_code' => 'MA'],\n            ['name' => 'Rozsoshentsi', 'country_code' => 'UA'],\n            ['name' => 'Saddina', 'country_code' => 'MA'],\n            ['name' => 'Sadova', 'country_code' => 'RO'],\n            ['name' => 'Lozuvatka', 'country_code' => 'UA'],\n            ['name' => 'Kurumoch', 'country_code' => 'RU'],\n            ['name' => 'Bakin Birji I', 'country_code' => 'NE'],\n            ['name' => 'Dagou', 'country_code' => 'CN'],\n            ['name' => 'Domna', 'country_code' => 'RU'],\n            ['name' => 'Voronovytsia', 'country_code' => 'UA'],\n            ['name' => 'Saint-Lambert-de-Lauzon', 'country_code' => 'CA'],\n            ['name' => 'Ban Phon Yai', 'country_code' => 'TH'],\n            ['name' => 'Tyourout', 'country_code' => 'NE'],\n            ['name' => 'Sokole', 'country_code' => 'NE'],\n            ['name' => 'Ban Tai', 'country_code' => 'TH'],\n            ['name' => 'Diosig', 'country_code' => 'RO'],\n            ['name' => 'Kubei', 'country_code' => 'UA'],\n            ['name' => 'Muskoka Falls', 'country_code' => 'CA'],\n            ['name' => 'Qazaly', 'country_code' => 'KZ'],\n            ['name' => 'Bile', 'country_code' => 'UA'],\n            ['name' => 'Shechengtan', 'country_code' => 'CN'],\n            ['name' => 'Nasarawa', 'country_code' => 'NE'],\n            ['name' => 'Gilau', 'country_code' => 'RO'],\n            ['name' => 'Vladimirescu', 'country_code' => 'RO'],\n            ['name' => 'Cobadin', 'country_code' => 'RO'],\n            ['name' => 'Adis', 'country_code' => 'MA'],\n            ['name' => 'Vozdvizhenka', 'country_code' => 'RU'],\n            ['name' => 'Bingzhongluo', 'country_code' => 'CN'],\n            ['name' => 'Balotesti', 'country_code' => 'RO'],\n            ['name' => 'Akka Irene', 'country_code' => 'MA'],\n            ['name' => 'Jiyek', 'country_code' => 'CN'],\n            ['name' => 'Bosanci', 'country_code' => 'RO'],\n            ['name' => 'Divnomorskoye', 'country_code' => 'RU'],\n            ['name' => 'Fangjiata', 'country_code' => 'CN'],\n            ['name' => 'Tatarka', 'country_code' => 'RU'],\n            ['name' => 'Peretu', 'country_code' => 'RO'],\n            ['name' => 'Madeta II', 'country_code' => 'NE'],\n            ['name' => 'Garswood', 'country_code' => 'GB'],\n            ['name' => 'Cudalbi', 'country_code' => 'RO'],\n            ['name' => 'San Matias', 'country_code' => 'BO'],\n            ['name' => 'Lydiate', 'country_code' => 'GB'],\n            ['name' => 'Fontanka', 'country_code' => 'UA'],\n            ['name' => 'Belbeji', 'country_code' => 'NE'],\n            ['name' => 'Aouloumal', 'country_code' => 'NE'],\n            ['name' => 'Velikovechnoye', 'country_code' => 'RU'],\n            ['name' => 'Strugi-Krasnyye', 'country_code' => 'RU'],\n            ['name' => 'Tamchen', 'country_code' => 'MX'],\n            ['name' => 'Strejnicu', 'country_code' => 'RO'],\n            ['name' => 'Oum Azza', 'country_code' => 'MA'],\n            ['name' => 'Dysart et al', 'country_code' => 'CA'],\n            ['name' => 'Khurba', 'country_code' => 'RU'],\n            ['name' => 'Kushnytsia', 'country_code' => 'UA'],\n            ['name' => 'Kudryashovskiy', 'country_code' => 'RU'],\n            ['name' => 'Tadighoust', 'country_code' => 'MA'],\n            ['name' => 'Lakkha Nevre', 'country_code' => 'RU'],\n            ['name' => 'Beresford', 'country_code' => 'CA'],\n            ['name' => 'Ban Dong Mafai', 'country_code' => 'TH'],\n            ['name' => 'Remetea', 'country_code' => 'RO'],\n            ['name' => 'Baciu', 'country_code' => 'RO'],\n            ['name' => 'Hamdallay', 'country_code' => 'NE'],\n            ['name' => 'Pattijoki', 'country_code' => 'FI'],\n            ['name' => 'Ndende', 'country_code' => 'GA'],\n            ['name' => 'El Palqui', 'country_code' => 'CL'],\n            ['name' => 'Chemodanovka', 'country_code' => 'RU'],\n            ['name' => 'Ban Chiang', 'country_code' => 'TH'],\n            ['name' => 'Douglas', 'country_code' => 'CA'],\n            ['name' => 'Sandominic', 'country_code' => 'RO'],\n            ['name' => 'Asoudie', 'country_code' => 'NE'],\n            ['name' => 'Ivanovka', 'country_code' => 'RU'],\n            ['name' => 'Umba', 'country_code' => 'RU'],\n            ['name' => 'Ahrarne', 'country_code' => 'UA'],\n            ['name' => 'Sutysky', 'country_code' => 'UA'],\n            ['name' => 'Hollington', 'country_code' => 'GB'],\n            ['name' => 'Sabon Birni', 'country_code' => 'NE'],\n            ['name' => 'Apahida', 'country_code' => 'RO'],\n            ['name' => 'Vicovu de Jos', 'country_code' => 'RO'],\n            ['name' => 'Lea Town', 'country_code' => 'GB'],\n            ['name' => 'Lozova', 'country_code' => 'MD'],\n            ['name' => 'Dindi', 'country_code' => 'NE'],\n            ['name' => 'Barbulesti', 'country_code' => 'RO'],\n            ['name' => 'Plosca', 'country_code' => 'RO'],\n            ['name' => 'Chapaev', 'country_code' => 'KZ'],\n            ['name' => 'Dan Kori', 'country_code' => 'NE'],\n            ['name' => 'Tazovskiy', 'country_code' => 'RU'],\n            ['name' => 'Achikulak', 'country_code' => 'RU'],\n            ['name' => 'General Zaragoza', 'country_code' => 'MX'],\n            ['name' => 'Ban Talat Ko Ta Ba Ru', 'country_code' => 'TH'],\n            ['name' => 'Masalata', 'country_code' => 'NE'],\n            ['name' => 'Shemordan', 'country_code' => 'RU'],\n            ['name' => 'Toudouni', 'country_code' => 'NE'],\n            ['name' => 'Urvan', 'country_code' => 'RU'],\n            ['name' => 'Garadoume', 'country_code' => 'NE'],\n            ['name' => 'Oulad Aissa', 'country_code' => 'MA'],\n            ['name' => 'Kelente', 'country_code' => 'NE'],\n            ['name' => 'Mundybash', 'country_code' => 'RU'],\n            ['name' => 'Zandak', 'country_code' => 'RU'],\n            ['name' => 'Djibale', 'country_code' => 'NE'],\n            ['name' => 'Sokilnyky', 'country_code' => 'UA'],\n            ['name' => 'Ibstock', 'country_code' => 'GB'],\n            ['name' => 'Aiyomojok', 'country_code' => 'CM'],\n            ['name' => 'Feldru', 'country_code' => 'RO'],\n            ['name' => 'Giroc', 'country_code' => 'RO'],\n            ['name' => 'Peris', 'country_code' => 'RO'],\n            ['name' => 'Piggs Peak', 'country_code' => 'SZ'],\n            ['name' => 'Spasskoye', 'country_code' => 'RU'],\n            ['name' => 'Sokur', 'country_code' => 'RU'],\n            ['name' => 'Kamennomostskoye', 'country_code' => 'RU'],\n            ['name' => 'Bouti', 'country_code' => 'NE'],\n            ['name' => 'Kaora Abdou', 'country_code' => 'NE'],\n            ['name' => 'Chernolesskoye', 'country_code' => 'RU'],\n            ['name' => 'Koundoumawa', 'country_code' => 'NE'],\n            ['name' => 'Fderik', 'country_code' => 'MR'],\n            ['name' => 'Soubdou', 'country_code' => 'NE'],\n            ['name' => 'Krym', 'country_code' => 'RU'],\n            ['name' => 'Saal', 'country_code' => 'DE'],\n            ['name' => 'Horonda', 'country_code' => 'UA'],\n            ['name' => 'Presnovka', 'country_code' => 'KZ'],\n            ['name' => 'Kazminskoye', 'country_code' => 'RU'],\n            ['name' => 'General Levalle', 'country_code' => 'AR'],\n            ['name' => 'Tiksi', 'country_code' => 'RU'],\n            ['name' => 'Princeville', 'country_code' => 'CA'],\n            ['name' => 'Perugorria', 'country_code' => 'AR'],\n            ['name' => 'Macea', 'country_code' => 'RO'],\n            ['name' => 'Ruscova', 'country_code' => 'RO'],\n            ['name' => 'Jinshan', 'country_code' => 'CN'],\n            ['name' => 'Oituz', 'country_code' => 'RO'],\n            ['name' => 'Jiajiaping', 'country_code' => 'CN'],\n            ['name' => 'Prigorodnoye', 'country_code' => 'RU'],\n            ['name' => 'Rucar', 'country_code' => 'RO'],\n            ['name' => 'Rodna', 'country_code' => 'RO'],\n            ['name' => 'Kasempa', 'country_code' => 'ZM'],\n            ['name' => 'Altud', 'country_code' => 'RU'],\n            ['name' => 'Riadi Dan Bizo', 'country_code' => 'NE'],\n            ['name' => 'Kugulta', 'country_code' => 'RU'],\n            ['name' => 'Crowsnest Pass', 'country_code' => 'CA'],\n            ['name' => 'Vitomirice', 'country_code' => 'XK'],\n            ['name' => 'Gugesti', 'country_code' => 'RO'],\n            ['name' => 'Vossevangen', 'country_code' => 'NO'],\n            ['name' => 'Benoy', 'country_code' => 'RU'],\n            ['name' => 'Okhotsk', 'country_code' => 'RU'],\n            ['name' => 'Stanthorpe', 'country_code' => 'AU'],\n            ['name' => 'Zoria', 'country_code' => 'UA'],\n            ['name' => 'Souloulou', 'country_code' => 'NE'],\n            ['name' => 'Tsibanobalka', 'country_code' => 'RU'],\n            ['name' => 'Horenka', 'country_code' => 'UA'],\n            ['name' => 'Bullsbrook', 'country_code' => 'AU'],\n            ['name' => 'Rivne', 'country_code' => 'UA'],\n            ['name' => 'Stepanivka', 'country_code' => 'UA'],\n            ['name' => 'Bialet Masse', 'country_code' => 'AR'],\n            ['name' => 'Tash-Dobo', 'country_code' => 'KG'],\n            ['name' => 'Moulela', 'country_code' => 'NE'],\n            ['name' => 'Renzhuangcun', 'country_code' => 'CN'],\n            ['name' => 'Cairima', 'country_code' => 'CN'],\n            ['name' => 'Zawyat Sidi Hamza', 'country_code' => 'MA'],\n            ['name' => 'Hejiachuan', 'country_code' => 'CN'],\n            ['name' => 'Witu', 'country_code' => 'KE'],\n            ['name' => 'Nakoni', 'country_code' => 'NE'],\n            ['name' => 'Motatei', 'country_code' => 'RO'],\n            ['name' => 'Sollom', 'country_code' => 'GB'],\n            ['name' => 'Ait Athmane', 'country_code' => 'MA'],\n            ['name' => 'Tura', 'country_code' => 'RU'],\n            ['name' => 'Prejmer', 'country_code' => 'RO'],\n            ['name' => 'San Quintin', 'country_code' => 'MX'],\n            ['name' => 'Ouadda', 'country_code' => 'CF'],\n            ['name' => 'Yarkovo', 'country_code' => 'RU'],\n            ['name' => 'Gandasamou', 'country_code' => 'NE'],\n            ['name' => 'Linda', 'country_code' => 'RU'],\n            ['name' => 'Sanmucha', 'country_code' => 'CN'],\n            ['name' => 'Sabonkafi', 'country_code' => 'NE'],\n            ['name' => 'Taoyan', 'country_code' => 'CN'],\n            ['name' => 'Russko-Vysotskoye', 'country_code' => 'RU'],\n            ['name' => 'Homocea', 'country_code' => 'RO'],\n            ['name' => 'Cookshire', 'country_code' => 'CA'],\n            ['name' => 'Maieru', 'country_code' => 'RO'],\n            ['name' => 'Jambriji', 'country_code' => 'NE'],\n            ['name' => 'Pavlodarskoe', 'country_code' => 'KZ'],\n            ['name' => 'Zyazikov', 'country_code' => 'RU'],\n            ['name' => 'Mykolayivka', 'country_code' => 'UA'],\n            ['name' => 'Timoulay Izder', 'country_code' => 'MA'],\n            ['name' => 'Arbore', 'country_code' => 'RO'],\n            ['name' => 'Baia', 'country_code' => 'RO'],\n            ['name' => 'Hohenau', 'country_code' => 'PY'],\n            ['name' => 'Komsomol skoye', 'country_code' => 'RU'],\n            ['name' => 'Verkhnerusskiy', 'country_code' => 'RU'],\n            ['name' => 'Damjan', 'country_code' => 'XK'],\n            ['name' => 'Bogoslovka', 'country_code' => 'RU'],\n            ['name' => 'Giarmata', 'country_code' => 'RO'],\n            ['name' => 'Tufesti', 'country_code' => 'RO'],\n            ['name' => 'Jingping', 'country_code' => 'CN'],\n            ['name' => 'Kuba', 'country_code' => 'RU'],\n            ['name' => 'Corund', 'country_code' => 'RO'],\n            ['name' => 'Inkeroinen', 'country_code' => 'FI'],\n            ['name' => 'Torghay', 'country_code' => 'KZ'],\n            ['name' => 'Ez Zinat', 'country_code' => 'MA'],\n            ['name' => 'Tafetchna', 'country_code' => 'MA'],\n            ['name' => 'Otrado-Ol ginskoye', 'country_code' => 'RU'],\n            ['name' => 'Saint-Honore', 'country_code' => 'CA'],\n            ['name' => 'Ban Chiang Klom', 'country_code' => 'TH'],\n            ['name' => 'Baryshevo', 'country_code' => 'RU'],\n            ['name' => 'Malgorou', 'country_code' => 'NE'],\n            ['name' => 'Dan Gona', 'country_code' => 'NE'],\n            ['name' => 'Ban Nam Phong', 'country_code' => 'TH'],\n            ['name' => 'Horodnicu de Sus', 'country_code' => 'RO'],\n            ['name' => 'Fort-Shevchenko', 'country_code' => 'KZ'],\n            ['name' => 'Xiangkhoang', 'country_code' => 'LA'],\n            ['name' => 'San Francisco', 'country_code' => 'MX'],\n            ['name' => 'Straja', 'country_code' => 'RO'],\n            ['name' => 'Yalta', 'country_code' => 'UA'],\n            ['name' => 'Greci', 'country_code' => 'RO'],\n            ['name' => 'Tudora', 'country_code' => 'RO'],\n            ['name' => 'Yablanovo', 'country_code' => 'BG'],\n            ['name' => 'Souk el Had-des Beni-Batao', 'country_code' => 'MA'],\n            ['name' => 'Algeti', 'country_code' => 'GE'],\n            ['name' => 'Na jan', 'country_code' => 'SA'],\n            ['name' => 'Raducaneni', 'country_code' => 'RO'],\n            ['name' => 'Kyrnasivka', 'country_code' => 'UA'],\n            ['name' => 'Chernyshevskiy', 'country_code' => 'RU'],\n            ['name' => 'Ban San', 'country_code' => 'TH'],\n            ['name' => 'Villa del Rosario', 'country_code' => 'PY'],\n            ['name' => 'Rasinari', 'country_code' => 'RO'],\n            ['name' => 'Dayi', 'country_code' => 'CN'],\n            ['name' => 'Burton', 'country_code' => 'CA'],\n            ['name' => 'Paunesti', 'country_code' => 'RO'],\n            ['name' => 'McMinns Lagoon', 'country_code' => 'AU'],\n            ['name' => 'Spallumcheen', 'country_code' => 'CA'],\n            ['name' => 'Konstantinovskoye', 'country_code' => 'RU'],\n            ['name' => 'Biancang', 'country_code' => 'CN'],\n            ['name' => 'Lesnikovo', 'country_code' => 'RU'],\n            ['name' => 'Diambala', 'country_code' => 'NE'],\n            ['name' => 'Draginovo', 'country_code' => 'BG'],\n            ['name' => 'Qasr al Farafirah', 'country_code' => 'EG'],\n            ['name' => 'Nikolo-Pavlovskoye', 'country_code' => 'RU'],\n            ['name' => 'Saint-Henri', 'country_code' => 'CA'],\n            ['name' => 'Ste. Anne', 'country_code' => 'CA'],\n            ['name' => 'Puerto Casado', 'country_code' => 'PY'],\n            ['name' => 'Ust -Kamchatsk', 'country_code' => 'RU'],\n            ['name' => 'Betanzos', 'country_code' => 'BO'],\n            ['name' => 'Sangar', 'country_code' => 'RU'],\n            ['name' => 'Khatanga', 'country_code' => 'RU'],\n            ['name' => 'Brownsweg', 'country_code' => 'SR'],\n            ['name' => 'Al Qasr', 'country_code' => 'EG'],\n            ['name' => 'Saryshaghan', 'country_code' => 'KZ'],\n            ['name' => 'Bekily', 'country_code' => 'MG'],\n            ['name' => 'Batagay', 'country_code' => 'RU'],\n            ['name' => 'San Javier', 'country_code' => 'BO'],\n            ['name' => 'Omsukchan', 'country_code' => 'RU'],\n            ['name' => 'Apolo', 'country_code' => 'BO'],\n            ['name' => 'Novyy Uoyan', 'country_code' => 'RU'],\n            ['name' => 'Bongandanga', 'country_code' => 'CD'],\n            ['name' => 'Quime', 'country_code' => 'BO'],\n            ['name' => 'Araouane', 'country_code' => 'ML'],\n            ['name' => 'Vergara', 'country_code' => 'UY'],\n            ['name' => 'Mbe', 'country_code' => 'CM'],\n            ['name' => 'Shongzhy', 'country_code' => 'KZ'],\n            ['name' => 'Ciudad Cortes', 'country_code' => 'CR'],\n            ['name' => 'P ungsan', 'country_code' => 'KP'],\n            ['name' => 'Vitim', 'country_code' => 'RU'],\n            ['name' => 'Puke', 'country_code' => 'AL'],\n            ['name' => 'Palana', 'country_code' => 'RU'],\n            ['name' => 'Cherskiy', 'country_code' => 'RU'],\n            ['name' => 'Zyryanka', 'country_code' => 'RU'],\n            ['name' => 'De-Kastri', 'country_code' => 'RU'],\n            ['name' => 'Ligonha', 'country_code' => 'MZ'],\n            ['name' => 'Darregueira', 'country_code' => 'AR'],\n            ['name' => 'Bukachacha', 'country_code' => 'RU'],\n            ['name' => 'Ugol nyye Kopi', 'country_code' => 'RU'],\n            ['name' => 'Lukulu', 'country_code' => 'ZM'],\n            ['name' => 'Krasnogorsk', 'country_code' => 'RU'],\n            ['name' => 'Mekambo', 'country_code' => 'GA'],\n            ['name' => 'Arroyos y Esteros', 'country_code' => 'PY'],\n            ['name' => 'Ust -Maya', 'country_code' => 'RU'],\n            ['name' => 'Abai', 'country_code' => 'PY'],\n            ['name' => 'Taoudenni', 'country_code' => 'ML'],\n            ['name' => 'San Lorenzo', 'country_code' => 'BO'],\n            ['name' => 'Saranpaul', 'country_code' => 'RU'],\n            ['name' => 'Villalonga', 'country_code' => 'AR'],\n            ['name' => 'Villa Ygatimi', 'country_code' => 'PY'],\n            ['name' => 'Entre Rios', 'country_code' => 'BO'],\n            ['name' => 'Saudharkrokur', 'country_code' => 'IS'],\n            ['name' => 'Provideniya', 'country_code' => 'RU'],\n            ['name' => 'Chokurdakh', 'country_code' => 'RU'],\n            ['name' => 'Maradah', 'country_code' => 'LY'],\n            ['name' => 'Mariscal Jose Felix Estigarribia', 'country_code' => 'PY'],\n            ['name' => 'Jose Batlle y Ordonez', 'country_code' => 'UY'],\n            ['name' => 'Uspallata', 'country_code' => 'AR'],\n            ['name' => 'Sohano', 'country_code' => 'PG'],\n            ['name' => 'Ceduna', 'country_code' => 'AU'],\n            ['name' => 'Maltahohe', 'country_code' => 'NA'],\n            ['name' => 'Muconda', 'country_code' => 'AO'],\n            ['name' => 'Tolten', 'country_code' => 'CL'],\n            ['name' => 'Mwenga', 'country_code' => 'CD'],\n            ['name' => 'Egvekinot', 'country_code' => 'RU'],\n            ['name' => 'El Manteco', 'country_code' => 'VE'],\n            ['name' => 'Pozo Colorado', 'country_code' => 'PY'],\n            ['name' => 'Evensk', 'country_code' => 'RU'],\n            ['name' => 'Konza', 'country_code' => 'KE'],\n            ['name' => 'Altata', 'country_code' => 'MX'],\n            ['name' => 'Dawwah', 'country_code' => 'OM'],\n            ['name' => 'Taedong', 'country_code' => 'KP'],\n            ['name' => 'Abuna', 'country_code' => 'BR'],\n            ['name' => 'Corocoro', 'country_code' => 'BO'],\n            ['name' => 'Beringovskiy', 'country_code' => 'RU'],\n            ['name' => 'Nasir', 'country_code' => 'SS'],\n            ['name' => 'Labutta', 'country_code' => 'MM'],\n            ['name' => 'Al Jaghbub', 'country_code' => 'LY'],\n            ['name' => 'Omboue', 'country_code' => 'GA'],\n            ['name' => 'Kipili', 'country_code' => 'TZ'],\n            ['name' => 'Manja', 'country_code' => 'MG'],\n            ['name' => 'Ust -Kuyga', 'country_code' => 'RU'],\n            ['name' => 'Eldikan', 'country_code' => 'RU'],\n            ['name' => 'Qardho', 'country_code' => 'SO'],\n            ['name' => 'Nyimba', 'country_code' => 'ZM'],\n            ['name' => 'Fulacunda', 'country_code' => 'GW'],\n            ['name' => 'Lubutu', 'country_code' => 'CD'],\n            ['name' => 'Cangamba', 'country_code' => 'AO'],\n            ['name' => 'Regedor Quissico', 'country_code' => 'MZ'],\n            ['name' => 'Villa Rumipal', 'country_code' => 'AR'],\n            ['name' => 'Nacunday', 'country_code' => 'PY'],\n            ['name' => 'Celeken', 'country_code' => 'TM'],\n            ['name' => 'Buluko', 'country_code' => 'CD'],\n            ['name' => 'San Rafael', 'country_code' => 'BO'],\n            ['name' => 'Capitan Pablo Lagerenza', 'country_code' => 'PY'],\n            ['name' => 'Puerto Acosta', 'country_code' => 'BO'],\n            ['name' => 'Los Blancos', 'country_code' => 'AR'],\n            ['name' => 'Mirbat', 'country_code' => 'OM'],\n            ['name' => 'Klyuchi', 'country_code' => 'RU'],\n            ['name' => 'Besalampy', 'country_code' => 'MG'],\n            ['name' => 'Cacolo', 'country_code' => 'AO'],\n            ['name' => 'General Eugenio A. Garay', 'country_code' => 'PY'],\n            ['name' => 'Daraj', 'country_code' => 'LY'],\n            ['name' => 'Bavaro', 'country_code' => 'DO'],\n            ['name' => 'Luanza', 'country_code' => 'CD'],\n            ['name' => 'Hoskins', 'country_code' => 'PG'],\n            ['name' => 'Calulo', 'country_code' => 'AO'],\n            ['name' => 'Muhembo', 'country_code' => 'BW'],\n            ['name' => 'Yerema', 'country_code' => 'RU'],\n            ['name' => 'Satadougou', 'country_code' => 'ML'],\n            ['name' => 'Dibaya', 'country_code' => 'CD'],\n            ['name' => 'Serebryansk', 'country_code' => 'KZ'],\n            ['name' => 'Zhaltyr', 'country_code' => 'KZ'],\n            ['name' => 'Manily', 'country_code' => 'RU'],\n            ['name' => 'Calatrava', 'country_code' => 'GQ'],\n            ['name' => 'Massangena', 'country_code' => 'MZ'],\n            ['name' => 'Panda', 'country_code' => 'MZ'],\n            ['name' => 'Ypejhu', 'country_code' => 'PY'],\n            ['name' => 'Quilpie', 'country_code' => 'AU'],\n            ['name' => 'Sabaya', 'country_code' => 'BO'],\n            ['name' => 'Chiramba', 'country_code' => 'MZ'],\n            ['name' => 'Mereeg', 'country_code' => 'SO'],\n            ['name' => 'Llica', 'country_code' => 'BO'],\n            ['name' => 'Calenga', 'country_code' => 'AO'],\n            ['name' => 'Dikson', 'country_code' => 'RU'],\n            ['name' => 'Caluula', 'country_code' => 'SO'],\n            ['name' => 'Tournavista', 'country_code' => 'PE'],\n            ['name' => 'Puerto Pinasco', 'country_code' => 'PY'],\n            ['name' => 'Tchitado', 'country_code' => 'AO'],\n            ['name' => 'Yakossi', 'country_code' => 'CF'],\n            ['name' => 'Tmassah', 'country_code' => 'LY'],\n            ['name' => 'Manyoni', 'country_code' => 'TZ'],\n            ['name' => 'Woomera', 'country_code' => 'AU'],\n            ['name' => 'Tasiusaq', 'country_code' => 'GL'],\n            ['name' => 'Sherlovaya Gora', 'country_code' => 'RU'],\n            ['name' => 'Tsavo', 'country_code' => 'KE'],\n            ['name' => 'Nizhneyansk', 'country_code' => 'RU'],\n            ['name' => 'Toconao', 'country_code' => 'CL'],\n            ['name' => 'Balsadero Rio Verde', 'country_code' => 'CL'],\n            ['name' => 'Kanyato', 'country_code' => 'TZ'],\n            ['name' => 'Kulusuk', 'country_code' => 'GL'],\n            ['name' => 'Umm al  Abid', 'country_code' => 'LY'],\n            ['name' => 'Bugrino', 'country_code' => 'RU'],\n            ['name' => 'Put  Lenina', 'country_code' => 'RU'],\n            ['name' => 'Yaupi', 'country_code' => 'EC'],\n            ['name' => 'Amderma', 'country_code' => 'RU'],\n            ['name' => 'Kangersuatsiaq', 'country_code' => 'GL'],\n            ['name' => 'Villa O Higgins', 'country_code' => 'CL'],\n            ['name' => 'Amau', 'country_code' => 'PG'],\n            ['name' => 'Kalima', 'country_code' => 'CD'],\n            ['name' => 'Al Qunfudhah', 'country_code' => 'SA'],\n            ['name' => 'Lusanga', 'country_code' => 'CD'],\n            ['name' => 'Kraulshavn', 'country_code' => 'GL'],\n            ['name' => 'Androka', 'country_code' => 'MG'],\n            ['name' => 'Charana', 'country_code' => 'BO'],\n            ['name' => 'Nichicun', 'country_code' => 'CN'],\n            ['name' => 'Hurdiyo', 'country_code' => 'SO'],\n            ['name' => 'Buton', 'country_code' => 'ID'],\n            ['name' => 'Narsarsuaq', 'country_code' => 'GL'],\n            ['name' => 'Bafwasende', 'country_code' => 'CD'],\n            ['name' => 'Bifoun', 'country_code' => 'GA'],\n            ['name' => 'Il pyrskiy', 'country_code' => 'RU'],\n            ['name' => 'Sharbaqty', 'country_code' => 'KZ'],\n            ['name' => 'Agdam', 'country_code' => 'AZ'],\n            ['name' => 'Savissivik', 'country_code' => 'GL'],\n            ['name' => 'Cuya', 'country_code' => 'CL'],\n            ['name' => 'Villa Martin Colchak', 'country_code' => 'BO'],\n            ['name' => 'Gyda', 'country_code' => 'RU'],\n            ['name' => 'Gueppi', 'country_code' => 'PE'],\n            ['name' => 'Puerto Heath', 'country_code' => 'BO'],\n            ['name' => 'Bir Mogrein', 'country_code' => 'MR'],\n            ['name' => 'Yessey', 'country_code' => 'RU'],\n            ['name' => 'Burubaytal', 'country_code' => 'KZ'],\n            ['name' => 'Mukhomornoye', 'country_code' => 'RU'],\n            ['name' => 'Vorontsovo', 'country_code' => 'RU'],\n            ['name' => 'Grytviken', 'country_code' => 'GS'],\n            ['name' => 'Piso Firme', 'country_code' => 'BO'],\n            ['name' => 'As Sidrah', 'country_code' => 'LY'],\n            ['name' => 'Rocafuerte', 'country_code' => 'PE'],\n            ['name' => 'Peregrebnoye', 'country_code' => 'RU'],\n            ['name' => 'Laryak', 'country_code' => 'RU'],\n            ['name' => 'Lagunas', 'country_code' => 'CL'],\n            ['name' => 'Andoas', 'country_code' => 'PE'],\n            ['name' => 'Puca Urco', 'country_code' => 'PE'],\n            ['name' => 'Zillah', 'country_code' => 'LY'],\n            ['name' => 'Ulkan', 'country_code' => 'RU'],\n            ['name' => 'Barnis', 'country_code' => 'EG'],\n            ['name' => 'Soldado Bartra', 'country_code' => 'PE'],\n            ['name' => 'Strelka', 'country_code' => 'RU'],\n            ['name' => 'Bol sheretsk', 'country_code' => 'RU'],\n            ['name' => 'Karamken', 'country_code' => 'RU'],\n            ['name' => 'Djado', 'country_code' => 'NE'],\n            ['name' => 'Omchak', 'country_code' => 'RU'],\n            ['name' => 'Shalaurova', 'country_code' => 'RU'],\n            ['name' => 'Khorgo', 'country_code' => 'RU'],\n            ['name' => 'Komsa', 'country_code' => 'RU'],\n            ['name' => 'Pakhachi', 'country_code' => 'RU'],\n            ['name' => 'Indiga', 'country_code' => 'RU'],\n            ['name' => 'Sagastyr', 'country_code' => 'RU'],\n            ['name' => 'Chagda', 'country_code' => 'RU'],\n            ['name' => 'Tunguskhaya', 'country_code' => 'RU'],\n            ['name' => 'Podkamennaya Tunguska', 'country_code' => 'RU'],\n            ['name' => 'Siglan', 'country_code' => 'RU'],\n            ['name' => 'Utkholok', 'country_code' => 'RU'],\n            ['name' => 'Varnek', 'country_code' => 'RU'],\n            ['name' => 'Trofimovsk', 'country_code' => 'RU'],\n            ['name' => 'Matochkin Shar', 'country_code' => 'RU'],\n            ['name' => 'Menkerya', 'country_code' => 'RU'],\n            ['name' => 'Khakhar', 'country_code' => 'RU'],\n            ['name' => 'Zvezdnyy', 'country_code' => 'RU'],\n            ['name' => 'Zemlya Bunge', 'country_code' => 'RU'],\n            ['name' => 'Starorybnoye', 'country_code' => 'RU'],\n            ['name' => 'Agapa', 'country_code' => 'RU'],\n            ['name' => 'Tukchi', 'country_code' => 'RU'],\n            ['name' => 'Numto', 'country_code' => 'RU'],\n            ['name' => 'Nord', 'country_code' => 'GL'],\n            ['name' => 'Timmiarmiut', 'country_code' => 'GL'],\n            ['name' => 'Nordvik', 'country_code' => 'RU']\n        ]);\n    }\n}\n"
  },
  {
    "path": "database/seeders/CountriesSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents;\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass CountriesSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     */\n    public function run(): void\n    {\n        //\n        DB::table('countries')->insert([\n            ['code' => 'AF', 'name' => 'Afghanistan', 'order_number' => 1],\n            ['code' => 'AL', 'name' => 'Albania', 'order_number' => 2],\n            ['code' => 'DZ', 'name' => 'Algeria', 'order_number' => 3],\n            ['code' => 'DS', 'name' => 'American Samoa', 'order_number' => 4],\n            ['code' => 'AD', 'name' => 'Andorra', 'order_number' => 5],\n            ['code' => 'AO', 'name' => 'Angola', 'order_number' => 6],\n            ['code' => 'AI', 'name' => 'Anguilla', 'order_number' => 7],\n            ['code' => 'AQ', 'name' => 'Antarctica', 'order_number' => 8],\n            ['code' => 'AG', 'name' => 'Antigua and Barbuda', 'order_number' => 9],\n            ['code' => 'AR', 'name' => 'Argentina', 'order_number' => 10],\n            ['code' => 'AM', 'name' => 'Armenia', 'order_number' => 11],\n            ['code' => 'AW', 'name' => 'Aruba', 'order_number' => 12],\n            ['code' => 'AU', 'name' => 'Australia', 'order_number' => 13],\n            ['code' => 'AT', 'name' => 'Austria', 'order_number' => 14],\n            ['code' => 'AZ', 'name' => 'Azerbaijan', 'order_number' => 15],\n            ['code' => 'BS', 'name' => 'Bahamas', 'order_number' => 16],\n            ['code' => 'BH', 'name' => 'Bahrain', 'order_number' => 17],\n            ['code' => 'BD', 'name' => 'Bangladesh', 'order_number' => 18],\n            ['code' => 'BB', 'name' => 'Barbados', 'order_number' => 19],\n            ['code' => 'BY', 'name' => 'Belarus', 'order_number' => 20],\n            ['code' => 'BE', 'name' => 'Belgium', 'order_number' => 21],\n            ['code' => 'BZ', 'name' => 'Belize', 'order_number' => 22],\n            ['code' => 'BJ', 'name' => 'Benin', 'order_number' => 23],\n            ['code' => 'BM', 'name' => 'Bermuda', 'order_number' => 24],\n            ['code' => 'BT', 'name' => 'Bhutan', 'order_number' => 25],\n            ['code' => 'BO', 'name' => 'Bolivia', 'order_number' => 26],\n            ['code' => 'BA', 'name' => 'Bosnia and Herzegovina', 'order_number' => 27],\n            ['code' => 'BW', 'name' => 'Botswana', 'order_number' => 28],\n            ['code' => 'BV', 'name' => 'Bouvet Island', 'order_number' => 29],\n            ['code' => 'BR', 'name' => 'Brazil', 'order_number' => 30],\n            ['code' => 'IO', 'name' => 'British Indian Ocean Territory', 'order_number' => 31],\n            ['code' => 'BN', 'name' => 'Brunei Darussalam', 'order_number' => 32],\n            ['code' => 'BG', 'name' => 'Bulgaria', 'order_number' => 33],\n            ['code' => 'BF', 'name' => 'Burkina Faso', 'order_number' => 34],\n            ['code' => 'BI', 'name' => 'Burundi', 'order_number' => 35],\n            ['code' => 'KH', 'name' => 'Cambodia', 'order_number' => 36],\n            ['code' => 'CM', 'name' => 'Cameroon', 'order_number' => 37],\n            ['code' => 'CA', 'name' => 'Canada', 'order_number' => 38],\n            ['code' => 'CV', 'name' => 'Cape Verde', 'order_number' => 39],\n            ['code' => 'KY', 'name' => 'Cayman Islands', 'order_number' => 40],\n            ['code' => 'CF', 'name' => 'Central African Republic', 'order_number' => 41],\n            ['code' => 'TD', 'name' => 'Chad', 'order_number' => 42],\n            ['code' => 'CL', 'name' => 'Chile', 'order_number' => 43],\n            ['code' => 'CN', 'name' => 'China', 'order_number' => 44],\n            ['code' => 'CX', 'name' => 'Christmas Island', 'order_number' => 45],\n            ['code' => 'CC', 'name' => 'Cocos (Keeling) Islands', 'order_number' => 46],\n            ['code' => 'CO', 'name' => 'Colombia', 'order_number' => 47],\n            ['code' => 'KM', 'name' => 'Comoros', 'order_number' => 48],\n            ['code' => 'CG', 'name' => 'Congo', 'order_number' => 49],\n            ['code' => 'CK', 'name' => 'Cook Islands', 'order_number' => 50],\n            ['code' => 'CR', 'name' => 'Costa Rica', 'order_number' => 51],\n            ['code' => 'HR', 'name' => 'Croatia (Hrvatska)', 'order_number' => 52],\n            ['code' => 'CU', 'name' => 'Cuba', 'order_number' => 53],\n            ['code' => 'CY', 'name' => 'Cyprus', 'order_number' => 54],\n            ['code' => 'CZ', 'name' => 'Czech Republic', 'order_number' => 55],\n            ['code' => 'DK', 'name' => 'Denmark', 'order_number' => 56],\n            ['code' => 'DJ', 'name' => 'Djibouti', 'order_number' => 57],\n            ['code' => 'DM', 'name' => 'Dominica', 'order_number' => 58],\n            ['code' => 'DO', 'name' => 'Dominican Republic', 'order_number' => 59],\n            ['code' => 'TP', 'name' => 'East Timor', 'order_number' => 60],\n            ['code' => 'EC', 'name' => 'Ecuador', 'order_number' => 61],\n            ['code' => 'EG', 'name' => 'Egypt', 'order_number' => 62],\n            ['code' => 'SV', 'name' => 'El Salvador', 'order_number' => 63],\n            ['code' => 'GQ', 'name' => 'Equatorial Guinea', 'order_number' => 64],\n            ['code' => 'ER', 'name' => 'Eritrea', 'order_number' => 65],\n            ['code' => 'EE', 'name' => 'Estonia', 'order_number' => 66],\n            ['code' => 'ET', 'name' => 'Ethiopia', 'order_number' => 67],\n            ['code' => 'FK', 'name' => 'Falkland Islands (Malvinas)', 'order_number' => 68],\n            ['code' => 'FO', 'name' => 'Faroe Islands', 'order_number' => 69],\n            ['code' => 'FJ', 'name' => 'Fiji', 'order_number' => 70],\n            ['code' => 'FI', 'name' => 'Finland', 'order_number' => 71],\n            ['code' => 'FR', 'name' => 'France', 'order_number' => 72],\n            ['code' => 'FX', 'name' => 'France, Metropolitan', 'order_number' => 73],\n            ['code' => 'GF', 'name' => 'French Guiana', 'order_number' => 74],\n            ['code' => 'PF', 'name' => 'French Polynesia', 'order_number' => 75],\n            ['code' => 'TF', 'name' => 'French Southern Territories', 'order_number' => 76],\n            ['code' => 'GA', 'name' => 'Gabon', 'order_number' => 77],\n            ['code' => 'GM', 'name' => 'Gambia', 'order_number' => 78],\n            ['code' => 'GE', 'name' => 'Georgia', 'order_number' => 79],\n            ['code' => 'DE', 'name' => 'Germany', 'order_number' => 80],\n            ['code' => 'GH', 'name' => 'Ghana', 'order_number' => 81],\n            ['code' => 'GI', 'name' => 'Gibraltar', 'order_number' => 82],\n            ['code' => 'GK', 'name' => 'Guernsey', 'order_number' => 83],\n            ['code' => 'GR', 'name' => 'Greece', 'order_number' => 84],\n            ['code' => 'GL', 'name' => 'Greenland', 'order_number' => 85],\n            ['code' => 'GD', 'name' => 'Grenada', 'order_number' => 86],\n            ['code' => 'GP', 'name' => 'Guadeloupe', 'order_number' => 87],\n            ['code' => 'GU', 'name' => 'Guam', 'order_number' => 88],\n            ['code' => 'GT', 'name' => 'Guatemala', 'order_number' => 89],\n            ['code' => 'GN', 'name' => 'Guinea', 'order_number' => 90],\n            ['code' => 'GW', 'name' => 'Guinea-Bissau', 'order_number' => 91],\n            ['code' => 'GY', 'name' => 'Guyana', 'order_number' => 92],\n            ['code' => 'HT', 'name' => 'Haiti', 'order_number' => 93],\n            ['code' => 'HM', 'name' => 'Heard and Mc Donald Islands', 'order_number' => 94],\n            ['code' => 'HN', 'name' => 'Honduras', 'order_number' => 95],\n            ['code' => 'HK', 'name' => 'Hong Kong', 'order_number' => 96],\n            ['code' => 'HU', 'name' => 'Hungary', 'order_number' => 97],\n            ['code' => 'IS', 'name' => 'Iceland', 'order_number' => 98],\n            ['code' => 'IN', 'name' => 'India', 'order_number' => 99],\n            ['code' => 'IM', 'name' => 'Isle of Man', 'order_number' => 100],\n            ['code' => 'ID', 'name' => 'Indonesia', 'order_number' => 101],\n            ['code' => 'IR', 'name' => 'Iran (Islamic Republic of)', 'order_number' => 102],\n            ['code' => 'IQ', 'name' => 'Iraq', 'order_number' => 103],\n            ['code' => 'IE', 'name' => 'Ireland', 'order_number' => 104],\n            ['code' => 'IL', 'name' => 'Israel', 'order_number' => 105],\n            ['code' => 'IT', 'name' => 'Italy', 'order_number' => 106],\n            ['code' => 'CI', 'name' => 'Ivory Coast', 'order_number' => 107],\n            ['code' => 'JE', 'name' => 'Jersey', 'order_number' => 108],\n            ['code' => 'JM', 'name' => 'Jamaica', 'order_number' => 109],\n            ['code' => 'JP', 'name' => 'Japan', 'order_number' => 110],\n            ['code' => 'JO', 'name' => 'Jordan', 'order_number' => 111],\n            ['code' => 'KZ', 'name' => 'Kazakhstan', 'order_number' => 112],\n            ['code' => 'KE', 'name' => 'Kenya', 'order_number' => 113],\n            ['code' => 'KI', 'name' => 'Kiribati', 'order_number' => 114],\n            ['code' => 'KP', 'name' => 'Korea, Democratic People\\'s Republic of', 'order_number' => 115],\n            ['code' => 'KR', 'name' => 'Korea, Republic of', 'order_number' => 116],\n            ['code' => 'XK', 'name' => 'Kosovo', 'order_number' => 117],\n            ['code' => 'KW', 'name' => 'Kuwait', 'order_number' => 118],\n            ['code' => 'KG', 'name' => 'Kyrgyzstan', 'order_number' => 119],\n            ['code' => 'LA', 'name' => 'Lao People\\'s Democratic Republic', 'order_number' => 120],\n            ['code' => 'LV', 'name' => 'Latvia', 'order_number' => 121],\n            ['code' => 'LB', 'name' => 'Lebanon', 'order_number' => 122],\n            ['code' => 'LS', 'name' => 'Lesotho', 'order_number' => 123],\n            ['code' => 'LR', 'name' => 'Liberia', 'order_number' => 124],\n            ['code' => 'LY', 'name' => 'Libyan Arab Jamahiriya', 'order_number' => 125],\n            ['code' => 'LI', 'name' => 'Liechtenstein', 'order_number' => 126],\n            ['code' => 'LT', 'name' => 'Lithuania', 'order_number' => 127],\n            ['code' => 'LU', 'name' => 'Luxembourg', 'order_number' => 128],\n            ['code' => 'MO', 'name' => 'Macau', 'order_number' => 129],\n            ['code' => 'MK', 'name' => 'Macedonia', 'order_number' => 130],\n            ['code' => 'MG', 'name' => 'Madagascar', 'order_number' => 131],\n            ['code' => 'MW', 'name' => 'Malawi', 'order_number' => 132],\n            ['code' => 'MY', 'name' => 'Malaysia', 'order_number' => 133],\n            ['code' => 'MV', 'name' => 'Maldives', 'order_number' => 134],\n            ['code' => 'ML', 'name' => 'Mali', 'order_number' => 135],\n            ['code' => 'MT', 'name' => 'Malta', 'order_number' => 136],\n            ['code' => 'MH', 'name' => 'Marshall Islands', 'order_number' => 137],\n            ['code' => 'MQ', 'name' => 'Martinique', 'order_number' => 138],\n            ['code' => 'MR', 'name' => 'Mauritania', 'order_number' => 139],\n            ['code' => 'MU', 'name' => 'Mauritius', 'order_number' => 140],\n            ['code' => 'TY', 'name' => 'Mayotte', 'order_number' => 141],\n            ['code' => 'MX', 'name' => 'Mexico', 'order_number' => 142],\n            ['code' => 'FM', 'name' => 'Micronesia, Federated States of', 'order_number' => 143],\n            ['code' => 'MD', 'name' => 'Moldova, Republic of', 'order_number' => 144],\n            ['code' => 'MC', 'name' => 'Monaco', 'order_number' => 145],\n            ['code' => 'MN', 'name' => 'Mongolia', 'order_number' => 146],\n            ['code' => 'ME', 'name' => 'Montenegro', 'order_number' => 147],\n            ['code' => 'MS', 'name' => 'Montserrat', 'order_number' => 148],\n            ['code' => 'MA', 'name' => 'Morocco', 'order_number' => 149],\n            ['code' => 'MZ', 'name' => 'Mozambique', 'order_number' => 150],\n            ['code' => 'MM', 'name' => 'Myanmar', 'order_number' => 151],\n            ['code' => 'NA', 'name' => 'Namibia', 'order_number' => 152],\n            ['code' => 'NR', 'name' => 'Nauru', 'order_number' => 153],\n            ['code' => 'NP', 'name' => 'Nepal', 'order_number' => 154],\n            ['code' => 'NL', 'name' => 'Netherlands', 'order_number' => 155],\n            ['code' => 'AN', 'name' => 'Netherlands Antilles', 'order_number' => 156],\n            ['code' => 'NC', 'name' => 'New Caledonia', 'order_number' => 157],\n            ['code' => 'NZ', 'name' => 'New Zealand', 'order_number' => 158],\n            ['code' => 'NI', 'name' => 'Nicaragua', 'order_number' => 159],\n            ['code' => 'NE', 'name' => 'Niger', 'order_number' => 160],\n            ['code' => 'NG', 'name' => 'Nigeria', 'order_number' => 161],\n            ['code' => 'NU', 'name' => 'Niue', 'order_number' => 162],\n            ['code' => 'NF', 'name' => 'Norfolk Island', 'order_number' => 163],\n            ['code' => 'MP', 'name' => 'Northern Mariana Islands', 'order_number' => 164],\n            ['code' => 'NO', 'name' => 'Norway', 'order_number' => 165],\n            ['code' => 'OM', 'name' => 'Oman', 'order_number' => 166],\n            ['code' => 'PK', 'name' => 'Pakistan', 'order_number' => 167],\n            ['code' => 'PW', 'name' => 'Palau', 'order_number' => 168],\n            ['code' => 'PS', 'name' => 'Palestine', 'order_number' => 169],\n            ['code' => 'PA', 'name' => 'Panama', 'order_number' => 170],\n            ['code' => 'PG', 'name' => 'Papua New Guinea', 'order_number' => 171],\n            ['code' => 'PY', 'name' => 'Paraguay', 'order_number' => 172],\n            ['code' => 'PE', 'name' => 'Peru', 'order_number' => 173],\n            ['code' => 'PH', 'name' => 'Philippines', 'order_number' => 174],\n            ['code' => 'PN', 'name' => 'Pitcairn', 'order_number' => 175],\n            ['code' => 'PL', 'name' => 'Poland', 'order_number' => 176],\n            ['code' => 'PT', 'name' => 'Portugal', 'order_number' => 177],\n            ['code' => 'PR', 'name' => 'Puerto Rico', 'order_number' => 178],\n            ['code' => 'QA', 'name' => 'Qatar', 'order_number' => 179],\n            ['code' => 'RE', 'name' => 'Reunion', 'order_number' => 180],\n            ['code' => 'RO', 'name' => 'Romania', 'order_number' => 181],\n            ['code' => 'RU', 'name' => 'Russian Federation', 'order_number' => 182],\n            ['code' => 'RW', 'name' => 'Rwanda', 'order_number' => 183],\n            ['code' => 'KN', 'name' => 'Saint Kitts and Nevis', 'order_number' => 184],\n            ['code' => 'LC', 'name' => 'Saint Lucia', 'order_number' => 185],\n            ['code' => 'VC', 'name' => 'Saint Vincent and the Grenadines', 'order_number' => 186],\n            ['code' => 'WS', 'name' => 'Samoa', 'order_number' => 187],\n            ['code' => 'SM', 'name' => 'San Marino', 'order_number' => 188],\n            ['code' => 'ST', 'name' => 'Sao Tome and Principe', 'order_number' => 189],\n            ['code' => 'SA', 'name' => 'Saudi Arabia', 'order_number' => 190],\n            ['code' => 'SN', 'name' => 'Senegal', 'order_number' => 191],\n            ['code' => 'RS', 'name' => 'Serbia', 'order_number' => 192],\n            ['code' => 'SC', 'name' => 'Seychelles', 'order_number' => 193],\n            ['code' => 'SL', 'name' => 'Sierra Leone', 'order_number' => 194],\n            ['code' => 'SG', 'name' => 'Singapore', 'order_number' => 195],\n            ['code' => 'SK', 'name' => 'Slovakia', 'order_number' => 196],\n            ['code' => 'SI', 'name' => 'Slovenia', 'order_number' => 197],\n            ['code' => 'SB', 'name' => 'Solomon Islands', 'order_number' => 198],\n            ['code' => 'SO', 'name' => 'Somalia', 'order_number' => 199],\n            ['code' => 'ZA', 'name' => 'South Africa', 'order_number' => 200],\n            ['code' => 'GS', 'name' => 'South Georgia South Sandwich Islands', 'order_number' => 202],\n            ['code' => 'ES', 'name' => 'Spain', 'order_number' => 202],\n            ['code' => 'LK', 'name' => 'Sri Lanka', 'order_number' => 203],\n            ['code' => 'SH', 'name' => 'St. Helena', 'order_number' => 204],\n            ['code' => 'PM', 'name' => 'St. Pierre and Miquelon', 'order_number' => 205],\n            ['code' => 'SD', 'name' => 'Sudan', 'order_number' => 206],\n            ['code' => 'SR', 'name' => 'Suriname', 'order_number' => 207],\n            ['code' => 'SJ', 'name' => 'Svalbard and Jan Mayen Islands', 'order_number' => 208],\n            ['code' => 'SZ', 'name' => 'Swaziland', 'order_number' => 209],\n            ['code' => 'SE', 'name' => 'Sweden', 'order_number' => 210],\n            ['code' => 'CH', 'name' => 'Switzerland', 'order_number' => 211],\n            ['code' => 'SY', 'name' => 'Syrian Arab Republic', 'order_number' => 212],\n            ['code' => 'TW', 'name' => 'Taiwan', 'order_number' => 213],\n            ['code' => 'TJ', 'name' => 'Tajikistan', 'order_number' => 214],\n            ['code' => 'TZ', 'name' => 'Tanzania, United Republic of', 'order_number' => 215],\n            ['code' => 'TH', 'name' => 'Thailand', 'order_number' => 216],\n            ['code' => 'TG', 'name' => 'Togo', 'order_number' => 217],\n            ['code' => 'TK', 'name' => 'Tokelau', 'order_number' => 218],\n            ['code' => 'TO', 'name' => 'Tonga', 'order_number' => 219],\n            ['code' => 'TT', 'name' => 'Trinidad and Tobago', 'order_number' => 220],\n            ['code' => 'TN', 'name' => 'Tunisia', 'order_number' => 221],\n            ['code' => 'TR', 'name' => 'Turkey', 'order_number' => 222],\n            ['code' => 'TM', 'name' => 'Turkmenistan', 'order_number' => 223],\n            ['code' => 'TC', 'name' => 'Turks and Caicos Islands', 'order_number' => 224],\n            ['code' => 'TV', 'name' => 'Tuvalu', 'order_number' => 225],\n            ['code' => 'UG', 'name' => 'Uganda', 'order_number' => 226],\n            ['code' => 'UA', 'name' => 'Ukraine', 'order_number' => 227],\n            ['code' => 'AE', 'name' => 'United Arab Emirates', 'order_number' => 228],\n            ['code' => 'GB', 'name' => 'United Kingdom', 'order_number' => 229],\n            ['code' => 'US', 'name' => 'United States', 'order_number' => 230],\n            ['code' => 'UM', 'name' => 'United States minor outlying islands', 'order_number' => 231],\n            ['code' => 'UY', 'name' => 'Uruguay', 'order_number' => 232],\n            ['code' => 'UZ', 'name' => 'Uzbekistan', 'order_number' => 233],\n            ['code' => 'VU', 'name' => 'Vanuatu', 'order_number' => 234],\n            ['code' => 'VA', 'name' => 'Vatican City State', 'order_number' => 235],\n            ['code' => 'VE', 'name' => 'Venezuela', 'order_number' => 236],\n            ['code' => 'VN', 'name' => 'Vietnam', 'order_number' => 237],\n            ['code' => 'VG', 'name' => 'Virgin Islands (British)', 'order_number' => 238],\n            ['code' => 'VI', 'name' => 'Virgin Islands (U.S.)', 'order_number' => 239],\n            ['code' => 'WF', 'name' => 'Wallis and Futuna Islands', 'order_number' => 240],\n            ['code' => 'EH', 'name' => 'Western Sahara', 'order_number' => 241],\n            ['code' => 'YE', 'name' => 'Yemen', 'order_number' => 242],\n            ['code' => 'ZR', 'name' => 'Zaire', 'order_number' => 243],\n            ['code' => 'ZM', 'name' => 'Zambia', 'order_number' => 244],\n            ['code' => 'ZW', 'name' => 'Zimbabwe', 'order_number' => 245]\n        ]);\n    }\n}\n"
  },
  {
    "path": "database/seeders/DatabaseSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse App\\Models\\Countries;\nuse App\\Models\\Products;\nuse App\\Models\\ProductTransactions;\nuse App\\Models\\Schedule;\nuse App\\Models\\User;\n// use Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents;\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder\n{\n    /**\n     * Seed the application's database.\n     */\n    public function run(): void\n    {\n        // User::factory(10)->create();\n        Products::factory(100)->create();\n        Schedule::factory(20)->create();\n        $this->call([\n            CountriesSeeder::class,\n            CitiesSeeder::class,\n        ]);\n        ProductTransactions::factory()->count(500)->create();\n\n        // Countries::factory(195)->create();\n        // User::factory()->create([\n        //     'name' => 'Test User',\n        //     'email' => 'test@example.com',\n        // ]);\n    }\n}\n"
  },
  {
    "path": "database/seeders/ProductsSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents;\nuse Illuminate\\Database\\Seeder;\n\nclass ProductsSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     */\n    public function run(): void\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "database/seeders/ScheduleSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Console\\Seeds\\WithoutModelEvents;\nuse Illuminate\\Database\\Seeder;\n\nclass ScheduleSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     */\n    public function run(): void\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "lang/ar.json",
    "content": "{\n    \"Stack Tips\": \"نصائح الإرتكاب\",\n    \"Drop Zone\": \"المنطقة الساقطة\",\n    \"Auto Suggest\": \"الاقتراح التلقائي\",\n    \"Lazy Load\": \"التحميل الكسلي\",\n    \"Excel Import and Export\": \"استيراد وتصدير إكسل\",\n    \"Generate PDF\": \"إنشاء PDF\",\n    \"CRUD\": \"إنشاء، قراءة، تحديث، حذف\",\n    \"Import Export CSV\": \"استيراد وتصدير CSV\",\n    \"Full Calander\": \"تقويم كامل\",\n    \"Weather API\": \"واجهة برمجة التطبيقات للطقس\",\n    \"Encrypt and Decrypt\": \"تشفير وفك تشفير\",\n    \"Form Builder\": \"بناء النماذج\",\n    \"Image Crop\": \"قص الصورة\",\n    \"Dusk Test\": \"اختبار Dusk\",\n    \"John Doe\": \"جون دو\",\n    \"Admin\": \"المدير\",\n    \"My Profile\": \"حسابي\",\n    \"Settings\": \"الإعدادات\",\n    \"Billing\": \"الفواتير\",\n    \"Log Out\": \"تسجيل الخروج\",\n    \"©\": \"©\",\n    \"ThemeSelection\": \"اختيار السمة\",\n    \"License\": \"رخصة\",\n    \"More Themes\": \"المزيد من السمات\",\n    \"Documentation\": \"الوثائق\",\n    \"Support\": \"الدعم\",\n    \"Image Upload\": \"رفع الصورة\",\n    \"Drag and drop files here or click to select files\": \"اسحب وأفلت الملفات هنا أو انقر لاختيار الملفات\",\n    \"0%\": \"0%\",\n    \"Load Images\": \"تحميل الصور\",\n    \"Export\": \"تصدير\",\n    \"Import\": \"استيراد\",\n    \"Select City:\": \"اختر المدينة:\",\n    \"London\": \"لندن\",\n    \"New York\": \"نيويورك\",\n    \"Tokyo\": \"طوكيو\",\n    \"Select Unit:\": \"اختر الوحدة:\",\n    \"Celsius\": \"درجة مئوية\",\n    \"Fahrenheit\": \"فهرنهايت\",\n    \"Update Weather\": \"تحديث الطقس\",\n    \"Export Calendar\": \"تصدير التقويم\",\n    \"Add\": \"إضافة\",\n    \"today\": \"اليوم\",\n    \"January 2024\": \"يناير 2024\",\n    \"month\": \"شهر\",\n    \"week\": \"أسبوع\",\n    \"day\": \"يوم\",\n    \"Sun\": \"الأحد\",\n    \"Mon\": \"الاثنين\",\n    \"Tue\": \"الثلاثاء\",\n    \"Wed\": \"الأربعاء\",\n    \"Thu\": \"الخميس\",\n    \"Fri\": \"الجمعة\",\n    \"Sat\": \"السبت\",\n    \"Weather Information\": \"معلومات الطقس\",\n    \"Description:\": \"الوصف:\",\n    \"overcast clouds\": \"سحب غائمة\",\n    \"Temperature:\": \"درجة الحرارة:\",\n    \"2.12 °C\": \"2.12 درجة مئوية\",\n    \"Feels Like:\": \"الشعور مثل:\",\n    \"-3.06 °C\": \"-3.06 درجة مئوية\",\n    \"Pressure:\": \"الضغط:\",\n    \"1029 hPa\": \"1029 هـ.ب.أ\",\n    \"Humidity:\": \"الرطوبة:\",\n    \"73%\": \"73%\",\n    \"Wind Speed:\": \"سرعة الرياح:\",\n    \"6.69 m/s\": \"6.69 م/ث\",\n    \"Name:\": \"الاسم:\",\n    \"Quantity:\": \"الكمية:\",\n    \"Buying Price:\": \"سعر الشراء:\",\n    \"Selling Price:\": \"سعر البيع:\",\n    \"Image URL:\": \"رابط الصورة:\",\n    \"Weight (in kg):\": \"الوزن (بالكيلوجرام):\",\n    \"Search\": \"بحث\",\n    \"Export and Import From CSV\": \"تصدير واستيراد من CSV\",\n    \"Upload CSV File:\": \"رفع ملف CSV:\",\n    \"Personal Schedule Tracker\": \"متتبع الجدول الشخصي\",\n    \"Create Product\": \"إنشاء منتج\",\n    \"Products\": \"المنتجات\",\n    \"Create\": \"إنشاء\",\n    \"Notes\": \"الملاحظات\",\n    \"Create Note\": \"إنشاء مذكرة\",\n    \"Title\": \"العنوان\",\n    \"Actions\": \"الإجراءات\",\n    \"Example formBuilder\": \"مثال لمنشئ النماذج\",\n    \"Name\": \"الاسم\",\n    \"Autocomplete\": \"إكمال تلقائي\",\n    \"Button\": \"زر\",\n    \"Checkbox Group\": \"مجموعة الخانات الاختيارية\",\n    \"Date Field\": \"حقل التاريخ\",\n    \"File Upload\": \"رفع الملف\",\n    \"Header\": \"رأس الصفحة\",\n    \"Hidden Input\": \"إدخال مخفي\",\n    \"Number\": \"الرقم\",\n    \"Paragraph\": \"فقرة\",\n    \"Radio Group\": \"مجموعة الأزرار الاختيارية\",\n    \"Select\": \"اختيار\",\n    \"Text Field\": \"حقل نصي\",\n    \"Text Area\": \"منطقة النص\",\n    \"Clear\": \"مسح\",\n    \"[{…}]\": \"[{…}]\",\n    \"Save\": \"حفظ\",\n    \"Upload cropped image to server\": \"رفع الصورة المقصوصة إلى الخادم\",\n    \"Select Image\": \"اختيار الصورة\",\n    \"Save And Upload\": \"حفظ ورفع\",\n    \"Test Page for Laravel Dusk\": \"صفحة الاختبار لـ Laravel Dusk\",\n    \"Text Input:\": \"إدخال النص:\",\n    \"Select Option:\": \"اختيار الخيار:\",\n    \"Option 1\": \"الخيار 1\",\n    \"Option 2\": \"الخيار 2\",\n    \"Option 3\": \"الخيار 3\",\n    \"Radio Buttons:\": \"أزرار الاختيار:\",\n    \"Radio Option 1\": \"خيار الراديو 1\",\n    \"Radio Option 2\": \"خيار الراديو 2\",\n    \"Checkboxes:\": \"خانات الاختيار:\",\n    \"Checkbox 1\": \"خانة الاختيار 1\",\n    \"Checkbox 2\": \"خانة الاختيار 2\",\n    \"Date Picker:\": \"محدد التاريخ:\",\n    \"File Upload:\": \"رفع الملف:\",\n    \"Open Bootstrap Modal\": \"فتح نافذة تحكم Bootstrap\",\n    \"Modal Title\": \"عنوان النافذة\",\n    \"Close\": \"إغلاق\",\n    \"Save changes\": \"حفظ التغييرات\",\n    \"Additional Elements for Testing:\": \"عناصر إضافية للاختبار:\",\n    \"Show Alert\": \"إظهار التنبيه\",\n    \"Show Confirm Dialog\": \"إظهار مربع الحوار للتأكيد\",\n    \"Wellcome\": \"مرحباً\",\n    \"The name field is required.\": \"الحقل الاسم مطلوب.\",\n    \"The quantity field is required.\": \"حقل الكمية مطلوب.\",\n    \"The quantity must be an integer.\": \"يجب أن تكون الكمية عدد صحيح.\",\n    \"The buying price field is required.\": \"حقل سعر الشراء مطلوب.\",\n    \"The buying price must be a numeric value.\": \"يجب أن يكون سعر الشراء قيمة رقمية.\",\n    \"The selling price field is required.\": \"حقل سعر البيع مطلوب.\",\n    \"The selling price must be a numeric value.\": \"يجب أن يكون سعر البيع قيمة رقمية.\",\n    \"The weight must be a numeric value.\": \"يجب أن يكون الوزن قيمة رقمية.\"\n}"
  },
  {
    "path": "lang/en.json",
    "content": "{\n    \"Stack Tips\": \"Stack Tips\",\n    \"Drop Zone\": \"Drop Zone\",\n    \"Auto Suggest\": \"Auto Suggest\",\n    \"Lazy Load\": \"Lazy Load\",\n    \"Excel Import and Export\": \"Excel Import and Export\",\n    \"Generate PDF\": \"Generate PDF\",\n    \"CRUD\": \"CRUD\",\n    \"Import Export CSV\": \"Import Export CSV\",\n    \"Full Calander\": \"Full Calander\",\n    \"Weather API\": \"Weather API\",\n    \"Encrypt and Decrypt\": \"Encrypt and Decrypt\",\n    \"Form Builder\": \"Form Builder\",\n    \"Image Crop\": \"Image Crop\",\n    \"Dusk Test\": \"Dusk Test\",\n    \"John Doe\": \"John Doe\",\n    \"Admin\": \"Admin\",\n    \"My Profile\": \"My Profile\",\n    \"Settings\": \"Settings\",\n    \"Billing\": \"Billing\",\n    \"Log Out\": \"Log Out\",\n    \"©\": \"©\",\n    \"ThemeSelection\": \"ThemeSelection\",\n    \"License\": \"License\",\n    \"More Themes\": \"More Themes\",\n    \"Documentation\": \"Documentation\",\n    \"Support\": \"Support\",\n    \"Image Upload\": \"Image Upload\",\n    \"Drag and drop files here or click to select files\": \"Drag and drop files here or click to select files\",\n    \"0%\": \"0%\",\n    \"Load Images\": \"Load Images\",\n    \"Export\": \"Export\",\n    \"Import\": \"Import\",\n    \"Select City:\": \"Select City:\",\n    \"London\": \"London\",\n    \"New York\": \"New York\",\n    \"Tokyo\": \"Tokyo\",\n    \"Select Unit:\": \"Select Unit:\",\n    \"Celsius\": \"Celsius\",\n    \"Fahrenheit\": \"Fahrenheit\",\n    \"Update Weather\": \"Update Weather\",\n    \"Export Calendar\": \"Export Calendar\",\n    \"Add\": \"Add\",\n    \"today\": \"today\",\n    \"January 2024\": \"January 2024\",\n    \"month\": \"month\",\n    \"week\": \"week\",\n    \"day\": \"day\",\n    \"Sun\": \"Sun\",\n    \"Mon\": \"Mon\",\n    \"Tue\": \"Tue\",\n    \"Wed\": \"Wed\",\n    \"Thu\": \"Thu\",\n    \"Fri\": \"Fri\",\n    \"Sat\": \"Sat\",\n    \"Weather Information\": \"Weather Information\",\n    \"Description:\": \"Description:\",\n    \"overcast clouds\": \"overcast clouds\",\n    \"Temperature:\": \"Temperature:\",\n    \"2.12 °C\": \"2.12 °C\",\n    \"Feels Like:\": \"-3.06 °C\",\n    \"Pressure:\": \"1029 hPa\",\n    \"Humidity:\": \"73%\",\n    \"Wind Speed:\": \"6.69 m/s\",\n    \"Name:\": \"Name:\",\n    \"Quantity:\": \"Quantity:\",\n    \"Buying Price:\": \"Buying Price:\",\n    \"Selling Price:\": \"Selling Price:\",\n    \"Image URL:\": \"Image URL:\",\n    \"Weight (in kg):\": \"Weight (in kg):\",\n    \"Search\": \"Search\",\n    \"Export and Import From CSV\": \"Export and Import From CSV\",\n    \"Upload CSV File:\": \"Upload CSV File:\",\n    \"Personal Schedule Tracker\": \"Personal Schedule Tracker\",\n    \"Create Product\": \"Create Product\",\n    \"Products\": \"Products\",\n    \"Create\": \"Create\",\n    \"Notes\": \"Notes\",\n    \"Create Note\": \"Create Note\",\n    \"Title\": \"Title\",\n    \"Actions\": \"Actions\",\n    \"Example formBuilder\": \"Example formBuilder\",\n    \"Name\": \"Name\",\n    \"Autocomplete\": \"Autocomplete\",\n    \"Button\": \"Button\",\n    \"Checkbox Group\": \"Checkbox Group\",\n    \"Date Field\": \"Date Field\",\n    \"File Upload\": \"File Upload\",\n    \"Header\": \"Header\",\n    \"Hidden Input\": \"Hidden Input\",\n    \"Number\": \"Number\",\n    \"Paragraph\": \"Paragraph\",\n    \"Radio Group\": \"Radio Group\",\n    \"Select\": \"Select\",\n    \"Text Field\": \"Text Field\",\n    \"Text Area\": \"Text Area\",\n    \"Clear\": \"Clear\",\n    \"[{…}]\": \"[{…}]\",\n    \"Save\": \"Save\",\n    \"Upload cropped image to server\": \"Upload cropped image to server\",\n    \"Select Image\": \"Select Image\",\n    \"Save And Upload\": \"Save And Upload\",\n    \"Test Page for Laravel Dusk\": \"Test Page for Laravel Dusk\",\n    \"Text Input:\": \"Text Input:\",\n    \"Select Option:\": \"Select Option:\",\n    \"Option 1\": \"Option 1\",\n    \"Option 2\": \"Option 2\",\n    \"Option 3\": \"Option 3\",\n    \"Radio Buttons:\": \"Radio Buttons:\",\n    \"Radio Option 1\": \"Radio Option 1\",\n    \"Radio Option 2\": \"Radio Option 2\",\n    \"Checkboxes:\": \"Checkboxes:\",\n    \"Checkbox 1\": \"Checkbox 1\",\n    \"Checkbox 2\": \"Checkbox 2\",\n    \"Date Picker:\": \"Date Picker:\",\n    \"File Upload:\": \"File Upload:\",\n    \"Open Bootstrap Modal\": \"Open Bootstrap Modal\",\n    \"Modal Title\": \"Modal Title\",\n    \"Close\": \"Close\",\n    \"Save changes\": \"Save changes\",\n    \"Additional Elements for Testing:\": \"Additional Elements for Testing:\",\n    \"Show Alert\": \"Show Alert\",\n    \"Show Confirm Dialog\": \"Show Confirm Dialog\",\n    \"Wellcome\": \"Wellcome\",\n    \"The name field is required.\": \"The name field is required.\",\n    \"The quantity field is required.\": \"The quantity field is required.\",\n    \"The quantity must be an integer.\": \"The quantity must be an integer.\",\n    \"The buying price field is required.\": \"The buying price field is required.\",\n    \"The buying price must be a numeric value.\": \"The buying price must be a numeric value.\",\n    \"The selling price field is required.\": \"The selling price field is required.\",\n    \"The selling price must be a numeric value.\": \"The selling price must be a numeric value.\",\n    \"The weight must be a numeric value.\": \"The weight must be a numeric value.\"\n}"
  },
  {
    "path": "lang/fa.json",
    "content": "{\n    \"Stack Tips\": \"نکات استک\",\n    \"Drop Zone\": \"ناحیه رها\",\n    \"Auto Suggest\": \"پیشنهاد خودکار\",\n    \"Lazy Load\": \"بارگذاری تنبل\",\n    \"Excel Import and Export\": \"واردات و صادرات اکسل\",\n    \"Generate PDF\": \"ایجاد PDF\",\n    \"CRUD\": \"ساخت، خواندن، به‌روزرسانی، حذف\",\n    \"Import Export CSV\": \"واردات و صادرات CSV\",\n    \"Full Calander\": \"تقویم کامل\",\n    \"Weather API\": \"واسطه برنامه‌نویسی آب و هوا\",\n    \"Encrypt and Decrypt\": \"رمزگذاری و رمزگشایی\",\n    \"Form Builder\": \"سازنده فرم\",\n    \"Image Crop\": \"برش تصویر\",\n    \"Dusk Test\": \"آزمون Dusk\",\n    \"John Doe\": \"جان دو\",\n    \"Admin\": \"مدیر\",\n    \"My Profile\": \"پروفایل من\",\n    \"Settings\": \"تنظیمات\",\n    \"Billing\": \"صورتحساب\",\n    \"Log Out\": \"خروج\",\n    \"©\": \"©\",\n    \"ThemeSelection\": \"انتخاب تم\",\n    \"License\": \"مجوز\",\n    \"More Themes\": \"تم‌های بیشتر\",\n    \"Documentation\": \"مستندات\",\n    \"Support\": \"پشتیبانی\",\n    \"Image Upload\": \"آپلود تصویر\",\n    \"Drag and drop files here or click to select files\": \"پرواز و رها کردن فایل‌ها در اینجا یا کلیک برای انتخاب فایل‌ها\",\n    \"0%\": \"0%\",\n    \"Load Images\": \"بارگذاری تصاویر\",\n    \"Export\": \"صادر کردن\",\n    \"Import\": \"وارد کردن\",\n    \"Select City:\": \"انتخاب شهر:\",\n    \"London\": \"لندن\",\n    \"New York\": \"نیویورک\",\n    \"Tokyo\": \"توکیو\",\n    \"Select Unit:\": \"انتخاب واحد:\",\n    \"Celsius\": \"سلسیوس\",\n    \"Fahrenheit\": \"فارنهایت\",\n    \"Update Weather\": \"به‌روزرسانی آب و هوا\",\n    \"Export Calendar\": \"صادر کردن تقویم\",\n    \"Add\": \"افزودن\",\n    \"today\": \"امروز\",\n    \"January 2024\": \"ژانویه 2024\",\n    \"month\": \"ماه\",\n    \"week\": \"هفته\",\n    \"day\": \"روز\",\n    \"Sun\": \"یک‌شنبه\",\n    \"Mon\": \"دوشنبه\",\n    \"Tue\": \"سه‌شنبه\",\n    \"Wed\": \"چهارشنبه\",\n    \"Thu\": \"پنج‌شنبه\",\n    \"Fri\": \"جمعه\",\n    \"Sat\": \"شنبه\",\n    \"Weather Information\": \"اطلاعات آب و هوا\",\n    \"Description:\": \"توضیحات:\",\n    \"overcast clouds\": \"ابرهای پوشاننده\",\n    \"Temperature:\": \"دما:\",\n    \"2.12 °C\": \"2.12 درجه سلسیوس\",\n    \"Feels Like:\": \"حس می‌شود مانند:\",\n    \"-3.06 °C\": \"-3.06 درجه سلسیوس\",\n    \"Pressure:\": \"فشار:\",\n    \"1029 hPa\": \"1029 هکتوپاسکال\",\n    \"Humidity:\": \"رطوبت:\",\n    \"73%\": \"73%\",\n    \"Wind Speed:\": \"سرعت باد:\",\n    \"6.69 m/s\": \"6.69 متر بر ثانیه\",\n    \"Name:\": \"نام:\",\n    \"Quantity:\": \"تعداد:\",\n    \"Buying Price:\": \"قیمت خرید:\",\n    \"Selling Price:\": \"قیمت فروش:\",\n    \"Image URL:\": \"آدرس تصویر:\",\n    \"Weight (in kg):\": \"وزن (در کیلوگرم):\",\n    \"Search\": \"جستجو\",\n    \"Export and Import From CSV\": \"صادر کردن و وارد کردن از CSV\",\n    \"Upload CSV File:\": \"آپلود فایل CSV:\",\n    \"Personal Schedule Tracker\": \"ردیابی برنامه شخصی\",\n    \"Create Product\": \"ساخت محصول\",\n    \"Products\": \"محصولات\",\n    \"Create\": \"ساخت\",\n    \"Notes\": \"یادداشت‌ها\",\n    \"Create Note\": \"ساخت یادداشت\",\n    \"Title\": \"عنوان\",\n    \"Actions\": \"اقدامات\",\n    \"Example formBuilder\": \"فرم‌ساز نمونه\",\n    \"Autocomplete\": \"پرکردن خودکار\",\n    \"Button\": \"دکمه\",\n    \"Checkbox Group\": \"گروه چک باکس\",\n    \"Date Field\": \"فیلد تاریخ\",\n    \"File Upload\": \"آپلود فایل\",\n    \"Header\": \"سربرگ\",\n    \"Hidden Input\": \"ورودی پنهان\",\n    \"Number\": \"عدد\",\n    \"Paragraph\": \"پاراگراف\",\n    \"Radio Group\": \"گروه رادیو\",\n    \"Select\": \"انتخاب\",\n    \"Text Field\": \"فیلد متنی\",\n    \"Text Area\": \"ناحیه متن\",\n    \"Clear\": \"پاک کردن\",\n    \"Save\": \"ذخیره\",\n    \"Upload cropped image to server\": \"آپلود تصویر برش خورده به سرور\",\n    \"Select Image\": \"انتخاب تصویر\",\n    \"Save And Upload\": \"ذخیره و آپلود\",\n    \"Test Page for Laravel Dusk\": \"صفحه آزمایش برای Laravel Dusk\",\n    \"Text Input:\": \"ورودی متنی:\",\n    \"Select Option:\": \"انتخاب گزینه:\",\n    \"Option 1\": \"گزینه 1\",\n    \"Option 2\": \"گزینه 2\",\n    \"Option 3\": \"گزینه 3\",\n    \"Radio Buttons:\": \"دکمه‌های رادیو:\",\n    \"Radio Option 1\": \"گزینه رادیو 1\",\n    \"Radio Option 2\": \"گزینه رادیو 2\",\n    \"Checkboxes:\": \"چک باکس‌ها:\",\n    \"Checkbox 1\": \"چک باکس 1\",\n    \"Checkbox 2\": \"چک باکس 2\",\n    \"Date Picker:\": \"انتخاب تاریخ:\",\n    \"File Upload:\": \"آپلود فایل:\",\n    \"Open Bootstrap Modal\": \"باز کردن پنجره تحکم Bootstrap\",\n    \"Modal Title\": \"عنوان پنجره\",\n    \"Close\": \"بستن\",\n    \"Save changes\": \"ذخیره تغییرات\",\n    \"Additional Elements for Testing:\": \"عناصر اضافی برای آزمایش:\",\n    \"Show Alert\": \"نمایش هشدار\",\n    \"Show Confirm Dialog\": \"نمایش جعبه دیالوگ تأیید\",\n    \"Wellcome\": \"خوش آمدید\",\n    \"The name field is required.\": \"فیلد نام الزامی است.\",\n    \"The quantity field is required.\": \"فیلد مقدار الزامی است.\",\n    \"The quantity must be an integer.\": \"مقدار باید عدد صحیح باشد.\",\n    \"The buying price field is required.\": \"فیلد قیمت خرید الزامی است.\",\n    \"The buying price must be a numeric value.\": \"قیمت خرید باید یک مقدار عددی باشد.\",\n    \"The selling price field is required.\": \"فیلد قیمت فروش الزامی است.\",\n    \"The selling price must be a numeric value.\": \"قیمت فروش باید یک مقدار عددی باشد.\",\n    \"The weight must be a numeric value.\": \"وزن باید یک مقدار عددی باشد.\"\n}"
  },
  {
    "path": "lang/hi.json",
    "content": "{\n    \"Stack Tips\": \"स्टैक टिप्स\",\n    \"Drop Zone\": \"ड्रॉप ज़ोन\",\n    \"Auto Suggest\": \"ऑटो सुझाव\",\n    \"Lazy Load\": \"आलसी लोड\",\n    \"Excel Import and Export\": \"एक्सेल आयात और निर्यात\",\n    \"Generate PDF\": \"पीडीएफ बनाएं\",\n    \"CRUD\": \"सीआरयूडी\",\n    \"Import Export CSV\": \"सीएसवी आयात और निर्यात\",\n    \"Full Calander\": \"पूरा कैलेंडर\",\n    \"Weather API\": \"मौसम एपीआई\",\n    \"Encrypt and Decrypt\": \"एन्क्रिप्ट और डिक्रिप्ट\",\n    \"Form Builder\": \"फॉर्म बिल्डर\",\n    \"Image Crop\": \"छवि क्रॉप\",\n    \"Dusk Test\": \"डस्क परीक्षण\",\n    \"John Doe\": \"जॉन डो\",\n    \"Admin\": \"एडमिन\",\n    \"My Profile\": \"मेरी प्रोफ़ाइल\",\n    \"Settings\": \"सेटिंग्स\",\n    \"Billing\": \"बिलिंग\",\n    \"Log Out\": \"लॉग आउट\",\n    \"©\": \"©\",\n    \"ThemeSelection\": \"थीम चयन\",\n    \"License\": \"लाइसेंस\",\n    \"More Themes\": \"और थीमें\",\n    \"Documentation\": \"दस्तावेज़ीकरण\",\n    \"Support\": \"समर्थन\",\n    \"Image Upload\": \"छवि अपलोड\",\n    \"Drag and drop files here or click to select files\": \"यहाँ फ़ाइलें खींचें और छोड़ें या फ़ाइलें चयन करने के लिए क्लिक करें\",\n    \"0%\": \"0%\",\n    \"Load Images\": \"छवियाँ लोड करें\",\n    \"Export\": \"निर्यात\",\n    \"Import\": \"आयात\",\n    \"Select City:\": \"शहर चुनें:\",\n    \"London\": \"लंडन\",\n    \"New York\": \"न्यूयॉर्क\",\n    \"Tokyo\": \"टोक्यो\",\n    \"Select Unit:\": \"इकाई चुनें:\",\n    \"Celsius\": \"सेल्सियस\",\n    \"Fahrenheit\": \"फारेनहाइट\",\n    \"Update Weather\": \"मौसम अपडेट करें\",\n    \"Export Calendar\": \"कैलेंडर निर्यात करें\",\n    \"Add\": \"जोड़ें\",\n    \"today\": \"आज\",\n    \"January 2024\": \"जनवरी 2024\",\n    \"month\": \"महीना\",\n    \"week\": \"सप्ताह\",\n    \"day\": \"दिन\",\n    \"Sun\": \"रविवार\",\n    \"Mon\": \"सोमवार\",\n    \"Tue\": \"मंगलवार\",\n    \"Wed\": \"बुधवार\",\n    \"Thu\": \"गुरुवार\",\n    \"Fri\": \"शुक्रवार\",\n    \"Sat\": \"शनिवार\",\n    \"Weather Information\": \"मौसम जानकारी\",\n    \"Description:\": \"विवरण:\",\n    \"overcast clouds\": \"अधिकांश बादल\",\n    \"Temperature:\": \"तापमान:\",\n    \"2.12 °C\": \"2.12 डिग्री सेल्सियस\",\n    \"Feels Like:\": \"महसूस करें:\",\n    \"-3.06 °C\": \"-3.06 डिग्री सेल्सियस\",\n    \"Pressure:\": \"दबाव:\",\n    \"1029 hPa\": \"1029 हेक्टोपास्कल\",\n    \"Humidity:\": \"नमी:\",\n    \"73%\": \"73%\",\n    \"Wind Speed:\": \"हवा की गति:\",\n    \"6.69 m/s\": \"6.69 मीटर प्रति सेकंड\",\n    \"Name:\": \"नाम:\",\n    \"Quantity:\": \"मात्रा:\",\n    \"Buying Price:\": \"खरीद कीमत:\",\n    \"Selling Price:\": \"बिक्री कीमत:\",\n    \"Image URL:\": \"छवि URL:\",\n    \"Weight (in kg):\": \"वजन (किलो में):\",\n    \"Search\": \"खोज\",\n    \"Export and Import From CSV\": \"CSV से निर्यात और आयात करें\",\n    \"Upload CSV File:\": \"CSV फ़ाइल अपलोड करें:\",\n    \"Personal Schedule Tracker\": \"व्यक्तिगत कार्यक्रम ट्रैकर\",\n    \"Create Product\": \"उत्पाद बनाएं\",\n    \"Products\": \"उत्पाद\",\n    \"Create\": \"बनाएं\",\n    \"Notes\": \"टिप्पणियाँ\",\n    \"Create Note\": \"नोट बनाएं\",\n    \"Title\": \"शीर्षक\",\n    \"Actions\": \"क्रियाएँ\",\n    \"Example formBuilder\": \"उदाहरण फॉर्मबिल्डर\",\n    \"Name\": \"नाम\",\n    \"Autocomplete\": \"स्वचछता पूर्ण\",\n    \"Button\": \"बटन\",\n    \"Checkbox Group\": \"चेकबॉक्स ग्रुप\",\n    \"Date Field\": \"तिथि फ़ील्ड\",\n    \"File Upload\": \"फ़ाइल अपलोड\",\n    \"Header\": \"हैडर\",\n    \"Hidden Input\": \"छुपा हुआ इनपुट\",\n    \"Number\": \"संख्या\",\n    \"Paragraph\": \"अनुच्छेद\",\n    \"Radio Group\": \"रेडियो ग्रुप\",\n    \"Select\": \"चयन करें\",\n    \"Text Field\": \"मौद्रिक फ़ील्ड\",\n    \"Text Area\": \"मौद्रिक क्षेत्र\",\n    \"Clear\": \"साफ़ करें\",\n    \"[{…}]\": \"[{…}]\",\n    \"Save\": \"सहेजें\",\n    \"Upload cropped image to server\": \"कैट की गई छवि को सर्वर पर अपलोड करें\",\n    \"Select Image\": \"छवि का चयन करें\",\n    \"Save And Upload\": \"सहेजें और अपलोड करें\",\n    \"Test Page for Laravel Dusk\": \"लारावेल डस्क के लिए परीक्षण पृष्ठ\",\n    \"Text Input:\": \"मौद्रिक इनपुट:\",\n    \"Select Option:\": \"विकल्प चुनें:\",\n    \"Option 1\": \"विकल्प 1\",\n    \"Option 2\": \"विकल्प 2\",\n    \"Option 3\": \"विकल्प 3\",\n    \"Radio Buttons:\": \"रेडियो बटन:\",\n    \"Radio Option 1\": \"रेडियो विकल्प 1\",\n    \"Radio Option 2\": \"रेडियो विकल्प 2\",\n    \"Checkboxes:\": \"चेकबॉक्स:\",\n    \"Checkbox 1\": \"चेकबॉक्स 1\",\n    \"Checkbox 2\": \"चेकबॉक्स 2\",\n    \"Date Picker:\": \"तिथि चयनकर्ता:\",\n    \"File Upload:\": \"फ़ाइल अपलोड:\",\n    \"Open Bootstrap Modal\": \"बूटस्ट्रैप मोडल खोलें\",\n    \"Modal Title\": \"मोडल शीर्षक\",\n    \"Close\": \"बंद करें\",\n    \"Save changes\": \"परिवर्तन सहेजें\",\n    \"Additional Elements for Testing:\": \"टेस्टिंग के लिए अतिरिक्त तत्व:\",\n    \"Show Alert\": \"हेरफेर दिखाएं\",\n    \"Show Confirm Dialog\": \"पुष्टि संवाद दिखाएं\",\n    \"Wellcome\": \"वेलकम\",\n    \"The name field is required.\": \"नाम का फील्ड आवश्यक है।\",\n    \"The quantity field is required.\": \"मात्रा फ़ील्ड आवश्यक है.\",\n    \"The quantity must be an integer.\": \"मात्रा पूर्णांक होनी चाहिए.\",\n    \"The buying price field is required.\": \"खरीद मूल्य फ़ील्ड आवश्यक है।,\",\n    \"The buying price must be a numeric value.\": \"खरीद मूल्य एक संख्यात्मक मान होना चाहिए।,\",\n    \"The selling price field is required.\": \"विक्रय मूल्य फ़ील्ड आवश्यक है।,\",\n    \"The selling price must be a numeric value.\": \"विक्रय मूल्य एक संख्यात्मक मान होना चाहिए।,\",\n    \"The weight must be a numeric value.\": \"वजन एक संख्यात्मक मान होना चाहिए।,\"\n}"
  },
  {
    "path": "lang/ur.json",
    "content": "{\n    \"Stack Tips\": \"اسٹیک ٹپس\",\n    \"Drop Zone\": \"ڈراپ زون\",\n    \"Auto Suggest\": \"آٹو سججسٹ\",\n    \"Lazy Load\": \"آلسی لوڈ\",\n    \"Excel Import and Export\": \"ایکسل درآمد اور ایکسپورٹ\",\n    \"Generate PDF\": \"پی ڈی ایف بنائیں\",\n    \"CRUD\": \"کرڈ\",\n    \"Import Export CSV\": \"درآمد ایکسپورٹ سی ایس وی\",\n    \"Full Calander\": \"پورے کیلنڈر\",\n    \"Weather API\": \"موسم کا اے پی آئی\",\n    \"Encrypt and Decrypt\": \"پشتینہ اور ڈیکرپٹ\",\n    \"Form Builder\": \"فارم بلڈر\",\n    \"Image Crop\": \"تصویر کاٹیں\",\n    \"Dusk Test\": \"ڈسک ٹیسٹ\",\n    \"John Doe\": \"جان ڈو\",\n    \"Admin\": \"ایڈمن\",\n    \"My Profile\": \"میری پروفائل\",\n    \"Settings\": \"سیٹنگز\",\n    \"Billing\": \"بلنگ\",\n    \"Log Out\": \"لاگ آؤٹ\",\n    \"©\": \"©\",\n    \"ThemeSelection\": \"تھیم کا انتخاب\",\n    \"License\": \"لائسنس\",\n    \"More Themes\": \"مزید تھیمز\",\n    \"Documentation\": \"دستاویزات\",\n    \"Support\": \"حمایت\",\n    \"Image Upload\": \"تصویر اپ لوڈ\",\n    \"Drag and drop files here or click to select files\": \"یہاں فائلیں ڈریگ اور ڈراپ کریں یا فائلیں منتخب کرنے کے لیے کلک کریں\",\n    \"0%\": \"0٪\",\n    \"Load Images\": \"تصاویر لوڈ کریں\",\n    \"Export\": \"برآمد کریں\",\n    \"Import\": \"درآمد کریں\",\n    \"Select City:\": \"شہر منتخب کریں:\",\n    \"London\": \"لندن\",\n    \"New York\": \"نیو یارک\",\n    \"Tokyo\": \"ٹوکیو\",\n    \"Select Unit:\": \"یونٹ منتخب کریں:\",\n    \"Celsius\": \"سیلسیس\",\n    \"Fahrenheit\": \"فارن ہائیٹ\",\n    \"Update Weather\": \"موسم کو اپ ڈیٹ کریں\",\n    \"Export Calendar\": \"کیلنڈر برآمد کریں\",\n    \"Add\": \"شامل کریں\",\n    \"today\": \"آج\",\n    \"January 2024\": \"جنوری 2024\",\n    \"month\": \"مہینہ\",\n    \"week\": \"ہفتہ\",\n    \"day\": \"دن\",\n    \"Sun\": \"اتوار\",\n    \"Mon\": \"پیر\",\n    \"Tue\": \"منگل\",\n    \"Wed\": \"بدھ\",\n    \"Thu\": \"جمعرات\",\n    \"Fri\": \"جمعہ\",\n    \"Sat\": \"ہفتہ\",\n    \"Weather Information\": \"موسم کی معلومات\",\n    \"Description:\": \"تفصیل:\",\n    \"overcast clouds\": \"اوورکاسٹ بادل\",\n    \"Temperature:\": \"درجہ حرارت:\",\n    \"2.12 °C\": \"2.12 ڈگری سیلسیس\",\n    \"Feels Like:\": \"محسوس ہوتا ہے:\",\n    \"-3.06 °C\": \"-3.06 ڈگری سیلسیس\",\n    \"Pressure:\": \"دباؤ:\",\n    \"1029 hPa\": \"1029 ہیکٹوپاسکل\",\n    \"Humidity:\": \"نمی:\",\n    \"73%\": \"73٪\",\n    \"Wind Speed:\": \"ہوا کی رفتار:\",\n    \"6.69 m/s\": \"6.69 میٹر فی سیکنڈ\",\n    \"Name:\": \"نام:\",\n    \"Quantity:\": \"مقدار:\",\n    \"Buying Price:\": \"خریداری کی قیمت:\",\n    \"Selling Price:\": \"فروخت کی قیمت:\",\n    \"Image URL:\": \"تصویر URL:\",\n    \"Weight (in kg):\": \"وزن (کلو میں):\",\n    \"Search\": \"تلاش\",\n    \"Export and Import From CSV\": \"سی ایس وی سے برآمد اور درآمد کریں\",\n    \"Upload CSV File:\": \"CSV فائل اپ لوڈ کریں:\",\n    \"Personal Schedule Tracker\": \"ذاتی شیڈول ٹریکر\",\n    \"Create Product\": \"پروڈکٹ بنائیں\",\n    \"Products\": \"پروڈکٹس\",\n    \"Create\": \"بنائیں\",\n    \"Notes\": \"نوٹس\",\n    \"Create Note\": \"نوٹ بنائیں\",\n    \"Title\": \"عنوان\",\n    \"Actions\": \"اعمال\",\n    \"Example formBuilder\": \"فارم بلڈر کا مثال\",\n    \"Name\": \"نام\",\n    \"Autocomplete\": \"خود مکمل\",\n    \"Button\": \"بٹن\",\n    \"Checkbox Group\": \"چیک باکس گروہ\",\n    \"Date Field\": \"تاریخ کا شہرہ\",\n    \"File Upload\": \"فائل اپ لوڈ\",\n    \"Header\": \"ہیڈر\",\n    \"Hidden Input\": \"چھپا ہوا ان پٹ\",\n    \"Number\": \"نمبر\",\n    \"Paragraph\": \"پیراگراف\",\n    \"Radio Group\": \"ریڈیو گروہ\",\n    \"Select\": \"منتخب کریں\",\n    \"Text Field\": \"مواد کا شہرہ\",\n    \"Text Area\": \"مواد کا علاقہ\",\n    \"Clear\": \"صاف کریں\",\n    \"[{…}]\": \"[{…}]\",\n    \"Save\": \"محفوظ کریں\",\n    \"Upload cropped image to server\": \"کاٹی گئی تصویر کو سرور پر اپ لوڈ کریں\",\n    \"Select Image\": \"تصویر منتخب کریں\",\n    \"Save And Upload\": \"محفوظ کریں اور اپ لوڈ کریں\",\n    \"Test Page for Laravel Dusk\": \"لاوأرل ڈسک کے لیے ٹیسٹ پیج\",\n    \"Text Input:\": \"مواد کا ان پٹ:\",\n    \"Select Option:\": \"آپشن منتخب کریں:\",\n    \"Option 1\": \"آپشن 1\",\n    \"Option 2\": \"آپشن 2\",\n    \"Option 3\": \"آپشن 3\",\n    \"Radio Buttons:\": \"ریڈیو بٹنز:\",\n    \"Radio Option 1\": \"ریڈیو آپشن 1\",\n    \"Radio Option 2\": \"ریڈیو آپشن 2\",\n    \"Checkboxes:\": \"چیک باکسز:\",\n    \"Checkbox 1\": \"چیک باکس 1\",\n    \"Checkbox 2\": \"چیک باکس 2\",\n    \"Date Picker:\": \"تاریخ چننے والا:\",\n    \"File Upload:\": \"فائل اپ لوڈ:\",\n    \"Open Bootstrap Modal\": \"بوٹسٹریپ موڈل کھولیں\",\n    \"Modal Title\": \"موڈل ٹائٹل\",\n    \"Close\": \"بند کریں\",\n    \"Save changes\": \"تبدیلیاں محفوظ کریں\",\n    \"Additional Elements for Testing:\": \"ٹیسٹنگ کے لیے اضافی عناصر:\",\n    \"Show Alert\": \"الرٹ دکھائیں\",\n    \"Show Confirm Dialog\": \"تصدیق ڈائیلاگ دکھائیں\",\n    \"Wellcome\": \"خوش آمدید\",\n    \"The name field is required.\": \"نام کا فیلڈ درکار ہے۔\",\n    \"The quantity field is required.\": \"مقدار کا میدان درکار ہے۔\",\n    \"The quantity must be an integer.\": \"مقدار ایک عدد صحیح ہونا چاہیے۔\",\n    \"The buying price field is required.\": \"خرید قیمت کا فیلڈ درکار ہے۔,\",\n    \"The buying price must be a numeric value.\": \"خریدنے کی قیمت ایک عددی قدر ہونی چاہیے۔,\",\n    \"The selling price field is required.\": \"فروخت کی قیمت کا فیلڈ درکار ہے۔,\",\n    \"The selling price must be a numeric value.\": \"فروخت کی قیمت ایک عددی قدر ہونی چاہیے۔,\",\n    \"The weight must be a numeric value.\": \"وزن ایک عددی قدر ہونا چاہیے۔,\"\n}"
  },
  {
    "path": "package.json",
    "content": "{\n    \"private\": true,\n    \"type\": \"module\",\n    \"scripts\": {\n        \"dev\": \"vite\",\n        \"build\": \"vite build\"\n    },\n    \"devDependencies\": {\n        \"@popperjs/core\": \"^2.11.6\",\n        \"axios\": \"^1.6.4\",\n        \"bootstrap\": \"^5.2.3\",\n        \"laravel-vite-plugin\": \"^1.0\",\n        \"sass\": \"^1.56.1\",\n        \"vite\": \"^5.0\"\n    }\n}\n"
  },
  {
    "path": "phpunit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNamespaceSchemaLocation=\"vendor/phpunit/phpunit/phpunit.xsd\"\n         bootstrap=\"vendor/autoload.php\"\n         colors=\"true\"\n>\n    <testsuites>\n        <testsuite name=\"Unit\">\n            <directory>tests/Unit</directory>\n        </testsuite>\n        <testsuite name=\"Feature\">\n            <directory>tests/Feature</directory>\n        </testsuite>\n    </testsuites>\n    <source>\n        <include>\n            <directory>app</directory>\n        </include>\n    </source>\n    <php>\n        <env name=\"APP_ENV\" value=\"testing\"/>\n        <env name=\"APP_MAINTENANCE_DRIVER\" value=\"file\"/>\n        <env name=\"BCRYPT_ROUNDS\" value=\"4\"/>\n        <env name=\"CACHE_STORE\" value=\"array\"/>\n        <!-- <env name=\"DB_CONNECTION\" value=\"sqlite\"/> -->\n        <!-- <env name=\"DB_DATABASE\" value=\":memory:\"/> -->\n        <env name=\"MAIL_MAILER\" value=\"array\"/>\n        <env name=\"PULSE_ENABLED\" value=\"false\"/>\n        <env name=\"QUEUE_CONNECTION\" value=\"sync\"/>\n        <env name=\"SESSION_DRIVER\" value=\"array\"/>\n        <env name=\"TELESCOPE_ENABLED\" value=\"false\"/>\n    </php>\n</phpunit>\n"
  },
  {
    "path": "public/.htaccess",
    "content": "<IfModule mod_rewrite.c>\n    <IfModule mod_negotiation.c>\n        Options -MultiViews -Indexes\n    </IfModule>\n\n    RewriteEngine On\n\n    # Handle Authorization Header\n    RewriteCond %{HTTP:Authorization} .\n    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\n\n    # Redirect Trailing Slashes If Not A Folder...\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteCond %{REQUEST_URI} (.+)/$\n    RewriteRule ^ %1 [L,R=301]\n\n    # Send Requests To Front Controller...\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteCond %{REQUEST_FILENAME} !-f\n    RewriteRule ^ index.php [L]\n</IfModule>\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/css/autoFill.bootstrap.css",
    "content": "div.dt-autofill-handle {\n  position: absolute;\n  height: 8px;\n  width: 8px;\n  z-index: 10;\n  box-sizing: border-box;\n  background: #337ab7;\n  cursor: pointer;\n}\n\ndiv.dtk-focus-alt div.dt-autofill-handle {\n  background: #ff8b33;\n}\n\ndiv.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: #337ab7;\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px);\n}\ndiv.dt-autofill-select.top, div.dt-autofill-select.bottom {\n  height: 3px;\n  margin-top: -1px;\n}\ndiv.dt-autofill-select.left, div.dt-autofill-select.right {\n  width: 3px;\n  margin-left: -1px;\n}\n\ndiv.dt-autofill-list {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 104;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dt-autofill-list div.dtaf-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button {\n  display: block;\n  width: 100%;\n  margin: 1em 0;\n  padding: 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:hover {\n  background-color: #ebebeb;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:first-child {\n  margin-top: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:last-child {\n  margin-bottom: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button input[type=number] {\n  padding: 6px;\n  width: 30px;\n  margin: -2px 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button span {\n  float: right;\n}\n\ndiv.dtaf-popover-closeable {\n  padding-top: 2.5em;\n}\n\ndiv.dt-autofill-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n  z-index: 103;\n}\n\nhtml.dark div.dt-autofill-handle {\n  background: rgb(110, 168, 254);\n}\nhtml.dark div.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: rgb(110, 168, 254);\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(0, 0, 0, 0.5) 5px, rgba(0, 0, 0, 0.5) 10px);\n}\nhtml.dark div.dt-autofill-list {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dt-autofill-list button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dt-autofill-list button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-autofill-handle {\n    height: 16px;\n    width: 16px;\n  }\n  div.dt-autofill-list {\n    width: 90%;\n    left: 74.5%;\n  }\n}\ndiv.dt-autofill-list div.dt-autofill-question input[type=number] {\n  padding: 6px;\n  width: 60px;\n  margin: -2px 0;\n}\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/css/autoFill.bootstrap4.css",
    "content": "div.dt-autofill-handle {\n  position: absolute;\n  height: 8px;\n  width: 8px;\n  z-index: 10;\n  box-sizing: border-box;\n  background: #0275d8;\n  cursor: pointer;\n}\n\ndiv.dtk-focus-alt div.dt-autofill-handle {\n  background: #ff8b33;\n}\n\ndiv.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: #0275d8;\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px);\n}\ndiv.dt-autofill-select.top, div.dt-autofill-select.bottom {\n  height: 3px;\n  margin-top: -1px;\n}\ndiv.dt-autofill-select.left, div.dt-autofill-select.right {\n  width: 3px;\n  margin-left: -1px;\n}\n\ndiv.dt-autofill-list {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 104;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dt-autofill-list div.dtaf-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button {\n  display: block;\n  width: 100%;\n  margin: 1em 0;\n  padding: 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:hover {\n  background-color: #ebebeb;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:first-child {\n  margin-top: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:last-child {\n  margin-bottom: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button input[type=number] {\n  padding: 6px;\n  width: 30px;\n  margin: -2px 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button span {\n  float: right;\n}\n\ndiv.dtaf-popover-closeable {\n  padding-top: 2.5em;\n}\n\ndiv.dt-autofill-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n  z-index: 103;\n}\n\nhtml.dark div.dt-autofill-handle {\n  background: rgb(110, 168, 254);\n}\nhtml.dark div.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: rgb(110, 168, 254);\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(0, 0, 0, 0.5) 5px, rgba(0, 0, 0, 0.5) 10px);\n}\nhtml.dark div.dt-autofill-list {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dt-autofill-list button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dt-autofill-list button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-autofill-handle {\n    height: 16px;\n    width: 16px;\n  }\n  div.dt-autofill-list {\n    width: 90%;\n    left: 74.5%;\n  }\n}\ndiv.dt-autofill-list div.dt-autofill-question input[type=number] {\n  padding: 6px;\n  width: 60px;\n  margin: -2px 0;\n}\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/css/autoFill.bootstrap5.css",
    "content": "div.dt-autofill-handle {\n  position: absolute;\n  height: 8px;\n  width: 8px;\n  z-index: 10;\n  box-sizing: border-box;\n  background: #0d6efd;\n  cursor: pointer;\n}\n\ndiv.dtk-focus-alt div.dt-autofill-handle {\n  background: #ff8b33;\n}\n\ndiv.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: #0d6efd;\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px);\n}\ndiv.dt-autofill-select.top, div.dt-autofill-select.bottom {\n  height: 3px;\n  margin-top: -1px;\n}\ndiv.dt-autofill-select.left, div.dt-autofill-select.right {\n  width: 3px;\n  margin-left: -1px;\n}\n\ndiv.dt-autofill-list {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 104;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dt-autofill-list div.dtaf-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button {\n  display: block;\n  width: 100%;\n  margin: 1em 0;\n  padding: 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:hover {\n  background-color: #ebebeb;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:first-child {\n  margin-top: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:last-child {\n  margin-bottom: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button input[type=number] {\n  padding: 6px;\n  width: 30px;\n  margin: -2px 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button span {\n  float: right;\n}\n\ndiv.dtaf-popover-closeable {\n  padding-top: 2.5em;\n}\n\ndiv.dt-autofill-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n  z-index: 103;\n}\n\nhtml.dark div.dt-autofill-handle {\n  background: rgb(110, 168, 254);\n}\nhtml.dark div.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: rgb(110, 168, 254);\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(0, 0, 0, 0.5) 5px, rgba(0, 0, 0, 0.5) 10px);\n}\nhtml.dark div.dt-autofill-list {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dt-autofill-list button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dt-autofill-list button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-autofill-handle {\n    height: 16px;\n    width: 16px;\n  }\n  div.dt-autofill-list {\n    width: 90%;\n    left: 74.5%;\n  }\n}\ndiv.dt-autofill-list div.dt-autofill-question input[type=number] {\n  padding: 6px;\n  width: 60px;\n  margin: -2px 0;\n}\n\ndiv.row.dt-row > div.col-sm-12 {\n  position: relative;\n}\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/css/autoFill.bulma.css",
    "content": "div.dt-autofill-handle {\n  position: absolute;\n  height: 8px;\n  width: 8px;\n  z-index: 10;\n  box-sizing: border-box;\n  background: #00D1B2;\n  cursor: pointer;\n}\n\ndiv.dtk-focus-alt div.dt-autofill-handle {\n  background: #ff8b33;\n}\n\ndiv.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: #00D1B2;\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px);\n}\ndiv.dt-autofill-select.top, div.dt-autofill-select.bottom {\n  height: 3px;\n  margin-top: -1px;\n}\ndiv.dt-autofill-select.left, div.dt-autofill-select.right {\n  width: 3px;\n  margin-left: -1px;\n}\n\ndiv.dt-autofill-list {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 104;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dt-autofill-list div.dtaf-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button {\n  display: block;\n  width: 100%;\n  margin: 1em 0;\n  padding: 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:hover {\n  background-color: #ebebeb;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:first-child {\n  margin-top: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:last-child {\n  margin-bottom: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button input[type=number] {\n  padding: 6px;\n  width: 30px;\n  margin: -2px 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button span {\n  float: right;\n}\n\ndiv.dtaf-popover-closeable {\n  padding-top: 2.5em;\n}\n\ndiv.dt-autofill-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n  z-index: 103;\n}\n\nhtml.dark div.dt-autofill-handle {\n  background: rgb(110, 168, 254);\n}\nhtml.dark div.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: rgb(110, 168, 254);\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(0, 0, 0, 0.5) 5px, rgba(0, 0, 0, 0.5) 10px);\n}\nhtml.dark div.dt-autofill-list {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dt-autofill-list button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dt-autofill-list button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-autofill-handle {\n    height: 16px;\n    width: 16px;\n  }\n  div.dt-autofill-list {\n    width: 90%;\n    left: 74.5%;\n  }\n}\ndiv.dt-autofill-list button {\n  margin: 0;\n}\n\ndiv.dt-autofill-handle {\n  z-index: 11;\n}\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/css/autoFill.dataTables.css",
    "content": "div.dt-autofill-handle {\n  position: absolute;\n  height: 8px;\n  width: 8px;\n  z-index: 10;\n  box-sizing: border-box;\n  background: #3366ff;\n  cursor: pointer;\n}\n\ndiv.dtk-focus-alt div.dt-autofill-handle {\n  background: #ff8b33;\n}\n\ndiv.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: #4989de;\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px);\n}\ndiv.dt-autofill-select.top, div.dt-autofill-select.bottom {\n  height: 3px;\n  margin-top: -1px;\n}\ndiv.dt-autofill-select.left, div.dt-autofill-select.right {\n  width: 3px;\n  margin-left: -1px;\n}\n\ndiv.dt-autofill-list {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 104;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dt-autofill-list div.dtaf-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button {\n  display: block;\n  width: 100%;\n  margin: 1em 0;\n  padding: 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:hover {\n  background-color: #ebebeb;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:first-child {\n  margin-top: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:last-child {\n  margin-bottom: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button input[type=number] {\n  padding: 6px;\n  width: 30px;\n  margin: -2px 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button span {\n  float: right;\n}\n\ndiv.dtaf-popover-closeable {\n  padding-top: 2.5em;\n}\n\ndiv.dt-autofill-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n  z-index: 103;\n}\n\nhtml.dark div.dt-autofill-handle {\n  background: rgb(110, 168, 254);\n}\nhtml.dark div.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: rgb(110, 168, 254);\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(0, 0, 0, 0.5) 5px, rgba(0, 0, 0, 0.5) 10px);\n}\nhtml.dark div.dt-autofill-list {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dt-autofill-list button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dt-autofill-list button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-autofill-handle {\n    height: 16px;\n    width: 16px;\n  }\n  div.dt-autofill-list {\n    width: 90%;\n    left: 74.5%;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/css/autoFill.foundation.css",
    "content": "div.dt-autofill-handle {\n  position: absolute;\n  height: 8px;\n  width: 8px;\n  z-index: 10;\n  box-sizing: border-box;\n  background: #008CBA;\n  cursor: pointer;\n}\n\ndiv.dtk-focus-alt div.dt-autofill-handle {\n  background: #ff8b33;\n}\n\ndiv.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: #008CBA;\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px);\n}\ndiv.dt-autofill-select.top, div.dt-autofill-select.bottom {\n  height: 3px;\n  margin-top: -1px;\n}\ndiv.dt-autofill-select.left, div.dt-autofill-select.right {\n  width: 3px;\n  margin-left: -1px;\n}\n\ndiv.dt-autofill-list {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 104;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dt-autofill-list div.dtaf-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button {\n  display: block;\n  width: 100%;\n  margin: 1em 0;\n  padding: 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:hover {\n  background-color: #ebebeb;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:first-child {\n  margin-top: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:last-child {\n  margin-bottom: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button input[type=number] {\n  padding: 6px;\n  width: 30px;\n  margin: -2px 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button span {\n  float: right;\n}\n\ndiv.dtaf-popover-closeable {\n  padding-top: 2.5em;\n}\n\ndiv.dt-autofill-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n  z-index: 103;\n}\n\nhtml.dark div.dt-autofill-handle {\n  background: rgb(110, 168, 254);\n}\nhtml.dark div.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: rgb(110, 168, 254);\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(0, 0, 0, 0.5) 5px, rgba(0, 0, 0, 0.5) 10px);\n}\nhtml.dark div.dt-autofill-list {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dt-autofill-list button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dt-autofill-list button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-autofill-handle {\n    height: 16px;\n    width: 16px;\n  }\n  div.dt-autofill-list {\n    width: 90%;\n    left: 74.5%;\n  }\n}\ndiv.dt-autofill-list button {\n  margin: 0;\n}\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/css/autoFill.jqueryui.css",
    "content": "div.dt-autofill-handle {\n  position: absolute;\n  height: 8px;\n  width: 8px;\n  z-index: 10;\n  box-sizing: border-box;\n  background: #3366ff;\n  cursor: pointer;\n}\n\ndiv.dtk-focus-alt div.dt-autofill-handle {\n  background: #ff8b33;\n}\n\ndiv.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: #4989de;\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px);\n}\ndiv.dt-autofill-select.top, div.dt-autofill-select.bottom {\n  height: 3px;\n  margin-top: -1px;\n}\ndiv.dt-autofill-select.left, div.dt-autofill-select.right {\n  width: 3px;\n  margin-left: -1px;\n}\n\ndiv.dt-autofill-list {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 104;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dt-autofill-list div.dtaf-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button {\n  display: block;\n  width: 100%;\n  margin: 1em 0;\n  padding: 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:hover {\n  background-color: #ebebeb;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:first-child {\n  margin-top: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:last-child {\n  margin-bottom: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button input[type=number] {\n  padding: 6px;\n  width: 30px;\n  margin: -2px 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button span {\n  float: right;\n}\n\ndiv.dtaf-popover-closeable {\n  padding-top: 2.5em;\n}\n\ndiv.dt-autofill-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n  z-index: 103;\n}\n\nhtml.dark div.dt-autofill-handle {\n  background: rgb(110, 168, 254);\n}\nhtml.dark div.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: rgb(110, 168, 254);\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(0, 0, 0, 0.5) 5px, rgba(0, 0, 0, 0.5) 10px);\n}\nhtml.dark div.dt-autofill-list {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dt-autofill-list button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dt-autofill-list button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-autofill-handle {\n    height: 16px;\n    width: 16px;\n  }\n  div.dt-autofill-list {\n    width: 90%;\n    left: 74.5%;\n  }\n}\ndiv.dt-autofill-list button {\n  padding: 0.35em 1em;\n}\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/css/autoFill.semanticui.css",
    "content": "div.dt-autofill-handle {\n  position: absolute;\n  height: 8px;\n  width: 8px;\n  z-index: 10;\n  box-sizing: border-box;\n  background: #888;\n  cursor: pointer;\n}\n\ndiv.dtk-focus-alt div.dt-autofill-handle {\n  background: #ff8b33;\n}\n\ndiv.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: #888;\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px);\n}\ndiv.dt-autofill-select.top, div.dt-autofill-select.bottom {\n  height: 3px;\n  margin-top: -1px;\n}\ndiv.dt-autofill-select.left, div.dt-autofill-select.right {\n  width: 3px;\n  margin-left: -1px;\n}\n\ndiv.dt-autofill-list {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 104;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dt-autofill-list div.dtaf-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button {\n  display: block;\n  width: 100%;\n  margin: 1em 0;\n  padding: 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:hover {\n  background-color: #ebebeb;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:first-child {\n  margin-top: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button:last-child {\n  margin-bottom: 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button input[type=number] {\n  padding: 6px;\n  width: 30px;\n  margin: -2px 0;\n}\ndiv.dt-autofill-list > div.dt-autofill-list-items > button span {\n  float: right;\n}\n\ndiv.dtaf-popover-closeable {\n  padding-top: 2.5em;\n}\n\ndiv.dt-autofill-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n  z-index: 103;\n}\n\nhtml.dark div.dt-autofill-handle {\n  background: rgb(110, 168, 254);\n}\nhtml.dark div.dt-autofill-select {\n  position: absolute;\n  z-index: 1001;\n  background-color: rgb(110, 168, 254);\n  background-image: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(0, 0, 0, 0.5) 5px, rgba(0, 0, 0, 0.5) 10px);\n}\nhtml.dark div.dt-autofill-list {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dt-autofill-list button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dt-autofill-list button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-autofill-handle {\n    height: 16px;\n    width: 16px;\n  }\n  div.dt-autofill-list {\n    width: 90%;\n    left: 74.5%;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/js/autoFill.bootstrap.js",
    "content": "/*! Bootstrap integration for DataTables' AutoFill\n * ©2015 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-autofill'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.AutoFill ) {\n\t\t\t\trequire('datatables.net-autofill')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nDataTable.AutoFill.classes.btn = 'btn btn-primary';\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/js/autoFill.bootstrap4.js",
    "content": "/*! Bootstrap integration for DataTables' AutoFill\n * ©2015 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-autofill'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.AutoFill ) {\n\t\t\t\trequire('datatables.net-autofill')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nDataTable.AutoFill.classes.btn = 'btn btn-primary';\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/js/autoFill.bootstrap5.js",
    "content": "/*! Bootstrap integration for DataTables' AutoFill\n * ©2015 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-autofill'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.AutoFill ) {\n\t\t\t\trequire('datatables.net-autofill')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nDataTable.AutoFill.classes.btn = 'btn btn-primary';\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/js/autoFill.bulma.js",
    "content": "/*! Bulma integration for DataTables' AutoFill\n * ©2015 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-autofill'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.AutoFill ) {\n\t\t\t\trequire('datatables.net-autofill')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nDataTable.AutoFill.classes.btn = 'button is-small';\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/js/autoFill.dataTables.js",
    "content": "/*! DataTables styling wrapper for AutoFill\n * ©2018 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-autofill'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.AutoFill ) {\n\t\t\t\trequire('datatables.net-autofill')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/js/autoFill.foundation.js",
    "content": "/*! Foundation integration for DataTables' AutoFill\n * ©2015 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-autofill'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.AutoFill ) {\n\t\t\t\trequire('datatables.net-autofill')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nDataTable.AutoFill.classes.btn = 'button tiny';\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/js/autoFill.jqueryui.js",
    "content": "/*! jQuery UI integration for DataTables' AutoFill\n * ©2015 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-autofill'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.AutoFill ) {\n\t\t\t\trequire('datatables.net-autofill')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nDataTable.AutoFill.classes.btn = 'ui-button ui-state-default ui-corner-all';\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/js/autoFill.semanticui.js",
    "content": "/*! Bootstrap integration for DataTables' AutoFill\n * ©2015 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-autofill'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.AutoFill ) {\n\t\t\t\trequire('datatables.net-autofill')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nDataTable.AutoFill.classes.btn = 'ui button';\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/AutoFill-2.6.0/js/dataTables.autoFill.js",
    "content": "/*! AutoFill 2.6.0\n * ©2008-2023 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     AutoFill\n * @description Add Excel like click and drag auto-fill options to DataTables\n * @version     2.6.0\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\nvar _instance = 0;\n\n/** \n * AutoFill provides Excel like auto-fill features for a DataTable\n *\n * @class AutoFill\n * @constructor\n * @param {object} oTD DataTables settings object\n * @param {object} oConfig Configuration object for AutoFill\n */\nvar AutoFill = function( dt, opts )\n{\n\tif ( ! DataTable.versionCheck || ! DataTable.versionCheck( '1.10.8' ) ) {\n\t\tthrow( \"Warning: AutoFill requires DataTables 1.10.8 or greater\");\n\t}\n\n\t// User and defaults configuration object\n\tthis.c = $.extend( true, {},\n\t\tDataTable.defaults.autoFill,\n\t\tAutoFill.defaults,\n\t\topts\n\t);\n\n\t/**\n\t * @namespace Settings object which contains customisable information for AutoFill instance\n\t */\n\tthis.s = {\n\t\t/** @type {DataTable.Api} DataTables' API instance */\n\t\tdt: new DataTable.Api( dt ),\n\n\t\t/** @type {String} Unique namespace for events attached to the document */\n\t\tnamespace: '.autoFill'+(_instance++),\n\n\t\t/** @type {Object} Cached dimension information for use in the mouse move event handler */\n\t\tscroll: {},\n\n\t\t/** @type {integer} Interval object used for smooth scrolling */\n\t\tscrollInterval: null,\n\n\t\thandle: {\n\t\t\theight: 0,\n\t\t\twidth: 0\n\t\t},\n\n\t\t/**\n\t\t * Enabled setting\n\t\t * @type {Boolean}\n\t\t */\n\t\tenabled: false\n\t};\n\n\n\t/**\n\t * @namespace Common and useful DOM elements for the class instance\n\t */\n\tthis.dom = {\n\t\tcloseButton: $('<div class=\"dtaf-popover-close\">&times;</div>'),\n\n\t\t/** @type {jQuery} AutoFill handle */\n\t\thandle: $('<div class=\"dt-autofill-handle\"/>'),\n\n\t\t/**\n\t\t * @type {Object} Selected cells outline - Need to use 4 elements,\n\t\t *   otherwise the mouse over if you back into the selected rectangle\n\t\t *   will be over that element, rather than the cells!\n\t\t */\n\t\tselect: {\n\t\t\ttop:    $('<div class=\"dt-autofill-select top\"/>'),\n\t\t\tright:  $('<div class=\"dt-autofill-select right\"/>'),\n\t\t\tbottom: $('<div class=\"dt-autofill-select bottom\"/>'),\n\t\t\tleft:   $('<div class=\"dt-autofill-select left\"/>')\n\t\t},\n\n\t\t/** @type {jQuery} Fill type chooser background */\n\t\tbackground: $('<div class=\"dt-autofill-background\"/>'),\n\n\t\t/** @type {jQuery} Fill type chooser */\n\t\tlist: $('<div class=\"dt-autofill-list\">'+this.s.dt.i18n('autoFill.info', '')+'</div>')\n\t\t\t.attr('aria-modal', true)\n\t\t\t.attr('role', 'dialog')\n\t\t\t.append('<div class=\"dt-autofill-list-items\"></div>'),\n\n\t\t/** @type {jQuery} DataTables scrolling container */\n\t\tdtScroll: null,\n\n\t\t/** @type {jQuery} Offset parent element */\n\t\toffsetParent: null\n\t};\n\n\n\t/* Constructor logic */\n\tthis._constructor();\n};\n\n\n\n$.extend( AutoFill.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods (exposed via the DataTables API below)\n\t */\n\tenabled: function ()\n\t{\n\t\treturn this.s.enabled;\n\t},\n\n\n\tenable: function ( flag )\n\t{\n\t\tvar that = this;\n\n\t\tif ( flag === false ) {\n\t\t\treturn this.disable();\n\t\t}\n\n\t\tthis.s.enabled = true;\n\n\t\tthis._focusListener();\n\n\t\tthis.dom.handle.on( 'mousedown touchstart', function (e) {\n\t\t\tthat._mousedown( e );\n\t\t\treturn false;\n\t\t} );\n\n\t\t$(window).on('resize', function() {\n\t\t\tvar handle = $('div.dt-autofill-handle');\n\t\t\tif(handle.length > 0 && that.dom.attachedTo !== undefined) {\n\t\t\t\tthat._attach(that.dom.attachedTo)\n\t\t\t}\n\t\t})\n\n\t\tlet orientationReset = function() {\n\t\t\tthat.s.handle = {\n\t\t\t\theight: false,\n\t\t\t\twidth: false\n\t\t\t};\n\t\t\t$(that.dom.handle).css({\n\t\t\t\t'height': '',\n\t\t\t\t'width': ''\n\t\t\t})\n\t\t\tif(that.dom.attachedTo !== undefined) {\n\t\t\t\tthat._attach(that.dom.attachedTo)\n\t\t\t}\n\t\t}\n\n\t\t$(window)\n\t\t\t.on('orientationchange', function() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\torientationReset();\n\t\t\t\t\tsetTimeout(orientationReset, 150);\n\t\t\t\t}, 50);\n\t\t\t});\n\n\t\treturn this;\n\t},\n\n\tdisable: function ()\n\t{\n\t\tthis.s.enabled = false;\n\n\t\tthis._focusListenerRemove();\n\n\t\treturn this;\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialise the RowReorder instance\n\t *\n\t * @private\n\t */\n\t_constructor: function ()\n\t{\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar dtScroll = $('div.dataTables_scrollBody', this.s.dt.table().container());\n\n\t\t// Make the instance accessible to the API\n\t\tdt.settings()[0].autoFill = this;\n\n\t\tif ( dtScroll.length ) {\n\t\t\tthis.dom.dtScroll = dtScroll;\n\n\t\t\t// Need to scroll container to be the offset parent\n\t\t\tif ( dtScroll.css('position') === 'static' ) {\n\t\t\t\tdtScroll.css( 'position', 'relative' );\n\t\t\t}\n\t\t}\n\n\t\tif ( this.c.enable !== false ) {\n\t\t\tthis.enable();\n\t\t}\n\n\t\tdt.on( 'destroy.autoFill', function () {\n\t\t\tthat._focusListenerRemove();\n\t\t} );\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Display the AutoFill drag handle by appending it to a table cell. This\n\t * is the opposite of the _detach method.\n\t *\n\t * @param  {node} node TD/TH cell to insert the handle into\n\t * @private\n\t */\n\t_attach: function ( node )\n\t{\n\t\tvar dt = this.s.dt;\n\t\tvar idx = dt.cell( node ).index();\n\t\tvar handle = this.dom.handle;\n\t\tvar handleDim = this.s.handle;\n\n\t\tif ( ! idx || dt.columns( this.c.columns ).indexes().indexOf( idx.column ) === -1 ) {\n\t\t\tthis._detach();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! this.dom.offsetParent ) {\n\t\t\t// We attach to the table's offset parent\n\t\t\tthis.dom.offsetParent = $( dt.table().node() ).offsetParent();\n\t\t}\n\n\t\tif ( ! handleDim.height || ! handleDim.width ) {\n\t\t\t// Append to document so we can get its size. Not expecting it to\n\t\t\t// change during the life time of the page\n\t\t\thandle.appendTo( 'body' );\n\t\t\thandleDim.height = handle.outerHeight();\n\t\t\thandleDim.width = handle.outerWidth();\n\t\t}\n\n\t\t// Might need to go through multiple offset parents\n\t\tvar offset = this._getPosition( node, this.dom.offsetParent );\n\t\t\n\t\tthis.dom.attachedTo = node;\n\t\thandle\n\t\t\t.css( {\n\t\t\t\ttop: offset.top + node.offsetHeight - handleDim.height,\n\t\t\t\tleft: offset.left + node.offsetWidth - handleDim.width\n\t\t\t} )\n\t\t\t.appendTo( this.dom.offsetParent );\n\t},\n\n\n\t/**\n\t * Determine can the fill type should be. This can be automatic, or ask the\n\t * end user.\n\t *\n\t * @param {array} cells Information about the selected cells from the key\n\t *     up function\n\t * @private\n\t */\n\t_actionSelector: function ( cells )\n\t{\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar actions = AutoFill.actions;\n\t\tvar available = [];\n\n\t\t// \"Ask\" each plug-in if it wants to handle this data\n\t\t$.each( actions, function ( key, action ) {\n\t\t\tif ( action.available( dt, cells ) ) {\n\t\t\t\tavailable.push( key );\n\t\t\t}\n\t\t} );\n\n\t\tif ( available.length === 1 && this.c.alwaysAsk === false ) {\n\t\t\t// Only one action available - enact it immediately\n\t\t\tvar result = actions[ available[0] ].execute( dt, cells );\n\t\t\tthis._update( result, cells );\n\t\t}\n\t\telse if ( available.length > 1 || this.c.alwaysAsk ) {\n\t\t\t// Multiple actions available - ask the end user what they want to do\n\t\t\tvar list = this.dom.list.children('div.dt-autofill-list-items').empty();\n\n\t\t\t// Add a cancel option\n\t\t\tavailable.push( 'cancel' );\n\n\t\t\t$.each( available, function ( i, name ) {\n\t\t\t\tlist.append( $('<button/>')\n\t\t\t\t\t.html(actions[ name ].option( dt, cells ))\n\t\t\t\t\t.append( $('<span class=\"dt-autofill-button\"/>').html(dt.i18n('autoFill.button', '&gt;')))\n\t\t\t\t\t.on( 'click', function () {\n\t\t\t\t\t\tvar result = actions[ name ].execute(\n\t\t\t\t\t\t\tdt, cells, $(this).closest('li')\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthat._update( result, cells );\n\n\t\t\t\t\t\tthat.dom.background.remove();\n\t\t\t\t\t\tthat.dom.list.remove();\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t} );\n\n\t\t\tthis.dom.background.appendTo( 'body' );\n\t\t\tthis.dom.background.one('click', function() {\n\t\t\t\tthat.dom.background.remove();\n\t\t\t\tthat.dom.list.remove();\n\t\t\t})\n\t\t\tthis.dom.list.appendTo( 'body' );\n\n\t\t\tif (this.c.closeButton) {\n\t\t\t\tthis.dom.list.prepend(this.dom.closeButton).addClass(AutoFill.classes.closeable)\n\t\t\t\tthis.dom.closeButton.on('click', function() {\n\t\t\t\t\treturn that.dom.background.click()\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.dom.list.css( 'margin-top', this.dom.list.outerHeight()/2 * -1 );\n\t\t}\n\t},\n\n\n\t/**\n\t * Remove the AutoFill handle from the document\n\t *\n\t * @private\n\t */\n\t_detach: function ()\n\t{\n\t\tthis.dom.attachedTo = null;\n\t\tthis.dom.handle.detach();\n\t},\n\n\n\t/**\n\t * Draw the selection outline by calculating the range between the start\n\t * and end cells, then placing the highlighting elements to draw a rectangle\n\t *\n\t * @param  {node}   target End cell\n\t * @param  {object} e      Originating event\n\t * @private\n\t */\n\t_drawSelection: function ( target, e )\n\t{\n\t\t// Calculate boundary for start cell to this one\n\t\tvar dt = this.s.dt;\n\t\tvar start = this.s.start;\n\t\tvar startCell = $(this.dom.start);\n\t\tvar end = {\n\t\t\trow: this.c.vertical ?\n\t\t\t\tdt.rows( { page: 'current' } ).nodes().indexOf( target.parentNode ) :\n\t\t\t\tstart.row,\n\t\t\tcolumn: this.c.horizontal ?\n\t\t\t\t$(target).index() :\n\t\t\t\tstart.column\n\t\t};\n\t\tvar colIndx = dt.column.index( 'toData', end.column );\n\t\tvar endRow =  dt.row( ':eq('+end.row+')', { page: 'current' } ); // Workaround for M581\n\t\tvar endCell = $( dt.cell( endRow.index(), colIndx ).node() );\n\n\t\t// Be sure that is a DataTables controlled cell\n\t\tif ( ! dt.cell( endCell ).any() ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// if target is not in the columns available - do nothing\n\t\tif ( dt.columns( this.c.columns ).indexes().indexOf( colIndx ) === -1 || end.row === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.s.end = end;\n\n\t\tvar top, bottom, left, right, height, width;\n\n\t\ttop    = start.row    < end.row    ? startCell : endCell;\n\t\tbottom = start.row    < end.row    ? endCell   : startCell;\n\t\tleft   = start.column < end.column ? startCell : endCell;\n\t\tright  = start.column < end.column ? endCell   : startCell;\n\n\t\ttop    = this._getPosition( top.get(0) ).top;\n\t\tleft   = this._getPosition( left.get(0) ).left;\n\t\theight = this._getPosition( bottom.get(0) ).top + bottom.outerHeight() - top;\n\t\twidth  = this._getPosition( right.get(0) ).left + right.outerWidth() - left;\n\n\t\tvar select = this.dom.select;\n\t\tselect.top.css( {\n\t\t\ttop: top,\n\t\t\tleft: left,\n\t\t\twidth: width\n\t\t} );\n\n\t\tselect.left.css( {\n\t\t\ttop: top,\n\t\t\tleft: left,\n\t\t\theight: height\n\t\t} );\n\n\t\tselect.bottom.css( {\n\t\t\ttop: top + height,\n\t\t\tleft: left,\n\t\t\twidth: width\n\t\t} );\n\n\t\tselect.right.css( {\n\t\t\ttop: top,\n\t\t\tleft: left + width,\n\t\t\theight: height\n\t\t} );\n\t},\n\n\n\t/**\n\t * Use the Editor API to perform an update based on the new data for the\n\t * cells\n\t *\n\t * @param {array} cells Information about the selected cells from the key\n\t *     up function\n\t * @private\n\t */\n\t_editor: function ( cells )\n\t{\n\t\tvar dt = this.s.dt;\n\t\tvar editor = this.c.editor;\n\n\t\tif ( ! editor ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Build the object structure for Editor's multi-row editing\n\t\tvar idValues = {};\n\t\tvar nodes = [];\n\t\tvar fields = editor.fields();\n\n\t\tfor ( var i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\tfor ( var j=0, jen=cells[i].length ; j<jen ; j++ ) {\n\t\t\t\tvar cell = cells[i][j];\n\n\t\t\t\t// Determine the field name for the cell being edited\n\t\t\t\tvar col = dt.settings()[0].aoColumns[ cell.index.column ];\n\t\t\t\tvar fieldName = col.editField;\n\n\t\t\t\tif ( fieldName === undefined ) {\n\t\t\t\t\tvar dataSrc = col.mData;\n\n\t\t\t\t\t// dataSrc is the `field.data` property, but we need to set\n\t\t\t\t\t// using the field name, so we need to translate from the\n\t\t\t\t\t// data to the name\n\t\t\t\t\tfor ( var k=0, ken=fields.length ; k<ken ; k++ ) {\n\t\t\t\t\t\tvar field = editor.field( fields[k] );\n\n\t\t\t\t\t\tif ( field.dataSrc() === dataSrc ) {\n\t\t\t\t\t\t\tfieldName = field.name();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( ! fieldName ) {\n\t\t\t\t\tthrow 'Could not automatically determine field data. '+\n\t\t\t\t\t\t'Please see https://datatables.net/tn/11';\n\t\t\t\t}\n\n\t\t\t\tif ( ! idValues[ fieldName ] ) {\n\t\t\t\t\tidValues[ fieldName ] = {};\n\t\t\t\t}\n\n\t\t\t\tvar id = dt.row( cell.index.row ).id();\n\t\t\t\tidValues[ fieldName ][ id ] = cell.set;\n\n\t\t\t\t// Keep a list of cells so we can activate the bubble editing\n\t\t\t\t// with them\n\t\t\t\tnodes.push( cell.index );\n\t\t\t}\n\t\t}\n\n\t\t// Perform the edit using bubble editing as it allows us to specify\n\t\t// the cells to be edited, rather than using full rows\n\t\teditor\n\t\t\t.bubble( nodes, false )\n\t\t\t.multiSet( idValues )\n\t\t\t.submit();\n\t},\n\n\n\t/**\n\t * Emit an event on the DataTable for listeners\n\t *\n\t * @param  {string} name Event name\n\t * @param  {array} args Event arguments\n\t * @private\n\t */\n\t_emitEvent: function ( name, args )\n\t{\n\t\tthis.s.dt.iterator( 'table', function ( ctx, i ) {\n\t\t\t$(ctx.nTable).triggerHandler( name+'.dt', args );\n\t\t} );\n\t},\n\n\n\t/**\n\t * Attach suitable listeners (based on the configuration) that will attach\n\t * and detach the AutoFill handle in the document.\n\t *\n\t * @private\n\t */\n\t_focusListener: function ()\n\t{\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar namespace = this.s.namespace;\n\t\tvar focus = this.c.focus !== null ?\n\t\t\tthis.c.focus :\n\t\t\tdt.init().keys || dt.settings()[0].keytable ?\n\t\t\t\t'focus' :\n\t\t\t\t'hover';\n\n\t\t// All event listeners attached here are removed in the `destroy`\n\t\t// callback in the constructor\n\t\tif ( focus === 'focus' ) {\n\t\t\tdt\n\t\t\t\t.on( 'key-focus.autoFill', function ( e, dt, cell ) {\n\t\t\t\t\tthat._attach( cell.node() );\n\t\t\t\t} )\n\t\t\t\t.on( 'key-blur.autoFill', function ( e, dt, cell ) {\n\t\t\t\t\tthat._detach();\n\t\t\t\t} );\n\t\t}\n\t\telse if ( focus === 'click' ) {\n\t\t\t$(dt.table().body()).on( 'click'+namespace, 'td, th', function (e) {\n\t\t\t\tthat._attach( this );\n\t\t\t} );\n\n\t\t\t$(document.body).on( 'click'+namespace, function (e) {\n\t\t\t\tif ( ! $(e.target).parents().filter( dt.table().body() ).length ) {\n\t\t\t\t\tthat._detach();\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\telse {\n\t\t\t$(dt.table().body())\n\t\t\t\t.on( 'mouseenter'+namespace+' touchstart'+namespace, 'td, th', function (e) {\n\t\t\t\t\tthat._attach( this );\n\t\t\t\t} )\n\t\t\t\t.on( 'mouseleave'+namespace+'touchend'+namespace, function (e) {\n\t\t\t\t\tif ( $(e.relatedTarget).hasClass('dt-autofill-handle') ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthat._detach();\n\t\t\t\t} );\n\n\t\t\t\n\t\t}\n\t},\n\n\n\t_focusListenerRemove: function ()\n\t{\n\t\tvar dt = this.s.dt;\n\n\t\tdt.off( '.autoFill' );\n\t\t$(dt.table().body()).off( this.s.namespace );\n\t\t$(document.body).off( this.s.namespace );\n\t},\n\n\n\t/**\n\t * Get the position of a node, relative to another, including any scrolling\n\t * offsets.\n\t * @param  {Node}   node         Node to get the position of\n\t * @param  {jQuery} targetParent Node to use as the parent\n\t * @return {object}              Offset calculation\n\t * @private\n\t */\n\t_getPosition: function ( node, targetParent )\n\t{\n\t\tvar\n\t\t\tcurrNode = node,\n\t\t\tcurrOffsetParent,\n\t\t\ttop = 0,\n\t\t\tleft = 0;\n\n\t\tif ( ! targetParent ) {\n\t\t\ttargetParent = $( $( this.s.dt.table().node() )[0].offsetParent );\n\t\t}\n\n\t\tdo {\n\t\t\t// Don't use jQuery().position() the behaviour changes between 1.x and 3.x for\n\t\t\t// tables\n\t\t\tvar positionTop = currNode.offsetTop;\n\t\t\tvar positionLeft = currNode.offsetLeft;\n\n\t\t\t// jQuery doesn't give a `table` as the offset parent oddly, so use DOM directly\n\t\t\tcurrOffsetParent = $( currNode.offsetParent );\n\n\t\t\ttop += positionTop + parseInt( currOffsetParent.css('border-top-width') || 0 ) * 1;\n\t\t\tleft += positionLeft + parseInt( currOffsetParent.css('border-left-width') || 0 ) * 1;\n\n\t\t\t// Emergency fall back. Shouldn't happen, but just in case!\n\t\t\tif ( currNode.nodeName.toLowerCase() === 'body' ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcurrNode = currOffsetParent.get(0); // for next loop\n\t\t}\n\t\twhile ( currOffsetParent.get(0) !== targetParent.get(0) )\n\n\t\treturn {\n\t\t\ttop: top,\n\t\t\tleft: left\n\t\t};\n\t},\n\n\n\t/**\n\t * Start mouse drag - selects the start cell\n\t *\n\t * @param  {object} e Mouse down event\n\t * @private\n\t */\n\t_mousedown: function ( e )\n\t{\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\n\t\tthis.dom.start = this.dom.attachedTo;\n\t\tthis.s.start = {\n\t\t\trow: dt.rows( { page: 'current' } ).nodes().indexOf( $(this.dom.start).parent()[0] ),\n\t\t\tcolumn: $(this.dom.start).index()\n\t\t};\n\n\t\t$(document.body)\n\t\t\t.on( 'mousemove.autoFill touchmove.autoFill', function (e) {\n\t\t\t\tthat._mousemove( e );\n\t\t\t\t// If it is a touch event then when the touch ends we need to remove the handle\n\t\t\t\tif(e.type === 'touchmove') {\n\t\t\t\t\t$(document.body).one('touchend.autoFill', function() {\n\t\t\t\t\t\tthat._detach();\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'mouseup.autoFill touchend.autoFill', function (e) {\n\t\t\t\tthat._mouseup( e );\n\t\t\t} );\n\n\t\tvar select = this.dom.select;\n\t\tvar offsetParent = $( dt.table().node() ).offsetParent();\n\t\tselect.top.appendTo( offsetParent );\n\t\tselect.left.appendTo( offsetParent );\n\t\tselect.right.appendTo( offsetParent );\n\t\tselect.bottom.appendTo( offsetParent );\n\n\t\tthis._drawSelection( this.dom.start, e );\n\n\t\tthis.dom.handle.css( 'display', 'none' );\n\n\t\t// Cache scrolling information so mouse move doesn't need to read.\n\t\t// This assumes that the window and DT scroller will not change size\n\t\t// during an AutoFill drag, which I think is a fair assumption\n\t\tvar scrollWrapper = this.dom.dtScroll;\n\t\tthis.s.scroll = {\n\t\t\twindowHeight: $(window).height(),\n\t\t\twindowWidth:  $(window).width(),\n\t\t\tdtTop:        scrollWrapper ? scrollWrapper.offset().top : null,\n\t\t\tdtLeft:       scrollWrapper ? scrollWrapper.offset().left : null,\n\t\t\tdtHeight:     scrollWrapper ? scrollWrapper.outerHeight() : null,\n\t\t\tdtWidth:      scrollWrapper ? scrollWrapper.outerWidth() : null\n\t\t};\n\t},\n\n\n\t/**\n\t * Mouse drag - selects the end cell and update the selection display for\n\t * the end user\n\t *\n\t * @param  {object} e Mouse move event\n\t * @private\n\t */\n\t_mousemove: function ( e )\n\t{\n\t\tvar target = e.touches && e.touches.length\n\t\t\t? document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY)\n\t\t\t: e.target;\n\t\tvar name = target.nodeName.toLowerCase();\n\n\t\tif ( name !== 'td' && name !== 'th' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._drawSelection( target, e );\n\t\tthis._shiftScroll( e );\n\t},\n\n\n\t/**\n\t * End mouse drag - perform the update actions\n\t *\n\t * @param  {object} e Mouse up event\n\t * @private\n\t */\n\t_mouseup: function ( e )\n\t{\n\t\t$(document.body).off( '.autoFill' );\n\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar select = this.dom.select;\n\t\tselect.top.remove();\n\t\tselect.left.remove();\n\t\tselect.right.remove();\n\t\tselect.bottom.remove();\n\n\t\tthis.dom.handle.css( 'display', 'block' );\n\n\t\t// Display complete - now do something useful with the selection!\n\t\tvar start = this.s.start;\n\t\tvar end = this.s.end;\n\n\t\t// Haven't selected multiple cells, so nothing to do\n\t\tif ( start.row === end.row && start.column === end.column ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar startDt = dt.cell( ':eq('+start.row+')', start.column+':visible', {page:'current'} );\n\n\t\t// If Editor is active inside this cell (inline editing) we need to wait for Editor to\n\t\t// submit and then we can loop back and trigger the fill.\n\t\tif ( $('div.DTE', startDt.node()).length ) {\n\t\t\tvar editor = dt.editor();\n\n\t\t\teditor\n\t\t\t\t.on( 'submitSuccess.dtaf close.dtaf', function () {\n\t\t\t\t\teditor.off( '.dtaf');\n\n\t\t\t\t\tsetTimeout( function () {\n\t\t\t\t\t\tthat._mouseup( e );\n\t\t\t\t\t}, 100 );\n\t\t\t\t} )\n\t\t\t\t.on( 'submitComplete.dtaf preSubmitCancelled.dtaf close.dtaf', function () {\n\t\t\t\t\teditor.off( '.dtaf');\n\t\t\t\t} );\n\n\t\t\t// Make the current input submit\n\t\t\teditor.submit();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Build a matrix representation of the selected rows\n\t\tvar rows       = this._range( start.row, end.row );\n\t\tvar columns    = this._range( start.column, end.column );\n\t\tvar selected   = [];\n\t\tvar dtSettings = dt.settings()[0];\n\t\tvar dtColumns  = dtSettings.aoColumns;\n\t\tvar enabledColumns = dt.columns( this.c.columns ).indexes();\n\n\t\t// Can't use Array.prototype.map as IE8 doesn't support it\n\t\t// Can't use $.map as jQuery flattens 2D arrays\n\t\t// Need to use a good old fashioned for loop\n\t\tfor ( var rowIdx=0 ; rowIdx<rows.length ; rowIdx++ ) {\n\t\t\tselected.push(\n\t\t\t\t$.map( columns, function (column) {\n\t\t\t\t\tvar row = dt.row( ':eq('+rows[rowIdx]+')', {page:'current'} ); // Workaround for M581\n\t\t\t\t\tvar cell = dt.cell( row.index(), column+':visible' );\n\t\t\t\t\tvar data = cell.data();\n\t\t\t\t\tvar cellIndex = cell.index();\n\t\t\t\t\tvar editField = dtColumns[ cellIndex.column ].editField;\n\n\t\t\t\t\tif ( editField !== undefined ) {\n\t\t\t\t\t\tdata = dtSettings.oApi._fnGetObjectDataFn( editField )( dt.row( cellIndex.row ).data() );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( enabledColumns.indexOf(cellIndex.column) === -1 ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcell:  cell,\n\t\t\t\t\t\tdata:  data,\n\t\t\t\t\t\tlabel: cell.data(),\n\t\t\t\t\t\tindex: cellIndex\n\t\t\t\t\t};\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\tthis._actionSelector( selected );\n\t\t\n\t\t// Stop shiftScroll\n\t\tclearInterval( this.s.scrollInterval );\n\t\tthis.s.scrollInterval = null;\n\t},\n\n\n\t/**\n\t * Create an array with a range of numbers defined by the start and end\n\t * parameters passed in (inclusive!).\n\t * \n\t * @param  {integer} start Start\n\t * @param  {integer} end   End\n\t * @private\n\t */\n\t_range: function ( start, end )\n\t{\n\t\tvar out = [];\n\t\tvar i;\n\n\t\tif ( start <= end ) {\n\t\t\tfor ( i=start ; i<=end ; i++ ) {\n\t\t\t\tout.push( i );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( i=start ; i>=end ; i-- ) {\n\t\t\t\tout.push( i );\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t},\n\n\n\t/**\n\t * Move the window and DataTables scrolling during a drag to scroll new\n\t * content into view. This is done by proximity to the edge of the scrolling\n\t * container of the mouse - for example near the top edge of the window\n\t * should scroll up. This is a little complicated as there are two elements\n\t * that can be scrolled - the window and the DataTables scrolling view port\n\t * (if scrollX and / or scrollY is enabled).\n\t *\n\t * @param  {object} e Mouse move event object\n\t * @private\n\t */\n\t_shiftScroll: function ( e )\n\t{\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar scroll = this.s.scroll;\n\t\tvar runInterval = false;\n\t\tvar scrollSpeed = 5;\n\t\tvar buffer = 65;\n\n\t\t// Different values if using a touchscreen\n\t\tvar pageX = !e.type.includes('touch') ? e.pageX - window.scrollX :e.touches[0].clientX;\n\t\tvar pageY = !e.type.includes('touch') ? e.pageY - window.scrollY :e.touches[0].clientY;\n\t\tvar\n\t\t\twindowY = pageY,\n\t\t\twindowX = pageX,\n\t\t\twindowVert, windowHoriz,\n\t\t\tdtVert, dtHoriz;\n\n\t\t// Window calculations - based on the mouse position in the window,\n\t\t// regardless of scrolling\n\t\tif ( windowY < buffer ) {\n\t\t\twindowVert = scrollSpeed * -1;\n\t\t}\n\t\telse if ( windowY > scroll.windowHeight - buffer ) {\n\t\t\twindowVert = scrollSpeed;\n\t\t}\n\n\t\tif ( windowX < buffer ) {\n\t\t\twindowHoriz = scrollSpeed * -1;\n\t\t}\n\t\telse if ( windowX > scroll.windowWidth - buffer ) {\n\t\t\twindowHoriz = scrollSpeed;\n\t\t}\n\n\t\t// DataTables scrolling calculations - based on the table's position in\n\t\t// the document and the mouse position on the page\n\t\tif ( scroll.dtTop !== null && pageY < scroll.dtTop + buffer ) {\n\t\t\tdtVert = scrollSpeed * -1;\n\t\t}\n\t\telse if ( scroll.dtTop !== null && pageY > scroll.dtTop + scroll.dtHeight - buffer ) {\n\t\t\tdtVert = scrollSpeed;\n\t\t}\n\n\t\tif ( scroll.dtLeft !== null && pageX < scroll.dtLeft + buffer ) {\n\t\t\tdtHoriz = scrollSpeed * -1;\n\t\t}\n\t\telse if ( scroll.dtLeft !== null && pageX > scroll.dtLeft + scroll.dtWidth - buffer ) {\n\t\t\tdtHoriz = scrollSpeed;\n\t\t}\n\n\t\t// This is where it gets interesting. We want to continue scrolling\n\t\t// without requiring a mouse move, so we need an interval to be\n\t\t// triggered. The interval should continue until it is no longer needed,\n\t\t// but it must also use the latest scroll commands (for example consider\n\t\t// that the mouse might move from scrolling up to scrolling left, all\n\t\t// with the same interval running. We use the `scroll` object to \"pass\"\n\t\t// this information to the interval. Can't use local variables as they\n\t\t// wouldn't be the ones that are used by an already existing interval!\n\t\tif ( windowVert || windowHoriz || dtVert || dtHoriz ) {\n\t\t\tscroll.windowVert = windowVert;\n\t\t\tscroll.windowHoriz = windowHoriz;\n\t\t\tscroll.dtVert = dtVert;\n\t\t\tscroll.dtHoriz = dtHoriz;\n\t\t\trunInterval = true;\n\t\t}\n\t\telse if ( this.s.scrollInterval ) {\n\t\t\t// Don't need to scroll - remove any existing timer\n\t\t\tclearInterval( this.s.scrollInterval );\n\t\t\tthis.s.scrollInterval = null;\n\t\t}\n\n\t\t// If we need to run the interval to scroll and there is no existing\n\t\t// interval (if there is an existing one, it will continue to run)\n\t\tif ( ! this.s.scrollInterval && runInterval ) {\n\t\t\tthis.s.scrollInterval = setInterval( function () {\n\t\t\t\t// Don't need to worry about setting scroll <0 or beyond the\n\t\t\t\t// scroll bound as the browser will just reject that.\n\t\t\t\twindow.scrollTo(window.scrollX + (scroll.windowHoriz ? scroll.windowHoriz : 0), window.scrollY + (scroll.windowVert ? scroll.windowVert : 0))\n\n\t\t\t\t// DataTables scrolling\n\t\t\t\tif ( scroll.dtVert || scroll.dtHoriz ) {\n\t\t\t\t\tvar scroller = that.dom.dtScroll[0];\n\n\t\t\t\t\tif ( scroll.dtVert ) {\n\t\t\t\t\t\tscroller.scrollTop += scroll.dtVert;\n\t\t\t\t\t}\n\t\t\t\t\tif ( scroll.dtHoriz ) {\n\t\t\t\t\t\tscroller.scrollLeft += scroll.dtHoriz;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 20 );\n\t\t}\n\t},\n\n\n\t/**\n\t * Update the DataTable after the user has selected what they want to do\n\t *\n\t * @param  {false|undefined} result Return from the `execute` method - can\n\t *   be false internally to do nothing. This is not documented for plug-ins\n\t *   and is used only by the cancel option.\n\t * @param {array} cells Information about the selected cells from the key\n\t *     up function, argumented with the set values\n\t * @private\n\t */\n\t_update: function ( result, cells )\n\t{\n\t\t// Do nothing on `false` return from an execute function\n\t\tif ( result === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dt = this.s.dt;\n\t\tvar cell;\n\t\tvar columns = dt.columns( this.c.columns ).indexes();\n\n\t\t// Potentially allow modifications to the cells matrix\n\t\tthis._emitEvent( 'preAutoFill', [ dt, cells ] );\n\n\t\tthis._editor( cells );\n\n\t\t// Automatic updates are not performed if `update` is null and the\n\t\t// `editor` parameter is passed in - the reason being that Editor will\n\t\t// update the data once submitted\n\t\tvar update = this.c.update !== null ?\n\t\t\tthis.c.update :\n\t\t\tthis.c.editor ?\n\t\t\t\tfalse :\n\t\t\t\ttrue;\n\n\t\tif ( update ) {\n\t\t\tfor ( var i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tfor ( var j=0, jen=cells[i].length ; j<jen ; j++ ) {\n\t\t\t\t\tcell = cells[i][j];\n\n\t\t\t\t\tif ( columns.indexOf(cell.index.column) !== -1 ) {\n\t\t\t\t\t\tcell.cell.data( cell.set );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdt.draw(false);\n\t\t}\n\n\t\tthis._emitEvent( 'autoFill', [ dt, cells ] );\n\t}\n} );\n\n\n/**\n * AutoFill actions. The options here determine how AutoFill will fill the data\n * in the table when the user has selected a range of cells. Please see the\n * documentation on the DataTables site for full details on how to create plug-\n * ins.\n *\n * @type {Object}\n */\nAutoFill.actions = {\n\tincrement: {\n\t\tavailable: function ( dt, cells ) {\n\t\t\tvar d = cells[0][0].label;\n\n\t\t\t// is numeric test based on jQuery's old `isNumeric` function\n\t\t\treturn !isNaN( d - parseFloat( d ) );\n\t\t},\n\n\t\toption: function ( dt, cells ) {\n\t\t\treturn dt.i18n(\n\t\t\t\t'autoFill.increment',\n\t\t\t\t'Increment / decrement each cell by: <input type=\"number\" value=\"1\">'\n\t\t\t);\n\t\t},\n\n\t\texecute: function ( dt, cells, node ) {\n\t\t\tvar value = cells[0][0].data * 1;\n\t\t\tvar increment = $('input', node).val() * 1;\n\n\t\t\tfor ( var i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tfor ( var j=0, jen=cells[i].length ; j<jen ; j++ ) {\n\t\t\t\t\tcells[i][j].set = value;\n\n\t\t\t\t\tvalue += increment;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tfill: {\n\t\tavailable: function ( dt, cells ) {\n\t\t\treturn true;\n\t\t},\n\n\t\toption: function ( dt, cells ) {\n\t\t\treturn dt.i18n('autoFill.fill', 'Fill all cells with <i>%d</i>', cells[0][0].label );\n\t\t},\n\n\t\texecute: function ( dt, cells, node ) {\n\t\t\tvar value = cells[0][0].data;\n\n\t\t\tfor ( var i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tfor ( var j=0, jen=cells[i].length ; j<jen ; j++ ) {\n\t\t\t\t\tcells[i][j].set = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tfillHorizontal: {\n\t\tavailable: function ( dt, cells ) {\n\t\t\treturn cells.length > 1 && cells[0].length > 1;\n\t\t},\n\n\t\toption: function ( dt, cells ) {\n\t\t\treturn dt.i18n('autoFill.fillHorizontal', 'Fill cells horizontally' );\n\t\t},\n\n\t\texecute: function ( dt, cells, node ) {\n\t\t\tfor ( var i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tfor ( var j=0, jen=cells[i].length ; j<jen ; j++ ) {\n\t\t\t\t\tcells[i][j].set = cells[i][0].data;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tfillVertical: {\n\t\tavailable: function ( dt, cells ) {\n\t\t\treturn cells.length > 1 && cells[0].length > 1;\n\t\t},\n\n\t\toption: function ( dt, cells ) {\n\t\t\treturn dt.i18n('autoFill.fillVertical', 'Fill cells vertically' );\n\t\t},\n\n\t\texecute: function ( dt, cells, node ) {\n\t\t\tfor ( var i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tfor ( var j=0, jen=cells[i].length ; j<jen ; j++ ) {\n\t\t\t\t\tcells[i][j].set = cells[0][j].data;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Special type that does not make itself available, but is added\n\t// automatically by AutoFill if a multi-choice list is shown. This allows\n\t// sensible code reuse\n\tcancel: {\n\t\tavailable: function () {\n\t\t\treturn false;\n\t\t},\n\n\t\toption: function ( dt ) {\n\t\t\treturn dt.i18n('autoFill.cancel', 'Cancel' );\n\t\t},\n\n\t\texecute: function () {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n\n/**\n * AutoFill version\n * \n * @static\n * @type      String\n */\nAutoFill.version = '2.6.0';\n\n\n/**\n * AutoFill defaults\n * \n * @namespace\n */\nAutoFill.defaults = {\n\t/** @type {Boolean} Ask user what they want to do, even for a single option */\n\talwaysAsk: false,\n\n\tcloseButton: true,\n\n\t/** @type {string|null} What will trigger a focus */\n\tfocus: null, // focus, click, hover\n\n\t/** @type {column-selector} Columns to provide auto fill for */\n\tcolumns: '', // all\n\n\t/** @type {Boolean} Enable AutoFill on load */\n\tenable: true,\n\n\t/** @type {boolean|null} Update the cells after a drag */\n\tupdate: null, // false is editor given, true otherwise\n\n\t/** @type {DataTable.Editor} Editor instance for automatic submission */\n\teditor: null,\n\n\t/** @type {boolean} Enable vertical fill */\n\tvertical: true,\n\n\t/** @type {boolean} Enable horizontal fill */\n\thorizontal: true\n};\n\n\n/**\n * Classes used by AutoFill that are configurable\n * \n * @namespace\n */\nAutoFill.classes = {\n\t/** @type {String} Class used by the selection button */\n\tbtn: 'btn',\n\n\tcloseable: 'dtaf-popover-closeable'\n};\n\n\n/*\n * API\n */\nvar Api = $.fn.dataTable.Api;\n\n// Doesn't do anything - Not documented\nApi.register( 'autoFill()', function () {\n\treturn this;\n} );\n\nApi.register( 'autoFill().enabled()', function () {\n\tvar ctx = this.context[0];\n\n\treturn ctx.autoFill ?\n\t\tctx.autoFill.enabled() :\n\t\tfalse;\n} );\n\nApi.register( 'autoFill().enable()', function ( flag ) {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\tif ( ctx.autoFill ) {\n\t\t\tctx.autoFill.enable( flag );\n\t\t}\n\t} );\n} );\n\nApi.register( 'autoFill().disable()', function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\tif ( ctx.autoFill ) {\n\t\t\tctx.autoFill.disable();\n\t\t}\n\t} );\n} );\n\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on( 'preInit.dt.autofill', function (e, settings, json) {\n\tif ( e.namespace !== 'dt' ) {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.autoFill;\n\tvar defaults = DataTable.defaults.autoFill;\n\n\tif ( init || defaults ) {\n\t\tvar opts = $.extend( {}, init, defaults );\n\n\t\tif ( init !== false ) {\n\t\t\tnew AutoFill( settings, opts  );\n\t\t}\n\t}\n} );\n\n\n// Alias for access\nDataTable.AutoFill = AutoFill;\n$.fn.DataTable.AutoFill = AutoFill;\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/css/buttons.bootstrap.css",
    "content": "@keyframes dtb-spinner {\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-o-keyframes dtb-spinner {\n  100% {\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-ms-keyframes dtb-spinner {\n  100% {\n    -ms-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes dtb-spinner {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-moz-keyframes dtb-spinner {\n  100% {\n    -moz-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\ndiv.dataTables_wrapper {\n  position: relative;\n}\n\ndiv.dt-buttons {\n  position: initial;\n}\ndiv.dt-buttons .dt-button {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\ndiv.dt-button-info {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 400px;\n  margin-top: -100px;\n  margin-left: -200px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);\n  text-align: center;\n  z-index: 2003;\n  overflow: hidden;\n}\ndiv.dt-button-info h2 {\n  padding: 2rem 2rem 1rem 2rem;\n  margin: 0;\n  font-weight: normal;\n}\ndiv.dt-button-info > div {\n  padding: 1em 2em 2em 2em;\n}\n\ndiv.dtb-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 2003;\n}\n\nbutton.dtb-hide-drop {\n  display: none !important;\n}\n\ndiv.dt-button-collection-title {\n  text-align: center;\n  padding: 0.3em 0 0.5em;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 0.9em;\n}\n\ndiv.dt-button-collection-title:empty {\n  display: none;\n}\n\nspan.dt-button-spacer {\n  display: inline-block;\n  margin: 0.5em;\n  white-space: nowrap;\n}\nspan.dt-button-spacer.bar {\n  border-left: 1px solid rgba(0, 0, 0, 0.3);\n  vertical-align: middle;\n  padding-left: 0.5em;\n}\nspan.dt-button-spacer.bar:empty {\n  height: 1em;\n  width: 1px;\n  padding-left: 0;\n}\n\ndiv.dt-button-collection .dt-button-active {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split {\n  padding-right: 0;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split:after {\n  display: none;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active-a a {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active-a a:after {\n  position: absolute;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection span.dt-button-spacer {\n  width: 100%;\n  font-size: 0.9em;\n  text-align: center;\n  margin: 0.5em 0;\n}\ndiv.dt-button-collection span.dt-button-spacer:empty {\n  height: 0;\n  width: 100%;\n}\ndiv.dt-button-collection span.dt-button-spacer.bar {\n  border-left: none;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  padding-left: 0;\n}\n\nhtml.dark div.dt-button-info {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dt-buttons div.btn-group {\n  position: initial;\n}\ndiv.dt-buttons div.dt-button-collection {\n  position: absolute;\n  min-width: 200px;\n  margin-top: 3px;\n  z-index: 2002;\n}\ndiv.dt-buttons div.dt-button-collection .dropdown-menu {\n  margin-top: 4px;\n  display: block;\n}\ndiv.dt-buttons div.dt-button-collection .dropdown-menu li {\n  position: relative;\n}\ndiv.dt-buttons div.dt-button-collection .dropdown-menu div.dt-button-split {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: stretch;\n}\ndiv.dt-buttons div.dt-button-collection .dropdown-menu div.dt-button-split > *:first-child {\n  min-width: auto;\n  flex: 1 0 50px;\n  padding: 3px 5px 3px 20px;\n}\ndiv.dt-buttons div.dt-button-collection .dropdown-menu div.dt-button-split > *:first-child a {\n  color: #333;\n  text-decoration: none;\n}\ndiv.dt-buttons div.dt-button-collection .dropdown-menu div.dt-button-split > *:first-child:hover {\n  color: #262626;\n  background-color: #f5f5f5;\n}\ndiv.dt-buttons div.dt-button-collection .dropdown-menu div.dt-button-split button:last-child {\n  min-width: 33px;\n  flex: 0;\n  background: transparent;\n  border: none;\n  line-height: 1rem;\n  color: rgb(33, 37, 41);\n  padding: 0 16px;\n}\ndiv.dt-buttons div.dt-button-collection .dropdown-menu div.dt-button-split button:last-child:hover {\n  color: #16181b;\n  background-color: #f8f9fa;\n}\ndiv.dt-buttons div.dt-button-collection.fixed {\n  position: fixed;\n  display: block;\n  top: 50%;\n  left: 50%;\n  margin-left: -75px;\n  border-radius: 5px;\n  background-color: white;\n  padding: 0.5em;\n}\ndiv.dt-buttons div.dt-button-collection.fixed.two-column {\n  margin-left: -200px;\n}\ndiv.dt-buttons div.dt-button-collection.fixed.three-column {\n  margin-left: -225px;\n}\ndiv.dt-buttons div.dt-button-collection.fixed.four-column {\n  margin-left: -300px;\n}\ndiv.dt-buttons div.dt-button-collection.fixed.columns {\n  margin-left: -409px;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-buttons div.dt-button-collection.fixed.columns {\n    margin-left: -308px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-buttons div.dt-button-collection.fixed.columns {\n    margin-left: -203px;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-buttons div.dt-button-collection.fixed.columns {\n    margin-left: -100px;\n  }\n}\ndiv.dt-buttons div.dt-button-collection.fixed > :last-child {\n  max-height: 100vh;\n  overflow: auto;\n}\ndiv.dt-buttons div.dt-button-collection.two-column > :last-child, div.dt-buttons div.dt-button-collection.three-column > :last-child, div.dt-buttons div.dt-button-collection.four-column > :last-child {\n  display: block !important;\n  -webkit-column-gap: 8px;\n  -moz-column-gap: 8px;\n  -ms-column-gap: 8px;\n  -o-column-gap: 8px;\n  column-gap: 8px;\n}\ndiv.dt-buttons div.dt-button-collection.two-column > :last-child > *, div.dt-buttons div.dt-button-collection.three-column > :last-child > *, div.dt-buttons div.dt-button-collection.four-column > :last-child > * {\n  -webkit-column-break-inside: avoid;\n  break-inside: avoid;\n}\ndiv.dt-buttons div.dt-button-collection.two-column {\n  width: 400px;\n}\ndiv.dt-buttons div.dt-button-collection.two-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 2;\n}\ndiv.dt-buttons div.dt-button-collection.three-column {\n  width: 450px;\n}\ndiv.dt-buttons div.dt-button-collection.three-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 3;\n}\ndiv.dt-buttons div.dt-button-collection.four-column {\n  width: 600px;\n}\ndiv.dt-buttons div.dt-button-collection.four-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 4;\n}\ndiv.dt-buttons div.dt-button-collection .dt-button {\n  border-radius: 0;\n}\ndiv.dt-buttons div.dt-button-collection.columns {\n  width: auto;\n}\ndiv.dt-buttons div.dt-button-collection.columns > :last-child {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-items: center;\n  gap: 6px;\n  width: 818px;\n  padding-bottom: 1px;\n}\ndiv.dt-buttons div.dt-button-collection.columns > :last-child .dt-button {\n  min-width: 200px;\n  flex: 0 1;\n  margin: 0;\n}\ndiv.dt-buttons div.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-buttons div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-buttons div.dt-button-collection.columns.dtb-b1 > :last-child {\n  justify-content: space-between;\n}\ndiv.dt-buttons div.dt-button-collection.columns.dtb-b3 .dt-button {\n  flex: 1 1 32%;\n}\ndiv.dt-buttons div.dt-button-collection.columns.dtb-b2 .dt-button {\n  flex: 1 1 48%;\n}\ndiv.dt-buttons div.dt-button-collection.columns.dtb-b1 .dt-button {\n  flex: 1 1 100%;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-buttons div.dt-button-collection.columns > :last-child {\n    width: 612px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-buttons div.dt-button-collection.columns > :last-child {\n    width: 406px;\n  }\n  div.dt-buttons div.dt-button-collection.columns.dtb-b3 .dt-button {\n    flex: 0 1 32%;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-buttons div.dt-button-collection.columns > :last-child {\n    width: 200px;\n  }\n}\ndiv.dt-buttons span.caret {\n  margin-left: 0.5em;\n}\ndiv.dt-buttons span.dt-button-spacer.empty {\n  margin: 2px;\n}\ndiv.dt-buttons span.dt-button-spacer.bar:empty {\n  height: inherit;\n}\ndiv.dt-buttons .btn.processing {\n  color: rgba(0, 0, 0, 0.2);\n}\ndiv.dt-buttons .btn.processing:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 16px;\n  height: 16px;\n  margin: -8px 0 0 -8px;\n  box-sizing: border-box;\n  display: block;\n  content: \" \";\n  border: 2px solid rgb(40, 40, 40);\n  border-radius: 50%;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  animation: dtb-spinner 1500ms infinite linear;\n  -o-animation: dtb-spinner 1500ms infinite linear;\n  -ms-animation: dtb-spinner 1500ms infinite linear;\n  -webkit-animation: dtb-spinner 1500ms infinite linear;\n  -moz-animation: dtb-spinner 1500ms infinite linear;\n}\ndiv.dt-buttons div.dt-button-split button:last-child span {\n  margin-left: 0 !important;\n}\n\ndiv.dt-button-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 999;\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-buttons {\n    float: none;\n    width: 100%;\n    text-align: center;\n    margin-bottom: 0.5em;\n  }\n  div.dt-buttons a.btn {\n    float: none;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/css/buttons.bootstrap4.css",
    "content": "@keyframes dtb-spinner {\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-o-keyframes dtb-spinner {\n  100% {\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-ms-keyframes dtb-spinner {\n  100% {\n    -ms-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes dtb-spinner {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-moz-keyframes dtb-spinner {\n  100% {\n    -moz-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\ndiv.dataTables_wrapper {\n  position: relative;\n}\n\ndiv.dt-buttons {\n  position: initial;\n}\ndiv.dt-buttons .dt-button {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\ndiv.dt-button-info {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 400px;\n  margin-top: -100px;\n  margin-left: -200px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);\n  text-align: center;\n  z-index: 2003;\n  overflow: hidden;\n}\ndiv.dt-button-info h2 {\n  padding: 2rem 2rem 1rem 2rem;\n  margin: 0;\n  font-weight: normal;\n}\ndiv.dt-button-info > div {\n  padding: 1em 2em 2em 2em;\n}\n\ndiv.dtb-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 2003;\n}\n\nbutton.dtb-hide-drop {\n  display: none !important;\n}\n\ndiv.dt-button-collection-title {\n  text-align: center;\n  padding: 0.3em 0 0.5em;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 0.9em;\n}\n\ndiv.dt-button-collection-title:empty {\n  display: none;\n}\n\nspan.dt-button-spacer {\n  display: inline-block;\n  margin: 0.5em;\n  white-space: nowrap;\n}\nspan.dt-button-spacer.bar {\n  border-left: 1px solid rgba(0, 0, 0, 0.3);\n  vertical-align: middle;\n  padding-left: 0.5em;\n}\nspan.dt-button-spacer.bar:empty {\n  height: 1em;\n  width: 1px;\n  padding-left: 0;\n}\n\ndiv.dt-button-collection .dt-button-active {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split {\n  padding-right: 0;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split:after {\n  display: none;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active-a a {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active-a a:after {\n  position: absolute;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection span.dt-button-spacer {\n  width: 100%;\n  font-size: 0.9em;\n  text-align: center;\n  margin: 0.5em 0;\n}\ndiv.dt-button-collection span.dt-button-spacer:empty {\n  height: 0;\n  width: 100%;\n}\ndiv.dt-button-collection span.dt-button-spacer.bar {\n  border-left: none;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  padding-left: 0;\n}\n\nhtml.dark div.dt-button-info {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dt-buttons div.btn-group {\n  position: initial;\n}\ndiv.dt-buttons div.dropdown-menu {\n  margin-top: 4px;\n}\ndiv.dt-buttons div.dropdown-menu .dt-button {\n  position: relative;\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: stretch;\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split a:first-child {\n  min-width: auto;\n  flex: 1 0 50px;\n  padding-right: 0;\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split button:last-child {\n  min-width: 33px;\n  flex: 0;\n  background: transparent;\n  border: none;\n  line-height: 1rem;\n  color: rgb(33, 37, 41);\n  padding: 0 16px;\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split button:last-child:hover {\n  color: #16181b;\n  background-color: #f8f9fa;\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split button:last-child:after {\n  position: relative;\n  left: -3px;\n}\ndiv.dt-buttons div.dropdown-menu.fixed {\n  position: fixed;\n  display: block;\n  top: 50%;\n  left: 50%;\n  margin-left: -75px;\n  border-radius: 5px;\n  background-color: white;\n  padding: 0.5em;\n}\ndiv.dt-buttons div.dropdown-menu.fixed.two-column {\n  margin-left: -200px;\n}\ndiv.dt-buttons div.dropdown-menu.fixed.three-column {\n  margin-left: -225px;\n}\ndiv.dt-buttons div.dropdown-menu.fixed.four-column {\n  margin-left: -300px;\n}\ndiv.dt-buttons div.dropdown-menu.fixed.columns {\n  margin-left: -409px;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-buttons div.dropdown-menu.fixed.columns {\n    margin-left: -308px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-buttons div.dropdown-menu.fixed.columns {\n    margin-left: -203px;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-buttons div.dropdown-menu.fixed.columns {\n    margin-left: -100px;\n  }\n}\ndiv.dt-buttons div.dropdown-menu.fixed > :last-child {\n  max-height: 100vh;\n  overflow: auto;\n}\ndiv.dt-buttons div.dropdown-menu.two-column > :last-child, div.dt-buttons div.dropdown-menu.three-column > :last-child, div.dt-buttons div.dropdown-menu.four-column > :last-child {\n  display: block !important;\n  -webkit-column-gap: 8px;\n  -moz-column-gap: 8px;\n  -ms-column-gap: 8px;\n  -o-column-gap: 8px;\n  column-gap: 8px;\n}\ndiv.dt-buttons div.dropdown-menu.two-column > :last-child > *, div.dt-buttons div.dropdown-menu.three-column > :last-child > *, div.dt-buttons div.dropdown-menu.four-column > :last-child > * {\n  -webkit-column-break-inside: avoid;\n  break-inside: avoid;\n}\ndiv.dt-buttons div.dropdown-menu.two-column {\n  width: 400px;\n}\ndiv.dt-buttons div.dropdown-menu.two-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 2;\n}\ndiv.dt-buttons div.dropdown-menu.three-column {\n  width: 450px;\n}\ndiv.dt-buttons div.dropdown-menu.three-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 3;\n}\ndiv.dt-buttons div.dropdown-menu.four-column {\n  width: 600px;\n}\ndiv.dt-buttons div.dropdown-menu.four-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 4;\n}\ndiv.dt-buttons div.dropdown-menu .dt-button {\n  border-radius: 0;\n}\ndiv.dt-buttons div.dropdown-menu.columns {\n  width: auto;\n}\ndiv.dt-buttons div.dropdown-menu.columns > :last-child {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-items: center;\n  gap: 6px;\n  width: 818px;\n  padding-bottom: 1px;\n}\ndiv.dt-buttons div.dropdown-menu.columns > :last-child .dt-button {\n  min-width: 200px;\n  flex: 0 1;\n  margin: 0;\n}\ndiv.dt-buttons div.dropdown-menu.columns.dtb-b3 > :last-child, div.dt-buttons div.dropdown-menu.columns.dtb-b2 > :last-child, div.dt-buttons div.dropdown-menu.columns.dtb-b1 > :last-child {\n  justify-content: space-between;\n}\ndiv.dt-buttons div.dropdown-menu.columns.dtb-b3 .dt-button {\n  flex: 1 1 32%;\n}\ndiv.dt-buttons div.dropdown-menu.columns.dtb-b2 .dt-button {\n  flex: 1 1 48%;\n}\ndiv.dt-buttons div.dropdown-menu.columns.dtb-b1 .dt-button {\n  flex: 1 1 100%;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-buttons div.dropdown-menu.columns > :last-child {\n    width: 612px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-buttons div.dropdown-menu.columns > :last-child {\n    width: 406px;\n  }\n  div.dt-buttons div.dropdown-menu.columns.dtb-b3 .dt-button {\n    flex: 0 1 32%;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-buttons div.dropdown-menu.columns > :last-child {\n    width: 200px;\n  }\n}\ndiv.dt-buttons span.dt-button-spacer.empty {\n  margin: 1px;\n}\ndiv.dt-buttons span.dt-button-spacer.bar:empty {\n  height: inherit;\n}\ndiv.dt-buttons .btn.processing {\n  color: rgba(0, 0, 0, 0.2);\n}\ndiv.dt-buttons .btn.processing:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 16px;\n  height: 16px;\n  margin: -8px 0 0 -8px;\n  box-sizing: border-box;\n  display: block;\n  content: \" \";\n  border: 2px solid rgb(40, 40, 40);\n  border-radius: 50%;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  animation: dtb-spinner 1500ms infinite linear;\n  -o-animation: dtb-spinner 1500ms infinite linear;\n  -ms-animation: dtb-spinner 1500ms infinite linear;\n  -webkit-animation: dtb-spinner 1500ms infinite linear;\n  -moz-animation: dtb-spinner 1500ms infinite linear;\n}\n\ndiv.dt-button-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 999;\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-buttons {\n    float: none;\n    width: 100%;\n    text-align: center;\n    margin-bottom: 0.5em;\n  }\n  div.dt-buttons a.btn {\n    float: none;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/css/buttons.bootstrap5.css",
    "content": "@keyframes dtb-spinner {\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-o-keyframes dtb-spinner {\n  100% {\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-ms-keyframes dtb-spinner {\n  100% {\n    -ms-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes dtb-spinner {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-moz-keyframes dtb-spinner {\n  100% {\n    -moz-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\ndiv.dataTables_wrapper {\n  position: relative;\n}\n\ndiv.dt-buttons {\n  position: initial;\n}\ndiv.dt-buttons .dt-button {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\ndiv.dt-button-info {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 400px;\n  margin-top: -100px;\n  margin-left: -200px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);\n  text-align: center;\n  z-index: 2003;\n  overflow: hidden;\n}\ndiv.dt-button-info h2 {\n  padding: 2rem 2rem 1rem 2rem;\n  margin: 0;\n  font-weight: normal;\n}\ndiv.dt-button-info > div {\n  padding: 1em 2em 2em 2em;\n}\n\ndiv.dtb-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 2003;\n}\n\nbutton.dtb-hide-drop {\n  display: none !important;\n}\n\ndiv.dt-button-collection-title {\n  text-align: center;\n  padding: 0.3em 0 0.5em;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 0.9em;\n}\n\ndiv.dt-button-collection-title:empty {\n  display: none;\n}\n\nspan.dt-button-spacer {\n  display: inline-block;\n  margin: 0.5em;\n  white-space: nowrap;\n}\nspan.dt-button-spacer.bar {\n  border-left: 1px solid rgba(0, 0, 0, 0.3);\n  vertical-align: middle;\n  padding-left: 0.5em;\n}\nspan.dt-button-spacer.bar:empty {\n  height: 1em;\n  width: 1px;\n  padding-left: 0;\n}\n\ndiv.dt-button-collection .dt-button-active {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split {\n  padding-right: 0;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split:after {\n  display: none;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active-a a {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active-a a:after {\n  position: absolute;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection span.dt-button-spacer {\n  width: 100%;\n  font-size: 0.9em;\n  text-align: center;\n  margin: 0.5em 0;\n}\ndiv.dt-button-collection span.dt-button-spacer:empty {\n  height: 0;\n  width: 100%;\n}\ndiv.dt-button-collection span.dt-button-spacer.bar {\n  border-left: none;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  padding-left: 0;\n}\n\nhtml.dark div.dt-button-info {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dt-buttons div.btn-group {\n  position: initial;\n}\ndiv.dt-buttons div.dropdown-menu {\n  margin-top: 4px;\n}\ndiv.dt-buttons div.dropdown-menu .dt-button {\n  position: relative;\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: stretch;\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split a:first-child {\n  min-width: auto;\n  flex: 1 0 50px;\n  padding-right: 0;\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split button:last-child {\n  min-width: 33px;\n  flex: 0;\n  background: transparent;\n  border: none;\n  line-height: 1rem;\n  color: var(--bs-dropdown-link-color);\n  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split button:last-child:hover {\n  color: var(--bs-dropdown-link-hover-color);\n  background-color: var(--bs-dropdown-link-hover-bg);\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split button:last-child:after {\n  position: relative;\n  left: -3px;\n}\ndiv.dt-buttons div.dropdown-menu.fixed {\n  position: fixed;\n  display: block;\n  top: 50%;\n  left: 50%;\n  margin-left: -75px;\n  border-radius: 5px;\n  background-color: white;\n  padding: 0.5em;\n}\ndiv.dt-buttons div.dropdown-menu.fixed.two-column {\n  margin-left: -200px;\n}\ndiv.dt-buttons div.dropdown-menu.fixed.three-column {\n  margin-left: -225px;\n}\ndiv.dt-buttons div.dropdown-menu.fixed.four-column {\n  margin-left: -300px;\n}\ndiv.dt-buttons div.dropdown-menu.fixed.columns {\n  margin-left: -409px;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-buttons div.dropdown-menu.fixed.columns {\n    margin-left: -308px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-buttons div.dropdown-menu.fixed.columns {\n    margin-left: -203px;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-buttons div.dropdown-menu.fixed.columns {\n    margin-left: -100px;\n  }\n}\ndiv.dt-buttons div.dropdown-menu.fixed > :last-child {\n  max-height: 100vh;\n  overflow: auto;\n}\ndiv.dt-buttons div.dropdown-menu.two-column > :last-child, div.dt-buttons div.dropdown-menu.three-column > :last-child, div.dt-buttons div.dropdown-menu.four-column > :last-child {\n  display: block !important;\n  -webkit-column-gap: 8px;\n  -moz-column-gap: 8px;\n  -ms-column-gap: 8px;\n  -o-column-gap: 8px;\n  column-gap: 8px;\n}\ndiv.dt-buttons div.dropdown-menu.two-column > :last-child > *, div.dt-buttons div.dropdown-menu.three-column > :last-child > *, div.dt-buttons div.dropdown-menu.four-column > :last-child > * {\n  -webkit-column-break-inside: avoid;\n  break-inside: avoid;\n}\ndiv.dt-buttons div.dropdown-menu.two-column {\n  width: 400px;\n}\ndiv.dt-buttons div.dropdown-menu.two-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 2;\n}\ndiv.dt-buttons div.dropdown-menu.three-column {\n  width: 450px;\n}\ndiv.dt-buttons div.dropdown-menu.three-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 3;\n}\ndiv.dt-buttons div.dropdown-menu.four-column {\n  width: 600px;\n}\ndiv.dt-buttons div.dropdown-menu.four-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 4;\n}\ndiv.dt-buttons div.dropdown-menu .dt-button {\n  border-radius: 0;\n}\ndiv.dt-buttons div.dropdown-menu.columns {\n  width: auto;\n}\ndiv.dt-buttons div.dropdown-menu.columns > :last-child {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-items: center;\n  gap: 6px;\n  width: 818px;\n  padding-bottom: 1px;\n}\ndiv.dt-buttons div.dropdown-menu.columns > :last-child .dt-button {\n  min-width: 200px;\n  flex: 0 1;\n  margin: 0;\n}\ndiv.dt-buttons div.dropdown-menu.columns.dtb-b3 > :last-child, div.dt-buttons div.dropdown-menu.columns.dtb-b2 > :last-child, div.dt-buttons div.dropdown-menu.columns.dtb-b1 > :last-child {\n  justify-content: space-between;\n}\ndiv.dt-buttons div.dropdown-menu.columns.dtb-b3 .dt-button {\n  flex: 1 1 32%;\n}\ndiv.dt-buttons div.dropdown-menu.columns.dtb-b2 .dt-button {\n  flex: 1 1 48%;\n}\ndiv.dt-buttons div.dropdown-menu.columns.dtb-b1 .dt-button {\n  flex: 1 1 100%;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-buttons div.dropdown-menu.columns > :last-child {\n    width: 612px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-buttons div.dropdown-menu.columns > :last-child {\n    width: 406px;\n  }\n  div.dt-buttons div.dropdown-menu.columns.dtb-b3 .dt-button {\n    flex: 0 1 32%;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-buttons div.dropdown-menu.columns > :last-child {\n    width: 200px;\n  }\n}\ndiv.dt-buttons span.dt-button-spacer.empty {\n  margin: 1px;\n}\ndiv.dt-buttons span.dt-button-spacer.bar:empty {\n  height: inherit;\n}\ndiv.dt-buttons .btn.processing {\n  color: rgba(0, 0, 0, 0.2);\n}\ndiv.dt-buttons .btn.processing:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 16px;\n  height: 16px;\n  margin: -8px 0 0 -8px;\n  box-sizing: border-box;\n  display: block;\n  content: \" \";\n  border: 2px solid rgb(40, 40, 40);\n  border-radius: 50%;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  animation: dtb-spinner 1500ms infinite linear;\n  -o-animation: dtb-spinner 1500ms infinite linear;\n  -ms-animation: dtb-spinner 1500ms infinite linear;\n  -webkit-animation: dtb-spinner 1500ms infinite linear;\n  -moz-animation: dtb-spinner 1500ms infinite linear;\n}\n\ndiv.dt-button-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 999;\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-buttons {\n    float: none;\n    width: 100%;\n    text-align: center;\n    margin-bottom: 0.5em;\n  }\n  div.dt-buttons a.btn {\n    float: none;\n  }\n}\n:root[data-bs-theme=dark] div.dropdown-menu.dt-button-collection.fixed {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n  border-radius: 8px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/css/buttons.bulma.css",
    "content": "@keyframes dtb-spinner {\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-o-keyframes dtb-spinner {\n  100% {\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-ms-keyframes dtb-spinner {\n  100% {\n    -ms-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes dtb-spinner {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-moz-keyframes dtb-spinner {\n  100% {\n    -moz-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\ndiv.dataTables_wrapper {\n  position: relative;\n}\n\ndiv.dt-buttons {\n  position: initial;\n}\ndiv.dt-buttons .dt-button {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\ndiv.dt-button-info {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 400px;\n  margin-top: -100px;\n  margin-left: -200px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);\n  text-align: center;\n  z-index: 2003;\n  overflow: hidden;\n}\ndiv.dt-button-info h2 {\n  padding: 2rem 2rem 1rem 2rem;\n  margin: 0;\n  font-weight: normal;\n}\ndiv.dt-button-info > div {\n  padding: 1em 2em 2em 2em;\n}\n\ndiv.dtb-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 2003;\n}\n\nbutton.dtb-hide-drop {\n  display: none !important;\n}\n\ndiv.dt-button-collection-title {\n  text-align: center;\n  padding: 0.3em 0 0.5em;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 0.9em;\n}\n\ndiv.dt-button-collection-title:empty {\n  display: none;\n}\n\nspan.dt-button-spacer {\n  display: inline-block;\n  margin: 0.5em;\n  white-space: nowrap;\n}\nspan.dt-button-spacer.bar {\n  border-left: 1px solid rgba(0, 0, 0, 0.3);\n  vertical-align: middle;\n  padding-left: 0.5em;\n}\nspan.dt-button-spacer.bar:empty {\n  height: 1em;\n  width: 1px;\n  padding-left: 0;\n}\n\ndiv.dt-button-collection .dt-button-active {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split {\n  padding-right: 0;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split:after {\n  display: none;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active-a a {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active-a a:after {\n  position: absolute;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection span.dt-button-spacer {\n  width: 100%;\n  font-size: 0.9em;\n  text-align: center;\n  margin: 0.5em 0;\n}\ndiv.dt-button-collection span.dt-button-spacer:empty {\n  height: 0;\n  width: 100%;\n}\ndiv.dt-button-collection span.dt-button-spacer.bar {\n  border-left: none;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  padding-left: 0;\n}\n\nhtml.dark div.dt-button-info {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dt-button-collection {\n  position: absolute;\n  z-index: 2001;\n}\ndiv.dt-button-collection div.dropdown-menu {\n  display: block;\n  z-index: 2002;\n  min-width: 100%;\n}\ndiv.dt-button-collection div.dt-button-split {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: stretch;\n  padding: 0;\n}\ndiv.dt-button-collection div.dt-button-split a:first-child {\n  margin: 0;\n  display: inline-block;\n  width: 0;\n  min-width: auto;\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: 50px;\n  padding: 0.375rem 1rem;\n}\ndiv.dt-button-collection div.dt-button-split button:last-child {\n  min-width: 33px;\n  flex: 0;\n  background: transparent;\n  border: none;\n  padding: 0;\n  margin: 0;\n  font-size: 0.875rem;\n  line-height: 1.5;\n}\ndiv.dt-button-collection div.dt-button-split button:last-child:hover {\n  background-color: #f5f5f5;\n  color: #0a0a0a;\n}\ndiv.dt-button-collection.fixed {\n  position: fixed;\n  display: block;\n  top: 50%;\n  left: 50%;\n  margin-left: -75px;\n  border-radius: 5px;\n  background-color: white;\n  padding: 0.5em;\n}\ndiv.dt-button-collection.fixed.two-column {\n  margin-left: -200px;\n}\ndiv.dt-button-collection.fixed.three-column {\n  margin-left: -225px;\n}\ndiv.dt-button-collection.fixed.four-column {\n  margin-left: -300px;\n}\ndiv.dt-button-collection.fixed.columns {\n  margin-left: -409px;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-button-collection.fixed.columns {\n    margin-left: -308px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-button-collection.fixed.columns {\n    margin-left: -203px;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-button-collection.fixed.columns {\n    margin-left: -100px;\n  }\n}\ndiv.dt-button-collection.fixed > :last-child {\n  max-height: 100vh;\n  overflow: auto;\n}\ndiv.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {\n  display: block !important;\n  -webkit-column-gap: 8px;\n  -moz-column-gap: 8px;\n  -ms-column-gap: 8px;\n  -o-column-gap: 8px;\n  column-gap: 8px;\n}\ndiv.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {\n  -webkit-column-break-inside: avoid;\n  break-inside: avoid;\n}\ndiv.dt-button-collection.two-column {\n  width: 400px;\n}\ndiv.dt-button-collection.two-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 2;\n}\ndiv.dt-button-collection.three-column {\n  width: 450px;\n}\ndiv.dt-button-collection.three-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 3;\n}\ndiv.dt-button-collection.four-column {\n  width: 600px;\n}\ndiv.dt-button-collection.four-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 4;\n}\ndiv.dt-button-collection .dt-button {\n  border-radius: 0;\n}\ndiv.dt-button-collection.columns {\n  width: auto;\n}\ndiv.dt-button-collection.columns > :last-child {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-items: center;\n  gap: 6px;\n  width: 818px;\n  padding-bottom: 1px;\n}\ndiv.dt-button-collection.columns > :last-child .dt-button {\n  min-width: 200px;\n  flex: 0 1;\n  margin: 0;\n}\ndiv.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {\n  justify-content: space-between;\n}\ndiv.dt-button-collection.columns.dtb-b3 .dt-button {\n  flex: 1 1 32%;\n}\ndiv.dt-button-collection.columns.dtb-b2 .dt-button {\n  flex: 1 1 48%;\n}\ndiv.dt-button-collection.columns.dtb-b1 .dt-button {\n  flex: 1 1 100%;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-button-collection.columns > :last-child {\n    width: 612px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-button-collection.columns > :last-child {\n    width: 406px;\n  }\n  div.dt-button-collection.columns.dtb-b3 .dt-button {\n    flex: 0 1 32%;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-button-collection.columns > :last-child {\n    width: 200px;\n  }\n}\ndiv.dt-button-collection.fixed:before, div.dt-button-collection.fixed:after {\n  display: none;\n}\n\ndiv.dt-button-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 999;\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-buttons {\n    float: none;\n    width: 100%;\n    text-align: center;\n    margin-bottom: 0.5em;\n  }\n  div.dt-buttons a.btn {\n    float: none;\n  }\n}\ndiv.dt-buttons button.btn.processing,\ndiv.dt-buttons div.btn.processing,\ndiv.dt-buttons a.btn.processing {\n  color: rgba(0, 0, 0, 0.2);\n}\ndiv.dt-buttons button.btn.processing:after,\ndiv.dt-buttons div.btn.processing:after,\ndiv.dt-buttons a.btn.processing:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 16px;\n  height: 16px;\n  margin: -8px 0 0 -8px;\n  box-sizing: border-box;\n  display: block;\n  content: \" \";\n  border: 2px solid rgb(40, 40, 40);\n  border-radius: 50%;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  animation: dtb-spinner 1500ms infinite linear;\n  -o-animation: dtb-spinner 1500ms infinite linear;\n  -ms-animation: dtb-spinner 1500ms infinite linear;\n  -webkit-animation: dtb-spinner 1500ms infinite linear;\n  -moz-animation: dtb-spinner 1500ms infinite linear;\n}\ndiv.dt-buttons button.button {\n  margin-left: 5px;\n}\ndiv.dt-buttons button.button:first-child {\n  margin-left: 0px;\n}\n\nspan.dt-button-spacer {\n  display: inline-flex;\n  margin: 0.5em;\n  white-space: nowrap;\n  align-items: center;\n  font-size: 1rem;\n}\nspan.dt-button-spacer.bar:empty {\n  height: inherit;\n}\n\ndiv.dt-button-collection .is-disabled {\n  cursor: default;\n  opacity: 0.4;\n}\ndiv.dt-button-collection span.dt-button-spacer {\n  text-align: left;\n  font-size: 0.875rem;\n  padding-left: 1rem !important;\n}\n\ndiv.dt-button-split {\n  padding-left: 5px;\n  padding-right: 5px;\n  margin-bottom: 0px;\n  margin-bottom: 0px !important;\n}\ndiv.dt-button-split button {\n  margin-right: 0px;\n  display: inline-block;\n  margin-top: 0px;\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\ndiv.dt-button-split button.dt-button {\n  min-width: 30px;\n  margin-left: -1px;\n  border-bottom-left-radius: 0px;\n  border-top-left-radius: 0px;\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n  padding: 0px;\n}\ndiv.dt-button-split:active:not(.disabled) button, div.dt-button-split.active:not(.disabled) button, div.dt-button-split.is-active:not(.disabled) button {\n  background-color: #eee;\n  border-color: transparent;\n}\ndiv.dt-button-split:active:not(.disabled) button.dt-button, div.dt-button-split.active:not(.disabled) button.dt-button, div.dt-button-split.is-active:not(.disabled) button.dt-button {\n  box-shadow: none;\n  background-color: rgb(245, 245, 245);\n  border-color: transparent;\n}\ndiv.dt-button-split:active:not(.disabled) button:hover, div.dt-button-split.active:not(.disabled) button:hover, div.dt-button-split.is-active:not(.disabled) button:hover {\n  background-color: #eee;\n  border-color: transparent;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/css/buttons.dataTables.css",
    "content": "@keyframes dtb-spinner {\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-o-keyframes dtb-spinner {\n  100% {\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-ms-keyframes dtb-spinner {\n  100% {\n    -ms-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes dtb-spinner {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-moz-keyframes dtb-spinner {\n  100% {\n    -moz-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\ndiv.dataTables_wrapper {\n  position: relative;\n}\n\ndiv.dt-buttons {\n  position: initial;\n}\ndiv.dt-buttons .dt-button {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\ndiv.dt-button-info {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 400px;\n  margin-top: -100px;\n  margin-left: -200px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);\n  text-align: center;\n  z-index: 2003;\n  overflow: hidden;\n}\ndiv.dt-button-info h2 {\n  padding: 2rem 2rem 1rem 2rem;\n  margin: 0;\n  font-weight: normal;\n}\ndiv.dt-button-info > div {\n  padding: 1em 2em 2em 2em;\n}\n\ndiv.dtb-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 2003;\n}\n\nbutton.dtb-hide-drop {\n  display: none !important;\n}\n\ndiv.dt-button-collection-title {\n  text-align: center;\n  padding: 0.3em 0 0.5em;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 0.9em;\n}\n\ndiv.dt-button-collection-title:empty {\n  display: none;\n}\n\nspan.dt-button-spacer {\n  display: inline-block;\n  margin: 0.5em;\n  white-space: nowrap;\n}\nspan.dt-button-spacer.bar {\n  border-left: 1px solid rgba(0, 0, 0, 0.3);\n  vertical-align: middle;\n  padding-left: 0.5em;\n}\nspan.dt-button-spacer.bar:empty {\n  height: 1em;\n  width: 1px;\n  padding-left: 0;\n}\n\ndiv.dt-button-collection .dt-button-active {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split {\n  padding-right: 0;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split:after {\n  display: none;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active-a a {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active-a a:after {\n  position: absolute;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection span.dt-button-spacer {\n  width: 100%;\n  font-size: 0.9em;\n  text-align: center;\n  margin: 0.5em 0;\n}\ndiv.dt-button-collection span.dt-button-spacer:empty {\n  height: 0;\n  width: 100%;\n}\ndiv.dt-button-collection span.dt-button-spacer.bar {\n  border-left: none;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  padding-left: 0;\n}\n\nhtml.dark div.dt-button-info {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dt-buttons {\n  float: left;\n}\ndiv.dt-buttons.buttons-right {\n  float: right;\n}\n\ndiv.dataTables_layout_cell div.dt-buttons {\n  float: none;\n}\ndiv.dataTables_layout_cell div.dt-buttons.buttons-right {\n  float: none;\n}\n\ndiv.dt-buttons > .dt-button,\ndiv.dt-buttons > div.dt-button-split .dt-button {\n  position: relative;\n  display: inline-block;\n  box-sizing: border-box;\n  margin-left: 0.167em;\n  margin-right: 0.167em;\n  margin-bottom: 0.333em;\n  padding: 0.5em 1em;\n  border: 1px solid rgba(0, 0, 0, 0.3);\n  border-radius: 2px;\n  cursor: pointer;\n  font-size: 0.88em;\n  line-height: 1.6em;\n  color: inherit;\n  white-space: nowrap;\n  overflow: hidden;\n  background-color: rgba(0, 0, 0, 0.1); /* Fallback */\n  background: linear-gradient(to bottom, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\"rgba(230, 230, 230, 0.1)\", EndColorStr=\"rgba(0, 0, 0, 0.1)\");\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  text-decoration: none;\n  outline: none;\n  text-overflow: ellipsis;\n}\ndiv.dt-buttons > .dt-button:first-child,\ndiv.dt-buttons > div.dt-button-split .dt-button:first-child {\n  margin-left: 0;\n}\ndiv.dt-buttons > .dt-button.disabled,\ndiv.dt-buttons > div.dt-button-split .dt-button.disabled {\n  cursor: default;\n  opacity: 0.4;\n}\ndiv.dt-buttons > .dt-button.dt-button-active:not(.disabled),\ndiv.dt-buttons > div.dt-button-split .dt-button.dt-button-active:not(.disabled) {\n  background-color: rgba(0, 0, 0, 0.1); /* Fallback */\n  background: linear-gradient(to bottom, rgba(179, 179, 179, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\"rgba(179, 179, 179, 0.1)\", EndColorStr=\"rgba(0, 0, 0, 0.1)\");\n  box-shadow: inset 1px 1px 3px #999999;\n}\ndiv.dt-buttons > .dt-button.dt-button-active:not(.disabled):hover:not(.disabled),\ndiv.dt-buttons > div.dt-button-split .dt-button.dt-button-active:not(.disabled):hover:not(.disabled) {\n  box-shadow: inset 1px 1px 3px #999999;\n  background-color: rgba(0, 0, 0, 0.1); /* Fallback */\n  background: linear-gradient(to bottom, rgba(128, 128, 128, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\"rgba(128, 128, 128, 0.1)\", EndColorStr=\"rgba(0, 0, 0, 0.1)\");\n}\ndiv.dt-buttons > .dt-button:hover,\ndiv.dt-buttons > div.dt-button-split .dt-button:hover {\n  text-decoration: none;\n}\ndiv.dt-buttons > .dt-button:hover:not(.disabled),\ndiv.dt-buttons > div.dt-button-split .dt-button:hover:not(.disabled) {\n  border: 1px solid #666;\n  background-color: rgba(0, 0, 0, 0.1); /* Fallback */\n  background: linear-gradient(to bottom, rgba(153, 153, 153, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr=\"rgba(153, 153, 153, 0.1)\", EndColorStr=\"rgba(0, 0, 0, 0.1)\");\n}\ndiv.dt-buttons > .dt-button:focus:not(.disabled),\ndiv.dt-buttons > div.dt-button-split .dt-button:focus:not(.disabled) {\n  outline: 2px solid rgb(53, 132, 228);\n}\ndiv.dt-buttons > .dt-button embed,\ndiv.dt-buttons > div.dt-button-split .dt-button embed {\n  outline: none;\n}\ndiv.dt-buttons > div.dt-button-split .dt-button:first-child {\n  border-right: 1px solid rgba(0, 0, 0, 0.15);\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\ndiv.dt-buttons > div.dt-button-split .dt-button:first-child:hover {\n  border-right: 1px solid #666;\n}\ndiv.dt-buttons > div.dt-button-split .dt-button:last-child {\n  border-left: 1px solid transparent;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\ndiv.dt-buttons > div.dt-button-split .dt-button:last-child:hover {\n  border-left: 1px solid #666;\n}\ndiv.dt-buttons span.dt-button-down-arrow {\n  position: relative;\n  top: -2px;\n  font-size: 10px;\n  padding-left: 10px;\n  line-height: 1em;\n  opacity: 0.6;\n}\ndiv.dt-buttons div.dt-button-split {\n  display: inline-block;\n}\ndiv.dt-buttons div.dt-button-split .dt-button:first-child {\n  margin-right: 0;\n}\ndiv.dt-buttons div.dt-button-split .dt-button:last-child {\n  margin-left: -1px;\n  padding-left: 0.75em;\n  padding-right: 0.75em;\n  z-index: 2;\n}\ndiv.dt-buttons div.dt-button-split .dt-button:last-child span {\n  padding-left: 0;\n}\n\ndiv.dt-button-collection {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 200px;\n  margin-top: 3px;\n  margin-bottom: 3px;\n  padding: 0.75em 0;\n  border: 1px solid rgba(0, 0, 0, 0.4);\n  background-color: white;\n  overflow: hidden;\n  z-index: 2002;\n  border-radius: 5px;\n  box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3);\n  box-sizing: border-box;\n}\ndiv.dt-button-collection .dt-button {\n  position: relative;\n  left: 0;\n  right: 0;\n  width: 100%;\n  display: block;\n  float: none;\n  background: none;\n  margin: 0;\n  padding: 0.5em 1em;\n  border: none;\n  text-align: left;\n  cursor: pointer;\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button.dt-button-active {\n  background: none;\n  box-shadow: none;\n}\ndiv.dt-button-collection .dt-button.disabled {\n  cursor: default;\n  opacity: 0.4;\n}\ndiv.dt-button-collection .dt-button:hover:not(.disabled) {\n  border: none;\n  background: rgba(153, 153, 153, 0.1);\n  box-shadow: none;\n}\ndiv.dt-button-collection div.dt-button-split {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: stretch;\n}\ndiv.dt-button-collection div.dt-button-split button.dt-button {\n  margin: 0;\n  display: inline-block;\n  width: 0;\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: 50px;\n}\ndiv.dt-button-collection div.dt-button-split button.dt-button-split-drop {\n  min-width: 33px;\n  flex: 0;\n}\ndiv.dt-button-collection.fixed .dt-button {\n  border-radius: 0.25em;\n  background: rgba(255, 255, 255, 0.1);\n}\ndiv.dt-button-collection.fixed {\n  position: fixed;\n  display: block;\n  top: 50%;\n  left: 50%;\n  margin-left: -75px;\n  border-radius: 5px;\n  background-color: white;\n  padding: 0.5em;\n}\ndiv.dt-button-collection.fixed.two-column {\n  margin-left: -200px;\n}\ndiv.dt-button-collection.fixed.three-column {\n  margin-left: -225px;\n}\ndiv.dt-button-collection.fixed.four-column {\n  margin-left: -300px;\n}\ndiv.dt-button-collection.fixed.columns {\n  margin-left: -409px;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-button-collection.fixed.columns {\n    margin-left: -308px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-button-collection.fixed.columns {\n    margin-left: -203px;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-button-collection.fixed.columns {\n    margin-left: -100px;\n  }\n}\ndiv.dt-button-collection.fixed > :last-child {\n  max-height: 100vh;\n  overflow: auto;\n}\ndiv.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {\n  display: block !important;\n  -webkit-column-gap: 8px;\n  -moz-column-gap: 8px;\n  -ms-column-gap: 8px;\n  -o-column-gap: 8px;\n  column-gap: 8px;\n}\ndiv.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {\n  -webkit-column-break-inside: avoid;\n  break-inside: avoid;\n}\ndiv.dt-button-collection.two-column {\n  width: 400px;\n}\ndiv.dt-button-collection.two-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 2;\n}\ndiv.dt-button-collection.three-column {\n  width: 450px;\n}\ndiv.dt-button-collection.three-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 3;\n}\ndiv.dt-button-collection.four-column {\n  width: 600px;\n}\ndiv.dt-button-collection.four-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 4;\n}\ndiv.dt-button-collection .dt-button {\n  border-radius: 0;\n}\ndiv.dt-button-collection.columns {\n  width: auto;\n}\ndiv.dt-button-collection.columns > :last-child {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-items: center;\n  gap: 6px;\n  width: 818px;\n  padding-bottom: 1px;\n}\ndiv.dt-button-collection.columns > :last-child .dt-button {\n  min-width: 200px;\n  flex: 0 1;\n  margin: 0;\n}\ndiv.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {\n  justify-content: space-between;\n}\ndiv.dt-button-collection.columns.dtb-b3 .dt-button {\n  flex: 1 1 32%;\n}\ndiv.dt-button-collection.columns.dtb-b2 .dt-button {\n  flex: 1 1 48%;\n}\ndiv.dt-button-collection.columns.dtb-b1 .dt-button {\n  flex: 1 1 100%;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-button-collection.columns > :last-child {\n    width: 612px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-button-collection.columns > :last-child {\n    width: 406px;\n  }\n  div.dt-button-collection.columns.dtb-b3 .dt-button {\n    flex: 0 1 32%;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-button-collection.columns > :last-child {\n    width: 200px;\n  }\n}\n\ndiv.dt-button-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7); /* Fallback */\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */\n  z-index: 2001;\n}\n\n.dt-button.processing {\n  color: rgba(0, 0, 0, 0.2);\n}\n.dt-button.processing:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 16px;\n  height: 16px;\n  margin: -8px 0 0 -8px;\n  box-sizing: border-box;\n  display: block;\n  content: \" \";\n  border: 2px solid rgb(40, 40, 40);\n  border-radius: 50%;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  animation: dtb-spinner 1500ms infinite linear;\n  -o-animation: dtb-spinner 1500ms infinite linear;\n  -ms-animation: dtb-spinner 1500ms infinite linear;\n  -webkit-animation: dtb-spinner 1500ms infinite linear;\n  -moz-animation: dtb-spinner 1500ms infinite linear;\n}\n\n@media screen and (max-width: 640px) {\n  div.dt-buttons {\n    float: none !important;\n    text-align: center;\n  }\n}\nhtml.dark div.dt-buttons > .dt-button,\nhtml.dark div.dt-buttons > div.dt-button-split .dt-button {\n  border: 1px solid rgb(89, 91, 94);\n  background: rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dt-buttons > .dt-button.dt-button-active:not(.disabled),\nhtml.dark div.dt-buttons > div.dt-button-split .dt-button.dt-button-active:not(.disabled) {\n  background: rgba(179, 179, 179, 0.15);\n  box-shadow: inset 1px 1px 2px black;\n}\nhtml.dark div.dt-buttons > .dt-button.dt-button-active:not(.disabled):hover:not(.disabled),\nhtml.dark div.dt-buttons > div.dt-button-split .dt-button.dt-button-active:not(.disabled):hover:not(.disabled) {\n  background: rgba(128, 128, 128, 0.15);\n  box-shadow: inset 1px 1px 3px black;\n}\nhtml.dark div.dt-buttons > .dt-button:hover:not(.disabled),\nhtml.dark div.dt-buttons > div.dt-button-split .dt-button:hover:not(.disabled) {\n  background: rgba(179, 179, 179, 0.15);\n}\nhtml.dark div.dt-buttons > .dt-button:focus:not(.disabled),\nhtml.dark div.dt-buttons > div.dt-button-split .dt-button:focus:not(.disabled) {\n  outline: 2px solid rgb(110, 168, 254);\n}\nhtml.dark div.dt-buttons > div.dt-button-split .dt-button:first-child {\n  border-right: 1px solid rgba(255, 255, 255, 0.1);\n}\nhtml.dark div.dt-buttons > div.dt-button-split .dt-button:first-child:hover {\n  border-right: 1px solid rgb(89, 91, 94);\n}\nhtml.dark div.dt-buttons > div.dt-button-split .dt-button:last-child:hover {\n  border-left: 1px solid rgb(89, 91, 94);\n}\nhtml.dark div.dt-button-collection {\n  border: 1px solid rgba(255, 255, 255, 0.15);\n  background-color: rgb(33, 37, 41);\n  box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);\n}\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/css/buttons.foundation.css",
    "content": "@keyframes dtb-spinner {\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-o-keyframes dtb-spinner {\n  100% {\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-ms-keyframes dtb-spinner {\n  100% {\n    -ms-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes dtb-spinner {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-moz-keyframes dtb-spinner {\n  100% {\n    -moz-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\ndiv.dataTables_wrapper {\n  position: relative;\n}\n\ndiv.dt-buttons {\n  position: initial;\n}\ndiv.dt-buttons .dt-button {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\ndiv.dt-button-info {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 400px;\n  margin-top: -100px;\n  margin-left: -200px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);\n  text-align: center;\n  z-index: 2003;\n  overflow: hidden;\n}\ndiv.dt-button-info h2 {\n  padding: 2rem 2rem 1rem 2rem;\n  margin: 0;\n  font-weight: normal;\n}\ndiv.dt-button-info > div {\n  padding: 1em 2em 2em 2em;\n}\n\ndiv.dtb-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 2003;\n}\n\nbutton.dtb-hide-drop {\n  display: none !important;\n}\n\ndiv.dt-button-collection-title {\n  text-align: center;\n  padding: 0.3em 0 0.5em;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 0.9em;\n}\n\ndiv.dt-button-collection-title:empty {\n  display: none;\n}\n\nspan.dt-button-spacer {\n  display: inline-block;\n  margin: 0.5em;\n  white-space: nowrap;\n}\nspan.dt-button-spacer.bar {\n  border-left: 1px solid rgba(0, 0, 0, 0.3);\n  vertical-align: middle;\n  padding-left: 0.5em;\n}\nspan.dt-button-spacer.bar:empty {\n  height: 1em;\n  width: 1px;\n  padding-left: 0;\n}\n\ndiv.dt-button-collection .dt-button-active {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split {\n  padding-right: 0;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split:after {\n  display: none;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active-a a {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active-a a:after {\n  position: absolute;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection span.dt-button-spacer {\n  width: 100%;\n  font-size: 0.9em;\n  text-align: center;\n  margin: 0.5em 0;\n}\ndiv.dt-button-collection span.dt-button-spacer:empty {\n  height: 0;\n  width: 100%;\n}\ndiv.dt-button-collection span.dt-button-spacer.bar {\n  border-left: none;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  padding-left: 0;\n}\n\nhtml.dark div.dt-button-info {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dt-buttons.button-group.fixed {\n  position: fixed;\n  display: block;\n  top: 50%;\n  left: 50%;\n  margin-left: -75px;\n  border-radius: 5px;\n  background-color: white;\n  padding: 0.5em;\n}\ndiv.dt-buttons.button-group.fixed.two-column {\n  margin-left: -200px;\n}\ndiv.dt-buttons.button-group.fixed.three-column {\n  margin-left: -225px;\n}\ndiv.dt-buttons.button-group.fixed.four-column {\n  margin-left: -300px;\n}\ndiv.dt-buttons.button-group.fixed.columns {\n  margin-left: -409px;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-buttons.button-group.fixed.columns {\n    margin-left: -308px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-buttons.button-group.fixed.columns {\n    margin-left: -203px;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-buttons.button-group.fixed.columns {\n    margin-left: -100px;\n  }\n}\ndiv.dt-buttons.button-group.fixed > :last-child {\n  max-height: 100vh;\n  overflow: auto;\n}\ndiv.dt-buttons.button-group.two-column > :last-child, div.dt-buttons.button-group.three-column > :last-child, div.dt-buttons.button-group.four-column > :last-child {\n  display: block !important;\n  -webkit-column-gap: 8px;\n  -moz-column-gap: 8px;\n  -ms-column-gap: 8px;\n  -o-column-gap: 8px;\n  column-gap: 8px;\n}\ndiv.dt-buttons.button-group.two-column > :last-child > *, div.dt-buttons.button-group.three-column > :last-child > *, div.dt-buttons.button-group.four-column > :last-child > * {\n  -webkit-column-break-inside: avoid;\n  break-inside: avoid;\n}\ndiv.dt-buttons.button-group.two-column {\n  width: 400px;\n}\ndiv.dt-buttons.button-group.two-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 2;\n}\ndiv.dt-buttons.button-group.three-column {\n  width: 450px;\n}\ndiv.dt-buttons.button-group.three-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 3;\n}\ndiv.dt-buttons.button-group.four-column {\n  width: 600px;\n}\ndiv.dt-buttons.button-group.four-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 4;\n}\ndiv.dt-buttons.button-group .dt-button {\n  border-radius: 0;\n}\ndiv.dt-buttons.button-group.columns {\n  width: auto;\n}\ndiv.dt-buttons.button-group.columns > :last-child {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-items: center;\n  gap: 6px;\n  width: 818px;\n  padding-bottom: 1px;\n}\ndiv.dt-buttons.button-group.columns > :last-child .dt-button {\n  min-width: 200px;\n  flex: 0 1;\n  margin: 0;\n}\ndiv.dt-buttons.button-group.columns.dtb-b3 > :last-child, div.dt-buttons.button-group.columns.dtb-b2 > :last-child, div.dt-buttons.button-group.columns.dtb-b1 > :last-child {\n  justify-content: space-between;\n}\ndiv.dt-buttons.button-group.columns.dtb-b3 .dt-button {\n  flex: 1 1 32%;\n}\ndiv.dt-buttons.button-group.columns.dtb-b2 .dt-button {\n  flex: 1 1 48%;\n}\ndiv.dt-buttons.button-group.columns.dtb-b1 .dt-button {\n  flex: 1 1 100%;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-buttons.button-group.columns > :last-child {\n    width: 612px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-buttons.button-group.columns > :last-child {\n    width: 406px;\n  }\n  div.dt-buttons.button-group.columns.dtb-b3 .dt-button {\n    flex: 0 1 32%;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-buttons.button-group.columns > :last-child {\n    width: 200px;\n  }\n}\ndiv.dt-buttons.button-group div.dt-button-split {\n  margin-bottom: 0;\n}\ndiv.dt-buttons.button-group div.dt-button-split > button:last-child {\n  margin-right: 1px;\n}\ndiv.dt-buttons.button-group div.dt-button-collection {\n  position: absolute;\n  min-width: 200px;\n  margin-top: 3px !important;\n  z-index: 2002;\n}\ndiv.dt-buttons.button-group div.dt-button-collection .dropdown.menu {\n  display: block;\n  left: 0;\n}\ndiv.dt-buttons.button-group div.dt-button-collection div.dt-button-split {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: stretch;\n}\ndiv.dt-buttons.button-group div.dt-button-collection div.dt-button-split > *:first-child {\n  min-width: auto;\n  flex: 1 0 50px;\n  padding-right: 0;\n}\ndiv.dt-buttons.button-group div.dt-button-collection div.dt-button-split > *:last-child {\n  min-width: 33px;\n  flex: 0;\n  background: transparent;\n  border: none;\n  line-height: 1rem;\n}\ndiv.dt-buttons.button-group div.dt-button-collection div.dt-button-split > *:last-child:after {\n  border-top-color: #1779ba;\n  margin-left: -10px;\n}\ndiv.dt-buttons.button-group div.dt-button-collection div.dt-button-split > *:last-child:hover {\n  border-top-color: #0b6daf;\n  margin-left: -10px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/css/buttons.jqueryui.css",
    "content": "@keyframes dtb-spinner {\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-o-keyframes dtb-spinner {\n  100% {\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-ms-keyframes dtb-spinner {\n  100% {\n    -ms-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes dtb-spinner {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-moz-keyframes dtb-spinner {\n  100% {\n    -moz-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\ndiv.dataTables_wrapper {\n  position: relative;\n}\n\ndiv.dt-buttons {\n  position: initial;\n}\ndiv.dt-buttons .dt-button {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\ndiv.dt-button-info {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 400px;\n  margin-top: -100px;\n  margin-left: -200px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);\n  text-align: center;\n  z-index: 2003;\n  overflow: hidden;\n}\ndiv.dt-button-info h2 {\n  padding: 2rem 2rem 1rem 2rem;\n  margin: 0;\n  font-weight: normal;\n}\ndiv.dt-button-info > div {\n  padding: 1em 2em 2em 2em;\n}\n\ndiv.dtb-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 2003;\n}\n\nbutton.dtb-hide-drop {\n  display: none !important;\n}\n\ndiv.dt-button-collection-title {\n  text-align: center;\n  padding: 0.3em 0 0.5em;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 0.9em;\n}\n\ndiv.dt-button-collection-title:empty {\n  display: none;\n}\n\nspan.dt-button-spacer {\n  display: inline-block;\n  margin: 0.5em;\n  white-space: nowrap;\n}\nspan.dt-button-spacer.bar {\n  border-left: 1px solid rgba(0, 0, 0, 0.3);\n  vertical-align: middle;\n  padding-left: 0.5em;\n}\nspan.dt-button-spacer.bar:empty {\n  height: 1em;\n  width: 1px;\n  padding-left: 0;\n}\n\ndiv.dt-button-collection .dt-button-active {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split {\n  padding-right: 0;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split:after {\n  display: none;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active-a a {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active-a a:after {\n  position: absolute;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection span.dt-button-spacer {\n  width: 100%;\n  font-size: 0.9em;\n  text-align: center;\n  margin: 0.5em 0;\n}\ndiv.dt-button-collection span.dt-button-spacer:empty {\n  height: 0;\n  width: 100%;\n}\ndiv.dt-button-collection span.dt-button-spacer.bar {\n  border-left: none;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  padding-left: 0;\n}\n\nhtml.dark div.dt-button-info {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dt-buttons {\n  position: relative;\n  float: left;\n}\ndiv.dt-buttons .dt-button {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  margin-right: 0;\n}\ndiv.dt-buttons .dt-button span.ui-icon {\n  display: inline-block;\n  vertical-align: middle;\n  margin-top: -2px;\n}\ndiv.dt-buttons .dt-button.processing {\n  color: rgba(0, 0, 0, 0.2);\n}\ndiv.dt-buttons .dt-button.processing:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 16px;\n  height: 16px;\n  margin: -8px 0 0 -8px;\n  box-sizing: border-box;\n  display: block;\n  content: \" \";\n  border: 2px solid rgb(40, 40, 40);\n  border-radius: 50%;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  animation: dtb-spinner 1500ms infinite linear;\n  -o-animation: dtb-spinner 1500ms infinite linear;\n  -ms-animation: dtb-spinner 1500ms infinite linear;\n  -webkit-animation: dtb-spinner 1500ms infinite linear;\n  -moz-animation: dtb-spinner 1500ms infinite linear;\n}\ndiv.dt-buttons .dt-button:active {\n  outline: none;\n}\n\ndiv.dt-button-collection {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 150px;\n  margin-top: 3px;\n  padding: 8px 8px 4px 8px;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.4);\n  background-color: #f3f3f3;\n  overflow: hidden;\n  z-index: 2002;\n  border-radius: 5px;\n  box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);\n  z-index: 2002;\n  column-gap: 0;\n}\ndiv.dt-button-collection .dt-button {\n  position: relative;\n  left: 0;\n  right: 0;\n  width: 100%;\n  box-sizing: border-box;\n  text-align: left;\n  display: block;\n  float: none;\n  margin-right: 0;\n  margin-bottom: 4px;\n}\ndiv.dt-button-collection .dt-button-split {\n  width: 100%;\n}\ndiv.dt-button-collection.fixed {\n  position: fixed;\n  display: block;\n  top: 50%;\n  left: 50%;\n  margin-left: -75px;\n  border-radius: 5px;\n  background-color: white;\n  padding: 0.5em;\n}\ndiv.dt-button-collection.fixed.two-column {\n  margin-left: -200px;\n}\ndiv.dt-button-collection.fixed.three-column {\n  margin-left: -225px;\n}\ndiv.dt-button-collection.fixed.four-column {\n  margin-left: -300px;\n}\ndiv.dt-button-collection.fixed.columns {\n  margin-left: -409px;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-button-collection.fixed.columns {\n    margin-left: -308px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-button-collection.fixed.columns {\n    margin-left: -203px;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-button-collection.fixed.columns {\n    margin-left: -100px;\n  }\n}\ndiv.dt-button-collection.fixed > :last-child {\n  max-height: 100vh;\n  overflow: auto;\n}\ndiv.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {\n  display: block !important;\n  -webkit-column-gap: 8px;\n  -moz-column-gap: 8px;\n  -ms-column-gap: 8px;\n  -o-column-gap: 8px;\n  column-gap: 8px;\n}\ndiv.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {\n  -webkit-column-break-inside: avoid;\n  break-inside: avoid;\n}\ndiv.dt-button-collection.two-column {\n  width: 400px;\n}\ndiv.dt-button-collection.two-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 2;\n}\ndiv.dt-button-collection.three-column {\n  width: 450px;\n}\ndiv.dt-button-collection.three-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 3;\n}\ndiv.dt-button-collection.four-column {\n  width: 600px;\n}\ndiv.dt-button-collection.four-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 4;\n}\ndiv.dt-button-collection .dt-button {\n  border-radius: 0;\n}\ndiv.dt-button-collection.columns {\n  width: auto;\n}\ndiv.dt-button-collection.columns > :last-child {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-items: center;\n  gap: 6px;\n  width: 818px;\n  padding-bottom: 1px;\n}\ndiv.dt-button-collection.columns > :last-child .dt-button {\n  min-width: 200px;\n  flex: 0 1;\n  margin: 0;\n}\ndiv.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {\n  justify-content: space-between;\n}\ndiv.dt-button-collection.columns.dtb-b3 .dt-button {\n  flex: 1 1 32%;\n}\ndiv.dt-button-collection.columns.dtb-b2 .dt-button {\n  flex: 1 1 48%;\n}\ndiv.dt-button-collection.columns.dtb-b1 .dt-button {\n  flex: 1 1 100%;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-button-collection.columns > :last-child {\n    width: 612px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-button-collection.columns > :last-child {\n    width: 406px;\n  }\n  div.dt-button-collection.columns.dtb-b3 .dt-button {\n    flex: 0 1 32%;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-button-collection.columns > :last-child {\n    width: 200px;\n  }\n}\n\ndiv.dt-button-split {\n  display: inline-flex;\n  vertical-align: middle;\n}\ndiv.dt-button-split:hover {\n  border: none;\n}\ndiv.dt-button-split button:first-child {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\ndiv.dt-button-split button:last-child {\n  padding: 0.4em 1em;\n  width: 24px;\n  margin-left: -1px;\n}\ndiv.dt-button-split button:last-child span {\n  margin-left: -7px;\n}\n\ndiv.dt-button-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7); /* Fallback */\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */\n  z-index: 2001;\n}\n\n@media screen and (max-width: 640px) {\n  div.dt-buttons {\n    float: none !important;\n    text-align: center;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/css/buttons.semanticui.css",
    "content": "@keyframes dtb-spinner {\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-o-keyframes dtb-spinner {\n  100% {\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-ms-keyframes dtb-spinner {\n  100% {\n    -ms-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes dtb-spinner {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-moz-keyframes dtb-spinner {\n  100% {\n    -moz-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\ndiv.dataTables_wrapper {\n  position: relative;\n}\n\ndiv.dt-buttons {\n  position: initial;\n}\ndiv.dt-buttons .dt-button {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\ndiv.dt-button-info {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 400px;\n  margin-top: -100px;\n  margin-left: -200px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);\n  text-align: center;\n  z-index: 2003;\n  overflow: hidden;\n}\ndiv.dt-button-info h2 {\n  padding: 2rem 2rem 1rem 2rem;\n  margin: 0;\n  font-weight: normal;\n}\ndiv.dt-button-info > div {\n  padding: 1em 2em 2em 2em;\n}\n\ndiv.dtb-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 2003;\n}\n\nbutton.dtb-hide-drop {\n  display: none !important;\n}\n\ndiv.dt-button-collection-title {\n  text-align: center;\n  padding: 0.3em 0 0.5em;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 0.9em;\n}\n\ndiv.dt-button-collection-title:empty {\n  display: none;\n}\n\nspan.dt-button-spacer {\n  display: inline-block;\n  margin: 0.5em;\n  white-space: nowrap;\n}\nspan.dt-button-spacer.bar {\n  border-left: 1px solid rgba(0, 0, 0, 0.3);\n  vertical-align: middle;\n  padding-left: 0.5em;\n}\nspan.dt-button-spacer.bar:empty {\n  height: 1em;\n  width: 1px;\n  padding-left: 0;\n}\n\ndiv.dt-button-collection .dt-button-active {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split {\n  padding-right: 0;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split:after {\n  display: none;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active-a a {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active-a a:after {\n  position: absolute;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection span.dt-button-spacer {\n  width: 100%;\n  font-size: 0.9em;\n  text-align: center;\n  margin: 0.5em 0;\n}\ndiv.dt-button-collection span.dt-button-spacer:empty {\n  height: 0;\n  width: 100%;\n}\ndiv.dt-button-collection span.dt-button-spacer.bar {\n  border-left: none;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  padding-left: 0;\n}\n\nhtml.dark div.dt-button-info {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dt-button-collection {\n  position: absolute !important;\n  min-width: 200px;\n  margin-top: 3px !important;\n  z-index: 2002;\n  background: white;\n}\ndiv.dt-button-collection > div.menu {\n  right: auto !important;\n  min-width: 150px !important;\n}\ndiv.dt-button-collection.fixed {\n  position: fixed;\n  display: block;\n  top: 50%;\n  left: 50%;\n  margin-left: -75px;\n  border-radius: 5px;\n  background-color: white;\n  padding: 0.5em;\n}\ndiv.dt-button-collection.fixed.two-column {\n  margin-left: -200px;\n}\ndiv.dt-button-collection.fixed.three-column {\n  margin-left: -225px;\n}\ndiv.dt-button-collection.fixed.four-column {\n  margin-left: -300px;\n}\ndiv.dt-button-collection.fixed.columns {\n  margin-left: -409px;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-button-collection.fixed.columns {\n    margin-left: -308px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-button-collection.fixed.columns {\n    margin-left: -203px;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-button-collection.fixed.columns {\n    margin-left: -100px;\n  }\n}\ndiv.dt-button-collection.fixed > :last-child {\n  max-height: 100vh;\n  overflow: auto;\n}\ndiv.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {\n  display: block !important;\n  -webkit-column-gap: 8px;\n  -moz-column-gap: 8px;\n  -ms-column-gap: 8px;\n  -o-column-gap: 8px;\n  column-gap: 8px;\n}\ndiv.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {\n  -webkit-column-break-inside: avoid;\n  break-inside: avoid;\n}\ndiv.dt-button-collection.two-column {\n  width: 400px;\n}\ndiv.dt-button-collection.two-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 2;\n}\ndiv.dt-button-collection.three-column {\n  width: 450px;\n}\ndiv.dt-button-collection.three-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 3;\n}\ndiv.dt-button-collection.four-column {\n  width: 600px;\n}\ndiv.dt-button-collection.four-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 4;\n}\ndiv.dt-button-collection .dt-button {\n  border-radius: 0;\n}\ndiv.dt-button-collection.columns {\n  width: auto;\n}\ndiv.dt-button-collection.columns > :last-child {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-items: center;\n  gap: 6px;\n  width: 818px;\n  padding-bottom: 1px;\n}\ndiv.dt-button-collection.columns > :last-child .dt-button {\n  min-width: 200px;\n  flex: 0 1;\n  margin: 0;\n}\ndiv.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {\n  justify-content: space-between;\n}\ndiv.dt-button-collection.columns.dtb-b3 .dt-button {\n  flex: 1 1 32%;\n}\ndiv.dt-button-collection.columns.dtb-b2 .dt-button {\n  flex: 1 1 48%;\n}\ndiv.dt-button-collection.columns.dtb-b1 .dt-button {\n  flex: 1 1 100%;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-button-collection.columns > :last-child {\n    width: 612px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-button-collection.columns > :last-child {\n    width: 406px;\n  }\n  div.dt-button-collection.columns.dtb-b3 .dt-button {\n    flex: 0 1 32%;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-button-collection.columns > :last-child {\n    width: 200px;\n  }\n}\ndiv.dt-button-collection div.dt-button-collection-title {\n  font-size: 1rem;\n}\ndiv.dt-button-collection.columns div.ui.basic.buttons span.dt-button-spacer {\n  background: transparent !important;\n  border: none;\n  flex: 1 1 100%;\n}\ndiv.dt-button-collection.columns div.ui.basic.buttons span.dt-button-spacer:hover {\n  background: transparent !important;\n}\ndiv.dt-button-collection:not(.columns) .ui.vertical.buttons {\n  width: 100%;\n  border: none;\n}\ndiv.dt-button-collection.columns .ui.vertical.buttons {\n  flex-direction: row;\n  border: none;\n}\ndiv.dt-button-collection div.dt-button-split {\n  display: flex;\n}\ndiv.dt-button-collection div.dt-button-split div:first-child {\n  flex-grow: 1 !important;\n  flex-basis: auto !important;\n  width: auto !important;\n  border-left: none !important;\n  position: relative;\n  cursor: pointer;\n  display: block;\n  border: none;\n  height: auto;\n  min-height: 2.57142857rem;\n  text-align: left;\n  line-height: 1em;\n  font-size: 1rem;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.78571429rem 1.14285714rem;\n}\ndiv.dt-button-collection div.dt-button-split div:first-child:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  z-index: 13;\n}\ndiv.dt-button-collection div.dt-button-split button:last-child {\n  flex: 0 1 0 !important;\n  min-width: 32px;\n  border: none;\n  background: transparent;\n}\ndiv.dt-button-collection div.dt-button-split button:last-child:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  z-index: 13;\n}\n\ndiv.dt-button-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 2001;\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-buttons {\n    float: none;\n    width: 100%;\n    text-align: center;\n    margin-bottom: 0.5em;\n  }\n  div.dt-buttons a.btn {\n    float: none;\n  }\n}\ndiv.dt-buttons button.button.processing,\ndiv.dt-buttons div.button.processing,\ndiv.dt-buttons a.button.processing {\n  position: relative;\n  color: rgba(0, 0, 0, 0.2);\n}\ndiv.dt-buttons button.button.processing:after,\ndiv.dt-buttons div.button.processing:after,\ndiv.dt-buttons a.button.processing:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 16px;\n  height: 16px;\n  margin: -8px 0 0 -8px;\n  box-sizing: border-box;\n  display: block;\n  content: \" \";\n  border: 2px solid rgb(40, 40, 40);\n  border-radius: 50%;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  animation: dtb-spinner 1500ms infinite linear;\n  -o-animation: dtb-spinner 1500ms infinite linear;\n  -ms-animation: dtb-spinner 1500ms infinite linear;\n  -webkit-animation: dtb-spinner 1500ms infinite linear;\n  -moz-animation: dtb-spinner 1500ms infinite linear;\n}\ndiv.dt-buttons.ui.buttons {\n  flex-wrap: wrap;\n}\ndiv.dt-buttons .button span.dt-button-down-arrow {\n  position: relative;\n  top: -2px;\n  font-size: 10px;\n  padding-left: 10px;\n  line-height: 1em;\n  opacity: 0.6;\n}\ndiv.dt-buttons .dt-button-split-drop span.dt-button-down-arrow {\n  padding-left: 0;\n}\n\nspan.dt-button-spacer {\n  cursor: inherit;\n}\nspan.dt-button-spacer.bar {\n  padding-left: 1.5em;\n}\nspan.dt-button-spacer.bar:empty {\n  height: inherit;\n}\n\ndiv.dt-button-collection span.dt-button-spacer {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\ndiv.dt-button-collection span.dt-button-spacer.bar {\n  border-bottom: none;\n  padding-left: 1.5em;\n}\n\ndiv.dt-buttons.ui.basic.buttons .button.dt-button-spacer {\n  background: rgba(34, 36, 38, 0.05) !important;\n  box-shadow: none;\n  cursor: initial;\n}\ndiv.dt-buttons.ui.basic.buttons .button.dt-button-spacer:hover {\n  background-color: rgba(34, 36, 38, 0.05) !important;\n}\n\ndiv.dt-button-split {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\ndiv.dt-button-split button:first-child,\ndiv.dt-button-split button:last-child {\n  border-radius: 0px !important;\n}\ndiv.dt-button-split:active:not(.disabled) button.button, div.dt-button-split.active:not(.disabled) button.button {\n  background-color: #f8f8f8 !important;\n}\ndiv.dt-button-split:active:not(.disabled) button.dt-button-split-drop, div.dt-button-split.active:not(.disabled) button.dt-button-split-drop {\n  box-shadow: none;\n  background-color: transparent !important;\n}\ndiv.dt-button-split:active:not(.disabled) button.button:hover, div.dt-button-split.active:not(.disabled) button.button:hover {\n  background-color: transparent !important;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/css/common.scss",
    "content": "\n@mixin active-tick {\n\tposition: absolute;\n\ttop: 50%;\n\tmargin-top: -10px;\n\tright: 1em;\n\tdisplay: inline-block;\n\tcontent: '\\2713'; // utf8 tick\n\tcolor: inherit;\n}\n\ndiv.dataTables_wrapper {\n\tposition: relative;\n}\n\ndiv.dt-buttons {\n\tposition: initial;\n\n\t.dt-button {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\ndiv.dt-button-info {\n\tposition: fixed;\n\ttop: 50%;\n\tleft: 50%;\n\twidth: 400px;\n\tmargin-top: -100px;\n\tmargin-left: -200px;\n\tbackground-color: white;\n\tborder-radius: 0.75em;\n\tbox-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);\n\ttext-align: center;\n\tz-index: 2003;\n\toverflow: hidden;\n\n\th2 {\n\t\tpadding: 2rem 2rem 1rem 2rem;\n\t\tmargin: 0;\n\t\tfont-weight: normal;\n\t}\n\n\t> div {\n\t\tpadding: 1em 2em 2em 2em;\n\t}\n}\n\ndiv.dtb-popover-close {\n\tposition: absolute;\n\ttop: 6px;\n\tright: 6px;\n\twidth: 22px;\n\theight: 22px;\n\ttext-align: center;\n\tborder-radius: 3px;\n\tcursor: pointer;\n\tz-index: 2003;\n}\n\nbutton.dtb-hide-drop {\n\tdisplay: none !important;\n}\n\ndiv.dt-button-collection-title {\n\ttext-align: center;\n\tpadding: 0.3em 0 0.5em;\n\tmargin-left: 0.5em;\n\tmargin-right: 0.5em;\n\tfont-size: 0.9em;\n}\n\ndiv.dt-button-collection-title:empty {\n\tdisplay: none;\n}\n\nspan.dt-button-spacer {\n\tdisplay: inline-block;\n\tmargin: 0.5em;\n\twhite-space: nowrap;\n\n\t&.bar {\n\t\tborder-left: 1px solid rgba(0, 0, 0, 0.3);\n\t\tvertical-align: middle;\n\t\tpadding-left: 0.5em;\n\n\t\t&:empty {\n\t\t\theight: 1em;\n\t\t\twidth: 1px;\n\t\t\tpadding-left: 0;\n\t\t}\n\t}\n}\n\n\n\ndiv.dt-button-collection {\n\t.dt-button-active {\n\t\tpadding-right: 3em;\n\n\t\t&:after {\n\t\t\t@include active-tick;\n\t\t}\n\n\t\t&.dt-button-split {\n\t\t\tpadding-right: 0;\n\n\t\t\t&:after {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\t> *:first-child {\n\t\t\t\tpadding-right: 3em;\n\t\t\n\t\t\t\t&:after {\n\t\t\t\t\t@include active-tick;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t.dt-button-active-a a {\n\t\tpadding-right: 3em;\n\n\t\t&:after {\n\t\t\tposition: absolute;\n\t\t\tright: 1em;\n\t\t\tdisplay: inline-block;\n\t\t\tcontent: '\\2713'; // utf8 tick\n\t\t\tcolor: inherit;\n\t\t}\n\t}\n\n\tspan.dt-button-spacer {\n\t\twidth: 100%;\n\t\tfont-size: 0.9em;\n\t\ttext-align: center;\n\t\tmargin: 0.5em 0;\n\n\t\t&:empty {\n\t\t\theight: 0;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t&.bar {\n\t\t\tborder-left: none;\n\t\t\tborder-bottom: 1px solid rgba(0, 0, 0, 0.1);\n\t\t\tpadding-left: 0;\n\t\t}\n\t}\n}\n\nhtml.dark {\n\tdiv.dt-button-info {\n\t\tbackground-color: var(--dt-html-background);\n\t\tborder: 1px solid rgba(255, 255, 255, 0.15);\n\t}\n}\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/css/mixins.scss",
    "content": "\n@function dtb-tint( $color, $percent ) {\n\t@return mix(white, $color, $percent);\n}\n\n@function dtb-shade( $color, $percent ) {\n\t@return mix(black, $color, $percent);\n}\n\n@mixin dtb-two-stop-gradient($fromColor, $toColor) {\n\tbackground-color: $toColor; /* Fallback */\n\tbackground: linear-gradient(to bottom, $fromColor 0%, $toColor 100%);\n\tfilter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#{nth( $fromColor, 1 )}', EndColorStr='#{nth( $toColor, 1 )}');\n}\n\n@mixin dtb-radial-gradient ($fromColor, $toColor ) {\n\tbackground: $toColor; /* Fallback */\n\tbackground: radial-gradient(ellipse farthest-corner at center, $fromColor 0%, $toColor 100%); /* W3C Markup, IE10 Release Preview */ \n}\n\n\n@mixin dtb-fixed-collection {\n\t// Fixed positioning feature\n\t&.fixed {\n\t\tposition: fixed;\n\t\tdisplay: block;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\tmargin-left: -75px;\n\t\tborder-radius: 5px;\n\t\tbackground-color: white;\n\t\tpadding: 0.5em;\n\n\t\t&.two-column {\n\t\t\tmargin-left: -200px;\n\t\t}\n\n\t\t&.three-column {\n\t\t\tmargin-left: -225px;\n\t\t}\n\n\t\t&.four-column {\n\t\t\tmargin-left: -300px;\n\t\t}\n\n\t\t&.columns {\n\t\t\t// Four column\n\t\t\tmargin-left: -409px;\n\n\t\t\t@media screen and (max-width: 1024px) {\n\t\t\t\tmargin-left: -308px;\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 640px) {\n\t\t\t\tmargin-left: -203px;\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 460px) {\n\t\t\t\tmargin-left: -100px;\n\t\t\t}\n\t\t}\n\n\t\t> :last-child {\n\t\t\tmax-height: 100vh;\n\t\t\toverflow: auto;\n\t\t}\n\t}\n\n\t&.two-column > :last-child,\n\t&.three-column > :last-child,\n\t&.four-column > :last-child {\n\t\t> * {\n\t\t\t-webkit-column-break-inside: avoid;\n\t\t\tbreak-inside: avoid;\n\t\t}\n\n\t\t// Multi-column layout feature\n\t\tdisplay: block !important;\n\t\t-webkit-column-gap: 8px;\n\t\t-moz-column-gap: 8px;\n\t\t\t-ms-column-gap: 8px;\n\t\t\t-o-column-gap: 8px;\n\t\tcolumn-gap: 8px;\n\t}\n\n\t&.two-column {\n\t\twidth: 400px;\n\n\t\t> :last-child {\n\t\t\tpadding-bottom: 1px;\n\t\t\tcolumn-count: 2;\n\t\t}\n\t}\n\n\t&.three-column {\n\t\twidth: 450px;\n\n\t\t> :last-child {\n\t\t\tpadding-bottom: 1px;\n\t\t\tcolumn-count: 3;\n\t\t}\n\t}\n\n\t&.four-column {\n\t\twidth: 600px;\n\n\t\t> :last-child {\n\t\t\tpadding-bottom: 1px;\n\t\t\tcolumn-count: 4;\n\t\t}\n\t}\n\n\t// Chrome fix - 531528\n\t.dt-button {\n\t\tborder-radius: 0;\n\t}\n\n\t&.columns {\n\t\t// Four column layout\n\t\twidth: auto;\n\n\t\t> :last-child {\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: flex-start;\n\t\t\talign-items: center;\n\t\t\tgap: 6px;\n\n\t\t\twidth: 818px;\n\t\t\tpadding-bottom: 1px;\n\t\t\t\n\t\t\t.dt-button {\n\t\t\t\tmin-width: 200px;\n\t\t\t\tflex: 0 1;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t&.dtb-b3,\n\t\t&.dtb-b2,\n\t\t&.dtb-b1 {\n\t\t\t> :last-child {\n\t\t\t\tjustify-content: space-between;\n\t\t\t}\n\t\t}\n\n\t\t&.dtb-b3 .dt-button {\n\t\t\tflex: 1 1 32%;\n\t\t}\n\t\t&.dtb-b2 .dt-button {\n\t\t\tflex: 1 1 48%;\n\t\t}\n\t\t&.dtb-b1 .dt-button {\n\t\t\tflex: 1 1 100%;\n\t\t}\n\n\t\t@media screen and (max-width: 1024px) {\n\t\t\t// Three column layout\n\t\t\t> :last-child {\n\t\t\t\twidth: 612px;\n\t\t\t}\n\t\t}\n\n\t\t@media screen and (max-width: 640px) {\n\t\t\t// Two column layout\n\t\t\t> :last-child {\n\t\t\t\twidth: 406px;\n\t\t\t}\n\n\t\t\t&.dtb-b3 .dt-button {\n\t\t\t\tflex: 0 1 32%;\n\t\t\t}\n\t\t}\n\n\t\t@media screen and (max-width: 460px) {\n\t\t\t// Single column\n\t\t\t> :last-child {\n\t\t\t\twidth: 200px;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n@mixin dtb-processing {\n\tcolor: rgba(0, 0, 0, 0.2);\n\n\t&:after {\n\t\tposition: absolute;\n\t    top: 50%;\n\t\tleft: 50%;\n\t\twidth: 16px;\n\t\theight: 16px;\n\t\tmargin: -8px 0 0 -8px;\n\t\tbox-sizing: border-box;\n\n\t\tdisplay: block;\n\t\tcontent: ' ';\n\t\tborder: 2px solid rgb(40,40,40);\n\t\tborder-radius: 50%;\n\t\tborder-left-color: transparent;\n\t\tborder-right-color: transparent;\n\t\tanimation: dtb-spinner 1500ms infinite linear;\n\t\t\t-o-animation: dtb-spinner 1500ms infinite linear;\n\t\t\t-ms-animation: dtb-spinner 1500ms infinite linear;\n\t\t\t-webkit-animation: dtb-spinner 1500ms infinite linear;\n\t\t\t-moz-animation: dtb-spinner 1500ms infinite linear;\n\t}\n}\n\n@keyframes dtb-spinner {\n\t100%{ transform: rotate(360deg); }\n}\n\n@-o-keyframes dtb-spinner {\n\t100%{ -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n\n@-ms-keyframes dtb-spinner {\n\t100%{ -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n\n@-webkit-keyframes dtb-spinner {\n\t100%{ -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n\n@-moz-keyframes dtb-spinner {\n\t100%{ -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/js/buttons.bootstrap.js",
    "content": "/*! Bootstrap integration for DataTables' Buttons\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n$.extend(true, DataTable.Buttons.defaults, {\n\tdom: {\n\t\tcontainer: {\n\t\t\tclassName: 'dt-buttons btn-group flex-wrap'\n\t\t},\n\t\tbutton: {\n\t\t\tclassName: 'btn btn-default',\n\t\t\tactive: 'active'\n\t\t},\n\t\tcollection: {\n\t\t\taction: {\n\t\t\t\tdropHtml: '<span class=\"caret\"></span>'\n\t\t\t},\n\t\t\tcontainer: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dt-button-collection',\n\t\t\t\tcontent: {\n\t\t\t\t\ttag: 'ul',\n\t\t\t\t\tclassName: 'dropdown-menu'\n\t\t\t\t}\n\t\t\t},\n\t\t\tcloseButton: false,\n\t\t\tbutton: {\n\t\t\t\ttag: 'li',\n\t\t\t\tclassName: 'dt-button',\n\t\t\t\tactive: 'dt-button-active-a',\n\t\t\t\tdisabled: 'disabled',\n\t\t\t\tliner: {\n\t\t\t\t\ttag: 'a'\n\t\t\t\t},\n\t\t\t\tspacer: {\n\t\t\t\t\tclassName: 'divider',\n\t\t\t\t\ttag: 'li'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsplit: {\n\t\t\taction: {\n\t\t\t\ttag: 'a',\n\t\t\t\tclassName: 'btn btn-default dt-button-split-drop-button',\n\t\t\t\tcloseButton: false\n\t\t\t},\n\t\t\tdropdown: {\n\t\t\t\ttag: 'button',\n\t\t\t\tdropHtml: '<span class=\"caret\"></span>',\n\t\t\t\tclassName:\n\t\t\t\t\t'btn btn-default dt-button-split-drop dropdown-toggle dropdown-toggle-split',\n\t\t\t\tcloseButton: false,\n\t\t\t\talign: 'split-left',\n\t\t\t\tsplitAlignClass: 'dt-button-split-left'\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dt-button-split btn-group',\n\t\t\t\tcloseButton: false\n\t\t\t}\n\t\t}\n\t}\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/js/buttons.bootstrap4.js",
    "content": "/*! Bootstrap integration for DataTables' Buttons\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n$.extend(true, DataTable.Buttons.defaults, {\n\tdom: {\n\t\tcontainer: {\n\t\t\tclassName: 'dt-buttons btn-group flex-wrap'\n\t\t},\n\t\tbutton: {\n\t\t\tclassName: 'btn btn-secondary',\n\t\t\tactive: 'active'\n\t\t},\n\t\tcollection: {\n\t\t\taction: {\n\t\t\t\tdropHtml: ''\n\t\t\t},\n\t\t\tcontainer: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dropdown-menu dt-button-collection'\n\t\t\t},\n\t\t\tcloseButton: false,\n\t\t\tbutton: {\n\t\t\t\ttag: 'a',\n\t\t\t\tclassName: 'dt-button dropdown-item',\n\t\t\t\tactive: 'dt-button-active',\n\t\t\t\tdisabled: 'disabled',\n\t\t\t\tspacer: {\n\t\t\t\t\tclassName: 'dropdown-divider',\n\t\t\t\t\ttag: 'hr'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsplit: {\n\t\t\taction: {\n\t\t\t\ttag: 'a',\n\t\t\t\tclassName: 'btn btn-secondary dt-button-split-drop-button',\n\t\t\t\tcloseButton: false\n\t\t\t},\n\t\t\tdropdown: {\n\t\t\t\ttag: 'button',\n\t\t\t\tdropHtml: '',\n\t\t\t\tclassName:\n\t\t\t\t\t'btn btn-secondary dt-button-split-drop dropdown-toggle dropdown-toggle-split',\n\t\t\t\tcloseButton: false,\n\t\t\t\talign: 'split-left',\n\t\t\t\tsplitAlignClass: 'dt-button-split-left'\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dt-button-split btn-group',\n\t\t\t\tcloseButton: false\n\t\t\t}\n\t\t}\n\t},\n\tbuttonCreated: function (config, button) {\n\t\treturn config.buttons ? $('<div class=\"btn-group\"/>').append(button) : button;\n\t}\n});\n\nDataTable.ext.buttons.collection.className += ' dropdown-toggle';\nDataTable.ext.buttons.collection.rightAlignClassName = 'dropdown-menu-right';\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/js/buttons.bootstrap5.js",
    "content": "/*! Bootstrap integration for DataTables' Buttons\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n$.extend(true, DataTable.Buttons.defaults, {\n\tdom: {\n\t\tcontainer: {\n\t\t\tclassName: 'dt-buttons btn-group flex-wrap'\n\t\t},\n\t\tbutton: {\n\t\t\tclassName: 'btn btn-secondary',\n\t\t\tactive: 'active'\n\t\t},\n\t\tcollection: {\n\t\t\taction: {\n\t\t\t\tdropHtml: ''\n\t\t\t},\n\t\t\tcontainer: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dropdown-menu dt-button-collection'\n\t\t\t},\n\t\t\tcloseButton: false,\n\t\t\tbutton: {\n\t\t\t\ttag: 'a',\n\t\t\t\tclassName: 'dt-button dropdown-item',\n\t\t\t\tactive: 'dt-button-active',\n\t\t\t\tdisabled: 'disabled',\n\t\t\t\tspacer: {\n\t\t\t\t\tclassName: 'dropdown-divider',\n\t\t\t\t\ttag: 'hr'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsplit: {\n\t\t\taction: {\n\t\t\t\ttag: 'a',\n\t\t\t\tclassName: 'btn btn-secondary dt-button-split-drop-button',\n\t\t\t\tcloseButton: false\n\t\t\t},\n\t\t\tdropdown: {\n\t\t\t\ttag: 'button',\n\t\t\t\tdropHtml: '',\n\t\t\t\tclassName:\n\t\t\t\t\t'btn btn-secondary dt-button-split-drop dropdown-toggle dropdown-toggle-split',\n\t\t\t\tcloseButton: false,\n\t\t\t\talign: 'split-left',\n\t\t\t\tsplitAlignClass: 'dt-button-split-left'\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dt-button-split btn-group',\n\t\t\t\tcloseButton: false\n\t\t\t}\n\t\t}\n\t},\n\tbuttonCreated: function (config, button) {\n\t\treturn config.buttons ? $('<div class=\"btn-group\"/>').append(button) : button;\n\t}\n});\n\nDataTable.ext.buttons.collection.className += ' dropdown-toggle';\nDataTable.ext.buttons.collection.rightAlignClassName = 'dropdown-menu-right';\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/js/buttons.bulma.js",
    "content": "/*! Bulma integration for DataTables' Buttons\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n$.extend(true, DataTable.Buttons.defaults, {\n\tdom: {\n\t\tcontainer: {\n\t\t\tclassName: 'dt-buttons field is-grouped'\n\t\t},\n\t\tbutton: {\n\t\t\tclassName: 'button is-light',\n\t\t\tactive: 'is-active',\n\t\t\tdisabled: 'is-disabled'\n\t\t},\n\t\tcollection: {\n\t\t\taction: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dropdown-content',\n\t\t\t\tdropHtml: ''\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\ttag: 'a',\n\t\t\t\tclassName: 'dt-button dropdown-item',\n\t\t\t\tactive: 'dt-button-active',\n\t\t\t\tdisabled: 'is-disabled',\n\t\t\t\tspacer: {\n\t\t\t\t\tclassName: 'dropdown-divider',\n\t\t\t\t\ttag: 'hr'\n\t\t\t\t}\n\t\t\t},\n\t\t\tcloseButton: false,\n\t\t\tcontainer: {\n\t\t\t\tclassName: 'dt-button-collection dropdown-menu',\n\t\t\t\tcontent: {\n\t\t\t\t\tclassName: 'dropdown-content'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsplit: {\n\t\t\taction: {\n\t\t\t\ttag: 'button',\n\t\t\t\tclassName: 'dt-button-split-drop-button button is-light',\n\t\t\t\tcloseButton: false\n\t\t\t},\n\t\t\tdropdown: {\n\t\t\t\ttag: 'button',\n\t\t\t\tdropHtml: '<i class=\"fa fa-angle-down\" aria-hidden=\"true\"></i>',\n\t\t\t\tclassName: 'button is-light',\n\t\t\t\tcloseButton: false,\n\t\t\t\talign: 'split-left',\n\t\t\t\tsplitAlignClass: 'dt-button-split-left'\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dt-button-split dropdown-trigger buttons has-addons',\n\t\t\t\tcloseButton: false\n\t\t\t}\n\t\t}\n\t},\n\tbuttonCreated: function (config, button) {\n\t\t// For collections\n\t\tif (config.buttons) {\n\t\t\t// Wrap the dropdown content in a menu element\n\t\t\tconfig._collection = $('<div class=\"dropdown-menu\"/>').append(config._collection);\n\n\t\t\t// And add the collection dropdown icon\n\t\t\t$(button).append(\n\t\t\t\t'<span class=\"icon is-small\">' +\n\t\t\t\t\t'<i class=\"fa fa-angle-down\" aria-hidden=\"true\"></i>' +\n\t\t\t\t\t'</span>'\n\t\t\t);\n\t\t}\n\n\t\treturn button;\n\t}\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/js/buttons.colVis.js",
    "content": "/*!\n * Column visibility buttons for Buttons and DataTables.\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n$.extend(DataTable.ext.buttons, {\n\t// A collection of column visibility buttons\n\tcolvis: function (dt, conf) {\n\t\tvar node = null;\n\t\tvar buttonConf = {\n\t\t\textend: 'collection',\n\t\t\tinit: function (dt, n) {\n\t\t\t\tnode = n;\n\t\t\t},\n\t\t\ttext: function (dt) {\n\t\t\t\treturn dt.i18n('buttons.colvis', 'Column visibility');\n\t\t\t},\n\t\t\tclassName: 'buttons-colvis',\n\t\t\tcloseButton: false,\n\t\t\tbuttons: [\n\t\t\t\t{\n\t\t\t\t\textend: 'columnsToggle',\n\t\t\t\t\tcolumns: conf.columns,\n\t\t\t\t\tcolumnText: conf.columnText\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\t// Rebuild the collection with the new column structure if columns are reordered\n\t\tdt.on('column-reorder.dt' + conf.namespace, function (e, settings, details) {\n\t\t\tdt.button(null, dt.button(null, node).node()).collectionRebuild([\n\t\t\t\t{\n\t\t\t\t\textend: 'columnsToggle',\n\t\t\t\t\tcolumns: conf.columns,\n\t\t\t\t\tcolumnText: conf.columnText\n\t\t\t\t}\n\t\t\t]);\n\t\t});\n\n\t\treturn buttonConf;\n\t},\n\n\t// Selected columns with individual buttons - toggle column visibility\n\tcolumnsToggle: function (dt, conf) {\n\t\tvar columns = dt\n\t\t\t.columns(conf.columns)\n\t\t\t.indexes()\n\t\t\t.map(function (idx) {\n\t\t\t\treturn {\n\t\t\t\t\textend: 'columnToggle',\n\t\t\t\t\tcolumns: idx,\n\t\t\t\t\tcolumnText: conf.columnText\n\t\t\t\t};\n\t\t\t})\n\t\t\t.toArray();\n\n\t\treturn columns;\n\t},\n\n\t// Single button to toggle column visibility\n\tcolumnToggle: function (dt, conf) {\n\t\treturn {\n\t\t\textend: 'columnVisibility',\n\t\t\tcolumns: conf.columns,\n\t\t\tcolumnText: conf.columnText\n\t\t};\n\t},\n\n\t// Selected columns with individual buttons - set column visibility\n\tcolumnsVisibility: function (dt, conf) {\n\t\tvar columns = dt\n\t\t\t.columns(conf.columns)\n\t\t\t.indexes()\n\t\t\t.map(function (idx) {\n\t\t\t\treturn {\n\t\t\t\t\textend: 'columnVisibility',\n\t\t\t\t\tcolumns: idx,\n\t\t\t\t\tvisibility: conf.visibility,\n\t\t\t\t\tcolumnText: conf.columnText\n\t\t\t\t};\n\t\t\t})\n\t\t\t.toArray();\n\n\t\treturn columns;\n\t},\n\n\t// Single button to set column visibility\n\tcolumnVisibility: {\n\t\tcolumns: undefined, // column selector\n\t\ttext: function (dt, button, conf) {\n\t\t\treturn conf._columnText(dt, conf);\n\t\t},\n\t\tclassName: 'buttons-columnVisibility',\n\t\taction: function (e, dt, button, conf) {\n\t\t\tvar col = dt.columns(conf.columns);\n\t\t\tvar curr = col.visible();\n\n\t\t\tcol.visible(\n\t\t\t\tconf.visibility !== undefined ? conf.visibility : !(curr.length ? curr[0] : false)\n\t\t\t);\n\t\t},\n\t\tinit: function (dt, button, conf) {\n\t\t\tvar that = this;\n\t\t\tbutton.attr('data-cv-idx', conf.columns);\n\n\t\t\tdt.on('column-visibility.dt' + conf.namespace, function (e, settings) {\n\t\t\t\tif (!settings.bDestroying && settings.nTable == dt.settings()[0].nTable) {\n\t\t\t\t\tthat.active(dt.column(conf.columns).visible());\n\t\t\t\t}\n\t\t\t}).on('column-reorder.dt' + conf.namespace, function (e, settings, details) {\n\t\t\t\t// Button has been removed from the DOM\n\t\t\t\tif (conf.destroying) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (dt.columns(conf.columns).count() !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// This button controls the same column index but the text for the column has\n\t\t\t\t// changed\n\t\t\t\tthat.text(conf._columnText(dt, conf));\n\n\t\t\t\t// Since its a different column, we need to check its visibility\n\t\t\t\tthat.active(dt.column(conf.columns).visible());\n\t\t\t});\n\n\t\t\tthis.active(dt.column(conf.columns).visible());\n\t\t},\n\t\tdestroy: function (dt, button, conf) {\n\t\t\tdt.off('column-visibility.dt' + conf.namespace).off(\n\t\t\t\t'column-reorder.dt' + conf.namespace\n\t\t\t);\n\t\t},\n\n\t\t_columnText: function (dt, conf) {\n\t\t\t// Use DataTables' internal data structure until this is presented\n\t\t\t// is a public API. The other option is to use\n\t\t\t// `$( column(col).node() ).text()` but the node might not have been\n\t\t\t// populated when Buttons is constructed.\n\t\t\tvar idx = dt.column(conf.columns).index();\n\t\t\tvar title = dt.settings()[0].aoColumns[idx].sTitle;\n\n\t\t\tif (!title) {\n\t\t\t\ttitle = dt.column(idx).header().innerHTML;\n\t\t\t}\n\n\t\t\ttitle = title\n\t\t\t\t.replace(/\\n/g, ' ') // remove new lines\n\t\t\t\t.replace(/<br\\s*\\/?>/gi, ' ') // replace line breaks with spaces\n\t\t\t\t.replace(/<select(.*?)<\\/select>/g, '') // remove select tags, including options text\n\t\t\t\t.replace(/<!\\-\\-.*?\\-\\->/g, '') // strip HTML comments\n\t\t\t\t.replace(/<.*?>/g, '') // strip HTML\n\t\t\t\t.replace(/^\\s+|\\s+$/g, ''); // trim\n\n\t\t\treturn conf.columnText ? conf.columnText(dt, idx, title) : title;\n\t\t}\n\t},\n\n\tcolvisRestore: {\n\t\tclassName: 'buttons-colvisRestore',\n\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.colvisRestore', 'Restore visibility');\n\t\t},\n\n\t\tinit: function (dt, button, conf) {\n\t\t\tconf._visOriginal = dt\n\t\t\t\t.columns()\n\t\t\t\t.indexes()\n\t\t\t\t.map(function (idx) {\n\t\t\t\t\treturn dt.column(idx).visible();\n\t\t\t\t})\n\t\t\t\t.toArray();\n\t\t},\n\n\t\taction: function (e, dt, button, conf) {\n\t\t\tdt.columns().every(function (i) {\n\t\t\t\t// Take into account that ColReorder might have disrupted our\n\t\t\t\t// indexes\n\t\t\t\tvar idx =\n\t\t\t\t\tdt.colReorder && dt.colReorder.transpose\n\t\t\t\t\t\t? dt.colReorder.transpose(i, 'toOriginal')\n\t\t\t\t\t\t: i;\n\n\t\t\t\tthis.visible(conf._visOriginal[idx]);\n\t\t\t});\n\t\t}\n\t},\n\n\tcolvisGroup: {\n\t\tclassName: 'buttons-colvisGroup',\n\n\t\taction: function (e, dt, button, conf) {\n\t\t\tdt.columns(conf.show).visible(true, false);\n\t\t\tdt.columns(conf.hide).visible(false, false);\n\n\t\t\tdt.columns.adjust();\n\t\t},\n\n\t\tshow: [],\n\n\t\thide: []\n\t}\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/js/buttons.dataTables.js",
    "content": "/*! DataTables styling wrapper for Buttons\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/js/buttons.foundation.js",
    "content": "/*! Foundation integration for DataTables' Buttons\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n$.extend(true, DataTable.Buttons.defaults, {\n\tdom: {\n\t\tcontainer: {\n\t\t\ttag: 'div',\n\t\t\tclassName: 'dt-buttons button-group'\n\t\t},\n\t\tbutton: {\n\t\t\ttag: 'a',\n\t\t\tclassName: 'dt-button button small',\n\t\t\tactive: 'secondary active'\n\t\t},\n\t\tcollection: {\n\t\t\taction: {\n\t\t\t\tdropHtml: ''\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\ttag: 'li',\n\t\t\t\tclassName: '',\n\t\t\t\tactive: 'dt-button-active-a',\n\t\t\t\tliner: {\n\t\t\t\t\ttag: 'a'\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontainer: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dt-button-collection',\n\t\t\t\tcontent: {\n\t\t\t\t\ttag: 'ul',\n\t\t\t\t\tclassName: 'dropdown menu is-dropdown-submenu'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsplit: {\n\t\t\taction: {\n\t\t\t\ttag: 'button',\n\t\t\t\tclassName: 'button small'\n\t\t\t},\n\t\t\tdropdown: {\n\t\t\t\ttag: 'button',\n\t\t\t\tclassName: 'button dropdown arrow-only',\n\t\t\t\tdropHtml: ''\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'button-group dt-button-split'\n\t\t\t}\n\t\t}\n\t}\n});\n\nDataTable.ext.buttons.collection.className = 'dropdown';\n\n$(document).on('buttons-popover.dt', function () {\n\tvar notButton = false;\n\t$('.dtsp-panesContainer').each(function () {\n\t\tif (!$(this).is('button')) {\n\t\t\tnotButton = true;\n\t\t}\n\t});\n\tif (notButton) {\n\t\t$('.dtsp-panesContainer').removeClass('button-group stacked');\n\t}\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/js/buttons.html5.js",
    "content": "/*!\n * HTML5 export buttons for Buttons and DataTables.\n * © SpryMedia Ltd - datatables.net/license\n *\n * FileSaver.js (1.3.3) - MIT license\n * Copyright © 2016 Eli Grey - http://eligrey.com\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $, jszip, pdfmake) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document, jszip, pdfmake );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, jszip, pdfmake, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n// Allow the constructor to pass in JSZip and PDFMake from external requires.\n// Otherwise, use globally defined variables, if they are available.\nvar useJszip;\nvar usePdfmake;\n\nfunction _jsZip() {\n\treturn useJszip || window.JSZip;\n}\nfunction _pdfMake() {\n\treturn usePdfmake || window.pdfMake;\n}\n\nDataTable.Buttons.pdfMake = function (_) {\n\tif (!_) {\n\t\treturn _pdfMake();\n\t}\n\tusePdfmake = _;\n};\n\nDataTable.Buttons.jszip = function (_) {\n\tif (!_) {\n\t\treturn _jsZip();\n\t}\n\tuseJszip = _;\n};\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * FileSaver.js dependency\n */\n\n/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */\n\nvar _saveAs = (function (view) {\n\t'use strict';\n\t// IE <10 is explicitly unsupported\n\tif (\n\t\ttypeof view === 'undefined' ||\n\t\t(typeof navigator !== 'undefined' && /MSIE [1-9]\\./.test(navigator.userAgent))\n\t) {\n\t\treturn;\n\t}\n\tvar doc = view.document,\n\t\t// only get URL when necessary in case Blob.js hasn't overridden it yet\n\t\tget_URL = function () {\n\t\t\treturn view.URL || view.webkitURL || view;\n\t\t},\n\t\tsave_link = doc.createElementNS('http://www.w3.org/1999/xhtml', 'a'),\n\t\tcan_use_save_link = 'download' in save_link,\n\t\tclick = function (node) {\n\t\t\tvar event = new MouseEvent('click');\n\t\t\tnode.dispatchEvent(event);\n\t\t},\n\t\tis_safari = /constructor/i.test(view.HTMLElement) || view.safari,\n\t\tis_chrome_ios = /CriOS\\/[\\d]+/.test(navigator.userAgent),\n\t\tthrow_outside = function (ex) {\n\t\t\t(view.setImmediate || view.setTimeout)(function () {\n\t\t\t\tthrow ex;\n\t\t\t}, 0);\n\t\t},\n\t\tforce_saveable_type = 'application/octet-stream',\n\t\t// the Blob API is fundamentally broken as there is no \"downloadfinished\" event to subscribe to\n\t\tarbitrary_revoke_timeout = 1000 * 40, // in ms\n\t\trevoke = function (file) {\n\t\t\tvar revoker = function () {\n\t\t\t\tif (typeof file === 'string') {\n\t\t\t\t\t// file is an object URL\n\t\t\t\t\tget_URL().revokeObjectURL(file);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// file is a File\n\t\t\t\t\tfile.remove();\n\t\t\t\t}\n\t\t\t};\n\t\t\tsetTimeout(revoker, arbitrary_revoke_timeout);\n\t\t},\n\t\tdispatch = function (filesaver, event_types, event) {\n\t\t\tevent_types = [].concat(event_types);\n\t\t\tvar i = event_types.length;\n\t\t\twhile (i--) {\n\t\t\t\tvar listener = filesaver['on' + event_types[i]];\n\t\t\t\tif (typeof listener === 'function') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlistener.call(filesaver, event || filesaver);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tthrow_outside(ex);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tauto_bom = function (blob) {\n\t\t\t// prepend BOM for UTF-8 XML and text/* types (including HTML)\n\t\t\t// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n\t\t\tif (\n\t\t\t\t/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(\n\t\t\t\t\tblob.type\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n\t\t\t}\n\t\t\treturn blob;\n\t\t},\n\t\tFileSaver = function (blob, name, no_auto_bom) {\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\t// First try a.download, then web filesystem, then object URLs\n\t\t\tvar filesaver = this,\n\t\t\t\ttype = blob.type,\n\t\t\t\tforce = type === force_saveable_type,\n\t\t\t\tobject_url,\n\t\t\t\tdispatch_all = function () {\n\t\t\t\t\tdispatch(filesaver, 'writestart progress write writeend'.split(' '));\n\t\t\t\t},\n\t\t\t\t// on any filesys errors revert to saving with object URLs\n\t\t\t\tfs_error = function () {\n\t\t\t\t\tif ((is_chrome_ios || (force && is_safari)) && view.FileReader) {\n\t\t\t\t\t\t// Safari doesn't allow downloading of blob urls\n\t\t\t\t\t\tvar reader = new FileReader();\n\t\t\t\t\t\treader.onloadend = function () {\n\t\t\t\t\t\t\tvar url = is_chrome_ios\n\t\t\t\t\t\t\t\t? reader.result\n\t\t\t\t\t\t\t\t: reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');\n\t\t\t\t\t\t\tvar popup = view.open(url, '_blank');\n\t\t\t\t\t\t\tif (!popup) view.location.href = url;\n\t\t\t\t\t\t\turl = undefined; // release reference before dispatching\n\t\t\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\t\t\tdispatch_all();\n\t\t\t\t\t\t};\n\t\t\t\t\t\treader.readAsDataURL(blob);\n\t\t\t\t\t\tfilesaver.readyState = filesaver.INIT;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// don't create more object URLs than needed\n\t\t\t\t\tif (!object_url) {\n\t\t\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\t\t}\n\t\t\t\t\tif (force) {\n\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar opened = view.open(object_url, '_blank');\n\t\t\t\t\t\tif (!opened) {\n\t\t\t\t\t\t\t// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html\n\t\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t};\n\t\t\tfilesaver.readyState = filesaver.INIT;\n\n\t\t\tif (can_use_save_link) {\n\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tsave_link.href = object_url;\n\t\t\t\t\tsave_link.download = name;\n\t\t\t\t\tclick(save_link);\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfs_error();\n\t\t},\n\t\tFS_proto = FileSaver.prototype,\n\t\tsaveAs = function (blob, name, no_auto_bom) {\n\t\t\treturn new FileSaver(blob, name || blob.name || 'download', no_auto_bom);\n\t\t};\n\t// IE 10+ (native saveAs)\n\tif (typeof navigator !== 'undefined' && navigator.msSaveOrOpenBlob) {\n\t\treturn function (blob, name, no_auto_bom) {\n\t\t\tname = name || blob.name || 'download';\n\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\treturn navigator.msSaveOrOpenBlob(blob, name);\n\t\t};\n\t}\n\n\tFS_proto.abort = function () {};\n\tFS_proto.readyState = FS_proto.INIT = 0;\n\tFS_proto.WRITING = 1;\n\tFS_proto.DONE = 2;\n\n\tFS_proto.error =\n\t\tFS_proto.onwritestart =\n\t\tFS_proto.onprogress =\n\t\tFS_proto.onwrite =\n\t\tFS_proto.onabort =\n\t\tFS_proto.onerror =\n\t\tFS_proto.onwriteend =\n\t\t\tnull;\n\n\treturn saveAs;\n})(\n\t(typeof self !== 'undefined' && self) ||\n\t\t(typeof window !== 'undefined' && window) ||\n\t\tthis.content\n);\n\n// Expose file saver on the DataTables API. Can't attach to `DataTables.Buttons`\n// since this file can be loaded before Button's core!\nDataTable.fileSave = _saveAs;\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Local (private) functions\n */\n\n/**\n * Get the sheet name for Excel exports.\n *\n * @param {object}\tconfig Button configuration\n */\nvar _sheetname = function (config) {\n\tvar sheetName = 'Sheet1';\n\n\tif (config.sheetName) {\n\t\tsheetName = config.sheetName.replace(/[\\[\\]\\*\\/\\\\\\?\\:]/g, '');\n\t}\n\n\treturn sheetName;\n};\n\n/**\n * Get the newline character(s)\n *\n * @param {object}\tconfig Button configuration\n * @return {string}\t\t\t\tNewline character\n */\nvar _newLine = function (config) {\n\treturn config.newline ? config.newline : navigator.userAgent.match(/Windows/) ? '\\r\\n' : '\\n';\n};\n\n/**\n * Combine the data from the `buttons.exportData` method into a string that\n * will be used in the export file.\n *\n * @param\t{DataTable.Api} dt\t\t DataTables API instance\n * @param\t{object}\t\t\t\tconfig Button configuration\n * @return {object}\t\t\t\t\t\t\t The data to export\n */\nvar _exportData = function (dt, config) {\n\tvar newLine = _newLine(config);\n\tvar data = dt.buttons.exportData(config.exportOptions);\n\tvar boundary = config.fieldBoundary;\n\tvar separator = config.fieldSeparator;\n\tvar reBoundary = new RegExp(boundary, 'g');\n\tvar escapeChar = config.escapeChar !== undefined ? config.escapeChar : '\\\\';\n\tvar join = function (a) {\n\t\tvar s = '';\n\n\t\t// If there is a field boundary, then we might need to escape it in\n\t\t// the source data\n\t\tfor (var i = 0, ien = a.length; i < ien; i++) {\n\t\t\tif (i > 0) {\n\t\t\t\ts += separator;\n\t\t\t}\n\n\t\t\ts += boundary\n\t\t\t\t? boundary + ('' + a[i]).replace(reBoundary, escapeChar + boundary) + boundary\n\t\t\t\t: a[i];\n\t\t}\n\n\t\treturn s;\n\t};\n\n\tvar header = config.header ? join(data.header) + newLine : '';\n\tvar footer = config.footer && data.footer ? newLine + join(data.footer) : '';\n\tvar body = [];\n\n\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\tbody.push(join(data.body[i]));\n\t}\n\n\treturn {\n\t\tstr: header + body.join(newLine) + footer,\n\t\trows: body.length\n\t};\n};\n\n/**\n * Older versions of Safari (prior to tech preview 18) don't support the\n * download option required.\n *\n * @return {Boolean} `true` if old Safari\n */\nvar _isDuffSafari = function () {\n\tvar safari =\n\t\tnavigator.userAgent.indexOf('Safari') !== -1 &&\n\t\tnavigator.userAgent.indexOf('Chrome') === -1 &&\n\t\tnavigator.userAgent.indexOf('Opera') === -1;\n\n\tif (!safari) {\n\t\treturn false;\n\t}\n\n\tvar version = navigator.userAgent.match(/AppleWebKit\\/(\\d+\\.\\d+)/);\n\tif (version && version.length > 1 && version[1] * 1 < 603.1) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Convert from numeric position to letter for column names in Excel\n * @param  {int} n Column number\n * @return {string} Column letter(s) name\n */\nfunction createCellPos(n) {\n\tvar ordA = 'A'.charCodeAt(0);\n\tvar ordZ = 'Z'.charCodeAt(0);\n\tvar len = ordZ - ordA + 1;\n\tvar s = '';\n\n\twhile (n >= 0) {\n\t\ts = String.fromCharCode((n % len) + ordA) + s;\n\t\tn = Math.floor(n / len) - 1;\n\t}\n\n\treturn s;\n}\n\ntry {\n\tvar _serialiser = new XMLSerializer();\n\tvar _ieExcel;\n} catch (t) {}\n\n/**\n * Recursively add XML files from an object's structure to a ZIP file. This\n * allows the XSLX file to be easily defined with an object's structure matching\n * the files structure.\n *\n * @param {JSZip} zip ZIP package\n * @param {object} obj Object to add (recursive)\n */\nfunction _addToZip(zip, obj) {\n\tif (_ieExcel === undefined) {\n\t\t// Detect if we are dealing with IE's _awful_ serialiser by seeing if it\n\t\t// drop attributes\n\t\t_ieExcel =\n\t\t\t_serialiser\n\t\t\t\t.serializeToString(\n\t\t\t\t\tnew window.DOMParser().parseFromString(\n\t\t\t\t\t\texcelStrings['xl/worksheets/sheet1.xml'],\n\t\t\t\t\t\t'text/xml'\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.indexOf('xmlns:r') === -1;\n\t}\n\n\t$.each(obj, function (name, val) {\n\t\tif ($.isPlainObject(val)) {\n\t\t\tvar newDir = zip.folder(name);\n\t\t\t_addToZip(newDir, val);\n\t\t}\n\t\telse {\n\t\t\tif (_ieExcel) {\n\t\t\t\t// IE's XML serialiser will drop some name space attributes from\n\t\t\t\t// from the root node, so we need to save them. Do this by\n\t\t\t\t// replacing the namespace nodes with a regular attribute that\n\t\t\t\t// we convert back when serialised. Edge does not have this\n\t\t\t\t// issue\n\t\t\t\tvar worksheet = val.childNodes[0];\n\t\t\t\tvar i, ien;\n\t\t\t\tvar attrs = [];\n\n\t\t\t\tfor (i = worksheet.attributes.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar attrName = worksheet.attributes[i].nodeName;\n\t\t\t\t\tvar attrValue = worksheet.attributes[i].nodeValue;\n\n\t\t\t\t\tif (attrName.indexOf(':') !== -1) {\n\t\t\t\t\t\tattrs.push({ name: attrName, value: attrValue });\n\n\t\t\t\t\t\tworksheet.removeAttribute(attrName);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0, ien = attrs.length; i < ien; i++) {\n\t\t\t\t\tvar attr = val.createAttribute(\n\t\t\t\t\t\tattrs[i].name.replace(':', '_dt_b_namespace_token_')\n\t\t\t\t\t);\n\t\t\t\t\tattr.value = attrs[i].value;\n\t\t\t\t\tworksheet.setAttributeNode(attr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar str = _serialiser.serializeToString(val);\n\n\t\t\t// Fix IE's XML\n\t\t\tif (_ieExcel) {\n\t\t\t\t// IE doesn't include the XML declaration\n\t\t\t\tif (str.indexOf('<?xml') === -1) {\n\t\t\t\t\tstr = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' + str;\n\t\t\t\t}\n\n\t\t\t\t// Return namespace attributes to being as such\n\t\t\t\tstr = str.replace(/_dt_b_namespace_token_/g, ':');\n\n\t\t\t\t// Remove testing name space that IE puts into the space preserve attr\n\t\t\t\tstr = str.replace(/xmlns:NS[\\d]+=\"\" NS[\\d]+:/g, '');\n\t\t\t}\n\n\t\t\t// Safari, IE and Edge will put empty name space attributes onto\n\t\t\t// various elements making them useless. This strips them out\n\t\t\tstr = str.replace(/<([^<>]*?) xmlns=\"\"([^<>]*?)>/g, '<$1 $2>');\n\n\t\t\tzip.file(name, str);\n\t\t}\n\t});\n}\n\n/**\n * Create an XML node and add any children, attributes, etc without needing to\n * be verbose in the DOM.\n *\n * @param  {object} doc      XML document\n * @param  {string} nodeName Node name\n * @param  {object} opts     Options - can be `attr` (attributes), `children`\n *   (child nodes) and `text` (text content)\n * @return {node}            Created node\n */\nfunction _createNode(doc, nodeName, opts) {\n\tvar tempNode = doc.createElement(nodeName);\n\n\tif (opts) {\n\t\tif (opts.attr) {\n\t\t\t$(tempNode).attr(opts.attr);\n\t\t}\n\n\t\tif (opts.children) {\n\t\t\t$.each(opts.children, function (key, value) {\n\t\t\t\ttempNode.appendChild(value);\n\t\t\t});\n\t\t}\n\n\t\tif (opts.text !== null && opts.text !== undefined) {\n\t\t\ttempNode.appendChild(doc.createTextNode(opts.text));\n\t\t}\n\t}\n\n\treturn tempNode;\n}\n\n/**\n * Get the width for an Excel column based on the contents of that column\n * @param  {object} data Data for export\n * @param  {int}    col  Column index\n * @return {int}         Column width\n */\nfunction _excelColWidth(data, col) {\n\tvar max = data.header[col].length;\n\tvar len, lineSplit, str;\n\n\tif (data.footer && data.footer[col].length > max) {\n\t\tmax = data.footer[col].length;\n\t}\n\n\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\tvar point = data.body[i][col];\n\t\tstr = point !== null && point !== undefined ? point.toString() : '';\n\n\t\t// If there is a newline character, workout the width of the column\n\t\t// based on the longest line in the string\n\t\tif (str.indexOf('\\n') !== -1) {\n\t\t\tlineSplit = str.split('\\n');\n\t\t\tlineSplit.sort(function (a, b) {\n\t\t\t\treturn b.length - a.length;\n\t\t\t});\n\n\t\t\tlen = lineSplit[0].length;\n\t\t}\n\t\telse {\n\t\t\tlen = str.length;\n\t\t}\n\n\t\tif (len > max) {\n\t\t\tmax = len;\n\t\t}\n\n\t\t// Max width rather than having potentially massive column widths\n\t\tif (max > 40) {\n\t\t\treturn 54; // 40 * 1.35\n\t\t}\n\t}\n\n\tmax *= 1.35;\n\n\t// And a min width\n\treturn max > 6 ? max : 6;\n}\n\n// Excel - Pre-defined strings to build a basic XLSX file\nvar excelStrings = {\n\t'_rels/.rels':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n\t\t'<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>' +\n\t\t'</Relationships>',\n\n\t'xl/_rels/workbook.xml.rels':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n\t\t'<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>' +\n\t\t'<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>' +\n\t\t'</Relationships>',\n\n\t'[Content_Types].xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">' +\n\t\t'<Default Extension=\"xml\" ContentType=\"application/xml\" />' +\n\t\t'<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" />' +\n\t\t'<Default Extension=\"jpeg\" ContentType=\"image/jpeg\" />' +\n\t\t'<Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\" />' +\n\t\t'<Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\" />' +\n\t\t'<Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\" />' +\n\t\t'</Types>',\n\n\t'xl/workbook.xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">' +\n\t\t'<fileVersion appName=\"xl\" lastEdited=\"5\" lowestEdited=\"5\" rupBuild=\"24816\"/>' +\n\t\t'<workbookPr showInkAnnotation=\"0\" autoCompressPictures=\"0\"/>' +\n\t\t'<bookViews>' +\n\t\t'<workbookView xWindow=\"0\" yWindow=\"0\" windowWidth=\"25600\" windowHeight=\"19020\" tabRatio=\"500\"/>' +\n\t\t'</bookViews>' +\n\t\t'<sheets>' +\n\t\t'<sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/>' +\n\t\t'</sheets>' +\n\t\t'<definedNames/>' +\n\t\t'</workbook>',\n\n\t'xl/worksheets/sheet1.xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">' +\n\t\t'<sheetData/>' +\n\t\t'<mergeCells count=\"0\"/>' +\n\t\t'</worksheet>',\n\n\t'xl/styles.xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\"?>' +\n\t\t'<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">' +\n\t\t'<numFmts count=\"6\">' +\n\t\t'<numFmt numFmtId=\"164\" formatCode=\"#,##0.00_- [$$-45C]\"/>' +\n\t\t'<numFmt numFmtId=\"165\" formatCode=\"&quot;£&quot;#,##0.00\"/>' +\n\t\t'<numFmt numFmtId=\"166\" formatCode=\"[$€-2] #,##0.00\"/>' +\n\t\t'<numFmt numFmtId=\"167\" formatCode=\"0.0%\"/>' +\n\t\t'<numFmt numFmtId=\"168\" formatCode=\"#,##0;(#,##0)\"/>' +\n\t\t'<numFmt numFmtId=\"169\" formatCode=\"#,##0.00;(#,##0.00)\"/>' +\n\t\t'</numFmts>' +\n\t\t'<fonts count=\"5\" x14ac:knownFonts=\"1\">' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<color rgb=\"FFFFFFFF\" />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<b />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<i />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<u />' +\n\t\t'</font>' +\n\t\t'</fonts>' +\n\t\t'<fills count=\"6\">' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"none\" />' +\n\t\t'</fill>' +\n\t\t'<fill>' + // Excel appears to use this as a dotted background regardless of values but\n\t\t'<patternFill patternType=\"none\" />' + // to be valid to the schema, use a patternFill\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"FFD9D9D9\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"FFD99795\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"ffc6efce\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"ffc6cfef\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'</fills>' +\n\t\t'<borders count=\"2\">' +\n\t\t'<border>' +\n\t\t'<left />' +\n\t\t'<right />' +\n\t\t'<top />' +\n\t\t'<bottom />' +\n\t\t'<diagonal />' +\n\t\t'</border>' +\n\t\t'<border diagonalUp=\"false\" diagonalDown=\"false\">' +\n\t\t'<left style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</left>' +\n\t\t'<right style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</right>' +\n\t\t'<top style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</top>' +\n\t\t'<bottom style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</bottom>' +\n\t\t'<diagonal />' +\n\t\t'</border>' +\n\t\t'</borders>' +\n\t\t'<cellStyleXfs count=\"1\">' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" />' +\n\t\t'</cellStyleXfs>' +\n\t\t'<cellXfs count=\"68\">' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"left\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"center\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"right\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"fill\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment textRotation=\"90\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment wrapText=\"1\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"9\"   fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"164\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"165\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"166\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"167\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"168\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"169\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"3\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"4\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"1\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"2\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"14\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'</cellXfs>' +\n\t\t'<cellStyles count=\"1\">' +\n\t\t'<cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\" />' +\n\t\t'</cellStyles>' +\n\t\t'<dxfs count=\"0\" />' +\n\t\t'<tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium9\" defaultPivotStyle=\"PivotStyleMedium4\" />' +\n\t\t'</styleSheet>'\n};\n// Note we could use 3 `for` loops for the styles, but when gzipped there is\n// virtually no difference in size, since the above can be easily compressed\n\n// Pattern matching for special number formats. Perhaps this should be exposed\n// via an API in future?\n// Ref: section 3.8.30 - built in formatters in open spreadsheet\n//   https://www.ecma-international.org/news/TC45_current_work/Office%20Open%20XML%20Part%204%20-%20Markup%20Language%20Reference.pdf\nvar _excelSpecials = [\n\t{\n\t\tmatch: /^\\-?\\d+\\.\\d%$/,\n\t\tstyle: 60,\n\t\tfmt: function (d) {\n\t\t\treturn d / 100;\n\t\t}\n\t}, // Percent with d.p.\n\t{\n\t\tmatch: /^\\-?\\d+\\.?\\d*%$/,\n\t\tstyle: 56,\n\t\tfmt: function (d) {\n\t\t\treturn d / 100;\n\t\t}\n\t}, // Percent\n\t{ match: /^\\-?\\$[\\d,]+.?\\d*$/, style: 57 }, // Dollars\n\t{ match: /^\\-?£[\\d,]+.?\\d*$/, style: 58 }, // Pounds\n\t{ match: /^\\-?€[\\d,]+.?\\d*$/, style: 59 }, // Euros\n\t{ match: /^\\-?\\d+$/, style: 65 }, // Numbers without thousand separators\n\t{ match: /^\\-?\\d+\\.\\d{2}$/, style: 66 }, // Numbers 2 d.p. without thousands separators\n\t{\n\t\tmatch: /^\\([\\d,]+\\)$/,\n\t\tstyle: 61,\n\t\tfmt: function (d) {\n\t\t\treturn -1 * d.replace(/[\\(\\)]/g, '');\n\t\t}\n\t}, // Negative numbers indicated by brackets\n\t{\n\t\tmatch: /^\\([\\d,]+\\.\\d{2}\\)$/,\n\t\tstyle: 62,\n\t\tfmt: function (d) {\n\t\t\treturn -1 * d.replace(/[\\(\\)]/g, '');\n\t\t}\n\t}, // Negative numbers indicated by brackets - 2d.p.\n\t{ match: /^\\-?[\\d,]+$/, style: 63 }, // Numbers with thousand separators\n\t{ match: /^\\-?[\\d,]+\\.\\d{2}$/, style: 64 },\n\t{\n\t\tmatch: /^[\\d]{4}\\-[01][\\d]\\-[0123][\\d]$/,\n\t\tstyle: 67,\n\t\tfmt: function (d) {\n\t\t\treturn Math.round(25569 + Date.parse(d) / (86400 * 1000));\n\t\t}\n\t} //Date yyyy-mm-dd\n];\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Buttons\n */\n\n//\n// Copy to clipboard\n//\nDataTable.ext.buttons.copyHtml5 = {\n\tclassName: 'buttons-copy buttons-html5',\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.copy', 'Copy');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\tvar that = this;\n\t\tvar exportData = _exportData(dt, config);\n\t\tvar info = dt.buttons.exportInfo(config);\n\t\tvar newline = _newLine(config);\n\t\tvar output = exportData.str;\n\t\tvar hiddenDiv = $('<div/>').css({\n\t\t\theight: 1,\n\t\t\twidth: 1,\n\t\t\toverflow: 'hidden',\n\t\t\tposition: 'fixed',\n\t\t\ttop: 0,\n\t\t\tleft: 0\n\t\t});\n\n\t\tif (info.title) {\n\t\t\toutput = info.title + newline + newline + output;\n\t\t}\n\n\t\tif (info.messageTop) {\n\t\t\toutput = info.messageTop + newline + newline + output;\n\t\t}\n\n\t\tif (info.messageBottom) {\n\t\t\toutput = output + newline + newline + info.messageBottom;\n\t\t}\n\n\t\tif (config.customize) {\n\t\t\toutput = config.customize(output, config, dt);\n\t\t}\n\n\t\tvar textarea = $('<textarea readonly/>').val(output).appendTo(hiddenDiv);\n\n\t\t// For browsers that support the copy execCommand, try to use it\n\t\tif (document.queryCommandSupported('copy')) {\n\t\t\thiddenDiv.appendTo(dt.table().container());\n\t\t\ttextarea[0].focus();\n\t\t\ttextarea[0].select();\n\n\t\t\ttry {\n\t\t\t\tvar successful = document.execCommand('copy');\n\t\t\t\thiddenDiv.remove();\n\n\t\t\t\tif (successful) {\n\t\t\t\t\tdt.buttons.info(\n\t\t\t\t\t\tdt.i18n('buttons.copyTitle', 'Copy to clipboard'),\n\t\t\t\t\t\tdt.i18n(\n\t\t\t\t\t\t\t'buttons.copySuccess',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t1: 'Copied one row to clipboard',\n\t\t\t\t\t\t\t\t_: 'Copied %d rows to clipboard'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\texportData.rows\n\t\t\t\t\t\t),\n\t\t\t\t\t\t2000\n\t\t\t\t\t);\n\n\t\t\t\t\tthis.processing(false);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch (t) {}\n\t\t}\n\n\t\t// Otherwise we show the text box and instruct the user to use it\n\t\tvar message = $(\n\t\t\t'<span>' +\n\t\t\t\tdt.i18n(\n\t\t\t\t\t'buttons.copyKeys',\n\t\t\t\t\t'Press <i>ctrl</i> or <i>\\u2318</i> + <i>C</i> to copy the table data<br>to your system clipboard.<br><br>' +\n\t\t\t\t\t\t'To cancel, click this message or press escape.'\n\t\t\t\t) +\n\t\t\t\t'</span>'\n\t\t).append(hiddenDiv);\n\n\t\tdt.buttons.info(dt.i18n('buttons.copyTitle', 'Copy to clipboard'), message, 0);\n\n\t\t// Select the text so when the user activates their system clipboard\n\t\t// it will copy that text\n\t\ttextarea[0].focus();\n\t\ttextarea[0].select();\n\n\t\t// Event to hide the message when the user is done\n\t\tvar container = $(message).closest('.dt-button-info');\n\t\tvar close = function () {\n\t\t\tcontainer.off('click.buttons-copy');\n\t\t\t$(document).off('.buttons-copy');\n\t\t\tdt.buttons.info(false);\n\t\t};\n\n\t\tcontainer.on('click.buttons-copy', close);\n\t\t$(document)\n\t\t\t.on('keydown.buttons-copy', function (e) {\n\t\t\t\tif (e.keyCode === 27) {\n\t\t\t\t\t// esc\n\t\t\t\t\tclose();\n\t\t\t\t\tthat.processing(false);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('copy.buttons-copy cut.buttons-copy', function () {\n\t\t\t\tclose();\n\t\t\t\tthat.processing(false);\n\t\t\t});\n\t},\n\n\texportOptions: {},\n\n\tfieldSeparator: '\\t',\n\n\tfieldBoundary: '',\n\n\theader: true,\n\n\tfooter: false,\n\n\ttitle: '*',\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*'\n};\n\n//\n// CSV export\n//\nDataTable.ext.buttons.csvHtml5 = {\n\tbom: false,\n\n\tclassName: 'buttons-csv buttons-html5',\n\n\tavailable: function () {\n\t\treturn window.FileReader !== undefined && window.Blob;\n\t},\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.csv', 'CSV');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\t// Set the text\n\t\tvar output = _exportData(dt, config).str;\n\t\tvar info = dt.buttons.exportInfo(config);\n\t\tvar charset = config.charset;\n\n\t\tif (config.customize) {\n\t\t\toutput = config.customize(output, config, dt);\n\t\t}\n\n\t\tif (charset !== false) {\n\t\t\tif (!charset) {\n\t\t\t\tcharset = document.characterSet || document.charset;\n\t\t\t}\n\n\t\t\tif (charset) {\n\t\t\t\tcharset = ';charset=' + charset;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tcharset = '';\n\t\t}\n\n\t\tif (config.bom) {\n\t\t\toutput = String.fromCharCode(0xfeff) + output;\n\t\t}\n\n\t\t_saveAs(new Blob([output], { type: 'text/csv' + charset }), info.filename, true);\n\n\t\tthis.processing(false);\n\t},\n\n\tfilename: '*',\n\n\textension: '.csv',\n\n\texportOptions: {},\n\n\tfieldSeparator: ',',\n\n\tfieldBoundary: '\"',\n\n\tescapeChar: '\"',\n\n\tcharset: null,\n\n\theader: true,\n\n\tfooter: false\n};\n\n//\n// Excel (xlsx) export\n//\nDataTable.ext.buttons.excelHtml5 = {\n\tclassName: 'buttons-excel buttons-html5',\n\n\tavailable: function () {\n\t\treturn (\n\t\t\twindow.FileReader !== undefined &&\n\t\t\t_jsZip() !== undefined &&\n\t\t\t!_isDuffSafari() &&\n\t\t\t_serialiser\n\t\t);\n\t},\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.excel', 'Excel');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\tvar that = this;\n\t\tvar rowPos = 0;\n\t\tvar dataStartRow, dataEndRow;\n\t\tvar getXml = function (type) {\n\t\t\tvar str = excelStrings[type];\n\n\t\t\t//str = str.replace( /xmlns:/g, 'xmlns_' ).replace( /mc:/g, 'mc_' );\n\n\t\t\treturn $.parseXML(str);\n\t\t};\n\t\tvar rels = getXml('xl/worksheets/sheet1.xml');\n\t\tvar relsGet = rels.getElementsByTagName('sheetData')[0];\n\n\t\tvar xlsx = {\n\t\t\t_rels: {\n\t\t\t\t'.rels': getXml('_rels/.rels')\n\t\t\t},\n\t\t\txl: {\n\t\t\t\t_rels: {\n\t\t\t\t\t'workbook.xml.rels': getXml('xl/_rels/workbook.xml.rels')\n\t\t\t\t},\n\t\t\t\t'workbook.xml': getXml('xl/workbook.xml'),\n\t\t\t\t'styles.xml': getXml('xl/styles.xml'),\n\t\t\t\tworksheets: {\n\t\t\t\t\t'sheet1.xml': rels\n\t\t\t\t}\n\t\t\t},\n\t\t\t'[Content_Types].xml': getXml('[Content_Types].xml')\n\t\t};\n\n\t\tvar data = dt.buttons.exportData(config.exportOptions);\n\t\tvar currentRow, rowNode;\n\t\tvar addRow = function (row) {\n\t\t\tcurrentRow = rowPos + 1;\n\t\t\trowNode = _createNode(rels, 'row', { attr: { r: currentRow } });\n\n\t\t\tfor (var i = 0, ien = row.length; i < ien; i++) {\n\t\t\t\t// Concat both the Cell Columns as a letter and the Row of the cell.\n\t\t\t\tvar cellId = createCellPos(i) + '' + currentRow;\n\t\t\t\tvar cell = null;\n\n\t\t\t\t// For null, undefined of blank cell, continue so it doesn't create the _createNode\n\t\t\t\tif (row[i] === null || row[i] === undefined || row[i] === '') {\n\t\t\t\t\tif (config.createEmptyCells === true) {\n\t\t\t\t\t\trow[i] = '';\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar originalContent = row[i];\n\t\t\t\trow[i] = typeof row[i].trim === 'function' ? row[i].trim() : row[i];\n\n\t\t\t\t// Special number formatting options\n\t\t\t\tfor (var j = 0, jen = _excelSpecials.length; j < jen; j++) {\n\t\t\t\t\tvar special = _excelSpecials[j];\n\n\t\t\t\t\t// TODO Need to provide the ability for the specials to say\n\t\t\t\t\t// if they are returning a string, since at the moment it is\n\t\t\t\t\t// assumed to be a number\n\t\t\t\t\tif (row[i].match && !row[i].match(/^0\\d+/) && row[i].match(special.match)) {\n\t\t\t\t\t\tvar val = row[i].replace(/[^\\d\\.\\-]/g, '');\n\n\t\t\t\t\t\tif (special.fmt) {\n\t\t\t\t\t\t\tval = special.fmt(val);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcell = _createNode(rels, 'c', {\n\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\tr: cellId,\n\t\t\t\t\t\t\t\ts: special.style\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: [_createNode(rels, 'v', { text: val })]\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!cell) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof row[i] === 'number' ||\n\t\t\t\t\t\t(row[i].match &&\n\t\t\t\t\t\t\trow[i].match(/^-?\\d+(\\.\\d+)?([eE]\\-?\\d+)?$/) && // Includes exponential format\n\t\t\t\t\t\t\t!row[i].match(/^0\\d+/))\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Detect numbers - don't match numbers with leading zeros\n\t\t\t\t\t\t// or a negative anywhere but the start\n\t\t\t\t\t\tcell = _createNode(rels, 'c', {\n\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\tt: 'n',\n\t\t\t\t\t\t\t\tr: cellId\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: [_createNode(rels, 'v', { text: row[i] })]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// String output - replace non standard characters for text output\n\t\t\t\t\t\tvar text = !originalContent.replace\n\t\t\t\t\t\t\t? originalContent\n\t\t\t\t\t\t\t: originalContent.replace(/[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x9F]/g, '');\n\n\t\t\t\t\t\tcell = _createNode(rels, 'c', {\n\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\tt: 'inlineStr',\n\t\t\t\t\t\t\t\tr: cellId\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: {\n\t\t\t\t\t\t\t\trow: _createNode(rels, 'is', {\n\t\t\t\t\t\t\t\t\tchildren: {\n\t\t\t\t\t\t\t\t\t\trow: _createNode(rels, 't', {\n\t\t\t\t\t\t\t\t\t\t\ttext: text,\n\t\t\t\t\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\t\t\t\t\t'xml:space': 'preserve'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trowNode.appendChild(cell);\n\t\t\t}\n\n\t\t\trelsGet.appendChild(rowNode);\n\t\t\trowPos++;\n\t\t};\n\n\t\tif (config.customizeData) {\n\t\t\tconfig.customizeData(data);\n\t\t}\n\n\t\tvar mergeCells = function (row, colspan) {\n\t\t\tvar mergeCells = $('mergeCells', rels);\n\n\t\t\tmergeCells[0].appendChild(\n\t\t\t\t_createNode(rels, 'mergeCell', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tref: 'A' + row + ':' + createCellPos(colspan) + row\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t\tmergeCells.attr('count', parseFloat(mergeCells.attr('count')) + 1);\n\t\t\t$('row:eq(' + (row - 1) + ') c', rels).attr('s', '51'); // centre\n\t\t};\n\n\t\t// Title and top messages\n\t\tvar exportInfo = dt.buttons.exportInfo(config);\n\t\tif (exportInfo.title) {\n\t\t\taddRow([exportInfo.title], rowPos);\n\t\t\tmergeCells(rowPos, data.header.length - 1);\n\t\t}\n\n\t\tif (exportInfo.messageTop) {\n\t\t\taddRow([exportInfo.messageTop], rowPos);\n\t\t\tmergeCells(rowPos, data.header.length - 1);\n\t\t}\n\n\t\t// Table itself\n\t\tif (config.header) {\n\t\t\taddRow(data.header, rowPos);\n\t\t\t$('row:last c', rels).attr('s', '2'); // bold\n\t\t}\n\n\t\tdataStartRow = rowPos;\n\n\t\tfor (var n = 0, ie = data.body.length; n < ie; n++) {\n\t\t\taddRow(data.body[n], rowPos);\n\t\t}\n\n\t\tdataEndRow = rowPos;\n\n\t\tif (config.footer && data.footer) {\n\t\t\taddRow(data.footer, rowPos);\n\t\t\t$('row:last c', rels).attr('s', '2'); // bold\n\t\t}\n\n\t\t// Below the table\n\t\tif (exportInfo.messageBottom) {\n\t\t\taddRow([exportInfo.messageBottom], rowPos);\n\t\t\tmergeCells(rowPos, data.header.length - 1);\n\t\t}\n\n\t\t// Set column widths\n\t\tvar cols = _createNode(rels, 'cols');\n\t\t$('worksheet', rels).prepend(cols);\n\n\t\tfor (var i = 0, ien = data.header.length; i < ien; i++) {\n\t\t\tcols.appendChild(\n\t\t\t\t_createNode(rels, 'col', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tmin: i + 1,\n\t\t\t\t\t\tmax: i + 1,\n\t\t\t\t\t\twidth: _excelColWidth(data, i),\n\t\t\t\t\t\tcustomWidth: 1\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\t// Workbook modifications\n\t\tvar workbook = xlsx.xl['workbook.xml'];\n\n\t\t$('sheets sheet', workbook).attr('name', _sheetname(config));\n\n\t\t// Auto filter for columns\n\t\tif (config.autoFilter) {\n\t\t\t$('mergeCells', rels).before(\n\t\t\t\t_createNode(rels, 'autoFilter', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tref:\n\t\t\t\t\t\t\t'A' +\n\t\t\t\t\t\t\tdataStartRow +\n\t\t\t\t\t\t\t':' +\n\t\t\t\t\t\t\tcreateCellPos(data.header.length - 1) +\n\t\t\t\t\t\t\tdataEndRow\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\n\t\t\t$('definedNames', workbook).append(\n\t\t\t\t_createNode(workbook, 'definedName', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tname: '_xlnm._FilterDatabase',\n\t\t\t\t\t\tlocalSheetId: '0',\n\t\t\t\t\t\thidden: 1\n\t\t\t\t\t},\n\t\t\t\t\ttext:\n\t\t\t\t\t\t_sheetname(config) +\n\t\t\t\t\t\t'!$A$' +\n\t\t\t\t\t\tdataStartRow +\n\t\t\t\t\t\t':' +\n\t\t\t\t\t\tcreateCellPos(data.header.length - 1) +\n\t\t\t\t\t\tdataEndRow\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\t// Let the developer customise the document if they want to\n\t\tif (config.customize) {\n\t\t\tconfig.customize(xlsx, config, dt);\n\t\t}\n\n\t\t// Excel doesn't like an empty mergeCells tag\n\t\tif ($('mergeCells', rels).children().length === 0) {\n\t\t\t$('mergeCells', rels).remove();\n\t\t}\n\n\t\tvar jszip = _jsZip();\n\t\tvar zip = new jszip();\n\t\tvar zipConfig = {\n\t\t\tcompression: 'DEFLATE',\n\t\t\ttype: 'blob',\n\t\t\tmimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t};\n\n\t\t_addToZip(zip, xlsx);\n\n\t\t// Modern Excel has a 218 character limit on the file name + path of the file (why!?)\n\t\t// https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3\n\t\t// So we truncate to allow for this.\n\t\tvar filename = exportInfo.filename;\n\n\t\tif (filename > 175) {\n\t\t\tfilename = filename.substr(0, 175);\n\t\t}\n\n\t\tif (zip.generateAsync) {\n\t\t\t// JSZip 3+\n\t\t\tzip.generateAsync(zipConfig).then(function (blob) {\n\t\t\t\t_saveAs(blob, filename);\n\t\t\t\tthat.processing(false);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t// JSZip 2.5\n\t\t\t_saveAs(zip.generate(zipConfig), filename);\n\t\t\tthis.processing(false);\n\t\t}\n\t},\n\n\tfilename: '*',\n\n\textension: '.xlsx',\n\n\texportOptions: {},\n\n\theader: true,\n\n\tfooter: false,\n\n\ttitle: '*',\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*',\n\n\tcreateEmptyCells: false,\n\n\tautoFilter: false,\n\n\tsheetName: ''\n};\n\n//\n// PDF export - using pdfMake - http://pdfmake.org\n//\nDataTable.ext.buttons.pdfHtml5 = {\n\tclassName: 'buttons-pdf buttons-html5',\n\n\tavailable: function () {\n\t\treturn window.FileReader !== undefined && _pdfMake();\n\t},\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.pdf', 'PDF');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\tvar that = this;\n\t\tvar data = dt.buttons.exportData(config.exportOptions);\n\t\tvar info = dt.buttons.exportInfo(config);\n\t\tvar rows = [];\n\n\t\tif (config.header) {\n\t\t\trows.push(\n\t\t\t\t$.map(data.header, function (d) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: typeof d === 'string' ? d : d + '',\n\t\t\t\t\t\tstyle: 'tableHeader'\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\t\trows.push(\n\t\t\t\t$.map(data.body[i], function (d) {\n\t\t\t\t\tif (d === null || d === undefined) {\n\t\t\t\t\t\td = '';\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: typeof d === 'string' ? d : d + '',\n\t\t\t\t\t\tstyle: i % 2 ? 'tableBodyEven' : 'tableBodyOdd'\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tif (config.footer && data.footer) {\n\t\t\trows.push(\n\t\t\t\t$.map(data.footer, function (d) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: typeof d === 'string' ? d : d + '',\n\t\t\t\t\t\tstyle: 'tableFooter'\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar doc = {\n\t\t\tpageSize: config.pageSize,\n\t\t\tpageOrientation: config.orientation,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttable: {\n\t\t\t\t\t\theaderRows: 1,\n\t\t\t\t\t\tbody: rows\n\t\t\t\t\t},\n\t\t\t\t\tlayout: 'noBorders'\n\t\t\t\t}\n\t\t\t],\n\t\t\tstyles: {\n\t\t\t\ttableHeader: {\n\t\t\t\t\tbold: true,\n\t\t\t\t\tfontSize: 11,\n\t\t\t\t\tcolor: 'white',\n\t\t\t\t\tfillColor: '#2d4154',\n\t\t\t\t\talignment: 'center'\n\t\t\t\t},\n\t\t\t\ttableBodyEven: {},\n\t\t\t\ttableBodyOdd: {\n\t\t\t\t\tfillColor: '#f3f3f3'\n\t\t\t\t},\n\t\t\t\ttableFooter: {\n\t\t\t\t\tbold: true,\n\t\t\t\t\tfontSize: 11,\n\t\t\t\t\tcolor: 'white',\n\t\t\t\t\tfillColor: '#2d4154'\n\t\t\t\t},\n\t\t\t\ttitle: {\n\t\t\t\t\talignment: 'center',\n\t\t\t\t\tfontSize: 15\n\t\t\t\t},\n\t\t\t\tmessage: {}\n\t\t\t},\n\t\t\tdefaultStyle: {\n\t\t\t\tfontSize: 10\n\t\t\t}\n\t\t};\n\n\t\tif (info.messageTop) {\n\t\t\tdoc.content.unshift({\n\t\t\t\ttext: info.messageTop,\n\t\t\t\tstyle: 'message',\n\t\t\t\tmargin: [0, 0, 0, 12]\n\t\t\t});\n\t\t}\n\n\t\tif (info.messageBottom) {\n\t\t\tdoc.content.push({\n\t\t\t\ttext: info.messageBottom,\n\t\t\t\tstyle: 'message',\n\t\t\t\tmargin: [0, 0, 0, 12]\n\t\t\t});\n\t\t}\n\n\t\tif (info.title) {\n\t\t\tdoc.content.unshift({\n\t\t\t\ttext: info.title,\n\t\t\t\tstyle: 'title',\n\t\t\t\tmargin: [0, 0, 0, 12]\n\t\t\t});\n\t\t}\n\n\t\tif (config.customize) {\n\t\t\tconfig.customize(doc, config, dt);\n\t\t}\n\n\t\tvar pdf = _pdfMake().createPdf(doc);\n\n\t\tif (config.download === 'open' && !_isDuffSafari()) {\n\t\t\tpdf.open();\n\t\t}\n\t\telse {\n\t\t\tpdf.download(info.filename);\n\t\t}\n\n\t\tthis.processing(false);\n\t},\n\n\ttitle: '*',\n\n\tfilename: '*',\n\n\textension: '.pdf',\n\n\texportOptions: {},\n\n\torientation: 'portrait',\n\n\tpageSize: 'A4',\n\n\theader: true,\n\n\tfooter: false,\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*',\n\n\tcustomize: null,\n\n\tdownload: 'download'\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/js/buttons.jqueryui.js",
    "content": "/*! jQuery UI integration for DataTables' Buttons\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n$.extend(true, DataTable.Buttons.defaults, {\n\tdom: {\n\t\tcollection: {\n\t\t\taction: {\n\t\t\t\tdropHtml: '<span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"/>'\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tactive: 'dt-button-active'\n\t\t\t}\n\t\t},\n\t\tcontainer: {\n\t\t\tclassName: 'dt-buttons ui-buttonset'\n\t\t},\n\t\tbutton: {\n\t\t\tclassName: 'dt-button ui-button ui-corner-all',\n\t\t\tdisabled: 'ui-state-disabled',\n\t\t\tactive: 'ui-state-active',\n\t\t\tliner: {\n\t\t\t\ttag: '',\n\t\t\t\tclassName: ''\n\t\t\t}\n\t\t},\n\t\tsplit: {\n\t\t\taction: {\n\t\t\t\ttag: 'button',\n\t\t\t\tclassName: 'dt-button-split-drop-button ui-button ui-corner-left'\n\t\t\t},\n\t\t\tdropdown: {\n\t\t\t\ttag: 'button',\n\t\t\t\tdropHtml: '<span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"/>',\n\t\t\t\tclassName: 'dt-button-split-drop ui-button ui-corner-right'\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dt-button-split'\n\t\t\t}\n\t\t}\n\t}\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/js/buttons.print.js",
    "content": "/*!\n * Print button for Buttons and DataTables.\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nvar _link = document.createElement('a');\n\n/**\n * Clone link and style tags, taking into account the need to change the source\n * path.\n *\n * @param  {node}     el Element to convert\n */\nvar _styleToAbs = function (el) {\n\tvar url;\n\tvar clone = $(el).clone()[0];\n\tvar linkHost;\n\n\tif (clone.nodeName.toLowerCase() === 'link') {\n\t\tclone.href = _relToAbs(clone.href);\n\t}\n\n\treturn clone.outerHTML;\n};\n\n/**\n * Convert a URL from a relative to an absolute address so it will work\n * correctly in the popup window which has no base URL.\n *\n * @param  {string} href URL\n */\nvar _relToAbs = function (href) {\n\t// Assign to a link on the original page so the browser will do all the\n\t// hard work of figuring out where the file actually is\n\t_link.href = href;\n\tvar linkHost = _link.host;\n\n\t// IE doesn't have a trailing slash on the host\n\t// Chrome has it on the pathname\n\tif (linkHost.indexOf('/') === -1 && _link.pathname.indexOf('/') !== 0) {\n\t\tlinkHost += '/';\n\t}\n\n\treturn _link.protocol + '//' + linkHost + _link.pathname + _link.search;\n};\n\nDataTable.ext.buttons.print = {\n\tclassName: 'buttons-print',\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.print', 'Print');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tvar data = dt.buttons.exportData(\n\t\t\t$.extend({ decodeEntities: false }, config.exportOptions) // XSS protection\n\t\t);\n\t\tvar exportInfo = dt.buttons.exportInfo(config);\n\t\tvar columnClasses = dt\n\t\t\t.columns(config.exportOptions.columns)\n\t\t\t.flatten()\n\t\t\t.map(function (idx) {\n\t\t\t\treturn dt.settings()[0].aoColumns[dt.column(idx).index()].sClass;\n\t\t\t})\n\t\t\t.toArray();\n\n\t\tvar addRow = function (d, tag) {\n\t\t\tvar str = '<tr>';\n\n\t\t\tfor (var i = 0, ien = d.length; i < ien; i++) {\n\t\t\t\t// null and undefined aren't useful in the print output\n\t\t\t\tvar dataOut = d[i] === null || d[i] === undefined ? '' : d[i];\n\t\t\t\tvar classAttr = columnClasses[i] ? 'class=\"' + columnClasses[i] + '\"' : '';\n\n\t\t\t\tstr += '<' + tag + ' ' + classAttr + '>' + dataOut + '</' + tag + '>';\n\t\t\t}\n\n\t\t\treturn str + '</tr>';\n\t\t};\n\n\t\t// Construct a table for printing\n\t\tvar html = '<table class=\"' + dt.table().node().className + '\">';\n\n\t\tif (config.header) {\n\t\t\thtml += '<thead>' + addRow(data.header, 'th') + '</thead>';\n\t\t}\n\n\t\thtml += '<tbody>';\n\t\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\t\thtml += addRow(data.body[i], 'td');\n\t\t}\n\t\thtml += '</tbody>';\n\n\t\tif (config.footer && data.footer) {\n\t\t\thtml += '<tfoot>' + addRow(data.footer, 'th') + '</tfoot>';\n\t\t}\n\t\thtml += '</table>';\n\n\t\t// Open a new window for the printable table\n\t\tvar win = window.open('', '');\n\n\t\tif (!win) {\n\t\t\tdt.buttons.info(\n\t\t\t\tdt.i18n('buttons.printErrorTitle', 'Unable to open print view'),\n\t\t\t\tdt.i18n(\n\t\t\t\t\t'buttons.printErrorMsg',\n\t\t\t\t\t'Please allow popups in your browser for this site to be able to view the print view.'\n\t\t\t\t),\n\t\t\t\t5000\n\t\t\t);\n\n\t\t\treturn;\n\t\t}\n\n\t\twin.document.close();\n\n\t\t// Inject the title and also a copy of the style and link tags from this\n\t\t// document so the table can retain its base styling. Note that we have\n\t\t// to use string manipulation as IE won't allow elements to be created\n\t\t// in the host document and then appended to the new window.\n\t\tvar head = '<title>' + exportInfo.title + '</title>';\n\t\t$('style, link').each(function () {\n\t\t\thead += _styleToAbs(this);\n\t\t});\n\n\t\ttry {\n\t\t\twin.document.head.innerHTML = head; // Work around for Edge\n\t\t} catch (e) {\n\t\t\t$(win.document.head).html(head); // Old IE\n\t\t}\n\n\t\t// Inject the table and other surrounding information\n\t\twin.document.body.innerHTML =\n\t\t\t'<h1>' +\n\t\t\texportInfo.title +\n\t\t\t'</h1>' +\n\t\t\t'<div>' +\n\t\t\t(exportInfo.messageTop || '') +\n\t\t\t'</div>' +\n\t\t\thtml +\n\t\t\t'<div>' +\n\t\t\t(exportInfo.messageBottom || '') +\n\t\t\t'</div>';\n\n\t\t$(win.document.body).addClass('dt-print-view');\n\n\t\t$('img', win.document.body).each(function (i, img) {\n\t\t\timg.setAttribute('src', _relToAbs(img.getAttribute('src')));\n\t\t});\n\n\t\tif (config.customize) {\n\t\t\tconfig.customize(win, config, dt);\n\t\t}\n\n\t\t// Allow stylesheets time to load\n\t\tvar autoPrint = function () {\n\t\t\tif (config.autoPrint) {\n\t\t\t\twin.print(); // blocking - so close will not\n\t\t\t\twin.close(); // execute until this is done\n\t\t\t}\n\t\t};\n\n\t\tif (navigator.userAgent.match(/Trident\\/\\d.\\d/)) {\n\t\t\t// IE needs to call this without a setTimeout\n\t\t\tautoPrint();\n\t\t}\n\t\telse {\n\t\t\twin.setTimeout(autoPrint, 1000);\n\t\t}\n\t},\n\n\ttitle: '*',\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*',\n\n\texportOptions: {},\n\n\theader: true,\n\n\tfooter: false,\n\n\tautoPrint: true,\n\n\tcustomize: null\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/js/buttons.semanticui.js",
    "content": "/*! Bootstrap integration for DataTables' Buttons\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n$.extend(true, DataTable.Buttons.defaults, {\n\tdom: {\n\t\tcontainer: {\n\t\t\tclassName: 'dt-buttons ui buttons'\n\t\t},\n\t\tbutton: {\n\t\t\ttag: 'button',\n\t\t\tactive: 'active',\n\t\t\tclassName: 'dt-button ui button',\n\t\t\tspacerClass: 'dt-button ui button'\n\t\t},\n\t\tcollection: {\n\t\t\taction: {\n\t\t\t\tdropHtml: '<i class=\"dropdown icon\"></i>'\n\t\t\t},\n\t\t\tcontainer: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'ui dropdown active visible dt-button-collection',\n\t\t\t\tcontent: {\n\t\t\t\t\tclassName: 'menu transition visible'\n\t\t\t\t}\n\t\t\t},\n\t\t\tcloseButton: false,\n\t\t\tbutton: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'item',\n\t\t\t\tactive: 'dt-button-active',\n\t\t\t\tspacer: {\n\t\t\t\t\tclassName: 'divider',\n\t\t\t\t\ttag: 'div'\n\t\t\t\t}\n\t\t\t},\n\t\t\tsplit: {\n\t\t\t\taction: {\n\t\t\t\t\ttag: 'div',\n\t\t\t\t\tclassName: ''\n\t\t\t\t},\n\t\t\t\tdropdown: {\n\t\t\t\t\ttag: 'span',\n\t\t\t\t\tclassName: 'dt-button-split-drop dropdown icon',\n\t\t\t\t\tdropHtml: '<i class=\"dropdown icon\"></i>'\n\t\t\t\t},\n\t\t\t\twrapper: {\n\t\t\t\t\ttag: 'div',\n\t\t\t\t\tclassName: 'dt-button-split'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsplit: {\n\t\t\taction: {\n\t\t\t\ttag: 'button',\n\t\t\t\tclassName: 'dt-button-split-drop-button ui button'\n\t\t\t},\n\t\t\tdropdown: {\n\t\t\t\ttag: 'button',\n\t\t\t\tclassName: 'ui floating button dt-button-split-drop dropdown icon'\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dt-button-split buttons'\n\t\t\t}\n\t\t}\n\t}\n});\n\n$(document).on('buttons-popover.dt', function () {\n\tvar notButton = false;\n\t$('.dtsp-panesContainer').each(function () {\n\t\tif (!$(this).is('button')) {\n\t\t\tnotButton = true;\n\t\t}\n\t});\n\tif (notButton) {\n\t\t$('.dtsp-panesContainer').removeClass('vertical buttons');\n\t}\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Buttons-2.4.2/js/dataTables.buttons.js",
    "content": "/*! Buttons for DataTables 2.4.2\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n// Used for namespacing events added to the document by each instance, so they\n// can be removed on destroy\nvar _instCounter = 0;\n\n// Button namespacing counter for namespacing events on individual buttons\nvar _buttonCounter = 0;\n\nvar _dtButtons = DataTable.ext.buttons;\n\n// Custom entity decoder for data export\nvar _entityDecoder = null;\n\n// Allow for jQuery slim\nfunction _fadeIn(el, duration, fn) {\n\tif ($.fn.animate) {\n\t\tel.stop().fadeIn(duration, fn);\n\t}\n\telse {\n\t\tel.css('display', 'block');\n\n\t\tif (fn) {\n\t\t\tfn.call(el);\n\t\t}\n\t}\n}\n\nfunction _fadeOut(el, duration, fn) {\n\tif ($.fn.animate) {\n\t\tel.stop().fadeOut(duration, fn);\n\t}\n\telse {\n\t\tel.css('display', 'none');\n\n\t\tif (fn) {\n\t\t\tfn.call(el);\n\t\t}\n\t}\n}\n\n/**\n * [Buttons description]\n * @param {[type]}\n * @param {[type]}\n */\nvar Buttons = function (dt, config) {\n\t// If not created with a `new` keyword then we return a wrapper function that\n\t// will take the settings object for a DT. This allows easy use of new instances\n\t// with the `layout` option - e.g. `topLeft: $.fn.dataTable.Buttons( ... )`.\n\tif (!(this instanceof Buttons)) {\n\t\treturn function (settings) {\n\t\t\treturn new Buttons(settings, dt).container();\n\t\t};\n\t}\n\n\t// If there is no config set it to an empty object\n\tif (typeof config === 'undefined') {\n\t\tconfig = {};\n\t}\n\n\t// Allow a boolean true for defaults\n\tif (config === true) {\n\t\tconfig = {};\n\t}\n\n\t// For easy configuration of buttons an array can be given\n\tif (Array.isArray(config)) {\n\t\tconfig = { buttons: config };\n\t}\n\n\tthis.c = $.extend(true, {}, Buttons.defaults, config);\n\n\t// Don't want a deep copy for the buttons\n\tif (config.buttons) {\n\t\tthis.c.buttons = config.buttons;\n\t}\n\n\tthis.s = {\n\t\tdt: new DataTable.Api(dt),\n\t\tbuttons: [],\n\t\tlistenKeys: '',\n\t\tnamespace: 'dtb' + _instCounter++\n\t};\n\n\tthis.dom = {\n\t\tcontainer: $('<' + this.c.dom.container.tag + '/>').addClass(this.c.dom.container.className)\n\t};\n\n\tthis._constructor();\n};\n\n$.extend(Buttons.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods\n\t */\n\n\t/**\n\t * Get the action of a button\n\t * @param  {int|string} Button index\n\t * @return {function}\n\t */ /**\n\t * Set the action of a button\n\t * @param  {node} node Button element\n\t * @param  {function} action Function to set\n\t * @return {Buttons} Self for chaining\n\t */\n\taction: function (node, action) {\n\t\tvar button = this._nodeToButton(node);\n\n\t\tif (action === undefined) {\n\t\t\treturn button.conf.action;\n\t\t}\n\n\t\tbutton.conf.action = action;\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Add an active class to the button to make to look active or get current\n\t * active state.\n\t * @param  {node} node Button element\n\t * @param  {boolean} [flag] Enable / disable flag\n\t * @return {Buttons} Self for chaining or boolean for getter\n\t */\n\tactive: function (node, flag) {\n\t\tvar button = this._nodeToButton(node);\n\t\tvar klass = this.c.dom.button.active;\n\t\tvar jqNode = $(button.node);\n\n\t\tif (\n\t\t\tbutton.inCollection &&\n\t\t\tthis.c.dom.collection.button &&\n\t\t\tthis.c.dom.collection.button.active !== undefined\n\t\t) {\n\t\t\tklass = this.c.dom.collection.button.active;\n\t\t}\n\n\t\tif (flag === undefined) {\n\t\t\treturn jqNode.hasClass(klass);\n\t\t}\n\n\t\tjqNode.toggleClass(klass, flag === undefined ? true : flag);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Add a new button\n\t * @param {object} config Button configuration object, base string name or function\n\t * @param {int|string} [idx] Button index for where to insert the button\n\t * @param {boolean} [draw=true] Trigger a draw. Set a false when adding\n\t *   lots of buttons, until the last button.\n\t * @return {Buttons} Self for chaining\n\t */\n\tadd: function (config, idx, draw) {\n\t\tvar buttons = this.s.buttons;\n\n\t\tif (typeof idx === 'string') {\n\t\t\tvar split = idx.split('-');\n\t\t\tvar base = this.s;\n\n\t\t\tfor (var i = 0, ien = split.length - 1; i < ien; i++) {\n\t\t\t\tbase = base.buttons[split[i] * 1];\n\t\t\t}\n\n\t\t\tbuttons = base.buttons;\n\t\t\tidx = split[split.length - 1] * 1;\n\t\t}\n\n\t\tthis._expandButton(\n\t\t\tbuttons,\n\t\t\tconfig,\n\t\t\tconfig !== undefined ? config.split : undefined,\n\t\t\t(config === undefined || config.split === undefined || config.split.length === 0) &&\n\t\t\t\tbase !== undefined,\n\t\t\tfalse,\n\t\t\tidx\n\t\t);\n\n\t\tif (draw === undefined || draw === true) {\n\t\t\tthis._draw();\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Clear buttons from a collection and then insert new buttons\n\t */\n\tcollectionRebuild: function (node, newButtons) {\n\t\tvar button = this._nodeToButton(node);\n\n\t\tif (newButtons !== undefined) {\n\t\t\tvar i;\n\t\t\t// Need to reverse the array\n\t\t\tfor (i = button.buttons.length - 1; i >= 0; i--) {\n\t\t\t\tthis.remove(button.buttons[i].node);\n\t\t\t}\n\n\t\t\t// If the collection has prefix and / or postfix buttons we need to add them in\n\t\t\tif (button.conf.prefixButtons) {\n\t\t\t\tnewButtons.unshift.apply(newButtons, button.conf.prefixButtons);\n\t\t\t}\n\n\t\t\tif (button.conf.postfixButtons) {\n\t\t\t\tnewButtons.push.apply(newButtons, button.conf.postfixButtons);\n\t\t\t}\n\n\t\t\tfor (i = 0; i < newButtons.length; i++) {\n\t\t\t\tvar newBtn = newButtons[i];\n\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tbutton.buttons,\n\t\t\t\t\tnewBtn,\n\t\t\t\t\tnewBtn !== undefined &&\n\t\t\t\t\t\tnewBtn.config !== undefined &&\n\t\t\t\t\t\tnewBtn.config.split !== undefined,\n\t\t\t\t\ttrue,\n\t\t\t\t\tnewBtn.parentConf !== undefined && newBtn.parentConf.split !== undefined,\n\t\t\t\t\tnull,\n\t\t\t\t\tnewBtn.parentConf\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis._draw(button.collection, button.buttons);\n\t},\n\n\t/**\n\t * Get the container node for the buttons\n\t * @return {jQuery} Buttons node\n\t */\n\tcontainer: function () {\n\t\treturn this.dom.container;\n\t},\n\n\t/**\n\t * Disable a button\n\t * @param  {node} node Button node\n\t * @return {Buttons} Self for chaining\n\t */\n\tdisable: function (node) {\n\t\tvar button = this._nodeToButton(node);\n\n\t\t$(button.node).addClass(this.c.dom.button.disabled).prop('disabled', true);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Destroy the instance, cleaning up event handlers and removing DOM\n\t * elements\n\t * @return {Buttons} Self for chaining\n\t */\n\tdestroy: function () {\n\t\t// Key event listener\n\t\t$('body').off('keyup.' + this.s.namespace);\n\n\t\t// Individual button destroy (so they can remove their own events if\n\t\t// needed). Take a copy as the array is modified by `remove`\n\t\tvar buttons = this.s.buttons.slice();\n\t\tvar i, ien;\n\n\t\tfor (i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tthis.remove(buttons[i].node);\n\t\t}\n\n\t\t// Container\n\t\tthis.dom.container.remove();\n\n\t\t// Remove from the settings object collection\n\t\tvar buttonInsts = this.s.dt.settings()[0];\n\n\t\tfor (i = 0, ien = buttonInsts.length; i < ien; i++) {\n\t\t\tif (buttonInsts.inst === this) {\n\t\t\t\tbuttonInsts.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Enable / disable a button\n\t * @param  {node} node Button node\n\t * @param  {boolean} [flag=true] Enable / disable flag\n\t * @return {Buttons} Self for chaining\n\t */\n\tenable: function (node, flag) {\n\t\tif (flag === false) {\n\t\t\treturn this.disable(node);\n\t\t}\n\n\t\tvar button = this._nodeToButton(node);\n\t\t$(button.node).removeClass(this.c.dom.button.disabled).prop('disabled', false);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Get a button's index\n\t *\n\t * This is internally recursive\n\t * @param {element} node Button to get the index of\n\t * @return {string} Button index\n\t */\n\tindex: function (node, nested, buttons) {\n\t\tif (!nested) {\n\t\t\tnested = '';\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tvar inner = buttons[i].buttons;\n\n\t\t\tif (buttons[i].node === node) {\n\t\t\t\treturn nested + i;\n\t\t\t}\n\n\t\t\tif (inner && inner.length) {\n\t\t\t\tvar match = this.index(node, i + '-', inner);\n\n\t\t\t\tif (match !== null) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Get the instance name for the button set selector\n\t * @return {string} Instance name\n\t */\n\tname: function () {\n\t\treturn this.c.name;\n\t},\n\n\t/**\n\t * Get a button's node of the buttons container if no button is given\n\t * @param  {node} [node] Button node\n\t * @return {jQuery} Button element, or container\n\t */\n\tnode: function (node) {\n\t\tif (!node) {\n\t\t\treturn this.dom.container;\n\t\t}\n\n\t\tvar button = this._nodeToButton(node);\n\t\treturn $(button.node);\n\t},\n\n\t/**\n\t * Set / get a processing class on the selected button\n\t * @param {element} node Triggering button node\n\t * @param  {boolean} flag true to add, false to remove, undefined to get\n\t * @return {boolean|Buttons} Getter value or this if a setter.\n\t */\n\tprocessing: function (node, flag) {\n\t\tvar dt = this.s.dt;\n\t\tvar button = this._nodeToButton(node);\n\n\t\tif (flag === undefined) {\n\t\t\treturn $(button.node).hasClass('processing');\n\t\t}\n\n\t\t$(button.node).toggleClass('processing', flag);\n\n\t\t$(dt.table().node()).triggerHandler('buttons-processing.dt', [\n\t\t\tflag,\n\t\t\tdt.button(node),\n\t\t\tdt,\n\t\t\t$(node),\n\t\t\tbutton.conf\n\t\t]);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Remove a button.\n\t * @param  {node} node Button node\n\t * @return {Buttons} Self for chaining\n\t */\n\tremove: function (node) {\n\t\tvar button = this._nodeToButton(node);\n\t\tvar host = this._nodeToHost(node);\n\t\tvar dt = this.s.dt;\n\n\t\t// Remove any child buttons first\n\t\tif (button.buttons.length) {\n\t\t\tfor (var i = button.buttons.length - 1; i >= 0; i--) {\n\t\t\t\tthis.remove(button.buttons[i].node);\n\t\t\t}\n\t\t}\n\n\t\tbutton.conf.destroying = true;\n\n\t\t// Allow the button to remove event handlers, etc\n\t\tif (button.conf.destroy) {\n\t\t\tbutton.conf.destroy.call(dt.button(node), dt, $(node), button.conf);\n\t\t}\n\n\t\tthis._removeKey(button.conf);\n\n\t\t$(button.node).remove();\n\n\t\tvar idx = $.inArray(button, host);\n\t\thost.splice(idx, 1);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Get the text for a button\n\t * @param  {int|string} node Button index\n\t * @return {string} Button text\n\t */ /**\n\t * Set the text for a button\n\t * @param  {int|string|function} node Button index\n\t * @param  {string} label Text\n\t * @return {Buttons} Self for chaining\n\t */\n\ttext: function (node, label) {\n\t\tvar button = this._nodeToButton(node);\n\t\tvar textNode = button.textNode;\n\t\tvar dt = this.s.dt;\n\t\tvar jqNode = $(button.node);\n\t\tvar text = function (opt) {\n\t\t\treturn typeof opt === 'function' ? opt(dt, jqNode, button.conf) : opt;\n\t\t};\n\n\t\tif (label === undefined) {\n\t\t\treturn text(button.conf.text);\n\t\t}\n\n\t\tbutton.conf.text = label;\n\t\ttextNode.html(text(label));\n\n\t\treturn this;\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Buttons constructor\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar dtSettings = dt.settings()[0];\n\t\tvar buttons = this.c.buttons;\n\n\t\tif (!dtSettings._buttons) {\n\t\t\tdtSettings._buttons = [];\n\t\t}\n\n\t\tdtSettings._buttons.push({\n\t\t\tinst: this,\n\t\t\tname: this.c.name\n\t\t});\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tthis.add(buttons[i]);\n\t\t}\n\n\t\tdt.on('destroy', function (e, settings) {\n\t\t\tif (settings === dtSettings) {\n\t\t\t\tthat.destroy();\n\t\t\t}\n\t\t});\n\n\t\t// Global key event binding to listen for button keys\n\t\t$('body').on('keyup.' + this.s.namespace, function (e) {\n\t\t\tif (!document.activeElement || document.activeElement === document.body) {\n\t\t\t\t// SUse a string of characters for fast lookup of if we need to\n\t\t\t\t// handle this\n\t\t\t\tvar character = String.fromCharCode(e.keyCode).toLowerCase();\n\n\t\t\t\tif (that.s.listenKeys.toLowerCase().indexOf(character) !== -1) {\n\t\t\t\t\tthat._keypress(character, e);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Add a new button to the key press listener\n\t * @param {object} conf Resolved button configuration object\n\t * @private\n\t */\n\t_addKey: function (conf) {\n\t\tif (conf.key) {\n\t\t\tthis.s.listenKeys += $.isPlainObject(conf.key) ? conf.key.key : conf.key;\n\t\t}\n\t},\n\n\t/**\n\t * Insert the buttons into the container. Call without parameters!\n\t * @param  {node} [container] Recursive only - Insert point\n\t * @param  {array} [buttons] Recursive only - Buttons array\n\t * @private\n\t */\n\t_draw: function (container, buttons) {\n\t\tif (!container) {\n\t\t\tcontainer = this.dom.container;\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tcontainer.children().detach();\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tcontainer.append(buttons[i].inserter);\n\t\t\tcontainer.append(' ');\n\n\t\t\tif (buttons[i].buttons && buttons[i].buttons.length) {\n\t\t\t\tthis._draw(buttons[i].collection, buttons[i].buttons);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Create buttons from an array of buttons\n\t * @param  {array} attachTo Buttons array to attach to\n\t * @param  {object} button Button definition\n\t * @param  {boolean} inCollection true if the button is in a collection\n\t * @private\n\t */\n\t_expandButton: function (\n\t\tattachTo,\n\t\tbutton,\n\t\tsplit,\n\t\tinCollection,\n\t\tinSplit,\n\t\tattachPoint,\n\t\tparentConf\n\t) {\n\t\tvar dt = this.s.dt;\n\t\tvar isSplit = false;\n\t\tvar domCollection = this.c.dom.collection;\n\t\tvar buttons = !Array.isArray(button) ? [button] : button;\n\n\t\tif (button === undefined) {\n\t\t\tbuttons = !Array.isArray(split) ? [split] : split;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tvar conf = this._resolveExtends(buttons[i]);\n\n\t\t\tif (!conf) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tisSplit = conf.config && conf.config.split ? true : false;\n\n\t\t\t// If the configuration is an array, then expand the buttons at this\n\t\t\t// point\n\t\t\tif (Array.isArray(conf)) {\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tattachTo,\n\t\t\t\t\tconf,\n\t\t\t\t\tbuilt !== undefined && built.conf !== undefined ? built.conf.split : undefined,\n\t\t\t\t\tinCollection,\n\t\t\t\t\tparentConf !== undefined && parentConf.split !== undefined,\n\t\t\t\t\tattachPoint,\n\t\t\t\t\tparentConf\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar built = this._buildButton(\n\t\t\t\tconf,\n\t\t\t\tinCollection,\n\t\t\t\tconf.split !== undefined ||\n\t\t\t\t\t(conf.config !== undefined && conf.config.split !== undefined),\n\t\t\t\tinSplit\n\t\t\t);\n\t\t\tif (!built) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (attachPoint !== undefined && attachPoint !== null) {\n\t\t\t\tattachTo.splice(attachPoint, 0, built);\n\t\t\t\tattachPoint++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tattachTo.push(built);\n\t\t\t}\n\n\t\t\t// Create the dropdown for a collection\n\t\t\tif (built.conf.buttons) {\n\t\t\t\tbuilt.collection = $('<' + domCollection.container.content.tag + '/>');\n\t\t\t\tbuilt.conf._collection = built.collection;\n\n\t\t\t\t$(built.node).append(domCollection.action.dropHtml);\n\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tbuilt.buttons,\n\t\t\t\t\tbuilt.conf.buttons,\n\t\t\t\t\tbuilt.conf.split,\n\t\t\t\t\t!isSplit,\n\t\t\t\t\tisSplit,\n\t\t\t\t\tattachPoint,\n\t\t\t\t\tbuilt.conf\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// And the split collection\n\t\t\tif (built.conf.split) {\n\t\t\t\tbuilt.collection = $('<' + domCollection.container.tag + '/>');\n\t\t\t\tbuilt.conf._collection = built.collection;\n\n\t\t\t\tfor (var j = 0; j < built.conf.split.length; j++) {\n\t\t\t\t\tvar item = built.conf.split[j];\n\n\t\t\t\t\tif (typeof item === 'object') {\n\t\t\t\t\t\titem.parent = parentConf;\n\n\t\t\t\t\t\tif (item.collectionLayout === undefined) {\n\t\t\t\t\t\t\titem.collectionLayout = built.conf.collectionLayout;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (item.dropup === undefined) {\n\t\t\t\t\t\t\titem.dropup = built.conf.dropup;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (item.fade === undefined) {\n\t\t\t\t\t\t\titem.fade = built.conf.fade;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tbuilt.buttons,\n\t\t\t\t\tbuilt.conf.buttons,\n\t\t\t\t\tbuilt.conf.split,\n\t\t\t\t\t!isSplit,\n\t\t\t\t\tisSplit,\n\t\t\t\t\tattachPoint,\n\t\t\t\t\tbuilt.conf\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbuilt.conf.parent = parentConf;\n\n\t\t\t// init call is made here, rather than buildButton as it needs to\n\t\t\t// be selectable, and for that it needs to be in the buttons array\n\t\t\tif (conf.init) {\n\t\t\t\tconf.init.call(dt.button(built.node), dt, $(built.node), conf);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Create an individual button\n\t * @param  {object} config            Resolved button configuration\n\t * @param  {boolean} inCollection `true` if a collection button\n\t * @return {object} Completed button description object\n\t * @private\n\t */\n\t_buildButton: function (config, inCollection, isSplit, inSplit) {\n\t\tvar configDom = this.c.dom;\n\t\tvar textNode;\n\t\tvar dt = this.s.dt;\n\t\tvar text = function (opt) {\n\t\t\treturn typeof opt === 'function' ? opt(dt, button, config) : opt;\n\t\t};\n\n\t\t// Create an object that describes the button which can be in `dom.button`, or\n\t\t// `dom.collection.button` or `dom.split.button` or `dom.collection.split.button`!\n\t\t// Each should extend from `dom.button`.\n\t\tvar dom = $.extend(true, {}, configDom.button);\n\n\t\tif (inCollection && isSplit && configDom.collection.split) {\n\t\t\t$.extend(true, dom, configDom.collection.split.action);\n\t\t}\n\t\telse if (inSplit || inCollection) {\n\t\t\t$.extend(true, dom, configDom.collection.button);\n\t\t}\n\t\telse if (isSplit) {\n\t\t\t$.extend(true, dom, configDom.split.button);\n\t\t}\n\n\t\t// Spacers don't do much other than insert an element into the DOM\n\t\tif (config.spacer) {\n\t\t\tvar spacer = $('<' + dom.spacer.tag + '/>')\n\t\t\t\t.addClass('dt-button-spacer ' + config.style + ' ' + dom.spacer.className)\n\t\t\t\t.html(text(config.text));\n\n\t\t\treturn {\n\t\t\t\tconf: config,\n\t\t\t\tnode: spacer,\n\t\t\t\tinserter: spacer,\n\t\t\t\tbuttons: [],\n\t\t\t\tinCollection: inCollection,\n\t\t\t\tisSplit: isSplit,\n\t\t\t\tcollection: null,\n\t\t\t\ttextNode: spacer\n\t\t\t};\n\t\t}\n\n\t\t// Make sure that the button is available based on whatever requirements\n\t\t// it has. For example, PDF button require pdfmake\n\t\tif (config.available && !config.available(dt, config) && !config.hasOwnProperty('html')) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar button;\n\n\t\tif (!config.hasOwnProperty('html')) {\n\t\t\tvar action = function (e, dt, button, config) {\n\t\t\t\tconfig.action.call(dt.button(button), e, dt, button, config);\n\n\t\t\t\t$(dt.table().node()).triggerHandler('buttons-action.dt', [\n\t\t\t\t\tdt.button(button),\n\t\t\t\t\tdt,\n\t\t\t\t\tbutton,\n\t\t\t\t\tconfig\n\t\t\t\t]);\n\t\t\t};\n\n\t\t\tvar tag = config.tag || dom.tag;\n\t\t\tvar clickBlurs = config.clickBlurs === undefined ? true : config.clickBlurs;\n\n\t\t\tbutton = $('<' + tag + '/>')\n\t\t\t\t.addClass(dom.className)\n\t\t\t\t.attr('tabindex', this.s.dt.settings()[0].iTabIndex)\n\t\t\t\t.attr('aria-controls', this.s.dt.table().node().id)\n\t\t\t\t.on('click.dtb', function (e) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif (!button.hasClass(dom.disabled) && config.action) {\n\t\t\t\t\t\taction(e, dt, button, config);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (clickBlurs) {\n\t\t\t\t\t\tbutton.trigger('blur');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keypress.dtb', function (e) {\n\t\t\t\t\tif (e.keyCode === 13) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (!button.hasClass(dom.disabled) && config.action) {\n\t\t\t\t\t\t\taction(e, dt, button, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t// Make `a` tags act like a link\n\t\t\tif (tag.toLowerCase() === 'a') {\n\t\t\t\tbutton.attr('href', '#');\n\t\t\t}\n\n\t\t\t// Button tags should have `type=button` so they don't have any default behaviour\n\t\t\tif (tag.toLowerCase() === 'button') {\n\t\t\t\tbutton.attr('type', 'button');\n\t\t\t}\n\n\t\t\tif (dom.liner.tag) {\n\t\t\t\tvar liner = $('<' + dom.liner.tag + '/>')\n\t\t\t\t\t.html(text(config.text))\n\t\t\t\t\t.addClass(dom.liner.className);\n\n\t\t\t\tif (dom.liner.tag.toLowerCase() === 'a') {\n\t\t\t\t\tliner.attr('href', '#');\n\t\t\t\t}\n\n\t\t\t\tbutton.append(liner);\n\t\t\t\ttextNode = liner;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbutton.html(text(config.text));\n\t\t\t\ttextNode = button;\n\t\t\t}\n\n\t\t\tif (config.enabled === false) {\n\t\t\t\tbutton.addClass(dom.disabled);\n\t\t\t}\n\n\t\t\tif (config.className) {\n\t\t\t\tbutton.addClass(config.className);\n\t\t\t}\n\n\t\t\tif (config.titleAttr) {\n\t\t\t\tbutton.attr('title', text(config.titleAttr));\n\t\t\t}\n\n\t\t\tif (config.attr) {\n\t\t\t\tbutton.attr(config.attr);\n\t\t\t}\n\n\t\t\tif (!config.namespace) {\n\t\t\t\tconfig.namespace = '.dt-button-' + _buttonCounter++;\n\t\t\t}\n\n\t\t\tif (config.config !== undefined && config.config.split) {\n\t\t\t\tconfig.split = config.config.split;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tbutton = $(config.html);\n\t\t}\n\n\t\tvar buttonContainer = this.c.dom.buttonContainer;\n\t\tvar inserter;\n\t\tif (buttonContainer && buttonContainer.tag) {\n\t\t\tinserter = $('<' + buttonContainer.tag + '/>')\n\t\t\t\t.addClass(buttonContainer.className)\n\t\t\t\t.append(button);\n\t\t}\n\t\telse {\n\t\t\tinserter = button;\n\t\t}\n\n\t\tthis._addKey(config);\n\n\t\t// Style integration callback for DOM manipulation\n\t\t// Note that this is _not_ documented. It is currently\n\t\t// for style integration only\n\t\tif (this.c.buttonCreated) {\n\t\t\tinserter = this.c.buttonCreated(config, inserter);\n\t\t}\n\n\t\tvar splitDiv;\n\n\t\tif (isSplit) {\n\t\t\tvar dropdownConf = inCollection\n\t\t\t\t? $.extend(true, this.c.dom.split, this.c.dom.collection.split)\n\t\t\t\t: this.c.dom.split;\n\t\t\tvar wrapperConf = dropdownConf.wrapper;\n\n\t\t\tsplitDiv = $('<' + wrapperConf.tag + '/>')\n\t\t\t\t.addClass(wrapperConf.className)\n\t\t\t\t.append(button);\n\n\t\t\tvar dropButtonConfig = $.extend(config, {\n\t\t\t\talign: dropdownConf.dropdown.align,\n\t\t\t\tattr: {\n\t\t\t\t\t'aria-haspopup': 'dialog',\n\t\t\t\t\t'aria-expanded': false\n\t\t\t\t},\n\t\t\t\tclassName: dropdownConf.dropdown.className,\n\t\t\t\tcloseButton: false,\n\t\t\t\tsplitAlignClass: dropdownConf.dropdown.splitAlignClass,\n\t\t\t\ttext: dropdownConf.dropdown.text\n\t\t\t});\n\n\t\t\tthis._addKey(dropButtonConfig);\n\n\t\t\tvar splitAction = function (e, dt, button, config) {\n\t\t\t\t_dtButtons.split.action.call(dt.button(splitDiv), e, dt, button, config);\n\n\t\t\t\t$(dt.table().node()).triggerHandler('buttons-action.dt', [\n\t\t\t\t\tdt.button(button),\n\t\t\t\t\tdt,\n\t\t\t\t\tbutton,\n\t\t\t\t\tconfig\n\t\t\t\t]);\n\t\t\t\tbutton.attr('aria-expanded', true);\n\t\t\t};\n\n\t\t\tvar dropButton = $(\n\t\t\t\t'<button class=\"' + dropdownConf.dropdown.className + ' dt-button\"></button>'\n\t\t\t)\n\t\t\t\t.html(dropdownConf.dropdown.dropHtml)\n\t\t\t\t.on('click.dtb', function (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\tif (!dropButton.hasClass(dom.disabled)) {\n\t\t\t\t\t\tsplitAction(e, dt, dropButton, dropButtonConfig);\n\t\t\t\t\t}\n\t\t\t\t\tif (clickBlurs) {\n\t\t\t\t\t\tdropButton.trigger('blur');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keypress.dtb', function (e) {\n\t\t\t\t\tif (e.keyCode === 13) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (!dropButton.hasClass(dom.disabled)) {\n\t\t\t\t\t\t\tsplitAction(e, dt, dropButton, dropButtonConfig);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tif (config.split.length === 0) {\n\t\t\t\tdropButton.addClass('dtb-hide-drop');\n\t\t\t}\n\n\t\t\tsplitDiv.append(dropButton).attr(dropButtonConfig.attr);\n\t\t}\n\n\t\treturn {\n\t\t\tconf: config,\n\t\t\tnode: isSplit ? splitDiv.get(0) : button.get(0),\n\t\t\tinserter: isSplit ? splitDiv : inserter,\n\t\t\tbuttons: [],\n\t\t\tinCollection: inCollection,\n\t\t\tisSplit: isSplit,\n\t\t\tinSplit: inSplit,\n\t\t\tcollection: null,\n\t\t\ttextNode: textNode\n\t\t};\n\t},\n\n\t/**\n\t * Get the button object from a node (recursive)\n\t * @param  {node} node Button node\n\t * @param  {array} [buttons] Button array, uses base if not defined\n\t * @return {object} Button object\n\t * @private\n\t */\n\t_nodeToButton: function (node, buttons) {\n\t\tif (!buttons) {\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tif (buttons[i].node === node) {\n\t\t\t\treturn buttons[i];\n\t\t\t}\n\n\t\t\tif (buttons[i].buttons.length) {\n\t\t\t\tvar ret = this._nodeToButton(node, buttons[i].buttons);\n\n\t\t\t\tif (ret) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Get container array for a button from a button node (recursive)\n\t * @param  {node} node Button node\n\t * @param  {array} [buttons] Button array, uses base if not defined\n\t * @return {array} Button's host array\n\t * @private\n\t */\n\t_nodeToHost: function (node, buttons) {\n\t\tif (!buttons) {\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tif (buttons[i].node === node) {\n\t\t\t\treturn buttons;\n\t\t\t}\n\n\t\t\tif (buttons[i].buttons.length) {\n\t\t\t\tvar ret = this._nodeToHost(node, buttons[i].buttons);\n\n\t\t\t\tif (ret) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle a key press - determine if any button's key configured matches\n\t * what was typed and trigger the action if so.\n\t * @param  {string} character The character pressed\n\t * @param  {object} e Key event that triggered this call\n\t * @private\n\t */\n\t_keypress: function (character, e) {\n\t\t// Check if this button press already activated on another instance of Buttons\n\t\tif (e._buttonsHandled) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar run = function (conf, node) {\n\t\t\tif (!conf.key) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (conf.key === character) {\n\t\t\t\te._buttonsHandled = true;\n\t\t\t\t$(node).click();\n\t\t\t}\n\t\t\telse if ($.isPlainObject(conf.key)) {\n\t\t\t\tif (conf.key.key !== character) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.shiftKey && !e.shiftKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.altKey && !e.altKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.ctrlKey && !e.ctrlKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.metaKey && !e.metaKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Made it this far - it is good\n\t\t\t\te._buttonsHandled = true;\n\t\t\t\t$(node).click();\n\t\t\t}\n\t\t};\n\n\t\tvar recurse = function (a) {\n\t\t\tfor (var i = 0, ien = a.length; i < ien; i++) {\n\t\t\t\trun(a[i].conf, a[i].node);\n\n\t\t\t\tif (a[i].buttons.length) {\n\t\t\t\t\trecurse(a[i].buttons);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\trecurse(this.s.buttons);\n\t},\n\n\t/**\n\t * Remove a key from the key listener for this instance (to be used when a\n\t * button is removed)\n\t * @param  {object} conf Button configuration\n\t * @private\n\t */\n\t_removeKey: function (conf) {\n\t\tif (conf.key) {\n\t\t\tvar character = $.isPlainObject(conf.key) ? conf.key.key : conf.key;\n\n\t\t\t// Remove only one character, as multiple buttons could have the\n\t\t\t// same listening key\n\t\t\tvar a = this.s.listenKeys.split('');\n\t\t\tvar idx = $.inArray(character, a);\n\t\t\ta.splice(idx, 1);\n\t\t\tthis.s.listenKeys = a.join('');\n\t\t}\n\t},\n\n\t/**\n\t * Resolve a button configuration\n\t * @param  {string|function|object} conf Button config to resolve\n\t * @return {object} Button configuration\n\t * @private\n\t */\n\t_resolveExtends: function (conf) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar i, ien;\n\t\tvar toConfObject = function (base) {\n\t\t\tvar loop = 0;\n\n\t\t\t// Loop until we have resolved to a button configuration, or an\n\t\t\t// array of button configurations (which will be iterated\n\t\t\t// separately)\n\t\t\twhile (!$.isPlainObject(base) && !Array.isArray(base)) {\n\t\t\t\tif (base === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (typeof base === 'function') {\n\t\t\t\t\tbase = base.call(that, dt, conf);\n\n\t\t\t\t\tif (!base) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (typeof base === 'string') {\n\t\t\t\t\tif (!_dtButtons[base]) {\n\t\t\t\t\t\treturn { html: base };\n\t\t\t\t\t}\n\n\t\t\t\t\tbase = _dtButtons[base];\n\t\t\t\t}\n\n\t\t\t\tloop++;\n\t\t\t\tif (loop > 30) {\n\t\t\t\t\t// Protect against misconfiguration killing the browser\n\t\t\t\t\tthrow 'Buttons: Too many iterations';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Array.isArray(base) ? base : $.extend({}, base);\n\t\t};\n\n\t\tconf = toConfObject(conf);\n\n\t\twhile (conf && conf.extend) {\n\t\t\t// Use `toConfObject` in case the button definition being extended\n\t\t\t// is itself a string or a function\n\t\t\tif (!_dtButtons[conf.extend]) {\n\t\t\t\tthrow 'Cannot extend unknown button type: ' + conf.extend;\n\t\t\t}\n\n\t\t\tvar objArray = toConfObject(_dtButtons[conf.extend]);\n\t\t\tif (Array.isArray(objArray)) {\n\t\t\t\treturn objArray;\n\t\t\t}\n\t\t\telse if (!objArray) {\n\t\t\t\t// This is a little brutal as it might be possible to have a\n\t\t\t\t// valid button without the extend, but if there is no extend\n\t\t\t\t// then the host button would be acting in an undefined state\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Stash the current class name\n\t\t\tvar originalClassName = objArray.className;\n\n\t\t\tif (conf.config !== undefined && objArray.config !== undefined) {\n\t\t\t\tconf.config = $.extend({}, objArray.config, conf.config);\n\t\t\t}\n\n\t\t\tconf = $.extend({}, objArray, conf);\n\n\t\t\t// The extend will have overwritten the original class name if the\n\t\t\t// `conf` object also assigned a class, but we want to concatenate\n\t\t\t// them so they are list that is combined from all extended buttons\n\t\t\tif (originalClassName && conf.className !== originalClassName) {\n\t\t\t\tconf.className = originalClassName + ' ' + conf.className;\n\t\t\t}\n\n\t\t\t// Although we want the `conf` object to overwrite almost all of\n\t\t\t// the properties of the object being extended, the `extend`\n\t\t\t// property should come from the object being extended\n\t\t\tconf.extend = objArray.extend;\n\t\t}\n\n\t\t// Buttons to be added to a collection  -gives the ability to define\n\t\t// if buttons should be added to the start or end of a collection\n\t\tvar postfixButtons = conf.postfixButtons;\n\t\tif (postfixButtons) {\n\t\t\tif (!conf.buttons) {\n\t\t\t\tconf.buttons = [];\n\t\t\t}\n\n\t\t\tfor (i = 0, ien = postfixButtons.length; i < ien; i++) {\n\t\t\t\tconf.buttons.push(postfixButtons[i]);\n\t\t\t}\n\t\t}\n\n\t\tvar prefixButtons = conf.prefixButtons;\n\t\tif (prefixButtons) {\n\t\t\tif (!conf.buttons) {\n\t\t\t\tconf.buttons = [];\n\t\t\t}\n\n\t\t\tfor (i = 0, ien = prefixButtons.length; i < ien; i++) {\n\t\t\t\tconf.buttons.splice(i, 0, prefixButtons[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn conf;\n\t},\n\n\t/**\n\t * Display (and replace if there is an existing one) a popover attached to a button\n\t * @param {string|node} content Content to show\n\t * @param {DataTable.Api} hostButton DT API instance of the button\n\t * @param {object} inOpts Options (see object below for all options)\n\t */\n\t_popover: function (content, hostButton, inOpts, e) {\n\t\tvar dt = hostButton;\n\t\tvar c = this.c;\n\t\tvar closed = false;\n\t\tvar options = $.extend(\n\t\t\t{\n\t\t\t\talign: 'button-left', // button-right, dt-container, split-left, split-right\n\t\t\t\tautoClose: false,\n\t\t\t\tbackground: true,\n\t\t\t\tbackgroundClassName: 'dt-button-background',\n\t\t\t\tcloseButton: true,\n\t\t\t\tcontainerClassName: c.dom.collection.container.className,\n\t\t\t\tcontentClassName: c.dom.collection.container.content.className,\n\t\t\t\tcollectionLayout: '',\n\t\t\t\tcollectionTitle: '',\n\t\t\t\tdropup: false,\n\t\t\t\tfade: 400,\n\t\t\t\tpopoverTitle: '',\n\t\t\t\trightAlignClassName: 'dt-button-right',\n\t\t\t\ttag: c.dom.collection.container.tag\n\t\t\t},\n\t\t\tinOpts\n\t\t);\n\n\t\tvar containerSelector = options.tag + '.' + options.containerClassName.replace(/ /g, '.');\n\t\tvar hostNode = hostButton.node();\n\n\t\tvar close = function () {\n\t\t\tclosed = true;\n\n\t\t\t_fadeOut($(containerSelector), options.fade, function () {\n\t\t\t\t$(this).detach();\n\t\t\t});\n\n\t\t\t$(dt.buttons('[aria-haspopup=\"dialog\"][aria-expanded=\"true\"]').nodes()).attr(\n\t\t\t\t'aria-expanded',\n\t\t\t\t'false'\n\t\t\t);\n\n\t\t\t$('div.dt-button-background').off('click.dtb-collection');\n\t\t\tButtons.background(false, options.backgroundClassName, options.fade, hostNode);\n\n\t\t\t$(window).off('resize.resize.dtb-collection');\n\t\t\t$('body').off('.dtb-collection');\n\t\t\tdt.off('buttons-action.b-internal');\n\t\t\tdt.off('destroy');\n\t\t};\n\n\t\tif (content === false) {\n\t\t\tclose();\n\t\t\treturn;\n\t\t}\n\n\t\tvar existingExpanded = $(\n\t\t\tdt.buttons('[aria-haspopup=\"dialog\"][aria-expanded=\"true\"]').nodes()\n\t\t);\n\t\tif (existingExpanded.length) {\n\t\t\t// Reuse the current position if the button that was triggered is inside an existing collection\n\t\t\tif (hostNode.closest(containerSelector).length) {\n\t\t\t\thostNode = existingExpanded.eq(0);\n\t\t\t}\n\n\t\t\tclose();\n\t\t}\n\n\t\t// Try to be smart about the layout\n\t\tvar cnt = $('.dt-button', content).length;\n\t\tvar mod = '';\n\n\t\tif (cnt === 3) {\n\t\t\tmod = 'dtb-b3';\n\t\t}\n\t\telse if (cnt === 2) {\n\t\t\tmod = 'dtb-b2';\n\t\t}\n\t\telse if (cnt === 1) {\n\t\t\tmod = 'dtb-b1';\n\t\t}\n\n\t\tvar display = $('<' + options.tag + '/>')\n\t\t\t.addClass(options.containerClassName)\n\t\t\t.addClass(options.collectionLayout)\n\t\t\t.addClass(options.splitAlignClass)\n\t\t\t.addClass(mod)\n\t\t\t.css('display', 'none')\n\t\t\t.attr({\n\t\t\t\t'aria-modal': true,\n\t\t\t\trole: 'dialog'\n\t\t\t});\n\n\t\tcontent = $(content)\n\t\t\t.addClass(options.contentClassName)\n\t\t\t.attr('role', 'menu')\n\t\t\t.appendTo(display);\n\n\t\thostNode.attr('aria-expanded', 'true');\n\n\t\tif (hostNode.parents('body')[0] !== document.body) {\n\t\t\thostNode = document.body.lastChild;\n\t\t}\n\n\t\tif (options.popoverTitle) {\n\t\t\tdisplay.prepend(\n\t\t\t\t'<div class=\"dt-button-collection-title\">' + options.popoverTitle + '</div>'\n\t\t\t);\n\t\t}\n\t\telse if (options.collectionTitle) {\n\t\t\tdisplay.prepend(\n\t\t\t\t'<div class=\"dt-button-collection-title\">' + options.collectionTitle + '</div>'\n\t\t\t);\n\t\t}\n\n\t\tif (options.closeButton) {\n\t\t\tdisplay\n\t\t\t\t.prepend('<div class=\"dtb-popover-close\">&times;</div>')\n\t\t\t\t.addClass('dtb-collection-closeable');\n\t\t}\n\n\t\t_fadeIn(display.insertAfter(hostNode), options.fade);\n\n\t\tvar tableContainer = $(hostButton.table().container());\n\t\tvar position = display.css('position');\n\n\t\tif (options.span === 'container' || options.align === 'dt-container') {\n\t\t\thostNode = hostNode.parent();\n\t\t\tdisplay.css('width', tableContainer.width());\n\t\t}\n\n\t\t// Align the popover relative to the DataTables container\n\t\t// Useful for wide popovers such as SearchPanes\n\t\tif (position === 'absolute') {\n\t\t\t// Align relative to the host button\n\t\t\tvar offsetParent = $(hostNode[0].offsetParent);\n\t\t\tvar buttonPosition = hostNode.position();\n\t\t\tvar buttonOffset = hostNode.offset();\n\t\t\tvar tableSizes = offsetParent.offset();\n\t\t\tvar containerPosition = offsetParent.position();\n\t\t\tvar computed = window.getComputedStyle(offsetParent[0]);\n\n\t\t\ttableSizes.height = offsetParent.outerHeight();\n\t\t\ttableSizes.width = offsetParent.width() + parseFloat(computed.paddingLeft);\n\t\t\ttableSizes.right = tableSizes.left + tableSizes.width;\n\t\t\ttableSizes.bottom = tableSizes.top + tableSizes.height;\n\n\t\t\t// Set the initial position so we can read height / width\n\t\t\tvar top = buttonPosition.top + hostNode.outerHeight();\n\t\t\tvar left = buttonPosition.left;\n\n\t\t\tdisplay.css({\n\t\t\t\ttop: top,\n\t\t\t\tleft: left\n\t\t\t});\n\n\t\t\t// Get the popover position\n\t\t\tcomputed = window.getComputedStyle(display[0]);\n\t\t\tvar popoverSizes = display.offset();\n\n\t\t\tpopoverSizes.height = display.outerHeight();\n\t\t\tpopoverSizes.width = display.outerWidth();\n\t\t\tpopoverSizes.right = popoverSizes.left + popoverSizes.width;\n\t\t\tpopoverSizes.bottom = popoverSizes.top + popoverSizes.height;\n\t\t\tpopoverSizes.marginTop = parseFloat(computed.marginTop);\n\t\t\tpopoverSizes.marginBottom = parseFloat(computed.marginBottom);\n\n\t\t\t// First position per the class requirements - pop up and right align\n\t\t\tif (options.dropup) {\n\t\t\t\ttop =\n\t\t\t\t\tbuttonPosition.top -\n\t\t\t\t\tpopoverSizes.height -\n\t\t\t\t\tpopoverSizes.marginTop -\n\t\t\t\t\tpopoverSizes.marginBottom;\n\t\t\t}\n\n\t\t\tif (options.align === 'button-right' || display.hasClass(options.rightAlignClassName)) {\n\t\t\t\tleft = buttonPosition.left - popoverSizes.width + hostNode.outerWidth();\n\t\t\t}\n\n\t\t\t// Container alignment - make sure it doesn't overflow the table container\n\t\t\tif (options.align === 'dt-container' || options.align === 'container') {\n\t\t\t\tif (left < buttonPosition.left) {\n\t\t\t\t\tleft = -buttonPosition.left;\n\t\t\t\t}\n\n\t\t\t\tif (left + popoverSizes.width > tableSizes.width) {\n\t\t\t\t\tleft = tableSizes.width - popoverSizes.width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Window adjustment\n\t\t\tif (containerPosition.left + left + popoverSizes.width > $(window).width()) {\n\t\t\t\t// Overflowing the document to the right\n\t\t\t\tleft = $(window).width() - popoverSizes.width - containerPosition.left;\n\t\t\t}\n\n\t\t\tif (buttonOffset.left + left < 0) {\n\t\t\t\t// Off to the left of the document\n\t\t\t\tleft = -buttonOffset.left;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tcontainerPosition.top + top + popoverSizes.height >\n\t\t\t\t$(window).height() + $(window).scrollTop()\n\t\t\t) {\n\t\t\t\t// Pop up if otherwise we'd need the user to scroll down\n\t\t\t\ttop =\n\t\t\t\t\tbuttonPosition.top -\n\t\t\t\t\tpopoverSizes.height -\n\t\t\t\t\tpopoverSizes.marginTop -\n\t\t\t\t\tpopoverSizes.marginBottom;\n\t\t\t}\n\n\t\t\tif (containerPosition.top + top < $(window).scrollTop()) {\n\t\t\t\t// Correction for when the top is beyond the top of the page\n\t\t\t\ttop = buttonPosition.top + hostNode.outerHeight();\n\t\t\t}\n\n\t\t\t// Calculations all done - now set it\n\t\t\tdisplay.css({\n\t\t\t\ttop: top,\n\t\t\t\tleft: left\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t// Fix position - centre on screen\n\t\t\tvar position = function () {\n\t\t\t\tvar half = $(window).height() / 2;\n\n\t\t\t\tvar top = display.height() / 2;\n\t\t\t\tif (top > half) {\n\t\t\t\t\ttop = half;\n\t\t\t\t}\n\n\t\t\t\tdisplay.css('marginTop', top * -1);\n\t\t\t};\n\n\t\t\tposition();\n\n\t\t\t$(window).on('resize.dtb-collection', function () {\n\t\t\t\tposition();\n\t\t\t});\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tButtons.background(\n\t\t\t\ttrue,\n\t\t\t\toptions.backgroundClassName,\n\t\t\t\toptions.fade,\n\t\t\t\toptions.backgroundHost || hostNode\n\t\t\t);\n\t\t}\n\n\t\t// This is bonkers, but if we don't have a click listener on the\n\t\t// background element, iOS Safari will ignore the body click\n\t\t// listener below. An empty function here is all that is\n\t\t// required to make it work...\n\t\t$('div.dt-button-background').on('click.dtb-collection', function () {});\n\n\t\tif (options.autoClose) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tdt.on('buttons-action.b-internal', function (e, btn, dt, node) {\n\t\t\t\t\tif (node[0] === hostNode[0]) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tclose();\n\t\t\t\t});\n\t\t\t}, 0);\n\t\t}\n\n\t\t$(display).trigger('buttons-popover.dt');\n\n\t\tdt.on('destroy', close);\n\n\t\tsetTimeout(function () {\n\t\t\tclosed = false;\n\t\t\t$('body')\n\t\t\t\t.on('click.dtb-collection', function (e) {\n\t\t\t\t\tif (closed) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// andSelf is deprecated in jQ1.8, but we want 1.7 compat\n\t\t\t\t\tvar back = $.fn.addBack ? 'addBack' : 'andSelf';\n\t\t\t\t\tvar parent = $(e.target).parent()[0];\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(!$(e.target).parents()[back]().filter(content).length &&\n\t\t\t\t\t\t\t!$(parent).hasClass('dt-buttons')) ||\n\t\t\t\t\t\t$(e.target).hasClass('dt-button-background')\n\t\t\t\t\t) {\n\t\t\t\t\t\tclose();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keyup.dtb-collection', function (e) {\n\t\t\t\t\tif (e.keyCode === 27) {\n\t\t\t\t\t\tclose();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keydown.dtb-collection', function (e) {\n\t\t\t\t\t// Focus trap for tab key\n\t\t\t\t\tvar elements = $('a, button', content);\n\t\t\t\t\tvar active = document.activeElement;\n\n\t\t\t\t\tif (e.keyCode !== 9) {\n\t\t\t\t\t\t// tab\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (elements.index(active) === -1) {\n\t\t\t\t\t\t// If current focus is not inside the popover\n\t\t\t\t\t\telements.first().focus();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\telse if (e.shiftKey) {\n\t\t\t\t\t\t// Reverse tabbing order when shift key is pressed\n\t\t\t\t\t\tif (active === elements[0]) {\n\t\t\t\t\t\t\telements.last().focus();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (active === elements.last()[0]) {\n\t\t\t\t\t\t\telements.first().focus();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, 0);\n\t}\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Statics\n */\n\n/**\n * Show / hide a background layer behind a collection\n * @param  {boolean} Flag to indicate if the background should be shown or\n *   hidden\n * @param  {string} Class to assign to the background\n * @static\n */\nButtons.background = function (show, className, fade, insertPoint) {\n\tif (fade === undefined) {\n\t\tfade = 400;\n\t}\n\tif (!insertPoint) {\n\t\tinsertPoint = document.body;\n\t}\n\n\tif (show) {\n\t\t_fadeIn(\n\t\t\t$('<div/>').addClass(className).css('display', 'none').insertAfter(insertPoint),\n\t\t\tfade\n\t\t);\n\t}\n\telse {\n\t\t_fadeOut($('div.' + className), fade, function () {\n\t\t\t$(this).removeClass(className).remove();\n\t\t});\n\t}\n};\n\n/**\n * Instance selector - select Buttons instances based on an instance selector\n * value from the buttons assigned to a DataTable. This is only useful if\n * multiple instances are attached to a DataTable.\n * @param  {string|int|array} Instance selector - see `instance-selector`\n *   documentation on the DataTables site\n * @param  {array} Button instance array that was attached to the DataTables\n *   settings object\n * @return {array} Buttons instances\n * @static\n */\nButtons.instanceSelector = function (group, buttons) {\n\tif (group === undefined || group === null) {\n\t\treturn $.map(buttons, function (v) {\n\t\t\treturn v.inst;\n\t\t});\n\t}\n\n\tvar ret = [];\n\tvar names = $.map(buttons, function (v) {\n\t\treturn v.name;\n\t});\n\n\t// Flatten the group selector into an array of single options\n\tvar process = function (input) {\n\t\tif (Array.isArray(input)) {\n\t\t\tfor (var i = 0, ien = input.length; i < ien; i++) {\n\t\t\t\tprocess(input[i]);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof input === 'string') {\n\t\t\tif (input.indexOf(',') !== -1) {\n\t\t\t\t// String selector, list of names\n\t\t\t\tprocess(input.split(','));\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// String selector individual name\n\t\t\t\tvar idx = $.inArray(input.trim(), names);\n\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tret.push(buttons[idx].inst);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (typeof input === 'number') {\n\t\t\t// Index selector\n\t\t\tret.push(buttons[input].inst);\n\t\t}\n\t\telse if (typeof input === 'object') {\n\t\t\t// Actual instance selector\n\t\t\tret.push(input);\n\t\t}\n\t};\n\n\tprocess(group);\n\n\treturn ret;\n};\n\n/**\n * Button selector - select one or more buttons from a selector input so some\n * operation can be performed on them.\n * @param  {array} Button instances array that the selector should operate on\n * @param  {string|int|node|jQuery|array} Button selector - see\n *   `button-selector` documentation on the DataTables site\n * @return {array} Array of objects containing `inst` and `idx` properties of\n *   the selected buttons so you know which instance each button belongs to.\n * @static\n */\nButtons.buttonSelector = function (insts, selector) {\n\tvar ret = [];\n\tvar nodeBuilder = function (a, buttons, baseIdx) {\n\t\tvar button;\n\t\tvar idx;\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif (button) {\n\t\t\t\tidx = baseIdx !== undefined ? baseIdx + i : i + '';\n\n\t\t\t\ta.push({\n\t\t\t\t\tnode: button.node,\n\t\t\t\t\tname: button.conf.name,\n\t\t\t\t\tidx: idx\n\t\t\t\t});\n\n\t\t\t\tif (button.buttons) {\n\t\t\t\t\tnodeBuilder(a, button.buttons, idx + '-');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tvar run = function (selector, inst) {\n\t\tvar i, ien;\n\t\tvar buttons = [];\n\t\tnodeBuilder(buttons, inst.s.buttons);\n\n\t\tvar nodes = $.map(buttons, function (v) {\n\t\t\treturn v.node;\n\t\t});\n\n\t\tif (Array.isArray(selector) || selector instanceof $) {\n\t\t\tfor (i = 0, ien = selector.length; i < ien; i++) {\n\t\t\t\trun(selector[i], inst);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (selector === null || selector === undefined || selector === '*') {\n\t\t\t// Select all\n\t\t\tfor (i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: buttons[i].node\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if (typeof selector === 'number') {\n\t\t\t// Main button index selector\n\t\t\tif (inst.s.buttons[selector]) {\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: inst.s.buttons[selector].node\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if (typeof selector === 'string') {\n\t\t\tif (selector.indexOf(',') !== -1) {\n\t\t\t\t// Split\n\t\t\t\tvar a = selector.split(',');\n\n\t\t\t\tfor (i = 0, ien = a.length; i < ien; i++) {\n\t\t\t\t\trun(a[i].trim(), inst);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (selector.match(/^\\d+(\\-\\d+)*$/)) {\n\t\t\t\t// Sub-button index selector\n\t\t\t\tvar indexes = $.map(buttons, function (v) {\n\t\t\t\t\treturn v.idx;\n\t\t\t\t});\n\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: buttons[$.inArray(selector, indexes)].node\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (selector.indexOf(':name') !== -1) {\n\t\t\t\t// Button name selector\n\t\t\t\tvar name = selector.replace(':name', '');\n\n\t\t\t\tfor (i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\t\t\tif (buttons[i].name === name) {\n\t\t\t\t\t\tret.push({\n\t\t\t\t\t\t\tinst: inst,\n\t\t\t\t\t\t\tnode: buttons[i].node\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// jQuery selector on the nodes\n\t\t\t\t$(nodes)\n\t\t\t\t\t.filter(selector)\n\t\t\t\t\t.each(function () {\n\t\t\t\t\t\tret.push({\n\t\t\t\t\t\t\tinst: inst,\n\t\t\t\t\t\t\tnode: this\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if (typeof selector === 'object' && selector.nodeName) {\n\t\t\t// Node selector\n\t\t\tvar idx = $.inArray(selector, nodes);\n\n\t\t\tif (idx !== -1) {\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: nodes[idx]\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tfor (var i = 0, ien = insts.length; i < ien; i++) {\n\t\tvar inst = insts[i];\n\n\t\trun(selector, inst);\n\t}\n\n\treturn ret;\n};\n\n/**\n * Default function used for formatting output data.\n * @param {*} str Data to strip\n */\nButtons.stripData = function (str, config) {\n\tif (typeof str !== 'string') {\n\t\treturn str;\n\t}\n\n\t// Always remove script tags\n\tstr = str.replace(/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi, '');\n\n\t// Always remove comments\n\tstr = str.replace(/<!\\-\\-.*?\\-\\->/g, '');\n\n\tif (!config || config.stripHtml) {\n\t\tstr = str.replace(/<[^>]*>/g, '');\n\t}\n\n\tif (!config || config.trim) {\n\t\tstr = str.replace(/^\\s+|\\s+$/g, '');\n\t}\n\n\tif (!config || config.stripNewlines) {\n\t\tstr = str.replace(/\\n/g, ' ');\n\t}\n\n\tif (!config || config.decodeEntities) {\n\t\tif (_entityDecoder) {\n\t\t\tstr = _entityDecoder(str);\n\t\t}\n\t\telse {\n\t\t\t_exportTextarea.innerHTML = str;\n\t\t\tstr = _exportTextarea.value;\n\t\t}\n\t}\n\n\treturn str;\n};\n\n/**\n * Provide a custom entity decoding function - e.g. a regex one, which can be\n * much faster than the built in DOM option, but also larger code size.\n * @param {function} fn\n */\nButtons.entityDecoder = function (fn) {\n\t_entityDecoder = fn;\n}\n\n/**\n * Buttons defaults. For full documentation, please refer to the docs/option\n * directory or the DataTables site.\n * @type {Object}\n * @static\n */\nButtons.defaults = {\n\tbuttons: ['copy', 'excel', 'csv', 'pdf', 'print'],\n\tname: 'main',\n\ttabIndex: 0,\n\tdom: {\n\t\tcontainer: {\n\t\t\ttag: 'div',\n\t\t\tclassName: 'dt-buttons'\n\t\t},\n\t\tcollection: {\n\t\t\taction: {\n\t\t\t\t// action button\n\t\t\t\tdropHtml: '<span class=\"dt-button-down-arrow\">&#x25BC;</span>'\n\t\t\t},\n\t\t\tcontainer: {\n\t\t\t\t// The element used for the dropdown\n\t\t\t\tclassName: 'dt-button-collection',\n\t\t\t\tcontent: {\n\t\t\t\t\tclassName: '',\n\t\t\t\t\ttag: 'div'\n\t\t\t\t},\n\t\t\t\ttag: 'div'\n\t\t\t}\n\t\t\t// optionally\n\t\t\t// , button: IButton - buttons inside the collection container\n\t\t\t// , split: ISplit - splits inside the collection container\n\t\t},\n\t\tbutton: {\n\t\t\ttag: 'button',\n\t\t\tclassName: 'dt-button',\n\t\t\tactive: 'dt-button-active', // class name\n\t\t\tdisabled: 'disabled', // class name\n\t\t\tspacer: {\n\t\t\t\tclassName: 'dt-button-spacer',\n\t\t\t\ttag: 'span'\n\t\t\t},\n\t\t\tliner: {\n\t\t\t\ttag: 'span',\n\t\t\t\tclassName: ''\n\t\t\t}\n\t\t},\n\t\tsplit: {\n\t\t\taction: {\n\t\t\t\t// action button\n\t\t\t\tclassName: 'dt-button-split-drop-button dt-button',\n\t\t\t\ttag: 'button'\n\t\t\t},\n\t\t\tdropdown: {\n\t\t\t\t// button to trigger the dropdown\n\t\t\t\talign: 'split-right',\n\t\t\t\tclassName: 'dt-button-split-drop',\n\t\t\t\tdropHtml: '<span class=\"dt-button-down-arrow\">&#x25BC;</span>',\n\t\t\t\tsplitAlignClass: 'dt-button-split-left',\n\t\t\t\ttag: 'button'\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\t// wrap around both\n\t\t\t\tclassName: 'dt-button-split',\n\t\t\t\ttag: 'div'\n\t\t\t}\n\t\t}\n\t}\n};\n\n/**\n * Version information\n * @type {string}\n * @static\n */\nButtons.version = '2.4.2';\n\n$.extend(_dtButtons, {\n\tcollection: {\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.collection', 'Collection');\n\t\t},\n\t\tclassName: 'buttons-collection',\n\t\tcloseButton: false,\n\t\tinit: function (dt, button, config) {\n\t\t\tbutton.attr('aria-expanded', false);\n\t\t},\n\t\taction: function (e, dt, button, config) {\n\t\t\tif (config._collection.parents('body').length) {\n\t\t\t\tthis.popover(false, config);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.popover(config._collection, config);\n\t\t\t}\n\n\t\t\t// When activated using a key - auto focus on the\n\t\t\t// first item in the popover\n\t\t\tif (e.type === 'keypress') {\n\t\t\t\t$('a, button', config._collection).eq(0).focus();\n\t\t\t}\n\t\t},\n\t\tattr: {\n\t\t\t'aria-haspopup': 'dialog'\n\t\t}\n\t\t// Also the popover options, defined in Buttons.popover\n\t},\n\tsplit: {\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.split', 'Split');\n\t\t},\n\t\tclassName: 'buttons-split',\n\t\tcloseButton: false,\n\t\tinit: function (dt, button, config) {\n\t\t\treturn button.attr('aria-expanded', false);\n\t\t},\n\t\taction: function (e, dt, button, config) {\n\t\t\tthis.popover(config._collection, config);\n\t\t},\n\t\tattr: {\n\t\t\t'aria-haspopup': 'dialog'\n\t\t}\n\t\t// Also the popover options, defined in Buttons.popover\n\t},\n\tcopy: function (dt, conf) {\n\t\tif (_dtButtons.copyHtml5) {\n\t\t\treturn 'copyHtml5';\n\t\t}\n\t},\n\tcsv: function (dt, conf) {\n\t\tif (_dtButtons.csvHtml5 && _dtButtons.csvHtml5.available(dt, conf)) {\n\t\t\treturn 'csvHtml5';\n\t\t}\n\t},\n\texcel: function (dt, conf) {\n\t\tif (_dtButtons.excelHtml5 && _dtButtons.excelHtml5.available(dt, conf)) {\n\t\t\treturn 'excelHtml5';\n\t\t}\n\t},\n\tpdf: function (dt, conf) {\n\t\tif (_dtButtons.pdfHtml5 && _dtButtons.pdfHtml5.available(dt, conf)) {\n\t\t\treturn 'pdfHtml5';\n\t\t}\n\t},\n\tpageLength: function (dt) {\n\t\tvar lengthMenu = dt.settings()[0].aLengthMenu;\n\t\tvar vals = [];\n\t\tvar lang = [];\n\t\tvar text = function (dt) {\n\t\t\treturn dt.i18n(\n\t\t\t\t'buttons.pageLength',\n\t\t\t\t{\n\t\t\t\t\t'-1': 'Show all rows',\n\t\t\t\t\t_: 'Show %d rows'\n\t\t\t\t},\n\t\t\t\tdt.page.len()\n\t\t\t);\n\t\t};\n\n\t\t// Support for DataTables 1.x 2D array\n\t\tif (Array.isArray(lengthMenu[0])) {\n\t\t\tvals = lengthMenu[0];\n\t\t\tlang = lengthMenu[1];\n\t\t}\n\t\telse {\n\t\t\tfor (var i = 0; i < lengthMenu.length; i++) {\n\t\t\t\tvar option = lengthMenu[i];\n\n\t\t\t\t// Support for DataTables 2 object in the array\n\t\t\t\tif ($.isPlainObject(option)) {\n\t\t\t\t\tvals.push(option.value);\n\t\t\t\t\tlang.push(option.label);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvals.push(option);\n\t\t\t\t\tlang.push(option);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\textend: 'collection',\n\t\t\ttext: text,\n\t\t\tclassName: 'buttons-page-length',\n\t\t\tautoClose: true,\n\t\t\tbuttons: $.map(vals, function (val, i) {\n\t\t\t\treturn {\n\t\t\t\t\ttext: lang[i],\n\t\t\t\t\tclassName: 'button-page-length',\n\t\t\t\t\taction: function (e, dt) {\n\t\t\t\t\t\tdt.page.len(val).draw();\n\t\t\t\t\t},\n\t\t\t\t\tinit: function (dt, node, conf) {\n\t\t\t\t\t\tvar that = this;\n\t\t\t\t\t\tvar fn = function () {\n\t\t\t\t\t\t\tthat.active(dt.page.len() === val);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdt.on('length.dt' + conf.namespace, fn);\n\t\t\t\t\t\tfn();\n\t\t\t\t\t},\n\t\t\t\t\tdestroy: function (dt, node, conf) {\n\t\t\t\t\t\tdt.off('length.dt' + conf.namespace);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}),\n\t\t\tinit: function (dt, node, conf) {\n\t\t\t\tvar that = this;\n\t\t\t\tdt.on('length.dt' + conf.namespace, function () {\n\t\t\t\t\tthat.text(conf.text);\n\t\t\t\t});\n\t\t\t},\n\t\t\tdestroy: function (dt, node, conf) {\n\t\t\t\tdt.off('length.dt' + conf.namespace);\n\t\t\t}\n\t\t};\n\t},\n\tspacer: {\n\t\tstyle: 'empty',\n\t\tspacer: true,\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.spacer', '');\n\t\t}\n\t}\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables API\n *\n * For complete documentation, please refer to the docs/api directory or the\n * DataTables site\n */\n\n// Buttons group and individual button selector\nDataTable.Api.register('buttons()', function (group, selector) {\n\t// Argument shifting\n\tif (selector === undefined) {\n\t\tselector = group;\n\t\tgroup = undefined;\n\t}\n\n\tthis.selector.buttonGroup = group;\n\n\tvar res = this.iterator(\n\t\ttrue,\n\t\t'table',\n\t\tfunction (ctx) {\n\t\t\tif (ctx._buttons) {\n\t\t\t\treturn Buttons.buttonSelector(\n\t\t\t\t\tButtons.instanceSelector(group, ctx._buttons),\n\t\t\t\t\tselector\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\ttrue\n\t);\n\n\tres._groupSelector = group;\n\treturn res;\n});\n\n// Individual button selector\nDataTable.Api.register('button()', function (group, selector) {\n\t// just run buttons() and truncate\n\tvar buttons = this.buttons(group, selector);\n\n\tif (buttons.length > 1) {\n\t\tbuttons.splice(1, buttons.length);\n\t}\n\n\treturn buttons;\n});\n\n// Active buttons\nDataTable.Api.registerPlural('buttons().active()', 'button().active()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.active(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.active(set.node, flag);\n\t});\n});\n\n// Get / set button action\nDataTable.Api.registerPlural('buttons().action()', 'button().action()', function (action) {\n\tif (action === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.action(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.action(set.node, action);\n\t});\n});\n\n// Collection control\nDataTable.Api.registerPlural(\n\t'buttons().collectionRebuild()',\n\t'button().collectionRebuild()',\n\tfunction (buttons) {\n\t\treturn this.each(function (set) {\n\t\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\t\tif (typeof buttons[i] === 'object') {\n\t\t\t\t\tbuttons[i].parentConf = set;\n\t\t\t\t}\n\t\t\t}\n\t\t\tset.inst.collectionRebuild(set.node, buttons);\n\t\t});\n\t}\n);\n\n// Enable / disable buttons\nDataTable.Api.register(['buttons().enable()', 'button().enable()'], function (flag) {\n\treturn this.each(function (set) {\n\t\tset.inst.enable(set.node, flag);\n\t});\n});\n\n// Disable buttons\nDataTable.Api.register(['buttons().disable()', 'button().disable()'], function () {\n\treturn this.each(function (set) {\n\t\tset.inst.disable(set.node);\n\t});\n});\n\n// Button index\nDataTable.Api.register('button().index()', function () {\n\tvar idx = null;\n\n\tthis.each(function (set) {\n\t\tvar res = set.inst.index(set.node);\n\n\t\tif (res !== null) {\n\t\t\tidx = res;\n\t\t}\n\t});\n\n\treturn idx;\n});\n\n// Get button nodes\nDataTable.Api.registerPlural('buttons().nodes()', 'button().node()', function () {\n\tvar jq = $();\n\n\t// jQuery will automatically reduce duplicates to a single entry\n\t$(\n\t\tthis.each(function (set) {\n\t\t\tjq = jq.add(set.inst.node(set.node));\n\t\t})\n\t);\n\n\treturn jq;\n});\n\n// Get / set button processing state\nDataTable.Api.registerPlural('buttons().processing()', 'button().processing()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.processing(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.processing(set.node, flag);\n\t});\n});\n\n// Get / set button text (i.e. the button labels)\nDataTable.Api.registerPlural('buttons().text()', 'button().text()', function (label) {\n\tif (label === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.text(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.text(set.node, label);\n\t});\n});\n\n// Trigger a button's action\nDataTable.Api.registerPlural('buttons().trigger()', 'button().trigger()', function () {\n\treturn this.each(function (set) {\n\t\tset.inst.node(set.node).trigger('click');\n\t});\n});\n\n// Button resolver to the popover\nDataTable.Api.register('button().popover()', function (content, options) {\n\treturn this.map(function (set) {\n\t\treturn set.inst._popover(content, this.button(this[0].node), options);\n\t});\n});\n\n// Get the container elements\nDataTable.Api.register('buttons().containers()', function () {\n\tvar jq = $();\n\tvar groupSelector = this._groupSelector;\n\n\t// We need to use the group selector directly, since if there are no buttons\n\t// the result set will be empty\n\tthis.iterator(true, 'table', function (ctx) {\n\t\tif (ctx._buttons) {\n\t\t\tvar insts = Buttons.instanceSelector(groupSelector, ctx._buttons);\n\n\t\t\tfor (var i = 0, ien = insts.length; i < ien; i++) {\n\t\t\t\tjq = jq.add(insts[i].container());\n\t\t\t}\n\t\t}\n\t});\n\n\treturn jq;\n});\n\nDataTable.Api.register('buttons().container()', function () {\n\t// API level of nesting is `buttons()` so we can zip into the containers method\n\treturn this.containers().eq(0);\n});\n\n// Add a new button\nDataTable.Api.register('button().add()', function (idx, conf, draw) {\n\tvar ctx = this.context;\n\n\t// Don't use `this` as it could be empty - select the instances directly\n\tif (ctx.length) {\n\t\tvar inst = Buttons.instanceSelector(this._groupSelector, ctx[0]._buttons);\n\n\t\tif (inst.length) {\n\t\t\tinst[0].add(conf, idx, draw);\n\t\t}\n\t}\n\n\treturn this.button(this._groupSelector, idx);\n});\n\n// Destroy the button sets selected\nDataTable.Api.register('buttons().destroy()', function () {\n\tthis.pluck('inst')\n\t\t.unique()\n\t\t.each(function (inst) {\n\t\t\tinst.destroy();\n\t\t});\n\n\treturn this;\n});\n\n// Remove a button\nDataTable.Api.registerPlural('buttons().remove()', 'buttons().remove()', function () {\n\tthis.each(function (set) {\n\t\tset.inst.remove(set.node);\n\t});\n\n\treturn this;\n});\n\n// Information box that can be used by buttons\nvar _infoTimer;\nDataTable.Api.register('buttons.info()', function (title, message, time) {\n\tvar that = this;\n\n\tif (title === false) {\n\t\tthis.off('destroy.btn-info');\n\t\t_fadeOut($('#datatables_buttons_info'), 400, function () {\n\t\t\t$(this).remove();\n\t\t});\n\t\tclearTimeout(_infoTimer);\n\t\t_infoTimer = null;\n\n\t\treturn this;\n\t}\n\n\tif (_infoTimer) {\n\t\tclearTimeout(_infoTimer);\n\t}\n\n\tif ($('#datatables_buttons_info').length) {\n\t\t$('#datatables_buttons_info').remove();\n\t}\n\n\ttitle = title ? '<h2>' + title + '</h2>' : '';\n\n\t_fadeIn(\n\t\t$('<div id=\"datatables_buttons_info\" class=\"dt-button-info\"/>')\n\t\t\t.html(title)\n\t\t\t.append($('<div/>')[typeof message === 'string' ? 'html' : 'append'](message))\n\t\t\t.css('display', 'none')\n\t\t\t.appendTo('body')\n\t);\n\n\tif (time !== undefined && time !== 0) {\n\t\t_infoTimer = setTimeout(function () {\n\t\t\tthat.buttons.info(false);\n\t\t}, time);\n\t}\n\n\tthis.on('destroy.btn-info', function () {\n\t\tthat.buttons.info(false);\n\t});\n\n\treturn this;\n});\n\n// Get data from the table for export - this is common to a number of plug-in\n// buttons so it is included in the Buttons core library\nDataTable.Api.register('buttons.exportData()', function (options) {\n\tif (this.context.length) {\n\t\treturn _exportData(new DataTable.Api(this.context[0]), options);\n\t}\n});\n\n// Get information about the export that is common to many of the export data\n// types (DRY)\nDataTable.Api.register('buttons.exportInfo()', function (conf) {\n\tif (!conf) {\n\t\tconf = {};\n\t}\n\n\treturn {\n\t\tfilename: _filename(conf),\n\t\ttitle: _title(conf),\n\t\tmessageTop: _message(this, conf.message || conf.messageTop, 'top'),\n\t\tmessageBottom: _message(this, conf.messageBottom, 'bottom')\n\t};\n});\n\n/**\n * Get the file name for an exported file.\n *\n * @param {object}\tconfig Button configuration\n * @param {boolean} incExtension Include the file name extension\n */\nvar _filename = function (config) {\n\t// Backwards compatibility\n\tvar filename =\n\t\tconfig.filename === '*' &&\n\t\tconfig.title !== '*' &&\n\t\tconfig.title !== undefined &&\n\t\tconfig.title !== null &&\n\t\tconfig.title !== ''\n\t\t\t? config.title\n\t\t\t: config.filename;\n\n\tif (typeof filename === 'function') {\n\t\tfilename = filename();\n\t}\n\n\tif (filename === undefined || filename === null) {\n\t\treturn null;\n\t}\n\n\tif (filename.indexOf('*') !== -1) {\n\t\tfilename = filename.replace('*', $('head > title').text()).trim();\n\t}\n\n\t// Strip characters which the OS will object to\n\tfilename = filename.replace(/[^a-zA-Z0-9_\\u00A1-\\uFFFF\\.,\\-_ !\\(\\)]/g, '');\n\n\tvar extension = _stringOrFunction(config.extension);\n\tif (!extension) {\n\t\textension = '';\n\t}\n\n\treturn filename + extension;\n};\n\n/**\n * Simply utility method to allow parameters to be given as a function\n *\n * @param {undefined|string|function} option Option\n * @return {null|string} Resolved value\n */\nvar _stringOrFunction = function (option) {\n\tif (option === null || option === undefined) {\n\t\treturn null;\n\t}\n\telse if (typeof option === 'function') {\n\t\treturn option();\n\t}\n\treturn option;\n};\n\n/**\n * Get the title for an exported file.\n *\n * @param {object} config\tButton configuration\n */\nvar _title = function (config) {\n\tvar title = _stringOrFunction(config.title);\n\n\treturn title === null\n\t\t? null\n\t\t: title.indexOf('*') !== -1\n\t\t? title.replace('*', $('head > title').text() || 'Exported data')\n\t\t: title;\n};\n\nvar _message = function (dt, option, position) {\n\tvar message = _stringOrFunction(option);\n\tif (message === null) {\n\t\treturn null;\n\t}\n\n\tvar caption = $('caption', dt.table().container()).eq(0);\n\tif (message === '*') {\n\t\tvar side = caption.css('caption-side');\n\t\tif (side !== position) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn caption.length ? caption.text() : '';\n\t}\n\n\treturn message;\n};\n\nvar _exportTextarea = $('<textarea/>')[0];\nvar _exportData = function (dt, inOpts) {\n\tvar config = $.extend(\n\t\ttrue,\n\t\t{},\n\t\t{\n\t\t\trows: null,\n\t\t\tcolumns: '',\n\t\t\tmodifier: {\n\t\t\t\tsearch: 'applied',\n\t\t\t\torder: 'applied'\n\t\t\t},\n\t\t\torthogonal: 'display',\n\t\t\tstripHtml: true,\n\t\t\tstripNewlines: true,\n\t\t\tdecodeEntities: true,\n\t\t\ttrim: true,\n\t\t\tformat: {\n\t\t\t\theader: function (d) {\n\t\t\t\t\treturn Buttons.stripData(d, config);\n\t\t\t\t},\n\t\t\t\tfooter: function (d) {\n\t\t\t\t\treturn Buttons.stripData(d, config);\n\t\t\t\t},\n\t\t\t\tbody: function (d) {\n\t\t\t\t\treturn Buttons.stripData(d, config);\n\t\t\t\t}\n\t\t\t},\n\t\t\tcustomizeData: null\n\t\t},\n\t\tinOpts\n\t);\n\n\tvar header = dt\n\t\t.columns(config.columns)\n\t\t.indexes()\n\t\t.map(function (idx) {\n\t\t\tvar el = dt.column(idx).header();\n\t\t\treturn config.format.header(el.innerHTML, idx, el);\n\t\t})\n\t\t.toArray();\n\n\tvar footer = dt.table().footer()\n\t\t? dt\n\t\t\t\t.columns(config.columns)\n\t\t\t\t.indexes()\n\t\t\t\t.map(function (idx) {\n\t\t\t\t\tvar el = dt.column(idx).footer();\n\t\t\t\t\treturn config.format.footer(el ? el.innerHTML : '', idx, el);\n\t\t\t\t})\n\t\t\t\t.toArray()\n\t\t: null;\n\n\t// If Select is available on this table, and any rows are selected, limit the export\n\t// to the selected rows. If no rows are selected, all rows will be exported. Specify\n\t// a `selected` modifier to control directly.\n\tvar modifier = $.extend({}, config.modifier);\n\tif (dt.select && typeof dt.select.info === 'function' && modifier.selected === undefined) {\n\t\tif (dt.rows(config.rows, $.extend({ selected: true }, modifier)).any()) {\n\t\t\t$.extend(modifier, { selected: true });\n\t\t}\n\t}\n\n\tvar rowIndexes = dt.rows(config.rows, modifier).indexes().toArray();\n\tvar selectedCells = dt.cells(rowIndexes, config.columns);\n\tvar cells = selectedCells.render(config.orthogonal).toArray();\n\tvar cellNodes = selectedCells.nodes().toArray();\n\n\tvar columns = header.length;\n\tvar rows = columns > 0 ? cells.length / columns : 0;\n\tvar body = [];\n\tvar cellCounter = 0;\n\n\tfor (var i = 0, ien = rows; i < ien; i++) {\n\t\tvar row = [columns];\n\n\t\tfor (var j = 0; j < columns; j++) {\n\t\t\trow[j] = config.format.body(cells[cellCounter], i, j, cellNodes[cellCounter]);\n\t\t\tcellCounter++;\n\t\t}\n\n\t\tbody[i] = row;\n\t}\n\n\tvar data = {\n\t\theader: header,\n\t\tfooter: footer,\n\t\tbody: body\n\t};\n\n\tif (config.customizeData) {\n\t\tconfig.customizeData(data);\n\t}\n\n\treturn data;\n};\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables interface\n */\n\n// Attach to DataTables objects for global access\n$.fn.dataTable.Buttons = Buttons;\n$.fn.DataTable.Buttons = Buttons;\n\n// DataTables creation - check if the buttons have been defined for this table,\n// they will have been if the `B` option was used in `dom`, otherwise we should\n// create the buttons instance here so they can be inserted into the document\n// using the API. Listen for `init` for compatibility with pre 1.10.10, but to\n// be removed in future.\n$(document).on('init.dt plugin-init.dt', function (e, settings) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar opts = settings.oInit.buttons || DataTable.defaults.buttons;\n\n\tif (opts && !settings._buttons) {\n\t\tnew Buttons(settings, opts).container();\n\t}\n});\n\nfunction _init(settings, options) {\n\tvar api = new DataTable.Api(settings);\n\tvar opts = options ? options : api.init().buttons || DataTable.defaults.buttons;\n\n\treturn new Buttons(api, opts).container();\n}\n\n// DataTables `dom` feature option\nDataTable.ext.feature.push({\n\tfnInit: _init,\n\tcFeature: 'B'\n});\n\n// DataTables 2 layout feature\nif (DataTable.ext.features) {\n\tDataTable.ext.features.register('buttons', _init);\n}\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/css/colReorder.bootstrap.css",
    "content": "table.DTCR_clonedTable.dataTable {\n  position: absolute !important;\n  background-color: rgba(255, 255, 255, 0.7);\n  z-index: 202;\n  border-radius: 4px;\n}\n\ndiv.DTCR_pointer {\n  width: 1px;\n  background-color: #337ab7;\n  z-index: 201;\n}\n\nhtml.dark table.DTCR_clonedTable.dataTable {\n  background-color: rgba(33, 33, 33, 0.9);\n}\nhtml.dark div.DTCR_pointer {\n  background-color: rgb(110, 168, 254);\n}\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/css/colReorder.bootstrap4.css",
    "content": "table.DTCR_clonedTable.dataTable {\n  position: absolute !important;\n  background-color: rgba(255, 255, 255, 0.7);\n  z-index: 202;\n  border-radius: 4px;\n}\n\ndiv.DTCR_pointer {\n  width: 1px;\n  background-color: #0275d8;\n  z-index: 201;\n}\n\nhtml.dark table.DTCR_clonedTable.dataTable {\n  background-color: rgba(33, 33, 33, 0.9);\n}\nhtml.dark div.DTCR_pointer {\n  background-color: rgb(110, 168, 254);\n}\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/css/colReorder.bootstrap5.css",
    "content": "table.DTCR_clonedTable.dataTable {\n  position: absolute !important;\n  background-color: rgba(255, 255, 255, 0.7);\n  z-index: 202;\n  border-radius: 4px;\n}\n\ndiv.DTCR_pointer {\n  width: 1px;\n  background-color: #0d6efd;\n  z-index: 201;\n}\n\nhtml.dark table.DTCR_clonedTable.dataTable {\n  background-color: rgba(33, 33, 33, 0.9);\n}\nhtml.dark div.DTCR_pointer {\n  background-color: rgb(13, 110, 253);\n}\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/css/colReorder.bulma.css",
    "content": "table.DTCR_clonedTable.dataTable {\n  position: absolute !important;\n  background-color: rgba(255, 255, 255, 0.7);\n  z-index: 202;\n  border-radius: 4px;\n}\n\ndiv.DTCR_pointer {\n  width: 1px;\n  background-color: #00D1B2;\n  z-index: 201;\n}\n\nhtml.dark table.DTCR_clonedTable.dataTable {\n  background-color: rgba(33, 33, 33, 0.9);\n}\nhtml.dark div.DTCR_pointer {\n  background-color: rgb(110, 168, 254);\n}\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/css/colReorder.dataTables.css",
    "content": "table.DTCR_clonedTable.dataTable {\n  position: absolute !important;\n  background-color: rgba(255, 255, 255, 0.7);\n  z-index: 202;\n  border-radius: 4px;\n}\n\ndiv.DTCR_pointer {\n  width: 1px;\n  background-color: #0259C4;\n  z-index: 201;\n}\n\nhtml.dark table.DTCR_clonedTable.dataTable {\n  background-color: rgba(33, 33, 33, 0.9);\n}\nhtml.dark div.DTCR_pointer {\n  background-color: rgb(110, 168, 254);\n}\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/css/colReorder.foundation.css",
    "content": "table.DTCR_clonedTable.dataTable {\n  position: absolute !important;\n  background-color: rgba(255, 255, 255, 0.7);\n  z-index: 202;\n  border-radius: 4px;\n}\n\ndiv.DTCR_pointer {\n  width: 1px;\n  background-color: #008CBA;\n  z-index: 201;\n}\n\nhtml.dark table.DTCR_clonedTable.dataTable {\n  background-color: rgba(33, 33, 33, 0.9);\n}\nhtml.dark div.DTCR_pointer {\n  background-color: rgb(110, 168, 254);\n}\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/css/colReorder.jqueryui.css",
    "content": "table.DTCR_clonedTable.dataTable {\n  position: absolute !important;\n  background-color: rgba(255, 255, 255, 0.7);\n  z-index: 202;\n  border-radius: 4px;\n}\n\ndiv.DTCR_pointer {\n  width: 1px;\n  background-color: #0259C4;\n  z-index: 201;\n}\n\nhtml.dark table.DTCR_clonedTable.dataTable {\n  background-color: rgba(33, 33, 33, 0.9);\n}\nhtml.dark div.DTCR_pointer {\n  background-color: rgb(110, 168, 254);\n}\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/css/colReorder.semanticui.css",
    "content": "table.DTCR_clonedTable.dataTable {\n  position: absolute !important;\n  background-color: rgba(255, 255, 255, 0.7);\n  z-index: 202;\n  border-radius: 4px;\n}\n\ndiv.DTCR_pointer {\n  width: 1px;\n  background-color: #888;\n  z-index: 201;\n}\n\nhtml.dark table.DTCR_clonedTable.dataTable {\n  background-color: rgba(33, 33, 33, 0.9);\n}\nhtml.dark div.DTCR_pointer {\n  background-color: rgb(110, 168, 254);\n}\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/js/colReorder.bootstrap.js",
    "content": "/*! Bootstrap 3 styling wrapper for ColReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-colreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.ColReorder ) {\n\t\t\t\trequire('datatables.net-colreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/js/colReorder.bootstrap4.js",
    "content": "/*! Bootstrap 4 styling wrapper for ColReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-colreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.ColReorder ) {\n\t\t\t\trequire('datatables.net-colreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/js/colReorder.bootstrap5.js",
    "content": "/*! Bootstrap 5 styling wrapper for ColReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-colreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.ColReorder ) {\n\t\t\t\trequire('datatables.net-colreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/js/colReorder.bulma.js",
    "content": "/*! Bulma styling wrapper for ColReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-colreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.ColReorder ) {\n\t\t\t\trequire('datatables.net-colreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/js/colReorder.dataTables.js",
    "content": "/*! DataTables styling wrapper for ColReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-colreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.ColReorder ) {\n\t\t\t\trequire('datatables.net-colreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/js/colReorder.foundation.js",
    "content": "/*! Foundation styling wrapper for ColReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-colreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.ColReorder ) {\n\t\t\t\trequire('datatables.net-colreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/js/colReorder.jqueryui.js",
    "content": "/*! jQuery UI styling wrapper for ColReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-colreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.ColReorder ) {\n\t\t\t\trequire('datatables.net-colreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/js/colReorder.semanticui.js",
    "content": "/*! Semanic UI styling wrapper for ColReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-colreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.ColReorder ) {\n\t\t\t\trequire('datatables.net-colreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/ColReorder-1.7.0/js/dataTables.colReorder.js",
    "content": "/*! ColReorder 1.7.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     ColReorder\n * @description Provide the ability to reorder columns in a DataTable\n * @version     1.7.0\n * @author      SpryMedia Ltd\n * @contact     datatables.net\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/**\n * Switch the key value pairing of an index array to be value key (i.e. the old value is now the\n * key). For example consider [ 2, 0, 1 ] this would be returned as [ 1, 2, 0 ].\n *  @method  fnInvertKeyValues\n *  @param   array aIn Array to switch around\n *  @returns array\n */\nfunction fnInvertKeyValues( aIn )\n{\n\tvar aRet=[];\n\tfor ( var i=0, iLen=aIn.length ; i<iLen ; i++ )\n\t{\n\t\taRet[ aIn[i] ] = i;\n\t}\n\treturn aRet;\n}\n\n\n/**\n * Modify an array by switching the position of two elements\n *  @method  fnArraySwitch\n *  @param   array aArray Array to consider, will be modified by reference (i.e. no return)\n *  @param   int iFrom From point\n *  @param   int iTo Insert point\n *  @returns void\n */\nfunction fnArraySwitch( aArray, iFrom, iTo )\n{\n\tvar mStore = aArray.splice( iFrom, 1 )[0];\n\taArray.splice( iTo, 0, mStore );\n}\n\n\n/**\n * Switch the positions of nodes in a parent node (note this is specifically designed for\n * table rows). Note this function considers all element nodes under the parent!\n *  @method  fnDomSwitch\n *  @param   string sTag Tag to consider\n *  @param   int iFrom Element to move\n *  @param   int Point to element the element to (before this point), can be null for append\n *  @returns void\n */\nfunction fnDomSwitch( nParent, iFrom, iTo )\n{\n\tvar anTags = [];\n\tfor ( var i=0, iLen=nParent.childNodes.length ; i<iLen ; i++ )\n\t{\n\t\tif ( nParent.childNodes[i].nodeType == 1 )\n\t\t{\n\t\t\tanTags.push( nParent.childNodes[i] );\n\t\t}\n\t}\n\tvar nStore = anTags[ iFrom ];\n\n\tif ( iTo !== null )\n\t{\n\t\tnParent.insertBefore( nStore, anTags[iTo] );\n\t}\n\telse\n\t{\n\t\tnParent.appendChild( nStore );\n\t}\n}\n\n\n/**\n * Plug-in for DataTables which will reorder the internal column structure by taking the column\n * from one position (iFrom) and insert it into a given point (iTo).\n *  @method  $.fn.dataTableExt.oApi.fnColReorder\n *  @param   object oSettings DataTables settings object - automatically added by DataTables!\n *  @param   int iFrom Take the column to be repositioned from this point\n *  @param   int iTo and insert it into this point\n *  @param   bool drop Indicate if the reorder is the final one (i.e. a drop)\n *    not a live reorder\n *  @param   bool invalidateRows speeds up processing if false passed\n *  @returns void\n */\n$.fn.dataTableExt.oApi.fnColReorder = function ( oSettings, iFrom, iTo, drop, invalidateRows )\n{\n\tvar i, iLen, j, jLen, jen, iCols=oSettings.aoColumns.length, nTrs, oCol;\n\tvar attrMap = function ( obj, prop, mapping ) {\n\t\tif ( ! obj[ prop ] || typeof obj[ prop ] === 'function' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar a = obj[ prop ].split('.');\n\t\tvar num = a.shift();\n\n\t\tif ( isNaN( num*1 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tobj[ prop ] = mapping[ num*1 ]+'.'+a.join('.');\n\t};\n\n\t/* Sanity check in the input */\n\tif ( iFrom == iTo )\n\t{\n\t\t/* Pointless reorder */\n\t\treturn;\n\t}\n\n\tif ( iFrom < 0 || iFrom >= iCols )\n\t{\n\t\tthis.oApi._fnLog( oSettings, 1, \"ColReorder 'from' index is out of bounds: \"+iFrom );\n\t\treturn;\n\t}\n\n\tif ( iTo < 0 || iTo >= iCols )\n\t{\n\t\tthis.oApi._fnLog( oSettings, 1, \"ColReorder 'to' index is out of bounds: \"+iTo );\n\t\treturn;\n\t}\n\n\t/*\n\t * Calculate the new column array index, so we have a mapping between the old and new\n\t */\n\tvar aiMapping = [];\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ )\n\t{\n\t\taiMapping[i] = i;\n\t}\n\tfnArraySwitch( aiMapping, iFrom, iTo );\n\tvar aiInvertMapping = fnInvertKeyValues( aiMapping );\n\n\n\t/*\n\t * Convert all internal indexing to the new column order indexes\n\t */\n\t/* Sorting */\n\tfor ( i=0, iLen=oSettings.aaSorting.length ; i<iLen ; i++ )\n\t{\n\t\toSettings.aaSorting[i][0] = aiInvertMapping[ oSettings.aaSorting[i][0] ];\n\t}\n\n\t/* Fixed sorting */\n\tif ( oSettings.aaSortingFixed !== null )\n\t{\n\t\tfor ( i=0, iLen=oSettings.aaSortingFixed.length ; i<iLen ; i++ )\n\t\t{\n\t\t\toSettings.aaSortingFixed[i][0] = aiInvertMapping[ oSettings.aaSortingFixed[i][0] ];\n\t\t}\n\t}\n\n\t/* Data column sorting (the column which the sort for a given column should take place on) */\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ )\n\t{\n\t\toCol = oSettings.aoColumns[i];\n\t\tfor ( j=0, jLen=oCol.aDataSort.length ; j<jLen ; j++ )\n\t\t{\n\t\t\toCol.aDataSort[j] = aiInvertMapping[ oCol.aDataSort[j] ];\n\t\t}\n\n\t\t// Update the column indexes\n\t\toCol.idx = aiInvertMapping[ oCol.idx ];\n\t}\n\n\t// Update 1.10 optimised sort class removal variable\n\t$.each( oSettings.aLastSort, function (i, val) {\n\t\toSettings.aLastSort[i].src = aiInvertMapping[ val.src ];\n\t} );\n\n\t/* Update the Get and Set functions for each column */\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ )\n\t{\n\t\toCol = oSettings.aoColumns[i];\n\n\t\tif ( typeof oCol.mData == 'number' ) {\n\t\t\toCol.mData = aiInvertMapping[ oCol.mData ];\n\t\t}\n\t\telse if ( $.isPlainObject( oCol.mData ) ) {\n\t\t\t// HTML5 data sourced\n\t\t\tattrMap( oCol.mData, '_',      aiInvertMapping );\n\t\t\tattrMap( oCol.mData, 'filter', aiInvertMapping );\n\t\t\tattrMap( oCol.mData, 'sort',   aiInvertMapping );\n\t\t\tattrMap( oCol.mData, 'type',   aiInvertMapping );\n\t\t}\n\t}\n\n\t/*\n\t * Move the DOM elements\n\t */\n\tif ( oSettings.aoColumns[iFrom].bVisible )\n\t{\n\t\t/* Calculate the current visible index and the point to insert the node before. The insert\n\t\t * before needs to take into account that there might not be an element to insert before,\n\t\t * in which case it will be null, and an appendChild should be used\n\t\t */\n\t\tvar iVisibleIndex = this.oApi._fnColumnIndexToVisible( oSettings, iFrom );\n\t\tvar iInsertBeforeIndex = null;\n\n\t\ti = iTo < iFrom ? iTo : iTo + 1;\n\t\twhile ( iInsertBeforeIndex === null && i < iCols )\n\t\t{\n\t\t\tiInsertBeforeIndex = this.oApi._fnColumnIndexToVisible( oSettings, i );\n\t\t\ti++;\n\t\t}\n\n\t\t/* Header */\n\t\tnTrs = oSettings.nTHead.getElementsByTagName('tr');\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfnDomSwitch( nTrs[i], iVisibleIndex, iInsertBeforeIndex );\n\t\t}\n\n\t\t/* Footer */\n\t\tif ( oSettings.nTFoot !== null )\n\t\t{\n\t\t\tnTrs = oSettings.nTFoot.getElementsByTagName('tr');\n\t\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tfnDomSwitch( nTrs[i], iVisibleIndex, iInsertBeforeIndex );\n\t\t\t}\n\t\t}\n\n\t\t/* Body */\n\t\tfor ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( oSettings.aoData[i].nTr !== null )\n\t\t\t{\n\t\t\t\tfnDomSwitch( oSettings.aoData[i].nTr, iVisibleIndex, iInsertBeforeIndex );\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Move the internal array elements\n\t */\n\t/* Columns */\n\tfnArraySwitch( oSettings.aoColumns, iFrom, iTo );\n\n\t// regenerate the get / set functions\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ ) {\n\t\toSettings.oApi._fnColumnOptions( oSettings, i, {} );\n\t}\n\n\t/* Search columns */\n\tfnArraySwitch( oSettings.aoPreSearchCols, iFrom, iTo );\n\n\t/* Array array - internal data anodes cache */\n\tfor ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )\n\t{\n\t\tvar data = oSettings.aoData[i];\n\t\tvar cells = data.anCells;\n\n\t\tif ( cells ) {\n\t\t\tfnArraySwitch( cells, iFrom, iTo );\n\n\t\t\t// Longer term, should this be moved into the DataTables' invalidate\n\t\t\t// methods?\n\t\t\tfor ( j=0, jen=cells.length ; j<jen ; j++ ) {\n\t\t\t\tif ( cells[j] && cells[j]._DT_CellIndex ) {\n\t\t\t\t\tcells[j]._DT_CellIndex.column = j;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Swap around array sourced data (object based is left as is)\n\t\tif ( Array.isArray( data._aData ) ) {\n\t\t\tfnArraySwitch( data._aData, iFrom, iTo );\n\t\t}\n\t}\n\n\t/* Reposition the header elements in the header layout array */\n\tfor ( i=0, iLen=oSettings.aoHeader.length ; i<iLen ; i++ )\n\t{\n\t\tfnArraySwitch( oSettings.aoHeader[i], iFrom, iTo );\n\t}\n\n\tif ( oSettings.aoFooter !== null )\n\t{\n\t\tfor ( i=0, iLen=oSettings.aoFooter.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfnArraySwitch( oSettings.aoFooter[i], iFrom, iTo );\n\t\t}\n\t}\n\n\tif ( invalidateRows || invalidateRows === undefined )\n\t{\n\t\t// Always read from the data object rather than reading back from the DOM\n\t\t// since it could have been changed by a renderer\n\t\t$.fn.dataTable.Api( oSettings ).rows().invalidate('data');\n\t}\n\n\t/*\n\t * Update DataTables' event handlers\n\t */\n\n\t/* Sort listener */\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ )\n\t{\n\t\t$(oSettings.aoColumns[i].nTh).off('.DT');\n\t\tthis.oApi._fnSortAttachListener( oSettings, oSettings.aoColumns[i].nTh, i );\n\t}\n\n\n\t/* Fire an event so other plug-ins can update */\n\t$(oSettings.oInstance).trigger( 'column-reorder.dt', [ oSettings, {\n\t\tfrom: iFrom,\n\t\tto: iTo,\n\t\tmapping: aiInvertMapping,\n\t\tdrop: drop,\n\n\t\t// Old style parameters for compatibility\n\t\tiFrom: iFrom,\n\t\tiTo: iTo,\n\t\taiInvertMapping: aiInvertMapping\n\t} ] );\n};\n\n/**\n * ColReorder provides column visibility control for DataTables\n * @class ColReorder\n * @constructor\n * @param {object} dt DataTables settings object\n * @param {object} opts ColReorder options\n */\nvar ColReorder = function( dt, opts )\n{\n\tvar settings = new $.fn.dataTable.Api( dt ).settings()[0];\n\n\t// Ensure that we can't initialise on the same table twice\n\tif ( settings._colReorder ) {\n\t\treturn settings._colReorder;\n\t}\n\n\t// Allow the options to be a boolean for defaults\n\tif ( opts === true ) {\n\t\topts = {};\n\t}\n\n\t// Convert from camelCase to Hungarian, just as DataTables does\n\tvar camelToHungarian = $.fn.dataTable.camelToHungarian;\n\tif ( camelToHungarian ) {\n\t\tcamelToHungarian( ColReorder.defaults, ColReorder.defaults, true );\n\t\tcamelToHungarian( ColReorder.defaults, opts || {} );\n\t}\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public class variables\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * @namespace Settings object which contains customisable information for ColReorder instance\n\t */\n\tthis.s = {\n\t\t/**\n\t\t * DataTables settings object\n\t\t *  @property dt\n\t\t *  @type     Object\n\t\t *  @default  null\n\t\t */\n\t\t\"dt\": null,\n\n\t\t/**\n\t\t * Enable flag\n\t\t *  @property dt\n\t\t *  @type     Object\n\t\t *  @default  null\n\t\t */\n\t\t\"enable\": null,\n\n\t\t/**\n\t\t * Initialisation object used for this instance\n\t\t *  @property init\n\t\t *  @type     object\n\t\t *  @default  {}\n\t\t */\n\t\t\"init\": $.extend( true, {}, ColReorder.defaults, opts ),\n\n\t\t/**\n\t\t * Number of columns to fix (not allow to be reordered)\n\t\t *  @property fixed\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\t\"fixed\": 0,\n\n\t\t/**\n\t\t * Number of columns to fix counting from right (not allow to be reordered)\n\t\t *  @property fixedRight\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\t\"fixedRight\": 0,\n\n\t\t/**\n\t\t * Callback function for once the reorder has been done\n\t\t *  @property reorderCallback\n\t\t *  @type     function\n\t\t *  @default  null\n\t\t */\n\t\t\"reorderCallback\": null,\n\n\t\t/**\n\t\t * @namespace Information used for the mouse drag\n\t\t */\n\t\t\"mouse\": {\n\t\t\t\"startX\": -1,\n\t\t\t\"startY\": -1,\n\t\t\t\"offsetX\": -1,\n\t\t\t\"offsetY\": -1,\n\t\t\t\"target\": -1,\n\t\t\t\"targetIndex\": -1,\n\t\t\t\"fromIndex\": -1\n\t\t},\n\n\t\t/**\n\t\t * Information which is used for positioning the insert cusor and knowing where to do the\n\t\t * insert. Array of objects with the properties:\n\t\t *   x: x-axis position\n\t\t *   to: insert point\n\t\t *  @property aoTargets\n\t\t *  @type     array\n\t\t *  @default  []\n\t\t */\n\t\t\"aoTargets\": []\n\t};\n\n\n\t/**\n\t * @namespace Common and useful DOM elements for the class instance\n\t */\n\tthis.dom = {\n\t\t/**\n\t\t * Dragging element (the one the mouse is moving)\n\t\t *  @property drag\n\t\t *  @type     element\n\t\t *  @default  null\n\t\t */\n\t\t\"drag\": null,\n\n\t\t/**\n\t\t * The insert cursor\n\t\t *  @property pointer\n\t\t *  @type     element\n\t\t *  @default  null\n\t\t */\n\t\t\"pointer\": null\n\t};\n\n\t/* Constructor logic */\n\tthis.s.enable = this.s.init.bEnable;\n\tthis.s.dt = settings;\n\tthis.s.dt._colReorder = this;\n\tthis._fnConstruct();\n\n\treturn this;\n};\n\n\n\n$.extend( ColReorder.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Enable / disable end user interaction\n\t */\n\tfnEnable: function ( flag )\n\t{\n\t\tif ( flag === false ) {\n\t\t\treturn this.fnDisable();\n\t\t}\n\n\t\tthis.s.enable = true;\n\t},\n\n\t/**\n\t * Disable end user interaction\n\t */\n\tfnDisable: function ()\n\t{\n\t\tthis.s.enable = false;\n\t},\n\n\t/**\n\t * Reset the column ordering to the original ordering that was detected on\n\t * start up.\n\t *  @return {this} Returns `this` for chaining.\n\t *\n\t *  @example\n\t *    // DataTables initialisation with ColReorder\n\t *    var table = $('#example').dataTable( {\n\t *        \"sDom\": 'Rlfrtip'\n\t *    } );\n\t *\n\t *    // Add click event to a button to reset the ordering\n\t *    $('#resetOrdering').click( function (e) {\n\t *        e.preventDefault();\n\t *        $.fn.dataTable.ColReorder( table ).fnReset();\n\t *    } );\n\t */\n\t\"fnReset\": function ()\n\t{\n\t\tthis._fnOrderColumns( this.fnOrder() );\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * `Deprecated` - Get the current order of the columns, as an array.\n\t *  @return {array} Array of column identifiers\n\t *  @deprecated `fnOrder` should be used in preference to this method.\n\t *      `fnOrder` acts as a getter/setter.\n\t */\n\t\"fnGetCurrentOrder\": function ()\n\t{\n\t\treturn this.fnOrder();\n\t},\n\n\t/**\n\t * Get the current order of the columns, as an array. Note that the values\n\t * given in the array are unique identifiers for each column. Currently\n\t * these are the original ordering of the columns that was detected on\n\t * start up, but this could potentially change in future.\n\t *  @return {array} Array of column identifiers\n\t *\n\t *  @example\n\t *    // Get column ordering for the table\n\t *    var order = $.fn.dataTable.ColReorder( dataTable ).fnOrder();\n\t *//**\n\t * Set the order of the columns, from the positions identified in the\n\t * ordering array given. Note that ColReorder takes a brute force approach\n\t * to reordering, so it is possible multiple reordering events will occur\n\t * before the final order is settled upon.\n\t *  @param {array} [set] Array of column identifiers in the new order. Note\n\t *    that every column must be included, uniquely, in this array.\n\t *  @return {this} Returns `this` for chaining.\n\t *\n\t *  @example\n\t *    // Swap the first and second columns\n\t *    $.fn.dataTable.ColReorder( dataTable ).fnOrder( [1, 0, 2, 3, 4] );\n\t *\n\t *  @example\n\t *    // Move the first column to the end for the table `#example`\n\t *    var curr = $.fn.dataTable.ColReorder( '#example' ).fnOrder();\n\t *    var first = curr.shift();\n\t *    curr.push( first );\n\t *    $.fn.dataTable.ColReorder( '#example' ).fnOrder( curr );\n\t *\n\t *  @example\n\t *    // Reverse the table's order\n\t *    $.fn.dataTable.ColReorder( '#example' ).fnOrder(\n\t *      $.fn.dataTable.ColReorder( '#example' ).fnOrder().reverse()\n\t *    );\n\t */\n\t\"fnOrder\": function ( set, original )\n\t{\n\t\tvar a = [], i, ien, j, jen;\n\t\tvar columns = this.s.dt.aoColumns;\n\n\t\tif ( set === undefined ){\n\t\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\t\ta.push( columns[i]._ColReorder_iOrigCol );\n\t\t\t}\n\n\t\t\treturn a;\n\t\t}\n\n\t\t// The order given is based on the original indexes, rather than the\n\t\t// existing ones, so we need to translate from the original to current\n\t\t// before then doing the order\n\t\tif ( original ) {\n\t\t\tvar order = this.fnOrder();\n\n\t\t\tfor ( i=0, ien=set.length ; i<ien ; i++ ) {\n\t\t\t\ta.push( $.inArray( set[i], order ) );\n\t\t\t}\n\n\t\t\tset = a;\n\t\t}\n\n\t\tthis._fnOrderColumns( fnInvertKeyValues( set ) );\n\n\t\treturn this;\n\t},\n\n\n\t/**\n\t * Convert from the original column index, to the original\n\t *\n\t * @param  {int|array} idx Index(es) to convert\n\t * @param  {string} dir Transpose direction - `fromOriginal` / `toCurrent`\n\t *   or `'toOriginal` / `fromCurrent`\n\t * @return {int|array}     Converted values\n\t */\n\tfnTranspose: function ( idx, dir )\n\t{\n\t\tif ( ! dir ) {\n\t\t\tdir = 'toCurrent';\n\t\t}\n\n\t\tvar order = this.fnOrder();\n\t\tvar columns = this.s.dt.aoColumns;\n\n\t\tif ( dir === 'toCurrent' ) {\n\t\t\t// Given an original index, want the current\n\t\t\treturn ! Array.isArray( idx ) ?\n\t\t\t\t$.inArray( idx, order ) :\n\t\t\t\t$.map( idx, function ( index ) {\n\t\t\t\t\treturn $.inArray( index, order );\n\t\t\t\t} );\n\t\t}\n\t\telse {\n\t\t\t// Given a current index, want the original\n\t\t\treturn ! Array.isArray( idx ) ?\n\t\t\t\tcolumns[idx]._ColReorder_iOrigCol :\n\t\t\t\t$.map( idx, function ( index ) {\n\t\t\t\t\treturn columns[index]._ColReorder_iOrigCol;\n\t\t\t\t} );\n\t\t}\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods (they are of course public in JS, but recommended as private)\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Constructor logic\n\t *  @method  _fnConstruct\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnConstruct\": function ()\n\t{\n\t\tvar that = this;\n\t\tvar iLen = this.s.dt.aoColumns.length;\n\t\tvar table = this.s.dt.nTable;\n\t\tvar i;\n\n\t\t/* Columns discounted from reordering - counting left to right */\n\t\tif ( this.s.init.iFixedColumns )\n\t\t{\n\t\t\tthis.s.fixed = this.s.init.iFixedColumns;\n\t\t}\n\n\t\tif ( this.s.init.iFixedColumnsLeft )\n\t\t{\n\t\t\tthis.s.fixed = this.s.init.iFixedColumnsLeft;\n\t\t}\n\n\t\t/* Columns discounted from reordering - counting right to left */\n\t\tthis.s.fixedRight = this.s.init.iFixedColumnsRight ?\n\t\t\tthis.s.init.iFixedColumnsRight :\n\t\t\t0;\n\n\t\t/* Drop callback initialisation option */\n\t\tif ( this.s.init.fnReorderCallback )\n\t\t{\n\t\t\tthis.s.reorderCallback = this.s.init.fnReorderCallback;\n\t\t}\n\n\t\t/* Add event handlers for the drag and drop, and also mark the original column order */\n\t\tfor ( i = 0; i < iLen; i++ )\n\t\t{\n\t\t\tif ( i > this.s.fixed-1 && i < iLen - this.s.fixedRight )\n\t\t\t{\n\t\t\t\tthis._fnMouseListener( i, this.s.dt.aoColumns[i].nTh );\n\t\t\t}\n\n\t\t\t/* Mark the original column order for later reference */\n\t\t\tthis.s.dt.aoColumns[i]._ColReorder_iOrigCol = i;\n\t\t}\n\n\t\t/* State saving */\n\t\tthis.s.dt.oApi._fnCallbackReg( this.s.dt, 'aoStateSaveParams', function (oS, oData) {\n\t\t\tthat._fnStateSave.call( that, oData );\n\t\t}, \"ColReorder_State\" );\n\n\t\tthis.s.dt.oApi._fnCallbackReg(this.s.dt, 'aoStateLoadParams', function(oS, oData) {\n\t\t\tthat.s.dt._colReorder.fnOrder(oData.ColReorder, true);\n\t\t})\n\n\t\t/* An initial column order has been specified */\n\t\tvar aiOrder = null;\n\t\tif ( this.s.init.aiOrder )\n\t\t{\n\t\t\taiOrder = this.s.init.aiOrder.slice();\n\t\t}\n\n\t\t/* State loading, overrides the column order given */\n\t\tif ( this.s.dt.oLoadedState && typeof this.s.dt.oLoadedState.ColReorder != 'undefined' &&\n\t\t  this.s.dt.oLoadedState.ColReorder.length == this.s.dt.aoColumns.length )\n\t\t{\n\t\t\taiOrder = this.s.dt.oLoadedState.ColReorder;\n\t\t}\n\n\t\t/* If we have an order to apply - do so */\n\t\tif ( aiOrder )\n\t\t{\n\t\t\t/* We might be called during or after the DataTables initialisation. If before, then we need\n\t\t\t * to wait until the draw is done, if after, then do what we need to do right away\n\t\t\t */\n\t\t\tif ( !that.s.dt._bInitComplete )\n\t\t\t{\n\t\t\t\tvar bDone = false;\n\t\t\t\t$(table).on( 'draw.dt.colReorder', function () {\n\t\t\t\t\tif ( !that.s.dt._bInitComplete && !bDone )\n\t\t\t\t\t{\n\t\t\t\t\t\tbDone = true;\n\t\t\t\t\t\tvar resort = fnInvertKeyValues( aiOrder );\n\t\t\t\t\t\tthat._fnOrderColumns.call( that, resort );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar resort = fnInvertKeyValues( aiOrder );\n\t\t\t\tthat._fnOrderColumns.call( that, resort );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis._fnSetColumnIndexes();\n\t\t}\n\n\t\t// Destroy clean up\n\t\t$(table).on( 'destroy.dt.colReorder', function () {\n\t\t\t// Restore table to original order from when it was loaded\n\t\t\tthat.fnReset();\n\n\t\t\t$(table).off( 'destroy.dt.colReorder draw.dt.colReorder' );\n\n\t\t\t$.each( that.s.dt.aoColumns, function (i, column) {\n\t\t\t\t$(column.nTh).off('.ColReorder');\n\t\t\t\t$(column.nTh).removeAttr('data-column-index');\n\t\t\t} );\n\n\t\t\tthat.s.dt._colReorder = null;\n\t\t\tthat.s = null;\n\t\t} );\n\t},\n\n\n\t/**\n\t * Set the column order from an array\n\t *  @method  _fnOrderColumns\n\t *  @param   array a An array of integers which dictate the column order that should be applied\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnOrderColumns\": function ( a )\n\t{\n\t\tvar changed = false;\n\n\t\tif ( a.length != this.s.dt.aoColumns.length )\n\t\t{\n\t\t\tthis.s.dt.oInstance.oApi._fnLog( this.s.dt, 1, \"ColReorder - array reorder does not \"+\n\t\t\t\t\"match known number of columns. Skipping.\" );\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar currIndex = $.inArray( i, a );\n\t\t\tif ( i != currIndex )\n\t\t\t{\n\t\t\t\t/* Reorder our switching array */\n\t\t\t\tfnArraySwitch( a, currIndex, i );\n\n\t\t\t\t/* Do the column reorder in the table */\n\t\t\t\tthis.s.dt.oInstance.fnColReorder( currIndex, i, true, false );\n\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t}\n\n\t\tthis._fnSetColumnIndexes();\n\n\t\t// Has anything actually changed? If not, then nothing else to do\n\t\tif ( ! changed ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$.fn.dataTable.Api( this.s.dt ).rows().invalidate('data');\n\n\t\t/* When scrolling we need to recalculate the column sizes to allow for the shift */\n\t\tif ( this.s.dt.oScroll.sX !== \"\" || this.s.dt.oScroll.sY !== \"\" )\n\t\t{\n\t\t\tthis.s.dt.oInstance.fnAdjustColumnSizing( false );\n\t\t}\n\n\t\t/* Save the state */\n\t\tthis.s.dt.oInstance.oApi._fnSaveState( this.s.dt );\n\n\t\tif ( this.s.reorderCallback !== null )\n\t\t{\n\t\t\tthis.s.reorderCallback.call( this );\n\t\t}\n\t},\n\n\n\t/**\n\t * Because we change the indexes of columns in the table, relative to their starting point\n\t * we need to reorder the state columns to what they are at the starting point so we can\n\t * then rearrange them again on state load!\n\t *  @method  _fnStateSave\n\t *  @param   object oState DataTables state\n\t *  @returns string JSON encoded cookie string for DataTables\n\t *  @private\n\t */\n\t\"_fnStateSave\": function ( oState )\n\t{\n\t\tif(this.s === null) {\n\t\t\treturn;\n\t\t}\n\t\tvar i, iLen, aCopy, iOrigColumn;\n\t\tvar oSettings = this.s.dt;\n\t\tvar columns = oSettings.aoColumns;\n\n\t\toState.ColReorder = [];\n\n\t\t/* Sorting */\n\t\tif ( oState.aaSorting ) {\n\t\t\t// 1.10.0-\n\t\t\tfor ( i=0 ; i<oState.aaSorting.length ; i++ ) {\n\t\t\t\toState.aaSorting[i][0] = columns[ oState.aaSorting[i][0] ]._ColReorder_iOrigCol;\n\t\t\t}\n\n\t\t\tvar aSearchCopy = $.extend( true, [], oState.aoSearchCols );\n\n\t\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tiOrigColumn = columns[i]._ColReorder_iOrigCol;\n\n\t\t\t\t/* Column filter */\n\t\t\t\toState.aoSearchCols[ iOrigColumn ] = aSearchCopy[i];\n\n\t\t\t\t/* Visibility */\n\t\t\t\toState.abVisCols[ iOrigColumn ] = columns[i].bVisible;\n\n\t\t\t\t/* Column reordering */\n\t\t\t\toState.ColReorder.push( iOrigColumn );\n\t\t\t}\n\t\t}\n\t\telse if ( oState.order ) {\n\t\t\t// 1.10.1+\n\t\t\tfor ( i=0 ; i<oState.order.length ; i++ ) {\n\t\t\t\toState.order[i][0] = columns[ oState.order[i][0] ]._ColReorder_iOrigCol;\n\t\t\t}\n\n\t\t\tvar stateColumnsCopy = $.extend( true, [], oState.columns );\n\n\t\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tiOrigColumn = columns[i]._ColReorder_iOrigCol;\n\n\t\t\t\t/* Columns */\n\t\t\t\toState.columns[ iOrigColumn ] = stateColumnsCopy[i];\n\n\t\t\t\t/* Column reordering */\n\t\t\t\toState.ColReorder.push( iOrigColumn );\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Mouse drop and drag\n\t */\n\n\t/**\n\t * Add a mouse down listener to a particluar TH element\n\t *  @method  _fnMouseListener\n\t *  @param   int i Column index\n\t *  @param   element nTh TH element clicked on\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnMouseListener\": function ( i, nTh )\n\t{\n\t\tvar that = this;\n\t\t$(nTh)\n\t\t\t.on( 'mousedown.ColReorder', function (e) {\n\t\t\t\tif ( that.s.enable && e.which === 1 ) {\n\t\t\t\t\tthat._fnMouseDown.call( that, e, nTh );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'touchstart.ColReorder', function (e) {\n\t\t\t\tif ( that.s.enable ) {\n\t\t\t\t\tthat._fnMouseDown.call( that, e, nTh );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\n\n\t/**\n\t * Mouse down on a TH element in the table header\n\t *  @method  _fnMouseDown\n\t *  @param   event e Mouse event\n\t *  @param   element nTh TH element to be dragged\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnMouseDown\": function ( e, nTh )\n\t{\n\t\tvar that = this;\n\n\t\t/* Store information about the mouse position */\n\t\tvar target = $(e.target).closest('th, td');\n\t\tvar offset = target.offset();\n\t\tvar idx = parseInt( $(nTh).attr('data-column-index'), 10 );\n\n\t\tif ( idx === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.s.mouse.startX = this._fnCursorPosition( e, 'pageX' );\n\t\tthis.s.mouse.startY = this._fnCursorPosition( e, 'pageY' );\n\t\tthis.s.mouse.offsetX = this._fnCursorPosition( e, 'pageX' ) - offset.left;\n\t\tthis.s.mouse.offsetY = this._fnCursorPosition( e, 'pageY' ) - offset.top;\n\t\tthis.s.mouse.target = this.s.dt.aoColumns[ idx ].nTh;//target[0];\n\t\tthis.s.mouse.targetIndex = idx;\n\t\tthis.s.mouse.fromIndex = idx;\n\n\t\tthis._fnRegions();\n\n\t\t/* Add event handlers to the document */\n\t\t$(document)\n\t\t\t.on( 'mousemove.ColReorder touchmove.ColReorder', function (e) {\n\t\t\t\tthat._fnMouseMove.call( that, e );\n\t\t\t} )\n\t\t\t.on( 'mouseup.ColReorder touchend.ColReorder', function (e) {\n\t\t\t\tthat._fnMouseUp.call( that, e );\n\t\t\t} );\n\t},\n\n\n\t/**\n\t * Deal with a mouse move event while dragging a node\n\t *  @method  _fnMouseMove\n\t *  @param   event e Mouse event\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnMouseMove\": function ( e )\n\t{\n\t\tvar that = this;\n\n\t\tif ( this.dom.drag === null )\n\t\t{\n\t\t\t/* Only create the drag element if the mouse has moved a specific distance from the start\n\t\t\t * point - this allows the user to make small mouse movements when sorting and not have a\n\t\t\t * possibly confusing drag element showing up\n\t\t\t */\n\t\t\tif ( Math.pow(\n\t\t\t\tMath.pow(this._fnCursorPosition( e, 'pageX') - this.s.mouse.startX, 2) +\n\t\t\t\tMath.pow(this._fnCursorPosition( e, 'pageY') - this.s.mouse.startY, 2), 0.5 ) < 5 )\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._fnCreateDragNode();\n\t\t}\n\n\t\t/* Position the element - we respect where in the element the click occured */\n\t\tthis.dom.drag.css( {\n\t\t\tleft: this._fnCursorPosition( e, 'pageX' ) - this.s.mouse.offsetX,\n\t\t\ttop: this._fnCursorPosition( e, 'pageY' ) - this.s.mouse.offsetY\n\t\t} );\n\n\t\t/* Based on the current mouse position, calculate where the insert should go */\n\t\tvar target;\n\t\tvar lastToIndex = this.s.mouse.toIndex;\n\t\tvar cursorXPosiotion = this._fnCursorPosition(e, 'pageX');\n\t\tvar targetsPrev = function (i) {\n\t\t\twhile (i >= 0) {\n\t\t\t\ti--;\n\n\t\t\t\tif (i <= 0) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (that.s.aoTargets[i+1].x !== that.s.aoTargets[i].x) {\n\t\t\t\t\treturn that.s.aoTargets[i];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tvar firstNotHidden = function () {\n\t\t\tfor (var i=0 ; i<that.s.aoTargets.length-1 ; i++) {\n\t\t\t\tif (that.s.aoTargets[i].x !== that.s.aoTargets[i+1].x) {\n\t\t\t\t\treturn that.s.aoTargets[i];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tvar lastNotHidden = function () {\n\t\t\tfor (var i=that.s.aoTargets.length-1 ; i>0 ; i--) {\n\t\t\t\tif (that.s.aoTargets[i].x !== that.s.aoTargets[i-1].x) {\n\t\t\t\t\treturn that.s.aoTargets[i];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n        for (var i = 1; i < this.s.aoTargets.length; i++) {\n\t\t\tvar prevTarget = targetsPrev(i);\n\t\t\tif (! prevTarget) {\n\t\t\t\tprevTarget = firstNotHidden();\n\t\t\t}\n\n\t\t\tvar prevTargetMiddle = prevTarget.x + (this.s.aoTargets[i].x - prevTarget.x) / 2;\n\n            if (this._fnIsLtr()) {\n                if (cursorXPosiotion < prevTargetMiddle ) {\n                    target = prevTarget;\n                    break;\n                }\n            }\n            else {\n                if (cursorXPosiotion > prevTargetMiddle) {\n                    target = prevTarget;\n                    break;\n                }\n            }\n\t\t}\n\n        if (target) {\n            this.dom.pointer.css('left', target.x);\n            this.s.mouse.toIndex = target.to;\n        }\n        else {\n\t\t\t// The insert element wasn't positioned in the array (less than\n\t\t\t// operator), so we put it at the end\n\t\t\tthis.dom.pointer.css( 'left', lastNotHidden().x );\n\t\t\tthis.s.mouse.toIndex = lastNotHidden().to;\n\t\t}\n\n\t\t// Perform reordering if realtime updating is on and the column has moved\n\t\tif ( this.s.init.bRealtime && lastToIndex !== this.s.mouse.toIndex ) {\n\t\t\tthis.s.dt.oInstance.fnColReorder( this.s.mouse.fromIndex, this.s.mouse.toIndex );\n\t\t\tthis.s.mouse.fromIndex = this.s.mouse.toIndex;\n\n\t\t\t// Not great for performance, but required to keep everything in alignment\n\t\t\tif ( this.s.dt.oScroll.sX !== \"\" || this.s.dt.oScroll.sY !== \"\" )\n\t\t\t{\n\t\t\t\tthis.s.dt.oInstance.fnAdjustColumnSizing( false );\n\t\t\t}\n\n\t\t\tthis._fnRegions();\n\t\t}\n\t},\n\n\n\t/**\n\t * Finish off the mouse drag and insert the column where needed\n\t *  @method  _fnMouseUp\n\t *  @param   event e Mouse event\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnMouseUp\": function ( e )\n\t{\n\t\tvar that = this;\n\n\t\t$(document).off( '.ColReorder' );\n\n\t\tif ( this.dom.drag !== null )\n\t\t{\n\t\t\t/* Remove the guide elements */\n\t\t\tthis.dom.drag.remove();\n\t\t\tthis.dom.pointer.remove();\n\t\t\tthis.dom.drag = null;\n\t\t\tthis.dom.pointer = null;\n\n\t\t\t/* Actually do the reorder */\n\t\t\tthis.s.dt.oInstance.fnColReorder( this.s.mouse.fromIndex, this.s.mouse.toIndex, true );\n\t\t\tthis._fnSetColumnIndexes();\n\n\t\t\t/* When scrolling we need to recalculate the column sizes to allow for the shift */\n\t\t\tif ( this.s.dt.oScroll.sX !== \"\" || this.s.dt.oScroll.sY !== \"\" )\n\t\t\t{\n\t\t\t\tthis.s.dt.oInstance.fnAdjustColumnSizing( false );\n\t\t\t}\n\n\t\t\t/* Save the state */\n\t\t\tthis.s.dt.oInstance.oApi._fnSaveState( this.s.dt );\n\n\t\t\tif ( this.s.reorderCallback !== null )\n\t\t\t{\n\t\t\t\tthis.s.reorderCallback.call( this );\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/**\n\t * Calculate a cached array with the points of the column inserts, and the\n\t * 'to' points\n\t *  @method  _fnRegions\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnRegions\": function ()\n\t{\n\t\tvar aoColumns = this.s.dt.aoColumns;\n        var isLTR = this._fnIsLtr();\n\t\tthis.s.aoTargets.splice(0, this.s.aoTargets.length);\n\t\tvar lastBound = $(this.s.dt.nTable).offset().left;\n\n        var aoColumnBounds = [];\n        $.each(aoColumns, function (i, column) {\n            if (column.bVisible && column.nTh.style.display !== 'none') {\n                var nth = $(column.nTh);\n\t\t\t\tvar bound = nth.offset().left;\n\n                if (isLTR) {\n                    bound += nth.outerWidth();\n                }\n\n                aoColumnBounds.push({\n                    index: i,\n                    bound: bound\n\t\t\t\t});\n\n\t\t\t\tlastBound = bound;\n\t\t\t}\n\t\t\telse {\n                aoColumnBounds.push({\n\t\t\t\t\tindex: i,\n\t\t\t\t\tbound: lastBound\n                });\n\t\t\t}\n\t\t});\n\n        var firstColumn = aoColumnBounds[0];\n\t\tvar firstColumnWidth = $(aoColumns[firstColumn.index].nTh).outerWidth();\n\n        this.s.aoTargets.push({\n            to: 0,\n\t\t\tx: firstColumn.bound - firstColumnWidth\n        });\n\n        for (var i = 0; i < aoColumnBounds.length; i++) {\n            var columnBound = aoColumnBounds[i];\n            var iToPoint = columnBound.index;\n\n            /* For the column / header in question, we want it's position to remain the same if the\n            * position is just to it's immediate left or right, so we only increment the counter for\n            * other columns\n            */\n            if (columnBound.index < this.s.mouse.fromIndex) {\n                iToPoint++;\n            }\n\n            this.s.aoTargets.push({\n\t\t\t\tto: iToPoint,\n                x: columnBound.bound\n            });\n        }\n\n\t\t/* Disallow columns for being reordered by drag and drop, counting right to left */\n\t\tif ( this.s.fixedRight !== 0 )\n\t\t{\n\t\t\tthis.s.aoTargets.splice( this.s.aoTargets.length - this.s.fixedRight );\n\t\t}\n\n\t\t/* Disallow columns for being reordered by drag and drop, counting left to right */\n\t\tif ( this.s.fixed !== 0 )\n\t\t{\n\t\t\tthis.s.aoTargets.splice( 0, this.s.fixed );\n\t\t}\n\t},\n\n\n\t/**\n\t * Copy the TH element that is being drags so the user has the idea that they are actually\n\t * moving it around the page.\n\t *  @method  _fnCreateDragNode\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnCreateDragNode\": function ()\n\t{\n\t\tvar scrolling = this.s.dt.oScroll.sX !== \"\" || this.s.dt.oScroll.sY !== \"\";\n\n\t\tvar origCell = this.s.dt.aoColumns[ this.s.mouse.targetIndex ].nTh;\n\t\tvar origTr = origCell.parentNode;\n\t\tvar origThead = origTr.parentNode;\n\t\tvar origTable = origThead.parentNode;\n\t\tvar cloneCell = $(origCell).clone();\n\n\t\t// This is a slightly odd combination of jQuery and DOM, but it is the\n\t\t// fastest and least resource intensive way I could think of cloning\n\t\t// the table with just a single header cell in it.\n\t\tthis.dom.drag = $(origTable.cloneNode(false))\n\t\t\t.addClass( 'DTCR_clonedTable' )\n\t\t\t.append(\n\t\t\t\t$(origThead.cloneNode(false)).append(\n\t\t\t\t\t$(origTr.cloneNode(false)).append(\n\t\t\t\t\t\tcloneCell[0]\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.css( {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: $(origCell).outerWidth(),\n\t\t\t\theight: $(origCell).outerHeight()\n\t\t\t} )\n\t\t\t.appendTo( 'body' );\n\n\t\tthis.dom.pointer = $('<div></div>')\n\t\t\t.addClass( 'DTCR_pointer' )\n\t\t\t.css( {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: scrolling ?\n\t\t\t\t\t$($(this.s.dt.nScrollBody).parent()).offset().top :\n\t\t\t\t\t$(this.s.dt.nTable).offset().top,\n\t\t\t\theight : scrolling ?\n\t\t\t\t\t$($(this.s.dt.nScrollBody).parent()).height() :\n\t\t\t\t\t$(this.s.dt.nTable).height()\n\t\t\t} )\n\t\t\t.appendTo( 'body' );\n\t},\n\n\n\t/**\n\t * Add a data attribute to the column headers, so we know the index of\n\t * the row to be reordered. This allows fast detection of the index, and\n\t * for this plug-in to work with FixedHeader which clones the nodes.\n\t *  @private\n\t */\n\t\"_fnSetColumnIndexes\": function ()\n\t{\n\t\t$.each( this.s.dt.aoColumns, function (i, column) {\n\t\t\t$(column.nTh).attr('data-column-index', i);\n\t\t} );\n\t},\n\n\n\t/**\n\t * Get cursor position regardless of mouse or touch input\n\t * @param  {Event}  e    jQuery Event\n\t * @param  {string} prop Property to get\n\t * @return {number}      Value\n\t */\n\t_fnCursorPosition: function ( e, prop ) {\n\t\tif ( e.type.indexOf('touch') !== -1 ) {\n\t\t\treturn e.originalEvent.touches[0][ prop ];\n\t\t}\n\t\treturn e[ prop ];\n    },\n\n    _fnIsLtr: function () {\n        return $(this.s.dt.nTable).css('direction') !== \"rtl\";\n    }\n} );\n\n\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Static parameters\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\n/**\n * ColReorder default settings for initialisation\n *  @namespace\n *  @static\n */\nColReorder.defaults = {\n\t/**\n\t * Predefined ordering for the columns that will be applied automatically\n\t * on initialisation. If not specified then the order that the columns are\n\t * found to be in the HTML is the order used.\n\t *  @type array\n\t *  @default null\n\t *  @static\n\t */\n\taiOrder: null,\n\n\t/**\n\t * ColReorder enable on initialisation\n\t *  @type boolean\n\t *  @default true\n\t *  @static\n\t */\n\tbEnable: true,\n\n\t/**\n\t * Redraw the table's column ordering as the end user draws the column\n\t * (`true`) or wait until the mouse is released (`false` - default). Note\n\t * that this will perform a redraw on each reordering, which involves an\n\t * Ajax request each time if you are using server-side processing in\n\t * DataTables.\n\t *  @type boolean\n\t *  @default false\n\t *  @static\n\t */\n\tbRealtime: true,\n\n\t/**\n\t * Indicate how many columns should be fixed in position (counting from the\n\t * left). This will typically be 1 if used, but can be as high as you like.\n\t *  @type int\n\t *  @default 0\n\t *  @static\n\t */\n\tiFixedColumnsLeft: 0,\n\n\t/**\n\t * As `iFixedColumnsRight` but counting from the right.\n\t *  @type int\n\t *  @default 0\n\t *  @static\n\t */\n\tiFixedColumnsRight: 0,\n\n\t/**\n\t * Callback function that is fired when columns are reordered. The `column-\n\t * reorder` event is preferred over this callback\n\t *  @type function():void\n\t *  @default null\n\t *  @static\n\t */\n\tfnReorderCallback: null\n};\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * ColReorder version\n *  @constant  version\n *  @type      String\n *  @default   As code\n */\nColReorder.version = \"1.7.0\";\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables interfaces\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n// Expose\n$.fn.dataTable.ColReorder = ColReorder;\n$.fn.DataTable.ColReorder = ColReorder;\n\n\n// Register a new feature with DataTables\nif ( typeof $.fn.dataTable == \"function\" &&\n     typeof $.fn.dataTableExt.fnVersionCheck == \"function\" &&\n     $.fn.dataTableExt.fnVersionCheck('1.10.8') )\n{\n\t$.fn.dataTableExt.aoFeatures.push( {\n\t\t\"fnInit\": function( settings ) {\n\t\t\tvar table = settings.oInstance;\n\n\t\t\tif ( ! settings._colReorder ) {\n\t\t\t\tvar dtInit = settings.oInit;\n\t\t\t\tvar opts = dtInit.colReorder || dtInit.oColReorder || {};\n\n\t\t\t\tnew ColReorder( settings, opts );\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttable.oApi._fnLog( settings, 1, \"ColReorder attempted to initialise twice. Ignoring second\" );\n\t\t\t}\n\n\t\t\treturn null; /* No node for DataTables to insert */\n\t\t},\n\t\t\"cFeature\": \"R\",\n\t\t\"sFeature\": \"ColReorder\"\n\t} );\n}\nelse {\n\talert( \"Warning: ColReorder requires DataTables 1.10.8 or greater - www.datatables.net/download\");\n}\n\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on( 'preInit.dt.colReorder', function (e, settings) {\n\tif ( e.namespace !== 'dt' ) {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.colReorder;\n\tvar defaults = DataTable.defaults.colReorder;\n\n\tif ( init || defaults ) {\n\t\tvar opts = $.extend( {}, init, defaults );\n\n\t\tif ( init !== false ) {\n\t\t\tnew ColReorder( settings, opts  );\n\t\t}\n\t}\n} );\n\n\n// API augmentation\n$.fn.dataTable.Api.register( 'colReorder.reset()', function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\tctx._colReorder.fnReset();\n\t} );\n} );\n\n$.fn.dataTable.Api.register( 'colReorder.order()', function ( set, original ) {\n\tif ( set ) {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\tctx._colReorder.fnOrder( set, original );\n\t\t} );\n\t}\n\n\treturn this.context.length ?\n\t\tthis.context[0]._colReorder.fnOrder() :\n\t\tnull;\n} );\n\n$.fn.dataTable.Api.register( 'colReorder.transpose()', function ( idx, dir ) {\n\treturn this.context.length && this.context[0]._colReorder ?\n\t\tthis.context[0]._colReorder.fnTranspose( idx, dir ) :\n\t\tidx;\n} );\n\n$.fn.dataTable.Api.register( 'colReorder.move()', function( from, to, drop, invalidateRows ) {\n\tif (this.context.length) {\n\t\tthis.context[0]._colReorder.s.dt.oInstance.fnColReorder( from, to, drop, invalidateRows );\n\t\tthis.context[0]._colReorder._fnSetColumnIndexes();\n\t}\n\treturn this;\n} );\n\n$.fn.dataTable.Api.register( 'colReorder.enable()', function( flag ) {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\tif ( ctx._colReorder ) {\n\t\t\tctx._colReorder.fnEnable( flag );\n\t\t}\n\t} );\n} );\n\n$.fn.dataTable.Api.register( 'colReorder.disable()', function() {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\tif ( ctx._colReorder ) {\n\t\t\tctx._colReorder.fnDisable();\n\t\t}\n\t} );\n} );\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/css/dataTables.bootstrap.css",
    "content": "@charset \"UTF-8\";\n:root {\n  --dt-row-selected: 0, 136, 204;\n  --dt-row-selected-text: 255, 255, 255;\n  --dt-row-selected-link: 9, 10, 11;\n  --dt-row-stripe: 0, 0, 0;\n  --dt-row-hover: 0, 0, 0;\n  --dt-column-ordering: 0, 0, 0;\n  --dt-html-background: white;\n}\n:root.dark {\n  --dt-html-background: rgb(33, 37, 41);\n}\n\ntable.dataTable td.dt-control {\n  text-align: center;\n  cursor: pointer;\n}\ntable.dataTable td.dt-control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"▶\";\n}\ntable.dataTable tr.dt-hasChild td.dt-control:before {\n  content: \"▼\";\n}\n\nhtml.dark table.dataTable td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\nhtml.dark table.dataTable tr.dt-hasChild td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\n\ntable.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting_asc_disabled, table.dataTable thead > tr > th.sorting_desc_disabled,\ntable.dataTable thead > tr > td.sorting,\ntable.dataTable thead > tr > td.sorting_asc,\ntable.dataTable thead > tr > td.sorting_desc,\ntable.dataTable thead > tr > td.sorting_asc_disabled,\ntable.dataTable thead > tr > td.sorting_desc_disabled {\n  cursor: pointer;\n  position: relative;\n  padding-right: 26px;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  position: absolute;\n  display: block;\n  opacity: 0.125;\n  right: 10px;\n  line-height: 9px;\n  font-size: 0.8em;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before {\n  bottom: 50%;\n  content: \"▲\";\n  content: \"▲\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  top: 50%;\n  content: \"▼\";\n  content: \"▼\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:after {\n  opacity: 0.6;\n}\ntable.dataTable thead > tr > th.sorting_desc_disabled:after, table.dataTable thead > tr > th.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before {\n  display: none;\n}\ntable.dataTable thead > tr > th:active,\ntable.dataTable thead > tr > td:active {\n  outline: none;\n}\n\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > th:before, div.dataTables_scrollBody > table.dataTable > thead > tr > th:after,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:before,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:after {\n  display: none;\n}\n\ndiv.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 2px;\n  z-index: 10;\n}\ndiv.dataTables_processing > div:last-child {\n  position: relative;\n  width: 80px;\n  height: 15px;\n  margin: 1em auto;\n}\ndiv.dataTables_processing > div:last-child > div {\n  position: absolute;\n  top: 0;\n  width: 13px;\n  height: 13px;\n  border-radius: 50%;\n  background: rgb(0, 136, 204);\n  background: rgb(var(--dt-row-selected));\n  animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(1) {\n  left: 8px;\n  animation: datatables-loader-1 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(2) {\n  left: 8px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(3) {\n  left: 32px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(4) {\n  left: 56px;\n  animation: datatables-loader-3 0.6s infinite;\n}\n\n@keyframes datatables-loader-1 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes datatables-loader-3 {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    transform: scale(0);\n  }\n}\n@keyframes datatables-loader-2 {\n  0% {\n    transform: translate(0, 0);\n  }\n  100% {\n    transform: translate(24px, 0);\n  }\n}\ntable.dataTable.nowrap th, table.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable th.dt-left,\ntable.dataTable td.dt-left {\n  text-align: left;\n}\ntable.dataTable th.dt-center,\ntable.dataTable td.dt-center,\ntable.dataTable td.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable th.dt-right,\ntable.dataTable td.dt-right {\n  text-align: right;\n}\ntable.dataTable th.dt-justify,\ntable.dataTable td.dt-justify {\n  text-align: justify;\n}\ntable.dataTable th.dt-nowrap,\ntable.dataTable td.dt-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable thead th,\ntable.dataTable thead td,\ntable.dataTable tfoot th,\ntable.dataTable tfoot td {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-left,\ntable.dataTable thead td.dt-head-left,\ntable.dataTable tfoot th.dt-head-left,\ntable.dataTable tfoot td.dt-head-left {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-center,\ntable.dataTable thead td.dt-head-center,\ntable.dataTable tfoot th.dt-head-center,\ntable.dataTable tfoot td.dt-head-center {\n  text-align: center;\n}\ntable.dataTable thead th.dt-head-right,\ntable.dataTable thead td.dt-head-right,\ntable.dataTable tfoot th.dt-head-right,\ntable.dataTable tfoot td.dt-head-right {\n  text-align: right;\n}\ntable.dataTable thead th.dt-head-justify,\ntable.dataTable thead td.dt-head-justify,\ntable.dataTable tfoot th.dt-head-justify,\ntable.dataTable tfoot td.dt-head-justify {\n  text-align: justify;\n}\ntable.dataTable thead th.dt-head-nowrap,\ntable.dataTable thead td.dt-head-nowrap,\ntable.dataTable tfoot th.dt-head-nowrap,\ntable.dataTable tfoot td.dt-head-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable tbody th.dt-body-left,\ntable.dataTable tbody td.dt-body-left {\n  text-align: left;\n}\ntable.dataTable tbody th.dt-body-center,\ntable.dataTable tbody td.dt-body-center {\n  text-align: center;\n}\ntable.dataTable tbody th.dt-body-right,\ntable.dataTable tbody td.dt-body-right {\n  text-align: right;\n}\ntable.dataTable tbody th.dt-body-justify,\ntable.dataTable tbody td.dt-body-justify {\n  text-align: justify;\n}\ntable.dataTable tbody th.dt-body-nowrap,\ntable.dataTable tbody td.dt-body-nowrap {\n  white-space: nowrap;\n}\n\ntable.dataTable {\n  clear: both;\n  margin-top: 6px !important;\n  margin-bottom: 6px !important;\n  max-width: none !important;\n  border-collapse: separate !important;\n}\ntable.dataTable td,\ntable.dataTable th {\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\ntable.dataTable td.dataTables_empty,\ntable.dataTable th.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable.nowrap th,\ntable.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable.table-striped > tbody > tr:nth-of-type(2n+1) {\n  background-color: transparent;\n}\ntable.dataTable > tbody > tr {\n  background-color: transparent;\n}\ntable.dataTable > tbody > tr.selected > * {\n  box-shadow: inset 0 0 0 9999px rgb(0, 136, 204);\n  box-shadow: inset 0 0 0 9999px rgb(var(--dt-row-selected));\n  color: rgb(255, 255, 255);\n  color: rgb(var(--dt-row-selected-text));\n}\ntable.dataTable > tbody > tr.selected a {\n  color: rgb(9, 10, 11);\n  color: rgb(var(--dt-row-selected-link));\n}\ntable.dataTable.table-striped > tbody > tr.odd > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.023);\n}\ntable.dataTable.table-striped > tbody > tr.odd.selected > * {\n  box-shadow: inset 0 0 0 9999px rgba(0, 136, 204, 0.923);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.923);\n}\ntable.dataTable.table-hover > tbody > tr:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.075);\n}\ntable.dataTable.table-hover > tbody > tr.selected:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(0, 136, 204, 0.975);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.975);\n}\n\ndiv.dataTables_wrapper div.dataTables_length label {\n  font-weight: normal;\n  text-align: left;\n  white-space: nowrap;\n}\ndiv.dataTables_wrapper div.dataTables_length select {\n  width: 75px;\n  display: inline-block;\n}\ndiv.dataTables_wrapper div.dataTables_filter {\n  text-align: right;\n}\ndiv.dataTables_wrapper div.dataTables_filter label {\n  font-weight: normal;\n  white-space: nowrap;\n  text-align: left;\n}\ndiv.dataTables_wrapper div.dataTables_filter input {\n  margin-left: 0.5em;\n  display: inline-block;\n  width: auto;\n}\ndiv.dataTables_wrapper div.dataTables_info {\n  padding-top: 8px;\n  white-space: nowrap;\n}\ndiv.dataTables_wrapper div.dataTables_paginate {\n  margin: 0;\n  white-space: nowrap;\n  text-align: right;\n}\ndiv.dataTables_wrapper div.dataTables_paginate ul.pagination {\n  margin: 2px 0;\n  white-space: nowrap;\n}\ndiv.dataTables_wrapper div.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 1em 0;\n}\n\ndiv.dataTables_scrollHead table.dataTable {\n  margin-bottom: 0 !important;\n}\n\ndiv.dataTables_scrollBody > table {\n  border-top: none;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\ndiv.dataTables_scrollBody > table > thead .sorting:after,\ndiv.dataTables_scrollBody > table > thead .sorting_asc:after,\ndiv.dataTables_scrollBody > table > thead .sorting_desc:after {\n  display: none;\n}\ndiv.dataTables_scrollBody > table > tbody > tr:first-child > th,\ndiv.dataTables_scrollBody > table > tbody > tr:first-child > td {\n  border-top: none;\n}\n\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner {\n  box-sizing: content-box;\n}\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner > table {\n  margin-top: 0 !important;\n  border-top: none;\n}\n\n@media screen and (max-width: 767px) {\n  div.dataTables_wrapper div.dataTables_length,\n  div.dataTables_wrapper div.dataTables_filter,\n  div.dataTables_wrapper div.dataTables_info,\n  div.dataTables_wrapper div.dataTables_paginate {\n    text-align: center;\n  }\n}\ntable.dataTable.table-condensed > thead > tr > th {\n  padding-right: 20px;\n}\n\ntable.table-bordered.dataTable {\n  border-right-width: 0;\n}\ntable.table-bordered.dataTable th,\ntable.table-bordered.dataTable td {\n  border-left-width: 0;\n}\ntable.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,\ntable.table-bordered.dataTable td:last-child,\ntable.table-bordered.dataTable td:last-child {\n  border-right-width: 1px;\n}\ntable.table-bordered.dataTable tbody th,\ntable.table-bordered.dataTable tbody td {\n  border-bottom-width: 0;\n}\n\ndiv.dataTables_scrollHead table.table-bordered {\n  border-bottom-width: 0;\n}\n\ndiv.table-responsive > div.dataTables_wrapper > div.row {\n  margin: 0;\n}\ndiv.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:first-child {\n  padding-left: 0;\n}\ndiv.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:last-child {\n  padding-right: 0;\n}\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/css/dataTables.bootstrap4.css",
    "content": "@charset \"UTF-8\";\n:root {\n  --dt-row-selected: 2, 117, 216;\n  --dt-row-selected-text: 255, 255, 255;\n  --dt-row-selected-link: 9, 10, 11;\n  --dt-row-stripe: 0, 0, 0;\n  --dt-row-hover: 0, 0, 0;\n  --dt-column-ordering: 0, 0, 0;\n  --dt-html-background: white;\n}\n:root.dark {\n  --dt-html-background: rgb(33, 37, 41);\n}\n\ntable.dataTable td.dt-control {\n  text-align: center;\n  cursor: pointer;\n}\ntable.dataTable td.dt-control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"▶\";\n}\ntable.dataTable tr.dt-hasChild td.dt-control:before {\n  content: \"▼\";\n}\n\nhtml.dark table.dataTable td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\nhtml.dark table.dataTable tr.dt-hasChild td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\n\ntable.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting_asc_disabled, table.dataTable thead > tr > th.sorting_desc_disabled,\ntable.dataTable thead > tr > td.sorting,\ntable.dataTable thead > tr > td.sorting_asc,\ntable.dataTable thead > tr > td.sorting_desc,\ntable.dataTable thead > tr > td.sorting_asc_disabled,\ntable.dataTable thead > tr > td.sorting_desc_disabled {\n  cursor: pointer;\n  position: relative;\n  padding-right: 26px;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  position: absolute;\n  display: block;\n  opacity: 0.125;\n  right: 10px;\n  line-height: 9px;\n  font-size: 0.8em;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before {\n  bottom: 50%;\n  content: \"▲\";\n  content: \"▲\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  top: 50%;\n  content: \"▼\";\n  content: \"▼\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:after {\n  opacity: 0.6;\n}\ntable.dataTable thead > tr > th.sorting_desc_disabled:after, table.dataTable thead > tr > th.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before {\n  display: none;\n}\ntable.dataTable thead > tr > th:active,\ntable.dataTable thead > tr > td:active {\n  outline: none;\n}\n\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > th:before, div.dataTables_scrollBody > table.dataTable > thead > tr > th:after,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:before,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:after {\n  display: none;\n}\n\ndiv.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 2px;\n  z-index: 10;\n}\ndiv.dataTables_processing > div:last-child {\n  position: relative;\n  width: 80px;\n  height: 15px;\n  margin: 1em auto;\n}\ndiv.dataTables_processing > div:last-child > div {\n  position: absolute;\n  top: 0;\n  width: 13px;\n  height: 13px;\n  border-radius: 50%;\n  background: rgb(2, 117, 216);\n  background: rgb(var(--dt-row-selected));\n  animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(1) {\n  left: 8px;\n  animation: datatables-loader-1 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(2) {\n  left: 8px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(3) {\n  left: 32px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(4) {\n  left: 56px;\n  animation: datatables-loader-3 0.6s infinite;\n}\n\n@keyframes datatables-loader-1 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes datatables-loader-3 {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    transform: scale(0);\n  }\n}\n@keyframes datatables-loader-2 {\n  0% {\n    transform: translate(0, 0);\n  }\n  100% {\n    transform: translate(24px, 0);\n  }\n}\ntable.dataTable.nowrap th, table.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable th.dt-left,\ntable.dataTable td.dt-left {\n  text-align: left;\n}\ntable.dataTable th.dt-center,\ntable.dataTable td.dt-center,\ntable.dataTable td.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable th.dt-right,\ntable.dataTable td.dt-right {\n  text-align: right;\n}\ntable.dataTable th.dt-justify,\ntable.dataTable td.dt-justify {\n  text-align: justify;\n}\ntable.dataTable th.dt-nowrap,\ntable.dataTable td.dt-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable thead th,\ntable.dataTable thead td,\ntable.dataTable tfoot th,\ntable.dataTable tfoot td {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-left,\ntable.dataTable thead td.dt-head-left,\ntable.dataTable tfoot th.dt-head-left,\ntable.dataTable tfoot td.dt-head-left {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-center,\ntable.dataTable thead td.dt-head-center,\ntable.dataTable tfoot th.dt-head-center,\ntable.dataTable tfoot td.dt-head-center {\n  text-align: center;\n}\ntable.dataTable thead th.dt-head-right,\ntable.dataTable thead td.dt-head-right,\ntable.dataTable tfoot th.dt-head-right,\ntable.dataTable tfoot td.dt-head-right {\n  text-align: right;\n}\ntable.dataTable thead th.dt-head-justify,\ntable.dataTable thead td.dt-head-justify,\ntable.dataTable tfoot th.dt-head-justify,\ntable.dataTable tfoot td.dt-head-justify {\n  text-align: justify;\n}\ntable.dataTable thead th.dt-head-nowrap,\ntable.dataTable thead td.dt-head-nowrap,\ntable.dataTable tfoot th.dt-head-nowrap,\ntable.dataTable tfoot td.dt-head-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable tbody th.dt-body-left,\ntable.dataTable tbody td.dt-body-left {\n  text-align: left;\n}\ntable.dataTable tbody th.dt-body-center,\ntable.dataTable tbody td.dt-body-center {\n  text-align: center;\n}\ntable.dataTable tbody th.dt-body-right,\ntable.dataTable tbody td.dt-body-right {\n  text-align: right;\n}\ntable.dataTable tbody th.dt-body-justify,\ntable.dataTable tbody td.dt-body-justify {\n  text-align: justify;\n}\ntable.dataTable tbody th.dt-body-nowrap,\ntable.dataTable tbody td.dt-body-nowrap {\n  white-space: nowrap;\n}\n\ntable.dataTable {\n  clear: both;\n  margin-top: 6px !important;\n  margin-bottom: 6px !important;\n  max-width: none !important;\n  border-collapse: separate !important;\n  border-spacing: 0;\n}\ntable.dataTable td,\ntable.dataTable th {\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\ntable.dataTable td.dataTables_empty,\ntable.dataTable th.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable.nowrap th,\ntable.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable.table-striped > tbody > tr:nth-of-type(2n+1) {\n  background-color: transparent;\n}\ntable.dataTable > tbody > tr {\n  background-color: transparent;\n}\ntable.dataTable > tbody > tr.selected > * {\n  box-shadow: inset 0 0 0 9999px rgb(2, 117, 216);\n  box-shadow: inset 0 0 0 9999px rgb(var(--dt-row-selected));\n  color: rgb(255, 255, 255);\n  color: rgb(var(--dt-row-selected-text));\n}\ntable.dataTable > tbody > tr.selected a {\n  color: rgb(9, 10, 11);\n  color: rgb(var(--dt-row-selected-link));\n}\ntable.dataTable.table-striped > tbody > tr.odd > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.05);\n}\ntable.dataTable.table-striped > tbody > tr.odd.selected > * {\n  box-shadow: inset 0 0 0 9999px rgba(2, 117, 216, 0.95);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.95);\n}\ntable.dataTable.table-hover > tbody > tr:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.075);\n}\ntable.dataTable.table-hover > tbody > tr.selected:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(2, 117, 216, 0.975);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.975);\n}\n\ndiv.dataTables_wrapper div.dataTables_length label {\n  font-weight: normal;\n  text-align: left;\n  white-space: nowrap;\n}\ndiv.dataTables_wrapper div.dataTables_length select {\n  width: auto;\n  display: inline-block;\n}\ndiv.dataTables_wrapper div.dataTables_filter {\n  text-align: right;\n}\ndiv.dataTables_wrapper div.dataTables_filter label {\n  font-weight: normal;\n  white-space: nowrap;\n  text-align: left;\n}\ndiv.dataTables_wrapper div.dataTables_filter input {\n  margin-left: 0.5em;\n  display: inline-block;\n  width: auto;\n}\ndiv.dataTables_wrapper div.dataTables_info {\n  padding-top: 0.85em;\n}\ndiv.dataTables_wrapper div.dataTables_paginate {\n  margin: 0;\n  white-space: nowrap;\n  text-align: right;\n}\ndiv.dataTables_wrapper div.dataTables_paginate ul.pagination {\n  margin: 2px 0;\n  white-space: nowrap;\n  justify-content: flex-end;\n}\ndiv.dataTables_wrapper div.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 1em 0;\n}\n\ndiv.dataTables_scrollHead table.dataTable {\n  margin-bottom: 0 !important;\n}\n\ndiv.dataTables_scrollBody > table {\n  border-top: none;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\ndiv.dataTables_scrollBody > table > thead .sorting:before,\ndiv.dataTables_scrollBody > table > thead .sorting_asc:before,\ndiv.dataTables_scrollBody > table > thead .sorting_desc:before,\ndiv.dataTables_scrollBody > table > thead .sorting:after,\ndiv.dataTables_scrollBody > table > thead .sorting_asc:after,\ndiv.dataTables_scrollBody > table > thead .sorting_desc:after {\n  display: none;\n}\ndiv.dataTables_scrollBody > table > tbody tr:first-child th,\ndiv.dataTables_scrollBody > table > tbody tr:first-child td {\n  border-top: none;\n}\n\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner {\n  box-sizing: content-box;\n}\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner > table {\n  margin-top: 0 !important;\n  border-top: none;\n}\n\n@media screen and (max-width: 767px) {\n  div.dataTables_wrapper div.dataTables_length,\n  div.dataTables_wrapper div.dataTables_filter,\n  div.dataTables_wrapper div.dataTables_info,\n  div.dataTables_wrapper div.dataTables_paginate {\n    text-align: center;\n  }\n  div.dataTables_wrapper div.dataTables_paginate ul.pagination {\n    justify-content: center !important;\n  }\n}\ntable.dataTable.table-sm > thead > tr > th:not(.sorting_disabled) {\n  padding-right: 20px;\n}\n\ntable.table-bordered.dataTable {\n  border-right-width: 0;\n}\ntable.table-bordered.dataTable th,\ntable.table-bordered.dataTable td {\n  border-left-width: 0;\n}\ntable.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,\ntable.table-bordered.dataTable td:last-child,\ntable.table-bordered.dataTable td:last-child {\n  border-right-width: 1px;\n}\ntable.table-bordered.dataTable tbody th,\ntable.table-bordered.dataTable tbody td {\n  border-bottom-width: 0;\n}\n\ndiv.dataTables_scrollHead table.table-bordered {\n  border-bottom-width: 0;\n}\n\ndiv.table-responsive > div.dataTables_wrapper > div.row {\n  margin: 0;\n}\ndiv.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:first-child {\n  padding-left: 0;\n}\ndiv.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:last-child {\n  padding-right: 0;\n}\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/css/dataTables.bootstrap5.css",
    "content": "@charset \"UTF-8\";\n:root {\n  --dt-row-selected: 13, 110, 253;\n  --dt-row-selected-text: 255, 255, 255;\n  --dt-row-selected-link: 9, 10, 11;\n  --dt-row-stripe: 0, 0, 0;\n  --dt-row-hover: 0, 0, 0;\n  --dt-column-ordering: 0, 0, 0;\n  --dt-html-background: white;\n}\n:root.dark {\n  --dt-html-background: rgb(33, 37, 41);\n}\n\ntable.dataTable td.dt-control {\n  text-align: center;\n  cursor: pointer;\n}\ntable.dataTable td.dt-control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"▶\";\n}\ntable.dataTable tr.dt-hasChild td.dt-control:before {\n  content: \"▼\";\n}\n\nhtml.dark table.dataTable td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\nhtml.dark table.dataTable tr.dt-hasChild td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\n\ntable.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting_asc_disabled, table.dataTable thead > tr > th.sorting_desc_disabled,\ntable.dataTable thead > tr > td.sorting,\ntable.dataTable thead > tr > td.sorting_asc,\ntable.dataTable thead > tr > td.sorting_desc,\ntable.dataTable thead > tr > td.sorting_asc_disabled,\ntable.dataTable thead > tr > td.sorting_desc_disabled {\n  cursor: pointer;\n  position: relative;\n  padding-right: 26px;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  position: absolute;\n  display: block;\n  opacity: 0.125;\n  right: 10px;\n  line-height: 9px;\n  font-size: 0.8em;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before {\n  bottom: 50%;\n  content: \"▲\";\n  content: \"▲\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  top: 50%;\n  content: \"▼\";\n  content: \"▼\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:after {\n  opacity: 0.6;\n}\ntable.dataTable thead > tr > th.sorting_desc_disabled:after, table.dataTable thead > tr > th.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before {\n  display: none;\n}\ntable.dataTable thead > tr > th:active,\ntable.dataTable thead > tr > td:active {\n  outline: none;\n}\n\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > th:before, div.dataTables_scrollBody > table.dataTable > thead > tr > th:after,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:before,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:after {\n  display: none;\n}\n\ndiv.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 2px;\n  z-index: 10;\n}\ndiv.dataTables_processing > div:last-child {\n  position: relative;\n  width: 80px;\n  height: 15px;\n  margin: 1em auto;\n}\ndiv.dataTables_processing > div:last-child > div {\n  position: absolute;\n  top: 0;\n  width: 13px;\n  height: 13px;\n  border-radius: 50%;\n  background: rgb(13, 110, 253);\n  background: rgb(var(--dt-row-selected));\n  animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(1) {\n  left: 8px;\n  animation: datatables-loader-1 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(2) {\n  left: 8px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(3) {\n  left: 32px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(4) {\n  left: 56px;\n  animation: datatables-loader-3 0.6s infinite;\n}\n\n@keyframes datatables-loader-1 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes datatables-loader-3 {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    transform: scale(0);\n  }\n}\n@keyframes datatables-loader-2 {\n  0% {\n    transform: translate(0, 0);\n  }\n  100% {\n    transform: translate(24px, 0);\n  }\n}\ntable.dataTable.nowrap th, table.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable th.dt-left,\ntable.dataTable td.dt-left {\n  text-align: left;\n}\ntable.dataTable th.dt-center,\ntable.dataTable td.dt-center,\ntable.dataTable td.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable th.dt-right,\ntable.dataTable td.dt-right {\n  text-align: right;\n}\ntable.dataTable th.dt-justify,\ntable.dataTable td.dt-justify {\n  text-align: justify;\n}\ntable.dataTable th.dt-nowrap,\ntable.dataTable td.dt-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable thead th,\ntable.dataTable thead td,\ntable.dataTable tfoot th,\ntable.dataTable tfoot td {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-left,\ntable.dataTable thead td.dt-head-left,\ntable.dataTable tfoot th.dt-head-left,\ntable.dataTable tfoot td.dt-head-left {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-center,\ntable.dataTable thead td.dt-head-center,\ntable.dataTable tfoot th.dt-head-center,\ntable.dataTable tfoot td.dt-head-center {\n  text-align: center;\n}\ntable.dataTable thead th.dt-head-right,\ntable.dataTable thead td.dt-head-right,\ntable.dataTable tfoot th.dt-head-right,\ntable.dataTable tfoot td.dt-head-right {\n  text-align: right;\n}\ntable.dataTable thead th.dt-head-justify,\ntable.dataTable thead td.dt-head-justify,\ntable.dataTable tfoot th.dt-head-justify,\ntable.dataTable tfoot td.dt-head-justify {\n  text-align: justify;\n}\ntable.dataTable thead th.dt-head-nowrap,\ntable.dataTable thead td.dt-head-nowrap,\ntable.dataTable tfoot th.dt-head-nowrap,\ntable.dataTable tfoot td.dt-head-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable tbody th.dt-body-left,\ntable.dataTable tbody td.dt-body-left {\n  text-align: left;\n}\ntable.dataTable tbody th.dt-body-center,\ntable.dataTable tbody td.dt-body-center {\n  text-align: center;\n}\ntable.dataTable tbody th.dt-body-right,\ntable.dataTable tbody td.dt-body-right {\n  text-align: right;\n}\ntable.dataTable tbody th.dt-body-justify,\ntable.dataTable tbody td.dt-body-justify {\n  text-align: justify;\n}\ntable.dataTable tbody th.dt-body-nowrap,\ntable.dataTable tbody td.dt-body-nowrap {\n  white-space: nowrap;\n}\n\n/*! Bootstrap 5 integration for DataTables\n *\n * ©2020 SpryMedia Ltd, all rights reserved.\n * License: MIT datatables.net/license/mit\n */\ntable.dataTable {\n  clear: both;\n  margin-top: 6px !important;\n  margin-bottom: 6px !important;\n  max-width: none !important;\n  border-collapse: separate !important;\n  border-spacing: 0;\n}\ntable.dataTable td,\ntable.dataTable th {\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\ntable.dataTable td.dataTables_empty,\ntable.dataTable th.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable.nowrap th,\ntable.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable.table-striped > tbody > tr:nth-of-type(2n+1) > * {\n  box-shadow: none;\n}\ntable.dataTable > tbody > tr {\n  background-color: transparent;\n}\ntable.dataTable > tbody > tr.selected > * {\n  box-shadow: inset 0 0 0 9999px rgb(13, 110, 253);\n  box-shadow: inset 0 0 0 9999px rgb(var(--dt-row-selected));\n  color: rgb(255, 255, 255);\n  color: rgb(var(--dt-row-selected-text));\n}\ntable.dataTable > tbody > tr.selected a {\n  color: rgb(9, 10, 11);\n  color: rgb(var(--dt-row-selected-link));\n}\ntable.dataTable.table-striped > tbody > tr:nth-of-type(2n+1) > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.05);\n}\ntable.dataTable.table-striped > tbody > tr:nth-of-type(2n+1).selected > * {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.95);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.95);\n}\ntable.dataTable.table-hover > tbody > tr:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.075);\n}\ntable.dataTable.table-hover > tbody > tr.selected:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.975);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.975);\n}\n\ndiv.dataTables_wrapper div.dataTables_length label {\n  font-weight: normal;\n  text-align: left;\n  white-space: nowrap;\n}\ndiv.dataTables_wrapper div.dataTables_length select {\n  width: auto;\n  display: inline-block;\n}\ndiv.dataTables_wrapper div.dataTables_filter {\n  text-align: right;\n}\ndiv.dataTables_wrapper div.dataTables_filter label {\n  font-weight: normal;\n  white-space: nowrap;\n  text-align: left;\n}\ndiv.dataTables_wrapper div.dataTables_filter input {\n  margin-left: 0.5em;\n  display: inline-block;\n  width: auto;\n}\ndiv.dataTables_wrapper div.dataTables_info {\n  padding-top: 0.85em;\n}\ndiv.dataTables_wrapper div.dataTables_paginate {\n  margin: 0;\n  white-space: nowrap;\n  text-align: right;\n}\ndiv.dataTables_wrapper div.dataTables_paginate ul.pagination {\n  margin: 2px 0;\n  white-space: nowrap;\n  justify-content: flex-end;\n}\ndiv.dataTables_wrapper div.dt-row {\n  position: relative;\n}\n\ndiv.dataTables_scrollHead table.dataTable {\n  margin-bottom: 0 !important;\n}\n\ndiv.dataTables_scrollBody > table {\n  border-top: none;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\ndiv.dataTables_scrollBody > table > thead .sorting:before,\ndiv.dataTables_scrollBody > table > thead .sorting_asc:before,\ndiv.dataTables_scrollBody > table > thead .sorting_desc:before,\ndiv.dataTables_scrollBody > table > thead .sorting:after,\ndiv.dataTables_scrollBody > table > thead .sorting_asc:after,\ndiv.dataTables_scrollBody > table > thead .sorting_desc:after {\n  display: none;\n}\ndiv.dataTables_scrollBody > table > tbody tr:first-child th,\ndiv.dataTables_scrollBody > table > tbody tr:first-child td {\n  border-top: none;\n}\n\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner {\n  box-sizing: content-box;\n}\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner > table {\n  margin-top: 0 !important;\n  border-top: none;\n}\n\n@media screen and (max-width: 767px) {\n  div.dataTables_wrapper div.dataTables_length,\n  div.dataTables_wrapper div.dataTables_filter,\n  div.dataTables_wrapper div.dataTables_info,\n  div.dataTables_wrapper div.dataTables_paginate {\n    text-align: center;\n  }\n  div.dataTables_wrapper div.dataTables_paginate ul.pagination {\n    justify-content: center !important;\n  }\n}\ntable.dataTable.table-sm > thead > tr > th:not(.sorting_disabled) {\n  padding-right: 20px;\n}\ntable.dataTable.table-sm > thead > tr > th:not(.sorting_disabled):before, table.dataTable.table-sm > thead > tr > th:not(.sorting_disabled):after {\n  right: 5px;\n}\n\ntable.table-bordered.dataTable {\n  border-right-width: 0;\n}\ntable.table-bordered.dataTable thead tr:first-child th,\ntable.table-bordered.dataTable thead tr:first-child td {\n  border-top-width: 1px;\n}\ntable.table-bordered.dataTable th,\ntable.table-bordered.dataTable td {\n  border-left-width: 0;\n}\ntable.table-bordered.dataTable th:first-child, table.table-bordered.dataTable th:first-child,\ntable.table-bordered.dataTable td:first-child,\ntable.table-bordered.dataTable td:first-child {\n  border-left-width: 1px;\n}\ntable.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,\ntable.table-bordered.dataTable td:last-child,\ntable.table-bordered.dataTable td:last-child {\n  border-right-width: 1px;\n}\ntable.table-bordered.dataTable th,\ntable.table-bordered.dataTable td {\n  border-bottom-width: 1px;\n}\n\ndiv.dataTables_scrollHead table.table-bordered {\n  border-bottom-width: 0;\n}\n\ndiv.table-responsive > div.dataTables_wrapper > div.row {\n  margin: 0;\n}\ndiv.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:first-child {\n  padding-left: 0;\n}\ndiv.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:last-child {\n  padding-right: 0;\n}\n\n:root[data-bs-theme=dark] {\n  --dt-row-hover: 255, 255, 255;\n  --dt-row-stripe: 255, 255, 255;\n  --dt-column-ordering: 255, 255, 255;\n}\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/css/dataTables.bulma.css",
    "content": "@charset \"UTF-8\";\n:root {\n  --dt-row-selected: 0, 209, 178;\n  --dt-row-selected-text: 255, 255, 255;\n  --dt-row-selected-link: 9, 10, 11;\n  --dt-row-stripe: 0, 0, 0;\n  --dt-row-hover: 0, 0, 0;\n  --dt-column-ordering: 0, 0, 0;\n  --dt-html-background: white;\n}\n:root.dark {\n  --dt-html-background: rgb(33, 37, 41);\n}\n\ntable.dataTable td.dt-control {\n  text-align: center;\n  cursor: pointer;\n}\ntable.dataTable td.dt-control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"▶\";\n}\ntable.dataTable tr.dt-hasChild td.dt-control:before {\n  content: \"▼\";\n}\n\nhtml.dark table.dataTable td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\nhtml.dark table.dataTable tr.dt-hasChild td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\n\ntable.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting_asc_disabled, table.dataTable thead > tr > th.sorting_desc_disabled,\ntable.dataTable thead > tr > td.sorting,\ntable.dataTable thead > tr > td.sorting_asc,\ntable.dataTable thead > tr > td.sorting_desc,\ntable.dataTable thead > tr > td.sorting_asc_disabled,\ntable.dataTable thead > tr > td.sorting_desc_disabled {\n  cursor: pointer;\n  position: relative;\n  padding-right: 26px;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  position: absolute;\n  display: block;\n  opacity: 0.125;\n  right: 10px;\n  line-height: 9px;\n  font-size: 0.8em;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before {\n  bottom: 50%;\n  content: \"▲\";\n  content: \"▲\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  top: 50%;\n  content: \"▼\";\n  content: \"▼\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:after {\n  opacity: 0.6;\n}\ntable.dataTable thead > tr > th.sorting_desc_disabled:after, table.dataTable thead > tr > th.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before {\n  display: none;\n}\ntable.dataTable thead > tr > th:active,\ntable.dataTable thead > tr > td:active {\n  outline: none;\n}\n\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > th:before, div.dataTables_scrollBody > table.dataTable > thead > tr > th:after,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:before,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:after {\n  display: none;\n}\n\ndiv.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 2px;\n  z-index: 10;\n}\ndiv.dataTables_processing > div:last-child {\n  position: relative;\n  width: 80px;\n  height: 15px;\n  margin: 1em auto;\n}\ndiv.dataTables_processing > div:last-child > div {\n  position: absolute;\n  top: 0;\n  width: 13px;\n  height: 13px;\n  border-radius: 50%;\n  background: rgb(0, 209, 178);\n  background: rgb(var(--dt-row-selected));\n  animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(1) {\n  left: 8px;\n  animation: datatables-loader-1 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(2) {\n  left: 8px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(3) {\n  left: 32px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(4) {\n  left: 56px;\n  animation: datatables-loader-3 0.6s infinite;\n}\n\n@keyframes datatables-loader-1 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes datatables-loader-3 {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    transform: scale(0);\n  }\n}\n@keyframes datatables-loader-2 {\n  0% {\n    transform: translate(0, 0);\n  }\n  100% {\n    transform: translate(24px, 0);\n  }\n}\ntable.dataTable.nowrap th, table.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable th.dt-left,\ntable.dataTable td.dt-left {\n  text-align: left;\n}\ntable.dataTable th.dt-center,\ntable.dataTable td.dt-center,\ntable.dataTable td.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable th.dt-right,\ntable.dataTable td.dt-right {\n  text-align: right;\n}\ntable.dataTable th.dt-justify,\ntable.dataTable td.dt-justify {\n  text-align: justify;\n}\ntable.dataTable th.dt-nowrap,\ntable.dataTable td.dt-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable thead th,\ntable.dataTable thead td,\ntable.dataTable tfoot th,\ntable.dataTable tfoot td {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-left,\ntable.dataTable thead td.dt-head-left,\ntable.dataTable tfoot th.dt-head-left,\ntable.dataTable tfoot td.dt-head-left {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-center,\ntable.dataTable thead td.dt-head-center,\ntable.dataTable tfoot th.dt-head-center,\ntable.dataTable tfoot td.dt-head-center {\n  text-align: center;\n}\ntable.dataTable thead th.dt-head-right,\ntable.dataTable thead td.dt-head-right,\ntable.dataTable tfoot th.dt-head-right,\ntable.dataTable tfoot td.dt-head-right {\n  text-align: right;\n}\ntable.dataTable thead th.dt-head-justify,\ntable.dataTable thead td.dt-head-justify,\ntable.dataTable tfoot th.dt-head-justify,\ntable.dataTable tfoot td.dt-head-justify {\n  text-align: justify;\n}\ntable.dataTable thead th.dt-head-nowrap,\ntable.dataTable thead td.dt-head-nowrap,\ntable.dataTable tfoot th.dt-head-nowrap,\ntable.dataTable tfoot td.dt-head-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable tbody th.dt-body-left,\ntable.dataTable tbody td.dt-body-left {\n  text-align: left;\n}\ntable.dataTable tbody th.dt-body-center,\ntable.dataTable tbody td.dt-body-center {\n  text-align: center;\n}\ntable.dataTable tbody th.dt-body-right,\ntable.dataTable tbody td.dt-body-right {\n  text-align: right;\n}\ntable.dataTable tbody th.dt-body-justify,\ntable.dataTable tbody td.dt-body-justify {\n  text-align: justify;\n}\ntable.dataTable tbody th.dt-body-nowrap,\ntable.dataTable tbody td.dt-body-nowrap {\n  white-space: nowrap;\n}\n\n/*! DataTables Bulma integration\n * ©2020 SpryMedia Ltd - datatables.net/license\n */\ntable.dataTable {\n  clear: both;\n  margin-top: 6px !important;\n  margin-bottom: 6px !important;\n  max-width: none !important;\n  border-collapse: separate !important;\n  border-spacing: 0;\n}\ntable.dataTable td,\ntable.dataTable th {\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\ntable.dataTable td.dataTables_empty,\ntable.dataTable th.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable.nowrap th,\ntable.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable.table.is-striped > tbody > tr:nth-child(2n) {\n  background-color: transparent;\n}\ntable.dataTable > tbody > tr {\n  background-color: transparent;\n}\ntable.dataTable > tbody > tr.selected > * {\n  box-shadow: inset 0 0 0 9999px rgb(0, 209, 178);\n  box-shadow: inset 0 0 0 9999px rgb(var(--dt-row-selected));\n  color: rgb(255, 255, 255);\n  color: rgb(var(--dt-row-selected-text));\n}\ntable.dataTable > tbody > tr.selected a {\n  color: rgb(9, 10, 11);\n  color: rgb(var(--dt-row-selected-link));\n}\ntable.dataTable.is-striped > tbody > tr.odd > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.019);\n}\ntable.dataTable.is-striped > tbody > tr.odd.selected > * {\n  box-shadow: inset 0 0 0 9999px rgba(0, 209, 178, 0.919);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.919);\n}\ntable.dataTable.is-hoverable > tbody > tr:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.39);\n}\ntable.dataTable.is-hoverable > tbody > tr.selected:hover > * {\n  box-shadow: inset 0 0 0 9999px #00d1b2;\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 1.29);\n}\n\ndiv.dataTables_wrapper div.dataTables_length label {\n  font-weight: normal;\n  text-align: left;\n  white-space: nowrap;\n}\ndiv.dataTables_wrapper div.dataTables_length div {\n  vertical-align: middle;\n}\ndiv.dataTables_wrapper div.dataTables_length select {\n  width: auto;\n  display: inline-block;\n  vertical-align: middle;\n}\ndiv.dataTables_wrapper div.dataTables_filter {\n  text-align: right;\n}\ndiv.dataTables_wrapper div.dataTables_filter label {\n  font-weight: normal;\n  white-space: nowrap;\n  text-align: left;\n}\ndiv.dataTables_wrapper div.dataTables_filter input {\n  margin-left: 0.5em;\n  width: auto;\n  vertical-align: middle;\n}\ndiv.dataTables_wrapper div.dataTables_info {\n  padding-top: 0.5em;\n}\ndiv.dataTables_wrapper div.dataTables_paginate ul {\n  justify-content: flex-end;\n  list-style: none;\n  margin: 0;\n}\ndiv.dataTables_wrapper div.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 1em 0;\n}\n\ndiv.dataTables_scrollHead table.dataTable {\n  margin-bottom: 0 !important;\n}\n\ndiv.dataTables_scrollBody table {\n  border-top: none;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\ndiv.dataTables_scrollBody table thead .sorting:before,\ndiv.dataTables_scrollBody table thead .sorting_asc:before,\ndiv.dataTables_scrollBody table thead .sorting_desc:before,\ndiv.dataTables_scrollBody table thead .sorting:after,\ndiv.dataTables_scrollBody table thead .sorting_asc:after,\ndiv.dataTables_scrollBody table thead .sorting_desc:after {\n  display: none;\n}\ndiv.dataTables_scrollBody table tbody tr:first-child th,\ndiv.dataTables_scrollBody table tbody tr:first-child td {\n  border-top: none;\n}\n\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner {\n  box-sizing: content-box;\n}\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner > table {\n  margin-top: 0 !important;\n  border-top: none;\n}\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/css/dataTables.dataTables.css",
    "content": ""
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/css/dataTables.foundation.css",
    "content": "@charset \"UTF-8\";\n:root {\n  --dt-row-selected: 0, 137, 182;\n  --dt-row-selected-text: 255, 255, 255;\n  --dt-row-selected-link: 9, 10, 11;\n  --dt-row-stripe: 0, 0, 0;\n  --dt-row-hover: 0, 0, 0;\n  --dt-column-ordering: 0, 0, 0;\n  --dt-html-background: white;\n}\n:root.dark {\n  --dt-html-background: rgb(33, 37, 41);\n}\n\ntable.dataTable td.dt-control {\n  text-align: center;\n  cursor: pointer;\n}\ntable.dataTable td.dt-control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"▶\";\n}\ntable.dataTable tr.dt-hasChild td.dt-control:before {\n  content: \"▼\";\n}\n\nhtml.dark table.dataTable td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\nhtml.dark table.dataTable tr.dt-hasChild td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\n\ntable.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting_asc_disabled, table.dataTable thead > tr > th.sorting_desc_disabled,\ntable.dataTable thead > tr > td.sorting,\ntable.dataTable thead > tr > td.sorting_asc,\ntable.dataTable thead > tr > td.sorting_desc,\ntable.dataTable thead > tr > td.sorting_asc_disabled,\ntable.dataTable thead > tr > td.sorting_desc_disabled {\n  cursor: pointer;\n  position: relative;\n  padding-right: 26px;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  position: absolute;\n  display: block;\n  opacity: 0.125;\n  right: 10px;\n  line-height: 9px;\n  font-size: 0.8em;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before {\n  bottom: 50%;\n  content: \"▲\";\n  content: \"▲\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  top: 50%;\n  content: \"▼\";\n  content: \"▼\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:after {\n  opacity: 0.6;\n}\ntable.dataTable thead > tr > th.sorting_desc_disabled:after, table.dataTable thead > tr > th.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before {\n  display: none;\n}\ntable.dataTable thead > tr > th:active,\ntable.dataTable thead > tr > td:active {\n  outline: none;\n}\n\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > th:before, div.dataTables_scrollBody > table.dataTable > thead > tr > th:after,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:before,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:after {\n  display: none;\n}\n\ndiv.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 2px;\n  z-index: 10;\n}\ndiv.dataTables_processing > div:last-child {\n  position: relative;\n  width: 80px;\n  height: 15px;\n  margin: 1em auto;\n}\ndiv.dataTables_processing > div:last-child > div {\n  position: absolute;\n  top: 0;\n  width: 13px;\n  height: 13px;\n  border-radius: 50%;\n  background: rgb(0, 137, 182);\n  background: rgb(var(--dt-row-selected));\n  animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(1) {\n  left: 8px;\n  animation: datatables-loader-1 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(2) {\n  left: 8px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(3) {\n  left: 32px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(4) {\n  left: 56px;\n  animation: datatables-loader-3 0.6s infinite;\n}\n\n@keyframes datatables-loader-1 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes datatables-loader-3 {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    transform: scale(0);\n  }\n}\n@keyframes datatables-loader-2 {\n  0% {\n    transform: translate(0, 0);\n  }\n  100% {\n    transform: translate(24px, 0);\n  }\n}\ntable.dataTable.nowrap th, table.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable th.dt-left,\ntable.dataTable td.dt-left {\n  text-align: left;\n}\ntable.dataTable th.dt-center,\ntable.dataTable td.dt-center,\ntable.dataTable td.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable th.dt-right,\ntable.dataTable td.dt-right {\n  text-align: right;\n}\ntable.dataTable th.dt-justify,\ntable.dataTable td.dt-justify {\n  text-align: justify;\n}\ntable.dataTable th.dt-nowrap,\ntable.dataTable td.dt-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable thead th,\ntable.dataTable thead td,\ntable.dataTable tfoot th,\ntable.dataTable tfoot td {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-left,\ntable.dataTable thead td.dt-head-left,\ntable.dataTable tfoot th.dt-head-left,\ntable.dataTable tfoot td.dt-head-left {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-center,\ntable.dataTable thead td.dt-head-center,\ntable.dataTable tfoot th.dt-head-center,\ntable.dataTable tfoot td.dt-head-center {\n  text-align: center;\n}\ntable.dataTable thead th.dt-head-right,\ntable.dataTable thead td.dt-head-right,\ntable.dataTable tfoot th.dt-head-right,\ntable.dataTable tfoot td.dt-head-right {\n  text-align: right;\n}\ntable.dataTable thead th.dt-head-justify,\ntable.dataTable thead td.dt-head-justify,\ntable.dataTable tfoot th.dt-head-justify,\ntable.dataTable tfoot td.dt-head-justify {\n  text-align: justify;\n}\ntable.dataTable thead th.dt-head-nowrap,\ntable.dataTable thead td.dt-head-nowrap,\ntable.dataTable tfoot th.dt-head-nowrap,\ntable.dataTable tfoot td.dt-head-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable tbody th.dt-body-left,\ntable.dataTable tbody td.dt-body-left {\n  text-align: left;\n}\ntable.dataTable tbody th.dt-body-center,\ntable.dataTable tbody td.dt-body-center {\n  text-align: center;\n}\ntable.dataTable tbody th.dt-body-right,\ntable.dataTable tbody td.dt-body-right {\n  text-align: right;\n}\ntable.dataTable tbody th.dt-body-justify,\ntable.dataTable tbody td.dt-body-justify {\n  text-align: justify;\n}\ntable.dataTable tbody th.dt-body-nowrap,\ntable.dataTable tbody td.dt-body-nowrap {\n  white-space: nowrap;\n}\n\ntable.dataTable {\n  clear: both;\n  margin: 0.5em 0 !important;\n  max-width: none !important;\n  width: 100%;\n}\ntable.dataTable td,\ntable.dataTable th {\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\ntable.dataTable td.dataTables_empty,\ntable.dataTable th.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable.nowrap th, table.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable tr:nth-child(2n) {\n  background-color: transparent;\n}\ntable.dataTable > tbody > tr {\n  background-color: transparent;\n}\ntable.dataTable > tbody > tr.selected > * {\n  box-shadow: inset 0 0 0 9999px rgb(0, 137, 182);\n  box-shadow: inset 0 0 0 9999px rgb(var(--dt-row-selected));\n  color: rgb(255, 255, 255);\n  color: rgb(var(--dt-row-selected-text));\n}\ntable.dataTable > tbody > tr.selected a {\n  color: rgb(9, 10, 11);\n  color: rgb(var(--dt-row-selected-link));\n}\ntable.dataTable > tbody > tr.even > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.054);\n}\ntable.dataTable > tbody > tr.even.selected > * {\n  box-shadow: inset 0 0 0 9999px rgba(0, 137, 182, 0.954);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.954);\n}\ntable.dataTable.hover > tbody > tr:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.074);\n}\ntable.dataTable.hover > tbody > tr.selected:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(0, 137, 182, 0.974);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.974);\n}\n\ndiv.dataTables_wrapper {\n  position: relative;\n}\ndiv.dataTables_wrapper div.dataTables_length label {\n  float: left;\n  text-align: left;\n  margin-bottom: 0;\n}\ndiv.dataTables_wrapper div.dataTables_length select {\n  width: 75px;\n  margin-bottom: 0;\n}\ndiv.dataTables_wrapper div.dataTables_filter label {\n  float: right;\n  margin-bottom: 0;\n}\ndiv.dataTables_wrapper div.dataTables_filter input {\n  display: inline-block !important;\n  width: auto !important;\n  margin-bottom: 0;\n  margin-left: 0.5em;\n}\ndiv.dataTables_wrapper div.dataTables_info {\n  padding-top: 2px;\n}\ndiv.dataTables_wrapper div.dataTables_paginate {\n  float: right;\n  margin: 0;\n}\ndiv.dataTables_wrapper div.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 1rem 0;\n}\n\ndiv.dataTables_scrollHead table {\n  margin-bottom: 0 !important;\n}\n\ndiv.dataTables_scrollBody table {\n  border-top: none;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\ndiv.dataTables_scrollBody table tbody tr:first-child th,\ndiv.dataTables_scrollBody table tbody tr:first-child td {\n  border-top: none;\n}\n\ndiv.dataTables_scrollFoot table {\n  margin-top: 0 !important;\n  border-top: none;\n}\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/css/dataTables.jqueryui.css",
    "content": "@charset \"UTF-8\";\n:root {\n  --dt-row-selected: 13, 110, 253;\n  --dt-row-selected-text: 255, 255, 255;\n  --dt-row-selected-link: 9, 10, 11;\n  --dt-row-stripe: 0, 0, 0;\n  --dt-row-hover: 0, 0, 0;\n  --dt-column-ordering: 0, 0, 0;\n  --dt-html-background: white;\n}\n:root.dark {\n  --dt-html-background: rgb(33, 37, 41);\n}\n\ntable.dataTable td.dt-control {\n  text-align: center;\n  cursor: pointer;\n}\ntable.dataTable td.dt-control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"▶\";\n}\ntable.dataTable tr.dt-hasChild td.dt-control:before {\n  content: \"▼\";\n}\n\nhtml.dark table.dataTable td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\nhtml.dark table.dataTable tr.dt-hasChild td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n:root {\n  --dt-row-selected: 13, 110, 253;\n  --dt-row-selected-text: 255, 255, 255;\n  --dt-row-selected-link: 9, 10, 11;\n  --dt-row-stripe: 0, 0, 0;\n  --dt-row-hover: 0, 0, 0;\n  --dt-column-ordering: 0, 0, 0;\n  --dt-html-background: white;\n}\n:root.dark {\n  --dt-html-background: rgb(33, 37, 41);\n}\n\ntable.dataTable td.dt-control {\n  text-align: center;\n  cursor: pointer;\n}\ntable.dataTable td.dt-control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"▶\";\n}\ntable.dataTable tr.dt-hasChild td.dt-control:before {\n  content: \"▼\";\n}\n\nhtml.dark table.dataTable td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\nhtml.dark table.dataTable tr.dt-hasChild td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\n\ntable.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting_asc_disabled, table.dataTable thead > tr > th.sorting_desc_disabled,\ntable.dataTable thead > tr > td.sorting,\ntable.dataTable thead > tr > td.sorting_asc,\ntable.dataTable thead > tr > td.sorting_desc,\ntable.dataTable thead > tr > td.sorting_asc_disabled,\ntable.dataTable thead > tr > td.sorting_desc_disabled {\n  cursor: pointer;\n  position: relative;\n  padding-right: 26px;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  position: absolute;\n  display: block;\n  opacity: 0.125;\n  right: 10px;\n  line-height: 9px;\n  font-size: 0.8em;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before {\n  bottom: 50%;\n  content: \"▲\";\n  content: \"▲\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  top: 50%;\n  content: \"▼\";\n  content: \"▼\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:after {\n  opacity: 0.6;\n}\ntable.dataTable thead > tr > th.sorting_desc_disabled:after, table.dataTable thead > tr > th.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before {\n  display: none;\n}\ntable.dataTable thead > tr > th:active,\ntable.dataTable thead > tr > td:active {\n  outline: none;\n}\n\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > th:before, div.dataTables_scrollBody > table.dataTable > thead > tr > th:after,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:before,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:after {\n  display: none;\n}\n\ndiv.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 2px;\n  z-index: 10;\n}\ndiv.dataTables_processing > div:last-child {\n  position: relative;\n  width: 80px;\n  height: 15px;\n  margin: 1em auto;\n}\ndiv.dataTables_processing > div:last-child > div {\n  position: absolute;\n  top: 0;\n  width: 13px;\n  height: 13px;\n  border-radius: 50%;\n  background: rgb(13, 110, 253);\n  background: rgb(var(--dt-row-selected));\n  animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(1) {\n  left: 8px;\n  animation: datatables-loader-1 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(2) {\n  left: 8px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(3) {\n  left: 32px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(4) {\n  left: 56px;\n  animation: datatables-loader-3 0.6s infinite;\n}\n\n@keyframes datatables-loader-1 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes datatables-loader-3 {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    transform: scale(0);\n  }\n}\n@keyframes datatables-loader-2 {\n  0% {\n    transform: translate(0, 0);\n  }\n  100% {\n    transform: translate(24px, 0);\n  }\n}\ntable.dataTable.nowrap th, table.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable th.dt-left,\ntable.dataTable td.dt-left {\n  text-align: left;\n}\ntable.dataTable th.dt-center,\ntable.dataTable td.dt-center,\ntable.dataTable td.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable th.dt-right,\ntable.dataTable td.dt-right {\n  text-align: right;\n}\ntable.dataTable th.dt-justify,\ntable.dataTable td.dt-justify {\n  text-align: justify;\n}\ntable.dataTable th.dt-nowrap,\ntable.dataTable td.dt-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable thead th,\ntable.dataTable thead td,\ntable.dataTable tfoot th,\ntable.dataTable tfoot td {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-left,\ntable.dataTable thead td.dt-head-left,\ntable.dataTable tfoot th.dt-head-left,\ntable.dataTable tfoot td.dt-head-left {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-center,\ntable.dataTable thead td.dt-head-center,\ntable.dataTable tfoot th.dt-head-center,\ntable.dataTable tfoot td.dt-head-center {\n  text-align: center;\n}\ntable.dataTable thead th.dt-head-right,\ntable.dataTable thead td.dt-head-right,\ntable.dataTable tfoot th.dt-head-right,\ntable.dataTable tfoot td.dt-head-right {\n  text-align: right;\n}\ntable.dataTable thead th.dt-head-justify,\ntable.dataTable thead td.dt-head-justify,\ntable.dataTable tfoot th.dt-head-justify,\ntable.dataTable tfoot td.dt-head-justify {\n  text-align: justify;\n}\ntable.dataTable thead th.dt-head-nowrap,\ntable.dataTable thead td.dt-head-nowrap,\ntable.dataTable tfoot th.dt-head-nowrap,\ntable.dataTable tfoot td.dt-head-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable tbody th.dt-body-left,\ntable.dataTable tbody td.dt-body-left {\n  text-align: left;\n}\ntable.dataTable tbody th.dt-body-center,\ntable.dataTable tbody td.dt-body-center {\n  text-align: center;\n}\ntable.dataTable tbody th.dt-body-right,\ntable.dataTable tbody td.dt-body-right {\n  text-align: right;\n}\ntable.dataTable tbody th.dt-body-justify,\ntable.dataTable tbody td.dt-body-justify {\n  text-align: justify;\n}\ntable.dataTable tbody th.dt-body-nowrap,\ntable.dataTable tbody td.dt-body-nowrap {\n  white-space: nowrap;\n}\n\n/*\n * Table styles\n */\ntable.dataTable {\n  width: 100%;\n  margin: 0 auto;\n  clear: both;\n  border-collapse: separate;\n  border-spacing: 0;\n  /*\n   * Header and footer styles\n   */\n  /*\n   * Body styles\n   */\n}\ntable.dataTable thead th,\ntable.dataTable tfoot th {\n  font-weight: bold;\n}\ntable.dataTable > thead > tr > th,\ntable.dataTable > thead > tr > td {\n  padding: 10px;\n}\ntable.dataTable > thead > tr > th:active,\ntable.dataTable > thead > tr > td:active {\n  outline: none;\n}\ntable.dataTable > tfoot > tr > th,\ntable.dataTable > tfoot > tr > td {\n  padding: 10px 10px 6px 10px;\n}\ntable.dataTable tbody tr {\n  background-color: transparent;\n}\ntable.dataTable tbody tr.selected > * {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.9);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.9);\n  color: rgb(255, 255, 255);\n  color: rgb(var(--dt-row-selected-text));\n}\ntable.dataTable tbody tr.selected a {\n  color: rgb(9, 10, 11);\n  color: rgb(var(--dt-row-selected-link));\n}\ntable.dataTable tbody th,\ntable.dataTable tbody td {\n  padding: 8px 10px;\n}\ntable.dataTable.row-border > tbody > tr > th,\ntable.dataTable.row-border > tbody > tr > td, table.dataTable.display > tbody > tr > th,\ntable.dataTable.display > tbody > tr > td {\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\ntable.dataTable.row-border > tbody > tr:first-child > th,\ntable.dataTable.row-border > tbody > tr:first-child > td, table.dataTable.display > tbody > tr:first-child > th,\ntable.dataTable.display > tbody > tr:first-child > td {\n  border-top: none;\n}\ntable.dataTable.row-border > tbody > tr.selected + tr.selected > td, table.dataTable.display > tbody > tr.selected + tr.selected > td {\n  border-top-color: #0262ef;\n}\ntable.dataTable.cell-border > tbody > tr > th,\ntable.dataTable.cell-border > tbody > tr > td {\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n  border-right: 1px solid rgba(0, 0, 0, 0.15);\n}\ntable.dataTable.cell-border > tbody > tr > th:first-child,\ntable.dataTable.cell-border > tbody > tr > td:first-child {\n  border-left: 1px solid rgba(0, 0, 0, 0.15);\n}\ntable.dataTable.cell-border > tbody > tr:first-child > th,\ntable.dataTable.cell-border > tbody > tr:first-child > td {\n  border-top: none;\n}\ntable.dataTable.stripe > tbody > tr.odd > *, table.dataTable.display > tbody > tr.odd > * {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.023);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.023);\n}\ntable.dataTable.stripe > tbody > tr.odd.selected > *, table.dataTable.display > tbody > tr.odd.selected > * {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.923);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.923);\n}\ntable.dataTable.hover > tbody > tr:hover > *, table.dataTable.display > tbody > tr:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.035);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.035);\n}\ntable.dataTable.hover > tbody > tr.selected:hover > *, table.dataTable.display > tbody > tr.selected:hover > * {\n  box-shadow: inset 0 0 0 9999px #0d6efd !important;\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 1) !important;\n}\ntable.dataTable.order-column > tbody tr > .sorting_1,\ntable.dataTable.order-column > tbody tr > .sorting_2,\ntable.dataTable.order-column > tbody tr > .sorting_3, table.dataTable.display > tbody tr > .sorting_1,\ntable.dataTable.display > tbody tr > .sorting_2,\ntable.dataTable.display > tbody tr > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.019);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.019);\n}\ntable.dataTable.order-column > tbody tr.selected > .sorting_1,\ntable.dataTable.order-column > tbody tr.selected > .sorting_2,\ntable.dataTable.order-column > tbody tr.selected > .sorting_3, table.dataTable.display > tbody tr.selected > .sorting_1,\ntable.dataTable.display > tbody tr.selected > .sorting_2,\ntable.dataTable.display > tbody tr.selected > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.919);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.919);\n}\ntable.dataTable.display > tbody > tr.odd > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.odd > .sorting_1 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.054);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.054);\n}\ntable.dataTable.display > tbody > tr.odd > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.odd > .sorting_2 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.047);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.047);\n}\ntable.dataTable.display > tbody > tr.odd > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.odd > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.039);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.039);\n}\ntable.dataTable.display > tbody > tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.odd.selected > .sorting_1 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.954);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.954);\n}\ntable.dataTable.display > tbody > tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.odd.selected > .sorting_2 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.947);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.947);\n}\ntable.dataTable.display > tbody > tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.odd.selected > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.939);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.939);\n}\ntable.dataTable.display > tbody > tr.even > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.even > .sorting_1 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.019);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.019);\n}\ntable.dataTable.display > tbody > tr.even > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.even > .sorting_2 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.011);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.011);\n}\ntable.dataTable.display > tbody > tr.even > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.even > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.003);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.003);\n}\ntable.dataTable.display > tbody > tr.even.selected > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.even.selected > .sorting_1 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.919);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.919);\n}\ntable.dataTable.display > tbody > tr.even.selected > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.even.selected > .sorting_2 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.911);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.911);\n}\ntable.dataTable.display > tbody > tr.even.selected > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.even.selected > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.903);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.903);\n}\ntable.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.082);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.082);\n}\ntable.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.074);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.074);\n}\ntable.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.062);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.062);\n}\ntable.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.982);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.982);\n}\ntable.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.974);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.974);\n}\ntable.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.962);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.962);\n}\ntable.dataTable.no-footer {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.3);\n}\ntable.dataTable.compact thead th,\ntable.dataTable.compact thead td,\ntable.dataTable.compact tfoot th,\ntable.dataTable.compact tfoot td,\ntable.dataTable.compact tbody th,\ntable.dataTable.compact tbody td {\n  padding: 4px;\n}\n\ntable.dataTable th,\ntable.dataTable td {\n  box-sizing: content-box;\n}\n\n/*\n * Control feature layout\n */\n.dataTables_wrapper {\n  position: relative;\n  clear: both;\n}\n.dataTables_wrapper .dataTables_length {\n  float: left;\n}\n.dataTables_wrapper .dataTables_length select {\n  border: 1px solid #aaa;\n  border-radius: 3px;\n  padding: 5px;\n  background-color: transparent;\n  color: inherit;\n  padding: 4px;\n}\n.dataTables_wrapper .dataTables_filter {\n  float: right;\n  text-align: right;\n}\n.dataTables_wrapper .dataTables_filter input {\n  border: 1px solid #aaa;\n  border-radius: 3px;\n  padding: 5px;\n  background-color: transparent;\n  color: inherit;\n  margin-left: 3px;\n}\n.dataTables_wrapper .dataTables_info {\n  clear: both;\n  float: left;\n  padding-top: 0.755em;\n}\n.dataTables_wrapper .dataTables_paginate {\n  float: right;\n  text-align: right;\n  padding-top: 0.25em;\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button {\n  box-sizing: border-box;\n  display: inline-block;\n  min-width: 1.5em;\n  padding: 0.5em 1em;\n  margin-left: 2px;\n  text-align: center;\n  text-decoration: none !important;\n  cursor: pointer;\n  color: inherit !important;\n  border: 1px solid transparent;\n  border-radius: 2px;\n  background: transparent;\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {\n  color: inherit !important;\n  border: 1px solid rgba(0, 0, 0, 0.3);\n  background-color: rgba(0, 0, 0, 0.05);\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(230, 230, 230, 0.05)), color-stop(100%, rgba(0, 0, 0, 0.05))); /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* Chrome10+,Safari5.1+ */\n  background: -moz-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* FF3.6+ */\n  background: -ms-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* IE10+ */\n  background: -o-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* Opera 11.10+ */\n  background: linear-gradient(to bottom, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* W3C */\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {\n  cursor: default;\n  color: #666 !important;\n  border: 1px solid transparent;\n  background: transparent;\n  box-shadow: none;\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button:hover {\n  color: white !important;\n  border: 1px solid #111;\n  background-color: #111;\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(top, #585858 0%, #111 100%); /* Chrome10+,Safari5.1+ */\n  background: -moz-linear-gradient(top, #585858 0%, #111 100%); /* FF3.6+ */\n  background: -ms-linear-gradient(top, #585858 0%, #111 100%); /* IE10+ */\n  background: -o-linear-gradient(top, #585858 0%, #111 100%); /* Opera 11.10+ */\n  background: linear-gradient(to bottom, #585858 0%, #111 100%); /* W3C */\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button:active {\n  outline: none;\n  background-color: #0c0c0c;\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* Chrome10+,Safari5.1+ */\n  background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* FF3.6+ */\n  background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* IE10+ */\n  background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* Opera 11.10+ */\n  background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); /* W3C */\n  box-shadow: inset 0 0 3px #111;\n}\n.dataTables_wrapper .dataTables_paginate .ellipsis {\n  padding: 0 1em;\n}\n.dataTables_wrapper .dataTables_length,\n.dataTables_wrapper .dataTables_filter,\n.dataTables_wrapper .dataTables_info,\n.dataTables_wrapper .dataTables_processing,\n.dataTables_wrapper .dataTables_paginate {\n  color: inherit;\n}\n.dataTables_wrapper .dataTables_scroll {\n  clear: both;\n}\n.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {\n  -webkit-overflow-scrolling: touch;\n}\n.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td {\n  vertical-align: middle;\n}\n.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th > div.dataTables_sizing,\n.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th > div.dataTables_sizing,\n.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td > div.dataTables_sizing {\n  height: 0;\n  overflow: hidden;\n  margin: 0 !important;\n  padding: 0 !important;\n}\n.dataTables_wrapper.no-footer .dataTables_scrollBody {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.3);\n}\n.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,\n.dataTables_wrapper.no-footer div.dataTables_scrollBody > table {\n  border-bottom: none;\n}\n.dataTables_wrapper:after {\n  visibility: hidden;\n  display: block;\n  content: \"\";\n  clear: both;\n  height: 0;\n}\n\n@media screen and (max-width: 767px) {\n  .dataTables_wrapper .dataTables_info,\n  .dataTables_wrapper .dataTables_paginate {\n    float: none;\n    text-align: center;\n  }\n  .dataTables_wrapper .dataTables_paginate {\n    margin-top: 0.5em;\n  }\n}\n@media screen and (max-width: 640px) {\n  .dataTables_wrapper .dataTables_length,\n  .dataTables_wrapper .dataTables_filter {\n    float: none;\n    text-align: center;\n  }\n  .dataTables_wrapper .dataTables_filter {\n    margin-top: 0.5em;\n  }\n}\nhtml.dark {\n  --dt-row-hover: 255, 255, 255;\n  --dt-row-stripe: 255, 255, 255;\n  --dt-column-ordering: 255, 255, 255;\n}\nhtml.dark table.dataTable > thead > tr > th:active,\nhtml.dark table.dataTable > thead > tr > td:active {\n  outline: none;\n}\nhtml.dark table.dataTable.row-border > tbody > tr > th,\nhtml.dark table.dataTable.row-border > tbody > tr > td, html.dark table.dataTable.display > tbody > tr > th,\nhtml.dark table.dataTable.display > tbody > tr > td {\n  border-top: 1px solid rgb(64, 67, 70);\n}\nhtml.dark table.dataTable.row-border > tbody > tr.selected + tr.selected > td, html.dark table.dataTable.display > tbody > tr.selected + tr.selected > td {\n  border-top-color: #0257d5;\n}\nhtml.dark table.dataTable.cell-border > tbody > tr > th,\nhtml.dark table.dataTable.cell-border > tbody > tr > td {\n  border-top: 1px solid rgb(64, 67, 70);\n  border-right: 1px solid rgb(64, 67, 70);\n}\nhtml.dark table.dataTable.cell-border > tbody > tr > th:first-child,\nhtml.dark table.dataTable.cell-border > tbody > tr > td:first-child {\n  border-left: 1px solid rgb(64, 67, 70);\n}\nhtml.dark .dataTables_wrapper .dataTables_filter input,\nhtml.dark .dataTables_wrapper .dataTables_length select {\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  background-color: var(--dt-html-background);\n}\nhtml.dark .dataTables_wrapper .dataTables_paginate .paginate_button.current, html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {\n  border: 1px solid rgb(89, 91, 94);\n  background: rgba(255, 255, 255, 0.15);\n}\nhtml.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled, html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {\n  color: #666 !important;\n}\nhtml.dark .dataTables_wrapper .dataTables_paginate .paginate_button:hover {\n  border: 1px solid rgb(53, 53, 53);\n  background: rgb(53, 53, 53);\n}\nhtml.dark .dataTables_wrapper .dataTables_paginate .paginate_button:active {\n  background: #3a3a3a;\n}\n\ntable.dataTable thead th div.DataTables_sort_wrapper {\n  position: relative;\n}\ntable.dataTable thead th div.DataTables_sort_wrapper span {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  right: -18px;\n}\ntable.dataTable thead th.ui-state-default,\ntable.dataTable tfoot th.ui-state-default {\n  border-left-width: 0;\n}\ntable.dataTable thead th.ui-state-default:first-child,\ntable.dataTable tfoot th.ui-state-default:first-child {\n  border-left-width: 1px;\n}\n\n/*\n * Control feature layout\n */\n.dataTables_wrapper .dataTables_paginate .fg-button {\n  box-sizing: border-box;\n  display: inline-block;\n  min-width: 1.5em;\n  padding: 0.5em;\n  margin-left: 2px;\n  text-align: center;\n  text-decoration: none !important;\n  cursor: pointer;\n  border: 1px solid transparent;\n}\n.dataTables_wrapper .dataTables_paginate .fg-button:active {\n  outline: none;\n}\n.dataTables_wrapper .dataTables_paginate .fg-button:first-child {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.dataTables_wrapper .dataTables_paginate .fg-button:last-child {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.dataTables_wrapper .ui-widget-header {\n  font-weight: normal;\n}\n.dataTables_wrapper .ui-toolbar {\n  padding: 8px;\n}\n.dataTables_wrapper.no-footer .dataTables_scrollBody {\n  border-bottom: none;\n}\n.dataTables_wrapper .dataTables_length,\n.dataTables_wrapper .dataTables_filter,\n.dataTables_wrapper .dataTables_info,\n.dataTables_wrapper .dataTables_processing,\n.dataTables_wrapper .dataTables_paginate {\n  color: inherit;\n}\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/css/dataTables.semanticui.css",
    "content": "@charset \"UTF-8\";\n:root {\n  --dt-row-selected: 224, 224, 224;\n  --dt-row-selected-text: 0, 0, 0;\n  --dt-row-selected-link: 9, 10, 11;\n  --dt-row-stripe: 0, 0, 0;\n  --dt-row-hover: 0, 0, 0;\n  --dt-column-ordering: 0, 0, 0;\n  --dt-html-background: white;\n}\n:root.dark {\n  --dt-html-background: rgb(33, 37, 41);\n}\n\ntable.dataTable td.dt-control {\n  text-align: center;\n  cursor: pointer;\n}\ntable.dataTable td.dt-control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"▶\";\n}\ntable.dataTable tr.dt-hasChild td.dt-control:before {\n  content: \"▼\";\n}\n\nhtml.dark table.dataTable td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\nhtml.dark table.dataTable tr.dt-hasChild td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\n\ntable.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting_asc_disabled, table.dataTable thead > tr > th.sorting_desc_disabled,\ntable.dataTable thead > tr > td.sorting,\ntable.dataTable thead > tr > td.sorting_asc,\ntable.dataTable thead > tr > td.sorting_desc,\ntable.dataTable thead > tr > td.sorting_asc_disabled,\ntable.dataTable thead > tr > td.sorting_desc_disabled {\n  cursor: pointer;\n  position: relative;\n  padding-right: 26px;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  position: absolute;\n  display: block;\n  opacity: 0.125;\n  right: 10px;\n  line-height: 9px;\n  font-size: 0.8em;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before {\n  bottom: 50%;\n  content: \"▲\";\n  content: \"▲\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  top: 50%;\n  content: \"▼\";\n  content: \"▼\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:after {\n  opacity: 0.6;\n}\ntable.dataTable thead > tr > th.sorting_desc_disabled:after, table.dataTable thead > tr > th.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before {\n  display: none;\n}\ntable.dataTable thead > tr > th:active,\ntable.dataTable thead > tr > td:active {\n  outline: none;\n}\n\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > th:before, div.dataTables_scrollBody > table.dataTable > thead > tr > th:after,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:before,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:after {\n  display: none;\n}\n\ndiv.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 2px;\n  z-index: 10;\n}\ndiv.dataTables_processing > div:last-child {\n  position: relative;\n  width: 80px;\n  height: 15px;\n  margin: 1em auto;\n}\ndiv.dataTables_processing > div:last-child > div {\n  position: absolute;\n  top: 0;\n  width: 13px;\n  height: 13px;\n  border-radius: 50%;\n  background: rgb(224, 224, 224);\n  background: rgb(var(--dt-row-selected));\n  animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(1) {\n  left: 8px;\n  animation: datatables-loader-1 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(2) {\n  left: 8px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(3) {\n  left: 32px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(4) {\n  left: 56px;\n  animation: datatables-loader-3 0.6s infinite;\n}\n\n@keyframes datatables-loader-1 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes datatables-loader-3 {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    transform: scale(0);\n  }\n}\n@keyframes datatables-loader-2 {\n  0% {\n    transform: translate(0, 0);\n  }\n  100% {\n    transform: translate(24px, 0);\n  }\n}\ntable.dataTable.nowrap th, table.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable th.dt-left,\ntable.dataTable td.dt-left {\n  text-align: left;\n}\ntable.dataTable th.dt-center,\ntable.dataTable td.dt-center,\ntable.dataTable td.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable th.dt-right,\ntable.dataTable td.dt-right {\n  text-align: right;\n}\ntable.dataTable th.dt-justify,\ntable.dataTable td.dt-justify {\n  text-align: justify;\n}\ntable.dataTable th.dt-nowrap,\ntable.dataTable td.dt-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable thead th,\ntable.dataTable thead td,\ntable.dataTable tfoot th,\ntable.dataTable tfoot td {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-left,\ntable.dataTable thead td.dt-head-left,\ntable.dataTable tfoot th.dt-head-left,\ntable.dataTable tfoot td.dt-head-left {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-center,\ntable.dataTable thead td.dt-head-center,\ntable.dataTable tfoot th.dt-head-center,\ntable.dataTable tfoot td.dt-head-center {\n  text-align: center;\n}\ntable.dataTable thead th.dt-head-right,\ntable.dataTable thead td.dt-head-right,\ntable.dataTable tfoot th.dt-head-right,\ntable.dataTable tfoot td.dt-head-right {\n  text-align: right;\n}\ntable.dataTable thead th.dt-head-justify,\ntable.dataTable thead td.dt-head-justify,\ntable.dataTable tfoot th.dt-head-justify,\ntable.dataTable tfoot td.dt-head-justify {\n  text-align: justify;\n}\ntable.dataTable thead th.dt-head-nowrap,\ntable.dataTable thead td.dt-head-nowrap,\ntable.dataTable tfoot th.dt-head-nowrap,\ntable.dataTable tfoot td.dt-head-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable tbody th.dt-body-left,\ntable.dataTable tbody td.dt-body-left {\n  text-align: left;\n}\ntable.dataTable tbody th.dt-body-center,\ntable.dataTable tbody td.dt-body-center {\n  text-align: center;\n}\ntable.dataTable tbody th.dt-body-right,\ntable.dataTable tbody td.dt-body-right {\n  text-align: right;\n}\ntable.dataTable tbody th.dt-body-justify,\ntable.dataTable tbody td.dt-body-justify {\n  text-align: justify;\n}\ntable.dataTable tbody th.dt-body-nowrap,\ntable.dataTable tbody td.dt-body-nowrap {\n  white-space: nowrap;\n}\n\n/*\n * Styling for DataTables with Semantic UI\n */\ntable.dataTable.table {\n  margin: 0;\n}\ntable.dataTable.table td,\ntable.dataTable.table th {\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\ntable.dataTable.table td.dataTables_empty,\ntable.dataTable.table th.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable.table.nowrap th,\ntable.dataTable.table.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable.table.ui.striped > tbody > tr:nth-child(2n) {\n  background-color: transparent;\n}\ntable.dataTable.table > tbody > tr {\n  background-color: transparent;\n}\ntable.dataTable.table > tbody > tr.selected > * {\n  box-shadow: inset 0 0 0 9999px rgb(224, 224, 224);\n  box-shadow: inset 0 0 0 9999px rgb(var(--dt-row-selected));\n  color: rgb(0, 0, 0);\n  color: rgb(var(--dt-row-selected-text));\n}\ntable.dataTable.table > tbody > tr.selected a {\n  color: rgb(9, 10, 11);\n  color: rgb(var(--dt-row-selected-link));\n}\ntable.dataTable.table.striped > tbody > tr.odd > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.02);\n}\ntable.dataTable.table.striped > tbody > tr.odd.selected > * {\n  box-shadow: inset 0 0 0 9999px rgba(224, 224, 224, 0.92);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.92);\n}\ntable.dataTable.table.hover > tbody > tr:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.075);\n}\ntable.dataTable.table.hover > tbody > tr.selected:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(224, 224, 224, 0.975);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.975);\n}\n\ndiv.dataTables_wrapper div.dataTables_length select {\n  vertical-align: middle;\n  min-height: 2.7142em;\n}\ndiv.dataTables_wrapper div.dataTables_length .ui.selection.dropdown {\n  min-width: 0;\n}\ndiv.dataTables_wrapper div.dataTables_filter span.input {\n  margin-left: 0.5em;\n}\ndiv.dataTables_wrapper div.dataTables_info {\n  padding-top: 13px;\n  white-space: nowrap;\n}\ndiv.dataTables_wrapper div.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  text-align: center;\n}\ndiv.dataTables_wrapper div.row.dt-table {\n  padding: 0;\n}\ndiv.dataTables_wrapper div.dataTables_scrollHead table.dataTable {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  border-bottom: none;\n}\ndiv.dataTables_wrapper div.dataTables_scrollBody thead .sorting:after,\ndiv.dataTables_wrapper div.dataTables_scrollBody thead .sorting_asc:after,\ndiv.dataTables_wrapper div.dataTables_scrollBody thead .sorting_desc:after {\n  display: none;\n}\ndiv.dataTables_wrapper div.dataTables_scrollBody table.dataTable {\n  border-radius: 0;\n  border-top: none;\n  border-bottom-width: 0;\n}\ndiv.dataTables_wrapper div.dataTables_scrollBody table.dataTable.no-footer {\n  border-bottom-width: 1px;\n}\ndiv.dataTables_wrapper div.dataTables_scrollFoot table.dataTable {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n  border-top: none;\n}\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/css/jquery.dataTables.css",
    "content": "@charset \"UTF-8\";\n:root {\n  --dt-row-selected: 13, 110, 253;\n  --dt-row-selected-text: 255, 255, 255;\n  --dt-row-selected-link: 9, 10, 11;\n  --dt-row-stripe: 0, 0, 0;\n  --dt-row-hover: 0, 0, 0;\n  --dt-column-ordering: 0, 0, 0;\n  --dt-html-background: white;\n}\n:root.dark {\n  --dt-html-background: rgb(33, 37, 41);\n}\n\ntable.dataTable td.dt-control {\n  text-align: center;\n  cursor: pointer;\n}\ntable.dataTable td.dt-control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"▶\";\n}\ntable.dataTable tr.dt-hasChild td.dt-control:before {\n  content: \"▼\";\n}\n\nhtml.dark table.dataTable td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\nhtml.dark table.dataTable tr.dt-hasChild td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\n\ntable.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting_asc_disabled, table.dataTable thead > tr > th.sorting_desc_disabled,\ntable.dataTable thead > tr > td.sorting,\ntable.dataTable thead > tr > td.sorting_asc,\ntable.dataTable thead > tr > td.sorting_desc,\ntable.dataTable thead > tr > td.sorting_asc_disabled,\ntable.dataTable thead > tr > td.sorting_desc_disabled {\n  cursor: pointer;\n  position: relative;\n  padding-right: 26px;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  position: absolute;\n  display: block;\n  opacity: 0.125;\n  right: 10px;\n  line-height: 9px;\n  font-size: 0.8em;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before {\n  bottom: 50%;\n  content: \"▲\";\n  content: \"▲\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  top: 50%;\n  content: \"▼\";\n  content: \"▼\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:after {\n  opacity: 0.6;\n}\ntable.dataTable thead > tr > th.sorting_desc_disabled:after, table.dataTable thead > tr > th.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before {\n  display: none;\n}\ntable.dataTable thead > tr > th:active,\ntable.dataTable thead > tr > td:active {\n  outline: none;\n}\n\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > th:before, div.dataTables_scrollBody > table.dataTable > thead > tr > th:after,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:before,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:after {\n  display: none;\n}\n\ndiv.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 2px;\n  z-index: 10;\n}\ndiv.dataTables_processing > div:last-child {\n  position: relative;\n  width: 80px;\n  height: 15px;\n  margin: 1em auto;\n}\ndiv.dataTables_processing > div:last-child > div {\n  position: absolute;\n  top: 0;\n  width: 13px;\n  height: 13px;\n  border-radius: 50%;\n  background: rgb(13, 110, 253);\n  background: rgb(var(--dt-row-selected));\n  animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(1) {\n  left: 8px;\n  animation: datatables-loader-1 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(2) {\n  left: 8px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(3) {\n  left: 32px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(4) {\n  left: 56px;\n  animation: datatables-loader-3 0.6s infinite;\n}\n\n@keyframes datatables-loader-1 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes datatables-loader-3 {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    transform: scale(0);\n  }\n}\n@keyframes datatables-loader-2 {\n  0% {\n    transform: translate(0, 0);\n  }\n  100% {\n    transform: translate(24px, 0);\n  }\n}\ntable.dataTable.nowrap th, table.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable th.dt-left,\ntable.dataTable td.dt-left {\n  text-align: left;\n}\ntable.dataTable th.dt-center,\ntable.dataTable td.dt-center,\ntable.dataTable td.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable th.dt-right,\ntable.dataTable td.dt-right {\n  text-align: right;\n}\ntable.dataTable th.dt-justify,\ntable.dataTable td.dt-justify {\n  text-align: justify;\n}\ntable.dataTable th.dt-nowrap,\ntable.dataTable td.dt-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable thead th,\ntable.dataTable thead td,\ntable.dataTable tfoot th,\ntable.dataTable tfoot td {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-left,\ntable.dataTable thead td.dt-head-left,\ntable.dataTable tfoot th.dt-head-left,\ntable.dataTable tfoot td.dt-head-left {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-center,\ntable.dataTable thead td.dt-head-center,\ntable.dataTable tfoot th.dt-head-center,\ntable.dataTable tfoot td.dt-head-center {\n  text-align: center;\n}\ntable.dataTable thead th.dt-head-right,\ntable.dataTable thead td.dt-head-right,\ntable.dataTable tfoot th.dt-head-right,\ntable.dataTable tfoot td.dt-head-right {\n  text-align: right;\n}\ntable.dataTable thead th.dt-head-justify,\ntable.dataTable thead td.dt-head-justify,\ntable.dataTable tfoot th.dt-head-justify,\ntable.dataTable tfoot td.dt-head-justify {\n  text-align: justify;\n}\ntable.dataTable thead th.dt-head-nowrap,\ntable.dataTable thead td.dt-head-nowrap,\ntable.dataTable tfoot th.dt-head-nowrap,\ntable.dataTable tfoot td.dt-head-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable tbody th.dt-body-left,\ntable.dataTable tbody td.dt-body-left {\n  text-align: left;\n}\ntable.dataTable tbody th.dt-body-center,\ntable.dataTable tbody td.dt-body-center {\n  text-align: center;\n}\ntable.dataTable tbody th.dt-body-right,\ntable.dataTable tbody td.dt-body-right {\n  text-align: right;\n}\ntable.dataTable tbody th.dt-body-justify,\ntable.dataTable tbody td.dt-body-justify {\n  text-align: justify;\n}\ntable.dataTable tbody th.dt-body-nowrap,\ntable.dataTable tbody td.dt-body-nowrap {\n  white-space: nowrap;\n}\n\n/*\n * Table styles\n */\ntable.dataTable {\n  width: 100%;\n  margin: 0 auto;\n  clear: both;\n  border-collapse: separate;\n  border-spacing: 0;\n  /*\n   * Header and footer styles\n   */\n  /*\n   * Body styles\n   */\n}\ntable.dataTable thead th,\ntable.dataTable tfoot th {\n  font-weight: bold;\n}\ntable.dataTable > thead > tr > th,\ntable.dataTable > thead > tr > td {\n  padding: 10px;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.3);\n}\ntable.dataTable > thead > tr > th:active,\ntable.dataTable > thead > tr > td:active {\n  outline: none;\n}\ntable.dataTable > tfoot > tr > th,\ntable.dataTable > tfoot > tr > td {\n  padding: 10px 10px 6px 10px;\n  border-top: 1px solid rgba(0, 0, 0, 0.3);\n}\ntable.dataTable tbody tr {\n  background-color: transparent;\n}\ntable.dataTable tbody tr.selected > * {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.9);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.9);\n  color: rgb(255, 255, 255);\n  color: rgb(var(--dt-row-selected-text));\n}\ntable.dataTable tbody tr.selected a {\n  color: rgb(9, 10, 11);\n  color: rgb(var(--dt-row-selected-link));\n}\ntable.dataTable tbody th,\ntable.dataTable tbody td {\n  padding: 8px 10px;\n}\ntable.dataTable.row-border > tbody > tr > th,\ntable.dataTable.row-border > tbody > tr > td, table.dataTable.display > tbody > tr > th,\ntable.dataTable.display > tbody > tr > td {\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\ntable.dataTable.row-border > tbody > tr:first-child > th,\ntable.dataTable.row-border > tbody > tr:first-child > td, table.dataTable.display > tbody > tr:first-child > th,\ntable.dataTable.display > tbody > tr:first-child > td {\n  border-top: none;\n}\ntable.dataTable.row-border > tbody > tr.selected + tr.selected > td, table.dataTable.display > tbody > tr.selected + tr.selected > td {\n  border-top-color: #0262ef;\n}\ntable.dataTable.cell-border > tbody > tr > th,\ntable.dataTable.cell-border > tbody > tr > td {\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n  border-right: 1px solid rgba(0, 0, 0, 0.15);\n}\ntable.dataTable.cell-border > tbody > tr > th:first-child,\ntable.dataTable.cell-border > tbody > tr > td:first-child {\n  border-left: 1px solid rgba(0, 0, 0, 0.15);\n}\ntable.dataTable.cell-border > tbody > tr:first-child > th,\ntable.dataTable.cell-border > tbody > tr:first-child > td {\n  border-top: none;\n}\ntable.dataTable.stripe > tbody > tr.odd > *, table.dataTable.display > tbody > tr.odd > * {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.023);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.023);\n}\ntable.dataTable.stripe > tbody > tr.odd.selected > *, table.dataTable.display > tbody > tr.odd.selected > * {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.923);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.923);\n}\ntable.dataTable.hover > tbody > tr:hover > *, table.dataTable.display > tbody > tr:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.035);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.035);\n}\ntable.dataTable.hover > tbody > tr.selected:hover > *, table.dataTable.display > tbody > tr.selected:hover > * {\n  box-shadow: inset 0 0 0 9999px #0d6efd !important;\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 1) !important;\n}\ntable.dataTable.order-column > tbody tr > .sorting_1,\ntable.dataTable.order-column > tbody tr > .sorting_2,\ntable.dataTable.order-column > tbody tr > .sorting_3, table.dataTable.display > tbody tr > .sorting_1,\ntable.dataTable.display > tbody tr > .sorting_2,\ntable.dataTable.display > tbody tr > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.019);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.019);\n}\ntable.dataTable.order-column > tbody tr.selected > .sorting_1,\ntable.dataTable.order-column > tbody tr.selected > .sorting_2,\ntable.dataTable.order-column > tbody tr.selected > .sorting_3, table.dataTable.display > tbody tr.selected > .sorting_1,\ntable.dataTable.display > tbody tr.selected > .sorting_2,\ntable.dataTable.display > tbody tr.selected > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.919);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.919);\n}\ntable.dataTable.display > tbody > tr.odd > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.odd > .sorting_1 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.054);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.054);\n}\ntable.dataTable.display > tbody > tr.odd > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.odd > .sorting_2 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.047);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.047);\n}\ntable.dataTable.display > tbody > tr.odd > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.odd > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.039);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-column-ordering), 0.039);\n}\ntable.dataTable.display > tbody > tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.odd.selected > .sorting_1 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.954);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.954);\n}\ntable.dataTable.display > tbody > tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.odd.selected > .sorting_2 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.947);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.947);\n}\ntable.dataTable.display > tbody > tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.odd.selected > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.939);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.939);\n}\ntable.dataTable.display > tbody > tr.even > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.even > .sorting_1 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.019);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.019);\n}\ntable.dataTable.display > tbody > tr.even > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.even > .sorting_2 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.011);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.011);\n}\ntable.dataTable.display > tbody > tr.even > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.even > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.003);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.003);\n}\ntable.dataTable.display > tbody > tr.even.selected > .sorting_1, table.dataTable.order-column.stripe > tbody > tr.even.selected > .sorting_1 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.919);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.919);\n}\ntable.dataTable.display > tbody > tr.even.selected > .sorting_2, table.dataTable.order-column.stripe > tbody > tr.even.selected > .sorting_2 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.911);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.911);\n}\ntable.dataTable.display > tbody > tr.even.selected > .sorting_3, table.dataTable.order-column.stripe > tbody > tr.even.selected > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.903);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.903);\n}\ntable.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.082);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.082);\n}\ntable.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.074);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.074);\n}\ntable.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.062);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.062);\n}\ntable.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.982);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.982);\n}\ntable.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.974);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.974);\n}\ntable.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.962);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.962);\n}\ntable.dataTable.no-footer {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.3);\n}\ntable.dataTable.compact thead th,\ntable.dataTable.compact thead td,\ntable.dataTable.compact tfoot th,\ntable.dataTable.compact tfoot td,\ntable.dataTable.compact tbody th,\ntable.dataTable.compact tbody td {\n  padding: 4px;\n}\n\ntable.dataTable th,\ntable.dataTable td {\n  box-sizing: content-box;\n}\n\n/*\n * Control feature layout\n */\n.dataTables_wrapper {\n  position: relative;\n  clear: both;\n}\n.dataTables_wrapper .dataTables_length {\n  float: left;\n}\n.dataTables_wrapper .dataTables_length select {\n  border: 1px solid #aaa;\n  border-radius: 3px;\n  padding: 5px;\n  background-color: transparent;\n  color: inherit;\n  padding: 4px;\n}\n.dataTables_wrapper .dataTables_filter {\n  float: right;\n  text-align: right;\n}\n.dataTables_wrapper .dataTables_filter input {\n  border: 1px solid #aaa;\n  border-radius: 3px;\n  padding: 5px;\n  background-color: transparent;\n  color: inherit;\n  margin-left: 3px;\n}\n.dataTables_wrapper .dataTables_info {\n  clear: both;\n  float: left;\n  padding-top: 0.755em;\n}\n.dataTables_wrapper .dataTables_paginate {\n  float: right;\n  text-align: right;\n  padding-top: 0.25em;\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button {\n  box-sizing: border-box;\n  display: inline-block;\n  min-width: 1.5em;\n  padding: 0.5em 1em;\n  margin-left: 2px;\n  text-align: center;\n  text-decoration: none !important;\n  cursor: pointer;\n  color: inherit !important;\n  border: 1px solid transparent;\n  border-radius: 2px;\n  background: transparent;\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {\n  color: inherit !important;\n  border: 1px solid rgba(0, 0, 0, 0.3);\n  background-color: rgba(0, 0, 0, 0.05);\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(230, 230, 230, 0.05)), color-stop(100%, rgba(0, 0, 0, 0.05))); /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* Chrome10+,Safari5.1+ */\n  background: -moz-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* FF3.6+ */\n  background: -ms-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* IE10+ */\n  background: -o-linear-gradient(top, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* Opera 11.10+ */\n  background: linear-gradient(to bottom, rgba(230, 230, 230, 0.05) 0%, rgba(0, 0, 0, 0.05) 100%); /* W3C */\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {\n  cursor: default;\n  color: #666 !important;\n  border: 1px solid transparent;\n  background: transparent;\n  box-shadow: none;\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button:hover {\n  color: white !important;\n  border: 1px solid #111;\n  background-color: #111;\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(top, #585858 0%, #111 100%); /* Chrome10+,Safari5.1+ */\n  background: -moz-linear-gradient(top, #585858 0%, #111 100%); /* FF3.6+ */\n  background: -ms-linear-gradient(top, #585858 0%, #111 100%); /* IE10+ */\n  background: -o-linear-gradient(top, #585858 0%, #111 100%); /* Opera 11.10+ */\n  background: linear-gradient(to bottom, #585858 0%, #111 100%); /* W3C */\n}\n.dataTables_wrapper .dataTables_paginate .paginate_button:active {\n  outline: none;\n  background-color: #0c0c0c;\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); /* Chrome,Safari4+ */\n  background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* Chrome10+,Safari5.1+ */\n  background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* FF3.6+ */\n  background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* IE10+ */\n  background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); /* Opera 11.10+ */\n  background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); /* W3C */\n  box-shadow: inset 0 0 3px #111;\n}\n.dataTables_wrapper .dataTables_paginate .ellipsis {\n  padding: 0 1em;\n}\n.dataTables_wrapper .dataTables_length,\n.dataTables_wrapper .dataTables_filter,\n.dataTables_wrapper .dataTables_info,\n.dataTables_wrapper .dataTables_processing,\n.dataTables_wrapper .dataTables_paginate {\n  color: inherit;\n}\n.dataTables_wrapper .dataTables_scroll {\n  clear: both;\n}\n.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {\n  -webkit-overflow-scrolling: touch;\n}\n.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td {\n  vertical-align: middle;\n}\n.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th > div.dataTables_sizing,\n.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th > div.dataTables_sizing,\n.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td > div.dataTables_sizing {\n  height: 0;\n  overflow: hidden;\n  margin: 0 !important;\n  padding: 0 !important;\n}\n.dataTables_wrapper.no-footer .dataTables_scrollBody {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.3);\n}\n.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,\n.dataTables_wrapper.no-footer div.dataTables_scrollBody > table {\n  border-bottom: none;\n}\n.dataTables_wrapper:after {\n  visibility: hidden;\n  display: block;\n  content: \"\";\n  clear: both;\n  height: 0;\n}\n\n@media screen and (max-width: 767px) {\n  .dataTables_wrapper .dataTables_info,\n  .dataTables_wrapper .dataTables_paginate {\n    float: none;\n    text-align: center;\n  }\n  .dataTables_wrapper .dataTables_paginate {\n    margin-top: 0.5em;\n  }\n}\n@media screen and (max-width: 640px) {\n  .dataTables_wrapper .dataTables_length,\n  .dataTables_wrapper .dataTables_filter {\n    float: none;\n    text-align: center;\n  }\n  .dataTables_wrapper .dataTables_filter {\n    margin-top: 0.5em;\n  }\n}\nhtml.dark {\n  --dt-row-hover: 255, 255, 255;\n  --dt-row-stripe: 255, 255, 255;\n  --dt-column-ordering: 255, 255, 255;\n}\nhtml.dark table.dataTable > thead > tr > th,\nhtml.dark table.dataTable > thead > tr > td {\n  border-bottom: 1px solid rgb(89, 91, 94);\n}\nhtml.dark table.dataTable > thead > tr > th:active,\nhtml.dark table.dataTable > thead > tr > td:active {\n  outline: none;\n}\nhtml.dark table.dataTable > tfoot > tr > th,\nhtml.dark table.dataTable > tfoot > tr > td {\n  border-top: 1px solid rgb(89, 91, 94);\n}\nhtml.dark table.dataTable.row-border > tbody > tr > th,\nhtml.dark table.dataTable.row-border > tbody > tr > td, html.dark table.dataTable.display > tbody > tr > th,\nhtml.dark table.dataTable.display > tbody > tr > td {\n  border-top: 1px solid rgb(64, 67, 70);\n}\nhtml.dark table.dataTable.row-border > tbody > tr.selected + tr.selected > td, html.dark table.dataTable.display > tbody > tr.selected + tr.selected > td {\n  border-top-color: #0257d5;\n}\nhtml.dark table.dataTable.cell-border > tbody > tr > th,\nhtml.dark table.dataTable.cell-border > tbody > tr > td {\n  border-top: 1px solid rgb(64, 67, 70);\n  border-right: 1px solid rgb(64, 67, 70);\n}\nhtml.dark table.dataTable.cell-border > tbody > tr > th:first-child,\nhtml.dark table.dataTable.cell-border > tbody > tr > td:first-child {\n  border-left: 1px solid rgb(64, 67, 70);\n}\nhtml.dark .dataTables_wrapper .dataTables_filter input,\nhtml.dark .dataTables_wrapper .dataTables_length select {\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  background-color: var(--dt-html-background);\n}\nhtml.dark .dataTables_wrapper .dataTables_paginate .paginate_button.current, html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {\n  border: 1px solid rgb(89, 91, 94);\n  background: rgba(255, 255, 255, 0.15);\n}\nhtml.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled, html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, html.dark .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {\n  color: #666 !important;\n}\nhtml.dark .dataTables_wrapper .dataTables_paginate .paginate_button:hover {\n  border: 1px solid rgb(53, 53, 53);\n  background: rgb(53, 53, 53);\n}\nhtml.dark .dataTables_wrapper .dataTables_paginate .paginate_button:active {\n  background: #3a3a3a;\n}\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/js/dataTables.bootstrap.js",
    "content": "/*! DataTables Bootstrap 3 integration\n * ©2011-2015 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and\n * DataTables 1.10 or newer.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using Bootstrap. See https://datatables.net/manual/styling/bootstrap\n * for further information.\n */\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t\"<'row'<'col-sm-6'l><'col-sm-6'f>>\" +\n\t\t\"<'row'<'col-sm-12'tr>>\" +\n\t\t\"<'row'<'col-sm-5'i><'col-sm-7'p>>\",\n\trenderer: 'bootstrap'\n} );\n\n\n/* Default class modification */\n$.extend( DataTable.ext.classes, {\n\tsWrapper:      \"dataTables_wrapper form-inline dt-bootstrap\",\n\tsFilterInput:  \"form-control input-sm\",\n\tsLengthSelect: \"form-control input-sm\",\n\tsProcessing:   \"dataTables_processing panel panel-default\"\n} );\n\n\n/* Bootstrap paging button renderer */\nDataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {\n\tvar api     = new DataTable.Api( settings );\n\tvar classes = settings.oClasses;\n\tvar lang    = settings.oLanguage.oPaginate;\n\tvar aria = settings.oLanguage.oAria.paginate || {};\n\tvar btnDisplay, btnClass;\n\n\tvar attach = function( container, buttons ) {\n\t\tvar i, ien, node, button;\n\t\tvar clickHandler = function ( e ) {\n\t\t\te.preventDefault();\n\t\t\tif ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {\n\t\t\t\tapi.page( e.data.action ).draw( 'page' );\n\t\t\t}\n\t\t};\n\n\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\tattach( container, button );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtnDisplay = '';\n\t\t\t\tbtnClass = '';\n\n\t\t\t\tswitch ( button ) {\n\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\tbtnDisplay = '&#x2026;';\n\t\t\t\t\t\tbtnClass = 'disabled';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'first':\n\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'next':\n\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'last':\n\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t'active' : '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\tvar disabled = btnClass.indexOf('disabled') !== -1;\n\n\t\t\t\t\tnode = $('<li>', {\n\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append( $('<a>', {\n\t\t\t\t\t\t\t\t'href': disabled ? null : '#',\n\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t'aria-current': btnClass === 'active' ? 'page' : null,\n\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\tsettings.oApi._fnBindAction(\n\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t// inside an iframe or frame. \n\tvar activeEl;\n\n\ttry {\n\t\t// Because this approach is destroying and recreating the paging\n\t\t// elements, focus is lost on the select button which is bad for\n\t\t// accessibility. So we want to restore focus once the draw has\n\t\t// completed\n\t\tactiveEl = $(host).find(document.activeElement).data('dt-idx');\n\t}\n\tcatch (e) {}\n\n\tattach(\n\t\t$(host).empty().html('<ul class=\"pagination\"/>').children('ul'),\n\t\tbuttons\n\t);\n\n\tif ( activeEl !== undefined ) {\n\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t}\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/js/dataTables.bootstrap4.js",
    "content": "/*! DataTables Bootstrap 4 integration\n * ©2011-2017 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * DataTables integration for Bootstrap 4. This requires Bootstrap 4 and\n * DataTables 1.10 or newer.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using Bootstrap. See https://datatables.net/manual/styling/bootstrap\n * for further information.\n */\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t\"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>\" +\n\t\t\"<'row'<'col-sm-12'tr>>\" +\n\t\t\"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>\",\n\trenderer: 'bootstrap'\n} );\n\n\n/* Default class modification */\n$.extend( DataTable.ext.classes, {\n\tsWrapper:      \"dataTables_wrapper dt-bootstrap4\",\n\tsFilterInput:  \"form-control form-control-sm\",\n\tsLengthSelect: \"custom-select custom-select-sm form-control form-control-sm\",\n\tsProcessing:   \"dataTables_processing card\",\n\tsPageButton:   \"paginate_button page-item\"\n} );\n\n\n/* Bootstrap paging button renderer */\nDataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {\n\tvar api     = new DataTable.Api( settings );\n\tvar classes = settings.oClasses;\n\tvar lang    = settings.oLanguage.oPaginate;\n\tvar aria = settings.oLanguage.oAria.paginate || {};\n\tvar btnDisplay, btnClass;\n\n\tvar attach = function( container, buttons ) {\n\t\tvar i, ien, node, button;\n\t\tvar clickHandler = function ( e ) {\n\t\t\te.preventDefault();\n\t\t\tif ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {\n\t\t\t\tapi.page( e.data.action ).draw( 'page' );\n\t\t\t}\n\t\t};\n\n\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\tattach( container, button );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtnDisplay = '';\n\t\t\t\tbtnClass = '';\n\n\t\t\t\tswitch ( button ) {\n\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\tbtnDisplay = '&#x2026;';\n\t\t\t\t\t\tbtnClass = 'disabled';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'first':\n\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'next':\n\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'last':\n\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t'active' : '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\tvar disabled = btnClass.indexOf('disabled') !== -1;\n\n\t\t\t\t\tnode = $('<li>', {\n\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append( $('<a>', {\n\t\t\t\t\t\t\t\t'href': disabled ? null : '#',\n\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t'aria-current': btnClass === 'active' ? 'page' : null,\n\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex,\n\t\t\t\t\t\t\t\t'class': 'page-link'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\tsettings.oApi._fnBindAction(\n\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t// inside an iframe or frame. \n\tvar activeEl;\n\n\ttry {\n\t\t// Because this approach is destroying and recreating the paging\n\t\t// elements, focus is lost on the select button which is bad for\n\t\t// accessibility. So we want to restore focus once the draw has\n\t\t// completed\n\t\tactiveEl = $(host).find(document.activeElement).data('dt-idx');\n\t}\n\tcatch (e) {}\n\n\tattach(\n\t\t$(host).empty().html('<ul class=\"pagination\"/>').children('ul'),\n\t\tbuttons\n\t);\n\n\tif ( activeEl !== undefined ) {\n\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t}\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/js/dataTables.bootstrap5.js",
    "content": "/*! DataTables Bootstrap 5 integration\n * 2020 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * DataTables integration for Bootstrap 5. This requires Bootstrap 5 and\n * DataTables 1.10 or newer.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using Bootstrap. See https://datatables.net/manual/styling/bootstrap\n * for further information.\n */\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t\"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>\" +\n\t\t\"<'row dt-row'<'col-sm-12'tr>>\" +\n\t\t\"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>\",\n\trenderer: 'bootstrap'\n} );\n\n\n/* Default class modification */\n$.extend( DataTable.ext.classes, {\n\tsWrapper:      \"dataTables_wrapper dt-bootstrap5\",\n\tsFilterInput:  \"form-control form-control-sm\",\n\tsLengthSelect: \"form-select form-select-sm\",\n\tsProcessing:   \"dataTables_processing card\",\n\tsPageButton:   \"paginate_button page-item\"\n} );\n\n\n/* Bootstrap paging button renderer */\nDataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {\n\tvar api     = new DataTable.Api( settings );\n\tvar classes = settings.oClasses;\n\tvar lang    = settings.oLanguage.oPaginate;\n\tvar aria = settings.oLanguage.oAria.paginate || {};\n\tvar btnDisplay, btnClass;\n\n\tvar attach = function( container, buttons ) {\n\t\tvar i, ien, node, button;\n\t\tvar clickHandler = function ( e ) {\n\t\t\te.preventDefault();\n\t\t\tif ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {\n\t\t\t\tapi.page( e.data.action ).draw( 'page' );\n\t\t\t}\n\t\t};\n\n\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\tattach( container, button );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtnDisplay = '';\n\t\t\t\tbtnClass = '';\n\n\t\t\t\tswitch ( button ) {\n\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\tbtnDisplay = '&#x2026;';\n\t\t\t\t\t\tbtnClass = 'disabled';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'first':\n\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'next':\n\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'last':\n\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t'active' : '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\tvar disabled = btnClass.indexOf('disabled') !== -1;\n\n\t\t\t\t\tnode = $('<li>', {\n\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append( $('<a>', {\n\t\t\t\t\t\t\t\t'href': disabled ? null : '#',\n\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t'aria-current': btnClass === 'active' ? 'page' : null,\n\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex,\n\t\t\t\t\t\t\t\t'class': 'page-link'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\tsettings.oApi._fnBindAction(\n\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tvar hostEl = $(host);\n\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t// inside an iframe or frame. \n\tvar activeEl;\n\n\ttry {\n\t\t// Because this approach is destroying and recreating the paging\n\t\t// elements, focus is lost on the select button which is bad for\n\t\t// accessibility. So we want to restore focus once the draw has\n\t\t// completed\n\t\tactiveEl = hostEl.find(document.activeElement).data('dt-idx');\n\t}\n\tcatch (e) {}\n\n\tvar paginationEl = hostEl.children('ul.pagination');\n\n\tif (paginationEl.length) {\n\t\tpaginationEl.empty();\n\t}\n\telse {\n\t\tpaginationEl = hostEl.html('<ul/>').children('ul').addClass('pagination');\n\t}\n\n\tattach(\n\t\tpaginationEl,\n\t\tbuttons\n\t);\n\n\tif ( activeEl !== undefined ) {\n\t\thostEl.find('[data-dt-idx='+activeEl+']').trigger('focus');\n\t}\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/js/dataTables.bulma.js",
    "content": "/*! DataTables Bulma integration\n * ©2020 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t\"<'columns is-gapless is-multiline'\" +\n\t\t\t\"<'column is-half'l>\" +\n\t\t\t\"<'column is-half'f>\" +\n\t\t\t\"<'column is-full'tr>\" +\n\t\t\t\"<'column is-half'i>\" +\n\t\t\t\"<'column is-half'p>\" +\n\t\t\">\",\n\trenderer: 'bulma'\n} );\n\n\n/* Default class modification */\n$.extend( DataTable.ext.classes, {\n\tsWrapper:      \"dataTables_wrapper dt-bulma\",\n\tsFilterInput:  \"input\",\n\tsLengthSelect: \"custom-select custom-select-sm form-control form-control-sm\",\n\tsProcessing:   \"dataTables_processing card\"\n} );\n\n\n/* Bulma paging button renderer */\nDataTable.ext.renderer.pageButton.bulma = function ( settings, host, idx, buttons, page, pages ) {\n\tvar api     = new DataTable.Api( settings );\n\tvar classes = settings.oClasses;\n\tvar lang    = settings.oLanguage.oPaginate;\n\tvar aria = settings.oLanguage.oAria.paginate || {};\n\tvar btnDisplay, btnClass;\n\n\tvar attach = function( container, buttons ) {\n\t\tvar i, ien, node, button, tag, disabled;\n\t\tvar clickHandler = function ( e ) {\n\t\t\te.preventDefault();\n\t\t\tif ( ! $(e.currentTarget.firstChild).attr('disabled') && api.page() != e.data.action ) {\n\t\t\t\tapi.page( e.data.action ).draw( 'page' );\n\t\t\t}\n\t\t};\n\n\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\tattach( container, button );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtnDisplay = '';\n\t\t\t\tbtnClass = '';\n\t\t\t\ttag = 'a';\n\t\t\t\tdisabled = false;\n\n\t\t\t\tswitch ( button ) {\n\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\tbtnDisplay = '&#x2026;';\n\t\t\t\t\t\tbtnClass = 'pagination-link';\n\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\ttag = 'span';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'first':\n\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\tbtnClass = button;\n\t\t\t\t\t\tdisabled = page <= 0;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\tbtnClass = button;\n\t\t\t\t\t\tdisabled = page <= 0;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'next':\n\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\tbtnClass = button;\n\t\t\t\t\t\tdisabled = page >= pages - 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'last':\n\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\tbtnClass = button;\n\t\t\t\t\t\tdisabled = page >= pages - 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t'is-current' : '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\tnode = $('<li>', {\n\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append( $('<' + tag + '>', {\n\t\t\t\t\t\t\t\t'href': disabled ? null : '#',\n\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t'aria-current': btnClass === 'is-current' ? 'page' : null,\n\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex,\n\t\t\t\t\t\t\t\t'class': 'pagination-link ' + btnClass,\n\t\t\t\t\t\t\t\t'disabled': disabled\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\tsettings.oApi._fnBindAction(\n\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t// inside an iframe or frame. \n\tvar activeEl;\n\n\ttry {\n\t\t// Because this approach is destroying and recreating the paging\n\t\t// elements, focus is lost on the select button which is bad for\n\t\t// accessibility. So we want to restore focus once the draw has\n\t\t// completed\n\t\tactiveEl = $(host).find(document.activeElement).data('dt-idx');\n\t}\n\tcatch (e) {}\n\n\tvar nav = $('<nav class=\"pagination\" role=\"navigation\" aria-label=\"pagination\"><ul class=\"pagination-list\"></ul></nav>');\n\t$(host).empty().append(nav);\n\n\tattach(nav.find('ul'), buttons);\n\n\tif ( activeEl !== undefined ) {\n\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t}\n};\n\n// Javascript enhancements on table initialisation\n$(document).on( 'init.dt', function (e, ctx) {\n\tif ( e.namespace !== 'dt' ) {\n\t\treturn;\n\t}\n\n\tvar api = new $.fn.dataTable.Api( ctx );\n\n\t// Length menu drop down - needs to be wrapped with a div\n\t$( 'div.dataTables_length select', api.table().container() ).wrap('<div class=\"select\">');\n\n\t// Filtering input\n\t// $( 'div.dataTables_filter.ui.input', api.table().container() ).removeClass('input').addClass('form');\n\t// $( 'div.dataTables_filter input', api.table().container() ).wrap( '<span class=\"ui input\" />' );\n} );\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/js/dataTables.dataTables.js",
    "content": "/*! DataTables styling integration\n * ©2018 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/js/dataTables.foundation.js",
    "content": "/*! DataTables Foundation integration\n * ©2011-2015 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * DataTables integration for Foundation. This requires Foundation 5 and\n * DataTables 1.10 or newer.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using Foundation. See https://datatables.net/manual/styling/foundation\n * for further information.\n */\n\n// Detect Foundation 5 / 6 as they have different element and class requirements\nvar meta = $('<meta class=\"foundation-mq\"/>').appendTo('head');\nDataTable.ext.foundationVersion = meta.css('font-family').match(/small|medium|large/) ? 6 : 5;\nmeta.remove();\n\n\n$.extend( DataTable.ext.classes, {\n\tsWrapper:    \"dataTables_wrapper dt-foundation\",\n\tsProcessing: \"dataTables_processing panel callout\"\n} );\n\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t\"<'row grid-x'<'small-6 columns cell'l><'small-6 columns cell'f>r>\"+\n\t\t\"t\"+\n\t\t\"<'row grid-x'<'small-6 columns cell'i><'small-6 columns cell'p>>\",\n\trenderer: 'foundation'\n} );\n\n\n/* Page button renderer */\nDataTable.ext.renderer.pageButton.foundation = function ( settings, host, idx, buttons, page, pages ) {\n\tvar api = new DataTable.Api( settings );\n\tvar classes = settings.oClasses;\n\tvar lang = settings.oLanguage.oPaginate;\n\tvar aria = settings.oLanguage.oAria.paginate || {};\n\tvar btnDisplay, btnClass;\n\tvar tag;\n\tvar v5 = DataTable.ext.foundationVersion === 5;\n\n\tvar attach = function( container, buttons ) {\n\t\tvar i, ien, node, button;\n\t\tvar clickHandler = function ( e ) {\n\t\t\te.preventDefault();\n\t\t\tif ( !$(e.currentTarget).hasClass('unavailable') && api.page() != e.data.action ) {\n\t\t\t\tapi.page( e.data.action ).draw( 'page' );\n\t\t\t}\n\t\t};\n\n\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\tattach( container, button );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtnDisplay = '';\n\t\t\t\tbtnClass = '';\n\t\t\t\ttag = null;\n\n\t\t\t\tswitch ( button ) {\n\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\tbtnDisplay = '&#x2026;';\n\t\t\t\t\t\tbtnClass = 'unavailable disabled';\n\t\t\t\t\t\ttag = null;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'first':\n\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' unavailable disabled');\n\t\t\t\t\t\ttag = page > 0 ? 'a' : null;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' unavailable disabled');\n\t\t\t\t\t\ttag = page > 0 ? 'a' : null;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'next':\n\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' unavailable disabled');\n\t\t\t\t\t\ttag = page < pages-1 ? 'a' : null;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'last':\n\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' unavailable disabled');\n\t\t\t\t\t\ttag = page < pages-1 ? 'a' : null;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t'current' : '';\n\t\t\t\t\t\ttag = page === button ?\n\t\t\t\t\t\t\tnull : 'a';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( v5 ) {\n\t\t\t\t\ttag = 'a';\n\t\t\t\t}\n\n\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\tvar disabled = btnClass.indexOf('disabled') !== -1;\n\n\t\t\t\t\tnode = $('<li>', {\n\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append( tag ?\n\t\t\t\t\t\t\t$('<'+tag+'/>', {\n\t\t\t\t\t\t\t\t'href': disabled ? null : '#',\n\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t'aria-current': btnClass === 'current' ? 'page' : null,\n\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex,\n\t\t\t\t\t\t\t} ).html( btnDisplay ) :\n\t\t\t\t\t\t\tbtnDisplay\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\tsettings.oApi._fnBindAction(\n\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tattach(\n\t\t$(host).empty().html('<ul class=\"pagination\"/>').children('ul'),\n\t\tbuttons\n\t);\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/js/dataTables.jqueryui.js",
    "content": "/*! DataTables jQuery UI integration\n * ©2011-2014 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * DataTables integration for jQuery UI. This requires jQuery UI and\n * DataTables 1.10 or newer.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using jQuery UI. See https://datatables.net/manual/styling/jqueryui\n * for further information.\n */\n\nvar toolbar_prefix = 'fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-';\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t'<\"'+toolbar_prefix+'tl ui-corner-tr\"lfr>'+\n\t\t't'+\n\t\t'<\"'+toolbar_prefix+'bl ui-corner-br\"ip>'\n} );\n\n\n$.extend( DataTable.ext.classes, {\n\t\"sWrapper\":            \"dataTables_wrapper dt-jqueryui\",\n\n\t/* Full numbers paging buttons */\n\t\"sPageButton\":         \"fg-button ui-button ui-state-default\",\n\t\"sPageButtonActive\":   \"ui-state-disabled\",\n\t\"sPageButtonDisabled\": \"ui-state-disabled\",\n\n\t/* Features */\n\t\"sPaging\": \"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi \"+\n\t\t\"ui-buttonset-multi paging_\", /* Note that the type is postfixed */\n\n\t/* Scrolling */\n\t\"sScrollHead\": \"dataTables_scrollHead \"+\"ui-state-default\",\n\t\"sScrollFoot\": \"dataTables_scrollFoot \"+\"ui-state-default\",\n\n\t/* Misc */\n\t\"sHeaderTH\":  \"ui-state-default\",\n\t\"sFooterTH\":  \"ui-state-default\"\n} );\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/js/dataTables.semanticui.js",
    "content": "/*! DataTables Bootstrap 3 integration\n * ©2011-2015 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * DataTables integration for FomanticUI (formally SemanticUI)\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using Bootstrap. See https://datatables.net/manual/styling/bootstrap\n * for further information.\n */\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t\"<'ui stackable grid'\"+\n\t\t\t\"<'row'\"+\n\t\t\t\t\"<'eight wide column'l>\"+\n\t\t\t\t\"<'right aligned eight wide column'f>\"+\n\t\t\t\">\"+\n\t\t\t\"<'row dt-table'\"+\n\t\t\t\t\"<'sixteen wide column'tr>\"+\n\t\t\t\">\"+\n\t\t\t\"<'row'\"+\n\t\t\t\t\"<'seven wide column'i>\"+\n\t\t\t\t\"<'right aligned nine wide column'p>\"+\n\t\t\t\">\"+\n\t\t\">\",\n\trenderer: 'semanticUI'\n} );\n\n\n/* Default class modification */\n$.extend( DataTable.ext.classes, {\n\tsWrapper:      \"dataTables_wrapper dt-semanticUI\",\n\tsFilter:       \"dataTables_filter ui input\",\n\tsProcessing:   \"dataTables_processing ui segment\",\n\tsPageButton:   \"paginate_button item\"\n} );\n\n\n/* Bootstrap paging button renderer */\nDataTable.ext.renderer.pageButton.semanticUI = function ( settings, host, idx, buttons, page, pages ) {\n\tvar api     = new DataTable.Api( settings );\n\tvar classes = settings.oClasses;\n\tvar lang    = settings.oLanguage.oPaginate;\n\tvar aria = settings.oLanguage.oAria.paginate || {};\n\tvar btnDisplay, btnClass;\n\n\tvar attach = function( container, buttons ) {\n\t\tvar i, ien, node, button;\n\t\tvar clickHandler = function ( e ) {\n\t\t\te.preventDefault();\n\t\t\tif ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {\n\t\t\t\tapi.page( e.data.action ).draw( 'page' );\n\t\t\t}\n\t\t};\n\n\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\tattach( container, button );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtnDisplay = '';\n\t\t\t\tbtnClass = '';\n\n\t\t\t\tswitch ( button ) {\n\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\tbtnDisplay = '&#x2026;';\n\t\t\t\t\t\tbtnClass = 'disabled';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'first':\n\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'next':\n\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'last':\n\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t'active' : '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tvar disabled = btnClass.indexOf('disabled') !== -1;\n\t\t\t\tvar tag = disabled ?\n\t\t\t\t\t'div' :\n\t\t\t\t\t'a';\n\n\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\tnode = $('<'+tag+'>', {\n\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t'href': disabled ? null : '#',\n\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t'aria-current': btnClass === 'active' ? 'page' : null,\n\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\tsettings.oApi._fnBindAction(\n\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t// inside an iframe or frame. \n\tvar activeEl;\n\n\ttry {\n\t\t// Because this approach is destroying and recreating the paging\n\t\t// elements, focus is lost on the select button which is bad for\n\t\t// accessibility. So we want to restore focus once the draw has\n\t\t// completed\n\t\tactiveEl = $(host).find(document.activeElement).data('dt-idx');\n\t}\n\tcatch (e) {}\n\n\tattach(\n\t\t$(host).empty().html('<div class=\"ui stackable pagination menu\"/>').children(),\n\t\tbuttons\n\t);\n\n\tif ( activeEl !== undefined ) {\n\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t}\n};\n\n\n// Javascript enhancements on table initialisation\n$(document).on( 'init.dt', function (e, ctx) {\n\tif ( e.namespace !== 'dt' ) {\n\t\treturn;\n\t}\n\n\tvar api = new $.fn.dataTable.Api( ctx );\n\n\t// Length menu drop down\n\tif ( $.fn.dropdown ) {\n\t\t$( 'div.dataTables_length select', api.table().container() ).dropdown();\n\t}\n\n\t// Filtering input\n\t$( 'div.dataTables_filter.ui.input', api.table().container() ).removeClass('input').addClass('form');\n\t$( 'div.dataTables_filter input', api.table().container() ).wrap( '<span class=\"ui input\" />' );\n} );\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/DataTables-1.13.8/js/jquery.dataTables.js",
    "content": "/*! DataTables 1.13.8\n * ©2008-2023 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     DataTables\n * @description Paginate, search and order HTML tables\n * @version     1.13.8\n * @author      SpryMedia Ltd\n * @contact     www.datatables.net\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - https://datatables.net/license\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: https://www.datatables.net\n */\n\n/*jslint evil: true, undef: true, browser: true */\n/*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_re_escape_regex,_empty,_intVal,_numToDecimal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidate,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/\n\n(function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\t// jQuery's factory checks for a global window - if it isn't present then it\n\t\t// returns a factory function that expects the window object\n\t\tvar jq = require('jquery');\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\twindow.DataTable = factory( jQuery, window, document );\n\t}\n}\n(function( $, window, document, undefined ) {\n\t\"use strict\";\n\n\t\n\tvar DataTable = function ( selector, options )\n\t{\n\t\t// Check if called with a window or jQuery object for DOM less applications\n\t\t// This is for backwards compatibility\n\t\tif (DataTable.factory(selector, options)) {\n\t\t\treturn DataTable;\n\t\t}\n\t\n\t\t// When creating with `new`, create a new DataTable, returning the API instance\n\t\tif (this instanceof DataTable) {\n\t\t\treturn $(selector).DataTable(options);\n\t\t}\n\t\telse {\n\t\t\t// Argument switching\n\t\t\toptions = selector;\n\t\t}\n\t\n\t\t/**\n\t\t * Perform a jQuery selector action on the table's TR elements (from the tbody) and\n\t\t * return the resulting jQuery object.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter\n\t\t *    criterion (\"applied\") or all TR elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {object} jQuery object, filtered by the given selector.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Highlight every second row\n\t\t *      oTable.$('tr:odd').css('backgroundColor', 'blue');\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to rows with 'Webkit' in them, add a background colour and then\n\t\t *      // remove the filter, thus highlighting the 'Webkit' rows only.\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      oTable.$('tr', {\"search\": \"applied\"}).css('backgroundColor', 'blue');\n\t\t *      oTable.fnFilter('');\n\t\t *    } );\n\t\t */\n\t\tthis.$ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).$( sSelector, oOpts );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Almost identical to $ in operation, but in this case returns the data for the matched\n\t\t * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes\n\t\t * rather than any descendants, so the data can be obtained for the row/cell. If matching\n\t\t * rows are found, the data returned is the original data array/object that was used to\n\t\t * create the row (or a generated array if from a DOM source).\n\t\t *\n\t\t * This method is often useful in-combination with $ where both functions are given the\n\t\t * same parameters and the array indexes will match identically.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select elements that meet the current filter\n\t\t *    criterion (\"applied\") or all elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the data in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {array} Data for the matched elements. If any elements, as a result of the\n\t\t *    selector, were not TR, TD or TH elements in the DataTable, they will have a null\n\t\t *    entry in the array.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the data from the first row in the table\n\t\t *      var data = oTable._('tr:first');\n\t\t *\n\t\t *      // Do something useful with the data\n\t\t *      alert( \"First cell is: \"+data[0] );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to 'Webkit' and get all data for\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      var data = oTable._('tr', {\"search\": \"applied\"});\n\t\t *\n\t\t *      // Do something with the data\n\t\t *      alert( data.length+\" rows matched the search\" );\n\t\t *    } );\n\t\t */\n\t\tthis._ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).rows( sSelector, oOpts ).data();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Create a DataTables Api instance, with the currently selected tables for\n\t\t * the Api's context.\n\t\t * @param {boolean} [traditional=false] Set the API instance's context to be\n\t\t *   only the table referred to by the `DataTable.ext.iApiIndex` option, as was\n\t\t *   used in the API presented by DataTables 1.9- (i.e. the traditional mode),\n\t\t *   or if all tables captured in the jQuery object should be used.\n\t\t * @return {DataTables.Api}\n\t\t */\n\t\tthis.api = function ( traditional )\n\t\t{\n\t\t\treturn traditional ?\n\t\t\t\tnew _Api(\n\t\t\t\t\t_fnSettingsFromNode( this[ _ext.iApiIndex ] )\n\t\t\t\t) :\n\t\t\t\tnew _Api( this );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Add a single new row or multiple rows of data to the table. Please note\n\t\t * that this is suitable for client-side processing only - if you are using\n\t\t * server-side processing (i.e. \"bServerSide\": true), then to add data, you\n\t\t * must add it to the data source, i.e. the server-side, through an Ajax call.\n\t\t *  @param {array|object} data The data to be added to the table. This can be:\n\t\t *    <ul>\n\t\t *      <li>1D array of data - add a single row with the data provided</li>\n\t\t *      <li>2D array of arrays - add multiple rows in a single call</li>\n\t\t *      <li>object - data object when using <i>mData</i></li>\n\t\t *      <li>array of objects - multiple data objects when using <i>mData</i></li>\n\t\t *    </ul>\n\t\t *  @param {bool} [redraw=true] redraw the table or not\n\t\t *  @returns {array} An array of integers, representing the list of indexes in\n\t\t *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to\n\t\t *    the table.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Global var for counter\n\t\t *    var giCount = 2;\n\t\t *\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example').dataTable();\n\t\t *    } );\n\t\t *\n\t\t *    function fnClickAddRow() {\n\t\t *      $('#example').dataTable().fnAddData( [\n\t\t *        giCount+\".1\",\n\t\t *        giCount+\".2\",\n\t\t *        giCount+\".3\",\n\t\t *        giCount+\".4\" ]\n\t\t *      );\n\t\t *\n\t\t *      giCount++;\n\t\t *    }\n\t\t */\n\t\tthis.fnAddData = function( data, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\t/* Check if we want to add multiple rows or not */\n\t\t\tvar rows = Array.isArray(data) && ( Array.isArray(data[0]) || $.isPlainObject(data[0]) ) ?\n\t\t\t\tapi.rows.add( data ) :\n\t\t\t\tapi.row.add( data );\n\t\t\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\n\t\t\treturn rows.flatten().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * This function will make DataTables recalculate the column sizes, based on the data\n\t\t * contained in the table and the sizes applied to the columns (in the DOM, CSS or\n\t\t * through the sWidth parameter). This can be useful when the width of the table's\n\t\t * parent element changes (for example a window resize).\n\t\t *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable( {\n\t\t *        \"sScrollY\": \"200px\",\n\t\t *        \"bPaginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      $(window).on('resize', function () {\n\t\t *        oTable.fnAdjustColumnSizing();\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnAdjustColumnSizing = function ( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).columns.adjust();\n\t\t\tvar settings = api.settings()[0];\n\t\t\tvar scroll = settings.oScroll;\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw( false );\n\t\t\t}\n\t\t\telse if ( scroll.sX !== \"\" || scroll.sY !== \"\" ) {\n\t\t\t\t/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */\n\t\t\t\t_fnScrollDraw( settings );\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Quickly and simply clear a table\n\t\t *  @param {bool} [bRedraw=true] redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)\n\t\t *      oTable.fnClearTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClearTable = function( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).clear();\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * The exact opposite of 'opening' a row, this function will close any rows which\n\t\t * are currently 'open'.\n\t\t *  @param {node} nTr the table row to 'close'\n\t\t *  @returns {int} 0 on success, or 1 if failed (can't find the row)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClose = function( nTr )\n\t\t{\n\t\t\tthis.api( true ).row( nTr ).child.hide();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Remove a row for the table\n\t\t *  @param {mixed} target The index of the row from aoData to be deleted, or\n\t\t *    the TR element you want to delete\n\t\t *  @param {function|null} [callBack] Callback function\n\t\t *  @param {bool} [redraw=true] Redraw the table or not\n\t\t *  @returns {array} The row that was deleted\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately remove the first row\n\t\t *      oTable.fnDeleteRow( 0 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnDeleteRow = function( target, callback, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar rows = api.rows( target );\n\t\t\tvar settings = rows.settings()[0];\n\t\t\tvar data = settings.aoData[ rows[0][0] ];\n\t\t\n\t\t\trows.remove();\n\t\t\n\t\t\tif ( callback ) {\n\t\t\t\tcallback.call( this, settings, data );\n\t\t\t}\n\t\t\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\n\t\t\treturn data;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Restore the table to it's original state in the DOM by removing all of DataTables\n\t\t * enhancements, alterations to the DOM structure of the table and event listeners.\n\t\t *  @param {boolean} [remove=false] Completely remove the table from the DOM\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      // This example is fairly pointless in reality, but shows how fnDestroy can be used\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnDestroy();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDestroy = function ( remove )\n\t\t{\n\t\t\tthis.api( true ).destroy( remove );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Redraw the table\n\t\t *  @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)\n\t\t *      oTable.fnDraw();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDraw = function( complete )\n\t\t{\n\t\t\t// Note that this isn't an exact match to the old call to _fnDraw - it takes\n\t\t\t// into account the new data, but can hold position.\n\t\t\tthis.api( true ).draw( complete );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Filter the input based on data\n\t\t *  @param {string} sInput String to filter the table on\n\t\t *  @param {int|null} [iColumn] Column to limit filtering to\n\t\t *  @param {bool} [bRegex=false] Treat as regular expression or not\n\t\t *  @param {bool} [bSmart=true] Perform smart filtering or not\n\t\t *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)\n\t\t *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sometime later - filter...\n\t\t *      oTable.fnFilter( 'test string' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( iColumn === null || iColumn === undefined ) {\n\t\t\t\tapi.search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\t\t\n\t\t\tapi.draw();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the data for the whole table, an individual row or an individual cell based on the\n\t\t * provided parameters.\n\t\t *  @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as\n\t\t *    a TR node then the data source for the whole row will be returned. If given as a\n\t\t *    TD/TH cell node then iCol will be automatically calculated and the data for the\n\t\t *    cell returned. If given as an integer, then this is treated as the aoData internal\n\t\t *    data index for the row (see fnGetPosition) and the data for that row used.\n\t\t *  @param {int} [col] Optional column index that you want the data of.\n\t\t *  @returns {array|object|string} If mRow is undefined, then the data for all rows is\n\t\t *    returned. If mRow is defined, just data for that row, and is iCol is\n\t\t *    defined, only data for the designated cell is returned.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Row data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('tr').click( function () {\n\t\t *        var data = oTable.fnGetData( this );\n\t\t *        // ... do something with the array / object of data for the row\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Individual cell data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('td').click( function () {\n\t\t *        var sData = oTable.fnGetData( this );\n\t\t *        alert( 'The cell clicked on had the value of '+sData );\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetData = function( src, col )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( src !== undefined ) {\n\t\t\t\tvar type = src.nodeName ? src.nodeName.toLowerCase() : '';\n\t\t\n\t\t\t\treturn col !== undefined || type == 'td' || type == 'th' ?\n\t\t\t\t\tapi.cell( src, col ).data() :\n\t\t\t\t\tapi.row( src ).data() || null;\n\t\t\t}\n\t\t\n\t\t\treturn api.data().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get an array of the TR nodes that are used in the table's body. Note that you will\n\t\t * typically want to use the '$' API method in preference to this as it is more\n\t\t * flexible.\n\t\t *  @param {int} [iRow] Optional row index for the TR element you want\n\t\t *  @returns {array|node} If iRow is undefined, returns an array of all TR elements\n\t\t *    in the table's body, or iRow is defined, just the TR element requested.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the nodes from the table\n\t\t *      var nNodes = oTable.fnGetNodes( );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetNodes = function( iRow )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\treturn iRow !== undefined ?\n\t\t\t\tapi.row( iRow ).node() :\n\t\t\t\tapi.rows().nodes().flatten().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the array indexes of a particular cell from it's DOM element\n\t\t * and column index including hidden columns\n\t\t *  @param {node} node this can either be a TR, TD or TH in the table's body\n\t\t *  @returns {int} If nNode is given as a TR, then a single index is returned, or\n\t\t *    if given as a cell, an array of [row index, column index (visible),\n\t\t *    column index (all)] is given.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example tbody td').click( function () {\n\t\t *        // Get the position of the current data from the node\n\t\t *        var aPos = oTable.fnGetPosition( this );\n\t\t *\n\t\t *        // Get the data array for this row\n\t\t *        var aData = oTable.fnGetData( aPos[0] );\n\t\t *\n\t\t *        // Update the data array and return the value\n\t\t *        aData[ aPos[1] ] = 'clicked';\n\t\t *        this.innerHTML = 'clicked';\n\t\t *      } );\n\t\t *\n\t\t *      // Init DataTables\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetPosition = function( node )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar nodeName = node.nodeName.toUpperCase();\n\t\t\n\t\t\tif ( nodeName == 'TR' ) {\n\t\t\t\treturn api.row( node ).index();\n\t\t\t}\n\t\t\telse if ( nodeName == 'TD' || nodeName == 'TH' ) {\n\t\t\t\tvar cell = api.cell( node ).index();\n\t\t\n\t\t\t\treturn [\n\t\t\t\t\tcell.row,\n\t\t\t\t\tcell.columnVisible,\n\t\t\t\t\tcell.column\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Check to see if a row is 'open' or not.\n\t\t *  @param {node} nTr the table row to check\n\t\t *  @returns {boolean} true if the row is currently open, false otherwise\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnIsOpen = function( nTr )\n\t\t{\n\t\t\treturn this.api( true ).row( nTr ).child.isShown();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * This function will place a new row directly after a row which is currently\n\t\t * on display on the page, with the HTML contents that is passed into the\n\t\t * function. This can be used, for example, to ask for confirmation that a\n\t\t * particular record should be deleted.\n\t\t *  @param {node} nTr The table row to 'open'\n\t\t *  @param {string|node|jQuery} mHtml The HTML to put into the row\n\t\t *  @param {string} sClass Class to give the new TD cell\n\t\t *  @returns {node} The row opened. Note that if the table row passed in as the\n\t\t *    first parameter, is not found in the table, this method will silently\n\t\t *    return.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnOpen = function( nTr, mHtml, sClass )\n\t\t{\n\t\t\treturn this.api( true )\n\t\t\t\t.row( nTr )\n\t\t\t\t.child( mHtml, sClass )\n\t\t\t\t.show()\n\t\t\t\t.child()[0];\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Change the pagination - provides the internal logic for pagination in a simple API\n\t\t * function. With this function you can have a DataTables table go to the next,\n\t\t * previous, first or last pages.\n\t\t *  @param {string|int} mAction Paging action to take: \"first\", \"previous\", \"next\" or \"last\"\n\t\t *    or page number to jump to (integer), note that page 0 is the first page.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnPageChange( 'next' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnPageChange = function ( mAction, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).page( mAction );\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw(false);\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Show a particular column\n\t\t *  @param {int} iCol The column whose display should be changed\n\t\t *  @param {bool} bShow Show (true) or hide (false) the column\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Hide the second column after initialisation\n\t\t *      oTable.fnSetColumnVis( 1, false );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSetColumnVis = function ( iCol, bShow, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).column( iCol ).visible( bShow );\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.columns.adjust().draw();\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the settings for a particular table for external manipulation\n\t\t *  @returns {object} DataTables settings object. See\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      var oSettings = oTable.fnSettings();\n\t\t *\n\t\t *      // Show an example parameter from the settings\n\t\t *      alert( oSettings._iDisplayStart );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSettings = function()\n\t\t{\n\t\t\treturn _fnSettingsFromNode( this[_ext.iApiIndex] );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Sort the table by a particular column\n\t\t *  @param {int} iCol the data index to sort on. Note that this will not match the\n\t\t *    'display index' if you have hidden data entries\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort immediately with columns 0 and 1\n\t\t *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSort = function( aaSort )\n\t\t{\n\t\t\tthis.api( true ).order( aaSort ).draw();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Attach a sort listener to an element for a given column\n\t\t *  @param {node} nNode the element to attach the sort listener to\n\t\t *  @param {int} iColumn the column that a click on this node will sort on\n\t\t *  @param {function} [fnCallback] callback function when sort is run\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort on column 1, when 'sorter' is clicked on\n\t\t *      oTable.fnSortListener( document.getElementById('sorter'), 1 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSortListener = function( nNode, iColumn, fnCallback )\n\t\t{\n\t\t\tthis.api( true ).order.listener( nNode, iColumn, fnCallback );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Update a table cell or row - this method will accept either a single value to\n\t\t * update the cell with, an array of values with one element for each column or\n\t\t * an object in the same format as the original data source. The function is\n\t\t * self-referencing in order to make the multi column updates easier.\n\t\t *  @param {object|array|string} mData Data to update the cell/row with\n\t\t *  @param {node|int} mRow TR element you want to update or the aoData index\n\t\t *  @param {int} [iColumn] The column to update, give as null or undefined to\n\t\t *    update a whole row.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @param {bool} [bAction=true] Perform pre-draw actions or not\n\t\t *  @returns {int} 0 on success, 1 on error\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell\n\t\t *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row\n\t\t *    } );\n\t\t */\n\t\tthis.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( iColumn === undefined || iColumn === null ) {\n\t\t\t\tapi.row( mRow ).data( mData );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.cell( mRow, iColumn ).data( mData );\n\t\t\t}\n\t\t\n\t\t\tif ( bAction === undefined || bAction ) {\n\t\t\t\tapi.columns.adjust();\n\t\t\t}\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\treturn 0;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Provide a common method for plug-ins to check the version of DataTables being used, in order\n\t\t * to ensure compatibility.\n\t\t *  @param {string} sVersion Version string to check for, in the format \"X.Y.Z\". Note that the\n\t\t *    formats \"X\" and \"X.Y\" are also acceptable.\n\t\t *  @returns {boolean} true if this version of DataTables is greater or equal to the required\n\t\t *    version, or false if this version of DataTales is not suitable\n\t\t *  @method\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      alert( oTable.fnVersionCheck( '1.9.0' ) );\n\t\t *    } );\n\t\t */\n\t\tthis.fnVersionCheck = _ext.fnVersionCheck;\n\t\t\n\t\n\t\tvar _that = this;\n\t\tvar emptyInit = options === undefined;\n\t\tvar len = this.length;\n\t\n\t\tif ( emptyInit ) {\n\t\t\toptions = {};\n\t\t}\n\t\n\t\tthis.oApi = this.internal = _ext.internal;\n\t\n\t\t// Extend with old style plug-in API methods\n\t\tfor ( var fn in DataTable.ext.internal ) {\n\t\t\tif ( fn ) {\n\t\t\t\tthis[fn] = _fnExternApiFunc(fn);\n\t\t\t}\n\t\t}\n\t\n\t\tthis.each(function() {\n\t\t\t// For each initialisation we want to give it a clean initialisation\n\t\t\t// object that can be bashed around\n\t\t\tvar o = {};\n\t\t\tvar oInit = len > 1 ? // optimisation for single table case\n\t\t\t\t_fnExtend( o, options, true ) :\n\t\t\t\toptions;\n\t\n\t\t\t/*global oInit,_that,emptyInit*/\n\t\t\tvar i=0, iLen, j, jLen, k, kLen;\n\t\t\tvar sId = this.getAttribute( 'id' );\n\t\t\tvar bInitHandedOff = false;\n\t\t\tvar defaults = DataTable.defaults;\n\t\t\tvar $this = $(this);\n\t\t\t\n\t\t\t\n\t\t\t/* Sanity check */\n\t\t\tif ( this.nodeName.toLowerCase() != 'table' )\n\t\t\t{\n\t\t\t\t_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\t/* Backwards compatibility for the defaults */\n\t\t\t_fnCompatOpts( defaults );\n\t\t\t_fnCompatCols( defaults.column );\n\t\t\t\n\t\t\t/* Convert the camel-case defaults to Hungarian */\n\t\t\t_fnCamelToHungarian( defaults, defaults, true );\n\t\t\t_fnCamelToHungarian( defaults.column, defaults.column, true );\n\t\t\t\n\t\t\t/* Setting up the initialisation object */\n\t\t\t_fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ), true );\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t/* Check to see if we are re-initialising a table */\n\t\t\tvar allSettings = DataTable.settings;\n\t\t\tfor ( i=0, iLen=allSettings.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tvar s = allSettings[i];\n\t\t\t\n\t\t\t\t/* Base check on table node */\n\t\t\t\tif (\n\t\t\t\t\ts.nTable == this ||\n\t\t\t\t\t(s.nTHead && s.nTHead.parentNode == this) ||\n\t\t\t\t\t(s.nTFoot && s.nTFoot.parentNode == this)\n\t\t\t\t) {\n\t\t\t\t\tvar bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;\n\t\t\t\t\tvar bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;\n\t\t\t\n\t\t\t\t\tif ( emptyInit || bRetrieve )\n\t\t\t\t\t{\n\t\t\t\t\t\treturn s.oInstance;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( bDestroy )\n\t\t\t\t\t{\n\t\t\t\t\t\ts.oInstance.fnDestroy();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* If the element we are initialising has the same ID as a table which was previously\n\t\t\t\t * initialised, but the table nodes don't match (from before) then we destroy the old\n\t\t\t\t * instance by simply deleting it. This is under the assumption that the table has been\n\t\t\t\t * destroyed by other methods. Anyone using non-id selectors will need to do this manually\n\t\t\t\t */\n\t\t\t\tif ( s.sTableId == this.id )\n\t\t\t\t{\n\t\t\t\t\tallSettings.splice( i, 1 );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* Ensure the table has an ID - required for accessibility */\n\t\t\tif ( sId === null || sId === \"\" )\n\t\t\t{\n\t\t\t\tsId = \"DataTables_Table_\"+(DataTable.ext._unique++);\n\t\t\t\tthis.id = sId;\n\t\t\t}\n\t\t\t\n\t\t\t/* Create the settings object for this table and set some of the default parameters */\n\t\t\tvar oSettings = $.extend( true, {}, DataTable.models.oSettings, {\n\t\t\t\t\"sDestroyWidth\": $this[0].style.width,\n\t\t\t\t\"sInstance\":     sId,\n\t\t\t\t\"sTableId\":      sId\n\t\t\t} );\n\t\t\toSettings.nTable = this;\n\t\t\toSettings.oApi   = _that.internal;\n\t\t\toSettings.oInit  = oInit;\n\t\t\t\n\t\t\tallSettings.push( oSettings );\n\t\t\t\n\t\t\t// Need to add the instance after the instance after the settings object has been added\n\t\t\t// to the settings array, so we can self reference the table instance if more than one\n\t\t\toSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();\n\t\t\t\n\t\t\t// Backwards compatibility, before we apply all the defaults\n\t\t\t_fnCompatOpts( oInit );\n\t\t\t_fnLanguageCompat( oInit.oLanguage );\n\t\t\t\n\t\t\t// If the length menu is given, but the init display length is not, use the length menu\n\t\t\tif ( oInit.aLengthMenu && ! oInit.iDisplayLength )\n\t\t\t{\n\t\t\t\toInit.iDisplayLength = Array.isArray( oInit.aLengthMenu[0] ) ?\n\t\t\t\t\toInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];\n\t\t\t}\n\t\t\t\n\t\t\t// Apply the defaults and init options to make a single init object will all\n\t\t\t// options defined from defaults and instance options.\n\t\t\toInit = _fnExtend( $.extend( true, {}, defaults ), oInit );\n\t\t\t\n\t\t\t\n\t\t\t// Map the initialisation options onto the settings object\n\t\t\t_fnMap( oSettings.oFeatures, oInit, [\n\t\t\t\t\"bPaginate\",\n\t\t\t\t\"bLengthChange\",\n\t\t\t\t\"bFilter\",\n\t\t\t\t\"bSort\",\n\t\t\t\t\"bSortMulti\",\n\t\t\t\t\"bInfo\",\n\t\t\t\t\"bProcessing\",\n\t\t\t\t\"bAutoWidth\",\n\t\t\t\t\"bSortClasses\",\n\t\t\t\t\"bServerSide\",\n\t\t\t\t\"bDeferRender\"\n\t\t\t] );\n\t\t\t_fnMap( oSettings, oInit, [\n\t\t\t\t\"asStripeClasses\",\n\t\t\t\t\"ajax\",\n\t\t\t\t\"fnServerData\",\n\t\t\t\t\"fnFormatNumber\",\n\t\t\t\t\"sServerMethod\",\n\t\t\t\t\"aaSorting\",\n\t\t\t\t\"aaSortingFixed\",\n\t\t\t\t\"aLengthMenu\",\n\t\t\t\t\"sPaginationType\",\n\t\t\t\t\"sAjaxSource\",\n\t\t\t\t\"sAjaxDataProp\",\n\t\t\t\t\"iStateDuration\",\n\t\t\t\t\"sDom\",\n\t\t\t\t\"bSortCellsTop\",\n\t\t\t\t\"iTabIndex\",\n\t\t\t\t\"fnStateLoadCallback\",\n\t\t\t\t\"fnStateSaveCallback\",\n\t\t\t\t\"renderer\",\n\t\t\t\t\"searchDelay\",\n\t\t\t\t\"rowId\",\n\t\t\t\t[ \"iCookieDuration\", \"iStateDuration\" ], // backwards compat\n\t\t\t\t[ \"oSearch\", \"oPreviousSearch\" ],\n\t\t\t\t[ \"aoSearchCols\", \"aoPreSearchCols\" ],\n\t\t\t\t[ \"iDisplayLength\", \"_iDisplayLength\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oScroll, oInit, [\n\t\t\t\t[ \"sScrollX\", \"sX\" ],\n\t\t\t\t[ \"sScrollXInner\", \"sXInner\" ],\n\t\t\t\t[ \"sScrollY\", \"sY\" ],\n\t\t\t\t[ \"bScrollCollapse\", \"bCollapse\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oLanguage, oInit, \"fnInfoCallback\" );\n\t\t\t\n\t\t\t/* Callback functions which are array driven */\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoServerParams',       oInit.fnServerParams,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow,        'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );\n\t\t\t\n\t\t\toSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );\n\t\t\t\n\t\t\t/* Browser support detection */\n\t\t\t_fnBrowserDetect( oSettings );\n\t\t\t\n\t\t\tvar oClasses = oSettings.oClasses;\n\t\t\t\n\t\t\t$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );\n\t\t\t$this.addClass( oClasses.sTable );\n\t\t\t\n\t\t\t\n\t\t\tif ( oSettings.iInitDisplayStart === undefined )\n\t\t\t{\n\t\t\t\t/* Display start point, taking into account the save saving */\n\t\t\t\toSettings.iInitDisplayStart = oInit.iDisplayStart;\n\t\t\t\toSettings._iDisplayStart = oInit.iDisplayStart;\n\t\t\t}\n\t\t\t\n\t\t\tif ( oInit.iDeferLoading !== null )\n\t\t\t{\n\t\t\t\toSettings.bDeferLoading = true;\n\t\t\t\tvar tmp = Array.isArray( oInit.iDeferLoading );\n\t\t\t\toSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;\n\t\t\t\toSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;\n\t\t\t}\n\t\t\t\n\t\t\t/* Language definitions */\n\t\t\tvar oLanguage = oSettings.oLanguage;\n\t\t\t$.extend( true, oLanguage, oInit.oLanguage );\n\t\t\t\n\t\t\tif ( oLanguage.sUrl )\n\t\t\t{\n\t\t\t\t/* Get the language definitions from a file - because this Ajax call makes the language\n\t\t\t\t * get async to the remainder of this function we use bInitHandedOff to indicate that\n\t\t\t\t * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor\n\t\t\t\t */\n\t\t\t\t$.ajax( {\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\turl: oLanguage.sUrl,\n\t\t\t\t\tsuccess: function ( json ) {\n\t\t\t\t\t\t_fnCamelToHungarian( defaults.oLanguage, json );\n\t\t\t\t\t\t_fnLanguageCompat( json );\n\t\t\t\t\t\t$.extend( true, oLanguage, json, oSettings.oInit.oLanguage );\n\t\t\t\n\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t},\n\t\t\t\t\terror: function () {\n\t\t\t\t\t\t// Error occurred loading language file, continue on as best we can\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tbInitHandedOff = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t\t}\n\t\t\t\n\t\t\t/*\n\t\t\t * Stripes\n\t\t\t */\n\t\t\tif ( oInit.asStripeClasses === null )\n\t\t\t{\n\t\t\t\toSettings.asStripeClasses =[\n\t\t\t\t\toClasses.sStripeOdd,\n\t\t\t\t\toClasses.sStripeEven\n\t\t\t\t];\n\t\t\t}\n\t\t\t\n\t\t\t/* Remove row stripe classes if they are already on the table row */\n\t\t\tvar stripeClasses = oSettings.asStripeClasses;\n\t\t\tvar rowOne = $this.children('tbody').find('tr').eq(0);\n\t\t\tif ( $.inArray( true, $.map( stripeClasses, function(el, i) {\n\t\t\t\treturn rowOne.hasClass(el);\n\t\t\t} ) ) !== -1 ) {\n\t\t\t\t$('tbody tr', this).removeClass( stripeClasses.join(' ') );\n\t\t\t\toSettings.asDestroyStripes = stripeClasses.slice();\n\t\t\t}\n\t\t\t\n\t\t\t/*\n\t\t\t * Columns\n\t\t\t * See if we should load columns automatically or use defined ones\n\t\t\t */\n\t\t\tvar anThs = [];\n\t\t\tvar aoColumnsInit;\n\t\t\tvar nThead = this.getElementsByTagName('thead');\n\t\t\tif ( nThead.length !== 0 )\n\t\t\t{\n\t\t\t\t_fnDetectHeader( oSettings.aoHeader, nThead[0] );\n\t\t\t\tanThs = _fnGetUniqueThs( oSettings );\n\t\t\t}\n\t\t\t\n\t\t\t/* If not given a column array, generate one with nulls */\n\t\t\tif ( oInit.aoColumns === null )\n\t\t\t{\n\t\t\t\taoColumnsInit = [];\n\t\t\t\tfor ( i=0, iLen=anThs.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\taoColumnsInit.push( null );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\taoColumnsInit = oInit.aoColumns;\n\t\t\t}\n\t\t\t\n\t\t\t/* Add the columns */\n\t\t\tfor ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\t_fnAddColumn( oSettings, anThs ? anThs[i] : null );\n\t\t\t}\n\t\t\t\n\t\t\t/* Apply the column definitions */\n\t\t\t_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {\n\t\t\t\t_fnColumnOptions( oSettings, iCol, oDef );\n\t\t\t} );\n\t\t\t\n\t\t\t/* HTML5 attribute detection - build an mData object automatically if the\n\t\t\t * attributes are found\n\t\t\t */\n\t\t\tif ( rowOne.length ) {\n\t\t\t\tvar a = function ( cell, name ) {\n\t\t\t\t\treturn cell.getAttribute( 'data-'+name ) !== null ? name : null;\n\t\t\t\t};\n\t\t\t\n\t\t\t\t$( rowOne[0] ).children('th, td').each( function (i, cell) {\n\t\t\t\t\tvar col = oSettings.aoColumns[i];\n\t\t\t\n\t\t\t\t\tif (! col) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\tif ( col.mData === i ) {\n\t\t\t\t\t\tvar sort = a( cell, 'sort' ) || a( cell, 'order' );\n\t\t\t\t\t\tvar filter = a( cell, 'filter' ) || a( cell, 'search' );\n\t\t\t\n\t\t\t\t\t\tif ( sort !== null || filter !== null ) {\n\t\t\t\t\t\t\tcol.mData = {\n\t\t\t\t\t\t\t\t_:      i+'.display',\n\t\t\t\t\t\t\t\tsort:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\ttype:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\tfilter: filter !== null ? i+'.@data-'+filter : undefined\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcol._isArrayHost = true;\n\t\t\t\n\t\t\t\t\t\t\t_fnColumnOptions( oSettings, i );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\t\n\t\t\tvar features = oSettings.oFeatures;\n\t\t\tvar loadedInit = function () {\n\t\t\t\t/*\n\t\t\t\t * Sorting\n\t\t\t\t * @todo For modularisation (1.11) this needs to do into a sort start up handler\n\t\t\t\t */\n\t\t\t\n\t\t\t\t// If aaSorting is not defined, then we use the first indicator in asSorting\n\t\t\t\t// in case that has been altered, so the default sort reflects that option\n\t\t\t\tif ( oInit.aaSorting === undefined ) {\n\t\t\t\t\tvar sorting = oSettings.aaSorting;\n\t\t\t\t\tfor ( i=0, iLen=sorting.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\tsorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* Do a first pass on the sorting classes (allows any size changes to be taken into\n\t\t\t\t * account, and also will apply sorting disabled classes if disabled\n\t\t\t\t */\n\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\n\t\t\t\tif ( features.bSort ) {\n\t\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\t\tif ( oSettings.bSorted ) {\n\t\t\t\t\t\t\tvar aSort = _fnSortFlatten( oSettings );\n\t\t\t\t\t\t\tvar sortedColumns = {};\n\t\t\t\n\t\t\t\t\t\t\t$.each( aSort, function (i, val) {\n\t\t\t\t\t\t\t\tsortedColumns[ val.src ] = val.dir;\n\t\t\t\t\t\t\t} );\n\t\t\t\n\t\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );\n\t\t\t\t\t\t\t_fnSortAria( oSettings );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\n\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\tif ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {\n\t\t\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\t\t}\n\t\t\t\t}, 'sc' );\n\t\t\t\n\t\t\t\n\t\t\t\t/*\n\t\t\t\t * Final init\n\t\t\t\t * Cache the header, body and footer as required, creating them if needed\n\t\t\t\t */\n\t\t\t\n\t\t\t\t// Work around for Webkit bug 83867 - store the caption-side before removing from doc\n\t\t\t\tvar captions = $this.children('caption').each( function () {\n\t\t\t\t\tthis._captionSide = $(this).css('caption-side');\n\t\t\t\t} );\n\t\t\t\n\t\t\t\tvar thead = $this.children('thead');\n\t\t\t\tif ( thead.length === 0 ) {\n\t\t\t\t\tthead = $('<thead/>').appendTo($this);\n\t\t\t\t}\n\t\t\t\toSettings.nTHead = thead[0];\n\t\t\t\n\t\t\t\tvar tbody = $this.children('tbody');\n\t\t\t\tif ( tbody.length === 0 ) {\n\t\t\t\t\ttbody = $('<tbody/>').insertAfter(thead);\n\t\t\t\t}\n\t\t\t\toSettings.nTBody = tbody[0];\n\t\t\t\n\t\t\t\tvar tfoot = $this.children('tfoot');\n\t\t\t\tif ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\") ) {\n\t\t\t\t\t// If we are a scrolling table, and no footer has been given, then we need to create\n\t\t\t\t\t// a tfoot element for the caption element to be appended to\n\t\t\t\t\ttfoot = $('<tfoot/>').appendTo($this);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif ( tfoot.length === 0 || tfoot.children().length === 0 ) {\n\t\t\t\t\t$this.addClass( oClasses.sNoFooter );\n\t\t\t\t}\n\t\t\t\telse if ( tfoot.length > 0 ) {\n\t\t\t\t\toSettings.nTFoot = tfoot[0];\n\t\t\t\t\t_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* Check if there is data passing into the constructor */\n\t\t\t\tif ( oInit.aaData ) {\n\t\t\t\t\tfor ( i=0 ; i<oInit.aaData.length ; i++ ) {\n\t\t\t\t\t\t_fnAddData( oSettings, oInit.aaData[ i ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' ) {\n\t\t\t\t\t/* Grab the data from the page - only do this when deferred loading or no Ajax\n\t\t\t\t\t * source since there is no point in reading the DOM data if we are then going\n\t\t\t\t\t * to replace it with Ajax data\n\t\t\t\t\t */\n\t\t\t\t\t_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* Copy the data index array */\n\t\t\t\toSettings.aiDisplay = oSettings.aiDisplayMaster.slice();\n\t\t\t\n\t\t\t\t/* Initialisation complete - table can be drawn */\n\t\t\t\toSettings.bInitialised = true;\n\t\t\t\n\t\t\t\t/* Check if we need to initialise the table (it might not have been handed off to the\n\t\t\t\t * language processor)\n\t\t\t\t */\n\t\t\t\tif ( bInitHandedOff === false ) {\n\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\t/* Must be done after everything which can be overridden by the state saving! */\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );\n\t\t\t\n\t\t\tif ( oInit.bStateSave )\n\t\t\t{\n\t\t\t\tfeatures.bStateSave = true;\n\t\t\t\t_fnLoadState( oSettings, oInit, loadedInit );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tloadedInit();\n\t\t\t}\n\t\t\t\n\t\t} );\n\t\t_that = null;\n\t\treturn this;\n\t};\n\t\n\t\n\t/*\n\t * It is useful to have variables which are scoped locally so only the\n\t * DataTables functions can access them and they don't leak into global space.\n\t * At the same time these functions are often useful over multiple files in the\n\t * core and API, so we list, or at least document, all variables which are used\n\t * by DataTables as private variables here. This also ensures that there is no\n\t * clashing of variable names and that they can easily referenced for reuse.\n\t */\n\t\n\t\n\t// Defined else where\n\t//  _selector_run\n\t//  _selector_opts\n\t//  _selector_first\n\t//  _selector_row_indexes\n\t\n\tvar _ext; // DataTable.ext\n\tvar _Api; // DataTable.Api\n\tvar _api_register; // DataTable.Api.register\n\tvar _api_registerPlural; // DataTable.Api.registerPlural\n\t\n\tvar _re_dic = {};\n\tvar _re_new_lines = /[\\r\\n\\u2028]/g;\n\tvar _re_html = /<.*?>/g;\n\t\n\t// This is not strict ISO8601 - Date.parse() is quite lax, although\n\t// implementations differ between browsers.\n\tvar _re_date = /^\\d{2,4}[\\.\\/\\-]\\d{1,2}[\\.\\/\\-]\\d{1,2}([T ]{1}\\d{1,2}[:\\.]\\d{2}([\\.:]\\d{2})?)?$/;\n\t\n\t// Escape regular expression special characters\n\tvar _re_escape_regex = new RegExp( '(\\\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\', '$', '^', '-' ].join('|\\\\') + ')', 'g' );\n\t\n\t// https://en.wikipedia.org/wiki/Foreign_exchange_market\n\t// - \\u20BD - Russian ruble.\n\t// - \\u20a9 - South Korean Won\n\t// - \\u20BA - Turkish Lira\n\t// - \\u20B9 - Indian Rupee\n\t// - R - Brazil (R$) and South Africa\n\t// - fr - Swiss Franc\n\t// - kr - Swedish krona, Norwegian krone and Danish krone\n\t// - \\u2009 is thin space and \\u202F is narrow no-break space, both used in many\n\t// - Ƀ - Bitcoin\n\t// - Ξ - Ethereum\n\t//   standards as thousands separators.\n\tvar _re_formatted_numeric = /['\\u00A0,$£€¥%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfkɃΞ]/gi;\n\t\n\t\n\tvar _empty = function ( d ) {\n\t\treturn !d || d === true || d === '-' ? true : false;\n\t};\n\t\n\t\n\tvar _intVal = function ( s ) {\n\t\tvar integer = parseInt( s, 10 );\n\t\treturn !isNaN(integer) && isFinite(s) ? integer : null;\n\t};\n\t\n\t// Convert from a formatted number with characters other than `.` as the\n\t// decimal place, to a Javascript number\n\tvar _numToDecimal = function ( num, decimalPoint ) {\n\t\t// Cache created regular expressions for speed as this function is called often\n\t\tif ( ! _re_dic[ decimalPoint ] ) {\n\t\t\t_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );\n\t\t}\n\t\treturn typeof num === 'string' && decimalPoint !== '.' ?\n\t\t\tnum.replace( /\\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :\n\t\t\tnum;\n\t};\n\t\n\t\n\tvar _isNumber = function ( d, decimalPoint, formatted ) {\n\t\tvar type = typeof d;\n\t\tvar strType = type === 'string';\n\t\n\t\tif ( type === 'number' || type === 'bigint') {\n\t\t\treturn true;\n\t\t}\n\t\n\t\t// If empty return immediately so there must be a number if it is a\n\t\t// formatted string (this stops the string \"k\", or \"kr\", etc being detected\n\t\t// as a formatted number for currency\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tif ( decimalPoint && strType ) {\n\t\t\td = _numToDecimal( d, decimalPoint );\n\t\t}\n\t\n\t\tif ( formatted && strType ) {\n\t\t\td = d.replace( _re_formatted_numeric, '' );\n\t\t}\n\t\n\t\treturn !isNaN( parseFloat(d) ) && isFinite( d );\n\t};\n\t\n\t\n\t// A string without HTML in it can be considered to be HTML still\n\tvar _isHtml = function ( d ) {\n\t\treturn _empty( d ) || typeof d === 'string';\n\t};\n\t\n\t\n\tvar _htmlNumeric = function ( d, decimalPoint, formatted ) {\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tvar html = _isHtml( d );\n\t\treturn ! html ?\n\t\t\tnull :\n\t\t\t_isNumber( _stripHtml( d ), decimalPoint, formatted ) ?\n\t\t\t\ttrue :\n\t\t\t\tnull;\n\t};\n\t\n\t\n\tvar _pluck = function ( a, prop, prop2 ) {\n\t\tvar out = [];\n\t\tvar i=0, ien=a.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] && a[i][ prop ] ) {\n\t\t\t\t\tout.push( a[i][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] ) {\n\t\t\t\t\tout.push( a[i][ prop ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\t// Basically the same as _pluck, but rather than looping over `a` we use `order`\n\t// as the indexes to pick from `a`\n\tvar _pluck_order = function ( a, order, prop, prop2 )\n\t{\n\t\tvar out = [];\n\t\tvar i=0, ien=order.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[ order[i] ][ prop ] ) {\n\t\t\t\t\tout.push( a[ order[i] ][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tout.push( a[ order[i] ][ prop ] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _range = function ( len, start )\n\t{\n\t\tvar out = [];\n\t\tvar end;\n\t\n\t\tif ( start === undefined ) {\n\t\t\tstart = 0;\n\t\t\tend = len;\n\t\t}\n\t\telse {\n\t\t\tend = start;\n\t\t\tstart = len;\n\t\t}\n\t\n\t\tfor ( var i=start ; i<end ; i++ ) {\n\t\t\tout.push( i );\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _removeEmpty = function ( a )\n\t{\n\t\tvar out = [];\n\t\n\t\tfor ( var i=0, ien=a.length ; i<ien ; i++ ) {\n\t\t\tif ( a[i] ) { // careful - will remove all falsy values!\n\t\t\t\tout.push( a[i] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _stripHtml = function ( d ) {\n\t\treturn d\n\t\t\t.replace( _re_html, '' ) // Complete tags\n\t\t\t.replace(/<script/i, ''); // Safety for incomplete script tag\n\t};\n\t\n\t\n\t/**\n\t * Determine if all values in the array are unique. This means we can short\n\t * cut the _unique method at the cost of a single loop. A sorted array is used\n\t * to easily check the values.\n\t *\n\t * @param  {array} src Source array\n\t * @return {boolean} true if all unique, false otherwise\n\t * @ignore\n\t */\n\tvar _areAllUnique = function ( src ) {\n\t\tif ( src.length < 2 ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tvar sorted = src.slice().sort();\n\t\tvar last = sorted[0];\n\t\n\t\tfor ( var i=1, ien=sorted.length ; i<ien ; i++ ) {\n\t\t\tif ( sorted[i] === last ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tlast = sorted[i];\n\t\t}\n\t\n\t\treturn true;\n\t};\n\t\n\t\n\t/**\n\t * Find the unique elements in a source array.\n\t *\n\t * @param  {array} src Source array\n\t * @return {array} Array of unique items\n\t * @ignore\n\t */\n\tvar _unique = function ( src )\n\t{\n\t\tif ( _areAllUnique( src ) ) {\n\t\t\treturn src.slice();\n\t\t}\n\t\n\t\t// A faster unique method is to use object keys to identify used values,\n\t\t// but this doesn't work with arrays or objects, which we must also\n\t\t// consider. See jsperf.com/compare-array-unique-versions/4 for more\n\t\t// information.\n\t\tvar\n\t\t\tout = [],\n\t\t\tval,\n\t\t\ti, ien=src.length,\n\t\t\tj, k=0;\n\t\n\t\tagain: for ( i=0 ; i<ien ; i++ ) {\n\t\t\tval = src[i];\n\t\n\t\t\tfor ( j=0 ; j<k ; j++ ) {\n\t\t\t\tif ( out[j] === val ) {\n\t\t\t\t\tcontinue again;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tout.push( val );\n\t\t\tk++;\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t// Surprisingly this is faster than [].concat.apply\n\t// https://jsperf.com/flatten-an-array-loop-vs-reduce/2\n\tvar _flatten = function (out, val) {\n\t\tif (Array.isArray(val)) {\n\t\t\tfor (var i=0 ; i<val.length ; i++) {\n\t\t\t\t_flatten(out, val[i]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tout.push(val);\n\t\t}\n\t  \n\t\treturn out;\n\t}\n\t\n\tvar _includes = function (search, start) {\n\t\tif (start === undefined) {\n\t\t\tstart = 0;\n\t\t}\n\t\n\t\treturn this.indexOf(search, start) !== -1;\t\n\t};\n\t\n\t// Array.isArray polyfill.\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\n\tif (! Array.isArray) {\n\t    Array.isArray = function(arg) {\n\t        return Object.prototype.toString.call(arg) === '[object Array]';\n\t    };\n\t}\n\t\n\tif (! Array.prototype.includes) {\n\t\tArray.prototype.includes = _includes;\n\t}\n\t\n\t// .trim() polyfill\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim\n\tif (!String.prototype.trim) {\n\t  String.prototype.trim = function () {\n\t    return this.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t  };\n\t}\n\t\n\tif (! String.prototype.includes) {\n\t\tString.prototype.includes = _includes;\n\t}\n\t\n\t/**\n\t * DataTables utility methods\n\t * \n\t * This namespace provides helper methods that DataTables uses internally to\n\t * create a DataTable, but which are not exclusively used only for DataTables.\n\t * These methods can be used by extension authors to save the duplication of\n\t * code.\n\t *\n\t *  @namespace\n\t */\n\tDataTable.util = {\n\t\t/**\n\t\t * Throttle the calls to a function. Arguments and context are maintained\n\t\t * for the throttled function.\n\t\t *\n\t\t * @param {function} fn Function to be called\n\t\t * @param {integer} freq Call frequency in mS\n\t\t * @return {function} Wrapped function\n\t\t */\n\t\tthrottle: function ( fn, freq ) {\n\t\t\tvar\n\t\t\t\tfrequency = freq !== undefined ? freq : 200,\n\t\t\t\tlast,\n\t\t\t\ttimer;\n\t\n\t\t\treturn function () {\n\t\t\t\tvar\n\t\t\t\t\tthat = this,\n\t\t\t\t\tnow  = +new Date(),\n\t\t\t\t\targs = arguments;\n\t\n\t\t\t\tif ( last && now < last + frequency ) {\n\t\t\t\t\tclearTimeout( timer );\n\t\n\t\t\t\t\ttimer = setTimeout( function () {\n\t\t\t\t\t\tlast = undefined;\n\t\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t\t}, frequency );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlast = now;\n\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Escape a string such that it can be used in a regular expression\n\t\t *\n\t\t *  @param {string} val string to escape\n\t\t *  @returns {string} escaped string\n\t\t */\n\t\tescapeRegex: function ( val ) {\n\t\t\treturn val.replace( _re_escape_regex, '\\\\$1' );\n\t\t},\n\t\n\t\t/**\n\t\t * Create a function that will write to a nested object or array\n\t\t * @param {*} source JSON notation string\n\t\t * @returns Write function\n\t\t */\n\t\tset: function ( source ) {\n\t\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t\t/* Unlike get, only the underscore (global) option is used for for\n\t\t\t\t * setting data since we don't know the type here. This is why an object\n\t\t\t\t * option is not documented for `mData` (which is read/write), but it is\n\t\t\t\t * for `mRender` which is read only.\n\t\t\t\t */\n\t\t\t\treturn DataTable.util.set( source._ );\n\t\t\t}\n\t\t\telse if ( source === null ) {\n\t\t\t\t// Nothing to do when the data source is null\n\t\t\t\treturn function () {};\n\t\t\t}\n\t\t\telse if ( typeof source === 'function' ) {\n\t\t\t\treturn function (data, val, meta) {\n\t\t\t\t\tsource( data, 'set', val, meta );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t\t  source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t\t{\n\t\t\t\t// Like the get, we need to get data from a nested object\n\t\t\t\tvar setData = function (data, val, src) {\n\t\t\t\t\tvar a = _fnSplitObjNotation( src ), b;\n\t\t\t\t\tvar aLast = a[a.length-1];\n\t\t\t\t\tvar arrayNotation, funcNotation, o, innerSrc;\n\t\t\n\t\t\t\t\tfor ( var i=0, iLen=a.length-1 ; i<iLen ; i++ ) {\n\t\t\t\t\t\t// Protect against prototype pollution\n\t\t\t\t\t\tif (a[i] === '__proto__' || a[i] === 'constructor') {\n\t\t\t\t\t\t\tthrow new Error('Cannot set prototype values');\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t// Check if we are dealing with an array notation request\n\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\t\n\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\t\t\t\t\tdata[ a[i] ] = [];\n\t\t\n\t\t\t\t\t\t\t// Get the remainder of the nested object to set so we can recurse\n\t\t\t\t\t\t\tb = a.slice();\n\t\t\t\t\t\t\tb.splice( 0, i+1 );\n\t\t\t\t\t\t\tinnerSrc = b.join('.');\n\t\t\n\t\t\t\t\t\t\t// Traverse each entry in the array setting the properties requested\n\t\t\t\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t\t\t\tfor ( var j=0, jLen=val.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\to = {};\n\t\t\t\t\t\t\t\t\tsetData( o, val[j], innerSrc );\n\t\t\t\t\t\t\t\t\tdata[ a[i] ].push( o );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// We've been asked to save data to an array, but it\n\t\t\t\t\t\t\t\t// isn't array data to be saved. Best that can be done\n\t\t\t\t\t\t\t\t// is to just save the value.\n\t\t\t\t\t\t\t\tdata[ a[i] ] = val;\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// The inner call to setData has already traversed through the remainder\n\t\t\t\t\t\t\t// of the source and has set the data, thus we can exit here\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\tdata = data[ a[i] ]( val );\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t// If the nested object doesn't currently exist - since we are\n\t\t\t\t\t\t// trying to set the value - create it\n\t\t\t\t\t\tif ( data[ a[i] ] === null || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\tdata[ a[i] ] = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\t// Last item in the input - i.e, the actual set\n\t\t\t\t\tif ( aLast.match(__reFn ) ) {\n\t\t\t\t\t\t// Function call\n\t\t\t\t\t\tdata = data[ aLast.replace(__reFn, '') ]( val );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// If array notation is used, we just want to strip it and use the property name\n\t\t\t\t\t\t// and assign the value. If it isn't used, then we get the result we want anyway\n\t\t\t\t\t\tdata[ aLast.replace(__reArray, '') ] = val;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\n\t\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\t\treturn setData( data, val, source );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Array or flat object mapping\n\t\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\t\tdata[source] = val;\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Create a function that will read nested objects from arrays, based on JSON notation\n\t\t * @param {*} source JSON notation string\n\t\t * @returns Value read\n\t\t */\n\t\tget: function ( source ) {\n\t\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t\t// Build an object of get functions, and wrap them in a single call\n\t\t\t\tvar o = {};\n\t\t\t\t$.each( source, function (key, val) {\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\to[key] = DataTable.util.get( val );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\n\t\t\t\treturn function (data, type, row, meta) {\n\t\t\t\t\tvar t = o[type] || o._;\n\t\t\t\t\treturn t !== undefined ?\n\t\t\t\t\t\tt(data, type, row, meta) :\n\t\t\t\t\t\tdata;\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( source === null ) {\n\t\t\t\t// Give an empty string for rendering / sorting etc\n\t\t\t\treturn function (data) { // type, row and meta also passed, but not used\n\t\t\t\t\treturn data;\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( typeof source === 'function' ) {\n\t\t\t\treturn function (data, type, row, meta) {\n\t\t\t\t\treturn source( data, type, row, meta );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t\t  source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t\t{\n\t\t\t\t/* If there is a . in the source string then the data source is in a\n\t\t\t\t * nested object so we loop over the data for each level to get the next\n\t\t\t\t * level down. On each loop we test for undefined, and if found immediately\n\t\t\t\t * return. This allows entire objects to be missing and sDefaultContent to\n\t\t\t\t * be used if defined, rather than throwing an error\n\t\t\t\t */\n\t\t\t\tvar fetchData = function (data, type, src) {\n\t\t\t\t\tvar arrayNotation, funcNotation, out, innerSrc;\n\t\t\n\t\t\t\t\tif ( src !== \"\" ) {\n\t\t\t\t\t\tvar a = _fnSplitObjNotation( src );\n\t\t\n\t\t\t\t\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\t\t// Check if we are dealing with special notation\n\t\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\t\n\t\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\t\t// Array notation\n\t\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\n\t\t\t\t\t\t\t\t// Condition allows simply [] to be passed in\n\t\t\t\t\t\t\t\tif ( a[i] !== \"\" ) {\n\t\t\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tout = [];\n\t\t\n\t\t\t\t\t\t\t\t// Get the remainder of the nested object to get\n\t\t\t\t\t\t\t\ta.splice( 0, i+1 );\n\t\t\t\t\t\t\t\tinnerSrc = a.join('.');\n\t\t\n\t\t\t\t\t\t\t\t// Traverse each entry in the array getting the properties requested\n\t\t\t\t\t\t\t\tif ( Array.isArray( data ) ) {\n\t\t\t\t\t\t\t\t\tfor ( var j=0, jLen=data.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\t\tout.push( fetchData( data[j], type, innerSrc ) );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t\t// If a string is given in between the array notation indicators, that\n\t\t\t\t\t\t\t\t// is used to join the strings together, otherwise an array is returned\n\t\t\t\t\t\t\t\tvar join = arrayNotation[0].substring(1, arrayNotation[0].length-1);\n\t\t\t\t\t\t\t\tdata = (join===\"\") ? out : out.join(join);\n\t\t\n\t\t\t\t\t\t\t\t// The inner call to fetchData has already traversed through the remainder\n\t\t\t\t\t\t\t\t// of the source requested, so we exit from the loop\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\t\tdata = data[ a[i] ]();\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\tif (data === null || data[ a[i] ] === null) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if ( data === undefined || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\treturn data;\n\t\t\t\t};\n\t\t\n\t\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\t\treturn fetchData( data, type, source );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Array or flat object mapping\n\t\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\t\treturn data[source];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\t\n\t/**\n\t * Create a mapping object that allows camel case parameters to be looked up\n\t * for their Hungarian counterparts. The mapping is stored in a private\n\t * parameter called `_hungarianMap` which can be accessed on the source object.\n\t *  @param {object} o\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnHungarianMap ( o )\n\t{\n\t\tvar\n\t\t\thungarian = 'a aa ai ao as b fn i m o s ',\n\t\t\tmatch,\n\t\t\tnewKey,\n\t\t\tmap = {};\n\t\n\t\t$.each( o, function (key, val) {\n\t\t\tmatch = key.match(/^([^A-Z]+?)([A-Z])/);\n\t\n\t\t\tif ( match && hungarian.indexOf(match[1]+' ') !== -1 )\n\t\t\t{\n\t\t\t\tnewKey = key.replace( match[0], match[2].toLowerCase() );\n\t\t\t\tmap[ newKey ] = key;\n\t\n\t\t\t\tif ( match[1] === 'o' )\n\t\t\t\t{\n\t\t\t\t\t_fnHungarianMap( o[key] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t\n\t\to._hungarianMap = map;\n\t}\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian, based on a Hungarian map\n\t * created by _fnHungarianMap.\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCamelToHungarian ( src, user, force )\n\t{\n\t\tif ( ! src._hungarianMap ) {\n\t\t\t_fnHungarianMap( src );\n\t\t}\n\t\n\t\tvar hungarianKey;\n\t\n\t\t$.each( user, function (key, val) {\n\t\t\thungarianKey = src._hungarianMap[ key ];\n\t\n\t\t\tif ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )\n\t\t\t{\n\t\t\t\t// For objects, we need to buzz down into the object to copy parameters\n\t\t\t\tif ( hungarianKey.charAt(0) === 'o' )\n\t\t\t\t{\n\t\t\t\t\t// Copy the camelCase options over to the hungarian\n\t\t\t\t\tif ( ! user[ hungarianKey ] ) {\n\t\t\t\t\t\tuser[ hungarianKey ] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, user[hungarianKey], user[key] );\n\t\n\t\t\t\t\t_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tuser[hungarianKey] = user[ key ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Language compatibility - when certain options are given, and others aren't, we\n\t * need to duplicate the values over, in order to provide backwards compatibility\n\t * with older language files.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLanguageCompat( lang )\n\t{\n\t\t// Note the use of the Hungarian notation for the parameters in this method as\n\t\t// this is called after the mapping of camelCase to Hungarian\n\t\tvar defaults = DataTable.defaults.oLanguage;\n\t\n\t\t// Default mapping\n\t\tvar defaultDecimal = defaults.sDecimal;\n\t\tif ( defaultDecimal ) {\n\t\t\t_addNumericSort( defaultDecimal );\n\t\t}\n\t\n\t\tif ( lang ) {\n\t\t\tvar zeroRecords = lang.sZeroRecords;\n\t\n\t\t\t// Backwards compatibility - if there is no sEmptyTable given, then use the same as\n\t\t\t// sZeroRecords - assuming that is given.\n\t\t\tif ( ! lang.sEmptyTable && zeroRecords &&\n\t\t\t\tdefaults.sEmptyTable === \"No data available in table\" )\n\t\t\t{\n\t\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sEmptyTable' );\n\t\t\t}\n\t\n\t\t\t// Likewise with loading records\n\t\t\tif ( ! lang.sLoadingRecords && zeroRecords &&\n\t\t\t\tdefaults.sLoadingRecords === \"Loading...\" )\n\t\t\t{\n\t\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sLoadingRecords' );\n\t\t\t}\n\t\n\t\t\t// Old parameter name of the thousands separator mapped onto the new\n\t\t\tif ( lang.sInfoThousands ) {\n\t\t\t\tlang.sThousands = lang.sInfoThousands;\n\t\t\t}\n\t\n\t\t\tvar decimal = lang.sDecimal;\n\t\t\tif ( decimal && defaultDecimal !== decimal ) {\n\t\t\t\t_addNumericSort( decimal );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Map one parameter onto another\n\t *  @param {object} o Object to map\n\t *  @param {*} knew The new parameter name\n\t *  @param {*} old The old parameter name\n\t */\n\tvar _fnCompatMap = function ( o, knew, old ) {\n\t\tif ( o[ knew ] !== undefined ) {\n\t\t\to[ old ] = o[ knew ];\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for the main DT options. Note that the new\n\t * options are mapped onto the old parameters, so this is an external interface\n\t * change only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatOpts ( init )\n\t{\n\t\t_fnCompatMap( init, 'ordering',      'bSort' );\n\t\t_fnCompatMap( init, 'orderMulti',    'bSortMulti' );\n\t\t_fnCompatMap( init, 'orderClasses',  'bSortClasses' );\n\t\t_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );\n\t\t_fnCompatMap( init, 'order',         'aaSorting' );\n\t\t_fnCompatMap( init, 'orderFixed',    'aaSortingFixed' );\n\t\t_fnCompatMap( init, 'paging',        'bPaginate' );\n\t\t_fnCompatMap( init, 'pagingType',    'sPaginationType' );\n\t\t_fnCompatMap( init, 'pageLength',    'iDisplayLength' );\n\t\t_fnCompatMap( init, 'searching',     'bFilter' );\n\t\n\t\t// Boolean initialisation of x-scrolling\n\t\tif ( typeof init.sScrollX === 'boolean' ) {\n\t\t\tinit.sScrollX = init.sScrollX ? '100%' : '';\n\t\t}\n\t\tif ( typeof init.scrollX === 'boolean' ) {\n\t\t\tinit.scrollX = init.scrollX ? '100%' : '';\n\t\t}\n\t\n\t\t// Column search objects are in an array, so it needs to be converted\n\t\t// element by element\n\t\tvar searchCols = init.aoSearchCols;\n\t\n\t\tif ( searchCols ) {\n\t\t\tfor ( var i=0, ien=searchCols.length ; i<ien ; i++ ) {\n\t\t\t\tif ( searchCols[i] ) {\n\t\t\t\t\t_fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for column options. Note that the new options\n\t * are mapped onto the old parameters, so this is an external interface change\n\t * only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatCols ( init )\n\t{\n\t\t_fnCompatMap( init, 'orderable',     'bSortable' );\n\t\t_fnCompatMap( init, 'orderData',     'aDataSort' );\n\t\t_fnCompatMap( init, 'orderSequence', 'asSorting' );\n\t\t_fnCompatMap( init, 'orderDataType', 'sortDataType' );\n\t\n\t\t// orderData can be given as an integer\n\t\tvar dataSort = init.aDataSort;\n\t\tif ( typeof dataSort === 'number' && ! Array.isArray( dataSort ) ) {\n\t\t\tinit.aDataSort = [ dataSort ];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Browser feature detection for capabilities, quirks\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBrowserDetect( settings )\n\t{\n\t\t// We don't need to do this every time DataTables is constructed, the values\n\t\t// calculated are specific to the browser and OS configuration which we\n\t\t// don't expect to change between initialisations\n\t\tif ( ! DataTable.__browser ) {\n\t\t\tvar browser = {};\n\t\t\tDataTable.__browser = browser;\n\t\n\t\t\t// Scrolling feature / quirks detection\n\t\t\tvar n = $('<div/>')\n\t\t\t\t.css( {\n\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: $(window).scrollLeft()*-1, // allow for scrolling\n\t\t\t\t\theight: 1,\n\t\t\t\t\twidth: 1,\n\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\ttop: 1,\n\t\t\t\t\t\t\tleft: 1,\n\t\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\t\toverflow: 'scroll'\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\theight: 10\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.appendTo( 'body' );\n\t\n\t\t\tvar outer = n.children();\n\t\t\tvar inner = outer.children();\n\t\n\t\t\t// Numbers below, in order, are:\n\t\t\t// inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth\n\t\t\t//\n\t\t\t// IE6 XP:                           100 100 100  83\n\t\t\t// IE7 Vista:                        100 100 100  83\n\t\t\t// IE 8+ Windows:                     83  83 100  83\n\t\t\t// Evergreen Windows:                 83  83 100  83\n\t\t\t// Evergreen Mac with scrollbars:     85  85 100  85\n\t\t\t// Evergreen Mac without scrollbars: 100 100 100 100\n\t\n\t\t\t// Get scrollbar width\n\t\t\tbrowser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;\n\t\n\t\t\t// IE6/7 will oversize a width 100% element inside a scrolling element, to\n\t\t\t// include the width of the scrollbar, while other browsers ensure the inner\n\t\t\t// element is contained without forcing scrolling\n\t\t\tbrowser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;\n\t\n\t\t\t// In rtl text layout, some browsers (most, but not all) will place the\n\t\t\t// scrollbar on the left, rather than the right.\n\t\t\tbrowser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;\n\t\n\t\t\t// IE8- don't provide height and width for getBoundingClientRect\n\t\t\tbrowser.bBounding = n[0].getBoundingClientRect().width ? true : false;\n\t\n\t\t\tn.remove();\n\t\t}\n\t\n\t\t$.extend( settings.oBrowser, DataTable.__browser );\n\t\tsettings.oScroll.iBarWidth = DataTable.__browser.barWidth;\n\t}\n\t\n\t\n\t/**\n\t * Array.prototype reduce[Right] method, used for browsers which don't support\n\t * JS 1.6. Done this way to reduce code size, since we iterate either way\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReduce ( that, fn, init, start, end, inc )\n\t{\n\t\tvar\n\t\t\ti = start,\n\t\t\tvalue,\n\t\t\tisSet = false;\n\t\n\t\tif ( init !== undefined ) {\n\t\t\tvalue = init;\n\t\t\tisSet = true;\n\t\t}\n\t\n\t\twhile ( i !== end ) {\n\t\t\tif ( ! that.hasOwnProperty(i) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tvalue = isSet ?\n\t\t\t\tfn( value, that[i], i, that ) :\n\t\t\t\tthat[i];\n\t\n\t\t\tisSet = true;\n\t\t\ti += inc;\n\t\t}\n\t\n\t\treturn value;\n\t}\n\t\n\t/**\n\t * Add a column to the list used for the table with default values\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nTh The th element for this column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddColumn( oSettings, nTh )\n\t{\n\t\t// Add column to aoColumns array\n\t\tvar oDefaults = DataTable.defaults.column;\n\t\tvar iCol = oSettings.aoColumns.length;\n\t\tvar oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {\n\t\t\t\"nTh\": nTh ? nTh : document.createElement('th'),\n\t\t\t\"sTitle\":    oDefaults.sTitle    ? oDefaults.sTitle    : nTh ? nTh.innerHTML : '',\n\t\t\t\"aDataSort\": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],\n\t\t\t\"mData\": oDefaults.mData ? oDefaults.mData : iCol,\n\t\t\tidx: iCol\n\t\t} );\n\t\toSettings.aoColumns.push( oCol );\n\t\n\t\t// Add search object for column specific search. Note that the `searchCols[ iCol ]`\n\t\t// passed into extend can be undefined. This allows the user to give a default\n\t\t// with only some of the parameters defined, and also not give a default\n\t\tvar searchCols = oSettings.aoPreSearchCols;\n\t\tsearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );\n\t\n\t\t// Use the default column options function to initialise classes etc\n\t\t_fnColumnOptions( oSettings, iCol, $(nTh).data() );\n\t}\n\t\n\t\n\t/**\n\t * Apply options for a column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iCol column index to consider\n\t *  @param {object} oOptions object with sType, bVisible and bSearchable etc\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnOptions( oSettings, iCol, oOptions )\n\t{\n\t\tvar oCol = oSettings.aoColumns[ iCol ];\n\t\tvar oClasses = oSettings.oClasses;\n\t\tvar th = $(oCol.nTh);\n\t\n\t\t// Try to get width information from the DOM. We can't get it from CSS\n\t\t// as we'd need to parse the CSS stylesheet. `width` option can override\n\t\tif ( ! oCol.sWidthOrig ) {\n\t\t\t// Width attribute\n\t\t\toCol.sWidthOrig = th.attr('width') || null;\n\t\n\t\t\t// Style attribute\n\t\t\tvar t = (th.attr('style') || '').match(/width:\\s*(\\d+[pxem%]+)/);\n\t\t\tif ( t ) {\n\t\t\t\toCol.sWidthOrig = t[1];\n\t\t\t}\n\t\t}\n\t\n\t\t/* User specified column options */\n\t\tif ( oOptions !== undefined && oOptions !== null )\n\t\t{\n\t\t\t// Backwards compatibility\n\t\t\t_fnCompatCols( oOptions );\n\t\n\t\t\t// Map camel case parameters to their Hungarian counterparts\n\t\t\t_fnCamelToHungarian( DataTable.defaults.column, oOptions, true );\n\t\n\t\t\t/* Backwards compatibility for mDataProp */\n\t\t\tif ( oOptions.mDataProp !== undefined && !oOptions.mData )\n\t\t\t{\n\t\t\t\toOptions.mData = oOptions.mDataProp;\n\t\t\t}\n\t\n\t\t\tif ( oOptions.sType )\n\t\t\t{\n\t\t\t\toCol._sManualType = oOptions.sType;\n\t\t\t}\n\t\n\t\t\t// `class` is a reserved word in Javascript, so we need to provide\n\t\t\t// the ability to use a valid name for the camel case input\n\t\t\tif ( oOptions.className && ! oOptions.sClass )\n\t\t\t{\n\t\t\t\toOptions.sClass = oOptions.className;\n\t\t\t}\n\t\t\tif ( oOptions.sClass ) {\n\t\t\t\tth.addClass( oOptions.sClass );\n\t\t\t}\n\t\n\t\t\tvar origClass = oCol.sClass;\n\t\n\t\t\t$.extend( oCol, oOptions );\n\t\t\t_fnMap( oCol, oOptions, \"sWidth\", \"sWidthOrig\" );\n\t\n\t\t\t// Merge class from previously defined classes with this one, rather than just\n\t\t\t// overwriting it in the extend above\n\t\t\tif (origClass !== oCol.sClass) {\n\t\t\t\toCol.sClass = origClass + ' ' + oCol.sClass;\n\t\t\t}\n\t\n\t\t\t/* iDataSort to be applied (backwards compatibility), but aDataSort will take\n\t\t\t * priority if defined\n\t\t\t */\n\t\t\tif ( oOptions.iDataSort !== undefined )\n\t\t\t{\n\t\t\t\toCol.aDataSort = [ oOptions.iDataSort ];\n\t\t\t}\n\t\t\t_fnMap( oCol, oOptions, \"aDataSort\" );\n\t\n\t\t\t// Fall back to the aria-label attribute on the table header if no ariaTitle is\n\t\t\t// provided.\n\t\t\tif (! oCol.ariaTitle) {\n\t\t\t\toCol.ariaTitle = th.attr(\"aria-label\");\n\t\t\t}\n\t\t}\n\t\n\t\t/* Cache the data get and set functions for speed */\n\t\tvar mDataSrc = oCol.mData;\n\t\tvar mData = _fnGetObjectDataFn( mDataSrc );\n\t\tvar mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;\n\t\n\t\tvar attrTest = function( src ) {\n\t\t\treturn typeof src === 'string' && src.indexOf('@') !== -1;\n\t\t};\n\t\toCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (\n\t\t\tattrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)\n\t\t);\n\t\toCol._setter = null;\n\t\n\t\toCol.fnGetData = function (rowData, type, meta) {\n\t\t\tvar innerData = mData( rowData, type, undefined, meta );\n\t\n\t\t\treturn mRender && type ?\n\t\t\t\tmRender( innerData, type, rowData, meta ) :\n\t\t\t\tinnerData;\n\t\t};\n\t\toCol.fnSetData = function ( rowData, val, meta ) {\n\t\t\treturn _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );\n\t\t};\n\t\n\t\t// Indicate if DataTables should read DOM data as an object or array\n\t\t// Used in _fnGetRowElements\n\t\tif ( typeof mDataSrc !== 'number' && ! oCol._isArrayHost ) {\n\t\t\toSettings._rowReadObject = true;\n\t\t}\n\t\n\t\t/* Feature sorting overrides column specific when off */\n\t\tif ( !oSettings.oFeatures.bSort )\n\t\t{\n\t\t\toCol.bSortable = false;\n\t\t\tth.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called\n\t\t}\n\t\n\t\t/* Check that the class assignment is correct for sorting */\n\t\tvar bAsc = $.inArray('asc', oCol.asSorting) !== -1;\n\t\tvar bDesc = $.inArray('desc', oCol.asSorting) !== -1;\n\t\tif ( !oCol.bSortable || (!bAsc && !bDesc) )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableNone;\n\t\t\toCol.sSortingClassJUI = \"\";\n\t\t}\n\t\telse if ( bAsc && !bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableAsc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;\n\t\t}\n\t\telse if ( !bAsc && bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableDesc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;\n\t\t}\n\t\telse\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortable;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUI;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Adjust the table column widths for new data. Note: you would probably want to\n\t * do a redraw after calling this function!\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAdjustColumnSizing ( settings )\n\t{\n\t\t/* Not interested in doing column width calculation if auto-width is disabled */\n\t\tif ( settings.oFeatures.bAutoWidth !== false )\n\t\t{\n\t\t\tvar columns = settings.aoColumns;\n\t\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t\tfor ( var i=0 , iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tcolumns[i].nTh.style.width = columns[i].sWidth;\n\t\t\t}\n\t\t}\n\t\n\t\tvar scroll = settings.oScroll;\n\t\tif ( scroll.sY !== '' || scroll.sX !== '')\n\t\t{\n\t\t\t_fnScrollDraw( settings );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'column-sizing', [settings] );\n\t}\n\t\n\t\n\t/**\n\t * Convert the index of a visible column to the index in the data array (take account\n\t * of hidden columns)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iMatch Visible column index to lookup\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisibleToColumnIndex( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\n\t\treturn typeof aiVis[iMatch] === 'number' ?\n\t\t\taiVis[iMatch] :\n\t\t\tnull;\n\t}\n\t\n\t\n\t/**\n\t * Convert the index of an index in the data array and convert it to the visible\n\t *   column index (take account of hidden columns)\n\t *  @param {int} iMatch Column index to lookup\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnIndexToVisible( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\tvar iPos = $.inArray( iMatch, aiVis );\n\t\n\t\treturn iPos !== -1 ? iPos : null;\n\t}\n\t\n\t\n\t/**\n\t * Get the number of visible columns\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the number of visible columns\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisbleColumns( oSettings )\n\t{\n\t\tvar vis = 0;\n\t\n\t\t// No reduce in IE8, use a loop for now\n\t\t$.each( oSettings.aoColumns, function ( i, col ) {\n\t\t\tif ( col.bVisible && $(col.nTh).css('display') !== 'none' ) {\n\t\t\t\tvis++;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn vis;\n\t}\n\t\n\t\n\t/**\n\t * Get an array of column indexes that match a given property\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sParam Parameter in aoColumns to look for - typically\n\t *    bVisible or bSearchable\n\t *  @returns {array} Array of indexes with matched properties\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetColumns( oSettings, sParam )\n\t{\n\t\tvar a = [];\n\t\n\t\t$.map( oSettings.aoColumns, function(val, i) {\n\t\t\tif ( val[sParam] ) {\n\t\t\t\ta.push( i );\n\t\t\t}\n\t\t} );\n\t\n\t\treturn a;\n\t}\n\t\n\t\n\t/**\n\t * Calculate the 'type' of a column\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnTypes ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar data = settings.aoData;\n\t\tvar types = DataTable.ext.type.detect;\n\t\tvar i, ien, j, jen, k, ken;\n\t\tvar col, cell, detectedType, cache;\n\t\n\t\t// For each column, spin over the \n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcol = columns[i];\n\t\t\tcache = [];\n\t\n\t\t\tif ( ! col.sType && col._sManualType ) {\n\t\t\t\tcol.sType = col._sManualType;\n\t\t\t}\n\t\t\telse if ( ! col.sType ) {\n\t\t\t\tfor ( j=0, jen=types.length ; j<jen ; j++ ) {\n\t\t\t\t\tfor ( k=0, ken=data.length ; k<ken ; k++ ) {\n\t\t\t\t\t\t// Use a cache array so we only need to get the type data\n\t\t\t\t\t\t// from the formatter once (when using multiple detectors)\n\t\t\t\t\t\tif ( cache[k] === undefined ) {\n\t\t\t\t\t\t\tcache[k] = _fnGetCellData( settings, k, i, 'type' );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tdetectedType = types[j]( cache[k], settings );\n\t\n\t\t\t\t\t\t// If null, then this type can't apply to this column, so\n\t\t\t\t\t\t// rather than testing all cells, break out. There is an\n\t\t\t\t\t\t// exception for the last type which is `html`. We need to\n\t\t\t\t\t\t// scan all rows since it is possible to mix string and HTML\n\t\t\t\t\t\t// types\n\t\t\t\t\t\tif ( ! detectedType && j !== types.length-1 ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Only a single match is needed for html type since it is\n\t\t\t\t\t\t// bottom of the pile and very similar to string - but it\n\t\t\t\t\t\t// must not be empty\n\t\t\t\t\t\tif ( detectedType === 'html' && ! _empty(cache[k]) ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Type is valid for all data points in the column - use this\n\t\t\t\t\t// type\n\t\t\t\t\tif ( detectedType ) {\n\t\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Fall back - if no type was detected, always use string\n\t\t\t\tif ( ! col.sType ) {\n\t\t\t\t\tcol.sType = 'string';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Take the column definitions and static columns arrays and calculate how\n\t * they relate to column indexes. The callback function will then apply the\n\t * definition found for a column to a suitable configuration object.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aoColDefs The aoColumnDefs array that is to be applied\n\t *  @param {array} aoCols The aoColumns array that defines columns individually\n\t *  @param {function} fn Callback function - takes two parameters, the calculated\n\t *    column index and the definition for that column.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, def;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\t// Column definitions with aTargets\n\t\tif ( aoColDefs )\n\t\t{\n\t\t\t/* Loop over the definitions array - loop in reverse so first instance has priority */\n\t\t\tfor ( i=aoColDefs.length-1 ; i>=0 ; i-- )\n\t\t\t{\n\t\t\t\tdef = aoColDefs[i];\n\t\n\t\t\t\t/* Each definition can target multiple columns, as it is an array */\n\t\t\t\tvar aTargets = def.target !== undefined\n\t\t\t\t\t? def.target\n\t\t\t\t\t: def.targets !== undefined\n\t\t\t\t\t\t? def.targets\n\t\t\t\t\t\t: def.aTargets;\n\t\n\t\t\t\tif ( ! Array.isArray( aTargets ) )\n\t\t\t\t{\n\t\t\t\t\taTargets = [ aTargets ];\n\t\t\t\t}\n\t\n\t\t\t\tfor ( j=0, jLen=aTargets.length ; j<jLen ; j++ )\n\t\t\t\t{\n\t\t\t\t\tif ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Add columns that we don't yet know about */\n\t\t\t\t\t\twhile( columns.length <= aTargets[j] )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t_fnAddColumn( oSettings );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t/* Integer, basic index */\n\t\t\t\t\t\tfn( aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Negative integer, right to left column counting */\n\t\t\t\t\t\tfn( columns.length+aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'string' )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Class name matching on TH element */\n\t\t\t\t\t\tfor ( k=0, kLen=columns.length ; k<kLen ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ( aTargets[j] == \"_all\" ||\n\t\t\t\t\t\t\t     $(columns[k].nTh).hasClass( aTargets[j] ) )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfn( k, def );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Statically defined columns array\n\t\tif ( aoCols )\n\t\t{\n\t\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tfn( i, aoCols[i] );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Add a data array to the table, creating DOM node etc. This is the parallel to\n\t * _fnGatherData, but for adding rows from a Javascript source, rather than a\n\t * DOM source.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aData data array to be added\n\t *  @param {node} [nTr] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddData ( oSettings, aDataIn, nTr, anTds )\n\t{\n\t\t/* Create the object for storing information about this new row */\n\t\tvar iRow = oSettings.aoData.length;\n\t\tvar oData = $.extend( true, {}, DataTable.models.oRow, {\n\t\t\tsrc: nTr ? 'dom' : 'data',\n\t\t\tidx: iRow\n\t\t} );\n\t\n\t\toData._aData = aDataIn;\n\t\toSettings.aoData.push( oData );\n\t\n\t\t/* Create the cells */\n\t\tvar nTd, sThisType;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\t// Invalidate the column types as the new data needs to be revalidated\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tcolumns[i].sType = null;\n\t\t}\n\t\n\t\t/* Add to the display array */\n\t\toSettings.aiDisplayMaster.push( iRow );\n\t\n\t\tvar id = oSettings.rowIdFn( aDataIn );\n\t\tif ( id !== undefined ) {\n\t\t\toSettings.aIds[ id ] = oData;\n\t\t}\n\t\n\t\t/* Create the DOM information, or register it if already present */\n\t\tif ( nTr || ! oSettings.oFeatures.bDeferRender )\n\t\t{\n\t\t\t_fnCreateTr( oSettings, iRow, nTr, anTds );\n\t\t}\n\t\n\t\treturn iRow;\n\t}\n\t\n\t\n\t/**\n\t * Add one or more TR elements to the table. Generally we'd expect to\n\t * use this for reading data from a DOM sourced table, but it could be\n\t * used for an TR element. Note that if a TR is given, it is used (i.e.\n\t * it is not cloned).\n\t *  @param {object} settings dataTables settings object\n\t *  @param {array|node|jQuery} trs The TR element(s) to add to the table\n\t *  @returns {array} Array of indexes for the added rows\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddTr( settings, trs )\n\t{\n\t\tvar row;\n\t\n\t\t// Allow an individual node to be passed in\n\t\tif ( ! (trs instanceof $) ) {\n\t\t\ttrs = $(trs);\n\t\t}\n\t\n\t\treturn trs.map( function (i, el) {\n\t\t\trow = _fnGetRowElements( settings, el );\n\t\t\treturn _fnAddData( settings, row.data, el, row.cells );\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Take a TR element and convert it to an index in aoData\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} n the TR element to find\n\t *  @returns {int} index if the node is found, null if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToDataIndex( oSettings, n )\n\t{\n\t\treturn (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;\n\t}\n\t\n\t\n\t/**\n\t * Take a TD element and convert it into a column data index (not the visible index)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow The row number the TD/TH can be found in\n\t *  @param {node} n The TD/TH element to find\n\t *  @returns {int} index if the node is found, -1 if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToColumnIndex( oSettings, iRow, n )\n\t{\n\t\treturn $.inArray( n, oSettings.aoData[ iRow ].anCells );\n\t}\n\t\n\t\n\t/**\n\t * Get the data for a given cell from the internal cache, taking into account data mapping\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {string} type data get type ('display', 'type' 'filter|search' 'sort|order')\n\t *  @returns {*} Cell data\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetCellData( settings, rowIdx, colIdx, type )\n\t{\n\t\tif (type === 'search') {\n\t\t\ttype = 'filter';\n\t\t}\n\t\telse if (type === 'order') {\n\t\t\ttype = 'sort';\n\t\t}\n\t\n\t\tvar draw           = settings.iDraw;\n\t\tvar col            = settings.aoColumns[colIdx];\n\t\tvar rowData        = settings.aoData[rowIdx]._aData;\n\t\tvar defaultContent = col.sDefaultContent;\n\t\tvar cellData       = col.fnGetData( rowData, type, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t} );\n\t\n\t\tif ( cellData === undefined ) {\n\t\t\tif ( settings.iDrawError != draw && defaultContent === null ) {\n\t\t\t\t_fnLog( settings, 0, \"Requested unknown parameter \"+\n\t\t\t\t\t(typeof col.mData=='function' ? '{function}' : \"'\"+col.mData+\"'\")+\n\t\t\t\t\t\" for row \"+rowIdx+\", column \"+colIdx, 4 );\n\t\t\t\tsettings.iDrawError = draw;\n\t\t\t}\n\t\t\treturn defaultContent;\n\t\t}\n\t\n\t\t// When the data source is null and a specific data type is requested (i.e.\n\t\t// not the original data), we can use default column data\n\t\tif ( (cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined ) {\n\t\t\tcellData = defaultContent;\n\t\t}\n\t\telse if ( typeof cellData === 'function' ) {\n\t\t\t// If the data source is a function, then we run it and use the return,\n\t\t\t// executing in the scope of the data object (for instances)\n\t\t\treturn cellData.call( rowData );\n\t\t}\n\t\n\t\tif ( cellData === null && type === 'display' ) {\n\t\t\treturn '';\n\t\t}\n\t\n\t\tif ( type === 'filter' ) {\n\t\t\tvar fomatters = DataTable.ext.type.search;\n\t\n\t\t\tif ( fomatters[ col.sType ] ) {\n\t\t\t\tcellData = fomatters[ col.sType ]( cellData );\n\t\t\t}\n\t\t}\n\t\n\t\treturn cellData;\n\t}\n\t\n\t\n\t/**\n\t * Set the value for a specific cell, into the internal data cache\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {*} val Value to set\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSetCellData( settings, rowIdx, colIdx, val )\n\t{\n\t\tvar col     = settings.aoColumns[colIdx];\n\t\tvar rowData = settings.aoData[rowIdx]._aData;\n\t\n\t\tcol.fnSetData( rowData, val, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t}  );\n\t}\n\t\n\t\n\t// Private variable that is used to match action syntax in the data property object\n\tvar __reArray = /\\[.*?\\]$/;\n\tvar __reFn = /\\(\\)$/;\n\t\n\t/**\n\t * Split string on periods, taking into account escaped periods\n\t * @param  {string} str String to split\n\t * @return {array} Split string\n\t */\n\tfunction _fnSplitObjNotation( str )\n\t{\n\t\treturn $.map( str.match(/(\\\\.|[^\\.])+/g) || [''], function ( s ) {\n\t\t\treturn s.replace(/\\\\\\./g, '.');\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Return a function that can be used to get data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data get function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnGetObjectDataFn = DataTable.util.get;\n\t\n\t\n\t/**\n\t * Return a function that can be used to set data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data set function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnSetObjectDataFn = DataTable.util.set;\n\t\n\t\n\t/**\n\t * Return an array with the full table data\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns array {array} aData Master data array\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetDataMaster ( settings )\n\t{\n\t\treturn _pluck( settings.aoData, '_aData' );\n\t}\n\t\n\t\n\t/**\n\t * Nuke the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnClearTable( settings )\n\t{\n\t\tsettings.aoData.length = 0;\n\t\tsettings.aiDisplayMaster.length = 0;\n\t\tsettings.aiDisplay.length = 0;\n\t\tsettings.aIds = {};\n\t}\n\t\n\t\n\t /**\n\t * Take an array of integers (index array) and remove a target integer (value - not\n\t * the key!)\n\t *  @param {array} a Index array to target\n\t *  @param {int} iTarget value to find\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDeleteIndex( a, iTarget, splice )\n\t{\n\t\tvar iTargetIndex = -1;\n\t\n\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( a[i] == iTarget )\n\t\t\t{\n\t\t\t\tiTargetIndex = i;\n\t\t\t}\n\t\t\telse if ( a[i] > iTarget )\n\t\t\t{\n\t\t\t\ta[i]--;\n\t\t\t}\n\t\t}\n\t\n\t\tif ( iTargetIndex != -1 && splice === undefined )\n\t\t{\n\t\t\ta.splice( iTargetIndex, 1 );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Mark cached data as invalid such that a re-read of the data will occur when\n\t * the cached data is next requested. Also update from the data source object.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {int}    rowIdx   Row index to invalidate\n\t * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'\n\t *     or 'data'\n\t * @param {int}    [colIdx] Column index to invalidate. If undefined the whole\n\t *     row will be invalidated\n\t * @memberof DataTable#oApi\n\t *\n\t * @todo For the modularisation of v1.11 this will need to become a callback, so\n\t *   the sort and filter methods can subscribe to it. That will required\n\t *   initialisation options for sorting, which is why it is not already baked in\n\t */\n\tfunction _fnInvalidate( settings, rowIdx, src, colIdx )\n\t{\n\t\tvar row = settings.aoData[ rowIdx ];\n\t\tvar i, ien;\n\t\tvar cellWrite = function ( cell, col ) {\n\t\t\t// This is very frustrating, but in IE if you just write directly\n\t\t\t// to innerHTML, and elements that are overwritten are GC'ed,\n\t\t\t// even if there is a reference to them elsewhere\n\t\t\twhile ( cell.childNodes.length ) {\n\t\t\t\tcell.removeChild( cell.firstChild );\n\t\t\t}\n\t\n\t\t\tcell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );\n\t\t};\n\t\n\t\t// Are we reading last data from DOM or the data object?\n\t\tif ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {\n\t\t\t// Read the data from the DOM\n\t\t\trow._aData = _fnGetRowElements(\n\t\t\t\t\tsettings, row, colIdx, colIdx === undefined ? undefined : row._aData\n\t\t\t\t)\n\t\t\t\t.data;\n\t\t}\n\t\telse {\n\t\t\t// Reading from data object, update the DOM\n\t\t\tvar cells = row.anCells;\n\t\n\t\t\tif ( cells ) {\n\t\t\t\tif ( colIdx !== undefined ) {\n\t\t\t\t\tcellWrite( cells[colIdx], colIdx );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\t\t\tcellWrite( cells[i], i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// For both row and cell invalidation, the cached data for sorting and\n\t\t// filtering is nulled out\n\t\trow._aSortData = null;\n\t\trow._aFilterData = null;\n\t\n\t\t// Invalidate the type for a specific column (if given) or all columns since\n\t\t// the data might have changed\n\t\tvar cols = settings.aoColumns;\n\t\tif ( colIdx !== undefined ) {\n\t\t\tcols[ colIdx ].sType = null;\n\t\t}\n\t\telse {\n\t\t\tfor ( i=0, ien=cols.length ; i<ien ; i++ ) {\n\t\t\t\tcols[i].sType = null;\n\t\t\t}\n\t\n\t\t\t// Update DataTables special `DT_*` attributes for the row\n\t\t\t_fnRowAttributes( settings, row );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a data source object from an HTML row, reading the contents of the\n\t * cells that are in the row.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {node|object} TR element from which to read data or existing row\n\t *   object from which to re-read the data from the cells\n\t * @param {int} [colIdx] Optional column index\n\t * @param {array|object} [d] Data source object. If `colIdx` is given then this\n\t *   parameter should also be given and will be used to write the data into.\n\t *   Only the column in question will be written\n\t * @returns {object} Object with two parameters: `data` the data read, in\n\t *   document order, and `cells` and array of nodes (they can be useful to the\n\t *   caller, so rather than needing a second traversal to get them, just return\n\t *   them from here).\n\t * @memberof DataTable#oApi\n\t */\n\tfunction _fnGetRowElements( settings, row, colIdx, d )\n\t{\n\t\tvar\n\t\t\ttds = [],\n\t\t\ttd = row.firstChild,\n\t\t\tname, col, o, i=0, contents,\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tobjectRead = settings._rowReadObject;\n\t\n\t\t// Allow the data object to be passed in, or construct\n\t\td = d !== undefined ?\n\t\t\td :\n\t\t\tobjectRead ?\n\t\t\t\t{} :\n\t\t\t\t[];\n\t\n\t\tvar attr = function ( str, td  ) {\n\t\t\tif ( typeof str === 'string' ) {\n\t\t\t\tvar idx = str.indexOf('@');\n\t\n\t\t\t\tif ( idx !== -1 ) {\n\t\t\t\t\tvar attr = str.substring( idx+1 );\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( str );\n\t\t\t\t\tsetter( d, td.getAttribute( attr ) );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\t// Read data from a cell and store into the data object\n\t\tvar cellProcess = function ( cell ) {\n\t\t\tif ( colIdx === undefined || colIdx === i ) {\n\t\t\t\tcol = columns[i];\n\t\t\t\tcontents = (cell.innerHTML).trim();\n\t\n\t\t\t\tif ( col && col._bAttrSrc ) {\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( col.mData._ );\n\t\t\t\t\tsetter( d, contents );\n\t\n\t\t\t\t\tattr( col.mData.sort, cell );\n\t\t\t\t\tattr( col.mData.type, cell );\n\t\t\t\t\tattr( col.mData.filter, cell );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Depending on the `data` option for the columns the data can\n\t\t\t\t\t// be read to either an object or an array.\n\t\t\t\t\tif ( objectRead ) {\n\t\t\t\t\t\tif ( ! col._setter ) {\n\t\t\t\t\t\t\t// Cache the setter function\n\t\t\t\t\t\t\tcol._setter = _fnSetObjectDataFn( col.mData );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcol._setter( d, contents );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\td[i] = contents;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t};\n\t\n\t\tif ( td ) {\n\t\t\t// `tr` element was passed in\n\t\t\twhile ( td ) {\n\t\t\t\tname = td.nodeName.toUpperCase();\n\t\n\t\t\t\tif ( name == \"TD\" || name == \"TH\" ) {\n\t\t\t\t\tcellProcess( td );\n\t\t\t\t\ttds.push( td );\n\t\t\t\t}\n\t\n\t\t\t\ttd = td.nextSibling;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Existing row object passed in\n\t\t\ttds = row.anCells;\n\t\n\t\t\tfor ( var j=0, jen=tds.length ; j<jen ; j++ ) {\n\t\t\t\tcellProcess( tds[j] );\n\t\t\t}\n\t\t}\n\t\n\t\t// Read the ID from the DOM if present\n\t\tvar rowNode = row.firstChild ? row : row.nTr;\n\t\n\t\tif ( rowNode ) {\n\t\t\tvar id = rowNode.getAttribute( 'id' );\n\t\n\t\t\tif ( id ) {\n\t\t\t\t_fnSetObjectDataFn( settings.rowId )( d, id );\n\t\t\t}\n\t\t}\n\t\n\t\treturn {\n\t\t\tdata: d,\n\t\t\tcells: tds\n\t\t};\n\t}\n\t/**\n\t * Create a new TR element (and it's TD children) for a row\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow Row to consider\n\t *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCreateTr ( oSettings, iRow, nTrIn, anTds )\n\t{\n\t\tvar\n\t\t\trow = oSettings.aoData[iRow],\n\t\t\trowData = row._aData,\n\t\t\tcells = [],\n\t\t\tnTr, nTd, oCol,\n\t\t\ti, iLen, create;\n\t\n\t\tif ( row.nTr === null )\n\t\t{\n\t\t\tnTr = nTrIn || document.createElement('tr');\n\t\n\t\t\trow.nTr = nTr;\n\t\t\trow.anCells = cells;\n\t\n\t\t\t/* Use a private property on the node to allow reserve mapping from the node\n\t\t\t * to the aoData array for fast look up\n\t\t\t */\n\t\t\tnTr._DT_RowIndex = iRow;\n\t\n\t\t\t/* Special parameters can be given by the data source to be used on the row */\n\t\t\t_fnRowAttributes( oSettings, row );\n\t\n\t\t\t/* Process each column */\n\t\t\tfor ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\toCol = oSettings.aoColumns[i];\n\t\t\t\tcreate = nTrIn ? false : true;\n\t\n\t\t\t\tnTd = create ? document.createElement( oCol.sCellType ) : anTds[i];\n\t\n\t\t\t\tif (! nTd) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t}\n\t\n\t\t\t\tnTd._DT_CellIndex = {\n\t\t\t\t\trow: iRow,\n\t\t\t\t\tcolumn: i\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tcells.push( nTd );\n\t\n\t\t\t\t// Need to create the HTML if new, or if a rendering function is defined\n\t\t\t\tif ( create || ((oCol.mRender || oCol.mData !== i) &&\n\t\t\t\t\t (!$.isPlainObject(oCol.mData) || oCol.mData._ !== i+'.display')\n\t\t\t\t)) {\n\t\t\t\t\tnTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );\n\t\t\t\t}\n\t\n\t\t\t\t/* Add user defined class */\n\t\t\t\tif ( oCol.sClass )\n\t\t\t\t{\n\t\t\t\t\tnTd.className += ' '+oCol.sClass;\n\t\t\t\t}\n\t\n\t\t\t\t// Visibility - add or remove as required\n\t\t\t\tif ( oCol.bVisible && ! nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTr.appendChild( nTd );\n\t\t\t\t}\n\t\t\t\telse if ( ! oCol.bVisible && nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTd.parentNode.removeChild( nTd );\n\t\t\t\t}\n\t\n\t\t\t\tif ( oCol.fnCreatedCell )\n\t\t\t\t{\n\t\t\t\t\toCol.fnCreatedCell.call( oSettings.oInstance,\n\t\t\t\t\t\tnTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow, cells] );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Add attributes to a row based on the special `DT_*` parameters in a data\n\t * source object.\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} DataTables row object for the row to be modified\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnRowAttributes( settings, row )\n\t{\n\t\tvar tr = row.nTr;\n\t\tvar data = row._aData;\n\t\n\t\tif ( tr ) {\n\t\t\tvar id = settings.rowIdFn( data );\n\t\n\t\t\tif ( id ) {\n\t\t\t\ttr.id = id;\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowClass ) {\n\t\t\t\t// Remove any classes added by DT_RowClass before\n\t\t\t\tvar a = data.DT_RowClass.split(' ');\n\t\t\t\trow.__rowc = row.__rowc ?\n\t\t\t\t\t_unique( row.__rowc.concat( a ) ) :\n\t\t\t\t\ta;\n\t\n\t\t\t\t$(tr)\n\t\t\t\t\t.removeClass( row.__rowc.join(' ') )\n\t\t\t\t\t.addClass( data.DT_RowClass );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowAttr ) {\n\t\t\t\t$(tr).attr( data.DT_RowAttr );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowData ) {\n\t\t\t\t$(tr).data( data.DT_RowData );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Create the HTML header for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBuildHead( oSettings )\n\t{\n\t\tvar i, ien, cell, row, column;\n\t\tvar thead = oSettings.nTHead;\n\t\tvar tfoot = oSettings.nTFoot;\n\t\tvar createHeader = $('th, td', thead).length === 0;\n\t\tvar classes = oSettings.oClasses;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\tif ( createHeader ) {\n\t\t\trow = $('<tr/>').appendTo( thead );\n\t\t}\n\t\n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcell = $( column.nTh ).addClass( column.sClass );\n\t\n\t\t\tif ( createHeader ) {\n\t\t\t\tcell.appendTo( row );\n\t\t\t}\n\t\n\t\t\t// 1.11 move into sorting\n\t\t\tif ( oSettings.oFeatures.bSort ) {\n\t\t\t\tcell.addClass( column.sSortingClass );\n\t\n\t\t\t\tif ( column.bSortable !== false ) {\n\t\t\t\t\tcell\n\t\t\t\t\t\t.attr( 'tabindex', oSettings.iTabIndex )\n\t\t\t\t\t\t.attr( 'aria-controls', oSettings.sTableId );\n\t\n\t\t\t\t\t_fnSortAttachListener( oSettings, column.nTh, i );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( column.sTitle != cell[0].innerHTML ) {\n\t\t\t\tcell.html( column.sTitle );\n\t\t\t}\n\t\n\t\t\t_fnRenderer( oSettings, 'header' )(\n\t\t\t\toSettings, cell, column, classes\n\t\t\t);\n\t\t}\n\t\n\t\tif ( createHeader ) {\n\t\t\t_fnDetectHeader( oSettings.aoHeader, thead );\n\t\t}\n\t\n\t\t/* Deal with the footer - add classes if required */\n\t\t$(thead).children('tr').children('th, td').addClass( classes.sHeaderTH );\n\t\t$(tfoot).children('tr').children('th, td').addClass( classes.sFooterTH );\n\t\n\t\t// Cache the footer cells. Note that we only take the cells from the first\n\t\t// row in the footer. If there is more than one row the user wants to\n\t\t// interact with, they need to use the table().foot() method. Note also this\n\t\t// allows cells to be used for multiple columns using colspan\n\t\tif ( tfoot !== null ) {\n\t\t\tvar cells = oSettings.aoFooter[0];\n\t\n\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tcolumn = columns[i];\n\t\n\t\t\t\tif (column) {\n\t\t\t\t\tcolumn.nTf = cells[i].cell;\n\t\t\n\t\t\t\t\tif ( column.sClass ) {\n\t\t\t\t\t\t$(column.nTf).addClass( column.sClass );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Draw the header (or footer) element based on the column visibility states. The\n\t * methodology here is to use the layout array from _fnDetectHeader, modified for\n\t * the instantaneous column visibility, to construct the new layout. The grid is\n\t * traversed over cell at a time in a rows x columns grid fashion, although each\n\t * cell insert can cover multiple elements in the grid - which is tracks using the\n\t * aApplied array. Cell inserts in the grid will only occur where there isn't\n\t * already a cell in that position.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param array {objects} aoSource Layout array from _fnDetectHeader\n\t *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDrawHead( oSettings, aoSource, bIncludeHidden )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, n, nLocalTr;\n\t\tvar aoLocal = [];\n\t\tvar aApplied = [];\n\t\tvar iColumns = oSettings.aoColumns.length;\n\t\tvar iRowspan, iColspan;\n\t\n\t\tif ( ! aoSource )\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\n\t\tif (  bIncludeHidden === undefined )\n\t\t{\n\t\t\tbIncludeHidden = false;\n\t\t}\n\t\n\t\t/* Make a copy of the master layout array, but without the visible columns in it */\n\t\tfor ( i=0, iLen=aoSource.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taoLocal[i] = aoSource[i].slice();\n\t\t\taoLocal[i].nTr = aoSource[i].nTr;\n\t\n\t\t\t/* Remove any columns which are currently hidden */\n\t\t\tfor ( j=iColumns-1 ; j>=0 ; j-- )\n\t\t\t{\n\t\t\t\tif ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )\n\t\t\t\t{\n\t\t\t\t\taoLocal[i].splice( j, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Prep the applied array - it needs an element for each row */\n\t\t\taApplied.push( [] );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnLocalTr = aoLocal[i].nTr;\n\t\n\t\t\t/* All cells are going to be replaced, so empty out the row */\n\t\t\tif ( nLocalTr )\n\t\t\t{\n\t\t\t\twhile( (n = nLocalTr.firstChild) )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.removeChild( n );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tiRowspan = 1;\n\t\t\t\tiColspan = 1;\n\t\n\t\t\t\t/* Check to see if there is already a cell (row/colspan) covering our target\n\t\t\t\t * insert point. If there is, then there is nothing to do.\n\t\t\t\t */\n\t\t\t\tif ( aApplied[i][j] === undefined )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.appendChild( aoLocal[i][j].cell );\n\t\t\t\t\taApplied[i][j] = 1;\n\t\n\t\t\t\t\t/* Expand the cell to cover as many rows as needed */\n\t\t\t\t\twhile ( aoLocal[i+iRowspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\taApplied[i+iRowspan][j] = 1;\n\t\t\t\t\t\tiRowspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Expand the cell to cover as many columns as needed */\n\t\t\t\t\twhile ( aoLocal[i][j+iColspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Must update the applied array over the rows for the columns */\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taApplied[i+k][j+iColspan] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tiColspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Do the actual expansion in the DOM */\n\t\t\t\t\t$(aoLocal[i][j].cell)\n\t\t\t\t\t\t.attr('rowspan', iRowspan)\n\t\t\t\t\t\t.attr('colspan', iColspan);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Insert the required TR nodes into the table for display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param ajaxComplete true after ajax call to complete rendering\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDraw( oSettings, ajaxComplete )\n\t{\n\t\t// Allow for state saving and a custom start position\n\t\t_fnStart( oSettings );\n\t\n\t\t/* Provide a pre-callback function which can be used to cancel the draw is false is returned */\n\t\tvar aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );\n\t\tif ( $.inArray( false, aPreDraw ) !== -1 )\n\t\t{\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar anRows = [];\n\t\tvar iRowCount = 0;\n\t\tvar asStripeClasses = oSettings.asStripeClasses;\n\t\tvar iStripes = asStripeClasses.length;\n\t\tvar oLang = oSettings.oLanguage;\n\t\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\t\tvar aiDisplay = oSettings.aiDisplay;\n\t\tvar iDisplayStart = oSettings._iDisplayStart;\n\t\tvar iDisplayEnd = oSettings.fnDisplayEnd();\n\t\n\t\toSettings.bDrawing = true;\n\t\n\t\t/* Server-side processing draw intercept */\n\t\tif ( oSettings.bDeferLoading )\n\t\t{\n\t\t\toSettings.bDeferLoading = false;\n\t\t\toSettings.iDraw++;\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t}\n\t\telse if ( !bServerSide )\n\t\t{\n\t\t\toSettings.iDraw++;\n\t\t}\n\t\telse if ( !oSettings.bDestroying && !ajaxComplete)\n\t\t{\n\t\t\t_fnAjaxUpdate( oSettings );\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( aiDisplay.length !== 0 )\n\t\t{\n\t\t\tvar iStart = bServerSide ? 0 : iDisplayStart;\n\t\t\tvar iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;\n\t\n\t\t\tfor ( var j=iStart ; j<iEnd ; j++ )\n\t\t\t{\n\t\t\t\tvar iDataIndex = aiDisplay[j];\n\t\t\t\tvar aoData = oSettings.aoData[ iDataIndex ];\n\t\t\t\tif ( aoData.nTr === null )\n\t\t\t\t{\n\t\t\t\t\t_fnCreateTr( oSettings, iDataIndex );\n\t\t\t\t}\n\t\n\t\t\t\tvar nRow = aoData.nTr;\n\t\n\t\t\t\t/* Remove the old striping classes and then add the new one */\n\t\t\t\tif ( iStripes !== 0 )\n\t\t\t\t{\n\t\t\t\t\tvar sStripe = asStripeClasses[ iRowCount % iStripes ];\n\t\t\t\t\tif ( aoData._sRowStripe != sStripe )\n\t\t\t\t\t{\n\t\t\t\t\t\t$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );\n\t\t\t\t\t\taoData._sRowStripe = sStripe;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Row callback functions - might want to manipulate the row\n\t\t\t\t// iRowCount and j are not currently documented. Are they at all\n\t\t\t\t// useful?\n\t\t\t\t_fnCallbackFire( oSettings, 'aoRowCallback', null,\n\t\t\t\t\t[nRow, aoData._aData, iRowCount, j, iDataIndex] );\n\t\n\t\t\t\tanRows.push( nRow );\n\t\t\t\tiRowCount++;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Table is empty - create a row with an empty message in it */\n\t\t\tvar sZero = oLang.sZeroRecords;\n\t\t\tif ( oSettings.iDraw == 1 &&  _fnDataSource( oSettings ) == 'ajax' )\n\t\t\t{\n\t\t\t\tsZero = oLang.sLoadingRecords;\n\t\t\t}\n\t\t\telse if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )\n\t\t\t{\n\t\t\t\tsZero = oLang.sEmptyTable;\n\t\t\t}\n\t\n\t\t\tanRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )\n\t\t\t\t.append( $('<td />', {\n\t\t\t\t\t'valign':  'top',\n\t\t\t\t\t'colSpan': _fnVisbleColumns( oSettings ),\n\t\t\t\t\t'class':   oSettings.oClasses.sRowEmpty\n\t\t\t\t} ).html( sZero ) )[0];\n\t\t}\n\t\n\t\t/* Header and footer callbacks */\n\t\t_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\t_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\tvar body = $(oSettings.nTBody);\n\t\n\t\tbody.children().detach();\n\t\tbody.append( $(anRows) );\n\t\n\t\t/* Call all required callback functions for the end of a draw */\n\t\t_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );\n\t\n\t\t/* Draw is complete, sorting and filtering must be as well */\n\t\toSettings.bSorted = false;\n\t\toSettings.bFiltered = false;\n\t\toSettings.bDrawing = false;\n\t}\n\t\n\t\n\t/**\n\t * Redraw the table - taking account of the various features which are enabled\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {boolean} [holdPosition] Keep the current paging position. By default\n\t *    the paging is reset to the first page\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReDraw( settings, holdPosition )\n\t{\n\t\tvar\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tsort     = features.bSort,\n\t\t\tfilter   = features.bFilter;\n\t\n\t\tif ( sort ) {\n\t\t\t_fnSort( settings );\n\t\t}\n\t\n\t\tif ( filter ) {\n\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t\t}\n\t\telse {\n\t\t\t// No filtering, so we want to just use the display master\n\t\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\t}\n\t\n\t\tif ( holdPosition !== true ) {\n\t\t\tsettings._iDisplayStart = 0;\n\t\t}\n\t\n\t\t// Let any modules know about the draw hold position state (used by\n\t\t// scrolling internally)\n\t\tsettings._drawHold = holdPosition;\n\t\n\t\t_fnDraw( settings );\n\t\n\t\tsettings._drawHold = false;\n\t}\n\t\n\t\n\t/**\n\t * Add the options to the page HTML for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddOptionsHtml ( oSettings )\n\t{\n\t\tvar classes = oSettings.oClasses;\n\t\tvar table = $(oSettings.nTable);\n\t\tvar holding = $('<div/>').insertBefore( table ); // Holding element for speed\n\t\tvar features = oSettings.oFeatures;\n\t\n\t\t// All DataTables are wrapped in a div\n\t\tvar insert = $('<div/>', {\n\t\t\tid:      oSettings.sTableId+'_wrapper',\n\t\t\t'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)\n\t\t} );\n\t\n\t\toSettings.nHolding = holding[0];\n\t\toSettings.nTableWrapper = insert[0];\n\t\toSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;\n\t\n\t\t/* Loop over the user set positioning and place the elements as needed */\n\t\tvar aDom = oSettings.sDom.split('');\n\t\tvar featureNode, cOption, nNewNode, cNext, sAttr, j;\n\t\tfor ( var i=0 ; i<aDom.length ; i++ )\n\t\t{\n\t\t\tfeatureNode = null;\n\t\t\tcOption = aDom[i];\n\t\n\t\t\tif ( cOption == '<' )\n\t\t\t{\n\t\t\t\t/* New container div */\n\t\t\t\tnNewNode = $('<div/>')[0];\n\t\n\t\t\t\t/* Check to see if we should append an id and/or a class name to the container */\n\t\t\t\tcNext = aDom[i+1];\n\t\t\t\tif ( cNext == \"'\" || cNext == '\"' )\n\t\t\t\t{\n\t\t\t\t\tsAttr = \"\";\n\t\t\t\t\tj = 2;\n\t\t\t\t\twhile ( aDom[i+j] != cNext )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr += aDom[i+j];\n\t\t\t\t\t\tj++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Replace jQuery UI constants @todo depreciated */\n\t\t\t\t\tif ( sAttr == \"H\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = classes.sJUIHeader;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr == \"F\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = classes.sJUIFooter;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* The attribute can be in the format of \"#id.class\", \"#id\" or \"class\" This logic\n\t\t\t\t\t * breaks the string into parts and applies them as needed\n\t\t\t\t\t */\n\t\t\t\t\tif ( sAttr.indexOf('.') != -1 )\n\t\t\t\t\t{\n\t\t\t\t\t\tvar aSplit = sAttr.split('.');\n\t\t\t\t\t\tnNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);\n\t\t\t\t\t\tnNewNode.className = aSplit[1];\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr.charAt(0) == \"#\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.id = sAttr.substr(1, sAttr.length-1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.className = sAttr;\n\t\t\t\t\t}\n\t\n\t\t\t\t\ti += j; /* Move along the position array */\n\t\t\t\t}\n\t\n\t\t\t\tinsert.append( nNewNode );\n\t\t\t\tinsert = $(nNewNode);\n\t\t\t}\n\t\t\telse if ( cOption == '>' )\n\t\t\t{\n\t\t\t\t/* End container div */\n\t\t\t\tinsert = insert.parent();\n\t\t\t}\n\t\t\t// @todo Move options into their own plugins?\n\t\t\telse if ( cOption == 'l' && features.bPaginate && features.bLengthChange )\n\t\t\t{\n\t\t\t\t/* Length */\n\t\t\t\tfeatureNode = _fnFeatureHtmlLength( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'f' && features.bFilter )\n\t\t\t{\n\t\t\t\t/* Filter */\n\t\t\t\tfeatureNode = _fnFeatureHtmlFilter( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'r' && features.bProcessing )\n\t\t\t{\n\t\t\t\t/* pRocessing */\n\t\t\t\tfeatureNode = _fnFeatureHtmlProcessing( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 't' )\n\t\t\t{\n\t\t\t\t/* Table */\n\t\t\t\tfeatureNode = _fnFeatureHtmlTable( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption ==  'i' && features.bInfo )\n\t\t\t{\n\t\t\t\t/* Info */\n\t\t\t\tfeatureNode = _fnFeatureHtmlInfo( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'p' && features.bPaginate )\n\t\t\t{\n\t\t\t\t/* Pagination */\n\t\t\t\tfeatureNode = _fnFeatureHtmlPaginate( oSettings );\n\t\t\t}\n\t\t\telse if ( DataTable.ext.feature.length !== 0 )\n\t\t\t{\n\t\t\t\t/* Plug-in features */\n\t\t\t\tvar aoFeatures = DataTable.ext.feature;\n\t\t\t\tfor ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )\n\t\t\t\t{\n\t\t\t\t\tif ( cOption == aoFeatures[k].cFeature )\n\t\t\t\t\t{\n\t\t\t\t\t\tfeatureNode = aoFeatures[k].fnInit( oSettings );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Add to the 2D features array */\n\t\t\tif ( featureNode )\n\t\t\t{\n\t\t\t\tvar aanFeatures = oSettings.aanFeatures;\n\t\n\t\t\t\tif ( ! aanFeatures[cOption] )\n\t\t\t\t{\n\t\t\t\t\taanFeatures[cOption] = [];\n\t\t\t\t}\n\t\n\t\t\t\taanFeatures[cOption].push( featureNode );\n\t\t\t\tinsert.append( featureNode );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Built our DOM structure - replace the holding div with what we want */\n\t\tholding.replaceWith( insert );\n\t\toSettings.nHolding = null;\n\t}\n\t\n\t\n\t/**\n\t * Use the DOM source to create up an array of header cells. The idea here is to\n\t * create a layout grid (array) of rows x columns, which contains a reference\n\t * to the cell that that point in the grid (regardless of col/rowspan), such that\n\t * any column / row could be removed and the new grid constructed\n\t *  @param array {object} aLayout Array to store the calculated layout in\n\t *  @param {node} nThead The header/footer element for the table\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDetectHeader ( aLayout, nThead )\n\t{\n\t\tvar nTrs = $(nThead).children('tr');\n\t\tvar nTr, nCell;\n\t\tvar i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;\n\t\tvar bUnique;\n\t\tvar fnShiftCol = function ( a, i, j ) {\n\t\t\tvar k = a[i];\n\t                while ( k[j] ) {\n\t\t\t\tj++;\n\t\t\t}\n\t\t\treturn j;\n\t\t};\n\t\n\t\taLayout.splice( 0, aLayout.length );\n\t\n\t\t/* We know how many rows there are in the layout - so prep it */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taLayout.push( [] );\n\t\t}\n\t\n\t\t/* Calculate a layout array */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnTr = nTrs[i];\n\t\t\tiColumn = 0;\n\t\n\t\t\t/* For every cell in the row... */\n\t\t\tnCell = nTr.firstChild;\n\t\t\twhile ( nCell ) {\n\t\t\t\tif ( nCell.nodeName.toUpperCase() == \"TD\" ||\n\t\t\t\t     nCell.nodeName.toUpperCase() == \"TH\" )\n\t\t\t\t{\n\t\t\t\t\t/* Get the col and rowspan attributes from the DOM and sanitise them */\n\t\t\t\t\tiColspan = nCell.getAttribute('colspan') * 1;\n\t\t\t\t\tiRowspan = nCell.getAttribute('rowspan') * 1;\n\t\t\t\t\tiColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;\n\t\t\t\t\tiRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;\n\t\n\t\t\t\t\t/* There might be colspan cells already in this row, so shift our target\n\t\t\t\t\t * accordingly\n\t\t\t\t\t */\n\t\t\t\t\tiColShifted = fnShiftCol( aLayout, i, iColumn );\n\t\n\t\t\t\t\t/* Cache calculation for unique columns */\n\t\t\t\t\tbUnique = iColspan === 1 ? true : false;\n\t\n\t\t\t\t\t/* If there is col / rowspan, copy the information into the layout grid */\n\t\t\t\t\tfor ( l=0 ; l<iColspan ; l++ )\n\t\t\t\t\t{\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taLayout[i+k][iColShifted+l] = {\n\t\t\t\t\t\t\t\t\"cell\": nCell,\n\t\t\t\t\t\t\t\t\"unique\": bUnique\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\taLayout[i+k].nTr = nTr;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCell = nCell.nextSibling;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Get an array of unique th elements, one for each column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nHeader automatically detect the layout from this node - optional\n\t *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional\n\t *  @returns array {node} aReturn list of unique th's\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetUniqueThs ( oSettings, nHeader, aLayout )\n\t{\n\t\tvar aReturn = [];\n\t\tif ( !aLayout )\n\t\t{\n\t\t\taLayout = oSettings.aoHeader;\n\t\t\tif ( nHeader )\n\t\t\t{\n\t\t\t\taLayout = [];\n\t\t\t\t_fnDetectHeader( aLayout, nHeader );\n\t\t\t}\n\t\t}\n\t\n\t\tfor ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfor ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tif ( aLayout[i][j].unique &&\n\t\t\t\t\t (!aReturn[j] || !oSettings.bSortCellsTop) )\n\t\t\t\t{\n\t\t\t\t\taReturn[j] = aLayout[i][j].cell;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn aReturn;\n\t}\n\t\n\t/**\n\t * Set the start position for draw\n\t *  @param {object} oSettings dataTables settings object\n\t */\n\tfunction _fnStart( oSettings )\n\t{\n\t\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\t\tvar iInitDisplayStart = oSettings.iInitDisplayStart;\n\t\n\t\t// Check and see if we have an initial draw position from state saving\n\t\tif ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )\n\t\t{\n\t\t\toSettings._iDisplayStart = bServerSide ?\n\t\t\t\tiInitDisplayStart :\n\t\t\t\tiInitDisplayStart >= oSettings.fnRecordsDisplay() ?\n\t\t\t\t\t0 :\n\t\t\t\t\tiInitDisplayStart;\n\t\n\t\t\toSettings.iInitDisplayStart = -1;\n\t\t}\n\t}\n\t\n\t/**\n\t * Create an Ajax call based on the table's settings, taking into account that\n\t * parameters can have multiple forms, and backwards compatibility.\n\t *\n\t * @param {object} oSettings dataTables settings object\n\t * @param {array} data Data to send to the server, required by\n\t *     DataTables - may be augmented by developer callbacks\n\t * @param {function} fn Callback function to run when data is obtained\n\t */\n\tfunction _fnBuildAjax( oSettings, data, fn )\n\t{\n\t\t// Compatibility with 1.9-, allow fnServerData and event to manipulate\n\t\t_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );\n\t\n\t\t// Convert to object based for 1.10+ if using the old array scheme which can\n\t\t// come from server-side processing or serverParams\n\t\tif ( data && Array.isArray(data) ) {\n\t\t\tvar tmp = {};\n\t\t\tvar rbracket = /(.*?)\\[\\]$/;\n\t\n\t\t\t$.each( data, function (key, val) {\n\t\t\t\tvar match = val.name.match(rbracket);\n\t\n\t\t\t\tif ( match ) {\n\t\t\t\t\t// Support for arrays\n\t\t\t\t\tvar name = match[0];\n\t\n\t\t\t\t\tif ( ! tmp[ name ] ) {\n\t\t\t\t\t\ttmp[ name ] = [];\n\t\t\t\t\t}\n\t\t\t\t\ttmp[ name ].push( val.value );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttmp[val.name] = val.value;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tdata = tmp;\n\t\t}\n\t\n\t\tvar ajaxData;\n\t\tvar ajax = oSettings.ajax;\n\t\tvar instance = oSettings.oInstance;\n\t\tvar callback = function ( json ) {\n\t\t\tvar status = oSettings.jqXHR\n\t\t\t\t? oSettings.jqXHR.status\n\t\t\t\t: null;\n\t\n\t\t\tif ( json === null || (typeof status === 'number' && status == 204 ) ) {\n\t\t\t\tjson = {};\n\t\t\t\t_fnAjaxDataSrc( oSettings, json, [] );\n\t\t\t}\n\t\n\t\t\tvar error = json.error || json.sError;\n\t\t\tif ( error ) {\n\t\t\t\t_fnLog( oSettings, 0, error );\n\t\t\t}\n\t\n\t\t\toSettings.json = json;\n\t\n\t\t\t_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );\n\t\t\tfn( json );\n\t\t};\n\t\n\t\tif ( $.isPlainObject( ajax ) && ajax.data )\n\t\t{\n\t\t\tajaxData = ajax.data;\n\t\n\t\t\tvar newData = typeof ajaxData === 'function' ?\n\t\t\t\tajaxData( data, oSettings ) :  // fn can manipulate data or return\n\t\t\t\tajaxData;                      // an object object or array to merge\n\t\n\t\t\t// If the function returned something, use that alone\n\t\t\tdata = typeof ajaxData === 'function' && newData ?\n\t\t\t\tnewData :\n\t\t\t\t$.extend( true, data, newData );\n\t\n\t\t\t// Remove the data property as we've resolved it already and don't want\n\t\t\t// jQuery to do it again (it is restored at the end of the function)\n\t\t\tdelete ajax.data;\n\t\t}\n\t\n\t\tvar baseAjax = {\n\t\t\t\"data\": data,\n\t\t\t\"success\": callback,\n\t\t\t\"dataType\": \"json\",\n\t\t\t\"cache\": false,\n\t\t\t\"type\": oSettings.sServerMethod,\n\t\t\t\"error\": function (xhr, error, thrown) {\n\t\t\t\tvar ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );\n\t\n\t\t\t\tif ( $.inArray( true, ret ) === -1 ) {\n\t\t\t\t\tif ( error == \"parsererror\" ) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Invalid JSON response', 1 );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Ajax error', 7 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\t}\n\t\t};\n\t\n\t\t// Store the data submitted for the API\n\t\toSettings.oAjaxData = data;\n\t\n\t\t// Allow plug-ins and external processes to modify the data\n\t\t_fnCallbackFire( oSettings, null, 'preXhr', [oSettings, data] );\n\t\n\t\tif ( oSettings.fnServerData )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.fnServerData.call( instance,\n\t\t\t\toSettings.sAjaxSource,\n\t\t\t\t$.map( data, function (val, key) { // Need to convert back to 1.9 trad format\n\t\t\t\t\treturn { name: key, value: val };\n\t\t\t\t} ),\n\t\t\t\tcallback,\n\t\t\t\toSettings\n\t\t\t);\n\t\t}\n\t\telse if ( oSettings.sAjaxSource || typeof ajax === 'string' )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, {\n\t\t\t\turl: ajax || oSettings.sAjaxSource\n\t\t\t} ) );\n\t\t}\n\t\telse if ( typeof ajax === 'function' )\n\t\t{\n\t\t\t// Is a function - let the caller define what needs to be done\n\t\t\toSettings.jqXHR = ajax.call( instance, data, callback, oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Object to extend the base settings\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );\n\t\n\t\t\t// Restore for next time around\n\t\t\tajax.data = ajaxData;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Update the table using an Ajax call\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {boolean} Block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdate( settings )\n\t{\n\t\tsettings.iDraw++;\n\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t// Keep track of drawHold state to handle scrolling after the Ajax call\n\t\tvar drawHold = settings._drawHold;\n\t\n\t\t_fnBuildAjax(\n\t\t\tsettings,\n\t\t\t_fnAjaxParameters( settings ),\n\t\t\tfunction(json) {\n\t\t\t\tsettings._drawHold = drawHold;\n\t\t\t\t_fnAjaxUpdateDraw( settings, json );\n\t\t\t\tsettings._drawHold = false;\n\t\t\t}\n\t\t);\n\t}\n\t\n\t\n\t/**\n\t * Build up the parameters in an object needed for a server-side processing\n\t * request. Note that this is basically done twice, is different ways - a modern\n\t * method which is used by default in DataTables 1.10 which uses objects and\n\t * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if\n\t * the sAjaxSource option is used in the initialisation, or the legacyAjax\n\t * option is set.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {bool} block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxParameters( settings )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tcolumnCount = columns.length,\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tpreSearch = settings.oPreviousSearch,\n\t\t\tpreColSearch = settings.aoPreSearchCols,\n\t\t\ti, data = [], dataProp, column, columnSearch,\n\t\t\tsort = _fnSortFlatten( settings ),\n\t\t\tdisplayStart = settings._iDisplayStart,\n\t\t\tdisplayLength = features.bPaginate !== false ?\n\t\t\t\tsettings._iDisplayLength :\n\t\t\t\t-1;\n\t\n\t\tvar param = function ( name, value ) {\n\t\t\tdata.push( { 'name': name, 'value': value } );\n\t\t};\n\t\n\t\t// DataTables 1.9- compatible method\n\t\tparam( 'sEcho',          settings.iDraw );\n\t\tparam( 'iColumns',       columnCount );\n\t\tparam( 'sColumns',       _pluck( columns, 'sName' ).join(',') );\n\t\tparam( 'iDisplayStart',  displayStart );\n\t\tparam( 'iDisplayLength', displayLength );\n\t\n\t\t// DataTables 1.10+ method\n\t\tvar d = {\n\t\t\tdraw:    settings.iDraw,\n\t\t\tcolumns: [],\n\t\t\torder:   [],\n\t\t\tstart:   displayStart,\n\t\t\tlength:  displayLength,\n\t\t\tsearch:  {\n\t\t\t\tvalue: preSearch.sSearch,\n\t\t\t\tregex: preSearch.bRegex\n\t\t\t}\n\t\t};\n\t\n\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcolumnSearch = preColSearch[i];\n\t\t\tdataProp = typeof column.mData==\"function\" ? 'function' : column.mData ;\n\t\n\t\t\td.columns.push( {\n\t\t\t\tdata:       dataProp,\n\t\t\t\tname:       column.sName,\n\t\t\t\tsearchable: column.bSearchable,\n\t\t\t\torderable:  column.bSortable,\n\t\t\t\tsearch:     {\n\t\t\t\t\tvalue: columnSearch.sSearch,\n\t\t\t\t\tregex: columnSearch.bRegex\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\tparam( \"mDataProp_\"+i, dataProp );\n\t\n\t\t\tif ( features.bFilter ) {\n\t\t\t\tparam( 'sSearch_'+i,     columnSearch.sSearch );\n\t\t\t\tparam( 'bRegex_'+i,      columnSearch.bRegex );\n\t\t\t\tparam( 'bSearchable_'+i, column.bSearchable );\n\t\t\t}\n\t\n\t\t\tif ( features.bSort ) {\n\t\t\t\tparam( 'bSortable_'+i, column.bSortable );\n\t\t\t}\n\t\t}\n\t\n\t\tif ( features.bFilter ) {\n\t\t\tparam( 'sSearch', preSearch.sSearch );\n\t\t\tparam( 'bRegex', preSearch.bRegex );\n\t\t}\n\t\n\t\tif ( features.bSort ) {\n\t\t\t$.each( sort, function ( i, val ) {\n\t\t\t\td.order.push( { column: val.col, dir: val.dir } );\n\t\n\t\t\t\tparam( 'iSortCol_'+i, val.col );\n\t\t\t\tparam( 'sSortDir_'+i, val.dir );\n\t\t\t} );\n\t\n\t\t\tparam( 'iSortingCols', sort.length );\n\t\t}\n\t\n\t\t// If the legacy.ajax parameter is null, then we automatically decide which\n\t\t// form to use, based on sAjaxSource\n\t\tvar legacy = DataTable.ext.legacy.ajax;\n\t\tif ( legacy === null ) {\n\t\t\treturn settings.sAjaxSource ? data : d;\n\t\t}\n\t\n\t\t// Otherwise, if legacy has been specified then we use that to decide on the\n\t\t// form\n\t\treturn legacy ? data : d;\n\t}\n\t\n\t\n\t/**\n\t * Data the data from the server (nuking the old) and redraw the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} json json data return from the server.\n\t *  @param {string} json.sEcho Tracking flag for DataTables to match requests\n\t *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering\n\t *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering\n\t *  @param {array} json.aaData The data to display on this page\n\t *  @param {string} [json.sColumns] Column ordering (sName, comma separated)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdateDraw ( settings, json )\n\t{\n\t\t// v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.\n\t\t// Support both\n\t\tvar compat = function ( old, modern ) {\n\t\t\treturn json[old] !== undefined ? json[old] : json[modern];\n\t\t};\n\t\n\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\tvar draw            = compat( 'sEcho',                'draw' );\n\t\tvar recordsTotal    = compat( 'iTotalRecords',        'recordsTotal' );\n\t\tvar recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );\n\t\n\t\tif ( draw !== undefined ) {\n\t\t\t// Protect against out of sequence returns\n\t\t\tif ( draw*1 < settings.iDraw ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettings.iDraw = draw * 1;\n\t\t}\n\t\n\t\t// No data in returned object, so rather than an array, we show an empty table\n\t\tif ( ! data ) {\n\t\t\tdata = [];\n\t\t}\n\t\n\t\t_fnClearTable( settings );\n\t\tsettings._iRecordsTotal   = parseInt(recordsTotal, 10);\n\t\tsettings._iRecordsDisplay = parseInt(recordsFiltered, 10);\n\t\n\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t_fnAddData( settings, data[i] );\n\t\t}\n\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\n\t\t_fnDraw( settings, true );\n\t\n\t\tif ( ! settings._bInitComplete ) {\n\t\t\t_fnInitComplete( settings, json );\n\t\t}\n\t\n\t\t_fnProcessingDisplay( settings, false );\n\t}\n\t\n\t\n\t/**\n\t * Get the data from the JSON data source to use for drawing a table. Using\n\t * `_fnGetObjectDataFn` allows the data to be sourced from a property of the\n\t * source object, or from a processing function.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param  {object} json Data source object / array from the server\n\t *  @return {array} Array of data to use\n\t */\n\t function _fnAjaxDataSrc ( oSettings, json, write )\n\t {\n\t\tvar dataSrc = $.isPlainObject( oSettings.ajax ) && oSettings.ajax.dataSrc !== undefined ?\n\t\t\toSettings.ajax.dataSrc :\n\t\t\toSettings.sAjaxDataProp; // Compatibility with 1.9-.\n\t\n\t\tif ( ! write ) {\n\t\t\tif ( dataSrc === 'data' ) {\n\t\t\t\t// If the default, then we still want to support the old style, and safely ignore\n\t\t\t\t// it if possible\n\t\t\t\treturn json.aaData || json[dataSrc];\n\t\t\t}\n\t\n\t\t\treturn dataSrc !== \"\" ?\n\t\t\t\t_fnGetObjectDataFn( dataSrc )( json ) :\n\t\t\t\tjson;\n\t\t}\n\t\n\t\t// set\n\t\t_fnSetObjectDataFn( dataSrc )( json, write );\n\t}\n\t\n\t/**\n\t * Generate the node required for filtering text\n\t *  @returns {node} Filter control element\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlFilter ( settings )\n\t{\n\t\tvar classes = settings.oClasses;\n\t\tvar tableId = settings.sTableId;\n\t\tvar language = settings.oLanguage;\n\t\tvar previousSearch = settings.oPreviousSearch;\n\t\tvar features = settings.aanFeatures;\n\t\tvar input = '<input type=\"search\" class=\"'+classes.sFilterInput+'\"/>';\n\t\n\t\tvar str = language.sSearch;\n\t\tstr = str.match(/_INPUT_/) ?\n\t\t\tstr.replace('_INPUT_', input) :\n\t\t\tstr+input;\n\t\n\t\tvar filter = $('<div/>', {\n\t\t\t\t'id': ! features.f ? tableId+'_filter' : null,\n\t\t\t\t'class': classes.sFilter\n\t\t\t} )\n\t\t\t.append( $('<label/>' ).append( str ) );\n\t\n\t\tvar searchFn = function(event) {\n\t\t\t/* Update all other filter input elements for the new display */\n\t\t\tvar n = features.f;\n\t\t\tvar val = !this.value ? \"\" : this.value; // mental IE8 fix :-(\n\t\t\tif(previousSearch['return'] && event.key !== \"Enter\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t/* Now do the filter */\n\t\t\tif ( val != previousSearch.sSearch ) {\n\t\t\t\t_fnFilterComplete( settings, {\n\t\t\t\t\t\"sSearch\": val,\n\t\t\t\t\t\"bRegex\": previousSearch.bRegex,\n\t\t\t\t\t\"bSmart\": previousSearch.bSmart ,\n\t\t\t\t\t\"bCaseInsensitive\": previousSearch.bCaseInsensitive,\n\t\t\t\t\t\"return\": previousSearch['return']\n\t\t\t\t} );\n\t\n\t\t\t\t// Need to redraw, without resorting\n\t\t\t\tsettings._iDisplayStart = 0;\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t};\n\t\n\t\tvar searchDelay = settings.searchDelay !== null ?\n\t\t\tsettings.searchDelay :\n\t\t\t_fnDataSource( settings ) === 'ssp' ?\n\t\t\t\t400 :\n\t\t\t\t0;\n\t\n\t\tvar jqFilter = $('input', filter)\n\t\t\t.val( previousSearch.sSearch )\n\t\t\t.attr( 'placeholder', language.sSearchPlaceholder )\n\t\t\t.on(\n\t\t\t\t'keyup.DT search.DT input.DT paste.DT cut.DT',\n\t\t\t\tsearchDelay ?\n\t\t\t\t\t_fnThrottle( searchFn, searchDelay ) :\n\t\t\t\t\tsearchFn\n\t\t\t)\n\t\t\t.on( 'mouseup.DT', function(e) {\n\t\t\t\t// Edge fix! Edge 17 does not trigger anything other than mouse events when clicking\n\t\t\t\t// on the clear icon (Edge bug 17584515). This is safe in other browsers as `searchFn`\n\t\t\t\t// checks the value to see if it has changed. In other browsers it won't have.\n\t\t\t\tsetTimeout( function () {\n\t\t\t\t\tsearchFn.call(jqFilter[0], e);\n\t\t\t\t}, 10);\n\t\t\t} )\n\t\t\t.on( 'keypress.DT', function(e) {\n\t\t\t\t/* Prevent form submission */\n\t\t\t\tif ( e.keyCode == 13 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.attr('aria-controls', tableId);\n\t\n\t\t// Update the input elements whenever the table is filtered\n\t\t$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {\n\t\t\tif ( settings === s ) {\n\t\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t\t// inside an iframe or frame...\n\t\t\t\ttry {\n\t\t\t\t\tif ( jqFilter[0] !== document.activeElement ) {\n\t\t\t\t\t\tjqFilter.val( previousSearch.sSearch );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {}\n\t\t\t}\n\t\t} );\n\t\n\t\treturn filter[0];\n\t}\n\t\n\t\n\t/**\n\t * Filter the table using both the global filter and column based filtering\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oSearch search information\n\t *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterComplete ( oSettings, oInput, iForce )\n\t{\n\t\tvar oPrevSearch = oSettings.oPreviousSearch;\n\t\tvar aoPrevSearch = oSettings.aoPreSearchCols;\n\t\tvar fnSaveFilter = function ( oFilter ) {\n\t\t\t/* Save the filtering values */\n\t\t\toPrevSearch.sSearch = oFilter.sSearch;\n\t\t\toPrevSearch.bRegex = oFilter.bRegex;\n\t\t\toPrevSearch.bSmart = oFilter.bSmart;\n\t\t\toPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;\n\t\t\toPrevSearch['return'] = oFilter['return'];\n\t\t};\n\t\tvar fnRegex = function ( o ) {\n\t\t\t// Backwards compatibility with the bEscapeRegex option\n\t\t\treturn o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;\n\t\t};\n\t\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo As per sort - can this be moved into an event handler?\n\t\t_fnColumnTypes( oSettings );\n\t\n\t\t/* In server-side processing all filtering is done by the server, so no point hanging around here */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' )\n\t\t{\n\t\t\t/* Global filter */\n\t\t\t_fnFilter( oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive );\n\t\t\tfnSaveFilter( oInput );\n\t\n\t\t\t/* Now do the individual column filter */\n\t\t\tfor ( var i=0 ; i<aoPrevSearch.length ; i++ )\n\t\t\t{\n\t\t\t\t_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, fnRegex(aoPrevSearch[i]),\n\t\t\t\t\taoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );\n\t\t\t}\n\t\n\t\t\t/* Custom filtering */\n\t\t\t_fnFilterCustom( oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfnSaveFilter( oInput );\n\t\t}\n\t\n\t\t/* Tell the draw function we have been filtering */\n\t\toSettings.bFiltered = true;\n\t\t_fnCallbackFire( oSettings, null, 'search', [oSettings] );\n\t}\n\t\n\t\n\t/**\n\t * Apply custom filtering functions\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCustom( settings )\n\t{\n\t\tvar filters = DataTable.ext.search;\n\t\tvar displayRows = settings.aiDisplay;\n\t\tvar row, rowIdx;\n\t\n\t\tfor ( var i=0, ien=filters.length ; i<ien ; i++ ) {\n\t\t\tvar rows = [];\n\t\n\t\t\t// Loop over each row and see if it should be included\n\t\t\tfor ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {\n\t\t\t\trowIdx = displayRows[ j ];\n\t\t\t\trow = settings.aoData[ rowIdx ];\n\t\n\t\t\t\tif ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {\n\t\t\t\t\trows.push( rowIdx );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// So the array reference doesn't break set the results into the\n\t\t\t// existing array\n\t\t\tdisplayRows.length = 0;\n\t\t\t$.merge( displayRows, rows );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Filter the table on a per-column basis\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sInput string to filter on\n\t *  @param {int} iColumn column to filter\n\t *  @param {bool} bRegex treat search string as a regular expression or not\n\t *  @param {bool} bSmart use smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, caseInsensitive )\n\t{\n\t\tif ( searchStr === '' ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar data;\n\t\tvar out = [];\n\t\tvar display = settings.aiDisplay;\n\t\tvar rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );\n\t\n\t\tfor ( var i=0 ; i<display.length ; i++ ) {\n\t\t\tdata = settings.aoData[ display[i] ]._aFilterData[ colIdx ];\n\t\n\t\t\tif ( rpSearch.test( data ) ) {\n\t\t\t\tout.push( display[i] );\n\t\t\t}\n\t\t}\n\t\n\t\tsettings.aiDisplay = out;\n\t}\n\t\n\t\n\t/**\n\t * Filter the data table based on user input and draw the table\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} input string to filter on\n\t *  @param {int} force optional - force a research of the master array (1) or not (undefined or 0)\n\t *  @param {bool} regex treat as a regular expression or not\n\t *  @param {bool} smart perform smart filtering or not\n\t *  @param {bool} caseInsensitive Do case insensitive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilter( settings, input, force, regex, smart, caseInsensitive )\n\t{\n\t\tvar rpSearch = _fnFilterCreateSearch( input, regex, smart, caseInsensitive );\n\t\tvar prevSearch = settings.oPreviousSearch.sSearch;\n\t\tvar displayMaster = settings.aiDisplayMaster;\n\t\tvar display, invalidated, i;\n\t\tvar filtered = [];\n\t\n\t\t// Need to take account of custom filtering functions - always filter\n\t\tif ( DataTable.ext.search.length !== 0 ) {\n\t\t\tforce = true;\n\t\t}\n\t\n\t\t// Check if any of the rows were invalidated\n\t\tinvalidated = _fnFilterData( settings );\n\t\n\t\t// If the input is blank - we just want the full data set\n\t\tif ( input.length <= 0 ) {\n\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t}\n\t\telse {\n\t\t\t// New search - start from the master array\n\t\t\tif ( invalidated ||\n\t\t\t\t force ||\n\t\t\t\t regex ||\n\t\t\t\t prevSearch.length > input.length ||\n\t\t\t\t input.indexOf(prevSearch) !== 0 ||\n\t\t\t\t settings.bSorted // On resort, the display master needs to be\n\t\t\t\t                  // re-filtered since indexes will have changed\n\t\t\t) {\n\t\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t\t}\n\t\n\t\t\t// Search the display array\n\t\t\tdisplay = settings.aiDisplay;\n\t\n\t\t\tfor ( i=0 ; i<display.length ; i++ ) {\n\t\t\t\tif ( rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {\n\t\t\t\t\tfiltered.push( display[i] );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tsettings.aiDisplay = filtered;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a regular expression object suitable for searching a table\n\t *  @param {string} sSearch string to search for\n\t *  @param {bool} bRegex treat as a regular expression or not\n\t *  @param {bool} bSmart perform smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n\t *  @returns {RegExp} constructed object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCreateSearch( search, regex, smart, caseInsensitive )\n\t{\n\t\tsearch = regex ?\n\t\t\tsearch :\n\t\t\t_fnEscapeRegex( search );\n\t\t\n\t\tif ( smart ) {\n\t\t\t/* For smart filtering we want to allow the search to work regardless of\n\t\t\t * word order. We also want double quoted text to be preserved, so word\n\t\t\t * order is important - a la google. So this is what we want to\n\t\t\t * generate:\n\t\t\t * \n\t\t\t * ^(?=.*?\\bone\\b)(?=.*?\\btwo three\\b)(?=.*?\\bfour\\b).*$\n\t\t\t */\n\t\t\tvar a = $.map( search.match( /[\"\\u201C][^\"\\u201D]+[\"\\u201D]|[^ ]+/g ) || [''], function ( word ) {\n\t\t\t\tif ( word.charAt(0) === '\"' ) {\n\t\t\t\t\tvar m = word.match( /^\"(.*)\"$/ );\n\t\t\t\t\tword = m ? m[1] : word;\n\t\t\t\t}\n\t\t\t\telse if ( word.charAt(0) === '\\u201C' ) {\n\t\t\t\t\tvar m = word.match( /^\\u201C(.*)\\u201D$/ );\n\t\t\t\t\tword = m ? m[1] : word;\n\t\t\t\t}\n\t\n\t\t\t\treturn word.replace('\"', '');\n\t\t\t} );\n\t\n\t\t\tsearch = '^(?=.*?'+a.join( ')(?=.*?' )+').*$';\n\t\t}\n\t\n\t\treturn new RegExp( search, caseInsensitive ? 'i' : '' );\n\t}\n\t\n\t\n\t/**\n\t * Escape a string such that it can be used in a regular expression\n\t *  @param {string} sVal string to escape\n\t *  @returns {string} escaped string\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnEscapeRegex = DataTable.util.escapeRegex;\n\t\n\tvar __filter_div = $('<div>')[0];\n\tvar __filter_div_textContent = __filter_div.textContent !== undefined;\n\t\n\t// Update the filtering data for each row if needed (by invalidation or first run)\n\tfunction _fnFilterData ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar column;\n\t\tvar i, j, ien, jen, filterData, cellData, row;\n\t\tvar wasInvalidated = false;\n\t\n\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\t\n\t\t\tif ( ! row._aFilterData ) {\n\t\t\t\tfilterData = [];\n\t\n\t\t\t\tfor ( j=0, jen=columns.length ; j<jen ; j++ ) {\n\t\t\t\t\tcolumn = columns[j];\n\t\n\t\t\t\t\tif ( column.bSearchable ) {\n\t\t\t\t\t\tcellData = _fnGetCellData( settings, i, j, 'filter' );\n\t\n\t\t\t\t\t\t// Search in DataTables 1.10 is string based. In 1.11 this\n\t\t\t\t\t\t// should be altered to also allow strict type checking.\n\t\t\t\t\t\tif ( cellData === null ) {\n\t\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( typeof cellData !== 'string' && cellData.toString ) {\n\t\t\t\t\t\t\tcellData = cellData.toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If it looks like there is an HTML entity in the string,\n\t\t\t\t\t// attempt to decode it so sorting works as expected. Note that\n\t\t\t\t\t// we could use a single line of jQuery to do this, but the DOM\n\t\t\t\t\t// method used here is much faster https://jsperf.com/html-decode\n\t\t\t\t\tif ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {\n\t\t\t\t\t\t__filter_div.innerHTML = cellData;\n\t\t\t\t\t\tcellData = __filter_div_textContent ?\n\t\t\t\t\t\t\t__filter_div.textContent :\n\t\t\t\t\t\t\t__filter_div.innerText;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif ( cellData.replace ) {\n\t\t\t\t\t\tcellData = cellData.replace(/[\\r\\n\\u2028]/g, '');\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfilterData.push( cellData );\n\t\t\t\t}\n\t\n\t\t\t\trow._aFilterData = filterData;\n\t\t\t\trow._sFilterRow = filterData.join('  ');\n\t\t\t\twasInvalidated = true;\n\t\t\t}\n\t\t}\n\t\n\t\treturn wasInvalidated;\n\t}\n\t\n\t\n\t/**\n\t * Convert from the internal Hungarian notation to camelCase for external\n\t * interaction\n\t *  @param {object} obj Object to convert\n\t *  @returns {object} Inverted object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSearchToCamel ( obj )\n\t{\n\t\treturn {\n\t\t\tsearch:          obj.sSearch,\n\t\t\tsmart:           obj.bSmart,\n\t\t\tregex:           obj.bRegex,\n\t\t\tcaseInsensitive: obj.bCaseInsensitive\n\t\t};\n\t}\n\t\n\t\n\t\n\t/**\n\t * Convert from camelCase notation to the internal Hungarian. We could use the\n\t * Hungarian convert function here, but this is cleaner\n\t *  @param {object} obj Object to convert\n\t *  @returns {object} Inverted object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSearchToHung ( obj )\n\t{\n\t\treturn {\n\t\t\tsSearch:          obj.search,\n\t\t\tbSmart:           obj.smart,\n\t\t\tbRegex:           obj.regex,\n\t\t\tbCaseInsensitive: obj.caseInsensitive\n\t\t};\n\t}\n\t\n\t/**\n\t * Generate the node required for the info display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Information element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlInfo ( settings )\n\t{\n\t\tvar\n\t\t\ttid = settings.sTableId,\n\t\t\tnodes = settings.aanFeatures.i,\n\t\t\tn = $('<div/>', {\n\t\t\t\t'class': settings.oClasses.sInfo,\n\t\t\t\t'id': ! nodes ? tid+'_info' : null\n\t\t\t} );\n\t\n\t\tif ( ! nodes ) {\n\t\t\t// Update display on each draw\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": _fnUpdateInfo,\n\t\t\t\t\"sName\": \"information\"\n\t\t\t} );\n\t\n\t\t\tn\n\t\t\t\t.attr( 'role', 'status' )\n\t\t\t\t.attr( 'aria-live', 'polite' );\n\t\n\t\t\t// Table is described by our info div\n\t\t\t$(settings.nTable).attr( 'aria-describedby', tid+'_info' );\n\t\t}\n\t\n\t\treturn n[0];\n\t}\n\t\n\t\n\t/**\n\t * Update the information elements in the display\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnUpdateInfo ( settings )\n\t{\n\t\t/* Show information about the table */\n\t\tvar nodes = settings.aanFeatures.i;\n\t\tif ( nodes.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\tlang  = settings.oLanguage,\n\t\t\tstart = settings._iDisplayStart+1,\n\t\t\tend   = settings.fnDisplayEnd(),\n\t\t\tmax   = settings.fnRecordsTotal(),\n\t\t\ttotal = settings.fnRecordsDisplay(),\n\t\t\tout   = total ?\n\t\t\t\tlang.sInfo :\n\t\t\t\tlang.sInfoEmpty;\n\t\n\t\tif ( total !== max ) {\n\t\t\t/* Record set after filtering */\n\t\t\tout += ' ' + lang.sInfoFiltered;\n\t\t}\n\t\n\t\t// Convert the macros\n\t\tout += lang.sInfoPostFix;\n\t\tout = _fnInfoMacros( settings, out );\n\t\n\t\tvar callback = lang.fnInfoCallback;\n\t\tif ( callback !== null ) {\n\t\t\tout = callback.call( settings.oInstance,\n\t\t\t\tsettings, start, end, max, total, out\n\t\t\t);\n\t\t}\n\t\n\t\t$(nodes).html( out );\n\t}\n\t\n\t\n\tfunction _fnInfoMacros ( settings, str )\n\t{\n\t\t// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only\n\t\t// internally\n\t\tvar\n\t\t\tformatter  = settings.fnFormatNumber,\n\t\t\tstart      = settings._iDisplayStart+1,\n\t\t\tlen        = settings._iDisplayLength,\n\t\t\tvis        = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn str.\n\t\t\treplace(/_START_/g, formatter.call( settings, start ) ).\n\t\t\treplace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).\n\t\t\treplace(/_MAX_/g,   formatter.call( settings, settings.fnRecordsTotal() ) ).\n\t\t\treplace(/_TOTAL_/g, formatter.call( settings, vis ) ).\n\t\t\treplace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).\n\t\t\treplace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );\n\t}\n\t\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitialise ( settings )\n\t{\n\t\tvar i, iLen, iAjaxStart=settings.iInitDisplayStart;\n\t\tvar columns = settings.aoColumns, column;\n\t\tvar features = settings.oFeatures;\n\t\tvar deferLoading = settings.bDeferLoading; // value modified by the draw\n\t\n\t\t/* Ensure that the table data is fully initialised */\n\t\tif ( ! settings.bInitialised ) {\n\t\t\tsetTimeout( function(){ _fnInitialise( settings ); }, 200 );\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Show the display HTML options */\n\t\t_fnAddOptionsHtml( settings );\n\t\n\t\t/* Build and draw the header / footer for the table */\n\t\t_fnBuildHead( settings );\n\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\n\t\t/* Okay to show that something is going on now */\n\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t/* Calculate sizes for columns */\n\t\tif ( features.bAutoWidth ) {\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\n\t\t\tif ( column.sWidth ) {\n\t\t\t\tcolumn.nTh.style.width = _fnStringToCss( column.sWidth );\n\t\t\t}\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'preInit', [settings] );\n\t\n\t\t// If there is default sorting required - let's do it. The sort function\n\t\t// will do the drawing for us. Otherwise we draw the table regardless of the\n\t\t// Ajax source - this allows the table to look initialised for Ajax sourcing\n\t\t// data (show 'loading' message possibly)\n\t\t_fnReDraw( settings );\n\t\n\t\t// Server-side processing init complete is done by _fnAjaxUpdateDraw\n\t\tvar dataSrc = _fnDataSource( settings );\n\t\tif ( dataSrc != 'ssp' || deferLoading ) {\n\t\t\t// if there is an ajax source load the data\n\t\t\tif ( dataSrc == 'ajax' ) {\n\t\t\t\t_fnBuildAjax( settings, [], function(json) {\n\t\t\t\t\tvar aData = _fnAjaxDataSrc( settings, json );\n\t\n\t\t\t\t\t// Got the data - add it to the table\n\t\t\t\t\tfor ( i=0 ; i<aData.length ; i++ ) {\n\t\t\t\t\t\t_fnAddData( settings, aData[i] );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Reset the init display for cookie saving. We've already done\n\t\t\t\t\t// a filter, and therefore cleared it before. So we need to make\n\t\t\t\t\t// it appear 'fresh'\n\t\t\t\t\tsettings.iInitDisplayStart = iAjaxStart;\n\t\n\t\t\t\t\t_fnReDraw( settings );\n\t\n\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t_fnInitComplete( settings, json );\n\t\t\t\t}, settings );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t_fnInitComplete( settings );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} [json] JSON from the server that completed the table, if using Ajax source\n\t *    with client-side processing (optional)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitComplete ( settings, json )\n\t{\n\t\tsettings._bInitComplete = true;\n\t\n\t\t// When data was added after the initialisation (data or Ajax) we need to\n\t\t// calculate the column sizing\n\t\tif ( json || settings.oInit.aaData ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'plugin-init', [settings, json] );\n\t\t_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );\n\t}\n\t\n\t\n\tfunction _fnLengthChange ( settings, val )\n\t{\n\t\tvar len = parseInt( val, 10 );\n\t\tsettings._iDisplayLength = len;\n\t\n\t\t_fnLengthOverflow( settings );\n\t\n\t\t// Fire length change event\n\t\t_fnCallbackFire( settings, null, 'length', [settings, len] );\n\t}\n\t\n\t\n\t/**\n\t * Generate the node required for user display length changing\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Display length feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlLength ( settings )\n\t{\n\t\tvar\n\t\t\tclasses  = settings.oClasses,\n\t\t\ttableId  = settings.sTableId,\n\t\t\tmenu     = settings.aLengthMenu,\n\t\t\td2       = Array.isArray( menu[0] ),\n\t\t\tlengths  = d2 ? menu[0] : menu,\n\t\t\tlanguage = d2 ? menu[1] : menu;\n\t\n\t\tvar select = $('<select/>', {\n\t\t\t'name':          tableId+'_length',\n\t\t\t'aria-controls': tableId,\n\t\t\t'class':         classes.sLengthSelect\n\t\t} );\n\t\n\t\tfor ( var i=0, ien=lengths.length ; i<ien ; i++ ) {\n\t\t\tselect[0][ i ] = new Option(\n\t\t\t\ttypeof language[i] === 'number' ?\n\t\t\t\t\tsettings.fnFormatNumber( language[i] ) :\n\t\t\t\t\tlanguage[i],\n\t\t\t\tlengths[i]\n\t\t\t);\n\t\t}\n\t\n\t\tvar div = $('<div><label/></div>').addClass( classes.sLength );\n\t\tif ( ! settings.aanFeatures.l ) {\n\t\t\tdiv[0].id = tableId+'_length';\n\t\t}\n\t\n\t\tdiv.children().append(\n\t\t\tsettings.oLanguage.sLengthMenu.replace( '_MENU_', select[0].outerHTML )\n\t\t);\n\t\n\t\t// Can't use `select` variable as user might provide their own and the\n\t\t// reference is broken by the use of outerHTML\n\t\t$('select', div)\n\t\t\t.val( settings._iDisplayLength )\n\t\t\t.on( 'change.DT', function(e) {\n\t\t\t\t_fnLengthChange( settings, $(this).val() );\n\t\t\t\t_fnDraw( settings );\n\t\t\t} );\n\t\n\t\t// Update node value whenever anything changes the table's length\n\t\t$(settings.nTable).on( 'length.dt.DT', function (e, s, len) {\n\t\t\tif ( settings === s ) {\n\t\t\t\t$('select', div).val( len );\n\t\t\t}\n\t\t} );\n\t\n\t\treturn div[0];\n\t}\n\t\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Note that most of the paging logic is done in\n\t * DataTable.ext.pager\n\t */\n\t\n\t/**\n\t * Generate the node required for default pagination\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Pagination feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlPaginate ( settings )\n\t{\n\t\tvar\n\t\t\ttype   = settings.sPaginationType,\n\t\t\tplugin = DataTable.ext.pager[ type ],\n\t\t\tmodern = typeof plugin === 'function',\n\t\t\tredraw = function( settings ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t},\n\t\t\tnode = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],\n\t\t\tfeatures = settings.aanFeatures;\n\t\n\t\tif ( ! modern ) {\n\t\t\tplugin.fnInit( settings, node, redraw );\n\t\t}\n\t\n\t\t/* Add a draw callback for the pagination on first instance, to update the paging display */\n\t\tif ( ! features.p )\n\t\t{\n\t\t\tnode.id = settings.sTableId+'_paginate';\n\t\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": function( settings ) {\n\t\t\t\t\tif ( modern ) {\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\tstart      = settings._iDisplayStart,\n\t\t\t\t\t\t\tlen        = settings._iDisplayLength,\n\t\t\t\t\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\t\t\t\t\tall        = len === -1,\n\t\t\t\t\t\t\tpage = all ? 0 : Math.ceil( start / len ),\n\t\t\t\t\t\t\tpages = all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\t\t\t\tbuttons = plugin(page, pages),\n\t\t\t\t\t\t\ti, ien;\n\t\n\t\t\t\t\t\tfor ( i=0, ien=features.p.length ; i<ien ; i++ ) {\n\t\t\t\t\t\t\t_fnRenderer( settings, 'pageButton' )(\n\t\t\t\t\t\t\t\tsettings, features.p[i], i, buttons, page, pages\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplugin.fnUpdate( settings, redraw );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"sName\": \"pagination\"\n\t\t\t} );\n\t\t}\n\t\n\t\treturn node;\n\t}\n\t\n\t\n\t/**\n\t * Alter the display settings to change the page\n\t *  @param {object} settings DataTables settings object\n\t *  @param {string|int} action Paging action to take: \"first\", \"previous\",\n\t *    \"next\" or \"last\" or page number to jump to (integer)\n\t *  @param [bool] redraw Automatically draw the update or not\n\t *  @returns {bool} true page has changed, false - no change\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnPageChange ( settings, action, redraw )\n\t{\n\t\tvar\n\t\t\tstart     = settings._iDisplayStart,\n\t\t\tlen       = settings._iDisplayLength,\n\t\t\trecords   = settings.fnRecordsDisplay();\n\t\n\t\tif ( records === 0 || len === -1 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( typeof action === \"number\" )\n\t\t{\n\t\t\tstart = action * len;\n\t\n\t\t\tif ( start > records )\n\t\t\t{\n\t\t\t\tstart = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"first\" )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( action == \"previous\" )\n\t\t{\n\t\t\tstart = len >= 0 ?\n\t\t\t\tstart - len :\n\t\t\t\t0;\n\t\n\t\t\tif ( start < 0 )\n\t\t\t{\n\t\t\t  start = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"next\" )\n\t\t{\n\t\t\tif ( start + len < records )\n\t\t\t{\n\t\t\t\tstart += len;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"last\" )\n\t\t{\n\t\t\tstart = Math.floor( (records-1) / len) * len;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_fnLog( settings, 0, \"Unknown paging action: \"+action, 5 );\n\t\t}\n\t\n\t\tvar changed = settings._iDisplayStart !== start;\n\t\tsettings._iDisplayStart = start;\n\t\n\t\tif ( changed ) {\n\t\t\t_fnCallbackFire( settings, null, 'page', [settings] );\n\t\n\t\t\tif ( redraw ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// No change event - paging was called, but no change\n\t\t\t_fnCallbackFire( settings, null, 'page-nc', [settings] );\n\t\t}\n\t\n\t\treturn changed;\n\t}\n\t\n\t\n\t\n\t/**\n\t * Generate the node required for the processing node\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Processing element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlProcessing ( settings )\n\t{\n\t\treturn $('<div/>', {\n\t\t\t\t'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,\n\t\t\t\t'class': settings.oClasses.sProcessing,\n\t\t\t\t'role': 'status'\n\t\t\t} )\n\t\t\t.html( settings.oLanguage.sProcessing )\n\t\t\t.append('<div><div></div><div></div><div></div><div></div></div>')\n\t\t\t.insertBefore( settings.nTable )[0];\n\t}\n\t\n\t\n\t/**\n\t * Display or hide the processing indicator\n\t *  @param {object} settings dataTables settings object\n\t *  @param {bool} show Show the processing indicator (true) or not (false)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnProcessingDisplay ( settings, show )\n\t{\n\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t$(settings.aanFeatures.r).css( 'display', show ? 'block' : 'none' );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'processing', [settings, show] );\n\t}\n\t\n\t/**\n\t * Add any control elements for the table - specifically scrolling\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Node to add to the DOM\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlTable ( settings )\n\t{\n\t\tvar table = $(settings.nTable);\n\t\n\t\t// Scrolling from here on in\n\t\tvar scroll = settings.oScroll;\n\t\n\t\tif ( scroll.sX === '' && scroll.sY === '' ) {\n\t\t\treturn settings.nTable;\n\t\t}\n\t\n\t\tvar scrollX = scroll.sX;\n\t\tvar scrollY = scroll.sY;\n\t\tvar classes = settings.oClasses;\n\t\tvar caption = table.children('caption');\n\t\tvar captionSide = caption.length ? caption[0]._captionSide : null;\n\t\tvar headerClone = $( table[0].cloneNode(false) );\n\t\tvar footerClone = $( table[0].cloneNode(false) );\n\t\tvar footer = table.children('tfoot');\n\t\tvar _div = '<div/>';\n\t\tvar size = function ( s ) {\n\t\t\treturn !s ? null : _fnStringToCss( s );\n\t\t};\n\t\n\t\tif ( ! footer.length ) {\n\t\t\tfooter = null;\n\t\t}\n\t\n\t\t/*\n\t\t * The HTML structure that we want to generate in this function is:\n\t\t *  div - scroller\n\t\t *    div - scroll head\n\t\t *      div - scroll head inner\n\t\t *        table - scroll head table\n\t\t *          thead - thead\n\t\t *    div - scroll body\n\t\t *      table - table (master table)\n\t\t *        thead - thead clone for sizing\n\t\t *        tbody - tbody\n\t\t *    div - scroll foot\n\t\t *      div - scroll foot inner\n\t\t *        table - scroll foot table\n\t\t *          tfoot - tfoot\n\t\t */\n\t\tvar scroller = $( _div, { 'class': classes.sScrollWrapper } )\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollHead } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollHeadInner } )\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t'box-sizing': 'content-box',\n\t\t\t\t\t\t\t\twidth: scroll.sXInner || '100%'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\theaderClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'top' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('thead')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollBody } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t\twidth: size( scrollX )\n\t\t\t\t\t} )\n\t\t\t\t\t.append( table )\n\t\t\t);\n\t\n\t\tif ( footer ) {\n\t\t\tscroller.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollFoot } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollFootInner } )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\tfooterClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'bottom' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('tfoot')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\n\t\tvar children = scroller.children();\n\t\tvar scrollHead = children[0];\n\t\tvar scrollBody = children[1];\n\t\tvar scrollFoot = footer ? children[2] : null;\n\t\n\t\t// When the body is scrolled, then we also want to scroll the headers\n\t\tif ( scrollX ) {\n\t\t\t$(scrollBody).on( 'scroll.DT', function (e) {\n\t\t\t\tvar scrollLeft = this.scrollLeft;\n\t\n\t\t\t\tscrollHead.scrollLeft = scrollLeft;\n\t\n\t\t\t\tif ( footer ) {\n\t\t\t\t\tscrollFoot.scrollLeft = scrollLeft;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\n\t\t$(scrollBody).css('max-height', scrollY);\n\t\tif (! scroll.bCollapse) {\n\t\t\t$(scrollBody).css('height', scrollY);\n\t\t}\n\t\n\t\tsettings.nScrollHead = scrollHead;\n\t\tsettings.nScrollBody = scrollBody;\n\t\tsettings.nScrollFoot = scrollFoot;\n\t\n\t\t// On redraw - align columns\n\t\tsettings.aoDrawCallback.push( {\n\t\t\t\"fn\": _fnScrollDraw,\n\t\t\t\"sName\": \"scrolling\"\n\t\t} );\n\t\n\t\treturn scroller[0];\n\t}\n\t\n\t\n\t\n\t/**\n\t * Update the header, footer and body tables for resizing - i.e. column\n\t * alignment.\n\t *\n\t * Welcome to the most horrible function DataTables. The process that this\n\t * function follows is basically:\n\t *   1. Re-create the table inside the scrolling div\n\t *   2. Take live measurements from the DOM\n\t *   3. Apply the measurements to align the columns\n\t *   4. Clean up\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnScrollDraw ( settings )\n\t{\n\t\t// Given that this is such a monster function, a lot of variables are use\n\t\t// to try and keep the minimised size as small as possible\n\t\tvar\n\t\t\tscroll         = settings.oScroll,\n\t\t\tscrollX        = scroll.sX,\n\t\t\tscrollXInner   = scroll.sXInner,\n\t\t\tscrollY        = scroll.sY,\n\t\t\tbarWidth       = scroll.iBarWidth,\n\t\t\tdivHeader      = $(settings.nScrollHead),\n\t\t\tdivHeaderStyle = divHeader[0].style,\n\t\t\tdivHeaderInner = divHeader.children('div'),\n\t\t\tdivHeaderInnerStyle = divHeaderInner[0].style,\n\t\t\tdivHeaderTable = divHeaderInner.children('table'),\n\t\t\tdivBodyEl      = settings.nScrollBody,\n\t\t\tdivBody        = $(divBodyEl),\n\t\t\tdivBodyStyle   = divBodyEl.style,\n\t\t\tdivFooter      = $(settings.nScrollFoot),\n\t\t\tdivFooterInner = divFooter.children('div'),\n\t\t\tdivFooterTable = divFooterInner.children('table'),\n\t\t\theader         = $(settings.nTHead),\n\t\t\ttable          = $(settings.nTable),\n\t\t\ttableEl        = table[0],\n\t\t\ttableStyle     = tableEl.style,\n\t\t\tfooter         = settings.nTFoot ? $(settings.nTFoot) : null,\n\t\t\tbrowser        = settings.oBrowser,\n\t\t\tie67           = browser.bScrollOversize,\n\t\t\tdtHeaderCells  = _pluck( settings.aoColumns, 'nTh' ),\n\t\t\theaderTrgEls, footerTrgEls,\n\t\t\theaderSrcEls, footerSrcEls,\n\t\t\theaderCopy, footerCopy,\n\t\t\theaderWidths=[], footerWidths=[],\n\t\t\theaderContent=[], footerContent=[],\n\t\t\tidx, correction, sanityWidth,\n\t\t\tzeroOut = function(nSizer) {\n\t\t\t\tvar style = nSizer.style;\n\t\t\t\tstyle.paddingTop = \"0\";\n\t\t\t\tstyle.paddingBottom = \"0\";\n\t\t\t\tstyle.borderTopWidth = \"0\";\n\t\t\t\tstyle.borderBottomWidth = \"0\";\n\t\t\t\tstyle.height = 0;\n\t\t\t};\n\t\n\t\t// If the scrollbar visibility has changed from the last draw, we need to\n\t\t// adjust the column sizes as the table width will have changed to account\n\t\t// for the scrollbar\n\t\tvar scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;\n\t\t\n\t\tif ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {\n\t\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t\treturn; // adjust column sizing will call this function again\n\t\t}\n\t\telse {\n\t\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t}\n\t\n\t\t/*\n\t\t * 1. Re-create the table inside the scrolling div\n\t\t */\n\t\n\t\t// Remove the old minimised thead and tfoot elements in the inner table\n\t\ttable.children('thead, tfoot').remove();\n\t\n\t\tif ( footer ) {\n\t\t\tfooterCopy = footer.clone().prependTo( table );\n\t\t\tfooterTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized\n\t\t\tfooterSrcEls = footerCopy.find('tr');\n\t\t\tfooterCopy.find('[id]').removeAttr('id');\n\t\t}\n\t\n\t\t// Clone the current header and footer elements and then place it into the inner table\n\t\theaderCopy = header.clone().prependTo( table );\n\t\theaderTrgEls = header.find('tr'); // original header is in its own table\n\t\theaderSrcEls = headerCopy.find('tr');\n\t\theaderCopy.find('th, td').removeAttr('tabindex');\n\t\theaderCopy.find('[id]').removeAttr('id');\n\t\n\t\n\t\t/*\n\t\t * 2. Take live measurements from the DOM - do not alter the DOM itself!\n\t\t */\n\t\n\t\t// Remove old sizing and apply the calculated column widths\n\t\t// Get the unique column headers in the newly created (cloned) header. We want to apply the\n\t\t// calculated sizes to this header\n\t\tif ( ! scrollX )\n\t\t{\n\t\t\tdivBodyStyle.width = '100%';\n\t\t\tdivHeader[0].style.width = '100%';\n\t\t}\n\t\n\t\t$.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {\n\t\t\tidx = _fnVisibleToColumnIndex( settings, i );\n\t\t\tel.style.width = settings.aoColumns[idx].sWidth;\n\t\t} );\n\t\n\t\tif ( footer ) {\n\t\t\t_fnApplyToChildren( function(n) {\n\t\t\t\tn.style.width = \"\";\n\t\t\t}, footerSrcEls );\n\t\t}\n\t\n\t\t// Size the table as a whole\n\t\tsanityWidth = table.outerWidth();\n\t\tif ( scrollX === \"\" ) {\n\t\t\t// No x scrolling\n\t\t\ttableStyle.width = \"100%\";\n\t\n\t\t\t// IE7 will make the width of the table when 100% include the scrollbar\n\t\t\t// - which is shouldn't. When there is a scrollbar we need to take this\n\t\t\t// into account.\n\t\t\tif ( ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);\n\t\t\t}\n\t\n\t\t\t// Recalculate the sanity width\n\t\t\tsanityWidth = table.outerWidth();\n\t\t}\n\t\telse if ( scrollXInner !== \"\" ) {\n\t\t\t// legacy x scroll inner has been given - use it\n\t\t\ttableStyle.width = _fnStringToCss(scrollXInner);\n\t\n\t\t\t// Recalculate the sanity width\n\t\t\tsanityWidth = table.outerWidth();\n\t\t}\n\t\n\t\t// Hidden header should have zero height, so remove padding and borders. Then\n\t\t// set the width based on the real headers\n\t\n\t\t// Apply all styles in one pass\n\t\t_fnApplyToChildren( zeroOut, headerSrcEls );\n\t\n\t\t// Read all widths in next pass\n\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\tvar style = window.getComputedStyle ?\n\t\t\t\twindow.getComputedStyle(nSizer).width :\n\t\t\t\t_fnStringToCss( $(nSizer).width() );\n\t\n\t\t\theaderContent.push( nSizer.innerHTML );\n\t\t\theaderWidths.push( style );\n\t\t}, headerSrcEls );\n\t\n\t\t// Apply all widths in final pass\n\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\tnToSize.style.width = headerWidths[i];\n\t\t}, headerTrgEls );\n\t\n\t\t$(headerSrcEls).css('height', 0);\n\t\n\t\t/* Same again with the footer if we have one */\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( zeroOut, footerSrcEls );\n\t\n\t\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\t\tfooterContent.push( nSizer.innerHTML );\n\t\t\t\tfooterWidths.push( _fnStringToCss( $(nSizer).css('width') ) );\n\t\t\t}, footerSrcEls );\n\t\n\t\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\t\tnToSize.style.width = footerWidths[i];\n\t\t\t}, footerTrgEls );\n\t\n\t\t\t$(footerSrcEls).height(0);\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 3. Apply the measurements\n\t\t */\n\t\n\t\t// \"Hide\" the header and footer that we used for the sizing. We need to keep\n\t\t// the content of the cell so that the width applied to the header and body\n\t\t// both match, but we want to hide it completely. We want to also fix their\n\t\t// width to what they currently are\n\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+headerContent[i]+'</div>';\n\t\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\t\tnSizer.style.width = headerWidths[i];\n\t\t}, headerSrcEls );\n\t\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+footerContent[i]+'</div>';\n\t\t\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\t\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\t\t\tnSizer.style.width = footerWidths[i];\n\t\t\t}, footerSrcEls );\n\t\t}\n\t\n\t\t// Sanity check that the table is of a sensible width. If not then we are going to get\n\t\t// misalignment - try to prevent this by not allowing the table to shrink below its min width\n\t\tif ( Math.round(table.outerWidth()) < Math.round(sanityWidth) )\n\t\t{\n\t\t\t// The min width depends upon if we have a vertical scrollbar visible or not */\n\t\t\tcorrection = ((divBodyEl.scrollHeight > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")) ?\n\t\t\t\t\tsanityWidth+barWidth :\n\t\t\t\t\tsanityWidth;\n\t\n\t\t\t// IE6/7 are a law unto themselves...\n\t\t\tif ( ie67 && (divBodyEl.scrollHeight >\n\t\t\t\tdivBodyEl.offsetHeight || divBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( correction-barWidth );\n\t\t\t}\n\t\n\t\t\t// And give the user a warning that we've stopped the table getting too small\n\t\t\tif ( scrollX === \"\" || scrollXInner !== \"\" ) {\n\t\t\t\t_fnLog( settings, 1, 'Possible column misalignment', 6 );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcorrection = '100%';\n\t\t}\n\t\n\t\t// Apply to the container elements\n\t\tdivBodyStyle.width = _fnStringToCss( correction );\n\t\tdivHeaderStyle.width = _fnStringToCss( correction );\n\t\n\t\tif ( footer ) {\n\t\t\tsettings.nScrollFoot.style.width = _fnStringToCss( correction );\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 4. Clean up\n\t\t */\n\t\tif ( ! scrollY ) {\n\t\t\t/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting\n\t\t\t * the scrollbar height from the visible display, rather than adding it on. We need to\n\t\t\t * set the height in order to sort this. Don't want to do it in any other browsers.\n\t\t\t */\n\t\t\tif ( ie67 ) {\n\t\t\t\tdivBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+barWidth );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Finally set the width's of the header and footer tables */\n\t\tvar iOuterWidth = table.outerWidth();\n\t\tdivHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\tdivHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );\n\t\n\t\t// Figure out if there are scrollbar present - if so then we need a the header and footer to\n\t\t// provide a bit more space to allow \"overflow\" scrolling (i.e. past the scrollbar)\n\t\tvar bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == \"scroll\";\n\t\tvar padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );\n\t\tdivHeaderInnerStyle[ padding ] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t\n\t\tif ( footer ) {\n\t\t\tdivFooterTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style[padding] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t\t}\n\t\n\t\t// Correct DOM ordering for colgroup - comes before the thead\n\t\ttable.children('colgroup').insertBefore( table.children('thead') );\n\t\n\t\t/* Adjust the position of the header in case we loose the y-scrollbar */\n\t\tdivBody.trigger('scroll');\n\t\n\t\t// If sorting or filtering has occurred, jump the scrolling back to the top\n\t\t// only if we aren't holding the position\n\t\tif ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {\n\t\t\tdivBodyEl.scrollTop = 0;\n\t\t}\n\t}\n\t\n\t\n\t\n\t/**\n\t * Apply a given function to the display child nodes of an element array (typically\n\t * TD children of TR rows\n\t *  @param {function} fn Method to apply to the objects\n\t *  @param array {nodes} an1 List of elements to look through for display children\n\t *  @param array {nodes} an2 Another list (identical structure to the first) - optional\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyToChildren( fn, an1, an2 )\n\t{\n\t\tvar index=0, i=0, iLen=an1.length;\n\t\tvar nNode1, nNode2;\n\t\n\t\twhile ( i < iLen ) {\n\t\t\tnNode1 = an1[i].firstChild;\n\t\t\tnNode2 = an2 ? an2[i].firstChild : null;\n\t\n\t\t\twhile ( nNode1 ) {\n\t\t\t\tif ( nNode1.nodeType === 1 ) {\n\t\t\t\t\tif ( an2 ) {\n\t\t\t\t\t\tfn( nNode1, nNode2, index );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfn( nNode1, index );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\n\t\t\t\tnNode1 = nNode1.nextSibling;\n\t\t\t\tnNode2 = an2 ? nNode2.nextSibling : null;\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t}\n\t}\n\t\n\t\n\t\n\tvar __re_html_remove = /<.*?>/g;\n\t\n\t\n\t/**\n\t * Calculate the width of columns for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCalculateColumnWidths ( oSettings )\n\t{\n\t\tvar\n\t\t\ttable = oSettings.nTable,\n\t\t\tcolumns = oSettings.aoColumns,\n\t\t\tscroll = oSettings.oScroll,\n\t\t\tscrollY = scroll.sY,\n\t\t\tscrollX = scroll.sX,\n\t\t\tscrollXInner = scroll.sXInner,\n\t\t\tcolumnCount = columns.length,\n\t\t\tvisibleColumns = _fnGetColumns( oSettings, 'bVisible' ),\n\t\t\theaderCells = $('th', oSettings.nTHead),\n\t\t\ttableWidthAttr = table.getAttribute('width'), // from DOM element\n\t\t\ttableContainer = table.parentNode,\n\t\t\tuserInputs = false,\n\t\t\ti, column, columnIdx, width, outerWidth,\n\t\t\tbrowser = oSettings.oBrowser,\n\t\t\tie67 = browser.bScrollOversize;\n\t\n\t\tvar styleWidth = table.style.width;\n\t\tif ( styleWidth && styleWidth.indexOf('%') !== -1 ) {\n\t\t\ttableWidthAttr = styleWidth;\n\t\t}\n\t\n\t\t/* Convert any user input sizes into pixel sizes */\n\t\tvar sizes = _fnConvertToWidth(_pluck(columns, 'sWidthOrig'), tableContainer);\n\t\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\n\t\t\tif ( column.sWidth !== null ) {\n\t\t\t\tcolumn.sWidth = sizes[i];\n\t\n\t\t\t\tuserInputs = true;\n\t\t\t}\n\t\t}\n\t\n\t\t/* If the number of columns in the DOM equals the number that we have to\n\t\t * process in DataTables, then we can use the offsets that are created by\n\t\t * the web- browser. No custom sizes can be set in order for this to happen,\n\t\t * nor scrolling used\n\t\t */\n\t\tif ( ie67 || ! userInputs && ! scrollX && ! scrollY &&\n\t\t     columnCount == _fnVisbleColumns( oSettings ) &&\n\t\t     columnCount == headerCells.length\n\t\t) {\n\t\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\t\tvar colIdx = _fnVisibleToColumnIndex( oSettings, i );\n\t\n\t\t\t\tif ( colIdx !== null ) {\n\t\t\t\t\tcolumns[ colIdx ].sWidth = _fnStringToCss( headerCells.eq(i).width() );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Otherwise construct a single row, worst case, table with the widest\n\t\t\t// node in the data, assign any user defined widths, then insert it into\n\t\t\t// the DOM and allow the browser to do all the hard work of calculating\n\t\t\t// table widths\n\t\t\tvar tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table\n\t\t\t\t.css( 'visibility', 'hidden' )\n\t\t\t\t.removeAttr( 'id' );\n\t\n\t\t\t// Clean up the table body\n\t\t\ttmpTable.find('tbody tr').remove();\n\t\t\tvar tr = $('<tr/>').appendTo( tmpTable.find('tbody') );\n\t\n\t\t\t// Clone the table header and footer - we can't use the header / footer\n\t\t\t// from the cloned table, since if scrolling is active, the table's\n\t\t\t// real header and footer are contained in different table tags\n\t\t\ttmpTable.find('thead, tfoot').remove();\n\t\t\ttmpTable\n\t\t\t\t.append( $(oSettings.nTHead).clone() )\n\t\t\t\t.append( $(oSettings.nTFoot).clone() );\n\t\n\t\t\t// Remove any assigned widths from the footer (from scrolling)\n\t\t\ttmpTable.find('tfoot th, tfoot td').css('width', '');\n\t\n\t\t\t// Apply custom sizing to the cloned header\n\t\t\theaderCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );\n\t\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\n\t\t\t\theaderCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?\n\t\t\t\t\t_fnStringToCss( column.sWidthOrig ) :\n\t\t\t\t\t'';\n\t\n\t\t\t\t// For scrollX we need to force the column width otherwise the\n\t\t\t\t// browser will collapse it. If this width is smaller than the\n\t\t\t\t// width the column requires, then it will have no effect\n\t\t\t\tif ( column.sWidthOrig && scrollX ) {\n\t\t\t\t\t$( headerCells[i] ).append( $('<div/>').css( {\n\t\t\t\t\t\twidth: column.sWidthOrig,\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\theight: 1\n\t\t\t\t\t} ) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Find the widest cell for each column and put it into the table\n\t\t\tif ( oSettings.aoData.length ) {\n\t\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\t\tcolumnIdx = visibleColumns[i];\n\t\t\t\t\tcolumn = columns[ columnIdx ];\n\t\n\t\t\t\t\t$( _fnGetWidestNode( oSettings, columnIdx ) )\n\t\t\t\t\t\t.clone( false )\n\t\t\t\t\t\t.append( column.sContentPadding )\n\t\t\t\t\t\t.appendTo( tr );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Tidy the temporary table - remove name attributes so there aren't\n\t\t\t// duplicated in the dom (radio elements for example)\n\t\t\t$('[name]', tmpTable).removeAttr('name');\n\t\n\t\t\t// Table has been built, attach to the document so we can work with it.\n\t\t\t// A holding element is used, positioned at the top of the container\n\t\t\t// with minimal height, so it has no effect on if the container scrolls\n\t\t\t// or not. Otherwise it might trigger scrolling when it actually isn't\n\t\t\t// needed\n\t\t\tvar holder = $('<div/>').css( scrollX || scrollY ?\n\t\t\t\t\t{\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\theight: 1,\n\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t\t} :\n\t\t\t\t\t{}\n\t\t\t\t)\n\t\t\t\t.append( tmpTable )\n\t\t\t\t.appendTo( tableContainer );\n\t\n\t\t\t// When scrolling (X or Y) we want to set the width of the table as \n\t\t\t// appropriate. However, when not scrolling leave the table width as it\n\t\t\t// is. This results in slightly different, but I think correct behaviour\n\t\t\tif ( scrollX && scrollXInner ) {\n\t\t\t\ttmpTable.width( scrollXInner );\n\t\t\t}\n\t\t\telse if ( scrollX ) {\n\t\t\t\ttmpTable.css( 'width', 'auto' );\n\t\t\t\ttmpTable.removeAttr('width');\n\t\n\t\t\t\t// If there is no width attribute or style, then allow the table to\n\t\t\t\t// collapse\n\t\t\t\tif ( tmpTable.width() < tableContainer.clientWidth && tableWidthAttr ) {\n\t\t\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( scrollY ) {\n\t\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t\t}\n\t\t\telse if ( tableWidthAttr ) {\n\t\t\t\ttmpTable.width( tableWidthAttr );\n\t\t\t}\n\t\n\t\t\t// Get the width of each column in the constructed table - we need to\n\t\t\t// know the inner width (so it can be assigned to the other table's\n\t\t\t// cells) and the outer width so we can calculate the full width of the\n\t\t\t// table. This is safe since DataTables requires a unique cell for each\n\t\t\t// column, but if ever a header can span multiple columns, this will\n\t\t\t// need to be modified.\n\t\t\tvar total = 0;\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tvar cell = $(headerCells[i]);\n\t\t\t\tvar border = cell.outerWidth() - cell.width();\n\t\n\t\t\t\t// Use getBounding... where possible (not IE8-) because it can give\n\t\t\t\t// sub-pixel accuracy, which we then want to round up!\n\t\t\t\tvar bounding = browser.bBounding ?\n\t\t\t\t\tMath.ceil( headerCells[i].getBoundingClientRect().width ) :\n\t\t\t\t\tcell.outerWidth();\n\t\n\t\t\t\t// Total is tracked to remove any sub-pixel errors as the outerWidth\n\t\t\t\t// of the table might not equal the total given here (IE!).\n\t\t\t\ttotal += bounding;\n\t\n\t\t\t\t// Width for each column to use\n\t\t\t\tcolumns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding - border );\n\t\t\t}\n\t\n\t\t\ttable.style.width = _fnStringToCss( total );\n\t\n\t\t\t// Finished with the table - ditch it\n\t\t\tholder.remove();\n\t\t}\n\t\n\t\t// If there is a width attr, we want to attach an event listener which\n\t\t// allows the table sizing to automatically adjust when the window is\n\t\t// resized. Use the width attr rather than CSS, since we can't know if the\n\t\t// CSS is a relative value or absolute - DOM read is always px.\n\t\tif ( tableWidthAttr ) {\n\t\t\ttable.style.width = _fnStringToCss( tableWidthAttr );\n\t\t}\n\t\n\t\tif ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {\n\t\t\tvar bindResize = function () {\n\t\t\t\t$(window).on('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {\n\t\t\t\t\t_fnAdjustColumnSizing( oSettings );\n\t\t\t\t} ) );\n\t\t\t};\n\t\n\t\t\t// IE6/7 will crash if we bind a resize event handler on page load.\n\t\t\t// To be removed in 1.11 which drops IE6/7 support\n\t\t\tif ( ie67 ) {\n\t\t\t\tsetTimeout( bindResize, 1000 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbindResize();\n\t\t\t}\n\t\n\t\t\toSettings._reszEvt = true;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Throttle the calls to a function. Arguments and context are maintained for\n\t * the throttled function\n\t *  @param {function} fn Function to be called\n\t *  @param {int} [freq=200] call frequency in mS\n\t *  @returns {function} wrapped function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnThrottle = DataTable.util.throttle;\n\t\n\t\n\t/**\n\t * Convert a set of CSS units width to pixels (e.g. 2em)\n\t *  @param {string[]} widths widths to be converted\n\t *  @param {node} parent parent to get the with for (required for relative widths) - optional\n\t *  @returns {int[]} widths in pixels\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnConvertToWidth ( widths, parent )\n\t{\n\t\tvar els = [];\n\t\tvar results = [];\n\t\n\t\t// Add the elements in a single loop so we only need to reflow once\n\t\tfor (var i=0 ; i<widths.length ; i++) {\n\t\t\tif (widths[i]) {\n\t\t\t\tels.push(\n\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t.css( 'width', _fnStringToCss( widths[i] ) )\n\t\t\t\t\t\t.appendTo( parent || document.body )\n\t\t\t\t)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tels.push(null);\n\t\t\t}\n\t\t}\n\t\n\t\t// Get the sizes (will reflow once)\n\t\tfor (var i=0 ; i<widths.length ; i++) {\n\t\t\tresults.push(els[i] ? els[i][0].offsetWidth : null);\n\t\t}\n\t\n\t\t// Tidy\n\t\t$(els).remove();\n\t\n\t\treturn results;\n\t}\n\t\n\t\n\t/**\n\t * Get the widest node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {node} widest table node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetWidestNode( settings, colIdx )\n\t{\n\t\tvar idx = _fnGetMaxLenString( settings, colIdx );\n\t\tif ( idx < 0 ) {\n\t\t\treturn null;\n\t\t}\n\t\n\t\tvar data = settings.aoData[ idx ];\n\t\treturn ! data.nTr ? // Might not have been created when deferred rendering\n\t\t\t$('<td/>').html( _fnGetCellData( settings, idx, colIdx, 'display' ) )[0] :\n\t\t\tdata.anCells[ colIdx ];\n\t}\n\t\n\t\n\t/**\n\t * Get the maximum strlen for each data column\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {string} max string length for each column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetMaxLenString( settings, colIdx )\n\t{\n\t\tvar s, max=-1, maxIdx = -1;\n\t\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\ts = _fnGetCellData( settings, i, colIdx, 'display' )+'';\n\t\t\ts = s.replace( __re_html_remove, '' );\n\t\t\ts = s.replace( /&nbsp;/g, ' ' );\n\t\n\t\t\tif ( s.length > max ) {\n\t\t\t\tmax = s.length;\n\t\t\t\tmaxIdx = i;\n\t\t\t}\n\t\t}\n\t\n\t\treturn maxIdx;\n\t}\n\t\n\t\n\t/**\n\t * Append a CSS unit (only if required) to a string\n\t *  @param {string} value to css-ify\n\t *  @returns {string} value with css unit\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnStringToCss( s )\n\t{\n\t\tif ( s === null ) {\n\t\t\treturn '0px';\n\t\t}\n\t\n\t\tif ( typeof s == 'number' ) {\n\t\t\treturn s < 0 ?\n\t\t\t\t'0px' :\n\t\t\t\ts+'px';\n\t\t}\n\t\n\t\t// Check it has a unit character already\n\t\treturn s.match(/\\d$/) ?\n\t\t\ts+'px' :\n\t\t\ts;\n\t}\n\t\n\t\n\t\n\tfunction _fnSortFlatten ( settings )\n\t{\n\t\tvar\n\t\t\ti, iLen, k, kLen,\n\t\t\taSort = [],\n\t\t\taiOrig = [],\n\t\t\taoColumns = settings.aoColumns,\n\t\t\taDataSort, iCol, sType, srcCol,\n\t\t\tfixed = settings.aaSortingFixed,\n\t\t\tfixedObj = $.isPlainObject( fixed ),\n\t\t\tnestedSort = [],\n\t\t\tadd = function ( a ) {\n\t\t\t\tif ( a.length && ! Array.isArray( a[0] ) ) {\n\t\t\t\t\t// 1D array\n\t\t\t\t\tnestedSort.push( a );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// 2D array\n\t\t\t\t\t$.merge( nestedSort, a );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t// Build the sort array, with pre-fix and post-fix options if they have been\n\t\t// specified\n\t\tif ( Array.isArray( fixed ) ) {\n\t\t\tadd( fixed );\n\t\t}\n\t\n\t\tif ( fixedObj && fixed.pre ) {\n\t\t\tadd( fixed.pre );\n\t\t}\n\t\n\t\tadd( settings.aaSorting );\n\t\n\t\tif (fixedObj && fixed.post ) {\n\t\t\tadd( fixed.post );\n\t\t}\n\t\n\t\tfor ( i=0 ; i<nestedSort.length ; i++ )\n\t\t{\n\t\t\tsrcCol = nestedSort[i][0];\n\t\t\taDataSort = aoColumns[ srcCol ].aDataSort;\n\t\n\t\t\tfor ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )\n\t\t\t{\n\t\t\t\tiCol = aDataSort[k];\n\t\t\t\tsType = aoColumns[ iCol ].sType || 'string';\n\t\n\t\t\t\tif ( nestedSort[i]._idx === undefined ) {\n\t\t\t\t\tnestedSort[i]._idx = $.inArray( nestedSort[i][1], aoColumns[iCol].asSorting );\n\t\t\t\t}\n\t\n\t\t\t\taSort.push( {\n\t\t\t\t\tsrc:       srcCol,\n\t\t\t\t\tcol:       iCol,\n\t\t\t\t\tdir:       nestedSort[i][1],\n\t\t\t\t\tindex:     nestedSort[i]._idx,\n\t\t\t\t\ttype:      sType,\n\t\t\t\t\tformatter: DataTable.ext.type.order[ sType+\"-pre\" ]\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\n\t\treturn aSort;\n\t}\n\t\n\t/**\n\t * Change the order of the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t *  @todo This really needs split up!\n\t */\n\tfunction _fnSort ( oSettings )\n\t{\n\t\tvar\n\t\t\ti, ien, iLen, j, jLen, k, kLen,\n\t\t\tsDataType, nTh,\n\t\t\taiOrig = [],\n\t\t\toExtSort = DataTable.ext.type.order,\n\t\t\taoData = oSettings.aoData,\n\t\t\taoColumns = oSettings.aoColumns,\n\t\t\taDataSort, data, iCol, sType, oSort,\n\t\t\tformatters = 0,\n\t\t\tsortCol,\n\t\t\tdisplayMaster = oSettings.aiDisplayMaster,\n\t\t\taSort;\n\t\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo Can this be moved into a 'data-ready' handler which is called when\n\t\t//   data is going to be used in the table?\n\t\t_fnColumnTypes( oSettings );\n\t\n\t\taSort = _fnSortFlatten( oSettings );\n\t\n\t\tfor ( i=0, ien=aSort.length ; i<ien ; i++ ) {\n\t\t\tsortCol = aSort[i];\n\t\n\t\t\t// Track if we can use the fast sort algorithm\n\t\t\tif ( sortCol.formatter ) {\n\t\t\t\tformatters++;\n\t\t\t}\n\t\n\t\t\t// Load the data needed for the sort, for each cell\n\t\t\t_fnSortData( oSettings, sortCol.col );\n\t\t}\n\t\n\t\t/* No sorting required if server-side or no sorting array */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )\n\t\t{\n\t\t\t// Create a value - key array of the current row positions such that we can use their\n\t\t\t// current position during the sort, if values match, in order to perform stable sorting\n\t\t\tfor ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {\n\t\t\t\taiOrig[ displayMaster[i] ] = i;\n\t\t\t}\n\t\n\t\t\t/* Do the sort - here we want multi-column sorting based on a given data source (column)\n\t\t\t * and sorting function (from oSort) in a certain direction. It's reasonably complex to\n\t\t\t * follow on it's own, but this is what we want (example two column sorting):\n\t\t\t *  fnLocalSorting = function(a,b){\n\t\t\t *    var iTest;\n\t\t\t *    iTest = oSort['string-asc']('data11', 'data12');\n\t\t\t *      if (iTest !== 0)\n\t\t\t *        return iTest;\n\t\t\t *    iTest = oSort['numeric-desc']('data21', 'data22');\n\t\t\t *    if (iTest !== 0)\n\t\t\t *      return iTest;\n\t\t\t *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );\n\t\t\t *  }\n\t\t\t * Basically we have a test for each sorting column, if the data in that column is equal,\n\t\t\t * test the next column. If all columns match, then we use a numeric sort on the row\n\t\t\t * positions in the original data array to provide a stable sort.\n\t\t\t *\n\t\t\t * Note - I know it seems excessive to have two sorting methods, but the first is around\n\t\t\t * 15% faster, so the second is only maintained for backwards compatibility with sorting\n\t\t\t * methods which do not have a pre-sort formatting function.\n\t\t\t */\n\t\t\tif ( formatters === aSort.length ) {\n\t\t\t\t// All sort types have formatting functions\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, test, sort,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\t\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\t\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\t\n\t\t\t\t\t\ttest = x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn sort.dir === 'asc' ? test : -test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Depreciated - remove in 1.11 (providing a plug-in option)\n\t\t\t\t// Not all sort types have formatting methods, so we have to call their sorting\n\t\t\t\t// methods.\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, l, test, sort, fn,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\t\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\t\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\t\n\t\t\t\t\t\tfn = oExtSort[ sort.type+\"-\"+sort.dir ] || oExtSort[ \"string-\"+sort.dir ];\n\t\t\t\t\t\ttest = fn( x, y );\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Tell the draw function that we have sorted the data */\n\t\toSettings.bSorted = true;\n\t}\n\t\n\t\n\tfunction _fnSortAria ( settings )\n\t{\n\t\tvar label;\n\t\tvar nextSort;\n\t\tvar columns = settings.aoColumns;\n\t\tvar aSort = _fnSortFlatten( settings );\n\t\tvar oAria = settings.oLanguage.oAria;\n\t\n\t\t// ARIA attributes - need to loop all columns, to update all (removing old\n\t\t// attributes as needed)\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar col = columns[i];\n\t\t\tvar asSorting = col.asSorting;\n\t\t\tvar sTitle = col.ariaTitle || col.sTitle.replace( /<.*?>/g, \"\" );\n\t\t\tvar th = col.nTh;\n\t\n\t\t\t// IE7 is throwing an error when setting these properties with jQuery's\n\t\t\t// attr() and removeAttr() methods...\n\t\t\tth.removeAttribute('aria-sort');\n\t\n\t\t\t/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */\n\t\t\tif ( col.bSortable ) {\n\t\t\t\tif ( aSort.length > 0 && aSort[0].col == i ) {\n\t\t\t\t\tth.setAttribute('aria-sort', aSort[0].dir==\"asc\" ? \"ascending\" : \"descending\" );\n\t\t\t\t\tnextSort = asSorting[ aSort[0].index+1 ] || asSorting[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnextSort = asSorting[0];\n\t\t\t\t}\n\t\n\t\t\t\tlabel = sTitle + ( nextSort === \"asc\" ?\n\t\t\t\t\toAria.sSortAscending :\n\t\t\t\t\toAria.sSortDescending\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlabel = sTitle;\n\t\t\t}\n\t\n\t\t\tth.setAttribute('aria-label', label);\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Function to run on user sort request\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {boolean} [append=false] Append the requested sort to the existing\n\t *    sort if true (i.e. multi-column sort)\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortListener ( settings, colIdx, append, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\tvar sorting = settings.aaSorting;\n\t\tvar asSorting = col.asSorting;\n\t\tvar nextSortIdx;\n\t\tvar next = function ( a, overflow ) {\n\t\t\tvar idx = a._idx;\n\t\t\tif ( idx === undefined ) {\n\t\t\t\tidx = $.inArray( a[1], asSorting );\n\t\t\t}\n\t\n\t\t\treturn idx+1 < asSorting.length ?\n\t\t\t\tidx+1 :\n\t\t\t\toverflow ?\n\t\t\t\t\tnull :\n\t\t\t\t\t0;\n\t\t};\n\t\n\t\t// Convert to 2D array if needed\n\t\tif ( typeof sorting[0] === 'number' ) {\n\t\t\tsorting = settings.aaSorting = [ sorting ];\n\t\t}\n\t\n\t\t// If appending the sort then we are multi-column sorting\n\t\tif ( append && settings.oFeatures.bSortMulti ) {\n\t\t\t// Are we already doing some kind of sort on this column?\n\t\t\tvar sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );\n\t\n\t\t\tif ( sortIdx !== -1 ) {\n\t\t\t\t// Yes, modify the sort\n\t\t\t\tnextSortIdx = next( sorting[sortIdx], true );\n\t\n\t\t\t\tif ( nextSortIdx === null && sorting.length === 1 ) {\n\t\t\t\t\tnextSortIdx = 0; // can't remove sorting completely\n\t\t\t\t}\n\t\n\t\t\t\tif ( nextSortIdx === null ) {\n\t\t\t\t\tsorting.splice( sortIdx, 1 );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsorting[sortIdx][1] = asSorting[ nextSortIdx ];\n\t\t\t\t\tsorting[sortIdx]._idx = nextSortIdx;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// No sort on this column yet\n\t\t\t\tsorting.push( [ colIdx, asSorting[0], 0 ] );\n\t\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( sorting.length && sorting[0][0] == colIdx ) {\n\t\t\t// Single column - already sorting on this column, modify the sort\n\t\t\tnextSortIdx = next( sorting[0] );\n\t\n\t\t\tsorting.length = 1;\n\t\t\tsorting[0][1] = asSorting[ nextSortIdx ];\n\t\t\tsorting[0]._idx = nextSortIdx;\n\t\t}\n\t\telse {\n\t\t\t// Single column - sort only on this column\n\t\t\tsorting.length = 0;\n\t\t\tsorting.push( [ colIdx, asSorting[0] ] );\n\t\t\tsorting[0]._idx = 0;\n\t\t}\n\t\n\t\t// Run the sort by calling a full redraw\n\t\t_fnReDraw( settings );\n\t\n\t\t// callback used for async user interaction\n\t\tif ( typeof callback == 'function' ) {\n\t\t\tcallback( settings );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Attach a sort handler (click) to a node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortAttachListener ( settings, attachTo, colIdx, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\n\t\t_fnBindAction( attachTo, {}, function (e) {\n\t\t\t/* If the column is not sortable - don't to anything */\n\t\t\tif ( col.bSortable === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If processing is enabled use a timeout to allow the processing\n\t\t\t// display to be shown - otherwise to it synchronously\n\t\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\n\t\t\t\t\t// In server-side processing, the draw callback will remove the\n\t\t\t\t\t// processing display\n\t\t\t\t\tif ( _fnDataSource( settings ) !== 'ssp' ) {\n\t\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t}\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Set the sorting classes on table's body, Note: it is safe to call this function\n\t * when bSort and bSortClasses are false\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortingClasses( settings )\n\t{\n\t\tvar oldSort = settings.aLastSort;\n\t\tvar sortClass = settings.oClasses.sSortColumn;\n\t\tvar sort = _fnSortFlatten( settings );\n\t\tvar features = settings.oFeatures;\n\t\tvar i, ien, colIdx;\n\t\n\t\tif ( features.bSort && features.bSortClasses ) {\n\t\t\t// Remove old sorting classes\n\t\t\tfor ( i=0, ien=oldSort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = oldSort[i].src;\n\t\n\t\t\t\t// Remove column sorting\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.removeClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\n\t\t\t// Add new column sorting\n\t\t\tfor ( i=0, ien=sort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = sort[i].src;\n\t\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.addClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\t}\n\t\n\t\tsettings.aLastSort = sort;\n\t}\n\t\n\t\n\t// Get the data to sort a column, be it from cache, fresh (populating the\n\t// cache), or from a sort formatter\n\tfunction _fnSortData( settings, idx )\n\t{\n\t\t// Custom sorting function - provided by the sort data type\n\t\tvar column = settings.aoColumns[ idx ];\n\t\tvar customSort = DataTable.ext.order[ column.sSortDataType ];\n\t\tvar customData;\n\t\n\t\tif ( customSort ) {\n\t\t\tcustomData = customSort.call( settings.oInstance, settings, idx,\n\t\t\t\t_fnColumnIndexToVisible( settings, idx )\n\t\t\t);\n\t\t}\n\t\n\t\t// Use / populate cache\n\t\tvar row, cellData;\n\t\tvar formatter = DataTable.ext.type.order[ column.sType+\"-pre\" ];\n\t\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\t\n\t\t\tif ( ! row._aSortData ) {\n\t\t\t\trow._aSortData = [];\n\t\t\t}\n\t\n\t\t\tif ( ! row._aSortData[idx] || customSort ) {\n\t\t\t\tcellData = customSort ?\n\t\t\t\t\tcustomData[i] : // If there was a custom sort function, use data from there\n\t\t\t\t\t_fnGetCellData( settings, i, idx, 'sort' );\n\t\n\t\t\t\trow._aSortData[ idx ] = formatter ?\n\t\t\t\t\tformatter( cellData ) :\n\t\t\t\t\tcellData;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t\n\t/**\n\t * Save the state of a table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSaveState ( settings )\n\t{\n\t\tif (settings._bLoadingState) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Store the interesting variables */\n\t\tvar state = {\n\t\t\ttime:    +new Date(),\n\t\t\tstart:   settings._iDisplayStart,\n\t\t\tlength:  settings._iDisplayLength,\n\t\t\torder:   $.extend( true, [], settings.aaSorting ),\n\t\t\tsearch:  _fnSearchToCamel( settings.oPreviousSearch ),\n\t\t\tcolumns: $.map( settings.aoColumns, function ( col, i ) {\n\t\t\t\treturn {\n\t\t\t\t\tvisible: col.bVisible,\n\t\t\t\t\tsearch: _fnSearchToCamel( settings.aoPreSearchCols[i] )\n\t\t\t\t};\n\t\t\t} )\n\t\t};\n\t\n\t\tsettings.oSavedState = state;\n\t\t_fnCallbackFire( settings, \"aoStateSaveParams\", 'stateSaveParams', [settings, state] );\n\t\t\n\t\tif ( settings.oFeatures.bStateSave && !settings.bDestroying )\n\t\t{\n\t\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, state );\n\t\t}\t\n\t}\n\t\n\t\n\t/**\n\t * Attempt to load a saved table state\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oInit DataTables init object so we can override settings\n\t *  @param {function} callback Callback to execute when the state has been loaded\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLoadState ( settings, oInit, callback )\n\t{\n\t\tif ( ! settings.oFeatures.bStateSave ) {\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar loaded = function(state) {\n\t\t\t_fnImplementState(settings, state, callback);\n\t\t}\n\t\n\t\tvar state = settings.fnStateLoadCallback.call( settings.oInstance, settings, loaded );\n\t\n\t\tif ( state !== undefined ) {\n\t\t\t_fnImplementState( settings, state, callback );\n\t\t}\n\t\t// otherwise, wait for the loaded callback to be executed\n\t\n\t\treturn true;\n\t}\n\t\n\tfunction _fnImplementState ( settings, s, callback) {\n\t\tvar i, ien;\n\t\tvar columns = settings.aoColumns;\n\t\tsettings._bLoadingState = true;\n\t\n\t\t// When StateRestore was introduced the state could now be implemented at any time\n\t\t// Not just initialisation. To do this an api instance is required in some places\n\t\tvar api = settings._bInitComplete ? new DataTable.Api(settings) : null;\n\t\n\t\tif ( ! s || ! s.time ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Allow custom and plug-in manipulation functions to alter the saved data set and\n\t\t// cancelling of loading by returning false\n\t\tvar abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, s] );\n\t\tif ( $.inArray( false, abStateLoad ) !== -1 ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Reject old data\n\t\tvar duration = settings.iStateDuration;\n\t\tif ( duration > 0 && s.time < +new Date() - (duration*1000) ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Number of columns have changed - all bets are off, no restore of settings\n\t\tif ( s.columns && columns.length !== s.columns.length ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Store the saved state so it might be accessed at any time\n\t\tsettings.oLoadedState = $.extend( true, {}, s );\n\t\n\t\t// Page Length\n\t\tif ( s.length !== undefined ) {\n\t\t\t// If already initialised just set the value directly so that the select element is also updated\n\t\t\tif (api) {\n\t\t\t\tapi.page.len(s.length)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsettings._iDisplayLength   = s.length;\n\t\t\t}\n\t\t}\n\t\n\t\t// Restore key features - todo - for 1.11 this needs to be done by\n\t\t// subscribed events\n\t\tif ( s.start !== undefined ) {\n\t\t\tif(api === null) {\n\t\t\t\tsettings._iDisplayStart    = s.start;\n\t\t\t\tsettings.iInitDisplayStart = s.start;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnPageChange(settings, s.start/settings._iDisplayLength);\n\t\t\t}\n\t\t}\n\t\n\t\t// Order\n\t\tif ( s.order !== undefined ) {\n\t\t\tsettings.aaSorting = [];\n\t\t\t$.each( s.order, function ( i, col ) {\n\t\t\t\tsettings.aaSorting.push( col[0] >= columns.length ?\n\t\t\t\t\t[ 0, col[1] ] :\n\t\t\t\t\tcol\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t\n\t\t// Search\n\t\tif ( s.search !== undefined ) {\n\t\t\t$.extend( settings.oPreviousSearch, _fnSearchToHung( s.search ) );\n\t\t}\n\t\n\t\t// Columns\n\t\tif ( s.columns ) {\n\t\t\tfor ( i=0, ien=s.columns.length ; i<ien ; i++ ) {\n\t\t\t\tvar col = s.columns[i];\n\t\n\t\t\t\t// Visibility\n\t\t\t\tif ( col.visible !== undefined ) {\n\t\t\t\t\t// If the api is defined, the table has been initialised so we need to use it rather than internal settings\n\t\t\t\t\tif (api) {\n\t\t\t\t\t\t// Don't redraw the columns on every iteration of this loop, we will do this at the end instead\n\t\t\t\t\t\tapi.column(i).visible(col.visible, false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcolumns[i].bVisible = col.visible;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Search\n\t\t\t\tif ( col.search !== undefined ) {\n\t\t\t\t\t$.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// If the api is defined then we need to adjust the columns once the visibility has been changed\n\t\t\tif (api) {\n\t\t\t\tapi.columns.adjust();\n\t\t\t}\n\t\t}\n\t\n\t\tsettings._bLoadingState = false;\n\t\t_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, s] );\n\t\tcallback();\n\t};\n\t\n\t\n\t/**\n\t * Return the settings object for a particular table\n\t *  @param {node} table table we are using as a dataTable\n\t *  @returns {object} Settings object - or null if not found\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSettingsFromNode ( table )\n\t{\n\t\tvar settings = DataTable.settings;\n\t\tvar idx = $.inArray( table, _pluck( settings, 'nTable' ) );\n\t\n\t\treturn idx !== -1 ?\n\t\t\tsettings[ idx ] :\n\t\t\tnull;\n\t}\n\t\n\t\n\t/**\n\t * Log an error message\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} level log error messages, or display them to the user\n\t *  @param {string} msg error message\n\t *  @param {int} tn Technical note id to get more information about the error.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLog( settings, level, msg, tn )\n\t{\n\t\tmsg = 'DataTables warning: '+\n\t\t\t(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;\n\t\n\t\tif ( tn ) {\n\t\t\tmsg += '. For more information about this error, please see '+\n\t\t\t'https://datatables.net/tn/'+tn;\n\t\t}\n\t\n\t\tif ( ! level  ) {\n\t\t\t// Backwards compatibility pre 1.10\n\t\t\tvar ext = DataTable.ext;\n\t\t\tvar type = ext.sErrMode || ext.errMode;\n\t\n\t\t\tif ( settings ) {\n\t\t\t\t_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );\n\t\t\t}\n\t\n\t\t\tif ( type == 'alert' ) {\n\t\t\t\talert( msg );\n\t\t\t}\n\t\t\telse if ( type == 'throw' ) {\n\t\t\t\tthrow new Error(msg);\n\t\t\t}\n\t\t\telse if ( typeof type == 'function' ) {\n\t\t\t\ttype( settings, tn, msg );\n\t\t\t}\n\t\t}\n\t\telse if ( window.console && console.log ) {\n\t\t\tconsole.log( msg );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * See if a property is defined on one object, if so assign it to the other object\n\t *  @param {object} ret target object\n\t *  @param {object} src source object\n\t *  @param {string} name property\n\t *  @param {string} [mappedName] name to map too - optional, name used if not given\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnMap( ret, src, name, mappedName )\n\t{\n\t\tif ( Array.isArray( name ) ) {\n\t\t\t$.each( name, function (i, val) {\n\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t_fnMap( ret, src, val[0], val[1] );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_fnMap( ret, src, val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( mappedName === undefined ) {\n\t\t\tmappedName = name;\n\t\t}\n\t\n\t\tif ( src[name] !== undefined ) {\n\t\t\tret[mappedName] = src[name];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Extend objects - very similar to jQuery.extend, but deep copy objects, and\n\t * shallow copy arrays. The reason we need to do this, is that we don't want to\n\t * deep copy array init values (such as aaSorting) since the dev wouldn't be\n\t * able to override them, but we do want to deep copy arrays.\n\t *  @param {object} out Object to extend\n\t *  @param {object} extender Object from which the properties will be applied to\n\t *      out\n\t *  @param {boolean} breakRefs If true, then arrays will be sliced to take an\n\t *      independent copy with the exception of the `data` or `aaData` parameters\n\t *      if they are present. This is so you can pass in a collection to\n\t *      DataTables and have that used as your data source without breaking the\n\t *      references\n\t *  @returns {object} out Reference, just for convenience - out === the return.\n\t *  @memberof DataTable#oApi\n\t *  @todo This doesn't take account of arrays inside the deep copied objects.\n\t */\n\tfunction _fnExtend( out, extender, breakRefs )\n\t{\n\t\tvar val;\n\t\n\t\tfor ( var prop in extender ) {\n\t\t\tif ( extender.hasOwnProperty(prop) ) {\n\t\t\t\tval = extender[prop];\n\t\n\t\t\t\tif ( $.isPlainObject( val ) ) {\n\t\t\t\t\tif ( ! $.isPlainObject( out[prop] ) ) {\n\t\t\t\t\t\tout[prop] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, out[prop], val );\n\t\t\t\t}\n\t\t\t\telse if ( breakRefs && prop !== 'data' && prop !== 'aaData' && Array.isArray(val) ) {\n\t\t\t\t\tout[prop] = val.slice();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tout[prop] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t}\n\t\n\t\n\t/**\n\t * Bind an event handers to allow a click or return key to activate the callback.\n\t * This is good for accessibility since a return on the keyboard will have the\n\t * same effect as a click, if the element has focus.\n\t *  @param {element} n Element to bind the action to\n\t *  @param {object} oData Data object to pass to the triggered function\n\t *  @param {function} fn Callback function for when the event is triggered\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBindAction( n, oData, fn )\n\t{\n\t\t$(n)\n\t\t\t.on( 'click.DT', oData, function (e) {\n\t\t\t\t\t$(n).trigger('blur'); // Remove focus outline for mouse users\n\t\t\t\t\tfn(e);\n\t\t\t\t} )\n\t\t\t.on( 'keypress.DT', oData, function (e){\n\t\t\t\t\tif ( e.which === 13 ) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tfn(e);\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t.on( 'selectstart.DT', function () {\n\t\t\t\t\t/* Take the brutal approach to cancelling text selection */\n\t\t\t\t\treturn false;\n\t\t\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Register a callback function. Easily allows a callback function to be added to\n\t * an array store of callback functions that can then all be called together.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sStore Name of the array storage for the callbacks in oSettings\n\t *  @param {function} fn Function to be called back\n\t *  @param {string} sName Identifying name for the callback (i.e. a label)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackReg( oSettings, sStore, fn, sName )\n\t{\n\t\tif ( fn )\n\t\t{\n\t\t\toSettings[sStore].push( {\n\t\t\t\t\"fn\": fn,\n\t\t\t\t\"sName\": sName\n\t\t\t} );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Fire callback functions and trigger events. Note that the loop over the\n\t * callback array store is done backwards! Further note that you do not want to\n\t * fire off triggers in time sensitive applications (for example cell creation)\n\t * as its slow.\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} callbackArr Name of the array storage for the callbacks in\n\t *      oSettings\n\t *  @param {string} eventName Name of the jQuery custom event to trigger. If\n\t *      null no trigger is fired\n\t *  @param {array} args Array of arguments to pass to the callback function /\n\t *      trigger\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackFire( settings, callbackArr, eventName, args )\n\t{\n\t\tvar ret = [];\n\t\n\t\tif ( callbackArr ) {\n\t\t\tret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {\n\t\t\t\treturn val.fn.apply( settings.oInstance, args );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( eventName !== null ) {\n\t\t\tvar e = $.Event( eventName+'.dt' );\n\t\t\tvar table = $(settings.nTable);\n\t\n\t\t\ttable.trigger( e, args );\n\t\n\t\t\t// If not yet attached to the document, trigger the event\n\t\t\t// on the body directly to sort of simulate the bubble\n\t\t\tif (table.parents('body').length === 0) {\n\t\t\t\t$('body').trigger( e, args );\n\t\t\t}\n\t\n\t\t\tret.push( e.result );\n\t\t}\n\t\n\t\treturn ret;\n\t}\n\t\n\t\n\tfunction _fnLengthOverflow ( settings )\n\t{\n\t\tvar\n\t\t\tstart = settings._iDisplayStart,\n\t\t\tend = settings.fnDisplayEnd(),\n\t\t\tlen = settings._iDisplayLength;\n\t\n\t\t/* If we have space to show extra rows (backing up from the end point - then do so */\n\t\tif ( start >= end )\n\t\t{\n\t\t\tstart = end - len;\n\t\t}\n\t\n\t\t// Keep the start record on the current page\n\t\tstart -= (start % len);\n\t\n\t\tif ( len === -1 || start < 0 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\n\t\tsettings._iDisplayStart = start;\n\t}\n\t\n\t\n\tfunction _fnRenderer( settings, type )\n\t{\n\t\tvar renderer = settings.renderer;\n\t\tvar host = DataTable.ext.renderer[type];\n\t\n\t\tif ( $.isPlainObject( renderer ) && renderer[type] ) {\n\t\t\t// Specific renderer for this type. If available use it, otherwise use\n\t\t\t// the default.\n\t\t\treturn host[renderer[type]] || host._;\n\t\t}\n\t\telse if ( typeof renderer === 'string' ) {\n\t\t\t// Common renderer - if there is one available for this type use it,\n\t\t\t// otherwise use the default\n\t\t\treturn host[renderer] || host._;\n\t\t}\n\t\n\t\t// Use the default\n\t\treturn host._;\n\t}\n\t\n\t\n\t/**\n\t * Detect the data source being used for the table. Used to simplify the code\n\t * a little (ajax) and to make it compress a little smaller.\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {string} Data source\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDataSource ( settings )\n\t{\n\t\tif ( settings.oFeatures.bServerSide ) {\n\t\t\treturn 'ssp';\n\t\t}\n\t\telse if ( settings.ajax || settings.sAjaxSource ) {\n\t\t\treturn 'ajax';\n\t\t}\n\t\treturn 'dom';\n\t}\n\t\n\t\n\t\n\t\n\t/**\n\t * Computed structure of the DataTables API, defined by the options passed to\n\t * `DataTable.Api.register()` when building the API.\n\t *\n\t * The structure is built in order to speed creation and extension of the Api\n\t * objects since the extensions are effectively pre-parsed.\n\t *\n\t * The array is an array of objects with the following structure, where this\n\t * base array represents the Api prototype base:\n\t *\n\t *     [\n\t *       {\n\t *         name:      'data'                -- string   - Property name\n\t *         val:       function () {},       -- function - Api method (or undefined if just an object\n\t *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t *       },\n\t *       {\n\t *         name:     'row'\n\t *         val:       {},\n\t *         methodExt: [ ... ],\n\t *         propExt:   [\n\t *           {\n\t *             name:      'data'\n\t *             val:       function () {},\n\t *             methodExt: [ ... ],\n\t *             propExt:   [ ... ]\n\t *           },\n\t *           ...\n\t *         ]\n\t *       }\n\t *     ]\n\t *\n\t * @type {Array}\n\t * @ignore\n\t */\n\tvar __apiStruct = [];\n\t\n\t\n\t/**\n\t * `Array.prototype` reference.\n\t *\n\t * @type object\n\t * @ignore\n\t */\n\tvar __arrayProto = Array.prototype;\n\t\n\t\n\t/**\n\t * Abstraction for `context` parameter of the `Api` constructor to allow it to\n\t * take several different forms for ease of use.\n\t *\n\t * Each of the input parameter types will be converted to a DataTables settings\n\t * object where possible.\n\t *\n\t * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one\n\t *   of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t *   * `DataTables.Api` - API instance\n\t * @return {array|null} Matching DataTables settings objects. `null` or\n\t *   `undefined` is returned if no matching DataTable is found.\n\t * @ignore\n\t */\n\tvar _toSettings = function ( mixed )\n\t{\n\t\tvar idx, jq;\n\t\tvar settings = DataTable.settings;\n\t\tvar tables = $.map( settings, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\t\n\t\tif ( ! mixed ) {\n\t\t\treturn [];\n\t\t}\n\t\telse if ( mixed.nTable && mixed.oApi ) {\n\t\t\t// DataTables settings object\n\t\t\treturn [ mixed ];\n\t\t}\n\t\telse if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {\n\t\t\t// Table node\n\t\t\tidx = $.inArray( mixed, tables );\n\t\t\treturn idx !== -1 ? [ settings[idx] ] : null;\n\t\t}\n\t\telse if ( mixed && typeof mixed.settings === 'function' ) {\n\t\t\treturn mixed.settings().toArray();\n\t\t}\n\t\telse if ( typeof mixed === 'string' ) {\n\t\t\t// jQuery selector\n\t\t\tjq = $(mixed);\n\t\t}\n\t\telse if ( mixed instanceof $ ) {\n\t\t\t// jQuery object (also DataTables instance)\n\t\t\tjq = mixed;\n\t\t}\n\t\n\t\tif ( jq ) {\n\t\t\treturn jq.map( function(i) {\n\t\t\t\tidx = $.inArray( this, tables );\n\t\t\t\treturn idx !== -1 ? settings[idx] : null;\n\t\t\t} ).toArray();\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * DataTables API class - used to control and interface with  one or more\n\t * DataTables enhanced tables.\n\t *\n\t * The API class is heavily based on jQuery, presenting a chainable interface\n\t * that you can use to interact with tables. Each instance of the API class has\n\t * a \"context\" - i.e. the tables that it will operate on. This could be a single\n\t * table, all tables on a page or a sub-set thereof.\n\t *\n\t * Additionally the API is designed to allow you to easily work with the data in\n\t * the tables, retrieving and manipulating it as required. This is done by\n\t * presenting the API class as an array like interface. The contents of the\n\t * array depend upon the actions requested by each method (for example\n\t * `rows().nodes()` will return an array of nodes, while `rows().data()` will\n\t * return an array of objects or arrays depending upon your table's\n\t * configuration). The API object has a number of array like methods (`push`,\n\t * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,\n\t * `unique` etc) to assist your working with the data held in a table.\n\t *\n\t * Most methods (those which return an Api instance) are chainable, which means\n\t * the return from a method call also has all of the methods available that the\n\t * top level object had. For example, these two calls are equivalent:\n\t *\n\t *     // Not chained\n\t *     api.row.add( {...} );\n\t *     api.draw();\n\t *\n\t *     // Chained\n\t *     api.row.add( {...} ).draw();\n\t *\n\t * @class DataTable.Api\n\t * @param {array|object|string|jQuery} context DataTable identifier. This is\n\t *   used to define which DataTables enhanced tables this API will operate on.\n\t *   Can be one of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t * @param {array} [data] Data to initialise the Api instance with.\n\t *\n\t * @example\n\t *   // Direct initialisation during DataTables construction\n\t *   var api = $('#example').DataTable();\n\t *\n\t * @example\n\t *   // Initialisation using a DataTables jQuery object\n\t *   var api = $('#example').dataTable().api();\n\t *\n\t * @example\n\t *   // Initialisation as a constructor\n\t *   var api = new $.fn.DataTable.Api( 'table.dataTable' );\n\t */\n\t_Api = function ( context, data )\n\t{\n\t\tif ( ! (this instanceof _Api) ) {\n\t\t\treturn new _Api( context, data );\n\t\t}\n\t\n\t\tvar settings = [];\n\t\tvar ctxSettings = function ( o ) {\n\t\t\tvar a = _toSettings( o );\n\t\t\tif ( a ) {\n\t\t\t\tsettings.push.apply( settings, a );\n\t\t\t}\n\t\t};\n\t\n\t\tif ( Array.isArray( context ) ) {\n\t\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tctxSettings( context[i] );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tctxSettings( context );\n\t\t}\n\t\n\t\t// Remove duplicates\n\t\tthis.context = _unique( settings );\n\t\n\t\t// Initial data\n\t\tif ( data ) {\n\t\t\t$.merge( this, data );\n\t\t}\n\t\n\t\t// selector\n\t\tthis.selector = {\n\t\t\trows: null,\n\t\t\tcols: null,\n\t\t\topts: null\n\t\t};\n\t\n\t\t_Api.extend( this, this, __apiStruct );\n\t};\n\t\n\tDataTable.Api = _Api;\n\t\n\t// Don't destroy the existing prototype, just extend it. Required for jQuery 2's\n\t// isPlainObject.\n\t$.extend( _Api.prototype, {\n\t\tany: function ()\n\t\t{\n\t\t\treturn this.count() !== 0;\n\t\t},\n\t\n\t\n\t\tconcat:  __arrayProto.concat,\n\t\n\t\n\t\tcontext: [], // array of table settings objects\n\t\n\t\n\t\tcount: function ()\n\t\t{\n\t\t\treturn this.flatten().length;\n\t\t},\n\t\n\t\n\t\teach: function ( fn )\n\t\t{\n\t\t\tfor ( var i=0, ien=this.length ; i<ien; i++ ) {\n\t\t\t\tfn.call( this, this[i], i, this );\n\t\t\t}\n\t\n\t\t\treturn this;\n\t\t},\n\t\n\t\n\t\teq: function ( idx )\n\t\t{\n\t\t\tvar ctx = this.context;\n\t\n\t\t\treturn ctx.length > idx ?\n\t\t\t\tnew _Api( ctx[idx], this[idx] ) :\n\t\t\t\tnull;\n\t\t},\n\t\n\t\n\t\tfilter: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\t\n\t\t\tif ( __arrayProto.filter ) {\n\t\t\t\ta = __arrayProto.filter.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( fn.call( this, this[i], i, this ) ) {\n\t\t\t\t\t\ta.push( this[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\n\t\tflatten: function ()\n\t\t{\n\t\t\tvar a = [];\n\t\t\treturn new _Api( this.context, a.concat.apply( a, this.toArray() ) );\n\t\t},\n\t\n\t\n\t\tjoin:    __arrayProto.join,\n\t\n\t\n\t\tindexOf: __arrayProto.indexOf || function (obj, start)\n\t\t{\n\t\t\tfor ( var i=(start || 0), ien=this.length ; i<ien ; i++ ) {\n\t\t\t\tif ( this[i] === obj ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\t\n\t\titerator: function ( flatten, type, fn, alwaysNew ) {\n\t\t\tvar\n\t\t\t\ta = [], ret,\n\t\t\t\ti, ien, j, jen,\n\t\t\t\tcontext = this.context,\n\t\t\t\trows, items, item,\n\t\t\t\tselector = this.selector;\n\t\n\t\t\t// Argument shifting\n\t\t\tif ( typeof flatten === 'string' ) {\n\t\t\t\talwaysNew = fn;\n\t\t\t\tfn = type;\n\t\t\t\ttype = flatten;\n\t\t\t\tflatten = false;\n\t\t\t}\n\t\n\t\t\tfor ( i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tvar apiInst = new _Api( context[i] );\n\t\n\t\t\t\tif ( type === 'table' ) {\n\t\t\t\t\tret = fn.call( apiInst, context[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'columns' || type === 'rows' ) {\n\t\t\t\t\t// this has same length as context - one entry for each table\n\t\t\t\t\tret = fn.call( apiInst, context[i], this[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {\n\t\t\t\t\t// columns and rows share the same structure.\n\t\t\t\t\t// 'this' is an array of column indexes for each context\n\t\t\t\t\titems = this[i];\n\t\n\t\t\t\t\tif ( type === 'column-rows' ) {\n\t\t\t\t\t\trows = _selector_row_indexes( context[i], selector.opts );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfor ( j=0, jen=items.length ; j<jen ; j++ ) {\n\t\t\t\t\t\titem = items[j];\n\t\n\t\t\t\t\t\tif ( type === 'cell' ) {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item.row, item.column, i, j );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item, i, j, rows );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( a.length || alwaysNew ) {\n\t\t\t\tvar api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );\n\t\t\t\tvar apiSelector = api.selector;\n\t\t\t\tapiSelector.rows = selector.rows;\n\t\t\t\tapiSelector.cols = selector.cols;\n\t\t\t\tapiSelector.opts = selector.opts;\n\t\t\t\treturn api;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\n\t\n\t\tlastIndexOf: __arrayProto.lastIndexOf || function (obj, start)\n\t\t{\n\t\t\t// Bit cheeky...\n\t\t\treturn this.indexOf.apply( this.toArray.reverse(), arguments );\n\t\t},\n\t\n\t\n\t\tlength:  0,\n\t\n\t\n\t\tmap: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\t\n\t\t\tif ( __arrayProto.map ) {\n\t\t\t\ta = __arrayProto.map.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\ta.push( fn.call( this, this[i], i ) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\n\t\tpluck: function ( prop )\n\t\t{\n\t\t\tvar fn = DataTable.util.get(prop);\n\t\n\t\t\treturn this.map( function ( el ) {\n\t\t\t\treturn fn(el);\n\t\t\t} );\n\t\t},\n\t\n\t\tpop:     __arrayProto.pop,\n\t\n\t\n\t\tpush:    __arrayProto.push,\n\t\n\t\n\t\t// Does not return an API instance\n\t\treduce: __arrayProto.reduce || function ( fn, init )\n\t\t{\n\t\t\treturn _fnReduce( this, fn, init, 0, this.length, 1 );\n\t\t},\n\t\n\t\n\t\treduceRight: __arrayProto.reduceRight || function ( fn, init )\n\t\t{\n\t\t\treturn _fnReduce( this, fn, init, this.length-1, -1, -1 );\n\t\t},\n\t\n\t\n\t\treverse: __arrayProto.reverse,\n\t\n\t\n\t\t// Object with rows, columns and opts\n\t\tselector: null,\n\t\n\t\n\t\tshift:   __arrayProto.shift,\n\t\n\t\n\t\tslice: function () {\n\t\t\treturn new _Api( this.context, this );\n\t\t},\n\t\n\t\n\t\tsort:    __arrayProto.sort, // ? name - order?\n\t\n\t\n\t\tsplice:  __arrayProto.splice,\n\t\n\t\n\t\ttoArray: function ()\n\t\t{\n\t\t\treturn __arrayProto.slice.call( this );\n\t\t},\n\t\n\t\n\t\tto$: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\n\t\ttoJQuery: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\n\t\tunique: function ()\n\t\t{\n\t\t\treturn new _Api( this.context, _unique(this) );\n\t\t},\n\t\n\t\n\t\tunshift: __arrayProto.unshift\n\t} );\n\t\n\t\n\t_Api.extend = function ( scope, obj, ext )\n\t{\n\t\t// Only extend API instances and static properties of the API\n\t\tif ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, ien,\n\t\t\tstruct,\n\t\t\tmethodScoping = function ( scope, fn, struc ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar ret = fn.apply( scope, arguments );\n\t\n\t\t\t\t\t// Method extension\n\t\t\t\t\t_Api.extend( ret, ret, struc.methodExt );\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\t\t\t};\n\t\n\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\tstruct = ext[i];\n\t\n\t\t\t// Value\n\t\t\tobj[ struct.name ] = struct.type === 'function' ?\n\t\t\t\tmethodScoping( scope, struct.val, struct ) :\n\t\t\t\tstruct.type === 'object' ?\n\t\t\t\t\t{} :\n\t\t\t\t\tstruct.val;\n\t\n\t\t\tobj[ struct.name ].__dt_wrapper = true;\n\t\n\t\t\t// Property extension\n\t\t\t_Api.extend( scope, obj[ struct.name ], struct.propExt );\n\t\t}\n\t};\n\t\n\t\n\t// @todo - Is there need for an augment function?\n\t// _Api.augment = function ( inst, name )\n\t// {\n\t// \t// Find src object in the structure from the name\n\t// \tvar parts = name.split('.');\n\t\n\t// \t_Api.extend( inst, obj );\n\t// };\n\t\n\t\n\t//     [\n\t//       {\n\t//         name:      'data'                -- string   - Property name\n\t//         val:       function () {},       -- function - Api method (or undefined if just an object\n\t//         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t//         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t//       },\n\t//       {\n\t//         name:     'row'\n\t//         val:       {},\n\t//         methodExt: [ ... ],\n\t//         propExt:   [\n\t//           {\n\t//             name:      'data'\n\t//             val:       function () {},\n\t//             methodExt: [ ... ],\n\t//             propExt:   [ ... ]\n\t//           },\n\t//           ...\n\t//         ]\n\t//       }\n\t//     ]\n\t\n\t_Api.register = _api_register = function ( name, val )\n\t{\n\t\tif ( Array.isArray( name ) ) {\n\t\t\tfor ( var j=0, jen=name.length ; j<jen ; j++ ) {\n\t\t\t\t_Api.register( name[j], val );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, ien,\n\t\t\their = name.split('.'),\n\t\t\tstruct = __apiStruct,\n\t\t\tkey, method;\n\t\n\t\tvar find = function ( src, name ) {\n\t\t\tfor ( var i=0, ien=src.length ; i<ien ; i++ ) {\n\t\t\t\tif ( src[i].name === name ) {\n\t\t\t\t\treturn src[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\n\t\tfor ( i=0, ien=heir.length ; i<ien ; i++ ) {\n\t\t\tmethod = heir[i].indexOf('()') !== -1;\n\t\t\tkey = method ?\n\t\t\t\their[i].replace('()', '') :\n\t\t\t\their[i];\n\t\n\t\t\tvar src = find( struct, key );\n\t\t\tif ( ! src ) {\n\t\t\t\tsrc = {\n\t\t\t\t\tname:      key,\n\t\t\t\t\tval:       {},\n\t\t\t\t\tmethodExt: [],\n\t\t\t\t\tpropExt:   [],\n\t\t\t\t\ttype:      'object'\n\t\t\t\t};\n\t\t\t\tstruct.push( src );\n\t\t\t}\n\t\n\t\t\tif ( i === ien-1 ) {\n\t\t\t\tsrc.val = val;\n\t\t\t\tsrc.type = typeof val === 'function' ?\n\t\t\t\t\t'function' :\n\t\t\t\t\t$.isPlainObject( val ) ?\n\t\t\t\t\t\t'object' :\n\t\t\t\t\t\t'other';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstruct = method ?\n\t\t\t\t\tsrc.methodExt :\n\t\t\t\t\tsrc.propExt;\n\t\t\t}\n\t\t}\n\t};\n\t\n\t_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {\n\t\t_Api.register( pluralName, val );\n\t\n\t\t_Api.register( singularName, function () {\n\t\t\tvar ret = val.apply( this, arguments );\n\t\n\t\t\tif ( ret === this ) {\n\t\t\t\t// Returned item is the API instance that was passed in, return it\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\telse if ( ret instanceof _Api ) {\n\t\t\t\t// New API instance returned, want the value from the first item\n\t\t\t\t// in the returned array for the singular result.\n\t\t\t\treturn ret.length ?\n\t\t\t\t\tArray.isArray( ret[0] ) ?\n\t\t\t\t\t\tnew _Api( ret.context, ret[0] ) : // Array results are 'enhanced'\n\t\t\t\t\t\tret[0] :\n\t\t\t\t\tundefined;\n\t\t\t}\n\t\n\t\t\t// Non-API return - just fire it back\n\t\t\treturn ret;\n\t\t} );\n\t};\n\t\n\t\n\t/**\n\t * Selector for HTML tables. Apply the given selector to the give array of\n\t * DataTables settings objects.\n\t *\n\t * @param {string|integer} [selector] jQuery selector string or integer\n\t * @param  {array} Array of DataTables settings objects to be filtered\n\t * @return {array}\n\t * @ignore\n\t */\n\tvar __table_selector = function ( selector, a )\n\t{\n\t\tif ( Array.isArray(selector) ) {\n\t\t\treturn $.map( selector, function (item) {\n\t\t\t\treturn __table_selector(item, a);\n\t\t\t} );\n\t\t}\n\t\n\t\t// Integer is used to pick out a table by index\n\t\tif ( typeof selector === 'number' ) {\n\t\t\treturn [ a[ selector ] ];\n\t\t}\n\t\n\t\t// Perform a jQuery selector on the table nodes\n\t\tvar nodes = $.map( a, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\t\n\t\treturn $(nodes)\n\t\t\t.filter( selector )\n\t\t\t.map( function (i) {\n\t\t\t\t// Need to translate back from the table node to the settings\n\t\t\t\tvar idx = $.inArray( this, nodes );\n\t\t\t\treturn a[ idx ];\n\t\t\t} )\n\t\t\t.toArray();\n\t};\n\t\n\t\n\t\n\t/**\n\t * Context selector for the API's context (i.e. the tables the API instance\n\t * refers to.\n\t *\n\t * @name    DataTable.Api#tables\n\t * @param {string|integer} [selector] Selector to pick which tables the iterator\n\t *   should operate on. If not given, all tables in the current context are\n\t *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to\n\t *   select multiple tables or as an integer to select a single table.\n\t * @returns {DataTable.Api} Returns a new API instance if a selector is given.\n\t */\n\t_api_register( 'tables()', function ( selector ) {\n\t\t// A new instance is created if there was a selector specified\n\t\treturn selector !== undefined && selector !== null ?\n\t\t\tnew _Api( __table_selector( selector, this.context ) ) :\n\t\t\tthis;\n\t} );\n\t\n\t\n\t_api_register( 'table()', function ( selector ) {\n\t\tvar tables = this.tables( selector );\n\t\tvar ctx = tables.context;\n\t\n\t\t// Truncate to the first matched table\n\t\treturn ctx.length ?\n\t\t\tnew _Api( ctx[0] ) :\n\t\t\ttables;\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().nodes()', 'table().node()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTable;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().body()', 'table().body()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTBody;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().header()', 'table().header()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTHead;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().footer()', 'table().footer()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTFoot;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().containers()', 'table().container()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTableWrapper;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Redraw the tables in the current context.\n\t */\n\t_api_register( 'draw()', function ( paging ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( paging === 'page' ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( typeof paging === 'string' ) {\n\t\t\t\t\tpaging = paging === 'full-hold' ?\n\t\t\t\t\t\tfalse :\n\t\t\t\t\t\ttrue;\n\t\t\t\t}\n\t\n\t\t\t\t_fnReDraw( settings, paging===false );\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get the current page index.\n\t *\n\t * @return {integer} Current page index (zero based)\n\t *//**\n\t * Set the current page.\n\t *\n\t * Note that if you attempt to show a page which does not exist, DataTables will\n\t * not throw an error, but rather reset the paging.\n\t *\n\t * @param {integer|string} action The paging action to take. This can be one of:\n\t *  * `integer` - The page index to jump to\n\t *  * `string` - An action to take:\n\t *    * `first` - Jump to first page.\n\t *    * `next` - Jump to the next page\n\t *    * `previous` - Jump to previous page\n\t *    * `last` - Jump to the last page.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page()', function ( action ) {\n\t\tif ( action === undefined ) {\n\t\t\treturn this.page.info().page; // not an expensive call\n\t\t}\n\t\n\t\t// else, have an action to take on all tables\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnPageChange( settings, action );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Paging information for the first table in the current context.\n\t *\n\t * If you require paging information for another table, use the `table()` method\n\t * with a suitable selector.\n\t *\n\t * @return {object} Object with the following properties set:\n\t *  * `page` - Current page index (zero based - i.e. the first page is `0`)\n\t *  * `pages` - Total number of pages\n\t *  * `start` - Display index for the first record shown on the current page\n\t *  * `end` - Display index for the last record shown on the current page\n\t *  * `length` - Display length (number of records). Note that generally `start\n\t *    + length = end`, but this is not always true, for example if there are\n\t *    only 2 records to show on the final page, with a length of 10.\n\t *  * `recordsTotal` - Full data set length\n\t *  * `recordsDisplay` - Data set length once the current filtering criterion\n\t *    are applied.\n\t */\n\t_api_register( 'page.info()', function ( action ) {\n\t\tif ( this.context.length === 0 ) {\n\t\t\treturn undefined;\n\t\t}\n\t\n\t\tvar\n\t\t\tsettings   = this.context[0],\n\t\t\tstart      = settings._iDisplayStart,\n\t\t\tlen        = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,\n\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn {\n\t\t\t\"page\":           all ? 0 : Math.floor( start / len ),\n\t\t\t\"pages\":          all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\"start\":          start,\n\t\t\t\"end\":            settings.fnDisplayEnd(),\n\t\t\t\"length\":         len,\n\t\t\t\"recordsTotal\":   settings.fnRecordsTotal(),\n\t\t\t\"recordsDisplay\": visRecords,\n\t\t\t\"serverSide\":     _fnDataSource( settings ) === 'ssp'\n\t\t};\n\t} );\n\t\n\t\n\t/**\n\t * Get the current page length.\n\t *\n\t * @return {integer} Current page length. Note `-1` indicates that all records\n\t *   are to be shown.\n\t *//**\n\t * Set the current page length.\n\t *\n\t * @param {integer} Page length to set. Use `-1` to show all records.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page.len()', function ( len ) {\n\t\t// Note that we can't call this function 'length()' because `length`\n\t\t// is a Javascript property of functions which defines how many arguments\n\t\t// the function expects.\n\t\tif ( len === undefined ) {\n\t\t\treturn this.context.length !== 0 ?\n\t\t\t\tthis.context[0]._iDisplayLength :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// else, set the page length\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnLengthChange( settings, len );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\tvar __reload = function ( settings, holdPosition, callback ) {\n\t\t// Use the draw event to trigger a callback\n\t\tif ( callback ) {\n\t\t\tvar api = new _Api( settings );\n\t\n\t\t\tapi.one( 'draw', function () {\n\t\t\t\tcallback( api.ajax.json() );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t_fnReDraw( settings, holdPosition );\n\t\t}\n\t\telse {\n\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t// Cancel an existing request\n\t\t\tvar xhr = settings.jqXHR;\n\t\t\tif ( xhr && xhr.readyState !== 4 ) {\n\t\t\t\txhr.abort();\n\t\t\t}\n\t\n\t\t\t// Trigger xhr\n\t\t\t_fnBuildAjax( settings, [], function( json ) {\n\t\t\t\t_fnClearTable( settings );\n\t\n\t\t\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\t_fnAddData( settings, data[i] );\n\t\t\t\t}\n\t\n\t\t\t\t_fnReDraw( settings, holdPosition );\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Get the JSON response from the last Ajax request that DataTables made to the\n\t * server. Note that this returns the JSON from the first table in the current\n\t * context.\n\t *\n\t * @return {object} JSON received from the server.\n\t */\n\t_api_register( 'ajax.json()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].json;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Get the data submitted in the last Ajax request\n\t */\n\t_api_register( 'ajax.params()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].oAjaxData;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Reload tables from the Ajax data source. Note that this function will\n\t * automatically re-draw the table when the remote data has been loaded.\n\t *\n\t * @param {boolean} [reset=true] Reset (default) or hold the current paging\n\t *   position. A full re-sort and re-filter is performed when this method is\n\t *   called, which is why the pagination reset is the default action.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.reload()', function ( callback, resetPaging ) {\n\t\treturn this.iterator( 'table', function (settings) {\n\t\t\t__reload( settings, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Get the current Ajax URL. Note that this returns the URL from the first\n\t * table in the current context.\n\t *\n\t * @return {string} Current Ajax source URL\n\t *//**\n\t * Set the Ajax URL. Note that this will set the URL for all tables in the\n\t * current context.\n\t *\n\t * @param {string} url URL to set.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url()', function ( url ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( url === undefined ) {\n\t\t\t// get\n\t\t\tif ( ctx.length === 0 ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tctx = ctx[0];\n\t\n\t\t\treturn ctx.ajax ?\n\t\t\t\t$.isPlainObject( ctx.ajax ) ?\n\t\t\t\t\tctx.ajax.url :\n\t\t\t\t\tctx.ajax :\n\t\t\t\tctx.sAjaxSource;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( $.isPlainObject( settings.ajax ) ) {\n\t\t\t\tsettings.ajax.url = url;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsettings.ajax = url;\n\t\t\t}\n\t\t\t// No need to consider sAjaxSource here since DataTables gives priority\n\t\t\t// to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any\n\t\t\t// value of `sAjaxSource` redundant.\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Load data from the newly set Ajax URL. Note that this method is only\n\t * available when `ajax.url()` is used to set a URL. Additionally, this method\n\t * has the same effect as calling `ajax.reload()` but is provided for\n\t * convenience when setting a new URL. Like `ajax.reload()` it will\n\t * automatically redraw the table once the remote data has been loaded.\n\t *\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {\n\t\t// Same as a reload, but makes sense to present it for easy access after a\n\t\t// url change\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\t__reload( ctx, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t\n\tvar _selector_run = function ( type, selector, selectFn, settings, opts )\n\t{\n\t\tvar\n\t\t\tout = [], res,\n\t\t\ta, i, ien, j, jen,\n\t\t\tselectorType = typeof selector;\n\t\n\t\t// Can't just check for isArray here, as an API or jQuery instance might be\n\t\t// given with their array like look\n\t\tif ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {\n\t\t\tselector = [ selector ];\n\t\t}\n\t\n\t\tfor ( i=0, ien=selector.length ; i<ien ; i++ ) {\n\t\t\t// Only split on simple strings - complex expressions will be jQuery selectors\n\t\t\ta = selector[i] && selector[i].split && ! selector[i].match(/[\\[\\(:]/) ?\n\t\t\t\tselector[i].split(',') :\n\t\t\t\t[ selector[i] ];\n\t\n\t\t\tfor ( j=0, jen=a.length ; j<jen ; j++ ) {\n\t\t\t\tres = selectFn( typeof a[j] === 'string' ? (a[j]).trim() : a[j] );\n\t\n\t\t\t\tif ( res && res.length ) {\n\t\t\t\t\tout = out.concat( res );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// selector extensions\n\t\tvar ext = _ext.selector[ type ];\n\t\tif ( ext.length ) {\n\t\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\t\tout = ext[i]( settings, opts, out );\n\t\t\t}\n\t\t}\n\t\n\t\treturn _unique( out );\n\t};\n\t\n\t\n\tvar _selector_opts = function ( opts )\n\t{\n\t\tif ( ! opts ) {\n\t\t\topts = {};\n\t\t}\n\t\n\t\t// Backwards compatibility for 1.9- which used the terminology filter rather\n\t\t// than search\n\t\tif ( opts.filter && opts.search === undefined ) {\n\t\t\topts.search = opts.filter;\n\t\t}\n\t\n\t\treturn $.extend( {\n\t\t\tsearch: 'none',\n\t\t\torder: 'current',\n\t\t\tpage: 'all'\n\t\t}, opts );\n\t};\n\t\n\t\n\tvar _selector_first = function ( inst )\n\t{\n\t\t// Reduce the API instance to the first item found\n\t\tfor ( var i=0, ien=inst.length ; i<ien ; i++ ) {\n\t\t\tif ( inst[i].length > 0 ) {\n\t\t\t\t// Assign the first element to the first item in the instance\n\t\t\t\t// and truncate the instance and context\n\t\t\t\tinst[0] = inst[i];\n\t\t\t\tinst[0].length = 1;\n\t\t\t\tinst.length = 1;\n\t\t\t\tinst.context = [ inst.context[i] ];\n\t\n\t\t\t\treturn inst;\n\t\t\t}\n\t\t}\n\t\n\t\t// Not found - return an empty instance\n\t\tinst.length = 0;\n\t\treturn inst;\n\t};\n\t\n\t\n\tvar _selector_row_indexes = function ( settings, opts )\n\t{\n\t\tvar\n\t\t\ti, ien, tmp, a=[],\n\t\t\tdisplayFiltered = settings.aiDisplay,\n\t\t\tdisplayMaster = settings.aiDisplayMaster;\n\t\n\t\tvar\n\t\t\tsearch = opts.search,  // none, applied, removed\n\t\t\torder  = opts.order,   // applied, current, index (original - compatibility with 1.9)\n\t\t\tpage   = opts.page;    // all, current\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t// In server-side processing mode, most options are irrelevant since\n\t\t\t// rows not shown don't exist and the index order is the applied order\n\t\t\t// Removed is a special case - for consistency just return an empty\n\t\t\t// array\n\t\t\treturn search === 'removed' ?\n\t\t\t\t[] :\n\t\t\t\t_range( 0, displayMaster.length );\n\t\t}\n\t\telse if ( page == 'current' ) {\n\t\t\t// Current page implies that order=current and filter=applied, since it is\n\t\t\t// fairly senseless otherwise, regardless of what order and search actually\n\t\t\t// are\n\t\t\tfor ( i=settings._iDisplayStart, ien=settings.fnDisplayEnd() ; i<ien ; i++ ) {\n\t\t\t\ta.push( displayFiltered[i] );\n\t\t\t}\n\t\t}\n\t\telse if ( order == 'current' || order == 'applied' ) {\n\t\t\tif ( search == 'none') {\n\t\t\t\ta = displayMaster.slice();\n\t\t\t}\n\t\t\telse if ( search == 'applied' ) {\n\t\t\t\ta = displayFiltered.slice();\n\t\t\t}\n\t\t\telse if ( search == 'removed' ) {\n\t\t\t\t// O(n+m) solution by creating a hash map\n\t\t\t\tvar displayFilteredMap = {};\n\t\n\t\t\t\tfor ( var i=0, ien=displayFiltered.length ; i<ien ; i++ ) {\n\t\t\t\t\tdisplayFilteredMap[displayFiltered[i]] = null;\n\t\t\t\t}\n\t\n\t\t\t\ta = $.map( displayMaster, function (el) {\n\t\t\t\t\treturn ! displayFilteredMap.hasOwnProperty(el) ?\n\t\t\t\t\t\tel :\n\t\t\t\t\t\tnull;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\telse if ( order == 'index' || order == 'original' ) {\n\t\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\t\tif ( search == 'none' ) {\n\t\t\t\t\ta.push( i );\n\t\t\t\t}\n\t\t\t\telse { // applied | removed\n\t\t\t\t\ttmp = $.inArray( i, displayFiltered );\n\t\n\t\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t\t(tmp >= 0   && search == 'applied') )\n\t\t\t\t\t{\n\t\t\t\t\t\ta.push( i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn a;\n\t};\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Rows\n\t *\n\t * {}          - no selector - use all available rows\n\t * {integer}   - row aoData index\n\t * {node}      - TR node\n\t * {string}    - jQuery selector to apply to the TR elements\n\t * {array}     - jQuery array of nodes, or simply an array of TR nodes\n\t *\n\t */\n\tvar __row_selector = function ( settings, selector, opts )\n\t{\n\t\tvar rows;\n\t\tvar run = function ( sel ) {\n\t\t\tvar selInt = _intVal( sel );\n\t\t\tvar i, ien;\n\t\t\tvar aoData = settings.aoData;\n\t\n\t\t\t// Short cut - selector is a number and no options provided (default is\n\t\t\t// all records, so no need to check if the index is in there, since it\n\t\t\t// must be - dev error if the index doesn't exist).\n\t\t\tif ( selInt !== null && ! opts ) {\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\n\t\t\tif ( ! rows ) {\n\t\t\t\trows = _selector_row_indexes( settings, opts );\n\t\t\t}\n\t\n\t\t\tif ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {\n\t\t\t\t// Selector - integer\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\t\telse if ( sel === null || sel === undefined || sel === '' ) {\n\t\t\t\t// Selector - none\n\t\t\t\treturn rows;\n\t\t\t}\n\t\n\t\t\t// Selector - function\n\t\t\tif ( typeof sel === 'function' ) {\n\t\t\t\treturn $.map( rows, function (idx) {\n\t\t\t\t\tvar row = aoData[ idx ];\n\t\t\t\t\treturn sel( idx, row._aData, row.nTr ) ? idx : null;\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t// Selector - node\n\t\t\tif ( sel.nodeName ) {\n\t\t\t\tvar rowIdx = sel._DT_RowIndex;  // Property added by DT for fast lookup\n\t\t\t\tvar cellIdx = sel._DT_CellIndex;\n\t\n\t\t\t\tif ( rowIdx !== undefined ) {\n\t\t\t\t\t// Make sure that the row is actually still present in the table\n\t\t\t\t\treturn aoData[ rowIdx ] && aoData[ rowIdx ].nTr === sel ?\n\t\t\t\t\t\t[ rowIdx ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t\telse if ( cellIdx ) {\n\t\t\t\t\treturn aoData[ cellIdx.row ] && aoData[ cellIdx.row ].nTr === sel.parentNode ?\n\t\t\t\t\t\t[ cellIdx.row ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar host = $(sel).closest('*[data-dt-row]');\n\t\t\t\t\treturn host.length ?\n\t\t\t\t\t\t[ host.data('dt-row') ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// ID selector. Want to always be able to select rows by id, regardless\n\t\t\t// of if the tr element has been created or not, so can't rely upon\n\t\t\t// jQuery here - hence a custom implementation. This does not match\n\t\t\t// Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,\n\t\t\t// but to select it using a CSS selector engine (like Sizzle or\n\t\t\t// querySelect) it would need to need to be escaped for some characters.\n\t\t\t// DataTables simplifies this for row selectors since you can select\n\t\t\t// only a row. A # indicates an id any anything that follows is the id -\n\t\t\t// unescaped.\n\t\t\tif ( typeof sel === 'string' && sel.charAt(0) === '#' ) {\n\t\t\t\t// get row index from id\n\t\t\t\tvar rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];\n\t\t\t\tif ( rowObj !== undefined ) {\n\t\t\t\t\treturn [ rowObj.idx ];\n\t\t\t\t}\n\t\n\t\t\t\t// need to fall through to jQuery in case there is DOM id that\n\t\t\t\t// matches\n\t\t\t}\n\t\t\t\n\t\t\t// Get nodes in the order from the `rows` array with null values removed\n\t\t\tvar nodes = _removeEmpty(\n\t\t\t\t_pluck_order( settings.aoData, rows, 'nTr' )\n\t\t\t);\n\t\n\t\t\t// Selector - jQuery selector string, array of nodes or jQuery object/\n\t\t\t// As jQuery's .filter() allows jQuery objects to be passed in filter,\n\t\t\t// it also allows arrays, so this will cope with all three options\n\t\t\treturn $(nodes)\n\t\t\t\t.filter( sel )\n\t\t\t\t.map( function () {\n\t\t\t\t\treturn this._DT_RowIndex;\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\t};\n\t\n\t\treturn _selector_run( 'row', selector, run, settings, opts );\n\t};\n\t\n\t\n\t_api_register( 'rows()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __row_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in __row_selector?\n\t\tinst.selector.rows = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_register( 'rows().nodes()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn settings.aoData[ row ].nTr || undefined;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'rows().data()', function () {\n\t\treturn this.iterator( true, 'rows', function ( settings, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, '_aData' );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\tvar r = settings.aoData[ row ];\n\t\t\treturn type === 'search' ? r._aFilterData : r._aSortData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\t_fnInvalidate( settings, row, src );\n\t\t} );\n\t} );\n\t\n\t_api_registerPlural( 'rows().indexes()', 'row().index()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn row;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {\n\t\tvar a = [];\n\t\tvar context = this.context;\n\t\n\t\t// `iterator` will drop undefined values, but in this case we want them\n\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\tfor ( var j=0, jen=this[i].length ; j<jen ; j++ ) {\n\t\t\t\tvar id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );\n\t\t\t\ta.push( (hash === true ? '#' : '' )+ id );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new _Api( context, a );\n\t} );\n\t\n\t_api_registerPlural( 'rows().remove()', 'row().remove()', function () {\n\t\tvar that = this;\n\t\n\t\tthis.iterator( 'row', function ( settings, row, thatIdx ) {\n\t\t\tvar data = settings.aoData;\n\t\t\tvar rowData = data[ row ];\n\t\t\tvar i, ien, j, jen;\n\t\t\tvar loopRow, loopCells;\n\t\n\t\t\tdata.splice( row, 1 );\n\t\n\t\t\t// Update the cached indexes\n\t\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\tloopRow = data[i];\n\t\t\t\tloopCells = loopRow.anCells;\n\t\n\t\t\t\t// Rows\n\t\t\t\tif ( loopRow.nTr !== null ) {\n\t\t\t\t\tloopRow.nTr._DT_RowIndex = i;\n\t\t\t\t}\n\t\n\t\t\t\t// Cells\n\t\t\t\tif ( loopCells !== null ) {\n\t\t\t\t\tfor ( j=0, jen=loopCells.length ; j<jen ; j++ ) {\n\t\t\t\t\t\tloopCells[j]._DT_CellIndex.row = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Delete from the display arrays\n\t\t\t_fnDeleteIndex( settings.aiDisplayMaster, row );\n\t\t\t_fnDeleteIndex( settings.aiDisplay, row );\n\t\t\t_fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes\n\t\n\t\t\t// For server-side processing tables - subtract the deleted row from the count\n\t\t\tif ( settings._iRecordsDisplay > 0 ) {\n\t\t\t\tsettings._iRecordsDisplay--;\n\t\t\t}\n\t\n\t\t\t// Check for an 'overflow' they case for displaying the table\n\t\t\t_fnLengthOverflow( settings );\n\t\n\t\t\t// Remove the row's ID reference if there is one\n\t\t\tvar id = settings.rowIdFn( rowData._aData );\n\t\t\tif ( id !== undefined ) {\n\t\t\t\tdelete settings.aIds[ id ];\n\t\t\t}\n\t\t} );\n\t\n\t\tthis.iterator( 'table', function ( settings ) {\n\t\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\t\tsettings.aoData[i].idx = i;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( 'rows.add()', function ( rows ) {\n\t\tvar newRows = this.iterator( 'table', function ( settings ) {\n\t\t\t\tvar row, i, ien;\n\t\t\t\tvar out = [];\n\t\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\t\t\tout.push( _fnAddTr( settings, row )[0] );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tout.push( _fnAddData( settings, row ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn out;\n\t\t\t}, 1 );\n\t\n\t\t// Return an Api.rows() extended instance, so rows().nodes() etc can be used\n\t\tvar modRows = this.rows( -1 );\n\t\tmodRows.pop();\n\t\t$.merge( modRows, newRows );\n\t\n\t\treturn modRows;\n\t} );\n\t\n\t\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( 'row()', function ( selector, opts ) {\n\t\treturn _selector_first( this.rows( selector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'row().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._aData :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\tvar row = ctx[0].aoData[ this[0] ];\n\t\trow._aData = data;\n\t\n\t\t// If the DOM has an id, and the data source is an array\n\t\tif ( Array.isArray( data ) && row.nTr && row.nTr.id ) {\n\t\t\t_fnSetObjectDataFn( ctx[0].rowId )( data, row.nTr.id );\n\t\t}\n\t\n\t\t// Automatically invalidate\n\t\t_fnInvalidate( ctx[0], this[0], 'data' );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( 'row().node()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\treturn ctx.length && this.length ?\n\t\t\tctx[0].aoData[ this[0] ].nTr || null :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'row.add()', function ( row ) {\n\t\t// Allow a jQuery object to be passed in - only a single row is added from\n\t\t// it though - the first element in the set\n\t\tif ( row instanceof $ && row.length ) {\n\t\t\trow = row[0];\n\t\t}\n\t\n\t\tvar rows = this.iterator( 'table', function ( settings ) {\n\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\treturn _fnAddTr( settings, row )[0];\n\t\t\t}\n\t\t\treturn _fnAddData( settings, row );\n\t\t} );\n\t\n\t\t// Return an Api.rows() extended instance, with the newly added row selected\n\t\treturn this.row( rows[0] );\n\t} );\n\t\n\t\n\t$(document).on('plugin-init.dt', function (e, context) {\n\t\tvar api = new _Api( context );\n\t\tvar namespace = 'on-plugin-init';\n\t\tvar stateSaveParamsEvent = 'stateSaveParams.' + namespace;\n\t\tvar destroyEvent = 'destroy. ' + namespace;\n\t\n\t\tapi.on( stateSaveParamsEvent, function ( e, settings, d ) {\n\t\t\t// This could be more compact with the API, but it is a lot faster as a simple\n\t\t\t// internal loop\n\t\t\tvar idFn = settings.rowIdFn;\n\t\t\tvar data = settings.aoData;\n\t\t\tvar ids = [];\n\t\n\t\t\tfor (var i=0 ; i<data.length ; i++) {\n\t\t\t\tif (data[i]._detailsShow) {\n\t\t\t\t\tids.push( '#' + idFn(data[i]._aData) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\td.childRows = ids;\n\t\t});\n\t\n\t\tapi.on( destroyEvent, function () {\n\t\t\tapi.off(stateSaveParamsEvent + ' ' + destroyEvent);\n\t\t});\n\t\n\t\tvar loaded = api.state.loaded();\n\t\n\t\tif ( loaded && loaded.childRows ) {\n\t\t\tapi\n\t\t\t\t.rows( $.map(loaded.childRows, function (id){\n\t\t\t\t\treturn id.replace(/:/g, '\\\\:')\n\t\t\t\t}) )\n\t\t\t\t.every( function () {\n\t\t\t\t\t_fnCallbackFire( context, null, 'requestChild', [ this ] )\n\t\t\t\t});\n\t\t}\n\t});\n\t\n\tvar __details_add = function ( ctx, row, data, klass )\n\t{\n\t\t// Convert to array of TR elements\n\t\tvar rows = [];\n\t\tvar addRow = function ( r, k ) {\n\t\t\t// Recursion to allow for arrays of jQuery objects\n\t\t\tif ( Array.isArray( r ) || r instanceof $ ) {\n\t\t\t\tfor ( var i=0, ien=r.length ; i<ien ; i++ ) {\n\t\t\t\t\taddRow( r[i], k );\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If we get a TR element, then just add it directly - up to the dev\n\t\t\t// to add the correct number of columns etc\n\t\t\tif ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {\n\t\t\t\trows.push( r );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Otherwise create a row with a wrapper\n\t\t\t\tvar created = $('<tr><td></td></tr>').addClass( k );\n\t\t\t\t$('td', created)\n\t\t\t\t\t.addClass( k )\n\t\t\t\t\t.html( r )\n\t\t\t\t\t[0].colSpan = _fnVisbleColumns( ctx );\n\t\n\t\t\t\trows.push( created[0] );\n\t\t\t}\n\t\t};\n\t\n\t\taddRow( data, klass );\n\t\n\t\tif ( row._details ) {\n\t\t\trow._details.detach();\n\t\t}\n\t\n\t\trow._details = $(rows);\n\t\n\t\t// If the children were already shown, that state should be retained\n\t\tif ( row._detailsShow ) {\n\t\t\trow._details.insertAfter( row.nTr );\n\t\t}\n\t};\n\t\n\t\n\t// Make state saving of child row details async to allow them to be batch processed\n\tvar __details_state = DataTable.util.throttle(\n\t\tfunction (ctx) {\n\t\t\t_fnSaveState( ctx[0] )\n\t\t},\n\t\t500\n\t);\n\t\n\t\n\tvar __details_remove = function ( api, idx )\n\t{\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length ) {\n\t\t\tvar row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];\n\t\n\t\t\tif ( row && row._details ) {\n\t\t\t\trow._details.remove();\n\t\n\t\t\t\trow._detailsShow = undefined;\n\t\t\t\trow._details = undefined;\n\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t\t__details_state( ctx );\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_display = function ( api, show ) {\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length && api.length ) {\n\t\t\tvar row = ctx[0].aoData[ api[0] ];\n\t\n\t\t\tif ( row._details ) {\n\t\t\t\trow._detailsShow = show;\n\t\n\t\t\t\tif ( show ) {\n\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t\t$( row.nTr ).addClass( 'dt-hasChild' );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow._details.detach();\n\t\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t\t}\n\t\n\t\t\t\t_fnCallbackFire( ctx[0], null, 'childRow', [ show, api.row( api[0] ) ] )\n\t\n\t\t\t\t__details_events( ctx[0] );\n\t\t\t\t__details_state( ctx );\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_events = function ( settings )\n\t{\n\t\tvar api = new _Api( settings );\n\t\tvar namespace = '.dt.DT_details';\n\t\tvar drawEvent = 'draw'+namespace;\n\t\tvar colvisEvent = 'column-sizing'+namespace;\n\t\tvar destroyEvent = 'destroy'+namespace;\n\t\tvar data = settings.aoData;\n\t\n\t\tapi.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );\n\t\n\t\tif ( _pluck( data, '_details' ).length > 0 ) {\n\t\t\t// On each draw, insert the required elements into the document\n\t\t\tapi.on( drawEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tapi.rows( {page:'current'} ).eq(0).each( function (idx) {\n\t\t\t\t\t// Internal data grab\n\t\t\t\t\tvar row = data[ idx ];\n\t\n\t\t\t\t\tif ( row._detailsShow ) {\n\t\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\n\t\t\t// Column visibility change - update the colspan\n\t\t\tapi.on( colvisEvent, function ( e, ctx, idx, vis ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t// Update the colspan for the details rows (note, only if it already has\n\t\t\t\t// a colspan)\n\t\t\t\tvar row, visible = _fnVisbleColumns( ctx );\n\t\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = data[i];\n\t\n\t\t\t\t\tif ( row._details ) {\n\t\t\t\t\t\trow._details.each(function () {\n\t\t\t\t\t\t\tvar el = $(this).children('td');\n\t\n\t\t\t\t\t\t\tif (el.length == 1) {\n\t\t\t\t\t\t\t\tel.attr('colspan', visible);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\t// Table destroyed - nuke any child rows\n\t\t\tapi.on( destroyEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( data[i]._details ) {\n\t\t\t\t\t\t__details_remove( api, i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t// Strings for the method names to help minification\n\tvar _emp = '';\n\tvar _child_obj = _emp+'row().child';\n\tvar _child_mth = _child_obj+'()';\n\t\n\t// data can be:\n\t//  tr\n\t//  string\n\t//  jQuery or array of any of the above\n\t_api_register( _child_mth, function ( data, klass ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._details :\n\t\t\t\tundefined;\n\t\t}\n\t\telse if ( data === true ) {\n\t\t\t// show\n\t\t\tthis.child.show();\n\t\t}\n\t\telse if ( data === false ) {\n\t\t\t// remove\n\t\t\t__details_remove( this );\n\t\t}\n\t\telse if ( ctx.length && this.length ) {\n\t\t\t// set\n\t\t\t__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );\n\t\t}\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.show()',\n\t\t_child_mth+'.show()' // only when `child()` was called with parameters (without\n\t], function ( show ) {   // it returns an object and this method is not executed)\n\t\t__details_display( this, true );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.hide()',\n\t\t_child_mth+'.hide()' // only when `child()` was called with parameters (without\n\t], function () {         // it returns an object and this method is not executed)\n\t\t__details_display( this, false );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.remove()',\n\t\t_child_mth+'.remove()' // only when `child()` was called with parameters (without\n\t], function () {           // it returns an object and this method is not executed)\n\t\t__details_remove( this );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( _child_obj+'.isShown()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length && this.length ) {\n\t\t\t// _detailsShown as false or undefined will fall through to return false\n\t\t\treturn ctx[0].aoData[ this[0] ]._detailsShow || false;\n\t\t}\n\t\treturn false;\n\t} );\n\t\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Columns\n\t *\n\t * {integer}           - column index (>=0 count from left, <0 count from right)\n\t * \"{integer}:visIdx\"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)\n\t * \"{integer}:visible\" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)\n\t * \"{string}:name\"     - column name\n\t * \"{string}\"          - jQuery selector on column header nodes\n\t *\n\t */\n\t\n\t// can be an array of these items, comma separated list, or an array of comma\n\t// separated lists\n\t\n\tvar __re_column_selector = /^([^:]+):(name|visIdx|visible)$/;\n\t\n\t\n\t// r1 and r2 are redundant - but it means that the parameters match for the\n\t// iterator callback in columns().data()\n\tvar __columnData = function ( settings, column, r1, r2, rows ) {\n\t\tvar a = [];\n\t\tfor ( var row=0, ien=rows.length ; row<ien ; row++ ) {\n\t\t\ta.push( _fnGetCellData( settings, rows[row], column ) );\n\t\t}\n\t\treturn a;\n\t};\n\t\n\t\n\tvar __column_selector = function ( settings, selector, opts )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tnames = _pluck( columns, 'sName' ),\n\t\t\tnodes = _pluck( columns, 'nTh' );\n\t\n\t\tvar run = function ( s ) {\n\t\t\tvar selInt = _intVal( s );\n\t\n\t\t\t// Selector - all\n\t\t\tif ( s === '' ) {\n\t\t\t\treturn _range( columns.length );\n\t\t\t}\n\t\n\t\t\t// Selector - index\n\t\t\tif ( selInt !== null ) {\n\t\t\t\treturn [ selInt >= 0 ?\n\t\t\t\t\tselInt : // Count from left\n\t\t\t\t\tcolumns.length + selInt // Count from right (+ because its a negative value)\n\t\t\t\t];\n\t\t\t}\n\t\n\t\t\t// Selector = function\n\t\t\tif ( typeof s === 'function' ) {\n\t\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\n\t\t\t\treturn $.map( columns, function (col, idx) {\n\t\t\t\t\treturn s(\n\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t__columnData( settings, idx, 0, 0, rows ),\n\t\t\t\t\t\t\tnodes[ idx ]\n\t\t\t\t\t\t) ? idx : null;\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t// jQuery or string selector\n\t\t\tvar match = typeof s === 'string' ?\n\t\t\t\ts.match( __re_column_selector ) :\n\t\t\t\t'';\n\t\n\t\t\tif ( match ) {\n\t\t\t\tswitch( match[2] ) {\n\t\t\t\t\tcase 'visIdx':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\t\tvar idx = parseInt( match[1], 10 );\n\t\t\t\t\t\t// Visible index given, convert to column index\n\t\t\t\t\t\tif ( idx < 0 ) {\n\t\t\t\t\t\t\t// Counting from the right\n\t\t\t\t\t\t\tvar visColumns = $.map( columns, function (col,i) {\n\t\t\t\t\t\t\t\treturn col.bVisible ? i : null;\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn [ visColumns[ visColumns.length + idx ] ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Counting from the left\n\t\t\t\t\t\treturn [ _fnVisibleToColumnIndex( settings, idx ) ];\n\t\n\t\t\t\t\tcase 'name':\n\t\t\t\t\t\t// match by name. `names` is column index complete and in order\n\t\t\t\t\t\treturn $.map( names, function (name, i) {\n\t\t\t\t\t\t\treturn name === match[1] ? i : null;\n\t\t\t\t\t\t} );\n\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Cell in the table body\n\t\t\tif ( s.nodeName && s._DT_CellIndex ) {\n\t\t\t\treturn [ s._DT_CellIndex.column ];\n\t\t\t}\n\t\n\t\t\t// jQuery selector on the TH elements for the columns\n\t\t\tvar jqResult = $( nodes )\n\t\t\t\t.filter( s )\n\t\t\t\t.map( function () {\n\t\t\t\t\treturn $.inArray( this, nodes ); // `nodes` is column index complete and in order\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\n\t\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\t\treturn jqResult;\n\t\t\t}\n\t\n\t\t\t// Otherwise a node which might have a `dt-column` data attribute, or be\n\t\t\t// a child or such an element\n\t\t\tvar host = $(s).closest('*[data-dt-column]');\n\t\t\treturn host.length ?\n\t\t\t\t[ host.data('dt-column') ] :\n\t\t\t\t[];\n\t\t};\n\t\n\t\treturn _selector_run( 'column', selector, run, settings, opts );\n\t};\n\t\n\t\n\tvar __setColumnVis = function ( settings, column, vis ) {\n\t\tvar\n\t\t\tcols = settings.aoColumns,\n\t\t\tcol  = cols[ column ],\n\t\t\tdata = settings.aoData,\n\t\t\trow, cells, i, ien, tr;\n\t\n\t\t// Get\n\t\tif ( vis === undefined ) {\n\t\t\treturn col.bVisible;\n\t\t}\n\t\n\t\t// Set\n\t\t// No change\n\t\tif ( col.bVisible === vis ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( vis ) {\n\t\t\t// Insert column\n\t\t\t// Need to decide if we should use appendChild or insertBefore\n\t\t\tvar insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );\n\t\n\t\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\ttr = data[i].nTr;\n\t\t\t\tcells = data[i].anCells;\n\t\n\t\t\t\tif ( tr ) {\n\t\t\t\t\t// insertBefore can act like appendChild if 2nd arg is null\n\t\t\t\t\ttr.insertBefore( cells[ column ], cells[ insertBefore ] || null );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Remove column\n\t\t\t$( _pluck( settings.aoData, 'anCells', column ) ).detach();\n\t\t}\n\t\n\t\t// Common actions\n\t\tcol.bVisible = vis;\n\t};\n\t\n\t\n\t_api_register( 'columns()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __column_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in _row_selector?\n\t\tinst.selector.cols = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTh;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTf;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().data()', 'column().data()', function () {\n\t\treturn this.iterator( 'column-rows', __columnData, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].mData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows,\n\t\t\t\ttype === 'search' ? '_aFilterData' : '_aSortData', column\n\t\t\t);\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, 'anCells', column ) ;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {\n\t\tvar that = this;\n\t\tvar ret = this.iterator( 'column', function ( settings, column ) {\n\t\t\tif ( vis === undefined ) {\n\t\t\t\treturn settings.aoColumns[ column ].bVisible;\n\t\t\t} // else\n\t\t\t__setColumnVis( settings, column, vis );\n\t\t} );\n\t\n\t\t// Group the column visibility changes\n\t\tif ( vis !== undefined ) {\n\t\t\tthis.iterator( 'table', function ( settings ) {\n\t\t\t\t// Redraw the header after changes\n\t\t\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\t\n\t\t\t\t// Update colspan for no records display. Child rows and extensions will use their own\n\t\t\t\t// listeners to do this - only need to update the empty table item here\n\t\t\t\tif ( ! settings.aiDisplay.length ) {\n\t\t\t\t\t$(settings.nTBody).find('td[colspan]').attr('colspan', _fnVisbleColumns(settings));\n\t\t\t\t}\n\t\t\n\t\t\t\t_fnSaveState( settings );\n\t\n\t\t\t\t// Second loop once the first is done for events\n\t\t\t\tthat.iterator( 'column', function ( settings, column ) {\n\t\t\t\t\t_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, calc] );\n\t\t\t\t} );\n\t\n\t\t\t\tif ( calc === undefined || calc ) {\n\t\t\t\t\tthat.columns.adjust();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\n\t\treturn ret;\n\t} );\n\t\n\t_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn type === 'visible' ?\n\t\t\t\t_fnColumnIndexToVisible( settings, column ) :\n\t\t\t\tcolumn;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'columns.adjust()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'column.index()', function ( type, idx ) {\n\t\tif ( this.context.length !== 0 ) {\n\t\t\tvar ctx = this.context[0];\n\t\n\t\t\tif ( type === 'fromVisible' || type === 'toData' ) {\n\t\t\t\treturn _fnVisibleToColumnIndex( ctx, idx );\n\t\t\t}\n\t\t\telse if ( type === 'fromData' || type === 'toVisible' ) {\n\t\t\t\treturn _fnColumnIndexToVisible( ctx, idx );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t_api_register( 'column()', function ( selector, opts ) {\n\t\treturn _selector_first( this.columns( selector, opts ) );\n\t} );\n\t\n\tvar __cell_selector = function ( settings, selector, opts )\n\t{\n\t\tvar data = settings.aoData;\n\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\tvar cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );\n\t\tvar allCells = $(_flatten( [], cells ));\n\t\tvar row;\n\t\tvar columns = settings.aoColumns.length;\n\t\tvar a, i, ien, j, o, host;\n\t\n\t\tvar run = function ( s ) {\n\t\t\tvar fnSelector = typeof s === 'function';\n\t\n\t\t\tif ( s === null || s === undefined || fnSelector ) {\n\t\t\t\t// All cells and function selectors\n\t\t\t\ta = [];\n\t\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tfor ( j=0 ; j<columns ; j++ ) {\n\t\t\t\t\t\to = {\n\t\t\t\t\t\t\trow: row,\n\t\t\t\t\t\t\tcolumn: j\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tif ( fnSelector ) {\n\t\t\t\t\t\t\t// Selector - function\n\t\t\t\t\t\t\thost = data[ row ];\n\t\n\t\t\t\t\t\t\tif ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {\n\t\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Selector - all\n\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn a;\n\t\t\t}\n\t\t\t\n\t\t\t// Selector - index\n\t\t\tif ( $.isPlainObject( s ) ) {\n\t\t\t\t// Valid cell index and its in the array of selectable rows\n\t\t\t\treturn s.column !== undefined && s.row !== undefined && $.inArray( s.row, rows ) !== -1 ?\n\t\t\t\t\t[s] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\n\t\t\t// Selector - jQuery filtered cells\n\t\t\tvar jqResult = allCells\n\t\t\t\t.filter( s )\n\t\t\t\t.map( function (i, el) {\n\t\t\t\t\treturn { // use a new object, in case someone changes the values\n\t\t\t\t\t\trow:    el._DT_CellIndex.row,\n\t\t\t\t\t\tcolumn: el._DT_CellIndex.column\n\t \t\t\t\t};\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\n\t\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\t\treturn jqResult;\n\t\t\t}\n\t\n\t\t\t// Otherwise the selector is a node, and there is one last option - the\n\t\t\t// element might be a child of an element which has dt-row and dt-column\n\t\t\t// data attributes\n\t\t\thost = $(s).closest('*[data-dt-row]');\n\t\t\treturn host.length ?\n\t\t\t\t[ {\n\t\t\t\t\trow: host.data('dt-row'),\n\t\t\t\t\tcolumn: host.data('dt-column')\n\t\t\t\t} ] :\n\t\t\t\t[];\n\t\t};\n\t\n\t\treturn _selector_run( 'cell', selector, run, settings, opts );\n\t};\n\t\n\t\n\t\n\t\n\t_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {\n\t\t// Argument shifting\n\t\tif ( $.isPlainObject( rowSelector ) ) {\n\t\t\t// Indexes\n\t\t\tif ( rowSelector.row === undefined ) {\n\t\t\t\t// Selector options in first parameter\n\t\t\t\topts = rowSelector;\n\t\t\t\trowSelector = null;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Cell index objects in first parameter\n\t\t\t\topts = columnSelector;\n\t\t\t\tcolumnSelector = null;\n\t\t\t}\n\t\t}\n\t\tif ( $.isPlainObject( columnSelector ) ) {\n\t\t\topts = columnSelector;\n\t\t\tcolumnSelector = null;\n\t\t}\n\t\n\t\t// Cell selector\n\t\tif ( columnSelector === null || columnSelector === undefined ) {\n\t\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t\treturn __cell_selector( settings, rowSelector, _selector_opts( opts ) );\n\t\t\t} );\n\t\t}\n\t\n\t\t// The default built in options need to apply to row and columns\n\t\tvar internalOpts = opts ? {\n\t\t\tpage: opts.page,\n\t\t\torder: opts.order,\n\t\t\tsearch: opts.search\n\t\t} : {};\n\t\n\t\t// Row + column selector\n\t\tvar columns = this.columns( columnSelector, internalOpts );\n\t\tvar rows = this.rows( rowSelector, internalOpts );\n\t\tvar i, ien, j, jen;\n\t\n\t\tvar cellsNoOpts = this.iterator( 'table', function ( settings, idx ) {\n\t\t\tvar a = [];\n\t\n\t\t\tfor ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {\n\t\t\t\tfor ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {\n\t\t\t\t\ta.push( {\n\t\t\t\t\t\trow:    rows[idx][i],\n\t\t\t\t\t\tcolumn: columns[idx][j]\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn a;\n\t\t}, 1 );\n\t\n\t\t// There is currently only one extension which uses a cell selector extension\n\t\t// It is a _major_ performance drag to run this if it isn't needed, so this is\n\t\t// an extension specific check at the moment\n\t\tvar cells = opts && opts.selected ?\n\t\t\tthis.cells( cellsNoOpts, opts ) :\n\t\t\tcellsNoOpts;\n\t\n\t\t$.extend( cells.selector, {\n\t\t\tcols: columnSelector,\n\t\t\trows: rowSelector,\n\t\t\topts: opts\n\t\t} );\n\t\n\t\treturn cells;\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\tvar data = settings.aoData[ row ];\n\t\n\t\t\treturn data && data.anCells ?\n\t\t\t\tdata.anCells[ column ] :\n\t\t\t\tundefined;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_register( 'cells().data()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {\n\t\ttype = type === 'search' ? '_aFilterData' : '_aSortData';\n\t\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn settings.aoData[ row ][ type ][ column ];\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column, type );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn {\n\t\t\t\trow: row,\n\t\t\t\tcolumn: column,\n\t\t\t\tcolumnVisible: _fnColumnIndexToVisible( settings, column )\n\t\t\t};\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\t_fnInvalidate( settings, row, src, column );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {\n\t\treturn _selector_first( this.cells( rowSelector, columnSelector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'cell().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\tvar cell = this[0];\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && cell.length ?\n\t\t\t\t_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\t_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );\n\t\t_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get current ordering (sorting) that has been applied to the table.\n\t *\n\t * @returns {array} 2D array containing the sorting information for the first\n\t *   table in the current context. Each element in the parent array represents\n\t *   a column being sorted upon (i.e. multi-sorting with two columns would have\n\t *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is\n\t *   the column index that the sorting condition applies to, the second is the\n\t *   direction of the sort (`desc` or `asc`) and, optionally, the third is the\n\t *   index of the sorting order from the `column.sorting` initialisation array.\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {integer} order Column index to sort upon.\n\t * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 1D array of sorting information to be applied.\n\t * @param {array} [...] Optional additional sorting conditions\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 2D array of sorting information to be applied.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order()', function ( order, dir ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( order === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].aaSorting :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\tif ( typeof order === 'number' ) {\n\t\t\t// Simple column / direction passed in\n\t\t\torder = [ [ order, dir ] ];\n\t\t}\n\t\telse if ( order.length && ! Array.isArray( order[0] ) ) {\n\t\t\t// Arguments passed in (list of 1D arrays)\n\t\t\torder = Array.prototype.slice.call( arguments );\n\t\t}\n\t\t// otherwise a 2D array was passed in\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tsettings.aaSorting = order.slice();\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Attach a sort listener to an element for a given column\n\t *\n\t * @param {node|jQuery|string} node Identifier for the element(s) to attach the\n\t *   listener to. This can take the form of a single DOM node, a jQuery\n\t *   collection of nodes or a jQuery selector which will identify the node(s).\n\t * @param {integer} column the column that a click on this node will sort on\n\t * @param {function} [callback] callback function when sort is run\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order.listener()', function ( node, column, callback ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSortAttachListener( settings, node, column, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'order.fixed()', function ( set ) {\n\t\tif ( ! set ) {\n\t\t\tvar ctx = this.context;\n\t\t\tvar fixed = ctx.length ?\n\t\t\t\tctx[0].aaSortingFixed :\n\t\t\t\tundefined;\n\t\n\t\t\treturn Array.isArray( fixed ) ?\n\t\t\t\t{ pre: fixed } :\n\t\t\t\tfixed;\n\t\t}\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tsettings.aaSortingFixed = $.extend( true, {}, set );\n\t\t} );\n\t} );\n\t\n\t\n\t// Order by the selected column(s)\n\t_api_register( [\n\t\t'columns().order()',\n\t\t'column().order()'\n\t], function ( dir ) {\n\t\tvar that = this;\n\t\n\t\treturn this.iterator( 'table', function ( settings, i ) {\n\t\t\tvar sort = [];\n\t\n\t\t\t$.each( that[i], function (j, col) {\n\t\t\t\tsort.push( [ col, dir ] );\n\t\t\t} );\n\t\n\t\t\tsettings.aaSorting = sort;\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t_api_register( 'search()', function ( input, regex, smart, caseInsen ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( input === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].oPreviousSearch.sSearch :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t_fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {\n\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t} ), 1 );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_registerPlural(\n\t\t'columns().search()',\n\t\t'column().search()',\n\t\tfunction ( input, regex, smart, caseInsen ) {\n\t\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\t\tvar preSearch = settings.aoPreSearchCols;\n\t\n\t\t\t\tif ( input === undefined ) {\n\t\t\t\t\t// get\n\t\t\t\t\treturn preSearch[ column ].sSearch;\n\t\t\t\t}\n\t\n\t\t\t\t// set\n\t\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t$.extend( preSearch[ column ], {\n\t\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t\t} );\n\t\n\t\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch, 1 );\n\t\t\t} );\n\t\t}\n\t);\n\t\n\t/*\n\t * State API methods\n\t */\n\t\n\t_api_register( 'state()', function () {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oSavedState :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'state.clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t// Save an empty object\n\t\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, {} );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'state.loaded()', function () {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oLoadedState :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'state.save()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSaveState( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Set the jQuery or window object to be used by DataTables\n\t *\n\t * @param {*} module Library / container object\n\t * @param {string} [type] Library or container type `lib`, `win` or `datetime`.\n\t *   If not provided, automatic detection is attempted.\n\t */\n\tDataTable.use = function (module, type) {\n\t\tif (type === 'lib' || module.fn) {\n\t\t\t$ = module;\n\t\t}\n\t\telse if (type == 'win' || module.document) {\n\t\t\twindow = module;\n\t\t\tdocument = module.document;\n\t\t}\n\t\telse if (type === 'datetime' || module.type === 'DateTime') {\n\t\t\tDataTable.DateTime = module;\n\t\t}\n\t}\n\t\n\t/**\n\t * CommonJS factory function pass through. This will check if the arguments\n\t * given are a window object or a jQuery object. If so they are set\n\t * accordingly.\n\t * @param {*} root Window\n\t * @param {*} jq jQUery\n\t * @returns {boolean} Indicator\n\t */\n\tDataTable.factory = function (root, jq) {\n\t\tvar is = false;\n\t\n\t\t// Test if the first parameter is a window object\n\t\tif (root && root.document) {\n\t\t\twindow = root;\n\t\t\tdocument = root.document;\n\t\t}\n\t\n\t\t// Test if the second parameter is a jQuery object\n\t\tif (jq && jq.fn && jq.fn.jquery) {\n\t\t\t$ = jq;\n\t\t\tis = true;\n\t\t}\n\t\n\t\treturn is;\n\t}\n\t\n\t/**\n\t * Provide a common method for plug-ins to check the version of DataTables being\n\t * used, in order to ensure compatibility.\n\t *\n\t *  @param {string} version Version string to check for, in the format \"X.Y.Z\".\n\t *    Note that the formats \"X\" and \"X.Y\" are also acceptable.\n\t *  @returns {boolean} true if this version of DataTables is greater or equal to\n\t *    the required version, or false if this version of DataTales is not\n\t *    suitable\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );\n\t */\n\tDataTable.versionCheck = DataTable.fnVersionCheck = function( version )\n\t{\n\t\tvar aThis = DataTable.version.split('.');\n\t\tvar aThat = version.split('.');\n\t\tvar iThis, iThat;\n\t\n\t\tfor ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {\n\t\t\tiThis = parseInt( aThis[i], 10 ) || 0;\n\t\t\tiThat = parseInt( aThat[i], 10 ) || 0;\n\t\n\t\t\t// Parts are the same, keep comparing\n\t\t\tif (iThis === iThat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// Parts are different, return immediately\n\t\t\treturn iThis > iThat;\n\t\t}\n\t\n\t\treturn true;\n\t};\n\t\n\t\n\t/**\n\t * Check if a `<table>` node is a DataTable table already or not.\n\t *\n\t *  @param {node|jquery|string} table Table node, jQuery object or jQuery\n\t *      selector for the table to test. Note that if more than more than one\n\t *      table is passed on, only the first will be checked\n\t *  @returns {boolean} true the table given is a DataTable, or false otherwise\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {\n\t *      $('#example').dataTable();\n\t *    }\n\t */\n\tDataTable.isDataTable = DataTable.fnIsDataTable = function ( table )\n\t{\n\t\tvar t = $(table).get(0);\n\t\tvar is = false;\n\t\n\t\tif ( table instanceof DataTable.Api ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\t$.each( DataTable.settings, function (i, o) {\n\t\t\tvar head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;\n\t\t\tvar foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;\n\t\n\t\t\tif ( o.nTable === t || head === t || foot === t ) {\n\t\t\t\tis = true;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn is;\n\t};\n\t\n\t\n\t/**\n\t * Get all DataTable tables that have been initialised - optionally you can\n\t * select to get only currently visible tables.\n\t *\n\t *  @param {boolean} [visible=false] Flag to indicate if you want all (default)\n\t *    or visible tables only.\n\t *  @returns {array} Array of `table` nodes (not DataTable instances) which are\n\t *    DataTables\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    $.each( $.fn.dataTable.tables(true), function () {\n\t *      $(table).DataTable().columns.adjust();\n\t *    } );\n\t */\n\tDataTable.tables = DataTable.fnTables = function ( visible )\n\t{\n\t\tvar api = false;\n\t\n\t\tif ( $.isPlainObject( visible ) ) {\n\t\t\tapi = visible.api;\n\t\t\tvisible = visible.visible;\n\t\t}\n\t\n\t\tvar a = $.map( DataTable.settings, function (o) {\n\t\t\tif ( !visible || (visible && $(o.nTable).is(':visible')) ) {\n\t\t\t\treturn o.nTable;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn api ?\n\t\t\tnew _Api( a ) :\n\t\t\ta;\n\t};\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian notation. This is made public\n\t * for the extensions to provide the same ability as DataTables core to accept\n\t * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase\n\t * parameters.\n\t *\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t */\n\tDataTable.camelToHungarian = _fnCamelToHungarian;\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( '$()', function ( selector, opts ) {\n\t\tvar\n\t\t\trows   = this.rows( opts ).nodes(), // Get all rows\n\t\t\tjqRows = $(rows);\n\t\n\t\treturn $( [].concat(\n\t\t\tjqRows.filter( selector ).toArray(),\n\t\t\tjqRows.find( selector ).toArray()\n\t\t) );\n\t} );\n\t\n\t\n\t// jQuery functions to operate on the tables\n\t$.each( [ 'on', 'one', 'off' ], function (i, key) {\n\t\t_api_register( key+'()', function ( /* event, handler */ ) {\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\n\t\t\t// Add the `dt` namespace automatically if it isn't already present\n\t\t\targs[0] = $.map( args[0].split( /\\s/ ), function ( e ) {\n\t\t\t\treturn ! e.match(/\\.dt\\b/) ?\n\t\t\t\t\te+'.dt' :\n\t\t\t\t\te;\n\t\t\t\t} ).join( ' ' );\n\t\n\t\t\tvar inst = $( this.tables().nodes() );\n\t\t\tinst[key].apply( inst, args );\n\t\t\treturn this;\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnClearTable( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'settings()', function () {\n\t\treturn new _Api( this.context, this.context );\n\t} );\n\t\n\t\n\t_api_register( 'init()', function () {\n\t\tvar ctx = this.context;\n\t\treturn ctx.length ? ctx[0].oInit : null;\n\t} );\n\t\n\t\n\t_api_register( 'data()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\treturn _pluck( settings.aoData, '_aData' );\n\t\t} ).flatten();\n\t} );\n\t\n\t\n\t_api_register( 'destroy()', function ( remove ) {\n\t\tremove = remove || false;\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tvar classes   = settings.oClasses;\n\t\t\tvar table     = settings.nTable;\n\t\t\tvar tbody     = settings.nTBody;\n\t\t\tvar thead     = settings.nTHead;\n\t\t\tvar tfoot     = settings.nTFoot;\n\t\t\tvar jqTable   = $(table);\n\t\t\tvar jqTbody   = $(tbody);\n\t\t\tvar jqWrapper = $(settings.nTableWrapper);\n\t\t\tvar rows      = $.map( settings.aoData, function (r) { return r.nTr; } );\n\t\t\tvar i, ien;\n\t\n\t\t\t// Flag to note that the table is currently being destroyed - no action\n\t\t\t// should be taken\n\t\t\tsettings.bDestroying = true;\n\t\n\t\t\t// Fire off the destroy callbacks for plug-ins etc\n\t\t\t_fnCallbackFire( settings, \"aoDestroyCallback\", \"destroy\", [settings] );\n\t\n\t\t\t// If not being removed from the document, make all columns visible\n\t\t\tif ( ! remove ) {\n\t\t\t\tnew _Api( settings ).columns().visible( true );\n\t\t\t}\n\t\n\t\t\t// Blitz all `DT` namespaced events (these are internal events, the\n\t\t\t// lowercase, `dt` events are user subscribed and they are responsible\n\t\t\t// for removing them\n\t\t\tjqWrapper.off('.DT').find(':not(tbody *)').off('.DT');\n\t\t\t$(window).off('.DT-'+settings.sInstance);\n\t\n\t\t\t// When scrolling we had to break the table up - restore it\n\t\t\tif ( table != thead.parentNode ) {\n\t\t\t\tjqTable.children('thead').detach();\n\t\t\t\tjqTable.append( thead );\n\t\t\t}\n\t\n\t\t\tif ( tfoot && table != tfoot.parentNode ) {\n\t\t\t\tjqTable.children('tfoot').detach();\n\t\t\t\tjqTable.append( tfoot );\n\t\t\t}\n\t\n\t\t\tsettings.aaSorting = [];\n\t\t\tsettings.aaSortingFixed = [];\n\t\t\t_fnSortingClasses( settings );\n\t\n\t\t\t$( rows ).removeClass( settings.asStripeClasses.join(' ') );\n\t\n\t\t\t$('th, td', thead).removeClass( classes.sSortable+' '+\n\t\t\t\tclasses.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone\n\t\t\t);\n\t\n\t\t\t// Add the TR elements back into the table in their original order\n\t\t\tjqTbody.children().detach();\n\t\t\tjqTbody.append( rows );\n\t\n\t\t\tvar orig = settings.nTableWrapper.parentNode;\n\t\n\t\t\t// Remove the DataTables generated nodes, events and classes\n\t\t\tvar removedMethod = remove ? 'remove' : 'detach';\n\t\t\tjqTable[ removedMethod ]();\n\t\t\tjqWrapper[ removedMethod ]();\n\t\n\t\t\t// If we need to reattach the table to the document\n\t\t\tif ( ! remove && orig ) {\n\t\t\t\t// insertBefore acts like appendChild if !arg[1]\n\t\t\t\torig.insertBefore( table, settings.nTableReinsertBefore );\n\t\n\t\t\t\t// Restore the width of the original table - was read from the style property,\n\t\t\t\t// so we can restore directly to that\n\t\t\t\tjqTable\n\t\t\t\t\t.css( 'width', settings.sDestroyWidth )\n\t\t\t\t\t.removeClass( classes.sTable );\n\t\n\t\t\t\t// If the were originally stripe classes - then we add them back here.\n\t\t\t\t// Note this is not fool proof (for example if not all rows had stripe\n\t\t\t\t// classes - but it's a good effort without getting carried away\n\t\t\t\tien = settings.asDestroyStripes.length;\n\t\n\t\t\t\tif ( ien ) {\n\t\t\t\t\tjqTbody.children().each( function (i) {\n\t\t\t\t\t\t$(this).addClass( settings.asDestroyStripes[i % ien] );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Remove the settings object from the settings array */\n\t\t\tvar idx = $.inArray( settings, DataTable.settings );\n\t\t\tif ( idx !== -1 ) {\n\t\t\t\tDataTable.settings.splice( idx, 1 );\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t// Add the `every()` method for rows, columns and cells in a compact form\n\t$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {\n\t\t_api_register( type+'s().every()', function ( fn ) {\n\t\t\tvar opts = this.selector.opts;\n\t\t\tvar api = this;\n\t\n\t\t\treturn this.iterator( type, function ( settings, arg1, arg2, arg3, arg4 ) {\n\t\t\t\t// Rows and columns:\n\t\t\t\t//  arg1 - index\n\t\t\t\t//  arg2 - table counter\n\t\t\t\t//  arg3 - loop counter\n\t\t\t\t//  arg4 - undefined\n\t\t\t\t// Cells:\n\t\t\t\t//  arg1 - row index\n\t\t\t\t//  arg2 - column index\n\t\t\t\t//  arg3 - table counter\n\t\t\t\t//  arg4 - loop counter\n\t\t\t\tfn.call(\n\t\t\t\t\tapi[ type ](\n\t\t\t\t\t\targ1,\n\t\t\t\t\t\ttype==='cell' ? arg2 : opts,\n\t\t\t\t\t\ttype==='cell' ? opts : undefined\n\t\t\t\t\t),\n\t\t\t\t\targ1, arg2, arg3, arg4\n\t\t\t\t);\n\t\t\t} );\n\t\t} );\n\t} );\n\t\n\t\n\t// i18n method for extensions to be able to use the language object from the\n\t// DataTable\n\t_api_register( 'i18n()', function ( token, def, plural ) {\n\t\tvar ctx = this.context[0];\n\t\tvar resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );\n\t\n\t\tif ( resolved === undefined ) {\n\t\t\tresolved = def;\n\t\t}\n\t\n\t\tif ( plural !== undefined && $.isPlainObject( resolved ) ) {\n\t\t\tresolved = resolved[ plural ] !== undefined ?\n\t\t\t\tresolved[ plural ] :\n\t\t\t\tresolved._;\n\t\t}\n\t\n\t\treturn typeof resolved === 'string'\n\t\t\t? resolved.replace( '%d', plural ) // nb: plural might be undefined,\n\t\t\t: resolved;\n\t} );\t\n\t/**\n\t * Version string for plug-ins to check compatibility. Allowed format is\n\t * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used\n\t * only for non-release builds. See https://semver.org/ for more information.\n\t *  @member\n\t *  @type string\n\t *  @default Version number\n\t */\n\tDataTable.version = \"1.13.8\";\n\t\n\t/**\n\t * Private data store, containing all of the settings objects that are\n\t * created for the tables on a given page.\n\t *\n\t * Note that the `DataTable.settings` object is aliased to\n\t * `jQuery.fn.dataTableExt` through which it may be accessed and\n\t * manipulated, or `jQuery.fn.dataTable.settings`.\n\t *  @member\n\t *  @type array\n\t *  @default []\n\t *  @private\n\t */\n\tDataTable.settings = [];\n\t\n\t/**\n\t * Object models container, for the various models that DataTables has\n\t * available to it. These models define the objects that are used to hold\n\t * the active state and configuration of the table.\n\t *  @namespace\n\t */\n\tDataTable.models = {};\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * search information for the global filter and individual column filters.\n\t *  @namespace\n\t */\n\tDataTable.models.oSearch = {\n\t\t/**\n\t\t * Flag to indicate if the filtering should be case insensitive or not\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bCaseInsensitive\": true,\n\t\n\t\t/**\n\t\t * Applied search term\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sSearch\": \"\",\n\t\n\t\t/**\n\t\t * Flag to indicate if the search term should be interpreted as a\n\t\t * regular expression (true) or not (false) and therefore and special\n\t\t * regex characters escaped.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bRegex\": false,\n\t\n\t\t/**\n\t\t * Flag to indicate if DataTables is to use its smart filtering or not.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bSmart\": true,\n\t\n\t\t/**\n\t\t * Flag to indicate if DataTables should only trigger a search when\n\t\t * the return key is pressed.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"return\": false\n\t};\n\t\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * each individual row. This is the object format used for the settings\n\t * aoData array.\n\t *  @namespace\n\t */\n\tDataTable.models.oRow = {\n\t\t/**\n\t\t * TR element for the row\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTr\": null,\n\t\n\t\t/**\n\t\t * Array of TD elements for each row. This is null until the row has been\n\t\t * created.\n\t\t *  @type array nodes\n\t\t *  @default []\n\t\t */\n\t\t\"anCells\": null,\n\t\n\t\t/**\n\t\t * Data object from the original data source for the row. This is either\n\t\t * an array if using the traditional form of DataTables, or an object if\n\t\t * using mData options. The exact type will depend on the passed in\n\t\t * data from the data source, or will be an array if using DOM a data\n\t\t * source.\n\t\t *  @type array|object\n\t\t *  @default []\n\t\t */\n\t\t\"_aData\": [],\n\t\n\t\t/**\n\t\t * Sorting data cache - this array is ostensibly the same length as the\n\t\t * number of columns (although each index is generated only as it is\n\t\t * needed), and holds the data that is used for sorting each column in the\n\t\t * row. We do this cache generation at the start of the sort in order that\n\t\t * the formatting of the sort data need be done only once for each cell\n\t\t * per sort. This array should not be read from or written to by anything\n\t\t * other than the master sorting methods.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aSortData\": null,\n\t\n\t\t/**\n\t\t * Per cell filtering data cache. As per the sort data cache, used to\n\t\t * increase the performance of the filtering in DataTables\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aFilterData\": null,\n\t\n\t\t/**\n\t\t * Filtering data cache. This is the same as the cell filtering cache, but\n\t\t * in this case a string rather than an array. This is easily computed with\n\t\t * a join on `_aFilterData`, but is provided as a cache so the join isn't\n\t\t * needed on every search (memory traded for performance)\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sFilterRow\": null,\n\t\n\t\t/**\n\t\t * Cache of the class name that DataTables has applied to the row, so we\n\t\t * can quickly look at this variable rather than needing to do a DOM check\n\t\t * on className for the nTr property.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *  @private\n\t\t */\n\t\t\"_sRowStripe\": \"\",\n\t\n\t\t/**\n\t\t * Denote if the original data source was from the DOM, or the data source\n\t\t * object. This is used for invalidating data, so DataTables can\n\t\t * automatically read data from the original source, unless uninstructed\n\t\t * otherwise.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"src\": null,\n\t\n\t\t/**\n\t\t * Index in the aoData array. This saves an indexOf lookup when we have the\n\t\t * object, but want to know the index\n\t\t *  @type integer\n\t\t *  @default -1\n\t\t *  @private\n\t\t */\n\t\t\"idx\": -1\n\t};\n\t\n\t\n\t/**\n\t * Template object for the column information object in DataTables. This object\n\t * is held in the settings aoColumns array and contains all the information that\n\t * DataTables needs about each individual column.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults.column}\n\t * but this one is the internal data store for DataTables's cache of columns.\n\t * It should NOT be manipulated outside of DataTables. Any configuration should\n\t * be done through the initialisation options.\n\t *  @namespace\n\t */\n\tDataTable.models.oColumn = {\n\t\t/**\n\t\t * Column index. This could be worked out on-the-fly with $.inArray, but it\n\t\t * is faster to just hold it as a variable\n\t\t *  @type integer\n\t\t *  @default null\n\t\t */\n\t\t\"idx\": null,\n\t\n\t\t/**\n\t\t * A list of the columns that sorting should occur on when this column\n\t\t * is sorted. That this property is an array allows multi-column sorting\n\t\t * to be defined for a column (for example first name / last name columns\n\t\t * would benefit from this). The values are integers pointing to the\n\t\t * columns to be sorted on (typically it will be a single integer pointing\n\t\t * at itself, but that doesn't need to be the case).\n\t\t *  @type array\n\t\t */\n\t\t\"aDataSort\": null,\n\t\n\t\t/**\n\t\t * Define the sorting directions that are applied to the column, in sequence\n\t\t * as the column is repeatedly sorted upon - i.e. the first value is used\n\t\t * as the sorting direction when the column if first sorted (clicked on).\n\t\t * Sort it again (click again) and it will move on to the next index.\n\t\t * Repeat until loop.\n\t\t *  @type array\n\t\t */\n\t\t\"asSorting\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is searchable, and thus should be included\n\t\t * in the filtering or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSearchable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is sortable or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is currently visible in the table or not\n\t\t *  @type boolean\n\t\t */\n\t\t\"bVisible\": null,\n\t\n\t\t/**\n\t\t * Store for manual type assignment using the `column.type` option. This\n\t\t * is held in store so we can manipulate the column's `sType` property.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sManualType\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if HTML5 data attributes should be used as the data\n\t\t * source for filtering or sorting. True is either are.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @private\n\t\t */\n\t\t\"_bAttrSrc\": false,\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} nTd The TD node that has been created\n\t\t *  @param {*} sData The Data for the cell\n\t\t *  @param {array|object} oData The data for the whole row\n\t\t *  @param {int} iRow The row index for the aoData data store\n\t\t *  @default null\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\t/**\n\t\t * Function to get data from a cell in a column. You should <b>never</b>\n\t\t * access data directly through _aData internally in DataTables - always use\n\t\t * the method attached to this property. It allows mData to function as\n\t\t * required. This function is automatically assigned by the column\n\t\t * initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {string} sSpecific The specific data type you want to get -\n\t\t *    'display', 'type' 'filter' 'sort'\n\t\t *  @returns {*} The data for the cell from the given row's data\n\t\t *  @default null\n\t\t */\n\t\t\"fnGetData\": null,\n\t\n\t\t/**\n\t\t * Function to set data for a cell in the column. You should <b>never</b>\n\t\t * set the data directly to _aData internally in DataTables - always use\n\t\t * this method. It allows mData to function as required. This function\n\t\t * is automatically assigned by the column initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {*} sValue Value to set\n\t\t *  @default null\n\t\t */\n\t\t\"fnSetData\": null,\n\t\n\t\t/**\n\t\t * Property to read the value for the cells in the column from the data\n\t\t * source array / object. If null, then the default content is used, if a\n\t\t * function is given then the return from the function is used.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\t/**\n\t\t * Partner property to mData which is used (only when defined) to get\n\t\t * the data - i.e. it is basically the same as mData, but without the\n\t\t * 'set' option, and also the data fed to it is the result from mData.\n\t\t * This is the rendering method to match the data method of mData.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\t/**\n\t\t * Unique header TH/TD element for this column - this is what the sorting\n\t\t * listener is attached to (if sorting is enabled.)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTh\": null,\n\t\n\t\t/**\n\t\t * Unique footer TH/TD element for this column (if there is one). Not used\n\t\t * in DataTables as such, but can be used for plug-ins to reference the\n\t\t * footer for each column.\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTf\": null,\n\t\n\t\t/**\n\t\t * The class to apply to all TD elements in the table's TBODY for the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sClass\": null,\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t *  @type string\n\t\t */\n\t\t\"sContentPadding\": null,\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because mData\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\t/**\n\t\t * Name for the column, allowing reference to the column by name as well as\n\t\t * by index (needs a lookup to work by name).\n\t\t *  @type string\n\t\t */\n\t\t\"sName\": null,\n\t\n\t\t/**\n\t\t * Custom sorting data type - defines which of the available plug-ins in\n\t\t * afnSortData the custom sorting will use - if any is defined.\n\t\t *  @type string\n\t\t *  @default std\n\t\t */\n\t\t\"sSortDataType\": 'std',\n\t\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClass\": null,\n\t\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column -\n\t\t * when jQuery UI theming is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClassJUI\": null,\n\t\n\t\t/**\n\t\t * Title of the column - what is seen in the TH element (nTh).\n\t\t *  @type string\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\t/**\n\t\t * Column sorting and filtering type\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\t/**\n\t\t * Width of the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidth\": null,\n\t\n\t\t/**\n\t\t * Width of the column when it was first \"encountered\"\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidthOrig\": null\n\t};\n\t\n\t\n\t/*\n\t * Developer note: The properties of the object below are given in Hungarian\n\t * notation, that was used as the interface for DataTables prior to v1.10, however\n\t * from v1.10 onwards the primary interface is camel case. In order to avoid\n\t * breaking backwards compatibility utterly with this change, the Hungarian\n\t * version is still, internally the primary interface, but is is not documented\n\t * - hence the @name tags in each doc comment. This allows a Javascript function\n\t * to create a map from Hungarian notation to camel case (going the other direction\n\t * would require each property to be listed, which would add around 3K to the size\n\t * of DataTables, while this method is about a 0.5K hit).\n\t *\n\t * Ultimately this does pave the way for Hungarian notation to be dropped\n\t * completely, but that is a massive amount of work and will break current\n\t * installs (therefore is on-hold until v2).\n\t */\n\t\n\t/**\n\t * Initialisation options that can be given to DataTables at initialisation\n\t * time.\n\t *  @namespace\n\t */\n\tDataTable.defaults = {\n\t\t/**\n\t\t * An array of data to use for the table, passed in at initialisation which\n\t\t * will be used in preference to any data which is already in the DOM. This is\n\t\t * particularly useful for constructing tables purely in Javascript, for\n\t\t * example with a custom Ajax call.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.data\n\t\t *\n\t\t *  @example\n\t\t *    // Using a 2D array data source\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],\n\t\t *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\" },\n\t\t *          { \"title\": \"Browser\" },\n\t\t *          { \"title\": \"Platform\" },\n\t\t *          { \"title\": \"Version\" },\n\t\t *          { \"title\": \"Grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using an array of objects as a data source (`data`)\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 4.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  4,\n\t\t *            \"grade\":    \"X\"\n\t\t *          },\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 5.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  5,\n\t\t *            \"grade\":    \"C\"\n\t\t *          }\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\",   \"data\": \"engine\" },\n\t\t *          { \"title\": \"Browser\",  \"data\": \"browser\" },\n\t\t *          { \"title\": \"Platform\", \"data\": \"platform\" },\n\t\t *          { \"title\": \"Version\",  \"data\": \"version\" },\n\t\t *          { \"title\": \"Grade\",    \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaData\": null,\n\t\n\t\n\t\t/**\n\t\t * If ordering is enabled, then DataTables will perform a first pass sort on\n\t\t * initialisation. You can define which column(s) the sort is performed\n\t\t * upon, and the sorting direction, with this variable. The `sorting` array\n\t\t * should contain an array for each column to be sorted initially containing\n\t\t * the column's index and a direction string ('asc' or 'desc').\n\t\t *  @type array\n\t\t *  @default [[0,'asc']]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.order\n\t\t *\n\t\t *  @example\n\t\t *    // Sort by 3rd column first, and then 4th column\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": [[2,'asc'], [3,'desc']]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *    // No initial sorting\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": []\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaSorting\": [[0,'asc']],\n\t\n\t\n\t\t/**\n\t\t * This parameter is basically identical to the `sorting` parameter, but\n\t\t * cannot be overridden by user interaction with the table. What this means\n\t\t * is that you could have a column (visible or hidden) which the sorting\n\t\t * will always be forced on first - any sorting after that (from the user)\n\t\t * will then be performed as required. This can be useful for grouping rows\n\t\t * together.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.orderFixed\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderFixed\": [[0,'asc']]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\n\t\t/**\n\t\t * DataTables can be instructed to load data to display in the table from a\n\t\t * Ajax source. This option defines how that Ajax call is made and where to.\n\t\t *\n\t\t * The `ajax` property has three different modes of operation, depending on\n\t\t * how it is defined. These are:\n\t\t *\n\t\t * * `string` - Set the URL from where the data should be loaded from.\n\t\t * * `object` - Define properties for `jQuery.ajax`.\n\t\t * * `function` - Custom data get function\n\t\t *\n\t\t * `string`\n\t\t * --------\n\t\t *\n\t\t * As a string, the `ajax` property simply defines the URL from which\n\t\t * DataTables will load data.\n\t\t *\n\t\t * `object`\n\t\t * --------\n\t\t *\n\t\t * As an object, the parameters in the object are passed to\n\t\t * [jQuery.ajax](https://api.jquery.com/jQuery.ajax/) allowing fine control\n\t\t * of the Ajax request. DataTables has a number of default parameters which\n\t\t * you can override using this option. Please refer to the jQuery\n\t\t * documentation for a full description of the options available, although\n\t\t * the following parameters provide additional options in DataTables or\n\t\t * require special consideration:\n\t\t *\n\t\t * * `data` - As with jQuery, `data` can be provided as an object, but it\n\t\t *   can also be used as a function to manipulate the data DataTables sends\n\t\t *   to the server. The function takes a single parameter, an object of\n\t\t *   parameters with the values that DataTables has readied for sending. An\n\t\t *   object may be returned which will be merged into the DataTables\n\t\t *   defaults, or you can add the items to the object that was passed in and\n\t\t *   not return anything from the function. This supersedes `fnServerParams`\n\t\t *   from DataTables 1.9-.\n\t\t *\n\t\t * * `dataSrc` - By default DataTables will look for the property `data` (or\n\t\t *   `aaData` for compatibility with DataTables 1.9-) when obtaining data\n\t\t *   from an Ajax source or for server-side processing - this parameter\n\t\t *   allows that property to be changed. You can use Javascript dotted\n\t\t *   object notation to get a data source for multiple levels of nesting, or\n\t\t *   it my be used as a function. As a function it takes a single parameter,\n\t\t *   the JSON returned from the server, which can be manipulated as\n\t\t *   required, with the returned value being that used by DataTables as the\n\t\t *   data source for the table. This supersedes `sAjaxDataProp` from\n\t\t *   DataTables 1.9-.\n\t\t *\n\t\t * * `success` - Should not be overridden it is used internally in\n\t\t *   DataTables. To manipulate / transform the data returned by the server\n\t\t *   use `ajax.dataSrc`, or use `ajax` as a function (see below).\n\t\t *\n\t\t * `function`\n\t\t * ----------\n\t\t *\n\t\t * As a function, making the Ajax call is left up to yourself allowing\n\t\t * complete control of the Ajax request. Indeed, if desired, a method other\n\t\t * than Ajax could be used to obtain the required data, such as Web storage\n\t\t * or an AIR database.\n\t\t *\n\t\t * The function is given four parameters and no return is required. The\n\t\t * parameters are:\n\t\t *\n\t\t * 1. _object_ - Data to send to the server\n\t\t * 2. _function_ - Callback function that must be executed when the required\n\t\t *    data has been obtained. That data should be passed into the callback\n\t\t *    as the only parameter\n\t\t * 3. _object_ - DataTables settings object for the table\n\t\t *\n\t\t * Note that this supersedes `fnServerData` from DataTables 1.9-.\n\t\t *\n\t\t *  @type string|object|function\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.ajax\n\t\t *  @since 1.10.0\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax.\n\t\t *   // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": \"data.json\"\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to change\n\t\t *   // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"tableData\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to read data\n\t\t *   // from a plain array rather than an array in an object\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Manipulate the data returned from the server - add a link to data\n\t\t *   // (note this can, should, be done using `render` for the column - this\n\t\t *   // is just a simple example of how the data can be manipulated).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": function ( json ) {\n\t\t *         for ( var i=0, ien=json.length ; i<ien ; i++ ) {\n\t\t *           json[i][0] = '<a href=\"/message/'+json[i][0]+'>View message</a>';\n\t\t *         }\n\t\t *         return json;\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Add data to the request\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"data\": function ( d ) {\n\t\t *         return {\n\t\t *           \"extra_search\": $('#extra').val()\n\t\t *         };\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Send request as POST\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"type\": \"POST\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get the data from localStorage (could interface with a form for\n\t\t *   // adding, editing and removing rows).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": function (data, callback, settings) {\n\t\t *       callback(\n\t\t *         JSON.parse( localStorage.getItem('dataTablesData') )\n\t\t *       );\n\t\t *     }\n\t\t *   } );\n\t\t */\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to readily specify the entries in the length drop\n\t\t * down menu that DataTables shows when pagination is enabled. It can be\n\t\t * either a 1D array of options which will be used for both the displayed\n\t\t * option and the value, or a 2D array which will use the array in the first\n\t\t * position as the value, and the array in the second position as the\n\t\t * displayed options (useful for language strings such as 'All').\n\t\t *\n\t\t * Note that the `pageLength` property will be automatically set to the\n\t\t * first value given in this array, unless `pageLength` is also provided.\n\t\t *  @type array\n\t\t *  @default [ 10, 25, 50, 100 ]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.lengthMenu\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthMenu\": [[10, 25, 50, -1], [10, 25, 50, \"All\"]]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aLengthMenu\": [ 10, 25, 50, 100 ],\n\t\n\t\n\t\t/**\n\t\t * The `columns` option in the initialisation parameter allows you to define\n\t\t * details about the way individual columns behave. For a full list of\n\t\t * column options that can be set, please see\n\t\t * {@link DataTable.defaults.column}. Note that if you use `columns` to\n\t\t * define your columns, you must have an entry in the array for every single\n\t\t * column that you have in your table (these can be null if you don't which\n\t\t * to specify any options).\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.column\n\t\t */\n\t\t\"aoColumns\": null,\n\t\n\t\t/**\n\t\t * Very similar to `columns`, `columnDefs` allows you to target a specific\n\t\t * column, multiple columns, or all columns, using the `targets` property of\n\t\t * each object in the array. This allows great flexibility when creating\n\t\t * tables, as the `columnDefs` arrays can be of any length, targeting the\n\t\t * columns you specifically want. `columnDefs` may use any of the column\n\t\t * options available: {@link DataTable.defaults.column}, but it _must_\n\t\t * have `targets` defined in each object in the array. Values in the `targets`\n\t\t * array may be:\n\t\t *   <ul>\n\t\t *     <li>a string - class name will be matched on the TH for the column</li>\n\t\t *     <li>0 or a positive integer - column index counting from the left</li>\n\t\t *     <li>a negative integer - column index counting from the right</li>\n\t\t *     <li>the string \"_all\" - all columns (i.e. assign a default)</li>\n\t\t *   </ul>\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.columnDefs\n\t\t */\n\t\t\"aoColumnDefs\": null,\n\t\n\t\n\t\t/**\n\t\t * Basically the same as `search`, this parameter defines the individual column\n\t\t * filtering state at initialisation time. The array must be of the same size\n\t\t * as the number of columns, and each element be an object with the parameters\n\t\t * `search` and `escapeRegex` (the latter is optional). 'null' is also\n\t\t * accepted and the default will be used.\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.searchCols\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searchCols\": [\n\t\t *          null,\n\t\t *          { \"search\": \"My filter\" },\n\t\t *          null,\n\t\t *          { \"search\": \"^[0-9]\", \"escapeRegex\": false }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aoSearchCols\": [],\n\t\n\t\n\t\t/**\n\t\t * An array of CSS classes that should be applied to displayed rows. This\n\t\t * array may be of any length, and DataTables will apply each class\n\t\t * sequentially, looping when required.\n\t\t *  @type array\n\t\t *  @default null <i>Will take the values determined by the `oClasses.stripe*`\n\t\t *    options</i>\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.stripeClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stripeClasses\": [ 'strip1', 'strip2', 'strip3' ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"asStripeClasses\": null,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable automatic column width calculation. This can be disabled\n\t\t * as an optimisation (it takes some time to calculate the widths) if the\n\t\t * tables widths are passed in using `columns`.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.autoWidth\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"autoWidth\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bAutoWidth\": true,\n\t\n\t\n\t\t/**\n\t\t * Deferred rendering can provide DataTables with a huge speed boost when you\n\t\t * are using an Ajax or JS data source for the table. This option, when set to\n\t\t * true, will cause DataTables to defer the creation of the table elements for\n\t\t * each row until they are needed for a draw - saving a significant amount of\n\t\t * time.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.deferRender\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajax\": \"sources/arrays.txt\",\n\t\t *        \"deferRender\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDeferRender\": false,\n\t\n\t\n\t\t/**\n\t\t * Replace a DataTable which matches the given selector and replace it with\n\t\t * one which has the properties of the new initialisation object passed. If no\n\t\t * table matches the selector, then the new DataTable will be constructed as\n\t\t * per normal.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.destroy\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"srollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      // Some time later....\n\t\t *      $('#example').dataTable( {\n\t\t *        \"filter\": false,\n\t\t *        \"destroy\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDestroy\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering of data. Filtering in DataTables is \"smart\" in\n\t\t * that it allows the end user to input multiple words (space separated) and\n\t\t * will match a row containing those words, even if not in the order that was\n\t\t * specified (this allow matching across multiple columns). Note that if you\n\t\t * wish to use filtering in DataTables this must remain 'true' - to remove the\n\t\t * default filtering input box and retain filtering abilities, please use\n\t\t * {@link DataTable.defaults.dom}.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.searching\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searching\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bFilter\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the table information display. This shows information\n\t\t * about the data that is currently visible on the page, including information\n\t\t * about filtered data if that action is being performed.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.info\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"info\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bInfo\": true,\n\t\n\t\n\t\t/**\n\t\t * Allows the end user to select the size of a formatted page from a select\n\t\t * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.lengthChange\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthChange\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bLengthChange\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable pagination.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.paging\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"paging\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bPaginate\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of a 'processing' indicator when the table is\n\t\t * being processed (e.g. a sort). This is particularly useful for tables with\n\t\t * large amounts of data where it can take a noticeable amount of time to sort\n\t\t * the entries.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.processing\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"processing\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bProcessing\": false,\n\t\n\t\n\t\t/**\n\t\t * Retrieve the DataTables object for the given selector. Note that if the\n\t\t * table has already been initialised, this parameter will cause DataTables\n\t\t * to simply return the object that has already been set up - it will not take\n\t\t * account of any changes you might have made to the initialisation object\n\t\t * passed to DataTables (setting this parameter to true is an acknowledgement\n\t\t * that you understand this). `destroy` can be used to reinitialise a table if\n\t\t * you need.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.retrieve\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      initTable();\n\t\t *      tableActions();\n\t\t *    } );\n\t\t *\n\t\t *    function initTable ()\n\t\t *    {\n\t\t *      return $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false,\n\t\t *        \"retrieve\": true\n\t\t *      } );\n\t\t *    }\n\t\t *\n\t\t *    function tableActions ()\n\t\t *    {\n\t\t *      var table = initTable();\n\t\t *      // perform API operations with oTable\n\t\t *    }\n\t\t */\n\t\t\"bRetrieve\": false,\n\t\n\t\n\t\t/**\n\t\t * When vertical (y) scrolling is enabled, DataTables will force the height of\n\t\t * the table's viewport to the given height at all times (useful for layout).\n\t\t * However, this can look odd when filtering data down to a small data set,\n\t\t * and the footer is left \"floating\" further down. This parameter (when\n\t\t * enabled) will cause DataTables to collapse the table's viewport down when\n\t\t * the result set will fit within the given Y height.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollCollapse\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200\",\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bScrollCollapse\": false,\n\t\n\t\n\t\t/**\n\t\t * Configure DataTables to use server-side processing. Note that the\n\t\t * `ajax` parameter must also be given in order to give DataTables a\n\t\t * source to obtain the required data for each draw.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverSide\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"xhr.php\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bServerSide\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable sorting of columns. Sorting of individual columns can be\n\t\t * disabled by the `sortable` option for each column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.ordering\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ordering\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSort\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or display DataTables' ability to sort multiple columns at the\n\t\t * same time (activated by shift-click by the user).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderMulti\n\t\t *\n\t\t *  @example\n\t\t *    // Disable multiple column sorting ability\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderMulti\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortMulti\": true,\n\t\n\t\n\t\t/**\n\t\t * Allows control over whether DataTables should use the top (true) unique\n\t\t * cell that is found for a single column, or the bottom (false - default).\n\t\t * This is useful when using complex headers.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderCellsTop\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderCellsTop\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortCellsTop\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the addition of the classes `sorting\\_1`, `sorting\\_2` and\n\t\t * `sorting\\_3` to the columns which are currently being sorted on. This is\n\t\t * presented as a feature switch as it can increase processing time (while\n\t\t * classes are removed and added) so for large data sets you might want to\n\t\t * turn this off.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.orderClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderClasses\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortClasses\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable state saving. When enabled HTML5 `localStorage` will be\n\t\t * used to save table display information such as pagination information,\n\t\t * display length, filtering and sorting. As such when the end user reloads\n\t\t * the page the display display will match what thy had previously set up.\n\t\t *\n\t\t * Due to the use of `localStorage` the default state saving is not supported\n\t\t * in IE6 or 7. If state saving is required in those browsers, use\n\t\t * `stateSaveCallback` to provide a storage solution such as cookies.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.stateSave\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bStateSave\": false,\n\t\n\t\n\t\t/**\n\t\t * This function is called when a TR element is created (and all TD child\n\t\t * elements have been inserted), or registered if using a DOM source, allowing\n\t\t * manipulation of the TR element (adding classes etc).\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} dataIndex The index of this row in the internal aoData array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.createdRow\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"createdRow\": function( row, data, dataIndex ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" )\n\t\t *          {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedRow\": null,\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify any aspect you want about the created DOM.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.drawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"drawCallback\": function( settings ) {\n\t\t *          alert( 'DataTables has redrawn the table' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Identical to fnHeaderCallback() but for the table footer this function\n\t\t * allows you to modify the table footer on every 'draw' event.\n\t\t *  @type function\n\t\t *  @param {node} foot \"TR\" element for the footer\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.footerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"footerCallback\": function( tfoot, data, start, end, display ) {\n\t\t *          tfoot.getElementsByTagName('th')[0].innerHTML = \"Starting index is \"+start;\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnFooterCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * When rendering large numbers in the information element for the table\n\t\t * (i.e. \"Showing 1 to 10 of 57 entries\") DataTables will render large numbers\n\t\t * to have a comma separator for the 'thousands' units (e.g. 1 million is\n\t\t * rendered as \"1,000,000\") to help readability for the end user. This\n\t\t * function will override the default method DataTables uses.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {int} toFormat number to be formatted\n\t\t *  @returns {string} formatted string for DataTables to show the number\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.formatNumber\n\t\t *\n\t\t *  @example\n\t\t *    // Format a number using a single quote for the separator (note that\n\t\t *    // this can also be done with the language.thousands option)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"formatNumber\": function ( toFormat ) {\n\t\t *          return toFormat.toString().replace(\n\t\t *            /\\B(?=(\\d{3})+(?!\\d))/g, \"'\"\n\t\t *          );\n\t\t *        };\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnFormatNumber\": function ( toFormat ) {\n\t\t\treturn toFormat.toString().replace(\n\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g,\n\t\t\t\tthis.oLanguage.sThousands\n\t\t\t);\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify the header row. This can be used to calculate and\n\t\t * display useful information about the table.\n\t\t *  @type function\n\t\t *  @param {node} head \"TR\" element for the header\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.headerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"fheaderCallback\": function( head, data, start, end, display ) {\n\t\t *          head.getElementsByTagName('th')[0].innerHTML = \"Displaying \"+(end-start)+\" records\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnHeaderCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * The information element can be used to convey information about the current\n\t\t * state of the table. Although the internationalisation options presented by\n\t\t * DataTables are quite capable of dealing with most customisations, there may\n\t\t * be times where you wish to customise the string further. This callback\n\t\t * allows you to do exactly that.\n\t\t *  @type function\n\t\t *  @param {object} oSettings DataTables settings object\n\t\t *  @param {int} start Starting position in data for the draw\n\t\t *  @param {int} end End position in data for the draw\n\t\t *  @param {int} max Total number of rows in the table (regardless of\n\t\t *    filtering)\n\t\t *  @param {int} total Total number of rows in the data set, after filtering\n\t\t *  @param {string} pre The string that DataTables has formatted using it's\n\t\t *    own rules\n\t\t *  @returns {string} The string to be displayed in the information element.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.infoCallback\n\t\t *\n\t\t *  @example\n\t\t *    $('#example').dataTable( {\n\t\t *      \"infoCallback\": function( settings, start, end, max, total, pre ) {\n\t\t *        return start +\" to \"+ end;\n\t\t *      }\n\t\t *    } );\n\t\t */\n\t\t\"fnInfoCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Called when the table has been initialised. Normally DataTables will\n\t\t * initialise sequentially and there will be no need for this function,\n\t\t * however, this does not hold true when using external language information\n\t\t * since that is obtained using an async XHR call.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} json The JSON object request from the server - only\n\t\t *    present if client-side Ajax sourced data is used\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.initComplete\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"initComplete\": function(settings, json) {\n\t\t *          alert( 'DataTables has finished its initialisation.' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnInitComplete\": null,\n\t\n\t\n\t\t/**\n\t\t * Called at the very start of each table draw and can be used to cancel the\n\t\t * draw by returning false, any other return (including undefined) results in\n\t\t * the full draw occurring).\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @returns {boolean} False will cancel the draw, anything else (including no\n\t\t *    return) will allow it to complete.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.preDrawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"preDrawCallback\": function( settings ) {\n\t\t *          if ( $('#test').val() == 1 ) {\n\t\t *            return false;\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnPreDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * This function allows you to 'post process' each row after it have been\n\t\t * generated for each table draw, but before it is rendered on screen. This\n\t\t * function might be used for setting the row class name etc.\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} displayIndex The display index for the current table draw\n\t\t *  @param {int} displayIndexFull The index of the data in the full list of\n\t\t *    rows (after filtering)\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.rowCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"rowCallback\": function( row, data, displayIndex, displayIndexFull ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" ) {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnRowCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * This parameter allows you to override the default function which obtains\n\t\t * the data from the server so something more suitable for your application.\n\t\t * For example you could use POST data, or pull information from a Gears or\n\t\t * AIR database.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {string} source HTTP source to obtain the data from (`ajax`)\n\t\t *  @param {array} data A key/value pair object containing the data to send\n\t\t *    to the server\n\t\t *  @param {function} callback to be called on completion of the data get\n\t\t *    process that will draw the data on the page.\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverData\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerData\": null,\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t *  It is often useful to send extra data to the server when making an Ajax\n\t\t * request - for example custom filtering information, and this callback\n\t\t * function makes it trivial to send extra information to the server. The\n\t\t * passed in parameter is the data set that has been constructed by\n\t\t * DataTables, and you can add to this or modify it as you require.\n\t\t *  @type function\n\t\t *  @param {array} data Data array (array of objects which are name/value\n\t\t *    pairs) that has been constructed by DataTables and will be sent to the\n\t\t *    server. In the case of Ajax sourced data with server-side processing\n\t\t *    this will be an empty array, for server-side processing there will be a\n\t\t *    significant number of parameters!\n\t\t *  @returns {undefined} Ensure that you modify the data array passed in,\n\t\t *    as this is passed by reference.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverParams\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Load the table state. With this function you can define from where, and how, the\n\t\t * state of a table is loaded. By default DataTables will load from `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} callback Callback that can be executed when done. It\n\t\t *    should be passed the loaded state object.\n\t\t *  @return {object} The DataTables state object to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadCallback\": function (settings, callback) {\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_load\",\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"success\": function (json) {\n\t\t *              callback( json );\n\t\t *            }\n\t\t *          } );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadCallback\": function ( settings ) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(\n\t\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(\n\t\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the saved state prior to loading that state.\n\t\t * This callback is called when the table is loading state from the stored data, but\n\t\t * prior to the settings object being modified by the saved state. Note that for\n\t\t * plug-in authors, you should use the `stateLoadParams` event to load parameters for\n\t\t * a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that is to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never loaded\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Disallow state loading by returning false\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          return false;\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Callback that is called when the state has been loaded from the state saving method\n\t\t * and the DataTables settings object has been modified as a result of the loaded state.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that was loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoaded\n\t\t *\n\t\t *  @example\n\t\t *    // Show an alert with the filtering value that was saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoaded\": function (settings, data) {\n\t\t *          alert( 'Saved filter was: '+data.oSearch.sSearch );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoaded\": null,\n\t\n\t\n\t\t/**\n\t\t * Save the table state. This function allows you to define where and how the state\n\t\t * information for the table is stored By default DataTables will use `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveCallback\": function (settings, data) {\n\t\t *          // Send an Ajax request to the server with the state object\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_save\",\n\t\t *            \"data\": data,\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"method\": \"POST\"\n\t\t *            \"success\": function () {}\n\t\t *          } );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveCallback\": function ( settings, data ) {\n\t\t\ttry {\n\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(\n\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname,\n\t\t\t\t\tJSON.stringify( data )\n\t\t\t\t);\n\t\t\t} catch (e) {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the state to be saved. Called when the table\n\t\t * has changed state a new state save is required. This method allows modification of\n\t\t * the state saving object prior to actually doing the save, including addition or\n\t\t * other state properties or modification. Note that for plug-in authors, you should\n\t\t * use the `stateSaveParams` event to save parameters for a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Duration for which the saved state information is considered valid. After this period\n\t\t * has elapsed the state will be returned to the default.\n\t\t * Value is given in seconds.\n\t\t *  @type int\n\t\t *  @default 7200 <i>(2 hours)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.stateDuration\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateDuration\": 60*60*24; // 1 day\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iStateDuration\": 7200,\n\t\n\t\n\t\t/**\n\t\t * When enabled DataTables will not make a request to the server for the first\n\t\t * page draw - rather it will use the data already on the page (no sorting etc\n\t\t * will be applied to it), thus saving on an XHR at load time. `deferLoading`\n\t\t * is used to indicate that deferred loading is required, but it is also used\n\t\t * to tell DataTables how many records there are in the full table (allowing\n\t\t * the information element and pagination to be displayed correctly). In the case\n\t\t * where a filtering is applied to the table on initial load, this can be\n\t\t * indicated by giving the parameter as an array, where the first element is\n\t\t * the number of records available after filtering and the second element is the\n\t\t * number of records without filtering (allowing the table information element\n\t\t * to be shown correctly).\n\t\t *  @type int | array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.deferLoading\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records available in the table, no filtering applied\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": 57\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records after filtering, 100 without filtering (an initial filter applied)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": [ 57, 100 ],\n\t\t *        \"search\": {\n\t\t *          \"search\": \"my_filter\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iDeferLoading\": null,\n\t\n\t\n\t\t/**\n\t\t * Number of rows to display on a single page when using pagination. If\n\t\t * feature enabled (`lengthChange`) then the end user will be able to override\n\t\t * this to a custom setting using a pop-up menu.\n\t\t *  @type int\n\t\t *  @default 10\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pageLength\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pageLength\": 50\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayLength\": 10,\n\t\n\t\n\t\t/**\n\t\t * Define the starting point for data display when using DataTables with\n\t\t * pagination. Note that this parameter is the number of records, rather than\n\t\t * the page number, so if you have 10 records per page and want to start on\n\t\t * the third page, it should be \"20\".\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.displayStart\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"displayStart\": 20\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayStart\": 0,\n\t\n\t\n\t\t/**\n\t\t * By default DataTables allows keyboard navigation of the table (sorting, paging,\n\t\t * and filtering) by adding a `tabindex` attribute to the required elements. This\n\t\t * allows you to tab through the controls and press the enter key to activate them.\n\t\t * The tabindex is default 0, meaning that the tab follows the flow of the document.\n\t\t * You can overrule this using this parameter if you wish. Use a value of -1 to\n\t\t * disable built-in keyboard navigation.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.tabIndex\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"tabIndex\": 1\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\n\t\t/**\n\t\t * Classes that DataTables assigns to the various components and features\n\t\t * that it adds to the HTML table. This allows classes to be configured\n\t\t * during initialisation in addition to through the static\n\t\t * {@link DataTable.ext.oStdClasses} object).\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.classes\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\n\t\t/**\n\t\t * All strings that DataTables uses in the user interface that it creates\n\t\t * are defined in this object, allowing you to modified them individually or\n\t\t * completely replace them all as required.\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.language\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Strings that are used for WAI-ARIA labels and controls only (these are not\n\t\t\t * actually visible on the page, but will be read by screenreaders, and thus\n\t\t\t * must be internationalised as well).\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.aria\n\t\t\t */\n\t\t\t\"oAria\": {\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted ascending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortAscending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortAscending\": \" - click/return to sort ascending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortAscending\": \": activate to sort column ascending\",\n\t\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted descending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortDescending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortDescending\": \" - click/return to sort descending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortDescending\": \": activate to sort column descending\"\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * Pagination string used by DataTables for the built-in pagination\n\t\t\t * control types.\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.paginate\n\t\t\t */\n\t\t\t\"oPaginate\": {\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the first page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default First\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.first\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"first\": \"First page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sFirst\": \"First\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the last page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Last\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.last\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"last\": \"Last page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sLast\": \"Last\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'next' pagination button (to take the user to the\n\t\t\t\t * next page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Next\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.next\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"next\": \"Next page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sNext\": \"Next\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'previous' pagination button (to take the user to\n\t\t\t\t * the previous page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Previous\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.previous\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"previous\": \"Previous page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sPrevious\": \"Previous\"\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * This string is shown in preference to `zeroRecords` when the table is\n\t\t\t * empty of data (regardless of filtering). Note that this is an optional\n\t\t\t * parameter - if it is not given, the value of `zeroRecords` will be used\n\t\t\t * instead (either the default or given value).\n\t\t\t *  @type string\n\t\t\t *  @default No data available in table\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.emptyTable\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"emptyTable\": \"No data available in table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sEmptyTable\": \"No data available in table\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This string gives information to the end user about the information\n\t\t\t * that is current on display on the page. The following tokens can be\n\t\t\t * used in the string and will be dynamically replaced as the table\n\t\t\t * display updates. This tokens can be placed anywhere in the string, or\n\t\t\t * removed as needed by the language requires:\n\t\t\t *\n\t\t\t * * `\\_START\\_` - Display index of the first record on the current page\n\t\t\t * * `\\_END\\_` - Display index of the last record on the current page\n\t\t\t * * `\\_TOTAL\\_` - Number of records in the table after filtering\n\t\t\t * * `\\_MAX\\_` - Number of records in the table without filtering\n\t\t\t * * `\\_PAGE\\_` - Current page number\n\t\t\t * * `\\_PAGES\\_` - Total number of pages of data in the table\n\t\t\t *\n\t\t\t *  @type string\n\t\t\t *  @default Showing _START_ to _END_ of _TOTAL_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.info\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"info\": \"Showing page _PAGE_ of _PAGES_\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfo\": \"Showing _START_ to _END_ of _TOTAL_ entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Display information string for when the table is empty. Typically the\n\t\t\t * format of this string should match `info`.\n\t\t\t *  @type string\n\t\t\t *  @default Showing 0 to 0 of 0 entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoEmpty\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoEmpty\": \"No entries to show\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoEmpty\": \"Showing 0 to 0 of 0 entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When a user filters the information in a table, this string is appended\n\t\t\t * to the information (`info`) to give an idea of how strong the filtering\n\t\t\t * is. The variable _MAX_ is dynamically updated.\n\t\t\t *  @type string\n\t\t\t *  @default (filtered from _MAX_ total entries)\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoFiltered\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoFiltered\": \" - filtering from _MAX_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoFiltered\": \"(filtered from _MAX_ total entries)\",\n\t\n\t\n\t\t\t/**\n\t\t\t * If can be useful to append extra information to the info string at times,\n\t\t\t * and this variable does exactly that. This information will be appended to\n\t\t\t * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are\n\t\t\t * being used) at all times.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoPostFix\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoPostFix\": \"All records shown are derived from real information.\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoPostFix\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This decimal place operator is a little different from the other\n\t\t\t * language options since DataTables doesn't output floating point\n\t\t\t * numbers, so it won't ever use this for display of a number. Rather,\n\t\t\t * what this parameter does is modify the sort methods of the table so\n\t\t\t * that numbers which are in a format which has a character other than\n\t\t\t * a period (`.`) as a decimal place will be sorted numerically.\n\t\t\t *\n\t\t\t * Note that numbers with different decimal places cannot be shown in\n\t\t\t * the same table and still be sortable, the table must be consistent.\n\t\t\t * However, multiple different tables on the page can use different\n\t\t\t * decimal place characters.\n\t\t\t *  @type string\n\t\t\t *  @default \n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.decimal\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"decimal\": \",\"\n\t\t\t *          \"thousands\": \".\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sDecimal\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * DataTables has a build in number formatter (`formatNumber`) which is\n\t\t\t * used to format large numbers that are used in the table information.\n\t\t\t * By default a comma is used, but this can be trivially changed to any\n\t\t\t * character you wish with this parameter.\n\t\t\t *  @type string\n\t\t\t *  @default ,\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.thousands\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"thousands\": \"'\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sThousands\": \",\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Detail the action that will be taken when the drop down menu for the\n\t\t\t * pagination length option is changed. The '_MENU_' variable is replaced\n\t\t\t * with a default select list of 10, 25, 50 and 100, and can be replaced\n\t\t\t * with a custom select box if required.\n\t\t\t *  @type string\n\t\t\t *  @default Show _MENU_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.lengthMenu\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language change only\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": \"Display _MENU_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language and options change\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": 'Display <select>'+\n\t\t\t *            '<option value=\"10\">10</option>'+\n\t\t\t *            '<option value=\"20\">20</option>'+\n\t\t\t *            '<option value=\"30\">30</option>'+\n\t\t\t *            '<option value=\"40\">40</option>'+\n\t\t\t *            '<option value=\"50\">50</option>'+\n\t\t\t *            '<option value=\"-1\">All</option>'+\n\t\t\t *            '</select> records'\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLengthMenu\": \"Show _MENU_ entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When using Ajax sourced data and during the first draw when DataTables is\n\t\t\t * gathering the data, this message is shown in an empty row in the table to\n\t\t\t * indicate to the end user the the data is being loaded. Note that this\n\t\t\t * parameter is not used when loading data by server-side processing, just\n\t\t\t * Ajax sourced data with client-side processing.\n\t\t\t *  @type string\n\t\t\t *  @default Loading...\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.loadingRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"loadingRecords\": \"Please wait - loading...\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLoadingRecords\": \"Loading...\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text which is displayed when the table is processing a user action\n\t\t\t * (usually a sort command or similar).\n\t\t\t *  @type string\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.processing\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"processing\": \"DataTables is currently busy\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sProcessing\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Details the actions that will be taken when the user types into the\n\t\t\t * filtering input text box. The variable \"_INPUT_\", if used in the string,\n\t\t\t * is replaced with the HTML text box for the filtering input allowing\n\t\t\t * control over where it appears in the string. If \"_INPUT_\" is not given\n\t\t\t * then the input box is appended to the string automatically.\n\t\t\t *  @type string\n\t\t\t *  @default Search:\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.search\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Input text box will be appended at the end automatically\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Filter records:\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Specify where the filter should appear\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Apply filter _INPUT_ to table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sSearch\": \"Search:\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Assign a `placeholder` attribute to the search `input` element\n\t\t\t *  @type string\n\t\t\t *  @default \n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.searchPlaceholder\n\t\t\t */\n\t\t\t\"sSearchPlaceholder\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * All of the language information can be stored in a file on the\n\t\t\t * server-side, which DataTables will look up if this parameter is passed.\n\t\t\t * It must store the URL of the language file, which is in a JSON format,\n\t\t\t * and the object has the same properties as the oLanguage object in the\n\t\t\t * initialiser object (i.e. the above parameters). Please refer to one of\n\t\t\t * the example language files to see how this works in action.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string - i.e. disabled</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.url\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"url\": \"https://www.sprymedia.co.uk/dataTables/lang.txt\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sUrl\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text shown inside the table records when the is no information to be\n\t\t\t * displayed after filtering. `emptyTable` is shown when there is simply no\n\t\t\t * information in the table at all (regardless of filtering).\n\t\t\t *  @type string\n\t\t\t *  @default No matching records found\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.zeroRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"zeroRecords\": \"No records to display\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sZeroRecords\": \"No matching records found\"\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to have define the global filtering state at\n\t\t * initialisation time. As an object the `search` parameter must be\n\t\t * defined, but all other parameters are optional. When `regex` is true,\n\t\t * the search string will be treated as a regular expression, when false\n\t\t * (default) it will be treated as a straight string. When `smart`\n\t\t * DataTables will use it's smart filtering methods (to word match at\n\t\t * any point in the data), when false this will not be done.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.search\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"search\": {\"search\": \"Initial search\"}\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"oSearch\": $.extend( {}, DataTable.models.oSearch ),\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * By default DataTables will look for the property `data` (or `aaData` for\n\t\t * compatibility with DataTables 1.9-) when obtaining data from an Ajax\n\t\t * source or for server-side processing - this parameter allows that\n\t\t * property to be changed. You can use Javascript dotted object notation to\n\t\t * get a data source for multiple levels of nesting.\n\t\t *  @type string\n\t\t *  @default data\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxDataProp\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxDataProp\": \"data\",\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * You can instruct DataTables to load data from an external\n\t\t * source using this parameter (use aData if you want to pass data in you\n\t\t * already have). Simply provide a url a JSON object can be obtained from.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxSource\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxSource\": null,\n\t\n\t\n\t\t/**\n\t\t * This initialisation variable allows you to specify exactly where in the\n\t\t * DOM you want DataTables to inject the various controls it adds to the page\n\t\t * (for example you might want the pagination controls at the top of the\n\t\t * table). DIV elements (with or without a custom class) can also be added to\n\t\t * aid styling. The follow syntax is used:\n\t\t *   <ul>\n\t\t *     <li>The following options are allowed:\n\t\t *       <ul>\n\t\t *         <li>'l' - Length changing</li>\n\t\t *         <li>'f' - Filtering input</li>\n\t\t *         <li>'t' - The table!</li>\n\t\t *         <li>'i' - Information</li>\n\t\t *         <li>'p' - Pagination</li>\n\t\t *         <li>'r' - pRocessing</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following constants are allowed:\n\t\t *       <ul>\n\t\t *         <li>'H' - jQueryUI theme \"header\" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>\n\t\t *         <li>'F' - jQueryUI theme \"footer\" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following syntax is expected:\n\t\t *       <ul>\n\t\t *         <li>'&lt;' and '&gt;' - div elements</li>\n\t\t *         <li>'&lt;\"class\" and '&gt;' - div with a class</li>\n\t\t *         <li>'&lt;\"#id\" and '&gt;' - div with an ID</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>Examples:\n\t\t *       <ul>\n\t\t *         <li>'&lt;\"wrapper\"flipt&gt;'</li>\n\t\t *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *   </ul>\n\t\t *  @type string\n\t\t *  @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>\n\t\t *    <\"H\"lfr>t<\"F\"ip> <i>(when `jQueryUI` is true)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.dom\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"dom\": '&lt;\"top\"i&gt;rt&lt;\"bottom\"flp&gt;&lt;\"clear\"&gt;'\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDom\": \"lfrtip\",\n\t\n\t\n\t\t/**\n\t\t * Search delay option. This will throttle full table searches that use the\n\t\t * DataTables provided search input element (it does not effect calls to\n\t\t * `dt-api search()`, providing a delay before the search is made.\n\t\t *  @type integer\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.searchDelay\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searchDelay\": 200\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\n\t\t/**\n\t\t * DataTables features six different built-in options for the buttons to\n\t\t * display for pagination control:\n\t\t *\n\t\t * * `numbers` - Page number buttons only\n\t\t * * `simple` - 'Previous' and 'Next' buttons only\n\t\t * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers\n\t\t * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons\n\t\t * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers\n\t\t * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers\n\t\t *  \n\t\t * Further methods can be added using {@link DataTable.ext.oPagination}.\n\t\t *  @type string\n\t\t *  @default simple_numbers\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pagingType\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pagingType\": \"full_numbers\"\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"sPaginationType\": \"simple_numbers\",\n\t\n\t\n\t\t/**\n\t\t * Enable horizontal scrolling. When a table is too wide to fit into a\n\t\t * certain layout, or you have a large number of columns in the table, you\n\t\t * can enable x-scrolling to show the table in a viewport, which can be\n\t\t * scrolled. This property can be `true` which will allow the table to\n\t\t * scroll horizontally when needed, or any CSS unit, or a number (in which\n\t\t * case it will be treated as a pixel measurement). Setting as simply `true`\n\t\t * is recommended.\n\t\t *  @type boolean|string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollX\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": true,\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollX\": \"\",\n\t\n\t\n\t\t/**\n\t\t * This property can be used to force a DataTable to use more width than it\n\t\t * might otherwise do when x-scrolling is enabled. For example if you have a\n\t\t * table which requires to be well spaced, this parameter is useful for\n\t\t * \"over-sizing\" the table, and thus forcing scrolling. This property can by\n\t\t * any CSS unit, or a number (in which case it will be treated as a pixel\n\t\t * measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollXInner\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": \"100%\",\n\t\t *        \"scrollXInner\": \"110%\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollXInner\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Enable vertical scrolling. Vertical scrolling will constrain the DataTable\n\t\t * to the given height, and enable scrolling for any data which overflows the\n\t\t * current viewport. This can be used as an alternative to paging to display\n\t\t * a lot of data in a small area (although paging and scrolling can both be\n\t\t * enabled at the same time). This property can be any CSS unit, or a number\n\t\t * (in which case it will be treated as a pixel measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollY\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollY\": \"\",\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * Set the HTTP method that is used to make the Ajax call for server-side\n\t\t * processing or Ajax sourced data.\n\t\t *  @type string\n\t\t *  @default GET\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverMethod\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sServerMethod\": \"GET\",\n\t\n\t\n\t\t/**\n\t\t * DataTables makes use of renderers when displaying HTML elements for\n\t\t * a table. These renderers can be added or modified by plug-ins to\n\t\t * generate suitable mark-up for a site. For example the Bootstrap\n\t\t * integration plug-in for DataTables uses a paging button renderer to\n\t\t * display pagination buttons in the mark-up required by Bootstrap.\n\t\t *\n\t\t * For further information about the renderers available see\n\t\t * DataTable.ext.renderer\n\t\t *  @type string|object\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.renderer\n\t\t *\n\t\t */\n\t\t\"renderer\": null,\n\t\n\t\n\t\t/**\n\t\t * Set the data property name that DataTables should use to get a row's id\n\t\t * to set as the `id` property in the node.\n\t\t *  @type string\n\t\t *  @default DT_RowId\n\t\t *\n\t\t *  @name DataTable.defaults.rowId\n\t\t */\n\t\t\"rowId\": \"DT_RowId\"\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults );\n\t\n\t\n\t\n\t/*\n\t * Developer note - See note in model.defaults.js about the use of Hungarian\n\t * notation and camel case.\n\t */\n\t\n\t/**\n\t * Column options that can be given to DataTables at initialisation time.\n\t *  @namespace\n\t */\n\tDataTable.defaults.column = {\n\t\t/**\n\t\t * Define which column(s) an order will occur on for this column. This\n\t\t * allows a column's ordering to take multiple columns into account when\n\t\t * doing a sort or use the data from a different column. For example first\n\t\t * name / last name columns make sense to do a multi-column sort over the\n\t\t * two columns.\n\t\t *  @type array|int\n\t\t *  @default null <i>Takes the value of the column index automatically</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderData\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderData\": [ 0, 1 ], \"targets\": [ 0 ] },\n\t\t *          { \"orderData\": [ 1, 0 ], \"targets\": [ 1 ] },\n\t\t *          { \"orderData\": 2, \"targets\": [ 2 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderData\": [ 0, 1 ] },\n\t\t *          { \"orderData\": [ 1, 0 ] },\n\t\t *          { \"orderData\": 2 },\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aDataSort\": null,\n\t\t\"iDataSort\": -1,\n\t\n\t\n\t\t/**\n\t\t * You can control the default ordering direction, and even alter the\n\t\t * behaviour of the sort handler (i.e. only allow ascending ordering etc)\n\t\t * using this parameter.\n\t\t *  @type array\n\t\t *  @default [ 'asc', 'desc' ]\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderSequence\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderSequence\": [ \"asc\" ], \"targets\": [ 1 ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ], \"targets\": [ 2 ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ], \"targets\": [ 3 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          { \"orderSequence\": [ \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ] },\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"asSorting\": [ 'asc', 'desc' ],\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering on the data in this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.searchable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"searchable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"searchable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSearchable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable ordering on this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.visible\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"visible\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"visible\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bVisible\": true,\n\t\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} td The TD node that has been created\n\t\t *  @param {*} cellData The Data for the cell\n\t\t *  @param {array|object} rowData The data for the whole row\n\t\t *  @param {int} row The row index for the aoData data store\n\t\t *  @param {int} col The column index for aoColumns\n\t\t *\n\t\t *  @name DataTable.defaults.column.createdCell\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [3],\n\t\t *          \"createdCell\": function (td, cellData, rowData, row, col) {\n\t\t *            if ( cellData == \"1.7\" ) {\n\t\t *              $(td).css('color', 'blue')\n\t\t *            }\n\t\t *          }\n\t\t *        } ]\n\t\t *      });\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter has been replaced by `data` in DataTables to ensure naming\n\t\t * consistency. `dataProp` can still be used, as there is backwards\n\t\t * compatibility in DataTables for this option, but it is strongly\n\t\t * recommended that you use `data` in preference to `dataProp`.\n\t\t *  @name DataTable.defaults.column.dataProp\n\t\t */\n\t\n\t\n\t\t/**\n\t\t * This property can be used to read data from any data source property,\n\t\t * including deeply nested objects / properties. `data` can be given in a\n\t\t * number of different ways which effect its behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object. Note that\n\t\t *      function notation is recommended for use in `render` rather than\n\t\t *      `data` as it is much simpler to use as a renderer.\n\t\t * * `null` - use the original data source for the row rather than plucking\n\t\t *   data directly from it. This action has effects on two other\n\t\t *   initialisation options:\n\t\t *    * `defaultContent` - When null is given as the `data` option and\n\t\t *      `defaultContent` is specified for the column, the value defined by\n\t\t *      `defaultContent` will be used for the cell.\n\t\t *    * `render` - When null is used for the `data` option and the `render`\n\t\t *      option is specified for the column, the whole data source for the\n\t\t *      row is used for the renderer.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * `{array|object}` The data source for the row\n\t\t *      * `{string}` The type call data requested - this will be 'set' when\n\t\t *        setting data or 'filter', 'display', 'type', 'sort' or undefined\n\t\t *        when gathering data. Note that when `undefined` is given for the\n\t\t *        type DataTables expects to get the raw data for the object back<\n\t\t *      * `{*}` Data to set when the second parameter is 'set'.\n\t\t *    * Return:\n\t\t *      * The return value from the function is not required when 'set' is\n\t\t *        the type of call, but otherwise the return is what will be used\n\t\t *        for the data requested.\n\t\t *\n\t\t * Note that `data` is a getter and setter option. If you just require\n\t\t * formatting of data for output, you will likely want to use `render` which\n\t\t * is simply a getter and thus simpler to use.\n\t\t *\n\t\t * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The\n\t\t * name change reflects the flexibility of this property and is consistent\n\t\t * with the naming of mRender. If 'mDataProp' is given, then it will still\n\t\t * be used by DataTables, as it automatically maps the old name to the new\n\t\t * if required.\n\t\t *\n\t\t *  @type string|int|function|null\n\t\t *  @default null <i>Use automatically calculated column index</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.data\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Read table data from objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {value},\n\t\t *    //      \"version\": {value},\n\t\t *    //      \"grade\": {value}\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/objects.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform\" },\n\t\t *          { \"data\": \"version\" },\n\t\t *          { \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Read information from deeply nested objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {\n\t\t *    //         \"inner\": {value}\n\t\t *    //      },\n\t\t *    //      \"details\": [\n\t\t *    //         {value}, {value}\n\t\t *    //      ]\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform.inner\" },\n\t\t *          { \"data\": \"details.0\" },\n\t\t *          { \"data\": \"details.1\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `data` as a function to provide different information for\n\t\t *    // sorting, filtering and display. In this case, currency (price)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": function ( source, type, val ) {\n\t\t *            if (type === 'set') {\n\t\t *              source.price = val;\n\t\t *              // Store the computed display and filter values for efficiency\n\t\t *              source.price_display = val==\"\" ? \"\" : \"$\"+numberFormat(val);\n\t\t *              source.price_filter  = val==\"\" ? \"\" : \"$\"+numberFormat(val)+\" \"+val;\n\t\t *              return;\n\t\t *            }\n\t\t *            else if (type === 'display') {\n\t\t *              return source.price_display;\n\t\t *            }\n\t\t *            else if (type === 'filter') {\n\t\t *              return source.price_filter;\n\t\t *            }\n\t\t *            // 'sort', 'type' and undefined all just use the integer\n\t\t *            return source.price;\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using default content\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null,\n\t\t *          \"defaultContent\": \"Click to edit\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using array notation - outputting a list from an array\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"name[, ]\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\n\t\t/**\n\t\t * This property is the rendering partner to `data` and it is suggested that\n\t\t * when you want to manipulate data for display (including filtering,\n\t\t * sorting etc) without altering the underlying data for the table, use this\n\t\t * property. `render` can be considered to be the the read only companion to\n\t\t * `data` which is read / write (then as such more complex). Like `data`\n\t\t * this option can be given in a number of different ways to effect its\n\t\t * behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object.\n\t\t * * `object` - use different data for the different data types requested by\n\t\t *   DataTables ('filter', 'display', 'type' or 'sort'). The property names\n\t\t *   of the object is the data type the property refers to and the value can\n\t\t *   defined using an integer, string or function using the same rules as\n\t\t *   `render` normally does. Note that an `_` option _must_ be specified.\n\t\t *   This is the default value to use if you haven't specified a value for\n\t\t *   the data type requested by DataTables.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * {array|object} The data source for the row (based on `data`)\n\t\t *      * {string} The type call data requested - this will be 'filter',\n\t\t *        'display', 'type' or 'sort'.\n\t\t *      * {array|object} The full data source for the row (not based on\n\t\t *        `data`)\n\t\t *    * Return:\n\t\t *      * The return value from the function is what will be used for the\n\t\t *        data requested.\n\t\t *\n\t\t *  @type string|int|function|object|null\n\t\t *  @default null Use the data source value.\n\t\t *\n\t\t *  @name DataTable.defaults.column.render\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Create a comma separated list from an array of objects\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          {\n\t\t *            \"data\": \"platform\",\n\t\t *            \"render\": \"[, ].name\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Execute a function to obtain data\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": \"browserName()\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // As an object, extracting different data for the different types\n\t\t *    // This would be used with a data source such as:\n\t\t *    //   { \"phone\": 5552368, \"phone_filter\": \"5552368 555-2368\", \"phone_display\": \"555-2368\" }\n\t\t *    // Here the `phone` integer is used for sorting and type detection, while `phone_filter`\n\t\t *    // (which has both forms) is used for filtering for if a user inputs either format, while\n\t\t *    // the formatted phone number is the one that is shown in the table.\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": {\n\t\t *            \"_\": \"phone\",\n\t\t *            \"filter\": \"phone_filter\",\n\t\t *            \"display\": \"phone_display\"\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Use as a function to create a link from the data source\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"download_link\",\n\t\t *          \"render\": function ( data, type, full ) {\n\t\t *            return '<a href=\"'+data+'\">Download</a>';\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\n\t\t/**\n\t\t * Change the cell type created for the column - either TD cells or TH cells. This\n\t\t * can be useful as TH cells have semantic meaning in the table body, allowing them\n\t\t * to act as a header for a row (you may wish to add scope='row' to the TH elements).\n\t\t *  @type string\n\t\t *  @default td\n\t\t *\n\t\t *  @name DataTable.defaults.column.cellType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Make the first column use TH cells\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"cellType\": \"th\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sCellType\": \"td\",\n\t\n\t\n\t\t/**\n\t\t * Class to give to each cell in this column.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.class\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"class\": \"my_class\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"class\": \"my_class\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sClass\": \"\",\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t * Generally you shouldn't need this!\n\t\t *  @type string\n\t\t *  @default <i>Empty string<i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.contentPadding\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"contentPadding\": \"mmm\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sContentPadding\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because `data`\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.column.defaultContent\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\",\n\t\t *            \"targets\": [ -1 ]\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter is only used in DataTables' server-side processing. It can\n\t\t * be exceptionally useful to know what columns are being displayed on the\n\t\t * client side, and to map these to database fields. When defined, the names\n\t\t * also allow DataTables to reorder information from the server if it comes\n\t\t * back in an unexpected order (i.e. if you switch your columns around on the\n\t\t * client-side, your server-side code does not also need updating).\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.name\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"name\": \"engine\", \"targets\": [ 0 ] },\n\t\t *          { \"name\": \"browser\", \"targets\": [ 1 ] },\n\t\t *          { \"name\": \"platform\", \"targets\": [ 2 ] },\n\t\t *          { \"name\": \"version\", \"targets\": [ 3 ] },\n\t\t *          { \"name\": \"grade\", \"targets\": [ 4 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"name\": \"engine\" },\n\t\t *          { \"name\": \"browser\" },\n\t\t *          { \"name\": \"platform\" },\n\t\t *          { \"name\": \"version\" },\n\t\t *          { \"name\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sName\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Defines a data source type for the ordering which can be used to read\n\t\t * real-time information from the table (updating the internally cached\n\t\t * version) prior to ordering. This allows ordering to occur on user\n\t\t * editable elements such as form inputs.\n\t\t *  @type string\n\t\t *  @default std\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderDataType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderDataType\": \"dom-text\", \"targets\": [ 2, 3 ] },\n\t\t *          { \"type\": \"numeric\", \"targets\": [ 3 ] },\n\t\t *          { \"orderDataType\": \"dom-select\", \"targets\": [ 4 ] },\n\t\t *          { \"orderDataType\": \"dom-checkbox\", \"targets\": [ 5 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          { \"orderDataType\": \"dom-text\" },\n\t\t *          { \"orderDataType\": \"dom-text\", \"type\": \"numeric\" },\n\t\t *          { \"orderDataType\": \"dom-select\" },\n\t\t *          { \"orderDataType\": \"dom-checkbox\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sSortDataType\": \"std\",\n\t\n\t\n\t\t/**\n\t\t * The title of this column.\n\t\t *  @type string\n\t\t *  @default null <i>Derived from the 'TH' value for this column in the\n\t\t *    original HTML table.</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.title\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"title\": \"My column title\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"My column title\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\n\t\t/**\n\t\t * The type allows you to specify how the data for this column will be\n\t\t * ordered. Four types (string, numeric, date and html (which will strip\n\t\t * HTML tags before ordering)) are currently available. Note that only date\n\t\t * formats understood by Javascript's Date() object will be accepted as type\n\t\t * date. For example: \"Mar 26, 2008 5:03 PM\". May take the values: 'string',\n\t\t * 'numeric', 'date' or 'html' (by default). Further types can be adding\n\t\t * through plug-ins.\n\t\t *  @type string\n\t\t *  @default null <i>Auto-detected from raw data</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.type\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"type\": \"html\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"type\": \"html\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\n\t\t/**\n\t\t * Defining the width of the column, this parameter may take any CSS value\n\t\t * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not\n\t\t * been given a specific width through this interface ensuring that the table\n\t\t * remains readable.\n\t\t *  @type string\n\t\t *  @default null <i>Automatic</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.width\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"width\": \"20%\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"width\": \"20%\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sWidth\": null\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults.column );\n\t\n\t\n\t\n\t/**\n\t * DataTables settings object - this holds all the information needed for a\n\t * given table, including configuration, data and current application of the\n\t * table options. DataTables does not have a single instance for each DataTable\n\t * with the settings attached to that instance, but rather instances of the\n\t * DataTable \"class\" are created on-the-fly as needed (typically by a\n\t * $().dataTable() call) and the settings object is then applied to that\n\t * instance.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults} but this\n\t * one is the internal data store for DataTables's cache of columns. It should\n\t * NOT be manipulated outside of DataTables. Any configuration should be done\n\t * through the initialisation options.\n\t *  @namespace\n\t *  @todo Really should attach the settings object to individual instances so we\n\t *    don't need to create new instances on each $().dataTable() call (if the\n\t *    table already exists). It would also save passing oSettings around and\n\t *    into every single function. However, this is a very significant\n\t *    architecture change for DataTables and will almost certainly break\n\t *    backwards compatibility with older installations. This is something that\n\t *    will be done in 2.0.\n\t */\n\tDataTable.models.oSettings = {\n\t\t/**\n\t\t * Primary features of DataTables and their enablement state.\n\t\t *  @namespace\n\t\t */\n\t\t\"oFeatures\": {\n\t\n\t\t\t/**\n\t\t\t * Flag to say if DataTables should automatically try to calculate the\n\t\t\t * optimum table and columns widths (true) or not (false).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bAutoWidth\": null,\n\t\n\t\t\t/**\n\t\t\t * Delay the creation of TR and TD elements until they are actually\n\t\t\t * needed by a driven page draw. This can give a significant speed\n\t\t\t * increase for Ajax source and Javascript source data, but makes no\n\t\t\t * difference at all for DOM and server-side processing tables.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bDeferRender\": null,\n\t\n\t\t\t/**\n\t\t\t * Enable filtering on the table or not. Note that if this is disabled\n\t\t\t * then there is no filtering at all on the table, including fnFilter.\n\t\t\t * To just remove the filtering input use sDom and remove the 'f' option.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bFilter\": null,\n\t\n\t\t\t/**\n\t\t\t * Table information element (the 'Showing x of y records' div) enable\n\t\t\t * flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bInfo\": null,\n\t\n\t\t\t/**\n\t\t\t * Present a user control allowing the end user to change the page size\n\t\t\t * when pagination is enabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bLengthChange\": null,\n\t\n\t\t\t/**\n\t\t\t * Pagination enabled or not. Note that if this is disabled then length\n\t\t\t * changing must also be disabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bPaginate\": null,\n\t\n\t\t\t/**\n\t\t\t * Processing indicator enable flag whenever DataTables is enacting a\n\t\t\t * user request - typically an Ajax request for server-side processing.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bProcessing\": null,\n\t\n\t\t\t/**\n\t\t\t * Server-side processing enabled flag - when enabled DataTables will\n\t\t\t * get all data from the server for every draw - there is no filtering,\n\t\t\t * sorting or paging done on the client-side.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bServerSide\": null,\n\t\n\t\t\t/**\n\t\t\t * Sorting enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSort\": null,\n\t\n\t\t\t/**\n\t\t\t * Multi-column sorting\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortMulti\": null,\n\t\n\t\t\t/**\n\t\t\t * Apply a class to the columns which are being sorted to provide a\n\t\t\t * visual highlight or not. This can slow things down when enabled since\n\t\t\t * there is a lot of DOM interaction.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortClasses\": null,\n\t\n\t\t\t/**\n\t\t\t * State saving enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bStateSave\": null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Scrolling settings for a table.\n\t\t *  @namespace\n\t\t */\n\t\t\"oScroll\": {\n\t\t\t/**\n\t\t\t * When the table is shorter in height than sScrollY, collapse the\n\t\t\t * table container down to the height of the table (when true).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bCollapse\": null,\n\t\n\t\t\t/**\n\t\t\t * Width of the scrollbar for the web-browser's platform. Calculated\n\t\t\t * during table initialisation.\n\t\t\t *  @type int\n\t\t\t *  @default 0\n\t\t\t */\n\t\t\t\"iBarWidth\": 0,\n\t\n\t\t\t/**\n\t\t\t * Viewport width for horizontal scrolling. Horizontal scrolling is\n\t\t\t * disabled if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sX\": null,\n\t\n\t\t\t/**\n\t\t\t * Width to expand the table to when using x-scrolling. Typically you\n\t\t\t * should not need to use this.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t *  @deprecated\n\t\t\t */\n\t\t\t\"sXInner\": null,\n\t\n\t\t\t/**\n\t\t\t * Viewport height for vertical scrolling. Vertical scrolling is disabled\n\t\t\t * if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sY\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Language information for the table.\n\t\t *  @namespace\n\t\t *  @extends DataTable.defaults.oLanguage\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Information callback function. See\n\t\t\t * {@link DataTable.defaults.fnInfoCallback}\n\t\t\t *  @type function\n\t\t\t *  @default null\n\t\t\t */\n\t\t\t\"fnInfoCallback\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Browser support parameters\n\t\t *  @namespace\n\t\t */\n\t\t\"oBrowser\": {\n\t\t\t/**\n\t\t\t * Indicate if the browser incorrectly calculates width:100% inside a\n\t\t\t * scrolling element (IE6/7)\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollOversize\": false,\n\t\n\t\t\t/**\n\t\t\t * Determine if the vertical scrollbar is on the right or left of the\n\t\t\t * scrolling container - needed for rtl language layout, although not\n\t\t\t * all browsers move the scrollbar (Safari).\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollbarLeft\": false,\n\t\n\t\t\t/**\n\t\t\t * Flag for if `getBoundingClientRect` is fully supported or not\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bBounding\": false,\n\t\n\t\t\t/**\n\t\t\t * Browser scrollbar width\n\t\t\t *  @type integer\n\t\t\t *  @default 0\n\t\t\t */\n\t\t\t\"barWidth\": 0\n\t\t},\n\t\n\t\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * Array referencing the nodes which are used for the features. The\n\t\t * parameters of this object match what is allowed by sDom - i.e.\n\t\t *   <ul>\n\t\t *     <li>'l' - Length changing</li>\n\t\t *     <li>'f' - Filtering input</li>\n\t\t *     <li>'t' - The table!</li>\n\t\t *     <li>'i' - Information</li>\n\t\t *     <li>'p' - Pagination</li>\n\t\t *     <li>'r' - pRocessing</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aanFeatures\": [],\n\t\n\t\t/**\n\t\t * Store data information - see {@link DataTable.models.oRow} for detailed\n\t\t * information.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoData\": [],\n\t\n\t\t/**\n\t\t * Array of indexes which are in the current display (after filtering etc)\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplay\": [],\n\t\n\t\t/**\n\t\t * Array of indexes for display - no filtering\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplayMaster\": [],\n\t\n\t\t/**\n\t\t * Map of row ids to data indexes\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"aIds\": {},\n\t\n\t\t/**\n\t\t * Store information about each column that is in use\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoColumns\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's header\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeader\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's footer\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooter\": [],\n\t\n\t\t/**\n\t\t * Store the applied global search information in case we want to force a\n\t\t * research or compare the old search to a new one.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t */\n\t\t\"oPreviousSearch\": {},\n\t\n\t\t/**\n\t\t * Store the applied search for each column - see\n\t\t * {@link DataTable.models.oSearch} for the format that is used for the\n\t\t * filtering information for each column.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreSearchCols\": [],\n\t\n\t\t/**\n\t\t * Sorting that is applied to the table. Note that the inner arrays are\n\t\t * used in the following manner:\n\t\t * <ul>\n\t\t *   <li>Index 0 - column number</li>\n\t\t *   <li>Index 1 - current sorting direction</li>\n\t\t * </ul>\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @todo These inner arrays should really be objects\n\t\t */\n\t\t\"aaSorting\": null,\n\t\n\t\t/**\n\t\t * Sorting that is always applied to the table (i.e. prefixed in front of\n\t\t * aaSorting).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\t/**\n\t\t * Classes to use for the striping of a table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asStripeClasses\": null,\n\t\n\t\t/**\n\t\t * If restoring a table - we should restore its striping classes as well\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asDestroyStripes\": [],\n\t\n\t\t/**\n\t\t * If restoring a table - we should restore its width\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"sDestroyWidth\": 0,\n\t\n\t\t/**\n\t\t * Callback functions array for every time a row is inserted (i.e. on a draw).\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for the header on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeaderCallback\": [],\n\t\n\t\t/**\n\t\t * Callback function for the footer on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooterCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for draw callback functions\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for row created function\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCreatedCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for just before the table is redrawn. A return of\n\t\t * false will be used to cancel the draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for when the table has been initialised.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoInitComplete\": [],\n\t\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings to be stored for state saving, prior to\n\t\t * saving state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSaveParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings that have been stored for state saving\n\t\t * prior to using the stored values to restore the state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoadParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for operating on the settings object once the saved state has been\n\t\t * loaded\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoaded\": [],\n\t\n\t\t/**\n\t\t * Cache the table ID for quick access\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sTableId\": \"\",\n\t\n\t\t/**\n\t\t * The TABLE node for the main table\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTable\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the thead element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTHead\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tfoot element - if it exists\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTFoot\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tbody element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTBody\": null,\n\t\n\t\t/**\n\t\t * Cache the wrapper node (contains all DataTables controlled elements)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTableWrapper\": null,\n\t\n\t\t/**\n\t\t * Indicate if when using server-side processing the loading of data\n\t\t * should be deferred until the second draw.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDeferLoading\": false,\n\t\n\t\t/**\n\t\t * Indicate if all required information has been read in\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bInitialised\": false,\n\t\n\t\t/**\n\t\t * Information about open rows. Each object in the array has the parameters\n\t\t * 'nTr' and 'nParent'\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoOpenRows\": [],\n\t\n\t\t/**\n\t\t * Dictate the positioning of DataTables' control elements - see\n\t\t * {@link DataTable.model.oInit.sDom}.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDom\": null,\n\t\n\t\t/**\n\t\t * Search delay (in mS)\n\t\t *  @type integer\n\t\t *  @default null\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\t/**\n\t\t * Which type of pagination should be used.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default two_button\n\t\t */\n\t\t\"sPaginationType\": \"two_button\",\n\t\n\t\t/**\n\t\t * The state duration (for `stateSave`) in seconds.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iStateDuration\": 0,\n\t\n\t\t/**\n\t\t * Array of callback functions for state saving. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the JSON string to save that has been thus far created. Returns\n\t\t *       a JSON string to be inserted into a json object\n\t\t *       (i.e. '\"param\": [ 0, 1, 2]')</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSave\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for state loading. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the object stored. May return false to cancel state loading</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoad\": [],\n\t\n\t\t/**\n\t\t * State that was saved. Useful for back reference\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oSavedState\": null,\n\t\n\t\t/**\n\t\t * State that was loaded. Useful for back reference\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oLoadedState\": null,\n\t\n\t\t/**\n\t\t * Source url for AJAX data for the table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sAjaxSource\": null,\n\t\n\t\t/**\n\t\t * Property from a given object from which to read the table data from. This\n\t\t * can be an empty string (when not server-side processing), in which case\n\t\t * it is  assumed an an array is given directly.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sAjaxDataProp\": null,\n\t\n\t\t/**\n\t\t * The last jQuery XHR object that was used for server-side data gathering.\n\t\t * This can be used for working with the XHR information in one of the\n\t\t * callbacks\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"jqXHR\": null,\n\t\n\t\t/**\n\t\t * JSON returned from the server in the last Ajax request\n\t\t *  @type object\n\t\t *  @default undefined\n\t\t */\n\t\t\"json\": undefined,\n\t\n\t\t/**\n\t\t * Data submitted as part of the last Ajax request\n\t\t *  @type object\n\t\t *  @default undefined\n\t\t */\n\t\t\"oAjaxData\": undefined,\n\t\n\t\t/**\n\t\t * Function to get the server-side data.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnServerData\": null,\n\t\n\t\t/**\n\t\t * Functions which are called prior to sending an Ajax request so extra\n\t\t * parameters can easily be sent to the server\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoServerParams\": [],\n\t\n\t\t/**\n\t\t * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if\n\t\t * required).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sServerMethod\": null,\n\t\n\t\t/**\n\t\t * Format numbers for display.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnFormatNumber\": null,\n\t\n\t\t/**\n\t\t * List of options that can be used for the user selectable length menu.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLengthMenu\": null,\n\t\n\t\t/**\n\t\t * Counter for the draws that the table does. Also used as a tracker for\n\t\t * server-side processing\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iDraw\": 0,\n\t\n\t\t/**\n\t\t * Indicate if a redraw is being done - useful for Ajax\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDrawing\": false,\n\t\n\t\t/**\n\t\t * Draw index (iDraw) of the last error when parsing the returned data\n\t\t *  @type int\n\t\t *  @default -1\n\t\t */\n\t\t\"iDrawError\": -1,\n\t\n\t\t/**\n\t\t * Paging display length\n\t\t *  @type int\n\t\t *  @default 10\n\t\t */\n\t\t\"_iDisplayLength\": 10,\n\t\n\t\t/**\n\t\t * Paging start point - aiDisplay index\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"_iDisplayStart\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the result set\n\t\t * (i.e. before filtering), Use fnRecordsTotal rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsTotal\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the current display set\n\t\t * (i.e. after filtering). Use fnRecordsDisplay rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type boolean\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsDisplay\": 0,\n\t\n\t\t/**\n\t\t * The classes to use for the table\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if filtering has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bFiltered\": false,\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if sorting has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bSorted\": false,\n\t\n\t\t/**\n\t\t * Indicate that if multiple rows are in the header and there is more than\n\t\t * one unique cell per column, if the top one (true) or bottom one (false)\n\t\t * should be used for sorting / title by DataTables.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortCellsTop\": null,\n\t\n\t\t/**\n\t\t * Initialisation object that is used for the table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInit\": null,\n\t\n\t\t/**\n\t\t * Destroy callback functions - for plug-ins to attach themselves to the\n\t\t * destroy so they can clean up markup and events.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDestroyCallback\": [],\n\t\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, before filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsTotal\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsTotal * 1 :\n\t\t\t\tthis.aiDisplayMaster.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, after filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsDisplay\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsDisplay * 1 :\n\t\t\t\tthis.aiDisplay.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the display end point - aiDisplay index\n\t\t *  @type function\n\t\t */\n\t\t\"fnDisplayEnd\": function ()\n\t\t{\n\t\t\tvar\n\t\t\t\tlen      = this._iDisplayLength,\n\t\t\t\tstart    = this._iDisplayStart,\n\t\t\t\tcalc     = start + len,\n\t\t\t\trecords  = this.aiDisplay.length,\n\t\t\t\tfeatures = this.oFeatures,\n\t\t\t\tpaginate = features.bPaginate;\n\t\n\t\t\tif ( features.bServerSide ) {\n\t\t\t\treturn paginate === false || len === -1 ?\n\t\t\t\t\tstart + records :\n\t\t\t\t\tMath.min( start+len, this._iRecordsDisplay );\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn ! paginate || calc>records || len===-1 ?\n\t\t\t\t\trecords :\n\t\t\t\t\tcalc;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * The DataTables object for this table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInstance\": null,\n\t\n\t\t/**\n\t\t * Unique identifier for each instance of the DataTables object. If there\n\t\t * is an ID on the table node, then it takes that value, otherwise an\n\t\t * incrementing internal counter is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sInstance\": null,\n\t\n\t\t/**\n\t\t * tabindex attribute value that is added to DataTables control elements, allowing\n\t\t * keyboard navigation of the table and its controls.\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollHead\": null,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollFoot\": null,\n\t\n\t\t/**\n\t\t * Last applied sort\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLastSort\": [],\n\t\n\t\t/**\n\t\t * Stored plug-in instances\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oPlugins\": {},\n\t\n\t\t/**\n\t\t * Function used to get a row's id from the row's data\n\t\t *  @type function\n\t\t *  @default null\n\t\t */\n\t\t\"rowIdFn\": null,\n\t\n\t\t/**\n\t\t * Data location where to store a row's id\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"rowId\": null\n\t};\n\t\n\t/**\n\t * Extension object for DataTables that is used to provide all extension\n\t * options.\n\t *\n\t * Note that the `DataTable.ext` object is available through\n\t * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is\n\t * also aliased to `jQuery.fn.dataTableExt` for historic reasons.\n\t *  @namespace\n\t *  @extends DataTable.models.ext\n\t */\n\t\n\t\n\t/**\n\t * DataTables extensions\n\t * \n\t * This namespace acts as a collection area for plug-ins that can be used to\n\t * extend DataTables capabilities. Indeed many of the build in methods\n\t * use this method to provide their own capabilities (sorting methods for\n\t * example).\n\t *\n\t * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy\n\t * reasons\n\t *\n\t *  @namespace\n\t */\n\tDataTable.ext = _ext = {\n\t\t/**\n\t\t * Buttons. For use with the Buttons extension for DataTables. This is\n\t\t * defined here so other extensions can define buttons regardless of load\n\t\t * order. It is _not_ used by DataTables core.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tbuttons: {},\n\t\n\t\n\t\t/**\n\t\t * Element class names\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tclasses: {},\n\t\n\t\n\t\t/**\n\t\t * DataTables build type (expanded by the download builder)\n\t\t *\n\t\t *  @type string\n\t\t */\n\t\tbuilder: \"-source-\",\n\t\n\t\n\t\t/**\n\t\t * Error reporting.\n\t\t * \n\t\t * How should DataTables report an error. Can take the value 'alert',\n\t\t * 'throw', 'none' or a function.\n\t\t *\n\t\t *  @type string|function\n\t\t *  @default alert\n\t\t */\n\t\terrMode: \"alert\",\n\t\n\t\n\t\t/**\n\t\t * Feature plug-ins.\n\t\t * \n\t\t * This is an array of objects which describe the feature plug-ins that are\n\t\t * available to DataTables. These feature plug-ins are then available for\n\t\t * use through the `dom` initialisation option.\n\t\t * \n\t\t * Each feature plug-in is described by an object which must have the\n\t\t * following properties:\n\t\t * \n\t\t * * `fnInit` - function that is used to initialise the plug-in,\n\t\t * * `cFeature` - a character so the feature can be enabled by the `dom`\n\t\t *   instillation option. This is case sensitive.\n\t\t *\n\t\t * The `fnInit` function has the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *\n\t\t * And the following return is expected:\n\t\t * \n\t\t * * {node|null} The element which contains your feature. Note that the\n\t\t *   return may also be void if your plug-in does not require to inject any\n\t\t *   DOM elements into DataTables control (`dom`) - for example this might\n\t\t *   be useful when developing a plug-in which allows table control via\n\t\t *   keyboard entry\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    $.fn.dataTable.ext.features.push( {\n\t\t *      \"fnInit\": function( oSettings ) {\n\t\t *        return new TableTools( { \"oDTSettings\": oSettings } );\n\t\t *      },\n\t\t *      \"cFeature\": \"T\"\n\t\t *    } );\n\t\t */\n\t\tfeature: [],\n\t\n\t\n\t\t/**\n\t\t * Row searching.\n\t\t * \n\t\t * This method of searching is complimentary to the default type based\n\t\t * searching, and a lot more comprehensive as it allows you complete control\n\t\t * over the searching logic. Each element in this array is a function\n\t\t * (parameters described below) that is called for every row in the table,\n\t\t * and your logic decides if it should be included in the searching data set\n\t\t * or not.\n\t\t *\n\t\t * Searching functions have the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{array|object}` Data for the row to be processed (same as the\n\t\t *    original format that was passed in as the data source, or an array\n\t\t *    from a DOM data source\n\t\t * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which\n\t\t *    can be useful to retrieve the `TR` element if you need DOM interaction.\n\t\t *\n\t\t * And the following return is expected:\n\t\t *\n\t\t * * {boolean} Include the row in the searched result set (true) or not\n\t\t *   (false)\n\t\t *\n\t\t * Note that as with the main search ability in DataTables, technically this\n\t\t * is \"filtering\", since it is subtractive. However, for consistency in\n\t\t * naming we call it searching here.\n\t\t *\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @example\n\t\t *    // The following example shows custom search being applied to the\n\t\t *    // fourth column (i.e. the data[3] index) based on two input values\n\t\t *    // from the end-user, matching the data in a certain range.\n\t\t *    $.fn.dataTable.ext.search.push(\n\t\t *      function( settings, data, dataIndex ) {\n\t\t *        var min = document.getElementById('min').value * 1;\n\t\t *        var max = document.getElementById('max').value * 1;\n\t\t *        var version = data[3] == \"-\" ? 0 : data[3]*1;\n\t\t *\n\t\t *        if ( min == \"\" && max == \"\" ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min == \"\" && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && \"\" == max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        return false;\n\t\t *      }\n\t\t *    );\n\t\t */\n\t\tsearch: [],\n\t\n\t\n\t\t/**\n\t\t * Selector extensions\n\t\t *\n\t\t * The `selector` option can be used to extend the options available for the\n\t\t * selector modifier options (`selector-modifier` object data type) that\n\t\t * each of the three built in selector types offer (row, column and cell +\n\t\t * their plural counterparts). For example the Select extension uses this\n\t\t * mechanism to provide an option to select only rows, columns and cells\n\t\t * that have been marked as selected by the end user (`{selected: true}`),\n\t\t * which can be used in conjunction with the existing built in selector\n\t\t * options.\n\t\t *\n\t\t * Each property is an array to which functions can be pushed. The functions\n\t\t * take three attributes:\n\t\t *\n\t\t * * Settings object for the host table\n\t\t * * Options object (`selector-modifier` object type)\n\t\t * * Array of selected item indexes\n\t\t *\n\t\t * The return is an array of the resulting item indexes after the custom\n\t\t * selector has been applied.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tselector: {\n\t\t\tcell: [],\n\t\t\tcolumn: [],\n\t\t\trow: []\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Internal functions, exposed for used in plug-ins.\n\t\t * \n\t\t * Please note that you should not need to use the internal methods for\n\t\t * anything other than a plug-in (and even then, try to avoid if possible).\n\t\t * The internal function may change between releases.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tinternal: {},\n\t\n\t\n\t\t/**\n\t\t * Legacy configuration options. Enable and disable legacy options that\n\t\t * are available in DataTables.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tlegacy: {\n\t\t\t/**\n\t\t\t * Enable / disable DataTables 1.9 compatible server-side processing\n\t\t\t * requests\n\t\t\t *\n\t\t\t *  @type boolean\n\t\t\t *  @default null\n\t\t\t */\n\t\t\tajax: null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Pagination plug-in methods.\n\t\t * \n\t\t * Each entry in this object is a function and defines which buttons should\n\t\t * be shown by the pagination rendering method that is used for the table:\n\t\t * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the\n\t\t * buttons are displayed in the document, while the functions here tell it\n\t\t * what buttons to display. This is done by returning an array of button\n\t\t * descriptions (what each button will do).\n\t\t *\n\t\t * Pagination types (the four built in options and any additional plug-in\n\t\t * options defined here) can be used through the `paginationType`\n\t\t * initialisation parameter.\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{int} page` The current page index\n\t\t * 2. `{int} pages` The number of pages in the table\n\t\t *\n\t\t * Each function is expected to return an array where each element of the\n\t\t * array can be one of:\n\t\t *\n\t\t * * `first` - Jump to first page when activated\n\t\t * * `last` - Jump to last page when activated\n\t\t * * `previous` - Show previous page when activated\n\t\t * * `next` - Show next page when activated\n\t\t * * `{int}` - Show page of the index given\n\t\t * * `{array}` - A nested array containing the above elements to add a\n\t\t *   containing 'DIV' element (might be useful for styling).\n\t\t *\n\t\t * Note that DataTables v1.9- used this object slightly differently whereby\n\t\t * an object with two functions would be defined for each plug-in. That\n\t\t * ability is still supported by DataTables 1.10+ to provide backwards\n\t\t * compatibility, but this option of use is now decremented and no longer\n\t\t * documented in DataTables 1.10+.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    // Show previous, next and current page buttons only\n\t\t *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {\n\t\t *      return [ 'previous', page, 'next' ];\n\t\t *    };\n\t\t */\n\t\tpager: {},\n\t\n\t\n\t\trenderer: {\n\t\t\tpageButton: {},\n\t\t\theader: {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Ordering plug-ins - custom data source\n\t\t * \n\t\t * The extension options for ordering of data available here is complimentary\n\t\t * to the default type based ordering that DataTables typically uses. It\n\t\t * allows much greater control over the the data that is being used to\n\t\t * order a column, but is necessarily therefore more complex.\n\t\t * \n\t\t * This type of ordering is useful if you want to do ordering based on data\n\t\t * live from the DOM (for example the contents of an 'input' element) rather\n\t\t * than just the static string that DataTables knows of.\n\t\t * \n\t\t * The way these plug-ins work is that you create an array of the values you\n\t\t * wish to be ordering for the column in question and then return that\n\t\t * array. The data in the array much be in the index order of the rows in\n\t\t * the table (not the currently ordering order!). Which order data gathering\n\t\t * function is run here depends on the `dt-init columns.orderDataType`\n\t\t * parameter that is used for the column (if any).\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{int}` Target column index\n\t\t *\n\t\t * Each function is expected to return an array:\n\t\t *\n\t\t * * `{array}` Data for the column to be ordering upon\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    // Ordering using `input` node values\n\t\t *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )\n\t\t *    {\n\t\t *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {\n\t\t *        return $('input', td).val();\n\t\t *      } );\n\t\t *    }\n\t\t */\n\t\torder: {},\n\t\n\t\n\t\t/**\n\t\t * Type based plug-ins.\n\t\t *\n\t\t * Each column in DataTables has a type assigned to it, either by automatic\n\t\t * detection or by direct assignment using the `type` option for the column.\n\t\t * The type of a column will effect how it is ordering and search (plug-ins\n\t\t * can also make use of the column type if required).\n\t\t *\n\t\t * @namespace\n\t\t */\n\t\ttype: {\n\t\t\t/**\n\t\t\t * Type detection functions.\n\t\t\t *\n\t\t\t * The functions defined in this object are used to automatically detect\n\t\t\t * a column's type, making initialisation of DataTables super easy, even\n\t\t\t * when complex data is in the table.\n\t\t\t *\n\t\t\t * The functions defined take two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be analysed\n\t\t     *  2. `{settings}` DataTables settings object. This can be used to\n\t\t     *     perform context specific type detection - for example detection\n\t\t     *     based on language settings such as using a comma for a decimal\n\t\t     *     place. Generally speaking the options from the settings will not\n\t\t     *     be required\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Data type detected, or null if unknown (and thus\n\t\t\t *   pass it on to the other type detection functions.\n\t\t\t *\n\t\t\t *  @type array\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Currency type detection plug-in:\n\t\t\t *    $.fn.dataTable.ext.type.detect.push(\n\t\t\t *      function ( data, settings ) {\n\t\t\t *        // Check the numeric part\n\t\t\t *        if ( ! data.substring(1).match(/[0-9]/) ) {\n\t\t\t *          return null;\n\t\t\t *        }\n\t\t\t *\n\t\t\t *        // Check prefixed by currency\n\t\t\t *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {\n\t\t\t *          return 'currency';\n\t\t\t *        }\n\t\t\t *        return null;\n\t\t\t *      }\n\t\t\t *    );\n\t\t\t */\n\t\t\tdetect: [],\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based search formatting.\n\t\t\t *\n\t\t\t * The type based searching functions can be used to pre-format the\n\t\t\t * data to be search on. For example, it can be used to strip HTML\n\t\t\t * tags or to de-format telephone numbers for numeric only searching.\n\t\t\t *\n\t\t\t * Note that is a search is not defined for a column of a given type,\n\t\t\t * no search formatting will be performed.\n\t\t\t * \n\t\t\t * Pre-processing of searching data plug-ins - When you assign the sType\n\t\t\t * for a column (or have it automatically detected for you by DataTables\n\t\t\t * or a type detection plug-in), you will typically be using this for\n\t\t\t * custom sorting, but it can also be used to provide custom searching\n\t\t\t * by allowing you to pre-processing the data and returning the data in\n\t\t\t * the format that should be searched upon. This is done by adding\n\t\t\t * functions this object with a parameter name which matches the sType\n\t\t\t * for that target column. This is the corollary of <i>afnSortData</i>\n\t\t\t * for searching data.\n\t\t\t *\n\t\t\t * The functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for searching\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Formatted string that will be used for the searching.\n\t\t\t *\n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {\n\t\t\t *      return d.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" );\n\t\t\t *    }\n\t\t\t */\n\t\t\tsearch: {},\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based ordering.\n\t\t\t *\n\t\t\t * The column type tells DataTables what ordering to apply to the table\n\t\t\t * when a column is sorted upon. The order for each type that is defined,\n\t\t\t * is defined by the functions available in this object.\n\t\t\t *\n\t\t\t * Each ordering option can be described by three properties added to\n\t\t\t * this object:\n\t\t\t *\n\t\t\t * * `{type}-pre` - Pre-formatting function\n\t\t\t * * `{type}-asc` - Ascending order function\n\t\t\t * * `{type}-desc` - Descending order function\n\t\t\t *\n\t\t\t * All three can be used together, only `{type}-pre` or only\n\t\t\t * `{type}-asc` and `{type}-desc` together. It is generally recommended\n\t\t\t * that only `{type}-pre` is used, as this provides the optimal\n\t\t\t * implementation in terms of speed, although the others are provided\n\t\t\t * for compatibility with existing Javascript sort functions.\n\t\t\t *\n\t\t\t * `{type}-pre`: Functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for ordering\n\t\t\t *\n\t\t\t * And return:\n\t\t\t *\n\t\t\t * * `{*}` Data to be sorted upon\n\t\t\t *\n\t\t\t * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort\n\t\t\t * functions, taking two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data to compare to the second parameter\n\t\t     *  2. `{*}` Data to compare to the first parameter\n\t\t\t *\n\t\t\t * And returning:\n\t\t\t *\n\t\t\t * * `{*}` Ordering match: <0 if first parameter should be sorted lower\n\t\t\t *   than the second parameter, ===0 if the two parameters are equal and\n\t\t\t *   >0 if the first parameter should be sorted height than the second\n\t\t\t *   parameter.\n\t\t\t * \n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Numeric ordering of formatted numbers with a pre-formatter\n\t\t\t *    $.extend( $.fn.dataTable.ext.type.order, {\n\t\t\t *      \"string-pre\": function(x) {\n\t\t\t *        a = (a === \"-\" || a === \"\") ? 0 : a.replace( /[^\\d\\-\\.]/g, \"\" );\n\t\t\t *        return parseFloat( a );\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Case-sensitive string ordering, with no pre-formatting method\n\t\t\t *    $.extend( $.fn.dataTable.ext.order, {\n\t\t\t *      \"string-case-asc\": function(x,y) {\n\t\t\t *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t\t *      },\n\t\t\t *      \"string-case-desc\": function(x,y) {\n\t\t\t *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t */\n\t\t\torder: {}\n\t\t},\n\t\n\t\t/**\n\t\t * Unique DataTables instance counter\n\t\t *\n\t\t * @type int\n\t\t * @private\n\t\t */\n\t\t_unique: 0,\n\t\n\t\n\t\t//\n\t\t// Depreciated\n\t\t// The following properties are retained for backwards compatibility only.\n\t\t// The should not be used in new projects and will be removed in a future\n\t\t// version\n\t\t//\n\t\n\t\t/**\n\t\t * Version check function.\n\t\t *  @type function\n\t\t *  @depreciated Since 1.10\n\t\t */\n\t\tfnVersionCheck: DataTable.fnVersionCheck,\n\t\n\t\n\t\t/**\n\t\t * Index for what 'this' index API functions should use\n\t\t *  @type int\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tiApiIndex: 0,\n\t\n\t\n\t\t/**\n\t\t * jQuery UI class container\n\t\t *  @type object\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\toJUIClasses: {},\n\t\n\t\n\t\t/**\n\t\t * Software version\n\t\t *  @type string\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tsVersion: DataTable.version\n\t};\n\t\n\t\n\t//\n\t// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts\n\t//\n\t$.extend( _ext, {\n\t\tafnFiltering: _ext.search,\n\t\taTypes:       _ext.type.detect,\n\t\tofnSearch:    _ext.type.search,\n\t\toSort:        _ext.type.order,\n\t\tafnSortData:  _ext.order,\n\t\taoFeatures:   _ext.feature,\n\t\toApi:         _ext.internal,\n\t\toStdClasses:  _ext.classes,\n\t\toPagination:  _ext.pager\n\t} );\n\t\n\t\n\t$.extend( DataTable.ext.classes, {\n\t\t\"sTable\": \"dataTable\",\n\t\t\"sNoFooter\": \"no-footer\",\n\t\n\t\t/* Paging buttons */\n\t\t\"sPageButton\": \"paginate_button\",\n\t\t\"sPageButtonActive\": \"current\",\n\t\t\"sPageButtonDisabled\": \"disabled\",\n\t\n\t\t/* Striping classes */\n\t\t\"sStripeOdd\": \"odd\",\n\t\t\"sStripeEven\": \"even\",\n\t\n\t\t/* Empty row */\n\t\t\"sRowEmpty\": \"dataTables_empty\",\n\t\n\t\t/* Features */\n\t\t\"sWrapper\": \"dataTables_wrapper\",\n\t\t\"sFilter\": \"dataTables_filter\",\n\t\t\"sInfo\": \"dataTables_info\",\n\t\t\"sPaging\": \"dataTables_paginate paging_\", /* Note that the type is postfixed */\n\t\t\"sLength\": \"dataTables_length\",\n\t\t\"sProcessing\": \"dataTables_processing\",\n\t\n\t\t/* Sorting */\n\t\t\"sSortAsc\": \"sorting_asc\",\n\t\t\"sSortDesc\": \"sorting_desc\",\n\t\t\"sSortable\": \"sorting\", /* Sortable in both directions */\n\t\t\"sSortableAsc\": \"sorting_desc_disabled\",\n\t\t\"sSortableDesc\": \"sorting_asc_disabled\",\n\t\t\"sSortableNone\": \"sorting_disabled\",\n\t\t\"sSortColumn\": \"sorting_\", /* Note that an int is postfixed for the sorting order */\n\t\n\t\t/* Filtering */\n\t\t\"sFilterInput\": \"\",\n\t\n\t\t/* Page length */\n\t\t\"sLengthSelect\": \"\",\n\t\n\t\t/* Scrolling */\n\t\t\"sScrollWrapper\": \"dataTables_scroll\",\n\t\t\"sScrollHead\": \"dataTables_scrollHead\",\n\t\t\"sScrollHeadInner\": \"dataTables_scrollHeadInner\",\n\t\t\"sScrollBody\": \"dataTables_scrollBody\",\n\t\t\"sScrollFoot\": \"dataTables_scrollFoot\",\n\t\t\"sScrollFootInner\": \"dataTables_scrollFootInner\",\n\t\n\t\t/* Misc */\n\t\t\"sHeaderTH\": \"\",\n\t\t\"sFooterTH\": \"\",\n\t\n\t\t// Deprecated\n\t\t\"sSortJUIAsc\": \"\",\n\t\t\"sSortJUIDesc\": \"\",\n\t\t\"sSortJUI\": \"\",\n\t\t\"sSortJUIAscAllowed\": \"\",\n\t\t\"sSortJUIDescAllowed\": \"\",\n\t\t\"sSortJUIWrapper\": \"\",\n\t\t\"sSortIcon\": \"\",\n\t\t\"sJUIHeader\": \"\",\n\t\t\"sJUIFooter\": \"\"\n\t} );\n\t\n\t\n\tvar extPagination = DataTable.ext.pager;\n\t\n\tfunction _numbers ( page, pages ) {\n\t\tvar\n\t\t\tnumbers = [],\n\t\t\tbuttons = extPagination.numbers_length,\n\t\t\thalf = Math.floor( buttons / 2 ),\n\t\t\ti = 1;\n\t\n\t\tif ( pages <= buttons ) {\n\t\t\tnumbers = _range( 0, pages );\n\t\t}\n\t\telse if ( page <= half ) {\n\t\t\tnumbers = _range( 0, buttons-2 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t}\n\t\telse if ( page >= pages - 1 - half ) {\n\t\t\tnumbers = _range( pages-(buttons-2), pages );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\t\telse {\n\t\t\tnumbers = _range( page-half+2, page+half-1 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' );\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\t\n\t\tnumbers.DT_el = 'span';\n\t\treturn numbers;\n\t}\n\t\n\t\n\t$.extend( extPagination, {\n\t\tsimple: function ( page, pages ) {\n\t\t\treturn [ 'previous', 'next' ];\n\t\t},\n\t\n\t\tfull: function ( page, pages ) {\n\t\t\treturn [  'first', 'previous', 'next', 'last' ];\n\t\t},\n\t\n\t\tnumbers: function ( page, pages ) {\n\t\t\treturn [ _numbers(page, pages) ];\n\t\t},\n\t\n\t\tsimple_numbers: function ( page, pages ) {\n\t\t\treturn [ 'previous', _numbers(page, pages), 'next' ];\n\t\t},\n\t\n\t\tfull_numbers: function ( page, pages ) {\n\t\t\treturn [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];\n\t\t},\n\t\t\n\t\tfirst_last_numbers: function (page, pages) {\n\t \t\treturn ['first', _numbers(page, pages), 'last'];\n\t \t},\n\t\n\t\t// For testing and plug-ins to use\n\t\t_numbers: _numbers,\n\t\n\t\t// Number of number buttons (including ellipsis) to show. _Must be odd!_\n\t\tnumbers_length: 7\n\t} );\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\tpageButton: {\n\t\t\t_: function ( settings, host, idx, buttons, page, pages ) {\n\t\t\t\tvar classes = settings.oClasses;\n\t\t\t\tvar lang = settings.oLanguage.oPaginate;\n\t\t\t\tvar aria = settings.oLanguage.oAria.paginate || {};\n\t\t\t\tvar btnDisplay, btnClass;\n\t\n\t\t\t\tvar attach = function( container, buttons ) {\n\t\t\t\t\tvar i, ien, node, button;\n\t\t\t\t\tvar disabledClass = classes.sPageButtonDisabled;\n\t\t\t\t\tvar clickHandler = function ( e ) {\n\t\t\t\t\t\t_fnPageChange( settings, e.data.action, true );\n\t\t\t\t\t};\n\t\n\t\t\t\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\t\t\t\tbutton = buttons[i];\n\t\n\t\t\t\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\t\t\t\tvar inner = $( '<'+(button.DT_el || 'div')+'/>' )\n\t\t\t\t\t\t\t\t.appendTo( container );\n\t\t\t\t\t\t\tattach( inner, button );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar disabled = false;\n\t\n\t\t\t\t\t\t\tbtnDisplay = null;\n\t\t\t\t\t\t\tbtnClass = button;\n\t\n\t\t\t\t\t\t\tswitch ( button ) {\n\t\t\t\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\t\t\t\tcontainer.append('<span class=\"ellipsis\">&#x2026;</span>');\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'first':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\n\t\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\n\t\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'next':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\n\t\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'last':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\n\t\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tbtnDisplay = settings.fnFormatNumber( button + 1 );\n\t\t\t\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t\t\t\tclasses.sPageButtonActive : '';\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif ( btnDisplay !== null ) {\n\t\t\t\t\t\t\t\tvar tag = settings.oInit.pagingTag || 'a';\n\t\n\t\t\t\t\t\t\t\tif (disabled) {\n\t\t\t\t\t\t\t\t\tbtnClass += ' ' + disabledClass;\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\tnode = $('<'+tag+'>', {\n\t\t\t\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t\t\t'aria-current': btnClass === classes.sPageButtonActive ? 'page' : null,\n\t\t\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex,\n\t\t\t\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t\t\t\t.appendTo( container );\n\t\n\t\t\t\t\t\t\t\t_fnBindAction(\n\t\t\t\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t\t// inside an iframe or frame. Try / catch the error. Not good for\n\t\t\t\t// accessibility, but neither are frames.\n\t\t\t\tvar activeEl;\n\t\n\t\t\t\ttry {\n\t\t\t\t\t// Because this approach is destroying and recreating the paging\n\t\t\t\t\t// elements, focus is lost on the select button which is bad for\n\t\t\t\t\t// accessibility. So we want to restore focus once the draw has\n\t\t\t\t\t// completed\n\t\t\t\t\tactiveEl = $(host).find(document.activeElement).data('dt-idx');\n\t\t\t\t}\n\t\t\t\tcatch (e) {}\n\t\n\t\t\t\tattach( $(host).empty(), buttons );\n\t\n\t\t\t\tif ( activeEl !== undefined ) {\n\t\t\t\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t\n\t\n\t// Built in type detection. See model.ext.aTypes for information about\n\t// what is required from this methods.\n\t$.extend( DataTable.ext.type.detect, [\n\t\t// Plain numbers - first since V8 detects some plain numbers as dates\n\t\t// e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal ) ? 'num'+decimal : null;\n\t\t},\n\t\n\t\t// Dates (only those recognised by the browser's Date.parse)\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\t// V8 tries _very_ hard to make a string passed into `Date.parse()`\n\t\t\t// valid, so we need to use a regex to restrict date formats. Use a\n\t\t\t// plug-in for anything other than ISO8601 style strings\n\t\t\tif ( d && !(d instanceof Date) && ! _re_date.test(d) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar parsed = Date.parse(d);\n\t\t\treturn (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;\n\t\t},\n\t\n\t\t// Formatted numbers\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null;\n\t\t},\n\t\n\t\t// HTML numeric\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null;\n\t\t},\n\t\n\t\t// HTML numeric, formatted\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null;\n\t\t},\n\t\n\t\t// HTML (this is strict checking - there must be html)\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ?\n\t\t\t\t'html' : null;\n\t\t}\n\t] );\n\t\n\t\n\t\n\t// Filter formatting functions. See model.ext.ofnSearch for information about\n\t// what is required from these methods.\n\t// \n\t// Note that additional search methods are added for the html numbers and\n\t// html formatted numbers by `_addNumericSort()` when we know what the decimal\n\t// place is\n\t\n\t\n\t$.extend( DataTable.ext.type.search, {\n\t\thtml: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\tdata :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata\n\t\t\t\t\t\t.replace( _re_new_lines, \" \" )\n\t\t\t\t\t\t.replace( _re_html, \"\" ) :\n\t\t\t\t\t'';\n\t\t},\n\t\n\t\tstring: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\tdata :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata.replace( _re_new_lines, \" \" ) :\n\t\t\t\t\tdata;\n\t\t}\n\t} );\n\t\n\t\n\t\n\tvar __numericReplace = function ( d, decimalPlace, re1, re2 ) {\n\t\tif ( d !== 0 && (!d || d === '-') ) {\n\t\t\treturn -Infinity;\n\t\t}\n\t\t\n\t\tvar type = typeof d;\n\t\n\t\tif (type === 'number' || type === 'bigint') {\n\t\t\treturn d;\n\t\t}\n\t\n\t\t// If a decimal place other than `.` is used, it needs to be given to the\n\t\t// function so we can detect it and replace with a `.` which is the only\n\t\t// decimal place Javascript recognises - it is not locale aware.\n\t\tif ( decimalPlace ) {\n\t\t\td = _numToDecimal( d, decimalPlace );\n\t\t}\n\t\n\t\tif ( d.replace ) {\n\t\t\tif ( re1 ) {\n\t\t\t\td = d.replace( re1, '' );\n\t\t\t}\n\t\n\t\t\tif ( re2 ) {\n\t\t\t\td = d.replace( re2, '' );\n\t\t\t}\n\t\t}\n\t\n\t\treturn d * 1;\n\t};\n\t\n\t\n\t// Add the numeric 'deformatting' functions for sorting and search. This is done\n\t// in a function to provide an easy ability for the language options to add\n\t// additional methods if a non-period decimal place is used.\n\tfunction _addNumericSort ( decimalPlace ) {\n\t\t$.each(\n\t\t\t{\n\t\t\t\t// Plain numbers\n\t\t\t\t\"num\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace );\n\t\t\t\t},\n\t\n\t\t\t\t// Formatted numbers\n\t\t\t\t\"num-fmt\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_formatted_numeric );\n\t\t\t\t},\n\t\n\t\t\t\t// HTML numeric\n\t\t\t\t\"html-num\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html );\n\t\t\t\t},\n\t\n\t\t\t\t// HTML numeric, formatted\n\t\t\t\t\"html-num-fmt\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html, _re_formatted_numeric );\n\t\t\t\t}\n\t\t\t},\n\t\t\tfunction ( key, fn ) {\n\t\t\t\t// Add the ordering method\n\t\t\t\t_ext.type.order[ key+decimalPlace+'-pre' ] = fn;\n\t\n\t\t\t\t// For HTML types add a search formatter that will strip the HTML\n\t\t\t\tif ( key.match(/^html\\-/) ) {\n\t\t\t\t\t_ext.type.search[ key+decimalPlace ] = _ext.type.search.html;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\t\n\t\n\t// Default sort methods\n\t$.extend( _ext.type.order, {\n\t\t// Dates\n\t\t\"date-pre\": function ( d ) {\n\t\t\tvar ts = Date.parse( d );\n\t\t\treturn isNaN(ts) ? -Infinity : ts;\n\t\t},\n\t\n\t\t// html\n\t\t\"html-pre\": function ( a ) {\n\t\t\treturn _empty(a) ?\n\t\t\t\t'' :\n\t\t\t\ta.replace ?\n\t\t\t\t\ta.replace( /<.*?>/g, \"\" ).toLowerCase() :\n\t\t\t\t\ta+'';\n\t\t},\n\t\n\t\t// string\n\t\t\"string-pre\": function ( a ) {\n\t\t\t// This is a little complex, but faster than always calling toString,\n\t\t\t// https://jsperf.com/tostring-v-check\n\t\t\treturn _empty(a) ?\n\t\t\t\t'' :\n\t\t\t\ttypeof a === 'string' ?\n\t\t\t\t\ta.toLowerCase() :\n\t\t\t\t\t! a.toString ?\n\t\t\t\t\t\t'' :\n\t\t\t\t\t\ta.toString();\n\t\t},\n\t\n\t\t// string-asc and -desc are retained only for compatibility with the old\n\t\t// sort methods\n\t\t\"string-asc\": function ( x, y ) {\n\t\t\treturn ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t},\n\t\n\t\t\"string-desc\": function ( x, y ) {\n\t\t\treturn ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t}\n\t} );\n\t\n\t\n\t// Numeric sorting types - order doesn't matter here\n\t_addNumericSort( '' );\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\theader: {\n\t\t\t_: function ( settings, cell, column, classes ) {\n\t\t\t\t// No additional mark-up required\n\t\t\t\t// Attach a sort listener to update on sort - note that using the\n\t\t\t\t// `DT` namespace will allow the event to be removed automatically\n\t\t\t\t// on destroy, while the `dt` namespaced event is the one we are\n\t\t\t\t// listening for\n\t\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\t\tif ( settings !== ctx ) { // need to check this this is the host\n\t\t\t\t\t\treturn;               // table, not a nested one\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar colIdx = column.idx;\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tclasses.sSortAsc +' '+\n\t\t\t\t\t\t\tclasses.sSortDesc\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t},\n\t\n\t\t\tjqueryui: function ( settings, cell, column, classes ) {\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.addClass( classes.sSortJUIWrapper )\n\t\t\t\t\t.append( cell.contents() )\n\t\t\t\t\t.append( $('<span/>')\n\t\t\t\t\t\t.addClass( classes.sSortIcon+' '+column.sSortingClassJUI )\n\t\t\t\t\t)\n\t\t\t\t\t.appendTo( cell );\n\t\n\t\t\t\t// Attach a sort listener to update on sort\n\t\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar colIdx = column.idx;\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass( classes.sSortAsc +\" \"+classes.sSortDesc )\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.find( 'span.'+classes.sSortIcon )\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tclasses.sSortJUIAsc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDesc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUI +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIAscAllowed +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDescAllowed\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortJUIAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortJUIDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClassJUI\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t/*\n\t * Public helper functions. These aren't used internally by DataTables, or\n\t * called by any of the options passed into DataTables, but they can be used\n\t * externally by developers working with DataTables. They are helper functions\n\t * to make working with DataTables a little bit easier.\n\t */\n\t\n\tvar __htmlEscapeEntities = function ( d ) {\n\t\tif (Array.isArray(d)) {\n\t\t\td = d.join(',');\n\t\t}\n\t\n\t\treturn typeof d === 'string' ?\n\t\t\td\n\t\t\t\t.replace(/&/g, '&amp;')\n\t\t\t\t.replace(/</g, '&lt;')\n\t\t\t\t.replace(/>/g, '&gt;')\n\t\t\t\t.replace(/\"/g, '&quot;') :\n\t\t\td;\n\t};\n\t\n\t// Common logic for moment, luxon or a date action\n\tfunction __mld( dt, momentFn, luxonFn, dateFn, arg1 ) {\n\t\tif (window.moment) {\n\t\t\treturn dt[momentFn]( arg1 );\n\t\t}\n\t\telse if (window.luxon) {\n\t\t\treturn dt[luxonFn]( arg1 );\n\t\t}\n\t\t\n\t\treturn dateFn ? dt[dateFn]( arg1 ) : dt;\n\t}\n\t\n\t\n\tvar __mlWarning = false;\n\tfunction __mldObj (d, format, locale) {\n\t\tvar dt;\n\t\n\t\tif (window.moment) {\n\t\t\tdt = window.moment.utc( d, format, locale, true );\n\t\n\t\t\tif (! dt.isValid()) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\telse if (window.luxon) {\n\t\t\tdt = format && typeof d === 'string'\n\t\t\t\t? window.luxon.DateTime.fromFormat( d, format )\n\t\t\t\t: window.luxon.DateTime.fromISO( d );\n\t\n\t\t\tif (! dt.isValid) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\n\t\t\tdt.setLocale(locale);\n\t\t}\n\t\telse if (! format) {\n\t\t\t// No format given, must be ISO\n\t\t\tdt = new Date(d);\n\t\t}\n\t\telse {\n\t\t\tif (! __mlWarning) {\n\t\t\t\talert('DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17');\n\t\t\t}\n\t\n\t\t\t__mlWarning = true;\n\t\t}\n\t\n\t\treturn dt;\n\t}\n\t\n\t// Wrapper for date, datetime and time which all operate the same way with the exception of\n\t// the output string for auto locale support\n\tfunction __mlHelper (localeString) {\n\t\treturn function ( from, to, locale, def ) {\n\t\t\t// Luxon and Moment support\n\t\t\t// Argument shifting\n\t\t\tif ( arguments.length === 0 ) {\n\t\t\t\tlocale = 'en';\n\t\t\t\tto = null; // means toLocaleString\n\t\t\t\tfrom = null; // means iso8601\n\t\t\t}\n\t\t\telse if ( arguments.length === 1 ) {\n\t\t\t\tlocale = 'en';\n\t\t\t\tto = from;\n\t\t\t\tfrom = null;\n\t\t\t}\n\t\t\telse if ( arguments.length === 2 ) {\n\t\t\t\tlocale = to;\n\t\t\t\tto = from;\n\t\t\t\tfrom = null;\n\t\t\t}\n\t\n\t\t\tvar typeName = 'datetime-' + to;\n\t\n\t\t\t// Add type detection and sorting specific to this date format - we need to be able to identify\n\t\t\t// date type columns as such, rather than as numbers in extensions. Hence the need for this.\n\t\t\tif (! DataTable.ext.type.order[typeName]) {\n\t\t\t\t// The renderer will give the value to type detect as the type!\n\t\t\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\t\t\treturn d === typeName ? typeName : false;\n\t\t\t\t});\n\t\n\t\t\t\t// The renderer gives us Moment, Luxon or Date obects for the sorting, all of which have a\n\t\t\t\t// `valueOf` which gives milliseconds epoch\n\t\t\t\tDataTable.ext.type.order[typeName + '-asc'] = function (a, b) {\n\t\t\t\t\tvar x = a.valueOf();\n\t\t\t\t\tvar y = b.valueOf();\n\t\n\t\t\t\t\treturn x === y\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: x < y\n\t\t\t\t\t\t\t? -1\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t}\n\t\n\t\t\t\tDataTable.ext.type.order[typeName + '-desc'] = function (a, b) {\n\t\t\t\t\tvar x = a.valueOf();\n\t\t\t\t\tvar y = b.valueOf();\n\t\n\t\t\t\t\treturn x === y\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: x > y\n\t\t\t\t\t\t\t? -1\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\treturn function ( d, type ) {\n\t\t\t\t// Allow for a default value\n\t\t\t\tif (d === null || d === undefined) {\n\t\t\t\t\tif (def === '--now') {\n\t\t\t\t\t\t// We treat everything as UTC further down, so no changes are\n\t\t\t\t\t\t// made, as such need to get the local date / time as if it were\n\t\t\t\t\t\t// UTC\n\t\t\t\t\t\tvar local = new Date();\n\t\t\t\t\t\td = new Date( Date.UTC(\n\t\t\t\t\t\t\tlocal.getFullYear(), local.getMonth(), local.getDate(),\n\t\t\t\t\t\t\tlocal.getHours(), local.getMinutes(), local.getSeconds()\n\t\t\t\t\t\t) );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\td = '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (type === 'type') {\n\t\t\t\t\t// Typing uses the type name for fast matching\n\t\t\t\t\treturn typeName;\n\t\t\t\t}\n\t\n\t\t\t\tif (d === '') {\n\t\t\t\t\treturn type !== 'sort'\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: __mldObj('0000-01-01 00:00:00', null, locale);\n\t\t\t\t}\n\t\n\t\t\t\t// Shortcut. If `from` and `to` are the same, we are using the renderer to\n\t\t\t\t// format for ordering, not display - its already in the display format.\n\t\t\t\tif ( to !== null && from === to && type !== 'sort' && type !== 'type' && ! (d instanceof Date) ) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\t\n\t\t\t\tvar dt = __mldObj(d, from, locale);\n\t\n\t\t\t\tif (dt === null) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\t\n\t\t\t\tif (type === 'sort') {\n\t\t\t\t\treturn dt;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar formatted = to === null\n\t\t\t\t\t? __mld(dt, 'toDate', 'toJSDate', '')[localeString]()\n\t\t\t\t\t: __mld(dt, 'format', 'toFormat', 'toISOString', to);\n\t\n\t\t\t\t// XSS protection\n\t\t\t\treturn type === 'display' ?\n\t\t\t\t\t__htmlEscapeEntities( formatted ) :\n\t\t\t\t\tformatted;\n\t\t\t};\n\t\t}\n\t}\n\t\n\t// Based on locale, determine standard number formatting\n\t// Fallback for legacy browsers is US English\n\tvar __thousands = ',';\n\tvar __decimal = '.';\n\t\n\tif (window.Intl !== undefined) {\n\t\ttry {\n\t\t\tvar num = new Intl.NumberFormat().formatToParts(100000.1);\n\t\t\n\t\t\tfor (var i=0 ; i<num.length ; i++) {\n\t\t\t\tif (num[i].type === 'group') {\n\t\t\t\t\t__thousands = num[i].value;\n\t\t\t\t}\n\t\t\t\telse if (num[i].type === 'decimal') {\n\t\t\t\t\t__decimal = num[i].value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (e) {\n\t\t\t// noop\n\t\t}\n\t}\n\t\n\t// Formatted date time detection - use by declaring the formats you are going to use\n\tDataTable.datetime = function ( format, locale ) {\n\t\tvar typeName = 'datetime-detect-' + format;\n\t\n\t\tif (! locale) {\n\t\t\tlocale = 'en';\n\t\t}\n\t\n\t\tif (! DataTable.ext.type.order[typeName]) {\n\t\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\t\tvar dt = __mldObj(d, format, locale);\n\t\t\t\treturn d === '' || dt ? typeName : false;\n\t\t\t});\n\t\n\t\t\tDataTable.ext.type.order[typeName + '-pre'] = function (d) {\n\t\t\t\treturn __mldObj(d, format, locale) || 0;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Helpers for `columns.render`.\n\t *\n\t * The options defined here can be used with the `columns.render` initialisation\n\t * option to provide a display renderer. The following functions are defined:\n\t *\n\t * * `number` - Will format numeric data (defined by `columns.data`) for\n\t *   display, retaining the original unformatted data for sorting and filtering.\n\t *   It takes 5 parameters:\n\t *   * `string` - Thousands grouping separator\n\t *   * `string` - Decimal point indicator\n\t *   * `integer` - Number of decimal points to show\n\t *   * `string` (optional) - Prefix.\n\t *   * `string` (optional) - Postfix (/suffix).\n\t * * `text` - Escape HTML to help prevent XSS attacks. It has no optional\n\t *   parameters.\n\t *\n\t * @example\n\t *   // Column definition using the number renderer\n\t *   {\n\t *     data: \"salary\",\n\t *     render: $.fn.dataTable.render.number( '\\'', '.', 0, '$' )\n\t *   }\n\t *\n\t * @namespace\n\t */\n\tDataTable.render = {\n\t\tdate: __mlHelper('toLocaleDateString'),\n\t\tdatetime: __mlHelper('toLocaleString'),\n\t\ttime: __mlHelper('toLocaleTimeString'),\n\t\tnumber: function ( thousands, decimal, precision, prefix, postfix ) {\n\t\t\t// Auto locale detection\n\t\t\tif (thousands === null || thousands === undefined) {\n\t\t\t\tthousands = __thousands;\n\t\t\t}\n\t\n\t\t\tif (decimal === null || decimal === undefined) {\n\t\t\t\tdecimal = __decimal;\n\t\t\t}\n\t\n\t\t\treturn {\n\t\t\t\tdisplay: function ( d ) {\n\t\t\t\t\tif ( typeof d !== 'number' && typeof d !== 'string' ) {\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (d === '' || d === null) {\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar negative = d < 0 ? '-' : '';\n\t\t\t\t\tvar flo = parseFloat( d );\n\t\n\t\t\t\t\t// If NaN then there isn't much formatting that we can do - just\n\t\t\t\t\t// return immediately, escaping any HTML (this was supposed to\n\t\t\t\t\t// be a number after all)\n\t\t\t\t\tif ( isNaN( flo ) ) {\n\t\t\t\t\t\treturn __htmlEscapeEntities( d );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tflo = flo.toFixed( precision );\n\t\t\t\t\td = Math.abs( flo );\n\t\n\t\t\t\t\tvar intPart = parseInt( d, 10 );\n\t\t\t\t\tvar floatPart = precision ?\n\t\t\t\t\t\tdecimal+(d - intPart).toFixed( precision ).substring( 2 ):\n\t\t\t\t\t\t'';\n\t\n\t\t\t\t\t// If zero, then can't have a negative prefix\n\t\t\t\t\tif (intPart === 0 && parseFloat(floatPart) === 0) {\n\t\t\t\t\t\tnegative = '';\n\t\t\t\t\t}\n\t\n\t\t\t\t\treturn negative + (prefix||'') +\n\t\t\t\t\t\tintPart.toString().replace(\n\t\t\t\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g, thousands\n\t\t\t\t\t\t) +\n\t\t\t\t\t\tfloatPart +\n\t\t\t\t\t\t(postfix||'');\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\n\t\ttext: function () {\n\t\t\treturn {\n\t\t\t\tdisplay: __htmlEscapeEntities,\n\t\t\t\tfilter: __htmlEscapeEntities\n\t\t\t};\n\t\t}\n\t};\n\t\n\t\n\t/*\n\t * This is really a good bit rubbish this method of exposing the internal methods\n\t * publicly... - To be fixed in 2.0 using methods on the prototype\n\t */\n\t\n\t\n\t/**\n\t * Create a wrapper function for exporting an internal functions to an external API.\n\t *  @param {string} fn API function name\n\t *  @returns {function} wrapped function\n\t *  @memberof DataTable#internal\n\t */\n\tfunction _fnExternApiFunc (fn)\n\t{\n\t\treturn function() {\n\t\t\tvar args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat(\n\t\t\t\tArray.prototype.slice.call(arguments)\n\t\t\t);\n\t\t\treturn DataTable.ext.internal[fn].apply( this, args );\n\t\t};\n\t}\n\t\n\t\n\t/**\n\t * Reference to internal functions for use by plug-in developers. Note that\n\t * these methods are references to internal functions and are considered to be\n\t * private. If you use these methods, be aware that they are liable to change\n\t * between versions.\n\t *  @namespace\n\t */\n\t$.extend( DataTable.ext.internal, {\n\t\t_fnExternApiFunc: _fnExternApiFunc,\n\t\t_fnBuildAjax: _fnBuildAjax,\n\t\t_fnAjaxUpdate: _fnAjaxUpdate,\n\t\t_fnAjaxParameters: _fnAjaxParameters,\n\t\t_fnAjaxUpdateDraw: _fnAjaxUpdateDraw,\n\t\t_fnAjaxDataSrc: _fnAjaxDataSrc,\n\t\t_fnAddColumn: _fnAddColumn,\n\t\t_fnColumnOptions: _fnColumnOptions,\n\t\t_fnAdjustColumnSizing: _fnAdjustColumnSizing,\n\t\t_fnVisibleToColumnIndex: _fnVisibleToColumnIndex,\n\t\t_fnColumnIndexToVisible: _fnColumnIndexToVisible,\n\t\t_fnVisbleColumns: _fnVisbleColumns,\n\t\t_fnGetColumns: _fnGetColumns,\n\t\t_fnColumnTypes: _fnColumnTypes,\n\t\t_fnApplyColumnDefs: _fnApplyColumnDefs,\n\t\t_fnHungarianMap: _fnHungarianMap,\n\t\t_fnCamelToHungarian: _fnCamelToHungarian,\n\t\t_fnLanguageCompat: _fnLanguageCompat,\n\t\t_fnBrowserDetect: _fnBrowserDetect,\n\t\t_fnAddData: _fnAddData,\n\t\t_fnAddTr: _fnAddTr,\n\t\t_fnNodeToDataIndex: _fnNodeToDataIndex,\n\t\t_fnNodeToColumnIndex: _fnNodeToColumnIndex,\n\t\t_fnGetCellData: _fnGetCellData,\n\t\t_fnSetCellData: _fnSetCellData,\n\t\t_fnSplitObjNotation: _fnSplitObjNotation,\n\t\t_fnGetObjectDataFn: _fnGetObjectDataFn,\n\t\t_fnSetObjectDataFn: _fnSetObjectDataFn,\n\t\t_fnGetDataMaster: _fnGetDataMaster,\n\t\t_fnClearTable: _fnClearTable,\n\t\t_fnDeleteIndex: _fnDeleteIndex,\n\t\t_fnInvalidate: _fnInvalidate,\n\t\t_fnGetRowElements: _fnGetRowElements,\n\t\t_fnCreateTr: _fnCreateTr,\n\t\t_fnBuildHead: _fnBuildHead,\n\t\t_fnDrawHead: _fnDrawHead,\n\t\t_fnDraw: _fnDraw,\n\t\t_fnReDraw: _fnReDraw,\n\t\t_fnAddOptionsHtml: _fnAddOptionsHtml,\n\t\t_fnDetectHeader: _fnDetectHeader,\n\t\t_fnGetUniqueThs: _fnGetUniqueThs,\n\t\t_fnFeatureHtmlFilter: _fnFeatureHtmlFilter,\n\t\t_fnFilterComplete: _fnFilterComplete,\n\t\t_fnFilterCustom: _fnFilterCustom,\n\t\t_fnFilterColumn: _fnFilterColumn,\n\t\t_fnFilter: _fnFilter,\n\t\t_fnFilterCreateSearch: _fnFilterCreateSearch,\n\t\t_fnEscapeRegex: _fnEscapeRegex,\n\t\t_fnFilterData: _fnFilterData,\n\t\t_fnFeatureHtmlInfo: _fnFeatureHtmlInfo,\n\t\t_fnUpdateInfo: _fnUpdateInfo,\n\t\t_fnInfoMacros: _fnInfoMacros,\n\t\t_fnInitialise: _fnInitialise,\n\t\t_fnInitComplete: _fnInitComplete,\n\t\t_fnLengthChange: _fnLengthChange,\n\t\t_fnFeatureHtmlLength: _fnFeatureHtmlLength,\n\t\t_fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,\n\t\t_fnPageChange: _fnPageChange,\n\t\t_fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,\n\t\t_fnProcessingDisplay: _fnProcessingDisplay,\n\t\t_fnFeatureHtmlTable: _fnFeatureHtmlTable,\n\t\t_fnScrollDraw: _fnScrollDraw,\n\t\t_fnApplyToChildren: _fnApplyToChildren,\n\t\t_fnCalculateColumnWidths: _fnCalculateColumnWidths,\n\t\t_fnThrottle: _fnThrottle,\n\t\t_fnConvertToWidth: _fnConvertToWidth,\n\t\t_fnGetWidestNode: _fnGetWidestNode,\n\t\t_fnGetMaxLenString: _fnGetMaxLenString,\n\t\t_fnStringToCss: _fnStringToCss,\n\t\t_fnSortFlatten: _fnSortFlatten,\n\t\t_fnSort: _fnSort,\n\t\t_fnSortAria: _fnSortAria,\n\t\t_fnSortListener: _fnSortListener,\n\t\t_fnSortAttachListener: _fnSortAttachListener,\n\t\t_fnSortingClasses: _fnSortingClasses,\n\t\t_fnSortData: _fnSortData,\n\t\t_fnSaveState: _fnSaveState,\n\t\t_fnLoadState: _fnLoadState,\n\t\t_fnImplementState: _fnImplementState,\n\t\t_fnSettingsFromNode: _fnSettingsFromNode,\n\t\t_fnLog: _fnLog,\n\t\t_fnMap: _fnMap,\n\t\t_fnBindAction: _fnBindAction,\n\t\t_fnCallbackReg: _fnCallbackReg,\n\t\t_fnCallbackFire: _fnCallbackFire,\n\t\t_fnLengthOverflow: _fnLengthOverflow,\n\t\t_fnRenderer: _fnRenderer,\n\t\t_fnDataSource: _fnDataSource,\n\t\t_fnRowAttributes: _fnRowAttributes,\n\t\t_fnExtend: _fnExtend,\n\t\t_fnCalculateEnd: function () {} // Used by a lot of plug-ins, but redundant\n\t\t                                // in 1.10, so this dead-end function is\n\t\t                                // added to prevent errors\n\t} );\n\t\n\t\n\t// jQuery access\n\t$.fn.dataTable = DataTable;\n\t\n\t// Provide access to the host jQuery object (circular reference)\n\tDataTable.$ = $;\n\t\n\t// Legacy aliases\n\t$.fn.dataTableSettings = DataTable.settings;\n\t$.fn.dataTableExt = DataTable.ext;\n\t\n\t// With a capital `D` we return a DataTables API instance rather than a\n\t// jQuery object\n\t$.fn.DataTable = function ( opts ) {\n\t\treturn $(this).dataTable( opts ).api();\n\t};\n\t\n\t// All properties that are available to $.fn.dataTable should also be\n\t// available on $.fn.DataTable\n\t$.each( DataTable, function ( prop, val ) {\n\t\t$.fn.DataTable[ prop ] = val;\n\t} );\n\n\treturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/DateTime-1.5.1/css/dataTables.dateTime.css",
    "content": "div.dt-datetime {\n  position: absolute;\n  background-color: white;\n  z-index: 2050;\n  border: 1px solid #ccc;\n  box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.5);\n  padding: 6px 20px;\n  width: 275px;\n  border-radius: 5px;\n}\ndiv.dt-datetime.inline {\n  position: relative;\n  box-shadow: none;\n}\ndiv.dt-datetime div.dt-datetime-title {\n  text-align: center;\n  padding: 5px 0px 3px;\n}\ndiv.dt-datetime div.dt-datetime-buttons {\n  text-align: center;\n}\ndiv.dt-datetime div.dt-datetime-buttons a {\n  display: inline-block;\n  padding: 0 0.5em 0.5em 0.5em;\n  margin: 0;\n  font-size: 0.9em;\n}\ndiv.dt-datetime div.dt-datetime-buttons a:hover {\n  text-decoration: underline;\n}\ndiv.dt-datetime table {\n  border-spacing: 0;\n  margin: 12px 0;\n  width: 100%;\n}\ndiv.dt-datetime table.dt-datetime-table-nospace {\n  margin-top: -12px;\n}\ndiv.dt-datetime table th {\n  font-size: 0.8em;\n  color: #777;\n  font-weight: normal;\n  width: 14.285714286%;\n  padding: 0 0 4px 0;\n  text-align: center;\n}\ndiv.dt-datetime table td {\n  font-size: 0.9em;\n  color: #444;\n  padding: 0;\n}\ndiv.dt-datetime table td.selectable {\n  text-align: center;\n  background: #f5f5f5;\n}\ndiv.dt-datetime table td.selectable.disabled {\n  color: #aaa;\n  background: white;\n}\ndiv.dt-datetime table td.selectable.disabled button:hover {\n  color: #aaa;\n  background: white;\n}\ndiv.dt-datetime table td.selectable.now {\n  background-color: #ddd;\n}\ndiv.dt-datetime table td.selectable.now button {\n  font-weight: bold;\n}\ndiv.dt-datetime table td.selectable.selected button {\n  background: #4E6CA3;\n  color: white;\n  border-radius: 2px;\n}\ndiv.dt-datetime table td.selectable button:hover {\n  background: #ff8000;\n  color: white;\n  border-radius: 2px;\n}\ndiv.dt-datetime table td.dt-datetime-week {\n  font-size: 0.7em;\n}\ndiv.dt-datetime table button {\n  width: 100%;\n  box-sizing: border-box;\n  border: none;\n  background: transparent;\n  font-size: inherit;\n  color: inherit;\n  text-align: center;\n  padding: 4px 0;\n  cursor: pointer;\n  margin: 0;\n}\ndiv.dt-datetime table button span {\n  display: inline-block;\n  min-width: 14px;\n  text-align: right;\n}\ndiv.dt-datetime table.weekNumber th {\n  width: 12.5%;\n}\ndiv.dt-datetime div.dt-datetime-calendar table {\n  margin-top: 0;\n}\ndiv.dt-datetime div.dt-datetime-label {\n  position: relative;\n  display: inline-block;\n  height: 30px;\n  padding: 5px 6px;\n  border: 1px solid transparent;\n  box-sizing: border-box;\n  cursor: pointer;\n}\ndiv.dt-datetime div.dt-datetime-label:hover {\n  border: 1px solid #ddd;\n  border-radius: 2px;\n  background-color: #f5f5f5;\n}\ndiv.dt-datetime div.dt-datetime-label select {\n  position: absolute;\n  top: 6px;\n  left: 0;\n  cursor: pointer;\n  opacity: 0;\n}\ndiv.dt-datetime.horizontal {\n  width: 550px;\n}\ndiv.dt-datetime.horizontal div.dt-datetime-date,\ndiv.dt-datetime.horizontal div.dt-datetime-time {\n  width: 48%;\n}\ndiv.dt-datetime.horizontal div.dt-datetime-time {\n  margin-left: 4%;\n}\ndiv.dt-datetime div.dt-datetime-date {\n  position: relative;\n  float: left;\n  width: 100%;\n}\ndiv.dt-datetime div.dt-datetime-time {\n  position: relative;\n  float: left;\n  width: 100%;\n  text-align: center;\n}\ndiv.dt-datetime div.dt-datetime-time > span {\n  vertical-align: middle;\n}\ndiv.dt-datetime div.dt-datetime-time th {\n  text-align: left;\n}\ndiv.dt-datetime div.dt-datetime-time div.dt-datetime-timeblock {\n  display: inline-block;\n  vertical-align: middle;\n}\ndiv.dt-datetime div.dt-datetime-iconLeft,\ndiv.dt-datetime div.dt-datetime-iconRight {\n  width: 30px;\n  height: 30px;\n  background-position: center;\n  background-repeat: no-repeat;\n  opacity: 0.3;\n  overflow: hidden;\n  box-sizing: border-box;\n  border: 1px solid transparent;\n}\ndiv.dt-datetime div.dt-datetime-iconLeft:hover,\ndiv.dt-datetime div.dt-datetime-iconRight:hover {\n  border: 1px solid #ccc;\n  border-radius: 2px;\n  background-color: #f0f0f0;\n  opacity: 0.6;\n}\ndiv.dt-datetime div.dt-datetime-iconLeft button,\ndiv.dt-datetime div.dt-datetime-iconRight button {\n  border: none;\n  background: transparent;\n  text-indent: 30px;\n  height: 100%;\n  width: 100%;\n  cursor: pointer;\n}\ndiv.dt-datetime div.dt-datetime-iconLeft {\n  position: absolute;\n  top: 5px;\n  left: 5px;\n}\ndiv.dt-datetime div.dt-datetime-iconLeft button {\n  position: relative;\n  z-index: 1;\n}\ndiv.dt-datetime div.dt-datetime-iconLeft:after {\n  position: absolute;\n  top: 7px;\n  left: 10px;\n  display: block;\n  content: \"\";\n  border-top: 7px solid transparent;\n  border-right: 7px solid black;\n  border-bottom: 7px solid transparent;\n}\ndiv.dt-datetime div.dt-datetime-iconRight {\n  position: absolute;\n  top: 5px;\n  right: 5px;\n}\ndiv.dt-datetime div.dt-datetime-iconRight button {\n  position: relative;\n  z-index: 1;\n}\ndiv.dt-datetime div.dt-datetime-iconRight:after {\n  position: absolute;\n  top: 7px;\n  left: 12px;\n  display: block;\n  content: \"\";\n  border-top: 7px solid transparent;\n  border-left: 7px solid black;\n  border-bottom: 7px solid transparent;\n}\n\ndiv.dt-datetime-error {\n  clear: both;\n  padding: 0 1em;\n  max-width: 240px;\n  font-size: 11px;\n  line-height: 1.25em;\n  text-align: center;\n  color: #b11f1f;\n}\n\nhtml.dark input.dt-datetime {\n  color-scheme: dark;\n}\nhtml.dark div.dt-datetime {\n  border: 1px solid #595b5e;\n  background-color: #212529;\n  box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);\n}\nhtml.dark div.dt-datetime table th {\n  color: #ccc;\n}\nhtml.dark div.dt-datetime table td {\n  color: #eee;\n}\nhtml.dark div.dt-datetime table td.selectable {\n  background: #373c41;\n}\nhtml.dark div.dt-datetime table td.selectable.disabled {\n  color: #aaa;\n  background: #171b1f;\n}\nhtml.dark div.dt-datetime table td.selectable.disabled button:hover {\n  color: #aaa;\n  background: #171b1f;\n}\nhtml.dark div.dt-datetime table td.selectable.now {\n  background: #4b5055;\n}\nhtml.dark div.dt-datetime table td.selectable.selected button {\n  background: #6ea8fe;\n  color: black;\n}\nhtml.dark div.dt-datetime table td.selectable button:hover {\n  background: #ff8000;\n  color: black;\n}\nhtml.dark div.dt-datetime div.dt-datetime-label:hover {\n  border: 1px solid transparent;\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml.dark div.dt-datetime div.dt-datetime-iconLeft:hover,\nhtml.dark div.dt-datetime div.dt-datetime-iconRight:hover,\nhtml.dark div.dt-datetime div.dt-datetime-iconUp:hover,\nhtml.dark div.dt-datetime div.dt-datetime-iconDown:hover {\n  border: 1px solid transparent;\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml.dark div.dt-datetime div.dt-datetime-iconLeft:after {\n  border-right-color: white;\n}\nhtml.dark div.dt-datetime div.dt-datetime-iconRight:after {\n  border-left-color: white;\n}\nhtml.dark div.dt-datetime select {\n  color-scheme: dark;\n}\nhtml.dark div.dt-datetime-error {\n  color: #b11f1f;\n}"
  },
  {
    "path": "public/assets/DataTables/DateTime-1.5.1/js/dataTables.dateTime.js",
    "content": "/*! DateTime picker for DataTables.net v1.5.1\n *\n * © SpryMedia Ltd, all rights reserved.\n * License: MIT datatables.net/license/mit\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\n\n\n\n/**\n * @summary     DateTime picker for DataTables.net\n * @version     1.5.1\n * @file        dataTables.dateTime.js\n * @author      SpryMedia Ltd\n * @contact     www.datatables.net/contact\n */\n\n// Supported formatting and parsing libraries:\n// * Moment\n// * Luxon\n// * DayJS\nvar dateLib;\n\n/*\n * This file provides a DateTime GUI picker (calendar and time input). Only the\n * format YYYY-MM-DD is supported without additional software, but the end user\n * experience can be greatly enhanced by including the momentjs, dayjs or luxon library\n * which provide date / time parsing and formatting options.\n *\n * This functionality is required because the HTML5 date and datetime input\n * types are not widely supported in desktop browsers.\n *\n * Constructed by using:\n *\n *     new DateTime( input, opts )\n *\n * where `input` is the HTML input element to use and `opts` is an object of\n * options based on the `DateTime.defaults` object.\n */\nvar DateTime = function ( input, opts ) {\n\t// Check if called with a window or jQuery object for DOM less applications\n\t// This is for backwards compatibility with CommonJS loader\n\tif (DateTime.factory(input, opts)) {\n\t\treturn DateTime;\n\t}\n\n\t// Attempt to auto detect the formatting library (if there is one). Having it in\n\t// the constructor allows load order independence.\n\tif (typeof dateLib === 'undefined') {\n\t\tdateLib = window.moment\n\t\t\t? window.moment\n\t\t\t: window.dayjs\n\t\t\t\t? window.dayjs\n\t\t\t\t: window.luxon\n\t\t\t\t\t? window.luxon\n\t\t\t\t\t: null;\n\t}\n\n\tthis.c = $.extend( true, {}, DateTime.defaults, opts );\n\tvar classPrefix = this.c.classPrefix;\n\tvar i18n = this.c.i18n;\n\n\t// Only IS8601 dates are supported without moment, dayjs or luxon\n\tif ( ! dateLib && this.c.format !== 'YYYY-MM-DD' ) {\n\t\tthrow \"DateTime: Without momentjs, dayjs or luxon only the format 'YYYY-MM-DD' can be used\";\n\t}\n\n\t// Min and max need to be `Date` objects in the config\n\tif (typeof this.c.minDate === 'string') {\n\t\tthis.c.minDate = new Date(this.c.minDate);\n\t}\n\tif (typeof this.c.maxDate === 'string') {\n\t\tthis.c.maxDate = new Date(this.c.maxDate);\n\t}\n\n\t// DOM structure\n\tvar structure = $(\n\t\t'<div class=\"'+classPrefix+'\">'+\n\t\t\t'<div class=\"'+classPrefix+'-date\">'+\n\t\t\t\t'<div class=\"'+classPrefix+'-title\">'+\n\t\t\t\t\t'<div class=\"'+classPrefix+'-iconLeft\">'+\n\t\t\t\t\t\t'<button type=\"button\"></button>'+\n\t\t\t\t\t'</div>'+\n\t\t\t\t\t'<div class=\"'+classPrefix+'-iconRight\">'+\n\t\t\t\t\t\t'<button type=\"button\"></button>'+\n\t\t\t\t\t'</div>'+\n\t\t\t\t\t'<div class=\"'+classPrefix+'-label\">'+\n\t\t\t\t\t\t'<span></span>'+\n\t\t\t\t\t\t'<select class=\"'+classPrefix+'-month\"></select>'+\n\t\t\t\t\t'</div>'+\n\t\t\t\t\t'<div class=\"'+classPrefix+'-label\">'+\n\t\t\t\t\t\t'<span></span>'+\n\t\t\t\t\t\t'<select class=\"'+classPrefix+'-year\"></select>'+\n\t\t\t\t\t'</div>'+\n\t\t\t\t'</div>'+\n\t\t\t\t'<div class=\"'+classPrefix+'-buttons\">'+\n\t\t\t\t\t'<a class=\"'+classPrefix+'-clear\"></a>'+\n\t\t\t\t\t'<a class=\"'+classPrefix+'-today\"></a>'+\n\t\t\t\t'</div>'+\n\t\t\t\t'<div class=\"'+classPrefix+'-calendar\"></div>'+\n\t\t\t'</div>'+\n\t\t\t'<div class=\"'+classPrefix+'-time\">'+\n\t\t\t\t'<div class=\"'+classPrefix+'-hours\"></div>'+\n\t\t\t\t'<div class=\"'+classPrefix+'-minutes\"></div>'+\n\t\t\t\t'<div class=\"'+classPrefix+'-seconds\"></div>'+\n\t\t\t'</div>'+\n\t\t\t'<div class=\"'+classPrefix+'-error\"></div>'+\n\t\t'</div>'\n\t);\n\n\tthis.dom = {\n\t\tcontainer: structure,\n\t\tdate:      structure.find( '.'+classPrefix+'-date' ),\n\t\ttitle:     structure.find( '.'+classPrefix+'-title' ),\n\t\tcalendar:  structure.find( '.'+classPrefix+'-calendar' ),\n\t\ttime:      structure.find( '.'+classPrefix+'-time' ),\n\t\terror:     structure.find( '.'+classPrefix+'-error' ),\n\t\tbuttons:   structure.find( '.'+classPrefix+'-buttons' ),\n\t\tclear:     structure.find( '.'+classPrefix+'-clear' ),\n\t\ttoday:     structure.find( '.'+classPrefix+'-today' ),\n\t\tprevious:  structure.find( '.'+classPrefix+'-iconLeft' ),\n\t\tnext:      structure.find( '.'+classPrefix+'-iconRight' ),\n\t\tinput:     $(input)\n\t};\n\n\tthis.s = {\n\t\t/** @type {Date} Date value that the picker has currently selected */\n\t\td: null,\n\n\t\t/** @type {Date} Date of the calendar - might not match the value */\n\t\tdisplay: null,\n\n\t\t/** @type {number} Used to select minutes in a range where the range base is itself unavailable */\n\t\tminutesRange: null,\n\n\t\t/** @type {number} Used to select minutes in a range where the range base is itself unavailable */\n\t\tsecondsRange: null,\n\n\t\t/** @type {String} Unique namespace string for this instance */\n\t\tnamespace: 'dateime-'+(DateTime._instance++),\n\n\t\t/** @type {Object} Parts of the picker that should be shown */\n\t\tparts: {\n\t\t\tdate:    this.c.format.match( /[YMD]|L(?!T)|l/ ) !== null,\n\t\t\ttime:    this.c.format.match( /[Hhm]|LT|LTS/ ) !== null,\n\t\t\tseconds: this.c.format.indexOf( 's' )   !== -1,\n\t\t\thours12: this.c.format.match( /[haA]/ ) !== null\n\t\t}\n\t};\n\n\tthis.dom.container\n\t\t.append( this.dom.date )\n\t\t.append( this.dom.time )\n\t\t.append( this.dom.error );\n\n\tthis.dom.date\n\t\t.append( this.dom.title )\n\t\t.append( this.dom.buttons )\n\t\t.append( this.dom.calendar );\n\n\tthis.dom.input.addClass('dt-datetime');\n\n\tthis._constructor();\n};\n\n$.extend( DateTime.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public\n\t */\n\t\n\t/**\n\t * Destroy the control\n\t */\n\tdestroy: function () {\n\t\tthis._hide(true);\n\t\tthis.dom.container.off().empty();\n\t\tthis.dom.input\n\t\t\t.removeClass('dt-datetime')\n\t\t\t.removeAttr('autocomplete')\n\t\t\t.off('.datetime');\n\t},\n\n\tdisplay: function (year, month) {\n\t\tif (year !== undefined) {\n\t\t\tthis.s.display.setUTCFullYear(year);\n\t\t}\n\n\t\tif (month !== undefined) {\n\t\t\tthis.s.display.setUTCMonth(month - 1);\n\t\t}\n\n\t\tif (year !== undefined || month !== undefined) {\n\t\t\tthis._setTitle();\n\t\t\tthis._setCalander();\n\n\t\t\treturn this;\n\t\t}\n\n\t\treturn {\n\t\t\tmonth: this.s.display.getUTCMonth() + 1,\n\t\t\tyear: this.s.display.getUTCFullYear()\n\t\t};\n\t},\n\n\terrorMsg: function ( msg ) {\n\t\tvar error = this.dom.error;\n\n\t\tif ( msg ) {\n\t\t\terror.html( msg );\n\t\t}\n\t\telse {\n\t\t\terror.empty();\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thide: function () {\n\t\tthis._hide();\n\n\t\treturn this;\n\t},\n\n\tmax: function ( date ) {\n\t\tthis.c.maxDate = typeof date === 'string'\n\t\t\t? new Date(date)\n\t\t\t: date;\n\n\t\tthis._optionsTitle();\n\t\tthis._setCalander();\n\n\t\treturn this;\n\t},\n\n\tmin: function ( date ) {\n\t\tthis.c.minDate = typeof date === 'string'\n\t\t\t? new Date(date)\n\t\t\t: date;\n\n\t\tthis._optionsTitle();\n\t\tthis._setCalander();\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Check if an element belongs to this control\n\t *\n\t * @param  {node} node Element to check\n\t * @return {boolean}   true if owned by this control, false otherwise\n\t */\n\towns: function ( node ) {\n\t\treturn $(node).parents().filter( this.dom.container ).length > 0;\n\t},\n\n\t/**\n\t * Get / set the value\n\t *\n\t * @param  {string|Date} set   Value to set\n\t * @param  {boolean} [write=true] Flag to indicate if the formatted value\n\t *   should be written into the input element\n\t */\n\tval: function ( set, write ) {\n\t\tif ( set === undefined ) {\n\t\t\treturn this.s.d;\n\t\t}\n\n\t\tif ( set instanceof Date ) {\n\t\t\tthis.s.d = this._dateToUtc( set );\n\t\t}\n\t\telse if ( set === null || set === '' ) {\n\t\t\tthis.s.d = null;\n\t\t}\n\t\telse if ( set === '--now' ) {\n\t\t\tthis.s.d = this._dateToUtc(new Date());\n\t\t}\n\t\telse if ( typeof set === 'string' ) {\n\t\t\tthis.s.d = this._dateToUtc(\n\t\t\t\tthis._convert(set, this.c.format, null)\n\t\t\t);\n\t\t}\n\n\t\tif ( write || write === undefined ) {\n\t\t\tif ( this.s.d ) {\n\t\t\t\tthis._writeOutput();\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// The input value was not valid...\n\t\t\t\tthis.dom.input.val( set );\n\t\t\t}\n\t\t}\n\n\t\t// Need something to display\n\t\tthis.s.display = this.s.d\n\t\t\t? new Date( this.s.d.toString() )\n\t\t\t: new Date();\n\n\t\t// Set the day of the month to be 1 so changing between months doesn't\n        // run into issues when going from day 31 to 28 (for example)\n\t\tthis.s.display.setUTCDate( 1 );\n\n\t\t// Update the display elements for the new value\n\t\tthis._setTitle();\n\t\tthis._setCalander();\n\t\tthis._setTime();\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Similar to `val()` but uses a given date / time format\n\t *\n\t * @param format Format to get the data as (getter) or that is input (setter)\n\t * @param val Value to write (if undefined, used as a getter)\n\t * @returns \n\t */\n\tvalFormat: function (format, val) {\n\t\tif (! val) {\n\t\t\treturn this._convert(this.val(), null, format);\n\t\t}\n\n\t\t// Convert from the format given here to the instance's configured format\n\t\tthis.val(\n\t\t\tthis._convert(val, format, null)\n\t\t);\n\n\t\treturn this;\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\t\n\t/**\n\t * Build the control and assign initial event handlers\n\t *\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar classPrefix = this.c.classPrefix;\n\t\tvar last = this.dom.input.val();\n\n\t\tvar onChange = function () {\n\t\t\tvar curr = that.dom.input.val();\n\n\t\t\tif (curr !== last) {\n\t\t\t\tthat.c.onChange.call( that, curr, that.s.d, that.dom.input );\n\t\t\t\tlast = curr;\n\t\t\t}\n\t\t};\n\n\t\tif ( ! this.s.parts.date ) {\n\t\t\tthis.dom.date.css( 'display', 'none' );\n\t\t}\n\n\t\tif ( ! this.s.parts.time ) {\n\t\t\tthis.dom.time.css( 'display', 'none' );\n\t\t}\n\n\t\tif ( ! this.s.parts.seconds ) {\n\t\t\tthis.dom.time.children('div.'+classPrefix+'-seconds').remove();\n\t\t\tthis.dom.time.children('span').eq(1).remove();\n\t\t}\n\n\t\tif ( ! this.c.buttons.clear ) {\n\t\t\tthis.dom.clear.css( 'display', 'none' );\n\t\t}\n\n\t\tif ( ! this.c.buttons.today ) {\n\t\t\tthis.dom.today.css( 'display', 'none' );\n\t\t}\n\n\t\t// Render the options\n\t\tthis._optionsTitle();\n\n\t\t$(document).on('i18n.dt', function (e, settings) {\n\t\t\tif (settings.oLanguage.datetime) {\n\t\t\t\t$.extend(true, that.c.i18n, settings.oLanguage.datetime);\n\t\t\t\tthat._optionsTitle();\n\t\t\t}\n\t\t});\n\n\t\t// When attached to a hidden input, we always show the input picker, and\n\t\t// do so inline\n\t\tif (this.dom.input.attr('type') === 'hidden') {\n\t\t\tthis.dom.container.addClass('inline');\n\t\t\tthis.c.attachTo = 'input';\n\n\t\t\tthis.val( this.dom.input.val(), false );\n\t\t\tthis._show();\n\t\t}\n\n\t\t// Set the initial value\n\t\tif (last) {\n\t\t\tthis.val( last, false );\n\t\t}\n\n\t\t// Trigger the display of the widget when clicking or focusing on the\n\t\t// input element\n\t\tthis.dom.input\n\t\t\t.attr('autocomplete', 'off')\n\t\t\t.on('focus.datetime click.datetime', function () {\n\t\t\t\t// If already visible - don't do anything\n\t\t\t\tif ( that.dom.container.is(':visible') || that.dom.input.is(':disabled') ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// In case the value has changed by text\n\t\t\t\tthat.val( that.dom.input.val(), false );\n\n\t\t\t\tthat._show();\n\t\t\t} )\n\t\t\t.on('keyup.datetime', function () {\n\t\t\t\t// Update the calendar's displayed value as the user types\n\t\t\t\tif ( that.dom.container.is(':visible') ) {\n\t\t\t\t\tthat.val( that.dom.input.val(), false );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// Want to prevent the focus bubbling up the document to account for\n\t\t// focus capture in modals (e.g. Editor and Bootstrap). They can see\n\t\t// the focus as outside the modal and thus immediately blur focus on\n\t\t// the picker. Need to use a native addEL since jQuery changes the\n\t\t// focusin to focus for some reason! focusin bubbles, focus does not.\n\t\tthis.dom.container[0].addEventListener('focusin', function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\t// Main event handlers for input in the widget\n\t\tthis.dom.container\n\t\t\t.on( 'change', 'select', function () {\n\t\t\t\tvar select = $(this);\n\t\t\t\tvar val = select.val();\n\n\t\t\t\tif ( select.hasClass(classPrefix+'-month') ) {\n\t\t\t\t\t// Month select\n\t\t\t\t\tthat._correctMonth( that.s.display, val );\n\t\t\t\t\tthat._setTitle();\n\t\t\t\t\tthat._setCalander();\n\t\t\t\t}\n\t\t\t\telse if ( select.hasClass(classPrefix+'-year') ) {\n\t\t\t\t\t// Year select\n\t\t\t\t\tthat.s.display.setUTCFullYear( val );\n\t\t\t\t\tthat._setTitle();\n\t\t\t\t\tthat._setCalander();\n\t\t\t\t}\n\t\t\t\telse if ( select.hasClass(classPrefix+'-hours') || select.hasClass(classPrefix+'-ampm') ) {\n\t\t\t\t\t// Hours - need to take account of AM/PM input if present\n\t\t\t\t\tif ( that.s.parts.hours12 ) {\n\t\t\t\t\t\tvar hours = $(that.dom.container).find('.'+classPrefix+'-hours').val() * 1;\n\t\t\t\t\t\tvar pm = $(that.dom.container).find('.'+classPrefix+'-ampm').val() === 'pm';\n\n\t\t\t\t\t\tthat.s.d.setUTCHours( hours === 12 && !pm ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\tpm && hours !== 12 ?\n\t\t\t\t\t\t\t\thours + 12 :\n\t\t\t\t\t\t\t\thours\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthat.s.d.setUTCHours( val );\n\t\t\t\t\t}\n\n\t\t\t\t\tthat._setTime();\n\t\t\t\t\tthat._writeOutput( true );\n\n\t\t\t\t\tonChange();\n\t\t\t\t}\n\t\t\t\telse if ( select.hasClass(classPrefix+'-minutes') ) {\n\t\t\t\t\t// Minutes select\n\t\t\t\t\tthat.s.d.setUTCMinutes( val );\n\t\t\t\t\tthat._setTime();\n\t\t\t\t\tthat._writeOutput( true );\n\n\t\t\t\t\tonChange();\n\t\t\t\t}\n\t\t\t\telse if ( select.hasClass(classPrefix+'-seconds') ) {\n\t\t\t\t\t// Seconds select\n\t\t\t\t\tthat.s.d.setSeconds( val );\n\t\t\t\t\tthat._setTime();\n\t\t\t\t\tthat._writeOutput( true );\n\n\t\t\t\t\tonChange();\n\t\t\t\t}\n\n\t\t\t\tthat.dom.input.focus();\n\t\t\t\tthat._position();\n\t\t\t} )\n\t\t\t.on( 'click', function (e) {\n\t\t\t\tvar d = that.s.d;\n\t\t\t\tvar nodeName = e.target.nodeName.toLowerCase();\n\t\t\t\tvar target = nodeName === 'span' ?\n\t\t\t\t\te.target.parentNode :\n\t\t\t\t\te.target;\n\n\t\t\t\tnodeName = target.nodeName.toLowerCase();\n\n\t\t\t\tif ( nodeName === 'select' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\te.stopPropagation();\n\n\t\t\t\tif ( nodeName === 'a' ) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif ($(target).hasClass(classPrefix+'-clear')) {\n\t\t\t\t\t\t// Clear the value and don't change the display\n\t\t\t\t\t\tthat.s.d = null;\n\t\t\t\t\t\tthat.dom.input.val('');\n\t\t\t\t\t\tthat._writeOutput();\n\t\t\t\t\t\tthat._setCalander();\n\t\t\t\t\t\tthat._setTime();\n\n\t\t\t\t\t\tonChange();\n\t\t\t\t\t}\n\t\t\t\t\telse if ($(target).hasClass(classPrefix+'-today')) {\n\t\t\t\t\t\t// Don't change the value, but jump to the month\n\t\t\t\t\t\t// containing today\n\t\t\t\t\t\tthat.s.display = new Date();\n\n\t\t\t\t\t\tthat._setTitle();\n\t\t\t\t\t\tthat._setCalander();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( nodeName === 'button' ) {\n\t\t\t\t\tvar button = $(target);\n\t\t\t\t\tvar parent = button.parent();\n\n\t\t\t\t\tif ( parent.hasClass('disabled') && ! parent.hasClass('range') ) {\n\t\t\t\t\t\tbutton.blur();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( parent.hasClass(classPrefix+'-iconLeft') ) {\n\t\t\t\t\t\t// Previous month\n\t\t\t\t\t\tthat.s.display.setUTCMonth( that.s.display.getUTCMonth()-1 );\n\t\t\t\t\t\tthat._setTitle();\n\t\t\t\t\t\tthat._setCalander();\n\n\t\t\t\t\t\tthat.dom.input.focus();\n\t\t\t\t\t}\n\t\t\t\t\telse if ( parent.hasClass(classPrefix+'-iconRight') ) {\n\t\t\t\t\t\t// Next month\n\t\t\t\t\t\tthat._correctMonth( that.s.display, that.s.display.getUTCMonth()+1 );\n\t\t\t\t\t\tthat._setTitle();\n\t\t\t\t\t\tthat._setCalander();\n\n\t\t\t\t\t\tthat.dom.input.focus();\n\t\t\t\t\t}\n\t\t\t\t\telse if ( button.parents('.'+classPrefix+'-time').length ) {\n\t\t\t\t\t\tvar val = button.data('value');\n\t\t\t\t\t\tvar unit = button.data('unit');\n\n\t\t\t\t\t\td = that._needValue();\n\n\t\t\t\t\t\tif ( unit === 'minutes' ) {\n\t\t\t\t\t\t\tif ( parent.hasClass('disabled') && parent.hasClass('range') ) {\n\t\t\t\t\t\t\t\tthat.s.minutesRange = val;\n\t\t\t\t\t\t\t\tthat._setTime();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthat.s.minutesRange = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( unit === 'seconds' ) {\n\t\t\t\t\t\t\tif ( parent.hasClass('disabled') && parent.hasClass('range') ) {\n\t\t\t\t\t\t\t\tthat.s.secondsRange = val;\n\t\t\t\t\t\t\t\tthat._setTime();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthat.s.secondsRange = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Specific to hours for 12h clock\n\t\t\t\t\t\tif ( val === 'am' ) {\n\t\t\t\t\t\t\tif ( d.getUTCHours() >= 12 ) {\n\t\t\t\t\t\t\t\tval = d.getUTCHours() - 12;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( val === 'pm' ) {\n\t\t\t\t\t\t\tif ( d.getUTCHours() < 12 ) {\n\t\t\t\t\t\t\t\tval = d.getUTCHours() + 12;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar set = unit === 'hours' ?\n\t\t\t\t\t\t\t'setUTCHours' :\n\t\t\t\t\t\t\tunit === 'minutes' ?\n\t\t\t\t\t\t\t\t'setUTCMinutes' :\n\t\t\t\t\t\t\t\t'setSeconds';\n\n\t\t\t\t\t\td[set]( val );\n\t\t\t\t\t\tthat._setCalander();\n\t\t\t\t\t\tthat._setTime();\n\t\t\t\t\t\tthat._writeOutput( true );\n\t\t\t\t\t\tonChange();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Calendar click\n\t\t\t\t\t\td = that._needValue();\n\n\t\t\t\t\t\t// Can't be certain that the current day will exist in\n\t\t\t\t\t\t// the new month, and likewise don't know that the\n\t\t\t\t\t\t// new day will exist in the old month, But 1 always\n\t\t\t\t\t\t// does, so we can change the month without worry of a\n\t\t\t\t\t\t// recalculation being done automatically by `Date`\n\t\t\t\t\t\td.setUTCDate( 1 );\n\t\t\t\t\t\td.setUTCFullYear( button.data('year') );\n\t\t\t\t\t\td.setUTCMonth( button.data('month') );\n\t\t\t\t\t\td.setUTCDate( button.data('day') );\n\n\t\t\t\t\t\tthat._writeOutput( true );\n\n\t\t\t\t\t\t// Don't hide if there is a time picker, since we want to\n\t\t\t\t\t\t// be able to select a time as well.\n\t\t\t\t\t\tif ( ! that.s.parts.time ) {\n\t\t\t\t\t\t\t// This is annoying but IE has some kind of async\n\t\t\t\t\t\t\t// behaviour with focus and the focus from the above\n\t\t\t\t\t\t\t// write would occur after this hide - resulting in the\n\t\t\t\t\t\t\t// calendar opening immediately\n\t\t\t\t\t\t\tsetTimeout( function () {\n\t\t\t\t\t\t\t\tthat._hide();\n\t\t\t\t\t\t\t}, 10 );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthat._setCalander();\n\t\t\t\t\t\t\tthat._setTime();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Click anywhere else in the widget - return focus to the\n\t\t\t\t\t// input element\n\t\t\t\t\tthat.dom.input.focus();\n\t\t\t\t}\n\t\t\t} );\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private\n\t */\n\n\t/**\n\t * Compare the date part only of two dates - this is made super easy by the\n\t * toDateString method!\n\t *\n\t * @param  {Date} a Date 1\n\t * @param  {Date} b Date 2\n\t * @private\n\t */\n\t_compareDates: function( a, b ) {\n\t\t// Can't use toDateString as that converts to local time\n\t\t// luxon uses different method names so need to be able to call them\n\t\treturn this._isLuxon()\n\t\t\t? dateLib.DateTime.fromJSDate(a).toUTC().toISODate() === dateLib.DateTime.fromJSDate(b).toUTC().toISODate()\n\t\t\t: this._dateToUtcString(a) === this._dateToUtcString(b);\n\t},\n\n\t/**\n\t * Convert from one format to another\n\t *\n\t * @param {string|Date} val Value \n\t * @param {string|null} from Format to convert from. If null a `Date` must be given\n\t * @param {string|null} to Format to convert to. If null a `Date` will be returned\n\t * @returns {string|Date} Converted value\n\t */\n\t_convert: function(val, from, to) {\n\t\tif (! val) {\n\t\t\treturn val;\n\t\t}\n\n\t\tif (! dateLib) {\n\t\t\t// Note that in here from and to can either be null or YYYY-MM-DD\n\t\t\t// They cannot be anything else\n\t\t\tif ((! from && ! to) || (from && to)) {\n\t\t\t\t// No conversion\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\telse if (! from) {\n\t\t\t\t// Date in, string back\n\t\t\t\treturn val.getUTCFullYear() +'-'+\n\t\t\t\t\tthis._pad(val.getUTCMonth() + 1) +'-'+\n\t\t\t\t\tthis._pad(val.getUTCDate());\n\t\t\t}\n\t\t\telse { // (! to)\n\t\t\t\t// String in, date back\n\t\t\t\tvar match = val.match(/(\\d{4})\\-(\\d{2})\\-(\\d{2})/ );\n\t\t\t\treturn match ?\n\t\t\t\t\tnew Date( match[1], match[2]-1, match[3] ) :\n\t\t\t\t\tnull;\n\t\t\t}\n\t\t}\n\t\telse if (this._isLuxon()) {\n\t\t\t// Luxon\n\t\t\tvar dtLux = val instanceof Date\n\t\t\t\t? dateLib.DateTime.fromJSDate(val).toUTC()\n\t\t\t\t: dateLib.DateTime.fromFormat(val, from);\n\n\t\t\tif (! dtLux.isValid) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn to\n\t\t\t\t? dtLux.toFormat(to)\n\t\t\t\t: dtLux.toJSDate();\n\t\t}\n\t\telse {\n\t\t\t// Moment / DayJS\n\t\t\tvar dtMo = val instanceof Date\n\t\t\t\t? dateLib.utc( val, undefined, this.c.locale, this.c.strict )\n\t\t\t\t: dateLib( val, from, this.c.locale, this.c.strict );\n\t\t\t\n\t\t\tif (! dtMo.isValid()) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn to\n\t\t\t\t? dtMo.format(to)\n\t\t\t\t: dtMo.toDate();\n\t\t}\n\t},\n\n\t/**\n\t * When changing month, take account of the fact that some months don't have\n\t * the same number of days. For example going from January to February you\n\t * can have the 31st of Jan selected and just add a month since the date\n\t * would still be 31, and thus drop you into March.\n\t *\n\t * @param  {Date} date  Date - will be modified\n\t * @param  {integer} month Month to set\n\t * @private\n\t */\n\t_correctMonth: function ( date, month ) {\n\t\tvar days = this._daysInMonth( date.getUTCFullYear(), month );\n\t\tvar correctDays = date.getUTCDate() > days;\n\n\t\tdate.setUTCMonth( month );\n\n\t\tif ( correctDays ) {\n\t\t\tdate.setUTCDate( days );\n\t\t\tdate.setUTCMonth( month );\n\t\t}\n\t},\n\n\t/**\n\t * Get the number of days in a method. Based on\n\t * http://stackoverflow.com/a/4881951 by Matti Virkkunen\n\t *\n\t * @param  {integer} year  Year\n\t * @param  {integer} month Month (starting at 0)\n\t * @private\n\t */\n\t_daysInMonth: function ( year, month ) {\n\t\t// \n\t\tvar isLeap = ((year % 4) === 0 && ((year % 100) !== 0 || (year % 400) === 0));\n\t\tvar months = [31, (isLeap ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n\t\treturn months[month];\n\t},\n\n\t/**\n\t * Create a new date object which has the UTC values set to the local time.\n\t * This allows the local time to be used directly for the library which\n\t * always bases its calculations and display on UTC.\n\t *\n\t * @param  {Date} s Date to \"convert\"\n\t * @return {Date}   Shifted date\n\t */\n\t_dateToUtc: function ( s ) {\n\t\tif (! s) {\n\t\t\treturn s;\n\t\t}\n\n\t\treturn new Date( Date.UTC(\n\t\t\ts.getFullYear(), s.getMonth(), s.getDate(),\n\t\t\ts.getHours(), s.getMinutes(), s.getSeconds()\n\t\t) );\n\t},\n\n\t/**\n\t * Create a UTC ISO8601 date part from a date object\n\t *\n\t * @param  {Date} d Date to \"convert\"\n\t * @return {string} ISO formatted date\n\t */\n\t_dateToUtcString: function ( d ) {\n\t\t// luxon uses different method names so need to be able to call them\n\t\treturn this._isLuxon()\n\t\t\t? dateLib.DateTime.fromJSDate(d).toUTC().toISODate()\n\t\t\t: d.getUTCFullYear()+'-'+\n\t\t\t\tthis._pad(d.getUTCMonth()+1)+'-'+\n\t\t\t\tthis._pad(d.getUTCDate());\n\t},\n\n\t/**\n\t * Hide the control and remove events related to its display\n\t *\n\t * @private\n\t */\n\t_hide: function (destroy) {\n\t\tif (! destroy && this.dom.input.attr('type') === 'hidden') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar namespace = this.s.namespace;\n\n\t\tthis.dom.container.detach();\n\n\t\t$(window).off( '.'+namespace );\n\t\t$(document).off( 'keydown.'+namespace );\n\t\t$('div.dataTables_scrollBody').off( 'scroll.'+namespace );\n\t\t$('div.DTE_Body_Content').off( 'scroll.'+namespace );\n\t\t$('body').off( 'click.'+namespace );\n\t\t$(this.dom.input[0].offsetParent).off('.'+namespace);\n\t},\n\n\t/**\n\t * Convert a 24 hour value to a 12 hour value\n\t *\n\t * @param  {integer} val 24 hour value\n\t * @return {integer}     12 hour value\n\t * @private\n\t */\n\t_hours24To12: function ( val ) {\n\t\treturn val === 0 ?\n\t\t\t12 :\n\t\t\tval > 12 ?\n\t\t\t\tval - 12 :\n\t\t\t\tval;\n\t},\n\n\t/**\n\t * Generate the HTML for a single day in the calendar - this is basically\n\t * and HTML cell with a button that has data attributes so we know what was\n\t * clicked on (if it is clicked on) and a bunch of classes for styling.\n\t *\n\t * @param  {object} day Day object from the `_htmlMonth` method\n\t * @return {string}     HTML cell\n\t */\n\t_htmlDay: function( day )\n\t{\n\t\tif ( day.empty ) {\n\t\t\treturn '<td class=\"empty\"></td>';\n\t\t}\n\n\t\tvar classes = [ 'selectable' ];\n\t\tvar classPrefix = this.c.classPrefix;\n\n\t\tif ( day.disabled ) {\n\t\t\tclasses.push( 'disabled' );\n\t\t}\n\n\t\tif ( day.today ) {\n\t\t\tclasses.push( 'now' );\n\t\t}\n\n\t\tif ( day.selected ) {\n\t\t\tclasses.push( 'selected' );\n\t\t}\n\n\t\treturn '<td data-day=\"' + day.day + '\" class=\"' + classes.join(' ') + '\">' +\n\t\t\t\t'<button class=\"'+classPrefix+'-button '+classPrefix+'-day\" type=\"button\" ' +'data-year=\"' + day.year + '\" data-month=\"' + day.month + '\" data-day=\"' + day.day + '\">' +\n\t\t\t\t\t'<span>'+day.day+'</span>'+\n\t\t\t\t'</button>' +\n\t\t\t'</td>';\n\t},\n\n\n\t/**\n\t * Create the HTML for a month to be displayed in the calendar table.\n\t * \n\t * Based upon the logic used in Pikaday - MIT licensed\n\t * Copyright (c) 2014 David Bushell\n\t * https://github.com/dbushell/Pikaday\n\t *\n\t * @param  {integer} year  Year\n\t * @param  {integer} month Month (starting at 0)\n\t * @return {string} Calendar month HTML\n\t * @private\n\t */\n\t_htmlMonth: function ( year, month ) {\n\t\tvar now    = this._dateToUtc( new Date() ),\n\t\t\tdays   = this._daysInMonth( year, month ),\n\t\t\tbefore = new Date( Date.UTC(year, month, 1) ).getUTCDay(),\n\t\t\tdata   = [],\n\t\t\trow    = [];\n\n\t\tif ( this.c.firstDay > 0 ) {\n\t\t\tbefore -= this.c.firstDay;\n\n\t\t\tif (before < 0) {\n\t\t\t\tbefore += 7;\n\t\t\t}\n\t\t}\n\n\t\tvar cells = days + before,\n\t\t\tafter = cells;\n\n\t\twhile ( after > 7 ) {\n\t\t\tafter -= 7;\n\t\t}\n\n\t\tcells += 7 - after;\n\n\t\tvar minDate = this.c.minDate;\n\t\tvar maxDate = this.c.maxDate;\n\n\t\tif ( minDate ) {\n\t\t\tminDate.setUTCHours(0);\n\t\t\tminDate.setUTCMinutes(0);\n\t\t\tminDate.setSeconds(0);\n\t\t}\n\n\t\tif ( maxDate ) {\n\t\t\tmaxDate.setUTCHours(23);\n\t\t\tmaxDate.setUTCMinutes(59);\n\t\t\tmaxDate.setSeconds(59);\n\t\t}\n\n\t\tfor ( var i=0, r=0 ; i<cells ; i++ ) {\n\t\t\tvar day      = new Date( Date.UTC(year, month, 1 + (i - before)) ),\n\t\t\t\tselected = this.s.d ? this._compareDates(day, this.s.d) : false,\n\t\t\t\ttoday    = this._compareDates(day, now),\n\t\t\t\tempty    = i < before || i >= (days + before),\n\t\t\t\tdisabled = (minDate && day < minDate) ||\n\t\t\t\t           (maxDate && day > maxDate);\n\n\t\t\tvar disableDays = this.c.disableDays;\n\t\t\tif ( Array.isArray( disableDays ) && $.inArray( day.getUTCDay(), disableDays ) !== -1 ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\t\t\telse if ( typeof disableDays === 'function' && disableDays( day ) === true ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\n\t\t\tvar dayConfig = {\n\t\t\t\tday:      1 + (i - before),\n\t\t\t\tmonth:    month,\n\t\t\t\tyear:     year,\n\t\t\t\tselected: selected,\n\t\t\t\ttoday:    today,\n\t\t\t\tdisabled: disabled,\n\t\t\t\tempty:    empty\n\t\t\t};\n\n\t\t\trow.push( this._htmlDay(dayConfig) );\n\n\t\t\tif ( ++r === 7 ) {\n\t\t\t\tif ( this.c.showWeekNumber ) {\n\t\t\t\t\trow.unshift( this._htmlWeekOfYear(i - before, month, year) );\n\t\t\t\t}\n\n\t\t\t\tdata.push( '<tr>'+row.join('')+'</tr>' );\n\t\t\t\trow = [];\n\t\t\t\tr = 0;\n\t\t\t}\n\t\t}\n\n\t\tvar classPrefix = this.c.classPrefix;\n\t\tvar className = classPrefix+'-table';\n\t\tif ( this.c.showWeekNumber ) {\n\t\t\tclassName += ' weekNumber';\n\t\t}\n\n\t\t// Show / hide month icons based on min/max\n\t\tif ( minDate ) {\n\t\t\tvar underMin = minDate >= new Date( Date.UTC(year, month, 1, 0, 0, 0 ) );\n\n\t\t\tthis.dom.title.find('div.'+classPrefix+'-iconLeft')\n\t\t\t\t.css( 'display', underMin ? 'none' : 'block' );\n\t\t}\n\n\t\tif ( maxDate ) {\n\t\t\tvar overMax = maxDate < new Date( Date.UTC(year, month+1, 1, 0, 0, 0 ) );\n\n\t\t\tthis.dom.title.find('div.'+classPrefix+'-iconRight')\n\t\t\t\t.css( 'display', overMax ? 'none' : 'block' );\n\t\t}\n\n\t\treturn '<table class=\"'+className+'\">' +\n\t\t\t\t'<thead>'+\n\t\t\t\t\tthis._htmlMonthHead() +\n\t\t\t\t'</thead>'+\n\t\t\t\t'<tbody>'+\n\t\t\t\t\tdata.join('') +\n\t\t\t\t'</tbody>'+\n\t\t\t'</table>';\n\t},\n\n\t/**\n\t * Create the calendar table's header (week days)\n\t *\n\t * @return {string} HTML cells for the row\n\t * @private\n\t */\n\t_htmlMonthHead: function () {\n\t\tvar a = [];\n\t\tvar firstDay = this.c.firstDay;\n\t\tvar i18n = this.c.i18n;\n\n\t\t// Take account of the first day shift\n\t\tvar dayName = function ( day ) {\n\t\t\tday += firstDay;\n\n\t\t\twhile (day >= 7) {\n\t\t\t\tday -= 7;\n\t\t\t}\n\n\t\t\treturn i18n.weekdays[day];\n\t\t};\n\t\t\n\t\t// Empty cell in the header\n\t\tif ( this.c.showWeekNumber ) {\n\t\t\ta.push( '<th></th>' );\n\t\t}\n\n\t\tfor ( var i=0 ; i<7 ; i++ ) {\n\t\t\ta.push( '<th>'+dayName( i )+'</th>' );\n\t\t}\n\n\t\treturn a.join('');\n\t},\n\n\t/**\n\t * Create a cell that contains week of the year - ISO8601\n\t *\n\t * Based on https://stackoverflow.com/questions/6117814/ and\n\t * http://techblog.procurios.nl/k/n618/news/view/33796/14863/\n\t *\n\t * @param  {integer} d Day of month\n\t * @param  {integer} m Month of year (zero index)\n\t * @param  {integer} y Year\n\t * @return {string}   \n\t * @private\n\t */\n\t_htmlWeekOfYear: function ( d, m, y ) {\n\t\tvar date = new Date( y, m, d, 0, 0, 0, 0 );\n\n\t\t// First week of the year always has 4th January in it\n\t\tdate.setDate( date.getDate() + 4 - (date.getDay() || 7) );\n\n\t\tvar oneJan = new Date( y, 0, 1 );\n\t\tvar weekNum = Math.ceil( ( ( (date - oneJan) / 86400000) + 1)/7 );\n\n\t\treturn '<td class=\"'+this.c.classPrefix+'-week\">' + weekNum + '</td>';\n\t},\n\n\t/**\n\t * Determine if Luxon is being used\n\t *\n\t * @returns Flag for Luxon\n\t */\n\t_isLuxon: function () {\n\t\treturn dateLib && dateLib.DateTime && dateLib.Duration && dateLib.Settings\n\t\t\t? true\n\t\t\t: false;\n\t},\n\n\t/**\n\t * Check if the instance has a date object value - it might be null.\n\t * If is doesn't set one to now.\n\t * @returns A Date object\n\t * @private\n\t */\n\t_needValue: function () {\n\t\tif ( ! this.s.d ) {\n\t\t\tthis.s.d = this._dateToUtc( new Date() );\n\n\t\t\tif (! this.s.parts.time) {\n\t\t\t\tthis.s.d.setUTCHours(0);\n\t\t\t\tthis.s.d.setUTCMinutes(0);\n\t\t\t\tthis.s.d.setSeconds(0);\n\t\t\t\tthis.s.d.setMilliseconds(0);\n\t\t\t}\n\t\t}\n\n\t\treturn this.s.d;\n\t},\n\n\t/**\n\t * Create option elements from a range in an array\n\t *\n\t * @param  {string} selector Class name unique to the select element to use\n\t * @param  {array} values   Array of values\n\t * @param  {array} [labels] Array of labels. If given must be the same\n\t *   length as the values parameter.\n\t * @private\n\t */\n\t_options: function ( selector, values, labels ) {\n\t\tif ( ! labels ) {\n\t\t\tlabels = values;\n\t\t}\n\n\t\tvar select = this.dom.container.find('select.'+this.c.classPrefix+'-'+selector);\n\t\tselect.empty();\n\n\t\tfor ( var i=0, ien=values.length ; i<ien ; i++ ) {\n\t\t\tselect.append( '<option value=\"'+values[i]+'\">'+labels[i]+'</option>' );\n\t\t}\n\t},\n\n\t/**\n\t * Set an option and update the option's span pair (since the select element\n\t * has opacity 0 for styling)\n\t *\n\t * @param  {string} selector Class name unique to the select element to use\n\t * @param  {*}      val      Value to set\n\t * @private\n\t */\n\t_optionSet: function ( selector, val ) {\n\t\tvar select = this.dom.container.find('select.'+this.c.classPrefix+'-'+selector);\n\t\tvar span = select.parent().children('span');\n\n\t\tselect.val( val );\n\n\t\tvar selected = select.find('option:selected');\n\t\tspan.html( selected.length !== 0 ?\n\t\t\tselected.text() :\n\t\t\tthis.c.i18n.unknown\n\t\t);\n\t},\n\n\t/**\n\t * Create time options list.\n\t *\n\t * @param  {string} unit Time unit - hours, minutes or seconds\n\t * @param  {integer} count Count range - 12, 24 or 60\n\t * @param  {integer} val Existing value for this unit\n\t * @param  {integer[]} allowed Values allow for selection\n\t * @param  {integer} range Override range\n\t * @private\n\t */\n\t_optionsTime: function ( unit, count, val, allowed, range ) {\n\t\tvar classPrefix = this.c.classPrefix;\n\t\tvar container = this.dom.container.find('div.'+classPrefix+'-'+unit);\n\t\tvar i, j;\n\t\tvar render = count === 12 ?\n\t\t\tfunction (i) { return i; } :\n\t\t\tthis._pad;\n\t\tvar classPrefix = this.c.classPrefix;\n\t\tvar className = classPrefix+'-table';\n\t\tvar i18n = this.c.i18n;\n\n\t\tif ( ! container.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar a = '';\n\t\tvar span = 10;\n\t\tvar button = function (value, label, className) {\n\t\t\t// Shift the value for PM\n\t\t\tif ( count === 12 && typeof value === 'number' ) {\n\t\t\t\tif (val >= 12 ) {\n\t\t\t\t\tvalue += 12;\n\t\t\t\t}\n\n\t\t\t\tif (value == 12) {\n\t\t\t\t\tvalue = 0;\n\t\t\t\t}\n\t\t\t\telse if (value == 24) {\n\t\t\t\t\tvalue = 12;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar selected = val === value || (value === 'am' && val < 12) || (value === 'pm' && val >= 12) ?\n\t\t\t\t'selected' :\n\t\t\t\t'';\n\t\t\t\n\t\t\tif (typeof value === 'number' && allowed && $.inArray(value, allowed) === -1) {\n\t\t\t\tselected += ' disabled';\n\t\t\t}\n\n\t\t\tif ( className ) {\n\t\t\t\tselected += ' '+className;\n\t\t\t}\n\n\t\t\treturn '<td class=\"selectable '+selected+'\">' +\n\t\t\t\t'<button class=\"'+classPrefix+'-button '+classPrefix+'-day\" type=\"button\" data-unit=\"'+unit+'\" data-value=\"'+value+ '\">' +\n\t\t\t\t\t'<span>'+label+'</span>'+\n\t\t\t\t'</button>' +\n\t\t\t'</td>';\n\t\t}\n\n\t\tif ( count === 12 ) {\n\t\t\t// Hours with AM/PM\n\t\t\ta += '<tr>';\n\t\t\t\n\t\t\tfor ( i=1 ; i<=6 ; i++ ) {\n\t\t\t\ta += button(i, render(i));\n\t\t\t}\n\t\t\ta += button('am', i18n.amPm[0]);\n\n\t\t\ta += '</tr>';\n\t\t\ta += '<tr>';\n\n\t\t\tfor ( i=7 ; i<=12 ; i++ ) {\n\t\t\t\ta += button(i, render(i));\n\t\t\t}\n\t\t\ta += button('pm', i18n.amPm[1]);\n\t\t\ta += '</tr>';\n\n\t\t\tspan = 7;\n\t\t}\n\t\telse if ( count === 24 ) {\n\t\t\t// Hours - 24\n\t\t\tvar c = 0;\n\t\t\tfor (j=0 ; j<4 ; j++ ) {\n\t\t\t\ta += '<tr>';\n\t\t\t\tfor ( i=0 ; i<6 ; i++ ) {\n\t\t\t\t\ta += button(c, render(c));\n\t\t\t\t\tc++;\n\t\t\t\t}\n\t\t\t\ta += '</tr>';\n\t\t\t}\n\n\t\t\tspan = 6;\n\t\t}\n\t\telse {\n\t\t\t// Minutes and seconds\n\t\t\ta += '<tr>';\n\t\t\tfor (j=0 ; j<60 ; j+=10 ) {\n\t\t\t\ta += button(j, render(j), 'range');\n\t\t\t}\n\t\t\ta += '</tr>';\n\t\t\t\n\t\t\t// Slight hack to allow for the different number of columns\n\t\t\ta += '</tbody></thead><table class=\"'+className+' '+className+'-nospace\"><tbody>';\n\n\t\t\tvar start = range !== null\n\t\t\t\t? range\n\t\t\t\t: val === -1\n\t\t\t\t\t? 0\n\t\t\t\t\t: Math.floor( val / 10 )*10;\n\n\t\t\ta += '<tr>';\n\t\t\tfor (j=start+1 ; j<start+10 ; j++ ) {\n\t\t\t\ta += button(j, render(j));\n\t\t\t}\n\t\t\ta += '</tr>';\n\n\t\t\tspan = 6;\n\t\t}\n\n\t\tcontainer\n\t\t\t.empty()\n\t\t\t.append(\n\t\t\t\t'<table class=\"'+className+'\">'+\n\t\t\t\t\t'<thead><tr><th colspan=\"'+span+'\">'+\n\t\t\t\t\t\ti18n[unit] +\n\t\t\t\t\t'</th></tr></thead>'+\n\t\t\t\t\t'<tbody>'+\n\t\t\t\t\t\ta+\n\t\t\t\t\t'</tbody>'+\n\t\t\t\t'</table>'\n\t\t\t);\n\t},\n\n\t/**\n\t * Create the options for the month and year\n\t *\n\t * @param  {integer} year  Year\n\t * @param  {integer} month Month (starting at 0)\n\t * @private\n\t */\n\t_optionsTitle: function () {\n\t\tvar i18n = this.c.i18n;\n\t\tvar min = this.c.minDate;\n\t\tvar max = this.c.maxDate;\n\t\tvar minYear = min ? min.getFullYear() : null;\n\t\tvar maxYear = max ? max.getFullYear() : null;\n\n\t\tvar i = minYear !== null ? minYear : new Date().getFullYear() - this.c.yearRange;\n\t\tvar j = maxYear !== null ? maxYear : new Date().getFullYear() + this.c.yearRange;\n\n\t\tthis._options( 'month', this._range( 0, 11 ), i18n.months );\n\t\tthis._options( 'year', this._range( i, j ) );\n\n\t\t// Set the language strings in case any have changed\n\t\tthis.dom.today.text(i18n.today).text(i18n.today);\n\t\tthis.dom.clear.text(i18n.clear).text(i18n.clear);\n\t\tthis.dom.previous\n\t\t\t.attr('title', i18n.previous)\n\t\t\t.children('button')\n\t\t\t.text(i18n.previous);\n\t\tthis.dom.next\n\t\t\t.attr('title', i18n.next)\n\t\t\t.children('button')\n\t\t\t.text(i18n.next);\n\t},\n\n\t/**\n\t * Simple two digit pad\n\t *\n\t * @param  {integer} i      Value that might need padding\n\t * @return {string|integer} Padded value\n\t * @private\n\t */\n\t_pad: function ( i ) {\n\t\treturn i<10 ? '0'+i : i;\n\t},\n\n\t/**\n\t * Position the calendar to look attached to the input element\n\t * @private\n\t */\n\t_position: function () {\n\t\tvar offset = this.c.attachTo === 'input' ? this.dom.input.position() : this.dom.input.offset();\n\t\tvar container = this.dom.container;\n\t\tvar inputHeight = this.dom.input.outerHeight();\n\n\t\tif (container.hasClass('inline')) {\n\t\t\tcontainer.insertAfter( this.dom.input );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.s.parts.date && this.s.parts.time && $(window).width() > 550 ) {\n\t\t\tcontainer.addClass('horizontal');\n\t\t}\n\t\telse {\n\t\t\tcontainer.removeClass('horizontal');\n\t\t}\n\n\t\tif(this.c.attachTo === 'input') {\n\t\t\tcontainer\n\t\t\t\t.css( {\n\t\t\t\t\ttop: offset.top + inputHeight,\n\t\t\t\t\tleft: offset.left\n\t\t\t\t} )\n\t\t\t\t.insertAfter( this.dom.input );\n\t\t}\n\t\telse {\n\t\t\tcontainer\n\t\t\t\t.css( {\n\t\t\t\t\ttop: offset.top + inputHeight,\n\t\t\t\t\tleft: offset.left\n\t\t\t\t} )\n\t\t\t\t.appendTo( 'body' );\n\t\t}\n\n\t\tvar calHeight = container.outerHeight();\n\t\tvar calWidth = container.outerWidth();\n\t\tvar scrollTop = $(window).scrollTop();\n\n\t\t// Correct to the bottom\n\t\tif ( offset.top + inputHeight + calHeight - scrollTop > $(window).height() ) {\n\t\t\tvar newTop = offset.top - calHeight;\n\n\t\t\tcontainer.css( 'top', newTop < 0 ? 0 : newTop );\n\t\t}\n\n\t\t// Correct to the right\n\t\tif ( calWidth + offset.left > $(window).width() ) {\n\t\t\tvar newLeft = $(window).width() - calWidth;\n\n\t\t\t// Account for elements which are inside a position absolute element\n\t\t\tif (this.c.attachTo === 'input') {\n\t\t\t\tnewLeft -= $(container).offsetParent().offset().left;\n\t\t\t}\n\n\t\t\tcontainer.css( 'left', newLeft < 0 ? 0 : newLeft );\n\t\t}\n\t},\n\n\t/**\n\t * Create a simple array with a range of values\n\t *\n\t * @param  {integer} start   Start value (inclusive)\n\t * @param  {integer} end     End value (inclusive)\n\t * @param  {integer} [inc=1] Increment value\n\t * @return {array}           Created array\n\t * @private\n\t */\n\t_range: function ( start, end, inc ) {\n\t\tvar a = [];\n\n\t\tif ( ! inc ) {\n\t\t\tinc = 1;\n\t\t}\n\n\t\tfor ( var i=start ; i<=end ; i+=inc ) {\n\t\t\ta.push( i );\n\t\t}\n\n\t\treturn a;\n\t},\n\n\t/**\n\t * Redraw the calendar based on the display date - this is a destructive\n\t * operation\n\t *\n\t * @private\n\t */\n\t_setCalander: function () {\n\t\tif ( this.s.display ) {\n\t\t\tthis.dom.calendar\n\t\t\t\t.empty()\n\t\t\t\t.append( this._htmlMonth(\n\t\t\t\t\tthis.s.display.getUTCFullYear(),\n\t\t\t\t\tthis.s.display.getUTCMonth()\n\t\t\t\t) );\n\t\t}\n\t},\n\n\t/**\n\t * Set the month and year for the calendar based on the current display date\n\t *\n\t * @private\n\t */\n\t_setTitle: function () {\n\t\tthis._optionSet( 'month', this.s.display.getUTCMonth() );\n\t\tthis._optionSet( 'year', this.s.display.getUTCFullYear() );\n\t},\n\n\t/**\n\t * Set the time based on the current value of the widget\n\t *\n\t * @private\n\t */\n\t_setTime: function () {\n\t\tvar that = this;\n\t\tvar d = this.s.d;\n\t\t\n\t\t// luxon uses different method names so need to be able to call them. This happens a few time later in this method too\n\t\tvar luxDT = null\n\t\tif (this._isLuxon()) {\n\t\t\tluxDT = dateLib.DateTime.fromJSDate(d).toUTC();\n\t\t}\n\n\t\tvar hours = luxDT != null\n\t\t\t? luxDT.hour\n\t\t\t: d\n\t\t\t\t? d.getUTCHours()\n\t\t\t\t: -1;\n\n\t\tvar allowed = function ( prop ) { // Backwards compt with `Increment` option\n\t\t\treturn that.c[prop+'Available'] ?\n\t\t\t\tthat.c[prop+'Available'] :\n\t\t\t\tthat._range( 0, 59, that.c[prop+'Increment'] );\n\t\t}\n\n\t\tthis._optionsTime( 'hours', this.s.parts.hours12 ? 12 : 24, hours, this.c.hoursAvailable )\n\t\tthis._optionsTime(\n\t\t\t'minutes',\n\t\t\t60,\n\t\t\tluxDT != null\n\t\t\t\t? luxDT.minute\n\t\t\t\t: d\n\t\t\t\t\t? d.getUTCMinutes()\n\t\t\t\t\t: -1,\n\t\t\tallowed('minutes'),\n\t\t\tthis.s.minutesRange\n\t\t);\n\t\tthis._optionsTime(\n\t\t\t'seconds',\n\t\t\t60,\n\t\t\tluxDT != null\n\t\t\t\t? luxDT.second\n\t\t\t\t: d\n\t\t\t\t\t? d.getSeconds()\n\t\t\t\t\t: -1,\n\t\t\tallowed('seconds'),\n\t\t\tthis.s.secondsRange\n\t\t);\n\t},\n\n\t/**\n\t * Show the widget and add events to the document required only while it\n\t * is displayed\n\t * \n\t * @private\n\t */\n\t_show: function () {\n\t\tvar that = this;\n\t\tvar namespace = this.s.namespace;\n\n\t\tthis._position();\n\n\t\t// Need to reposition on scroll\n\t\t$(window).on( 'scroll.'+namespace+' resize.'+namespace, function () {\n\t\t\tthat._position();\n\t\t} );\n\n\t\t$('div.DTE_Body_Content').on( 'scroll.'+namespace, function () {\n\t\t\tthat._position();\n\t\t} );\n\n\t\t$('div.dataTables_scrollBody').on( 'scroll.'+namespace, function () {\n\t\t\tthat._position();\n\t\t} );\n\n\t\tvar offsetParent = this.dom.input[0].offsetParent;\n\n\t\tif ( offsetParent !== document.body ) {\n\t\t\t$(offsetParent).on( 'scroll.'+namespace, function () {\n\t\t\t\tthat._position();\n\t\t\t} );\n\t\t}\n\n\t\t// On tab focus will move to a different field (no keyboard navigation\n\t\t// in the date picker - this might need to be changed).\n\t\t$(document).on( 'keydown.'+namespace, function (e) {\n\t\t\tif (\n\t\t\t\te.keyCode === 9  || // tab\n\t\t\t\te.keyCode === 27 || // esc\n\t\t\t\te.keyCode === 13    // return\n\t\t\t) {\n\t\t\t\tthat._hide();\n\t\t\t}\n\t\t} );\n\n\t\t// Hide if clicking outside of the widget - but in a different click\n\t\t// event from the one that was used to trigger the show (bubble and\n\t\t// inline)\n\t\tsetTimeout( function () {\n\t\t\t$('body').on( 'click.'+namespace, function (e) {\n\t\t\t\tvar parents = $(e.target).parents();\n\n\t\t\t\tif ( ! parents.filter( that.dom.container ).length && e.target !== that.dom.input[0] ) {\n\t\t\t\t\tthat._hide();\n\t\t\t\t}\n\t\t\t} );\n\t\t}, 10 );\n\t},\n\n\t/**\n\t * Write the formatted string to the input element this control is attached\n\t * to\n\t *\n\t * @private\n\t */\n\t_writeOutput: function ( focus ) {\n\t\tvar date = this.s.d;\n\t\tvar out = '';\n\t\tvar input = this.dom.input;\n\n\t\tif (date) {\n\t\t\tout = this._convert(date, null, this.c.format);\n\t\t}\n\n\t\tinput.val( out );\n\n\t\t// Create a DOM synthetic event. Can't use $().trigger() as\n\t\t// that doesn't actually trigger non-jQuery event listeners\n\t\tvar event = new Event('change', {bubbles: true});\n\t\tinput[0].dispatchEvent(event);\n\t\t\n\t\tif ( input.attr('type') === 'hidden' ) {\n\t\t\tthis.val(out, false);\n\t\t}\n\n\t\tif ( focus ) {\n\t\t\tinput.focus();\n\t\t}\n\t}\n} );\n\n/**\n * Use a specificmoment compatible date library\n */\nDateTime.use = function (lib) {\n\tdateLib = lib;\n};\n\n/**\n * For generating unique namespaces\n *\n * @type {Number}\n * @private\n */\nDateTime._instance = 0;\n\n/**\n * To indicate to DataTables what type of library this is\n */\nDateTime.type = 'DateTime';\n\n/**\n * Defaults for the date time picker\n *\n * @type {Object}\n */\nDateTime.defaults = {\n\tattachTo: 'body',\n\n\tbuttons: {\n\t\tclear: false,\n\t\ttoday: false\n\t},\n\n\t// Not documented - could be an internal property\n\tclassPrefix: 'dt-datetime',\n\n\t// function or array of ints\n\tdisableDays: null,\n\n\t// first day of the week (0: Sunday, 1: Monday, etc)\n\tfirstDay: 1,\n\n\tformat: 'YYYY-MM-DD',\n\n\thoursAvailable: null,\n\n\ti18n: {\n\t\tclear:    'Clear',\n\t\tprevious: 'Previous',\n\t\tnext:     'Next',\n\t\tmonths:   [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],\n\t\tweekdays: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],\n\t\tamPm:     [ 'am', 'pm' ],\n\t\thours:    'Hour',\n\t\tminutes:  'Minute',\n\t\tseconds:  'Second',\n\t\tunknown:  '-',\n\t\ttoday:    'Today'\n\t},\n\n\tmaxDate: null,\n\n\tminDate: null,\n\n\tminutesAvailable: null,\n\n\tminutesIncrement: 1, // deprecated\n\n\tstrict: true,\n\n\tlocale: 'en',\n\n\tonChange: function () {},\n\n\tsecondsAvailable: null,\n\n\tsecondsIncrement: 1, // deprecated\n\n\t// show the ISO week number at the head of the row\n\tshowWeekNumber: false,\n\n\t// overruled by max / min date\n\tyearRange: 25\n};\n\nDateTime.version = '1.5.1';\n\n/**\n * CommonJS factory function pass through. Matches DataTables.\n * @param {*} root Window\n * @param {*} jq jQUery\n * @returns {boolean} Indicator\n */\nDateTime.factory = function (root, jq) {\n\tvar is = false;\n\n\t// Test if the first parameter is a window object\n\tif (root && root.document) {\n\t\twindow = root;\n\t\tdocument = root.document;\n\t}\n\n\t// Test if the second parameter is a jQuery object\n\tif (jq && jq.fn && jq.fn.jquery) {\n\t\t$ = jq;\n\t\tis = true;\n\t}\n\n\treturn is;\n}\n\n// Global export - if no conflicts\nif (! window.DateTime) {\n\twindow.DateTime = DateTime;\n}\n\n// Global DataTable\nif (window.DataTable) {\n\twindow.DataTable.DateTime = DateTime;\n}\n\n// Make available via jQuery\n$.fn.dtDateTime = function (options) {\n\treturn this.each(function() {\n\t\tnew DateTime(this, options);\n\t});\n}\n\n// Attach to DataTables if present\nif ($.fn.dataTable) {\n\t$.fn.dataTable.DateTime = DateTime;\n\t$.fn.DataTable.DateTime = DateTime;\n\n\tif ($.fn.dataTable.Editor) {\n\t\t$.fn.dataTable.Editor.DateTime = DateTime;\n\t}\n}\n\n\nreturn DateTime;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/css/fixedColumns.bootstrap.css",
    "content": "table.dataTable thead tr > .dtfc-fixed-left,\ntable.dataTable thead tr > .dtfc-fixed-right,\ntable.dataTable tfoot tr > .dtfc-fixed-left,\ntable.dataTable tfoot tr > .dtfc-fixed-right {\n  top: 0;\n  bottom: 0;\n  z-index: 3;\n  background-color: white;\n}\ntable.dataTable tbody tr > .dtfc-fixed-left,\ntable.dataTable tbody tr > .dtfc-fixed-right {\n  z-index: 1;\n  background-color: white;\n}\n\ndiv.dtfc-left-top-blocker,\ndiv.dtfc-right-top-blocker {\n  background-color: white;\n}\n\nhtml.dark table.dataTable thead tr > .dtfc-fixed-left,\nhtml.dark table.dataTable thead tr > .dtfc-fixed-right,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark div.dtfc-left-top-blocker,\nhtml.dark div.dtfc-right-top-blocker {\n  background-color: var(--dt-html-background);\n}\n\ndiv.dtfc-right-top-blocker,\ndiv.dtfc-left-top-blocker {\n  margin-top: 6px;\n  border-bottom: 0px solid #ddd !important;\n}\n\ntable.dataTable.table-bordered.dtfc-has-left {\n  border-left: none;\n}\n\ndiv.dataTables_scroll.dtfc-has-left table.table-bordered {\n  border-left: none;\n}\n\ndiv.dataTables_scrollBody {\n  border-left: 1px solid #ddd !important;\n}\n\ndiv.dataTables_scrollFootInner table.table-bordered tr th:first-child,\ndiv.dataTables_scrollHeadInner table.table-bordered tr th:first-child {\n  border-left: 1px solid #ddd !important;\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/css/fixedColumns.bootstrap4.css",
    "content": "table.dataTable thead tr > .dtfc-fixed-left,\ntable.dataTable thead tr > .dtfc-fixed-right,\ntable.dataTable tfoot tr > .dtfc-fixed-left,\ntable.dataTable tfoot tr > .dtfc-fixed-right {\n  top: 0;\n  bottom: 0;\n  z-index: 3;\n  background-color: white;\n}\ntable.dataTable tbody tr > .dtfc-fixed-left,\ntable.dataTable tbody tr > .dtfc-fixed-right {\n  z-index: 1;\n  background-color: white;\n}\n\ndiv.dtfc-left-top-blocker,\ndiv.dtfc-right-top-blocker {\n  background-color: white;\n}\n\nhtml.dark table.dataTable thead tr > .dtfc-fixed-left,\nhtml.dark table.dataTable thead tr > .dtfc-fixed-right,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark div.dtfc-left-top-blocker,\nhtml.dark div.dtfc-right-top-blocker {\n  background-color: var(--dt-html-background);\n}\n\ndiv.dtfc-right-top-blocker,\ndiv.dtfc-left-top-blocker {\n  margin-top: 6px;\n  border-bottom: 0px solid #ddd !important;\n}\n\ntable.dataTable.table-bordered.dtfc-has-left {\n  border-left: none;\n}\n\ndiv.dataTables_scroll.dtfc-has-left table.table-bordered {\n  border-left: none;\n}\n\ndiv.dataTables_scrollBody {\n  border-left: 1px solid #ddd !important;\n}\n\ndiv.dataTables_scrollFootInner table.table-bordered tr th:first-child,\ndiv.dataTables_scrollHeadInner table.table-bordered tr th:first-child {\n  border-left: 1px solid #ddd !important;\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/css/fixedColumns.bootstrap5.css",
    "content": "table.dataTable thead tr > .dtfc-fixed-left,\ntable.dataTable thead tr > .dtfc-fixed-right,\ntable.dataTable tfoot tr > .dtfc-fixed-left,\ntable.dataTable tfoot tr > .dtfc-fixed-right {\n  top: 0;\n  bottom: 0;\n  z-index: 3;\n  background-color: white;\n}\ntable.dataTable tbody tr > .dtfc-fixed-left,\ntable.dataTable tbody tr > .dtfc-fixed-right {\n  z-index: 1;\n  background-color: white;\n}\n\ndiv.dtfc-left-top-blocker,\ndiv.dtfc-right-top-blocker {\n  background-color: white;\n}\n\nhtml.dark table.dataTable thead tr > .dtfc-fixed-left,\nhtml.dark table.dataTable thead tr > .dtfc-fixed-right,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark div.dtfc-left-top-blocker,\nhtml.dark div.dtfc-right-top-blocker {\n  background-color: var(--dt-html-background);\n}\n\ndiv.dtfc-right-top-blocker,\ndiv.dtfc-left-top-blocker {\n  margin-top: 6px;\n  border-bottom: 0px solid #ddd !important;\n}\n\ntable.dataTable.table-bordered.dtfc-has-left {\n  border-left: none;\n}\n\ndiv.dataTables_scroll.dtfc-has-left table.table-bordered {\n  border-left: none;\n}\n\ndiv.dataTables_scrollBody {\n  border-left: 1px solid #ddd !important;\n}\n\ndiv.dataTables_scrollFootInner table.table-bordered tr th:first-child,\ndiv.dataTables_scrollHeadInner table.table-bordered tr th:first-child {\n  border-left: 1px solid #ddd !important;\n}\n\nhtml[data-bs-theme=dark] table.dataTable thead tr > .dtfc-fixed-left,\nhtml[data-bs-theme=dark] table.dataTable thead tr > .dtfc-fixed-right,\nhtml[data-bs-theme=dark] table.dataTable tfoot tr > .dtfc-fixed-left,\nhtml[data-bs-theme=dark] table.dataTable tfoot tr > .dtfc-fixed-right {\n  background-color: var(--bs-body-bg);\n}\nhtml[data-bs-theme=dark] table.dataTable tbody tr > .dtfc-fixed-left,\nhtml[data-bs-theme=dark] table.dataTable tbody tr > .dtfc-fixed-right {\n  background-color: var(--bs-body-bg);\n}\nhtml[data-bs-theme=dark] div.dtfc-left-top-blocker,\nhtml[data-bs-theme=dark] div.dtfc-right-top-blocker {\n  background-color: var(--bs-body-bg);\n}\nhtml[data-bs-theme=dark] div.dataTables_scrollBody {\n  border-left-color: var(--bs-border-color) !important;\n}\nhtml[data-bs-theme=dark] div.dataTables_scrollFootInner table.table-bordered tr th:first-child,\nhtml[data-bs-theme=dark] div.dataTables_scrollHeadInner table.table-bordered tr th:first-child {\n  border-left-color: var(--bs-border-color) !important;\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/css/fixedColumns.bulma.css",
    "content": "table.dataTable thead tr > .dtfc-fixed-left,\ntable.dataTable thead tr > .dtfc-fixed-right,\ntable.dataTable tfoot tr > .dtfc-fixed-left,\ntable.dataTable tfoot tr > .dtfc-fixed-right {\n  top: 0;\n  bottom: 0;\n  z-index: 3;\n  background-color: white;\n}\ntable.dataTable tbody tr > .dtfc-fixed-left,\ntable.dataTable tbody tr > .dtfc-fixed-right {\n  z-index: 1;\n  background-color: white;\n}\n\ndiv.dtfc-left-top-blocker,\ndiv.dtfc-right-top-blocker {\n  background-color: white;\n}\n\nhtml.dark table.dataTable thead tr > .dtfc-fixed-left,\nhtml.dark table.dataTable thead tr > .dtfc-fixed-right,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark div.dtfc-left-top-blocker,\nhtml.dark div.dtfc-right-top-blocker {\n  background-color: var(--dt-html-background);\n}\n\ndiv.dtfc-right-top-blocker {\n  border-bottom: none !important;\n}\n\ntr.dt-rowReorder-moving td.dtfc-fixed-left,\ntr.dt-rowReorder-moving td.dtfc-fixed-right {\n  border-top: 2px solid #888 !important;\n  border-bottom: 2px solid #888 !important;\n}\ntr.dt-rowReorder-moving td.dtfc-fixed-left:first-child {\n  border-left: 2px solid #888 !important;\n}\ntr.dt-rowReorder-moving td.dtfc-fixed-right:last-child {\n  border-right: 2px solid #888 !important;\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/css/fixedColumns.dataTables.css",
    "content": "table.dataTable thead tr > .dtfc-fixed-left,\ntable.dataTable thead tr > .dtfc-fixed-right,\ntable.dataTable tfoot tr > .dtfc-fixed-left,\ntable.dataTable tfoot tr > .dtfc-fixed-right {\n  top: 0;\n  bottom: 0;\n  z-index: 3;\n  background-color: white;\n}\ntable.dataTable tbody tr > .dtfc-fixed-left,\ntable.dataTable tbody tr > .dtfc-fixed-right {\n  z-index: 1;\n  background-color: white;\n}\n\ndiv.dtfc-left-top-blocker,\ndiv.dtfc-right-top-blocker {\n  background-color: white;\n}\n\nhtml.dark table.dataTable thead tr > .dtfc-fixed-left,\nhtml.dark table.dataTable thead tr > .dtfc-fixed-right,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark div.dtfc-left-top-blocker,\nhtml.dark div.dtfc-right-top-blocker {\n  background-color: var(--dt-html-background);\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/css/fixedColumns.foundation.css",
    "content": "table.dataTable thead tr > .dtfc-fixed-left,\ntable.dataTable thead tr > .dtfc-fixed-right,\ntable.dataTable tfoot tr > .dtfc-fixed-left,\ntable.dataTable tfoot tr > .dtfc-fixed-right {\n  top: 0;\n  bottom: 0;\n  z-index: 3;\n  background-color: rgb(248, 248, 248);\n}\ntable.dataTable tbody tr > .dtfc-fixed-left,\ntable.dataTable tbody tr > .dtfc-fixed-right {\n  z-index: 1;\n  background-color: white;\n}\n\ndiv.dtfc-left-top-blocker,\ndiv.dtfc-right-top-blocker {\n  background-color: rgb(248, 248, 248);\n}\n\nhtml.dark table.dataTable thead tr > .dtfc-fixed-left,\nhtml.dark table.dataTable thead tr > .dtfc-fixed-right,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark div.dtfc-left-top-blocker,\nhtml.dark div.dtfc-right-top-blocker {\n  background-color: var(--dt-html-background);\n}\n\ntable.dataTable.dtfc-has-left tbody {\n  border-left: none;\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/css/fixedColumns.jqueryui.css",
    "content": "table.dataTable thead tr > .dtfc-fixed-left,\ntable.dataTable thead tr > .dtfc-fixed-right,\ntable.dataTable tfoot tr > .dtfc-fixed-left,\ntable.dataTable tfoot tr > .dtfc-fixed-right {\n  top: 0;\n  bottom: 0;\n  z-index: 3;\n  background-color: white;\n}\ntable.dataTable tbody tr > .dtfc-fixed-left,\ntable.dataTable tbody tr > .dtfc-fixed-right {\n  z-index: 1;\n  background-color: white;\n}\n\ndiv.dtfc-left-top-blocker,\ndiv.dtfc-right-top-blocker {\n  background-color: white;\n}\n\nhtml.dark table.dataTable thead tr > .dtfc-fixed-left,\nhtml.dark table.dataTable thead tr > .dtfc-fixed-right,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark div.dtfc-left-top-blocker,\nhtml.dark div.dtfc-right-top-blocker {\n  background-color: var(--dt-html-background);\n}\n\ndiv.dtfc-right-top-blocker {\n  border-bottom: none !important;\n  background-color: rgb(246, 246, 246) !important;\n  border-top: 1px solid #c5c5c5 !important;\n}\n\ntr.dt-rowReorder-moving td.dtfc-fixed-left,\ntr.dt-rowReorder-moving td.dtfc-fixed-right {\n  border-top: 2px solid #555 !important;\n  border-bottom: 2px solid #555 !important;\n}\ntr.dt-rowReorder-moving td.dtfc-fixed-left:first-child {\n  border-left: 2px solid #555 !important;\n}\ntr.dt-rowReorder-moving td.dtfc-fixed-right:last-child {\n  border-right: 2px solid #555 !important;\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/css/fixedColumns.semanticui.css",
    "content": "table.dataTable thead tr > .dtfc-fixed-left,\ntable.dataTable thead tr > .dtfc-fixed-right,\ntable.dataTable tfoot tr > .dtfc-fixed-left,\ntable.dataTable tfoot tr > .dtfc-fixed-right {\n  top: 0;\n  bottom: 0;\n  z-index: 3;\n  background-color: white;\n}\ntable.dataTable tbody tr > .dtfc-fixed-left,\ntable.dataTable tbody tr > .dtfc-fixed-right {\n  z-index: 1;\n  background-color: white;\n}\n\ndiv.dtfc-left-top-blocker,\ndiv.dtfc-right-top-blocker {\n  background-color: white;\n}\n\nhtml.dark table.dataTable thead tr > .dtfc-fixed-left,\nhtml.dark table.dataTable thead tr > .dtfc-fixed-right,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark div.dtfc-left-top-blocker,\nhtml.dark div.dtfc-right-top-blocker {\n  background-color: var(--dt-html-background);\n}\n\ntable.dataTable {\n  border-left-width: 0px !important;\n}\ntable.dataTable tr {\n  border-left-width: 0px;\n}\ntable.dataTable tr th:first-child,\ntable.dataTable tr td:first-child {\n  border-left: 1px solid rgba(34, 36, 38, 0.15) !important;\n}\n\ndiv.dtfc-right-top-blocker {\n  border-bottom: none !important;\n}\n\ntr.dt-rowReorder-moving td.dtfc-fixed-left,\ntr.dt-rowReorder-moving td.dtfc-fixed-right {\n  border-top: 2px solid #888 !important;\n  border-bottom: 2px solid #888 !important;\n}\ntr.dt-rowReorder-moving td.dtfc-fixed-left:first-child {\n  border-left: 2px solid #888 !important;\n}\ntr.dt-rowReorder-moving td.dtfc-fixed-right:last-child {\n  border-right: 2px solid #888 !important;\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/js/dataTables.fixedColumns.js",
    "content": "/*! FixedColumns 4.3.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n(function () {\n    'use strict';\n\n    var $$1;\n    var dataTable;\n    function setJQuery(jq) {\n        $$1 = jq;\n        dataTable = $$1.fn.dataTable;\n    }\n    var FixedColumns = /** @class */ (function () {\n        function FixedColumns(settings, opts) {\n            var _this = this;\n            // Check that the required version of DataTables is included\n            if (!dataTable || !dataTable.versionCheck || !dataTable.versionCheck('1.10.0')) {\n                throw new Error('FixedColumns requires DataTables 1.10 or newer');\n            }\n            var table = new dataTable.Api(settings);\n            this.classes = $$1.extend(true, {}, FixedColumns.classes);\n            // Get options from user\n            this.c = $$1.extend(true, {}, FixedColumns.defaults, opts);\n            // Backwards compatibility for deprecated leftColumns\n            if ((!opts || opts.left === undefined) && this.c.leftColumns !== undefined) {\n                this.c.left = this.c.leftColumns;\n            }\n            // Backwards compatibility for deprecated rightColumns\n            if ((!opts || opts.right === undefined) && this.c.rightColumns !== undefined) {\n                this.c.right = this.c.rightColumns;\n            }\n            this.s = {\n                barWidth: 0,\n                dt: table,\n                rtl: $$1('body').css('direction') === 'rtl'\n            };\n            // Common CSS for all blockers\n            var blockerCSS = {\n                'bottom': '0px',\n                'display': 'block',\n                'position': 'absolute',\n                'width': this.s.barWidth + 1 + 'px'\n            };\n            this.dom = {\n                leftBottomBlocker: $$1('<div>')\n                    .css(blockerCSS)\n                    .css('left', 0)\n                    .addClass(this.classes.leftBottomBlocker),\n                leftTopBlocker: $$1('<div>')\n                    .css(blockerCSS)\n                    .css({\n                    left: 0,\n                    top: 0\n                })\n                    .addClass(this.classes.leftTopBlocker),\n                rightBottomBlocker: $$1('<div>')\n                    .css(blockerCSS)\n                    .css('right', 0)\n                    .addClass(this.classes.rightBottomBlocker),\n                rightTopBlocker: $$1('<div>')\n                    .css(blockerCSS)\n                    .css({\n                    right: 0,\n                    top: 0\n                })\n                    .addClass(this.classes.rightTopBlocker)\n            };\n            if (this.s.dt.settings()[0]._bInitComplete) {\n                // Fixed Columns Initialisation\n                this._addStyles();\n                this._setKeyTableListener();\n            }\n            else {\n                table.one('init.dt.dtfc', function () {\n                    // Fixed Columns Initialisation\n                    _this._addStyles();\n                    _this._setKeyTableListener();\n                });\n            }\n            table.on('column-sizing.dt.dtfc', function () { return _this._addStyles(); });\n            // Make class available through dt object\n            table.settings()[0]._fixedColumns = this;\n            table.on('destroy', function () { return _this._destroy(); });\n            return this;\n        }\n        FixedColumns.prototype.left = function (newVal) {\n            // If the value is to change\n            if (newVal !== undefined) {\n                if (newVal >= 0 && newVal <= this.s.dt.columns().count()) {\n                    // Set the new values and redraw the columns\n                    this.c.left = newVal;\n                    this._addStyles();\n                }\n                return this;\n            }\n            return this.c.left;\n        };\n        FixedColumns.prototype.right = function (newVal) {\n            // If the value is to change\n            if (newVal !== undefined) {\n                if (newVal >= 0 && newVal <= this.s.dt.columns().count()) {\n                    // Set the new values and redraw the columns\n                    this.c.right = newVal;\n                    this._addStyles();\n                }\n                return this;\n            }\n            return this.c.right;\n        };\n        /**\n         * Iterates over the columns, fixing the appropriate ones to the left and right\n         */\n        FixedColumns.prototype._addStyles = function () {\n            // Set the bar width if vertical scrolling is enabled\n            if (this.s.dt.settings()[0].oScroll.sY) {\n                var scroll_1 = $$1(this.s.dt.table().node()).closest('div.dataTables_scrollBody')[0];\n                var barWidth = this.s.dt.settings()[0].oBrowser.barWidth;\n                if (scroll_1.offsetWidth - scroll_1.clientWidth >= barWidth) {\n                    this.s.barWidth = barWidth;\n                }\n                else {\n                    this.s.barWidth = 0;\n                }\n                this.dom.rightTopBlocker.css('width', this.s.barWidth + 1);\n                this.dom.leftTopBlocker.css('width', this.s.barWidth + 1);\n                this.dom.rightBottomBlocker.css('width', this.s.barWidth + 1);\n                this.dom.leftBottomBlocker.css('width', this.s.barWidth + 1);\n            }\n            var parentDiv = null;\n            // Get the header and it's height\n            var header = this.s.dt.column(0).header();\n            var headerHeight = null;\n            if (header !== null) {\n                header = $$1(header);\n                headerHeight = header.outerHeight() + 1;\n                parentDiv = $$1(header.closest('div.dataTables_scroll')).css('position', 'relative');\n            }\n            // Get the footer and it's height\n            var footer = this.s.dt.column(0).footer();\n            var footerHeight = null;\n            if (footer !== null) {\n                footer = $$1(footer);\n                footerHeight = footer.outerHeight();\n                // Only attempt to retrieve the parentDiv if it has not been retrieved already\n                if (parentDiv === null) {\n                    parentDiv = $$1(footer.closest('div.dataTables_scroll')).css('position', 'relative');\n                }\n            }\n            // Get the number of columns in the table - this is used often so better to only make 1 api call\n            var numCols = this.s.dt.columns().data().toArray().length;\n            // Tracker for the number of pixels should be left to the left of the table\n            var distLeft = 0;\n            // Sometimes the headers have slightly different widths so need to track them individually\n            var headLeft = 0;\n            // Get all of the row elements in the table\n            var rows = $$1(this.s.dt.table().node()).children('tbody').children('tr');\n            var invisibles = 0;\n            // When working from right to left we need to know how many are invisible before a point,\n            // without including those that are invisible after\n            var prevInvisible = new Map();\n            // Iterate over all of the columns\n            for (var i = 0; i < numCols; i++) {\n                var column = this.s.dt.column(i);\n                // Set the map for the previous column\n                if (i > 0) {\n                    prevInvisible.set(i - 1, invisibles);\n                }\n                if (!column.visible()) {\n                    invisibles++;\n                    continue;\n                }\n                // Get the columns header and footer element\n                var colHeader = $$1(column.header());\n                var colFooter = $$1(column.footer());\n                // If i is less than the value of left then this column should be fixed left\n                if (i - invisibles < this.c.left) {\n                    $$1(this.s.dt.table().node()).addClass(this.classes.tableFixedLeft);\n                    parentDiv.addClass(this.classes.tableFixedLeft);\n                    // Add the width of the previous node - only if we are on atleast the second column\n                    if (i - invisibles > 0) {\n                        var prevIdx = i;\n                        // Simply using the number of hidden columns doesn't work here,\n                        // if the first is hidden then this would be thrown off\n                        while (prevIdx + 1 < numCols) {\n                            var prevCol = this.s.dt.column(prevIdx - 1, { page: 'current' });\n                            if (prevCol.visible()) {\n                                distLeft += $$1(prevCol.nodes()[0]).outerWidth();\n                                headLeft += prevCol.header() ?\n                                    $$1(prevCol.header()).outerWidth() :\n                                    prevCol.footer() ?\n                                        $$1(prevCol.header()).outerWidth() :\n                                        0;\n                                break;\n                            }\n                            prevIdx--;\n                        }\n                    }\n                    // Iterate over all of the rows, fixing the cell to the left\n                    for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n                        var row = rows_1[_i];\n                        $$1($$1(row).children()[i - invisibles])\n                            .css(this._getCellCSS(false, distLeft, 'left'))\n                            .addClass(this.classes.fixedLeft);\n                    }\n                    // Add the css for the header and the footer\n                    colHeader\n                        .css(this._getCellCSS(true, headLeft, 'left'))\n                        .addClass(this.classes.fixedLeft);\n                    colFooter\n                        .css(this._getCellCSS(true, headLeft, 'left'))\n                        .addClass(this.classes.fixedLeft);\n                }\n                else {\n                    // Iteriate through all of the rows, making sure they aren't currently trying to fix left\n                    for (var _a = 0, rows_2 = rows; _a < rows_2.length; _a++) {\n                        var row = rows_2[_a];\n                        var cell = $$1($$1(row).children()[i - invisibles]);\n                        // If the cell is trying to fix to the left, remove the class and the css\n                        if (cell.hasClass(this.classes.fixedLeft)) {\n                            cell\n                                .css(this._clearCellCSS('left'))\n                                .removeClass(this.classes.fixedLeft);\n                        }\n                    }\n                    // Make sure the header for this column isn't fixed left\n                    if (colHeader.hasClass(this.classes.fixedLeft)) {\n                        colHeader\n                            .css(this._clearCellCSS('left'))\n                            .removeClass(this.classes.fixedLeft);\n                    }\n                    // Make sure the footer for this column isn't fixed left\n                    if (colFooter.hasClass(this.classes.fixedLeft)) {\n                        colFooter\n                            .css(this._clearCellCSS('left'))\n                            .removeClass(this.classes.fixedLeft);\n                    }\n                }\n            }\n            var distRight = 0;\n            var headRight = 0;\n            // Counter for the number of invisible columns so far\n            var rightInvisibles = 0;\n            for (var i = numCols - 1; i >= 0; i--) {\n                var column = this.s.dt.column(i);\n                // If a column is invisible just skip it\n                if (!column.visible()) {\n                    rightInvisibles++;\n                    continue;\n                }\n                // Get the columns header and footer element\n                var colHeader = $$1(column.header());\n                var colFooter = $$1(column.footer());\n                // Get the number of visible columns that came before this one\n                var prev = prevInvisible.get(i);\n                if (prev === undefined) {\n                    // If it wasn't set then it was the last column so just use the final value\n                    prev = invisibles;\n                }\n                if (i + rightInvisibles >= numCols - this.c.right) {\n                    $$1(this.s.dt.table().node()).addClass(this.classes.tableFixedRight);\n                    parentDiv.addClass(this.classes.tableFixedRight);\n                    // Add the widht of the previous node, only if we are on atleast the second column\n                    if (i + 1 + rightInvisibles < numCols) {\n                        var prevIdx = i;\n                        // Simply using the number of hidden columns doesn't work here,\n                        // if the first is hidden then this would be thrown off\n                        while (prevIdx + 1 < numCols) {\n                            var prevCol = this.s.dt.column(prevIdx + 1, { page: 'current' });\n                            if (prevCol.visible()) {\n                                distRight += $$1(prevCol.nodes()[0]).outerWidth();\n                                headRight += prevCol.header() ?\n                                    $$1(prevCol.header()).outerWidth() :\n                                    prevCol.footer() ?\n                                        $$1(prevCol.header()).outerWidth() :\n                                        0;\n                                break;\n                            }\n                            prevIdx++;\n                        }\n                    }\n                    // Iterate over all of the rows, fixing the cell to the right\n                    for (var _b = 0, rows_3 = rows; _b < rows_3.length; _b++) {\n                        var row = rows_3[_b];\n                        $$1($$1(row).children()[i - prev])\n                            .css(this._getCellCSS(false, distRight, 'right'))\n                            .addClass(this.classes.fixedRight);\n                    }\n                    // Add the css for the header and the footer\n                    colHeader\n                        .css(this._getCellCSS(true, headRight, 'right'))\n                        .addClass(this.classes.fixedRight);\n                    colFooter\n                        .css(this._getCellCSS(true, headRight, 'right'))\n                        .addClass(this.classes.fixedRight);\n                }\n                else {\n                    // Iteriate through all of the rows, making sure they aren't currently trying to fix right\n                    for (var _c = 0, rows_4 = rows; _c < rows_4.length; _c++) {\n                        var row = rows_4[_c];\n                        var cell = $$1($$1(row).children()[i - prev]);\n                        // If the cell is trying to fix to the right, remove the class and the css\n                        if (cell.hasClass(this.classes.fixedRight)) {\n                            cell\n                                .css(this._clearCellCSS('right'))\n                                .removeClass(this.classes.fixedRight);\n                        }\n                    }\n                    // Make sure the header for this column isn't fixed right\n                    if (colHeader.hasClass(this.classes.fixedRight)) {\n                        colHeader\n                            .css(this._clearCellCSS('right'))\n                            .removeClass(this.classes.fixedRight);\n                    }\n                    // Make sure the footer for this column isn't fixed right\n                    if (colFooter.hasClass(this.classes.fixedRight)) {\n                        colFooter\n                            .css(this._clearCellCSS('right'))\n                            .removeClass(this.classes.fixedRight);\n                    }\n                }\n            }\n            // If there is a header with the index class and reading rtl then add right top blocker\n            if (header) {\n                if (!this.s.rtl) {\n                    this.dom.rightTopBlocker.outerHeight(headerHeight);\n                    parentDiv.append(this.dom.rightTopBlocker);\n                }\n                else {\n                    this.dom.leftTopBlocker.outerHeight(headerHeight);\n                    parentDiv.append(this.dom.leftTopBlocker);\n                }\n            }\n            // If there is a footer with the index class and reading rtl then add right bottom blocker\n            if (footer) {\n                if (!this.s.rtl) {\n                    this.dom.rightBottomBlocker.outerHeight(footerHeight);\n                    parentDiv.append(this.dom.rightBottomBlocker);\n                }\n                else {\n                    this.dom.leftBottomBlocker.outerHeight(footerHeight);\n                    parentDiv.append(this.dom.leftBottomBlocker);\n                }\n            }\n        };\n        /**\n         * Clean up\n         */\n        FixedColumns.prototype._destroy = function () {\n            this.s.dt.off('.dtfc');\n            this.dom.leftBottomBlocker.remove();\n            this.dom.leftTopBlocker.remove();\n            this.dom.rightBottomBlocker.remove();\n            this.dom.rightTopBlocker.remove();\n        };\n        /**\n         * Gets the correct CSS for the cell, header or footer based on options provided\n         *\n         * @param header Whether this cell is a header or a footer\n         * @param dist The distance that the cell should be moved away from the edge\n         * @param lr Indicator of fixing to the left or the right\n         * @returns An object containing the correct css\n         */\n        FixedColumns.prototype._getCellCSS = function (header, dist, lr) {\n            if (lr === 'left') {\n                return this.s.rtl\n                    ? {\n                        position: 'sticky',\n                        right: dist + 'px'\n                    }\n                    : {\n                        left: dist + 'px',\n                        position: 'sticky'\n                    };\n            }\n            else {\n                return this.s.rtl\n                    ? {\n                        left: dist + (header ? this.s.barWidth : 0) + 'px',\n                        position: 'sticky'\n                    }\n                    : {\n                        position: 'sticky',\n                        right: dist + (header ? this.s.barWidth : 0) + 'px'\n                    };\n            }\n        };\n        /**\n         * Gets the css that is required to clear the fixing to a side\n         *\n         * @param lr Indicator of fixing to the left or the right\n         * @returns An object containing the correct css\n         */\n        FixedColumns.prototype._clearCellCSS = function (lr) {\n            if (lr === 'left') {\n                return !this.s.rtl ?\n                    {\n                        left: '',\n                        position: ''\n                    } :\n                    {\n                        position: '',\n                        right: ''\n                    };\n            }\n            else {\n                return !this.s.rtl ?\n                    {\n                        position: '',\n                        right: ''\n                    } :\n                    {\n                        left: '',\n                        position: ''\n                    };\n            }\n        };\n        FixedColumns.prototype._setKeyTableListener = function () {\n            var _this = this;\n            this.s.dt.on('key-focus.dt.dtfc', function (e, dt, cell) {\n                var cellPos = $$1(cell.node()).offset();\n                var scroll = $$1($$1(_this.s.dt.table().node()).closest('div.dataTables_scrollBody'));\n                // If there are fixed columns to the left\n                if (_this.c.left > 0) {\n                    // Get the rightmost left fixed column header, it's position and it's width\n                    var rightMost = $$1(_this.s.dt.column(_this.c.left - 1).header());\n                    var rightMostPos = rightMost.offset();\n                    var rightMostWidth = rightMost.outerWidth();\n                    // If the current highlighted cell is left of the rightmost cell on the screen\n                    if (cellPos.left < rightMostPos.left + rightMostWidth) {\n                        // Scroll it into view\n                        var currScroll = scroll.scrollLeft();\n                        scroll.scrollLeft(currScroll - (rightMostPos.left + rightMostWidth - cellPos.left));\n                    }\n                }\n                // If there are fixed columns to the right\n                if (_this.c.right > 0) {\n                    // Get the number of columns and the width of the cell as doing right side calc\n                    var numCols = _this.s.dt.columns().data().toArray().length;\n                    var cellWidth = $$1(cell.node()).outerWidth();\n                    // Get the leftmost right fixed column header and it's position\n                    var leftMost = $$1(_this.s.dt.column(numCols - _this.c.right).header());\n                    var leftMostPos = leftMost.offset();\n                    // If the current highlighted cell is right of the leftmost cell on the screen\n                    if (cellPos.left + cellWidth > leftMostPos.left) {\n                        // Scroll it into view\n                        var currScroll = scroll.scrollLeft();\n                        scroll.scrollLeft(currScroll - (leftMostPos.left - (cellPos.left + cellWidth)));\n                    }\n                }\n            });\n            // Whenever a draw occurs there is potential for the data to have changed and therefore also the column widths\n            // Therefore it is necessary to recalculate the values for the fixed columns\n            this.s.dt.on('draw.dt.dtfc', function () {\n                _this._addStyles();\n            });\n            this.s.dt.on('column-reorder.dt.dtfc', function () {\n                _this._addStyles();\n            });\n            this.s.dt.on('column-visibility.dt.dtfc', function (e, settings, column, state, recalc) {\n                if (recalc && !settings.bDestroying) {\n                    setTimeout(function () {\n                        _this._addStyles();\n                    }, 50);\n                }\n            });\n        };\n        FixedColumns.version = '4.3.0';\n        FixedColumns.classes = {\n            fixedLeft: 'dtfc-fixed-left',\n            fixedRight: 'dtfc-fixed-right',\n            leftBottomBlocker: 'dtfc-left-bottom-blocker',\n            leftTopBlocker: 'dtfc-left-top-blocker',\n            rightBottomBlocker: 'dtfc-right-bottom-blocker',\n            rightTopBlocker: 'dtfc-right-top-blocker',\n            tableFixedLeft: 'dtfc-has-left',\n            tableFixedRight: 'dtfc-has-right'\n        };\n        FixedColumns.defaults = {\n            i18n: {\n                button: 'FixedColumns'\n            },\n            left: 1,\n            right: 0\n        };\n        return FixedColumns;\n    }());\n\n    /*! FixedColumns 4.3.0\n     * © SpryMedia Ltd - datatables.net/license\n     */\n    setJQuery($);\n    $.fn.dataTable.FixedColumns = FixedColumns;\n    $.fn.DataTable.FixedColumns = FixedColumns;\n    var apiRegister = DataTable.Api.register;\n    apiRegister('fixedColumns()', function () {\n        return this;\n    });\n    apiRegister('fixedColumns().left()', function (newVal) {\n        var ctx = this.context[0];\n        if (newVal !== undefined) {\n            ctx._fixedColumns.left(newVal);\n            return this;\n        }\n        else {\n            return ctx._fixedColumns.left();\n        }\n    });\n    apiRegister('fixedColumns().right()', function (newVal) {\n        var ctx = this.context[0];\n        if (newVal !== undefined) {\n            ctx._fixedColumns.right(newVal);\n            return this;\n        }\n        else {\n            return ctx._fixedColumns.right();\n        }\n    });\n    DataTable.ext.buttons.fixedColumns = {\n        action: function (e, dt, node, config) {\n            if ($(node).attr('active')) {\n                $(node).removeAttr('active').removeClass('active');\n                dt.fixedColumns().left(0);\n                dt.fixedColumns().right(0);\n            }\n            else {\n                $(node).attr('active', 'true').addClass('active');\n                dt.fixedColumns().left(config.config.left);\n                dt.fixedColumns().right(config.config.right);\n            }\n        },\n        config: {\n            left: 1,\n            right: 0\n        },\n        init: function (dt, node, config) {\n            if (dt.settings()[0]._fixedColumns === undefined) {\n                _init(dt.settings(), config);\n            }\n            $(node).attr('active', 'true').addClass('active');\n            dt.button(node).text(config.text || dt.i18n('buttons.fixedColumns', dt.settings()[0]._fixedColumns.c.i18n.button));\n        },\n        text: null\n    };\n    function _init(settings, options) {\n        if (options === void 0) { options = null; }\n        var api = new DataTable.Api(settings);\n        var opts = options\n            ? options\n            : api.init().fixedColumns || DataTable.defaults.fixedColumns;\n        var fixedColumns = new FixedColumns(api, opts);\n        return fixedColumns;\n    }\n    // Attach a listener to the document which listens for DataTables initialisation\n    // events so we can automatically initialise\n    $(document).on('plugin-init.dt', function (e, settings) {\n        if (e.namespace !== 'dt') {\n            return;\n        }\n        if (settings.oInit.fixedColumns ||\n            DataTable.defaults.fixedColumns) {\n            if (!settings._fixedColumns) {\n                _init(settings, null);\n            }\n        }\n    });\n\n})();\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/js/fixedColumns.bootstrap.js",
    "content": "/*! Bootstrap integration for DataTables' FixedColumns\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-fixedcolumns'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedColumns ) {\n\t\t\t\trequire('datatables.net-fixedcolumns')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/js/fixedColumns.bootstrap4.js",
    "content": "/*! Bootstrap 4 integration for DataTables' FixedColumns\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-fixedcolumns'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedColumns ) {\n\t\t\t\trequire('datatables.net-fixedcolumns')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/js/fixedColumns.bootstrap5.js",
    "content": "/*! Bootstrap 5 integration for DataTables' FixedColumns\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-fixedcolumns'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedColumns ) {\n\t\t\t\trequire('datatables.net-fixedcolumns')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/js/fixedColumns.bulma.js",
    "content": "/*! Bulma integration for DataTables' FixedColumns\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-fixedcolumns'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedColumns ) {\n\t\t\t\trequire('datatables.net-fixedcolumns')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/js/fixedColumns.dataTables.js",
    "content": "/*! DataTables integration for DataTables' FixedColumns\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-fixedcolumns'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedColumns ) {\n\t\t\t\trequire('datatables.net-fixedcolumns')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/js/fixedColumns.foundation.js",
    "content": "/*! Foundation integration for DataTables' FixedColumns\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-fixedcolumns'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedColumns ) {\n\t\t\t\trequire('datatables.net-fixedcolumns')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/js/fixedColumns.jqueryui.js",
    "content": "/*! jquery ui integration for DataTables' FixedColumns\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-fixedcolumns'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedColumns ) {\n\t\t\t\trequire('datatables.net-fixedcolumns')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedColumns-4.3.0/js/fixedColumns.semanticui.js",
    "content": "/*! Semantic ui integration for DataTables' FixedColumns\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-fixedcolumns'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedColumns ) {\n\t\t\t\trequire('datatables.net-fixedcolumns')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/css/fixedHeader.bootstrap.css",
    "content": "table.dataTable.fixedHeader-floating,\ntable.dataTable.fixedHeader-locked {\n  background-color: white;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\ntable.dataTable.fixedHeader-locked {\n  position: absolute !important;\n}\n\n@media print {\n  table.fixedHeader-floating {\n    display: none;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/css/fixedHeader.bootstrap4.css",
    "content": "table.dataTable.fixedHeader-floating,\ntable.dataTable.fixedHeader-locked {\n  background-color: white;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\ntable.dataTable.fixedHeader-locked {\n  position: absolute !important;\n}\n\n@media print {\n  table.fixedHeader-floating {\n    display: none;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/css/fixedHeader.bootstrap5.css",
    "content": "table.dataTable.fixedHeader-floating,\ntable.dataTable.fixedHeader-locked {\n  background-color: white;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\ntable.dataTable.fixedHeader-locked {\n  position: absolute !important;\n}\n\n@media print {\n  table.fixedHeader-floating {\n    display: none;\n  }\n}\nhtml[data-bs-theme=dark] table.dataTable.fixedHeader-floating,\nhtml[data-bs-theme=dark] table.dataTable.fixedHeader-locked {\n  background-color: var(--bs-body-bg);\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/css/fixedHeader.bulma.css",
    "content": "table.dataTable.fixedHeader-floating,\ntable.dataTable.fixedHeader-locked {\n  background-color: white;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\ntable.dataTable.fixedHeader-locked {\n  position: absolute !important;\n}\n\n@media print {\n  table.fixedHeader-floating {\n    display: none;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/css/fixedHeader.dataTables.css",
    "content": "table.fixedHeader-floating {\n  background-color: white;\n}\n\ntable.fixedHeader-floating.no-footer {\n  border-bottom-width: 0;\n}\n\ntable.fixedHeader-locked {\n  position: absolute !important;\n  background-color: white;\n}\n\n@media print {\n  table.fixedHeader-floating {\n    display: none;\n  }\n}\nhtml.dark table.fixedHeader-floating {\n  background-color: var(--dt-html-background);\n}\nhtml.dark table.fixedHeader-locked {\n  background-color: var(--dt-html-background);\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/css/fixedHeader.foundation.css",
    "content": "table.dataTable.fixedHeader-floating,\ntable.dataTable.fixedHeader-locked {\n  background-color: white;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\ntable.dataTable.fixedHeader-locked {\n  position: absolute !important;\n}\n\n@media print {\n  table.fixedHeader-floating {\n    display: none;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/css/fixedHeader.jqueryui.css",
    "content": "table.fixedHeader-floating {\n  background-color: white;\n}\n\ntable.fixedHeader-locked {\n  position: absolute !important;\n  background-color: white;\n}\n\n@media print {\n  table.fixedHeader-floating {\n    display: none;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/css/fixedHeader.semanticui.css",
    "content": "table.fixedHeader-floating {\n  border-bottom-width: 0 !important;\n}\n\ntable.fixedHeader-locked {\n  position: absolute !important;\n}\n\n@media print {\n  table.fixedHeader-floating {\n    display: none;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/js/dataTables.fixedHeader.js",
    "content": "/*! FixedHeader 3.4.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     FixedHeader\n * @description Fix a table's header or footer, so it is always visible while\n *              scrolling\n * @version     3.4.0\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\nvar _instCounter = 0;\n\nvar FixedHeader = function (dt, config) {\n\t// Sanity check - you just know it will happen\n\tif (!(this instanceof FixedHeader)) {\n\t\tthrow \"FixedHeader must be initialised with the 'new' keyword.\";\n\t}\n\n\t// Allow a boolean true for defaults\n\tif (config === true) {\n\t\tconfig = {};\n\t}\n\n\tdt = new DataTable.Api(dt);\n\n\tthis.c = $.extend(true, {}, FixedHeader.defaults, config);\n\n\tthis.s = {\n\t\tdt: dt,\n\t\tposition: {\n\t\t\ttheadTop: 0,\n\t\t\ttbodyTop: 0,\n\t\t\ttfootTop: 0,\n\t\t\ttfootBottom: 0,\n\t\t\twidth: 0,\n\t\t\tleft: 0,\n\t\t\ttfootHeight: 0,\n\t\t\ttheadHeight: 0,\n\t\t\twindowHeight: $(window).height(),\n\t\t\tvisible: true\n\t\t},\n\t\theaderMode: null,\n\t\tfooterMode: null,\n\t\tautoWidth: dt.settings()[0].oFeatures.bAutoWidth,\n\t\tnamespace: '.dtfc' + _instCounter++,\n\t\tscrollLeft: {\n\t\t\theader: -1,\n\t\t\tfooter: -1\n\t\t},\n\t\tenable: true,\n\t\tautoDisable: false\n\t};\n\n\tthis.dom = {\n\t\tfloatingHeader: null,\n\t\tthead: $(dt.table().header()),\n\t\ttbody: $(dt.table().body()),\n\t\ttfoot: $(dt.table().footer()),\n\t\theader: {\n\t\t\thost: null,\n\t\t\tfloating: null,\n\t\t\tfloatingParent: $('<div class=\"dtfh-floatingparent\">'),\n\t\t\tplaceholder: null\n\t\t},\n\t\tfooter: {\n\t\t\thost: null,\n\t\t\tfloating: null,\n\t\t\tfloatingParent: $('<div class=\"dtfh-floatingparent\">'),\n\t\t\tplaceholder: null\n\t\t}\n\t};\n\n\tthis.dom.header.host = this.dom.thead.parent();\n\tthis.dom.footer.host = this.dom.tfoot.parent();\n\n\tvar dtSettings = dt.settings()[0];\n\tif (dtSettings._fixedHeader) {\n\t\tthrow 'FixedHeader already initialised on table ' + dtSettings.nTable.id;\n\t}\n\n\tdtSettings._fixedHeader = this;\n\n\tthis._constructor();\n};\n\n/*\n * Variable: FixedHeader\n * Purpose:  Prototype for FixedHeader\n * Scope:    global\n */\n$.extend(FixedHeader.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * API methods\n\t */\n\n\t/**\n\t * Kill off FH and any events\n\t */\n\tdestroy: function () {\n\t\tvar dom = this.dom;\n\n\t\tthis.s.dt.off('.dtfc');\n\t\t$(window).off(this.s.namespace);\n\n\t\t// Remove clones of FC blockers\n\t\tif (dom.header.rightBlocker) {\n\t\t\tdom.header.rightBlocker.remove();\n\t\t}\n\t\tif (dom.header.leftBlocker) {\n\t\t\tdom.header.leftBlocker.remove();\n\t\t}\n\t\tif (dom.footer.rightBlocker) {\n\t\t\tdom.footer.rightBlocker.remove();\n\t\t}\n\t\tif (dom.footer.leftBlocker) {\n\t\t\tdom.footer.leftBlocker.remove();\n\t\t}\n\n\t\tif (this.c.header) {\n\t\t\tthis._modeChange('in-place', 'header', true);\n\t\t}\n\n\t\tif (this.c.footer && dom.tfoot.length) {\n\t\t\tthis._modeChange('in-place', 'footer', true);\n\t\t}\n\t},\n\n\t/**\n\t * Enable / disable the fixed elements\n\t *\n\t * @param  {boolean} enable `true` to enable, `false` to disable\n\t */\n\tenable: function (enable, update, type) {\n\t\tthis.s.enable = enable;\n\n\t\tthis.s.enableType = type;\n\n\t\tif (update || update === undefined) {\n\t\t\tthis._positions();\n\t\t\tthis._scroll(true);\n\t\t}\n\t},\n\n\t/**\n\t * Get enabled status\n\t */\n\tenabled: function () {\n\t\treturn this.s.enable;\n\t},\n\n\t/**\n\t * Set header offset\n\t *\n\t * @param  {int} new value for headerOffset\n\t */\n\theaderOffset: function (offset) {\n\t\tif (offset !== undefined) {\n\t\t\tthis.c.headerOffset = offset;\n\t\t\tthis.update();\n\t\t}\n\n\t\treturn this.c.headerOffset;\n\t},\n\n\t/**\n\t * Set footer offset\n\t *\n\t * @param  {int} new value for footerOffset\n\t */\n\tfooterOffset: function (offset) {\n\t\tif (offset !== undefined) {\n\t\t\tthis.c.footerOffset = offset;\n\t\t\tthis.update();\n\t\t}\n\n\t\treturn this.c.footerOffset;\n\t},\n\n\t/**\n\t * Recalculate the position of the fixed elements and force them into place\n\t */\n\tupdate: function (force) {\n\t\tvar table = this.s.dt.table().node();\n\n\t\t// Update should only do something if enabled by the dev.\n\t\tif (!this.s.enable && !this.s.autoDisable) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ($(table).is(':visible')) {\n\t\t\tthis.s.autoDisable = false;\n\t\t\tthis.enable(true, false);\n\t\t}\n\t\telse {\n\t\t\tthis.s.autoDisable = true;\n\t\t\tthis.enable(false, false);\n\t\t}\n\n\t\t// Don't update if header is not in the document atm (due to\n\t\t// async events)\n\t\tif ($(table).children('thead').length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._positions();\n\t\tthis._scroll(force !== undefined ? force : true);\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * FixedHeader constructor - adding the required event listeners and\n\t * simple initialisation\n\t *\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\n\t\t$(window)\n\t\t\t.on('scroll' + this.s.namespace, function () {\n\t\t\t\tthat._scroll();\n\t\t\t})\n\t\t\t.on(\n\t\t\t\t'resize' + this.s.namespace,\n\t\t\t\tDataTable.util.throttle(function () {\n\t\t\t\t\tthat.s.position.windowHeight = $(window).height();\n\t\t\t\t\tthat.update();\n\t\t\t\t}, 50)\n\t\t\t);\n\n\t\tvar autoHeader = $('.fh-fixedHeader');\n\t\tif (!this.c.headerOffset && autoHeader.length) {\n\t\t\tthis.c.headerOffset = autoHeader.outerHeight();\n\t\t}\n\n\t\tvar autoFooter = $('.fh-fixedFooter');\n\t\tif (!this.c.footerOffset && autoFooter.length) {\n\t\t\tthis.c.footerOffset = autoFooter.outerHeight();\n\t\t}\n\n\t\tdt.on(\n\t\t\t'column-reorder.dt.dtfc column-visibility.dt.dtfc column-sizing.dt.dtfc responsive-display.dt.dtfc',\n\t\t\tfunction (e, ctx) {\n\t\t\t\tthat.update();\n\t\t\t}\n\t\t).on('draw.dt.dtfc', function (e, ctx) {\n\t\t\t// For updates from our own table, don't reclone, but for all others, do\n\t\t\tthat.update(ctx === dt.settings()[0] ? false : true);\n\t\t});\n\n\t\tdt.on('destroy.dtfc', function () {\n\t\t\tthat.destroy();\n\t\t});\n\n\t\tthis._positions();\n\t\tthis._scroll();\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Clone a fixed item to act as a place holder for the original element\n\t * which is moved into a clone of the table element, and moved around the\n\t * document to give the fixed effect.\n\t *\n\t * @param  {string}  item  'header' or 'footer'\n\t * @param  {boolean} force Force the clone to happen, or allow automatic\n\t *   decision (reuse existing if available)\n\t * @private\n\t */\n\t_clone: function (item, force) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar itemDom = this.dom[item];\n\t\tvar itemElement = item === 'header' ? this.dom.thead : this.dom.tfoot;\n\n\t\t// If footer and scrolling is enabled then we don't clone\n\t\t// Instead the table's height is decreased accordingly - see `_scroll()`\n\t\tif (item === 'footer' && this._scrollEnabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!force && itemDom.floating) {\n\t\t\t// existing floating element - reuse it\n\t\t\titemDom.floating.removeClass('fixedHeader-floating fixedHeader-locked');\n\t\t}\n\t\telse {\n\t\t\tif (itemDom.floating) {\n\t\t\t\tif (itemDom.placeholder !== null) {\n\t\t\t\t\titemDom.placeholder.remove();\n\t\t\t\t}\n\t\t\t\tthis._unsize(item);\n\t\t\t\titemDom.floating.children().detach();\n\t\t\t\titemDom.floating.remove();\n\t\t\t}\n\n\t\t\tvar tableNode = $(dt.table().node());\n\t\t\tvar scrollBody = $(tableNode.parent());\n\t\t\tvar scrollEnabled = this._scrollEnabled();\n\n\t\t\titemDom.floating = $(dt.table().node().cloneNode(false))\n\t\t\t\t.attr('aria-hidden', 'true')\n\t\t\t\t.css({\n\t\t\t\t\t'table-layout': 'fixed',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0\n\t\t\t\t})\n\t\t\t\t.removeAttr('id')\n\t\t\t\t.append(itemElement);\n\n\t\t\titemDom.floatingParent\n\t\t\t\t.css({\n\t\t\t\t\twidth: scrollBody.width(),\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\theight: 'fit-content',\n\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\tleft: scrollEnabled ? tableNode.offset().left + scrollBody.scrollLeft() : 0\n\t\t\t\t})\n\t\t\t\t.css(\n\t\t\t\t\titem === 'header'\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttop: this.c.headerOffset,\n\t\t\t\t\t\t\t\tbottom: ''\n\t\t\t\t\t\t  }\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\ttop: '',\n\t\t\t\t\t\t\t\tbottom: this.c.footerOffset\n\t\t\t\t\t\t  }\n\t\t\t\t)\n\t\t\t\t.addClass(item === 'footer' ? 'dtfh-floatingparentfoot' : 'dtfh-floatingparenthead')\n\t\t\t\t.append(itemDom.floating)\n\t\t\t\t.appendTo('body');\n\n\t\t\tthis._stickyPosition(itemDom.floating, '-');\n\n\t\t\tvar scrollLeftUpdate = function () {\n\t\t\t\tvar scrollLeft = scrollBody.scrollLeft();\n\t\t\t\tthat.s.scrollLeft = { footer: scrollLeft, header: scrollLeft };\n\t\t\t\titemDom.floatingParent.scrollLeft(that.s.scrollLeft.header);\n\t\t\t};\n\n\t\t\tscrollLeftUpdate();\n\t\t\tscrollBody.off('scroll.dtfh').on('scroll.dtfh', scrollLeftUpdate);\n\n\t\t\t// Insert a fake thead/tfoot into the DataTable to stop it jumping around\n\t\t\titemDom.placeholder = itemElement.clone(false);\n\t\t\titemDom.placeholder.find('*[id]').removeAttr('id');\n\n\t\t\titemDom.host.prepend(itemDom.placeholder);\n\n\t\t\t// Clone widths\n\t\t\tthis._matchWidths(itemDom.placeholder, itemDom.floating);\n\t\t}\n\t},\n\n\t/**\n\t * This method sets the sticky position of the header elements to match fixed columns\n\t * @param {JQuery<HTMLElement>} el\n\t * @param {string} sign\n\t */\n\t_stickyPosition: function (el, sign) {\n\t\tif (this._scrollEnabled()) {\n\t\t\tvar that = this;\n\t\t\tvar rtl = $(that.s.dt.table().node()).css('direction') === 'rtl';\n\n\t\t\tel.find('th').each(function () {\n\t\t\t\t// Find out if fixed header has previously set this column\n\t\t\t\tif ($(this).css('position') === 'sticky') {\n\t\t\t\t\tvar right = $(this).css('right');\n\t\t\t\t\tvar left = $(this).css('left');\n\t\t\t\t\tif (right !== 'auto' && !rtl) {\n\t\t\t\t\t\t// New position either adds or dismisses the barWidth\n\t\t\t\t\t\tvar potential =\n\t\t\t\t\t\t\t+right.replace(/px/g, '') +\n\t\t\t\t\t\t\t(sign === '-' ? -1 : 1) * that.s.dt.settings()[0].oBrowser.barWidth;\n\t\t\t\t\t\t$(this).css('right', potential > 0 ? potential : 0);\n\t\t\t\t\t}\n\t\t\t\t\telse if (left !== 'auto' && rtl) {\n\t\t\t\t\t\tvar potential =\n\t\t\t\t\t\t\t+left.replace(/px/g, '') +\n\t\t\t\t\t\t\t(sign === '-' ? -1 : 1) * that.s.dt.settings()[0].oBrowser.barWidth;\n\t\t\t\t\t\t$(this).css('left', potential > 0 ? potential : 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Copy widths from the cells in one element to another. This is required\n\t * for the footer as the footer in the main table takes its sizes from the\n\t * header columns. That isn't present in the footer so to have it still\n\t * align correctly, the sizes need to be copied over. It is also required\n\t * for the header when auto width is not enabled\n\t *\n\t * @param  {jQuery} from Copy widths from\n\t * @param  {jQuery} to   Copy widths to\n\t * @private\n\t */\n\t_matchWidths: function (from, to) {\n\t\tvar get = function (name) {\n\t\t\treturn $(name, from)\n\t\t\t\t.map(function () {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t$(this)\n\t\t\t\t\t\t\t.css('width')\n\t\t\t\t\t\t\t.replace(/[^\\d\\.]/g, '') * 1\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t\t.toArray();\n\t\t};\n\n\t\tvar set = function (name, toWidths) {\n\t\t\t$(name, to).each(function (i) {\n\t\t\t\t$(this).css({\n\t\t\t\t\twidth: toWidths[i],\n\t\t\t\t\tminWidth: toWidths[i]\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tvar thWidths = get('th');\n\t\tvar tdWidths = get('td');\n\n\t\tset('th', thWidths);\n\t\tset('td', tdWidths);\n\t},\n\n\t/**\n\t * Remove assigned widths from the cells in an element. This is required\n\t * when inserting the footer back into the main table so the size is defined\n\t * by the header columns and also when auto width is disabled in the\n\t * DataTable.\n\t *\n\t * @param  {string} item The `header` or `footer`\n\t * @private\n\t */\n\t_unsize: function (item) {\n\t\tvar el = this.dom[item].floating;\n\n\t\tif (el && (item === 'footer' || (item === 'header' && !this.s.autoWidth))) {\n\t\t\t$('th, td', el).css({\n\t\t\t\twidth: '',\n\t\t\t\tminWidth: ''\n\t\t\t});\n\t\t}\n\t\telse if (el && item === 'header') {\n\t\t\t$('th, td', el).css('min-width', '');\n\t\t}\n\t},\n\n\t/**\n\t * Reposition the floating elements to take account of horizontal page\n\t * scroll\n\t *\n\t * @param  {string} item       The `header` or `footer`\n\t * @param  {int}    scrollLeft Document scrollLeft\n\t * @private\n\t */\n\t_horizontal: function (item, scrollLeft) {\n\t\tvar itemDom = this.dom[item];\n\t\tvar position = this.s.position;\n\t\tvar lastScrollLeft = this.s.scrollLeft;\n\n\t\tif (itemDom.floating && lastScrollLeft[item] !== scrollLeft) {\n\t\t\t// If scrolling is enabled we need to match the floating header to the body\n\t\t\tif (this._scrollEnabled()) {\n\t\t\t\tvar newScrollLeft = $($(this.s.dt.table().node()).parent()).scrollLeft();\n\t\t\t\titemDom.floating.scrollLeft(newScrollLeft);\n\t\t\t\titemDom.floatingParent.scrollLeft(newScrollLeft);\n\t\t\t}\n\n\t\t\tlastScrollLeft[item] = scrollLeft;\n\t\t}\n\t},\n\n\t/**\n\t * Change from one display mode to another. Each fixed item can be in one\n\t * of:\n\t *\n\t * * `in-place` - In the main DataTable\n\t * * `in` - Floating over the DataTable\n\t * * `below` - (Header only) Fixed to the bottom of the table body\n\t * * `above` - (Footer only) Fixed to the top of the table body\n\t *\n\t * @param  {string}  mode        Mode that the item should be shown in\n\t * @param  {string}  item        'header' or 'footer'\n\t * @param  {boolean} forceChange Force a redraw of the mode, even if already\n\t *     in that mode.\n\t * @private\n\t */\n\t_modeChange: function (mode, item, forceChange) {\n\t\tvar dt = this.s.dt;\n\t\tvar itemDom = this.dom[item];\n\t\tvar position = this.s.position;\n\n\t\t// Just determine if scroll is enabled once\n\t\tvar scrollEnabled = this._scrollEnabled();\n\n\t\t// If footer and scrolling is enabled then we don't clone\n\t\t// Instead the table's height is decreased accordingly - see `_scroll()`\n\t\tif (item === 'footer' && scrollEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// It isn't trivial to add a !important css attribute...\n\t\tvar importantWidth = function (w) {\n\t\t\titemDom.floating.attr('style', function (i, s) {\n\t\t\t\treturn (s || '') + 'width: ' + w + 'px !important;';\n\t\t\t});\n\n\t\t\t// If not scrolling also have to update the floatingParent\n\t\t\tif (!scrollEnabled) {\n\t\t\t\titemDom.floatingParent.attr('style', function (i, s) {\n\t\t\t\t\treturn (s || '') + 'width: ' + w + 'px !important;';\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t// Record focus. Browser's will cause input elements to loose focus if\n\t\t// they are inserted else where in the doc\n\t\tvar tablePart = this.dom[item === 'footer' ? 'tfoot' : 'thead'];\n\t\tvar focus = $.contains(tablePart[0], document.activeElement)\n\t\t\t? document.activeElement\n\t\t\t: null;\n\t\tvar scrollBody = $($(this.s.dt.table().node()).parent());\n\n\t\tif (mode === 'in-place') {\n\t\t\t// Insert the header back into the table's real header\n\t\t\tif (itemDom.placeholder) {\n\t\t\t\titemDom.placeholder.remove();\n\t\t\t\titemDom.placeholder = null;\n\t\t\t}\n\n\t\t\tthis._unsize(item);\n\n\t\t\tif (item === 'header') {\n\t\t\t\titemDom.host.prepend(tablePart);\n\t\t\t}\n\t\t\telse {\n\t\t\t\titemDom.host.append(tablePart);\n\t\t\t}\n\n\t\t\tif (itemDom.floating) {\n\t\t\t\titemDom.floating.remove();\n\t\t\t\titemDom.floating = null;\n\t\t\t\tthis._stickyPosition(itemDom.host, '+');\n\t\t\t}\n\n\t\t\tif (itemDom.floatingParent) {\n\t\t\t\titemDom.floatingParent.remove();\n\t\t\t}\n\n\t\t\t$($(itemDom.host.parent()).parent()).scrollLeft(scrollBody.scrollLeft());\n\t\t}\n\t\telse if (mode === 'in') {\n\t\t\t// Remove the header from the read header and insert into a fixed\n\t\t\t// positioned floating table clone\n\t\t\tthis._clone(item, forceChange);\n\n\t\t\t// Get useful position values\n\t\t\tvar scrollOffset = scrollBody.offset();\n\t\t\tvar windowTop = $(document).scrollTop();\n\t\t\tvar windowHeight = $(window).height();\n\t\t\tvar windowBottom = windowTop + windowHeight;\n\t\t\tvar bodyTop = scrollEnabled ? scrollOffset.top : position.tbodyTop;\n\t\t\tvar bodyBottom = scrollEnabled\n\t\t\t\t? scrollOffset.top + scrollBody.outerHeight()\n\t\t\t\t: position.tfootTop;\n\n\t\t\t// Calculate the amount that the footer or header needs to be shuffled\n\t\t\tvar shuffle =\n\t\t\t\titem === 'footer'\n\t\t\t\t\t? // footer and top of body isn't on screen\n\t\t\t\t\t  bodyTop > windowBottom\n\t\t\t\t\t\t? // Yes - push the footer below\n\t\t\t\t\t\t  position.tfootHeight\n\t\t\t\t\t\t: // No - bottom set to the gap between the top of the body and the bottom of the window\n\t\t\t\t\t\t  bodyTop + position.tfootHeight - windowBottom\n\t\t\t\t\t: // Otherwise must be a header so get the difference from the bottom of the\n\t\t\t\t\t  //  desired floating header and the bottom of the table body\n\t\t\t\t\t  windowTop + this.c.headerOffset + position.theadHeight - bodyBottom;\n\n\t\t\t// Set the top or bottom based off of the offset and the shuffle value\n\t\t\tvar prop = item === 'header' ? 'top' : 'bottom';\n\t\t\tvar val = this.c[item + 'Offset'] - (shuffle > 0 ? shuffle : 0);\n\n\t\t\titemDom.floating.addClass('fixedHeader-floating');\n\t\t\titemDom.floatingParent\n\t\t\t\t.css(prop, val)\n\t\t\t\t.css({\n\t\t\t\t\tleft: position.left,\n\t\t\t\t\theight: item === 'header' ? position.theadHeight : position.tfootHeight,\n\t\t\t\t\t'z-index': 2\n\t\t\t\t})\n\t\t\t\t.append(itemDom.floating);\n\n\t\t\timportantWidth(position.width);\n\n\t\t\tif (item === 'footer') {\n\t\t\t\titemDom.floating.css('top', '');\n\t\t\t}\n\t\t}\n\t\telse if (mode === 'below') {\n\t\t\t// only used for the header\n\t\t\t// Fix the position of the floating header at base of the table body\n\t\t\tthis._clone(item, forceChange);\n\n\t\t\titemDom.floating.addClass('fixedHeader-locked');\n\t\t\titemDom.floatingParent.css({\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: position.tfootTop - position.theadHeight,\n\t\t\t\tleft: position.left + 'px'\n\t\t\t});\n\n\t\t\timportantWidth(position.width);\n\t\t}\n\t\telse if (mode === 'above') {\n\t\t\t// only used for the footer\n\t\t\t// Fix the position of the floating footer at top of the table body\n\t\t\tthis._clone(item, forceChange);\n\n\t\t\titemDom.floating.addClass('fixedHeader-locked');\n\t\t\titemDom.floatingParent.css({\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: position.tbodyTop,\n\t\t\t\tleft: position.left + 'px'\n\t\t\t});\n\n\t\t\timportantWidth(position.width);\n\t\t}\n\n\t\t// Restore focus if it was lost\n\t\tif (focus && focus !== document.activeElement) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tfocus.focus();\n\t\t\t}, 10);\n\t\t}\n\n\t\tthis.s.scrollLeft.header = -1;\n\t\tthis.s.scrollLeft.footer = -1;\n\t\tthis.s[item + 'Mode'] = mode;\n\t},\n\n\t/**\n\t * Cache the positional information that is required for the mode\n\t * calculations that FixedHeader performs.\n\t *\n\t * @private\n\t */\n\t_positions: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar table = dt.table();\n\t\tvar position = this.s.position;\n\t\tvar dom = this.dom;\n\t\tvar tableNode = $(table.node());\n\t\tvar scrollEnabled = this._scrollEnabled();\n\n\t\t// Need to use the header and footer that are in the main table,\n\t\t// regardless of if they are clones, since they hold the positions we\n\t\t// want to measure from\n\t\tvar thead = $(dt.table().header());\n\t\tvar tfoot = $(dt.table().footer());\n\t\tvar tbody = dom.tbody;\n\t\tvar scrollBody = tableNode.parent();\n\n\t\tposition.visible = tableNode.is(':visible');\n\t\tposition.width = tableNode.outerWidth();\n\t\tposition.left = tableNode.offset().left;\n\t\tposition.theadTop = thead.offset().top;\n\t\tposition.tbodyTop = scrollEnabled ? scrollBody.offset().top : tbody.offset().top;\n\t\tposition.tbodyHeight = scrollEnabled ? scrollBody.outerHeight() : tbody.outerHeight();\n\t\tposition.theadHeight = thead.outerHeight();\n\t\tposition.theadBottom = position.theadTop + position.theadHeight;\n\n\t\tif (tfoot.length) {\n\t\t\tposition.tfootTop = position.tbodyTop + position.tbodyHeight; //tfoot.offset().top;\n\t\t\tposition.tfootBottom = position.tfootTop + tfoot.outerHeight();\n\t\t\tposition.tfootHeight = tfoot.outerHeight();\n\t\t}\n\t\telse {\n\t\t\tposition.tfootTop = position.tbodyTop + tbody.outerHeight();\n\t\t\tposition.tfootBottom = position.tfootTop;\n\t\t\tposition.tfootHeight = position.tfootTop;\n\t\t}\n\t},\n\n\t/**\n\t * Mode calculation - determine what mode the fixed items should be placed\n\t * into.\n\t *\n\t * @param  {boolean} forceChange Force a redraw of the mode, even if already\n\t *     in that mode.\n\t * @private\n\t */\n\t_scroll: function (forceChange) {\n\t\tif (this.s.dt.settings()[0].bDestroying) {\n\t\t\treturn;\n\t\t}\n\n\t\t// ScrollBody details\n\t\tvar scrollEnabled = this._scrollEnabled();\n\t\tvar scrollBody = $(this.s.dt.table().node()).parent();\n\t\tvar scrollOffset = scrollBody.offset();\n\t\tvar scrollHeight = scrollBody.outerHeight();\n\n\t\t// Window details\n\t\tvar windowLeft = $(document).scrollLeft();\n\t\tvar windowTop = $(document).scrollTop();\n\t\tvar windowHeight = $(window).height();\n\t\tvar windowBottom = windowHeight + windowTop;\n\n\t\tvar position = this.s.position;\n\t\tvar headerMode, footerMode;\n\n\t\t// Body Details\n\t\tvar bodyTop = scrollEnabled ? scrollOffset.top : position.tbodyTop;\n\t\tvar bodyLeft = scrollEnabled ? scrollOffset.left : position.left;\n\t\tvar bodyBottom = scrollEnabled ? scrollOffset.top + scrollHeight : position.tfootTop;\n\t\tvar bodyWidth = scrollEnabled ? scrollBody.outerWidth() : position.tbodyWidth;\n\n\t\tvar windowBottom = windowTop + windowHeight;\n\n\t\tif (this.c.header) {\n\t\t\tif (!this.s.enable) {\n\t\t\t\theaderMode = 'in-place';\n\t\t\t}\n\t\t\t// The header is in it's normal place if the body top is lower than\n\t\t\t//  the scroll of the window plus the headerOffset and the height of the header\n\t\t\telse if (\n\t\t\t\t!position.visible ||\n\t\t\t\twindowTop + this.c.headerOffset + position.theadHeight <= bodyTop\n\t\t\t) {\n\t\t\t\theaderMode = 'in-place';\n\t\t\t}\n\t\t\t// The header should be floated if\n\t\t\telse if (\n\t\t\t\t// The scrolling plus the header offset plus the height of the header is lower than the top of the body\n\t\t\t\twindowTop + this.c.headerOffset + position.theadHeight > bodyTop &&\n\t\t\t\t// And the scrolling at the top plus the header offset is above the bottom of the body\n\t\t\t\twindowTop + this.c.headerOffset + position.theadHeight < bodyBottom\n\t\t\t) {\n\t\t\t\theaderMode = 'in';\n\t\t\t\tvar scrollBody = $($(this.s.dt.table().node()).parent());\n\n\t\t\t\t// Further to the above, If the scrolling plus the header offset plus the header height is lower\n\t\t\t\t// than the bottom of the table a shuffle is required so have to force the calculation\n\t\t\t\tif (\n\t\t\t\t\twindowTop + this.c.headerOffset + position.theadHeight > bodyBottom ||\n\t\t\t\t\tthis.dom.header.floatingParent === undefined\n\t\t\t\t) {\n\t\t\t\t\tforceChange = true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.dom.header.floatingParent\n\t\t\t\t\t\t.css({\n\t\t\t\t\t\t\ttop: this.c.headerOffset,\n\t\t\t\t\t\t\tposition: 'fixed'\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.append(this.dom.header.floating);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Anything else and the view is below the table\n\t\t\telse {\n\t\t\t\theaderMode = 'below';\n\t\t\t}\n\n\t\t\tif (forceChange || headerMode !== this.s.headerMode) {\n\t\t\t\tthis._modeChange(headerMode, 'header', forceChange);\n\t\t\t}\n\n\t\t\tthis._horizontal('header', windowLeft);\n\t\t}\n\n\t\tvar header = {\n\t\t\toffset: { top: 0, left: 0 },\n\t\t\theight: 0\n\t\t};\n\t\tvar footer = {\n\t\t\toffset: { top: 0, left: 0 },\n\t\t\theight: 0\n\t\t};\n\n\t\tif (this.c.footer && this.dom.tfoot.length) {\n\t\t\tif (!this.s.enable) {\n\t\t\t\tfooterMode = 'in-place';\n\t\t\t}\n\t\t\telse if (\n\t\t\t\t!position.visible ||\n\t\t\t\tposition.tfootBottom + this.c.footerOffset <= windowBottom\n\t\t\t) {\n\t\t\t\tfooterMode = 'in-place';\n\t\t\t}\n\t\t\telse if (\n\t\t\t\tbodyBottom + position.tfootHeight + this.c.footerOffset > windowBottom &&\n\t\t\t\tbodyTop + this.c.footerOffset < windowBottom\n\t\t\t) {\n\t\t\t\tfooterMode = 'in';\n\t\t\t\tforceChange = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfooterMode = 'above';\n\t\t\t}\n\n\t\t\tif (forceChange || footerMode !== this.s.footerMode) {\n\t\t\t\tthis._modeChange(footerMode, 'footer', forceChange);\n\t\t\t}\n\n\t\t\tthis._horizontal('footer', windowLeft);\n\n\t\t\tvar getOffsetHeight = function (el) {\n\t\t\t\treturn {\n\t\t\t\t\toffset: el.offset(),\n\t\t\t\t\theight: el.outerHeight()\n\t\t\t\t};\n\t\t\t};\n\n\t\t\theader = this.dom.header.floating\n\t\t\t\t? getOffsetHeight(this.dom.header.floating)\n\t\t\t\t: getOffsetHeight(this.dom.thead);\n\t\t\tfooter = this.dom.footer.floating\n\t\t\t\t? getOffsetHeight(this.dom.footer.floating)\n\t\t\t\t: getOffsetHeight(this.dom.tfoot);\n\n\t\t\t// If scrolling is enabled and the footer is off the screen\n\t\t\tif (scrollEnabled && footer.offset.top > windowTop) {\n\t\t\t\t// && footer.offset.top >= windowBottom) {\n\t\t\t\t// Calculate the gap between the top of the scrollBody and the top of the window\n\t\t\t\tvar overlap = windowTop - scrollOffset.top;\n\t\t\t\t// The new height is the bottom of the window\n\t\t\t\tvar newHeight =\n\t\t\t\t\twindowBottom +\n\t\t\t\t\t// If the gap between the top of the scrollbody and the window is more than\n\t\t\t\t\t//  the height of the header then the top of the table is still visible so add that gap\n\t\t\t\t\t// Doing this has effectively calculated the height from the top of the table to the bottom of the current page\n\t\t\t\t\t(overlap > -header.height ? overlap : 0) -\n\t\t\t\t\t// Take from that\n\t\t\t\t\t// The top of the header plus\n\t\t\t\t\t(header.offset.top +\n\t\t\t\t\t\t// The header height if the standard header is present\n\t\t\t\t\t\t(overlap < -header.height ? header.height : 0) +\n\t\t\t\t\t\t// And the height of the footer\n\t\t\t\t\t\tfooter.height);\n\n\t\t\t\t// Don't want a negative height\n\t\t\t\tif (newHeight < 0) {\n\t\t\t\t\tnewHeight = 0;\n\t\t\t\t}\n\n\t\t\t\t// At the end of the above calculation the space between the header (top of the page if floating)\n\t\t\t\t// and the point just above the footer should be the new value for the height of the table.\n\t\t\t\tscrollBody.outerHeight(newHeight);\n\n\t\t\t\t// Need some rounding here as sometimes very small decimal places are encountered\n\t\t\t\t// If the actual height is bigger or equal to the height we just applied then the footer is \"Floating\"\n\t\t\t\tif (Math.round(scrollBody.outerHeight()) >= Math.round(newHeight)) {\n\t\t\t\t\t$(this.dom.tfoot.parent()).addClass('fixedHeader-floating');\n\t\t\t\t}\n\t\t\t\t// Otherwise max-width has kicked in so it is not floating\n\t\t\t\telse {\n\t\t\t\t\t$(this.dom.tfoot.parent()).removeClass('fixedHeader-floating');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.dom.header.floating) {\n\t\t\tthis.dom.header.floatingParent.css('left', bodyLeft - windowLeft);\n\t\t}\n\t\tif (this.dom.footer.floating) {\n\t\t\tthis.dom.footer.floatingParent.css('left', bodyLeft - windowLeft);\n\t\t}\n\n\t\t// If fixed columns is being used on this table then the blockers need to be copied across\n\t\t// Cloning these is cleaner than creating as our own as it will keep consistency with fixedColumns automatically\n\t\t// ASSUMING that the class remains the same\n\t\tif (this.s.dt.settings()[0]._fixedColumns !== undefined) {\n\t\t\tvar adjustBlocker = function (side, end, el) {\n\t\t\t\tif (el === undefined) {\n\t\t\t\t\tvar blocker = $('div.dtfc-' + side + '-' + end + '-blocker');\n\n\t\t\t\t\tel = blocker.length === 0 ? null : blocker.clone().css('z-index', 1);\n\t\t\t\t}\n\n\t\t\t\tif (el !== null) {\n\t\t\t\t\tif (headerMode === 'in' || headerMode === 'below') {\n\t\t\t\t\t\tel.appendTo('body').css({\n\t\t\t\t\t\t\ttop: end === 'top' ? header.offset.top : footer.offset.top,\n\t\t\t\t\t\t\tleft: side === 'right' ? bodyLeft + bodyWidth - el.width() : bodyLeft\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tel.detach();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn el;\n\t\t\t};\n\n\t\t\t// Adjust all blockers\n\t\t\tthis.dom.header.rightBlocker = adjustBlocker(\n\t\t\t\t'right',\n\t\t\t\t'top',\n\t\t\t\tthis.dom.header.rightBlocker\n\t\t\t);\n\t\t\tthis.dom.header.leftBlocker = adjustBlocker('left', 'top', this.dom.header.leftBlocker);\n\t\t\tthis.dom.footer.rightBlocker = adjustBlocker(\n\t\t\t\t'right',\n\t\t\t\t'bottom',\n\t\t\t\tthis.dom.footer.rightBlocker\n\t\t\t);\n\t\t\tthis.dom.footer.leftBlocker = adjustBlocker(\n\t\t\t\t'left',\n\t\t\t\t'bottom',\n\t\t\t\tthis.dom.footer.leftBlocker\n\t\t\t);\n\t\t}\n\t},\n\n\t/**\n\t * Function to check if scrolling is enabled on the table or not\n\t * @returns Boolean value indicating if scrolling on the table is enabled or not\n\t */\n\t_scrollEnabled: function () {\n\t\tvar oScroll = this.s.dt.settings()[0].oScroll;\n\t\tif (oScroll.sY !== '' || oScroll.sX !== '') {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n});\n\n/**\n * Version\n * @type {String}\n * @static\n */\nFixedHeader.version = '3.4.0';\n\n/**\n * Defaults\n * @type {Object}\n * @static\n */\nFixedHeader.defaults = {\n\theader: true,\n\tfooter: false,\n\theaderOffset: 0,\n\tfooterOffset: 0\n};\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables interfaces\n */\n\n// Attach for constructor access\n$.fn.dataTable.FixedHeader = FixedHeader;\n$.fn.DataTable.FixedHeader = FixedHeader;\n\n// DataTables creation - check if the FixedHeader option has been defined on the\n// table and if so, initialise\n$(document).on('init.dt.dtfh', function (e, settings, json) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.fixedHeader;\n\tvar defaults = DataTable.defaults.fixedHeader;\n\n\tif ((init || defaults) && !settings._fixedHeader) {\n\t\tvar opts = $.extend({}, defaults, init);\n\n\t\tif (init !== false) {\n\t\t\tnew FixedHeader(settings, opts);\n\t\t}\n\t}\n});\n\n// DataTables API methods\nDataTable.Api.register('fixedHeader()', function () {});\n\nDataTable.Api.register('fixedHeader.adjust()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tvar fh = ctx._fixedHeader;\n\n\t\tif (fh) {\n\t\t\tfh.update();\n\t\t}\n\t});\n});\n\nDataTable.Api.register('fixedHeader.enable()', function (flag) {\n\treturn this.iterator('table', function (ctx) {\n\t\tvar fh = ctx._fixedHeader;\n\n\t\tflag = flag !== undefined ? flag : true;\n\t\tif (fh && flag !== fh.enabled()) {\n\t\t\tfh.enable(flag);\n\t\t}\n\t});\n});\n\nDataTable.Api.register('fixedHeader.enabled()', function () {\n\tif (this.context.length) {\n\t\tvar fh = this.context[0]._fixedHeader;\n\n\t\tif (fh) {\n\t\t\treturn fh.enabled();\n\t\t}\n\t}\n\n\treturn false;\n});\n\nDataTable.Api.register('fixedHeader.disable()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tvar fh = ctx._fixedHeader;\n\n\t\tif (fh && fh.enabled()) {\n\t\t\tfh.enable(false);\n\t\t}\n\t});\n});\n\n$.each(['header', 'footer'], function (i, el) {\n\tDataTable.Api.register('fixedHeader.' + el + 'Offset()', function (offset) {\n\t\tvar ctx = this.context;\n\n\t\tif (offset === undefined) {\n\t\t\treturn ctx.length && ctx[0]._fixedHeader\n\t\t\t\t? ctx[0]._fixedHeader[el + 'Offset']()\n\t\t\t\t: undefined;\n\t\t}\n\n\t\treturn this.iterator('table', function (ctx) {\n\t\t\tvar fh = ctx._fixedHeader;\n\n\t\t\tif (fh) {\n\t\t\t\tfh[el + 'Offset'](offset);\n\t\t\t}\n\t\t});\n\t});\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/js/fixedHeader.bootstrap.js",
    "content": "/*! Bootstrap 3 styling wrapper for FixedHeader\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-fixedheader'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedHeader ) {\n\t\t\t\trequire('datatables.net-fixedheader')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/js/fixedHeader.bootstrap4.js",
    "content": "/*! Bootstrap 4 styling wrapper for FixedHeader\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-fixedheader'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedHeader ) {\n\t\t\t\trequire('datatables.net-fixedheader')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/js/fixedHeader.bootstrap5.js",
    "content": "/*! Bootstrap 5 styling wrapper for FixedHeader\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-fixedheader'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedHeader ) {\n\t\t\t\trequire('datatables.net-fixedheader')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/js/fixedHeader.bulma.js",
    "content": "/*! Bulma styling wrapper for FixedHeader\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-fixedheader'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedHeader ) {\n\t\t\t\trequire('datatables.net-fixedheader')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/js/fixedHeader.dataTables.js",
    "content": "/*! DataTables styling wrapper for FixedHeader\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-fixedheader'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedHeader ) {\n\t\t\t\trequire('datatables.net-fixedheader')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/js/fixedHeader.foundation.js",
    "content": "/*! Foundation styling wrapper for FixedHeader\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-fixedheader'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedHeader ) {\n\t\t\t\trequire('datatables.net-fixedheader')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/js/fixedHeader.jqueryui.js",
    "content": "/*! jQuery UI styling wrapper for FixedHeader\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-fixedheader'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedHeader ) {\n\t\t\t\trequire('datatables.net-fixedheader')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/FixedHeader-3.4.0/js/fixedHeader.semanticui.js",
    "content": "/*! Semanic UI styling wrapper for FixedHeader\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-fixedheader'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.FixedHeader ) {\n\t\t\t\trequire('datatables.net-fixedheader')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/JSZip-3.10.1/jszip.js",
    "content": "/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.JSZip = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n\"use strict\";\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\n// private property\nvar _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n\n// public method for encoding\nexports.encode = function(input) {\n    var output = [];\n    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n    var i = 0, len = input.length, remainingBytes = len;\n\n    var isArray = utils.getTypeOf(input) !== \"string\";\n    while (i < input.length) {\n        remainingBytes = len - i;\n\n        if (!isArray) {\n            chr1 = input.charCodeAt(i++);\n            chr2 = i < len ? input.charCodeAt(i++) : 0;\n            chr3 = i < len ? input.charCodeAt(i++) : 0;\n        } else {\n            chr1 = input[i++];\n            chr2 = i < len ? input[i++] : 0;\n            chr3 = i < len ? input[i++] : 0;\n        }\n\n        enc1 = chr1 >> 2;\n        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n        enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64;\n        enc4 = remainingBytes > 2 ? (chr3 & 63) : 64;\n\n        output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));\n\n    }\n\n    return output.join(\"\");\n};\n\n// public method for decoding\nexports.decode = function(input) {\n    var chr1, chr2, chr3;\n    var enc1, enc2, enc3, enc4;\n    var i = 0, resultIndex = 0;\n\n    var dataUrlPrefix = \"data:\";\n\n    if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {\n        // This is a common error: people give a data url\n        // (data:image/png;base64,iVBOR...) with a {base64: true} and\n        // wonders why things don't work.\n        // We can detect that the string input looks like a data url but we\n        // *can't* be sure it is one: removing everything up to the comma would\n        // be too dangerous.\n        throw new Error(\"Invalid base64 input, it looks like a data url.\");\n    }\n\n    input = input.replace(/[^A-Za-z0-9+/=]/g, \"\");\n\n    var totalLength = input.length * 3 / 4;\n    if(input.charAt(input.length - 1) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if(input.charAt(input.length - 2) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if (totalLength % 1 !== 0) {\n        // totalLength is not an integer, the length does not match a valid\n        // base64 content. That can happen if:\n        // - the input is not a base64 content\n        // - the input is *almost* a base64 content, with a extra chars at the\n        //   beginning or at the end\n        // - the input uses a base64 variant (base64url for example)\n        throw new Error(\"Invalid base64 input, bad content length.\");\n    }\n    var output;\n    if (support.uint8array) {\n        output = new Uint8Array(totalLength|0);\n    } else {\n        output = new Array(totalLength|0);\n    }\n\n    while (i < input.length) {\n\n        enc1 = _keyStr.indexOf(input.charAt(i++));\n        enc2 = _keyStr.indexOf(input.charAt(i++));\n        enc3 = _keyStr.indexOf(input.charAt(i++));\n        enc4 = _keyStr.indexOf(input.charAt(i++));\n\n        chr1 = (enc1 << 2) | (enc2 >> 4);\n        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n        chr3 = ((enc3 & 3) << 6) | enc4;\n\n        output[resultIndex++] = chr1;\n\n        if (enc3 !== 64) {\n            output[resultIndex++] = chr2;\n        }\n        if (enc4 !== 64) {\n            output[resultIndex++] = chr3;\n        }\n\n    }\n\n    return output;\n};\n\n},{\"./support\":30,\"./utils\":32}],2:[function(require,module,exports){\n\"use strict\";\n\nvar external = require(\"./external\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar DataLengthProbe = require(\"./stream/DataLengthProbe\");\n\n/**\n * Represent a compressed object, with everything needed to decompress it.\n * @constructor\n * @param {number} compressedSize the size of the data compressed.\n * @param {number} uncompressedSize the size of the data after decompression.\n * @param {number} crc32 the crc32 of the decompressed file.\n * @param {object} compression the type of compression, see lib/compressions.js.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data.\n */\nfunction CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) {\n    this.compressedSize = compressedSize;\n    this.uncompressedSize = uncompressedSize;\n    this.crc32 = crc32;\n    this.compression = compression;\n    this.compressedContent = data;\n}\n\nCompressedObject.prototype = {\n    /**\n     * Create a worker to get the uncompressed content.\n     * @return {GenericWorker} the worker.\n     */\n    getContentWorker: function () {\n        var worker = new DataWorker(external.Promise.resolve(this.compressedContent))\n            .pipe(this.compression.uncompressWorker())\n            .pipe(new DataLengthProbe(\"data_length\"));\n\n        var that = this;\n        worker.on(\"end\", function () {\n            if (this.streamInfo[\"data_length\"] !== that.uncompressedSize) {\n                throw new Error(\"Bug : uncompressed data size mismatch\");\n            }\n        });\n        return worker;\n    },\n    /**\n     * Create a worker to get the compressed content.\n     * @return {GenericWorker} the worker.\n     */\n    getCompressedWorker: function () {\n        return new DataWorker(external.Promise.resolve(this.compressedContent))\n            .withStreamInfo(\"compressedSize\", this.compressedSize)\n            .withStreamInfo(\"uncompressedSize\", this.uncompressedSize)\n            .withStreamInfo(\"crc32\", this.crc32)\n            .withStreamInfo(\"compression\", this.compression)\n        ;\n    }\n};\n\n/**\n * Chain the given worker with other workers to compress the content with the\n * given compression.\n * @param {GenericWorker} uncompressedWorker the worker to pipe.\n * @param {Object} compression the compression object.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return {GenericWorker} the new worker compressing the content.\n */\nCompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) {\n    return uncompressedWorker\n        .pipe(new Crc32Probe())\n        .pipe(new DataLengthProbe(\"uncompressedSize\"))\n        .pipe(compression.compressWorker(compressionOptions))\n        .pipe(new DataLengthProbe(\"compressedSize\"))\n        .withStreamInfo(\"compression\", compression);\n};\n\nmodule.exports = CompressedObject;\n\n},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(require,module,exports){\n\"use strict\";\n\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nexports.STORE = {\n    magic: \"\\x00\\x00\",\n    compressWorker : function () {\n        return new GenericWorker(\"STORE compression\");\n    },\n    uncompressWorker : function () {\n        return new GenericWorker(\"STORE decompression\");\n    }\n};\nexports.DEFLATE = require(\"./flate\");\n\n},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"./utils\");\n\n/**\n * The following functions come from pako, from pako/lib/zlib/crc32.js\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n    var c, table = [];\n\n    for(var n =0; n < 256; n++){\n        c = n;\n        for(var k =0; k < 8; k++){\n            c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n        }\n        table[n] = c;\n    }\n\n    return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n    var t = crcTable, end = pos + len;\n\n    crc = crc ^ (-1);\n\n    for (var i = pos; i < end; i++ ) {\n        crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n    }\n\n    return (crc ^ (-1)); // >>> 0;\n}\n\n// That's all for the pako functions.\n\n/**\n * Compute the crc32 of a string.\n * This is almost the same as the function crc32, but for strings. Using the\n * same function for the two use cases leads to horrible performances.\n * @param {Number} crc the starting value of the crc.\n * @param {String} str the string to use.\n * @param {Number} len the length of the string.\n * @param {Number} pos the starting position for the crc32 computation.\n * @return {Number} the computed crc32.\n */\nfunction crc32str(crc, str, len, pos) {\n    var t = crcTable, end = pos + len;\n\n    crc = crc ^ (-1);\n\n    for (var i = pos; i < end; i++ ) {\n        crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF];\n    }\n\n    return (crc ^ (-1)); // >>> 0;\n}\n\nmodule.exports = function crc32wrapper(input, crc) {\n    if (typeof input === \"undefined\" || !input.length) {\n        return 0;\n    }\n\n    var isArray = utils.getTypeOf(input) !== \"string\";\n\n    if(isArray) {\n        return crc32(crc|0, input, input.length, 0);\n    } else {\n        return crc32str(crc|0, input, input.length, 0);\n    }\n};\n\n},{\"./utils\":32}],5:[function(require,module,exports){\n\"use strict\";\nexports.base64 = false;\nexports.binary = false;\nexports.dir = false;\nexports.createFolders = true;\nexports.date = null;\nexports.compression = null;\nexports.compressionOptions = null;\nexports.comment = null;\nexports.unixPermissions = null;\nexports.dosPermissions = null;\n\n},{}],6:[function(require,module,exports){\n\"use strict\";\n\n// load the global object first:\n// - it should be better integrated in the system (unhandledRejection in node)\n// - the environment may have a custom Promise implementation (see zone.js)\nvar ES6Promise = null;\nif (typeof Promise !== \"undefined\") {\n    ES6Promise = Promise;\n} else {\n    ES6Promise = require(\"lie\");\n}\n\n/**\n * Let the user use/change some implementations.\n */\nmodule.exports = {\n    Promise: ES6Promise\n};\n\n},{\"lie\":37}],7:[function(require,module,exports){\n\"use strict\";\nvar USE_TYPEDARRAY = (typeof Uint8Array !== \"undefined\") && (typeof Uint16Array !== \"undefined\") && (typeof Uint32Array !== \"undefined\");\n\nvar pako = require(\"pako\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nvar ARRAY_TYPE = USE_TYPEDARRAY ? \"uint8array\" : \"array\";\n\nexports.magic = \"\\x08\\x00\";\n\n/**\n * Create a worker that uses pako to inflate/deflate.\n * @constructor\n * @param {String} action the name of the pako function to call : either \"Deflate\" or \"Inflate\".\n * @param {Object} options the options to use when (de)compressing.\n */\nfunction FlateWorker(action, options) {\n    GenericWorker.call(this, \"FlateWorker/\" + action);\n\n    this._pako = null;\n    this._pakoAction = action;\n    this._pakoOptions = options;\n    // the `meta` object from the last chunk received\n    // this allow this worker to pass around metadata\n    this.meta = {};\n}\n\nutils.inherits(FlateWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nFlateWorker.prototype.processChunk = function (chunk) {\n    this.meta = chunk.meta;\n    if (this._pako === null) {\n        this._createPako();\n    }\n    this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);\n};\n\n/**\n * @see GenericWorker.flush\n */\nFlateWorker.prototype.flush = function () {\n    GenericWorker.prototype.flush.call(this);\n    if (this._pako === null) {\n        this._createPako();\n    }\n    this._pako.push([], true);\n};\n/**\n * @see GenericWorker.cleanUp\n */\nFlateWorker.prototype.cleanUp = function () {\n    GenericWorker.prototype.cleanUp.call(this);\n    this._pako = null;\n};\n\n/**\n * Create the _pako object.\n * TODO: lazy-loading this object isn't the best solution but it's the\n * quickest. The best solution is to lazy-load the worker list. See also the\n * issue #446.\n */\nFlateWorker.prototype._createPako = function () {\n    this._pako = new pako[this._pakoAction]({\n        raw: true,\n        level: this._pakoOptions.level || -1 // default compression\n    });\n    var self = this;\n    this._pako.onData = function(data) {\n        self.push({\n            data : data,\n            meta : self.meta\n        });\n    };\n};\n\nexports.compressWorker = function (compressionOptions) {\n    return new FlateWorker(\"Deflate\", compressionOptions);\n};\nexports.uncompressWorker = function () {\n    return new FlateWorker(\"Inflate\", {});\n};\n\n},{\"./stream/GenericWorker\":28,\"./utils\":32,\"pako\":38}],8:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\nvar utf8 = require(\"../utf8\");\nvar crc32 = require(\"../crc32\");\nvar signature = require(\"../signature\");\n\n/**\n * Transform an integer into a string in hexadecimal.\n * @private\n * @param {number} dec the number to convert.\n * @param {number} bytes the number of bytes to generate.\n * @returns {string} the result.\n */\nvar decToHex = function(dec, bytes) {\n    var hex = \"\", i;\n    for (i = 0; i < bytes; i++) {\n        hex += String.fromCharCode(dec & 0xff);\n        dec = dec >>> 8;\n    }\n    return hex;\n};\n\n/**\n * Generate the UNIX part of the external file attributes.\n * @param {Object} unixPermissions the unix permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :\n *\n * TTTTsstrwxrwxrwx0000000000ADVSHR\n * ^^^^____________________________ file type, see zipinfo.c (UNX_*)\n *     ^^^_________________________ setuid, setgid, sticky\n *        ^^^^^^^^^________________ permissions\n *                 ^^^^^^^^^^______ not used ?\n *                           ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only\n */\nvar generateUnixExternalFileAttr = function (unixPermissions, isDir) {\n\n    var result = unixPermissions;\n    if (!unixPermissions) {\n        // I can't use octal values in strict mode, hence the hexa.\n        //  040775 => 0x41fd\n        // 0100664 => 0x81b4\n        result = isDir ? 0x41fd : 0x81b4;\n    }\n    return (result & 0xFFFF) << 16;\n};\n\n/**\n * Generate the DOS part of the external file attributes.\n * @param {Object} dosPermissions the dos permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * Bit 0     Read-Only\n * Bit 1     Hidden\n * Bit 2     System\n * Bit 3     Volume Label\n * Bit 4     Directory\n * Bit 5     Archive\n */\nvar generateDosExternalFileAttr = function (dosPermissions) {\n    // the dir flag is already set for compatibility\n    return (dosPermissions || 0)  & 0x3F;\n};\n\n/**\n * Generate the various parts used in the construction of the final zip file.\n * @param {Object} streamInfo the hash with information about the compressed file.\n * @param {Boolean} streamedContent is the content streamed ?\n * @param {Boolean} streamingEnded is the stream finished ?\n * @param {number} offset the current offset from the start of the zip file.\n * @param {String} platform let's pretend we are this platform (change platform dependents fields)\n * @param {Function} encodeFileName the function to encode the file name / comment.\n * @return {Object} the zip parts.\n */\nvar generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) {\n    var file = streamInfo[\"file\"],\n        compression = streamInfo[\"compression\"],\n        useCustomEncoding = encodeFileName !== utf8.utf8encode,\n        encodedFileName = utils.transformTo(\"string\", encodeFileName(file.name)),\n        utfEncodedFileName = utils.transformTo(\"string\", utf8.utf8encode(file.name)),\n        comment = file.comment,\n        encodedComment = utils.transformTo(\"string\", encodeFileName(comment)),\n        utfEncodedComment = utils.transformTo(\"string\", utf8.utf8encode(comment)),\n        useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,\n        useUTF8ForComment = utfEncodedComment.length !== comment.length,\n        dosTime,\n        dosDate,\n        extraFields = \"\",\n        unicodePathExtraField = \"\",\n        unicodeCommentExtraField = \"\",\n        dir = file.dir,\n        date = file.date;\n\n\n    var dataInfo = {\n        crc32 : 0,\n        compressedSize : 0,\n        uncompressedSize : 0\n    };\n\n    // if the content is streamed, the sizes/crc32 are only available AFTER\n    // the end of the stream.\n    if (!streamedContent || streamingEnded) {\n        dataInfo.crc32 = streamInfo[\"crc32\"];\n        dataInfo.compressedSize = streamInfo[\"compressedSize\"];\n        dataInfo.uncompressedSize = streamInfo[\"uncompressedSize\"];\n    }\n\n    var bitflag = 0;\n    if (streamedContent) {\n        // Bit 3: the sizes/crc32 are set to zero in the local header.\n        // The correct values are put in the data descriptor immediately\n        // following the compressed data.\n        bitflag |= 0x0008;\n    }\n    if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) {\n        // Bit 11: Language encoding flag (EFS).\n        bitflag |= 0x0800;\n    }\n\n\n    var extFileAttr = 0;\n    var versionMadeBy = 0;\n    if (dir) {\n        // dos or unix, we set the dos dir flag\n        extFileAttr |= 0x00010;\n    }\n    if(platform === \"UNIX\") {\n        versionMadeBy = 0x031E; // UNIX, version 3.0\n        extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);\n    } else { // DOS or other, fallback to DOS\n        versionMadeBy = 0x0014; // DOS, version 2.0\n        extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);\n    }\n\n    // date\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html\n\n    dosTime = date.getUTCHours();\n    dosTime = dosTime << 6;\n    dosTime = dosTime | date.getUTCMinutes();\n    dosTime = dosTime << 5;\n    dosTime = dosTime | date.getUTCSeconds() / 2;\n\n    dosDate = date.getUTCFullYear() - 1980;\n    dosDate = dosDate << 4;\n    dosDate = dosDate | (date.getUTCMonth() + 1);\n    dosDate = dosDate << 5;\n    dosDate = dosDate | date.getUTCDate();\n\n    if (useUTF8ForFileName) {\n        // set the unicode path extra field. unzip needs at least one extra\n        // field to correctly handle unicode path, so using the path is as good\n        // as any other information. This could improve the situation with\n        // other archive managers too.\n        // This field is usually used without the utf8 flag, with a non\n        // unicode path in the header (winrar, winzip). This helps (a bit)\n        // with the messy Windows' default compressed folders feature but\n        // breaks on p7zip which doesn't seek the unicode path extra field.\n        // So for now, UTF-8 everywhere !\n        unicodePathExtraField =\n            // Version\n            decToHex(1, 1) +\n            // NameCRC32\n            decToHex(crc32(encodedFileName), 4) +\n            // UnicodeName\n            utfEncodedFileName;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x70\" +\n            // size\n            decToHex(unicodePathExtraField.length, 2) +\n            // content\n            unicodePathExtraField;\n    }\n\n    if(useUTF8ForComment) {\n\n        unicodeCommentExtraField =\n            // Version\n            decToHex(1, 1) +\n            // CommentCRC32\n            decToHex(crc32(encodedComment), 4) +\n            // UnicodeName\n            utfEncodedComment;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x63\" +\n            // size\n            decToHex(unicodeCommentExtraField.length, 2) +\n            // content\n            unicodeCommentExtraField;\n    }\n\n    var header = \"\";\n\n    // version needed to extract\n    header += \"\\x0A\\x00\";\n    // general purpose bit flag\n    header += decToHex(bitflag, 2);\n    // compression method\n    header += compression.magic;\n    // last mod file time\n    header += decToHex(dosTime, 2);\n    // last mod file date\n    header += decToHex(dosDate, 2);\n    // crc-32\n    header += decToHex(dataInfo.crc32, 4);\n    // compressed size\n    header += decToHex(dataInfo.compressedSize, 4);\n    // uncompressed size\n    header += decToHex(dataInfo.uncompressedSize, 4);\n    // file name length\n    header += decToHex(encodedFileName.length, 2);\n    // extra field length\n    header += decToHex(extraFields.length, 2);\n\n\n    var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;\n\n    var dirRecord = signature.CENTRAL_FILE_HEADER +\n        // version made by (00: DOS)\n        decToHex(versionMadeBy, 2) +\n        // file header (common to file and central directory)\n        header +\n        // file comment length\n        decToHex(encodedComment.length, 2) +\n        // disk number start\n        \"\\x00\\x00\" +\n        // internal file attributes TODO\n        \"\\x00\\x00\" +\n        // external file attributes\n        decToHex(extFileAttr, 4) +\n        // relative offset of local header\n        decToHex(offset, 4) +\n        // file name\n        encodedFileName +\n        // extra field\n        extraFields +\n        // file comment\n        encodedComment;\n\n    return {\n        fileRecord: fileRecord,\n        dirRecord: dirRecord\n    };\n};\n\n/**\n * Generate the EOCD record.\n * @param {Number} entriesCount the number of entries in the zip file.\n * @param {Number} centralDirLength the length (in bytes) of the central dir.\n * @param {Number} localDirLength the length (in bytes) of the local dir.\n * @param {String} comment the zip file comment as a binary string.\n * @param {Function} encodeFileName the function to encode the comment.\n * @return {String} the EOCD record.\n */\nvar generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) {\n    var dirEnd = \"\";\n    var encodedComment = utils.transformTo(\"string\", encodeFileName(comment));\n\n    // end of central dir signature\n    dirEnd = signature.CENTRAL_DIRECTORY_END +\n        // number of this disk\n        \"\\x00\\x00\" +\n        // number of the disk with the start of the central directory\n        \"\\x00\\x00\" +\n        // total number of entries in the central directory on this disk\n        decToHex(entriesCount, 2) +\n        // total number of entries in the central directory\n        decToHex(entriesCount, 2) +\n        // size of the central directory   4 bytes\n        decToHex(centralDirLength, 4) +\n        // offset of start of central directory with respect to the starting disk number\n        decToHex(localDirLength, 4) +\n        // .ZIP file comment length\n        decToHex(encodedComment.length, 2) +\n        // .ZIP file comment\n        encodedComment;\n\n    return dirEnd;\n};\n\n/**\n * Generate data descriptors for a file entry.\n * @param {Object} streamInfo the hash generated by a worker, containing information\n * on the file entry.\n * @return {String} the data descriptors.\n */\nvar generateDataDescriptors = function (streamInfo) {\n    var descriptor = \"\";\n    descriptor = signature.DATA_DESCRIPTOR +\n        // crc-32                          4 bytes\n        decToHex(streamInfo[\"crc32\"], 4) +\n        // compressed size                 4 bytes\n        decToHex(streamInfo[\"compressedSize\"], 4) +\n        // uncompressed size               4 bytes\n        decToHex(streamInfo[\"uncompressedSize\"], 4);\n\n    return descriptor;\n};\n\n\n/**\n * A worker to concatenate other workers to create a zip file.\n * @param {Boolean} streamFiles `true` to stream the content of the files,\n * `false` to accumulate it.\n * @param {String} comment the comment to use.\n * @param {String} platform the platform to use, \"UNIX\" or \"DOS\".\n * @param {Function} encodeFileName the function to encode file names and comments.\n */\nfunction ZipFileWorker(streamFiles, comment, platform, encodeFileName) {\n    GenericWorker.call(this, \"ZipFileWorker\");\n    // The number of bytes written so far. This doesn't count accumulated chunks.\n    this.bytesWritten = 0;\n    // The comment of the zip file\n    this.zipComment = comment;\n    // The platform \"generating\" the zip file.\n    this.zipPlatform = platform;\n    // the function to encode file names and comments.\n    this.encodeFileName = encodeFileName;\n    // Should we stream the content of the files ?\n    this.streamFiles = streamFiles;\n    // If `streamFiles` is false, we will need to accumulate the content of the\n    // files to calculate sizes / crc32 (and write them *before* the content).\n    // This boolean indicates if we are accumulating chunks (it will change a lot\n    // during the lifetime of this worker).\n    this.accumulate = false;\n    // The buffer receiving chunks when accumulating content.\n    this.contentBuffer = [];\n    // The list of generated directory records.\n    this.dirRecords = [];\n    // The offset (in bytes) from the beginning of the zip file for the current source.\n    this.currentSourceOffset = 0;\n    // The total number of entries in this zip file.\n    this.entriesCount = 0;\n    // the name of the file currently being added, null when handling the end of the zip file.\n    // Used for the emitted metadata.\n    this.currentFile = null;\n\n\n\n    this._sources = [];\n}\nutils.inherits(ZipFileWorker, GenericWorker);\n\n/**\n * @see GenericWorker.push\n */\nZipFileWorker.prototype.push = function (chunk) {\n\n    var currentFilePercent = chunk.meta.percent || 0;\n    var entriesCount = this.entriesCount;\n    var remainingFiles = this._sources.length;\n\n    if(this.accumulate) {\n        this.contentBuffer.push(chunk);\n    } else {\n        this.bytesWritten += chunk.data.length;\n\n        GenericWorker.prototype.push.call(this, {\n            data : chunk.data,\n            meta : {\n                currentFile : this.currentFile,\n                percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100\n            }\n        });\n    }\n};\n\n/**\n * The worker started a new source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the new source.\n */\nZipFileWorker.prototype.openedSource = function (streamInfo) {\n    this.currentSourceOffset = this.bytesWritten;\n    this.currentFile = streamInfo[\"file\"].name;\n\n    var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n\n    // don't stream folders (because they don't have any content)\n    if(streamedContent) {\n        var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n        this.push({\n            data : record.fileRecord,\n            meta : {percent:0}\n        });\n    } else {\n        // we need to wait for the whole file before pushing anything\n        this.accumulate = true;\n    }\n};\n\n/**\n * The worker finished a source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the finished source.\n */\nZipFileWorker.prototype.closedSource = function (streamInfo) {\n    this.accumulate = false;\n    var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n    var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n\n    this.dirRecords.push(record.dirRecord);\n    if(streamedContent) {\n        // after the streamed file, we put data descriptors\n        this.push({\n            data : generateDataDescriptors(streamInfo),\n            meta : {percent:100}\n        });\n    } else {\n        // the content wasn't streamed, we need to push everything now\n        // first the file record, then the content\n        this.push({\n            data : record.fileRecord,\n            meta : {percent:0}\n        });\n        while(this.contentBuffer.length) {\n            this.push(this.contentBuffer.shift());\n        }\n    }\n    this.currentFile = null;\n};\n\n/**\n * @see GenericWorker.flush\n */\nZipFileWorker.prototype.flush = function () {\n\n    var localDirLength = this.bytesWritten;\n    for(var i = 0; i < this.dirRecords.length; i++) {\n        this.push({\n            data : this.dirRecords[i],\n            meta : {percent:100}\n        });\n    }\n    var centralDirLength = this.bytesWritten - localDirLength;\n\n    var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName);\n\n    this.push({\n        data : dirEnd,\n        meta : {percent:100}\n    });\n};\n\n/**\n * Prepare the next source to be read.\n */\nZipFileWorker.prototype.prepareNextSource = function () {\n    this.previous = this._sources.shift();\n    this.openedSource(this.previous.streamInfo);\n    if (this.isPaused) {\n        this.previous.pause();\n    } else {\n        this.previous.resume();\n    }\n};\n\n/**\n * @see GenericWorker.registerPrevious\n */\nZipFileWorker.prototype.registerPrevious = function (previous) {\n    this._sources.push(previous);\n    var self = this;\n\n    previous.on(\"data\", function (chunk) {\n        self.processChunk(chunk);\n    });\n    previous.on(\"end\", function () {\n        self.closedSource(self.previous.streamInfo);\n        if(self._sources.length) {\n            self.prepareNextSource();\n        } else {\n            self.end();\n        }\n    });\n    previous.on(\"error\", function (e) {\n        self.error(e);\n    });\n    return this;\n};\n\n/**\n * @see GenericWorker.resume\n */\nZipFileWorker.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if (!this.previous && this._sources.length) {\n        this.prepareNextSource();\n        return true;\n    }\n    if (!this.previous && !this._sources.length && !this.generatedError) {\n        this.end();\n        return true;\n    }\n};\n\n/**\n * @see GenericWorker.error\n */\nZipFileWorker.prototype.error = function (e) {\n    var sources = this._sources;\n    if(!GenericWorker.prototype.error.call(this, e)) {\n        return false;\n    }\n    for(var i = 0; i < sources.length; i++) {\n        try {\n            sources[i].error(e);\n        } catch(e) {\n            // the `error` exploded, nothing to do\n        }\n    }\n    return true;\n};\n\n/**\n * @see GenericWorker.lock\n */\nZipFileWorker.prototype.lock = function () {\n    GenericWorker.prototype.lock.call(this);\n    var sources = this._sources;\n    for(var i = 0; i < sources.length; i++) {\n        sources[i].lock();\n    }\n};\n\nmodule.exports = ZipFileWorker;\n\n},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(require,module,exports){\n\"use strict\";\n\nvar compressions = require(\"../compressions\");\nvar ZipFileWorker = require(\"./ZipFileWorker\");\n\n/**\n * Find the compression to use.\n * @param {String} fileCompression the compression defined at the file level, if any.\n * @param {String} zipCompression the compression defined at the load() level.\n * @return {Object} the compression object to use.\n */\nvar getCompression = function (fileCompression, zipCompression) {\n\n    var compressionName = fileCompression || zipCompression;\n    var compression = compressions[compressionName];\n    if (!compression) {\n        throw new Error(compressionName + \" is not a valid compression method !\");\n    }\n    return compression;\n};\n\n/**\n * Create a worker to generate a zip file.\n * @param {JSZip} zip the JSZip instance at the right root level.\n * @param {Object} options to generate the zip file.\n * @param {String} comment the comment to use.\n */\nexports.generateWorker = function (zip, options, comment) {\n\n    var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName);\n    var entriesCount = 0;\n    try {\n\n        zip.forEach(function (relativePath, file) {\n            entriesCount++;\n            var compression = getCompression(file.options.compression, options.compression);\n            var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};\n            var dir = file.dir, date = file.date;\n\n            file._compressWorker(compression, compressionOptions)\n                .withStreamInfo(\"file\", {\n                    name : relativePath,\n                    dir : dir,\n                    date : date,\n                    comment : file.comment || \"\",\n                    unixPermissions : file.unixPermissions,\n                    dosPermissions : file.dosPermissions\n                })\n                .pipe(zipFileWorker);\n        });\n        zipFileWorker.entriesCount = entriesCount;\n    } catch (e) {\n        zipFileWorker.error(e);\n    }\n\n    return zipFileWorker;\n};\n\n},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(require,module,exports){\n\"use strict\";\n\n/**\n * Representation a of zip file in js\n * @constructor\n */\nfunction JSZip() {\n    // if this constructor is used without `new`, it adds `new` before itself:\n    if(!(this instanceof JSZip)) {\n        return new JSZip();\n    }\n\n    if(arguments.length) {\n        throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");\n    }\n\n    // object containing the files :\n    // {\n    //   \"folder/\" : {...},\n    //   \"folder/data.txt\" : {...}\n    // }\n    // NOTE: we use a null prototype because we do not\n    // want filenames like \"toString\" coming from a zip file\n    // to overwrite methods and attributes in a normal Object.\n    this.files = Object.create(null);\n\n    this.comment = null;\n\n    // Where we are in the hierarchy\n    this.root = \"\";\n    this.clone = function() {\n        var newObj = new JSZip();\n        for (var i in this) {\n            if (typeof this[i] !== \"function\") {\n                newObj[i] = this[i];\n            }\n        }\n        return newObj;\n    };\n}\nJSZip.prototype = require(\"./object\");\nJSZip.prototype.loadAsync = require(\"./load\");\nJSZip.support = require(\"./support\");\nJSZip.defaults = require(\"./defaults\");\n\n// TODO find a better way to handle this version,\n// a require('package.json').version doesn't work with webpack, see #327\nJSZip.version = \"3.10.1\";\n\nJSZip.loadAsync = function (content, options) {\n    return new JSZip().loadAsync(content, options);\n};\n\nJSZip.external = require(\"./external\");\nmodule.exports = JSZip;\n\n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(require,module,exports){\n\"use strict\";\nvar utils = require(\"./utils\");\nvar external = require(\"./external\");\nvar utf8 = require(\"./utf8\");\nvar ZipEntries = require(\"./zipEntries\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar nodejsUtils = require(\"./nodejsUtils\");\n\n/**\n * Check the CRC32 of an entry.\n * @param {ZipEntry} zipEntry the zip entry to check.\n * @return {Promise} the result.\n */\nfunction checkEntryCRC32(zipEntry) {\n    return new external.Promise(function (resolve, reject) {\n        var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());\n        worker.on(\"error\", function (e) {\n            reject(e);\n        })\n            .on(\"end\", function () {\n                if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {\n                    reject(new Error(\"Corrupted zip : CRC32 mismatch\"));\n                } else {\n                    resolve();\n                }\n            })\n            .resume();\n    });\n}\n\nmodule.exports = function (data, options) {\n    var zip = this;\n    options = utils.extend(options || {}, {\n        base64: false,\n        checkCRC32: false,\n        optimizedBinaryString: false,\n        createFolders: false,\n        decodeFileName: utf8.utf8decode\n    });\n\n    if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n        return external.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\"));\n    }\n\n    return utils.prepareContent(\"the loaded zip file\", data, true, options.optimizedBinaryString, options.base64)\n        .then(function (data) {\n            var zipEntries = new ZipEntries(options);\n            zipEntries.load(data);\n            return zipEntries;\n        }).then(function checkCRC32(zipEntries) {\n            var promises = [external.Promise.resolve(zipEntries)];\n            var files = zipEntries.files;\n            if (options.checkCRC32) {\n                for (var i = 0; i < files.length; i++) {\n                    promises.push(checkEntryCRC32(files[i]));\n                }\n            }\n            return external.Promise.all(promises);\n        }).then(function addFiles(results) {\n            var zipEntries = results.shift();\n            var files = zipEntries.files;\n            for (var i = 0; i < files.length; i++) {\n                var input = files[i];\n\n                var unsafeName = input.fileNameStr;\n                var safeName = utils.resolve(input.fileNameStr);\n\n                zip.file(safeName, input.decompressed, {\n                    binary: true,\n                    optimizedBinaryString: true,\n                    date: input.date,\n                    dir: input.dir,\n                    comment: input.fileCommentStr.length ? input.fileCommentStr : null,\n                    unixPermissions: input.unixPermissions,\n                    dosPermissions: input.dosPermissions,\n                    createFolders: options.createFolders\n                });\n                if (!input.dir) {\n                    zip.file(safeName).unsafeOriginalName = unsafeName;\n                }\n            }\n            if (zipEntries.zipComment.length) {\n                zip.comment = zipEntries.zipComment;\n            }\n\n            return zip;\n        });\n};\n\n},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\n\n/**\n * A worker that use a nodejs stream as source.\n * @constructor\n * @param {String} filename the name of the file entry for this stream.\n * @param {Readable} stream the nodejs stream.\n */\nfunction NodejsStreamInputAdapter(filename, stream) {\n    GenericWorker.call(this, \"Nodejs stream input adapter for \" + filename);\n    this._upstreamEnded = false;\n    this._bindStream(stream);\n}\n\nutils.inherits(NodejsStreamInputAdapter, GenericWorker);\n\n/**\n * Prepare the stream and bind the callbacks on it.\n * Do this ASAP on node 0.10 ! A lazy binding doesn't always work.\n * @param {Stream} stream the nodejs stream to use.\n */\nNodejsStreamInputAdapter.prototype._bindStream = function (stream) {\n    var self = this;\n    this._stream = stream;\n    stream.pause();\n    stream\n        .on(\"data\", function (chunk) {\n            self.push({\n                data: chunk,\n                meta : {\n                    percent : 0\n                }\n            });\n        })\n        .on(\"error\", function (e) {\n            if(self.isPaused) {\n                this.generatedError = e;\n            } else {\n                self.error(e);\n            }\n        })\n        .on(\"end\", function () {\n            if(self.isPaused) {\n                self._upstreamEnded = true;\n            } else {\n                self.end();\n            }\n        });\n};\nNodejsStreamInputAdapter.prototype.pause = function () {\n    if(!GenericWorker.prototype.pause.call(this)) {\n        return false;\n    }\n    this._stream.pause();\n    return true;\n};\nNodejsStreamInputAdapter.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if(this._upstreamEnded) {\n        this.end();\n    } else {\n        this._stream.resume();\n    }\n\n    return true;\n};\n\nmodule.exports = NodejsStreamInputAdapter;\n\n},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(require,module,exports){\n\"use strict\";\n\nvar Readable = require(\"readable-stream\").Readable;\n\nvar utils = require(\"../utils\");\nutils.inherits(NodejsStreamOutputAdapter, Readable);\n\n/**\n* A nodejs stream using a worker as source.\n* @see the SourceWrapper in http://nodejs.org/api/stream.html\n* @constructor\n* @param {StreamHelper} helper the helper wrapping the worker\n* @param {Object} options the nodejs stream options\n* @param {Function} updateCb the update callback.\n*/\nfunction NodejsStreamOutputAdapter(helper, options, updateCb) {\n    Readable.call(this, options);\n    this._helper = helper;\n\n    var self = this;\n    helper.on(\"data\", function (data, meta) {\n        if (!self.push(data)) {\n            self._helper.pause();\n        }\n        if(updateCb) {\n            updateCb(meta);\n        }\n    })\n        .on(\"error\", function(e) {\n            self.emit(\"error\", e);\n        })\n        .on(\"end\", function () {\n            self.push(null);\n        });\n}\n\n\nNodejsStreamOutputAdapter.prototype._read = function() {\n    this._helper.resume();\n};\n\nmodule.exports = NodejsStreamOutputAdapter;\n\n},{\"../utils\":32,\"readable-stream\":16}],14:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n    /**\n     * True if this is running in Nodejs, will be undefined in a browser.\n     * In a browser, browserify won't include this file and the whole module\n     * will be resolved an empty object.\n     */\n    isNode : typeof Buffer !== \"undefined\",\n    /**\n     * Create a new nodejs Buffer from an existing content.\n     * @param {Object} data the data to pass to the constructor.\n     * @param {String} encoding the encoding to use.\n     * @return {Buffer} a new Buffer.\n     */\n    newBufferFrom: function(data, encoding) {\n        if (Buffer.from && Buffer.from !== Uint8Array.from) {\n            return Buffer.from(data, encoding);\n        } else {\n            if (typeof data === \"number\") {\n                // Safeguard for old Node.js versions. On newer versions,\n                // Buffer.from(number) / Buffer(number, encoding) already throw.\n                throw new Error(\"The \\\"data\\\" argument must not be a number\");\n            }\n            return new Buffer(data, encoding);\n        }\n    },\n    /**\n     * Create a new nodejs Buffer with the specified size.\n     * @param {Integer} size the size of the buffer.\n     * @return {Buffer} a new Buffer.\n     */\n    allocBuffer: function (size) {\n        if (Buffer.alloc) {\n            return Buffer.alloc(size);\n        } else {\n            var buf = new Buffer(size);\n            buf.fill(0);\n            return buf;\n        }\n    },\n    /**\n     * Find out if an object is a Buffer.\n     * @param {Object} b the object to test.\n     * @return {Boolean} true if the object is a Buffer, false otherwise.\n     */\n    isBuffer : function(b){\n        return Buffer.isBuffer(b);\n    },\n\n    isStream : function (obj) {\n        return obj &&\n            typeof obj.on === \"function\" &&\n            typeof obj.pause === \"function\" &&\n            typeof obj.resume === \"function\";\n    }\n};\n\n},{}],15:[function(require,module,exports){\n\"use strict\";\nvar utf8 = require(\"./utf8\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar defaults = require(\"./defaults\");\nvar CompressedObject = require(\"./compressedObject\");\nvar ZipObject = require(\"./zipObject\");\nvar generate = require(\"./generate\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar NodejsStreamInputAdapter = require(\"./nodejs/NodejsStreamInputAdapter\");\n\n\n/**\n * Add a file in the current folder.\n * @private\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n * @param {Object} originalOptions the options of the file\n * @return {Object} the new file.\n */\nvar fileAdd = function(name, data, originalOptions) {\n    // be sure sub folders exist\n    var dataType = utils.getTypeOf(data),\n        parent;\n\n\n    /*\n     * Correct options.\n     */\n\n    var o = utils.extend(originalOptions || {}, defaults);\n    o.date = o.date || new Date();\n    if (o.compression !== null) {\n        o.compression = o.compression.toUpperCase();\n    }\n\n    if (typeof o.unixPermissions === \"string\") {\n        o.unixPermissions = parseInt(o.unixPermissions, 8);\n    }\n\n    // UNX_IFDIR  0040000 see zipinfo.c\n    if (o.unixPermissions && (o.unixPermissions & 0x4000)) {\n        o.dir = true;\n    }\n    // Bit 4    Directory\n    if (o.dosPermissions && (o.dosPermissions & 0x0010)) {\n        o.dir = true;\n    }\n\n    if (o.dir) {\n        name = forceTrailingSlash(name);\n    }\n    if (o.createFolders && (parent = parentFolder(name))) {\n        folderAdd.call(this, parent, true);\n    }\n\n    var isUnicodeString = dataType === \"string\" && o.binary === false && o.base64 === false;\n    if (!originalOptions || typeof originalOptions.binary === \"undefined\") {\n        o.binary = !isUnicodeString;\n    }\n\n\n    var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0;\n\n    if (isCompressedEmpty || o.dir || !data || data.length === 0) {\n        o.base64 = false;\n        o.binary = true;\n        data = \"\";\n        o.compression = \"STORE\";\n        dataType = \"string\";\n    }\n\n    /*\n     * Convert content to fit.\n     */\n\n    var zipObjectContent = null;\n    if (data instanceof CompressedObject || data instanceof GenericWorker) {\n        zipObjectContent = data;\n    } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n        zipObjectContent = new NodejsStreamInputAdapter(name, data);\n    } else {\n        zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64);\n    }\n\n    var object = new ZipObject(name, zipObjectContent, o);\n    this.files[name] = object;\n    /*\n    TODO: we can't throw an exception because we have async promises\n    (we can have a promise of a Date() for example) but returning a\n    promise is useless because file(name, data) returns the JSZip\n    object for chaining. Should we break that to allow the user\n    to catch the error ?\n\n    return external.Promise.resolve(zipObjectContent)\n    .then(function () {\n        return object;\n    });\n    */\n};\n\n/**\n * Find the parent folder of the path.\n * @private\n * @param {string} path the path to use\n * @return {string} the parent folder, or \"\"\n */\nvar parentFolder = function (path) {\n    if (path.slice(-1) === \"/\") {\n        path = path.substring(0, path.length - 1);\n    }\n    var lastSlash = path.lastIndexOf(\"/\");\n    return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\n};\n\n/**\n * Returns the path with a slash at the end.\n * @private\n * @param {String} path the path to check.\n * @return {String} the path with a trailing slash.\n */\nvar forceTrailingSlash = function(path) {\n    // Check the name ends with a /\n    if (path.slice(-1) !== \"/\") {\n        path += \"/\"; // IE doesn't like substr(-1)\n    }\n    return path;\n};\n\n/**\n * Add a (sub) folder in the current folder.\n * @private\n * @param {string} name the folder's name\n * @param {boolean=} [createFolders] If true, automatically create sub\n *  folders. Defaults to false.\n * @return {Object} the new folder.\n */\nvar folderAdd = function(name, createFolders) {\n    createFolders = (typeof createFolders !== \"undefined\") ? createFolders : defaults.createFolders;\n\n    name = forceTrailingSlash(name);\n\n    // Does this folder already exist?\n    if (!this.files[name]) {\n        fileAdd.call(this, name, null, {\n            dir: true,\n            createFolders: createFolders\n        });\n    }\n    return this.files[name];\n};\n\n/**\n* Cross-window, cross-Node-context regular expression detection\n* @param  {Object}  object Anything\n* @return {Boolean}        true if the object is a regular expression,\n* false otherwise\n*/\nfunction isRegExp(object) {\n    return Object.prototype.toString.call(object) === \"[object RegExp]\";\n}\n\n// return the actual prototype of JSZip\nvar out = {\n    /**\n     * @see loadAsync\n     */\n    load: function() {\n        throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n    },\n\n\n    /**\n     * Call a callback function for each entry at this folder level.\n     * @param {Function} cb the callback function:\n     * function (relativePath, file) {...}\n     * It takes 2 arguments : the relative path and the file.\n     */\n    forEach: function(cb) {\n        var filename, relativePath, file;\n        // ignore warning about unwanted properties because this.files is a null prototype object\n        /* eslint-disable-next-line guard-for-in */\n        for (filename in this.files) {\n            file = this.files[filename];\n            relativePath = filename.slice(this.root.length, filename.length);\n            if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root\n                cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn...\n            }\n        }\n    },\n\n    /**\n     * Filter nested files/folders with the specified function.\n     * @param {Function} search the predicate to use :\n     * function (relativePath, file) {...}\n     * It takes 2 arguments : the relative path and the file.\n     * @return {Array} An array of matching elements.\n     */\n    filter: function(search) {\n        var result = [];\n        this.forEach(function (relativePath, entry) {\n            if (search(relativePath, entry)) { // the file matches the function\n                result.push(entry);\n            }\n\n        });\n        return result;\n    },\n\n    /**\n     * Add a file to the zip file, or search a file.\n     * @param   {string|RegExp} name The name of the file to add (if data is defined),\n     * the name of the file to find (if no data) or a regex to match files.\n     * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded\n     * @param   {Object} o     File options\n     * @return  {JSZip|Object|Array} this JSZip object (when adding a file),\n     * a file (when searching by string) or an array of files (when searching by regex).\n     */\n    file: function(name, data, o) {\n        if (arguments.length === 1) {\n            if (isRegExp(name)) {\n                var regexp = name;\n                return this.filter(function(relativePath, file) {\n                    return !file.dir && regexp.test(relativePath);\n                });\n            }\n            else { // text\n                var obj = this.files[this.root + name];\n                if (obj && !obj.dir) {\n                    return obj;\n                } else {\n                    return null;\n                }\n            }\n        }\n        else { // more than one argument : we have data !\n            name = this.root + name;\n            fileAdd.call(this, name, data, o);\n        }\n        return this;\n    },\n\n    /**\n     * Add a directory to the zip file, or search.\n     * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n     * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.\n     */\n    folder: function(arg) {\n        if (!arg) {\n            return this;\n        }\n\n        if (isRegExp(arg)) {\n            return this.filter(function(relativePath, file) {\n                return file.dir && arg.test(relativePath);\n            });\n        }\n\n        // else, name is a new folder\n        var name = this.root + arg;\n        var newFolder = folderAdd.call(this, name);\n\n        // Allow chaining by returning a new object with this folder as the root\n        var ret = this.clone();\n        ret.root = newFolder.name;\n        return ret;\n    },\n\n    /**\n     * Delete a file, or a directory and all sub-files, from the zip\n     * @param {string} name the name of the file to delete\n     * @return {JSZip} this JSZip object\n     */\n    remove: function(name) {\n        name = this.root + name;\n        var file = this.files[name];\n        if (!file) {\n            // Look for any folders\n            if (name.slice(-1) !== \"/\") {\n                name += \"/\";\n            }\n            file = this.files[name];\n        }\n\n        if (file && !file.dir) {\n            // file\n            delete this.files[name];\n        } else {\n            // maybe a folder, delete recursively\n            var kids = this.filter(function(relativePath, file) {\n                return file.name.slice(0, name.length) === name;\n            });\n            for (var i = 0; i < kids.length; i++) {\n                delete this.files[kids[i].name];\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * @deprecated This method has been removed in JSZip 3.0, please check the upgrade guide.\n     */\n    generate: function() {\n        throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n    },\n\n    /**\n     * Generate the complete zip file as an internal stream.\n     * @param {Object} options the options to generate the zip file :\n     * - compression, \"STORE\" by default.\n     * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n     * @return {StreamHelper} the streamed zip file.\n     */\n    generateInternalStream: function(options) {\n        var worker, opts = {};\n        try {\n            opts = utils.extend(options || {}, {\n                streamFiles: false,\n                compression: \"STORE\",\n                compressionOptions : null,\n                type: \"\",\n                platform: \"DOS\",\n                comment: null,\n                mimeType: \"application/zip\",\n                encodeFileName: utf8.utf8encode\n            });\n\n            opts.type = opts.type.toLowerCase();\n            opts.compression = opts.compression.toUpperCase();\n\n            // \"binarystring\" is preferred but the internals use \"string\".\n            if(opts.type === \"binarystring\") {\n                opts.type = \"string\";\n            }\n\n            if (!opts.type) {\n                throw new Error(\"No output type specified.\");\n            }\n\n            utils.checkSupport(opts.type);\n\n            // accept nodejs `process.platform`\n            if(\n                opts.platform === \"darwin\" ||\n                opts.platform === \"freebsd\" ||\n                opts.platform === \"linux\" ||\n                opts.platform === \"sunos\"\n            ) {\n                opts.platform = \"UNIX\";\n            }\n            if (opts.platform === \"win32\") {\n                opts.platform = \"DOS\";\n            }\n\n            var comment = opts.comment || this.comment || \"\";\n            worker = generate.generateWorker(this, opts, comment);\n        } catch (e) {\n            worker = new GenericWorker(\"error\");\n            worker.error(e);\n        }\n        return new StreamHelper(worker, opts.type || \"string\", opts.mimeType);\n    },\n    /**\n     * Generate the complete zip file asynchronously.\n     * @see generateInternalStream\n     */\n    generateAsync: function(options, onUpdate) {\n        return this.generateInternalStream(options).accumulate(onUpdate);\n    },\n    /**\n     * Generate the complete zip file asynchronously.\n     * @see generateInternalStream\n     */\n    generateNodeStream: function(options, onUpdate) {\n        options = options || {};\n        if (!options.type) {\n            options.type = \"nodebuffer\";\n        }\n        return this.generateInternalStream(options).toNodejsStream(onUpdate);\n    }\n};\nmodule.exports = out;\n\n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(require,module,exports){\n\"use strict\";\n/*\n * This file is used by module bundlers (browserify/webpack/etc) when\n * including a stream implementation. We use \"readable-stream\" to get a\n * consistent behavior between nodejs versions but bundlers often have a shim\n * for \"stream\". Using this shim greatly improve the compatibility and greatly\n * reduce the final size of the bundle (only one stream implementation, not\n * two).\n */\nmodule.exports = require(\"stream\");\n\n},{\"stream\":undefined}],17:[function(require,module,exports){\n\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction ArrayReader(data) {\n    DataReader.call(this, data);\n    for(var i = 0; i < this.data.length; i++) {\n        data[i] = data[i] & 0xFF;\n    }\n}\nutils.inherits(ArrayReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nArrayReader.prototype.byteAt = function(i) {\n    return this.data[this.zero + i];\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nArrayReader.prototype.lastIndexOfSignature = function(sig) {\n    var sig0 = sig.charCodeAt(0),\n        sig1 = sig.charCodeAt(1),\n        sig2 = sig.charCodeAt(2),\n        sig3 = sig.charCodeAt(3);\n    for (var i = this.length - 4; i >= 0; --i) {\n        if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {\n            return i - this.zero;\n        }\n    }\n\n    return -1;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nArrayReader.prototype.readAndCheckSignature = function (sig) {\n    var sig0 = sig.charCodeAt(0),\n        sig1 = sig.charCodeAt(1),\n        sig2 = sig.charCodeAt(2),\n        sig3 = sig.charCodeAt(3),\n        data = this.readData(4);\n    return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3];\n};\n/**\n * @see DataReader.readData\n */\nArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        return [];\n    }\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = ArrayReader;\n\n},{\"../utils\":32,\"./DataReader\":18}],18:[function(require,module,exports){\n\"use strict\";\nvar utils = require(\"../utils\");\n\nfunction DataReader(data) {\n    this.data = data; // type : see implementation\n    this.length = data.length;\n    this.index = 0;\n    this.zero = 0;\n}\nDataReader.prototype = {\n    /**\n     * Check that the offset will not go too far.\n     * @param {string} offset the additional offset to check.\n     * @throws {Error} an Error if the offset is out of bounds.\n     */\n    checkOffset: function(offset) {\n        this.checkIndex(this.index + offset);\n    },\n    /**\n     * Check that the specified index will not be too far.\n     * @param {string} newIndex the index to check.\n     * @throws {Error} an Error if the index is out of bounds.\n     */\n    checkIndex: function(newIndex) {\n        if (this.length < this.zero + newIndex || newIndex < 0) {\n            throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + (newIndex) + \"). Corrupted zip ?\");\n        }\n    },\n    /**\n     * Change the index.\n     * @param {number} newIndex The new index.\n     * @throws {Error} if the new index is out of the data.\n     */\n    setIndex: function(newIndex) {\n        this.checkIndex(newIndex);\n        this.index = newIndex;\n    },\n    /**\n     * Skip the next n bytes.\n     * @param {number} n the number of bytes to skip.\n     * @throws {Error} if the new index is out of the data.\n     */\n    skip: function(n) {\n        this.setIndex(this.index + n);\n    },\n    /**\n     * Get the byte at the specified index.\n     * @param {number} i the index to use.\n     * @return {number} a byte.\n     */\n    byteAt: function() {\n        // see implementations\n    },\n    /**\n     * Get the next number with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {number} the corresponding number.\n     */\n    readInt: function(size) {\n        var result = 0,\n            i;\n        this.checkOffset(size);\n        for (i = this.index + size - 1; i >= this.index; i--) {\n            result = (result << 8) + this.byteAt(i);\n        }\n        this.index += size;\n        return result;\n    },\n    /**\n     * Get the next string with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {string} the corresponding string.\n     */\n    readString: function(size) {\n        return utils.transformTo(\"string\", this.readData(size));\n    },\n    /**\n     * Get raw data without conversion, <size> bytes.\n     * @param {number} size the number of bytes to read.\n     * @return {Object} the raw data, implementation specific.\n     */\n    readData: function() {\n        // see implementations\n    },\n    /**\n     * Find the last occurrence of a zip signature (4 bytes).\n     * @param {string} sig the signature to find.\n     * @return {number} the index of the last occurrence, -1 if not found.\n     */\n    lastIndexOfSignature: function() {\n        // see implementations\n    },\n    /**\n     * Read the signature (4 bytes) at the current position and compare it with sig.\n     * @param {string} sig the expected signature\n     * @return {boolean} true if the signature matches, false otherwise.\n     */\n    readAndCheckSignature: function() {\n        // see implementations\n    },\n    /**\n     * Get the next date.\n     * @return {Date} the date.\n     */\n    readDate: function() {\n        var dostime = this.readInt(4);\n        return new Date(Date.UTC(\n            ((dostime >> 25) & 0x7f) + 1980, // year\n            ((dostime >> 21) & 0x0f) - 1, // month\n            (dostime >> 16) & 0x1f, // day\n            (dostime >> 11) & 0x1f, // hour\n            (dostime >> 5) & 0x3f, // minute\n            (dostime & 0x1f) << 1)); // second\n    }\n};\nmodule.exports = DataReader;\n\n},{\"../utils\":32}],19:[function(require,module,exports){\n\"use strict\";\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction NodeBufferReader(data) {\n    Uint8ArrayReader.call(this, data);\n}\nutils.inherits(NodeBufferReader, Uint8ArrayReader);\n\n/**\n * @see DataReader.readData\n */\nNodeBufferReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = NodeBufferReader;\n\n},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(require,module,exports){\n\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction StringReader(data) {\n    DataReader.call(this, data);\n}\nutils.inherits(StringReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nStringReader.prototype.byteAt = function(i) {\n    return this.data.charCodeAt(this.zero + i);\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nStringReader.prototype.lastIndexOfSignature = function(sig) {\n    return this.data.lastIndexOf(sig) - this.zero;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nStringReader.prototype.readAndCheckSignature = function (sig) {\n    var data = this.readData(4);\n    return sig === data;\n};\n/**\n * @see DataReader.readData\n */\nStringReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    // this will work because the constructor applied the \"& 0xff\" mask.\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = StringReader;\n\n},{\"../utils\":32,\"./DataReader\":18}],21:[function(require,module,exports){\n\"use strict\";\nvar ArrayReader = require(\"./ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction Uint8ArrayReader(data) {\n    ArrayReader.call(this, data);\n}\nutils.inherits(Uint8ArrayReader, ArrayReader);\n/**\n * @see DataReader.readData\n */\nUint8ArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].\n        return new Uint8Array(0);\n    }\n    var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = Uint8ArrayReader;\n\n},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar support = require(\"../support\");\nvar ArrayReader = require(\"./ArrayReader\");\nvar StringReader = require(\"./StringReader\");\nvar NodeBufferReader = require(\"./NodeBufferReader\");\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\n\n/**\n * Create a reader adapted to the data.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read.\n * @return {DataReader} the data reader.\n */\nmodule.exports = function (data) {\n    var type = utils.getTypeOf(data);\n    utils.checkSupport(type);\n    if (type === \"string\" && !support.uint8array) {\n        return new StringReader(data);\n    }\n    if (type === \"nodebuffer\") {\n        return new NodeBufferReader(data);\n    }\n    if (support.uint8array) {\n        return new Uint8ArrayReader(utils.transformTo(\"uint8array\", data));\n    }\n    return new ArrayReader(utils.transformTo(\"array\", data));\n};\n\n},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(require,module,exports){\n\"use strict\";\nexports.LOCAL_FILE_HEADER = \"PK\\x03\\x04\";\nexports.CENTRAL_FILE_HEADER = \"PK\\x01\\x02\";\nexports.CENTRAL_DIRECTORY_END = \"PK\\x05\\x06\";\nexports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\\x06\\x07\";\nexports.ZIP64_CENTRAL_DIRECTORY_END = \"PK\\x06\\x06\";\nexports.DATA_DESCRIPTOR = \"PK\\x07\\x08\";\n\n},{}],24:[function(require,module,exports){\n\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which convert chunks to a specified type.\n * @constructor\n * @param {String} destType the destination type.\n */\nfunction ConvertWorker(destType) {\n    GenericWorker.call(this, \"ConvertWorker to \" + destType);\n    this.destType = destType;\n}\nutils.inherits(ConvertWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nConvertWorker.prototype.processChunk = function (chunk) {\n    this.push({\n        data : utils.transformTo(this.destType, chunk.data),\n        meta : chunk.meta\n    });\n};\nmodule.exports = ConvertWorker;\n\n},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(require,module,exports){\n\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar crc32 = require(\"../crc32\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which calculate the crc32 of the data flowing through.\n * @constructor\n */\nfunction Crc32Probe() {\n    GenericWorker.call(this, \"Crc32Probe\");\n    this.withStreamInfo(\"crc32\", 0);\n}\nutils.inherits(Crc32Probe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nCrc32Probe.prototype.processChunk = function (chunk) {\n    this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0);\n    this.push(chunk);\n};\nmodule.exports = Crc32Probe;\n\n},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n/**\n * A worker which calculate the total length of the data flowing through.\n * @constructor\n * @param {String} propName the name used to expose the length\n */\nfunction DataLengthProbe(propName) {\n    GenericWorker.call(this, \"DataLengthProbe for \" + propName);\n    this.propName = propName;\n    this.withStreamInfo(propName, 0);\n}\nutils.inherits(DataLengthProbe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nDataLengthProbe.prototype.processChunk = function (chunk) {\n    if(chunk) {\n        var length = this.streamInfo[this.propName] || 0;\n        this.streamInfo[this.propName] = length + chunk.data.length;\n    }\n    GenericWorker.prototype.processChunk.call(this, chunk);\n};\nmodule.exports = DataLengthProbe;\n\n\n},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n// the size of the generated chunks\n// TODO expose this as a public variable\nvar DEFAULT_BLOCK_SIZE = 16 * 1024;\n\n/**\n * A worker that reads a content and emits chunks.\n * @constructor\n * @param {Promise} dataP the promise of the data to split\n */\nfunction DataWorker(dataP) {\n    GenericWorker.call(this, \"DataWorker\");\n    var self = this;\n    this.dataIsReady = false;\n    this.index = 0;\n    this.max = 0;\n    this.data = null;\n    this.type = \"\";\n\n    this._tickScheduled = false;\n\n    dataP.then(function (data) {\n        self.dataIsReady = true;\n        self.data = data;\n        self.max = data && data.length || 0;\n        self.type = utils.getTypeOf(data);\n        if(!self.isPaused) {\n            self._tickAndRepeat();\n        }\n    }, function (e) {\n        self.error(e);\n    });\n}\n\nutils.inherits(DataWorker, GenericWorker);\n\n/**\n * @see GenericWorker.cleanUp\n */\nDataWorker.prototype.cleanUp = function () {\n    GenericWorker.prototype.cleanUp.call(this);\n    this.data = null;\n};\n\n/**\n * @see GenericWorker.resume\n */\nDataWorker.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if (!this._tickScheduled && this.dataIsReady) {\n        this._tickScheduled = true;\n        utils.delay(this._tickAndRepeat, [], this);\n    }\n    return true;\n};\n\n/**\n * Trigger a tick a schedule an other call to this function.\n */\nDataWorker.prototype._tickAndRepeat = function() {\n    this._tickScheduled = false;\n    if(this.isPaused || this.isFinished) {\n        return;\n    }\n    this._tick();\n    if(!this.isFinished) {\n        utils.delay(this._tickAndRepeat, [], this);\n        this._tickScheduled = true;\n    }\n};\n\n/**\n * Read and push a chunk.\n */\nDataWorker.prototype._tick = function() {\n\n    if(this.isPaused || this.isFinished) {\n        return false;\n    }\n\n    var size = DEFAULT_BLOCK_SIZE;\n    var data = null, nextIndex = Math.min(this.max, this.index + size);\n    if (this.index >= this.max) {\n        // EOF\n        return this.end();\n    } else {\n        switch(this.type) {\n        case \"string\":\n            data = this.data.substring(this.index, nextIndex);\n            break;\n        case \"uint8array\":\n            data = this.data.subarray(this.index, nextIndex);\n            break;\n        case \"array\":\n        case \"nodebuffer\":\n            data = this.data.slice(this.index, nextIndex);\n            break;\n        }\n        this.index = nextIndex;\n        return this.push({\n            data : data,\n            meta : {\n                percent : this.max ? this.index / this.max * 100 : 0\n            }\n        });\n    }\n};\n\nmodule.exports = DataWorker;\n\n},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(require,module,exports){\n\"use strict\";\n\n/**\n * A worker that does nothing but passing chunks to the next one. This is like\n * a nodejs stream but with some differences. On the good side :\n * - it works on IE 6-9 without any issue / polyfill\n * - it weights less than the full dependencies bundled with browserify\n * - it forwards errors (no need to declare an error handler EVERYWHERE)\n *\n * A chunk is an object with 2 attributes : `meta` and `data`. The former is an\n * object containing anything (`percent` for example), see each worker for more\n * details. The latter is the real data (String, Uint8Array, etc).\n *\n * @constructor\n * @param {String} name the name of the stream (mainly used for debugging purposes)\n */\nfunction GenericWorker(name) {\n    // the name of the worker\n    this.name = name || \"default\";\n    // an object containing metadata about the workers chain\n    this.streamInfo = {};\n    // an error which happened when the worker was paused\n    this.generatedError = null;\n    // an object containing metadata to be merged by this worker into the general metadata\n    this.extraStreamInfo = {};\n    // true if the stream is paused (and should not do anything), false otherwise\n    this.isPaused = true;\n    // true if the stream is finished (and should not do anything), false otherwise\n    this.isFinished = false;\n    // true if the stream is locked to prevent further structure updates (pipe), false otherwise\n    this.isLocked = false;\n    // the event listeners\n    this._listeners = {\n        \"data\":[],\n        \"end\":[],\n        \"error\":[]\n    };\n    // the previous worker, if any\n    this.previous = null;\n}\n\nGenericWorker.prototype = {\n    /**\n     * Push a chunk to the next workers.\n     * @param {Object} chunk the chunk to push\n     */\n    push : function (chunk) {\n        this.emit(\"data\", chunk);\n    },\n    /**\n     * End the stream.\n     * @return {Boolean} true if this call ended the worker, false otherwise.\n     */\n    end : function () {\n        if (this.isFinished) {\n            return false;\n        }\n\n        this.flush();\n        try {\n            this.emit(\"end\");\n            this.cleanUp();\n            this.isFinished = true;\n        } catch (e) {\n            this.emit(\"error\", e);\n        }\n        return true;\n    },\n    /**\n     * End the stream with an error.\n     * @param {Error} e the error which caused the premature end.\n     * @return {Boolean} true if this call ended the worker with an error, false otherwise.\n     */\n    error : function (e) {\n        if (this.isFinished) {\n            return false;\n        }\n\n        if(this.isPaused) {\n            this.generatedError = e;\n        } else {\n            this.isFinished = true;\n\n            this.emit(\"error\", e);\n\n            // in the workers chain exploded in the middle of the chain,\n            // the error event will go downward but we also need to notify\n            // workers upward that there has been an error.\n            if(this.previous) {\n                this.previous.error(e);\n            }\n\n            this.cleanUp();\n        }\n        return true;\n    },\n    /**\n     * Add a callback on an event.\n     * @param {String} name the name of the event (data, end, error)\n     * @param {Function} listener the function to call when the event is triggered\n     * @return {GenericWorker} the current object for chainability\n     */\n    on : function (name, listener) {\n        this._listeners[name].push(listener);\n        return this;\n    },\n    /**\n     * Clean any references when a worker is ending.\n     */\n    cleanUp : function () {\n        this.streamInfo = this.generatedError = this.extraStreamInfo = null;\n        this._listeners = [];\n    },\n    /**\n     * Trigger an event. This will call registered callback with the provided arg.\n     * @param {String} name the name of the event (data, end, error)\n     * @param {Object} arg the argument to call the callback with.\n     */\n    emit : function (name, arg) {\n        if (this._listeners[name]) {\n            for(var i = 0; i < this._listeners[name].length; i++) {\n                this._listeners[name][i].call(this, arg);\n            }\n        }\n    },\n    /**\n     * Chain a worker with an other.\n     * @param {Worker} next the worker receiving events from the current one.\n     * @return {worker} the next worker for chainability\n     */\n    pipe : function (next) {\n        return next.registerPrevious(this);\n    },\n    /**\n     * Same as `pipe` in the other direction.\n     * Using an API with `pipe(next)` is very easy.\n     * Implementing the API with the point of view of the next one registering\n     * a source is easier, see the ZipFileWorker.\n     * @param {Worker} previous the previous worker, sending events to this one\n     * @return {Worker} the current worker for chainability\n     */\n    registerPrevious : function (previous) {\n        if (this.isLocked) {\n            throw new Error(\"The stream '\" + this + \"' has already been used.\");\n        }\n\n        // sharing the streamInfo...\n        this.streamInfo = previous.streamInfo;\n        // ... and adding our own bits\n        this.mergeStreamInfo();\n        this.previous =  previous;\n        var self = this;\n        previous.on(\"data\", function (chunk) {\n            self.processChunk(chunk);\n        });\n        previous.on(\"end\", function () {\n            self.end();\n        });\n        previous.on(\"error\", function (e) {\n            self.error(e);\n        });\n        return this;\n    },\n    /**\n     * Pause the stream so it doesn't send events anymore.\n     * @return {Boolean} true if this call paused the worker, false otherwise.\n     */\n    pause : function () {\n        if(this.isPaused || this.isFinished) {\n            return false;\n        }\n        this.isPaused = true;\n\n        if(this.previous) {\n            this.previous.pause();\n        }\n        return true;\n    },\n    /**\n     * Resume a paused stream.\n     * @return {Boolean} true if this call resumed the worker, false otherwise.\n     */\n    resume : function () {\n        if(!this.isPaused || this.isFinished) {\n            return false;\n        }\n        this.isPaused = false;\n\n        // if true, the worker tried to resume but failed\n        var withError = false;\n        if(this.generatedError) {\n            this.error(this.generatedError);\n            withError = true;\n        }\n        if(this.previous) {\n            this.previous.resume();\n        }\n\n        return !withError;\n    },\n    /**\n     * Flush any remaining bytes as the stream is ending.\n     */\n    flush : function () {},\n    /**\n     * Process a chunk. This is usually the method overridden.\n     * @param {Object} chunk the chunk to process.\n     */\n    processChunk : function(chunk) {\n        this.push(chunk);\n    },\n    /**\n     * Add a key/value to be added in the workers chain streamInfo once activated.\n     * @param {String} key the key to use\n     * @param {Object} value the associated value\n     * @return {Worker} the current worker for chainability\n     */\n    withStreamInfo : function (key, value) {\n        this.extraStreamInfo[key] = value;\n        this.mergeStreamInfo();\n        return this;\n    },\n    /**\n     * Merge this worker's streamInfo into the chain's streamInfo.\n     */\n    mergeStreamInfo : function () {\n        for(var key in this.extraStreamInfo) {\n            if (!Object.prototype.hasOwnProperty.call(this.extraStreamInfo, key)) {\n                continue;\n            }\n            this.streamInfo[key] = this.extraStreamInfo[key];\n        }\n    },\n\n    /**\n     * Lock the stream to prevent further updates on the workers chain.\n     * After calling this method, all calls to pipe will fail.\n     */\n    lock: function () {\n        if (this.isLocked) {\n            throw new Error(\"The stream '\" + this + \"' has already been used.\");\n        }\n        this.isLocked = true;\n        if (this.previous) {\n            this.previous.lock();\n        }\n    },\n\n    /**\n     *\n     * Pretty print the workers chain.\n     */\n    toString : function () {\n        var me = \"Worker \" + this.name;\n        if (this.previous) {\n            return this.previous + \" -> \" + me;\n        } else {\n            return me;\n        }\n    }\n};\n\nmodule.exports = GenericWorker;\n\n},{}],29:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar ConvertWorker = require(\"./ConvertWorker\");\nvar GenericWorker = require(\"./GenericWorker\");\nvar base64 = require(\"../base64\");\nvar support = require(\"../support\");\nvar external = require(\"../external\");\n\nvar NodejsStreamOutputAdapter = null;\nif (support.nodestream) {\n    try {\n        NodejsStreamOutputAdapter = require(\"../nodejs/NodejsStreamOutputAdapter\");\n    } catch(e) {\n        // ignore\n    }\n}\n\n/**\n * Apply the final transformation of the data. If the user wants a Blob for\n * example, it's easier to work with an U8intArray and finally do the\n * ArrayBuffer/Blob conversion.\n * @param {String} type the name of the final type\n * @param {String|Uint8Array|Buffer} content the content to transform\n * @param {String} mimeType the mime type of the content, if applicable.\n * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format.\n */\nfunction transformZipOutput(type, content, mimeType) {\n    switch(type) {\n    case \"blob\" :\n        return utils.newBlob(utils.transformTo(\"arraybuffer\", content), mimeType);\n    case \"base64\" :\n        return base64.encode(content);\n    default :\n        return utils.transformTo(type, content);\n    }\n}\n\n/**\n * Concatenate an array of data of the given type.\n * @param {String} type the type of the data in the given array.\n * @param {Array} dataArray the array containing the data chunks to concatenate\n * @return {String|Uint8Array|Buffer} the concatenated data\n * @throws Error if the asked type is unsupported\n */\nfunction concat (type, dataArray) {\n    var i, index = 0, res = null, totalLength = 0;\n    for(i = 0; i < dataArray.length; i++) {\n        totalLength += dataArray[i].length;\n    }\n    switch(type) {\n    case \"string\":\n        return dataArray.join(\"\");\n    case \"array\":\n        return Array.prototype.concat.apply([], dataArray);\n    case \"uint8array\":\n        res = new Uint8Array(totalLength);\n        for(i = 0; i < dataArray.length; i++) {\n            res.set(dataArray[i], index);\n            index += dataArray[i].length;\n        }\n        return res;\n    case \"nodebuffer\":\n        return Buffer.concat(dataArray);\n    default:\n        throw new Error(\"concat : unsupported type '\"  + type + \"'\");\n    }\n}\n\n/**\n * Listen a StreamHelper, accumulate its content and concatenate it into a\n * complete block.\n * @param {StreamHelper} helper the helper to use.\n * @param {Function} updateCallback a callback called on each update. Called\n * with one arg :\n * - the metadata linked to the update received.\n * @return Promise the promise for the accumulation.\n */\nfunction accumulate(helper, updateCallback) {\n    return new external.Promise(function (resolve, reject){\n        var dataArray = [];\n        var chunkType = helper._internalType,\n            resultType = helper._outputType,\n            mimeType = helper._mimeType;\n        helper\n            .on(\"data\", function (data, meta) {\n                dataArray.push(data);\n                if(updateCallback) {\n                    updateCallback(meta);\n                }\n            })\n            .on(\"error\", function(err) {\n                dataArray = [];\n                reject(err);\n            })\n            .on(\"end\", function (){\n                try {\n                    var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);\n                    resolve(result);\n                } catch (e) {\n                    reject(e);\n                }\n                dataArray = [];\n            })\n            .resume();\n    });\n}\n\n/**\n * An helper to easily use workers outside of JSZip.\n * @constructor\n * @param {Worker} worker the worker to wrap\n * @param {String} outputType the type of data expected by the use\n * @param {String} mimeType the mime type of the content, if applicable.\n */\nfunction StreamHelper(worker, outputType, mimeType) {\n    var internalType = outputType;\n    switch(outputType) {\n    case \"blob\":\n    case \"arraybuffer\":\n        internalType = \"uint8array\";\n        break;\n    case \"base64\":\n        internalType = \"string\";\n        break;\n    }\n\n    try {\n        // the type used internally\n        this._internalType = internalType;\n        // the type used to output results\n        this._outputType = outputType;\n        // the mime type\n        this._mimeType = mimeType;\n        utils.checkSupport(internalType);\n        this._worker = worker.pipe(new ConvertWorker(internalType));\n        // the last workers can be rewired without issues but we need to\n        // prevent any updates on previous workers.\n        worker.lock();\n    } catch(e) {\n        this._worker = new GenericWorker(\"error\");\n        this._worker.error(e);\n    }\n}\n\nStreamHelper.prototype = {\n    /**\n     * Listen a StreamHelper, accumulate its content and concatenate it into a\n     * complete block.\n     * @param {Function} updateCb the update callback.\n     * @return Promise the promise for the accumulation.\n     */\n    accumulate : function (updateCb) {\n        return accumulate(this, updateCb);\n    },\n    /**\n     * Add a listener on an event triggered on a stream.\n     * @param {String} evt the name of the event\n     * @param {Function} fn the listener\n     * @return {StreamHelper} the current helper.\n     */\n    on : function (evt, fn) {\n        var self = this;\n\n        if(evt === \"data\") {\n            this._worker.on(evt, function (chunk) {\n                fn.call(self, chunk.data, chunk.meta);\n            });\n        } else {\n            this._worker.on(evt, function () {\n                utils.delay(fn, arguments, self);\n            });\n        }\n        return this;\n    },\n    /**\n     * Resume the flow of chunks.\n     * @return {StreamHelper} the current helper.\n     */\n    resume : function () {\n        utils.delay(this._worker.resume, [], this._worker);\n        return this;\n    },\n    /**\n     * Pause the flow of chunks.\n     * @return {StreamHelper} the current helper.\n     */\n    pause : function () {\n        this._worker.pause();\n        return this;\n    },\n    /**\n     * Return a nodejs stream for this helper.\n     * @param {Function} updateCb the update callback.\n     * @return {NodejsStreamOutputAdapter} the nodejs stream.\n     */\n    toNodejsStream : function (updateCb) {\n        utils.checkSupport(\"nodestream\");\n        if (this._outputType !== \"nodebuffer\") {\n            // an object stream containing blob/arraybuffer/uint8array/string\n            // is strange and I don't know if it would be useful.\n            // I you find this comment and have a good usecase, please open a\n            // bug report !\n            throw new Error(this._outputType + \" is not supported by this method\");\n        }\n\n        return new NodejsStreamOutputAdapter(this, {\n            objectMode : this._outputType !== \"nodebuffer\"\n        }, updateCb);\n    }\n};\n\n\nmodule.exports = StreamHelper;\n\n},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(require,module,exports){\n\"use strict\";\n\nexports.base64 = true;\nexports.array = true;\nexports.string = true;\nexports.arraybuffer = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\nexports.nodebuffer = typeof Buffer !== \"undefined\";\n// contains true if JSZip can read/generate Uint8Array, false otherwise.\nexports.uint8array = typeof Uint8Array !== \"undefined\";\n\nif (typeof ArrayBuffer === \"undefined\") {\n    exports.blob = false;\n}\nelse {\n    var buffer = new ArrayBuffer(0);\n    try {\n        exports.blob = new Blob([buffer], {\n            type: \"application/zip\"\n        }).size === 0;\n    }\n    catch (e) {\n        try {\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(buffer);\n            exports.blob = builder.getBlob(\"application/zip\").size === 0;\n        }\n        catch (e) {\n            exports.blob = false;\n        }\n    }\n}\n\ntry {\n    exports.nodestream = !!require(\"readable-stream\").Readable;\n} catch(e) {\n    exports.nodestream = false;\n}\n\n},{\"readable-stream\":16}],31:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * The following functions come from pako, from pako/lib/utils/strings\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new Array(256);\nfor (var i=0; i<256; i++) {\n    _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n}\n_utf8len[254]=_utf8len[254]=1; // Invalid sequence start\n\n// convert string to array (typed, when possible)\nvar string2buf = function (str) {\n    var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n    // count binary size\n    for (m_pos = 0; m_pos < str_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n    }\n\n    // allocate buffer\n    if (support.uint8array) {\n        buf = new Uint8Array(buf_len);\n    } else {\n        buf = new Array(buf_len);\n    }\n\n    // convert\n    for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        if (c < 0x80) {\n            /* one byte */\n            buf[i++] = c;\n        } else if (c < 0x800) {\n            /* two bytes */\n            buf[i++] = 0xC0 | (c >>> 6);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else if (c < 0x10000) {\n            /* three bytes */\n            buf[i++] = 0xE0 | (c >>> 12);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else {\n            /* four bytes */\n            buf[i++] = 0xf0 | (c >>> 18);\n            buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        }\n    }\n\n    return buf;\n};\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nvar utf8border = function(buf, max) {\n    var pos;\n\n    max = max || buf.length;\n    if (max > buf.length) { max = buf.length; }\n\n    // go back from last position, until start of sequence found\n    pos = max-1;\n    while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n    // Fuckup - very small and broken sequence,\n    // return max, because we should return something anyway.\n    if (pos < 0) { return max; }\n\n    // If we came to start of buffer - that means vuffer is too small,\n    // return max too.\n    if (pos === 0) { return max; }\n\n    return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n// convert array to string\nvar buf2string = function (buf) {\n    var i, out, c, c_len;\n    var len = buf.length;\n\n    // Reserve max possible length (2 words per char)\n    // NB: by unknown reasons, Array is significantly faster for\n    //     String.fromCharCode.apply than Uint16Array.\n    var utf16buf = new Array(len*2);\n\n    for (out=0, i=0; i<len;) {\n        c = buf[i++];\n        // quick process ascii\n        if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n        c_len = _utf8len[c];\n        // skip 5 & 6 byte codes\n        if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n        // apply mask on first byte\n        c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n        // join the rest\n        while (c_len > 1 && i < len) {\n            c = (c << 6) | (buf[i++] & 0x3f);\n            c_len--;\n        }\n\n        // terminated by end of string?\n        if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n        if (c < 0x10000) {\n            utf16buf[out++] = c;\n        } else {\n            c -= 0x10000;\n            utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n            utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n        }\n    }\n\n    // shrinkBuf(utf16buf, out)\n    if (utf16buf.length !== out) {\n        if(utf16buf.subarray) {\n            utf16buf = utf16buf.subarray(0, out);\n        } else {\n            utf16buf.length = out;\n        }\n    }\n\n    // return String.fromCharCode.apply(null, utf16buf);\n    return utils.applyFromCharCode(utf16buf);\n};\n\n\n// That's all for the pako functions.\n\n\n/**\n * Transform a javascript string into an array (typed if possible) of bytes,\n * UTF-8 encoded.\n * @param {String} str the string to encode\n * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.\n */\nexports.utf8encode = function utf8encode(str) {\n    if (support.nodebuffer) {\n        return nodejsUtils.newBufferFrom(str, \"utf-8\");\n    }\n\n    return string2buf(str);\n};\n\n\n/**\n * Transform a bytes array (or a representation) representing an UTF-8 encoded\n * string into a javascript string.\n * @param {Array|Uint8Array|Buffer} buf the data de decode\n * @return {String} the decoded string.\n */\nexports.utf8decode = function utf8decode(buf) {\n    if (support.nodebuffer) {\n        return utils.transformTo(\"nodebuffer\", buf).toString(\"utf-8\");\n    }\n\n    buf = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", buf);\n\n    return buf2string(buf);\n};\n\n/**\n * A worker to decode utf8 encoded binary chunks into string chunks.\n * @constructor\n */\nfunction Utf8DecodeWorker() {\n    GenericWorker.call(this, \"utf-8 decode\");\n    // the last bytes if a chunk didn't end with a complete codepoint.\n    this.leftOver = null;\n}\nutils.inherits(Utf8DecodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8DecodeWorker.prototype.processChunk = function (chunk) {\n\n    var data = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", chunk.data);\n\n    // 1st step, re-use what's left of the previous chunk\n    if (this.leftOver && this.leftOver.length) {\n        if(support.uint8array) {\n            var previousData = data;\n            data = new Uint8Array(previousData.length + this.leftOver.length);\n            data.set(this.leftOver, 0);\n            data.set(previousData, this.leftOver.length);\n        } else {\n            data = this.leftOver.concat(data);\n        }\n        this.leftOver = null;\n    }\n\n    var nextBoundary = utf8border(data);\n    var usableData = data;\n    if (nextBoundary !== data.length) {\n        if (support.uint8array) {\n            usableData = data.subarray(0, nextBoundary);\n            this.leftOver = data.subarray(nextBoundary, data.length);\n        } else {\n            usableData = data.slice(0, nextBoundary);\n            this.leftOver = data.slice(nextBoundary, data.length);\n        }\n    }\n\n    this.push({\n        data : exports.utf8decode(usableData),\n        meta : chunk.meta\n    });\n};\n\n/**\n * @see GenericWorker.flush\n */\nUtf8DecodeWorker.prototype.flush = function () {\n    if(this.leftOver && this.leftOver.length) {\n        this.push({\n            data : exports.utf8decode(this.leftOver),\n            meta : {}\n        });\n        this.leftOver = null;\n    }\n};\nexports.Utf8DecodeWorker = Utf8DecodeWorker;\n\n/**\n * A worker to endcode string chunks into utf8 encoded binary chunks.\n * @constructor\n */\nfunction Utf8EncodeWorker() {\n    GenericWorker.call(this, \"utf-8 encode\");\n}\nutils.inherits(Utf8EncodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8EncodeWorker.prototype.processChunk = function (chunk) {\n    this.push({\n        data : exports.utf8encode(chunk.data),\n        meta : chunk.meta\n    });\n};\nexports.Utf8EncodeWorker = Utf8EncodeWorker;\n\n},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(require,module,exports){\n\"use strict\";\n\nvar support = require(\"./support\");\nvar base64 = require(\"./base64\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar external = require(\"./external\");\nrequire(\"setimmediate\");\n\n\n/**\n * Convert a string that pass as a \"binary string\": it should represent a byte\n * array but may have > 255 char codes. Be sure to take only the first byte\n * and returns the byte array.\n * @param {String} str the string to transform.\n * @return {Array|Uint8Array} the string in a binary format.\n */\nfunction string2binary(str) {\n    var result = null;\n    if (support.uint8array) {\n        result = new Uint8Array(str.length);\n    } else {\n        result = new Array(str.length);\n    }\n    return stringToArrayLike(str, result);\n}\n\n/**\n * Create a new blob with the given content and the given type.\n * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use\n * an Uint8Array because the stock browser of android 4 won't accept it (it\n * will be silently converted to a string, \"[object Uint8Array]\").\n *\n * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:\n * when a large amount of Array is used to create the Blob, the amount of\n * memory consumed is nearly 100 times the original data amount.\n *\n * @param {String} type the mime type of the blob.\n * @return {Blob} the created blob.\n */\nexports.newBlob = function(part, type) {\n    exports.checkSupport(\"blob\");\n\n    try {\n        // Blob constructor\n        return new Blob([part], {\n            type: type\n        });\n    }\n    catch (e) {\n\n        try {\n            // deprecated, browser only, old way\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(part);\n            return builder.getBlob(type);\n        }\n        catch (e) {\n\n            // well, fuck ?!\n            throw new Error(\"Bug : can't construct the Blob.\");\n        }\n    }\n\n\n};\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\nfunction identity(input) {\n    return input;\n}\n\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\nfunction stringToArrayLike(str, array) {\n    for (var i = 0; i < str.length; ++i) {\n        array[i] = str.charCodeAt(i) & 0xFF;\n    }\n    return array;\n}\n\n/**\n * An helper for the function arrayLikeToString.\n * This contains static information and functions that\n * can be optimized by the browser JIT compiler.\n */\nvar arrayToStringHelper = {\n    /**\n     * Transform an array of int into a string, chunk by chunk.\n     * See the performances notes on arrayLikeToString.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @param {String} type the type of the array.\n     * @param {Integer} chunk the chunk size.\n     * @return {String} the resulting string.\n     * @throws Error if the chunk is too big for the stack.\n     */\n    stringifyByChunk: function(array, type, chunk) {\n        var result = [], k = 0, len = array.length;\n        // shortcut\n        if (len <= chunk) {\n            return String.fromCharCode.apply(null, array);\n        }\n        while (k < len) {\n            if (type === \"array\" || type === \"nodebuffer\") {\n                result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n            }\n            else {\n                result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n            }\n            k += chunk;\n        }\n        return result.join(\"\");\n    },\n    /**\n     * Call String.fromCharCode on every item in the array.\n     * This is the naive implementation, which generate A LOT of intermediate string.\n     * This should be used when everything else fail.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @return {String} the result.\n     */\n    stringifyByChar: function(array){\n        var resultStr = \"\";\n        for(var i = 0; i < array.length; i++) {\n            resultStr += String.fromCharCode(array[i]);\n        }\n        return resultStr;\n    },\n    applyCanBeUsed : {\n        /**\n         * true if the browser accepts to use String.fromCharCode on Uint8Array\n         */\n        uint8array : (function () {\n            try {\n                return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })(),\n        /**\n         * true if the browser accepts to use String.fromCharCode on nodejs Buffer.\n         */\n        nodebuffer : (function () {\n            try {\n                return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })()\n    }\n};\n\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction arrayLikeToString(array) {\n    // Performances notes :\n    // --------------------\n    // String.fromCharCode.apply(null, array) is the fastest, see\n    // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n    // but the stack is limited (and we can get huge arrays !).\n    //\n    // result += String.fromCharCode(array[i]); generate too many strings !\n    //\n    // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n    // TODO : we now have workers that split the work. Do we still need that ?\n    var chunk = 65536,\n        type = exports.getTypeOf(array),\n        canUseApply = true;\n    if (type === \"uint8array\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;\n    } else if (type === \"nodebuffer\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;\n    }\n\n    if (canUseApply) {\n        while (chunk > 1) {\n            try {\n                return arrayToStringHelper.stringifyByChunk(array, type, chunk);\n            } catch (e) {\n                chunk = Math.floor(chunk / 2);\n            }\n        }\n    }\n\n    // no apply or chunk error : slow and painful algorithm\n    // default browser on android 4.*\n    return arrayToStringHelper.stringifyByChar(array);\n}\n\nexports.applyFromCharCode = arrayLikeToString;\n\n\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n    for (var i = 0; i < arrayFrom.length; i++) {\n        arrayTo[i] = arrayFrom[i];\n    }\n    return arrayTo;\n}\n\n// a matrix containing functions to transform everything into everything.\nvar transform = {};\n\n// string to ?\ntransform[\"string\"] = {\n    \"string\": identity,\n    \"array\": function(input) {\n        return stringToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"string\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return stringToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": function(input) {\n        return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length));\n    }\n};\n\n// array to ?\ntransform[\"array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": identity,\n    \"arraybuffer\": function(input) {\n        return (new Uint8Array(input)).buffer;\n    },\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// arraybuffer to ?\ntransform[\"arraybuffer\"] = {\n    \"string\": function(input) {\n        return arrayLikeToString(new Uint8Array(input));\n    },\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n    },\n    \"arraybuffer\": identity,\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(new Uint8Array(input));\n    }\n};\n\n// uint8array to ?\ntransform[\"uint8array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return input.buffer;\n    },\n    \"uint8array\": identity,\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// nodebuffer to ?\ntransform[\"nodebuffer\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": identity\n};\n\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\nexports.transformTo = function(outputType, input) {\n    if (!input) {\n        // undefined, null, etc\n        // an empty string won't harm.\n        input = \"\";\n    }\n    if (!outputType) {\n        return input;\n    }\n    exports.checkSupport(outputType);\n    var inputType = exports.getTypeOf(input);\n    var result = transform[inputType][outputType](input);\n    return result;\n};\n\n/**\n * Resolve all relative path components, \".\" and \"..\", in a path. If these relative components\n * traverse above the root then the resulting path will only contain the final path component.\n *\n * All empty components, e.g. \"//\", are removed.\n * @param {string} path A path with / or \\ separators\n * @returns {string} The path with all relative path components resolved.\n */\nexports.resolve = function(path) {\n    var parts = path.split(\"/\");\n    var result = [];\n    for (var index = 0; index < parts.length; index++) {\n        var part = parts[index];\n        // Allow the first and last component to be empty for trailing slashes.\n        if (part === \".\" || (part === \"\" && index !== 0 && index !== parts.length - 1)) {\n            continue;\n        } else if (part === \"..\") {\n            result.pop();\n        } else {\n            result.push(part);\n        }\n    }\n    return result.join(\"/\");\n};\n\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\nexports.getTypeOf = function(input) {\n    if (typeof input === \"string\") {\n        return \"string\";\n    }\n    if (Object.prototype.toString.call(input) === \"[object Array]\") {\n        return \"array\";\n    }\n    if (support.nodebuffer && nodejsUtils.isBuffer(input)) {\n        return \"nodebuffer\";\n    }\n    if (support.uint8array && input instanceof Uint8Array) {\n        return \"uint8array\";\n    }\n    if (support.arraybuffer && input instanceof ArrayBuffer) {\n        return \"arraybuffer\";\n    }\n};\n\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\nexports.checkSupport = function(type) {\n    var supported = support[type.toLowerCase()];\n    if (!supported) {\n        throw new Error(type + \" is not supported by this platform\");\n    }\n};\n\nexports.MAX_VALUE_16BITS = 65535;\nexports.MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\nexports.pretty = function(str) {\n    var res = \"\",\n        code, i;\n    for (i = 0; i < (str || \"\").length; i++) {\n        code = str.charCodeAt(i);\n        res += \"\\\\x\" + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n    }\n    return res;\n};\n\n/**\n * Defer the call of a function.\n * @param {Function} callback the function to call asynchronously.\n * @param {Array} args the arguments to give to the callback.\n */\nexports.delay = function(callback, args, self) {\n    setImmediate(function () {\n        callback.apply(self || null, args || []);\n    });\n};\n\n/**\n * Extends a prototype with an other, without calling a constructor with\n * side effects. Inspired by nodejs' `utils.inherits`\n * @param {Function} ctor the constructor to augment\n * @param {Function} superCtor the parent constructor to use\n */\nexports.inherits = function (ctor, superCtor) {\n    var Obj = function() {};\n    Obj.prototype = superCtor.prototype;\n    ctor.prototype = new Obj();\n};\n\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\nexports.extend = function() {\n    var result = {}, i, attr;\n    for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n        for (attr in arguments[i]) {\n            if (Object.prototype.hasOwnProperty.call(arguments[i], attr) && typeof result[attr] === \"undefined\") {\n                result[attr] = arguments[i][attr];\n            }\n        }\n    }\n    return result;\n};\n\n/**\n * Transform arbitrary content into a Promise.\n * @param {String} name a name for the content being processed.\n * @param {Object} inputData the content to process.\n * @param {Boolean} isBinary true if the content is not an unicode string\n * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.\n * @param {Boolean} isBase64 true if the string content is encoded with base64.\n * @return {Promise} a promise in a format usable by JSZip.\n */\nexports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) {\n\n    // if inputData is already a promise, this flatten it.\n    var promise = external.Promise.resolve(inputData).then(function(data) {\n\n\n        var isBlob = support.blob && (data instanceof Blob || [\"[object File]\", \"[object Blob]\"].indexOf(Object.prototype.toString.call(data)) !== -1);\n\n        if (isBlob && typeof FileReader !== \"undefined\") {\n            return new external.Promise(function (resolve, reject) {\n                var reader = new FileReader();\n\n                reader.onload = function(e) {\n                    resolve(e.target.result);\n                };\n                reader.onerror = function(e) {\n                    reject(e.target.error);\n                };\n                reader.readAsArrayBuffer(data);\n            });\n        } else {\n            return data;\n        }\n    });\n\n    return promise.then(function(data) {\n        var dataType = exports.getTypeOf(data);\n\n        if (!dataType) {\n            return external.Promise.reject(\n                new Error(\"Can't read the data of '\" + name + \"'. Is it \" +\n                          \"in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\")\n            );\n        }\n        // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n        if (dataType === \"arraybuffer\") {\n            data = exports.transformTo(\"uint8array\", data);\n        } else if (dataType === \"string\") {\n            if (isBase64) {\n                data = base64.decode(data);\n            }\n            else if (isBinary) {\n                // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask\n                if (isOptimizedBinaryString !== true) {\n                    // this is a string, not in a base64 format.\n                    // Be sure that this is a correct \"binary string\"\n                    data = string2binary(data);\n                }\n            }\n        }\n        return data;\n    });\n};\n\n},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,\"setimmediate\":54}],33:[function(require,module,exports){\n\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar sig = require(\"./signature\");\nvar ZipEntry = require(\"./zipEntry\");\nvar support = require(\"./support\");\n//  class ZipEntries {{{\n/**\n * All the entries in the zip file.\n * @constructor\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntries(loadOptions) {\n    this.files = [];\n    this.loadOptions = loadOptions;\n}\nZipEntries.prototype = {\n    /**\n     * Check that the reader is on the specified signature.\n     * @param {string} expectedSignature the expected signature.\n     * @throws {Error} if it is an other signature.\n     */\n    checkSignature: function(expectedSignature) {\n        if (!this.reader.readAndCheckSignature(expectedSignature)) {\n            this.reader.index -= 4;\n            var signature = this.reader.readString(4);\n            throw new Error(\"Corrupted zip or bug: unexpected signature \" + \"(\" + utils.pretty(signature) + \", expected \" + utils.pretty(expectedSignature) + \")\");\n        }\n    },\n    /**\n     * Check if the given signature is at the given index.\n     * @param {number} askedIndex the index to check.\n     * @param {string} expectedSignature the signature to expect.\n     * @return {boolean} true if the signature is here, false otherwise.\n     */\n    isSignature: function(askedIndex, expectedSignature) {\n        var currentIndex = this.reader.index;\n        this.reader.setIndex(askedIndex);\n        var signature = this.reader.readString(4);\n        var result = signature === expectedSignature;\n        this.reader.setIndex(currentIndex);\n        return result;\n    },\n    /**\n     * Read the end of the central directory.\n     */\n    readBlockEndOfCentral: function() {\n        this.diskNumber = this.reader.readInt(2);\n        this.diskWithCentralDirStart = this.reader.readInt(2);\n        this.centralDirRecordsOnThisDisk = this.reader.readInt(2);\n        this.centralDirRecords = this.reader.readInt(2);\n        this.centralDirSize = this.reader.readInt(4);\n        this.centralDirOffset = this.reader.readInt(4);\n\n        this.zipCommentLength = this.reader.readInt(2);\n        // warning : the encoding depends of the system locale\n        // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.\n        // On a windows machine, this field is encoded with the localized windows code page.\n        var zipComment = this.reader.readData(this.zipCommentLength);\n        var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n        // To get consistent behavior with the generation part, we will assume that\n        // this is utf8 encoded unless specified otherwise.\n        var decodeContent = utils.transformTo(decodeParamType, zipComment);\n        this.zipComment = this.loadOptions.decodeFileName(decodeContent);\n    },\n    /**\n     * Read the end of the Zip 64 central directory.\n     * Not merged with the method readEndOfCentral :\n     * The end of central can coexist with its Zip64 brother,\n     * I don't want to read the wrong number of bytes !\n     */\n    readBlockZip64EndOfCentral: function() {\n        this.zip64EndOfCentralSize = this.reader.readInt(8);\n        this.reader.skip(4);\n        // this.versionMadeBy = this.reader.readString(2);\n        // this.versionNeeded = this.reader.readInt(2);\n        this.diskNumber = this.reader.readInt(4);\n        this.diskWithCentralDirStart = this.reader.readInt(4);\n        this.centralDirRecordsOnThisDisk = this.reader.readInt(8);\n        this.centralDirRecords = this.reader.readInt(8);\n        this.centralDirSize = this.reader.readInt(8);\n        this.centralDirOffset = this.reader.readInt(8);\n\n        this.zip64ExtensibleData = {};\n        var extraDataSize = this.zip64EndOfCentralSize - 44,\n            index = 0,\n            extraFieldId,\n            extraFieldLength,\n            extraFieldValue;\n        while (index < extraDataSize) {\n            extraFieldId = this.reader.readInt(2);\n            extraFieldLength = this.reader.readInt(4);\n            extraFieldValue = this.reader.readData(extraFieldLength);\n            this.zip64ExtensibleData[extraFieldId] = {\n                id: extraFieldId,\n                length: extraFieldLength,\n                value: extraFieldValue\n            };\n        }\n    },\n    /**\n     * Read the end of the Zip 64 central directory locator.\n     */\n    readBlockZip64EndOfCentralLocator: function() {\n        this.diskWithZip64CentralDirStart = this.reader.readInt(4);\n        this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);\n        this.disksCount = this.reader.readInt(4);\n        if (this.disksCount > 1) {\n            throw new Error(\"Multi-volumes zip are not supported\");\n        }\n    },\n    /**\n     * Read the local files, based on the offset read in the central part.\n     */\n    readLocalFiles: function() {\n        var i, file;\n        for (i = 0; i < this.files.length; i++) {\n            file = this.files[i];\n            this.reader.setIndex(file.localHeaderOffset);\n            this.checkSignature(sig.LOCAL_FILE_HEADER);\n            file.readLocalPart(this.reader);\n            file.handleUTF8();\n            file.processAttributes();\n        }\n    },\n    /**\n     * Read the central directory.\n     */\n    readCentralDir: function() {\n        var file;\n\n        this.reader.setIndex(this.centralDirOffset);\n        while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) {\n            file = new ZipEntry({\n                zip64: this.zip64\n            }, this.loadOptions);\n            file.readCentralPart(this.reader);\n            this.files.push(file);\n        }\n\n        if (this.centralDirRecords !== this.files.length) {\n            if (this.centralDirRecords !== 0 && this.files.length === 0) {\n                // We expected some records but couldn't find ANY.\n                // This is really suspicious, as if something went wrong.\n                throw new Error(\"Corrupted zip or bug: expected \" + this.centralDirRecords + \" records in central dir, got \" + this.files.length);\n            } else {\n                // We found some records but not all.\n                // Something is wrong but we got something for the user: no error here.\n                // console.warn(\"expected\", this.centralDirRecords, \"records in central dir, got\", this.files.length);\n            }\n        }\n    },\n    /**\n     * Read the end of central directory.\n     */\n    readEndOfCentral: function() {\n        var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);\n        if (offset < 0) {\n            // Check if the content is a truncated zip or complete garbage.\n            // A \"LOCAL_FILE_HEADER\" is not required at the beginning (auto\n            // extractible zip for example) but it can give a good hint.\n            // If an ajax request was used without responseType, we will also\n            // get unreadable data.\n            var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);\n\n            if (isGarbage) {\n                throw new Error(\"Can't find end of central directory : is this a zip file ? \" +\n                                \"If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\");\n            } else {\n                throw new Error(\"Corrupted zip: can't find end of central directory\");\n            }\n\n        }\n        this.reader.setIndex(offset);\n        var endOfCentralDirOffset = offset;\n        this.checkSignature(sig.CENTRAL_DIRECTORY_END);\n        this.readBlockEndOfCentral();\n\n\n        /* extract from the zip spec :\n            4)  If one of the fields in the end of central directory\n                record is too small to hold required data, the field\n                should be set to -1 (0xFFFF or 0xFFFFFFFF) and the\n                ZIP64 format record should be created.\n            5)  The end of central directory record and the\n                Zip64 end of central directory locator record must\n                reside on the same disk when splitting or spanning\n                an archive.\n         */\n        if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {\n            this.zip64 = true;\n\n            /*\n            Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from\n            the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents\n            all numbers as 64-bit double precision IEEE 754 floating point numbers.\n            So, we have 53bits for integers and bitwise operations treat everything as 32bits.\n            see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators\n            and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5\n            */\n\n            // should look for a zip64 EOCD locator\n            offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n            if (offset < 0) {\n                throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");\n            }\n            this.reader.setIndex(offset);\n            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n            this.readBlockZip64EndOfCentralLocator();\n\n            // now the zip64 EOCD record\n            if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) {\n                // console.warn(\"ZIP64 end of central directory not where expected.\");\n                this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n                if (this.relativeOffsetEndOfZip64CentralDir < 0) {\n                    throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");\n                }\n            }\n            this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);\n            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n            this.readBlockZip64EndOfCentral();\n        }\n\n        var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;\n        if (this.zip64) {\n            expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator\n            expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize;\n        }\n\n        var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;\n\n        if (extraBytes > 0) {\n            // console.warn(extraBytes, \"extra bytes at beginning or within zipfile\");\n            if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) {\n                // The offsets seem wrong, but we have something at the specified offset.\n                // So… we keep it.\n            } else {\n                // the offset is wrong, update the \"zero\" of the reader\n                // this happens if data has been prepended (crx files for example)\n                this.reader.zero = extraBytes;\n            }\n        } else if (extraBytes < 0) {\n            throw new Error(\"Corrupted zip: missing \" + Math.abs(extraBytes) + \" bytes.\");\n        }\n    },\n    prepareReader: function(data) {\n        this.reader = readerFor(data);\n    },\n    /**\n     * Read a zip file and create ZipEntries.\n     * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.\n     */\n    load: function(data) {\n        this.prepareReader(data);\n        this.readEndOfCentral();\n        this.readCentralDir();\n        this.readLocalFiles();\n    }\n};\n// }}} end of ZipEntries\nmodule.exports = ZipEntries;\n\n},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(require,module,exports){\n\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar CompressedObject = require(\"./compressedObject\");\nvar crc32fn = require(\"./crc32\");\nvar utf8 = require(\"./utf8\");\nvar compressions = require(\"./compressions\");\nvar support = require(\"./support\");\n\nvar MADE_BY_DOS = 0x00;\nvar MADE_BY_UNIX = 0x03;\n\n/**\n * Find a compression registered in JSZip.\n * @param {string} compressionMethod the method magic to find.\n * @return {Object|null} the JSZip compression object, null if none found.\n */\nvar findCompression = function(compressionMethod) {\n    for (var method in compressions) {\n        if (!Object.prototype.hasOwnProperty.call(compressions, method)) {\n            continue;\n        }\n        if (compressions[method].magic === compressionMethod) {\n            return compressions[method];\n        }\n    }\n    return null;\n};\n\n// class ZipEntry {{{\n/**\n * An entry in the zip file.\n * @constructor\n * @param {Object} options Options of the current file.\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntry(options, loadOptions) {\n    this.options = options;\n    this.loadOptions = loadOptions;\n}\nZipEntry.prototype = {\n    /**\n     * say if the file is encrypted.\n     * @return {boolean} true if the file is encrypted, false otherwise.\n     */\n    isEncrypted: function() {\n        // bit 1 is set\n        return (this.bitFlag & 0x0001) === 0x0001;\n    },\n    /**\n     * say if the file has utf-8 filename/comment.\n     * @return {boolean} true if the filename/comment is in utf-8, false otherwise.\n     */\n    useUTF8: function() {\n        // bit 11 is set\n        return (this.bitFlag & 0x0800) === 0x0800;\n    },\n    /**\n     * Read the local part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readLocalPart: function(reader) {\n        var compression, localExtraFieldsLength;\n\n        // we already know everything from the central dir !\n        // If the central dir data are false, we are doomed.\n        // On the bright side, the local part is scary  : zip64, data descriptors, both, etc.\n        // The less data we get here, the more reliable this should be.\n        // Let's skip the whole header and dash to the data !\n        reader.skip(22);\n        // in some zip created on windows, the filename stored in the central dir contains \\ instead of /.\n        // Strangely, the filename here is OK.\n        // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes\n        // or APPNOTE#4.4.17.1, \"All slashes MUST be forward slashes '/'\") but there are a lot of bad zip generators...\n        // Search \"unzip mismatching \"local\" filename continuing with \"central\" filename version\" on\n        // the internet.\n        //\n        // I think I see the logic here : the central directory is used to display\n        // content and the local directory is used to extract the files. Mixing / and \\\n        // may be used to display \\ to windows users and use / when extracting the files.\n        // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394\n        this.fileNameLength = reader.readInt(2);\n        localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir\n        // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding.\n        this.fileName = reader.readData(this.fileNameLength);\n        reader.skip(localExtraFieldsLength);\n\n        if (this.compressedSize === -1 || this.uncompressedSize === -1) {\n            throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory \" + \"(compressedSize === -1 || uncompressedSize === -1)\");\n        }\n\n        compression = findCompression(this.compressionMethod);\n        if (compression === null) { // no compression found\n            throw new Error(\"Corrupted zip : compression \" + utils.pretty(this.compressionMethod) + \" unknown (inner file : \" + utils.transformTo(\"string\", this.fileName) + \")\");\n        }\n        this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize));\n    },\n\n    /**\n     * Read the central part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readCentralPart: function(reader) {\n        this.versionMadeBy = reader.readInt(2);\n        reader.skip(2);\n        // this.versionNeeded = reader.readInt(2);\n        this.bitFlag = reader.readInt(2);\n        this.compressionMethod = reader.readString(2);\n        this.date = reader.readDate();\n        this.crc32 = reader.readInt(4);\n        this.compressedSize = reader.readInt(4);\n        this.uncompressedSize = reader.readInt(4);\n        var fileNameLength = reader.readInt(2);\n        this.extraFieldsLength = reader.readInt(2);\n        this.fileCommentLength = reader.readInt(2);\n        this.diskNumberStart = reader.readInt(2);\n        this.internalFileAttributes = reader.readInt(2);\n        this.externalFileAttributes = reader.readInt(4);\n        this.localHeaderOffset = reader.readInt(4);\n\n        if (this.isEncrypted()) {\n            throw new Error(\"Encrypted zip are not supported\");\n        }\n\n        // will be read in the local part, see the comments there\n        reader.skip(fileNameLength);\n        this.readExtraFields(reader);\n        this.parseZIP64ExtraField(reader);\n        this.fileComment = reader.readData(this.fileCommentLength);\n    },\n\n    /**\n     * Parse the external file attributes and get the unix/dos permissions.\n     */\n    processAttributes: function () {\n        this.unixPermissions = null;\n        this.dosPermissions = null;\n        var madeBy = this.versionMadeBy >> 8;\n\n        // Check if we have the DOS directory flag set.\n        // We look for it in the DOS and UNIX permissions\n        // but some unknown platform could set it as a compatibility flag.\n        this.dir = this.externalFileAttributes & 0x0010 ? true : false;\n\n        if(madeBy === MADE_BY_DOS) {\n            // first 6 bits (0 to 5)\n            this.dosPermissions = this.externalFileAttributes & 0x3F;\n        }\n\n        if(madeBy === MADE_BY_UNIX) {\n            this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF;\n            // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);\n        }\n\n        // fail safe : if the name ends with a / it probably means a folder\n        if (!this.dir && this.fileNameStr.slice(-1) === \"/\") {\n            this.dir = true;\n        }\n    },\n\n    /**\n     * Parse the ZIP64 extra field and merge the info in the current ZipEntry.\n     * @param {DataReader} reader the reader to use.\n     */\n    parseZIP64ExtraField: function() {\n        if (!this.extraFields[0x0001]) {\n            return;\n        }\n\n        // should be something, preparing the extra reader\n        var extraReader = readerFor(this.extraFields[0x0001].value);\n\n        // I really hope that these 64bits integer can fit in 32 bits integer, because js\n        // won't let us have more.\n        if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {\n            this.uncompressedSize = extraReader.readInt(8);\n        }\n        if (this.compressedSize === utils.MAX_VALUE_32BITS) {\n            this.compressedSize = extraReader.readInt(8);\n        }\n        if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {\n            this.localHeaderOffset = extraReader.readInt(8);\n        }\n        if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {\n            this.diskNumberStart = extraReader.readInt(4);\n        }\n    },\n    /**\n     * Read the central part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readExtraFields: function(reader) {\n        var end = reader.index + this.extraFieldsLength,\n            extraFieldId,\n            extraFieldLength,\n            extraFieldValue;\n\n        if (!this.extraFields) {\n            this.extraFields = {};\n        }\n\n        while (reader.index + 4 < end) {\n            extraFieldId = reader.readInt(2);\n            extraFieldLength = reader.readInt(2);\n            extraFieldValue = reader.readData(extraFieldLength);\n\n            this.extraFields[extraFieldId] = {\n                id: extraFieldId,\n                length: extraFieldLength,\n                value: extraFieldValue\n            };\n        }\n\n        reader.setIndex(end);\n    },\n    /**\n     * Apply an UTF8 transformation if needed.\n     */\n    handleUTF8: function() {\n        var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n        if (this.useUTF8()) {\n            this.fileNameStr = utf8.utf8decode(this.fileName);\n            this.fileCommentStr = utf8.utf8decode(this.fileComment);\n        } else {\n            var upath = this.findExtraFieldUnicodePath();\n            if (upath !== null) {\n                this.fileNameStr = upath;\n            } else {\n                // ASCII text or unsupported code page\n                var fileNameByteArray =  utils.transformTo(decodeParamType, this.fileName);\n                this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);\n            }\n\n            var ucomment = this.findExtraFieldUnicodeComment();\n            if (ucomment !== null) {\n                this.fileCommentStr = ucomment;\n            } else {\n                // ASCII text or unsupported code page\n                var commentByteArray =  utils.transformTo(decodeParamType, this.fileComment);\n                this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);\n            }\n        }\n    },\n\n    /**\n     * Find the unicode path declared in the extra field, if any.\n     * @return {String} the unicode path, null otherwise.\n     */\n    findExtraFieldUnicodePath: function() {\n        var upathField = this.extraFields[0x7075];\n        if (upathField) {\n            var extraReader = readerFor(upathField.value);\n\n            // wrong version\n            if (extraReader.readInt(1) !== 1) {\n                return null;\n            }\n\n            // the crc of the filename changed, this field is out of date.\n            if (crc32fn(this.fileName) !== extraReader.readInt(4)) {\n                return null;\n            }\n\n            return utf8.utf8decode(extraReader.readData(upathField.length - 5));\n        }\n        return null;\n    },\n\n    /**\n     * Find the unicode comment declared in the extra field, if any.\n     * @return {String} the unicode comment, null otherwise.\n     */\n    findExtraFieldUnicodeComment: function() {\n        var ucommentField = this.extraFields[0x6375];\n        if (ucommentField) {\n            var extraReader = readerFor(ucommentField.value);\n\n            // wrong version\n            if (extraReader.readInt(1) !== 1) {\n                return null;\n            }\n\n            // the crc of the comment changed, this field is out of date.\n            if (crc32fn(this.fileComment) !== extraReader.readInt(4)) {\n                return null;\n            }\n\n            return utf8.utf8decode(extraReader.readData(ucommentField.length - 5));\n        }\n        return null;\n    }\n};\nmodule.exports = ZipEntry;\n\n},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(require,module,exports){\n\"use strict\";\n\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar utf8 = require(\"./utf8\");\nvar CompressedObject = require(\"./compressedObject\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * A simple object representing a file in the zip file.\n * @constructor\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n * @param {Object} options the options of the file\n */\nvar ZipObject = function(name, data, options) {\n    this.name = name;\n    this.dir = options.dir;\n    this.date = options.date;\n    this.comment = options.comment;\n    this.unixPermissions = options.unixPermissions;\n    this.dosPermissions = options.dosPermissions;\n\n    this._data = data;\n    this._dataBinary = options.binary;\n    // keep only the compression\n    this.options = {\n        compression : options.compression,\n        compressionOptions : options.compressionOptions\n    };\n};\n\nZipObject.prototype = {\n    /**\n     * Create an internal stream for the content of this object.\n     * @param {String} type the type of each chunk.\n     * @return StreamHelper the stream.\n     */\n    internalStream: function (type) {\n        var result = null, outputType = \"string\";\n        try {\n            if (!type) {\n                throw new Error(\"No output type specified.\");\n            }\n            outputType = type.toLowerCase();\n            var askUnicodeString = outputType === \"string\" || outputType === \"text\";\n            if (outputType === \"binarystring\" || outputType === \"text\") {\n                outputType = \"string\";\n            }\n            result = this._decompressWorker();\n\n            var isUnicodeString = !this._dataBinary;\n\n            if (isUnicodeString && !askUnicodeString) {\n                result = result.pipe(new utf8.Utf8EncodeWorker());\n            }\n            if (!isUnicodeString && askUnicodeString) {\n                result = result.pipe(new utf8.Utf8DecodeWorker());\n            }\n        } catch (e) {\n            result = new GenericWorker(\"error\");\n            result.error(e);\n        }\n\n        return new StreamHelper(result, outputType, \"\");\n    },\n\n    /**\n     * Prepare the content in the asked type.\n     * @param {String} type the type of the result.\n     * @param {Function} onUpdate a function to call on each internal update.\n     * @return Promise the promise of the result.\n     */\n    async: function (type, onUpdate) {\n        return this.internalStream(type).accumulate(onUpdate);\n    },\n\n    /**\n     * Prepare the content as a nodejs stream.\n     * @param {String} type the type of each chunk.\n     * @param {Function} onUpdate a function to call on each internal update.\n     * @return Stream the stream.\n     */\n    nodeStream: function (type, onUpdate) {\n        return this.internalStream(type || \"nodebuffer\").toNodejsStream(onUpdate);\n    },\n\n    /**\n     * Return a worker for the compressed content.\n     * @private\n     * @param {Object} compression the compression object to use.\n     * @param {Object} compressionOptions the options to use when compressing.\n     * @return Worker the worker.\n     */\n    _compressWorker: function (compression, compressionOptions) {\n        if (\n            this._data instanceof CompressedObject &&\n            this._data.compression.magic === compression.magic\n        ) {\n            return this._data.getCompressedWorker();\n        } else {\n            var result = this._decompressWorker();\n            if(!this._dataBinary) {\n                result = result.pipe(new utf8.Utf8EncodeWorker());\n            }\n            return CompressedObject.createWorkerFrom(result, compression, compressionOptions);\n        }\n    },\n    /**\n     * Return a worker for the decompressed content.\n     * @private\n     * @return Worker the worker.\n     */\n    _decompressWorker : function () {\n        if (this._data instanceof CompressedObject) {\n            return this._data.getContentWorker();\n        } else if (this._data instanceof GenericWorker) {\n            return this._data;\n        } else {\n            return new DataWorker(this._data);\n        }\n    }\n};\n\nvar removedMethods = [\"asText\", \"asBinary\", \"asNodeBuffer\", \"asUint8Array\", \"asArrayBuffer\"];\nvar removedFn = function () {\n    throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n};\n\nfor(var i = 0; i < removedMethods.length; i++) {\n    ZipObject.prototype[removedMethods[i]] = removedFn;\n}\nmodule.exports = ZipObject;\n\n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(require,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],37:[function(require,module,exports){\n'use strict';\nvar immediate = require('immediate');\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype[\"finally\"] = function (callback) {\n  if (typeof callback !== 'function') {\n    return this;\n  }\n  var p = this.constructor;\n  return this.then(resolve, reject);\n\n  function resolve(value) {\n    function yes () {\n      return value;\n    }\n    return p.resolve(callback()).then(yes);\n  }\n  function reject(reason) {\n    function no () {\n      throw reason;\n    }\n    return p.resolve(callback()).then(no);\n  }\n};\nPromise.prototype[\"catch\"] = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n\n},{\"immediate\":36}],38:[function(require,module,exports){\n// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign    = require('./lib/utils/common').assign;\n\nvar deflate   = require('./lib/deflate');\nvar inflate   = require('./lib/inflate');\nvar constants = require('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n\n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(require,module,exports){\n'use strict';\n\n\nvar zlib_deflate = require('./zlib/deflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH      = 0;\nvar Z_FINISH        = 4;\n\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_SYNC_FLUSH    = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY    = 0;\n\nvar Z_DEFLATED  = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overriden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param)  or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n *   - `text` (Boolean) - true if compressed data believed to be text\n *   - `time` (Number) - modification time, unix timestamp\n *   - `os` (Number) - operation system code\n *   - `extra` (Array) - array of bytes with extra data (max 65536)\n *   - `name` (String) - file name (binary string)\n *   - `comment` (String) - comment (binary string)\n *   - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true);  // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n  if (!(this instanceof Deflate)) return new Deflate(options);\n\n  this.options = utils.assign({\n    level: Z_DEFAULT_COMPRESSION,\n    method: Z_DEFLATED,\n    chunkSize: 16384,\n    windowBits: 15,\n    memLevel: 8,\n    strategy: Z_DEFAULT_STRATEGY,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  if (opt.raw && (opt.windowBits > 0)) {\n    opt.windowBits = -opt.windowBits;\n  }\n\n  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n    opt.windowBits += 16;\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status = zlib_deflate.deflateInit2(\n    this.strm,\n    opt.level,\n    opt.method,\n    opt.windowBits,\n    opt.memLevel,\n    opt.strategy\n  );\n\n  if (status !== Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  if (opt.header) {\n    zlib_deflate.deflateSetHeader(this.strm, opt.header);\n  }\n\n  if (opt.dictionary) {\n    var dict;\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      // If we need to compress text, change encoding to utf8.\n      dict = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      dict = new Uint8Array(opt.dictionary);\n    } else {\n      dict = opt.dictionary;\n    }\n\n    status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n    if (status !== Z_OK) {\n      throw new Error(msg[status]);\n    }\n\n    this._dict_set = true;\n  }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n *   converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var status, _mode;\n\n  if (this.ended) { return false; }\n\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // If we need to compress text, change encoding to utf8.\n    strm.input = strings.string2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n    status = zlib_deflate.deflate(strm, _mode);    /* no bad return value */\n\n    if (status !== Z_STREAM_END && status !== Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n    if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n      if (this.options.to === 'string') {\n        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n      } else {\n        this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n      }\n    }\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n  // Finalize on the last chunk.\n  if (_mode === Z_FINISH) {\n    status = zlib_deflate.deflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === Z_SYNC_FLUSH) {\n    this.onEnd(Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): ouput data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    if (this.options.to === 'string') {\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n  var deflator = new Deflate(options);\n\n  deflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n  return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n  options = options || {};\n  options.gzip = true;\n  return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n\n},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(require,module,exports){\n'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar c            = require('./zlib/constants');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\nvar GZheader     = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overriden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true);  // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n  if (!(this instanceof Inflate)) return new Inflate(options);\n\n  this.options = utils.assign({\n    chunkSize: 16384,\n    windowBits: 0,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  // Force window size for `raw` data, if not set directly,\n  // because we have no header for autodetect.\n  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n    opt.windowBits = -opt.windowBits;\n    if (opt.windowBits === 0) { opt.windowBits = -15; }\n  }\n\n  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n      !(options && options.windowBits)) {\n    opt.windowBits += 32;\n  }\n\n  // Gzip header has no info about windows size, we can do autodetect only\n  // for deflate. So, if window size not set, force it to max when gzip possible\n  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n    // bit 3 (16) -> gzipped data\n    // bit 4 (32) -> autodetect gzip/deflate\n    if ((opt.windowBits & 15) === 0) {\n      opt.windowBits |= 15;\n    }\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm   = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status  = zlib_inflate.inflateInit2(\n    this.strm,\n    opt.windowBits\n  );\n\n  if (status !== c.Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  this.header = new GZheader();\n\n  zlib_inflate.inflateGetHeader(this.strm, this.header);\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var dictionary = this.options.dictionary;\n  var status, _mode;\n  var next_out_utf8, tail, utf8str;\n  var dict;\n\n  // Flag to properly process Z_BUF_ERROR on testing inflate call\n  // when we check that all output data was flushed.\n  var allowBufError = false;\n\n  if (this.ended) { return false; }\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // Only binary strings can be decompressed on practice\n    strm.input = strings.binstring2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */\n\n    if (status === c.Z_NEED_DICT && dictionary) {\n      // Convert data if needed\n      if (typeof dictionary === 'string') {\n        dict = strings.string2buf(dictionary);\n      } else if (toString.call(dictionary) === '[object ArrayBuffer]') {\n        dict = new Uint8Array(dictionary);\n      } else {\n        dict = dictionary;\n      }\n\n      status = zlib_inflate.inflateSetDictionary(this.strm, dict);\n\n    }\n\n    if (status === c.Z_BUF_ERROR && allowBufError === true) {\n      status = c.Z_OK;\n      allowBufError = false;\n    }\n\n    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n\n    if (strm.next_out) {\n      if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n        if (this.options.to === 'string') {\n\n          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n          tail = strm.next_out - next_out_utf8;\n          utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n          // move tail\n          strm.next_out = tail;\n          strm.avail_out = chunkSize - tail;\n          if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n          this.onData(utf8str);\n\n        } else {\n          this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n        }\n      }\n    }\n\n    // When no more input data, we should check that internal inflate buffers\n    // are flushed. The only way to do it when avail_out = 0 - run one more\n    // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n    // Here we set flag to process this error properly.\n    //\n    // NOTE. Deflate does not return error in this case and does not needs such\n    // logic.\n    if (strm.avail_in === 0 && strm.avail_out === 0) {\n      allowBufError = true;\n    }\n\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n  if (status === c.Z_STREAM_END) {\n    _mode = c.Z_FINISH;\n  }\n\n  // Finalize on the last chunk.\n  if (_mode === c.Z_FINISH) {\n    status = zlib_inflate.inflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === c.Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === c.Z_SYNC_FLUSH) {\n    this.onEnd(c.Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): ouput data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === c.Z_OK) {\n    if (this.options.to === 'string') {\n      // Glue & convert here, until we teach pako to send\n      // utf8 alligned strings to onData\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n *   , output;\n *\n * try {\n *   output = pako.inflate(input);\n * } catch (err)\n *   console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n  var inflator = new Inflate(options);\n\n  inflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n  return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip  = inflate;\n\n},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(require,module,exports){\n'use strict';\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (source.hasOwnProperty(p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n\n},{}],42:[function(require,module,exports){\n// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safary\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n  // count binary size\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  }\n\n  // allocate buffer\n  buf = new utils.Buf8(buf_len);\n\n  // convert\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | (c >>> 6);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | (c >>> 12);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | (c >>> 18);\n      buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    }\n  }\n\n  return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n  // use fallback for big arrays to avoid stack overflow\n  if (len < 65537) {\n    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n    }\n  }\n\n  var result = '';\n  for (var i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n  return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n  return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n  var buf = new utils.Buf8(str.length);\n  for (var i = 0, len = buf.length; i < len; i++) {\n    buf[i] = str.charCodeAt(i);\n  }\n  return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n  var i, out, c, c_len;\n  var len = max || buf.length;\n\n  // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n  var utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    c = buf[i++];\n    // quick process ascii\n    if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n    c_len = _utf8len[c];\n    // skip 5 & 6 byte codes\n    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n    // apply mask on first byte\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n    // join the rest\n    while (c_len > 1 && i < len) {\n      c = (c << 6) | (buf[i++] & 0x3f);\n      c_len--;\n    }\n\n    // terminated by end of string?\n    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n      utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n  var pos;\n\n  max = max || buf.length;\n  if (max > buf.length) { max = buf.length; }\n\n  // go back from last position, until start of sequence found\n  pos = max - 1;\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n  // Fuckup - very small and broken sequence,\n  // return max, because we should return something anyway.\n  if (pos < 0) { return max; }\n\n  // If we came to start of buffer - that means vuffer is too small,\n  // return max too.\n  if (pos === 0) { return max; }\n\n  return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n},{\"./common\":41}],43:[function(require,module,exports){\n'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It doesn't worth to make additional optimizationa as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n\n},{}],44:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n\n},{}],45:[function(require,module,exports){\n'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n\n},{}],46:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils   = require('../utils/common');\nvar trees   = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32   = require('./crc32');\nvar msg     = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH      = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\nvar Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\n//var Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\n//var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\n//var Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED            = 1;\nvar Z_HUFFMAN_ONLY        = 2;\nvar Z_RLE                 = 3;\nvar Z_FIXED               = 4;\nvar Z_DEFAULT_STRATEGY    = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES       = 30;\n/* number of distance codes */\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE     = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n  var s = strm.state;\n\n  //_tr_flush_bits(s);\n  var len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n//  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;      /* max hash chain length */\n  var scan = s.strstart; /* current string */\n  var match;                       /* matched string */\n  var len;                           /* length of current match */\n  var best_len = s.prev_length;              /* best match length so far */\n  var nice_match = s.nice_match;             /* stop if match long enough */\n  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1  = _win[scan + best_len - 1];\n  var scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    var curr = s.strstart + s.lookahead;\n//    var init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n  var hash_head;        /* head of the hash chain */\n  var bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n  var hash_head;          /* head of hash chain */\n  var bflush;              /* set if current block must be flushed */\n\n  var max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n  var bflush;            /* set if current block must be flushed */\n  var prev;              /* byte at distance one to match */\n  var scan, strend;      /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n  var bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  trees._tr_init(s);\n  return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  var s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n                );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      var level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n\n},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n  /* true if compressed data believed to be text */\n  this.text       = 0;\n  /* modification time */\n  this.time       = 0;\n  /* extra flags (not used when writing a gzip file) */\n  this.xflags     = 0;\n  /* operating system */\n  this.os         = 0;\n  /* pointer to extra field or Z_NULL if none */\n  this.extra      = null;\n  /* extra field length (valid if extra != Z_NULL) */\n  this.extra_len  = 0; // Actually, we don't need it in JS,\n                       // but leave for few code modifications\n\n  //\n  // Setup limits is not necessary because in js we should not preallocate memory\n  // for inflate use constant limit in 65536 bytes\n  //\n\n  /* space at extra (only when reading header) */\n  // this.extra_max  = 0;\n  /* pointer to zero-terminated file name or Z_NULL */\n  this.name       = '';\n  /* space at name (only when reading header) */\n  // this.name_max   = 0;\n  /* pointer to zero-terminated comment or Z_NULL */\n  this.comment    = '';\n  /* space at comment (only when reading header) */\n  // this.comm_max   = 0;\n  /* true if there was or will be a header crc */\n  this.hcrc       = 0;\n  /* true when done reading gzip header (not used when writing a gzip file) */\n  this.done       = false;\n}\n\nmodule.exports = GZheader;\n\n},{}],48:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30;       /* got a data error -- remain here until reset */\nvar TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n  var _in;                    /* local strm.input */\n  var last;                   /* have enough input while in < last */\n  var _out;                   /* local strm.output */\n  var beg;                    /* inflate()'s initial strm.output */\n  var end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  var dmax;                   /* maximum distance from zlib header */\n//#endif\n  var wsize;                  /* window size or zero if not using window */\n  var whave;                  /* valid bytes in the window */\n  var wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  var s_window;               /* allocated sliding window, if wsize != 0 */\n  var hold;                   /* local strm.hold */\n  var bits;                   /* local strm.bits */\n  var lcode;                  /* local strm.lencode */\n  var dcode;                  /* local strm.distcode */\n  var lmask;                  /* mask for first level of length codes */\n  var dmask;                  /* mask for first level of distance codes */\n  var here;                   /* retrieved table entry */\n  var op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  var len;                    /* match length, unused bytes */\n  var dist;                   /* match distance */\n  var from;                   /* where to copy match from */\n  var from_source;\n\n\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n\n},{}],49:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils         = require('../utils/common');\nvar adler32       = require('./adler32');\nvar crc32         = require('./crc32');\nvar inflate_fast  = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\nvar Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\nvar Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar    HEAD = 1;       /* i: waiting for magic header */\nvar    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nvar    TIME = 3;       /* i: waiting for modification time (gzip) */\nvar    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nvar    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nvar    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nvar    NAME = 7;       /* i: waiting for end of file name (gzip) */\nvar    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nvar    HCRC = 9;       /* i: waiting for header crc (gzip) */\nvar    DICTID = 10;    /* i: waiting for dictionary check value */\nvar    DICT = 11;      /* waiting for inflateSetDictionary() call */\nvar        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nvar        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nvar        STORED = 14;    /* i: waiting for stored size (length and complement) */\nvar        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nvar        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nvar        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nvar        LENLENS = 18;   /* i: waiting for code length code lengths */\nvar        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nvar            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nvar            LEN = 21;       /* i: waiting for length/lit/eob code */\nvar            LENEXT = 22;    /* i: waiting for length extra bits */\nvar            DIST = 23;      /* i: waiting for distance code */\nvar            DISTEXT = 24;   /* i: waiting for distance extra bits */\nvar            MATCH = 25;     /* o: waiting for output space to copy string */\nvar            LIT = 26;       /* o: waiting for output space to write literal */\nvar    CHECK = 27;     /* i: waiting for 32-bit check value */\nvar    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nvar    DONE = 29;      /* finished check, done -- remain here until reset */\nvar    BAD = 30;       /* got a data error -- remain here until reset */\nvar    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nvar    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n  this.work = new utils.Buf16(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new utils.Buf8(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output;          // input/output buffers\n  var next;                   /* next input INDEX */\n  var put;                    /* next output INDEX */\n  var have, left;             /* available input and output */\n  var hold;                   /* bit buffer */\n  var bits;                   /* bits in bit buffer */\n  var _in, _out;              /* save starting available input and output */\n  var copy;                   /* number of stored or match bytes to copy */\n  var from;                   /* where to copy match bytes from */\n  var from_source;\n  var here = 0;               /* current decoding table entry */\n  var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n  var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  var len;                    /* length to copy for repeats, bits to drop */\n  var ret;                    /* return code */\n  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */\n  var opts;\n\n  var n; // temporary var for NEED_BITS\n\n  var order = /* permutation of code lengths */\n    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n    case HEAD:\n      if (state.wrap === 0) {\n        state.mode = TYPEDO;\n        break;\n      }\n      //=== NEEDBITS(16);\n      while (bits < 16) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n        state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n        //=== CRC2(state.check, hold);\n        hbuf[0] = hold & 0xff;\n        hbuf[1] = (hold >>> 8) & 0xff;\n        state.check = crc32(state.check, hbuf, 2, 0);\n        //===//\n\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = FLAGS;\n        break;\n      }\n      state.flags = 0;           /* expect zlib header */\n      if (state.head) {\n        state.head.done = false;\n      }\n      if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n        (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n        strm.msg = 'incorrect header check';\n        state.mode = BAD;\n        break;\n      }\n      if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n        strm.msg = 'unknown compression method';\n        state.mode = BAD;\n        break;\n      }\n      //--- DROPBITS(4) ---//\n      hold >>>= 4;\n      bits -= 4;\n      //---//\n      len = (hold & 0x0f)/*BITS(4)*/ + 8;\n      if (state.wbits === 0) {\n        state.wbits = len;\n      }\n      else if (len > state.wbits) {\n        strm.msg = 'invalid window size';\n        state.mode = BAD;\n        break;\n      }\n      state.dmax = 1 << len;\n      //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n      strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n      state.mode = hold & 0x200 ? DICTID : TYPE;\n      //=== INITBITS();\n      hold = 0;\n      bits = 0;\n      //===//\n      break;\n    case FLAGS:\n      //=== NEEDBITS(16); */\n      while (bits < 16) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      state.flags = hold;\n      if ((state.flags & 0xff) !== Z_DEFLATED) {\n        strm.msg = 'unknown compression method';\n        state.mode = BAD;\n        break;\n      }\n      if (state.flags & 0xe000) {\n        strm.msg = 'unknown header flags set';\n        state.mode = BAD;\n        break;\n      }\n      if (state.head) {\n        state.head.text = ((hold >> 8) & 1);\n      }\n      if (state.flags & 0x0200) {\n        //=== CRC2(state.check, hold);\n        hbuf[0] = hold & 0xff;\n        hbuf[1] = (hold >>> 8) & 0xff;\n        state.check = crc32(state.check, hbuf, 2, 0);\n        //===//\n      }\n      //=== INITBITS();\n      hold = 0;\n      bits = 0;\n      //===//\n      state.mode = TIME;\n      /* falls through */\n    case TIME:\n      //=== NEEDBITS(32); */\n      while (bits < 32) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      if (state.head) {\n        state.head.time = hold;\n      }\n      if (state.flags & 0x0200) {\n        //=== CRC4(state.check, hold)\n        hbuf[0] = hold & 0xff;\n        hbuf[1] = (hold >>> 8) & 0xff;\n        hbuf[2] = (hold >>> 16) & 0xff;\n        hbuf[3] = (hold >>> 24) & 0xff;\n        state.check = crc32(state.check, hbuf, 4, 0);\n        //===\n      }\n      //=== INITBITS();\n      hold = 0;\n      bits = 0;\n      //===//\n      state.mode = OS;\n      /* falls through */\n    case OS:\n      //=== NEEDBITS(16); */\n      while (bits < 16) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      if (state.head) {\n        state.head.xflags = (hold & 0xff);\n        state.head.os = (hold >> 8);\n      }\n      if (state.flags & 0x0200) {\n        //=== CRC2(state.check, hold);\n        hbuf[0] = hold & 0xff;\n        hbuf[1] = (hold >>> 8) & 0xff;\n        state.check = crc32(state.check, hbuf, 2, 0);\n        //===//\n      }\n      //=== INITBITS();\n      hold = 0;\n      bits = 0;\n      //===//\n      state.mode = EXLEN;\n      /* falls through */\n    case EXLEN:\n      if (state.flags & 0x0400) {\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.length = hold;\n        if (state.head) {\n          state.head.extra_len = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n      }\n      else if (state.head) {\n        state.head.extra = null/*Z_NULL*/;\n      }\n      state.mode = EXTRA;\n      /* falls through */\n    case EXTRA:\n      if (state.flags & 0x0400) {\n        copy = state.length;\n        if (copy > have) { copy = have; }\n        if (copy) {\n          if (state.head) {\n            len = state.head.extra_len - state.length;\n            if (!state.head.extra) {\n              // Use untyped array for more conveniend processing later\n              state.head.extra = new Array(state.head.extra_len);\n            }\n            utils.arraySet(\n              state.head.extra,\n              input,\n              next,\n              // extra field is limited to 65536 bytes\n              // - no need for additional size check\n              copy,\n              /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n              len\n            );\n            //zmemcpy(state.head.extra + len, next,\n            //        len + copy > state.head.extra_max ?\n            //        state.head.extra_max - len : copy);\n          }\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          state.length -= copy;\n        }\n        if (state.length) { break inf_leave; }\n      }\n      state.length = 0;\n      state.mode = NAME;\n      /* falls through */\n    case NAME:\n      if (state.flags & 0x0800) {\n        if (have === 0) { break inf_leave; }\n        copy = 0;\n        do {\n          // TODO: 2 or 1 bytes?\n          len = input[next + copy++];\n          /* use constant limit because in js we should not preallocate memory */\n          if (state.head && len &&\n              (state.length < 65536 /*state.head.name_max*/)) {\n            state.head.name += String.fromCharCode(len);\n          }\n        } while (len && copy < have);\n\n        if (state.flags & 0x0200) {\n          state.check = crc32(state.check, input, copy, next);\n        }\n        have -= copy;\n        next += copy;\n        if (len) { break inf_leave; }\n      }\n      else if (state.head) {\n        state.head.name = null;\n      }\n      state.length = 0;\n      state.mode = COMMENT;\n      /* falls through */\n    case COMMENT:\n      if (state.flags & 0x1000) {\n        if (have === 0) { break inf_leave; }\n        copy = 0;\n        do {\n          len = input[next + copy++];\n          /* use constant limit because in js we should not preallocate memory */\n          if (state.head && len &&\n              (state.length < 65536 /*state.head.comm_max*/)) {\n            state.head.comment += String.fromCharCode(len);\n          }\n        } while (len && copy < have);\n        if (state.flags & 0x0200) {\n          state.check = crc32(state.check, input, copy, next);\n        }\n        have -= copy;\n        next += copy;\n        if (len) { break inf_leave; }\n      }\n      else if (state.head) {\n        state.head.comment = null;\n      }\n      state.mode = HCRC;\n      /* falls through */\n    case HCRC:\n      if (state.flags & 0x0200) {\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (hold !== (state.check & 0xffff)) {\n          strm.msg = 'header crc mismatch';\n          state.mode = BAD;\n          break;\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n      }\n      if (state.head) {\n        state.head.hcrc = ((state.flags >> 9) & 1);\n        state.head.done = true;\n      }\n      strm.adler = state.check = 0;\n      state.mode = TYPE;\n      break;\n    case DICTID:\n      //=== NEEDBITS(32); */\n      while (bits < 32) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      strm.adler = state.check = zswap32(hold);\n      //=== INITBITS();\n      hold = 0;\n      bits = 0;\n      //===//\n      state.mode = DICT;\n      /* falls through */\n    case DICT:\n      if (state.havedict === 0) {\n        //--- RESTORE() ---\n        strm.next_out = put;\n        strm.avail_out = left;\n        strm.next_in = next;\n        strm.avail_in = have;\n        state.hold = hold;\n        state.bits = bits;\n        //---\n        return Z_NEED_DICT;\n      }\n      strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n      state.mode = TYPE;\n      /* falls through */\n    case TYPE:\n      if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n      /* falls through */\n    case TYPEDO:\n      if (state.last) {\n        //--- BYTEBITS() ---//\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        state.mode = CHECK;\n        break;\n      }\n      //=== NEEDBITS(3); */\n      while (bits < 3) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      state.last = (hold & 0x01)/*BITS(1)*/;\n      //--- DROPBITS(1) ---//\n      hold >>>= 1;\n      bits -= 1;\n      //---//\n\n      switch ((hold & 0x03)/*BITS(2)*/) {\n      case 0:                             /* stored block */\n        //Tracev((stderr, \"inflate:     stored block%s\\n\",\n        //        state.last ? \" (last)\" : \"\"));\n        state.mode = STORED;\n        break;\n      case 1:                             /* fixed block */\n        fixedtables(state);\n        //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n        //        state.last ? \" (last)\" : \"\"));\n        state.mode = LEN_;             /* decode codes */\n        if (flush === Z_TREES) {\n          //--- DROPBITS(2) ---//\n          hold >>>= 2;\n          bits -= 2;\n          //---//\n          break inf_leave;\n        }\n        break;\n      case 2:                             /* dynamic block */\n        //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n        //        state.last ? \" (last)\" : \"\"));\n        state.mode = TABLE;\n        break;\n      case 3:\n        strm.msg = 'invalid block type';\n        state.mode = BAD;\n      }\n      //--- DROPBITS(2) ---//\n      hold >>>= 2;\n      bits -= 2;\n      //---//\n      break;\n    case STORED:\n      //--- BYTEBITS() ---// /* go to byte boundary */\n      hold >>>= bits & 7;\n      bits -= bits & 7;\n      //---//\n      //=== NEEDBITS(32); */\n      while (bits < 32) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n        strm.msg = 'invalid stored block lengths';\n        state.mode = BAD;\n        break;\n      }\n      state.length = hold & 0xffff;\n      //Tracev((stderr, \"inflate:       stored length %u\\n\",\n      //        state.length));\n      //=== INITBITS();\n      hold = 0;\n      bits = 0;\n      //===//\n      state.mode = COPY_;\n      if (flush === Z_TREES) { break inf_leave; }\n      /* falls through */\n    case COPY_:\n      state.mode = COPY;\n      /* falls through */\n    case COPY:\n      copy = state.length;\n      if (copy) {\n        if (copy > have) { copy = have; }\n        if (copy > left) { copy = left; }\n        if (copy === 0) { break inf_leave; }\n        //--- zmemcpy(put, next, copy); ---\n        utils.arraySet(output, input, next, copy, put);\n        //---//\n        have -= copy;\n        next += copy;\n        left -= copy;\n        put += copy;\n        state.length -= copy;\n        break;\n      }\n      //Tracev((stderr, \"inflate:       stored end\\n\"));\n      state.mode = TYPE;\n      break;\n    case TABLE:\n      //=== NEEDBITS(14); */\n      while (bits < 14) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n      //--- DROPBITS(5) ---//\n      hold >>>= 5;\n      bits -= 5;\n      //---//\n      state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n      //--- DROPBITS(5) ---//\n      hold >>>= 5;\n      bits -= 5;\n      //---//\n      state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n      //--- DROPBITS(4) ---//\n      hold >>>= 4;\n      bits -= 4;\n      //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n      if (state.nlen > 286 || state.ndist > 30) {\n        strm.msg = 'too many length or distance symbols';\n        state.mode = BAD;\n        break;\n      }\n//#endif\n      //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n      state.have = 0;\n      state.mode = LENLENS;\n      /* falls through */\n    case LENLENS:\n      while (state.have < state.ncode) {\n        //=== NEEDBITS(3);\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n        //--- DROPBITS(3) ---//\n        hold >>>= 3;\n        bits -= 3;\n        //---//\n      }\n      while (state.have < 19) {\n        state.lens[order[state.have++]] = 0;\n      }\n      // We have separate tables & no pointers. 2 commented lines below not needed.\n      //state.next = state.codes;\n      //state.lencode = state.next;\n      // Switch to use dynamic table\n      state.lencode = state.lendyn;\n      state.lenbits = 7;\n\n      opts = { bits: state.lenbits };\n      ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n      state.lenbits = opts.bits;\n\n      if (ret) {\n        strm.msg = 'invalid code lengths set';\n        state.mode = BAD;\n        break;\n      }\n      //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n      state.have = 0;\n      state.mode = CODELENS;\n      /* falls through */\n    case CODELENS:\n      while (state.have < state.nlen + state.ndist) {\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_val < 16) {\n          //--- DROPBITS(here.bits) ---//\n          hold >>>= here_bits;\n          bits -= here_bits;\n          //---//\n          state.lens[state.have++] = here_val;\n        }\n        else {\n          if (here_val === 16) {\n            //=== NEEDBITS(here.bits + 2);\n            n = here_bits + 2;\n            while (bits < n) {\n              if (have === 0) { break inf_leave; }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n            }\n            //===//\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            if (state.have === 0) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            len = state.lens[state.have - 1];\n            copy = 3 + (hold & 0x03);//BITS(2);\n            //--- DROPBITS(2) ---//\n            hold >>>= 2;\n            bits -= 2;\n            //---//\n          }\n          else if (here_val === 17) {\n            //=== NEEDBITS(here.bits + 3);\n            n = here_bits + 3;\n            while (bits < n) {\n              if (have === 0) { break inf_leave; }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n            }\n            //===//\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            len = 0;\n            copy = 3 + (hold & 0x07);//BITS(3);\n            //--- DROPBITS(3) ---//\n            hold >>>= 3;\n            bits -= 3;\n            //---//\n          }\n          else {\n            //=== NEEDBITS(here.bits + 7);\n            n = here_bits + 7;\n            while (bits < n) {\n              if (have === 0) { break inf_leave; }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n            }\n            //===//\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            len = 0;\n            copy = 11 + (hold & 0x7f);//BITS(7);\n            //--- DROPBITS(7) ---//\n            hold >>>= 7;\n            bits -= 7;\n            //---//\n          }\n          if (state.have + copy > state.nlen + state.ndist) {\n            strm.msg = 'invalid bit length repeat';\n            state.mode = BAD;\n            break;\n          }\n          while (copy--) {\n            state.lens[state.have++] = len;\n          }\n        }\n      }\n\n      /* handle error breaks in while */\n      if (state.mode === BAD) { break; }\n\n      /* check for end-of-block code (better have one) */\n      if (state.lens[256] === 0) {\n        strm.msg = 'invalid code -- missing end-of-block';\n        state.mode = BAD;\n        break;\n      }\n\n      /* build code tables -- note: do not change the lenbits or distbits\n         values here (9 and 6) without reading the comments in inftrees.h\n         concerning the ENOUGH constants, which depend on those values */\n      state.lenbits = 9;\n\n      opts = { bits: state.lenbits };\n      ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n      // We have separate tables & no pointers. 2 commented lines below not needed.\n      // state.next_index = opts.table_index;\n      state.lenbits = opts.bits;\n      // state.lencode = state.next;\n\n      if (ret) {\n        strm.msg = 'invalid literal/lengths set';\n        state.mode = BAD;\n        break;\n      }\n\n      state.distbits = 6;\n      //state.distcode.copy(state.codes);\n      // Switch to use dynamic table\n      state.distcode = state.distdyn;\n      opts = { bits: state.distbits };\n      ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n      // We have separate tables & no pointers. 2 commented lines below not needed.\n      // state.next_index = opts.table_index;\n      state.distbits = opts.bits;\n      // state.distcode = state.next;\n\n      if (ret) {\n        strm.msg = 'invalid distances set';\n        state.mode = BAD;\n        break;\n      }\n      //Tracev((stderr, 'inflate:       codes ok\\n'));\n      state.mode = LEN_;\n      if (flush === Z_TREES) { break inf_leave; }\n      /* falls through */\n    case LEN_:\n      state.mode = LEN;\n      /* falls through */\n    case LEN:\n      if (have >= 6 && left >= 258) {\n        //--- RESTORE() ---\n        strm.next_out = put;\n        strm.avail_out = left;\n        strm.next_in = next;\n        strm.avail_in = have;\n        state.hold = hold;\n        state.bits = bits;\n        //---\n        inflate_fast(strm, _out);\n        //--- LOAD() ---\n        put = strm.next_out;\n        output = strm.output;\n        left = strm.avail_out;\n        next = strm.next_in;\n        input = strm.input;\n        have = strm.avail_in;\n        hold = state.hold;\n        bits = state.bits;\n        //---\n\n        if (state.mode === TYPE) {\n          state.back = -1;\n        }\n        break;\n      }\n      state.back = 0;\n      for (;;) {\n        here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n        here_bits = here >>> 24;\n        here_op = (here >>> 16) & 0xff;\n        here_val = here & 0xffff;\n\n        if (here_bits <= bits) { break; }\n        //--- PULLBYTE() ---//\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n        //---//\n      }\n      if (here_op && (here_op & 0xf0) === 0) {\n        last_bits = here_bits;\n        last_op = here_op;\n        last_val = here_val;\n        for (;;) {\n          here = state.lencode[last_val +\n                  ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((last_bits + here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        //--- DROPBITS(last.bits) ---//\n        hold >>>= last_bits;\n        bits -= last_bits;\n        //---//\n        state.back += last_bits;\n      }\n      //--- DROPBITS(here.bits) ---//\n      hold >>>= here_bits;\n      bits -= here_bits;\n      //---//\n      state.back += here_bits;\n      state.length = here_val;\n      if (here_op === 0) {\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        state.mode = LIT;\n        break;\n      }\n      if (here_op & 32) {\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.back = -1;\n        state.mode = TYPE;\n        break;\n      }\n      if (here_op & 64) {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break;\n      }\n      state.extra = here_op & 15;\n      state.mode = LENEXT;\n      /* falls through */\n    case LENEXT:\n      if (state.extra) {\n        //=== NEEDBITS(state.extra);\n        n = state.extra;\n        while (bits < n) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n        //--- DROPBITS(state.extra) ---//\n        hold >>>= state.extra;\n        bits -= state.extra;\n        //---//\n        state.back += state.extra;\n      }\n      //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n      state.was = state.length;\n      state.mode = DIST;\n      /* falls through */\n    case DIST:\n      for (;;) {\n        here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n        here_bits = here >>> 24;\n        here_op = (here >>> 16) & 0xff;\n        here_val = here & 0xffff;\n\n        if ((here_bits) <= bits) { break; }\n        //--- PULLBYTE() ---//\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n        //---//\n      }\n      if ((here_op & 0xf0) === 0) {\n        last_bits = here_bits;\n        last_op = here_op;\n        last_val = here_val;\n        for (;;) {\n          here = state.distcode[last_val +\n                  ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((last_bits + here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        //--- DROPBITS(last.bits) ---//\n        hold >>>= last_bits;\n        bits -= last_bits;\n        //---//\n        state.back += last_bits;\n      }\n      //--- DROPBITS(here.bits) ---//\n      hold >>>= here_bits;\n      bits -= here_bits;\n      //---//\n      state.back += here_bits;\n      if (here_op & 64) {\n        strm.msg = 'invalid distance code';\n        state.mode = BAD;\n        break;\n      }\n      state.offset = here_val;\n      state.extra = (here_op) & 15;\n      state.mode = DISTEXT;\n      /* falls through */\n    case DISTEXT:\n      if (state.extra) {\n        //=== NEEDBITS(state.extra);\n        n = state.extra;\n        while (bits < n) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n        //--- DROPBITS(state.extra) ---//\n        hold >>>= state.extra;\n        bits -= state.extra;\n        //---//\n        state.back += state.extra;\n      }\n//#ifdef INFLATE_STRICT\n      if (state.offset > state.dmax) {\n        strm.msg = 'invalid distance too far back';\n        state.mode = BAD;\n        break;\n      }\n//#endif\n      //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n      state.mode = MATCH;\n      /* falls through */\n    case MATCH:\n      if (left === 0) { break inf_leave; }\n      copy = _out - left;\n      if (state.offset > copy) {         /* copy from window */\n        copy = state.offset - copy;\n        if (copy > state.whave) {\n          if (state.sane) {\n            strm.msg = 'invalid distance too far back';\n            state.mode = BAD;\n            break;\n          }\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n        }\n        if (copy > state.wnext) {\n          copy -= state.wnext;\n          from = state.wsize - copy;\n        }\n        else {\n          from = state.wnext - copy;\n        }\n        if (copy > state.length) { copy = state.length; }\n        from_source = state.window;\n      }\n      else {                              /* copy from output */\n        from_source = output;\n        from = put - state.offset;\n        copy = state.length;\n      }\n      if (copy > left) { copy = left; }\n      left -= copy;\n      state.length -= copy;\n      do {\n        output[put++] = from_source[from++];\n      } while (--copy);\n      if (state.length === 0) { state.mode = LEN; }\n      break;\n    case LIT:\n      if (left === 0) { break inf_leave; }\n      output[put++] = state.length;\n      left--;\n      state.mode = LEN;\n      break;\n    case CHECK:\n      if (state.wrap) {\n        //=== NEEDBITS(32);\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          // Use '|' insdead of '+' to make sure that result is signed\n          hold |= input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        _out -= left;\n        strm.total_out += _out;\n        state.total += _out;\n        if (_out) {\n          strm.adler = state.check =\n              /*UPDATE(state.check, put - _out, _out);*/\n              (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n        }\n        _out = left;\n        // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n        if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n          strm.msg = 'incorrect data check';\n          state.mode = BAD;\n          break;\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n      }\n      state.mode = LENGTH;\n      /* falls through */\n    case LENGTH:\n      if (state.wrap && state.flags) {\n        //=== NEEDBITS(32);\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (hold !== (state.total & 0xffffffff)) {\n          strm.msg = 'incorrect length check';\n          state.mode = BAD;\n          break;\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n      }\n      state.mode = DONE;\n      /* falls through */\n    case DONE:\n      ret = Z_STREAM_END;\n      break inf_leave;\n    case BAD:\n      ret = Z_DATA_ERROR;\n      break inf_leave;\n    case MEM:\n      return Z_MEM_ERROR;\n    case SYNC:\n      /* falls through */\n    default:\n      return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  var state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var state;\n  var dictid;\n  var ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n\n},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n  var bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  var len = 0;               /* a code's length in bits */\n  var sym = 0;               /* index of code symbols */\n  var min = 0, max = 0;          /* minimum and maximum code lengths */\n  var root = 0;              /* number of index bits for root table */\n  var curr = 0;              /* number of index bits for current table */\n  var drop = 0;              /* code bits to drop for sub-table */\n  var left = 0;                   /* number of prefix codes available */\n  var used = 0;              /* code entries in table used */\n  var huff = 0;              /* Huffman code */\n  var incr;              /* for incrementing code, index */\n  var fill;              /* index for replicating entries */\n  var low;               /* low bits for current root entry */\n  var mask;              /* mask for low root bits */\n  var next;             /* next available space in table */\n  var base = null;     /* base value table to use */\n  var base_index = 0;\n//  var shoextra;    /* extra bits table to use */\n  var end;                    /* use base and extra for symbol > end */\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  var extra = null;\n  var extra_index = 0;\n\n  var here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n\n},{\"../utils/common\":41}],51:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n},{}],52:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\nvar Z_FIXED               = 4;\n//var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY              = 0;\nvar Z_TEXT                = 1;\n//var Z_ASCII             = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES    = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH    = 3;\nvar MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES       = 30;\n/* number of distance codes */\n\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK   = 256;\n/* end of block literal code */\n\nvar REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits =   /* extra bits for each length code */\n  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits =   /* extra bits for each distance code */\n  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits =  /* extra bits for each bit length code */\n  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n  var res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nfunction gen_bitlen(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree            = desc.dyn_tree;\n  var max_code        = desc.max_code;\n  var stree           = desc.stat_desc.static_tree;\n  var has_stree       = desc.stat_desc.has_stree;\n  var extra           = desc.stat_desc.extra_bits;\n  var base            = desc.stat_desc.extra_base;\n  var max_length      = desc.stat_desc.max_length;\n  var h;              /* heap index */\n  var n, m;           /* iterate over the tree elements */\n  var bits;           /* bit length */\n  var xbits;          /* extra bits */\n  var f;              /* frequency */\n  var overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  var code = 0;              /* running code value */\n  var bits;                  /* bit index */\n  var n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    var len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n  var n;        /* iterates over tree elements */\n  var bits;     /* bit counter */\n  var length;   /* length value */\n  var code;     /* code value */\n  var dist;     /* distance index */\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n  var n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n  var _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;           /* distance of matched string */\n  var lc;             /* match length or unmatched char (if dist == 0) */\n  var lx = 0;         /* running index in l_buf */\n  var code;           /* the code to send */\n  var extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree     = desc.dyn_tree;\n  var stree    = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems    = desc.stat_desc.elems;\n  var n, m;          /* iterate over heap elements */\n  var max_code = -1; /* largest code with non zero frequency */\n  var node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n  var max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  var max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init  = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block  = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n\n},{\"../utils/common\":41}],53:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n\n},{}],54:[function(require,module,exports){\n(function (global){\n(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6–8\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}]},{},[10])(10)\n});"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/css/keyTable.bootstrap.css",
    "content": "table.dataTable tbody th.focus,\ntable.dataTable tbody td.focus {\n  outline: 2px solid #337ab7;\n  outline-offset: -2px;\n}\ntable.dataTable tbody tr.selected th.focus,\ntable.dataTable tbody tr.selected td.focus {\n  outline-color: #1d4567;\n}\n\ndiv.dtk-focus-alt table.dataTable tbody th.focus,\ndiv.dtk-focus-alt table.dataTable tbody td.focus {\n  outline: 2px solid #ff8b33;\n  outline-offset: -2px;\n}\n\nhtml.dark table.dataTable tbody th.focus,\nhtml.dark table.dataTable tbody td.focus {\n  outline-color: rgb(13, 110, 253);\n}\nhtml.dark table.dataTable tbody tr.selected th.focus,\nhtml.dark table.dataTable tbody tr.selected td.focus {\n  outline-color: #0143a3;\n}\nhtml.dark div.dtk-focus-alt table.dataTable tbody th.focus,\nhtml.dark div.dtk-focus-alt table.dataTable tbody td.focus {\n  outline-color: #ff8b33;\n}\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/css/keyTable.bootstrap4.css",
    "content": "table.dataTable tbody th.focus,\ntable.dataTable tbody td.focus {\n  outline: 2px solid #0275d8;\n  outline-offset: -2px;\n}\ntable.dataTable tbody tr.selected th.focus,\ntable.dataTable tbody tr.selected td.focus {\n  outline-color: #013e73;\n}\n\ndiv.dtk-focus-alt table.dataTable tbody th.focus,\ndiv.dtk-focus-alt table.dataTable tbody td.focus {\n  outline: 2px solid #ff8b33;\n  outline-offset: -2px;\n}\n\nhtml.dark table.dataTable tbody th.focus,\nhtml.dark table.dataTable tbody td.focus {\n  outline-color: rgb(13, 110, 253);\n}\nhtml.dark table.dataTable tbody tr.selected th.focus,\nhtml.dark table.dataTable tbody tr.selected td.focus {\n  outline-color: #0143a3;\n}\nhtml.dark div.dtk-focus-alt table.dataTable tbody th.focus,\nhtml.dark div.dtk-focus-alt table.dataTable tbody td.focus {\n  outline-color: #ff8b33;\n}\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/css/keyTable.bootstrap5.css",
    "content": "table.dataTable tbody th.focus,\ntable.dataTable tbody td.focus {\n  outline: 2px solid #0d6efd;\n  outline-offset: -2px;\n}\ntable.dataTable tbody tr.selected th.focus,\ntable.dataTable tbody tr.selected td.focus {\n  outline-color: #0143a3;\n}\n\ndiv.dtk-focus-alt table.dataTable tbody th.focus,\ndiv.dtk-focus-alt table.dataTable tbody td.focus {\n  outline: 2px solid #ff8b33;\n  outline-offset: -2px;\n}\n\nhtml.dark table.dataTable tbody th.focus,\nhtml.dark table.dataTable tbody td.focus {\n  outline-color: rgb(13, 110, 253);\n}\nhtml.dark table.dataTable tbody tr.selected th.focus,\nhtml.dark table.dataTable tbody tr.selected td.focus {\n  outline-color: #0143a3;\n}\nhtml.dark div.dtk-focus-alt table.dataTable tbody th.focus,\nhtml.dark div.dtk-focus-alt table.dataTable tbody td.focus {\n  outline-color: #ff8b33;\n}\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/css/keyTable.bulma.css",
    "content": "table.dataTable tbody th.focus,\ntable.dataTable tbody td.focus {\n  outline: 2px solid #00D1B2;\n  outline-offset: -2px;\n}\ntable.dataTable tbody tr.selected th.focus,\ntable.dataTable tbody tr.selected td.focus {\n  outline-color: #006b5b;\n}\n\ndiv.dtk-focus-alt table.dataTable tbody th.focus,\ndiv.dtk-focus-alt table.dataTable tbody td.focus {\n  outline: 2px solid #ff8b33;\n  outline-offset: -2px;\n}\n\nhtml.dark table.dataTable tbody th.focus,\nhtml.dark table.dataTable tbody td.focus {\n  outline-color: rgb(13, 110, 253);\n}\nhtml.dark table.dataTable tbody tr.selected th.focus,\nhtml.dark table.dataTable tbody tr.selected td.focus {\n  outline-color: #0143a3;\n}\nhtml.dark div.dtk-focus-alt table.dataTable tbody th.focus,\nhtml.dark div.dtk-focus-alt table.dataTable tbody td.focus {\n  outline-color: #ff8b33;\n}\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/css/keyTable.dataTables.css",
    "content": "table.dataTable tbody th.focus,\ntable.dataTable tbody td.focus {\n  outline: 2px solid #3366ff;\n  outline-offset: -2px;\n}\ntable.dataTable tbody tr.selected th.focus,\ntable.dataTable tbody tr.selected td.focus {\n  outline-color: #0033cc;\n}\n\ndiv.dtk-focus-alt table.dataTable tbody th.focus,\ndiv.dtk-focus-alt table.dataTable tbody td.focus {\n  outline: 2px solid #ff8b33;\n  outline-offset: -2px;\n}\n\nhtml.dark table.dataTable tbody th.focus,\nhtml.dark table.dataTable tbody td.focus {\n  outline-color: rgb(13, 110, 253);\n}\nhtml.dark table.dataTable tbody tr.selected th.focus,\nhtml.dark table.dataTable tbody tr.selected td.focus {\n  outline-color: #0143a3;\n}\nhtml.dark div.dtk-focus-alt table.dataTable tbody th.focus,\nhtml.dark div.dtk-focus-alt table.dataTable tbody td.focus {\n  outline-color: #ff8b33;\n}\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/css/keyTable.foundation.css",
    "content": "table.dataTable tbody th.focus,\ntable.dataTable tbody td.focus {\n  outline: 2px solid #008CBA;\n  outline-offset: -2px;\n}\ntable.dataTable tbody tr.selected th.focus,\ntable.dataTable tbody tr.selected td.focus {\n  outline-color: #003f54;\n}\n\ndiv.dtk-focus-alt table.dataTable tbody th.focus,\ndiv.dtk-focus-alt table.dataTable tbody td.focus {\n  outline: 2px solid #ff8b33;\n  outline-offset: -2px;\n}\n\nhtml.dark table.dataTable tbody th.focus,\nhtml.dark table.dataTable tbody td.focus {\n  outline-color: rgb(13, 110, 253);\n}\nhtml.dark table.dataTable tbody tr.selected th.focus,\nhtml.dark table.dataTable tbody tr.selected td.focus {\n  outline-color: #0143a3;\n}\nhtml.dark div.dtk-focus-alt table.dataTable tbody th.focus,\nhtml.dark div.dtk-focus-alt table.dataTable tbody td.focus {\n  outline-color: #ff8b33;\n}\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/css/keyTable.jqueryui.css",
    "content": "table.dataTable tbody th.focus,\ntable.dataTable tbody td.focus {\n  outline: 2px solid #3366ff;\n  outline-offset: -2px;\n}\ntable.dataTable tbody tr.selected th.focus,\ntable.dataTable tbody tr.selected td.focus {\n  outline-color: #0033cc;\n}\n\ndiv.dtk-focus-alt table.dataTable tbody th.focus,\ndiv.dtk-focus-alt table.dataTable tbody td.focus {\n  outline: 2px solid #ff8b33;\n  outline-offset: -2px;\n}\n\nhtml.dark table.dataTable tbody th.focus,\nhtml.dark table.dataTable tbody td.focus {\n  outline-color: rgb(13, 110, 253);\n}\nhtml.dark table.dataTable tbody tr.selected th.focus,\nhtml.dark table.dataTable tbody tr.selected td.focus {\n  outline-color: #0143a3;\n}\nhtml.dark div.dtk-focus-alt table.dataTable tbody th.focus,\nhtml.dark div.dtk-focus-alt table.dataTable tbody td.focus {\n  outline-color: #ff8b33;\n}\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/css/keyTable.semanticui.css",
    "content": "table.dataTable tbody th.focus,\ntable.dataTable tbody td.focus {\n  outline: 2px solid #888;\n  outline-offset: -2px;\n}\ntable.dataTable tbody tr.selected th.focus,\ntable.dataTable tbody tr.selected td.focus {\n  outline-color: #555555;\n}\n\ndiv.dtk-focus-alt table.dataTable tbody th.focus,\ndiv.dtk-focus-alt table.dataTable tbody td.focus {\n  outline: 2px solid #ff8b33;\n  outline-offset: -2px;\n}\n\nhtml.dark table.dataTable tbody th.focus,\nhtml.dark table.dataTable tbody td.focus {\n  outline-color: rgb(13, 110, 253);\n}\nhtml.dark table.dataTable tbody tr.selected th.focus,\nhtml.dark table.dataTable tbody tr.selected td.focus {\n  outline-color: #0143a3;\n}\nhtml.dark div.dtk-focus-alt table.dataTable tbody th.focus,\nhtml.dark div.dtk-focus-alt table.dataTable tbody td.focus {\n  outline-color: #ff8b33;\n}\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/js/dataTables.keyTable.js",
    "content": "/*! KeyTable 2.11.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     KeyTable\n * @description Spreadsheet like keyboard navigation for DataTables\n * @version     2.11.0\n * @file        dataTables.keyTable.js\n * @author      SpryMedia Ltd\n * @contact     datatables.net\n * @copyright   Copyright SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\nvar namespaceCounter = 0;\nvar editorNamespaceCounter = 0;\n\nvar KeyTable = function (dt, opts) {\n\t// Sanity check that we are using DataTables 1.10 or newer\n\tif (!DataTable.versionCheck || !DataTable.versionCheck('1.10.8')) {\n\t\tthrow 'KeyTable requires DataTables 1.10.8 or newer';\n\t}\n\n\t// User and defaults configuration object\n\tthis.c = $.extend(true, {}, DataTable.defaults.keyTable, KeyTable.defaults, opts);\n\n\t// Internal settings\n\tthis.s = {\n\t\t/** @type {DataTable.Api} DataTables' API instance */\n\t\tdt: new DataTable.Api(dt),\n\n\t\t/** Indicate when the DataTable is redrawing - take no action on key presses */\n\t\tdtDrawing: false,\n\n\t\tenable: true,\n\n\t\t/** @type {bool} Flag for if a draw is triggered by focus */\n\t\tfocusDraw: false,\n\n\t\t/** @type {bool} Flag to indicate when waiting for a draw to happen.\n\t\t *   Will ignore key presses at this point\n\t\t */\n\t\twaitingForDraw: false,\n\n\t\t/** @type {object} Information about the last cell that was focused */\n\t\tlastFocus: null,\n\n\t\t/** @type {string} Unique namespace per instance */\n\t\tnamespace: '.keyTable-' + namespaceCounter++,\n\n\t\t/** @type {Node} Input element for tabbing into the table */\n\t\ttabInput: null\n\t};\n\n\t// DOM items\n\tthis.dom = {};\n\n\t// Check if row reorder has already been initialised on this table\n\tvar settings = this.s.dt.settings()[0];\n\tvar exisiting = settings.keytable;\n\tif (exisiting) {\n\t\treturn exisiting;\n\t}\n\n\tsettings.keytable = this;\n\tthis._constructor();\n};\n\n$.extend(KeyTable.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * API methods for DataTables API interface\n\t */\n\n\t/**\n\t * Blur the table's cell focus\n\t */\n\tblur: function () {\n\t\tthis._blur();\n\t},\n\n\t/**\n\t * Enable cell focus for the table\n\t *\n\t * @param  {string} state Can be `true`, `false` or `-string navigation-only`\n\t */\n\tenable: function (state) {\n\t\tthis.s.enable = state;\n\t},\n\n\t/**\n\t * Get enable status\n\t */\n\tenabled: function () {\n\t\treturn this.s.enable;\n\t},\n\n\t/**\n\t * Focus on a cell\n\t * @param  {integer} row    Row index\n\t * @param  {integer} column Column index\n\t */\n\tfocus: function (row, column) {\n\t\tthis._focus(this.s.dt.cell(row, column));\n\t},\n\n\t/**\n\t * Is the cell focused\n\t * @param  {object} cell Cell index to check\n\t * @returns {boolean} true if focused, false otherwise\n\t */\n\tfocused: function (cell) {\n\t\tvar lastFocus = this.s.lastFocus;\n\n\t\tif (!lastFocus) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar lastIdx = this.s.lastFocus.cell.index();\n\t\treturn cell.row === lastIdx.row && cell.column === lastIdx.column;\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialise the KeyTable instance\n\t *\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tthis._tabInput();\n\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar table = $(dt.table().node());\n\t\tvar namespace = this.s.namespace;\n\t\tvar editorBlock = false;\n\n\t\t// Need to be able to calculate the cell positions relative to the table\n\t\tif (table.css('position') === 'static') {\n\t\t\ttable.css('position', 'relative');\n\t\t}\n\n\t\t// Click to focus\n\t\t$(dt.table().body()).on('click' + namespace, 'th, td', function (e) {\n\t\t\tif (that.s.enable === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar cell = dt.cell(this);\n\n\t\t\tif (!cell.any()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthat._focus(cell, null, false, e);\n\t\t});\n\n\t\t// Key events\n\t\t$(document).on('keydown' + namespace, function (e) {\n\t\t\tif (!editorBlock && !that.s.dtDrawing) {\n\t\t\t\tthat._key(e);\n\t\t\t}\n\t\t\telse {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\t// Click blur\n\t\tif (this.c.blurable) {\n\t\t\t$(document).on('mousedown' + namespace, function (e) {\n\t\t\t\t// Click on the search input will blur focus\n\t\t\t\tif ($(e.target).parents('.dataTables_filter, .dt-search').length) {\n\t\t\t\t\tthat._blur();\n\t\t\t\t}\n\n\t\t\t\t// If the click was inside the DataTables container, don't blur\n\t\t\t\tif ($(e.target).parents().filter(dt.table().container()).length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Don't blur in Editor form\n\t\t\t\tif ($(e.target).parents('div.DTE').length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Or an Editor date input\n\t\t\t\tif (\n\t\t\t\t\t$(e.target).parents('div.editor-datetime').length ||\n\t\t\t\t\t$(e.target).parents('div.dt-datetime').length\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//If the click was inside the fixed columns container, don't blur\n\t\t\t\tif ($(e.target).parents().filter('.DTFC_Cloned').length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthat._blur();\n\t\t\t});\n\t\t}\n\n\t\tif (this.c.editor) {\n\t\t\tvar editor = this.c.editor;\n\n\t\t\t// Need to disable KeyTable when the main editor is shown\n\t\t\teditor.on('open.keyTableMain', function (e, mode, action) {\n\t\t\t\tif (mode !== 'inline' && that.s.enable) {\n\t\t\t\t\tthat.enable(false);\n\n\t\t\t\t\teditor.one('close' + namespace, function () {\n\t\t\t\t\t\tthat.enable(true);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (this.c.editOnFocus) {\n\t\t\t\tdt.on(\n\t\t\t\t\t'key-focus' + namespace + ' key-refocus' + namespace,\n\t\t\t\t\tfunction (e, dt, cell, orig) {\n\t\t\t\t\t\tthat._editor(null, orig, true);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Activate Editor when a key is pressed (will be ignored, if\n\t\t\t// already active).\n\t\t\tdt.on('key' + namespace, function (e, dt, key, cell, orig) {\n\t\t\t\tthat._editor(key, orig, false);\n\t\t\t});\n\n\t\t\t// Active editing on double click - it will already have focus from\n\t\t\t// the click event handler above\n\t\t\t$(dt.table().body()).on('dblclick' + namespace, 'th, td', function (e) {\n\t\t\t\tif (that.s.enable === false) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar cell = dt.cell(this);\n\n\t\t\t\tif (!cell.any()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (that.s.lastFocus && this !== that.s.lastFocus.cell.node()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthat._editor(null, e, true);\n\t\t\t});\n\n\t\t\t// While Editor is busy processing, we don't want to process any key events\n\t\t\teditor\n\t\t\t\t.on('preSubmit', function () {\n\t\t\t\t\teditorBlock = true;\n\t\t\t\t})\n\t\t\t\t.on('preSubmitCancelled', function () {\n\t\t\t\t\teditorBlock = false;\n\t\t\t\t})\n\t\t\t\t.on('submitComplete', function () {\n\t\t\t\t\teditorBlock = false;\n\t\t\t\t});\n\t\t}\n\n\t\t// Stave saving\n\t\t// if ( dt.settings()[0].oFeatures.bStateSave ) {\n\t\tdt.on('stateSaveParams' + namespace, function (e, s, d) {\n\t\t\td.keyTable = that.s.lastFocus ? that.s.lastFocus.cell.index() : null;\n\t\t});\n\t\t// }\n\n\t\tdt.on('column-visibility' + namespace, function (e) {\n\t\t\tthat._tabInput();\n\t\t});\n\n\t\tdt.on('column-reorder' + namespace, function (e, s, d) {\n\t\t\t// Need to update the last focus cell's index\n\t\t\tvar lastFocus = that.s.lastFocus;\n\n\t\t\tif (lastFocus && lastFocus.cell) {\n\t\t\t\tvar curr = lastFocus.relative.column;\n\n\t\t\t\t// Manipulate the API instance to correct the column index\n\t\t\t\tlastFocus.cell[0][0].column = d.mapping.indexOf(curr);\n\t\t\t\tlastFocus.relative.column = d.mapping.indexOf(curr);\n\t\t\t}\n\t\t});\n\n\t\t// When the table is about to do a draw we need to block key\n\t\t// handling. This is only important for async draws - i.e.\n\t\t// server-side processing.\n\t\tdt.on('preDraw' + namespace + ' scroller-will-draw' + namespace, function (e) {\n\t\t\tthat.s.dtDrawing = true;\n\t\t});\n\n\t\t// Redraw - retain focus on the current cell\n\t\tdt.on('draw' + namespace, function (e) {\n\t\t\tthat.s.dtDrawing = false;\n\n\t\t\tthat._tabInput();\n\n\t\t\tif (that.s.focusDraw) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar lastFocus = that.s.lastFocus;\n\n\t\t\tif (lastFocus) {\n\t\t\t\tvar relative = that.s.lastFocus.relative;\n\t\t\t\tvar info = dt.page.info();\n\t\t\t\tvar row = relative.row;\n\n\t\t\t\tif (info.recordsDisplay === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If the refocus is outside the current draw zone -\n\t\t\t\t// don't attempt to refocus onto it\n\t\t\t\tif (row < info.start || row > info.start + info.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Reverse if needed\n\t\t\t\tif (row >= info.recordsDisplay) {\n\t\t\t\t\trow = info.recordsDisplay - 1;\n\t\t\t\t}\n\n\t\t\t\tthat._focus(row, relative.column, true, e);\n\t\t\t}\n\t\t});\n\n\t\t// Clipboard support\n\t\tif (this.c.clipboard) {\n\t\t\tthis._clipboard();\n\t\t}\n\n\t\tdt.on('destroy' + namespace, function () {\n\t\t\tthat._blur(true);\n\n\t\t\t// Event tidy up\n\t\t\tdt.off(namespace);\n\n\t\t\t$(dt.table().body())\n\t\t\t\t.off('click' + namespace, 'th, td')\n\t\t\t\t.off('dblclick' + namespace, 'th, td');\n\n\t\t\t$(document)\n\t\t\t\t.off('mousedown' + namespace)\n\t\t\t\t.off('keydown' + namespace)\n\t\t\t\t.off('copy' + namespace)\n\t\t\t\t.off('paste' + namespace);\n\t\t});\n\n\t\t// Initial focus comes from state or options\n\t\tvar state = dt.state.loaded();\n\n\t\tif (state && state.keyTable) {\n\t\t\t// Wait until init is done\n\t\t\tdt.one('init', function () {\n\t\t\t\tvar cell = dt.cell(state.keyTable);\n\n\t\t\t\t// Ensure that the saved cell still exists\n\t\t\t\tif (cell.any()) {\n\t\t\t\t\tcell.focus();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse if (this.c.focus) {\n\t\t\tdt.cell(this.c.focus).focus();\n\t\t}\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Blur the control\n\t *\n\t * @param {boolean} [noEvents=false] Don't trigger updates / events (for destroying)\n\t * @private\n\t */\n\t_blur: function (noEvents) {\n\t\tif (!this.s.enable || !this.s.lastFocus) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar cell = this.s.lastFocus.cell;\n\n\t\t$(cell.node()).removeClass(this.c.className);\n\t\tthis.s.lastFocus = null;\n\n\t\tif (!noEvents) {\n\t\t\tthis._updateFixedColumns(cell.index().column);\n\n\t\t\tthis._emitEvent('key-blur', [this.s.dt, cell]);\n\t\t}\n\t},\n\n\t/**\n\t * Clipboard interaction handlers\n\t *\n\t * @private\n\t */\n\t_clipboard: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar that = this;\n\t\tvar namespace = this.s.namespace;\n\n\t\t// IE8 doesn't support getting selected text\n\t\tif (!window.getSelection) {\n\t\t\treturn;\n\t\t}\n\n\t\t$(document).on('copy' + namespace, function (ejq) {\n\t\t\tvar e = ejq.originalEvent;\n\t\t\tvar selection = window.getSelection().toString();\n\t\t\tvar focused = that.s.lastFocus;\n\n\t\t\t// Only copy cell text to clipboard if there is no other selection\n\t\t\t// and there is a focused cell\n\t\t\tif (!selection && focused) {\n\t\t\t\te.clipboardData.setData(\n\t\t\t\t\t'text/plain',\n\t\t\t\t\tfocused.cell.render(that.c.clipboardOrthogonal)\n\t\t\t\t);\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('paste' + namespace, function (ejq) {\n\t\t\tvar e = ejq.originalEvent;\n\t\t\tvar focused = that.s.lastFocus;\n\t\t\tvar activeEl = document.activeElement;\n\t\t\tvar editor = that.c.editor;\n\t\t\tvar pastedText;\n\n\t\t\tif (focused && (!activeEl || activeEl.nodeName.toLowerCase() === 'body')) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (window.clipboardData && window.clipboardData.getData) {\n\t\t\t\t\t// IE\n\t\t\t\t\tpastedText = window.clipboardData.getData('Text');\n\t\t\t\t}\n\t\t\t\telse if (e.clipboardData && e.clipboardData.getData) {\n\t\t\t\t\t// Everything else\n\t\t\t\t\tpastedText = e.clipboardData.getData('text/plain');\n\t\t\t\t}\n\n\t\t\t\tif (editor) {\n\t\t\t\t\t// Got Editor - need to activate inline editing,\n\t\t\t\t\t// set the value and submit\n\t\t\t\t\tvar options = that._inlineOptions(focused.cell.index());\n\n\t\t\t\t\teditor\n\t\t\t\t\t\t.inline(options.cell, options.field, options.options)\n\t\t\t\t\t\t.set(editor.displayed()[0], pastedText)\n\t\t\t\t\t\t.submit();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// No editor, so just dump the data in\n\t\t\t\t\tfocused.cell.data(pastedText);\n\t\t\t\t\tdt.draw(false);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Get an array of the column indexes that KeyTable can operate on. This\n\t * is a merge of the user supplied columns and the visible columns.\n\t *\n\t * @private\n\t */\n\t_columns: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar user = dt.columns(this.c.columns).indexes();\n\t\tvar out = [];\n\n\t\tdt.columns(':visible').every(function (i) {\n\t\t\tif (user.indexOf(i) !== -1) {\n\t\t\t\tout.push(i);\n\t\t\t}\n\t\t});\n\n\t\treturn out;\n\t},\n\n\t/**\n\t * Perform excel like navigation for Editor by triggering an edit on key\n\t * press\n\t *\n\t * @param  {integer} key Key code for the pressed key\n\t * @param  {object} orig Original event\n\t * @private\n\t */\n\t_editor: function (key, orig, hardEdit) {\n\t\t// If nothing focused, we can't take any action\n\t\tif (!this.s.lastFocus) {\n\t\t\treturn;\n\t\t}\n\n\t\t// DataTables draw event\n\t\tif (orig && orig.type === 'draw') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar editor = this.c.editor;\n\t\tvar editCell = this.s.lastFocus.cell;\n\t\tvar namespace = this.s.namespace + 'e' + editorNamespaceCounter++;\n\n\t\t// Do nothing if there is already an inline edit in this cell\n\t\tif ($('div.DTE', editCell.node()).length) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Don't activate Editor on control key presses\n\t\tif (\n\t\t\tkey !== null &&\n\t\t\t((key >= 0x00 && key <= 0x09) ||\n\t\t\t\tkey === 0x0b ||\n\t\t\t\tkey === 0x0c ||\n\t\t\t\t(key >= 0x0e && key <= 0x1f) ||\n\t\t\t\t(key >= 0x70 && key <= 0x7b) ||\n\t\t\t\t(key >= 0x7f && key <= 0x9f))\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (orig) {\n\t\t\torig.stopPropagation();\n\n\t\t\t// Return key should do nothing - for textareas it would empty the\n\t\t\t// contents\n\t\t\tif (key === 13) {\n\t\t\t\torig.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tvar editInline = function () {\n\t\t\tvar options = that._inlineOptions(editCell.index());\n\n\t\t\teditor\n\t\t\t\t.one('open' + namespace, function () {\n\t\t\t\t\t// Remove cancel open\n\t\t\t\t\teditor.off('cancelOpen' + namespace);\n\n\t\t\t\t\t// Excel style - select all text\n\t\t\t\t\tif (!hardEdit) {\n\t\t\t\t\t\t$(\n\t\t\t\t\t\t\t'div.DTE_Field_InputControl input, div.DTE_Field_InputControl textarea'\n\t\t\t\t\t\t).select();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reduce the keys the Keys listens for\n\t\t\t\t\tdt.keys.enable(hardEdit ? 'tab-only' : 'navigation-only');\n\n\t\t\t\t\t// On blur of the navigation submit\n\t\t\t\t\tdt.on('key-blur.editor', function (e, dt, cell) {\n\t\t\t\t\t\t// When Editor has its own blur enabled - do nothing here\n\t\t\t\t\t\tif (editor.s.editOpts.onBlur === 'submit') {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (editor.displayed() && cell.node() === editCell.node()) {\n\t\t\t\t\t\t\teditor.submit();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// Highlight the cell a different colour on full edit\n\t\t\t\t\tif (hardEdit) {\n\t\t\t\t\t\t$(dt.table().container()).addClass('dtk-focus-alt');\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the dev cancels the submit, we need to return focus\n\t\t\t\t\teditor.on('preSubmitCancelled' + namespace, function () {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tthat._focus(editCell, null, false);\n\t\t\t\t\t\t}, 50);\n\t\t\t\t\t});\n\n\t\t\t\t\teditor.on('submitUnsuccessful' + namespace, function () {\n\t\t\t\t\t\tthat._focus(editCell, null, false);\n\t\t\t\t\t});\n\n\t\t\t\t\t// Restore full key navigation on close\n\t\t\t\t\teditor.one('close' + namespace, function () {\n\t\t\t\t\t\tdt.keys.enable(true);\n\t\t\t\t\t\tdt.off('key-blur.editor');\n\t\t\t\t\t\teditor.off(namespace);\n\t\t\t\t\t\t$(dt.table().container()).removeClass('dtk-focus-alt');\n\n\t\t\t\t\t\tif (that.s.returnSubmit) {\n\t\t\t\t\t\t\tthat.s.returnSubmit = false;\n\t\t\t\t\t\t\tthat._emitEvent('key-return-submit', [dt, editCell]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.one('cancelOpen' + namespace, function () {\n\t\t\t\t\t// `preOpen` can cancel the display of the form, so it\n\t\t\t\t\t// might be that the open event handler isn't needed\n\t\t\t\t\teditor.off(namespace);\n\t\t\t\t})\n\t\t\t\t.inline(options.cell, options.field, options.options);\n\t\t};\n\n\t\t// Editor 1.7 listens for `return` on keyup, so if return is the trigger\n\t\t// key, we need to wait for `keyup` otherwise Editor would just submit\n\t\t// the content triggered by this keypress.\n\t\tif (key === 13) {\n\t\t\thardEdit = true;\n\n\t\t\t$(document).one('keyup', function () {\n\t\t\t\t// immediately removed\n\t\t\t\teditInline();\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\teditInline();\n\t\t}\n\t},\n\n\t_inlineOptions: function (cellIdx) {\n\t\tif (this.c.editorOptions) {\n\t\t\treturn this.c.editorOptions(cellIdx);\n\t\t}\n\n\t\treturn {\n\t\t\tcell: cellIdx,\n\t\t\tfield: undefined,\n\t\t\toptions: undefined\n\t\t};\n\t},\n\n\t/**\n\t * Emit an event on the DataTable for listeners\n\t *\n\t * @param  {string} name Event name\n\t * @param  {array} args Event arguments\n\t * @private\n\t */\n\t_emitEvent: function (name, args) {\n\t\treturn this.s.dt.iterator('table', function (ctx, i) {\n\t\t\treturn $(ctx.nTable).triggerHandler(name, args);\n\t\t});\n\t},\n\n\t/**\n\t * Focus on a particular cell, shifting the table's paging if required\n\t *\n\t * @param  {DataTables.Api|integer} row Can be given as an API instance that\n\t *   contains the cell to focus or as an integer. As the latter it is the\n\t *   visible row index (from the whole data set) - NOT the data index\n\t * @param  {integer} [column] Not required if a cell is given as the first\n\t *   parameter. Otherwise this is the column data index for the cell to\n\t *   focus on\n\t * @param {boolean} [shift=true] Should the viewport be moved to show cell\n\t * @private\n\t */\n\t_focus: function (row, column, shift, originalEvent) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar pageInfo = dt.page.info();\n\t\tvar lastFocus = this.s.lastFocus;\n\n\t\tif (!originalEvent) {\n\t\t\toriginalEvent = null;\n\t\t}\n\n\t\tif (!this.s.enable) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof row !== 'number') {\n\t\t\t// Its an API instance - check that there is actually a row\n\t\t\tif (!row.any()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Convert the cell to a row and column\n\t\t\tvar index = row.index();\n\t\t\tcolumn = index.column;\n\t\t\trow = dt.rows({ filter: 'applied', order: 'applied' }).indexes().indexOf(index.row);\n\n\t\t\t// Don't focus rows that were filtered out.\n\t\t\tif (row < 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For server-side processing normalise the row by adding the start\n\t\t\t// point, since `rows().indexes()` includes only rows that are\n\t\t\t// available at the client-side\n\t\t\tif (pageInfo.serverSide) {\n\t\t\t\trow += pageInfo.start;\n\t\t\t}\n\t\t}\n\n\t\t// Is the row on the current page? If not, we need to redraw to show the\n\t\t// page\n\t\tif (\n\t\t\tpageInfo.length !== -1 &&\n\t\t\t(row < pageInfo.start || row >= pageInfo.start + pageInfo.length)\n\t\t) {\n\t\t\tthis.s.focusDraw = true;\n\t\t\tthis.s.waitingForDraw = true;\n\n\t\t\tdt.one('draw', function () {\n\t\t\t\tthat.s.focusDraw = false;\n\t\t\t\tthat.s.waitingForDraw = false;\n\t\t\t\tthat._focus(row, column, undefined, originalEvent);\n\t\t\t})\n\t\t\t\t.page(Math.floor(row / pageInfo.length))\n\t\t\t\t.draw(false);\n\n\t\t\treturn;\n\t\t}\n\n\t\t// In the available columns?\n\t\tif ($.inArray(column, this._columns()) === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// De-normalise the server-side processing row, so we select the row\n\t\t// in its displayed position\n\t\tif (pageInfo.serverSide) {\n\t\t\trow -= pageInfo.start;\n\t\t}\n\n\t\t// Get the cell from the current position - ignoring any cells which might\n\t\t// not have been rendered (therefore can't use `:eq()` selector).\n\t\tvar cells = dt.cells(null, column, { search: 'applied', order: 'applied' }).flatten();\n\t\tvar cell = dt.cell(cells[row]);\n\n\t\t// Prefocus check - this event allows a focus action to be disallowed.\n\t\tvar preFocus = this._emitEvent('key-prefocus', [this.s.dt, cell, originalEvent || null]);\n\t\tif (preFocus.indexOf(false) !== -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (lastFocus) {\n\t\t\t// Don't trigger a refocus on the same cell\n\t\t\tif (lastFocus.node === cell.node()) {\n\t\t\t\tthis._emitEvent('key-refocus', [this.s.dt, cell, originalEvent || null]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Otherwise blur the old focus\n\t\t\tthis._blur();\n\t\t}\n\n\t\t// Clear focus from other tables\n\t\tthis._removeOtherFocus();\n\n\t\tvar node = $(cell.node());\n\t\tnode.addClass(this.c.className);\n\n\t\tthis._updateFixedColumns(column);\n\n\t\t// Shift viewpoint and page to make cell visible\n\t\tif (shift === undefined || shift === true) {\n\t\t\tthis._scroll($(window), $(document.body), node, 'offset');\n\n\t\t\tvar bodyParent = dt.table().body().parentNode;\n\t\t\tif (bodyParent !== dt.table().header().parentNode) {\n\t\t\t\tvar parent = $(bodyParent.parentNode);\n\n\t\t\t\tthis._scroll(parent, parent, node, 'position');\n\t\t\t}\n\t\t}\n\n\t\t// Event and finish\n\t\tvar info = dt.page.info();\n\n\t\tthis.s.lastFocus = {\n\t\t\tcell: cell,\n\t\t\tnode: cell.node(),\n\t\t\trelative: {\n\t\t\t\trow: info.start + dt.rows({ page: 'current' }).indexes().indexOf(cell.index().row),\n\t\t\t\tcolumn: cell.index().column\n\t\t\t}\n\t\t};\n\n\t\tthis._emitEvent('key-focus', [this.s.dt, cell, originalEvent || null]);\n\t\tdt.state.save();\n\t},\n\n\t/**\n\t * Handle key press\n\t *\n\t * @param  {object} e Event\n\t * @private\n\t */\n\t_key: function (e) {\n\t\t// If we are waiting for a draw to happen from another key event, then\n\t\t// do nothing for this new key press.\n\t\tif (this.s.waitingForDraw) {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore key presses in an Editor inline create row - it is not navigatable\n\t\t// by KeyTable\n\t\tif ($(e.target).closest('.dte-inlineAdd').length) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar enable = this.s.enable;\n\t\tthis.s.returnSubmit =\n\t\t\t(enable === 'navigation-only' || enable === 'tab-only') && e.keyCode === 13\n\t\t\t\t? true\n\t\t\t\t: false;\n\n\t\tvar navEnable = enable === true || enable === 'navigation-only';\n\t\tif (!enable) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ((e.keyCode === 0 || e.ctrlKey || e.metaKey || e.altKey) && !(e.ctrlKey && e.altKey)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If not focused, then there is no key action to take\n\t\tvar lastFocus = this.s.lastFocus;\n\t\tif (!lastFocus) {\n\t\t\treturn;\n\t\t}\n\n\t\t// And the last focus still exists!\n\t\tif (!this.s.dt.cell(lastFocus.node).any()) {\n\t\t\tthis.s.lastFocus = null;\n\t\t\treturn;\n\t\t}\n\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar scrolling = this.s.dt.settings()[0].oScroll.sY ? true : false;\n\n\t\t// If we are not listening for this key, do nothing\n\t\tif (this.c.keys && $.inArray(e.keyCode, this.c.keys) === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (e.keyCode) {\n\t\t\tcase 9: // tab\n\t\t\t\t// `enable` can be tab-only\n\t\t\t\te.preventDefault();\n\n\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\tthat._shift(e, e.shiftKey ? 'left' : 'right', true);\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 27: // esc\n\t\t\t\tif (this.c.blurable && enable === true) {\n\t\t\t\t\tthis._blur();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 33: // page up (previous page)\n\t\t\tcase 34: // page down (next page)\n\t\t\t\tif (navEnable && !scrolling) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\t\tdt.page(e.keyCode === 33 ? 'previous' : 'next').draw(false);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 35: // end (end of current page)\n\t\t\tcase 36: // home (start of current page)\n\t\t\t\tif (navEnable) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\t\tvar indexes = dt.cells({ page: 'current' }).indexes();\n\t\t\t\t\t\tvar colIndexes = that._columns();\n\n\t\t\t\t\t\tthat._focus(\n\t\t\t\t\t\t\tdt.cell(indexes[e.keyCode === 35 ? indexes.length - 1 : colIndexes[0]]),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\te\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 37: // left arrow\n\t\t\t\tif (navEnable) {\n\t\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\t\tthat._shift(e, 'left');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 38: // up arrow\n\t\t\t\tif (navEnable) {\n\t\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\t\tthat._shift(e, 'up');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 39: // right arrow\n\t\t\t\tif (navEnable) {\n\t\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\t\tthat._shift(e, 'right');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 40: // down arrow\n\t\t\t\tif (navEnable) {\n\t\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\t\tthat._shift(e, 'down');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 113: // F2 - Excel like hard edit\n\t\t\t\tif (this.c.editor) {\n\t\t\t\t\tthis._editor(null, e, true);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t// else fallthrough\n\n\t\t\tdefault:\n\t\t\t\t// Everything else - pass through only when fully enabled\n\t\t\t\tif (enable === true) {\n\t\t\t\t\tthis._emitEvent('key', [dt, e.keyCode, this.s.lastFocus.cell, e]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\t/**\n\t * Whether we perform a key shift action immediately or not depends\n\t * upon if Editor is being used. If it is, then we wait until it\n\t * completes its action\n\t * @param {*} action Function to trigger when ready\n\t */\n\t_keyAction: function (action) {\n\t\tvar editor = this.c.editor;\n\n\t\tif (editor && editor.mode()) {\n\t\t\teditor.submit(action);\n\t\t}\n\t\telse {\n\t\t\taction();\n\t\t}\n\t},\n\n\t/**\n\t * Remove focus from all tables other than this one\n\t */\n\t_removeOtherFocus: function () {\n\t\tvar thisTable = this.s.dt.table().node();\n\n\t\t$.fn.dataTable.tables({ api: true }).iterator('table', function (settings) {\n\t\t\tif (this.table().node() !== thisTable) {\n\t\t\t\tthis.cell.blur();\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Scroll a container to make a cell visible in it. This can be used for\n\t * both DataTables scrolling and native window scrolling.\n\t *\n\t * @param  {jQuery} container Scrolling container\n\t * @param  {jQuery} scroller  Item being scrolled\n\t * @param  {jQuery} cell      Cell in the scroller\n\t * @param  {string} posOff    `position` or `offset` - which to use for the\n\t *   calculation. `offset` for the document, otherwise `position`\n\t * @private\n\t */\n\t_scroll: function (container, scroller, cell, posOff) {\n\t\tvar offset = cell[posOff]();\n\t\tvar height = cell.outerHeight();\n\t\tvar width = cell.outerWidth();\n\n\t\tvar scrollTop = scroller.scrollTop();\n\t\tvar scrollLeft = scroller.scrollLeft();\n\t\tvar containerHeight = container.height();\n\t\tvar containerWidth = container.width();\n\n\t\t// If Scroller is being used, the table can be `position: absolute` and that\n\t\t// needs to be taken account of in the offset. If no Scroller, this will be 0\n\t\tif (posOff === 'position') {\n\t\t\toffset.top += parseInt(cell.closest('table').css('top'), 10);\n\t\t}\n\n\t\t// Top correction (partially in view)\n\t\tif (offset.top < scrollTop && offset.top + height > scrollTop - 5) {\n\t\t\tscroller.scrollTop(offset.top);\n\t\t}\n\n\t\t// Left correction\n\t\tif (offset.left < scrollLeft) {\n\t\t\tscroller.scrollLeft(offset.left);\n\t\t}\n\n\t\t// Bottom correction plus in view correction. Note that the magic 5 is to allow\n\t\t// for the edge just passing the bottom of the view\n\t\tif (\n\t\t\toffset.top + height > scrollTop + containerHeight &&\n\t\t\toffset.top < scrollTop + containerHeight + 5 &&\n\t\t\theight < containerHeight\n\t\t) {\n\t\t\tscroller.scrollTop(offset.top + height - containerHeight);\n\t\t}\n\n\t\t// Right correction\n\t\tif (offset.left + width > scrollLeft + containerWidth && width < containerWidth) {\n\t\t\tscroller.scrollLeft(offset.left + width - containerWidth);\n\t\t}\n\t},\n\n\t/**\n\t * Calculate a single offset movement in the table - up, down, left and\n\t * right and then perform the focus if possible\n\t *\n\t * @param  {object}  e           Event object\n\t * @param  {string}  direction   Movement direction\n\t * @param  {boolean} keyBlurable `true` if the key press can result in the\n\t *   table being blurred. This is so arrow keys won't blur the table, but\n\t *   tab will.\n\t * @private\n\t */\n\t_shift: function (e, direction, keyBlurable) {\n\t\tvar dt = this.s.dt;\n\t\tvar pageInfo = dt.page.info();\n\t\tvar rows = pageInfo.recordsDisplay;\n\t\tvar columns = this._columns();\n\t\tvar last = this.s.lastFocus;\n\t\tif (!last) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar currentCell = last.cell;\n\t\tif (!currentCell) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar currRow = dt\n\t\t\t.rows({ filter: 'applied', order: 'applied' })\n\t\t\t.indexes()\n\t\t\t.indexOf(currentCell.index().row);\n\n\t\t// When server-side processing, `rows().indexes()` only gives the rows\n\t\t// that are available at the client-side, so we need to normalise the\n\t\t// row's current position by the display start point\n\t\tif (pageInfo.serverSide) {\n\t\t\tcurrRow += pageInfo.start;\n\t\t}\n\n\t\tvar currCol = dt.columns(columns).indexes().indexOf(currentCell.index().column);\n\n\t\tvar row = currRow,\n\t\t\tcolumn = columns[currCol]; // row is the display, column is an index\n\n\t\t// If the direction is rtl then the logic needs to be inverted from this point forwards\n\t\tif ($(dt.table().node()).css('direction') === 'rtl') {\n\t\t\tif (direction === 'right') {\n\t\t\t\tdirection = 'left';\n\t\t\t}\n\t\t\telse if (direction === 'left') {\n\t\t\t\tdirection = 'right';\n\t\t\t}\n\t\t}\n\n\t\tif (direction === 'right') {\n\t\t\tif (currCol >= columns.length - 1) {\n\t\t\t\trow++;\n\t\t\t\tcolumn = columns[0];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcolumn = columns[currCol + 1];\n\t\t\t}\n\t\t}\n\t\telse if (direction === 'left') {\n\t\t\tif (currCol === 0) {\n\t\t\t\trow--;\n\t\t\t\tcolumn = columns[columns.length - 1];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcolumn = columns[currCol - 1];\n\t\t\t}\n\t\t}\n\t\telse if (direction === 'up') {\n\t\t\trow--;\n\t\t}\n\t\telse if (direction === 'down') {\n\t\t\trow++;\n\t\t}\n\n\t\tif (row >= 0 && row < rows && $.inArray(column, columns) !== -1) {\n\t\t\tif (e) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\tthis._focus(row, column, true, e);\n\t\t}\n\t\telse if (!keyBlurable || !this.c.blurable) {\n\t\t\t// No new focus, but if the table isn't blurable, then don't loose\n\t\t\t// focus\n\t\t\tif (e) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis._blur();\n\t\t}\n\t},\n\n\t/**\n\t * Create and insert a hidden input element that can receive focus on behalf\n\t * of the table\n\t *\n\t * @private\n\t */\n\t_tabInput: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar tabIndex = this.c.tabIndex !== null ? this.c.tabIndex : dt.settings()[0].iTabIndex;\n\n\t\tif (tabIndex == -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Only create the input element once on first class\n\t\tif (!this.s.tabInput) {\n\t\t\tvar div = $('<div><input type=\"text\" tabindex=\"' + tabIndex + '\"/></div>').css({\n\t\t\t\tposition: 'absolute',\n\t\t\t\theight: 1,\n\t\t\t\twidth: 0,\n\t\t\t\toverflow: 'hidden'\n\t\t\t});\n\n\t\t\tdiv.children().on('focus', function (e) {\n\t\t\t\tvar cell = dt.cell(':eq(0)', that._columns(), { page: 'current' });\n\n\t\t\t\tif (cell.any()) {\n\t\t\t\t\tthat._focus(cell, null, true, e);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.s.tabInput = div;\n\t\t}\n\n\t\t// Insert the input element into the first cell in the table's body\n\t\tvar cell = this.s.dt\n\t\t\t.cell(':eq(0)', '0:visible', { page: 'current', order: 'current' })\n\t\t\t.node();\n\t\tif (cell) {\n\t\t\t$(cell).prepend(this.s.tabInput);\n\t\t}\n\t},\n\n\t/**\n\t * Update fixed columns if they are enabled and if the cell we are\n\t * focusing is inside a fixed column\n\t * @param  {integer} column Index of the column being changed\n\t * @private\n\t */\n\t_updateFixedColumns: function (column) {\n\t\tvar dt = this.s.dt;\n\t\tvar settings = dt.settings()[0];\n\n\t\tif (settings._oFixedColumns) {\n\t\t\tvar leftCols = settings._oFixedColumns.s.iLeftColumns;\n\t\t\tvar rightCols = settings.aoColumns.length - settings._oFixedColumns.s.iRightColumns;\n\n\t\t\tif (column < leftCols || column >= rightCols) {\n\t\t\t\tdt.fixedColumns().update();\n\t\t\t}\n\t\t}\n\t}\n});\n\n/**\n * KeyTable default settings for initialisation\n *\n * @namespace\n * @name KeyTable.defaults\n * @static\n */\nKeyTable.defaults = {\n\t/**\n\t * Can focus be removed from the table\n\t * @type {Boolean}\n\t */\n\tblurable: true,\n\n\t/**\n\t * Class to give to the focused cell\n\t * @type {String}\n\t */\n\tclassName: 'focus',\n\n\t/**\n\t * Enable or disable clipboard support\n\t * @type {Boolean}\n\t */\n\tclipboard: true,\n\n\t/**\n\t * Orthogonal data that should be copied to clipboard\n\t * @type {string}\n\t */\n\tclipboardOrthogonal: 'display',\n\n\t/**\n\t * Columns that can be focused. This is automatically merged with the\n\t * visible columns as only visible columns can gain focus.\n\t * @type {String}\n\t */\n\tcolumns: '', // all\n\n\t/**\n\t * Editor instance to automatically perform Excel like navigation\n\t * @type {Editor}\n\t */\n\teditor: null,\n\n\t/**\n\t * Trigger editing immediately on focus\n\t * @type {boolean}\n\t */\n\teditOnFocus: false,\n\n\t/**\n\t * Options to pass to Editor's inline method\n\t * @type {function}\n\t */\n\teditorOptions: null,\n\n\t/**\n\t * Select a cell to automatically select on start up. `null` for no\n\t * automatic selection\n\t * @type {cell-selector}\n\t */\n\tfocus: null,\n\n\t/**\n\t * Array of keys to listen for\n\t * @type {null|array}\n\t */\n\tkeys: null,\n\n\t/**\n\t * Tab index for where the table should sit in the document's tab flow\n\t * @type {integer|null}\n\t */\n\ttabIndex: null\n};\n\nKeyTable.version = '2.11.0';\n\n$.fn.dataTable.KeyTable = KeyTable;\n$.fn.DataTable.KeyTable = KeyTable;\n\nDataTable.Api.register('cell.blur()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.keytable) {\n\t\t\tctx.keytable.blur();\n\t\t}\n\t});\n});\n\nDataTable.Api.register('cell().focus()', function () {\n\treturn this.iterator('cell', function (ctx, row, column) {\n\t\tif (ctx.keytable) {\n\t\t\tctx.keytable.focus(row, column);\n\t\t}\n\t});\n});\n\nDataTable.Api.register('keys.disable()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.keytable) {\n\t\t\tctx.keytable.enable(false);\n\t\t}\n\t});\n});\n\nDataTable.Api.register('keys.enable()', function (opts) {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.keytable) {\n\t\t\tctx.keytable.enable(opts === undefined ? true : opts);\n\t\t}\n\t});\n});\n\nDataTable.Api.register('keys.enabled()', function (opts) {\n\tvar ctx = this.context;\n\n\tif (ctx.length) {\n\t\treturn ctx[0].keytable ? ctx[0].keytable.enabled() : false;\n\t}\n\n\treturn false;\n});\n\nDataTable.Api.register('keys.move()', function (dir) {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.keytable) {\n\t\t\tctx.keytable._shift(null, dir, false);\n\t\t}\n\t});\n});\n\n// Cell selector\nDataTable.ext.selector.cell.push(function (settings, opts, cells) {\n\tvar focused = opts.focused;\n\tvar kt = settings.keytable;\n\tvar out = [];\n\n\tif (!kt || focused === undefined) {\n\t\treturn cells;\n\t}\n\n\tfor (var i = 0, ien = cells.length; i < ien; i++) {\n\t\tif (\n\t\t\t(focused === true && kt.focused(cells[i])) ||\n\t\t\t(focused === false && !kt.focused(cells[i]))\n\t\t) {\n\t\t\tout.push(cells[i]);\n\t\t}\n\t}\n\n\treturn out;\n});\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('preInit.dt.dtk', function (e, settings, json) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.keys;\n\tvar defaults = DataTable.defaults.keys;\n\n\tif (init || defaults) {\n\t\tvar opts = $.extend({}, defaults, init);\n\n\t\tif (init !== false) {\n\t\t\tnew KeyTable(settings, opts);\n\t\t}\n\t}\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/js/keyTable.bootstrap.js",
    "content": "/*! Bootstrap 3 styling wrapper for KeyTable\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-keytable'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.KeyTable ) {\n\t\t\t\trequire('datatables.net-keytable')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/js/keyTable.bootstrap4.js",
    "content": "/*! Bootstrap 4 styling wrapper for KeyTable\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-keytable'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.KeyTable ) {\n\t\t\t\trequire('datatables.net-keytable')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/js/keyTable.bootstrap5.js",
    "content": "/*! Bootstrap 5 styling wrapper for KeyTable\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-keytable'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.KeyTable ) {\n\t\t\t\trequire('datatables.net-keytable')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/js/keyTable.bulma.js",
    "content": "/*! Bulma styling wrapper for KeyTable\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-keytable'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.KeyTable ) {\n\t\t\t\trequire('datatables.net-keytable')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/js/keyTable.dataTables.js",
    "content": "/*! DataTables styling wrapper for KeyTable\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-keytable'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.KeyTable ) {\n\t\t\t\trequire('datatables.net-keytable')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/js/keyTable.foundation.js",
    "content": "/*! Foundation styling wrapper for KeyTable\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-keytable'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.KeyTable ) {\n\t\t\t\trequire('datatables.net-keytable')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/js/keyTable.jqueryui.js",
    "content": "/*! jQuery UI styling wrapper for KeyTable\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-keytable'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.KeyTable ) {\n\t\t\t\trequire('datatables.net-keytable')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/KeyTable-2.11.0/js/keyTable.semanticui.js",
    "content": "/*! Semanic UI styling wrapper for KeyTable\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-keytable'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.KeyTable ) {\n\t\t\t\trequire('datatables.net-keytable')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/css/responsive.bootstrap.css",
    "content": "table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {\n  cursor: default !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {\n  display: none !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control:before {\n  margin-right: 0.5em;\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {\n  content: \"▼\";\n}\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {\n  padding-left: 0.333em;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > td.control,\ntable.dataTable.dtr-column > tbody > tr > th.control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > td.control:before,\ntable.dataTable.dtr-column > tbody > tr > th.control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > td.control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-column > tbody > tr.parent td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent td.control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.control:before {\n  content: \"▼\";\n}\ntable.dataTable > tbody > tr.child {\n  padding: 0.5em 1em;\n}\ntable.dataTable > tbody > tr.child:hover {\n  background: transparent !important;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details {\n  display: inline-block;\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom: 1px solid #efefef;\n  padding: 0.5em 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:first-child {\n  padding-top: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:last-child {\n  padding-bottom: 0;\n  border-bottom: none;\n}\ntable.dataTable > tbody > tr.child span.dtr-title {\n  display: inline-block;\n  min-width: 75px;\n  font-weight: bold;\n}\n\ndiv.dtr-modal {\n  position: fixed;\n  box-sizing: border-box;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  z-index: 100;\n  padding: 10em 1em;\n}\ndiv.dtr-modal div.dtr-modal-display {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  width: 50%;\n  height: fit-content;\n  max-height: 75%;\n  overflow: auto;\n  margin: auto;\n  z-index: 102;\n  overflow: auto;\n  background-color: #f5f5f7;\n  border: 1px solid black;\n  border-radius: 0.5em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n}\ndiv.dtr-modal div.dtr-modal-content {\n  position: relative;\n  padding: 2.5em;\n}\ndiv.dtr-modal div.dtr-modal-content h2 {\n  margin-top: 0;\n}\ndiv.dtr-modal div.dtr-modal-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dtr-modal div.dtr-modal-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 101;\n  background: rgba(0, 0, 0, 0.6);\n}\n\n@media screen and (max-width: 767px) {\n  div.dtr-modal div.dtr-modal-display {\n    width: 95%;\n  }\n}\nhtml.dark table.dataTable > tbody > tr > td.dtr-control:before {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\nhtml.dark table.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom-color: rgb(64, 67, 70);\n}\nhtml.dark div.dtr-modal div.dtr-modal-display {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dtr-bs-modal table.table tr:first-child td {\n  border-top: none;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/css/responsive.bootstrap4.css",
    "content": "table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {\n  cursor: default !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {\n  display: none !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control:before {\n  margin-right: 0.5em;\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {\n  content: \"▼\";\n}\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {\n  padding-left: 0.333em;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > td.control,\ntable.dataTable.dtr-column > tbody > tr > th.control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > td.control:before,\ntable.dataTable.dtr-column > tbody > tr > th.control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > td.control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-column > tbody > tr.parent td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent td.control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.control:before {\n  content: \"▼\";\n}\ntable.dataTable > tbody > tr.child {\n  padding: 0.5em 1em;\n}\ntable.dataTable > tbody > tr.child:hover {\n  background: transparent !important;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details {\n  display: inline-block;\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom: 1px solid #efefef;\n  padding: 0.5em 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:first-child {\n  padding-top: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:last-child {\n  padding-bottom: 0;\n  border-bottom: none;\n}\ntable.dataTable > tbody > tr.child span.dtr-title {\n  display: inline-block;\n  min-width: 75px;\n  font-weight: bold;\n}\n\ndiv.dtr-modal {\n  position: fixed;\n  box-sizing: border-box;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  z-index: 100;\n  padding: 10em 1em;\n}\ndiv.dtr-modal div.dtr-modal-display {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  width: 50%;\n  height: fit-content;\n  max-height: 75%;\n  overflow: auto;\n  margin: auto;\n  z-index: 102;\n  overflow: auto;\n  background-color: #f5f5f7;\n  border: 1px solid black;\n  border-radius: 0.5em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n}\ndiv.dtr-modal div.dtr-modal-content {\n  position: relative;\n  padding: 2.5em;\n}\ndiv.dtr-modal div.dtr-modal-content h2 {\n  margin-top: 0;\n}\ndiv.dtr-modal div.dtr-modal-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dtr-modal div.dtr-modal-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 101;\n  background: rgba(0, 0, 0, 0.6);\n}\n\n@media screen and (max-width: 767px) {\n  div.dtr-modal div.dtr-modal-display {\n    width: 95%;\n  }\n}\nhtml.dark table.dataTable > tbody > tr > td.dtr-control:before {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\nhtml.dark table.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom-color: rgb(64, 67, 70);\n}\nhtml.dark div.dtr-modal div.dtr-modal-display {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dtr-bs-modal table.table tr:first-child td {\n  border-top: none;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/css/responsive.bootstrap5.css",
    "content": "table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {\n  cursor: default !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {\n  display: none !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control:before {\n  margin-right: 0.5em;\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {\n  content: \"▼\";\n}\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {\n  padding-left: 0.333em;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > td.control,\ntable.dataTable.dtr-column > tbody > tr > th.control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > td.control:before,\ntable.dataTable.dtr-column > tbody > tr > th.control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > td.control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-column > tbody > tr.parent td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent td.control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.control:before {\n  content: \"▼\";\n}\ntable.dataTable > tbody > tr.child {\n  padding: 0.5em 1em;\n}\ntable.dataTable > tbody > tr.child:hover {\n  background: transparent !important;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details {\n  display: inline-block;\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom: 1px solid #efefef;\n  padding: 0.5em 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:first-child {\n  padding-top: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:last-child {\n  padding-bottom: 0;\n  border-bottom: none;\n}\ntable.dataTable > tbody > tr.child span.dtr-title {\n  display: inline-block;\n  min-width: 75px;\n  font-weight: bold;\n}\n\ndiv.dtr-modal {\n  position: fixed;\n  box-sizing: border-box;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  z-index: 100;\n  padding: 10em 1em;\n}\ndiv.dtr-modal div.dtr-modal-display {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  width: 50%;\n  height: fit-content;\n  max-height: 75%;\n  overflow: auto;\n  margin: auto;\n  z-index: 102;\n  overflow: auto;\n  background-color: #f5f5f7;\n  border: 1px solid black;\n  border-radius: 0.5em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n}\ndiv.dtr-modal div.dtr-modal-content {\n  position: relative;\n  padding: 2.5em;\n}\ndiv.dtr-modal div.dtr-modal-content h2 {\n  margin-top: 0;\n}\ndiv.dtr-modal div.dtr-modal-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dtr-modal div.dtr-modal-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 101;\n  background: rgba(0, 0, 0, 0.6);\n}\n\n@media screen and (max-width: 767px) {\n  div.dtr-modal div.dtr-modal-display {\n    width: 95%;\n  }\n}\nhtml.dark table.dataTable > tbody > tr > td.dtr-control:before {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\nhtml.dark table.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom-color: rgb(64, 67, 70);\n}\nhtml.dark div.dtr-modal div.dtr-modal-display {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dtr-bs-modal table.table tr:first-child td {\n  border-top: none;\n}\n\ntable.dataTable.table-bordered th.dtr-control.dtr-hidden + *,\ntable.dataTable.table-bordered td.dtr-control.dtr-hidden + * {\n  border-left-width: 1px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/css/responsive.bulma.css",
    "content": "table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {\n  cursor: default !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {\n  display: none !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control:before {\n  margin-right: 0.5em;\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {\n  content: \"▼\";\n}\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {\n  padding-left: 0.333em;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > td.control,\ntable.dataTable.dtr-column > tbody > tr > th.control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > td.control:before,\ntable.dataTable.dtr-column > tbody > tr > th.control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > td.control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-column > tbody > tr.parent td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent td.control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.control:before {\n  content: \"▼\";\n}\ntable.dataTable > tbody > tr.child {\n  padding: 0.5em 1em;\n}\ntable.dataTable > tbody > tr.child:hover {\n  background: transparent !important;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details {\n  display: inline-block;\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom: 1px solid #efefef;\n  padding: 0.5em 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:first-child {\n  padding-top: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:last-child {\n  padding-bottom: 0;\n  border-bottom: none;\n}\ntable.dataTable > tbody > tr.child span.dtr-title {\n  display: inline-block;\n  min-width: 75px;\n  font-weight: bold;\n}\n\ndiv.dtr-modal {\n  position: fixed;\n  box-sizing: border-box;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  z-index: 100;\n  padding: 10em 1em;\n}\ndiv.dtr-modal div.dtr-modal-display {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  width: 50%;\n  height: fit-content;\n  max-height: 75%;\n  overflow: auto;\n  margin: auto;\n  z-index: 102;\n  overflow: auto;\n  background-color: #f5f5f7;\n  border: 1px solid black;\n  border-radius: 0.5em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n}\ndiv.dtr-modal div.dtr-modal-content {\n  position: relative;\n  padding: 2.5em;\n}\ndiv.dtr-modal div.dtr-modal-content h2 {\n  margin-top: 0;\n}\ndiv.dtr-modal div.dtr-modal-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dtr-modal div.dtr-modal-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 101;\n  background: rgba(0, 0, 0, 0.6);\n}\n\n@media screen and (max-width: 767px) {\n  div.dtr-modal div.dtr-modal-display {\n    width: 95%;\n  }\n}\nhtml.dark table.dataTable > tbody > tr > td.dtr-control:before {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\nhtml.dark table.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom-color: rgb(64, 67, 70);\n}\nhtml.dark div.dtr-modal div.dtr-modal-display {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ntable.dataTable > tbody > tr.child ul {\n  font-size: 1em;\n}\n\ndiv.modal-content {\n  padding: 20px;\n  background: white;\n  border-radius: 5px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/css/responsive.dataTables.css",
    "content": "table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {\n  cursor: default !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {\n  display: none !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control:before {\n  margin-right: 0.5em;\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {\n  content: \"▼\";\n}\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {\n  padding-left: 0.333em;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > td.control,\ntable.dataTable.dtr-column > tbody > tr > th.control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > td.control:before,\ntable.dataTable.dtr-column > tbody > tr > th.control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > td.control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-column > tbody > tr.parent td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent td.control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.control:before {\n  content: \"▼\";\n}\ntable.dataTable > tbody > tr.child {\n  padding: 0.5em 1em;\n}\ntable.dataTable > tbody > tr.child:hover {\n  background: transparent !important;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details {\n  display: inline-block;\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom: 1px solid #efefef;\n  padding: 0.5em 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:first-child {\n  padding-top: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:last-child {\n  padding-bottom: 0;\n  border-bottom: none;\n}\ntable.dataTable > tbody > tr.child span.dtr-title {\n  display: inline-block;\n  min-width: 75px;\n  font-weight: bold;\n}\n\ndiv.dtr-modal {\n  position: fixed;\n  box-sizing: border-box;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  z-index: 100;\n  padding: 10em 1em;\n}\ndiv.dtr-modal div.dtr-modal-display {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  width: 50%;\n  height: fit-content;\n  max-height: 75%;\n  overflow: auto;\n  margin: auto;\n  z-index: 102;\n  overflow: auto;\n  background-color: #f5f5f7;\n  border: 1px solid black;\n  border-radius: 0.5em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n}\ndiv.dtr-modal div.dtr-modal-content {\n  position: relative;\n  padding: 2.5em;\n}\ndiv.dtr-modal div.dtr-modal-content h2 {\n  margin-top: 0;\n}\ndiv.dtr-modal div.dtr-modal-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dtr-modal div.dtr-modal-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 101;\n  background: rgba(0, 0, 0, 0.6);\n}\n\n@media screen and (max-width: 767px) {\n  div.dtr-modal div.dtr-modal-display {\n    width: 95%;\n  }\n}\nhtml.dark table.dataTable > tbody > tr > td.dtr-control:before {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\nhtml.dark table.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom-color: rgb(64, 67, 70);\n}\nhtml.dark div.dtr-modal div.dtr-modal-display {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/css/responsive.foundation.css",
    "content": "table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {\n  cursor: default !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {\n  display: none !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control:before {\n  margin-right: 0.5em;\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {\n  content: \"▼\";\n}\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {\n  padding-left: 0.333em;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > td.control,\ntable.dataTable.dtr-column > tbody > tr > th.control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > td.control:before,\ntable.dataTable.dtr-column > tbody > tr > th.control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > td.control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-column > tbody > tr.parent td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent td.control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.control:before {\n  content: \"▼\";\n}\ntable.dataTable > tbody > tr.child {\n  padding: 0.5em 1em;\n}\ntable.dataTable > tbody > tr.child:hover {\n  background: transparent !important;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details {\n  display: inline-block;\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom: 1px solid #efefef;\n  padding: 0.5em 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:first-child {\n  padding-top: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:last-child {\n  padding-bottom: 0;\n  border-bottom: none;\n}\ntable.dataTable > tbody > tr.child span.dtr-title {\n  display: inline-block;\n  min-width: 75px;\n  font-weight: bold;\n}\n\ndiv.dtr-modal {\n  position: fixed;\n  box-sizing: border-box;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  z-index: 100;\n  padding: 10em 1em;\n}\ndiv.dtr-modal div.dtr-modal-display {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  width: 50%;\n  height: fit-content;\n  max-height: 75%;\n  overflow: auto;\n  margin: auto;\n  z-index: 102;\n  overflow: auto;\n  background-color: #f5f5f7;\n  border: 1px solid black;\n  border-radius: 0.5em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n}\ndiv.dtr-modal div.dtr-modal-content {\n  position: relative;\n  padding: 2.5em;\n}\ndiv.dtr-modal div.dtr-modal-content h2 {\n  margin-top: 0;\n}\ndiv.dtr-modal div.dtr-modal-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dtr-modal div.dtr-modal-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 101;\n  background: rgba(0, 0, 0, 0.6);\n}\n\n@media screen and (max-width: 767px) {\n  div.dtr-modal div.dtr-modal-display {\n    width: 95%;\n  }\n}\nhtml.dark table.dataTable > tbody > tr > td.dtr-control:before {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\nhtml.dark table.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom-color: rgb(64, 67, 70);\n}\nhtml.dark div.dtr-modal div.dtr-modal-display {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ntable.dataTable > tbody > tr.child ul {\n  font-size: 1em;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/css/responsive.jqueryui.css",
    "content": "table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {\n  cursor: default !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {\n  display: none !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control:before {\n  margin-right: 0.5em;\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {\n  content: \"▼\";\n}\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {\n  padding-left: 0.333em;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > td.control,\ntable.dataTable.dtr-column > tbody > tr > th.control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > td.control:before,\ntable.dataTable.dtr-column > tbody > tr > th.control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > td.control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-column > tbody > tr.parent td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent td.control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.control:before {\n  content: \"▼\";\n}\ntable.dataTable > tbody > tr.child {\n  padding: 0.5em 1em;\n}\ntable.dataTable > tbody > tr.child:hover {\n  background: transparent !important;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details {\n  display: inline-block;\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom: 1px solid #efefef;\n  padding: 0.5em 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:first-child {\n  padding-top: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:last-child {\n  padding-bottom: 0;\n  border-bottom: none;\n}\ntable.dataTable > tbody > tr.child span.dtr-title {\n  display: inline-block;\n  min-width: 75px;\n  font-weight: bold;\n}\n\ndiv.dtr-modal {\n  position: fixed;\n  box-sizing: border-box;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  z-index: 100;\n  padding: 10em 1em;\n}\ndiv.dtr-modal div.dtr-modal-display {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  width: 50%;\n  height: fit-content;\n  max-height: 75%;\n  overflow: auto;\n  margin: auto;\n  z-index: 102;\n  overflow: auto;\n  background-color: #f5f5f7;\n  border: 1px solid black;\n  border-radius: 0.5em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n}\ndiv.dtr-modal div.dtr-modal-content {\n  position: relative;\n  padding: 2.5em;\n}\ndiv.dtr-modal div.dtr-modal-content h2 {\n  margin-top: 0;\n}\ndiv.dtr-modal div.dtr-modal-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dtr-modal div.dtr-modal-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 101;\n  background: rgba(0, 0, 0, 0.6);\n}\n\n@media screen and (max-width: 767px) {\n  div.dtr-modal div.dtr-modal-display {\n    width: 95%;\n  }\n}\nhtml.dark table.dataTable > tbody > tr > td.dtr-control:before {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\nhtml.dark table.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom-color: rgb(64, 67, 70);\n}\nhtml.dark div.dtr-modal div.dtr-modal-display {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/css/responsive.semanticui.css",
    "content": "table.dataTable.dtr-inline.collapsed > tbody > tr > td.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {\n  cursor: default !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {\n  display: none !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control:before {\n  margin-right: 0.5em;\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {\n  content: \"▼\";\n}\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {\n  padding-left: 0.333em;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > td.control,\ntable.dataTable.dtr-column > tbody > tr > th.control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > td.control:before,\ntable.dataTable.dtr-column > tbody > tr > th.control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > td.control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-column > tbody > tr.parent td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent td.control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.control:before {\n  content: \"▼\";\n}\ntable.dataTable > tbody > tr.child {\n  padding: 0.5em 1em;\n}\ntable.dataTable > tbody > tr.child:hover {\n  background: transparent !important;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details {\n  display: inline-block;\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom: 1px solid #efefef;\n  padding: 0.5em 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:first-child {\n  padding-top: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:last-child {\n  padding-bottom: 0;\n  border-bottom: none;\n}\ntable.dataTable > tbody > tr.child span.dtr-title {\n  display: inline-block;\n  min-width: 75px;\n  font-weight: bold;\n}\n\ndiv.dtr-modal {\n  position: fixed;\n  box-sizing: border-box;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  z-index: 100;\n  padding: 10em 1em;\n}\ndiv.dtr-modal div.dtr-modal-display {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  width: 50%;\n  height: fit-content;\n  max-height: 75%;\n  overflow: auto;\n  margin: auto;\n  z-index: 102;\n  overflow: auto;\n  background-color: #f5f5f7;\n  border: 1px solid black;\n  border-radius: 0.5em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n}\ndiv.dtr-modal div.dtr-modal-content {\n  position: relative;\n  padding: 2.5em;\n}\ndiv.dtr-modal div.dtr-modal-content h2 {\n  margin-top: 0;\n}\ndiv.dtr-modal div.dtr-modal-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dtr-modal div.dtr-modal-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 101;\n  background: rgba(0, 0, 0, 0.6);\n}\n\n@media screen and (max-width: 767px) {\n  div.dtr-modal div.dtr-modal-display {\n    width: 95%;\n  }\n}\nhtml.dark table.dataTable > tbody > tr > td.dtr-control:before {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\nhtml.dark table.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom-color: rgb(64, 67, 70);\n}\nhtml.dark div.dtr-modal div.dtr-modal-display {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dtr-bs-modal table.table tr:first-child td {\n  border-top: none;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/js/dataTables.responsive.js",
    "content": "/*! Responsive 2.5.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     Responsive\n * @description Responsive tables plug-in for DataTables\n * @version     2.5.0\n * @author      SpryMedia Ltd\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/**\n * Responsive is a plug-in for the DataTables library that makes use of\n * DataTables' ability to change the visibility of columns, changing the\n * visibility of columns so the displayed columns fit into the table container.\n * The end result is that complex tables will be dynamically adjusted to fit\n * into the viewport, be it on a desktop, tablet or mobile browser.\n *\n * Responsive for DataTables has two modes of operation, which can used\n * individually or combined:\n *\n * * Class name based control - columns assigned class names that match the\n *   breakpoint logic can be shown / hidden as required for each breakpoint.\n * * Automatic control - columns are automatically hidden when there is no\n *   room left to display them. Columns removed from the right.\n *\n * In additional to column visibility control, Responsive also has built into\n * options to use DataTables' child row display to show / hide the information\n * from the table that has been hidden. There are also two modes of operation\n * for this child row display:\n *\n * * Inline - when the control element that the user can use to show / hide\n *   child rows is displayed inside the first column of the table.\n * * Column - where a whole column is dedicated to be the show / hide control.\n *\n * Initialisation of Responsive is performed by:\n *\n * * Adding the class `responsive` or `dt-responsive` to the table. In this case\n *   Responsive will automatically be initialised with the default configuration\n *   options when the DataTable is created.\n * * Using the `responsive` option in the DataTables configuration options. This\n *   can also be used to specify the configuration options, or simply set to\n *   `true` to use the defaults.\n *\n *  @class\n *  @param {object} settings DataTables settings object for the host table\n *  @param {object} [opts] Configuration options\n *  @requires jQuery 1.7+\n *  @requires DataTables 1.10.3+\n *\n *  @example\n *      $('#example').DataTable( {\n *        responsive: true\n *      } );\n *    } );\n */\nvar Responsive = function (settings, opts) {\n\t// Sanity check that we are using DataTables 1.10 or newer\n\tif (!DataTable.versionCheck || !DataTable.versionCheck('1.10.10')) {\n\t\tthrow 'DataTables Responsive requires DataTables 1.10.10 or newer';\n\t}\n\n\tthis.s = {\n\t\tchildNodeStore: {},\n\t\tcolumns: [],\n\t\tcurrent: [],\n\t\tdt: new DataTable.Api(settings)\n\t};\n\n\t// Check if responsive has already been initialised on this table\n\tif (this.s.dt.settings()[0].responsive) {\n\t\treturn;\n\t}\n\n\t// details is an object, but for simplicity the user can give it as a string\n\t// or a boolean\n\tif (opts && typeof opts.details === 'string') {\n\t\topts.details = { type: opts.details };\n\t}\n\telse if (opts && opts.details === false) {\n\t\topts.details = { type: false };\n\t}\n\telse if (opts && opts.details === true) {\n\t\topts.details = { type: 'inline' };\n\t}\n\n\tthis.c = $.extend(true, {}, Responsive.defaults, DataTable.defaults.responsive, opts);\n\tsettings.responsive = this;\n\tthis._constructor();\n};\n\n$.extend(Responsive.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialise the Responsive instance\n\t *\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar dtPrivateSettings = dt.settings()[0];\n\t\tvar oldWindowWidth = $(window).innerWidth();\n\n\t\tdt.settings()[0]._responsive = this;\n\n\t\t// Use DataTables' throttle function to avoid processor thrashing on\n\t\t// resize\n\t\t$(window).on(\n\t\t\t'resize.dtr orientationchange.dtr',\n\t\t\tDataTable.util.throttle(function () {\n\t\t\t\t// iOS has a bug whereby resize can fire when only scrolling\n\t\t\t\t// See: http://stackoverflow.com/questions/8898412\n\t\t\t\tvar width = $(window).innerWidth();\n\n\t\t\t\tif (width !== oldWindowWidth) {\n\t\t\t\t\tthat._resize();\n\t\t\t\t\toldWindowWidth = width;\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\t// DataTables doesn't currently trigger an event when a row is added, so\n\t\t// we need to hook into its private API to enforce the hidden rows when\n\t\t// new data is added\n\t\tdtPrivateSettings.oApi._fnCallbackReg(\n\t\t\tdtPrivateSettings,\n\t\t\t'aoRowCreatedCallback',\n\t\t\tfunction (tr, data, idx) {\n\t\t\t\tif ($.inArray(false, that.s.current) !== -1) {\n\t\t\t\t\t$('>td, >th', tr).each(function (i) {\n\t\t\t\t\t\tvar idx = dt.column.index('toData', i);\n\n\t\t\t\t\t\tif (that.s.current[idx] === false) {\n\t\t\t\t\t\t\t$(this).css('display', 'none');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\t// Destroy event handler\n\t\tdt.on('destroy.dtr', function () {\n\t\t\tdt.off('.dtr');\n\t\t\t$(dt.table().body()).off('.dtr');\n\t\t\t$(window).off('resize.dtr orientationchange.dtr');\n\t\t\tdt.cells('.dtr-control').nodes().to$().removeClass('dtr-control');\n\n\t\t\t// Restore the columns that we've hidden\n\t\t\t$.each(that.s.current, function (i, val) {\n\t\t\t\tif (val === false) {\n\t\t\t\t\tthat._setColumnVis(i, true);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// Reorder the breakpoints array here in case they have been added out\n\t\t// of order\n\t\tthis.c.breakpoints.sort(function (a, b) {\n\t\t\treturn a.width < b.width ? 1 : a.width > b.width ? -1 : 0;\n\t\t});\n\n\t\tthis._classLogic();\n\t\tthis._resizeAuto();\n\n\t\t// Details handler\n\t\tvar details = this.c.details;\n\n\t\tif (details.type !== false) {\n\t\t\tthat._detailsInit();\n\n\t\t\t// DataTables will trigger this event on every column it shows and\n\t\t\t// hides individually\n\t\t\tdt.on('column-visibility.dtr', function () {\n\t\t\t\t// Use a small debounce to allow multiple columns to be set together\n\t\t\t\tif (that._timer) {\n\t\t\t\t\tclearTimeout(that._timer);\n\t\t\t\t}\n\n\t\t\t\tthat._timer = setTimeout(function () {\n\t\t\t\t\tthat._timer = null;\n\n\t\t\t\t\tthat._classLogic();\n\t\t\t\t\tthat._resizeAuto();\n\t\t\t\t\tthat._resize(true);\n\n\t\t\t\t\tthat._redrawChildren();\n\t\t\t\t}, 100);\n\t\t\t});\n\n\t\t\t// Redraw the details box on each draw which will happen if the data\n\t\t\t// has changed. This is used until DataTables implements a native\n\t\t\t// `updated` event for rows\n\t\t\tdt.on('draw.dtr', function () {\n\t\t\t\tthat._redrawChildren();\n\t\t\t});\n\n\t\t\t$(dt.table().node()).addClass('dtr-' + details.type);\n\t\t}\n\n\t\tdt.on('column-reorder.dtr', function (e, settings, details) {\n\t\t\tthat._classLogic();\n\t\t\tthat._resizeAuto();\n\t\t\tthat._resize(true);\n\t\t});\n\n\t\t// Change in column sizes means we need to calc\n\t\tdt.on('column-sizing.dtr', function () {\n\t\t\tthat._resizeAuto();\n\t\t\tthat._resize();\n\t\t});\n\n\t\t// DT2 let's us tell it if we are hiding columns\n\t\tdt.on('column-calc.dt', function (e, d) {\n\t\t\tvar curr = that.s.current;\n\n\t\t\tfor (var i = 0; i < curr.length; i++) {\n\t\t\t\tvar idx = d.visible.indexOf(i);\n\n\t\t\t\tif (curr[i] === false && idx >= 0) {\n\t\t\t\t\td.visible.splice(idx, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// On Ajax reload we want to reopen any child rows which are displayed\n\t\t// by responsive\n\t\tdt.on('preXhr.dtr', function () {\n\t\t\tvar rowIds = [];\n\t\t\tdt.rows().every(function () {\n\t\t\t\tif (this.child.isShown()) {\n\t\t\t\t\trowIds.push(this.id(true));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdt.one('draw.dtr', function () {\n\t\t\t\tthat._resizeAuto();\n\t\t\t\tthat._resize();\n\n\t\t\t\tdt.rows(rowIds).every(function () {\n\t\t\t\t\tthat._detailsDisplay(this, false);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tdt.on('draw.dtr', function () {\n\t\t\tthat._controlClass();\n\t\t}).on('init.dtr', function (e, settings, details) {\n\t\t\tif (e.namespace !== 'dt') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthat._resizeAuto();\n\t\t\tthat._resize();\n\n\t\t\t// If columns were hidden, then DataTables needs to adjust the\n\t\t\t// column sizing\n\t\t\tif ($.inArray(false, that.s.current)) {\n\t\t\t\tdt.columns.adjust();\n\t\t\t}\n\t\t});\n\n\t\t// First pass - draw the table for the current viewport size\n\t\tthis._resize();\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Get and store nodes from a cell - use for node moving renderers\n\t *\n\t * @param {*} dt DT instance\n\t * @param {*} row Row index\n\t * @param {*} col Column index\n\t */\n\t_childNodes: function (dt, row, col) {\n\t\tvar name = row + '-' + col;\n\n\t\tif (this.s.childNodeStore[name]) {\n\t\t\treturn this.s.childNodeStore[name];\n\t\t}\n\n\t\t// https://jsperf.com/childnodes-array-slice-vs-loop\n\t\tvar nodes = [];\n\t\tvar children = dt.cell(row, col).node().childNodes;\n\t\tfor (var i = 0, ien = children.length; i < ien; i++) {\n\t\t\tnodes.push(children[i]);\n\t\t}\n\n\t\tthis.s.childNodeStore[name] = nodes;\n\n\t\treturn nodes;\n\t},\n\n\t/**\n\t * Restore nodes from the cache to a table cell\n\t *\n\t * @param {*} dt DT instance\n\t * @param {*} row Row index\n\t * @param {*} col Column index\n\t */\n\t_childNodesRestore: function (dt, row, col) {\n\t\tvar name = row + '-' + col;\n\n\t\tif (!this.s.childNodeStore[name]) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar node = dt.cell(row, col).node();\n\t\tvar store = this.s.childNodeStore[name];\n\t\tvar parent = store[0].parentNode;\n\t\tvar parentChildren = parent.childNodes;\n\t\tvar a = [];\n\n\t\tfor (var i = 0, ien = parentChildren.length; i < ien; i++) {\n\t\t\ta.push(parentChildren[i]);\n\t\t}\n\n\t\tfor (var j = 0, jen = a.length; j < jen; j++) {\n\t\t\tnode.appendChild(a[j]);\n\t\t}\n\n\t\tthis.s.childNodeStore[name] = undefined;\n\t},\n\n\t/**\n\t * Calculate the visibility for the columns in a table for a given\n\t * breakpoint. The result is pre-determined based on the class logic if\n\t * class names are used to control all columns, but the width of the table\n\t * is also used if there are columns which are to be automatically shown\n\t * and hidden.\n\t *\n\t * @param  {string} breakpoint Breakpoint name to use for the calculation\n\t * @return {array} Array of boolean values initiating the visibility of each\n\t *   column.\n\t *  @private\n\t */\n\t_columnsVisiblity: function (breakpoint) {\n\t\tvar dt = this.s.dt;\n\t\tvar columns = this.s.columns;\n\t\tvar i, ien;\n\n\t\t// Create an array that defines the column ordering based first on the\n\t\t// column's priority, and secondly the column index. This allows the\n\t\t// columns to be removed from the right if the priority matches\n\t\tvar order = columns\n\t\t\t.map(function (col, idx) {\n\t\t\t\treturn {\n\t\t\t\t\tcolumnIdx: idx,\n\t\t\t\t\tpriority: col.priority\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort(function (a, b) {\n\t\t\t\tif (a.priority !== b.priority) {\n\t\t\t\t\treturn a.priority - b.priority;\n\t\t\t\t}\n\t\t\t\treturn a.columnIdx - b.columnIdx;\n\t\t\t});\n\n\t\t// Class logic - determine which columns are in this breakpoint based\n\t\t// on the classes. If no class control (i.e. `auto`) then `-` is used\n\t\t// to indicate this to the rest of the function\n\t\tvar display = $.map(columns, function (col, i) {\n\t\t\tif (dt.column(i).visible() === false) {\n\t\t\t\treturn 'not-visible';\n\t\t\t}\n\t\t\treturn col.auto && col.minWidth === null\n\t\t\t\t? false\n\t\t\t\t: col.auto === true\n\t\t\t\t? '-'\n\t\t\t\t: $.inArray(breakpoint, col.includeIn) !== -1;\n\t\t});\n\n\t\t// Auto column control - first pass: how much width is taken by the\n\t\t// ones that must be included from the non-auto columns\n\t\tvar requiredWidth = 0;\n\t\tfor (i = 0, ien = display.length; i < ien; i++) {\n\t\t\tif (display[i] === true) {\n\t\t\t\trequiredWidth += columns[i].minWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Second pass, use up any remaining width for other columns. For\n\t\t// scrolling tables we need to subtract the width of the scrollbar. It\n\t\t// may not be requires which makes this sub-optimal, but it would\n\t\t// require another full redraw to make complete use of those extra few\n\t\t// pixels\n\t\tvar scrolling = dt.settings()[0].oScroll;\n\t\tvar bar = scrolling.sY || scrolling.sX ? scrolling.iBarWidth : 0;\n\t\tvar widthAvailable = dt.table().container().offsetWidth - bar;\n\t\tvar usedWidth = widthAvailable - requiredWidth;\n\n\t\t// Control column needs to always be included. This makes it sub-\n\t\t// optimal in terms of using the available with, but to stop layout\n\t\t// thrashing or overflow. Also we need to account for the control column\n\t\t// width first so we know how much width is available for the other\n\t\t// columns, since the control column might not be the first one shown\n\t\tfor (i = 0, ien = display.length; i < ien; i++) {\n\t\t\tif (columns[i].control) {\n\t\t\t\tusedWidth -= columns[i].minWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Allow columns to be shown (counting by priority and then right to\n\t\t// left) until we run out of room\n\t\tvar empty = false;\n\t\tfor (i = 0, ien = order.length; i < ien; i++) {\n\t\t\tvar colIdx = order[i].columnIdx;\n\n\t\t\tif (display[colIdx] === '-' && !columns[colIdx].control && columns[colIdx].minWidth) {\n\t\t\t\t// Once we've found a column that won't fit we don't let any\n\t\t\t\t// others display either, or columns might disappear in the\n\t\t\t\t// middle of the table\n\t\t\t\tif (empty || usedWidth - columns[colIdx].minWidth < 0) {\n\t\t\t\t\tempty = true;\n\t\t\t\t\tdisplay[colIdx] = false;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdisplay[colIdx] = true;\n\t\t\t\t}\n\n\t\t\t\tusedWidth -= columns[colIdx].minWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Determine if the 'control' column should be shown (if there is one).\n\t\t// This is the case when there is a hidden column (that is not the\n\t\t// control column). The two loops look inefficient here, but they are\n\t\t// trivial and will fly through. We need to know the outcome from the\n\t\t// first , before the action in the second can be taken\n\t\tvar showControl = false;\n\n\t\tfor (i = 0, ien = columns.length; i < ien; i++) {\n\t\t\tif (!columns[i].control && !columns[i].never && display[i] === false) {\n\t\t\t\tshowControl = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, ien = columns.length; i < ien; i++) {\n\t\t\tif (columns[i].control) {\n\t\t\t\tdisplay[i] = showControl;\n\t\t\t}\n\n\t\t\t// Replace not visible string with false from the control column detection above\n\t\t\tif (display[i] === 'not-visible') {\n\t\t\t\tdisplay[i] = false;\n\t\t\t}\n\t\t}\n\n\t\t// Finally we need to make sure that there is at least one column that\n\t\t// is visible\n\t\tif ($.inArray(true, display) === -1) {\n\t\t\tdisplay[0] = true;\n\t\t}\n\n\t\treturn display;\n\t},\n\n\t/**\n\t * Create the internal `columns` array with information about the columns\n\t * for the table. This includes determining which breakpoints the column\n\t * will appear in, based upon class names in the column, which makes up the\n\t * vast majority of this method.\n\t *\n\t * @private\n\t */\n\t_classLogic: function () {\n\t\tvar that = this;\n\t\tvar calc = {};\n\t\tvar breakpoints = this.c.breakpoints;\n\t\tvar dt = this.s.dt;\n\t\tvar columns = dt\n\t\t\t.columns()\n\t\t\t.eq(0)\n\t\t\t.map(function (i) {\n\t\t\t\tvar column = this.column(i);\n\t\t\t\tvar className = column.header().className;\n\t\t\t\tvar priority = dt.settings()[0].aoColumns[i].responsivePriority;\n\t\t\t\tvar dataPriority = column.header().getAttribute('data-priority');\n\n\t\t\t\tif (priority === undefined) {\n\t\t\t\t\tpriority =\n\t\t\t\t\t\tdataPriority === undefined || dataPriority === null\n\t\t\t\t\t\t\t? 10000\n\t\t\t\t\t\t\t: dataPriority * 1;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tclassName: className,\n\t\t\t\t\tincludeIn: [],\n\t\t\t\t\tauto: false,\n\t\t\t\t\tcontrol: false,\n\t\t\t\t\tnever: className.match(/\\b(dtr\\-)?never\\b/) ? true : false,\n\t\t\t\t\tpriority: priority\n\t\t\t\t};\n\t\t\t});\n\n\t\t// Simply add a breakpoint to `includeIn` array, ensuring that there are\n\t\t// no duplicates\n\t\tvar add = function (colIdx, name) {\n\t\t\tvar includeIn = columns[colIdx].includeIn;\n\n\t\t\tif ($.inArray(name, includeIn) === -1) {\n\t\t\t\tincludeIn.push(name);\n\t\t\t}\n\t\t};\n\n\t\tvar column = function (colIdx, name, operator, matched) {\n\t\t\tvar size, i, ien;\n\n\t\t\tif (!operator) {\n\t\t\t\tcolumns[colIdx].includeIn.push(name);\n\t\t\t}\n\t\t\telse if (operator === 'max-') {\n\t\t\t\t// Add this breakpoint and all smaller\n\t\t\t\tsize = that._find(name).width;\n\n\t\t\t\tfor (i = 0, ien = breakpoints.length; i < ien; i++) {\n\t\t\t\t\tif (breakpoints[i].width <= size) {\n\t\t\t\t\t\tadd(colIdx, breakpoints[i].name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (operator === 'min-') {\n\t\t\t\t// Add this breakpoint and all larger\n\t\t\t\tsize = that._find(name).width;\n\n\t\t\t\tfor (i = 0, ien = breakpoints.length; i < ien; i++) {\n\t\t\t\t\tif (breakpoints[i].width >= size) {\n\t\t\t\t\t\tadd(colIdx, breakpoints[i].name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (operator === 'not-') {\n\t\t\t\t// Add all but this breakpoint\n\t\t\t\tfor (i = 0, ien = breakpoints.length; i < ien; i++) {\n\t\t\t\t\tif (breakpoints[i].name.indexOf(matched) === -1) {\n\t\t\t\t\t\tadd(colIdx, breakpoints[i].name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Loop over each column and determine if it has a responsive control\n\t\t// class\n\t\tcolumns.each(function (col, i) {\n\t\t\tvar classNames = col.className.split(' ');\n\t\t\tvar hasClass = false;\n\n\t\t\t// Split the class name up so multiple rules can be applied if needed\n\t\t\tfor (var k = 0, ken = classNames.length; k < ken; k++) {\n\t\t\t\tvar className = classNames[k].trim();\n\n\t\t\t\tif (className === 'all' || className === 'dtr-all') {\n\t\t\t\t\t// Include in all\n\t\t\t\t\thasClass = true;\n\t\t\t\t\tcol.includeIn = $.map(breakpoints, function (a) {\n\t\t\t\t\t\treturn a.name;\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (className === 'none' || className === 'dtr-none' || col.never) {\n\t\t\t\t\t// Include in none (default) and no auto\n\t\t\t\t\thasClass = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (className === 'control' || className === 'dtr-control') {\n\t\t\t\t\t// Special column that is only visible, when one of the other\n\t\t\t\t\t// columns is hidden. This is used for the details control\n\t\t\t\t\thasClass = true;\n\t\t\t\t\tcol.control = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t$.each(breakpoints, function (j, breakpoint) {\n\t\t\t\t\t// Does this column have a class that matches this breakpoint?\n\t\t\t\t\tvar brokenPoint = breakpoint.name.split('-');\n\t\t\t\t\tvar re = new RegExp(\n\t\t\t\t\t\t'(min\\\\-|max\\\\-|not\\\\-)?(' + brokenPoint[0] + ')(\\\\-[_a-zA-Z0-9])?'\n\t\t\t\t\t);\n\t\t\t\t\tvar match = className.match(re);\n\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\thasClass = true;\n\n\t\t\t\t\t\tif (match[2] === brokenPoint[0] && match[3] === '-' + brokenPoint[1]) {\n\t\t\t\t\t\t\t// Class name matches breakpoint name fully\n\t\t\t\t\t\t\tcolumn(i, breakpoint.name, match[1], match[2] + match[3]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (match[2] === brokenPoint[0] && !match[3]) {\n\t\t\t\t\t\t\t// Class name matched primary breakpoint name with no qualifier\n\t\t\t\t\t\t\tcolumn(i, breakpoint.name, match[1], match[2]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// If there was no control class, then automatic sizing is used\n\t\t\tif (!hasClass) {\n\t\t\t\tcol.auto = true;\n\t\t\t}\n\t\t});\n\n\t\tthis.s.columns = columns;\n\t},\n\n\t/**\n\t * Update the cells to show the correct control class / button\n\t * @private\n\t */\n\t_controlClass: function () {\n\t\tif (this.c.details.type === 'inline') {\n\t\t\tvar dt = this.s.dt;\n\t\t\tvar columnsVis = this.s.current;\n\t\t\tvar firstVisible = $.inArray(true, columnsVis);\n\n\t\t\t// Remove from any cells which shouldn't have it\n\t\t\tdt.cells(\n\t\t\t\tnull,\n\t\t\t\tfunction (idx) {\n\t\t\t\t\treturn idx !== firstVisible;\n\t\t\t\t},\n\t\t\t\t{ page: 'current' }\n\t\t\t)\n\t\t\t\t.nodes()\n\t\t\t\t.to$()\n\t\t\t\t.filter('.dtr-control')\n\t\t\t\t.removeClass('dtr-control');\n\n\t\t\tdt.cells(null, firstVisible, { page: 'current' }).nodes().to$().addClass('dtr-control');\n\t\t}\n\t},\n\n\t/**\n\t * Show the details for the child row\n\t *\n\t * @param  {DataTables.Api} row    API instance for the row\n\t * @param  {boolean}        update Update flag\n\t * @private\n\t */\n\t_detailsDisplay: function (row, update) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar details = this.c.details;\n\t\tvar event = function (res) {\n\t\t\t$(row.node()).toggleClass('parent', res !== false);\n\t\t\t$(dt.table().node()).triggerHandler('responsive-display.dt', [dt, row, res, update]);\n\t\t};\n\n\t\tif (details && details.type !== false) {\n\t\t\tvar renderer =\n\t\t\t\ttypeof details.renderer === 'string'\n\t\t\t\t\t? Responsive.renderer[details.renderer]()\n\t\t\t\t\t: details.renderer;\n\n\t\t\tvar res = details.display(\n\t\t\t\trow,\n\t\t\t\tupdate,\n\t\t\t\tfunction () {\n\t\t\t\t\treturn renderer.call(that, dt, row[0], that._detailsObj(row[0]));\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\tevent(false);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (typeof res === 'boolean') {\n\t\t\t\tevent(res);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Initialisation for the details handler\n\t *\n\t * @private\n\t */\n\t_detailsInit: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar details = this.c.details;\n\n\t\t// The inline type always uses the first child as the target\n\t\tif (details.type === 'inline') {\n\t\t\tdetails.target = 'td.dtr-control, th.dtr-control';\n\t\t}\n\n\t\t// Keyboard accessibility\n\t\tdt.on('draw.dtr', function () {\n\t\t\tthat._tabIndexes();\n\t\t});\n\t\tthat._tabIndexes(); // Initial draw has already happened\n\n\t\t$(dt.table().body()).on('keyup.dtr', 'td, th', function (e) {\n\t\t\tif (e.keyCode === 13 && $(this).data('dtr-keyboard')) {\n\t\t\t\t$(this).click();\n\t\t\t}\n\t\t});\n\n\t\t// type.target can be a string jQuery selector or a column index\n\t\tvar target = details.target;\n\t\tvar selector = typeof target === 'string' ? target : 'td, th';\n\n\t\tif (target !== undefined || target !== null) {\n\t\t\t// Click handler to show / hide the details rows when they are available\n\t\t\t$(dt.table().body()).on('click.dtr mousedown.dtr mouseup.dtr', selector, function (e) {\n\t\t\t\t// If the table is not collapsed (i.e. there is no hidden columns)\n\t\t\t\t// then take no action\n\t\t\t\tif (!$(dt.table().node()).hasClass('collapsed')) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check that the row is actually a DataTable's controlled node\n\t\t\t\tif ($.inArray($(this).closest('tr').get(0), dt.rows().nodes().toArray()) === -1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// For column index, we determine if we should act or not in the\n\t\t\t\t// handler - otherwise it is already okay\n\t\t\t\tif (typeof target === 'number') {\n\t\t\t\t\tvar targetIdx = target < 0 ? dt.columns().eq(0).length + target : target;\n\n\t\t\t\t\tif (dt.cell(this).index().column !== targetIdx) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// $().closest() includes itself in its check\n\t\t\t\tvar row = dt.row($(this).closest('tr'));\n\n\t\t\t\t// Check event type to do an action\n\t\t\t\tif (e.type === 'click') {\n\t\t\t\t\t// The renderer is given as a function so the caller can execute it\n\t\t\t\t\t// only when they need (i.e. if hiding there is no point is running\n\t\t\t\t\t// the renderer)\n\t\t\t\t\tthat._detailsDisplay(row, false);\n\t\t\t\t}\n\t\t\t\telse if (e.type === 'mousedown') {\n\t\t\t\t\t// For mouse users, prevent the focus ring from showing\n\t\t\t\t\t$(this).css('outline', 'none');\n\t\t\t\t}\n\t\t\t\telse if (e.type === 'mouseup') {\n\t\t\t\t\t// And then re-allow at the end of the click\n\t\t\t\t\t$(this).trigger('blur').css('outline', '');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Get the details to pass to a renderer for a row\n\t * @param  {int} rowIdx Row index\n\t * @private\n\t */\n\t_detailsObj: function (rowIdx) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\n\t\treturn $.map(this.s.columns, function (col, i) {\n\t\t\t// Never and control columns should not be passed to the renderer\n\t\t\tif (col.never || col.control) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar dtCol = dt.settings()[0].aoColumns[i];\n\n\t\t\treturn {\n\t\t\t\tclassName: dtCol.sClass,\n\t\t\t\tcolumnIndex: i,\n\t\t\t\tdata: dt.cell(rowIdx, i).render(that.c.orthogonal),\n\t\t\t\thidden: dt.column(i).visible() && !that.s.current[i],\n\t\t\t\trowIndex: rowIdx,\n\t\t\t\ttitle: dtCol.sTitle !== null ? dtCol.sTitle : $(dt.column(i).header()).text()\n\t\t\t};\n\t\t});\n\t},\n\n\t/**\n\t * Find a breakpoint object from a name\n\t *\n\t * @param  {string} name Breakpoint name to find\n\t * @return {object}      Breakpoint description object\n\t * @private\n\t */\n\t_find: function (name) {\n\t\tvar breakpoints = this.c.breakpoints;\n\n\t\tfor (var i = 0, ien = breakpoints.length; i < ien; i++) {\n\t\t\tif (breakpoints[i].name === name) {\n\t\t\t\treturn breakpoints[i];\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Re-create the contents of the child rows as the display has changed in\n\t * some way.\n\t *\n\t * @private\n\t */\n\t_redrawChildren: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\n\t\tdt.rows({ page: 'current' }).iterator('row', function (settings, idx) {\n\t\t\tthat._detailsDisplay(dt.row(idx), true);\n\t\t});\n\t},\n\n\t/**\n\t * Alter the table display for a resized viewport. This involves first\n\t * determining what breakpoint the window currently is in, getting the\n\t * column visibilities to apply and then setting them.\n\t *\n\t * @param  {boolean} forceRedraw Force a redraw\n\t * @private\n\t */\n\t_resize: function (forceRedraw) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar width = $(window).innerWidth();\n\t\tvar breakpoints = this.c.breakpoints;\n\t\tvar breakpoint = breakpoints[0].name;\n\t\tvar columns = this.s.columns;\n\t\tvar i, ien;\n\t\tvar oldVis = this.s.current.slice();\n\n\t\t// Determine what breakpoint we are currently at\n\t\tfor (i = breakpoints.length - 1; i >= 0; i--) {\n\t\t\tif (width <= breakpoints[i].width) {\n\t\t\t\tbreakpoint = breakpoints[i].name;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Show the columns for that break point\n\t\tvar columnsVis = this._columnsVisiblity(breakpoint);\n\t\tthis.s.current = columnsVis;\n\n\t\t// Set the class before the column visibility is changed so event\n\t\t// listeners know what the state is. Need to determine if there are\n\t\t// any columns that are not visible but can be shown\n\t\tvar collapsedClass = false;\n\n\t\tfor (i = 0, ien = columns.length; i < ien; i++) {\n\t\t\tif (\n\t\t\t\tcolumnsVis[i] === false &&\n\t\t\t\t!columns[i].never &&\n\t\t\t\t!columns[i].control &&\n\t\t\t\t!dt.column(i).visible() === false\n\t\t\t) {\n\t\t\t\tcollapsedClass = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t$(dt.table().node()).toggleClass('collapsed', collapsedClass);\n\n\t\tvar changed = false;\n\t\tvar visible = 0;\n\n\t\tdt.columns()\n\t\t\t.eq(0)\n\t\t\t.each(function (colIdx, i) {\n\t\t\t\tif (columnsVis[i] === true) {\n\t\t\t\t\tvisible++;\n\t\t\t\t}\n\n\t\t\t\tif (forceRedraw || columnsVis[i] !== oldVis[i]) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t\tthat._setColumnVis(colIdx, columnsVis[i]);\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Always need to update the display, regardless of if it has changed or not, so nodes\n\t\t// can be re-inserted for listHiddenNodes\n\t\tthis._redrawChildren();\n\n\t\tif (changed) {\n\t\t\t// Inform listeners of the change\n\t\t\t$(dt.table().node()).trigger('responsive-resize.dt', [dt, this.s.current]);\n\n\t\t\t// If no records, update the \"No records\" display element\n\t\t\tif (dt.page.info().recordsDisplay === 0) {\n\t\t\t\t$('td', dt.table().body()).eq(0).attr('colspan', visible);\n\t\t\t}\n\t\t}\n\n\t\tthat._controlClass();\n\t},\n\n\t/**\n\t * Determine the width of each column in the table so the auto column hiding\n\t * has that information to work with. This method is never going to be 100%\n\t * perfect since column widths can change slightly per page, but without\n\t * seriously compromising performance this is quite effective.\n\t *\n\t * @private\n\t */\n\t_resizeAuto: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar columns = this.s.columns;\n\t\tvar that = this;\n\n\t\t// Are we allowed to do auto sizing?\n\t\tif (!this.c.auto) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Are there any columns that actually need auto-sizing, or do they all\n\t\t// have classes defined\n\t\tif (\n\t\t\t$.inArray(\n\t\t\t\ttrue,\n\t\t\t\t$.map(columns, function (c) {\n\t\t\t\t\treturn c.auto;\n\t\t\t\t})\n\t\t\t) === -1\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Need to restore all children. They will be reinstated by a re-render\n\t\tif (!$.isEmptyObject(this.s.childNodeStore)) {\n\t\t\t$.each(this.s.childNodeStore, function (key) {\n\t\t\t\tvar idx = key.split('-');\n\n\t\t\t\tthat._childNodesRestore(dt, idx[0] * 1, idx[1] * 1);\n\t\t\t});\n\t\t}\n\n\t\t// Clone the table with the current data in it\n\t\tvar tableWidth = dt.table().node().offsetWidth;\n\t\tvar columnWidths = dt.columns;\n\t\tvar clonedTable = dt.table().node().cloneNode(false);\n\t\tvar clonedHeader = $(dt.table().header().cloneNode(false)).appendTo(clonedTable);\n\t\tvar clonedBody = $(dt.table().body()).clone(false, false).empty().appendTo(clonedTable); // use jQuery because of IE8\n\n\t\tclonedTable.style.width = 'auto';\n\n\t\t// Header\n\t\tvar headerCells = dt\n\t\t\t.columns()\n\t\t\t.header()\n\t\t\t.filter(function (idx) {\n\t\t\t\treturn dt.column(idx).visible();\n\t\t\t})\n\t\t\t.to$()\n\t\t\t.clone(false)\n\t\t\t.css('display', 'table-cell')\n\t\t\t.css('width', 'auto')\n\t\t\t.css('min-width', 0);\n\n\t\t// Body rows - we don't need to take account of DataTables' column\n\t\t// visibility since we implement our own here (hence the `display` set)\n\t\t$(clonedBody)\n\t\t\t.append($(dt.rows({ page: 'current' }).nodes()).clone(false))\n\t\t\t.find('th, td')\n\t\t\t.css('display', '');\n\n\t\t// Footer\n\t\tvar footer = dt.table().footer();\n\t\tif (footer) {\n\t\t\tvar clonedFooter = $(footer.cloneNode(false)).appendTo(clonedTable);\n\t\t\tvar footerCells = dt\n\t\t\t\t.columns()\n\t\t\t\t.footer()\n\t\t\t\t.filter(function (idx) {\n\t\t\t\t\treturn dt.column(idx).visible();\n\t\t\t\t})\n\t\t\t\t.to$()\n\t\t\t\t.clone(false)\n\t\t\t\t.css('display', 'table-cell');\n\n\t\t\t$('<tr/>').append(footerCells).appendTo(clonedFooter);\n\t\t}\n\n\t\t$('<tr/>').append(headerCells).appendTo(clonedHeader);\n\n\t\t// In the inline case extra padding is applied to the first column to\n\t\t// give space for the show / hide icon. We need to use this in the\n\t\t// calculation\n\t\tif (this.c.details.type === 'inline') {\n\t\t\t$(clonedTable).addClass('dtr-inline collapsed');\n\t\t}\n\n\t\t// It is unsafe to insert elements with the same name into the DOM\n\t\t// multiple times. For example, cloning and inserting a checked radio\n\t\t// clears the chcecked state of the original radio.\n\t\t$(clonedTable).find('[name]').removeAttr('name');\n\n\t\t// A position absolute table would take the table out of the flow of\n\t\t// our container element, bypassing the height and width (Scroller)\n\t\t$(clonedTable).css('position', 'relative');\n\n\t\tvar inserted = $('<div/>')\n\t\t\t.css({\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1,\n\t\t\t\toverflow: 'hidden',\n\t\t\t\tclear: 'both'\n\t\t\t})\n\t\t\t.append(clonedTable);\n\n\t\tinserted.insertBefore(dt.table().node());\n\n\t\t// The cloned header now contains the smallest that each column can be\n\t\theaderCells.each(function (i) {\n\t\t\tvar idx = dt.column.index('fromVisible', i);\n\t\t\tcolumns[idx].minWidth = this.offsetWidth || 0;\n\t\t});\n\n\t\tinserted.remove();\n\t},\n\n\t/**\n\t * Get the state of the current hidden columns - controlled by Responsive only\n\t */\n\t_responsiveOnlyHidden: function () {\n\t\tvar dt = this.s.dt;\n\n\t\treturn $.map(this.s.current, function (v, i) {\n\t\t\t// If the column is hidden by DataTables then it can't be hidden by\n\t\t\t// Responsive!\n\t\t\tif (dt.column(i).visible() === false) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn v;\n\t\t});\n\t},\n\n\t/**\n\t * Set a column's visibility.\n\t *\n\t * We don't use DataTables' column visibility controls in order to ensure\n\t * that column visibility can Responsive can no-exist. Since only IE8+ is\n\t * supported (and all evergreen browsers of course) the control of the\n\t * display attribute works well.\n\t *\n\t * @param {integer} col      Column index\n\t * @param {boolean} showHide Show or hide (true or false)\n\t * @private\n\t */\n\t_setColumnVis: function (col, showHide) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar display = showHide ? '' : 'none'; // empty string will remove the attr\n\n\t\t$(dt.column(col).header()).css('display', display).toggleClass('dtr-hidden', !showHide);\n\n\t\t$(dt.column(col).footer()).css('display', display).toggleClass('dtr-hidden', !showHide);\n\n\t\tdt.column(col).nodes().to$().css('display', display).toggleClass('dtr-hidden', !showHide);\n\n\t\t// If the are child nodes stored, we might need to reinsert them\n\t\tif (!$.isEmptyObject(this.s.childNodeStore)) {\n\t\t\tdt.cells(null, col)\n\t\t\t\t.indexes()\n\t\t\t\t.each(function (idx) {\n\t\t\t\t\tthat._childNodesRestore(dt, idx.row, idx.column);\n\t\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Update the cell tab indexes for keyboard accessibility. This is called on\n\t * every table draw - that is potentially inefficient, but also the least\n\t * complex option given that column visibility can change on the fly. Its a\n\t * shame user-focus was removed from CSS 3 UI, as it would have solved this\n\t * issue with a single CSS statement.\n\t *\n\t * @private\n\t */\n\t_tabIndexes: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar cells = dt.cells({ page: 'current' }).nodes().to$();\n\t\tvar ctx = dt.settings()[0];\n\t\tvar target = this.c.details.target;\n\n\t\tcells.filter('[data-dtr-keyboard]').removeData('[data-dtr-keyboard]');\n\n\t\tif (typeof target === 'number') {\n\t\t\tdt.cells(null, target, { page: 'current' })\n\t\t\t\t.nodes()\n\t\t\t\t.to$()\n\t\t\t\t.attr('tabIndex', ctx.iTabIndex)\n\t\t\t\t.data('dtr-keyboard', 1);\n\t\t}\n\t\telse {\n\t\t\t// This is a bit of a hack - we need to limit the selected nodes to just\n\t\t\t// those of this table\n\t\t\tif (target === 'td:first-child, th:first-child') {\n\t\t\t\ttarget = '>td:first-child, >th:first-child';\n\t\t\t}\n\n\t\t\t$(target, dt.rows({ page: 'current' }).nodes())\n\t\t\t\t.attr('tabIndex', ctx.iTabIndex)\n\t\t\t\t.data('dtr-keyboard', 1);\n\t\t}\n\t}\n});\n\n/**\n * List of default breakpoints. Each item in the array is an object with two\n * properties:\n *\n * * `name` - the breakpoint name.\n * * `width` - the breakpoint width\n *\n * @name Responsive.breakpoints\n * @static\n */\nResponsive.breakpoints = [\n\t{ name: 'desktop', width: Infinity },\n\t{ name: 'tablet-l', width: 1024 },\n\t{ name: 'tablet-p', width: 768 },\n\t{ name: 'mobile-l', width: 480 },\n\t{ name: 'mobile-p', width: 320 }\n];\n\n/**\n * Display methods - functions which define how the hidden data should be shown\n * in the table.\n *\n * @namespace\n * @name Responsive.defaults\n * @static\n */\nResponsive.display = {\n\tchildRow: function (row, update, render) {\n\t\tif (update) {\n\t\t\tif ($(row.node()).hasClass('parent')) {\n\t\t\t\trow.child(render(), 'child').show();\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (!row.child.isShown()) {\n\t\t\t\trow.child(render(), 'child').show();\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\trow.child(false);\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\tchildRowImmediate: function (row, update, render) {\n\t\tif ((!update && row.child.isShown()) || !row.responsive.hasHidden()) {\n\t\t\t// User interaction and the row is show, or nothing to show\n\t\t\trow.child(false);\n\n\t\t\treturn false;\n\t\t}\n\t\telse {\n\t\t\t// Display\n\t\t\trow.child(render(), 'child').show();\n\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t// This is a wrapper so the modal options for Bootstrap and jQuery UI can\n\t// have options passed into them. This specific one doesn't need to be a\n\t// function but it is for consistency in the `modal` name\n\tmodal: function (options) {\n\t\treturn function (row, update, render, closeCallback) {\n\t\t\tif (!update) {\n\t\t\t\t// Show a modal\n\t\t\t\tvar close = function () {\n\t\t\t\t\tmodal.remove(); // will tidy events for us\n\t\t\t\t\t$(document).off('keypress.dtr');\n\t\t\t\t\t$(row.node()).removeClass('parent');\n\n\t\t\t\t\tcloseCallback();\n\t\t\t\t};\n\n\t\t\t\tvar modal = $('<div class=\"dtr-modal\"/>')\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('<div class=\"dtr-modal-display\"/>')\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t$('<div class=\"dtr-modal-content\"/>')\n\t\t\t\t\t\t\t\t\t.data('dtr-row-idx', row.index())\n\t\t\t\t\t\t\t\t\t.append(render())\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t$('<div class=\"dtr-modal-close\">&times;</div>').click(function () {\n\t\t\t\t\t\t\t\t\tclose();\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('<div class=\"dtr-modal-background\"/>').click(function () {\n\t\t\t\t\t\t\tclose();\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t.appendTo('body');\n\n\t\t\t\t$(row.node()).addClass('parent');\n\n\t\t\t\t$(document).on('keyup.dtr', function (e) {\n\t\t\t\t\tif (e.keyCode === 27) {\n\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\tclose();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar modal = $('div.dtr-modal-content');\n\n\t\t\t\tif (modal.length && row.index() === modal.data('dtr-row-idx')) {\n\t\t\t\t\tmodal.empty().append(render());\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Modal not shown, nothing to update\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options && options.header) {\n\t\t\t\t$('div.dtr-modal-content').prepend('<h2>' + options.header(row) + '</h2>');\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\t}\n};\n\n/**\n * Display methods - functions which define how the hidden data should be shown\n * in the table.\n *\n * @namespace\n * @name Responsive.defaults\n * @static\n */\nResponsive.renderer = {\n\tlistHiddenNodes: function () {\n\t\treturn function (api, rowIdx, columns) {\n\t\t\tvar that = this;\n\t\t\tvar ul = $('<ul data-dtr-index=\"' + rowIdx + '\" class=\"dtr-details\"/>');\n\t\t\tvar found = false;\n\n\t\t\tvar data = $.each(columns, function (i, col) {\n\t\t\t\tif (col.hidden) {\n\t\t\t\t\tvar klass = col.className ? 'class=\"' + col.className + '\"' : '';\n\n\t\t\t\t\t$(\n\t\t\t\t\t\t'<li ' +\n\t\t\t\t\t\t\tklass +\n\t\t\t\t\t\t\t' data-dtr-index=\"' +\n\t\t\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t\t\t'\" data-dt-row=\"' +\n\t\t\t\t\t\t\tcol.rowIndex +\n\t\t\t\t\t\t\t'\" data-dt-column=\"' +\n\t\t\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t\t\t'\">' +\n\t\t\t\t\t\t\t'<span class=\"dtr-title\">' +\n\t\t\t\t\t\t\tcol.title +\n\t\t\t\t\t\t\t'</span> ' +\n\t\t\t\t\t\t\t'</li>'\n\t\t\t\t\t)\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t$('<span class=\"dtr-data\"/>').append(\n\t\t\t\t\t\t\t\tthat._childNodes(api, col.rowIndex, col.columnIndex)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) // api.cell( col.rowIndex, col.columnIndex ).node().childNodes ) )\n\t\t\t\t\t\t.appendTo(ul);\n\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn found ? ul : false;\n\t\t};\n\t},\n\n\tlistHidden: function () {\n\t\treturn function (api, rowIdx, columns) {\n\t\t\tvar data = $.map(columns, function (col) {\n\t\t\t\tvar klass = col.className ? 'class=\"' + col.className + '\"' : '';\n\n\t\t\t\treturn col.hidden\n\t\t\t\t\t? '<li ' +\n\t\t\t\t\t\t\tklass +\n\t\t\t\t\t\t\t' data-dtr-index=\"' +\n\t\t\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t\t\t'\" data-dt-row=\"' +\n\t\t\t\t\t\t\tcol.rowIndex +\n\t\t\t\t\t\t\t'\" data-dt-column=\"' +\n\t\t\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t\t\t'\">' +\n\t\t\t\t\t\t\t'<span class=\"dtr-title\">' +\n\t\t\t\t\t\t\tcol.title +\n\t\t\t\t\t\t\t'</span> ' +\n\t\t\t\t\t\t\t'<span class=\"dtr-data\">' +\n\t\t\t\t\t\t\tcol.data +\n\t\t\t\t\t\t\t'</span>' +\n\t\t\t\t\t\t\t'</li>'\n\t\t\t\t\t: '';\n\t\t\t}).join('');\n\n\t\t\treturn data\n\t\t\t\t? $('<ul data-dtr-index=\"' + rowIdx + '\" class=\"dtr-details\"/>').append(data)\n\t\t\t\t: false;\n\t\t};\n\t},\n\n\ttableAll: function (options) {\n\t\toptions = $.extend(\n\t\t\t{\n\t\t\t\ttableClass: ''\n\t\t\t},\n\t\t\toptions\n\t\t);\n\n\t\treturn function (api, rowIdx, columns) {\n\t\t\tvar data = $.map(columns, function (col) {\n\t\t\t\tvar klass = col.className ? 'class=\"' + col.className + '\"' : '';\n\n\t\t\t\treturn (\n\t\t\t\t\t'<tr ' +\n\t\t\t\t\tklass +\n\t\t\t\t\t' data-dt-row=\"' +\n\t\t\t\t\tcol.rowIndex +\n\t\t\t\t\t'\" data-dt-column=\"' +\n\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t'\">' +\n\t\t\t\t\t'<td>' +\n\t\t\t\t\tcol.title +\n\t\t\t\t\t':' +\n\t\t\t\t\t'</td> ' +\n\t\t\t\t\t'<td>' +\n\t\t\t\t\tcol.data +\n\t\t\t\t\t'</td>' +\n\t\t\t\t\t'</tr>'\n\t\t\t\t);\n\t\t\t}).join('');\n\n\t\t\treturn $('<table class=\"' + options.tableClass + ' dtr-details\" width=\"100%\"/>').append(\n\t\t\t\tdata\n\t\t\t);\n\t\t};\n\t}\n};\n\n/**\n * Responsive default settings for initialisation\n *\n * @namespace\n * @name Responsive.defaults\n * @static\n */\nResponsive.defaults = {\n\t/**\n\t * List of breakpoints for the instance. Note that this means that each\n\t * instance can have its own breakpoints. Additionally, the breakpoints\n\t * cannot be changed once an instance has been creased.\n\t *\n\t * @type {Array}\n\t * @default Takes the value of `Responsive.breakpoints`\n\t */\n\tbreakpoints: Responsive.breakpoints,\n\n\t/**\n\t * Enable / disable auto hiding calculations. It can help to increase\n\t * performance slightly if you disable this option, but all columns would\n\t * need to have breakpoint classes assigned to them\n\t *\n\t * @type {Boolean}\n\t * @default  `true`\n\t */\n\tauto: true,\n\n\t/**\n\t * Details control. If given as a string value, the `type` property of the\n\t * default object is set to that value, and the defaults used for the rest\n\t * of the object - this is for ease of implementation.\n\t *\n\t * The object consists of the following properties:\n\t *\n\t * * `display` - A function that is used to show and hide the hidden details\n\t * * `renderer` - function that is called for display of the child row data.\n\t *   The default function will show the data from the hidden columns\n\t * * `target` - Used as the selector for what objects to attach the child\n\t *   open / close to\n\t * * `type` - `false` to disable the details display, `inline` or `column`\n\t *   for the two control types\n\t *\n\t * @type {Object|string}\n\t */\n\tdetails: {\n\t\tdisplay: Responsive.display.childRow,\n\n\t\trenderer: Responsive.renderer.listHidden(),\n\n\t\ttarget: 0,\n\n\t\ttype: 'inline'\n\t},\n\n\t/**\n\t * Orthogonal data request option. This is used to define the data type\n\t * requested when Responsive gets the data to show in the child row.\n\t *\n\t * @type {String}\n\t */\n\torthogonal: 'display'\n};\n\n/*\n * API\n */\nvar Api = $.fn.dataTable.Api;\n\n// Doesn't do anything - work around for a bug in DT... Not documented\nApi.register('responsive()', function () {\n\treturn this;\n});\n\nApi.register('responsive.index()', function (li) {\n\tli = $(li);\n\n\treturn {\n\t\tcolumn: li.data('dtr-index'),\n\t\trow: li.parent().data('dtr-index')\n\t};\n});\n\nApi.register('responsive.rebuild()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx._responsive) {\n\t\t\tctx._responsive._classLogic();\n\t\t}\n\t});\n});\n\nApi.register('responsive.recalc()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx._responsive) {\n\t\t\tctx._responsive._resizeAuto();\n\t\t\tctx._responsive._resize();\n\t\t}\n\t});\n});\n\nApi.register('responsive.hasHidden()', function () {\n\tvar ctx = this.context[0];\n\n\treturn ctx._responsive\n\t\t? $.inArray(false, ctx._responsive._responsiveOnlyHidden()) !== -1\n\t\t: false;\n});\n\nApi.registerPlural('columns().responsiveHidden()', 'column().responsiveHidden()', function () {\n\treturn this.iterator(\n\t\t'column',\n\t\tfunction (settings, column) {\n\t\t\treturn settings._responsive\n\t\t\t\t? settings._responsive._responsiveOnlyHidden()[column]\n\t\t\t\t: false;\n\t\t},\n\t\t1\n\t);\n});\n\n/**\n * Version information\n *\n * @name Responsive.version\n * @static\n */\nResponsive.version = '2.5.0';\n\n$.fn.dataTable.Responsive = Responsive;\n$.fn.DataTable.Responsive = Responsive;\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('preInit.dt.dtr', function (e, settings, json) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tif (\n\t\t$(settings.nTable).hasClass('responsive') ||\n\t\t$(settings.nTable).hasClass('dt-responsive') ||\n\t\tsettings.oInit.responsive ||\n\t\tDataTable.defaults.responsive\n\t) {\n\t\tvar init = settings.oInit.responsive;\n\n\t\tif (init !== false) {\n\t\t\tnew Responsive(settings, $.isPlainObject(init) ? init : {});\n\t\t}\n\t}\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/js/responsive.bootstrap.js",
    "content": "/*! Bootstrap integration for DataTables' Responsive\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-responsive'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Responsive ) {\n\t\t\t\trequire('datatables.net-responsive')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nvar _display = DataTable.Responsive.display;\nvar _original = _display.modal;\nvar _modal = $(\n\t'<div class=\"modal fade dtr-bs-modal\" role=\"dialog\">' +\n\t\t'<div class=\"modal-dialog\" role=\"document\">' +\n\t\t'<div class=\"modal-content\">' +\n\t\t'<div class=\"modal-header\">' +\n\t\t'<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>' +\n\t\t'</div>' +\n\t\t'<div class=\"modal-body\"/>' +\n\t\t'</div>' +\n\t\t'</div>' +\n\t\t'</div>'\n);\n\n_display.modal = function (options) {\n\treturn function (row, update, render, closeCallback) {\n\t\tif (!$.fn.modal) {\n\t\t\treturn _original(row, update, render, closeCallback);\n\t\t}\n\t\telse {\n\t\t\tif (!update) {\n\t\t\t\tif (options && options.header) {\n\t\t\t\t\tvar header = _modal.find('div.modal-header');\n\t\t\t\t\tvar button = header.find('button').detach();\n\n\t\t\t\t\theader\n\t\t\t\t\t\t.empty()\n\t\t\t\t\t\t.append('<h4 class=\"modal-title\">' + options.header(row) + '</h4>')\n\t\t\t\t\t\t.prepend(button);\n\t\t\t\t}\n\n\t\t\t\t_modal.find('div.modal-body').empty().append(render());\n\n\t\t\t\t_modal\n\t\t\t\t\t.data('dtr-row-idx', row.index())\n\t\t\t\t\t.one('hidden.bs.modal', closeCallback)\n\t\t\t\t\t.appendTo('body')\n\t\t\t\t\t.modal();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ($.contains(document, _modal[0]) && row.index() === _modal.data('dtr-row-idx')) {\n\t\t\t\t\t_modal.find('div.modal-body').empty().append(render());\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Modal not shown - do nothing\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t};\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/js/responsive.bootstrap4.js",
    "content": "/*! Bootstrap 4 integration for DataTables' Responsive\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-responsive'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Responsive ) {\n\t\t\t\trequire('datatables.net-responsive')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nvar _display = DataTable.Responsive.display;\nvar _original = _display.modal;\nvar _modal = $(\n\t'<div class=\"modal fade dtr-bs-modal\" role=\"dialog\">' +\n\t\t'<div class=\"modal-dialog\" role=\"document\">' +\n\t\t'<div class=\"modal-content\">' +\n\t\t'<div class=\"modal-header\">' +\n\t\t'<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>' +\n\t\t'</div>' +\n\t\t'<div class=\"modal-body\"/>' +\n\t\t'</div>' +\n\t\t'</div>' +\n\t\t'</div>'\n);\n\n_display.modal = function (options) {\n\treturn function (row, update, render, closeCallback) {\n\t\tif (!$.fn.modal) {\n\t\t\treturn _original(row, update, render, closeCallback);\n\t\t}\n\t\telse {\n\t\t\tif (!update) {\n\t\t\t\tif (options && options.header) {\n\t\t\t\t\tvar header = _modal.find('div.modal-header');\n\t\t\t\t\tvar button = header.find('button').detach();\n\n\t\t\t\t\theader\n\t\t\t\t\t\t.empty()\n\t\t\t\t\t\t.append('<h4 class=\"modal-title\">' + options.header(row) + '</h4>')\n\t\t\t\t\t\t.append(button);\n\t\t\t\t}\n\n\t\t\t\t_modal.find('div.modal-body').empty().append(render());\n\n\t\t\t\t_modal\n\t\t\t\t\t.data('dtr-row-idx', row.index())\n\t\t\t\t\t.one('hidden.bs.modal', closeCallback)\n\t\t\t\t\t.appendTo('body')\n\t\t\t\t\t.modal();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ($.contains(document, _modal[0]) && row.index() === _modal.data('dtr-row-idx')) {\n\t\t\t\t\t_modal.find('div.modal-body').empty().append(render());\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Modal not shown - do nothing\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t};\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/js/responsive.bootstrap5.js",
    "content": "/*! Bootstrap 5 integration for DataTables' Responsive\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-responsive'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Responsive ) {\n\t\t\t\trequire('datatables.net-responsive')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nvar _display = DataTable.Responsive.display;\nvar _original = _display.modal;\nvar _modal = $(\n\t'<div class=\"modal fade dtr-bs-modal\" role=\"dialog\">' +\n\t\t'<div class=\"modal-dialog\" role=\"document\">' +\n\t\t'<div class=\"modal-content\">' +\n\t\t'<div class=\"modal-header\">' +\n\t\t'<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>' +\n\t\t'</div>' +\n\t\t'<div class=\"modal-body\"/>' +\n\t\t'</div>' +\n\t\t'</div>' +\n\t\t'</div>'\n);\nvar modal;\n\n// Note this could be undefined at the time of initialisation - the\n// DataTable.Responsive.bootstrap function can be used to set a different\n// bootstrap object\nvar _bs = window.bootstrap;\n\nDataTable.Responsive.bootstrap = function (bs) {\n\t_bs = bs;\n};\n\n_display.modal = function (options) {\n\tif (!modal) {\n\t\tmodal = new _bs.Modal(_modal[0]);\n\t}\n\n\treturn function (row, update, render, closeCallback) {\n\t\tif (!$.fn.modal) {\n\t\t\treturn _original(row, update, render, closeCallback);\n\t\t}\n\t\telse {\n\t\t\tif (!update) {\n\t\t\t\tif (options && options.header) {\n\t\t\t\t\tvar header = _modal.find('div.modal-header');\n\t\t\t\t\tvar button = header.find('button').detach();\n\n\t\t\t\t\theader\n\t\t\t\t\t\t.empty()\n\t\t\t\t\t\t.append('<h4 class=\"modal-title\">' + options.header(row) + '</h4>')\n\t\t\t\t\t\t.append(button);\n\t\t\t\t}\n\n\t\t\t\t_modal.find('div.modal-body').empty().append(render());\n\n\t\t\t\t_modal\n\t\t\t\t\t.data('dtr-row-idx', row.index())\n\t\t\t\t\t.one('hidden.bs.modal', closeCallback)\n\t\t\t\t\t.appendTo('body')\n\t\t\t\t\t.modal();\n\n\t\t\t\tmodal.show();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ($.contains(document, _modal[0]) && row.index() === _modal.data('dtr-row-idx')) {\n\t\t\t\t\t_modal.find('div.modal-body').empty().append(render());\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Modal not shown for this row - do nothing\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t};\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/js/responsive.bulma.js",
    "content": "/*! Bulma integration for DataTables' Responsive\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-responsive'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Responsive ) {\n\t\t\t\trequire('datatables.net-responsive')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nvar _display = DataTable.Responsive.display;\nvar _original = _display.modal;\nvar _modal = $(\n\t'<div class=\"modal DTED\">' +\n\t\t'<div class=\"modal-background\"></div>' +\n\t\t'<div class=\"modal-content\">' +\n\t\t'<div class=\"modal-header\">' +\n\t\t'<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>' +\n\t\t'</div>' +\n\t\t'<div class=\"modal-body\"/>' +\n\t\t'</div>' +\n\t\t'<button class=\"modal-close is-large\" aria-label=\"close\"></button>' +\n\t\t'</div>'\n);\n\n_display.modal = function (options) {\n\treturn function (row, update, render, closeCallback) {\n\t\tif (!update) {\n\t\t\tif (options && options.header) {\n\t\t\t\tvar header = _modal.find('div.modal-header');\n\t\t\t\theader.find('button').detach();\n\n\t\t\t\theader\n\t\t\t\t\t.empty()\n\t\t\t\t\t.append('<h4 class=\"modal-title subtitle\">' + options.header(row) + '</h4>');\n\t\t\t}\n\n\t\t\t_modal.find('div.modal-body').empty().append(render());\n\n\t\t\t_modal.data('dtr-row-idx', row.index()).appendTo('body');\n\n\t\t\t_modal.addClass('is-active is-clipped');\n\n\t\t\t$('.modal-close').one('click', function () {\n\t\t\t\t_modal.removeClass('is-active is-clipped');\n\t\t\t\tcloseCallback();\n\t\t\t});\n\t\t\t$('.modal-background').one('click', function () {\n\t\t\t\t_modal.removeClass('is-active is-clipped');\n\t\t\t\tcloseCallback();\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tif ($.contains(document, _modal[0]) && row.index() === _modal.data('dtr-row-idx')) {\n\t\t\t\t_modal.find('div.modal-body').empty().append(render());\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Modal not shown - do nothing\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t};\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/js/responsive.dataTables.js",
    "content": "/*! DataTables styling wrapper for Responsive\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-responsive'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Responsive ) {\n\t\t\t\trequire('datatables.net-responsive')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/js/responsive.foundation.js",
    "content": "/*! Foundation integration for DataTables' Responsive\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-responsive'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Responsive ) {\n\t\t\t\trequire('datatables.net-responsive')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nvar _display = DataTable.Responsive.display;\nvar _original = _display.modal;\n\n_display.modal = function (options) {\n\treturn function (row, update, render, closeCallback) {\n\t\tif (!$.fn.foundation) {\n\t\t\treturn _original(row, update, render, closeCallback);\n\t\t}\n\t\telse {\n\t\t\tif (!update) {\n\t\t\t\tvar modalContainer = $('<div class=\"reveal-overlay\" style=\"display:block\"/>');\n\t\t\t\t$(\n\t\t\t\t\t'<div class=\"reveal reveal-modal\" style=\"display:block; top: 150px;\" data-reveal/>'\n\t\t\t\t)\n\t\t\t\t\t.append('<button class=\"close-button\" aria-label=\"Close\">&#215;</button>')\n\t\t\t\t\t.append(\n\t\t\t\t\t\toptions && options.header ? '<h4>' + options.header(row) + '</h4>' : null\n\t\t\t\t\t)\n\t\t\t\t\t.append(render())\n\t\t\t\t\t.appendTo(modalContainer);\n\n\t\t\t\tmodalContainer.appendTo('body');\n\n\t\t\t\t$('button.close-button').on('click', function () {\n\t\t\t\t\t$('.reveal-overlay').remove();\n\t\t\t\t\tcloseCallback();\n\t\t\t\t});\n\t\t\t\t$('.reveal-overlay').on('click', function () {\n\t\t\t\t\t$('.reveal-overlay').remove();\n\t\t\t\t\tcloseCallback();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t};\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/js/responsive.jqueryui.js",
    "content": "/*! jQuery UI integration for DataTables' Responsive\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-responsive'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Responsive ) {\n\t\t\t\trequire('datatables.net-responsive')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nvar _display = DataTable.Responsive.display;\nvar _original = _display.modal;\n\n_display.modal = function (options) {\n\treturn function (row, update, render, closeCallback) {\n\t\tif (!$.fn.dialog) {\n\t\t\treturn _original(row, update, render, closeCallback);\n\t\t}\n\t\telse {\n\t\t\tif (!update) {\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.append(render())\n\t\t\t\t\t.appendTo('body')\n\t\t\t\t\t.dialog(\n\t\t\t\t\t\t$.extend(\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: options && options.header ? options.header(row) : '',\n\t\t\t\t\t\t\t\twidth: 500\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toptions.dialog\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t};\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Responsive-2.5.0/js/responsive.semanticui.js",
    "content": "/*! Bootstrap integration for DataTables' Responsive\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-responsive'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Responsive ) {\n\t\t\t\trequire('datatables.net-responsive')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nvar _display = DataTable.Responsive.display;\nvar _original = _display.modal;\nvar _modal = $(\n\t'<div class=\"ui modal\" role=\"dialog\">' +\n\t\t'<div class=\"header\">' +\n\t\t'<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>' +\n\t\t'</div>' +\n\t\t'<div class=\"content\"/>' +\n\t\t'</div>'\n);\n\n_display.modal = function (options) {\n\treturn function (row, update, render, closeCallback) {\n\t\tif (!$.fn.modal) {\n\t\t\treturn _original(row, update, render, closeCallback);\n\t\t}\n\t\telse {\n\t\t\tif (!update) {\n\t\t\t\tif (options && options.header) {\n\t\t\t\t\t_modal\n\t\t\t\t\t\t.find('div.header')\n\t\t\t\t\t\t.empty()\n\t\t\t\t\t\t.append('<h4 class=\"title\">' + options.header(row) + '</h4>');\n\t\t\t\t}\n\n\t\t\t\t_modal.find('div.content').empty().append(render());\n\n\t\t\t\t// Only need to attach the first time\n\t\t\t\tif (!_modal.parent().hasClass('dimmer')) {\n\t\t\t\t\t_modal.appendTo('body');\n\t\t\t\t}\n\n\t\t\t\t_modal.modal('show');\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t};\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/css/rowGroup.bootstrap.css",
    "content": "table.dataTable tr.dtrg-group th {\n  background-color: rgba(0, 0, 0, 0.1);\n  text-align: left;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-0 th {\n  font-weight: bold;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-1 th,\ntable.dataTable tr.dtrg-group.dtrg-level-2 th,\ntable.dataTable tr.dtrg-group.dtrg-level-3 th,\ntable.dataTable tr.dtrg-group.dtrg-level-4 th,\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.05);\n  padding-top: 0.25em;\n  padding-bottom: 0.25em;\n  padding-left: 2em;\n  font-size: 0.9em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-2 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 2.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-3 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-4 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 4em;\n}\n\nhtml.dark table.dataTable tr.dtrg-group th {\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-1 th {\n  background-color: rgba(255, 255, 255, 0.05);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-2 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-3 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-4 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(255, 255, 255, 0.01);\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/css/rowGroup.bootstrap4.css",
    "content": "table.dataTable tr.dtrg-group th {\n  background-color: rgba(0, 0, 0, 0.1);\n  text-align: left;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-0 th {\n  font-weight: bold;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-1 th,\ntable.dataTable tr.dtrg-group.dtrg-level-2 th,\ntable.dataTable tr.dtrg-group.dtrg-level-3 th,\ntable.dataTable tr.dtrg-group.dtrg-level-4 th,\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.05);\n  padding-top: 0.25em;\n  padding-bottom: 0.25em;\n  padding-left: 2em;\n  font-size: 0.9em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-2 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 2.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-3 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-4 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 4em;\n}\n\nhtml.dark table.dataTable tr.dtrg-group th {\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-1 th {\n  background-color: rgba(255, 255, 255, 0.05);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-2 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-3 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-4 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(255, 255, 255, 0.01);\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/css/rowGroup.bootstrap5.css",
    "content": "table.dataTable tr.dtrg-group th {\n  background-color: rgba(0, 0, 0, 0.1);\n  text-align: left;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-0 th {\n  font-weight: bold;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-1 th,\ntable.dataTable tr.dtrg-group.dtrg-level-2 th,\ntable.dataTable tr.dtrg-group.dtrg-level-3 th,\ntable.dataTable tr.dtrg-group.dtrg-level-4 th,\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.05);\n  padding-top: 0.25em;\n  padding-bottom: 0.25em;\n  padding-left: 2em;\n  font-size: 0.9em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-2 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 2.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-3 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-4 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 4em;\n}\n\nhtml.dark table.dataTable tr.dtrg-group th {\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-1 th {\n  background-color: rgba(255, 255, 255, 0.05);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-2 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-3 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-4 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(255, 255, 255, 0.01);\n}\n\ntable.dataTable.table-striped tr.dtrg-level-0 {\n  background-color: rgba(0, 0, 0, 0.1);\n}\ntable.dataTable.table-striped tr.dtrg-level-1 {\n  background-color: rgba(0, 0, 0, 0.05);\n}\ntable.dataTable.table-striped tr.dtrg-level-2,\ntable.dataTable.table-striped tr.dtrg-level-3,\ntable.dataTable.table-striped tr.dtrg-level-4,\ntable.dataTable.table-striped tr.dtrg-level-5 {\n  background-color: rgba(0, 0, 0, 0.01);\n}\ntable.dataTable.table-striped tr.dtrg-level-1 tr.dtrg-level-2 th,\ntable.dataTable.table-striped tr.dtrg-level-3 th,\ntable.dataTable.table-striped tr.dtrg-level-4 th,\ntable.dataTable.table-striped tr.dtrg-level-5 th {\n  background-color: transparent;\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/css/rowGroup.bulma.css",
    "content": "table.dataTable tr.dtrg-group th {\n  background-color: rgba(0, 0, 0, 0.1);\n  text-align: left;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-0 th {\n  font-weight: bold;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-1 th,\ntable.dataTable tr.dtrg-group.dtrg-level-2 th,\ntable.dataTable tr.dtrg-group.dtrg-level-3 th,\ntable.dataTable tr.dtrg-group.dtrg-level-4 th,\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.05);\n  padding-top: 0.25em;\n  padding-bottom: 0.25em;\n  padding-left: 2em;\n  font-size: 0.9em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-2 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 2.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-3 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-4 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 4em;\n}\n\nhtml.dark table.dataTable tr.dtrg-group th {\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-1 th {\n  background-color: rgba(255, 255, 255, 0.05);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-2 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-3 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-4 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(255, 255, 255, 0.01);\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/css/rowGroup.dataTables.css",
    "content": "table.dataTable tr.dtrg-group th {\n  background-color: rgba(0, 0, 0, 0.1);\n  text-align: left;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-0 th {\n  font-weight: bold;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-1 th,\ntable.dataTable tr.dtrg-group.dtrg-level-2 th,\ntable.dataTable tr.dtrg-group.dtrg-level-3 th,\ntable.dataTable tr.dtrg-group.dtrg-level-4 th,\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.05);\n  padding-top: 0.25em;\n  padding-bottom: 0.25em;\n  padding-left: 2em;\n  font-size: 0.9em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-2 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 2.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-3 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-4 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 4em;\n}\n\nhtml.dark table.dataTable tr.dtrg-group th {\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-1 th {\n  background-color: rgba(255, 255, 255, 0.05);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-2 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-3 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-4 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(255, 255, 255, 0.01);\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/css/rowGroup.foundation.css",
    "content": "table.dataTable tr.dtrg-group th {\n  background-color: rgba(0, 0, 0, 0.1);\n  text-align: left;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-0 th {\n  font-weight: bold;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-1 th,\ntable.dataTable tr.dtrg-group.dtrg-level-2 th,\ntable.dataTable tr.dtrg-group.dtrg-level-3 th,\ntable.dataTable tr.dtrg-group.dtrg-level-4 th,\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.05);\n  padding-top: 0.25em;\n  padding-bottom: 0.25em;\n  padding-left: 2em;\n  font-size: 0.9em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-2 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 2.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-3 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-4 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 4em;\n}\n\nhtml.dark table.dataTable tr.dtrg-group th {\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-1 th {\n  background-color: rgba(255, 255, 255, 0.05);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-2 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-3 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-4 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(255, 255, 255, 0.01);\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/css/rowGroup.jqueryui.css",
    "content": "table.dataTable tr.dtrg-group th {\n  background-color: rgba(0, 0, 0, 0.1);\n  text-align: left;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-0 th {\n  font-weight: bold;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-1 th,\ntable.dataTable tr.dtrg-group.dtrg-level-2 th,\ntable.dataTable tr.dtrg-group.dtrg-level-3 th,\ntable.dataTable tr.dtrg-group.dtrg-level-4 th,\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.05);\n  padding-top: 0.25em;\n  padding-bottom: 0.25em;\n  padding-left: 2em;\n  font-size: 0.9em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-2 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 2.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-3 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-4 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 4em;\n}\n\nhtml.dark table.dataTable tr.dtrg-group th {\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-1 th {\n  background-color: rgba(255, 255, 255, 0.05);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-2 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-3 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-4 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(255, 255, 255, 0.01);\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/css/rowGroup.semanticui.css",
    "content": "table.dataTable tr.dtrg-group th {\n  background-color: #F9FAFB;\n  text-align: left;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-0 th {\n  font-weight: bold;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-1 th,\ntable.dataTable tr.dtrg-group.dtrg-level-2 th,\ntable.dataTable tr.dtrg-group.dtrg-level-3 th,\ntable.dataTable tr.dtrg-group.dtrg-level-4 th,\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.05);\n  padding-top: 0.25em;\n  padding-bottom: 0.25em;\n  padding-left: 2em;\n  font-size: 0.9em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-2 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 2.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-3 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-4 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 4em;\n}\n\nhtml.dark table.dataTable tr.dtrg-group th {\n  background-color: #060504;\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-1 th {\n  background-color: rgba(255, 255, 255, 0.05);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-2 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-3 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-4 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(255, 255, 255, 0.01);\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/js/dataTables.rowGroup.js",
    "content": "/*! RowGroup 1.4.1\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     RowGroup\n * @description RowGrouping for DataTables\n * @version     1.4.1\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     datatables.net\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\nvar RowGroup = function (dt, opts) {\n\t// Sanity check that we are using DataTables 1.10 or newer\n\tif (!DataTable.versionCheck || !DataTable.versionCheck('1.10.8')) {\n\t\tthrow 'RowGroup requires DataTables 1.10.8 or newer';\n\t}\n\n\t// User and defaults configuration object\n\tthis.c = $.extend(true, {}, DataTable.defaults.rowGroup, RowGroup.defaults, opts);\n\n\t// Internal settings\n\tthis.s = {\n\t\tdt: new DataTable.Api(dt)\n\t};\n\n\t// DOM items\n\tthis.dom = {};\n\n\t// Check if row grouping has already been initialised on this table\n\tvar settings = this.s.dt.settings()[0];\n\tvar existing = settings.rowGroup;\n\tif (existing) {\n\t\treturn existing;\n\t}\n\n\tsettings.rowGroup = this;\n\tthis._constructor();\n};\n\n$.extend(RowGroup.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * API methods for DataTables API interface\n\t */\n\n\t/**\n\t * Get/set the grouping data source - need to call draw after this is\n\t * executed as a setter\n\t * @returns string~RowGroup\n\t */\n\tdataSrc: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.c.dataSrc;\n\t\t}\n\n\t\tvar dt = this.s.dt;\n\n\t\tthis.c.dataSrc = val;\n\n\t\t$(dt.table().node()).triggerHandler('rowgroup-datasrc.dt', [dt, val]);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Disable - need to call draw after this is executed\n\t * @returns RowGroup\n\t */\n\tdisable: function () {\n\t\tthis.c.enable = false;\n\t\treturn this;\n\t},\n\n\t/**\n\t * Enable - need to call draw after this is executed\n\t * @returns RowGroup\n\t */\n\tenable: function (flag) {\n\t\tif (flag === false) {\n\t\t\treturn this.disable();\n\t\t}\n\n\t\tthis.c.enable = true;\n\t\treturn this;\n\t},\n\n\t/**\n\t * Get enabled flag\n\t * @returns boolean\n\t */\n\tenabled: function () {\n\t\treturn this.c.enable;\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar hostSettings = dt.settings()[0];\n\n\t\tdt.on('draw.dtrg', function (e, s) {\n\t\t\tif (that.c.enable && hostSettings === s) {\n\t\t\t\tthat._draw();\n\t\t\t}\n\t\t});\n\n\t\tdt.on('column-visibility.dt.dtrg responsive-resize.dt.dtrg', function () {\n\t\t\tthat._adjustColspan();\n\t\t});\n\n\t\tdt.on('destroy', function () {\n\t\t\tdt.off('.dtrg');\n\t\t});\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Adjust column span when column visibility changes\n\t * @private\n\t */\n\t_adjustColspan: function () {\n\t\t$('tr.' + this.c.className, this.s.dt.table().body())\n\t\t\t.find('th:visible, td:visible')\n\t\t\t.attr('colspan', this._colspan());\n\t},\n\n\t/**\n\t * Get the number of columns that a grouping row should span\n\t * @private\n\t */\n\t_colspan: function () {\n\t\treturn this.s.dt\n\t\t\t.columns()\n\t\t\t.visible()\n\t\t\t.reduce(function (a, b) {\n\t\t\t\treturn a + b;\n\t\t\t}, 0);\n\t},\n\n\t/**\n\t * Update function that is called whenever we need to draw the grouping rows.\n\t * This is basically a bootstrap for the self iterative _group and _groupDisplay\n\t * methods\n\t * @private\n\t */\n\t_draw: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar groupedRows = this._group(0, dt.rows({ page: 'current' }).indexes());\n\n\t\tthis._groupDisplay(0, groupedRows);\n\t},\n\n\t/**\n\t * Get the grouping information from a data set (index) of rows\n\t * @param {number} level Nesting level\n\t * @param {DataTables.Api} rows API of the rows to consider for this group\n\t * @returns {object[]} Nested grouping information - it is structured like this:\n\t *\t{\n\t *\t\tdataPoint: 'Edinburgh',\n\t *\t\trows: [ 1,2,3,4,5,6,7 ],\n\t *\t\tchildren: [ {\n\t *\t\t\tdataPoint: 'developer'\n\t *\t\t\trows: [ 1, 2, 3 ]\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tdataPoint: 'support',\n\t *\t\t\trows: [ 4, 5, 6, 7 ]\n\t *\t\t} ]\n\t *\t}\n\t * @private\n\t */\n\t_group: function (level, rows) {\n\t\tvar fns = Array.isArray(this.c.dataSrc) ? this.c.dataSrc : [this.c.dataSrc];\n\t\tvar fn = DataTable.ext.oApi._fnGetObjectDataFn(fns[level]);\n\t\tvar dt = this.s.dt;\n\t\tvar group, last;\n\t\tvar data = [];\n\t\tvar that = this;\n\n\t\tfor (var i = 0, ien = rows.length; i < ien; i++) {\n\t\t\tvar rowIndex = rows[i];\n\t\t\tvar rowData = dt.row(rowIndex).data();\n\t\t\tvar group = fn(rowData);\n\n\t\t\tif (group === null || group === undefined) {\n\t\t\t\tgroup = that.c.emptyDataGroup;\n\t\t\t}\n\n\t\t\tif (last === undefined || group !== last) {\n\t\t\t\tdata.push({\n\t\t\t\t\tdataPoint: group,\n\t\t\t\t\trows: []\n\t\t\t\t});\n\n\t\t\t\tlast = group;\n\t\t\t}\n\n\t\t\tdata[data.length - 1].rows.push(rowIndex);\n\t\t}\n\n\t\tif (fns[level + 1] !== undefined) {\n\t\t\tfor (var i = 0, ien = data.length; i < ien; i++) {\n\t\t\t\tdata[i].children = this._group(level + 1, data[i].rows);\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t/**\n\t * Row group display - insert the rows into the document\n\t * @param {number} level Nesting level\n\t * @param {object[]} groups Takes the nested array from `_group`\n\t * @private\n\t */\n\t_groupDisplay: function (level, groups) {\n\t\tvar dt = this.s.dt;\n\t\tvar display;\n\n\t\tfor (var i = 0, ien = groups.length; i < ien; i++) {\n\t\t\tvar group = groups[i];\n\t\t\tvar groupName = group.dataPoint;\n\t\t\tvar row;\n\t\t\tvar rows = group.rows;\n\n\t\t\tif (this.c.startRender) {\n\t\t\t\tdisplay = this.c.startRender.call(this, dt.rows(rows), groupName, level);\n\t\t\t\trow = this._rowWrap(display, this.c.startClassName, level);\n\n\t\t\t\tif (row) {\n\t\t\t\t\trow.insertBefore(dt.row(rows[0]).node());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.c.endRender) {\n\t\t\t\tdisplay = this.c.endRender.call(this, dt.rows(rows), groupName, level);\n\t\t\t\trow = this._rowWrap(display, this.c.endClassName, level);\n\n\t\t\t\tif (row) {\n\t\t\t\t\trow.insertAfter(dt.row(rows[rows.length - 1]).node());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (group.children) {\n\t\t\t\tthis._groupDisplay(level + 1, group.children);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Take a rendered value from an end user and make it suitable for display\n\t * as a row, by wrapping it in a row, or detecting that it is a row.\n\t * @param {node|jQuery|string} display Display value\n\t * @param {string} className Class to add to the row\n\t * @param {array} group\n\t * @param {number} group level\n\t * @private\n\t */\n\t_rowWrap: function (display, className, level) {\n\t\tvar row;\n\n\t\tif (display === null || display === '') {\n\t\t\tdisplay = this.c.emptyDataGroup;\n\t\t}\n\n\t\tif (display === undefined || display === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (\n\t\t\ttypeof display === 'object' &&\n\t\t\tdisplay.nodeName &&\n\t\t\tdisplay.nodeName.toLowerCase() === 'tr'\n\t\t) {\n\t\t\trow = $(display);\n\t\t}\n\t\telse if (\n\t\t\tdisplay instanceof $ &&\n\t\t\tdisplay.length &&\n\t\t\tdisplay[0].nodeName.toLowerCase() === 'tr'\n\t\t) {\n\t\t\trow = display;\n\t\t}\n\t\telse {\n\t\t\trow = $('<tr/>').append(\n\t\t\t\t$('<th/>').attr('colspan', this._colspan()).attr('scope', 'row').append(display)\n\t\t\t);\n\t\t}\n\n\t\treturn row\n\t\t\t.addClass(this.c.className)\n\t\t\t.addClass(className)\n\t\t\t.addClass('dtrg-level-' + level);\n\t}\n});\n\n/**\n * RowGroup default settings for initialisation\n *\n * @namespace\n * @name RowGroup.defaults\n * @static\n */\nRowGroup.defaults = {\n\t/**\n\t * Class to apply to grouping rows - applied to both the start and\n\t * end grouping rows.\n\t * @type string\n\t */\n\tclassName: 'dtrg-group',\n\n\t/**\n\t * Data property from which to read the grouping information\n\t * @type string|integer|array\n\t */\n\tdataSrc: 0,\n\n\t/**\n\t * Text to show if no data is found for a group\n\t * @type string\n\t */\n\temptyDataGroup: 'No group',\n\n\t/**\n\t * Initial enablement state\n\t * @boolean\n\t */\n\tenable: true,\n\n\t/**\n\t * Class name to give to the end grouping row\n\t * @type string\n\t */\n\tendClassName: 'dtrg-end',\n\n\t/**\n\t * End grouping label function\n\t * @function\n\t */\n\tendRender: null,\n\n\t/**\n\t * Class name to give to the start grouping row\n\t * @type string\n\t */\n\tstartClassName: 'dtrg-start',\n\n\t/**\n\t * Start grouping label function\n\t * @function\n\t */\n\tstartRender: function (rows, group) {\n\t\treturn group;\n\t}\n};\n\nRowGroup.version = '1.4.1';\n\n$.fn.dataTable.RowGroup = RowGroup;\n$.fn.DataTable.RowGroup = RowGroup;\n\nDataTable.Api.register('rowGroup()', function () {\n\treturn this;\n});\n\nDataTable.Api.register('rowGroup().disable()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.rowGroup) {\n\t\t\tctx.rowGroup.enable(false);\n\t\t}\n\t});\n});\n\nDataTable.Api.register('rowGroup().enable()', function (opts) {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.rowGroup) {\n\t\t\tctx.rowGroup.enable(opts === undefined ? true : opts);\n\t\t}\n\t});\n});\n\nDataTable.Api.register('rowGroup().enabled()', function () {\n\tvar ctx = this.context;\n\n\treturn ctx.length && ctx[0].rowGroup ? ctx[0].rowGroup.enabled() : false;\n});\n\nDataTable.Api.register('rowGroup().dataSrc()', function (val) {\n\tif (val === undefined) {\n\t\treturn this.context[0].rowGroup.dataSrc();\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.rowGroup) {\n\t\t\tctx.rowGroup.dataSrc(val);\n\t\t}\n\t});\n});\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('preInit.dt.dtrg', function (e, settings, json) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.rowGroup;\n\tvar defaults = DataTable.defaults.rowGroup;\n\n\tif (init || defaults) {\n\t\tvar opts = $.extend({}, defaults, init);\n\n\t\tif (init !== false) {\n\t\t\tnew RowGroup(settings, opts);\n\t\t}\n\t}\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/js/rowGroup.bootstrap.js",
    "content": "/*! Bootstrap 3 styling wrapper for RowGroup\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-rowgroup'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowGroup ) {\n\t\t\t\trequire('datatables.net-rowgroup')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/js/rowGroup.bootstrap4.js",
    "content": "/*! Bootstrap 4 styling wrapper for RowGroup\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-rowgroup'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowGroup ) {\n\t\t\t\trequire('datatables.net-rowgroup')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/js/rowGroup.bootstrap5.js",
    "content": "/*! Bootstrap 5 styling wrapper for RowGroup\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-rowgroup'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowGroup ) {\n\t\t\t\trequire('datatables.net-rowgroup')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/js/rowGroup.bulma.js",
    "content": "/*! Bulma styling wrapper for RowGroup\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-rowgroup'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowGroup ) {\n\t\t\t\trequire('datatables.net-rowgroup')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/js/rowGroup.dataTables.js",
    "content": "/*! DataTables styling wrapper for RowGroup\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-rowgroup'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowGroup ) {\n\t\t\t\trequire('datatables.net-rowgroup')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/js/rowGroup.foundation.js",
    "content": "/*! Foundation styling wrapper for RowGroup\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-rowgroup'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowGroup ) {\n\t\t\t\trequire('datatables.net-rowgroup')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/js/rowGroup.jqueryui.js",
    "content": "/*! jQuery UI styling wrapper for RowGroup\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-rowgroup'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowGroup ) {\n\t\t\t\trequire('datatables.net-rowgroup')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowGroup-1.4.1/js/rowGroup.semanticui.js",
    "content": "/*! Semanic UI styling wrapper for RowGroup\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-rowgroup'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowGroup ) {\n\t\t\t\trequire('datatables.net-rowgroup')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/css/rowReorder.bootstrap.css",
    "content": "div.dt-rowReorder-float-parent {\n  table-layout: fixed;\n  outline: 2px solid #337ab7;\n  z-index: 2001;\n  position: absolute !important;\n  overflow: hidden;\n  border-radius: 3px;\n}\ndiv.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  opacity: 0.9;\n  background-color: white;\n  margin: 0 !important;\n}\n\ndiv.dt-rowReorder-float-parent.drop-not-allowed {\n  cursor: not-allowed;\n}\n\ntr.dt-rowReorder-moving {\n  outline: 2px solid #888;\n  outline-offset: -2px;\n}\n\nbody.dt-rowReorder-noOverflow {\n  overflow-x: hidden;\n}\n\ntable.dataTable td.reorder {\n  text-align: center;\n  cursor: move;\n}\n\nhtml.dark div.dt-rowReorder-float-parent {\n  outline-color: rgb(110, 168, 254);\n}\nhtml.dark div.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  background-color: var(--dt-html-background);\n}\nhtml.dark tr.dt-rowReorder-moving {\n  outline-color: #aaa;\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/css/rowReorder.bootstrap4.css",
    "content": "div.dt-rowReorder-float-parent {\n  table-layout: fixed;\n  outline: 2px solid #0275d8;\n  z-index: 2001;\n  position: absolute !important;\n  overflow: hidden;\n  border-radius: 3px;\n}\ndiv.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  opacity: 0.9;\n  background-color: white;\n  margin: 0 !important;\n}\n\ndiv.dt-rowReorder-float-parent.drop-not-allowed {\n  cursor: not-allowed;\n}\n\ntr.dt-rowReorder-moving {\n  outline: 2px solid #888;\n  outline-offset: -2px;\n}\n\nbody.dt-rowReorder-noOverflow {\n  overflow-x: hidden;\n}\n\ntable.dataTable td.reorder {\n  text-align: center;\n  cursor: move;\n}\n\nhtml.dark div.dt-rowReorder-float-parent {\n  outline-color: rgb(110, 168, 254);\n}\nhtml.dark div.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  background-color: var(--dt-html-background);\n}\nhtml.dark tr.dt-rowReorder-moving {\n  outline-color: #aaa;\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/css/rowReorder.bootstrap5.css",
    "content": "div.dt-rowReorder-float-parent {\n  table-layout: fixed;\n  outline: 2px solid #0d6efd;\n  z-index: 2001;\n  position: absolute !important;\n  overflow: hidden;\n  border-radius: 3px;\n}\ndiv.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  opacity: 0.9;\n  background-color: white;\n  margin: 0 !important;\n}\n\ndiv.dt-rowReorder-float-parent.drop-not-allowed {\n  cursor: not-allowed;\n}\n\ntr.dt-rowReorder-moving {\n  outline: 2px solid #888;\n  outline-offset: -2px;\n}\n\nbody.dt-rowReorder-noOverflow {\n  overflow-x: hidden;\n}\n\ntable.dataTable td.reorder {\n  text-align: center;\n  cursor: move;\n}\n\nhtml.dark div.dt-rowReorder-float-parent {\n  outline-color: rgb(110, 168, 254);\n}\nhtml.dark div.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  background-color: var(--dt-html-background);\n}\nhtml.dark tr.dt-rowReorder-moving {\n  outline-color: #aaa;\n}\n\nhtml[data-bs-theme=dark] div.dt-rowReorder-float-parent {\n  outline-color: rgb(13, 110, 253);\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/css/rowReorder.bulma.css",
    "content": "div.dt-rowReorder-float-parent {\n  table-layout: fixed;\n  outline: 2px solid #00d1b2;\n  z-index: 2001;\n  position: absolute !important;\n  overflow: hidden;\n  border-radius: 3px;\n}\ndiv.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  opacity: 0.9;\n  background-color: white;\n  margin: 0 !important;\n}\n\ndiv.dt-rowReorder-float-parent.drop-not-allowed {\n  cursor: not-allowed;\n}\n\ntr.dt-rowReorder-moving {\n  outline: 2px solid #888;\n  outline-offset: -2px;\n}\n\nbody.dt-rowReorder-noOverflow {\n  overflow-x: hidden;\n}\n\ntable.dataTable td.reorder {\n  text-align: center;\n  cursor: move;\n}\n\nhtml.dark div.dt-rowReorder-float-parent {\n  outline-color: rgb(110, 168, 254);\n}\nhtml.dark div.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  background-color: var(--dt-html-background);\n}\nhtml.dark tr.dt-rowReorder-moving {\n  outline-color: #aaa;\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/css/rowReorder.dataTables.css",
    "content": "div.dt-rowReorder-float-parent {\n  table-layout: fixed;\n  outline: 2px solid rgb(10, 89, 203);\n  z-index: 2001;\n  position: absolute !important;\n  overflow: hidden;\n  border-radius: 3px;\n}\ndiv.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  opacity: 0.9;\n  background-color: white;\n  margin: 0 !important;\n}\n\ndiv.dt-rowReorder-float-parent.drop-not-allowed {\n  cursor: not-allowed;\n}\n\ntr.dt-rowReorder-moving {\n  outline: 2px solid #888;\n  outline-offset: -2px;\n}\n\nbody.dt-rowReorder-noOverflow {\n  overflow-x: hidden;\n}\n\ntable.dataTable td.reorder {\n  text-align: center;\n  cursor: move;\n}\n\nhtml.dark div.dt-rowReorder-float-parent {\n  outline-color: rgb(110, 168, 254);\n}\nhtml.dark div.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  background-color: var(--dt-html-background);\n}\nhtml.dark tr.dt-rowReorder-moving {\n  outline-color: #aaa;\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/css/rowReorder.foundation.css",
    "content": "div.dt-rowReorder-float-parent {\n  table-layout: fixed;\n  outline: 2px solid #337ab7;\n  z-index: 2001;\n  position: absolute !important;\n  overflow: hidden;\n  border-radius: 3px;\n}\ndiv.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  opacity: 0.9;\n  background-color: white;\n  margin: 0 !important;\n}\n\ndiv.dt-rowReorder-float-parent.drop-not-allowed {\n  cursor: not-allowed;\n}\n\ntr.dt-rowReorder-moving {\n  outline: 2px solid #888;\n  outline-offset: -2px;\n}\n\nbody.dt-rowReorder-noOverflow {\n  overflow-x: hidden;\n}\n\ntable.dataTable td.reorder {\n  text-align: center;\n  cursor: move;\n}\n\nhtml.dark div.dt-rowReorder-float-parent {\n  outline-color: rgb(110, 168, 254);\n}\nhtml.dark div.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  background-color: var(--dt-html-background);\n}\nhtml.dark tr.dt-rowReorder-moving {\n  outline-color: #aaa;\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/css/rowReorder.jqueryui.css",
    "content": "div.dt-rowReorder-float-parent {\n  table-layout: fixed;\n  outline: 2px solid rgb(10, 89, 203);\n  z-index: 2001;\n  position: absolute !important;\n  overflow: hidden;\n  border-radius: 3px;\n}\ndiv.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  opacity: 0.9;\n  background-color: white;\n  margin: 0 !important;\n}\n\ndiv.dt-rowReorder-float-parent.drop-not-allowed {\n  cursor: not-allowed;\n}\n\ntr.dt-rowReorder-moving {\n  outline: 2px solid #888;\n  outline-offset: -2px;\n}\n\nbody.dt-rowReorder-noOverflow {\n  overflow-x: hidden;\n}\n\ntable.dataTable td.reorder {\n  text-align: center;\n  cursor: move;\n}\n\nhtml.dark div.dt-rowReorder-float-parent {\n  outline-color: rgb(110, 168, 254);\n}\nhtml.dark div.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  background-color: var(--dt-html-background);\n}\nhtml.dark tr.dt-rowReorder-moving {\n  outline-color: #aaa;\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/css/rowReorder.semanticui.css",
    "content": "div.dt-rowReorder-float-parent {\n  table-layout: fixed;\n  outline: 2px solid rgba(0, 0, 0, 0.05);\n  z-index: 2001;\n  position: absolute !important;\n  overflow: hidden;\n  border-radius: 3px;\n}\ndiv.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  opacity: 0.9;\n  background-color: white;\n  margin: 0 !important;\n}\n\ndiv.dt-rowReorder-float-parent.drop-not-allowed {\n  cursor: not-allowed;\n}\n\ntr.dt-rowReorder-moving {\n  outline: 2px solid #888;\n  outline-offset: -2px;\n}\n\nbody.dt-rowReorder-noOverflow {\n  overflow-x: hidden;\n}\n\ntable.dataTable td.reorder {\n  text-align: center;\n  cursor: move;\n}\n\nhtml.dark div.dt-rowReorder-float-parent {\n  outline-color: rgb(110, 168, 254);\n}\nhtml.dark div.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  background-color: var(--dt-html-background);\n}\nhtml.dark tr.dt-rowReorder-moving {\n  outline-color: #aaa;\n}\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/js/dataTables.rowReorder.js",
    "content": "/*! RowReorder 1.4.1\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     RowReorder\n * @description Row reordering extension for DataTables\n * @version     1.4.1\n * @file        dataTables.rowReorder.js\n * @author      SpryMedia Ltd\n * @contact     datatables.net\n * @copyright   Copyright 2015-2023 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/**\n * RowReorder provides the ability in DataTables to click and drag rows to\n * reorder them. When a row is dropped the data for the rows effected will be\n * updated to reflect the change. Normally this data point should also be the\n * column being sorted upon in the DataTable but this does not need to be the\n * case. RowReorder implements a \"data swap\" method - so the rows being\n * reordered take the value of the data point from the row that used to occupy\n * the row's new position.\n *\n * Initialisation is done by either:\n *\n * * `rowReorder` parameter in the DataTable initialisation object\n * * `new $.fn.dataTable.RowReorder( table, opts )` after DataTables\n *   initialisation.\n *\n *  @class\n *  @param {object} settings DataTables settings object for the host table\n *  @param {object} [opts] Configuration options\n *  @requires jQuery 1.7+\n *  @requires DataTables 1.10.7+\n */\nvar RowReorder = function (dt, opts) {\n\t// Sanity check that we are using DataTables 1.10 or newer\n\tif (!DataTable.versionCheck || !DataTable.versionCheck('1.10.8')) {\n\t\tthrow 'DataTables RowReorder requires DataTables 1.10.8 or newer';\n\t}\n\n\t// User and defaults configuration object\n\tthis.c = $.extend(true, {}, DataTable.defaults.rowReorder, RowReorder.defaults, opts);\n\n\t// Internal settings\n\tthis.s = {\n\t\t/** @type {integer} Scroll body top cache */\n\t\tbodyTop: null,\n\n\t\t/** @type {DataTable.Api} DataTables' API instance */\n\t\tdt: new DataTable.Api(dt),\n\n\t\t/** @type {function} Data fetch function */\n\t\tgetDataFn: DataTable.ext.oApi._fnGetObjectDataFn(this.c.dataSrc),\n\n\t\t/** @type {array} Pixel positions for row insertion calculation */\n\t\tmiddles: null,\n\n\t\t/** @type {Object} Cached dimension information for use in the mouse move event handler */\n\t\tscroll: {},\n\n\t\t/** @type {integer} Interval object used for smooth scrolling */\n\t\tscrollInterval: null,\n\n\t\t/** @type {function} Data set function */\n\t\tsetDataFn: DataTable.ext.oApi._fnSetObjectDataFn(this.c.dataSrc),\n\n\t\t/** @type {Object} Mouse down information */\n\t\tstart: {\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\toffsetTop: 0,\n\t\t\toffsetLeft: 0,\n\t\t\tnodes: [],\n\t\t\trowIndex: 0\n\t\t},\n\n\t\t/** @type {integer} Window height cached value */\n\t\twindowHeight: 0,\n\n\t\t/** @type {integer} Document outer height cached value */\n\t\tdocumentOuterHeight: 0,\n\n\t\t/** @type {integer} DOM clone outer height cached value */\n\t\tdomCloneOuterHeight: 0,\n\n\t\t/** @type {integer} Flag used for signing if the drop is enabled or not */\n\t\tdropAllowed: true\n\t};\n\n\t// DOM items\n\tthis.dom = {\n\t\t/** @type {jQuery} Cloned row being moved around */\n\t\tclone: null,\n\t\tcloneParent: null,\n\n\t\t/** @type {jQuery} DataTables scrolling container */\n\t\tdtScroll: $('div.dataTables_scrollBody', this.s.dt.table().container())\n\t};\n\n\t// Check if row reorder has already been initialised on this table\n\tvar settings = this.s.dt.settings()[0];\n\tvar exisiting = settings.rowreorder;\n\n\tif (exisiting) {\n\t\treturn exisiting;\n\t}\n\n\tif (!this.dom.dtScroll.length) {\n\t\tthis.dom.dtScroll = $(this.s.dt.table().container(), 'tbody');\n\t}\n\n\tsettings.rowreorder = this;\n\tthis._constructor();\n};\n\n$.extend(RowReorder.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialise the RowReorder instance\n\t *\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar table = $(dt.table().node());\n\n\t\t// Need to be able to calculate the row positions relative to the table\n\t\tif (table.css('position') === 'static') {\n\t\t\ttable.css('position', 'relative');\n\t\t}\n\n\t\t// listen for mouse down on the target column - we have to implement\n\t\t// this rather than using HTML5 drag and drop as drag and drop doesn't\n\t\t// appear to work on table rows at this time. Also mobile browsers are\n\t\t// not supported.\n\t\t// Use `table().container()` rather than just the table node for IE8 -\n\t\t// otherwise it only works once...\n\t\t$(dt.table().container()).on(\n\t\t\t'mousedown.rowReorder touchstart.rowReorder',\n\t\t\tthis.c.selector,\n\t\t\tfunction (e) {\n\t\t\t\tif (!that.c.enable) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Ignore excluded children of the selector\n\t\t\t\tif ($(e.target).is(that.c.excludedChildren)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tvar tr = $(this).closest('tr');\n\t\t\t\tvar row = dt.row(tr);\n\n\t\t\t\t// Double check that it is a DataTable row\n\t\t\t\tif (row.any()) {\n\t\t\t\t\tthat._emitEvent('pre-row-reorder', {\n\t\t\t\t\t\tnode: row.node(),\n\t\t\t\t\t\tindex: row.index()\n\t\t\t\t\t});\n\n\t\t\t\t\tthat._mouseDown(e, tr);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tdt.on('destroy.rowReorder', function () {\n\t\t\t$(dt.table().container()).off('.rowReorder');\n\t\t\tdt.off('.rowReorder');\n\t\t});\n\n\t\tthis._keyup = this._keyup.bind(this);\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Cache the measurements that RowReorder needs in the mouse move handler\n\t * to attempt to speed things up, rather than reading from the DOM.\n\t *\n\t * @private\n\t */\n\t_cachePositions: function () {\n\t\tvar dt = this.s.dt;\n\n\t\t// Frustratingly, if we add `position:relative` to the tbody, the\n\t\t// position is still relatively to the parent. So we need to adjust\n\t\t// for that\n\t\tvar headerHeight = $(dt.table().node()).find('thead').outerHeight();\n\n\t\t// Need to pass the nodes through jQuery to get them in document order,\n\t\t// not what DataTables thinks it is, since we have been altering the\n\t\t// order\n\t\tvar nodes = $.unique(dt.rows({ page: 'current' }).nodes().toArray());\n\t\tvar middles = $.map(nodes, function (node, i) {\n\t\t\tvar top = $(node).position().top - headerHeight;\n\n\t\t\treturn (top + top + $(node).outerHeight()) / 2;\n\t\t});\n\n\t\tthis.s.middles = middles;\n\t\tthis.s.bodyTop = $(dt.table().body()).offset().top;\n\t\tthis.s.windowHeight = $(window).height();\n\t\tthis.s.documentOuterHeight = $(document).outerHeight();\n\t\tthis.s.bodyArea = this._calcBodyArea();\n\t},\n\n\t/**\n\t * Clone a row so it can be floated around the screen\n\t *\n\t * @param  {jQuery} target Node to be cloned\n\t * @private\n\t */\n\t_clone: function (target) {\n\t\tvar dt = this.s.dt;\n\t\tvar clone = $(dt.table().node().cloneNode(false))\n\t\t\t.addClass('dt-rowReorder-float')\n\t\t\t.append('<tbody/>')\n\t\t\t.append(target.clone(false));\n\n\t\t// Match the table and column widths - read all sizes before setting\n\t\t// to reduce reflows\n\t\tvar tableWidth = target.outerWidth();\n\t\tvar tableHeight = target.outerHeight();\n\t\tvar scrollBody = $($(this.s.dt.table().node()).parent());\n\t\tvar scrollWidth = scrollBody.width();\n\t\tvar scrollLeft = scrollBody.scrollLeft();\n\t\tvar sizes = target.children().map(function () {\n\t\t\treturn $(this).width();\n\t\t});\n\n\t\tclone\n\t\t\t.width(tableWidth)\n\t\t\t.height(tableHeight)\n\t\t\t.find('tr')\n\t\t\t.children()\n\t\t\t.each(function (i) {\n\t\t\t\tthis.style.width = sizes[i] + 'px';\n\t\t\t});\n\n\t\tvar cloneParent = $('<div>')\n\t\t\t.addClass('dt-rowReorder-float-parent')\n\t\t\t.width(scrollWidth)\n\t\t\t.append(clone)\n\t\t\t.appendTo('body')\n\t\t\t.scrollLeft(scrollLeft);\n\n\t\t// Insert into the document to have it floating around\n\n\t\tthis.dom.clone = clone;\n\t\tthis.dom.cloneParent = cloneParent;\n\t\tthis.s.domCloneOuterHeight = clone.outerHeight();\n\t},\n\n\t/**\n\t * Update the cloned item's position in the document\n\t *\n\t * @param  {object} e Event giving the mouse's position\n\t * @private\n\t */\n\t_clonePosition: function (e) {\n\t\tvar start = this.s.start;\n\t\tvar topDiff = this._eventToPage(e, 'Y') - start.top;\n\t\tvar leftDiff = this._eventToPage(e, 'X') - start.left;\n\t\tvar snap = this.c.snapX;\n\t\tvar left;\n\t\tvar top = topDiff + start.offsetTop;\n\n\t\tif (snap === true) {\n\t\t\tleft = start.offsetLeft;\n\t\t}\n\t\telse if (typeof snap === 'number') {\n\t\t\tleft = start.offsetLeft + snap;\n\t\t}\n\t\telse {\n\t\t\tleft = leftDiff + start.offsetLeft + this.dom.cloneParent.scrollLeft();\n\t\t}\n\n\t\tif (top < 0) {\n\t\t\ttop = 0;\n\t\t}\n\t\telse if (top + this.s.domCloneOuterHeight > this.s.documentOuterHeight) {\n\t\t\ttop = this.s.documentOuterHeight - this.s.domCloneOuterHeight;\n\t\t}\n\n\t\tthis.dom.cloneParent.css({\n\t\t\ttop: top,\n\t\t\tleft: left\n\t\t});\n\t},\n\n\t/**\n\t * Emit an event on the DataTable for listeners\n\t *\n\t * @param  {string} name Event name\n\t * @param  {array} args Event arguments\n\t * @private\n\t */\n\t_emitEvent: function ( name, args )\n\t{\n\t\tvar ret;\n\n\t\tthis.s.dt.iterator( 'table', function ( ctx, i ) {\n\t\t\tvar innerRet = $(ctx.nTable).triggerHandler( name+'.dt', args );\n\n\t\t\tif (innerRet !== undefined) {\n\t\t\t\tret = innerRet;\n\t\t\t}\n\t\t} );\n\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Get pageX/Y position from an event, regardless of if it is a mouse or\n\t * touch event.\n\t *\n\t * @param  {object} e Event\n\t * @param  {string} pos X or Y (must be a capital)\n\t * @private\n\t */\n\t_eventToPage: function (e, pos) {\n\t\tif (e.type.indexOf('touch') !== -1) {\n\t\t\treturn e.originalEvent.touches[0]['page' + pos];\n\t\t}\n\n\t\treturn e['page' + pos];\n\t},\n\n\t/**\n\t * Mouse down event handler. Read initial positions and add event handlers\n\t * for the move.\n\t *\n\t * @param  {object} e      Mouse event\n\t * @param  {jQuery} target TR element that is to be moved\n\t * @private\n\t */\n\t_mouseDown: function (e, target) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar start = this.s.start;\n\t\tvar cancelable = this.c.cancelable;\n\n\t\tvar offset = target.offset();\n\t\tstart.top = this._eventToPage(e, 'Y');\n\t\tstart.left = this._eventToPage(e, 'X');\n\t\tstart.offsetTop = offset.top;\n\t\tstart.offsetLeft = offset.left;\n\t\tstart.nodes = $.unique(dt.rows({ page: 'current' }).nodes().toArray());\n\n\t\tthis._cachePositions();\n\t\tthis._clone(target);\n\t\tthis._clonePosition(e);\n\n\t\tvar bodyY = this._eventToPage(e, 'Y') - this.s.bodyTop;\n\t\tstart.rowIndex = this._calcRowIndexByPos(bodyY);\n\n\t\tthis.dom.target = target;\n\t\ttarget.addClass('dt-rowReorder-moving');\n\n\t\t$(document)\n\t\t\t.on('mouseup.rowReorder touchend.rowReorder', function (e) {\n\t\t\t\tthat._mouseUp(e);\n\t\t\t})\n\t\t\t.on('mousemove.rowReorder touchmove.rowReorder', function (e) {\n\t\t\t\tthat._mouseMove(e);\n\t\t\t});\n\n\t\t// Check if window is x-scrolling - if not, disable it for the duration\n\t\t// of the drag\n\t\tif ($(window).width() === $(document).width()) {\n\t\t\t$(document.body).addClass('dt-rowReorder-noOverflow');\n\t\t}\n\n\t\t// Cache scrolling information so mouse move doesn't need to read.\n\t\t// This assumes that the window and DT scroller will not change size\n\t\t// during an row drag, which I think is a fair assumption\n\t\tvar scrollWrapper = this.dom.dtScroll;\n\t\tthis.s.scroll = {\n\t\t\twindowHeight: $(window).height(),\n\t\t\twindowWidth: $(window).width(),\n\t\t\tdtTop: scrollWrapper.length ? scrollWrapper.offset().top : null,\n\t\t\tdtLeft: scrollWrapper.length ? scrollWrapper.offset().left : null,\n\t\t\tdtHeight: scrollWrapper.length ? scrollWrapper.outerHeight() : null,\n\t\t\tdtWidth: scrollWrapper.length ? scrollWrapper.outerWidth() : null\n\t\t};\n\n\t\t// Add keyup handler if dragging is cancelable\n\t\tif (cancelable) {\n\t\t\t$(document).on('keyup', this._keyup);\n\t\t}\n\t},\n\n\t/**\n\t * Mouse move event handler - move the cloned row and shuffle the table's\n\t * rows if required.\n\t *\n\t * @param  {object} e Mouse event\n\t * @private\n\t */\n\t_mouseMove: function (e) {\n\t\tthis._clonePosition(e);\n\n\t\tvar start = this.s.start;\n\t\tvar cancelable = this.c.cancelable;\n\n\t\tif (cancelable) {\n\t\t\tvar bodyArea = this.s.bodyArea;\n\t\t\tvar cloneArea = this._calcCloneParentArea();\n\t\t\tthis.s.dropAllowed = this._rectanglesIntersect(bodyArea, cloneArea);\n\n\t\t\tthis.s.dropAllowed\n\t\t\t\t? $(this.dom.cloneParent).removeClass('drop-not-allowed')\n\t\t\t\t: $(this.dom.cloneParent).addClass('drop-not-allowed');\n\t\t}\n\n\t\t// Transform the mouse position into a position in the table's body\n\t\tvar bodyY = this._eventToPage(e, 'Y') - this.s.bodyTop;\n\t\tvar middles = this.s.middles;\n\t\tvar insertPoint = null;\n\n\t\t// Determine where the row should be inserted based on the mouse\n\t\t// position\n\t\tfor (var i = 0, ien = middles.length; i < ien; i++) {\n\t\t\tif (bodyY < middles[i]) {\n\t\t\t\tinsertPoint = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (insertPoint === null) {\n\t\t\tinsertPoint = middles.length;\n\t\t}\n\n\t\tif (cancelable) {\n\t\t\tif (!this.s.dropAllowed) {\n\t\t\t\t// Move the row back to its original position becasuse the drop is not allowed\n\t\t\t\tinsertPoint =\n\t\t\t\t\tstart.rowIndex > this.s.lastInsert ? start.rowIndex + 1 : start.rowIndex;\n\t\t\t}\n\n\t\t\tthis.dom.target.toggleClass('dt-rowReorder-moving', this.s.dropAllowed);\n\t\t}\n\n\t\tthis._moveTargetIntoPosition(insertPoint);\n\n\t\tthis._shiftScroll(e);\n\t},\n\n\t/**\n\t * Mouse up event handler - release the event handlers and perform the\n\t * table updates\n\t *\n\t * @param  {object} e Mouse event\n\t * @private\n\t */\n\t_mouseUp: function (e) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar i, ien;\n\t\tvar dataSrc = this.c.dataSrc;\n\t\tvar dropAllowed = this.s.dropAllowed;\n\n\t\tif (!dropAllowed) {\n\t\t\tthat._cancel();\n\t\t\treturn;\n\t\t}\n\n\t\t// Calculate the difference\n\t\tvar startNodes = this.s.start.nodes;\n\t\tvar endNodes = $.unique(dt.rows({ page: 'current' }).nodes().toArray());\n\t\tvar idDiff = {};\n\t\tvar fullDiff = [];\n\t\tvar diffNodes = [];\n\t\tvar getDataFn = this.s.getDataFn;\n\t\tvar setDataFn = this.s.setDataFn;\n\n\t\tfor (i = 0, ien = startNodes.length; i < ien; i++) {\n\t\t\tif (startNodes[i] !== endNodes[i]) {\n\t\t\t\tvar id = dt.row(endNodes[i]).id();\n\t\t\t\tvar endRowData = dt.row(endNodes[i]).data();\n\t\t\t\tvar startRowData = dt.row(startNodes[i]).data();\n\n\t\t\t\tif (id) {\n\t\t\t\t\tidDiff[id] = getDataFn(startRowData);\n\t\t\t\t}\n\n\t\t\t\tfullDiff.push({\n\t\t\t\t\tnode: endNodes[i],\n\t\t\t\t\toldData: getDataFn(endRowData),\n\t\t\t\t\tnewData: getDataFn(startRowData),\n\t\t\t\t\tnewPosition: i,\n\t\t\t\t\toldPosition: $.inArray(endNodes[i], startNodes)\n\t\t\t\t});\n\n\t\t\t\tdiffNodes.push(endNodes[i]);\n\t\t\t}\n\t\t}\n\n\t\t// Create event args\n\t\tvar eventArgs = [\n\t\t\tfullDiff,\n\t\t\t{\n\t\t\t\tdataSrc: dataSrc,\n\t\t\t\tnodes: diffNodes,\n\t\t\t\tvalues: idDiff,\n\t\t\t\ttriggerRow: dt.row(this.dom.target),\n\t\t\t\toriginalEvent: e\n\t\t\t}\n\t\t];\n\n\t\t// Emit event\n\t\tvar eventResult = this._emitEvent( 'row-reorder', eventArgs );\n\n\t\tif (eventResult === false) {\n\t\t\tthat._cancel();\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove cloned elements, handlers, etc\n\t\tthis._cleanupDragging();\n\n\t\tvar update = function () {\n\t\t\tif (that.c.update) {\n\t\t\t\tfor (i = 0, ien = fullDiff.length; i < ien; i++) {\n\t\t\t\t\tvar row = dt.row(fullDiff[i].node);\n\t\t\t\t\tvar rowData = row.data();\n\n\t\t\t\t\tsetDataFn(rowData, fullDiff[i].newData);\n\n\t\t\t\t\t// Invalidate the cell that has the same data source as the dataSrc\n\t\t\t\t\tdt.columns().every(function () {\n\t\t\t\t\t\tif (this.dataSrc() === dataSrc) {\n\t\t\t\t\t\t\tdt.cell(fullDiff[i].node, this.index()).invalidate('data');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Trigger row reordered event\n\t\t\t\tthat._emitEvent('row-reordered', eventArgs);\n\n\t\t\t\tdt.draw(false);\n\t\t\t}\n\t\t};\n\n\t\t// Editor interface\n\t\tif (this.c.editor) {\n\t\t\t// Disable user interaction while Editor is submitting\n\t\t\tthis.c.enable = false;\n\n\t\t\tthis.c.editor\n\t\t\t\t.edit(diffNodes, false, $.extend({ submit: 'changed' }, this.c.formOptions))\n\t\t\t\t.multiSet(dataSrc, idDiff)\n\t\t\t\t.one('preSubmitCancelled.rowReorder', function () {\n\t\t\t\t\tthat.c.enable = true;\n\t\t\t\t\tthat.c.editor.off('.rowReorder');\n\t\t\t\t\tdt.draw(false);\n\t\t\t\t})\n\t\t\t\t.one('submitUnsuccessful.rowReorder', function () {\n\t\t\t\t\tdt.draw(false);\n\t\t\t\t})\n\t\t\t\t.one('submitSuccess.rowReorder', function () {\n\t\t\t\t\tupdate();\n\t\t\t\t})\n\t\t\t\t.one('submitComplete', function () {\n\t\t\t\t\tthat.c.enable = true;\n\t\t\t\t\tthat.c.editor.off('.rowReorder');\n\t\t\t\t})\n\t\t\t\t.submit();\n\t\t}\n\t\telse {\n\t\t\tupdate();\n\t\t}\n\t},\n\n\t/**\n\t * Moves the current target into the given position within the table\n\t * and caches the new positions\n\t *\n\t * @param  {integer} insertPoint Position\n\t * @private\n\t */\n\t_moveTargetIntoPosition: function (insertPoint) {\n\t\tvar dt = this.s.dt;\n\n\t\t// Perform the DOM shuffle if it has changed from last time\n\t\tif (this.s.lastInsert === null || this.s.lastInsert !== insertPoint) {\n\t\t\tvar nodes = $.unique(dt.rows({ page: 'current' }).nodes().toArray());\n\t\t\tvar insertPlacement = '';\n\n\t\t\tif (insertPoint > this.s.lastInsert) {\n\t\t\t\tthis.dom.target.insertAfter(nodes[insertPoint - 1]);\n\t\t\t\tinsertPlacement = 'after';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.dom.target.insertBefore(nodes[insertPoint]);\n\t\t\t\tinsertPlacement = 'before';\n\t\t\t}\n\n\t\t\tthis._cachePositions();\n\n\t\t\tthis.s.lastInsert = insertPoint;\n\n\t\t\tthis._emitEvent('row-reorder-changed', {\n\t\t\t\tinsertPlacement,\n\t\t\t\tinsertPoint,\n\t\t\t\trow: dt.row(this.dom.target)\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Removes the cloned elements, event handlers, scrolling intervals, etc\n\t *\n\t * @private\n\t */\n\t_cleanupDragging: function () {\n\t\tvar cancelable = this.c.cancelable;\n\n\t\tthis.dom.clone.remove();\n\t\tthis.dom.cloneParent.remove();\n\t\tthis.dom.clone = null;\n\t\tthis.dom.cloneParent = null;\n\n\t\tthis.dom.target.removeClass('dt-rowReorder-moving');\n\t\t//this.dom.target = null;\n\n\t\t$(document).off('.rowReorder');\n\t\t$(document.body).removeClass('dt-rowReorder-noOverflow');\n\n\t\tclearInterval(this.s.scrollInterval);\n\t\tthis.s.scrollInterval = null;\n\n\t\tif (cancelable) {\n\t\t\t$(document).off('keyup', this._keyup);\n\t\t}\n\t},\n\n\t/**\n\t * Move the window and DataTables scrolling during a drag to scroll new\n\t * content into view.\n\t *\n\t * This matches the `_shiftScroll` method used in AutoFill, but only\n\t * horizontal scrolling is considered here.\n\t *\n\t * @param  {object} e Mouse move event object\n\t * @private\n\t */\n\t_shiftScroll: function (e) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar scroll = this.s.scroll;\n\t\tvar runInterval = false;\n\t\tvar scrollSpeed = 5;\n\t\tvar buffer = 65;\n\t\tvar windowY = e.pageY - document.body.scrollTop,\n\t\t\twindowVert,\n\t\t\tdtVert;\n\n\t\t// Window calculations - based on the mouse position in the window,\n\t\t// regardless of scrolling\n\t\tif (windowY < $(window).scrollTop() + buffer) {\n\t\t\twindowVert = scrollSpeed * -1;\n\t\t}\n\t\telse if (windowY > scroll.windowHeight + $(window).scrollTop() - buffer) {\n\t\t\twindowVert = scrollSpeed;\n\t\t}\n\n\t\t// DataTables scrolling calculations - based on the table's position in\n\t\t// the document and the mouse position on the page\n\t\tif (scroll.dtTop !== null && e.pageY < scroll.dtTop + buffer) {\n\t\t\tdtVert = scrollSpeed * -1;\n\t\t}\n\t\telse if (scroll.dtTop !== null && e.pageY > scroll.dtTop + scroll.dtHeight - buffer) {\n\t\t\tdtVert = scrollSpeed;\n\t\t}\n\n\t\t// This is where it gets interesting. We want to continue scrolling\n\t\t// without requiring a mouse move, so we need an interval to be\n\t\t// triggered. The interval should continue until it is no longer needed,\n\t\t// but it must also use the latest scroll commands (for example consider\n\t\t// that the mouse might move from scrolling up to scrolling left, all\n\t\t// with the same interval running. We use the `scroll` object to \"pass\"\n\t\t// this information to the interval. Can't use local variables as they\n\t\t// wouldn't be the ones that are used by an already existing interval!\n\t\tif (windowVert || dtVert) {\n\t\t\tscroll.windowVert = windowVert;\n\t\t\tscroll.dtVert = dtVert;\n\t\t\trunInterval = true;\n\t\t}\n\t\telse if (this.s.scrollInterval) {\n\t\t\t// Don't need to scroll - remove any existing timer\n\t\t\tclearInterval(this.s.scrollInterval);\n\t\t\tthis.s.scrollInterval = null;\n\t\t}\n\n\t\t// If we need to run the interval to scroll and there is no existing\n\t\t// interval (if there is an existing one, it will continue to run)\n\t\tif (!this.s.scrollInterval && runInterval) {\n\t\t\tthis.s.scrollInterval = setInterval(function () {\n\t\t\t\t// Don't need to worry about setting scroll <0 or beyond the\n\t\t\t\t// scroll bound as the browser will just reject that.\n\t\t\t\tif (scroll.windowVert) {\n\t\t\t\t\tvar top = $(document).scrollTop();\n\t\t\t\t\t$(document).scrollTop(top + scroll.windowVert);\n\n\t\t\t\t\tif (top !== $(document).scrollTop()) {\n\t\t\t\t\t\tvar move = parseFloat(that.dom.cloneParent.css('top'));\n\t\t\t\t\t\tthat.dom.cloneParent.css('top', move + scroll.windowVert);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// DataTables scrolling\n\t\t\t\tif (scroll.dtVert) {\n\t\t\t\t\tvar scroller = that.dom.dtScroll[0];\n\n\t\t\t\t\tif (scroll.dtVert) {\n\t\t\t\t\t\tscroller.scrollTop += scroll.dtVert;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 20);\n\t\t}\n\t},\n\n\t/**\n\t * Calculates the current area of the table body and returns it as a rectangle\n\t *\n\t * @private\n\t */\n\t_calcBodyArea: function (e) {\n\t\tvar dt = this.s.dt;\n\t\tvar offset = $(dt.table().body()).offset();\n\t\tvar area = {\n\t\t\tleft: offset.left,\n\t\t\ttop: offset.top,\n\t\t\tright: offset.left + $(dt.table().body()).width(),\n\t\t\tbottom: offset.top + $(dt.table().body()).height()\n\t\t};\n\n\t\treturn area;\n\t},\n\n\t/**\n\t * Calculates the current area of the cloned parent element and returns it as a rectangle\n\t *\n\t * @private\n\t */\n\t_calcCloneParentArea: function (e) {\n\t\tvar dt = this.s.dt;\n\t\tvar offset = $(this.dom.cloneParent).offset();\n\t\tvar area = {\n\t\t\tleft: offset.left,\n\t\t\ttop: offset.top,\n\t\t\tright: offset.left + $(this.dom.cloneParent).width(),\n\t\t\tbottom: offset.top + $(this.dom.cloneParent).height()\n\t\t};\n\n\t\treturn area;\n\t},\n\n\t/**\n\t * Returns whether the given reactangles intersect or not\n\t *\n\t * @private\n\t */\n\t_rectanglesIntersect: function (a, b) {\n\t\tvar noOverlap =\n\t\t\ta.left >= b.right || b.left >= a.right || a.top >= b.bottom || b.top >= a.bottom;\n\n\t\treturn !noOverlap;\n\t},\n\n\t/**\n\t * Calculates the index of the row which lays under the given Y position or\n\t * returns -1 if no such row\n\t *\n\t * @param  {integer} insertPoint Position\n\t * @private\n\t */\n\t_calcRowIndexByPos: function (bodyY) {\n\t\t// Determine where the row is located based on the mouse\n\t\t// position\n\n\t\tvar dt = this.s.dt;\n\t\tvar nodes = $.unique(dt.rows({ page: 'current' }).nodes().toArray());\n\t\tvar rowIndex = -1;\n\t\tvar headerHeight = $(dt.table().node()).find('thead').outerHeight();\n\n\t\t$.each(nodes, function (i, node) {\n\t\t\tvar top = $(node).position().top - headerHeight;\n\t\t\tvar bottom = top + $(node).outerHeight();\n\n\t\t\tif (bodyY >= top && bodyY <= bottom) {\n\t\t\t\trowIndex = i;\n\t\t\t}\n\t\t});\n\n\t\treturn rowIndex;\n\t},\n\n\t/**\n\t * Handles key up events and cancels the dragging if ESC key is pressed\n\t *\n\t * @param  {object} e Mouse move event object\n\t * @private\n\t */\n\t_keyup: function (e) {\n\t\tvar cancelable = this.c.cancelable;\n\n\t\tif (cancelable && e.which === 27) {\n\t\t\t// ESC key is up\n\t\t\te.preventDefault();\n\t\t\tthis._cancel();\n\t\t}\n\t},\n\n\t/**\n\t * Cancels the dragging, moves target back into its original position\n\t * and cleans up the dragging\n\t *\n\t * @param  {object} e Mouse move event object\n\t * @private\n\t */\n\t_cancel: function () {\n\t\tvar start = this.s.start;\n\t\tvar insertPoint = start.rowIndex > this.s.lastInsert ? start.rowIndex + 1 : start.rowIndex;\n\n\t\tthis._moveTargetIntoPosition(insertPoint);\n\n\t\tthis._cleanupDragging();\n\n\t\t// Emit event\n\t\tthis._emitEvent('row-reorder-canceled', [this.s.start.rowIndex]);\n\t}\n});\n\n/**\n * RowReorder default settings for initialisation\n *\n * @namespace\n * @name RowReorder.defaults\n * @static\n */\nRowReorder.defaults = {\n\t/**\n\t * Data point in the host row's data source object for where to get and set\n\t * the data to reorder. This will normally also be the sorting column.\n\t *\n\t * @type {Number}\n\t */\n\tdataSrc: 0,\n\n\t/**\n\t * Editor instance that will be used to perform the update\n\t *\n\t * @type {DataTable.Editor}\n\t */\n\teditor: null,\n\n\t/**\n\t * Enable / disable RowReorder's user interaction\n\t * @type {Boolean}\n\t */\n\tenable: true,\n\n\t/**\n\t * Form options to pass to Editor when submitting a change in the row order.\n\t * See the Editor `from-options` object for details of the options\n\t * available.\n\t * @type {Object}\n\t */\n\tformOptions: {},\n\n\t/**\n\t * Drag handle selector. This defines the element that when dragged will\n\t * reorder a row.\n\t *\n\t * @type {String}\n\t */\n\tselector: 'td:first-child',\n\n\t/**\n\t * Optionally lock the dragged row's x-position. This can be `true` to\n\t * fix the position match the host table's, `false` to allow free movement\n\t * of the row, or a number to define an offset from the host table.\n\t *\n\t * @type {Boolean|number}\n\t */\n\tsnapX: false,\n\n\t/**\n\t * Update the table's data on drop\n\t *\n\t * @type {Boolean}\n\t */\n\tupdate: true,\n\n\t/**\n\t * Selector for children of the drag handle selector that mouseDown events\n\t * will be passed through to and drag will not activate\n\t *\n\t * @type {String}\n\t */\n\texcludedChildren: 'a',\n\n\t/**\n\t * Enable / disable the canceling of the drag & drop interaction\n\t *\n\t * @type {Boolean}\n\t */\n\tcancelable: false\n};\n\n/*\n * API\n */\nvar Api = $.fn.dataTable.Api;\n\n// Doesn't do anything - work around for a bug in DT... Not documented\nApi.register('rowReorder()', function () {\n\treturn this;\n});\n\nApi.register('rowReorder.enable()', function (toggle) {\n\tif (toggle === undefined) {\n\t\ttoggle = true;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.rowreorder) {\n\t\t\tctx.rowreorder.c.enable = toggle;\n\t\t}\n\t});\n});\n\nApi.register('rowReorder.disable()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.rowreorder) {\n\t\t\tctx.rowreorder.c.enable = false;\n\t\t}\n\t});\n});\n\n/**\n * Version information\n *\n * @name RowReorder.version\n * @static\n */\nRowReorder.version = '1.4.1';\n\n$.fn.dataTable.RowReorder = RowReorder;\n$.fn.DataTable.RowReorder = RowReorder;\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('init.dt.dtr', function (e, settings, json) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.rowReorder;\n\tvar defaults = DataTable.defaults.rowReorder;\n\n\tif (init || defaults) {\n\t\tvar opts = $.extend({}, init, defaults);\n\n\t\tif (init !== false) {\n\t\t\tnew RowReorder(settings, opts);\n\t\t}\n\t}\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/js/rowReorder.bootstrap.js",
    "content": "/*! Bootstrap 3 styling wrapper for RowReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-rowreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowReorder ) {\n\t\t\t\trequire('datatables.net-rowreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/js/rowReorder.bootstrap4.js",
    "content": "/*! Bootstrap 4 styling wrapper for RowReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-rowreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowReorder ) {\n\t\t\t\trequire('datatables.net-rowreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/js/rowReorder.bootstrap5.js",
    "content": "/*! Bootstrap 5 styling wrapper for RowReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-rowreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowReorder ) {\n\t\t\t\trequire('datatables.net-rowreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/js/rowReorder.bulma.js",
    "content": "/*! Bulma styling wrapper for RowReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-rowreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowReorder ) {\n\t\t\t\trequire('datatables.net-rowreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/js/rowReorder.dataTables.js",
    "content": "/*! DataTables styling wrapper for RowReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-rowreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowReorder ) {\n\t\t\t\trequire('datatables.net-rowreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/js/rowReorder.foundation.js",
    "content": "/*! Foundation styling wrapper for RowReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-rowreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowReorder ) {\n\t\t\t\trequire('datatables.net-rowreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/js/rowReorder.jqueryui.js",
    "content": "/*! jQuery UI styling wrapper for RowReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-rowreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowReorder ) {\n\t\t\t\trequire('datatables.net-rowreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/RowReorder-1.4.1/js/rowReorder.semanticui.js",
    "content": "/*! Semanic UI styling wrapper for RowReorder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-rowreorder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.RowReorder ) {\n\t\t\t\trequire('datatables.net-rowreorder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/css/scroller.bootstrap.css",
    "content": "div.dts {\n  display: block !important;\n}\ndiv.dts tbody th,\ndiv.dts tbody td {\n  white-space: nowrap;\n}\ndiv.dts div.dts_loading {\n  z-index: 1;\n}\ndiv.dts div.dts_label {\n  position: absolute;\n  right: 20px;\n  background: rgba(0, 0, 0, 0.8);\n  color: white;\n  box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);\n  text-align: right;\n  border-radius: 3px;\n  padding: 0.4em;\n  z-index: 2;\n  display: none;\n}\ndiv.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(0, 0, 0, 0.025), rgba(0, 0, 0, 0.025) 10px, rgba(0, 0, 0, 0) 10px, rgba(0, 0, 0, 0) 20px);\n}\ndiv.dts div.dataTables_scrollBody table {\n  background-color: white;\n  z-index: 2;\n}\ndiv.dts div.dt-length,\ndiv.dts div.dt-paging,\ndiv.dts div.dataTables_paginate,\ndiv.dts div.dataTables_length {\n  display: none;\n}\n\nhtml.dark div.dts div.dts_label {\n  background: rgba(255, 255, 255, 0.8);\n  color: black;\n}\nhtml.dark div.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.025), rgba(255, 255, 255, 0.025) 10px, rgba(255, 255, 255, 0) 10px, rgba(255, 255, 255, 0) 20px);\n}\nhtml.dark div.dts div.dataTables_scrollBody table {\n  background-color: var(--dt-html-background);\n  z-index: 2;\n}\n\ndiv.DTS tbody tr {\n  background-color: white;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/css/scroller.bootstrap4.css",
    "content": "div.dts {\n  display: block !important;\n}\ndiv.dts tbody th,\ndiv.dts tbody td {\n  white-space: nowrap;\n}\ndiv.dts div.dts_loading {\n  z-index: 1;\n}\ndiv.dts div.dts_label {\n  position: absolute;\n  right: 20px;\n  background: rgba(0, 0, 0, 0.8);\n  color: white;\n  box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);\n  text-align: right;\n  border-radius: 3px;\n  padding: 0.4em;\n  z-index: 2;\n  display: none;\n}\ndiv.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(0, 0, 0, 0.025), rgba(0, 0, 0, 0.025) 10px, rgba(0, 0, 0, 0) 10px, rgba(0, 0, 0, 0) 20px);\n}\ndiv.dts div.dataTables_scrollBody table {\n  background-color: white;\n  z-index: 2;\n}\ndiv.dts div.dt-length,\ndiv.dts div.dt-paging,\ndiv.dts div.dataTables_paginate,\ndiv.dts div.dataTables_length {\n  display: none;\n}\n\nhtml.dark div.dts div.dts_label {\n  background: rgba(255, 255, 255, 0.8);\n  color: black;\n}\nhtml.dark div.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.025), rgba(255, 255, 255, 0.025) 10px, rgba(255, 255, 255, 0) 10px, rgba(255, 255, 255, 0) 20px);\n}\nhtml.dark div.dts div.dataTables_scrollBody table {\n  background-color: var(--dt-html-background);\n  z-index: 2;\n}\n\ndiv.DTS div.dataTables_scrollBody table {\n  background-color: white;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/css/scroller.bootstrap5.css",
    "content": "div.dts {\n  display: block !important;\n}\ndiv.dts tbody th,\ndiv.dts tbody td {\n  white-space: nowrap;\n}\ndiv.dts div.dts_loading {\n  z-index: 1;\n}\ndiv.dts div.dts_label {\n  position: absolute;\n  right: 20px;\n  background: rgba(0, 0, 0, 0.8);\n  color: white;\n  box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);\n  text-align: right;\n  border-radius: 3px;\n  padding: 0.4em;\n  z-index: 2;\n  display: none;\n}\ndiv.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(0, 0, 0, 0.025), rgba(0, 0, 0, 0.025) 10px, rgba(0, 0, 0, 0) 10px, rgba(0, 0, 0, 0) 20px);\n}\ndiv.dts div.dataTables_scrollBody table {\n  background-color: white;\n  z-index: 2;\n}\ndiv.dts div.dt-length,\ndiv.dts div.dt-paging,\ndiv.dts div.dataTables_paginate,\ndiv.dts div.dataTables_length {\n  display: none;\n}\n\nhtml.dark div.dts div.dts_label {\n  background: rgba(255, 255, 255, 0.8);\n  color: black;\n}\nhtml.dark div.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.025), rgba(255, 255, 255, 0.025) 10px, rgba(255, 255, 255, 0) 10px, rgba(255, 255, 255, 0) 20px);\n}\nhtml.dark div.dts div.dataTables_scrollBody table {\n  background-color: var(--dt-html-background);\n  z-index: 2;\n}\n\ndiv.DTS div.dataTables_scrollBody table {\n  background-color: white;\n}\n\nhtml[data-bs-theme=dark] div.DTS div.dataTables_scrollBody table {\n  background-color: var(--bs-body-bg);\n}\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/css/scroller.bulma.css",
    "content": "div.dts {\n  display: block !important;\n}\ndiv.dts tbody th,\ndiv.dts tbody td {\n  white-space: nowrap;\n}\ndiv.dts div.dts_loading {\n  z-index: 1;\n}\ndiv.dts div.dts_label {\n  position: absolute;\n  right: 20px;\n  background: rgba(0, 0, 0, 0.8);\n  color: white;\n  box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);\n  text-align: right;\n  border-radius: 3px;\n  padding: 0.4em;\n  z-index: 2;\n  display: none;\n}\ndiv.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(0, 0, 0, 0.025), rgba(0, 0, 0, 0.025) 10px, rgba(0, 0, 0, 0) 10px, rgba(0, 0, 0, 0) 20px);\n}\ndiv.dts div.dataTables_scrollBody table {\n  background-color: white;\n  z-index: 2;\n}\ndiv.dts div.dt-length,\ndiv.dts div.dt-paging,\ndiv.dts div.dataTables_paginate,\ndiv.dts div.dataTables_length {\n  display: none;\n}\n\nhtml.dark div.dts div.dts_label {\n  background: rgba(255, 255, 255, 0.8);\n  color: black;\n}\nhtml.dark div.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.025), rgba(255, 255, 255, 0.025) 10px, rgba(255, 255, 255, 0) 10px, rgba(255, 255, 255, 0) 20px);\n}\nhtml.dark div.dts div.dataTables_scrollBody table {\n  background-color: var(--dt-html-background);\n  z-index: 2;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/css/scroller.dataTables.css",
    "content": "div.dts {\n  display: block !important;\n}\ndiv.dts tbody th,\ndiv.dts tbody td {\n  white-space: nowrap;\n}\ndiv.dts div.dts_loading {\n  z-index: 1;\n}\ndiv.dts div.dts_label {\n  position: absolute;\n  right: 20px;\n  background: rgba(0, 0, 0, 0.8);\n  color: white;\n  box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);\n  text-align: right;\n  border-radius: 3px;\n  padding: 0.4em;\n  z-index: 2;\n  display: none;\n}\ndiv.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(0, 0, 0, 0.025), rgba(0, 0, 0, 0.025) 10px, rgba(0, 0, 0, 0) 10px, rgba(0, 0, 0, 0) 20px);\n}\ndiv.dts div.dataTables_scrollBody table {\n  background-color: white;\n  z-index: 2;\n}\ndiv.dts div.dt-length,\ndiv.dts div.dt-paging,\ndiv.dts div.dataTables_paginate,\ndiv.dts div.dataTables_length {\n  display: none;\n}\n\nhtml.dark div.dts div.dts_label {\n  background: rgba(255, 255, 255, 0.8);\n  color: black;\n}\nhtml.dark div.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.025), rgba(255, 255, 255, 0.025) 10px, rgba(255, 255, 255, 0) 10px, rgba(255, 255, 255, 0) 20px);\n}\nhtml.dark div.dts div.dataTables_scrollBody table {\n  background-color: var(--dt-html-background);\n  z-index: 2;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/css/scroller.foundation.css",
    "content": "div.DTS tbody th,\ndiv.DTS tbody td {\n  white-space: nowrap;\n}\ndiv.DTS div.DTS_Loading {\n  z-index: 1;\n}\ndiv.DTS div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, #edeeff, #edeeff 10px, white 10px, white 20px);\n}\ndiv.DTS div.dataTables_scrollBody table {\n  z-index: 2;\n}\ndiv.DTS div.dataTables_paginate,\ndiv.DTS div.dataTables_length {\n  display: none;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/css/scroller.jqueryui.css",
    "content": "div.dts {\n  display: block !important;\n}\ndiv.dts tbody th,\ndiv.dts tbody td {\n  white-space: nowrap;\n}\ndiv.dts div.dts_loading {\n  z-index: 1;\n}\ndiv.dts div.dts_label {\n  position: absolute;\n  right: 20px;\n  background: rgba(0, 0, 0, 0.8);\n  color: white;\n  box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);\n  text-align: right;\n  border-radius: 3px;\n  padding: 0.4em;\n  z-index: 2;\n  display: none;\n}\ndiv.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(0, 0, 0, 0.025), rgba(0, 0, 0, 0.025) 10px, rgba(0, 0, 0, 0) 10px, rgba(0, 0, 0, 0) 20px);\n}\ndiv.dts div.dataTables_scrollBody table {\n  background-color: white;\n  z-index: 2;\n}\ndiv.dts div.dt-length,\ndiv.dts div.dt-paging,\ndiv.dts div.dataTables_paginate,\ndiv.dts div.dataTables_length {\n  display: none;\n}\n\nhtml.dark div.dts div.dts_label {\n  background: rgba(255, 255, 255, 0.8);\n  color: black;\n}\nhtml.dark div.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.025), rgba(255, 255, 255, 0.025) 10px, rgba(255, 255, 255, 0) 10px, rgba(255, 255, 255, 0) 20px);\n}\nhtml.dark div.dts div.dataTables_scrollBody table {\n  background-color: var(--dt-html-background);\n  z-index: 2;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/css/scroller.semanticui.css",
    "content": "div.dts {\n  display: block !important;\n}\ndiv.dts tbody th,\ndiv.dts tbody td {\n  white-space: nowrap;\n}\ndiv.dts div.dts_loading {\n  z-index: 1;\n}\ndiv.dts div.dts_label {\n  position: absolute;\n  right: 20px;\n  background: rgba(0, 0, 0, 0.8);\n  color: white;\n  box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);\n  text-align: right;\n  border-radius: 3px;\n  padding: 0.4em;\n  z-index: 2;\n  display: none;\n}\ndiv.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(0, 0, 0, 0.025), rgba(0, 0, 0, 0.025) 10px, rgba(0, 0, 0, 0) 10px, rgba(0, 0, 0, 0) 20px);\n}\ndiv.dts div.dataTables_scrollBody table {\n  background-color: white;\n  z-index: 2;\n}\ndiv.dts div.dt-length,\ndiv.dts div.dt-paging,\ndiv.dts div.dataTables_paginate,\ndiv.dts div.dataTables_length {\n  display: none;\n}\n\nhtml.dark div.dts div.dts_label {\n  background: rgba(255, 255, 255, 0.8);\n  color: black;\n}\nhtml.dark div.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.025), rgba(255, 255, 255, 0.025) 10px, rgba(255, 255, 255, 0) 10px, rgba(255, 255, 255, 0) 20px);\n}\nhtml.dark div.dts div.dataTables_scrollBody table {\n  background-color: var(--dt-html-background);\n  z-index: 2;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/js/dataTables.scroller.js",
    "content": "/*! Scroller 2.3.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     Scroller\n * @description Virtual rendering for DataTables\n * @version     2.3.0\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/**\n * Scroller is a virtual rendering plug-in for DataTables which allows large\n * datasets to be drawn on screen every quickly. What the virtual rendering means\n * is that only the visible portion of the table (and a bit to either side to make\n * the scrolling smooth) is drawn, while the scrolling container gives the\n * visual impression that the whole table is visible. This is done by making use\n * of the pagination abilities of DataTables and moving the table around in the\n * scrolling container DataTables adds to the page. The scrolling container is\n * forced to the height it would be for the full table display using an extra\n * element.\n *\n * Note that rows in the table MUST all be the same height. Information in a cell\n * which expands on to multiple lines will cause some odd behaviour in the scrolling.\n *\n * Scroller is initialised by simply including the letter 'S' in the sDom for the\n * table you want to have this feature enabled on. Note that the 'S' must come\n * AFTER the 't' parameter in `dom`.\n *\n * Key features include:\n *   <ul class=\"limit_length\">\n *     <li>Speed! The aim of Scroller for DataTables is to make rendering large data sets fast</li>\n *     <li>Full compatibility with deferred rendering in DataTables for maximum speed</li>\n *     <li>Display millions of rows</li>\n *     <li>Integration with state saving in DataTables (scrolling position is saved)</li>\n *     <li>Easy to use</li>\n *   </ul>\n *\n *  @class\n *  @constructor\n *  @global\n *  @param {object} dt DataTables settings object or API instance\n *  @param {object} [opts={}] Configuration object for Scroller. Options\n *    are defined by {@link Scroller.defaults}\n *\n *  @requires jQuery 1.7+\n *  @requires DataTables 1.11.0+\n */\nvar Scroller = function (dt, opts) {\n\t/* Sanity check - you just know it will happen */\n\tif (!(this instanceof Scroller)) {\n\t\talert(\n\t\t\t\"Scroller warning: Scroller must be initialised with the 'new' keyword.\"\n\t\t);\n\t\treturn;\n\t}\n\n\tif (opts === undefined) {\n\t\topts = {};\n\t}\n\n\tvar dtApi = $.fn.dataTable.Api(dt);\n\n\t/**\n\t * Settings object which contains customisable information for the Scroller instance\n\t * @namespace\n\t * @private\n\t * @extends Scroller.defaults\n\t */\n\tthis.s = {\n\t\t/**\n\t\t * DataTables settings object\n\t\t *  @type     object\n\t\t *  @default  Passed in as first parameter to constructor\n\t\t */\n\t\tdt: dtApi.settings()[0],\n\n\t\t/**\n\t\t * DataTables API instance\n\t\t *  @type     DataTable.Api\n\t\t */\n\t\tdtApi: dtApi,\n\n\t\t/**\n\t\t * Pixel location of the top of the drawn table in the viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\ttableTop: 0,\n\n\t\t/**\n\t\t * Pixel location of the bottom of the drawn table in the viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\ttableBottom: 0,\n\n\t\t/**\n\t\t * Pixel location of the boundary for when the next data set should be loaded and drawn\n\t\t * when scrolling up the way.\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t *  @private\n\t\t */\n\t\tredrawTop: 0,\n\n\t\t/**\n\t\t * Pixel location of the boundary for when the next data set should be loaded and drawn\n\t\t * when scrolling down the way. Note that this is actually calculated as the offset from\n\t\t * the top.\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t *  @private\n\t\t */\n\t\tredrawBottom: 0,\n\n\t\t/**\n\t\t * Auto row height or not indicator\n\t\t *  @type     bool\n\t\t *  @default  0\n\t\t */\n\t\tautoHeight: true,\n\n\t\t/**\n\t\t * Number of rows calculated as visible in the visible viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\tviewportRows: 0,\n\n\t\t/**\n\t\t * setTimeout reference for state saving, used when state saving is enabled in the DataTable\n\t\t * and when the user scrolls the viewport in order to stop the cookie set taking too much\n\t\t * CPU!\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\tstateTO: null,\n\n\t\tstateSaveThrottle: function () {},\n\n\t\t/**\n\t\t * setTimeout reference for the redraw, used when server-side processing is enabled in the\n\t\t * DataTables in order to prevent DoSing the server\n\t\t *  @type     int\n\t\t *  @default  null\n\t\t */\n\t\tdrawTO: null,\n\n\t\theights: {\n\t\t\tjump: null,\n\t\t\tpage: null,\n\t\t\tvirtual: null,\n\t\t\tscroll: null,\n\n\t\t\t/**\n\t\t\t * Height of rows in the table\n\t\t\t *  @type     int\n\t\t\t *  @default  0\n\t\t\t */\n\t\t\trow: null,\n\n\t\t\t/**\n\t\t\t * Pixel height of the viewport\n\t\t\t *  @type     int\n\t\t\t *  @default  0\n\t\t\t */\n\t\t\tviewport: null,\n\t\t\tlabelHeight: 0,\n\t\t\txbar: 0\n\t\t},\n\n\t\ttopRowFloat: 0,\n\t\tscrollDrawDiff: null,\n\t\tloaderVisible: false,\n\t\tforceReposition: false,\n\t\tbaseRowTop: 0,\n\t\tbaseScrollTop: 0,\n\t\tmousedown: false,\n\t\tlastScrollTop: 0\n\t};\n\n\t// @todo The defaults should extend a `c` property and the internal settings\n\t// only held in the `s` property. At the moment they are mixed\n\tthis.s = $.extend(this.s, Scroller.oDefaults, opts);\n\n\t// Workaround for row height being read from height object (see above comment)\n\tthis.s.heights.row = this.s.rowHeight;\n\n\t/**\n\t * DOM elements used by the class instance\n\t * @private\n\t * @namespace\n\t *\n\t */\n\tthis.dom = {\n\t\tforce: document.createElement('div'),\n\t\tlabel: $('<div class=\"dts_label\">0</div>'),\n\t\tscroller: null,\n\t\ttable: null,\n\t\tloader: null\n\t};\n\n\t// Attach the instance to the DataTables instance so it can be accessed in\n\t// future. Don't initialise Scroller twice on the same table\n\tif (this.s.dt.oScroller) {\n\t\treturn;\n\t}\n\n\tthis.s.dt.oScroller = this;\n\n\t/* Let's do it */\n\tthis.construct();\n};\n\n$.extend(Scroller.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods - to be exposed via the DataTables API\n\t */\n\n\t/**\n\t * Calculate and store information about how many rows are to be displayed\n\t * in the scrolling viewport, based on current dimensions in the browser's\n\t * rendering. This can be particularly useful if the table is initially\n\t * drawn in a hidden element - for example in a tab.\n\t *  @param {bool} [redraw=true] Redraw the table automatically after the recalculation, with\n\t *    the new dimensions forming the basis for the draw.\n\t *  @returns {void}\n\t */\n\tmeasure: function (redraw) {\n\t\tif (this.s.autoHeight) {\n\t\t\tthis._calcRowHeight();\n\t\t}\n\n\t\tvar heights = this.s.heights;\n\n\t\tif (heights.row) {\n\t\t\theights.viewport = this._parseHeight(\n\t\t\t\t$(this.dom.scroller).css('max-height')\n\t\t\t);\n\n\t\t\tthis.s.viewportRows =\n\t\t\t\tparseInt(heights.viewport / heights.row, 10) + 1;\n\t\t\tthis.s.dt._iDisplayLength =\n\t\t\t\tthis.s.viewportRows * this.s.displayBuffer;\n\t\t}\n\n\t\tvar label = this.dom.label.outerHeight();\n\n\t\theights.xbar =\n\t\t\tthis.dom.scroller.offsetHeight - this.dom.scroller.clientHeight;\n\t\theights.labelHeight = label;\n\n\t\tif (redraw === undefined || redraw) {\n\t\t\tthis.s.dt.oInstance.fnDraw(false);\n\t\t}\n\t},\n\n\t/**\n\t * Get information about current displayed record range. This corresponds to\n\t * the information usually displayed in the \"Info\" block of the table.\n\t *\n\t * @returns {object} info as an object:\n\t *  {\n\t *      start: {int}, // the 0-indexed record at the top of the viewport\n\t *      end:   {int}, // the 0-indexed record at the bottom of the viewport\n\t *  }\n\t */\n\tpageInfo: function () {\n\t\tvar dt = this.s.dt,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTotal = dt.fnRecordsDisplay(),\n\t\t\tiPossibleEnd = Math.ceil(\n\t\t\t\tthis.pixelsToRow(\n\t\t\t\t\tiScrollTop + this.s.heights.viewport,\n\t\t\t\t\tfalse,\n\t\t\t\t\tthis.s.ani\n\t\t\t\t)\n\t\t\t);\n\n\t\treturn {\n\t\t\tstart: Math.floor(this.pixelsToRow(iScrollTop, false, this.s.ani)),\n\t\t\tend: iTotal < iPossibleEnd ? iTotal - 1 : iPossibleEnd - 1\n\t\t};\n\t},\n\n\t/**\n\t * Calculate the row number that will be found at the given pixel position\n\t * (y-scroll).\n\t *\n\t * Please note that when the height of the full table exceeds 1 million\n\t * pixels, Scroller switches into a non-linear mode for the scrollbar to fit\n\t * all of the records into a finite area, but this function returns a linear\n\t * value (relative to the last non-linear positioning).\n\t *  @param {int} pixels Offset from top to calculate the row number of\n\t *  @param {int} [intParse=true] If an integer value should be returned\n\t *  @param {int} [virtual=false] Perform the calculations in the virtual domain\n\t *  @returns {int} Row index\n\t */\n\tpixelsToRow: function (pixels, intParse, virtual) {\n\t\tvar diff = pixels - this.s.baseScrollTop;\n\t\tvar row = virtual\n\t\t\t? (this._domain('physicalToVirtual', this.s.baseScrollTop) + diff) /\n\t\t\t\tthis.s.heights.row\n\t\t\t: diff / this.s.heights.row + this.s.baseRowTop;\n\n\t\treturn intParse || intParse === undefined ? parseInt(row, 10) : row;\n\t},\n\n\t/**\n\t * Calculate the pixel position from the top of the scrolling container for\n\t * a given row\n\t *  @param {int} iRow Row number to calculate the position of\n\t *  @returns {int} Pixels\n\t */\n\trowToPixels: function (rowIdx, intParse, virtual) {\n\t\tvar pixels;\n\t\tvar diff = rowIdx - this.s.baseRowTop;\n\n\t\tif (virtual) {\n\t\t\tpixels = this._domain('virtualToPhysical', this.s.baseScrollTop);\n\t\t\tpixels += diff * this.s.heights.row;\n\t\t}\n\t\telse {\n\t\t\tpixels = this.s.baseScrollTop;\n\t\t\tpixels += diff * this.s.heights.row;\n\t\t}\n\n\t\treturn intParse || intParse === undefined\n\t\t\t? parseInt(pixels, 10)\n\t\t\t: pixels;\n\t},\n\n\t/**\n\t * Calculate the row number that will be found at the given pixel position (y-scroll)\n\t *  @param {int} row Row index to scroll to\n\t *  @param {bool} [animate=true] Animate the transition or not\n\t *  @returns {void}\n\t */\n\tscrollToRow: function (row, animate) {\n\t\tvar that = this;\n\t\tvar ani = false;\n\t\tvar px = this.rowToPixels(row);\n\n\t\t// We need to know if the table will redraw or not before doing the\n\t\t// scroll. If it will not redraw, then we need to use the currently\n\t\t// displayed table, and scroll with the physical pixels. Otherwise, we\n\t\t// need to calculate the table's new position from the virtual\n\t\t// transform.\n\t\tvar preRows = ((this.s.displayBuffer - 1) / 2) * this.s.viewportRows;\n\t\tvar drawRow = row - preRows;\n\t\tif (drawRow < 0) {\n\t\t\tdrawRow = 0;\n\t\t}\n\n\t\tif (\n\t\t\t(px > this.s.redrawBottom || px < this.s.redrawTop) &&\n\t\t\tthis.s.dt._iDisplayStart !== drawRow\n\t\t) {\n\t\t\tani = true;\n\t\t\tpx = this._domain('virtualToPhysical', row * this.s.heights.row);\n\n\t\t\t// If we need records outside the current draw region, but the new\n\t\t\t// scrolling position is inside that (due to the non-linear nature\n\t\t\t// for larger numbers of records), we need to force position update.\n\t\t\tif (this.s.redrawTop < px && px < this.s.redrawBottom) {\n\t\t\t\tthis.s.forceReposition = true;\n\t\t\t\tanimate = false;\n\t\t\t}\n\t\t}\n\n\t\tif (animate === undefined || animate) {\n\t\t\tthis.s.ani = ani;\n\t\t\t$(this.dom.scroller).animate(\n\t\t\t\t{\n\t\t\t\t\tscrollTop: px\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\t// This needs to happen after the animation has completed and\n\t\t\t\t\t// the final scroll event fired\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tthat.s.ani = false;\n\t\t\t\t\t}, 250);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\t$(this.dom.scroller).scrollTop(px);\n\t\t}\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialisation for Scroller\n\t *  @returns {void}\n\t *  @private\n\t */\n\tconstruct: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dtApi;\n\n\t\t/* Sanity check */\n\t\tif (!this.s.dt.oFeatures.bPaginate) {\n\t\t\tthrow new Error(\n\t\t\t\t'Pagination must be enabled for Scroller to operate'\n\t\t\t);\n\t\t}\n\n\t\t/* Insert a div element that we can use to force the DT scrolling container to\n\t\t * the height that would be required if the whole table was being displayed\n\t\t */\n\t\tthis.dom.force.style.position = 'relative';\n\t\tthis.dom.force.style.top = '0px';\n\t\tthis.dom.force.style.left = '0px';\n\t\tthis.dom.force.style.width = '1px';\n\n\t\tthis.dom.scroller = dt.table().node().parentNode;\n\t\tthis.dom.scroller.appendChild(this.dom.force);\n\t\tthis.dom.scroller.style.position = 'relative';\n\n\t\tthis.dom.table = $('>table', this.dom.scroller)[0];\n\t\tthis.dom.table.style.position = 'absolute';\n\t\tthis.dom.table.style.top = '0px';\n\t\tthis.dom.table.style.left = '0px';\n\n\t\t// Add class to 'announce' that we are a Scroller table\n\t\t$(dt.table().container()).addClass('dts DTS');\n\n\t\tthis.dom.label.appendTo(this.dom.scroller);\n\n\t\t/* Initial size calculations */\n\t\tif (this.s.heights.row && this.s.heights.row != 'auto') {\n\t\t\tthis.s.autoHeight = false;\n\t\t}\n\n\t\t// Scrolling callback to see if a page change is needed\n\t\tthis.s.ingnoreScroll = true;\n\t\t$(this.dom.scroller).on('scroll.dt-scroller', function (e) {\n\t\t\tthat._scroll.call(that);\n\t\t});\n\n\t\t// In iOS we catch the touchstart event in case the user tries to scroll\n\t\t// while the display is already scrolling\n\t\t$(this.dom.scroller).on('touchstart.dt-scroller', function () {\n\t\t\tthat._scroll.call(that);\n\t\t});\n\n\t\t$(this.dom.scroller)\n\t\t\t.on('mousedown.dt-scroller', function () {\n\t\t\t\tthat.s.mousedown = true;\n\t\t\t})\n\t\t\t.on('mouseup.dt-scroller', function () {\n\t\t\t\tthat.s.labelVisible = false;\n\t\t\t\tthat.s.mousedown = false;\n\t\t\t\tthat.dom.label.css('display', 'none');\n\t\t\t});\n\n\t\t// On resize, update the information element, since the number of rows shown might change\n\t\t$(window).on('resize.dt-scroller', function () {\n\t\t\tthat.measure(false);\n\t\t\tthat._info();\n\t\t});\n\n\t\t// Add a state saving parameter to the DT state saving so we can restore the exact\n\t\t// position of the scrolling.\n\t\tvar initialStateSave = true;\n\t\tvar loadedState = dt.state.loaded();\n\n\t\tdt.on('stateSaveParams.scroller', function (e, settings, data) {\n\t\t\tif (initialStateSave && loadedState) {\n\t\t\t\tdata.scroller = loadedState.scroller;\n\t\t\t\tinitialStateSave = false;\n\n\t\t\t\tif (data.scroller) {\n\t\t\t\t\tthat.s.lastScrollTop = data.scroller.scrollTop;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Need to used the saved position on init\n\t\t\t\tdata.scroller = {\n\t\t\t\t\ttopRow: that.s.topRowFloat,\n\t\t\t\t\tbaseScrollTop: that.s.baseScrollTop,\n\t\t\t\t\tbaseRowTop: that.s.baseRowTop,\n\t\t\t\t\tscrollTop: that.s.lastScrollTop\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\n\t\tdt.on('stateLoadParams.scroller', function (e, settings, data) {\n\t\t\tif (data.scroller !== undefined) {\n\t\t\t\tthat.scrollToRow(data.scroller.topRow);\n\t\t\t}\n\t\t});\n\n\t\tif (loadedState && loadedState.scroller) {\n\t\t\tthis.s.topRowFloat = loadedState.scroller.topRow;\n\t\t\tthis.s.baseScrollTop = loadedState.scroller.baseScrollTop;\n\t\t\tthis.s.baseRowTop = loadedState.scroller.baseRowTop;\n\t\t}\n\n\t\tthis.measure(false);\n\n\t\tthat.s.stateSaveThrottle = DataTable.util.throttle(function () {\n\t\t\tthat.s.dtApi.state.save();\n\t\t}, 500);\n\n\t\tdt.on('init.scroller', function () {\n\t\t\tthat.measure(false);\n\n\t\t\t// Setting to `jump` will instruct _draw to calculate the scroll top\n\t\t\t// position\n\t\t\tthat.s.scrollType = 'jump';\n\t\t\tthat._draw();\n\n\t\t\t// Update the scroller when the DataTable is redrawn\n\t\t\tdt.on('draw.scroller', function () {\n\t\t\t\tthat._draw();\n\t\t\t});\n\t\t});\n\n\t\t// Set height before the draw happens, allowing everything else to update\n\t\t// on draw complete without worry for roder.\n\t\tdt.on('preDraw.dt.scroller', function () {\n\t\t\tthat._scrollForce();\n\t\t});\n\n\t\t// Destructor\n\t\tdt.on('destroy.scroller', function () {\n\t\t\t$(window).off('resize.dt-scroller');\n\t\t\t$(that.dom.scroller).off('.dt-scroller');\n\t\t\t$(that.s.dt.nTable).off('.scroller');\n\n\t\t\t$(that.s.dt.nTableWrapper).removeClass('DTS');\n\t\t\t$('div.DTS_Loading', that.dom.scroller.parentNode).remove();\n\n\t\t\tthat.dom.table.style.position = '';\n\t\t\tthat.dom.table.style.top = '';\n\t\t\tthat.dom.table.style.left = '';\n\t\t});\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Automatic calculation of table row height. This is just a little tricky here as using\n\t * initialisation DataTables has tale the table out of the document, so we need to create\n\t * a new table and insert it into the document, calculate the row height and then whip the\n\t * table out.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_calcRowHeight: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar origTable = dt.nTable;\n\t\tvar nTable = origTable.cloneNode(false);\n\t\tvar tbody = $('<tbody/>').appendTo(nTable);\n\t\tvar dtClasses = dt.oClasses;\n\n\t\t// Different locations for classes in DT2\n\t\tvar classes = DataTable.versionCheck('2')\n\t\t\t? {\n\t\t\t\t\tcontainer: dtClasses.container,\n\t\t\t\t\tscroller: dtClasses.scrolling.container,\n\t\t\t\t\tbody: dtClasses.scrolling.body\n\t\t\t}\n\t\t\t: {\n\t\t\t\t\tcontainer: dtClasses.sWrapper,\n\t\t\t\t\tscroller: dtClasses.sScrollWrapper,\n\t\t\t\t\tbody: dtClasses.sScrollBody\n\t\t\t};\n\n\t\tvar container = $(\n\t\t\t'<div class=\"' +\n\t\t\t\tclasses.container +\n\t\t\t\t' DTS\"><div class=\"' +\n\t\t\t\tclasses.scroller +\n\t\t\t\t'\"><div class=\"' +\n\t\t\t\tclasses.body +\n\t\t\t\t'\"></div></div></div>'\n\t\t);\n\n\t\t// Want 3 rows in the sizing table so :first-child and :last-child\n\t\t// CSS styles don't come into play - take the size of the middle row\n\t\t$('tbody tr:lt(4)', origTable).clone().appendTo(tbody);\n\t\tvar rowsCount = $('tr', tbody).length;\n\n\t\tif (rowsCount === 1) {\n\t\t\ttbody.prepend('<tr><td>&#160;</td></tr>');\n\t\t\ttbody.append('<tr><td>&#160;</td></tr>');\n\t\t}\n\t\telse {\n\t\t\tfor (; rowsCount < 3; rowsCount++) {\n\t\t\t\ttbody.append('<tr><td>&#160;</td></tr>');\n\t\t\t}\n\t\t}\n\n\t\t$('div.' + classes.body, container).append(nTable);\n\n\t\t// If initialised using `dom`, use the holding element as the insert point\n\t\tvar insertEl = this.s.dt.nHolding || origTable.parentNode;\n\n\t\tif (!$(insertEl).is(':visible')) {\n\t\t\tinsertEl = 'body';\n\t\t}\n\n\t\t// Remove form element links as they might select over others (particularly radio and checkboxes)\n\t\tcontainer.find('input').removeAttr('name');\n\n\t\tcontainer.appendTo(insertEl);\n\t\tthis.s.heights.row = $('tr', tbody).eq(1).outerHeight();\n\n\t\tcontainer.remove();\n\t},\n\n\t/**\n\t * Draw callback function which is fired when the DataTable is redrawn. The main function of\n\t * this method is to position the drawn table correctly the scrolling container for the rows\n\t * that is displays as a result of the scrolling position.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_draw: function () {\n\t\tvar that = this,\n\t\t\theights = this.s.heights,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTableHeight = $(this.s.dt.nTable).height(),\n\t\t\tdisplayStart = this.s.dt._iDisplayStart,\n\t\t\tdisplayLen = this.s.dt._iDisplayLength,\n\t\t\tdisplayEnd = this.s.dt.fnRecordsDisplay(),\n\t\t\tviewportEndY = iScrollTop + heights.viewport;\n\n\t\t// Disable the scroll event listener while we are updating the DOM\n\t\tthis.s.skip = true;\n\n\t\t// If paging is reset\n\t\tif (\n\t\t\t(this.s.dt.bSorted || this.s.dt.bFiltered) &&\n\t\t\tdisplayStart === 0 &&\n\t\t\t!this.s.dt._drawHold\n\t\t) {\n\t\t\tthis.s.topRowFloat = 0;\n\t\t}\n\n\t\tiScrollTop =\n\t\t\tthis.s.scrollType === 'jump'\n\t\t\t\t? this._domain(\n\t\t\t\t\t\t'virtualToPhysical',\n\t\t\t\t\t\tthis.s.topRowFloat * heights.row\n\t\t\t\t)\n\t\t\t\t: iScrollTop;\n\n\t\t// Store positional information so positional calculations can be based\n\t\t// upon the current table draw position\n\t\tthis.s.baseScrollTop = iScrollTop;\n\t\tthis.s.baseRowTop = this.s.topRowFloat;\n\n\t\t// Position the table in the virtual scroller\n\t\tvar tableTop =\n\t\t\tiScrollTop - (this.s.topRowFloat - displayStart) * heights.row;\n\t\tif (displayStart === 0) {\n\t\t\ttableTop = 0;\n\t\t}\n\t\telse if (displayStart + displayLen >= displayEnd) {\n\t\t\ttableTop = heights.scroll - iTableHeight;\n\t\t}\n\t\telse {\n\t\t\tvar iTableBottomY = tableTop + iTableHeight;\n\t\t\tif (iTableBottomY < viewportEndY) {\n\t\t\t\t// The last row of the data is above the end of the viewport.\n\t\t\t\t// This means the background is visible, which is not what the user expects.\n\t\t\t\tvar newTableTop = viewportEndY - iTableHeight;\n\t\t\t\tvar diffPx = newTableTop - tableTop;\n\t\t\t\tthis.s.baseScrollTop += diffPx + 1; // Update start row number in footer.\n\t\t\t\ttableTop = newTableTop; // Move table so last line of data is at the bottom of the viewport.\n\t\t\t}\n\t\t}\n\n\t\tthis.dom.table.style.top = tableTop + 'px';\n\n\t\t/* Cache some information for the scroller */\n\t\tthis.s.tableTop = tableTop;\n\t\tthis.s.tableBottom = iTableHeight + this.s.tableTop;\n\n\t\t// Calculate the boundaries for where a redraw will be triggered by the\n\t\t// scroll event listener\n\t\tvar boundaryPx = (iScrollTop - this.s.tableTop) * this.s.boundaryScale;\n\t\tthis.s.redrawTop = iScrollTop - boundaryPx;\n\t\tthis.s.redrawBottom =\n\t\t\tiScrollTop + boundaryPx >\n\t\t\theights.scroll - heights.viewport - heights.row\n\t\t\t\t? heights.scroll - heights.viewport - heights.row\n\t\t\t\t: iScrollTop + boundaryPx;\n\n\t\tthis.s.skip = false;\n\n\t\tif (that.s.ingnoreScroll) {\n\t\t\t// Restore the scrolling position that was saved by DataTable's state\n\t\t\t// saving Note that this is done on the second draw when data is Ajax\n\t\t\t// sourced, and the first draw when DOM soured\n\t\t\tif (\n\t\t\t\tthis.s.dt.oFeatures.bStateSave &&\n\t\t\t\tthis.s.dt.oLoadedState !== null &&\n\t\t\t\ttypeof this.s.dt.oLoadedState.scroller != 'undefined'\n\t\t\t) {\n\t\t\t\t// A quirk of DataTables is that the draw callback will occur on an\n\t\t\t\t// empty set if Ajax sourced, but not if server-side processing.\n\t\t\t\tvar ajaxSourced =\n\t\t\t\t\t(this.s.dt.sAjaxSource || that.s.dt.ajax) &&\n\t\t\t\t\t!this.s.dt.oFeatures.bServerSide\n\t\t\t\t\t\t? true\n\t\t\t\t\t\t: false;\n\n\t\t\t\tif (\n\t\t\t\t\t(ajaxSourced && this.s.dt.iDraw >= 2) ||\n\t\t\t\t\t(!ajaxSourced && this.s.dt.iDraw >= 1)\n\t\t\t\t) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t$(that.dom.scroller).scrollTop(\n\t\t\t\t\t\t\tthat.s.dt.oLoadedState.scroller.scrollTop\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// In order to prevent layout thrashing we need another\n\t\t\t\t\t\t// small delay\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tthat.s.ingnoreScroll = false;\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthat.s.ingnoreScroll = false;\n\t\t\t}\n\t\t}\n\n\t\t// Because of the order of the DT callbacks, the info update will\n\t\t// take precedence over the one we want here. So a 'thread' break is\n\t\t// needed.  Only add the thread break if bInfo is set\n\t\tif (this.s.dt.oFeatures.bInfo) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tthat._info.call(that);\n\t\t\t}, 0);\n\t\t}\n\n\t\t$(this.s.dt.nTable).triggerHandler('position.dts.dt', tableTop);\n\t},\n\n\t/**\n\t * Convert from one domain to another. The physical domain is the actual\n\t * pixel count on the screen, while the virtual is if we had browsers which\n\t * had scrolling containers of infinite height (i.e. the absolute value)\n\t *\n\t *  @param {string} dir Domain transform direction, `virtualToPhysical` or\n\t *    `physicalToVirtual`\n\t *  @returns {number} Calculated transform\n\t *  @private\n\t */\n\t_domain: function (dir, val) {\n\t\tvar heights = this.s.heights;\n\t\tvar diff;\n\t\tvar magic = 10000; // the point at which the non-linear calculations start to happen\n\n\t\t// If the virtual and physical height match, then we use a linear\n\t\t// transform between the two, allowing the scrollbar to be linear\n\t\tif (heights.virtual === heights.scroll) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// In the first 10k pixels and the last 10k pixels, we want the scrolling\n\t\t// to be linear. After that it can be non-linear. It would be unusual for\n\t\t// anyone to mouse wheel through that much.\n\t\tif (val < magic) {\n\t\t\treturn val;\n\t\t}\n\t\telse if (\n\t\t\tdir === 'virtualToPhysical' &&\n\t\t\tval >= heights.virtual - magic\n\t\t) {\n\t\t\tdiff = heights.virtual - val;\n\t\t\treturn heights.scroll - diff;\n\t\t}\n\t\telse if (dir === 'physicalToVirtual' && val >= heights.scroll - magic) {\n\t\t\tdiff = heights.scroll - val;\n\t\t\treturn heights.virtual - diff;\n\t\t}\n\n\t\t// Otherwise, we want a non-linear scrollbar to take account of the\n\t\t// redrawing regions at the start and end of the table, otherwise these\n\t\t// can stutter badly - on large tables 30px (for example) scroll might\n\t\t// be hundreds of rows, so the table would be redrawing every few px at\n\t\t// the start and end. Use a simple linear eq. to stop this, effectively\n\t\t// causing a kink in the scrolling ratio. It does mean the scrollbar is\n\t\t// non-linear, but with such massive data sets, the scrollbar is going\n\t\t// to be a best guess anyway\n\t\tvar m =\n\t\t\t(heights.virtual - magic - magic) /\n\t\t\t(heights.scroll - magic - magic);\n\t\tvar c = magic - m * magic;\n\n\t\treturn dir === 'virtualToPhysical' ? (val - c) / m : m * val + c;\n\t},\n\n\t/**\n\t * Update any information elements that are controlled by the DataTable based on the scrolling\n\t * viewport and what rows are visible in it. This function basically acts in the same way as\n\t * _fnUpdateInfo in DataTables, and effectively replaces that function.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_info: function () {\n\t\tif (!this.s.dt.oFeatures.bInfo) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dt = this.s.dt,\n\t\t\tdtApi = this.s.dtApi,\n\t\t\tlanguage = dt.oLanguage,\n\t\t\tinfo = dtApi.page.info(),\n\t\t\ttotal = info.recordsDisplay,\n\t\t\tmax = info.recordsTotal,\n\t\t\tstart = Math.floor(this.s.topRowFloat) + 1,\n\t\t\tpossibleEnd = start + Math.floor(this.s.heights.viewport / this.s.heights.row),\n\t\t\tend = possibleEnd > total ? total : possibleEnd,\n\t\t\tresult;\n\n\t\tif (total === 0 && total == max) {\n\t\t\t/* Empty record set */\n\t\t\tresult = language.sInfoEmpty + language.sInfoPostFix;\n\t\t}\n\t\telse if (total === 0) {\n\t\t\t// Empty record set after filtering\n\t\t\tresult =\n\t\t\t\tlanguage.sInfoEmpty +\n\t\t\t\t' ' +\n\t\t\t\tlanguage.sInfoFiltered +\n\t\t\t\tlanguage.sInfoPostFix;\n\t\t}\n\t\telse if (total == max) {\n\t\t\t// Normal record set\n\t\t\tresult = language.sInfo + language.sInfoPostFix;\n\t\t}\n\t\telse {\n\t\t\t// Record set after filtering\n\t\t\tresult = language.sInfo;\n\t\t\t' ' + language.sInfoFiltered + language.sInfoPostFix;\n\t\t}\n\n\t\tresult = this._macros(result, start, end, max, total);\n\n\t\tvar callback = language.fnInfoCallback;\n\t\tif (callback) {\n\t\t\tresult = callback.call(\n\t\t\t\tdt.oInstance,\n\t\t\t\tdt,\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\tmax,\n\t\t\t\ttotal,\n\t\t\t\tresult\n\t\t\t);\n\t\t}\n\n\t\t// DT 1.x features\n\t\tvar n = dt.aanFeatures.i;\n\t\tif (typeof n != 'undefined') {\n\t\t\tfor (var i = 0, iLen = n.length; i < iLen; i++) {\n\t\t\t\t$(n[i]).html(result);\n\t\t\t}\n\n\t\t\t$(dt.nTable).triggerHandler('info.dt');\n\t\t}\n\n\t\t// DT 2.x features\n\t\t$('div.dt-info', dtApi.table().container()).each(function () {\n\t\t\t$(this).html(result);\n\t\t\tdtApi.trigger('info', [this, result]);\n\t\t});\n\t},\n\n\t/**\n\t * String replacement for info display. Basically the same as what DataTables does.\n\t *\n\t * @param {*} str\n\t * @param {*} start\n\t * @param {*} end\n\t * @param {*} max\n\t * @param {*} total\n\t * @returns Formatted string\n\t */\n\t_macros: function (str, start, end, max, total) {\n\t\tvar api = this.s.dtApi;\n\t\tvar settings = this.s.dt;\n\t\tvar formatter = settings.fnFormatNumber;\n\n\t\treturn str\n\t\t\t.replace(/_START_/g, formatter.call(settings, start))\n\t\t\t.replace(/_END_/g, formatter.call(settings, end))\n\t\t\t.replace(/_MAX_/g, formatter.call(settings, max))\n\t\t\t.replace(/_TOTAL_/g, formatter.call(settings, total))\n\t\t\t.replace(/_ENTRIES_/g, api.i18n('entries', ''))\n\t\t\t.replace(/_ENTRIES-MAX_/g, api.i18n('entries', '', max))\n\t\t\t.replace(/_ENTRIES-TOTAL_/g, api.i18n('entries', '', total));\n\t},\n\n\t/**\n\t * Parse CSS height property string as number\n\t *\n\t * An attempt is made to parse the string as a number. Currently supported units are 'px',\n\t * 'vh', and 'rem'. 'em' is partially supported; it works as long as the parent element's\n\t * font size matches the body element. Zero is returned for unrecognized strings.\n\t *  @param {string} cssHeight CSS height property string\n\t *  @returns {number} height\n\t *  @private\n\t */\n\t_parseHeight: function (cssHeight) {\n\t\tvar height;\n\t\tvar matches = /^([+-]?(?:\\d+(?:\\.\\d+)?|\\.\\d+))(px|em|rem|vh)$/.exec(\n\t\t\tcssHeight\n\t\t);\n\n\t\tif (matches === null) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar value = parseFloat(matches[1]);\n\t\tvar unit = matches[2];\n\n\t\tif (unit === 'px') {\n\t\t\theight = value;\n\t\t}\n\t\telse if (unit === 'vh') {\n\t\t\theight = (value / 100) * $(window).height();\n\t\t}\n\t\telse if (unit === 'rem') {\n\t\t\theight = value * parseFloat($(':root').css('font-size'));\n\t\t}\n\t\telse if (unit === 'em') {\n\t\t\theight = value * parseFloat($('body').css('font-size'));\n\t\t}\n\n\t\treturn height ? height : 0;\n\t},\n\n\t/**\n\t * Scrolling function - fired whenever the scrolling position is changed.\n\t * This method needs to use the stored values to see if the table should be\n\t * redrawn as we are moving towards the end of the information that is\n\t * currently drawn or not. If needed, then it will redraw the table based on\n\t * the new position.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_scroll: function () {\n\t\tvar that = this,\n\t\t\theights = this.s.heights,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTopRow;\n\n\t\tif (this.s.skip) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.s.ingnoreScroll) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (iScrollTop === this.s.lastScrollTop) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* If the table has been sorted or filtered, then we use the redraw that\n\t\t * DataTables as done, rather than performing our own\n\t\t */\n\t\tif (this.s.dt.bFiltered || this.s.dt.bSorted) {\n\t\t\tthis.s.lastScrollTop = 0;\n\t\t\treturn;\n\t\t}\n\n\t\t/* We don't want to state save on every scroll event - that's heavy\n\t\t * handed, so use a timeout to update the state saving only when the\n\t\t * scrolling has finished\n\t\t */\n\t\tclearTimeout(this.s.stateTO);\n\t\tthis.s.stateTO = setTimeout(function () {\n\t\t\tthat.s.dtApi.state.save();\n\t\t}, 250);\n\n\t\tthis.s.scrollType =\n\t\t\tMath.abs(iScrollTop - this.s.lastScrollTop) > heights.viewport\n\t\t\t\t? 'jump'\n\t\t\t\t: 'cont';\n\n\t\tthis.s.topRowFloat =\n\t\t\tthis.s.scrollType === 'cont'\n\t\t\t\t? this.pixelsToRow(iScrollTop, false, false)\n\t\t\t\t: this._domain('physicalToVirtual', iScrollTop) / heights.row;\n\n\t\tif (this.s.topRowFloat < 0) {\n\t\t\tthis.s.topRowFloat = 0;\n\t\t}\n\n\t\t/* Check if the scroll point is outside the trigger boundary which would required\n\t\t * a DataTables redraw\n\t\t */\n\t\tif (\n\t\t\tthis.s.forceReposition ||\n\t\t\tiScrollTop < this.s.redrawTop ||\n\t\t\tiScrollTop > this.s.redrawBottom\n\t\t) {\n\t\t\tvar preRows = Math.ceil(\n\t\t\t\t((this.s.displayBuffer - 1) / 2) * this.s.viewportRows\n\t\t\t);\n\n\t\t\tiTopRow = parseInt(this.s.topRowFloat, 10) - preRows;\n\t\t\tthis.s.forceReposition = false;\n\n\t\t\tif (iTopRow <= 0) {\n\t\t\t\t/* At the start of the table */\n\t\t\t\tiTopRow = 0;\n\t\t\t}\n\t\t\telse if (\n\t\t\t\tiTopRow + this.s.dt._iDisplayLength >\n\t\t\t\tthis.s.dt.fnRecordsDisplay()\n\t\t\t) {\n\t\t\t\t/* At the end of the table */\n\t\t\t\tiTopRow =\n\t\t\t\t\tthis.s.dt.fnRecordsDisplay() - this.s.dt._iDisplayLength;\n\t\t\t\tif (iTopRow < 0) {\n\t\t\t\t\tiTopRow = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (iTopRow % 2 !== 0) {\n\t\t\t\t// For the row-striping classes (odd/even) we want only to start\n\t\t\t\t// on evens otherwise the stripes will change between draws and\n\t\t\t\t// look rubbish\n\t\t\t\tiTopRow++;\n\t\t\t}\n\n\t\t\t// Store calcuated value, in case the following condition is not met, but so\n\t\t\t// that the draw function will still use it.\n\t\t\tthis.s.targetTop = iTopRow;\n\n\t\t\tif (iTopRow != this.s.dt._iDisplayStart) {\n\t\t\t\t/* Cache the new table position for quick lookups */\n\t\t\t\tthis.s.tableTop = $(this.s.dt.nTable).offset().top;\n\t\t\t\tthis.s.tableBottom =\n\t\t\t\t\t$(this.s.dt.nTable).height() + this.s.tableTop;\n\n\t\t\t\tvar draw = function () {\n\t\t\t\t\tthat.s.dt._iDisplayStart = that.s.targetTop;\n\t\t\t\t\tthat.s.dtApi.draw('page');\n\t\t\t\t};\n\n\t\t\t\t/* Do the DataTables redraw based on the calculated start point - note that when\n\t\t\t\t * using server-side processing we introduce a small delay to not DoS the server...\n\t\t\t\t */\n\t\t\t\tif (this.s.dt.oFeatures.bServerSide) {\n\t\t\t\t\tthis.s.forceReposition = true;\n\n\t\t\t\t\t// This is used only for KeyTable and is not currently publicly\n\t\t\t\t\t// documented. Open question - is it useful for anything else?\n\t\t\t\t\t$(this.s.dt.nTable).triggerHandler('scroller-will-draw.dt');\n\n\t\t\t\t\tif (DataTable.versionCheck('2')) {\n\t\t\t\t\t\tthat.s.dtApi.processing(true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.s.dt.oApi._fnProcessingDisplay(this.s.dt, true);\n\t\t\t\t\t}\n\n\t\t\t\t\tclearTimeout(this.s.drawTO);\n\t\t\t\t\tthis.s.drawTO = setTimeout(draw, this.s.serverWait);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdraw();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.s.topRowFloat = this.pixelsToRow(iScrollTop, false, true);\n\t\t}\n\n\t\t/* Update the table's information display for what is now in the viewport */\n\t\tthis._info();\n\n\t\tthis.s.lastScrollTop = iScrollTop;\n\t\tthis.s.stateSaveThrottle();\n\n\t\tif (this.s.scrollType === 'jump' && this.s.mousedown) {\n\t\t\tthis.s.labelVisible = true;\n\t\t}\n\t\tif (this.s.labelVisible) {\n\t\t\tvar labelFactor =\n\t\t\t\t(heights.viewport - heights.labelHeight - heights.xbar) /\n\t\t\t\theights.scroll;\n\n\t\t\tthis.dom.label\n\t\t\t\t.html(\n\t\t\t\t\tthis.s.dt.fnFormatNumber(\n\t\t\t\t\t\tparseInt(this.s.topRowFloat, 10) + 1\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.css('top', iScrollTop + iScrollTop * labelFactor)\n\t\t\t\t.css('display', 'block');\n\t\t}\n\t},\n\n\t/**\n\t * Force the scrolling container to have height beyond that of just the\n\t * table that has been drawn so the user can scroll the whole data set.\n\t *\n\t * Note that if the calculated required scrolling height exceeds a maximum\n\t * value (1 million pixels - hard-coded) the forcing element will be set\n\t * only to that maximum value and virtual / physical domain transforms will\n\t * be used to allow Scroller to display tables of any number of records.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_scrollForce: function () {\n\t\tvar heights = this.s.heights;\n\t\tvar max = 1000000;\n\n\t\theights.virtual = heights.row * this.s.dt.fnRecordsDisplay();\n\t\theights.scroll = heights.virtual;\n\n\t\tif (heights.scroll > max) {\n\t\t\theights.scroll = max;\n\t\t}\n\n\t\t// Minimum height so there is always a row visible (the 'no rows found'\n\t\t// if reduced to zero filtering)\n\t\tthis.dom.force.style.height =\n\t\t\theights.scroll > this.s.heights.row\n\t\t\t\t? heights.scroll + 'px'\n\t\t\t\t: this.s.heights.row + 'px';\n\t}\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Statics\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Scroller default settings for initialisation\n *  @namespace\n *  @name Scroller.defaults\n *  @static\n */\nScroller.defaults = {\n\t/**\n\t * Scroller uses the boundary scaling factor to decide when to redraw the table - which it\n\t * typically does before you reach the end of the currently loaded data set (in order to\n\t * allow the data to look continuous to a user scrolling through the data). If given as 0\n\t * then the table will be redrawn whenever the viewport is scrolled, while 1 would not\n\t * redraw the table until the currently loaded data has all been shown. You will want\n\t * something in the middle - the default factor of 0.5 is usually suitable.\n\t *  @type     float\n\t *  @default  0.5\n\t *  @static\n\t */\n\tboundaryScale: 0.5,\n\n\t/**\n\t * The display buffer is what Scroller uses to calculate how many rows it should pre-fetch\n\t * for scrolling. Scroller automatically adjusts DataTables' display length to pre-fetch\n\t * rows that will be shown in \"near scrolling\" (i.e. just beyond the current display area).\n\t * The value is based upon the number of rows that can be displayed in the viewport (i.e.\n\t * a value of 1), and will apply the display range to records before before and after the\n\t * current viewport - i.e. a factor of 3 will allow Scroller to pre-fetch 1 viewport's worth\n\t * of rows before the current viewport, the current viewport's rows and 1 viewport's worth\n\t * of rows after the current viewport. Adjusting this value can be useful for ensuring\n\t * smooth scrolling based on your data set.\n\t *  @type     int\n\t *  @default  7\n\t *  @static\n\t */\n\tdisplayBuffer: 9,\n\n\t/**\n\t * Scroller will attempt to automatically calculate the height of rows for it's internal\n\t * calculations. However the height that is used can be overridden using this parameter.\n\t *  @type     int|string\n\t *  @default  auto\n\t *  @static\n\t */\n\trowHeight: 'auto',\n\n\t/**\n\t * When using server-side processing, Scroller will wait a small amount of time to allow\n\t * the scrolling to finish before requesting more data from the server. This prevents\n\t * you from DoSing your own server! The wait time can be configured by this parameter.\n\t *  @type     int\n\t *  @default  200\n\t *  @static\n\t */\n\tserverWait: 200\n};\n\nScroller.oDefaults = Scroller.defaults;\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Scroller version\n *  @type      String\n *  @default   See code\n *  @name      Scroller.version\n *  @static\n */\nScroller.version = '2.3.0';\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Initialisation\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('preInit.dt.dtscroller', function (e, settings) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.scroller;\n\tvar defaults = DataTable.defaults.scroller;\n\n\tif (init || defaults) {\n\t\tvar opts = $.extend({}, init, defaults);\n\n\t\tif (init !== false) {\n\t\t\tnew Scroller(settings, opts);\n\t\t}\n\t}\n});\n\n// Attach Scroller to DataTables so it can be accessed as an 'extra'\n$.fn.dataTable.Scroller = Scroller;\n$.fn.DataTable.Scroller = Scroller;\n\n// DataTables 1.10 API method aliases\nvar Api = $.fn.dataTable.Api;\n\nApi.register('scroller()', function () {\n\treturn this;\n});\n\n// Undocumented and deprecated - is it actually useful at all?\nApi.register('scroller().rowToPixels()', function (rowIdx, intParse, virtual) {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.rowToPixels(rowIdx, intParse, virtual);\n\t}\n\t// undefined\n});\n\n// Undocumented and deprecated - is it actually useful at all?\nApi.register('scroller().pixelsToRow()', function (pixels, intParse, virtual) {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.pixelsToRow(pixels, intParse, virtual);\n\t}\n\t// undefined\n});\n\n// `scroller().scrollToRow()` is undocumented and deprecated. Use `scroller.toPosition()\nApi.register(\n\t['scroller().scrollToRow()', 'scroller.toPosition()'],\n\tfunction (idx, ani) {\n\t\tthis.iterator('table', function (ctx) {\n\t\t\tif (ctx.oScroller) {\n\t\t\t\tctx.oScroller.scrollToRow(idx, ani);\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n);\n\nApi.register('row().scrollTo()', function (ani) {\n\tvar that = this;\n\n\tthis.iterator('row', function (ctx, rowIdx) {\n\t\tif (ctx.oScroller) {\n\t\t\tvar displayIdx = that\n\t\t\t\t.rows({ order: 'applied', search: 'applied' })\n\t\t\t\t.indexes()\n\t\t\t\t.indexOf(rowIdx);\n\n\t\t\tctx.oScroller.scrollToRow(displayIdx, ani);\n\t\t}\n\t});\n\n\treturn this;\n});\n\nApi.register('scroller.measure()', function (redraw) {\n\tthis.iterator('table', function (ctx) {\n\t\tif (ctx.oScroller) {\n\t\t\tctx.oScroller.measure(redraw);\n\t\t}\n\t});\n\n\treturn this;\n});\n\nApi.register('scroller.page()', function () {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.pageInfo();\n\t}\n\t// undefined\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/js/scroller.bootstrap.js",
    "content": "/*! Bootstrap 3 styling wrapper for Scroller\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-scroller'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Scroller ) {\n\t\t\t\trequire('datatables.net-scroller')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/js/scroller.bootstrap4.js",
    "content": "/*! Bootstrap 4 styling wrapper for Scroller\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-scroller'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Scroller ) {\n\t\t\t\trequire('datatables.net-scroller')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/js/scroller.bootstrap5.js",
    "content": "/*! Bootstrap 5 styling wrapper for Scroller\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-scroller'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Scroller ) {\n\t\t\t\trequire('datatables.net-scroller')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/js/scroller.bulma.js",
    "content": "/*! Bulma styling wrapper for Scroller\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-scroller'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Scroller ) {\n\t\t\t\trequire('datatables.net-scroller')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/js/scroller.dataTables.js",
    "content": "/*! DataTables styling wrapper for Scroller\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-scroller'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Scroller ) {\n\t\t\t\trequire('datatables.net-scroller')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/js/scroller.foundation.js",
    "content": "/*! Foundation styling wrapper for Scroller\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-scroller'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Scroller ) {\n\t\t\t\trequire('datatables.net-scroller')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/js/scroller.jqueryui.js",
    "content": "/*! jQuery UI styling wrapper for Scroller\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-scroller'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Scroller ) {\n\t\t\t\trequire('datatables.net-scroller')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Scroller-2.3.0/js/scroller.semanticui.js",
    "content": "/*! Semanic UI styling wrapper for Scroller\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-scroller'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Scroller ) {\n\t\t\t\trequire('datatables.net-scroller')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/css/searchBuilder.bootstrap.css",
    "content": "div.dt-button-collection {\n  overflow: visible !important;\n  z-index: 2002 !important;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  padding-left: 1em !important;\n  padding-right: 1em !important;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsb-titleRow {\n  padding-right: 40px;\n}\n\n.dtsb-greyscale {\n  border: 1px solid #cecece !important;\n}\n\ndiv.dtsb-logicContainer .dtsb-greyscale {\n  border: none !important;\n}\n\ndiv.dtsb-searchBuilder {\n  justify-content: space-evenly;\n  cursor: default;\n  margin-bottom: 1em;\n  text-align: left;\n}\ndiv.dtsb-searchBuilder button.dtsb-button,\ndiv.dtsb-searchBuilder select {\n  font-size: 1em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  justify-content: space-evenly;\n  margin-bottom: 0.5em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  display: inline-block;\n  padding-top: 14px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title:empty {\n  display: inline;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow button.dtsb-clearAll {\n  float: right;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-vertical .dtsb-value, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-data, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-condition {\n  display: block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group {\n  position: relative;\n  clear: both;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-search {\n  float: right;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-clearGroup {\n  margin: 2px;\n  text-align: center;\n  padding: 0;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n  position: absolute;\n  margin-top: 0.8em;\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n  margin-bottom: 0.8em;\n  display: flex;\n  justify-content: start;\n  flex-flow: row wrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n  padding: 0.4em;\n  margin-right: 0.8em;\n  min-width: 5em;\n  max-width: 20em;\n  color: inherit;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown option.dtsb-notItalic,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input option.dtsb-notItalic {\n  font-style: normal;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-italic {\n  font-style: italic;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n  flex: 1;\n  white-space: nowrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont span.dtsp-joiner {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input.dtsb-value {\n  width: 33%;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont select,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input {\n  height: 100%;\n  box-sizing: border-box;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n  margin-left: auto;\n  display: inline-block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left:last-child {\n  margin-right: 0;\n}\n@media screen and (max-width: 550px) {\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n    display: flex;\n    flex-flow: none;\n    flex-direction: column;\n    justify-content: start;\n    padding-right: calc(35px + 0.8em);\n    margin-bottom: 0px;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:first-child), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:nth-child(2)), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:last-child) {\n    padding-top: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:first-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:nth-child(2), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:last-child {\n    padding-top: 0em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n    max-width: none;\n    width: 100%;\n    margin-bottom: 0.8em;\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n    position: absolute;\n    width: 35px;\n    display: flex;\n    flex-wrap: wrap-reverse;\n    right: 0;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button {\n    margin-right: 0px !important;\n  }\n}\n\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  height: 40px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  padding-top: 10px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n  margin-top: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-logic {\n  border: none;\n  border-radius: 0px;\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: 3em;\n  margin: 0px;\n  padding: 6px 9px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-clearGroup {\n  border: none;\n  border-radius: 0px;\n  min-width: 2em;\n  margin: 0px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-condition {\n  border-color: #4cae4c;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-data {\n  border-color: #d43f3a;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-value, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-value {\n  border-color: #2e6da4;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/css/searchBuilder.bootstrap4.css",
    "content": "div.dt-button-collection {\n  overflow: visible !important;\n  z-index: 2002 !important;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  padding-left: 1em !important;\n  padding-right: 1em !important;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsb-titleRow {\n  padding-right: 40px;\n}\n\n.dtsb-greyscale {\n  border: 1px solid #cecece !important;\n}\n\ndiv.dtsb-logicContainer .dtsb-greyscale {\n  border: none !important;\n}\n\ndiv.dtsb-searchBuilder {\n  justify-content: space-evenly;\n  cursor: default;\n  margin-bottom: 1em;\n  text-align: left;\n}\ndiv.dtsb-searchBuilder button.dtsb-button,\ndiv.dtsb-searchBuilder select {\n  font-size: 1em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  justify-content: space-evenly;\n  margin-bottom: 0.5em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  display: inline-block;\n  padding-top: 14px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title:empty {\n  display: inline;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow button.dtsb-clearAll {\n  float: right;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-vertical .dtsb-value, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-data, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-condition {\n  display: block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group {\n  position: relative;\n  clear: both;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-search {\n  float: right;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-clearGroup {\n  margin: 2px;\n  text-align: center;\n  padding: 0;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n  position: absolute;\n  margin-top: 0.8em;\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n  margin-bottom: 0.8em;\n  display: flex;\n  justify-content: start;\n  flex-flow: row wrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n  padding: 0.4em;\n  margin-right: 0.8em;\n  min-width: 5em;\n  max-width: 20em;\n  color: inherit;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown option.dtsb-notItalic,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input option.dtsb-notItalic {\n  font-style: normal;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-italic {\n  font-style: italic;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n  flex: 1;\n  white-space: nowrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont span.dtsp-joiner {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input.dtsb-value {\n  width: 33%;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont select,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input {\n  height: 100%;\n  box-sizing: border-box;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n  margin-left: auto;\n  display: inline-block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left:last-child {\n  margin-right: 0;\n}\n@media screen and (max-width: 550px) {\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n    display: flex;\n    flex-flow: none;\n    flex-direction: column;\n    justify-content: start;\n    padding-right: calc(35px + 0.8em);\n    margin-bottom: 0px;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:first-child), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:nth-child(2)), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:last-child) {\n    padding-top: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:first-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:nth-child(2), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:last-child {\n    padding-top: 0em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n    max-width: none;\n    width: 100%;\n    margin-bottom: 0.8em;\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n    position: absolute;\n    width: 35px;\n    display: flex;\n    flex-wrap: wrap-reverse;\n    right: 0;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button {\n    margin-right: 0px !important;\n  }\n}\n\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  height: 40px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  padding-top: 10px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-clearGroup {\n  margin-right: 8px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria .form-control {\n  width: auto;\n  display: inline-block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-condition {\n  border-color: #28a745;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-data {\n  border-color: #dc3545;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-value, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-value {\n  border-color: #007bff;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  border-radius: 4px;\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n  margin-top: 10px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-logic {\n  border: none;\n  border-radius: 0px;\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: 3em;\n  margin: 0px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-clearGroup {\n  border: none;\n  border-radius: 0px;\n  width: 2em;\n  margin: 0px;\n}\n\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  padding-left: 10px;\n  padding-right: 10px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/css/searchBuilder.bootstrap5.css",
    "content": "div.dt-button-collection {\n  overflow: visible !important;\n  z-index: 2002 !important;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  padding-left: 1em !important;\n  padding-right: 1em !important;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsb-titleRow {\n  padding-right: 40px;\n}\n\n.dtsb-greyscale {\n  border: 1px solid #cecece !important;\n}\n\ndiv.dtsb-logicContainer .dtsb-greyscale {\n  border: none !important;\n}\n\ndiv.dtsb-searchBuilder {\n  justify-content: space-evenly;\n  cursor: default;\n  margin-bottom: 1em;\n  text-align: left;\n}\ndiv.dtsb-searchBuilder button.dtsb-button,\ndiv.dtsb-searchBuilder select {\n  font-size: 1em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  justify-content: space-evenly;\n  margin-bottom: 0.5em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  display: inline-block;\n  padding-top: 14px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title:empty {\n  display: inline;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow button.dtsb-clearAll {\n  float: right;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-vertical .dtsb-value, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-data, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-condition {\n  display: block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group {\n  position: relative;\n  clear: both;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-search {\n  float: right;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-clearGroup {\n  margin: 2px;\n  text-align: center;\n  padding: 0;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n  position: absolute;\n  margin-top: 0.8em;\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n  margin-bottom: 0.8em;\n  display: flex;\n  justify-content: start;\n  flex-flow: row wrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n  padding: 0.4em;\n  margin-right: 0.8em;\n  min-width: 5em;\n  max-width: 20em;\n  color: inherit;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown option.dtsb-notItalic,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input option.dtsb-notItalic {\n  font-style: normal;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-italic {\n  font-style: italic;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n  flex: 1;\n  white-space: nowrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont span.dtsp-joiner {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input.dtsb-value {\n  width: 33%;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont select,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input {\n  height: 100%;\n  box-sizing: border-box;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n  margin-left: auto;\n  display: inline-block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left:last-child {\n  margin-right: 0;\n}\n@media screen and (max-width: 550px) {\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n    display: flex;\n    flex-flow: none;\n    flex-direction: column;\n    justify-content: start;\n    padding-right: calc(35px + 0.8em);\n    margin-bottom: 0px;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:first-child), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:nth-child(2)), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:last-child) {\n    padding-top: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:first-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:nth-child(2), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:last-child {\n    padding-top: 0em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n    max-width: none;\n    width: 100%;\n    margin-bottom: 0.8em;\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n    position: absolute;\n    width: 35px;\n    display: flex;\n    flex-wrap: wrap-reverse;\n    right: 0;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button {\n    margin-right: 0px !important;\n  }\n}\n\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  height: 40px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  padding-top: 10px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-clearGroup {\n  margin-right: 8px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria .form-select {\n  width: auto;\n  display: inline-block;\n  padding-right: 30px !important;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-condition {\n  border-color: #28a745;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-data {\n  border-color: #dc3545;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-value, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-value {\n  border-color: #007bff;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria .form-control {\n  display: inline-block;\n  font-size: 1em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  border-radius: 4px;\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n  margin-top: 10px;\n  overflow: hidden;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-logic {\n  border: none;\n  border-radius: 0px;\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: 3em;\n  margin: 0px;\n  padding: 0.375rem 0.7rem;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-clearGroup {\n  border: none;\n  border-radius: 0px;\n  width: 2em;\n  margin: 0px;\n}\n\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  padding-left: 10px;\n  padding-right: 10px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/css/searchBuilder.bulma.css",
    "content": "div.dt-button-collection {\n  overflow: visible !important;\n  z-index: 2002 !important;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  padding-left: 1em !important;\n  padding-right: 1em !important;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsb-titleRow {\n  padding-right: 40px;\n}\n\n.dtsb-greyscale {\n  border: 1px solid #cecece !important;\n}\n\ndiv.dtsb-logicContainer .dtsb-greyscale {\n  border: none !important;\n}\n\ndiv.dtsb-searchBuilder {\n  justify-content: space-evenly;\n  cursor: default;\n  margin-bottom: 1em;\n  text-align: left;\n}\ndiv.dtsb-searchBuilder button.dtsb-button,\ndiv.dtsb-searchBuilder select {\n  font-size: 1em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  justify-content: space-evenly;\n  margin-bottom: 0.5em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  display: inline-block;\n  padding-top: 14px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title:empty {\n  display: inline;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow button.dtsb-clearAll {\n  float: right;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-vertical .dtsb-value, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-data, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-condition {\n  display: block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group {\n  position: relative;\n  clear: both;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-search {\n  float: right;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-clearGroup {\n  margin: 2px;\n  text-align: center;\n  padding: 0;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n  position: absolute;\n  margin-top: 0.8em;\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n  margin-bottom: 0.8em;\n  display: flex;\n  justify-content: start;\n  flex-flow: row wrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n  padding: 0.4em;\n  margin-right: 0.8em;\n  min-width: 5em;\n  max-width: 20em;\n  color: inherit;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown option.dtsb-notItalic,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input option.dtsb-notItalic {\n  font-style: normal;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-italic {\n  font-style: italic;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n  flex: 1;\n  white-space: nowrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont span.dtsp-joiner {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input.dtsb-value {\n  width: 33%;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont select,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input {\n  height: 100%;\n  box-sizing: border-box;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n  margin-left: auto;\n  display: inline-block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left:last-child {\n  margin-right: 0;\n}\n@media screen and (max-width: 550px) {\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n    display: flex;\n    flex-flow: none;\n    flex-direction: column;\n    justify-content: start;\n    padding-right: calc(35px + 0.8em);\n    margin-bottom: 0px;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:first-child), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:nth-child(2)), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:last-child) {\n    padding-top: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:first-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:nth-child(2), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:last-child {\n    padding-top: 0em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n    max-width: none;\n    width: 100%;\n    margin-bottom: 0.8em;\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n    position: absolute;\n    width: 35px;\n    display: flex;\n    flex-wrap: wrap-reverse;\n    right: 0;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button {\n    margin-right: 0px !important;\n  }\n}\n\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  margin-bottom: 1.5em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-clearGroup {\n  margin-right: 8px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown {\n  height: 2.5em;\n  border-radius: 0.375em;\n  background-color: #fff;\n  padding-right: 2.5em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-condition {\n  border-color: #48c78e;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-data {\n  border-color: #ef2e55;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-value, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-value {\n  border-color: #3e8ed0;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  border-radius: 4px;\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n  margin-top: 10px;\n  overflow: hidden;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-logic {\n  border: none;\n  border-radius: 0px;\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: 3em;\n  margin: 0px;\n  padding: 0.375rem 0rem;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-clearGroup {\n  border: none;\n  border-radius: 0px;\n  width: 2em;\n  margin: 0px;\n}\n\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  padding-left: 10px;\n  padding-right: 10px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/css/searchBuilder.dataTables.css",
    "content": "div.dt-button-collection {\n  overflow: visible !important;\n  z-index: 2002 !important;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  padding-left: 1em !important;\n  padding-right: 1em !important;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsb-titleRow {\n  padding-right: 40px;\n}\n\n.dtsb-greyscale {\n  border: 1px solid #cecece !important;\n}\n\ndiv.dtsb-logicContainer .dtsb-greyscale {\n  border: none !important;\n}\n\ndiv.dtsb-searchBuilder {\n  justify-content: space-evenly;\n  cursor: default;\n  margin-bottom: 1em;\n  text-align: left;\n}\ndiv.dtsb-searchBuilder button.dtsb-button,\ndiv.dtsb-searchBuilder select {\n  font-size: 1em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  justify-content: space-evenly;\n  margin-bottom: 0.5em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  display: inline-block;\n  padding-top: 14px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title:empty {\n  display: inline;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow button.dtsb-clearAll {\n  float: right;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-vertical .dtsb-value, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-data, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-condition {\n  display: block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group {\n  position: relative;\n  clear: both;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-search {\n  float: right;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-clearGroup {\n  margin: 2px;\n  text-align: center;\n  padding: 0;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n  position: absolute;\n  margin-top: 0.8em;\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n  margin-bottom: 0.8em;\n  display: flex;\n  justify-content: start;\n  flex-flow: row wrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n  padding: 0.4em;\n  margin-right: 0.8em;\n  min-width: 5em;\n  max-width: 20em;\n  color: inherit;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown option.dtsb-notItalic,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input option.dtsb-notItalic {\n  font-style: normal;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-italic {\n  font-style: italic;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n  flex: 1;\n  white-space: nowrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont span.dtsp-joiner {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input.dtsb-value {\n  width: 33%;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont select,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input {\n  height: 100%;\n  box-sizing: border-box;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n  margin-left: auto;\n  display: inline-block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left:last-child {\n  margin-right: 0;\n}\n@media screen and (max-width: 550px) {\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n    display: flex;\n    flex-flow: none;\n    flex-direction: column;\n    justify-content: start;\n    padding-right: calc(35px + 0.8em);\n    margin-bottom: 0px;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:first-child), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:nth-child(2)), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:last-child) {\n    padding-top: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:first-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:nth-child(2), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:last-child {\n    padding-top: 0em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n    max-width: none;\n    width: 100%;\n    margin-bottom: 0.8em;\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n    position: absolute;\n    width: 35px;\n    display: flex;\n    flex-wrap: wrap-reverse;\n    right: 0;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button {\n    margin-right: 0px !important;\n  }\n}\n\ndiv.dtsb-searchBuilder button,\ndiv.dtsb-searchBuilder select.dtsb-dropDown,\ndiv.dtsb-searchBuilder input {\n  background-color: #f9f9f9;\n}\ndiv.dtsb-searchBuilder button.dtsb-button {\n  position: relative;\n  display: inline-block;\n  box-sizing: border-box;\n  padding: 0.5em 1em;\n  border: 1px solid rgba(0, 0, 0, 0.3);\n  border-radius: 2px;\n  cursor: pointer;\n  font-size: 0.88em;\n  line-height: 1.6em;\n  color: inherit;\n  white-space: nowrap;\n  overflow: hidden;\n  background-color: rgba(0, 0, 0, 0.1); /* Fallback */\n  background: linear-gradient(to bottom, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  text-decoration: none;\n  outline: none;\n  text-overflow: ellipsis;\n}\ndiv.dtsb-searchBuilder button.dtsb-button:hover {\n  background-color: #cecece;\n  cursor: pointer;\n}\ndiv.dtsb-searchBuilder div.dtsb-logicContainer {\n  border: 1px solid rgba(0, 0, 0, 0.3);\n  background-color: rgba(0, 0, 0, 0.1); /* Fallback */\n  background: linear-gradient(to right, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);\n}\ndiv.dtsb-searchBuilder div.dtsb-logicContainer button {\n  border: 1px solid transparent;\n  background: transparent;\n}\ndiv.dtsb-searchBuilder button.dtsb-clearGroup {\n  min-width: 2em;\n  padding: 0;\n}\ndiv.dtsb-searchBuilder button.dtsb-iptbtn {\n  min-width: 100px;\n  text-align: left;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  border: 1px solid;\n  border-color: #cecece;\n  border-radius: 3px;\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-logic {\n  border: none;\n  border-radius: 0px;\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: 3em;\n  margin: 0px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-clearGroup {\n  border: none;\n  border-radius: 0px;\n  width: 2em;\n  margin: 0px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n  border: 1px solid;\n  border-radius: 3px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-condition {\n  border-color: #48b13c;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-data {\n  border-color: #e70f00;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-value, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-value {\n  border-color: #0069ba;\n}\n\nhtml.dark div.dtsb-searchBuilder button.dtsb-button,\nhtml.dark div.dtsb-searchBuilder select.dtsb-dropDown,\nhtml.dark div.dtsb-searchBuilder input.dtsb-input {\n  background-color: rgb(66, 69, 73) !important;\n  color-scheme: dark;\n}\nhtml.dark div.dtsb-searchBuilder button.dtsb-button {\n  border: 1px solid rgb(89, 91, 94);\n  background: rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dtsb-searchBuilder button.dtsb-button:hover {\n  background: rgba(179, 179, 179, 0.15);\n}\nhtml.dark div.dtsb-searchBuilder div.dtsb-logicContainer {\n  border: 1px solid rgb(89, 91, 94);\n}\nhtml.dark div.dtsb-searchBuilder .dtsb-greyscale {\n  border-color: rgba(255, 255, 255, 0.2) !important;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/css/searchBuilder.foundation.css",
    "content": "div.dt-button-collection {\n  overflow: visible !important;\n  z-index: 2002 !important;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  padding-left: 1em !important;\n  padding-right: 1em !important;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsb-titleRow {\n  padding-right: 40px;\n}\n\n.dtsb-greyscale {\n  border: 1px solid #cecece !important;\n}\n\ndiv.dtsb-logicContainer .dtsb-greyscale {\n  border: none !important;\n}\n\ndiv.dtsb-searchBuilder {\n  justify-content: space-evenly;\n  cursor: default;\n  margin-bottom: 1em;\n  text-align: left;\n}\ndiv.dtsb-searchBuilder button.dtsb-button,\ndiv.dtsb-searchBuilder select {\n  font-size: 1em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  justify-content: space-evenly;\n  margin-bottom: 0.5em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  display: inline-block;\n  padding-top: 14px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title:empty {\n  display: inline;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow button.dtsb-clearAll {\n  float: right;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-vertical .dtsb-value, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-data, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-condition {\n  display: block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group {\n  position: relative;\n  clear: both;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-search {\n  float: right;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-clearGroup {\n  margin: 2px;\n  text-align: center;\n  padding: 0;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n  position: absolute;\n  margin-top: 0.8em;\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n  margin-bottom: 0.8em;\n  display: flex;\n  justify-content: start;\n  flex-flow: row wrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n  padding: 0.4em;\n  margin-right: 0.8em;\n  min-width: 5em;\n  max-width: 20em;\n  color: inherit;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown option.dtsb-notItalic,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input option.dtsb-notItalic {\n  font-style: normal;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-italic {\n  font-style: italic;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n  flex: 1;\n  white-space: nowrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont span.dtsp-joiner {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input.dtsb-value {\n  width: 33%;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont select,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input {\n  height: 100%;\n  box-sizing: border-box;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n  margin-left: auto;\n  display: inline-block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left:last-child {\n  margin-right: 0;\n}\n@media screen and (max-width: 550px) {\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n    display: flex;\n    flex-flow: none;\n    flex-direction: column;\n    justify-content: start;\n    padding-right: calc(35px + 0.8em);\n    margin-bottom: 0px;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:first-child), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:nth-child(2)), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:last-child) {\n    padding-top: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:first-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:nth-child(2), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:last-child {\n    padding-top: 0em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n    max-width: none;\n    width: 100%;\n    margin-bottom: 0.8em;\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n    position: absolute;\n    width: 35px;\n    display: flex;\n    flex-wrap: wrap-reverse;\n    right: 0;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button {\n    margin-right: 0px !important;\n  }\n}\n\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  margin-bottom: 1em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  padding-top: 10px;\n  font-size: 1.4375rem;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow button.dtsb-clearAll {\n  margin-bottom: 0px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown {\n  width: auto !important;\n  margin-bottom: 0px;\n  padding-left: 0.5rem;\n  padding-right: 1.5rem;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input {\n  height: 2.4375rem;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-condition {\n  border-color: #3adb76;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-data {\n  border-color: #cc4b37;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-value, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-value {\n  border-color: #1779ba;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  border-radius: 4px;\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n  margin-top: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-logic {\n  border: none;\n  border-radius: 0px;\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: 3em !important;\n  margin: 0px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-clearGroup {\n  border: none;\n  border-radius: 0px;\n  flex-basis: 2em !important;\n  width: 2em;\n  margin: 0px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button {\n  margin-bottom: 0px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/css/searchBuilder.jqueryui.css",
    "content": "div.dt-button-collection {\n  overflow: visible !important;\n  z-index: 2002 !important;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  padding-left: 1em !important;\n  padding-right: 1em !important;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsb-titleRow {\n  padding-right: 40px;\n}\n\n.dtsb-greyscale {\n  border: 1px solid #cecece !important;\n}\n\ndiv.dtsb-logicContainer .dtsb-greyscale {\n  border: none !important;\n}\n\ndiv.dtsb-searchBuilder {\n  justify-content: space-evenly;\n  cursor: default;\n  margin-bottom: 1em;\n  text-align: left;\n}\ndiv.dtsb-searchBuilder button.dtsb-button,\ndiv.dtsb-searchBuilder select {\n  font-size: 1em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  justify-content: space-evenly;\n  margin-bottom: 0.5em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  display: inline-block;\n  padding-top: 14px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title:empty {\n  display: inline;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow button.dtsb-clearAll {\n  float: right;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-vertical .dtsb-value, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-data, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-condition {\n  display: block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group {\n  position: relative;\n  clear: both;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-search {\n  float: right;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-clearGroup {\n  margin: 2px;\n  text-align: center;\n  padding: 0;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n  position: absolute;\n  margin-top: 0.8em;\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n  margin-bottom: 0.8em;\n  display: flex;\n  justify-content: start;\n  flex-flow: row wrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n  padding: 0.4em;\n  margin-right: 0.8em;\n  min-width: 5em;\n  max-width: 20em;\n  color: inherit;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown option.dtsb-notItalic,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input option.dtsb-notItalic {\n  font-style: normal;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-italic {\n  font-style: italic;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n  flex: 1;\n  white-space: nowrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont span.dtsp-joiner {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input.dtsb-value {\n  width: 33%;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont select,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input {\n  height: 100%;\n  box-sizing: border-box;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n  margin-left: auto;\n  display: inline-block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left:last-child {\n  margin-right: 0;\n}\n@media screen and (max-width: 550px) {\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n    display: flex;\n    flex-flow: none;\n    flex-direction: column;\n    justify-content: start;\n    padding-right: calc(35px + 0.8em);\n    margin-bottom: 0px;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:first-child), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:nth-child(2)), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:last-child) {\n    padding-top: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:first-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:nth-child(2), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:last-child {\n    padding-top: 0em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n    max-width: none;\n    width: 100%;\n    margin-bottom: 0.8em;\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n    position: absolute;\n    width: 35px;\n    display: flex;\n    flex-wrap: wrap-reverse;\n    right: 0;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button {\n    margin-right: 0px !important;\n  }\n}\n\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select {\n  width: auto !important;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-condition {\n  border-color: #48b13c;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-data {\n  border-color: #e70f00;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-value, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-value {\n  border-color: #0069ba;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-button {\n  min-width: 2em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  border-radius: 3px;\n  border: solid 1px #c5c5c5;\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n  margin-top: 10px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-logic {\n  border: none;\n  border-radius: 0px;\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: 2.5em;\n  margin: 0px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-clearGroup {\n  border: none;\n  border-radius: 0px;\n  width: 2em;\n  margin: 0px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/css/searchBuilder.semanticui.css",
    "content": "div.dt-button-collection {\n  overflow: visible !important;\n  z-index: 2002 !important;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  padding-left: 1em !important;\n  padding-right: 1em !important;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsb-titleRow {\n  padding-right: 40px;\n}\n\n.dtsb-greyscale {\n  border: 1px solid #cecece !important;\n}\n\ndiv.dtsb-logicContainer .dtsb-greyscale {\n  border: none !important;\n}\n\ndiv.dtsb-searchBuilder {\n  justify-content: space-evenly;\n  cursor: default;\n  margin-bottom: 1em;\n  text-align: left;\n}\ndiv.dtsb-searchBuilder button.dtsb-button,\ndiv.dtsb-searchBuilder select {\n  font-size: 1em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  justify-content: space-evenly;\n  margin-bottom: 0.5em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  display: inline-block;\n  padding-top: 14px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title:empty {\n  display: inline;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow button.dtsb-clearAll {\n  float: right;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-vertical .dtsb-value, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-data, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-condition {\n  display: block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group {\n  position: relative;\n  clear: both;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-search {\n  float: right;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-clearGroup {\n  margin: 2px;\n  text-align: center;\n  padding: 0;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n  position: absolute;\n  margin-top: 0.8em;\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n  margin-bottom: 0.8em;\n  display: flex;\n  justify-content: start;\n  flex-flow: row wrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n  padding: 0.4em;\n  margin-right: 0.8em;\n  min-width: 5em;\n  max-width: 20em;\n  color: inherit;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown option.dtsb-notItalic,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input option.dtsb-notItalic {\n  font-style: normal;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-italic {\n  font-style: italic;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n  flex: 1;\n  white-space: nowrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont span.dtsp-joiner {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input.dtsb-value {\n  width: 33%;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont select,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input {\n  height: 100%;\n  box-sizing: border-box;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n  margin-left: auto;\n  display: inline-block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left:last-child {\n  margin-right: 0;\n}\n@media screen and (max-width: 550px) {\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n    display: flex;\n    flex-flow: none;\n    flex-direction: column;\n    justify-content: start;\n    padding-right: calc(35px + 0.8em);\n    margin-bottom: 0px;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:first-child), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:nth-child(2)), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:last-child) {\n    padding-top: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:first-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:nth-child(2), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:last-child {\n    padding-top: 0em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n    max-width: none;\n    width: 100%;\n    margin-bottom: 0.8em;\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n    position: absolute;\n    width: 35px;\n    display: flex;\n    flex-wrap: wrap-reverse;\n    right: 0;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button {\n    margin-right: 0px !important;\n  }\n}\n\ndiv.dt-button-collection {\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 4px;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  margin: 10px;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder div.dtsb-titleRow {\n  font-size: 13.33px;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder div.dtsb-titleRow button.dtsb-clearAll {\n  border: none;\n  border-radius: 4px;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder select.ui.dropdown {\n  font-size: 13.33px;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder div.dtsb-logicContainer {\n  margin-top: 10px !important;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 4px;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder div.dtsb-criteria,\ndiv.dt-button-collection div.dtsb-searchBuilder div.dtsb-group {\n  margin-bottom: 10px !important;\n}\n\ndiv.dtsb-searchBuilder button.dtsb-button {\n  padding-top: 5px;\n  padding-left: 5px;\n  padding-right: 5px;\n  padding-bottom: 5px;\n  min-width: 30px;\n  min-height: 30px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  margin-bottom: 1em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow button.dtsb-clearAll {\n  margin-bottom: 0px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select {\n  width: auto !important;\n  background-color: transparent !important;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-condition {\n  border-color: #21ba45;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-data {\n  border-color: #db2828;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-value, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-value {\n  border-color: #2185d0;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.ui.button {\n  border-radius: 4px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  border-radius: 4px;\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n  margin-top: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-logic {\n  border: none;\n  border-radius: 0px;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: 2.5em;\n  margin: 0px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-clearGroup {\n  border: none;\n  border-radius: 0px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n  flex-grow: 0;\n  width: 2em;\n  margin: 0px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/js/dataTables.searchBuilder.js",
    "content": "/*! SearchBuilder 1.6.0\n * ©SpryMedia Ltd - datatables.net/license/mit\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n(function () {\n    'use strict';\n\n    var $$3;\n    var dataTable$3;\n    function moment() {\n        return window.moment;\n    }\n    function luxon() {\n        return window.luxon;\n    }\n    /**\n     * Sets the value of jQuery for use in the file\n     *\n     * @param jq the instance of jQuery to be set\n     */\n    function setJQuery$2(jq) {\n        $$3 = jq;\n        dataTable$3 = jq.fn.dataTable;\n    }\n    /**\n     * The Criteria class is used within SearchBuilder to represent a search criteria\n     */\n    var Criteria = /** @class */ (function () {\n        function Criteria(table, opts, topGroup, index, depth, serverData, liveSearch) {\n            if (index === void 0) { index = 0; }\n            if (depth === void 0) { depth = 1; }\n            if (serverData === void 0) { serverData = undefined; }\n            if (liveSearch === void 0) { liveSearch = false; }\n            var _this = this;\n            // Check that the required version of DataTables is included\n            if (!dataTable$3 || !dataTable$3.versionCheck || !dataTable$3.versionCheck('1.10.0')) {\n                throw new Error('SearchPane requires DataTables 1.10 or newer');\n            }\n            this.classes = $$3.extend(true, {}, Criteria.classes);\n            // Get options from user and any extra conditions/column types defined by plug-ins\n            this.c = $$3.extend(true, {}, Criteria.defaults, $$3.fn.dataTable.ext.searchBuilder, opts);\n            var i18n = this.c.i18n;\n            this.s = {\n                condition: undefined,\n                conditions: {},\n                data: undefined,\n                dataIdx: -1,\n                dataPoints: [],\n                dateFormat: false,\n                depth: depth,\n                dt: table,\n                filled: false,\n                index: index,\n                liveSearch: liveSearch,\n                origData: undefined,\n                preventRedraw: false,\n                serverData: serverData,\n                topGroup: topGroup,\n                type: '',\n                value: []\n            };\n            this.dom = {\n                buttons: $$3('<div/>')\n                    .addClass(this.classes.buttonContainer),\n                condition: $$3('<select disabled/>')\n                    .addClass(this.classes.condition)\n                    .addClass(this.classes.dropDown)\n                    .addClass(this.classes.italic)\n                    .attr('autocomplete', 'hacking'),\n                conditionTitle: $$3('<option value=\"\" disabled selected hidden/>')\n                    .html(this.s.dt.i18n('searchBuilder.condition', i18n.condition)),\n                container: $$3('<div/>')\n                    .addClass(this.classes.container),\n                data: $$3('<select/>')\n                    .addClass(this.classes.data)\n                    .addClass(this.classes.dropDown)\n                    .addClass(this.classes.italic),\n                dataTitle: $$3('<option value=\"\" disabled selected hidden/>')\n                    .html(this.s.dt.i18n('searchBuilder.data', i18n.data)),\n                defaultValue: $$3('<select disabled/>')\n                    .addClass(this.classes.value)\n                    .addClass(this.classes.dropDown)\n                    .addClass(this.classes.select)\n                    .addClass(this.classes.italic),\n                \"delete\": $$3('<button/>')\n                    .html(this.s.dt.i18n('searchBuilder.delete', i18n[\"delete\"]))\n                    .addClass(this.classes[\"delete\"])\n                    .addClass(this.classes.button)\n                    .attr('title', this.s.dt.i18n('searchBuilder.deleteTitle', i18n.deleteTitle))\n                    .attr('type', 'button'),\n                inputCont: $$3('<div/>')\n                    .addClass(this.classes.inputCont),\n                // eslint-disable-next-line no-useless-escape\n                left: $$3('<button/>')\n                    .html(this.s.dt.i18n('searchBuilder.left', i18n.left))\n                    .addClass(this.classes.left)\n                    .addClass(this.classes.button)\n                    .attr('title', this.s.dt.i18n('searchBuilder.leftTitle', i18n.leftTitle))\n                    .attr('type', 'button'),\n                // eslint-disable-next-line no-useless-escape\n                right: $$3('<button/>')\n                    .html(this.s.dt.i18n('searchBuilder.right', i18n.right))\n                    .addClass(this.classes.right)\n                    .addClass(this.classes.button)\n                    .attr('title', this.s.dt.i18n('searchBuilder.rightTitle', i18n.rightTitle))\n                    .attr('type', 'button'),\n                value: [\n                    $$3('<select disabled/>')\n                        .addClass(this.classes.value)\n                        .addClass(this.classes.dropDown)\n                        .addClass(this.classes.italic)\n                        .addClass(this.classes.select)\n                ],\n                valueTitle: $$3('<option value=\"--valueTitle--\" disabled selected hidden/>')\n                    .html(this.s.dt.i18n('searchBuilder.value', i18n.value))\n            };\n            // If the greyscale option is selected then add the class to add the grey colour to SearchBuilder\n            if (this.c.greyscale) {\n                this.dom.data.addClass(this.classes.greyscale);\n                this.dom.condition.addClass(this.classes.greyscale);\n                this.dom.defaultValue.addClass(this.classes.greyscale);\n                for (var _i = 0, _a = this.dom.value; _i < _a.length; _i++) {\n                    var val = _a[_i];\n                    val.addClass(this.classes.greyscale);\n                }\n            }\n            $$3(window).on('resize.dtsb', dataTable$3.util.throttle(function () {\n                _this.s.topGroup.trigger('dtsb-redrawLogic');\n            }));\n            this._buildCriteria();\n            return this;\n        }\n        /**\n         * Escape html characters within a string\n         *\n         * @param txt the string to be escaped\n         * @returns the escaped string\n         */\n        Criteria._escapeHTML = function (txt) {\n            return txt\n                .toString()\n                .replace(/&amp;/g, '&')\n                .replace(/&lt;/g, '<')\n                .replace(/&gt;/g, '>')\n                .replace(/&quot;/g, '\"');\n        };\n        /**\n         * Redraw the DataTable with the current search parameters\n         */\n        Criteria.prototype.doSearch = function () {\n            // Only do the search if live search is disabled, otherwise the search\n            // is triggered by the button at the top level group.\n            if (this.c.liveSearch) {\n                this.s.dt.draw();\n            }\n        };\n        /**\n         * Parses formatted numbers down to a form where they can be compared\n         *\n         * @param val the value to convert\n         * @returns the converted value\n         */\n        Criteria.parseNumFmt = function (val) {\n            return +val.replace(/(?!^-)[^0-9.]/g, '');\n        };\n        /**\n         * Adds the left button to the criteria\n         */\n        Criteria.prototype.updateArrows = function (hasSiblings) {\n            if (hasSiblings === void 0) { hasSiblings = false; }\n            // Empty the container and append all of the elements in the correct order\n            this.dom.container.children().detach();\n            this.dom.container\n                .append(this.dom.data)\n                .append(this.dom.condition)\n                .append(this.dom.inputCont);\n            this.setListeners();\n            // Trigger the inserted events for the value elements as they are inserted\n            if (this.dom.value[0] !== undefined) {\n                this.dom.value[0].trigger('dtsb-inserted');\n            }\n            for (var i = 1; i < this.dom.value.length; i++) {\n                this.dom.inputCont.append(this.dom.value[i]);\n                this.dom.value[i].trigger('dtsb-inserted');\n            }\n            // If this is a top level criteria then don't let it move left\n            if (this.s.depth > 1) {\n                this.dom.buttons.append(this.dom.left);\n            }\n            // If the depthLimit of the query has been hit then don't add the right button\n            if ((this.c.depthLimit === false || this.s.depth < this.c.depthLimit) && hasSiblings) {\n                this.dom.buttons.append(this.dom.right);\n            }\n            else {\n                this.dom.right.remove();\n            }\n            this.dom.buttons.append(this.dom[\"delete\"]);\n            this.dom.container.append(this.dom.buttons);\n        };\n        /**\n         * Destroys the criteria, removing listeners and container from the dom\n         */\n        Criteria.prototype.destroy = function () {\n            // Turn off listeners\n            this.dom.data.off('.dtsb');\n            this.dom.condition.off('.dtsb');\n            this.dom[\"delete\"].off('.dtsb');\n            for (var _i = 0, _a = this.dom.value; _i < _a.length; _i++) {\n                var val = _a[_i];\n                val.off('.dtsb');\n            }\n            // Remove container from the dom\n            this.dom.container.remove();\n        };\n        /**\n         * Passes in the data for the row and compares it against this single criteria\n         *\n         * @param rowData The data for the row to be compared\n         * @returns boolean Whether the criteria has passed\n         */\n        Criteria.prototype.search = function (rowData, rowIdx) {\n            var condition = this.s.conditions[this.s.condition];\n            if (this.s.condition !== undefined && condition !== undefined) {\n                var filter = rowData[this.s.dataIdx];\n                // This check is in place for if a custom decimal character is in place\n                if (this.s.type.includes('num') &&\n                    (this.s.dt.settings()[0].oLanguage.sDecimal !== '' ||\n                        this.s.dt.settings()[0].oLanguage.sThousands !== '')) {\n                    var splitRD = [rowData[this.s.dataIdx]];\n                    if (this.s.dt.settings()[0].oLanguage.sDecimal !== '') {\n                        splitRD = rowData[this.s.dataIdx].split(this.s.dt.settings()[0].oLanguage.sDecimal);\n                    }\n                    if (this.s.dt.settings()[0].oLanguage.sThousands !== '') {\n                        for (var i = 0; i < splitRD.length; i++) {\n                            splitRD[i] = splitRD[i].replace(this.s.dt.settings()[0].oLanguage.sThousands, ',');\n                        }\n                    }\n                    filter = splitRD.join('.');\n                }\n                // If orthogonal data is in place we need to get it's values for searching\n                if (this.c.orthogonal.search !== 'filter') {\n                    var settings = this.s.dt.settings()[0];\n                    filter = settings.oApi._fnGetCellData(settings, rowIdx, this.s.dataIdx, typeof this.c.orthogonal === 'string' ?\n                        this.c.orthogonal :\n                        this.c.orthogonal.search);\n                }\n                if (this.s.type === 'array') {\n                    // Make sure we are working with an array\n                    if (!Array.isArray(filter)) {\n                        filter = [filter];\n                    }\n                    filter.sort();\n                    for (var _i = 0, filter_1 = filter; _i < filter_1.length; _i++) {\n                        var filt = filter_1[_i];\n                        if (filt && typeof filt === 'string') {\n                            filt = filt.replace(/[\\r\\n\\u2028]/g, ' ');\n                        }\n                    }\n                }\n                else if (filter !== null && typeof filter === 'string') {\n                    filter = filter.replace(/[\\r\\n\\u2028]/g, ' ');\n                }\n                if (this.s.type.includes('html') && typeof filter === 'string') {\n                    filter = filter.replace(/(<([^>]+)>)/ig, '');\n                }\n                // Not ideal, but jqueries .val() returns an empty string even\n                // when the value set is null, so we shall assume the two are equal\n                if (filter === null) {\n                    filter = '';\n                }\n                return condition.search(filter, this.s.value, this);\n            }\n        };\n        /**\n         * Gets the details required to rebuild the criteria\n         */\n        Criteria.prototype.getDetails = function (deFormatDates) {\n            if (deFormatDates === void 0) { deFormatDates = false; }\n            // This check is in place for if a custom decimal character is in place\n            if (this.s.type !== null &&\n                this.s.type.includes('num') &&\n                (this.s.dt.settings()[0].oLanguage.sDecimal !== '' || this.s.dt.settings()[0].oLanguage.sThousands !== '')) {\n                for (var i = 0; i < this.s.value.length; i++) {\n                    var splitRD = [this.s.value[i].toString()];\n                    if (this.s.dt.settings()[0].oLanguage.sDecimal !== '') {\n                        splitRD = this.s.value[i].split(this.s.dt.settings()[0].oLanguage.sDecimal);\n                    }\n                    if (this.s.dt.settings()[0].oLanguage.sThousands !== '') {\n                        for (var j = 0; j < splitRD.length; j++) {\n                            splitRD[j] = splitRD[j].replace(this.s.dt.settings()[0].oLanguage.sThousands, ',');\n                        }\n                    }\n                    this.s.value[i] = splitRD.join('.');\n                }\n            }\n            else if (this.s.type !== null && deFormatDates) {\n                if (this.s.type.includes('date') ||\n                    this.s.type.includes('time')) {\n                    for (var i = 0; i < this.s.value.length; i++) {\n                        if (this.s.value[i].match(/^\\d{4}-([0]\\d|1[0-2])-([0-2]\\d|3[01])$/g) === null) {\n                            this.s.value[i] = '';\n                        }\n                    }\n                }\n                else if (this.s.type.includes('moment')) {\n                    for (var i = 0; i < this.s.value.length; i++) {\n                        if (this.s.value[i] &&\n                            this.s.value[i].length > 0 &&\n                            moment()(this.s.value[i], this.s.dateFormat, true).isValid()) {\n                            this.s.value[i] = moment()(this.s.value[i], this.s.dateFormat).format('YYYY-MM-DD HH:mm:ss');\n                        }\n                    }\n                }\n                else if (this.s.type.includes('luxon')) {\n                    for (var i = 0; i < this.s.value.length; i++) {\n                        if (this.s.value[i] &&\n                            this.s.value[i].length > 0 &&\n                            luxon().DateTime.fromFormat(this.s.value[i], this.s.dateFormat).invalid === null) {\n                            this.s.value[i] = luxon().DateTime.fromFormat(this.s.value[i], this.s.dateFormat).toFormat('yyyy-MM-dd HH:mm:ss');\n                        }\n                    }\n                }\n            }\n            if (this.s.type.includes('num') && this.s.dt.page.info().serverSide) {\n                for (var i = 0; i < this.s.value.length; i++) {\n                    this.s.value[i] = this.s.value[i].replace(/[^0-9.\\-]/g, '');\n                }\n            }\n            return {\n                condition: this.s.condition,\n                data: this.s.data,\n                origData: this.s.origData,\n                type: this.s.type,\n                value: this.s.value.map(function (a) { return a !== null && a !== undefined ? a.toString() : a; })\n            };\n        };\n        /**\n         * Getter for the node for the container of the criteria\n         *\n         * @returns JQuery<HTMLElement> the node for the container\n         */\n        Criteria.prototype.getNode = function () {\n            return this.dom.container;\n        };\n        /**\n         * Populates the criteria data, condition and value(s) as far as has been selected\n         */\n        Criteria.prototype.populate = function () {\n            this._populateData();\n            // If the column index has been found attempt to select a condition\n            if (this.s.dataIdx !== -1) {\n                this._populateCondition();\n                // If the condittion has been found attempt to select the values\n                if (this.s.condition !== undefined) {\n                    this._populateValue();\n                }\n            }\n        };\n        /**\n         * Rebuilds the criteria based upon the details passed in\n         *\n         * @param loadedCriteria the details required to rebuild the criteria\n         */\n        Criteria.prototype.rebuild = function (loadedCriteria) {\n            // Check to see if the previously selected data exists, if so select it\n            var foundData = false;\n            var dataIdx;\n            this._populateData();\n            // If a data selection has previously been made attempt to find and select it\n            if (loadedCriteria.data !== undefined) {\n                var italic_1 = this.classes.italic;\n                var data_1 = this.dom.data;\n                this.dom.data.children('option').each(function () {\n                    if (!foundData &&\n                        ($$3(this).text() === loadedCriteria.data ||\n                            loadedCriteria.origData && $$3(this).prop('origData') === loadedCriteria.origData)) {\n                        $$3(this).prop('selected', true);\n                        data_1.removeClass(italic_1);\n                        foundData = true;\n                        dataIdx = parseInt($$3(this).val(), 10);\n                    }\n                    else {\n                        $$3(this).removeProp('selected');\n                    }\n                });\n            }\n            // If the data has been found and selected then the condition can be populated and searched\n            if (foundData) {\n                this.s.data = loadedCriteria.data;\n                this.s.origData = loadedCriteria.origData;\n                this.s.dataIdx = dataIdx;\n                this.c.orthogonal = this._getOptions().orthogonal;\n                this.dom.dataTitle.remove();\n                this._populateCondition();\n                this.dom.conditionTitle.remove();\n                var condition = void 0;\n                // Check to see if the previously selected condition exists, if so select it\n                var options = this.dom.condition.children('option');\n                // eslint-disable-next-line @typescript-eslint/prefer-for-of\n                for (var i = 0; i < options.length; i++) {\n                    var option = $$3(options[i]);\n                    if (loadedCriteria.condition !== undefined &&\n                        option.val() === loadedCriteria.condition &&\n                        typeof loadedCriteria.condition === 'string') {\n                        option.prop('selected', true);\n                        condition = option.val();\n                    }\n                    else {\n                        option.removeProp('selected');\n                    }\n                }\n                this.s.condition = condition;\n                // If the condition has been found and selected then the value can be populated and searched\n                if (this.s.condition !== undefined) {\n                    this.dom.conditionTitle.removeProp('selected');\n                    this.dom.conditionTitle.remove();\n                    this.dom.condition.removeClass(this.classes.italic);\n                    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n                    for (var i = 0; i < options.length; i++) {\n                        var option = $$3(options[i]);\n                        if (option.val() !== this.s.condition) {\n                            option.removeProp('selected');\n                        }\n                    }\n                    this._populateValue(loadedCriteria);\n                }\n                else {\n                    this.dom.conditionTitle.prependTo(this.dom.condition).prop('selected', true);\n                }\n            }\n        };\n        /**\n         * Sets the listeners for the criteria\n         */\n        Criteria.prototype.setListeners = function () {\n            var _this = this;\n            this.dom.data\n                .unbind('change')\n                .on('change.dtsb', function () {\n                _this.dom.dataTitle.removeProp('selected');\n                // Need to go over every option to identify the correct selection\n                var options = _this.dom.data.children('option.' + _this.classes.option);\n                // eslint-disable-next-line @typescript-eslint/prefer-for-of\n                for (var i = 0; i < options.length; i++) {\n                    var option = $$3(options[i]);\n                    if (option.val() === _this.dom.data.val()) {\n                        _this.dom.data.removeClass(_this.classes.italic);\n                        option.prop('selected', true);\n                        _this.s.dataIdx = +option.val();\n                        _this.s.data = option.text();\n                        _this.s.origData = option.prop('origData');\n                        _this.c.orthogonal = _this._getOptions().orthogonal;\n                        // When the data is changed, the values in condition and\n                        // value may also change so need to renew them\n                        _this._clearCondition();\n                        _this._clearValue();\n                        _this._populateCondition();\n                        // If this criteria was previously active in the search then\n                        // remove it from the search and trigger a new search\n                        if (_this.s.filled) {\n                            _this.s.filled = false;\n                            _this.doSearch();\n                            _this.setListeners();\n                        }\n                        _this.s.dt.state.save();\n                    }\n                    else {\n                        option.removeProp('selected');\n                    }\n                }\n            });\n            this.dom.condition\n                .unbind('change')\n                .on('change.dtsb', function () {\n                _this.dom.conditionTitle.removeProp('selected');\n                // Need to go over every option to identify the correct selection\n                var options = _this.dom.condition.children('option.' + _this.classes.option);\n                // eslint-disable-next-line @typescript-eslint/prefer-for-of\n                for (var i = 0; i < options.length; i++) {\n                    var option = $$3(options[i]);\n                    if (option.val() === _this.dom.condition.val()) {\n                        _this.dom.condition.removeClass(_this.classes.italic);\n                        option.prop('selected', true);\n                        var condDisp = option.val();\n                        // Find the condition that has been selected and store it internally\n                        for (var _i = 0, _a = Object.keys(_this.s.conditions); _i < _a.length; _i++) {\n                            var cond = _a[_i];\n                            if (cond === condDisp) {\n                                _this.s.condition = condDisp;\n                                break;\n                            }\n                        }\n                        // When the condition is changed, the value selector may switch between\n                        // a select element and an input element\n                        _this._clearValue();\n                        _this._populateValue();\n                        for (var _b = 0, _c = _this.dom.value; _b < _c.length; _b++) {\n                            var val = _c[_b];\n                            // If this criteria was previously active in the search then remove\n                            // it from the search and trigger a new search\n                            if (_this.s.filled && val !== undefined && _this.dom.inputCont.has(val[0]).length !== 0) {\n                                _this.s.filled = false;\n                                _this.doSearch();\n                                _this.setListeners();\n                            }\n                        }\n                        if (_this.dom.value.length === 0 ||\n                            _this.dom.value.length === 1 && _this.dom.value[0] === undefined) {\n                            _this.doSearch();\n                        }\n                    }\n                    else {\n                        option.removeProp('selected');\n                    }\n                }\n            });\n        };\n        Criteria.prototype.setupButtons = function () {\n            if (window.innerWidth > 550) {\n                this.dom.container.removeClass(this.classes.vertical);\n                this.dom.buttons.css('left', null);\n                this.dom.buttons.css('top', null);\n                return;\n            }\n            this.dom.container.addClass(this.classes.vertical);\n            this.dom.buttons.css('left', this.dom.data.innerWidth());\n            this.dom.buttons.css('top', this.dom.data.position().top);\n        };\n        /**\n         * Builds the elements of the dom together\n         */\n        Criteria.prototype._buildCriteria = function () {\n            // Append Titles for select elements\n            this.dom.data.append(this.dom.dataTitle);\n            this.dom.condition.append(this.dom.conditionTitle);\n            // Add elements to container\n            this.dom.container\n                .append(this.dom.data)\n                .append(this.dom.condition);\n            this.dom.inputCont.empty();\n            for (var _i = 0, _a = this.dom.value; _i < _a.length; _i++) {\n                var val = _a[_i];\n                val.append(this.dom.valueTitle);\n                this.dom.inputCont.append(val);\n            }\n            // Add buttons to container\n            this.dom.buttons\n                .append(this.dom[\"delete\"])\n                .append(this.dom.right);\n            this.dom.container.append(this.dom.inputCont).append(this.dom.buttons);\n            this.setListeners();\n        };\n        /**\n         * Clears the condition select element\n         */\n        Criteria.prototype._clearCondition = function () {\n            this.dom.condition.empty();\n            this.dom.conditionTitle.prop('selected', true).attr('disabled', 'true');\n            this.dom.condition.prepend(this.dom.conditionTitle).prop('selectedIndex', 0);\n            this.s.conditions = {};\n            this.s.condition = undefined;\n        };\n        /**\n         * Clears the value elements\n         */\n        Criteria.prototype._clearValue = function () {\n            if (this.s.condition !== undefined) {\n                if (this.dom.value.length > 0 && this.dom.value[0] !== undefined) {\n                    var _loop_1 = function (val) {\n                        if (val !== undefined) {\n                            // Timeout is annoying but because of IOS\n                            setTimeout(function () {\n                                val.remove();\n                            }, 50);\n                        }\n                    };\n                    // Remove all of the value elements\n                    for (var _i = 0, _a = this.dom.value; _i < _a.length; _i++) {\n                        var val = _a[_i];\n                        _loop_1(val);\n                    }\n                }\n                // Call the init function to get the value elements for this condition\n                this.dom.value = [].concat(this.s.conditions[this.s.condition].init(this, Criteria.updateListener));\n                if (this.dom.value.length > 0 && this.dom.value[0] !== undefined) {\n                    this.dom.inputCont\n                        .empty()\n                        .append(this.dom.value[0])\n                        .insertAfter(this.dom.condition);\n                    this.dom.value[0].trigger('dtsb-inserted');\n                    // Insert all of the value elements\n                    for (var i = 1; i < this.dom.value.length; i++) {\n                        this.dom.inputCont.append(this.dom.value[i]);\n                        this.dom.value[i].trigger('dtsb-inserted');\n                    }\n                }\n            }\n            else {\n                var _loop_2 = function (val) {\n                    if (val !== undefined) {\n                        // Timeout is annoying but because of IOS\n                        setTimeout(function () {\n                            val.remove();\n                        }, 50);\n                    }\n                };\n                // Remove all of the value elements\n                for (var _b = 0, _c = this.dom.value; _b < _c.length; _b++) {\n                    var val = _c[_b];\n                    _loop_2(val);\n                }\n                // Append the default valueTitle to the default select element\n                this.dom.valueTitle\n                    .prop('selected', true);\n                this.dom.defaultValue\n                    .append(this.dom.valueTitle)\n                    .insertAfter(this.dom.condition);\n            }\n            this.s.value = [];\n            this.dom.value = [\n                $$3('<select disabled/>')\n                    .addClass(this.classes.value)\n                    .addClass(this.classes.dropDown)\n                    .addClass(this.classes.italic)\n                    .addClass(this.classes.select)\n                    .append(this.dom.valueTitle.clone())\n            ];\n        };\n        /**\n         * Gets the options for the column\n         *\n         * @returns {object} The options for the column\n         */\n        Criteria.prototype._getOptions = function () {\n            var table = this.s.dt;\n            return $$3.extend(true, {}, Criteria.defaults, table.settings()[0].aoColumns[this.s.dataIdx].searchBuilder);\n        };\n        /**\n         * Populates the condition dropdown\n         */\n        Criteria.prototype._populateCondition = function () {\n            var conditionOpts = [];\n            var conditionsLength = Object.keys(this.s.conditions).length;\n            var colInits = this.s.dt.settings()[0].aoColumns;\n            var column = +this.dom.data.children('option:selected').val();\n            // If there are no conditions stored then we need to get them from the appropriate type\n            if (conditionsLength === 0) {\n                this.s.type = this.s.dt.columns().type().toArray()[column];\n                if (colInits !== undefined) {\n                    var colInit = colInits[column];\n                    if (colInit.searchBuilderType !== undefined && colInit.searchBuilderType !== null) {\n                        this.s.type = colInit.searchBuilderType;\n                    }\n                    else if (this.s.type === undefined || this.s.type === null) {\n                        this.s.type = colInit.sType;\n                    }\n                }\n                // If the column type is still unknown, call a draw to try reading it again\n                if (this.s.type === null || this.s.type === undefined) {\n                    $$3.fn.dataTable.ext.oApi._fnColumnTypes(this.s.dt.settings()[0]);\n                    this.s.type = this.s.dt.columns().type().toArray()[column];\n                }\n                // Enable the condition element\n                this.dom.condition\n                    .removeAttr('disabled')\n                    .empty()\n                    .append(this.dom.conditionTitle)\n                    .addClass(this.classes.italic);\n                this.dom.conditionTitle\n                    .prop('selected', true);\n                var decimal = this.s.dt.settings()[0].oLanguage.sDecimal;\n                // This check is in place for if a custom decimal character is in place\n                if (decimal !== '' && this.s.type.indexOf(decimal) === this.s.type.length - decimal.length) {\n                    if (this.s.type.includes('num-fmt')) {\n                        this.s.type = this.s.type.replace(decimal, '');\n                    }\n                    else if (this.s.type.includes('num')) {\n                        this.s.type = this.s.type.replace(decimal, '');\n                    }\n                }\n                // Select which conditions are going to be used based on the column type\n                var conditionObj = this.c.conditions[this.s.type] !== undefined ?\n                    this.c.conditions[this.s.type] :\n                    this.s.type.includes('moment') ?\n                        this.c.conditions.moment :\n                        this.s.type.includes('luxon') ?\n                            this.c.conditions.luxon :\n                            this.c.conditions.string;\n                // If it is a moment format then extract the date format\n                if (this.s.type.includes('moment')) {\n                    this.s.dateFormat = this.s.type.replace(/moment-/g, '');\n                }\n                else if (this.s.type.includes('luxon')) {\n                    this.s.dateFormat = this.s.type.replace(/luxon-/g, '');\n                }\n                // Add all of the conditions to the select element\n                for (var _i = 0, _a = Object.keys(conditionObj); _i < _a.length; _i++) {\n                    var condition = _a[_i];\n                    if (conditionObj[condition] !== null) {\n                        // Serverside processing does not supply the options for the select elements\n                        // Instead input elements need to be used for these instead\n                        if (this.s.dt.page.info().serverSide && conditionObj[condition].init === Criteria.initSelect) {\n                            var col = colInits[column];\n                            if (this.s.serverData && this.s.serverData[col.data]) {\n                                conditionObj[condition].init = Criteria.initSelectSSP;\n                                conditionObj[condition].inputValue = Criteria.inputValueSelect;\n                                conditionObj[condition].isInputValid = Criteria.isInputValidSelect;\n                            }\n                            else {\n                                conditionObj[condition].init = Criteria.initInput;\n                                conditionObj[condition].inputValue = Criteria.inputValueInput;\n                                conditionObj[condition].isInputValid = Criteria.isInputValidInput;\n                            }\n                        }\n                        this.s.conditions[condition] = conditionObj[condition];\n                        var condName = conditionObj[condition].conditionName;\n                        if (typeof condName === 'function') {\n                            condName = condName(this.s.dt, this.c.i18n);\n                        }\n                        conditionOpts.push($$3('<option>', {\n                            text: condName,\n                            value: condition\n                        })\n                            .addClass(this.classes.option)\n                            .addClass(this.classes.notItalic));\n                    }\n                }\n            }\n            // Otherwise we can just load them in\n            else if (conditionsLength > 0) {\n                this.dom.condition.empty().removeAttr('disabled').addClass(this.classes.italic);\n                for (var _b = 0, _c = Object.keys(this.s.conditions); _b < _c.length; _b++) {\n                    var condition = _c[_b];\n                    var condName = this.s.conditions[condition].conditionName;\n                    if (typeof condName === 'function') {\n                        condName = condName(this.s.dt, this.c.i18n);\n                    }\n                    var newOpt = $$3('<option>', {\n                        text: condName,\n                        value: condition\n                    })\n                        .addClass(this.classes.option)\n                        .addClass(this.classes.notItalic);\n                    if (this.s.condition !== undefined && this.s.condition === condName) {\n                        newOpt.prop('selected', true);\n                        this.dom.condition.removeClass(this.classes.italic);\n                    }\n                    conditionOpts.push(newOpt);\n                }\n            }\n            else {\n                this.dom.condition\n                    .attr('disabled', 'true')\n                    .addClass(this.classes.italic);\n                return;\n            }\n            for (var _d = 0, conditionOpts_1 = conditionOpts; _d < conditionOpts_1.length; _d++) {\n                var opt = conditionOpts_1[_d];\n                this.dom.condition.append(opt);\n            }\n            // Selecting a default condition if one is set\n            if (colInits[column].searchBuilder && colInits[column].searchBuilder.defaultCondition) {\n                var defaultCondition = colInits[column].searchBuilder.defaultCondition;\n                // If it is a number just use it as an index\n                if (typeof defaultCondition === 'number') {\n                    this.dom.condition.prop('selectedIndex', defaultCondition);\n                    this.dom.condition.trigger('change');\n                }\n                // If it is a string then things get slightly more tricly\n                else if (typeof defaultCondition === 'string') {\n                    // We need to check each condition option to see if any will match\n                    for (var i = 0; i < conditionOpts.length; i++) {\n                        // Need to check against the stored conditions so we can match the token \"cond\" to the option\n                        for (var _e = 0, _f = Object.keys(this.s.conditions); _e < _f.length; _e++) {\n                            var cond = _f[_e];\n                            var condName = this.s.conditions[cond].conditionName;\n                            if (\n                            // If the conditionName matches the text of the option\n                            (typeof condName === 'string' ? condName : condName(this.s.dt, this.c.i18n)) ===\n                                conditionOpts[i].text() &&\n                                // and the tokens match\n                                cond === defaultCondition) {\n                                // Select that option\n                                this.dom.condition\n                                    .prop('selectedIndex', this.dom.condition.children().toArray().indexOf(conditionOpts[i][0]))\n                                    .removeClass(this.classes.italic);\n                                this.dom.condition.trigger('change');\n                                i = conditionOpts.length;\n                                break;\n                            }\n                        }\n                    }\n                }\n            }\n            // If not default set then default to 0, the title\n            else {\n                this.dom.condition.prop('selectedIndex', 0);\n            }\n        };\n        /**\n         * Populates the data / column select element\n         */\n        Criteria.prototype._populateData = function () {\n            var columns = this.s.dt.settings()[0].aoColumns;\n            var includeColumns = this.s.dt.columns(this.c.columns).indexes().toArray();\n            this.dom.data.empty().append(this.dom.dataTitle);\n            for (var index = 0; index < columns.length; index++) {\n                // Need to check that the column can be filtered on before adding it\n                if (this.c.columns === true || includeColumns.includes(index)) {\n                    var col = columns[index];\n                    var opt = {\n                        index: index,\n                        origData: col.data,\n                        text: (col.searchBuilderTitle || col.sTitle)\n                            .replace(/(<([^>]+)>)/ig, '')\n                    };\n                    this.dom.data.append($$3('<option>', {\n                        text: opt.text,\n                        value: opt.index\n                    })\n                        .addClass(this.classes.option)\n                        .addClass(this.classes.notItalic)\n                        .prop('origData', col.data)\n                        .prop('selected', this.s.dataIdx === opt.index ? true : false));\n                    if (this.s.dataIdx === opt.index) {\n                        this.dom.dataTitle.removeProp('selected');\n                    }\n                }\n            }\n        };\n        /**\n         * Populates the Value select element\n         *\n         * @param loadedCriteria optional, used to reload criteria from predefined filters\n         */\n        Criteria.prototype._populateValue = function (loadedCriteria) {\n            var _this = this;\n            var prevFilled = this.s.filled;\n            this.s.filled = false;\n            // Remove any previous value elements\n            // Timeout is annoying but because of IOS\n            setTimeout(function () {\n                _this.dom.defaultValue.remove();\n            }, 50);\n            var _loop_3 = function (val) {\n                // Timeout is annoying but because of IOS\n                setTimeout(function () {\n                    if (val !== undefined) {\n                        val.remove();\n                    }\n                }, 50);\n            };\n            for (var _i = 0, _a = this.dom.value; _i < _a.length; _i++) {\n                var val = _a[_i];\n                _loop_3(val);\n            }\n            var children = this.dom.inputCont.children();\n            if (children.length > 1) {\n                // eslint-disable-next-line @typescript-eslint/prefer-for-of\n                for (var i = 0; i < children.length; i++) {\n                    $$3(children[i]).remove();\n                }\n            }\n            // Find the column with the title matching the data for the criteria and take note of the index\n            if (loadedCriteria !== undefined) {\n                this.s.dt.columns().every(function (index) {\n                    if (_this.s.dt.settings()[0].aoColumns[index].sTitle === loadedCriteria.data) {\n                        _this.s.dataIdx = index;\n                    }\n                });\n            }\n            // Initialise the value elements based on the condition\n            this.dom.value = [].concat(this.s.conditions[this.s.condition].init(this, Criteria.updateListener, loadedCriteria !== undefined ? loadedCriteria.value : undefined));\n            if (loadedCriteria !== undefined && loadedCriteria.value !== undefined) {\n                this.s.value = loadedCriteria.value;\n            }\n            this.dom.inputCont.empty();\n            // Insert value elements and trigger the inserted event\n            if (this.dom.value[0] !== undefined) {\n                this.dom.value[0]\n                    .appendTo(this.dom.inputCont)\n                    .trigger('dtsb-inserted');\n            }\n            for (var i = 1; i < this.dom.value.length; i++) {\n                this.dom.value[i]\n                    .insertAfter(this.dom.value[i - 1])\n                    .trigger('dtsb-inserted');\n            }\n            // Check if the criteria can be used in a search\n            this.s.filled = this.s.conditions[this.s.condition].isInputValid(this.dom.value, this);\n            this.setListeners();\n            // If it can and this is different to before then trigger a draw\n            if (!this.s.preventRedraw && prevFilled !== this.s.filled) {\n                // If using SSP we want to restrict the amount of server calls that take place\n                //  and this will already have taken place\n                if (!this.s.dt.page.info().serverSide) {\n                    this.doSearch();\n                }\n                this.setListeners();\n            }\n        };\n        /**\n         * Provides throttling capabilities to SearchBuilder without having to use dt's _fnThrottle function\n         * This is because that function is not quite suitable for our needs as it runs initially rather than waiting\n         *\n         * @param args arguments supplied to the throttle function\n         * @returns Function that is to be run that implements the throttling\n         */\n        Criteria.prototype._throttle = function (fn, frequency) {\n            if (frequency === void 0) { frequency = 200; }\n            var last = null;\n            var timer = null;\n            var that = this;\n            if (frequency === null) {\n                frequency = 200;\n            }\n            return function () {\n                var args = [];\n                for (var _i = 0; _i < arguments.length; _i++) {\n                    args[_i] = arguments[_i];\n                }\n                var now = +new Date();\n                if (last !== null && now < last + frequency) {\n                    clearTimeout(timer);\n                }\n                else {\n                    last = now;\n                }\n                timer = setTimeout(function () {\n                    last = null;\n                    fn.apply(that, args);\n                }, frequency);\n            };\n        };\n        Criteria.version = '1.1.0';\n        Criteria.classes = {\n            button: 'dtsb-button',\n            buttonContainer: 'dtsb-buttonContainer',\n            condition: 'dtsb-condition',\n            container: 'dtsb-criteria',\n            data: 'dtsb-data',\n            \"delete\": 'dtsb-delete',\n            dropDown: 'dtsb-dropDown',\n            greyscale: 'dtsb-greyscale',\n            input: 'dtsb-input',\n            inputCont: 'dtsb-inputCont',\n            italic: 'dtsb-italic',\n            joiner: 'dtsp-joiner',\n            left: 'dtsb-left',\n            notItalic: 'dtsb-notItalic',\n            option: 'dtsb-option',\n            right: 'dtsb-right',\n            select: 'dtsb-select',\n            value: 'dtsb-value',\n            vertical: 'dtsb-vertical'\n        };\n        /**\n         * Default initialisation function for select conditions\n         */\n        Criteria.initSelect = function (that, fn, preDefined, array) {\n            if (preDefined === void 0) { preDefined = null; }\n            if (array === void 0) { array = false; }\n            var column = that.dom.data.children('option:selected').val();\n            var indexArray = that.s.dt.rows().indexes().toArray();\n            var settings = that.s.dt.settings()[0];\n            that.dom.valueTitle.prop('selected', true);\n            // Declare select element to be used with all of the default classes and listeners.\n            var el = $$3('<select/>')\n                .addClass(Criteria.classes.value)\n                .addClass(Criteria.classes.dropDown)\n                .addClass(Criteria.classes.italic)\n                .addClass(Criteria.classes.select)\n                .append(that.dom.valueTitle)\n                .on('change.dtsb', function () {\n                $$3(this).removeClass(Criteria.classes.italic);\n                fn(that, this);\n            });\n            if (that.c.greyscale) {\n                el.addClass(Criteria.classes.greyscale);\n            }\n            var added = [];\n            var options = [];\n            // Add all of the options from the table to the select element.\n            // Only add one option for each possible value\n            for (var _i = 0, indexArray_1 = indexArray; _i < indexArray_1.length; _i++) {\n                var index = indexArray_1[_i];\n                var filter = settings.oApi._fnGetCellData(settings, index, column, typeof that.c.orthogonal === 'string' ?\n                    that.c.orthogonal :\n                    that.c.orthogonal.search);\n                var value = {\n                    filter: typeof filter === 'string' ?\n                        filter.replace(/[\\r\\n\\u2028]/g, ' ') : // Need to replace certain characters to match search values\n                        filter,\n                    index: index,\n                    text: settings.oApi._fnGetCellData(settings, index, column, typeof that.c.orthogonal === 'string' ?\n                        that.c.orthogonal :\n                        that.c.orthogonal.display)\n                };\n                // If we are dealing with an array type, either make sure we are working with arrays, or sort them\n                if (that.s.type === 'array') {\n                    value.filter = !Array.isArray(value.filter) ? [value.filter] : value.filter;\n                    value.text = !Array.isArray(value.text) ? [value.text] : value.text;\n                }\n                // Function to add an option to the select element\n                var addOption = function (filt, text) {\n                    if (that.s.type.includes('html') && filt !== null && typeof filt === 'string') {\n                        filt.replace(/(<([^>]+)>)/ig, '');\n                    }\n                    // Add text and value, stripping out any html if that is the column type\n                    var opt = $$3('<option>', {\n                        type: Array.isArray(filt) ? 'Array' : 'String',\n                        value: filt\n                    })\n                        .data('sbv', filt)\n                        .addClass(that.classes.option)\n                        .addClass(that.classes.notItalic)\n                        // Have to add the text this way so that special html characters are not escaped - &amp; etc.\n                        .html(typeof text === 'string' ?\n                        text.replace(/(<([^>]+)>)/ig, '') :\n                        text);\n                    var val = opt.val();\n                    // Check that this value has not already been added\n                    if (added.indexOf(val) === -1) {\n                        added.push(val);\n                        options.push(opt);\n                        if (preDefined !== null && Array.isArray(preDefined[0])) {\n                            preDefined[0] = preDefined[0].sort().join(',');\n                        }\n                        // If this value was previously selected as indicated by preDefined, then select it again\n                        if (preDefined !== null && opt.val() === preDefined[0]) {\n                            opt.prop('selected', true);\n                            el.removeClass(Criteria.classes.italic);\n                            that.dom.valueTitle.removeProp('selected');\n                        }\n                    }\n                };\n                // If this is to add the individual values within the array we need to loop over the array\n                if (array) {\n                    for (var i = 0; i < value.filter.length; i++) {\n                        addOption(value.filter[i], value.text[i]);\n                    }\n                }\n                // Otherwise the value that is in the cell is to be added\n                else {\n                    addOption(value.filter, Array.isArray(value.text) ? value.text.join(', ') : value.text);\n                }\n            }\n            options.sort(function (a, b) {\n                if (that.s.type === 'array' ||\n                    that.s.type === 'string' ||\n                    that.s.type === 'html') {\n                    if (a.val() < b.val()) {\n                        return -1;\n                    }\n                    else if (a.val() > b.val()) {\n                        return 1;\n                    }\n                    else {\n                        return 0;\n                    }\n                }\n                else if (that.s.type === 'num' ||\n                    that.s.type === 'html-num') {\n                    if (+a.val().replace(/(<([^>]+)>)/ig, '') < +b.val().replace(/(<([^>]+)>)/ig, '')) {\n                        return -1;\n                    }\n                    else if (+a.val().replace(/(<([^>]+)>)/ig, '') > +b.val().replace(/(<([^>]+)>)/ig, '')) {\n                        return 1;\n                    }\n                    else {\n                        return 0;\n                    }\n                }\n                else if (that.s.type === 'num-fmt' || that.s.type === 'html-num-fmt') {\n                    if (+a.val().replace(/[^0-9.]/g, '') < +b.val().replace(/[^0-9.]/g, '')) {\n                        return -1;\n                    }\n                    else if (+a.val().replace(/[^0-9.]/g, '') > +b.val().replace(/[^0-9.]/g, '')) {\n                        return 1;\n                    }\n                    else {\n                        return 0;\n                    }\n                }\n            });\n            for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {\n                var opt = options_1[_a];\n                el.append(opt);\n            }\n            return el;\n        };\n        /**\n         * Default initialisation function for select conditions\n         */\n        Criteria.initSelectSSP = function (that, fn, preDefined) {\n            if (preDefined === void 0) { preDefined = null; }\n            that.dom.valueTitle.prop('selected', true);\n            // Declare select element to be used with all of the default classes and listeners.\n            var el = $$3('<select/>')\n                .addClass(Criteria.classes.value)\n                .addClass(Criteria.classes.dropDown)\n                .addClass(Criteria.classes.italic)\n                .addClass(Criteria.classes.select)\n                .append(that.dom.valueTitle)\n                .on('change.dtsb', function () {\n                $$3(this).removeClass(Criteria.classes.italic);\n                fn(that, this);\n            });\n            if (that.c.greyscale) {\n                el.addClass(Criteria.classes.greyscale);\n            }\n            var options = [];\n            for (var _i = 0, _a = that.s.serverData[that.s.origData]; _i < _a.length; _i++) {\n                var option = _a[_i];\n                var value = option.value;\n                var label = option.label;\n                // Function to add an option to the select element\n                var addOption = function (filt, text) {\n                    if (that.s.type.includes('html') && filt !== null && typeof filt === 'string') {\n                        filt.replace(/(<([^>]+)>)/ig, '');\n                    }\n                    // Add text and value, stripping out any html if that is the column type\n                    var opt = $$3('<option>', {\n                        type: Array.isArray(filt) ? 'Array' : 'String',\n                        value: filt\n                    })\n                        .data('sbv', filt)\n                        .addClass(that.classes.option)\n                        .addClass(that.classes.notItalic)\n                        // Have to add the text this way so that special html characters are not escaped - &amp; etc.\n                        .html(typeof text === 'string' ?\n                        text.replace(/(<([^>]+)>)/ig, '') :\n                        text);\n                    options.push(opt);\n                    // If this value was previously selected as indicated by preDefined, then select it again\n                    if (preDefined !== null && opt.val() === preDefined[0]) {\n                        opt.prop('selected', true);\n                        el.removeClass(Criteria.classes.italic);\n                        that.dom.valueTitle.removeProp('selected');\n                    }\n                };\n                addOption(value, label);\n            }\n            for (var _b = 0, options_2 = options; _b < options_2.length; _b++) {\n                var opt = options_2[_b];\n                el.append(opt);\n            }\n            return el;\n        };\n        /**\n         * Default initialisation function for select array conditions\n         *\n         * This exists because there needs to be different select functionality for contains/without and equals/not\n         */\n        Criteria.initSelectArray = function (that, fn, preDefined) {\n            if (preDefined === void 0) { preDefined = null; }\n            return Criteria.initSelect(that, fn, preDefined, true);\n        };\n        /**\n         * Default initialisation function for input conditions\n         */\n        Criteria.initInput = function (that, fn, preDefined) {\n            if (preDefined === void 0) { preDefined = null; }\n            // Declare the input element\n            var searchDelay = that.s.dt.settings()[0].searchDelay;\n            var el = $$3('<input/>')\n                .addClass(Criteria.classes.value)\n                .addClass(Criteria.classes.input)\n                .on('input.dtsb keypress.dtsb', that._throttle(function (e) {\n                var code = e.keyCode || e.which;\n                return fn(that, this, code);\n            }, searchDelay === null ? 100 : searchDelay));\n            if (that.c.greyscale) {\n                el.addClass(Criteria.classes.greyscale);\n            }\n            // If there is a preDefined value then add it\n            if (preDefined !== null) {\n                el.val(preDefined[0]);\n            }\n            // This is add responsive functionality to the logic button without redrawing everything else\n            that.s.dt.one('draw.dtsb', function () {\n                that.s.topGroup.trigger('dtsb-redrawLogic');\n            });\n            return el;\n        };\n        /**\n         * Default initialisation function for conditions requiring 2 inputs\n         */\n        Criteria.init2Input = function (that, fn, preDefined) {\n            if (preDefined === void 0) { preDefined = null; }\n            // Declare all of the necessary jQuery elements\n            var searchDelay = that.s.dt.settings()[0].searchDelay;\n            var els = [\n                $$3('<input/>')\n                    .addClass(Criteria.classes.value)\n                    .addClass(Criteria.classes.input)\n                    .on('input.dtsb keypress.dtsb', that._throttle(function (e) {\n                    var code = e.keyCode || e.which;\n                    return fn(that, this, code);\n                }, searchDelay === null ? 100 : searchDelay)),\n                $$3('<span>')\n                    .addClass(that.classes.joiner)\n                    .html(that.s.dt.i18n('searchBuilder.valueJoiner', that.c.i18n.valueJoiner)),\n                $$3('<input/>')\n                    .addClass(Criteria.classes.value)\n                    .addClass(Criteria.classes.input)\n                    .on('input.dtsb keypress.dtsb', that._throttle(function (e) {\n                    var code = e.keyCode || e.which;\n                    return fn(that, this, code);\n                }, searchDelay === null ? 100 : searchDelay))\n            ];\n            if (that.c.greyscale) {\n                els[0].addClass(Criteria.classes.greyscale);\n                els[2].addClass(Criteria.classes.greyscale);\n            }\n            // If there is a preDefined value then add it\n            if (preDefined !== null) {\n                els[0].val(preDefined[0]);\n                els[2].val(preDefined[1]);\n            }\n            // This is add responsive functionality to the logic button without redrawing everything else\n            that.s.dt.one('draw.dtsb', function () {\n                that.s.topGroup.trigger('dtsb-redrawLogic');\n            });\n            return els;\n        };\n        /**\n         * Default initialisation function for date conditions\n         */\n        Criteria.initDate = function (that, fn, preDefined) {\n            if (preDefined === void 0) { preDefined = null; }\n            var searchDelay = that.s.dt.settings()[0].searchDelay;\n            var i18n = that.s.dt.i18n('datetime', {});\n            // Declare date element using DataTables dateTime plugin\n            var el = $$3('<input/>')\n                .addClass(Criteria.classes.value)\n                .addClass(Criteria.classes.input)\n                .dtDateTime({\n                attachTo: 'input',\n                format: that.s.dateFormat ? that.s.dateFormat : undefined,\n                i18n: i18n\n            })\n                .on('change.dtsb', that._throttle(function () {\n                return fn(that, this);\n            }, searchDelay === null ? 100 : searchDelay))\n                .on('input.dtsb keypress.dtsb', function (e) {\n                that._throttle(function () {\n                    var code = e.keyCode || e.which;\n                    return fn(that, this, code);\n                }, searchDelay === null ? 100 : searchDelay);\n            });\n            if (that.c.greyscale) {\n                el.addClass(Criteria.classes.greyscale);\n            }\n            // If there is a preDefined value then add it\n            if (preDefined !== null) {\n                el.val(preDefined[0]);\n            }\n            // This is add responsive functionality to the logic button without redrawing everything else\n            that.s.dt.one('draw.dtsb', function () {\n                that.s.topGroup.trigger('dtsb-redrawLogic');\n            });\n            return el;\n        };\n        Criteria.initNoValue = function (that) {\n            // This is add responsive functionality to the logic button without redrawing everything else\n            that.s.dt.one('draw.dtsb', function () {\n                that.s.topGroup.trigger('dtsb-redrawLogic');\n            });\n            return [];\n        };\n        Criteria.init2Date = function (that, fn, preDefined) {\n            var _this = this;\n            if (preDefined === void 0) { preDefined = null; }\n            var searchDelay = that.s.dt.settings()[0].searchDelay;\n            var i18n = that.s.dt.i18n('datetime', {});\n            // Declare all of the date elements that are required using DataTables dateTime plugin\n            var els = [\n                $$3('<input/>')\n                    .addClass(Criteria.classes.value)\n                    .addClass(Criteria.classes.input)\n                    .dtDateTime({\n                    attachTo: 'input',\n                    format: that.s.dateFormat ? that.s.dateFormat : undefined,\n                    i18n: i18n\n                })\n                    .on('change.dtsb', searchDelay !== null ?\n                    that.s.dt.settings()[0].oApi._fnThrottle(function () {\n                        return fn(that, this);\n                    }, searchDelay) :\n                    function () {\n                        fn(that, _this);\n                    })\n                    .on('input.dtsb keypress.dtsb', function (e) {\n                    that.s.dt.settings()[0].oApi._fnThrottle(function () {\n                        var code = e.keyCode || e.which;\n                        return fn(that, this, code);\n                    }, searchDelay === null ? 0 : searchDelay);\n                }),\n                $$3('<span>')\n                    .addClass(that.classes.joiner)\n                    .html(that.s.dt.i18n('searchBuilder.valueJoiner', that.c.i18n.valueJoiner)),\n                $$3('<input/>')\n                    .addClass(Criteria.classes.value)\n                    .addClass(Criteria.classes.input)\n                    .dtDateTime({\n                    attachTo: 'input',\n                    format: that.s.dateFormat ? that.s.dateFormat : undefined,\n                    i18n: i18n\n                })\n                    .on('change.dtsb', searchDelay !== null ?\n                    that.s.dt.settings()[0].oApi._fnThrottle(function () {\n                        return fn(that, this);\n                    }, searchDelay) :\n                    function () {\n                        fn(that, _this);\n                    })\n                    .on('input.dtsb keypress.dtsb', !that.c.enterSearch &&\n                    !(that.s.dt.settings()[0].oInit.search !== undefined &&\n                        that.s.dt.settings()[0].oInit.search[\"return\"]) &&\n                    searchDelay !== null ?\n                    that.s.dt.settings()[0].oApi._fnThrottle(function () {\n                        return fn(that, this);\n                    }, searchDelay) :\n                    function (e) {\n                        var code = e.keyCode || e.which;\n                        fn(that, _this, code);\n                    })\n            ];\n            if (that.c.greyscale) {\n                els[0].addClass(Criteria.classes.greyscale);\n                els[2].addClass(Criteria.classes.greyscale);\n            }\n            // If there are and preDefined values then add them\n            if (preDefined !== null && preDefined.length > 0) {\n                els[0].val(preDefined[0]);\n                els[2].val(preDefined[1]);\n            }\n            // This is add responsive functionality to the logic button without redrawing everything else\n            that.s.dt.one('draw.dtsb', function () {\n                that.s.topGroup.trigger('dtsb-redrawLogic');\n            });\n            return els;\n        };\n        /**\n         * Default function for select elements to validate condition\n         */\n        Criteria.isInputValidSelect = function (el) {\n            var allFilled = true;\n            // Check each element to make sure that the selections are valid\n            for (var _i = 0, el_1 = el; _i < el_1.length; _i++) {\n                var element = el_1[_i];\n                if (element.children('option:selected').length ===\n                    element.children('option').length -\n                        element.children('option.' + Criteria.classes.notItalic).length &&\n                    element.children('option:selected').length === 1 &&\n                    element.children('option:selected')[0] === element.children('option')[0]) {\n                    allFilled = false;\n                }\n            }\n            return allFilled;\n        };\n        /**\n         * Default function for input and date elements to validate condition\n         */\n        Criteria.isInputValidInput = function (el) {\n            var allFilled = true;\n            // Check each element to make sure that the inputs are valid\n            for (var _i = 0, el_2 = el; _i < el_2.length; _i++) {\n                var element = el_2[_i];\n                if (element.is('input') && element.val().length === 0) {\n                    allFilled = false;\n                }\n            }\n            return allFilled;\n        };\n        /**\n         * Default function for getting select conditions\n         */\n        Criteria.inputValueSelect = function (el) {\n            var values = [];\n            // Go through the select elements and push each selected option to the return array\n            for (var _i = 0, el_3 = el; _i < el_3.length; _i++) {\n                var element = el_3[_i];\n                if (element.is('select')) {\n                    values.push(Criteria._escapeHTML(element.children('option:selected').data('sbv')));\n                }\n            }\n            return values;\n        };\n        /**\n         * Default function for getting input conditions\n         */\n        Criteria.inputValueInput = function (el) {\n            var values = [];\n            // Go through the input elements and push each value to the return array\n            for (var _i = 0, el_4 = el; _i < el_4.length; _i++) {\n                var element = el_4[_i];\n                if (element.is('input')) {\n                    values.push(Criteria._escapeHTML(element.val()));\n                }\n            }\n            return values;\n        };\n        /**\n         * Function that is run on each element as a call back when a search should be triggered\n         */\n        Criteria.updateListener = function (that, el, code) {\n            // When the value is changed the criteria is now complete so can be included in searches\n            // Get the condition from the map based on the key that has been selected for the condition\n            var condition = that.s.conditions[that.s.condition];\n            that.s.filled = condition.isInputValid(that.dom.value, that);\n            that.s.value = condition.inputValue(that.dom.value, that);\n            if (!that.s.filled) {\n                if (!that.c.enterSearch &&\n                    !(that.s.dt.settings()[0].oInit.search !== undefined &&\n                        that.s.dt.settings()[0].oInit.search[\"return\"]) ||\n                    code === 13) {\n                    that.doSearch();\n                }\n                return;\n            }\n            if (!Array.isArray(that.s.value)) {\n                that.s.value = [that.s.value];\n            }\n            for (var i = 0; i < that.s.value.length; i++) {\n                // If the value is an array we need to sort it\n                if (Array.isArray(that.s.value[i])) {\n                    that.s.value[i].sort();\n                }\n                // Otherwise replace the decimal place character for i18n\n                else if (that.s.type.includes('num') &&\n                    (that.s.dt.settings()[0].oLanguage.sDecimal !== '' ||\n                        that.s.dt.settings()[0].oLanguage.sThousands !== '')) {\n                    var splitRD = [that.s.value[i].toString()];\n                    if (that.s.dt.settings()[0].oLanguage.sDecimal !== '') {\n                        splitRD = that.s.value[i].split(that.s.dt.settings()[0].oLanguage.sDecimal);\n                    }\n                    if (that.s.dt.settings()[0].oLanguage.sThousands !== '') {\n                        for (var j = 0; j < splitRD.length; j++) {\n                            splitRD[j] = splitRD[j].replace(that.s.dt.settings()[0].oLanguage.sThousands, ',');\n                        }\n                    }\n                    that.s.value[i] = splitRD.join('.');\n                }\n            }\n            // Take note of the cursor position so that we can refocus there later\n            var idx = null;\n            var cursorPos = null;\n            for (var i = 0; i < that.dom.value.length; i++) {\n                if (el === that.dom.value[i][0]) {\n                    idx = i;\n                    if (el.selectionStart !== undefined) {\n                        cursorPos = el.selectionStart;\n                    }\n                }\n            }\n            if (!that.c.enterSearch &&\n                !(that.s.dt.settings()[0].oInit.search !== undefined &&\n                    that.s.dt.settings()[0].oInit.search[\"return\"]) ||\n                code === 13) {\n                // Trigger a search\n                that.doSearch();\n            }\n            // Refocus the element and set the correct cursor position\n            if (idx !== null) {\n                that.dom.value[idx].removeClass(that.classes.italic);\n                that.dom.value[idx].focus();\n                if (cursorPos !== null) {\n                    that.dom.value[idx][0].setSelectionRange(cursorPos, cursorPos);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Has to be in this order so that they are displayed correctly in select elements\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.dateConditions = {\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.equals', i18n.conditions.date.equals);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    value = value.replace(/(\\/|-|,)/g, '-');\n                    return value === comparison[0];\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.not', i18n.conditions.date.not);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    value = value.replace(/(\\/|-|,)/g, '-');\n                    return value !== comparison[0];\n                }\n            },\n            '<': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.before', i18n.conditions.date.before);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    value = value.replace(/(\\/|-|,)/g, '-');\n                    return value < comparison[0];\n                }\n            },\n            '>': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.after', i18n.conditions.date.after);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    value = value.replace(/(\\/|-|,)/g, '-');\n                    return value > comparison[0];\n                }\n            },\n            'between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.between', i18n.conditions.date.between);\n                },\n                init: Criteria.init2Date,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    value = value.replace(/(\\/|-|,)/g, '-');\n                    if (comparison[0] < comparison[1]) {\n                        return comparison[0] <= value && value <= comparison[1];\n                    }\n                    else {\n                        return comparison[1] <= value && value <= comparison[0];\n                    }\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.notBetween', i18n.conditions.date.notBetween);\n                },\n                init: Criteria.init2Date,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    value = value.replace(/(\\/|-|,)/g, '-');\n                    if (comparison[0] < comparison[1]) {\n                        return !(comparison[0] <= value && value <= comparison[1]);\n                    }\n                    else {\n                        return !(comparison[1] <= value && value <= comparison[0]);\n                    }\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.empty', i18n.conditions.date.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.notEmpty', i18n.conditions.date.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return !(value === null || value === undefined || value.length === 0);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Has to be in this order so that they are displayed correctly in select elements\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.momentDateConditions = {\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.equals', i18n.conditions.date.equals);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return moment()(value, that.s.dateFormat).valueOf() ===\n                        moment()(comparison[0], that.s.dateFormat).valueOf();\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.not', i18n.conditions.date.not);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return moment()(value, that.s.dateFormat).valueOf() !==\n                        moment()(comparison[0], that.s.dateFormat).valueOf();\n                }\n            },\n            '<': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.before', i18n.conditions.date.before);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return moment()(value, that.s.dateFormat).valueOf() < moment()(comparison[0], that.s.dateFormat).valueOf();\n                }\n            },\n            '>': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.after', i18n.conditions.date.after);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return moment()(value, that.s.dateFormat).valueOf() > moment()(comparison[0], that.s.dateFormat).valueOf();\n                }\n            },\n            'between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.between', i18n.conditions.date.between);\n                },\n                init: Criteria.init2Date,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    var val = moment()(value, that.s.dateFormat).valueOf();\n                    var comp0 = moment()(comparison[0], that.s.dateFormat).valueOf();\n                    var comp1 = moment()(comparison[1], that.s.dateFormat).valueOf();\n                    if (comp0 < comp1) {\n                        return comp0 <= val && val <= comp1;\n                    }\n                    else {\n                        return comp1 <= val && val <= comp0;\n                    }\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.notBetween', i18n.conditions.date.notBetween);\n                },\n                init: Criteria.init2Date,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    var val = moment()(value, that.s.dateFormat).valueOf();\n                    var comp0 = moment()(comparison[0], that.s.dateFormat).valueOf();\n                    var comp1 = moment()(comparison[1], that.s.dateFormat).valueOf();\n                    if (comp0 < comp1) {\n                        return !(+comp0 <= +val && +val <= +comp1);\n                    }\n                    else {\n                        return !(+comp1 <= +val && +val <= +comp0);\n                    }\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.empty', i18n.conditions.date.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.notEmpty', i18n.conditions.date.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return !(value === null || value === undefined || value.length === 0);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Has to be in this order so that they are displayed correctly in select elements\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.luxonDateConditions = {\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.equals', i18n.conditions.date.equals);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return luxon().DateTime.fromFormat(value, that.s.dateFormat).ts\n                        === luxon().DateTime.fromFormat(comparison[0], that.s.dateFormat).ts;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.not', i18n.conditions.date.not);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return luxon().DateTime.fromFormat(value, that.s.dateFormat).ts\n                        !== luxon().DateTime.fromFormat(comparison[0], that.s.dateFormat).ts;\n                }\n            },\n            '<': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.before', i18n.conditions.date.before);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return luxon().DateTime.fromFormat(value, that.s.dateFormat).ts\n                        < luxon().DateTime.fromFormat(comparison[0], that.s.dateFormat).ts;\n                }\n            },\n            '>': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.after', i18n.conditions.date.after);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return luxon().DateTime.fromFormat(value, that.s.dateFormat).ts\n                        > luxon().DateTime.fromFormat(comparison[0], that.s.dateFormat).ts;\n                }\n            },\n            'between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.between', i18n.conditions.date.between);\n                },\n                init: Criteria.init2Date,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    var val = luxon().DateTime.fromFormat(value, that.s.dateFormat).ts;\n                    var comp0 = luxon().DateTime.fromFormat(comparison[0], that.s.dateFormat).ts;\n                    var comp1 = luxon().DateTime.fromFormat(comparison[1], that.s.dateFormat).ts;\n                    if (comp0 < comp1) {\n                        return comp0 <= val && val <= comp1;\n                    }\n                    else {\n                        return comp1 <= val && val <= comp0;\n                    }\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.notBetween', i18n.conditions.date.notBetween);\n                },\n                init: Criteria.init2Date,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    var val = luxon().DateTime.fromFormat(value, that.s.dateFormat).ts;\n                    var comp0 = luxon().DateTime.fromFormat(comparison[0], that.s.dateFormat).ts;\n                    var comp1 = luxon().DateTime.fromFormat(comparison[1], that.s.dateFormat).ts;\n                    if (comp0 < comp1) {\n                        return !(+comp0 <= +val && +val <= +comp1);\n                    }\n                    else {\n                        return !(+comp1 <= +val && +val <= +comp0);\n                    }\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.empty', i18n.conditions.date.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.notEmpty', i18n.conditions.date.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return !(value === null || value === undefined || value.length === 0);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Has to be in this order so that they are displayed correctly in select elements\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.numConditions = {\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.equals', i18n.conditions.number.equals);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return +value === +comparison[0];\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.not', i18n.conditions.number.not);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return +value !== +comparison[0];\n                }\n            },\n            '<': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.lt', i18n.conditions.number.lt);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return +value < +comparison[0];\n                }\n            },\n            '<=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.lte', i18n.conditions.number.lte);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return +value <= +comparison[0];\n                }\n            },\n            '>=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.gte', i18n.conditions.number.gte);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return +value >= +comparison[0];\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '>': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.gt', i18n.conditions.number.gt);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return +value > +comparison[0];\n                }\n            },\n            'between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.between', i18n.conditions.number.between);\n                },\n                init: Criteria.init2Input,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    if (+comparison[0] < +comparison[1]) {\n                        return +comparison[0] <= +value && +value <= +comparison[1];\n                    }\n                    else {\n                        return +comparison[1] <= +value && +value <= +comparison[0];\n                    }\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.notBetween', i18n.conditions.number.notBetween);\n                },\n                init: Criteria.init2Input,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    if (+comparison[0] < +comparison[1]) {\n                        return !(+comparison[0] <= +value && +value <= +comparison[1]);\n                    }\n                    else {\n                        return !(+comparison[1] <= +value && +value <= +comparison[0]);\n                    }\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.empty', i18n.conditions.number.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.notEmpty', i18n.conditions.number.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return !(value === null || value === undefined || value.length === 0);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Has to be in this order so that they are displayed correctly in select elements\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.numFmtConditions = {\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.equals', i18n.conditions.number.equals);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return Criteria.parseNumFmt(value) === Criteria.parseNumFmt(comparison[0]);\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.not', i18n.conditions.number.not);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return Criteria.parseNumFmt(value) !== Criteria.parseNumFmt(comparison[0]);\n                }\n            },\n            '<': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.lt', i18n.conditions.number.lt);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return Criteria.parseNumFmt(value) < Criteria.parseNumFmt(comparison[0]);\n                }\n            },\n            '<=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.lte', i18n.conditions.number.lte);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return Criteria.parseNumFmt(value) <= Criteria.parseNumFmt(comparison[0]);\n                }\n            },\n            '>=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.gte', i18n.conditions.number.gte);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return Criteria.parseNumFmt(value) >= Criteria.parseNumFmt(comparison[0]);\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '>': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.gt', i18n.conditions.number.gt);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return Criteria.parseNumFmt(value) > Criteria.parseNumFmt(comparison[0]);\n                }\n            },\n            'between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.between', i18n.conditions.number.between);\n                },\n                init: Criteria.init2Input,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    var val = Criteria.parseNumFmt(value);\n                    var comp0 = Criteria.parseNumFmt(comparison[0]);\n                    var comp1 = Criteria.parseNumFmt(comparison[1]);\n                    if (+comp0 < +comp1) {\n                        return +comp0 <= +val && +val <= +comp1;\n                    }\n                    else {\n                        return +comp1 <= +val && +val <= +comp0;\n                    }\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.notBetween', i18n.conditions.number.notBetween);\n                },\n                init: Criteria.init2Input,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    var val = Criteria.parseNumFmt(value);\n                    var comp0 = Criteria.parseNumFmt(comparison[0]);\n                    var comp1 = Criteria.parseNumFmt(comparison[1]);\n                    if (+comp0 < +comp1) {\n                        return !(+comp0 <= +val && +val <= +comp1);\n                    }\n                    else {\n                        return !(+comp1 <= +val && +val <= +comp0);\n                    }\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.empty', i18n.conditions.number.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.notEmpty', i18n.conditions.number.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return !(value === null || value === undefined || value.length === 0);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Has to be in this order so that they are displayed correctly in select elements\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.stringConditions = {\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.equals', i18n.conditions.string.equals);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return value === comparison[0];\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.not', i18n.conditions.string.not);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return value !== comparison[0];\n                }\n            },\n            'starts': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.startsWith', i18n.conditions.string.startsWith);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return value.toLowerCase().indexOf(comparison[0].toLowerCase()) === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!starts': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.notStartsWith', i18n.conditions.string.notStartsWith);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return value.toLowerCase().indexOf(comparison[0].toLowerCase()) !== 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            'contains': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.contains', i18n.conditions.string.contains);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return value.toLowerCase().includes(comparison[0].toLowerCase());\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!contains': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.notContains', i18n.conditions.string.notContains);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return !value.toLowerCase().includes(comparison[0].toLowerCase());\n                }\n            },\n            'ends': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.endsWith', i18n.conditions.string.endsWith);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return value.toLowerCase().endsWith(comparison[0].toLowerCase());\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!ends': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.notEndsWith', i18n.conditions.string.notEndsWith);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return !value.toLowerCase().endsWith(comparison[0].toLowerCase());\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.empty', i18n.conditions.string.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.notEmpty', i18n.conditions.string.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return !(value === null || value === undefined || value.length === 0);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.arrayConditions = {\n            'contains': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.array.contains', i18n.conditions.array.contains);\n                },\n                init: Criteria.initSelectArray,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return value.includes(comparison[0]);\n                }\n            },\n            'without': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.array.without', i18n.conditions.array.without);\n                },\n                init: Criteria.initSelectArray,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return value.indexOf(comparison[0]) === -1;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.array.equals', i18n.conditions.array.equals);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    if (value.length === comparison[0].length) {\n                        for (var i = 0; i < value.length; i++) {\n                            if (value[i] !== comparison[0][i]) {\n                                return false;\n                            }\n                        }\n                        return true;\n                    }\n                    return false;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.array.not', i18n.conditions.array.not);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    if (value.length === comparison[0].length) {\n                        for (var i = 0; i < value.length; i++) {\n                            if (value[i] !== comparison[0][i]) {\n                                return true;\n                            }\n                        }\n                        return false;\n                    }\n                    return true;\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.array.empty', i18n.conditions.array.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.array.notEmpty', i18n.conditions.array.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value !== null && value !== undefined && value.length !== 0;\n                }\n            }\n        };\n        // eslint will be sad because we have to disable member ordering for this as the\n        // private static properties used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.defaults = {\n            columns: true,\n            conditions: {\n                'array': Criteria.arrayConditions,\n                'date': Criteria.dateConditions,\n                'html': Criteria.stringConditions,\n                'html-num': Criteria.numConditions,\n                'html-num-fmt': Criteria.numFmtConditions,\n                'luxon': Criteria.luxonDateConditions,\n                'moment': Criteria.momentDateConditions,\n                'num': Criteria.numConditions,\n                'num-fmt': Criteria.numFmtConditions,\n                'string': Criteria.stringConditions\n            },\n            depthLimit: false,\n            enterSearch: false,\n            filterChanged: undefined,\n            greyscale: false,\n            i18n: {\n                add: 'Add Condition',\n                button: {\n                    0: 'Search Builder',\n                    _: 'Search Builder (%d)'\n                },\n                clearAll: 'Clear All',\n                condition: 'Condition',\n                data: 'Data',\n                \"delete\": '&times',\n                deleteTitle: 'Delete filtering rule',\n                left: '<',\n                leftTitle: 'Outdent criteria',\n                logicAnd: 'And',\n                logicOr: 'Or',\n                right: '>',\n                rightTitle: 'Indent criteria',\n                search: 'Search',\n                title: {\n                    0: 'Custom Search Builder',\n                    _: 'Custom Search Builder (%d)'\n                },\n                value: 'Value',\n                valueJoiner: 'and'\n            },\n            logic: 'AND',\n            orthogonal: {\n                display: 'display',\n                search: 'filter'\n            },\n            preDefined: false\n        };\n        return Criteria;\n    }());\n\n    var $$2;\n    var dataTable$2;\n    /**\n     * Sets the value of jQuery for use in the file\n     *\n     * @param jq the instance of jQuery to be set\n     */\n    function setJQuery$1(jq) {\n        $$2 = jq;\n        dataTable$2 = jq.fn.dataTable;\n    }\n    /**\n     * The Group class is used within SearchBuilder to represent a group of criteria\n     */\n    var Group = /** @class */ (function () {\n        function Group(table, opts, topGroup, index, isChild, depth, serverData) {\n            if (index === void 0) { index = 0; }\n            if (isChild === void 0) { isChild = false; }\n            if (depth === void 0) { depth = 1; }\n            if (serverData === void 0) { serverData = undefined; }\n            // Check that the required version of DataTables is included\n            if (!dataTable$2 || !dataTable$2.versionCheck || !dataTable$2.versionCheck('1.10.0')) {\n                throw new Error('SearchBuilder requires DataTables 1.10 or newer');\n            }\n            this.classes = $$2.extend(true, {}, Group.classes);\n            // Get options from user\n            this.c = $$2.extend(true, {}, Group.defaults, opts);\n            this.s = {\n                criteria: [],\n                depth: depth,\n                dt: table,\n                index: index,\n                isChild: isChild,\n                logic: undefined,\n                opts: opts,\n                preventRedraw: false,\n                serverData: serverData,\n                toDrop: undefined,\n                topGroup: topGroup\n            };\n            this.dom = {\n                add: $$2('<button/>')\n                    .addClass(this.classes.add)\n                    .addClass(this.classes.button)\n                    .attr('type', 'button'),\n                clear: $$2('<button>&times</button>')\n                    .addClass(this.classes.button)\n                    .addClass(this.classes.clearGroup)\n                    .attr('type', 'button'),\n                container: $$2('<div/>')\n                    .addClass(this.classes.group),\n                logic: $$2('<button><div/></button>')\n                    .addClass(this.classes.logic)\n                    .addClass(this.classes.button)\n                    .attr('type', 'button'),\n                logicContainer: $$2('<div/>')\n                    .addClass(this.classes.logicContainer),\n                search: $$2('<button/>')\n                    .addClass(this.classes.search)\n                    .addClass(this.classes.button)\n                    .attr('type', 'button')\n                    .css('display', 'none')\n            };\n            // A reference to the top level group is maintained throughout any subgroups and criteria that may be created\n            if (this.s.topGroup === undefined) {\n                this.s.topGroup = this.dom.container;\n            }\n            this._setup();\n            return this;\n        }\n        /**\n         * Destroys the groups buttons, clears the internal criteria and removes it from the dom\n         */\n        Group.prototype.destroy = function () {\n            // Turn off listeners\n            this.dom.add.off('.dtsb');\n            this.dom.logic.off('.dtsb');\n            this.dom.search.off('.dtsb');\n            // Trigger event for groups at a higher level to pick up on\n            this.dom.container\n                .trigger('dtsb-destroy')\n                .remove();\n            this.s.criteria = [];\n        };\n        /**\n         * Gets the details required to rebuild the group\n         */\n        // Eslint upset at empty object but needs to be done\n        // eslint-disable-next-line @typescript-eslint/ban-types\n        Group.prototype.getDetails = function (deFormatDates) {\n            if (deFormatDates === void 0) { deFormatDates = false; }\n            if (this.s.criteria.length === 0) {\n                return {};\n            }\n            var details = {\n                criteria: [],\n                logic: this.s.logic\n            };\n            // NOTE here crit could be either a subgroup or a criteria\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                details.criteria.push(crit.criteria.getDetails(deFormatDates));\n            }\n            return details;\n        };\n        /**\n         * Getter for the node for the container of the group\n         *\n         * @returns Node for the container of the group\n         */\n        Group.prototype.getNode = function () {\n            return this.dom.container;\n        };\n        /**\n         * Rebuilds the group based upon the details passed in\n         *\n         * @param loadedDetails the details required to rebuild the group\n         */\n        Group.prototype.rebuild = function (loadedDetails) {\n            // If no criteria are stored then just return\n            if (loadedDetails.criteria === undefined ||\n                loadedDetails.criteria === null ||\n                Array.isArray(loadedDetails.criteria) && loadedDetails.criteria.length === 0) {\n                return;\n            }\n            this.s.logic = loadedDetails.logic;\n            this.dom.logic.children().first().html(this.s.logic === 'OR'\n                ? this.s.dt.i18n('searchBuilder.logicOr', this.c.i18n.logicOr)\n                : this.s.dt.i18n('searchBuilder.logicAnd', this.c.i18n.logicAnd));\n            // Add all of the criteria, be it a sub group or a criteria\n            if (Array.isArray(loadedDetails.criteria)) {\n                for (var _i = 0, _a = loadedDetails.criteria; _i < _a.length; _i++) {\n                    var crit = _a[_i];\n                    if (crit.logic !== undefined) {\n                        this._addPrevGroup(crit);\n                    }\n                    else if (crit.logic === undefined) {\n                        this._addPrevCriteria(crit);\n                    }\n                }\n            }\n            // For all of the criteria children, update the arrows incase they require changing and set the listeners\n            for (var _b = 0, _c = this.s.criteria; _b < _c.length; _b++) {\n                var crit = _c[_b];\n                if (crit.criteria instanceof Criteria) {\n                    crit.criteria.updateArrows(this.s.criteria.length > 1);\n                    this._setCriteriaListeners(crit.criteria);\n                }\n            }\n        };\n        /**\n         * Redraws the Contents of the searchBuilder Groups and Criteria\n         */\n        Group.prototype.redrawContents = function () {\n            if (this.s.preventRedraw) {\n                return;\n            }\n            // Clear the container out and add the basic elements\n            this.dom.container.children().detach();\n            this.dom.container\n                .append(this.dom.logicContainer)\n                .append(this.dom.add)\n                .append(this.dom.search);\n            // Sort the criteria by index so that they appear in the correct order\n            this.s.criteria.sort(function (a, b) {\n                if (a.criteria.s.index < b.criteria.s.index) {\n                    return -1;\n                }\n                else if (a.criteria.s.index > b.criteria.s.index) {\n                    return 1;\n                }\n                return 0;\n            });\n            this.setListeners();\n            for (var i = 0; i < this.s.criteria.length; i++) {\n                var crit = this.s.criteria[i].criteria;\n                if (crit instanceof Criteria) {\n                    // Reset the index to the new value\n                    this.s.criteria[i].index = i;\n                    this.s.criteria[i].criteria.s.index = i;\n                    // Add to the group\n                    this.s.criteria[i].criteria.dom.container.insertBefore(this.dom.add);\n                    // Set listeners for various points\n                    this._setCriteriaListeners(crit);\n                    this.s.criteria[i].criteria.s.preventRedraw = this.s.preventRedraw;\n                    this.s.criteria[i].criteria.rebuild(this.s.criteria[i].criteria.getDetails());\n                    this.s.criteria[i].criteria.s.preventRedraw = false;\n                }\n                else if (crit instanceof Group && crit.s.criteria.length > 0) {\n                    // Reset the index to the new value\n                    this.s.criteria[i].index = i;\n                    this.s.criteria[i].criteria.s.index = i;\n                    // Add the sub group to the group\n                    this.s.criteria[i].criteria.dom.container.insertBefore(this.dom.add);\n                    // Redraw the contents of the group\n                    crit.s.preventRedraw = this.s.preventRedraw;\n                    crit.redrawContents();\n                    crit.s.preventRedraw = false;\n                    this._setGroupListeners(crit);\n                }\n                else {\n                    // The group is empty so remove it\n                    this.s.criteria.splice(i, 1);\n                    i--;\n                }\n            }\n            this.setupLogic();\n        };\n        /**\n         * Resizes the logic button only rather than the entire dom.\n         */\n        Group.prototype.redrawLogic = function () {\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                if (crit.criteria instanceof Group) {\n                    crit.criteria.redrawLogic();\n                }\n            }\n            this.setupLogic();\n        };\n        /**\n         * Search method, checking the row data against the criteria in the group\n         *\n         * @param rowData The row data to be compared\n         * @returns boolean The result of the search\n         */\n        Group.prototype.search = function (rowData, rowIdx) {\n            if (this.s.logic === 'AND') {\n                return this._andSearch(rowData, rowIdx);\n            }\n            else if (this.s.logic === 'OR') {\n                return this._orSearch(rowData, rowIdx);\n            }\n            return true;\n        };\n        /**\n         * Locates the groups logic button to the correct location on the page\n         */\n        Group.prototype.setupLogic = function () {\n            // Remove logic button\n            this.dom.logicContainer.remove();\n            this.dom.clear.remove();\n            // If there are no criteria in the group then keep the logic removed and return\n            if (this.s.criteria.length < 1) {\n                if (!this.s.isChild) {\n                    this.dom.container.trigger('dtsb-destroy');\n                    // Set criteria left margin\n                    this.dom.container.css('margin-left', 0);\n                }\n                this.dom.search.css('display', 'none');\n                return;\n            }\n            this.dom.clear.height('0px');\n            this.dom.logicContainer.append(this.dom.clear);\n            if (!this.s.isChild) {\n                this.dom.search.css('display', 'inline-block');\n            }\n            // Prepend logic button\n            this.dom.container.prepend(this.dom.logicContainer);\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                if (crit.criteria instanceof Criteria) {\n                    crit.criteria.setupButtons();\n                }\n            }\n            // Set width, take 2 for the border\n            var height = this.dom.container.outerHeight() - 1;\n            this.dom.logicContainer.width(height);\n            this._setLogicListener();\n            // Set criteria left margin\n            this.dom.container.css('margin-left', this.dom.logicContainer.outerHeight(true));\n            var logicOffset = this.dom.logicContainer.offset();\n            // Set horizontal alignment\n            var currentLeft = logicOffset.left;\n            var groupLeft = this.dom.container.offset().left;\n            var shuffleLeft = currentLeft - groupLeft;\n            var newPos = currentLeft - shuffleLeft - this.dom.logicContainer.outerHeight(true);\n            this.dom.logicContainer.offset({ left: newPos });\n            // Set vertical alignment\n            var firstCrit = this.dom.logicContainer.next();\n            var currentTop = logicOffset.top;\n            var firstTop = $$2(firstCrit).offset().top;\n            var shuffleTop = currentTop - firstTop;\n            var newTop = currentTop - shuffleTop;\n            this.dom.logicContainer.offset({ top: newTop });\n            this.dom.clear.outerHeight(this.dom.logicContainer.height());\n            this._setClearListener();\n        };\n        /**\n         * Sets listeners on the groups elements\n         */\n        Group.prototype.setListeners = function () {\n            var _this = this;\n            this.dom.add.unbind('click');\n            this.dom.add.on('click.dtsb', function () {\n                // If this is the parent group then the logic button has not been added yet\n                if (!_this.s.isChild) {\n                    _this.dom.container.prepend(_this.dom.logicContainer);\n                }\n                _this.addCriteria();\n                _this.dom.container.trigger('dtsb-add');\n                _this.s.dt.state.save();\n                return false;\n            });\n            this.dom.search.on('click.dtsb', function () {\n                _this.s.dt.draw();\n            });\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                crit.criteria.setListeners();\n            }\n            this._setClearListener();\n            this._setLogicListener();\n        };\n        /**\n         * Adds a criteria to the group\n         *\n         * @param crit Instance of Criteria to be added to the group\n         */\n        Group.prototype.addCriteria = function (crit) {\n            if (crit === void 0) { crit = null; }\n            var index = crit === null ? this.s.criteria.length : crit.s.index;\n            var criteria = new Criteria(this.s.dt, this.s.opts, this.s.topGroup, index, this.s.depth, this.s.serverData, this.c.liveSearch);\n            // If a Criteria has been passed in then set the values to continue that\n            if (crit !== null) {\n                criteria.c = crit.c;\n                criteria.s = crit.s;\n                criteria.s.depth = this.s.depth;\n                criteria.classes = crit.classes;\n            }\n            criteria.populate();\n            var inserted = false;\n            for (var i = 0; i < this.s.criteria.length; i++) {\n                if (i === 0 && this.s.criteria[i].criteria.s.index > criteria.s.index) {\n                    // Add the node for the criteria at the start of the group\n                    criteria.getNode().insertBefore(this.s.criteria[i].criteria.dom.container);\n                    inserted = true;\n                }\n                else if (i < this.s.criteria.length - 1 &&\n                    this.s.criteria[i].criteria.s.index < criteria.s.index &&\n                    this.s.criteria[i + 1].criteria.s.index > criteria.s.index) {\n                    // Add the node for the criteria in the correct location\n                    criteria.getNode().insertAfter(this.s.criteria[i].criteria.dom.container);\n                    inserted = true;\n                }\n            }\n            if (!inserted) {\n                criteria.getNode().insertBefore(this.dom.add);\n            }\n            // Add the details for this criteria to the array\n            this.s.criteria.push({\n                criteria: criteria,\n                index: index\n            });\n            this.s.criteria = this.s.criteria.sort(function (a, b) { return a.criteria.s.index - b.criteria.s.index; });\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var opt = _a[_i];\n                if (opt.criteria instanceof Criteria) {\n                    opt.criteria.updateArrows(this.s.criteria.length > 1);\n                }\n            }\n            this._setCriteriaListeners(criteria);\n            criteria.setListeners();\n            this.setupLogic();\n        };\n        /**\n         * Checks the group to see if it has any filled criteria\n         */\n        Group.prototype.checkFilled = function () {\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                if (crit.criteria instanceof Criteria && crit.criteria.s.filled ||\n                    crit.criteria instanceof Group && crit.criteria.checkFilled()) {\n                    return true;\n                }\n            }\n            return false;\n        };\n        /**\n         * Gets the count for the number of criteria in this group and any sub groups\n         */\n        Group.prototype.count = function () {\n            var count = 0;\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                if (crit.criteria instanceof Group) {\n                    count += crit.criteria.count();\n                }\n                else {\n                    count++;\n                }\n            }\n            return count;\n        };\n        /**\n         * Rebuilds a sub group that previously existed\n         *\n         * @param loadedGroup The details of a group within this group\n         */\n        Group.prototype._addPrevGroup = function (loadedGroup) {\n            var idx = this.s.criteria.length;\n            var group = new Group(this.s.dt, this.c, this.s.topGroup, idx, true, this.s.depth + 1, this.s.serverData);\n            // Add the new group to the criteria array\n            this.s.criteria.push({\n                criteria: group,\n                index: idx,\n                logic: group.s.logic\n            });\n            // Rebuild it with the previous conditions for that group\n            group.rebuild(loadedGroup);\n            this.s.criteria[idx].criteria = group;\n            this.s.topGroup.trigger('dtsb-redrawContents');\n            this._setGroupListeners(group);\n        };\n        /**\n         * Rebuilds a criteria of this group that previously existed\n         *\n         * @param loadedCriteria The details of a criteria within the group\n         */\n        Group.prototype._addPrevCriteria = function (loadedCriteria) {\n            var idx = this.s.criteria.length;\n            var criteria = new Criteria(this.s.dt, this.s.opts, this.s.topGroup, idx, this.s.depth, this.s.serverData);\n            criteria.populate();\n            // Add the new criteria to the criteria array\n            this.s.criteria.push({\n                criteria: criteria,\n                index: idx\n            });\n            // Rebuild it with the previous conditions for that criteria\n            criteria.s.preventRedraw = this.s.preventRedraw;\n            criteria.rebuild(loadedCriteria);\n            criteria.s.preventRedraw = false;\n            this.s.criteria[idx].criteria = criteria;\n            if (!this.s.preventRedraw) {\n                this.s.topGroup.trigger('dtsb-redrawContents');\n            }\n        };\n        /**\n         * Checks And the criteria using AND logic\n         *\n         * @param rowData The row data to be checked against the search criteria\n         * @returns boolean The result of the AND search\n         */\n        Group.prototype._andSearch = function (rowData, rowIdx) {\n            // If there are no criteria then return true for this group\n            if (this.s.criteria.length === 0) {\n                return true;\n            }\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                // If the criteria is not complete then skip it\n                if (crit.criteria instanceof Criteria && !crit.criteria.s.filled) {\n                    continue;\n                }\n                // Otherwise if a single one fails return false\n                else if (!crit.criteria.search(rowData, rowIdx)) {\n                    return false;\n                }\n            }\n            // If we get to here then everything has passed, so return true for the group\n            return true;\n        };\n        /**\n         * Checks And the criteria using OR logic\n         *\n         * @param rowData The row data to be checked against the search criteria\n         * @returns boolean The result of the OR search\n         */\n        Group.prototype._orSearch = function (rowData, rowIdx) {\n            // If there are no criteria in the group then return true\n            if (this.s.criteria.length === 0) {\n                return true;\n            }\n            // This will check to make sure that at least one criteria in the group is complete\n            var filledfound = false;\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                if (crit.criteria instanceof Criteria && crit.criteria.s.filled) {\n                    // A completed criteria has been found so set the flag\n                    filledfound = true;\n                    // If the search passes then return true\n                    if (crit.criteria.search(rowData, rowIdx)) {\n                        return true;\n                    }\n                }\n                else if (crit.criteria instanceof Group && crit.criteria.checkFilled()) {\n                    filledfound = true;\n                    if (crit.criteria.search(rowData, rowIdx)) {\n                        return true;\n                    }\n                }\n            }\n            // If we get here we need to return the inverse of filledfound,\n            //  as if any have been found and we are here then none have passed\n            return !filledfound;\n        };\n        /**\n         * Removes a criteria from the group\n         *\n         * @param criteria The criteria instance to be removed\n         */\n        Group.prototype._removeCriteria = function (criteria, group) {\n            if (group === void 0) { group = false; }\n            // If removing a criteria and there is only then then just destroy the group\n            if (this.s.criteria.length <= 1 && this.s.isChild) {\n                this.destroy();\n            }\n            else {\n                // Otherwise splice the given criteria out and redo the indexes\n                var last = void 0;\n                for (var i = 0; i < this.s.criteria.length; i++) {\n                    if (this.s.criteria[i].index === criteria.s.index &&\n                        (!group || this.s.criteria[i].criteria instanceof Group)) {\n                        last = i;\n                    }\n                }\n                // We want to remove the last element with the desired index, as its replacement will be inserted before it\n                if (last !== undefined) {\n                    this.s.criteria.splice(last, 1);\n                }\n                for (var i = 0; i < this.s.criteria.length; i++) {\n                    this.s.criteria[i].index = i;\n                    this.s.criteria[i].criteria.s.index = i;\n                }\n            }\n        };\n        /**\n         * Sets the listeners in group for a criteria\n         *\n         * @param criteria The criteria for the listeners to be set on\n         */\n        Group.prototype._setCriteriaListeners = function (criteria) {\n            var _this = this;\n            criteria.dom[\"delete\"]\n                .unbind('click')\n                .on('click.dtsb', function () {\n                _this._removeCriteria(criteria);\n                criteria.dom.container.remove();\n                for (var _i = 0, _a = _this.s.criteria; _i < _a.length; _i++) {\n                    var crit = _a[_i];\n                    if (crit.criteria instanceof Criteria) {\n                        crit.criteria.updateArrows(_this.s.criteria.length > 1);\n                    }\n                }\n                criteria.destroy();\n                _this.s.dt.draw();\n                _this.s.topGroup.trigger('dtsb-redrawContents');\n                return false;\n            });\n            criteria.dom.right\n                .unbind('click')\n                .on('click.dtsb', function () {\n                var idx = criteria.s.index;\n                var group = new Group(_this.s.dt, _this.s.opts, _this.s.topGroup, criteria.s.index, true, _this.s.depth + 1, _this.s.serverData);\n                // Add the criteria that is to be moved to the new group\n                group.addCriteria(criteria);\n                // Update the details in the current groups criteria array\n                _this.s.criteria[idx].criteria = group;\n                _this.s.criteria[idx].logic = 'AND';\n                _this.s.topGroup.trigger('dtsb-redrawContents');\n                _this._setGroupListeners(group);\n                return false;\n            });\n            criteria.dom.left\n                .unbind('click')\n                .on('click.dtsb', function () {\n                _this.s.toDrop = new Criteria(_this.s.dt, _this.s.opts, _this.s.topGroup, criteria.s.index, undefined, _this.s.serverData);\n                _this.s.toDrop.s = criteria.s;\n                _this.s.toDrop.c = criteria.c;\n                _this.s.toDrop.classes = criteria.classes;\n                _this.s.toDrop.populate();\n                // The dropCriteria event mutates the reference to the index so need to store it\n                var index = _this.s.toDrop.s.index;\n                _this.dom.container.trigger('dtsb-dropCriteria');\n                criteria.s.index = index;\n                _this._removeCriteria(criteria);\n                // By tracking the top level group we can directly trigger a redraw on it,\n                //  bubbling is also possible, but that is slow with deep levelled groups\n                _this.s.topGroup.trigger('dtsb-redrawContents');\n                _this.s.dt.draw();\n                return false;\n            });\n        };\n        /**\n         * Set's the listeners for the group clear button\n         */\n        Group.prototype._setClearListener = function () {\n            var _this = this;\n            this.dom.clear\n                .unbind('click')\n                .on('click.dtsb', function () {\n                if (!_this.s.isChild) {\n                    _this.dom.container.trigger('dtsb-clearContents');\n                    return false;\n                }\n                _this.destroy();\n                _this.s.topGroup.trigger('dtsb-redrawContents');\n                return false;\n            });\n        };\n        /**\n         * Sets listeners for sub groups of this group\n         *\n         * @param group The sub group that the listeners are to be set on\n         */\n        Group.prototype._setGroupListeners = function (group) {\n            var _this = this;\n            // Set listeners for the new group\n            group.dom.add\n                .unbind('click')\n                .on('click.dtsb', function () {\n                _this.setupLogic();\n                _this.dom.container.trigger('dtsb-add');\n                return false;\n            });\n            group.dom.container\n                .unbind('dtsb-add')\n                .on('dtsb-add.dtsb', function () {\n                _this.setupLogic();\n                _this.dom.container.trigger('dtsb-add');\n                return false;\n            });\n            group.dom.container\n                .unbind('dtsb-destroy')\n                .on('dtsb-destroy.dtsb', function () {\n                _this._removeCriteria(group, true);\n                group.dom.container.remove();\n                _this.setupLogic();\n                return false;\n            });\n            group.dom.container\n                .unbind('dtsb-dropCriteria')\n                .on('dtsb-dropCriteria.dtsb', function () {\n                var toDrop = group.s.toDrop;\n                toDrop.s.index = group.s.index;\n                toDrop.updateArrows(_this.s.criteria.length > 1);\n                _this.addCriteria(toDrop);\n                return false;\n            });\n            group.setListeners();\n        };\n        /**\n         * Sets up the Group instance, setting listeners and appending elements\n         */\n        Group.prototype._setup = function () {\n            this.setListeners();\n            this.dom.add.html(this.s.dt.i18n('searchBuilder.add', this.c.i18n.add));\n            this.dom.search.html(this.s.dt.i18n('searchBuilder.search', this.c.i18n.search));\n            this.dom.logic.children().first().html(this.c.logic === 'OR'\n                ? this.s.dt.i18n('searchBuilder.logicOr', this.c.i18n.logicOr)\n                : this.s.dt.i18n('searchBuilder.logicAnd', this.c.i18n.logicAnd));\n            this.s.logic = this.c.logic === 'OR' ? 'OR' : 'AND';\n            if (this.c.greyscale) {\n                this.dom.logic.addClass(this.classes.greyscale);\n            }\n            this.dom.logicContainer.append(this.dom.logic).append(this.dom.clear);\n            // Only append the logic button immediately if this is a sub group,\n            //  otherwise it will be prepended later when adding a criteria\n            if (this.s.isChild) {\n                this.dom.container.append(this.dom.logicContainer);\n            }\n            this.dom.container\n                .append(this.dom.add)\n                .append(this.dom.search);\n        };\n        /**\n         * Sets the listener for the logic button\n         */\n        Group.prototype._setLogicListener = function () {\n            var _this = this;\n            this.dom.logic\n                .unbind('click')\n                .on('click.dtsb', function () {\n                _this._toggleLogic();\n                _this.s.dt.draw();\n                for (var _i = 0, _a = _this.s.criteria; _i < _a.length; _i++) {\n                    var crit = _a[_i];\n                    crit.criteria.setListeners();\n                }\n            });\n        };\n        /**\n         * Toggles the logic for the group\n         */\n        Group.prototype._toggleLogic = function () {\n            if (this.s.logic === 'OR') {\n                this.s.logic = 'AND';\n                this.dom.logic.children().first().html(this.s.dt.i18n('searchBuilder.logicAnd', this.c.i18n.logicAnd));\n            }\n            else if (this.s.logic === 'AND') {\n                this.s.logic = 'OR';\n                this.dom.logic.children().first().html(this.s.dt.i18n('searchBuilder.logicOr', this.c.i18n.logicOr));\n            }\n        };\n        Group.version = '1.1.0';\n        Group.classes = {\n            add: 'dtsb-add',\n            button: 'dtsb-button',\n            clearGroup: 'dtsb-clearGroup',\n            greyscale: 'dtsb-greyscale',\n            group: 'dtsb-group',\n            inputButton: 'dtsb-iptbtn',\n            logic: 'dtsb-logic',\n            logicContainer: 'dtsb-logicContainer',\n            search: 'dtsb-search'\n        };\n        Group.defaults = {\n            columns: true,\n            conditions: {\n                'date': Criteria.dateConditions,\n                'html': Criteria.stringConditions,\n                'html-num': Criteria.numConditions,\n                'html-num-fmt': Criteria.numFmtConditions,\n                'luxon': Criteria.luxonDateConditions,\n                'moment': Criteria.momentDateConditions,\n                'num': Criteria.numConditions,\n                'num-fmt': Criteria.numFmtConditions,\n                'string': Criteria.stringConditions\n            },\n            depthLimit: false,\n            enterSearch: false,\n            filterChanged: undefined,\n            greyscale: false,\n            liveSearch: true,\n            i18n: {\n                add: 'Add Condition',\n                button: {\n                    0: 'Search Builder',\n                    _: 'Search Builder (%d)'\n                },\n                clearAll: 'Clear All',\n                condition: 'Condition',\n                data: 'Data',\n                \"delete\": '&times',\n                deleteTitle: 'Delete filtering rule',\n                left: '<',\n                leftTitle: 'Outdent criteria',\n                logicAnd: 'And',\n                logicOr: 'Or',\n                right: '>',\n                rightTitle: 'Indent criteria',\n                search: 'Search',\n                title: {\n                    0: 'Custom Search Builder',\n                    _: 'Custom Search Builder (%d)'\n                },\n                value: 'Value',\n                valueJoiner: 'and'\n            },\n            logic: 'AND',\n            orthogonal: {\n                display: 'display',\n                search: 'filter'\n            },\n            preDefined: false\n        };\n        return Group;\n    }());\n\n    var $$1;\n    var dataTable$1;\n    /**\n     * Sets the value of jQuery for use in the file\n     *\n     * @param jq the instance of jQuery to be set\n     */\n    function setJQuery(jq) {\n        $$1 = jq;\n        dataTable$1 = jq.fn.DataTable;\n    }\n    /**\n     * SearchBuilder class for DataTables.\n     * Allows for complex search queries to be constructed and implemented on a DataTable\n     */\n    var SearchBuilder = /** @class */ (function () {\n        function SearchBuilder(builderSettings, opts) {\n            var _this = this;\n            // Check that the required version of DataTables is included\n            if (!dataTable$1 || !dataTable$1.versionCheck || !dataTable$1.versionCheck('1.10.0')) {\n                throw new Error('SearchBuilder requires DataTables 1.10 or newer');\n            }\n            var table = new dataTable$1.Api(builderSettings);\n            this.classes = $$1.extend(true, {}, SearchBuilder.classes);\n            // Get options from user\n            this.c = $$1.extend(true, {}, SearchBuilder.defaults, opts);\n            this.dom = {\n                clearAll: $$1('<button type=\"button\">' + table.i18n('searchBuilder.clearAll', this.c.i18n.clearAll) + '</button>')\n                    .addClass(this.classes.clearAll)\n                    .addClass(this.classes.button)\n                    .attr('type', 'button'),\n                container: $$1('<div/>')\n                    .addClass(this.classes.container),\n                title: $$1('<div/>')\n                    .addClass(this.classes.title),\n                titleRow: $$1('<div/>')\n                    .addClass(this.classes.titleRow),\n                topGroup: undefined\n            };\n            this.s = {\n                dt: table,\n                opts: opts,\n                search: undefined,\n                serverData: undefined,\n                topGroup: undefined\n            };\n            // If searchbuilder is already defined for this table then return\n            if (table.settings()[0]._searchBuilder !== undefined) {\n                return;\n            }\n            table.settings()[0]._searchBuilder = this;\n            // If using SSP we want to include the previous state in the very first server call\n            if (this.s.dt.page.info().serverSide) {\n                this.s.dt.on('preXhr.dtsb', function (e, settings, data) {\n                    var loadedState = _this.s.dt.state.loaded();\n                    if (loadedState && loadedState.searchBuilder) {\n                        data.searchBuilder = _this._collapseArray(loadedState.searchBuilder);\n                    }\n                });\n                this.s.dt.on('xhr.dtsb', function (e, settings, json) {\n                    if (json && json.searchBuilder && json.searchBuilder.options) {\n                        _this.s.serverData = json.searchBuilder.options;\n                    }\n                });\n            }\n            // Run the remaining setup when the table is initialised\n            if (this.s.dt.settings()[0]._bInitComplete) {\n                this._setUp();\n            }\n            else {\n                table.one('init.dt', function () {\n                    _this._setUp();\n                });\n            }\n            return this;\n        }\n        /**\n         * Gets the details required to rebuild the SearchBuilder as it currently is\n         */\n        // eslint upset at empty object but that is what it is\n        // eslint-disable-next-line @typescript-eslint/ban-types\n        SearchBuilder.prototype.getDetails = function (deFormatDates) {\n            if (deFormatDates === void 0) { deFormatDates = false; }\n            return this.s.topGroup.getDetails(deFormatDates);\n        };\n        /**\n         * Getter for the node of the container for the searchBuilder\n         *\n         * @returns JQuery<HTMLElement> the node of the container\n         */\n        SearchBuilder.prototype.getNode = function () {\n            return this.dom.container;\n        };\n        /**\n         * Rebuilds the SearchBuilder to a state that is provided\n         *\n         * @param details The details required to perform a rebuild\n         */\n        SearchBuilder.prototype.rebuild = function (details) {\n            this.dom.clearAll.click();\n            // If there are no details to rebuild then return\n            if (details === undefined || details === null) {\n                return this;\n            }\n            this.s.topGroup.s.preventRedraw = true;\n            this.s.topGroup.rebuild(details);\n            this.s.topGroup.s.preventRedraw = false;\n            this._checkClear();\n            this._updateTitle(this.s.topGroup.count());\n            this.s.topGroup.redrawContents();\n            this.s.dt.draw(false);\n            this.s.topGroup.setListeners();\n            return this;\n        };\n        /**\n         * Applies the defaults to preDefined criteria\n         *\n         * @param preDef the array of criteria to be processed.\n         */\n        SearchBuilder.prototype._applyPreDefDefaults = function (preDef) {\n            var _this = this;\n            if (preDef.criteria !== undefined && preDef.logic === undefined) {\n                preDef.logic = 'AND';\n            }\n            var _loop_1 = function (crit) {\n                // Apply the defaults to any further criteria\n                if (crit.criteria !== undefined) {\n                    crit = this_1._applyPreDefDefaults(crit);\n                }\n                else {\n                    this_1.s.dt.columns().every(function (index) {\n                        if (_this.s.dt.settings()[0].aoColumns[index].sTitle === crit.data) {\n                            crit.dataIdx = index;\n                        }\n                    });\n                }\n            };\n            var this_1 = this;\n            for (var _i = 0, _a = preDef.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                _loop_1(crit);\n            }\n            return preDef;\n        };\n        /**\n         * Set's up the SearchBuilder\n         */\n        SearchBuilder.prototype._setUp = function (loadState) {\n            var _this = this;\n            if (loadState === void 0) { loadState = true; }\n            // Register an Api method for getting the column type\n            $$1.fn.DataTable.Api.registerPlural('columns().type()', 'column().type()', function () {\n                return this.iterator('column', function (settings, column) {\n                    return settings.aoColumns[column].sType;\n                }, 1);\n            });\n            // Check that DateTime is included, If not need to check if it could be used\n            // eslint-disable-next-line no-extra-parens\n            if (!dataTable$1.DateTime) {\n                var types = this.s.dt.columns().type().toArray();\n                if (types === undefined || types.includes(undefined) || types.includes(null)) {\n                    types = [];\n                    for (var _i = 0, _a = this.s.dt.settings()[0].aoColumns; _i < _a.length; _i++) {\n                        var colInit = _a[_i];\n                        types.push(colInit.searchBuilderType !== undefined ? colInit.searchBuilderType : colInit.sType);\n                    }\n                }\n                var columnIdxs = this.s.dt.columns().toArray();\n                // If the types are not yet set then draw to see if they can be retrieved then\n                if (types === undefined || types.includes(undefined) || types.includes(null)) {\n                    $$1.fn.dataTable.ext.oApi._fnColumnTypes(this.s.dt.settings()[0]);\n                    types = this.s.dt.columns().type().toArray();\n                }\n                for (var i = 0; i < columnIdxs[0].length; i++) {\n                    var column = columnIdxs[0][i];\n                    var type = types[column];\n                    if (\n                    // Check if this column can be filtered\n                    (this.c.columns === true ||\n                        Array.isArray(this.c.columns) &&\n                            this.c.columns.includes(i)) &&\n                        // Check if the type is one of the restricted types\n                        (type.includes('date') ||\n                            type.includes('moment') ||\n                            type.includes('luxon'))) {\n                        alert('SearchBuilder Requires DateTime when used with dates.');\n                        throw new Error('SearchBuilder requires DateTime');\n                    }\n                }\n            }\n            this.s.topGroup = new Group(this.s.dt, this.c, undefined, undefined, undefined, undefined, this.s.serverData);\n            this._setClearListener();\n            this.s.dt.on('stateSaveParams.dtsb', function (e, settings, data) {\n                data.searchBuilder = _this.getDetails();\n                if (!data.scroller) {\n                    data.page = _this.s.dt.page();\n                }\n                else {\n                    data.start = _this.s.dt.state().start;\n                }\n            });\n            this.s.dt.on('stateLoadParams.dtsb', function (e, settings, data) {\n                _this.rebuild(data.searchBuilder);\n            });\n            this._build();\n            this.s.dt.on('preXhr.dtsb', function (e, settings, data) {\n                if (_this.s.dt.page.info().serverSide) {\n                    data.searchBuilder = _this._collapseArray(_this.getDetails(true));\n                }\n            });\n            this.s.dt.on('column-reorder', function () {\n                _this.rebuild(_this.getDetails());\n            });\n            if (loadState) {\n                var loadedState = this.s.dt.state.loaded();\n                // If the loaded State is not null rebuild based on it for statesave\n                if (loadedState !== null && loadedState.searchBuilder !== undefined) {\n                    this.s.topGroup.rebuild(loadedState.searchBuilder);\n                    this.s.topGroup.dom.container.trigger('dtsb-redrawContents');\n                    // If using SSP we want to restrict the amount of server calls that take place\n                    //  and this information will already have been processed\n                    if (!this.s.dt.page.info().serverSide) {\n                        if (loadedState.page) {\n                            this.s.dt.page(loadedState.page).draw('page');\n                        }\n                        else if (this.s.dt.scroller && loadedState.scroller) {\n                            this.s.dt.scroller().scrollToRow(loadedState.scroller.topRow);\n                        }\n                    }\n                    this.s.topGroup.setListeners();\n                }\n                // Otherwise load any predefined options\n                else if (this.c.preDefined !== false) {\n                    this.c.preDefined = this._applyPreDefDefaults(this.c.preDefined);\n                    this.rebuild(this.c.preDefined);\n                }\n            }\n            this._setEmptyListener();\n            this.s.dt.state.save();\n        };\n        SearchBuilder.prototype._collapseArray = function (criteria) {\n            if (criteria.logic === undefined) {\n                if (criteria.value !== undefined) {\n                    criteria.value.sort(function (a, b) {\n                        if (!isNaN(+a)) {\n                            a = +a;\n                            b = +b;\n                        }\n                        if (a < b) {\n                            return -1;\n                        }\n                        else if (b < a) {\n                            return 1;\n                        }\n                        else {\n                            return 0;\n                        }\n                    });\n                    criteria.value1 = criteria.value[0];\n                    criteria.value2 = criteria.value[1];\n                }\n            }\n            else {\n                for (var i = 0; i < criteria.criteria.length; i++) {\n                    criteria.criteria[i] = this._collapseArray(criteria.criteria[i]);\n                }\n            }\n            return criteria;\n        };\n        /**\n         * Updates the title of the SearchBuilder\n         *\n         * @param count the number of filters in the SearchBuilder\n         */\n        SearchBuilder.prototype._updateTitle = function (count) {\n            this.dom.title.html(this.s.dt.i18n('searchBuilder.title', this.c.i18n.title, count));\n        };\n        /**\n         * Builds all of the dom elements together\n         */\n        SearchBuilder.prototype._build = function () {\n            var _this = this;\n            // Empty and setup the container\n            this.dom.clearAll.remove();\n            this.dom.container.empty();\n            var count = this.s.topGroup.count();\n            this._updateTitle(count);\n            this.dom.titleRow.append(this.dom.title);\n            this.dom.container.append(this.dom.titleRow);\n            this.dom.topGroup = this.s.topGroup.getNode();\n            this.dom.container.append(this.dom.topGroup);\n            this._setRedrawListener();\n            var tableNode = this.s.dt.table(0).node();\n            if (!$$1.fn.dataTable.ext.search.includes(this.s.search)) {\n                // Custom search function for SearchBuilder\n                this.s.search = function (settings, searchData, dataIndex) {\n                    if (settings.nTable !== tableNode) {\n                        return true;\n                    }\n                    return _this.s.topGroup.search(searchData, dataIndex);\n                };\n                // Add SearchBuilder search function to the dataTables search array\n                $$1.fn.dataTable.ext.search.push(this.s.search);\n            }\n            this.s.dt.on('destroy.dtsb', function () {\n                _this.dom.container.remove();\n                _this.dom.clearAll.remove();\n                var searchIdx = $$1.fn.dataTable.ext.search.indexOf(_this.s.search);\n                while (searchIdx !== -1) {\n                    $$1.fn.dataTable.ext.search.splice(searchIdx, 1);\n                    searchIdx = $$1.fn.dataTable.ext.search.indexOf(_this.s.search);\n                }\n                _this.s.dt.off('.dtsb');\n                $$1(_this.s.dt.table().node()).off('.dtsb');\n            });\n        };\n        /**\n         * Checks if the clearAll button should be added or not\n         */\n        SearchBuilder.prototype._checkClear = function () {\n            if (this.s.topGroup.s.criteria.length > 0) {\n                this.dom.clearAll.insertAfter(this.dom.title);\n                this._setClearListener();\n            }\n            else {\n                this.dom.clearAll.remove();\n            }\n        };\n        /**\n         * Update the count in the title/button\n         *\n         * @param count Number of filters applied\n         */\n        SearchBuilder.prototype._filterChanged = function (count) {\n            var fn = this.c.filterChanged;\n            if (typeof fn === 'function') {\n                fn(count, this.s.dt.i18n('searchBuilder.button', this.c.i18n.button, count));\n            }\n        };\n        /**\n         * Set the listener for the clear button\n         */\n        SearchBuilder.prototype._setClearListener = function () {\n            var _this = this;\n            this.dom.clearAll.unbind('click');\n            this.dom.clearAll.on('click.dtsb', function () {\n                _this.s.topGroup = new Group(_this.s.dt, _this.c, undefined, undefined, undefined, undefined, _this.s.serverData);\n                _this._build();\n                _this.s.dt.draw();\n                _this.s.topGroup.setListeners();\n                _this.dom.clearAll.remove();\n                _this._setEmptyListener();\n                _this._filterChanged(0);\n                return false;\n            });\n        };\n        /**\n         * Set the listener for the Redraw event\n         */\n        SearchBuilder.prototype._setRedrawListener = function () {\n            var _this = this;\n            this.s.topGroup.dom.container.unbind('dtsb-redrawContents');\n            this.s.topGroup.dom.container.on('dtsb-redrawContents.dtsb', function () {\n                _this._checkClear();\n                _this.s.topGroup.redrawContents();\n                _this.s.topGroup.setupLogic();\n                _this._setEmptyListener();\n                var count = _this.s.topGroup.count();\n                _this._updateTitle(count);\n                _this._filterChanged(count);\n                // If using SSP we want to restrict the amount of server calls that take place\n                //  and this information will already have been processed\n                if (!_this.s.dt.page.info().serverSide) {\n                    _this.s.dt.draw();\n                }\n                _this.s.dt.state.save();\n            });\n            this.s.topGroup.dom.container.unbind('dtsb-redrawContents-noDraw');\n            this.s.topGroup.dom.container.on('dtsb-redrawContents-noDraw.dtsb', function () {\n                _this._checkClear();\n                _this.s.topGroup.s.preventRedraw = true;\n                _this.s.topGroup.redrawContents();\n                _this.s.topGroup.s.preventRedraw = false;\n                _this.s.topGroup.setupLogic();\n                _this._setEmptyListener();\n                var count = _this.s.topGroup.count();\n                _this._updateTitle(count);\n                _this._filterChanged(count);\n            });\n            this.s.topGroup.dom.container.unbind('dtsb-redrawLogic');\n            this.s.topGroup.dom.container.on('dtsb-redrawLogic.dtsb', function () {\n                _this.s.topGroup.redrawLogic();\n                var count = _this.s.topGroup.count();\n                _this._updateTitle(count);\n                _this._filterChanged(count);\n            });\n            this.s.topGroup.dom.container.unbind('dtsb-add');\n            this.s.topGroup.dom.container.on('dtsb-add.dtsb', function () {\n                var count = _this.s.topGroup.count();\n                _this._updateTitle(count);\n                _this._filterChanged(count);\n                _this._checkClear();\n            });\n            this.s.dt.on('postEdit.dtsb postCreate.dtsb postRemove.dtsb', function () {\n                _this.s.topGroup.redrawContents();\n            });\n            this.s.topGroup.dom.container.unbind('dtsb-clearContents');\n            this.s.topGroup.dom.container.on('dtsb-clearContents.dtsb', function () {\n                _this._setUp(false);\n                _this._filterChanged(0);\n                _this.s.dt.draw();\n            });\n        };\n        /**\n         * Sets listeners to check whether clearAll should be added or removed\n         */\n        SearchBuilder.prototype._setEmptyListener = function () {\n            var _this = this;\n            this.s.topGroup.dom.add.on('click.dtsb', function () {\n                _this._checkClear();\n            });\n            this.s.topGroup.dom.container.on('dtsb-destroy.dtsb', function () {\n                _this.dom.clearAll.remove();\n            });\n        };\n        SearchBuilder.version = '1.6.0';\n        SearchBuilder.classes = {\n            button: 'dtsb-button',\n            clearAll: 'dtsb-clearAll',\n            container: 'dtsb-searchBuilder',\n            inputButton: 'dtsb-iptbtn',\n            title: 'dtsb-title',\n            titleRow: 'dtsb-titleRow'\n        };\n        SearchBuilder.defaults = {\n            columns: true,\n            conditions: {\n                'date': Criteria.dateConditions,\n                'html': Criteria.stringConditions,\n                'html-num': Criteria.numConditions,\n                'html-num-fmt': Criteria.numFmtConditions,\n                'luxon': Criteria.luxonDateConditions,\n                'moment': Criteria.momentDateConditions,\n                'num': Criteria.numConditions,\n                'num-fmt': Criteria.numFmtConditions,\n                'string': Criteria.stringConditions\n            },\n            depthLimit: false,\n            enterSearch: false,\n            filterChanged: undefined,\n            greyscale: false,\n            liveSearch: true,\n            i18n: {\n                add: 'Add Condition',\n                button: {\n                    0: 'Search Builder',\n                    _: 'Search Builder (%d)'\n                },\n                clearAll: 'Clear All',\n                condition: 'Condition',\n                conditions: {\n                    array: {\n                        contains: 'Contains',\n                        empty: 'Empty',\n                        equals: 'Equals',\n                        not: 'Not',\n                        notEmpty: 'Not Empty',\n                        without: 'Without'\n                    },\n                    date: {\n                        after: 'After',\n                        before: 'Before',\n                        between: 'Between',\n                        empty: 'Empty',\n                        equals: 'Equals',\n                        not: 'Not',\n                        notBetween: 'Not Between',\n                        notEmpty: 'Not Empty'\n                    },\n                    // eslint-disable-next-line id-blacklist\n                    number: {\n                        between: 'Between',\n                        empty: 'Empty',\n                        equals: 'Equals',\n                        gt: 'Greater Than',\n                        gte: 'Greater Than Equal To',\n                        lt: 'Less Than',\n                        lte: 'Less Than Equal To',\n                        not: 'Not',\n                        notBetween: 'Not Between',\n                        notEmpty: 'Not Empty'\n                    },\n                    // eslint-disable-next-line id-blacklist\n                    string: {\n                        contains: 'Contains',\n                        empty: 'Empty',\n                        endsWith: 'Ends With',\n                        equals: 'Equals',\n                        not: 'Not',\n                        notContains: 'Does Not Contain',\n                        notEmpty: 'Not Empty',\n                        notEndsWith: 'Does Not End With',\n                        notStartsWith: 'Does Not Start With',\n                        startsWith: 'Starts With'\n                    }\n                },\n                data: 'Data',\n                \"delete\": '&times',\n                deleteTitle: 'Delete filtering rule',\n                left: '<',\n                leftTitle: 'Outdent criteria',\n                logicAnd: 'And',\n                logicOr: 'Or',\n                right: '>',\n                rightTitle: 'Indent criteria',\n                search: 'Search',\n                title: {\n                    0: 'Custom Search Builder',\n                    _: 'Custom Search Builder (%d)'\n                },\n                value: 'Value',\n                valueJoiner: 'and'\n            },\n            logic: 'AND',\n            orthogonal: {\n                display: 'display',\n                search: 'filter'\n            },\n            preDefined: false\n        };\n        return SearchBuilder;\n    }());\n\n    /*! SearchBuilder 1.6.0\n     * ©SpryMedia Ltd - datatables.net/license/mit\n     */\n    setJQuery($);\n    setJQuery$1($);\n    setJQuery$2($);\n    var dataTable = $.fn.dataTable;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchBuilder = SearchBuilder;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchBuilder = SearchBuilder;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.Group = Group;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.Group = Group;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.Criteria = Criteria;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.Criteria = Criteria;\n    // eslint-disable-next-line no-extra-parens\n    var apiRegister = DataTable.Api.register;\n    // Set up object for plugins\n    DataTable.ext.searchBuilder = {\n        conditions: {}\n    };\n    DataTable.ext.buttons.searchBuilder = {\n        action: function (e, dt, node, config) {\n            this.popover(config._searchBuilder.getNode(), {\n                align: 'container',\n                span: 'container'\n            });\n            var topGroup = config._searchBuilder.s.topGroup;\n            // Need to redraw the contents to calculate the correct positions for the elements\n            if (topGroup !== undefined) {\n                topGroup.dom.container.trigger('dtsb-redrawContents-noDraw');\n            }\n            if (topGroup.s.criteria.length === 0) {\n                $('.' + $.fn.dataTable.Group.classes.add.replace(/ /g, '.')).click();\n            }\n        },\n        config: {},\n        init: function (dt, node, config) {\n            var sb = new DataTable.SearchBuilder(dt, $.extend({\n                filterChanged: function (count, text) {\n                    dt.button(node).text(text);\n                }\n            }, config.config));\n            dt.button(node).text(config.text || dt.i18n('searchBuilder.button', sb.c.i18n.button, 0));\n            config._searchBuilder = sb;\n        },\n        text: null\n    };\n    apiRegister('searchBuilder.getDetails()', function (deFormatDates) {\n        if (deFormatDates === void 0) { deFormatDates = false; }\n        var ctx = this.context[0];\n        // If SearchBuilder has not been initialised on this instance then return\n        return ctx._searchBuilder ?\n            ctx._searchBuilder.getDetails(deFormatDates) :\n            null;\n    });\n    apiRegister('searchBuilder.rebuild()', function (details) {\n        var ctx = this.context[0];\n        // If SearchBuilder has not been initialised on this instance then return\n        if (ctx._searchBuilder === undefined) {\n            return null;\n        }\n        ctx._searchBuilder.rebuild(details);\n        return this;\n    });\n    apiRegister('searchBuilder.container()', function () {\n        var ctx = this.context[0];\n        // If SearchBuilder has not been initialised on this instance then return\n        return ctx._searchBuilder ?\n            ctx._searchBuilder.getNode() :\n            null;\n    });\n    /**\n     * Init function for SearchBuilder\n     *\n     * @param settings the settings to be applied\n     * @param options the options for SearchBuilder\n     * @returns JQUERY<HTMLElement> Returns the node of the SearchBuilder\n     */\n    function _init(settings, options) {\n        var api = new DataTable.Api(settings);\n        var opts = options\n            ? options\n            : api.init().searchBuilder || DataTable.defaults.searchBuilder;\n        var searchBuilder = new SearchBuilder(api, opts);\n        var node = searchBuilder.getNode();\n        return node;\n    }\n    // Attach a listener to the document which listens for DataTables initialisation\n    // events so we can automatically initialise\n    $(document).on('preInit.dt.dtsp', function (e, settings) {\n        if (e.namespace !== 'dt') {\n            return;\n        }\n        if (settings.oInit.searchBuilder ||\n            DataTable.defaults.searchBuilder) {\n            if (!settings._searchBuilder) {\n                _init(settings);\n            }\n        }\n    });\n    // DataTables `dom` feature option\n    DataTable.ext.feature.push({\n        cFeature: 'Q',\n        fnInit: _init\n    });\n    // DataTables 2 layout feature\n    if (DataTable.ext.features) {\n        DataTable.ext.features.register('searchBuilder', _init);\n    }\n\n})();\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/js/searchBuilder.bootstrap.js",
    "content": "/*! Bootstrap ui integration for DataTables' SearchBuilder\n * © SpryMedia Ltd - datatables.net/license\n*/\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-searchbuilder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchBuilder ) {\n\t\t\t\trequire('datatables.net-searchbuilder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchBuilder.classes, {\n    clearAll: 'btn btn-default dtsb-clearAll'\n});\n$.extend(true, DataTable.Group.classes, {\n    add: 'btn btn-default dtsb-add',\n    clearGroup: 'btn btn-default dtsb-clearGroup',\n    logic: 'btn btn-default dtsb-logic'\n});\n$.extend(true, DataTable.Criteria.classes, {\n    condition: 'form-control dtsb-condition',\n    data: 'form-control dtsb-data',\n    \"delete\": 'btn btn-default dtsb-delete',\n    left: 'btn btn-default dtsb-left',\n    right: 'btn btn-default dtsb-right',\n    value: 'form-control dtsb-value'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/js/searchBuilder.bootstrap4.js",
    "content": "/*! Bootstrap 4 ui integration for DataTables' SearchBuilder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-searchbuilder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchBuilder ) {\n\t\t\t\trequire('datatables.net-searchbuilder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchBuilder.classes, {\n    clearAll: 'btn btn-light dtsb-clearAll'\n});\n$.extend(true, DataTable.Group.classes, {\n    add: 'btn btn-light dtsb-add',\n    clearGroup: 'btn btn-light dtsb-clearGroup',\n    logic: 'btn btn-light dtsb-logic'\n});\n$.extend(true, DataTable.Criteria.classes, {\n    condition: 'form-control dtsb-condition',\n    data: 'form-control dtsb-data',\n    \"delete\": 'btn btn-light dtsb-delete',\n    left: 'btn btn-light dtsb-left',\n    right: 'btn btn-light dtsb-right',\n    value: 'form-control dtsb-value'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/js/searchBuilder.bootstrap5.js",
    "content": "/*! Bootstrap 5 ui integration for DataTables' SearchBuilder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-searchbuilder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchBuilder ) {\n\t\t\t\trequire('datatables.net-searchbuilder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchBuilder.classes, {\n    clearAll: 'btn btn-secondary dtsb-clearAll'\n});\n$.extend(true, DataTable.Group.classes, {\n    add: 'btn btn-secondary dtsb-add',\n    clearGroup: 'btn btn-secondary dtsb-clearGroup',\n    logic: 'btn btn-secondary dtsb-logic'\n});\n$.extend(true, DataTable.Criteria.classes, {\n    condition: 'form-select dtsb-condition',\n    data: 'dtsb-data form-select',\n    \"delete\": 'btn btn-secondary dtsb-delete',\n    input: 'form-control dtsb-input',\n    left: 'btn btn-secondary dtsb-left',\n    right: 'btn btn-secondary dtsb-right',\n    select: 'form-select',\n    value: 'dtsb-value'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/js/searchBuilder.bulma.js",
    "content": "/*! Bulma ui integration for DataTables' SearchBuilder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-searchbuilder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchBuilder ) {\n\t\t\t\trequire('datatables.net-searchbuilder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchBuilder.classes, {\n    clearAll: 'button dtsb-clearAll'\n});\n$.extend(true, DataTable.Group.classes, {\n    add: 'button dtsb-add',\n    clearGroup: 'button dtsb-clearGroup is-light',\n    logic: 'button dtsb-logic is-light'\n});\n$.extend(true, DataTable.Criteria.classes, {\n    container: 'dtsb-criteria',\n    \"delete\": 'button dtsb-delete',\n    left: 'button dtsb-left',\n    right: 'button dtsb-right'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/js/searchBuilder.dataTables.js",
    "content": "/*! DataTables integration for DataTables' SearchBuilder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-searchbuilder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchBuilder ) {\n\t\t\t\trequire('datatables.net-searchbuilder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/js/searchBuilder.foundation.js",
    "content": "/*! Foundation ui integration for DataTables' SearchBuilder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-searchbuilder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchBuilder ) {\n\t\t\t\trequire('datatables.net-searchbuilder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchBuilder.classes, {\n    clearAll: 'button alert dtsb-clearAll'\n});\n$.extend(true, DataTable.Group.classes, {\n    add: 'button dtsb-add',\n    clearGroup: 'button dtsb-clearGroup',\n    logic: 'button dtsb-logic'\n});\n$.extend(true, DataTable.Criteria.classes, {\n    condition: 'form-control dtsb-condition',\n    data: 'form-control dtsb-data',\n    \"delete\": 'button alert dtsb-delete',\n    left: 'button dtsb-left',\n    right: 'button dtsb-right',\n    value: 'form-control dtsb-value'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/js/searchBuilder.jqueryui.js",
    "content": "/*! JQuery ui ui integration for DataTables' SearchBuilder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-searchbuilder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchBuilder ) {\n\t\t\t\trequire('datatables.net-searchbuilder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchBuilder.classes, {\n    clearAll: 'ui-button ui-corner-all ui-widget dtsb-clearAll'\n});\n$.extend(true, DataTable.Group.classes, {\n    add: 'ui-button ui-corner-all ui-widget dtsb-add',\n    clearGroup: 'ui-button ui-corner-all ui-widget dtsb-clearGroup',\n    logic: 'ui-button ui-corner-all ui-widget dtsb-logic'\n});\n$.extend(true, DataTable.Criteria.classes, {\n    condition: 'ui-selectmenu-button ui-button ui-widget ui-selectmenu-button-closed ui-corner-all dtsb-condition',\n    data: 'ui-selectmenu-button ui-button ui-widget ui-selectmenu-button-closed ui-corner-all dtsb-data',\n    \"delete\": 'ui-button ui-corner-all ui-widget dtsb-delete',\n    left: 'ui-button ui-corner-all ui-widget dtsb-left',\n    right: 'ui-button ui-corner-all ui-widget dtsb-right',\n    value: 'ui-selectmenu-button ui-button ui-widget ui-selectmenu-button-closed ui-corner-all dtsb-value'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchBuilder-1.6.0/js/searchBuilder.semanticui.js",
    "content": "/*! semantic ui integration for DataTables' SearchBuilder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-searchbuilder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchBuilder ) {\n\t\t\t\trequire('datatables.net-searchbuilder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchBuilder.classes, {\n    clearAll: 'basic ui button dtsb-clearAll'\n});\n$.extend(true, DataTable.Group.classes, {\n    add: 'basic ui button dtsb-add',\n    clearGroup: 'basic ui button dtsb-clearGroup',\n    logic: 'basic ui button dtsb-logic'\n});\n$.extend(true, DataTable.Criteria.classes, {\n    condition: 'ui selection dropdown dtsb-condition',\n    data: 'ui selection dropdown dtsb-data',\n    \"delete\": 'basic ui button dtsb-delete',\n    left: 'basic ui button dtsb-left',\n    right: 'basic ui button dtsb-right',\n    value: 'basic ui selection dropdown dtsb-value'\n});\nDataTable.ext.buttons.searchBuilder.action = function (e, dt, node, config) {\n    e.stopPropagation();\n    this.popover(config._searchBuilder.getNode(), {\n        align: 'container',\n        span: 'container'\n    });\n    // Need to redraw the contents to calculate the correct positions for the elements\n    if (config._searchBuilder.s.topGroup !== undefined) {\n        config._searchBuilder.s.topGroup.dom.container.trigger('dtsb-redrawContents');\n    }\n    $('div.dtsb-searchBuilder').removeClass('ui basic vertical buttons');\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/css/searchPanes.bootstrap.css",
    "content": "div.dtsp-topRow {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  border: 2px solid rgba(0, 0, 0, 0);\n  border-radius: 3px;\n  justify-content: space-around;\n  align-content: flex-start;\n  align-items: flex-start;\n  min-height: 37px;\n}\ndiv.dtsp-topRow input.dtsp-search {\n  text-overflow: ellipsis;\n  min-width: 50px;\n  flex-basis: 90px;\n  max-width: none;\n}\ndiv.dtsp-topRow input.dtsp-search::placeholder {\n  color: inherit;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  flex: 1 1 auto;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont {\n  position: relative;\n  width: 100%;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont input.dtsp-disabledButton {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  background-color: transparent;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 input {\n  padding-right: 2em;\n  width: 100% !important;\n  box-sizing: border-box;\n  font-size: 1em;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAABbmlDQ1BpY2MAACiRdZE7SwNBFIU/EyWikRRaiFhsoWKhEBREO42FTZAQFYza7G5eQhKX3QQJtoKNhWAh2vgq/AfaCrYKgqAIIhb+Al+NhPVOEkiQZJbZ+3FmzmXmDHjCGTPrtAYhm8vb0bmQthxb0Xzv+PHRxRSabjrWTCQSpun4eaRF1YdR1av5voajM55wTGhpF54wLTsvPC0c3sxbineFe8y0Hhc+ER6x5YDCt0o3KvymOFXhL8X2YnQWPKqnlqpjo47NtJ0VHhYeyGYKZvU86ib+RG5pQWqfzH4coswRQsOgwDoZ8oxKzUlmjX3Bsm+eDfGY8rcoYosjRVq8I6IWpGtCalL0hHwZiir3/3k6yfGxSnd/CNpeXfdzEHz7UNpz3d9T1y2dgfcFrnM1/4bkNPkt+l5NGziGwDZc3tQ04wCudqD32dJtvSx5ZXqSSfi4gK4YdN9Dx2olq+o650+wuCVPdAeHRzAk+wNrfw8JaBFXEnV+AAAACXBIWXMAAA9hAAAPYQGoP6dpAAABMUlEQVQoU6XRr0vDQRjH8akoM4iIjqGoOIZ5oIjB5XWxajaYDGLSIhhNYjcPRDSJwbQNw+L+BNGgYYo/5pT5/shz8vDlBgMPXux7z3N3z+25VOofYyCyd4ZYCavI4gXPsRp9LqiDdrEMH+8wv8Vh8gBfWclFPOEUN3hAHjlMoRa7wTzBS5xgKLFglPkZLjDic6HyDsEMNvGR2Nxifoci3tEI+X770JU0XmPXIlax+LTPh83fFox1X6kxyzdjm9UcdXi9S+Vti6svfyNULhNR9TVsYNhW6Ff9KKCNR7/Zv6eeaQ+6+qcdpu9BqGlp1HFgud+FYdzzUcUExu0Q/cdzHGEFetIlXKPjK/sbqYoOftMiS+j9jzEJPd1Wt+5+kdR/9EM9ucIC5jCbyPc01Q32kfsBppYz3hYFcCwAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 12px;\n}\ndiv.dtsp-topRow div.dtsp-subRow2 {\n  white-space: nowrap;\n  flex: 0 0 auto;\n}\ndiv.dtsp-topRow button > span {\n  display: inline-block;\n  height: 100%;\n  width: 100%;\n}\ndiv.dtsp-topRow button.dtsp-nameButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAK2SURBVFgJ7ZY9j41BFICvryCExrJBQ6HyEYVEIREaUZDQIRoR2ViJKCioxV+gkVXYTVZEQiEUhG2EQnxUCh0FKolY4ut5XnM2cyfva3Pt5m7EPcmzZ2bemTNnzjkzd1utnvQi0IvAfxiBy5z5FoxO89kPY+8mbMjtzs47RXs5/WVpbAG6bWExt5PuIibvhVkwmC+ck3eK9ln6/fAddFojYzBVuYSBpcnIEvRaqOw2RcaN18FPuJH0JvRUxbT3wWf4ltiKPgfVidWlbGZgPozDFfgAC+EA/K2EI4cwcAJ+gPaeQ+VQU2SOMMGcPgPl/m/V2p50rrbRsRgt9Iv5h6xtpP22Bz7Ce1C+gFFxfKzOmShcU+Qmyh2w3w8rIJfddHTck66EukL/xPhj+JM8rHNmFys0Pg4v0up3aFNlwR9NYyodd3OL/C64zpsymcTFcf6ElM4YzjAWKYrJkaq8kE/yUYNP4BoYvS1QRo+hNtF5xfkTUjoTheukSFFMjlTFm6PjceOca/SMpKfeCR1L6Uzk/y2WIkVhNFJlJAZhP+hYns7b9D3IPuhY5mYrIv8OrQJvR5NYyNaW4jsU8pSGNySiVx4o5tXq3JkoXE/mg5R/M8dGJCJpKhaDcjBRdbI/Rm8g69c122om33BHmj2CHoV5qa9jUXBraJ+G1fAVjIBO1klc87ro1K4JZ/K35SWW3TwcyDd6TecqnAEd8cGq2+w84xvBm1n3vS0izKkkwh5XNC/GmFPqqAtPF89AOScKuemaNzoTV1SD5dtSbmLf1/RV+tC0WTgcj6R7HEtrVGWaqu/lYDZ/2pvxQ/kIyw/gFByHC9AHw910hv1aUUumyd8yy0QfhmEkfiNod0Xusct68J1qc8Tdux0Z97Q+hsDb+AYGYEbF/4Guw2Q/qDPqZG/zXgT+3Qj8AtKnfWhFwmuAAAAAAElFTkSuQmCC\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 23px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-countButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAG5SURBVEgN3VU9LwVBFF0fiYhofUSlEQkKhU7z/oBCQkIiGr9BgUbhVzy9BAnhFyjV/AYFiU5ICM7ZN+c5Zud5dm3lJmfmzrkz9+7cu3c3y/6jjOBSF8CxXS7FmTkbwqIJjDpJvTcmsJ4K3KPZUpyZsx0sxoB9J6mnAkyC7wGuuCFIipNtEcpcWExgXpOBc78vgj6N+QO4NVsjwdFM59tUIDxDrHMBOeIQ34C5ZDregXuAQm4YcI68nN9B3wr2PcwPAIPkN2EqtJH6b+QZm1ajjTx7BqwAr26Lb+C2Kvpbt0Mb2HAJ7NrGFGfmXO3DeA4UshDfQAVmH0gaUFg852TTTDvlxwBlCtxy9zXyBhQFaq0wMmIdRebrfgosA3zb2hKnqG0oqchp4QbuR8X0TjzABhbdOT8jnQ/atcgqpnfwOA7yqZyTU587ZkIGdesLTt2EkynOnbreMUUKMI/dA4B/QVOcO13CQh+5wWCgDwo/75u59odB/wjmfhbgvACcAOyZPHihMWAoIwxyCLgf1oxfgjzVbgBXSTzIN+f0pg6s5DkcesLMRpsBrgE2XO3CN64JFP7JtUeKHX4CKtRRXFZ+7dEAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 18px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton span.dtsp-caret {\n  position: relative;\n  top: 9px;\n  display: inline-block;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton.dtsp-rotated {\n  transform: rotate(180deg);\n}\n\ndiv.dtsp-searchPane table thead th,\ndiv.dtsp-searchPane table thead td {\n  width: 100% !important;\n}\n\ndiv.dt-button-collection {\n  z-index: 2002;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsp-titleRow {\n  padding-right: 25px;\n}\n\ndiv.dtsp-columns-1 {\n  max-width: 100%;\n  min-width: 100%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-2 {\n  max-width: 49%;\n  min-width: 49%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-3 {\n  max-width: 32%;\n  min-width: 32%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-4 {\n  max-width: 24%;\n  min-width: 24%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-5 {\n  max-width: 19%;\n  min-width: 19%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-6 {\n  max-width: 16%;\n  min-width: 16%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-7 {\n  max-width: 14%;\n  min-width: 14%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-8 {\n  max-width: 12%;\n  min-width: 12%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-9 {\n  max-width: 10.5%;\n  min-width: 10.5%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-narrow {\n  flex-direction: column !important;\n}\ndiv.dtsp-narrow div.dtsp-subRow1,\ndiv.dtsp-narrow div.dtsp-subRow2 {\n  width: 100%;\n}\ndiv.dtsp-narrow div.dtsp-subRow2 button {\n  margin: 0 !important;\n  width: 25% !important;\n}\n\ndiv.dt-button-collection {\n  float: none;\n}\n\ndiv.dtsp-panesContainer {\n  margin-bottom: 1em;\n}\n\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  width: 100%;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_layout_cell {\n  padding: 0;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollHead {\n  display: none !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody {\n  background: white !important;\n  border-bottom: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody thead {\n  display: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table {\n  table-layout: fixed;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > th,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > td {\n  padding: 5px 10px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody td.dtsp-nameColumn {\n  width: 100% !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont {\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  cursor: default;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name {\n  text-overflow: ellipsis;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: middle;\n  white-space: nowrap;\n  flex-grow: 1;\n  text-align: left;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  display: inline-block;\n  background-color: #cfcfcf;\n  text-align: center;\n  border-radius: 10px;\n  width: auto;\n  min-width: 30px;\n  color: black;\n  font-size: 0.9em;\n  padding: 0 4px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill:empty {\n  display: none;\n}\n\ndiv.dtsp-panesContainer {\n  clear: both;\n  padding-left: 0;\n  padding-right: 0;\n  text-align: center;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  align-content: flex-start;\n  align-items: stretch;\n  clear: both;\n  text-align: left;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane {\n  flex-grow: 1;\n  flex-shrink: 0;\n  font-size: 0.9em;\n  margin-top: 15px !important;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper {\n  flex: 1;\n  box-sizing: border-box;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper div.dataTables_filter {\n  display: none;\n}\ndiv.dtsp-panesContainer div.dtsp-title {\n  float: left;\n  padding: 10px 0;\n}\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-collapseAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  float: right;\n  padding: 10px;\n}\n\ndiv.dtsp-hidden {\n  display: none !important;\n}\n\nbutton.dtsp-clearAll,\nbutton.dtsp-showAll {\n  margin-left: 3px !important;\n}\n\ndiv.dt-button-collection {\n  z-index: 2002 !important;\n}\ndiv.dt-button-collection div.dtsp-panesContainer {\n  padding: 5px;\n  z-index: 2002;\n  width: 100%;\n}\n\ndiv.dtsp-searchPane div.dtsp-topRow {\n  margin: 0.5em 0;\n}\ndiv.dtsp-searchPane div.dtsp-topRow div.dtsp-searchCont input.dtsp-search {\n  min-height: 34px;\n  padding-top: 0px;\n  padding-bottom: 0px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow div.dtsp-searchCont input.dtsp-paneInputButton {\n  padding-top: 0px;\n  padding-bottom: 0px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow2 {\n  margin-left: 0.5em;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button {\n  border: 1px solid #ced4da;\n  width: 35px;\n  height: 34px;\n  padding: 0;\n}\ndiv.dtsp-searchPane div.dtsp-topRow span.dtsp-caret {\n  top: 8px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-rotated {\n  transform: none;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-rotated span {\n  transform: rotate(180deg);\n  top: -8px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover button.disabled {\n  cursor: pointer !important;\n  pointer-events: none;\n}\ndiv.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover input.dtsp-paneInputButton {\n  pointer-events: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  border: 2px #f0f0f0 solid;\n  border-radius: 4px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 2px solid #cfcfcf !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dtsp-nameCont span.badge {\n  min-width: 30px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/css/searchPanes.bootstrap4.css",
    "content": "div.dtsp-topRow {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  border: 2px solid rgba(0, 0, 0, 0);\n  border-radius: 3px;\n  justify-content: space-around;\n  align-content: flex-start;\n  align-items: flex-start;\n  min-height: 37px;\n}\ndiv.dtsp-topRow input.dtsp-search {\n  text-overflow: ellipsis;\n  min-width: 50px;\n  flex-basis: 90px;\n  max-width: none;\n}\ndiv.dtsp-topRow input.dtsp-search::placeholder {\n  color: inherit;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  flex: 1 1 auto;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont {\n  position: relative;\n  width: 100%;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont input.dtsp-disabledButton {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  background-color: transparent;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 input {\n  padding-right: 2em;\n  width: 100% !important;\n  box-sizing: border-box;\n  font-size: 1em;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAABbmlDQ1BpY2MAACiRdZE7SwNBFIU/EyWikRRaiFhsoWKhEBREO42FTZAQFYza7G5eQhKX3QQJtoKNhWAh2vgq/AfaCrYKgqAIIhb+Al+NhPVOEkiQZJbZ+3FmzmXmDHjCGTPrtAYhm8vb0bmQthxb0Xzv+PHRxRSabjrWTCQSpun4eaRF1YdR1av5voajM55wTGhpF54wLTsvPC0c3sxbineFe8y0Hhc+ER6x5YDCt0o3KvymOFXhL8X2YnQWPKqnlqpjo47NtJ0VHhYeyGYKZvU86ib+RG5pQWqfzH4coswRQsOgwDoZ8oxKzUlmjX3Bsm+eDfGY8rcoYosjRVq8I6IWpGtCalL0hHwZiir3/3k6yfGxSnd/CNpeXfdzEHz7UNpz3d9T1y2dgfcFrnM1/4bkNPkt+l5NGziGwDZc3tQ04wCudqD32dJtvSx5ZXqSSfi4gK4YdN9Dx2olq+o650+wuCVPdAeHRzAk+wNrfw8JaBFXEnV+AAAACXBIWXMAAA9hAAAPYQGoP6dpAAABMUlEQVQoU6XRr0vDQRjH8akoM4iIjqGoOIZ5oIjB5XWxajaYDGLSIhhNYjcPRDSJwbQNw+L+BNGgYYo/5pT5/shz8vDlBgMPXux7z3N3z+25VOofYyCyd4ZYCavI4gXPsRp9LqiDdrEMH+8wv8Vh8gBfWclFPOEUN3hAHjlMoRa7wTzBS5xgKLFglPkZLjDic6HyDsEMNvGR2Nxifoci3tEI+X770JU0XmPXIlax+LTPh83fFox1X6kxyzdjm9UcdXi9S+Vti6svfyNULhNR9TVsYNhW6Ff9KKCNR7/Zv6eeaQ+6+qcdpu9BqGlp1HFgud+FYdzzUcUExu0Q/cdzHGEFetIlXKPjK/sbqYoOftMiS+j9jzEJPd1Wt+5+kdR/9EM9ucIC5jCbyPc01Q32kfsBppYz3hYFcCwAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 12px;\n}\ndiv.dtsp-topRow div.dtsp-subRow2 {\n  white-space: nowrap;\n  flex: 0 0 auto;\n}\ndiv.dtsp-topRow button > span {\n  display: inline-block;\n  height: 100%;\n  width: 100%;\n}\ndiv.dtsp-topRow button.dtsp-nameButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAK2SURBVFgJ7ZY9j41BFICvryCExrJBQ6HyEYVEIREaUZDQIRoR2ViJKCioxV+gkVXYTVZEQiEUhG2EQnxUCh0FKolY4ut5XnM2cyfva3Pt5m7EPcmzZ2bemTNnzjkzd1utnvQi0IvAfxiBy5z5FoxO89kPY+8mbMjtzs47RXs5/WVpbAG6bWExt5PuIibvhVkwmC+ck3eK9ln6/fAddFojYzBVuYSBpcnIEvRaqOw2RcaN18FPuJH0JvRUxbT3wWf4ltiKPgfVidWlbGZgPozDFfgAC+EA/K2EI4cwcAJ+gPaeQ+VQU2SOMMGcPgPl/m/V2p50rrbRsRgt9Iv5h6xtpP22Bz7Ce1C+gFFxfKzOmShcU+Qmyh2w3w8rIJfddHTck66EukL/xPhj+JM8rHNmFys0Pg4v0up3aFNlwR9NYyodd3OL/C64zpsymcTFcf6ElM4YzjAWKYrJkaq8kE/yUYNP4BoYvS1QRo+hNtF5xfkTUjoTheukSFFMjlTFm6PjceOca/SMpKfeCR1L6Uzk/y2WIkVhNFJlJAZhP+hYns7b9D3IPuhY5mYrIv8OrQJvR5NYyNaW4jsU8pSGNySiVx4o5tXq3JkoXE/mg5R/M8dGJCJpKhaDcjBRdbI/Rm8g69c122om33BHmj2CHoV5qa9jUXBraJ+G1fAVjIBO1klc87ro1K4JZ/K35SWW3TwcyDd6TecqnAEd8cGq2+w84xvBm1n3vS0izKkkwh5XNC/GmFPqqAtPF89AOScKuemaNzoTV1SD5dtSbmLf1/RV+tC0WTgcj6R7HEtrVGWaqu/lYDZ/2pvxQ/kIyw/gFByHC9AHw910hv1aUUumyd8yy0QfhmEkfiNod0Xusct68J1qc8Tdux0Z97Q+hsDb+AYGYEbF/4Guw2Q/qDPqZG/zXgT+3Qj8AtKnfWhFwmuAAAAAAElFTkSuQmCC\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 23px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-countButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAG5SURBVEgN3VU9LwVBFF0fiYhofUSlEQkKhU7z/oBCQkIiGr9BgUbhVzy9BAnhFyjV/AYFiU5ICM7ZN+c5Zud5dm3lJmfmzrkz9+7cu3c3y/6jjOBSF8CxXS7FmTkbwqIJjDpJvTcmsJ4K3KPZUpyZsx0sxoB9J6mnAkyC7wGuuCFIipNtEcpcWExgXpOBc78vgj6N+QO4NVsjwdFM59tUIDxDrHMBOeIQ34C5ZDregXuAQm4YcI68nN9B3wr2PcwPAIPkN2EqtJH6b+QZm1ajjTx7BqwAr26Lb+C2Kvpbt0Mb2HAJ7NrGFGfmXO3DeA4UshDfQAVmH0gaUFg852TTTDvlxwBlCtxy9zXyBhQFaq0wMmIdRebrfgosA3zb2hKnqG0oqchp4QbuR8X0TjzABhbdOT8jnQ/atcgqpnfwOA7yqZyTU587ZkIGdesLTt2EkynOnbreMUUKMI/dA4B/QVOcO13CQh+5wWCgDwo/75u59odB/wjmfhbgvACcAOyZPHihMWAoIwxyCLgf1oxfgjzVbgBXSTzIN+f0pg6s5DkcesLMRpsBrgE2XO3CN64JFP7JtUeKHX4CKtRRXFZ+7dEAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 18px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton span.dtsp-caret {\n  position: relative;\n  top: 9px;\n  display: inline-block;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton.dtsp-rotated {\n  transform: rotate(180deg);\n}\n\ndiv.dtsp-searchPane table thead th,\ndiv.dtsp-searchPane table thead td {\n  width: 100% !important;\n}\n\ndiv.dt-button-collection {\n  z-index: 2002;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsp-titleRow {\n  padding-right: 25px;\n}\n\ndiv.dtsp-columns-1 {\n  max-width: 100%;\n  min-width: 100%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-2 {\n  max-width: 49%;\n  min-width: 49%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-3 {\n  max-width: 32%;\n  min-width: 32%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-4 {\n  max-width: 24%;\n  min-width: 24%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-5 {\n  max-width: 19%;\n  min-width: 19%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-6 {\n  max-width: 16%;\n  min-width: 16%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-7 {\n  max-width: 14%;\n  min-width: 14%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-8 {\n  max-width: 12%;\n  min-width: 12%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-9 {\n  max-width: 10.5%;\n  min-width: 10.5%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-narrow {\n  flex-direction: column !important;\n}\ndiv.dtsp-narrow div.dtsp-subRow1,\ndiv.dtsp-narrow div.dtsp-subRow2 {\n  width: 100%;\n}\ndiv.dtsp-narrow div.dtsp-subRow2 button {\n  margin: 0 !important;\n  width: 25% !important;\n}\n\ndiv.dt-button-collection {\n  float: none;\n}\n\ndiv.dtsp-panesContainer {\n  margin-bottom: 1em;\n}\n\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  width: 100%;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_layout_cell {\n  padding: 0;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollHead {\n  display: none !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody {\n  background: white !important;\n  border-bottom: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody thead {\n  display: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table {\n  table-layout: fixed;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > th,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > td {\n  padding: 5px 10px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody td.dtsp-nameColumn {\n  width: 100% !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont {\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  cursor: default;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name {\n  text-overflow: ellipsis;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: middle;\n  white-space: nowrap;\n  flex-grow: 1;\n  text-align: left;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  display: inline-block;\n  background-color: #cfcfcf;\n  text-align: center;\n  border-radius: 10px;\n  width: auto;\n  min-width: 30px;\n  color: black;\n  font-size: 0.9em;\n  padding: 0 4px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill:empty {\n  display: none;\n}\n\ndiv.dtsp-panesContainer {\n  clear: both;\n  padding-left: 0;\n  padding-right: 0;\n  text-align: center;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  align-content: flex-start;\n  align-items: stretch;\n  clear: both;\n  text-align: left;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane {\n  flex-grow: 1;\n  flex-shrink: 0;\n  font-size: 0.9em;\n  margin-top: 15px !important;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper {\n  flex: 1;\n  box-sizing: border-box;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper div.dataTables_filter {\n  display: none;\n}\ndiv.dtsp-panesContainer div.dtsp-title {\n  float: left;\n  padding: 10px 0;\n}\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-collapseAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  float: right;\n  padding: 10px;\n}\n\ndiv.dtsp-hidden {\n  display: none !important;\n}\n\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  margin-left: 3px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow {\n  margin: 0.5em 0;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow input.form-control {\n  border-radius: 4px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow2 {\n  margin-left: 0.5em;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button {\n  border: 1px solid #ced4da;\n  width: 35px;\n  line-height: 32px;\n  padding: 0;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow1 button {\n  border-right: none;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow span.dtsp-caret {\n  top: 3px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button.dtsp-rotated {\n  transform: none;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button.dtsp-rotated span {\n  transform: rotate(180deg);\n  top: -2px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover button.disabled {\n  cursor: pointer !important;\n  pointer-events: none;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover input.dtsp-paneInputButton {\n  pointer-events: none;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper {\n  border: 2px #f0f0f0 solid;\n  border-radius: 4px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 2px solid #cfcfcf !important;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper div.dtsp-nameCont span.badge {\n  min-width: 30px;\n  line-height: 1.25em;\n  margin-top: 3.5px;\n}\ndiv.dtsp-panesContainer button.disabled {\n  cursor: not-allowed;\n}\n\ndiv.dt-button-collection div.dtsp-panesContainer {\n  padding-left: 10px;\n  padding-right: 10px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/css/searchPanes.bootstrap5.css",
    "content": "div.dtsp-topRow {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  border: 2px solid rgba(0, 0, 0, 0);\n  border-radius: 3px;\n  justify-content: space-around;\n  align-content: flex-start;\n  align-items: flex-start;\n  min-height: 37px;\n}\ndiv.dtsp-topRow input.dtsp-search {\n  text-overflow: ellipsis;\n  min-width: 50px;\n  flex-basis: 90px;\n  max-width: none;\n}\ndiv.dtsp-topRow input.dtsp-search::placeholder {\n  color: inherit;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  flex: 1 1 auto;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont {\n  position: relative;\n  width: 100%;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont input.dtsp-disabledButton {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  background-color: transparent;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 input {\n  padding-right: 2em;\n  width: 100% !important;\n  box-sizing: border-box;\n  font-size: 1em;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAABbmlDQ1BpY2MAACiRdZE7SwNBFIU/EyWikRRaiFhsoWKhEBREO42FTZAQFYza7G5eQhKX3QQJtoKNhWAh2vgq/AfaCrYKgqAIIhb+Al+NhPVOEkiQZJbZ+3FmzmXmDHjCGTPrtAYhm8vb0bmQthxb0Xzv+PHRxRSabjrWTCQSpun4eaRF1YdR1av5voajM55wTGhpF54wLTsvPC0c3sxbineFe8y0Hhc+ER6x5YDCt0o3KvymOFXhL8X2YnQWPKqnlqpjo47NtJ0VHhYeyGYKZvU86ib+RG5pQWqfzH4coswRQsOgwDoZ8oxKzUlmjX3Bsm+eDfGY8rcoYosjRVq8I6IWpGtCalL0hHwZiir3/3k6yfGxSnd/CNpeXfdzEHz7UNpz3d9T1y2dgfcFrnM1/4bkNPkt+l5NGziGwDZc3tQ04wCudqD32dJtvSx5ZXqSSfi4gK4YdN9Dx2olq+o650+wuCVPdAeHRzAk+wNrfw8JaBFXEnV+AAAACXBIWXMAAA9hAAAPYQGoP6dpAAABMUlEQVQoU6XRr0vDQRjH8akoM4iIjqGoOIZ5oIjB5XWxajaYDGLSIhhNYjcPRDSJwbQNw+L+BNGgYYo/5pT5/shz8vDlBgMPXux7z3N3z+25VOofYyCyd4ZYCavI4gXPsRp9LqiDdrEMH+8wv8Vh8gBfWclFPOEUN3hAHjlMoRa7wTzBS5xgKLFglPkZLjDic6HyDsEMNvGR2Nxifoci3tEI+X770JU0XmPXIlax+LTPh83fFox1X6kxyzdjm9UcdXi9S+Vti6svfyNULhNR9TVsYNhW6Ff9KKCNR7/Zv6eeaQ+6+qcdpu9BqGlp1HFgud+FYdzzUcUExu0Q/cdzHGEFetIlXKPjK/sbqYoOftMiS+j9jzEJPd1Wt+5+kdR/9EM9ucIC5jCbyPc01Q32kfsBppYz3hYFcCwAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 12px;\n}\ndiv.dtsp-topRow div.dtsp-subRow2 {\n  white-space: nowrap;\n  flex: 0 0 auto;\n}\ndiv.dtsp-topRow button > span {\n  display: inline-block;\n  height: 100%;\n  width: 100%;\n}\ndiv.dtsp-topRow button.dtsp-nameButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAK2SURBVFgJ7ZY9j41BFICvryCExrJBQ6HyEYVEIREaUZDQIRoR2ViJKCioxV+gkVXYTVZEQiEUhG2EQnxUCh0FKolY4ut5XnM2cyfva3Pt5m7EPcmzZ2bemTNnzjkzd1utnvQi0IvAfxiBy5z5FoxO89kPY+8mbMjtzs47RXs5/WVpbAG6bWExt5PuIibvhVkwmC+ck3eK9ln6/fAddFojYzBVuYSBpcnIEvRaqOw2RcaN18FPuJH0JvRUxbT3wWf4ltiKPgfVidWlbGZgPozDFfgAC+EA/K2EI4cwcAJ+gPaeQ+VQU2SOMMGcPgPl/m/V2p50rrbRsRgt9Iv5h6xtpP22Bz7Ce1C+gFFxfKzOmShcU+Qmyh2w3w8rIJfddHTck66EukL/xPhj+JM8rHNmFys0Pg4v0up3aFNlwR9NYyodd3OL/C64zpsymcTFcf6ElM4YzjAWKYrJkaq8kE/yUYNP4BoYvS1QRo+hNtF5xfkTUjoTheukSFFMjlTFm6PjceOca/SMpKfeCR1L6Uzk/y2WIkVhNFJlJAZhP+hYns7b9D3IPuhY5mYrIv8OrQJvR5NYyNaW4jsU8pSGNySiVx4o5tXq3JkoXE/mg5R/M8dGJCJpKhaDcjBRdbI/Rm8g69c122om33BHmj2CHoV5qa9jUXBraJ+G1fAVjIBO1klc87ro1K4JZ/K35SWW3TwcyDd6TecqnAEd8cGq2+w84xvBm1n3vS0izKkkwh5XNC/GmFPqqAtPF89AOScKuemaNzoTV1SD5dtSbmLf1/RV+tC0WTgcj6R7HEtrVGWaqu/lYDZ/2pvxQ/kIyw/gFByHC9AHw910hv1aUUumyd8yy0QfhmEkfiNod0Xusct68J1qc8Tdux0Z97Q+hsDb+AYGYEbF/4Guw2Q/qDPqZG/zXgT+3Qj8AtKnfWhFwmuAAAAAAElFTkSuQmCC\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 23px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-countButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAG5SURBVEgN3VU9LwVBFF0fiYhofUSlEQkKhU7z/oBCQkIiGr9BgUbhVzy9BAnhFyjV/AYFiU5ICM7ZN+c5Zud5dm3lJmfmzrkz9+7cu3c3y/6jjOBSF8CxXS7FmTkbwqIJjDpJvTcmsJ4K3KPZUpyZsx0sxoB9J6mnAkyC7wGuuCFIipNtEcpcWExgXpOBc78vgj6N+QO4NVsjwdFM59tUIDxDrHMBOeIQ34C5ZDregXuAQm4YcI68nN9B3wr2PcwPAIPkN2EqtJH6b+QZm1ajjTx7BqwAr26Lb+C2Kvpbt0Mb2HAJ7NrGFGfmXO3DeA4UshDfQAVmH0gaUFg852TTTDvlxwBlCtxy9zXyBhQFaq0wMmIdRebrfgosA3zb2hKnqG0oqchp4QbuR8X0TjzABhbdOT8jnQ/atcgqpnfwOA7yqZyTU587ZkIGdesLTt2EkynOnbreMUUKMI/dA4B/QVOcO13CQh+5wWCgDwo/75u59odB/wjmfhbgvACcAOyZPHihMWAoIwxyCLgf1oxfgjzVbgBXSTzIN+f0pg6s5DkcesLMRpsBrgE2XO3CN64JFP7JtUeKHX4CKtRRXFZ+7dEAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 18px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton span.dtsp-caret {\n  position: relative;\n  top: 9px;\n  display: inline-block;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton.dtsp-rotated {\n  transform: rotate(180deg);\n}\n\ndiv.dtsp-searchPane table thead th,\ndiv.dtsp-searchPane table thead td {\n  width: 100% !important;\n}\n\ndiv.dt-button-collection {\n  z-index: 2002;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsp-titleRow {\n  padding-right: 25px;\n}\n\ndiv.dtsp-columns-1 {\n  max-width: 100%;\n  min-width: 100%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-2 {\n  max-width: 49%;\n  min-width: 49%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-3 {\n  max-width: 32%;\n  min-width: 32%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-4 {\n  max-width: 24%;\n  min-width: 24%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-5 {\n  max-width: 19%;\n  min-width: 19%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-6 {\n  max-width: 16%;\n  min-width: 16%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-7 {\n  max-width: 14%;\n  min-width: 14%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-8 {\n  max-width: 12%;\n  min-width: 12%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-9 {\n  max-width: 10.5%;\n  min-width: 10.5%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-narrow {\n  flex-direction: column !important;\n}\ndiv.dtsp-narrow div.dtsp-subRow1,\ndiv.dtsp-narrow div.dtsp-subRow2 {\n  width: 100%;\n}\ndiv.dtsp-narrow div.dtsp-subRow2 button {\n  margin: 0 !important;\n  width: 25% !important;\n}\n\ndiv.dt-button-collection {\n  float: none;\n}\n\ndiv.dtsp-panesContainer {\n  margin-bottom: 1em;\n}\n\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  width: 100%;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_layout_cell {\n  padding: 0;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollHead {\n  display: none !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody {\n  background: white !important;\n  border-bottom: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody thead {\n  display: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table {\n  table-layout: fixed;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > th,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > td {\n  padding: 5px 10px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody td.dtsp-nameColumn {\n  width: 100% !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont {\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  cursor: default;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name {\n  text-overflow: ellipsis;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: middle;\n  white-space: nowrap;\n  flex-grow: 1;\n  text-align: left;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  display: inline-block;\n  background-color: #cfcfcf;\n  text-align: center;\n  border-radius: 10px;\n  width: auto;\n  min-width: 30px;\n  color: black;\n  font-size: 0.9em;\n  padding: 0 4px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill:empty {\n  display: none;\n}\n\ndiv.dtsp-panesContainer {\n  clear: both;\n  padding-left: 0;\n  padding-right: 0;\n  text-align: center;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  align-content: flex-start;\n  align-items: stretch;\n  clear: both;\n  text-align: left;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane {\n  flex-grow: 1;\n  flex-shrink: 0;\n  font-size: 0.9em;\n  margin-top: 15px !important;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper {\n  flex: 1;\n  box-sizing: border-box;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper div.dataTables_filter {\n  display: none;\n}\ndiv.dtsp-panesContainer div.dtsp-title {\n  float: left;\n  padding: 10px 0;\n}\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-collapseAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  float: right;\n  padding: 10px;\n}\n\ndiv.dtsp-hidden {\n  display: none !important;\n}\n\ndiv.dtsp-panesContainer button.btn-subtle {\n  background-color: #f8f9fa;\n  border: 1px solid #ced4da;\n}\ndiv.dtsp-panesContainer button.btn-subtle.disabled {\n  opacity: 0.5;\n}\ndiv.dtsp-panesContainer button.btn-subtle:hover {\n  background-color: #cbd3da;\n}\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  margin-left: 3px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow {\n  margin: 0.5em 0;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow2 {\n  margin-left: 0.5em;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button {\n  width: 35px;\n  line-height: 20px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button.dtsp-searchIcon, div.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button.dtsp-nameButton, div.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button.dtsp-countButton {\n  padding: 0;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow1 button {\n  border-right: none;\n  margin-right: 1px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow1 input {\n  padding-right: 3em;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow span.dtsp-caret {\n  top: 3px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button.dtsp-rotated {\n  transform: none;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button.dtsp-rotated span {\n  transform: rotate(180deg);\n  top: -2px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover button.disabled {\n  cursor: pointer !important;\n  pointer-events: none;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover input.dtsp-paneInputButton {\n  pointer-events: none;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper {\n  border: 2px #f0f0f0 solid;\n  border-radius: 4px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 2px solid #cfcfcf !important;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper div.dtsp-nameCont span.badge {\n  min-width: 30px;\n  line-height: 1.25em;\n  margin-top: 3.5px;\n}\ndiv.dtsp-panesContainer button.disabled {\n  cursor: not-allowed;\n}\n\ndiv.dt-button-collection div.dtsp-panesContainer {\n  padding-left: 10px !important;\n  padding-right: 10px !important;\n}\n\nhtml[data-bs-theme=dark] div.dtsp-topRow button.dtsp-searchIcon span {\n  filter: invert();\n}\nhtml[data-bs-theme=dark] div.dtsp-topRow button.dtsp-nameButton span {\n  filter: invert();\n}\nhtml[data-bs-theme=dark] div.dtsp-topRow button.dtsp-countButton span {\n  filter: invert();\n}\nhtml[data-bs-theme=dark] div.dtsp-topRow input.dtsp-paneInputButton,\nhtml[data-bs-theme=dark] div.dtsp-topRow button {\n  color: inherit;\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.btn-subtle {\n  background-color: rgb(33, 37, 41);\n  border: var(--bs-border-width) solid var(--bs-border-color);\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.btn-subtle:hover {\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-clearAll,\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-collapseAll,\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-showAll {\n  color: inherit;\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-clearAll:hover,\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-collapseAll:hover,\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-showAll:hover {\n  background-color: rgb(64, 69, 73);\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-disabledButton {\n  color: rgb(124, 124, 124);\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper {\n  border: 1px solid rgba(255, 255, 255, 0.2);\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 1px solid rgba(255, 255, 255, 0.3) !important;\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody {\n  background: rgb(47, 52, 56) !important;\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  background-color: rgb(33, 37, 41);\n  color: inherit;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/css/searchPanes.bulma.css",
    "content": "div.dtsp-topRow {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  border: 2px solid rgba(0, 0, 0, 0);\n  border-radius: 3px;\n  justify-content: space-around;\n  align-content: flex-start;\n  align-items: flex-start;\n  min-height: 37px;\n}\ndiv.dtsp-topRow input.dtsp-search {\n  text-overflow: ellipsis;\n  min-width: 50px;\n  flex-basis: 90px;\n  max-width: none;\n}\ndiv.dtsp-topRow input.dtsp-search::placeholder {\n  color: inherit;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  flex: 1 1 auto;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont {\n  position: relative;\n  width: 100%;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont input.dtsp-disabledButton {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  background-color: transparent;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 input {\n  padding-right: 2em;\n  width: 100% !important;\n  box-sizing: border-box;\n  font-size: 1em;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAABbmlDQ1BpY2MAACiRdZE7SwNBFIU/EyWikRRaiFhsoWKhEBREO42FTZAQFYza7G5eQhKX3QQJtoKNhWAh2vgq/AfaCrYKgqAIIhb+Al+NhPVOEkiQZJbZ+3FmzmXmDHjCGTPrtAYhm8vb0bmQthxb0Xzv+PHRxRSabjrWTCQSpun4eaRF1YdR1av5voajM55wTGhpF54wLTsvPC0c3sxbineFe8y0Hhc+ER6x5YDCt0o3KvymOFXhL8X2YnQWPKqnlqpjo47NtJ0VHhYeyGYKZvU86ib+RG5pQWqfzH4coswRQsOgwDoZ8oxKzUlmjX3Bsm+eDfGY8rcoYosjRVq8I6IWpGtCalL0hHwZiir3/3k6yfGxSnd/CNpeXfdzEHz7UNpz3d9T1y2dgfcFrnM1/4bkNPkt+l5NGziGwDZc3tQ04wCudqD32dJtvSx5ZXqSSfi4gK4YdN9Dx2olq+o650+wuCVPdAeHRzAk+wNrfw8JaBFXEnV+AAAACXBIWXMAAA9hAAAPYQGoP6dpAAABMUlEQVQoU6XRr0vDQRjH8akoM4iIjqGoOIZ5oIjB5XWxajaYDGLSIhhNYjcPRDSJwbQNw+L+BNGgYYo/5pT5/shz8vDlBgMPXux7z3N3z+25VOofYyCyd4ZYCavI4gXPsRp9LqiDdrEMH+8wv8Vh8gBfWclFPOEUN3hAHjlMoRa7wTzBS5xgKLFglPkZLjDic6HyDsEMNvGR2Nxifoci3tEI+X770JU0XmPXIlax+LTPh83fFox1X6kxyzdjm9UcdXi9S+Vti6svfyNULhNR9TVsYNhW6Ff9KKCNR7/Zv6eeaQ+6+qcdpu9BqGlp1HFgud+FYdzzUcUExu0Q/cdzHGEFetIlXKPjK/sbqYoOftMiS+j9jzEJPd1Wt+5+kdR/9EM9ucIC5jCbyPc01Q32kfsBppYz3hYFcCwAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 12px;\n}\ndiv.dtsp-topRow div.dtsp-subRow2 {\n  white-space: nowrap;\n  flex: 0 0 auto;\n}\ndiv.dtsp-topRow button > span {\n  display: inline-block;\n  height: 100%;\n  width: 100%;\n}\ndiv.dtsp-topRow button.dtsp-nameButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAK2SURBVFgJ7ZY9j41BFICvryCExrJBQ6HyEYVEIREaUZDQIRoR2ViJKCioxV+gkVXYTVZEQiEUhG2EQnxUCh0FKolY4ut5XnM2cyfva3Pt5m7EPcmzZ2bemTNnzjkzd1utnvQi0IvAfxiBy5z5FoxO89kPY+8mbMjtzs47RXs5/WVpbAG6bWExt5PuIibvhVkwmC+ck3eK9ln6/fAddFojYzBVuYSBpcnIEvRaqOw2RcaN18FPuJH0JvRUxbT3wWf4ltiKPgfVidWlbGZgPozDFfgAC+EA/K2EI4cwcAJ+gPaeQ+VQU2SOMMGcPgPl/m/V2p50rrbRsRgt9Iv5h6xtpP22Bz7Ce1C+gFFxfKzOmShcU+Qmyh2w3w8rIJfddHTck66EukL/xPhj+JM8rHNmFys0Pg4v0up3aFNlwR9NYyodd3OL/C64zpsymcTFcf6ElM4YzjAWKYrJkaq8kE/yUYNP4BoYvS1QRo+hNtF5xfkTUjoTheukSFFMjlTFm6PjceOca/SMpKfeCR1L6Uzk/y2WIkVhNFJlJAZhP+hYns7b9D3IPuhY5mYrIv8OrQJvR5NYyNaW4jsU8pSGNySiVx4o5tXq3JkoXE/mg5R/M8dGJCJpKhaDcjBRdbI/Rm8g69c122om33BHmj2CHoV5qa9jUXBraJ+G1fAVjIBO1klc87ro1K4JZ/K35SWW3TwcyDd6TecqnAEd8cGq2+w84xvBm1n3vS0izKkkwh5XNC/GmFPqqAtPF89AOScKuemaNzoTV1SD5dtSbmLf1/RV+tC0WTgcj6R7HEtrVGWaqu/lYDZ/2pvxQ/kIyw/gFByHC9AHw910hv1aUUumyd8yy0QfhmEkfiNod0Xusct68J1qc8Tdux0Z97Q+hsDb+AYGYEbF/4Guw2Q/qDPqZG/zXgT+3Qj8AtKnfWhFwmuAAAAAAElFTkSuQmCC\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 23px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-countButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAG5SURBVEgN3VU9LwVBFF0fiYhofUSlEQkKhU7z/oBCQkIiGr9BgUbhVzy9BAnhFyjV/AYFiU5ICM7ZN+c5Zud5dm3lJmfmzrkz9+7cu3c3y/6jjOBSF8CxXS7FmTkbwqIJjDpJvTcmsJ4K3KPZUpyZsx0sxoB9J6mnAkyC7wGuuCFIipNtEcpcWExgXpOBc78vgj6N+QO4NVsjwdFM59tUIDxDrHMBOeIQ34C5ZDregXuAQm4YcI68nN9B3wr2PcwPAIPkN2EqtJH6b+QZm1ajjTx7BqwAr26Lb+C2Kvpbt0Mb2HAJ7NrGFGfmXO3DeA4UshDfQAVmH0gaUFg852TTTDvlxwBlCtxy9zXyBhQFaq0wMmIdRebrfgosA3zb2hKnqG0oqchp4QbuR8X0TjzABhbdOT8jnQ/atcgqpnfwOA7yqZyTU587ZkIGdesLTt2EkynOnbreMUUKMI/dA4B/QVOcO13CQh+5wWCgDwo/75u59odB/wjmfhbgvACcAOyZPHihMWAoIwxyCLgf1oxfgjzVbgBXSTzIN+f0pg6s5DkcesLMRpsBrgE2XO3CN64JFP7JtUeKHX4CKtRRXFZ+7dEAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 18px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton span.dtsp-caret {\n  position: relative;\n  top: 9px;\n  display: inline-block;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton.dtsp-rotated {\n  transform: rotate(180deg);\n}\n\ndiv.dtsp-searchPane table thead th,\ndiv.dtsp-searchPane table thead td {\n  width: 100% !important;\n}\n\ndiv.dt-button-collection {\n  z-index: 2002;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsp-titleRow {\n  padding-right: 25px;\n}\n\ndiv.dtsp-columns-1 {\n  max-width: 100%;\n  min-width: 100%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-2 {\n  max-width: 49%;\n  min-width: 49%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-3 {\n  max-width: 32%;\n  min-width: 32%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-4 {\n  max-width: 24%;\n  min-width: 24%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-5 {\n  max-width: 19%;\n  min-width: 19%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-6 {\n  max-width: 16%;\n  min-width: 16%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-7 {\n  max-width: 14%;\n  min-width: 14%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-8 {\n  max-width: 12%;\n  min-width: 12%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-9 {\n  max-width: 10.5%;\n  min-width: 10.5%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-narrow {\n  flex-direction: column !important;\n}\ndiv.dtsp-narrow div.dtsp-subRow1,\ndiv.dtsp-narrow div.dtsp-subRow2 {\n  width: 100%;\n}\ndiv.dtsp-narrow div.dtsp-subRow2 button {\n  margin: 0 !important;\n  width: 25% !important;\n}\n\ndiv.dt-button-collection {\n  float: none;\n}\n\ndiv.dtsp-panesContainer {\n  margin-bottom: 1em;\n}\n\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  width: 100%;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_layout_cell {\n  padding: 0;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollHead {\n  display: none !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody {\n  background: white !important;\n  border-bottom: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody thead {\n  display: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table {\n  table-layout: fixed;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > th,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > td {\n  padding: 5px 10px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody td.dtsp-nameColumn {\n  width: 100% !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont {\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  cursor: default;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name {\n  text-overflow: ellipsis;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: middle;\n  white-space: nowrap;\n  flex-grow: 1;\n  text-align: left;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  display: inline-block;\n  background-color: #cfcfcf;\n  text-align: center;\n  border-radius: 10px;\n  width: auto;\n  min-width: 30px;\n  color: black;\n  font-size: 0.9em;\n  padding: 0 4px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill:empty {\n  display: none;\n}\n\ndiv.dtsp-panesContainer {\n  clear: both;\n  padding-left: 0;\n  padding-right: 0;\n  text-align: center;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  align-content: flex-start;\n  align-items: stretch;\n  clear: both;\n  text-align: left;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane {\n  flex-grow: 1;\n  flex-shrink: 0;\n  font-size: 0.9em;\n  margin-top: 15px !important;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper {\n  flex: 1;\n  box-sizing: border-box;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper div.dataTables_filter {\n  display: none;\n}\ndiv.dtsp-panesContainer div.dtsp-title {\n  float: left;\n  padding: 10px 0;\n}\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-collapseAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  float: right;\n  padding: 10px;\n}\n\ndiv.dtsp-hidden {\n  display: none !important;\n}\n\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  margin-left: 3px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper {\n  border: 1px solid #dbdbdb;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 1px solid #bdbdbd;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane input.dtsp-paneInputButton,\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane button.dtsp-paneButton {\n  height: 35px;\n  width: 35px;\n  padding: 0;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dtsp-searchCont {\n  margin-right: 3px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dtsp-searchCont button.dtsp-searchIcon {\n  height: 33px;\n  width: 33px;\n  margin-top: 1px;\n  margin-right: 1px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dtsp-topRow {\n  border-left: none;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dtsp-topRow input {\n  padding-left: 4px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover button.is-disabled {\n  cursor: pointer !important;\n  pointer-events: none;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover input.dtsp-paneInputButton {\n  pointer-events: none;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane span.dtsp-caret {\n  top: 7px;\n}\n\ndiv.dt-button-collection div.dtsp-panesContainer {\n  padding: 10px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/css/searchPanes.dataTables.css",
    "content": "div.dtsp-topRow {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  border: 2px solid rgba(0, 0, 0, 0);\n  border-radius: 3px;\n  justify-content: space-around;\n  align-content: flex-start;\n  align-items: flex-start;\n  min-height: 37px;\n}\ndiv.dtsp-topRow input.dtsp-search {\n  text-overflow: ellipsis;\n  min-width: 50px;\n  flex-basis: 90px;\n  max-width: none;\n}\ndiv.dtsp-topRow input.dtsp-search::placeholder {\n  color: inherit;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  flex: 1 1 auto;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont {\n  position: relative;\n  width: 100%;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont input.dtsp-disabledButton {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  background-color: transparent;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 input {\n  padding-right: 2em;\n  width: 100% !important;\n  box-sizing: border-box;\n  font-size: 1em;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAABbmlDQ1BpY2MAACiRdZE7SwNBFIU/EyWikRRaiFhsoWKhEBREO42FTZAQFYza7G5eQhKX3QQJtoKNhWAh2vgq/AfaCrYKgqAIIhb+Al+NhPVOEkiQZJbZ+3FmzmXmDHjCGTPrtAYhm8vb0bmQthxb0Xzv+PHRxRSabjrWTCQSpun4eaRF1YdR1av5voajM55wTGhpF54wLTsvPC0c3sxbineFe8y0Hhc+ER6x5YDCt0o3KvymOFXhL8X2YnQWPKqnlqpjo47NtJ0VHhYeyGYKZvU86ib+RG5pQWqfzH4coswRQsOgwDoZ8oxKzUlmjX3Bsm+eDfGY8rcoYosjRVq8I6IWpGtCalL0hHwZiir3/3k6yfGxSnd/CNpeXfdzEHz7UNpz3d9T1y2dgfcFrnM1/4bkNPkt+l5NGziGwDZc3tQ04wCudqD32dJtvSx5ZXqSSfi4gK4YdN9Dx2olq+o650+wuCVPdAeHRzAk+wNrfw8JaBFXEnV+AAAACXBIWXMAAA9hAAAPYQGoP6dpAAABMUlEQVQoU6XRr0vDQRjH8akoM4iIjqGoOIZ5oIjB5XWxajaYDGLSIhhNYjcPRDSJwbQNw+L+BNGgYYo/5pT5/shz8vDlBgMPXux7z3N3z+25VOofYyCyd4ZYCavI4gXPsRp9LqiDdrEMH+8wv8Vh8gBfWclFPOEUN3hAHjlMoRa7wTzBS5xgKLFglPkZLjDic6HyDsEMNvGR2Nxifoci3tEI+X770JU0XmPXIlax+LTPh83fFox1X6kxyzdjm9UcdXi9S+Vti6svfyNULhNR9TVsYNhW6Ff9KKCNR7/Zv6eeaQ+6+qcdpu9BqGlp1HFgud+FYdzzUcUExu0Q/cdzHGEFetIlXKPjK/sbqYoOftMiS+j9jzEJPd1Wt+5+kdR/9EM9ucIC5jCbyPc01Q32kfsBppYz3hYFcCwAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 12px;\n}\ndiv.dtsp-topRow div.dtsp-subRow2 {\n  white-space: nowrap;\n  flex: 0 0 auto;\n}\ndiv.dtsp-topRow button > span {\n  display: inline-block;\n  height: 100%;\n  width: 100%;\n}\ndiv.dtsp-topRow button.dtsp-nameButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAK2SURBVFgJ7ZY9j41BFICvryCExrJBQ6HyEYVEIREaUZDQIRoR2ViJKCioxV+gkVXYTVZEQiEUhG2EQnxUCh0FKolY4ut5XnM2cyfva3Pt5m7EPcmzZ2bemTNnzjkzd1utnvQi0IvAfxiBy5z5FoxO89kPY+8mbMjtzs47RXs5/WVpbAG6bWExt5PuIibvhVkwmC+ck3eK9ln6/fAddFojYzBVuYSBpcnIEvRaqOw2RcaN18FPuJH0JvRUxbT3wWf4ltiKPgfVidWlbGZgPozDFfgAC+EA/K2EI4cwcAJ+gPaeQ+VQU2SOMMGcPgPl/m/V2p50rrbRsRgt9Iv5h6xtpP22Bz7Ce1C+gFFxfKzOmShcU+Qmyh2w3w8rIJfddHTck66EukL/xPhj+JM8rHNmFys0Pg4v0up3aFNlwR9NYyodd3OL/C64zpsymcTFcf6ElM4YzjAWKYrJkaq8kE/yUYNP4BoYvS1QRo+hNtF5xfkTUjoTheukSFFMjlTFm6PjceOca/SMpKfeCR1L6Uzk/y2WIkVhNFJlJAZhP+hYns7b9D3IPuhY5mYrIv8OrQJvR5NYyNaW4jsU8pSGNySiVx4o5tXq3JkoXE/mg5R/M8dGJCJpKhaDcjBRdbI/Rm8g69c122om33BHmj2CHoV5qa9jUXBraJ+G1fAVjIBO1klc87ro1K4JZ/K35SWW3TwcyDd6TecqnAEd8cGq2+w84xvBm1n3vS0izKkkwh5XNC/GmFPqqAtPF89AOScKuemaNzoTV1SD5dtSbmLf1/RV+tC0WTgcj6R7HEtrVGWaqu/lYDZ/2pvxQ/kIyw/gFByHC9AHw910hv1aUUumyd8yy0QfhmEkfiNod0Xusct68J1qc8Tdux0Z97Q+hsDb+AYGYEbF/4Guw2Q/qDPqZG/zXgT+3Qj8AtKnfWhFwmuAAAAAAElFTkSuQmCC\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 23px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-countButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAG5SURBVEgN3VU9LwVBFF0fiYhofUSlEQkKhU7z/oBCQkIiGr9BgUbhVzy9BAnhFyjV/AYFiU5ICM7ZN+c5Zud5dm3lJmfmzrkz9+7cu3c3y/6jjOBSF8CxXS7FmTkbwqIJjDpJvTcmsJ4K3KPZUpyZsx0sxoB9J6mnAkyC7wGuuCFIipNtEcpcWExgXpOBc78vgj6N+QO4NVsjwdFM59tUIDxDrHMBOeIQ34C5ZDregXuAQm4YcI68nN9B3wr2PcwPAIPkN2EqtJH6b+QZm1ajjTx7BqwAr26Lb+C2Kvpbt0Mb2HAJ7NrGFGfmXO3DeA4UshDfQAVmH0gaUFg852TTTDvlxwBlCtxy9zXyBhQFaq0wMmIdRebrfgosA3zb2hKnqG0oqchp4QbuR8X0TjzABhbdOT8jnQ/atcgqpnfwOA7yqZyTU587ZkIGdesLTt2EkynOnbreMUUKMI/dA4B/QVOcO13CQh+5wWCgDwo/75u59odB/wjmfhbgvACcAOyZPHihMWAoIwxyCLgf1oxfgjzVbgBXSTzIN+f0pg6s5DkcesLMRpsBrgE2XO3CN64JFP7JtUeKHX4CKtRRXFZ+7dEAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 18px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton span.dtsp-caret {\n  position: relative;\n  top: 9px;\n  display: inline-block;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton.dtsp-rotated {\n  transform: rotate(180deg);\n}\n\ndiv.dtsp-searchPane table thead th,\ndiv.dtsp-searchPane table thead td {\n  width: 100% !important;\n}\n\ndiv.dt-button-collection {\n  z-index: 2002;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsp-titleRow {\n  padding-right: 25px;\n}\n\ndiv.dtsp-columns-1 {\n  max-width: 100%;\n  min-width: 100%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-2 {\n  max-width: 49%;\n  min-width: 49%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-3 {\n  max-width: 32%;\n  min-width: 32%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-4 {\n  max-width: 24%;\n  min-width: 24%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-5 {\n  max-width: 19%;\n  min-width: 19%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-6 {\n  max-width: 16%;\n  min-width: 16%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-7 {\n  max-width: 14%;\n  min-width: 14%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-8 {\n  max-width: 12%;\n  min-width: 12%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-9 {\n  max-width: 10.5%;\n  min-width: 10.5%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-narrow {\n  flex-direction: column !important;\n}\ndiv.dtsp-narrow div.dtsp-subRow1,\ndiv.dtsp-narrow div.dtsp-subRow2 {\n  width: 100%;\n}\ndiv.dtsp-narrow div.dtsp-subRow2 button {\n  margin: 0 !important;\n  width: 25% !important;\n}\n\ndiv.dt-button-collection {\n  float: none;\n}\n\ndiv.dtsp-panesContainer {\n  margin-bottom: 1em;\n}\n\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  width: 100%;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_layout_cell {\n  padding: 0;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollHead {\n  display: none !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody {\n  background: white !important;\n  border-bottom: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody thead {\n  display: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table {\n  table-layout: fixed;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > th,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > td {\n  padding: 5px 10px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody td.dtsp-nameColumn {\n  width: 100% !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont {\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  cursor: default;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name {\n  text-overflow: ellipsis;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: middle;\n  white-space: nowrap;\n  flex-grow: 1;\n  text-align: left;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  display: inline-block;\n  background-color: #cfcfcf;\n  text-align: center;\n  border-radius: 10px;\n  width: auto;\n  min-width: 30px;\n  color: black;\n  font-size: 0.9em;\n  padding: 0 4px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill:empty {\n  display: none;\n}\n\ndiv.dtsp-panesContainer {\n  clear: both;\n  padding-left: 0;\n  padding-right: 0;\n  text-align: center;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  align-content: flex-start;\n  align-items: stretch;\n  clear: both;\n  text-align: left;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane {\n  flex-grow: 1;\n  flex-shrink: 0;\n  font-size: 0.9em;\n  margin-top: 15px !important;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper {\n  flex: 1;\n  box-sizing: border-box;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper div.dataTables_filter {\n  display: none;\n}\ndiv.dtsp-panesContainer div.dtsp-title {\n  float: left;\n  padding: 10px 0;\n}\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-collapseAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  float: right;\n  padding: 10px;\n}\n\ndiv.dtsp-hidden {\n  display: none !important;\n}\n\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  border: 1px solid #f0f0f0;\n  border-radius: 4px;\n  overflow: hidden;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 1px solid #cfcfcf;\n}\ndiv.dtsp-searchPane div.dtsp-topRow {\n  border: 1px solid transparent;\n}\ndiv.dtsp-searchPane div.dtsp-topRow div.dtsp-searchCont input.dtsp-search {\n  border: none;\n  padding-left: 3px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow.dtsp-bordered {\n  border: 1px solid #f0f0f0;\n  border-radius: 3px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover {\n  background-color: #f0f0f0;\n}\ndiv.dtsp-searchPane input.dtsp-paneInputButton,\ndiv.dtsp-searchPane button.dtsp-paneButton {\n  height: 35px;\n  width: 35px;\n  min-width: 0;\n  display: inline-block;\n  margin: 2px;\n  border: 0px solid transparent;\n  background-color: transparent;\n  margin-bottom: 0px;\n}\ndiv.dtsp-searchPane input.dtsp-paneInputButton:hover,\ndiv.dtsp-searchPane button.dtsp-paneButton:hover {\n  background-color: #f0f0f0;\n  border-radius: 2px;\n  cursor: pointer;\n}\ndiv.dtsp-searchPane button.dtsp-paneButton {\n  vertical-align: middle;\n  opacity: 0.6;\n}\n\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-collapseAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  border: 1px solid transparent;\n  background-color: transparent;\n}\ndiv.dtsp-panesContainer button.dtsp-clearAll:hover,\ndiv.dtsp-panesContainer button.dtsp-collapseAll:hover,\ndiv.dtsp-panesContainer button.dtsp-showAll:hover {\n  background-color: #f0f0f0;\n  border-radius: 2px;\n  cursor: pointer;\n}\ndiv.dtsp-panesContainer button.dtsp-disabledButton {\n  cursor: default !important;\n  color: rgb(124, 124, 124);\n}\ndiv.dtsp-panesContainer button.dtsp-disabledButton:hover {\n  background-color: transparent;\n}\ndiv.dtsp-panesContainer button.dtsp-disabledButton:focus {\n  outline: none;\n}\n\n@media screen and (max-width: 767px) {\n  div.dtsp-columns-4,\n  div.dtsp-columns-5,\n  div.dtsp-columns-6 {\n    max-width: 31% !important;\n    min-width: 31% !important;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dtsp-searchPanes {\n    flex-direction: column !important;\n  }\n  div.dtsp-searchPane {\n    max-width: 98% !important;\n    min-width: 98% !important;\n  }\n}\nhtml.dark div.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon span {\n  filter: invert();\n}\nhtml.dark div.dtsp-topRow button.dtsp-nameButton span {\n  filter: invert();\n}\nhtml.dark div.dtsp-topRow button.dtsp-countButton span {\n  filter: invert();\n}\nhtml.dark div.dtsp-topRow input.dtsp-paneInputButton,\nhtml.dark div.dtsp-topRow button.dtsp-paneButton {\n  color: inherit;\n}\nhtml.dark div.dtsp-topRow input.dtsp-paneInputButton:hover,\nhtml.dark div.dtsp-topRow button.dtsp-paneButton:hover {\n  background-color: rgb(64, 69, 73);\n}\nhtml.dark div.dtsp-topRow.dtsp-bordered {\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  background: rgb(47, 52, 56) !important;\n}\nhtml.dark div.dtsp-topRow.dtsp-bordered:hover {\n  border: 1px solid rgba(255, 255, 255, 0.3);\n}\nhtml.dark div.dtsp-panesContainer button.dtsp-clearAll,\nhtml.dark div.dtsp-panesContainer button.dtsp-collapseAll,\nhtml.dark div.dtsp-panesContainer button.dtsp-showAll {\n  color: inherit;\n}\nhtml.dark div.dtsp-panesContainer button.dtsp-clearAll:hover,\nhtml.dark div.dtsp-panesContainer button.dtsp-collapseAll:hover,\nhtml.dark div.dtsp-panesContainer button.dtsp-showAll:hover {\n  background-color: rgb(64, 69, 73);\n}\nhtml.dark div.dtsp-panesContainer button.dtsp-disabledButton {\n  color: rgb(124, 124, 124);\n}\nhtml.dark div.dtsp-searchPane div.dataTables_wrapper {\n  border: 1px solid rgba(255, 255, 255, 0.2);\n}\nhtml.dark div.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 1px solid rgba(255, 255, 255, 0.3);\n}\nhtml.dark div.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody {\n  background: rgb(47, 52, 56) !important;\n}\nhtml.dark div.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  background-color: rgb(33, 37, 41);\n  color: inherit;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/css/searchPanes.foundation.css",
    "content": "div.dtsp-topRow {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  border: 2px solid rgba(0, 0, 0, 0);\n  border-radius: 3px;\n  justify-content: space-around;\n  align-content: flex-start;\n  align-items: flex-start;\n  min-height: 37px;\n}\ndiv.dtsp-topRow input.dtsp-search {\n  text-overflow: ellipsis;\n  min-width: 50px;\n  flex-basis: 90px;\n  max-width: none;\n}\ndiv.dtsp-topRow input.dtsp-search::placeholder {\n  color: inherit;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  flex: 1 1 auto;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont {\n  position: relative;\n  width: 100%;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont input.dtsp-disabledButton {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  background-color: transparent;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 input {\n  padding-right: 2em;\n  width: 100% !important;\n  box-sizing: border-box;\n  font-size: 1em;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAABbmlDQ1BpY2MAACiRdZE7SwNBFIU/EyWikRRaiFhsoWKhEBREO42FTZAQFYza7G5eQhKX3QQJtoKNhWAh2vgq/AfaCrYKgqAIIhb+Al+NhPVOEkiQZJbZ+3FmzmXmDHjCGTPrtAYhm8vb0bmQthxb0Xzv+PHRxRSabjrWTCQSpun4eaRF1YdR1av5voajM55wTGhpF54wLTsvPC0c3sxbineFe8y0Hhc+ER6x5YDCt0o3KvymOFXhL8X2YnQWPKqnlqpjo47NtJ0VHhYeyGYKZvU86ib+RG5pQWqfzH4coswRQsOgwDoZ8oxKzUlmjX3Bsm+eDfGY8rcoYosjRVq8I6IWpGtCalL0hHwZiir3/3k6yfGxSnd/CNpeXfdzEHz7UNpz3d9T1y2dgfcFrnM1/4bkNPkt+l5NGziGwDZc3tQ04wCudqD32dJtvSx5ZXqSSfi4gK4YdN9Dx2olq+o650+wuCVPdAeHRzAk+wNrfw8JaBFXEnV+AAAACXBIWXMAAA9hAAAPYQGoP6dpAAABMUlEQVQoU6XRr0vDQRjH8akoM4iIjqGoOIZ5oIjB5XWxajaYDGLSIhhNYjcPRDSJwbQNw+L+BNGgYYo/5pT5/shz8vDlBgMPXux7z3N3z+25VOofYyCyd4ZYCavI4gXPsRp9LqiDdrEMH+8wv8Vh8gBfWclFPOEUN3hAHjlMoRa7wTzBS5xgKLFglPkZLjDic6HyDsEMNvGR2Nxifoci3tEI+X770JU0XmPXIlax+LTPh83fFox1X6kxyzdjm9UcdXi9S+Vti6svfyNULhNR9TVsYNhW6Ff9KKCNR7/Zv6eeaQ+6+qcdpu9BqGlp1HFgud+FYdzzUcUExu0Q/cdzHGEFetIlXKPjK/sbqYoOftMiS+j9jzEJPd1Wt+5+kdR/9EM9ucIC5jCbyPc01Q32kfsBppYz3hYFcCwAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 12px;\n}\ndiv.dtsp-topRow div.dtsp-subRow2 {\n  white-space: nowrap;\n  flex: 0 0 auto;\n}\ndiv.dtsp-topRow button > span {\n  display: inline-block;\n  height: 100%;\n  width: 100%;\n}\ndiv.dtsp-topRow button.dtsp-nameButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAK2SURBVFgJ7ZY9j41BFICvryCExrJBQ6HyEYVEIREaUZDQIRoR2ViJKCioxV+gkVXYTVZEQiEUhG2EQnxUCh0FKolY4ut5XnM2cyfva3Pt5m7EPcmzZ2bemTNnzjkzd1utnvQi0IvAfxiBy5z5FoxO89kPY+8mbMjtzs47RXs5/WVpbAG6bWExt5PuIibvhVkwmC+ck3eK9ln6/fAddFojYzBVuYSBpcnIEvRaqOw2RcaN18FPuJH0JvRUxbT3wWf4ltiKPgfVidWlbGZgPozDFfgAC+EA/K2EI4cwcAJ+gPaeQ+VQU2SOMMGcPgPl/m/V2p50rrbRsRgt9Iv5h6xtpP22Bz7Ce1C+gFFxfKzOmShcU+Qmyh2w3w8rIJfddHTck66EukL/xPhj+JM8rHNmFys0Pg4v0up3aFNlwR9NYyodd3OL/C64zpsymcTFcf6ElM4YzjAWKYrJkaq8kE/yUYNP4BoYvS1QRo+hNtF5xfkTUjoTheukSFFMjlTFm6PjceOca/SMpKfeCR1L6Uzk/y2WIkVhNFJlJAZhP+hYns7b9D3IPuhY5mYrIv8OrQJvR5NYyNaW4jsU8pSGNySiVx4o5tXq3JkoXE/mg5R/M8dGJCJpKhaDcjBRdbI/Rm8g69c122om33BHmj2CHoV5qa9jUXBraJ+G1fAVjIBO1klc87ro1K4JZ/K35SWW3TwcyDd6TecqnAEd8cGq2+w84xvBm1n3vS0izKkkwh5XNC/GmFPqqAtPF89AOScKuemaNzoTV1SD5dtSbmLf1/RV+tC0WTgcj6R7HEtrVGWaqu/lYDZ/2pvxQ/kIyw/gFByHC9AHw910hv1aUUumyd8yy0QfhmEkfiNod0Xusct68J1qc8Tdux0Z97Q+hsDb+AYGYEbF/4Guw2Q/qDPqZG/zXgT+3Qj8AtKnfWhFwmuAAAAAAElFTkSuQmCC\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 23px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-countButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAG5SURBVEgN3VU9LwVBFF0fiYhofUSlEQkKhU7z/oBCQkIiGr9BgUbhVzy9BAnhFyjV/AYFiU5ICM7ZN+c5Zud5dm3lJmfmzrkz9+7cu3c3y/6jjOBSF8CxXS7FmTkbwqIJjDpJvTcmsJ4K3KPZUpyZsx0sxoB9J6mnAkyC7wGuuCFIipNtEcpcWExgXpOBc78vgj6N+QO4NVsjwdFM59tUIDxDrHMBOeIQ34C5ZDregXuAQm4YcI68nN9B3wr2PcwPAIPkN2EqtJH6b+QZm1ajjTx7BqwAr26Lb+C2Kvpbt0Mb2HAJ7NrGFGfmXO3DeA4UshDfQAVmH0gaUFg852TTTDvlxwBlCtxy9zXyBhQFaq0wMmIdRebrfgosA3zb2hKnqG0oqchp4QbuR8X0TjzABhbdOT8jnQ/atcgqpnfwOA7yqZyTU587ZkIGdesLTt2EkynOnbreMUUKMI/dA4B/QVOcO13CQh+5wWCgDwo/75u59odB/wjmfhbgvACcAOyZPHihMWAoIwxyCLgf1oxfgjzVbgBXSTzIN+f0pg6s5DkcesLMRpsBrgE2XO3CN64JFP7JtUeKHX4CKtRRXFZ+7dEAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 18px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton span.dtsp-caret {\n  position: relative;\n  top: 9px;\n  display: inline-block;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton.dtsp-rotated {\n  transform: rotate(180deg);\n}\n\ndiv.dtsp-searchPane table thead th,\ndiv.dtsp-searchPane table thead td {\n  width: 100% !important;\n}\n\ndiv.dt-button-collection {\n  z-index: 2002;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsp-titleRow {\n  padding-right: 25px;\n}\n\ndiv.dtsp-columns-1 {\n  max-width: 100%;\n  min-width: 100%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-2 {\n  max-width: 49%;\n  min-width: 49%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-3 {\n  max-width: 32%;\n  min-width: 32%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-4 {\n  max-width: 24%;\n  min-width: 24%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-5 {\n  max-width: 19%;\n  min-width: 19%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-6 {\n  max-width: 16%;\n  min-width: 16%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-7 {\n  max-width: 14%;\n  min-width: 14%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-8 {\n  max-width: 12%;\n  min-width: 12%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-9 {\n  max-width: 10.5%;\n  min-width: 10.5%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-narrow {\n  flex-direction: column !important;\n}\ndiv.dtsp-narrow div.dtsp-subRow1,\ndiv.dtsp-narrow div.dtsp-subRow2 {\n  width: 100%;\n}\ndiv.dtsp-narrow div.dtsp-subRow2 button {\n  margin: 0 !important;\n  width: 25% !important;\n}\n\ndiv.dt-button-collection {\n  float: none;\n}\n\ndiv.dtsp-panesContainer {\n  margin-bottom: 1em;\n}\n\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  width: 100%;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_layout_cell {\n  padding: 0;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollHead {\n  display: none !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody {\n  background: white !important;\n  border-bottom: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody thead {\n  display: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table {\n  table-layout: fixed;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > th,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > td {\n  padding: 5px 10px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody td.dtsp-nameColumn {\n  width: 100% !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont {\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  cursor: default;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name {\n  text-overflow: ellipsis;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: middle;\n  white-space: nowrap;\n  flex-grow: 1;\n  text-align: left;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  display: inline-block;\n  background-color: #cfcfcf;\n  text-align: center;\n  border-radius: 10px;\n  width: auto;\n  min-width: 30px;\n  color: black;\n  font-size: 0.9em;\n  padding: 0 4px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill:empty {\n  display: none;\n}\n\ndiv.dtsp-panesContainer {\n  clear: both;\n  padding-left: 0;\n  padding-right: 0;\n  text-align: center;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  align-content: flex-start;\n  align-items: stretch;\n  clear: both;\n  text-align: left;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane {\n  flex-grow: 1;\n  flex-shrink: 0;\n  font-size: 0.9em;\n  margin-top: 15px !important;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper {\n  flex: 1;\n  box-sizing: border-box;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper div.dataTables_filter {\n  display: none;\n}\ndiv.dtsp-panesContainer div.dtsp-title {\n  float: left;\n  padding: 10px 0;\n}\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-collapseAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  float: right;\n  padding: 10px;\n}\n\ndiv.dtsp-hidden {\n  display: none !important;\n}\n\nbutton.dtsp-clearAll,\nbutton.dtsp-showAll {\n  margin-left: 3px;\n}\n\nbutton.dtsp-collapseAll {\n  margin-right: 1px !important;\n}\n\ndiv.dt-button-collection div.dtsp-panesContainer {\n  width: 100%;\n  padding: 10px;\n}\n\ndiv.dtsp-searchPane div.dtsp-title button {\n  margin-bottom: 0;\n}\ndiv.dtsp-searchPane div.dtsp-topRow {\n  margin: 0.5em 0;\n}\ndiv.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow2 {\n  margin-left: 0.5em;\n}\ndiv.dtsp-searchPane div.dtsp-topRow input {\n  min-height: 40px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow .button-group {\n  margin-bottom: 0;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button {\n  width: 35px;\n  margin-bottom: 0;\n  padding: 0;\n  line-height: 38px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-searchIcon {\n  height: 40px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-collapseButton span {\n  right: 1px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-collapseButton span.dtsp-caret {\n  top: 3px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-searchIcon span {\n  filter: invert();\n}\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-nameButton span {\n  filter: invert();\n}\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-countButton span {\n  filter: invert();\n}\ndiv.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover button.disabled {\n  cursor: pointer !important;\n  pointer-events: none;\n}\ndiv.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover input.dtsp-paneInputButton {\n  pointer-events: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  border: 2px #f0f0f0 solid;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 2px solid #cfcfcf !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dtsp-nameCont span.badge {\n  min-width: 30px;\n  line-height: 1.25em;\n  margin-top: 2.5px;\n  border-radius: 9px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dtsp-nameCont span.badge:empty {\n  display: none;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/css/searchPanes.jqueryui.css",
    "content": "div.dtsp-topRow {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  border: 2px solid rgba(0, 0, 0, 0);\n  border-radius: 3px;\n  justify-content: space-around;\n  align-content: flex-start;\n  align-items: flex-start;\n  min-height: 37px;\n}\ndiv.dtsp-topRow input.dtsp-search {\n  text-overflow: ellipsis;\n  min-width: 50px;\n  flex-basis: 90px;\n  max-width: none;\n}\ndiv.dtsp-topRow input.dtsp-search::placeholder {\n  color: inherit;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  flex: 1 1 auto;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont {\n  position: relative;\n  width: 100%;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont input.dtsp-disabledButton {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  background-color: transparent;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 input {\n  padding-right: 2em;\n  width: 100% !important;\n  box-sizing: border-box;\n  font-size: 1em;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAABbmlDQ1BpY2MAACiRdZE7SwNBFIU/EyWikRRaiFhsoWKhEBREO42FTZAQFYza7G5eQhKX3QQJtoKNhWAh2vgq/AfaCrYKgqAIIhb+Al+NhPVOEkiQZJbZ+3FmzmXmDHjCGTPrtAYhm8vb0bmQthxb0Xzv+PHRxRSabjrWTCQSpun4eaRF1YdR1av5voajM55wTGhpF54wLTsvPC0c3sxbineFe8y0Hhc+ER6x5YDCt0o3KvymOFXhL8X2YnQWPKqnlqpjo47NtJ0VHhYeyGYKZvU86ib+RG5pQWqfzH4coswRQsOgwDoZ8oxKzUlmjX3Bsm+eDfGY8rcoYosjRVq8I6IWpGtCalL0hHwZiir3/3k6yfGxSnd/CNpeXfdzEHz7UNpz3d9T1y2dgfcFrnM1/4bkNPkt+l5NGziGwDZc3tQ04wCudqD32dJtvSx5ZXqSSfi4gK4YdN9Dx2olq+o650+wuCVPdAeHRzAk+wNrfw8JaBFXEnV+AAAACXBIWXMAAA9hAAAPYQGoP6dpAAABMUlEQVQoU6XRr0vDQRjH8akoM4iIjqGoOIZ5oIjB5XWxajaYDGLSIhhNYjcPRDSJwbQNw+L+BNGgYYo/5pT5/shz8vDlBgMPXux7z3N3z+25VOofYyCyd4ZYCavI4gXPsRp9LqiDdrEMH+8wv8Vh8gBfWclFPOEUN3hAHjlMoRa7wTzBS5xgKLFglPkZLjDic6HyDsEMNvGR2Nxifoci3tEI+X770JU0XmPXIlax+LTPh83fFox1X6kxyzdjm9UcdXi9S+Vti6svfyNULhNR9TVsYNhW6Ff9KKCNR7/Zv6eeaQ+6+qcdpu9BqGlp1HFgud+FYdzzUcUExu0Q/cdzHGEFetIlXKPjK/sbqYoOftMiS+j9jzEJPd1Wt+5+kdR/9EM9ucIC5jCbyPc01Q32kfsBppYz3hYFcCwAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 12px;\n}\ndiv.dtsp-topRow div.dtsp-subRow2 {\n  white-space: nowrap;\n  flex: 0 0 auto;\n}\ndiv.dtsp-topRow button > span {\n  display: inline-block;\n  height: 100%;\n  width: 100%;\n}\ndiv.dtsp-topRow button.dtsp-nameButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAK2SURBVFgJ7ZY9j41BFICvryCExrJBQ6HyEYVEIREaUZDQIRoR2ViJKCioxV+gkVXYTVZEQiEUhG2EQnxUCh0FKolY4ut5XnM2cyfva3Pt5m7EPcmzZ2bemTNnzjkzd1utnvQi0IvAfxiBy5z5FoxO89kPY+8mbMjtzs47RXs5/WVpbAG6bWExt5PuIibvhVkwmC+ck3eK9ln6/fAddFojYzBVuYSBpcnIEvRaqOw2RcaN18FPuJH0JvRUxbT3wWf4ltiKPgfVidWlbGZgPozDFfgAC+EA/K2EI4cwcAJ+gPaeQ+VQU2SOMMGcPgPl/m/V2p50rrbRsRgt9Iv5h6xtpP22Bz7Ce1C+gFFxfKzOmShcU+Qmyh2w3w8rIJfddHTck66EukL/xPhj+JM8rHNmFys0Pg4v0up3aFNlwR9NYyodd3OL/C64zpsymcTFcf6ElM4YzjAWKYrJkaq8kE/yUYNP4BoYvS1QRo+hNtF5xfkTUjoTheukSFFMjlTFm6PjceOca/SMpKfeCR1L6Uzk/y2WIkVhNFJlJAZhP+hYns7b9D3IPuhY5mYrIv8OrQJvR5NYyNaW4jsU8pSGNySiVx4o5tXq3JkoXE/mg5R/M8dGJCJpKhaDcjBRdbI/Rm8g69c122om33BHmj2CHoV5qa9jUXBraJ+G1fAVjIBO1klc87ro1K4JZ/K35SWW3TwcyDd6TecqnAEd8cGq2+w84xvBm1n3vS0izKkkwh5XNC/GmFPqqAtPF89AOScKuemaNzoTV1SD5dtSbmLf1/RV+tC0WTgcj6R7HEtrVGWaqu/lYDZ/2pvxQ/kIyw/gFByHC9AHw910hv1aUUumyd8yy0QfhmEkfiNod0Xusct68J1qc8Tdux0Z97Q+hsDb+AYGYEbF/4Guw2Q/qDPqZG/zXgT+3Qj8AtKnfWhFwmuAAAAAAElFTkSuQmCC\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 23px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-countButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAG5SURBVEgN3VU9LwVBFF0fiYhofUSlEQkKhU7z/oBCQkIiGr9BgUbhVzy9BAnhFyjV/AYFiU5ICM7ZN+c5Zud5dm3lJmfmzrkz9+7cu3c3y/6jjOBSF8CxXS7FmTkbwqIJjDpJvTcmsJ4K3KPZUpyZsx0sxoB9J6mnAkyC7wGuuCFIipNtEcpcWExgXpOBc78vgj6N+QO4NVsjwdFM59tUIDxDrHMBOeIQ34C5ZDregXuAQm4YcI68nN9B3wr2PcwPAIPkN2EqtJH6b+QZm1ajjTx7BqwAr26Lb+C2Kvpbt0Mb2HAJ7NrGFGfmXO3DeA4UshDfQAVmH0gaUFg852TTTDvlxwBlCtxy9zXyBhQFaq0wMmIdRebrfgosA3zb2hKnqG0oqchp4QbuR8X0TjzABhbdOT8jnQ/atcgqpnfwOA7yqZyTU587ZkIGdesLTt2EkynOnbreMUUKMI/dA4B/QVOcO13CQh+5wWCgDwo/75u59odB/wjmfhbgvACcAOyZPHihMWAoIwxyCLgf1oxfgjzVbgBXSTzIN+f0pg6s5DkcesLMRpsBrgE2XO3CN64JFP7JtUeKHX4CKtRRXFZ+7dEAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 18px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton span.dtsp-caret {\n  position: relative;\n  top: 9px;\n  display: inline-block;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton.dtsp-rotated {\n  transform: rotate(180deg);\n}\n\ndiv.dtsp-searchPane table thead th,\ndiv.dtsp-searchPane table thead td {\n  width: 100% !important;\n}\n\ndiv.dt-button-collection {\n  z-index: 2002;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsp-titleRow {\n  padding-right: 25px;\n}\n\ndiv.dtsp-columns-1 {\n  max-width: 100%;\n  min-width: 100%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-2 {\n  max-width: 49%;\n  min-width: 49%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-3 {\n  max-width: 32%;\n  min-width: 32%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-4 {\n  max-width: 24%;\n  min-width: 24%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-5 {\n  max-width: 19%;\n  min-width: 19%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-6 {\n  max-width: 16%;\n  min-width: 16%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-7 {\n  max-width: 14%;\n  min-width: 14%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-8 {\n  max-width: 12%;\n  min-width: 12%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-9 {\n  max-width: 10.5%;\n  min-width: 10.5%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-narrow {\n  flex-direction: column !important;\n}\ndiv.dtsp-narrow div.dtsp-subRow1,\ndiv.dtsp-narrow div.dtsp-subRow2 {\n  width: 100%;\n}\ndiv.dtsp-narrow div.dtsp-subRow2 button {\n  margin: 0 !important;\n  width: 25% !important;\n}\n\ndiv.dt-button-collection {\n  float: none;\n}\n\ndiv.dtsp-panesContainer {\n  margin-bottom: 1em;\n}\n\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  width: 100%;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_layout_cell {\n  padding: 0;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollHead {\n  display: none !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody {\n  background: white !important;\n  border-bottom: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody thead {\n  display: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table {\n  table-layout: fixed;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > th,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > td {\n  padding: 5px 10px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody td.dtsp-nameColumn {\n  width: 100% !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont {\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  cursor: default;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name {\n  text-overflow: ellipsis;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: middle;\n  white-space: nowrap;\n  flex-grow: 1;\n  text-align: left;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  display: inline-block;\n  background-color: #cfcfcf;\n  text-align: center;\n  border-radius: 10px;\n  width: auto;\n  min-width: 30px;\n  color: black;\n  font-size: 0.9em;\n  padding: 0 4px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill:empty {\n  display: none;\n}\n\ndiv.dtsp-panesContainer {\n  clear: both;\n  padding-left: 0;\n  padding-right: 0;\n  text-align: center;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  align-content: flex-start;\n  align-items: stretch;\n  clear: both;\n  text-align: left;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane {\n  flex-grow: 1;\n  flex-shrink: 0;\n  font-size: 0.9em;\n  margin-top: 15px !important;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper {\n  flex: 1;\n  box-sizing: border-box;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper div.dataTables_filter {\n  display: none;\n}\ndiv.dtsp-panesContainer div.dtsp-title {\n  float: left;\n  padding: 10px 0;\n}\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-collapseAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  float: right;\n  padding: 10px;\n}\n\ndiv.dtsp-hidden {\n  display: none !important;\n}\n\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  border: 1px solid #f0f0f0;\n  border-radius: 4px;\n  overflow: hidden;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 1px solid #cfcfcf;\n}\ndiv.dtsp-searchPane div.dtsp-topRow {\n  border: 1px solid transparent;\n}\ndiv.dtsp-searchPane div.dtsp-topRow div.dtsp-searchCont input.dtsp-search {\n  border: none;\n  padding-left: 3px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow.dtsp-bordered {\n  border: 1px solid #f0f0f0;\n  border-radius: 3px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover {\n  background-color: #f0f0f0;\n}\ndiv.dtsp-searchPane input.dtsp-paneInputButton,\ndiv.dtsp-searchPane button.dtsp-paneButton {\n  height: 35px;\n  width: 35px;\n  min-width: 0;\n  display: inline-block;\n  margin: 2px;\n  border: 0px solid transparent;\n  background-color: transparent;\n  margin-bottom: 0px;\n}\ndiv.dtsp-searchPane input.dtsp-paneInputButton:hover,\ndiv.dtsp-searchPane button.dtsp-paneButton:hover {\n  background-color: #f0f0f0;\n  border-radius: 2px;\n  cursor: pointer;\n}\ndiv.dtsp-searchPane button.dtsp-paneButton {\n  vertical-align: middle;\n  opacity: 0.6;\n}\n\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-collapseAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  border: 1px solid transparent;\n  background-color: transparent;\n}\ndiv.dtsp-panesContainer button.dtsp-clearAll:hover,\ndiv.dtsp-panesContainer button.dtsp-collapseAll:hover,\ndiv.dtsp-panesContainer button.dtsp-showAll:hover {\n  background-color: #f0f0f0;\n  border-radius: 2px;\n  cursor: pointer;\n}\ndiv.dtsp-panesContainer button.dtsp-disabledButton {\n  cursor: default !important;\n  color: rgb(124, 124, 124);\n}\ndiv.dtsp-panesContainer button.dtsp-disabledButton:hover {\n  background-color: transparent;\n}\ndiv.dtsp-panesContainer button.dtsp-disabledButton:focus {\n  outline: none;\n}\n\n@media screen and (max-width: 767px) {\n  div.dtsp-columns-4,\n  div.dtsp-columns-5,\n  div.dtsp-columns-6 {\n    max-width: 31% !important;\n    min-width: 31% !important;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dtsp-searchPanes {\n    flex-direction: column !important;\n  }\n  div.dtsp-searchPane {\n    max-width: 98% !important;\n    min-width: 98% !important;\n  }\n}\nhtml.dark div.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon span {\n  filter: invert();\n}\nhtml.dark div.dtsp-topRow button.dtsp-nameButton span {\n  filter: invert();\n}\nhtml.dark div.dtsp-topRow button.dtsp-countButton span {\n  filter: invert();\n}\nhtml.dark div.dtsp-topRow input.dtsp-paneInputButton,\nhtml.dark div.dtsp-topRow button.dtsp-paneButton {\n  color: inherit;\n}\nhtml.dark div.dtsp-topRow input.dtsp-paneInputButton:hover,\nhtml.dark div.dtsp-topRow button.dtsp-paneButton:hover {\n  background-color: rgb(64, 69, 73);\n}\nhtml.dark div.dtsp-topRow.dtsp-bordered {\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  background: rgb(47, 52, 56) !important;\n}\nhtml.dark div.dtsp-topRow.dtsp-bordered:hover {\n  border: 1px solid rgba(255, 255, 255, 0.3);\n}\nhtml.dark div.dtsp-panesContainer button.dtsp-clearAll,\nhtml.dark div.dtsp-panesContainer button.dtsp-collapseAll,\nhtml.dark div.dtsp-panesContainer button.dtsp-showAll {\n  color: inherit;\n}\nhtml.dark div.dtsp-panesContainer button.dtsp-clearAll:hover,\nhtml.dark div.dtsp-panesContainer button.dtsp-collapseAll:hover,\nhtml.dark div.dtsp-panesContainer button.dtsp-showAll:hover {\n  background-color: rgb(64, 69, 73);\n}\nhtml.dark div.dtsp-panesContainer button.dtsp-disabledButton {\n  color: rgb(124, 124, 124);\n}\nhtml.dark div.dtsp-searchPane div.dataTables_wrapper {\n  border: 1px solid rgba(255, 255, 255, 0.2);\n}\nhtml.dark div.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 1px solid rgba(255, 255, 255, 0.3);\n}\nhtml.dark div.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody {\n  background: rgb(47, 52, 56) !important;\n}\nhtml.dark div.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  background-color: rgb(33, 37, 41);\n  color: inherit;\n}\n\ndiv.dtsp-searchPane button.dtsp-paneButton {\n  padding: 0;\n}\ndiv.dtsp-searchPane input.dtsp-disabledButton {\n  cursor: default !important;\n}\ndiv.dtsp-searchPane input.dtsp-disabledButton:hover {\n  cursor: default !important;\n}\ndiv.dtsp-searchPane div.dataTables_scrollBody {\n  text-align: left;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  border: 1px solid #c5c5c5 !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 1px solid #aaa !important;\n}\ndiv.dtsp-searchPane div.dtsp-topRow.dtsp-bordered {\n  border: 1px solid #aaa;\n  border-radius: 3px;\n}\n\ndiv.dt-button-collection div.dtsp-panesContainer {\n  background: transparent;\n  border: none;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/css/searchPanes.semanticui.css",
    "content": "div.dtsp-topRow {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  border: 2px solid rgba(0, 0, 0, 0);\n  border-radius: 3px;\n  justify-content: space-around;\n  align-content: flex-start;\n  align-items: flex-start;\n  min-height: 37px;\n}\ndiv.dtsp-topRow input.dtsp-search {\n  text-overflow: ellipsis;\n  min-width: 50px;\n  flex-basis: 90px;\n  max-width: none;\n}\ndiv.dtsp-topRow input.dtsp-search::placeholder {\n  color: inherit;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  flex: 1 1 auto;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont {\n  position: relative;\n  width: 100%;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont input.dtsp-disabledButton {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  background-color: transparent;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 input {\n  padding-right: 2em;\n  width: 100% !important;\n  box-sizing: border-box;\n  font-size: 1em;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAABbmlDQ1BpY2MAACiRdZE7SwNBFIU/EyWikRRaiFhsoWKhEBREO42FTZAQFYza7G5eQhKX3QQJtoKNhWAh2vgq/AfaCrYKgqAIIhb+Al+NhPVOEkiQZJbZ+3FmzmXmDHjCGTPrtAYhm8vb0bmQthxb0Xzv+PHRxRSabjrWTCQSpun4eaRF1YdR1av5voajM55wTGhpF54wLTsvPC0c3sxbineFe8y0Hhc+ER6x5YDCt0o3KvymOFXhL8X2YnQWPKqnlqpjo47NtJ0VHhYeyGYKZvU86ib+RG5pQWqfzH4coswRQsOgwDoZ8oxKzUlmjX3Bsm+eDfGY8rcoYosjRVq8I6IWpGtCalL0hHwZiir3/3k6yfGxSnd/CNpeXfdzEHz7UNpz3d9T1y2dgfcFrnM1/4bkNPkt+l5NGziGwDZc3tQ04wCudqD32dJtvSx5ZXqSSfi4gK4YdN9Dx2olq+o650+wuCVPdAeHRzAk+wNrfw8JaBFXEnV+AAAACXBIWXMAAA9hAAAPYQGoP6dpAAABMUlEQVQoU6XRr0vDQRjH8akoM4iIjqGoOIZ5oIjB5XWxajaYDGLSIhhNYjcPRDSJwbQNw+L+BNGgYYo/5pT5/shz8vDlBgMPXux7z3N3z+25VOofYyCyd4ZYCavI4gXPsRp9LqiDdrEMH+8wv8Vh8gBfWclFPOEUN3hAHjlMoRa7wTzBS5xgKLFglPkZLjDic6HyDsEMNvGR2Nxifoci3tEI+X770JU0XmPXIlax+LTPh83fFox1X6kxyzdjm9UcdXi9S+Vti6svfyNULhNR9TVsYNhW6Ff9KKCNR7/Zv6eeaQ+6+qcdpu9BqGlp1HFgud+FYdzzUcUExu0Q/cdzHGEFetIlXKPjK/sbqYoOftMiS+j9jzEJPd1Wt+5+kdR/9EM9ucIC5jCbyPc01Q32kfsBppYz3hYFcCwAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 12px;\n}\ndiv.dtsp-topRow div.dtsp-subRow2 {\n  white-space: nowrap;\n  flex: 0 0 auto;\n}\ndiv.dtsp-topRow button > span {\n  display: inline-block;\n  height: 100%;\n  width: 100%;\n}\ndiv.dtsp-topRow button.dtsp-nameButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAK2SURBVFgJ7ZY9j41BFICvryCExrJBQ6HyEYVEIREaUZDQIRoR2ViJKCioxV+gkVXYTVZEQiEUhG2EQnxUCh0FKolY4ut5XnM2cyfva3Pt5m7EPcmzZ2bemTNnzjkzd1utnvQi0IvAfxiBy5z5FoxO89kPY+8mbMjtzs47RXs5/WVpbAG6bWExt5PuIibvhVkwmC+ck3eK9ln6/fAddFojYzBVuYSBpcnIEvRaqOw2RcaN18FPuJH0JvRUxbT3wWf4ltiKPgfVidWlbGZgPozDFfgAC+EA/K2EI4cwcAJ+gPaeQ+VQU2SOMMGcPgPl/m/V2p50rrbRsRgt9Iv5h6xtpP22Bz7Ce1C+gFFxfKzOmShcU+Qmyh2w3w8rIJfddHTck66EukL/xPhj+JM8rHNmFys0Pg4v0up3aFNlwR9NYyodd3OL/C64zpsymcTFcf6ElM4YzjAWKYrJkaq8kE/yUYNP4BoYvS1QRo+hNtF5xfkTUjoTheukSFFMjlTFm6PjceOca/SMpKfeCR1L6Uzk/y2WIkVhNFJlJAZhP+hYns7b9D3IPuhY5mYrIv8OrQJvR5NYyNaW4jsU8pSGNySiVx4o5tXq3JkoXE/mg5R/M8dGJCJpKhaDcjBRdbI/Rm8g69c122om33BHmj2CHoV5qa9jUXBraJ+G1fAVjIBO1klc87ro1K4JZ/K35SWW3TwcyDd6TecqnAEd8cGq2+w84xvBm1n3vS0izKkkwh5XNC/GmFPqqAtPF89AOScKuemaNzoTV1SD5dtSbmLf1/RV+tC0WTgcj6R7HEtrVGWaqu/lYDZ/2pvxQ/kIyw/gFByHC9AHw910hv1aUUumyd8yy0QfhmEkfiNod0Xusct68J1qc8Tdux0Z97Q+hsDb+AYGYEbF/4Guw2Q/qDPqZG/zXgT+3Qj8AtKnfWhFwmuAAAAAAElFTkSuQmCC\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 23px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-countButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAG5SURBVEgN3VU9LwVBFF0fiYhofUSlEQkKhU7z/oBCQkIiGr9BgUbhVzy9BAnhFyjV/AYFiU5ICM7ZN+c5Zud5dm3lJmfmzrkz9+7cu3c3y/6jjOBSF8CxXS7FmTkbwqIJjDpJvTcmsJ4K3KPZUpyZsx0sxoB9J6mnAkyC7wGuuCFIipNtEcpcWExgXpOBc78vgj6N+QO4NVsjwdFM59tUIDxDrHMBOeIQ34C5ZDregXuAQm4YcI68nN9B3wr2PcwPAIPkN2EqtJH6b+QZm1ajjTx7BqwAr26Lb+C2Kvpbt0Mb2HAJ7NrGFGfmXO3DeA4UshDfQAVmH0gaUFg852TTTDvlxwBlCtxy9zXyBhQFaq0wMmIdRebrfgosA3zb2hKnqG0oqchp4QbuR8X0TjzABhbdOT8jnQ/atcgqpnfwOA7yqZyTU587ZkIGdesLTt2EkynOnbreMUUKMI/dA4B/QVOcO13CQh+5wWCgDwo/75u59odB/wjmfhbgvACcAOyZPHihMWAoIwxyCLgf1oxfgjzVbgBXSTzIN+f0pg6s5DkcesLMRpsBrgE2XO3CN64JFP7JtUeKHX4CKtRRXFZ+7dEAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 18px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton span.dtsp-caret {\n  position: relative;\n  top: 9px;\n  display: inline-block;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton.dtsp-rotated {\n  transform: rotate(180deg);\n}\n\ndiv.dtsp-searchPane table thead th,\ndiv.dtsp-searchPane table thead td {\n  width: 100% !important;\n}\n\ndiv.dt-button-collection {\n  z-index: 2002;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsp-titleRow {\n  padding-right: 25px;\n}\n\ndiv.dtsp-columns-1 {\n  max-width: 100%;\n  min-width: 100%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-2 {\n  max-width: 49%;\n  min-width: 49%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-3 {\n  max-width: 32%;\n  min-width: 32%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-4 {\n  max-width: 24%;\n  min-width: 24%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-5 {\n  max-width: 19%;\n  min-width: 19%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-6 {\n  max-width: 16%;\n  min-width: 16%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-7 {\n  max-width: 14%;\n  min-width: 14%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-8 {\n  max-width: 12%;\n  min-width: 12%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-9 {\n  max-width: 10.5%;\n  min-width: 10.5%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-narrow {\n  flex-direction: column !important;\n}\ndiv.dtsp-narrow div.dtsp-subRow1,\ndiv.dtsp-narrow div.dtsp-subRow2 {\n  width: 100%;\n}\ndiv.dtsp-narrow div.dtsp-subRow2 button {\n  margin: 0 !important;\n  width: 25% !important;\n}\n\ndiv.dt-button-collection {\n  float: none;\n}\n\ndiv.dtsp-panesContainer {\n  margin-bottom: 1em;\n}\n\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  width: 100%;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_layout_cell {\n  padding: 0;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollHead {\n  display: none !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody {\n  background: white !important;\n  border-bottom: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody thead {\n  display: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table {\n  table-layout: fixed;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > th,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > td {\n  padding: 5px 10px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody td.dtsp-nameColumn {\n  width: 100% !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont {\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  cursor: default;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name {\n  text-overflow: ellipsis;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: middle;\n  white-space: nowrap;\n  flex-grow: 1;\n  text-align: left;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  display: inline-block;\n  background-color: #cfcfcf;\n  text-align: center;\n  border-radius: 10px;\n  width: auto;\n  min-width: 30px;\n  color: black;\n  font-size: 0.9em;\n  padding: 0 4px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill:empty {\n  display: none;\n}\n\ndiv.dtsp-panesContainer {\n  clear: both;\n  padding-left: 0;\n  padding-right: 0;\n  text-align: center;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  align-content: flex-start;\n  align-items: stretch;\n  clear: both;\n  text-align: left;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane {\n  flex-grow: 1;\n  flex-shrink: 0;\n  font-size: 0.9em;\n  margin-top: 15px !important;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper {\n  flex: 1;\n  box-sizing: border-box;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper div.dataTables_filter {\n  display: none;\n}\ndiv.dtsp-panesContainer div.dtsp-title {\n  float: left;\n  padding: 10px 0;\n}\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-collapseAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  float: right;\n  padding: 10px;\n}\n\ndiv.dtsp-hidden {\n  display: none !important;\n}\n\ndiv.dtsp-searchPane div.dtsp-topRow {\n  margin: 0.5em 0;\n}\ndiv.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow2 {\n  margin-left: 0.5em;\n}\ndiv.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow2 button {\n  border-radius: 0px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow2 button:last-child {\n  border-top-right-radius: 4px !important;\n  border-bottom-right-radius: 4px !important;\n}\ndiv.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow2 button:first-child {\n  border-top-left-radius: 4px !important;\n  border-bottom-left-radius: 4px !important;\n}\ndiv.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow2 button:last-child:first-child {\n  border-top-left-radius: 4px !important;\n  border-bottom-left-radius: 4px !important;\n  border-top-right-radius: 4px !important;\n  border-bottom-right-radius: 4px !important;\n}\ndiv.dtsp-searchPane div.dtsp-topRow input {\n  min-height: 37px;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 4px;\n  padding-left: 12px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button {\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-left: none;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button:first-child {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\ndiv.dtsp-searchPane div.dtsp-topRow i.search {\n  position: absolute;\n  top: 7px;\n  right: 3px;\n  bottom: 0;\n  box-shadow: none;\n}\ndiv.dtsp-searchPane div.dtsp-topRow span.dtsp-caret {\n  top: 11px;\n  right: 0;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-collapseButton {\n  max-width: 44px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-rotated {\n  transform: none;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-rotated span {\n  transform: rotate(180deg);\n  top: -11px;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button.clearButton,\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-searchIcon,\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-nameButton,\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-countButton,\ndiv.dtsp-searchPane div.dtsp-topRow button.dtsp-collapseButton {\n  background-color: transparent;\n  width: 44px;\n  height: 38px;\n  font-size: 14px;\n  cursor: pointer;\n}\ndiv.dtsp-searchPane div.dtsp-topRow button.disabled {\n  cursor: default;\n}\ndiv.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover button.disabled {\n  cursor: pointer !important;\n  pointer-events: none;\n}\ndiv.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover input.dtsp-search {\n  cursor: pointer !important;\n  pointer-events: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  margin-left: 0 !important;\n  margin-right: 0 !important;\n  border: 2px #f0f0f0 solid;\n  border-radius: 4px;\n  text-align: left;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.column {\n  padding-left: 0 !important;\n  padding-right: 0 !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 2px solid #cfcfcf !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dtsp-nameCont span.badge {\n  min-width: 30px;\n  line-height: 1.25em;\n  margin-top: 3.5px;\n}\ndiv.dtsp-searchPane div.ui.grid {\n  margin-top: 0;\n  margin-bottom: 0;\n}\ndiv.dtsp-searchPane div.ui.grid div.row {\n  padding: 0 !important;\n}\n\ndiv.dt-button-collection {\n  border: 1px solid rgb(240, 240, 240);\n  border-radius: 3px;\n}\ndiv.dt-button-collection div.dtsp-panesContainer {\n  font-size: 14px;\n  padding: 5px;\n}\ndiv.dt-button-collection div.dtsp-panesContainer span.dtsp-caret {\n  right: 0px;\n}\ndiv.dt-button-collection div.dtsp-panesContainer div.dtsp-titleRow button {\n  border-left-width: 0px !important;\n  border-right-width: 0px !important;\n  border-radius: 4px !important;\n}\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/js/dataTables.searchPanes.js",
    "content": "/*! SearchPanes 2.2.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n(function () {\n    'use strict';\n\n    var $$5;\n    var dataTable$2;\n    function setJQuery$4(jq) {\n        $$5 = jq;\n        dataTable$2 = jq.fn.dataTable;\n    }\n    var SearchPane = /** @class */ (function () {\n        /**\n         * Creates the panes, sets up the search function\n         *\n         * @param paneSettings The settings for the searchPanes\n         * @param opts The options for the default features\n         * @param index the index of the column for this pane\n         * @param panesContainer The overall container for SearchPanes that this pane will be attached to\n         * @param panes The custom pane settings if this is a custom pane\n         * @returns {object} the pane that has been created, including the table and the index of the pane\n         */\n        function SearchPane(paneSettings, opts, index, panesContainer, panes) {\n            var _this = this;\n            if (panes === void 0) { panes = null; }\n            // Check that the required version of DataTables is included\n            if (!dataTable$2 || !dataTable$2.versionCheck || !dataTable$2.versionCheck('1.10.0')) {\n                throw new Error('SearchPane requires DataTables 1.10 or newer');\n            }\n            // Check that Select is included\n            // eslint-disable-next-line no-extra-parens\n            if (!dataTable$2.select) {\n                throw new Error('SearchPane requires Select');\n            }\n            var table = new dataTable$2.Api(paneSettings);\n            this.classes = $$5.extend(true, {}, SearchPane.classes);\n            // Get options from user\n            this.c = $$5.extend(true, {}, SearchPane.defaults, opts, panes);\n            if (opts && opts.hideCount && opts.viewCount === undefined) {\n                this.c.viewCount = !this.c.hideCount;\n            }\n            var rowLength = table.columns().eq(0).toArray().length;\n            this.s = {\n                colExists: index < rowLength,\n                colOpts: undefined,\n                customPaneSettings: panes,\n                displayed: false,\n                dt: table,\n                dtPane: undefined,\n                firstSet: true,\n                index: index,\n                indexes: [],\n                listSet: false,\n                name: undefined,\n                rowData: {\n                    arrayFilter: [],\n                    arrayOriginal: [],\n                    bins: {},\n                    binsOriginal: {},\n                    filterMap: new Map(),\n                    totalOptions: 0\n                },\n                scrollTop: 0,\n                searchFunction: undefined,\n                selections: [],\n                serverSelect: [],\n                serverSelecting: false,\n                tableLength: null,\n                updating: false\n            };\n            this.s.colOpts = this.s.colExists ? this._getOptions() : this._getBonusOptions();\n            this.dom = {\n                buttonGroup: $$5('<div/>').addClass(this.classes.buttonGroup),\n                clear: $$5('<button type=\"button\">&#215;</button>')\n                    .attr('disabled', 'true')\n                    .addClass(this.classes.disabledButton)\n                    .addClass(this.classes.paneButton)\n                    .addClass(this.classes.clearButton)\n                    .html(this.s.dt.i18n('searchPanes.clearPane', this.c.i18n.clearPane)),\n                collapseButton: $$5('<button type=\"button\"><span class=\"' + this.classes.caret + '\">&#x5e;</span></button>')\n                    .addClass(this.classes.paneButton)\n                    .addClass(this.classes.collapseButton),\n                container: $$5('<div/>')\n                    .addClass(this.classes.container)\n                    .addClass(this.s.colOpts.className)\n                    .addClass(this.classes.layout +\n                    (parseInt(this.c.layout.split('-')[1], 10) < 10 ?\n                        this.c.layout :\n                        this.c.layout.split('-')[0] + '-9'))\n                    .addClass(this.s.customPaneSettings && this.s.customPaneSettings.className\n                    ? this.s.customPaneSettings.className\n                    : ''),\n                countButton: $$5('<button type=\"button\"><span></span></button>')\n                    .addClass(this.classes.paneButton)\n                    .addClass(this.classes.countButton),\n                dtP: $$5('<table><thead><tr><th>' +\n                    (this.s.colExists\n                        ? $$5(this.s.dt.column(this.s.index).header()).text()\n                        : this.s.customPaneSettings.header || 'Custom Pane') + '</th><th/></tr></thead></table>'),\n                lower: $$5('<div/>').addClass(this.classes.subRow2).addClass(this.classes.narrowButton),\n                nameButton: $$5('<button type=\"button\"><span></span></button>')\n                    .addClass(this.classes.paneButton)\n                    .addClass(this.classes.nameButton),\n                panesContainer: $$5(panesContainer),\n                searchBox: $$5('<input/>').addClass(this.classes.paneInputButton).addClass(this.classes.search),\n                searchButton: $$5('<button type=\"button\"><span></span></button>')\n                    .addClass(this.classes.searchIcon)\n                    .addClass(this.classes.paneButton),\n                searchCont: $$5('<div/>').addClass(this.classes.searchCont),\n                searchLabelCont: $$5('<div/>').addClass(this.classes.searchLabelCont),\n                topRow: $$5('<div/>').addClass(this.classes.topRow),\n                upper: $$5('<div/>').addClass(this.classes.subRow1).addClass(this.classes.narrowSearch)\n            };\n            // Set the value of name incase ordering is desired\n            if (this.s.colOpts.name) {\n                this.s.name = this.s.colOpts.name;\n            }\n            else if (this.s.customPaneSettings && this.s.customPaneSettings.name) {\n                this.s.name = this.s.customPaneSettings.name;\n            }\n            else {\n                this.s.name = this.s.colExists ?\n                    $$5(this.s.dt.column(this.s.index).header()).text() :\n                    this.s.customPaneSettings.header || 'Custom Pane';\n            }\n            var tableNode = this.s.dt.table(0).node();\n            // Custom search function for table\n            this.s.searchFunction = function (settings, searchData, dataIndex) {\n                // If no data has been selected then show all\n                if (_this.s.selections.length === 0) {\n                    return true;\n                }\n                if (settings.nTable !== tableNode) {\n                    return true;\n                }\n                var filter = null;\n                if (_this.s.colExists) {\n                    // Get the current filtered data\n                    filter = searchData[_this.s.index];\n                    if (_this.s.colOpts.orthogonal.filter !== 'filter') {\n                        // get the filter value from the map\n                        filter = _this.s.rowData.filterMap.get(dataIndex);\n                        if (filter instanceof $$5.fn.dataTable.Api) {\n                            // eslint-disable-next-line no-extra-parens\n                            filter = filter.toArray();\n                        }\n                    }\n                }\n                return _this._search(filter, dataIndex);\n            };\n            $$5.fn.dataTable.ext.search.push(this.s.searchFunction);\n            // If the clear button for this pane is clicked clear the selections\n            if (this.c.clear) {\n                this.dom.clear.on('click.dtsp', function () {\n                    var searches = _this.dom.container.find('.' + _this.classes.search.replace(/\\s+/g, '.'));\n                    searches.each(function () {\n                        $$5(this).val('').trigger('input');\n                    });\n                    _this.clearPane();\n                });\n            }\n            // Sometimes the top row of the panes containing the search box and ordering buttons appears\n            //  weird if the width of the panes is lower than expected, this fixes the design.\n            // Equally this may occur when the table is resized.\n            this.s.dt.on('draw.dtsp', function () { return _this.adjustTopRow(); });\n            this.s.dt.on('buttons-action.dtsp', function () { return _this.adjustTopRow(); });\n            // When column-reorder is present and the columns are moved, it is necessary to\n            //  reassign all of the panes indexes to the new index of the column.\n            this.s.dt.on('column-reorder.dtsp', function (e, settings, details) {\n                _this.s.index = details.mapping[_this.s.index];\n            });\n            return this;\n        }\n        /**\n         * Adds a row to the panes table\n         *\n         * @param display the value to be displayed to the user\n         * @param filter the value to be filtered on when searchpanes is implemented\n         * @param shown the number of rows in the table that are currently visible matching this criteria\n         * @param total the total number of rows in the table that match this criteria\n         * @param sort the value to be sorted in the pane table\n         * @param type the value of which the type is to be derived from\n         */\n        SearchPane.prototype.addRow = function (display, filter, sort, type, className, total, shown) {\n            if (!total) {\n                total = this.s.rowData.bins[filter] ?\n                    this.s.rowData.bins[filter] :\n                    0;\n            }\n            if (!shown) {\n                shown = this._getShown(filter);\n            }\n            var index;\n            for (var _i = 0, _a = this.s.indexes; _i < _a.length; _i++) {\n                var entry = _a[_i];\n                if (entry.filter === filter) {\n                    index = entry.index;\n                }\n            }\n            if (index === undefined) {\n                index = this.s.indexes.length;\n                this.s.indexes.push({ filter: filter, index: index });\n            }\n            return this.s.dtPane.row.add({\n                className: className,\n                display: display !== '' ?\n                    display :\n                    this.emptyMessage(),\n                filter: filter,\n                index: index,\n                shown: shown,\n                sort: sort,\n                total: total,\n                type: type\n            });\n        };\n        /**\n         * Adjusts the layout of the top row when the screen is resized\n         */\n        SearchPane.prototype.adjustTopRow = function () {\n            var subContainers = this.dom.container.find('.' + this.classes.subRowsContainer.replace(/\\s+/g, '.'));\n            var subRow1 = this.dom.container.find('.' + this.classes.subRow1.replace(/\\s+/g, '.'));\n            var subRow2 = this.dom.container.find('.' + this.classes.subRow2.replace(/\\s+/g, '.'));\n            var topRow = this.dom.container.find('.' + this.classes.topRow.replace(/\\s+/g, '.'));\n            // If the width is 0 then it is safe to assume that the pane has not yet been displayed.\n            //  Even if it has, if the width is 0 it won't make a difference if it has the narrow class or not\n            if (($$5(subContainers[0]).width() < 252 || $$5(topRow[0]).width() < 252) && $$5(subContainers[0]).width() !== 0) {\n                $$5(subContainers[0]).addClass(this.classes.narrow);\n                $$5(subRow1[0]).addClass(this.classes.narrowSub).removeClass(this.classes.narrowSearch);\n                $$5(subRow2[0]).addClass(this.classes.narrowSub).removeClass(this.classes.narrowButton);\n            }\n            else {\n                $$5(subContainers[0]).removeClass(this.classes.narrow);\n                $$5(subRow1[0]).removeClass(this.classes.narrowSub).addClass(this.classes.narrowSearch);\n                $$5(subRow2[0]).removeClass(this.classes.narrowSub).addClass(this.classes.narrowButton);\n            }\n        };\n        /**\n         * In the case of a rebuild there is potential for new data to have been included or removed\n         * so all of the rowData must be reset as a precaution.\n         */\n        SearchPane.prototype.clearData = function () {\n            this.s.rowData = {\n                arrayFilter: [],\n                arrayOriginal: [],\n                bins: {},\n                binsOriginal: {},\n                filterMap: new Map(),\n                totalOptions: 0\n            };\n        };\n        /**\n         * Clear the selections in the pane\n         */\n        SearchPane.prototype.clearPane = function () {\n            // Deselect all rows which are selected and update the table and filter count.\n            this.s.dtPane.rows({ selected: true }).deselect();\n            this.updateTable();\n            return this;\n        };\n        /**\n         * Collapses the pane so that only the header is displayed\n         */\n        SearchPane.prototype.collapse = function () {\n            var _this = this;\n            if (!this.s.displayed ||\n                (\n                // If collapsing is disabled globally, and not enabled specifically for this column\n                !this.c.collapse && this.s.colOpts.collapse !== true ||\n                    // OR, collapsing could be enabled globally and this column specifically\n                    // is not to be collapsed.\n                    // We can't just take !this.s.colOpts.collapse here as if it is undefined\n                    // then the global should be used\n                    this.s.colOpts.collapse === false)) {\n                return;\n            }\n            $$5(this.s.dtPane.table().container()).addClass(this.classes.hidden);\n            this.dom.topRow.addClass(this.classes.bordered);\n            this.dom.nameButton.addClass(this.classes.disabledButton);\n            this.dom.countButton.addClass(this.classes.disabledButton);\n            this.dom.searchButton.addClass(this.classes.disabledButton);\n            this.dom.collapseButton.addClass(this.classes.rotated);\n            this.dom.topRow.one('click.dtsp', function () { return _this.show(); });\n            this.dom.topRow.trigger('collapse.dtsps');\n        };\n        /**\n         * Strips all of the SearchPanes elements from the document and turns all of the listeners for the buttons off\n         */\n        SearchPane.prototype.destroy = function () {\n            if (this.s.dtPane) {\n                this.s.dtPane.off('.dtsp');\n            }\n            this.s.dt.off('.dtsp');\n            this.dom.clear.off('.dtsp');\n            this.dom.nameButton.off('.dtsp');\n            this.dom.countButton.off('.dtsp');\n            this.dom.searchButton.off('.dtsp');\n            this.dom.collapseButton.off('.dtsp');\n            $$5(this.s.dt.table().node()).off('.dtsp');\n            this.dom.container.detach();\n            var searchIdx = $$5.fn.dataTable.ext.search.indexOf(this.s.searchFunction);\n            while (searchIdx !== -1) {\n                $$5.fn.dataTable.ext.search.splice(searchIdx, 1);\n                searchIdx = $$5.fn.dataTable.ext.search.indexOf(this.s.searchFunction);\n            }\n            // If the datatables have been defined for the panes then also destroy these\n            if (this.s.dtPane) {\n                this.s.dtPane.destroy();\n            }\n            this.s.listSet = false;\n        };\n        /**\n         * Getting the legacy message is a little complex due a legacy parameter\n         */\n        SearchPane.prototype.emptyMessage = function () {\n            var def = this.c.i18n.emptyMessage;\n            // Legacy parameter support\n            if (this.c.emptyMessage) {\n                def = this.c.emptyMessage;\n            }\n            // Override per column\n            if (this.s.colOpts.emptyMessage !== false && this.s.colOpts.emptyMessage !== null) {\n                def = this.s.colOpts.emptyMessage;\n            }\n            return this.s.dt.i18n('searchPanes.emptyMessage', def);\n        };\n        /**\n         * Updates the number of filters that have been applied in the title\n         */\n        SearchPane.prototype.getPaneCount = function () {\n            return this.s.dtPane ?\n                this.s.dtPane.rows({ selected: true }).data().toArray().length :\n                0;\n        };\n        /**\n         * Rebuilds the panes from the start having deleted the old ones\n         *\n         * @param? dataIn data to be used in buildPane\n         * @param? maintainSelection Whether the current selections are to be maintained over rebuild\n         */\n        SearchPane.prototype.rebuildPane = function (dataIn, maintainSelection) {\n            if (dataIn === void 0) { dataIn = null; }\n            if (maintainSelection === void 0) { maintainSelection = false; }\n            this.clearData();\n            var selectedRows = [];\n            this.s.serverSelect = [];\n            var prevEl = null;\n            // When rebuilding strip all of the HTML Elements out of the container and start from scratch\n            if (this.s.dtPane) {\n                if (maintainSelection) {\n                    if (!this.s.dt.page.info().serverSide) {\n                        selectedRows = this.s.dtPane.rows({ selected: true }).data().toArray();\n                    }\n                    else {\n                        this.s.serverSelect = this.s.dtPane.rows({ selected: true }).data().toArray();\n                    }\n                }\n                this.s.dtPane.clear().destroy();\n                prevEl = this.dom.container.prev();\n                this.destroy();\n                this.s.dtPane = undefined;\n                $$5.fn.dataTable.ext.search.push(this.s.searchFunction);\n            }\n            this.dom.container.removeClass(this.classes.hidden);\n            this.s.displayed = false;\n            this._buildPane(!this.s.dt.page.info().serverSide ?\n                selectedRows :\n                this.s.serverSelect, dataIn, prevEl);\n            return this;\n        };\n        /**\n         * Resizes the pane based on the layout that is passed in\n         *\n         * @param layout the layout to be applied to this pane\n         */\n        SearchPane.prototype.resize = function (layout) {\n            this.c.layout = layout;\n            this.dom.container\n                .removeClass()\n                .addClass(this.classes.show)\n                .addClass(this.classes.container)\n                .addClass(this.s.colOpts.className)\n                .addClass(this.classes.layout +\n                (parseInt(layout.split('-')[1], 10) < 10 ?\n                    layout :\n                    layout.split('-')[0] + '-9'))\n                .addClass(this.s.customPaneSettings !== null && this.s.customPaneSettings.className\n                ? this.s.customPaneSettings.className\n                : '');\n            this.adjustTopRow();\n        };\n        /**\n         * Sets the listeners for the pane.\n         *\n         * Having it in it's own function makes it easier to only set them once\n         */\n        SearchPane.prototype.setListeners = function () {\n            var _this = this;\n            if (!this.s.dtPane) {\n                return;\n            }\n            // When an item is selected on the pane, add these to the array which holds selected items.\n            // Custom search will perform.\n            this.s.dtPane.off('select.dtsp').on('select.dtsp', function () {\n                clearTimeout(_this.s.deselectTimeout);\n                _this._updateSelection(!_this.s.updating);\n                _this.dom.clear.removeClass(_this.classes.disabledButton).removeAttr('disabled');\n            });\n            // When an item is deselected on the pane, re add the currently selected items to the array\n            // which holds selected items. Custom search will be performed.\n            this.s.dtPane.off('deselect.dtsp').on('deselect.dtsp', function () {\n                _this.s.deselectTimeout = setTimeout(function () {\n                    _this._updateSelection(true);\n                    if (_this.s.dtPane.rows({ selected: true }).data().toArray().length === 0) {\n                        _this.dom.clear.addClass(_this.classes.disabledButton).attr('disabled', 'true');\n                    }\n                }, 50);\n            });\n            // If we attempty to turn off this event then it will ruin behaviour in other panes\n            //  so need to make sure that it is only done once\n            if (this.s.firstSet) {\n                this.s.firstSet = false;\n                // When saving the state store all of the selected rows for preselection next time around\n                this.s.dt.on('stateSaveParams.dtsp', function (e, settings, data) {\n                    // If the data being passed in is empty then state clear must have occured\n                    // so clear the panes state as well\n                    if ($$5.isEmptyObject(data)) {\n                        _this.s.dtPane.state.clear();\n                        return;\n                    }\n                    var bins;\n                    var order;\n                    var selected = [];\n                    var collapsed;\n                    var searchTerm;\n                    var arrayFilter;\n                    // Get all of the data needed for the state save from the pane\n                    if (_this.s.dtPane) {\n                        selected = _this.s.dtPane\n                            .rows({ selected: true })\n                            .data()\n                            .map(function (item) { return item.filter.toString(); })\n                            .toArray();\n                        searchTerm = _this.dom.searchBox.val();\n                        order = _this.s.dtPane.order();\n                        bins = _this.s.rowData.binsOriginal;\n                        arrayFilter = _this.s.rowData.arrayOriginal;\n                        collapsed = _this.dom.collapseButton.hasClass(_this.classes.rotated);\n                    }\n                    if (data.searchPanes === undefined) {\n                        data.searchPanes = {};\n                    }\n                    if (data.searchPanes.panes === undefined) {\n                        data.searchPanes.panes = [];\n                    }\n                    for (var i = 0; i < data.searchPanes.panes.length; i++) {\n                        if (data.searchPanes.panes[i].id === _this.s.index) {\n                            data.searchPanes.panes.splice(i, 1);\n                            i--;\n                        }\n                    }\n                    // Add the panes data to the state object\n                    data.searchPanes.panes.push({\n                        arrayFilter: arrayFilter,\n                        bins: bins,\n                        collapsed: collapsed,\n                        id: _this.s.index,\n                        order: order,\n                        searchTerm: searchTerm,\n                        selected: selected\n                    });\n                });\n            }\n            this.s.dtPane.off('user-select.dtsp').on('user-select.dtsp', function (e, _dt, type, cell, originalEvent) {\n                originalEvent.stopPropagation();\n            });\n            this.s.dtPane.off('draw.dtsp').on('draw.dtsp', function () { return _this.adjustTopRow(); });\n            // When the button to order by the name of the options is clicked then\n            //  change the ordering to whatever it isn't currently\n            this.dom.nameButton.off('click.dtsp').on('click.dtsp', function () {\n                var currentOrder = _this.s.dtPane.order()[0][1];\n                _this.s.dtPane.order([0, currentOrder === 'asc' ? 'desc' : 'asc']).draw();\n                // This state save is required so that the ordering of the panes is maintained\n                _this.s.dt.state.save();\n            });\n            // When the button to order by the number of entries in the column is clicked then\n            //  change the ordering to whatever it isn't currently\n            this.dom.countButton.off('click.dtsp').on('click.dtsp', function () {\n                var currentOrder = _this.s.dtPane.order()[0][1];\n                _this.s.dtPane.order([1, currentOrder === 'asc' ? 'desc' : 'asc']).draw();\n                // This state save is required so that the ordering of the panes is maintained\n                _this.s.dt.state.save();\n            });\n            // When the button to order by the number of entries in the column is clicked then\n            //  change the ordering to whatever it isn't currently\n            this.dom.collapseButton.off('click.dtsp').on('click.dtsp', function (e) {\n                e.stopPropagation();\n                var container = $$5(_this.s.dtPane.table().container());\n                // Toggle the classes\n                container.toggleClass(_this.classes.hidden);\n                _this.dom.topRow.toggleClass(_this.classes.bordered);\n                _this.dom.nameButton.toggleClass(_this.classes.disabledButton);\n                _this.dom.countButton.toggleClass(_this.classes.disabledButton);\n                _this.dom.searchButton.toggleClass(_this.classes.disabledButton);\n                _this.dom.collapseButton.toggleClass(_this.classes.rotated);\n                if (container.hasClass(_this.classes.hidden)) {\n                    _this.dom.topRow.on('click.dtsp', function () { return _this.dom.collapseButton.click(); });\n                }\n                else {\n                    _this.dom.topRow.off('click.dtsp');\n                }\n                _this.s.dt.state.save();\n                _this.dom.topRow.trigger('collapse.dtsps');\n            });\n            // When the clear button is clicked reset the pane\n            this.dom.clear.off('click.dtsp').on('click.dtsp', function () {\n                var searches = _this.dom.container.find('.' + _this.classes.search.replace(/ /g, '.'));\n                searches.each(function () {\n                    // set the value of the search box to be an empty string and then search on that, effectively reseting\n                    $$5(this).val('').trigger('input');\n                });\n                _this.clearPane();\n            });\n            // When the search button is clicked then draw focus to the search box\n            this.dom.searchButton.off('click.dtsp').on('click.dtsp', function () { return _this.dom.searchBox.focus(); });\n            // When a character is inputted into the searchbox search the pane for matching values.\n            // Doing it this way means that no button has to be clicked to trigger a search, it is done asynchronously\n            this.dom.searchBox.off('click.dtsp').on('input.dtsp', function () {\n                var searchval = _this.dom.searchBox.val();\n                _this.s.dtPane.search(searchval).draw();\n                if (typeof searchval === 'string' &&\n                    (searchval.length > 0 ||\n                        searchval.length === 0 && _this.s.dtPane.rows({ selected: true }).data().toArray().length > 0)) {\n                    _this.dom.clear.removeClass(_this.classes.disabledButton).removeAttr('disabled');\n                }\n                else {\n                    _this.dom.clear.addClass(_this.classes.disabledButton).attr('disabled', 'true');\n                }\n                // This state save is required so that the searching on the panes is maintained\n                _this.s.dt.state.save();\n            });\n            this.s.dtPane.select.style(this.s.colOpts.dtOpts && this.s.colOpts.dtOpts.select && this.s.colOpts.dtOpts.select.style\n                ? this.s.colOpts.dtOpts.select.style\n                : this.c.dtOpts && this.c.dtOpts.select && this.c.dtOpts.select.style\n                    ? this.c.dtOpts.select.style\n                    : 'os');\n        };\n        /**\n         * Populates the SearchPane based off of the data that has been recieved from the server\n         *\n         * This method is overriden by SearchPaneST\n         *\n         * @param dataIn The data that has been sent from the server\n         */\n        SearchPane.prototype._serverPopulate = function (dataIn) {\n            if (dataIn.tableLength) {\n                this.s.tableLength = dataIn.tableLength;\n                this.s.rowData.totalOptions = this.s.tableLength;\n            }\n            else if (this.s.tableLength === null || this.s.dt.rows()[0].length > this.s.tableLength) {\n                this.s.tableLength = this.s.dt.rows()[0].length;\n                this.s.rowData.totalOptions = this.s.tableLength;\n            }\n            var colTitle = this.s.dt.column(this.s.index).dataSrc();\n            // If there is SP data for this column add it to the data array and bin\n            if (dataIn.searchPanes.options[colTitle]) {\n                for (var _i = 0, _a = dataIn.searchPanes.options[colTitle]; _i < _a.length; _i++) {\n                    var dataPoint = _a[_i];\n                    this.s.rowData.arrayFilter.push({\n                        display: dataPoint.label,\n                        filter: dataPoint.value,\n                        sort: dataPoint.label,\n                        type: dataPoint.label\n                    });\n                    this.s.rowData.bins[dataPoint.value] = dataPoint.total;\n                }\n            }\n            var binLength = Object.keys(this.s.rowData.bins).length;\n            var uniqueRatio = this._uniqueRatio(binLength, this.s.tableLength);\n            // Don't show the pane if there isnt enough variance in the data, or there is only 1 entry for that pane\n            if (this.s.displayed === false &&\n                ((this.s.colOpts.show === undefined && this.s.colOpts.threshold === null ?\n                    uniqueRatio > this.c.threshold :\n                    uniqueRatio > this.s.colOpts.threshold) ||\n                    this.s.colOpts.show !== true && binLength <= 1)) {\n                this.dom.container.addClass(this.classes.hidden);\n                this.s.displayed = false;\n                return;\n            }\n            // Store the original data\n            this.s.rowData.arrayOriginal = this.s.rowData.arrayFilter;\n            this.s.rowData.binsOriginal = this.s.rowData.bins;\n            // Flag this pane as being displayed\n            this.s.displayed = true;\n        };\n        /**\n         * Expands the pane from the collapsed state\n         */\n        SearchPane.prototype.show = function () {\n            if (!this.s.displayed) {\n                return;\n            }\n            this.dom.topRow.removeClass(this.classes.bordered);\n            this.dom.nameButton.removeClass(this.classes.disabledButton);\n            this.dom.countButton.removeClass(this.classes.disabledButton);\n            this.dom.searchButton.removeClass(this.classes.disabledButton);\n            this.dom.collapseButton.removeClass(this.classes.rotated);\n            $$5(this.s.dtPane.table().container()).removeClass(this.classes.hidden);\n            this.dom.topRow.trigger('collapse.dtsps');\n        };\n        /**\n         * Finds the ratio of the number of different options in the table to the number of rows\n         *\n         * @param bins the number of different options in the table\n         * @param rowCount the total number of rows in the table\n         * @returns {number} returns the ratio\n         */\n        SearchPane.prototype._uniqueRatio = function (bins, rowCount) {\n            if (rowCount > 0 &&\n                (this.s.rowData.totalOptions > 0 && !this.s.dt.page.info().serverSide ||\n                    this.s.dt.page.info().serverSide && this.s.tableLength > 0)) {\n                return bins / this.s.rowData.totalOptions;\n            }\n            return 1;\n        };\n        /**\n         * Updates the panes if one of the options to do so has been set to true\n         * rather than the filtered message when using viewTotal.\n         */\n        SearchPane.prototype.updateTable = function () {\n            var selectedRows = this.s.dtPane.rows({ selected: true }).data().toArray().map(function (el) { return el.filter; });\n            this.s.selections = selectedRows;\n            this._searchExtras();\n        };\n        /**\n         * Adds the custom options to the pane\n         *\n         * @returns {Array} Returns the array of rows which have been added to the pane\n         */\n        SearchPane.prototype._getComparisonRows = function () {\n            // Find the appropriate options depending on whether this is a pane for a specific column or a custom pane\n            var options = this.s.colOpts.options\n                ? this.s.colOpts.options\n                : this.s.customPaneSettings && this.s.customPaneSettings.options\n                    ? this.s.customPaneSettings.options\n                    : undefined;\n            if (options === undefined) {\n                return;\n            }\n            var allRows = this.s.dt.rows();\n            var tableValsTotal = allRows.data().toArray();\n            var rows = [];\n            // Clear all of the other rows from the pane, only custom options are to be displayed when they are defined\n            this.s.dtPane.clear();\n            this.s.indexes = [];\n            for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n                var comp = options_1[_i];\n                // Initialise the object which is to be placed in the row\n                var insert = comp.label !== '' ?\n                    comp.label :\n                    this.emptyMessage();\n                var comparisonObj = {\n                    className: comp.className,\n                    display: insert,\n                    filter: typeof comp.value === 'function' ? comp.value : [],\n                    sort: insert,\n                    total: 0,\n                    type: insert\n                };\n                // If a custom function is in place\n                if (typeof comp.value === 'function') {\n                    // Count the number of times the function evaluates to true for the original data in the Table\n                    for (var i = 0; i < tableValsTotal.length; i++) {\n                        if (comp.value.call(this.s.dt, tableValsTotal[i], allRows[0][i])) {\n                            comparisonObj.total++;\n                        }\n                    }\n                    // Update the comparisonObj\n                    if (typeof comparisonObj.filter !== 'function') {\n                        comparisonObj.filter.push(comp.filter);\n                    }\n                }\n                rows.push(this.addRow(comparisonObj.display, comparisonObj.filter, comparisonObj.sort, comparisonObj.type, comparisonObj.className, comparisonObj.total));\n            }\n            return rows;\n        };\n        SearchPane.prototype._getMessage = function (row) {\n            return this.s.dt.i18n('searchPanes.count', this.c.i18n.count).replace(/{total}/g, row.total);\n        };\n        /**\n         * Overridden in SearchPaneViewTotal and SearchPaneCascade to get the number of times a specific value is shown\n         *\n         * Here it is blanked so that it takes no action\n         *\n         * @param filter The filter value\n         * @returns undefined\n         */\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        SearchPane.prototype._getShown = function (filter) {\n            return undefined;\n        };\n        /**\n         * Get's the pane config appropriate to this class\n         *\n         * @returns The config needed to create a pane of this type\n         */\n        SearchPane.prototype._getPaneConfig = function () {\n            var _this = this;\n            // eslint-disable-next-line no-extra-parens\n            var haveScroller = dataTable$2.Scroller;\n            var langOpts = this.s.dt.settings()[0].oLanguage;\n            langOpts.url = undefined;\n            langOpts.sUrl = undefined;\n            return {\n                columnDefs: [\n                    {\n                        className: 'dtsp-nameColumn',\n                        data: 'display',\n                        render: function (data, type, row) {\n                            if (type === 'sort') {\n                                return row.sort;\n                            }\n                            else if (type === 'type') {\n                                return row.type;\n                            }\n                            var message = _this._getMessage(row);\n                            // We are displaying the count in the same columne as the name of the search option.\n                            // This is so that there is not need to call columns.adjust()\n                            //  which in turn speeds up the code\n                            var pill = '<span class=\"' + _this.classes.pill + '\">' + message + '</span>';\n                            if (!_this.c.viewCount || !_this.s.colOpts.viewCount) {\n                                pill = '';\n                            }\n                            if (type === 'filter') {\n                                return typeof data === 'string' && data.match(/<[^>]*>/) !== null ?\n                                    data.replace(/<[^>]*>/g, '') :\n                                    data;\n                            }\n                            return '<div class=\"' + _this.classes.nameCont + '\"><span title=\"' +\n                                (typeof data === 'string' && data.match(/<[^>]*>/) !== null ?\n                                    data.replace(/<[^>]*>/g, '') :\n                                    data) +\n                                '\" class=\"' + _this.classes.name + '\">' +\n                                data + '</span>' +\n                                pill + '</div>';\n                        },\n                        targets: 0,\n                        // Accessing the private datatables property to set type based on the original table.\n                        // This is null if not defined by the user, meaning that automatic type detection\n                        //  would take place\n                        type: this.s.dt.settings()[0].aoColumns[this.s.index] ?\n                            this.s.dt.settings()[0].aoColumns[this.s.index]._sManualType :\n                            null\n                    },\n                    {\n                        className: 'dtsp-countColumn ' + this.classes.badgePill,\n                        data: 'total',\n                        searchable: false,\n                        targets: 1,\n                        visible: false\n                    }\n                ],\n                deferRender: true,\n                dom: 't',\n                info: false,\n                language: langOpts,\n                paging: haveScroller ? true : false,\n                scrollX: false,\n                scrollY: '200px',\n                scroller: haveScroller ? true : false,\n                select: true,\n                stateSave: this.s.dt.settings()[0].oFeatures.bStateSave ? true : false\n            };\n        };\n        /**\n         * This method allows for changes to the panes and table to be made when a selection or a deselection occurs\n         */\n        SearchPane.prototype._makeSelection = function () {\n            this.updateTable();\n            this.s.updating = true;\n            this.s.dt.draw(false);\n            this.s.updating = false;\n        };\n        /**\n         * Populates an array with all of the data for the table\n         *\n         * @param rowIdx The current row index to be compared\n         * @param arrayFilter The array that is to be populated with row Details\n         * @param settings The DataTable settings object\n         * @param bins The bins object that is to be populated with the row counts\n         */\n        SearchPane.prototype._populatePaneArray = function (rowIdx, arrayFilter, settings, bins) {\n            if (bins === void 0) { bins = this.s.rowData.bins; }\n            // Retrieve the rendered data from the cell using the fnGetCellData function\n            // rather than the cell().render API method for optimisation\n            if (typeof this.s.colOpts.orthogonal === 'string') {\n                var rendered = settings.oApi._fnGetCellData(settings, rowIdx, this.s.index, this.s.colOpts.orthogonal);\n                this.s.rowData.filterMap.set(rowIdx, rendered);\n                this._addOption(rendered, rendered, rendered, rendered, arrayFilter, bins);\n                this.s.rowData.totalOptions++;\n            }\n            else {\n                var filter = settings.oApi._fnGetCellData(settings, rowIdx, this.s.index, this.s.colOpts.orthogonal.search);\n                // Null and empty string are to be considered the same value\n                if (filter === null) {\n                    filter = '';\n                }\n                if (typeof filter === 'string') {\n                    filter = filter.replace(/<[^>]*>/g, '');\n                }\n                this.s.rowData.filterMap.set(rowIdx, filter);\n                if (!bins[filter]) {\n                    bins[filter] = 1;\n                    this._addOption(filter, settings.oApi._fnGetCellData(settings, rowIdx, this.s.index, this.s.colOpts.orthogonal.display), settings.oApi._fnGetCellData(settings, rowIdx, this.s.index, this.s.colOpts.orthogonal.sort), settings.oApi._fnGetCellData(settings, rowIdx, this.s.index, this.s.colOpts.orthogonal.type), arrayFilter, bins);\n                    this.s.rowData.totalOptions++;\n                }\n                else {\n                    bins[filter]++;\n                    this.s.rowData.totalOptions++;\n                }\n            }\n        };\n        /**\n         * Reloads all of the previous selects into the panes\n         *\n         * @param loadedFilter The loaded filters from a previous state\n         */\n        SearchPane.prototype._reloadSelect = function (loadedFilter) {\n            // If the state was not saved don't selected any\n            if (loadedFilter === undefined) {\n                return;\n            }\n            var idx;\n            // For each pane, check that the loadedFilter list exists and is not null,\n            // find the id of each search item and set it to be selected.\n            for (var i = 0; i < loadedFilter.searchPanes.panes.length; i++) {\n                if (loadedFilter.searchPanes.panes[i].id === this.s.index) {\n                    idx = i;\n                    break;\n                }\n            }\n            if (idx) {\n                var table = this.s.dtPane;\n                var rows = table.rows({ order: 'index' }).data().map(function (item) { return item.filter !== null ?\n                    item.filter.toString() :\n                    null; }).toArray();\n                for (var _i = 0, _a = loadedFilter.searchPanes.panes[idx].selected; _i < _a.length; _i++) {\n                    var filter = _a[_i];\n                    var id = -1;\n                    if (filter !== null) {\n                        id = rows.indexOf(filter.toString());\n                    }\n                    if (id > -1) {\n                        this.s.serverSelecting = true;\n                        table.row(id).select();\n                        this.s.serverSelecting = false;\n                    }\n                }\n            }\n        };\n        /**\n         * Notes the rows that have been selected within this pane and stores them internally\n         *\n         * @param notUpdating Whether the panes are updating themselves or not\n         */\n        SearchPane.prototype._updateSelection = function (notUpdating) {\n            var _this = this;\n            var settings = this.s.dt.settings()[0];\n            var oApi = settings.oApi;\n            var run = function () {\n                _this.s.scrollTop = $$5(_this.s.dtPane.table().node()).parent()[0].scrollTop;\n                if (_this.s.dt.page.info().serverSide && !_this.s.updating) {\n                    if (!_this.s.serverSelecting) {\n                        _this.s.serverSelect = _this.s.dtPane.rows({ selected: true }).data().toArray();\n                        _this.s.dt.draw(false);\n                    }\n                }\n                else if (notUpdating) {\n                    _this._makeSelection();\n                }\n                oApi._fnProcessingDisplay(settings, false);\n            };\n            // If the processing display is enabled, we need to allow the browser\n            // to draw it before performing our calculations\n            if (settings.oFeatures.bProcessing) {\n                oApi._fnProcessingDisplay(settings, true);\n                setTimeout(run, 1);\n            }\n            else {\n                run();\n            }\n        };\n        /**\n         * Takes in potentially undetected rows and adds them to the array if they are not yet featured\n         *\n         * @param filter the filter value of the potential row\n         * @param display the display value of the potential row\n         * @param sort the sort value of the potential row\n         * @param type the type value of the potential row\n         * @param arrayFilter the array to be populated\n         * @param bins the bins to be populated\n         */\n        SearchPane.prototype._addOption = function (filter, display, sort, type, arrayFilter, bins) {\n            // If the filter is an array then take a note of this, and add the elements to the arrayFilter array\n            if (Array.isArray(filter) || filter instanceof dataTable$2.Api) {\n                // Convert to an array so that we can work with it\n                if (filter instanceof dataTable$2.Api) {\n                    filter = filter.toArray();\n                    display = display.toArray();\n                }\n                if (filter.length === display.length) {\n                    for (var i = 0; i < filter.length; i++) {\n                        // If we haven't seen this row before add it\n                        if (!bins[filter[i]]) {\n                            bins[filter[i]] = 1;\n                            arrayFilter.push({\n                                display: display[i],\n                                filter: filter[i],\n                                sort: sort[i],\n                                type: type[i]\n                            });\n                        }\n                        // Otherwise just increment the count\n                        else {\n                            bins[filter[i]]++;\n                        }\n                        this.s.rowData.totalOptions++;\n                    }\n                    return;\n                }\n                throw new Error('display and filter not the same length');\n            }\n            // If the values were affected by othogonal data and are not an array then check if it is already present\n            else if (typeof this.s.colOpts.orthogonal === 'string') {\n                if (!bins[filter]) {\n                    bins[filter] = 1;\n                    arrayFilter.push({\n                        display: display,\n                        filter: filter,\n                        sort: sort,\n                        type: type\n                    });\n                    this.s.rowData.totalOptions++;\n                }\n                else {\n                    bins[filter]++;\n                    this.s.rowData.totalOptions++;\n                }\n            }\n            // Otherwise we must just be adding an option\n            else {\n                arrayFilter.push({\n                    display: display,\n                    filter: filter,\n                    sort: sort,\n                    type: type\n                });\n            }\n        };\n        /**\n         * Method to construct the actual pane.\n         *\n         * @param selectedRows previously selected Rows to be reselected\n         * @param dataIn Data that should be used to populate this pane\n         * @param prevEl Reference to the previous element, used to ensure insert is in the correct location\n         * @returns boolean to indicate whether this pane was the last one to have a selection made\n         */\n        SearchPane.prototype._buildPane = function (selectedRows, dataIn, prevEl) {\n            var _this = this;\n            if (selectedRows === void 0) { selectedRows = []; }\n            if (dataIn === void 0) { dataIn = null; }\n            if (prevEl === void 0) { prevEl = null; }\n            // Aliases\n            this.s.selections = [];\n            // Other Variables\n            var loadedFilter = this.s.dt.state.loaded();\n            // If the listeners have not been set yet then using the latest state may result in funny errors\n            if (this.s.listSet) {\n                loadedFilter = this.s.dt.state();\n            }\n            // If it is not a custom pane in place\n            if (this.s.colExists) {\n                var idx = -1;\n                if (loadedFilter && loadedFilter.searchPanes && loadedFilter.searchPanes.panes) {\n                    for (var i = 0; i < loadedFilter.searchPanes.panes.length; i++) {\n                        if (loadedFilter.searchPanes.panes[i].id === this.s.index) {\n                            idx = i;\n                            break;\n                        }\n                    }\n                }\n                // Perform checks that do not require populate pane to run\n                if ((this.s.colOpts.show === false ||\n                    this.s.colOpts.show !== undefined && this.s.colOpts.show !== true) &&\n                    idx === -1) {\n                    this.dom.container.addClass(this.classes.hidden);\n                    this.s.displayed = false;\n                    return false;\n                }\n                else if (this.s.colOpts.show === true || idx !== -1) {\n                    this.s.displayed = true;\n                }\n                if (!this.s.dt.page.info().serverSide &&\n                    (!dataIn ||\n                        !dataIn.searchPanes ||\n                        !dataIn.searchPanes.options)) {\n                    // Only run populatePane if the data has not been collected yet\n                    if (this.s.rowData.arrayFilter.length === 0) {\n                        this.s.rowData.totalOptions = 0;\n                        this._populatePane();\n                        this.s.rowData.arrayOriginal = this.s.rowData.arrayFilter;\n                        this.s.rowData.binsOriginal = this.s.rowData.bins;\n                    }\n                    var binLength = Object.keys(this.s.rowData.binsOriginal).length;\n                    var uniqueRatio = this._uniqueRatio(binLength, this.s.dt.rows()[0].length);\n                    // Don't show the pane if there isn't enough variance in the data, or there is only 1 entry\n                    //  for that pane\n                    if (this.s.displayed === false &&\n                        ((this.s.colOpts.show === undefined && this.s.colOpts.threshold === null ?\n                            uniqueRatio > this.c.threshold :\n                            uniqueRatio > this.s.colOpts.threshold) ||\n                            this.s.colOpts.show !== true && binLength <= 1)) {\n                        this.dom.container.addClass(this.classes.hidden);\n                        this.s.displayed = false;\n                        return;\n                    }\n                    this.dom.container.addClass(this.classes.show);\n                    this.s.displayed = true;\n                }\n                else if (dataIn && dataIn.searchPanes && dataIn.searchPanes.options) {\n                    this._serverPopulate(dataIn);\n                }\n            }\n            else {\n                this.s.displayed = true;\n            }\n            // If the variance is accceptable then display the search pane\n            this._displayPane();\n            if (!this.s.listSet) {\n                // Here, when the state is loaded if the data object on the original table is empty,\n                //  then a state.clear() must have occurred, so delete all of the panes tables state objects too.\n                this.dom.dtP.on('stateLoadParams.dtsp', function (e, settings, data) {\n                    if ($$5.isEmptyObject(_this.s.dt.state.loaded())) {\n                        $$5.each(data, function (index) {\n                            delete data[index];\n                        });\n                    }\n                });\n            }\n            // Add the container to the document in its original location\n            if (prevEl !== null && this.dom.panesContainer.has(prevEl).length > 0) {\n                this.dom.container.insertAfter(prevEl);\n            }\n            else {\n                this.dom.panesContainer.prepend(this.dom.container);\n            }\n            // Declare the datatable for the pane\n            var errMode = $$5.fn.dataTable.ext.errMode;\n            $$5.fn.dataTable.ext.errMode = 'none';\n            // eslint-disable-next-line no-extra-parens\n            this.s.dtPane = this.dom.dtP.DataTable($$5.extend(true, this._getPaneConfig(), this.c.dtOpts, this.s.colOpts ? this.s.colOpts.dtOpts : {}, this.s.colOpts.options || !this.s.colExists ?\n                {\n                    createdRow: function (row, data) {\n                        $$5(row).addClass(data.className);\n                    }\n                } :\n                undefined, this.s.customPaneSettings !== null && this.s.customPaneSettings.dtOpts ?\n                this.s.customPaneSettings.dtOpts :\n                {}, $$5.fn.dataTable.versionCheck('2')\n                ? {\n                    layout: {\n                        bottomLeft: null,\n                        bottomRight: null,\n                        topLeft: null,\n                        topRight: null\n                    }\n                }\n                : {}));\n            this.dom.dtP.addClass(this.classes.table);\n            // Getting column titles is a little messy\n            var headerText = 'Custom Pane';\n            if (this.s.customPaneSettings && this.s.customPaneSettings.header) {\n                headerText = this.s.customPaneSettings.header;\n            }\n            else if (this.s.colOpts.header) {\n                headerText = this.s.colOpts.header;\n            }\n            else if (this.s.colExists) {\n                headerText = $$5.fn.dataTable.versionCheck('2')\n                    ? this.s.dt.column(this.s.index).title()\n                    : this.s.dt.settings()[0].aoColumns[this.s.index].sTitle;\n            }\n            headerText = this._escapeHTML(headerText);\n            this.dom.searchBox.attr('placeholder', headerText);\n            // As the pane table is not in the document yet we must initialise select ourselves\n            // eslint-disable-next-line no-extra-parens\n            $$5.fn.dataTable.select.init(this.s.dtPane);\n            $$5.fn.dataTable.ext.errMode = errMode;\n            // If it is not a custom pane\n            if (this.s.colExists) {\n                // Add all of the search options to the pane\n                for (var i = 0, ien = this.s.rowData.arrayFilter.length; i < ien; i++) {\n                    if (this.s.dt.page.info().serverSide) {\n                        var row = this.addRow(this.s.rowData.arrayFilter[i].display, this.s.rowData.arrayFilter[i].filter, this.s.rowData.arrayFilter[i].sort, this.s.rowData.arrayFilter[i].type);\n                        for (var _i = 0, _a = this.s.serverSelect; _i < _a.length; _i++) {\n                            var option = _a[_i];\n                            if (option.filter === this.s.rowData.arrayFilter[i].filter) {\n                                this.s.serverSelecting = true;\n                                row.select();\n                                this.s.serverSelecting = false;\n                            }\n                        }\n                    }\n                    else if (!this.s.dt.page.info().serverSide && this.s.rowData.arrayFilter[i]) {\n                        this.addRow(this.s.rowData.arrayFilter[i].display, this.s.rowData.arrayFilter[i].filter, this.s.rowData.arrayFilter[i].sort, this.s.rowData.arrayFilter[i].type);\n                    }\n                    else if (!this.s.dt.page.info().serverSide) {\n                        // Just pass an empty string as the message will be calculated based on that in addRow()\n                        this.addRow('', '', '', '');\n                    }\n                }\n            }\n            // eslint-disable-next-line no-extra-parens\n            dataTable$2.select.init(this.s.dtPane);\n            // If there are custom options set or it is a custom pane then get them\n            if (this.s.colOpts.options ||\n                this.s.customPaneSettings && this.s.customPaneSettings.options) {\n                this._getComparisonRows();\n            }\n            // Display the pane\n            this.s.dtPane.draw();\n            this.s.dtPane.table().node().parentNode.scrollTop = this.s.scrollTop;\n            this.adjustTopRow();\n            this.setListeners();\n            this.s.listSet = true;\n            for (var _b = 0, selectedRows_1 = selectedRows; _b < selectedRows_1.length; _b++) {\n                var selection = selectedRows_1[_b];\n                if (selection) {\n                    for (var _c = 0, _d = this.s.dtPane.rows().indexes().toArray(); _c < _d.length; _c++) {\n                        var row = _d[_c];\n                        if (this.s.dtPane.row(row).data() &&\n                            selection.filter === this.s.dtPane.row(row).data().filter) {\n                            // If this is happening when serverSide processing is happening then\n                            //  different behaviour is needed\n                            if (this.s.dt.page.info().serverSide) {\n                                this.s.serverSelecting = true;\n                                this.s.dtPane.row(row).select();\n                                this.s.serverSelecting = false;\n                            }\n                            else {\n                                this.s.dtPane.row(row).select();\n                            }\n                        }\n                    }\n                }\n            }\n            //  If SSP and the table is ready, apply the search for the pane\n            if (this.s.dt.page.info().serverSide) {\n                this.s.dtPane.search(this.dom.searchBox.val()).draw();\n            }\n            if ((this.c.initCollapsed && this.s.colOpts.initCollapsed !== false ||\n                this.s.colOpts.initCollapsed) &&\n                (this.c.collapse && this.s.colOpts.collapse !== false ||\n                    this.s.colOpts.collapse)) {\n                // If the pane has not initialised yet then we need to wait for it to do so before collapsing\n                // Otherwise the container that the class is added to does not exist\n                if (this.s.dtPane.settings()[0]._bInitComplete) {\n                    this.collapse();\n                }\n                else {\n                    this.s.dtPane.one('init', function () { return _this.collapse(); });\n                }\n            }\n            // Reload the selection, searchbox entry and ordering from the previous state\n            // Need to check here if SSP that this is the first draw, otherwise it will infinite loop\n            if (loadedFilter &&\n                loadedFilter.searchPanes &&\n                loadedFilter.searchPanes.panes &&\n                (!dataIn ||\n                    dataIn.draw === 1)) {\n                this._reloadSelect(loadedFilter);\n                for (var _e = 0, _f = loadedFilter.searchPanes.panes; _e < _f.length; _e++) {\n                    var pane = _f[_e];\n                    if (pane.id === this.s.index) {\n                        // Save some time by only triggering an input if there is a value\n                        if (pane.searchTerm && pane.searchTerm.length > 0) {\n                            this.dom.searchBox.val(pane.searchTerm).trigger('input');\n                        }\n                        if (pane.order) {\n                            this.s.dtPane.order(pane.order).draw();\n                        }\n                        // Is the pane to be hidden or shown?\n                        if (pane.collapsed) {\n                            this.collapse();\n                        }\n                        else {\n                            this.show();\n                        }\n                    }\n                }\n            }\n            return true;\n        };\n        /**\n         * Appends all of the HTML elements to their relevant parent Elements\n         */\n        SearchPane.prototype._displayPane = function () {\n            // Empty everything to start again\n            this.dom.dtP.empty();\n            this.dom.topRow.empty().addClass(this.classes.topRow);\n            // If there are more than 3 columns defined then make there be a smaller gap between the panes\n            if (parseInt(this.c.layout.split('-')[1], 10) > 3) {\n                this.dom.container.addClass(this.classes.smallGap);\n            }\n            this.dom.topRow\n                .addClass(this.classes.subRowsContainer)\n                .append(this.dom.upper.append(this.dom.searchCont))\n                .append(this.dom.lower.append(this.dom.buttonGroup));\n            // If no selections have been made in the pane then disable the clear button\n            if (this.c.dtOpts.searching === false ||\n                this.s.colOpts.dtOpts && this.s.colOpts.dtOpts.searching === false ||\n                (!this.c.controls || !this.s.colOpts.controls) ||\n                this.s.customPaneSettings &&\n                    this.s.customPaneSettings.dtOpts &&\n                    this.s.customPaneSettings.dtOpts.searching !== undefined &&\n                    !this.s.customPaneSettings.dtOpts.searching) {\n                this.dom.searchBox\n                    .removeClass(this.classes.paneInputButton)\n                    .addClass(this.classes.disabledButton)\n                    .attr('disabled', 'true');\n            }\n            this.dom.searchBox.appendTo(this.dom.searchCont);\n            // Create the contents of the searchCont div. Worth noting that this function will change when using semantic ui\n            this._searchContSetup();\n            // If the clear button is allowed to show then display it\n            if (this.c.clear && this.c.controls && this.s.colOpts.controls) {\n                this.dom.clear.appendTo(this.dom.buttonGroup);\n            }\n            if (this.c.orderable && this.s.colOpts.orderable && this.c.controls && this.s.colOpts.controls) {\n                this.dom.nameButton.appendTo(this.dom.buttonGroup);\n            }\n            // If the count column is hidden then don't display the ordering button for it\n            if (this.c.viewCount &&\n                this.s.colOpts.viewCount &&\n                this.c.orderable &&\n                this.s.colOpts.orderable &&\n                this.c.controls &&\n                this.s.colOpts.controls) {\n                this.dom.countButton.appendTo(this.dom.buttonGroup);\n            }\n            if ((this.c.collapse && this.s.colOpts.collapse !== false ||\n                this.s.colOpts.collapse) &&\n                this.c.controls && this.s.colOpts.controls) {\n                this.dom.collapseButton.appendTo(this.dom.buttonGroup);\n            }\n            this.dom.container.prepend(this.dom.topRow).append(this.dom.dtP).show();\n        };\n        /**\n         * Escape html characters within a string\n         *\n         * @param txt the string to be escaped\n         * @returns the escaped string\n         */\n        SearchPane.prototype._escapeHTML = function (txt) {\n            return txt\n                .toString()\n                .replace(/&amp;/g, '&')\n                .replace(/&lt;/g, '<')\n                .replace(/&gt;/g, '>')\n                .replace(/&quot;/g, '\"');\n        };\n        /**\n         * Gets the options for the row for the customPanes\n         *\n         * @returns {object} The options for the row extended to include the options from the user.\n         */\n        SearchPane.prototype._getBonusOptions = function () {\n            // We need to reset the thresholds as if they have a value in colOpts then that value will be used\n            var defaultMutator = {\n                threshold: null\n            };\n            return $$5.extend(true, {}, SearchPane.defaults, defaultMutator, this.c ? this.c : {});\n        };\n        /**\n         * Gets the options for the row for the customPanes\n         *\n         * @returns {object} The options for the row extended to include the options from the user.\n         */\n        SearchPane.prototype._getOptions = function () {\n            var table = this.s.dt;\n            // We need to reset the thresholds as if they have a value in colOpts then that value will be used\n            var defaultMutator = {\n                collapse: null,\n                emptyMessage: false,\n                initCollapsed: null,\n                threshold: null\n            };\n            var columnOptions = table.settings()[0].aoColumns[this.s.index].searchPanes;\n            var colOpts = $$5.extend(true, {}, SearchPane.defaults, defaultMutator, columnOptions);\n            if (columnOptions && columnOptions.hideCount && columnOptions.viewCount === undefined) {\n                colOpts.viewCount = !columnOptions.hideCount;\n            }\n            return colOpts;\n        };\n        /**\n         * Fill the array with the values that are currently being displayed in the table\n         */\n        SearchPane.prototype._populatePane = function () {\n            this.s.rowData.arrayFilter = [];\n            this.s.rowData.bins = {};\n            var settings = this.s.dt.settings()[0];\n            if (!this.s.dt.page.info().serverSide) {\n                for (var _i = 0, _a = this.s.dt.rows().indexes().toArray(); _i < _a.length; _i++) {\n                    var index = _a[_i];\n                    this._populatePaneArray(index, this.s.rowData.arrayFilter, settings);\n                }\n            }\n        };\n        /**\n         * This method decides whether a row should contribute to the pane or not\n         *\n         * @param filter the value that the row is to be filtered on\n         * @param dataIndex the row index\n         */\n        SearchPane.prototype._search = function (filter, dataIndex) {\n            var colOpts = this.s.colOpts;\n            var table = this.s.dt;\n            // For each item selected in the pane, check if it is available in the cell\n            for (var _i = 0, _a = this.s.selections; _i < _a.length; _i++) {\n                var colSelect = _a[_i];\n                if (typeof colSelect === 'string' && typeof filter === 'string') {\n                    // The filter value will not have the &amp; in place but a &,\n                    // so we need to do a replace to make sure that they will match\n                    colSelect = this._escapeHTML(colSelect);\n                }\n                // if the filter is an array then is the column present in it\n                if (Array.isArray(filter)) {\n                    if (colOpts.combiner === 'and') {\n                        if (!filter.includes(colSelect)) {\n                            return false;\n                        }\n                    }\n                    else if (filter.includes(colSelect)) {\n                        return true;\n                    }\n                }\n                // if the filter is a function then does it meet the criteria of that function or not\n                else if (typeof colSelect === 'function') {\n                    if (colSelect.call(table, table.row(dataIndex).data(), dataIndex)) {\n                        if (colOpts.combiner === 'or') {\n                            return true;\n                        }\n                    }\n                    // If the combiner is an \"and\" then we need to check against all possible selections\n                    // so if it fails here then the and is not met and return false\n                    else if (colOpts.combiner === 'and') {\n                        return false;\n                    }\n                }\n                // otherwise if the two filter values are equal then return true\n                else if (filter === colSelect ||\n                    // Loose type checking incase number type in column comparing to a string\n                    // eslint-disable-next-line eqeqeq\n                    !(typeof filter === 'string' && filter.length === 0) && filter == colSelect ||\n                    colSelect === null && typeof filter === 'string' && filter === '') {\n                    return true;\n                }\n            }\n            // If the combiner is an and then we need to check against all possible selections\n            // so return true here if so because it would have returned false earlier if it had failed\n            if (colOpts.combiner === 'and') {\n                return true;\n            }\n            // Otherwise it hasn't matched with anything by this point so it must be false\n            return false;\n        };\n        /**\n         * Creates the contents of the searchCont div\n         *\n         * NOTE This is overridden when semantic ui styling in order to integrate the search button into the text box.\n         */\n        SearchPane.prototype._searchContSetup = function () {\n            if (this.c.controls && this.s.colOpts.controls) {\n                this.dom.searchButton.appendTo(this.dom.searchLabelCont);\n            }\n            if (!(this.c.dtOpts.searching === false ||\n                this.s.colOpts.dtOpts.searching === false ||\n                this.s.customPaneSettings &&\n                    this.s.customPaneSettings.dtOpts &&\n                    this.s.customPaneSettings.dtOpts.searching !== undefined &&\n                    !this.s.customPaneSettings.dtOpts.searching)) {\n                this.dom.searchLabelCont.appendTo(this.dom.searchCont);\n            }\n        };\n        /**\n         * Adds outline to the pane when a selection has been made\n         */\n        SearchPane.prototype._searchExtras = function () {\n            var updating = this.s.updating;\n            this.s.updating = true;\n            var filters = this.s.dtPane.rows({ selected: true }).data().pluck('filter').toArray();\n            var nullIndex = filters.indexOf(this.emptyMessage());\n            var container = $$5(this.s.dtPane.table().container());\n            // If null index is found then search for empty cells as a filter.\n            if (nullIndex > -1) {\n                filters[nullIndex] = '';\n            }\n            // If a filter has been applied then outline the respective pane, remove it when it no longer is.\n            if (filters.length > 0) {\n                container.addClass(this.classes.selected);\n            }\n            else if (filters.length === 0) {\n                container.removeClass(this.classes.selected);\n            }\n            this.s.updating = updating;\n        };\n        SearchPane.version = '2.1.2';\n        SearchPane.classes = {\n            bordered: 'dtsp-bordered',\n            buttonGroup: 'dtsp-buttonGroup',\n            buttonSub: 'dtsp-buttonSub',\n            caret: 'dtsp-caret',\n            clear: 'dtsp-clear',\n            clearAll: 'dtsp-clearAll',\n            clearButton: 'clearButton',\n            collapseAll: 'dtsp-collapseAll',\n            collapseButton: 'dtsp-collapseButton',\n            container: 'dtsp-searchPane',\n            countButton: 'dtsp-countButton',\n            disabledButton: 'dtsp-disabledButton',\n            hidden: 'dtsp-hidden',\n            hide: 'dtsp-hide',\n            layout: 'dtsp-',\n            name: 'dtsp-name',\n            nameButton: 'dtsp-nameButton',\n            nameCont: 'dtsp-nameCont',\n            narrow: 'dtsp-narrow',\n            paneButton: 'dtsp-paneButton',\n            paneInputButton: 'dtsp-paneInputButton',\n            pill: 'dtsp-pill',\n            rotated: 'dtsp-rotated',\n            search: 'dtsp-search',\n            searchCont: 'dtsp-searchCont',\n            searchIcon: 'dtsp-searchIcon',\n            searchLabelCont: 'dtsp-searchButtonCont',\n            selected: 'dtsp-selected',\n            smallGap: 'dtsp-smallGap',\n            subRow1: 'dtsp-subRow1',\n            subRow2: 'dtsp-subRow2',\n            subRowsContainer: 'dtsp-subRowsContainer',\n            title: 'dtsp-title',\n            topRow: 'dtsp-topRow'\n        };\n        // Define SearchPanes default options\n        SearchPane.defaults = {\n            clear: true,\n            collapse: true,\n            combiner: 'or',\n            container: function (dt) {\n                return dt.table().container();\n            },\n            controls: true,\n            dtOpts: {},\n            emptyMessage: null,\n            hideCount: false,\n            i18n: {\n                clearPane: '&times;',\n                count: '{total}',\n                emptyMessage: '<em>No data</em>'\n            },\n            initCollapsed: false,\n            layout: 'auto',\n            name: undefined,\n            orderable: true,\n            orthogonal: {\n                display: 'display',\n                filter: 'filter',\n                hideCount: false,\n                search: 'filter',\n                show: undefined,\n                sort: 'sort',\n                threshold: 0.6,\n                type: 'type',\n                viewCount: true\n            },\n            preSelect: [],\n            threshold: 0.6,\n            viewCount: true\n        };\n        return SearchPane;\n    }());\n\n    var __extends$4 = (window && window.__extends) || (function () {\n        var extendStatics = function (d, b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n                function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n            return extendStatics(d, b);\n        };\n        return function (d, b) {\n            extendStatics(d, b);\n            function __() { this.constructor = d; }\n            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n        };\n    })();\n    var SearchPaneST = /** @class */ (function (_super) {\n        __extends$4(SearchPaneST, _super);\n        function SearchPaneST(paneSettings, opts, index, panesContainer, panes) {\n            return _super.call(this, paneSettings, opts, index, panesContainer, panes) || this;\n        }\n        /**\n         * Populates the SearchPane based off of the data that has been recieved from the server\n         *\n         * This method overrides SearchPane's _serverPopulate() method\n         *\n         * @param dataIn The data that has been sent from the server\n         */\n        SearchPaneST.prototype._serverPopulate = function (dataIn) {\n            this.s.rowData.binsShown = {};\n            this.s.rowData.arrayFilter = [];\n            if (dataIn.tableLength !== undefined) {\n                this.s.tableLength = dataIn.tableLength;\n                this.s.rowData.totalOptions = this.s.tableLength;\n            }\n            else if (this.s.tableLength === null || this.s.dt.rows()[0].length > this.s.tableLength) {\n                this.s.tableLength = this.s.dt.rows()[0].length;\n                this.s.rowData.totalOptions = this.s.tableLength;\n            }\n            var colTitle = this.s.dt.column(this.s.index).dataSrc();\n            // If there is SP data for this column add it to the data array and bin\n            if (dataIn.searchPanes.options[colTitle] !== undefined) {\n                for (var _i = 0, _a = dataIn.searchPanes.options[colTitle]; _i < _a.length; _i++) {\n                    var dataPoint = _a[_i];\n                    this.s.rowData.arrayFilter.push({\n                        display: dataPoint.label,\n                        filter: dataPoint.value,\n                        shown: +dataPoint.count,\n                        sort: dataPoint.label,\n                        total: +dataPoint.total,\n                        type: dataPoint.label\n                    });\n                    this.s.rowData.binsShown[dataPoint.value] = +dataPoint.count;\n                    this.s.rowData.bins[dataPoint.value] = +dataPoint.total;\n                }\n            }\n            var binLength = Object.keys(this.s.rowData.bins).length;\n            var uniqueRatio = this._uniqueRatio(binLength, this.s.tableLength);\n            // Don't show the pane if there isnt enough variance in the data, or there is only 1 entry for that pane\n            if (!this.s.colOpts.show &&\n                this.s.displayed === false &&\n                ((this.s.colOpts.show === undefined && this.s.colOpts.threshold === null ?\n                    uniqueRatio > this.c.threshold :\n                    uniqueRatio > this.s.colOpts.threshold) ||\n                    this.s.colOpts.show !== true && binLength <= 1)) {\n                this.dom.container.addClass(this.classes.hidden);\n                this.s.displayed = false;\n                return;\n            }\n            // Store the original data\n            this.s.rowData.arrayOriginal = this.s.rowData.arrayFilter;\n            this.s.rowData.binsOriginal = this.s.rowData.bins;\n            // Flag this pane as being displayed\n            this.s.displayed = true;\n            // If the pane exists\n            if (this.s.dtPane) {\n                // Not the selections that have been made and remove all of the rows\n                var selected = this.s.serverSelect;\n                this.s.dtPane.rows().remove();\n                // Add the rows that are to be shown into the pane\n                for (var _b = 0, _c = this.s.rowData.arrayFilter; _b < _c.length; _b++) {\n                    var data = _c[_b];\n                    if (this._shouldAddRow(data)) {\n                        var row = this.addRow(data.display, data.filter, data.sort, data.type);\n                        // Select the row if it was selected before\n                        for (var i = 0; i < selected.length; i++) {\n                            var selection = selected[i];\n                            if (selection.filter === data.filter) {\n                                // This flag stops another request being made to the server\n                                this.s.serverSelecting = true;\n                                row.select();\n                                this.s.serverSelecting = false;\n                                // Remove the selection from the to select list and add it to the selected list\n                                selected.splice(i, 1);\n                                this.s.selections.push(data.filter);\n                                break;\n                            }\n                        }\n                    }\n                }\n                // Remake any selections that are no longer present\n                for (var _d = 0, selected_1 = selected; _d < selected_1.length; _d++) {\n                    var selection = selected_1[_d];\n                    for (var _e = 0, _f = this.s.rowData.arrayOriginal; _e < _f.length; _e++) {\n                        var data = _f[_e];\n                        if (data.filter === selection.filter) {\n                            var row = this.addRow(data.display, data.filter, data.sort, data.type);\n                            this.s.serverSelecting = true;\n                            row.select();\n                            this.s.serverSelecting = false;\n                            this.s.selections.push(data.filter);\n                        }\n                    }\n                }\n                // Store the selected rows\n                this.s.serverSelect = this.s.dtPane.rows({ selected: true }).data().toArray();\n                // Update the pane\n                this.s.dtPane.draw();\n            }\n        };\n        /**\n         * This method updates the rows and their data within the SearchPanes\n         *\n         * SearchPaneCascade overrides this method\n         */\n        SearchPaneST.prototype.updateRows = function () {\n            if (!this.s.dt.page.info().serverSide) {\n                // Get the latest count values from the table\n                this.s.rowData.binsShown = {};\n                for (var _i = 0, _a = this.s.dt.rows({ search: 'applied' }).indexes().toArray(); _i < _a.length; _i++) {\n                    var index = _a[_i];\n                    this._updateShown(index, this.s.dt.settings()[0], this.s.rowData.binsShown);\n                }\n            }\n            // Update the rows data to show the current counts\n            for (var _b = 0, _c = this.s.dtPane.rows().data().toArray(); _b < _c.length; _b++) {\n                var row = _c[_b];\n                row.shown = typeof this.s.rowData.binsShown[row.filter] === 'number' ?\n                    this.s.rowData.binsShown[row.filter] :\n                    0;\n                this.s.dtPane.row(row.index).data(row);\n            }\n            // Show updates in the pane\n            this.s.dtPane.draw();\n            this.s.dtPane.table().node().parentNode.scrollTop = this.s.scrollTop;\n        };\n        /**\n         * Remove functionality from makeSelection - needs to be more advanced when tracking selections\n         */\n        SearchPaneST.prototype._makeSelection = function () {\n            return;\n        };\n        /**\n         * Blank method to remove reloading of selected rows - needs to be more advanced when tracking selections\n         */\n        SearchPaneST.prototype._reloadSelect = function () {\n            return;\n        };\n        /**\n         * Decides if a row should be added when being added from the server\n         *\n         * Overridden by SearchPaneCascade\n         *\n         * @param data the row data\n         * @returns boolean indicating if the row should be added or not\n         */\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        SearchPaneST.prototype._shouldAddRow = function (data) {\n            return true;\n        };\n        /**\n         * Updates the server selection list where appropriate\n         */\n        SearchPaneST.prototype._updateSelection = function () {\n            if (this.s.dt.page.info().serverSide && !this.s.updating && !this.s.serverSelecting) {\n                this.s.serverSelect = this.s.dtPane.rows({ selected: true }).data().toArray();\n            }\n        };\n        /**\n         * Used when binning the data for a column\n         *\n         * @param rowIdx The current row that is to be added to the bins\n         * @param settings The datatables settings object\n         * @param bins The bins object that is to be incremented\n         */\n        SearchPaneST.prototype._updateShown = function (rowIdx, settings, bins) {\n            if (bins === void 0) { bins = this.s.rowData.binsShown; }\n            var orth = typeof this.s.colOpts.orthogonal === 'string'\n                ? this.s.colOpts.orthogonal\n                : this.s.colOpts.orthogonal.search;\n            var filter = settings.oApi._fnGetCellData(settings, rowIdx, this.s.index, orth);\n            var add = function (f) {\n                if (!bins[f]) {\n                    bins[f] = 1;\n                }\n                else {\n                    bins[f]++;\n                }\n            };\n            if (Array.isArray(filter)) {\n                for (var _i = 0, filter_1 = filter; _i < filter_1.length; _i++) {\n                    var f = filter_1[_i];\n                    add(f);\n                }\n            }\n            else {\n                add(filter);\n            }\n        };\n        return SearchPaneST;\n    }(SearchPane));\n\n    var __extends$3 = (window && window.__extends) || (function () {\n        var extendStatics = function (d, b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n                function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n            return extendStatics(d, b);\n        };\n        return function (d, b) {\n            extendStatics(d, b);\n            function __() { this.constructor = d; }\n            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n        };\n    })();\n    var $$4;\n    function setJQuery$3(jq) {\n        $$4 = jq;\n    }\n    var SearchPaneViewTotal = /** @class */ (function (_super) {\n        __extends$3(SearchPaneViewTotal, _super);\n        function SearchPaneViewTotal(paneSettings, opts, index, panesContainer, panes) {\n            var _this = this;\n            var override = {\n                i18n: {\n                    countFiltered: '{shown} ({total})'\n                }\n            };\n            _this = _super.call(this, paneSettings, $$4.extend(override, opts), index, panesContainer, panes) || this;\n            return _this;\n        }\n        /**\n         * Gets the message that is to be used to indicate the count for each SearchPane row\n         *\n         * This method overrides _getMessage() in SearchPane and is overridden by SearchPaneCascadeViewTotal\n         *\n         * @param row The row object that is being processed\n         * @returns string - the message that is to be shown for the count of each entry\n         */\n        SearchPaneViewTotal.prototype._getMessage = function (row) {\n            var countMessage = this.s.dt.i18n('searchPanes.count', this.c.i18n.count);\n            var filteredMessage = this.s.dt.i18n('searchPanes.countFiltered', this.c.i18n.countFiltered);\n            return (this.s.filteringActive ? filteredMessage : countMessage)\n                .replace(/{total}/g, row.total)\n                .replace(/{shown}/g, row.shown);\n        };\n        /**\n         * Overrides the blank method in SearchPane to return the number of times a given value is currently being displayed\n         *\n         * @param filter The filter value\n         * @returns number - The number of times the value is shown\n         */\n        SearchPaneViewTotal.prototype._getShown = function (filter) {\n            return this.s.rowData.binsShown && this.s.rowData.binsShown[filter] ?\n                this.s.rowData.binsShown[filter] :\n                0;\n        };\n        return SearchPaneViewTotal;\n    }(SearchPaneST));\n\n    var __extends$2 = (window && window.__extends) || (function () {\n        var extendStatics = function (d, b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n                function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n            return extendStatics(d, b);\n        };\n        return function (d, b) {\n            extendStatics(d, b);\n            function __() { this.constructor = d; }\n            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n        };\n    })();\n    var $$3;\n    function setJQuery$2(jq) {\n        $$3 = jq;\n    }\n    var SearchPaneCascade = /** @class */ (function (_super) {\n        __extends$2(SearchPaneCascade, _super);\n        function SearchPaneCascade(paneSettings, opts, index, panesContainer, panes) {\n            var _this = this;\n            var override = {\n                i18n: {\n                    count: '{shown}'\n                }\n            };\n            _this = _super.call(this, paneSettings, $$3.extend(override, opts), index, panesContainer, panes) || this;\n            return _this;\n        }\n        /**\n         * This method updates the rows and their data within the SearchPanes\n         *\n         * This overrides the method in SearchPane\n         */\n        SearchPaneCascade.prototype.updateRows = function () {\n            // Note the currently selected values in the pane and remove all of the rows\n            var selected = this.s.dtPane.rows({ selected: true }).data().toArray();\n            if (this.s.colOpts.options ||\n                this.s.customPaneSettings && this.s.customPaneSettings.options) {\n                // If there are custom options set or it is a custom pane then get them\n                this._getComparisonRows();\n                var rows = this.s.dtPane.rows().toArray()[0];\n                for (var i = 0; i < rows.length; i++) {\n                    var row = this.s.dtPane.row(rows[i]);\n                    var rowData = row.data();\n                    if (rowData === undefined) {\n                        continue;\n                    }\n                    if (rowData.shown === 0) {\n                        row.remove();\n                        rows = this.s.dtPane.rows().toArray()[0];\n                        i--;\n                        continue;\n                    }\n                    for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) {\n                        var selection = selected_1[_i];\n                        if (rowData.filter === selection.filter) {\n                            row.select();\n                            selected.splice(i, 1);\n                            this.s.selections.push(rowData.filter);\n                            break;\n                        }\n                    }\n                }\n            }\n            else {\n                if (!this.s.dt.page.info().serverSide) {\n                    // Get the latest count values from the table\n                    this._activePopulatePane();\n                    this.s.rowData.binsShown = {};\n                    for (var _a = 0, _b = this.s.dt.rows({ search: 'applied' }).indexes().toArray(); _a < _b.length; _a++) {\n                        var index = _b[_a];\n                        this._updateShown(index, this.s.dt.settings()[0], this.s.rowData.binsShown);\n                    }\n                }\n                this.s.dtPane.rows().remove();\n                // Go over all of the rows that could be displayed\n                for (var _c = 0, _d = this.s.rowData.arrayFilter; _c < _d.length; _c++) {\n                    var data = _d[_c];\n                    // Cascade - If there are no rows present in the table don't show the option\n                    if (data.shown === 0) {\n                        continue;\n                    }\n                    // Add the row to the pane\n                    var row = this.addRow(data.display, data.filter, data.sort, data.type, undefined);\n                    // Check if this row was selected\n                    for (var i = 0; i < selected.length; i++) {\n                        var selection = selected[i];\n                        if (selection.filter === data.filter) {\n                            row.select();\n                            // Remove the row from the to find list and then add it to the selections list\n                            selected.splice(i, 1);\n                            this.s.selections.push(data.filter);\n                            break;\n                        }\n                    }\n                }\n                // Add all of the rows that were previously selected but aren't any more\n                for (var _e = 0, selected_2 = selected; _e < selected_2.length; _e++) {\n                    var selection = selected_2[_e];\n                    for (var _f = 0, _g = this.s.rowData.arrayOriginal; _f < _g.length; _f++) {\n                        var data = _g[_f];\n                        if (data.filter === selection.filter) {\n                            var row = this.addRow(data.display, data.filter, data.sort, data.type, undefined);\n                            row.select();\n                            this.s.selections.push(data.filter);\n                        }\n                    }\n                }\n            }\n            // Show updates in the pane\n            this.s.dtPane.draw();\n            this.s.dtPane.table().node().parentNode.scrollTop = this.s.scrollTop;\n            // If client side updated the tables results\n            if (!this.s.dt.page.info().serverSide) {\n                this.s.dt.draw(false);\n            }\n        };\n        /**\n         * Fill the array with the values that are currently being displayed in the table\n         */\n        SearchPaneCascade.prototype._activePopulatePane = function () {\n            this.s.rowData.arrayFilter = [];\n            this.s.rowData.bins = {};\n            var settings = this.s.dt.settings()[0];\n            if (!this.s.dt.page.info().serverSide) {\n                for (var _i = 0, _a = this.s.dt.rows({ search: 'applied' }).indexes().toArray(); _i < _a.length; _i++) {\n                    var index = _a[_i];\n                    this._populatePaneArray(index, this.s.rowData.arrayFilter, settings);\n                }\n            }\n        };\n        SearchPaneCascade.prototype._getComparisonRows = function () {\n            // Find the appropriate options depending on whether this is a pane for a specific column or a custom pane\n            var options = this.s.colOpts.options\n                ? this.s.colOpts.options\n                : this.s.customPaneSettings && this.s.customPaneSettings.options\n                    ? this.s.customPaneSettings.options\n                    : undefined;\n            if (options === undefined) {\n                return;\n            }\n            var allRows = this.s.dt.rows();\n            var shownRows = this.s.dt.rows({ search: 'applied' });\n            var tableValsTotal = allRows.data().toArray();\n            var tableValsShown = shownRows.data().toArray();\n            var rows = [];\n            // Clear all of the other rows from the pane, only custom options are to be displayed when they are defined\n            this.s.dtPane.clear();\n            this.s.indexes = [];\n            for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n                var comp = options_1[_i];\n                // Initialise the object which is to be placed in the row\n                var insert = comp.label !== '' ?\n                    comp.label :\n                    this.emptyMessage();\n                var comparisonObj = {\n                    className: comp.className,\n                    display: insert,\n                    filter: typeof comp.value === 'function' ? comp.value : [],\n                    shown: 0,\n                    sort: insert,\n                    total: 0,\n                    type: insert\n                };\n                // If a custom function is in place\n                if (typeof comp.value === 'function') {\n                    // Count the number of times the function evaluates to true for the original data in the Table\n                    for (var i = 0; i < tableValsTotal.length; i++) {\n                        if (comp.value.call(this.s.dt, tableValsTotal[i], allRows[0][i])) {\n                            comparisonObj.total++;\n                        }\n                    }\n                    for (var i = 0; i < tableValsShown.length; i++) {\n                        if (comp.value.call(this.s.dt, tableValsShown[i], shownRows[0][i])) {\n                            comparisonObj.shown++;\n                        }\n                    }\n                    // Update the comparisonObj\n                    if (typeof comparisonObj.filter !== 'function') {\n                        comparisonObj.filter.push(comp.filter);\n                    }\n                }\n                rows.push(this.addRow(comparisonObj.display, comparisonObj.filter, comparisonObj.sort, comparisonObj.type, comparisonObj.className, comparisonObj.total, comparisonObj.shown));\n            }\n            return rows;\n        };\n        /**\n         * Gets the message that is to be used to indicate the count for each SearchPane row\n         *\n         * This method overrides _getMessage() in SearchPane and is overridden by SearchPaneCascadeViewTotal\n         *\n         * @param row The row object that is being processed\n         * @returns string - the message that is to be shown for the count of each entry\n         */\n        SearchPaneCascade.prototype._getMessage = function (row) {\n            return this.s.dt.i18n('searchPanes.count', this.c.i18n.count)\n                .replace(/{total}/g, row.total)\n                .replace(/{shown}/g, row.shown);\n        };\n        /**\n         * Overrides the blank method in SearchPane to return the number of times a given value is currently being displayed\n         *\n         * @param filter The filter value\n         * @returns number - The number of times the value is shown\n         */\n        SearchPaneCascade.prototype._getShown = function (filter) {\n            return this.s.rowData.binsShown && this.s.rowData.binsShown[filter] ?\n                this.s.rowData.binsShown[filter] :\n                0;\n        };\n        /**\n         * Decides if a row should be added when being added from the server\n         *\n         * Overrides method in by SearchPaneST\n         *\n         * @param data the row data\n         * @returns boolean indicating if the row should be added or not\n         */\n        SearchPaneCascade.prototype._shouldAddRow = function (data) {\n            return data.shown > 0;\n        };\n        return SearchPaneCascade;\n    }(SearchPaneST));\n\n    var __extends$1 = (window && window.__extends) || (function () {\n        var extendStatics = function (d, b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n                function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n            return extendStatics(d, b);\n        };\n        return function (d, b) {\n            extendStatics(d, b);\n            function __() { this.constructor = d; }\n            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n        };\n    })();\n    var $$2;\n    function setJQuery$1(jq) {\n        $$2 = jq;\n    }\n    var SearchPaneCascadeViewTotal = /** @class */ (function (_super) {\n        __extends$1(SearchPaneCascadeViewTotal, _super);\n        function SearchPaneCascadeViewTotal(paneSettings, opts, index, panesContainer, panes) {\n            var _this = this;\n            var override = {\n                i18n: {\n                    count: '{total}',\n                    countFiltered: '{shown} ({total})'\n                }\n            };\n            _this = _super.call(this, paneSettings, $$2.extend(override, opts), index, panesContainer, panes) || this;\n            return _this;\n        }\n        /**\n         * Fill the array with the values that are currently being displayed in the table\n         *\n         * This method overrides _activePopulatePane() in SearchPaneCascade\n         */\n        SearchPaneCascadeViewTotal.prototype._activePopulatePane = function () {\n            this.s.rowData.arrayFilter = [];\n            this.s.rowData.binsShown = {};\n            var settings = this.s.dt.settings()[0];\n            if (!this.s.dt.page.info().serverSide) {\n                for (var _i = 0, _a = this.s.dt.rows({ search: 'applied' }).indexes().toArray(); _i < _a.length; _i++) {\n                    var index = _a[_i];\n                    this._populatePaneArray(index, this.s.rowData.arrayFilter, settings, this.s.rowData.binsShown);\n                }\n            }\n        };\n        /**\n         * Gets the message that is to be used to indicate the count for each SearchPane row\n         *\n         * This method overrides _getMessage() in SearchPaneCascade\n         *\n         * @param row The row object that is being processed\n         * @returns string - the message that is to be shown for the count of each entry\n         */\n        SearchPaneCascadeViewTotal.prototype._getMessage = function (row) {\n            var countMessage = this.s.dt.i18n('searchPanes.count', this.c.i18n.count);\n            var filteredMessage = this.s.dt.i18n('searchPanes.countFiltered', this.c.i18n.countFiltered);\n            return (this.s.filteringActive ? filteredMessage : countMessage)\n                .replace(/{total}/g, row.total)\n                .replace(/{shown}/g, row.shown);\n        };\n        return SearchPaneCascadeViewTotal;\n    }(SearchPaneCascade));\n\n    var $$1;\n    var dataTable$1;\n    function setJQuery(jq) {\n        $$1 = jq;\n        dataTable$1 = jq.fn.dataTable;\n    }\n    var SearchPanes = /** @class */ (function () {\n        function SearchPanes(paneSettings, opts, fromPreInit, paneClass) {\n            var _this = this;\n            if (fromPreInit === void 0) { fromPreInit = false; }\n            if (paneClass === void 0) { paneClass = SearchPane; }\n            // Check that the required version of DataTables is included\n            if (!dataTable$1 || !dataTable$1.versionCheck || !dataTable$1.versionCheck('1.10.0')) {\n                throw new Error('SearchPane requires DataTables 1.10 or newer');\n            }\n            // Check that Select is included\n            // eslint-disable-next-line no-extra-parens\n            if (!dataTable$1.select) {\n                throw new Error('SearchPane requires Select');\n            }\n            var table = new dataTable$1.Api(paneSettings);\n            this.classes = $$1.extend(true, {}, SearchPanes.classes);\n            // Get options from user\n            this.c = $$1.extend(true, {}, SearchPanes.defaults, opts);\n            // Add extra elements to DOM object including clear\n            this.dom = {\n                clearAll: $$1('<button type=\"button\"/>')\n                    .addClass(this.classes.clearAll)\n                    .html(table.i18n('searchPanes.clearMessage', this.c.i18n.clearMessage)),\n                collapseAll: $$1('<button type=\"button\"/>')\n                    .addClass(this.classes.collapseAll)\n                    .html(table.i18n('searchPanes.collapseMessage', this.c.i18n.collapseMessage)),\n                container: $$1('<div/>').addClass(this.classes.panes).html(table.i18n('searchPanes.loadMessage', this.c.i18n.loadMessage)),\n                emptyMessage: $$1('<div/>').addClass(this.classes.emptyMessage),\n                panes: $$1('<div/>').addClass(this.classes.container),\n                showAll: $$1('<button type=\"button\"/>')\n                    .addClass(this.classes.showAll)\n                    .addClass(this.classes.disabledButton)\n                    .attr('disabled', 'true')\n                    .html(table.i18n('searchPanes.showMessage', this.c.i18n.showMessage)),\n                title: $$1('<div/>').addClass(this.classes.title),\n                titleRow: $$1('<div/>').addClass(this.classes.titleRow)\n            };\n            this.s = {\n                colOpts: [],\n                dt: table,\n                filterCount: 0,\n                minPaneWidth: 260.0,\n                page: 0,\n                paging: false,\n                pagingST: false,\n                paneClass: paneClass,\n                panes: [],\n                selectionList: [],\n                serverData: {},\n                stateRead: false,\n                updating: false\n            };\n            // Do not reinitialise if already initialised on table\n            if (table.settings()[0]._searchPanes) {\n                return;\n            }\n            this._getState();\n            if (this.s.dt.page.info().serverSide) {\n                var hostSettings = this.s.dt.settings()[0];\n                // Listener to get the data into the server request before it is made\n                this.s.dt.on('preXhr.dtsps', function (e, settings, data) {\n                    if (hostSettings !== settings) {\n                        return;\n                    }\n                    if (data.searchPanes === undefined) {\n                        data.searchPanes = {};\n                    }\n                    if (data.searchPanes_null === undefined) {\n                        data.searchPanes_null = {};\n                    }\n                    var src;\n                    for (var _i = 0, _a = _this.s.selectionList; _i < _a.length; _i++) {\n                        var selection = _a[_i];\n                        src = _this.s.dt.column(selection.column).dataSrc();\n                        if (data.searchPanes[src] === undefined) {\n                            data.searchPanes[src] = {};\n                        }\n                        if (data.searchPanes_null[src] === undefined) {\n                            data.searchPanes_null[src] = {};\n                        }\n                        for (var i = 0; i < selection.rows.length; i++) {\n                            data.searchPanes[src][i] = selection.rows[i];\n                            if (data.searchPanes[src][i] === null) {\n                                data.searchPanes_null[src][i] = true;\n                            }\n                        }\n                    }\n                    if (_this.s.selectionList.length > 0) {\n                        data.searchPanesLast = src;\n                    }\n                    // Config options that will change how the querying is done\n                    data.searchPanes_options = {\n                        cascade: _this.c.cascadePanes,\n                        viewCount: _this.c.viewCount,\n                        viewTotal: _this.c.viewTotal\n                    };\n                });\n            }\n            this._setXHR();\n            table.settings()[0]._searchPanes = this;\n            if (this.s.dt.settings()[0]._bInitComplete || fromPreInit) {\n                this._paneDeclare(table, paneSettings, opts);\n            }\n            else {\n                table.one('preInit.dtsps', function () {\n                    _this._paneDeclare(table, paneSettings, opts);\n                });\n            }\n            return this;\n        }\n        /**\n         * Clear the selections of all of the panes\n         */\n        SearchPanes.prototype.clearSelections = function () {\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.dtPane) {\n                    pane.s.scrollTop = pane.s.dtPane.table().node().parentNode.scrollTop;\n                }\n            }\n            // Load in all of the searchBoxes in the documents\n            var searches = this.dom.container.find('.' + this.classes.search.replace(/\\s+/g, '.'));\n            // For each searchBox set the input text to be empty and then trigger\n            // an input on them so that they no longer filter the panes\n            searches.each(function () {\n                $$1(this).val('').trigger('input');\n            });\n            // Clear the selectionList\n            this.s.selectionList = [];\n            var returnArray = [];\n            for (var _b = 0, _c = this.s.panes; _b < _c.length; _b++) {\n                var pane = _c[_b];\n                if (pane.s.dtPane) {\n                    returnArray.push(pane.clearPane());\n                }\n            }\n            return returnArray;\n        };\n        /**\n         * returns the container node for the searchPanes\n         */\n        SearchPanes.prototype.getNode = function () {\n            return this.dom.container;\n        };\n        /**\n         * rebuilds all of the panes\n         */\n        SearchPanes.prototype.rebuild = function (targetIdx, maintainSelection) {\n            if (targetIdx === void 0) { targetIdx = false; }\n            if (maintainSelection === void 0) { maintainSelection = false; }\n            this.dom.emptyMessage.detach();\n            // As a rebuild from scratch is required, empty the searchpanes container.\n            if (targetIdx === false) {\n                this.dom.panes.empty();\n            }\n            // Rebuild each pane individually, if a specific pane has been selected then only rebuild that one\n            var returnArray = [];\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (targetIdx === false || pane.s.index === targetIdx) {\n                    pane.clearData();\n                    pane.rebuildPane(this.s.dt.page.info().serverSide ?\n                        this.s.serverData :\n                        undefined, maintainSelection);\n                    this.dom.panes.append(pane.dom.container);\n                    returnArray.push(pane);\n                }\n            }\n            this._updateSelection();\n            // Attach panes, clear buttons, and title bar to the document\n            this._updateFilterCount();\n            this._attachPaneContainer();\n            this._initSelectionListeners(false);\n            // If the selections are to be maintained, then it is safe to assume that paging is also to be maintained\n            // Otherwise, the paging should be reset\n            this.s.dt.draw(!maintainSelection);\n            // Resize the panes incase there has been a change\n            this.resizePanes();\n            // If a single pane has been rebuilt then return only that pane\n            return returnArray.length === 1 ? returnArray[0] : returnArray;\n        };\n        /**\n         * Resizes all of the panes\n         */\n        SearchPanes.prototype.resizePanes = function () {\n            if (this.c.layout === 'auto') {\n                var contWidth = $$1(this.s.dt.searchPanes.container()).width();\n                var target = Math.floor(contWidth / this.s.minPaneWidth); // The neatest number of panes per row\n                var highest_1 = 1;\n                var highestmod_1 = 0;\n                // Get the indexes of all of the displayed panes\n                var dispIndex = [];\n                for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                    var pane = _a[_i];\n                    if (pane.s.displayed) {\n                        dispIndex.push(pane.s.index);\n                    }\n                }\n                var displayCount = dispIndex.length;\n                // If the neatest number is the number we have then use this.\n                if (target === displayCount) {\n                    highest_1 = target;\n                }\n                else {\n                    // Go from the target down and find the value with the most panes left over, this will be the best fit\n                    for (var ppr = target; ppr > 1; ppr--) {\n                        var rem = displayCount % ppr;\n                        if (rem === 0) {\n                            highest_1 = ppr;\n                            highestmod_1 = 0;\n                            break;\n                        }\n                        // If there are more left over at this amount of panes per row (ppr)\n                        // then it fits better so new values\n                        else if (rem > highestmod_1) {\n                            highest_1 = ppr;\n                            highestmod_1 = rem;\n                        }\n                    }\n                }\n                // If there is a perfect fit then none are to be wider\n                var widerIndexes_1 = highestmod_1 !== 0 ? dispIndex.slice(dispIndex.length - highestmod_1, dispIndex.length) : [];\n                this.s.panes.forEach(function (pane) {\n                    // Resize the pane with the new layout\n                    if (pane.s.displayed) {\n                        pane.resize('columns-' + (!widerIndexes_1.includes(pane.s.index) ? highest_1 : highestmod_1));\n                    }\n                });\n            }\n            else {\n                for (var _b = 0, _c = this.s.panes; _b < _c.length; _b++) {\n                    var pane = _c[_b];\n                    pane.adjustTopRow();\n                }\n            }\n            return this;\n        };\n        /**\n         * Holder method that is userd in SearchPanesST to set listeners that have an effect on other panes\n         *\n         * @param isPreselect boolean to indicate if the preselect array is to override the current selection list.\n         */\n        SearchPanes.prototype._initSelectionListeners = function (isPreselect) {\n            return;\n        };\n        /**\n         * Blank method that is overridden in SearchPanesST to retrieve the totals from the server data\n         */\n        SearchPanes.prototype._serverTotals = function () {\n            return;\n        };\n        /**\n         * Set's the xhr listener so that SP can extact appropriate data from the response\n         */\n        SearchPanes.prototype._setXHR = function () {\n            var _this = this;\n            var hostSettings = this.s.dt.settings()[0];\n            var run = function (json) {\n                if (json && json.searchPanes && json.searchPanes.options) {\n                    _this.s.serverData = json;\n                    _this.s.serverData.tableLength = json.recordsTotal;\n                    _this._serverTotals();\n                }\n            };\n            // We are using the xhr event to rebuild the panes if required due to viewTotal being enabled\n            // If viewTotal is not enabled then we simply update the data from the server\n            this.s.dt.on('xhr.dtsps', function (e, settings, json) {\n                if (hostSettings === settings) {\n                    run(json);\n                }\n            });\n            // Account for the initial JSON fetch having already completed\n            run(this.s.dt.ajax.json());\n        };\n        /**\n         * Set's the function that is to be performed when a state is loaded\n         *\n         * Overridden by the method in SearchPanesST\n         */\n        SearchPanes.prototype._stateLoadListener = function () {\n            var _this = this;\n            var hostSettings = this.s.dt.settings()[0];\n            this.s.dt.on('stateLoadParams.dtsps', function (e, settings, data) {\n                if (data.searchPanes === undefined || settings !== hostSettings) {\n                    return;\n                }\n                _this.clearSelections();\n                // Set the selection list for the panes so that the correct\n                // rows can be reselected and in the right order\n                _this.s.selectionList =\n                    data.searchPanes.selectionList ?\n                        data.searchPanes.selectionList :\n                        [];\n                // Find the panes that match from the state and the actual instance\n                if (data.searchPanes.panes) {\n                    for (var _i = 0, _a = data.searchPanes.panes; _i < _a.length; _i++) {\n                        var loadedPane = _a[_i];\n                        for (var _b = 0, _c = _this.s.panes; _b < _c.length; _b++) {\n                            var pane = _c[_b];\n                            if (loadedPane.id === pane.s.index && pane.s.dtPane) {\n                                // Set the value of the searchbox\n                                pane.dom.searchBox.val(loadedPane.searchTerm);\n                                // Set the value of the order\n                                pane.s.dtPane.order(loadedPane.order);\n                            }\n                        }\n                    }\n                }\n                _this._makeSelections(_this.s.selectionList);\n            });\n        };\n        /**\n         * Updates the selectionList when cascade is not in place\n         *\n         * Overridden in SearchPanesST\n         */\n        SearchPanes.prototype._updateSelection = function () {\n            this.s.selectionList = [];\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.dtPane) {\n                    var rows = pane.s.dtPane.rows({ selected: true }).data().toArray().map(function (el) { return el.filter; });\n                    if (rows.length) {\n                        this.s.selectionList.push({\n                            column: pane.s.index,\n                            rows: rows\n                        });\n                    }\n                }\n            }\n        };\n        /**\n         * Attach the panes, buttons and title to the document\n         */\n        SearchPanes.prototype._attach = function () {\n            var _this = this;\n            this.dom.titleRow\n                .removeClass(this.classes.hide)\n                .detach()\n                .append(this.dom.title);\n            // If the clear button is permitted attach it\n            if (this.c.clear) {\n                this.dom.clearAll\n                    .appendTo(this.dom.titleRow)\n                    .on('click.dtsps', function () { return _this.clearSelections(); });\n            }\n            if (this.c.collapse) {\n                this.dom.showAll.appendTo(this.dom.titleRow);\n                this.dom.collapseAll.appendTo(this.dom.titleRow);\n                this._setCollapseListener();\n            }\n            // Attach the container for each individual pane to the overall container\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                this.dom.panes.append(pane.dom.container);\n            }\n            // Attach everything to the document\n            this.dom.container\n                .text('')\n                .removeClass(this.classes.hide)\n                .append(this.dom.titleRow)\n                .append(this.dom.panes);\n            // WORKAROUND\n            this.s.panes.forEach(function (pane) { return pane.setListeners(); });\n            if ($$1('div.' + this.classes.container).length === 0) {\n                this.dom.container.prependTo(this.s.dt);\n            }\n        };\n        /**\n         * If there are no panes to display then this method is called to either\n         * display a message in their place or hide them completely.\n         */\n        SearchPanes.prototype._attachMessage = function () {\n            // Create a message to display on the screen\n            var message;\n            try {\n                message = this.s.dt.i18n('searchPanes.emptyPanes', this.c.i18n.emptyPanes);\n            }\n            catch (error) {\n                message = null;\n            }\n            // If the message is an empty string then searchPanes.emptyPanes is undefined,\n            // therefore the pane container should be removed from the display\n            if (message === null) {\n                this.dom.container.addClass(this.classes.hide);\n                this.dom.titleRow.removeClass(this.classes.hide);\n                return;\n            }\n            // Otherwise display the message\n            this.dom.container.removeClass(this.classes.hide);\n            this.dom.titleRow.addClass(this.classes.hide);\n            this.dom.emptyMessage.html(message).appendTo(this.dom.container);\n        };\n        /**\n         * Attaches the panes to the document and displays a message or hides if there are none\n         */\n        SearchPanes.prototype._attachPaneContainer = function () {\n            // If a pane is to be displayed then attach the normal pane output\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.displayed === true) {\n                    this._attach();\n                    return;\n                }\n            }\n            // Otherwise attach the custom message or remove the container from the display\n            this._attachMessage();\n        };\n        /**\n         * Checks which panes are collapsed and then performs relevant actions to the collapse/show all buttons\n         */\n        SearchPanes.prototype._checkCollapse = function () {\n            var disableClose = true;\n            var disableShow = true;\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.displayed) {\n                    // If the pane is not collapsed\n                    if (!pane.dom.collapseButton.hasClass(pane.classes.rotated)) {\n                        // Enable the collapse all button\n                        this.dom.collapseAll.removeClass(this.classes.disabledButton).removeAttr('disabled');\n                        disableClose = false;\n                    }\n                    else {\n                        // Otherwise enable the show all button\n                        this.dom.showAll.removeClass(this.classes.disabledButton).removeAttr('disabled');\n                        disableShow = false;\n                    }\n                }\n            }\n            // If this flag is still true, no panes are open so the close button should be disabled\n            if (disableClose) {\n                this.dom.collapseAll.addClass(this.classes.disabledButton).attr('disabled', 'true');\n            }\n            // If this flag is still true, no panes are closed so the show button should be disabled\n            if (disableShow) {\n                this.dom.showAll.addClass(this.classes.disabledButton).attr('disabled', 'true');\n            }\n        };\n        /**\n         * Attaches the message to the document but does not add any panes\n         */\n        SearchPanes.prototype._checkMessage = function () {\n            // If a pane is to be displayed then attach the normal pane output\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.displayed === true) {\n                    // Ensure that the empty message is removed if a pane is displayed\n                    this.dom.emptyMessage.detach();\n                    this.dom.titleRow.removeClass(this.classes.hide);\n                    return;\n                }\n            }\n            // Otherwise attach the custom message or remove the container from the display\n            this._attachMessage();\n        };\n        /**\n         * Collapses all of the panes\n         */\n        SearchPanes.prototype._collapseAll = function () {\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                pane.collapse();\n            }\n        };\n        /**\n         * Finds a pane based upon the name of that pane\n         *\n         * @param name string representing the name of the pane\n         * @returns SearchPane The pane which has that name\n         */\n        SearchPanes.prototype._findPane = function (name) {\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (name === pane.s.name) {\n                    return pane;\n                }\n            }\n        };\n        /**\n         * Gets the selection list from the previous state and stores it in the selectionList Property\n         */\n        SearchPanes.prototype._getState = function () {\n            var loadedFilter = this.s.dt.state.loaded();\n            if (loadedFilter && loadedFilter.searchPanes && loadedFilter.searchPanes.selectionList) {\n                this.s.selectionList = loadedFilter.searchPanes.selectionList;\n            }\n        };\n        SearchPanes.prototype._makeSelections = function (selectList) {\n            for (var _i = 0, selectList_1 = selectList; _i < selectList_1.length; _i++) {\n                var selection = selectList_1[_i];\n                var pane = void 0;\n                for (var _a = 0, _b = this.s.panes; _a < _b.length; _a++) {\n                    var p = _b[_a];\n                    if (p.s.index === selection.column) {\n                        pane = p;\n                        break;\n                    }\n                }\n                if (pane && pane.s.dtPane) {\n                    for (var j = 0; j < pane.s.dtPane.rows().data().toArray().length; j++) {\n                        if (selection.rows.includes(typeof pane.s.dtPane.row(j).data().filter === 'function' ?\n                            pane.s.dtPane.cell(j, 0).data() :\n                            pane.s.dtPane.row(j).data().filter)) {\n                            pane.s.dtPane.row(j).select();\n                        }\n                    }\n                    pane.updateTable();\n                }\n            }\n        };\n        /**\n         * Declares the instances of individual searchpanes dependant on the number of columns.\n         * It is necessary to run this once preInit has completed otherwise no panes will be\n         * created as the column count will be 0.\n         *\n         * @param table the DataTable api for the parent table\n         * @param paneSettings the settings passed into the constructor\n         * @param opts the options passed into the constructor\n         */\n        SearchPanes.prototype._paneDeclare = function (table, paneSettings, opts) {\n            var _this = this;\n            // Create Panes\n            table\n                .columns(this.c.columns.length > 0 ? this.c.columns : undefined)\n                .eq(0)\n                .each(function (idx) {\n                _this.s.panes.push(new _this.s.paneClass(paneSettings, opts, idx, _this.dom.panes));\n            });\n            // If there is any extra custom panes defined then create panes for them too\n            var colCount = table.columns().eq(0).toArray().length;\n            for (var i = 0; i < this.c.panes.length; i++) {\n                var id = colCount + i;\n                this.s.panes.push(new this.s.paneClass(paneSettings, opts, id, this.dom.panes, this.c.panes[i]));\n            }\n            // If a custom ordering is being used\n            if (this.c.order.length > 0) {\n                // Make a new Array of panes based upon the order\n                this.s.panes = this.c.order.map(function (name) { return _this._findPane(name); });\n            }\n            // If this internal property is true then the DataTable has been initialised already\n            if (this.s.dt.settings()[0]._bInitComplete) {\n                this._startup(table);\n            }\n            else {\n                // Otherwise add the paneStartup function to the list of functions\n                // that are to be run when the table is initialised. This will garauntee that the\n                // panes are initialised before the init event and init Complete callback is fired\n                this.s.dt.settings()[0].aoInitComplete.push({\n                    fn: function () { return _this._startup(table); }\n                });\n            }\n        };\n        /**\n         * Sets the listeners for the collapse and show all buttons\n         * Also sets and performs checks on current panes to see if they are collapsed\n         */\n        SearchPanes.prototype._setCollapseListener = function () {\n            var _this = this;\n            this.dom.collapseAll.on('click.dtsps', function () {\n                _this._collapseAll();\n                _this.dom.collapseAll.addClass(_this.classes.disabledButton).attr('disabled', 'true');\n                _this.dom.showAll.removeClass(_this.classes.disabledButton).removeAttr('disabled');\n                _this.s.dt.state.save();\n            });\n            this.dom.showAll.on('click.dtsps', function () {\n                _this._showAll();\n                _this.dom.showAll.addClass(_this.classes.disabledButton).attr('disabled', 'true');\n                _this.dom.collapseAll.removeClass(_this.classes.disabledButton).removeAttr('disabled');\n                _this.s.dt.state.save();\n            });\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                // We want to make the same check whenever there is a collapse/expand\n                pane.dom.topRow.on('collapse.dtsps', function () { return _this._checkCollapse(); });\n            }\n            this._checkCollapse();\n        };\n        /**\n         * Shows all of the panes\n         */\n        SearchPanes.prototype._showAll = function () {\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                pane.show();\n            }\n        };\n        /**\n         * Initialises the tables previous/preset selections and initialises callbacks for events\n         *\n         * @param table the parent table for which the searchPanes are being created\n         */\n        SearchPanes.prototype._startup = function (table) {\n            var _this = this;\n            // Attach clear button and title bar to the document\n            this._attach();\n            this.dom.panes.empty();\n            var hostSettings = this.s.dt.settings()[0];\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                pane.rebuildPane(Object.keys(this.s.serverData).length > 0 ? this.s.serverData : undefined);\n                this.dom.panes.append(pane.dom.container);\n            }\n            // If the layout is set to auto then the panes need to be resized to their best fit\n            if (this.c.layout === 'auto') {\n                this.resizePanes();\n            }\n            var loadedFilter = this.s.dt.state.loaded();\n            // Reset the paging if that has been saved in the state\n            if (!this.s.stateRead && loadedFilter) {\n                this.s.dt\n                    .page(loadedFilter.start / this.s.dt.page.len())\n                    .draw('page');\n            }\n            this.s.stateRead = true;\n            this._checkMessage();\n            // When a draw is called on the DataTable, update all of the panes incase the data in the DataTable has changed\n            table.on('preDraw.dtsps', function () {\n                // Check that the panes are not updating to avoid infinite loops\n                // Also check that this draw is not due to paging\n                if (!_this.s.updating && !_this.s.paging) {\n                    _this._updateFilterCount();\n                    _this._updateSelection();\n                }\n                // Paging flag reset - we only need to dodge the draw once\n                _this.s.paging = false;\n            });\n            $$1(window).on('resize.dtsps', dataTable$1.util.throttle(function () { return _this.resizePanes(); }));\n            // Whenever a state save occurs store the selection list in the state object\n            this.s.dt.on('stateSaveParams.dtsps', function (e, settings, data) {\n                if (settings !== hostSettings) {\n                    return;\n                }\n                if (data.searchPanes === undefined) {\n                    data.searchPanes = {};\n                }\n                data.searchPanes.selectionList = _this.s.selectionList;\n            });\n            this._stateLoadListener();\n            // Listener for paging on main table\n            table.off('page.dtsps page-nc.dtsps').on('page.dtsps page-nc.dtsps', function (e, s) {\n                _this.s.paging = true;\n                // This is an indicator to any selection tracking classes that paging has occured\n                // It has to happen here so that we don't stack event listeners unnecessarily\n                // The value is only ever set back to false in the SearchPanesST class\n                // Equally it is never read in this class\n                _this.s.pagingST = true;\n                _this.s.page = _this.s.dt.page();\n            });\n            if (this.s.dt.page.info().serverSide) {\n                table.off('preXhr.dtsps').on('preXhr.dtsps', function (e, settings, data) {\n                    if (settings !== hostSettings) {\n                        return;\n                    }\n                    if (!data.searchPanes) {\n                        data.searchPanes = {};\n                    }\n                    if (!data.searchPanes_null) {\n                        data.searchPanes_null = {};\n                    }\n                    // Count how many filters are being applied\n                    var filterCount = 0;\n                    for (var _i = 0, _a = _this.s.panes; _i < _a.length; _i++) {\n                        var pane = _a[_i];\n                        var src = _this.s.dt.column(pane.s.index).dataSrc();\n                        if (!data.searchPanes[src]) {\n                            data.searchPanes[src] = {};\n                        }\n                        if (!data.searchPanes_null[src]) {\n                            data.searchPanes_null[src] = {};\n                        }\n                        if (pane.s.dtPane) {\n                            var rowData = pane.s.dtPane.rows({ selected: true }).data().toArray();\n                            for (var i = 0; i < rowData.length; i++) {\n                                data.searchPanes[src][i] = rowData[i].filter;\n                                if (!data.searchPanes[src][i]) {\n                                    data.searchPanes_null[src][i] = true;\n                                }\n                                filterCount++;\n                            }\n                        }\n                    }\n                    // If there is a filter to be applied, then we need to read from the start of the result set\n                    // and set the paging to 0. This matches the behaviour of client side processing\n                    if (filterCount > 0) {\n                        // If the number of filters has changed we need to read from the start of the\n                        // result set and reset the paging\n                        if (filterCount !== _this.s.filterCount) {\n                            data.start = 0;\n                            _this.s.page = 0;\n                        }\n                        // Otherwise it is a paging request and we need to read from whatever the paging has been set to\n                        else {\n                            data.start = _this.s.page * _this.s.dt.page.len();\n                        }\n                        _this.s.dt.page(_this.s.page);\n                        _this.s.filterCount = filterCount;\n                    }\n                    if (_this.s.selectionList.length > 0) {\n                        data.searchPanesLast = _this.s.dt\n                            .column(_this.s.selectionList[_this.s.selectionList.length - 1].column)\n                            .dataSrc();\n                    }\n                    // Config options that will change how the querying is done\n                    data.searchPanes_options = {\n                        cascade: _this.c.cascadePanes,\n                        viewCount: _this.c.viewCount,\n                        viewTotal: _this.c.viewTotal\n                    };\n                });\n            }\n            else {\n                table.on('preXhr.dtsps', function () { return _this.s.panes.forEach(function (pane) { return pane.clearData(); }); });\n            }\n            // If the data is reloaded from the server then it is possible that it has changed completely,\n            // so we need to rebuild the panes\n            this.s.dt.on('xhr.dtsps', function (e, settings) {\n                if (settings.nTable !== _this.s.dt.table().node()) {\n                    return;\n                }\n                if (!_this.s.dt.page.info().serverSide) {\n                    var processing_1 = false;\n                    _this.s.dt.one('preDraw.dtsps', function () {\n                        if (processing_1) {\n                            return;\n                        }\n                        var page = _this.s.dt.page();\n                        processing_1 = true;\n                        _this.s.updating = true;\n                        _this.dom.panes.empty();\n                        for (var _i = 0, _a = _this.s.panes; _i < _a.length; _i++) {\n                            var pane = _a[_i];\n                            pane.clearData(); // Clears all of the bins and will mean that the data has to be re-read\n                            // Pass a boolean to say whether this is the last choice made for maintaining selections\n                            // when rebuilding\n                            pane.rebuildPane(undefined, true);\n                            _this.dom.panes.append(pane.dom.container);\n                        }\n                        if (!_this.s.dt.page.info().serverSide) {\n                            _this.s.dt.draw();\n                        }\n                        _this.s.updating = false;\n                        _this._updateSelection();\n                        _this._checkMessage();\n                        _this.s.dt.one('draw.dtsps', function () {\n                            _this.s.updating = true;\n                            _this.s.dt.page(page).draw(false);\n                            _this.s.updating = false;\n                        });\n                    });\n                }\n            });\n            // PreSelect any selections which have been defined using the preSelect option\n            var selectList = this.c.preSelect;\n            if (loadedFilter && loadedFilter.searchPanes && loadedFilter.searchPanes.selectionList) {\n                selectList = loadedFilter.searchPanes.selectionList;\n            }\n            this._makeSelections(selectList);\n            // Update the title bar to show how many filters have been selected\n            this._updateFilterCount();\n            // If the table is destroyed and restarted then clear the selections so that they do not persist.\n            table.on('destroy.dtsps', function (e, settings) {\n                if (settings !== hostSettings) {\n                    return;\n                }\n                for (var _i = 0, _a = _this.s.panes; _i < _a.length; _i++) {\n                    var pane = _a[_i];\n                    pane.destroy();\n                }\n                table.off('.dtsps');\n                _this.dom.showAll.off('.dtsps');\n                _this.dom.clearAll.off('.dtsps');\n                _this.dom.collapseAll.off('.dtsps');\n                $$1(table.table().node()).off('.dtsps');\n                _this.dom.container.detach();\n                _this.clearSelections();\n            });\n            if (this.c.collapse) {\n                this._setCollapseListener();\n            }\n            // When the clear All button has been pressed clear all of the selections in the panes\n            if (this.c.clear) {\n                this.dom.clearAll.on('click.dtsps', function () { return _this.clearSelections(); });\n            }\n            hostSettings._searchPanes = this;\n            // This state save is required so that state is maintained over multiple refreshes if no actions are made\n            this.s.dt.state.save();\n        };\n        /**\n         * Updates the number of filters that have been applied in the title\n         */\n        SearchPanes.prototype._updateFilterCount = function () {\n            var filterCount = 0;\n            // Add the number of all of the filters throughout the panes\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.dtPane) {\n                    filterCount += pane.getPaneCount();\n                }\n            }\n            // Run the message through the internationalisation method to improve readability\n            this.dom.title.html(this.s.dt.i18n('searchPanes.title', this.c.i18n.title, filterCount));\n            if (this.c.filterChanged && typeof this.c.filterChanged === 'function') {\n                this.c.filterChanged.call(this.s.dt, filterCount);\n            }\n            if (filterCount === 0) {\n                this.dom.clearAll.addClass(this.classes.disabledButton).attr('disabled', 'true');\n            }\n            else {\n                this.dom.clearAll.removeClass(this.classes.disabledButton).removeAttr('disabled');\n            }\n        };\n        SearchPanes.version = '2.2.0';\n        SearchPanes.classes = {\n            clear: 'dtsp-clear',\n            clearAll: 'dtsp-clearAll',\n            collapseAll: 'dtsp-collapseAll',\n            container: 'dtsp-searchPanes',\n            disabledButton: 'dtsp-disabledButton',\n            emptyMessage: 'dtsp-emptyMessage',\n            hide: 'dtsp-hidden',\n            panes: 'dtsp-panesContainer',\n            search: 'dtsp-search',\n            showAll: 'dtsp-showAll',\n            title: 'dtsp-title',\n            titleRow: 'dtsp-titleRow'\n        };\n        // Define SearchPanes default options\n        SearchPanes.defaults = {\n            cascadePanes: false,\n            clear: true,\n            collapse: true,\n            columns: [],\n            container: function (dt) {\n                return dt.table().container();\n            },\n            filterChanged: undefined,\n            i18n: {\n                clearMessage: 'Clear All',\n                clearPane: '&times;',\n                collapse: {\n                    0: 'SearchPanes',\n                    _: 'SearchPanes (%d)'\n                },\n                collapseMessage: 'Collapse All',\n                count: '{total}',\n                emptyMessage: '<em>No data</em>',\n                emptyPanes: 'No SearchPanes',\n                loadMessage: 'Loading Search Panes...',\n                showMessage: 'Show All',\n                title: 'Filters Active - %d'\n            },\n            layout: 'auto',\n            order: [],\n            panes: [],\n            preSelect: [],\n            viewCount: true,\n            viewTotal: false\n        };\n        return SearchPanes;\n    }());\n\n    var __extends = (window && window.__extends) || (function () {\n        var extendStatics = function (d, b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n                function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n            return extendStatics(d, b);\n        };\n        return function (d, b) {\n            extendStatics(d, b);\n            function __() { this.constructor = d; }\n            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n        };\n    })();\n    var SearchPanesST = /** @class */ (function (_super) {\n        __extends(SearchPanesST, _super);\n        function SearchPanesST(paneSettings, opts, fromPreInit) {\n            if (fromPreInit === void 0) { fromPreInit = false; }\n            var _this = this;\n            var paneClass;\n            if (opts.cascadePanes && opts.viewTotal) {\n                paneClass = SearchPaneCascadeViewTotal;\n            }\n            else if (opts.cascadePanes) {\n                paneClass = SearchPaneCascade;\n            }\n            else if (opts.viewTotal) {\n                paneClass = SearchPaneViewTotal;\n            }\n            _this = _super.call(this, paneSettings, opts, fromPreInit, paneClass) || this;\n            var dt = _this.s.dt;\n            var loadedFilter = dt.state.loaded();\n            var loadFn = function () { return _this._initSelectionListeners(true, loadedFilter && loadedFilter.searchPanes && loadedFilter.searchPanes.selectionList ?\n                loadedFilter.searchPanes.selectionList :\n                _this.c.preSelect); };\n            if (dt.settings()[0]._bInitComplete) {\n                loadFn();\n            }\n            else {\n                dt.off('init.dtsps').on('init.dtsps', loadFn);\n            }\n            return _this;\n        }\n        /**\n         * Ensures that the correct selection listeners are set for selection tracking\n         *\n         * @param preSelect Any values that are to be preselected\n         */\n        SearchPanesST.prototype._initSelectionListeners = function (isPreselect, preSelect) {\n            if (isPreselect === void 0) { isPreselect = true; }\n            if (preSelect === void 0) { preSelect = []; }\n            if (isPreselect) {\n                this.s.selectionList = preSelect;\n            }\n            // Set selection listeners for each pane\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.displayed) {\n                    pane.s.dtPane\n                        .off('select.dtsp')\n                        .on('select.dtsp', this._update(pane))\n                        .off('deselect.dtsp')\n                        .on('deselect.dtsp', this._updateTimeout(pane));\n                }\n            }\n            // Update on every draw\n            this.s.dt.off('draw.dtsps').on('draw.dtsps', this._update());\n            // Also update right now as table has just initialised\n            this._updateSelectionList();\n        };\n        /**\n         * Retrieve the total values from the server data\n         */\n        SearchPanesST.prototype._serverTotals = function () {\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.colOpts.show) {\n                    var colTitle = this.s.dt.column(pane.s.index).dataSrc();\n                    var blockVT = true;\n                    // If any of the counts are not equal to the totals filtering must be active\n                    if (this.s.serverData.searchPanes.options[colTitle]) {\n                        for (var _b = 0, _c = this.s.serverData.searchPanes.options[colTitle]; _b < _c.length; _b++) {\n                            var data = _c[_b];\n                            if (data.total !== data.count) {\n                                blockVT = false;\n                                break;\n                            }\n                        }\n                    }\n                    // Set if filtering is present on the pane and populate the data arrays\n                    pane.s.filteringActive = !blockVT;\n                    pane._serverPopulate(this.s.serverData);\n                }\n            }\n        };\n        /**\n         * Set's the function that is to be performed when a state is loaded\n         *\n         * Overrides the method in SearchPanes\n         */\n        SearchPanesST.prototype._stateLoadListener = function () {\n            var _this = this;\n            var stateLoadFunction = function (e, settings, data) {\n                if (data.searchPanes === undefined) {\n                    return;\n                }\n                // Set the selection list for the panes so that the correct\n                // rows can be reselected and in the right order\n                _this.s.selectionList =\n                    data.searchPanes.selectionList ?\n                        data.searchPanes.selectionList :\n                        [];\n                // Find the panes that match from the state and the actual instance\n                if (data.searchPanes.panes) {\n                    for (var _i = 0, _a = data.searchPanes.panes; _i < _a.length; _i++) {\n                        var loadedPane = _a[_i];\n                        for (var _b = 0, _c = _this.s.panes; _b < _c.length; _b++) {\n                            var pane = _c[_b];\n                            if (loadedPane.id === pane.s.index && pane.s.dtPane) {\n                                // Set the value of the searchbox\n                                pane.dom.searchBox.val(loadedPane.searchTerm);\n                                // Set the value of the order\n                                pane.s.dtPane.order(loadedPane.order);\n                            }\n                        }\n                    }\n                }\n                _this._updateSelectionList();\n            };\n            this.s.dt.off('stateLoadParams.dtsps', stateLoadFunction).on('stateLoadParams.dtsps', stateLoadFunction);\n        };\n        /**\n         * Remove the function's actions when using cascade\n         *\n         * Overrides the method in SearchPanes\n         */\n        SearchPanesST.prototype._updateSelection = function () {\n            return;\n        };\n        /**\n         * Returns a function that updates the selection list based on a specific pane\n         * Also clears the timeout to stop the deselect from running\n         *\n         * @param pane the pane that is to have it's selections loaded\n         */\n        SearchPanesST.prototype._update = function (pane) {\n            var _this = this;\n            if (pane === void 0) { pane = undefined; }\n            return function () {\n                if (pane) {\n                    clearTimeout(pane.s.deselectTimeout);\n                }\n                _this._updateSelectionList(pane);\n            };\n        };\n        /**\n         * Returns a function that updates the selection list based on a specific pane\n         * Also sets a timeout incase a select is about to be made\n         *\n         * @param pane the pane that is to have it's selections loaded\n         */\n        SearchPanesST.prototype._updateTimeout = function (pane) {\n            var _this = this;\n            if (pane === void 0) { pane = undefined; }\n            return function () { return pane ?\n                pane.s.deselectTimeout = setTimeout(function () { return _this._updateSelectionList(pane); }, 50) :\n                _this._updateSelectionList(); };\n        };\n        /**\n         * Updates the selection list to include the latest selections for a given pane\n         *\n         * @param index The index of the pane that is to be updated\n         * @param selected Which rows are selected within the pane\n         */\n        SearchPanesST.prototype._updateSelectionList = function (paneIn) {\n            if (paneIn === void 0) { paneIn = undefined; }\n            // Bail if any of these flags are set\n            if (this.s.pagingST) {\n                // Reset pagingST flag\n                this.s.pagingST = false;\n                return;\n            }\n            else if (this.s.updating || paneIn && paneIn.s.serverSelecting) {\n                return;\n            }\n            if (paneIn !== undefined) {\n                if (this.s.dt.page.info().serverSide) {\n                    paneIn._updateSelection();\n                }\n                // Get filter values for all of the rows and the selections\n                var rows = paneIn.s.dtPane.rows({ selected: true }).data().toArray().map(function (el) { return el.filter; });\n                this.s.selectionList = this.s.selectionList.filter(function (selection) { return selection.column !== paneIn.s.index; });\n                if (rows.length > 0) {\n                    this.s.selectionList.push({\n                        column: paneIn.s.index,\n                        rows: rows\n                    });\n                    paneIn.dom.clear.removeClass(this.classes.disabledButton).removeAttr('disabled');\n                }\n                else {\n                    paneIn.dom.clear.addClass(this.classes.disabledButton).attr('disabled', 'true');\n                }\n                if (this.s.dt.page.info().serverSide) {\n                    this.s.dt.draw(false);\n                }\n            }\n            this._remakeSelections();\n            this._updateFilterCount();\n        };\n        /**\n         * Remake the selections that were present before new data or calculations have occured\n         */\n        SearchPanesST.prototype._remakeSelections = function () {\n            this.s.updating = true;\n            if (!this.s.dt.page.info().serverSide) {\n                var tmpSL = this.s.selectionList;\n                var anotherFilter = false;\n                this.clearSelections();\n                this.s.dt.draw(false);\n                // When there are no selections present if the length of the data does not match the searched data\n                // then another filter is present\n                if (this.s.dt.rows().toArray()[0].length > this.s.dt.rows({ search: 'applied' }).toArray()[0].length) {\n                    anotherFilter = true;\n                }\n                this.s.selectionList = tmpSL;\n                // Update the rows in each pane\n                for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                    var pane = _a[_i];\n                    if (pane.s.displayed) {\n                        pane.s.filteringActive = anotherFilter;\n                        pane.updateRows();\n                    }\n                }\n                for (var _b = 0, _c = this.s.selectionList; _b < _c.length; _b++) {\n                    var selection = _c[_b];\n                    var pane = void 0;\n                    for (var _d = 0, _e = this.s.panes; _d < _e.length; _d++) {\n                        var paneCheck = _e[_d];\n                        if (paneCheck.s.index === selection.column) {\n                            pane = paneCheck;\n                            break;\n                        }\n                    }\n                    if (!pane.s.dtPane) {\n                        continue;\n                    }\n                    var ids = pane.s.dtPane.rows().indexes().toArray();\n                    // Select the rows that are present in the selection list\n                    for (var i = 0; i < selection.rows.length; i++) {\n                        var rowFound = false;\n                        for (var _f = 0, ids_1 = ids; _f < ids_1.length; _f++) {\n                            var id = ids_1[_f];\n                            var currRow = pane.s.dtPane.row(id);\n                            var data = currRow.data();\n                            if (selection.rows[i] === data.filter) {\n                                currRow.select();\n                                rowFound = true;\n                            }\n                        }\n                        if (!rowFound) {\n                            selection.rows.splice(i, 1);\n                            i--;\n                        }\n                    }\n                    pane.s.selections = selection.rows;\n                    // If there are no rows selected then don't bother continuing past here\n                    // Will just increase processing time and skew the rows that are shown in the table\n                    if (selection.rows.length === 0) {\n                        continue;\n                    }\n                    // Update the table to display the current results\n                    this.s.dt.draw(false);\n                    var filteringActive = false;\n                    var filterCount = 0;\n                    var prevSelectedPanes = 0;\n                    var selectedPanes = 0;\n                    // Add the number of all of the filters throughout the panes\n                    for (var _g = 0, _h = this.s.panes; _g < _h.length; _g++) {\n                        var currPane = _h[_g];\n                        if (currPane.s.dtPane) {\n                            filterCount += currPane.getPaneCount();\n                            if (filterCount > prevSelectedPanes) {\n                                selectedPanes++;\n                                prevSelectedPanes = filterCount;\n                            }\n                        }\n                    }\n                    filteringActive = filterCount > 0;\n                    for (var _j = 0, _k = this.s.panes; _j < _k.length; _j++) {\n                        var currPane = _k[_j];\n                        if (currPane.s.displayed) {\n                            // Set the filtering active flag\n                            if (anotherFilter || pane.s.index !== currPane.s.index || !filteringActive) {\n                                currPane.s.filteringActive = filteringActive || anotherFilter;\n                            }\n                            else if (selectedPanes === 1) {\n                                currPane.s.filteringActive = false;\n                            }\n                            // Update the rows to show correct counts\n                            if (currPane.s.index !== pane.s.index) {\n                                currPane.updateRows();\n                            }\n                        }\n                    }\n                }\n                // Update table to show final search results\n                this.s.dt.draw(false);\n            }\n            else {\n                // Identify the last pane to have a change in selection\n                var pane = void 0;\n                if (this.s.selectionList.length > 0) {\n                    pane = this.s.panes[this.s.selectionList[this.s.selectionList.length - 1].column];\n                }\n                // Update the rows of all of the other panes\n                for (var _l = 0, _m = this.s.panes; _l < _m.length; _l++) {\n                    var currPane = _m[_l];\n                    if (currPane.s.displayed && (!pane || currPane.s.index !== pane.s.index)) {\n                        currPane.updateRows();\n                    }\n                }\n            }\n            this.s.updating = false;\n        };\n        return SearchPanesST;\n    }(SearchPanes));\n\n    /*! SearchPanes 2.2.0\n     * © SpryMedia Ltd - datatables.net/license\n     */\n    setJQuery$4($);\n    setJQuery($);\n    setJQuery$3($);\n    setJQuery$2($);\n    setJQuery$1($);\n    var dataTable = $.fn.dataTable;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchPanes = SearchPanes;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchPanes = SearchPanes;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchPanesST = SearchPanesST;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchPanesST = SearchPanesST;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchPane = SearchPane;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchPane = SearchPane;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchPaneViewTotal = SearchPaneViewTotal;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchPaneViewTotal = SearchPaneViewTotal;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchPaneCascade = SearchPaneCascade;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchPaneCascade = SearchPaneCascade;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchPaneCascadeViewTotal = SearchPaneCascadeViewTotal;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchPaneCascadeViewTotal = SearchPaneCascadeViewTotal;\n    // eslint-disable-next-line no-extra-parens\n    var apiRegister = $.fn.dataTable.Api.register;\n    apiRegister('searchPanes()', function () {\n        return this;\n    });\n    apiRegister('searchPanes.clearSelections()', function () {\n        return this.iterator('table', function (ctx) {\n            if (ctx._searchPanes) {\n                ctx._searchPanes.clearSelections();\n            }\n        });\n    });\n    apiRegister('searchPanes.rebuildPane()', function (targetIdx, maintainSelections) {\n        return this.iterator('table', function (ctx) {\n            if (ctx._searchPanes) {\n                ctx._searchPanes.rebuild(targetIdx, maintainSelections);\n            }\n        });\n    });\n    apiRegister('searchPanes.resizePanes()', function () {\n        var ctx = this.context[0];\n        return ctx._searchPanes ?\n            ctx._searchPanes.resizePanes() :\n            null;\n    });\n    apiRegister('searchPanes.container()', function () {\n        var ctx = this.context[0];\n        return ctx._searchPanes\n            ? ctx._searchPanes.getNode()\n            : null;\n    });\n    DataTable.ext.buttons.searchPanesClear = {\n        action: function (e, dt) {\n            dt.searchPanes.clearSelections();\n        },\n        text: 'Clear Panes'\n    };\n    DataTable.ext.buttons.searchPanes = {\n        action: function (e, dt, node, config) {\n            var _this = this;\n            if (!config._panes) {\n                // No SearchPanes on this button yet - initialise and show\n                this.processing(true);\n                setTimeout(function () {\n                    _buttonSourced(dt, node, config);\n                    _this.popover(config._panes.getNode(), {\n                        align: 'container',\n                        span: 'container'\n                    });\n                    config._panes.rebuild(undefined, true);\n                    _this.processing(false);\n                }, 10);\n            }\n            else {\n                // Already got SP - show it\n                this.popover(config._panes.getNode(), {\n                    align: 'container',\n                    span: 'container'\n                });\n                config._panes.rebuild(undefined, true);\n            }\n        },\n        init: function (dt, node, config) {\n            dt.button(node).text(config.text || dt.i18n('searchPanes.collapse', 'SearchPanes', 0));\n            // If state save is enabled, we need to initialise SP immediately\n            // to allow any saved state to be restored. Otherwise we can delay\n            // the init until needed by button press\n            if (dt.init().stateSave) {\n                _buttonSourced(dt, node, config);\n            }\n        },\n        config: {},\n        text: ''\n    };\n    function _buttonSourced(dt, node, config) {\n        var buttonOpts = $.extend({\n            filterChanged: function (count) {\n                dt.button(node).text(dt.i18n('searchPanes.collapse', dt.context[0].oLanguage.searchPanes !== undefined ?\n                    dt.context[0].oLanguage.searchPanes.collapse :\n                    dt.context[0]._searchPanes.c.i18n.collapse, count));\n            }\n        }, config.config);\n        var panes = buttonOpts && (buttonOpts.cascadePanes || buttonOpts.viewTotal) ?\n            new DataTable.SearchPanesST(dt, buttonOpts) :\n            new DataTable.SearchPanes(dt, buttonOpts);\n        dt.button(node).text(config.text || dt.i18n('searchPanes.collapse', panes.c.i18n.collapse, 0));\n        config._panes = panes;\n    }\n    function _init(settings, options, fromPre) {\n        if (options === void 0) { options = null; }\n        if (fromPre === void 0) { fromPre = false; }\n        var api = new dataTable.Api(settings);\n        var opts = options\n            ? options\n            : api.init().searchPanes || dataTable.defaults.searchPanes;\n        var searchPanes = opts && (opts.cascadePanes || opts.viewTotal) ?\n            new SearchPanesST(api, opts, fromPre) :\n            new SearchPanes(api, opts, fromPre);\n        var node = searchPanes.getNode();\n        return node;\n    }\n    // Attach a listener to the document which listens for DataTables initialisation\n    // events so we can automatically initialise\n    $(document).on('preInit.dt.dtsp', function (e, settings) {\n        if (e.namespace !== 'dt') {\n            return;\n        }\n        if (settings.oInit.searchPanes ||\n            DataTable.defaults.searchPanes) {\n            if (!settings._searchPanes) {\n                _init(settings, null, true);\n            }\n        }\n    });\n    // DataTables `dom` feature option\n    DataTable.ext.feature.push({\n        cFeature: 'P',\n        fnInit: _init\n    });\n    // DataTables 2 layout feature\n    if (DataTable.ext.features) {\n        DataTable.ext.features.register('searchPanes', _init);\n    }\n\n})();\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/js/searchPanes.bootstrap.js",
    "content": "/*! Bootstrap integration for DataTables' SearchPanes\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-searchpanes'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchPanes ) {\n\t\t\t\trequire('datatables.net-searchpanes')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchPane.classes, {\n    buttonGroup: 'btn-group',\n    disabledButton: 'disabled',\n    narrow: 'col narrow',\n    narrowSub: 'row',\n    pane: {\n        container: 'table'\n    },\n    paneButton: 'btn btn-light',\n    pill: 'badge badge-pill badge-light pill',\n    search: 'col-sm form-control search',\n    searchCont: 'input-group dtsp-searchCont',\n    searchLabelCont: 'input-group-btn',\n    subRow1: 'dtsp-subRow1 text-right',\n    subRow2: 'dtsp-subRow2 text-right',\n    table: 'table table-condensed'\n});\n$.extend(true, DataTable.SearchPanes.classes, {\n    clearAll: 'dtsp-clearAll btn btn-light',\n    collapseAll: 'dtsp-collapseAll btn btn-light',\n    disabledButton: 'disabled',\n    search: DataTable.SearchPane.classes.search,\n    showAll: 'dtsp-showAll btn btn-light'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/js/searchPanes.bootstrap4.js",
    "content": "/*! Bootstrap integration for DataTables' SearchPanes\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-searchpanes'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchPanes ) {\n\t\t\t\trequire('datatables.net-searchpanes')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchPane.classes, {\n    buttonGroup: 'btn-group',\n    disabledButton: 'disabled',\n    narrow: 'col',\n    pane: {\n        container: 'table'\n    },\n    paneButton: 'btn btn-light',\n    pill: 'pill badge badge-pill badge-secondary',\n    search: 'form-control search',\n    searchCont: 'input-group',\n    searchLabelCont: 'input-group-append',\n    subRow1: 'dtsp-subRow1',\n    subRow2: 'dtsp-subRow2',\n    table: 'table table-sm table-borderless',\n    topRow: 'dtsp-topRow'\n});\n$.extend(true, DataTable.SearchPanes.classes, {\n    clearAll: 'dtsp-clearAll btn btn-light',\n    collapseAll: 'dtsp-collapseAll btn btn-light',\n    container: 'dtsp-searchPanes',\n    disabledButton: 'disabled',\n    panes: 'dtsp-panes dtsp-panesContainer',\n    search: DataTable.SearchPane.classes.search,\n    showAll: 'dtsp-showAll btn btn-light',\n    title: 'dtsp-title',\n    titleRow: 'dtsp-titleRow'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/js/searchPanes.bootstrap5.js",
    "content": "/*! Bootstrap 5 integration for DataTables' SearchPanes\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-searchpanes'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchPanes ) {\n\t\t\t\trequire('datatables.net-searchpanes')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchPane.classes, {\n    buttonGroup: 'btn-group',\n    disabledButton: 'disabled',\n    narrow: 'col',\n    pane: {\n        container: 'table'\n    },\n    paneButton: 'btn btn-subtle',\n    pill: 'badge rounded-pill bg-secondary',\n    search: 'form-control search',\n    table: 'table table-sm table-borderless',\n    topRow: 'dtsp-topRow'\n});\n$.extend(true, DataTable.SearchPanes.classes, {\n    clearAll: 'dtsp-clearAll btn btn-subtle',\n    collapseAll: 'dtsp-collapseAll btn btn-subtle',\n    container: 'dtsp-searchPanes',\n    disabledButton: 'disabled',\n    panes: 'dtsp-panes dtsp-panesContainer',\n    search: DataTable.SearchPane.classes.search,\n    showAll: 'dtsp-showAll btn btn-subtle',\n    title: 'dtsp-title',\n    titleRow: 'dtsp-titleRow'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/js/searchPanes.bulma.js",
    "content": "/*! Bulma integration for DataTables' SearchPanes\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-searchpanes'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchPanes ) {\n\t\t\t\trequire('datatables.net-searchpanes')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchPane.classes, {\n    disabledButton: 'is-disabled',\n    paneButton: 'button dtsp-paneButton is-white',\n    search: 'input search'\n});\n$.extend(true, DataTable.SearchPanes.classes, {\n    clearAll: 'dtsp-clearAll button',\n    collapseAll: 'dtsp-collapseAll button',\n    disabledButton: 'is-disabled',\n    search: DataTable.SearchPane.classes.search,\n    showAll: 'dtsp-showAll button'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/js/searchPanes.dataTables.js",
    "content": "/*! Bootstrap integration for DataTables' SearchPanes\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-searchpanes'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchPanes ) {\n\t\t\t\trequire('datatables.net-searchpanes')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/js/searchPanes.foundation.js",
    "content": "/*! Bootstrap integration for DataTables' SearchPanes\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-searchpanes'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchPanes ) {\n\t\t\t\trequire('datatables.net-searchpanes')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchPane.classes, {\n    buttonGroup: 'secondary button-group',\n    disabledButton: 'disabled',\n    narrow: 'dtsp-narrow',\n    narrowButton: 'dtsp-narrowButton',\n    narrowSearch: 'dtsp-narrowSearch',\n    paneButton: 'secondary button',\n    pill: 'badge secondary',\n    search: 'search',\n    searchLabelCont: 'searchCont',\n    show: 'col',\n    table: 'unstriped'\n});\n$.extend(true, DataTable.SearchPanes.classes, {\n    clearAll: 'dtsp-clearAll button secondary',\n    collapseAll: 'dtsp-collapseAll button secondary',\n    disabledButton: 'disabled',\n    panes: 'panes dtsp-panesContainer',\n    search: DataTable.SearchPane.classes.search,\n    showAll: 'dtsp-showAll button secondary',\n    title: 'dtsp-title'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/js/searchPanes.jqueryui.js",
    "content": "/*! Bootstrap integration for DataTables' SearchPanes\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-searchpanes'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchPanes ) {\n\t\t\t\trequire('datatables.net-searchpanes')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchPane.classes, {\n    disabledButton: 'dtsp-paneInputButton dtsp-disabledButton',\n    paneButton: 'dtsp-paneButton ui-button',\n    topRow: 'dtsp-topRow ui-state-default'\n});\n$.extend(true, DataTable.SearchPanes.classes, {\n    clearAll: 'dtsp-clearAll ui-button',\n    collapseAll: 'dtsp-collapseAll ui-button',\n    container: 'dtsp-searchPanes',\n    panes: 'dtsp-panesContainer fg-toolbar ui-toolbar ui-widget-header',\n    showAll: 'dtsp-showAll ui-button'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/SearchPanes-2.2.0/js/searchPanes.semanticui.js",
    "content": "/*! semantic ui integration for DataTables' SearchPanes\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-searchpanes'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchPanes ) {\n\t\t\t\trequire('datatables.net-searchpanes')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchPane.classes, {\n    buttonGroup: 'right floated ui buttons column',\n    disabledButton: 'disabled',\n    narrowSearch: 'dtsp-narrowSearch',\n    narrowSub: 'dtsp-narrow',\n    paneButton: 'basic ui',\n    paneInputButton: 'circular search link icon',\n    topRow: 'row dtsp-topRow'\n});\n$.extend(true, DataTable.SearchPanes.classes, {\n    clearAll: 'dtsp-clearAll basic ui button',\n    collapseAll: 'dtsp-collapseAll basic ui button',\n    disabledButton: 'disabled',\n    showAll: 'dtsp-showAll basic ui button'\n});\n// This override is required for the integrated search Icon in sematic ui\nDataTable.SearchPane.prototype._searchContSetup = function () {\n    $('<i class=\"' + this.classes.paneInputButton + '\"></i>').appendTo(this.dom.searchCont);\n};\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/css/select.bootstrap.css",
    "content": "table.dataTable > tbody > tr > .selected {\n  background-color: rgba(13, 110, 253, 0.9);\n  color: white;\n}\ntable.dataTable > tbody > tr > td.select-checkbox,\ntable.dataTable > tbody > tr > th.select-checkbox {\n  position: relative;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,\ntable.dataTable > tbody > tr > th.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:after {\n  display: block;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 12px;\n  height: 12px;\n  box-sizing: border-box;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:before {\n  content: \" \";\n  margin-top: -6px;\n  margin-left: -6px;\n  border: 1px solid black;\n  border-radius: 3px;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:before,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:before {\n  border: 1px solid white;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:after {\n  content: \"✓\";\n  font-size: 20px;\n  margin-top: -17px;\n  margin-left: -6px;\n  text-align: center;\n}\ntable.dataTable.compact > tbody > tr > td.select-checkbox:before,\ntable.dataTable.compact > tbody > tr > th.select-checkbox:before {\n  margin-top: -12px;\n}\ntable.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {\n  margin-top: -16px;\n}\n\ndiv.dataTables_wrapper span.select-info,\ndiv.dataTables_wrapper span.select-item {\n  margin-left: 0.5em;\n}\n\nhtml.dark table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml.dark table.dataTable > tbody > tr > th.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > th.select-checkbox:before {\n  border: 1px solid rgba(255, 255, 255, 0.6);\n}\n\n@media screen and (max-width: 640px) {\n  div.dataTables_wrapper span.select-info,\n  div.dataTables_wrapper span.select-item {\n    margin-left: 0;\n    display: block;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/css/select.bootstrap4.css",
    "content": "table.dataTable > tbody > tr > .selected {\n  background-color: rgba(13, 110, 253, 0.9);\n  color: white;\n}\ntable.dataTable > tbody > tr > td.select-checkbox,\ntable.dataTable > tbody > tr > th.select-checkbox {\n  position: relative;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,\ntable.dataTable > tbody > tr > th.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:after {\n  display: block;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 12px;\n  height: 12px;\n  box-sizing: border-box;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:before {\n  content: \" \";\n  margin-top: -6px;\n  margin-left: -6px;\n  border: 1px solid black;\n  border-radius: 3px;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:before,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:before {\n  border: 1px solid white;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:after {\n  content: \"✓\";\n  font-size: 20px;\n  margin-top: -12px;\n  margin-left: -6px;\n  text-align: center;\n}\ntable.dataTable.compact > tbody > tr > td.select-checkbox:before,\ntable.dataTable.compact > tbody > tr > th.select-checkbox:before {\n  margin-top: -12px;\n}\ntable.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {\n  margin-top: -16px;\n}\n\ndiv.dataTables_wrapper span.select-info,\ndiv.dataTables_wrapper span.select-item {\n  margin-left: 0.5em;\n}\n\nhtml.dark table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml.dark table.dataTable > tbody > tr > th.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > th.select-checkbox:before {\n  border: 1px solid rgba(255, 255, 255, 0.6);\n}\n\n@media screen and (max-width: 640px) {\n  div.dataTables_wrapper span.select-info,\n  div.dataTables_wrapper span.select-item {\n    margin-left: 0;\n    display: block;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/css/select.bootstrap5.css",
    "content": "table.dataTable > tbody > tr > .selected {\n  background-color: rgba(13, 110, 253, 0.9);\n  color: white;\n}\ntable.dataTable > tbody > tr > td.select-checkbox,\ntable.dataTable > tbody > tr > th.select-checkbox {\n  position: relative;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,\ntable.dataTable > tbody > tr > th.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:after {\n  display: block;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 12px;\n  height: 12px;\n  box-sizing: border-box;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:before {\n  content: \" \";\n  margin-top: -6px;\n  margin-left: -6px;\n  border: 1px solid black;\n  border-radius: 3px;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:before,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:before {\n  border: 1px solid white;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:after {\n  content: \"✓\";\n  font-size: 20px;\n  margin-top: -12px;\n  margin-left: -6px;\n  text-align: center;\n}\ntable.dataTable.compact > tbody > tr > td.select-checkbox:before,\ntable.dataTable.compact > tbody > tr > th.select-checkbox:before {\n  margin-top: -12px;\n}\ntable.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {\n  margin-top: -16px;\n}\n\ndiv.dataTables_wrapper span.select-info,\ndiv.dataTables_wrapper span.select-item {\n  margin-left: 0.5em;\n}\n\nhtml.dark table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml.dark table.dataTable > tbody > tr > th.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > th.select-checkbox:before {\n  border: 1px solid rgba(255, 255, 255, 0.6);\n}\n\n@media screen and (max-width: 640px) {\n  div.dataTables_wrapper span.select-info,\n  div.dataTables_wrapper span.select-item {\n    margin-left: 0;\n    display: block;\n  }\n}\ntable.dataTable.table-sm tbody td.select-checkbox::before {\n  margin-top: -9px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/css/select.bulma.css",
    "content": "table.dataTable > tbody > tr > .selected {\n  background-color: rgba(13, 110, 253, 0.9);\n  color: white;\n}\ntable.dataTable > tbody > tr > td.select-checkbox,\ntable.dataTable > tbody > tr > th.select-checkbox {\n  position: relative;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,\ntable.dataTable > tbody > tr > th.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:after {\n  display: block;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 12px;\n  height: 12px;\n  box-sizing: border-box;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:before {\n  content: \" \";\n  margin-top: -6px;\n  margin-left: -6px;\n  border: 1px solid black;\n  border-radius: 3px;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:before,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:before {\n  border: 1px solid black;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:after {\n  content: \"✓\";\n  font-size: 20px;\n  margin-top: -12px;\n  margin-left: -6px;\n  text-align: center;\n}\ntable.dataTable.compact > tbody > tr > td.select-checkbox:before,\ntable.dataTable.compact > tbody > tr > th.select-checkbox:before {\n  margin-top: -12px;\n}\ntable.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {\n  margin-top: -16px;\n}\n\ndiv.dataTables_wrapper span.select-info,\ndiv.dataTables_wrapper span.select-item {\n  margin-left: 0.5em;\n}\n\nhtml.dark table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml.dark table.dataTable > tbody > tr > th.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > th.select-checkbox:before {\n  border: 1px solid rgba(255, 255, 255, 0.6);\n}\n\n@media screen and (max-width: 640px) {\n  div.dataTables_wrapper span.select-info,\n  div.dataTables_wrapper span.select-item {\n    margin-left: 0;\n    display: block;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/css/select.dataTables.css",
    "content": "table.dataTable > tbody > tr > .selected {\n  background-color: rgba(13, 110, 253, 0.9);\n  color: white;\n}\ntable.dataTable > tbody > tr > td.select-checkbox,\ntable.dataTable > tbody > tr > th.select-checkbox {\n  position: relative;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,\ntable.dataTable > tbody > tr > th.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:after {\n  display: block;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 12px;\n  height: 12px;\n  box-sizing: border-box;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:before {\n  content: \" \";\n  margin-top: -6px;\n  margin-left: -6px;\n  border: 1px solid black;\n  border-radius: 3px;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:before,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:before {\n  border: 1px solid white;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:after {\n  content: \"✓\";\n  font-size: 20px;\n  margin-top: -12px;\n  margin-left: -6px;\n  text-align: center;\n}\ntable.dataTable.compact > tbody > tr > td.select-checkbox:before,\ntable.dataTable.compact > tbody > tr > th.select-checkbox:before {\n  margin-top: -12px;\n}\ntable.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {\n  margin-top: -16px;\n}\n\ndiv.dataTables_wrapper span.select-info,\ndiv.dataTables_wrapper span.select-item {\n  margin-left: 0.5em;\n}\n\nhtml.dark table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml.dark table.dataTable > tbody > tr > th.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > th.select-checkbox:before {\n  border: 1px solid rgba(255, 255, 255, 0.6);\n}\n\n@media screen and (max-width: 640px) {\n  div.dataTables_wrapper span.select-info,\n  div.dataTables_wrapper span.select-item {\n    margin-left: 0;\n    display: block;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/css/select.foundation.css",
    "content": "table.dataTable > tbody > tr > .selected {\n  background-color: rgba(13, 110, 253, 0.9);\n  color: white;\n}\ntable.dataTable > tbody > tr > td.select-checkbox,\ntable.dataTable > tbody > tr > th.select-checkbox {\n  position: relative;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,\ntable.dataTable > tbody > tr > th.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:after {\n  display: block;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 12px;\n  height: 12px;\n  box-sizing: border-box;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:before {\n  content: \" \";\n  margin-top: -6px;\n  margin-left: -6px;\n  border: 1px solid black;\n  border-radius: 3px;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:before,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:before {\n  border: 1px solid white;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:after {\n  content: \"✓\";\n  font-size: 20px;\n  margin-top: -12px;\n  margin-left: -6px;\n  text-align: center;\n}\ntable.dataTable.compact > tbody > tr > td.select-checkbox:before,\ntable.dataTable.compact > tbody > tr > th.select-checkbox:before {\n  margin-top: -12px;\n}\ntable.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {\n  margin-top: -16px;\n}\n\ndiv.dataTables_wrapper span.select-info,\ndiv.dataTables_wrapper span.select-item {\n  margin-left: 0.5em;\n}\n\nhtml.dark table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml.dark table.dataTable > tbody > tr > th.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > th.select-checkbox:before {\n  border: 1px solid rgba(255, 255, 255, 0.6);\n}\n\n@media screen and (max-width: 640px) {\n  div.dataTables_wrapper span.select-info,\n  div.dataTables_wrapper span.select-item {\n    margin-left: 0;\n    display: block;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/css/select.jqueryui.css",
    "content": "table.dataTable > tbody > tr > .selected {\n  background-color: rgba(13, 110, 253, 0.9);\n  color: white;\n}\ntable.dataTable > tbody > tr > td.select-checkbox,\ntable.dataTable > tbody > tr > th.select-checkbox {\n  position: relative;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,\ntable.dataTable > tbody > tr > th.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:after {\n  display: block;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 12px;\n  height: 12px;\n  box-sizing: border-box;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:before {\n  content: \" \";\n  margin-top: -6px;\n  margin-left: -6px;\n  border: 1px solid black;\n  border-radius: 3px;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:before,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:before {\n  border: 1px solid white;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:after {\n  content: \"✓\";\n  font-size: 20px;\n  margin-top: -12px;\n  margin-left: -6px;\n  text-align: center;\n}\ntable.dataTable.compact > tbody > tr > td.select-checkbox:before,\ntable.dataTable.compact > tbody > tr > th.select-checkbox:before {\n  margin-top: -12px;\n}\ntable.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {\n  margin-top: -16px;\n}\n\ndiv.dataTables_wrapper span.select-info,\ndiv.dataTables_wrapper span.select-item {\n  margin-left: 0.5em;\n}\n\nhtml.dark table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml.dark table.dataTable > tbody > tr > th.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > th.select-checkbox:before {\n  border: 1px solid rgba(255, 255, 255, 0.6);\n}\n\n@media screen and (max-width: 640px) {\n  div.dataTables_wrapper span.select-info,\n  div.dataTables_wrapper span.select-item {\n    margin-left: 0;\n    display: block;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/css/select.semanticui.css",
    "content": "table.dataTable > tbody > tr > .selected {\n  background-color: rgba(13, 110, 253, 0.9);\n  color: white;\n}\ntable.dataTable > tbody > tr > td.select-checkbox,\ntable.dataTable > tbody > tr > th.select-checkbox {\n  position: relative;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,\ntable.dataTable > tbody > tr > th.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:after {\n  display: block;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 12px;\n  height: 12px;\n  box-sizing: border-box;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:before {\n  content: \" \";\n  margin-top: -6px;\n  margin-left: -6px;\n  border: 1px solid black;\n  border-radius: 3px;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:before,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:before {\n  border: 1px solid white;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:after {\n  content: \"✓\";\n  font-size: 20px;\n  margin-top: -12px;\n  margin-left: -6px;\n  text-align: center;\n}\ntable.dataTable.compact > tbody > tr > td.select-checkbox:before,\ntable.dataTable.compact > tbody > tr > th.select-checkbox:before {\n  margin-top: -12px;\n}\ntable.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {\n  margin-top: -16px;\n}\n\ndiv.dataTables_wrapper span.select-info,\ndiv.dataTables_wrapper span.select-item {\n  margin-left: 0.5em;\n}\n\nhtml.dark table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml.dark table.dataTable > tbody > tr > th.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > th.select-checkbox:before {\n  border: 1px solid rgba(255, 255, 255, 0.6);\n}\n\n@media screen and (max-width: 640px) {\n  div.dataTables_wrapper span.select-info,\n  div.dataTables_wrapper span.select-item {\n    margin-left: 0;\n    display: block;\n  }\n}\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/js/dataTables.select.js",
    "content": "/*! Select for DataTables 1.7.0\n * © SpryMedia Ltd - datatables.net/license/mit\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n// Version information for debugger\nDataTable.select = {};\n\nDataTable.select.version = '1.7.0';\n\nDataTable.select.init = function (dt) {\n\tvar ctx = dt.settings()[0];\n\n\tif (ctx._select) {\n\t\treturn;\n\t}\n\n\tvar savedSelected = dt.state.loaded();\n\n\tvar selectAndSave = function (e, settings, data) {\n\t\tif (data === null || data.select === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear any currently selected rows, before restoring state\n\t\t// None will be selected on first initialisation\n\t\tif (dt.rows({ selected: true }).any()) {\n\t\t\tdt.rows().deselect();\n\t\t}\n\t\tif (data.select.rows !== undefined) {\n\t\t\tdt.rows(data.select.rows).select();\n\t\t}\n\n\t\tif (dt.columns({ selected: true }).any()) {\n\t\t\tdt.columns().deselect();\n\t\t}\n\t\tif (data.select.columns !== undefined) {\n\t\t\tdt.columns(data.select.columns).select();\n\t\t}\n\n\t\tif (dt.cells({ selected: true }).any()) {\n\t\t\tdt.cells().deselect();\n\t\t}\n\t\tif (data.select.cells !== undefined) {\n\t\t\tfor (var i = 0; i < data.select.cells.length; i++) {\n\t\t\t\tdt.cell(data.select.cells[i].row, data.select.cells[i].column).select();\n\t\t\t}\n\t\t}\n\n\t\tdt.state.save();\n\t};\n\n\tdt.on('stateSaveParams', function (e, settings, data) {\n\t\tdata.select = {};\n\t\tdata.select.rows = dt.rows({ selected: true }).ids(true).toArray();\n\t\tdata.select.columns = dt.columns({ selected: true })[0];\n\t\tdata.select.cells = dt.cells({ selected: true })[0].map(function (coords) {\n\t\t\treturn { row: dt.row(coords.row).id(true), column: coords.column };\n\t\t});\n\t})\n\t\t.on('stateLoadParams', selectAndSave)\n\t\t.one('init', function () {\n\t\t\tselectAndSave(undefined, undefined, savedSelected);\n\t\t});\n\n\tvar init = ctx.oInit.select;\n\tvar defaults = DataTable.defaults.select;\n\tvar opts = init === undefined ? defaults : init;\n\n\t// Set defaults\n\tvar items = 'row';\n\tvar style = 'api';\n\tvar blurable = false;\n\tvar toggleable = true;\n\tvar info = true;\n\tvar selector = 'td, th';\n\tvar className = 'selected';\n\tvar setStyle = false;\n\n\tctx._select = {};\n\n\t// Initialisation customisations\n\tif (opts === true) {\n\t\tstyle = 'os';\n\t\tsetStyle = true;\n\t}\n\telse if (typeof opts === 'string') {\n\t\tstyle = opts;\n\t\tsetStyle = true;\n\t}\n\telse if ($.isPlainObject(opts)) {\n\t\tif (opts.blurable !== undefined) {\n\t\t\tblurable = opts.blurable;\n\t\t}\n\n\t\tif (opts.toggleable !== undefined) {\n\t\t\ttoggleable = opts.toggleable;\n\t\t}\n\n\t\tif (opts.info !== undefined) {\n\t\t\tinfo = opts.info;\n\t\t}\n\n\t\tif (opts.items !== undefined) {\n\t\t\titems = opts.items;\n\t\t}\n\n\t\tif (opts.style !== undefined) {\n\t\t\tstyle = opts.style;\n\t\t\tsetStyle = true;\n\t\t}\n\t\telse {\n\t\t\tstyle = 'os';\n\t\t\tsetStyle = true;\n\t\t}\n\n\t\tif (opts.selector !== undefined) {\n\t\t\tselector = opts.selector;\n\t\t}\n\n\t\tif (opts.className !== undefined) {\n\t\t\tclassName = opts.className;\n\t\t}\n\t}\n\n\tdt.select.selector(selector);\n\tdt.select.items(items);\n\tdt.select.style(style);\n\tdt.select.blurable(blurable);\n\tdt.select.toggleable(toggleable);\n\tdt.select.info(info);\n\tctx._select.className = className;\n\n\t// Sort table based on selected rows. Requires Select Datatables extension\n\t$.fn.dataTable.ext.order['select-checkbox'] = function (settings, col) {\n\t\treturn this.api()\n\t\t\t.column(col, { order: 'index' })\n\t\t\t.nodes()\n\t\t\t.map(function (td) {\n\t\t\t\tif (settings._select.items === 'row') {\n\t\t\t\t\treturn $(td).parent().hasClass(settings._select.className);\n\t\t\t\t}\n\t\t\t\telse if (settings._select.items === 'cell') {\n\t\t\t\t\treturn $(td).hasClass(settings._select.className);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t};\n\n\t// If the init options haven't enabled select, but there is a selectable\n\t// class name, then enable\n\tif (!setStyle && $(dt.table().node()).hasClass('selectable')) {\n\t\tdt.select.style('os');\n\t}\n};\n\n/*\n\nSelect is a collection of API methods, event handlers, event emitters and\nbuttons (for the `Buttons` extension) for DataTables. It provides the following\nfeatures, with an overview of how they are implemented:\n\n## Selection of rows, columns and cells. Whether an item is selected or not is\n   stored in:\n\n* rows: a `_select_selected` property which contains a boolean value of the\n  DataTables' `aoData` object for each row\n* columns: a `_select_selected` property which contains a boolean value of the\n  DataTables' `aoColumns` object for each column\n* cells: a `_selected_cells` property which contains an array of boolean values\n  of the `aoData` object for each row. The array is the same length as the\n  columns array, with each element of it representing a cell.\n\nThis method of using boolean flags allows Select to operate when nodes have not\nbeen created for rows / cells (DataTables' defer rendering feature).\n\n## API methods\n\nA range of API methods are available for triggering selection and de-selection\nof rows. Methods are also available to configure the selection events that can\nbe triggered by an end user (such as which items are to be selected). To a large\nextent, these of API methods *is* Select. It is basically a collection of helper\nfunctions that can be used to select items in a DataTable.\n\nConfiguration of select is held in the object `_select` which is attached to the\nDataTables settings object on initialisation. Select being available on a table\nis not optional when Select is loaded, but its default is for selection only to\nbe available via the API - so the end user wouldn't be able to select rows\nwithout additional configuration.\n\nThe `_select` object contains the following properties:\n\n```\n{\n\titems:string       - Can be `rows`, `columns` or `cells`. Defines what item \n\t                     will be selected if the user is allowed to activate row\n\t                     selection using the mouse.\n\tstyle:string       - Can be `none`, `single`, `multi` or `os`. Defines the\n\t                     interaction style when selecting items\n\tblurable:boolean   - If row selection can be cleared by clicking outside of\n\t                     the table\n\ttoggleable:boolean - If row selection can be cancelled by repeated clicking\n\t                     on the row\n\tinfo:boolean       - If the selection summary should be shown in the table\n\t                     information elements\n}\n```\n\nIn addition to the API methods, Select also extends the DataTables selector\noptions for rows, columns and cells adding a `selected` option to the selector\noptions object, allowing the developer to select only selected items or\nunselected items.\n\n## Mouse selection of items\n\nClicking on items can be used to select items. This is done by a simple event\nhandler that will select the items using the API methods.\n\n */\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Local functions\n */\n\n/**\n * Add one or more cells to the selection when shift clicking in OS selection\n * style cell selection.\n *\n * Cell range is more complicated than row and column as we want to select\n * in the visible grid rather than by index in sequence. For example, if you\n * click first in cell 1-1 and then shift click in 2-2 - cells 1-2 and 2-1\n * should also be selected (and not 1-3, 1-4. etc)\n *\n * @param  {DataTable.Api} dt   DataTable\n * @param  {object}        idx  Cell index to select to\n * @param  {object}        last Cell index to select from\n * @private\n */\nfunction cellRange(dt, idx, last) {\n\tvar indexes;\n\tvar columnIndexes;\n\tvar rowIndexes;\n\tvar selectColumns = function (start, end) {\n\t\tif (start > end) {\n\t\t\tvar tmp = end;\n\t\t\tend = start;\n\t\t\tstart = tmp;\n\t\t}\n\n\t\tvar record = false;\n\t\treturn dt\n\t\t\t.columns(':visible')\n\t\t\t.indexes()\n\t\t\t.filter(function (i) {\n\t\t\t\tif (i === start) {\n\t\t\t\t\trecord = true;\n\t\t\t\t}\n\n\t\t\t\tif (i === end) {\n\t\t\t\t\t// not else if, as start might === end\n\t\t\t\t\trecord = false;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn record;\n\t\t\t});\n\t};\n\n\tvar selectRows = function (start, end) {\n\t\tvar indexes = dt.rows({ search: 'applied' }).indexes();\n\n\t\t// Which comes first - might need to swap\n\t\tif (indexes.indexOf(start) > indexes.indexOf(end)) {\n\t\t\tvar tmp = end;\n\t\t\tend = start;\n\t\t\tstart = tmp;\n\t\t}\n\n\t\tvar record = false;\n\t\treturn indexes.filter(function (i) {\n\t\t\tif (i === start) {\n\t\t\t\trecord = true;\n\t\t\t}\n\n\t\t\tif (i === end) {\n\t\t\t\trecord = false;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn record;\n\t\t});\n\t};\n\n\tif (!dt.cells({ selected: true }).any() && !last) {\n\t\t// select from the top left cell to this one\n\t\tcolumnIndexes = selectColumns(0, idx.column);\n\t\trowIndexes = selectRows(0, idx.row);\n\t}\n\telse {\n\t\t// Get column indexes between old and new\n\t\tcolumnIndexes = selectColumns(last.column, idx.column);\n\t\trowIndexes = selectRows(last.row, idx.row);\n\t}\n\n\tindexes = dt.cells(rowIndexes, columnIndexes).flatten();\n\n\tif (!dt.cells(idx, { selected: true }).any()) {\n\t\t// Select range\n\t\tdt.cells(indexes).select();\n\t}\n\telse {\n\t\t// Deselect range\n\t\tdt.cells(indexes).deselect();\n\t}\n}\n\n/**\n * Disable mouse selection by removing the selectors\n *\n * @param {DataTable.Api} dt DataTable to remove events from\n * @private\n */\nfunction disableMouseSelection(dt) {\n\tvar ctx = dt.settings()[0];\n\tvar selector = ctx._select.selector;\n\n\t$(dt.table().container())\n\t\t.off('mousedown.dtSelect', selector)\n\t\t.off('mouseup.dtSelect', selector)\n\t\t.off('click.dtSelect', selector);\n\n\t$('body').off('click.dtSelect' + _safeId(dt.table().node()));\n}\n\n/**\n * Attach mouse listeners to the table to allow mouse selection of items\n *\n * @param {DataTable.Api} dt DataTable to remove events from\n * @private\n */\nfunction enableMouseSelection(dt) {\n\tvar container = $(dt.table().container());\n\tvar ctx = dt.settings()[0];\n\tvar selector = ctx._select.selector;\n\tvar matchSelection;\n\n\tcontainer\n\t\t.on('mousedown.dtSelect', selector, function (e) {\n\t\t\t// Disallow text selection for shift clicking on the table so multi\n\t\t\t// element selection doesn't look terrible!\n\t\t\tif (e.shiftKey || e.metaKey || e.ctrlKey) {\n\t\t\t\tcontainer\n\t\t\t\t\t.css('-moz-user-select', 'none')\n\t\t\t\t\t.one('selectstart.dtSelect', selector, function () {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (window.getSelection) {\n\t\t\t\tmatchSelection = window.getSelection();\n\t\t\t}\n\t\t})\n\t\t.on('mouseup.dtSelect', selector, function () {\n\t\t\t// Allow text selection to occur again, Mozilla style (tested in FF\n\t\t\t// 35.0.1 - still required)\n\t\t\tcontainer.css('-moz-user-select', '');\n\t\t})\n\t\t.on('click.dtSelect', selector, function (e) {\n\t\t\tvar items = dt.select.items();\n\t\t\tvar idx;\n\n\t\t\t// If text was selected (click and drag), then we shouldn't change\n\t\t\t// the row's selected state\n\t\t\tif (matchSelection) {\n\t\t\t\tvar selection = window.getSelection();\n\n\t\t\t\t// If the element that contains the selection is not in the table, we can ignore it\n\t\t\t\t// This can happen if the developer selects text from the click event\n\t\t\t\tif (\n\t\t\t\t\t!selection.anchorNode ||\n\t\t\t\t\t$(selection.anchorNode).closest('table')[0] === dt.table().node()\n\t\t\t\t) {\n\t\t\t\t\tif (selection !== matchSelection) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar ctx = dt.settings()[0];\n\t\t\tvar wrapperClass = dt.settings()[0].oClasses.sWrapper.trim().replace(/ +/g, '.');\n\n\t\t\t// Ignore clicks inside a sub-table\n\t\t\tif ($(e.target).closest('div.' + wrapperClass)[0] != dt.table().container()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar cell = dt.cell($(e.target).closest('td, th'));\n\n\t\t\t// Check the cell actually belongs to the host DataTable (so child\n\t\t\t// rows, etc, are ignored)\n\t\t\tif (!cell.any()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar event = $.Event('user-select.dt');\n\t\t\teventTrigger(dt, event, [items, cell, e]);\n\n\t\t\tif (event.isDefaultPrevented()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar cellIndex = cell.index();\n\t\t\tif (items === 'row') {\n\t\t\t\tidx = cellIndex.row;\n\t\t\t\ttypeSelect(e, dt, ctx, 'row', idx);\n\t\t\t}\n\t\t\telse if (items === 'column') {\n\t\t\t\tidx = cell.index().column;\n\t\t\t\ttypeSelect(e, dt, ctx, 'column', idx);\n\t\t\t}\n\t\t\telse if (items === 'cell') {\n\t\t\t\tidx = cell.index();\n\t\t\t\ttypeSelect(e, dt, ctx, 'cell', idx);\n\t\t\t}\n\n\t\t\tctx._select_lastCell = cellIndex;\n\t\t});\n\n\t// Blurable\n\t$('body').on('click.dtSelect' + _safeId(dt.table().node()), function (e) {\n\t\tif (ctx._select.blurable) {\n\t\t\t// If the click was inside the DataTables container, don't blur\n\t\t\tif ($(e.target).parents().filter(dt.table().container()).length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Ignore elements which have been removed from the DOM (i.e. paging\n\t\t\t// buttons)\n\t\t\tif ($(e.target).parents('html').length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Don't blur in Editor form\n\t\t\tif ($(e.target).parents('div.DTE').length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar event = $.Event('select-blur.dt');\n\t\t\teventTrigger(dt, event, [e.target, e]);\n\n\t\t\tif (event.isDefaultPrevented()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclear(ctx, true);\n\t\t}\n\t});\n}\n\n/**\n * Trigger an event on a DataTable\n *\n * @param {DataTable.Api} api      DataTable to trigger events on\n * @param  {boolean}      selected true if selected, false if deselected\n * @param  {string}       type     Item type acting on\n * @param  {boolean}      any      Require that there are values before\n *     triggering\n * @private\n */\nfunction eventTrigger(api, type, args, any) {\n\tif (any && !api.flatten().length) {\n\t\treturn;\n\t}\n\n\tif (typeof type === 'string') {\n\t\ttype = type + '.dt';\n\t}\n\n\targs.unshift(api);\n\n\t$(api.table().node()).trigger(type, args);\n}\n\n/**\n * Update the information element of the DataTable showing information about the\n * items selected. This is done by adding tags to the existing text\n *\n * @param {DataTable.Api} api DataTable to update\n * @private\n */\nfunction info(api) {\n\tvar ctx = api.settings()[0];\n\n\tif (!ctx._select.info || !ctx.aanFeatures.i) {\n\t\treturn;\n\t}\n\n\tif (api.select.style() === 'api') {\n\t\treturn;\n\t}\n\n\tvar rows = api.rows({ selected: true }).flatten().length;\n\tvar columns = api.columns({ selected: true }).flatten().length;\n\tvar cells = api.cells({ selected: true }).flatten().length;\n\n\tvar add = function (el, name, num) {\n\t\tel.append(\n\t\t\t$('<span class=\"select-item\"/>').append(\n\t\t\t\tapi.i18n(\n\t\t\t\t\t'select.' + name + 's',\n\t\t\t\t\t{ _: '%d ' + name + 's selected', 0: '', 1: '1 ' + name + ' selected' },\n\t\t\t\t\tnum\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t};\n\n\t// Internal knowledge of DataTables to loop over all information elements\n\t$.each(ctx.aanFeatures.i, function (i, el) {\n\t\tel = $(el);\n\n\t\tvar output = $('<span class=\"select-info\"/>');\n\t\tadd(output, 'row', rows);\n\t\tadd(output, 'column', columns);\n\t\tadd(output, 'cell', cells);\n\n\t\tvar exisiting = el.children('span.select-info');\n\t\tif (exisiting.length) {\n\t\t\texisiting.remove();\n\t\t}\n\n\t\tif (output.text() !== '') {\n\t\t\tel.append(output);\n\t\t}\n\t});\n}\n\n/**\n * Initialisation of a new table. Attach event handlers and callbacks to allow\n * Select to operate correctly.\n *\n * This will occur _after_ the initial DataTables initialisation, although\n * before Ajax data is rendered, if there is ajax data\n *\n * @param  {DataTable.settings} ctx Settings object to operate on\n * @private\n */\nfunction init(ctx) {\n\tvar api = new DataTable.Api(ctx);\n\tctx._select_init = true;\n\n\t// Row callback so that classes can be added to rows and cells if the item\n\t// was selected before the element was created. This will happen with the\n\t// `deferRender` option enabled.\n\t//\n\t// This method of attaching to `aoRowCreatedCallback` is a hack until\n\t// DataTables has proper events for row manipulation If you are reviewing\n\t// this code to create your own plug-ins, please do not do this!\n\tctx.aoRowCreatedCallback.push({\n\t\tfn: function (row, data, index) {\n\t\t\tvar i, ien;\n\t\t\tvar d = ctx.aoData[index];\n\n\t\t\t// Row\n\t\t\tif (d._select_selected) {\n\t\t\t\t$(row).addClass(ctx._select.className);\n\t\t\t}\n\n\t\t\t// Cells and columns - if separated out, we would need to do two\n\t\t\t// loops, so it makes sense to combine them into a single one\n\t\t\tfor (i = 0, ien = ctx.aoColumns.length; i < ien; i++) {\n\t\t\t\tif (\n\t\t\t\t\tctx.aoColumns[i]._select_selected ||\n\t\t\t\t\t(d._selected_cells && d._selected_cells[i])\n\t\t\t\t) {\n\t\t\t\t\t$(d.anCells[i]).addClass(ctx._select.className);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsName: 'select-deferRender'\n\t});\n\n\t// On Ajax reload we want to reselect all rows which are currently selected,\n\t// if there is an rowId (i.e. a unique value to identify each row with)\n\tapi.on('preXhr.dt.dtSelect', function (e, settings) {\n\t\tif (settings !== api.settings()[0]) {\n\t\t\t// Not triggered by our DataTable!\n\t\t\treturn;\n\t\t}\n\n\t\t// note that column selection doesn't need to be cached and then\n\t\t// reselected, as they are already selected\n\t\tvar rows = api\n\t\t\t.rows({ selected: true })\n\t\t\t.ids(true)\n\t\t\t.filter(function (d) {\n\t\t\t\treturn d !== undefined;\n\t\t\t});\n\n\t\tvar cells = api\n\t\t\t.cells({ selected: true })\n\t\t\t.eq(0)\n\t\t\t.map(function (cellIdx) {\n\t\t\t\tvar id = api.row(cellIdx.row).id(true);\n\t\t\t\treturn id ? { row: id, column: cellIdx.column } : undefined;\n\t\t\t})\n\t\t\t.filter(function (d) {\n\t\t\t\treturn d !== undefined;\n\t\t\t});\n\n\t\t// On the next draw, reselect the currently selected items\n\t\tapi.one('draw.dt.dtSelect', function () {\n\t\t\tapi.rows(rows).select();\n\n\t\t\t// `cells` is not a cell index selector, so it needs a loop\n\t\t\tif (cells.any()) {\n\t\t\t\tcells.each(function (id) {\n\t\t\t\t\tapi.cells(id.row, id.column).select();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\t// Update the table information element with selected item summary\n\tapi.on('draw.dtSelect.dt select.dtSelect.dt deselect.dtSelect.dt info.dt', function () {\n\t\tinfo(api);\n\t\tapi.state.save();\n\t});\n\n\t// Clean up and release\n\tapi.on('destroy.dtSelect', function () {\n\t\t// Remove class directly rather than calling deselect - which would trigger events\n\t\t$(api.rows({ selected: true }).nodes()).removeClass(api.settings()[0]._select.className);\n\n\t\tdisableMouseSelection(api);\n\t\tapi.off('.dtSelect');\n\t\t$('body').off('.dtSelect' + _safeId(api.table().node()));\n\t});\n}\n\n/**\n * Add one or more items (rows or columns) to the selection when shift clicking\n * in OS selection style\n *\n * @param  {DataTable.Api} dt   DataTable\n * @param  {string}        type Row or column range selector\n * @param  {object}        idx  Item index to select to\n * @param  {object}        last Item index to select from\n * @private\n */\nfunction rowColumnRange(dt, type, idx, last) {\n\t// Add a range of rows from the last selected row to this one\n\tvar indexes = dt[type + 's']({ search: 'applied' }).indexes();\n\tvar idx1 = $.inArray(last, indexes);\n\tvar idx2 = $.inArray(idx, indexes);\n\n\tif (!dt[type + 's']({ selected: true }).any() && idx1 === -1) {\n\t\t// select from top to here - slightly odd, but both Windows and Mac OS\n\t\t// do this\n\t\tindexes.splice($.inArray(idx, indexes) + 1, indexes.length);\n\t}\n\telse {\n\t\t// reverse so we can shift click 'up' as well as down\n\t\tif (idx1 > idx2) {\n\t\t\tvar tmp = idx2;\n\t\t\tidx2 = idx1;\n\t\t\tidx1 = tmp;\n\t\t}\n\n\t\tindexes.splice(idx2 + 1, indexes.length);\n\t\tindexes.splice(0, idx1);\n\t}\n\n\tif (!dt[type](idx, { selected: true }).any()) {\n\t\t// Select range\n\t\tdt[type + 's'](indexes).select();\n\t}\n\telse {\n\t\t// Deselect range - need to keep the clicked on row selected\n\t\tindexes.splice($.inArray(idx, indexes), 1);\n\t\tdt[type + 's'](indexes).deselect();\n\t}\n}\n\n/**\n * Clear all selected items\n *\n * @param  {DataTable.settings} ctx Settings object of the host DataTable\n * @param  {boolean} [force=false] Force the de-selection to happen, regardless\n *     of selection style\n * @private\n */\nfunction clear(ctx, force) {\n\tif (force || ctx._select.style === 'single') {\n\t\tvar api = new DataTable.Api(ctx);\n\n\t\tapi.rows({ selected: true }).deselect();\n\t\tapi.columns({ selected: true }).deselect();\n\t\tapi.cells({ selected: true }).deselect();\n\t}\n}\n\n/**\n * Select items based on the current configuration for style and items.\n *\n * @param  {object}             e    Mouse event object\n * @param  {DataTables.Api}     dt   DataTable\n * @param  {DataTable.settings} ctx  Settings object of the host DataTable\n * @param  {string}             type Items to select\n * @param  {int|object}         idx  Index of the item to select\n * @private\n */\nfunction typeSelect(e, dt, ctx, type, idx) {\n\tvar style = dt.select.style();\n\tvar toggleable = dt.select.toggleable();\n\tvar isSelected = dt[type](idx, { selected: true }).any();\n\n\tif (isSelected && !toggleable) {\n\t\treturn;\n\t}\n\n\tif (style === 'os') {\n\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\t// Add or remove from the selection\n\t\t\tdt[type](idx).select(!isSelected);\n\t\t}\n\t\telse if (e.shiftKey) {\n\t\t\tif (type === 'cell') {\n\t\t\t\tcellRange(dt, idx, ctx._select_lastCell || null);\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowColumnRange(\n\t\t\t\t\tdt,\n\t\t\t\t\ttype,\n\t\t\t\t\tidx,\n\t\t\t\t\tctx._select_lastCell ? ctx._select_lastCell[type] : null\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// No cmd or shift click - deselect if selected, or select\n\t\t\t// this row only\n\t\t\tvar selected = dt[type + 's']({ selected: true });\n\n\t\t\tif (isSelected && selected.flatten().length === 1) {\n\t\t\t\tdt[type](idx).deselect();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tselected.deselect();\n\t\t\t\tdt[type](idx).select();\n\t\t\t}\n\t\t}\n\t}\n\telse if (style == 'multi+shift') {\n\t\tif (e.shiftKey) {\n\t\t\tif (type === 'cell') {\n\t\t\t\tcellRange(dt, idx, ctx._select_lastCell || null);\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowColumnRange(\n\t\t\t\t\tdt,\n\t\t\t\t\ttype,\n\t\t\t\t\tidx,\n\t\t\t\t\tctx._select_lastCell ? ctx._select_lastCell[type] : null\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tdt[type](idx).select(!isSelected);\n\t\t}\n\t}\n\telse {\n\t\tdt[type](idx).select(!isSelected);\n\t}\n}\n\nfunction _safeId(node) {\n\treturn node.id.replace(/[^a-zA-Z0-9\\-\\_]/g, '-');\n}\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables selectors\n */\n\n// row and column are basically identical just assigned to different properties\n// and checking a different array, so we can dynamically create the functions to\n// reduce the code size\n$.each(\n\t[\n\t\t{ type: 'row', prop: 'aoData' },\n\t\t{ type: 'column', prop: 'aoColumns' }\n\t],\n\tfunction (i, o) {\n\t\tDataTable.ext.selector[o.type].push(function (settings, opts, indexes) {\n\t\t\tvar selected = opts.selected;\n\t\t\tvar data;\n\t\t\tvar out = [];\n\n\t\t\tif (selected !== true && selected !== false) {\n\t\t\t\treturn indexes;\n\t\t\t}\n\n\t\t\tfor (var i = 0, ien = indexes.length; i < ien; i++) {\n\t\t\t\tdata = settings[o.prop][indexes[i]];\n\n\t\t\t\tif (\n\t\t\t\t\t(selected === true && data._select_selected === true) ||\n\t\t\t\t\t(selected === false && !data._select_selected)\n\t\t\t\t) {\n\t\t\t\t\tout.push(indexes[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn out;\n\t\t});\n\t}\n);\n\nDataTable.ext.selector.cell.push(function (settings, opts, cells) {\n\tvar selected = opts.selected;\n\tvar rowData;\n\tvar out = [];\n\n\tif (selected === undefined) {\n\t\treturn cells;\n\t}\n\n\tfor (var i = 0, ien = cells.length; i < ien; i++) {\n\t\trowData = settings.aoData[cells[i].row];\n\n\t\tif (\n\t\t\t(selected === true &&\n\t\t\t\trowData._selected_cells &&\n\t\t\t\trowData._selected_cells[cells[i].column] === true) ||\n\t\t\t(selected === false &&\n\t\t\t\t(!rowData._selected_cells || !rowData._selected_cells[cells[i].column]))\n\t\t) {\n\t\t\tout.push(cells[i]);\n\t\t}\n\t}\n\n\treturn out;\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables API\n *\n * For complete documentation, please refer to the docs/api directory or the\n * DataTables site\n */\n\n// Local variables to improve compression\nvar apiRegister = DataTable.Api.register;\nvar apiRegisterPlural = DataTable.Api.registerPlural;\n\napiRegister('select()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tDataTable.select.init(new DataTable.Api(ctx));\n\t});\n});\n\napiRegister('select.blurable()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.context[0]._select.blurable;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tctx._select.blurable = flag;\n\t});\n});\n\napiRegister('select.toggleable()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.context[0]._select.toggleable;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tctx._select.toggleable = flag;\n\t});\n});\n\napiRegister('select.info()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.context[0]._select.info;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tctx._select.info = flag;\n\t});\n});\n\napiRegister('select.items()', function (items) {\n\tif (items === undefined) {\n\t\treturn this.context[0]._select.items;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tctx._select.items = items;\n\n\t\teventTrigger(new DataTable.Api(ctx), 'selectItems', [items]);\n\t});\n});\n\n// Takes effect from the _next_ selection. None disables future selection, but\n// does not clear the current selection. Use the `deselect` methods for that\napiRegister('select.style()', function (style) {\n\tif (style === undefined) {\n\t\treturn this.context[0]._select.style;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tif (!ctx._select) {\n\t\t\tDataTable.select.init(new DataTable.Api(ctx));\n\t\t}\n\n\t\tif (!ctx._select_init) {\n\t\t\tinit(ctx);\n\t\t}\n\n\t\tctx._select.style = style;\n\n\t\t// Add / remove mouse event handlers. They aren't required when only\n\t\t// API selection is available\n\t\tvar dt = new DataTable.Api(ctx);\n\t\tdisableMouseSelection(dt);\n\n\t\tif (style !== 'api') {\n\t\t\tenableMouseSelection(dt);\n\t\t}\n\n\t\teventTrigger(new DataTable.Api(ctx), 'selectStyle', [style]);\n\t});\n});\n\napiRegister('select.selector()', function (selector) {\n\tif (selector === undefined) {\n\t\treturn this.context[0]._select.selector;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tdisableMouseSelection(new DataTable.Api(ctx));\n\n\t\tctx._select.selector = selector;\n\n\t\tif (ctx._select.style !== 'api') {\n\t\t\tenableMouseSelection(new DataTable.Api(ctx));\n\t\t}\n\t});\n});\n\napiRegisterPlural('rows().select()', 'row().select()', function (select) {\n\tvar api = this;\n\n\tif (select === false) {\n\t\treturn this.deselect();\n\t}\n\n\tthis.iterator('row', function (ctx, idx) {\n\t\tclear(ctx);\n\n\t\tctx.aoData[idx]._select_selected = true;\n\t\t$(ctx.aoData[idx].nTr).addClass(ctx._select.className);\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'select', ['row', api[i]], true);\n\t});\n\n\treturn this;\n});\n\napiRegister('row().selected()', function () {\n\tvar ctx = this.context[0];\n\n\tif (ctx && this.length && ctx.aoData[this[0]] && ctx.aoData[this[0]]._select_selected) {\n\t\treturn true;\n\t}\n\n\treturn false;\n});\n\napiRegisterPlural('columns().select()', 'column().select()', function (select) {\n\tvar api = this;\n\n\tif (select === false) {\n\t\treturn this.deselect();\n\t}\n\n\tthis.iterator('column', function (ctx, idx) {\n\t\tclear(ctx);\n\n\t\tctx.aoColumns[idx]._select_selected = true;\n\n\t\tvar column = new DataTable.Api(ctx).column(idx);\n\n\t\t$(column.header()).addClass(ctx._select.className);\n\t\t$(column.footer()).addClass(ctx._select.className);\n\n\t\tcolumn.nodes().to$().addClass(ctx._select.className);\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'select', ['column', api[i]], true);\n\t});\n\n\treturn this;\n});\n\napiRegister('column().selected()', function () {\n\tvar ctx = this.context[0];\n\n\tif (ctx && this.length && ctx.aoColumns[this[0]] && ctx.aoColumns[this[0]]._select_selected) {\n\t\treturn true;\n\t}\n\n\treturn false;\n});\n\napiRegisterPlural('cells().select()', 'cell().select()', function (select) {\n\tvar api = this;\n\n\tif (select === false) {\n\t\treturn this.deselect();\n\t}\n\n\tthis.iterator('cell', function (ctx, rowIdx, colIdx) {\n\t\tclear(ctx);\n\n\t\tvar data = ctx.aoData[rowIdx];\n\n\t\tif (data._selected_cells === undefined) {\n\t\t\tdata._selected_cells = [];\n\t\t}\n\n\t\tdata._selected_cells[colIdx] = true;\n\n\t\tif (data.anCells) {\n\t\t\t$(data.anCells[colIdx]).addClass(ctx._select.className);\n\t\t}\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'select', ['cell', api.cells(api[i]).indexes().toArray()], true);\n\t});\n\n\treturn this;\n});\n\napiRegister('cell().selected()', function () {\n\tvar ctx = this.context[0];\n\n\tif (ctx && this.length) {\n\t\tvar row = ctx.aoData[this[0][0].row];\n\n\t\tif (row && row._selected_cells && row._selected_cells[this[0][0].column]) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n});\n\napiRegisterPlural('rows().deselect()', 'row().deselect()', function () {\n\tvar api = this;\n\n\tthis.iterator('row', function (ctx, idx) {\n\t\tctx.aoData[idx]._select_selected = false;\n\t\tctx._select_lastCell = null;\n\t\t$(ctx.aoData[idx].nTr).removeClass(ctx._select.className);\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'deselect', ['row', api[i]], true);\n\t});\n\n\treturn this;\n});\n\napiRegisterPlural('columns().deselect()', 'column().deselect()', function () {\n\tvar api = this;\n\n\tthis.iterator('column', function (ctx, idx) {\n\t\tctx.aoColumns[idx]._select_selected = false;\n\n\t\tvar api = new DataTable.Api(ctx);\n\t\tvar column = api.column(idx);\n\n\t\t$(column.header()).removeClass(ctx._select.className);\n\t\t$(column.footer()).removeClass(ctx._select.className);\n\n\t\t// Need to loop over each cell, rather than just using\n\t\t// `column().nodes()` as cells which are individually selected should\n\t\t// not have the `selected` class removed from them\n\t\tapi.cells(null, idx)\n\t\t\t.indexes()\n\t\t\t.each(function (cellIdx) {\n\t\t\t\tvar data = ctx.aoData[cellIdx.row];\n\t\t\t\tvar cellSelected = data._selected_cells;\n\n\t\t\t\tif (data.anCells && (!cellSelected || !cellSelected[cellIdx.column])) {\n\t\t\t\t\t$(data.anCells[cellIdx.column]).removeClass(ctx._select.className);\n\t\t\t\t}\n\t\t\t});\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'deselect', ['column', api[i]], true);\n\t});\n\n\treturn this;\n});\n\napiRegisterPlural('cells().deselect()', 'cell().deselect()', function () {\n\tvar api = this;\n\n\tthis.iterator('cell', function (ctx, rowIdx, colIdx) {\n\t\tvar data = ctx.aoData[rowIdx];\n\n\t\tif (data._selected_cells !== undefined) {\n\t\t\tdata._selected_cells[colIdx] = false;\n\t\t}\n\n\t\t// Remove class only if the cells exist, and the cell is not column\n\t\t// selected, in which case the class should remain (since it is selected\n\t\t// in the column)\n\t\tif (data.anCells && !ctx.aoColumns[colIdx]._select_selected) {\n\t\t\t$(data.anCells[colIdx]).removeClass(ctx._select.className);\n\t\t}\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'deselect', ['cell', api[i]], true);\n\t});\n\n\treturn this;\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Buttons\n */\nfunction i18n(label, def) {\n\treturn function (dt) {\n\t\treturn dt.i18n('buttons.' + label, def);\n\t};\n}\n\n// Common events with suitable namespaces\nfunction namespacedEvents(config) {\n\tvar unique = config._eventNamespace;\n\n\treturn 'draw.dt.DT' + unique + ' select.dt.DT' + unique + ' deselect.dt.DT' + unique;\n}\n\nfunction enabled(dt, config) {\n\tif ($.inArray('rows', config.limitTo) !== -1 && dt.rows({ selected: true }).any()) {\n\t\treturn true;\n\t}\n\n\tif ($.inArray('columns', config.limitTo) !== -1 && dt.columns({ selected: true }).any()) {\n\t\treturn true;\n\t}\n\n\tif ($.inArray('cells', config.limitTo) !== -1 && dt.cells({ selected: true }).any()) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nvar _buttonNamespace = 0;\n\n$.extend(DataTable.ext.buttons, {\n\tselected: {\n\t\ttext: i18n('selected', 'Selected'),\n\t\tclassName: 'buttons-selected',\n\t\tlimitTo: ['rows', 'columns', 'cells'],\n\t\tinit: function (dt, node, config) {\n\t\t\tvar that = this;\n\t\t\tconfig._eventNamespace = '.select' + _buttonNamespace++;\n\n\t\t\t// .DT namespace listeners are removed by DataTables automatically\n\t\t\t// on table destroy\n\t\t\tdt.on(namespacedEvents(config), function () {\n\t\t\t\tthat.enable(enabled(dt, config));\n\t\t\t});\n\n\t\t\tthis.disable();\n\t\t},\n\t\tdestroy: function (dt, node, config) {\n\t\t\tdt.off(config._eventNamespace);\n\t\t}\n\t},\n\tselectedSingle: {\n\t\ttext: i18n('selectedSingle', 'Selected single'),\n\t\tclassName: 'buttons-selected-single',\n\t\tinit: function (dt, node, config) {\n\t\t\tvar that = this;\n\t\t\tconfig._eventNamespace = '.select' + _buttonNamespace++;\n\n\t\t\tdt.on(namespacedEvents(config), function () {\n\t\t\t\tvar count =\n\t\t\t\t\tdt.rows({ selected: true }).flatten().length +\n\t\t\t\t\tdt.columns({ selected: true }).flatten().length +\n\t\t\t\t\tdt.cells({ selected: true }).flatten().length;\n\n\t\t\t\tthat.enable(count === 1);\n\t\t\t});\n\n\t\t\tthis.disable();\n\t\t},\n\t\tdestroy: function (dt, node, config) {\n\t\t\tdt.off(config._eventNamespace);\n\t\t}\n\t},\n\tselectAll: {\n\t\ttext: i18n('selectAll', 'Select all'),\n\t\tclassName: 'buttons-select-all',\n\t\taction: function (e, dt, node, config) {\n\t\t\tvar items = this.select.items();\n\t\t\tvar mod = config.selectorModifier;\n\t\t\t\n\t\t\tif (mod) {\n\t\t\t\tif (typeof mod === 'function') {\n\t\t\t\t\tmod = mod.call(dt, e, dt, node, config);\n\t\t\t\t}\n\n\t\t\t\tthis[items + 's'](mod).select();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis[items + 's']().select();\n\t\t\t}\n\t\t}\n\t\t// selectorModifier can be specified\n\t},\n\tselectNone: {\n\t\ttext: i18n('selectNone', 'Deselect all'),\n\t\tclassName: 'buttons-select-none',\n\t\taction: function () {\n\t\t\tclear(this.settings()[0], true);\n\t\t},\n\t\tinit: function (dt, node, config) {\n\t\t\tvar that = this;\n\t\t\tconfig._eventNamespace = '.select' + _buttonNamespace++;\n\n\t\t\tdt.on(namespacedEvents(config), function () {\n\t\t\t\tvar count =\n\t\t\t\t\tdt.rows({ selected: true }).flatten().length +\n\t\t\t\t\tdt.columns({ selected: true }).flatten().length +\n\t\t\t\t\tdt.cells({ selected: true }).flatten().length;\n\n\t\t\t\tthat.enable(count > 0);\n\t\t\t});\n\n\t\t\tthis.disable();\n\t\t},\n\t\tdestroy: function (dt, node, config) {\n\t\t\tdt.off(config._eventNamespace);\n\t\t}\n\t},\n\tshowSelected: {\n\t\ttext: i18n('showSelected', 'Show only selected'),\n\t\tclassName: 'buttons-show-selected',\n\t\taction: function (e, dt, node, conf) {\n\t\t\t// Works by having a filtering function which will reduce to the selected\n\t\t\t// items only. So we can re-reference the function it gets stored in the\n\t\t\t// `conf` object\n\t\t\tif (conf._filter) {\n\t\t\t\tvar idx = DataTable.ext.search.indexOf(conf._filter);\n\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tDataTable.ext.search.splice(idx, 1);\n\t\t\t\t\tconf._filter = null;\n\t\t\t\t}\n\n\t\t\t\tthis.active(false);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar fn = function (s, data, idx) {\n\t\t\t\t\t// Need to be sure we are operating on our table!\n\t\t\t\t\tif (s !== dt.settings()[0]) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet row = s.aoData[idx];\n\n\t\t\t\t\treturn row._select_selected;\n\t\t\t\t};\n\n\t\t\t\tconf._filter = fn;\n\t\t\t\tDataTable.ext.search.push(fn);\n\n\t\t\t\tthis.active(true);\n\t\t\t}\n\n\t\t\tdt.draw();\n\t\t}\n\t}\n});\n\n$.each(['Row', 'Column', 'Cell'], function (i, item) {\n\tvar lc = item.toLowerCase();\n\n\tDataTable.ext.buttons['select' + item + 's'] = {\n\t\ttext: i18n('select' + item + 's', 'Select ' + lc + 's'),\n\t\tclassName: 'buttons-select-' + lc + 's',\n\t\taction: function () {\n\t\t\tthis.select.items(lc);\n\t\t},\n\t\tinit: function (dt) {\n\t\t\tvar that = this;\n\n\t\t\tdt.on('selectItems.dt.DT', function (e, ctx, items) {\n\t\t\t\tthat.active(items === lc);\n\t\t\t});\n\t\t}\n\t};\n});\n\n$.fn.DataTable.select = DataTable.select;\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Initialisation\n */\n\n// DataTables creation - check if select has been defined in the options. Note\n// this required that the table be in the document! If it isn't then something\n// needs to trigger this method unfortunately. The next major release of\n// DataTables will rework the events and address this.\n$(document).on('preInit.dt.dtSelect', function (e, ctx) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tDataTable.select.init(new DataTable.Api(ctx));\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/js/select.bootstrap.js",
    "content": "/*! Bootstrap 3 styling wrapper for Select\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-select'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.select ) {\n\t\t\t\trequire('datatables.net-select')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/js/select.bootstrap4.js",
    "content": "/*! Bootstrap 4 styling wrapper for Select\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-select'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.select ) {\n\t\t\t\trequire('datatables.net-select')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/js/select.bootstrap5.js",
    "content": "/*! Bootstrap 5 styling wrapper for Select\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-select'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.select ) {\n\t\t\t\trequire('datatables.net-select')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/js/select.bulma.js",
    "content": "/*! Bulma styling wrapper for Select\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-select'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.select ) {\n\t\t\t\trequire('datatables.net-select')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/js/select.dataTables.js",
    "content": "/*! DataTables styling wrapper for Select\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-select'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.select ) {\n\t\t\t\trequire('datatables.net-select')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/js/select.foundation.js",
    "content": "/*! Foundation styling wrapper for Select\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-select'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.select ) {\n\t\t\t\trequire('datatables.net-select')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/js/select.jqueryui.js",
    "content": "/*! jQuery UI styling wrapper for Select\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-select'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.select ) {\n\t\t\t\trequire('datatables.net-select')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/Select-1.7.0/js/select.semanticui.js",
    "content": "/*! Semanic UI styling wrapper for Select\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-select'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.select ) {\n\t\t\t\trequire('datatables.net-select')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/css/stateRestore.bootstrap.css",
    "content": "div.dtsr-confirmation,\ndiv.dtsr-creation {\n  position: fixed;\n  top: 20%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 2003;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dtsr-confirmation button,\ndiv.dtsr-creation button {\n  display: inline-block;\n  margin: 1em;\n  padding: 0.5em 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dtsr-confirmation button:hover,\ndiv.dtsr-creation button:hover {\n  background-color: #ebebeb;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row,\ndiv.dtsr-creation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-confirmation-title-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text h2,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row h2,\ndiv.dtsr-creation div.dtsr-creation-text h2,\ndiv.dtsr-creation div.dtsr-confirmation-title-row h2 {\n  border-bottom: 0px;\n  margin-top: 0px;\n  padding-top: 0px;\n  margin-bottom: 1rem;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: center;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons,\ndiv.dtsr-creation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-confirmation-buttons {\n  text-align: right;\n  margin-top: 1em;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot button,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons button,\ndiv.dtsr-creation div.dtsr-modal-foot button,\ndiv.dtsr-creation div.dtsr-confirmation-buttons button {\n  margin: 0px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-creation-text {\n  text-align: left;\n  padding: 0px;\n  border: none;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text span,\ndiv.dtsr-creation div.dtsr-creation-text span {\n  font-size: 20px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right {\n  display: inline-block;\n  width: 50%;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left {\n  text-align: right;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-right, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-name-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-name-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row {\n  margin: 0.5em 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:first-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:first-child {\n  margin-top: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:last-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:last-child {\n  margin-bottom: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label {\n  width: 25%;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: 25%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-confirmation-text label.dtsr-name-label {\n  width: auto;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-modal-foot {\n  text-align: right;\n  padding-top: 10px;\n}\ndiv.dtsr-confirmation span.dtsr-modal-error,\ndiv.dtsr-creation span.dtsr-modal-error {\n  color: red;\n  font-size: 0.9em;\n}\n\ndiv.dtsr-creation {\n  top: 10%;\n}\n\ndiv.dtsr-check-row {\n  padding-top: 0px;\n}\n\ndiv.dtsr-popover-close {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\n\ndiv.dtsr-background {\n  z-index: 2002;\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n}\n\ndiv.dt-button-collection h3 {\n  text-align: center;\n  margin-top: 4px;\n  margin-bottom: 8px;\n  font-size: 1.5em;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\ndiv.dt-button-collection span.dtsr-emptyStates {\n  border-radius: 5px;\n  display: inline-block;\n  line-height: 1.6em;\n  white-space: nowrap;\n  text-align: center;\n  vertical-align: middle;\n  width: 100%;\n  padding-bottom: 7px;\n  padding-top: 3px;\n}\n\nhtml.dark div.dtsr-confirmation,\nhtml.dark div.dtsr-creation,\nhtml[data-bs-theme=dark] div.dtsr-confirmation,\nhtml[data-bs-theme=dark] div.dtsr-creation {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dtsr-confirmation button,\nhtml.dark div.dtsr-creation button,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button,\nhtml[data-bs-theme=dark] div.dtsr-creation button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dtsr-confirmation button:hover,\nhtml.dark div.dtsr-creation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-creation button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\nspan.dtsr-check-label {\n  padding-left: 3px;\n}\n\ndiv.dt-button-collection h3 {\n  margin-top: 8px;\n}\ndiv.dt-button-collection ul.dropdown-menu {\n  padding-top: 0px;\n}\ndiv.dt-button-collection ul.dropdown-menu div.dt-btn-split-wrapper {\n  width: 96% !important;\n  margin-left: 4px !important;\n  margin-top: 4px;\n}\ndiv.dt-button-collection ul.dropdown-menu div.dt-btn-split-wrapper button.btn {\n  width: calc(100% - 32px);\n}\ndiv.dt-button-collection ul.dropdown-menu div.dt-btn-split-wrapper button.dt-btn-split-drop {\n  width: 32px;\n}\n\ndiv.dt-button-split-left div.dropdown-menu {\n  padding-left: 4px;\n  padding-right: 4px;\n  padding-top: 0px;\n}\ndiv.dt-button-split-left div.dropdown-menu button.dt-btn-split-drop-button {\n  background-color: white;\n  border: 1px solid rgb(204, 204, 204);\n  border-radius: 4px;\n  margin-top: 4px;\n}\ndiv.dt-button-split-left div.dropdown-menu button.dt-btn-split-drop-button:hover {\n  background-color: #f5f5f5;\n}\n\ninput.dtsr-input {\n  display: inline-block;\n  width: auto;\n  margin-left: 3px;\n}\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/css/stateRestore.bootstrap4.css",
    "content": "div.dtsr-confirmation,\ndiv.dtsr-creation {\n  position: fixed;\n  top: 20%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 2003;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dtsr-confirmation button,\ndiv.dtsr-creation button {\n  display: inline-block;\n  margin: 1em;\n  padding: 0.5em 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dtsr-confirmation button:hover,\ndiv.dtsr-creation button:hover {\n  background-color: #ebebeb;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row,\ndiv.dtsr-creation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-confirmation-title-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text h2,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row h2,\ndiv.dtsr-creation div.dtsr-creation-text h2,\ndiv.dtsr-creation div.dtsr-confirmation-title-row h2 {\n  border-bottom: 0px;\n  margin-top: 0px;\n  padding-top: 0px;\n  margin-bottom: 1rem;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: center;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons,\ndiv.dtsr-creation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-confirmation-buttons {\n  text-align: right;\n  margin-top: 1em;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot button,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons button,\ndiv.dtsr-creation div.dtsr-modal-foot button,\ndiv.dtsr-creation div.dtsr-confirmation-buttons button {\n  margin: 0px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-creation-text {\n  text-align: left;\n  padding: 0px;\n  border: none;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text span,\ndiv.dtsr-creation div.dtsr-creation-text span {\n  font-size: 20px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right {\n  display: inline-block;\n  width: 50%;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left {\n  text-align: right;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-right, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-name-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-name-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row {\n  margin: 0.5em 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:first-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:first-child {\n  margin-top: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:last-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:last-child {\n  margin-bottom: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label {\n  width: 25%;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: 25%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-confirmation-text label.dtsr-name-label {\n  width: auto;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-modal-foot {\n  text-align: right;\n  padding-top: 10px;\n}\ndiv.dtsr-confirmation span.dtsr-modal-error,\ndiv.dtsr-creation span.dtsr-modal-error {\n  color: red;\n  font-size: 0.9em;\n}\n\ndiv.dtsr-creation {\n  top: 10%;\n}\n\ndiv.dtsr-check-row {\n  padding-top: 0px;\n}\n\ndiv.dtsr-popover-close {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\n\ndiv.dtsr-background {\n  z-index: 2002;\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n}\n\ndiv.dt-button-collection h3 {\n  text-align: center;\n  margin-top: 4px;\n  margin-bottom: 8px;\n  font-size: 1.5em;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\ndiv.dt-button-collection span.dtsr-emptyStates {\n  border-radius: 5px;\n  display: inline-block;\n  line-height: 1.6em;\n  white-space: nowrap;\n  text-align: center;\n  vertical-align: middle;\n  width: 100%;\n  padding-bottom: 7px;\n  padding-top: 3px;\n}\n\nhtml.dark div.dtsr-confirmation,\nhtml.dark div.dtsr-creation,\nhtml[data-bs-theme=dark] div.dtsr-confirmation,\nhtml[data-bs-theme=dark] div.dtsr-creation {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dtsr-confirmation button,\nhtml.dark div.dtsr-creation button,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button,\nhtml[data-bs-theme=dark] div.dtsr-creation button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dtsr-confirmation button:hover,\nhtml.dark div.dtsr-creation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-creation button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\ndiv.dt-button-collection h3 {\n  margin-top: 8px;\n  font-size: 1.5rem;\n}\ndiv.dt-button-collection div.dropdown-menu {\n  padding-top: 0px;\n  padding-bottom: 4px;\n  padding-left: 4px;\n  padding-right: 4px;\n}\ndiv.dt-button-collection div.dropdown-menu div.dt-btn-split-wrapper {\n  margin-top: 4px;\n}\n\ndiv.dt-button-split-left div.dropdown-menu {\n  padding-right: 4px;\n  padding-left: 4px;\n  padding-bottom: 4px;\n}\ndiv.dt-button-split-left div.dropdown-menu button.dt-btn-split-drop-button {\n  color: rgb(255, 255, 255);\n  border-radius: 4px;\n  background-color: rgb(107, 117, 125);\n  margin-top: 4px;\n}\ndiv.dt-button-split-left div.dropdown-menu button.dt-btn-split-drop-button:hover {\n  background-color: rgb(90, 98, 104);\n}\n\ninput.dtsr-input {\n  display: inline-block;\n  width: auto;\n  margin-left: 3px;\n}\n\ndiv.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label {\n  width: 33.3%;\n  display: inline-block;\n  text-align: left !important;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n  position: relative;\n}\n\ndiv.dtsr-confirmation-text {\n  margin-top: 1.5em;\n}\ndiv.dtsr-confirmation-text label.dtsr-name-label {\n  width: 33.3%;\n  display: inline-block;\n  text-align: left !important;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-confirmation-text input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation-text input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n  position: relative;\n}\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/css/stateRestore.bootstrap5.css",
    "content": "div.dtsr-confirmation,\ndiv.dtsr-creation {\n  position: fixed;\n  top: 20%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 2003;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dtsr-confirmation button,\ndiv.dtsr-creation button {\n  display: inline-block;\n  margin: 1em;\n  padding: 0.5em 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dtsr-confirmation button:hover,\ndiv.dtsr-creation button:hover {\n  background-color: #ebebeb;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row,\ndiv.dtsr-creation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-confirmation-title-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text h2,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row h2,\ndiv.dtsr-creation div.dtsr-creation-text h2,\ndiv.dtsr-creation div.dtsr-confirmation-title-row h2 {\n  border-bottom: 0px;\n  margin-top: 0px;\n  padding-top: 0px;\n  margin-bottom: 1rem;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: center;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons,\ndiv.dtsr-creation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-confirmation-buttons {\n  text-align: right;\n  margin-top: 1em;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot button,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons button,\ndiv.dtsr-creation div.dtsr-modal-foot button,\ndiv.dtsr-creation div.dtsr-confirmation-buttons button {\n  margin: 0px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-creation-text {\n  text-align: left;\n  padding: 0px;\n  border: none;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text span,\ndiv.dtsr-creation div.dtsr-creation-text span {\n  font-size: 20px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right {\n  display: inline-block;\n  width: 50%;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left {\n  text-align: right;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-right, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-name-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-name-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row {\n  margin: 0.5em 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:first-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:first-child {\n  margin-top: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:last-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:last-child {\n  margin-bottom: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label {\n  width: 25%;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: 25%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-confirmation-text label.dtsr-name-label {\n  width: auto;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-modal-foot {\n  text-align: right;\n  padding-top: 10px;\n}\ndiv.dtsr-confirmation span.dtsr-modal-error,\ndiv.dtsr-creation span.dtsr-modal-error {\n  color: red;\n  font-size: 0.9em;\n}\n\ndiv.dtsr-creation {\n  top: 10%;\n}\n\ndiv.dtsr-check-row {\n  padding-top: 0px;\n}\n\ndiv.dtsr-popover-close {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\n\ndiv.dtsr-background {\n  z-index: 2002;\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n}\n\ndiv.dt-button-collection h3 {\n  text-align: center;\n  margin-top: 4px;\n  margin-bottom: 8px;\n  font-size: 1.5em;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\ndiv.dt-button-collection span.dtsr-emptyStates {\n  border-radius: 5px;\n  display: inline-block;\n  line-height: 1.6em;\n  white-space: nowrap;\n  text-align: center;\n  vertical-align: middle;\n  width: 100%;\n  padding-bottom: 7px;\n  padding-top: 3px;\n}\n\nhtml.dark div.dtsr-confirmation,\nhtml.dark div.dtsr-creation,\nhtml[data-bs-theme=dark] div.dtsr-confirmation,\nhtml[data-bs-theme=dark] div.dtsr-creation {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dtsr-confirmation button,\nhtml.dark div.dtsr-creation button,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button,\nhtml[data-bs-theme=dark] div.dtsr-creation button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dtsr-confirmation button:hover,\nhtml.dark div.dtsr-creation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-creation button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\nspan.dtsr-check-label {\n  padding-left: 3px;\n}\n\ndiv.dt-button-collection h3 {\n  margin-top: 8px;\n}\ndiv.dt-button-collection div.dropdown-menu {\n  padding-top: 0px;\n  padding-bottom: 4px;\n}\ndiv.dt-button-collection div.dropdown-menu div.dt-btn-split-wrapper {\n  margin-top: 4px;\n  padding-left: 3px;\n  padding-right: 3px;\n}\ndiv.dt-button-collection div.dropdown-menu div.dt-btn-split-wrapper button.btn {\n  width: calc(100% - 30px);\n}\ndiv.dt-button-collection div.dropdown-menu div.dt-btn-split-wrapper button.dt-btn-split-drop {\n  width: 30px;\n}\ndiv.dt-button-collection div.dropdown-menu button.dt-btn-split-drop-button {\n  margin-left: -2px;\n  margin-right: -2px;\n}\n\ndiv.dt-button-split-left div.dropdown-menu {\n  padding-left: 4px;\n  padding-right: 4px;\n}\ndiv.dt-button-split-left div.dropdown-menu button.dt-btn-split-drop-button {\n  color: rgb(255, 255, 255);\n  border-radius: 4px;\n  background-color: rgb(107, 117, 125);\n  margin-top: 4px;\n}\ndiv.dt-button-split-left div.dropdown-menu button.dt-btn-split-drop-button:hover {\n  background-color: rgb(90, 98, 104);\n}\n\ninput.dtsr-input {\n  margin-left: 3px;\n  display: inline-block;\n  width: auto;\n}\n\ndiv.dtsr-creation-form div.dtsr-check-row {\n  height: 25px;\n}\ndiv.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label {\n  width: 33.3%;\n  display: inline-block;\n  text-align: left !important;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n  position: relative;\n  float: none;\n  line-height: normal;\n}\n\ndiv.dtsr-confirmation-text {\n  margin-top: 1.5em;\n}\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/css/stateRestore.bulma.css",
    "content": "div.dtsr-confirmation,\ndiv.dtsr-creation {\n  position: fixed;\n  top: 20%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 2003;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dtsr-confirmation button,\ndiv.dtsr-creation button {\n  display: inline-block;\n  margin: 1em;\n  padding: 0.5em 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dtsr-confirmation button:hover,\ndiv.dtsr-creation button:hover {\n  background-color: #ebebeb;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row,\ndiv.dtsr-creation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-confirmation-title-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text h2,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row h2,\ndiv.dtsr-creation div.dtsr-creation-text h2,\ndiv.dtsr-creation div.dtsr-confirmation-title-row h2 {\n  border-bottom: 0px;\n  margin-top: 0px;\n  padding-top: 0px;\n  margin-bottom: 1rem;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: center;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons,\ndiv.dtsr-creation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-confirmation-buttons {\n  text-align: right;\n  margin-top: 1em;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot button,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons button,\ndiv.dtsr-creation div.dtsr-modal-foot button,\ndiv.dtsr-creation div.dtsr-confirmation-buttons button {\n  margin: 0px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-creation-text {\n  text-align: left;\n  padding: 0px;\n  border: none;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text span,\ndiv.dtsr-creation div.dtsr-creation-text span {\n  font-size: 20px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right {\n  display: inline-block;\n  width: 50%;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left {\n  text-align: right;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-right, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-name-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-name-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row {\n  margin: 0.5em 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:first-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:first-child {\n  margin-top: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:last-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:last-child {\n  margin-bottom: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label {\n  width: 25%;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: 25%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-confirmation-text label.dtsr-name-label {\n  width: auto;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-modal-foot {\n  text-align: right;\n  padding-top: 10px;\n}\ndiv.dtsr-confirmation span.dtsr-modal-error,\ndiv.dtsr-creation span.dtsr-modal-error {\n  color: red;\n  font-size: 0.9em;\n}\n\ndiv.dtsr-creation {\n  top: 10%;\n}\n\ndiv.dtsr-check-row {\n  padding-top: 0px;\n}\n\ndiv.dtsr-popover-close {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\n\ndiv.dtsr-background {\n  z-index: 2002;\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n}\n\ndiv.dt-button-collection h3 {\n  text-align: center;\n  margin-top: 4px;\n  margin-bottom: 8px;\n  font-size: 1.5em;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\ndiv.dt-button-collection span.dtsr-emptyStates {\n  border-radius: 5px;\n  display: inline-block;\n  line-height: 1.6em;\n  white-space: nowrap;\n  text-align: center;\n  vertical-align: middle;\n  width: 100%;\n  padding-bottom: 7px;\n  padding-top: 3px;\n}\n\nhtml.dark div.dtsr-confirmation,\nhtml.dark div.dtsr-creation,\nhtml[data-bs-theme=dark] div.dtsr-confirmation,\nhtml[data-bs-theme=dark] div.dtsr-creation {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dtsr-confirmation button,\nhtml.dark div.dtsr-creation button,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button,\nhtml[data-bs-theme=dark] div.dtsr-creation button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dtsr-confirmation button:hover,\nhtml.dark div.dtsr-creation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-creation button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\ndiv.dtsr-form-row {\n  display: block;\n}\n\ndiv.dtsr-creation-form {\n  width: 100%;\n}\n\ndiv.checkbox {\n  cursor: default;\n}\n\nspan.dtsr-check-label {\n  padding-left: 3px;\n}\n\ninput.dtsr-input {\n  display: inline-block;\n  width: auto;\n}\n\nspan.dtsr-confirmation-message {\n  font-size: 1rem;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  line-height: 2.5em;\n}\n\ndiv.dt-button-collection {\n  width: auto;\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n}\ndiv.dt-button-collection div.dropdown-content {\n  width: 100%;\n  padding-top: 0.5rem;\n  padding-bottom: 0px;\n}\ndiv.dt-button-collection div.dropdown-content div.dropdown-trigger {\n  margin-bottom: 0px !important;\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\ndiv.dt-button-collection div.dropdown-content div.dropdown-trigger button.dt-button {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n\ndiv.dt-button-split-left div.dropdown-content {\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n  padding-top: 1rem;\n  padding-bottom: 0.5rem;\n  width: 100%;\n}\ndiv.dt-button-split-left div.dropdown-content button.dt-btn-split-drop-button {\n  width: 100%;\n  margin-top: 0.5rem;\n}\n\ndiv.dtsr-form-row label.dtsr-name-label, div.dtsr-confirmation-text label.dtsr-name-label {\n  line-height: 1.5;\n  padding-top: 10px;\n}\n\ndiv.dtsr-confirmation-text, div.dtsr-creation-form {\n  margin-top: 1.5em;\n}\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/css/stateRestore.dataTables.css",
    "content": "div.dtsr-confirmation,\ndiv.dtsr-creation {\n  position: fixed;\n  top: 20%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 2003;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dtsr-confirmation button,\ndiv.dtsr-creation button {\n  display: inline-block;\n  margin: 1em;\n  padding: 0.5em 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dtsr-confirmation button:hover,\ndiv.dtsr-creation button:hover {\n  background-color: #ebebeb;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row,\ndiv.dtsr-creation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-confirmation-title-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text h2,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row h2,\ndiv.dtsr-creation div.dtsr-creation-text h2,\ndiv.dtsr-creation div.dtsr-confirmation-title-row h2 {\n  border-bottom: 0px;\n  margin-top: 0px;\n  padding-top: 0px;\n  margin-bottom: 1rem;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: center;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons,\ndiv.dtsr-creation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-confirmation-buttons {\n  text-align: right;\n  margin-top: 1em;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot button,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons button,\ndiv.dtsr-creation div.dtsr-modal-foot button,\ndiv.dtsr-creation div.dtsr-confirmation-buttons button {\n  margin: 0px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-creation-text {\n  text-align: left;\n  padding: 0px;\n  border: none;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text span,\ndiv.dtsr-creation div.dtsr-creation-text span {\n  font-size: 20px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right {\n  display: inline-block;\n  width: 50%;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left {\n  text-align: right;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-right, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-name-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-name-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row {\n  margin: 0.5em 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:first-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:first-child {\n  margin-top: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:last-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:last-child {\n  margin-bottom: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label {\n  width: 25%;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: 25%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-confirmation-text label.dtsr-name-label {\n  width: auto;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-modal-foot {\n  text-align: right;\n  padding-top: 10px;\n}\ndiv.dtsr-confirmation span.dtsr-modal-error,\ndiv.dtsr-creation span.dtsr-modal-error {\n  color: red;\n  font-size: 0.9em;\n}\n\ndiv.dtsr-creation {\n  top: 10%;\n}\n\ndiv.dtsr-check-row {\n  padding-top: 0px;\n}\n\ndiv.dtsr-popover-close {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\n\ndiv.dtsr-background {\n  z-index: 2002;\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n}\n\ndiv.dt-button-collection h3 {\n  text-align: center;\n  margin-top: 4px;\n  margin-bottom: 8px;\n  font-size: 1.5em;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\ndiv.dt-button-collection span.dtsr-emptyStates {\n  border-radius: 5px;\n  display: inline-block;\n  line-height: 1.6em;\n  white-space: nowrap;\n  text-align: center;\n  vertical-align: middle;\n  width: 100%;\n  padding-bottom: 7px;\n  padding-top: 3px;\n}\n\nhtml.dark div.dtsr-confirmation,\nhtml.dark div.dtsr-creation,\nhtml[data-bs-theme=dark] div.dtsr-confirmation,\nhtml[data-bs-theme=dark] div.dtsr-creation {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dtsr-confirmation button,\nhtml.dark div.dtsr-creation button,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button,\nhtml[data-bs-theme=dark] div.dtsr-creation button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dtsr-confirmation button:hover,\nhtml.dark div.dtsr-creation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-creation button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\ndiv.dt-button-collection h3 {\n  font-size: 1.1em;\n}\n\ndiv.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 57% !important;\n  padding: 5px 4px;\n  border: 1px solid #aaa;\n  border-radius: 3px;\n}\ndiv.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: calc(25% + 30px) !important;\n}\ndiv.dtsr-creation-form div.dtsr-form-row label.dtsr-toggle-title {\n  margin-right: calc(-25% - 30px) !important;\n}\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/css/stateRestore.foundation.css",
    "content": "div.dtsr-confirmation,\ndiv.dtsr-creation {\n  position: fixed;\n  top: 20%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 2003;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dtsr-confirmation button,\ndiv.dtsr-creation button {\n  display: inline-block;\n  margin: 1em;\n  padding: 0.5em 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dtsr-confirmation button:hover,\ndiv.dtsr-creation button:hover {\n  background-color: #ebebeb;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row,\ndiv.dtsr-creation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-confirmation-title-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text h2,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row h2,\ndiv.dtsr-creation div.dtsr-creation-text h2,\ndiv.dtsr-creation div.dtsr-confirmation-title-row h2 {\n  border-bottom: 0px;\n  margin-top: 0px;\n  padding-top: 0px;\n  margin-bottom: 1rem;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: center;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons,\ndiv.dtsr-creation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-confirmation-buttons {\n  text-align: right;\n  margin-top: 1em;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot button,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons button,\ndiv.dtsr-creation div.dtsr-modal-foot button,\ndiv.dtsr-creation div.dtsr-confirmation-buttons button {\n  margin: 0px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-creation-text {\n  text-align: left;\n  padding: 0px;\n  border: none;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text span,\ndiv.dtsr-creation div.dtsr-creation-text span {\n  font-size: 20px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right {\n  display: inline-block;\n  width: 50%;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left {\n  text-align: right;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-right, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-name-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-name-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row {\n  margin: 0.5em 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:first-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:first-child {\n  margin-top: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:last-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:last-child {\n  margin-bottom: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label {\n  width: 25%;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: 25%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-confirmation-text label.dtsr-name-label {\n  width: auto;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-modal-foot {\n  text-align: right;\n  padding-top: 10px;\n}\ndiv.dtsr-confirmation span.dtsr-modal-error,\ndiv.dtsr-creation span.dtsr-modal-error {\n  color: red;\n  font-size: 0.9em;\n}\n\ndiv.dtsr-creation {\n  top: 10%;\n}\n\ndiv.dtsr-check-row {\n  padding-top: 0px;\n}\n\ndiv.dtsr-popover-close {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\n\ndiv.dtsr-background {\n  z-index: 2002;\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n}\n\ndiv.dt-button-collection h3 {\n  text-align: center;\n  margin-top: 4px;\n  margin-bottom: 8px;\n  font-size: 1.5em;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\ndiv.dt-button-collection span.dtsr-emptyStates {\n  border-radius: 5px;\n  display: inline-block;\n  line-height: 1.6em;\n  white-space: nowrap;\n  text-align: center;\n  vertical-align: middle;\n  width: 100%;\n  padding-bottom: 7px;\n  padding-top: 3px;\n}\n\nhtml.dark div.dtsr-confirmation,\nhtml.dark div.dtsr-creation,\nhtml[data-bs-theme=dark] div.dtsr-confirmation,\nhtml[data-bs-theme=dark] div.dtsr-creation {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dtsr-confirmation button,\nhtml.dark div.dtsr-creation button,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button,\nhtml[data-bs-theme=dark] div.dtsr-creation button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dtsr-confirmation button:hover,\nhtml.dark div.dtsr-creation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-creation button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\nspan.dtsr-check-label {\n  padding-left: 3px;\n}\n\ninput.dtsr-check-box {\n  margin-bottom: 0px;\n}\n\nbutton.dtsr-creation-button {\n  margin-bottom: 0px;\n}\n\ndiv.dt-button-collection {\n  width: 150px;\n}\ndiv.dt-button-collection h3 {\n  font-size: 1.35rem;\n}\ndiv.dt-button-collection div.dropdown-pane {\n  width: 150px;\n  padding: 4px !important;\n  padding-bottom: 0px !important;\n}\ndiv.dt-button-collection div.dropdown-pane div.dt-btn-split-wrapper {\n  margin-bottom: 4px;\n}\ndiv.dt-button-collection div.dropdown-pane div.dt-btn-split-wrapper a.button {\n  width: calc(100% - 43px);\n  flex: none !important;\n  height: 41px;\n}\ndiv.dt-button-collection div.dropdown-pane div.dt-btn-split-wrapper button.dt-btn-split-drop {\n  width: 43px;\n  flex: none !important;\n  margin-left: -1px;\n  height: 41px;\n}\ndiv.dt-button-collection div.dropdown-pane button.dt-btn-split-drop-button {\n  width: 100%;\n  margin-bottom: 4px;\n}\n\ndiv.dt-button-split-left div.dropdown-pane {\n  padding-bottom: 4px !important;\n}\n\ninput.dtsr-input {\n  display: inline-block;\n  width: auto;\n  font-size: 1rem;\n  margin-left: 3px;\n}\n\ndiv.dtsr-confirmation-text, div.dtsr-creation-form {\n  margin-top: 1.5em;\n}\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/css/stateRestore.jqueryui.css",
    "content": "div.dtsr-confirmation,\ndiv.dtsr-creation {\n  position: fixed;\n  top: 20%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 2003;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dtsr-confirmation button,\ndiv.dtsr-creation button {\n  display: inline-block;\n  margin: 1em;\n  padding: 0.5em 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dtsr-confirmation button:hover,\ndiv.dtsr-creation button:hover {\n  background-color: #ebebeb;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row,\ndiv.dtsr-creation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-confirmation-title-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text h2,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row h2,\ndiv.dtsr-creation div.dtsr-creation-text h2,\ndiv.dtsr-creation div.dtsr-confirmation-title-row h2 {\n  border-bottom: 0px;\n  margin-top: 0px;\n  padding-top: 0px;\n  margin-bottom: 1rem;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: center;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons,\ndiv.dtsr-creation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-confirmation-buttons {\n  text-align: right;\n  margin-top: 1em;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot button,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons button,\ndiv.dtsr-creation div.dtsr-modal-foot button,\ndiv.dtsr-creation div.dtsr-confirmation-buttons button {\n  margin: 0px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-creation-text {\n  text-align: left;\n  padding: 0px;\n  border: none;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text span,\ndiv.dtsr-creation div.dtsr-creation-text span {\n  font-size: 20px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right {\n  display: inline-block;\n  width: 50%;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left {\n  text-align: right;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-right, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-name-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-name-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row {\n  margin: 0.5em 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:first-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:first-child {\n  margin-top: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:last-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:last-child {\n  margin-bottom: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label {\n  width: 25%;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: 25%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-confirmation-text label.dtsr-name-label {\n  width: auto;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-modal-foot {\n  text-align: right;\n  padding-top: 10px;\n}\ndiv.dtsr-confirmation span.dtsr-modal-error,\ndiv.dtsr-creation span.dtsr-modal-error {\n  color: red;\n  font-size: 0.9em;\n}\n\ndiv.dtsr-creation {\n  top: 10%;\n}\n\ndiv.dtsr-check-row {\n  padding-top: 0px;\n}\n\ndiv.dtsr-popover-close {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\n\ndiv.dtsr-background {\n  z-index: 2002;\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n}\n\ndiv.dt-button-collection h3 {\n  text-align: center;\n  margin-top: 4px;\n  margin-bottom: 8px;\n  font-size: 1.5em;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\ndiv.dt-button-collection span.dtsr-emptyStates {\n  border-radius: 5px;\n  display: inline-block;\n  line-height: 1.6em;\n  white-space: nowrap;\n  text-align: center;\n  vertical-align: middle;\n  width: 100%;\n  padding-bottom: 7px;\n  padding-top: 3px;\n}\n\nhtml.dark div.dtsr-confirmation,\nhtml.dark div.dtsr-creation,\nhtml[data-bs-theme=dark] div.dtsr-confirmation,\nhtml[data-bs-theme=dark] div.dtsr-creation {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dtsr-confirmation button,\nhtml.dark div.dtsr-creation button,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button,\nhtml[data-bs-theme=dark] div.dtsr-creation button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dtsr-confirmation button:hover,\nhtml.dark div.dtsr-creation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-creation button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\ndiv.dt-button-collection {\n  z-index: 2002;\n}\ndiv.dt-button-collection div, div.dt-button-collection ul {\n  background: none;\n}\n\nspan.dtsr-emptyStates {\n  background: white;\n  padding-top: 2px !important;\n}\n\ndiv.dt-btn-split-wrapper {\n  display: inline-block !important;\n  width: 100%;\n}\ndiv.dt-btn-split-wrapper button.ui-button {\n  display: inline-block !important;\n  width: calc(100% - 24px);\n}\ndiv.dt-btn-split-wrapper button.dt-btn-split-drop {\n  display: inline-block !important;\n  width: 24px;\n}\n\ndiv.dt-button-split-left {\n  padding-bottom: 0px;\n}\ndiv.dt-button-split-left button.dt-btn-split-drop-button {\n  width: 100%;\n  display: block;\n  margin-bottom: 8px;\n}\n\nspan.dtsr-confirmation-message {\n  padding-right: 3px;\n}\n\ndiv.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label {\n  width: 33.3%;\n  display: inline-block;\n  text-align: left !important;\n  padding-right: 0px;\n  padding-left: 0px;\n}\ndiv.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 57.6% !important;\n  display: inline-block;\n}\ndiv.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: calc(33.3% + 30px) !important;\n  margin-right: 14px;\n  display: inline-block;\n  position: relative;\n}\ndiv.dtsr-creation-form div.dtsr-form-row label.dtsr-toggle-title {\n  margin-right: calc(-33.3% - 30px) !important;\n}\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/css/stateRestore.semanticui.css",
    "content": "div.dtsr-confirmation,\ndiv.dtsr-creation {\n  position: fixed;\n  top: 20%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 2003;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dtsr-confirmation button,\ndiv.dtsr-creation button {\n  display: inline-block;\n  margin: 1em;\n  padding: 0.5em 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dtsr-confirmation button:hover,\ndiv.dtsr-creation button:hover {\n  background-color: #ebebeb;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row,\ndiv.dtsr-creation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-confirmation-title-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text h2,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row h2,\ndiv.dtsr-creation div.dtsr-creation-text h2,\ndiv.dtsr-creation div.dtsr-confirmation-title-row h2 {\n  border-bottom: 0px;\n  margin-top: 0px;\n  padding-top: 0px;\n  margin-bottom: 1rem;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: center;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons,\ndiv.dtsr-creation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-confirmation-buttons {\n  text-align: right;\n  margin-top: 1em;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot button,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons button,\ndiv.dtsr-creation div.dtsr-modal-foot button,\ndiv.dtsr-creation div.dtsr-confirmation-buttons button {\n  margin: 0px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-creation-text {\n  text-align: left;\n  padding: 0px;\n  border: none;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text span,\ndiv.dtsr-creation div.dtsr-creation-text span {\n  font-size: 20px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right {\n  display: inline-block;\n  width: 50%;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left {\n  text-align: right;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-right, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-name-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-name-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row {\n  margin: 0.5em 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:first-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:first-child {\n  margin-top: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:last-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:last-child {\n  margin-bottom: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label {\n  width: 25%;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: 25%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-confirmation-text label.dtsr-name-label {\n  width: auto;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-modal-foot {\n  text-align: right;\n  padding-top: 10px;\n}\ndiv.dtsr-confirmation span.dtsr-modal-error,\ndiv.dtsr-creation span.dtsr-modal-error {\n  color: red;\n  font-size: 0.9em;\n}\n\ndiv.dtsr-creation {\n  top: 10%;\n}\n\ndiv.dtsr-check-row {\n  padding-top: 0px;\n}\n\ndiv.dtsr-popover-close {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\n\ndiv.dtsr-background {\n  z-index: 2002;\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n}\n\ndiv.dt-button-collection h3 {\n  text-align: center;\n  margin-top: 4px;\n  margin-bottom: 8px;\n  font-size: 1.5em;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\ndiv.dt-button-collection span.dtsr-emptyStates {\n  border-radius: 5px;\n  display: inline-block;\n  line-height: 1.6em;\n  white-space: nowrap;\n  text-align: center;\n  vertical-align: middle;\n  width: 100%;\n  padding-bottom: 7px;\n  padding-top: 3px;\n}\n\nhtml.dark div.dtsr-confirmation,\nhtml.dark div.dtsr-creation,\nhtml[data-bs-theme=dark] div.dtsr-confirmation,\nhtml[data-bs-theme=dark] div.dtsr-creation {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dtsr-confirmation button,\nhtml.dark div.dtsr-creation button,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button,\nhtml[data-bs-theme=dark] div.dtsr-creation button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dtsr-confirmation button:hover,\nhtml.dark div.dtsr-creation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-creation button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\nspan.dtsr-check-label {\n  padding-left: 3px;\n}\n\nspan.dtsr-name-label, span.dtsr-confirmation-message {\n  padding-right: 3px;\n}\n\ndiv.dtsr-confirmation {\n  text-align: center;\n}\n\nspan.dtsr-confirmation-message {\n  padding-top: 0.678571em;\n  padding-bottom: 0.678571em;\n  font-size: 1rem;\n}\n\ndiv.dt-btn-split-wrapper {\n  background-color: white !important;\n}\ndiv.dt-btn-split-wrapper button.button {\n  width: calc(100% - 36px) !important;\n  margin: 0px !important;\n  display: inline-block !important;\n  border-top-left-radius: 0.28571429rem !important;\n  border-bottom-left-radius: 0.28571429rem !important;\n  border-top-right-radius: 0px !important;\n}\ndiv.dt-btn-split-wrapper button.dt-btn-split-drop {\n  border-top-right-radius: 0.28571429rem !important;\n  border-bottom-right-radius: 0.28571429rem !important;\n  border-top-left-radius: 0px !important;\n  border-bottom-left-radius: 0px !important;\n  width: 36px !important;\n}\n\nspan.dtsr-emptyStates {\n  font-size: 1rem;\n  padding: 5px !important;\n}\n\ndiv.dt-button-collection div.ui.basic.vertical.buttons {\n  padding: 4px;\n  padding-bottom: 0px;\n  background: white !important;\n}\ndiv.dt-button-collection div.ui.basic.vertical.buttons h3 {\n  font-size: 1.5rem;\n  line-height: 2rem;\n}\ndiv.dt-button-collection div.ui.basic.vertical.buttons div.dt-btn-split-wrapper {\n  margin-bottom: 4px;\n}\ndiv.dt-button-collection div.ui.basic.vertical.buttons div.dt-btn-split-wrapper button.button {\n  margin-bottom: 4px;\n  border: 1px solid rgba(34, 36, 38, 0.15) !important;\n}\ndiv.dt-button-collection div.ui.basic.vertical.buttons div.dt-btn-split-wrapper button.dt-btn-split-drop {\n  margin-left: -1px;\n}\ndiv.dt-button-collection div.ui.basic.vertical.buttons button.dt-btn-split-drop-button {\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.285714rem;\n  margin-bottom: 4px;\n}\n\ninput.dtsr-name-input {\n  border: 1px solid rgba(24, 26, 28, 0.15);\n  border-radius: 4.6px;\n  line-height: 20px;\n  padding-top: 10.8px;\n  padding-bottom: 10.8px;\n  font-size: 16px;\n}\n\nlabel.dtsr-name-label, label.form-check-label {\n  font-size: 14.9px;\n}\n\ndiv.dtsr-form-row label.dtsr-name-label, div.dtsr-confirmation-text label.dtsr-name-label {\n  line-height: 1.5;\n  padding-top: 5px;\n}\n\ndiv.dtsr-confirmation-text, div.dtsr-creation-form {\n  margin-top: 1.5em;\n  width: 100%;\n}\ndiv.dtsr-confirmation-text label.dtsr-name-label, div.dtsr-creation-form label.dtsr-name-label {\n  width: 33.3%;\n  display: inline-block;\n  text-align: left !important;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-confirmation-text input.dtsr-name-input, div.dtsr-creation-form input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation-text input.dtsr-check-box, div.dtsr-creation-form input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n  position: relative;\n}\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/js/dataTables.stateRestore.js",
    "content": "/*! StateRestore 1.3.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n(function () {\n    'use strict';\n\n    var $$2;\n    var dataTable$1;\n    function setJQuery$1(jq) {\n        $$2 = jq;\n        dataTable$1 = jq.fn.dataTable;\n    }\n    var StateRestore = /** @class */ (function () {\n        function StateRestore(settings, opts, identifier, state, isPreDefined, successCallback) {\n            if (state === void 0) { state = undefined; }\n            if (isPreDefined === void 0) { isPreDefined = false; }\n            if (successCallback === void 0) { successCallback = function () { return null; }; }\n            // Check that the required version of DataTables is included\n            if (!dataTable$1 || !dataTable$1.versionCheck || !dataTable$1.versionCheck('1.10.0')) {\n                throw new Error('StateRestore requires DataTables 1.10 or newer');\n            }\n            // Check that Select is included\n            // eslint-disable-next-line no-extra-parens\n            if (!dataTable$1.Buttons) {\n                throw new Error('StateRestore requires Buttons');\n            }\n            var table = new dataTable$1.Api(settings);\n            this.classes = $$2.extend(true, {}, StateRestore.classes);\n            // Get options from user\n            this.c = $$2.extend(true, {}, StateRestore.defaults, opts);\n            this.s = {\n                dt: table,\n                identifier: identifier,\n                isPreDefined: isPreDefined,\n                savedState: null,\n                tableId: state && state.stateRestore ? state.stateRestore.tableId : undefined\n            };\n            this.dom = {\n                background: $$2('<div class=\"' + this.classes.background + '\"/>'),\n                closeButton: $$2('<div class=\"' + this.classes.closeButton + '\">&times;</div>'),\n                confirmation: $$2('<div class=\"' + this.classes.confirmation + '\"/>'),\n                confirmationButton: $$2('<button class=\"' + this.classes.confirmationButton + ' ' + this.classes.dtButton + '\">'),\n                confirmationTitleRow: $$2('<div class=\"' + this.classes.confirmationTitleRow + '\"></div>'),\n                dtContainer: $$2(this.s.dt.table().container()),\n                duplicateError: $$2('<span class=\"' + this.classes.modalError + '\">' +\n                    this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError) +\n                    '</span>'),\n                emptyError: $$2('<span class=\"' + this.classes.modalError + '\">' +\n                    this.s.dt.i18n('stateRestore.emptyError', this.c.i18n.emptyError) +\n                    '</span>'),\n                removeContents: $$2('<div class=\"' + this.classes.confirmationText + '\"><span>' +\n                    this.s.dt\n                        .i18n('stateRestore.removeConfirm', this.c.i18n.removeConfirm)\n                        .replace(/%s/g, this.s.identifier) +\n                    '</span></div>'),\n                removeError: $$2('<span class=\"' + this.classes.modalError + '\">' +\n                    this.s.dt.i18n('stateRestore.removeError', this.c.i18n.removeError) +\n                    '</span>'),\n                removeTitle: $$2('<h2 class=\"' + this.classes.confirmationTitle + '\">' +\n                    this.s.dt.i18n('stateRestore.removeTitle', this.c.i18n.removeTitle) +\n                    '</h2>'),\n                renameContents: $$2('<div class=\"' + this.classes.confirmationText + ' ' + this.classes.renameModal + '\">' +\n                    '<label class=\"' + this.classes.confirmationMessage + '\">' +\n                    this.s.dt\n                        .i18n('stateRestore.renameLabel', this.c.i18n.renameLabel)\n                        .replace(/%s/g, this.s.identifier) +\n                    '</label>' +\n                    '</div>'),\n                renameInput: $$2('<input class=\"' + this.classes.input + '\" type=\"text\"></input>'),\n                renameTitle: $$2('<h2 class=\"' + this.classes.confirmationTitle + '\">' +\n                    this.s.dt.i18n('stateRestore.renameTitle', this.c.i18n.renameTitle) +\n                    '</h2>')\n            };\n            // When a StateRestore instance is created the current state of the table should also be saved.\n            this.save(state, successCallback);\n        }\n        /**\n         * Removes a state from storage and then triggers the dtsr-remove event\n         * so that the StateRestoreCollection class can remove it's references as well.\n         *\n         * @param skipModal Flag to indicate if the modal should be skipped or not\n         */\n        StateRestore.prototype.remove = function (skipModal) {\n            var _a;\n            var _this = this;\n            if (skipModal === void 0) { skipModal = false; }\n            // Check if removal of states is allowed\n            if (!this.c.remove) {\n                return false;\n            }\n            var removeFunction;\n            var ajaxData = {\n                action: 'remove',\n                stateRestore: (_a = {},\n                    _a[this.s.identifier] = this.s.savedState,\n                    _a)\n            };\n            var successCallback = function () {\n                _this.dom.confirmation.trigger('dtsr-remove');\n                $$2(_this.s.dt.table().node()).trigger('stateRestore-change');\n                _this.dom.background.click();\n                _this.dom.confirmation.remove();\n                $$2(document).unbind('keyup', function (e) { return _this._keyupFunction(e); });\n                _this.dom.confirmationButton.off('click');\n            };\n            // If the remove is not happening over ajax remove it from local storage and then trigger the event\n            if (!this.c.ajax) {\n                removeFunction = function () {\n                    try {\n                        localStorage.removeItem('DataTables_stateRestore_' + _this.s.identifier + '_' + location.pathname +\n                            (_this.s.tableId ? '_' + _this.s.tableId : ''));\n                        successCallback();\n                    }\n                    catch (e) {\n                        _this.dom.confirmation.children('.' + _this.classes.modalError).remove();\n                        _this.dom.confirmation.append(_this.dom.removeError);\n                        return 'remove';\n                    }\n                    return true;\n                };\n            }\n            // Ajax property has to be a string, not just true\n            // Also only want to save if the table has been initialised and the states have been loaded in\n            else if (typeof this.c.ajax === 'string' && this.s.dt.settings()[0]._bInitComplete) {\n                removeFunction = function () {\n                    $$2.ajax({\n                        data: ajaxData,\n                        success: successCallback,\n                        type: 'POST',\n                        url: _this.c.ajax\n                    });\n                    return true;\n                };\n            }\n            else if (typeof this.c.ajax === 'function') {\n                removeFunction = function () {\n                    if (typeof _this.c.ajax === 'function') {\n                        _this.c.ajax.call(_this.s.dt, ajaxData, successCallback);\n                    }\n                    return true;\n                };\n            }\n            // If the modal is to be skipped then remove straight away\n            if (skipModal) {\n                this.dom.confirmation.appendTo(this.dom.dtContainer);\n                $$2(this.s.dt.table().node()).trigger('dtsr-modal-inserted');\n                removeFunction();\n                this.dom.confirmation.remove();\n            }\n            // Otherwise display the modal\n            else {\n                this._newModal(this.dom.removeTitle, this.s.dt.i18n('stateRestore.removeSubmit', this.c.i18n.removeSubmit), removeFunction, this.dom.removeContents);\n            }\n            return true;\n        };\n        /**\n         * Compares the state held within this instance with a state that is passed in\n         *\n         * @param state The state that is to be compared against\n         * @returns boolean indicating if the states match\n         */\n        StateRestore.prototype.compare = function (state) {\n            // Order\n            if (!this.c.saveState.order) {\n                state.order = undefined;\n            }\n            // Search\n            if (!this.c.saveState.search) {\n                state.search = undefined;\n            }\n            // Columns\n            if (this.c.saveState.columns && state.columns) {\n                for (var i = 0, ien = state.columns.length; i < ien; i++) {\n                    // Visibility\n                    if (typeof this.c.saveState.columns !== 'boolean' && !this.c.saveState.columns.visible) {\n                        state.columns[i].visible = undefined;\n                    }\n                    // Search\n                    if (typeof this.c.saveState.columns !== 'boolean' && !this.c.saveState.columns.search) {\n                        state.columns[i].search = undefined;\n                    }\n                }\n            }\n            else if (!this.c.saveState.columns) {\n                state.columns = undefined;\n            }\n            // Paging\n            if (!this.c.saveState.paging) {\n                state.page = undefined;\n            }\n            // SearchBuilder\n            if (!this.c.saveState.searchBuilder) {\n                state.searchBuilder = undefined;\n            }\n            // SearchPanes\n            if (!this.c.saveState.searchPanes) {\n                state.searchPanes = undefined;\n            }\n            // Select\n            if (!this.c.saveState.select) {\n                state.select = undefined;\n            }\n            // ColReorder\n            if (!this.c.saveState.colReorder) {\n                state.ColReorder = undefined;\n            }\n            // Scroller\n            if (!this.c.saveState.scroller) {\n                state.scroller = undefined;\n                if (dataTable$1.Scroller !== undefined) {\n                    state.start = 0;\n                }\n            }\n            // Paging\n            if (!this.c.saveState.paging) {\n                state.start = 0;\n            }\n            // Page Length\n            if (!this.c.saveState.length) {\n                state.length = undefined;\n            }\n            // Need to delete properties that we do not want to compare\n            delete state.time;\n            var copyState = this.s.savedState;\n            delete copyState.time;\n            delete copyState.c;\n            delete copyState.stateRestore;\n            // Perform a deep compare of the two state objects\n            return this._deepCompare(state, copyState);\n        };\n        /**\n         * Removes all of the dom elements from the document\n         */\n        StateRestore.prototype.destroy = function () {\n            Object.values(this.dom).forEach(function (node) { return node.off().remove(); });\n        };\n        /**\n         * Loads the state referenced by the identifier from storage\n         *\n         * @param state The identifier of the state that should be loaded\n         * @returns the state that has been loaded\n         */\n        StateRestore.prototype.load = function () {\n            var _this = this;\n            var loadedState = this.s.savedState;\n            var settings = this.s.dt.settings()[0];\n            // Always want the states stored here to be loaded in - regardless of when they were created\n            loadedState.time = +new Date();\n            settings.oLoadedState = $$2.extend(true, {}, loadedState);\n            // Click on a background if there is one to shut the collection\n            $$2('div.dt-button-background').click();\n            // Call the internal datatables function to implement the state on the table\n            $$2.fn.dataTable.ext.oApi._fnImplementState(settings, loadedState, function () {\n                var correctPaging = function (e, preSettings) {\n                    setTimeout(function () {\n                        var currpage = preSettings._iDisplayStart / preSettings._iDisplayLength;\n                        var intendedPage = loadedState.start / loadedState.length;\n                        // If the paging is incorrect then we have to set it again so that it is correct\n                        // This happens when a searchpanes filter is removed\n                        // This has to happen in a timeout because searchpanes only deselects after a timeout\n                        if (currpage >= 0 && intendedPage >= 0 && currpage !== intendedPage) {\n                            _this.s.dt.page(intendedPage).draw(false);\n                        }\n                    }, 50);\n                };\n                _this.s.dt.one('preDraw', correctPaging);\n                _this.s.dt.draw(false);\n            });\n            return loadedState;\n        };\n        /**\n         * Shows a modal that allows a state to be renamed\n         *\n         * @param newIdentifier Optional. The new identifier for this state\n         */\n        StateRestore.prototype.rename = function (newIdentifier, currentIdentifiers) {\n            var _this = this;\n            if (newIdentifier === void 0) { newIdentifier = null; }\n            // Check if renaming of states is allowed\n            if (!this.c.rename) {\n                return;\n            }\n            var renameFunction = function () {\n                var _a;\n                if (newIdentifier === null) {\n                    var tempIdentifier = $$2('input.' + _this.classes.input.replace(/ /g, '.')).val();\n                    if (tempIdentifier.length === 0) {\n                        _this.dom.confirmation.children('.' + _this.classes.modalError).remove();\n                        _this.dom.confirmation.append(_this.dom.emptyError);\n                        return 'empty';\n                    }\n                    else if (currentIdentifiers.includes(tempIdentifier)) {\n                        _this.dom.confirmation.children('.' + _this.classes.modalError).remove();\n                        _this.dom.confirmation.append(_this.dom.duplicateError);\n                        return 'duplicate';\n                    }\n                    else {\n                        newIdentifier = tempIdentifier;\n                    }\n                }\n                var ajaxData = {\n                    action: 'rename',\n                    stateRestore: (_a = {},\n                        _a[_this.s.identifier] = newIdentifier,\n                        _a)\n                };\n                var successCallback = function () {\n                    _this.s.identifier = newIdentifier;\n                    _this.save(_this.s.savedState, function () { return null; }, false);\n                    _this.dom.removeContents = $$2('<div class=\"' + _this.classes.confirmationText + '\"><span>' +\n                        _this.s.dt\n                            .i18n('stateRestore.removeConfirm', _this.c.i18n.removeConfirm)\n                            .replace(/%s/g, _this.s.identifier) +\n                        '</span></div>');\n                    _this.dom.confirmation.trigger('dtsr-rename');\n                    _this.dom.background.click();\n                    _this.dom.confirmation.remove();\n                    $$2(document).unbind('keyup', function (e) { return _this._keyupFunction(e); });\n                    _this.dom.confirmationButton.off('click');\n                };\n                if (!_this.c.ajax) {\n                    try {\n                        localStorage.removeItem('DataTables_stateRestore_' + _this.s.identifier + '_' + location.pathname +\n                            (_this.s.tableId ? '_' + _this.s.tableId : ''));\n                        successCallback();\n                    }\n                    catch (e) {\n                        _this.dom.confirmation.children('.' + _this.classes.modalError).remove();\n                        _this.dom.confirmation.append(_this.dom.removeError);\n                        return false;\n                    }\n                }\n                else if (typeof _this.c.ajax === 'string' && _this.s.dt.settings()[0]._bInitComplete) {\n                    $$2.ajax({\n                        data: ajaxData,\n                        success: successCallback,\n                        type: 'POST',\n                        url: _this.c.ajax\n                    });\n                }\n                else if (typeof _this.c.ajax === 'function') {\n                    _this.c.ajax.call(_this.s.dt, ajaxData, successCallback);\n                }\n                return true;\n            };\n            // Check if a new identifier has been provided, if so no need for a modal\n            if (newIdentifier !== null) {\n                if (currentIdentifiers.includes(newIdentifier)) {\n                    throw new Error(this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError));\n                }\n                else if (newIdentifier.length === 0) {\n                    throw new Error(this.s.dt.i18n('stateRestore.emptyError', this.c.i18n.emptyError));\n                }\n                else {\n                    this.dom.confirmation.appendTo(this.dom.dtContainer);\n                    $$2(this.s.dt.table().node()).trigger('dtsr-modal-inserted');\n                    renameFunction();\n                    this.dom.confirmation.remove();\n                }\n            }\n            else {\n                this.dom.renameInput.val(this.s.identifier);\n                this.dom.renameContents.append(this.dom.renameInput);\n                this._newModal(this.dom.renameTitle, this.s.dt.i18n('stateRestore.renameButton', this.c.i18n.renameButton), renameFunction, this.dom.renameContents);\n            }\n        };\n        /**\n         * Saves the tables current state using the identifier that is passed in.\n         *\n         * @param state Optional. If provided this is the state that will be saved rather than using the current state\n         */\n        StateRestore.prototype.save = function (state, passedSuccessCallback, callAjax) {\n            var _a;\n            var _this = this;\n            if (callAjax === void 0) { callAjax = true; }\n            // Check if saving states is allowed\n            if (!this.c.save) {\n                if (passedSuccessCallback) {\n                    passedSuccessCallback.call(this);\n                }\n                return;\n            }\n            // this.s.dt.state.save();\n            var savedState;\n            // If no state has been provided then create a new one from the current state\n            this.s.dt.state.save();\n            if (state === undefined) {\n                savedState = this.s.dt.state();\n            }\n            else if (typeof state !== 'object') {\n                return;\n            }\n            else {\n                savedState = state;\n            }\n            if (savedState.stateRestore) {\n                savedState.stateRestore.isPreDefined = this.s.isPreDefined;\n                savedState.stateRestore.state = this.s.identifier;\n                savedState.stateRestore.tableId = this.s.tableId;\n            }\n            else {\n                savedState.stateRestore = {\n                    isPreDefined: this.s.isPreDefined,\n                    state: this.s.identifier,\n                    tableId: this.s.tableId\n                };\n            }\n            this.s.savedState = savedState;\n            // Order\n            if (!this.c.saveState.order) {\n                this.s.savedState.order = undefined;\n            }\n            // Search\n            if (!this.c.saveState.search) {\n                this.s.savedState.search = undefined;\n            }\n            // Columns\n            if (this.c.saveState.columns && this.s.savedState.columns) {\n                for (var i = 0, ien = this.s.savedState.columns.length; i < ien; i++) {\n                    // Visibility\n                    if (typeof this.c.saveState.columns !== 'boolean' && !this.c.saveState.columns.visible) {\n                        this.s.savedState.columns[i].visible = undefined;\n                    }\n                    // Search\n                    if (typeof this.c.saveState.columns !== 'boolean' && !this.c.saveState.columns.search) {\n                        this.s.savedState.columns[i].search = undefined;\n                    }\n                }\n            }\n            else if (!this.c.saveState.columns) {\n                this.s.savedState.columns = undefined;\n            }\n            // SearchBuilder\n            if (!this.c.saveState.searchBuilder) {\n                this.s.savedState.searchBuilder = undefined;\n            }\n            // SearchPanes\n            if (!this.c.saveState.searchPanes) {\n                this.s.savedState.searchPanes = undefined;\n            }\n            // Select\n            if (!this.c.saveState.select) {\n                this.s.savedState.select = undefined;\n            }\n            // ColReorder\n            if (!this.c.saveState.colReorder) {\n                this.s.savedState.ColReorder = undefined;\n            }\n            // Scroller\n            if (!this.c.saveState.scroller) {\n                this.s.savedState.scroller = undefined;\n                if (dataTable$1.Scroller !== undefined) {\n                    this.s.savedState.start = 0;\n                }\n            }\n            // Paging\n            if (!this.c.saveState.paging) {\n                this.s.savedState.start = 0;\n            }\n            // Page Length\n            if (!this.c.saveState.length) {\n                this.s.savedState.length = undefined;\n            }\n            this.s.savedState.c = this.c;\n            // Need to remove the parent reference before we save the state\n            // Its not needed to rebuild, but it does cause a circular reference when converting to JSON\n            if (this.s.savedState.c.splitSecondaries.length) {\n                for (var _i = 0, _b = this.s.savedState.c.splitSecondaries; _i < _b.length; _i++) {\n                    var secondary = _b[_i];\n                    if (secondary.parent) {\n                        secondary.parent = undefined;\n                    }\n                }\n            }\n            // If the state is predefined there is no need to save it over ajax or to local storage\n            if (this.s.isPreDefined) {\n                if (passedSuccessCallback) {\n                    passedSuccessCallback.call(this);\n                }\n                return;\n            }\n            var ajaxData = {\n                action: 'save',\n                stateRestore: (_a = {},\n                    _a[this.s.identifier] = this.s.savedState,\n                    _a)\n            };\n            var successCallback = function () {\n                if (passedSuccessCallback) {\n                    passedSuccessCallback.call(_this);\n                }\n                _this.dom.confirmation.trigger('dtsr-save');\n                $$2(_this.s.dt.table().node()).trigger('stateRestore-change');\n            };\n            if (!this.c.ajax) {\n                localStorage.setItem('DataTables_stateRestore_' + this.s.identifier + '_' + location.pathname +\n                    (this.s.tableId ? '_' + this.s.tableId : ''), JSON.stringify(this.s.savedState));\n                successCallback();\n            }\n            else if (typeof this.c.ajax === 'string' && callAjax) {\n                if (this.s.dt.settings()[0]._bInitComplete) {\n                    $$2.ajax({\n                        data: ajaxData,\n                        success: successCallback,\n                        type: 'POST',\n                        url: this.c.ajax\n                    });\n                }\n                else {\n                    this.s.dt.one('init', function () {\n                        $$2.ajax({\n                            data: ajaxData,\n                            success: successCallback,\n                            type: 'POST',\n                            url: _this.c.ajax\n                        });\n                    });\n                }\n            }\n            else if (typeof this.c.ajax === 'function' && callAjax) {\n                this.c.ajax.call(this.s.dt, ajaxData, successCallback);\n            }\n        };\n        /**\n         * Performs a deep compare of two state objects, returning true if they match\n         *\n         * @param state1 The first object to compare\n         * @param state2 The second object to compare\n         * @returns boolean indicating if the objects match\n         */\n        StateRestore.prototype._deepCompare = function (state1, state2) {\n            // Put keys and states into arrays as this makes the later code easier to work\n            var states = [state1, state2];\n            var keys = [Object.keys(state1).sort(), Object.keys(state2).sort()];\n            // If scroller is included then we need to remove the start value\n            //  as it can be different but yield the same results\n            if (keys[0].includes('scroller')) {\n                var startIdx = keys[0].indexOf('start');\n                if (startIdx) {\n                    keys[0].splice(startIdx, 1);\n                }\n            }\n            if (keys[1].includes('scroller')) {\n                var startIdx = keys[1].indexOf('start');\n                if (startIdx) {\n                    keys[1].splice(startIdx, 1);\n                }\n            }\n            // We want to remove any private properties within the states\n            for (var i = 0; i < keys[0].length; i++) {\n                if (keys[0][i].indexOf('_') === 0) {\n                    keys[0].splice(i, 1);\n                    i--;\n                    continue;\n                }\n                // If scroller is included then we need to remove the following values\n                //  as they can be different but yield the same results\n                if (keys[0][i] === 'baseRowTop' ||\n                    keys[0][i] === 'baseScrollTop' ||\n                    keys[0][i] === 'scrollTop' ||\n                    (!this.c.saveState.paging && keys[0][i] === 'page')) {\n                    keys[0].splice(i, 1);\n                    i--;\n                    continue;\n                }\n            }\n            for (var i = 0; i < keys[1].length; i++) {\n                if (keys[1][i].indexOf('_') === 0) {\n                    keys[1].splice(i, 1);\n                    i--;\n                    continue;\n                }\n                if (keys[1][i] === 'baseRowTop' ||\n                    keys[1][i] === 'baseScrollTop' ||\n                    keys[1][i] === 'scrollTop' ||\n                    (!this.c.saveState.paging && keys[0][i] === 'page')) {\n                    keys[1].splice(i, 1);\n                    i--;\n                    continue;\n                }\n            }\n            if (keys[0].length === 0 && keys[1].length > 0 ||\n                keys[1].length === 0 && keys[0].length > 0) {\n                return false;\n            }\n            // We are only going to compare the keys that are common between both states\n            for (var i = 0; i < keys[0].length; i++) {\n                if (!keys[1].includes(keys[0][i])) {\n                    keys[0].splice(i, 1);\n                    i--;\n                }\n            }\n            for (var i = 0; i < keys[1].length; i++) {\n                if (!keys[0].includes(keys[1][i])) {\n                    keys[1].splice(i, 1);\n                    i--;\n                }\n            }\n            // Then each key and value has to be checked against each other\n            for (var i = 0; i < keys[0].length; i++) {\n                // If the keys dont equal, or their corresponding types are different we can return false\n                if (keys[0][i] !== keys[1][i] || typeof states[0][keys[0][i]] !== typeof states[1][keys[1][i]]) {\n                    return false;\n                }\n                // If the type is an object then further deep comparisons are required\n                if (typeof states[0][keys[0][i]] === 'object') {\n                    if (!this._deepCompare(states[0][keys[0][i]], states[1][keys[1][i]])) {\n                        return false;\n                    }\n                }\n                else if (typeof states[0][keys[0][i]] === 'number' && typeof states[1][keys[1][i]] === 'number') {\n                    if (Math.round(states[0][keys[0][i]]) !== Math.round(states[1][keys[1][i]])) {\n                        return false;\n                    }\n                }\n                // Otherwise we can just check the value\n                else if (states[0][keys[0][i]] !== states[1][keys[1][i]]) {\n                    return false;\n                }\n            }\n            // If we get all the way to here there are no differences so return true for this object\n            return true;\n        };\n        StateRestore.prototype._keyupFunction = function (e) {\n            // If enter same action as pressing the button\n            if (e.key === 'Enter') {\n                this.dom.confirmationButton.click();\n            }\n            // If escape close modal\n            else if (e.key === 'Escape') {\n                $$2('div.' + this.classes.background.replace(/ /g, '.')).click();\n            }\n        };\n        /**\n         * Creates a new confirmation modal for the user to approve an action\n         *\n         * @param title The title that is to be displayed at the top of the modal\n         * @param buttonText The text that is to be displayed in the confirmation button of the modal\n         * @param buttonAction The action that should be taken when the confirmation button is pressed\n         * @param modalContents The contents for the main body of the modal\n         */\n        StateRestore.prototype._newModal = function (title, buttonText, buttonAction, modalContents) {\n            var _this = this;\n            this.dom.background.appendTo(this.dom.dtContainer);\n            this.dom.confirmationTitleRow.empty().append(title);\n            this.dom.confirmationButton.html(buttonText);\n            this.dom.confirmation\n                .empty()\n                .append(this.dom.confirmationTitleRow)\n                .append(modalContents)\n                .append($$2('<div class=\"' + this.classes.confirmationButtons + '\"></div>')\n                .append(this.dom.confirmationButton))\n                .appendTo(this.dom.dtContainer);\n            $$2(this.s.dt.table().node()).trigger('dtsr-modal-inserted');\n            var inputs = modalContents.children('input');\n            // If there is an input focus on that\n            if (inputs.length > 0) {\n                $$2(inputs[0]).focus();\n            }\n            // Otherwise focus on the confirmation button\n            else {\n                this.dom.confirmationButton.focus();\n            }\n            var background = $$2('div.' + this.classes.background.replace(/ /g, '.'));\n            if (this.c.modalCloseButton) {\n                this.dom.confirmation.append(this.dom.closeButton);\n                this.dom.closeButton.on('click', function () { return background.click(); });\n            }\n            // When the button is clicked, call the appropriate action,\n            // remove the background and modal from the screen and unbind the keyup event.\n            this.dom.confirmationButton.on('click', function () { return buttonAction(); });\n            this.dom.confirmation.on('click', function (e) {\n                e.stopPropagation();\n            });\n            // When the button is clicked, remove the background and modal from the screen and unbind the keyup event.\n            background.one('click', function () {\n                _this.dom.background.remove();\n                _this.dom.confirmation.remove();\n                $$2(document).unbind('keyup', function (e) { return _this._keyupFunction(e); });\n            });\n            $$2(document).on('keyup', function (e) { return _this._keyupFunction(e); });\n        };\n        /**\n         * Convert from camelCase notation to the internal Hungarian.\n         * We could use the Hungarian convert function here, but this is cleaner\n         *\n         * @param {object} obj Object to convert\n         * @returns {object} Inverted object\n         * @memberof DataTable#oApi\n         */\n        StateRestore.prototype._searchToHung = function (obj) {\n            return {\n                bCaseInsensitive: obj.caseInsensitive,\n                bRegex: obj.regex,\n                bSmart: obj.smart,\n                sSearch: obj.search\n            };\n        };\n        StateRestore.version = '1.3.0';\n        StateRestore.classes = {\n            background: 'dtsr-background',\n            closeButton: 'dtsr-popover-close',\n            confirmation: 'dtsr-confirmation',\n            confirmationButton: 'dtsr-confirmation-button',\n            confirmationButtons: 'dtsr-confirmation-buttons',\n            confirmationMessage: 'dtsr-confirmation-message dtsr-name-label',\n            confirmationText: 'dtsr-confirmation-text',\n            confirmationTitle: 'dtsr-confirmation-title',\n            confirmationTitleRow: 'dtsr-confirmation-title-row',\n            dtButton: 'dt-button',\n            input: 'dtsr-input',\n            modalError: 'dtsr-modal-error',\n            renameModal: 'dtsr-rename-modal'\n        };\n        StateRestore.defaults = {\n            _createInSaved: false,\n            ajax: false,\n            create: true,\n            creationModal: false,\n            i18n: {\n                creationModal: {\n                    button: 'Create',\n                    colReorder: 'Column Order:',\n                    columns: {\n                        search: 'Column Search:',\n                        visible: 'Column Visibility:'\n                    },\n                    length: 'Page Length:',\n                    name: 'Name:',\n                    order: 'Sorting:',\n                    paging: 'Paging:',\n                    scroller: 'Scroll Position:',\n                    search: 'Search:',\n                    searchBuilder: 'SearchBuilder:',\n                    searchPanes: 'SearchPanes:',\n                    select: 'Select:',\n                    title: 'Create New State',\n                    toggleLabel: 'Includes:'\n                },\n                duplicateError: 'A state with this name already exists.',\n                emptyError: 'Name cannot be empty.',\n                emptyStates: 'No saved states',\n                removeConfirm: 'Are you sure you want to remove %s?',\n                removeError: 'Failed to remove state.',\n                removeJoiner: ' and ',\n                removeSubmit: 'Remove',\n                removeTitle: 'Remove State',\n                renameButton: 'Rename',\n                renameLabel: 'New Name for %s:',\n                renameTitle: 'Rename State'\n            },\n            modalCloseButton: true,\n            remove: true,\n            rename: true,\n            save: true,\n            saveState: {\n                colReorder: true,\n                columns: {\n                    search: true,\n                    visible: true\n                },\n                length: true,\n                order: true,\n                paging: true,\n                scroller: true,\n                search: true,\n                searchBuilder: true,\n                searchPanes: true,\n                select: true\n            },\n            splitSecondaries: [\n                'updateState',\n                'renameState',\n                'removeState'\n            ],\n            toggle: {\n                colReorder: false,\n                columns: {\n                    search: false,\n                    visible: false\n                },\n                length: false,\n                order: false,\n                paging: false,\n                scroller: false,\n                search: false,\n                searchBuilder: false,\n                searchPanes: false,\n                select: false\n            }\n        };\n        return StateRestore;\n    }());\n\n    var $$1;\n    var dataTable;\n    function setJQuery(jq) {\n        $$1 = jq;\n        dataTable = jq.fn.dataTable;\n    }\n    var StateRestoreCollection = /** @class */ (function () {\n        function StateRestoreCollection(settings, opts) {\n            var _this = this;\n            // Check that the required version of DataTables is included\n            if (!dataTable || !dataTable.versionCheck || !dataTable.versionCheck('1.10.0')) {\n                throw new Error('StateRestore requires DataTables 1.10 or newer');\n            }\n            // Check that Select is included\n            // eslint-disable-next-line no-extra-parens\n            if (!dataTable.Buttons) {\n                throw new Error('StateRestore requires Buttons');\n            }\n            var table = new dataTable.Api(settings);\n            this.classes = $$1.extend(true, {}, StateRestoreCollection.classes);\n            if (table.settings()[0]._stateRestore !== undefined) {\n                return;\n            }\n            // Get options from user\n            this.c = $$1.extend(true, {}, StateRestoreCollection.defaults, opts);\n            this.s = {\n                dt: table,\n                hasColReorder: dataTable.ColReorder !== undefined,\n                hasScroller: dataTable.Scroller !== undefined,\n                hasSearchBuilder: dataTable.SearchBuilder !== undefined,\n                hasSearchPanes: dataTable.SearchPanes !== undefined,\n                hasSelect: dataTable.select !== undefined,\n                states: []\n            };\n            this.s.dt.on('xhr', function (e, xhrsettings, json) {\n                // Has staterestore been used before? Is there anything to load?\n                if (json && json.stateRestore) {\n                    _this._addPreDefined(json.stateRestore);\n                }\n            });\n            this.dom = {\n                background: $$1('<div class=\"' + this.classes.background + '\"/>'),\n                closeButton: $$1('<div class=\"' + this.classes.closeButton + '\">x</div>'),\n                colReorderToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.colReorderToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.colReorder', this.c.i18n.creationModal.colReorder) +\n                    '</label>' +\n                    '</div>'),\n                columnsSearchToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.columnsSearchToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.columns.search', this.c.i18n.creationModal.columns.search) +\n                    '</label>' +\n                    '</div>'),\n                columnsVisibleToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + ' ' + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.columnsVisibleToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.columns.visible', this.c.i18n.creationModal.columns.visible) +\n                    '</label>' +\n                    '</div>'),\n                confirmation: $$1('<div class=\"' + this.classes.confirmation + '\"/>'),\n                confirmationTitleRow: $$1('<div class=\"' + this.classes.confirmationTitleRow + '\"></div>'),\n                createButtonRow: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.modalFoot + '\">' +\n                    '<button class=\"' + this.classes.creationButton + ' ' + this.classes.dtButton + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.button', this.c.i18n.creationModal.button) +\n                    '</button>' +\n                    '</div>'),\n                creation: $$1('<div class=\"' + this.classes.creation + '\"/>'),\n                creationForm: $$1('<div class=\"' + this.classes.creationForm + '\"/>'),\n                creationTitle: $$1('<div class=\"' + this.classes.creationText + '\">' +\n                    '<h2 class=\"' + this.classes.creationTitle + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.title', this.c.i18n.creationModal.title) +\n                    '</h2>' +\n                    '</div>'),\n                dtContainer: $$1(this.s.dt.table().container()),\n                duplicateError: $$1('<span class=\"' + this.classes.modalError + '\">' +\n                    this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError) +\n                    '</span>'),\n                emptyError: $$1('<span class=\"' + this.classes.modalError + '\">' +\n                    this.s.dt.i18n('stateRestore.emptyError', this.c.i18n.emptyError) +\n                    '</span>'),\n                lengthToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.lengthToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.length', this.c.i18n.creationModal.length) +\n                    '</label>' +\n                    '</div>'),\n                nameInputRow: $$1('<div class=\"' + this.classes.formRow + '\">' +\n                    '<label class=\"' + this.classes.nameLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.name', this.c.i18n.creationModal.name) +\n                    '</label>' +\n                    '<input class=\"' + this.classes.nameInput + '\" type=\"text\">' +\n                    '</div>'),\n                orderToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.orderToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.order', this.c.i18n.creationModal.order) +\n                    '</label>' +\n                    '</div>'),\n                pagingToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.pagingToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.paging', this.c.i18n.creationModal.paging) +\n                    '</label>' +\n                    '</div>'),\n                removeContents: $$1('<div class=\"' + this.classes.confirmationText + '\"><span></span></div>'),\n                removeTitle: $$1('<div class=\"' + this.classes.creationText + '\">' +\n                    '<h2 class=\"' + this.classes.creationTitle + '\">' +\n                    this.s.dt.i18n('stateRestore.removeTitle', this.c.i18n.removeTitle) +\n                    '</h2>' +\n                    '</div>'),\n                scrollerToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.scrollerToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.scroller', this.c.i18n.creationModal.scroller) +\n                    '</label>' +\n                    '</div>'),\n                searchBuilderToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.searchBuilderToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.searchBuilder', this.c.i18n.creationModal.searchBuilder) +\n                    '</label>' +\n                    '</div>'),\n                searchPanesToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.searchPanesToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.searchPanes', this.c.i18n.creationModal.searchPanes) +\n                    '</label>' +\n                    '</div>'),\n                searchToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.searchToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.search', this.c.i18n.creationModal.search) +\n                    '</label>' +\n                    '</div>'),\n                selectToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.selectToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.select', this.c.i18n.creationModal.select) +\n                    '</label>' +\n                    '</div>'),\n                toggleLabel: $$1('<label class=\"' + this.classes.nameLabel + ' ' + this.classes.toggleLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.toggleLabel', this.c.i18n.creationModal.toggleLabel) +\n                    '</label>')\n            };\n            table.settings()[0]._stateRestore = this;\n            this._searchForStates();\n            // Has staterestore been used before? Is there anything to load?\n            this._addPreDefined(this.c.preDefined);\n            var ajaxFunction;\n            var ajaxData = {\n                action: 'load'\n            };\n            if (typeof this.c.ajax === 'function') {\n                ajaxFunction = function () {\n                    if (typeof _this.c.ajax === 'function') {\n                        _this.c.ajax.call(_this.s.dt, ajaxData, function (s) { return _this._addPreDefined(s); });\n                    }\n                };\n            }\n            else if (typeof this.c.ajax === 'string') {\n                ajaxFunction = function () {\n                    $$1.ajax({\n                        data: ajaxData,\n                        success: function (data) {\n                            _this._addPreDefined(data);\n                        },\n                        type: 'POST',\n                        url: _this.c.ajax\n                    });\n                };\n            }\n            if (typeof ajaxFunction === 'function') {\n                if (this.s.dt.settings()[0]._bInitComplete) {\n                    ajaxFunction();\n                }\n                else {\n                    this.s.dt.one('preInit.dtsr', function () {\n                        ajaxFunction();\n                    });\n                }\n            }\n            this.s.dt.on('destroy.dtsr', function () {\n                _this.destroy();\n            });\n            this.s.dt.on('draw.dtsr buttons-action.dtsr', function () { return _this.findActive(); });\n            return this;\n        }\n        /**\n         * Adds a new StateRestore instance to the collection based on the current properties of the table\n         *\n         * @param identifier The value that is used to identify a state.\n         * @returns The state that has been created\n         */\n        StateRestoreCollection.prototype.addState = function (identifier, currentIdentifiers, options) {\n            var _this = this;\n            // If creation/saving is not allowed then return\n            if (!this.c.create || !this.c.save) {\n                return;\n            }\n            // Check if the state exists before creating a new ones\n            var state = this.getState(identifier);\n            var createFunction = function (id, toggles) {\n                if (id.length === 0) {\n                    return 'empty';\n                }\n                else if (currentIdentifiers.includes(id)) {\n                    return 'duplicate';\n                }\n                _this.s.dt.state.save();\n                var that = _this;\n                var successCallback = function () {\n                    that.s.states.push(this);\n                    that._collectionRebuild();\n                };\n                var currState = _this.s.dt.state();\n                currState.stateRestore = {\n                    isPredefined: false,\n                    state: id,\n                    tableId: _this.s.dt.table().node().id\n                };\n                if (toggles.saveState) {\n                    var opts = _this.c.saveState;\n                    // We don't want to extend, but instead AND all properties of the saveState option\n                    for (var _i = 0, _a = Object.keys(toggles.saveState); _i < _a.length; _i++) {\n                        var key = _a[_i];\n                        if (!toggles.saveState[key]) {\n                            opts[key] = false;\n                        }\n                    }\n                    _this.c.saveState = opts;\n                }\n                var newState = new StateRestore(_this.s.dt.settings()[0], $$1.extend(true, {}, _this.c, options), id, currState, false, successCallback);\n                $$1(_this.s.dt.table().node()).on('dtsr-modal-inserted', function () {\n                    newState.dom.confirmation.one('dtsr-remove', function () { return _this._removeCallback(newState.s.identifier); });\n                    newState.dom.confirmation.one('dtsr-rename', function () { return _this._collectionRebuild(); });\n                    newState.dom.confirmation.one('dtsr-save', function () { return _this._collectionRebuild(); });\n                });\n                return true;\n            };\n            // If there isn't already a state with this identifier\n            if (state === null) {\n                if (this.c.creationModal || options !== undefined && options.creationModal) {\n                    this._creationModal(createFunction, identifier, options);\n                }\n                else {\n                    var success = createFunction(identifier, {});\n                    if (success === 'empty') {\n                        throw new Error(this.s.dt.i18n('stateRestore.emptyError', this.c.i18n.emptyError));\n                    }\n                    else if (success === 'duplicate') {\n                        throw new Error(this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError));\n                    }\n                }\n            }\n            else {\n                throw new Error(this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError));\n            }\n        };\n        /**\n         * Removes all of the states, showing a modal to the user for confirmation\n         *\n         * @param removeFunction The action to be taken when the action is confirmed\n         */\n        StateRestoreCollection.prototype.removeAll = function (removeFunction) {\n            // There are no states to remove so just return\n            if (this.s.states.length === 0) {\n                return;\n            }\n            var ids = this.s.states.map(function (state) { return state.s.identifier; });\n            var replacementString = ids[0];\n            if (ids.length > 1) {\n                replacementString = ids.slice(0, -1).join(', ') +\n                    this.s.dt.i18n('stateRestore.removeJoiner', this.c.i18n.removeJoiner) +\n                    ids.slice(-1);\n            }\n            $$1(this.dom.removeContents.children('span')).html(this.s.dt\n                .i18n('stateRestore.removeConfirm', this.c.i18n.removeConfirm)\n                .replace(/%s/g, replacementString));\n            this._newModal(this.dom.removeTitle, this.s.dt.i18n('stateRestore.removeSubmit', this.c.i18n.removeSubmit), removeFunction, this.dom.removeContents);\n        };\n        /**\n         * Removes all of the dom elements from the document for the collection and the stored states\n         */\n        StateRestoreCollection.prototype.destroy = function () {\n            for (var _i = 0, _a = this.s.states; _i < _a.length; _i++) {\n                var state = _a[_i];\n                state.destroy();\n            }\n            Object.values(this.dom).forEach(function (node) {\n                node.off();\n                node.remove();\n            });\n            this.s.states = [];\n            this.s.dt.off('.dtsr');\n            $$1(this.s.dt.table().node()).off('.dtsr');\n        };\n        /**\n         * Identifies active states and updates their button to reflect this.\n         *\n         * @returns An array containing objects with the details of currently active states\n         */\n        StateRestoreCollection.prototype.findActive = function () {\n            // Make sure that the state is up to date\n            this.s.dt.state.save();\n            var currState = this.s.dt.state();\n            // Make all of the buttons inactive so that only any that match will be marked as active\n            var buttons = $$1('button.' + $$1.fn.DataTable.Buttons.defaults.dom.button.className.replace(/ /g, '.'));\n            // Some of the styling libraries use a tags instead of buttons\n            if (buttons.length === 0) {\n                buttons = $$1('a.' + $$1.fn.DataTable.Buttons.defaults.dom.button.className.replace(/ /g, '.'));\n            }\n            for (var _i = 0, buttons_1 = buttons; _i < buttons_1.length; _i++) {\n                var button = buttons_1[_i];\n                this.s.dt.button($$1(button).parent()[0]).active(false);\n            }\n            var results = [];\n            // Go through all of the states comparing if their state is the same to the current one\n            for (var _a = 0, _b = this.s.states; _a < _b.length; _a++) {\n                var state = _b[_a];\n                if (state.compare(currState)) {\n                    results.push({\n                        data: state.s.savedState,\n                        name: state.s.identifier\n                    });\n                    // If so, find the corresponding button and mark it as active\n                    for (var _c = 0, buttons_2 = buttons; _c < buttons_2.length; _c++) {\n                        var button = buttons_2[_c];\n                        if ($$1(button).text() === state.s.identifier) {\n                            this.s.dt.button($$1(button).parent()[0]).active(true);\n                            break;\n                        }\n                    }\n                }\n            }\n            return results;\n        };\n        /**\n         * Gets a single state that has the identifier matching that which is passed in\n         *\n         * @param identifier The value that is used to identify a state\n         * @returns The state that has been identified or null if no states have been identified\n         */\n        StateRestoreCollection.prototype.getState = function (identifier) {\n            for (var _i = 0, _a = this.s.states; _i < _a.length; _i++) {\n                var state = _a[_i];\n                if (state.s.identifier === identifier) {\n                    return state;\n                }\n            }\n            return null;\n        };\n        /**\n         * Gets an array of all of the states\n         *\n         * @returns Any states that have been identified\n         */\n        StateRestoreCollection.prototype.getStates = function (ids) {\n            if (ids === undefined) {\n                return this.s.states;\n            }\n            else {\n                var states = [];\n                for (var _i = 0, ids_1 = ids; _i < ids_1.length; _i++) {\n                    var id = ids_1[_i];\n                    var found = false;\n                    for (var _a = 0, _b = this.s.states; _a < _b.length; _a++) {\n                        var state = _b[_a];\n                        if (id === state.s.identifier) {\n                            states.push(state);\n                            found = true;\n                            break;\n                        }\n                    }\n                    if (!found) {\n                        states.push(undefined);\n                    }\n                }\n                return states;\n            }\n        };\n        /**\n         * Reloads states that are set via datatables config or over ajax\n         *\n         * @param preDefined Object containing the predefined states that are to be reintroduced\n         */\n        StateRestoreCollection.prototype._addPreDefined = function (preDefined) {\n            var _this = this;\n            // There is a potential issue here if sorting where the string parts of the name are the same,\n            // only the number differs and there are many states - but this wouldn't be usfeul naming so\n            // more of a priority to sort alphabetically\n            var states = Object.keys(preDefined).sort(function (a, b) { return a > b ? 1 : a < b ? -1 : 0; });\n            var _loop_1 = function (state) {\n                for (var i = 0; i < this_1.s.states.length; i++) {\n                    if (this_1.s.states[i].s.identifier === state) {\n                        this_1.s.states.splice(i, 1);\n                    }\n                }\n                var that = this_1;\n                var successCallback = function () {\n                    that.s.states.push(this);\n                    that._collectionRebuild();\n                };\n                var loadedState = preDefined[state];\n                var newState = new StateRestore(this_1.s.dt, $$1.extend(true, {}, this_1.c, loadedState.c !== undefined ?\n                    { saveState: loadedState.c.saveState } :\n                    undefined, true), state, loadedState, true, successCallback);\n                newState.s.savedState = loadedState;\n                $$1(this_1.s.dt.table().node()).on('dtsr-modal-inserted', function () {\n                    newState.dom.confirmation.one('dtsr-remove', function () { return _this._removeCallback(newState.s.identifier); });\n                    newState.dom.confirmation.one('dtsr-rename', function () { return _this._collectionRebuild(); });\n                    newState.dom.confirmation.one('dtsr-save', function () { return _this._collectionRebuild(); });\n                });\n            };\n            var this_1 = this;\n            for (var _i = 0, states_1 = states; _i < states_1.length; _i++) {\n                var state = states_1[_i];\n                _loop_1(state);\n            }\n        };\n        /**\n         * Rebuilds all of the buttons in the collection of states to make sure that states and text is up to date\n         */\n        StateRestoreCollection.prototype._collectionRebuild = function () {\n            var button = this.s.dt.button('SaveStateRestore:name');\n            var stateButtons = [];\n            // Need to get the original configuration object, so we can rebuild it\n            // It might be nested, so need to traverse down the tree\n            if (button[0]) {\n                var idxs = button.index().split('-');\n                stateButtons = button[0].inst.c.buttons;\n                for (var i = 0; i < idxs.length; i++) {\n                    if (stateButtons[idxs[i]].buttons) {\n                        stateButtons = stateButtons[idxs[i]].buttons;\n                    }\n                    else {\n                        stateButtons = [];\n                        break;\n                    }\n                }\n            }\n            // remove any states from the previous rebuild - if they are still there they will be added later\n            for (var i = 0; i < stateButtons.length; i++) {\n                if (stateButtons[i].extend === 'stateRestore') {\n                    stateButtons.splice(i, 1);\n                    i--;\n                }\n            }\n            if (this.c._createInSaved) {\n                stateButtons.push('createState');\n            }\n            var emptyText = '<span class=\"' + this.classes.emptyStates + '\">' +\n                this.s.dt.i18n('stateRestore.emptyStates', this.c.i18n.emptyStates) +\n                '</span>';\n            // If there are no states display an empty message\n            if (this.s.states.length === 0) {\n                // Don't want the empty text included more than twice\n                if (!stateButtons.includes(emptyText)) {\n                    stateButtons.push(emptyText);\n                }\n            }\n            else {\n                // There are states to add so there shouldn't be any empty text left!\n                while (stateButtons.includes(emptyText)) {\n                    stateButtons.splice(stateButtons.indexOf(emptyText), 1);\n                }\n                // There is a potential issue here if sorting where the string parts of the name are the same,\n                // only the number differs and there are many states - but this wouldn't be usfeul naming so\n                // more of a priority to sort alphabetically\n                this.s.states = this.s.states.sort(function (a, b) {\n                    var aId = a.s.identifier;\n                    var bId = b.s.identifier;\n                    return aId > bId ?\n                        1 :\n                        aId < bId ?\n                            -1 :\n                            0;\n                });\n                // Construct the split property of each button\n                for (var _i = 0, _a = this.s.states; _i < _a.length; _i++) {\n                    var state = _a[_i];\n                    var split = Object.assign([], this.c.splitSecondaries);\n                    if (split.includes('updateState') && (!this.c.save || !state.c.save)) {\n                        split.splice(split.indexOf('updateState'), 1);\n                    }\n                    if (split.includes('renameState') &&\n                        (!this.c.save || !state.c.save || !this.c.rename || !state.c.rename)) {\n                        split.splice(split.indexOf('renameState'), 1);\n                    }\n                    if (split.includes('removeState') && (!this.c.remove || !state.c.remove)) {\n                        split.splice(split.indexOf('removeState'), 1);\n                    }\n                    if (split.length > 0 &&\n                        !split.includes('<h3>' + state.s.identifier + '</h3>')) {\n                        split.unshift('<h3>' + state.s.identifier + '</h3>');\n                    }\n                    stateButtons.push({\n                        _stateRestore: state,\n                        attr: {\n                            title: state.s.identifier\n                        },\n                        config: {\n                            split: split\n                        },\n                        extend: 'stateRestore',\n                        text: state.s.identifier\n                    });\n                }\n            }\n            button.collectionRebuild(stateButtons);\n            // Need to disable the removeAllStates button if there are no states and it is present\n            var buttons = this.s.dt.buttons();\n            for (var _b = 0, buttons_3 = buttons; _b < buttons_3.length; _b++) {\n                var butt = buttons_3[_b];\n                if ($$1(butt.node).hasClass('dtsr-removeAllStates')) {\n                    if (this.s.states.length === 0) {\n                        this.s.dt.button(butt.node).disable();\n                    }\n                    else {\n                        this.s.dt.button(butt.node).enable();\n                    }\n                }\n            }\n        };\n        /**\n         * Displays a modal that is used to get information from the user to create a new state.\n         *\n         * @param buttonAction The action that should be taken when the button is pressed\n         * @param identifier The default identifier for the next new state\n         */\n        StateRestoreCollection.prototype._creationModal = function (buttonAction, identifier, options) {\n            var _this = this;\n            this.dom.creation.empty();\n            this.dom.creationForm.empty();\n            this.dom.nameInputRow.children('input').val(identifier);\n            this.dom.creationForm.append(this.dom.nameInputRow);\n            var tableConfig = this.s.dt.settings()[0].oInit;\n            var togglesToInsert = [];\n            var toggleDefined = options !== undefined && options.toggle !== undefined;\n            // Order toggle - check toggle and saving enabled\n            if (((!toggleDefined || options.toggle.order === undefined) && this.c.toggle.order ||\n                toggleDefined && options.toggle.order) &&\n                this.c.saveState.order &&\n                (tableConfig.ordering === undefined || tableConfig.ordering)) {\n                togglesToInsert.push(this.dom.orderToggle);\n            }\n            // Search toggle - check toggle and saving enabled\n            if (((!toggleDefined || options.toggle.search === undefined) && this.c.toggle.search ||\n                toggleDefined && options.toggle.search) &&\n                this.c.saveState.search &&\n                (tableConfig.searching === undefined || tableConfig.searching)) {\n                togglesToInsert.push(this.dom.searchToggle);\n            }\n            // Paging toggle - check toggle and saving enabled\n            if (((!toggleDefined || options.toggle.paging === undefined) && this.c.toggle.paging ||\n                toggleDefined && options.toggle.paging) &&\n                this.c.saveState.paging &&\n                (tableConfig.paging === undefined || tableConfig.paging)) {\n                togglesToInsert.push(this.dom.pagingToggle);\n            }\n            // Page Length toggle - check toggle and saving enabled\n            if (((!toggleDefined || options.toggle.length === undefined) && this.c.toggle.length ||\n                toggleDefined && options.toggle.length) &&\n                this.c.saveState.length &&\n                (tableConfig.length === undefined || tableConfig.length)) {\n                togglesToInsert.push(this.dom.lengthToggle);\n            }\n            // ColReorder toggle - check toggle and saving enabled\n            if (this.s.hasColReorder &&\n                ((!toggleDefined || options.toggle.colReorder === undefined) && this.c.toggle.colReorder ||\n                    toggleDefined && options.toggle.colReorder) &&\n                this.c.saveState.colReorder) {\n                togglesToInsert.push(this.dom.colReorderToggle);\n            }\n            // Scroller toggle - check toggle and saving enabled\n            if (this.s.hasScroller &&\n                ((!toggleDefined || options.toggle.scroller === undefined) && this.c.toggle.scroller ||\n                    toggleDefined && options.toggle.scroller) &&\n                this.c.saveState.scroller) {\n                togglesToInsert.push(this.dom.scrollerToggle);\n            }\n            // SearchBuilder toggle - check toggle and saving enabled\n            if (this.s.hasSearchBuilder &&\n                ((!toggleDefined || options.toggle.searchBuilder === undefined) && this.c.toggle.searchBuilder ||\n                    toggleDefined && options.toggle.searchBuilder) &&\n                this.c.saveState.searchBuilder) {\n                togglesToInsert.push(this.dom.searchBuilderToggle);\n            }\n            // SearchPanes toggle - check toggle and saving enabled\n            if (this.s.hasSearchPanes &&\n                ((!toggleDefined || options.toggle.searchPanes === undefined) && this.c.toggle.searchPanes ||\n                    toggleDefined && options.toggle.searchPanes) &&\n                this.c.saveState.searchPanes) {\n                togglesToInsert.push(this.dom.searchPanesToggle);\n            }\n            // Select toggle - check toggle and saving enabled\n            if (this.s.hasSelect &&\n                ((!toggleDefined || options.toggle.select === undefined) && this.c.toggle.select ||\n                    toggleDefined && options.toggle.select) &&\n                this.c.saveState.select) {\n                togglesToInsert.push(this.dom.selectToggle);\n            }\n            // Columns toggle - check toggle and saving enabled\n            if (typeof this.c.toggle.columns === 'boolean' &&\n                ((!toggleDefined || options.toggle.order === undefined) && this.c.toggle.columns ||\n                    toggleDefined && options.toggle.order) &&\n                this.c.saveState.columns) {\n                togglesToInsert.push(this.dom.columnsSearchToggle);\n                togglesToInsert.push(this.dom.columnsVisibleToggle);\n            }\n            else if ((!toggleDefined || options.toggle.columns === undefined) && typeof this.c.toggle.columns !== 'boolean' ||\n                typeof options.toggle.order !== 'boolean') {\n                if (typeof this.c.saveState.columns !== 'boolean' && this.c.saveState.columns) {\n                    // Column search toggle - check toggle and saving enabled\n                    if ((\n                    // columns.search is defined when passed in\n                    toggleDefined &&\n                        options.toggle.columns !== undefined &&\n                        typeof options.toggle.columns !== 'boolean' &&\n                        options.toggle.columns.search ||\n                        // Columns search is not defined when passed in but is in defaults\n                        (!toggleDefined ||\n                            options.toggle.columns === undefined ||\n                            typeof options.toggle.columns !== 'boolean' && options.toggle.columns.search === undefined) &&\n                            typeof this.c.toggle.columns !== 'boolean' &&\n                            this.c.toggle.columns.search) &&\n                        this.c.saveState.columns.search) {\n                        togglesToInsert.push(this.dom.columnsSearchToggle);\n                    }\n                    // Column visiblity toggle - check toggle and saving enabled\n                    if ((\n                    // columns.visible is defined when passed in\n                    toggleDefined &&\n                        options.toggle.columns !== undefined &&\n                        typeof options.toggle.columns !== 'boolean' &&\n                        options.toggle.columns.visible ||\n                        // Columns visible is not defined when passed in but is in defaults\n                        (!toggleDefined ||\n                            options.toggle.columns === undefined ||\n                            typeof options.toggle.columns !== 'boolean' && options.toggle.columns.visible === undefined) &&\n                            typeof this.c.toggle.columns !== 'boolean' &&\n                            this.c.toggle.columns.visible) &&\n                        this.c.saveState.columns.visible) {\n                        togglesToInsert.push(this.dom.columnsVisibleToggle);\n                    }\n                }\n                else if (this.c.saveState.columns) {\n                    togglesToInsert.push(this.dom.columnsSearchToggle);\n                    togglesToInsert.push(this.dom.columnsVisibleToggle);\n                }\n            }\n            // Make sure that the toggles are displayed alphabetically\n            togglesToInsert.sort(function (a, b) {\n                var aVal = a.children('label.dtsr-check-label')[0].innerHTML;\n                var bVal = b.children('label.dtsr-check-label')[0].innerHTML;\n                if (aVal < bVal) {\n                    return -1;\n                }\n                else if (aVal > bVal) {\n                    return 1;\n                }\n                else {\n                    return 0;\n                }\n            });\n            // Append all of the toggles that are to be inserted\n            for (var _i = 0, togglesToInsert_1 = togglesToInsert; _i < togglesToInsert_1.length; _i++) {\n                var toggle = togglesToInsert_1[_i];\n                this.dom.creationForm.append(toggle);\n            }\n            // Insert the toggle label next to the first check box\n            $$1(this.dom.creationForm.children('div.' + this.classes.checkRow)[0]).prepend(this.dom.toggleLabel);\n            // Insert the creation modal and the background\n            this.dom.background.appendTo(this.dom.dtContainer);\n            this.dom.creation\n                .append(this.dom.creationTitle)\n                .append(this.dom.creationForm)\n                .append(this.dom.createButtonRow)\n                .appendTo(this.dom.dtContainer);\n            $$1(this.s.dt.table().node()).trigger('dtsr-modal-inserted');\n            var _loop_2 = function (toggle) {\n                $$1(toggle.children('label:last-child')).on('click', function () {\n                    toggle.children('input').prop('checked', !toggle.children('input').prop('checked'));\n                });\n            };\n            // Allow the label to be clicked to toggle the checkbox\n            for (var _a = 0, togglesToInsert_2 = togglesToInsert; _a < togglesToInsert_2.length; _a++) {\n                var toggle = togglesToInsert_2[_a];\n                _loop_2(toggle);\n            }\n            var creationButton = $$1('button.' + this.classes.creationButton.replace(/ /g, '.'));\n            var inputs = this.dom.creationForm.find('input');\n            // If there is an input focus on that\n            if (inputs.length > 0) {\n                $$1(inputs[0]).focus();\n            }\n            // Otherwise focus on the confirmation button\n            else {\n                creationButton.focus();\n            }\n            var background = $$1('div.' + this.classes.background.replace(/ /g, '.'));\n            var keyupFunction = function (e) {\n                if (e.key === 'Enter') {\n                    creationButton.click();\n                }\n                else if (e.key === 'Escape') {\n                    background.click();\n                }\n            };\n            if (this.c.modalCloseButton) {\n                this.dom.creation.append(this.dom.closeButton);\n                this.dom.closeButton.on('click', function () { return background.click(); });\n            }\n            creationButton.on('click', function () {\n                // Get the values of the checkBoxes\n                var saveState = {\n                    colReorder: _this.dom.colReorderToggle.children('input').is(':checked'),\n                    columns: {\n                        search: _this.dom.columnsSearchToggle.children('input').is(':checked'),\n                        visible: _this.dom.columnsVisibleToggle.children('input').is(':checked')\n                    },\n                    length: _this.dom.lengthToggle.children('input').is(':checked'),\n                    order: _this.dom.orderToggle.children('input').is(':checked'),\n                    paging: _this.dom.pagingToggle.children('input').is(':checked'),\n                    scroller: _this.dom.scrollerToggle.children('input').is(':checked'),\n                    search: _this.dom.searchToggle.children('input').is(':checked'),\n                    searchBuilder: _this.dom.searchBuilderToggle.children('input').is(':checked'),\n                    searchPanes: _this.dom.searchPanesToggle.children('input').is(':checked'),\n                    select: _this.dom.selectToggle.children('input').is(':checked')\n                };\n                // Call the buttons functionality passing in the identifier and what should be saved\n                var success = buttonAction($$1('input.' + _this.classes.nameInput.replace(/ /g, '.')).val(), { saveState: saveState });\n                if (success === true) {\n                    // Remove the dom elements as operation has completed\n                    _this.dom.background.remove();\n                    _this.dom.creation.remove();\n                    // Unbind the keyup function  - don't want it to run unnecessarily on every keypress that occurs\n                    $$1(document).unbind('keyup', keyupFunction);\n                }\n                else {\n                    _this.dom.creation.children('.' + _this.classes.modalError).remove();\n                    _this.dom.creation.append(_this.dom[success + 'Error']);\n                }\n            });\n            background.one('click', function () {\n                // Remove the dome elements as operation has been cancelled\n                _this.dom.background.remove();\n                _this.dom.creation.remove();\n                // Unbind the keyup function - don't want it to run unnecessarily on every keypress that occurs\n                $$1(document).unbind('keyup', keyupFunction);\n                // Rebuild the collection to ensure that the latest changes are present\n                _this._collectionRebuild();\n            });\n            // Have to listen to the keyup event as `escape` doesn't trigger keypress\n            $$1(document).on('keyup', keyupFunction);\n            // Need to save the state before the focus is lost when the modal is interacted with\n            this.s.dt.state.save();\n        };\n        /**\n         * This callback is called when a state is removed.\n         * This removes the state from storage and also strips it's button from the container\n         *\n         * @param identifier The value that is used to identify a state\n         */\n        StateRestoreCollection.prototype._removeCallback = function (identifier) {\n            for (var i = 0; i < this.s.states.length; i++) {\n                if (this.s.states[i].s.identifier === identifier) {\n                    this.s.states.splice(i, 1);\n                    i--;\n                }\n            }\n            this._collectionRebuild();\n            return true;\n        };\n        /**\n         * Creates a new confirmation modal for the user to approve an action\n         *\n         * @param title The title that is to be displayed at the top of the modal\n         * @param buttonText The text that is to be displayed in the confirmation button of the modal\n         * @param buttonAction The action that should be taken when the confirmation button is pressed\n         * @param modalContents The contents for the main body of the modal\n         */\n        StateRestoreCollection.prototype._newModal = function (title, buttonText, buttonAction, modalContents) {\n            var _this = this;\n            this.dom.background.appendTo(this.dom.dtContainer);\n            this.dom.confirmationTitleRow.empty().append(title);\n            var confirmationButton = $$1('<button class=\"' + this.classes.confirmationButton + ' ' + this.classes.dtButton + '\">' +\n                buttonText +\n                '</button>');\n            this.dom.confirmation\n                .empty()\n                .append(this.dom.confirmationTitleRow)\n                .append(modalContents)\n                .append($$1('<div class=\"' + this.classes.confirmationButtons + '\"></div>')\n                .append(confirmationButton))\n                .appendTo(this.dom.dtContainer);\n            $$1(this.s.dt.table().node()).trigger('dtsr-modal-inserted');\n            var inputs = modalContents.children('input');\n            // If there is an input focus on that\n            if (inputs.length > 0) {\n                $$1(inputs[0]).focus();\n            }\n            // Otherwise focus on the confirmation button\n            else {\n                confirmationButton.focus();\n            }\n            var background = $$1('div.' + this.classes.background.replace(/ /g, '.'));\n            var keyupFunction = function (e) {\n                // If enter same action as pressing the button\n                if (e.key === 'Enter') {\n                    confirmationButton.click();\n                }\n                // If escape close modal\n                else if (e.key === 'Escape') {\n                    background.click();\n                }\n            };\n            // When the button is clicked, call the appropriate action,\n            // remove the background and modal from the screen and unbind the keyup event.\n            confirmationButton.on('click', function () {\n                var success = buttonAction(true);\n                if (success === true) {\n                    _this.dom.background.remove();\n                    _this.dom.confirmation.remove();\n                    $$1(document).unbind('keyup', keyupFunction);\n                    confirmationButton.off('click');\n                }\n                else {\n                    _this.dom.confirmation.children('.' + _this.classes.modalError).remove();\n                    _this.dom.confirmation.append(_this.dom[success + 'Error']);\n                }\n            });\n            this.dom.confirmation.on('click', function (e) {\n                e.stopPropagation();\n            });\n            // When the button is clicked, remove the background and modal from the screen and unbind the keyup event.\n            background.one('click', function () {\n                _this.dom.background.remove();\n                _this.dom.confirmation.remove();\n                $$1(document).unbind('keyup', keyupFunction);\n            });\n            $$1(document).on('keyup', keyupFunction);\n        };\n        /**\n         * Private method that checks for previously created states on initialisation\n         */\n        StateRestoreCollection.prototype._searchForStates = function () {\n            var _this = this;\n            var keys = Object.keys(localStorage);\n            var _loop_3 = function (key) {\n                // eslint-disable-next-line no-useless-escape\n                if (key.match(new RegExp('^DataTables_stateRestore_.*_' + location.pathname.replace(/\\//g, '/') + '$')) ||\n                    key.match(new RegExp('^DataTables_stateRestore_.*_' + location.pathname.replace(/\\//g, '/') +\n                        '_' + this_2.s.dt.table().node().id + '$'))) {\n                    var loadedState_1 = JSON.parse(localStorage.getItem(key));\n                    if (loadedState_1.stateRestore.isPreDefined ||\n                        (loadedState_1.stateRestore.tableId &&\n                            loadedState_1.stateRestore.tableId !== this_2.s.dt.table().node().id)) {\n                        return \"continue\";\n                    }\n                    var that_1 = this_2;\n                    var successCallback = function () {\n                        this.s.savedState = loadedState_1;\n                        that_1.s.states.push(this);\n                        that_1._collectionRebuild();\n                    };\n                    var newState_1 = new StateRestore(this_2.s.dt, $$1.extend(true, {}, this_2.c, { saveState: loadedState_1.c.saveState }), loadedState_1.stateRestore.state, loadedState_1, false, successCallback);\n                    $$1(this_2.s.dt.table().node()).on('dtsr-modal-inserted', function () {\n                        newState_1.dom.confirmation.one('dtsr-remove', function () { return _this._removeCallback(newState_1.s.identifier); });\n                        newState_1.dom.confirmation.one('dtsr-rename', function () { return _this._collectionRebuild(); });\n                        newState_1.dom.confirmation.one('dtsr-save', function () { return _this._collectionRebuild(); });\n                    });\n                }\n            };\n            var this_2 = this;\n            for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n                var key = keys_1[_i];\n                _loop_3(key);\n            }\n        };\n        StateRestoreCollection.version = '1.0.0';\n        StateRestoreCollection.classes = {\n            background: 'dtsr-background',\n            checkBox: 'dtsr-check-box',\n            checkLabel: 'dtsr-check-label',\n            checkRow: 'dtsr-check-row',\n            closeButton: 'dtsr-popover-close',\n            colReorderToggle: 'dtsr-colReorder-toggle',\n            columnsSearchToggle: 'dtsr-columns-search-toggle',\n            columnsVisibleToggle: 'dtsr-columns-visible-toggle',\n            confirmation: 'dtsr-confirmation',\n            confirmationButton: 'dtsr-confirmation-button',\n            confirmationButtons: 'dtsr-confirmation-buttons',\n            confirmationMessage: 'dtsr-confirmation-message dtsr-name-label',\n            confirmationText: 'dtsr-confirmation-text',\n            confirmationTitle: 'dtsr-confirmation-title',\n            confirmationTitleRow: 'dtsr-confirmation-title-row',\n            creation: 'dtsr-creation',\n            creationButton: 'dtsr-creation-button',\n            creationForm: 'dtsr-creation-form',\n            creationText: 'dtsr-creation-text',\n            creationTitle: 'dtsr-creation-title',\n            dtButton: 'dt-button',\n            emptyStates: 'dtsr-emptyStates',\n            formRow: 'dtsr-form-row',\n            leftSide: 'dtsr-left',\n            lengthToggle: 'dtsr-length-toggle',\n            modalError: 'dtsr-modal-error',\n            modalFoot: 'dtsr-modal-foot',\n            nameInput: 'dtsr-name-input',\n            nameLabel: 'dtsr-name-label',\n            orderToggle: 'dtsr-order-toggle',\n            pagingToggle: 'dtsr-paging-toggle',\n            rightSide: 'dtsr-right',\n            scrollerToggle: 'dtsr-scroller-toggle',\n            searchBuilderToggle: 'dtsr-searchBuilder-toggle',\n            searchPanesToggle: 'dtsr-searchPanes-toggle',\n            searchToggle: 'dtsr-search-toggle',\n            selectToggle: 'dtsr-select-toggle',\n            toggleLabel: 'dtsr-toggle-title'\n        };\n        StateRestoreCollection.defaults = {\n            _createInSaved: false,\n            ajax: false,\n            create: true,\n            creationModal: false,\n            i18n: {\n                creationModal: {\n                    button: 'Create',\n                    colReorder: 'Column Order',\n                    columns: {\n                        search: 'Column Search',\n                        visible: 'Column Visibility'\n                    },\n                    length: 'Page Length',\n                    name: 'Name:',\n                    order: 'Sorting',\n                    paging: 'Paging',\n                    scroller: 'Scroll Position',\n                    search: 'Search',\n                    searchBuilder: 'SearchBuilder',\n                    searchPanes: 'SearchPanes',\n                    select: 'Select',\n                    title: 'Create New State',\n                    toggleLabel: 'Includes:'\n                },\n                duplicateError: 'A state with this name already exists.',\n                emptyError: 'Name cannot be empty.',\n                emptyStates: 'No saved states',\n                removeConfirm: 'Are you sure you want to remove %s?',\n                removeError: 'Failed to remove state.',\n                removeJoiner: ' and ',\n                removeSubmit: 'Remove',\n                removeTitle: 'Remove State',\n                renameButton: 'Rename',\n                renameLabel: 'New Name for %s:',\n                renameTitle: 'Rename State'\n            },\n            modalCloseButton: true,\n            preDefined: {},\n            remove: true,\n            rename: true,\n            save: true,\n            saveState: {\n                colReorder: true,\n                columns: {\n                    search: true,\n                    visible: true\n                },\n                length: true,\n                order: true,\n                paging: true,\n                scroller: true,\n                search: true,\n                searchBuilder: true,\n                searchPanes: true,\n                select: true\n            },\n            splitSecondaries: [\n                'updateState',\n                'renameState',\n                'removeState'\n            ],\n            toggle: {\n                colReorder: false,\n                columns: {\n                    search: false,\n                    visible: false\n                },\n                length: false,\n                order: false,\n                paging: false,\n                scroller: false,\n                search: false,\n                searchBuilder: false,\n                searchPanes: false,\n                select: false\n            }\n        };\n        return StateRestoreCollection;\n    }());\n\n    /*! StateRestore 1.3.0\n     * © SpryMedia Ltd - datatables.net/license\n     */\n    setJQuery$1($);\n    setJQuery($);\n    $.fn.dataTable.StateRestore = StateRestore;\n    $.fn.DataTable.StateRestore = StateRestore;\n    $.fn.dataTable.StateRestoreCollection = StateRestoreCollection;\n    $.fn.DataTable.StateRestoreCollection = StateRestoreCollection;\n    var apiRegister = DataTable.Api.register;\n    apiRegister('stateRestore()', function () {\n        return this;\n    });\n    apiRegister('stateRestore.state()', function (identifier) {\n        var ctx = this.context[0];\n        if (!ctx._stateRestore) {\n            var api = DataTable.Api(ctx);\n            var src = new DataTable.StateRestoreCollection(api, {});\n            _stateRegen(api, src);\n        }\n        this[0] = ctx._stateRestore.getState(identifier);\n        return this;\n    });\n    apiRegister('stateRestore.state.add()', function (identifier, options) {\n        var ctx = this.context[0];\n        if (!ctx._stateRestore) {\n            var api = DataTable.Api(ctx);\n            var src = new DataTable.StateRestoreCollection(api, {});\n            _stateRegen(api, src);\n        }\n        if (!ctx._stateRestore.c.create) {\n            return this;\n        }\n        if (ctx._stateRestore.addState) {\n            var states = ctx._stateRestore.s.states;\n            var ids = [];\n            for (var _i = 0, states_1 = states; _i < states_1.length; _i++) {\n                var intState = states_1[_i];\n                ids.push(intState.s.identifier);\n            }\n            ctx._stateRestore.addState(identifier, ids, options);\n            return this;\n        }\n    });\n    apiRegister('stateRestore.states()', function (ids) {\n        var ctx = this.context[0];\n        if (!ctx._stateRestore) {\n            var api = DataTable.Api(ctx);\n            var src = new DataTable.StateRestoreCollection(api, {});\n            _stateRegen(api, src);\n        }\n        this.length = 0;\n        this.push.apply(this, ctx._stateRestore.getStates(ids));\n        return this;\n    });\n    apiRegister('stateRestore.state().save()', function () {\n        var ctx = this[0];\n        // Check if saving states is allowed\n        if (ctx.c.save) {\n            ctx.save();\n        }\n        return this;\n    });\n    apiRegister('stateRestore.state().rename()', function (newIdentifier) {\n        var ctx = this.context[0];\n        var state = this[0];\n        // Check if renaming states is allowed\n        if (state.c.save) {\n            var states = ctx._stateRestore.s.states;\n            var ids = [];\n            for (var _i = 0, states_2 = states; _i < states_2.length; _i++) {\n                var intState = states_2[_i];\n                ids.push(intState.s.identifier);\n            }\n            state.rename(newIdentifier, ids);\n        }\n        return this;\n    });\n    apiRegister('stateRestore.state().load()', function () {\n        var ctx = this[0];\n        ctx.load();\n        return this;\n    });\n    apiRegister('stateRestore.state().remove()', function (skipModal) {\n        var ctx = this[0];\n        // Check if removal of states is allowed\n        if (ctx.c.remove) {\n            ctx.remove(skipModal);\n        }\n        return this;\n    });\n    apiRegister('stateRestore.states().remove()', function (skipModal) {\n        var _this = this;\n        var removeAllCallBack = function (skipModalIn) {\n            var success = true;\n            var that = _this.toArray();\n            while (that.length > 0) {\n                var set = that[0];\n                if (set !== undefined && set.c.remove) {\n                    var tempSuccess = set.remove(skipModalIn);\n                    if (tempSuccess !== true) {\n                        success = tempSuccess;\n                    }\n                    else {\n                        that.splice(0, 1);\n                    }\n                }\n                else {\n                    break;\n                }\n            }\n            return success;\n        };\n        if (this.context[0]._stateRestore && this.context[0]._stateRestore.c.remove) {\n            if (skipModal) {\n                removeAllCallBack(skipModal);\n            }\n            else {\n                this.context[0]._stateRestore.removeAll(removeAllCallBack);\n            }\n        }\n        return this;\n    });\n    apiRegister('stateRestore.activeStates()', function () {\n        var ctx = this.context[0];\n        this.length = 0;\n        if (!ctx._stateRestore) {\n            var api = DataTable.Api(ctx);\n            var src = new DataTable.StateRestoreCollection(api, {});\n            _stateRegen(api, src);\n        }\n        if (ctx._stateRestore) {\n            this.push.apply(this, ctx._stateRestore.findActive());\n        }\n        return this;\n    });\n    DataTable.ext.buttons.stateRestore = {\n        action: function (e, dt, node, config) {\n            config._stateRestore.load();\n            node.blur();\n        },\n        config: {\n            split: ['updateState', 'renameState', 'removeState']\n        },\n        text: function (dt) {\n            return dt.i18n('buttons.stateRestore', 'State %d', dt.stateRestore.states()[0].length + 1);\n        }\n    };\n    DataTable.ext.buttons.updateState = {\n        action: function (e, dt, node, config) {\n            $('div.dt-button-background').click();\n            config.parent._stateRestore.save();\n        },\n        text: function (dt) {\n            return dt.i18n('buttons.updateState', 'Update');\n        }\n    };\n    DataTable.ext.buttons.savedStates = {\n        buttons: [],\n        extend: 'collection',\n        init: function (dt, node, config) {\n            dt.on('stateRestore-change', function () {\n                dt.button(node).text(dt.i18n('buttons.savedStates', 'Saved States', dt.stateRestore.states().length));\n            });\n            if (dt.settings()[0]._stateRestore === undefined) {\n                _buttonInit(dt, config);\n            }\n        },\n        name: 'SaveStateRestore',\n        text: function (dt) {\n            return dt.i18n('buttons.savedStates', 'Saved States', 0);\n        }\n    };\n    DataTable.ext.buttons.savedStatesCreate = {\n        buttons: [],\n        extend: 'collection',\n        init: function (dt, node, config) {\n            dt.on('stateRestore-change', function () {\n                dt.button(node).text(dt.i18n('buttons.savedStates', 'Saved States', dt.stateRestore.states().length));\n            });\n            if (dt.settings()[0]._stateRestore === undefined) {\n                if (config.config === undefined) {\n                    config.config = {};\n                }\n                config.config._createInSaved = true;\n                _buttonInit(dt, config);\n            }\n        },\n        name: 'SaveStateRestore',\n        text: function (dt) {\n            return dt.i18n('buttons.savedStates', 'Saved States', 0);\n        }\n    };\n    DataTable.ext.buttons.createState = {\n        action: function (e, dt, node, config) {\n            e.stopPropagation();\n            var stateRestoreOpts = dt.settings()[0]._stateRestore.c;\n            var language = dt.settings()[0].oLanguage;\n            // If creation/saving is not allowed then return\n            if (!stateRestoreOpts.create || !stateRestoreOpts.save) {\n                return;\n            }\n            var prevStates = dt.stateRestore.states().toArray();\n            // Create a replacement regex based on the i18n values\n            var defaultString = language.buttons !== undefined && language.buttons.stateRestore !== undefined ?\n                language.buttons.stateRestore :\n                'State ';\n            var replaceRegex;\n            if (defaultString.indexOf('%d') === defaultString.length - 3) {\n                replaceRegex = new RegExp(defaultString.replace(/%d/g, ''));\n            }\n            else {\n                var splitString = defaultString.split('%d');\n                replaceRegex = [];\n                for (var _i = 0, splitString_1 = splitString; _i < splitString_1.length; _i++) {\n                    var split = splitString_1[_i];\n                    replaceRegex.push(new RegExp(split));\n                }\n            }\n            var getId = function (identifier) {\n                var id;\n                if (Array.isArray(replaceRegex)) {\n                    id = identifier;\n                    for (var _i = 0, replaceRegex_1 = replaceRegex; _i < replaceRegex_1.length; _i++) {\n                        var reg = replaceRegex_1[_i];\n                        id = id.replace(reg, '');\n                    }\n                }\n                else {\n                    id = identifier.replace(replaceRegex, '');\n                }\n                // If the id after replacement is not a number, or the length is the same as before,\n                //  it has been customised so return 0\n                if (isNaN(+id) || id.length === identifier) {\n                    return 0;\n                }\n                // Otherwise return the number that has been assigned previously\n                else {\n                    return +id;\n                }\n            };\n            // Extract the numbers from the identifiers that use the standard naming convention\n            var identifiers = prevStates\n                .map(function (state) { return getId(state.s.identifier); })\n                .sort(function (a, b) { return +a < +b ?\n                1 :\n                +a > +b ?\n                    -1 :\n                    0; });\n            var lastNumber = identifiers[0];\n            dt.stateRestore.state.add(dt.i18n('buttons.stateRestore', 'State %d', lastNumber !== undefined ? lastNumber + 1 : 1), config.config);\n            var states = dt.stateRestore.states().sort(function (a, b) {\n                var aId = +getId(a.s.identifier);\n                var bId = +getId(b.s.identifier);\n                return aId > bId ?\n                    1 :\n                    aId < bId ?\n                        -1 :\n                        0;\n            });\n            var button = dt.button('SaveStateRestore:name');\n            var stateButtons = button[0] !== undefined && button[0].inst.c.buttons[0].buttons !== undefined ?\n                button[0].inst.c.buttons[0].buttons :\n                [];\n            // remove any states from the previous rebuild - if they are still there they will be added later\n            for (var i = 0; i < stateButtons.length; i++) {\n                if (stateButtons[i].extend === 'stateRestore') {\n                    stateButtons.splice(i, 1);\n                    i--;\n                }\n            }\n            if (stateRestoreOpts._createInSaved) {\n                stateButtons.push('createState');\n                stateButtons.push('');\n            }\n            for (var _a = 0, states_3 = states; _a < states_3.length; _a++) {\n                var state = states_3[_a];\n                var split = Object.assign([], stateRestoreOpts.splitSecondaries);\n                if (split.includes('updateState') && !stateRestoreOpts.save) {\n                    split.splice(split.indexOf('updateState'), 1);\n                }\n                if (split.includes('renameState') &&\n                    (!stateRestoreOpts.save || !stateRestoreOpts.rename)) {\n                    split.splice(split.indexOf('renameState'), 1);\n                }\n                if (split.includes('removeState') && !stateRestoreOpts.remove) {\n                    split.splice(split.indexOf('removeState'), 1);\n                }\n                if (split.length > 0 &&\n                    !split.includes('<h3>' + state.s.identifier + '</h3>')) {\n                    split.unshift('<h3>' + state.s.identifier + '</h3>');\n                }\n                stateButtons.push({\n                    _stateRestore: state,\n                    attr: {\n                        title: state.s.identifier\n                    },\n                    config: {\n                        split: split\n                    },\n                    extend: 'stateRestore',\n                    text: state.s.identifier\n                });\n            }\n            dt.button('SaveStateRestore:name').collectionRebuild(stateButtons);\n            node.blur();\n            // Need to disable the removeAllStates button if there are no states and it is present\n            var buttons = dt.buttons();\n            for (var _b = 0, buttons_1 = buttons; _b < buttons_1.length; _b++) {\n                var butt = buttons_1[_b];\n                if ($(butt.node).hasClass('dtsr-removeAllStates')) {\n                    if (states.length === 0) {\n                        dt.button(butt.node).disable();\n                    }\n                    else {\n                        dt.button(butt.node).enable();\n                    }\n                }\n            }\n        },\n        init: function (dt, node, config) {\n            if (dt.settings()[0]._stateRestore === undefined && dt.button('SaveStateRestore:name').length > 1) {\n                _buttonInit(dt, config);\n            }\n        },\n        text: function (dt) {\n            return dt.i18n('buttons.createState', 'Create State');\n        }\n    };\n    DataTable.ext.buttons.removeState = {\n        action: function (e, dt, node, config) {\n            config.parent._stateRestore.remove();\n            node.blur();\n        },\n        text: function (dt) {\n            return dt.i18n('buttons.removeState', 'Remove');\n        }\n    };\n    DataTable.ext.buttons.removeAllStates = {\n        action: function (e, dt, node) {\n            dt.stateRestore.states().remove(true);\n            node.blur();\n        },\n        className: 'dt-button dtsr-removeAllStates',\n        init: function (dt, node) {\n            if (!dt.settings()[0]._stateRestore || dt.stateRestore.states().length === 0) {\n                $(node).addClass('disabled');\n            }\n        },\n        text: function (dt) {\n            return dt.i18n('buttons.removeAllStates', 'Remove All States');\n        }\n    };\n    DataTable.ext.buttons.renameState = {\n        action: function (e, dt, node, config) {\n            var states = dt.settings()[0]._stateRestore.s.states;\n            var ids = [];\n            for (var _i = 0, states_4 = states; _i < states_4.length; _i++) {\n                var state = states_4[_i];\n                ids.push(state.s.identifier);\n            }\n            config.parent._stateRestore.rename(undefined, ids);\n            node.blur();\n        },\n        text: function (dt) {\n            return dt.i18n('buttons.renameState', 'Rename');\n        }\n    };\n    function _init(settings, options) {\n        if (options === void 0) { options = null; }\n        var api = new DataTable.Api(settings);\n        var opts = options\n            ? options\n            : api.init().stateRestore || DataTable.defaults.stateRestore;\n        var stateRestore = new StateRestoreCollection(api, opts);\n        _stateRegen(api, stateRestore);\n        return stateRestore;\n    }\n    /**\n     * Initialisation function if initialising using a button\n     *\n     * @param dt The datatables instance\n     * @param config the config for the button\n     */\n    function _buttonInit(dt, config) {\n        var SRC = new DataTable.StateRestoreCollection(dt, config.config);\n        _stateRegen(dt, SRC);\n    }\n    function _stateRegen(dt, src) {\n        var states = dt.stateRestore.states();\n        var button = dt.button('SaveStateRestore:name');\n        var stateButtons = [];\n        // Need to get the original configuration object, so we can rebuild it\n        // It might be nested, so need to traverse down the tree\n        if (button[0]) {\n            var idxs = button.index().split('-');\n            stateButtons = button[0].inst.c.buttons;\n            for (var i = 0; i < idxs.length; i++) {\n                if (stateButtons[idxs[i]].buttons) {\n                    stateButtons = stateButtons[idxs[i]].buttons;\n                }\n                else {\n                    stateButtons = [];\n                    break;\n                }\n            }\n        }\n        var stateRestoreOpts = dt.settings()[0]._stateRestore.c;\n        // remove any states from the previous rebuild - if they are still there they will be added later\n        for (var i = 0; i < stateButtons.length; i++) {\n            if (stateButtons[i].extend === 'stateRestore') {\n                stateButtons.splice(i, 1);\n                i--;\n            }\n        }\n        if (stateRestoreOpts._createInSaved) {\n            stateButtons.push('createState');\n        }\n        if (states === undefined || states.length === 0) {\n            stateButtons.push('<span class=\"' + src.classes.emptyStates + '\">' +\n                dt.i18n('stateRestore.emptyStates', src.c.i18n.emptyStates) +\n                '</span>');\n        }\n        else {\n            for (var _i = 0, states_5 = states; _i < states_5.length; _i++) {\n                var state = states_5[_i];\n                var split = Object.assign([], stateRestoreOpts.splitSecondaries);\n                if (split.includes('updateState') && !stateRestoreOpts.save) {\n                    split.splice(split.indexOf('updateState'), 1);\n                }\n                if (split.includes('renameState') &&\n                    (!stateRestoreOpts.save || !stateRestoreOpts.rename)) {\n                    split.splice(split.indexOf('renameState'), 1);\n                }\n                if (split.includes('removeState') && !stateRestoreOpts.remove) {\n                    split.splice(split.indexOf('removeState'), 1);\n                }\n                if (split.length > 0 &&\n                    !split.includes('<h3>' + state.s.identifier + '</h3>')) {\n                    split.unshift('<h3>' + state.s.identifier + '</h3>');\n                }\n                stateButtons.push({\n                    _stateRestore: state,\n                    attr: {\n                        title: state.s.identifier\n                    },\n                    config: {\n                        split: split\n                    },\n                    extend: 'stateRestore',\n                    text: state.s.identifier\n                });\n            }\n        }\n        dt.button('SaveStateRestore:name').collectionRebuild(stateButtons);\n        // Need to disable the removeAllStates button if there are no states and it is present\n        var buttons = dt.buttons();\n        for (var _a = 0, buttons_2 = buttons; _a < buttons_2.length; _a++) {\n            var butt = buttons_2[_a];\n            if ($(butt.node).hasClass('dtsr-removeAllStates')) {\n                if (states.length === 0) {\n                    dt.button(butt.node).disable();\n                }\n                else {\n                    dt.button(butt.node).enable();\n                }\n            }\n        }\n    }\n    // Attach a listener to the document which listens for DataTables initialisation\n    // events so we can automatically initialise\n    $(document).on('preInit.dt.dtsr', function (e, settings) {\n        if (e.namespace !== 'dt') {\n            return;\n        }\n        if (settings.oInit.stateRestore ||\n            DataTable.defaults.stateRestore) {\n            if (!settings._stateRestore) {\n                _init(settings, null);\n            }\n        }\n    });\n\n})();\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/js/stateRestore.bootstrap.js",
    "content": "/*! Bootstrap integration for DataTables' StateRestore\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs', 'datatables.net-staterestore'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.StateRestore ) {\n\t\t\t\trequire('datatables.net-staterestore')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.StateRestoreCollection.classes, {\n    checkBox: 'dtsr-check-box form-check-input',\n    creationButton: 'dtsr-creation-button btn btn-default',\n    creationForm: 'dtsr-creation-form modal-body',\n    creationText: 'dtsr-creation-text modal-header',\n    creationTitle: 'dtsr-creation-title modal-title',\n    nameInput: 'dtsr-name-input form-control'\n});\n$.extend(true, DataTable.StateRestore.classes, {\n    confirmationButton: 'dtsr-confirmation-button btn btn-default',\n    confirmationTitle: 'dtsr-confirmation title modal-header',\n    input: 'dtsr-input form-control'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/js/stateRestore.bootstrap4.js",
    "content": "/*! Bootstrap integration for DataTables' StateRestore\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs4', 'datatables.net-staterestore'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs4')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.StateRestore ) {\n\t\t\t\trequire('datatables.net-staterestore')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.StateRestoreCollection.classes, {\n    checkBox: 'dtsr-check-box form-check-input',\n    creationButton: 'dtsr-creation-button btn btn-secondary',\n    creationForm: 'dtsr-creation-form modal-body',\n    creationText: 'dtsr-creation-text modal-header',\n    creationTitle: 'dtsr-creation-title modal-title',\n    nameInput: 'dtsr-name-input form-control'\n});\n$.extend(true, DataTable.StateRestore.classes, {\n    confirmationButton: 'dtsr-confirmation-button btn btn-secondary',\n    input: 'dtsr-input form-control'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/js/stateRestore.bootstrap5.js",
    "content": "/*! Bootstrap integration for DataTables' StateRestore\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-staterestore'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.StateRestore ) {\n\t\t\t\trequire('datatables.net-staterestore')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.StateRestoreCollection.classes, {\n    checkBox: 'dtsr-check-box form-check-input',\n    checkLabel: 'dtsr-check-label form-check-label',\n    checkRow: 'dtsr-check-row form-check',\n    creationButton: 'dtsr-creation-button btn btn-secondary',\n    creationForm: 'dtsr-creation-form modal-body',\n    creationText: 'dtsr-creation-text modal-header',\n    creationTitle: 'dtsr-creation-title modal-title',\n    nameInput: 'dtsr-name-input form-control',\n    nameLabel: 'dtsr-name-label form-label'\n});\n$.extend(true, DataTable.StateRestore.classes, {\n    confirmationButton: 'dtsr-confirmation-button btn btn-secondary',\n    input: 'dtsr-input form-control'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/js/stateRestore.bulma.js",
    "content": "/*! Bootstrap integration for DataTables' StateRestore\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bm', 'datatables.net-staterestore'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bm')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.StateRestore ) {\n\t\t\t\trequire('datatables.net-staterestore')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.StateRestoreCollection.classes, {\n    checkRow: 'dtsr-check-row checkbox',\n    creationButton: 'dtsr-creation-button button',\n    creationForm: 'dtsr-creation-form modal-content',\n    creationText: 'dtsr-creation-text modal-header',\n    creationTitle: 'dtsr-creation-title modal-card-title',\n    nameInput: 'dtsr-name-input input'\n});\n$.extend(true, DataTable.StateRestore.classes, {\n    confirmationButton: 'dtsr-confirmation-button button',\n    confirmationTitle: 'dtsr-confirmation-title modal-card-title',\n    input: 'dtsr-input input'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/js/stateRestore.dataTables.js",
    "content": "/*! Bootstrap integration for DataTables' StateRestore\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-dt', 'datatables.net-staterestore'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-dt')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.StateRestore ) {\n\t\t\t\trequire('datatables.net-staterestore')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/js/stateRestore.foundation.js",
    "content": "/*! Bootstrap integration for DataTables' StateRestore\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-zf', 'datatables.net-staterestore'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-zf')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.StateRestore ) {\n\t\t\t\trequire('datatables.net-staterestore')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.StateRestoreCollection.classes, {\n    checkBox: 'dtsr-check-box form-check-input',\n    checkLabel: 'dtsr-check-label form-check-label',\n    checkRow: 'dtsr-check-row form',\n    creationButton: 'dtsr-creation-button button',\n    creationForm: 'dtsr-creation-form modal-body',\n    creationText: 'dtsr-creation-text modal-header',\n    creationTitle: 'dtsr-creation-title modal-title',\n    nameInput: 'dtsr-name-input form-control',\n    nameLabel: 'dtsr-name-label form-label',\n    nameRow: 'dtsr-name-row medium-6 cell'\n});\n$.extend(true, DataTable.StateRestore.classes, {\n    confirmationButton: 'dtsr-confirmation-button button'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/js/stateRestore.jqueryui.js",
    "content": "/*! Bootstrap integration for DataTables' StateRestore\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-jqui', 'datatables.net-staterestore'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-jqui')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.StateRestore ) {\n\t\t\t\trequire('datatables.net-staterestore')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.StateRestoreCollection.classes, {\n    checkBox: 'dtsr-check-box form-check-input',\n    checkLabel: 'dtsr-check-label form-check-label',\n    checkRow: 'dtsr-check-row form',\n    creationButton: 'dtsr-creation-button ui-button ui-corner-all ui-widget',\n    creationForm: 'dtsr-creation-form modal-body',\n    creationText: 'dtsr-creation-text modal-header',\n    creationTitle: 'dtsr-creation-title modal-title',\n    nameInput: 'dtsr-name-input form-control',\n    nameLabel: 'dtsr-name-label form-label',\n    nameRow: 'dtsr-name-row medium-6 cell'\n});\n$.extend(true, DataTable.StateRestore.classes, {\n    // eslint-disable-next-line max-len\n    confirmationButton: 'dtsr-confirmation-button ui-button ui-state-default ui-button-text-only ui-corner-all ui-widget'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/StateRestore-1.3.0/js/stateRestore.semanticui.js",
    "content": "/*! Bootstrap integration for DataTables' StateRestore\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-se', 'datatables.net-staterestore'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-se')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.StateRestore ) {\n\t\t\t\trequire('datatables.net-staterestore')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.StateRestoreCollection.classes, {\n    checkBox: 'dtsr-check-box form-check-input',\n    checkLabel: 'dtsr-check-label form-check-label',\n    checkRow: 'dtsr-check-row form',\n    creationButton: 'dtsr-creation-button ui button primary',\n    creationForm: 'dtsr-creation-form modal-body',\n    creationText: 'dtsr-creation-text modal-header',\n    creationTitle: 'dtsr-creation-title modal-title',\n    nameInput: 'dtsr-name-input form-control',\n    nameLabel: 'dtsr-name-label form-label',\n    nameRow: 'dtsr-name-row ui input'\n});\n$.extend(true, DataTable.StateRestore.classes, {\n    confirmation: 'dtsr-confirmation modal',\n    confirmationButton: 'dtsr-confirmation-button ui button primary',\n    confirmationText: 'dtsr-confirmation-text modal-body',\n    renameModal: 'dtsr-rename-modal ui input'\n});\n\n\nreturn DataTable;\n}));\n"
  },
  {
    "path": "public/assets/DataTables/datatables.css",
    "content": "/*\n * This combined file was created by the DataTables downloader builder:\n *   https://datatables.net/download\n *\n * To rebuild or modify this file with the latest versions of the included\n * software please visit:\n *   https://datatables.net/download/#bs5/jszip-3.10.1/pdfmake-0.2.7/dt-1.13.8/af-2.6.0/b-2.4.2/b-colvis-2.4.2/b-html5-2.4.2/b-print-2.4.2/cr-1.7.0/date-1.5.1/fc-4.3.0/fh-3.4.0/kt-2.11.0/r-2.5.0/rg-1.4.1/rr-1.4.1/sc-2.3.0/sb-1.6.0/sp-2.2.0/sl-1.7.0/sr-1.3.0\n *\n * Included libraries:\n *   JSZip 3.10.1, pdfmake 0.2.7, DataTables 1.13.8, AutoFill 2.6.0, Buttons 2.4.2, Column visibility 2.4.2, HTML5 export 2.4.2, Print view 2.4.2, ColReorder 1.7.0, DateTime 1.5.1, FixedColumns 4.3.0, FixedHeader 3.4.0, KeyTable 2.11.0, Responsive 2.5.0, RowGroup 1.4.1, RowReorder 1.4.1, Scroller 2.3.0, SearchBuilder 1.6.0, SearchPanes 2.2.0, Select 1.7.0, StateRestore 1.3.0\n */\n\n@charset \"UTF-8\";\n:root {\n  --dt-row-selected: 13, 110, 253;\n  --dt-row-selected-text: 255, 255, 255;\n  --dt-row-selected-link: 9, 10, 11;\n  --dt-row-stripe: 0, 0, 0;\n  --dt-row-hover: 0, 0, 0;\n  --dt-column-ordering: 0, 0, 0;\n  --dt-html-background: white;\n}\n:root.dark {\n  --dt-html-background: rgb(33, 37, 41);\n}\n\ntable.dataTable td.dt-control {\n  text-align: center;\n  cursor: pointer;\n}\ntable.dataTable td.dt-control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"▶\";\n}\ntable.dataTable tr.dt-hasChild td.dt-control:before {\n  content: \"▼\";\n}\n\nhtml.dark table.dataTable td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\nhtml.dark table.dataTable tr.dt-hasChild td.dt-control:before {\n  color: rgba(255, 255, 255, 0.5);\n}\n\ntable.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting_asc_disabled, table.dataTable thead > tr > th.sorting_desc_disabled,\ntable.dataTable thead > tr > td.sorting,\ntable.dataTable thead > tr > td.sorting_asc,\ntable.dataTable thead > tr > td.sorting_desc,\ntable.dataTable thead > tr > td.sorting_asc_disabled,\ntable.dataTable thead > tr > td.sorting_desc_disabled {\n  cursor: pointer;\n  position: relative;\n  padding-right: 26px;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  position: absolute;\n  display: block;\n  opacity: 0.125;\n  right: 10px;\n  line-height: 9px;\n  font-size: 0.8em;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before {\n  bottom: 50%;\n  content: \"▲\";\n  content: \"▲\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  top: 50%;\n  content: \"▼\";\n  content: \"▼\"/\"\";\n}\ntable.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:after {\n  opacity: 0.6;\n}\ntable.dataTable thead > tr > th.sorting_desc_disabled:after, table.dataTable thead > tr > th.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before {\n  display: none;\n}\ntable.dataTable thead > tr > th:active,\ntable.dataTable thead > tr > td:active {\n  outline: none;\n}\n\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > th:before, div.dataTables_scrollBody > table.dataTable > thead > tr > th:after,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:before,\ndiv.dataTables_scrollBody > table.dataTable > thead > tr > td:after {\n  display: none;\n}\n\ndiv.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 2px;\n  z-index: 10;\n}\ndiv.dataTables_processing > div:last-child {\n  position: relative;\n  width: 80px;\n  height: 15px;\n  margin: 1em auto;\n}\ndiv.dataTables_processing > div:last-child > div {\n  position: absolute;\n  top: 0;\n  width: 13px;\n  height: 13px;\n  border-radius: 50%;\n  background: rgb(13, 110, 253);\n  background: rgb(var(--dt-row-selected));\n  animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(1) {\n  left: 8px;\n  animation: datatables-loader-1 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(2) {\n  left: 8px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(3) {\n  left: 32px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(4) {\n  left: 56px;\n  animation: datatables-loader-3 0.6s infinite;\n}\n\n@keyframes datatables-loader-1 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes datatables-loader-3 {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    transform: scale(0);\n  }\n}\n@keyframes datatables-loader-2 {\n  0% {\n    transform: translate(0, 0);\n  }\n  100% {\n    transform: translate(24px, 0);\n  }\n}\ntable.dataTable.nowrap th, table.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable th.dt-left,\ntable.dataTable td.dt-left {\n  text-align: left;\n}\ntable.dataTable th.dt-center,\ntable.dataTable td.dt-center,\ntable.dataTable td.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable th.dt-right,\ntable.dataTable td.dt-right {\n  text-align: right;\n}\ntable.dataTable th.dt-justify,\ntable.dataTable td.dt-justify {\n  text-align: justify;\n}\ntable.dataTable th.dt-nowrap,\ntable.dataTable td.dt-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable thead th,\ntable.dataTable thead td,\ntable.dataTable tfoot th,\ntable.dataTable tfoot td {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-left,\ntable.dataTable thead td.dt-head-left,\ntable.dataTable tfoot th.dt-head-left,\ntable.dataTable tfoot td.dt-head-left {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-center,\ntable.dataTable thead td.dt-head-center,\ntable.dataTable tfoot th.dt-head-center,\ntable.dataTable tfoot td.dt-head-center {\n  text-align: center;\n}\ntable.dataTable thead th.dt-head-right,\ntable.dataTable thead td.dt-head-right,\ntable.dataTable tfoot th.dt-head-right,\ntable.dataTable tfoot td.dt-head-right {\n  text-align: right;\n}\ntable.dataTable thead th.dt-head-justify,\ntable.dataTable thead td.dt-head-justify,\ntable.dataTable tfoot th.dt-head-justify,\ntable.dataTable tfoot td.dt-head-justify {\n  text-align: justify;\n}\ntable.dataTable thead th.dt-head-nowrap,\ntable.dataTable thead td.dt-head-nowrap,\ntable.dataTable tfoot th.dt-head-nowrap,\ntable.dataTable tfoot td.dt-head-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable tbody th.dt-body-left,\ntable.dataTable tbody td.dt-body-left {\n  text-align: left;\n}\ntable.dataTable tbody th.dt-body-center,\ntable.dataTable tbody td.dt-body-center {\n  text-align: center;\n}\ntable.dataTable tbody th.dt-body-right,\ntable.dataTable tbody td.dt-body-right {\n  text-align: right;\n}\ntable.dataTable tbody th.dt-body-justify,\ntable.dataTable tbody td.dt-body-justify {\n  text-align: justify;\n}\ntable.dataTable tbody th.dt-body-nowrap,\ntable.dataTable tbody td.dt-body-nowrap {\n  white-space: nowrap;\n}\n\n/*! Bootstrap 5 integration for DataTables\n *\n * ©2020 SpryMedia Ltd, all rights reserved.\n * License: MIT datatables.net/license/mit\n */\ntable.dataTable {\n  clear: both;\n  margin-top: 6px !important;\n  margin-bottom: 6px !important;\n  max-width: none !important;\n  border-collapse: separate !important;\n  border-spacing: 0;\n}\ntable.dataTable td,\ntable.dataTable th {\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\ntable.dataTable td.dataTables_empty,\ntable.dataTable th.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable.nowrap th,\ntable.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable.table-striped > tbody > tr:nth-of-type(2n+1) > * {\n  box-shadow: none;\n}\ntable.dataTable > tbody > tr {\n  background-color: transparent;\n}\ntable.dataTable > tbody > tr.selected > * {\n  box-shadow: inset 0 0 0 9999px rgb(13, 110, 253);\n  box-shadow: inset 0 0 0 9999px rgb(var(--dt-row-selected));\n  color: rgb(255, 255, 255);\n  color: rgb(var(--dt-row-selected-text));\n}\ntable.dataTable > tbody > tr.selected a {\n  color: rgb(9, 10, 11);\n  color: rgb(var(--dt-row-selected-link));\n}\ntable.dataTable.table-striped > tbody > tr:nth-of-type(2n+1) > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.05);\n}\ntable.dataTable.table-striped > tbody > tr:nth-of-type(2n+1).selected > * {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.95);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.95);\n}\ntable.dataTable.table-hover > tbody > tr:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.075);\n}\ntable.dataTable.table-hover > tbody > tr.selected:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.975);\n  box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.975);\n}\n\ndiv.dataTables_wrapper div.dataTables_length label {\n  font-weight: normal;\n  text-align: left;\n  white-space: nowrap;\n}\ndiv.dataTables_wrapper div.dataTables_length select {\n  width: auto;\n  display: inline-block;\n}\ndiv.dataTables_wrapper div.dataTables_filter {\n  text-align: right;\n}\ndiv.dataTables_wrapper div.dataTables_filter label {\n  font-weight: normal;\n  white-space: nowrap;\n  text-align: left;\n}\ndiv.dataTables_wrapper div.dataTables_filter input {\n  margin-left: 0.5em;\n  display: inline-block;\n  width: auto;\n}\ndiv.dataTables_wrapper div.dataTables_info {\n  padding-top: 0.85em;\n}\ndiv.dataTables_wrapper div.dataTables_paginate {\n  margin: 0;\n  white-space: nowrap;\n  text-align: right;\n}\ndiv.dataTables_wrapper div.dataTables_paginate ul.pagination {\n  margin: 2px 0;\n  white-space: nowrap;\n  justify-content: flex-end;\n}\ndiv.dataTables_wrapper div.dt-row {\n  position: relative;\n}\n\ndiv.dataTables_scrollHead table.dataTable {\n  margin-bottom: 0 !important;\n}\n\ndiv.dataTables_scrollBody > table {\n  border-top: none;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\ndiv.dataTables_scrollBody > table > thead .sorting:before,\ndiv.dataTables_scrollBody > table > thead .sorting_asc:before,\ndiv.dataTables_scrollBody > table > thead .sorting_desc:before,\ndiv.dataTables_scrollBody > table > thead .sorting:after,\ndiv.dataTables_scrollBody > table > thead .sorting_asc:after,\ndiv.dataTables_scrollBody > table > thead .sorting_desc:after {\n  display: none;\n}\ndiv.dataTables_scrollBody > table > tbody tr:first-child th,\ndiv.dataTables_scrollBody > table > tbody tr:first-child td {\n  border-top: none;\n}\n\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner {\n  box-sizing: content-box;\n}\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner > table {\n  margin-top: 0 !important;\n  border-top: none;\n}\n\n@media screen and (max-width: 767px) {\n  div.dataTables_wrapper div.dataTables_length,\n  div.dataTables_wrapper div.dataTables_filter,\n  div.dataTables_wrapper div.dataTables_info,\n  div.dataTables_wrapper div.dataTables_paginate {\n    text-align: center;\n  }\n  div.dataTables_wrapper div.dataTables_paginate ul.pagination {\n    justify-content: center !important;\n  }\n}\ntable.dataTable.table-sm > thead > tr > th:not(.sorting_disabled) {\n  padding-right: 20px;\n}\ntable.dataTable.table-sm > thead > tr > th:not(.sorting_disabled):before, table.dataTable.table-sm > thead > tr > th:not(.sorting_disabled):after {\n  right: 5px;\n}\n\ntable.table-bordered.dataTable {\n  border-right-width: 0;\n}\ntable.table-bordered.dataTable thead tr:first-child th,\ntable.table-bordered.dataTable thead tr:first-child td {\n  border-top-width: 1px;\n}\ntable.table-bordered.dataTable th,\ntable.table-bordered.dataTable td {\n  border-left-width: 0;\n}\ntable.table-bordered.dataTable th:first-child, table.table-bordered.dataTable th:first-child,\ntable.table-bordered.dataTable td:first-child,\ntable.table-bordered.dataTable td:first-child {\n  border-left-width: 1px;\n}\ntable.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,\ntable.table-bordered.dataTable td:last-child,\ntable.table-bordered.dataTable td:last-child {\n  border-right-width: 1px;\n}\ntable.table-bordered.dataTable th,\ntable.table-bordered.dataTable td {\n  border-bottom-width: 1px;\n}\n\ndiv.dataTables_scrollHead table.table-bordered {\n  border-bottom-width: 0;\n}\n\ndiv.table-responsive > div.dataTables_wrapper > div.row {\n  margin: 0;\n}\ndiv.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:first-child {\n  padding-left: 0;\n}\ndiv.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:last-child {\n  padding-right: 0;\n}\n\n:root[data-bs-theme=dark] {\n  --dt-row-hover: 255, 255, 255;\n  --dt-row-stripe: 255, 255, 255;\n  --dt-column-ordering: 255, 255, 255;\n}\n\n\ndiv.dt-autofill-handle{position:absolute;height:8px;width:8px;z-index:10;box-sizing:border-box;background:#0d6efd;cursor:pointer}div.dtk-focus-alt div.dt-autofill-handle{background:#ff8b33}div.dt-autofill-select{position:absolute;z-index:1001;background-color:#0d6efd;background-image:repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px)}div.dt-autofill-select.top,div.dt-autofill-select.bottom{height:3px;margin-top:-1px}div.dt-autofill-select.left,div.dt-autofill-select.right{width:3px;margin-left:-1px}div.dt-autofill-list{position:fixed;top:50%;left:50%;width:500px;margin-left:-250px;background-color:white;border-radius:.75em;box-shadow:0 12px 30px rgba(0, 0, 0, 0.6);z-index:104;box-sizing:border-box;padding:2em}div.dt-autofill-list div.dtaf-popover-close{position:absolute;top:6px;right:6px;width:22px;height:22px;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dt-autofill-list>div.dt-autofill-list-items>button{display:block;width:100%;margin:1em 0;padding:1em;border-radius:.5em;border:1px solid rgba(0, 0, 0, 0.175);background-color:#f6f6f6;text-align:left;cursor:pointer}div.dt-autofill-list>div.dt-autofill-list-items>button:hover{background-color:#ebebeb}div.dt-autofill-list>div.dt-autofill-list-items>button:first-child{margin-top:0}div.dt-autofill-list>div.dt-autofill-list-items>button:last-child{margin-bottom:0}div.dt-autofill-list>div.dt-autofill-list-items>button input[type=number]{padding:6px;width:30px;margin:-2px 0}div.dt-autofill-list>div.dt-autofill-list-items>button span{float:right}div.dtaf-popover-closeable{padding-top:2.5em}div.dt-autofill-background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:103}html.dark div.dt-autofill-handle{background:rgb(110, 168, 254)}html.dark div.dt-autofill-select{position:absolute;z-index:1001;background-color:rgb(110, 168, 254);background-image:repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(0, 0, 0, 0.5) 5px, rgba(0, 0, 0, 0.5) 10px)}html.dark div.dt-autofill-list{background-color:var(--dt-html-background);border:1px solid rgba(255, 255, 255, 0.15)}html.dark div.dt-autofill-list button{color:inherit;border:1px solid rgba(255, 255, 255, 0.175);background-color:rgb(47, 52, 56)}html.dark div.dt-autofill-list button:hover{background-color:rgb(64, 69, 73)}@media screen and (max-width: 767px){div.dt-autofill-handle{height:16px;width:16px}div.dt-autofill-list{width:90%;left:74.5%}}div.dt-autofill-list div.dt-autofill-question input[type=number]{padding:6px;width:60px;margin:-2px 0}div.row.dt-row>div.col-sm-12{position:relative}\n\n\n@keyframes dtb-spinner {\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-o-keyframes dtb-spinner {\n  100% {\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-ms-keyframes dtb-spinner {\n  100% {\n    -ms-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes dtb-spinner {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@-moz-keyframes dtb-spinner {\n  100% {\n    -moz-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\ndiv.dataTables_wrapper {\n  position: relative;\n}\n\ndiv.dt-buttons {\n  position: initial;\n}\ndiv.dt-buttons .dt-button {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\ndiv.dt-button-info {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  width: 400px;\n  margin-top: -100px;\n  margin-left: -200px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);\n  text-align: center;\n  z-index: 2003;\n  overflow: hidden;\n}\ndiv.dt-button-info h2 {\n  padding: 2rem 2rem 1rem 2rem;\n  margin: 0;\n  font-weight: normal;\n}\ndiv.dt-button-info > div {\n  padding: 1em 2em 2em 2em;\n}\n\ndiv.dtb-popover-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 2003;\n}\n\nbutton.dtb-hide-drop {\n  display: none !important;\n}\n\ndiv.dt-button-collection-title {\n  text-align: center;\n  padding: 0.3em 0 0.5em;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 0.9em;\n}\n\ndiv.dt-button-collection-title:empty {\n  display: none;\n}\n\nspan.dt-button-spacer {\n  display: inline-block;\n  margin: 0.5em;\n  white-space: nowrap;\n}\nspan.dt-button-spacer.bar {\n  border-left: 1px solid rgba(0, 0, 0, 0.3);\n  vertical-align: middle;\n  padding-left: 0.5em;\n}\nspan.dt-button-spacer.bar:empty {\n  height: 1em;\n  width: 1px;\n  padding-left: 0;\n}\n\ndiv.dt-button-collection .dt-button-active {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split {\n  padding-right: 0;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split:after {\n  display: none;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active.dt-button-split > *:first-child:after {\n  position: absolute;\n  top: 50%;\n  margin-top: -10px;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection .dt-button-active-a a {\n  padding-right: 3em;\n}\ndiv.dt-button-collection .dt-button-active-a a:after {\n  position: absolute;\n  right: 1em;\n  display: inline-block;\n  content: \"✓\";\n  color: inherit;\n}\ndiv.dt-button-collection span.dt-button-spacer {\n  width: 100%;\n  font-size: 0.9em;\n  text-align: center;\n  margin: 0.5em 0;\n}\ndiv.dt-button-collection span.dt-button-spacer:empty {\n  height: 0;\n  width: 100%;\n}\ndiv.dt-button-collection span.dt-button-spacer.bar {\n  border-left: none;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  padding-left: 0;\n}\n\nhtml.dark div.dt-button-info {\n  background-color: var(--dt-html-background);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dt-buttons div.btn-group {\n  position: initial;\n}\ndiv.dt-buttons div.dropdown-menu {\n  margin-top: 4px;\n}\ndiv.dt-buttons div.dropdown-menu .dt-button {\n  position: relative;\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: stretch;\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split a:first-child {\n  min-width: auto;\n  flex: 1 0 50px;\n  padding-right: 0;\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split button:last-child {\n  min-width: 33px;\n  flex: 0;\n  background: transparent;\n  border: none;\n  line-height: 1rem;\n  color: var(--bs-dropdown-link-color);\n  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split button:last-child:hover {\n  color: var(--bs-dropdown-link-hover-color);\n  background-color: var(--bs-dropdown-link-hover-bg);\n}\ndiv.dt-buttons div.dropdown-menu div.dt-button-split button:last-child:after {\n  position: relative;\n  left: -3px;\n}\ndiv.dt-buttons div.dropdown-menu.fixed {\n  position: fixed;\n  display: block;\n  top: 50%;\n  left: 50%;\n  margin-left: -75px;\n  border-radius: 5px;\n  background-color: white;\n  padding: 0.5em;\n}\ndiv.dt-buttons div.dropdown-menu.fixed.two-column {\n  margin-left: -200px;\n}\ndiv.dt-buttons div.dropdown-menu.fixed.three-column {\n  margin-left: -225px;\n}\ndiv.dt-buttons div.dropdown-menu.fixed.four-column {\n  margin-left: -300px;\n}\ndiv.dt-buttons div.dropdown-menu.fixed.columns {\n  margin-left: -409px;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-buttons div.dropdown-menu.fixed.columns {\n    margin-left: -308px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-buttons div.dropdown-menu.fixed.columns {\n    margin-left: -203px;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-buttons div.dropdown-menu.fixed.columns {\n    margin-left: -100px;\n  }\n}\ndiv.dt-buttons div.dropdown-menu.fixed > :last-child {\n  max-height: 100vh;\n  overflow: auto;\n}\ndiv.dt-buttons div.dropdown-menu.two-column > :last-child, div.dt-buttons div.dropdown-menu.three-column > :last-child, div.dt-buttons div.dropdown-menu.four-column > :last-child {\n  display: block !important;\n  -webkit-column-gap: 8px;\n  -moz-column-gap: 8px;\n  -ms-column-gap: 8px;\n  -o-column-gap: 8px;\n  column-gap: 8px;\n}\ndiv.dt-buttons div.dropdown-menu.two-column > :last-child > *, div.dt-buttons div.dropdown-menu.three-column > :last-child > *, div.dt-buttons div.dropdown-menu.four-column > :last-child > * {\n  -webkit-column-break-inside: avoid;\n  break-inside: avoid;\n}\ndiv.dt-buttons div.dropdown-menu.two-column {\n  width: 400px;\n}\ndiv.dt-buttons div.dropdown-menu.two-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 2;\n}\ndiv.dt-buttons div.dropdown-menu.three-column {\n  width: 450px;\n}\ndiv.dt-buttons div.dropdown-menu.three-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 3;\n}\ndiv.dt-buttons div.dropdown-menu.four-column {\n  width: 600px;\n}\ndiv.dt-buttons div.dropdown-menu.four-column > :last-child {\n  padding-bottom: 1px;\n  column-count: 4;\n}\ndiv.dt-buttons div.dropdown-menu .dt-button {\n  border-radius: 0;\n}\ndiv.dt-buttons div.dropdown-menu.columns {\n  width: auto;\n}\ndiv.dt-buttons div.dropdown-menu.columns > :last-child {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-items: center;\n  gap: 6px;\n  width: 818px;\n  padding-bottom: 1px;\n}\ndiv.dt-buttons div.dropdown-menu.columns > :last-child .dt-button {\n  min-width: 200px;\n  flex: 0 1;\n  margin: 0;\n}\ndiv.dt-buttons div.dropdown-menu.columns.dtb-b3 > :last-child, div.dt-buttons div.dropdown-menu.columns.dtb-b2 > :last-child, div.dt-buttons div.dropdown-menu.columns.dtb-b1 > :last-child {\n  justify-content: space-between;\n}\ndiv.dt-buttons div.dropdown-menu.columns.dtb-b3 .dt-button {\n  flex: 1 1 32%;\n}\ndiv.dt-buttons div.dropdown-menu.columns.dtb-b2 .dt-button {\n  flex: 1 1 48%;\n}\ndiv.dt-buttons div.dropdown-menu.columns.dtb-b1 .dt-button {\n  flex: 1 1 100%;\n}\n@media screen and (max-width: 1024px) {\n  div.dt-buttons div.dropdown-menu.columns > :last-child {\n    width: 612px;\n  }\n}\n@media screen and (max-width: 640px) {\n  div.dt-buttons div.dropdown-menu.columns > :last-child {\n    width: 406px;\n  }\n  div.dt-buttons div.dropdown-menu.columns.dtb-b3 .dt-button {\n    flex: 0 1 32%;\n  }\n}\n@media screen and (max-width: 460px) {\n  div.dt-buttons div.dropdown-menu.columns > :last-child {\n    width: 200px;\n  }\n}\ndiv.dt-buttons span.dt-button-spacer.empty {\n  margin: 1px;\n}\ndiv.dt-buttons span.dt-button-spacer.bar:empty {\n  height: inherit;\n}\ndiv.dt-buttons .btn.processing {\n  color: rgba(0, 0, 0, 0.2);\n}\ndiv.dt-buttons .btn.processing:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 16px;\n  height: 16px;\n  margin: -8px 0 0 -8px;\n  box-sizing: border-box;\n  display: block;\n  content: \" \";\n  border: 2px solid rgb(40, 40, 40);\n  border-radius: 50%;\n  border-left-color: transparent;\n  border-right-color: transparent;\n  animation: dtb-spinner 1500ms infinite linear;\n  -o-animation: dtb-spinner 1500ms infinite linear;\n  -ms-animation: dtb-spinner 1500ms infinite linear;\n  -webkit-animation: dtb-spinner 1500ms infinite linear;\n  -moz-animation: dtb-spinner 1500ms infinite linear;\n}\n\ndiv.dt-button-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 999;\n}\n\n@media screen and (max-width: 767px) {\n  div.dt-buttons {\n    float: none;\n    width: 100%;\n    text-align: center;\n    margin-bottom: 0.5em;\n  }\n  div.dt-buttons a.btn {\n    float: none;\n  }\n}\n:root[data-bs-theme=dark] div.dropdown-menu.dt-button-collection.fixed {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n  border-radius: 8px;\n}\n\n\ntable.DTCR_clonedTable.dataTable {\n  position: absolute !important;\n  background-color: rgba(255, 255, 255, 0.7);\n  z-index: 202;\n  border-radius: 4px;\n}\n\ndiv.DTCR_pointer {\n  width: 1px;\n  background-color: #0d6efd;\n  z-index: 201;\n}\n\nhtml.dark table.DTCR_clonedTable.dataTable {\n  background-color: rgba(33, 33, 33, 0.9);\n}\nhtml.dark div.DTCR_pointer {\n  background-color: rgb(13, 110, 253);\n}\n\n\ndiv.dt-datetime {\n  position: absolute;\n  background-color: white;\n  z-index: 2050;\n  border: 1px solid #ccc;\n  box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.5);\n  padding: 6px 20px;\n  width: 275px;\n  border-radius: 5px;\n}\ndiv.dt-datetime.inline {\n  position: relative;\n  box-shadow: none;\n}\ndiv.dt-datetime div.dt-datetime-title {\n  text-align: center;\n  padding: 5px 0px 3px;\n}\ndiv.dt-datetime div.dt-datetime-buttons {\n  text-align: center;\n}\ndiv.dt-datetime div.dt-datetime-buttons a {\n  display: inline-block;\n  padding: 0 0.5em 0.5em 0.5em;\n  margin: 0;\n  font-size: 0.9em;\n}\ndiv.dt-datetime div.dt-datetime-buttons a:hover {\n  text-decoration: underline;\n}\ndiv.dt-datetime table {\n  border-spacing: 0;\n  margin: 12px 0;\n  width: 100%;\n}\ndiv.dt-datetime table.dt-datetime-table-nospace {\n  margin-top: -12px;\n}\ndiv.dt-datetime table th {\n  font-size: 0.8em;\n  color: #777;\n  font-weight: normal;\n  width: 14.285714286%;\n  padding: 0 0 4px 0;\n  text-align: center;\n}\ndiv.dt-datetime table td {\n  font-size: 0.9em;\n  color: #444;\n  padding: 0;\n}\ndiv.dt-datetime table td.selectable {\n  text-align: center;\n  background: #f5f5f5;\n}\ndiv.dt-datetime table td.selectable.disabled {\n  color: #aaa;\n  background: white;\n}\ndiv.dt-datetime table td.selectable.disabled button:hover {\n  color: #aaa;\n  background: white;\n}\ndiv.dt-datetime table td.selectable.now {\n  background-color: #ddd;\n}\ndiv.dt-datetime table td.selectable.now button {\n  font-weight: bold;\n}\ndiv.dt-datetime table td.selectable.selected button {\n  background: #4E6CA3;\n  color: white;\n  border-radius: 2px;\n}\ndiv.dt-datetime table td.selectable button:hover {\n  background: #ff8000;\n  color: white;\n  border-radius: 2px;\n}\ndiv.dt-datetime table td.dt-datetime-week {\n  font-size: 0.7em;\n}\ndiv.dt-datetime table button {\n  width: 100%;\n  box-sizing: border-box;\n  border: none;\n  background: transparent;\n  font-size: inherit;\n  color: inherit;\n  text-align: center;\n  padding: 4px 0;\n  cursor: pointer;\n  margin: 0;\n}\ndiv.dt-datetime table button span {\n  display: inline-block;\n  min-width: 14px;\n  text-align: right;\n}\ndiv.dt-datetime table.weekNumber th {\n  width: 12.5%;\n}\ndiv.dt-datetime div.dt-datetime-calendar table {\n  margin-top: 0;\n}\ndiv.dt-datetime div.dt-datetime-label {\n  position: relative;\n  display: inline-block;\n  height: 30px;\n  padding: 5px 6px;\n  border: 1px solid transparent;\n  box-sizing: border-box;\n  cursor: pointer;\n}\ndiv.dt-datetime div.dt-datetime-label:hover {\n  border: 1px solid #ddd;\n  border-radius: 2px;\n  background-color: #f5f5f5;\n}\ndiv.dt-datetime div.dt-datetime-label select {\n  position: absolute;\n  top: 6px;\n  left: 0;\n  cursor: pointer;\n  opacity: 0;\n}\ndiv.dt-datetime.horizontal {\n  width: 550px;\n}\ndiv.dt-datetime.horizontal div.dt-datetime-date,\ndiv.dt-datetime.horizontal div.dt-datetime-time {\n  width: 48%;\n}\ndiv.dt-datetime.horizontal div.dt-datetime-time {\n  margin-left: 4%;\n}\ndiv.dt-datetime div.dt-datetime-date {\n  position: relative;\n  float: left;\n  width: 100%;\n}\ndiv.dt-datetime div.dt-datetime-time {\n  position: relative;\n  float: left;\n  width: 100%;\n  text-align: center;\n}\ndiv.dt-datetime div.dt-datetime-time > span {\n  vertical-align: middle;\n}\ndiv.dt-datetime div.dt-datetime-time th {\n  text-align: left;\n}\ndiv.dt-datetime div.dt-datetime-time div.dt-datetime-timeblock {\n  display: inline-block;\n  vertical-align: middle;\n}\ndiv.dt-datetime div.dt-datetime-iconLeft,\ndiv.dt-datetime div.dt-datetime-iconRight {\n  width: 30px;\n  height: 30px;\n  background-position: center;\n  background-repeat: no-repeat;\n  opacity: 0.3;\n  overflow: hidden;\n  box-sizing: border-box;\n  border: 1px solid transparent;\n}\ndiv.dt-datetime div.dt-datetime-iconLeft:hover,\ndiv.dt-datetime div.dt-datetime-iconRight:hover {\n  border: 1px solid #ccc;\n  border-radius: 2px;\n  background-color: #f0f0f0;\n  opacity: 0.6;\n}\ndiv.dt-datetime div.dt-datetime-iconLeft button,\ndiv.dt-datetime div.dt-datetime-iconRight button {\n  border: none;\n  background: transparent;\n  text-indent: 30px;\n  height: 100%;\n  width: 100%;\n  cursor: pointer;\n}\ndiv.dt-datetime div.dt-datetime-iconLeft {\n  position: absolute;\n  top: 5px;\n  left: 5px;\n}\ndiv.dt-datetime div.dt-datetime-iconLeft button {\n  position: relative;\n  z-index: 1;\n}\ndiv.dt-datetime div.dt-datetime-iconLeft:after {\n  position: absolute;\n  top: 7px;\n  left: 10px;\n  display: block;\n  content: \"\";\n  border-top: 7px solid transparent;\n  border-right: 7px solid black;\n  border-bottom: 7px solid transparent;\n}\ndiv.dt-datetime div.dt-datetime-iconRight {\n  position: absolute;\n  top: 5px;\n  right: 5px;\n}\ndiv.dt-datetime div.dt-datetime-iconRight button {\n  position: relative;\n  z-index: 1;\n}\ndiv.dt-datetime div.dt-datetime-iconRight:after {\n  position: absolute;\n  top: 7px;\n  left: 12px;\n  display: block;\n  content: \"\";\n  border-top: 7px solid transparent;\n  border-left: 7px solid black;\n  border-bottom: 7px solid transparent;\n}\n\ndiv.dt-datetime-error {\n  clear: both;\n  padding: 0 1em;\n  max-width: 240px;\n  font-size: 11px;\n  line-height: 1.25em;\n  text-align: center;\n  color: #b11f1f;\n}\n\nhtml.dark input.dt-datetime {\n  color-scheme: dark;\n}\nhtml.dark div.dt-datetime {\n  border: 1px solid #595b5e;\n  background-color: #212529;\n  box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.8);\n}\nhtml.dark div.dt-datetime table th {\n  color: #ccc;\n}\nhtml.dark div.dt-datetime table td {\n  color: #eee;\n}\nhtml.dark div.dt-datetime table td.selectable {\n  background: #373c41;\n}\nhtml.dark div.dt-datetime table td.selectable.disabled {\n  color: #aaa;\n  background: #171b1f;\n}\nhtml.dark div.dt-datetime table td.selectable.disabled button:hover {\n  color: #aaa;\n  background: #171b1f;\n}\nhtml.dark div.dt-datetime table td.selectable.now {\n  background: #4b5055;\n}\nhtml.dark div.dt-datetime table td.selectable.selected button {\n  background: #6ea8fe;\n  color: black;\n}\nhtml.dark div.dt-datetime table td.selectable button:hover {\n  background: #ff8000;\n  color: black;\n}\nhtml.dark div.dt-datetime div.dt-datetime-label:hover {\n  border: 1px solid transparent;\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml.dark div.dt-datetime div.dt-datetime-iconLeft:hover,\nhtml.dark div.dt-datetime div.dt-datetime-iconRight:hover,\nhtml.dark div.dt-datetime div.dt-datetime-iconUp:hover,\nhtml.dark div.dt-datetime div.dt-datetime-iconDown:hover {\n  border: 1px solid transparent;\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml.dark div.dt-datetime div.dt-datetime-iconLeft:after {\n  border-right-color: white;\n}\nhtml.dark div.dt-datetime div.dt-datetime-iconRight:after {\n  border-left-color: white;\n}\nhtml.dark div.dt-datetime select {\n  color-scheme: dark;\n}\nhtml.dark div.dt-datetime-error {\n  color: #b11f1f;\n}\n\ntable.dataTable thead tr > .dtfc-fixed-left,\ntable.dataTable thead tr > .dtfc-fixed-right,\ntable.dataTable tfoot tr > .dtfc-fixed-left,\ntable.dataTable tfoot tr > .dtfc-fixed-right {\n  top: 0;\n  bottom: 0;\n  z-index: 3;\n  background-color: white;\n}\ntable.dataTable tbody tr > .dtfc-fixed-left,\ntable.dataTable tbody tr > .dtfc-fixed-right {\n  z-index: 1;\n  background-color: white;\n}\n\ndiv.dtfc-left-top-blocker,\ndiv.dtfc-right-top-blocker {\n  background-color: white;\n}\n\nhtml.dark table.dataTable thead tr > .dtfc-fixed-left,\nhtml.dark table.dataTable thead tr > .dtfc-fixed-right,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tfoot tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-left,\nhtml.dark table.dataTable tbody tr > .dtfc-fixed-right {\n  background-color: var(--dt-html-background);\n}\nhtml.dark div.dtfc-left-top-blocker,\nhtml.dark div.dtfc-right-top-blocker {\n  background-color: var(--dt-html-background);\n}\n\ndiv.dtfc-right-top-blocker,\ndiv.dtfc-left-top-blocker {\n  margin-top: 6px;\n  border-bottom: 0px solid #ddd !important;\n}\n\ntable.dataTable.table-bordered.dtfc-has-left {\n  border-left: none;\n}\n\ndiv.dataTables_scroll.dtfc-has-left table.table-bordered {\n  border-left: none;\n}\n\ndiv.dataTables_scrollBody {\n  border-left: 1px solid #ddd !important;\n}\n\ndiv.dataTables_scrollFootInner table.table-bordered tr th:first-child,\ndiv.dataTables_scrollHeadInner table.table-bordered tr th:first-child {\n  border-left: 1px solid #ddd !important;\n}\n\nhtml[data-bs-theme=dark] table.dataTable thead tr > .dtfc-fixed-left,\nhtml[data-bs-theme=dark] table.dataTable thead tr > .dtfc-fixed-right,\nhtml[data-bs-theme=dark] table.dataTable tfoot tr > .dtfc-fixed-left,\nhtml[data-bs-theme=dark] table.dataTable tfoot tr > .dtfc-fixed-right {\n  background-color: var(--bs-body-bg);\n}\nhtml[data-bs-theme=dark] table.dataTable tbody tr > .dtfc-fixed-left,\nhtml[data-bs-theme=dark] table.dataTable tbody tr > .dtfc-fixed-right {\n  background-color: var(--bs-body-bg);\n}\nhtml[data-bs-theme=dark] div.dtfc-left-top-blocker,\nhtml[data-bs-theme=dark] div.dtfc-right-top-blocker {\n  background-color: var(--bs-body-bg);\n}\nhtml[data-bs-theme=dark] div.dataTables_scrollBody {\n  border-left-color: var(--bs-border-color) !important;\n}\nhtml[data-bs-theme=dark] div.dataTables_scrollFootInner table.table-bordered tr th:first-child,\nhtml[data-bs-theme=dark] div.dataTables_scrollHeadInner table.table-bordered tr th:first-child {\n  border-left-color: var(--bs-border-color) !important;\n}\n\n\ntable.dataTable.fixedHeader-floating,\ntable.dataTable.fixedHeader-locked {\n  background-color: white;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\ntable.dataTable.fixedHeader-locked {\n  position: absolute !important;\n}\n\n@media print {\n  table.fixedHeader-floating {\n    display: none;\n  }\n}\nhtml[data-bs-theme=dark] table.dataTable.fixedHeader-floating,\nhtml[data-bs-theme=dark] table.dataTable.fixedHeader-locked {\n  background-color: var(--bs-body-bg);\n}\n\n\ntable.dataTable tbody th.focus,\ntable.dataTable tbody td.focus {\n  outline: 2px solid #0d6efd;\n  outline-offset: -2px;\n}\ntable.dataTable tbody tr.selected th.focus,\ntable.dataTable tbody tr.selected td.focus {\n  outline-color: #0143a3;\n}\n\ndiv.dtk-focus-alt table.dataTable tbody th.focus,\ndiv.dtk-focus-alt table.dataTable tbody td.focus {\n  outline: 2px solid #ff8b33;\n  outline-offset: -2px;\n}\n\nhtml.dark table.dataTable tbody th.focus,\nhtml.dark table.dataTable tbody td.focus {\n  outline-color: rgb(13, 110, 253);\n}\nhtml.dark table.dataTable tbody tr.selected th.focus,\nhtml.dark table.dataTable tbody tr.selected td.focus {\n  outline-color: #0143a3;\n}\nhtml.dark div.dtk-focus-alt table.dataTable tbody th.focus,\nhtml.dark div.dtk-focus-alt table.dataTable tbody td.focus {\n  outline-color: #ff8b33;\n}\n\n\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {\n  cursor: default !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {\n  display: none !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control:before {\n  margin-right: 0.5em;\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {\n  content: \"▼\";\n}\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {\n  padding-left: 0.333em;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > td.control,\ntable.dataTable.dtr-column > tbody > tr > th.control {\n  cursor: pointer;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > td.control:before,\ntable.dataTable.dtr-column > tbody > tr > th.control:before {\n  display: inline-block;\n  color: rgba(0, 0, 0, 0.5);\n  content: \"►\";\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > td.control.arrow-right::before,\ntable.dataTable.dtr-column > tbody > tr > th.control.arrow-right::before {\n  content: \"◄\";\n}\ntable.dataTable.dtr-column > tbody > tr.parent td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent td.control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.control:before {\n  content: \"▼\";\n}\ntable.dataTable > tbody > tr.child {\n  padding: 0.5em 1em;\n}\ntable.dataTable > tbody > tr.child:hover {\n  background: transparent !important;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details {\n  display: inline-block;\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom: 1px solid #efefef;\n  padding: 0.5em 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:first-child {\n  padding-top: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:last-child {\n  padding-bottom: 0;\n  border-bottom: none;\n}\ntable.dataTable > tbody > tr.child span.dtr-title {\n  display: inline-block;\n  min-width: 75px;\n  font-weight: bold;\n}\n\ndiv.dtr-modal {\n  position: fixed;\n  box-sizing: border-box;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  z-index: 100;\n  padding: 10em 1em;\n}\ndiv.dtr-modal div.dtr-modal-display {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  width: 50%;\n  height: fit-content;\n  max-height: 75%;\n  overflow: auto;\n  margin: auto;\n  z-index: 102;\n  overflow: auto;\n  background-color: #f5f5f7;\n  border: 1px solid black;\n  border-radius: 0.5em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n}\ndiv.dtr-modal div.dtr-modal-content {\n  position: relative;\n  padding: 2.5em;\n}\ndiv.dtr-modal div.dtr-modal-content h2 {\n  margin-top: 0;\n}\ndiv.dtr-modal div.dtr-modal-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dtr-modal div.dtr-modal-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 101;\n  background: rgba(0, 0, 0, 0.6);\n}\n\n@media screen and (max-width: 767px) {\n  div.dtr-modal div.dtr-modal-display {\n    width: 95%;\n  }\n}\nhtml.dark table.dataTable > tbody > tr > td.dtr-control:before {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\nhtml.dark table.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom-color: rgb(64, 67, 70);\n}\nhtml.dark div.dtr-modal div.dtr-modal-display {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\n\ndiv.dtr-bs-modal table.table tr:first-child td {\n  border-top: none;\n}\n\ntable.dataTable.table-bordered th.dtr-control.dtr-hidden + *,\ntable.dataTable.table-bordered td.dtr-control.dtr-hidden + * {\n  border-left-width: 1px;\n}\n\n\ntable.dataTable tr.dtrg-group th {\n  background-color: rgba(0, 0, 0, 0.1);\n  text-align: left;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-0 th {\n  font-weight: bold;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-1 th,\ntable.dataTable tr.dtrg-group.dtrg-level-2 th,\ntable.dataTable tr.dtrg-group.dtrg-level-3 th,\ntable.dataTable tr.dtrg-group.dtrg-level-4 th,\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.05);\n  padding-top: 0.25em;\n  padding-bottom: 0.25em;\n  padding-left: 2em;\n  font-size: 0.9em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-2 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 2.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-3 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-4 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 3.5em;\n}\n\ntable.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(0, 0, 0, 0.01);\n  padding-left: 4em;\n}\n\nhtml.dark table.dataTable tr.dtrg-group th {\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-1 th {\n  background-color: rgba(255, 255, 255, 0.05);\n}\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-2 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-3 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-4 th,\nhtml.dark table.dataTable tr.dtrg-group.dtrg-level-5 th {\n  background-color: rgba(255, 255, 255, 0.01);\n}\n\ntable.dataTable.table-striped tr.dtrg-level-0 {\n  background-color: rgba(0, 0, 0, 0.1);\n}\ntable.dataTable.table-striped tr.dtrg-level-1 {\n  background-color: rgba(0, 0, 0, 0.05);\n}\ntable.dataTable.table-striped tr.dtrg-level-2,\ntable.dataTable.table-striped tr.dtrg-level-3,\ntable.dataTable.table-striped tr.dtrg-level-4,\ntable.dataTable.table-striped tr.dtrg-level-5 {\n  background-color: rgba(0, 0, 0, 0.01);\n}\ntable.dataTable.table-striped tr.dtrg-level-1 tr.dtrg-level-2 th,\ntable.dataTable.table-striped tr.dtrg-level-3 th,\ntable.dataTable.table-striped tr.dtrg-level-4 th,\ntable.dataTable.table-striped tr.dtrg-level-5 th {\n  background-color: transparent;\n}\n\n\ndiv.dt-rowReorder-float-parent {\n  table-layout: fixed;\n  outline: 2px solid #0d6efd;\n  z-index: 2001;\n  position: absolute !important;\n  overflow: hidden;\n  border-radius: 3px;\n}\ndiv.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  opacity: 0.9;\n  background-color: white;\n  margin: 0 !important;\n}\n\ndiv.dt-rowReorder-float-parent.drop-not-allowed {\n  cursor: not-allowed;\n}\n\ntr.dt-rowReorder-moving {\n  outline: 2px solid #888;\n  outline-offset: -2px;\n}\n\nbody.dt-rowReorder-noOverflow {\n  overflow-x: hidden;\n}\n\ntable.dataTable td.reorder {\n  text-align: center;\n  cursor: move;\n}\n\nhtml.dark div.dt-rowReorder-float-parent {\n  outline-color: rgb(110, 168, 254);\n}\nhtml.dark div.dt-rowReorder-float-parent table.dt-rowReorder-float {\n  background-color: var(--dt-html-background);\n}\nhtml.dark tr.dt-rowReorder-moving {\n  outline-color: #aaa;\n}\n\nhtml[data-bs-theme=dark] div.dt-rowReorder-float-parent {\n  outline-color: rgb(13, 110, 253);\n}\n\n\ndiv.dts {\n  display: block !important;\n}\ndiv.dts tbody th,\ndiv.dts tbody td {\n  white-space: nowrap;\n}\ndiv.dts div.dts_loading {\n  z-index: 1;\n}\ndiv.dts div.dts_label {\n  position: absolute;\n  right: 20px;\n  background: rgba(0, 0, 0, 0.8);\n  color: white;\n  box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);\n  text-align: right;\n  border-radius: 3px;\n  padding: 0.4em;\n  z-index: 2;\n  display: none;\n}\ndiv.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(0, 0, 0, 0.025), rgba(0, 0, 0, 0.025) 10px, rgba(0, 0, 0, 0) 10px, rgba(0, 0, 0, 0) 20px);\n}\ndiv.dts div.dataTables_scrollBody table {\n  background-color: white;\n  z-index: 2;\n}\ndiv.dts div.dt-length,\ndiv.dts div.dt-paging,\ndiv.dts div.dataTables_paginate,\ndiv.dts div.dataTables_length {\n  display: none;\n}\n\nhtml.dark div.dts div.dts_label {\n  background: rgba(255, 255, 255, 0.8);\n  color: black;\n}\nhtml.dark div.dts div.dataTables_scrollBody {\n  background: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.025), rgba(255, 255, 255, 0.025) 10px, rgba(255, 255, 255, 0) 10px, rgba(255, 255, 255, 0) 20px);\n}\nhtml.dark div.dts div.dataTables_scrollBody table {\n  background-color: var(--dt-html-background);\n  z-index: 2;\n}\n\ndiv.DTS div.dataTables_scrollBody table {\n  background-color: white;\n}\n\nhtml[data-bs-theme=dark] div.DTS div.dataTables_scrollBody table {\n  background-color: var(--bs-body-bg);\n}\n\n\ndiv.dt-button-collection {\n  overflow: visible !important;\n  z-index: 2002 !important;\n}\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  padding-left: 1em !important;\n  padding-right: 1em !important;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsb-titleRow {\n  padding-right: 40px;\n}\n\n.dtsb-greyscale {\n  border: 1px solid #cecece !important;\n}\n\ndiv.dtsb-logicContainer .dtsb-greyscale {\n  border: none !important;\n}\n\ndiv.dtsb-searchBuilder {\n  justify-content: space-evenly;\n  cursor: default;\n  margin-bottom: 1em;\n  text-align: left;\n}\ndiv.dtsb-searchBuilder button.dtsb-button,\ndiv.dtsb-searchBuilder select {\n  font-size: 1em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  justify-content: space-evenly;\n  margin-bottom: 0.5em;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  display: inline-block;\n  padding-top: 14px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title:empty {\n  display: inline;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow button.dtsb-clearAll {\n  float: right;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-vertical .dtsb-value, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-data, div.dtsb-searchBuilder div.dtsb-vertical .dtsb-condition {\n  display: block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group {\n  position: relative;\n  clear: both;\n  margin-bottom: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-search {\n  float: right;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-clearGroup {\n  margin: 2px;\n  text-align: center;\n  padding: 0;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n  position: absolute;\n  margin-top: 0.8em;\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n  margin-bottom: 0.8em;\n  display: flex;\n  justify-content: start;\n  flex-flow: row wrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n  padding: 0.4em;\n  margin-right: 0.8em;\n  min-width: 5em;\n  max-width: 20em;\n  color: inherit;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown option.dtsb-notItalic,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input option.dtsb-notItalic {\n  font-style: normal;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-italic {\n  font-style: italic;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n  flex: 1;\n  white-space: nowrap;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont span.dtsp-joiner {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input.dtsb-value {\n  width: 33%;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont select,\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont input {\n  height: 100%;\n  box-sizing: border-box;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n  margin-left: auto;\n  display: inline-block;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left {\n  margin-right: 0.8em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-delete:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-right:last-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button.dtsb-left:last-child {\n  margin-right: 0;\n}\n@media screen and (max-width: 550px) {\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria {\n    display: flex;\n    flex-flow: none;\n    flex-direction: column;\n    justify-content: start;\n    padding-right: calc(35px + 0.8em);\n    margin-bottom: 0px;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:first-child), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:nth-child(2)), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:not(:last-child) {\n    padding-top: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:first-child, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:nth-child(2), div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria:last-child {\n    padding-top: 0em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-dropDown,\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-input {\n    max-width: none;\n    width: 100%;\n    margin-bottom: 0.8em;\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-inputCont {\n    margin-right: 0.8em;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer {\n    position: absolute;\n    width: 35px;\n    display: flex;\n    flex-wrap: wrap-reverse;\n    right: 0;\n  }\n  div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria div.dtsb-buttonContainer button {\n    margin-right: 0px !important;\n  }\n}\n\ndiv.dtsb-searchBuilder div.dtsb-titleRow {\n  height: 40px;\n}\ndiv.dtsb-searchBuilder div.dtsb-titleRow div.dtsb-title {\n  padding-top: 10px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group button.dtsb-clearGroup {\n  margin-right: 8px;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria .form-select {\n  width: auto;\n  display: inline-block;\n  padding-right: 30px !important;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-condition {\n  border-color: #28a745;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-data {\n  border-color: #dc3545;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria select.dtsb-value, div.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria input.dtsb-value {\n  border-color: #007bff;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-criteria .form-control {\n  display: inline-block;\n  font-size: 1em;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer {\n  border-radius: 4px;\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n  margin-top: 10px;\n  overflow: hidden;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-logic {\n  border: none;\n  border-radius: 0px;\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: 3em;\n  margin: 0px;\n  padding: 0.375rem 0.7rem;\n}\ndiv.dtsb-searchBuilder div.dtsb-group div.dtsb-logicContainer button.dtsb-clearGroup {\n  border: none;\n  border-radius: 0px;\n  width: 2em;\n  margin: 0px;\n}\n\ndiv.dt-button-collection div.dtsb-searchBuilder {\n  padding-left: 10px;\n  padding-right: 10px;\n}\n\n\ndiv.dtsp-topRow {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  border: 2px solid rgba(0, 0, 0, 0);\n  border-radius: 3px;\n  justify-content: space-around;\n  align-content: flex-start;\n  align-items: flex-start;\n  min-height: 37px;\n}\ndiv.dtsp-topRow input.dtsp-search {\n  text-overflow: ellipsis;\n  min-width: 50px;\n  flex-basis: 90px;\n  max-width: none;\n}\ndiv.dtsp-topRow input.dtsp-search::placeholder {\n  color: inherit;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: nowrap;\n  flex: 1 1 auto;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont {\n  position: relative;\n  width: 100%;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 div.dtsp-searchCont input.dtsp-disabledButton {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  background-color: transparent;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 input {\n  padding-right: 2em;\n  width: 100% !important;\n  box-sizing: border-box;\n  font-size: 1em;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n}\ndiv.dtsp-topRow div.dtsp-subRow1 button.dtsp-searchIcon span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAABbmlDQ1BpY2MAACiRdZE7SwNBFIU/EyWikRRaiFhsoWKhEBREO42FTZAQFYza7G5eQhKX3QQJtoKNhWAh2vgq/AfaCrYKgqAIIhb+Al+NhPVOEkiQZJbZ+3FmzmXmDHjCGTPrtAYhm8vb0bmQthxb0Xzv+PHRxRSabjrWTCQSpun4eaRF1YdR1av5voajM55wTGhpF54wLTsvPC0c3sxbineFe8y0Hhc+ER6x5YDCt0o3KvymOFXhL8X2YnQWPKqnlqpjo47NtJ0VHhYeyGYKZvU86ib+RG5pQWqfzH4coswRQsOgwDoZ8oxKzUlmjX3Bsm+eDfGY8rcoYosjRVq8I6IWpGtCalL0hHwZiir3/3k6yfGxSnd/CNpeXfdzEHz7UNpz3d9T1y2dgfcFrnM1/4bkNPkt+l5NGziGwDZc3tQ04wCudqD32dJtvSx5ZXqSSfi4gK4YdN9Dx2olq+o650+wuCVPdAeHRzAk+wNrfw8JaBFXEnV+AAAACXBIWXMAAA9hAAAPYQGoP6dpAAABMUlEQVQoU6XRr0vDQRjH8akoM4iIjqGoOIZ5oIjB5XWxajaYDGLSIhhNYjcPRDSJwbQNw+L+BNGgYYo/5pT5/shz8vDlBgMPXux7z3N3z+25VOofYyCyd4ZYCavI4gXPsRp9LqiDdrEMH+8wv8Vh8gBfWclFPOEUN3hAHjlMoRa7wTzBS5xgKLFglPkZLjDic6HyDsEMNvGR2Nxifoci3tEI+X770JU0XmPXIlax+LTPh83fFox1X6kxyzdjm9UcdXi9S+Vti6svfyNULhNR9TVsYNhW6Ff9KKCNR7/Zv6eeaQ+6+qcdpu9BqGlp1HFgud+FYdzzUcUExu0Q/cdzHGEFetIlXKPjK/sbqYoOftMiS+j9jzEJPd1Wt+5+kdR/9EM9ucIC5jCbyPc01Q32kfsBppYz3hYFcCwAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 12px;\n}\ndiv.dtsp-topRow div.dtsp-subRow2 {\n  white-space: nowrap;\n  flex: 0 0 auto;\n}\ndiv.dtsp-topRow button > span {\n  display: inline-block;\n  height: 100%;\n  width: 100%;\n}\ndiv.dtsp-topRow button.dtsp-nameButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAK2SURBVFgJ7ZY9j41BFICvryCExrJBQ6HyEYVEIREaUZDQIRoR2ViJKCioxV+gkVXYTVZEQiEUhG2EQnxUCh0FKolY4ut5XnM2cyfva3Pt5m7EPcmzZ2bemTNnzjkzd1utnvQi0IvAfxiBy5z5FoxO89kPY+8mbMjtzs47RXs5/WVpbAG6bWExt5PuIibvhVkwmC+ck3eK9ln6/fAddFojYzBVuYSBpcnIEvRaqOw2RcaN18FPuJH0JvRUxbT3wWf4ltiKPgfVidWlbGZgPozDFfgAC+EA/K2EI4cwcAJ+gPaeQ+VQU2SOMMGcPgPl/m/V2p50rrbRsRgt9Iv5h6xtpP22Bz7Ce1C+gFFxfKzOmShcU+Qmyh2w3w8rIJfddHTck66EukL/xPhj+JM8rHNmFys0Pg4v0up3aFNlwR9NYyodd3OL/C64zpsymcTFcf6ElM4YzjAWKYrJkaq8kE/yUYNP4BoYvS1QRo+hNtF5xfkTUjoTheukSFFMjlTFm6PjceOca/SMpKfeCR1L6Uzk/y2WIkVhNFJlJAZhP+hYns7b9D3IPuhY5mYrIv8OrQJvR5NYyNaW4jsU8pSGNySiVx4o5tXq3JkoXE/mg5R/M8dGJCJpKhaDcjBRdbI/Rm8g69c122om33BHmj2CHoV5qa9jUXBraJ+G1fAVjIBO1klc87ro1K4JZ/K35SWW3TwcyDd6TecqnAEd8cGq2+w84xvBm1n3vS0izKkkwh5XNC/GmFPqqAtPF89AOScKuemaNzoTV1SD5dtSbmLf1/RV+tC0WTgcj6R7HEtrVGWaqu/lYDZ/2pvxQ/kIyw/gFByHC9AHw910hv1aUUumyd8yy0QfhmEkfiNod0Xusct68J1qc8Tdux0Z97Q+hsDb+AYGYEbF/4Guw2Q/qDPqZG/zXgT+3Qj8AtKnfWhFwmuAAAAAAElFTkSuQmCC\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 23px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-countButton span {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABcGlDQ1BpY2MAACiRdZHNSwJBGMYftTDS8FCHkA57sOigIAXRMQzyYh3UIKvL7rirwe66zK6IdA26dBA6RF36OvQf1DXoWhAERRAR9B/0dQnZ3nEFJXSG2ffHs/O8zDwD+DM6M+yBJGCYDs+mU9JaYV0KviNMM4QoEjKzreXcUh59x88jfKI+JESv/vt6jlBRtRngGyKeYxZ3iBeIMzXHErxHPMbKcpH4hDjO6YDEt0JXPH4TXPL4SzDPZxcBv+gplbpY6WJW5gbxNHHM0KusfR5xk7BqruaoRmlNwEYWaaQgQUEVW9DhIEHVpMx6+5It3woq5GH0tVAHJ0cJZfLGSa1SV5WqRrpKU0dd5P4/T1ubnfG6h1PA4Kvrfk4CwX2g2XDd31PXbZ4BgRfg2uz4K5TT/DfpjY4WOwYiO8DlTUdTDoCrXWD82ZK53JICtPyaBnxcACMFYPQeGN7wsmr/x/kTkN+mJ7oDDo+AKdof2fwDCBRoDkL8UccAAAAJcEhZcwAAD2EAAA9hAag/p2kAAAG5SURBVEgN3VU9LwVBFF0fiYhofUSlEQkKhU7z/oBCQkIiGr9BgUbhVzy9BAnhFyjV/AYFiU5ICM7ZN+c5Zud5dm3lJmfmzrkz9+7cu3c3y/6jjOBSF8CxXS7FmTkbwqIJjDpJvTcmsJ4K3KPZUpyZsx0sxoB9J6mnAkyC7wGuuCFIipNtEcpcWExgXpOBc78vgj6N+QO4NVsjwdFM59tUIDxDrHMBOeIQ34C5ZDregXuAQm4YcI68nN9B3wr2PcwPAIPkN2EqtJH6b+QZm1ajjTx7BqwAr26Lb+C2Kvpbt0Mb2HAJ7NrGFGfmXO3DeA4UshDfQAVmH0gaUFg852TTTDvlxwBlCtxy9zXyBhQFaq0wMmIdRebrfgosA3zb2hKnqG0oqchp4QbuR8X0TjzABhbdOT8jnQ/atcgqpnfwOA7yqZyTU587ZkIGdesLTt2EkynOnbreMUUKMI/dA4B/QVOcO13CQh+5wWCgDwo/75u59odB/wjmfhbgvACcAOyZPHihMWAoIwxyCLgf1oxfgjzVbgBXSTzIN+f0pg6s5DkcesLMRpsBrgE2XO3CN64JFP7JtUeKHX4CKtRRXFZ+7dEAAAAASUVORK5CYII=\") !important;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 18px;\n  vertical-align: bottom;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton span.dtsp-caret {\n  position: relative;\n  top: 9px;\n  display: inline-block;\n}\ndiv.dtsp-topRow button.dtsp-collapseButton.dtsp-rotated {\n  transform: rotate(180deg);\n}\n\ndiv.dtsp-searchPane table thead th,\ndiv.dtsp-searchPane table thead td {\n  width: 100% !important;\n}\n\ndiv.dt-button-collection {\n  z-index: 2002;\n}\n\ndiv.dt-button-collection.dtb-collection-closeable div.dtsp-titleRow {\n  padding-right: 25px;\n}\n\ndiv.dtsp-columns-1 {\n  max-width: 100%;\n  min-width: 100%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-2 {\n  max-width: 49%;\n  min-width: 49%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-3 {\n  max-width: 32%;\n  min-width: 32%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-4 {\n  max-width: 24%;\n  min-width: 24%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-5 {\n  max-width: 19%;\n  min-width: 19%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-6 {\n  max-width: 16%;\n  min-width: 16%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-7 {\n  max-width: 14%;\n  min-width: 14%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-8 {\n  max-width: 12%;\n  min-width: 12%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-columns-9 {\n  max-width: 10.5%;\n  min-width: 10.5%;\n  margin: 0px !important;\n}\n\ndiv.dtsp-narrow {\n  flex-direction: column !important;\n}\ndiv.dtsp-narrow div.dtsp-subRow1,\ndiv.dtsp-narrow div.dtsp-subRow2 {\n  width: 100%;\n}\ndiv.dtsp-narrow div.dtsp-subRow2 button {\n  margin: 0 !important;\n  width: 25% !important;\n}\n\ndiv.dt-button-collection {\n  float: none;\n}\n\ndiv.dtsp-panesContainer {\n  margin-bottom: 1em;\n}\n\ndiv.dtsp-searchPane div.dataTables_wrapper {\n  width: 100%;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_layout_cell {\n  padding: 0;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollHead {\n  display: none !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody {\n  background: white !important;\n  border-bottom: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody thead {\n  display: none;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table {\n  table-layout: fixed;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > th,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody table tr > td {\n  padding: 5px 10px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody td.dtsp-nameColumn {\n  width: 100% !important;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont {\n  width: 100%;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-content: flex-start;\n  align-items: flex-start;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name,\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  cursor: default;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-name {\n  text-overflow: ellipsis;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: middle;\n  white-space: nowrap;\n  flex-grow: 1;\n  text-align: left;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  display: inline-block;\n  background-color: #cfcfcf;\n  text-align: center;\n  border-radius: 10px;\n  width: auto;\n  min-width: 30px;\n  color: black;\n  font-size: 0.9em;\n  padding: 0 4px;\n}\ndiv.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill:empty {\n  display: none;\n}\n\ndiv.dtsp-panesContainer {\n  clear: both;\n  padding-left: 0;\n  padding-right: 0;\n  text-align: center;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  align-content: flex-start;\n  align-items: stretch;\n  clear: both;\n  text-align: left;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane {\n  flex-grow: 1;\n  flex-shrink: 0;\n  font-size: 0.9em;\n  margin-top: 15px !important;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper {\n  flex: 1;\n  box-sizing: border-box;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPanes div.dtsp-searchPane div.dataTables_wrapper div.dataTables_filter {\n  display: none;\n}\ndiv.dtsp-panesContainer div.dtsp-title {\n  float: left;\n  padding: 10px 0;\n}\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-collapseAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  float: right;\n  padding: 10px;\n}\n\ndiv.dtsp-hidden {\n  display: none !important;\n}\n\ndiv.dtsp-panesContainer button.btn-subtle {\n  background-color: #f8f9fa;\n  border: 1px solid #ced4da;\n}\ndiv.dtsp-panesContainer button.btn-subtle.disabled {\n  opacity: 0.5;\n}\ndiv.dtsp-panesContainer button.btn-subtle:hover {\n  background-color: #cbd3da;\n}\ndiv.dtsp-panesContainer button.dtsp-clearAll,\ndiv.dtsp-panesContainer button.dtsp-showAll {\n  margin-left: 3px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow {\n  margin: 0.5em 0;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow2 {\n  margin-left: 0.5em;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button {\n  width: 35px;\n  line-height: 20px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button.dtsp-searchIcon, div.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button.dtsp-nameButton, div.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button.dtsp-countButton {\n  padding: 0;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow1 button {\n  border-right: none;\n  margin-right: 1px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow div.dtsp-subRow1 input {\n  padding-right: 3em;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow span.dtsp-caret {\n  top: 3px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button.dtsp-rotated {\n  transform: none;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow button.dtsp-rotated span {\n  transform: rotate(180deg);\n  top: -2px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover button.disabled {\n  cursor: pointer !important;\n  pointer-events: none;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dtsp-topRow.dtsp-bordered:hover input.dtsp-paneInputButton {\n  pointer-events: none;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper {\n  border: 2px #f0f0f0 solid;\n  border-radius: 4px;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 2px solid #cfcfcf !important;\n}\ndiv.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper div.dtsp-nameCont span.badge {\n  min-width: 30px;\n  line-height: 1.25em;\n  margin-top: 3.5px;\n}\ndiv.dtsp-panesContainer button.disabled {\n  cursor: not-allowed;\n}\n\ndiv.dt-button-collection div.dtsp-panesContainer {\n  padding-left: 10px !important;\n  padding-right: 10px !important;\n}\n\nhtml[data-bs-theme=dark] div.dtsp-topRow button.dtsp-searchIcon span {\n  filter: invert();\n}\nhtml[data-bs-theme=dark] div.dtsp-topRow button.dtsp-nameButton span {\n  filter: invert();\n}\nhtml[data-bs-theme=dark] div.dtsp-topRow button.dtsp-countButton span {\n  filter: invert();\n}\nhtml[data-bs-theme=dark] div.dtsp-topRow input.dtsp-paneInputButton,\nhtml[data-bs-theme=dark] div.dtsp-topRow button {\n  color: inherit;\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.btn-subtle {\n  background-color: rgb(33, 37, 41);\n  border: var(--bs-border-width) solid var(--bs-border-color);\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.btn-subtle:hover {\n  background-color: rgba(255, 255, 255, 0.1);\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-clearAll,\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-collapseAll,\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-showAll {\n  color: inherit;\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-clearAll:hover,\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-collapseAll:hover,\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-showAll:hover {\n  background-color: rgb(64, 69, 73);\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer button.dtsp-disabledButton {\n  color: rgb(124, 124, 124);\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper {\n  border: 1px solid rgba(255, 255, 255, 0.2);\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper:hover {\n  border: 1px solid rgba(255, 255, 255, 0.3) !important;\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody {\n  background: rgb(47, 52, 56) !important;\n}\nhtml[data-bs-theme=dark] div.dtsp-panesContainer div.dtsp-searchPane div.dataTables_wrapper div.dataTables_scrollBody div.dtsp-nameCont span.dtsp-pill {\n  background-color: rgb(33, 37, 41);\n  color: inherit;\n}\n\n\ntable.dataTable > tbody > tr > .selected {\n  background-color: rgba(13, 110, 253, 0.9);\n  color: white;\n}\ntable.dataTable > tbody > tr > td.select-checkbox,\ntable.dataTable > tbody > tr > th.select-checkbox {\n  position: relative;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,\ntable.dataTable > tbody > tr > th.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:after {\n  display: block;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 12px;\n  height: 12px;\n  box-sizing: border-box;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:before {\n  content: \" \";\n  margin-top: -6px;\n  margin-left: -6px;\n  border: 1px solid black;\n  border-radius: 3px;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:before,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:before {\n  border: 1px solid white;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:after {\n  content: \"✓\";\n  font-size: 20px;\n  margin-top: -12px;\n  margin-left: -6px;\n  text-align: center;\n}\ntable.dataTable.compact > tbody > tr > td.select-checkbox:before,\ntable.dataTable.compact > tbody > tr > th.select-checkbox:before {\n  margin-top: -12px;\n}\ntable.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {\n  margin-top: -16px;\n}\n\ndiv.dataTables_wrapper span.select-info,\ndiv.dataTables_wrapper span.select-item {\n  margin-left: 0.5em;\n}\n\nhtml.dark table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml.dark table.dataTable > tbody > tr > th.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > td.select-checkbox:before,\nhtml[data-bs-theme=dark] table.dataTable > tbody > tr > th.select-checkbox:before {\n  border: 1px solid rgba(255, 255, 255, 0.6);\n}\n\n@media screen and (max-width: 640px) {\n  div.dataTables_wrapper span.select-info,\n  div.dataTables_wrapper span.select-item {\n    margin-left: 0;\n    display: block;\n  }\n}\ntable.dataTable.table-sm tbody td.select-checkbox::before {\n  margin-top: -9px;\n}\n\n\ndiv.dtsr-confirmation,\ndiv.dtsr-creation {\n  position: fixed;\n  top: 20%;\n  left: 50%;\n  width: 500px;\n  margin-left: -250px;\n  background-color: white;\n  border-radius: 0.75em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n  z-index: 2003;\n  box-sizing: border-box;\n  padding: 2em;\n}\ndiv.dtsr-confirmation button,\ndiv.dtsr-creation button {\n  display: inline-block;\n  margin: 1em;\n  padding: 0.5em 1em;\n  border-radius: 0.5em;\n  border: 1px solid rgba(0, 0, 0, 0.175);\n  background-color: #f6f6f6;\n  text-align: left;\n  cursor: pointer;\n}\ndiv.dtsr-confirmation button:hover,\ndiv.dtsr-creation button:hover {\n  background-color: #ebebeb;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row,\ndiv.dtsr-creation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-confirmation-title-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text h2,\ndiv.dtsr-confirmation div.dtsr-confirmation-title-row h2,\ndiv.dtsr-creation div.dtsr-creation-text h2,\ndiv.dtsr-creation div.dtsr-confirmation-title-row h2 {\n  border-bottom: 0px;\n  margin-top: 0px;\n  padding-top: 0px;\n  margin-bottom: 1rem;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: center;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons,\ndiv.dtsr-creation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-confirmation-buttons {\n  text-align: right;\n  margin-top: 1em;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot button,\ndiv.dtsr-confirmation div.dtsr-confirmation-buttons button,\ndiv.dtsr-creation div.dtsr-modal-foot button,\ndiv.dtsr-creation div.dtsr-confirmation-buttons button {\n  margin: 0px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text,\ndiv.dtsr-creation div.dtsr-creation-text {\n  text-align: left;\n  padding: 0px;\n  border: none;\n}\ndiv.dtsr-confirmation div.dtsr-creation-text span,\ndiv.dtsr-creation div.dtsr-creation-text span {\n  font-size: 20px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right {\n  display: inline-block;\n  width: 50%;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-left,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-left {\n  text-align: right;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-right, div.dtsr-confirmation div.dtsr-creation-form div.dtsr-name-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-right,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-name-row {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row {\n  margin: 0.5em 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:first-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:first-child {\n  margin-top: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row:last-child,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row:last-child {\n  margin-bottom: 0;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label {\n  width: 25%;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: 25%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text,\ndiv.dtsr-creation div.dtsr-confirmation-text {\n  text-align: left;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text label.dtsr-name-label,\ndiv.dtsr-creation div.dtsr-confirmation-text label.dtsr-name-label {\n  width: auto;\n  display: inline-block;\n  text-align: right;\n  padding-right: 15px;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-name-input,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-confirmation-text input.dtsr-check-box,\ndiv.dtsr-creation div.dtsr-confirmation-text input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n}\ndiv.dtsr-confirmation div.dtsr-modal-foot,\ndiv.dtsr-creation div.dtsr-modal-foot {\n  text-align: right;\n  padding-top: 10px;\n}\ndiv.dtsr-confirmation span.dtsr-modal-error,\ndiv.dtsr-creation span.dtsr-modal-error {\n  color: red;\n  font-size: 0.9em;\n}\n\ndiv.dtsr-creation {\n  top: 10%;\n}\n\ndiv.dtsr-check-row {\n  padding-top: 0px;\n}\n\ndiv.dtsr-popover-close {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  width: 22px;\n  height: 22px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\n\ndiv.dtsr-background {\n  z-index: 2002;\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.7);\n  background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);\n}\n\ndiv.dt-button-collection h3 {\n  text-align: center;\n  margin-top: 4px;\n  margin-bottom: 8px;\n  font-size: 1.5em;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\ndiv.dt-button-collection span.dtsr-emptyStates {\n  border-radius: 5px;\n  display: inline-block;\n  line-height: 1.6em;\n  white-space: nowrap;\n  text-align: center;\n  vertical-align: middle;\n  width: 100%;\n  padding-bottom: 7px;\n  padding-top: 3px;\n}\n\nhtml.dark div.dtsr-confirmation,\nhtml.dark div.dtsr-creation,\nhtml[data-bs-theme=dark] div.dtsr-confirmation,\nhtml[data-bs-theme=dark] div.dtsr-creation {\n  background-color: rgb(33, 37, 41);\n  border: 1px solid rgba(255, 255, 255, 0.15);\n}\nhtml.dark div.dtsr-confirmation button,\nhtml.dark div.dtsr-creation button,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button,\nhtml[data-bs-theme=dark] div.dtsr-creation button {\n  color: inherit;\n  border: 1px solid rgba(255, 255, 255, 0.175);\n  background-color: rgb(47, 52, 56);\n}\nhtml.dark div.dtsr-confirmation button:hover,\nhtml.dark div.dtsr-creation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-confirmation button:hover,\nhtml[data-bs-theme=dark] div.dtsr-creation button:hover {\n  background-color: rgb(64, 69, 73);\n}\n\nspan.dtsr-check-label {\n  padding-left: 3px;\n}\n\ndiv.dt-button-collection h3 {\n  margin-top: 8px;\n}\ndiv.dt-button-collection div.dropdown-menu {\n  padding-top: 0px;\n  padding-bottom: 4px;\n}\ndiv.dt-button-collection div.dropdown-menu div.dt-btn-split-wrapper {\n  margin-top: 4px;\n  padding-left: 3px;\n  padding-right: 3px;\n}\ndiv.dt-button-collection div.dropdown-menu div.dt-btn-split-wrapper button.btn {\n  width: calc(100% - 30px);\n}\ndiv.dt-button-collection div.dropdown-menu div.dt-btn-split-wrapper button.dt-btn-split-drop {\n  width: 30px;\n}\ndiv.dt-button-collection div.dropdown-menu button.dt-btn-split-drop-button {\n  margin-left: -2px;\n  margin-right: -2px;\n}\n\ndiv.dt-button-split-left div.dropdown-menu {\n  padding-left: 4px;\n  padding-right: 4px;\n}\ndiv.dt-button-split-left div.dropdown-menu button.dt-btn-split-drop-button {\n  color: rgb(255, 255, 255);\n  border-radius: 4px;\n  background-color: rgb(107, 117, 125);\n  margin-top: 4px;\n}\ndiv.dt-button-split-left div.dropdown-menu button.dt-btn-split-drop-button:hover {\n  background-color: rgb(90, 98, 104);\n}\n\ninput.dtsr-input {\n  margin-left: 3px;\n  display: inline-block;\n  width: auto;\n}\n\ndiv.dtsr-creation-form div.dtsr-check-row {\n  height: 25px;\n}\ndiv.dtsr-creation-form div.dtsr-form-row label.dtsr-name-label {\n  width: 33.3%;\n  display: inline-block;\n  text-align: left !important;\n  padding-right: 15px;\n  padding-left: 15px;\n}\ndiv.dtsr-creation-form div.dtsr-form-row input.dtsr-name-input {\n  width: 66.6%;\n  display: inline-block;\n}\ndiv.dtsr-creation-form div.dtsr-form-row input.dtsr-check-box {\n  margin-left: 33.3%;\n  margin-right: 14px;\n  display: inline-block;\n  position: relative;\n  float: none;\n  line-height: normal;\n}\n\ndiv.dtsr-confirmation-text {\n  margin-top: 1.5em;\n}\n\n\n"
  },
  {
    "path": "public/assets/DataTables/datatables.js",
    "content": "/*\n * This combined file was created by the DataTables downloader builder:\n *   https://datatables.net/download\n *\n * To rebuild or modify this file with the latest versions of the included\n * software please visit:\n *   https://datatables.net/download/#bs5/jszip-3.10.1/pdfmake-0.2.7/dt-1.13.8/af-2.6.0/b-2.4.2/b-colvis-2.4.2/b-html5-2.4.2/b-print-2.4.2/cr-1.7.0/date-1.5.1/fc-4.3.0/fh-3.4.0/kt-2.11.0/r-2.5.0/rg-1.4.1/rr-1.4.1/sc-2.3.0/sb-1.6.0/sp-2.2.0/sl-1.7.0/sr-1.3.0\n *\n * Included libraries:\n *   JSZip 3.10.1, pdfmake 0.2.7, DataTables 1.13.8, AutoFill 2.6.0, Buttons 2.4.2, Column visibility 2.4.2, HTML5 export 2.4.2, Print view 2.4.2, ColReorder 1.7.0, DateTime 1.5.1, FixedColumns 4.3.0, FixedHeader 3.4.0, KeyTable 2.11.0, Responsive 2.5.0, RowGroup 1.4.1, RowReorder 1.4.1, Scroller 2.3.0, SearchBuilder 1.6.0, SearchPanes 2.2.0, Select 1.7.0, StateRestore 1.3.0\n */\n\n/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.JSZip = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n\"use strict\";\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\n// private property\nvar _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n\n// public method for encoding\nexports.encode = function(input) {\n    var output = [];\n    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n    var i = 0, len = input.length, remainingBytes = len;\n\n    var isArray = utils.getTypeOf(input) !== \"string\";\n    while (i < input.length) {\n        remainingBytes = len - i;\n\n        if (!isArray) {\n            chr1 = input.charCodeAt(i++);\n            chr2 = i < len ? input.charCodeAt(i++) : 0;\n            chr3 = i < len ? input.charCodeAt(i++) : 0;\n        } else {\n            chr1 = input[i++];\n            chr2 = i < len ? input[i++] : 0;\n            chr3 = i < len ? input[i++] : 0;\n        }\n\n        enc1 = chr1 >> 2;\n        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n        enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64;\n        enc4 = remainingBytes > 2 ? (chr3 & 63) : 64;\n\n        output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));\n\n    }\n\n    return output.join(\"\");\n};\n\n// public method for decoding\nexports.decode = function(input) {\n    var chr1, chr2, chr3;\n    var enc1, enc2, enc3, enc4;\n    var i = 0, resultIndex = 0;\n\n    var dataUrlPrefix = \"data:\";\n\n    if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {\n        // This is a common error: people give a data url\n        // (data:image/png;base64,iVBOR...) with a {base64: true} and\n        // wonders why things don't work.\n        // We can detect that the string input looks like a data url but we\n        // *can't* be sure it is one: removing everything up to the comma would\n        // be too dangerous.\n        throw new Error(\"Invalid base64 input, it looks like a data url.\");\n    }\n\n    input = input.replace(/[^A-Za-z0-9+/=]/g, \"\");\n\n    var totalLength = input.length * 3 / 4;\n    if(input.charAt(input.length - 1) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if(input.charAt(input.length - 2) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if (totalLength % 1 !== 0) {\n        // totalLength is not an integer, the length does not match a valid\n        // base64 content. That can happen if:\n        // - the input is not a base64 content\n        // - the input is *almost* a base64 content, with a extra chars at the\n        //   beginning or at the end\n        // - the input uses a base64 variant (base64url for example)\n        throw new Error(\"Invalid base64 input, bad content length.\");\n    }\n    var output;\n    if (support.uint8array) {\n        output = new Uint8Array(totalLength|0);\n    } else {\n        output = new Array(totalLength|0);\n    }\n\n    while (i < input.length) {\n\n        enc1 = _keyStr.indexOf(input.charAt(i++));\n        enc2 = _keyStr.indexOf(input.charAt(i++));\n        enc3 = _keyStr.indexOf(input.charAt(i++));\n        enc4 = _keyStr.indexOf(input.charAt(i++));\n\n        chr1 = (enc1 << 2) | (enc2 >> 4);\n        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n        chr3 = ((enc3 & 3) << 6) | enc4;\n\n        output[resultIndex++] = chr1;\n\n        if (enc3 !== 64) {\n            output[resultIndex++] = chr2;\n        }\n        if (enc4 !== 64) {\n            output[resultIndex++] = chr3;\n        }\n\n    }\n\n    return output;\n};\n\n},{\"./support\":30,\"./utils\":32}],2:[function(require,module,exports){\n\"use strict\";\n\nvar external = require(\"./external\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar DataLengthProbe = require(\"./stream/DataLengthProbe\");\n\n/**\n * Represent a compressed object, with everything needed to decompress it.\n * @constructor\n * @param {number} compressedSize the size of the data compressed.\n * @param {number} uncompressedSize the size of the data after decompression.\n * @param {number} crc32 the crc32 of the decompressed file.\n * @param {object} compression the type of compression, see lib/compressions.js.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data.\n */\nfunction CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) {\n    this.compressedSize = compressedSize;\n    this.uncompressedSize = uncompressedSize;\n    this.crc32 = crc32;\n    this.compression = compression;\n    this.compressedContent = data;\n}\n\nCompressedObject.prototype = {\n    /**\n     * Create a worker to get the uncompressed content.\n     * @return {GenericWorker} the worker.\n     */\n    getContentWorker: function () {\n        var worker = new DataWorker(external.Promise.resolve(this.compressedContent))\n            .pipe(this.compression.uncompressWorker())\n            .pipe(new DataLengthProbe(\"data_length\"));\n\n        var that = this;\n        worker.on(\"end\", function () {\n            if (this.streamInfo[\"data_length\"] !== that.uncompressedSize) {\n                throw new Error(\"Bug : uncompressed data size mismatch\");\n            }\n        });\n        return worker;\n    },\n    /**\n     * Create a worker to get the compressed content.\n     * @return {GenericWorker} the worker.\n     */\n    getCompressedWorker: function () {\n        return new DataWorker(external.Promise.resolve(this.compressedContent))\n            .withStreamInfo(\"compressedSize\", this.compressedSize)\n            .withStreamInfo(\"uncompressedSize\", this.uncompressedSize)\n            .withStreamInfo(\"crc32\", this.crc32)\n            .withStreamInfo(\"compression\", this.compression)\n        ;\n    }\n};\n\n/**\n * Chain the given worker with other workers to compress the content with the\n * given compression.\n * @param {GenericWorker} uncompressedWorker the worker to pipe.\n * @param {Object} compression the compression object.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return {GenericWorker} the new worker compressing the content.\n */\nCompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) {\n    return uncompressedWorker\n        .pipe(new Crc32Probe())\n        .pipe(new DataLengthProbe(\"uncompressedSize\"))\n        .pipe(compression.compressWorker(compressionOptions))\n        .pipe(new DataLengthProbe(\"compressedSize\"))\n        .withStreamInfo(\"compression\", compression);\n};\n\nmodule.exports = CompressedObject;\n\n},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(require,module,exports){\n\"use strict\";\n\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nexports.STORE = {\n    magic: \"\\x00\\x00\",\n    compressWorker : function () {\n        return new GenericWorker(\"STORE compression\");\n    },\n    uncompressWorker : function () {\n        return new GenericWorker(\"STORE decompression\");\n    }\n};\nexports.DEFLATE = require(\"./flate\");\n\n},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"./utils\");\n\n/**\n * The following functions come from pako, from pako/lib/zlib/crc32.js\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n    var c, table = [];\n\n    for(var n =0; n < 256; n++){\n        c = n;\n        for(var k =0; k < 8; k++){\n            c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n        }\n        table[n] = c;\n    }\n\n    return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n    var t = crcTable, end = pos + len;\n\n    crc = crc ^ (-1);\n\n    for (var i = pos; i < end; i++ ) {\n        crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n    }\n\n    return (crc ^ (-1)); // >>> 0;\n}\n\n// That's all for the pako functions.\n\n/**\n * Compute the crc32 of a string.\n * This is almost the same as the function crc32, but for strings. Using the\n * same function for the two use cases leads to horrible performances.\n * @param {Number} crc the starting value of the crc.\n * @param {String} str the string to use.\n * @param {Number} len the length of the string.\n * @param {Number} pos the starting position for the crc32 computation.\n * @return {Number} the computed crc32.\n */\nfunction crc32str(crc, str, len, pos) {\n    var t = crcTable, end = pos + len;\n\n    crc = crc ^ (-1);\n\n    for (var i = pos; i < end; i++ ) {\n        crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF];\n    }\n\n    return (crc ^ (-1)); // >>> 0;\n}\n\nmodule.exports = function crc32wrapper(input, crc) {\n    if (typeof input === \"undefined\" || !input.length) {\n        return 0;\n    }\n\n    var isArray = utils.getTypeOf(input) !== \"string\";\n\n    if(isArray) {\n        return crc32(crc|0, input, input.length, 0);\n    } else {\n        return crc32str(crc|0, input, input.length, 0);\n    }\n};\n\n},{\"./utils\":32}],5:[function(require,module,exports){\n\"use strict\";\nexports.base64 = false;\nexports.binary = false;\nexports.dir = false;\nexports.createFolders = true;\nexports.date = null;\nexports.compression = null;\nexports.compressionOptions = null;\nexports.comment = null;\nexports.unixPermissions = null;\nexports.dosPermissions = null;\n\n},{}],6:[function(require,module,exports){\n\"use strict\";\n\n// load the global object first:\n// - it should be better integrated in the system (unhandledRejection in node)\n// - the environment may have a custom Promise implementation (see zone.js)\nvar ES6Promise = null;\nif (typeof Promise !== \"undefined\") {\n    ES6Promise = Promise;\n} else {\n    ES6Promise = require(\"lie\");\n}\n\n/**\n * Let the user use/change some implementations.\n */\nmodule.exports = {\n    Promise: ES6Promise\n};\n\n},{\"lie\":37}],7:[function(require,module,exports){\n\"use strict\";\nvar USE_TYPEDARRAY = (typeof Uint8Array !== \"undefined\") && (typeof Uint16Array !== \"undefined\") && (typeof Uint32Array !== \"undefined\");\n\nvar pako = require(\"pako\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nvar ARRAY_TYPE = USE_TYPEDARRAY ? \"uint8array\" : \"array\";\n\nexports.magic = \"\\x08\\x00\";\n\n/**\n * Create a worker that uses pako to inflate/deflate.\n * @constructor\n * @param {String} action the name of the pako function to call : either \"Deflate\" or \"Inflate\".\n * @param {Object} options the options to use when (de)compressing.\n */\nfunction FlateWorker(action, options) {\n    GenericWorker.call(this, \"FlateWorker/\" + action);\n\n    this._pako = null;\n    this._pakoAction = action;\n    this._pakoOptions = options;\n    // the `meta` object from the last chunk received\n    // this allow this worker to pass around metadata\n    this.meta = {};\n}\n\nutils.inherits(FlateWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nFlateWorker.prototype.processChunk = function (chunk) {\n    this.meta = chunk.meta;\n    if (this._pako === null) {\n        this._createPako();\n    }\n    this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);\n};\n\n/**\n * @see GenericWorker.flush\n */\nFlateWorker.prototype.flush = function () {\n    GenericWorker.prototype.flush.call(this);\n    if (this._pako === null) {\n        this._createPako();\n    }\n    this._pako.push([], true);\n};\n/**\n * @see GenericWorker.cleanUp\n */\nFlateWorker.prototype.cleanUp = function () {\n    GenericWorker.prototype.cleanUp.call(this);\n    this._pako = null;\n};\n\n/**\n * Create the _pako object.\n * TODO: lazy-loading this object isn't the best solution but it's the\n * quickest. The best solution is to lazy-load the worker list. See also the\n * issue #446.\n */\nFlateWorker.prototype._createPako = function () {\n    this._pako = new pako[this._pakoAction]({\n        raw: true,\n        level: this._pakoOptions.level || -1 // default compression\n    });\n    var self = this;\n    this._pako.onData = function(data) {\n        self.push({\n            data : data,\n            meta : self.meta\n        });\n    };\n};\n\nexports.compressWorker = function (compressionOptions) {\n    return new FlateWorker(\"Deflate\", compressionOptions);\n};\nexports.uncompressWorker = function () {\n    return new FlateWorker(\"Inflate\", {});\n};\n\n},{\"./stream/GenericWorker\":28,\"./utils\":32,\"pako\":38}],8:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\nvar utf8 = require(\"../utf8\");\nvar crc32 = require(\"../crc32\");\nvar signature = require(\"../signature\");\n\n/**\n * Transform an integer into a string in hexadecimal.\n * @private\n * @param {number} dec the number to convert.\n * @param {number} bytes the number of bytes to generate.\n * @returns {string} the result.\n */\nvar decToHex = function(dec, bytes) {\n    var hex = \"\", i;\n    for (i = 0; i < bytes; i++) {\n        hex += String.fromCharCode(dec & 0xff);\n        dec = dec >>> 8;\n    }\n    return hex;\n};\n\n/**\n * Generate the UNIX part of the external file attributes.\n * @param {Object} unixPermissions the unix permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :\n *\n * TTTTsstrwxrwxrwx0000000000ADVSHR\n * ^^^^____________________________ file type, see zipinfo.c (UNX_*)\n *     ^^^_________________________ setuid, setgid, sticky\n *        ^^^^^^^^^________________ permissions\n *                 ^^^^^^^^^^______ not used ?\n *                           ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only\n */\nvar generateUnixExternalFileAttr = function (unixPermissions, isDir) {\n\n    var result = unixPermissions;\n    if (!unixPermissions) {\n        // I can't use octal values in strict mode, hence the hexa.\n        //  040775 => 0x41fd\n        // 0100664 => 0x81b4\n        result = isDir ? 0x41fd : 0x81b4;\n    }\n    return (result & 0xFFFF) << 16;\n};\n\n/**\n * Generate the DOS part of the external file attributes.\n * @param {Object} dosPermissions the dos permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * Bit 0     Read-Only\n * Bit 1     Hidden\n * Bit 2     System\n * Bit 3     Volume Label\n * Bit 4     Directory\n * Bit 5     Archive\n */\nvar generateDosExternalFileAttr = function (dosPermissions) {\n    // the dir flag is already set for compatibility\n    return (dosPermissions || 0)  & 0x3F;\n};\n\n/**\n * Generate the various parts used in the construction of the final zip file.\n * @param {Object} streamInfo the hash with information about the compressed file.\n * @param {Boolean} streamedContent is the content streamed ?\n * @param {Boolean} streamingEnded is the stream finished ?\n * @param {number} offset the current offset from the start of the zip file.\n * @param {String} platform let's pretend we are this platform (change platform dependents fields)\n * @param {Function} encodeFileName the function to encode the file name / comment.\n * @return {Object} the zip parts.\n */\nvar generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) {\n    var file = streamInfo[\"file\"],\n        compression = streamInfo[\"compression\"],\n        useCustomEncoding = encodeFileName !== utf8.utf8encode,\n        encodedFileName = utils.transformTo(\"string\", encodeFileName(file.name)),\n        utfEncodedFileName = utils.transformTo(\"string\", utf8.utf8encode(file.name)),\n        comment = file.comment,\n        encodedComment = utils.transformTo(\"string\", encodeFileName(comment)),\n        utfEncodedComment = utils.transformTo(\"string\", utf8.utf8encode(comment)),\n        useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,\n        useUTF8ForComment = utfEncodedComment.length !== comment.length,\n        dosTime,\n        dosDate,\n        extraFields = \"\",\n        unicodePathExtraField = \"\",\n        unicodeCommentExtraField = \"\",\n        dir = file.dir,\n        date = file.date;\n\n\n    var dataInfo = {\n        crc32 : 0,\n        compressedSize : 0,\n        uncompressedSize : 0\n    };\n\n    // if the content is streamed, the sizes/crc32 are only available AFTER\n    // the end of the stream.\n    if (!streamedContent || streamingEnded) {\n        dataInfo.crc32 = streamInfo[\"crc32\"];\n        dataInfo.compressedSize = streamInfo[\"compressedSize\"];\n        dataInfo.uncompressedSize = streamInfo[\"uncompressedSize\"];\n    }\n\n    var bitflag = 0;\n    if (streamedContent) {\n        // Bit 3: the sizes/crc32 are set to zero in the local header.\n        // The correct values are put in the data descriptor immediately\n        // following the compressed data.\n        bitflag |= 0x0008;\n    }\n    if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) {\n        // Bit 11: Language encoding flag (EFS).\n        bitflag |= 0x0800;\n    }\n\n\n    var extFileAttr = 0;\n    var versionMadeBy = 0;\n    if (dir) {\n        // dos or unix, we set the dos dir flag\n        extFileAttr |= 0x00010;\n    }\n    if(platform === \"UNIX\") {\n        versionMadeBy = 0x031E; // UNIX, version 3.0\n        extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);\n    } else { // DOS or other, fallback to DOS\n        versionMadeBy = 0x0014; // DOS, version 2.0\n        extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);\n    }\n\n    // date\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html\n\n    dosTime = date.getUTCHours();\n    dosTime = dosTime << 6;\n    dosTime = dosTime | date.getUTCMinutes();\n    dosTime = dosTime << 5;\n    dosTime = dosTime | date.getUTCSeconds() / 2;\n\n    dosDate = date.getUTCFullYear() - 1980;\n    dosDate = dosDate << 4;\n    dosDate = dosDate | (date.getUTCMonth() + 1);\n    dosDate = dosDate << 5;\n    dosDate = dosDate | date.getUTCDate();\n\n    if (useUTF8ForFileName) {\n        // set the unicode path extra field. unzip needs at least one extra\n        // field to correctly handle unicode path, so using the path is as good\n        // as any other information. This could improve the situation with\n        // other archive managers too.\n        // This field is usually used without the utf8 flag, with a non\n        // unicode path in the header (winrar, winzip). This helps (a bit)\n        // with the messy Windows' default compressed folders feature but\n        // breaks on p7zip which doesn't seek the unicode path extra field.\n        // So for now, UTF-8 everywhere !\n        unicodePathExtraField =\n            // Version\n            decToHex(1, 1) +\n            // NameCRC32\n            decToHex(crc32(encodedFileName), 4) +\n            // UnicodeName\n            utfEncodedFileName;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x70\" +\n            // size\n            decToHex(unicodePathExtraField.length, 2) +\n            // content\n            unicodePathExtraField;\n    }\n\n    if(useUTF8ForComment) {\n\n        unicodeCommentExtraField =\n            // Version\n            decToHex(1, 1) +\n            // CommentCRC32\n            decToHex(crc32(encodedComment), 4) +\n            // UnicodeName\n            utfEncodedComment;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x63\" +\n            // size\n            decToHex(unicodeCommentExtraField.length, 2) +\n            // content\n            unicodeCommentExtraField;\n    }\n\n    var header = \"\";\n\n    // version needed to extract\n    header += \"\\x0A\\x00\";\n    // general purpose bit flag\n    header += decToHex(bitflag, 2);\n    // compression method\n    header += compression.magic;\n    // last mod file time\n    header += decToHex(dosTime, 2);\n    // last mod file date\n    header += decToHex(dosDate, 2);\n    // crc-32\n    header += decToHex(dataInfo.crc32, 4);\n    // compressed size\n    header += decToHex(dataInfo.compressedSize, 4);\n    // uncompressed size\n    header += decToHex(dataInfo.uncompressedSize, 4);\n    // file name length\n    header += decToHex(encodedFileName.length, 2);\n    // extra field length\n    header += decToHex(extraFields.length, 2);\n\n\n    var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;\n\n    var dirRecord = signature.CENTRAL_FILE_HEADER +\n        // version made by (00: DOS)\n        decToHex(versionMadeBy, 2) +\n        // file header (common to file and central directory)\n        header +\n        // file comment length\n        decToHex(encodedComment.length, 2) +\n        // disk number start\n        \"\\x00\\x00\" +\n        // internal file attributes TODO\n        \"\\x00\\x00\" +\n        // external file attributes\n        decToHex(extFileAttr, 4) +\n        // relative offset of local header\n        decToHex(offset, 4) +\n        // file name\n        encodedFileName +\n        // extra field\n        extraFields +\n        // file comment\n        encodedComment;\n\n    return {\n        fileRecord: fileRecord,\n        dirRecord: dirRecord\n    };\n};\n\n/**\n * Generate the EOCD record.\n * @param {Number} entriesCount the number of entries in the zip file.\n * @param {Number} centralDirLength the length (in bytes) of the central dir.\n * @param {Number} localDirLength the length (in bytes) of the local dir.\n * @param {String} comment the zip file comment as a binary string.\n * @param {Function} encodeFileName the function to encode the comment.\n * @return {String} the EOCD record.\n */\nvar generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) {\n    var dirEnd = \"\";\n    var encodedComment = utils.transformTo(\"string\", encodeFileName(comment));\n\n    // end of central dir signature\n    dirEnd = signature.CENTRAL_DIRECTORY_END +\n        // number of this disk\n        \"\\x00\\x00\" +\n        // number of the disk with the start of the central directory\n        \"\\x00\\x00\" +\n        // total number of entries in the central directory on this disk\n        decToHex(entriesCount, 2) +\n        // total number of entries in the central directory\n        decToHex(entriesCount, 2) +\n        // size of the central directory   4 bytes\n        decToHex(centralDirLength, 4) +\n        // offset of start of central directory with respect to the starting disk number\n        decToHex(localDirLength, 4) +\n        // .ZIP file comment length\n        decToHex(encodedComment.length, 2) +\n        // .ZIP file comment\n        encodedComment;\n\n    return dirEnd;\n};\n\n/**\n * Generate data descriptors for a file entry.\n * @param {Object} streamInfo the hash generated by a worker, containing information\n * on the file entry.\n * @return {String} the data descriptors.\n */\nvar generateDataDescriptors = function (streamInfo) {\n    var descriptor = \"\";\n    descriptor = signature.DATA_DESCRIPTOR +\n        // crc-32                          4 bytes\n        decToHex(streamInfo[\"crc32\"], 4) +\n        // compressed size                 4 bytes\n        decToHex(streamInfo[\"compressedSize\"], 4) +\n        // uncompressed size               4 bytes\n        decToHex(streamInfo[\"uncompressedSize\"], 4);\n\n    return descriptor;\n};\n\n\n/**\n * A worker to concatenate other workers to create a zip file.\n * @param {Boolean} streamFiles `true` to stream the content of the files,\n * `false` to accumulate it.\n * @param {String} comment the comment to use.\n * @param {String} platform the platform to use, \"UNIX\" or \"DOS\".\n * @param {Function} encodeFileName the function to encode file names and comments.\n */\nfunction ZipFileWorker(streamFiles, comment, platform, encodeFileName) {\n    GenericWorker.call(this, \"ZipFileWorker\");\n    // The number of bytes written so far. This doesn't count accumulated chunks.\n    this.bytesWritten = 0;\n    // The comment of the zip file\n    this.zipComment = comment;\n    // The platform \"generating\" the zip file.\n    this.zipPlatform = platform;\n    // the function to encode file names and comments.\n    this.encodeFileName = encodeFileName;\n    // Should we stream the content of the files ?\n    this.streamFiles = streamFiles;\n    // If `streamFiles` is false, we will need to accumulate the content of the\n    // files to calculate sizes / crc32 (and write them *before* the content).\n    // This boolean indicates if we are accumulating chunks (it will change a lot\n    // during the lifetime of this worker).\n    this.accumulate = false;\n    // The buffer receiving chunks when accumulating content.\n    this.contentBuffer = [];\n    // The list of generated directory records.\n    this.dirRecords = [];\n    // The offset (in bytes) from the beginning of the zip file for the current source.\n    this.currentSourceOffset = 0;\n    // The total number of entries in this zip file.\n    this.entriesCount = 0;\n    // the name of the file currently being added, null when handling the end of the zip file.\n    // Used for the emitted metadata.\n    this.currentFile = null;\n\n\n\n    this._sources = [];\n}\nutils.inherits(ZipFileWorker, GenericWorker);\n\n/**\n * @see GenericWorker.push\n */\nZipFileWorker.prototype.push = function (chunk) {\n\n    var currentFilePercent = chunk.meta.percent || 0;\n    var entriesCount = this.entriesCount;\n    var remainingFiles = this._sources.length;\n\n    if(this.accumulate) {\n        this.contentBuffer.push(chunk);\n    } else {\n        this.bytesWritten += chunk.data.length;\n\n        GenericWorker.prototype.push.call(this, {\n            data : chunk.data,\n            meta : {\n                currentFile : this.currentFile,\n                percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100\n            }\n        });\n    }\n};\n\n/**\n * The worker started a new source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the new source.\n */\nZipFileWorker.prototype.openedSource = function (streamInfo) {\n    this.currentSourceOffset = this.bytesWritten;\n    this.currentFile = streamInfo[\"file\"].name;\n\n    var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n\n    // don't stream folders (because they don't have any content)\n    if(streamedContent) {\n        var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n        this.push({\n            data : record.fileRecord,\n            meta : {percent:0}\n        });\n    } else {\n        // we need to wait for the whole file before pushing anything\n        this.accumulate = true;\n    }\n};\n\n/**\n * The worker finished a source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the finished source.\n */\nZipFileWorker.prototype.closedSource = function (streamInfo) {\n    this.accumulate = false;\n    var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n    var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n\n    this.dirRecords.push(record.dirRecord);\n    if(streamedContent) {\n        // after the streamed file, we put data descriptors\n        this.push({\n            data : generateDataDescriptors(streamInfo),\n            meta : {percent:100}\n        });\n    } else {\n        // the content wasn't streamed, we need to push everything now\n        // first the file record, then the content\n        this.push({\n            data : record.fileRecord,\n            meta : {percent:0}\n        });\n        while(this.contentBuffer.length) {\n            this.push(this.contentBuffer.shift());\n        }\n    }\n    this.currentFile = null;\n};\n\n/**\n * @see GenericWorker.flush\n */\nZipFileWorker.prototype.flush = function () {\n\n    var localDirLength = this.bytesWritten;\n    for(var i = 0; i < this.dirRecords.length; i++) {\n        this.push({\n            data : this.dirRecords[i],\n            meta : {percent:100}\n        });\n    }\n    var centralDirLength = this.bytesWritten - localDirLength;\n\n    var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName);\n\n    this.push({\n        data : dirEnd,\n        meta : {percent:100}\n    });\n};\n\n/**\n * Prepare the next source to be read.\n */\nZipFileWorker.prototype.prepareNextSource = function () {\n    this.previous = this._sources.shift();\n    this.openedSource(this.previous.streamInfo);\n    if (this.isPaused) {\n        this.previous.pause();\n    } else {\n        this.previous.resume();\n    }\n};\n\n/**\n * @see GenericWorker.registerPrevious\n */\nZipFileWorker.prototype.registerPrevious = function (previous) {\n    this._sources.push(previous);\n    var self = this;\n\n    previous.on(\"data\", function (chunk) {\n        self.processChunk(chunk);\n    });\n    previous.on(\"end\", function () {\n        self.closedSource(self.previous.streamInfo);\n        if(self._sources.length) {\n            self.prepareNextSource();\n        } else {\n            self.end();\n        }\n    });\n    previous.on(\"error\", function (e) {\n        self.error(e);\n    });\n    return this;\n};\n\n/**\n * @see GenericWorker.resume\n */\nZipFileWorker.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if (!this.previous && this._sources.length) {\n        this.prepareNextSource();\n        return true;\n    }\n    if (!this.previous && !this._sources.length && !this.generatedError) {\n        this.end();\n        return true;\n    }\n};\n\n/**\n * @see GenericWorker.error\n */\nZipFileWorker.prototype.error = function (e) {\n    var sources = this._sources;\n    if(!GenericWorker.prototype.error.call(this, e)) {\n        return false;\n    }\n    for(var i = 0; i < sources.length; i++) {\n        try {\n            sources[i].error(e);\n        } catch(e) {\n            // the `error` exploded, nothing to do\n        }\n    }\n    return true;\n};\n\n/**\n * @see GenericWorker.lock\n */\nZipFileWorker.prototype.lock = function () {\n    GenericWorker.prototype.lock.call(this);\n    var sources = this._sources;\n    for(var i = 0; i < sources.length; i++) {\n        sources[i].lock();\n    }\n};\n\nmodule.exports = ZipFileWorker;\n\n},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(require,module,exports){\n\"use strict\";\n\nvar compressions = require(\"../compressions\");\nvar ZipFileWorker = require(\"./ZipFileWorker\");\n\n/**\n * Find the compression to use.\n * @param {String} fileCompression the compression defined at the file level, if any.\n * @param {String} zipCompression the compression defined at the load() level.\n * @return {Object} the compression object to use.\n */\nvar getCompression = function (fileCompression, zipCompression) {\n\n    var compressionName = fileCompression || zipCompression;\n    var compression = compressions[compressionName];\n    if (!compression) {\n        throw new Error(compressionName + \" is not a valid compression method !\");\n    }\n    return compression;\n};\n\n/**\n * Create a worker to generate a zip file.\n * @param {JSZip} zip the JSZip instance at the right root level.\n * @param {Object} options to generate the zip file.\n * @param {String} comment the comment to use.\n */\nexports.generateWorker = function (zip, options, comment) {\n\n    var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName);\n    var entriesCount = 0;\n    try {\n\n        zip.forEach(function (relativePath, file) {\n            entriesCount++;\n            var compression = getCompression(file.options.compression, options.compression);\n            var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};\n            var dir = file.dir, date = file.date;\n\n            file._compressWorker(compression, compressionOptions)\n                .withStreamInfo(\"file\", {\n                    name : relativePath,\n                    dir : dir,\n                    date : date,\n                    comment : file.comment || \"\",\n                    unixPermissions : file.unixPermissions,\n                    dosPermissions : file.dosPermissions\n                })\n                .pipe(zipFileWorker);\n        });\n        zipFileWorker.entriesCount = entriesCount;\n    } catch (e) {\n        zipFileWorker.error(e);\n    }\n\n    return zipFileWorker;\n};\n\n},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(require,module,exports){\n\"use strict\";\n\n/**\n * Representation a of zip file in js\n * @constructor\n */\nfunction JSZip() {\n    // if this constructor is used without `new`, it adds `new` before itself:\n    if(!(this instanceof JSZip)) {\n        return new JSZip();\n    }\n\n    if(arguments.length) {\n        throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");\n    }\n\n    // object containing the files :\n    // {\n    //   \"folder/\" : {...},\n    //   \"folder/data.txt\" : {...}\n    // }\n    // NOTE: we use a null prototype because we do not\n    // want filenames like \"toString\" coming from a zip file\n    // to overwrite methods and attributes in a normal Object.\n    this.files = Object.create(null);\n\n    this.comment = null;\n\n    // Where we are in the hierarchy\n    this.root = \"\";\n    this.clone = function() {\n        var newObj = new JSZip();\n        for (var i in this) {\n            if (typeof this[i] !== \"function\") {\n                newObj[i] = this[i];\n            }\n        }\n        return newObj;\n    };\n}\nJSZip.prototype = require(\"./object\");\nJSZip.prototype.loadAsync = require(\"./load\");\nJSZip.support = require(\"./support\");\nJSZip.defaults = require(\"./defaults\");\n\n// TODO find a better way to handle this version,\n// a require('package.json').version doesn't work with webpack, see #327\nJSZip.version = \"3.10.1\";\n\nJSZip.loadAsync = function (content, options) {\n    return new JSZip().loadAsync(content, options);\n};\n\nJSZip.external = require(\"./external\");\nmodule.exports = JSZip;\n\n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(require,module,exports){\n\"use strict\";\nvar utils = require(\"./utils\");\nvar external = require(\"./external\");\nvar utf8 = require(\"./utf8\");\nvar ZipEntries = require(\"./zipEntries\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar nodejsUtils = require(\"./nodejsUtils\");\n\n/**\n * Check the CRC32 of an entry.\n * @param {ZipEntry} zipEntry the zip entry to check.\n * @return {Promise} the result.\n */\nfunction checkEntryCRC32(zipEntry) {\n    return new external.Promise(function (resolve, reject) {\n        var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());\n        worker.on(\"error\", function (e) {\n            reject(e);\n        })\n            .on(\"end\", function () {\n                if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {\n                    reject(new Error(\"Corrupted zip : CRC32 mismatch\"));\n                } else {\n                    resolve();\n                }\n            })\n            .resume();\n    });\n}\n\nmodule.exports = function (data, options) {\n    var zip = this;\n    options = utils.extend(options || {}, {\n        base64: false,\n        checkCRC32: false,\n        optimizedBinaryString: false,\n        createFolders: false,\n        decodeFileName: utf8.utf8decode\n    });\n\n    if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n        return external.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\"));\n    }\n\n    return utils.prepareContent(\"the loaded zip file\", data, true, options.optimizedBinaryString, options.base64)\n        .then(function (data) {\n            var zipEntries = new ZipEntries(options);\n            zipEntries.load(data);\n            return zipEntries;\n        }).then(function checkCRC32(zipEntries) {\n            var promises = [external.Promise.resolve(zipEntries)];\n            var files = zipEntries.files;\n            if (options.checkCRC32) {\n                for (var i = 0; i < files.length; i++) {\n                    promises.push(checkEntryCRC32(files[i]));\n                }\n            }\n            return external.Promise.all(promises);\n        }).then(function addFiles(results) {\n            var zipEntries = results.shift();\n            var files = zipEntries.files;\n            for (var i = 0; i < files.length; i++) {\n                var input = files[i];\n\n                var unsafeName = input.fileNameStr;\n                var safeName = utils.resolve(input.fileNameStr);\n\n                zip.file(safeName, input.decompressed, {\n                    binary: true,\n                    optimizedBinaryString: true,\n                    date: input.date,\n                    dir: input.dir,\n                    comment: input.fileCommentStr.length ? input.fileCommentStr : null,\n                    unixPermissions: input.unixPermissions,\n                    dosPermissions: input.dosPermissions,\n                    createFolders: options.createFolders\n                });\n                if (!input.dir) {\n                    zip.file(safeName).unsafeOriginalName = unsafeName;\n                }\n            }\n            if (zipEntries.zipComment.length) {\n                zip.comment = zipEntries.zipComment;\n            }\n\n            return zip;\n        });\n};\n\n},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\n\n/**\n * A worker that use a nodejs stream as source.\n * @constructor\n * @param {String} filename the name of the file entry for this stream.\n * @param {Readable} stream the nodejs stream.\n */\nfunction NodejsStreamInputAdapter(filename, stream) {\n    GenericWorker.call(this, \"Nodejs stream input adapter for \" + filename);\n    this._upstreamEnded = false;\n    this._bindStream(stream);\n}\n\nutils.inherits(NodejsStreamInputAdapter, GenericWorker);\n\n/**\n * Prepare the stream and bind the callbacks on it.\n * Do this ASAP on node 0.10 ! A lazy binding doesn't always work.\n * @param {Stream} stream the nodejs stream to use.\n */\nNodejsStreamInputAdapter.prototype._bindStream = function (stream) {\n    var self = this;\n    this._stream = stream;\n    stream.pause();\n    stream\n        .on(\"data\", function (chunk) {\n            self.push({\n                data: chunk,\n                meta : {\n                    percent : 0\n                }\n            });\n        })\n        .on(\"error\", function (e) {\n            if(self.isPaused) {\n                this.generatedError = e;\n            } else {\n                self.error(e);\n            }\n        })\n        .on(\"end\", function () {\n            if(self.isPaused) {\n                self._upstreamEnded = true;\n            } else {\n                self.end();\n            }\n        });\n};\nNodejsStreamInputAdapter.prototype.pause = function () {\n    if(!GenericWorker.prototype.pause.call(this)) {\n        return false;\n    }\n    this._stream.pause();\n    return true;\n};\nNodejsStreamInputAdapter.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if(this._upstreamEnded) {\n        this.end();\n    } else {\n        this._stream.resume();\n    }\n\n    return true;\n};\n\nmodule.exports = NodejsStreamInputAdapter;\n\n},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(require,module,exports){\n\"use strict\";\n\nvar Readable = require(\"readable-stream\").Readable;\n\nvar utils = require(\"../utils\");\nutils.inherits(NodejsStreamOutputAdapter, Readable);\n\n/**\n* A nodejs stream using a worker as source.\n* @see the SourceWrapper in http://nodejs.org/api/stream.html\n* @constructor\n* @param {StreamHelper} helper the helper wrapping the worker\n* @param {Object} options the nodejs stream options\n* @param {Function} updateCb the update callback.\n*/\nfunction NodejsStreamOutputAdapter(helper, options, updateCb) {\n    Readable.call(this, options);\n    this._helper = helper;\n\n    var self = this;\n    helper.on(\"data\", function (data, meta) {\n        if (!self.push(data)) {\n            self._helper.pause();\n        }\n        if(updateCb) {\n            updateCb(meta);\n        }\n    })\n        .on(\"error\", function(e) {\n            self.emit(\"error\", e);\n        })\n        .on(\"end\", function () {\n            self.push(null);\n        });\n}\n\n\nNodejsStreamOutputAdapter.prototype._read = function() {\n    this._helper.resume();\n};\n\nmodule.exports = NodejsStreamOutputAdapter;\n\n},{\"../utils\":32,\"readable-stream\":16}],14:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n    /**\n     * True if this is running in Nodejs, will be undefined in a browser.\n     * In a browser, browserify won't include this file and the whole module\n     * will be resolved an empty object.\n     */\n    isNode : typeof Buffer !== \"undefined\",\n    /**\n     * Create a new nodejs Buffer from an existing content.\n     * @param {Object} data the data to pass to the constructor.\n     * @param {String} encoding the encoding to use.\n     * @return {Buffer} a new Buffer.\n     */\n    newBufferFrom: function(data, encoding) {\n        if (Buffer.from && Buffer.from !== Uint8Array.from) {\n            return Buffer.from(data, encoding);\n        } else {\n            if (typeof data === \"number\") {\n                // Safeguard for old Node.js versions. On newer versions,\n                // Buffer.from(number) / Buffer(number, encoding) already throw.\n                throw new Error(\"The \\\"data\\\" argument must not be a number\");\n            }\n            return new Buffer(data, encoding);\n        }\n    },\n    /**\n     * Create a new nodejs Buffer with the specified size.\n     * @param {Integer} size the size of the buffer.\n     * @return {Buffer} a new Buffer.\n     */\n    allocBuffer: function (size) {\n        if (Buffer.alloc) {\n            return Buffer.alloc(size);\n        } else {\n            var buf = new Buffer(size);\n            buf.fill(0);\n            return buf;\n        }\n    },\n    /**\n     * Find out if an object is a Buffer.\n     * @param {Object} b the object to test.\n     * @return {Boolean} true if the object is a Buffer, false otherwise.\n     */\n    isBuffer : function(b){\n        return Buffer.isBuffer(b);\n    },\n\n    isStream : function (obj) {\n        return obj &&\n            typeof obj.on === \"function\" &&\n            typeof obj.pause === \"function\" &&\n            typeof obj.resume === \"function\";\n    }\n};\n\n},{}],15:[function(require,module,exports){\n\"use strict\";\nvar utf8 = require(\"./utf8\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar defaults = require(\"./defaults\");\nvar CompressedObject = require(\"./compressedObject\");\nvar ZipObject = require(\"./zipObject\");\nvar generate = require(\"./generate\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar NodejsStreamInputAdapter = require(\"./nodejs/NodejsStreamInputAdapter\");\n\n\n/**\n * Add a file in the current folder.\n * @private\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n * @param {Object} originalOptions the options of the file\n * @return {Object} the new file.\n */\nvar fileAdd = function(name, data, originalOptions) {\n    // be sure sub folders exist\n    var dataType = utils.getTypeOf(data),\n        parent;\n\n\n    /*\n     * Correct options.\n     */\n\n    var o = utils.extend(originalOptions || {}, defaults);\n    o.date = o.date || new Date();\n    if (o.compression !== null) {\n        o.compression = o.compression.toUpperCase();\n    }\n\n    if (typeof o.unixPermissions === \"string\") {\n        o.unixPermissions = parseInt(o.unixPermissions, 8);\n    }\n\n    // UNX_IFDIR  0040000 see zipinfo.c\n    if (o.unixPermissions && (o.unixPermissions & 0x4000)) {\n        o.dir = true;\n    }\n    // Bit 4    Directory\n    if (o.dosPermissions && (o.dosPermissions & 0x0010)) {\n        o.dir = true;\n    }\n\n    if (o.dir) {\n        name = forceTrailingSlash(name);\n    }\n    if (o.createFolders && (parent = parentFolder(name))) {\n        folderAdd.call(this, parent, true);\n    }\n\n    var isUnicodeString = dataType === \"string\" && o.binary === false && o.base64 === false;\n    if (!originalOptions || typeof originalOptions.binary === \"undefined\") {\n        o.binary = !isUnicodeString;\n    }\n\n\n    var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0;\n\n    if (isCompressedEmpty || o.dir || !data || data.length === 0) {\n        o.base64 = false;\n        o.binary = true;\n        data = \"\";\n        o.compression = \"STORE\";\n        dataType = \"string\";\n    }\n\n    /*\n     * Convert content to fit.\n     */\n\n    var zipObjectContent = null;\n    if (data instanceof CompressedObject || data instanceof GenericWorker) {\n        zipObjectContent = data;\n    } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n        zipObjectContent = new NodejsStreamInputAdapter(name, data);\n    } else {\n        zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64);\n    }\n\n    var object = new ZipObject(name, zipObjectContent, o);\n    this.files[name] = object;\n    /*\n    TODO: we can't throw an exception because we have async promises\n    (we can have a promise of a Date() for example) but returning a\n    promise is useless because file(name, data) returns the JSZip\n    object for chaining. Should we break that to allow the user\n    to catch the error ?\n\n    return external.Promise.resolve(zipObjectContent)\n    .then(function () {\n        return object;\n    });\n    */\n};\n\n/**\n * Find the parent folder of the path.\n * @private\n * @param {string} path the path to use\n * @return {string} the parent folder, or \"\"\n */\nvar parentFolder = function (path) {\n    if (path.slice(-1) === \"/\") {\n        path = path.substring(0, path.length - 1);\n    }\n    var lastSlash = path.lastIndexOf(\"/\");\n    return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\n};\n\n/**\n * Returns the path with a slash at the end.\n * @private\n * @param {String} path the path to check.\n * @return {String} the path with a trailing slash.\n */\nvar forceTrailingSlash = function(path) {\n    // Check the name ends with a /\n    if (path.slice(-1) !== \"/\") {\n        path += \"/\"; // IE doesn't like substr(-1)\n    }\n    return path;\n};\n\n/**\n * Add a (sub) folder in the current folder.\n * @private\n * @param {string} name the folder's name\n * @param {boolean=} [createFolders] If true, automatically create sub\n *  folders. Defaults to false.\n * @return {Object} the new folder.\n */\nvar folderAdd = function(name, createFolders) {\n    createFolders = (typeof createFolders !== \"undefined\") ? createFolders : defaults.createFolders;\n\n    name = forceTrailingSlash(name);\n\n    // Does this folder already exist?\n    if (!this.files[name]) {\n        fileAdd.call(this, name, null, {\n            dir: true,\n            createFolders: createFolders\n        });\n    }\n    return this.files[name];\n};\n\n/**\n* Cross-window, cross-Node-context regular expression detection\n* @param  {Object}  object Anything\n* @return {Boolean}        true if the object is a regular expression,\n* false otherwise\n*/\nfunction isRegExp(object) {\n    return Object.prototype.toString.call(object) === \"[object RegExp]\";\n}\n\n// return the actual prototype of JSZip\nvar out = {\n    /**\n     * @see loadAsync\n     */\n    load: function() {\n        throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n    },\n\n\n    /**\n     * Call a callback function for each entry at this folder level.\n     * @param {Function} cb the callback function:\n     * function (relativePath, file) {...}\n     * It takes 2 arguments : the relative path and the file.\n     */\n    forEach: function(cb) {\n        var filename, relativePath, file;\n        // ignore warning about unwanted properties because this.files is a null prototype object\n        /* eslint-disable-next-line guard-for-in */\n        for (filename in this.files) {\n            file = this.files[filename];\n            relativePath = filename.slice(this.root.length, filename.length);\n            if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root\n                cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn...\n            }\n        }\n    },\n\n    /**\n     * Filter nested files/folders with the specified function.\n     * @param {Function} search the predicate to use :\n     * function (relativePath, file) {...}\n     * It takes 2 arguments : the relative path and the file.\n     * @return {Array} An array of matching elements.\n     */\n    filter: function(search) {\n        var result = [];\n        this.forEach(function (relativePath, entry) {\n            if (search(relativePath, entry)) { // the file matches the function\n                result.push(entry);\n            }\n\n        });\n        return result;\n    },\n\n    /**\n     * Add a file to the zip file, or search a file.\n     * @param   {string|RegExp} name The name of the file to add (if data is defined),\n     * the name of the file to find (if no data) or a regex to match files.\n     * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded\n     * @param   {Object} o     File options\n     * @return  {JSZip|Object|Array} this JSZip object (when adding a file),\n     * a file (when searching by string) or an array of files (when searching by regex).\n     */\n    file: function(name, data, o) {\n        if (arguments.length === 1) {\n            if (isRegExp(name)) {\n                var regexp = name;\n                return this.filter(function(relativePath, file) {\n                    return !file.dir && regexp.test(relativePath);\n                });\n            }\n            else { // text\n                var obj = this.files[this.root + name];\n                if (obj && !obj.dir) {\n                    return obj;\n                } else {\n                    return null;\n                }\n            }\n        }\n        else { // more than one argument : we have data !\n            name = this.root + name;\n            fileAdd.call(this, name, data, o);\n        }\n        return this;\n    },\n\n    /**\n     * Add a directory to the zip file, or search.\n     * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n     * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.\n     */\n    folder: function(arg) {\n        if (!arg) {\n            return this;\n        }\n\n        if (isRegExp(arg)) {\n            return this.filter(function(relativePath, file) {\n                return file.dir && arg.test(relativePath);\n            });\n        }\n\n        // else, name is a new folder\n        var name = this.root + arg;\n        var newFolder = folderAdd.call(this, name);\n\n        // Allow chaining by returning a new object with this folder as the root\n        var ret = this.clone();\n        ret.root = newFolder.name;\n        return ret;\n    },\n\n    /**\n     * Delete a file, or a directory and all sub-files, from the zip\n     * @param {string} name the name of the file to delete\n     * @return {JSZip} this JSZip object\n     */\n    remove: function(name) {\n        name = this.root + name;\n        var file = this.files[name];\n        if (!file) {\n            // Look for any folders\n            if (name.slice(-1) !== \"/\") {\n                name += \"/\";\n            }\n            file = this.files[name];\n        }\n\n        if (file && !file.dir) {\n            // file\n            delete this.files[name];\n        } else {\n            // maybe a folder, delete recursively\n            var kids = this.filter(function(relativePath, file) {\n                return file.name.slice(0, name.length) === name;\n            });\n            for (var i = 0; i < kids.length; i++) {\n                delete this.files[kids[i].name];\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * @deprecated This method has been removed in JSZip 3.0, please check the upgrade guide.\n     */\n    generate: function() {\n        throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n    },\n\n    /**\n     * Generate the complete zip file as an internal stream.\n     * @param {Object} options the options to generate the zip file :\n     * - compression, \"STORE\" by default.\n     * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n     * @return {StreamHelper} the streamed zip file.\n     */\n    generateInternalStream: function(options) {\n        var worker, opts = {};\n        try {\n            opts = utils.extend(options || {}, {\n                streamFiles: false,\n                compression: \"STORE\",\n                compressionOptions : null,\n                type: \"\",\n                platform: \"DOS\",\n                comment: null,\n                mimeType: \"application/zip\",\n                encodeFileName: utf8.utf8encode\n            });\n\n            opts.type = opts.type.toLowerCase();\n            opts.compression = opts.compression.toUpperCase();\n\n            // \"binarystring\" is preferred but the internals use \"string\".\n            if(opts.type === \"binarystring\") {\n                opts.type = \"string\";\n            }\n\n            if (!opts.type) {\n                throw new Error(\"No output type specified.\");\n            }\n\n            utils.checkSupport(opts.type);\n\n            // accept nodejs `process.platform`\n            if(\n                opts.platform === \"darwin\" ||\n                opts.platform === \"freebsd\" ||\n                opts.platform === \"linux\" ||\n                opts.platform === \"sunos\"\n            ) {\n                opts.platform = \"UNIX\";\n            }\n            if (opts.platform === \"win32\") {\n                opts.platform = \"DOS\";\n            }\n\n            var comment = opts.comment || this.comment || \"\";\n            worker = generate.generateWorker(this, opts, comment);\n        } catch (e) {\n            worker = new GenericWorker(\"error\");\n            worker.error(e);\n        }\n        return new StreamHelper(worker, opts.type || \"string\", opts.mimeType);\n    },\n    /**\n     * Generate the complete zip file asynchronously.\n     * @see generateInternalStream\n     */\n    generateAsync: function(options, onUpdate) {\n        return this.generateInternalStream(options).accumulate(onUpdate);\n    },\n    /**\n     * Generate the complete zip file asynchronously.\n     * @see generateInternalStream\n     */\n    generateNodeStream: function(options, onUpdate) {\n        options = options || {};\n        if (!options.type) {\n            options.type = \"nodebuffer\";\n        }\n        return this.generateInternalStream(options).toNodejsStream(onUpdate);\n    }\n};\nmodule.exports = out;\n\n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(require,module,exports){\n\"use strict\";\n/*\n * This file is used by module bundlers (browserify/webpack/etc) when\n * including a stream implementation. We use \"readable-stream\" to get a\n * consistent behavior between nodejs versions but bundlers often have a shim\n * for \"stream\". Using this shim greatly improve the compatibility and greatly\n * reduce the final size of the bundle (only one stream implementation, not\n * two).\n */\nmodule.exports = require(\"stream\");\n\n},{\"stream\":undefined}],17:[function(require,module,exports){\n\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction ArrayReader(data) {\n    DataReader.call(this, data);\n    for(var i = 0; i < this.data.length; i++) {\n        data[i] = data[i] & 0xFF;\n    }\n}\nutils.inherits(ArrayReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nArrayReader.prototype.byteAt = function(i) {\n    return this.data[this.zero + i];\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nArrayReader.prototype.lastIndexOfSignature = function(sig) {\n    var sig0 = sig.charCodeAt(0),\n        sig1 = sig.charCodeAt(1),\n        sig2 = sig.charCodeAt(2),\n        sig3 = sig.charCodeAt(3);\n    for (var i = this.length - 4; i >= 0; --i) {\n        if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {\n            return i - this.zero;\n        }\n    }\n\n    return -1;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nArrayReader.prototype.readAndCheckSignature = function (sig) {\n    var sig0 = sig.charCodeAt(0),\n        sig1 = sig.charCodeAt(1),\n        sig2 = sig.charCodeAt(2),\n        sig3 = sig.charCodeAt(3),\n        data = this.readData(4);\n    return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3];\n};\n/**\n * @see DataReader.readData\n */\nArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        return [];\n    }\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = ArrayReader;\n\n},{\"../utils\":32,\"./DataReader\":18}],18:[function(require,module,exports){\n\"use strict\";\nvar utils = require(\"../utils\");\n\nfunction DataReader(data) {\n    this.data = data; // type : see implementation\n    this.length = data.length;\n    this.index = 0;\n    this.zero = 0;\n}\nDataReader.prototype = {\n    /**\n     * Check that the offset will not go too far.\n     * @param {string} offset the additional offset to check.\n     * @throws {Error} an Error if the offset is out of bounds.\n     */\n    checkOffset: function(offset) {\n        this.checkIndex(this.index + offset);\n    },\n    /**\n     * Check that the specified index will not be too far.\n     * @param {string} newIndex the index to check.\n     * @throws {Error} an Error if the index is out of bounds.\n     */\n    checkIndex: function(newIndex) {\n        if (this.length < this.zero + newIndex || newIndex < 0) {\n            throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + (newIndex) + \"). Corrupted zip ?\");\n        }\n    },\n    /**\n     * Change the index.\n     * @param {number} newIndex The new index.\n     * @throws {Error} if the new index is out of the data.\n     */\n    setIndex: function(newIndex) {\n        this.checkIndex(newIndex);\n        this.index = newIndex;\n    },\n    /**\n     * Skip the next n bytes.\n     * @param {number} n the number of bytes to skip.\n     * @throws {Error} if the new index is out of the data.\n     */\n    skip: function(n) {\n        this.setIndex(this.index + n);\n    },\n    /**\n     * Get the byte at the specified index.\n     * @param {number} i the index to use.\n     * @return {number} a byte.\n     */\n    byteAt: function() {\n        // see implementations\n    },\n    /**\n     * Get the next number with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {number} the corresponding number.\n     */\n    readInt: function(size) {\n        var result = 0,\n            i;\n        this.checkOffset(size);\n        for (i = this.index + size - 1; i >= this.index; i--) {\n            result = (result << 8) + this.byteAt(i);\n        }\n        this.index += size;\n        return result;\n    },\n    /**\n     * Get the next string with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {string} the corresponding string.\n     */\n    readString: function(size) {\n        return utils.transformTo(\"string\", this.readData(size));\n    },\n    /**\n     * Get raw data without conversion, <size> bytes.\n     * @param {number} size the number of bytes to read.\n     * @return {Object} the raw data, implementation specific.\n     */\n    readData: function() {\n        // see implementations\n    },\n    /**\n     * Find the last occurrence of a zip signature (4 bytes).\n     * @param {string} sig the signature to find.\n     * @return {number} the index of the last occurrence, -1 if not found.\n     */\n    lastIndexOfSignature: function() {\n        // see implementations\n    },\n    /**\n     * Read the signature (4 bytes) at the current position and compare it with sig.\n     * @param {string} sig the expected signature\n     * @return {boolean} true if the signature matches, false otherwise.\n     */\n    readAndCheckSignature: function() {\n        // see implementations\n    },\n    /**\n     * Get the next date.\n     * @return {Date} the date.\n     */\n    readDate: function() {\n        var dostime = this.readInt(4);\n        return new Date(Date.UTC(\n            ((dostime >> 25) & 0x7f) + 1980, // year\n            ((dostime >> 21) & 0x0f) - 1, // month\n            (dostime >> 16) & 0x1f, // day\n            (dostime >> 11) & 0x1f, // hour\n            (dostime >> 5) & 0x3f, // minute\n            (dostime & 0x1f) << 1)); // second\n    }\n};\nmodule.exports = DataReader;\n\n},{\"../utils\":32}],19:[function(require,module,exports){\n\"use strict\";\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction NodeBufferReader(data) {\n    Uint8ArrayReader.call(this, data);\n}\nutils.inherits(NodeBufferReader, Uint8ArrayReader);\n\n/**\n * @see DataReader.readData\n */\nNodeBufferReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = NodeBufferReader;\n\n},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(require,module,exports){\n\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction StringReader(data) {\n    DataReader.call(this, data);\n}\nutils.inherits(StringReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nStringReader.prototype.byteAt = function(i) {\n    return this.data.charCodeAt(this.zero + i);\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nStringReader.prototype.lastIndexOfSignature = function(sig) {\n    return this.data.lastIndexOf(sig) - this.zero;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nStringReader.prototype.readAndCheckSignature = function (sig) {\n    var data = this.readData(4);\n    return sig === data;\n};\n/**\n * @see DataReader.readData\n */\nStringReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    // this will work because the constructor applied the \"& 0xff\" mask.\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = StringReader;\n\n},{\"../utils\":32,\"./DataReader\":18}],21:[function(require,module,exports){\n\"use strict\";\nvar ArrayReader = require(\"./ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction Uint8ArrayReader(data) {\n    ArrayReader.call(this, data);\n}\nutils.inherits(Uint8ArrayReader, ArrayReader);\n/**\n * @see DataReader.readData\n */\nUint8ArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].\n        return new Uint8Array(0);\n    }\n    var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = Uint8ArrayReader;\n\n},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar support = require(\"../support\");\nvar ArrayReader = require(\"./ArrayReader\");\nvar StringReader = require(\"./StringReader\");\nvar NodeBufferReader = require(\"./NodeBufferReader\");\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\n\n/**\n * Create a reader adapted to the data.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read.\n * @return {DataReader} the data reader.\n */\nmodule.exports = function (data) {\n    var type = utils.getTypeOf(data);\n    utils.checkSupport(type);\n    if (type === \"string\" && !support.uint8array) {\n        return new StringReader(data);\n    }\n    if (type === \"nodebuffer\") {\n        return new NodeBufferReader(data);\n    }\n    if (support.uint8array) {\n        return new Uint8ArrayReader(utils.transformTo(\"uint8array\", data));\n    }\n    return new ArrayReader(utils.transformTo(\"array\", data));\n};\n\n},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(require,module,exports){\n\"use strict\";\nexports.LOCAL_FILE_HEADER = \"PK\\x03\\x04\";\nexports.CENTRAL_FILE_HEADER = \"PK\\x01\\x02\";\nexports.CENTRAL_DIRECTORY_END = \"PK\\x05\\x06\";\nexports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\\x06\\x07\";\nexports.ZIP64_CENTRAL_DIRECTORY_END = \"PK\\x06\\x06\";\nexports.DATA_DESCRIPTOR = \"PK\\x07\\x08\";\n\n},{}],24:[function(require,module,exports){\n\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which convert chunks to a specified type.\n * @constructor\n * @param {String} destType the destination type.\n */\nfunction ConvertWorker(destType) {\n    GenericWorker.call(this, \"ConvertWorker to \" + destType);\n    this.destType = destType;\n}\nutils.inherits(ConvertWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nConvertWorker.prototype.processChunk = function (chunk) {\n    this.push({\n        data : utils.transformTo(this.destType, chunk.data),\n        meta : chunk.meta\n    });\n};\nmodule.exports = ConvertWorker;\n\n},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(require,module,exports){\n\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar crc32 = require(\"../crc32\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which calculate the crc32 of the data flowing through.\n * @constructor\n */\nfunction Crc32Probe() {\n    GenericWorker.call(this, \"Crc32Probe\");\n    this.withStreamInfo(\"crc32\", 0);\n}\nutils.inherits(Crc32Probe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nCrc32Probe.prototype.processChunk = function (chunk) {\n    this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0);\n    this.push(chunk);\n};\nmodule.exports = Crc32Probe;\n\n},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n/**\n * A worker which calculate the total length of the data flowing through.\n * @constructor\n * @param {String} propName the name used to expose the length\n */\nfunction DataLengthProbe(propName) {\n    GenericWorker.call(this, \"DataLengthProbe for \" + propName);\n    this.propName = propName;\n    this.withStreamInfo(propName, 0);\n}\nutils.inherits(DataLengthProbe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nDataLengthProbe.prototype.processChunk = function (chunk) {\n    if(chunk) {\n        var length = this.streamInfo[this.propName] || 0;\n        this.streamInfo[this.propName] = length + chunk.data.length;\n    }\n    GenericWorker.prototype.processChunk.call(this, chunk);\n};\nmodule.exports = DataLengthProbe;\n\n\n},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n// the size of the generated chunks\n// TODO expose this as a public variable\nvar DEFAULT_BLOCK_SIZE = 16 * 1024;\n\n/**\n * A worker that reads a content and emits chunks.\n * @constructor\n * @param {Promise} dataP the promise of the data to split\n */\nfunction DataWorker(dataP) {\n    GenericWorker.call(this, \"DataWorker\");\n    var self = this;\n    this.dataIsReady = false;\n    this.index = 0;\n    this.max = 0;\n    this.data = null;\n    this.type = \"\";\n\n    this._tickScheduled = false;\n\n    dataP.then(function (data) {\n        self.dataIsReady = true;\n        self.data = data;\n        self.max = data && data.length || 0;\n        self.type = utils.getTypeOf(data);\n        if(!self.isPaused) {\n            self._tickAndRepeat();\n        }\n    }, function (e) {\n        self.error(e);\n    });\n}\n\nutils.inherits(DataWorker, GenericWorker);\n\n/**\n * @see GenericWorker.cleanUp\n */\nDataWorker.prototype.cleanUp = function () {\n    GenericWorker.prototype.cleanUp.call(this);\n    this.data = null;\n};\n\n/**\n * @see GenericWorker.resume\n */\nDataWorker.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if (!this._tickScheduled && this.dataIsReady) {\n        this._tickScheduled = true;\n        utils.delay(this._tickAndRepeat, [], this);\n    }\n    return true;\n};\n\n/**\n * Trigger a tick a schedule an other call to this function.\n */\nDataWorker.prototype._tickAndRepeat = function() {\n    this._tickScheduled = false;\n    if(this.isPaused || this.isFinished) {\n        return;\n    }\n    this._tick();\n    if(!this.isFinished) {\n        utils.delay(this._tickAndRepeat, [], this);\n        this._tickScheduled = true;\n    }\n};\n\n/**\n * Read and push a chunk.\n */\nDataWorker.prototype._tick = function() {\n\n    if(this.isPaused || this.isFinished) {\n        return false;\n    }\n\n    var size = DEFAULT_BLOCK_SIZE;\n    var data = null, nextIndex = Math.min(this.max, this.index + size);\n    if (this.index >= this.max) {\n        // EOF\n        return this.end();\n    } else {\n        switch(this.type) {\n        case \"string\":\n            data = this.data.substring(this.index, nextIndex);\n            break;\n        case \"uint8array\":\n            data = this.data.subarray(this.index, nextIndex);\n            break;\n        case \"array\":\n        case \"nodebuffer\":\n            data = this.data.slice(this.index, nextIndex);\n            break;\n        }\n        this.index = nextIndex;\n        return this.push({\n            data : data,\n            meta : {\n                percent : this.max ? this.index / this.max * 100 : 0\n            }\n        });\n    }\n};\n\nmodule.exports = DataWorker;\n\n},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(require,module,exports){\n\"use strict\";\n\n/**\n * A worker that does nothing but passing chunks to the next one. This is like\n * a nodejs stream but with some differences. On the good side :\n * - it works on IE 6-9 without any issue / polyfill\n * - it weights less than the full dependencies bundled with browserify\n * - it forwards errors (no need to declare an error handler EVERYWHERE)\n *\n * A chunk is an object with 2 attributes : `meta` and `data`. The former is an\n * object containing anything (`percent` for example), see each worker for more\n * details. The latter is the real data (String, Uint8Array, etc).\n *\n * @constructor\n * @param {String} name the name of the stream (mainly used for debugging purposes)\n */\nfunction GenericWorker(name) {\n    // the name of the worker\n    this.name = name || \"default\";\n    // an object containing metadata about the workers chain\n    this.streamInfo = {};\n    // an error which happened when the worker was paused\n    this.generatedError = null;\n    // an object containing metadata to be merged by this worker into the general metadata\n    this.extraStreamInfo = {};\n    // true if the stream is paused (and should not do anything), false otherwise\n    this.isPaused = true;\n    // true if the stream is finished (and should not do anything), false otherwise\n    this.isFinished = false;\n    // true if the stream is locked to prevent further structure updates (pipe), false otherwise\n    this.isLocked = false;\n    // the event listeners\n    this._listeners = {\n        \"data\":[],\n        \"end\":[],\n        \"error\":[]\n    };\n    // the previous worker, if any\n    this.previous = null;\n}\n\nGenericWorker.prototype = {\n    /**\n     * Push a chunk to the next workers.\n     * @param {Object} chunk the chunk to push\n     */\n    push : function (chunk) {\n        this.emit(\"data\", chunk);\n    },\n    /**\n     * End the stream.\n     * @return {Boolean} true if this call ended the worker, false otherwise.\n     */\n    end : function () {\n        if (this.isFinished) {\n            return false;\n        }\n\n        this.flush();\n        try {\n            this.emit(\"end\");\n            this.cleanUp();\n            this.isFinished = true;\n        } catch (e) {\n            this.emit(\"error\", e);\n        }\n        return true;\n    },\n    /**\n     * End the stream with an error.\n     * @param {Error} e the error which caused the premature end.\n     * @return {Boolean} true if this call ended the worker with an error, false otherwise.\n     */\n    error : function (e) {\n        if (this.isFinished) {\n            return false;\n        }\n\n        if(this.isPaused) {\n            this.generatedError = e;\n        } else {\n            this.isFinished = true;\n\n            this.emit(\"error\", e);\n\n            // in the workers chain exploded in the middle of the chain,\n            // the error event will go downward but we also need to notify\n            // workers upward that there has been an error.\n            if(this.previous) {\n                this.previous.error(e);\n            }\n\n            this.cleanUp();\n        }\n        return true;\n    },\n    /**\n     * Add a callback on an event.\n     * @param {String} name the name of the event (data, end, error)\n     * @param {Function} listener the function to call when the event is triggered\n     * @return {GenericWorker} the current object for chainability\n     */\n    on : function (name, listener) {\n        this._listeners[name].push(listener);\n        return this;\n    },\n    /**\n     * Clean any references when a worker is ending.\n     */\n    cleanUp : function () {\n        this.streamInfo = this.generatedError = this.extraStreamInfo = null;\n        this._listeners = [];\n    },\n    /**\n     * Trigger an event. This will call registered callback with the provided arg.\n     * @param {String} name the name of the event (data, end, error)\n     * @param {Object} arg the argument to call the callback with.\n     */\n    emit : function (name, arg) {\n        if (this._listeners[name]) {\n            for(var i = 0; i < this._listeners[name].length; i++) {\n                this._listeners[name][i].call(this, arg);\n            }\n        }\n    },\n    /**\n     * Chain a worker with an other.\n     * @param {Worker} next the worker receiving events from the current one.\n     * @return {worker} the next worker for chainability\n     */\n    pipe : function (next) {\n        return next.registerPrevious(this);\n    },\n    /**\n     * Same as `pipe` in the other direction.\n     * Using an API with `pipe(next)` is very easy.\n     * Implementing the API with the point of view of the next one registering\n     * a source is easier, see the ZipFileWorker.\n     * @param {Worker} previous the previous worker, sending events to this one\n     * @return {Worker} the current worker for chainability\n     */\n    registerPrevious : function (previous) {\n        if (this.isLocked) {\n            throw new Error(\"The stream '\" + this + \"' has already been used.\");\n        }\n\n        // sharing the streamInfo...\n        this.streamInfo = previous.streamInfo;\n        // ... and adding our own bits\n        this.mergeStreamInfo();\n        this.previous =  previous;\n        var self = this;\n        previous.on(\"data\", function (chunk) {\n            self.processChunk(chunk);\n        });\n        previous.on(\"end\", function () {\n            self.end();\n        });\n        previous.on(\"error\", function (e) {\n            self.error(e);\n        });\n        return this;\n    },\n    /**\n     * Pause the stream so it doesn't send events anymore.\n     * @return {Boolean} true if this call paused the worker, false otherwise.\n     */\n    pause : function () {\n        if(this.isPaused || this.isFinished) {\n            return false;\n        }\n        this.isPaused = true;\n\n        if(this.previous) {\n            this.previous.pause();\n        }\n        return true;\n    },\n    /**\n     * Resume a paused stream.\n     * @return {Boolean} true if this call resumed the worker, false otherwise.\n     */\n    resume : function () {\n        if(!this.isPaused || this.isFinished) {\n            return false;\n        }\n        this.isPaused = false;\n\n        // if true, the worker tried to resume but failed\n        var withError = false;\n        if(this.generatedError) {\n            this.error(this.generatedError);\n            withError = true;\n        }\n        if(this.previous) {\n            this.previous.resume();\n        }\n\n        return !withError;\n    },\n    /**\n     * Flush any remaining bytes as the stream is ending.\n     */\n    flush : function () {},\n    /**\n     * Process a chunk. This is usually the method overridden.\n     * @param {Object} chunk the chunk to process.\n     */\n    processChunk : function(chunk) {\n        this.push(chunk);\n    },\n    /**\n     * Add a key/value to be added in the workers chain streamInfo once activated.\n     * @param {String} key the key to use\n     * @param {Object} value the associated value\n     * @return {Worker} the current worker for chainability\n     */\n    withStreamInfo : function (key, value) {\n        this.extraStreamInfo[key] = value;\n        this.mergeStreamInfo();\n        return this;\n    },\n    /**\n     * Merge this worker's streamInfo into the chain's streamInfo.\n     */\n    mergeStreamInfo : function () {\n        for(var key in this.extraStreamInfo) {\n            if (!Object.prototype.hasOwnProperty.call(this.extraStreamInfo, key)) {\n                continue;\n            }\n            this.streamInfo[key] = this.extraStreamInfo[key];\n        }\n    },\n\n    /**\n     * Lock the stream to prevent further updates on the workers chain.\n     * After calling this method, all calls to pipe will fail.\n     */\n    lock: function () {\n        if (this.isLocked) {\n            throw new Error(\"The stream '\" + this + \"' has already been used.\");\n        }\n        this.isLocked = true;\n        if (this.previous) {\n            this.previous.lock();\n        }\n    },\n\n    /**\n     *\n     * Pretty print the workers chain.\n     */\n    toString : function () {\n        var me = \"Worker \" + this.name;\n        if (this.previous) {\n            return this.previous + \" -> \" + me;\n        } else {\n            return me;\n        }\n    }\n};\n\nmodule.exports = GenericWorker;\n\n},{}],29:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"../utils\");\nvar ConvertWorker = require(\"./ConvertWorker\");\nvar GenericWorker = require(\"./GenericWorker\");\nvar base64 = require(\"../base64\");\nvar support = require(\"../support\");\nvar external = require(\"../external\");\n\nvar NodejsStreamOutputAdapter = null;\nif (support.nodestream) {\n    try {\n        NodejsStreamOutputAdapter = require(\"../nodejs/NodejsStreamOutputAdapter\");\n    } catch(e) {\n        // ignore\n    }\n}\n\n/**\n * Apply the final transformation of the data. If the user wants a Blob for\n * example, it's easier to work with an U8intArray and finally do the\n * ArrayBuffer/Blob conversion.\n * @param {String} type the name of the final type\n * @param {String|Uint8Array|Buffer} content the content to transform\n * @param {String} mimeType the mime type of the content, if applicable.\n * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format.\n */\nfunction transformZipOutput(type, content, mimeType) {\n    switch(type) {\n    case \"blob\" :\n        return utils.newBlob(utils.transformTo(\"arraybuffer\", content), mimeType);\n    case \"base64\" :\n        return base64.encode(content);\n    default :\n        return utils.transformTo(type, content);\n    }\n}\n\n/**\n * Concatenate an array of data of the given type.\n * @param {String} type the type of the data in the given array.\n * @param {Array} dataArray the array containing the data chunks to concatenate\n * @return {String|Uint8Array|Buffer} the concatenated data\n * @throws Error if the asked type is unsupported\n */\nfunction concat (type, dataArray) {\n    var i, index = 0, res = null, totalLength = 0;\n    for(i = 0; i < dataArray.length; i++) {\n        totalLength += dataArray[i].length;\n    }\n    switch(type) {\n    case \"string\":\n        return dataArray.join(\"\");\n    case \"array\":\n        return Array.prototype.concat.apply([], dataArray);\n    case \"uint8array\":\n        res = new Uint8Array(totalLength);\n        for(i = 0; i < dataArray.length; i++) {\n            res.set(dataArray[i], index);\n            index += dataArray[i].length;\n        }\n        return res;\n    case \"nodebuffer\":\n        return Buffer.concat(dataArray);\n    default:\n        throw new Error(\"concat : unsupported type '\"  + type + \"'\");\n    }\n}\n\n/**\n * Listen a StreamHelper, accumulate its content and concatenate it into a\n * complete block.\n * @param {StreamHelper} helper the helper to use.\n * @param {Function} updateCallback a callback called on each update. Called\n * with one arg :\n * - the metadata linked to the update received.\n * @return Promise the promise for the accumulation.\n */\nfunction accumulate(helper, updateCallback) {\n    return new external.Promise(function (resolve, reject){\n        var dataArray = [];\n        var chunkType = helper._internalType,\n            resultType = helper._outputType,\n            mimeType = helper._mimeType;\n        helper\n            .on(\"data\", function (data, meta) {\n                dataArray.push(data);\n                if(updateCallback) {\n                    updateCallback(meta);\n                }\n            })\n            .on(\"error\", function(err) {\n                dataArray = [];\n                reject(err);\n            })\n            .on(\"end\", function (){\n                try {\n                    var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);\n                    resolve(result);\n                } catch (e) {\n                    reject(e);\n                }\n                dataArray = [];\n            })\n            .resume();\n    });\n}\n\n/**\n * An helper to easily use workers outside of JSZip.\n * @constructor\n * @param {Worker} worker the worker to wrap\n * @param {String} outputType the type of data expected by the use\n * @param {String} mimeType the mime type of the content, if applicable.\n */\nfunction StreamHelper(worker, outputType, mimeType) {\n    var internalType = outputType;\n    switch(outputType) {\n    case \"blob\":\n    case \"arraybuffer\":\n        internalType = \"uint8array\";\n        break;\n    case \"base64\":\n        internalType = \"string\";\n        break;\n    }\n\n    try {\n        // the type used internally\n        this._internalType = internalType;\n        // the type used to output results\n        this._outputType = outputType;\n        // the mime type\n        this._mimeType = mimeType;\n        utils.checkSupport(internalType);\n        this._worker = worker.pipe(new ConvertWorker(internalType));\n        // the last workers can be rewired without issues but we need to\n        // prevent any updates on previous workers.\n        worker.lock();\n    } catch(e) {\n        this._worker = new GenericWorker(\"error\");\n        this._worker.error(e);\n    }\n}\n\nStreamHelper.prototype = {\n    /**\n     * Listen a StreamHelper, accumulate its content and concatenate it into a\n     * complete block.\n     * @param {Function} updateCb the update callback.\n     * @return Promise the promise for the accumulation.\n     */\n    accumulate : function (updateCb) {\n        return accumulate(this, updateCb);\n    },\n    /**\n     * Add a listener on an event triggered on a stream.\n     * @param {String} evt the name of the event\n     * @param {Function} fn the listener\n     * @return {StreamHelper} the current helper.\n     */\n    on : function (evt, fn) {\n        var self = this;\n\n        if(evt === \"data\") {\n            this._worker.on(evt, function (chunk) {\n                fn.call(self, chunk.data, chunk.meta);\n            });\n        } else {\n            this._worker.on(evt, function () {\n                utils.delay(fn, arguments, self);\n            });\n        }\n        return this;\n    },\n    /**\n     * Resume the flow of chunks.\n     * @return {StreamHelper} the current helper.\n     */\n    resume : function () {\n        utils.delay(this._worker.resume, [], this._worker);\n        return this;\n    },\n    /**\n     * Pause the flow of chunks.\n     * @return {StreamHelper} the current helper.\n     */\n    pause : function () {\n        this._worker.pause();\n        return this;\n    },\n    /**\n     * Return a nodejs stream for this helper.\n     * @param {Function} updateCb the update callback.\n     * @return {NodejsStreamOutputAdapter} the nodejs stream.\n     */\n    toNodejsStream : function (updateCb) {\n        utils.checkSupport(\"nodestream\");\n        if (this._outputType !== \"nodebuffer\") {\n            // an object stream containing blob/arraybuffer/uint8array/string\n            // is strange and I don't know if it would be useful.\n            // I you find this comment and have a good usecase, please open a\n            // bug report !\n            throw new Error(this._outputType + \" is not supported by this method\");\n        }\n\n        return new NodejsStreamOutputAdapter(this, {\n            objectMode : this._outputType !== \"nodebuffer\"\n        }, updateCb);\n    }\n};\n\n\nmodule.exports = StreamHelper;\n\n},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(require,module,exports){\n\"use strict\";\n\nexports.base64 = true;\nexports.array = true;\nexports.string = true;\nexports.arraybuffer = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\nexports.nodebuffer = typeof Buffer !== \"undefined\";\n// contains true if JSZip can read/generate Uint8Array, false otherwise.\nexports.uint8array = typeof Uint8Array !== \"undefined\";\n\nif (typeof ArrayBuffer === \"undefined\") {\n    exports.blob = false;\n}\nelse {\n    var buffer = new ArrayBuffer(0);\n    try {\n        exports.blob = new Blob([buffer], {\n            type: \"application/zip\"\n        }).size === 0;\n    }\n    catch (e) {\n        try {\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(buffer);\n            exports.blob = builder.getBlob(\"application/zip\").size === 0;\n        }\n        catch (e) {\n            exports.blob = false;\n        }\n    }\n}\n\ntry {\n    exports.nodestream = !!require(\"readable-stream\").Readable;\n} catch(e) {\n    exports.nodestream = false;\n}\n\n},{\"readable-stream\":16}],31:[function(require,module,exports){\n\"use strict\";\n\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * The following functions come from pako, from pako/lib/utils/strings\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new Array(256);\nfor (var i=0; i<256; i++) {\n    _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n}\n_utf8len[254]=_utf8len[254]=1; // Invalid sequence start\n\n// convert string to array (typed, when possible)\nvar string2buf = function (str) {\n    var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n    // count binary size\n    for (m_pos = 0; m_pos < str_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n    }\n\n    // allocate buffer\n    if (support.uint8array) {\n        buf = new Uint8Array(buf_len);\n    } else {\n        buf = new Array(buf_len);\n    }\n\n    // convert\n    for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        if (c < 0x80) {\n            /* one byte */\n            buf[i++] = c;\n        } else if (c < 0x800) {\n            /* two bytes */\n            buf[i++] = 0xC0 | (c >>> 6);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else if (c < 0x10000) {\n            /* three bytes */\n            buf[i++] = 0xE0 | (c >>> 12);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else {\n            /* four bytes */\n            buf[i++] = 0xf0 | (c >>> 18);\n            buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        }\n    }\n\n    return buf;\n};\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nvar utf8border = function(buf, max) {\n    var pos;\n\n    max = max || buf.length;\n    if (max > buf.length) { max = buf.length; }\n\n    // go back from last position, until start of sequence found\n    pos = max-1;\n    while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n    // Fuckup - very small and broken sequence,\n    // return max, because we should return something anyway.\n    if (pos < 0) { return max; }\n\n    // If we came to start of buffer - that means vuffer is too small,\n    // return max too.\n    if (pos === 0) { return max; }\n\n    return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n// convert array to string\nvar buf2string = function (buf) {\n    var i, out, c, c_len;\n    var len = buf.length;\n\n    // Reserve max possible length (2 words per char)\n    // NB: by unknown reasons, Array is significantly faster for\n    //     String.fromCharCode.apply than Uint16Array.\n    var utf16buf = new Array(len*2);\n\n    for (out=0, i=0; i<len;) {\n        c = buf[i++];\n        // quick process ascii\n        if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n        c_len = _utf8len[c];\n        // skip 5 & 6 byte codes\n        if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n        // apply mask on first byte\n        c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n        // join the rest\n        while (c_len > 1 && i < len) {\n            c = (c << 6) | (buf[i++] & 0x3f);\n            c_len--;\n        }\n\n        // terminated by end of string?\n        if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n        if (c < 0x10000) {\n            utf16buf[out++] = c;\n        } else {\n            c -= 0x10000;\n            utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n            utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n        }\n    }\n\n    // shrinkBuf(utf16buf, out)\n    if (utf16buf.length !== out) {\n        if(utf16buf.subarray) {\n            utf16buf = utf16buf.subarray(0, out);\n        } else {\n            utf16buf.length = out;\n        }\n    }\n\n    // return String.fromCharCode.apply(null, utf16buf);\n    return utils.applyFromCharCode(utf16buf);\n};\n\n\n// That's all for the pako functions.\n\n\n/**\n * Transform a javascript string into an array (typed if possible) of bytes,\n * UTF-8 encoded.\n * @param {String} str the string to encode\n * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.\n */\nexports.utf8encode = function utf8encode(str) {\n    if (support.nodebuffer) {\n        return nodejsUtils.newBufferFrom(str, \"utf-8\");\n    }\n\n    return string2buf(str);\n};\n\n\n/**\n * Transform a bytes array (or a representation) representing an UTF-8 encoded\n * string into a javascript string.\n * @param {Array|Uint8Array|Buffer} buf the data de decode\n * @return {String} the decoded string.\n */\nexports.utf8decode = function utf8decode(buf) {\n    if (support.nodebuffer) {\n        return utils.transformTo(\"nodebuffer\", buf).toString(\"utf-8\");\n    }\n\n    buf = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", buf);\n\n    return buf2string(buf);\n};\n\n/**\n * A worker to decode utf8 encoded binary chunks into string chunks.\n * @constructor\n */\nfunction Utf8DecodeWorker() {\n    GenericWorker.call(this, \"utf-8 decode\");\n    // the last bytes if a chunk didn't end with a complete codepoint.\n    this.leftOver = null;\n}\nutils.inherits(Utf8DecodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8DecodeWorker.prototype.processChunk = function (chunk) {\n\n    var data = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", chunk.data);\n\n    // 1st step, re-use what's left of the previous chunk\n    if (this.leftOver && this.leftOver.length) {\n        if(support.uint8array) {\n            var previousData = data;\n            data = new Uint8Array(previousData.length + this.leftOver.length);\n            data.set(this.leftOver, 0);\n            data.set(previousData, this.leftOver.length);\n        } else {\n            data = this.leftOver.concat(data);\n        }\n        this.leftOver = null;\n    }\n\n    var nextBoundary = utf8border(data);\n    var usableData = data;\n    if (nextBoundary !== data.length) {\n        if (support.uint8array) {\n            usableData = data.subarray(0, nextBoundary);\n            this.leftOver = data.subarray(nextBoundary, data.length);\n        } else {\n            usableData = data.slice(0, nextBoundary);\n            this.leftOver = data.slice(nextBoundary, data.length);\n        }\n    }\n\n    this.push({\n        data : exports.utf8decode(usableData),\n        meta : chunk.meta\n    });\n};\n\n/**\n * @see GenericWorker.flush\n */\nUtf8DecodeWorker.prototype.flush = function () {\n    if(this.leftOver && this.leftOver.length) {\n        this.push({\n            data : exports.utf8decode(this.leftOver),\n            meta : {}\n        });\n        this.leftOver = null;\n    }\n};\nexports.Utf8DecodeWorker = Utf8DecodeWorker;\n\n/**\n * A worker to endcode string chunks into utf8 encoded binary chunks.\n * @constructor\n */\nfunction Utf8EncodeWorker() {\n    GenericWorker.call(this, \"utf-8 encode\");\n}\nutils.inherits(Utf8EncodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8EncodeWorker.prototype.processChunk = function (chunk) {\n    this.push({\n        data : exports.utf8encode(chunk.data),\n        meta : chunk.meta\n    });\n};\nexports.Utf8EncodeWorker = Utf8EncodeWorker;\n\n},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(require,module,exports){\n\"use strict\";\n\nvar support = require(\"./support\");\nvar base64 = require(\"./base64\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar external = require(\"./external\");\nrequire(\"setimmediate\");\n\n\n/**\n * Convert a string that pass as a \"binary string\": it should represent a byte\n * array but may have > 255 char codes. Be sure to take only the first byte\n * and returns the byte array.\n * @param {String} str the string to transform.\n * @return {Array|Uint8Array} the string in a binary format.\n */\nfunction string2binary(str) {\n    var result = null;\n    if (support.uint8array) {\n        result = new Uint8Array(str.length);\n    } else {\n        result = new Array(str.length);\n    }\n    return stringToArrayLike(str, result);\n}\n\n/**\n * Create a new blob with the given content and the given type.\n * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use\n * an Uint8Array because the stock browser of android 4 won't accept it (it\n * will be silently converted to a string, \"[object Uint8Array]\").\n *\n * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:\n * when a large amount of Array is used to create the Blob, the amount of\n * memory consumed is nearly 100 times the original data amount.\n *\n * @param {String} type the mime type of the blob.\n * @return {Blob} the created blob.\n */\nexports.newBlob = function(part, type) {\n    exports.checkSupport(\"blob\");\n\n    try {\n        // Blob constructor\n        return new Blob([part], {\n            type: type\n        });\n    }\n    catch (e) {\n\n        try {\n            // deprecated, browser only, old way\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(part);\n            return builder.getBlob(type);\n        }\n        catch (e) {\n\n            // well, fuck ?!\n            throw new Error(\"Bug : can't construct the Blob.\");\n        }\n    }\n\n\n};\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\nfunction identity(input) {\n    return input;\n}\n\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\nfunction stringToArrayLike(str, array) {\n    for (var i = 0; i < str.length; ++i) {\n        array[i] = str.charCodeAt(i) & 0xFF;\n    }\n    return array;\n}\n\n/**\n * An helper for the function arrayLikeToString.\n * This contains static information and functions that\n * can be optimized by the browser JIT compiler.\n */\nvar arrayToStringHelper = {\n    /**\n     * Transform an array of int into a string, chunk by chunk.\n     * See the performances notes on arrayLikeToString.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @param {String} type the type of the array.\n     * @param {Integer} chunk the chunk size.\n     * @return {String} the resulting string.\n     * @throws Error if the chunk is too big for the stack.\n     */\n    stringifyByChunk: function(array, type, chunk) {\n        var result = [], k = 0, len = array.length;\n        // shortcut\n        if (len <= chunk) {\n            return String.fromCharCode.apply(null, array);\n        }\n        while (k < len) {\n            if (type === \"array\" || type === \"nodebuffer\") {\n                result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n            }\n            else {\n                result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n            }\n            k += chunk;\n        }\n        return result.join(\"\");\n    },\n    /**\n     * Call String.fromCharCode on every item in the array.\n     * This is the naive implementation, which generate A LOT of intermediate string.\n     * This should be used when everything else fail.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @return {String} the result.\n     */\n    stringifyByChar: function(array){\n        var resultStr = \"\";\n        for(var i = 0; i < array.length; i++) {\n            resultStr += String.fromCharCode(array[i]);\n        }\n        return resultStr;\n    },\n    applyCanBeUsed : {\n        /**\n         * true if the browser accepts to use String.fromCharCode on Uint8Array\n         */\n        uint8array : (function () {\n            try {\n                return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })(),\n        /**\n         * true if the browser accepts to use String.fromCharCode on nodejs Buffer.\n         */\n        nodebuffer : (function () {\n            try {\n                return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })()\n    }\n};\n\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction arrayLikeToString(array) {\n    // Performances notes :\n    // --------------------\n    // String.fromCharCode.apply(null, array) is the fastest, see\n    // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n    // but the stack is limited (and we can get huge arrays !).\n    //\n    // result += String.fromCharCode(array[i]); generate too many strings !\n    //\n    // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n    // TODO : we now have workers that split the work. Do we still need that ?\n    var chunk = 65536,\n        type = exports.getTypeOf(array),\n        canUseApply = true;\n    if (type === \"uint8array\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;\n    } else if (type === \"nodebuffer\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;\n    }\n\n    if (canUseApply) {\n        while (chunk > 1) {\n            try {\n                return arrayToStringHelper.stringifyByChunk(array, type, chunk);\n            } catch (e) {\n                chunk = Math.floor(chunk / 2);\n            }\n        }\n    }\n\n    // no apply or chunk error : slow and painful algorithm\n    // default browser on android 4.*\n    return arrayToStringHelper.stringifyByChar(array);\n}\n\nexports.applyFromCharCode = arrayLikeToString;\n\n\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n    for (var i = 0; i < arrayFrom.length; i++) {\n        arrayTo[i] = arrayFrom[i];\n    }\n    return arrayTo;\n}\n\n// a matrix containing functions to transform everything into everything.\nvar transform = {};\n\n// string to ?\ntransform[\"string\"] = {\n    \"string\": identity,\n    \"array\": function(input) {\n        return stringToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"string\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return stringToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": function(input) {\n        return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length));\n    }\n};\n\n// array to ?\ntransform[\"array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": identity,\n    \"arraybuffer\": function(input) {\n        return (new Uint8Array(input)).buffer;\n    },\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// arraybuffer to ?\ntransform[\"arraybuffer\"] = {\n    \"string\": function(input) {\n        return arrayLikeToString(new Uint8Array(input));\n    },\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n    },\n    \"arraybuffer\": identity,\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(new Uint8Array(input));\n    }\n};\n\n// uint8array to ?\ntransform[\"uint8array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return input.buffer;\n    },\n    \"uint8array\": identity,\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// nodebuffer to ?\ntransform[\"nodebuffer\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": identity\n};\n\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\nexports.transformTo = function(outputType, input) {\n    if (!input) {\n        // undefined, null, etc\n        // an empty string won't harm.\n        input = \"\";\n    }\n    if (!outputType) {\n        return input;\n    }\n    exports.checkSupport(outputType);\n    var inputType = exports.getTypeOf(input);\n    var result = transform[inputType][outputType](input);\n    return result;\n};\n\n/**\n * Resolve all relative path components, \".\" and \"..\", in a path. If these relative components\n * traverse above the root then the resulting path will only contain the final path component.\n *\n * All empty components, e.g. \"//\", are removed.\n * @param {string} path A path with / or \\ separators\n * @returns {string} The path with all relative path components resolved.\n */\nexports.resolve = function(path) {\n    var parts = path.split(\"/\");\n    var result = [];\n    for (var index = 0; index < parts.length; index++) {\n        var part = parts[index];\n        // Allow the first and last component to be empty for trailing slashes.\n        if (part === \".\" || (part === \"\" && index !== 0 && index !== parts.length - 1)) {\n            continue;\n        } else if (part === \"..\") {\n            result.pop();\n        } else {\n            result.push(part);\n        }\n    }\n    return result.join(\"/\");\n};\n\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\nexports.getTypeOf = function(input) {\n    if (typeof input === \"string\") {\n        return \"string\";\n    }\n    if (Object.prototype.toString.call(input) === \"[object Array]\") {\n        return \"array\";\n    }\n    if (support.nodebuffer && nodejsUtils.isBuffer(input)) {\n        return \"nodebuffer\";\n    }\n    if (support.uint8array && input instanceof Uint8Array) {\n        return \"uint8array\";\n    }\n    if (support.arraybuffer && input instanceof ArrayBuffer) {\n        return \"arraybuffer\";\n    }\n};\n\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\nexports.checkSupport = function(type) {\n    var supported = support[type.toLowerCase()];\n    if (!supported) {\n        throw new Error(type + \" is not supported by this platform\");\n    }\n};\n\nexports.MAX_VALUE_16BITS = 65535;\nexports.MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\nexports.pretty = function(str) {\n    var res = \"\",\n        code, i;\n    for (i = 0; i < (str || \"\").length; i++) {\n        code = str.charCodeAt(i);\n        res += \"\\\\x\" + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n    }\n    return res;\n};\n\n/**\n * Defer the call of a function.\n * @param {Function} callback the function to call asynchronously.\n * @param {Array} args the arguments to give to the callback.\n */\nexports.delay = function(callback, args, self) {\n    setImmediate(function () {\n        callback.apply(self || null, args || []);\n    });\n};\n\n/**\n * Extends a prototype with an other, without calling a constructor with\n * side effects. Inspired by nodejs' `utils.inherits`\n * @param {Function} ctor the constructor to augment\n * @param {Function} superCtor the parent constructor to use\n */\nexports.inherits = function (ctor, superCtor) {\n    var Obj = function() {};\n    Obj.prototype = superCtor.prototype;\n    ctor.prototype = new Obj();\n};\n\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\nexports.extend = function() {\n    var result = {}, i, attr;\n    for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n        for (attr in arguments[i]) {\n            if (Object.prototype.hasOwnProperty.call(arguments[i], attr) && typeof result[attr] === \"undefined\") {\n                result[attr] = arguments[i][attr];\n            }\n        }\n    }\n    return result;\n};\n\n/**\n * Transform arbitrary content into a Promise.\n * @param {String} name a name for the content being processed.\n * @param {Object} inputData the content to process.\n * @param {Boolean} isBinary true if the content is not an unicode string\n * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.\n * @param {Boolean} isBase64 true if the string content is encoded with base64.\n * @return {Promise} a promise in a format usable by JSZip.\n */\nexports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) {\n\n    // if inputData is already a promise, this flatten it.\n    var promise = external.Promise.resolve(inputData).then(function(data) {\n\n\n        var isBlob = support.blob && (data instanceof Blob || [\"[object File]\", \"[object Blob]\"].indexOf(Object.prototype.toString.call(data)) !== -1);\n\n        if (isBlob && typeof FileReader !== \"undefined\") {\n            return new external.Promise(function (resolve, reject) {\n                var reader = new FileReader();\n\n                reader.onload = function(e) {\n                    resolve(e.target.result);\n                };\n                reader.onerror = function(e) {\n                    reject(e.target.error);\n                };\n                reader.readAsArrayBuffer(data);\n            });\n        } else {\n            return data;\n        }\n    });\n\n    return promise.then(function(data) {\n        var dataType = exports.getTypeOf(data);\n\n        if (!dataType) {\n            return external.Promise.reject(\n                new Error(\"Can't read the data of '\" + name + \"'. Is it \" +\n                          \"in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\")\n            );\n        }\n        // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n        if (dataType === \"arraybuffer\") {\n            data = exports.transformTo(\"uint8array\", data);\n        } else if (dataType === \"string\") {\n            if (isBase64) {\n                data = base64.decode(data);\n            }\n            else if (isBinary) {\n                // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask\n                if (isOptimizedBinaryString !== true) {\n                    // this is a string, not in a base64 format.\n                    // Be sure that this is a correct \"binary string\"\n                    data = string2binary(data);\n                }\n            }\n        }\n        return data;\n    });\n};\n\n},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,\"setimmediate\":54}],33:[function(require,module,exports){\n\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar sig = require(\"./signature\");\nvar ZipEntry = require(\"./zipEntry\");\nvar support = require(\"./support\");\n//  class ZipEntries {{{\n/**\n * All the entries in the zip file.\n * @constructor\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntries(loadOptions) {\n    this.files = [];\n    this.loadOptions = loadOptions;\n}\nZipEntries.prototype = {\n    /**\n     * Check that the reader is on the specified signature.\n     * @param {string} expectedSignature the expected signature.\n     * @throws {Error} if it is an other signature.\n     */\n    checkSignature: function(expectedSignature) {\n        if (!this.reader.readAndCheckSignature(expectedSignature)) {\n            this.reader.index -= 4;\n            var signature = this.reader.readString(4);\n            throw new Error(\"Corrupted zip or bug: unexpected signature \" + \"(\" + utils.pretty(signature) + \", expected \" + utils.pretty(expectedSignature) + \")\");\n        }\n    },\n    /**\n     * Check if the given signature is at the given index.\n     * @param {number} askedIndex the index to check.\n     * @param {string} expectedSignature the signature to expect.\n     * @return {boolean} true if the signature is here, false otherwise.\n     */\n    isSignature: function(askedIndex, expectedSignature) {\n        var currentIndex = this.reader.index;\n        this.reader.setIndex(askedIndex);\n        var signature = this.reader.readString(4);\n        var result = signature === expectedSignature;\n        this.reader.setIndex(currentIndex);\n        return result;\n    },\n    /**\n     * Read the end of the central directory.\n     */\n    readBlockEndOfCentral: function() {\n        this.diskNumber = this.reader.readInt(2);\n        this.diskWithCentralDirStart = this.reader.readInt(2);\n        this.centralDirRecordsOnThisDisk = this.reader.readInt(2);\n        this.centralDirRecords = this.reader.readInt(2);\n        this.centralDirSize = this.reader.readInt(4);\n        this.centralDirOffset = this.reader.readInt(4);\n\n        this.zipCommentLength = this.reader.readInt(2);\n        // warning : the encoding depends of the system locale\n        // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.\n        // On a windows machine, this field is encoded with the localized windows code page.\n        var zipComment = this.reader.readData(this.zipCommentLength);\n        var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n        // To get consistent behavior with the generation part, we will assume that\n        // this is utf8 encoded unless specified otherwise.\n        var decodeContent = utils.transformTo(decodeParamType, zipComment);\n        this.zipComment = this.loadOptions.decodeFileName(decodeContent);\n    },\n    /**\n     * Read the end of the Zip 64 central directory.\n     * Not merged with the method readEndOfCentral :\n     * The end of central can coexist with its Zip64 brother,\n     * I don't want to read the wrong number of bytes !\n     */\n    readBlockZip64EndOfCentral: function() {\n        this.zip64EndOfCentralSize = this.reader.readInt(8);\n        this.reader.skip(4);\n        // this.versionMadeBy = this.reader.readString(2);\n        // this.versionNeeded = this.reader.readInt(2);\n        this.diskNumber = this.reader.readInt(4);\n        this.diskWithCentralDirStart = this.reader.readInt(4);\n        this.centralDirRecordsOnThisDisk = this.reader.readInt(8);\n        this.centralDirRecords = this.reader.readInt(8);\n        this.centralDirSize = this.reader.readInt(8);\n        this.centralDirOffset = this.reader.readInt(8);\n\n        this.zip64ExtensibleData = {};\n        var extraDataSize = this.zip64EndOfCentralSize - 44,\n            index = 0,\n            extraFieldId,\n            extraFieldLength,\n            extraFieldValue;\n        while (index < extraDataSize) {\n            extraFieldId = this.reader.readInt(2);\n            extraFieldLength = this.reader.readInt(4);\n            extraFieldValue = this.reader.readData(extraFieldLength);\n            this.zip64ExtensibleData[extraFieldId] = {\n                id: extraFieldId,\n                length: extraFieldLength,\n                value: extraFieldValue\n            };\n        }\n    },\n    /**\n     * Read the end of the Zip 64 central directory locator.\n     */\n    readBlockZip64EndOfCentralLocator: function() {\n        this.diskWithZip64CentralDirStart = this.reader.readInt(4);\n        this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);\n        this.disksCount = this.reader.readInt(4);\n        if (this.disksCount > 1) {\n            throw new Error(\"Multi-volumes zip are not supported\");\n        }\n    },\n    /**\n     * Read the local files, based on the offset read in the central part.\n     */\n    readLocalFiles: function() {\n        var i, file;\n        for (i = 0; i < this.files.length; i++) {\n            file = this.files[i];\n            this.reader.setIndex(file.localHeaderOffset);\n            this.checkSignature(sig.LOCAL_FILE_HEADER);\n            file.readLocalPart(this.reader);\n            file.handleUTF8();\n            file.processAttributes();\n        }\n    },\n    /**\n     * Read the central directory.\n     */\n    readCentralDir: function() {\n        var file;\n\n        this.reader.setIndex(this.centralDirOffset);\n        while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) {\n            file = new ZipEntry({\n                zip64: this.zip64\n            }, this.loadOptions);\n            file.readCentralPart(this.reader);\n            this.files.push(file);\n        }\n\n        if (this.centralDirRecords !== this.files.length) {\n            if (this.centralDirRecords !== 0 && this.files.length === 0) {\n                // We expected some records but couldn't find ANY.\n                // This is really suspicious, as if something went wrong.\n                throw new Error(\"Corrupted zip or bug: expected \" + this.centralDirRecords + \" records in central dir, got \" + this.files.length);\n            } else {\n                // We found some records but not all.\n                // Something is wrong but we got something for the user: no error here.\n                // console.warn(\"expected\", this.centralDirRecords, \"records in central dir, got\", this.files.length);\n            }\n        }\n    },\n    /**\n     * Read the end of central directory.\n     */\n    readEndOfCentral: function() {\n        var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);\n        if (offset < 0) {\n            // Check if the content is a truncated zip or complete garbage.\n            // A \"LOCAL_FILE_HEADER\" is not required at the beginning (auto\n            // extractible zip for example) but it can give a good hint.\n            // If an ajax request was used without responseType, we will also\n            // get unreadable data.\n            var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);\n\n            if (isGarbage) {\n                throw new Error(\"Can't find end of central directory : is this a zip file ? \" +\n                                \"If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\");\n            } else {\n                throw new Error(\"Corrupted zip: can't find end of central directory\");\n            }\n\n        }\n        this.reader.setIndex(offset);\n        var endOfCentralDirOffset = offset;\n        this.checkSignature(sig.CENTRAL_DIRECTORY_END);\n        this.readBlockEndOfCentral();\n\n\n        /* extract from the zip spec :\n            4)  If one of the fields in the end of central directory\n                record is too small to hold required data, the field\n                should be set to -1 (0xFFFF or 0xFFFFFFFF) and the\n                ZIP64 format record should be created.\n            5)  The end of central directory record and the\n                Zip64 end of central directory locator record must\n                reside on the same disk when splitting or spanning\n                an archive.\n         */\n        if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {\n            this.zip64 = true;\n\n            /*\n            Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from\n            the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents\n            all numbers as 64-bit double precision IEEE 754 floating point numbers.\n            So, we have 53bits for integers and bitwise operations treat everything as 32bits.\n            see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators\n            and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5\n            */\n\n            // should look for a zip64 EOCD locator\n            offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n            if (offset < 0) {\n                throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");\n            }\n            this.reader.setIndex(offset);\n            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n            this.readBlockZip64EndOfCentralLocator();\n\n            // now the zip64 EOCD record\n            if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) {\n                // console.warn(\"ZIP64 end of central directory not where expected.\");\n                this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n                if (this.relativeOffsetEndOfZip64CentralDir < 0) {\n                    throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");\n                }\n            }\n            this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);\n            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n            this.readBlockZip64EndOfCentral();\n        }\n\n        var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;\n        if (this.zip64) {\n            expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator\n            expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize;\n        }\n\n        var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;\n\n        if (extraBytes > 0) {\n            // console.warn(extraBytes, \"extra bytes at beginning or within zipfile\");\n            if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) {\n                // The offsets seem wrong, but we have something at the specified offset.\n                // So… we keep it.\n            } else {\n                // the offset is wrong, update the \"zero\" of the reader\n                // this happens if data has been prepended (crx files for example)\n                this.reader.zero = extraBytes;\n            }\n        } else if (extraBytes < 0) {\n            throw new Error(\"Corrupted zip: missing \" + Math.abs(extraBytes) + \" bytes.\");\n        }\n    },\n    prepareReader: function(data) {\n        this.reader = readerFor(data);\n    },\n    /**\n     * Read a zip file and create ZipEntries.\n     * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.\n     */\n    load: function(data) {\n        this.prepareReader(data);\n        this.readEndOfCentral();\n        this.readCentralDir();\n        this.readLocalFiles();\n    }\n};\n// }}} end of ZipEntries\nmodule.exports = ZipEntries;\n\n},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(require,module,exports){\n\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar CompressedObject = require(\"./compressedObject\");\nvar crc32fn = require(\"./crc32\");\nvar utf8 = require(\"./utf8\");\nvar compressions = require(\"./compressions\");\nvar support = require(\"./support\");\n\nvar MADE_BY_DOS = 0x00;\nvar MADE_BY_UNIX = 0x03;\n\n/**\n * Find a compression registered in JSZip.\n * @param {string} compressionMethod the method magic to find.\n * @return {Object|null} the JSZip compression object, null if none found.\n */\nvar findCompression = function(compressionMethod) {\n    for (var method in compressions) {\n        if (!Object.prototype.hasOwnProperty.call(compressions, method)) {\n            continue;\n        }\n        if (compressions[method].magic === compressionMethod) {\n            return compressions[method];\n        }\n    }\n    return null;\n};\n\n// class ZipEntry {{{\n/**\n * An entry in the zip file.\n * @constructor\n * @param {Object} options Options of the current file.\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntry(options, loadOptions) {\n    this.options = options;\n    this.loadOptions = loadOptions;\n}\nZipEntry.prototype = {\n    /**\n     * say if the file is encrypted.\n     * @return {boolean} true if the file is encrypted, false otherwise.\n     */\n    isEncrypted: function() {\n        // bit 1 is set\n        return (this.bitFlag & 0x0001) === 0x0001;\n    },\n    /**\n     * say if the file has utf-8 filename/comment.\n     * @return {boolean} true if the filename/comment is in utf-8, false otherwise.\n     */\n    useUTF8: function() {\n        // bit 11 is set\n        return (this.bitFlag & 0x0800) === 0x0800;\n    },\n    /**\n     * Read the local part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readLocalPart: function(reader) {\n        var compression, localExtraFieldsLength;\n\n        // we already know everything from the central dir !\n        // If the central dir data are false, we are doomed.\n        // On the bright side, the local part is scary  : zip64, data descriptors, both, etc.\n        // The less data we get here, the more reliable this should be.\n        // Let's skip the whole header and dash to the data !\n        reader.skip(22);\n        // in some zip created on windows, the filename stored in the central dir contains \\ instead of /.\n        // Strangely, the filename here is OK.\n        // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes\n        // or APPNOTE#4.4.17.1, \"All slashes MUST be forward slashes '/'\") but there are a lot of bad zip generators...\n        // Search \"unzip mismatching \"local\" filename continuing with \"central\" filename version\" on\n        // the internet.\n        //\n        // I think I see the logic here : the central directory is used to display\n        // content and the local directory is used to extract the files. Mixing / and \\\n        // may be used to display \\ to windows users and use / when extracting the files.\n        // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394\n        this.fileNameLength = reader.readInt(2);\n        localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir\n        // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding.\n        this.fileName = reader.readData(this.fileNameLength);\n        reader.skip(localExtraFieldsLength);\n\n        if (this.compressedSize === -1 || this.uncompressedSize === -1) {\n            throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory \" + \"(compressedSize === -1 || uncompressedSize === -1)\");\n        }\n\n        compression = findCompression(this.compressionMethod);\n        if (compression === null) { // no compression found\n            throw new Error(\"Corrupted zip : compression \" + utils.pretty(this.compressionMethod) + \" unknown (inner file : \" + utils.transformTo(\"string\", this.fileName) + \")\");\n        }\n        this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize));\n    },\n\n    /**\n     * Read the central part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readCentralPart: function(reader) {\n        this.versionMadeBy = reader.readInt(2);\n        reader.skip(2);\n        // this.versionNeeded = reader.readInt(2);\n        this.bitFlag = reader.readInt(2);\n        this.compressionMethod = reader.readString(2);\n        this.date = reader.readDate();\n        this.crc32 = reader.readInt(4);\n        this.compressedSize = reader.readInt(4);\n        this.uncompressedSize = reader.readInt(4);\n        var fileNameLength = reader.readInt(2);\n        this.extraFieldsLength = reader.readInt(2);\n        this.fileCommentLength = reader.readInt(2);\n        this.diskNumberStart = reader.readInt(2);\n        this.internalFileAttributes = reader.readInt(2);\n        this.externalFileAttributes = reader.readInt(4);\n        this.localHeaderOffset = reader.readInt(4);\n\n        if (this.isEncrypted()) {\n            throw new Error(\"Encrypted zip are not supported\");\n        }\n\n        // will be read in the local part, see the comments there\n        reader.skip(fileNameLength);\n        this.readExtraFields(reader);\n        this.parseZIP64ExtraField(reader);\n        this.fileComment = reader.readData(this.fileCommentLength);\n    },\n\n    /**\n     * Parse the external file attributes and get the unix/dos permissions.\n     */\n    processAttributes: function () {\n        this.unixPermissions = null;\n        this.dosPermissions = null;\n        var madeBy = this.versionMadeBy >> 8;\n\n        // Check if we have the DOS directory flag set.\n        // We look for it in the DOS and UNIX permissions\n        // but some unknown platform could set it as a compatibility flag.\n        this.dir = this.externalFileAttributes & 0x0010 ? true : false;\n\n        if(madeBy === MADE_BY_DOS) {\n            // first 6 bits (0 to 5)\n            this.dosPermissions = this.externalFileAttributes & 0x3F;\n        }\n\n        if(madeBy === MADE_BY_UNIX) {\n            this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF;\n            // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);\n        }\n\n        // fail safe : if the name ends with a / it probably means a folder\n        if (!this.dir && this.fileNameStr.slice(-1) === \"/\") {\n            this.dir = true;\n        }\n    },\n\n    /**\n     * Parse the ZIP64 extra field and merge the info in the current ZipEntry.\n     * @param {DataReader} reader the reader to use.\n     */\n    parseZIP64ExtraField: function() {\n        if (!this.extraFields[0x0001]) {\n            return;\n        }\n\n        // should be something, preparing the extra reader\n        var extraReader = readerFor(this.extraFields[0x0001].value);\n\n        // I really hope that these 64bits integer can fit in 32 bits integer, because js\n        // won't let us have more.\n        if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {\n            this.uncompressedSize = extraReader.readInt(8);\n        }\n        if (this.compressedSize === utils.MAX_VALUE_32BITS) {\n            this.compressedSize = extraReader.readInt(8);\n        }\n        if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {\n            this.localHeaderOffset = extraReader.readInt(8);\n        }\n        if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {\n            this.diskNumberStart = extraReader.readInt(4);\n        }\n    },\n    /**\n     * Read the central part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readExtraFields: function(reader) {\n        var end = reader.index + this.extraFieldsLength,\n            extraFieldId,\n            extraFieldLength,\n            extraFieldValue;\n\n        if (!this.extraFields) {\n            this.extraFields = {};\n        }\n\n        while (reader.index + 4 < end) {\n            extraFieldId = reader.readInt(2);\n            extraFieldLength = reader.readInt(2);\n            extraFieldValue = reader.readData(extraFieldLength);\n\n            this.extraFields[extraFieldId] = {\n                id: extraFieldId,\n                length: extraFieldLength,\n                value: extraFieldValue\n            };\n        }\n\n        reader.setIndex(end);\n    },\n    /**\n     * Apply an UTF8 transformation if needed.\n     */\n    handleUTF8: function() {\n        var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n        if (this.useUTF8()) {\n            this.fileNameStr = utf8.utf8decode(this.fileName);\n            this.fileCommentStr = utf8.utf8decode(this.fileComment);\n        } else {\n            var upath = this.findExtraFieldUnicodePath();\n            if (upath !== null) {\n                this.fileNameStr = upath;\n            } else {\n                // ASCII text or unsupported code page\n                var fileNameByteArray =  utils.transformTo(decodeParamType, this.fileName);\n                this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);\n            }\n\n            var ucomment = this.findExtraFieldUnicodeComment();\n            if (ucomment !== null) {\n                this.fileCommentStr = ucomment;\n            } else {\n                // ASCII text or unsupported code page\n                var commentByteArray =  utils.transformTo(decodeParamType, this.fileComment);\n                this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);\n            }\n        }\n    },\n\n    /**\n     * Find the unicode path declared in the extra field, if any.\n     * @return {String} the unicode path, null otherwise.\n     */\n    findExtraFieldUnicodePath: function() {\n        var upathField = this.extraFields[0x7075];\n        if (upathField) {\n            var extraReader = readerFor(upathField.value);\n\n            // wrong version\n            if (extraReader.readInt(1) !== 1) {\n                return null;\n            }\n\n            // the crc of the filename changed, this field is out of date.\n            if (crc32fn(this.fileName) !== extraReader.readInt(4)) {\n                return null;\n            }\n\n            return utf8.utf8decode(extraReader.readData(upathField.length - 5));\n        }\n        return null;\n    },\n\n    /**\n     * Find the unicode comment declared in the extra field, if any.\n     * @return {String} the unicode comment, null otherwise.\n     */\n    findExtraFieldUnicodeComment: function() {\n        var ucommentField = this.extraFields[0x6375];\n        if (ucommentField) {\n            var extraReader = readerFor(ucommentField.value);\n\n            // wrong version\n            if (extraReader.readInt(1) !== 1) {\n                return null;\n            }\n\n            // the crc of the comment changed, this field is out of date.\n            if (crc32fn(this.fileComment) !== extraReader.readInt(4)) {\n                return null;\n            }\n\n            return utf8.utf8decode(extraReader.readData(ucommentField.length - 5));\n        }\n        return null;\n    }\n};\nmodule.exports = ZipEntry;\n\n},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(require,module,exports){\n\"use strict\";\n\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar utf8 = require(\"./utf8\");\nvar CompressedObject = require(\"./compressedObject\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * A simple object representing a file in the zip file.\n * @constructor\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n * @param {Object} options the options of the file\n */\nvar ZipObject = function(name, data, options) {\n    this.name = name;\n    this.dir = options.dir;\n    this.date = options.date;\n    this.comment = options.comment;\n    this.unixPermissions = options.unixPermissions;\n    this.dosPermissions = options.dosPermissions;\n\n    this._data = data;\n    this._dataBinary = options.binary;\n    // keep only the compression\n    this.options = {\n        compression : options.compression,\n        compressionOptions : options.compressionOptions\n    };\n};\n\nZipObject.prototype = {\n    /**\n     * Create an internal stream for the content of this object.\n     * @param {String} type the type of each chunk.\n     * @return StreamHelper the stream.\n     */\n    internalStream: function (type) {\n        var result = null, outputType = \"string\";\n        try {\n            if (!type) {\n                throw new Error(\"No output type specified.\");\n            }\n            outputType = type.toLowerCase();\n            var askUnicodeString = outputType === \"string\" || outputType === \"text\";\n            if (outputType === \"binarystring\" || outputType === \"text\") {\n                outputType = \"string\";\n            }\n            result = this._decompressWorker();\n\n            var isUnicodeString = !this._dataBinary;\n\n            if (isUnicodeString && !askUnicodeString) {\n                result = result.pipe(new utf8.Utf8EncodeWorker());\n            }\n            if (!isUnicodeString && askUnicodeString) {\n                result = result.pipe(new utf8.Utf8DecodeWorker());\n            }\n        } catch (e) {\n            result = new GenericWorker(\"error\");\n            result.error(e);\n        }\n\n        return new StreamHelper(result, outputType, \"\");\n    },\n\n    /**\n     * Prepare the content in the asked type.\n     * @param {String} type the type of the result.\n     * @param {Function} onUpdate a function to call on each internal update.\n     * @return Promise the promise of the result.\n     */\n    async: function (type, onUpdate) {\n        return this.internalStream(type).accumulate(onUpdate);\n    },\n\n    /**\n     * Prepare the content as a nodejs stream.\n     * @param {String} type the type of each chunk.\n     * @param {Function} onUpdate a function to call on each internal update.\n     * @return Stream the stream.\n     */\n    nodeStream: function (type, onUpdate) {\n        return this.internalStream(type || \"nodebuffer\").toNodejsStream(onUpdate);\n    },\n\n    /**\n     * Return a worker for the compressed content.\n     * @private\n     * @param {Object} compression the compression object to use.\n     * @param {Object} compressionOptions the options to use when compressing.\n     * @return Worker the worker.\n     */\n    _compressWorker: function (compression, compressionOptions) {\n        if (\n            this._data instanceof CompressedObject &&\n            this._data.compression.magic === compression.magic\n        ) {\n            return this._data.getCompressedWorker();\n        } else {\n            var result = this._decompressWorker();\n            if(!this._dataBinary) {\n                result = result.pipe(new utf8.Utf8EncodeWorker());\n            }\n            return CompressedObject.createWorkerFrom(result, compression, compressionOptions);\n        }\n    },\n    /**\n     * Return a worker for the decompressed content.\n     * @private\n     * @return Worker the worker.\n     */\n    _decompressWorker : function () {\n        if (this._data instanceof CompressedObject) {\n            return this._data.getContentWorker();\n        } else if (this._data instanceof GenericWorker) {\n            return this._data;\n        } else {\n            return new DataWorker(this._data);\n        }\n    }\n};\n\nvar removedMethods = [\"asText\", \"asBinary\", \"asNodeBuffer\", \"asUint8Array\", \"asArrayBuffer\"];\nvar removedFn = function () {\n    throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n};\n\nfor(var i = 0; i < removedMethods.length; i++) {\n    ZipObject.prototype[removedMethods[i]] = removedFn;\n}\nmodule.exports = ZipObject;\n\n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(require,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],37:[function(require,module,exports){\n'use strict';\nvar immediate = require('immediate');\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype[\"finally\"] = function (callback) {\n  if (typeof callback !== 'function') {\n    return this;\n  }\n  var p = this.constructor;\n  return this.then(resolve, reject);\n\n  function resolve(value) {\n    function yes () {\n      return value;\n    }\n    return p.resolve(callback()).then(yes);\n  }\n  function reject(reason) {\n    function no () {\n      throw reason;\n    }\n    return p.resolve(callback()).then(no);\n  }\n};\nPromise.prototype[\"catch\"] = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n\n},{\"immediate\":36}],38:[function(require,module,exports){\n// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign    = require('./lib/utils/common').assign;\n\nvar deflate   = require('./lib/deflate');\nvar inflate   = require('./lib/inflate');\nvar constants = require('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n\n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(require,module,exports){\n'use strict';\n\n\nvar zlib_deflate = require('./zlib/deflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH      = 0;\nvar Z_FINISH        = 4;\n\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_SYNC_FLUSH    = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY    = 0;\n\nvar Z_DEFLATED  = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overriden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param)  or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n *   - `text` (Boolean) - true if compressed data believed to be text\n *   - `time` (Number) - modification time, unix timestamp\n *   - `os` (Number) - operation system code\n *   - `extra` (Array) - array of bytes with extra data (max 65536)\n *   - `name` (String) - file name (binary string)\n *   - `comment` (String) - comment (binary string)\n *   - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true);  // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n  if (!(this instanceof Deflate)) return new Deflate(options);\n\n  this.options = utils.assign({\n    level: Z_DEFAULT_COMPRESSION,\n    method: Z_DEFLATED,\n    chunkSize: 16384,\n    windowBits: 15,\n    memLevel: 8,\n    strategy: Z_DEFAULT_STRATEGY,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  if (opt.raw && (opt.windowBits > 0)) {\n    opt.windowBits = -opt.windowBits;\n  }\n\n  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n    opt.windowBits += 16;\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status = zlib_deflate.deflateInit2(\n    this.strm,\n    opt.level,\n    opt.method,\n    opt.windowBits,\n    opt.memLevel,\n    opt.strategy\n  );\n\n  if (status !== Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  if (opt.header) {\n    zlib_deflate.deflateSetHeader(this.strm, opt.header);\n  }\n\n  if (opt.dictionary) {\n    var dict;\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      // If we need to compress text, change encoding to utf8.\n      dict = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      dict = new Uint8Array(opt.dictionary);\n    } else {\n      dict = opt.dictionary;\n    }\n\n    status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n    if (status !== Z_OK) {\n      throw new Error(msg[status]);\n    }\n\n    this._dict_set = true;\n  }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n *   converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var status, _mode;\n\n  if (this.ended) { return false; }\n\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // If we need to compress text, change encoding to utf8.\n    strm.input = strings.string2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n    status = zlib_deflate.deflate(strm, _mode);    /* no bad return value */\n\n    if (status !== Z_STREAM_END && status !== Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n    if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n      if (this.options.to === 'string') {\n        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n      } else {\n        this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n      }\n    }\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n  // Finalize on the last chunk.\n  if (_mode === Z_FINISH) {\n    status = zlib_deflate.deflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === Z_SYNC_FLUSH) {\n    this.onEnd(Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): ouput data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    if (this.options.to === 'string') {\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n  var deflator = new Deflate(options);\n\n  deflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n  return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n  options = options || {};\n  options.gzip = true;\n  return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n\n},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(require,module,exports){\n'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar c            = require('./zlib/constants');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\nvar GZheader     = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overriden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true);  // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n  if (!(this instanceof Inflate)) return new Inflate(options);\n\n  this.options = utils.assign({\n    chunkSize: 16384,\n    windowBits: 0,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  // Force window size for `raw` data, if not set directly,\n  // because we have no header for autodetect.\n  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n    opt.windowBits = -opt.windowBits;\n    if (opt.windowBits === 0) { opt.windowBits = -15; }\n  }\n\n  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n      !(options && options.windowBits)) {\n    opt.windowBits += 32;\n  }\n\n  // Gzip header has no info about windows size, we can do autodetect only\n  // for deflate. So, if window size not set, force it to max when gzip possible\n  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n    // bit 3 (16) -> gzipped data\n    // bit 4 (32) -> autodetect gzip/deflate\n    if ((opt.windowBits & 15) === 0) {\n      opt.windowBits |= 15;\n    }\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm   = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status  = zlib_inflate.inflateInit2(\n    this.strm,\n    opt.windowBits\n  );\n\n  if (status !== c.Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  this.header = new GZheader();\n\n  zlib_inflate.inflateGetHeader(this.strm, this.header);\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var dictionary = this.options.dictionary;\n  var status, _mode;\n  var next_out_utf8, tail, utf8str;\n  var dict;\n\n  // Flag to properly process Z_BUF_ERROR on testing inflate call\n  // when we check that all output data was flushed.\n  var allowBufError = false;\n\n  if (this.ended) { return false; }\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // Only binary strings can be decompressed on practice\n    strm.input = strings.binstring2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */\n\n    if (status === c.Z_NEED_DICT && dictionary) {\n      // Convert data if needed\n      if (typeof dictionary === 'string') {\n        dict = strings.string2buf(dictionary);\n      } else if (toString.call(dictionary) === '[object ArrayBuffer]') {\n        dict = new Uint8Array(dictionary);\n      } else {\n        dict = dictionary;\n      }\n\n      status = zlib_inflate.inflateSetDictionary(this.strm, dict);\n\n    }\n\n    if (status === c.Z_BUF_ERROR && allowBufError === true) {\n      status = c.Z_OK;\n      allowBufError = false;\n    }\n\n    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n\n    if (strm.next_out) {\n      if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n        if (this.options.to === 'string') {\n\n          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n          tail = strm.next_out - next_out_utf8;\n          utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n          // move tail\n          strm.next_out = tail;\n          strm.avail_out = chunkSize - tail;\n          if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n          this.onData(utf8str);\n\n        } else {\n          this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n        }\n      }\n    }\n\n    // When no more input data, we should check that internal inflate buffers\n    // are flushed. The only way to do it when avail_out = 0 - run one more\n    // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n    // Here we set flag to process this error properly.\n    //\n    // NOTE. Deflate does not return error in this case and does not needs such\n    // logic.\n    if (strm.avail_in === 0 && strm.avail_out === 0) {\n      allowBufError = true;\n    }\n\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n  if (status === c.Z_STREAM_END) {\n    _mode = c.Z_FINISH;\n  }\n\n  // Finalize on the last chunk.\n  if (_mode === c.Z_FINISH) {\n    status = zlib_inflate.inflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === c.Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === c.Z_SYNC_FLUSH) {\n    this.onEnd(c.Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): ouput data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === c.Z_OK) {\n    if (this.options.to === 'string') {\n      // Glue & convert here, until we teach pako to send\n      // utf8 alligned strings to onData\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n *   , output;\n *\n * try {\n *   output = pako.inflate(input);\n * } catch (err)\n *   console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n  var inflator = new Inflate(options);\n\n  inflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n  return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip  = inflate;\n\n},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(require,module,exports){\n'use strict';\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (source.hasOwnProperty(p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n\n},{}],42:[function(require,module,exports){\n// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safary\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n  // count binary size\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  }\n\n  // allocate buffer\n  buf = new utils.Buf8(buf_len);\n\n  // convert\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | (c >>> 6);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | (c >>> 12);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | (c >>> 18);\n      buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    }\n  }\n\n  return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n  // use fallback for big arrays to avoid stack overflow\n  if (len < 65537) {\n    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n    }\n  }\n\n  var result = '';\n  for (var i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n  return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n  return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n  var buf = new utils.Buf8(str.length);\n  for (var i = 0, len = buf.length; i < len; i++) {\n    buf[i] = str.charCodeAt(i);\n  }\n  return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n  var i, out, c, c_len;\n  var len = max || buf.length;\n\n  // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n  var utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    c = buf[i++];\n    // quick process ascii\n    if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n    c_len = _utf8len[c];\n    // skip 5 & 6 byte codes\n    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n    // apply mask on first byte\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n    // join the rest\n    while (c_len > 1 && i < len) {\n      c = (c << 6) | (buf[i++] & 0x3f);\n      c_len--;\n    }\n\n    // terminated by end of string?\n    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n      utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n  var pos;\n\n  max = max || buf.length;\n  if (max > buf.length) { max = buf.length; }\n\n  // go back from last position, until start of sequence found\n  pos = max - 1;\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n  // Fuckup - very small and broken sequence,\n  // return max, because we should return something anyway.\n  if (pos < 0) { return max; }\n\n  // If we came to start of buffer - that means vuffer is too small,\n  // return max too.\n  if (pos === 0) { return max; }\n\n  return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n},{\"./common\":41}],43:[function(require,module,exports){\n'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It doesn't worth to make additional optimizationa as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n\n},{}],44:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n\n},{}],45:[function(require,module,exports){\n'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n\n},{}],46:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils   = require('../utils/common');\nvar trees   = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32   = require('./crc32');\nvar msg     = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH      = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\nvar Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\n//var Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\n//var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\n//var Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED            = 1;\nvar Z_HUFFMAN_ONLY        = 2;\nvar Z_RLE                 = 3;\nvar Z_FIXED               = 4;\nvar Z_DEFAULT_STRATEGY    = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES       = 30;\n/* number of distance codes */\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE     = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n  var s = strm.state;\n\n  //_tr_flush_bits(s);\n  var len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n//  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;      /* max hash chain length */\n  var scan = s.strstart; /* current string */\n  var match;                       /* matched string */\n  var len;                           /* length of current match */\n  var best_len = s.prev_length;              /* best match length so far */\n  var nice_match = s.nice_match;             /* stop if match long enough */\n  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1  = _win[scan + best_len - 1];\n  var scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    var curr = s.strstart + s.lookahead;\n//    var init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n  var hash_head;        /* head of the hash chain */\n  var bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n  var hash_head;          /* head of hash chain */\n  var bflush;              /* set if current block must be flushed */\n\n  var max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n  var bflush;            /* set if current block must be flushed */\n  var prev;              /* byte at distance one to match */\n  var scan, strend;      /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n  var bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  trees._tr_init(s);\n  return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  var s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n                );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      var level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n\n},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n  /* true if compressed data believed to be text */\n  this.text       = 0;\n  /* modification time */\n  this.time       = 0;\n  /* extra flags (not used when writing a gzip file) */\n  this.xflags     = 0;\n  /* operating system */\n  this.os         = 0;\n  /* pointer to extra field or Z_NULL if none */\n  this.extra      = null;\n  /* extra field length (valid if extra != Z_NULL) */\n  this.extra_len  = 0; // Actually, we don't need it in JS,\n                       // but leave for few code modifications\n\n  //\n  // Setup limits is not necessary because in js we should not preallocate memory\n  // for inflate use constant limit in 65536 bytes\n  //\n\n  /* space at extra (only when reading header) */\n  // this.extra_max  = 0;\n  /* pointer to zero-terminated file name or Z_NULL */\n  this.name       = '';\n  /* space at name (only when reading header) */\n  // this.name_max   = 0;\n  /* pointer to zero-terminated comment or Z_NULL */\n  this.comment    = '';\n  /* space at comment (only when reading header) */\n  // this.comm_max   = 0;\n  /* true if there was or will be a header crc */\n  this.hcrc       = 0;\n  /* true when done reading gzip header (not used when writing a gzip file) */\n  this.done       = false;\n}\n\nmodule.exports = GZheader;\n\n},{}],48:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30;       /* got a data error -- remain here until reset */\nvar TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n  var _in;                    /* local strm.input */\n  var last;                   /* have enough input while in < last */\n  var _out;                   /* local strm.output */\n  var beg;                    /* inflate()'s initial strm.output */\n  var end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  var dmax;                   /* maximum distance from zlib header */\n//#endif\n  var wsize;                  /* window size or zero if not using window */\n  var whave;                  /* valid bytes in the window */\n  var wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  var s_window;               /* allocated sliding window, if wsize != 0 */\n  var hold;                   /* local strm.hold */\n  var bits;                   /* local strm.bits */\n  var lcode;                  /* local strm.lencode */\n  var dcode;                  /* local strm.distcode */\n  var lmask;                  /* mask for first level of length codes */\n  var dmask;                  /* mask for first level of distance codes */\n  var here;                   /* retrieved table entry */\n  var op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  var len;                    /* match length, unused bytes */\n  var dist;                   /* match distance */\n  var from;                   /* where to copy match from */\n  var from_source;\n\n\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n\n},{}],49:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils         = require('../utils/common');\nvar adler32       = require('./adler32');\nvar crc32         = require('./crc32');\nvar inflate_fast  = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\nvar Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\nvar Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar    HEAD = 1;       /* i: waiting for magic header */\nvar    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nvar    TIME = 3;       /* i: waiting for modification time (gzip) */\nvar    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nvar    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nvar    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nvar    NAME = 7;       /* i: waiting for end of file name (gzip) */\nvar    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nvar    HCRC = 9;       /* i: waiting for header crc (gzip) */\nvar    DICTID = 10;    /* i: waiting for dictionary check value */\nvar    DICT = 11;      /* waiting for inflateSetDictionary() call */\nvar        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nvar        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nvar        STORED = 14;    /* i: waiting for stored size (length and complement) */\nvar        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nvar        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nvar        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nvar        LENLENS = 18;   /* i: waiting for code length code lengths */\nvar        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nvar            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nvar            LEN = 21;       /* i: waiting for length/lit/eob code */\nvar            LENEXT = 22;    /* i: waiting for length extra bits */\nvar            DIST = 23;      /* i: waiting for distance code */\nvar            DISTEXT = 24;   /* i: waiting for distance extra bits */\nvar            MATCH = 25;     /* o: waiting for output space to copy string */\nvar            LIT = 26;       /* o: waiting for output space to write literal */\nvar    CHECK = 27;     /* i: waiting for 32-bit check value */\nvar    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nvar    DONE = 29;      /* finished check, done -- remain here until reset */\nvar    BAD = 30;       /* got a data error -- remain here until reset */\nvar    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nvar    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n  this.work = new utils.Buf16(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new utils.Buf8(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output;          // input/output buffers\n  var next;                   /* next input INDEX */\n  var put;                    /* next output INDEX */\n  var have, left;             /* available input and output */\n  var hold;                   /* bit buffer */\n  var bits;                   /* bits in bit buffer */\n  var _in, _out;              /* save starting available input and output */\n  var copy;                   /* number of stored or match bytes to copy */\n  var from;                   /* where to copy match bytes from */\n  var from_source;\n  var here = 0;               /* current decoding table entry */\n  var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n  var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  var len;                    /* length to copy for repeats, bits to drop */\n  var ret;                    /* return code */\n  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */\n  var opts;\n\n  var n; // temporary var for NEED_BITS\n\n  var order = /* permutation of code lengths */\n    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n    case HEAD:\n      if (state.wrap === 0) {\n        state.mode = TYPEDO;\n        break;\n      }\n      //=== NEEDBITS(16);\n      while (bits < 16) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n        state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n        //=== CRC2(state.check, hold);\n        hbuf[0] = hold & 0xff;\n        hbuf[1] = (hold >>> 8) & 0xff;\n        state.check = crc32(state.check, hbuf, 2, 0);\n        //===//\n\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = FLAGS;\n        break;\n      }\n      state.flags = 0;           /* expect zlib header */\n      if (state.head) {\n        state.head.done = false;\n      }\n      if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n        (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n        strm.msg = 'incorrect header check';\n        state.mode = BAD;\n        break;\n      }\n      if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n        strm.msg = 'unknown compression method';\n        state.mode = BAD;\n        break;\n      }\n      //--- DROPBITS(4) ---//\n      hold >>>= 4;\n      bits -= 4;\n      //---//\n      len = (hold & 0x0f)/*BITS(4)*/ + 8;\n      if (state.wbits === 0) {\n        state.wbits = len;\n      }\n      else if (len > state.wbits) {\n        strm.msg = 'invalid window size';\n        state.mode = BAD;\n        break;\n      }\n      state.dmax = 1 << len;\n      //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n      strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n      state.mode = hold & 0x200 ? DICTID : TYPE;\n      //=== INITBITS();\n      hold = 0;\n      bits = 0;\n      //===//\n      break;\n    case FLAGS:\n      //=== NEEDBITS(16); */\n      while (bits < 16) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      state.flags = hold;\n      if ((state.flags & 0xff) !== Z_DEFLATED) {\n        strm.msg = 'unknown compression method';\n        state.mode = BAD;\n        break;\n      }\n      if (state.flags & 0xe000) {\n        strm.msg = 'unknown header flags set';\n        state.mode = BAD;\n        break;\n      }\n      if (state.head) {\n        state.head.text = ((hold >> 8) & 1);\n      }\n      if (state.flags & 0x0200) {\n        //=== CRC2(state.check, hold);\n        hbuf[0] = hold & 0xff;\n        hbuf[1] = (hold >>> 8) & 0xff;\n        state.check = crc32(state.check, hbuf, 2, 0);\n        //===//\n      }\n      //=== INITBITS();\n      hold = 0;\n      bits = 0;\n      //===//\n      state.mode = TIME;\n      /* falls through */\n    case TIME:\n      //=== NEEDBITS(32); */\n      while (bits < 32) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      if (state.head) {\n        state.head.time = hold;\n      }\n      if (state.flags & 0x0200) {\n        //=== CRC4(state.check, hold)\n        hbuf[0] = hold & 0xff;\n        hbuf[1] = (hold >>> 8) & 0xff;\n        hbuf[2] = (hold >>> 16) & 0xff;\n        hbuf[3] = (hold >>> 24) & 0xff;\n        state.check = crc32(state.check, hbuf, 4, 0);\n        //===\n      }\n      //=== INITBITS();\n      hold = 0;\n      bits = 0;\n      //===//\n      state.mode = OS;\n      /* falls through */\n    case OS:\n      //=== NEEDBITS(16); */\n      while (bits < 16) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      if (state.head) {\n        state.head.xflags = (hold & 0xff);\n        state.head.os = (hold >> 8);\n      }\n      if (state.flags & 0x0200) {\n        //=== CRC2(state.check, hold);\n        hbuf[0] = hold & 0xff;\n        hbuf[1] = (hold >>> 8) & 0xff;\n        state.check = crc32(state.check, hbuf, 2, 0);\n        //===//\n      }\n      //=== INITBITS();\n      hold = 0;\n      bits = 0;\n      //===//\n      state.mode = EXLEN;\n      /* falls through */\n    case EXLEN:\n      if (state.flags & 0x0400) {\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.length = hold;\n        if (state.head) {\n          state.head.extra_len = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n      }\n      else if (state.head) {\n        state.head.extra = null/*Z_NULL*/;\n      }\n      state.mode = EXTRA;\n      /* falls through */\n    case EXTRA:\n      if (state.flags & 0x0400) {\n        copy = state.length;\n        if (copy > have) { copy = have; }\n        if (copy) {\n          if (state.head) {\n            len = state.head.extra_len - state.length;\n            if (!state.head.extra) {\n              // Use untyped array for more conveniend processing later\n              state.head.extra = new Array(state.head.extra_len);\n            }\n            utils.arraySet(\n              state.head.extra,\n              input,\n              next,\n              // extra field is limited to 65536 bytes\n              // - no need for additional size check\n              copy,\n              /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n              len\n            );\n            //zmemcpy(state.head.extra + len, next,\n            //        len + copy > state.head.extra_max ?\n            //        state.head.extra_max - len : copy);\n          }\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          state.length -= copy;\n        }\n        if (state.length) { break inf_leave; }\n      }\n      state.length = 0;\n      state.mode = NAME;\n      /* falls through */\n    case NAME:\n      if (state.flags & 0x0800) {\n        if (have === 0) { break inf_leave; }\n        copy = 0;\n        do {\n          // TODO: 2 or 1 bytes?\n          len = input[next + copy++];\n          /* use constant limit because in js we should not preallocate memory */\n          if (state.head && len &&\n              (state.length < 65536 /*state.head.name_max*/)) {\n            state.head.name += String.fromCharCode(len);\n          }\n        } while (len && copy < have);\n\n        if (state.flags & 0x0200) {\n          state.check = crc32(state.check, input, copy, next);\n        }\n        have -= copy;\n        next += copy;\n        if (len) { break inf_leave; }\n      }\n      else if (state.head) {\n        state.head.name = null;\n      }\n      state.length = 0;\n      state.mode = COMMENT;\n      /* falls through */\n    case COMMENT:\n      if (state.flags & 0x1000) {\n        if (have === 0) { break inf_leave; }\n        copy = 0;\n        do {\n          len = input[next + copy++];\n          /* use constant limit because in js we should not preallocate memory */\n          if (state.head && len &&\n              (state.length < 65536 /*state.head.comm_max*/)) {\n            state.head.comment += String.fromCharCode(len);\n          }\n        } while (len && copy < have);\n        if (state.flags & 0x0200) {\n          state.check = crc32(state.check, input, copy, next);\n        }\n        have -= copy;\n        next += copy;\n        if (len) { break inf_leave; }\n      }\n      else if (state.head) {\n        state.head.comment = null;\n      }\n      state.mode = HCRC;\n      /* falls through */\n    case HCRC:\n      if (state.flags & 0x0200) {\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (hold !== (state.check & 0xffff)) {\n          strm.msg = 'header crc mismatch';\n          state.mode = BAD;\n          break;\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n      }\n      if (state.head) {\n        state.head.hcrc = ((state.flags >> 9) & 1);\n        state.head.done = true;\n      }\n      strm.adler = state.check = 0;\n      state.mode = TYPE;\n      break;\n    case DICTID:\n      //=== NEEDBITS(32); */\n      while (bits < 32) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      strm.adler = state.check = zswap32(hold);\n      //=== INITBITS();\n      hold = 0;\n      bits = 0;\n      //===//\n      state.mode = DICT;\n      /* falls through */\n    case DICT:\n      if (state.havedict === 0) {\n        //--- RESTORE() ---\n        strm.next_out = put;\n        strm.avail_out = left;\n        strm.next_in = next;\n        strm.avail_in = have;\n        state.hold = hold;\n        state.bits = bits;\n        //---\n        return Z_NEED_DICT;\n      }\n      strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n      state.mode = TYPE;\n      /* falls through */\n    case TYPE:\n      if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n      /* falls through */\n    case TYPEDO:\n      if (state.last) {\n        //--- BYTEBITS() ---//\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        state.mode = CHECK;\n        break;\n      }\n      //=== NEEDBITS(3); */\n      while (bits < 3) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      state.last = (hold & 0x01)/*BITS(1)*/;\n      //--- DROPBITS(1) ---//\n      hold >>>= 1;\n      bits -= 1;\n      //---//\n\n      switch ((hold & 0x03)/*BITS(2)*/) {\n      case 0:                             /* stored block */\n        //Tracev((stderr, \"inflate:     stored block%s\\n\",\n        //        state.last ? \" (last)\" : \"\"));\n        state.mode = STORED;\n        break;\n      case 1:                             /* fixed block */\n        fixedtables(state);\n        //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n        //        state.last ? \" (last)\" : \"\"));\n        state.mode = LEN_;             /* decode codes */\n        if (flush === Z_TREES) {\n          //--- DROPBITS(2) ---//\n          hold >>>= 2;\n          bits -= 2;\n          //---//\n          break inf_leave;\n        }\n        break;\n      case 2:                             /* dynamic block */\n        //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n        //        state.last ? \" (last)\" : \"\"));\n        state.mode = TABLE;\n        break;\n      case 3:\n        strm.msg = 'invalid block type';\n        state.mode = BAD;\n      }\n      //--- DROPBITS(2) ---//\n      hold >>>= 2;\n      bits -= 2;\n      //---//\n      break;\n    case STORED:\n      //--- BYTEBITS() ---// /* go to byte boundary */\n      hold >>>= bits & 7;\n      bits -= bits & 7;\n      //---//\n      //=== NEEDBITS(32); */\n      while (bits < 32) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n        strm.msg = 'invalid stored block lengths';\n        state.mode = BAD;\n        break;\n      }\n      state.length = hold & 0xffff;\n      //Tracev((stderr, \"inflate:       stored length %u\\n\",\n      //        state.length));\n      //=== INITBITS();\n      hold = 0;\n      bits = 0;\n      //===//\n      state.mode = COPY_;\n      if (flush === Z_TREES) { break inf_leave; }\n      /* falls through */\n    case COPY_:\n      state.mode = COPY;\n      /* falls through */\n    case COPY:\n      copy = state.length;\n      if (copy) {\n        if (copy > have) { copy = have; }\n        if (copy > left) { copy = left; }\n        if (copy === 0) { break inf_leave; }\n        //--- zmemcpy(put, next, copy); ---\n        utils.arraySet(output, input, next, copy, put);\n        //---//\n        have -= copy;\n        next += copy;\n        left -= copy;\n        put += copy;\n        state.length -= copy;\n        break;\n      }\n      //Tracev((stderr, \"inflate:       stored end\\n\"));\n      state.mode = TYPE;\n      break;\n    case TABLE:\n      //=== NEEDBITS(14); */\n      while (bits < 14) {\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n      }\n      //===//\n      state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n      //--- DROPBITS(5) ---//\n      hold >>>= 5;\n      bits -= 5;\n      //---//\n      state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n      //--- DROPBITS(5) ---//\n      hold >>>= 5;\n      bits -= 5;\n      //---//\n      state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n      //--- DROPBITS(4) ---//\n      hold >>>= 4;\n      bits -= 4;\n      //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n      if (state.nlen > 286 || state.ndist > 30) {\n        strm.msg = 'too many length or distance symbols';\n        state.mode = BAD;\n        break;\n      }\n//#endif\n      //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n      state.have = 0;\n      state.mode = LENLENS;\n      /* falls through */\n    case LENLENS:\n      while (state.have < state.ncode) {\n        //=== NEEDBITS(3);\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n        //--- DROPBITS(3) ---//\n        hold >>>= 3;\n        bits -= 3;\n        //---//\n      }\n      while (state.have < 19) {\n        state.lens[order[state.have++]] = 0;\n      }\n      // We have separate tables & no pointers. 2 commented lines below not needed.\n      //state.next = state.codes;\n      //state.lencode = state.next;\n      // Switch to use dynamic table\n      state.lencode = state.lendyn;\n      state.lenbits = 7;\n\n      opts = { bits: state.lenbits };\n      ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n      state.lenbits = opts.bits;\n\n      if (ret) {\n        strm.msg = 'invalid code lengths set';\n        state.mode = BAD;\n        break;\n      }\n      //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n      state.have = 0;\n      state.mode = CODELENS;\n      /* falls through */\n    case CODELENS:\n      while (state.have < state.nlen + state.ndist) {\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_val < 16) {\n          //--- DROPBITS(here.bits) ---//\n          hold >>>= here_bits;\n          bits -= here_bits;\n          //---//\n          state.lens[state.have++] = here_val;\n        }\n        else {\n          if (here_val === 16) {\n            //=== NEEDBITS(here.bits + 2);\n            n = here_bits + 2;\n            while (bits < n) {\n              if (have === 0) { break inf_leave; }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n            }\n            //===//\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            if (state.have === 0) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            len = state.lens[state.have - 1];\n            copy = 3 + (hold & 0x03);//BITS(2);\n            //--- DROPBITS(2) ---//\n            hold >>>= 2;\n            bits -= 2;\n            //---//\n          }\n          else if (here_val === 17) {\n            //=== NEEDBITS(here.bits + 3);\n            n = here_bits + 3;\n            while (bits < n) {\n              if (have === 0) { break inf_leave; }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n            }\n            //===//\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            len = 0;\n            copy = 3 + (hold & 0x07);//BITS(3);\n            //--- DROPBITS(3) ---//\n            hold >>>= 3;\n            bits -= 3;\n            //---//\n          }\n          else {\n            //=== NEEDBITS(here.bits + 7);\n            n = here_bits + 7;\n            while (bits < n) {\n              if (have === 0) { break inf_leave; }\n              have--;\n              hold += input[next++] << bits;\n              bits += 8;\n            }\n            //===//\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            len = 0;\n            copy = 11 + (hold & 0x7f);//BITS(7);\n            //--- DROPBITS(7) ---//\n            hold >>>= 7;\n            bits -= 7;\n            //---//\n          }\n          if (state.have + copy > state.nlen + state.ndist) {\n            strm.msg = 'invalid bit length repeat';\n            state.mode = BAD;\n            break;\n          }\n          while (copy--) {\n            state.lens[state.have++] = len;\n          }\n        }\n      }\n\n      /* handle error breaks in while */\n      if (state.mode === BAD) { break; }\n\n      /* check for end-of-block code (better have one) */\n      if (state.lens[256] === 0) {\n        strm.msg = 'invalid code -- missing end-of-block';\n        state.mode = BAD;\n        break;\n      }\n\n      /* build code tables -- note: do not change the lenbits or distbits\n         values here (9 and 6) without reading the comments in inftrees.h\n         concerning the ENOUGH constants, which depend on those values */\n      state.lenbits = 9;\n\n      opts = { bits: state.lenbits };\n      ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n      // We have separate tables & no pointers. 2 commented lines below not needed.\n      // state.next_index = opts.table_index;\n      state.lenbits = opts.bits;\n      // state.lencode = state.next;\n\n      if (ret) {\n        strm.msg = 'invalid literal/lengths set';\n        state.mode = BAD;\n        break;\n      }\n\n      state.distbits = 6;\n      //state.distcode.copy(state.codes);\n      // Switch to use dynamic table\n      state.distcode = state.distdyn;\n      opts = { bits: state.distbits };\n      ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n      // We have separate tables & no pointers. 2 commented lines below not needed.\n      // state.next_index = opts.table_index;\n      state.distbits = opts.bits;\n      // state.distcode = state.next;\n\n      if (ret) {\n        strm.msg = 'invalid distances set';\n        state.mode = BAD;\n        break;\n      }\n      //Tracev((stderr, 'inflate:       codes ok\\n'));\n      state.mode = LEN_;\n      if (flush === Z_TREES) { break inf_leave; }\n      /* falls through */\n    case LEN_:\n      state.mode = LEN;\n      /* falls through */\n    case LEN:\n      if (have >= 6 && left >= 258) {\n        //--- RESTORE() ---\n        strm.next_out = put;\n        strm.avail_out = left;\n        strm.next_in = next;\n        strm.avail_in = have;\n        state.hold = hold;\n        state.bits = bits;\n        //---\n        inflate_fast(strm, _out);\n        //--- LOAD() ---\n        put = strm.next_out;\n        output = strm.output;\n        left = strm.avail_out;\n        next = strm.next_in;\n        input = strm.input;\n        have = strm.avail_in;\n        hold = state.hold;\n        bits = state.bits;\n        //---\n\n        if (state.mode === TYPE) {\n          state.back = -1;\n        }\n        break;\n      }\n      state.back = 0;\n      for (;;) {\n        here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n        here_bits = here >>> 24;\n        here_op = (here >>> 16) & 0xff;\n        here_val = here & 0xffff;\n\n        if (here_bits <= bits) { break; }\n        //--- PULLBYTE() ---//\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n        //---//\n      }\n      if (here_op && (here_op & 0xf0) === 0) {\n        last_bits = here_bits;\n        last_op = here_op;\n        last_val = here_val;\n        for (;;) {\n          here = state.lencode[last_val +\n                  ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((last_bits + here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        //--- DROPBITS(last.bits) ---//\n        hold >>>= last_bits;\n        bits -= last_bits;\n        //---//\n        state.back += last_bits;\n      }\n      //--- DROPBITS(here.bits) ---//\n      hold >>>= here_bits;\n      bits -= here_bits;\n      //---//\n      state.back += here_bits;\n      state.length = here_val;\n      if (here_op === 0) {\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        state.mode = LIT;\n        break;\n      }\n      if (here_op & 32) {\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.back = -1;\n        state.mode = TYPE;\n        break;\n      }\n      if (here_op & 64) {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break;\n      }\n      state.extra = here_op & 15;\n      state.mode = LENEXT;\n      /* falls through */\n    case LENEXT:\n      if (state.extra) {\n        //=== NEEDBITS(state.extra);\n        n = state.extra;\n        while (bits < n) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n        //--- DROPBITS(state.extra) ---//\n        hold >>>= state.extra;\n        bits -= state.extra;\n        //---//\n        state.back += state.extra;\n      }\n      //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n      state.was = state.length;\n      state.mode = DIST;\n      /* falls through */\n    case DIST:\n      for (;;) {\n        here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n        here_bits = here >>> 24;\n        here_op = (here >>> 16) & 0xff;\n        here_val = here & 0xffff;\n\n        if ((here_bits) <= bits) { break; }\n        //--- PULLBYTE() ---//\n        if (have === 0) { break inf_leave; }\n        have--;\n        hold += input[next++] << bits;\n        bits += 8;\n        //---//\n      }\n      if ((here_op & 0xf0) === 0) {\n        last_bits = here_bits;\n        last_op = here_op;\n        last_val = here_val;\n        for (;;) {\n          here = state.distcode[last_val +\n                  ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((last_bits + here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        //--- DROPBITS(last.bits) ---//\n        hold >>>= last_bits;\n        bits -= last_bits;\n        //---//\n        state.back += last_bits;\n      }\n      //--- DROPBITS(here.bits) ---//\n      hold >>>= here_bits;\n      bits -= here_bits;\n      //---//\n      state.back += here_bits;\n      if (here_op & 64) {\n        strm.msg = 'invalid distance code';\n        state.mode = BAD;\n        break;\n      }\n      state.offset = here_val;\n      state.extra = (here_op) & 15;\n      state.mode = DISTEXT;\n      /* falls through */\n    case DISTEXT:\n      if (state.extra) {\n        //=== NEEDBITS(state.extra);\n        n = state.extra;\n        while (bits < n) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n        //--- DROPBITS(state.extra) ---//\n        hold >>>= state.extra;\n        bits -= state.extra;\n        //---//\n        state.back += state.extra;\n      }\n//#ifdef INFLATE_STRICT\n      if (state.offset > state.dmax) {\n        strm.msg = 'invalid distance too far back';\n        state.mode = BAD;\n        break;\n      }\n//#endif\n      //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n      state.mode = MATCH;\n      /* falls through */\n    case MATCH:\n      if (left === 0) { break inf_leave; }\n      copy = _out - left;\n      if (state.offset > copy) {         /* copy from window */\n        copy = state.offset - copy;\n        if (copy > state.whave) {\n          if (state.sane) {\n            strm.msg = 'invalid distance too far back';\n            state.mode = BAD;\n            break;\n          }\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n        }\n        if (copy > state.wnext) {\n          copy -= state.wnext;\n          from = state.wsize - copy;\n        }\n        else {\n          from = state.wnext - copy;\n        }\n        if (copy > state.length) { copy = state.length; }\n        from_source = state.window;\n      }\n      else {                              /* copy from output */\n        from_source = output;\n        from = put - state.offset;\n        copy = state.length;\n      }\n      if (copy > left) { copy = left; }\n      left -= copy;\n      state.length -= copy;\n      do {\n        output[put++] = from_source[from++];\n      } while (--copy);\n      if (state.length === 0) { state.mode = LEN; }\n      break;\n    case LIT:\n      if (left === 0) { break inf_leave; }\n      output[put++] = state.length;\n      left--;\n      state.mode = LEN;\n      break;\n    case CHECK:\n      if (state.wrap) {\n        //=== NEEDBITS(32);\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          // Use '|' insdead of '+' to make sure that result is signed\n          hold |= input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        _out -= left;\n        strm.total_out += _out;\n        state.total += _out;\n        if (_out) {\n          strm.adler = state.check =\n              /*UPDATE(state.check, put - _out, _out);*/\n              (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n        }\n        _out = left;\n        // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n        if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n          strm.msg = 'incorrect data check';\n          state.mode = BAD;\n          break;\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n      }\n      state.mode = LENGTH;\n      /* falls through */\n    case LENGTH:\n      if (state.wrap && state.flags) {\n        //=== NEEDBITS(32);\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (hold !== (state.total & 0xffffffff)) {\n          strm.msg = 'incorrect length check';\n          state.mode = BAD;\n          break;\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n      }\n      state.mode = DONE;\n      /* falls through */\n    case DONE:\n      ret = Z_STREAM_END;\n      break inf_leave;\n    case BAD:\n      ret = Z_DATA_ERROR;\n      break inf_leave;\n    case MEM:\n      return Z_MEM_ERROR;\n    case SYNC:\n      /* falls through */\n    default:\n      return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  var state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var state;\n  var dictid;\n  var ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n\n},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n  var bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  var len = 0;               /* a code's length in bits */\n  var sym = 0;               /* index of code symbols */\n  var min = 0, max = 0;          /* minimum and maximum code lengths */\n  var root = 0;              /* number of index bits for root table */\n  var curr = 0;              /* number of index bits for current table */\n  var drop = 0;              /* code bits to drop for sub-table */\n  var left = 0;                   /* number of prefix codes available */\n  var used = 0;              /* code entries in table used */\n  var huff = 0;              /* Huffman code */\n  var incr;              /* for incrementing code, index */\n  var fill;              /* index for replicating entries */\n  var low;               /* low bits for current root entry */\n  var mask;              /* mask for low root bits */\n  var next;             /* next available space in table */\n  var base = null;     /* base value table to use */\n  var base_index = 0;\n//  var shoextra;    /* extra bits table to use */\n  var end;                    /* use base and extra for symbol > end */\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  var extra = null;\n  var extra_index = 0;\n\n  var here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n\n},{\"../utils/common\":41}],51:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n},{}],52:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\nvar Z_FIXED               = 4;\n//var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY              = 0;\nvar Z_TEXT                = 1;\n//var Z_ASCII             = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES    = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH    = 3;\nvar MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES       = 30;\n/* number of distance codes */\n\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK   = 256;\n/* end of block literal code */\n\nvar REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits =   /* extra bits for each length code */\n  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits =   /* extra bits for each distance code */\n  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits =  /* extra bits for each bit length code */\n  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n  var res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nfunction gen_bitlen(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree            = desc.dyn_tree;\n  var max_code        = desc.max_code;\n  var stree           = desc.stat_desc.static_tree;\n  var has_stree       = desc.stat_desc.has_stree;\n  var extra           = desc.stat_desc.extra_bits;\n  var base            = desc.stat_desc.extra_base;\n  var max_length      = desc.stat_desc.max_length;\n  var h;              /* heap index */\n  var n, m;           /* iterate over the tree elements */\n  var bits;           /* bit length */\n  var xbits;          /* extra bits */\n  var f;              /* frequency */\n  var overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  var code = 0;              /* running code value */\n  var bits;                  /* bit index */\n  var n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    var len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n  var n;        /* iterates over tree elements */\n  var bits;     /* bit counter */\n  var length;   /* length value */\n  var code;     /* code value */\n  var dist;     /* distance index */\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n  var n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n  var _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;           /* distance of matched string */\n  var lc;             /* match length or unmatched char (if dist == 0) */\n  var lx = 0;         /* running index in l_buf */\n  var code;           /* the code to send */\n  var extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree     = desc.dyn_tree;\n  var stree    = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems    = desc.stat_desc.elems;\n  var n, m;          /* iterate over heap elements */\n  var max_code = -1; /* largest code with non zero frequency */\n  var node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n  var max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  var max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defailts,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init  = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block  = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n\n},{\"../utils/common\":41}],53:[function(require,module,exports){\n'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n\n},{}],54:[function(require,module,exports){\n(function (global){\n(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6–8\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}]},{},[10])(10)\n});\n\n/*! pdfmake v0.2.7, @license MIT, @link http://pdfmake.org */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 9282:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = __webpack_require__(2136),\n    _require$codes = _require.codes,\n    ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,\n    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n    ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,\n    ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,\n    ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\n\nvar AssertionError = __webpack_require__(5961);\n\nvar _require2 = __webpack_require__(9539),\n    inspect = _require2.inspect;\n\nvar _require$types = (__webpack_require__(9539).types),\n    isPromise = _require$types.isPromise,\n    isRegExp = _require$types.isRegExp;\n\nvar objectAssign = Object.assign ? Object.assign : (__webpack_require__(8091).assign);\nvar objectIs = Object.is ? Object.is : __webpack_require__(609);\nvar errorCache = new Map();\nvar isDeepEqual;\nvar isDeepStrictEqual;\nvar parseExpressionAt;\nvar findNodeAround;\nvar decoder;\n\nfunction lazyLoadComparison() {\n  var comparison = __webpack_require__(9158);\n\n  isDeepEqual = comparison.isDeepEqual;\n  isDeepStrictEqual = comparison.isDeepStrictEqual;\n} // Escape control characters but not \\n and \\t to keep the line breaks and\n// indentation intact.\n// eslint-disable-next-line no-control-regex\n\n\nvar escapeSequencesRegExp = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/g;\nvar meta = (/* unused pure expression or super */ null && ([\"\\\\u0000\", \"\\\\u0001\", \"\\\\u0002\", \"\\\\u0003\", \"\\\\u0004\", \"\\\\u0005\", \"\\\\u0006\", \"\\\\u0007\", '\\\\b', '', '', \"\\\\u000b\", '\\\\f', '', \"\\\\u000e\", \"\\\\u000f\", \"\\\\u0010\", \"\\\\u0011\", \"\\\\u0012\", \"\\\\u0013\", \"\\\\u0014\", \"\\\\u0015\", \"\\\\u0016\", \"\\\\u0017\", \"\\\\u0018\", \"\\\\u0019\", \"\\\\u001a\", \"\\\\u001b\", \"\\\\u001c\", \"\\\\u001d\", \"\\\\u001e\", \"\\\\u001f\"]));\n\nvar escapeFn = function escapeFn(str) {\n  return meta[str.charCodeAt(0)];\n};\n\nvar warned = false; // The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\nvar NO_EXCEPTION_SENTINEL = {}; // All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction innerFail(obj) {\n  if (obj.message instanceof Error) throw obj.message;\n  throw new AssertionError(obj);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFn) {\n  var argsLen = arguments.length;\n  var internalMessage;\n\n  if (argsLen === 0) {\n    internalMessage = 'Failed';\n  } else if (argsLen === 1) {\n    message = actual;\n    actual = undefined;\n  } else {\n    if (warned === false) {\n      warned = true;\n      var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n      warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');\n    }\n\n    if (argsLen === 2) operator = '!=';\n  }\n\n  if (message instanceof Error) throw message;\n  var errArgs = {\n    actual: actual,\n    expected: expected,\n    operator: operator === undefined ? 'fail' : operator,\n    stackStartFn: stackStartFn || fail\n  };\n\n  if (message !== undefined) {\n    errArgs.message = message;\n  }\n\n  var err = new AssertionError(errArgs);\n\n  if (internalMessage) {\n    err.message = internalMessage;\n    err.generatedMessage = true;\n  }\n\n  throw err;\n}\n\nassert.fail = fail; // The AssertionError is defined in internal/error.\n\nassert.AssertionError = AssertionError;\n\nfunction innerOk(fn, argLen, value, message) {\n  if (!value) {\n    var generatedMessage = false;\n\n    if (argLen === 0) {\n      generatedMessage = true;\n      message = 'No value argument passed to `assert.ok()`';\n    } else if (message instanceof Error) {\n      throw message;\n    }\n\n    var err = new AssertionError({\n      actual: value,\n      expected: true,\n      message: message,\n      operator: '==',\n      stackStartFn: fn\n    });\n    err.generatedMessage = generatedMessage;\n    throw err;\n  }\n} // Pure assertion tests whether a value is truthy, as determined\n// by !!value.\n\n\nfunction ok() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  innerOk.apply(void 0, [ok, args.length].concat(args));\n}\n\nassert.ok = ok; // The equality assertion tests shallow, coercive equality with ==.\n\n/* eslint-disable no-restricted-properties */\n\nassert.equal = function equal(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  } // eslint-disable-next-line eqeqeq\n\n\n  if (actual != expected) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: '==',\n      stackStartFn: equal\n    });\n  }\n}; // The non-equality assertion tests for whether two objects are not\n// equal with !=.\n\n\nassert.notEqual = function notEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  } // eslint-disable-next-line eqeqeq\n\n\n  if (actual == expected) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: '!=',\n      stackStartFn: notEqual\n    });\n  }\n}; // The equivalence assertion tests a deep equality relation.\n\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n\n  if (isDeepEqual === undefined) lazyLoadComparison();\n\n  if (!isDeepEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'deepEqual',\n      stackStartFn: deepEqual\n    });\n  }\n}; // The non-equivalence assertion tests for any deep inequality.\n\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n\n  if (isDeepEqual === undefined) lazyLoadComparison();\n\n  if (isDeepEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'notDeepEqual',\n      stackStartFn: notDeepEqual\n    });\n  }\n};\n/* eslint-enable */\n\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n\n  if (isDeepEqual === undefined) lazyLoadComparison();\n\n  if (!isDeepStrictEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'deepStrictEqual',\n      stackStartFn: deepStrictEqual\n    });\n  }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\n\nfunction notDeepStrictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n\n  if (isDeepEqual === undefined) lazyLoadComparison();\n\n  if (isDeepStrictEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'notDeepStrictEqual',\n      stackStartFn: notDeepStrictEqual\n    });\n  }\n}\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n\n  if (!objectIs(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'strictEqual',\n      stackStartFn: strictEqual\n    });\n  }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n\n  if (objectIs(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'notStrictEqual',\n      stackStartFn: notStrictEqual\n    });\n  }\n};\n\nvar Comparison = function Comparison(obj, keys, actual) {\n  var _this = this;\n\n  _classCallCheck(this, Comparison);\n\n  keys.forEach(function (key) {\n    if (key in obj) {\n      if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && obj[key].test(actual[key])) {\n        _this[key] = actual[key];\n      } else {\n        _this[key] = obj[key];\n      }\n    }\n  });\n};\n\nfunction compareExceptionKey(actual, expected, key, message, keys, fn) {\n  if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n    if (!message) {\n      // Create placeholder objects to create a nice output.\n      var a = new Comparison(actual, keys);\n      var b = new Comparison(expected, keys, actual);\n      var err = new AssertionError({\n        actual: a,\n        expected: b,\n        operator: 'deepStrictEqual',\n        stackStartFn: fn\n      });\n      err.actual = actual;\n      err.expected = expected;\n      err.operator = fn.name;\n      throw err;\n    }\n\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: fn.name,\n      stackStartFn: fn\n    });\n  }\n}\n\nfunction expectedException(actual, expected, msg, fn) {\n  if (typeof expected !== 'function') {\n    if (isRegExp(expected)) return expected.test(actual); // assert.doesNotThrow does not accept objects.\n\n    if (arguments.length === 2) {\n      throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);\n    } // Handle primitives properly.\n\n\n    if (_typeof(actual) !== 'object' || actual === null) {\n      var err = new AssertionError({\n        actual: actual,\n        expected: expected,\n        message: msg,\n        operator: 'deepStrictEqual',\n        stackStartFn: fn\n      });\n      err.operator = fn.name;\n      throw err;\n    }\n\n    var keys = Object.keys(expected); // Special handle errors to make sure the name and the message are compared\n    // as well.\n\n    if (expected instanceof Error) {\n      keys.push('name', 'message');\n    } else if (keys.length === 0) {\n      throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');\n    }\n\n    if (isDeepEqual === undefined) lazyLoadComparison();\n    keys.forEach(function (key) {\n      if (typeof actual[key] === 'string' && isRegExp(expected[key]) && expected[key].test(actual[key])) {\n        return;\n      }\n\n      compareExceptionKey(actual, expected, key, msg, keys, fn);\n    });\n    return true;\n  } // Guard instanceof against arrow functions as they don't have a prototype.\n\n\n  if (expected.prototype !== undefined && actual instanceof expected) {\n    return true;\n  }\n\n  if (Error.isPrototypeOf(expected)) {\n    return false;\n  }\n\n  return expected.call({}, actual) === true;\n}\n\nfunction getActual(fn) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);\n  }\n\n  try {\n    fn();\n  } catch (e) {\n    return e;\n  }\n\n  return NO_EXCEPTION_SENTINEL;\n}\n\nfunction checkIsPromise(obj) {\n  // Accept native ES6 promises and promises that are implemented in a similar\n  // way. Do not accept thenables that use a function as `obj` and that have no\n  // `catch` handler.\n  // TODO: thenables are checked up until they have the correct methods,\n  // but according to documentation, the `then` method should receive\n  // the `fulfill` and `reject` arguments as well or it may be never resolved.\n  return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\n\nfunction waitForActual(promiseFn) {\n  return Promise.resolve().then(function () {\n    var resultPromise;\n\n    if (typeof promiseFn === 'function') {\n      // Return a rejected promise if `promiseFn` throws synchronously.\n      resultPromise = promiseFn(); // Fail in case no promise is returned.\n\n      if (!checkIsPromise(resultPromise)) {\n        throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);\n      }\n    } else if (checkIsPromise(promiseFn)) {\n      resultPromise = promiseFn;\n    } else {\n      throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);\n    }\n\n    return Promise.resolve().then(function () {\n      return resultPromise;\n    }).then(function () {\n      return NO_EXCEPTION_SENTINEL;\n    }).catch(function (e) {\n      return e;\n    });\n  });\n}\n\nfunction expectsError(stackStartFn, actual, error, message) {\n  if (typeof error === 'string') {\n    if (arguments.length === 4) {\n      throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n    }\n\n    if (_typeof(actual) === 'object' && actual !== null) {\n      if (actual.message === error) {\n        throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error message \\\"\".concat(actual.message, \"\\\" is identical to the message.\"));\n      }\n    } else if (actual === error) {\n      throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error \\\"\".concat(actual, \"\\\" is identical to the message.\"));\n    }\n\n    message = error;\n    error = undefined;\n  } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n  }\n\n  if (actual === NO_EXCEPTION_SENTINEL) {\n    var details = '';\n\n    if (error && error.name) {\n      details += \" (\".concat(error.name, \")\");\n    }\n\n    details += message ? \": \".concat(message) : '.';\n    var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';\n    innerFail({\n      actual: undefined,\n      expected: error,\n      operator: stackStartFn.name,\n      message: \"Missing expected \".concat(fnType).concat(details),\n      stackStartFn: stackStartFn\n    });\n  }\n\n  if (error && !expectedException(actual, error, message, stackStartFn)) {\n    throw actual;\n  }\n}\n\nfunction expectsNoError(stackStartFn, actual, error, message) {\n  if (actual === NO_EXCEPTION_SENTINEL) return;\n\n  if (typeof error === 'string') {\n    message = error;\n    error = undefined;\n  }\n\n  if (!error || expectedException(actual, error)) {\n    var details = message ? \": \".concat(message) : '.';\n    var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';\n    innerFail({\n      actual: actual,\n      expected: error,\n      operator: stackStartFn.name,\n      message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + \"Actual message: \\\"\".concat(actual && actual.message, \"\\\"\"),\n      stackStartFn: stackStartFn\n    });\n  }\n\n  throw actual;\n}\n\nassert.throws = function throws(promiseFn) {\n  for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    args[_key2 - 1] = arguments[_key2];\n  }\n\n  expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n};\n\nassert.rejects = function rejects(promiseFn) {\n  for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n    args[_key3 - 1] = arguments[_key3];\n  }\n\n  return waitForActual(promiseFn).then(function (result) {\n    return expectsError.apply(void 0, [rejects, result].concat(args));\n  });\n};\n\nassert.doesNotThrow = function doesNotThrow(fn) {\n  for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n    args[_key4 - 1] = arguments[_key4];\n  }\n\n  expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n};\n\nassert.doesNotReject = function doesNotReject(fn) {\n  for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n    args[_key5 - 1] = arguments[_key5];\n  }\n\n  return waitForActual(fn).then(function (result) {\n    return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n  });\n};\n\nassert.ifError = function ifError(err) {\n  if (err !== null && err !== undefined) {\n    var message = 'ifError got unwanted exception: ';\n\n    if (_typeof(err) === 'object' && typeof err.message === 'string') {\n      if (err.message.length === 0 && err.constructor) {\n        message += err.constructor.name;\n      } else {\n        message += err.message;\n      }\n    } else {\n      message += inspect(err);\n    }\n\n    var newErr = new AssertionError({\n      actual: err,\n      expected: null,\n      operator: 'ifError',\n      message: message,\n      stackStartFn: ifError\n    }); // Make sure we actually have a stack trace!\n\n    var origStack = err.stack;\n\n    if (typeof origStack === 'string') {\n      // This will remove any duplicated frames from the error frames taken\n      // from within `ifError` and add the original error frames to the newly\n      // created ones.\n      var tmp2 = origStack.split('\\n');\n      tmp2.shift(); // Filter all frames existing in err.stack.\n\n      var tmp1 = newErr.stack.split('\\n');\n\n      for (var i = 0; i < tmp2.length; i++) {\n        // Find the first occurrence of the frame.\n        var pos = tmp1.indexOf(tmp2[i]);\n\n        if (pos !== -1) {\n          // Only keep new frames.\n          tmp1 = tmp1.slice(0, pos);\n          break;\n        }\n      }\n\n      newErr.stack = \"\".concat(tmp1.join('\\n'), \"\\n\").concat(tmp2.join('\\n'));\n    }\n\n    throw newErr;\n  }\n}; // Expose a strict only variant of assert\n\n\nfunction strict() {\n  for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n    args[_key6] = arguments[_key6];\n  }\n\n  innerOk.apply(void 0, [strict, args.length].concat(args));\n}\n\nassert.strict = objectAssign(strict, assert, {\n  equal: assert.strictEqual,\n  deepEqual: assert.deepStrictEqual,\n  notEqual: assert.notStrictEqual,\n  notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\n/***/ }),\n\n/***/ 5961:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n// Currently in sync with Node.js lib/internal/assert/assertion_error.js\n// https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c\n\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar _require = __webpack_require__(9539),\n    inspect = _require.inspect;\n\nvar _require2 = __webpack_require__(2136),\n    ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n\n\nfunction repeat(str, count) {\n  count = Math.floor(count);\n  if (str.length == 0 || count == 0) return '';\n  var maxCount = str.length * count;\n  count = Math.floor(Math.log(count) / Math.log(2));\n\n  while (count) {\n    str += str;\n    count--;\n  }\n\n  str += str.substring(0, maxCount - str.length);\n  return str;\n}\n\nvar blue = '';\nvar green = '';\nvar red = '';\nvar white = '';\nvar kReadableOperator = {\n  deepStrictEqual: 'Expected values to be strictly deep-equal:',\n  strictEqual: 'Expected values to be strictly equal:',\n  strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n  deepEqual: 'Expected values to be loosely deep-equal:',\n  equal: 'Expected values to be loosely equal:',\n  notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n  notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n  notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n  notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n  notEqual: 'Expected \"actual\" to be loosely unequal to:',\n  notIdentical: 'Values identical but not reference-equal:'\n}; // Comparing short primitives should just show === / !== instead of using the\n// diff.\n\nvar kMaxShortLength = 10;\n\nfunction copyError(source) {\n  var keys = Object.keys(source);\n  var target = Object.create(Object.getPrototypeOf(source));\n  keys.forEach(function (key) {\n    target[key] = source[key];\n  });\n  Object.defineProperty(target, 'message', {\n    value: source.message\n  });\n  return target;\n}\n\nfunction inspectValue(val) {\n  // The util.inspect default values could be changed. This makes sure the\n  // error messages contain the necessary information nevertheless.\n  return inspect(val, {\n    compact: false,\n    customInspect: false,\n    depth: 1000,\n    maxArrayLength: Infinity,\n    // Assert compares only enumerable properties (with a few exceptions).\n    showHidden: false,\n    // Having a long line as error is better than wrapping the line for\n    // comparison for now.\n    // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n    // have meta information about the inspected properties (i.e., know where\n    // in what line the property starts and ends).\n    breakLength: Infinity,\n    // Assert does not detect proxies currently.\n    showProxy: false,\n    sorted: true,\n    // Inspect getters as we also check them when comparing entries.\n    getters: true\n  });\n}\n\nfunction createErrDiff(actual, expected, operator) {\n  var other = '';\n  var res = '';\n  var lastPos = 0;\n  var end = '';\n  var skipped = false;\n  var actualInspected = inspectValue(actual);\n  var actualLines = actualInspected.split('\\n');\n  var expectedLines = inspectValue(expected).split('\\n');\n  var i = 0;\n  var indicator = ''; // In case both values are objects explicitly mark them as not reference equal\n  // for the `strictEqual` operator.\n\n  if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) {\n    operator = 'strictEqualObject';\n  } // If \"actual\" and \"expected\" fit on a single line and they are not strictly\n  // equal, check further special handling.\n\n\n  if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n    var inputLength = actualLines[0].length + expectedLines[0].length; // If the character length of \"actual\" and \"expected\" together is less than\n    // kMaxShortLength and if neither is an object and at least one of them is\n    // not `zero`, use the strict equal comparison to visualize the output.\n\n    if (inputLength <= kMaxShortLength) {\n      if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) {\n        // -0 === +0\n        return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n      }\n    } else if (operator !== 'strictEqualObject') {\n      // If the stderr is a tty and the input length is lower than the current\n      // columns per line, add a mismatch indicator below the output. If it is\n      // not a tty, use a default value of 80 characters.\n      var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n\n      if (inputLength < maxLength) {\n        while (actualLines[0][i] === expectedLines[0][i]) {\n          i++;\n        } // Ignore the first characters.\n\n\n        if (i > 2) {\n          // Add position indicator for the first mismatch in case it is a\n          // single line and the input length is less than the column length.\n          indicator = \"\\n  \".concat(repeat(' ', i), \"^\");\n          i = 0;\n        }\n      }\n    }\n  } // Remove all ending lines that match (this optimizes the output for\n  // readability by reducing the number of total changed lines).\n\n\n  var a = actualLines[actualLines.length - 1];\n  var b = expectedLines[expectedLines.length - 1];\n\n  while (a === b) {\n    if (i++ < 2) {\n      end = \"\\n  \".concat(a).concat(end);\n    } else {\n      other = a;\n    }\n\n    actualLines.pop();\n    expectedLines.pop();\n    if (actualLines.length === 0 || expectedLines.length === 0) break;\n    a = actualLines[actualLines.length - 1];\n    b = expectedLines[expectedLines.length - 1];\n  }\n\n  var maxLines = Math.max(actualLines.length, expectedLines.length); // Strict equal with identical objects that are not identical by reference.\n  // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() })\n\n  if (maxLines === 0) {\n    // We have to get the result again. The lines were all removed before.\n    var _actualLines = actualInspected.split('\\n'); // Only remove lines in case it makes sense to collapse those.\n    // TODO: Accept env to always show the full error.\n\n\n    if (_actualLines.length > 30) {\n      _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n\n      while (_actualLines.length > 27) {\n        _actualLines.pop();\n      }\n    }\n\n    return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join('\\n'), \"\\n\");\n  }\n\n  if (i > 3) {\n    end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n    skipped = true;\n  }\n\n  if (other !== '') {\n    end = \"\\n  \".concat(other).concat(end);\n    other = '';\n  }\n\n  var printedLines = 0;\n  var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n  var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n\n  for (i = 0; i < maxLines; i++) {\n    // Only extra expected lines exist\n    var cur = i - lastPos;\n\n    if (actualLines.length < i + 1) {\n      // If the last diverging line is more than one line above and the\n      // current line is at least line three, add some of the former lines and\n      // also add dots to indicate skipped entries.\n      if (cur > 1 && i > 2) {\n        if (cur > 4) {\n          res += \"\\n\".concat(blue, \"...\").concat(white);\n          skipped = true;\n        } else if (cur > 3) {\n          res += \"\\n  \".concat(expectedLines[i - 2]);\n          printedLines++;\n        }\n\n        res += \"\\n  \".concat(expectedLines[i - 1]);\n        printedLines++;\n      } // Mark the current line as the last diverging one.\n\n\n      lastPos = i; // Add the expected line to the cache.\n\n      other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n      printedLines++; // Only extra actual lines exist\n    } else if (expectedLines.length < i + 1) {\n      // If the last diverging line is more than one line above and the\n      // current line is at least line three, add some of the former lines and\n      // also add dots to indicate skipped entries.\n      if (cur > 1 && i > 2) {\n        if (cur > 4) {\n          res += \"\\n\".concat(blue, \"...\").concat(white);\n          skipped = true;\n        } else if (cur > 3) {\n          res += \"\\n  \".concat(actualLines[i - 2]);\n          printedLines++;\n        }\n\n        res += \"\\n  \".concat(actualLines[i - 1]);\n        printedLines++;\n      } // Mark the current line as the last diverging one.\n\n\n      lastPos = i; // Add the actual line to the result.\n\n      res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n      printedLines++; // Lines diverge\n    } else {\n      var expectedLine = expectedLines[i];\n      var actualLine = actualLines[i]; // If the lines diverge, specifically check for lines that only diverge by\n      // a trailing comma. In that case it is actually identical and we should\n      // mark it as such.\n\n      var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine); // If the expected line has a trailing comma but is otherwise identical,\n      // add a comma at the end of the actual line. Otherwise the output could\n      // look weird as in:\n      //\n      //   [\n      //     1         // No comma at the end!\n      // +   2\n      //   ]\n      //\n\n      if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) {\n        divergingLines = false;\n        actualLine += ',';\n      }\n\n      if (divergingLines) {\n        // If the last diverging line is more than one line above and the\n        // current line is at least line three, add some of the former lines and\n        // also add dots to indicate skipped entries.\n        if (cur > 1 && i > 2) {\n          if (cur > 4) {\n            res += \"\\n\".concat(blue, \"...\").concat(white);\n            skipped = true;\n          } else if (cur > 3) {\n            res += \"\\n  \".concat(actualLines[i - 2]);\n            printedLines++;\n          }\n\n          res += \"\\n  \".concat(actualLines[i - 1]);\n          printedLines++;\n        } // Mark the current line as the last diverging one.\n\n\n        lastPos = i; // Add the actual line to the result and cache the expected diverging\n        // line so consecutive diverging lines show up as +++--- and not +-+-+-.\n\n        res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n        other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n        printedLines += 2; // Lines are identical\n      } else {\n        // Add all cached information to the result before adding other things\n        // and reset the cache.\n        res += other;\n        other = ''; // If the last diverging line is exactly one line above or if it is the\n        // very first line, add the line to the result.\n\n        if (cur === 1 || i === 0) {\n          res += \"\\n  \".concat(actualLine);\n          printedLines++;\n        }\n      }\n    } // Inspected object to big (Show ~20 rows max)\n\n\n    if (printedLines > 20 && i < maxLines - 2) {\n      return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n    }\n  }\n\n  return \"\".concat(msg).concat(skipped ? skippedMsg : '', \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n}\n\nvar AssertionError =\n/*#__PURE__*/\nfunction (_Error) {\n  _inherits(AssertionError, _Error);\n\n  function AssertionError(options) {\n    var _this;\n\n    _classCallCheck(this, AssertionError);\n\n    if (_typeof(options) !== 'object' || options === null) {\n      throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);\n    }\n\n    var message = options.message,\n        operator = options.operator,\n        stackStartFn = options.stackStartFn;\n    var actual = options.actual,\n        expected = options.expected;\n    var limit = Error.stackTraceLimit;\n    Error.stackTraceLimit = 0;\n\n    if (message != null) {\n      _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, String(message)));\n    } else {\n      if (process.stderr && process.stderr.isTTY) {\n        // Reset on each call to make sure we handle dynamically set environment\n        // variables correct.\n        if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n          blue = \"\\x1B[34m\";\n          green = \"\\x1B[32m\";\n          white = \"\\x1B[39m\";\n          red = \"\\x1B[31m\";\n        } else {\n          blue = '';\n          green = '';\n          white = '';\n          red = '';\n        }\n      } // Prevent the error stack from being visible by duplicating the error\n      // in a very close way to the original in case both sides are actually\n      // instances of Error.\n\n\n      if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) {\n        actual = copyError(actual);\n        expected = copyError(expected);\n      }\n\n      if (operator === 'deepStrictEqual' || operator === 'strictEqual') {\n        _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, createErrDiff(actual, expected, operator)));\n      } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') {\n        // In case the objects are equal but the operator requires unequal, show\n        // the first object and say A equals B\n        var base = kReadableOperator[operator];\n        var res = inspectValue(actual).split('\\n'); // In case \"actual\" is an object, it should not be reference equal.\n\n        if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) {\n          base = kReadableOperator.notStrictEqualObject;\n        } // Only remove lines in case it makes sense to collapse those.\n        // TODO: Accept env to always show the full error.\n\n\n        if (res.length > 30) {\n          res[26] = \"\".concat(blue, \"...\").concat(white);\n\n          while (res.length > 27) {\n            res.pop();\n          }\n        } // Only print a single input.\n\n\n        if (res.length === 1) {\n          _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \" \").concat(res[0])));\n        } else {\n          _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \"\\n\\n\").concat(res.join('\\n'), \"\\n\")));\n        }\n      } else {\n        var _res = inspectValue(actual);\n\n        var other = '';\n        var knownOperators = kReadableOperator[operator];\n\n        if (operator === 'notDeepEqual' || operator === 'notEqual') {\n          _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n\n          if (_res.length > 1024) {\n            _res = \"\".concat(_res.slice(0, 1021), \"...\");\n          }\n        } else {\n          other = \"\".concat(inspectValue(expected));\n\n          if (_res.length > 512) {\n            _res = \"\".concat(_res.slice(0, 509), \"...\");\n          }\n\n          if (other.length > 512) {\n            other = \"\".concat(other.slice(0, 509), \"...\");\n          }\n\n          if (operator === 'deepEqual' || operator === 'equal') {\n            _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n          } else {\n            other = \" \".concat(operator, \" \").concat(other);\n          }\n        }\n\n        _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(_res).concat(other)));\n      }\n    }\n\n    Error.stackTraceLimit = limit;\n    _this.generatedMessage = !message;\n    Object.defineProperty(_assertThisInitialized(_this), 'name', {\n      value: 'AssertionError [ERR_ASSERTION]',\n      enumerable: false,\n      writable: true,\n      configurable: true\n    });\n    _this.code = 'ERR_ASSERTION';\n    _this.actual = actual;\n    _this.expected = expected;\n    _this.operator = operator;\n\n    if (Error.captureStackTrace) {\n      // eslint-disable-next-line no-restricted-syntax\n      Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n    } // Create error message including the error code in the name.\n\n\n    _this.stack; // Reset the name.\n\n    _this.name = 'AssertionError';\n    return _possibleConstructorReturn(_this);\n  }\n\n  _createClass(AssertionError, [{\n    key: \"toString\",\n    value: function toString() {\n      return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n    }\n  }, {\n    key: inspect.custom,\n    value: function value(recurseTimes, ctx) {\n      // This limits the `actual` and `expected` property default inspection to\n      // the minimum depth. Otherwise those values would be too verbose compared\n      // to the actual error message which contains a combined view of these two\n      // input values.\n      return inspect(this, _objectSpread({}, ctx, {\n        customInspect: false,\n        depth: 0\n      }));\n    }\n  }]);\n\n  return AssertionError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = AssertionError;\n\n/***/ }),\n\n/***/ 2136:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// Currently in sync with Node.js lib/internal/errors.js\n// https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f\n\n/* eslint node-core/documented-errors: \"error\" */\n\n/* eslint node-core/alphabetize-errors: \"error\" */\n\n/* eslint node-core/prefer-util-format-errors: \"error\" */\n // The whole point behind this internal module is to allow Node.js to no\n// longer be forced to treat every error message change as a semver-major\n// change. The NodeError classes here all expose a `code` property whose\n// value statically and permanently identifies the error. While the error\n// message may change, the code should not.\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar codes = {}; // Lazy loaded\n\nvar assert;\nvar util;\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inherits(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      var _this;\n\n      _classCallCheck(this, NodeError);\n\n      _this = _possibleConstructorReturn(this, _getPrototypeOf(NodeError).call(this, getMessage(arg1, arg2, arg3)));\n      _this.code = code;\n      return _this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_AMBIGUOUS_ARGUMENT', 'The \"%s\" argument is ambiguous. %s', TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  if (assert === undefined) assert = __webpack_require__(9282);\n  assert(typeof name === 'string', \"'name' must be a string\"); // determiner: 'must be' or 'must not be'\n\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } // TODO(BridgeAR): Improve the output by showing `null` and similar.\n\n\n  msg += \". Received type \".concat(_typeof(actual));\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_VALUE', function (name, value) {\n  var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid';\n  if (util === undefined) util = __webpack_require__(9539);\n  var inspected = util.inspect(value);\n\n  if (inspected.length > 128) {\n    inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n  }\n\n  return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n}, TypeError, RangeError);\ncreateErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) {\n  var type;\n\n  if (value && value.constructor && value.constructor.name) {\n    type = \"instance of \".concat(value.constructor.name);\n  } else {\n    type = \"type \".concat(_typeof(value));\n  }\n\n  return \"Expected \".concat(input, \" to be returned from the \\\"\").concat(name, \"\\\"\") + \" function but got \".concat(type, \".\");\n}, TypeError);\ncreateErrorType('ERR_MISSING_ARGS', function () {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  if (assert === undefined) assert = __webpack_require__(9282);\n  assert(args.length > 0, 'At least one arg needs to be specified');\n  var msg = 'The ';\n  var len = args.length;\n  args = args.map(function (a) {\n    return \"\\\"\".concat(a, \"\\\"\");\n  });\n\n  switch (len) {\n    case 1:\n      msg += \"\".concat(args[0], \" argument\");\n      break;\n\n    case 2:\n      msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n      break;\n\n    default:\n      msg += args.slice(0, len - 1).join(', ');\n      msg += \", and \".concat(args[len - 1], \" arguments\");\n      break;\n  }\n\n  return \"\".concat(msg, \" must be specified\");\n}, TypeError);\nmodule.exports.codes = codes;\n\n/***/ }),\n\n/***/ 9158:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// Currently in sync with Node.js lib/internal/util/comparisons.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar regexFlagsSupported = /a/g.flags !== undefined;\n\nvar arrayFromSet = function arrayFromSet(set) {\n  var array = [];\n  set.forEach(function (value) {\n    return array.push(value);\n  });\n  return array;\n};\n\nvar arrayFromMap = function arrayFromMap(map) {\n  var array = [];\n  map.forEach(function (value, key) {\n    return array.push([key, value]);\n  });\n  return array;\n};\n\nvar objectIs = Object.is ? Object.is : __webpack_require__(609);\nvar objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () {\n  return [];\n};\nvar numberIsNaN = Number.isNaN ? Number.isNaN : __webpack_require__(360);\n\nfunction uncurryThis(f) {\n  return f.call.bind(f);\n}\n\nvar hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);\nvar propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\nvar objectToString = uncurryThis(Object.prototype.toString);\n\nvar _require$types = (__webpack_require__(9539).types),\n    isAnyArrayBuffer = _require$types.isAnyArrayBuffer,\n    isArrayBufferView = _require$types.isArrayBufferView,\n    isDate = _require$types.isDate,\n    isMap = _require$types.isMap,\n    isRegExp = _require$types.isRegExp,\n    isSet = _require$types.isSet,\n    isNativeError = _require$types.isNativeError,\n    isBoxedPrimitive = _require$types.isBoxedPrimitive,\n    isNumberObject = _require$types.isNumberObject,\n    isStringObject = _require$types.isStringObject,\n    isBooleanObject = _require$types.isBooleanObject,\n    isBigIntObject = _require$types.isBigIntObject,\n    isSymbolObject = _require$types.isSymbolObject,\n    isFloat32Array = _require$types.isFloat32Array,\n    isFloat64Array = _require$types.isFloat64Array;\n\nfunction isNonIndex(key) {\n  if (key.length === 0 || key.length > 10) return true;\n\n  for (var i = 0; i < key.length; i++) {\n    var code = key.charCodeAt(i);\n    if (code < 48 || code > 57) return true;\n  } // The maximum size for an array is 2 ** 32 -1.\n\n\n  return key.length === 10 && key >= Math.pow(2, 32);\n}\n\nfunction getOwnNonIndexProperties(value) {\n  return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n} // Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n\n\nfunction compare(a, b) {\n  if (a === b) {\n    return 0;\n  }\n\n  var x = a.length;\n  var y = b.length;\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i];\n      y = b[i];\n      break;\n    }\n  }\n\n  if (x < y) {\n    return -1;\n  }\n\n  if (y < x) {\n    return 1;\n  }\n\n  return 0;\n}\n\nvar ONLY_ENUMERABLE = undefined;\nvar kStrict = true;\nvar kLoose = false;\nvar kNoIterator = 0;\nvar kIsArray = 1;\nvar kIsSet = 2;\nvar kIsMap = 3; // Check if they have the same source and flags\n\nfunction areSimilarRegExps(a, b) {\n  return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n}\n\nfunction areSimilarFloatArrays(a, b) {\n  if (a.byteLength !== b.byteLength) {\n    return false;\n  }\n\n  for (var offset = 0; offset < a.byteLength; offset++) {\n    if (a[offset] !== b[offset]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction areSimilarTypedArrays(a, b) {\n  if (a.byteLength !== b.byteLength) {\n    return false;\n  }\n\n  return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n}\n\nfunction areEqualArrayBuffers(buf1, buf2) {\n  return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n}\n\nfunction isEqualBoxedPrimitive(val1, val2) {\n  if (isNumberObject(val1)) {\n    return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n  }\n\n  if (isStringObject(val1)) {\n    return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n  }\n\n  if (isBooleanObject(val1)) {\n    return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n  }\n\n  if (isBigIntObject(val1)) {\n    return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n  }\n\n  return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n} // Notes: Type tags are historical [[Class]] properties that can be set by\n// FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS\n// and retrieved using Object.prototype.toString.call(obj) in JS\n// See https://tc39.github.io/ecma262/#sec-object.prototype.tostring\n// for a list of tags pre-defined in the spec.\n// There are some unspecified tags in the wild too (e.g. typed array tags).\n// Since tags can be altered, they only serve fast failures\n//\n// Typed arrays and buffers are checked by comparing the content in their\n// underlying ArrayBuffer. This optimization requires that it's\n// reasonable to interpret their underlying memory in the same way,\n// which is checked by comparing their type tags.\n// (e.g. a Uint8Array and a Uint16Array with the same memory content\n// could still be different because they will be interpreted differently).\n//\n// For strict comparison, objects should have\n// a) The same built-in type tags\n// b) The same prototypes.\n\n\nfunction innerDeepEqual(val1, val2, strict, memos) {\n  // All identical values are equivalent, as determined by ===.\n  if (val1 === val2) {\n    if (val1 !== 0) return true;\n    return strict ? objectIs(val1, val2) : true;\n  } // Check more closely if val1 and val2 are equal.\n\n\n  if (strict) {\n    if (_typeof(val1) !== 'object') {\n      return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2);\n    }\n\n    if (_typeof(val2) !== 'object' || val1 === null || val2 === null) {\n      return false;\n    }\n\n    if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n      return false;\n    }\n  } else {\n    if (val1 === null || _typeof(val1) !== 'object') {\n      if (val2 === null || _typeof(val2) !== 'object') {\n        // eslint-disable-next-line eqeqeq\n        return val1 == val2;\n      }\n\n      return false;\n    }\n\n    if (val2 === null || _typeof(val2) !== 'object') {\n      return false;\n    }\n  }\n\n  var val1Tag = objectToString(val1);\n  var val2Tag = objectToString(val2);\n\n  if (val1Tag !== val2Tag) {\n    return false;\n  }\n\n  if (Array.isArray(val1)) {\n    // Check for sparse arrays and general fast path\n    if (val1.length !== val2.length) {\n      return false;\n    }\n\n    var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n    var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n    if (keys1.length !== keys2.length) {\n      return false;\n    }\n\n    return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n  } // [browserify] This triggers on certain types in IE (Map/Set) so we don't\n  // wan't to early return out of the rest of the checks. However we can check\n  // if the second value is one of these values and the first isn't.\n\n\n  if (val1Tag === '[object Object]') {\n    // return keyCheck(val1, val2, strict, memos, kNoIterator);\n    if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n      return false;\n    }\n  }\n\n  if (isDate(val1)) {\n    if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n      return false;\n    }\n  } else if (isRegExp(val1)) {\n    if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n      return false;\n    }\n  } else if (isNativeError(val1) || val1 instanceof Error) {\n    // Do not compare the stack as it might differ even though the error itself\n    // is otherwise identical.\n    if (val1.message !== val2.message || val1.name !== val2.name) {\n      return false;\n    }\n  } else if (isArrayBufferView(val1)) {\n    if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n      if (!areSimilarFloatArrays(val1, val2)) {\n        return false;\n      }\n    } else if (!areSimilarTypedArrays(val1, val2)) {\n      return false;\n    } // Buffer.compare returns true, so val1.length === val2.length. If they both\n    // only contain numeric keys, we don't need to exam further than checking\n    // the symbols.\n\n\n    var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n\n    var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n    if (_keys.length !== _keys2.length) {\n      return false;\n    }\n\n    return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n  } else if (isSet(val1)) {\n    if (!isSet(val2) || val1.size !== val2.size) {\n      return false;\n    }\n\n    return keyCheck(val1, val2, strict, memos, kIsSet);\n  } else if (isMap(val1)) {\n    if (!isMap(val2) || val1.size !== val2.size) {\n      return false;\n    }\n\n    return keyCheck(val1, val2, strict, memos, kIsMap);\n  } else if (isAnyArrayBuffer(val1)) {\n    if (!areEqualArrayBuffers(val1, val2)) {\n      return false;\n    }\n  } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n    return false;\n  }\n\n  return keyCheck(val1, val2, strict, memos, kNoIterator);\n}\n\nfunction getEnumerables(val, keys) {\n  return keys.filter(function (k) {\n    return propertyIsEnumerable(val, k);\n  });\n}\n\nfunction keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n  // For all remaining Object pairs, including Array, objects and Maps,\n  // equivalence is determined by having:\n  // a) The same number of owned enumerable properties\n  // b) The same set of keys/indexes (although not necessarily the same order)\n  // c) Equivalent values for every corresponding key/index\n  // d) For Sets and Maps, equal contents\n  // Note: this accounts for both named and indexed properties on Arrays.\n  if (arguments.length === 5) {\n    aKeys = Object.keys(val1);\n    var bKeys = Object.keys(val2); // The pair must have the same number of owned properties.\n\n    if (aKeys.length !== bKeys.length) {\n      return false;\n    }\n  } // Cheap key test\n\n\n  var i = 0;\n\n  for (; i < aKeys.length; i++) {\n    if (!hasOwnProperty(val2, aKeys[i])) {\n      return false;\n    }\n  }\n\n  if (strict && arguments.length === 5) {\n    var symbolKeysA = objectGetOwnPropertySymbols(val1);\n\n    if (symbolKeysA.length !== 0) {\n      var count = 0;\n\n      for (i = 0; i < symbolKeysA.length; i++) {\n        var key = symbolKeysA[i];\n\n        if (propertyIsEnumerable(val1, key)) {\n          if (!propertyIsEnumerable(val2, key)) {\n            return false;\n          }\n\n          aKeys.push(key);\n          count++;\n        } else if (propertyIsEnumerable(val2, key)) {\n          return false;\n        }\n      }\n\n      var symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n      if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) {\n        return false;\n      }\n    } else {\n      var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n      if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n        return false;\n      }\n    }\n  }\n\n  if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n    return true;\n  } // Use memos to handle cycles.\n\n\n  if (memos === undefined) {\n    memos = {\n      val1: new Map(),\n      val2: new Map(),\n      position: 0\n    };\n  } else {\n    // We prevent up to two map.has(x) calls by directly retrieving the value\n    // and checking for undefined. The map can only contain numbers, so it is\n    // safe to check for undefined only.\n    var val2MemoA = memos.val1.get(val1);\n\n    if (val2MemoA !== undefined) {\n      var val2MemoB = memos.val2.get(val2);\n\n      if (val2MemoB !== undefined) {\n        return val2MemoA === val2MemoB;\n      }\n    }\n\n    memos.position++;\n  }\n\n  memos.val1.set(val1, memos.position);\n  memos.val2.set(val2, memos.position);\n  var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n  memos.val1.delete(val1);\n  memos.val2.delete(val2);\n  return areEq;\n}\n\nfunction setHasEqualElement(set, val1, strict, memo) {\n  // Go looking.\n  var setValues = arrayFromSet(set);\n\n  for (var i = 0; i < setValues.length; i++) {\n    var val2 = setValues[i];\n\n    if (innerDeepEqual(val1, val2, strict, memo)) {\n      // Remove the matching element to make sure we do not check that again.\n      set.delete(val2);\n      return true;\n    }\n  }\n\n  return false;\n} // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using\n// Sadly it is not possible to detect corresponding values properly in case the\n// type is a string, number, bigint or boolean. The reason is that those values\n// can match lots of different string values (e.g., 1n == '+00001').\n\n\nfunction findLooseMatchingPrimitives(prim) {\n  switch (_typeof(prim)) {\n    case 'undefined':\n      return null;\n\n    case 'object':\n      // Only pass in null as object!\n      return undefined;\n\n    case 'symbol':\n      return false;\n\n    case 'string':\n      prim = +prim;\n    // Loose equal entries exist only if the string is possible to convert to\n    // a regular number and not NaN.\n    // Fall through\n\n    case 'number':\n      if (numberIsNaN(prim)) {\n        return false;\n      }\n\n  }\n\n  return true;\n}\n\nfunction setMightHaveLoosePrim(a, b, prim) {\n  var altValue = findLooseMatchingPrimitives(prim);\n  if (altValue != null) return altValue;\n  return b.has(altValue) && !a.has(altValue);\n}\n\nfunction mapMightHaveLoosePrim(a, b, prim, item, memo) {\n  var altValue = findLooseMatchingPrimitives(prim);\n\n  if (altValue != null) {\n    return altValue;\n  }\n\n  var curB = b.get(altValue);\n\n  if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n    return false;\n  }\n\n  return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n}\n\nfunction setEquiv(a, b, strict, memo) {\n  // This is a lazily initiated Set of entries which have to be compared\n  // pairwise.\n  var set = null;\n  var aValues = arrayFromSet(a);\n\n  for (var i = 0; i < aValues.length; i++) {\n    var val = aValues[i]; // Note: Checking for the objects first improves the performance for object\n    // heavy sets but it is a minor slow down for primitives. As they are fast\n    // to check this improves the worst case scenario instead.\n\n    if (_typeof(val) === 'object' && val !== null) {\n      if (set === null) {\n        set = new Set();\n      } // If the specified value doesn't exist in the second set its an not null\n      // object (or non strict only: a not matching primitive) we'll need to go\n      // hunting for something thats deep-(strict-)equal to it. To make this\n      // O(n log n) complexity we have to copy these values in a new set first.\n\n\n      set.add(val);\n    } else if (!b.has(val)) {\n      if (strict) return false; // Fast path to detect missing string, symbol, undefined and null values.\n\n      if (!setMightHaveLoosePrim(a, b, val)) {\n        return false;\n      }\n\n      if (set === null) {\n        set = new Set();\n      }\n\n      set.add(val);\n    }\n  }\n\n  if (set !== null) {\n    var bValues = arrayFromSet(b);\n\n    for (var _i = 0; _i < bValues.length; _i++) {\n      var _val = bValues[_i]; // We have to check if a primitive value is already\n      // matching and only if it's not, go hunting for it.\n\n      if (_typeof(_val) === 'object' && _val !== null) {\n        if (!setHasEqualElement(set, _val, strict, memo)) return false;\n      } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n        return false;\n      }\n    }\n\n    return set.size === 0;\n  }\n\n  return true;\n}\n\nfunction mapHasEqualEntry(set, map, key1, item1, strict, memo) {\n  // To be able to handle cases like:\n  //   Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']])\n  // ... we need to consider *all* matching keys, not just the first we find.\n  var setValues = arrayFromSet(set);\n\n  for (var i = 0; i < setValues.length; i++) {\n    var key2 = setValues[i];\n\n    if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) {\n      set.delete(key2);\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction mapEquiv(a, b, strict, memo) {\n  var set = null;\n  var aEntries = arrayFromMap(a);\n\n  for (var i = 0; i < aEntries.length; i++) {\n    var _aEntries$i = _slicedToArray(aEntries[i], 2),\n        key = _aEntries$i[0],\n        item1 = _aEntries$i[1];\n\n    if (_typeof(key) === 'object' && key !== null) {\n      if (set === null) {\n        set = new Set();\n      }\n\n      set.add(key);\n    } else {\n      // By directly retrieving the value we prevent another b.has(key) check in\n      // almost all possible cases.\n      var item2 = b.get(key);\n\n      if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n        if (strict) return false; // Fast path to detect missing string, symbol, undefined and null\n        // keys.\n\n        if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false;\n\n        if (set === null) {\n          set = new Set();\n        }\n\n        set.add(key);\n      }\n    }\n  }\n\n  if (set !== null) {\n    var bEntries = arrayFromMap(b);\n\n    for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n      var _bEntries$_i = _slicedToArray(bEntries[_i2], 2),\n          key = _bEntries$_i[0],\n          item = _bEntries$_i[1];\n\n      if (_typeof(key) === 'object' && key !== null) {\n        if (!mapHasEqualEntry(set, a, key, item, strict, memo)) return false;\n      } else if (!strict && (!a.has(key) || !innerDeepEqual(a.get(key), item, false, memo)) && !mapHasEqualEntry(set, a, key, item, false, memo)) {\n        return false;\n      }\n    }\n\n    return set.size === 0;\n  }\n\n  return true;\n}\n\nfunction objEquiv(a, b, strict, keys, memos, iterationType) {\n  // Sets and maps don't have their entries accessible via normal object\n  // properties.\n  var i = 0;\n\n  if (iterationType === kIsSet) {\n    if (!setEquiv(a, b, strict, memos)) {\n      return false;\n    }\n  } else if (iterationType === kIsMap) {\n    if (!mapEquiv(a, b, strict, memos)) {\n      return false;\n    }\n  } else if (iterationType === kIsArray) {\n    for (; i < a.length; i++) {\n      if (hasOwnProperty(a, i)) {\n        if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n          return false;\n        }\n      } else if (hasOwnProperty(b, i)) {\n        return false;\n      } else {\n        // Array is sparse.\n        var keysA = Object.keys(a);\n\n        for (; i < keysA.length; i++) {\n          var key = keysA[i];\n\n          if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n            return false;\n          }\n        }\n\n        if (keysA.length !== Object.keys(b).length) {\n          return false;\n        }\n\n        return true;\n      }\n    }\n  } // The pair must have equivalent values for every corresponding key.\n  // Possibly expensive deep test:\n\n\n  for (i = 0; i < keys.length; i++) {\n    var _key = keys[i];\n\n    if (!innerDeepEqual(a[_key], b[_key], strict, memos)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction isDeepEqual(val1, val2) {\n  return innerDeepEqual(val1, val2, kLoose);\n}\n\nfunction isDeepStrictEqual(val1, val2) {\n  return innerDeepEqual(val1, val2, kStrict);\n}\n\nmodule.exports = {\n  isDeepEqual: isDeepEqual,\n  isDeepStrictEqual: isDeepStrictEqual\n};\n\n/***/ }),\n\n/***/ 2055:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\n// The following break classes are handled by the pair table\nexports.OP = 0; // Opening punctuation\nexports.CL = 1; // Closing punctuation\nexports.CP = 2; // Closing parenthesis\nexports.QU = 3; // Ambiguous quotation\nexports.GL = 4; // Glue\nexports.NS = 5; // Non-starters\nexports.EX = 6; // Exclamation/Interrogation\nexports.SY = 7; // Symbols allowing break after\nexports.IS = 8; // Infix separator\nexports.PR = 9; // Prefix\nexports.PO = 10; // Postfix\nexports.NU = 11; // Numeric\nexports.AL = 12; // Alphabetic\nexports.HL = 13; // Hebrew Letter\nexports.ID = 14; // Ideographic\nexports.IN = 15; // Inseparable characters\nexports.HY = 16; // Hyphen\nexports.BA = 17; // Break after\nexports.BB = 18; // Break before\nexports.B2 = 19; // Break on either side (but not pair)\nexports.ZW = 20; // Zero-width space\nexports.CM = 21; // Combining marks\nexports.WJ = 22; // Word joiner\nexports.H2 = 23; // Hangul LV\nexports.H3 = 24; // Hangul LVT\nexports.JL = 25; // Hangul L Jamo\nexports.JV = 26; // Hangul V Jamo\nexports.JT = 27; // Hangul T Jamo\nexports.RI = 28; // Regional Indicator\nexports.EB = 29; // Emoji Base\nexports.EM = 30; // Emoji Modifier\nexports.ZWJ = 31; // Zero Width Joiner\nexports.CB = 32; // Contingent break\n\n// The following break classes are not handled by the pair table\nexports.AI = 33; // Ambiguous (Alphabetic or Ideograph)\nexports.BK = 34; // Break (mandatory)\nexports.CJ = 35; // Conditional Japanese Starter\nexports.CR = 36; // Carriage return\nexports.LF = 37; // Line feed\nexports.NL = 38; // Next line\nexports.SA = 39; // South-East Asian\nexports.SG = 40; // Surrogates\nexports.SP = 41; // Space\nexports.XX = 42; // Unknown\n\n/***/ }),\n\n/***/ 8383:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\nvar CI_BRK, CP_BRK, DI_BRK, IN_BRK, PR_BRK;\nexports.DI_BRK = DI_BRK = 0; // Direct break opportunity\nexports.IN_BRK = IN_BRK = 1; // Indirect break opportunity\nexports.CI_BRK = CI_BRK = 2; // Indirect break opportunity for combining marks\nexports.CP_BRK = CP_BRK = 3; // Prohibited break for combining marks\nexports.PR_BRK = PR_BRK = 4; // Prohibited break\n\n// Based on example pair table from https://www.unicode.org/reports/tr14/tr14-37.html#Table2\n// - ZWJ special processing for LB8a of Revision 41\n// - CB manually added as per Rule LB20\n// - CL, CP, NS, SY, IS, PR, PO, HY, BA, B2 and RI manually adjusted as per LB22 of Revision 45\nexports.pairTable = [\n//OP   , CL    , CP    , QU    , GL    , NS    , EX    , SY    , IS    , PR    , PO    , NU    , AL    , HL    , ID    , IN    , HY    , BA    , BB    , B2    , ZW    , CM    , WJ    , H2    , H3    , JL    , JV    , JT    , RI    , EB    , EM    , ZWJ   , CB\n[PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK],\n// OP\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// CL\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// CP\n[PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK],\n// QU\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK],\n// GL\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// NS\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// EX\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// SY\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// IS\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK],\n// PR\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// PO\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// NU\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// AL\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// HL\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// ID\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// IN\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// HY\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// BA\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK],\n// BB\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// B2\n[DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK],\n// ZW\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// CM\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK],\n// WJ\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// H2\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// H3\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// JL\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// JV\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// JT\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// RI\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK],\n// EB\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// EM\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// ZWJ\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK] // CB\n];\n\n/***/ }),\n\n/***/ 5106:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(9601);\nexports.EncodeStream = __webpack_require__(9126);\nexports.DecodeStream = __webpack_require__(3030);\nexports.Array = __webpack_require__(1988);\nexports.LazyArray = __webpack_require__(6768);\nexports.Bitfield = __webpack_require__(3425);\nexports.Boolean = __webpack_require__(9024);\nexports.Buffer = __webpack_require__(5250);\nexports.Enum = __webpack_require__(3100);\nexports.Optional = __webpack_require__(9541);\nexports.Reserved = __webpack_require__(7468);\nexports.String = __webpack_require__(1466);\nexports.Struct = __webpack_require__(1219);\nexports.VersionedStruct = __webpack_require__(3585);\nvar utils = __webpack_require__(6610);\nvar NumberT = __webpack_require__(6462);\nvar Pointer = __webpack_require__(8011);\nObject.assign(exports, utils, NumberT, Pointer);\n\n/***/ }),\n\n/***/ 1988:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n__webpack_require__(1539);\n__webpack_require__(8309);\n__webpack_require__(1038);\n__webpack_require__(8783);\n__webpack_require__(4916);\n__webpack_require__(2526);\n__webpack_require__(1817);\n__webpack_require__(2165);\n__webpack_require__(6992);\n__webpack_require__(3948);\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nvar _require = __webpack_require__(6462),\n  NumberT = _require.Number;\nvar utils = __webpack_require__(6610);\nvar ArrayT = /*#__PURE__*/function () {\n  function ArrayT(type, length, lengthType) {\n    if (lengthType === void 0) {\n      lengthType = 'count';\n    }\n    this.type = type;\n    this.length = length;\n    this.lengthType = lengthType;\n  }\n  var _proto = ArrayT.prototype;\n  _proto.decode = function decode(stream, parent) {\n    var length;\n    var pos = stream.pos;\n    var res = [];\n    var ctx = parent;\n    if (this.length != null) {\n      length = utils.resolveLength(this.length, stream, parent);\n    }\n    if (this.length instanceof NumberT) {\n      // define hidden properties\n      Object.defineProperties(res, {\n        parent: {\n          value: parent\n        },\n        _startOffset: {\n          value: pos\n        },\n        _currentOffset: {\n          value: 0,\n          writable: true\n        },\n        _length: {\n          value: length\n        }\n      });\n      ctx = res;\n    }\n    if (length == null || this.lengthType === 'bytes') {\n      var target = length != null ? stream.pos + length : (parent != null ? parent._length : undefined) ? parent._startOffset + parent._length : stream.length;\n      while (stream.pos < target) {\n        res.push(this.type.decode(stream, ctx));\n      }\n    } else {\n      for (var i = 0, end = length; i < end; i++) {\n        res.push(this.type.decode(stream, ctx));\n      }\n    }\n    return res;\n  };\n  _proto.size = function size(array, ctx) {\n    if (!array) {\n      return this.type.size(null, ctx) * utils.resolveLength(this.length, null, ctx);\n    }\n    var size = 0;\n    if (this.length instanceof NumberT) {\n      size += this.length.size();\n      ctx = {\n        parent: ctx\n      };\n    }\n    for (var _iterator = _createForOfIteratorHelperLoose(array), _step; !(_step = _iterator()).done;) {\n      var item = _step.value;\n      size += this.type.size(item, ctx);\n    }\n    return size;\n  };\n  _proto.encode = function encode(stream, array, parent) {\n    var ctx = parent;\n    if (this.length instanceof NumberT) {\n      ctx = {\n        pointers: [],\n        startOffset: stream.pos,\n        parent: parent\n      };\n      ctx.pointerOffset = stream.pos + this.size(array, ctx);\n      this.length.encode(stream, array.length);\n    }\n    for (var _iterator2 = _createForOfIteratorHelperLoose(array), _step2; !(_step2 = _iterator2()).done;) {\n      var item = _step2.value;\n      this.type.encode(stream, item, ctx);\n    }\n    if (this.length instanceof NumberT) {\n      var i = 0;\n      while (i < ctx.pointers.length) {\n        var ptr = ctx.pointers[i++];\n        ptr.type.encode(stream, ptr.val);\n      }\n    }\n  };\n  return ArrayT;\n}();\nmodule.exports = ArrayT;\n\n/***/ }),\n\n/***/ 3425:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2087);\nvar Bitfield = /*#__PURE__*/function () {\n  function Bitfield(type, flags) {\n    if (flags === void 0) {\n      flags = [];\n    }\n    this.type = type;\n    this.flags = flags;\n  }\n  var _proto = Bitfield.prototype;\n  _proto.decode = function decode(stream) {\n    var val = this.type.decode(stream);\n    var res = {};\n    for (var i = 0; i < this.flags.length; i++) {\n      var flag = this.flags[i];\n      if (flag != null) {\n        res[flag] = !!(val & 1 << i);\n      }\n    }\n    return res;\n  };\n  _proto.size = function size() {\n    return this.type.size();\n  };\n  _proto.encode = function encode(stream, keys) {\n    var val = 0;\n    for (var i = 0; i < this.flags.length; i++) {\n      var flag = this.flags[i];\n      if (flag != null) {\n        if (keys[flag]) {\n          val |= 1 << i;\n        }\n      }\n    }\n    return this.type.encode(stream, val);\n  };\n  return Bitfield;\n}();\nmodule.exports = Bitfield;\n\n/***/ }),\n\n/***/ 9024:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar BooleanT = /*#__PURE__*/function () {\n  function BooleanT(type) {\n    this.type = type;\n  }\n  var _proto = BooleanT.prototype;\n  _proto.decode = function decode(stream, parent) {\n    return !!this.type.decode(stream, parent);\n  };\n  _proto.size = function size(val, parent) {\n    return this.type.size(val, parent);\n  };\n  _proto.encode = function encode(stream, val, parent) {\n    return this.type.encode(stream, +val, parent);\n  };\n  return BooleanT;\n}();\nmodule.exports = BooleanT;\n\n/***/ }),\n\n/***/ 5250:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(6610);\nvar _require = __webpack_require__(6462),\n  NumberT = _require.Number;\nvar BufferT = /*#__PURE__*/function () {\n  function BufferT(length) {\n    this.length = length;\n  }\n  var _proto = BufferT.prototype;\n  _proto.decode = function decode(stream, parent) {\n    var length = utils.resolveLength(this.length, stream, parent);\n    return stream.readBuffer(length);\n  };\n  _proto.size = function size(val, parent) {\n    if (!val) {\n      return utils.resolveLength(this.length, null, parent);\n    }\n    return val.length;\n  };\n  _proto.encode = function encode(stream, buf, parent) {\n    if (this.length instanceof NumberT) {\n      this.length.encode(stream, buf.length);\n    }\n    return stream.writeBuffer(buf);\n  };\n  return BufferT;\n}();\nmodule.exports = BufferT;\n\n/***/ }),\n\n/***/ 3030:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\n__webpack_require__(1539);\n__webpack_require__(9714);\n__webpack_require__(7042);\n__webpack_require__(4916);\n__webpack_require__(5306);\nvar iconv;\ntry {\n  iconv = __webpack_require__(4914);\n} catch (error) {}\nvar DecodeStream = /*#__PURE__*/function () {\n  function DecodeStream(buffer) {\n    this.buffer = buffer;\n    this.pos = 0;\n    this.length = this.buffer.length;\n  }\n  var _proto = DecodeStream.prototype;\n  _proto.readString = function readString(length, encoding) {\n    if (encoding === void 0) {\n      encoding = 'ascii';\n    }\n    switch (encoding) {\n      case 'utf16le':\n      case 'ucs2':\n      case 'utf8':\n      case 'ascii':\n        return this.buffer.toString(encoding, this.pos, this.pos += length);\n      case 'utf16be':\n        var buf = Buffer.from(this.readBuffer(length));\n\n        // swap the bytes\n        for (var i = 0, end = buf.length - 1; i < end; i += 2) {\n          var byte = buf[i];\n          buf[i] = buf[i + 1];\n          buf[i + 1] = byte;\n        }\n        return buf.toString('utf16le');\n      default:\n        buf = this.readBuffer(length);\n        if (iconv) {\n          try {\n            return iconv.decode(buf, encoding);\n          } catch (error1) {}\n        }\n        return buf;\n    }\n  };\n  _proto.readBuffer = function readBuffer(length) {\n    return this.buffer.slice(this.pos, this.pos += length);\n  };\n  _proto.readUInt24BE = function readUInt24BE() {\n    return (this.readUInt16BE() << 8) + this.readUInt8();\n  };\n  _proto.readUInt24LE = function readUInt24LE() {\n    return this.readUInt16LE() + (this.readUInt8() << 16);\n  };\n  _proto.readInt24BE = function readInt24BE() {\n    return (this.readInt16BE() << 8) + this.readUInt8();\n  };\n  _proto.readInt24LE = function readInt24LE() {\n    return this.readUInt16LE() + (this.readInt8() << 16);\n  };\n  return DecodeStream;\n}();\nDecodeStream.TYPES = {\n  UInt8: 1,\n  UInt16: 2,\n  UInt24: 3,\n  UInt32: 4,\n  Int8: 1,\n  Int16: 2,\n  Int24: 3,\n  Int32: 4,\n  Float: 4,\n  Double: 8\n};\nvar _loop = function _loop(key) {\n  if (key.slice(0, 4) === 'read') {\n    var bytes = DecodeStream.TYPES[key.replace(/read|[BL]E/g, '')];\n    DecodeStream.prototype[key] = function () {\n      var ret = this.buffer[key](this.pos);\n      this.pos += bytes;\n      return ret;\n    };\n  }\n};\nfor (var key in Buffer.prototype) {\n  _loop(key);\n}\nmodule.exports = DecodeStream;\n\n/***/ }),\n\n/***/ 9126:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\n__webpack_require__(7042);\n__webpack_require__(3290);\n__webpack_require__(4916);\n__webpack_require__(5306);\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nvar iconv;\nvar stream = __webpack_require__(2830);\nvar DecodeStream = __webpack_require__(3030);\ntry {\n  iconv = __webpack_require__(4914);\n} catch (error) {}\nvar EncodeStream = /*#__PURE__*/function (_stream$Readable) {\n  _inheritsLoose(EncodeStream, _stream$Readable);\n  function EncodeStream(bufferSize) {\n    var _this;\n    if (bufferSize === void 0) {\n      bufferSize = 65536;\n    }\n    _this = _stream$Readable.apply(this, arguments) || this;\n    _this.buffer = Buffer.alloc(bufferSize);\n    _this.bufferOffset = 0;\n    _this.pos = 0;\n    return _this;\n  }\n\n  // do nothing, required by node\n  var _proto = EncodeStream.prototype;\n  _proto._read = function _read() {};\n  _proto.ensure = function ensure(bytes) {\n    if (this.bufferOffset + bytes > this.buffer.length) {\n      return this.flush();\n    }\n  };\n  _proto.flush = function flush() {\n    if (this.bufferOffset > 0) {\n      this.push(Buffer.from(this.buffer.slice(0, this.bufferOffset)));\n      return this.bufferOffset = 0;\n    }\n  };\n  _proto.writeBuffer = function writeBuffer(buffer) {\n    this.flush();\n    this.push(buffer);\n    return this.pos += buffer.length;\n  };\n  _proto.writeString = function writeString(string, encoding) {\n    if (encoding === void 0) {\n      encoding = 'ascii';\n    }\n    switch (encoding) {\n      case 'utf16le':\n      case 'ucs2':\n      case 'utf8':\n      case 'ascii':\n        return this.writeBuffer(Buffer.from(string, encoding));\n      case 'utf16be':\n        var buf = Buffer.from(string, 'utf16le');\n\n        // swap the bytes\n        for (var i = 0, end = buf.length - 1; i < end; i += 2) {\n          var byte = buf[i];\n          buf[i] = buf[i + 1];\n          buf[i + 1] = byte;\n        }\n        return this.writeBuffer(buf);\n      default:\n        if (iconv) {\n          return this.writeBuffer(iconv.encode(string, encoding));\n        } else {\n          throw new Error('Install iconv-lite to enable additional string encodings.');\n        }\n    }\n  };\n  _proto.writeUInt24BE = function writeUInt24BE(val) {\n    this.ensure(3);\n    this.buffer[this.bufferOffset++] = val >>> 16 & 0xff;\n    this.buffer[this.bufferOffset++] = val >>> 8 & 0xff;\n    this.buffer[this.bufferOffset++] = val & 0xff;\n    return this.pos += 3;\n  };\n  _proto.writeUInt24LE = function writeUInt24LE(val) {\n    this.ensure(3);\n    this.buffer[this.bufferOffset++] = val & 0xff;\n    this.buffer[this.bufferOffset++] = val >>> 8 & 0xff;\n    this.buffer[this.bufferOffset++] = val >>> 16 & 0xff;\n    return this.pos += 3;\n  };\n  _proto.writeInt24BE = function writeInt24BE(val) {\n    if (val >= 0) {\n      return this.writeUInt24BE(val);\n    } else {\n      return this.writeUInt24BE(val + 0xffffff + 1);\n    }\n  };\n  _proto.writeInt24LE = function writeInt24LE(val) {\n    if (val >= 0) {\n      return this.writeUInt24LE(val);\n    } else {\n      return this.writeUInt24LE(val + 0xffffff + 1);\n    }\n  };\n  _proto.fill = function fill(val, length) {\n    if (length < this.buffer.length) {\n      this.ensure(length);\n      this.buffer.fill(val, this.bufferOffset, this.bufferOffset + length);\n      this.bufferOffset += length;\n      return this.pos += length;\n    } else {\n      var buf = Buffer.alloc(length);\n      buf.fill(val);\n      return this.writeBuffer(buf);\n    }\n  };\n  _proto.end = function end() {\n    this.flush();\n    return this.push(null);\n  };\n  return EncodeStream;\n}(stream.Readable);\nvar _loop = function _loop(key) {\n  if (key.slice(0, 5) === 'write') {\n    var bytes = +DecodeStream.TYPES[key.replace(/write|[BL]E/g, '')];\n    EncodeStream.prototype[key] = function (value) {\n      this.ensure(bytes);\n      this.buffer[key](value, this.bufferOffset);\n      this.bufferOffset += bytes;\n      return this.pos += bytes;\n    };\n  }\n};\nfor (var key in Buffer.prototype) {\n  _loop(key);\n}\nmodule.exports = EncodeStream;\n\n/***/ }),\n\n/***/ 3100:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar Enum = /*#__PURE__*/function () {\n  function Enum(type, options) {\n    if (options === void 0) {\n      options = [];\n    }\n    this.type = type;\n    this.options = options;\n  }\n  var _proto = Enum.prototype;\n  _proto.decode = function decode(stream) {\n    var index = this.type.decode(stream);\n    return this.options[index] || index;\n  };\n  _proto.size = function size() {\n    return this.type.size();\n  };\n  _proto.encode = function encode(stream, val) {\n    var index = this.options.indexOf(val);\n    if (index === -1) {\n      throw new Error(\"Unknown option in enum: \" + val);\n    }\n    return this.type.encode(stream, index);\n  };\n  return Enum;\n}();\nmodule.exports = Enum;\n\n/***/ }),\n\n/***/ 6768:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(1539);\n__webpack_require__(8674);\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nvar ArrayT = __webpack_require__(1988);\nvar _require = __webpack_require__(6462),\n  NumberT = _require.Number;\nvar utils = __webpack_require__(6610);\nvar _require2 = __webpack_require__(9539),\n  _inspect = _require2.inspect;\nvar LazyArrayT = /*#__PURE__*/function (_ArrayT) {\n  _inheritsLoose(LazyArrayT, _ArrayT);\n  function LazyArrayT() {\n    return _ArrayT.apply(this, arguments) || this;\n  }\n  var _proto = LazyArrayT.prototype;\n  _proto.decode = function decode(stream, parent) {\n    var pos = stream.pos;\n    var length = utils.resolveLength(this.length, stream, parent);\n    if (this.length instanceof NumberT) {\n      parent = {\n        parent: parent,\n        _startOffset: pos,\n        _currentOffset: 0,\n        _length: length\n      };\n    }\n    var res = new LazyArray(this.type, length, stream, parent);\n    stream.pos += length * this.type.size(null, parent);\n    return res;\n  };\n  _proto.size = function size(val, ctx) {\n    if (val instanceof LazyArray) {\n      val = val.toArray();\n    }\n    return _ArrayT.prototype.size.call(this, val, ctx);\n  };\n  _proto.encode = function encode(stream, val, ctx) {\n    if (val instanceof LazyArray) {\n      val = val.toArray();\n    }\n    return _ArrayT.prototype.encode.call(this, stream, val, ctx);\n  };\n  return LazyArrayT;\n}(ArrayT);\nvar LazyArray = /*#__PURE__*/function () {\n  function LazyArray(type, length, stream, ctx) {\n    this.type = type;\n    this.length = length;\n    this.stream = stream;\n    this.ctx = ctx;\n    this.base = this.stream.pos;\n    this.items = [];\n  }\n  var _proto2 = LazyArray.prototype;\n  _proto2.get = function get(index) {\n    if (index < 0 || index >= this.length) {\n      return undefined;\n    }\n    if (this.items[index] == null) {\n      var pos = this.stream.pos;\n      this.stream.pos = this.base + this.type.size(null, this.ctx) * index;\n      this.items[index] = this.type.decode(this.stream, this.ctx);\n      this.stream.pos = pos;\n    }\n    return this.items[index];\n  };\n  _proto2.toArray = function toArray() {\n    var result = [];\n    for (var i = 0, end = this.length; i < end; i++) {\n      result.push(this.get(i));\n    }\n    return result;\n  };\n  _proto2.inspect = function inspect() {\n    return _inspect(this.toArray());\n  };\n  return LazyArray;\n}();\nmodule.exports = LazyArrayT;\n\n/***/ }),\n\n/***/ 6462:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nvar DecodeStream = __webpack_require__(3030);\nvar NumberT = /*#__PURE__*/function () {\n  function NumberT(type, endian) {\n    if (endian === void 0) {\n      endian = 'BE';\n    }\n    this.type = type;\n    this.endian = endian;\n    this.fn = this.type;\n    if (this.type[this.type.length - 1] !== '8') {\n      this.fn += this.endian;\n    }\n  }\n  var _proto = NumberT.prototype;\n  _proto.size = function size() {\n    return DecodeStream.TYPES[this.type];\n  };\n  _proto.decode = function decode(stream) {\n    return stream[\"read\" + this.fn]();\n  };\n  _proto.encode = function encode(stream, val) {\n    return stream[\"write\" + this.fn](val);\n  };\n  return NumberT;\n}();\nexports.Number = NumberT;\nexports.uint8 = new NumberT('UInt8');\nexports.uint16be = exports.uint16 = new NumberT('UInt16', 'BE');\nexports.uint16le = new NumberT('UInt16', 'LE');\nexports.uint24be = exports.uint24 = new NumberT('UInt24', 'BE');\nexports.uint24le = new NumberT('UInt24', 'LE');\nexports.uint32be = exports.uint32 = new NumberT('UInt32', 'BE');\nexports.uint32le = new NumberT('UInt32', 'LE');\nexports.int8 = new NumberT('Int8');\nexports.int16be = exports.int16 = new NumberT('Int16', 'BE');\nexports.int16le = new NumberT('Int16', 'LE');\nexports.int24be = exports.int24 = new NumberT('Int24', 'BE');\nexports.int24le = new NumberT('Int24', 'LE');\nexports.int32be = exports.int32 = new NumberT('Int32', 'BE');\nexports.int32le = new NumberT('Int32', 'LE');\nexports.floatbe = exports.float = new NumberT('Float', 'BE');\nexports.floatle = new NumberT('Float', 'LE');\nexports.doublebe = exports.double = new NumberT('Double', 'BE');\nexports.doublele = new NumberT('Double', 'LE');\nvar Fixed = /*#__PURE__*/function (_NumberT) {\n  _inheritsLoose(Fixed, _NumberT);\n  function Fixed(size, endian, fracBits) {\n    var _this;\n    if (fracBits === void 0) {\n      fracBits = size >> 1;\n    }\n    _this = _NumberT.call(this, \"Int\" + size, endian) || this;\n    _this._point = 1 << fracBits;\n    return _this;\n  }\n  var _proto2 = Fixed.prototype;\n  _proto2.decode = function decode(stream) {\n    return _NumberT.prototype.decode.call(this, stream) / this._point;\n  };\n  _proto2.encode = function encode(stream, val) {\n    return _NumberT.prototype.encode.call(this, stream, val * this._point | 0);\n  };\n  return Fixed;\n}(NumberT);\nexports.Fixed = Fixed;\nexports.fixed16be = exports.fixed16 = new Fixed(16, 'BE');\nexports.fixed16le = new Fixed(16, 'LE');\nexports.fixed32be = exports.fixed32 = new Fixed(32, 'BE');\nexports.fixed32le = new Fixed(32, 'LE');\n\n/***/ }),\n\n/***/ 9541:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar Optional = /*#__PURE__*/function () {\n  function Optional(type, condition) {\n    if (condition === void 0) {\n      condition = true;\n    }\n    this.type = type;\n    this.condition = condition;\n  }\n  var _proto = Optional.prototype;\n  _proto.decode = function decode(stream, parent) {\n    var condition = this.condition;\n    if (typeof condition === 'function') {\n      condition = condition.call(parent, parent);\n    }\n    if (condition) {\n      return this.type.decode(stream, parent);\n    }\n  };\n  _proto.size = function size(val, parent) {\n    var condition = this.condition;\n    if (typeof condition === 'function') {\n      condition = condition.call(parent, parent);\n    }\n    if (condition) {\n      return this.type.size(val, parent);\n    } else {\n      return 0;\n    }\n  };\n  _proto.encode = function encode(stream, val, parent) {\n    var condition = this.condition;\n    if (typeof condition === 'function') {\n      condition = condition.call(parent, parent);\n    }\n    if (condition) {\n      return this.type.encode(stream, val, parent);\n    }\n  };\n  return Optional;\n}();\nmodule.exports = Optional;\n\n/***/ }),\n\n/***/ 8011:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(6610);\nvar Pointer = /*#__PURE__*/function () {\n  function Pointer(offsetType, type, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    this.offsetType = offsetType;\n    this.type = type;\n    this.options = options;\n    if (this.type === 'void') {\n      this.type = null;\n    }\n    if (this.options.type == null) {\n      this.options.type = 'local';\n    }\n    if (this.options.allowNull == null) {\n      this.options.allowNull = true;\n    }\n    if (this.options.nullValue == null) {\n      this.options.nullValue = 0;\n    }\n    if (this.options.lazy == null) {\n      this.options.lazy = false;\n    }\n    if (this.options.relativeTo) {\n      if (typeof this.options.relativeTo !== 'function') {\n        throw new Error('relativeTo option must be a function');\n      }\n      this.relativeToGetter = options.relativeTo;\n    }\n  }\n  var _proto = Pointer.prototype;\n  _proto.decode = function decode(stream, ctx) {\n    var _this = this;\n    var offset = this.offsetType.decode(stream, ctx);\n\n    // handle NULL pointers\n    if (offset === this.options.nullValue && this.options.allowNull) {\n      return null;\n    }\n    var relative;\n    switch (this.options.type) {\n      case 'local':\n        relative = ctx._startOffset;\n        break;\n      case 'immediate':\n        relative = stream.pos - this.offsetType.size();\n        break;\n      case 'parent':\n        relative = ctx.parent._startOffset;\n        break;\n      default:\n        var c = ctx;\n        while (c.parent) {\n          c = c.parent;\n        }\n        relative = c._startOffset || 0;\n    }\n    if (this.options.relativeTo) {\n      relative += this.relativeToGetter(ctx);\n    }\n    var ptr = offset + relative;\n    if (this.type != null) {\n      var val = null;\n      var decodeValue = function decodeValue() {\n        if (val != null) {\n          return val;\n        }\n        var pos = stream.pos;\n        stream.pos = ptr;\n        val = _this.type.decode(stream, ctx);\n        stream.pos = pos;\n        return val;\n      };\n\n      // If this is a lazy pointer, define a getter to decode only when needed.\n      // This obviously only works when the pointer is contained by a Struct.\n      if (this.options.lazy) {\n        return new utils.PropertyDescriptor({\n          get: decodeValue\n        });\n      }\n      return decodeValue();\n    } else {\n      return ptr;\n    }\n  };\n  _proto.size = function size(val, ctx) {\n    var parent = ctx;\n    switch (this.options.type) {\n      case 'local':\n      case 'immediate':\n        break;\n      case 'parent':\n        ctx = ctx.parent;\n        break;\n      default:\n        // global\n        while (ctx.parent) {\n          ctx = ctx.parent;\n        }\n    }\n    var type = this.type;\n    if (type == null) {\n      if (!(val instanceof VoidPointer)) {\n        throw new Error(\"Must be a VoidPointer\");\n      }\n      var _val = val;\n      type = _val.type;\n      val = val.value;\n    }\n    if (val && ctx) {\n      ctx.pointerSize += type.size(val, parent);\n    }\n    return this.offsetType.size();\n  };\n  _proto.encode = function encode(stream, val, ctx) {\n    var relative;\n    var parent = ctx;\n    if (val == null) {\n      this.offsetType.encode(stream, this.options.nullValue);\n      return;\n    }\n    switch (this.options.type) {\n      case 'local':\n        relative = ctx.startOffset;\n        break;\n      case 'immediate':\n        relative = stream.pos + this.offsetType.size(val, parent);\n        break;\n      case 'parent':\n        ctx = ctx.parent;\n        relative = ctx.startOffset;\n        break;\n      default:\n        // global\n        relative = 0;\n        while (ctx.parent) {\n          ctx = ctx.parent;\n        }\n    }\n    if (this.options.relativeTo) {\n      relative += this.relativeToGetter(parent.val);\n    }\n    this.offsetType.encode(stream, ctx.pointerOffset - relative);\n    var type = this.type;\n    if (type == null) {\n      if (!(val instanceof VoidPointer)) {\n        throw new Error(\"Must be a VoidPointer\");\n      }\n      var _val2 = val;\n      type = _val2.type;\n      val = val.value;\n    }\n    ctx.pointers.push({\n      type: type,\n      val: val,\n      parent: parent\n    });\n    return ctx.pointerOffset += type.size(val, parent);\n  };\n  return Pointer;\n}(); // A pointer whose type is determined at decode time\nvar VoidPointer = function VoidPointer(type, value) {\n  this.type = type;\n  this.value = value;\n};\nexports.Pointer = Pointer;\nexports.VoidPointer = VoidPointer;\n\n/***/ }),\n\n/***/ 7468:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(3290);\nvar utils = __webpack_require__(6610);\nvar Reserved = /*#__PURE__*/function () {\n  function Reserved(type, count) {\n    if (count === void 0) {\n      count = 1;\n    }\n    this.type = type;\n    this.count = count;\n  }\n  var _proto = Reserved.prototype;\n  _proto.decode = function decode(stream, parent) {\n    stream.pos += this.size(null, parent);\n    return undefined;\n  };\n  _proto.size = function size(data, parent) {\n    var count = utils.resolveLength(this.count, null, parent);\n    return this.type.size() * count;\n  };\n  _proto.encode = function encode(stream, val, parent) {\n    return stream.fill(0, this.size(val, parent));\n  };\n  return Reserved;\n}();\nmodule.exports = Reserved;\n\n/***/ }),\n\n/***/ 1466:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\nvar _require = __webpack_require__(6462),\n  NumberT = _require.Number;\nvar utils = __webpack_require__(6610);\nvar StringT = /*#__PURE__*/function () {\n  function StringT(length, encoding) {\n    if (encoding === void 0) {\n      encoding = 'ascii';\n    }\n    this.length = length;\n    this.encoding = encoding;\n  }\n  var _proto = StringT.prototype;\n  _proto.decode = function decode(stream, parent) {\n    var length, pos;\n    if (this.length != null) {\n      length = utils.resolveLength(this.length, stream, parent);\n    } else {\n      var buffer;\n      buffer = stream.buffer;\n      length = stream.length;\n      pos = stream.pos;\n      while (pos < length && buffer[pos] !== 0x00) {\n        ++pos;\n      }\n      length = pos - stream.pos;\n    }\n    var encoding = this.encoding;\n    if (typeof encoding === 'function') {\n      encoding = encoding.call(parent, parent) || 'ascii';\n    }\n    var string = stream.readString(length, encoding);\n    if (this.length == null && stream.pos < stream.length) {\n      stream.pos++;\n    }\n    return string;\n  };\n  _proto.size = function size(val, parent) {\n    // Use the defined value if no value was given\n    if (!val) {\n      return utils.resolveLength(this.length, null, parent);\n    }\n    var encoding = this.encoding;\n    if (typeof encoding === 'function') {\n      encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';\n    }\n    if (encoding === 'utf16be') {\n      encoding = 'utf16le';\n    }\n    var size = Buffer.byteLength(val, encoding);\n    if (this.length instanceof NumberT) {\n      size += this.length.size();\n    }\n    if (this.length == null) {\n      size++;\n    }\n    return size;\n  };\n  _proto.encode = function encode(stream, val, parent) {\n    var encoding = this.encoding;\n    if (typeof encoding === 'function') {\n      encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';\n    }\n    if (this.length instanceof NumberT) {\n      this.length.encode(stream, Buffer.byteLength(val, encoding));\n    }\n    stream.writeString(val, encoding);\n    if (this.length == null) {\n      return stream.writeUInt8(0x00);\n    }\n  };\n  return StringT;\n}();\nmodule.exports = StringT;\n\n/***/ }),\n\n/***/ 1219:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(6610);\nvar Struct = /*#__PURE__*/function () {\n  function Struct(fields) {\n    if (fields === void 0) {\n      fields = {};\n    }\n    this.fields = fields;\n  }\n  var _proto = Struct.prototype;\n  _proto.decode = function decode(stream, parent, length) {\n    if (length === void 0) {\n      length = 0;\n    }\n    var res = this._setup(stream, parent, length);\n    this._parseFields(stream, res, this.fields);\n    if (this.process != null) {\n      this.process.call(res, stream);\n    }\n    return res;\n  };\n  _proto._setup = function _setup(stream, parent, length) {\n    var res = {};\n\n    // define hidden properties\n    Object.defineProperties(res, {\n      parent: {\n        value: parent\n      },\n      _startOffset: {\n        value: stream.pos\n      },\n      _currentOffset: {\n        value: 0,\n        writable: true\n      },\n      _length: {\n        value: length\n      }\n    });\n    return res;\n  };\n  _proto._parseFields = function _parseFields(stream, res, fields) {\n    for (var key in fields) {\n      var val;\n      var type = fields[key];\n      if (typeof type === 'function') {\n        val = type.call(res, res);\n      } else {\n        val = type.decode(stream, res);\n      }\n      if (val !== undefined) {\n        if (val instanceof utils.PropertyDescriptor) {\n          Object.defineProperty(res, key, val);\n        } else {\n          res[key] = val;\n        }\n      }\n      res._currentOffset = stream.pos - res._startOffset;\n    }\n  };\n  _proto.size = function size(val, parent, includePointers) {\n    if (val == null) {\n      val = {};\n    }\n    if (includePointers == null) {\n      includePointers = true;\n    }\n    var ctx = {\n      parent: parent,\n      val: val,\n      pointerSize: 0\n    };\n    var size = 0;\n    for (var key in this.fields) {\n      var type = this.fields[key];\n      if (type.size != null) {\n        size += type.size(val[key], ctx);\n      }\n    }\n    if (includePointers) {\n      size += ctx.pointerSize;\n    }\n    return size;\n  };\n  _proto.encode = function encode(stream, val, parent) {\n    var type;\n    if (this.preEncode != null) {\n      this.preEncode.call(val, stream);\n    }\n    var ctx = {\n      pointers: [],\n      startOffset: stream.pos,\n      parent: parent,\n      val: val,\n      pointerSize: 0\n    };\n    ctx.pointerOffset = stream.pos + this.size(val, ctx, false);\n    for (var key in this.fields) {\n      type = this.fields[key];\n      if (type.encode != null) {\n        type.encode(stream, val[key], ctx);\n      }\n    }\n    var i = 0;\n    while (i < ctx.pointers.length) {\n      var ptr = ctx.pointers[i++];\n      ptr.type.encode(stream, ptr.val, ptr.parent);\n    }\n  };\n  return Struct;\n}();\nmodule.exports = Struct;\n\n/***/ }),\n\n/***/ 3585:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(1539);\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nvar Struct = __webpack_require__(1219);\nvar getPath = function getPath(object, pathArray) {\n  return pathArray.reduce(function (prevObj, key) {\n    return prevObj && prevObj[key];\n  }, object);\n};\nvar VersionedStruct = /*#__PURE__*/function (_Struct) {\n  _inheritsLoose(VersionedStruct, _Struct);\n  function VersionedStruct(type, versions) {\n    var _this;\n    if (versions === void 0) {\n      versions = {};\n    }\n    _this = _Struct.call(this) || this;\n    _this.type = type;\n    _this.versions = versions;\n    if (typeof type === 'string') {\n      _this.versionPath = type.split('.');\n    }\n    return _this;\n  }\n  var _proto = VersionedStruct.prototype;\n  _proto.decode = function decode(stream, parent, length) {\n    if (length === void 0) {\n      length = 0;\n    }\n    var res = this._setup(stream, parent, length);\n    if (typeof this.type === 'string') {\n      res.version = getPath(parent, this.versionPath);\n    } else {\n      res.version = this.type.decode(stream);\n    }\n    if (this.versions.header) {\n      this._parseFields(stream, res, this.versions.header);\n    }\n    var fields = this.versions[res.version];\n    if (fields == null) {\n      throw new Error(\"Unknown version \" + res.version);\n    }\n    if (fields instanceof VersionedStruct) {\n      return fields.decode(stream, parent);\n    }\n    this._parseFields(stream, res, fields);\n    if (this.process != null) {\n      this.process.call(res, stream);\n    }\n    return res;\n  };\n  _proto.size = function size(val, parent, includePointers) {\n    if (includePointers === void 0) {\n      includePointers = true;\n    }\n    var key, type;\n    if (!val) {\n      throw new Error('Not a fixed size');\n    }\n    var ctx = {\n      parent: parent,\n      val: val,\n      pointerSize: 0\n    };\n    var size = 0;\n    if (typeof this.type !== 'string') {\n      size += this.type.size(val.version, ctx);\n    }\n    if (this.versions.header) {\n      for (key in this.versions.header) {\n        type = this.versions.header[key];\n        if (type.size != null) {\n          size += type.size(val[key], ctx);\n        }\n      }\n    }\n    var fields = this.versions[val.version];\n    if (fields == null) {\n      throw new Error(\"Unknown version \" + val.version);\n    }\n    for (key in fields) {\n      type = fields[key];\n      if (type.size != null) {\n        size += type.size(val[key], ctx);\n      }\n    }\n    if (includePointers) {\n      size += ctx.pointerSize;\n    }\n    return size;\n  };\n  _proto.encode = function encode(stream, val, parent) {\n    var key, type;\n    if (this.preEncode != null) {\n      this.preEncode.call(val, stream);\n    }\n    var ctx = {\n      pointers: [],\n      startOffset: stream.pos,\n      parent: parent,\n      val: val,\n      pointerSize: 0\n    };\n    ctx.pointerOffset = stream.pos + this.size(val, ctx, false);\n    if (typeof this.type !== 'string') {\n      this.type.encode(stream, val.version);\n    }\n    if (this.versions.header) {\n      for (key in this.versions.header) {\n        type = this.versions.header[key];\n        if (type.encode != null) {\n          type.encode(stream, val[key], ctx);\n        }\n      }\n    }\n    var fields = this.versions[val.version];\n    for (key in fields) {\n      type = fields[key];\n      if (type.encode != null) {\n        type.encode(stream, val[key], ctx);\n      }\n    }\n    var i = 0;\n    while (i < ctx.pointers.length) {\n      var ptr = ctx.pointers[i++];\n      ptr.type.encode(stream, ptr.val, ptr.parent);\n    }\n  };\n  return VersionedStruct;\n}(Struct);\nmodule.exports = VersionedStruct;\n\n/***/ }),\n\n/***/ 6610:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _require = __webpack_require__(6462),\n  NumberT = _require.Number;\nexports.resolveLength = function (length, stream, parent) {\n  var res;\n  if (typeof length === 'number') {\n    res = length;\n  } else if (typeof length === 'function') {\n    res = length.call(parent, parent);\n  } else if (parent && typeof length === 'string') {\n    res = parent[length];\n  } else if (stream && length instanceof NumberT) {\n    res = length.decode(stream);\n  }\n  if (isNaN(res)) {\n    throw new Error('Not a fixed size');\n  }\n  return res;\n};\nvar PropertyDescriptor = function PropertyDescriptor(opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n  this.enumerable = true;\n  this.configurable = true;\n  for (var key in opts) {\n    var val = opts[key];\n    this[key] = val;\n  }\n};\nexports.PropertyDescriptor = PropertyDescriptor;\n\n/***/ }),\n\n/***/ 8823:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n\n\n__webpack_require__(2526);\n__webpack_require__(1817);\n__webpack_require__(1539);\n__webpack_require__(6992);\n__webpack_require__(2472);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(7803);\n__webpack_require__(6649);\n__webpack_require__(6078);\n__webpack_require__(3290);\n__webpack_require__(7042);\n__webpack_require__(2222);\n__webpack_require__(9714);\n__webpack_require__(3210);\n__webpack_require__(4916);\n__webpack_require__(5306);\n__webpack_require__(6699);\n__webpack_require__(2023);\n__webpack_require__(9653);\n__webpack_require__(3753);\n__webpack_require__(545);\n__webpack_require__(8309);\n__webpack_require__(3161);\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nvar base64 = __webpack_require__(9742);\nvar ieee754 = __webpack_require__(645);\nvar customInspectSymbol = typeof Symbol === 'function' && typeof Symbol['for'] === 'function' // eslint-disable-line dot-notation\n? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n: null;\nexports.Buffer = Buffer;\nexports.SlowBuffer = SlowBuffer;\nexports.INSPECT_MAX_BYTES = 50;\nvar K_MAX_LENGTH = 0x7fffffff;\nexports.kMaxLength = K_MAX_LENGTH;\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport();\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && typeof console.error === 'function') {\n  console.error('This browser lacks typed array (Uint8Array) support which is required by ' + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.');\n}\nfunction typedArraySupport() {\n  // Can typed array instances can be augmented?\n  try {\n    var arr = new Uint8Array(1);\n    var proto = {\n      foo: function foo() {\n        return 42;\n      }\n    };\n    Object.setPrototypeOf(proto, Uint8Array.prototype);\n    Object.setPrototypeOf(arr, proto);\n    return arr.foo() === 42;\n  } catch (e) {\n    return false;\n  }\n}\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function get() {\n    if (!Buffer.isBuffer(this)) return undefined;\n    return this.buffer;\n  }\n});\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function get() {\n    if (!Buffer.isBuffer(this)) return undefined;\n    return this.byteOffset;\n  }\n});\nfunction createBuffer(length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"');\n  }\n  // Return an augmented `Uint8Array` instance\n  var buf = new Uint8Array(length);\n  Object.setPrototypeOf(buf, Buffer.prototype);\n  return buf;\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer(arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError('The \"string\" argument must be of type string. Received type number');\n    }\n    return allocUnsafe(arg);\n  }\n  return from(arg, encodingOrOffset, length);\n}\nBuffer.poolSize = 8192; // not used by this implementation\n\nfunction from(value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset);\n  }\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value);\n  }\n  if (value == null) {\n    throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + typeof value);\n  }\n  if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) {\n    return fromArrayBuffer(value, encodingOrOffset, length);\n  }\n  if (typeof SharedArrayBuffer !== 'undefined' && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length);\n  }\n  if (typeof value === 'number') {\n    throw new TypeError('The \"value\" argument must not be of type number. Received type number');\n  }\n  var valueOf = value.valueOf && value.valueOf();\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length);\n  }\n  var b = fromObject(value);\n  if (b) return b;\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length);\n  }\n  throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + typeof value);\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length);\n};\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype);\nObject.setPrototypeOf(Buffer, Uint8Array);\nfunction assertSize(size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number');\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"');\n  }\n}\nfunction alloc(size, fill, encoding) {\n  assertSize(size);\n  if (size <= 0) {\n    return createBuffer(size);\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string' ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);\n  }\n  return createBuffer(size);\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding);\n};\nfunction allocUnsafe(size) {\n  assertSize(size);\n  return createBuffer(size < 0 ? 0 : checked(size) | 0);\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size);\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size);\n};\nfunction fromString(string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8';\n  }\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding);\n  }\n  var length = byteLength(string, encoding) | 0;\n  var buf = createBuffer(length);\n  var actual = buf.write(string, encoding);\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual);\n  }\n  return buf;\n}\nfunction fromArrayLike(array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0;\n  var buf = createBuffer(length);\n  for (var i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255;\n  }\n  return buf;\n}\nfunction fromArrayView(arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    var copy = new Uint8Array(arrayView);\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength);\n  }\n  return fromArrayLike(arrayView);\n}\nfunction fromArrayBuffer(array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds');\n  }\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds');\n  }\n  var buf;\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array);\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset);\n  } else {\n    buf = new Uint8Array(array, byteOffset, length);\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype);\n  return buf;\n}\nfunction fromObject(obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0;\n    var buf = createBuffer(len);\n    if (buf.length === 0) {\n      return buf;\n    }\n    obj.copy(buf, 0, 0, len);\n    return buf;\n  }\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0);\n    }\n    return fromArrayLike(obj);\n  }\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data);\n  }\n}\nfunction checked(length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes');\n  }\n  return length | 0;\n}\nfunction SlowBuffer(length) {\n  if (+length != length) {\n    // eslint-disable-line eqeqeq\n    length = 0;\n  }\n  return Buffer.alloc(+length);\n}\nBuffer.isBuffer = function isBuffer(b) {\n  return b != null && b._isBuffer === true && b !== Buffer.prototype; // so Buffer.isBuffer(Buffer.prototype) will be false\n};\n\nBuffer.compare = function compare(a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength);\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength);\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');\n  }\n  if (a === b) return 0;\n  var x = a.length;\n  var y = b.length;\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i];\n      y = b[i];\n      break;\n    }\n  }\n  if (x < y) return -1;\n  if (y < x) return 1;\n  return 0;\n};\nBuffer.isEncoding = function isEncoding(encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true;\n    default:\n      return false;\n  }\n};\nBuffer.concat = function concat(list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers');\n  }\n  if (list.length === 0) {\n    return Buffer.alloc(0);\n  }\n  var i;\n  if (length === undefined) {\n    length = 0;\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length;\n    }\n  }\n  var buffer = Buffer.allocUnsafe(length);\n  var pos = 0;\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i];\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);\n        buf.copy(buffer, pos);\n      } else {\n        Uint8Array.prototype.set.call(buffer, buf, pos);\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers');\n    } else {\n      buf.copy(buffer, pos);\n    }\n    pos += buf.length;\n  }\n  return buffer;\n};\nfunction byteLength(string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length;\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength;\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' + 'Received type ' + typeof string);\n  }\n  var len = string.length;\n  var mustMatch = arguments.length > 2 && arguments[2] === true;\n  if (!mustMatch && len === 0) return 0;\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false;\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len;\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length;\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2;\n      case 'hex':\n        return len >>> 1;\n      case 'base64':\n        return base64ToBytes(string).length;\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length; // assume utf8\n        }\n\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n}\nBuffer.byteLength = byteLength;\nfunction slowToString(encoding, start, end) {\n  var loweredCase = false;\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0;\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return '';\n  }\n  if (end === undefined || end > this.length) {\n    end = this.length;\n  }\n  if (end <= 0) {\n    return '';\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0;\n  start >>>= 0;\n  if (end <= start) {\n    return '';\n  }\n  if (!encoding) encoding = 'utf8';\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end);\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end);\n      case 'ascii':\n        return asciiSlice(this, start, end);\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end);\n      case 'base64':\n        return base64Slice(this, start, end);\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end);\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n        encoding = (encoding + '').toLowerCase();\n        loweredCase = true;\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true;\nfunction swap(b, n, m) {\n  var i = b[n];\n  b[n] = b[m];\n  b[m] = i;\n}\nBuffer.prototype.swap16 = function swap16() {\n  var len = this.length;\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits');\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1);\n  }\n  return this;\n};\nBuffer.prototype.swap32 = function swap32() {\n  var len = this.length;\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits');\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3);\n    swap(this, i + 1, i + 2);\n  }\n  return this;\n};\nBuffer.prototype.swap64 = function swap64() {\n  var len = this.length;\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits');\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7);\n    swap(this, i + 1, i + 6);\n    swap(this, i + 2, i + 5);\n    swap(this, i + 3, i + 4);\n  }\n  return this;\n};\nBuffer.prototype.toString = function toString() {\n  var length = this.length;\n  if (length === 0) return '';\n  if (arguments.length === 0) return utf8Slice(this, 0, length);\n  return slowToString.apply(this, arguments);\n};\nBuffer.prototype.toLocaleString = Buffer.prototype.toString;\nBuffer.prototype.equals = function equals(b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');\n  if (this === b) return true;\n  return Buffer.compare(this, b) === 0;\n};\nBuffer.prototype.inspect = function inspect() {\n  var str = '';\n  var max = exports.INSPECT_MAX_BYTES;\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim();\n  if (this.length > max) str += ' ... ';\n  return '<Buffer ' + str + '>';\n};\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect;\n}\nBuffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength);\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. ' + 'Received type ' + typeof target);\n  }\n  if (start === undefined) {\n    start = 0;\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0;\n  }\n  if (thisStart === undefined) {\n    thisStart = 0;\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length;\n  }\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index');\n  }\n  if (thisStart >= thisEnd && start >= end) {\n    return 0;\n  }\n  if (thisStart >= thisEnd) {\n    return -1;\n  }\n  if (start >= end) {\n    return 1;\n  }\n  start >>>= 0;\n  end >>>= 0;\n  thisStart >>>= 0;\n  thisEnd >>>= 0;\n  if (this === target) return 0;\n  var x = thisEnd - thisStart;\n  var y = end - start;\n  var len = Math.min(x, y);\n  var thisCopy = this.slice(thisStart, thisEnd);\n  var targetCopy = target.slice(start, end);\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i];\n      y = targetCopy[i];\n      break;\n    }\n  }\n  if (x < y) return -1;\n  if (y < x) return 1;\n  return 0;\n};\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1;\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset;\n    byteOffset = 0;\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff;\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000;\n  }\n  byteOffset = +byteOffset; // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : buffer.length - 1;\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1;else byteOffset = buffer.length - 1;\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0;else return -1;\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding);\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1;\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n  } else if (typeof val === 'number') {\n    val = val & 0xFF; // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n  }\n  throw new TypeError('val must be string, number or Buffer');\n}\nfunction arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1;\n  var arrLength = arr.length;\n  var valLength = val.length;\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase();\n    if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1;\n      }\n      indexSize = 2;\n      arrLength /= 2;\n      valLength /= 2;\n      byteOffset /= 2;\n    }\n  }\n  function read(buf, i) {\n    if (indexSize === 1) {\n      return buf[i];\n    } else {\n      return buf.readUInt16BE(i * indexSize);\n    }\n  }\n  var i;\n  if (dir) {\n    var foundIndex = -1;\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i;\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex;\n        foundIndex = -1;\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true;\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false;\n          break;\n        }\n      }\n      if (found) return i;\n    }\n  }\n  return -1;\n}\nBuffer.prototype.includes = function includes(val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1;\n};\nBuffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n};\nBuffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n};\nfunction hexWrite(buf, string, offset, length) {\n  offset = Number(offset) || 0;\n  var remaining = buf.length - offset;\n  if (!length) {\n    length = remaining;\n  } else {\n    length = Number(length);\n    if (length > remaining) {\n      length = remaining;\n    }\n  }\n  var strLen = string.length;\n  if (length > strLen / 2) {\n    length = strLen / 2;\n  }\n  var i;\n  for (i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16);\n    if (numberIsNaN(parsed)) return i;\n    buf[offset + i] = parsed;\n  }\n  return i;\n}\nfunction utf8Write(buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n}\nfunction asciiWrite(buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length);\n}\nfunction base64Write(buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length);\n}\nfunction ucs2Write(buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n}\nBuffer.prototype.write = function write(string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8';\n    length = this.length;\n    offset = 0;\n    // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset;\n    length = this.length;\n    offset = 0;\n    // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0;\n    if (isFinite(length)) {\n      length = length >>> 0;\n      if (encoding === undefined) encoding = 'utf8';\n    } else {\n      encoding = length;\n      length = undefined;\n    }\n  } else {\n    throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');\n  }\n  var remaining = this.length - offset;\n  if (length === undefined || length > remaining) length = remaining;\n  if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds');\n  }\n  if (!encoding) encoding = 'utf8';\n  var loweredCase = false;\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length);\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length);\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length);\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length);\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length);\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n};\nBuffer.prototype.toJSON = function toJSON() {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  };\n};\nfunction base64Slice(buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf);\n  } else {\n    return base64.fromByteArray(buf.slice(start, end));\n  }\n}\nfunction utf8Slice(buf, start, end) {\n  end = Math.min(buf.length, end);\n  var res = [];\n  var i = start;\n  while (i < end) {\n    var firstByte = buf[i];\n    var codePoint = null;\n    var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;\n    if (i + bytesPerSequence <= end) {\n      var secondByte = void 0,\n        thirdByte = void 0,\n        fourthByte = void 0,\n        tempCodePoint = void 0;\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte;\n          }\n          break;\n        case 2:\n          secondByte = buf[i + 1];\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint;\n            }\n          }\n          break;\n        case 3:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint;\n            }\n          }\n          break;\n        case 4:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n          fourthByte = buf[i + 3];\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint;\n            }\n          }\n      }\n    }\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD;\n      bytesPerSequence = 1;\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000;\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n      codePoint = 0xDC00 | codePoint & 0x3FF;\n    }\n    res.push(codePoint);\n    i += bytesPerSequence;\n  }\n  return decodeCodePointsArray(res);\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\nfunction decodeCodePointsArray(codePoints) {\n  var len = codePoints.length;\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = '';\n  var i = 0;\n  while (i < len) {\n    res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n  }\n  return res;\n}\nfunction asciiSlice(buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F);\n  }\n  return ret;\n}\nfunction latin1Slice(buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i]);\n  }\n  return ret;\n}\nfunction hexSlice(buf, start, end) {\n  var len = buf.length;\n  if (!start || start < 0) start = 0;\n  if (!end || end < 0 || end > len) end = len;\n  var out = '';\n  for (var i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]];\n  }\n  return out;\n}\nfunction utf16leSlice(buf, start, end) {\n  var bytes = buf.slice(start, end);\n  var res = '';\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (var i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n  }\n  return res;\n}\nBuffer.prototype.slice = function slice(start, end) {\n  var len = this.length;\n  start = ~~start;\n  end = end === undefined ? len : ~~end;\n  if (start < 0) {\n    start += len;\n    if (start < 0) start = 0;\n  } else if (start > len) {\n    start = len;\n  }\n  if (end < 0) {\n    end += len;\n    if (end < 0) end = 0;\n  } else if (end > len) {\n    end = len;\n  }\n  if (end < start) end = start;\n  var newBuf = this.subarray(start, end);\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype);\n  return newBuf;\n};\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset(offset, ext, length) {\n  if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');\n}\nBuffer.prototype.readUintLE = Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\n  offset = offset >>> 0;\n  byteLength = byteLength >>> 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n  return val;\n};\nBuffer.prototype.readUintBE = Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\n  offset = offset >>> 0;\n  byteLength = byteLength >>> 0;\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length);\n  }\n  var val = this[offset + --byteLength];\n  var mul = 1;\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul;\n  }\n  return val;\n};\nBuffer.prototype.readUint8 = Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  return this[offset];\n};\nBuffer.prototype.readUint16LE = Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return this[offset] | this[offset + 1] << 8;\n};\nBuffer.prototype.readUint16BE = Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return this[offset] << 8 | this[offset + 1];\n};\nBuffer.prototype.readUint32LE = Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;\n};\nBuffer.prototype.readUint32BE = Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n};\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) {\n  offset = offset >>> 0;\n  validateNumber(offset, 'offset');\n  var first = this[offset];\n  var last = this[offset + 7];\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8);\n  }\n  var lo = first + this[++offset] * Math.pow(2, 8) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 24);\n  var hi = this[++offset] + this[++offset] * Math.pow(2, 8) + this[++offset] * Math.pow(2, 16) + last * Math.pow(2, 24);\n  return BigInt(lo) + (BigInt(hi) << BigInt(32));\n});\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) {\n  offset = offset >>> 0;\n  validateNumber(offset, 'offset');\n  var first = this[offset];\n  var last = this[offset + 7];\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8);\n  }\n  var hi = first * Math.pow(2, 24) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + this[++offset];\n  var lo = this[++offset] * Math.pow(2, 24) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + last;\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo);\n});\nBuffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\n  offset = offset >>> 0;\n  byteLength = byteLength >>> 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n  mul *= 0x80;\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n  return val;\n};\nBuffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\n  offset = offset >>> 0;\n  byteLength = byteLength >>> 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var i = byteLength;\n  var mul = 1;\n  var val = this[offset + --i];\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul;\n  }\n  mul *= 0x80;\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n  return val;\n};\nBuffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  if (!(this[offset] & 0x80)) return this[offset];\n  return (0xff - this[offset] + 1) * -1;\n};\nBuffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset] | this[offset + 1] << 8;\n  return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\nBuffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset + 1] | this[offset] << 8;\n  return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\nBuffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n};\nBuffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n};\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) {\n  offset = offset >>> 0;\n  validateNumber(offset, 'offset');\n  var first = this[offset];\n  var last = this[offset + 7];\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8);\n  }\n  var val = this[offset + 4] + this[offset + 5] * Math.pow(2, 8) + this[offset + 6] * Math.pow(2, 16) + (last << 24); // Overflow\n\n  return (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * Math.pow(2, 8) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 24));\n});\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) {\n  offset = offset >>> 0;\n  validateNumber(offset, 'offset');\n  var first = this[offset];\n  var last = this[offset + 7];\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8);\n  }\n  var val = (first << 24) +\n  // Overflow\n  this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + this[++offset];\n  return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * Math.pow(2, 24) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + last);\n});\nBuffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return ieee754.read(this, offset, true, 23, 4);\n};\nBuffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return ieee754.read(this, offset, false, 23, 4);\n};\nBuffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return ieee754.read(this, offset, true, 52, 8);\n};\nBuffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return ieee754.read(this, offset, false, 52, 8);\n};\nfunction checkInt(buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance');\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds');\n  if (offset + ext > buf.length) throw new RangeError('Index out of range');\n}\nBuffer.prototype.writeUintLE = Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  byteLength = byteLength >>> 0;\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n  var mul = 1;\n  var i = 0;\n  this[offset] = value & 0xFF;\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = value / mul & 0xFF;\n  }\n  return offset + byteLength;\n};\nBuffer.prototype.writeUintBE = Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  byteLength = byteLength >>> 0;\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n  var i = byteLength - 1;\n  var mul = 1;\n  this[offset + i] = value & 0xFF;\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = value / mul & 0xFF;\n  }\n  return offset + byteLength;\n};\nBuffer.prototype.writeUint8 = Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n  this[offset] = value & 0xff;\n  return offset + 1;\n};\nBuffer.prototype.writeUint16LE = Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n  this[offset] = value & 0xff;\n  this[offset + 1] = value >>> 8;\n  return offset + 2;\n};\nBuffer.prototype.writeUint16BE = Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n  this[offset] = value >>> 8;\n  this[offset + 1] = value & 0xff;\n  return offset + 2;\n};\nBuffer.prototype.writeUint32LE = Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n  this[offset + 3] = value >>> 24;\n  this[offset + 2] = value >>> 16;\n  this[offset + 1] = value >>> 8;\n  this[offset] = value & 0xff;\n  return offset + 4;\n};\nBuffer.prototype.writeUint32BE = Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n  this[offset] = value >>> 24;\n  this[offset + 1] = value >>> 16;\n  this[offset + 2] = value >>> 8;\n  this[offset + 3] = value & 0xff;\n  return offset + 4;\n};\nfunction wrtBigUInt64LE(buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7);\n  var lo = Number(value & BigInt(0xffffffff));\n  buf[offset++] = lo;\n  lo = lo >> 8;\n  buf[offset++] = lo;\n  lo = lo >> 8;\n  buf[offset++] = lo;\n  lo = lo >> 8;\n  buf[offset++] = lo;\n  var hi = Number(value >> BigInt(32) & BigInt(0xffffffff));\n  buf[offset++] = hi;\n  hi = hi >> 8;\n  buf[offset++] = hi;\n  hi = hi >> 8;\n  buf[offset++] = hi;\n  hi = hi >> 8;\n  buf[offset++] = hi;\n  return offset;\n}\nfunction wrtBigUInt64BE(buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7);\n  var lo = Number(value & BigInt(0xffffffff));\n  buf[offset + 7] = lo;\n  lo = lo >> 8;\n  buf[offset + 6] = lo;\n  lo = lo >> 8;\n  buf[offset + 5] = lo;\n  lo = lo >> 8;\n  buf[offset + 4] = lo;\n  var hi = Number(value >> BigInt(32) & BigInt(0xffffffff));\n  buf[offset + 3] = hi;\n  hi = hi >> 8;\n  buf[offset + 2] = hi;\n  hi = hi >> 8;\n  buf[offset + 1] = hi;\n  hi = hi >> 8;\n  buf[offset] = hi;\n  return offset + 8;\n}\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset) {\n  if (offset === void 0) {\n    offset = 0;\n  }\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'));\n});\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset) {\n  if (offset === void 0) {\n    offset = 0;\n  }\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'));\n});\nBuffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n  var i = 0;\n  var mul = 1;\n  var sub = 0;\n  this[offset] = value & 0xFF;\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1;\n    }\n    this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n  }\n  return offset + byteLength;\n};\nBuffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n  var i = byteLength - 1;\n  var mul = 1;\n  var sub = 0;\n  this[offset + i] = value & 0xFF;\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1;\n    }\n    this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n  }\n  return offset + byteLength;\n};\nBuffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n  if (value < 0) value = 0xff + value + 1;\n  this[offset] = value & 0xff;\n  return offset + 1;\n};\nBuffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n  this[offset] = value & 0xff;\n  this[offset + 1] = value >>> 8;\n  return offset + 2;\n};\nBuffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n  this[offset] = value >>> 8;\n  this[offset + 1] = value & 0xff;\n  return offset + 2;\n};\nBuffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n  this[offset] = value & 0xff;\n  this[offset + 1] = value >>> 8;\n  this[offset + 2] = value >>> 16;\n  this[offset + 3] = value >>> 24;\n  return offset + 4;\n};\nBuffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n  if (value < 0) value = 0xffffffff + value + 1;\n  this[offset] = value >>> 24;\n  this[offset + 1] = value >>> 16;\n  this[offset + 2] = value >>> 8;\n  this[offset + 3] = value & 0xff;\n  return offset + 4;\n};\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset) {\n  if (offset === void 0) {\n    offset = 0;\n  }\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'));\n});\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset) {\n  if (offset === void 0) {\n    offset = 0;\n  }\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'));\n});\nfunction checkIEEE754(buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range');\n  if (offset < 0) throw new RangeError('Index out of range');\n}\nfunction writeFloat(buf, value, offset, littleEndian, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4);\n  return offset + 4;\n}\nBuffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert);\n};\nBuffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert);\n};\nfunction writeDouble(buf, value, offset, littleEndian, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8);\n  return offset + 8;\n}\nBuffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert);\n};\nBuffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert);\n};\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy(target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer');\n  if (!start) start = 0;\n  if (!end && end !== 0) end = this.length;\n  if (targetStart >= target.length) targetStart = target.length;\n  if (!targetStart) targetStart = 0;\n  if (end > 0 && end < start) end = start;\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0;\n  if (target.length === 0 || this.length === 0) return 0;\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds');\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range');\n  if (end < 0) throw new RangeError('sourceEnd out of bounds');\n\n  // Are we oob?\n  if (end > this.length) end = this.length;\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start;\n  }\n  var len = end - start;\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end);\n  } else {\n    Uint8Array.prototype.set.call(target, this.subarray(start, end), targetStart);\n  }\n  return len;\n};\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill(val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start;\n      start = 0;\n      end = this.length;\n    } else if (typeof end === 'string') {\n      encoding = end;\n      end = this.length;\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string');\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding);\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0);\n      if (encoding === 'utf8' && code < 128 || encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code;\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255;\n  } else if (typeof val === 'boolean') {\n    val = Number(val);\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index');\n  }\n  if (end <= start) {\n    return this;\n  }\n  start = start >>> 0;\n  end = end === undefined ? this.length : end >>> 0;\n  if (!val) val = 0;\n  var i;\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val;\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding);\n    var len = bytes.length;\n    if (len === 0) {\n      throw new TypeError('The value \"' + val + '\" is invalid for argument \"value\"');\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len];\n    }\n  }\n  return this;\n};\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nvar errors = {};\nfunction E(sym, getMessage, Base) {\n  errors[sym] = /*#__PURE__*/function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n    function NodeError() {\n      var _this;\n      _this = _Base.call(this) || this;\n      Object.defineProperty(_assertThisInitialized(_this), 'message', {\n        value: getMessage.apply(_assertThisInitialized(_this), arguments),\n        writable: true,\n        configurable: true\n      });\n\n      // Add the error code to the name to include it in the stack trace.\n      _this.name = _this.name + \" [\" + sym + \"]\";\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      _this.stack; // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete _this.name;\n      return _this;\n    }\n    var _proto = NodeError.prototype;\n    _proto.toString = function toString() {\n      return this.name + \" [\" + sym + \"]: \" + this.message;\n    };\n    _createClass(NodeError, [{\n      key: \"code\",\n      get: function get() {\n        return sym;\n      },\n      set: function set(value) {\n        Object.defineProperty(this, 'code', {\n          configurable: true,\n          enumerable: true,\n          value: value,\n          writable: true\n        });\n      }\n    }]);\n    return NodeError;\n  }(Base);\n}\nE('ERR_BUFFER_OUT_OF_BOUNDS', function (name) {\n  if (name) {\n    return name + \" is outside of buffer bounds\";\n  }\n  return 'Attempt to access memory outside buffer bounds';\n}, RangeError);\nE('ERR_INVALID_ARG_TYPE', function (name, actual) {\n  return \"The \\\"\" + name + \"\\\" argument must be of type number. Received type \" + typeof actual;\n}, TypeError);\nE('ERR_OUT_OF_RANGE', function (str, range, input) {\n  var msg = \"The value of \\\"\" + str + \"\\\" is out of range.\";\n  var received = input;\n  if (Number.isInteger(input) && Math.abs(input) > Math.pow(2, 32)) {\n    received = addNumericalSeparator(String(input));\n  } else if (typeof input === 'bigint') {\n    received = String(input);\n    if (input > Math.pow(BigInt(2), BigInt(32)) || input < -Math.pow(BigInt(2), BigInt(32))) {\n      received = addNumericalSeparator(received);\n    }\n    received += 'n';\n  }\n  msg += \" It must be \" + range + \". Received \" + received;\n  return msg;\n}, RangeError);\nfunction addNumericalSeparator(val) {\n  var res = '';\n  var i = val.length;\n  var start = val[0] === '-' ? 1 : 0;\n  for (; i >= start + 4; i -= 3) {\n    res = \"_\" + val.slice(i - 3, i) + res;\n  }\n  return \"\" + val.slice(0, i) + res;\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds(buf, offset, byteLength) {\n  validateNumber(offset, 'offset');\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1));\n  }\n}\nfunction checkIntBI(value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    var n = typeof min === 'bigint' ? 'n' : '';\n    var range;\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = \">= 0\" + n + \" and < 2\" + n + \" ** \" + (byteLength + 1) * 8 + n;\n      } else {\n        range = \">= -(2\" + n + \" ** \" + ((byteLength + 1) * 8 - 1) + n + \") and < 2 ** \" + (\"\" + ((byteLength + 1) * 8 - 1) + n);\n      }\n    } else {\n      range = \">= \" + min + n + \" and <= \" + max + n;\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value);\n  }\n  checkBounds(buf, offset, byteLength);\n}\nfunction validateNumber(value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value);\n  }\n}\nfunction boundsError(value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type);\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value);\n  }\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS();\n  }\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset', \">= \" + (type ? 1 : 0) + \" and <= \" + length, value);\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;\nfunction base64clean(str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0];\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '');\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return '';\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '=';\n  }\n  return str;\n}\nfunction utf8ToBytes(string, units) {\n  units = units || Infinity;\n  var codePoint;\n  var length = string.length;\n  var leadSurrogate = null;\n  var bytes = [];\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i);\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue;\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue;\n        }\n\n        // valid lead\n        leadSurrogate = codePoint;\n        continue;\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n        leadSurrogate = codePoint;\n        continue;\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n    }\n    leadSurrogate = null;\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break;\n      bytes.push(codePoint);\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break;\n      bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break;\n      bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break;\n      bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n    } else {\n      throw new Error('Invalid code point');\n    }\n  }\n  return bytes;\n}\nfunction asciiToBytes(str) {\n  var byteArray = [];\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF);\n  }\n  return byteArray;\n}\nfunction utf16leToBytes(str, units) {\n  var c, hi, lo;\n  var byteArray = [];\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break;\n    c = str.charCodeAt(i);\n    hi = c >> 8;\n    lo = c % 256;\n    byteArray.push(lo);\n    byteArray.push(hi);\n  }\n  return byteArray;\n}\nfunction base64ToBytes(str) {\n  return base64.toByteArray(base64clean(str));\n}\nfunction blitBuffer(src, dst, offset, length) {\n  var i;\n  for (i = 0; i < length; ++i) {\n    if (i + offset >= dst.length || i >= src.length) break;\n    dst[i + offset] = src[i];\n  }\n  return i;\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance(obj, type) {\n  return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;\n}\nfunction numberIsNaN(obj) {\n  // For IE11 support\n  return obj !== obj; // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = function () {\n  var alphabet = '0123456789abcdef';\n  var table = new Array(256);\n  for (var i = 0; i < 16; ++i) {\n    var i16 = i * 16;\n    for (var j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j];\n    }\n  }\n  return table;\n}();\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod(fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn;\n}\nfunction BufferBigIntNotDefined() {\n  throw new Error('BigInt not supported');\n}\n\n/***/ }),\n\n/***/ 477:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7803);\n__webpack_require__(1539);\n// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n\n/***/ }),\n\n/***/ 2094:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(477);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\nvar hasOwn = __webpack_require__(2597);\nvar classof = __webpack_require__(648);\nvar tryToString = __webpack_require__(6330);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar defineProperty = (__webpack_require__(3070).f);\nvar isPrototypeOf = __webpack_require__(7976);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar uid = __webpack_require__(9711);\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar TypeError = global.TypeError;\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = uid('TYPED_ARRAY_CONSTRUCTOR');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME, Constructor, Prototype;\nvar TypedArrayConstructorsList = {\n  Int8Array: 1,\n  Uint8Array: 1,\n  Uint8ClampedArray: 1,\n  Int16Array: 2,\n  Uint16Array: 2,\n  Int32Array: 4,\n  Uint32Array: 4,\n  Float32Array: 4,\n  Float64Array: 8\n};\nvar BigIntArrayConstructorsList = {\n  BigInt64Array: 8,\n  BigUint64Array: 8\n};\nvar isView = function isView(it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return klass === 'DataView' || hasOwn(TypedArrayConstructorsList, klass) || hasOwn(BigIntArrayConstructorsList, klass);\n};\nvar isTypedArray = function isTypedArray(it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return hasOwn(TypedArrayConstructorsList, klass) || hasOwn(BigIntArrayConstructorsList, klass);\n};\nvar aTypedArray = function aTypedArray(it) {\n  if (isTypedArray(it)) return it;\n  throw TypeError('Target is not a typed array');\n};\nvar aTypedArrayConstructor = function aTypedArrayConstructor(C) {\n  if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n  throw TypeError(tryToString(C) + ' is not a typed array constructor');\n};\nvar exportTypedArrayMethod = function exportTypedArrayMethod(KEY, property, forced) {\n  if (!DESCRIPTORS) return;\n  if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n    var TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n      delete TypedArrayConstructor.prototype[KEY];\n    } catch (error) {/* empty */}\n  }\n  if (!TypedArrayPrototype[KEY] || forced) {\n    redefine(TypedArrayPrototype, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n  }\n};\nvar exportTypedArrayStaticMethod = function exportTypedArrayStaticMethod(KEY, property, forced) {\n  var ARRAY, TypedArrayConstructor;\n  if (!DESCRIPTORS) return;\n  if (setPrototypeOf) {\n    if (forced) for (ARRAY in TypedArrayConstructorsList) {\n      TypedArrayConstructor = global[ARRAY];\n      if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n        delete TypedArrayConstructor[KEY];\n      } catch (error) {/* empty */}\n    }\n    if (!TypedArray[KEY] || forced) {\n      // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n      try {\n        return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n      } catch (error) {/* empty */}\n    } else return;\n  }\n  for (ARRAY in TypedArrayConstructorsList) {\n    TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n      redefine(TypedArrayConstructor, KEY, property);\n    }\n  }\n};\nfor (NAME in TypedArrayConstructorsList) {\n  Constructor = global[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR, Constructor);else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\nfor (NAME in BigIntArrayConstructorsList) {\n  Constructor = global[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR, Constructor);\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\n  // eslint-disable-next-line no-shadow -- safe\n  TypedArray = function TypedArray() {\n    throw TypeError('Incorrect invocation');\n  };\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n  }\n}\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n  TypedArrayPrototype = TypedArray.prototype;\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n  }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n  setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n  TYPED_ARRAY_TAG_REQIRED = true;\n  defineProperty(TypedArrayPrototype, TO_STRING_TAG, {\n    get: function get() {\n      return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n    }\n  });\n  for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) {\n      createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n    }\n  }\n}\nmodule.exports = {\n  NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n  TYPED_ARRAY_CONSTRUCTOR: TYPED_ARRAY_CONSTRUCTOR,\n  TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n  aTypedArray: aTypedArray,\n  aTypedArrayConstructor: aTypedArrayConstructor,\n  exportTypedArrayMethod: exportTypedArrayMethod,\n  exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n  isView: isView,\n  isTypedArray: isTypedArray,\n  TypedArray: TypedArray,\n  TypedArrayPrototype: TypedArrayPrototype\n};\n\n/***/ }),\n\n/***/ 2091:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(8309);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(477);\nvar FunctionName = __webpack_require__(6530);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefineAll = __webpack_require__(2248);\nvar fails = __webpack_require__(7293);\nvar anInstance = __webpack_require__(5787);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar toLength = __webpack_require__(7466);\nvar toIndex = __webpack_require__(7067);\nvar IEEE754 = __webpack_require__(1179);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar getOwnPropertyNames = (__webpack_require__(8006).f);\nvar defineProperty = (__webpack_require__(3070).f);\nvar arrayFill = __webpack_require__(1285);\nvar arraySlice = __webpack_require__(206);\nvar setToStringTag = __webpack_require__(8003);\nvar InternalStateModule = __webpack_require__(9909);\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE];\nvar $DataView = global[DATA_VIEW];\nvar DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar Array = global.Array;\nvar RangeError = global.RangeError;\nvar fill = uncurryThis(arrayFill);\nvar reverse = uncurryThis([].reverse);\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\nvar packInt8 = function packInt8(number) {\n  return [number & 0xFF];\n};\nvar packInt16 = function packInt16(number) {\n  return [number & 0xFF, number >> 8 & 0xFF];\n};\nvar packInt32 = function packInt32(number) {\n  return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\nvar unpackInt32 = function unpackInt32(buffer) {\n  return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\nvar packFloat32 = function packFloat32(number) {\n  return packIEEE754(number, 23, 4);\n};\nvar packFloat64 = function packFloat64(number) {\n  return packIEEE754(number, 52, 8);\n};\nvar addGetter = function addGetter(Constructor, key) {\n  defineProperty(Constructor[PROTOTYPE], key, {\n    get: function get() {\n      return getInternalState(this)[key];\n    }\n  });\n};\nvar get = function get(view, count, index, isLittleEndian) {\n  var intIndex = toIndex(index);\n  var store = getInternalState(view);\n  if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n  var bytes = getInternalState(store.buffer).bytes;\n  var start = intIndex + store.byteOffset;\n  var pack = arraySlice(bytes, start, start + count);\n  return isLittleEndian ? pack : reverse(pack);\n};\nvar set = function set(view, count, index, conversion, value, isLittleEndian) {\n  var intIndex = toIndex(index);\n  var store = getInternalState(view);\n  if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n  var bytes = getInternalState(store.buffer).bytes;\n  var start = intIndex + store.byteOffset;\n  var pack = conversion(+value);\n  for (var i = 0; i < count; i++) {\n    bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];\n  }\n};\nif (!NATIVE_ARRAY_BUFFER) {\n  $ArrayBuffer = function ArrayBuffer(length) {\n    anInstance(this, ArrayBufferPrototype);\n    var byteLength = toIndex(length);\n    setInternalState(this, {\n      bytes: fill(Array(byteLength), 0),\n      byteLength: byteLength\n    });\n    if (!DESCRIPTORS) this.byteLength = byteLength;\n  };\n  ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE];\n  $DataView = function DataView(buffer, byteOffset, byteLength) {\n    anInstance(this, DataViewPrototype);\n    anInstance(buffer, ArrayBufferPrototype);\n    var bufferLength = getInternalState(buffer).byteLength;\n    var offset = toIntegerOrInfinity(byteOffset);\n    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n    setInternalState(this, {\n      buffer: buffer,\n      byteLength: byteLength,\n      byteOffset: offset\n    });\n    if (!DESCRIPTORS) {\n      this.buffer = buffer;\n      this.byteLength = byteLength;\n      this.byteOffset = offset;\n    }\n  };\n  DataViewPrototype = $DataView[PROTOTYPE];\n  if (DESCRIPTORS) {\n    addGetter($ArrayBuffer, 'byteLength');\n    addGetter($DataView, 'buffer');\n    addGetter($DataView, 'byteLength');\n    addGetter($DataView, 'byteOffset');\n  }\n  redefineAll(DataViewPrototype, {\n    getInt8: function getInt8(byteOffset) {\n      return get(this, 1, byteOffset)[0] << 24 >> 24;\n    },\n    getUint8: function getUint8(byteOffset) {\n      return get(this, 1, byteOffset)[0];\n    },\n    getInt16: function getInt16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n    },\n    getUint16: function getUint16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n      return bytes[1] << 8 | bytes[0];\n    },\n    getInt32: function getInt32(byteOffset /* , littleEndian */) {\n      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));\n    },\n    getUint32: function getUint32(byteOffset /* , littleEndian */) {\n      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;\n    },\n    getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);\n    },\n    getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);\n    },\n    setInt8: function setInt8(byteOffset, value) {\n      set(this, 1, byteOffset, packInt8, value);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      set(this, 1, byteOffset, packInt8, value);\n    },\n    setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n      set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);\n    }\n  });\n} else {\n  var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME && NativeArrayBuffer.name !== ARRAY_BUFFER;\n  /* eslint-disable no-new -- required for testing */\n  if (!fails(function () {\n    NativeArrayBuffer(1);\n  }) || !fails(function () {\n    new NativeArrayBuffer(-1);\n  }) || fails(function () {\n    new NativeArrayBuffer();\n    new NativeArrayBuffer(1.5);\n    new NativeArrayBuffer(NaN);\n    return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;\n  })) {\n    /* eslint-enable no-new -- required for testing */\n    $ArrayBuffer = function ArrayBuffer(length) {\n      anInstance(this, ArrayBufferPrototype);\n      return new NativeArrayBuffer(toIndex(length));\n    };\n    $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype;\n    for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n      if (!((key = keys[j++]) in $ArrayBuffer)) {\n        createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n      }\n    }\n    ArrayBufferPrototype.constructor = $ArrayBuffer;\n  } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {\n    createNonEnumerableProperty(NativeArrayBuffer, 'name', ARRAY_BUFFER);\n  }\n\n  // WebKit bug - the same parent prototype for typed arrays and data view\n  if (setPrototypeOf && getPrototypeOf(DataViewPrototype) !== ObjectPrototype) {\n    setPrototypeOf(DataViewPrototype, ObjectPrototype);\n  }\n\n  // iOS Safari 7.x bug\n  var testView = new $DataView(new $ArrayBuffer(2));\n  var $setInt8 = uncurryThis(DataViewPrototype.setInt8);\n  testView.setInt8(0, 2147483648);\n  testView.setInt8(1, 2147483649);\n  if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll(DataViewPrototype, {\n    setInt8: function setInt8(byteOffset, value) {\n      $setInt8(this, byteOffset, value << 24 >> 24);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      $setInt8(this, byteOffset, value << 24 >> 24);\n    }\n  }, {\n    unsafe: true\n  });\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nmodule.exports = {\n  ArrayBuffer: $ArrayBuffer,\n  DataView: $DataView\n};\n\n/***/ }),\n\n/***/ 7803:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar arrayBufferModule = __webpack_require__(2091);\nvar setSpecies = __webpack_require__(6340);\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\n\n// `ArrayBuffer` constructor\n// https://tc39.es/ecma262/#sec-arraybuffer-constructor\n$({\n  global: true,\n  forced: NativeArrayBuffer !== ArrayBuffer\n}, {\n  ArrayBuffer: ArrayBuffer\n});\nsetSpecies(ARRAY_BUFFER);\n\n/***/ }),\n\n/***/ 194:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(7508), __webpack_require__(3440), __webpack_require__(3839), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var BlockCipher = C_lib.BlockCipher;\n    var C_algo = C.algo;\n\n    // Lookup tables\n    var SBOX = [];\n    var INV_SBOX = [];\n    var SUB_MIX_0 = [];\n    var SUB_MIX_1 = [];\n    var SUB_MIX_2 = [];\n    var SUB_MIX_3 = [];\n    var INV_SUB_MIX_0 = [];\n    var INV_SUB_MIX_1 = [];\n    var INV_SUB_MIX_2 = [];\n    var INV_SUB_MIX_3 = [];\n\n    // Compute lookup tables\n    (function () {\n      // Compute double table\n      var d = [];\n      for (var i = 0; i < 256; i++) {\n        if (i < 128) {\n          d[i] = i << 1;\n        } else {\n          d[i] = i << 1 ^ 0x11b;\n        }\n      }\n\n      // Walk GF(2^8)\n      var x = 0;\n      var xi = 0;\n      for (var i = 0; i < 256; i++) {\n        // Compute sbox\n        var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;\n        sx = sx >>> 8 ^ sx & 0xff ^ 0x63;\n        SBOX[x] = sx;\n        INV_SBOX[sx] = x;\n\n        // Compute multiplication\n        var x2 = d[x];\n        var x4 = d[x2];\n        var x8 = d[x4];\n\n        // Compute sub bytes, mix columns tables\n        var t = d[sx] * 0x101 ^ sx * 0x1010100;\n        SUB_MIX_0[x] = t << 24 | t >>> 8;\n        SUB_MIX_1[x] = t << 16 | t >>> 16;\n        SUB_MIX_2[x] = t << 8 | t >>> 24;\n        SUB_MIX_3[x] = t;\n\n        // Compute inv sub bytes, inv mix columns tables\n        var t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n        INV_SUB_MIX_0[sx] = t << 24 | t >>> 8;\n        INV_SUB_MIX_1[sx] = t << 16 | t >>> 16;\n        INV_SUB_MIX_2[sx] = t << 8 | t >>> 24;\n        INV_SUB_MIX_3[sx] = t;\n\n        // Compute next counter\n        if (!x) {\n          x = xi = 1;\n        } else {\n          x = x2 ^ d[d[d[x8 ^ x2]]];\n          xi ^= d[d[xi]];\n        }\n      }\n    })();\n\n    // Precomputed Rcon lookup\n    var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n    /**\n     * AES block cipher algorithm.\n     */\n    var AES = C_algo.AES = BlockCipher.extend({\n      _doReset: function _doReset() {\n        var t;\n\n        // Skip reset of nRounds has been set before and key did not change\n        if (this._nRounds && this._keyPriorReset === this._key) {\n          return;\n        }\n\n        // Shortcuts\n        var key = this._keyPriorReset = this._key;\n        var keyWords = key.words;\n        var keySize = key.sigBytes / 4;\n\n        // Compute number of rounds\n        var nRounds = this._nRounds = keySize + 6;\n\n        // Compute number of key schedule rows\n        var ksRows = (nRounds + 1) * 4;\n\n        // Compute key schedule\n        var keySchedule = this._keySchedule = [];\n        for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n          if (ksRow < keySize) {\n            keySchedule[ksRow] = keyWords[ksRow];\n          } else {\n            t = keySchedule[ksRow - 1];\n            if (!(ksRow % keySize)) {\n              // Rot word\n              t = t << 8 | t >>> 24;\n\n              // Sub word\n              t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 0xff] << 16 | SBOX[t >>> 8 & 0xff] << 8 | SBOX[t & 0xff];\n\n              // Mix Rcon\n              t ^= RCON[ksRow / keySize | 0] << 24;\n            } else if (keySize > 6 && ksRow % keySize == 4) {\n              // Sub word\n              t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 0xff] << 16 | SBOX[t >>> 8 & 0xff] << 8 | SBOX[t & 0xff];\n            }\n            keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n          }\n        }\n\n        // Compute inv key schedule\n        var invKeySchedule = this._invKeySchedule = [];\n        for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n          var ksRow = ksRows - invKsRow;\n          if (invKsRow % 4) {\n            var t = keySchedule[ksRow];\n          } else {\n            var t = keySchedule[ksRow - 4];\n          }\n          if (invKsRow < 4 || ksRow <= 4) {\n            invKeySchedule[invKsRow] = t;\n          } else {\n            invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[t >>> 16 & 0xff]] ^ INV_SUB_MIX_2[SBOX[t >>> 8 & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n          }\n        }\n      },\n      encryptBlock: function encryptBlock(M, offset) {\n        this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n      },\n      decryptBlock: function decryptBlock(M, offset) {\n        // Swap 2nd and 4th rows\n        var t = M[offset + 1];\n        M[offset + 1] = M[offset + 3];\n        M[offset + 3] = t;\n        this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n        // Inv swap 2nd and 4th rows\n        var t = M[offset + 1];\n        M[offset + 1] = M[offset + 3];\n        M[offset + 3] = t;\n      },\n      _doCryptBlock: function _doCryptBlock(M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n        // Shortcut\n        var nRounds = this._nRounds;\n\n        // Get input, add round key\n        var s0 = M[offset] ^ keySchedule[0];\n        var s1 = M[offset + 1] ^ keySchedule[1];\n        var s2 = M[offset + 2] ^ keySchedule[2];\n        var s3 = M[offset + 3] ^ keySchedule[3];\n\n        // Key schedule row counter\n        var ksRow = 4;\n\n        // Rounds\n        for (var round = 1; round < nRounds; round++) {\n          // Shift rows, sub bytes, mix columns, add round key\n          var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[s1 >>> 16 & 0xff] ^ SUB_MIX_2[s2 >>> 8 & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n          var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[s2 >>> 16 & 0xff] ^ SUB_MIX_2[s3 >>> 8 & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n          var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[s3 >>> 16 & 0xff] ^ SUB_MIX_2[s0 >>> 8 & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n          var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[s0 >>> 16 & 0xff] ^ SUB_MIX_2[s1 >>> 8 & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n          // Update state\n          s0 = t0;\n          s1 = t1;\n          s2 = t2;\n          s3 = t3;\n        }\n\n        // Shift rows, sub bytes, add round key\n        var t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 0xff] << 16 | SBOX[s2 >>> 8 & 0xff] << 8 | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n        var t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 0xff] << 16 | SBOX[s3 >>> 8 & 0xff] << 8 | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n        var t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 0xff] << 16 | SBOX[s0 >>> 8 & 0xff] << 8 | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n        var t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 0xff] << 16 | SBOX[s1 >>> 8 & 0xff] << 8 | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n        // Set output\n        M[offset] = t0;\n        M[offset + 1] = t1;\n        M[offset + 2] = t2;\n        M[offset + 3] = t3;\n      },\n      keySize: 256 / 32\n    });\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n     */\n    C.AES = BlockCipher._createHelper(AES);\n  })();\n  return CryptoJS.AES;\n});\n\n/***/ }),\n\n/***/ 1582:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n__webpack_require__(2222);\n__webpack_require__(1539);\n__webpack_require__(9714);\n__webpack_require__(561);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(3839));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * Cipher core components.\n   */\n  CryptoJS.lib.Cipher || function (undefined) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var Base = C_lib.Base;\n    var WordArray = C_lib.WordArray;\n    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n    var C_enc = C.enc;\n    var Utf8 = C_enc.Utf8;\n    var Base64 = C_enc.Base64;\n    var C_algo = C.algo;\n    var EvpKDF = C_algo.EvpKDF;\n\n    /**\n     * Abstract base cipher template.\n     *\n     * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n     * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n     * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n     * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n     */\n    var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {WordArray} iv The IV to use for this operation.\n       */\n      cfg: Base.extend(),\n      /**\n       * Creates this cipher in encryption mode.\n       *\n       * @param {WordArray} key The key.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @return {Cipher} A cipher instance.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n       */\n      createEncryptor: function createEncryptor(key, cfg) {\n        return this.create(this._ENC_XFORM_MODE, key, cfg);\n      },\n      /**\n       * Creates this cipher in decryption mode.\n       *\n       * @param {WordArray} key The key.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @return {Cipher} A cipher instance.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n       */\n      createDecryptor: function createDecryptor(key, cfg) {\n        return this.create(this._DEC_XFORM_MODE, key, cfg);\n      },\n      /**\n       * Initializes a newly created cipher.\n       *\n       * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n       * @param {WordArray} key The key.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @example\n       *\n       *     var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n       */\n      init: function init(xformMode, key, cfg) {\n        // Apply config defaults\n        this.cfg = this.cfg.extend(cfg);\n\n        // Store transform mode and key\n        this._xformMode = xformMode;\n        this._key = key;\n\n        // Set initial values\n        this.reset();\n      },\n      /**\n       * Resets this cipher to its initial state.\n       *\n       * @example\n       *\n       *     cipher.reset();\n       */\n      reset: function reset() {\n        // Reset data buffer\n        BufferedBlockAlgorithm.reset.call(this);\n\n        // Perform concrete-cipher logic\n        this._doReset();\n      },\n      /**\n       * Adds data to be encrypted or decrypted.\n       *\n       * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n       *\n       * @return {WordArray} The data after processing.\n       *\n       * @example\n       *\n       *     var encrypted = cipher.process('data');\n       *     var encrypted = cipher.process(wordArray);\n       */\n      process: function process(dataUpdate) {\n        // Append\n        this._append(dataUpdate);\n\n        // Process available blocks\n        return this._process();\n      },\n      /**\n       * Finalizes the encryption or decryption process.\n       * Note that the finalize operation is effectively a destructive, read-once operation.\n       *\n       * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n       *\n       * @return {WordArray} The data after final processing.\n       *\n       * @example\n       *\n       *     var encrypted = cipher.finalize();\n       *     var encrypted = cipher.finalize('data');\n       *     var encrypted = cipher.finalize(wordArray);\n       */\n      finalize: function finalize(dataUpdate) {\n        // Final data update\n        if (dataUpdate) {\n          this._append(dataUpdate);\n        }\n\n        // Perform concrete-cipher logic\n        var finalProcessedData = this._doFinalize();\n        return finalProcessedData;\n      },\n      keySize: 128 / 32,\n      ivSize: 128 / 32,\n      _ENC_XFORM_MODE: 1,\n      _DEC_XFORM_MODE: 2,\n      /**\n       * Creates shortcut functions to a cipher's object interface.\n       *\n       * @param {Cipher} cipher The cipher to create a helper for.\n       *\n       * @return {Object} An object with encrypt and decrypt shortcut functions.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n       */\n      _createHelper: function () {\n        function selectCipherStrategy(key) {\n          if (typeof key == 'string') {\n            return PasswordBasedCipher;\n          } else {\n            return SerializableCipher;\n          }\n        }\n        return function (cipher) {\n          return {\n            encrypt: function encrypt(message, key, cfg) {\n              return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n            },\n            decrypt: function decrypt(ciphertext, key, cfg) {\n              return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n            }\n          };\n        };\n      }()\n    });\n\n    /**\n     * Abstract base stream cipher template.\n     *\n     * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n     */\n    var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n      _doFinalize: function _doFinalize() {\n        // Process partial blocks\n        var finalProcessedBlocks = this._process(!!'flush');\n        return finalProcessedBlocks;\n      },\n      blockSize: 1\n    });\n\n    /**\n     * Mode namespace.\n     */\n    var C_mode = C.mode = {};\n\n    /**\n     * Abstract base block cipher mode template.\n     */\n    var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n      /**\n       * Creates this mode for encryption.\n       *\n       * @param {Cipher} cipher A block cipher instance.\n       * @param {Array} iv The IV words.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n       */\n      createEncryptor: function createEncryptor(cipher, iv) {\n        return this.Encryptor.create(cipher, iv);\n      },\n      /**\n       * Creates this mode for decryption.\n       *\n       * @param {Cipher} cipher A block cipher instance.\n       * @param {Array} iv The IV words.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n       */\n      createDecryptor: function createDecryptor(cipher, iv) {\n        return this.Decryptor.create(cipher, iv);\n      },\n      /**\n       * Initializes a newly created mode.\n       *\n       * @param {Cipher} cipher A block cipher instance.\n       * @param {Array} iv The IV words.\n       *\n       * @example\n       *\n       *     var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n       */\n      init: function init(cipher, iv) {\n        this._cipher = cipher;\n        this._iv = iv;\n      }\n    });\n\n    /**\n     * Cipher Block Chaining mode.\n     */\n    var CBC = C_mode.CBC = function () {\n      /**\n       * Abstract base CBC mode.\n       */\n      var CBC = BlockCipherMode.extend();\n\n      /**\n       * CBC encryptor.\n       */\n      CBC.Encryptor = CBC.extend({\n        /**\n         * Processes the data block at offset.\n         *\n         * @param {Array} words The data words to operate on.\n         * @param {number} offset The offset where the block starts.\n         *\n         * @example\n         *\n         *     mode.processBlock(data.words, offset);\n         */\n        processBlock: function processBlock(words, offset) {\n          // Shortcuts\n          var cipher = this._cipher;\n          var blockSize = cipher.blockSize;\n\n          // XOR and encrypt\n          xorBlock.call(this, words, offset, blockSize);\n          cipher.encryptBlock(words, offset);\n\n          // Remember this block to use with next block\n          this._prevBlock = words.slice(offset, offset + blockSize);\n        }\n      });\n\n      /**\n       * CBC decryptor.\n       */\n      CBC.Decryptor = CBC.extend({\n        /**\n         * Processes the data block at offset.\n         *\n         * @param {Array} words The data words to operate on.\n         * @param {number} offset The offset where the block starts.\n         *\n         * @example\n         *\n         *     mode.processBlock(data.words, offset);\n         */\n        processBlock: function processBlock(words, offset) {\n          // Shortcuts\n          var cipher = this._cipher;\n          var blockSize = cipher.blockSize;\n\n          // Remember this block to use with next block\n          var thisBlock = words.slice(offset, offset + blockSize);\n\n          // Decrypt and XOR\n          cipher.decryptBlock(words, offset);\n          xorBlock.call(this, words, offset, blockSize);\n\n          // This block becomes the previous block\n          this._prevBlock = thisBlock;\n        }\n      });\n      function xorBlock(words, offset, blockSize) {\n        var block;\n\n        // Shortcut\n        var iv = this._iv;\n\n        // Choose mixing block\n        if (iv) {\n          block = iv;\n\n          // Remove IV for subsequent blocks\n          this._iv = undefined;\n        } else {\n          block = this._prevBlock;\n        }\n\n        // XOR blocks\n        for (var i = 0; i < blockSize; i++) {\n          words[offset + i] ^= block[i];\n        }\n      }\n      return CBC;\n    }();\n\n    /**\n     * Padding namespace.\n     */\n    var C_pad = C.pad = {};\n\n    /**\n     * PKCS #5/7 padding strategy.\n     */\n    var Pkcs7 = C_pad.Pkcs7 = {\n      /**\n       * Pads data using the algorithm defined in PKCS #5/7.\n       *\n       * @param {WordArray} data The data to pad.\n       * @param {number} blockSize The multiple that the data should be padded to.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n       */\n      pad: function pad(data, blockSize) {\n        // Shortcut\n        var blockSizeBytes = blockSize * 4;\n\n        // Count padding bytes\n        var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n        // Create padding word\n        var paddingWord = nPaddingBytes << 24 | nPaddingBytes << 16 | nPaddingBytes << 8 | nPaddingBytes;\n\n        // Create padding\n        var paddingWords = [];\n        for (var i = 0; i < nPaddingBytes; i += 4) {\n          paddingWords.push(paddingWord);\n        }\n        var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n        // Add padding\n        data.concat(padding);\n      },\n      /**\n       * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n       *\n       * @param {WordArray} data The data to unpad.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     CryptoJS.pad.Pkcs7.unpad(wordArray);\n       */\n      unpad: function unpad(data) {\n        // Get number of padding bytes from last byte\n        var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n        // Remove padding\n        data.sigBytes -= nPaddingBytes;\n      }\n    };\n\n    /**\n     * Abstract base block cipher template.\n     *\n     * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n     */\n    var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {Mode} mode The block mode to use. Default: CBC\n       * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n       */\n      cfg: Cipher.cfg.extend({\n        mode: CBC,\n        padding: Pkcs7\n      }),\n      reset: function reset() {\n        var modeCreator;\n\n        // Reset cipher\n        Cipher.reset.call(this);\n\n        // Shortcuts\n        var cfg = this.cfg;\n        var iv = cfg.iv;\n        var mode = cfg.mode;\n\n        // Reset block mode\n        if (this._xformMode == this._ENC_XFORM_MODE) {\n          modeCreator = mode.createEncryptor;\n        } else /* if (this._xformMode == this._DEC_XFORM_MODE) */{\n            modeCreator = mode.createDecryptor;\n            // Keep at least one block in the buffer for unpadding\n            this._minBufferSize = 1;\n          }\n        if (this._mode && this._mode.__creator == modeCreator) {\n          this._mode.init(this, iv && iv.words);\n        } else {\n          this._mode = modeCreator.call(mode, this, iv && iv.words);\n          this._mode.__creator = modeCreator;\n        }\n      },\n      _doProcessBlock: function _doProcessBlock(words, offset) {\n        this._mode.processBlock(words, offset);\n      },\n      _doFinalize: function _doFinalize() {\n        var finalProcessedBlocks;\n\n        // Shortcut\n        var padding = this.cfg.padding;\n\n        // Finalize\n        if (this._xformMode == this._ENC_XFORM_MODE) {\n          // Pad data\n          padding.pad(this._data, this.blockSize);\n\n          // Process final blocks\n          finalProcessedBlocks = this._process(!!'flush');\n        } else /* if (this._xformMode == this._DEC_XFORM_MODE) */{\n            // Process final blocks\n            finalProcessedBlocks = this._process(!!'flush');\n\n            // Unpad data\n            padding.unpad(finalProcessedBlocks);\n          }\n        return finalProcessedBlocks;\n      },\n      blockSize: 128 / 32\n    });\n\n    /**\n     * A collection of cipher parameters.\n     *\n     * @property {WordArray} ciphertext The raw ciphertext.\n     * @property {WordArray} key The key to this ciphertext.\n     * @property {WordArray} iv The IV used in the ciphering operation.\n     * @property {WordArray} salt The salt used with a key derivation function.\n     * @property {Cipher} algorithm The cipher algorithm.\n     * @property {Mode} mode The block mode used in the ciphering operation.\n     * @property {Padding} padding The padding scheme used in the ciphering operation.\n     * @property {number} blockSize The block size of the cipher.\n     * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n     */\n    var CipherParams = C_lib.CipherParams = Base.extend({\n      /**\n       * Initializes a newly created cipher params object.\n       *\n       * @param {Object} cipherParams An object with any of the possible cipher parameters.\n       *\n       * @example\n       *\n       *     var cipherParams = CryptoJS.lib.CipherParams.create({\n       *         ciphertext: ciphertextWordArray,\n       *         key: keyWordArray,\n       *         iv: ivWordArray,\n       *         salt: saltWordArray,\n       *         algorithm: CryptoJS.algo.AES,\n       *         mode: CryptoJS.mode.CBC,\n       *         padding: CryptoJS.pad.PKCS7,\n       *         blockSize: 4,\n       *         formatter: CryptoJS.format.OpenSSL\n       *     });\n       */\n      init: function init(cipherParams) {\n        this.mixIn(cipherParams);\n      },\n      /**\n       * Converts this cipher params object to a string.\n       *\n       * @param {Format} formatter (Optional) The formatting strategy to use.\n       *\n       * @return {string} The stringified cipher params.\n       *\n       * @throws Error If neither the formatter nor the default formatter is set.\n       *\n       * @example\n       *\n       *     var string = cipherParams + '';\n       *     var string = cipherParams.toString();\n       *     var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n       */\n      toString: function toString(formatter) {\n        return (formatter || this.formatter).stringify(this);\n      }\n    });\n\n    /**\n     * Format namespace.\n     */\n    var C_format = C.format = {};\n\n    /**\n     * OpenSSL formatting strategy.\n     */\n    var OpenSSLFormatter = C_format.OpenSSL = {\n      /**\n       * Converts a cipher params object to an OpenSSL-compatible string.\n       *\n       * @param {CipherParams} cipherParams The cipher params object.\n       *\n       * @return {string} The OpenSSL-compatible string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n       */\n      stringify: function stringify(cipherParams) {\n        var wordArray;\n\n        // Shortcuts\n        var ciphertext = cipherParams.ciphertext;\n        var salt = cipherParams.salt;\n\n        // Format\n        if (salt) {\n          wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n        } else {\n          wordArray = ciphertext;\n        }\n        return wordArray.toString(Base64);\n      },\n      /**\n       * Converts an OpenSSL-compatible string to a cipher params object.\n       *\n       * @param {string} openSSLStr The OpenSSL-compatible string.\n       *\n       * @return {CipherParams} The cipher params object.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n       */\n      parse: function parse(openSSLStr) {\n        var salt;\n\n        // Parse base64\n        var ciphertext = Base64.parse(openSSLStr);\n\n        // Shortcut\n        var ciphertextWords = ciphertext.words;\n\n        // Test for salt\n        if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n          // Extract salt\n          salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n          // Remove salt from ciphertext\n          ciphertextWords.splice(0, 4);\n          ciphertext.sigBytes -= 16;\n        }\n        return CipherParams.create({\n          ciphertext: ciphertext,\n          salt: salt\n        });\n      }\n    };\n\n    /**\n     * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n     */\n    var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n       */\n      cfg: Base.extend({\n        format: OpenSSLFormatter\n      }),\n      /**\n       * Encrypts a message.\n       *\n       * @param {Cipher} cipher The cipher algorithm to use.\n       * @param {WordArray|string} message The message to encrypt.\n       * @param {WordArray} key The key.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @return {CipherParams} A cipher params object.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n       *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n       *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n       */\n      encrypt: function encrypt(cipher, message, key, cfg) {\n        // Apply config defaults\n        cfg = this.cfg.extend(cfg);\n\n        // Encrypt\n        var encryptor = cipher.createEncryptor(key, cfg);\n        var ciphertext = encryptor.finalize(message);\n\n        // Shortcut\n        var cipherCfg = encryptor.cfg;\n\n        // Create and return serializable cipher params\n        return CipherParams.create({\n          ciphertext: ciphertext,\n          key: key,\n          iv: cipherCfg.iv,\n          algorithm: cipher,\n          mode: cipherCfg.mode,\n          padding: cipherCfg.padding,\n          blockSize: cipher.blockSize,\n          formatter: cfg.format\n        });\n      },\n      /**\n       * Decrypts serialized ciphertext.\n       *\n       * @param {Cipher} cipher The cipher algorithm to use.\n       * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n       * @param {WordArray} key The key.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @return {WordArray} The plaintext.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n       *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n       */\n      decrypt: function decrypt(cipher, ciphertext, key, cfg) {\n        // Apply config defaults\n        cfg = this.cfg.extend(cfg);\n\n        // Convert string to CipherParams\n        ciphertext = this._parse(ciphertext, cfg.format);\n\n        // Decrypt\n        var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n        return plaintext;\n      },\n      /**\n       * Converts serialized ciphertext to CipherParams,\n       * else assumed CipherParams already and returns ciphertext unchanged.\n       *\n       * @param {CipherParams|string} ciphertext The ciphertext.\n       * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n       *\n       * @return {CipherParams} The unserialized ciphertext.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n       */\n      _parse: function _parse(ciphertext, format) {\n        if (typeof ciphertext == 'string') {\n          return format.parse(ciphertext, this);\n        } else {\n          return ciphertext;\n        }\n      }\n    });\n\n    /**\n     * Key derivation function namespace.\n     */\n    var C_kdf = C.kdf = {};\n\n    /**\n     * OpenSSL key derivation function.\n     */\n    var OpenSSLKdf = C_kdf.OpenSSL = {\n      /**\n       * Derives a key and IV from a password.\n       *\n       * @param {string} password The password to derive from.\n       * @param {number} keySize The size in words of the key to generate.\n       * @param {number} ivSize The size in words of the IV to generate.\n       * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n       *\n       * @return {CipherParams} A cipher params object with the key, IV, and salt.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n       *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n       */\n      execute: function execute(password, keySize, ivSize, salt) {\n        // Generate random salt\n        if (!salt) {\n          salt = WordArray.random(64 / 8);\n        }\n\n        // Derive key and IV\n        var key = EvpKDF.create({\n          keySize: keySize + ivSize\n        }).compute(password, salt);\n\n        // Separate key and IV\n        var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n        key.sigBytes = keySize * 4;\n\n        // Return params\n        return CipherParams.create({\n          key: key,\n          iv: iv,\n          salt: salt\n        });\n      }\n    };\n\n    /**\n     * A serializable cipher wrapper that derives the key from a password,\n     * and returns ciphertext as a serializable cipher params object.\n     */\n    var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n       */\n      cfg: SerializableCipher.cfg.extend({\n        kdf: OpenSSLKdf\n      }),\n      /**\n       * Encrypts a message using a password.\n       *\n       * @param {Cipher} cipher The cipher algorithm to use.\n       * @param {WordArray|string} message The message to encrypt.\n       * @param {string} password The password.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @return {CipherParams} A cipher params object.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n       *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n       */\n      encrypt: function encrypt(cipher, message, password, cfg) {\n        // Apply config defaults\n        cfg = this.cfg.extend(cfg);\n\n        // Derive key and other params\n        var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n        // Add IV to config\n        cfg.iv = derivedParams.iv;\n\n        // Encrypt\n        var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n        // Mix in derived params\n        ciphertext.mixIn(derivedParams);\n        return ciphertext;\n      },\n      /**\n       * Decrypts serialized ciphertext using a password.\n       *\n       * @param {Cipher} cipher The cipher algorithm to use.\n       * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n       * @param {string} password The password.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @return {WordArray} The plaintext.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n       *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n       */\n      decrypt: function decrypt(cipher, ciphertext, password, cfg) {\n        // Apply config defaults\n        cfg = this.cfg.extend(cfg);\n\n        // Convert string to CipherParams\n        ciphertext = this._parse(ciphertext, cfg.format);\n\n        // Derive key and other params\n        var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n        // Add IV to config\n        cfg.iv = derivedParams.iv;\n\n        // Decrypt\n        var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n        return plaintext;\n      }\n    });\n  }();\n});\n\n/***/ }),\n\n/***/ 757:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(5743);\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(9135);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(9714);\n__webpack_require__(7042);\n__webpack_require__(9600);\n__webpack_require__(2222);\n__webpack_require__(561);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory();\n  } else {}\n})(void 0, function () {\n  /*globals window, global, require*/\n\n  /**\n   * CryptoJS core components.\n   */\n  var CryptoJS = CryptoJS || function (Math, undefined) {\n    var crypto;\n\n    // Native crypto from window (Browser)\n    if (typeof window !== 'undefined' && window.crypto) {\n      crypto = window.crypto;\n    }\n\n    // Native crypto in web worker (Browser)\n    if (typeof self !== 'undefined' && self.crypto) {\n      crypto = self.crypto;\n    }\n\n    // Native crypto from worker\n    if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n      crypto = globalThis.crypto;\n    }\n\n    // Native (experimental IE 11) crypto from window (Browser)\n    if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n      crypto = window.msCrypto;\n    }\n\n    // Native crypto from global (NodeJS)\n    if (!crypto && typeof __webpack_require__.g !== 'undefined' && __webpack_require__.g.crypto) {\n      crypto = __webpack_require__.g.crypto;\n    }\n\n    // Native crypto import via require (NodeJS)\n    if (!crypto && \"function\" === 'function') {\n      try {\n        crypto = __webpack_require__(2480);\n      } catch (err) {}\n    }\n\n    /*\n     * Cryptographically secure pseudorandom number generator\n     *\n     * As Math.random() is cryptographically not safe to use\n     */\n    var cryptoSecureRandomInt = function cryptoSecureRandomInt() {\n      if (crypto) {\n        // Use getRandomValues method (Browser)\n        if (typeof crypto.getRandomValues === 'function') {\n          try {\n            return crypto.getRandomValues(new Uint32Array(1))[0];\n          } catch (err) {}\n        }\n\n        // Use randomBytes method (NodeJS)\n        if (typeof crypto.randomBytes === 'function') {\n          try {\n            return crypto.randomBytes(4).readInt32LE();\n          } catch (err) {}\n        }\n      }\n      throw new Error('Native crypto module could not be used to get secure random number.');\n    };\n\n    /*\n     * Local polyfill of Object.create\n      */\n    var create = Object.create || function () {\n      function F() {}\n      return function (obj) {\n        var subtype;\n        F.prototype = obj;\n        subtype = new F();\n        F.prototype = null;\n        return subtype;\n      };\n    }();\n\n    /**\n     * CryptoJS namespace.\n     */\n    var C = {};\n\n    /**\n     * Library namespace.\n     */\n    var C_lib = C.lib = {};\n\n    /**\n     * Base object for prototypal inheritance.\n     */\n    var Base = C_lib.Base = function () {\n      return {\n        /**\n         * Creates a new object that inherits from this object.\n         *\n         * @param {Object} overrides Properties to copy into the new object.\n         *\n         * @return {Object} The new object.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var MyType = CryptoJS.lib.Base.extend({\n         *         field: 'value',\n         *\n         *         method: function () {\n         *         }\n         *     });\n         */\n        extend: function extend(overrides) {\n          // Spawn\n          var subtype = create(this);\n\n          // Augment\n          if (overrides) {\n            subtype.mixIn(overrides);\n          }\n\n          // Create default initializer\n          if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n            subtype.init = function () {\n              subtype.$super.init.apply(this, arguments);\n            };\n          }\n\n          // Initializer's prototype is the subtype object\n          subtype.init.prototype = subtype;\n\n          // Reference supertype\n          subtype.$super = this;\n          return subtype;\n        },\n        /**\n         * Extends this object and runs the init method.\n         * Arguments to create() will be passed to init().\n         *\n         * @return {Object} The new object.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var instance = MyType.create();\n         */\n        create: function create() {\n          var instance = this.extend();\n          instance.init.apply(instance, arguments);\n          return instance;\n        },\n        /**\n         * Initializes a newly created object.\n         * Override this method to add some logic when your objects are created.\n         *\n         * @example\n         *\n         *     var MyType = CryptoJS.lib.Base.extend({\n         *         init: function () {\n         *             // ...\n         *         }\n         *     });\n         */\n        init: function init() {},\n        /**\n         * Copies properties into this object.\n         *\n         * @param {Object} properties The properties to mix in.\n         *\n         * @example\n         *\n         *     MyType.mixIn({\n         *         field: 'value'\n         *     });\n         */\n        mixIn: function mixIn(properties) {\n          for (var propertyName in properties) {\n            if (properties.hasOwnProperty(propertyName)) {\n              this[propertyName] = properties[propertyName];\n            }\n          }\n\n          // IE won't copy toString using the loop above\n          if (properties.hasOwnProperty('toString')) {\n            this.toString = properties.toString;\n          }\n        },\n        /**\n         * Creates a copy of this object.\n         *\n         * @return {Object} The clone.\n         *\n         * @example\n         *\n         *     var clone = instance.clone();\n         */\n        clone: function clone() {\n          return this.init.prototype.extend(this);\n        }\n      };\n    }();\n\n    /**\n     * An array of 32-bit words.\n     *\n     * @property {Array} words The array of 32-bit words.\n     * @property {number} sigBytes The number of significant bytes in this word array.\n     */\n    var WordArray = C_lib.WordArray = Base.extend({\n      /**\n       * Initializes a newly created word array.\n       *\n       * @param {Array} words (Optional) An array of 32-bit words.\n       * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.lib.WordArray.create();\n       *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n       *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n       */\n      init: function init(words, sigBytes) {\n        words = this.words = words || [];\n        if (sigBytes != undefined) {\n          this.sigBytes = sigBytes;\n        } else {\n          this.sigBytes = words.length * 4;\n        }\n      },\n      /**\n       * Converts this word array to a string.\n       *\n       * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n       *\n       * @return {string} The stringified word array.\n       *\n       * @example\n       *\n       *     var string = wordArray + '';\n       *     var string = wordArray.toString();\n       *     var string = wordArray.toString(CryptoJS.enc.Utf8);\n       */\n      toString: function toString(encoder) {\n        return (encoder || Hex).stringify(this);\n      },\n      /**\n       * Concatenates a word array to this word array.\n       *\n       * @param {WordArray} wordArray The word array to append.\n       *\n       * @return {WordArray} This word array.\n       *\n       * @example\n       *\n       *     wordArray1.concat(wordArray2);\n       */\n      concat: function concat(wordArray) {\n        // Shortcuts\n        var thisWords = this.words;\n        var thatWords = wordArray.words;\n        var thisSigBytes = this.sigBytes;\n        var thatSigBytes = wordArray.sigBytes;\n\n        // Clamp excess bits\n        this.clamp();\n\n        // Concat\n        if (thisSigBytes % 4) {\n          // Copy one byte at a time\n          for (var i = 0; i < thatSigBytes; i++) {\n            var thatByte = thatWords[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n            thisWords[thisSigBytes + i >>> 2] |= thatByte << 24 - (thisSigBytes + i) % 4 * 8;\n          }\n        } else {\n          // Copy one word at a time\n          for (var j = 0; j < thatSigBytes; j += 4) {\n            thisWords[thisSigBytes + j >>> 2] = thatWords[j >>> 2];\n          }\n        }\n        this.sigBytes += thatSigBytes;\n\n        // Chainable\n        return this;\n      },\n      /**\n       * Removes insignificant bits.\n       *\n       * @example\n       *\n       *     wordArray.clamp();\n       */\n      clamp: function clamp() {\n        // Shortcuts\n        var words = this.words;\n        var sigBytes = this.sigBytes;\n\n        // Clamp\n        words[sigBytes >>> 2] &= 0xffffffff << 32 - sigBytes % 4 * 8;\n        words.length = Math.ceil(sigBytes / 4);\n      },\n      /**\n       * Creates a copy of this word array.\n       *\n       * @return {WordArray} The clone.\n       *\n       * @example\n       *\n       *     var clone = wordArray.clone();\n       */\n      clone: function clone() {\n        var clone = Base.clone.call(this);\n        clone.words = this.words.slice(0);\n        return clone;\n      },\n      /**\n       * Creates a word array filled with random bytes.\n       *\n       * @param {number} nBytes The number of random bytes to generate.\n       *\n       * @return {WordArray} The random word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.lib.WordArray.random(16);\n       */\n      random: function random(nBytes) {\n        var words = [];\n        for (var i = 0; i < nBytes; i += 4) {\n          words.push(cryptoSecureRandomInt());\n        }\n        return new WordArray.init(words, nBytes);\n      }\n    });\n\n    /**\n     * Encoder namespace.\n     */\n    var C_enc = C.enc = {};\n\n    /**\n     * Hex encoding strategy.\n     */\n    var Hex = C_enc.Hex = {\n      /**\n       * Converts a word array to a hex string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @return {string} The hex string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray) {\n        // Shortcuts\n        var words = wordArray.words;\n        var sigBytes = wordArray.sigBytes;\n\n        // Convert\n        var hexChars = [];\n        for (var i = 0; i < sigBytes; i++) {\n          var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n          hexChars.push((bite >>> 4).toString(16));\n          hexChars.push((bite & 0x0f).toString(16));\n        }\n        return hexChars.join('');\n      },\n      /**\n       * Converts a hex string to a word array.\n       *\n       * @param {string} hexStr The hex string.\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Hex.parse(hexString);\n       */\n      parse: function parse(hexStr) {\n        // Shortcut\n        var hexStrLength = hexStr.length;\n\n        // Convert\n        var words = [];\n        for (var i = 0; i < hexStrLength; i += 2) {\n          words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << 24 - i % 8 * 4;\n        }\n        return new WordArray.init(words, hexStrLength / 2);\n      }\n    };\n\n    /**\n     * Latin1 encoding strategy.\n     */\n    var Latin1 = C_enc.Latin1 = {\n      /**\n       * Converts a word array to a Latin1 string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @return {string} The Latin1 string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray) {\n        // Shortcuts\n        var words = wordArray.words;\n        var sigBytes = wordArray.sigBytes;\n\n        // Convert\n        var latin1Chars = [];\n        for (var i = 0; i < sigBytes; i++) {\n          var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n          latin1Chars.push(String.fromCharCode(bite));\n        }\n        return latin1Chars.join('');\n      },\n      /**\n       * Converts a Latin1 string to a word array.\n       *\n       * @param {string} latin1Str The Latin1 string.\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n       */\n      parse: function parse(latin1Str) {\n        // Shortcut\n        var latin1StrLength = latin1Str.length;\n\n        // Convert\n        var words = [];\n        for (var i = 0; i < latin1StrLength; i++) {\n          words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << 24 - i % 4 * 8;\n        }\n        return new WordArray.init(words, latin1StrLength);\n      }\n    };\n\n    /**\n     * UTF-8 encoding strategy.\n     */\n    var Utf8 = C_enc.Utf8 = {\n      /**\n       * Converts a word array to a UTF-8 string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @return {string} The UTF-8 string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray) {\n        try {\n          return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n        } catch (e) {\n          throw new Error('Malformed UTF-8 data');\n        }\n      },\n      /**\n       * Converts a UTF-8 string to a word array.\n       *\n       * @param {string} utf8Str The UTF-8 string.\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n       */\n      parse: function parse(utf8Str) {\n        return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n      }\n    };\n\n    /**\n     * Abstract buffered block algorithm template.\n     *\n     * The property blockSize must be implemented in a concrete subtype.\n     *\n     * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n     */\n    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n      /**\n       * Resets this block algorithm's data buffer to its initial state.\n       *\n       * @example\n       *\n       *     bufferedBlockAlgorithm.reset();\n       */\n      reset: function reset() {\n        // Initial values\n        this._data = new WordArray.init();\n        this._nDataBytes = 0;\n      },\n      /**\n       * Adds new data to this block algorithm's buffer.\n       *\n       * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n       *\n       * @example\n       *\n       *     bufferedBlockAlgorithm._append('data');\n       *     bufferedBlockAlgorithm._append(wordArray);\n       */\n      _append: function _append(data) {\n        // Convert string to WordArray, else assume WordArray already\n        if (typeof data == 'string') {\n          data = Utf8.parse(data);\n        }\n\n        // Append\n        this._data.concat(data);\n        this._nDataBytes += data.sigBytes;\n      },\n      /**\n       * Processes available data blocks.\n       *\n       * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n       *\n       * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n       *\n       * @return {WordArray} The processed data.\n       *\n       * @example\n       *\n       *     var processedData = bufferedBlockAlgorithm._process();\n       *     var processedData = bufferedBlockAlgorithm._process(!!'flush');\n       */\n      _process: function _process(doFlush) {\n        var processedWords;\n\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var dataSigBytes = data.sigBytes;\n        var blockSize = this.blockSize;\n        var blockSizeBytes = blockSize * 4;\n\n        // Count blocks ready\n        var nBlocksReady = dataSigBytes / blockSizeBytes;\n        if (doFlush) {\n          // Round up to include partial blocks\n          nBlocksReady = Math.ceil(nBlocksReady);\n        } else {\n          // Round down to include only full blocks,\n          // less the number of blocks that must remain in the buffer\n          nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n        }\n\n        // Count words ready\n        var nWordsReady = nBlocksReady * blockSize;\n\n        // Count bytes ready\n        var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n        // Process blocks\n        if (nWordsReady) {\n          for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n            // Perform concrete-algorithm logic\n            this._doProcessBlock(dataWords, offset);\n          }\n\n          // Remove processed words\n          processedWords = dataWords.splice(0, nWordsReady);\n          data.sigBytes -= nBytesReady;\n        }\n\n        // Return processed words\n        return new WordArray.init(processedWords, nBytesReady);\n      },\n      /**\n       * Creates a copy of this object.\n       *\n       * @return {Object} The clone.\n       *\n       * @example\n       *\n       *     var clone = bufferedBlockAlgorithm.clone();\n       */\n      clone: function clone() {\n        var clone = Base.clone.call(this);\n        clone._data = this._data.clone();\n        return clone;\n      },\n      _minBufferSize: 0\n    });\n\n    /**\n     * Abstract hasher template.\n     *\n     * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n     */\n    var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n      /**\n       * Configuration options.\n       */\n      cfg: Base.extend(),\n      /**\n       * Initializes a newly created hasher.\n       *\n       * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n       *\n       * @example\n       *\n       *     var hasher = CryptoJS.algo.SHA256.create();\n       */\n      init: function init(cfg) {\n        // Apply config defaults\n        this.cfg = this.cfg.extend(cfg);\n\n        // Set initial values\n        this.reset();\n      },\n      /**\n       * Resets this hasher to its initial state.\n       *\n       * @example\n       *\n       *     hasher.reset();\n       */\n      reset: function reset() {\n        // Reset data buffer\n        BufferedBlockAlgorithm.reset.call(this);\n\n        // Perform concrete-hasher logic\n        this._doReset();\n      },\n      /**\n       * Updates this hasher with a message.\n       *\n       * @param {WordArray|string} messageUpdate The message to append.\n       *\n       * @return {Hasher} This hasher.\n       *\n       * @example\n       *\n       *     hasher.update('message');\n       *     hasher.update(wordArray);\n       */\n      update: function update(messageUpdate) {\n        // Append\n        this._append(messageUpdate);\n\n        // Update the hash\n        this._process();\n\n        // Chainable\n        return this;\n      },\n      /**\n       * Finalizes the hash computation.\n       * Note that the finalize operation is effectively a destructive, read-once operation.\n       *\n       * @param {WordArray|string} messageUpdate (Optional) A final message update.\n       *\n       * @return {WordArray} The hash.\n       *\n       * @example\n       *\n       *     var hash = hasher.finalize();\n       *     var hash = hasher.finalize('message');\n       *     var hash = hasher.finalize(wordArray);\n       */\n      finalize: function finalize(messageUpdate) {\n        // Final message update\n        if (messageUpdate) {\n          this._append(messageUpdate);\n        }\n\n        // Perform concrete-hasher logic\n        var hash = this._doFinalize();\n        return hash;\n      },\n      blockSize: 512 / 32,\n      /**\n       * Creates a shortcut function to a hasher's object interface.\n       *\n       * @param {Hasher} hasher The hasher to create a helper for.\n       *\n       * @return {Function} The shortcut function.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n       */\n      _createHelper: function _createHelper(hasher) {\n        return function (message, cfg) {\n          return new hasher.init(cfg).finalize(message);\n        };\n      },\n      /**\n       * Creates a shortcut function to the HMAC's object interface.\n       *\n       * @param {Hasher} hasher The hasher to use in this HMAC helper.\n       *\n       * @return {Function} The shortcut function.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n       */\n      _createHmacHelper: function _createHmacHelper(hasher) {\n        return function (message, key) {\n          return new C_algo.HMAC.init(hasher, key).finalize(message);\n        };\n      }\n    });\n\n    /**\n     * Algorithm namespace.\n     */\n    var C_algo = C.algo = {};\n    return C;\n  }(Math);\n  return CryptoJS;\n});\n\n/***/ }),\n\n/***/ 7508:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(9600);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var C_enc = C.enc;\n\n    /**\n     * Base64 encoding strategy.\n     */\n    var Base64 = C_enc.Base64 = {\n      /**\n       * Converts a word array to a Base64 string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @return {string} The Base64 string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray) {\n        // Shortcuts\n        var words = wordArray.words;\n        var sigBytes = wordArray.sigBytes;\n        var map = this._map;\n\n        // Clamp excess bits\n        wordArray.clamp();\n\n        // Convert\n        var base64Chars = [];\n        for (var i = 0; i < sigBytes; i += 3) {\n          var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n          var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff;\n          var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff;\n          var triplet = byte1 << 16 | byte2 << 8 | byte3;\n          for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) {\n            base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f));\n          }\n        }\n\n        // Add padding\n        var paddingChar = map.charAt(64);\n        if (paddingChar) {\n          while (base64Chars.length % 4) {\n            base64Chars.push(paddingChar);\n          }\n        }\n        return base64Chars.join('');\n      },\n      /**\n       * Converts a Base64 string to a word array.\n       *\n       * @param {string} base64Str The Base64 string.\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Base64.parse(base64String);\n       */\n      parse: function parse(base64Str) {\n        // Shortcuts\n        var base64StrLength = base64Str.length;\n        var map = this._map;\n        var reverseMap = this._reverseMap;\n        if (!reverseMap) {\n          reverseMap = this._reverseMap = [];\n          for (var j = 0; j < map.length; j++) {\n            reverseMap[map.charCodeAt(j)] = j;\n          }\n        }\n\n        // Ignore padding\n        var paddingChar = map.charAt(64);\n        if (paddingChar) {\n          var paddingIndex = base64Str.indexOf(paddingChar);\n          if (paddingIndex !== -1) {\n            base64StrLength = paddingIndex;\n          }\n        }\n\n        // Convert\n        return parseLoop(base64Str, base64StrLength, reverseMap);\n      },\n      _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n    };\n    function parseLoop(base64Str, base64StrLength, reverseMap) {\n      var words = [];\n      var nBytes = 0;\n      for (var i = 0; i < base64StrLength; i++) {\n        if (i % 4) {\n          var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2;\n          var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2;\n          var bitsCombined = bits1 | bits2;\n          words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8;\n          nBytes++;\n        }\n      }\n      return WordArray.create(words, nBytes);\n    }\n  })();\n  return CryptoJS.enc.Base64;\n});\n\n/***/ }),\n\n/***/ 7590:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(9600);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var C_enc = C.enc;\n\n    /**\n     * Base64url encoding strategy.\n     */\n    var Base64url = C_enc.Base64url = {\n      /**\n       * Converts a word array to a Base64url string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @param {boolean} urlSafe Whether to use url safe\n       *\n       * @return {string} The Base64url string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray, urlSafe) {\n        if (urlSafe === void 0) {\n          urlSafe = true;\n        }\n        // Shortcuts\n        var words = wordArray.words;\n        var sigBytes = wordArray.sigBytes;\n        var map = urlSafe ? this._safe_map : this._map;\n\n        // Clamp excess bits\n        wordArray.clamp();\n\n        // Convert\n        var base64Chars = [];\n        for (var i = 0; i < sigBytes; i += 3) {\n          var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n          var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff;\n          var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff;\n          var triplet = byte1 << 16 | byte2 << 8 | byte3;\n          for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) {\n            base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f));\n          }\n        }\n\n        // Add padding\n        var paddingChar = map.charAt(64);\n        if (paddingChar) {\n          while (base64Chars.length % 4) {\n            base64Chars.push(paddingChar);\n          }\n        }\n        return base64Chars.join('');\n      },\n      /**\n       * Converts a Base64url string to a word array.\n       *\n       * @param {string} base64Str The Base64url string.\n       *\n       * @param {boolean} urlSafe Whether to use url safe\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n       */\n      parse: function parse(base64Str, urlSafe) {\n        if (urlSafe === void 0) {\n          urlSafe = true;\n        }\n        // Shortcuts\n        var base64StrLength = base64Str.length;\n        var map = urlSafe ? this._safe_map : this._map;\n        var reverseMap = this._reverseMap;\n        if (!reverseMap) {\n          reverseMap = this._reverseMap = [];\n          for (var j = 0; j < map.length; j++) {\n            reverseMap[map.charCodeAt(j)] = j;\n          }\n        }\n\n        // Ignore padding\n        var paddingChar = map.charAt(64);\n        if (paddingChar) {\n          var paddingIndex = base64Str.indexOf(paddingChar);\n          if (paddingIndex !== -1) {\n            base64StrLength = paddingIndex;\n          }\n        }\n\n        // Convert\n        return parseLoop(base64Str, base64StrLength, reverseMap);\n      },\n      _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n      _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'\n    };\n    function parseLoop(base64Str, base64StrLength, reverseMap) {\n      var words = [];\n      var nBytes = 0;\n      for (var i = 0; i < base64StrLength; i++) {\n        if (i % 4) {\n          var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2;\n          var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2;\n          var bitsCombined = bits1 | bits2;\n          words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8;\n          nBytes++;\n        }\n      }\n      return WordArray.create(words, nBytes);\n    }\n  })();\n  return CryptoJS.enc.Base64url;\n});\n\n/***/ }),\n\n/***/ 4978:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(9600);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var C_enc = C.enc;\n\n    /**\n     * UTF-16 BE encoding strategy.\n     */\n    var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n      /**\n       * Converts a word array to a UTF-16 BE string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @return {string} The UTF-16 BE string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray) {\n        // Shortcuts\n        var words = wordArray.words;\n        var sigBytes = wordArray.sigBytes;\n\n        // Convert\n        var utf16Chars = [];\n        for (var i = 0; i < sigBytes; i += 2) {\n          var codePoint = words[i >>> 2] >>> 16 - i % 4 * 8 & 0xffff;\n          utf16Chars.push(String.fromCharCode(codePoint));\n        }\n        return utf16Chars.join('');\n      },\n      /**\n       * Converts a UTF-16 BE string to a word array.\n       *\n       * @param {string} utf16Str The UTF-16 BE string.\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n       */\n      parse: function parse(utf16Str) {\n        // Shortcut\n        var utf16StrLength = utf16Str.length;\n\n        // Convert\n        var words = [];\n        for (var i = 0; i < utf16StrLength; i++) {\n          words[i >>> 1] |= utf16Str.charCodeAt(i) << 16 - i % 2 * 16;\n        }\n        return WordArray.create(words, utf16StrLength * 2);\n      }\n    };\n\n    /**\n     * UTF-16 LE encoding strategy.\n     */\n    C_enc.Utf16LE = {\n      /**\n       * Converts a word array to a UTF-16 LE string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @return {string} The UTF-16 LE string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray) {\n        // Shortcuts\n        var words = wordArray.words;\n        var sigBytes = wordArray.sigBytes;\n\n        // Convert\n        var utf16Chars = [];\n        for (var i = 0; i < sigBytes; i += 2) {\n          var codePoint = swapEndian(words[i >>> 2] >>> 16 - i % 4 * 8 & 0xffff);\n          utf16Chars.push(String.fromCharCode(codePoint));\n        }\n        return utf16Chars.join('');\n      },\n      /**\n       * Converts a UTF-16 LE string to a word array.\n       *\n       * @param {string} utf16Str The UTF-16 LE string.\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n       */\n      parse: function parse(utf16Str) {\n        // Shortcut\n        var utf16StrLength = utf16Str.length;\n\n        // Convert\n        var words = [];\n        for (var i = 0; i < utf16StrLength; i++) {\n          words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << 16 - i % 2 * 16);\n        }\n        return WordArray.create(words, utf16StrLength * 2);\n      }\n    };\n    function swapEndian(word) {\n      return word << 8 & 0xff00ff00 | word >>> 8 & 0x00ff00ff;\n    }\n  })();\n  return CryptoJS.enc.Utf16;\n});\n\n/***/ }),\n\n/***/ 3839:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2222);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(9865), __webpack_require__(6727));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var Base = C_lib.Base;\n    var WordArray = C_lib.WordArray;\n    var C_algo = C.algo;\n    var MD5 = C_algo.MD5;\n\n    /**\n     * This key derivation function is meant to conform with EVP_BytesToKey.\n     * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n     */\n    var EvpKDF = C_algo.EvpKDF = Base.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n       * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n       * @property {number} iterations The number of iterations to perform. Default: 1\n       */\n      cfg: Base.extend({\n        keySize: 128 / 32,\n        hasher: MD5,\n        iterations: 1\n      }),\n      /**\n       * Initializes a newly created key derivation function.\n       *\n       * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n       *\n       * @example\n       *\n       *     var kdf = CryptoJS.algo.EvpKDF.create();\n       *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n       *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n       */\n      init: function init(cfg) {\n        this.cfg = this.cfg.extend(cfg);\n      },\n      /**\n       * Derives a key from a password.\n       *\n       * @param {WordArray|string} password The password.\n       * @param {WordArray|string} salt A salt.\n       *\n       * @return {WordArray} The derived key.\n       *\n       * @example\n       *\n       *     var key = kdf.compute(password, salt);\n       */\n      compute: function compute(password, salt) {\n        var block;\n\n        // Shortcut\n        var cfg = this.cfg;\n\n        // Init hasher\n        var hasher = cfg.hasher.create();\n\n        // Initial values\n        var derivedKey = WordArray.create();\n\n        // Shortcuts\n        var derivedKeyWords = derivedKey.words;\n        var keySize = cfg.keySize;\n        var iterations = cfg.iterations;\n\n        // Generate key\n        while (derivedKeyWords.length < keySize) {\n          if (block) {\n            hasher.update(block);\n          }\n          block = hasher.update(password).finalize(salt);\n          hasher.reset();\n\n          // Iterations\n          for (var i = 1; i < iterations; i++) {\n            block = hasher.finalize(block);\n            hasher.reset();\n          }\n          derivedKey.concat(block);\n        }\n        derivedKey.sigBytes = keySize * 4;\n        return derivedKey;\n      }\n    });\n\n    /**\n     * Derives a key from a password.\n     *\n     * @param {WordArray|string} password The password.\n     * @param {WordArray|string} salt A salt.\n     * @param {Object} cfg (Optional) The configuration options to use for this computation.\n     *\n     * @return {WordArray} The derived key.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var key = CryptoJS.EvpKDF(password, salt);\n     *     var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n     *     var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n     */\n    C.EvpKDF = function (password, salt, cfg) {\n      return EvpKDF.create(cfg).compute(password, salt);\n    };\n  })();\n  return CryptoJS.EvpKDF;\n});\n\n/***/ }),\n\n/***/ 8942:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(1539);\n__webpack_require__(9714);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function (undefined) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var CipherParams = C_lib.CipherParams;\n    var C_enc = C.enc;\n    var Hex = C_enc.Hex;\n    var C_format = C.format;\n    var HexFormatter = C_format.Hex = {\n      /**\n       * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n       *\n       * @param {CipherParams} cipherParams The cipher params object.\n       *\n       * @return {string} The hexadecimally encoded string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n       */\n      stringify: function stringify(cipherParams) {\n        return cipherParams.ciphertext.toString(Hex);\n      },\n      /**\n       * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n       *\n       * @param {string} input The hexadecimally encoded string.\n       *\n       * @return {CipherParams} The cipher params object.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var cipherParams = CryptoJS.format.Hex.parse(hexString);\n       */\n      parse: function parse(input) {\n        var ciphertext = Hex.parse(input);\n        return CipherParams.create({\n          ciphertext: ciphertext\n        });\n      }\n    };\n  })();\n  return CryptoJS.format.Hex;\n});\n\n/***/ }),\n\n/***/ 6727:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2222);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var Base = C_lib.Base;\n    var C_enc = C.enc;\n    var Utf8 = C_enc.Utf8;\n    var C_algo = C.algo;\n\n    /**\n     * HMAC algorithm.\n     */\n    var HMAC = C_algo.HMAC = Base.extend({\n      /**\n       * Initializes a newly created HMAC.\n       *\n       * @param {Hasher} hasher The hash algorithm to use.\n       * @param {WordArray|string} key The secret key.\n       *\n       * @example\n       *\n       *     var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n       */\n      init: function init(hasher, key) {\n        // Init hasher\n        hasher = this._hasher = new hasher.init();\n\n        // Convert string to WordArray, else assume WordArray already\n        if (typeof key == 'string') {\n          key = Utf8.parse(key);\n        }\n\n        // Shortcuts\n        var hasherBlockSize = hasher.blockSize;\n        var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n        // Allow arbitrary length keys\n        if (key.sigBytes > hasherBlockSizeBytes) {\n          key = hasher.finalize(key);\n        }\n\n        // Clamp excess bits\n        key.clamp();\n\n        // Clone key for inner and outer pads\n        var oKey = this._oKey = key.clone();\n        var iKey = this._iKey = key.clone();\n\n        // Shortcuts\n        var oKeyWords = oKey.words;\n        var iKeyWords = iKey.words;\n\n        // XOR keys with pad constants\n        for (var i = 0; i < hasherBlockSize; i++) {\n          oKeyWords[i] ^= 0x5c5c5c5c;\n          iKeyWords[i] ^= 0x36363636;\n        }\n        oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n        // Set initial values\n        this.reset();\n      },\n      /**\n       * Resets this HMAC to its initial state.\n       *\n       * @example\n       *\n       *     hmacHasher.reset();\n       */\n      reset: function reset() {\n        // Shortcut\n        var hasher = this._hasher;\n\n        // Reset\n        hasher.reset();\n        hasher.update(this._iKey);\n      },\n      /**\n       * Updates this HMAC with a message.\n       *\n       * @param {WordArray|string} messageUpdate The message to append.\n       *\n       * @return {HMAC} This HMAC instance.\n       *\n       * @example\n       *\n       *     hmacHasher.update('message');\n       *     hmacHasher.update(wordArray);\n       */\n      update: function update(messageUpdate) {\n        this._hasher.update(messageUpdate);\n\n        // Chainable\n        return this;\n      },\n      /**\n       * Finalizes the HMAC computation.\n       * Note that the finalize operation is effectively a destructive, read-once operation.\n       *\n       * @param {WordArray|string} messageUpdate (Optional) A final message update.\n       *\n       * @return {WordArray} The HMAC.\n       *\n       * @example\n       *\n       *     var hmac = hmacHasher.finalize();\n       *     var hmac = hmacHasher.finalize('message');\n       *     var hmac = hmacHasher.finalize(wordArray);\n       */\n      finalize: function finalize(messageUpdate) {\n        // Shortcut\n        var hasher = this._hasher;\n\n        // Compute HMAC\n        var innerHash = hasher.finalize(messageUpdate);\n        hasher.reset();\n        var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n        return hmac;\n      }\n    });\n  })();\n});\n\n/***/ }),\n\n/***/ 5153:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(2601), __webpack_require__(1947), __webpack_require__(4978), __webpack_require__(7508), __webpack_require__(7590), __webpack_require__(3440), __webpack_require__(9865), __webpack_require__(8921), __webpack_require__(6876), __webpack_require__(7991), __webpack_require__(8122), __webpack_require__(8342), __webpack_require__(8714), __webpack_require__(6727), __webpack_require__(3486), __webpack_require__(3839), __webpack_require__(1582), __webpack_require__(702), __webpack_require__(2362), __webpack_require__(4412), __webpack_require__(5720), __webpack_require__(3518), __webpack_require__(6362), __webpack_require__(4431), __webpack_require__(8800), __webpack_require__(3992), __webpack_require__(649), __webpack_require__(8942), __webpack_require__(194), __webpack_require__(8437), __webpack_require__(4640), __webpack_require__(5323), __webpack_require__(4363));\n  } else {}\n})(void 0, function (CryptoJS) {\n  return CryptoJS;\n});\n\n/***/ }),\n\n/***/ 1947:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7803);\n__webpack_require__(1539);\n__webpack_require__(6992);\n__webpack_require__(2472);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(7145);\n__webpack_require__(9743);\n__webpack_require__(5109);\n__webpack_require__(8255);\n__webpack_require__(5125);\n__webpack_require__(9135);\n__webpack_require__(4197);\n__webpack_require__(6495);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Check if typed arrays are supported\n    if (typeof ArrayBuffer != 'function') {\n      return;\n    }\n\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n\n    // Reference original init\n    var superInit = WordArray.init;\n\n    // Augment WordArray.init to handle typed arrays\n    var subInit = WordArray.init = function (typedArray) {\n      // Convert buffers to uint8\n      if (typedArray instanceof ArrayBuffer) {\n        typedArray = new Uint8Array(typedArray);\n      }\n\n      // Convert other array views to uint8\n      if (typedArray instanceof Int8Array || typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray || typedArray instanceof Int16Array || typedArray instanceof Uint16Array || typedArray instanceof Int32Array || typedArray instanceof Uint32Array || typedArray instanceof Float32Array || typedArray instanceof Float64Array) {\n        typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n      }\n\n      // Handle Uint8Array\n      if (typedArray instanceof Uint8Array) {\n        // Shortcut\n        var typedArrayByteLength = typedArray.byteLength;\n\n        // Extract bytes\n        var words = [];\n        for (var i = 0; i < typedArrayByteLength; i++) {\n          words[i >>> 2] |= typedArray[i] << 24 - i % 4 * 8;\n        }\n\n        // Initialize this word array\n        superInit.call(this, words, typedArrayByteLength);\n      } else {\n        // Else call normal init\n        superInit.apply(this, arguments);\n      }\n    };\n    subInit.prototype = WordArray;\n  })();\n  return CryptoJS.lib.WordArray;\n});\n\n/***/ }),\n\n/***/ 3440:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function (Math) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var Hasher = C_lib.Hasher;\n    var C_algo = C.algo;\n\n    // Constants table\n    var T = [];\n\n    // Compute constants\n    (function () {\n      for (var i = 0; i < 64; i++) {\n        T[i] = Math.abs(Math.sin(i + 1)) * 0x100000000 | 0;\n      }\n    })();\n\n    /**\n     * MD5 hash algorithm.\n     */\n    var MD5 = C_algo.MD5 = Hasher.extend({\n      _doReset: function _doReset() {\n        this._hash = new WordArray.init([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]);\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Swap endian\n        for (var i = 0; i < 16; i++) {\n          // Shortcuts\n          var offset_i = offset + i;\n          var M_offset_i = M[offset_i];\n          M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 0x00ff00ff | (M_offset_i << 24 | M_offset_i >>> 8) & 0xff00ff00;\n        }\n\n        // Shortcuts\n        var H = this._hash.words;\n        var M_offset_0 = M[offset + 0];\n        var M_offset_1 = M[offset + 1];\n        var M_offset_2 = M[offset + 2];\n        var M_offset_3 = M[offset + 3];\n        var M_offset_4 = M[offset + 4];\n        var M_offset_5 = M[offset + 5];\n        var M_offset_6 = M[offset + 6];\n        var M_offset_7 = M[offset + 7];\n        var M_offset_8 = M[offset + 8];\n        var M_offset_9 = M[offset + 9];\n        var M_offset_10 = M[offset + 10];\n        var M_offset_11 = M[offset + 11];\n        var M_offset_12 = M[offset + 12];\n        var M_offset_13 = M[offset + 13];\n        var M_offset_14 = M[offset + 14];\n        var M_offset_15 = M[offset + 15];\n\n        // Working varialbes\n        var a = H[0];\n        var b = H[1];\n        var c = H[2];\n        var d = H[3];\n\n        // Computation\n        a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n        d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n        c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n        b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n        a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n        d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n        c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n        b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n        a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n        d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n        c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n        b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n        a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n        d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n        c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n        b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n        a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n        d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n        c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n        b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n        a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n        d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n        c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n        b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n        a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n        d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n        c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n        b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n        a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n        d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n        c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n        b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n        a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n        d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n        c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n        b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n        a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n        d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n        c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n        b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n        a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n        d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n        c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n        b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n        a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n        d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n        c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n        b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n        a = II(a, b, c, d, M_offset_0, 6, T[48]);\n        d = II(d, a, b, c, M_offset_7, 10, T[49]);\n        c = II(c, d, a, b, M_offset_14, 15, T[50]);\n        b = II(b, c, d, a, M_offset_5, 21, T[51]);\n        a = II(a, b, c, d, M_offset_12, 6, T[52]);\n        d = II(d, a, b, c, M_offset_3, 10, T[53]);\n        c = II(c, d, a, b, M_offset_10, 15, T[54]);\n        b = II(b, c, d, a, M_offset_1, 21, T[55]);\n        a = II(a, b, c, d, M_offset_8, 6, T[56]);\n        d = II(d, a, b, c, M_offset_15, 10, T[57]);\n        c = II(c, d, a, b, M_offset_6, 15, T[58]);\n        b = II(b, c, d, a, M_offset_13, 21, T[59]);\n        a = II(a, b, c, d, M_offset_4, 6, T[60]);\n        d = II(d, a, b, c, M_offset_11, 10, T[61]);\n        c = II(c, d, a, b, M_offset_2, 15, T[62]);\n        b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n        // Intermediate hash value\n        H[0] = H[0] + a | 0;\n        H[1] = H[1] + b | 0;\n        H[2] = H[2] + c | 0;\n        H[3] = H[3] + d | 0;\n      },\n      _doFinalize: function _doFinalize() {\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var nBitsTotal = this._nDataBytes * 8;\n        var nBitsLeft = data.sigBytes * 8;\n\n        // Add padding\n        dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n        var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n        var nBitsTotalL = nBitsTotal;\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = (nBitsTotalH << 8 | nBitsTotalH >>> 24) & 0x00ff00ff | (nBitsTotalH << 24 | nBitsTotalH >>> 8) & 0xff00ff00;\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotalL << 8 | nBitsTotalL >>> 24) & 0x00ff00ff | (nBitsTotalL << 24 | nBitsTotalL >>> 8) & 0xff00ff00;\n        data.sigBytes = (dataWords.length + 1) * 4;\n\n        // Hash final blocks\n        this._process();\n\n        // Shortcuts\n        var hash = this._hash;\n        var H = hash.words;\n\n        // Swap endian\n        for (var i = 0; i < 4; i++) {\n          // Shortcut\n          var H_i = H[i];\n          H[i] = (H_i << 8 | H_i >>> 24) & 0x00ff00ff | (H_i << 24 | H_i >>> 8) & 0xff00ff00;\n        }\n\n        // Return final computed hash\n        return hash;\n      },\n      clone: function clone() {\n        var clone = Hasher.clone.call(this);\n        clone._hash = this._hash.clone();\n        return clone;\n      }\n    });\n    function FF(a, b, c, d, x, s, t) {\n      var n = a + (b & c | ~b & d) + x + t;\n      return (n << s | n >>> 32 - s) + b;\n    }\n    function GG(a, b, c, d, x, s, t) {\n      var n = a + (b & d | c & ~d) + x + t;\n      return (n << s | n >>> 32 - s) + b;\n    }\n    function HH(a, b, c, d, x, s, t) {\n      var n = a + (b ^ c ^ d) + x + t;\n      return (n << s | n >>> 32 - s) + b;\n    }\n    function II(a, b, c, d, x, s, t) {\n      var n = a + (c ^ (b | ~d)) + x + t;\n      return (n << s | n >>> 32 - s) + b;\n    }\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.MD5('message');\n     *     var hash = CryptoJS.MD5(wordArray);\n     */\n    C.MD5 = Hasher._createHelper(MD5);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacMD5(message, key);\n     */\n    C.HmacMD5 = Hasher._createHmacHelper(MD5);\n  })(Math);\n  return CryptoJS.MD5;\n});\n\n/***/ }),\n\n/***/ 702:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * Cipher Feedback block mode.\n   */\n  CryptoJS.mode.CFB = function () {\n    var CFB = CryptoJS.lib.BlockCipherMode.extend();\n    CFB.Encryptor = CFB.extend({\n      processBlock: function processBlock(words, offset) {\n        // Shortcuts\n        var cipher = this._cipher;\n        var blockSize = cipher.blockSize;\n        generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n        // Remember this block to use with next block\n        this._prevBlock = words.slice(offset, offset + blockSize);\n      }\n    });\n    CFB.Decryptor = CFB.extend({\n      processBlock: function processBlock(words, offset) {\n        // Shortcuts\n        var cipher = this._cipher;\n        var blockSize = cipher.blockSize;\n\n        // Remember this block to use with next block\n        var thisBlock = words.slice(offset, offset + blockSize);\n        generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n        // This block becomes the previous block\n        this._prevBlock = thisBlock;\n      }\n    });\n    function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n      var keystream;\n\n      // Shortcut\n      var iv = this._iv;\n\n      // Generate keystream\n      if (iv) {\n        keystream = iv.slice(0);\n\n        // Remove IV for subsequent blocks\n        this._iv = undefined;\n      } else {\n        keystream = this._prevBlock;\n      }\n      cipher.encryptBlock(keystream, 0);\n\n      // Encrypt\n      for (var i = 0; i < blockSize; i++) {\n        words[offset + i] ^= keystream[i];\n      }\n    }\n    return CFB;\n  }();\n  return CryptoJS.mode.CFB;\n});\n\n/***/ }),\n\n/***/ 4412:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /** @preserve\n   * Counter block mode compatible with  Dr Brian Gladman fileenc.c\n   * derived from CryptoJS.mode.CTR\n   * Jan Hruby jhruby.web@gmail.com\n   */\n  CryptoJS.mode.CTRGladman = function () {\n    var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n    function incWord(word) {\n      if ((word >> 24 & 0xff) === 0xff) {\n        //overflow\n        var b1 = word >> 16 & 0xff;\n        var b2 = word >> 8 & 0xff;\n        var b3 = word & 0xff;\n        if (b1 === 0xff)\n          // overflow b1\n          {\n            b1 = 0;\n            if (b2 === 0xff) {\n              b2 = 0;\n              if (b3 === 0xff) {\n                b3 = 0;\n              } else {\n                ++b3;\n              }\n            } else {\n              ++b2;\n            }\n          } else {\n          ++b1;\n        }\n        word = 0;\n        word += b1 << 16;\n        word += b2 << 8;\n        word += b3;\n      } else {\n        word += 0x01 << 24;\n      }\n      return word;\n    }\n    function incCounter(counter) {\n      if ((counter[0] = incWord(counter[0])) === 0) {\n        // encr_data in fileenc.c from  Dr Brian Gladman's counts only with DWORD j < 8\n        counter[1] = incWord(counter[1]);\n      }\n      return counter;\n    }\n    var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n      processBlock: function processBlock(words, offset) {\n        // Shortcuts\n        var cipher = this._cipher;\n        var blockSize = cipher.blockSize;\n        var iv = this._iv;\n        var counter = this._counter;\n\n        // Generate keystream\n        if (iv) {\n          counter = this._counter = iv.slice(0);\n\n          // Remove IV for subsequent blocks\n          this._iv = undefined;\n        }\n        incCounter(counter);\n        var keystream = counter.slice(0);\n        cipher.encryptBlock(keystream, 0);\n\n        // Encrypt\n        for (var i = 0; i < blockSize; i++) {\n          words[offset + i] ^= keystream[i];\n        }\n      }\n    });\n    CTRGladman.Decryptor = Encryptor;\n    return CTRGladman;\n  }();\n  return CryptoJS.mode.CTRGladman;\n});\n\n/***/ }),\n\n/***/ 2362:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * Counter block mode.\n   */\n  CryptoJS.mode.CTR = function () {\n    var CTR = CryptoJS.lib.BlockCipherMode.extend();\n    var Encryptor = CTR.Encryptor = CTR.extend({\n      processBlock: function processBlock(words, offset) {\n        // Shortcuts\n        var cipher = this._cipher;\n        var blockSize = cipher.blockSize;\n        var iv = this._iv;\n        var counter = this._counter;\n\n        // Generate keystream\n        if (iv) {\n          counter = this._counter = iv.slice(0);\n\n          // Remove IV for subsequent blocks\n          this._iv = undefined;\n        }\n        var keystream = counter.slice(0);\n        cipher.encryptBlock(keystream, 0);\n\n        // Increment counter\n        counter[blockSize - 1] = counter[blockSize - 1] + 1 | 0;\n\n        // Encrypt\n        for (var i = 0; i < blockSize; i++) {\n          words[offset + i] ^= keystream[i];\n        }\n      }\n    });\n    CTR.Decryptor = Encryptor;\n    return CTR;\n  }();\n  return CryptoJS.mode.CTR;\n});\n\n/***/ }),\n\n/***/ 3518:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * Electronic Codebook block mode.\n   */\n  CryptoJS.mode.ECB = function () {\n    var ECB = CryptoJS.lib.BlockCipherMode.extend();\n    ECB.Encryptor = ECB.extend({\n      processBlock: function processBlock(words, offset) {\n        this._cipher.encryptBlock(words, offset);\n      }\n    });\n    ECB.Decryptor = ECB.extend({\n      processBlock: function processBlock(words, offset) {\n        this._cipher.decryptBlock(words, offset);\n      }\n    });\n    return ECB;\n  }();\n  return CryptoJS.mode.ECB;\n});\n\n/***/ }),\n\n/***/ 5720:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * Output Feedback block mode.\n   */\n  CryptoJS.mode.OFB = function () {\n    var OFB = CryptoJS.lib.BlockCipherMode.extend();\n    var Encryptor = OFB.Encryptor = OFB.extend({\n      processBlock: function processBlock(words, offset) {\n        // Shortcuts\n        var cipher = this._cipher;\n        var blockSize = cipher.blockSize;\n        var iv = this._iv;\n        var keystream = this._keystream;\n\n        // Generate keystream\n        if (iv) {\n          keystream = this._keystream = iv.slice(0);\n\n          // Remove IV for subsequent blocks\n          this._iv = undefined;\n        }\n        cipher.encryptBlock(keystream, 0);\n\n        // Encrypt\n        for (var i = 0; i < blockSize; i++) {\n          words[offset + i] ^= keystream[i];\n        }\n      }\n    });\n    OFB.Decryptor = Encryptor;\n    return OFB;\n  }();\n  return CryptoJS.mode.OFB;\n});\n\n/***/ }),\n\n/***/ 6362:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * ANSI X.923 padding strategy.\n   */\n  CryptoJS.pad.AnsiX923 = {\n    pad: function pad(data, blockSize) {\n      // Shortcuts\n      var dataSigBytes = data.sigBytes;\n      var blockSizeBytes = blockSize * 4;\n\n      // Count padding bytes\n      var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n      // Compute last byte position\n      var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n      // Pad\n      data.clamp();\n      data.words[lastBytePos >>> 2] |= nPaddingBytes << 24 - lastBytePos % 4 * 8;\n      data.sigBytes += nPaddingBytes;\n    },\n    unpad: function unpad(data) {\n      // Get number of padding bytes from last byte\n      var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n      // Remove padding\n      data.sigBytes -= nPaddingBytes;\n    }\n  };\n  return CryptoJS.pad.Ansix923;\n});\n\n/***/ }),\n\n/***/ 4431:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2222);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * ISO 10126 padding strategy.\n   */\n  CryptoJS.pad.Iso10126 = {\n    pad: function pad(data, blockSize) {\n      // Shortcut\n      var blockSizeBytes = blockSize * 4;\n\n      // Count padding bytes\n      var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n      // Pad\n      data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n    },\n    unpad: function unpad(data) {\n      // Get number of padding bytes from last byte\n      var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n      // Remove padding\n      data.sigBytes -= nPaddingBytes;\n    }\n  };\n  return CryptoJS.pad.Iso10126;\n});\n\n/***/ }),\n\n/***/ 8800:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2222);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * ISO/IEC 9797-1 Padding Method 2.\n   */\n  CryptoJS.pad.Iso97971 = {\n    pad: function pad(data, blockSize) {\n      // Add 0x80 byte\n      data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n      // Zero pad the rest\n      CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n    },\n    unpad: function unpad(data) {\n      // Remove zero padding\n      CryptoJS.pad.ZeroPadding.unpad(data);\n\n      // Remove one more byte -- the 0x80 byte\n      data.sigBytes--;\n    }\n  };\n  return CryptoJS.pad.Iso97971;\n});\n\n/***/ }),\n\n/***/ 649:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * A noop padding strategy.\n   */\n  CryptoJS.pad.NoPadding = {\n    pad: function pad() {},\n    unpad: function unpad() {}\n  };\n  return CryptoJS.pad.NoPadding;\n});\n\n/***/ }),\n\n/***/ 3992:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * Zero padding strategy.\n   */\n  CryptoJS.pad.ZeroPadding = {\n    pad: function pad(data, blockSize) {\n      // Shortcut\n      var blockSizeBytes = blockSize * 4;\n\n      // Pad\n      data.clamp();\n      data.sigBytes += blockSizeBytes - (data.sigBytes % blockSizeBytes || blockSizeBytes);\n    },\n    unpad: function unpad(data) {\n      // Shortcut\n      var dataWords = data.words;\n\n      // Unpad\n      var i = data.sigBytes - 1;\n      for (var i = data.sigBytes - 1; i >= 0; i--) {\n        if (dataWords[i >>> 2] >>> 24 - i % 4 * 8 & 0xff) {\n          data.sigBytes = i + 1;\n          break;\n        }\n      }\n    }\n  };\n  return CryptoJS.pad.ZeroPadding;\n});\n\n/***/ }),\n\n/***/ 3486:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2222);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(9865), __webpack_require__(6727));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var Base = C_lib.Base;\n    var WordArray = C_lib.WordArray;\n    var C_algo = C.algo;\n    var SHA1 = C_algo.SHA1;\n    var HMAC = C_algo.HMAC;\n\n    /**\n     * Password-Based Key Derivation Function 2 algorithm.\n     */\n    var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n       * @property {Hasher} hasher The hasher to use. Default: SHA1\n       * @property {number} iterations The number of iterations to perform. Default: 1\n       */\n      cfg: Base.extend({\n        keySize: 128 / 32,\n        hasher: SHA1,\n        iterations: 1\n      }),\n      /**\n       * Initializes a newly created key derivation function.\n       *\n       * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n       *\n       * @example\n       *\n       *     var kdf = CryptoJS.algo.PBKDF2.create();\n       *     var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n       *     var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n       */\n      init: function init(cfg) {\n        this.cfg = this.cfg.extend(cfg);\n      },\n      /**\n       * Computes the Password-Based Key Derivation Function 2.\n       *\n       * @param {WordArray|string} password The password.\n       * @param {WordArray|string} salt A salt.\n       *\n       * @return {WordArray} The derived key.\n       *\n       * @example\n       *\n       *     var key = kdf.compute(password, salt);\n       */\n      compute: function compute(password, salt) {\n        // Shortcut\n        var cfg = this.cfg;\n\n        // Init HMAC\n        var hmac = HMAC.create(cfg.hasher, password);\n\n        // Initial values\n        var derivedKey = WordArray.create();\n        var blockIndex = WordArray.create([0x00000001]);\n\n        // Shortcuts\n        var derivedKeyWords = derivedKey.words;\n        var blockIndexWords = blockIndex.words;\n        var keySize = cfg.keySize;\n        var iterations = cfg.iterations;\n\n        // Generate key\n        while (derivedKeyWords.length < keySize) {\n          var block = hmac.update(salt).finalize(blockIndex);\n          hmac.reset();\n\n          // Shortcuts\n          var blockWords = block.words;\n          var blockWordsLength = blockWords.length;\n\n          // Iterations\n          var intermediate = block;\n          for (var i = 1; i < iterations; i++) {\n            intermediate = hmac.finalize(intermediate);\n            hmac.reset();\n\n            // Shortcut\n            var intermediateWords = intermediate.words;\n\n            // XOR intermediate with block\n            for (var j = 0; j < blockWordsLength; j++) {\n              blockWords[j] ^= intermediateWords[j];\n            }\n          }\n          derivedKey.concat(block);\n          blockIndexWords[0]++;\n        }\n        derivedKey.sigBytes = keySize * 4;\n        return derivedKey;\n      }\n    });\n\n    /**\n     * Computes the Password-Based Key Derivation Function 2.\n     *\n     * @param {WordArray|string} password The password.\n     * @param {WordArray|string} salt A salt.\n     * @param {Object} cfg (Optional) The configuration options to use for this computation.\n     *\n     * @return {WordArray} The derived key.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var key = CryptoJS.PBKDF2(password, salt);\n     *     var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n     *     var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n     */\n    C.PBKDF2 = function (password, salt, cfg) {\n      return PBKDF2.create(cfg).compute(password, salt);\n    };\n  })();\n  return CryptoJS.PBKDF2;\n});\n\n/***/ }),\n\n/***/ 4363:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(7508), __webpack_require__(3440), __webpack_require__(3839), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var StreamCipher = C_lib.StreamCipher;\n    var C_algo = C.algo;\n\n    // Reusable objects\n    var S = [];\n    var C_ = [];\n    var G = [];\n\n    /**\n     * Rabbit stream cipher algorithm.\n     *\n     * This is a legacy version that neglected to convert the key to little-endian.\n     * This error doesn't affect the cipher's security,\n     * but it does affect its compatibility with other implementations.\n     */\n    var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n      _doReset: function _doReset() {\n        // Shortcuts\n        var K = this._key.words;\n        var iv = this.cfg.iv;\n\n        // Generate initial state values\n        var X = this._X = [K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16];\n\n        // Generate initial counter values\n        var C = this._C = [K[2] << 16 | K[2] >>> 16, K[0] & 0xffff0000 | K[1] & 0x0000ffff, K[3] << 16 | K[3] >>> 16, K[1] & 0xffff0000 | K[2] & 0x0000ffff, K[0] << 16 | K[0] >>> 16, K[2] & 0xffff0000 | K[3] & 0x0000ffff, K[1] << 16 | K[1] >>> 16, K[3] & 0xffff0000 | K[0] & 0x0000ffff];\n\n        // Carry bit\n        this._b = 0;\n\n        // Iterate the system four times\n        for (var i = 0; i < 4; i++) {\n          nextState.call(this);\n        }\n\n        // Modify the counters\n        for (var i = 0; i < 8; i++) {\n          C[i] ^= X[i + 4 & 7];\n        }\n\n        // IV setup\n        if (iv) {\n          // Shortcuts\n          var IV = iv.words;\n          var IV_0 = IV[0];\n          var IV_1 = IV[1];\n\n          // Generate four subvectors\n          var i0 = (IV_0 << 8 | IV_0 >>> 24) & 0x00ff00ff | (IV_0 << 24 | IV_0 >>> 8) & 0xff00ff00;\n          var i2 = (IV_1 << 8 | IV_1 >>> 24) & 0x00ff00ff | (IV_1 << 24 | IV_1 >>> 8) & 0xff00ff00;\n          var i1 = i0 >>> 16 | i2 & 0xffff0000;\n          var i3 = i2 << 16 | i0 & 0x0000ffff;\n\n          // Modify counter values\n          C[0] ^= i0;\n          C[1] ^= i1;\n          C[2] ^= i2;\n          C[3] ^= i3;\n          C[4] ^= i0;\n          C[5] ^= i1;\n          C[6] ^= i2;\n          C[7] ^= i3;\n\n          // Iterate the system four times\n          for (var i = 0; i < 4; i++) {\n            nextState.call(this);\n          }\n        }\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Shortcut\n        var X = this._X;\n\n        // Iterate the system\n        nextState.call(this);\n\n        // Generate four keystream words\n        S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16;\n        S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16;\n        S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16;\n        S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16;\n        for (var i = 0; i < 4; i++) {\n          // Swap endian\n          S[i] = (S[i] << 8 | S[i] >>> 24) & 0x00ff00ff | (S[i] << 24 | S[i] >>> 8) & 0xff00ff00;\n\n          // Encrypt\n          M[offset + i] ^= S[i];\n        }\n      },\n      blockSize: 128 / 32,\n      ivSize: 64 / 32\n    });\n    function nextState() {\n      // Shortcuts\n      var X = this._X;\n      var C = this._C;\n\n      // Save old counter values\n      for (var i = 0; i < 8; i++) {\n        C_[i] = C[i];\n      }\n\n      // Calculate new counter values\n      C[0] = C[0] + 0x4d34d34d + this._b | 0;\n      C[1] = C[1] + 0xd34d34d3 + (C[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0;\n      C[2] = C[2] + 0x34d34d34 + (C[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0;\n      C[3] = C[3] + 0x4d34d34d + (C[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0;\n      C[4] = C[4] + 0xd34d34d3 + (C[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0;\n      C[5] = C[5] + 0x34d34d34 + (C[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0;\n      C[6] = C[6] + 0x4d34d34d + (C[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0;\n      C[7] = C[7] + 0xd34d34d3 + (C[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0;\n      this._b = C[7] >>> 0 < C_[7] >>> 0 ? 1 : 0;\n\n      // Calculate the g-values\n      for (var i = 0; i < 8; i++) {\n        var gx = X[i] + C[i];\n\n        // Construct high and low argument for squaring\n        var ga = gx & 0xffff;\n        var gb = gx >>> 16;\n\n        // Calculate high and low result of squaring\n        var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb;\n        var gl = ((gx & 0xffff0000) * gx | 0) + ((gx & 0x0000ffff) * gx | 0);\n\n        // High XOR low\n        G[i] = gh ^ gl;\n      }\n\n      // Calculate new state values\n      X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0;\n      X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0;\n      X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0;\n      X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0;\n      X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0;\n      X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0;\n      X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0;\n      X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0;\n    }\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n     */\n    C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n  })();\n  return CryptoJS.RabbitLegacy;\n});\n\n/***/ }),\n\n/***/ 5323:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(7508), __webpack_require__(3440), __webpack_require__(3839), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var StreamCipher = C_lib.StreamCipher;\n    var C_algo = C.algo;\n\n    // Reusable objects\n    var S = [];\n    var C_ = [];\n    var G = [];\n\n    /**\n     * Rabbit stream cipher algorithm\n     */\n    var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n      _doReset: function _doReset() {\n        // Shortcuts\n        var K = this._key.words;\n        var iv = this.cfg.iv;\n\n        // Swap endian\n        for (var i = 0; i < 4; i++) {\n          K[i] = (K[i] << 8 | K[i] >>> 24) & 0x00ff00ff | (K[i] << 24 | K[i] >>> 8) & 0xff00ff00;\n        }\n\n        // Generate initial state values\n        var X = this._X = [K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16];\n\n        // Generate initial counter values\n        var C = this._C = [K[2] << 16 | K[2] >>> 16, K[0] & 0xffff0000 | K[1] & 0x0000ffff, K[3] << 16 | K[3] >>> 16, K[1] & 0xffff0000 | K[2] & 0x0000ffff, K[0] << 16 | K[0] >>> 16, K[2] & 0xffff0000 | K[3] & 0x0000ffff, K[1] << 16 | K[1] >>> 16, K[3] & 0xffff0000 | K[0] & 0x0000ffff];\n\n        // Carry bit\n        this._b = 0;\n\n        // Iterate the system four times\n        for (var i = 0; i < 4; i++) {\n          nextState.call(this);\n        }\n\n        // Modify the counters\n        for (var i = 0; i < 8; i++) {\n          C[i] ^= X[i + 4 & 7];\n        }\n\n        // IV setup\n        if (iv) {\n          // Shortcuts\n          var IV = iv.words;\n          var IV_0 = IV[0];\n          var IV_1 = IV[1];\n\n          // Generate four subvectors\n          var i0 = (IV_0 << 8 | IV_0 >>> 24) & 0x00ff00ff | (IV_0 << 24 | IV_0 >>> 8) & 0xff00ff00;\n          var i2 = (IV_1 << 8 | IV_1 >>> 24) & 0x00ff00ff | (IV_1 << 24 | IV_1 >>> 8) & 0xff00ff00;\n          var i1 = i0 >>> 16 | i2 & 0xffff0000;\n          var i3 = i2 << 16 | i0 & 0x0000ffff;\n\n          // Modify counter values\n          C[0] ^= i0;\n          C[1] ^= i1;\n          C[2] ^= i2;\n          C[3] ^= i3;\n          C[4] ^= i0;\n          C[5] ^= i1;\n          C[6] ^= i2;\n          C[7] ^= i3;\n\n          // Iterate the system four times\n          for (var i = 0; i < 4; i++) {\n            nextState.call(this);\n          }\n        }\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Shortcut\n        var X = this._X;\n\n        // Iterate the system\n        nextState.call(this);\n\n        // Generate four keystream words\n        S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16;\n        S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16;\n        S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16;\n        S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16;\n        for (var i = 0; i < 4; i++) {\n          // Swap endian\n          S[i] = (S[i] << 8 | S[i] >>> 24) & 0x00ff00ff | (S[i] << 24 | S[i] >>> 8) & 0xff00ff00;\n\n          // Encrypt\n          M[offset + i] ^= S[i];\n        }\n      },\n      blockSize: 128 / 32,\n      ivSize: 64 / 32\n    });\n    function nextState() {\n      // Shortcuts\n      var X = this._X;\n      var C = this._C;\n\n      // Save old counter values\n      for (var i = 0; i < 8; i++) {\n        C_[i] = C[i];\n      }\n\n      // Calculate new counter values\n      C[0] = C[0] + 0x4d34d34d + this._b | 0;\n      C[1] = C[1] + 0xd34d34d3 + (C[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0;\n      C[2] = C[2] + 0x34d34d34 + (C[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0;\n      C[3] = C[3] + 0x4d34d34d + (C[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0;\n      C[4] = C[4] + 0xd34d34d3 + (C[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0;\n      C[5] = C[5] + 0x34d34d34 + (C[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0;\n      C[6] = C[6] + 0x4d34d34d + (C[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0;\n      C[7] = C[7] + 0xd34d34d3 + (C[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0;\n      this._b = C[7] >>> 0 < C_[7] >>> 0 ? 1 : 0;\n\n      // Calculate the g-values\n      for (var i = 0; i < 8; i++) {\n        var gx = X[i] + C[i];\n\n        // Construct high and low argument for squaring\n        var ga = gx & 0xffff;\n        var gb = gx >>> 16;\n\n        // Calculate high and low result of squaring\n        var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb;\n        var gl = ((gx & 0xffff0000) * gx | 0) + ((gx & 0x0000ffff) * gx | 0);\n\n        // High XOR low\n        G[i] = gh ^ gl;\n      }\n\n      // Calculate new state values\n      X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0;\n      X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0;\n      X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0;\n      X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0;\n      X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0;\n      X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0;\n      X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0;\n      X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0;\n    }\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n     */\n    C.Rabbit = StreamCipher._createHelper(Rabbit);\n  })();\n  return CryptoJS.Rabbit;\n});\n\n/***/ }),\n\n/***/ 4640:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(1539);\n__webpack_require__(8674);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(7508), __webpack_require__(3440), __webpack_require__(3839), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var StreamCipher = C_lib.StreamCipher;\n    var C_algo = C.algo;\n\n    /**\n     * RC4 stream cipher algorithm.\n     */\n    var RC4 = C_algo.RC4 = StreamCipher.extend({\n      _doReset: function _doReset() {\n        // Shortcuts\n        var key = this._key;\n        var keyWords = key.words;\n        var keySigBytes = key.sigBytes;\n\n        // Init sbox\n        var S = this._S = [];\n        for (var i = 0; i < 256; i++) {\n          S[i] = i;\n        }\n\n        // Key setup\n        for (var i = 0, j = 0; i < 256; i++) {\n          var keyByteIndex = i % keySigBytes;\n          var keyByte = keyWords[keyByteIndex >>> 2] >>> 24 - keyByteIndex % 4 * 8 & 0xff;\n          j = (j + S[i] + keyByte) % 256;\n\n          // Swap\n          var t = S[i];\n          S[i] = S[j];\n          S[j] = t;\n        }\n\n        // Counters\n        this._i = this._j = 0;\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        M[offset] ^= generateKeystreamWord.call(this);\n      },\n      keySize: 256 / 32,\n      ivSize: 0\n    });\n    function generateKeystreamWord() {\n      // Shortcuts\n      var S = this._S;\n      var i = this._i;\n      var j = this._j;\n\n      // Generate keystream word\n      var keystreamWord = 0;\n      for (var n = 0; n < 4; n++) {\n        i = (i + 1) % 256;\n        j = (j + S[i]) % 256;\n\n        // Swap\n        var t = S[i];\n        S[i] = S[j];\n        S[j] = t;\n        keystreamWord |= S[(S[i] + S[j]) % 256] << 24 - n * 8;\n      }\n\n      // Update counters\n      this._i = i;\n      this._j = j;\n      return keystreamWord;\n    }\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n     */\n    C.RC4 = StreamCipher._createHelper(RC4);\n\n    /**\n     * Modified RC4 stream cipher algorithm.\n     */\n    var RC4Drop = C_algo.RC4Drop = RC4.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {number} drop The number of keystream words to drop. Default 192\n       */\n      cfg: RC4.cfg.extend({\n        drop: 192\n      }),\n      _doReset: function _doReset() {\n        RC4._doReset.call(this);\n\n        // Drop\n        for (var i = this.cfg.drop; i > 0; i--) {\n          generateKeystreamWord.call(this);\n        }\n      }\n    });\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n     */\n    C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n  })();\n  return CryptoJS.RC4;\n});\n\n/***/ }),\n\n/***/ 8714:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /** @preserve\n  (c) 2012 by Cédric Mesnil. All rights reserved.\n  \tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n  \t    - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n      - 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.\n  \tTHIS 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.\n  */\n\n  (function (Math) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var Hasher = C_lib.Hasher;\n    var C_algo = C.algo;\n\n    // Constants table\n    var _zl = WordArray.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n    var _zr = WordArray.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n    var _sl = WordArray.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]);\n    var _sr = WordArray.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]);\n    var _hl = WordArray.create([0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n    var _hr = WordArray.create([0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n    /**\n     * RIPEMD160 hash algorithm.\n     */\n    var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n      _doReset: function _doReset() {\n        this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Swap endian\n        for (var i = 0; i < 16; i++) {\n          // Shortcuts\n          var offset_i = offset + i;\n          var M_offset_i = M[offset_i];\n\n          // Swap\n          M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 0x00ff00ff | (M_offset_i << 24 | M_offset_i >>> 8) & 0xff00ff00;\n        }\n        // Shortcut\n        var H = this._hash.words;\n        var hl = _hl.words;\n        var hr = _hr.words;\n        var zl = _zl.words;\n        var zr = _zr.words;\n        var sl = _sl.words;\n        var sr = _sr.words;\n\n        // Working variables\n        var al, bl, cl, dl, el;\n        var ar, br, cr, dr, er;\n        ar = al = H[0];\n        br = bl = H[1];\n        cr = cl = H[2];\n        dr = dl = H[3];\n        er = el = H[4];\n        // Computation\n        var t;\n        for (var i = 0; i < 80; i += 1) {\n          t = al + M[offset + zl[i]] | 0;\n          if (i < 16) {\n            t += f1(bl, cl, dl) + hl[0];\n          } else if (i < 32) {\n            t += f2(bl, cl, dl) + hl[1];\n          } else if (i < 48) {\n            t += f3(bl, cl, dl) + hl[2];\n          } else if (i < 64) {\n            t += f4(bl, cl, dl) + hl[3];\n          } else {\n            // if (i<80) {\n            t += f5(bl, cl, dl) + hl[4];\n          }\n          t = t | 0;\n          t = rotl(t, sl[i]);\n          t = t + el | 0;\n          al = el;\n          el = dl;\n          dl = rotl(cl, 10);\n          cl = bl;\n          bl = t;\n          t = ar + M[offset + zr[i]] | 0;\n          if (i < 16) {\n            t += f5(br, cr, dr) + hr[0];\n          } else if (i < 32) {\n            t += f4(br, cr, dr) + hr[1];\n          } else if (i < 48) {\n            t += f3(br, cr, dr) + hr[2];\n          } else if (i < 64) {\n            t += f2(br, cr, dr) + hr[3];\n          } else {\n            // if (i<80) {\n            t += f1(br, cr, dr) + hr[4];\n          }\n          t = t | 0;\n          t = rotl(t, sr[i]);\n          t = t + er | 0;\n          ar = er;\n          er = dr;\n          dr = rotl(cr, 10);\n          cr = br;\n          br = t;\n        }\n        // Intermediate hash value\n        t = H[1] + cl + dr | 0;\n        H[1] = H[2] + dl + er | 0;\n        H[2] = H[3] + el + ar | 0;\n        H[3] = H[4] + al + br | 0;\n        H[4] = H[0] + bl + cr | 0;\n        H[0] = t;\n      },\n      _doFinalize: function _doFinalize() {\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var nBitsTotal = this._nDataBytes * 8;\n        var nBitsLeft = data.sigBytes * 8;\n\n        // Add padding\n        dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotal << 8 | nBitsTotal >>> 24) & 0x00ff00ff | (nBitsTotal << 24 | nBitsTotal >>> 8) & 0xff00ff00;\n        data.sigBytes = (dataWords.length + 1) * 4;\n\n        // Hash final blocks\n        this._process();\n\n        // Shortcuts\n        var hash = this._hash;\n        var H = hash.words;\n\n        // Swap endian\n        for (var i = 0; i < 5; i++) {\n          // Shortcut\n          var H_i = H[i];\n\n          // Swap\n          H[i] = (H_i << 8 | H_i >>> 24) & 0x00ff00ff | (H_i << 24 | H_i >>> 8) & 0xff00ff00;\n        }\n\n        // Return final computed hash\n        return hash;\n      },\n      clone: function clone() {\n        var clone = Hasher.clone.call(this);\n        clone._hash = this._hash.clone();\n        return clone;\n      }\n    });\n    function f1(x, y, z) {\n      return x ^ y ^ z;\n    }\n    function f2(x, y, z) {\n      return x & y | ~x & z;\n    }\n    function f3(x, y, z) {\n      return (x | ~y) ^ z;\n    }\n    function f4(x, y, z) {\n      return x & z | y & ~z;\n    }\n    function f5(x, y, z) {\n      return x ^ (y | ~z);\n    }\n    function rotl(x, n) {\n      return x << n | x >>> 32 - n;\n    }\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.RIPEMD160('message');\n     *     var hash = CryptoJS.RIPEMD160(wordArray);\n     */\n    C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacRIPEMD160(message, key);\n     */\n    C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n  })(Math);\n  return CryptoJS.RIPEMD160;\n});\n\n/***/ }),\n\n/***/ 9865:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var Hasher = C_lib.Hasher;\n    var C_algo = C.algo;\n\n    // Reusable object\n    var W = [];\n\n    /**\n     * SHA-1 hash algorithm.\n     */\n    var SHA1 = C_algo.SHA1 = Hasher.extend({\n      _doReset: function _doReset() {\n        this._hash = new WordArray.init([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]);\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Shortcut\n        var H = this._hash.words;\n\n        // Working variables\n        var a = H[0];\n        var b = H[1];\n        var c = H[2];\n        var d = H[3];\n        var e = H[4];\n\n        // Computation\n        for (var i = 0; i < 80; i++) {\n          if (i < 16) {\n            W[i] = M[offset + i] | 0;\n          } else {\n            var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n            W[i] = n << 1 | n >>> 31;\n          }\n          var t = (a << 5 | a >>> 27) + e + W[i];\n          if (i < 20) {\n            t += (b & c | ~b & d) + 0x5a827999;\n          } else if (i < 40) {\n            t += (b ^ c ^ d) + 0x6ed9eba1;\n          } else if (i < 60) {\n            t += (b & c | b & d | c & d) - 0x70e44324;\n          } else /* if (i < 80) */{\n              t += (b ^ c ^ d) - 0x359d3e2a;\n            }\n          e = d;\n          d = c;\n          c = b << 30 | b >>> 2;\n          b = a;\n          a = t;\n        }\n\n        // Intermediate hash value\n        H[0] = H[0] + a | 0;\n        H[1] = H[1] + b | 0;\n        H[2] = H[2] + c | 0;\n        H[3] = H[3] + d | 0;\n        H[4] = H[4] + e | 0;\n      },\n      _doFinalize: function _doFinalize() {\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var nBitsTotal = this._nDataBytes * 8;\n        var nBitsLeft = data.sigBytes * 8;\n\n        // Add padding\n        dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n        data.sigBytes = dataWords.length * 4;\n\n        // Hash final blocks\n        this._process();\n\n        // Return final computed hash\n        return this._hash;\n      },\n      clone: function clone() {\n        var clone = Hasher.clone.call(this);\n        clone._hash = this._hash.clone();\n        return clone;\n      }\n    });\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.SHA1('message');\n     *     var hash = CryptoJS.SHA1(wordArray);\n     */\n    C.SHA1 = Hasher._createHelper(SHA1);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacSHA1(message, key);\n     */\n    C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n  })();\n  return CryptoJS.SHA1;\n});\n\n/***/ }),\n\n/***/ 6876:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(8921));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var C_algo = C.algo;\n    var SHA256 = C_algo.SHA256;\n\n    /**\n     * SHA-224 hash algorithm.\n     */\n    var SHA224 = C_algo.SHA224 = SHA256.extend({\n      _doReset: function _doReset() {\n        this._hash = new WordArray.init([0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4]);\n      },\n      _doFinalize: function _doFinalize() {\n        var hash = SHA256._doFinalize.call(this);\n        hash.sigBytes -= 4;\n        return hash;\n      }\n    });\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.SHA224('message');\n     *     var hash = CryptoJS.SHA224(wordArray);\n     */\n    C.SHA224 = SHA256._createHelper(SHA224);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacSHA224(message, key);\n     */\n    C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n  })();\n  return CryptoJS.SHA224;\n});\n\n/***/ }),\n\n/***/ 8921:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function (Math) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var Hasher = C_lib.Hasher;\n    var C_algo = C.algo;\n\n    // Initialization and round constants tables\n    var H = [];\n    var K = [];\n\n    // Compute constants\n    (function () {\n      function isPrime(n) {\n        var sqrtN = Math.sqrt(n);\n        for (var factor = 2; factor <= sqrtN; factor++) {\n          if (!(n % factor)) {\n            return false;\n          }\n        }\n        return true;\n      }\n      function getFractionalBits(n) {\n        return (n - (n | 0)) * 0x100000000 | 0;\n      }\n      var n = 2;\n      var nPrime = 0;\n      while (nPrime < 64) {\n        if (isPrime(n)) {\n          if (nPrime < 8) {\n            H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n          }\n          K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n          nPrime++;\n        }\n        n++;\n      }\n    })();\n\n    // Reusable object\n    var W = [];\n\n    /**\n     * SHA-256 hash algorithm.\n     */\n    var SHA256 = C_algo.SHA256 = Hasher.extend({\n      _doReset: function _doReset() {\n        this._hash = new WordArray.init(H.slice(0));\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Shortcut\n        var H = this._hash.words;\n\n        // Working variables\n        var a = H[0];\n        var b = H[1];\n        var c = H[2];\n        var d = H[3];\n        var e = H[4];\n        var f = H[5];\n        var g = H[6];\n        var h = H[7];\n\n        // Computation\n        for (var i = 0; i < 64; i++) {\n          if (i < 16) {\n            W[i] = M[offset + i] | 0;\n          } else {\n            var gamma0x = W[i - 15];\n            var gamma0 = (gamma0x << 25 | gamma0x >>> 7) ^ (gamma0x << 14 | gamma0x >>> 18) ^ gamma0x >>> 3;\n            var gamma1x = W[i - 2];\n            var gamma1 = (gamma1x << 15 | gamma1x >>> 17) ^ (gamma1x << 13 | gamma1x >>> 19) ^ gamma1x >>> 10;\n            W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n          }\n          var ch = e & f ^ ~e & g;\n          var maj = a & b ^ a & c ^ b & c;\n          var sigma0 = (a << 30 | a >>> 2) ^ (a << 19 | a >>> 13) ^ (a << 10 | a >>> 22);\n          var sigma1 = (e << 26 | e >>> 6) ^ (e << 21 | e >>> 11) ^ (e << 7 | e >>> 25);\n          var t1 = h + sigma1 + ch + K[i] + W[i];\n          var t2 = sigma0 + maj;\n          h = g;\n          g = f;\n          f = e;\n          e = d + t1 | 0;\n          d = c;\n          c = b;\n          b = a;\n          a = t1 + t2 | 0;\n        }\n\n        // Intermediate hash value\n        H[0] = H[0] + a | 0;\n        H[1] = H[1] + b | 0;\n        H[2] = H[2] + c | 0;\n        H[3] = H[3] + d | 0;\n        H[4] = H[4] + e | 0;\n        H[5] = H[5] + f | 0;\n        H[6] = H[6] + g | 0;\n        H[7] = H[7] + h | 0;\n      },\n      _doFinalize: function _doFinalize() {\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var nBitsTotal = this._nDataBytes * 8;\n        var nBitsLeft = data.sigBytes * 8;\n\n        // Add padding\n        dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n        data.sigBytes = dataWords.length * 4;\n\n        // Hash final blocks\n        this._process();\n\n        // Return final computed hash\n        return this._hash;\n      },\n      clone: function clone() {\n        var clone = Hasher.clone.call(this);\n        clone._hash = this._hash.clone();\n        return clone;\n      }\n    });\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.SHA256('message');\n     *     var hash = CryptoJS.SHA256(wordArray);\n     */\n    C.SHA256 = Hasher._createHelper(SHA256);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacSHA256(message, key);\n     */\n    C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n  })(Math);\n  return CryptoJS.SHA256;\n});\n\n/***/ }),\n\n/***/ 8342:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(2601));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function (Math) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var Hasher = C_lib.Hasher;\n    var C_x64 = C.x64;\n    var X64Word = C_x64.Word;\n    var C_algo = C.algo;\n\n    // Constants tables\n    var RHO_OFFSETS = [];\n    var PI_INDEXES = [];\n    var ROUND_CONSTANTS = [];\n\n    // Compute Constants\n    (function () {\n      // Compute rho offset constants\n      var x = 1,\n        y = 0;\n      for (var t = 0; t < 24; t++) {\n        RHO_OFFSETS[x + 5 * y] = (t + 1) * (t + 2) / 2 % 64;\n        var newX = y % 5;\n        var newY = (2 * x + 3 * y) % 5;\n        x = newX;\n        y = newY;\n      }\n\n      // Compute pi index constants\n      for (var x = 0; x < 5; x++) {\n        for (var y = 0; y < 5; y++) {\n          PI_INDEXES[x + 5 * y] = y + (2 * x + 3 * y) % 5 * 5;\n        }\n      }\n\n      // Compute round constants\n      var LFSR = 0x01;\n      for (var i = 0; i < 24; i++) {\n        var roundConstantMsw = 0;\n        var roundConstantLsw = 0;\n        for (var j = 0; j < 7; j++) {\n          if (LFSR & 0x01) {\n            var bitPosition = (1 << j) - 1;\n            if (bitPosition < 32) {\n              roundConstantLsw ^= 1 << bitPosition;\n            } else /* if (bitPosition >= 32) */{\n                roundConstantMsw ^= 1 << bitPosition - 32;\n              }\n          }\n\n          // Compute next LFSR\n          if (LFSR & 0x80) {\n            // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n            LFSR = LFSR << 1 ^ 0x71;\n          } else {\n            LFSR <<= 1;\n          }\n        }\n        ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n      }\n    })();\n\n    // Reusable objects for temporary values\n    var T = [];\n    (function () {\n      for (var i = 0; i < 25; i++) {\n        T[i] = X64Word.create();\n      }\n    })();\n\n    /**\n     * SHA-3 hash algorithm.\n     */\n    var SHA3 = C_algo.SHA3 = Hasher.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {number} outputLength\n       *   The desired number of bits in the output hash.\n       *   Only values permitted are: 224, 256, 384, 512.\n       *   Default: 512\n       */\n      cfg: Hasher.cfg.extend({\n        outputLength: 512\n      }),\n      _doReset: function _doReset() {\n        var state = this._state = [];\n        for (var i = 0; i < 25; i++) {\n          state[i] = new X64Word.init();\n        }\n        this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Shortcuts\n        var state = this._state;\n        var nBlockSizeLanes = this.blockSize / 2;\n\n        // Absorb\n        for (var i = 0; i < nBlockSizeLanes; i++) {\n          // Shortcuts\n          var M2i = M[offset + 2 * i];\n          var M2i1 = M[offset + 2 * i + 1];\n\n          // Swap endian\n          M2i = (M2i << 8 | M2i >>> 24) & 0x00ff00ff | (M2i << 24 | M2i >>> 8) & 0xff00ff00;\n          M2i1 = (M2i1 << 8 | M2i1 >>> 24) & 0x00ff00ff | (M2i1 << 24 | M2i1 >>> 8) & 0xff00ff00;\n\n          // Absorb message into state\n          var lane = state[i];\n          lane.high ^= M2i1;\n          lane.low ^= M2i;\n        }\n\n        // Rounds\n        for (var round = 0; round < 24; round++) {\n          // Theta\n          for (var x = 0; x < 5; x++) {\n            // Mix column lanes\n            var tMsw = 0,\n              tLsw = 0;\n            for (var y = 0; y < 5; y++) {\n              var lane = state[x + 5 * y];\n              tMsw ^= lane.high;\n              tLsw ^= lane.low;\n            }\n\n            // Temporary values\n            var Tx = T[x];\n            Tx.high = tMsw;\n            Tx.low = tLsw;\n          }\n          for (var x = 0; x < 5; x++) {\n            // Shortcuts\n            var Tx4 = T[(x + 4) % 5];\n            var Tx1 = T[(x + 1) % 5];\n            var Tx1Msw = Tx1.high;\n            var Tx1Lsw = Tx1.low;\n\n            // Mix surrounding columns\n            var tMsw = Tx4.high ^ (Tx1Msw << 1 | Tx1Lsw >>> 31);\n            var tLsw = Tx4.low ^ (Tx1Lsw << 1 | Tx1Msw >>> 31);\n            for (var y = 0; y < 5; y++) {\n              var lane = state[x + 5 * y];\n              lane.high ^= tMsw;\n              lane.low ^= tLsw;\n            }\n          }\n\n          // Rho Pi\n          for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n            var tMsw;\n            var tLsw;\n\n            // Shortcuts\n            var lane = state[laneIndex];\n            var laneMsw = lane.high;\n            var laneLsw = lane.low;\n            var rhoOffset = RHO_OFFSETS[laneIndex];\n\n            // Rotate lanes\n            if (rhoOffset < 32) {\n              tMsw = laneMsw << rhoOffset | laneLsw >>> 32 - rhoOffset;\n              tLsw = laneLsw << rhoOffset | laneMsw >>> 32 - rhoOffset;\n            } else /* if (rhoOffset >= 32) */{\n                tMsw = laneLsw << rhoOffset - 32 | laneMsw >>> 64 - rhoOffset;\n                tLsw = laneMsw << rhoOffset - 32 | laneLsw >>> 64 - rhoOffset;\n              }\n\n            // Transpose lanes\n            var TPiLane = T[PI_INDEXES[laneIndex]];\n            TPiLane.high = tMsw;\n            TPiLane.low = tLsw;\n          }\n\n          // Rho pi at x = y = 0\n          var T0 = T[0];\n          var state0 = state[0];\n          T0.high = state0.high;\n          T0.low = state0.low;\n\n          // Chi\n          for (var x = 0; x < 5; x++) {\n            for (var y = 0; y < 5; y++) {\n              // Shortcuts\n              var laneIndex = x + 5 * y;\n              var lane = state[laneIndex];\n              var TLane = T[laneIndex];\n              var Tx1Lane = T[(x + 1) % 5 + 5 * y];\n              var Tx2Lane = T[(x + 2) % 5 + 5 * y];\n\n              // Mix rows\n              lane.high = TLane.high ^ ~Tx1Lane.high & Tx2Lane.high;\n              lane.low = TLane.low ^ ~Tx1Lane.low & Tx2Lane.low;\n            }\n          }\n\n          // Iota\n          var lane = state[0];\n          var roundConstant = ROUND_CONSTANTS[round];\n          lane.high ^= roundConstant.high;\n          lane.low ^= roundConstant.low;\n        }\n      },\n      _doFinalize: function _doFinalize() {\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var nBitsTotal = this._nDataBytes * 8;\n        var nBitsLeft = data.sigBytes * 8;\n        var blockSizeBits = this.blockSize * 32;\n\n        // Add padding\n        dataWords[nBitsLeft >>> 5] |= 0x1 << 24 - nBitsLeft % 32;\n        dataWords[(Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits >>> 5) - 1] |= 0x80;\n        data.sigBytes = dataWords.length * 4;\n\n        // Hash final blocks\n        this._process();\n\n        // Shortcuts\n        var state = this._state;\n        var outputLengthBytes = this.cfg.outputLength / 8;\n        var outputLengthLanes = outputLengthBytes / 8;\n\n        // Squeeze\n        var hashWords = [];\n        for (var i = 0; i < outputLengthLanes; i++) {\n          // Shortcuts\n          var lane = state[i];\n          var laneMsw = lane.high;\n          var laneLsw = lane.low;\n\n          // Swap endian\n          laneMsw = (laneMsw << 8 | laneMsw >>> 24) & 0x00ff00ff | (laneMsw << 24 | laneMsw >>> 8) & 0xff00ff00;\n          laneLsw = (laneLsw << 8 | laneLsw >>> 24) & 0x00ff00ff | (laneLsw << 24 | laneLsw >>> 8) & 0xff00ff00;\n\n          // Squeeze state to retrieve hash\n          hashWords.push(laneLsw);\n          hashWords.push(laneMsw);\n        }\n\n        // Return final computed hash\n        return new WordArray.init(hashWords, outputLengthBytes);\n      },\n      clone: function clone() {\n        var clone = Hasher.clone.call(this);\n        var state = clone._state = this._state.slice(0);\n        for (var i = 0; i < 25; i++) {\n          state[i] = state[i].clone();\n        }\n        return clone;\n      }\n    });\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.SHA3('message');\n     *     var hash = CryptoJS.SHA3(wordArray);\n     */\n    C.SHA3 = Hasher._createHelper(SHA3);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacSHA3(message, key);\n     */\n    C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n  })(Math);\n  return CryptoJS.SHA3;\n});\n\n/***/ }),\n\n/***/ 8122:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(2601), __webpack_require__(7991));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_x64 = C.x64;\n    var X64Word = C_x64.Word;\n    var X64WordArray = C_x64.WordArray;\n    var C_algo = C.algo;\n    var SHA512 = C_algo.SHA512;\n\n    /**\n     * SHA-384 hash algorithm.\n     */\n    var SHA384 = C_algo.SHA384 = SHA512.extend({\n      _doReset: function _doReset() {\n        this._hash = new X64WordArray.init([new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)]);\n      },\n      _doFinalize: function _doFinalize() {\n        var hash = SHA512._doFinalize.call(this);\n        hash.sigBytes -= 16;\n        return hash;\n      }\n    });\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.SHA384('message');\n     *     var hash = CryptoJS.SHA384(wordArray);\n     */\n    C.SHA384 = SHA512._createHelper(SHA384);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacSHA384(message, key);\n     */\n    C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n  })();\n  return CryptoJS.SHA384;\n});\n\n/***/ }),\n\n/***/ 7991:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(2601));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var Hasher = C_lib.Hasher;\n    var C_x64 = C.x64;\n    var X64Word = C_x64.Word;\n    var X64WordArray = C_x64.WordArray;\n    var C_algo = C.algo;\n    function X64Word_create() {\n      return X64Word.create.apply(X64Word, arguments);\n    }\n\n    // Constants\n    var K = [X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)];\n\n    // Reusable objects\n    var W = [];\n    (function () {\n      for (var i = 0; i < 80; i++) {\n        W[i] = X64Word_create();\n      }\n    })();\n\n    /**\n     * SHA-512 hash algorithm.\n     */\n    var SHA512 = C_algo.SHA512 = Hasher.extend({\n      _doReset: function _doReset() {\n        this._hash = new X64WordArray.init([new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)]);\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Shortcuts\n        var H = this._hash.words;\n        var H0 = H[0];\n        var H1 = H[1];\n        var H2 = H[2];\n        var H3 = H[3];\n        var H4 = H[4];\n        var H5 = H[5];\n        var H6 = H[6];\n        var H7 = H[7];\n        var H0h = H0.high;\n        var H0l = H0.low;\n        var H1h = H1.high;\n        var H1l = H1.low;\n        var H2h = H2.high;\n        var H2l = H2.low;\n        var H3h = H3.high;\n        var H3l = H3.low;\n        var H4h = H4.high;\n        var H4l = H4.low;\n        var H5h = H5.high;\n        var H5l = H5.low;\n        var H6h = H6.high;\n        var H6l = H6.low;\n        var H7h = H7.high;\n        var H7l = H7.low;\n\n        // Working variables\n        var ah = H0h;\n        var al = H0l;\n        var bh = H1h;\n        var bl = H1l;\n        var ch = H2h;\n        var cl = H2l;\n        var dh = H3h;\n        var dl = H3l;\n        var eh = H4h;\n        var el = H4l;\n        var fh = H5h;\n        var fl = H5l;\n        var gh = H6h;\n        var gl = H6l;\n        var hh = H7h;\n        var hl = H7l;\n\n        // Rounds\n        for (var i = 0; i < 80; i++) {\n          var Wil;\n          var Wih;\n\n          // Shortcut\n          var Wi = W[i];\n\n          // Extend message\n          if (i < 16) {\n            Wih = Wi.high = M[offset + i * 2] | 0;\n            Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n          } else {\n            // Gamma0\n            var gamma0x = W[i - 15];\n            var gamma0xh = gamma0x.high;\n            var gamma0xl = gamma0x.low;\n            var gamma0h = (gamma0xh >>> 1 | gamma0xl << 31) ^ (gamma0xh >>> 8 | gamma0xl << 24) ^ gamma0xh >>> 7;\n            var gamma0l = (gamma0xl >>> 1 | gamma0xh << 31) ^ (gamma0xl >>> 8 | gamma0xh << 24) ^ (gamma0xl >>> 7 | gamma0xh << 25);\n\n            // Gamma1\n            var gamma1x = W[i - 2];\n            var gamma1xh = gamma1x.high;\n            var gamma1xl = gamma1x.low;\n            var gamma1h = (gamma1xh >>> 19 | gamma1xl << 13) ^ (gamma1xh << 3 | gamma1xl >>> 29) ^ gamma1xh >>> 6;\n            var gamma1l = (gamma1xl >>> 19 | gamma1xh << 13) ^ (gamma1xl << 3 | gamma1xh >>> 29) ^ (gamma1xl >>> 6 | gamma1xh << 26);\n\n            // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n            var Wi7 = W[i - 7];\n            var Wi7h = Wi7.high;\n            var Wi7l = Wi7.low;\n            var Wi16 = W[i - 16];\n            var Wi16h = Wi16.high;\n            var Wi16l = Wi16.low;\n            Wil = gamma0l + Wi7l;\n            Wih = gamma0h + Wi7h + (Wil >>> 0 < gamma0l >>> 0 ? 1 : 0);\n            Wil = Wil + gamma1l;\n            Wih = Wih + gamma1h + (Wil >>> 0 < gamma1l >>> 0 ? 1 : 0);\n            Wil = Wil + Wi16l;\n            Wih = Wih + Wi16h + (Wil >>> 0 < Wi16l >>> 0 ? 1 : 0);\n            Wi.high = Wih;\n            Wi.low = Wil;\n          }\n          var chh = eh & fh ^ ~eh & gh;\n          var chl = el & fl ^ ~el & gl;\n          var majh = ah & bh ^ ah & ch ^ bh & ch;\n          var majl = al & bl ^ al & cl ^ bl & cl;\n          var sigma0h = (ah >>> 28 | al << 4) ^ (ah << 30 | al >>> 2) ^ (ah << 25 | al >>> 7);\n          var sigma0l = (al >>> 28 | ah << 4) ^ (al << 30 | ah >>> 2) ^ (al << 25 | ah >>> 7);\n          var sigma1h = (eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9);\n          var sigma1l = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9);\n\n          // t1 = h + sigma1 + ch + K[i] + W[i]\n          var Ki = K[i];\n          var Kih = Ki.high;\n          var Kil = Ki.low;\n          var t1l = hl + sigma1l;\n          var t1h = hh + sigma1h + (t1l >>> 0 < hl >>> 0 ? 1 : 0);\n          var t1l = t1l + chl;\n          var t1h = t1h + chh + (t1l >>> 0 < chl >>> 0 ? 1 : 0);\n          var t1l = t1l + Kil;\n          var t1h = t1h + Kih + (t1l >>> 0 < Kil >>> 0 ? 1 : 0);\n          var t1l = t1l + Wil;\n          var t1h = t1h + Wih + (t1l >>> 0 < Wil >>> 0 ? 1 : 0);\n\n          // t2 = sigma0 + maj\n          var t2l = sigma0l + majl;\n          var t2h = sigma0h + majh + (t2l >>> 0 < sigma0l >>> 0 ? 1 : 0);\n\n          // Update working variables\n          hh = gh;\n          hl = gl;\n          gh = fh;\n          gl = fl;\n          fh = eh;\n          fl = el;\n          el = dl + t1l | 0;\n          eh = dh + t1h + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;\n          dh = ch;\n          dl = cl;\n          ch = bh;\n          cl = bl;\n          bh = ah;\n          bl = al;\n          al = t1l + t2l | 0;\n          ah = t1h + t2h + (al >>> 0 < t1l >>> 0 ? 1 : 0) | 0;\n        }\n\n        // Intermediate hash value\n        H0l = H0.low = H0l + al;\n        H0.high = H0h + ah + (H0l >>> 0 < al >>> 0 ? 1 : 0);\n        H1l = H1.low = H1l + bl;\n        H1.high = H1h + bh + (H1l >>> 0 < bl >>> 0 ? 1 : 0);\n        H2l = H2.low = H2l + cl;\n        H2.high = H2h + ch + (H2l >>> 0 < cl >>> 0 ? 1 : 0);\n        H3l = H3.low = H3l + dl;\n        H3.high = H3h + dh + (H3l >>> 0 < dl >>> 0 ? 1 : 0);\n        H4l = H4.low = H4l + el;\n        H4.high = H4h + eh + (H4l >>> 0 < el >>> 0 ? 1 : 0);\n        H5l = H5.low = H5l + fl;\n        H5.high = H5h + fh + (H5l >>> 0 < fl >>> 0 ? 1 : 0);\n        H6l = H6.low = H6l + gl;\n        H6.high = H6h + gh + (H6l >>> 0 < gl >>> 0 ? 1 : 0);\n        H7l = H7.low = H7l + hl;\n        H7.high = H7h + hh + (H7l >>> 0 < hl >>> 0 ? 1 : 0);\n      },\n      _doFinalize: function _doFinalize() {\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var nBitsTotal = this._nDataBytes * 8;\n        var nBitsLeft = data.sigBytes * 8;\n\n        // Add padding\n        dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n        dataWords[(nBitsLeft + 128 >>> 10 << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n        dataWords[(nBitsLeft + 128 >>> 10 << 5) + 31] = nBitsTotal;\n        data.sigBytes = dataWords.length * 4;\n\n        // Hash final blocks\n        this._process();\n\n        // Convert hash to 32-bit word array before returning\n        var hash = this._hash.toX32();\n\n        // Return final computed hash\n        return hash;\n      },\n      clone: function clone() {\n        var clone = Hasher.clone.call(this);\n        clone._hash = this._hash.clone();\n        return clone;\n      },\n      blockSize: 1024 / 32\n    });\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.SHA512('message');\n     *     var hash = CryptoJS.SHA512(wordArray);\n     */\n    C.SHA512 = Hasher._createHelper(SHA512);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacSHA512(message, key);\n     */\n    C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n  })();\n  return CryptoJS.SHA512;\n});\n\n/***/ }),\n\n/***/ 8437:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(7508), __webpack_require__(3440), __webpack_require__(3839), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var BlockCipher = C_lib.BlockCipher;\n    var C_algo = C.algo;\n\n    // Permuted Choice 1 constants\n    var PC1 = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4];\n\n    // Permuted Choice 2 constants\n    var PC2 = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32];\n\n    // Cumulative bit shift constants\n    var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n    // SBOXes and round permutation constants\n    var SBOX_P = [{\n      0x0: 0x808200,\n      0x10000000: 0x8000,\n      0x20000000: 0x808002,\n      0x30000000: 0x2,\n      0x40000000: 0x200,\n      0x50000000: 0x808202,\n      0x60000000: 0x800202,\n      0x70000000: 0x800000,\n      0x80000000: 0x202,\n      0x90000000: 0x800200,\n      0xa0000000: 0x8200,\n      0xb0000000: 0x808000,\n      0xc0000000: 0x8002,\n      0xd0000000: 0x800002,\n      0xe0000000: 0x0,\n      0xf0000000: 0x8202,\n      0x8000000: 0x0,\n      0x18000000: 0x808202,\n      0x28000000: 0x8202,\n      0x38000000: 0x8000,\n      0x48000000: 0x808200,\n      0x58000000: 0x200,\n      0x68000000: 0x808002,\n      0x78000000: 0x2,\n      0x88000000: 0x800200,\n      0x98000000: 0x8200,\n      0xa8000000: 0x808000,\n      0xb8000000: 0x800202,\n      0xc8000000: 0x800002,\n      0xd8000000: 0x8002,\n      0xe8000000: 0x202,\n      0xf8000000: 0x800000,\n      0x1: 0x8000,\n      0x10000001: 0x2,\n      0x20000001: 0x808200,\n      0x30000001: 0x800000,\n      0x40000001: 0x808002,\n      0x50000001: 0x8200,\n      0x60000001: 0x200,\n      0x70000001: 0x800202,\n      0x80000001: 0x808202,\n      0x90000001: 0x808000,\n      0xa0000001: 0x800002,\n      0xb0000001: 0x8202,\n      0xc0000001: 0x202,\n      0xd0000001: 0x800200,\n      0xe0000001: 0x8002,\n      0xf0000001: 0x0,\n      0x8000001: 0x808202,\n      0x18000001: 0x808000,\n      0x28000001: 0x800000,\n      0x38000001: 0x200,\n      0x48000001: 0x8000,\n      0x58000001: 0x800002,\n      0x68000001: 0x2,\n      0x78000001: 0x8202,\n      0x88000001: 0x8002,\n      0x98000001: 0x800202,\n      0xa8000001: 0x202,\n      0xb8000001: 0x808200,\n      0xc8000001: 0x800200,\n      0xd8000001: 0x0,\n      0xe8000001: 0x8200,\n      0xf8000001: 0x808002\n    }, {\n      0x0: 0x40084010,\n      0x1000000: 0x4000,\n      0x2000000: 0x80000,\n      0x3000000: 0x40080010,\n      0x4000000: 0x40000010,\n      0x5000000: 0x40084000,\n      0x6000000: 0x40004000,\n      0x7000000: 0x10,\n      0x8000000: 0x84000,\n      0x9000000: 0x40004010,\n      0xa000000: 0x40000000,\n      0xb000000: 0x84010,\n      0xc000000: 0x80010,\n      0xd000000: 0x0,\n      0xe000000: 0x4010,\n      0xf000000: 0x40080000,\n      0x800000: 0x40004000,\n      0x1800000: 0x84010,\n      0x2800000: 0x10,\n      0x3800000: 0x40004010,\n      0x4800000: 0x40084010,\n      0x5800000: 0x40000000,\n      0x6800000: 0x80000,\n      0x7800000: 0x40080010,\n      0x8800000: 0x80010,\n      0x9800000: 0x0,\n      0xa800000: 0x4000,\n      0xb800000: 0x40080000,\n      0xc800000: 0x40000010,\n      0xd800000: 0x84000,\n      0xe800000: 0x40084000,\n      0xf800000: 0x4010,\n      0x10000000: 0x0,\n      0x11000000: 0x40080010,\n      0x12000000: 0x40004010,\n      0x13000000: 0x40084000,\n      0x14000000: 0x40080000,\n      0x15000000: 0x10,\n      0x16000000: 0x84010,\n      0x17000000: 0x4000,\n      0x18000000: 0x4010,\n      0x19000000: 0x80000,\n      0x1a000000: 0x80010,\n      0x1b000000: 0x40000010,\n      0x1c000000: 0x84000,\n      0x1d000000: 0x40004000,\n      0x1e000000: 0x40000000,\n      0x1f000000: 0x40084010,\n      0x10800000: 0x84010,\n      0x11800000: 0x80000,\n      0x12800000: 0x40080000,\n      0x13800000: 0x4000,\n      0x14800000: 0x40004000,\n      0x15800000: 0x40084010,\n      0x16800000: 0x10,\n      0x17800000: 0x40000000,\n      0x18800000: 0x40084000,\n      0x19800000: 0x40000010,\n      0x1a800000: 0x40004010,\n      0x1b800000: 0x80010,\n      0x1c800000: 0x0,\n      0x1d800000: 0x4010,\n      0x1e800000: 0x40080010,\n      0x1f800000: 0x84000\n    }, {\n      0x0: 0x104,\n      0x100000: 0x0,\n      0x200000: 0x4000100,\n      0x300000: 0x10104,\n      0x400000: 0x10004,\n      0x500000: 0x4000004,\n      0x600000: 0x4010104,\n      0x700000: 0x4010000,\n      0x800000: 0x4000000,\n      0x900000: 0x4010100,\n      0xa00000: 0x10100,\n      0xb00000: 0x4010004,\n      0xc00000: 0x4000104,\n      0xd00000: 0x10000,\n      0xe00000: 0x4,\n      0xf00000: 0x100,\n      0x80000: 0x4010100,\n      0x180000: 0x4010004,\n      0x280000: 0x0,\n      0x380000: 0x4000100,\n      0x480000: 0x4000004,\n      0x580000: 0x10000,\n      0x680000: 0x10004,\n      0x780000: 0x104,\n      0x880000: 0x4,\n      0x980000: 0x100,\n      0xa80000: 0x4010000,\n      0xb80000: 0x10104,\n      0xc80000: 0x10100,\n      0xd80000: 0x4000104,\n      0xe80000: 0x4010104,\n      0xf80000: 0x4000000,\n      0x1000000: 0x4010100,\n      0x1100000: 0x10004,\n      0x1200000: 0x10000,\n      0x1300000: 0x4000100,\n      0x1400000: 0x100,\n      0x1500000: 0x4010104,\n      0x1600000: 0x4000004,\n      0x1700000: 0x0,\n      0x1800000: 0x4000104,\n      0x1900000: 0x4000000,\n      0x1a00000: 0x4,\n      0x1b00000: 0x10100,\n      0x1c00000: 0x4010000,\n      0x1d00000: 0x104,\n      0x1e00000: 0x10104,\n      0x1f00000: 0x4010004,\n      0x1080000: 0x4000000,\n      0x1180000: 0x104,\n      0x1280000: 0x4010100,\n      0x1380000: 0x0,\n      0x1480000: 0x10004,\n      0x1580000: 0x4000100,\n      0x1680000: 0x100,\n      0x1780000: 0x4010004,\n      0x1880000: 0x10000,\n      0x1980000: 0x4010104,\n      0x1a80000: 0x10104,\n      0x1b80000: 0x4000004,\n      0x1c80000: 0x4000104,\n      0x1d80000: 0x4010000,\n      0x1e80000: 0x4,\n      0x1f80000: 0x10100\n    }, {\n      0x0: 0x80401000,\n      0x10000: 0x80001040,\n      0x20000: 0x401040,\n      0x30000: 0x80400000,\n      0x40000: 0x0,\n      0x50000: 0x401000,\n      0x60000: 0x80000040,\n      0x70000: 0x400040,\n      0x80000: 0x80000000,\n      0x90000: 0x400000,\n      0xa0000: 0x40,\n      0xb0000: 0x80001000,\n      0xc0000: 0x80400040,\n      0xd0000: 0x1040,\n      0xe0000: 0x1000,\n      0xf0000: 0x80401040,\n      0x8000: 0x80001040,\n      0x18000: 0x40,\n      0x28000: 0x80400040,\n      0x38000: 0x80001000,\n      0x48000: 0x401000,\n      0x58000: 0x80401040,\n      0x68000: 0x0,\n      0x78000: 0x80400000,\n      0x88000: 0x1000,\n      0x98000: 0x80401000,\n      0xa8000: 0x400000,\n      0xb8000: 0x1040,\n      0xc8000: 0x80000000,\n      0xd8000: 0x400040,\n      0xe8000: 0x401040,\n      0xf8000: 0x80000040,\n      0x100000: 0x400040,\n      0x110000: 0x401000,\n      0x120000: 0x80000040,\n      0x130000: 0x0,\n      0x140000: 0x1040,\n      0x150000: 0x80400040,\n      0x160000: 0x80401000,\n      0x170000: 0x80001040,\n      0x180000: 0x80401040,\n      0x190000: 0x80000000,\n      0x1a0000: 0x80400000,\n      0x1b0000: 0x401040,\n      0x1c0000: 0x80001000,\n      0x1d0000: 0x400000,\n      0x1e0000: 0x40,\n      0x1f0000: 0x1000,\n      0x108000: 0x80400000,\n      0x118000: 0x80401040,\n      0x128000: 0x0,\n      0x138000: 0x401000,\n      0x148000: 0x400040,\n      0x158000: 0x80000000,\n      0x168000: 0x80001040,\n      0x178000: 0x40,\n      0x188000: 0x80000040,\n      0x198000: 0x1000,\n      0x1a8000: 0x80001000,\n      0x1b8000: 0x80400040,\n      0x1c8000: 0x1040,\n      0x1d8000: 0x80401000,\n      0x1e8000: 0x400000,\n      0x1f8000: 0x401040\n    }, {\n      0x0: 0x80,\n      0x1000: 0x1040000,\n      0x2000: 0x40000,\n      0x3000: 0x20000000,\n      0x4000: 0x20040080,\n      0x5000: 0x1000080,\n      0x6000: 0x21000080,\n      0x7000: 0x40080,\n      0x8000: 0x1000000,\n      0x9000: 0x20040000,\n      0xa000: 0x20000080,\n      0xb000: 0x21040080,\n      0xc000: 0x21040000,\n      0xd000: 0x0,\n      0xe000: 0x1040080,\n      0xf000: 0x21000000,\n      0x800: 0x1040080,\n      0x1800: 0x21000080,\n      0x2800: 0x80,\n      0x3800: 0x1040000,\n      0x4800: 0x40000,\n      0x5800: 0x20040080,\n      0x6800: 0x21040000,\n      0x7800: 0x20000000,\n      0x8800: 0x20040000,\n      0x9800: 0x0,\n      0xa800: 0x21040080,\n      0xb800: 0x1000080,\n      0xc800: 0x20000080,\n      0xd800: 0x21000000,\n      0xe800: 0x1000000,\n      0xf800: 0x40080,\n      0x10000: 0x40000,\n      0x11000: 0x80,\n      0x12000: 0x20000000,\n      0x13000: 0x21000080,\n      0x14000: 0x1000080,\n      0x15000: 0x21040000,\n      0x16000: 0x20040080,\n      0x17000: 0x1000000,\n      0x18000: 0x21040080,\n      0x19000: 0x21000000,\n      0x1a000: 0x1040000,\n      0x1b000: 0x20040000,\n      0x1c000: 0x40080,\n      0x1d000: 0x20000080,\n      0x1e000: 0x0,\n      0x1f000: 0x1040080,\n      0x10800: 0x21000080,\n      0x11800: 0x1000000,\n      0x12800: 0x1040000,\n      0x13800: 0x20040080,\n      0x14800: 0x20000000,\n      0x15800: 0x1040080,\n      0x16800: 0x80,\n      0x17800: 0x21040000,\n      0x18800: 0x40080,\n      0x19800: 0x21040080,\n      0x1a800: 0x0,\n      0x1b800: 0x21000000,\n      0x1c800: 0x1000080,\n      0x1d800: 0x40000,\n      0x1e800: 0x20040000,\n      0x1f800: 0x20000080\n    }, {\n      0x0: 0x10000008,\n      0x100: 0x2000,\n      0x200: 0x10200000,\n      0x300: 0x10202008,\n      0x400: 0x10002000,\n      0x500: 0x200000,\n      0x600: 0x200008,\n      0x700: 0x10000000,\n      0x800: 0x0,\n      0x900: 0x10002008,\n      0xa00: 0x202000,\n      0xb00: 0x8,\n      0xc00: 0x10200008,\n      0xd00: 0x202008,\n      0xe00: 0x2008,\n      0xf00: 0x10202000,\n      0x80: 0x10200000,\n      0x180: 0x10202008,\n      0x280: 0x8,\n      0x380: 0x200000,\n      0x480: 0x202008,\n      0x580: 0x10000008,\n      0x680: 0x10002000,\n      0x780: 0x2008,\n      0x880: 0x200008,\n      0x980: 0x2000,\n      0xa80: 0x10002008,\n      0xb80: 0x10200008,\n      0xc80: 0x0,\n      0xd80: 0x10202000,\n      0xe80: 0x202000,\n      0xf80: 0x10000000,\n      0x1000: 0x10002000,\n      0x1100: 0x10200008,\n      0x1200: 0x10202008,\n      0x1300: 0x2008,\n      0x1400: 0x200000,\n      0x1500: 0x10000000,\n      0x1600: 0x10000008,\n      0x1700: 0x202000,\n      0x1800: 0x202008,\n      0x1900: 0x0,\n      0x1a00: 0x8,\n      0x1b00: 0x10200000,\n      0x1c00: 0x2000,\n      0x1d00: 0x10002008,\n      0x1e00: 0x10202000,\n      0x1f00: 0x200008,\n      0x1080: 0x8,\n      0x1180: 0x202000,\n      0x1280: 0x200000,\n      0x1380: 0x10000008,\n      0x1480: 0x10002000,\n      0x1580: 0x2008,\n      0x1680: 0x10202008,\n      0x1780: 0x10200000,\n      0x1880: 0x10202000,\n      0x1980: 0x10200008,\n      0x1a80: 0x2000,\n      0x1b80: 0x202008,\n      0x1c80: 0x200008,\n      0x1d80: 0x0,\n      0x1e80: 0x10000000,\n      0x1f80: 0x10002008\n    }, {\n      0x0: 0x100000,\n      0x10: 0x2000401,\n      0x20: 0x400,\n      0x30: 0x100401,\n      0x40: 0x2100401,\n      0x50: 0x0,\n      0x60: 0x1,\n      0x70: 0x2100001,\n      0x80: 0x2000400,\n      0x90: 0x100001,\n      0xa0: 0x2000001,\n      0xb0: 0x2100400,\n      0xc0: 0x2100000,\n      0xd0: 0x401,\n      0xe0: 0x100400,\n      0xf0: 0x2000000,\n      0x8: 0x2100001,\n      0x18: 0x0,\n      0x28: 0x2000401,\n      0x38: 0x2100400,\n      0x48: 0x100000,\n      0x58: 0x2000001,\n      0x68: 0x2000000,\n      0x78: 0x401,\n      0x88: 0x100401,\n      0x98: 0x2000400,\n      0xa8: 0x2100000,\n      0xb8: 0x100001,\n      0xc8: 0x400,\n      0xd8: 0x2100401,\n      0xe8: 0x1,\n      0xf8: 0x100400,\n      0x100: 0x2000000,\n      0x110: 0x100000,\n      0x120: 0x2000401,\n      0x130: 0x2100001,\n      0x140: 0x100001,\n      0x150: 0x2000400,\n      0x160: 0x2100400,\n      0x170: 0x100401,\n      0x180: 0x401,\n      0x190: 0x2100401,\n      0x1a0: 0x100400,\n      0x1b0: 0x1,\n      0x1c0: 0x0,\n      0x1d0: 0x2100000,\n      0x1e0: 0x2000001,\n      0x1f0: 0x400,\n      0x108: 0x100400,\n      0x118: 0x2000401,\n      0x128: 0x2100001,\n      0x138: 0x1,\n      0x148: 0x2000000,\n      0x158: 0x100000,\n      0x168: 0x401,\n      0x178: 0x2100400,\n      0x188: 0x2000001,\n      0x198: 0x2100000,\n      0x1a8: 0x0,\n      0x1b8: 0x2100401,\n      0x1c8: 0x100401,\n      0x1d8: 0x400,\n      0x1e8: 0x2000400,\n      0x1f8: 0x100001\n    }, {\n      0x0: 0x8000820,\n      0x1: 0x20000,\n      0x2: 0x8000000,\n      0x3: 0x20,\n      0x4: 0x20020,\n      0x5: 0x8020820,\n      0x6: 0x8020800,\n      0x7: 0x800,\n      0x8: 0x8020000,\n      0x9: 0x8000800,\n      0xa: 0x20800,\n      0xb: 0x8020020,\n      0xc: 0x820,\n      0xd: 0x0,\n      0xe: 0x8000020,\n      0xf: 0x20820,\n      0x80000000: 0x800,\n      0x80000001: 0x8020820,\n      0x80000002: 0x8000820,\n      0x80000003: 0x8000000,\n      0x80000004: 0x8020000,\n      0x80000005: 0x20800,\n      0x80000006: 0x20820,\n      0x80000007: 0x20,\n      0x80000008: 0x8000020,\n      0x80000009: 0x820,\n      0x8000000a: 0x20020,\n      0x8000000b: 0x8020800,\n      0x8000000c: 0x0,\n      0x8000000d: 0x8020020,\n      0x8000000e: 0x8000800,\n      0x8000000f: 0x20000,\n      0x10: 0x20820,\n      0x11: 0x8020800,\n      0x12: 0x20,\n      0x13: 0x800,\n      0x14: 0x8000800,\n      0x15: 0x8000020,\n      0x16: 0x8020020,\n      0x17: 0x20000,\n      0x18: 0x0,\n      0x19: 0x20020,\n      0x1a: 0x8020000,\n      0x1b: 0x8000820,\n      0x1c: 0x8020820,\n      0x1d: 0x20800,\n      0x1e: 0x820,\n      0x1f: 0x8000000,\n      0x80000010: 0x20000,\n      0x80000011: 0x800,\n      0x80000012: 0x8020020,\n      0x80000013: 0x20820,\n      0x80000014: 0x20,\n      0x80000015: 0x8020000,\n      0x80000016: 0x8000000,\n      0x80000017: 0x8000820,\n      0x80000018: 0x8020820,\n      0x80000019: 0x8000020,\n      0x8000001a: 0x8000800,\n      0x8000001b: 0x0,\n      0x8000001c: 0x20800,\n      0x8000001d: 0x820,\n      0x8000001e: 0x20020,\n      0x8000001f: 0x8020800\n    }];\n\n    // Masks that select the SBOX input\n    var SBOX_MASK = [0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f];\n\n    /**\n     * DES block cipher algorithm.\n     */\n    var DES = C_algo.DES = BlockCipher.extend({\n      _doReset: function _doReset() {\n        // Shortcuts\n        var key = this._key;\n        var keyWords = key.words;\n\n        // Select 56 bits according to PC1\n        var keyBits = [];\n        for (var i = 0; i < 56; i++) {\n          var keyBitPos = PC1[i] - 1;\n          keyBits[i] = keyWords[keyBitPos >>> 5] >>> 31 - keyBitPos % 32 & 1;\n        }\n\n        // Assemble 16 subkeys\n        var subKeys = this._subKeys = [];\n        for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n          // Create subkey\n          var subKey = subKeys[nSubKey] = [];\n\n          // Shortcut\n          var bitShift = BIT_SHIFTS[nSubKey];\n\n          // Select 48 bits according to PC2\n          for (var i = 0; i < 24; i++) {\n            // Select from the left 28 key bits\n            subKey[i / 6 | 0] |= keyBits[(PC2[i] - 1 + bitShift) % 28] << 31 - i % 6;\n\n            // Select from the right 28 key bits\n            subKey[4 + (i / 6 | 0)] |= keyBits[28 + (PC2[i + 24] - 1 + bitShift) % 28] << 31 - i % 6;\n          }\n\n          // Since each subkey is applied to an expanded 32-bit input,\n          // the subkey can be broken into 8 values scaled to 32-bits,\n          // which allows the key to be used without expansion\n          subKey[0] = subKey[0] << 1 | subKey[0] >>> 31;\n          for (var i = 1; i < 7; i++) {\n            subKey[i] = subKey[i] >>> (i - 1) * 4 + 3;\n          }\n          subKey[7] = subKey[7] << 5 | subKey[7] >>> 27;\n        }\n\n        // Compute inverse subkeys\n        var invSubKeys = this._invSubKeys = [];\n        for (var i = 0; i < 16; i++) {\n          invSubKeys[i] = subKeys[15 - i];\n        }\n      },\n      encryptBlock: function encryptBlock(M, offset) {\n        this._doCryptBlock(M, offset, this._subKeys);\n      },\n      decryptBlock: function decryptBlock(M, offset) {\n        this._doCryptBlock(M, offset, this._invSubKeys);\n      },\n      _doCryptBlock: function _doCryptBlock(M, offset, subKeys) {\n        // Get input\n        this._lBlock = M[offset];\n        this._rBlock = M[offset + 1];\n\n        // Initial permutation\n        exchangeLR.call(this, 4, 0x0f0f0f0f);\n        exchangeLR.call(this, 16, 0x0000ffff);\n        exchangeRL.call(this, 2, 0x33333333);\n        exchangeRL.call(this, 8, 0x00ff00ff);\n        exchangeLR.call(this, 1, 0x55555555);\n\n        // Rounds\n        for (var round = 0; round < 16; round++) {\n          // Shortcuts\n          var subKey = subKeys[round];\n          var lBlock = this._lBlock;\n          var rBlock = this._rBlock;\n\n          // Feistel function\n          var f = 0;\n          for (var i = 0; i < 8; i++) {\n            f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n          }\n          this._lBlock = rBlock;\n          this._rBlock = lBlock ^ f;\n        }\n\n        // Undo swap from last round\n        var t = this._lBlock;\n        this._lBlock = this._rBlock;\n        this._rBlock = t;\n\n        // Final permutation\n        exchangeLR.call(this, 1, 0x55555555);\n        exchangeRL.call(this, 8, 0x00ff00ff);\n        exchangeRL.call(this, 2, 0x33333333);\n        exchangeLR.call(this, 16, 0x0000ffff);\n        exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n        // Set output\n        M[offset] = this._lBlock;\n        M[offset + 1] = this._rBlock;\n      },\n      keySize: 64 / 32,\n      ivSize: 64 / 32,\n      blockSize: 64 / 32\n    });\n\n    // Swap bits across the left and right words\n    function exchangeLR(offset, mask) {\n      var t = (this._lBlock >>> offset ^ this._rBlock) & mask;\n      this._rBlock ^= t;\n      this._lBlock ^= t << offset;\n    }\n    function exchangeRL(offset, mask) {\n      var t = (this._rBlock >>> offset ^ this._lBlock) & mask;\n      this._lBlock ^= t;\n      this._rBlock ^= t << offset;\n    }\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n     */\n    C.DES = BlockCipher._createHelper(DES);\n\n    /**\n     * Triple-DES block cipher algorithm.\n     */\n    var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n      _doReset: function _doReset() {\n        // Shortcuts\n        var key = this._key;\n        var keyWords = key.words;\n        // Make sure the key length is valid (64, 128 or >= 192 bit)\n        if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n          throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n        }\n\n        // Extend the key according to the keying options defined in 3DES standard\n        var key1 = keyWords.slice(0, 2);\n        var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n        var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n        // Create DES instances\n        this._des1 = DES.createEncryptor(WordArray.create(key1));\n        this._des2 = DES.createEncryptor(WordArray.create(key2));\n        this._des3 = DES.createEncryptor(WordArray.create(key3));\n      },\n      encryptBlock: function encryptBlock(M, offset) {\n        this._des1.encryptBlock(M, offset);\n        this._des2.decryptBlock(M, offset);\n        this._des3.encryptBlock(M, offset);\n      },\n      decryptBlock: function decryptBlock(M, offset) {\n        this._des3.decryptBlock(M, offset);\n        this._des2.encryptBlock(M, offset);\n        this._des1.decryptBlock(M, offset);\n      },\n      keySize: 192 / 32,\n      ivSize: 64 / 32,\n      blockSize: 64 / 32\n    });\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n     */\n    C.TripleDES = BlockCipher._createHelper(TripleDES);\n  })();\n  return CryptoJS.TripleDES;\n});\n\n/***/ }),\n\n/***/ 2601:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function (undefined) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var Base = C_lib.Base;\n    var X32WordArray = C_lib.WordArray;\n\n    /**\n     * x64 namespace.\n     */\n    var C_x64 = C.x64 = {};\n\n    /**\n     * A 64-bit word.\n     */\n    var X64Word = C_x64.Word = Base.extend({\n      /**\n       * Initializes a newly created 64-bit word.\n       *\n       * @param {number} high The high 32 bits.\n       * @param {number} low The low 32 bits.\n       *\n       * @example\n       *\n       *     var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n       */\n      init: function init(high, low) {\n        this.high = high;\n        this.low = low;\n      }\n\n      /**\n       * Bitwise NOTs this word.\n       *\n       * @return {X64Word} A new x64-Word object after negating.\n       *\n       * @example\n       *\n       *     var negated = x64Word.not();\n       */\n      // not: function () {\n      // var high = ~this.high;\n      // var low = ~this.low;\n\n      // return X64Word.create(high, low);\n      // },\n\n      /**\n       * Bitwise ANDs this word with the passed word.\n       *\n       * @param {X64Word} word The x64-Word to AND with this word.\n       *\n       * @return {X64Word} A new x64-Word object after ANDing.\n       *\n       * @example\n       *\n       *     var anded = x64Word.and(anotherX64Word);\n       */\n      // and: function (word) {\n      // var high = this.high & word.high;\n      // var low = this.low & word.low;\n\n      // return X64Word.create(high, low);\n      // },\n\n      /**\n       * Bitwise ORs this word with the passed word.\n       *\n       * @param {X64Word} word The x64-Word to OR with this word.\n       *\n       * @return {X64Word} A new x64-Word object after ORing.\n       *\n       * @example\n       *\n       *     var ored = x64Word.or(anotherX64Word);\n       */\n      // or: function (word) {\n      // var high = this.high | word.high;\n      // var low = this.low | word.low;\n\n      // return X64Word.create(high, low);\n      // },\n\n      /**\n       * Bitwise XORs this word with the passed word.\n       *\n       * @param {X64Word} word The x64-Word to XOR with this word.\n       *\n       * @return {X64Word} A new x64-Word object after XORing.\n       *\n       * @example\n       *\n       *     var xored = x64Word.xor(anotherX64Word);\n       */\n      // xor: function (word) {\n      // var high = this.high ^ word.high;\n      // var low = this.low ^ word.low;\n\n      // return X64Word.create(high, low);\n      // },\n\n      /**\n       * Shifts this word n bits to the left.\n       *\n       * @param {number} n The number of bits to shift.\n       *\n       * @return {X64Word} A new x64-Word object after shifting.\n       *\n       * @example\n       *\n       *     var shifted = x64Word.shiftL(25);\n       */\n      // shiftL: function (n) {\n      // if (n < 32) {\n      // var high = (this.high << n) | (this.low >>> (32 - n));\n      // var low = this.low << n;\n      // } else {\n      // var high = this.low << (n - 32);\n      // var low = 0;\n      // }\n\n      // return X64Word.create(high, low);\n      // },\n\n      /**\n       * Shifts this word n bits to the right.\n       *\n       * @param {number} n The number of bits to shift.\n       *\n       * @return {X64Word} A new x64-Word object after shifting.\n       *\n       * @example\n       *\n       *     var shifted = x64Word.shiftR(7);\n       */\n      // shiftR: function (n) {\n      // if (n < 32) {\n      // var low = (this.low >>> n) | (this.high << (32 - n));\n      // var high = this.high >>> n;\n      // } else {\n      // var low = this.high >>> (n - 32);\n      // var high = 0;\n      // }\n\n      // return X64Word.create(high, low);\n      // },\n\n      /**\n       * Rotates this word n bits to the left.\n       *\n       * @param {number} n The number of bits to rotate.\n       *\n       * @return {X64Word} A new x64-Word object after rotating.\n       *\n       * @example\n       *\n       *     var rotated = x64Word.rotL(25);\n       */\n      // rotL: function (n) {\n      // return this.shiftL(n).or(this.shiftR(64 - n));\n      // },\n\n      /**\n       * Rotates this word n bits to the right.\n       *\n       * @param {number} n The number of bits to rotate.\n       *\n       * @return {X64Word} A new x64-Word object after rotating.\n       *\n       * @example\n       *\n       *     var rotated = x64Word.rotR(7);\n       */\n      // rotR: function (n) {\n      // return this.shiftR(n).or(this.shiftL(64 - n));\n      // },\n\n      /**\n       * Adds this word with the passed word.\n       *\n       * @param {X64Word} word The x64-Word to add with this word.\n       *\n       * @return {X64Word} A new x64-Word object after adding.\n       *\n       * @example\n       *\n       *     var added = x64Word.add(anotherX64Word);\n       */\n      // add: function (word) {\n      // var low = (this.low + word.low) | 0;\n      // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n      // var high = (this.high + word.high + carry) | 0;\n\n      // return X64Word.create(high, low);\n      // }\n    });\n\n    /**\n     * An array of 64-bit words.\n     *\n     * @property {Array} words The array of CryptoJS.x64.Word objects.\n     * @property {number} sigBytes The number of significant bytes in this word array.\n     */\n    var X64WordArray = C_x64.WordArray = Base.extend({\n      /**\n       * Initializes a newly created word array.\n       *\n       * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n       * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.x64.WordArray.create();\n       *\n       *     var wordArray = CryptoJS.x64.WordArray.create([\n       *         CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n       *         CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n       *     ]);\n       *\n       *     var wordArray = CryptoJS.x64.WordArray.create([\n       *         CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n       *         CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n       *     ], 10);\n       */\n      init: function init(words, sigBytes) {\n        words = this.words = words || [];\n        if (sigBytes != undefined) {\n          this.sigBytes = sigBytes;\n        } else {\n          this.sigBytes = words.length * 8;\n        }\n      },\n      /**\n       * Converts this 64-bit word array to a 32-bit word array.\n       *\n       * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n       *\n       * @example\n       *\n       *     var x32WordArray = x64WordArray.toX32();\n       */\n      toX32: function toX32() {\n        // Shortcuts\n        var x64Words = this.words;\n        var x64WordsLength = x64Words.length;\n\n        // Convert\n        var x32Words = [];\n        for (var i = 0; i < x64WordsLength; i++) {\n          var x64Word = x64Words[i];\n          x32Words.push(x64Word.high);\n          x32Words.push(x64Word.low);\n        }\n        return X32WordArray.create(x32Words, this.sigBytes);\n      },\n      /**\n       * Creates a copy of this word array.\n       *\n       * @return {X64WordArray} The clone.\n       *\n       * @example\n       *\n       *     var clone = x64WordArray.clone();\n       */\n      clone: function clone() {\n        var clone = Base.clone.call(this);\n\n        // Clone \"words\" array\n        var words = clone.words = this.words.slice(0);\n\n        // Clone each X64Word object\n        var wordsLength = words.length;\n        for (var i = 0; i < wordsLength; i++) {\n          words[i] = words[i].clone();\n        }\n        return clone;\n      }\n    });\n  })();\n  return CryptoJS;\n});\n\n/***/ }),\n\n/***/ 9811:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2443);\n__webpack_require__(3680);\n__webpack_require__(3706);\n__webpack_require__(2703);\n__webpack_require__(489);\n__webpack_require__(4747);\n__webpack_require__(8309);\n__webpack_require__(8674);\n__webpack_require__(1038);\n__webpack_require__(4916);\n__webpack_require__(4723);\n__webpack_require__(2165);\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(8783);\n__webpack_require__(3948);\n__webpack_require__(2526);\n__webpack_require__(1817);\n__webpack_require__(7042);\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = \"function\" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || \"@@iterator\", asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\", toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, \"\"); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: \"normal\", arg: fn.call(obj, arg) }; } catch (err) { return { type: \"throw\", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [\"next\", \"throw\", \"return\"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (\"throw\" !== record.type) { var result = record.arg, value = result.value; return value && \"object\" == typeof value && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke(\"next\", value, resolve, reject); }, function (err) { invoke(\"throw\", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke(\"throw\", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, \"_invoke\", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = \"suspendedStart\"; return function (method, arg) { if (\"executing\" === state) throw new Error(\"Generator is already running\"); if (\"completed\" === state) { if (\"throw\" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) { if (\"suspendedStart\" === state) throw state = \"completed\", context.arg; context.dispatchException(context.arg); } else \"return\" === context.method && context.abrupt(\"return\", context.arg); state = \"executing\"; var record = tryCatch(innerFn, self, context); if (\"normal\" === record.type) { if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, \"throw\" === methodName && delegate.iterator.return && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method) || \"return\" !== methodName && (context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a '\" + methodName + \"' method\")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = \"normal\", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: \"root\" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if (\"function\" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) { var ctor = \"function\" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, \"toString\", function () { return \"[object Generator]\"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if (\"throw\" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if (\"root\" === entry.tryLoc) return handle(\"end\"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, \"catchLoc\"), hasFinally = hasOwn.call(entry, \"finallyLoc\"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error(\"try statement without catch or finally\"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if (\"throw\" === record.type) throw record.arg; return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (\"throw\" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\nvar INITIAL_STATE = 1;\nvar FAIL_STATE = 0;\n/**\n * A StateMachine represents a deterministic finite automaton.\n * It can perform matches over a sequence of values, similar to a regular expression.\n */\nvar StateMachine = /*#__PURE__*/function () {\n  function StateMachine(dfa) {\n    this.stateTable = dfa.stateTable;\n    this.accepting = dfa.accepting;\n    this.tags = dfa.tags;\n  }\n  /**\n   * Returns an iterable object that yields pattern matches over the input sequence.\n   * Matches are of the form [startIndex, endIndex, tags].\n   */\n  var _proto = StateMachine.prototype;\n  _proto.match = function match(str) {\n    var _ref;\n    var self = this;\n    return _ref = {}, _ref[Symbol.iterator] = /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n      var state, startRun, lastAccepting, lastState, p, c;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) {\n          switch (_context.prev = _context.next) {\n            case 0:\n              state = INITIAL_STATE;\n              startRun = null;\n              lastAccepting = null;\n              lastState = null;\n              p = 0;\n            case 5:\n              if (!(p < str.length)) {\n                _context.next = 21;\n                break;\n              }\n              c = str[p];\n              lastState = state;\n              state = self.stateTable[state][c];\n              if (!(state === FAIL_STATE)) {\n                _context.next = 15;\n                break;\n              }\n              if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) {\n                _context.next = 13;\n                break;\n              }\n              _context.next = 13;\n              return [startRun, lastAccepting, self.tags[lastState]];\n            case 13:\n              // reset the state as if we started over from the initial state\n\n              state = self.stateTable[INITIAL_STATE][c];\n              startRun = null;\n            case 15:\n              // start a run if not in the failure state\n\n              if (state !== FAIL_STATE && startRun == null) {\n                startRun = p;\n              } // if accepting, mark the potential match end\n\n              if (self.accepting[state]) {\n                lastAccepting = p;\n              } // reset the state to the initial state if we get into the failure state\n\n              if (state === FAIL_STATE) {\n                state = INITIAL_STATE;\n              }\n            case 18:\n              p++;\n              _context.next = 5;\n              break;\n            case 21:\n              if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) {\n                _context.next = 24;\n                break;\n              }\n              _context.next = 24;\n              return [startRun, lastAccepting, self.tags[state]];\n            case 24:\n            case \"end\":\n              return _context.stop();\n          }\n        }\n      }, _callee);\n    }), _ref;\n  }\n  /**\n   * For each match over the input sequence, action functions matching\n   * the tag definitions in the input pattern are called with the startIndex,\n   * endIndex, and sub-match sequence.\n   */;\n  _proto.apply = function apply(str, actions) {\n    for (var _iterator = _createForOfIteratorHelperLoose(this.match(str)), _step; !(_step = _iterator()).done;) {\n      var _step$value = _step.value,\n        start = _step$value[0],\n        end = _step$value[1],\n        tags = _step$value[2];\n      for (var _iterator2 = _createForOfIteratorHelperLoose(tags), _step2; !(_step2 = _iterator2()).done;) {\n        var tag = _step2.value;\n        if (typeof actions[tag] === 'function') {\n          actions[tag](start, end, str.slice(start, end + 1));\n        }\n      }\n    }\n  };\n  return StateMachine;\n}();\nmodule.exports = StateMachine;\n\n/***/ }),\n\n/***/ 8478:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\n__webpack_require__(1539);\n__webpack_require__(8674);\n__webpack_require__(7042);\n__webpack_require__(6699);\n/*\n * MIT LICENSE\n * Copyright (c) 2011 Devon Govett\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\n * software and associated documentation files (the \"Software\"), to deal in the Software\n * without restriction, including without limitation the rights to use, copy, modify, merge,\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n * to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nvar fs = __webpack_require__(3857);\nvar zlib = __webpack_require__(2635);\nmodule.exports = /*#__PURE__*/function () {\n  PNG.decode = function decode(path, fn) {\n    return fs.readFile(path, function (err, file) {\n      var png = new PNG(file);\n      return png.decode(function (pixels) {\n        return fn(pixels);\n      });\n    });\n  };\n  PNG.load = function load(path) {\n    var file = fs.readFileSync(path);\n    return new PNG(file);\n  };\n  function PNG(data) {\n    var i;\n    this.data = data;\n    this.pos = 8; // Skip the default header\n\n    this.palette = [];\n    this.imgData = [];\n    this.transparency = {};\n    this.text = {};\n    while (true) {\n      var chunkSize = this.readUInt32();\n      var section = '';\n      for (i = 0; i < 4; i++) {\n        section += String.fromCharCode(this.data[this.pos++]);\n      }\n      switch (section) {\n        case 'IHDR':\n          // we can grab  interesting values from here (like width, height, etc)\n          this.width = this.readUInt32();\n          this.height = this.readUInt32();\n          this.bits = this.data[this.pos++];\n          this.colorType = this.data[this.pos++];\n          this.compressionMethod = this.data[this.pos++];\n          this.filterMethod = this.data[this.pos++];\n          this.interlaceMethod = this.data[this.pos++];\n          break;\n        case 'PLTE':\n          this.palette = this.read(chunkSize);\n          break;\n        case 'IDAT':\n          for (i = 0; i < chunkSize; i++) {\n            this.imgData.push(this.data[this.pos++]);\n          }\n          break;\n        case 'tRNS':\n          // This chunk can only occur once and it must occur after the\n          // PLTE chunk and before the IDAT chunk.\n          this.transparency = {};\n          switch (this.colorType) {\n            case 3:\n              // Indexed color, RGB. Each byte in this chunk is an alpha for\n              // the palette index in the PLTE (\"palette\") chunk up until the\n              // last non-opaque entry. Set up an array, stretching over all\n              // palette entries which will be 0 (opaque) or 1 (transparent).\n              this.transparency.indexed = this.read(chunkSize);\n              var short = 255 - this.transparency.indexed.length;\n              if (short > 0) {\n                for (i = 0; i < short; i++) {\n                  this.transparency.indexed.push(255);\n                }\n              }\n              break;\n            case 0:\n              // Greyscale. Corresponding to entries in the PLTE chunk.\n              // Grey is two bytes, range 0 .. (2 ^ bit-depth) - 1\n              this.transparency.grayscale = this.read(chunkSize)[0];\n              break;\n            case 2:\n              // True color with proper alpha channel.\n              this.transparency.rgb = this.read(chunkSize);\n              break;\n          }\n          break;\n        case 'tEXt':\n          var text = this.read(chunkSize);\n          var index = text.indexOf(0);\n          var key = String.fromCharCode.apply(String, text.slice(0, index));\n          this.text[key] = String.fromCharCode.apply(String, text.slice(index + 1));\n          break;\n        case 'IEND':\n          // we've got everything we need!\n          switch (this.colorType) {\n            case 0:\n            case 3:\n            case 4:\n              this.colors = 1;\n              break;\n            case 2:\n            case 6:\n              this.colors = 3;\n              break;\n          }\n          this.hasAlphaChannel = [4, 6].includes(this.colorType);\n          var colors = this.colors + (this.hasAlphaChannel ? 1 : 0);\n          this.pixelBitlength = this.bits * colors;\n          switch (this.colors) {\n            case 1:\n              this.colorSpace = 'DeviceGray';\n              break;\n            case 3:\n              this.colorSpace = 'DeviceRGB';\n              break;\n          }\n          this.imgData = new Buffer(this.imgData);\n          return;\n          break;\n        default:\n          // unknown (or unimportant) section, skip it\n          this.pos += chunkSize;\n      }\n      this.pos += 4; // Skip the CRC\n\n      if (this.pos > this.data.length) {\n        throw new Error('Incomplete or corrupt PNG file');\n      }\n    }\n  }\n  var _proto = PNG.prototype;\n  _proto.read = function read(bytes) {\n    var result = new Array(bytes);\n    for (var i = 0; i < bytes; i++) {\n      result[i] = this.data[this.pos++];\n    }\n    return result;\n  };\n  _proto.readUInt32 = function readUInt32() {\n    var b1 = this.data[this.pos++] << 24;\n    var b2 = this.data[this.pos++] << 16;\n    var b3 = this.data[this.pos++] << 8;\n    var b4 = this.data[this.pos++];\n    return b1 | b2 | b3 | b4;\n  };\n  _proto.readUInt16 = function readUInt16() {\n    var b1 = this.data[this.pos++] << 8;\n    var b2 = this.data[this.pos++];\n    return b1 | b2;\n  };\n  _proto.decodePixels = function decodePixels(fn) {\n    var _this = this;\n    return zlib.inflate(this.imgData, function (err, data) {\n      if (err) {\n        throw err;\n      }\n      var width = _this.width,\n        height = _this.height;\n      var pixelBytes = _this.pixelBitlength / 8;\n      var pixels = new Buffer(width * height * pixelBytes);\n      var length = data.length;\n      var pos = 0;\n      function pass(x0, y0, dx, dy, singlePass) {\n        if (singlePass === void 0) {\n          singlePass = false;\n        }\n        var w = Math.ceil((width - x0) / dx);\n        var h = Math.ceil((height - y0) / dy);\n        var scanlineLength = pixelBytes * w;\n        var buffer = singlePass ? pixels : new Buffer(scanlineLength * h);\n        var row = 0;\n        var c = 0;\n        while (row < h && pos < length) {\n          var byte, col, i, left, upper;\n          switch (data[pos++]) {\n            case 0:\n              // None\n              for (i = 0; i < scanlineLength; i++) {\n                buffer[c++] = data[pos++];\n              }\n              break;\n            case 1:\n              // Sub\n              for (i = 0; i < scanlineLength; i++) {\n                byte = data[pos++];\n                left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n                buffer[c++] = (byte + left) % 256;\n              }\n              break;\n            case 2:\n              // Up\n              for (i = 0; i < scanlineLength; i++) {\n                byte = data[pos++];\n                col = (i - i % pixelBytes) / pixelBytes;\n                upper = row && buffer[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes];\n                buffer[c++] = (upper + byte) % 256;\n              }\n              break;\n            case 3:\n              // Average\n              for (i = 0; i < scanlineLength; i++) {\n                byte = data[pos++];\n                col = (i - i % pixelBytes) / pixelBytes;\n                left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n                upper = row && buffer[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes];\n                buffer[c++] = (byte + Math.floor((left + upper) / 2)) % 256;\n              }\n              break;\n            case 4:\n              // Paeth\n              for (i = 0; i < scanlineLength; i++) {\n                var paeth, upperLeft;\n                byte = data[pos++];\n                col = (i - i % pixelBytes) / pixelBytes;\n                left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n                if (row === 0) {\n                  upper = upperLeft = 0;\n                } else {\n                  upper = buffer[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes];\n                  upperLeft = col && buffer[(row - 1) * scanlineLength + (col - 1) * pixelBytes + i % pixelBytes];\n                }\n                var p = left + upper - upperLeft;\n                var pa = Math.abs(p - left);\n                var pb = Math.abs(p - upper);\n                var pc = Math.abs(p - upperLeft);\n                if (pa <= pb && pa <= pc) {\n                  paeth = left;\n                } else if (pb <= pc) {\n                  paeth = upper;\n                } else {\n                  paeth = upperLeft;\n                }\n                buffer[c++] = (byte + paeth) % 256;\n              }\n              break;\n            default:\n              throw new Error(\"Invalid filter algorithm: \" + data[pos - 1]);\n          }\n          if (!singlePass) {\n            var pixelsPos = ((y0 + row * dy) * width + x0) * pixelBytes;\n            var bufferPos = row * scanlineLength;\n            for (i = 0; i < w; i++) {\n              for (var j = 0; j < pixelBytes; j++) {\n                pixels[pixelsPos++] = buffer[bufferPos++];\n              }\n              pixelsPos += (dx - 1) * pixelBytes;\n            }\n          }\n          row++;\n        }\n      }\n      if (_this.interlaceMethod === 1) {\n        /*\n          1 6 4 6 2 6 4 6\n          7 7 7 7 7 7 7 7\n          5 6 5 6 5 6 5 6\n          7 7 7 7 7 7 7 7\n          3 6 4 6 3 6 4 6\n          7 7 7 7 7 7 7 7\n          5 6 5 6 5 6 5 6\n          7 7 7 7 7 7 7 7\n        */\n        pass(0, 0, 8, 8); // 1\n        pass(4, 0, 8, 8); // 2\n        pass(0, 4, 4, 8); // 3\n        pass(2, 0, 4, 4); // 4\n        pass(0, 2, 2, 4); // 5\n        pass(1, 0, 2, 2); // 6\n        pass(0, 1, 1, 2); // 7\n      } else {\n        pass(0, 0, 1, 1, true);\n      }\n      return fn(pixels);\n    });\n  };\n  _proto.decodePalette = function decodePalette() {\n    var palette = this.palette;\n    var length = palette.length;\n    var transparency = this.transparency.indexed || [];\n    var ret = new Buffer(transparency.length + length);\n    var pos = 0;\n    var c = 0;\n    for (var i = 0; i < length; i += 3) {\n      var left;\n      ret[pos++] = palette[i];\n      ret[pos++] = palette[i + 1];\n      ret[pos++] = palette[i + 2];\n      ret[pos++] = (left = transparency[c++]) != null ? left : 255;\n    }\n    return ret;\n  };\n  _proto.copyToImageData = function copyToImageData(imageData, pixels) {\n    var j, k;\n    var colors = this.colors;\n    var palette = null;\n    var alpha = this.hasAlphaChannel;\n    if (this.palette.length) {\n      palette = this._decodedPalette || (this._decodedPalette = this.decodePalette());\n      colors = 4;\n      alpha = true;\n    }\n    var data = imageData.data || imageData;\n    var length = data.length;\n    var input = palette || pixels;\n    var i = j = 0;\n    if (colors === 1) {\n      while (i < length) {\n        k = palette ? pixels[i / 4] * 4 : j;\n        var v = input[k++];\n        data[i++] = v;\n        data[i++] = v;\n        data[i++] = v;\n        data[i++] = alpha ? input[k++] : 255;\n        j = k;\n      }\n    } else {\n      while (i < length) {\n        k = palette ? pixels[i / 4] * 4 : j;\n        data[i++] = input[k++];\n        data[i++] = input[k++];\n        data[i++] = input[k++];\n        data[i++] = alpha ? input[k++] : 255;\n        j = k;\n      }\n    }\n  };\n  _proto.decode = function decode(fn) {\n    var _this2 = this;\n    var ret = new Buffer(this.width * this.height * 4);\n    return this.decodePixels(function (pixels) {\n      _this2.copyToImageData(ret, pixels);\n      return fn(ret);\n    });\n  };\n  return PNG;\n}();\n\n/***/ }),\n\n/***/ 7103:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n/* eslint-disable node/no-deprecated-api */\n\n\n\n__webpack_require__(8145);\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(2472);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(3290);\nvar buffer = __webpack_require__(8823);\nvar Buffer = buffer.Buffer;\nvar safer = {};\nvar key;\nfor (key in buffer) {\n  if (!buffer.hasOwnProperty(key)) continue;\n  if (key === 'SlowBuffer' || key === 'Buffer') continue;\n  safer[key] = buffer[key];\n}\nvar Safer = safer.Buffer = {};\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue;\n  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue;\n  Safer[key] = Buffer[key];\n}\nsafer.Buffer.prototype = Buffer.prototype;\nif (!Safer.from || Safer.from === Uint8Array.from) {\n  Safer.from = function (value, encodingOrOffset, length) {\n    if (typeof value === 'number') {\n      throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value);\n    }\n    if (value && typeof value.length === 'undefined') {\n      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value);\n    }\n    return Buffer(value, encodingOrOffset, length);\n  };\n}\nif (!Safer.alloc) {\n  Safer.alloc = function (size, fill, encoding) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size);\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"');\n    }\n    var buf = Buffer(size);\n    if (!fill || fill.length === 0) {\n      buf.fill(0);\n    } else if (typeof encoding === 'string') {\n      buf.fill(fill, encoding);\n    } else {\n      buf.fill(fill);\n    }\n    return buf;\n  };\n}\nif (!safer.kStringMaxLength) {\n  try {\n    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength;\n  } catch (e) {\n    // we can't determine kStringMaxLength in environments where process.binding\n    // is unsupported, so let's not set it\n  }\n}\nif (!safer.constants) {\n  safer.constants = {\n    MAX_LENGTH: safer.kMaxLength\n  };\n  if (safer.kStringMaxLength) {\n    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength;\n  }\n}\nmodule.exports = safer;\n\n/***/ }),\n\n/***/ 3361:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7941);\n__webpack_require__(2526);\n__webpack_require__(7327);\n__webpack_require__(1539);\n__webpack_require__(5003);\n__webpack_require__(4747);\n__webpack_require__(9337);\n__webpack_require__(7042);\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n  return keys;\n}\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n  return target;\n}\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\nvar _require = __webpack_require__(8823),\n  Buffer = _require.Buffer;\nvar _require2 = __webpack_require__(9862),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/\nfunction () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var entry = {\n        data: v,\n        next: this.head\n      };\n      if (this.length === 0) this.tail = entry;\n      this.head = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) {\n        ret += s + p.data;\n      }\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, i);\n        i += p.data.length;\n        p = p.next;\n      }\n      return ret;\n    } // Consumes a specified amount of bytes or characters from the buffered data.\n  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    } // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    } // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    } // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread({}, options, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();\n\n/***/ }),\n\n/***/ 5219:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __dirname = \"/\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = void 0;\n__webpack_require__(7941);\n__webpack_require__(2526);\n__webpack_require__(7327);\n__webpack_require__(1539);\n__webpack_require__(5003);\n__webpack_require__(4747);\n__webpack_require__(9337);\n__webpack_require__(489);\n__webpack_require__(2419);\n__webpack_require__(1817);\n__webpack_require__(2165);\n__webpack_require__(6992);\n__webpack_require__(8783);\n__webpack_require__(3948);\n__webpack_require__(1038);\n__webpack_require__(7042);\n__webpack_require__(8309);\n__webpack_require__(4916);\n__webpack_require__(2707);\n__webpack_require__(2222);\n__webpack_require__(9600);\n__webpack_require__(9714);\n__webpack_require__(5306);\n__webpack_require__(1249);\n__webpack_require__(9841);\n__webpack_require__(4953);\n__webpack_require__(6977);\n__webpack_require__(6699);\n__webpack_require__(5192);\n__webpack_require__(9653);\n__webpack_require__(3123);\n__webpack_require__(4723);\n__webpack_require__(8734);\n__webpack_require__(2472);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(7803);\n__webpack_require__(3290);\n__webpack_require__(9601);\n__webpack_require__(3210);\n__webpack_require__(9254);\n__webpack_require__(7397);\n__webpack_require__(8674);\nvar _stream = _interopRequireDefault(__webpack_require__(2830));\nvar _zlib = _interopRequireDefault(__webpack_require__(2635));\nvar _cryptoJs = _interopRequireDefault(__webpack_require__(5153));\nvar _fontkit = _interopRequireDefault(__webpack_require__(1917));\nvar _events = __webpack_require__(7187);\nvar _linebreak = _interopRequireDefault(__webpack_require__(7337));\nvar _pngJs = _interopRequireDefault(__webpack_require__(8478));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nvar fs = __webpack_require__(3857);\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n  return keys;\n}\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n  return target;\n}\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n  return _setPrototypeOf(o, p);\n}\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n  try {\n    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n  return self;\n}\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n  return _assertThisInitialized(self);\n}\nfunction _createSuper(Derived) {\n  var hasNativeReflectConstruct = _isNativeReflectConstruct();\n  return function _createSuperInternal() {\n    var Super = _getPrototypeOf(Derived),\n      result;\n    if (hasNativeReflectConstruct) {\n      var NewTarget = _getPrototypeOf(this).constructor;\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n    return _possibleConstructorReturn(this, result);\n  };\n}\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\nfunction _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n  return _arr;\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n  return arr2;\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n  var it;\n  if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n    if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n      if (it) o = it;\n      var i = 0;\n      var F = function F() {};\n      return {\n        s: F,\n        n: function n() {\n          if (i >= o.length) return {\n            done: true\n          };\n          return {\n            done: false,\n            value: o[i++]\n          };\n        },\n        e: function e(_e2) {\n          throw _e2;\n        },\n        f: F\n      };\n    }\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n  var normalCompletion = true,\n    didErr = false,\n    err;\n  return {\n    s: function s() {\n      it = o[Symbol.iterator]();\n    },\n    n: function n() {\n      var step = it.next();\n      normalCompletion = step.done;\n      return step;\n    },\n    e: function e(_e3) {\n      didErr = true;\n      err = _e3;\n    },\n    f: function f() {\n      try {\n        if (!normalCompletion && it.return != null) it.return();\n      } finally {\n        if (didErr) throw err;\n      }\n    }\n  };\n}\n\n/*\nPDFAbstractReference - abstract class for PDF reference\n*/\nvar PDFAbstractReference = /*#__PURE__*/function () {\n  function PDFAbstractReference() {\n    _classCallCheck(this, PDFAbstractReference);\n  }\n  _createClass(PDFAbstractReference, [{\n    key: \"toString\",\n    value: function toString() {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }]);\n  return PDFAbstractReference;\n}();\nvar PDFTree = /*#__PURE__*/function () {\n  function PDFTree() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _classCallCheck(this, PDFTree);\n    this._items = {}; // disable /Limits output for this tree\n\n    this.limits = typeof options.limits === 'boolean' ? options.limits : true;\n  }\n  _createClass(PDFTree, [{\n    key: \"add\",\n    value: function add(key, val) {\n      return this._items[key] = val;\n    }\n  }, {\n    key: \"get\",\n    value: function get(key) {\n      return this._items[key];\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      var _this = this;\n\n      // Needs to be sorted by key\n      var sortedKeys = Object.keys(this._items).sort(function (a, b) {\n        return _this._compareKeys(a, b);\n      });\n      var out = ['<<'];\n      if (this.limits && sortedKeys.length > 1) {\n        var first = sortedKeys[0],\n          last = sortedKeys[sortedKeys.length - 1];\n        out.push(\"  /Limits \".concat(PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])));\n      }\n      out.push(\"  /\".concat(this._keysName(), \" [\"));\n      var _iterator = _createForOfIteratorHelper(sortedKeys),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var key = _step.value;\n          out.push(\"    \".concat(PDFObject.convert(this._dataForKey(key)), \" \").concat(PDFObject.convert(this._items[key])));\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      out.push(']');\n      out.push('>>');\n      return out.join('\\n');\n    }\n  }, {\n    key: \"_compareKeys\",\n    value: function _compareKeys() /*a, b*/\n    {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }, {\n    key: \"_keysName\",\n    value: function _keysName() {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }, {\n    key: \"_dataForKey\",\n    value: function _dataForKey() /*k*/\n    {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }]);\n  return PDFTree;\n}();\nvar pad = function pad(str, length) {\n  return (Array(length + 1).join('0') + str).slice(-length);\n};\nvar escapableRe = /[\\n\\r\\t\\b\\f()\\\\]/g;\nvar escapable = {\n  '\\n': '\\\\n',\n  '\\r': '\\\\r',\n  '\\t': '\\\\t',\n  '\\b': '\\\\b',\n  '\\f': '\\\\f',\n  '\\\\': '\\\\\\\\',\n  '(': '\\\\(',\n  ')': '\\\\)'\n}; // Convert little endian UTF-16 to big endian\n\nvar swapBytes = function swapBytes(buff) {\n  var l = buff.length;\n  if (l & 0x01) {\n    throw new Error('Buffer length must be even');\n  } else {\n    for (var i = 0, end = l - 1; i < end; i += 2) {\n      var a = buff[i];\n      buff[i] = buff[i + 1];\n      buff[i + 1] = a;\n    }\n  }\n  return buff;\n};\nvar PDFObject = /*#__PURE__*/function () {\n  function PDFObject() {\n    _classCallCheck(this, PDFObject);\n  }\n  _createClass(PDFObject, null, [{\n    key: \"convert\",\n    value: function convert(object) {\n      var encryptFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      // String literals are converted to the PDF name type\n      if (typeof object === 'string') {\n        return \"/\".concat(object); // String objects are converted to PDF strings (UTF-16)\n      } else if (object instanceof String) {\n        var string = object; // Detect if this is a unicode string\n\n        var isUnicode = false;\n        for (var i = 0, end = string.length; i < end; i++) {\n          if (string.charCodeAt(i) > 0x7f) {\n            isUnicode = true;\n            break;\n          }\n        } // If so, encode it as big endian UTF-16\n\n        var stringBuffer;\n        if (isUnicode) {\n          stringBuffer = swapBytes(Buffer.from(\"\\uFEFF\".concat(string), 'utf16le'));\n        } else {\n          stringBuffer = Buffer.from(string.valueOf(), 'ascii');\n        } // Encrypt the string when necessary\n\n        if (encryptFn) {\n          string = encryptFn(stringBuffer).toString('binary');\n        } else {\n          string = stringBuffer.toString('binary');\n        } // Escape characters as required by the spec\n\n        string = string.replace(escapableRe, function (c) {\n          return escapable[c];\n        });\n        return \"(\".concat(string, \")\"); // Buffers are converted to PDF hex strings\n      } else if (Buffer.isBuffer(object)) {\n        return \"<\".concat(object.toString('hex'), \">\");\n      } else if (object instanceof PDFAbstractReference || object instanceof PDFTree) {\n        return object.toString();\n      } else if (object instanceof Date) {\n        var _string = \"D:\".concat(pad(object.getUTCFullYear(), 4)) + pad(object.getUTCMonth() + 1, 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z'; // Encrypt the string when necessary\n\n        if (encryptFn) {\n          _string = encryptFn(Buffer.from(_string, 'ascii')).toString('binary'); // Escape characters as required by the spec\n\n          _string = _string.replace(escapableRe, function (c) {\n            return escapable[c];\n          });\n        }\n        return \"(\".concat(_string, \")\");\n      } else if (Array.isArray(object)) {\n        var items = object.map(function (e) {\n          return PDFObject.convert(e, encryptFn);\n        }).join(' ');\n        return \"[\".concat(items, \"]\");\n      } else if ({}.toString.call(object) === '[object Object]') {\n        var out = ['<<'];\n        for (var key in object) {\n          var val = object[key];\n          out.push(\"/\".concat(key, \" \").concat(PDFObject.convert(val, encryptFn)));\n        }\n        out.push('>>');\n        return out.join('\\n');\n      } else if (typeof object === 'number') {\n        return PDFObject.number(object);\n      } else {\n        return \"\".concat(object);\n      }\n    }\n  }, {\n    key: \"number\",\n    value: function number(n) {\n      if (n > -1e21 && n < 1e21) {\n        return Math.round(n * 1e6) / 1e6;\n      }\n      throw new Error(\"unsupported number: \".concat(n));\n    }\n  }]);\n  return PDFObject;\n}();\nvar PDFReference = /*#__PURE__*/function (_PDFAbstractReference) {\n  _inherits(PDFReference, _PDFAbstractReference);\n  var _super = _createSuper(PDFReference);\n  function PDFReference(document, id) {\n    var _this;\n    var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    _classCallCheck(this, PDFReference);\n    _this = _super.call(this);\n    _this.document = document;\n    _this.id = id;\n    _this.data = data;\n    _this.gen = 0;\n    _this.compress = _this.document.compress && !_this.data.Filter;\n    _this.uncompressedLength = 0;\n    _this.buffer = [];\n    return _this;\n  }\n  _createClass(PDFReference, [{\n    key: \"write\",\n    value: function write(chunk) {\n      if (!Buffer.isBuffer(chunk)) {\n        chunk = Buffer.from(chunk + '\\n', 'binary');\n      }\n      this.uncompressedLength += chunk.length;\n      if (this.data.Length == null) {\n        this.data.Length = 0;\n      }\n      this.buffer.push(chunk);\n      this.data.Length += chunk.length;\n      if (this.compress) {\n        return this.data.Filter = 'FlateDecode';\n      }\n    }\n  }, {\n    key: \"end\",\n    value: function end(chunk) {\n      if (chunk) {\n        this.write(chunk);\n      }\n      return this.finalize();\n    }\n  }, {\n    key: \"finalize\",\n    value: function finalize() {\n      this.offset = this.document._offset;\n      var encryptFn = this.document._security ? this.document._security.getEncryptFn(this.id, this.gen) : null;\n      if (this.buffer.length) {\n        this.buffer = Buffer.concat(this.buffer);\n        if (this.compress) {\n          this.buffer = _zlib.default.deflateSync(this.buffer);\n        }\n        if (encryptFn) {\n          this.buffer = encryptFn(this.buffer);\n        }\n        this.data.Length = this.buffer.length;\n      }\n      this.document._write(\"\".concat(this.id, \" \").concat(this.gen, \" obj\"));\n      this.document._write(PDFObject.convert(this.data, encryptFn));\n      if (this.buffer.length) {\n        this.document._write('stream');\n        this.document._write(this.buffer);\n        this.buffer = []; // free up memory\n\n        this.document._write('\\nendstream');\n      }\n      this.document._write('endobj');\n      this.document._refEnd(this);\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return \"\".concat(this.id, \" \").concat(this.gen, \" R\");\n    }\n  }]);\n  return PDFReference;\n}(PDFAbstractReference);\n\n/*\nPDFPage - represents a single page in the PDF document\nBy Devon Govett\n*/\nvar DEFAULT_MARGINS = {\n  top: 72,\n  left: 72,\n  bottom: 72,\n  right: 72\n};\nvar SIZES = {\n  '4A0': [4767.87, 6740.79],\n  '2A0': [3370.39, 4767.87],\n  A0: [2383.94, 3370.39],\n  A1: [1683.78, 2383.94],\n  A2: [1190.55, 1683.78],\n  A3: [841.89, 1190.55],\n  A4: [595.28, 841.89],\n  A5: [419.53, 595.28],\n  A6: [297.64, 419.53],\n  A7: [209.76, 297.64],\n  A8: [147.4, 209.76],\n  A9: [104.88, 147.4],\n  A10: [73.7, 104.88],\n  B0: [2834.65, 4008.19],\n  B1: [2004.09, 2834.65],\n  B2: [1417.32, 2004.09],\n  B3: [1000.63, 1417.32],\n  B4: [708.66, 1000.63],\n  B5: [498.9, 708.66],\n  B6: [354.33, 498.9],\n  B7: [249.45, 354.33],\n  B8: [175.75, 249.45],\n  B9: [124.72, 175.75],\n  B10: [87.87, 124.72],\n  C0: [2599.37, 3676.54],\n  C1: [1836.85, 2599.37],\n  C2: [1298.27, 1836.85],\n  C3: [918.43, 1298.27],\n  C4: [649.13, 918.43],\n  C5: [459.21, 649.13],\n  C6: [323.15, 459.21],\n  C7: [229.61, 323.15],\n  C8: [161.57, 229.61],\n  C9: [113.39, 161.57],\n  C10: [79.37, 113.39],\n  RA0: [2437.8, 3458.27],\n  RA1: [1729.13, 2437.8],\n  RA2: [1218.9, 1729.13],\n  RA3: [864.57, 1218.9],\n  RA4: [609.45, 864.57],\n  SRA0: [2551.18, 3628.35],\n  SRA1: [1814.17, 2551.18],\n  SRA2: [1275.59, 1814.17],\n  SRA3: [907.09, 1275.59],\n  SRA4: [637.8, 907.09],\n  EXECUTIVE: [521.86, 756.0],\n  FOLIO: [612.0, 936.0],\n  LEGAL: [612.0, 1008.0],\n  LETTER: [612.0, 792.0],\n  TABLOID: [792.0, 1224.0]\n};\nvar PDFPage = /*#__PURE__*/function () {\n  function PDFPage(document) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    _classCallCheck(this, PDFPage);\n    this.document = document;\n    this.size = options.size || 'letter';\n    this.layout = options.layout || 'portrait'; // process margins\n\n    if (typeof options.margin === 'number') {\n      this.margins = {\n        top: options.margin,\n        left: options.margin,\n        bottom: options.margin,\n        right: options.margin\n      }; // default to 1 inch margins\n    } else {\n      this.margins = options.margins || DEFAULT_MARGINS;\n    } // calculate page dimensions\n\n    var dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()];\n    this.width = dimensions[this.layout === 'portrait' ? 0 : 1];\n    this.height = dimensions[this.layout === 'portrait' ? 1 : 0];\n    this.content = this.document.ref(); // Initialize the Font, XObject, and ExtGState dictionaries\n\n    this.resources = this.document.ref({\n      ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']\n    }); // The page dictionary\n\n    this.dictionary = this.document.ref({\n      Type: 'Page',\n      Parent: this.document._root.data.Pages,\n      MediaBox: [0, 0, this.width, this.height],\n      Contents: this.content,\n      Resources: this.resources\n    });\n    this.markings = [];\n  } // Lazily create these objects\n\n  _createClass(PDFPage, [{\n    key: \"maxY\",\n    value: function maxY() {\n      return this.height - this.margins.bottom;\n    }\n  }, {\n    key: \"write\",\n    value: function write(chunk) {\n      return this.content.write(chunk);\n    }\n  }, {\n    key: \"end\",\n    value: function end() {\n      this.dictionary.end();\n      this.resources.end();\n      return this.content.end();\n    }\n  }, {\n    key: \"fonts\",\n    get: function get() {\n      var data = this.resources.data;\n      return data.Font != null ? data.Font : data.Font = {};\n    }\n  }, {\n    key: \"xobjects\",\n    get: function get() {\n      var data = this.resources.data;\n      return data.XObject != null ? data.XObject : data.XObject = {};\n    }\n  }, {\n    key: \"ext_gstates\",\n    get: function get() {\n      var data = this.resources.data;\n      return data.ExtGState != null ? data.ExtGState : data.ExtGState = {};\n    }\n  }, {\n    key: \"patterns\",\n    get: function get() {\n      var data = this.resources.data;\n      return data.Pattern != null ? data.Pattern : data.Pattern = {};\n    }\n  }, {\n    key: \"colorSpaces\",\n    get: function get() {\n      var data = this.resources.data;\n      return data.ColorSpace || (data.ColorSpace = {});\n    }\n  }, {\n    key: \"annotations\",\n    get: function get() {\n      var data = this.dictionary.data;\n      return data.Annots != null ? data.Annots : data.Annots = [];\n    }\n  }, {\n    key: \"structParentTreeKey\",\n    get: function get() {\n      var data = this.dictionary.data;\n      return data.StructParents != null ? data.StructParents : data.StructParents = this.document.createStructParentTreeNextKey();\n    }\n  }]);\n  return PDFPage;\n}();\nvar PDFNameTree = /*#__PURE__*/function (_PDFTree) {\n  _inherits(PDFNameTree, _PDFTree);\n  var _super = _createSuper(PDFNameTree);\n  function PDFNameTree() {\n    _classCallCheck(this, PDFNameTree);\n    return _super.apply(this, arguments);\n  }\n  _createClass(PDFNameTree, [{\n    key: \"_compareKeys\",\n    value: function _compareKeys(a, b) {\n      return a.localeCompare(b);\n    }\n  }, {\n    key: \"_keysName\",\n    value: function _keysName() {\n      return \"Names\";\n    }\n  }, {\n    key: \"_dataForKey\",\n    value: function _dataForKey(k) {\n      return new String(k);\n    }\n  }]);\n  return PDFNameTree;\n}(PDFTree);\n\n/**\n * Check if value is in a range group.\n * @param {number} value\n * @param {number[]} rangeGroup\n * @returns {boolean}\n */\nfunction inRange(value, rangeGroup) {\n  if (value < rangeGroup[0]) return false;\n  var startRange = 0;\n  var endRange = rangeGroup.length / 2;\n  while (startRange <= endRange) {\n    var middleRange = Math.floor((startRange + endRange) / 2); // actual array index\n\n    var arrayIndex = middleRange * 2; // Check if value is in range pointed by actual index\n\n    if (value >= rangeGroup[arrayIndex] && value <= rangeGroup[arrayIndex + 1]) {\n      return true;\n    }\n    if (value > rangeGroup[arrayIndex + 1]) {\n      // Search Right Side Of Array\n      startRange = middleRange + 1;\n    } else {\n      // Search Left Side Of Array\n      endRange = middleRange - 1;\n    }\n  }\n  return false;\n}\n\n/**\n * A.1 Unassigned code points in Unicode 3.2\n * @link https://tools.ietf.org/html/rfc3454#appendix-A.1\n */\n\nvar unassigned_code_points = [0x0221, 0x0221, 0x0234, 0x024f, 0x02ae, 0x02af, 0x02ef, 0x02ff, 0x0350, 0x035f, 0x0370, 0x0373, 0x0376, 0x0379, 0x037b, 0x037d, 0x037f, 0x0383, 0x038b, 0x038b, 0x038d, 0x038d, 0x03a2, 0x03a2, 0x03cf, 0x03cf, 0x03f7, 0x03ff, 0x0487, 0x0487, 0x04cf, 0x04cf, 0x04f6, 0x04f7, 0x04fa, 0x04ff, 0x0510, 0x0530, 0x0557, 0x0558, 0x0560, 0x0560, 0x0588, 0x0588, 0x058b, 0x0590, 0x05a2, 0x05a2, 0x05ba, 0x05ba, 0x05c5, 0x05cf, 0x05eb, 0x05ef, 0x05f5, 0x060b, 0x060d, 0x061a, 0x061c, 0x061e, 0x0620, 0x0620, 0x063b, 0x063f, 0x0656, 0x065f, 0x06ee, 0x06ef, 0x06ff, 0x06ff, 0x070e, 0x070e, 0x072d, 0x072f, 0x074b, 0x077f, 0x07b2, 0x0900, 0x0904, 0x0904, 0x093a, 0x093b, 0x094e, 0x094f, 0x0955, 0x0957, 0x0971, 0x0980, 0x0984, 0x0984, 0x098d, 0x098e, 0x0991, 0x0992, 0x09a9, 0x09a9, 0x09b1, 0x09b1, 0x09b3, 0x09b5, 0x09ba, 0x09bb, 0x09bd, 0x09bd, 0x09c5, 0x09c6, 0x09c9, 0x09ca, 0x09ce, 0x09d6, 0x09d8, 0x09db, 0x09de, 0x09de, 0x09e4, 0x09e5, 0x09fb, 0x0a01, 0x0a03, 0x0a04, 0x0a0b, 0x0a0e, 0x0a11, 0x0a12, 0x0a29, 0x0a29, 0x0a31, 0x0a31, 0x0a34, 0x0a34, 0x0a37, 0x0a37, 0x0a3a, 0x0a3b, 0x0a3d, 0x0a3d, 0x0a43, 0x0a46, 0x0a49, 0x0a4a, 0x0a4e, 0x0a58, 0x0a5d, 0x0a5d, 0x0a5f, 0x0a65, 0x0a75, 0x0a80, 0x0a84, 0x0a84, 0x0a8c, 0x0a8c, 0x0a8e, 0x0a8e, 0x0a92, 0x0a92, 0x0aa9, 0x0aa9, 0x0ab1, 0x0ab1, 0x0ab4, 0x0ab4, 0x0aba, 0x0abb, 0x0ac6, 0x0ac6, 0x0aca, 0x0aca, 0x0ace, 0x0acf, 0x0ad1, 0x0adf, 0x0ae1, 0x0ae5, 0x0af0, 0x0b00, 0x0b04, 0x0b04, 0x0b0d, 0x0b0e, 0x0b11, 0x0b12, 0x0b29, 0x0b29, 0x0b31, 0x0b31, 0x0b34, 0x0b35, 0x0b3a, 0x0b3b, 0x0b44, 0x0b46, 0x0b49, 0x0b4a, 0x0b4e, 0x0b55, 0x0b58, 0x0b5b, 0x0b5e, 0x0b5e, 0x0b62, 0x0b65, 0x0b71, 0x0b81, 0x0b84, 0x0b84, 0x0b8b, 0x0b8d, 0x0b91, 0x0b91, 0x0b96, 0x0b98, 0x0b9b, 0x0b9b, 0x0b9d, 0x0b9d, 0x0ba0, 0x0ba2, 0x0ba5, 0x0ba7, 0x0bab, 0x0bad, 0x0bb6, 0x0bb6, 0x0bba, 0x0bbd, 0x0bc3, 0x0bc5, 0x0bc9, 0x0bc9, 0x0bce, 0x0bd6, 0x0bd8, 0x0be6, 0x0bf3, 0x0c00, 0x0c04, 0x0c04, 0x0c0d, 0x0c0d, 0x0c11, 0x0c11, 0x0c29, 0x0c29, 0x0c34, 0x0c34, 0x0c3a, 0x0c3d, 0x0c45, 0x0c45, 0x0c49, 0x0c49, 0x0c4e, 0x0c54, 0x0c57, 0x0c5f, 0x0c62, 0x0c65, 0x0c70, 0x0c81, 0x0c84, 0x0c84, 0x0c8d, 0x0c8d, 0x0c91, 0x0c91, 0x0ca9, 0x0ca9, 0x0cb4, 0x0cb4, 0x0cba, 0x0cbd, 0x0cc5, 0x0cc5, 0x0cc9, 0x0cc9, 0x0cce, 0x0cd4, 0x0cd7, 0x0cdd, 0x0cdf, 0x0cdf, 0x0ce2, 0x0ce5, 0x0cf0, 0x0d01, 0x0d04, 0x0d04, 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d29, 0x0d29, 0x0d3a, 0x0d3d, 0x0d44, 0x0d45, 0x0d49, 0x0d49, 0x0d4e, 0x0d56, 0x0d58, 0x0d5f, 0x0d62, 0x0d65, 0x0d70, 0x0d81, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, 0x0dbc, 0x0dbc, 0x0dbe, 0x0dbf, 0x0dc7, 0x0dc9, 0x0dcb, 0x0dce, 0x0dd5, 0x0dd5, 0x0dd7, 0x0dd7, 0x0de0, 0x0df1, 0x0df5, 0x0e00, 0x0e3b, 0x0e3e, 0x0e5c, 0x0e80, 0x0e83, 0x0e83, 0x0e85, 0x0e86, 0x0e89, 0x0e89, 0x0e8b, 0x0e8c, 0x0e8e, 0x0e93, 0x0e98, 0x0e98, 0x0ea0, 0x0ea0, 0x0ea4, 0x0ea4, 0x0ea6, 0x0ea6, 0x0ea8, 0x0ea9, 0x0eac, 0x0eac, 0x0eba, 0x0eba, 0x0ebe, 0x0ebf, 0x0ec5, 0x0ec5, 0x0ec7, 0x0ec7, 0x0ece, 0x0ecf, 0x0eda, 0x0edb, 0x0ede, 0x0eff, 0x0f48, 0x0f48, 0x0f6b, 0x0f70, 0x0f8c, 0x0f8f, 0x0f98, 0x0f98, 0x0fbd, 0x0fbd, 0x0fcd, 0x0fce, 0x0fd0, 0x0fff, 0x1022, 0x1022, 0x1028, 0x1028, 0x102b, 0x102b, 0x1033, 0x1035, 0x103a, 0x103f, 0x105a, 0x109f, 0x10c6, 0x10cf, 0x10f9, 0x10fa, 0x10fc, 0x10ff, 0x115a, 0x115e, 0x11a3, 0x11a7, 0x11fa, 0x11ff, 0x1207, 0x1207, 0x1247, 0x1247, 0x1249, 0x1249, 0x124e, 0x124f, 0x1257, 0x1257, 0x1259, 0x1259, 0x125e, 0x125f, 0x1287, 0x1287, 0x1289, 0x1289, 0x128e, 0x128f, 0x12af, 0x12af, 0x12b1, 0x12b1, 0x12b6, 0x12b7, 0x12bf, 0x12bf, 0x12c1, 0x12c1, 0x12c6, 0x12c7, 0x12cf, 0x12cf, 0x12d7, 0x12d7, 0x12ef, 0x12ef, 0x130f, 0x130f, 0x1311, 0x1311, 0x1316, 0x1317, 0x131f, 0x131f, 0x1347, 0x1347, 0x135b, 0x1360, 0x137d, 0x139f, 0x13f5, 0x1400, 0x1677, 0x167f, 0x169d, 0x169f, 0x16f1, 0x16ff, 0x170d, 0x170d, 0x1715, 0x171f, 0x1737, 0x173f, 0x1754, 0x175f, 0x176d, 0x176d, 0x1771, 0x1771, 0x1774, 0x177f, 0x17dd, 0x17df, 0x17ea, 0x17ff, 0x180f, 0x180f, 0x181a, 0x181f, 0x1878, 0x187f, 0x18aa, 0x1dff, 0x1e9c, 0x1e9f, 0x1efa, 0x1eff, 0x1f16, 0x1f17, 0x1f1e, 0x1f1f, 0x1f46, 0x1f47, 0x1f4e, 0x1f4f, 0x1f58, 0x1f58, 0x1f5a, 0x1f5a, 0x1f5c, 0x1f5c, 0x1f5e, 0x1f5e, 0x1f7e, 0x1f7f, 0x1fb5, 0x1fb5, 0x1fc5, 0x1fc5, 0x1fd4, 0x1fd5, 0x1fdc, 0x1fdc, 0x1ff0, 0x1ff1, 0x1ff5, 0x1ff5, 0x1fff, 0x1fff, 0x2053, 0x2056, 0x2058, 0x205e, 0x2064, 0x2069, 0x2072, 0x2073, 0x208f, 0x209f, 0x20b2, 0x20cf, 0x20eb, 0x20ff, 0x213b, 0x213c, 0x214c, 0x2152, 0x2184, 0x218f, 0x23cf, 0x23ff, 0x2427, 0x243f, 0x244b, 0x245f, 0x24ff, 0x24ff, 0x2614, 0x2615, 0x2618, 0x2618, 0x267e, 0x267f, 0x268a, 0x2700, 0x2705, 0x2705, 0x270a, 0x270b, 0x2728, 0x2728, 0x274c, 0x274c, 0x274e, 0x274e, 0x2753, 0x2755, 0x2757, 0x2757, 0x275f, 0x2760, 0x2795, 0x2797, 0x27b0, 0x27b0, 0x27bf, 0x27cf, 0x27ec, 0x27ef, 0x2b00, 0x2e7f, 0x2e9a, 0x2e9a, 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, 0x2ffc, 0x2fff, 0x3040, 0x3040, 0x3097, 0x3098, 0x3100, 0x3104, 0x312d, 0x3130, 0x318f, 0x318f, 0x31b8, 0x31ef, 0x321d, 0x321f, 0x3244, 0x3250, 0x327c, 0x327e, 0x32cc, 0x32cf, 0x32ff, 0x32ff, 0x3377, 0x337a, 0x33de, 0x33df, 0x33ff, 0x33ff, 0x4db6, 0x4dff, 0x9fa6, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xabff, 0xd7a4, 0xd7ff, 0xfa2e, 0xfa2f, 0xfa6b, 0xfaff, 0xfb07, 0xfb12, 0xfb18, 0xfb1c, 0xfb37, 0xfb37, 0xfb3d, 0xfb3d, 0xfb3f, 0xfb3f, 0xfb42, 0xfb42, 0xfb45, 0xfb45, 0xfbb2, 0xfbd2, 0xfd40, 0xfd4f, 0xfd90, 0xfd91, 0xfdc8, 0xfdcf, 0xfdfd, 0xfdff, 0xfe10, 0xfe1f, 0xfe24, 0xfe2f, 0xfe47, 0xfe48, 0xfe53, 0xfe53, 0xfe67, 0xfe67, 0xfe6c, 0xfe6f, 0xfe75, 0xfe75, 0xfefd, 0xfefe, 0xff00, 0xff00, 0xffbf, 0xffc1, 0xffc8, 0xffc9, 0xffd0, 0xffd1, 0xffd8, 0xffd9, 0xffdd, 0xffdf, 0xffe7, 0xffe7, 0xffef, 0xfff8, 0x10000, 0x102ff, 0x1031f, 0x1031f, 0x10324, 0x1032f, 0x1034b, 0x103ff, 0x10426, 0x10427, 0x1044e, 0x1cfff, 0x1d0f6, 0x1d0ff, 0x1d127, 0x1d129, 0x1d1de, 0x1d3ff, 0x1d455, 0x1d455, 0x1d49d, 0x1d49d, 0x1d4a0, 0x1d4a1, 0x1d4a3, 0x1d4a4, 0x1d4a7, 0x1d4a8, 0x1d4ad, 0x1d4ad, 0x1d4ba, 0x1d4ba, 0x1d4bc, 0x1d4bc, 0x1d4c1, 0x1d4c1, 0x1d4c4, 0x1d4c4, 0x1d506, 0x1d506, 0x1d50b, 0x1d50c, 0x1d515, 0x1d515, 0x1d51d, 0x1d51d, 0x1d53a, 0x1d53a, 0x1d53f, 0x1d53f, 0x1d545, 0x1d545, 0x1d547, 0x1d549, 0x1d551, 0x1d551, 0x1d6a4, 0x1d6a7, 0x1d7ca, 0x1d7cd, 0x1d800, 0x1fffd, 0x2a6d7, 0x2f7ff, 0x2fa1e, 0x2fffd, 0x30000, 0x3fffd, 0x40000, 0x4fffd, 0x50000, 0x5fffd, 0x60000, 0x6fffd, 0x70000, 0x7fffd, 0x80000, 0x8fffd, 0x90000, 0x9fffd, 0xa0000, 0xafffd, 0xb0000, 0xbfffd, 0xc0000, 0xcfffd, 0xd0000, 0xdfffd, 0xe0000, 0xe0000, 0xe0002, 0xe001f, 0xe0080, 0xefffd]; // prettier-ignore-end\n\nvar isUnassignedCodePoint = function isUnassignedCodePoint(character) {\n  return inRange(character, unassigned_code_points);\n}; // prettier-ignore-start\n\n/**\n * B.1 Commonly mapped to nothing\n * @link https://tools.ietf.org/html/rfc3454#appendix-B.1\n */\n\nvar commonly_mapped_to_nothing = [0x00ad, 0x00ad, 0x034f, 0x034f, 0x1806, 0x1806, 0x180b, 0x180b, 0x180c, 0x180c, 0x180d, 0x180d, 0x200b, 0x200b, 0x200c, 0x200c, 0x200d, 0x200d, 0x2060, 0x2060, 0xfe00, 0xfe00, 0xfe01, 0xfe01, 0xfe02, 0xfe02, 0xfe03, 0xfe03, 0xfe04, 0xfe04, 0xfe05, 0xfe05, 0xfe06, 0xfe06, 0xfe07, 0xfe07, 0xfe08, 0xfe08, 0xfe09, 0xfe09, 0xfe0a, 0xfe0a, 0xfe0b, 0xfe0b, 0xfe0c, 0xfe0c, 0xfe0d, 0xfe0d, 0xfe0e, 0xfe0e, 0xfe0f, 0xfe0f, 0xfeff, 0xfeff]; // prettier-ignore-end\n\nvar isCommonlyMappedToNothing = function isCommonlyMappedToNothing(character) {\n  return inRange(character, commonly_mapped_to_nothing);\n}; // prettier-ignore-start\n\n/**\n * C.1.2 Non-ASCII space characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2\n */\n\nvar non_ASCII_space_characters = [0x00a0, 0x00a0\n/* NO-BREAK SPACE */, 0x1680, 0x1680\n/* OGHAM SPACE MARK */, 0x2000, 0x2000\n/* EN QUAD */, 0x2001, 0x2001\n/* EM QUAD */, 0x2002, 0x2002\n/* EN SPACE */, 0x2003, 0x2003\n/* EM SPACE */, 0x2004, 0x2004\n/* THREE-PER-EM SPACE */, 0x2005, 0x2005\n/* FOUR-PER-EM SPACE */, 0x2006, 0x2006\n/* SIX-PER-EM SPACE */, 0x2007, 0x2007\n/* FIGURE SPACE */, 0x2008, 0x2008\n/* PUNCTUATION SPACE */, 0x2009, 0x2009\n/* THIN SPACE */, 0x200a, 0x200a\n/* HAIR SPACE */, 0x200b, 0x200b\n/* ZERO WIDTH SPACE */, 0x202f, 0x202f\n/* NARROW NO-BREAK SPACE */, 0x205f, 0x205f\n/* MEDIUM MATHEMATICAL SPACE */, 0x3000, 0x3000\n/* IDEOGRAPHIC SPACE */]; // prettier-ignore-end\n\nvar isNonASCIISpaceCharacter = function isNonASCIISpaceCharacter(character) {\n  return inRange(character, non_ASCII_space_characters);\n}; // prettier-ignore-start\n\nvar non_ASCII_controls_characters = [\n/**\n * C.2.2 Non-ASCII control characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2\n */\n0x0080, 0x009f\n/* [CONTROL CHARACTERS] */, 0x06dd, 0x06dd\n/* ARABIC END OF AYAH */, 0x070f, 0x070f\n/* SYRIAC ABBREVIATION MARK */, 0x180e, 0x180e\n/* MONGOLIAN VOWEL SEPARATOR */, 0x200c, 0x200c\n/* ZERO WIDTH NON-JOINER */, 0x200d, 0x200d\n/* ZERO WIDTH JOINER */, 0x2028, 0x2028\n/* LINE SEPARATOR */, 0x2029, 0x2029\n/* PARAGRAPH SEPARATOR */, 0x2060, 0x2060\n/* WORD JOINER */, 0x2061, 0x2061\n/* FUNCTION APPLICATION */, 0x2062, 0x2062\n/* INVISIBLE TIMES */, 0x2063, 0x2063\n/* INVISIBLE SEPARATOR */, 0x206a, 0x206f\n/* [CONTROL CHARACTERS] */, 0xfeff, 0xfeff\n/* ZERO WIDTH NO-BREAK SPACE */, 0xfff9, 0xfffc\n/* [CONTROL CHARACTERS] */, 0x1d173, 0x1d17a\n/* [MUSICAL CONTROL CHARACTERS] */];\n\nvar non_character_codepoints = [\n/**\n * C.4 Non-character code points\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.4\n */\n0xfdd0, 0xfdef\n/* [NONCHARACTER CODE POINTS] */, 0xfffe, 0xffff\n/* [NONCHARACTER CODE POINTS] */, 0x1fffe, 0x1ffff\n/* [NONCHARACTER CODE POINTS] */, 0x2fffe, 0x2ffff\n/* [NONCHARACTER CODE POINTS] */, 0x3fffe, 0x3ffff\n/* [NONCHARACTER CODE POINTS] */, 0x4fffe, 0x4ffff\n/* [NONCHARACTER CODE POINTS] */, 0x5fffe, 0x5ffff\n/* [NONCHARACTER CODE POINTS] */, 0x6fffe, 0x6ffff\n/* [NONCHARACTER CODE POINTS] */, 0x7fffe, 0x7ffff\n/* [NONCHARACTER CODE POINTS] */, 0x8fffe, 0x8ffff\n/* [NONCHARACTER CODE POINTS] */, 0x9fffe, 0x9ffff\n/* [NONCHARACTER CODE POINTS] */, 0xafffe, 0xaffff\n/* [NONCHARACTER CODE POINTS] */, 0xbfffe, 0xbffff\n/* [NONCHARACTER CODE POINTS] */, 0xcfffe, 0xcffff\n/* [NONCHARACTER CODE POINTS] */, 0xdfffe, 0xdffff\n/* [NONCHARACTER CODE POINTS] */, 0xefffe, 0xeffff\n/* [NONCHARACTER CODE POINTS] */, 0x10fffe, 0x10ffff\n/* [NONCHARACTER CODE POINTS] */];\n/**\n * 2.3.  Prohibited Output\n */\n\nvar prohibited_characters = [\n/**\n * C.2.1 ASCII control characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1\n */\n0, 0x001f\n/* [CONTROL CHARACTERS] */, 0x007f, 0x007f\n/* DELETE */,\n/**\n * C.8 Change display properties or are deprecated\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.8\n */\n0x0340, 0x0340\n/* COMBINING GRAVE TONE MARK */, 0x0341, 0x0341\n/* COMBINING ACUTE TONE MARK */, 0x200e, 0x200e\n/* LEFT-TO-RIGHT MARK */, 0x200f, 0x200f\n/* RIGHT-TO-LEFT MARK */, 0x202a, 0x202a\n/* LEFT-TO-RIGHT EMBEDDING */, 0x202b, 0x202b\n/* RIGHT-TO-LEFT EMBEDDING */, 0x202c, 0x202c\n/* POP DIRECTIONAL FORMATTING */, 0x202d, 0x202d\n/* LEFT-TO-RIGHT OVERRIDE */, 0x202e, 0x202e\n/* RIGHT-TO-LEFT OVERRIDE */, 0x206a, 0x206a\n/* INHIBIT SYMMETRIC SWAPPING */, 0x206b, 0x206b\n/* ACTIVATE SYMMETRIC SWAPPING */, 0x206c, 0x206c\n/* INHIBIT ARABIC FORM SHAPING */, 0x206d, 0x206d\n/* ACTIVATE ARABIC FORM SHAPING */, 0x206e, 0x206e\n/* NATIONAL DIGIT SHAPES */, 0x206f, 0x206f\n/* NOMINAL DIGIT SHAPES */,\n/**\n * C.7 Inappropriate for canonical representation\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.7\n */\n0x2ff0, 0x2ffb\n/* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */,\n/**\n * C.5 Surrogate codes\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.5\n */\n0xd800, 0xdfff,\n/**\n * C.3 Private use\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\n */\n0xe000, 0xf8ff\n/* [PRIVATE USE, PLANE 0] */,\n/**\n * C.6 Inappropriate for plain text\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.6\n */\n0xfff9, 0xfff9\n/* INTERLINEAR ANNOTATION ANCHOR */, 0xfffa, 0xfffa\n/* INTERLINEAR ANNOTATION SEPARATOR */, 0xfffb, 0xfffb\n/* INTERLINEAR ANNOTATION TERMINATOR */, 0xfffc, 0xfffc\n/* OBJECT REPLACEMENT CHARACTER */, 0xfffd, 0xfffd\n/* REPLACEMENT CHARACTER */,\n/**\n * C.9 Tagging characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.9\n */\n0xe0001, 0xe0001\n/* LANGUAGE TAG */, 0xe0020, 0xe007f\n/* [TAGGING CHARACTERS] */,\n/**\n * C.3 Private use\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\n */\n0xf0000, 0xffffd\n/* [PRIVATE USE, PLANE 15] */, 0x100000, 0x10fffd\n/* [PRIVATE USE, PLANE 16] */]; // prettier-ignore-end\n\nvar isProhibitedCharacter = function isProhibitedCharacter(character) {\n  return inRange(character, non_ASCII_space_characters) || inRange(character, prohibited_characters) || inRange(character, non_ASCII_controls_characters) || inRange(character, non_character_codepoints);\n}; // prettier-ignore-start\n\n/**\n * D.1 Characters with bidirectional property \"R\" or \"AL\"\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.1\n */\n\nvar bidirectional_r_al = [0x05be, 0x05be, 0x05c0, 0x05c0, 0x05c3, 0x05c3, 0x05d0, 0x05ea, 0x05f0, 0x05f4, 0x061b, 0x061b, 0x061f, 0x061f, 0x0621, 0x063a, 0x0640, 0x064a, 0x066d, 0x066f, 0x0671, 0x06d5, 0x06dd, 0x06dd, 0x06e5, 0x06e6, 0x06fa, 0x06fe, 0x0700, 0x070d, 0x0710, 0x0710, 0x0712, 0x072c, 0x0780, 0x07a5, 0x07b1, 0x07b1, 0x200f, 0x200f, 0xfb1d, 0xfb1d, 0xfb1f, 0xfb28, 0xfb2a, 0xfb36, 0xfb38, 0xfb3c, 0xfb3e, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44, 0xfb46, 0xfbb1, 0xfbd3, 0xfd3d, 0xfd50, 0xfd8f, 0xfd92, 0xfdc7, 0xfdf0, 0xfdfc, 0xfe70, 0xfe74, 0xfe76, 0xfefc]; // prettier-ignore-end\n\nvar isBidirectionalRAL = function isBidirectionalRAL(character) {\n  return inRange(character, bidirectional_r_al);\n}; // prettier-ignore-start\n\n/**\n * D.2 Characters with bidirectional property \"L\"\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.2\n */\n\nvar bidirectional_l = [0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, 0x00b5, 0x00b5, 0x00ba, 0x00ba, 0x00c0, 0x00d6, 0x00d8, 0x00f6, 0x00f8, 0x0220, 0x0222, 0x0233, 0x0250, 0x02ad, 0x02b0, 0x02b8, 0x02bb, 0x02c1, 0x02d0, 0x02d1, 0x02e0, 0x02e4, 0x02ee, 0x02ee, 0x037a, 0x037a, 0x0386, 0x0386, 0x0388, 0x038a, 0x038c, 0x038c, 0x038e, 0x03a1, 0x03a3, 0x03ce, 0x03d0, 0x03f5, 0x0400, 0x0482, 0x048a, 0x04ce, 0x04d0, 0x04f5, 0x04f8, 0x04f9, 0x0500, 0x050f, 0x0531, 0x0556, 0x0559, 0x055f, 0x0561, 0x0587, 0x0589, 0x0589, 0x0903, 0x0903, 0x0905, 0x0939, 0x093d, 0x0940, 0x0949, 0x094c, 0x0950, 0x0950, 0x0958, 0x0961, 0x0964, 0x0970, 0x0982, 0x0983, 0x0985, 0x098c, 0x098f, 0x0990, 0x0993, 0x09a8, 0x09aa, 0x09b0, 0x09b2, 0x09b2, 0x09b6, 0x09b9, 0x09be, 0x09c0, 0x09c7, 0x09c8, 0x09cb, 0x09cc, 0x09d7, 0x09d7, 0x09dc, 0x09dd, 0x09df, 0x09e1, 0x09e6, 0x09f1, 0x09f4, 0x09fa, 0x0a05, 0x0a0a, 0x0a0f, 0x0a10, 0x0a13, 0x0a28, 0x0a2a, 0x0a30, 0x0a32, 0x0a33, 0x0a35, 0x0a36, 0x0a38, 0x0a39, 0x0a3e, 0x0a40, 0x0a59, 0x0a5c, 0x0a5e, 0x0a5e, 0x0a66, 0x0a6f, 0x0a72, 0x0a74, 0x0a83, 0x0a83, 0x0a85, 0x0a8b, 0x0a8d, 0x0a8d, 0x0a8f, 0x0a91, 0x0a93, 0x0aa8, 0x0aaa, 0x0ab0, 0x0ab2, 0x0ab3, 0x0ab5, 0x0ab9, 0x0abd, 0x0ac0, 0x0ac9, 0x0ac9, 0x0acb, 0x0acc, 0x0ad0, 0x0ad0, 0x0ae0, 0x0ae0, 0x0ae6, 0x0aef, 0x0b02, 0x0b03, 0x0b05, 0x0b0c, 0x0b0f, 0x0b10, 0x0b13, 0x0b28, 0x0b2a, 0x0b30, 0x0b32, 0x0b33, 0x0b36, 0x0b39, 0x0b3d, 0x0b3e, 0x0b40, 0x0b40, 0x0b47, 0x0b48, 0x0b4b, 0x0b4c, 0x0b57, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b61, 0x0b66, 0x0b70, 0x0b83, 0x0b83, 0x0b85, 0x0b8a, 0x0b8e, 0x0b90, 0x0b92, 0x0b95, 0x0b99, 0x0b9a, 0x0b9c, 0x0b9c, 0x0b9e, 0x0b9f, 0x0ba3, 0x0ba4, 0x0ba8, 0x0baa, 0x0bae, 0x0bb5, 0x0bb7, 0x0bb9, 0x0bbe, 0x0bbf, 0x0bc1, 0x0bc2, 0x0bc6, 0x0bc8, 0x0bca, 0x0bcc, 0x0bd7, 0x0bd7, 0x0be7, 0x0bf2, 0x0c01, 0x0c03, 0x0c05, 0x0c0c, 0x0c0e, 0x0c10, 0x0c12, 0x0c28, 0x0c2a, 0x0c33, 0x0c35, 0x0c39, 0x0c41, 0x0c44, 0x0c60, 0x0c61, 0x0c66, 0x0c6f, 0x0c82, 0x0c83, 0x0c85, 0x0c8c, 0x0c8e, 0x0c90, 0x0c92, 0x0ca8, 0x0caa, 0x0cb3, 0x0cb5, 0x0cb9, 0x0cbe, 0x0cbe, 0x0cc0, 0x0cc4, 0x0cc7, 0x0cc8, 0x0cca, 0x0ccb, 0x0cd5, 0x0cd6, 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0ce6, 0x0cef, 0x0d02, 0x0d03, 0x0d05, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d28, 0x0d2a, 0x0d39, 0x0d3e, 0x0d40, 0x0d46, 0x0d48, 0x0d4a, 0x0d4c, 0x0d57, 0x0d57, 0x0d60, 0x0d61, 0x0d66, 0x0d6f, 0x0d82, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, 0x0dbd, 0x0dbd, 0x0dc0, 0x0dc6, 0x0dcf, 0x0dd1, 0x0dd8, 0x0ddf, 0x0df2, 0x0df4, 0x0e01, 0x0e30, 0x0e32, 0x0e33, 0x0e40, 0x0e46, 0x0e4f, 0x0e5b, 0x0e81, 0x0e82, 0x0e84, 0x0e84, 0x0e87, 0x0e88, 0x0e8a, 0x0e8a, 0x0e8d, 0x0e8d, 0x0e94, 0x0e97, 0x0e99, 0x0e9f, 0x0ea1, 0x0ea3, 0x0ea5, 0x0ea5, 0x0ea7, 0x0ea7, 0x0eaa, 0x0eab, 0x0ead, 0x0eb0, 0x0eb2, 0x0eb3, 0x0ebd, 0x0ebd, 0x0ec0, 0x0ec4, 0x0ec6, 0x0ec6, 0x0ed0, 0x0ed9, 0x0edc, 0x0edd, 0x0f00, 0x0f17, 0x0f1a, 0x0f34, 0x0f36, 0x0f36, 0x0f38, 0x0f38, 0x0f3e, 0x0f47, 0x0f49, 0x0f6a, 0x0f7f, 0x0f7f, 0x0f85, 0x0f85, 0x0f88, 0x0f8b, 0x0fbe, 0x0fc5, 0x0fc7, 0x0fcc, 0x0fcf, 0x0fcf, 0x1000, 0x1021, 0x1023, 0x1027, 0x1029, 0x102a, 0x102c, 0x102c, 0x1031, 0x1031, 0x1038, 0x1038, 0x1040, 0x1057, 0x10a0, 0x10c5, 0x10d0, 0x10f8, 0x10fb, 0x10fb, 0x1100, 0x1159, 0x115f, 0x11a2, 0x11a8, 0x11f9, 0x1200, 0x1206, 0x1208, 0x1246, 0x1248, 0x1248, 0x124a, 0x124d, 0x1250, 0x1256, 0x1258, 0x1258, 0x125a, 0x125d, 0x1260, 0x1286, 0x1288, 0x1288, 0x128a, 0x128d, 0x1290, 0x12ae, 0x12b0, 0x12b0, 0x12b2, 0x12b5, 0x12b8, 0x12be, 0x12c0, 0x12c0, 0x12c2, 0x12c5, 0x12c8, 0x12ce, 0x12d0, 0x12d6, 0x12d8, 0x12ee, 0x12f0, 0x130e, 0x1310, 0x1310, 0x1312, 0x1315, 0x1318, 0x131e, 0x1320, 0x1346, 0x1348, 0x135a, 0x1361, 0x137c, 0x13a0, 0x13f4, 0x1401, 0x1676, 0x1681, 0x169a, 0x16a0, 0x16f0, 0x1700, 0x170c, 0x170e, 0x1711, 0x1720, 0x1731, 0x1735, 0x1736, 0x1740, 0x1751, 0x1760, 0x176c, 0x176e, 0x1770, 0x1780, 0x17b6, 0x17be, 0x17c5, 0x17c7, 0x17c8, 0x17d4, 0x17da, 0x17dc, 0x17dc, 0x17e0, 0x17e9, 0x1810, 0x1819, 0x1820, 0x1877, 0x1880, 0x18a8, 0x1e00, 0x1e9b, 0x1ea0, 0x1ef9, 0x1f00, 0x1f15, 0x1f18, 0x1f1d, 0x1f20, 0x1f45, 0x1f48, 0x1f4d, 0x1f50, 0x1f57, 0x1f59, 0x1f59, 0x1f5b, 0x1f5b, 0x1f5d, 0x1f5d, 0x1f5f, 0x1f7d, 0x1f80, 0x1fb4, 0x1fb6, 0x1fbc, 0x1fbe, 0x1fbe, 0x1fc2, 0x1fc4, 0x1fc6, 0x1fcc, 0x1fd0, 0x1fd3, 0x1fd6, 0x1fdb, 0x1fe0, 0x1fec, 0x1ff2, 0x1ff4, 0x1ff6, 0x1ffc, 0x200e, 0x200e, 0x2071, 0x2071, 0x207f, 0x207f, 0x2102, 0x2102, 0x2107, 0x2107, 0x210a, 0x2113, 0x2115, 0x2115, 0x2119, 0x211d, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, 0x212a, 0x212d, 0x212f, 0x2131, 0x2133, 0x2139, 0x213d, 0x213f, 0x2145, 0x2149, 0x2160, 0x2183, 0x2336, 0x237a, 0x2395, 0x2395, 0x249c, 0x24e9, 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303c, 0x3041, 0x3096, 0x309d, 0x309f, 0x30a1, 0x30fa, 0x30fc, 0x30ff, 0x3105, 0x312c, 0x3131, 0x318e, 0x3190, 0x31b7, 0x31f0, 0x321c, 0x3220, 0x3243, 0x3260, 0x327b, 0x327f, 0x32b0, 0x32c0, 0x32cb, 0x32d0, 0x32fe, 0x3300, 0x3376, 0x337b, 0x33dd, 0x33e0, 0x33fe, 0x3400, 0x4db5, 0x4e00, 0x9fa5, 0xa000, 0xa48c, 0xac00, 0xd7a3, 0xd800, 0xfa2d, 0xfa30, 0xfa6a, 0xfb00, 0xfb06, 0xfb13, 0xfb17, 0xff21, 0xff3a, 0xff41, 0xff5a, 0xff66, 0xffbe, 0xffc2, 0xffc7, 0xffca, 0xffcf, 0xffd2, 0xffd7, 0xffda, 0xffdc, 0x10300, 0x1031e, 0x10320, 0x10323, 0x10330, 0x1034a, 0x10400, 0x10425, 0x10428, 0x1044d, 0x1d000, 0x1d0f5, 0x1d100, 0x1d126, 0x1d12a, 0x1d166, 0x1d16a, 0x1d172, 0x1d183, 0x1d184, 0x1d18c, 0x1d1a9, 0x1d1ae, 0x1d1dd, 0x1d400, 0x1d454, 0x1d456, 0x1d49c, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4a9, 0x1d4ac, 0x1d4ae, 0x1d4b9, 0x1d4bb, 0x1d4bb, 0x1d4bd, 0x1d4c0, 0x1d4c2, 0x1d4c3, 0x1d4c5, 0x1d505, 0x1d507, 0x1d50a, 0x1d50d, 0x1d514, 0x1d516, 0x1d51c, 0x1d51e, 0x1d539, 0x1d53b, 0x1d53e, 0x1d540, 0x1d544, 0x1d546, 0x1d546, 0x1d54a, 0x1d550, 0x1d552, 0x1d6a3, 0x1d6a8, 0x1d7c9, 0x20000, 0x2a6d6, 0x2f800, 0x2fa1d, 0xf0000, 0xffffd, 0x100000, 0x10fffd]; // prettier-ignore-end\n\nvar isBidirectionalL = function isBidirectionalL(character) {\n  return inRange(character, bidirectional_l);\n};\n\n/**\n * non-ASCII space characters [StringPrep, C.1.2] that can be\n * mapped to SPACE (U+0020)\n */\n\nvar mapping2space = isNonASCIISpaceCharacter;\n/**\n * the \"commonly mapped to nothing\" characters [StringPrep, B.1]\n * that can be mapped to nothing.\n */\n\nvar mapping2nothing = isCommonlyMappedToNothing; // utils\n\nvar getCodePoint = function getCodePoint(character) {\n  return character.codePointAt(0);\n};\nvar first = function first(x) {\n  return x[0];\n};\nvar last = function last(x) {\n  return x[x.length - 1];\n};\n/**\n * Convert provided string into an array of Unicode Code Points.\n * Based on https://stackoverflow.com/a/21409165/1556249\n * and https://www.npmjs.com/package/code-point-at.\n * @param {string} input\n * @returns {number[]}\n */\n\nfunction toCodePoints(input) {\n  var codepoints = [];\n  var size = input.length;\n  for (var i = 0; i < size; i += 1) {\n    var before = input.charCodeAt(i);\n    if (before >= 0xd800 && before <= 0xdbff && size > i + 1) {\n      var next = input.charCodeAt(i + 1);\n      if (next >= 0xdc00 && next <= 0xdfff) {\n        codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);\n        i += 1;\n        continue;\n      }\n    }\n    codepoints.push(before);\n  }\n  return codepoints;\n}\n/**\n * SASLprep.\n * @param {string} input\n * @param {Object} opts\n * @param {boolean} opts.allowUnassigned\n * @returns {string}\n */\n\nfunction saslprep(input) {\n  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected string.');\n  }\n  if (input.length === 0) {\n    return '';\n  } // 1. Map\n\n  var mapped_input = toCodePoints(input) // 1.1 mapping to space\n  .map(function (character) {\n    return mapping2space(character) ? 0x20 : character;\n  }) // 1.2 mapping to nothing\n  .filter(function (character) {\n    return !mapping2nothing(character);\n  }); // 2. Normalize\n\n  var normalized_input = String.fromCodePoint.apply(null, mapped_input).normalize('NFKC');\n  var normalized_map = toCodePoints(normalized_input); // 3. Prohibit\n\n  var hasProhibited = normalized_map.some(isProhibitedCharacter);\n  if (hasProhibited) {\n    throw new Error('Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3');\n  } // Unassigned Code Points\n\n  if (opts.allowUnassigned !== true) {\n    var hasUnassigned = normalized_map.some(isUnassignedCodePoint);\n    if (hasUnassigned) {\n      throw new Error('Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5');\n    }\n  } // 4. check bidi\n\n  var hasBidiRAL = normalized_map.some(isBidirectionalRAL);\n  var hasBidiL = normalized_map.some(isBidirectionalL); // 4.1 If a string contains any RandALCat character, the string MUST NOT\n  // contain any LCat character.\n\n  if (hasBidiRAL && hasBidiL) {\n    throw new Error('String must not contain RandALCat and LCat at the same time,' + ' see https://tools.ietf.org/html/rfc3454#section-6');\n  }\n  /**\n   * 4.2 If a string contains any RandALCat character, a RandALCat\n   * character MUST be the first character of the string, and a\n   * RandALCat character MUST be the last character of the string.\n   */\n\n  var isFirstBidiRAL = isBidirectionalRAL(getCodePoint(first(normalized_input)));\n  var isLastBidiRAL = isBidirectionalRAL(getCodePoint(last(normalized_input)));\n  if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) {\n    throw new Error('Bidirectional RandALCat character must be the first and the last' + ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6');\n  }\n  return normalized_input;\n}\nvar PDFSecurity = /*#__PURE__*/function () {\n  _createClass(PDFSecurity, null, [{\n    key: \"generateFileID\",\n    value: function generateFileID() {\n      var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var infoStr = \"\".concat(info.CreationDate.getTime(), \"\\n\");\n      for (var key in info) {\n        // eslint-disable-next-line no-prototype-builtins\n        if (!info.hasOwnProperty(key)) {\n          continue;\n        }\n        infoStr += \"\".concat(key, \": \").concat(info[key].valueOf(), \"\\n\");\n      }\n      return wordArrayToBuffer(_cryptoJs.default.MD5(infoStr));\n    }\n  }, {\n    key: \"generateRandomWordArray\",\n    value: function generateRandomWordArray(bytes) {\n      return _cryptoJs.default.lib.WordArray.random(bytes);\n    }\n  }, {\n    key: \"create\",\n    value: function create(document) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      if (!options.ownerPassword && !options.userPassword) {\n        return null;\n      }\n      return new PDFSecurity(document, options);\n    }\n  }]);\n  function PDFSecurity(document) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    _classCallCheck(this, PDFSecurity);\n    if (!options.ownerPassword && !options.userPassword) {\n      throw new Error('None of owner password and user password is defined.');\n    }\n    this.document = document;\n    this._setupEncryption(options);\n  }\n  _createClass(PDFSecurity, [{\n    key: \"_setupEncryption\",\n    value: function _setupEncryption(options) {\n      switch (options.pdfVersion) {\n        case '1.4':\n        case '1.5':\n          this.version = 2;\n          break;\n        case '1.6':\n        case '1.7':\n          this.version = 4;\n          break;\n        case '1.7ext3':\n          this.version = 5;\n          break;\n        default:\n          this.version = 1;\n          break;\n      }\n      var encDict = {\n        Filter: 'Standard'\n      };\n      switch (this.version) {\n        case 1:\n        case 2:\n        case 4:\n          this._setupEncryptionV1V2V4(this.version, encDict, options);\n          break;\n        case 5:\n          this._setupEncryptionV5(encDict, options);\n          break;\n      }\n      this.dictionary = this.document.ref(encDict);\n    }\n  }, {\n    key: \"_setupEncryptionV1V2V4\",\n    value: function _setupEncryptionV1V2V4(v, encDict, options) {\n      var r, permissions;\n      switch (v) {\n        case 1:\n          r = 2;\n          this.keyBits = 40;\n          permissions = getPermissionsR2(options.permissions);\n          break;\n        case 2:\n          r = 3;\n          this.keyBits = 128;\n          permissions = getPermissionsR3(options.permissions);\n          break;\n        case 4:\n          r = 4;\n          this.keyBits = 128;\n          permissions = getPermissionsR3(options.permissions);\n          break;\n      }\n      var paddedUserPassword = processPasswordR2R3R4(options.userPassword);\n      var paddedOwnerPassword = options.ownerPassword ? processPasswordR2R3R4(options.ownerPassword) : paddedUserPassword;\n      var ownerPasswordEntry = getOwnerPasswordR2R3R4(r, this.keyBits, paddedUserPassword, paddedOwnerPassword);\n      this.encryptionKey = getEncryptionKeyR2R3R4(r, this.keyBits, this.document._id, paddedUserPassword, ownerPasswordEntry, permissions);\n      var userPasswordEntry;\n      if (r === 2) {\n        userPasswordEntry = getUserPasswordR2(this.encryptionKey);\n      } else {\n        userPasswordEntry = getUserPasswordR3R4(this.document._id, this.encryptionKey);\n      }\n      encDict.V = v;\n      if (v >= 2) {\n        encDict.Length = this.keyBits;\n      }\n      if (v === 4) {\n        encDict.CF = {\n          StdCF: {\n            AuthEvent: 'DocOpen',\n            CFM: 'AESV2',\n            Length: this.keyBits / 8\n          }\n        };\n        encDict.StmF = 'StdCF';\n        encDict.StrF = 'StdCF';\n      }\n      encDict.R = r;\n      encDict.O = wordArrayToBuffer(ownerPasswordEntry);\n      encDict.U = wordArrayToBuffer(userPasswordEntry);\n      encDict.P = permissions;\n    }\n  }, {\n    key: \"_setupEncryptionV5\",\n    value: function _setupEncryptionV5(encDict, options) {\n      this.keyBits = 256;\n      var permissions = getPermissionsR3(options.permissions);\n      var processedUserPassword = processPasswordR5(options.userPassword);\n      var processedOwnerPassword = options.ownerPassword ? processPasswordR5(options.ownerPassword) : processedUserPassword;\n      this.encryptionKey = getEncryptionKeyR5(PDFSecurity.generateRandomWordArray);\n      var userPasswordEntry = getUserPasswordR5(processedUserPassword, PDFSecurity.generateRandomWordArray);\n      var userKeySalt = _cryptoJs.default.lib.WordArray.create(userPasswordEntry.words.slice(10, 12), 8);\n      var userEncryptionKeyEntry = getUserEncryptionKeyR5(processedUserPassword, userKeySalt, this.encryptionKey);\n      var ownerPasswordEntry = getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, PDFSecurity.generateRandomWordArray);\n      var ownerKeySalt = _cryptoJs.default.lib.WordArray.create(ownerPasswordEntry.words.slice(10, 12), 8);\n      var ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, this.encryptionKey);\n      var permsEntry = getEncryptedPermissionsR5(permissions, this.encryptionKey, PDFSecurity.generateRandomWordArray);\n      encDict.V = 5;\n      encDict.Length = this.keyBits;\n      encDict.CF = {\n        StdCF: {\n          AuthEvent: 'DocOpen',\n          CFM: 'AESV3',\n          Length: this.keyBits / 8\n        }\n      };\n      encDict.StmF = 'StdCF';\n      encDict.StrF = 'StdCF';\n      encDict.R = 5;\n      encDict.O = wordArrayToBuffer(ownerPasswordEntry);\n      encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry);\n      encDict.U = wordArrayToBuffer(userPasswordEntry);\n      encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry);\n      encDict.P = permissions;\n      encDict.Perms = wordArrayToBuffer(permsEntry);\n    }\n  }, {\n    key: \"getEncryptFn\",\n    value: function getEncryptFn(obj, gen) {\n      var digest;\n      if (this.version < 5) {\n        digest = this.encryptionKey.clone().concat(_cryptoJs.default.lib.WordArray.create([(obj & 0xff) << 24 | (obj & 0xff00) << 8 | obj >> 8 & 0xff00 | gen & 0xff, (gen & 0xff00) << 16], 5));\n      }\n      if (this.version === 1 || this.version === 2) {\n        var _key = _cryptoJs.default.MD5(digest);\n        _key.sigBytes = Math.min(16, this.keyBits / 8 + 5);\n        return function (buffer) {\n          return wordArrayToBuffer(_cryptoJs.default.RC4.encrypt(_cryptoJs.default.lib.WordArray.create(buffer), _key).ciphertext);\n        };\n      }\n      var key;\n      if (this.version === 4) {\n        key = _cryptoJs.default.MD5(digest.concat(_cryptoJs.default.lib.WordArray.create([0x73416c54], 4)));\n      } else {\n        key = this.encryptionKey;\n      }\n      var iv = PDFSecurity.generateRandomWordArray(16);\n      var options = {\n        mode: _cryptoJs.default.mode.CBC,\n        padding: _cryptoJs.default.pad.Pkcs7,\n        iv: iv\n      };\n      return function (buffer) {\n        return wordArrayToBuffer(iv.clone().concat(_cryptoJs.default.AES.encrypt(_cryptoJs.default.lib.WordArray.create(buffer), key, options).ciphertext));\n      };\n    }\n  }, {\n    key: \"end\",\n    value: function end() {\n      this.dictionary.end();\n    }\n  }]);\n  return PDFSecurity;\n}();\nfunction getPermissionsR2() {\n  var permissionObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var permissions = 0xffffffc0 >> 0;\n  if (permissionObject.printing) {\n    permissions |= 4;\n  }\n  if (permissionObject.modifying) {\n    permissions |= 8;\n  }\n  if (permissionObject.copying) {\n    permissions |= 16;\n  }\n  if (permissionObject.annotating) {\n    permissions |= 32;\n  }\n  return permissions;\n}\nfunction getPermissionsR3() {\n  var permissionObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var permissions = 0xfffff0c0 >> 0;\n  if (permissionObject.printing === 'lowResolution') {\n    permissions |= 4;\n  }\n  if (permissionObject.printing === 'highResolution') {\n    permissions |= 2052;\n  }\n  if (permissionObject.modifying) {\n    permissions |= 8;\n  }\n  if (permissionObject.copying) {\n    permissions |= 16;\n  }\n  if (permissionObject.annotating) {\n    permissions |= 32;\n  }\n  if (permissionObject.fillingForms) {\n    permissions |= 256;\n  }\n  if (permissionObject.contentAccessibility) {\n    permissions |= 512;\n  }\n  if (permissionObject.documentAssembly) {\n    permissions |= 1024;\n  }\n  return permissions;\n}\nfunction getUserPasswordR2(encryptionKey) {\n  return _cryptoJs.default.RC4.encrypt(processPasswordR2R3R4(), encryptionKey).ciphertext;\n}\nfunction getUserPasswordR3R4(documentId, encryptionKey) {\n  var key = encryptionKey.clone();\n  var cipher = _cryptoJs.default.MD5(processPasswordR2R3R4().concat(_cryptoJs.default.lib.WordArray.create(documentId)));\n  for (var i = 0; i < 20; i++) {\n    var xorRound = Math.ceil(key.sigBytes / 4);\n    for (var j = 0; j < xorRound; j++) {\n      key.words[j] = encryptionKey.words[j] ^ (i | i << 8 | i << 16 | i << 24);\n    }\n    cipher = _cryptoJs.default.RC4.encrypt(cipher, key).ciphertext;\n  }\n  return cipher.concat(_cryptoJs.default.lib.WordArray.create(null, 16));\n}\nfunction getOwnerPasswordR2R3R4(r, keyBits, paddedUserPassword, paddedOwnerPassword) {\n  var digest = paddedOwnerPassword;\n  var round = r >= 3 ? 51 : 1;\n  for (var i = 0; i < round; i++) {\n    digest = _cryptoJs.default.MD5(digest);\n  }\n  var key = digest.clone();\n  key.sigBytes = keyBits / 8;\n  var cipher = paddedUserPassword;\n  round = r >= 3 ? 20 : 1;\n  for (var _i = 0; _i < round; _i++) {\n    var xorRound = Math.ceil(key.sigBytes / 4);\n    for (var j = 0; j < xorRound; j++) {\n      key.words[j] = digest.words[j] ^ (_i | _i << 8 | _i << 16 | _i << 24);\n    }\n    cipher = _cryptoJs.default.RC4.encrypt(cipher, key).ciphertext;\n  }\n  return cipher;\n}\nfunction getEncryptionKeyR2R3R4(r, keyBits, documentId, paddedUserPassword, ownerPasswordEntry, permissions) {\n  var key = paddedUserPassword.clone().concat(ownerPasswordEntry).concat(_cryptoJs.default.lib.WordArray.create([lsbFirstWord(permissions)], 4)).concat(_cryptoJs.default.lib.WordArray.create(documentId));\n  var round = r >= 3 ? 51 : 1;\n  for (var i = 0; i < round; i++) {\n    key = _cryptoJs.default.MD5(key);\n    key.sigBytes = keyBits / 8;\n  }\n  return key;\n}\nfunction getUserPasswordR5(processedUserPassword, generateRandomWordArray) {\n  var validationSalt = generateRandomWordArray(8);\n  var keySalt = generateRandomWordArray(8);\n  return _cryptoJs.default.SHA256(processedUserPassword.clone().concat(validationSalt)).concat(validationSalt).concat(keySalt);\n}\nfunction getUserEncryptionKeyR5(processedUserPassword, userKeySalt, encryptionKey) {\n  var key = _cryptoJs.default.SHA256(processedUserPassword.clone().concat(userKeySalt));\n  var options = {\n    mode: _cryptoJs.default.mode.CBC,\n    padding: _cryptoJs.default.pad.NoPadding,\n    iv: _cryptoJs.default.lib.WordArray.create(null, 16)\n  };\n  return _cryptoJs.default.AES.encrypt(encryptionKey, key, options).ciphertext;\n}\nfunction getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, generateRandomWordArray) {\n  var validationSalt = generateRandomWordArray(8);\n  var keySalt = generateRandomWordArray(8);\n  return _cryptoJs.default.SHA256(processedOwnerPassword.clone().concat(validationSalt).concat(userPasswordEntry)).concat(validationSalt).concat(keySalt);\n}\nfunction getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, encryptionKey) {\n  var key = _cryptoJs.default.SHA256(processedOwnerPassword.clone().concat(ownerKeySalt).concat(userPasswordEntry));\n  var options = {\n    mode: _cryptoJs.default.mode.CBC,\n    padding: _cryptoJs.default.pad.NoPadding,\n    iv: _cryptoJs.default.lib.WordArray.create(null, 16)\n  };\n  return _cryptoJs.default.AES.encrypt(encryptionKey, key, options).ciphertext;\n}\nfunction getEncryptionKeyR5(generateRandomWordArray) {\n  return generateRandomWordArray(32);\n}\nfunction getEncryptedPermissionsR5(permissions, encryptionKey, generateRandomWordArray) {\n  var cipher = _cryptoJs.default.lib.WordArray.create([lsbFirstWord(permissions), 0xffffffff, 0x54616462], 12).concat(generateRandomWordArray(4));\n  var options = {\n    mode: _cryptoJs.default.mode.ECB,\n    padding: _cryptoJs.default.pad.NoPadding\n  };\n  return _cryptoJs.default.AES.encrypt(cipher, encryptionKey, options).ciphertext;\n}\nfunction processPasswordR2R3R4() {\n  var password = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  var out = Buffer.alloc(32);\n  var length = password.length;\n  var index = 0;\n  while (index < length && index < 32) {\n    var code = password.charCodeAt(index);\n    if (code > 0xff) {\n      throw new Error('Password contains one or more invalid characters.');\n    }\n    out[index] = code;\n    index++;\n  }\n  while (index < 32) {\n    out[index] = PASSWORD_PADDING[index - length];\n    index++;\n  }\n  return _cryptoJs.default.lib.WordArray.create(out);\n}\nfunction processPasswordR5() {\n  var password = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  password = unescape(encodeURIComponent(saslprep(password)));\n  var length = Math.min(127, password.length);\n  var out = Buffer.alloc(length);\n  for (var i = 0; i < length; i++) {\n    out[i] = password.charCodeAt(i);\n  }\n  return _cryptoJs.default.lib.WordArray.create(out);\n}\nfunction lsbFirstWord(data) {\n  return (data & 0xff) << 24 | (data & 0xff00) << 8 | data >> 8 & 0xff00 | data >> 24 & 0xff;\n}\nfunction wordArrayToBuffer(wordArray) {\n  var byteArray = [];\n  for (var i = 0; i < wordArray.sigBytes; i++) {\n    byteArray.push(wordArray.words[Math.floor(i / 4)] >> 8 * (3 - i % 4) & 0xff);\n  }\n  return Buffer.from(byteArray);\n}\nvar PASSWORD_PADDING = [0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a];\nvar number = PDFObject.number;\nvar PDFGradient = /*#__PURE__*/function () {\n  function PDFGradient(doc) {\n    _classCallCheck(this, PDFGradient);\n    this.doc = doc;\n    this.stops = [];\n    this.embedded = false;\n    this.transform = [1, 0, 0, 1, 0, 0];\n  }\n  _createClass(PDFGradient, [{\n    key: \"stop\",\n    value: function stop(pos, color, opacity) {\n      if (opacity == null) {\n        opacity = 1;\n      }\n      color = this.doc._normalizeColor(color);\n      if (this.stops.length === 0) {\n        if (color.length === 3) {\n          this._colorSpace = 'DeviceRGB';\n        } else if (color.length === 4) {\n          this._colorSpace = 'DeviceCMYK';\n        } else if (color.length === 1) {\n          this._colorSpace = 'DeviceGray';\n        } else {\n          throw new Error('Unknown color space');\n        }\n      } else if (this._colorSpace === 'DeviceRGB' && color.length !== 3 || this._colorSpace === 'DeviceCMYK' && color.length !== 4 || this._colorSpace === 'DeviceGray' && color.length !== 1) {\n        throw new Error('All gradient stops must use the same color space');\n      }\n      opacity = Math.max(0, Math.min(1, opacity));\n      this.stops.push([pos, color, opacity]);\n      return this;\n    }\n  }, {\n    key: \"setTransform\",\n    value: function setTransform(m11, m12, m21, m22, dx, dy) {\n      this.transform = [m11, m12, m21, m22, dx, dy];\n      return this;\n    }\n  }, {\n    key: \"embed\",\n    value: function embed(m) {\n      var fn;\n      var stopsLength = this.stops.length;\n      if (stopsLength === 0) {\n        return;\n      }\n      this.embedded = true;\n      this.matrix = m; // if the last stop comes before 100%, add a copy at 100%\n\n      var last = this.stops[stopsLength - 1];\n      if (last[0] < 1) {\n        this.stops.push([1, last[1], last[2]]);\n      }\n      var bounds = [];\n      var encode = [];\n      var stops = [];\n      for (var i = 0; i < stopsLength - 1; i++) {\n        encode.push(0, 1);\n        if (i + 2 !== stopsLength) {\n          bounds.push(this.stops[i + 1][0]);\n        }\n        fn = this.doc.ref({\n          FunctionType: 2,\n          Domain: [0, 1],\n          C0: this.stops[i + 0][1],\n          C1: this.stops[i + 1][1],\n          N: 1\n        });\n        stops.push(fn);\n        fn.end();\n      } // if there are only two stops, we don't need a stitching function\n\n      if (stopsLength === 1) {\n        fn = stops[0];\n      } else {\n        fn = this.doc.ref({\n          FunctionType: 3,\n          // stitching function\n          Domain: [0, 1],\n          Functions: stops,\n          Bounds: bounds,\n          Encode: encode\n        });\n        fn.end();\n      }\n      this.id = \"Sh\".concat(++this.doc._gradCount);\n      var shader = this.shader(fn);\n      shader.end();\n      var pattern = this.doc.ref({\n        Type: 'Pattern',\n        PatternType: 2,\n        Shading: shader,\n        Matrix: this.matrix.map(number)\n      });\n      pattern.end();\n      if (this.stops.some(function (stop) {\n        return stop[2] < 1;\n      })) {\n        var grad = this.opacityGradient();\n        grad._colorSpace = 'DeviceGray';\n        var _iterator = _createForOfIteratorHelper(this.stops),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var stop = _step.value;\n            grad.stop(stop[0], [stop[2]]);\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n        grad = grad.embed(this.matrix);\n        var pageBBox = [0, 0, this.doc.page.width, this.doc.page.height];\n        var form = this.doc.ref({\n          Type: 'XObject',\n          Subtype: 'Form',\n          FormType: 1,\n          BBox: pageBBox,\n          Group: {\n            Type: 'Group',\n            S: 'Transparency',\n            CS: 'DeviceGray'\n          },\n          Resources: {\n            ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n            Pattern: {\n              Sh1: grad\n            }\n          }\n        });\n        form.write('/Pattern cs /Sh1 scn');\n        form.end(\"\".concat(pageBBox.join(' '), \" re f\"));\n        var gstate = this.doc.ref({\n          Type: 'ExtGState',\n          SMask: {\n            Type: 'Mask',\n            S: 'Luminosity',\n            G: form\n          }\n        });\n        gstate.end();\n        var opacityPattern = this.doc.ref({\n          Type: 'Pattern',\n          PatternType: 1,\n          PaintType: 1,\n          TilingType: 2,\n          BBox: pageBBox,\n          XStep: pageBBox[2],\n          YStep: pageBBox[3],\n          Resources: {\n            ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n            Pattern: {\n              Sh1: pattern\n            },\n            ExtGState: {\n              Gs1: gstate\n            }\n          }\n        });\n        opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn');\n        opacityPattern.end(\"\".concat(pageBBox.join(' '), \" re f\"));\n        this.doc.page.patterns[this.id] = opacityPattern;\n      } else {\n        this.doc.page.patterns[this.id] = pattern;\n      }\n      return pattern;\n    }\n  }, {\n    key: \"apply\",\n    value: function apply(stroke) {\n      // apply gradient transform to existing document ctm\n      var _this$doc$_ctm = _slicedToArray(this.doc._ctm, 6),\n        m0 = _this$doc$_ctm[0],\n        m1 = _this$doc$_ctm[1],\n        m2 = _this$doc$_ctm[2],\n        m3 = _this$doc$_ctm[3],\n        m4 = _this$doc$_ctm[4],\n        m5 = _this$doc$_ctm[5];\n      var _this$transform = _slicedToArray(this.transform, 6),\n        m11 = _this$transform[0],\n        m12 = _this$transform[1],\n        m21 = _this$transform[2],\n        m22 = _this$transform[3],\n        dx = _this$transform[4],\n        dy = _this$transform[5];\n      var m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5];\n      if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) {\n        this.embed(m);\n      }\n      this.doc._setColorSpace('Pattern', stroke);\n      var op = stroke ? 'SCN' : 'scn';\n      return this.doc.addContent(\"/\".concat(this.id, \" \").concat(op));\n    }\n  }]);\n  return PDFGradient;\n}();\nvar PDFLinearGradient = /*#__PURE__*/function (_PDFGradient) {\n  _inherits(PDFLinearGradient, _PDFGradient);\n  var _super = _createSuper(PDFLinearGradient);\n  function PDFLinearGradient(doc, x1, y1, x2, y2) {\n    var _this;\n    _classCallCheck(this, PDFLinearGradient);\n    _this = _super.call(this, doc);\n    _this.x1 = x1;\n    _this.y1 = y1;\n    _this.x2 = x2;\n    _this.y2 = y2;\n    return _this;\n  }\n  _createClass(PDFLinearGradient, [{\n    key: \"shader\",\n    value: function shader(fn) {\n      return this.doc.ref({\n        ShadingType: 2,\n        ColorSpace: this._colorSpace,\n        Coords: [this.x1, this.y1, this.x2, this.y2],\n        Function: fn,\n        Extend: [true, true]\n      });\n    }\n  }, {\n    key: \"opacityGradient\",\n    value: function opacityGradient() {\n      return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);\n    }\n  }]);\n  return PDFLinearGradient;\n}(PDFGradient);\nvar PDFRadialGradient = /*#__PURE__*/function (_PDFGradient2) {\n  _inherits(PDFRadialGradient, _PDFGradient2);\n  var _super2 = _createSuper(PDFRadialGradient);\n  function PDFRadialGradient(doc, x1, y1, r1, x2, y2, r2) {\n    var _this2;\n    _classCallCheck(this, PDFRadialGradient);\n    _this2 = _super2.call(this, doc);\n    _this2.doc = doc;\n    _this2.x1 = x1;\n    _this2.y1 = y1;\n    _this2.r1 = r1;\n    _this2.x2 = x2;\n    _this2.y2 = y2;\n    _this2.r2 = r2;\n    return _this2;\n  }\n  _createClass(PDFRadialGradient, [{\n    key: \"shader\",\n    value: function shader(fn) {\n      return this.doc.ref({\n        ShadingType: 3,\n        ColorSpace: this._colorSpace,\n        Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],\n        Function: fn,\n        Extend: [true, true]\n      });\n    }\n  }, {\n    key: \"opacityGradient\",\n    value: function opacityGradient() {\n      return new PDFRadialGradient(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2);\n    }\n  }]);\n  return PDFRadialGradient;\n}(PDFGradient);\nvar Gradient = {\n  PDFGradient: PDFGradient,\n  PDFLinearGradient: PDFLinearGradient,\n  PDFRadialGradient: PDFRadialGradient\n};\n\n/*\nPDF tiling pattern support. Uncolored only.\n */\nvar underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB'];\nvar PDFTilingPattern = /*#__PURE__*/function () {\n  function PDFTilingPattern(doc, bBox, xStep, yStep, stream) {\n    _classCallCheck(this, PDFTilingPattern);\n    this.doc = doc;\n    this.bBox = bBox;\n    this.xStep = xStep;\n    this.yStep = yStep;\n    this.stream = stream;\n  }\n  _createClass(PDFTilingPattern, [{\n    key: \"createPattern\",\n    value: function createPattern() {\n      // no resources needed for our current usage\n      // required entry\n      var resources = this.doc.ref();\n      resources.end(); // apply default transform matrix (flipped in the default doc._ctm)\n      // see document.js & gradient.js\n\n      var _this$doc$_ctm = _slicedToArray(this.doc._ctm, 6),\n        m0 = _this$doc$_ctm[0],\n        m1 = _this$doc$_ctm[1],\n        m2 = _this$doc$_ctm[2],\n        m3 = _this$doc$_ctm[3],\n        m4 = _this$doc$_ctm[4],\n        m5 = _this$doc$_ctm[5];\n      var m11 = 1,\n        m12 = 0,\n        m21 = 0,\n        m22 = 1,\n        dx = 0,\n        dy = 0;\n      var m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5];\n      var pattern = this.doc.ref({\n        Type: 'Pattern',\n        PatternType: 1,\n        // tiling\n        PaintType: 2,\n        // 1-colored, 2-uncolored\n        TilingType: 2,\n        // 2-no distortion\n        BBox: this.bBox,\n        XStep: this.xStep,\n        YStep: this.yStep,\n        Matrix: m.map(function (v) {\n          return +v.toFixed(5);\n        }),\n        Resources: resources\n      });\n      pattern.end(this.stream);\n      return pattern;\n    }\n  }, {\n    key: \"embedPatternColorSpaces\",\n    value: function embedPatternColorSpaces() {\n      var _this = this;\n\n      // map each pattern to an underlying color space\n      // and embed on each page\n      underlyingColorSpaces.forEach(function (csName) {\n        var csId = _this.getPatternColorSpaceId(csName);\n        if (_this.doc.page.colorSpaces[csId]) return;\n        var cs = _this.doc.ref(['Pattern', csName]);\n        cs.end();\n        _this.doc.page.colorSpaces[csId] = cs;\n      });\n    }\n  }, {\n    key: \"getPatternColorSpaceId\",\n    value: function getPatternColorSpaceId(underlyingColorspace) {\n      return \"CsP\".concat(underlyingColorspace);\n    }\n  }, {\n    key: \"embed\",\n    value: function embed() {\n      if (!this.id) {\n        this.doc._patternCount = this.doc._patternCount + 1;\n        this.id = 'P' + this.doc._patternCount;\n        this.pattern = this.createPattern();\n      } // patterns are embedded in each page\n\n      if (!this.doc.page.patterns[this.id]) {\n        this.doc.page.patterns[this.id] = this.pattern;\n      }\n    }\n  }, {\n    key: \"apply\",\n    value: function apply(stroke, patternColor) {\n      // do any embedding/creating that might be needed\n      this.embedPatternColorSpaces();\n      this.embed();\n      var normalizedColor = this.doc._normalizeColor(patternColor);\n      if (!normalizedColor) throw Error(\"invalid pattern color. (value: \".concat(patternColor, \")\")); // select one of the pattern color spaces\n\n      var csId = this.getPatternColorSpaceId(this.doc._getColorSpace(normalizedColor));\n      this.doc._setColorSpace(csId, stroke); // stroke/fill using the pattern and color (in the above underlying color space)\n\n      var op = stroke ? 'SCN' : 'scn';\n      return this.doc.addContent(\"\".concat(normalizedColor.join(' '), \" /\").concat(this.id, \" \").concat(op));\n    }\n  }]);\n  return PDFTilingPattern;\n}();\nvar pattern = {\n  PDFTilingPattern: PDFTilingPattern\n};\nvar PDFGradient$1 = Gradient.PDFGradient,\n  PDFLinearGradient$1 = Gradient.PDFLinearGradient,\n  PDFRadialGradient$1 = Gradient.PDFRadialGradient;\nvar PDFTilingPattern$1 = pattern.PDFTilingPattern;\nvar ColorMixin = {\n  initColor: function initColor() {\n    // The opacity dictionaries\n    this._opacityRegistry = {};\n    this._opacityCount = 0;\n    this._patternCount = 0;\n    return this._gradCount = 0;\n  },\n  _normalizeColor: function _normalizeColor(color) {\n    if (typeof color === 'string') {\n      if (color.charAt(0) === '#') {\n        if (color.length === 4) {\n          color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, '#$1$1$2$2$3$3');\n        }\n        var hex = parseInt(color.slice(1), 16);\n        color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff];\n      } else if (namedColors[color]) {\n        color = namedColors[color];\n      }\n    }\n    if (Array.isArray(color)) {\n      // RGB\n      if (color.length === 3) {\n        color = color.map(function (part) {\n          return part / 255;\n        }); // CMYK\n      } else if (color.length === 4) {\n        color = color.map(function (part) {\n          return part / 100;\n        });\n      }\n      return color;\n    }\n    return null;\n  },\n  _setColor: function _setColor(color, stroke) {\n    if (color instanceof PDFGradient$1) {\n      color.apply(stroke);\n      return true; // see if tiling pattern, decode & apply it it\n    } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern$1) {\n      color[0].apply(stroke, color[1]);\n      return true;\n    } // any other case should be a normal color and not a pattern\n\n    return this._setColorCore(color, stroke);\n  },\n  _setColorCore: function _setColorCore(color, stroke) {\n    color = this._normalizeColor(color);\n    if (!color) {\n      return false;\n    }\n    var op = stroke ? 'SCN' : 'scn';\n    var space = this._getColorSpace(color);\n    this._setColorSpace(space, stroke);\n    color = color.join(' ');\n    this.addContent(\"\".concat(color, \" \").concat(op));\n    return true;\n  },\n  _setColorSpace: function _setColorSpace(space, stroke) {\n    var op = stroke ? 'CS' : 'cs';\n    return this.addContent(\"/\".concat(space, \" \").concat(op));\n  },\n  _getColorSpace: function _getColorSpace(color) {\n    return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';\n  },\n  fillColor: function fillColor(color, opacity) {\n    var set = this._setColor(color, false);\n    if (set) {\n      this.fillOpacity(opacity);\n    } // save this for text wrapper, which needs to reset\n    // the fill color on new pages\n\n    this._fillColor = [color, opacity];\n    return this;\n  },\n  strokeColor: function strokeColor(color, opacity) {\n    var set = this._setColor(color, true);\n    if (set) {\n      this.strokeOpacity(opacity);\n    }\n    return this;\n  },\n  opacity: function opacity(_opacity) {\n    this._doOpacity(_opacity, _opacity);\n    return this;\n  },\n  fillOpacity: function fillOpacity(opacity) {\n    this._doOpacity(opacity, null);\n    return this;\n  },\n  strokeOpacity: function strokeOpacity(opacity) {\n    this._doOpacity(null, opacity);\n    return this;\n  },\n  _doOpacity: function _doOpacity(fillOpacity, strokeOpacity) {\n    var dictionary, name;\n    if (fillOpacity == null && strokeOpacity == null) {\n      return;\n    }\n    if (fillOpacity != null) {\n      fillOpacity = Math.max(0, Math.min(1, fillOpacity));\n    }\n    if (strokeOpacity != null) {\n      strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));\n    }\n    var key = \"\".concat(fillOpacity, \"_\").concat(strokeOpacity);\n    if (this._opacityRegistry[key]) {\n      var _this$_opacityRegistr = _slicedToArray(this._opacityRegistry[key], 2);\n      dictionary = _this$_opacityRegistr[0];\n      name = _this$_opacityRegistr[1];\n    } else {\n      dictionary = {\n        Type: 'ExtGState'\n      };\n      if (fillOpacity != null) {\n        dictionary.ca = fillOpacity;\n      }\n      if (strokeOpacity != null) {\n        dictionary.CA = strokeOpacity;\n      }\n      dictionary = this.ref(dictionary);\n      dictionary.end();\n      var id = ++this._opacityCount;\n      name = \"Gs\".concat(id);\n      this._opacityRegistry[key] = [dictionary, name];\n    }\n    this.page.ext_gstates[name] = dictionary;\n    return this.addContent(\"/\".concat(name, \" gs\"));\n  },\n  linearGradient: function linearGradient(x1, y1, x2, y2) {\n    return new PDFLinearGradient$1(this, x1, y1, x2, y2);\n  },\n  radialGradient: function radialGradient(x1, y1, r1, x2, y2, r2) {\n    return new PDFRadialGradient$1(this, x1, y1, r1, x2, y2, r2);\n  },\n  pattern: function pattern(bbox, xStep, yStep, stream) {\n    return new PDFTilingPattern$1(this, bbox, xStep, yStep, stream);\n  }\n};\nvar namedColors = {\n  aliceblue: [240, 248, 255],\n  antiquewhite: [250, 235, 215],\n  aqua: [0, 255, 255],\n  aquamarine: [127, 255, 212],\n  azure: [240, 255, 255],\n  beige: [245, 245, 220],\n  bisque: [255, 228, 196],\n  black: [0, 0, 0],\n  blanchedalmond: [255, 235, 205],\n  blue: [0, 0, 255],\n  blueviolet: [138, 43, 226],\n  brown: [165, 42, 42],\n  burlywood: [222, 184, 135],\n  cadetblue: [95, 158, 160],\n  chartreuse: [127, 255, 0],\n  chocolate: [210, 105, 30],\n  coral: [255, 127, 80],\n  cornflowerblue: [100, 149, 237],\n  cornsilk: [255, 248, 220],\n  crimson: [220, 20, 60],\n  cyan: [0, 255, 255],\n  darkblue: [0, 0, 139],\n  darkcyan: [0, 139, 139],\n  darkgoldenrod: [184, 134, 11],\n  darkgray: [169, 169, 169],\n  darkgreen: [0, 100, 0],\n  darkgrey: [169, 169, 169],\n  darkkhaki: [189, 183, 107],\n  darkmagenta: [139, 0, 139],\n  darkolivegreen: [85, 107, 47],\n  darkorange: [255, 140, 0],\n  darkorchid: [153, 50, 204],\n  darkred: [139, 0, 0],\n  darksalmon: [233, 150, 122],\n  darkseagreen: [143, 188, 143],\n  darkslateblue: [72, 61, 139],\n  darkslategray: [47, 79, 79],\n  darkslategrey: [47, 79, 79],\n  darkturquoise: [0, 206, 209],\n  darkviolet: [148, 0, 211],\n  deeppink: [255, 20, 147],\n  deepskyblue: [0, 191, 255],\n  dimgray: [105, 105, 105],\n  dimgrey: [105, 105, 105],\n  dodgerblue: [30, 144, 255],\n  firebrick: [178, 34, 34],\n  floralwhite: [255, 250, 240],\n  forestgreen: [34, 139, 34],\n  fuchsia: [255, 0, 255],\n  gainsboro: [220, 220, 220],\n  ghostwhite: [248, 248, 255],\n  gold: [255, 215, 0],\n  goldenrod: [218, 165, 32],\n  gray: [128, 128, 128],\n  grey: [128, 128, 128],\n  green: [0, 128, 0],\n  greenyellow: [173, 255, 47],\n  honeydew: [240, 255, 240],\n  hotpink: [255, 105, 180],\n  indianred: [205, 92, 92],\n  indigo: [75, 0, 130],\n  ivory: [255, 255, 240],\n  khaki: [240, 230, 140],\n  lavender: [230, 230, 250],\n  lavenderblush: [255, 240, 245],\n  lawngreen: [124, 252, 0],\n  lemonchiffon: [255, 250, 205],\n  lightblue: [173, 216, 230],\n  lightcoral: [240, 128, 128],\n  lightcyan: [224, 255, 255],\n  lightgoldenrodyellow: [250, 250, 210],\n  lightgray: [211, 211, 211],\n  lightgreen: [144, 238, 144],\n  lightgrey: [211, 211, 211],\n  lightpink: [255, 182, 193],\n  lightsalmon: [255, 160, 122],\n  lightseagreen: [32, 178, 170],\n  lightskyblue: [135, 206, 250],\n  lightslategray: [119, 136, 153],\n  lightslategrey: [119, 136, 153],\n  lightsteelblue: [176, 196, 222],\n  lightyellow: [255, 255, 224],\n  lime: [0, 255, 0],\n  limegreen: [50, 205, 50],\n  linen: [250, 240, 230],\n  magenta: [255, 0, 255],\n  maroon: [128, 0, 0],\n  mediumaquamarine: [102, 205, 170],\n  mediumblue: [0, 0, 205],\n  mediumorchid: [186, 85, 211],\n  mediumpurple: [147, 112, 219],\n  mediumseagreen: [60, 179, 113],\n  mediumslateblue: [123, 104, 238],\n  mediumspringgreen: [0, 250, 154],\n  mediumturquoise: [72, 209, 204],\n  mediumvioletred: [199, 21, 133],\n  midnightblue: [25, 25, 112],\n  mintcream: [245, 255, 250],\n  mistyrose: [255, 228, 225],\n  moccasin: [255, 228, 181],\n  navajowhite: [255, 222, 173],\n  navy: [0, 0, 128],\n  oldlace: [253, 245, 230],\n  olive: [128, 128, 0],\n  olivedrab: [107, 142, 35],\n  orange: [255, 165, 0],\n  orangered: [255, 69, 0],\n  orchid: [218, 112, 214],\n  palegoldenrod: [238, 232, 170],\n  palegreen: [152, 251, 152],\n  paleturquoise: [175, 238, 238],\n  palevioletred: [219, 112, 147],\n  papayawhip: [255, 239, 213],\n  peachpuff: [255, 218, 185],\n  peru: [205, 133, 63],\n  pink: [255, 192, 203],\n  plum: [221, 160, 221],\n  powderblue: [176, 224, 230],\n  purple: [128, 0, 128],\n  red: [255, 0, 0],\n  rosybrown: [188, 143, 143],\n  royalblue: [65, 105, 225],\n  saddlebrown: [139, 69, 19],\n  salmon: [250, 128, 114],\n  sandybrown: [244, 164, 96],\n  seagreen: [46, 139, 87],\n  seashell: [255, 245, 238],\n  sienna: [160, 82, 45],\n  silver: [192, 192, 192],\n  skyblue: [135, 206, 235],\n  slateblue: [106, 90, 205],\n  slategray: [112, 128, 144],\n  slategrey: [112, 128, 144],\n  snow: [255, 250, 250],\n  springgreen: [0, 255, 127],\n  steelblue: [70, 130, 180],\n  tan: [210, 180, 140],\n  teal: [0, 128, 128],\n  thistle: [216, 191, 216],\n  tomato: [255, 99, 71],\n  turquoise: [64, 224, 208],\n  violet: [238, 130, 238],\n  wheat: [245, 222, 179],\n  white: [255, 255, 255],\n  whitesmoke: [245, 245, 245],\n  yellow: [255, 255, 0],\n  yellowgreen: [154, 205, 50]\n};\nvar cx, cy, px, py, sx, sy;\ncx = cy = px = py = sx = sy = 0;\nvar parameters = {\n  A: 7,\n  a: 7,\n  C: 6,\n  c: 6,\n  H: 1,\n  h: 1,\n  L: 2,\n  l: 2,\n  M: 2,\n  m: 2,\n  Q: 4,\n  q: 4,\n  S: 4,\n  s: 4,\n  T: 2,\n  t: 2,\n  V: 1,\n  v: 1,\n  Z: 0,\n  z: 0\n};\nvar parse = function parse(path) {\n  var cmd;\n  var ret = [];\n  var args = [];\n  var curArg = '';\n  var foundDecimal = false;\n  var params = 0;\n  var _iterator = _createForOfIteratorHelper(path),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var c = _step.value;\n      if (parameters[c] != null) {\n        params = parameters[c];\n        if (cmd) {\n          // save existing command\n          if (curArg.length > 0) {\n            args[args.length] = +curArg;\n          }\n          ret[ret.length] = {\n            cmd: cmd,\n            args: args\n          };\n          args = [];\n          curArg = '';\n          foundDecimal = false;\n        }\n        cmd = c;\n      } else if ([' ', ','].includes(c) || c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e' || c === '.' && foundDecimal) {\n        if (curArg.length === 0) {\n          continue;\n        }\n        if (args.length === params) {\n          // handle reused commands\n          ret[ret.length] = {\n            cmd: cmd,\n            args: args\n          };\n          args = [+curArg]; // handle assumed commands\n\n          if (cmd === 'M') {\n            cmd = 'L';\n          }\n          if (cmd === 'm') {\n            cmd = 'l';\n          }\n        } else {\n          args[args.length] = +curArg;\n        }\n        foundDecimal = c === '.'; // fix for negative numbers or repeated decimals with no delimeter between commands\n\n        curArg = ['-', '.'].includes(c) ? c : '';\n      } else {\n        curArg += c;\n        if (c === '.') {\n          foundDecimal = true;\n        }\n      }\n    } // add the last command\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  if (curArg.length > 0) {\n    if (args.length === params) {\n      // handle reused commands\n      ret[ret.length] = {\n        cmd: cmd,\n        args: args\n      };\n      args = [+curArg]; // handle assumed commands\n\n      if (cmd === 'M') {\n        cmd = 'L';\n      }\n      if (cmd === 'm') {\n        cmd = 'l';\n      }\n    } else {\n      args[args.length] = +curArg;\n    }\n  }\n  ret[ret.length] = {\n    cmd: cmd,\n    args: args\n  };\n  return ret;\n};\nvar _apply = function apply(commands, doc) {\n  // current point, control point, and subpath starting point\n  cx = cy = px = py = sx = sy = 0; // run the commands\n\n  for (var i = 0; i < commands.length; i++) {\n    var c = commands[i];\n    if (typeof runners[c.cmd] === 'function') {\n      runners[c.cmd](doc, c.args);\n    }\n  }\n};\nvar runners = {\n  M: function M(doc, a) {\n    cx = a[0];\n    cy = a[1];\n    px = py = null;\n    sx = cx;\n    sy = cy;\n    return doc.moveTo(cx, cy);\n  },\n  m: function m(doc, a) {\n    cx += a[0];\n    cy += a[1];\n    px = py = null;\n    sx = cx;\n    sy = cy;\n    return doc.moveTo(cx, cy);\n  },\n  C: function C(doc, a) {\n    cx = a[4];\n    cy = a[5];\n    px = a[2];\n    py = a[3];\n    return doc.bezierCurveTo.apply(doc, _toConsumableArray(a));\n  },\n  c: function c(doc, a) {\n    doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy);\n    px = cx + a[2];\n    py = cy + a[3];\n    cx += a[4];\n    return cy += a[5];\n  },\n  S: function S(doc, a) {\n    if (px === null) {\n      px = cx;\n      py = cy;\n    }\n    doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);\n    px = a[0];\n    py = a[1];\n    cx = a[2];\n    return cy = a[3];\n  },\n  s: function s(doc, a) {\n    if (px === null) {\n      px = cx;\n      py = cy;\n    }\n    doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]);\n    px = cx + a[0];\n    py = cy + a[1];\n    cx += a[2];\n    return cy += a[3];\n  },\n  Q: function Q(doc, a) {\n    px = a[0];\n    py = a[1];\n    cx = a[2];\n    cy = a[3];\n    return doc.quadraticCurveTo(a[0], a[1], cx, cy);\n  },\n  q: function q(doc, a) {\n    doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);\n    px = cx + a[0];\n    py = cy + a[1];\n    cx += a[2];\n    return cy += a[3];\n  },\n  T: function T(doc, a) {\n    if (px === null) {\n      px = cx;\n      py = cy;\n    } else {\n      px = cx - (px - cx);\n      py = cy - (py - cy);\n    }\n    doc.quadraticCurveTo(px, py, a[0], a[1]);\n    px = cx - (px - cx);\n    py = cy - (py - cy);\n    cx = a[0];\n    return cy = a[1];\n  },\n  t: function t(doc, a) {\n    if (px === null) {\n      px = cx;\n      py = cy;\n    } else {\n      px = cx - (px - cx);\n      py = cy - (py - cy);\n    }\n    doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);\n    cx += a[0];\n    return cy += a[1];\n  },\n  A: function A(doc, a) {\n    solveArc(doc, cx, cy, a);\n    cx = a[5];\n    return cy = a[6];\n  },\n  a: function a(doc, _a) {\n    _a[5] += cx;\n    _a[6] += cy;\n    solveArc(doc, cx, cy, _a);\n    cx = _a[5];\n    return cy = _a[6];\n  },\n  L: function L(doc, a) {\n    cx = a[0];\n    cy = a[1];\n    px = py = null;\n    return doc.lineTo(cx, cy);\n  },\n  l: function l(doc, a) {\n    cx += a[0];\n    cy += a[1];\n    px = py = null;\n    return doc.lineTo(cx, cy);\n  },\n  H: function H(doc, a) {\n    cx = a[0];\n    px = py = null;\n    return doc.lineTo(cx, cy);\n  },\n  h: function h(doc, a) {\n    cx += a[0];\n    px = py = null;\n    return doc.lineTo(cx, cy);\n  },\n  V: function V(doc, a) {\n    cy = a[0];\n    px = py = null;\n    return doc.lineTo(cx, cy);\n  },\n  v: function v(doc, a) {\n    cy += a[0];\n    px = py = null;\n    return doc.lineTo(cx, cy);\n  },\n  Z: function Z(doc) {\n    doc.closePath();\n    cx = sx;\n    return cy = sy;\n  },\n  z: function z(doc) {\n    doc.closePath();\n    cx = sx;\n    return cy = sy;\n  }\n};\nvar solveArc = function solveArc(doc, x, y, coords) {\n  var _coords = _slicedToArray(coords, 7),\n    rx = _coords[0],\n    ry = _coords[1],\n    rot = _coords[2],\n    large = _coords[3],\n    sweep = _coords[4],\n    ex = _coords[5],\n    ey = _coords[6];\n  var segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);\n  var _iterator2 = _createForOfIteratorHelper(segs),\n    _step2;\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var seg = _step2.value;\n      var bez = segmentToBezier.apply(void 0, _toConsumableArray(seg));\n      doc.bezierCurveTo.apply(doc, _toConsumableArray(bez));\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n}; // from Inkscape svgtopdf, thanks!\n\nvar arcToSegments = function arcToSegments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n  var th = rotateX * (Math.PI / 180);\n  var sin_th = Math.sin(th);\n  var cos_th = Math.cos(th);\n  rx = Math.abs(rx);\n  ry = Math.abs(ry);\n  px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n  py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n  var pl = px * px / (rx * rx) + py * py / (ry * ry);\n  if (pl > 1) {\n    pl = Math.sqrt(pl);\n    rx *= pl;\n    ry *= pl;\n  }\n  var a00 = cos_th / rx;\n  var a01 = sin_th / rx;\n  var a10 = -sin_th / ry;\n  var a11 = cos_th / ry;\n  var x0 = a00 * ox + a01 * oy;\n  var y0 = a10 * ox + a11 * oy;\n  var x1 = a00 * x + a01 * y;\n  var y1 = a10 * x + a11 * y;\n  var d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n  var sfactor_sq = 1 / d - 0.25;\n  if (sfactor_sq < 0) {\n    sfactor_sq = 0;\n  }\n  var sfactor = Math.sqrt(sfactor_sq);\n  if (sweep === large) {\n    sfactor = -sfactor;\n  }\n  var xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n  var yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n  var th0 = Math.atan2(y0 - yc, x0 - xc);\n  var th1 = Math.atan2(y1 - yc, x1 - xc);\n  var th_arc = th1 - th0;\n  if (th_arc < 0 && sweep === 1) {\n    th_arc += 2 * Math.PI;\n  } else if (th_arc > 0 && sweep === 0) {\n    th_arc -= 2 * Math.PI;\n  }\n  var segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));\n  var result = [];\n  for (var i = 0; i < segments; i++) {\n    var th2 = th0 + i * th_arc / segments;\n    var th3 = th0 + (i + 1) * th_arc / segments;\n    result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n  }\n  return result;\n};\nvar segmentToBezier = function segmentToBezier(cx, cy, th0, th1, rx, ry, sin_th, cos_th) {\n  var a00 = cos_th * rx;\n  var a01 = -sin_th * ry;\n  var a10 = sin_th * rx;\n  var a11 = cos_th * ry;\n  var th_half = 0.5 * (th1 - th0);\n  var t = 8 / 3 * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half);\n  var x1 = cx + Math.cos(th0) - t * Math.sin(th0);\n  var y1 = cy + Math.sin(th0) + t * Math.cos(th0);\n  var x3 = cx + Math.cos(th1);\n  var y3 = cy + Math.sin(th1);\n  var x2 = x3 + t * Math.sin(th1);\n  var y2 = y3 - t * Math.cos(th1);\n  return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];\n};\nvar SVGPath = /*#__PURE__*/function () {\n  function SVGPath() {\n    _classCallCheck(this, SVGPath);\n  }\n  _createClass(SVGPath, null, [{\n    key: \"apply\",\n    value: function apply(doc, path) {\n      var commands = parse(path);\n      _apply(commands, doc);\n    }\n  }]);\n  return SVGPath;\n}();\nvar number$1 = PDFObject.number; // This constant is used to approximate a symmetrical arc using a cubic\n// Bezier curve.\n\nvar KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);\nvar VectorMixin = {\n  initVector: function initVector() {\n    this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix\n\n    return this._ctmStack = [];\n  },\n  save: function save() {\n    this._ctmStack.push(this._ctm.slice()); // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time?\n\n    return this.addContent('q');\n  },\n  restore: function restore() {\n    this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];\n    return this.addContent('Q');\n  },\n  closePath: function closePath() {\n    return this.addContent('h');\n  },\n  lineWidth: function lineWidth(w) {\n    return this.addContent(\"\".concat(number$1(w), \" w\"));\n  },\n  _CAP_STYLES: {\n    BUTT: 0,\n    ROUND: 1,\n    SQUARE: 2\n  },\n  lineCap: function lineCap(c) {\n    if (typeof c === 'string') {\n      c = this._CAP_STYLES[c.toUpperCase()];\n    }\n    return this.addContent(\"\".concat(c, \" J\"));\n  },\n  _JOIN_STYLES: {\n    MITER: 0,\n    ROUND: 1,\n    BEVEL: 2\n  },\n  lineJoin: function lineJoin(j) {\n    if (typeof j === 'string') {\n      j = this._JOIN_STYLES[j.toUpperCase()];\n    }\n    return this.addContent(\"\".concat(j, \" j\"));\n  },\n  miterLimit: function miterLimit(m) {\n    return this.addContent(\"\".concat(number$1(m), \" M\"));\n  },\n  dash: function dash(length) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var originalLength = length;\n    if (!Array.isArray(length)) {\n      length = [length, options.space || length];\n    }\n    var valid = length.every(function (x) {\n      return Number.isFinite(x) && x > 0;\n    });\n    if (!valid) {\n      throw new Error(\"dash(\".concat(JSON.stringify(originalLength), \", \").concat(JSON.stringify(options), \") invalid, lengths must be numeric and greater than zero\"));\n    }\n    length = length.map(number$1).join(' ');\n    return this.addContent(\"[\".concat(length, \"] \").concat(number$1(options.phase || 0), \" d\"));\n  },\n  undash: function undash() {\n    return this.addContent('[] 0 d');\n  },\n  moveTo: function moveTo(x, y) {\n    return this.addContent(\"\".concat(number$1(x), \" \").concat(number$1(y), \" m\"));\n  },\n  lineTo: function lineTo(x, y) {\n    return this.addContent(\"\".concat(number$1(x), \" \").concat(number$1(y), \" l\"));\n  },\n  bezierCurveTo: function bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n    return this.addContent(\"\".concat(number$1(cp1x), \" \").concat(number$1(cp1y), \" \").concat(number$1(cp2x), \" \").concat(number$1(cp2y), \" \").concat(number$1(x), \" \").concat(number$1(y), \" c\"));\n  },\n  quadraticCurveTo: function quadraticCurveTo(cpx, cpy, x, y) {\n    return this.addContent(\"\".concat(number$1(cpx), \" \").concat(number$1(cpy), \" \").concat(number$1(x), \" \").concat(number$1(y), \" v\"));\n  },\n  rect: function rect(x, y, w, h) {\n    return this.addContent(\"\".concat(number$1(x), \" \").concat(number$1(y), \" \").concat(number$1(w), \" \").concat(number$1(h), \" re\"));\n  },\n  roundedRect: function roundedRect(x, y, w, h, r) {\n    if (r == null) {\n      r = 0;\n    }\n    r = Math.min(r, 0.5 * w, 0.5 * h); // amount to inset control points from corners (see `ellipse`)\n\n    var c = r * (1.0 - KAPPA);\n    this.moveTo(x + r, y);\n    this.lineTo(x + w - r, y);\n    this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r);\n    this.lineTo(x + w, y + h - r);\n    this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h);\n    this.lineTo(x + r, y + h);\n    this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r);\n    this.lineTo(x, y + r);\n    this.bezierCurveTo(x, y + c, x + c, y, x + r, y);\n    return this.closePath();\n  },\n  ellipse: function ellipse(x, y, r1, r2) {\n    // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084\n    if (r2 == null) {\n      r2 = r1;\n    }\n    x -= r1;\n    y -= r2;\n    var ox = r1 * KAPPA;\n    var oy = r2 * KAPPA;\n    var xe = x + r1 * 2;\n    var ye = y + r2 * 2;\n    var xm = x + r1;\n    var ym = y + r2;\n    this.moveTo(x, ym);\n    this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n    this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n    this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n    this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n    return this.closePath();\n  },\n  circle: function circle(x, y, radius) {\n    return this.ellipse(x, y, radius);\n  },\n  arc: function arc(x, y, radius, startAngle, endAngle, anticlockwise) {\n    if (anticlockwise == null) {\n      anticlockwise = false;\n    }\n    var TWO_PI = 2.0 * Math.PI;\n    var HALF_PI = 0.5 * Math.PI;\n    var deltaAng = endAngle - startAngle;\n    if (Math.abs(deltaAng) > TWO_PI) {\n      // draw only full circle if more than that is specified\n      deltaAng = TWO_PI;\n    } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) {\n      // necessary to flip direction of rendering\n      var dir = anticlockwise ? -1 : 1;\n      deltaAng = dir * TWO_PI + deltaAng;\n    }\n    var numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI);\n    var segAng = deltaAng / numSegs;\n    var handleLen = segAng / HALF_PI * KAPPA * radius;\n    var curAng = startAngle; // component distances between anchor point and control point\n\n    var deltaCx = -Math.sin(curAng) * handleLen;\n    var deltaCy = Math.cos(curAng) * handleLen; // anchor point\n\n    var ax = x + Math.cos(curAng) * radius;\n    var ay = y + Math.sin(curAng) * radius; // calculate and render segments\n\n    this.moveTo(ax, ay);\n    for (var segIdx = 0; segIdx < numSegs; segIdx++) {\n      // starting control point\n      var cp1x = ax + deltaCx;\n      var cp1y = ay + deltaCy; // step angle\n\n      curAng += segAng; // next anchor point\n\n      ax = x + Math.cos(curAng) * radius;\n      ay = y + Math.sin(curAng) * radius; // next control point delta\n\n      deltaCx = -Math.sin(curAng) * handleLen;\n      deltaCy = Math.cos(curAng) * handleLen; // ending control point\n\n      var cp2x = ax - deltaCx;\n      var cp2y = ay - deltaCy; // render segment\n\n      this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay);\n    }\n    return this;\n  },\n  polygon: function polygon() {\n    for (var _len = arguments.length, points = new Array(_len), _key = 0; _key < _len; _key++) {\n      points[_key] = arguments[_key];\n    }\n    this.moveTo.apply(this, _toConsumableArray(points.shift() || []));\n    for (var _i = 0, _points = points; _i < _points.length; _i++) {\n      var point = _points[_i];\n      this.lineTo.apply(this, _toConsumableArray(point || []));\n    }\n    return this.closePath();\n  },\n  path: function path(_path) {\n    SVGPath.apply(this, _path);\n    return this;\n  },\n  _windingRule: function _windingRule(rule) {\n    if (/even-?odd/.test(rule)) {\n      return '*';\n    }\n    return '';\n  },\n  fill: function fill(color, rule) {\n    if (/(even-?odd)|(non-?zero)/.test(color)) {\n      rule = color;\n      color = null;\n    }\n    if (color) {\n      this.fillColor(color);\n    }\n    return this.addContent(\"f\".concat(this._windingRule(rule)));\n  },\n  stroke: function stroke(color) {\n    if (color) {\n      this.strokeColor(color);\n    }\n    return this.addContent('S');\n  },\n  fillAndStroke: function fillAndStroke(fillColor, strokeColor, rule) {\n    if (strokeColor == null) {\n      strokeColor = fillColor;\n    }\n    var isFillRule = /(even-?odd)|(non-?zero)/;\n    if (isFillRule.test(fillColor)) {\n      rule = fillColor;\n      fillColor = null;\n    }\n    if (isFillRule.test(strokeColor)) {\n      rule = strokeColor;\n      strokeColor = fillColor;\n    }\n    if (fillColor) {\n      this.fillColor(fillColor);\n      this.strokeColor(strokeColor);\n    }\n    return this.addContent(\"B\".concat(this._windingRule(rule)));\n  },\n  clip: function clip(rule) {\n    return this.addContent(\"W\".concat(this._windingRule(rule), \" n\"));\n  },\n  transform: function transform(m11, m12, m21, m22, dx, dy) {\n    // keep track of the current transformation matrix\n    var m = this._ctm;\n    var _m = _slicedToArray(m, 6),\n      m0 = _m[0],\n      m1 = _m[1],\n      m2 = _m[2],\n      m3 = _m[3],\n      m4 = _m[4],\n      m5 = _m[5];\n    m[0] = m0 * m11 + m2 * m12;\n    m[1] = m1 * m11 + m3 * m12;\n    m[2] = m0 * m21 + m2 * m22;\n    m[3] = m1 * m21 + m3 * m22;\n    m[4] = m0 * dx + m2 * dy + m4;\n    m[5] = m1 * dx + m3 * dy + m5;\n    var values = [m11, m12, m21, m22, dx, dy].map(function (v) {\n      return number$1(v);\n    }).join(' ');\n    return this.addContent(\"\".concat(values, \" cm\"));\n  },\n  translate: function translate(x, y) {\n    return this.transform(1, 0, 0, 1, x, y);\n  },\n  rotate: function rotate(angle) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var y;\n    var rad = angle * Math.PI / 180;\n    var cos = Math.cos(rad);\n    var sin = Math.sin(rad);\n    var x = y = 0;\n    if (options.origin != null) {\n      var _options$origin = _slicedToArray(options.origin, 2);\n      x = _options$origin[0];\n      y = _options$origin[1];\n      var x1 = x * cos - y * sin;\n      var y1 = x * sin + y * cos;\n      x -= x1;\n      y -= y1;\n    }\n    return this.transform(cos, sin, -sin, cos, x, y);\n  },\n  scale: function scale(xFactor, yFactor) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var y;\n    if (yFactor == null) {\n      yFactor = xFactor;\n    }\n    if (typeof yFactor === 'object') {\n      options = yFactor;\n      yFactor = xFactor;\n    }\n    var x = y = 0;\n    if (options.origin != null) {\n      var _options$origin2 = _slicedToArray(options.origin, 2);\n      x = _options$origin2[0];\n      y = _options$origin2[1];\n      x -= xFactor * x;\n      y -= yFactor * y;\n    }\n    return this.transform(xFactor, 0, 0, yFactor, x, y);\n  }\n};\nvar WIN_ANSI_MAP = {\n  402: 131,\n  8211: 150,\n  8212: 151,\n  8216: 145,\n  8217: 146,\n  8218: 130,\n  8220: 147,\n  8221: 148,\n  8222: 132,\n  8224: 134,\n  8225: 135,\n  8226: 149,\n  8230: 133,\n  8364: 128,\n  8240: 137,\n  8249: 139,\n  8250: 155,\n  710: 136,\n  8482: 153,\n  338: 140,\n  339: 156,\n  732: 152,\n  352: 138,\n  353: 154,\n  376: 159,\n  381: 142,\n  382: 158\n};\nvar characters = \".notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n  \\nspace         exclam         quotedbl       numbersign\\ndollar        percent        ampersand      quotesingle\\nparenleft     parenright     asterisk       plus\\ncomma         hyphen         period         slash\\nzero          one            two            three\\nfour          five           six            seven\\neight         nine           colon          semicolon\\nless          equal          greater        question\\n  \\nat            A              B              C\\nD             E              F              G\\nH             I              J              K\\nL             M              N              O\\nP             Q              R              S\\nT             U              V              W\\nX             Y              Z              bracketleft\\nbackslash     bracketright   asciicircum    underscore\\n  \\ngrave         a              b              c\\nd             e              f              g\\nh             i              j              k\\nl             m              n              o\\np             q              r              s\\nt             u              v              w\\nx             y              z              braceleft\\nbar           braceright     asciitilde     .notdef\\n  \\nEuro          .notdef        quotesinglbase florin\\nquotedblbase  ellipsis       dagger         daggerdbl\\ncircumflex    perthousand    Scaron         guilsinglleft\\nOE            .notdef        Zcaron         .notdef\\n.notdef       quoteleft      quoteright     quotedblleft\\nquotedblright bullet         endash         emdash\\ntilde         trademark      scaron         guilsinglright\\noe            .notdef        zcaron         ydieresis\\n  \\nspace         exclamdown     cent           sterling\\ncurrency      yen            brokenbar      section\\ndieresis      copyright      ordfeminine    guillemotleft\\nlogicalnot    hyphen         registered     macron\\ndegree        plusminus      twosuperior    threesuperior\\nacute         mu             paragraph      periodcentered\\ncedilla       onesuperior    ordmasculine   guillemotright\\nonequarter    onehalf        threequarters  questiondown\\n  \\nAgrave        Aacute         Acircumflex    Atilde\\nAdieresis     Aring          AE             Ccedilla\\nEgrave        Eacute         Ecircumflex    Edieresis\\nIgrave        Iacute         Icircumflex    Idieresis\\nEth           Ntilde         Ograve         Oacute\\nOcircumflex   Otilde         Odieresis      multiply\\nOslash        Ugrave         Uacute         Ucircumflex\\nUdieresis     Yacute         Thorn          germandbls\\n  \\nagrave        aacute         acircumflex    atilde\\nadieresis     aring          ae             ccedilla\\negrave        eacute         ecircumflex    edieresis\\nigrave        iacute         icircumflex    idieresis\\neth           ntilde         ograve         oacute\\nocircumflex   otilde         odieresis      divide\\noslash        ugrave         uacute         ucircumflex\\nudieresis     yacute         thorn          ydieresis\".split(/\\s+/);\nvar AFMFont = /*#__PURE__*/function () {\n  _createClass(AFMFont, null, [{\n    key: \"open\",\n    value: function open(filename) {\n      return new AFMFont(fs.readFileSync(filename, 'utf8'));\n    }\n  }]);\n  function AFMFont(contents) {\n    _classCallCheck(this, AFMFont);\n    this.contents = contents;\n    this.attributes = {};\n    this.glyphWidths = {};\n    this.boundingBoxes = {};\n    this.kernPairs = {};\n    this.parse(); // todo: remove charWidths since appears to not be used\n\n    this.charWidths = new Array(256);\n    for (var char = 0; char <= 255; char++) {\n      this.charWidths[char] = this.glyphWidths[characters[char]];\n    }\n    this.bbox = this.attributes['FontBBox'].split(/\\s+/).map(function (e) {\n      return +e;\n    });\n    this.ascender = +(this.attributes['Ascender'] || 0);\n    this.descender = +(this.attributes['Descender'] || 0);\n    this.xHeight = +(this.attributes['XHeight'] || 0);\n    this.capHeight = +(this.attributes['CapHeight'] || 0);\n    this.lineGap = this.bbox[3] - this.bbox[1] - (this.ascender - this.descender);\n  }\n  _createClass(AFMFont, [{\n    key: \"parse\",\n    value: function parse() {\n      var section = '';\n      var _iterator = _createForOfIteratorHelper(this.contents.split('\\n')),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var line = _step.value;\n          var match;\n          var a;\n          if (match = line.match(/^Start(\\w+)/)) {\n            section = match[1];\n            continue;\n          } else if (match = line.match(/^End(\\w+)/)) {\n            section = '';\n            continue;\n          }\n          switch (section) {\n            case 'FontMetrics':\n              match = line.match(/(^\\w+)\\s+(.*)/);\n              var key = match[1];\n              var value = match[2];\n              if (a = this.attributes[key]) {\n                if (!Array.isArray(a)) {\n                  a = this.attributes[key] = [a];\n                }\n                a.push(value);\n              } else {\n                this.attributes[key] = value;\n              }\n              break;\n            case 'CharMetrics':\n              if (!/^CH?\\s/.test(line)) {\n                continue;\n              }\n              var name = line.match(/\\bN\\s+(\\.?\\w+)\\s*;/)[1];\n              this.glyphWidths[name] = +line.match(/\\bWX\\s+(\\d+)\\s*;/)[1];\n              break;\n            case 'KernPairs':\n              match = line.match(/^KPX\\s+(\\.?\\w+)\\s+(\\.?\\w+)\\s+(-?\\d+)/);\n              if (match) {\n                this.kernPairs[match[1] + '\\0' + match[2]] = parseInt(match[3]);\n              }\n              break;\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n  }, {\n    key: \"encodeText\",\n    value: function encodeText(text) {\n      var res = [];\n      for (var i = 0, len = text.length; i < len; i++) {\n        var char = text.charCodeAt(i);\n        char = WIN_ANSI_MAP[char] || char;\n        res.push(char.toString(16));\n      }\n      return res;\n    }\n  }, {\n    key: \"glyphsForString\",\n    value: function glyphsForString(string) {\n      var glyphs = [];\n      for (var i = 0, len = string.length; i < len; i++) {\n        var charCode = string.charCodeAt(i);\n        glyphs.push(this.characterToGlyph(charCode));\n      }\n      return glyphs;\n    }\n  }, {\n    key: \"characterToGlyph\",\n    value: function characterToGlyph(character) {\n      return characters[WIN_ANSI_MAP[character] || character] || '.notdef';\n    }\n  }, {\n    key: \"widthOfGlyph\",\n    value: function widthOfGlyph(glyph) {\n      return this.glyphWidths[glyph] || 0;\n    }\n  }, {\n    key: \"getKernPair\",\n    value: function getKernPair(left, right) {\n      return this.kernPairs[left + '\\0' + right] || 0;\n    }\n  }, {\n    key: \"advancesForGlyphs\",\n    value: function advancesForGlyphs(glyphs) {\n      var advances = [];\n      for (var index = 0; index < glyphs.length; index++) {\n        var left = glyphs[index];\n        var right = glyphs[index + 1];\n        advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right));\n      }\n      return advances;\n    }\n  }]);\n  return AFMFont;\n}();\nvar PDFFont = /*#__PURE__*/function () {\n  function PDFFont() {\n    _classCallCheck(this, PDFFont);\n  }\n  _createClass(PDFFont, [{\n    key: \"encode\",\n    value: function encode() {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }, {\n    key: \"widthOfString\",\n    value: function widthOfString() {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }, {\n    key: \"ref\",\n    value: function ref() {\n      return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref();\n    }\n  }, {\n    key: \"finalize\",\n    value: function finalize() {\n      if (this.embedded || this.dictionary == null) {\n        return;\n      }\n      this.embed();\n      return this.embedded = true;\n    }\n  }, {\n    key: \"embed\",\n    value: function embed() {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }, {\n    key: \"lineHeight\",\n    value: function lineHeight(size, includeGap) {\n      if (includeGap == null) {\n        includeGap = false;\n      }\n      var gap = includeGap ? this.lineGap : 0;\n      return (this.ascender + gap - this.descender) / 1000 * size;\n    }\n  }]);\n  return PDFFont;\n}();\nvar STANDARD_FONTS = {\n  Courier: function Courier() {\n    return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8');\n  },\n  'Courier-Bold': function CourierBold() {\n    return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8');\n  },\n  'Courier-Oblique': function CourierOblique() {\n    return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8');\n  },\n  'Courier-BoldOblique': function CourierBoldOblique() {\n    return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8');\n  },\n  Helvetica: function Helvetica() {\n    return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8');\n  },\n  'Helvetica-Bold': function HelveticaBold() {\n    return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8');\n  },\n  'Helvetica-Oblique': function HelveticaOblique() {\n    return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8');\n  },\n  'Helvetica-BoldOblique': function HelveticaBoldOblique() {\n    return fs.readFileSync(__dirname + '/data/Helvetica-BoldOblique.afm', 'utf8');\n  },\n  'Times-Roman': function TimesRoman() {\n    return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8');\n  },\n  'Times-Bold': function TimesBold() {\n    return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8');\n  },\n  'Times-Italic': function TimesItalic() {\n    return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8');\n  },\n  'Times-BoldItalic': function TimesBoldItalic() {\n    return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8');\n  },\n  Symbol: function Symbol() {\n    return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8');\n  },\n  ZapfDingbats: function ZapfDingbats() {\n    return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8');\n  }\n};\nvar StandardFont = /*#__PURE__*/function (_PDFFont) {\n  _inherits(StandardFont, _PDFFont);\n  var _super = _createSuper(StandardFont);\n  function StandardFont(document, name, id) {\n    var _this;\n    _classCallCheck(this, StandardFont);\n    _this = _super.call(this);\n    _this.document = document;\n    _this.name = name;\n    _this.id = id;\n    _this.font = new AFMFont(STANDARD_FONTS[_this.name]());\n    var _this$font = _this.font;\n    _this.ascender = _this$font.ascender;\n    _this.descender = _this$font.descender;\n    _this.bbox = _this$font.bbox;\n    _this.lineGap = _this$font.lineGap;\n    _this.xHeight = _this$font.xHeight;\n    _this.capHeight = _this$font.capHeight;\n    return _this;\n  }\n  _createClass(StandardFont, [{\n    key: \"embed\",\n    value: function embed() {\n      this.dictionary.data = {\n        Type: 'Font',\n        BaseFont: this.name,\n        Subtype: 'Type1',\n        Encoding: 'WinAnsiEncoding'\n      };\n      return this.dictionary.end();\n    }\n  }, {\n    key: \"encode\",\n    value: function encode(text) {\n      var encoded = this.font.encodeText(text);\n      var glyphs = this.font.glyphsForString(\"\".concat(text));\n      var advances = this.font.advancesForGlyphs(glyphs);\n      var positions = [];\n      for (var i = 0; i < glyphs.length; i++) {\n        var glyph = glyphs[i];\n        positions.push({\n          xAdvance: advances[i],\n          yAdvance: 0,\n          xOffset: 0,\n          yOffset: 0,\n          advanceWidth: this.font.widthOfGlyph(glyph)\n        });\n      }\n      return [encoded, positions];\n    }\n  }, {\n    key: \"widthOfString\",\n    value: function widthOfString(string, size) {\n      var glyphs = this.font.glyphsForString(\"\".concat(string));\n      var advances = this.font.advancesForGlyphs(glyphs);\n      var width = 0;\n      var _iterator = _createForOfIteratorHelper(advances),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var advance = _step.value;\n          width += advance;\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      var scale = size / 1000;\n      return width * scale;\n    }\n  }], [{\n    key: \"isStandardFont\",\n    value: function isStandardFont(name) {\n      return name in STANDARD_FONTS;\n    }\n  }]);\n  return StandardFont;\n}(PDFFont);\nvar toHex = function toHex(num) {\n  return \"0000\".concat(num.toString(16)).slice(-4);\n};\nvar EmbeddedFont = /*#__PURE__*/function (_PDFFont) {\n  _inherits(EmbeddedFont, _PDFFont);\n  var _super = _createSuper(EmbeddedFont);\n  function EmbeddedFont(document, font, id) {\n    var _this;\n    _classCallCheck(this, EmbeddedFont);\n    _this = _super.call(this);\n    _this.document = document;\n    _this.font = font;\n    _this.id = id;\n    _this.subset = _this.font.createSubset();\n    _this.unicode = [[0]];\n    _this.widths = [_this.font.getGlyph(0).advanceWidth];\n    _this.name = _this.font.postscriptName;\n    _this.scale = 1000 / _this.font.unitsPerEm;\n    _this.ascender = _this.font.ascent * _this.scale;\n    _this.descender = _this.font.descent * _this.scale;\n    _this.xHeight = _this.font.xHeight * _this.scale;\n    _this.capHeight = _this.font.capHeight * _this.scale;\n    _this.lineGap = _this.font.lineGap * _this.scale;\n    _this.bbox = _this.font.bbox;\n    if (document.options.fontLayoutCache !== false) {\n      _this.layoutCache = Object.create(null);\n    }\n    return _this;\n  }\n  _createClass(EmbeddedFont, [{\n    key: \"layoutRun\",\n    value: function layoutRun(text, features) {\n      var run = this.font.layout(text, features); // Normalize position values\n\n      for (var i = 0; i < run.positions.length; i++) {\n        var position = run.positions[i];\n        for (var key in position) {\n          position[key] *= this.scale;\n        }\n        position.advanceWidth = run.glyphs[i].advanceWidth * this.scale;\n      }\n      return run;\n    }\n  }, {\n    key: \"layoutCached\",\n    value: function layoutCached(text) {\n      if (!this.layoutCache) {\n        return this.layoutRun(text);\n      }\n      var cached;\n      if (cached = this.layoutCache[text]) {\n        return cached;\n      }\n      var run = this.layoutRun(text);\n      this.layoutCache[text] = run;\n      return run;\n    }\n  }, {\n    key: \"layout\",\n    value: function layout(text, features, onlyWidth) {\n      // Skip the cache if any user defined features are applied\n      if (features) {\n        return this.layoutRun(text, features);\n      }\n      var glyphs = onlyWidth ? null : [];\n      var positions = onlyWidth ? null : [];\n      var advanceWidth = 0; // Split the string by words to increase cache efficiency.\n      // For this purpose, spaces and tabs are a good enough delimeter.\n\n      var last = 0;\n      var index = 0;\n      while (index <= text.length) {\n        var needle;\n        if (index === text.length && last < index || (needle = text.charAt(index), [' ', '\\t'].includes(needle))) {\n          var run = this.layoutCached(text.slice(last, ++index));\n          if (!onlyWidth) {\n            glyphs = glyphs.concat(run.glyphs);\n            positions = positions.concat(run.positions);\n          }\n          advanceWidth += run.advanceWidth;\n          last = index;\n        } else {\n          index++;\n        }\n      }\n      return {\n        glyphs: glyphs,\n        positions: positions,\n        advanceWidth: advanceWidth\n      };\n    }\n  }, {\n    key: \"encode\",\n    value: function encode(text, features) {\n      var _this$layout = this.layout(text, features),\n        glyphs = _this$layout.glyphs,\n        positions = _this$layout.positions;\n      var res = [];\n      for (var i = 0; i < glyphs.length; i++) {\n        var glyph = glyphs[i];\n        var gid = this.subset.includeGlyph(glyph.id);\n        res.push(\"0000\".concat(gid.toString(16)).slice(-4));\n        if (this.widths[gid] == null) {\n          this.widths[gid] = glyph.advanceWidth * this.scale;\n        }\n        if (this.unicode[gid] == null) {\n          this.unicode[gid] = glyph.codePoints;\n        }\n      }\n      return [res, positions];\n    }\n  }, {\n    key: \"widthOfString\",\n    value: function widthOfString(string, size, features) {\n      var width = this.layout(string, features, true).advanceWidth;\n      var scale = size / 1000;\n      return width * scale;\n    }\n  }, {\n    key: \"embed\",\n    value: function embed() {\n      var _this2 = this;\n      var isCFF = this.subset.cff != null;\n      var fontFile = this.document.ref();\n      if (isCFF) {\n        fontFile.data.Subtype = 'CIDFontType0C';\n      }\n      this.subset.encodeStream().on('data', function (data) {\n        return fontFile.write(data);\n      }).on('end', function () {\n        return fontFile.end();\n      });\n      var familyClass = ((this.font['OS/2'] != null ? this.font['OS/2'].sFamilyClass : undefined) || 0) >> 8;\n      var flags = 0;\n      if (this.font.post.isFixedPitch) {\n        flags |= 1 << 0;\n      }\n      if (1 <= familyClass && familyClass <= 7) {\n        flags |= 1 << 1;\n      }\n      flags |= 1 << 2; // assume the font uses non-latin characters\n\n      if (familyClass === 10) {\n        flags |= 1 << 3;\n      }\n      if (this.font.head.macStyle.italic) {\n        flags |= 1 << 6;\n      } // generate a tag (6 uppercase letters. 17 is the char code offset from '0' to 'A'. 73 will map to 'Z')\n\n      var tag = [1, 2, 3, 4, 5, 6].map(function (i) {\n        return String.fromCharCode((_this2.id.charCodeAt(i) || 73) + 17);\n      }).join('');\n      var name = tag + '+' + this.font.postscriptName;\n      var bbox = this.font.bbox;\n      var descriptor = this.document.ref({\n        Type: 'FontDescriptor',\n        FontName: name,\n        Flags: flags,\n        FontBBox: [bbox.minX * this.scale, bbox.minY * this.scale, bbox.maxX * this.scale, bbox.maxY * this.scale],\n        ItalicAngle: this.font.italicAngle,\n        Ascent: this.ascender,\n        Descent: this.descender,\n        CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,\n        XHeight: (this.font.xHeight || 0) * this.scale,\n        StemV: 0\n      }); // not sure how to calculate this\n\n      if (isCFF) {\n        descriptor.data.FontFile3 = fontFile;\n      } else {\n        descriptor.data.FontFile2 = fontFile;\n      }\n      descriptor.end();\n      var descendantFontData = {\n        Type: 'Font',\n        Subtype: 'CIDFontType0',\n        BaseFont: name,\n        CIDSystemInfo: {\n          Registry: new String('Adobe'),\n          Ordering: new String('Identity'),\n          Supplement: 0\n        },\n        FontDescriptor: descriptor,\n        W: [0, this.widths]\n      };\n      if (!isCFF) {\n        descendantFontData.Subtype = 'CIDFontType2';\n        descendantFontData.CIDToGIDMap = 'Identity';\n      }\n      var descendantFont = this.document.ref(descendantFontData);\n      descendantFont.end();\n      this.dictionary.data = {\n        Type: 'Font',\n        Subtype: 'Type0',\n        BaseFont: name,\n        Encoding: 'Identity-H',\n        DescendantFonts: [descendantFont],\n        ToUnicode: this.toUnicodeCmap()\n      };\n      return this.dictionary.end();\n    } // Maps the glyph ids encoded in the PDF back to unicode strings\n    // Because of ligature substitutions and the like, there may be one or more\n    // unicode characters represented by each glyph.\n  }, {\n    key: \"toUnicodeCmap\",\n    value: function toUnicodeCmap() {\n      var cmap = this.document.ref();\n      var entries = [];\n      var _iterator = _createForOfIteratorHelper(this.unicode),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var codePoints = _step.value;\n          var encoded = []; // encode codePoints to utf16\n\n          var _iterator2 = _createForOfIteratorHelper(codePoints),\n            _step2;\n          try {\n            for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n              var value = _step2.value;\n              if (value > 0xffff) {\n                value -= 0x10000;\n                encoded.push(toHex(value >>> 10 & 0x3ff | 0xd800));\n                value = 0xdc00 | value & 0x3ff;\n              }\n              encoded.push(toHex(value));\n            }\n          } catch (err) {\n            _iterator2.e(err);\n          } finally {\n            _iterator2.f();\n          }\n          entries.push(\"<\".concat(encoded.join(' '), \">\"));\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      cmap.end(\"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n  /Registry (Adobe)\\n  /Ordering (UCS)\\n  /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000><ffff>\\nendcodespacerange\\n1 beginbfrange\\n<0000> <\".concat(toHex(entries.length - 1), \"> [\").concat(entries.join(' '), \"]\\nendbfrange\\nendcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\"));\n      return cmap;\n    }\n  }]);\n  return EmbeddedFont;\n}(PDFFont);\nvar PDFFontFactory = /*#__PURE__*/function () {\n  function PDFFontFactory() {\n    _classCallCheck(this, PDFFontFactory);\n  }\n  _createClass(PDFFontFactory, null, [{\n    key: \"open\",\n    value: function open(document, src, family, id) {\n      var font;\n      if (typeof src === 'string') {\n        if (StandardFont.isStandardFont(src)) {\n          return new StandardFont(document, src, id);\n        }\n        src = fs.readFileSync(src);\n      }\n      if (Buffer.isBuffer(src)) {\n        font = _fontkit.default.create(src, family);\n      } else if (src instanceof Uint8Array) {\n        font = _fontkit.default.create(Buffer.from(src), family);\n      } else if (src instanceof ArrayBuffer) {\n        font = _fontkit.default.create(Buffer.from(new Uint8Array(src)), family);\n      }\n      if (font == null) {\n        throw new Error('Not a supported font format or standard PDF font.');\n      }\n      return new EmbeddedFont(document, font, id);\n    }\n  }]);\n  return PDFFontFactory;\n}();\nvar FontsMixin = {\n  initFonts: function initFonts() {\n    var defaultFont = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Helvetica';\n    // Lookup table for embedded fonts\n    this._fontFamilies = {};\n    this._fontCount = 0; // Font state\n\n    this._fontSize = 12;\n    this._font = null;\n    this._registeredFonts = {}; // Set the default font\n\n    if (defaultFont) {\n      this.font(defaultFont);\n    }\n  },\n  font: function font(src, family, size) {\n    var cacheKey, font;\n    if (typeof family === 'number') {\n      size = family;\n      family = null;\n    } // check registered fonts if src is a string\n\n    if (typeof src === 'string' && this._registeredFonts[src]) {\n      cacheKey = src;\n      var _this$_registeredFont = this._registeredFonts[src];\n      src = _this$_registeredFont.src;\n      family = _this$_registeredFont.family;\n    } else {\n      cacheKey = family || src;\n      if (typeof cacheKey !== 'string') {\n        cacheKey = null;\n      }\n    }\n    if (size != null) {\n      this.fontSize(size);\n    } // fast path: check if the font is already in the PDF\n\n    if (font = this._fontFamilies[cacheKey]) {\n      this._font = font;\n      return this;\n    } // load the font\n\n    var id = \"F\".concat(++this._fontCount);\n    this._font = PDFFontFactory.open(this, src, family, id); // check for existing font familes with the same name already in the PDF\n    // useful if the font was passed as a buffer\n\n    if (font = this._fontFamilies[this._font.name]) {\n      this._font = font;\n      return this;\n    } // save the font for reuse later\n\n    if (cacheKey) {\n      this._fontFamilies[cacheKey] = this._font;\n    }\n    if (this._font.name) {\n      this._fontFamilies[this._font.name] = this._font;\n    }\n    return this;\n  },\n  fontSize: function fontSize(_fontSize) {\n    this._fontSize = _fontSize;\n    return this;\n  },\n  currentLineHeight: function currentLineHeight(includeGap) {\n    if (includeGap == null) {\n      includeGap = false;\n    }\n    return this._font.lineHeight(this._fontSize, includeGap);\n  },\n  registerFont: function registerFont(name, src, family) {\n    this._registeredFonts[name] = {\n      src: src,\n      family: family\n    };\n    return this;\n  }\n};\nvar LineWrapper = /*#__PURE__*/function (_EventEmitter) {\n  _inherits(LineWrapper, _EventEmitter);\n  var _super = _createSuper(LineWrapper);\n  function LineWrapper(document, options) {\n    var _this;\n    _classCallCheck(this, LineWrapper);\n    _this = _super.call(this);\n    _this.document = document;\n    _this.indent = options.indent || 0;\n    _this.characterSpacing = options.characterSpacing || 0;\n    _this.wordSpacing = options.wordSpacing === 0;\n    _this.columns = options.columns || 1;\n    _this.columnGap = options.columnGap != null ? options.columnGap : 18; // 1/4 inch\n\n    _this.lineWidth = (options.width - _this.columnGap * (_this.columns - 1)) / _this.columns;\n    _this.spaceLeft = _this.lineWidth;\n    _this.startX = _this.document.x;\n    _this.startY = _this.document.y;\n    _this.column = 1;\n    _this.ellipsis = options.ellipsis;\n    _this.continuedX = 0;\n    _this.features = options.features; // calculate the maximum Y position the text can appear at\n\n    if (options.height != null) {\n      _this.height = options.height;\n      _this.maxY = _this.startY + options.height;\n    } else {\n      _this.maxY = _this.document.page.maxY();\n    } // handle paragraph indents\n\n    _this.on('firstLine', function (options) {\n      // if this is the first line of the text segment, and\n      // we're continuing where we left off, indent that much\n      // otherwise use the user specified indent option\n      var indent = _this.continuedX || _this.indent;\n      _this.document.x += indent;\n      _this.lineWidth -= indent;\n      return _this.once('line', function () {\n        _this.document.x -= indent;\n        _this.lineWidth += indent;\n        if (options.continued && !_this.continuedX) {\n          _this.continuedX = _this.indent;\n        }\n        if (!options.continued) {\n          return _this.continuedX = 0;\n        }\n      });\n    }); // handle left aligning last lines of paragraphs\n\n    _this.on('lastLine', function (options) {\n      var align = options.align;\n      if (align === 'justify') {\n        options.align = 'left';\n      }\n      _this.lastLine = true;\n      return _this.once('line', function () {\n        _this.document.y += options.paragraphGap || 0;\n        options.align = align;\n        return _this.lastLine = false;\n      });\n    });\n    return _this;\n  }\n  _createClass(LineWrapper, [{\n    key: \"wordWidth\",\n    value: function wordWidth(word) {\n      return this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing;\n    }\n  }, {\n    key: \"eachWord\",\n    value: function eachWord(text, fn) {\n      // setup a unicode line breaker\n      var bk;\n      var breaker = new _linebreak.default(text);\n      var last = null;\n      var wordWidths = Object.create(null);\n      while (bk = breaker.nextBreak()) {\n        var shouldContinue;\n        var word = text.slice((last != null ? last.position : undefined) || 0, bk.position);\n        var w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word); // if the word is longer than the whole line, chop it up\n        // TODO: break by grapheme clusters, not JS string characters\n\n        if (w > this.lineWidth + this.continuedX) {\n          // make some fake break objects\n          var lbk = last;\n          var fbk = {};\n          while (word.length) {\n            // fit as much of the word as possible into the space we have\n            var l, mightGrow;\n            if (w > this.spaceLeft) {\n              // start our check at the end of our available space - this method is faster than a loop of each character and it resolves\n              // an issue with long loops when processing massive words, such as a huge number of spaces\n              l = Math.ceil(this.spaceLeft / (w / word.length));\n              w = this.wordWidth(word.slice(0, l));\n              mightGrow = w <= this.spaceLeft && l < word.length;\n            } else {\n              l = word.length;\n            }\n            var mustShrink = w > this.spaceLeft && l > 0; // shrink or grow word as necessary after our near-guess above\n\n            while (mustShrink || mightGrow) {\n              if (mustShrink) {\n                w = this.wordWidth(word.slice(0, --l));\n                mustShrink = w > this.spaceLeft && l > 0;\n              } else {\n                w = this.wordWidth(word.slice(0, ++l));\n                mustShrink = w > this.spaceLeft && l > 0;\n                mightGrow = w <= this.spaceLeft && l < word.length;\n              }\n            } // check for the edge case where a single character cannot fit into a line.\n\n            if (l === 0 && this.spaceLeft === this.lineWidth) {\n              l = 1;\n            } // send a required break unless this is the last piece and a linebreak is not specified\n\n            fbk.required = bk.required || l < word.length;\n            shouldContinue = fn(word.slice(0, l), w, fbk, lbk);\n            lbk = {\n              required: false\n            }; // get the remaining piece of the word\n\n            word = word.slice(l);\n            w = this.wordWidth(word);\n            if (shouldContinue === false) {\n              break;\n            }\n          }\n        } else {\n          // otherwise just emit the break as it was given to us\n          shouldContinue = fn(word, w, bk, last);\n        }\n        if (shouldContinue === false) {\n          break;\n        }\n        last = bk;\n      }\n    }\n  }, {\n    key: \"wrap\",\n    value: function wrap(text, options) {\n      var _this2 = this;\n\n      // override options from previous continued fragments\n      if (options.indent != null) {\n        this.indent = options.indent;\n      }\n      if (options.characterSpacing != null) {\n        this.characterSpacing = options.characterSpacing;\n      }\n      if (options.wordSpacing != null) {\n        this.wordSpacing = options.wordSpacing;\n      }\n      if (options.ellipsis != null) {\n        this.ellipsis = options.ellipsis;\n      } // make sure we're actually on the page\n      // and that the first line of is never by\n      // itself at the bottom of a page (orphans)\n\n      var nextY = this.document.y + this.document.currentLineHeight(true);\n      if (this.document.y > this.maxY || nextY > this.maxY) {\n        this.nextSection();\n      }\n      var buffer = '';\n      var textWidth = 0;\n      var wc = 0;\n      var lc = 0;\n      var y = this.document.y; // used to reset Y pos if options.continued (below)\n\n      var emitLine = function emitLine() {\n        options.textWidth = textWidth + _this2.wordSpacing * (wc - 1);\n        options.wordCount = wc;\n        options.lineWidth = _this2.lineWidth;\n        y = _this2.document.y;\n        _this2.emit('line', buffer, options, _this2);\n        return lc++;\n      };\n      this.emit('sectionStart', options, this);\n      this.eachWord(text, function (word, w, bk, last) {\n        if (last == null || last.required) {\n          _this2.emit('firstLine', options, _this2);\n          _this2.spaceLeft = _this2.lineWidth;\n        }\n        if (w <= _this2.spaceLeft) {\n          buffer += word;\n          textWidth += w;\n          wc++;\n        }\n        if (bk.required || w > _this2.spaceLeft) {\n          // if the user specified a max height and an ellipsis, and is about to pass the\n          // max height and max columns after the next line, append the ellipsis\n          var lh = _this2.document.currentLineHeight(true);\n          if (_this2.height != null && _this2.ellipsis && _this2.document.y + lh * 2 > _this2.maxY && _this2.column >= _this2.columns) {\n            if (_this2.ellipsis === true) {\n              _this2.ellipsis = '…';\n            } // map default ellipsis character\n\n            buffer = buffer.replace(/\\s+$/, '');\n            textWidth = _this2.wordWidth(buffer + _this2.ellipsis); // remove characters from the buffer until the ellipsis fits\n            // to avoid infinite loop need to stop while-loop if buffer is empty string\n\n            while (buffer && textWidth > _this2.lineWidth) {\n              buffer = buffer.slice(0, -1).replace(/\\s+$/, '');\n              textWidth = _this2.wordWidth(buffer + _this2.ellipsis);\n            } // need to add ellipsis only if there is enough space for it\n\n            if (textWidth <= _this2.lineWidth) {\n              buffer = buffer + _this2.ellipsis;\n            }\n            textWidth = _this2.wordWidth(buffer);\n          }\n          if (bk.required) {\n            if (w > _this2.spaceLeft) {\n              emitLine();\n              buffer = word;\n              textWidth = w;\n              wc = 1;\n            }\n            _this2.emit('lastLine', options, _this2);\n          }\n          emitLine(); // if we've reached the edge of the page,\n          // continue on a new page or column\n\n          if (_this2.document.y + lh > _this2.maxY) {\n            var shouldContinue = _this2.nextSection(); // stop if we reached the maximum height\n\n            if (!shouldContinue) {\n              wc = 0;\n              buffer = '';\n              return false;\n            }\n          } // reset the space left and buffer\n\n          if (bk.required) {\n            _this2.spaceLeft = _this2.lineWidth;\n            buffer = '';\n            textWidth = 0;\n            return wc = 0;\n          } else {\n            // reset the space left and buffer\n            _this2.spaceLeft = _this2.lineWidth - w;\n            buffer = word;\n            textWidth = w;\n            return wc = 1;\n          }\n        } else {\n          return _this2.spaceLeft -= w;\n        }\n      });\n      if (wc > 0) {\n        this.emit('lastLine', options, this);\n        emitLine();\n      }\n      this.emit('sectionEnd', options, this); // if the wrap is set to be continued, save the X position\n      // to start the first line of the next segment at, and reset\n      // the y position\n\n      if (options.continued === true) {\n        if (lc > 1) {\n          this.continuedX = 0;\n        }\n        this.continuedX += options.textWidth || 0;\n        return this.document.y = y;\n      } else {\n        return this.document.x = this.startX;\n      }\n    }\n  }, {\n    key: \"nextSection\",\n    value: function nextSection(options) {\n      this.emit('sectionEnd', options, this);\n      if (++this.column > this.columns) {\n        // if a max height was specified by the user, we're done.\n        // otherwise, the default is to make a new page at the bottom.\n        if (this.height != null) {\n          return false;\n        }\n        this.document.continueOnNewPage();\n        this.column = 1;\n        this.startY = this.document.page.margins.top;\n        this.maxY = this.document.page.maxY();\n        this.document.x = this.startX;\n        if (this.document._fillColor) {\n          var _this$document;\n          (_this$document = this.document).fillColor.apply(_this$document, _toConsumableArray(this.document._fillColor));\n        }\n        this.emit('pageBreak', options, this);\n      } else {\n        this.document.x += this.lineWidth + this.columnGap;\n        this.document.y = this.startY;\n        this.emit('columnBreak', options, this);\n      }\n      this.emit('sectionStart', options, this);\n      return true;\n    }\n  }]);\n  return LineWrapper;\n}(_events.EventEmitter);\nvar number$2 = PDFObject.number;\nvar TextMixin = {\n  initText: function initText() {\n    this._line = this._line.bind(this); // Current coordinates\n\n    this.x = 0;\n    this.y = 0;\n    return this._lineGap = 0;\n  },\n  lineGap: function lineGap(_lineGap) {\n    this._lineGap = _lineGap;\n    return this;\n  },\n  moveDown: function moveDown(lines) {\n    if (lines == null) {\n      lines = 1;\n    }\n    this.y += this.currentLineHeight(true) * lines + this._lineGap;\n    return this;\n  },\n  moveUp: function moveUp(lines) {\n    if (lines == null) {\n      lines = 1;\n    }\n    this.y -= this.currentLineHeight(true) * lines + this._lineGap;\n    return this;\n  },\n  _text: function _text(text, x, y, options, lineCallback) {\n    var _this = this;\n    options = this._initOptions(x, y, options); // Convert text to a string\n\n    text = text == null ? '' : \"\".concat(text); // if the wordSpacing option is specified, remove multiple consecutive spaces\n\n    if (options.wordSpacing) {\n      text = text.replace(/\\s{2,}/g, ' ');\n    }\n    var addStructure = function addStructure() {\n      if (options.structParent) {\n        options.structParent.add(_this.struct(options.structType || 'P', [_this.markStructureContent(options.structType || 'P')]));\n      }\n    }; // word wrapping\n\n    if (options.width) {\n      var wrapper = this._wrapper;\n      if (!wrapper) {\n        wrapper = new LineWrapper(this, options);\n        wrapper.on('line', lineCallback);\n        wrapper.on('firstLine', addStructure);\n      }\n      this._wrapper = options.continued ? wrapper : null;\n      this._textOptions = options.continued ? options : null;\n      wrapper.wrap(text, options); // render paragraphs as single lines\n    } else {\n      var _iterator = _createForOfIteratorHelper(text.split('\\n')),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var line = _step.value;\n          addStructure();\n          lineCallback(line, options);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n    return this;\n  },\n  text: function text(_text2, x, y, options) {\n    return this._text(_text2, x, y, options, this._line);\n  },\n  widthOfString: function widthOfString(string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    return this._font.widthOfString(string, this._fontSize, options.features) + (options.characterSpacing || 0) * (string.length - 1);\n  },\n  heightOfString: function heightOfString(text, options) {\n    var _this2 = this;\n    var x = this.x,\n      y = this.y;\n    options = this._initOptions(options);\n    options.height = Infinity; // don't break pages\n\n    var lineGap = options.lineGap || this._lineGap || 0;\n    this._text(text, this.x, this.y, options, function () {\n      return _this2.y += _this2.currentLineHeight(true) + lineGap;\n    });\n    var height = this.y - y;\n    this.x = x;\n    this.y = y;\n    return height;\n  },\n  list: function list(_list, x, y, options, wrapper) {\n    var _this3 = this;\n    options = this._initOptions(x, y, options);\n    var listType = options.listType || 'bullet';\n    var unit = Math.round(this._font.ascender / 1000 * this._fontSize);\n    var midLine = unit / 2;\n    var r = options.bulletRadius || unit / 3;\n    var indent = options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2);\n    var itemIndent = options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2);\n    var level = 1;\n    var items = [];\n    var levels = [];\n    var numbers = [];\n    var flatten = function flatten(list) {\n      var n = 1;\n      for (var _i = 0; _i < list.length; _i++) {\n        var item = list[_i];\n        if (Array.isArray(item)) {\n          level++;\n          flatten(item);\n          level--;\n        } else {\n          items.push(item);\n          levels.push(level);\n          if (listType !== 'bullet') {\n            numbers.push(n++);\n          }\n        }\n      }\n    };\n    flatten(_list);\n    var label = function label(n) {\n      switch (listType) {\n        case 'numbered':\n          return \"\".concat(n, \".\");\n        case 'lettered':\n          var letter = String.fromCharCode((n - 1) % 26 + 65);\n          var times = Math.floor((n - 1) / 26 + 1);\n          var text = Array(times + 1).join(letter);\n          return \"\".concat(text, \".\");\n      }\n    };\n    wrapper = new LineWrapper(this, options);\n    wrapper.on('line', this._line);\n    level = 1;\n    var i = 0;\n    wrapper.on('firstLine', function () {\n      var item, itemType, labelType, bodyType;\n      if (options.structParent) {\n        if (options.structTypes) {\n          var _options$structTypes = _slicedToArray(options.structTypes, 3);\n          itemType = _options$structTypes[0];\n          labelType = _options$structTypes[1];\n          bodyType = _options$structTypes[2];\n        } else {\n          itemType = 'LI';\n          labelType = 'Lbl';\n          bodyType = 'LBody';\n        }\n      }\n      if (itemType) {\n        item = _this3.struct(itemType);\n        options.structParent.add(item);\n      } else if (options.structParent) {\n        item = options.structParent;\n      }\n      var l;\n      if ((l = levels[i++]) !== level) {\n        var diff = itemIndent * (l - level);\n        _this3.x += diff;\n        wrapper.lineWidth -= diff;\n        level = l;\n      }\n      if (item && (labelType || bodyType)) {\n        item.add(_this3.struct(labelType || bodyType, [_this3.markStructureContent(labelType || bodyType)]));\n      }\n      switch (listType) {\n        case 'bullet':\n          _this3.circle(_this3.x - indent + r, _this3.y + midLine, r);\n          _this3.fill();\n          break;\n        case 'numbered':\n        case 'lettered':\n          var text = label(numbers[i - 1]);\n          _this3._fragment(text, _this3.x - indent, _this3.y, options);\n          break;\n      }\n      if (item && labelType && bodyType) {\n        item.add(_this3.struct(bodyType, [_this3.markStructureContent(bodyType)]));\n      }\n      if (item && item !== options.structParent) {\n        item.end();\n      }\n    });\n    wrapper.on('sectionStart', function () {\n      var pos = indent + itemIndent * (level - 1);\n      _this3.x += pos;\n      return wrapper.lineWidth -= pos;\n    });\n    wrapper.on('sectionEnd', function () {\n      var pos = indent + itemIndent * (level - 1);\n      _this3.x -= pos;\n      return wrapper.lineWidth += pos;\n    });\n    wrapper.wrap(items.join('\\n'), options);\n    return this;\n  },\n  _initOptions: function _initOptions() {\n    var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var y = arguments.length > 1 ? arguments[1] : undefined;\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    if (typeof x === 'object') {\n      options = x;\n      x = null;\n    } // clone options object\n\n    var result = Object.assign({}, options); // extend options with previous values for continued text\n\n    if (this._textOptions) {\n      for (var key in this._textOptions) {\n        var val = this._textOptions[key];\n        if (key !== 'continued') {\n          if (result[key] === undefined) {\n            result[key] = val;\n          }\n        }\n      }\n    } // Update the current position\n\n    if (x != null) {\n      this.x = x;\n    }\n    if (y != null) {\n      this.y = y;\n    } // wrap to margins if no x or y position passed\n\n    if (result.lineBreak !== false) {\n      if (result.width == null) {\n        result.width = this.page.width - this.x - this.page.margins.right;\n      }\n      result.width = Math.max(result.width, 0);\n    }\n    if (!result.columns) {\n      result.columns = 0;\n    }\n    if (result.columnGap == null) {\n      result.columnGap = 18;\n    } // 1/4 inch\n\n    return result;\n  },\n  _line: function _line(text) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var wrapper = arguments.length > 2 ? arguments[2] : undefined;\n    this._fragment(text, this.x, this.y, options);\n    var lineGap = options.lineGap || this._lineGap || 0;\n    if (!wrapper) {\n      return this.x += this.widthOfString(text);\n    } else {\n      return this.y += this.currentLineHeight(true) + lineGap;\n    }\n  },\n  _fragment: function _fragment(text, x, y, options) {\n    var _this4 = this;\n    var dy, encoded, i, positions, textWidth, words;\n    text = \"\".concat(text).replace(/\\n/g, '');\n    if (text.length === 0) {\n      return;\n    } // handle options\n\n    var align = options.align || 'left';\n    var wordSpacing = options.wordSpacing || 0;\n    var characterSpacing = options.characterSpacing || 0; // text alignments\n\n    if (options.width) {\n      switch (align) {\n        case 'right':\n          textWidth = this.widthOfString(text.replace(/\\s+$/, ''), options);\n          x += options.lineWidth - textWidth;\n          break;\n        case 'center':\n          x += options.lineWidth / 2 - options.textWidth / 2;\n          break;\n        case 'justify':\n          // calculate the word spacing value\n          words = text.trim().split(/\\s+/);\n          textWidth = this.widthOfString(text.replace(/\\s+/g, ''), options);\n          var spaceWidth = this.widthOfString(' ') + characterSpacing;\n          wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth);\n          break;\n      }\n    } // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling\n\n    if (typeof options.baseline === 'number') {\n      dy = -options.baseline;\n    } else {\n      switch (options.baseline) {\n        case 'svg-middle':\n          dy = 0.5 * this._font.xHeight;\n          break;\n        case 'middle':\n        case 'svg-central':\n          dy = 0.5 * (this._font.descender + this._font.ascender);\n          break;\n        case 'bottom':\n        case 'ideographic':\n          dy = this._font.descender;\n          break;\n        case 'alphabetic':\n          dy = 0;\n          break;\n        case 'mathematical':\n          dy = 0.5 * this._font.ascender;\n          break;\n        case 'hanging':\n          dy = 0.8 * this._font.ascender;\n          break;\n        case 'top':\n          dy = this._font.ascender;\n          break;\n        default:\n          dy = this._font.ascender;\n      }\n      dy = dy / 1000 * this._fontSize;\n    } // calculate the actual rendered width of the string after word and character spacing\n\n    var renderedWidth = options.textWidth + wordSpacing * (options.wordCount - 1) + characterSpacing * (text.length - 1); // create link annotations if the link option is given\n\n    if (options.link != null) {\n      this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);\n    }\n    if (options.goTo != null) {\n      this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo);\n    }\n    if (options.destination != null) {\n      this.addNamedDestination(options.destination, 'XYZ', x, y, null);\n    } // create underline\n\n    if (options.underline) {\n      this.save();\n      if (!options.stroke) {\n        this.strokeColor.apply(this, _toConsumableArray(this._fillColor || []));\n      }\n      var lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\n      this.lineWidth(lineWidth);\n      var lineY = y + this.currentLineHeight() - lineWidth;\n      this.moveTo(x, lineY);\n      this.lineTo(x + renderedWidth, lineY);\n      this.stroke();\n      this.restore();\n    } // create strikethrough line\n\n    if (options.strike) {\n      this.save();\n      if (!options.stroke) {\n        this.strokeColor.apply(this, _toConsumableArray(this._fillColor || []));\n      }\n      var _lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\n      this.lineWidth(_lineWidth);\n      var _lineY = y + this.currentLineHeight() / 2;\n      this.moveTo(x, _lineY);\n      this.lineTo(x + renderedWidth, _lineY);\n      this.stroke();\n      this.restore();\n    }\n    this.save(); // oblique (angle in degrees or boolean)\n\n    if (options.oblique) {\n      var skew;\n      if (typeof options.oblique === 'number') {\n        skew = -Math.tan(options.oblique * Math.PI / 180);\n      } else {\n        skew = -0.25;\n      }\n      this.transform(1, 0, 0, 1, x, y);\n      this.transform(1, 0, skew, 1, -skew * dy, 0);\n      this.transform(1, 0, 0, 1, -x, -y);\n    } // flip coordinate system\n\n    this.transform(1, 0, 0, -1, 0, this.page.height);\n    y = this.page.height - y - dy; // add current font to page if necessary\n\n    if (this.page.fonts[this._font.id] == null) {\n      this.page.fonts[this._font.id] = this._font.ref();\n    } // begin the text object\n\n    this.addContent('BT'); // text position\n\n    this.addContent(\"1 0 0 1 \".concat(number$2(x), \" \").concat(number$2(y), \" Tm\")); // font and font size\n\n    this.addContent(\"/\".concat(this._font.id, \" \").concat(number$2(this._fontSize), \" Tf\")); // rendering mode\n\n    var mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;\n    if (mode) {\n      this.addContent(\"\".concat(mode, \" Tr\"));\n    } // Character spacing\n\n    if (characterSpacing) {\n      this.addContent(\"\".concat(number$2(characterSpacing), \" Tc\"));\n    } // Add the actual text\n    // If we have a word spacing value, we need to encode each word separately\n    // since the normal Tw operator only works on character code 32, which isn't\n    // used for embedded fonts.\n\n    if (wordSpacing) {\n      words = text.trim().split(/\\s+/);\n      wordSpacing += this.widthOfString(' ') + characterSpacing;\n      wordSpacing *= 1000 / this._fontSize;\n      encoded = [];\n      positions = [];\n      var _iterator2 = _createForOfIteratorHelper(words),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var word = _step2.value;\n          var _this$_font$encode = this._font.encode(word, options.features),\n            _this$_font$encode2 = _slicedToArray(_this$_font$encode, 2),\n            encodedWord = _this$_font$encode2[0],\n            positionsWord = _this$_font$encode2[1];\n          encoded = encoded.concat(encodedWord);\n          positions = positions.concat(positionsWord); // add the word spacing to the end of the word\n          // clone object because of cache\n\n          var space = {};\n          var object = positions[positions.length - 1];\n          for (var key in object) {\n            var val = object[key];\n            space[key] = val;\n          }\n          space.xAdvance += wordSpacing;\n          positions[positions.length - 1] = space;\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n    } else {\n      var _this$_font$encode3 = this._font.encode(text, options.features);\n      var _this$_font$encode4 = _slicedToArray(_this$_font$encode3, 2);\n      encoded = _this$_font$encode4[0];\n      positions = _this$_font$encode4[1];\n    }\n    var scale = this._fontSize / 1000;\n    var commands = [];\n    var last = 0;\n    var hadOffset = false; // Adds a segment of text to the TJ command buffer\n\n    var addSegment = function addSegment(cur) {\n      if (last < cur) {\n        var hex = encoded.slice(last, cur).join('');\n        var advance = positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth;\n        commands.push(\"<\".concat(hex, \"> \").concat(number$2(-advance)));\n      }\n      return last = cur;\n    }; // Flushes the current TJ commands to the output stream\n\n    var flush = function flush(i) {\n      addSegment(i);\n      if (commands.length > 0) {\n        _this4.addContent(\"[\".concat(commands.join(' '), \"] TJ\"));\n        return commands.length = 0;\n      }\n    };\n    for (i = 0; i < positions.length; i++) {\n      // If we have an x or y offset, we have to break out of the current TJ command\n      // so we can move the text position.\n      var pos = positions[i];\n      if (pos.xOffset || pos.yOffset) {\n        // Flush the current buffer\n        flush(i); // Move the text position and flush just the current character\n\n        this.addContent(\"1 0 0 1 \".concat(number$2(x + pos.xOffset * scale), \" \").concat(number$2(y + pos.yOffset * scale), \" Tm\"));\n        flush(i + 1);\n        hadOffset = true;\n      } else {\n        // If the last character had an offset, reset the text position\n        if (hadOffset) {\n          this.addContent(\"1 0 0 1 \".concat(number$2(x), \" \").concat(number$2(y), \" Tm\"));\n          hadOffset = false;\n        } // Group segments that don't have any advance adjustments\n\n        if (pos.xAdvance - pos.advanceWidth !== 0) {\n          addSegment(i + 1);\n        }\n      }\n      x += pos.xAdvance * scale;\n    } // Flush any remaining commands\n\n    flush(i); // end the text object\n\n    this.addContent('ET'); // restore flipped coordinate system\n\n    return this.restore();\n  }\n};\nvar MARKERS = [0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc8, 0xffc9, 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf];\nvar COLOR_SPACE_MAP = {\n  1: 'DeviceGray',\n  3: 'DeviceRGB',\n  4: 'DeviceCMYK'\n};\nvar JPEG = /*#__PURE__*/function () {\n  function JPEG(data, label) {\n    _classCallCheck(this, JPEG);\n    var marker;\n    this.data = data;\n    this.label = label;\n    if (this.data.readUInt16BE(0) !== 0xffd8) {\n      throw 'SOI not found in JPEG';\n    }\n    var pos = 2;\n    while (pos < this.data.length) {\n      marker = this.data.readUInt16BE(pos);\n      pos += 2;\n      if (MARKERS.includes(marker)) {\n        break;\n      }\n      pos += this.data.readUInt16BE(pos);\n    }\n    if (!MARKERS.includes(marker)) {\n      throw 'Invalid JPEG.';\n    }\n    pos += 2;\n    this.bits = this.data[pos++];\n    this.height = this.data.readUInt16BE(pos);\n    pos += 2;\n    this.width = this.data.readUInt16BE(pos);\n    pos += 2;\n    var channels = this.data[pos++];\n    this.colorSpace = COLOR_SPACE_MAP[channels];\n    this.obj = null;\n  }\n  _createClass(JPEG, [{\n    key: \"embed\",\n    value: function embed(document) {\n      if (this.obj) {\n        return;\n      }\n      this.obj = document.ref({\n        Type: 'XObject',\n        Subtype: 'Image',\n        BitsPerComponent: this.bits,\n        Width: this.width,\n        Height: this.height,\n        ColorSpace: this.colorSpace,\n        Filter: 'DCTDecode'\n      }); // add extra decode params for CMYK images. By swapping the\n      // min and max values from the default, we invert the colors. See\n      // section 4.8.4 of the spec.\n\n      if (this.colorSpace === 'DeviceCMYK') {\n        this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];\n      }\n      this.obj.end(this.data); // free memory\n\n      return this.data = null;\n    }\n  }]);\n  return JPEG;\n}();\nvar PNGImage = /*#__PURE__*/function () {\n  function PNGImage(data, label) {\n    _classCallCheck(this, PNGImage);\n    this.label = label;\n    this.image = new _pngJs.default(data);\n    this.width = this.image.width;\n    this.height = this.image.height;\n    this.imgData = this.image.imgData;\n    this.obj = null;\n  }\n  _createClass(PNGImage, [{\n    key: \"embed\",\n    value: function embed(document) {\n      var dataDecoded = false;\n      this.document = document;\n      if (this.obj) {\n        return;\n      }\n      var hasAlphaChannel = this.image.hasAlphaChannel;\n      var isInterlaced = this.image.interlaceMethod === 1;\n      this.obj = this.document.ref({\n        Type: 'XObject',\n        Subtype: 'Image',\n        BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits,\n        Width: this.width,\n        Height: this.height,\n        Filter: 'FlateDecode'\n      });\n      if (!hasAlphaChannel) {\n        var params = this.document.ref({\n          Predictor: isInterlaced ? 1 : 15,\n          Colors: this.image.colors,\n          BitsPerComponent: this.image.bits,\n          Columns: this.width\n        });\n        this.obj.data['DecodeParms'] = params;\n        params.end();\n      }\n      if (this.image.palette.length === 0) {\n        this.obj.data['ColorSpace'] = this.image.colorSpace;\n      } else {\n        // embed the color palette in the PDF as an object stream\n        var palette = this.document.ref();\n        palette.end(Buffer.from(this.image.palette)); // build the color space array for the image\n\n        this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', this.image.palette.length / 3 - 1, palette];\n      } // For PNG color types 0, 2 and 3, the transparency data is stored in\n      // a dedicated PNG chunk.\n\n      if (this.image.transparency.grayscale != null) {\n        // Use Color Key Masking (spec section 4.8.5)\n        // An array with N elements, where N is two times the number of color components.\n        var val = this.image.transparency.grayscale;\n        this.obj.data['Mask'] = [val, val];\n      } else if (this.image.transparency.rgb) {\n        // Use Color Key Masking (spec section 4.8.5)\n        // An array with N elements, where N is two times the number of color components.\n        var rgb = this.image.transparency.rgb;\n        var mask = [];\n        var _iterator = _createForOfIteratorHelper(rgb),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var x = _step.value;\n            mask.push(x, x);\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n        this.obj.data['Mask'] = mask;\n      } else if (this.image.transparency.indexed) {\n        // Create a transparency SMask for the image based on the data\n        // in the PLTE and tRNS sections. See below for details on SMasks.\n        dataDecoded = true;\n        return this.loadIndexedAlphaChannel();\n      } else if (hasAlphaChannel) {\n        // For PNG color types 4 and 6, the transparency data is stored as a alpha\n        // channel mixed in with the main image data. Separate this data out into an\n        // SMask object and store it separately in the PDF.\n        dataDecoded = true;\n        return this.splitAlphaChannel();\n      }\n      if (isInterlaced && !dataDecoded) {\n        return this.decodeData();\n      }\n      this.finalize();\n    }\n  }, {\n    key: \"finalize\",\n    value: function finalize() {\n      if (this.alphaChannel) {\n        var sMask = this.document.ref({\n          Type: 'XObject',\n          Subtype: 'Image',\n          Height: this.height,\n          Width: this.width,\n          BitsPerComponent: 8,\n          Filter: 'FlateDecode',\n          ColorSpace: 'DeviceGray',\n          Decode: [0, 1]\n        });\n        sMask.end(this.alphaChannel);\n        this.obj.data['SMask'] = sMask;\n      } // add the actual image data\n\n      this.obj.end(this.imgData); // free memory\n\n      this.image = null;\n      return this.imgData = null;\n    }\n  }, {\n    key: \"splitAlphaChannel\",\n    value: function splitAlphaChannel() {\n      var _this = this;\n      return this.image.decodePixels(function (pixels) {\n        var a, p;\n        var colorCount = _this.image.colors;\n        var pixelCount = _this.width * _this.height;\n        var imgData = Buffer.alloc(pixelCount * colorCount);\n        var alphaChannel = Buffer.alloc(pixelCount);\n        var i = p = a = 0;\n        var len = pixels.length; // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first)\n\n        var skipByteCount = _this.image.bits === 16 ? 1 : 0;\n        while (i < len) {\n          for (var colorIndex = 0; colorIndex < colorCount; colorIndex++) {\n            imgData[p++] = pixels[i++];\n            i += skipByteCount;\n          }\n          alphaChannel[a++] = pixels[i++];\n          i += skipByteCount;\n        }\n        _this.imgData = _zlib.default.deflateSync(imgData);\n        _this.alphaChannel = _zlib.default.deflateSync(alphaChannel);\n        return _this.finalize();\n      });\n    }\n  }, {\n    key: \"loadIndexedAlphaChannel\",\n    value: function loadIndexedAlphaChannel() {\n      var _this2 = this;\n      var transparency = this.image.transparency.indexed;\n      return this.image.decodePixels(function (pixels) {\n        var alphaChannel = Buffer.alloc(_this2.width * _this2.height);\n        var i = 0;\n        for (var j = 0, end = pixels.length; j < end; j++) {\n          alphaChannel[i++] = transparency[pixels[j]];\n        }\n        _this2.alphaChannel = _zlib.default.deflateSync(alphaChannel);\n        return _this2.finalize();\n      });\n    }\n  }, {\n    key: \"decodeData\",\n    value: function decodeData() {\n      var _this3 = this;\n      this.image.decodePixels(function (pixels) {\n        _this3.imgData = _zlib.default.deflateSync(pixels);\n        _this3.finalize();\n      });\n    }\n  }]);\n  return PNGImage;\n}();\nvar PDFImage = /*#__PURE__*/function () {\n  function PDFImage() {\n    _classCallCheck(this, PDFImage);\n  }\n  _createClass(PDFImage, null, [{\n    key: \"open\",\n    value: function open(src, label) {\n      var data;\n      if (Buffer.isBuffer(src)) {\n        data = src;\n      } else if (src instanceof ArrayBuffer) {\n        data = Buffer.from(new Uint8Array(src));\n      } else {\n        var match;\n        if (match = /^data:.+;base64,(.*)$/.exec(src)) {\n          data = Buffer.from(match[1], 'base64');\n        } else {\n          data = fs.readFileSync(src);\n          if (!data) {\n            return;\n          }\n        }\n      }\n      if (data[0] === 0xff && data[1] === 0xd8) {\n        return new JPEG(data, label);\n      } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {\n        return new PNGImage(data, label);\n      } else {\n        throw new Error('Unknown image format.');\n      }\n    }\n  }]);\n  return PDFImage;\n}();\nvar ImagesMixin = {\n  initImages: function initImages() {\n    this._imageRegistry = {};\n    return this._imageCount = 0;\n  },\n  image: function image(src, x, y) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var bh, bp, bw, image, ip, left, left1;\n    if (typeof x === 'object') {\n      options = x;\n      x = null;\n    }\n    x = (left = x != null ? x : options.x) != null ? left : this.x;\n    y = (left1 = y != null ? y : options.y) != null ? left1 : this.y;\n    if (typeof src === 'string') {\n      image = this._imageRegistry[src];\n    }\n    if (!image) {\n      if (src.width && src.height) {\n        image = src;\n      } else {\n        image = this.openImage(src);\n      }\n    }\n    if (!image.obj) {\n      image.embed(this);\n    }\n    if (this.page.xobjects[image.label] == null) {\n      this.page.xobjects[image.label] = image.obj;\n    }\n    var w = options.width || image.width;\n    var h = options.height || image.height;\n    if (options.width && !options.height) {\n      var wp = w / image.width;\n      w = image.width * wp;\n      h = image.height * wp;\n    } else if (options.height && !options.width) {\n      var hp = h / image.height;\n      w = image.width * hp;\n      h = image.height * hp;\n    } else if (options.scale) {\n      w = image.width * options.scale;\n      h = image.height * options.scale;\n    } else if (options.fit) {\n      var _options$fit = _slicedToArray(options.fit, 2);\n      bw = _options$fit[0];\n      bh = _options$fit[1];\n      bp = bw / bh;\n      ip = image.width / image.height;\n      if (ip > bp) {\n        w = bw;\n        h = bw / ip;\n      } else {\n        h = bh;\n        w = bh * ip;\n      }\n    } else if (options.cover) {\n      var _options$cover = _slicedToArray(options.cover, 2);\n      bw = _options$cover[0];\n      bh = _options$cover[1];\n      bp = bw / bh;\n      ip = image.width / image.height;\n      if (ip > bp) {\n        h = bh;\n        w = bh * ip;\n      } else {\n        w = bw;\n        h = bw / ip;\n      }\n    }\n    if (options.fit || options.cover) {\n      if (options.align === 'center') {\n        x = x + bw / 2 - w / 2;\n      } else if (options.align === 'right') {\n        x = x + bw - w;\n      }\n      if (options.valign === 'center') {\n        y = y + bh / 2 - h / 2;\n      } else if (options.valign === 'bottom') {\n        y = y + bh - h;\n      }\n    } // create link annotations if the link option is given\n\n    if (options.link != null) {\n      this.link(x, y, w, h, options.link);\n    }\n    if (options.goTo != null) {\n      this.goTo(x, y, w, h, options.goTo);\n    }\n    if (options.destination != null) {\n      this.addNamedDestination(options.destination, 'XYZ', x, y, null);\n    } // Set the current y position to below the image if it is in the document flow\n\n    if (this.y === y) {\n      this.y += h;\n    }\n    this.save();\n    this.transform(w, 0, 0, -h, x, y + h);\n    this.addContent(\"/\".concat(image.label, \" Do\"));\n    this.restore();\n    return this;\n  },\n  openImage: function openImage(src) {\n    var image;\n    if (typeof src === 'string') {\n      image = this._imageRegistry[src];\n    }\n    if (!image) {\n      image = PDFImage.open(src, \"I\".concat(++this._imageCount));\n      if (typeof src === 'string') {\n        this._imageRegistry[src] = image;\n      }\n    }\n    return image;\n  }\n};\nvar AnnotationsMixin = {\n  annotate: function annotate(x, y, w, h, options) {\n    options.Type = 'Annot';\n    options.Rect = this._convertRect(x, y, w, h);\n    options.Border = [0, 0, 0];\n    if (options.Subtype === 'Link' && typeof options.F === 'undefined') {\n      options.F = 1 << 2; // Print Annotation Flag\n    }\n\n    if (options.Subtype !== 'Link') {\n      if (options.C == null) {\n        options.C = this._normalizeColor(options.color || [0, 0, 0]);\n      }\n    } // convert colors\n\n    delete options.color;\n    if (typeof options.Dest === 'string') {\n      options.Dest = new String(options.Dest);\n    } // Capitalize keys\n\n    for (var key in options) {\n      var val = options[key];\n      options[key[0].toUpperCase() + key.slice(1)] = val;\n    }\n    var ref = this.ref(options);\n    this.page.annotations.push(ref);\n    ref.end();\n    return this;\n  },\n  note: function note(x, y, w, h, contents) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    options.Subtype = 'Text';\n    options.Contents = new String(contents);\n    options.Name = 'Comment';\n    if (options.color == null) {\n      options.color = [243, 223, 92];\n    }\n    return this.annotate(x, y, w, h, options);\n  },\n  goTo: function goTo(x, y, w, h, name) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    options.Subtype = 'Link';\n    options.A = this.ref({\n      S: 'GoTo',\n      D: new String(name)\n    });\n    options.A.end();\n    return this.annotate(x, y, w, h, options);\n  },\n  link: function link(x, y, w, h, url) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    options.Subtype = 'Link';\n    if (typeof url === 'number') {\n      // Link to a page in the document (the page must already exist)\n      var pages = this._root.data.Pages.data;\n      if (url >= 0 && url < pages.Kids.length) {\n        options.A = this.ref({\n          S: 'GoTo',\n          D: [pages.Kids[url], 'XYZ', null, null, null]\n        });\n        options.A.end();\n      } else {\n        throw new Error(\"The document has no page \".concat(url));\n      }\n    } else {\n      // Link to an external url\n      options.A = this.ref({\n        S: 'URI',\n        URI: new String(url)\n      });\n      options.A.end();\n    }\n    return this.annotate(x, y, w, h, options);\n  },\n  _markup: function _markup(x, y, w, h) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    var _this$_convertRect = this._convertRect(x, y, w, h),\n      _this$_convertRect2 = _slicedToArray(_this$_convertRect, 4),\n      x1 = _this$_convertRect2[0],\n      y1 = _this$_convertRect2[1],\n      x2 = _this$_convertRect2[2],\n      y2 = _this$_convertRect2[3];\n    options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];\n    options.Contents = new String();\n    return this.annotate(x, y, w, h, options);\n  },\n  highlight: function highlight(x, y, w, h) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    options.Subtype = 'Highlight';\n    if (options.color == null) {\n      options.color = [241, 238, 148];\n    }\n    return this._markup(x, y, w, h, options);\n  },\n  underline: function underline(x, y, w, h) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    options.Subtype = 'Underline';\n    return this._markup(x, y, w, h, options);\n  },\n  strike: function strike(x, y, w, h) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    options.Subtype = 'StrikeOut';\n    return this._markup(x, y, w, h, options);\n  },\n  lineAnnotation: function lineAnnotation(x1, y1, x2, y2) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    options.Subtype = 'Line';\n    options.Contents = new String();\n    options.L = [x1, this.page.height - y1, x2, this.page.height - y2];\n    return this.annotate(x1, y1, x2, y2, options);\n  },\n  rectAnnotation: function rectAnnotation(x, y, w, h) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    options.Subtype = 'Square';\n    options.Contents = new String();\n    return this.annotate(x, y, w, h, options);\n  },\n  ellipseAnnotation: function ellipseAnnotation(x, y, w, h) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    options.Subtype = 'Circle';\n    options.Contents = new String();\n    return this.annotate(x, y, w, h, options);\n  },\n  textAnnotation: function textAnnotation(x, y, w, h, text) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    options.Subtype = 'FreeText';\n    options.Contents = new String(text);\n    options.DA = new String();\n    return this.annotate(x, y, w, h, options);\n  },\n  fileAnnotation: function fileAnnotation(x, y, w, h) {\n    var file = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    // create hidden file\n    var filespec = this.file(file.src, Object.assign({\n      hidden: true\n    }, file));\n    options.Subtype = 'FileAttachment';\n    options.FS = filespec; // add description from filespec unless description (Contents) has already been set\n\n    if (options.Contents) {\n      options.Contents = new String(options.Contents);\n    } else if (filespec.data.Desc) {\n      options.Contents = filespec.data.Desc;\n    }\n    return this.annotate(x, y, w, h, options);\n  },\n  _convertRect: function _convertRect(x1, y1, w, h) {\n    // flip y1 and y2\n    var y2 = y1;\n    y1 += h; // make x2\n\n    var x2 = x1 + w; // apply current transformation matrix to points\n\n    var _this$_ctm = _slicedToArray(this._ctm, 6),\n      m0 = _this$_ctm[0],\n      m1 = _this$_ctm[1],\n      m2 = _this$_ctm[2],\n      m3 = _this$_ctm[3],\n      m4 = _this$_ctm[4],\n      m5 = _this$_ctm[5];\n    x1 = m0 * x1 + m2 * y1 + m4;\n    y1 = m1 * x1 + m3 * y1 + m5;\n    x2 = m0 * x2 + m2 * y2 + m4;\n    y2 = m1 * x2 + m3 * y2 + m5;\n    return [x1, y1, x2, y2];\n  }\n};\nvar PDFOutline = /*#__PURE__*/function () {\n  function PDFOutline(document, parent, title, dest) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n      expanded: false\n    };\n    _classCallCheck(this, PDFOutline);\n    this.document = document;\n    this.options = options;\n    this.outlineData = {};\n    if (dest !== null) {\n      this.outlineData['Dest'] = [dest.dictionary, 'Fit'];\n    }\n    if (parent !== null) {\n      this.outlineData['Parent'] = parent;\n    }\n    if (title !== null) {\n      this.outlineData['Title'] = new String(title);\n    }\n    this.dictionary = this.document.ref(this.outlineData);\n    this.children = [];\n  }\n  _createClass(PDFOutline, [{\n    key: \"addItem\",\n    value: function addItem(title) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        expanded: false\n      };\n      var result = new PDFOutline(this.document, this.dictionary, title, this.document.page, options);\n      this.children.push(result);\n      return result;\n    }\n  }, {\n    key: \"endOutline\",\n    value: function endOutline() {\n      if (this.children.length > 0) {\n        if (this.options.expanded) {\n          this.outlineData.Count = this.children.length;\n        }\n        var first = this.children[0],\n          last = this.children[this.children.length - 1];\n        this.outlineData.First = first.dictionary;\n        this.outlineData.Last = last.dictionary;\n        for (var i = 0, len = this.children.length; i < len; i++) {\n          var child = this.children[i];\n          if (i > 0) {\n            child.outlineData.Prev = this.children[i - 1].dictionary;\n          }\n          if (i < this.children.length - 1) {\n            child.outlineData.Next = this.children[i + 1].dictionary;\n          }\n          child.endOutline();\n        }\n      }\n      return this.dictionary.end();\n    }\n  }]);\n  return PDFOutline;\n}();\nvar OutlineMixin = {\n  initOutline: function initOutline() {\n    return this.outline = new PDFOutline(this, null, null, null);\n  },\n  endOutline: function endOutline() {\n    this.outline.endOutline();\n    if (this.outline.children.length > 0) {\n      this._root.data.Outlines = this.outline.dictionary;\n      return this._root.data.PageMode = 'UseOutlines';\n    }\n  }\n};\n\n/*\nPDFStructureContent - a reference to a marked structure content\nBy Ben Schmidt\n*/\nvar PDFStructureContent = /*#__PURE__*/function () {\n  function PDFStructureContent(pageRef, mcid) {\n    _classCallCheck(this, PDFStructureContent);\n    this.refs = [{\n      pageRef: pageRef,\n      mcid: mcid\n    }];\n  }\n  _createClass(PDFStructureContent, [{\n    key: \"push\",\n    value: function push(structContent) {\n      var _this = this;\n      structContent.refs.forEach(function (ref) {\n        return _this.refs.push(ref);\n      });\n    }\n  }]);\n  return PDFStructureContent;\n}();\nvar PDFStructureElement = /*#__PURE__*/function () {\n  function PDFStructureElement(document, type) {\n    var _this = this;\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var children = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n    _classCallCheck(this, PDFStructureElement);\n    this.document = document;\n    this._attached = false;\n    this._ended = false;\n    this._flushed = false;\n    this.dictionary = document.ref({\n      // Type: \"StructElem\",\n      S: type\n    });\n    var data = this.dictionary.data;\n    if (Array.isArray(options) || this._isValidChild(options)) {\n      children = options;\n      options = {};\n    }\n    if (typeof options.title !== 'undefined') {\n      data.T = new String(options.title);\n    }\n    if (typeof options.lang !== 'undefined') {\n      data.Lang = new String(options.lang);\n    }\n    if (typeof options.alt !== 'undefined') {\n      data.Alt = new String(options.alt);\n    }\n    if (typeof options.expanded !== 'undefined') {\n      data.E = new String(options.expanded);\n    }\n    if (typeof options.actual !== 'undefined') {\n      data.ActualText = new String(options.actual);\n    }\n    this._children = [];\n    if (children) {\n      if (!Array.isArray(children)) {\n        children = [children];\n      }\n      children.forEach(function (child) {\n        return _this.add(child);\n      });\n      this.end();\n    }\n  }\n  _createClass(PDFStructureElement, [{\n    key: \"add\",\n    value: function add(child) {\n      if (this._ended) {\n        throw new Error(\"Cannot add child to already-ended structure element\");\n      }\n      if (!this._isValidChild(child)) {\n        throw new Error(\"Invalid structure element child\");\n      }\n      if (child instanceof PDFStructureElement) {\n        child.setParent(this.dictionary);\n        if (this._attached) {\n          child.setAttached();\n        }\n      }\n      if (child instanceof PDFStructureContent) {\n        this._addContentToParentTree(child);\n      }\n      if (typeof child === 'function' && this._attached) {\n        // _contentForClosure() adds the content to the parent tree\n        child = this._contentForClosure(child);\n      }\n      this._children.push(child);\n      return this;\n    }\n  }, {\n    key: \"_addContentToParentTree\",\n    value: function _addContentToParentTree(content) {\n      var _this2 = this;\n      content.refs.forEach(function (_ref) {\n        var pageRef = _ref.pageRef,\n          mcid = _ref.mcid;\n        var pageStructParents = _this2.document.getStructParentTree().get(pageRef.data.StructParents);\n        pageStructParents[mcid] = _this2.dictionary;\n      });\n    }\n  }, {\n    key: \"setParent\",\n    value: function setParent(parentRef) {\n      if (this.dictionary.data.P) {\n        throw new Error(\"Structure element added to more than one parent\");\n      }\n      this.dictionary.data.P = parentRef;\n      this._flush();\n    }\n  }, {\n    key: \"setAttached\",\n    value: function setAttached() {\n      var _this3 = this;\n      if (this._attached) {\n        return;\n      }\n      this._children.forEach(function (child, index) {\n        if (child instanceof PDFStructureElement) {\n          child.setAttached();\n        }\n        if (typeof child === 'function') {\n          _this3._children[index] = _this3._contentForClosure(child);\n        }\n      });\n      this._attached = true;\n      this._flush();\n    }\n  }, {\n    key: \"end\",\n    value: function end() {\n      if (this._ended) {\n        return;\n      }\n      this._children.filter(function (child) {\n        return child instanceof PDFStructureElement;\n      }).forEach(function (child) {\n        return child.end();\n      });\n      this._ended = true;\n      this._flush();\n    }\n  }, {\n    key: \"_isValidChild\",\n    value: function _isValidChild(child) {\n      return child instanceof PDFStructureElement || child instanceof PDFStructureContent || typeof child === 'function';\n    }\n  }, {\n    key: \"_contentForClosure\",\n    value: function _contentForClosure(closure) {\n      var content = this.document.markStructureContent(this.dictionary.data.S);\n      closure();\n      this.document.endMarkedContent();\n      this._addContentToParentTree(content);\n      return content;\n    }\n  }, {\n    key: \"_isFlushable\",\n    value: function _isFlushable() {\n      if (!this.dictionary.data.P || !this._ended) {\n        return false;\n      }\n      return this._children.every(function (child) {\n        if (typeof child === 'function') {\n          return false;\n        }\n        if (child instanceof PDFStructureElement) {\n          return child._isFlushable();\n        }\n        return true;\n      });\n    }\n  }, {\n    key: \"_flush\",\n    value: function _flush() {\n      var _this4 = this;\n      if (this._flushed || !this._isFlushable()) {\n        return;\n      }\n      this.dictionary.data.K = [];\n      this._children.forEach(function (child) {\n        return _this4._flushChild(child);\n      });\n      this.dictionary.end(); // free memory used by children; the dictionary itself may still be\n      // referenced by a parent structure element or root, but we can\n      // at least trim the tree here\n\n      this._children = [];\n      this.dictionary.data.K = null;\n      this._flushed = true;\n    }\n  }, {\n    key: \"_flushChild\",\n    value: function _flushChild(child) {\n      var _this5 = this;\n      if (child instanceof PDFStructureElement) {\n        this.dictionary.data.K.push(child.dictionary);\n      }\n      if (child instanceof PDFStructureContent) {\n        child.refs.forEach(function (_ref2) {\n          var pageRef = _ref2.pageRef,\n            mcid = _ref2.mcid;\n          if (!_this5.dictionary.data.Pg) {\n            _this5.dictionary.data.Pg = pageRef;\n          }\n          if (_this5.dictionary.data.Pg === pageRef) {\n            _this5.dictionary.data.K.push(mcid);\n          } else {\n            _this5.dictionary.data.K.push({\n              Type: \"MCR\",\n              Pg: pageRef,\n              MCID: mcid\n            });\n          }\n        });\n      }\n    }\n  }]);\n  return PDFStructureElement;\n}();\nvar PDFNumberTree = /*#__PURE__*/function (_PDFTree) {\n  _inherits(PDFNumberTree, _PDFTree);\n  var _super = _createSuper(PDFNumberTree);\n  function PDFNumberTree() {\n    _classCallCheck(this, PDFNumberTree);\n    return _super.apply(this, arguments);\n  }\n  _createClass(PDFNumberTree, [{\n    key: \"_compareKeys\",\n    value: function _compareKeys(a, b) {\n      return parseInt(a) - parseInt(b);\n    }\n  }, {\n    key: \"_keysName\",\n    value: function _keysName() {\n      return \"Nums\";\n    }\n  }, {\n    key: \"_dataForKey\",\n    value: function _dataForKey(k) {\n      return parseInt(k);\n    }\n  }]);\n  return PDFNumberTree;\n}(PDFTree);\nvar MarkingsMixin = {\n  initMarkings: function initMarkings(options) {\n    this.structChildren = [];\n    if (options.tagged) {\n      this.getMarkInfoDictionary().data.Marked = true;\n      this.getStructTreeRoot();\n    }\n  },\n  markContent: function markContent(tag) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    if (tag === 'Artifact' || options && options.mcid) {\n      var toClose = 0;\n      this.page.markings.forEach(function (marking) {\n        if (toClose || marking.structContent || marking.tag === 'Artifact') {\n          toClose++;\n        }\n      });\n      while (toClose--) {\n        this.endMarkedContent();\n      }\n    }\n    if (!options) {\n      this.page.markings.push({\n        tag: tag\n      });\n      this.addContent(\"/\".concat(tag, \" BMC\"));\n      return this;\n    }\n    this.page.markings.push({\n      tag: tag,\n      options: options\n    });\n    var dictionary = {};\n    if (typeof options.mcid !== 'undefined') {\n      dictionary.MCID = options.mcid;\n    }\n    if (tag === 'Artifact') {\n      if (typeof options.type === 'string') {\n        dictionary.Type = options.type;\n      }\n      if (Array.isArray(options.bbox)) {\n        dictionary.BBox = [options.bbox[0], this.page.height - options.bbox[3], options.bbox[2], this.page.height - options.bbox[1]];\n      }\n      if (Array.isArray(options.attached) && options.attached.every(function (val) {\n        return typeof val === 'string';\n      })) {\n        dictionary.Attached = options.attached;\n      }\n    }\n    if (tag === 'Span') {\n      if (options.lang) {\n        dictionary.Lang = new String(options.lang);\n      }\n      if (options.alt) {\n        dictionary.Alt = new String(options.alt);\n      }\n      if (options.expanded) {\n        dictionary.E = new String(options.expanded);\n      }\n      if (options.actual) {\n        dictionary.ActualText = new String(options.actual);\n      }\n    }\n    this.addContent(\"/\".concat(tag, \" \").concat(PDFObject.convert(dictionary), \" BDC\"));\n    return this;\n  },\n  markStructureContent: function markStructureContent(tag) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var pageStructParents = this.getStructParentTree().get(this.page.structParentTreeKey);\n    var mcid = pageStructParents.length;\n    pageStructParents.push(null);\n    this.markContent(tag, _objectSpread2(_objectSpread2({}, options), {}, {\n      mcid: mcid\n    }));\n    var structContent = new PDFStructureContent(this.page.dictionary, mcid);\n    this.page.markings.slice(-1)[0].structContent = structContent;\n    return structContent;\n  },\n  endMarkedContent: function endMarkedContent() {\n    this.page.markings.pop();\n    this.addContent('EMC');\n    return this;\n  },\n  struct: function struct(type) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var children = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    return new PDFStructureElement(this, type, options, children);\n  },\n  addStructure: function addStructure(structElem) {\n    var structTreeRoot = this.getStructTreeRoot();\n    structElem.setParent(structTreeRoot);\n    structElem.setAttached();\n    this.structChildren.push(structElem);\n    if (!structTreeRoot.data.K) {\n      structTreeRoot.data.K = [];\n    }\n    structTreeRoot.data.K.push(structElem.dictionary);\n    return this;\n  },\n  initPageMarkings: function initPageMarkings(pageMarkings) {\n    var _this = this;\n    pageMarkings.forEach(function (marking) {\n      if (marking.structContent) {\n        var structContent = marking.structContent;\n        var newStructContent = _this.markStructureContent(marking.tag, marking.options);\n        structContent.push(newStructContent);\n        _this.page.markings.slice(-1)[0].structContent = structContent;\n      } else {\n        _this.markContent(marking.tag, marking.options);\n      }\n    });\n  },\n  endPageMarkings: function endPageMarkings(page) {\n    var pageMarkings = page.markings;\n    pageMarkings.forEach(function () {\n      return page.write('EMC');\n    });\n    page.markings = [];\n    return pageMarkings;\n  },\n  getMarkInfoDictionary: function getMarkInfoDictionary() {\n    if (!this._root.data.MarkInfo) {\n      this._root.data.MarkInfo = this.ref({});\n    }\n    return this._root.data.MarkInfo;\n  },\n  getStructTreeRoot: function getStructTreeRoot() {\n    if (!this._root.data.StructTreeRoot) {\n      this._root.data.StructTreeRoot = this.ref({\n        Type: 'StructTreeRoot',\n        ParentTree: new PDFNumberTree(),\n        ParentTreeNextKey: 0\n      });\n    }\n    return this._root.data.StructTreeRoot;\n  },\n  getStructParentTree: function getStructParentTree() {\n    return this.getStructTreeRoot().data.ParentTree;\n  },\n  createStructParentTreeNextKey: function createStructParentTreeNextKey() {\n    // initialise the MarkInfo dictionary\n    this.getMarkInfoDictionary();\n    var structTreeRoot = this.getStructTreeRoot();\n    var key = structTreeRoot.data.ParentTreeNextKey++;\n    structTreeRoot.data.ParentTree.add(key, []);\n    return key;\n  },\n  endMarkings: function endMarkings() {\n    var structTreeRoot = this._root.data.StructTreeRoot;\n    if (structTreeRoot) {\n      structTreeRoot.end();\n      this.structChildren.forEach(function (structElem) {\n        return structElem.end();\n      });\n    }\n    if (this._root.data.MarkInfo) {\n      this._root.data.MarkInfo.end();\n    }\n  }\n};\nvar FIELD_FLAGS = {\n  readOnly: 1,\n  required: 2,\n  noExport: 4,\n  multiline: 0x1000,\n  password: 0x2000,\n  toggleToOffButton: 0x4000,\n  radioButton: 0x8000,\n  pushButton: 0x10000,\n  combo: 0x20000,\n  edit: 0x40000,\n  sort: 0x80000,\n  multiSelect: 0x200000,\n  noSpell: 0x400000\n};\nvar FIELD_JUSTIFY = {\n  left: 0,\n  center: 1,\n  right: 2\n};\nvar VALUE_MAP = {\n  value: 'V',\n  defaultValue: 'DV'\n};\nvar FORMAT_SPECIAL = {\n  zip: '0',\n  zipPlus4: '1',\n  zip4: '1',\n  phone: '2',\n  ssn: '3'\n};\nvar FORMAT_DEFAULT = {\n  number: {\n    nDec: 0,\n    sepComma: false,\n    negStyle: 'MinusBlack',\n    currency: '',\n    currencyPrepend: true\n  },\n  percent: {\n    nDec: 0,\n    sepComma: false\n  }\n};\nvar AcroFormMixin = {\n  /**\n   * Must call if adding AcroForms to a document. Must also call font() before\n   * this method to set the default font.\n   */\n  initForm: function initForm() {\n    if (!this._font) {\n      throw new Error('Must set a font before calling initForm method');\n    }\n    this._acroform = {\n      fonts: {},\n      defaultFont: this._font.name\n    };\n    this._acroform.fonts[this._font.id] = this._font.ref();\n    var data = {\n      Fields: [],\n      NeedAppearances: true,\n      DA: new String(\"/\".concat(this._font.id, \" 0 Tf 0 g\")),\n      DR: {\n        Font: {}\n      }\n    };\n    data.DR.Font[this._font.id] = this._font.ref();\n    var AcroForm = this.ref(data);\n    this._root.data.AcroForm = AcroForm;\n    return this;\n  },\n  /**\n   * Called automatically by document.js\n   */\n  endAcroForm: function endAcroForm() {\n    var _this = this;\n    if (this._root.data.AcroForm) {\n      if (!Object.keys(this._acroform.fonts).length && !this._acroform.defaultFont) {\n        throw new Error('No fonts specified for PDF form');\n      }\n      var fontDict = this._root.data.AcroForm.data.DR.Font;\n      Object.keys(this._acroform.fonts).forEach(function (name) {\n        fontDict[name] = _this._acroform.fonts[name];\n      });\n      this._root.data.AcroForm.data.Fields.forEach(function (fieldRef) {\n        _this._endChild(fieldRef);\n      });\n      this._root.data.AcroForm.end();\n    }\n    return this;\n  },\n  _endChild: function _endChild(ref) {\n    var _this2 = this;\n    if (Array.isArray(ref.data.Kids)) {\n      ref.data.Kids.forEach(function (childRef) {\n        _this2._endChild(childRef);\n      });\n      ref.end();\n    }\n    return this;\n  },\n  /**\n   * Creates and adds a form field to the document. Form fields are intermediate\n   * nodes in a PDF form that are used to specify form name heirarchy and form\n   * value defaults.\n   * @param {string} name - field name (T attribute in field dictionary)\n   * @param {object} options  - other attributes to include in field dictionary\n   */\n  formField: function formField(name) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var fieldDict = this._fieldDict(name, null, options);\n    var fieldRef = this.ref(fieldDict);\n    this._addToParent(fieldRef);\n    return fieldRef;\n  },\n  /**\n   * Creates and adds a Form Annotation to the document. Form annotations are\n   * called Widget annotations internally within a PDF file.\n   * @param {string} name - form field name (T attribute of widget annotation\n   * dictionary)\n   * @param {number} x\n   * @param {number} y\n   * @param {number} w\n   * @param {number} h\n   * @param {object} options\n   */\n  formAnnotation: function formAnnotation(name, type, x, y, w, h) {\n    var options = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {};\n    var fieldDict = this._fieldDict(name, type, options);\n    fieldDict.Subtype = 'Widget';\n    if (fieldDict.F === undefined) {\n      fieldDict.F = 4; // print the annotation\n    } // Add Field annot to page, and get it's ref\n\n    this.annotate(x, y, w, h, fieldDict);\n    var annotRef = this.page.annotations[this.page.annotations.length - 1];\n    return this._addToParent(annotRef);\n  },\n  formText: function formText(name, x, y, w, h) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    return this.formAnnotation(name, 'text', x, y, w, h, options);\n  },\n  formPushButton: function formPushButton(name, x, y, w, h) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    return this.formAnnotation(name, 'pushButton', x, y, w, h, options);\n  },\n  formCombo: function formCombo(name, x, y, w, h) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    return this.formAnnotation(name, 'combo', x, y, w, h, options);\n  },\n  formList: function formList(name, x, y, w, h) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    return this.formAnnotation(name, 'list', x, y, w, h, options);\n  },\n  formRadioButton: function formRadioButton(name, x, y, w, h) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    return this.formAnnotation(name, 'radioButton', x, y, w, h, options);\n  },\n  formCheckbox: function formCheckbox(name, x, y, w, h) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    return this.formAnnotation(name, 'checkbox', x, y, w, h, options);\n  },\n  _addToParent: function _addToParent(fieldRef) {\n    var parent = fieldRef.data.Parent;\n    if (parent) {\n      if (!parent.data.Kids) {\n        parent.data.Kids = [];\n      }\n      parent.data.Kids.push(fieldRef);\n    } else {\n      this._root.data.AcroForm.data.Fields.push(fieldRef);\n    }\n    return this;\n  },\n  _fieldDict: function _fieldDict(name, type) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    if (!this._acroform) {\n      throw new Error('Call document.initForms() method before adding form elements to document');\n    }\n    var opts = Object.assign({}, options);\n    if (type !== null) {\n      opts = this._resolveType(type, options);\n    }\n    opts = this._resolveFlags(opts);\n    opts = this._resolveJustify(opts);\n    opts = this._resolveFont(opts);\n    opts = this._resolveStrings(opts);\n    opts = this._resolveColors(opts);\n    opts = this._resolveFormat(opts);\n    opts.T = new String(name);\n    if (opts.parent) {\n      opts.Parent = opts.parent;\n      delete opts.parent;\n    }\n    return opts;\n  },\n  _resolveType: function _resolveType(type, opts) {\n    if (type === 'text') {\n      opts.FT = 'Tx';\n    } else if (type === 'pushButton') {\n      opts.FT = 'Btn';\n      opts.pushButton = true;\n    } else if (type === 'radioButton') {\n      opts.FT = 'Btn';\n      opts.radioButton = true;\n    } else if (type === 'checkbox') {\n      opts.FT = 'Btn';\n    } else if (type === 'combo') {\n      opts.FT = 'Ch';\n      opts.combo = true;\n    } else if (type === 'list') {\n      opts.FT = 'Ch';\n    } else {\n      throw new Error(\"Invalid form annotation type '\".concat(type, \"'\"));\n    }\n    return opts;\n  },\n  _resolveFormat: function _resolveFormat(opts) {\n    var f = opts.format;\n    if (f && f.type) {\n      var fnKeystroke;\n      var fnFormat;\n      var params = '';\n      if (FORMAT_SPECIAL[f.type] !== undefined) {\n        fnKeystroke = \"AFSpecial_Keystroke\";\n        fnFormat = \"AFSpecial_Format\";\n        params = FORMAT_SPECIAL[f.type];\n      } else {\n        var format = f.type.charAt(0).toUpperCase() + f.type.slice(1);\n        fnKeystroke = \"AF\".concat(format, \"_Keystroke\");\n        fnFormat = \"AF\".concat(format, \"_Format\");\n        if (f.type === 'date') {\n          fnKeystroke += 'Ex';\n          params = String(f.param);\n        } else if (f.type === 'time') {\n          params = String(f.param);\n        } else if (f.type === 'number') {\n          var p = Object.assign({}, FORMAT_DEFAULT.number, f);\n          params = String([String(p.nDec), p.sepComma ? '0' : '1', '\"' + p.negStyle + '\"', 'null', '\"' + p.currency + '\"', String(p.currencyPrepend)].join(','));\n        } else if (f.type === 'percent') {\n          var _p = Object.assign({}, FORMAT_DEFAULT.percent, f);\n          params = String([String(_p.nDec), _p.sepComma ? '0' : '1'].join(','));\n        }\n      }\n      opts.AA = opts.AA ? opts.AA : {};\n      opts.AA.K = {\n        S: 'JavaScript',\n        JS: new String(\"\".concat(fnKeystroke, \"(\").concat(params, \");\"))\n      };\n      opts.AA.F = {\n        S: 'JavaScript',\n        JS: new String(\"\".concat(fnFormat, \"(\").concat(params, \");\"))\n      };\n    }\n    delete opts.format;\n    return opts;\n  },\n  _resolveColors: function _resolveColors(opts) {\n    var color = this._normalizeColor(opts.backgroundColor);\n    if (color) {\n      if (!opts.MK) {\n        opts.MK = {};\n      }\n      opts.MK.BG = color;\n    }\n    color = this._normalizeColor(opts.borderColor);\n    if (color) {\n      if (!opts.MK) {\n        opts.MK = {};\n      }\n      opts.MK.BC = color;\n    }\n    delete opts.backgroundColor;\n    delete opts.borderColor;\n    return opts;\n  },\n  _resolveFlags: function _resolveFlags(options) {\n    var result = 0;\n    Object.keys(options).forEach(function (key) {\n      if (FIELD_FLAGS[key]) {\n        result |= FIELD_FLAGS[key];\n        delete options[key];\n      }\n    });\n    if (result !== 0) {\n      options.Ff = options.Ff ? options.Ff : 0;\n      options.Ff |= result;\n    }\n    return options;\n  },\n  _resolveJustify: function _resolveJustify(options) {\n    var result = 0;\n    if (options.align !== undefined) {\n      if (typeof FIELD_JUSTIFY[options.align] === 'number') {\n        result = FIELD_JUSTIFY[options.align];\n      }\n      delete options.align;\n    }\n    if (result !== 0) {\n      options.Q = result; // default\n    }\n\n    return options;\n  },\n  _resolveFont: function _resolveFont(options) {\n    // add current font to document-level AcroForm dict if necessary\n    if (this._acroform.fonts[this._font.id] === null) {\n      this._acroform.fonts[this._font.id] = this._font.ref();\n    } // add current font to field's resource dict (RD) if not the default acroform font\n\n    if (this._acroform.defaultFont !== this._font.name) {\n      options.DR = {\n        Font: {}\n      }; // Get the fontSize option. If not set use auto sizing\n\n      var fontSize = options.fontSize || 0;\n      options.DR.Font[this._font.id] = this._font.ref();\n      options.DA = new String(\"/\".concat(this._font.id, \" \").concat(fontSize, \" Tf 0 g\"));\n    }\n    return options;\n  },\n  _resolveStrings: function _resolveStrings(options) {\n    var select = [];\n    function appendChoices(a) {\n      if (Array.isArray(a)) {\n        for (var idx = 0; idx < a.length; idx++) {\n          if (typeof a[idx] === 'string') {\n            select.push(new String(a[idx]));\n          } else {\n            select.push(a[idx]);\n          }\n        }\n      }\n    }\n    appendChoices(options.Opt);\n    if (options.select) {\n      appendChoices(options.select);\n      delete options.select;\n    }\n    if (select.length) {\n      options.Opt = select;\n    }\n    Object.keys(VALUE_MAP).forEach(function (key) {\n      if (options[key] !== undefined) {\n        options[VALUE_MAP[key]] = options[key];\n        delete options[key];\n      }\n    });\n    ['V', 'DV'].forEach(function (key) {\n      if (typeof options[key] === 'string') {\n        options[key] = new String(options[key]);\n      }\n    });\n    if (options.MK && options.MK.CA) {\n      options.MK.CA = new String(options.MK.CA);\n    }\n    if (options.label) {\n      options.MK = options.MK ? options.MK : {};\n      options.MK.CA = new String(options.label);\n      delete options.label;\n    }\n    return options;\n  }\n};\nvar AttachmentsMixin = {\n  /**\n   * Embed contents of `src` in PDF\n   * @param {Buffer | ArrayBuffer | string} src input Buffer, ArrayBuffer, base64 encoded string or path to file\n   * @param {object} options\n   *  * options.name: filename to be shown in PDF, will use `src` if none set\n   *  * options.type: filetype to be shown in PDF\n   *  * options.description: description to be shown in PDF\n   *  * options.hidden: if true, do not add attachment to EmbeddedFiles dictionary. Useful for file attachment annotations\n   *  * options.creationDate: override creation date\n   *  * options.modifiedDate: override modified date\n   * @returns filespec reference\n   */\n  file: function file(src) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    options.name = options.name || src;\n    var refBody = {\n      Type: 'EmbeddedFile',\n      Params: {}\n    };\n    var data;\n    if (!src) {\n      throw new Error('No src specified');\n    }\n    if (Buffer.isBuffer(src)) {\n      data = src;\n    } else if (src instanceof ArrayBuffer) {\n      data = Buffer.from(new Uint8Array(src));\n    } else {\n      var match;\n      if (match = /^data:(.*);base64,(.*)$/.exec(src)) {\n        if (match[1]) {\n          refBody.Subtype = match[1].replace('/', '#2F');\n        }\n        data = Buffer.from(match[2], 'base64');\n      } else {\n        data = fs.readFileSync(src);\n        if (!data) {\n          throw new Error(\"Could not read contents of file at filepath \".concat(src));\n        } // update CreationDate and ModDate\n\n        var _fs$statSync = fs.statSync(src),\n          birthtime = _fs$statSync.birthtime,\n          ctime = _fs$statSync.ctime;\n        refBody.Params.CreationDate = birthtime;\n        refBody.Params.ModDate = ctime;\n      }\n    } // override creation date and modified date\n\n    if (options.creationDate instanceof Date) {\n      refBody.Params.CreationDate = options.creationDate;\n    }\n    if (options.modifiedDate instanceof Date) {\n      refBody.Params.ModDate = options.modifiedDate;\n    } // add optional subtype\n\n    if (options.type) {\n      refBody.Subtype = options.type.replace('/', '#2F');\n    } // add checksum and size information\n\n    var checksum = _cryptoJs.default.MD5(_cryptoJs.default.lib.WordArray.create(new Uint8Array(data)));\n    refBody.Params.CheckSum = new String(checksum);\n    refBody.Params.Size = data.byteLength; // save some space when embedding the same file again\n    // if a file with the same name and metadata exists, reuse its reference\n\n    var ref;\n    if (!this._fileRegistry) this._fileRegistry = {};\n    var file = this._fileRegistry[options.name];\n    if (file && isEqual(refBody, file)) {\n      ref = file.ref;\n    } else {\n      ref = this.ref(refBody);\n      ref.end(data);\n      this._fileRegistry[options.name] = _objectSpread2(_objectSpread2({}, refBody), {}, {\n        ref: ref\n      });\n    } // add filespec for embedded file\n\n    var fileSpecBody = {\n      Type: 'Filespec',\n      F: new String(options.name),\n      EF: {\n        F: ref\n      },\n      UF: new String(options.name)\n    };\n    if (options.description) {\n      fileSpecBody.Desc = new String(options.description);\n    }\n    var filespec = this.ref(fileSpecBody);\n    filespec.end();\n    if (!options.hidden) {\n      this.addNamedEmbeddedFile(options.name, filespec);\n    }\n    return filespec;\n  }\n};\n/** check two embedded file metadata objects for equality */\n\nfunction isEqual(a, b) {\n  return a.Subtype === b.Subtype && a.Params.CheckSum.toString() === b.Params.CheckSum.toString() && a.Params.Size === b.Params.Size && a.Params.CreationDate === b.Params.CreationDate && a.Params.ModDate === b.Params.ModDate;\n}\nvar PDFDocument = /*#__PURE__*/function (_stream$Readable) {\n  _inherits(PDFDocument, _stream$Readable);\n  var _super = _createSuper(PDFDocument);\n  function PDFDocument() {\n    var _this;\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _classCallCheck(this, PDFDocument);\n    _this = _super.call(this, options);\n    _this.options = options; // PDF version\n\n    switch (options.pdfVersion) {\n      case '1.4':\n        _this.version = 1.4;\n        break;\n      case '1.5':\n        _this.version = 1.5;\n        break;\n      case '1.6':\n        _this.version = 1.6;\n        break;\n      case '1.7':\n      case '1.7ext3':\n        _this.version = 1.7;\n        break;\n      default:\n        _this.version = 1.3;\n        break;\n    } // Whether streams should be compressed\n\n    _this.compress = _this.options.compress != null ? _this.options.compress : true;\n    _this._pageBuffer = [];\n    _this._pageBufferStart = 0; // The PDF object store\n\n    _this._offsets = [];\n    _this._waiting = 0;\n    _this._ended = false;\n    _this._offset = 0;\n    var Pages = _this.ref({\n      Type: 'Pages',\n      Count: 0,\n      Kids: []\n    });\n    var Names = _this.ref({\n      Dests: new PDFNameTree()\n    });\n    _this._root = _this.ref({\n      Type: 'Catalog',\n      Pages: Pages,\n      Names: Names\n    });\n    if (_this.options.lang) {\n      _this._root.data.Lang = new String(_this.options.lang);\n    } // The current page\n\n    _this.page = null; // Initialize mixins\n\n    _this.initColor();\n    _this.initVector();\n    _this.initFonts(options.font);\n    _this.initText();\n    _this.initImages();\n    _this.initOutline();\n    _this.initMarkings(options); // Initialize the metadata\n\n    _this.info = {\n      Producer: 'PDFKit',\n      Creator: 'PDFKit',\n      CreationDate: new Date()\n    };\n    if (_this.options.info) {\n      for (var key in _this.options.info) {\n        var val = _this.options.info[key];\n        _this.info[key] = val;\n      }\n    }\n    if (_this.options.displayTitle) {\n      _this._root.data.ViewerPreferences = _this.ref({\n        DisplayDocTitle: true\n      });\n    } // Generate file ID\n\n    _this._id = PDFSecurity.generateFileID(_this.info); // Initialize security settings\n\n    _this._security = PDFSecurity.create(_assertThisInitialized(_this), options); // Write the header\n    // PDF version\n\n    _this._write(\"%PDF-\".concat(_this.version)); // 4 binary chars, as recommended by the spec\n\n    _this._write('%\\xFF\\xFF\\xFF\\xFF'); // Add the first page\n\n    if (_this.options.autoFirstPage !== false) {\n      _this.addPage();\n    }\n    return _this;\n  }\n  _createClass(PDFDocument, [{\n    key: \"addPage\",\n    value: function addPage(options) {\n      if (options == null) {\n        options = this.options;\n      } // end the current page if needed\n\n      if (!this.options.bufferPages) {\n        this.flushPages();\n      } // create a page object\n\n      this.page = new PDFPage(this, options);\n      this._pageBuffer.push(this.page); // add the page to the object store\n\n      var pages = this._root.data.Pages.data;\n      pages.Kids.push(this.page.dictionary);\n      pages.Count++; // reset x and y coordinates\n\n      this.x = this.page.margins.left;\n      this.y = this.page.margins.top; // flip PDF coordinate system so that the origin is in\n      // the top left rather than the bottom left\n\n      this._ctm = [1, 0, 0, 1, 0, 0];\n      this.transform(1, 0, 0, -1, 0, this.page.height);\n      this.emit('pageAdded');\n      return this;\n    }\n  }, {\n    key: \"continueOnNewPage\",\n    value: function continueOnNewPage(options) {\n      var pageMarkings = this.endPageMarkings(this.page);\n      this.addPage(options);\n      this.initPageMarkings(pageMarkings);\n      return this;\n    }\n  }, {\n    key: \"bufferedPageRange\",\n    value: function bufferedPageRange() {\n      return {\n        start: this._pageBufferStart,\n        count: this._pageBuffer.length\n      };\n    }\n  }, {\n    key: \"switchToPage\",\n    value: function switchToPage(n) {\n      var page;\n      if (!(page = this._pageBuffer[n - this._pageBufferStart])) {\n        throw new Error(\"switchToPage(\".concat(n, \") out of bounds, current buffer covers pages \").concat(this._pageBufferStart, \" to \").concat(this._pageBufferStart + this._pageBuffer.length - 1));\n      }\n      return this.page = page;\n    }\n  }, {\n    key: \"flushPages\",\n    value: function flushPages() {\n      // this local variable exists so we're future-proof against\n      // reentrant calls to flushPages.\n      var pages = this._pageBuffer;\n      this._pageBuffer = [];\n      this._pageBufferStart += pages.length;\n      var _iterator = _createForOfIteratorHelper(pages),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var page = _step.value;\n          this.endPageMarkings(page);\n          page.end();\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n  }, {\n    key: \"addNamedDestination\",\n    value: function addNamedDestination(name) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      if (args.length === 0) {\n        args = ['XYZ', null, null, null];\n      }\n      if (args[0] === 'XYZ' && args[2] !== null) {\n        args[2] = this.page.height - args[2];\n      }\n      args.unshift(this.page.dictionary);\n      this._root.data.Names.data.Dests.add(name, args);\n    }\n  }, {\n    key: \"addNamedEmbeddedFile\",\n    value: function addNamedEmbeddedFile(name, ref) {\n      if (!this._root.data.Names.data.EmbeddedFiles) {\n        // disabling /Limits for this tree fixes attachments not showing in Adobe Reader\n        this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({\n          limits: false\n        });\n      } // add filespec to EmbeddedFiles\n\n      this._root.data.Names.data.EmbeddedFiles.add(name, ref);\n    }\n  }, {\n    key: \"addNamedJavaScript\",\n    value: function addNamedJavaScript(name, js) {\n      if (!this._root.data.Names.data.JavaScript) {\n        this._root.data.Names.data.JavaScript = new PDFNameTree();\n      }\n      var data = {\n        JS: new String(js),\n        S: 'JavaScript'\n      };\n      this._root.data.Names.data.JavaScript.add(name, data);\n    }\n  }, {\n    key: \"ref\",\n    value: function ref(data) {\n      var ref = new PDFReference(this, this._offsets.length + 1, data);\n      this._offsets.push(null); // placeholder for this object's offset once it is finalized\n\n      this._waiting++;\n      return ref;\n    }\n  }, {\n    key: \"_read\",\n    value: function _read() {} // do nothing, but this method is required by node\n  }, {\n    key: \"_write\",\n    value: function _write(data) {\n      if (!Buffer.isBuffer(data)) {\n        data = Buffer.from(data + '\\n', 'binary');\n      }\n      this.push(data);\n      return this._offset += data.length;\n    }\n  }, {\n    key: \"addContent\",\n    value: function addContent(data) {\n      this.page.write(data);\n      return this;\n    }\n  }, {\n    key: \"_refEnd\",\n    value: function _refEnd(ref) {\n      this._offsets[ref.id - 1] = ref.offset;\n      if (--this._waiting === 0 && this._ended) {\n        this._finalize();\n        return this._ended = false;\n      }\n    }\n  }, {\n    key: \"write\",\n    value: function write(filename, fn) {\n      // print a deprecation warning with a stacktrace\n      var err = new Error(\"PDFDocument#write is deprecated, and will be removed in a future version of PDFKit. Please pipe the document into a Node stream.\");\n      console.warn(err.stack);\n      this.pipe(fs.createWriteStream(filename));\n      this.end();\n      return this.once('end', fn);\n    }\n  }, {\n    key: \"end\",\n    value: function end() {\n      this.flushPages();\n      this._info = this.ref();\n      for (var key in this.info) {\n        var val = this.info[key];\n        if (typeof val === 'string') {\n          val = new String(val);\n        }\n        var entry = this.ref(val);\n        entry.end();\n        this._info.data[key] = entry;\n      }\n      this._info.end();\n      for (var name in this._fontFamilies) {\n        var font = this._fontFamilies[name];\n        font.finalize();\n      }\n      this.endOutline();\n      this.endMarkings();\n      this._root.end();\n      this._root.data.Pages.end();\n      this._root.data.Names.end();\n      this.endAcroForm();\n      if (this._root.data.ViewerPreferences) {\n        this._root.data.ViewerPreferences.end();\n      }\n      if (this._security) {\n        this._security.end();\n      }\n      if (this._waiting === 0) {\n        return this._finalize();\n      } else {\n        return this._ended = true;\n      }\n    }\n  }, {\n    key: \"_finalize\",\n    value: function _finalize() {\n      // generate xref\n      var xRefOffset = this._offset;\n      this._write('xref');\n      this._write(\"0 \".concat(this._offsets.length + 1));\n      this._write('0000000000 65535 f ');\n      var _iterator2 = _createForOfIteratorHelper(this._offsets),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var offset = _step2.value;\n          offset = \"0000000000\".concat(offset).slice(-10);\n          this._write(offset + ' 00000 n ');\n        } // trailer\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      var trailer = {\n        Size: this._offsets.length + 1,\n        Root: this._root,\n        Info: this._info,\n        ID: [this._id, this._id]\n      };\n      if (this._security) {\n        trailer.Encrypt = this._security.dictionary;\n      }\n      this._write('trailer');\n      this._write(PDFObject.convert(trailer));\n      this._write('startxref');\n      this._write(\"\".concat(xRefOffset));\n      this._write('%%EOF'); // end the stream\n\n      return this.push(null);\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return '[object PDFDocument]';\n    }\n  }]);\n  return PDFDocument;\n}(_stream.default.Readable);\nvar mixin = function mixin(methods) {\n  Object.assign(PDFDocument.prototype, methods);\n};\nmixin(ColorMixin);\nmixin(VectorMixin);\nmixin(FontsMixin);\nmixin(TextMixin);\nmixin(ImagesMixin);\nmixin(AnnotationsMixin);\nmixin(OutlineMixin);\nmixin(MarkingsMixin);\nmixin(AcroFormMixin);\nmixin(AttachmentsMixin);\nPDFDocument.LineWrapper = LineWrapper;\nvar _default = PDFDocument;\nexports[\"default\"] = _default;\n\n/***/ }),\n\n/***/ 4559:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(3290);\n/* eslint-disable node/no-deprecated-api */\nvar buffer = __webpack_require__(8823);\nvar Buffer = buffer.Buffer;\n\n// alternative to using Object.keys for old browsers\nfunction copyProps(src, dst) {\n  for (var key in src) {\n    dst[key] = src[key];\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer;\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports);\n  exports.Buffer = SafeBuffer;\n}\nfunction SafeBuffer(arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length);\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer);\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number');\n  }\n  return Buffer(arg, encodingOrOffset, length);\n};\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n  var buf = Buffer(size);\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding);\n    } else {\n      buf.fill(fill);\n    }\n  } else {\n    buf.fill(0);\n  }\n  return buf;\n};\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n  return Buffer(size);\n};\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n  return buffer.SlowBuffer(size);\n};\n\n/***/ }),\n\n/***/ 4781:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(2472);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(9135);\nvar inflate = __webpack_require__(311);\nvar _require = __webpack_require__(1753),\n  swap32LE = _require.swap32LE;\n\n// Shift size for getting the index-1 table offset.\nvar SHIFT_1 = 6 + 5;\n\n// Shift size for getting the index-2 table offset.\nvar SHIFT_2 = 5;\n\n// Difference between the two shift sizes,\n// for getting an index-1 offset from an index-2 offset. 6=11-5\nvar SHIFT_1_2 = SHIFT_1 - SHIFT_2;\n\n// Number of index-1 entries for the BMP. 32=0x20\n// This part of the index-1 table is omitted from the serialized form.\nvar OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1;\n\n// Number of entries in an index-2 block. 64=0x40\nvar INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2;\n\n// Mask for getting the lower bits for the in-index-2-block offset. */\nvar INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1;\n\n// Shift size for shifting left the index array values.\n// Increases possible data size with 16-bit index values at the cost\n// of compactability.\n// This requires data blocks to be aligned by DATA_GRANULARITY.\nvar INDEX_SHIFT = 2;\n\n// Number of entries in a data block. 32=0x20\nvar DATA_BLOCK_LENGTH = 1 << SHIFT_2;\n\n// Mask for getting the lower bits for the in-data-block offset.\nvar DATA_MASK = DATA_BLOCK_LENGTH - 1;\n\n// The part of the index-2 table for U+D800..U+DBFF stores values for\n// lead surrogate code _units_ not code _points_.\n// Values for lead surrogate code _points_ are indexed with this portion of the table.\n// Length=32=0x20=0x400>>SHIFT_2. (There are 1024=0x400 lead surrogates.)\nvar LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2;\nvar LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2;\n\n// Count the lengths of both BMP pieces. 2080=0x820\nvar INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH;\n\n// The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n// Length 32=0x20 for lead bytes C0..DF, regardless of SHIFT_2.\nvar UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;\nvar UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; // U+0800 is the first code point after 2-byte UTF-8\n\n// The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n// Variable length, for code points up to highStart, where the last single-value range starts.\n// Maximum length 512=0x200=0x100000>>SHIFT_1.\n// (For 0x100000 supplementary code points U+10000..U+10ffff.)\n//\n// The part of the index-2 table for supplementary code points starts\n// after this index-1 table.\n//\n// Both the index-1 table and the following part of the index-2 table\n// are omitted completely if there is only BMP data.\nvar INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;\n\n// The alignment size of a data block. Also the granularity for compaction.\nvar DATA_GRANULARITY = 1 << INDEX_SHIFT;\nvar UnicodeTrie = /*#__PURE__*/function () {\n  function UnicodeTrie(data) {\n    var isBuffer = typeof data.readUInt32BE === 'function' && typeof data.slice === 'function';\n    if (isBuffer || data instanceof Uint8Array) {\n      // read binary format\n      var uncompressedLength;\n      if (isBuffer) {\n        this.highStart = data.readUInt32LE(0);\n        this.errorValue = data.readUInt32LE(4);\n        uncompressedLength = data.readUInt32LE(8);\n        data = data.slice(12);\n      } else {\n        var view = new DataView(data.buffer);\n        this.highStart = view.getUint32(0, true);\n        this.errorValue = view.getUint32(4, true);\n        uncompressedLength = view.getUint32(8, true);\n        data = data.subarray(12);\n      }\n\n      // double inflate the actual trie data\n      data = inflate(data, new Uint8Array(uncompressedLength));\n      data = inflate(data, new Uint8Array(uncompressedLength));\n\n      // swap bytes from little-endian\n      swap32LE(data);\n      this.data = new Uint32Array(data.buffer);\n    } else {\n      // pre-parsed data\n      var _data = data;\n      this.data = _data.data;\n      this.highStart = _data.highStart;\n      this.errorValue = _data.errorValue;\n    }\n  }\n  var _proto = UnicodeTrie.prototype;\n  _proto.get = function get(codePoint) {\n    var index;\n    if (codePoint < 0 || codePoint > 0x10ffff) {\n      return this.errorValue;\n    }\n    if (codePoint < 0xd800 || codePoint > 0xdbff && codePoint <= 0xffff) {\n      // Ordinary BMP code point, excluding leading surrogates.\n      // BMP uses a single level lookup.  BMP index starts at offset 0 in the index.\n      // data is stored in the index array itself.\n      index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK);\n      return this.data[index];\n    }\n    if (codePoint <= 0xffff) {\n      // Lead Surrogate Code Point.  A Separate index section is stored for\n      // lead surrogate code units and code points.\n      //   The main index has the code unit data.\n      //   For this function, we need the code point data.\n      index = (this.data[LSCP_INDEX_2_OFFSET + (codePoint - 0xd800 >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK);\n      return this.data[index];\n    }\n    if (codePoint < this.highStart) {\n      // Supplemental code point, use two-level lookup.\n      index = this.data[INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> SHIFT_1)];\n      index = this.data[index + (codePoint >> SHIFT_2 & INDEX_2_MASK)];\n      index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK);\n      return this.data[index];\n    }\n    return this.data[this.data.length - DATA_GRANULARITY];\n  };\n  return UnicodeTrie;\n}();\nmodule.exports = UnicodeTrie;\n\n/***/ }),\n\n/***/ 1753:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(2472);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(9135);\nvar isBigEndian = new Uint8Array(new Uint32Array([0x12345678]).buffer)[0] === 0x12;\nvar swap = function swap(b, n, m) {\n  var i = b[n];\n  b[n] = b[m];\n  b[m] = i;\n};\nvar swap32 = function swap32(array) {\n  var len = array.length;\n  for (var i = 0; i < len; i += 4) {\n    swap(array, i, i + 3);\n    swap(array, i + 1, i + 2);\n  }\n};\nvar swap32LE = function swap32LE(array) {\n  if (isBigEndian) {\n    swap32(array);\n  }\n};\nmodule.exports = {\n  swap32LE: swap32LE\n};\n\n/***/ }),\n\n/***/ 8071:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar SVGtoPDF = __webpack_require__(8519);\nmodule.exports = SVGtoPDF;\n\n/***/ }),\n\n/***/ 8519:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* module decorator */ module = __webpack_require__.nmd(module);\n\n\n__webpack_require__(8309);\n__webpack_require__(7941);\n__webpack_require__(3210);\n__webpack_require__(4916);\n__webpack_require__(4723);\n__webpack_require__(3728);\n__webpack_require__(5306);\n__webpack_require__(7042);\n__webpack_require__(9653);\n__webpack_require__(3123);\n__webpack_require__(2222);\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(3948);\n__webpack_require__(9254);\n__webpack_require__(3290);\nvar SVGtoPDF = function SVGtoPDF(doc, svg, x, y, options) {\n  \"use strict\";\n\n  var NamedColors = {\n    aliceblue: [240, 248, 255],\n    antiquewhite: [250, 235, 215],\n    aqua: [0, 255, 255],\n    aquamarine: [127, 255, 212],\n    azure: [240, 255, 255],\n    beige: [245, 245, 220],\n    bisque: [255, 228, 196],\n    black: [0, 0, 0],\n    blanchedalmond: [255, 235, 205],\n    blue: [0, 0, 255],\n    blueviolet: [138, 43, 226],\n    brown: [165, 42, 42],\n    burlywood: [222, 184, 135],\n    cadetblue: [95, 158, 160],\n    chartreuse: [127, 255, 0],\n    chocolate: [210, 105, 30],\n    coral: [255, 127, 80],\n    cornflowerblue: [100, 149, 237],\n    cornsilk: [255, 248, 220],\n    crimson: [220, 20, 60],\n    cyan: [0, 255, 255],\n    darkblue: [0, 0, 139],\n    darkcyan: [0, 139, 139],\n    darkgoldenrod: [184, 134, 11],\n    darkgray: [169, 169, 169],\n    darkgrey: [169, 169, 169],\n    darkgreen: [0, 100, 0],\n    darkkhaki: [189, 183, 107],\n    darkmagenta: [139, 0, 139],\n    darkolivegreen: [85, 107, 47],\n    darkorange: [255, 140, 0],\n    darkorchid: [153, 50, 204],\n    darkred: [139, 0, 0],\n    darksalmon: [233, 150, 122],\n    darkseagreen: [143, 188, 143],\n    darkslateblue: [72, 61, 139],\n    darkslategray: [47, 79, 79],\n    darkslategrey: [47, 79, 79],\n    darkturquoise: [0, 206, 209],\n    darkviolet: [148, 0, 211],\n    deeppink: [255, 20, 147],\n    deepskyblue: [0, 191, 255],\n    dimgray: [105, 105, 105],\n    dimgrey: [105, 105, 105],\n    dodgerblue: [30, 144, 255],\n    firebrick: [178, 34, 34],\n    floralwhite: [255, 250, 240],\n    forestgreen: [34, 139, 34],\n    fuchsia: [255, 0, 255],\n    gainsboro: [220, 220, 220],\n    ghostwhite: [248, 248, 255],\n    gold: [255, 215, 0],\n    goldenrod: [218, 165, 32],\n    gray: [128, 128, 128],\n    grey: [128, 128, 128],\n    green: [0, 128, 0],\n    greenyellow: [173, 255, 47],\n    honeydew: [240, 255, 240],\n    hotpink: [255, 105, 180],\n    indianred: [205, 92, 92],\n    indigo: [75, 0, 130],\n    ivory: [255, 255, 240],\n    khaki: [240, 230, 140],\n    lavender: [230, 230, 250],\n    lavenderblush: [255, 240, 245],\n    lawngreen: [124, 252, 0],\n    lemonchiffon: [255, 250, 205],\n    lightblue: [173, 216, 230],\n    lightcoral: [240, 128, 128],\n    lightcyan: [224, 255, 255],\n    lightgoldenrodyellow: [250, 250, 210],\n    lightgray: [211, 211, 211],\n    lightgrey: [211, 211, 211],\n    lightgreen: [144, 238, 144],\n    lightpink: [255, 182, 193],\n    lightsalmon: [255, 160, 122],\n    lightseagreen: [32, 178, 170],\n    lightskyblue: [135, 206, 250],\n    lightslategray: [119, 136, 153],\n    lightslategrey: [119, 136, 153],\n    lightsteelblue: [176, 196, 222],\n    lightyellow: [255, 255, 224],\n    lime: [0, 255, 0],\n    limegreen: [50, 205, 50],\n    linen: [250, 240, 230],\n    magenta: [255, 0, 255],\n    maroon: [128, 0, 0],\n    mediumaquamarine: [102, 205, 170],\n    mediumblue: [0, 0, 205],\n    mediumorchid: [186, 85, 211],\n    mediumpurple: [147, 112, 219],\n    mediumseagreen: [60, 179, 113],\n    mediumslateblue: [123, 104, 238],\n    mediumspringgreen: [0, 250, 154],\n    mediumturquoise: [72, 209, 204],\n    mediumvioletred: [199, 21, 133],\n    midnightblue: [25, 25, 112],\n    mintcream: [245, 255, 250],\n    mistyrose: [255, 228, 225],\n    moccasin: [255, 228, 181],\n    navajowhite: [255, 222, 173],\n    navy: [0, 0, 128],\n    oldlace: [253, 245, 230],\n    olive: [128, 128, 0],\n    olivedrab: [107, 142, 35],\n    orange: [255, 165, 0],\n    orangered: [255, 69, 0],\n    orchid: [218, 112, 214],\n    palegoldenrod: [238, 232, 170],\n    palegreen: [152, 251, 152],\n    paleturquoise: [175, 238, 238],\n    palevioletred: [219, 112, 147],\n    papayawhip: [255, 239, 213],\n    peachpuff: [255, 218, 185],\n    peru: [205, 133, 63],\n    pink: [255, 192, 203],\n    plum: [221, 160, 221],\n    powderblue: [176, 224, 230],\n    purple: [128, 0, 128],\n    rebeccapurple: [102, 51, 153],\n    red: [255, 0, 0],\n    rosybrown: [188, 143, 143],\n    royalblue: [65, 105, 225],\n    saddlebrown: [139, 69, 19],\n    salmon: [250, 128, 114],\n    sandybrown: [244, 164, 96],\n    seagreen: [46, 139, 87],\n    seashell: [255, 245, 238],\n    sienna: [160, 82, 45],\n    silver: [192, 192, 192],\n    skyblue: [135, 206, 235],\n    slateblue: [106, 90, 205],\n    slategray: [112, 128, 144],\n    slategrey: [112, 128, 144],\n    snow: [255, 250, 250],\n    springgreen: [0, 255, 127],\n    steelblue: [70, 130, 180],\n    tan: [210, 180, 140],\n    teal: [0, 128, 128],\n    thistle: [216, 191, 216],\n    tomato: [255, 99, 71],\n    turquoise: [64, 224, 208],\n    violet: [238, 130, 238],\n    wheat: [245, 222, 179],\n    white: [255, 255, 255],\n    whitesmoke: [245, 245, 245],\n    yellow: [255, 255, 0]\n  };\n  var DefaultColors = {\n    black: [NamedColors.black, 1],\n    white: [NamedColors.white, 1],\n    transparent: [NamedColors.black, 0]\n  };\n  var Entities = {\n    quot: 34,\n    amp: 38,\n    lt: 60,\n    gt: 62,\n    apos: 39,\n    OElig: 338,\n    oelig: 339,\n    Scaron: 352,\n    scaron: 353,\n    Yuml: 376,\n    circ: 710,\n    tilde: 732,\n    ensp: 8194,\n    emsp: 8195,\n    thinsp: 8201,\n    zwnj: 8204,\n    zwj: 8205,\n    lrm: 8206,\n    rlm: 8207,\n    ndash: 8211,\n    mdash: 8212,\n    lsquo: 8216,\n    rsquo: 8217,\n    sbquo: 8218,\n    ldquo: 8220,\n    rdquo: 8221,\n    bdquo: 8222,\n    dagger: 8224,\n    Dagger: 8225,\n    permil: 8240,\n    lsaquo: 8249,\n    rsaquo: 8250,\n    euro: 8364,\n    nbsp: 160,\n    iexcl: 161,\n    cent: 162,\n    pound: 163,\n    curren: 164,\n    yen: 165,\n    brvbar: 166,\n    sect: 167,\n    uml: 168,\n    copy: 169,\n    ordf: 170,\n    laquo: 171,\n    not: 172,\n    shy: 173,\n    reg: 174,\n    macr: 175,\n    deg: 176,\n    plusmn: 177,\n    sup2: 178,\n    sup3: 179,\n    acute: 180,\n    micro: 181,\n    para: 182,\n    middot: 183,\n    cedil: 184,\n    sup1: 185,\n    ordm: 186,\n    raquo: 187,\n    frac14: 188,\n    frac12: 189,\n    frac34: 190,\n    iquest: 191,\n    Agrave: 192,\n    Aacute: 193,\n    Acirc: 194,\n    Atilde: 195,\n    Auml: 196,\n    Aring: 197,\n    AElig: 198,\n    Ccedil: 199,\n    Egrave: 200,\n    Eacute: 201,\n    Ecirc: 202,\n    Euml: 203,\n    Igrave: 204,\n    Iacute: 205,\n    Icirc: 206,\n    Iuml: 207,\n    ETH: 208,\n    Ntilde: 209,\n    Ograve: 210,\n    Oacute: 211,\n    Ocirc: 212,\n    Otilde: 213,\n    Ouml: 214,\n    times: 215,\n    Oslash: 216,\n    Ugrave: 217,\n    Uacute: 218,\n    Ucirc: 219,\n    Uuml: 220,\n    Yacute: 221,\n    THORN: 222,\n    szlig: 223,\n    agrave: 224,\n    aacute: 225,\n    acirc: 226,\n    atilde: 227,\n    auml: 228,\n    aring: 229,\n    aelig: 230,\n    ccedil: 231,\n    egrave: 232,\n    eacute: 233,\n    ecirc: 234,\n    euml: 235,\n    igrave: 236,\n    iacute: 237,\n    icirc: 238,\n    iuml: 239,\n    eth: 240,\n    ntilde: 241,\n    ograve: 242,\n    oacute: 243,\n    ocirc: 244,\n    otilde: 245,\n    ouml: 246,\n    divide: 247,\n    oslash: 248,\n    ugrave: 249,\n    uacute: 250,\n    ucirc: 251,\n    uuml: 252,\n    yacute: 253,\n    thorn: 254,\n    yuml: 255,\n    fnof: 402,\n    Alpha: 913,\n    Beta: 914,\n    Gamma: 915,\n    Delta: 916,\n    Epsilon: 917,\n    Zeta: 918,\n    Eta: 919,\n    Theta: 920,\n    Iota: 921,\n    Kappa: 922,\n    Lambda: 923,\n    Mu: 924,\n    Nu: 925,\n    Xi: 926,\n    Omicron: 927,\n    Pi: 928,\n    Rho: 929,\n    Sigma: 931,\n    Tau: 932,\n    Upsilon: 933,\n    Phi: 934,\n    Chi: 935,\n    Psi: 936,\n    Omega: 937,\n    alpha: 945,\n    beta: 946,\n    gamma: 947,\n    delta: 948,\n    epsilon: 949,\n    zeta: 950,\n    eta: 951,\n    theta: 952,\n    iota: 953,\n    kappa: 954,\n    lambda: 955,\n    mu: 956,\n    nu: 957,\n    xi: 958,\n    omicron: 959,\n    pi: 960,\n    rho: 961,\n    sigmaf: 962,\n    sigma: 963,\n    tau: 964,\n    upsilon: 965,\n    phi: 966,\n    chi: 967,\n    psi: 968,\n    omega: 969,\n    thetasym: 977,\n    upsih: 978,\n    piv: 982,\n    bull: 8226,\n    hellip: 8230,\n    prime: 8242,\n    Prime: 8243,\n    oline: 8254,\n    frasl: 8260,\n    weierp: 8472,\n    image: 8465,\n    real: 8476,\n    trade: 8482,\n    alefsym: 8501,\n    larr: 8592,\n    uarr: 8593,\n    rarr: 8594,\n    darr: 8595,\n    harr: 8596,\n    crarr: 8629,\n    lArr: 8656,\n    uArr: 8657,\n    rArr: 8658,\n    dArr: 8659,\n    hArr: 8660,\n    forall: 8704,\n    part: 8706,\n    exist: 8707,\n    empty: 8709,\n    nabla: 8711,\n    isin: 8712,\n    notin: 8713,\n    ni: 8715,\n    prod: 8719,\n    sum: 8721,\n    minus: 8722,\n    lowast: 8727,\n    radic: 8730,\n    prop: 8733,\n    infin: 8734,\n    ang: 8736,\n    and: 8743,\n    or: 8744,\n    cap: 8745,\n    cup: 8746,\n    int: 8747,\n    there4: 8756,\n    sim: 8764,\n    cong: 8773,\n    asymp: 8776,\n    ne: 8800,\n    equiv: 8801,\n    le: 8804,\n    ge: 8805,\n    sub: 8834,\n    sup: 8835,\n    nsub: 8836,\n    sube: 8838,\n    supe: 8839,\n    oplus: 8853,\n    otimes: 8855,\n    perp: 8869,\n    sdot: 8901,\n    lceil: 8968,\n    rceil: 8969,\n    lfloor: 8970,\n    rfloor: 8971,\n    lang: 9001,\n    rang: 9002,\n    loz: 9674,\n    spades: 9824,\n    clubs: 9827,\n    hearts: 9829,\n    diams: 9830\n  };\n  var PathArguments = {\n    A: 7,\n    a: 7,\n    C: 6,\n    c: 6,\n    H: 1,\n    h: 1,\n    L: 2,\n    l: 2,\n    M: 2,\n    m: 2,\n    Q: 4,\n    q: 4,\n    S: 4,\n    s: 4,\n    T: 2,\n    t: 2,\n    V: 1,\n    v: 1,\n    Z: 0,\n    z: 0\n  };\n  var PathFlags = {\n    A3: true,\n    A4: true,\n    a3: true,\n    a4: true\n  };\n  var Properties = {\n    'color': {\n      inherit: true,\n      initial: undefined\n    },\n    'visibility': {\n      inherit: true,\n      initial: 'visible',\n      values: {\n        'hidden': 'hidden',\n        'collapse': 'hidden',\n        'visible': 'visible'\n      }\n    },\n    'fill': {\n      inherit: true,\n      initial: DefaultColors.black\n    },\n    'stroke': {\n      inherit: true,\n      initial: 'none'\n    },\n    'stop-color': {\n      inherit: false,\n      initial: DefaultColors.black\n    },\n    'fill-opacity': {\n      inherit: true,\n      initial: 1\n    },\n    'stroke-opacity': {\n      inherit: true,\n      initial: 1\n    },\n    'stop-opacity': {\n      inherit: false,\n      initial: 1\n    },\n    'fill-rule': {\n      inherit: true,\n      initial: 'nonzero',\n      values: {\n        'nonzero': 'nonzero',\n        'evenodd': 'evenodd'\n      }\n    },\n    'clip-rule': {\n      inherit: true,\n      initial: 'nonzero',\n      values: {\n        'nonzero': 'nonzero',\n        'evenodd': 'evenodd'\n      }\n    },\n    'stroke-width': {\n      inherit: true,\n      initial: 1\n    },\n    'stroke-dasharray': {\n      inherit: true,\n      initial: []\n    },\n    'stroke-dashoffset': {\n      inherit: true,\n      initial: 0\n    },\n    'stroke-miterlimit': {\n      inherit: true,\n      initial: 4\n    },\n    'stroke-linejoin': {\n      inherit: true,\n      initial: 'miter',\n      values: {\n        'miter': 'miter',\n        'round': 'round',\n        'bevel': 'bevel'\n      }\n    },\n    'stroke-linecap': {\n      inherit: true,\n      initial: 'butt',\n      values: {\n        'butt': 'butt',\n        'round': 'round',\n        'square': 'square'\n      }\n    },\n    'font-size': {\n      inherit: true,\n      initial: 16,\n      values: {\n        'xx-small': 9,\n        'x-small': 10,\n        'small': 13,\n        'medium': 16,\n        'large': 18,\n        'x-large': 24,\n        'xx-large': 32\n      }\n    },\n    'font-family': {\n      inherit: true,\n      initial: 'sans-serif'\n    },\n    'font-weight': {\n      inherit: true,\n      initial: 'normal',\n      values: {\n        '600': 'bold',\n        '700': 'bold',\n        '800': 'bold',\n        '900': 'bold',\n        'bold': 'bold',\n        'bolder': 'bold',\n        '500': 'normal',\n        '400': 'normal',\n        '300': 'normal',\n        '200': 'normal',\n        '100': 'normal',\n        'normal': 'normal',\n        'lighter': 'normal'\n      }\n    },\n    'font-style': {\n      inherit: true,\n      initial: 'normal',\n      values: {\n        'italic': 'italic',\n        'oblique': 'italic',\n        'normal': 'normal'\n      }\n    },\n    'text-anchor': {\n      inherit: true,\n      initial: 'start',\n      values: {\n        'start': 'start',\n        'middle': 'middle',\n        'end': 'end'\n      }\n    },\n    'direction': {\n      inherit: true,\n      initial: 'ltr',\n      values: {\n        'ltr': 'ltr',\n        'rtl': 'rtl'\n      }\n    },\n    'dominant-baseline': {\n      inherit: true,\n      initial: 'baseline',\n      values: {\n        'auto': 'baseline',\n        'baseline': 'baseline',\n        'before-edge': 'before-edge',\n        'text-before-edge': 'before-edge',\n        'middle': 'middle',\n        'central': 'central',\n        'after-edge': 'after-edge',\n        'text-after-edge': 'after-edge',\n        'ideographic': 'ideographic',\n        'alphabetic': 'alphabetic',\n        'hanging': 'hanging',\n        'mathematical': 'mathematical'\n      }\n    },\n    'alignment-baseline': {\n      inherit: false,\n      initial: undefined,\n      values: {\n        'auto': 'baseline',\n        'baseline': 'baseline',\n        'before-edge': 'before-edge',\n        'text-before-edge': 'before-edge',\n        'middle': 'middle',\n        'central': 'central',\n        'after-edge': 'after-edge',\n        'text-after-edge': 'after-edge',\n        'ideographic': 'ideographic',\n        'alphabetic': 'alphabetic',\n        'hanging': 'hanging',\n        'mathematical': 'mathematical'\n      }\n    },\n    'baseline-shift': {\n      inherit: true,\n      initial: 'baseline',\n      values: {\n        'baseline': 'baseline',\n        'sub': 'sub',\n        'super': 'super'\n      }\n    },\n    'word-spacing': {\n      inherit: true,\n      initial: 0,\n      values: {\n        normal: 0\n      }\n    },\n    'letter-spacing': {\n      inherit: true,\n      initial: 0,\n      values: {\n        normal: 0\n      }\n    },\n    'text-decoration': {\n      inherit: false,\n      initial: 'none',\n      values: {\n        'none': 'none',\n        'underline': 'underline',\n        'overline': 'overline',\n        'line-through': 'line-through'\n      }\n    },\n    'xml:space': {\n      inherit: true,\n      initial: 'default',\n      css: 'white-space',\n      values: {\n        'preserve': 'preserve',\n        'default': 'default',\n        'pre': 'preserve',\n        'pre-line': 'preserve',\n        'pre-wrap': 'preserve',\n        'nowrap': 'default'\n      }\n    },\n    'marker-start': {\n      inherit: true,\n      initial: 'none'\n    },\n    'marker-mid': {\n      inherit: true,\n      initial: 'none'\n    },\n    'marker-end': {\n      inherit: true,\n      initial: 'none'\n    },\n    'opacity': {\n      inherit: false,\n      initial: 1\n    },\n    'transform': {\n      inherit: false,\n      initial: [1, 0, 0, 1, 0, 0]\n    },\n    'display': {\n      inherit: false,\n      initial: 'inline',\n      values: {\n        'none': 'none',\n        'inline': 'inline',\n        'block': 'inline'\n      }\n    },\n    'clip-path': {\n      inherit: false,\n      initial: 'none'\n    },\n    'mask': {\n      inherit: false,\n      initial: 'none'\n    },\n    'overflow': {\n      inherit: false,\n      initial: 'hidden',\n      values: {\n        'hidden': 'hidden',\n        'scroll': 'hidden',\n        'visible': 'visible'\n      }\n    }\n  };\n  function docBeginGroup(bbox) {\n    var group = new function PDFGroup() {}();\n    group.name = 'G' + (doc._groupCount = (doc._groupCount || 0) + 1);\n    group.resources = doc.ref();\n    group.xobj = doc.ref({\n      Type: 'XObject',\n      Subtype: 'Form',\n      FormType: 1,\n      BBox: bbox,\n      Group: {\n        S: 'Transparency',\n        CS: 'DeviceRGB',\n        I: true,\n        K: false\n      },\n      Resources: group.resources\n    });\n    group.xobj.write('');\n    group.savedMatrix = doc._ctm;\n    group.savedPage = doc.page;\n    groupStack.push(group);\n    doc._ctm = [1, 0, 0, 1, 0, 0];\n    doc.page = {\n      width: doc.page.width,\n      height: doc.page.height,\n      write: function write(data) {\n        group.xobj.write(data);\n      },\n      fonts: {},\n      xobjects: {},\n      ext_gstates: {},\n      patterns: {}\n    };\n    return group;\n  }\n  function docEndGroup(group) {\n    if (group !== groupStack.pop()) {\n      throw 'Group not matching';\n    }\n    if (Object.keys(doc.page.fonts).length) {\n      group.resources.data.Font = doc.page.fonts;\n    }\n    if (Object.keys(doc.page.xobjects).length) {\n      group.resources.data.XObject = doc.page.xobjects;\n    }\n    if (Object.keys(doc.page.ext_gstates).length) {\n      group.resources.data.ExtGState = doc.page.ext_gstates;\n    }\n    if (Object.keys(doc.page.patterns).length) {\n      group.resources.data.Pattern = doc.page.patterns;\n    }\n    group.resources.end();\n    group.xobj.end();\n    doc._ctm = group.savedMatrix;\n    doc.page = group.savedPage;\n  }\n  function docInsertGroup(group) {\n    doc.page.xobjects[group.name] = group.xobj;\n    doc.addContent('/' + group.name + ' Do');\n  }\n  function docApplyMask(group, clip) {\n    var name = 'M' + (doc._maskCount = (doc._maskCount || 0) + 1);\n    var gstate = doc.ref({\n      Type: 'ExtGState',\n      CA: 1,\n      ca: 1,\n      BM: 'Normal',\n      SMask: {\n        S: 'Luminosity',\n        G: group.xobj,\n        BC: clip ? [0, 0, 0] : [1, 1, 1]\n      }\n    });\n    gstate.end();\n    doc.page.ext_gstates[name] = gstate;\n    doc.addContent('/' + name + ' gs');\n  }\n  function docCreatePattern(group, dx, dy, matrix) {\n    var pattern = new function PDFPattern() {}();\n    pattern.group = group;\n    pattern.dx = dx;\n    pattern.dy = dy;\n    pattern.matrix = matrix || [1, 0, 0, 1, 0, 0];\n    return pattern;\n  }\n  function docUsePattern(pattern, stroke) {\n    var name = 'P' + (doc._patternCount = (doc._patternCount || 0) + 1);\n    var ref = doc.ref({\n      Type: 'Pattern',\n      PatternType: 1,\n      PaintType: 1,\n      TilingType: 2,\n      BBox: [0, 0, pattern.dx, pattern.dy],\n      XStep: pattern.dx,\n      YStep: pattern.dy,\n      Matrix: multiplyMatrix(doc._ctm, pattern.matrix),\n      Resources: {\n        ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n        XObject: function () {\n          var temp = {};\n          temp[pattern.group.name] = pattern.group.xobj;\n          return temp;\n        }()\n      }\n    });\n    ref.write('/' + pattern.group.name + ' Do');\n    ref.end();\n    doc.page.patterns[name] = ref;\n    if (stroke) {\n      doc.addContent('/Pattern CS');\n      doc.addContent('/' + name + ' SCN');\n    } else {\n      doc.addContent('/Pattern cs');\n      doc.addContent('/' + name + ' scn');\n    }\n  }\n  function docBeginText(font, size) {\n    if (!doc.page.fonts[font.id]) {\n      doc.page.fonts[font.id] = font.ref();\n    }\n    doc.addContent('BT').addContent('/' + font.id + ' ' + size + ' Tf');\n  }\n  function docSetTextMatrix(a, b, c, d, e, f) {\n    doc.addContent(validateNumber(a) + ' ' + validateNumber(b) + ' ' + validateNumber(-c) + ' ' + validateNumber(-d) + ' ' + validateNumber(e) + ' ' + validateNumber(f) + ' Tm');\n  }\n  function docSetTextMode(fill, stroke) {\n    var mode = fill && stroke ? 2 : stroke ? 1 : fill ? 0 : 3;\n    doc.addContent(mode + ' Tr');\n  }\n  function docWriteGlyph(glyph) {\n    doc.addContent('<' + glyph + '> Tj');\n  }\n  function docEndText() {\n    doc.addContent('ET');\n  }\n  function docFillColor(color) {\n    if (color[0].constructor.name === 'PDFPattern') {\n      doc.fillOpacity(color[1]);\n      docUsePattern(color[0], false);\n    } else {\n      doc.fillColor(color[0], color[1]);\n    }\n  }\n  function docStrokeColor(color) {\n    if (color[0].constructor.name === 'PDFPattern') {\n      doc.strokeOpacity(color[1]);\n      docUsePattern(color[0], true);\n    } else {\n      doc.strokeColor(color[0], color[1]);\n    }\n  }\n  function docInsertLink(x, y, w, h, url) {\n    var ref = doc.ref({\n      Type: 'Annot',\n      Subtype: 'Link',\n      Rect: [x, y, w, h],\n      Border: [0, 0, 0],\n      A: {\n        S: 'URI',\n        URI: new String(url)\n      }\n    });\n    ref.end();\n    links.push(ref);\n  }\n  function parseXml(xml) {\n    var SvgNode = function SvgNode(tag, type, value, error) {\n      this.error = error;\n      this.nodeName = tag;\n      this.nodeValue = value;\n      this.nodeType = type;\n      this.attributes = Object.create(null);\n      this.childNodes = [];\n      this.parentNode = null;\n      this.id = '';\n      this.textContent = '';\n      this.classList = [];\n    };\n    SvgNode.prototype.getAttribute = function (attr) {\n      return this.attributes[attr] != null ? this.attributes[attr] : null;\n    };\n    SvgNode.prototype.getElementById = function (id) {\n      var result = null;\n      (function recursive(node) {\n        if (result) {\n          return;\n        }\n        if (node.nodeType === 1) {\n          if (node.id === id) {\n            result = node;\n          }\n          for (var i = 0; i < node.childNodes.length; i++) {\n            recursive(node.childNodes[i]);\n          }\n        }\n      })(this);\n      return result;\n    };\n    SvgNode.prototype.getElementsByTagName = function (tag) {\n      var result = [];\n      (function recursive(node) {\n        if (node.nodeType === 1) {\n          if (node.nodeName === tag) {\n            result.push(node);\n          }\n          for (var i = 0; i < node.childNodes.length; i++) {\n            recursive(node.childNodes[i]);\n          }\n        }\n      })(this);\n      return result;\n    };\n    var parser = new StringParser(xml.trim()),\n      result,\n      child,\n      error = false;\n    var recursive = function recursive() {\n      var temp, child;\n      if (temp = parser.match(/^<([\\w:.-]+)\\s*/, true)) {\n        // Opening tag\n        var node = new SvgNode(temp[1], 1, null, error);\n        while (temp = parser.match(/^([\\w:.-]+)(?:\\s*=\\s*\"([^\"]*)\"|\\s*=\\s*'([^']*)')?\\s*/, true)) {\n          // Attribute\n          var attr = temp[1],\n            value = decodeEntities(temp[2] || temp[3] || '');\n          if (!node.attributes[attr]) {\n            node.attributes[attr] = value;\n            if (attr === 'id') {\n              node.id = value;\n            }\n            if (attr === 'class') {\n              node.classList = value.split(' ');\n            }\n          } else {\n            warningCallback('parseXml: duplicate attribute \"' + attr + '\"');\n            error = true;\n          }\n        }\n        if (parser.match(/^>/)) {\n          // End of opening tag\n          while (child = recursive()) {\n            node.childNodes.push(child);\n            child.parentNode = node;\n            node.textContent += child.nodeType === 3 || child.nodeType === 4 ? child.nodeValue : child.textContent;\n          }\n          if (temp = parser.match(/^<\\/([\\w:.-]+)\\s*>/, true)) {\n            // Closing tag\n            if (temp[1] === node.nodeName) {\n              return node;\n            } else {\n              warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & closing \"' + temp[1] + '\"');\n              error = true;\n              return node;\n            }\n          } else {\n            warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & not closing');\n            error = true;\n            return node;\n          }\n        } else if (parser.match(/^\\/>/)) {\n          // Self-closing tag\n          return node;\n        } else {\n          warningCallback('parseXml: tag could not be parsed \"' + node.nodeName + '\"');\n          error = true;\n        }\n      } else if (temp = parser.match(/^<!--[\\s\\S]*?-->/)) {\n        // Comment\n        return new SvgNode(null, 8, temp, error);\n      } else if (temp = parser.match(/^<\\?[\\s\\S]*?\\?>/)) {\n        // Processing instructions\n        return new SvgNode(null, 7, temp, error);\n      } else if (temp = parser.match(/^<!DOCTYPE\\s*([\\s\\S]*?)>/)) {\n        // Doctype\n        return new SvgNode(null, 10, temp, error);\n      } else if (temp = parser.match(/^<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/, true)) {\n        // Cdata node\n        return new SvgNode('#cdata-section', 4, temp[1], error);\n      } else if (temp = parser.match(/^([^<]+)/, true)) {\n        // Text node\n        return new SvgNode('#text', 3, decodeEntities(temp[1]), error);\n      }\n    };\n    while (child = recursive()) {\n      if (child.nodeType === 1 && !result) {\n        result = child;\n      } else if (child.nodeType === 1 || child.nodeType === 3 && child.nodeValue.trim() !== '') {\n        warningCallback('parseXml: data after document end has been discarded');\n      }\n    }\n    if (parser.matchAll()) {\n      warningCallback('parseXml: parsing error');\n    }\n    return result;\n  }\n  ;\n  function decodeEntities(str) {\n    return str.replace(/&(?:#([0-9]+)|#[xX]([0-9A-Fa-f]+)|([0-9A-Za-z]+));/g, function (mt, m0, m1, m2) {\n      if (m0) {\n        return String.fromCharCode(parseInt(m0, 10));\n      } else if (m1) {\n        return String.fromCharCode(parseInt(m1, 16));\n      } else if (m2 && Entities[m2]) {\n        return String.fromCharCode(Entities[m2]);\n      } else {\n        return mt;\n      }\n    });\n  }\n  function parseColor(raw) {\n    var temp, result;\n    raw = (raw || '').trim();\n    if (temp = NamedColors[raw]) {\n      result = [temp.slice(), 1];\n    } else if (temp = raw.match(/^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)$/i)) {\n      temp[1] = parseInt(temp[1]);\n      temp[2] = parseInt(temp[2]);\n      temp[3] = parseInt(temp[3]);\n      temp[4] = parseFloat(temp[4]);\n      if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256 && temp[4] <= 1) {\n        result = [temp.slice(1, 4), temp[4]];\n      }\n    } else if (temp = raw.match(/^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)$/i)) {\n      temp[1] = parseInt(temp[1]);\n      temp[2] = parseInt(temp[2]);\n      temp[3] = parseInt(temp[3]);\n      if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\n        result = [temp.slice(1, 4), 1];\n      }\n    } else if (temp = raw.match(/^rgb\\(\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*\\)$/i)) {\n      temp[1] = 2.55 * parseFloat(temp[1]);\n      temp[2] = 2.55 * parseFloat(temp[2]);\n      temp[3] = 2.55 * parseFloat(temp[3]);\n      if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\n        result = [temp.slice(1, 4), 1];\n      }\n    } else if (temp = raw.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i)) {\n      result = [[parseInt(temp[1], 16), parseInt(temp[2], 16), parseInt(temp[3], 16)], 1];\n    } else if (temp = raw.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i)) {\n      result = [[0x11 * parseInt(temp[1], 16), 0x11 * parseInt(temp[2], 16), 0x11 * parseInt(temp[3], 16)], 1];\n    }\n    return colorCallback ? colorCallback(result, raw) : result;\n  }\n  function opacityToColor(color, opacity, isMask) {\n    var newColor = color[0].slice(),\n      newOpacity = color[1] * opacity;\n    if (isMask) {\n      for (var i = 0; i < color.length; i++) {\n        newColor[i] *= newOpacity;\n      }\n      return [newColor, 1];\n    } else {\n      return [newColor, newOpacity];\n    }\n  }\n  function multiplyMatrix() {\n    function multiply(a, b) {\n      return [a[0] * b[0] + a[2] * b[1], a[1] * b[0] + a[3] * b[1], a[0] * b[2] + a[2] * b[3], a[1] * b[2] + a[3] * b[3], a[0] * b[4] + a[2] * b[5] + a[4], a[1] * b[4] + a[3] * b[5] + a[5]];\n    }\n    var result = arguments[0];\n    for (var i = 1; i < arguments.length; i++) {\n      result = multiply(result, arguments[i]);\n    }\n    return result;\n  }\n  function transformPoint(p, m) {\n    return [m[0] * p[0] + m[2] * p[1] + m[4], m[1] * p[0] + m[3] * p[1] + m[5]];\n  }\n  function getGlobalMatrix() {\n    var ctm = doc._ctm;\n    for (var i = groupStack.length - 1; i >= 0; i--) {\n      ctm = multiplyMatrix(groupStack[i].savedMatrix, ctm);\n    }\n    return ctm;\n  }\n  function getPageBBox() {\n    return new SvgShape().M(0, 0).L(doc.page.width, 0).L(doc.page.width, doc.page.height).L(0, doc.page.height).transform(inverseMatrix(getGlobalMatrix())).getBoundingBox();\n  }\n  function inverseMatrix(m) {\n    var dt = m[0] * m[3] - m[1] * m[2];\n    return [m[3] / dt, -m[1] / dt, -m[2] / dt, m[0] / dt, (m[2] * m[5] - m[3] * m[4]) / dt, (m[1] * m[4] - m[0] * m[5]) / dt];\n  }\n  function validateMatrix(m) {\n    var m0 = validateNumber(m[0]),\n      m1 = validateNumber(m[1]),\n      m2 = validateNumber(m[2]),\n      m3 = validateNumber(m[3]),\n      m4 = validateNumber(m[4]),\n      m5 = validateNumber(m[5]);\n    if (isNotEqual(m0 * m3 - m1 * m2, 0)) {\n      return [m0, m1, m2, m3, m4, m5];\n    }\n  }\n  function solveEquation(curve) {\n    var a = curve[2] || 0,\n      b = curve[1] || 0,\n      c = curve[0] || 0;\n    if (isEqual(a, 0) && isEqual(b, 0)) {\n      return [];\n    } else if (isEqual(a, 0)) {\n      return [-c / b];\n    } else {\n      var d = b * b - 4 * a * c;\n      if (isNotEqual(d, 0) && d > 0) {\n        return [(-b + Math.sqrt(d)) / (2 * a), (-b - Math.sqrt(d)) / (2 * a)];\n      } else if (isEqual(d, 0)) {\n        return [-b / (2 * a)];\n      } else {\n        return [];\n      }\n    }\n  }\n  function getCurveValue(t, curve) {\n    return (curve[0] || 0) + (curve[1] || 0) * t + (curve[2] || 0) * t * t + (curve[3] || 0) * t * t * t;\n  }\n  function isEqual(number, ref) {\n    return Math.abs(number - ref) < 1e-10;\n  }\n  function isNotEqual(number, ref) {\n    return Math.abs(number - ref) >= 1e-10;\n  }\n  function validateNumber(n) {\n    return n > -1e21 && n < 1e21 ? Math.round(n * 1e6) / 1e6 : 0;\n  }\n  function isArrayLike(v) {\n    return typeof v === 'object' && v !== null && typeof v.length === 'number';\n  }\n  function parseTranform(v) {\n    var parser = new StringParser((v || '').trim()),\n      result = [1, 0, 0, 1, 0, 0],\n      temp;\n    while (temp = parser.match(/^([A-Za-z]+)\\s*[(]([^(]+)[)]/, true)) {\n      var func = temp[1],\n        nums = [],\n        parser2 = new StringParser(temp[2].trim()),\n        temp2 = void 0;\n      while (temp2 = parser2.matchNumber()) {\n        nums.push(Number(temp2));\n        parser2.matchSeparator();\n      }\n      if (func === 'matrix' && nums.length === 6) {\n        result = multiplyMatrix(result, [nums[0], nums[1], nums[2], nums[3], nums[4], nums[5]]);\n      } else if (func === 'translate' && nums.length === 2) {\n        result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], nums[1]]);\n      } else if (func === 'translate' && nums.length === 1) {\n        result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], 0]);\n      } else if (func === 'scale' && nums.length === 2) {\n        result = multiplyMatrix(result, [nums[0], 0, 0, nums[1], 0, 0]);\n      } else if (func === 'scale' && nums.length === 1) {\n        result = multiplyMatrix(result, [nums[0], 0, 0, nums[0], 0, 0]);\n      } else if (func === 'rotate' && nums.length === 3) {\n        var a = nums[0] * Math.PI / 180;\n        result = multiplyMatrix(result, [1, 0, 0, 1, nums[1], nums[2]], [Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0], [1, 0, 0, 1, -nums[1], -nums[2]]);\n      } else if (func === 'rotate' && nums.length === 1) {\n        var _a = nums[0] * Math.PI / 180;\n        result = multiplyMatrix(result, [Math.cos(_a), Math.sin(_a), -Math.sin(_a), Math.cos(_a), 0, 0]);\n      } else if (func === 'skewX' && nums.length === 1) {\n        var _a2 = nums[0] * Math.PI / 180;\n        result = multiplyMatrix(result, [1, 0, Math.tan(_a2), 1, 0, 0]);\n      } else if (func === 'skewY' && nums.length === 1) {\n        var _a3 = nums[0] * Math.PI / 180;\n        result = multiplyMatrix(result, [1, Math.tan(_a3), 0, 1, 0, 0]);\n      } else {\n        return;\n      }\n      parser.matchSeparator();\n    }\n    if (parser.matchAll()) {\n      return;\n    }\n    return result;\n  }\n  function parseAspectRatio(aspectRatio, availWidth, availHeight, elemWidth, elemHeight, initAlign) {\n    var temp = (aspectRatio || '').trim().match(/^(none)$|^x(Min|Mid|Max)Y(Min|Mid|Max)(?:\\s+(meet|slice))?$/) || [],\n      ratioType = temp[1] || temp[4] || 'meet',\n      xAlign = temp[2] || 'Mid',\n      yAlign = temp[3] || 'Mid',\n      scaleX = availWidth / elemWidth,\n      scaleY = availHeight / elemHeight,\n      dx = {\n        'Min': 0,\n        'Mid': 0.5,\n        'Max': 1\n      }[xAlign] - (initAlign || 0),\n      dy = {\n        'Min': 0,\n        'Mid': 0.5,\n        'Max': 1\n      }[yAlign] - (initAlign || 0);\n    if (ratioType === 'slice') {\n      scaleY = scaleX = Math.max(scaleX, scaleY);\n    } else if (ratioType === 'meet') {\n      scaleY = scaleX = Math.min(scaleX, scaleY);\n    }\n    return [scaleX, 0, 0, scaleY, dx * (availWidth - elemWidth * scaleX), dy * (availHeight - elemHeight * scaleY)];\n  }\n  function parseStyleAttr(v) {\n    var result = Object.create(null);\n    v = (v || '').trim().split(/;/);\n    for (var i = 0; i < v.length; i++) {\n      var key = (v[i].split(':')[0] || '').trim(),\n        value = (v[i].split(':')[1] || '').trim();\n      if (key) {\n        result[key] = value;\n      }\n    }\n    if (result['marker']) {\n      if (!result['marker-start']) {\n        result['marker-start'] = result['marker'];\n      }\n      if (!result['marker-mid']) {\n        result['marker-mid'] = result['marker'];\n      }\n      if (!result['marker-end']) {\n        result['marker-end'] = result['marker'];\n      }\n    }\n    if (result['font']) {\n      var fontFamily = null,\n        fontSize = null,\n        fontStyle = \"normal\",\n        fontWeight = \"normal\",\n        fontVariant = \"normal\";\n      var parts = result['font'].split(/\\s+/);\n      for (var _i = 0; _i < parts.length; _i++) {\n        switch (parts[_i]) {\n          case \"normal\":\n            break;\n          case \"italic\":\n          case \"oblique\":\n            fontStyle = parts[_i];\n            break;\n          case \"small-caps\":\n            fontVariant = parts[_i];\n            break;\n          case \"bold\":\n          case \"bolder\":\n          case \"lighter\":\n          case \"100\":\n          case \"200\":\n          case \"300\":\n          case \"400\":\n          case \"500\":\n          case \"600\":\n          case \"700\":\n          case \"800\":\n          case \"900\":\n            fontWeight = parts[_i];\n            break;\n          default:\n            if (!fontSize) {\n              fontSize = parts[_i].split('/')[0];\n            } else {\n              if (!fontFamily) {\n                fontFamily = parts[_i];\n              } else {\n                fontFamily += ' ' + parts[_i];\n              }\n            }\n            break;\n        }\n      }\n      if (!result['font-style']) {\n        result['font-style'] = fontStyle;\n      }\n      if (!result['font-variant']) {\n        result['font-variant'] = fontVariant;\n      }\n      if (!result['font-weight']) {\n        result['font-weight'] = fontWeight;\n      }\n      if (!result['font-size']) {\n        result['font-size'] = fontSize;\n      }\n      if (!result['font-family']) {\n        result['font-family'] = fontFamily;\n      }\n    }\n    return result;\n  }\n  function parseSelector(v) {\n    var parts = v.split(/(?=[.#])/g),\n      ids = [],\n      classes = [],\n      tags = [],\n      temp;\n    for (var i = 0; i < parts.length; i++) {\n      if (temp = parts[i].match(/^[#]([_A-Za-z0-9-]+)$/)) {\n        ids.push(temp[1]);\n      } else if (temp = parts[i].match(/^[.]([_A-Za-z0-9-]+)$/)) {\n        classes.push(temp[1]);\n      } else if (temp = parts[i].match(/^([_A-Za-z0-9-]+)$/)) {\n        tags.push(temp[1]);\n      } else if (parts[i] !== '*') {\n        return;\n      }\n    }\n    return {\n      tags: tags,\n      ids: ids,\n      classes: classes,\n      specificity: ids.length * 10000 + classes.length * 100 + tags.length\n    };\n  }\n  function parseStyleSheet(v) {\n    var parser = new StringParser(v.trim()),\n      rules = [],\n      rule;\n    while (rule = parser.match(/^\\s*([^\\{\\}]*?)\\s*\\{([^\\{\\}]*?)\\}/, true)) {\n      var selectors = rule[1].split(/\\s*,\\s*/g),\n        css = parseStyleAttr(rule[2]);\n      for (var i = 0; i < selectors.length; i++) {\n        var selector = parseSelector(selectors[i]);\n        if (selector) {\n          rules.push({\n            selector: selector,\n            css: css\n          });\n        }\n      }\n    }\n    return rules;\n  }\n  function matchesSelector(elem, selector) {\n    if (elem.nodeType !== 1) {\n      return false;\n    }\n    for (var i = 0; i < selector.tags.length; i++) {\n      if (selector.tags[i] !== elem.nodeName) {\n        return false;\n      }\n    }\n    for (var _i2 = 0; _i2 < selector.ids.length; _i2++) {\n      if (selector.ids[_i2] !== elem.id) {\n        return false;\n      }\n    }\n    for (var _i3 = 0; _i3 < selector.classes.length; _i3++) {\n      if (elem.classList.indexOf(selector.classes[_i3]) === -1) {\n        return false;\n      }\n    }\n    return true;\n  }\n  function getStyle(elem) {\n    var result = Object.create(null);\n    var specificities = Object.create(null);\n    for (var i = 0; i < styleRules.length; i++) {\n      var rule = styleRules[i];\n      if (matchesSelector(elem, rule.selector)) {\n        for (var key in rule.css) {\n          if (!(specificities[key] > rule.selector.specificity)) {\n            result[key] = rule.css[key];\n            specificities[key] = rule.selector.specificity;\n          }\n        }\n      }\n    }\n    return result;\n  }\n  function combineArrays(array1, array2) {\n    return array1.concat(array2.slice(array1.length));\n  }\n  function getAscent(font, size) {\n    return Math.max(font.ascender, (font.bbox[3] || font.bbox.maxY) * (font.scale || 1)) * size / 1000;\n  }\n  function getDescent(font, size) {\n    return Math.min(font.descender, (font.bbox[1] || font.bbox.minY) * (font.scale || 1)) * size / 1000;\n  }\n  function getXHeight(font, size) {\n    return (font.xHeight || 0.5 * (font.ascender - font.descender)) * size / 1000;\n  }\n  function getBaseline(font, size, baseline, shift) {\n    var dy1, dy2;\n    switch (baseline) {\n      case 'middle':\n        dy1 = 0.5 * getXHeight(font, size);\n        break;\n      case 'central':\n        dy1 = 0.5 * (getDescent(font, size) + getAscent(font, size));\n        break;\n      case 'after-edge':\n      case 'text-after-edge':\n        dy1 = getDescent(font, size);\n        break;\n      case 'alphabetic':\n      case 'auto':\n      case 'baseline':\n        dy1 = 0;\n        break;\n      case 'mathematical':\n        dy1 = 0.5 * getAscent(font, size);\n        break;\n      case 'hanging':\n        dy1 = 0.8 * getAscent(font, size);\n        break;\n      case 'before-edge':\n      case 'text-before-edge':\n        dy1 = getAscent(font, size);\n        break;\n      default:\n        dy1 = 0;\n        break;\n    }\n    switch (shift) {\n      case 'baseline':\n        dy2 = 0;\n        break;\n      case 'super':\n        dy2 = 0.6 * size;\n        break;\n      case 'sub':\n        dy2 = -0.6 * size;\n        break;\n      default:\n        dy2 = shift;\n        break;\n    }\n    return dy1 - dy2;\n  }\n  function getTextPos(font, size, text) {\n    var encoded = font.encode('' + text),\n      hex = encoded[0],\n      pos = encoded[1],\n      data = [];\n    for (var i = 0; i < hex.length; i++) {\n      var unicode = font.unicode ? font.unicode[parseInt(hex[i], 16)] : [text.charCodeAt(i)];\n      data.push({\n        glyph: hex[i],\n        unicode: unicode,\n        width: pos[i].advanceWidth * size / 1000,\n        xOffset: pos[i].xOffset * size / 1000,\n        yOffset: pos[i].yOffset * size / 1000,\n        xAdvance: pos[i].xAdvance * size / 1000,\n        yAdvance: pos[i].yAdvance * size / 1000\n      });\n    }\n    return data;\n  }\n  function createSVGElement(obj, inherits) {\n    switch (obj.nodeName) {\n      case 'use':\n        return new SvgElemUse(obj, inherits);\n      case 'symbol':\n        return new SvgElemSymbol(obj, inherits);\n      case 'g':\n        return new SvgElemGroup(obj, inherits);\n      case 'a':\n        return new SvgElemLink(obj, inherits);\n      case 'svg':\n        return new SvgElemSvg(obj, inherits);\n      case 'image':\n        return new SVGElemImage(obj, inherits);\n      case 'rect':\n        return new SvgElemRect(obj, inherits);\n      case 'circle':\n        return new SvgElemCircle(obj, inherits);\n      case 'ellipse':\n        return new SvgElemEllipse(obj, inherits);\n      case 'line':\n        return new SvgElemLine(obj, inherits);\n      case 'polyline':\n        return new SvgElemPolyline(obj, inherits);\n      case 'polygon':\n        return new SvgElemPolygon(obj, inherits);\n      case 'path':\n        return new SvgElemPath(obj, inherits);\n      case 'text':\n        return new SvgElemText(obj, inherits);\n      case 'tspan':\n        return new SvgElemTspan(obj, inherits);\n      case 'textPath':\n        return new SvgElemTextPath(obj, inherits);\n      case '#text':\n      case '#cdata-section':\n        return new SvgElemTextNode(obj, inherits);\n      default:\n        return new SvgElem(obj, inherits);\n    }\n  }\n  var StringParser = function StringParser(str) {\n    this.match = function (exp, all) {\n      var temp = str.match(exp);\n      if (!temp || temp.index !== 0) {\n        return;\n      }\n      str = str.substring(temp[0].length);\n      return all ? temp : temp[0];\n    };\n    this.matchSeparator = function () {\n      return this.match(/^(?:\\s*,\\s*|\\s*|)/);\n    };\n    this.matchSpace = function () {\n      return this.match(/^(?:\\s*)/);\n    };\n    this.matchLengthUnit = function () {\n      return this.match(/^(?:px|pt|cm|mm|in|pc|em|ex|%|)/);\n    };\n    this.matchNumber = function () {\n      return this.match(/^(?:[-+]?(?:[0-9]+[.][0-9]+|[0-9]+[.]|[.][0-9]+|[0-9]+)(?:[eE][-+]?[0-9]+)?)/);\n    };\n    this.matchAll = function () {\n      return this.match(/^[\\s\\S]+/);\n    };\n  };\n  var BezierSegment = function BezierSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n    var divisions = 6 * precision;\n    var equationX = [p1x, -3 * p1x + 3 * c1x, 3 * p1x - 6 * c1x + 3 * c2x, -p1x + 3 * c1x - 3 * c2x + p2x];\n    var equationY = [p1y, -3 * p1y + 3 * c1y, 3 * p1y - 6 * c1y + 3 * c2y, -p1y + 3 * c1y - 3 * c2y + p2y];\n    var derivativeX = [-3 * p1x + 3 * c1x, 6 * p1x - 12 * c1x + 6 * c2x, -3 * p1x + 9 * c1x - 9 * c2x + 3 * p2x];\n    var derivativeY = [-3 * p1y + 3 * c1y, 6 * p1y - 12 * c1y + 6 * c2y, -3 * p1y + 9 * c1y - 9 * c2y + 3 * p2y];\n    var lengthMap = [0];\n    for (var i = 1; i <= divisions; i++) {\n      var t = (i - 0.5) / divisions;\n      var dx = getCurveValue(t, derivativeX) / divisions,\n        dy = getCurveValue(t, derivativeY) / divisions,\n        l = Math.sqrt(dx * dx + dy * dy);\n      lengthMap[i] = lengthMap[i - 1] + l;\n    }\n    this.totalLength = lengthMap[divisions];\n    this.startPoint = [p1x, p1y, isEqual(p1x, c1x) && isEqual(p1y, c1y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(c1y - p1y, c1x - p1x)];\n    this.endPoint = [p2x, p2y, isEqual(c2x, p2x) && isEqual(c2y, p2y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(p2y - c2y, p2x - c2x)];\n    this.getBoundingBox = function () {\n      var temp;\n      var minX = getCurveValue(0, equationX),\n        minY = getCurveValue(0, equationY),\n        maxX = getCurveValue(1, equationX),\n        maxY = getCurveValue(1, equationY);\n      if (minX > maxX) {\n        temp = maxX;\n        maxX = minX;\n        minX = temp;\n      }\n      if (minY > maxY) {\n        temp = maxY;\n        maxY = minY;\n        minY = temp;\n      }\n      var rootsX = solveEquation(derivativeX);\n      for (var _i4 = 0; _i4 < rootsX.length; _i4++) {\n        if (rootsX[_i4] >= 0 && rootsX[_i4] <= 1) {\n          var _x = getCurveValue(rootsX[_i4], equationX);\n          if (_x < minX) {\n            minX = _x;\n          }\n          if (_x > maxX) {\n            maxX = _x;\n          }\n        }\n      }\n      var rootsY = solveEquation(derivativeY);\n      for (var _i5 = 0; _i5 < rootsY.length; _i5++) {\n        if (rootsY[_i5] >= 0 && rootsY[_i5] <= 1) {\n          var _y = getCurveValue(rootsY[_i5], equationY);\n          if (_y < minY) {\n            minY = _y;\n          }\n          if (_y > maxY) {\n            maxY = _y;\n          }\n        }\n      }\n      return [minX, minY, maxX, maxY];\n    };\n    this.getPointAtLength = function (l) {\n      if (isEqual(l, 0)) {\n        return this.startPoint;\n      }\n      if (isEqual(l, this.totalLength)) {\n        return this.endPoint;\n      }\n      if (l < 0 || l > this.totalLength) {\n        return;\n      }\n      for (var _i6 = 1; _i6 <= divisions; _i6++) {\n        var l1 = lengthMap[_i6 - 1],\n          l2 = lengthMap[_i6];\n        if (l1 <= l && l <= l2) {\n          var _t = (_i6 - (l2 - l) / (l2 - l1)) / divisions,\n            _x2 = getCurveValue(_t, equationX),\n            _y2 = getCurveValue(_t, equationY),\n            _dx = getCurveValue(_t, derivativeX),\n            _dy = getCurveValue(_t, derivativeY);\n          return [_x2, _y2, Math.atan2(_dy, _dx)];\n        }\n      }\n    };\n  };\n  var LineSegment = function LineSegment(p1x, p1y, p2x, p2y) {\n    this.totalLength = Math.sqrt((p2x - p1x) * (p2x - p1x) + (p2y - p1y) * (p2y - p1y));\n    this.startPoint = [p1x, p1y, Math.atan2(p2y - p1y, p2x - p1x)];\n    this.endPoint = [p2x, p2y, Math.atan2(p2y - p1y, p2x - p1x)];\n    this.getBoundingBox = function () {\n      return [Math.min(this.startPoint[0], this.endPoint[0]), Math.min(this.startPoint[1], this.endPoint[1]), Math.max(this.startPoint[0], this.endPoint[0]), Math.max(this.startPoint[1], this.endPoint[1])];\n    };\n    this.getPointAtLength = function (l) {\n      if (l >= 0 && l <= this.totalLength) {\n        var r = l / this.totalLength || 0,\n          _x3 = this.startPoint[0] + r * (this.endPoint[0] - this.startPoint[0]),\n          _y3 = this.startPoint[1] + r * (this.endPoint[1] - this.startPoint[1]);\n        return [_x3, _y3, this.startPoint[2]];\n      }\n    };\n  };\n  var SvgShape = function SvgShape() {\n    this.pathCommands = [];\n    this.pathSegments = [];\n    this.startPoint = null;\n    this.endPoint = null;\n    this.totalLength = 0;\n    var startX = 0,\n      startY = 0,\n      currX = 0,\n      currY = 0,\n      lastCom,\n      lastCtrlX,\n      lastCtrlY;\n    this.move = function (x, y) {\n      startX = currX = x;\n      startY = currY = y;\n      return null;\n    };\n    this.line = function (x, y) {\n      var segment = new LineSegment(currX, currY, x, y);\n      currX = x;\n      currY = y;\n      return segment;\n    };\n    this.curve = function (c1x, c1y, c2x, c2y, x, y) {\n      var segment = new BezierSegment(currX, currY, c1x, c1y, c2x, c2y, x, y);\n      currX = x;\n      currY = y;\n      return segment;\n    };\n    this.close = function () {\n      var segment = new LineSegment(currX, currY, startX, startY);\n      currX = startX;\n      currY = startY;\n      return segment;\n    };\n    this.addCommand = function (data) {\n      this.pathCommands.push(data);\n      var segment = this[data[0]].apply(this, data.slice(3));\n      if (segment) {\n        segment.hasStart = data[1];\n        segment.hasEnd = data[2];\n        this.startPoint = this.startPoint || segment.startPoint;\n        this.endPoint = segment.endPoint;\n        this.pathSegments.push(segment);\n        this.totalLength += segment.totalLength;\n      }\n    };\n    this.M = function (x, y) {\n      this.addCommand(['move', true, true, x, y]);\n      lastCom = 'M';\n      return this;\n    };\n    this.m = function (x, y) {\n      return this.M(currX + x, currY + y);\n    };\n    this.Z = this.z = function () {\n      this.addCommand(['close', true, true]);\n      lastCom = 'Z';\n      return this;\n    };\n    this.L = function (x, y) {\n      this.addCommand(['line', true, true, x, y]);\n      lastCom = 'L';\n      return this;\n    };\n    this.l = function (x, y) {\n      return this.L(currX + x, currY + y);\n    };\n    this.H = function (x) {\n      return this.L(x, currY);\n    };\n    this.h = function (x) {\n      return this.L(currX + x, currY);\n    };\n    this.V = function (y) {\n      return this.L(currX, y);\n    };\n    this.v = function (y) {\n      return this.L(currX, currY + y);\n    };\n    this.C = function (c1x, c1y, c2x, c2y, x, y) {\n      this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\n      lastCom = 'C';\n      lastCtrlX = c2x;\n      lastCtrlY = c2y;\n      return this;\n    };\n    this.c = function (c1x, c1y, c2x, c2y, x, y) {\n      return this.C(currX + c1x, currY + c1y, currX + c2x, currY + c2y, currX + x, currY + y);\n    };\n    this.S = function (c1x, c1y, x, y) {\n      return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), c1x, c1y, x, y);\n    };\n    this.s = function (c1x, c1y, x, y) {\n      return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), currX + c1x, currY + c1y, currX + x, currY + y);\n    };\n    this.Q = function (cx, cy, x, y) {\n      var c1x = currX + 2 / 3 * (cx - currX),\n        c1y = currY + 2 / 3 * (cy - currY),\n        c2x = x + 2 / 3 * (cx - x),\n        c2y = y + 2 / 3 * (cy - y);\n      this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\n      lastCom = 'Q';\n      lastCtrlX = cx;\n      lastCtrlY = cy;\n      return this;\n    };\n    this.q = function (c1x, c1y, x, y) {\n      return this.Q(currX + c1x, currY + c1y, currX + x, currY + y);\n    };\n    this.T = function (x, y) {\n      return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), x, y);\n    };\n    this.t = function (x, y) {\n      return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), currX + x, currY + y);\n    };\n    this.A = function (rx, ry, fi, fa, fs, x, y) {\n      if (isEqual(rx, 0) || isEqual(ry, 0)) {\n        this.addCommand(['line', true, true, x, y]);\n      } else {\n        fi = fi * (Math.PI / 180);\n        rx = Math.abs(rx);\n        ry = Math.abs(ry);\n        fa = 1 * !!fa;\n        fs = 1 * !!fs;\n        var x1 = Math.cos(fi) * (currX - x) / 2 + Math.sin(fi) * (currY - y) / 2,\n          y1 = Math.cos(fi) * (currY - y) / 2 - Math.sin(fi) * (currX - x) / 2,\n          lambda = x1 * x1 / (rx * rx) + y1 * y1 / (ry * ry);\n        if (lambda > 1) {\n          rx *= Math.sqrt(lambda);\n          ry *= Math.sqrt(lambda);\n        }\n        var r = Math.sqrt(Math.max(0, rx * rx * ry * ry - rx * rx * y1 * y1 - ry * ry * x1 * x1) / (rx * rx * y1 * y1 + ry * ry * x1 * x1)),\n          x2 = (fa === fs ? -1 : 1) * r * rx * y1 / ry,\n          y2 = (fa === fs ? 1 : -1) * r * ry * x1 / rx;\n        var cx = Math.cos(fi) * x2 - Math.sin(fi) * y2 + (currX + x) / 2,\n          cy = Math.sin(fi) * x2 + Math.cos(fi) * y2 + (currY + y) / 2,\n          th1 = Math.atan2((y1 - y2) / ry, (x1 - x2) / rx),\n          th2 = Math.atan2((-y1 - y2) / ry, (-x1 - x2) / rx);\n        if (fs === 0 && th2 - th1 > 0) {\n          th2 -= 2 * Math.PI;\n        } else if (fs === 1 && th2 - th1 < 0) {\n          th2 += 2 * Math.PI;\n        }\n        var segms = Math.ceil(Math.abs(th2 - th1) / (Math.PI / precision));\n        for (var i = 0; i < segms; i++) {\n          var th3 = th1 + i * (th2 - th1) / segms,\n            th4 = th1 + (i + 1) * (th2 - th1) / segms,\n            t = 4 / 3 * Math.tan((th4 - th3) / 4);\n          var c1x = cx + Math.cos(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) - Math.sin(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\n            c1y = cy + Math.sin(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) + Math.cos(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\n            c2x = cx + Math.cos(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) - Math.sin(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\n            c2y = cy + Math.sin(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) + Math.cos(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\n            endX = cx + Math.cos(fi) * rx * Math.cos(th4) - Math.sin(fi) * ry * Math.sin(th4),\n            endY = cy + Math.sin(fi) * rx * Math.cos(th4) + Math.cos(fi) * ry * Math.sin(th4);\n          this.addCommand(['curve', i === 0, i === segms - 1, c1x, c1y, c2x, c2y, endX, endY]);\n        }\n      }\n      lastCom = 'A';\n      return this;\n    };\n    this.a = function (rx, ry, fi, fa, fs, x, y) {\n      return this.A(rx, ry, fi, fa, fs, currX + x, currY + y);\n    };\n    this.path = function (d) {\n      var command,\n        value,\n        temp,\n        parser = new StringParser((d || '').trim());\n      while (command = parser.match(/^[astvzqmhlcASTVZQMHLC]/)) {\n        parser.matchSeparator();\n        var values = [];\n        while (value = PathFlags[command + values.length] ? parser.match(/^[01]/) : parser.matchNumber()) {\n          parser.matchSeparator();\n          if (values.length === PathArguments[command]) {\n            this[command].apply(this, values);\n            values = [];\n            if (command === 'M') {\n              command = 'L';\n            } else if (command === 'm') {\n              command = 'l';\n            }\n          }\n          values.push(Number(value));\n        }\n        if (values.length === PathArguments[command]) {\n          this[command].apply(this, values);\n        } else {\n          warningCallback('SvgPath: command ' + command + ' with ' + values.length + ' numbers');\n          return;\n        }\n      }\n      if (temp = parser.matchAll()) {\n        warningCallback('SvgPath: unexpected string ' + temp);\n      }\n      return this;\n    };\n    this.getBoundingBox = function () {\n      var bbox = [Infinity, Infinity, -Infinity, -Infinity];\n      function addBounds(bbox1) {\n        if (bbox1[0] < bbox[0]) {\n          bbox[0] = bbox1[0];\n        }\n        if (bbox1[2] > bbox[2]) {\n          bbox[2] = bbox1[2];\n        }\n        if (bbox1[1] < bbox[1]) {\n          bbox[1] = bbox1[1];\n        }\n        if (bbox1[3] > bbox[3]) {\n          bbox[3] = bbox1[3];\n        }\n      }\n      for (var i = 0; i < this.pathSegments.length; i++) {\n        addBounds(this.pathSegments[i].getBoundingBox());\n      }\n      if (bbox[0] === Infinity) {\n        bbox[0] = 0;\n      }\n      if (bbox[1] === Infinity) {\n        bbox[1] = 0;\n      }\n      if (bbox[2] === -Infinity) {\n        bbox[2] = 0;\n      }\n      if (bbox[3] === -Infinity) {\n        bbox[3] = 0;\n      }\n      return bbox;\n    };\n    this.getPointAtLength = function (l) {\n      if (l >= 0 && l <= this.totalLength) {\n        var temp;\n        for (var i = 0; i < this.pathSegments.length; i++) {\n          if (temp = this.pathSegments[i].getPointAtLength(l)) {\n            return temp;\n          }\n          l -= this.pathSegments[i].totalLength;\n        }\n        return this.endPoint;\n      }\n    };\n    this.transform = function (m) {\n      this.pathSegments = [];\n      this.startPoint = null;\n      this.endPoint = null;\n      this.totalLength = 0;\n      for (var i = 0; i < this.pathCommands.length; i++) {\n        var data = this.pathCommands.shift();\n        for (var j = 3; j < data.length; j += 2) {\n          var p = transformPoint([data[j], data[j + 1]], m);\n          data[j] = p[0];\n          data[j + 1] = p[1];\n        }\n        this.addCommand(data);\n      }\n      return this;\n    };\n    this.mergeShape = function (shape) {\n      for (var i = 0; i < shape.pathCommands.length; i++) {\n        this.addCommand(shape.pathCommands[i].slice());\n      }\n      return this;\n    };\n    this.clone = function () {\n      return new SvgShape().mergeShape(this);\n    };\n    this.insertInDocument = function () {\n      for (var i = 0; i < this.pathCommands.length; i++) {\n        var command = this.pathCommands[i][0],\n          values = this.pathCommands[i].slice(3);\n        switch (command) {\n          case 'move':\n            doc.moveTo(values[0], values[1]);\n            break;\n          case 'line':\n            doc.lineTo(values[0], values[1]);\n            break;\n          case 'curve':\n            doc.bezierCurveTo(values[0], values[1], values[2], values[3], values[4], values[5]);\n            break;\n          case 'close':\n            doc.closePath();\n            break;\n        }\n      }\n    };\n    this.getSubPaths = function () {\n      var subPaths = [],\n        shape = new SvgShape();\n      for (var i = 0; i < this.pathCommands.length; i++) {\n        var data = this.pathCommands[i],\n          command = this.pathCommands[i][0];\n        if (command === 'move' && i !== 0) {\n          subPaths.push(shape);\n          shape = new SvgShape();\n        }\n        shape.addCommand(data);\n      }\n      subPaths.push(shape);\n      return subPaths;\n    };\n    this.getMarkers = function () {\n      var markers = [],\n        subPaths = this.getSubPaths();\n      for (var i = 0; i < subPaths.length; i++) {\n        var subPath = subPaths[i],\n          subPathMarkers = [];\n        for (var j = 0; j < subPath.pathSegments.length; j++) {\n          var segment = subPath.pathSegments[j];\n          if (isNotEqual(segment.totalLength, 0) || j === 0 || j === subPath.pathSegments.length - 1) {\n            if (segment.hasStart) {\n              var startMarker = segment.getPointAtLength(0),\n                prevEndMarker = subPathMarkers.pop();\n              if (prevEndMarker) {\n                startMarker[2] = 0.5 * (prevEndMarker[2] + startMarker[2]);\n              }\n              subPathMarkers.push(startMarker);\n            }\n            if (segment.hasEnd) {\n              var endMarker = segment.getPointAtLength(segment.totalLength);\n              subPathMarkers.push(endMarker);\n            }\n          }\n        }\n        markers = markers.concat(subPathMarkers);\n      }\n      return markers;\n    };\n  };\n  var SvgElem = function SvgElem(obj, inherits) {\n    var styleCache = Object.create(null);\n    var childrenCache = null;\n    this.name = obj.nodeName;\n    this.isOuterElement = obj === svg || !obj.parentNode;\n    this.inherits = inherits || (!this.isOuterElement ? createSVGElement(obj.parentNode, null) : null);\n    this.stack = this.inherits ? this.inherits.stack.concat(obj) : [obj];\n    this.style = parseStyleAttr(typeof obj.getAttribute === 'function' && obj.getAttribute('style'));\n    this.css = useCSS ? getComputedStyle(obj) : getStyle(obj);\n    this.allowedChildren = [];\n    this.attr = function (key) {\n      if (typeof obj.getAttribute === 'function') {\n        return obj.getAttribute(key);\n      }\n    };\n    this.resolveUrl = function (value) {\n      var temp = (value || '').match(/^\\s*(?:url\\(\"(.*)#(.*)\"\\)|url\\('(.*)#(.*)'\\)|url\\((.*)#(.*)\\)|(.*)#(.*))\\s*$/) || [];\n      var file = temp[1] || temp[3] || temp[5] || temp[7],\n        id = temp[2] || temp[4] || temp[6] || temp[8];\n      if (id) {\n        if (!file) {\n          var svgObj = svg.getElementById(id);\n          if (svgObj) {\n            if (this.stack.indexOf(svgObj) === -1) {\n              return svgObj;\n            } else {\n              warningCallback('SVGtoPDF: loop of circular references for id \"' + id + '\"');\n              return;\n            }\n          }\n        }\n        if (documentCallback) {\n          var svgs = documentCache[file];\n          if (!svgs) {\n            svgs = documentCallback(file);\n            if (!isArrayLike(svgs)) {\n              svgs = [svgs];\n            }\n            for (var i = 0; i < svgs.length; i++) {\n              if (typeof svgs[i] === 'string') {\n                svgs[i] = parseXml(svgs[i]);\n              }\n            }\n            documentCache[file] = svgs;\n          }\n          for (var _i7 = 0; _i7 < svgs.length; _i7++) {\n            var _svgObj = svgs[_i7].getElementById(id);\n            if (_svgObj) {\n              if (this.stack.indexOf(_svgObj) === -1) {\n                return _svgObj;\n              } else {\n                warningCallback('SVGtoPDF: loop of circular references for id \"' + file + '#' + id + '\"');\n                return;\n              }\n            }\n          }\n        }\n      }\n    };\n    this.computeUnits = function (value, unit, percent, isFontSize) {\n      if (unit === '%') {\n        return parseFloat(value) / 100 * (isFontSize || percent != null ? percent : this.getViewport());\n      } else if (unit === 'ex' || unit === 'em') {\n        return value * {\n          'em': 1,\n          'ex': 0.5\n        }[unit] * (isFontSize ? percent : this.get('font-size'));\n      } else {\n        return value * {\n          '': 1,\n          'px': 1,\n          'pt': 96 / 72,\n          'cm': 96 / 2.54,\n          'mm': 96 / 25.4,\n          'in': 96,\n          'pc': 96 / 6\n        }[unit];\n      }\n    };\n    this.computeLength = function (value, percent, initial, isFontSize) {\n      var parser = new StringParser((value || '').trim()),\n        temp1,\n        temp2;\n      if (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string' && !parser.matchAll()) {\n        return this.computeUnits(temp1, temp2, percent, isFontSize);\n      }\n      return initial;\n    };\n    this.computeLengthList = function (value, percent, strict) {\n      var parser = new StringParser((value || '').trim()),\n        result = [],\n        temp1,\n        temp2;\n      while (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string') {\n        result.push(this.computeUnits(temp1, temp2, percent));\n        parser.matchSeparator();\n      }\n      if (strict && parser.matchAll()) {\n        return;\n      }\n      return result;\n    };\n    this.getLength = function (key, percent, initial) {\n      return this.computeLength(this.attr(key), percent, initial);\n    };\n    this.getLengthList = function (key, percent) {\n      return this.computeLengthList(this.attr(key), percent);\n    };\n    this.getUrl = function (key) {\n      return this.resolveUrl(this.attr(key));\n    };\n    this.getNumberList = function (key) {\n      var parser = new StringParser((this.attr(key) || '').trim()),\n        result = [],\n        temp;\n      while (temp = parser.matchNumber()) {\n        result.push(Number(temp));\n        parser.matchSeparator();\n      }\n      result.error = parser.matchAll();\n      return result;\n    };\n    this.getViewbox = function (key, initial) {\n      var viewBox = this.getNumberList(key);\n      if (viewBox.length === 4 && viewBox[2] >= 0 && viewBox[3] >= 0) {\n        return viewBox;\n      }\n      return initial;\n    };\n    this.getPercent = function (key, initial) {\n      var value = this.attr(key);\n      var parser = new StringParser((value || '').trim()),\n        temp1,\n        temp2;\n      var number = parser.matchNumber();\n      if (!number) {\n        return initial;\n      }\n      if (parser.match('%')) {\n        number *= 0.01;\n      }\n      if (parser.matchAll()) {\n        return initial;\n      }\n      return Math.max(0, Math.min(1, number));\n    };\n    this.chooseValue = function (args) {\n      for (var i = 0; i < arguments.length; i++) {\n        if (arguments[i] != null && arguments[i] === arguments[i]) {\n          return arguments[i];\n        }\n      }\n      return arguments[arguments.length - 1];\n    };\n    this.get = function (key) {\n      if (styleCache[key] !== undefined) {\n        return styleCache[key];\n      }\n      var keyInfo = Properties[key] || {},\n        value,\n        result;\n      for (var i = 0; i < 3; i++) {\n        switch (i) {\n          case 0:\n            if (key !== 'transform') {\n              // the CSS transform behaves strangely\n              value = this.css[keyInfo.css || key];\n            }\n            break;\n          case 1:\n            value = this.style[key];\n            break;\n          case 2:\n            value = this.attr(key);\n            break;\n        }\n        if (value === 'inherit') {\n          result = this.inherits ? this.inherits.get(key) : keyInfo.initial;\n          if (result != null) {\n            return styleCache[key] = result;\n          }\n        }\n        if (keyInfo.values != null) {\n          result = keyInfo.values[value];\n          if (result != null) {\n            return styleCache[key] = result;\n          }\n        }\n        if (value != null) {\n          var parsed = void 0;\n          switch (key) {\n            case 'font-size':\n              result = this.computeLength(value, this.inherits ? this.inherits.get(key) : keyInfo.initial, undefined, true);\n              break;\n            case 'baseline-shift':\n              result = this.computeLength(value, this.get('font-size'));\n              break;\n            case 'font-family':\n              result = value || undefined;\n              break;\n            case 'opacity':\n            case 'stroke-opacity':\n            case 'fill-opacity':\n            case 'stop-opacity':\n              parsed = parseFloat(value);\n              if (!isNaN(parsed)) {\n                result = Math.max(0, Math.min(1, parsed));\n              }\n              break;\n            case 'transform':\n              result = parseTranform(value);\n              break;\n            case 'stroke-dasharray':\n              if (value === 'none') {\n                result = [];\n              } else if (parsed = this.computeLengthList(value, this.getViewport(), true)) {\n                var sum = 0,\n                  error = false;\n                for (var j = 0; j < parsed.length; j++) {\n                  if (parsed[j] < 0) {\n                    error = true;\n                  }\n                  sum += parsed[j];\n                }\n                if (!error) {\n                  if (parsed.length % 2 === 1) {\n                    parsed = parsed.concat(parsed);\n                  }\n                  result = sum === 0 ? [] : parsed;\n                }\n              }\n              break;\n            case 'color':\n              if (value === 'none' || value === 'transparent') {\n                result = 'none';\n              } else {\n                result = parseColor(value);\n              }\n              break;\n            case 'fill':\n            case 'stroke':\n              if (value === 'none' || value === 'transparent') {\n                result = 'none';\n              } else if (value === 'currentColor') {\n                result = this.get('color');\n              } else if (parsed = parseColor(value)) {\n                return parsed;\n              } else if (parsed = (value || '').split(' ')) {\n                var object = this.resolveUrl(parsed[0]),\n                  fallbackColor = parseColor(parsed[1]);\n                if (object == null) {\n                  result = fallbackColor;\n                } else if (object.nodeName === 'linearGradient' || object.nodeName === 'radialGradient') {\n                  result = new SvgElemGradient(object, null, fallbackColor);\n                } else if (object.nodeName === 'pattern') {\n                  result = new SvgElemPattern(object, null, fallbackColor);\n                } else {\n                  result = fallbackColor;\n                }\n              }\n              break;\n            case 'stop-color':\n              if (value === 'none' || value === 'transparent') {\n                result = 'none';\n              } else if (value === 'currentColor') {\n                result = this.get('color');\n              } else {\n                result = parseColor(value);\n              }\n              break;\n            case 'marker-start':\n            case 'marker-mid':\n            case 'marker-end':\n            case 'clip-path':\n            case 'mask':\n              if (value === 'none') {\n                result = 'none';\n              } else {\n                result = this.resolveUrl(value);\n              }\n              break;\n            case 'stroke-width':\n              parsed = this.computeLength(value, this.getViewport());\n              if (parsed != null && parsed >= 0) {\n                result = parsed;\n              }\n              break;\n            case 'stroke-miterlimit':\n              parsed = parseFloat(value);\n              if (parsed != null && parsed >= 1) {\n                result = parsed;\n              }\n              break;\n            case 'word-spacing':\n            case 'letter-spacing':\n              result = this.computeLength(value, this.getViewport());\n              break;\n            case 'stroke-dashoffset':\n              result = this.computeLength(value, this.getViewport());\n              if (result != null) {\n                if (result < 0) {\n                  // fix for crbug.com/660850\n                  var dasharray = this.get('stroke-dasharray');\n                  for (var _j = 0; _j < dasharray.length; _j++) {\n                    result += dasharray[_j];\n                  }\n                }\n              }\n              break;\n          }\n          if (result != null) {\n            return styleCache[key] = result;\n          }\n        }\n      }\n      return styleCache[key] = keyInfo.inherit && this.inherits ? this.inherits.get(key) : keyInfo.initial;\n    };\n    this.getChildren = function () {\n      if (childrenCache != null) {\n        return childrenCache;\n      }\n      var children = [];\n      for (var i = 0; i < obj.childNodes.length; i++) {\n        var child = obj.childNodes[i];\n        if (!child.error && this.allowedChildren.indexOf(child.nodeName) !== -1) {\n          children.push(createSVGElement(child, this));\n        }\n      }\n      return childrenCache = children;\n    };\n    this.getParentVWidth = function () {\n      return this.inherits ? this.inherits.getVWidth() : viewportWidth;\n    };\n    this.getParentVHeight = function () {\n      return this.inherits ? this.inherits.getVHeight() : viewportHeight;\n    };\n    this.getParentViewport = function () {\n      return Math.sqrt(0.5 * this.getParentVWidth() * this.getParentVWidth() + 0.5 * this.getParentVHeight() * this.getParentVHeight());\n    };\n    this.getVWidth = function () {\n      return this.getParentVWidth();\n    };\n    this.getVHeight = function () {\n      return this.getParentVHeight();\n    };\n    this.getViewport = function () {\n      return Math.sqrt(0.5 * this.getVWidth() * this.getVWidth() + 0.5 * this.getVHeight() * this.getVHeight());\n    };\n    this.getBoundingBox = function () {\n      var shape = this.getBoundingShape();\n      return shape.getBoundingBox();\n    };\n  };\n  var SvgElemStylable = function SvgElemStylable(obj, inherits) {\n    SvgElem.call(this, obj, inherits);\n    this.transform = function () {\n      doc.transform.apply(doc, this.getTransformation());\n    };\n    this.clip = function () {\n      if (this.get('clip-path') !== 'none') {\n        var clipPath = new SvgElemClipPath(this.get('clip-path'), null);\n        clipPath.useMask(this.getBoundingBox());\n        return true;\n      }\n    };\n    this.mask = function () {\n      if (this.get('mask') !== 'none') {\n        var mask = new SvgElemMask(this.get('mask'), null);\n        mask.useMask(this.getBoundingBox());\n        return true;\n      }\n    };\n    this.getFill = function (isClip, isMask) {\n      var opacity = this.get('opacity'),\n        fill = this.get('fill'),\n        fillOpacity = this.get('fill-opacity');\n      if (isClip) {\n        return DefaultColors.white;\n      }\n      if (fill !== 'none' && opacity && fillOpacity) {\n        if (fill instanceof SvgElemGradient || fill instanceof SvgElemPattern) {\n          return fill.getPaint(this.getBoundingBox(), fillOpacity * opacity, isClip, isMask);\n        }\n        return opacityToColor(fill, fillOpacity * opacity, isMask);\n      }\n    };\n    this.getStroke = function (isClip, isMask) {\n      var opacity = this.get('opacity'),\n        stroke = this.get('stroke'),\n        strokeOpacity = this.get('stroke-opacity');\n      if (isClip || isEqual(this.get('stroke-width'), 0)) {\n        return;\n      }\n      if (stroke !== 'none' && opacity && strokeOpacity) {\n        if (stroke instanceof SvgElemGradient || stroke instanceof SvgElemPattern) {\n          return stroke.getPaint(this.getBoundingBox(), strokeOpacity * opacity, isClip, isMask);\n        }\n        return opacityToColor(stroke, strokeOpacity * opacity, isMask);\n      }\n    };\n  };\n  var SvgElemHasChildren = function SvgElemHasChildren(obj, inherits) {\n    SvgElemStylable.call(this, obj, inherits);\n    this.allowedChildren = ['use', 'g', 'a', 'svg', 'image', 'rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon', 'path', 'text'];\n    this.getBoundingShape = function () {\n      var shape = new SvgShape(),\n        children = this.getChildren();\n      for (var i = 0; i < children.length; i++) {\n        if (children[i].get('display') !== 'none') {\n          if (typeof children[i].getBoundingShape === 'function') {\n            var childShape = children[i].getBoundingShape().clone();\n            if (typeof children[i].getTransformation === 'function') {\n              childShape.transform(children[i].getTransformation());\n            }\n            shape.mergeShape(childShape);\n          }\n        }\n      }\n      return shape;\n    };\n    this.drawChildren = function (isClip, isMask) {\n      var children = this.getChildren();\n      for (var i = 0; i < children.length; i++) {\n        if (children[i].get('display') !== 'none') {\n          if (typeof children[i].drawInDocument === 'function') {\n            children[i].drawInDocument(isClip, isMask);\n          }\n        }\n      }\n    };\n  };\n  var SvgElemContainer = function SvgElemContainer(obj, inherits) {\n    SvgElemHasChildren.call(this, obj, inherits);\n    this.drawContent = function (isClip, isMask) {\n      this.transform();\n      var clipped = this.clip(),\n        masked = this.mask(),\n        group;\n      if ((this.get('opacity') < 1 || clipped || masked) && !isClip) {\n        group = docBeginGroup(getPageBBox());\n      }\n      this.drawChildren(isClip, isMask);\n      if (group) {\n        docEndGroup(group);\n        doc.fillOpacity(this.get('opacity'));\n        docInsertGroup(group);\n      }\n    };\n  };\n  var SvgElemUse = function SvgElemUse(obj, inherits) {\n    SvgElemContainer.call(this, obj, inherits);\n    var x = this.getLength('x', this.getVWidth(), 0),\n      y = this.getLength('y', this.getVHeight(), 0),\n      child = this.getUrl('href') || this.getUrl('xlink:href');\n    if (child) {\n      child = createSVGElement(child, this);\n    }\n    this.getChildren = function () {\n      return child ? [child] : [];\n    };\n    this.drawInDocument = function (isClip, isMask) {\n      doc.save();\n      this.drawContent(isClip, isMask);\n      doc.restore();\n    };\n    this.getTransformation = function () {\n      return multiplyMatrix(this.get('transform'), [1, 0, 0, 1, x, y]);\n    };\n  };\n  var SvgElemSymbol = function SvgElemSymbol(obj, inherits) {\n    SvgElemContainer.call(this, obj, inherits);\n    var width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\n      height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight());\n    if (inherits instanceof SvgElemUse) {\n      width = inherits.getLength('width', inherits.getParentVWidth(), width);\n      height = inherits.getLength('height', inherits.getParentVHeight(), height);\n    }\n    var aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\n      viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\n    this.getVWidth = function () {\n      return viewBox[2];\n    };\n    this.getVHeight = function () {\n      return viewBox[3];\n    };\n    this.drawInDocument = function (isClip, isMask) {\n      doc.save();\n      this.drawContent(isClip, isMask);\n      doc.restore();\n    };\n    this.getTransformation = function () {\n      return multiplyMatrix(parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]), [1, 0, 0, 1, -viewBox[0], -viewBox[1]]);\n    };\n  };\n  var SvgElemGroup = function SvgElemGroup(obj, inherits) {\n    SvgElemContainer.call(this, obj, inherits);\n    this.drawInDocument = function (isClip, isMask) {\n      doc.save();\n      if (this.link && !isClip && !isMask) {\n        this.addLink();\n      }\n      this.drawContent(isClip, isMask);\n      doc.restore();\n    };\n    this.getTransformation = function () {\n      return this.get('transform');\n    };\n  };\n  var SvgElemLink = function SvgElemLink(obj, inherits) {\n    if (inherits && inherits.isText) {\n      SvgElemTspan.call(this, obj, inherits);\n      this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\n    } else {\n      SvgElemGroup.call(this, obj, inherits);\n    }\n    this.link = this.attr('href') || this.attr('xlink:href');\n    this.addLink = function () {\n      if (this.link.match(/^(?:[a-z][a-z0-9+.-]*:|\\/\\/)?/i) && this.getChildren().length) {\n        var bbox = this.getBoundingShape().transform(getGlobalMatrix()).getBoundingBox();\n        docInsertLink(bbox[0], bbox[1], bbox[2], bbox[3], this.link);\n      }\n    };\n  };\n  var SvgElemSvg = function SvgElemSvg(obj, inherits) {\n    SvgElemContainer.call(this, obj, inherits);\n    var width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\n      height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight()),\n      x = this.getLength('x', this.getParentVWidth(), 0),\n      y = this.getLength('y', this.getParentVHeight(), 0);\n    if (inherits instanceof SvgElemUse) {\n      width = inherits.getLength('width', inherits.getParentVWidth(), width);\n      height = inherits.getLength('height', inherits.getParentVHeight(), height);\n    }\n    var aspectRatio = this.attr('preserveAspectRatio'),\n      viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\n    if (this.isOuterElement && preserveAspectRatio) {\n      x = y = 0;\n      width = viewportWidth;\n      height = viewportHeight;\n      aspectRatio = preserveAspectRatio;\n    }\n    this.getVWidth = function () {\n      return viewBox[2];\n    };\n    this.getVHeight = function () {\n      return viewBox[3];\n    };\n    this.drawInDocument = function (isClip, isMask) {\n      doc.save();\n      if (this.get('overflow') === 'hidden') {\n        new SvgShape().M(x, y).L(x + width, y).L(x + width, y + height).L(x, y + height).Z().transform(this.get('transform')).insertInDocument();\n        doc.clip();\n      }\n      this.drawContent(isClip, isMask);\n      doc.restore();\n    };\n    this.getTransformation = function () {\n      return multiplyMatrix(this.get('transform'), [1, 0, 0, 1, x, y], parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]), [1, 0, 0, 1, -viewBox[0], -viewBox[1]]);\n    };\n  };\n  var SVGElemImage = function SVGElemImage(obj, inherits) {\n    SvgElemStylable.call(this, obj, inherits);\n    var link = imageCallback(this.attr('href') || this.attr('xlink:href') || ''),\n      x = this.getLength('x', this.getVWidth(), 0),\n      y = this.getLength('y', this.getVHeight(), 0),\n      width = this.getLength('width', this.getVWidth(), 'auto'),\n      height = this.getLength('height', this.getVHeight(), 'auto'),\n      image;\n    try {\n      image = doc.openImage(link);\n    } catch (e) {\n      warningCallback('SVGElemImage: failed to open image \"' + link + '\" in PDFKit');\n    }\n    if (image) {\n      if (width === 'auto' && height !== 'auto') {\n        width = height * image.width / image.height;\n      } else if (height === 'auto' && width !== 'auto') {\n        height = width * image.height / image.width;\n      } else if (width === 'auto' && height === 'auto') {\n        width = image.width;\n        height = image.height;\n      }\n    }\n    if (width === 'auto' || width < 0) {\n      width = 0;\n    }\n    if (height === 'auto' || height < 0) {\n      height = 0;\n    }\n    this.getTransformation = function () {\n      return this.get('transform');\n    };\n    this.getBoundingShape = function () {\n      return new SvgShape().M(x, y).L(x + width, y).M(x + width, y + height).L(x, y + height);\n    };\n    this.drawInDocument = function (isClip, isMask) {\n      if (this.get('visibility') === 'hidden' || !image) {\n        return;\n      }\n      doc.save();\n      this.transform();\n      if (this.get('overflow') === 'hidden') {\n        doc.rect(x, y, width, height).clip();\n      }\n      this.clip();\n      this.mask();\n      doc.translate(x, y);\n      doc.transform.apply(doc, parseAspectRatio(this.attr('preserveAspectRatio'), width, height, image ? image.width : width, image ? image.height : height));\n      if (!isClip) {\n        doc.fillOpacity(this.get('opacity'));\n        doc.image(image, 0, 0);\n      } else {\n        doc.rect(0, 0, image.width, image.height);\n        docFillColor(DefaultColors.white).fill();\n      }\n      doc.restore();\n    };\n  };\n  var SvgElemPattern = function SvgElemPattern(obj, inherits, fallback) {\n    SvgElemHasChildren.call(this, obj, inherits);\n    this.ref = function () {\n      var ref = this.getUrl('href') || this.getUrl('xlink:href');\n      if (ref && ref.nodeName === obj.nodeName) {\n        return new SvgElemPattern(ref, inherits, fallback);\n      }\n    }.call(this);\n    var _attr = this.attr;\n    this.attr = function (key) {\n      var attr = _attr.call(this, key);\n      if (attr != null || key === 'href' || key === 'xlink:href') {\n        return attr;\n      }\n      return this.ref ? this.ref.attr(key) : null;\n    };\n    var _getChildren = this.getChildren;\n    this.getChildren = function () {\n      var children = _getChildren.call(this);\n      if (children.length > 0) {\n        return children;\n      }\n      return this.ref ? this.ref.getChildren() : [];\n    };\n    this.getPaint = function (bBox, gOpacity, isClip, isMask) {\n      var bBoxUnitsPattern = this.attr('patternUnits') !== 'userSpaceOnUse',\n        bBoxUnitsContent = this.attr('patternContentUnits') === 'objectBoundingBox',\n        x = this.getLength('x', bBoxUnitsPattern ? 1 : this.getParentVWidth(), 0),\n        y = this.getLength('y', bBoxUnitsPattern ? 1 : this.getParentVHeight(), 0),\n        width = this.getLength('width', bBoxUnitsPattern ? 1 : this.getParentVWidth(), 0),\n        height = this.getLength('height', bBoxUnitsPattern ? 1 : this.getParentVHeight(), 0);\n      if (bBoxUnitsContent && !bBoxUnitsPattern) {\n        // Use the same units for pattern & pattern content\n        x = (x - bBox[0]) / (bBox[2] - bBox[0]) || 0;\n        y = (y - bBox[1]) / (bBox[3] - bBox[1]) || 0;\n        width = width / (bBox[2] - bBox[0]) || 0;\n        height = height / (bBox[3] - bBox[1]) || 0;\n      } else if (!bBoxUnitsContent && bBoxUnitsPattern) {\n        x = bBox[0] + x * (bBox[2] - bBox[0]);\n        y = bBox[1] + y * (bBox[3] - bBox[1]);\n        width = width * (bBox[2] - bBox[0]);\n        height = height * (bBox[3] - bBox[1]);\n      }\n      var viewBox = this.getViewbox('viewBox', [0, 0, width, height]),\n        aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\n        aspectRatioMatrix = multiplyMatrix(parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3], 0), [1, 0, 0, 1, -viewBox[0], -viewBox[1]]),\n        matrix = parseTranform(this.attr('patternTransform'));\n      if (bBoxUnitsContent) {\n        matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\n      }\n      matrix = multiplyMatrix(matrix, [1, 0, 0, 1, x, y]);\n      if ((matrix = validateMatrix(matrix)) && (aspectRatioMatrix = validateMatrix(aspectRatioMatrix)) && (width = validateNumber(width)) && (height = validateNumber(height))) {\n        var group = docBeginGroup([0, 0, width, height]);\n        doc.transform.apply(doc, aspectRatioMatrix);\n        this.drawChildren(isClip, isMask);\n        docEndGroup(group);\n        return [docCreatePattern(group, width, height, matrix), gOpacity];\n      } else {\n        return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\n      }\n    };\n    this.getVWidth = function () {\n      var bBoxUnitsPattern = this.attr('patternUnits') !== 'userSpaceOnUse',\n        width = this.getLength('width', bBoxUnitsPattern ? 1 : this.getParentVWidth(), 0);\n      return this.getViewbox('viewBox', [0, 0, width, 0])[2];\n    };\n    this.getVHeight = function () {\n      var bBoxUnitsPattern = this.attr('patternUnits') !== 'userSpaceOnUse',\n        height = this.getLength('height', bBoxUnitsPattern ? 1 : this.getParentVHeight(), 0);\n      return this.getViewbox('viewBox', [0, 0, 0, height])[3];\n    };\n  };\n  var SvgElemGradient = function SvgElemGradient(obj, inherits, fallback) {\n    SvgElem.call(this, obj, inherits);\n    this.allowedChildren = ['stop'];\n    this.ref = function () {\n      var ref = this.getUrl('href') || this.getUrl('xlink:href');\n      if (ref && ref.nodeName === obj.nodeName) {\n        return new SvgElemGradient(ref, inherits, fallback);\n      }\n    }.call(this);\n    var _attr = this.attr;\n    this.attr = function (key) {\n      var attr = _attr.call(this, key);\n      if (attr != null || key === 'href' || key === 'xlink:href') {\n        return attr;\n      }\n      return this.ref ? this.ref.attr(key) : null;\n    };\n    var _getChildren = this.getChildren;\n    this.getChildren = function () {\n      var children = _getChildren.call(this);\n      if (children.length > 0) {\n        return children;\n      }\n      return this.ref ? this.ref.getChildren() : [];\n    };\n    this.getPaint = function (bBox, gOpacity, isClip, isMask) {\n      var children = this.getChildren();\n      if (children.length === 0) {\n        return;\n      }\n      if (children.length === 1) {\n        var child = children[0],\n          stopColor = child.get('stop-color');\n        if (stopColor === 'none') {\n          return;\n        }\n        return opacityToColor(stopColor, child.get('stop-opacity') * gOpacity, isMask);\n      }\n      var bBoxUnits = this.attr('gradientUnits') !== 'userSpaceOnUse',\n        matrix = parseTranform(this.attr('gradientTransform')),\n        spread = this.attr('spreadMethod'),\n        grad,\n        x1,\n        x2,\n        y1,\n        y2,\n        r2,\n        nAfter = 0,\n        nBefore = 0,\n        nTotal = 1;\n      if (bBoxUnits) {\n        matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\n      }\n      if (matrix = validateMatrix(matrix)) {\n        if (this.name === 'linearGradient') {\n          x1 = this.getLength('x1', bBoxUnits ? 1 : this.getVWidth(), 0);\n          x2 = this.getLength('x2', bBoxUnits ? 1 : this.getVWidth(), bBoxUnits ? 1 : this.getVWidth());\n          y1 = this.getLength('y1', bBoxUnits ? 1 : this.getVHeight(), 0);\n          y2 = this.getLength('y2', bBoxUnits ? 1 : this.getVHeight(), 0);\n        } else {\n          x2 = this.getLength('cx', bBoxUnits ? 1 : this.getVWidth(), bBoxUnits ? 0.5 : 0.5 * this.getVWidth());\n          y2 = this.getLength('cy', bBoxUnits ? 1 : this.getVHeight(), bBoxUnits ? 0.5 : 0.5 * this.getVHeight());\n          r2 = this.getLength('r', bBoxUnits ? 1 : this.getViewport(), bBoxUnits ? 0.5 : 0.5 * this.getViewport());\n          x1 = this.getLength('fx', bBoxUnits ? 1 : this.getVWidth(), x2);\n          y1 = this.getLength('fy', bBoxUnits ? 1 : this.getVHeight(), y2);\n          if (r2 < 0) {\n            warningCallback('SvgElemGradient: negative r value');\n          }\n          var d = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)),\n            multiplier = 1;\n          if (d > r2) {\n            // according to specification\n            multiplier = r2 / d;\n            x1 = x2 + (x1 - x2) * multiplier;\n            y1 = y2 + (y1 - y2) * multiplier;\n          }\n          r2 = Math.max(r2, d * multiplier * (1 + 1e-6)); // fix for edge-case gradients see issue #84\n        }\n\n        if (spread === 'reflect' || spread === 'repeat') {\n          var inv = inverseMatrix(matrix),\n            corner1 = transformPoint([bBox[0], bBox[1]], inv),\n            corner2 = transformPoint([bBox[2], bBox[1]], inv),\n            corner3 = transformPoint([bBox[2], bBox[3]], inv),\n            corner4 = transformPoint([bBox[0], bBox[3]], inv);\n          if (this.name === 'linearGradient') {\n            // See file 'gradient-repeat-maths.png'\n            nAfter = Math.max((corner1[0] - x2) * (x2 - x1) + (corner1[1] - y2) * (y2 - y1), (corner2[0] - x2) * (x2 - x1) + (corner2[1] - y2) * (y2 - y1), (corner3[0] - x2) * (x2 - x1) + (corner3[1] - y2) * (y2 - y1), (corner4[0] - x2) * (x2 - x1) + (corner4[1] - y2) * (y2 - y1)) / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n            nBefore = Math.max((corner1[0] - x1) * (x1 - x2) + (corner1[1] - y1) * (y1 - y2), (corner2[0] - x1) * (x1 - x2) + (corner2[1] - y1) * (y1 - y2), (corner3[0] - x1) * (x1 - x2) + (corner3[1] - y1) * (y1 - y2), (corner4[0] - x1) * (x1 - x2) + (corner4[1] - y1) * (y1 - y2)) / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n          } else {\n            nAfter = Math.sqrt(Math.max(Math.pow(corner1[0] - x2, 2) + Math.pow(corner1[1] - y2, 2), Math.pow(corner2[0] - x2, 2) + Math.pow(corner2[1] - y2, 2), Math.pow(corner3[0] - x2, 2) + Math.pow(corner3[1] - y2, 2), Math.pow(corner4[0] - x2, 2) + Math.pow(corner4[1] - y2, 2))) / r2 - 1;\n          }\n          nAfter = Math.ceil(nAfter + 0.5); // Add a little more because the stroke can extend outside of the bounding box\n          nBefore = Math.ceil(nBefore + 0.5);\n          nTotal = nBefore + 1 + nAfter; // How many times the gradient needs to be repeated to fill the object bounding box\n        }\n\n        if (this.name === 'linearGradient') {\n          grad = doc.linearGradient(x1 - nBefore * (x2 - x1), y1 - nBefore * (y2 - y1), x2 + nAfter * (x2 - x1), y2 + nAfter * (y2 - y1));\n        } else {\n          grad = doc.radialGradient(x1, y1, 0, x2, y2, r2 + nAfter * r2);\n        }\n        for (var n = 0; n < nTotal; n++) {\n          var offset = 0,\n            inOrder = spread !== 'reflect' || (n - nBefore) % 2 === 0;\n          for (var i = 0; i < children.length; i++) {\n            var _child = children[inOrder ? i : children.length - 1 - i],\n              _stopColor = _child.get('stop-color');\n            if (_stopColor === 'none') {\n              _stopColor = DefaultColors.transparent;\n            }\n            _stopColor = opacityToColor(_stopColor, _child.get('stop-opacity') * gOpacity, isMask);\n            offset = Math.max(offset, inOrder ? _child.getPercent('offset', 0) : 1 - _child.getPercent('offset', 0));\n            if (i === 0 && _stopColor[0].length === 4) {\n              grad._colorSpace = 'DeviceCMYK';\n            } // Fix until PR #763 is merged into PDFKit\n            if (i === 0 && offset > 0) {\n              grad.stop((n + 0) / nTotal, _stopColor[0], _stopColor[1]);\n            }\n            grad.stop((n + offset) / (nAfter + nBefore + 1), _stopColor[0], _stopColor[1]);\n            if (i === children.length - 1 && offset < 1) {\n              grad.stop((n + 1) / nTotal, _stopColor[0], _stopColor[1]);\n            }\n          }\n        }\n        grad.setTransform.apply(grad, matrix);\n        return [grad, 1];\n      } else {\n        return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\n      }\n    };\n  };\n  var SvgElemBasicShape = function SvgElemBasicShape(obj, inherits) {\n    SvgElemStylable.call(this, obj, inherits);\n    this.dashScale = 1;\n    this.getBoundingShape = function () {\n      return this.shape;\n    };\n    this.getTransformation = function () {\n      return this.get('transform');\n    };\n    this.drawInDocument = function (isClip, isMask) {\n      if (this.get('visibility') === 'hidden' || !this.shape) {\n        return;\n      }\n      doc.save();\n      this.transform();\n      this.clip();\n      if (!isClip) {\n        var masked = this.mask(),\n          group;\n        if (masked) {\n          group = docBeginGroup(getPageBBox());\n        }\n        var subPaths = this.shape.getSubPaths(),\n          fill = this.getFill(isClip, isMask),\n          stroke = this.getStroke(isClip, isMask),\n          lineWidth = this.get('stroke-width'),\n          lineCap = this.get('stroke-linecap');\n        if (fill || stroke) {\n          if (fill) {\n            docFillColor(fill);\n          }\n          if (stroke) {\n            for (var j = 0; j < subPaths.length; j++) {\n              if (isEqual(subPaths[j].totalLength, 0)) {\n                if ((lineCap === 'square' || lineCap === 'round') && lineWidth > 0) {\n                  if (subPaths[j].startPoint && subPaths[j].startPoint.length > 1) {\n                    var _x4 = subPaths[j].startPoint[0],\n                      _y4 = subPaths[j].startPoint[1];\n                    docFillColor(stroke);\n                    if (lineCap === 'square') {\n                      doc.rect(_x4 - 0.5 * lineWidth, _y4 - 0.5 * lineWidth, lineWidth, lineWidth);\n                    } else if (lineCap === 'round') {\n                      doc.circle(_x4, _y4, 0.5 * lineWidth);\n                    }\n                    doc.fill();\n                  }\n                }\n              }\n            }\n            var dashArray = this.get('stroke-dasharray'),\n              dashOffset = this.get('stroke-dashoffset');\n            if (isNotEqual(this.dashScale, 1)) {\n              for (var _j2 = 0; _j2 < dashArray.length; _j2++) {\n                dashArray[_j2] *= this.dashScale;\n              }\n              dashOffset *= this.dashScale;\n            }\n            docStrokeColor(stroke);\n            doc.lineWidth(lineWidth).miterLimit(this.get('stroke-miterlimit')).lineJoin(this.get('stroke-linejoin')).lineCap(lineCap).dash(dashArray, {\n              phase: dashOffset\n            });\n          }\n          for (var _j3 = 0; _j3 < subPaths.length; _j3++) {\n            if (subPaths[_j3].totalLength > 0) {\n              subPaths[_j3].insertInDocument();\n            }\n          }\n          if (fill && stroke) {\n            doc.fillAndStroke(this.get('fill-rule'));\n          } else if (fill) {\n            doc.fill(this.get('fill-rule'));\n          } else if (stroke) {\n            doc.stroke();\n          }\n        }\n        var markerStart = this.get('marker-start'),\n          markerMid = this.get('marker-mid'),\n          markerEnd = this.get('marker-end');\n        if (markerStart !== 'none' || markerMid !== 'none' || markerEnd !== 'none') {\n          var markersPos = this.shape.getMarkers();\n          if (markerStart !== 'none') {\n            var marker = new SvgElemMarker(markerStart, null);\n            marker.drawMarker(false, isMask, markersPos[0], lineWidth);\n          }\n          if (markerMid !== 'none') {\n            for (var i = 1; i < markersPos.length - 1; i++) {\n              var _marker = new SvgElemMarker(markerMid, null);\n              _marker.drawMarker(false, isMask, markersPos[i], lineWidth);\n            }\n          }\n          if (markerEnd !== 'none') {\n            var _marker2 = new SvgElemMarker(markerEnd, null);\n            _marker2.drawMarker(false, isMask, markersPos[markersPos.length - 1], lineWidth);\n          }\n        }\n        if (group) {\n          docEndGroup(group);\n          docInsertGroup(group);\n        }\n      } else {\n        this.shape.insertInDocument();\n        docFillColor(DefaultColors.white);\n        doc.fill(this.get('clip-rule'));\n      }\n      doc.restore();\n    };\n  };\n  var SvgElemRect = function SvgElemRect(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    var x = this.getLength('x', this.getVWidth(), 0),\n      y = this.getLength('y', this.getVHeight(), 0),\n      w = this.getLength('width', this.getVWidth(), 0),\n      h = this.getLength('height', this.getVHeight(), 0),\n      rx = this.getLength('rx', this.getVWidth()),\n      ry = this.getLength('ry', this.getVHeight());\n    if (rx === undefined && ry === undefined) {\n      rx = ry = 0;\n    } else if (rx === undefined && ry !== undefined) {\n      rx = ry;\n    } else if (rx !== undefined && ry === undefined) {\n      ry = rx;\n    }\n    if (w > 0 && h > 0) {\n      if (rx && ry) {\n        rx = Math.min(rx, 0.5 * w);\n        ry = Math.min(ry, 0.5 * h);\n        this.shape = new SvgShape().M(x + rx, y).L(x + w - rx, y).A(rx, ry, 0, 0, 1, x + w, y + ry).L(x + w, y + h - ry).A(rx, ry, 0, 0, 1, x + w - rx, y + h).L(x + rx, y + h).A(rx, ry, 0, 0, 1, x, y + h - ry).L(x, y + ry).A(rx, ry, 0, 0, 1, x + rx, y).Z();\n      } else {\n        this.shape = new SvgShape().M(x, y).L(x + w, y).L(x + w, y + h).L(x, y + h).Z();\n      }\n    } else {\n      this.shape = new SvgShape();\n    }\n  };\n  var SvgElemCircle = function SvgElemCircle(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    var cx = this.getLength('cx', this.getVWidth(), 0),\n      cy = this.getLength('cy', this.getVHeight(), 0),\n      r = this.getLength('r', this.getViewport(), 0);\n    if (r > 0) {\n      this.shape = new SvgShape().M(cx + r, cy).A(r, r, 0, 0, 1, cx - r, cy).A(r, r, 0, 0, 1, cx + r, cy).Z();\n    } else {\n      this.shape = new SvgShape();\n    }\n  };\n  var SvgElemEllipse = function SvgElemEllipse(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    var cx = this.getLength('cx', this.getVWidth(), 0),\n      cy = this.getLength('cy', this.getVHeight(), 0),\n      rx = this.getLength('rx', this.getVWidth(), 0),\n      ry = this.getLength('ry', this.getVHeight(), 0);\n    if (rx > 0 && ry > 0) {\n      this.shape = new SvgShape().M(cx + rx, cy).A(rx, ry, 0, 0, 1, cx - rx, cy).A(rx, ry, 0, 0, 1, cx + rx, cy).Z();\n    } else {\n      this.shape = new SvgShape();\n    }\n  };\n  var SvgElemLine = function SvgElemLine(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    var x1 = this.getLength('x1', this.getVWidth(), 0),\n      y1 = this.getLength('y1', this.getVHeight(), 0),\n      x2 = this.getLength('x2', this.getVWidth(), 0),\n      y2 = this.getLength('y2', this.getVHeight(), 0);\n    this.shape = new SvgShape().M(x1, y1).L(x2, y2);\n  };\n  var SvgElemPolyline = function SvgElemPolyline(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    var points = this.getNumberList('points');\n    this.shape = new SvgShape();\n    for (var i = 0; i < points.length - 1; i += 2) {\n      if (i === 0) {\n        this.shape.M(points[i], points[i + 1]);\n      } else {\n        this.shape.L(points[i], points[i + 1]);\n      }\n    }\n    if (points.error) {\n      warningCallback('SvgElemPolygon: unexpected string ' + points.error);\n    }\n    if (points.length % 2 === 1) {\n      warningCallback('SvgElemPolyline: uneven number of coordinates');\n    }\n  };\n  var SvgElemPolygon = function SvgElemPolygon(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    var points = this.getNumberList('points');\n    this.shape = new SvgShape();\n    for (var i = 0; i < points.length - 1; i += 2) {\n      if (i === 0) {\n        this.shape.M(points[i], points[i + 1]);\n      } else {\n        this.shape.L(points[i], points[i + 1]);\n      }\n    }\n    this.shape.Z();\n    if (points.error) {\n      warningCallback('SvgElemPolygon: unexpected string ' + points.error);\n    }\n    if (points.length % 2 === 1) {\n      warningCallback('SvgElemPolygon: uneven number of coordinates');\n    }\n  };\n  var SvgElemPath = function SvgElemPath(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    this.shape = new SvgShape().path(this.attr('d'));\n    var pathLength = this.getLength('pathLength', this.getViewport());\n    this.pathLength = pathLength > 0 ? pathLength : undefined;\n    this.dashScale = this.pathLength !== undefined ? this.shape.totalLength / this.pathLength : 1;\n  };\n  var SvgElemMarker = function SvgElemMarker(obj, inherits) {\n    SvgElemHasChildren.call(this, obj, inherits);\n    var width = this.getLength('markerWidth', this.getParentVWidth(), 3),\n      height = this.getLength('markerHeight', this.getParentVHeight(), 3),\n      viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\n    this.getVWidth = function () {\n      return viewBox[2];\n    };\n    this.getVHeight = function () {\n      return viewBox[3];\n    };\n    this.drawMarker = function (isClip, isMask, posArray, strokeWidth) {\n      doc.save();\n      var orient = this.attr('orient'),\n        units = this.attr('markerUnits'),\n        rotate = orient === 'auto' ? posArray[2] : (parseFloat(orient) || 0) * Math.PI / 180,\n        scale = units === 'userSpaceOnUse' ? 1 : strokeWidth;\n      doc.transform(Math.cos(rotate) * scale, Math.sin(rotate) * scale, -Math.sin(rotate) * scale, Math.cos(rotate) * scale, posArray[0], posArray[1]);\n      var refX = this.getLength('refX', this.getVWidth(), 0),\n        refY = this.getLength('refY', this.getVHeight(), 0),\n        aspectRatioMatrix = parseAspectRatio(this.attr('preserveAspectRatio'), width, height, viewBox[2], viewBox[3], 0.5);\n      if (this.get('overflow') === 'hidden') {\n        doc.rect(aspectRatioMatrix[0] * (viewBox[0] + viewBox[2] / 2 - refX) - width / 2, aspectRatioMatrix[3] * (viewBox[1] + viewBox[3] / 2 - refY) - height / 2, width, height).clip();\n      }\n      doc.transform.apply(doc, aspectRatioMatrix);\n      doc.translate(-refX, -refY);\n      var group;\n      if (this.get('opacity') < 1 && !isClip) {\n        group = docBeginGroup(getPageBBox());\n      }\n      this.drawChildren(isClip, isMask);\n      if (group) {\n        docEndGroup(group);\n        doc.fillOpacity(this.get('opacity'));\n        docInsertGroup(group);\n      }\n      doc.restore();\n    };\n  };\n  var SvgElemClipPath = function SvgElemClipPath(obj, inherits) {\n    SvgElemHasChildren.call(this, obj, inherits);\n    this.useMask = function (bBox) {\n      var group = docBeginGroup(getPageBBox());\n      doc.save();\n      if (this.attr('clipPathUnits') === 'objectBoundingBox') {\n        doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\n      }\n      this.clip();\n      this.drawChildren(true, false);\n      doc.restore();\n      docEndGroup(group);\n      docApplyMask(group, true);\n    };\n  };\n  var SvgElemMask = function SvgElemMask(obj, inherits) {\n    SvgElemHasChildren.call(this, obj, inherits);\n    this.useMask = function (bBox) {\n      var group = docBeginGroup(getPageBBox());\n      doc.save();\n      var x, y, w, h;\n      if (this.attr('maskUnits') === 'userSpaceOnUse') {\n        x = this.getLength('x', this.getVWidth(), -0.1 * (bBox[2] - bBox[0]) + bBox[0]);\n        y = this.getLength('y', this.getVHeight(), -0.1 * (bBox[3] - bBox[1]) + bBox[1]);\n        w = this.getLength('width', this.getVWidth(), 1.2 * (bBox[2] - bBox[0]));\n        h = this.getLength('height', this.getVHeight(), 1.2 * (bBox[3] - bBox[1]));\n      } else {\n        x = this.getLength('x', this.getVWidth(), -0.1) * (bBox[2] - bBox[0]) + bBox[0];\n        y = this.getLength('y', this.getVHeight(), -0.1) * (bBox[3] - bBox[1]) + bBox[1];\n        w = this.getLength('width', this.getVWidth(), 1.2) * (bBox[2] - bBox[0]);\n        h = this.getLength('height', this.getVHeight(), 1.2) * (bBox[3] - bBox[1]);\n      }\n      doc.rect(x, y, w, h).clip();\n      if (this.attr('maskContentUnits') === 'objectBoundingBox') {\n        doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\n      }\n      this.clip();\n      this.drawChildren(false, true);\n      doc.restore();\n      docEndGroup(group);\n      docApplyMask(group, true);\n    };\n  };\n  var SvgElemTextContainer = function SvgElemTextContainer(obj, inherits) {\n    SvgElemStylable.call(this, obj, inherits);\n    this.allowedChildren = ['tspan', '#text', '#cdata-section', 'a'];\n    this.isText = true;\n    this.getBoundingShape = function () {\n      var shape = new SvgShape();\n      for (var i = 0; i < this._pos.length; i++) {\n        var pos = this._pos[i];\n        if (!pos.hidden) {\n          var dx0 = pos.ascent * Math.sin(pos.rotate),\n            dy0 = -pos.ascent * Math.cos(pos.rotate),\n            dx1 = pos.descent * Math.sin(pos.rotate),\n            dy1 = -pos.descent * Math.cos(pos.rotate),\n            dx2 = pos.width * Math.cos(pos.rotate),\n            dy2 = pos.width * Math.sin(pos.rotate);\n          shape.M(pos.x + dx0, pos.y + dy0).L(pos.x + dx0 + dx2, pos.y + dy0 + dy2).M(pos.x + dx1 + dx2, pos.y + dy1 + dy2).L(pos.x + dx1, pos.y + dy1);\n        }\n      }\n      return shape;\n    };\n    this.drawTextInDocument = function (isClip, isMask) {\n      if (this.link && !isClip && !isMask) {\n        this.addLink();\n      }\n      if (this.get('text-decoration') === 'underline') {\n        this.decorate(0.05 * this._font.size, -0.075 * this._font.size, isClip, isMask);\n      }\n      if (this.get('text-decoration') === 'overline') {\n        this.decorate(0.05 * this._font.size, getAscent(this._font.font, this._font.size) + 0.075 * this._font.size, isClip, isMask);\n      }\n      var fill = this.getFill(isClip, isMask),\n        stroke = this.getStroke(isClip, isMask),\n        strokeWidth = this.get('stroke-width');\n      if (this._font.fauxBold) {\n        if (!stroke) {\n          stroke = fill;\n          strokeWidth = this._font.size * 0.03;\n        } else {\n          strokeWidth += this._font.size * 0.03;\n        }\n      }\n      var children = this.getChildren();\n      for (var i = 0; i < children.length; i++) {\n        var childElem = children[i];\n        switch (childElem.name) {\n          case 'tspan':\n          case 'textPath':\n          case 'a':\n            if (childElem.get('display') !== 'none') {\n              childElem.drawTextInDocument(isClip, isMask);\n            }\n            break;\n          case '#text':\n          case '#cdata-section':\n            if (this.get('visibility') === 'hidden') {\n              continue;\n            }\n            if (fill || stroke || isClip) {\n              if (fill) {\n                docFillColor(fill);\n              }\n              if (stroke && strokeWidth) {\n                docStrokeColor(stroke);\n                doc.lineWidth(strokeWidth).miterLimit(this.get('stroke-miterlimit')).lineJoin(this.get('stroke-linejoin')).lineCap(this.get('stroke-linecap')).dash(this.get('stroke-dasharray'), {\n                  phase: this.get('stroke-dashoffset')\n                });\n              }\n              docBeginText(this._font.font, this._font.size);\n              docSetTextMode(!!fill, !!stroke);\n              for (var j = 0, pos = childElem._pos; j < pos.length; j++) {\n                if (!pos[j].hidden && isNotEqual(pos[j].width, 0)) {\n                  var cos = Math.cos(pos[j].rotate),\n                    sin = Math.sin(pos[j].rotate),\n                    skew = this._font.fauxItalic ? -0.25 : 0;\n                  docSetTextMatrix(cos * pos[j].scale, sin * pos[j].scale, cos * skew - sin, sin * skew + cos, pos[j].x, pos[j].y);\n                  docWriteGlyph(pos[j].glyph);\n                }\n              }\n              docEndText();\n            }\n            break;\n        }\n      }\n      if (this.get('text-decoration') === 'line-through') {\n        this.decorate(0.05 * this._font.size, 0.5 * (getAscent(this._font.font, this._font.size) + getDescent(this._font.font, this._font.size)), isClip, isMask);\n      }\n    };\n    this.decorate = function (lineWidth, linePosition, isClip, isMask) {\n      var fill = this.getFill(isClip, isMask),\n        stroke = this.getStroke(isClip, isMask);\n      if (fill) {\n        docFillColor(fill);\n      }\n      if (stroke) {\n        docStrokeColor(stroke);\n        doc.lineWidth(this.get('stroke-width')).miterLimit(this.get('stroke-miterlimit')).lineJoin(this.get('stroke-linejoin')).lineCap(this.get('stroke-linecap')).dash(this.get('stroke-dasharray'), {\n          phase: this.get('stroke-dashoffset')\n        });\n      }\n      for (var j = 0, pos = this._pos; j < pos.length; j++) {\n        if (!pos[j].hidden && isNotEqual(pos[j].width, 0)) {\n          var dx0 = (linePosition + lineWidth / 2) * Math.sin(pos[j].rotate),\n            dy0 = -(linePosition + lineWidth / 2) * Math.cos(pos[j].rotate),\n            dx1 = (linePosition - lineWidth / 2) * Math.sin(pos[j].rotate),\n            dy1 = -(linePosition - lineWidth / 2) * Math.cos(pos[j].rotate),\n            dx2 = pos[j].width * Math.cos(pos[j].rotate),\n            dy2 = pos[j].width * Math.sin(pos[j].rotate);\n          new SvgShape().M(pos[j].x + dx0, pos[j].y + dy0).L(pos[j].x + dx0 + dx2, pos[j].y + dy0 + dy2).L(pos[j].x + dx1 + dx2, pos[j].y + dy1 + dy2).L(pos[j].x + dx1, pos[j].y + dy1).Z().insertInDocument();\n          if (fill && stroke) {\n            doc.fillAndStroke();\n          } else if (fill) {\n            doc.fill();\n          } else if (stroke) {\n            doc.stroke();\n          }\n        }\n      }\n    };\n  };\n  var SvgElemTextNode = function SvgElemTextNode(obj, inherits) {\n    this.name = obj.nodeName;\n    this.textContent = obj.nodeValue;\n  };\n  var SvgElemTspan = function SvgElemTspan(obj, inherits) {\n    SvgElemTextContainer.call(this, obj, inherits);\n  };\n  var SvgElemTextPath = function SvgElemTextPath(obj, inherits) {\n    SvgElemTextContainer.call(this, obj, inherits);\n    var pathObject, pathLength, temp;\n    if ((temp = this.attr('path')) && temp.trim() !== '') {\n      var _pathLength = this.getLength('pathLength', this.getViewport());\n      this.pathObject = new SvgShape().path(temp);\n      this.pathLength = _pathLength > 0 ? _pathLength : this.pathObject.totalLength;\n      this.pathScale = this.pathObject.totalLength / this.pathLength;\n    } else if ((temp = this.getUrl('href') || this.getUrl('xlink:href')) && temp.nodeName === 'path') {\n      var pathElem = new SvgElemPath(temp, this);\n      this.pathObject = pathElem.shape.clone().transform(pathElem.get('transform'));\n      this.pathLength = this.chooseValue(pathElem.pathLength, this.pathObject.totalLength);\n      this.pathScale = this.pathObject.totalLength / this.pathLength;\n    }\n  };\n  var SvgElemText = function SvgElemText(obj, inherits) {\n    SvgElemTextContainer.call(this, obj, inherits);\n    this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\n    (function (textParentElem) {\n      var processedText = '',\n        remainingText = obj.textContent,\n        textPaths = [],\n        currentChunk = [],\n        currentAnchor,\n        currentDirection,\n        currentX = 0,\n        currentY = 0;\n      function doAnchoring() {\n        if (currentChunk.length) {\n          var last = currentChunk[currentChunk.length - 1];\n          var first = currentChunk[0];\n          var width = last.x + last.width - first.x;\n          var anchordx = {\n            'startltr': 0,\n            'middleltr': 0.5,\n            'endltr': 1,\n            'startrtl': 1,\n            'middlertl': 0.5,\n            'endrtl': 0\n          }[currentAnchor + currentDirection] * width || 0;\n          for (var i = 0; i < currentChunk.length; i++) {\n            currentChunk[i].x -= anchordx;\n          }\n        }\n        currentChunk = [];\n      }\n      function adjustLength(pos, length, spacingAndGlyphs) {\n        var firstChar = pos[0],\n          lastChar = pos[pos.length - 1],\n          startX = firstChar.x,\n          endX = lastChar.x + lastChar.width;\n        if (spacingAndGlyphs) {\n          var textScale = length / (endX - startX);\n          if (textScale > 0 && textScale < Infinity) {\n            for (var j = 0; j < pos.length; j++) {\n              pos[j].x = startX + textScale * (pos[j].x - startX);\n              pos[j].scale *= textScale;\n              pos[j].width *= textScale;\n            }\n          }\n        } else {\n          if (pos.length >= 2) {\n            var spaceDiff = (length - (endX - startX)) / (pos.length - 1);\n            for (var _j4 = 0; _j4 < pos.length; _j4++) {\n              pos[_j4].x += _j4 * spaceDiff;\n            }\n          }\n        }\n        currentX += length - (endX - startX);\n      }\n      function recursive(currentElem, parentElem) {\n        currentElem._x = combineArrays(currentElem.getLengthList('x', currentElem.getVWidth()), parentElem ? parentElem._x.slice(parentElem._pos.length) : []);\n        currentElem._y = combineArrays(currentElem.getLengthList('y', currentElem.getVHeight()), parentElem ? parentElem._y.slice(parentElem._pos.length) : []);\n        currentElem._dx = combineArrays(currentElem.getLengthList('dx', currentElem.getVWidth()), parentElem ? parentElem._dx.slice(parentElem._pos.length) : []);\n        currentElem._dy = combineArrays(currentElem.getLengthList('dy', currentElem.getVHeight()), parentElem ? parentElem._dy.slice(parentElem._pos.length) : []);\n        currentElem._rot = combineArrays(currentElem.getNumberList('rotate'), parentElem ? parentElem._rot.slice(parentElem._pos.length) : []);\n        currentElem._defRot = currentElem.chooseValue(currentElem._rot[currentElem._rot.length - 1], parentElem && parentElem._defRot, 0);\n        if (currentElem.name === 'textPath') {\n          currentElem._y = [];\n        }\n        var fontOptions = {\n            fauxItalic: false,\n            fauxBold: false\n          },\n          fontNameorLink = fontCallback(currentElem.get('font-family'), currentElem.get('font-weight') === 'bold', currentElem.get('font-style') === 'italic', fontOptions);\n        try {\n          doc.font(fontNameorLink);\n        } catch (e) {\n          warningCallback('SVGElemText: failed to open font \"' + fontNameorLink + '\" in PDFKit');\n        }\n        currentElem._pos = [];\n        currentElem._index = 0;\n        currentElem._font = {\n          font: doc._font,\n          size: currentElem.get('font-size'),\n          fauxItalic: fontOptions.fauxItalic,\n          fauxBold: fontOptions.fauxBold\n        };\n        var textLength = currentElem.getLength('textLength', currentElem.getVWidth(), undefined),\n          spacingAndGlyphs = currentElem.attr('lengthAdjust') === 'spacingAndGlyphs',\n          wordSpacing = currentElem.get('word-spacing'),\n          letterSpacing = currentElem.get('letter-spacing'),\n          textAnchor = currentElem.get('text-anchor'),\n          textDirection = currentElem.get('direction'),\n          baseline = getBaseline(currentElem._font.font, currentElem._font.size, currentElem.get('alignment-baseline') || currentElem.get('dominant-baseline'), currentElem.get('baseline-shift'));\n        if (currentElem.name === 'textPath') {\n          doAnchoring();\n          currentX = currentY = 0;\n        }\n        var children = currentElem.getChildren();\n        for (var i = 0; i < children.length; i++) {\n          var childElem = children[i];\n          switch (childElem.name) {\n            case 'tspan':\n            case 'textPath':\n            case 'a':\n              recursive(childElem, currentElem);\n              break;\n            case '#text':\n            case '#cdata-section':\n              var rawText = childElem.textContent,\n                renderedText = rawText,\n                words = void 0;\n              childElem._font = currentElem._font;\n              childElem._pos = [];\n              remainingText = remainingText.substring(rawText.length);\n              if (currentElem.get('xml:space') === 'preserve') {\n                renderedText = renderedText.replace(/[\\s]/g, ' ');\n              } else {\n                renderedText = renderedText.replace(/[\\s]+/g, ' ');\n                if (processedText.match(/[\\s]$|^$/)) {\n                  renderedText = renderedText.replace(/^[\\s]/, '');\n                }\n                if (remainingText.match(/^[\\s]*$/)) {\n                  renderedText = renderedText.replace(/[\\s]$/, '');\n                }\n              }\n              processedText += rawText;\n              if (wordSpacing === 0) {\n                words = [renderedText];\n              } else {\n                words = renderedText.split(/(\\s)/);\n              }\n              for (var w = 0; w < words.length; w++) {\n                var pos = getTextPos(currentElem._font.font, currentElem._font.size, words[w]);\n                for (var j = 0; j < pos.length; j++) {\n                  var index = currentElem._index,\n                    xAttr = currentElem._x[index],\n                    yAttr = currentElem._y[index],\n                    dxAttr = currentElem._dx[index],\n                    dyAttr = currentElem._dy[index],\n                    rotAttr = currentElem._rot[index],\n                    continuous = !(w === 0 && j === 0);\n                  if (xAttr !== undefined) {\n                    continuous = false;\n                    doAnchoring();\n                    currentX = xAttr;\n                  }\n                  if (yAttr !== undefined) {\n                    continuous = false;\n                    doAnchoring();\n                    currentY = yAttr;\n                  }\n                  if (dxAttr !== undefined) {\n                    continuous = false;\n                    currentX += dxAttr;\n                  }\n                  if (dyAttr !== undefined) {\n                    continuous = false;\n                    currentY += dyAttr;\n                  }\n                  if (rotAttr !== undefined || currentElem._defRot !== 0) {\n                    continuous = false;\n                  }\n                  var position = {\n                    glyph: pos[j].glyph,\n                    rotate: Math.PI / 180 * currentElem.chooseValue(rotAttr, currentElem._defRot),\n                    x: currentX + pos[j].xOffset,\n                    y: currentY + baseline + pos[j].yOffset,\n                    width: pos[j].width,\n                    ascent: getAscent(currentElem._font.font, currentElem._font.size),\n                    descent: getDescent(currentElem._font.font, currentElem._font.size),\n                    scale: 1,\n                    hidden: false,\n                    continuous: continuous\n                  };\n                  currentChunk.push(position);\n                  childElem._pos.push(position);\n                  currentElem._pos.push(position);\n                  currentElem._index += pos[j].unicode.length;\n                  if (currentChunk.length === 1) {\n                    currentAnchor = textAnchor;\n                    currentDirection = textDirection;\n                  }\n                  currentX += pos[j].xAdvance + letterSpacing;\n                  currentY += pos[j].yAdvance;\n                }\n                if (words[w] === ' ') {\n                  currentX += wordSpacing;\n                }\n              }\n              break;\n            default:\n              remainingText = remainingText.substring(childElem.textContent.length);\n          }\n        }\n        if (textLength && currentElem._pos.length) {\n          adjustLength(currentElem._pos, textLength, spacingAndGlyphs);\n        }\n        if (currentElem.name === 'textPath' || currentElem.name === 'text') {\n          doAnchoring();\n        }\n        if (currentElem.name === 'textPath') {\n          textPaths.push(currentElem);\n          var pathObject = currentElem.pathObject;\n          if (pathObject) {\n            currentX = pathObject.endPoint[0];\n            currentY = pathObject.endPoint[1];\n          }\n        }\n        if (parentElem) {\n          parentElem._pos = parentElem._pos.concat(currentElem._pos);\n          parentElem._index += currentElem._index;\n        }\n      }\n      function textOnPath(currentElem) {\n        var pathObject = currentElem.pathObject,\n          pathLength = currentElem.pathLength,\n          pathScale = currentElem.pathScale;\n        if (pathObject) {\n          var textOffset = currentElem.getLength('startOffset', pathLength, 0);\n          for (var j = 0; j < currentElem._pos.length; j++) {\n            var charMidX = textOffset + currentElem._pos[j].x + 0.5 * currentElem._pos[j].width;\n            if (charMidX > pathLength || charMidX < 0) {\n              currentElem._pos[j].hidden = true;\n            } else {\n              var pointOnPath = pathObject.getPointAtLength(charMidX * pathScale);\n              if (isNotEqual(pathScale, 1)) {\n                currentElem._pos[j].scale *= pathScale;\n                currentElem._pos[j].width *= pathScale;\n              }\n              currentElem._pos[j].x = pointOnPath[0] - 0.5 * currentElem._pos[j].width * Math.cos(pointOnPath[2]) - currentElem._pos[j].y * Math.sin(pointOnPath[2]);\n              currentElem._pos[j].y = pointOnPath[1] - 0.5 * currentElem._pos[j].width * Math.sin(pointOnPath[2]) + currentElem._pos[j].y * Math.cos(pointOnPath[2]);\n              currentElem._pos[j].rotate = pointOnPath[2] + currentElem._pos[j].rotate;\n              currentElem._pos[j].continuous = false;\n            }\n          }\n        } else {\n          for (var _j5 = 0; _j5 < currentElem._pos.length; _j5++) {\n            currentElem._pos[_j5].hidden = true;\n          }\n        }\n      }\n      recursive(textParentElem, null);\n      for (var i = 0; i < textPaths.length; i++) {\n        textOnPath(textPaths[i]);\n      }\n    })(this);\n    this.getTransformation = function () {\n      return this.get('transform');\n    };\n    this.drawInDocument = function (isClip, isMask) {\n      doc.save();\n      this.transform();\n      this.clip();\n      var masked = this.mask(),\n        group;\n      if (masked) {\n        group = docBeginGroup(getPageBBox());\n      }\n      this.drawTextInDocument(isClip, isMask);\n      if (group) {\n        docEndGroup(group);\n        docInsertGroup(group);\n      }\n      doc.restore();\n    };\n  };\n  options = options || {};\n  var pxToPt = options.assumePt ? 1 : 72 / 96,\n    // 1px = 72/96pt, but only if assumePt is false\n    viewportWidth = (options.width || doc.page.width) / pxToPt,\n    viewportHeight = (options.height || doc.page.height) / pxToPt,\n    preserveAspectRatio = options.preserveAspectRatio || null,\n    // default to null so that the attr can override if not passed\n    useCSS = options.useCSS && typeof SVGElement !== 'undefined' && svg instanceof SVGElement && typeof getComputedStyle === 'function',\n    warningCallback = options.warningCallback,\n    fontCallback = options.fontCallback,\n    imageCallback = options.imageCallback,\n    colorCallback = options.colorCallback,\n    documentCallback = options.documentCallback,\n    precision = Math.ceil(Math.max(1, options.precision)) || 3,\n    groupStack = [],\n    documentCache = {},\n    links = [],\n    styleRules = [];\n  if (typeof warningCallback !== 'function') {\n    warningCallback = function warningCallback(str) {\n      if (typeof console !== undefined && typeof console.warn === 'function') {\n        console.warn(str);\n      }\n    };\n  }\n  if (typeof fontCallback !== 'function') {\n    fontCallback = function fontCallback(family, bold, italic, fontOptions) {\n      // Check if the font is already registered in the document\n      if (bold && italic) {\n        if (doc._registeredFonts.hasOwnProperty(family + '-BoldItalic')) {\n          return family + '-BoldItalic';\n        } else if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\n          fontOptions.fauxBold = true;\n          return family + '-Italic';\n        } else if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\n          fontOptions.fauxItalic = true;\n          return family + '-Bold';\n        } else if (doc._registeredFonts.hasOwnProperty(family)) {\n          fontOptions.fauxBold = true;\n          fontOptions.fauxItalic = true;\n          return family;\n        }\n      }\n      if (bold && !italic) {\n        if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\n          return family + '-Bold';\n        } else if (doc._registeredFonts.hasOwnProperty(family)) {\n          fontOptions.fauxBold = true;\n          return family;\n        }\n      }\n      if (!bold && italic) {\n        if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\n          return family + '-Italic';\n        } else if (doc._registeredFonts.hasOwnProperty(family)) {\n          fontOptions.fauxItalic = true;\n          return family;\n        }\n      }\n      if (!bold && !italic) {\n        if (doc._registeredFonts.hasOwnProperty(family)) {\n          return family;\n        }\n      }\n      // Use standard fonts as fallback\n      if (family.match(/(?:^|,)\\s*serif\\s*$/)) {\n        if (bold && italic) {\n          return 'Times-BoldItalic';\n        }\n        if (bold && !italic) {\n          return 'Times-Bold';\n        }\n        if (!bold && italic) {\n          return 'Times-Italic';\n        }\n        if (!bold && !italic) {\n          return 'Times-Roman';\n        }\n      } else if (family.match(/(?:^|,)\\s*monospace\\s*$/)) {\n        if (bold && italic) {\n          return 'Courier-BoldOblique';\n        }\n        if (bold && !italic) {\n          return 'Courier-Bold';\n        }\n        if (!bold && italic) {\n          return 'Courier-Oblique';\n        }\n        if (!bold && !italic) {\n          return 'Courier';\n        }\n      } else if (family.match(/(?:^|,)\\s*sans-serif\\s*$/) || true) {\n        if (bold && italic) {\n          return 'Helvetica-BoldOblique';\n        }\n        if (bold && !italic) {\n          return 'Helvetica-Bold';\n        }\n        if (!bold && italic) {\n          return 'Helvetica-Oblique';\n        }\n        if (!bold && !italic) {\n          return 'Helvetica';\n        }\n      }\n    };\n  }\n  if (typeof imageCallback !== 'function') {\n    imageCallback = function imageCallback(link) {\n      return link.replace(/\\s+/g, '');\n    };\n  }\n  if (typeof colorCallback !== 'function') {\n    colorCallback = null;\n  } else {\n    for (var color in DefaultColors) {\n      var newColor = colorCallback(DefaultColors[color]);\n      DefaultColors[color][0] = newColor[0];\n      DefaultColors[color][1] = newColor[1];\n    }\n  }\n  if (typeof documentCallback !== 'function') {\n    documentCallback = null;\n  }\n  if (typeof svg === 'string') {\n    svg = parseXml(svg);\n  }\n  if (svg) {\n    var styles = svg.getElementsByTagName('style');\n    for (var i = 0; i < styles.length; i++) {\n      styleRules = styleRules.concat(parseStyleSheet(styles[i].textContent));\n    }\n    var elem = createSVGElement(svg, null);\n    if (typeof elem.drawInDocument === 'function') {\n      if (options.useCSS && !useCSS) {\n        warningCallback('SVGtoPDF: useCSS option can only be used for SVG *elements* in compatible browsers');\n      }\n      var savedFillColor = doc._fillColor;\n      doc.save().translate(x || 0, y || 0).scale(pxToPt);\n      elem.drawInDocument();\n      for (var _i8 = 0; _i8 < links.length; _i8++) {\n        doc.page.annotations.push(links[_i8]);\n      }\n      doc.restore();\n      doc._fillColor = savedFillColor;\n    } else {\n      warningCallback('SVGtoPDF: this element can\\'t be rendered directly: ' + svg.nodeName);\n    }\n  } else {\n    warningCallback('SVGtoPDF: the input does not look like a valid SVG');\n  }\n};\nif ( true && module && typeof module.exports !== 'undefined') {\n  module.exports = SVGtoPDF;\n}\n\n/***/ }),\n\n/***/ 9742:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(\n      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n    ))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n\n\n/***/ }),\n\n/***/ 4181:\n/***/ (function(module) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Bit reading helpers\n*/\n\nvar BROTLI_READ_SIZE = 4096;\nvar BROTLI_IBUF_SIZE =  (2 * BROTLI_READ_SIZE + 32);\nvar BROTLI_IBUF_MASK =  (2 * BROTLI_READ_SIZE - 1);\n\nvar kBitMask = new Uint32Array([\n  0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767,\n  65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215\n]);\n\n/* Input byte buffer, consist of a ringbuffer and a \"slack\" region where */\n/* bytes from the start of the ringbuffer are copied. */\nfunction BrotliBitReader(input) {\n  this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE);\n  this.input_ = input;    /* input callback */\n  \n  this.reset();\n}\n\nBrotliBitReader.READ_SIZE = BROTLI_READ_SIZE;\nBrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK;\n\nBrotliBitReader.prototype.reset = function() {\n  this.buf_ptr_ = 0;      /* next input will write here */\n  this.val_ = 0;          /* pre-fetched bits */\n  this.pos_ = 0;          /* byte position in stream */\n  this.bit_pos_ = 0;      /* current bit-reading position in val_ */\n  this.bit_end_pos_ = 0;  /* bit-reading end position from LSB of val_ */\n  this.eos_ = 0;          /* input stream is finished */\n  \n  this.readMoreInput();\n  for (var i = 0; i < 4; i++) {\n    this.val_ |= this.buf_[this.pos_] << (8 * i);\n    ++this.pos_;\n  }\n  \n  return this.bit_end_pos_ > 0;\n};\n\n/* Fills up the input ringbuffer by calling the input callback.\n\n   Does nothing if there are at least 32 bytes present after current position.\n\n   Returns 0 if either:\n    - the input callback returned an error, or\n    - there is no more input and the position is past the end of the stream.\n\n   After encountering the end of the input stream, 32 additional zero bytes are\n   copied to the ringbuffer, therefore it is safe to call this function after\n   every 32 bytes of input is read.\n*/\nBrotliBitReader.prototype.readMoreInput = function() {\n  if (this.bit_end_pos_ > 256) {\n    return;\n  } else if (this.eos_) {\n    if (this.bit_pos_ > this.bit_end_pos_)\n      throw new Error('Unexpected end of input ' + this.bit_pos_ + ' ' + this.bit_end_pos_);\n  } else {\n    var dst = this.buf_ptr_;\n    var bytes_read = this.input_.read(this.buf_, dst, BROTLI_READ_SIZE);\n    if (bytes_read < 0) {\n      throw new Error('Unexpected end of input');\n    }\n    \n    if (bytes_read < BROTLI_READ_SIZE) {\n      this.eos_ = 1;\n      /* Store 32 bytes of zero after the stream end. */\n      for (var p = 0; p < 32; p++)\n        this.buf_[dst + bytes_read + p] = 0;\n    }\n    \n    if (dst === 0) {\n      /* Copy the head of the ringbuffer to the slack region. */\n      for (var p = 0; p < 32; p++)\n        this.buf_[(BROTLI_READ_SIZE << 1) + p] = this.buf_[p];\n\n      this.buf_ptr_ = BROTLI_READ_SIZE;\n    } else {\n      this.buf_ptr_ = 0;\n    }\n    \n    this.bit_end_pos_ += bytes_read << 3;\n  }\n};\n\n/* Guarantees that there are at least 24 bits in the buffer. */\nBrotliBitReader.prototype.fillBitWindow = function() {    \n  while (this.bit_pos_ >= 8) {\n    this.val_ >>>= 8;\n    this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24;\n    ++this.pos_;\n    this.bit_pos_ = this.bit_pos_ - 8 >>> 0;\n    this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0;\n  }\n};\n\n/* Reads the specified number of bits from Read Buffer. */\nBrotliBitReader.prototype.readBits = function(n_bits) {\n  if (32 - this.bit_pos_ < n_bits) {\n    this.fillBitWindow();\n  }\n  \n  var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]);\n  this.bit_pos_ += n_bits;\n  return val;\n};\n\nmodule.exports = BrotliBitReader;\n\n\n/***/ }),\n\n/***/ 7080:\n/***/ (function(__unused_webpack_module, exports) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Lookup table to map the previous two bytes to a context id.\n\n   There are four different context modeling modes defined here:\n     CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,\n     CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,\n     CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,\n     CONTEXT_SIGNED: second-order context model tuned for signed integers.\n\n   The context id for the UTF8 context model is calculated as follows. If p1\n   and p2 are the previous two bytes, we calcualte the context as\n\n     context = kContextLookup[p1] | kContextLookup[p2 + 256].\n\n   If the previous two bytes are ASCII characters (i.e. < 128), this will be\n   equivalent to\n\n     context = 4 * context1(p1) + context2(p2),\n\n   where context1 is based on the previous byte in the following way:\n\n     0  : non-ASCII control\n     1  : \\t, \\n, \\r\n     2  : space\n     3  : other punctuation\n     4  : \" '\n     5  : %\n     6  : ( < [ {\n     7  : ) > ] }\n     8  : , ; :\n     9  : .\n     10 : =\n     11 : number\n     12 : upper-case vowel\n     13 : upper-case consonant\n     14 : lower-case vowel\n     15 : lower-case consonant\n\n   and context2 is based on the second last byte:\n\n     0 : control, space\n     1 : punctuation\n     2 : upper-case letter, number\n     3 : lower-case letter\n\n   If the last byte is ASCII, and the second last byte is not (in a valid UTF8\n   stream it will be a continuation byte, value between 128 and 191), the\n   context is the same as if the second last byte was an ASCII control or space.\n\n   If the last byte is a UTF8 lead byte (value >= 192), then the next byte will\n   be a continuation byte and the context id is 2 or 3 depending on the LSB of\n   the last byte and to a lesser extent on the second last byte if it is ASCII.\n\n   If the last byte is a UTF8 continuation byte, the second last byte can be:\n     - continuation byte: the next byte is probably ASCII or lead byte (assuming\n       4-byte UTF8 characters are rare) and the context id is 0 or 1.\n     - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1\n     - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3\n\n   The possible value combinations of the previous two bytes, the range of\n   context ids and the type of the next byte is summarized in the table below:\n\n   |--------\\-----------------------------------------------------------------|\n   |         \\                         Last byte                              |\n   | Second   \\---------------------------------------------------------------|\n   | last byte \\    ASCII            |   cont. byte        |   lead byte      |\n   |            \\   (0-127)          |   (128-191)         |   (192-)         |\n   |=============|===================|=====================|==================|\n   |  ASCII      | next: ASCII/lead  |  not valid          |  next: cont.     |\n   |  (0-127)    | context: 4 - 63   |                     |  context: 2 - 3  |\n   |-------------|-------------------|---------------------|------------------|\n   |  cont. byte | next: ASCII/lead  |  next: ASCII/lead   |  next: cont.     |\n   |  (128-191)  | context: 4 - 63   |  context: 0 - 1     |  context: 2 - 3  |\n   |-------------|-------------------|---------------------|------------------|\n   |  lead byte  | not valid         |  next: ASCII/lead   |  not valid       |\n   |  (192-207)  |                   |  context: 0 - 1     |                  |\n   |-------------|-------------------|---------------------|------------------|\n   |  lead byte  | not valid         |  next: cont.        |  not valid       |\n   |  (208-)     |                   |  context: 2 - 3     |                  |\n   |-------------|-------------------|---------------------|------------------|\n\n   The context id for the signed context mode is calculated as:\n\n     context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2].\n\n   For any context modeling modes, the context ids can be calculated by |-ing\n   together two lookups from one table using context model dependent offsets:\n\n     context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2].\n\n   where offset1 and offset2 are dependent on the context mode.\n*/\n\nvar CONTEXT_LSB6         = 0;\nvar CONTEXT_MSB6         = 1;\nvar CONTEXT_UTF8         = 2;\nvar CONTEXT_SIGNED       = 3;\n\n/* Common context lookup table for all context modes. */\nexports.lookup = new Uint8Array([\n  /* CONTEXT_UTF8, last byte. */\n  /* ASCII range. */\n   0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  4,  0,  0,  4,  0,  0,\n   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,\n   8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,\n  44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,\n  12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,\n  52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,\n  12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,\n  60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12,  0,\n  /* UTF8 continuation byte range. */\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  /* UTF8 lead byte range. */\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  /* CONTEXT_UTF8 second last byte. */\n  /* ASCII range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,\n  1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,\n  1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,\n  /* UTF8 continuation byte range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* UTF8 lead byte range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  /* CONTEXT_SIGNED, second last byte. */\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,\n  /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */\n   0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,\n  /* CONTEXT_LSB6, last byte. */\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n  /* CONTEXT_MSB6, last byte. */\n   0,  0,  0,  0,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,\n   4,  4,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,\n   8,  8,  8,  8,  9,  9,  9,  9, 10, 10, 10, 10, 11, 11, 11, 11,\n  12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,\n  16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,\n  20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,\n  24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,\n  28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,\n  32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,\n  36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,\n  40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,\n  44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,\n  48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,\n  52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,\n  56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,\n  60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,\n  /* CONTEXT_{M,L}SB6, second last byte, */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n]);\n\nexports.lookupOffsets = new Uint16Array([\n  /* CONTEXT_LSB6 */\n  1024, 1536,\n  /* CONTEXT_MSB6 */\n  1280, 1536,\n  /* CONTEXT_UTF8 */\n  0, 256,\n  /* CONTEXT_SIGNED */\n  768, 512,\n]);\n\n\n/***/ }),\n\n/***/ 6450:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar __webpack_unused_export__;\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n*/\n\nvar BrotliInput = (__webpack_require__(6154)/* .BrotliInput */ .g);\nvar BrotliOutput = (__webpack_require__(6154)/* .BrotliOutput */ .j);\nvar BrotliBitReader = __webpack_require__(4181);\nvar BrotliDictionary = __webpack_require__(5139);\nvar HuffmanCode = (__webpack_require__(966)/* .HuffmanCode */ .h);\nvar BrotliBuildHuffmanTable = (__webpack_require__(966)/* .BrotliBuildHuffmanTable */ .g);\nvar Context = __webpack_require__(7080);\nvar Prefix = __webpack_require__(8435);\nvar Transform = __webpack_require__(2973);\n\nvar kDefaultCodeLength = 8;\nvar kCodeLengthRepeatCode = 16;\nvar kNumLiteralCodes = 256;\nvar kNumInsertAndCopyCodes = 704;\nvar kNumBlockLengthCodes = 26;\nvar kLiteralContextBits = 6;\nvar kDistanceContextBits = 2;\n\nvar HUFFMAN_TABLE_BITS = 8;\nvar HUFFMAN_TABLE_MASK = 0xff;\n/* Maximum possible Huffman table size for an alphabet size of 704, max code\n * length 15 and root table bits 8. */\nvar HUFFMAN_MAX_TABLE_SIZE = 1080;\n\nvar CODE_LENGTH_CODES = 18;\nvar kCodeLengthCodeOrder = new Uint8Array([\n  1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n]);\n\nvar NUM_DISTANCE_SHORT_CODES = 16;\nvar kDistanceShortCodeIndexOffset = new Uint8Array([\n  3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2\n]);\n\nvar kDistanceShortCodeValueOffset = new Int8Array([\n  0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3\n]);\n\nvar kMaxHuffmanTableSize = new Uint16Array([\n  256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,\n  854, 886, 920, 952, 984, 1016, 1048, 1080\n]);\n\nfunction DecodeWindowBits(br) {\n  var n;\n  if (br.readBits(1) === 0) {\n    return 16;\n  }\n  \n  n = br.readBits(3);\n  if (n > 0) {\n    return 17 + n;\n  }\n  \n  n = br.readBits(3);\n  if (n > 0) {\n    return 8 + n;\n  }\n  \n  return 17;\n}\n\n/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */\nfunction DecodeVarLenUint8(br) {\n  if (br.readBits(1)) {\n    var nbits = br.readBits(3);\n    if (nbits === 0) {\n      return 1;\n    } else {\n      return br.readBits(nbits) + (1 << nbits);\n    }\n  }\n  return 0;\n}\n\nfunction MetaBlockLength() {\n  this.meta_block_length = 0;\n  this.input_end = 0;\n  this.is_uncompressed = 0;\n  this.is_metadata = false;\n}\n\nfunction DecodeMetaBlockLength(br) {\n  var out = new MetaBlockLength;  \n  var size_nibbles;\n  var size_bytes;\n  var i;\n  \n  out.input_end = br.readBits(1);\n  if (out.input_end && br.readBits(1)) {\n    return out;\n  }\n  \n  size_nibbles = br.readBits(2) + 4;\n  if (size_nibbles === 7) {\n    out.is_metadata = true;\n    \n    if (br.readBits(1) !== 0)\n      throw new Error('Invalid reserved bit');\n    \n    size_bytes = br.readBits(2);\n    if (size_bytes === 0)\n      return out;\n    \n    for (i = 0; i < size_bytes; i++) {\n      var next_byte = br.readBits(8);\n      if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0)\n        throw new Error('Invalid size byte');\n      \n      out.meta_block_length |= next_byte << (i * 8);\n    }\n  } else {\n    for (i = 0; i < size_nibbles; ++i) {\n      var next_nibble = br.readBits(4);\n      if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0)\n        throw new Error('Invalid size nibble');\n      \n      out.meta_block_length |= next_nibble << (i * 4);\n    }\n  }\n  \n  ++out.meta_block_length;\n  \n  if (!out.input_end && !out.is_metadata) {\n    out.is_uncompressed = br.readBits(1);\n  }\n  \n  return out;\n}\n\n/* Decodes the next Huffman code from bit-stream. */\nfunction ReadSymbol(table, index, br) {\n  var start_index = index;\n  \n  var nbits;\n  br.fillBitWindow();\n  index += (br.val_ >>> br.bit_pos_) & HUFFMAN_TABLE_MASK;\n  nbits = table[index].bits - HUFFMAN_TABLE_BITS;\n  if (nbits > 0) {\n    br.bit_pos_ += HUFFMAN_TABLE_BITS;\n    index += table[index].value;\n    index += (br.val_ >>> br.bit_pos_) & ((1 << nbits) - 1);\n  }\n  br.bit_pos_ += table[index].bits;\n  return table[index].value;\n}\n\nfunction ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) {\n  var symbol = 0;\n  var prev_code_len = kDefaultCodeLength;\n  var repeat = 0;\n  var repeat_code_len = 0;\n  var space = 32768;\n  \n  var table = [];\n  for (var i = 0; i < 32; i++)\n    table.push(new HuffmanCode(0, 0));\n  \n  BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES);\n\n  while (symbol < num_symbols && space > 0) {\n    var p = 0;\n    var code_len;\n    \n    br.readMoreInput();\n    br.fillBitWindow();\n    p += (br.val_ >>> br.bit_pos_) & 31;\n    br.bit_pos_ += table[p].bits;\n    code_len = table[p].value & 0xff;\n    if (code_len < kCodeLengthRepeatCode) {\n      repeat = 0;\n      code_lengths[symbol++] = code_len;\n      if (code_len !== 0) {\n        prev_code_len = code_len;\n        space -= 32768 >> code_len;\n      }\n    } else {\n      var extra_bits = code_len - 14;\n      var old_repeat;\n      var repeat_delta;\n      var new_len = 0;\n      if (code_len === kCodeLengthRepeatCode) {\n        new_len = prev_code_len;\n      }\n      if (repeat_code_len !== new_len) {\n        repeat = 0;\n        repeat_code_len = new_len;\n      }\n      old_repeat = repeat;\n      if (repeat > 0) {\n        repeat -= 2;\n        repeat <<= extra_bits;\n      }\n      repeat += br.readBits(extra_bits) + 3;\n      repeat_delta = repeat - old_repeat;\n      if (symbol + repeat_delta > num_symbols) {\n        throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols');\n      }\n      \n      for (var x = 0; x < repeat_delta; x++)\n        code_lengths[symbol + x] = repeat_code_len;\n      \n      symbol += repeat_delta;\n      \n      if (repeat_code_len !== 0) {\n        space -= repeat_delta << (15 - repeat_code_len);\n      }\n    }\n  }\n  if (space !== 0) {\n    throw new Error(\"[ReadHuffmanCodeLengths] space = \" + space);\n  }\n  \n  for (; symbol < num_symbols; symbol++)\n    code_lengths[symbol] = 0;\n}\n\nfunction ReadHuffmanCode(alphabet_size, tables, table, br) {\n  var table_size = 0;\n  var simple_code_or_skip;\n  var code_lengths = new Uint8Array(alphabet_size);\n  \n  br.readMoreInput();\n  \n  /* simple_code_or_skip is used as follows:\n     1 for simple code;\n     0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */\n  simple_code_or_skip = br.readBits(2);\n  if (simple_code_or_skip === 1) {\n    /* Read symbols, codes & code lengths directly. */\n    var i;\n    var max_bits_counter = alphabet_size - 1;\n    var max_bits = 0;\n    var symbols = new Int32Array(4);\n    var num_symbols = br.readBits(2) + 1;\n    while (max_bits_counter) {\n      max_bits_counter >>= 1;\n      ++max_bits;\n    }\n\n    for (i = 0; i < num_symbols; ++i) {\n      symbols[i] = br.readBits(max_bits) % alphabet_size;\n      code_lengths[symbols[i]] = 2;\n    }\n    code_lengths[symbols[0]] = 1;\n    switch (num_symbols) {\n      case 1:\n        break;\n      case 3:\n        if ((symbols[0] === symbols[1]) ||\n            (symbols[0] === symbols[2]) ||\n            (symbols[1] === symbols[2])) {\n          throw new Error('[ReadHuffmanCode] invalid symbols');\n        }\n        break;\n      case 2:\n        if (symbols[0] === symbols[1]) {\n          throw new Error('[ReadHuffmanCode] invalid symbols');\n        }\n        \n        code_lengths[symbols[1]] = 1;\n        break;\n      case 4:\n        if ((symbols[0] === symbols[1]) ||\n            (symbols[0] === symbols[2]) ||\n            (symbols[0] === symbols[3]) ||\n            (symbols[1] === symbols[2]) ||\n            (symbols[1] === symbols[3]) ||\n            (symbols[2] === symbols[3])) {\n          throw new Error('[ReadHuffmanCode] invalid symbols');\n        }\n        \n        if (br.readBits(1)) {\n          code_lengths[symbols[2]] = 3;\n          code_lengths[symbols[3]] = 3;\n        } else {\n          code_lengths[symbols[0]] = 2;\n        }\n        break;\n    }\n  } else {  /* Decode Huffman-coded code lengths. */\n    var i;\n    var code_length_code_lengths = new Uint8Array(CODE_LENGTH_CODES);\n    var space = 32;\n    var num_codes = 0;\n    /* Static Huffman code for the code length code lengths */\n    var huff = [\n      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), \n      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1),\n      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), \n      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5)\n    ];\n    for (i = simple_code_or_skip; i < CODE_LENGTH_CODES && space > 0; ++i) {\n      var code_len_idx = kCodeLengthCodeOrder[i];\n      var p = 0;\n      var v;\n      br.fillBitWindow();\n      p += (br.val_ >>> br.bit_pos_) & 15;\n      br.bit_pos_ += huff[p].bits;\n      v = huff[p].value;\n      code_length_code_lengths[code_len_idx] = v;\n      if (v !== 0) {\n        space -= (32 >> v);\n        ++num_codes;\n      }\n    }\n    \n    if (!(num_codes === 1 || space === 0))\n      throw new Error('[ReadHuffmanCode] invalid num_codes or space');\n    \n    ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br);\n  }\n  \n  table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size);\n  \n  if (table_size === 0) {\n    throw new Error(\"[ReadHuffmanCode] BuildHuffmanTable failed: \");\n  }\n  \n  return table_size;\n}\n\nfunction ReadBlockLength(table, index, br) {\n  var code;\n  var nbits;\n  code = ReadSymbol(table, index, br);\n  nbits = Prefix.kBlockLengthPrefixCode[code].nbits;\n  return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits);\n}\n\nfunction TranslateShortCodes(code, ringbuffer, index) {\n  var val;\n  if (code < NUM_DISTANCE_SHORT_CODES) {\n    index += kDistanceShortCodeIndexOffset[code];\n    index &= 3;\n    val = ringbuffer[index] + kDistanceShortCodeValueOffset[code];\n  } else {\n    val = code - NUM_DISTANCE_SHORT_CODES + 1;\n  }\n  return val;\n}\n\nfunction MoveToFront(v, index) {\n  var value = v[index];\n  var i = index;\n  for (; i; --i) v[i] = v[i - 1];\n  v[0] = value;\n}\n\nfunction InverseMoveToFrontTransform(v, v_len) {\n  var mtf = new Uint8Array(256);\n  var i;\n  for (i = 0; i < 256; ++i) {\n    mtf[i] = i;\n  }\n  for (i = 0; i < v_len; ++i) {\n    var index = v[i];\n    v[i] = mtf[index];\n    if (index) MoveToFront(mtf, index);\n  }\n}\n\n/* Contains a collection of huffman trees with the same alphabet size. */\nfunction HuffmanTreeGroup(alphabet_size, num_htrees) {\n  this.alphabet_size = alphabet_size;\n  this.num_htrees = num_htrees;\n  this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]);  \n  this.htrees = new Uint32Array(num_htrees);\n}\n\nHuffmanTreeGroup.prototype.decode = function(br) {\n  var i;\n  var table_size;\n  var next = 0;\n  for (i = 0; i < this.num_htrees; ++i) {\n    this.htrees[i] = next;\n    table_size = ReadHuffmanCode(this.alphabet_size, this.codes, next, br);\n    next += table_size;\n  }\n};\n\nfunction DecodeContextMap(context_map_size, br) {\n  var out = { num_htrees: null, context_map: null };\n  var use_rle_for_zeros;\n  var max_run_length_prefix = 0;\n  var table;\n  var i;\n  \n  br.readMoreInput();\n  var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1;\n\n  var context_map = out.context_map = new Uint8Array(context_map_size);\n  if (num_htrees <= 1) {\n    return out;\n  }\n\n  use_rle_for_zeros = br.readBits(1);\n  if (use_rle_for_zeros) {\n    max_run_length_prefix = br.readBits(4) + 1;\n  }\n  \n  table = [];\n  for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) {\n    table[i] = new HuffmanCode(0, 0);\n  }\n  \n  ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br);\n  \n  for (i = 0; i < context_map_size;) {\n    var code;\n\n    br.readMoreInput();\n    code = ReadSymbol(table, 0, br);\n    if (code === 0) {\n      context_map[i] = 0;\n      ++i;\n    } else if (code <= max_run_length_prefix) {\n      var reps = 1 + (1 << code) + br.readBits(code);\n      while (--reps) {\n        if (i >= context_map_size) {\n          throw new Error(\"[DecodeContextMap] i >= context_map_size\");\n        }\n        context_map[i] = 0;\n        ++i;\n      }\n    } else {\n      context_map[i] = code - max_run_length_prefix;\n      ++i;\n    }\n  }\n  if (br.readBits(1)) {\n    InverseMoveToFrontTransform(context_map, context_map_size);\n  }\n  \n  return out;\n}\n\nfunction DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) {\n  var ringbuffer = tree_type * 2;\n  var index = tree_type;\n  var type_code = ReadSymbol(trees, tree_type * HUFFMAN_MAX_TABLE_SIZE, br);\n  var block_type;\n  if (type_code === 0) {\n    block_type = ringbuffers[ringbuffer + (indexes[index] & 1)];\n  } else if (type_code === 1) {\n    block_type = ringbuffers[ringbuffer + ((indexes[index] - 1) & 1)] + 1;\n  } else {\n    block_type = type_code - 2;\n  }\n  if (block_type >= max_block_type) {\n    block_type -= max_block_type;\n  }\n  block_types[tree_type] = block_type;\n  ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type;\n  ++indexes[index];\n}\n\nfunction CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) {\n  var rb_size = ringbuffer_mask + 1;\n  var rb_pos = pos & ringbuffer_mask;\n  var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK;\n  var nbytes;\n\n  /* For short lengths copy byte-by-byte */\n  if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) {\n    while (len-- > 0) {\n      br.readMoreInput();\n      ringbuffer[rb_pos++] = br.readBits(8);\n      if (rb_pos === rb_size) {\n        output.write(ringbuffer, rb_size);\n        rb_pos = 0;\n      }\n    }\n    return;\n  }\n\n  if (br.bit_end_pos_ < 32) {\n    throw new Error('[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32');\n  }\n\n  /* Copy remaining 0-4 bytes from br.val_ to ringbuffer. */\n  while (br.bit_pos_ < 32) {\n    ringbuffer[rb_pos] = (br.val_ >>> br.bit_pos_);\n    br.bit_pos_ += 8;\n    ++rb_pos;\n    --len;\n  }\n\n  /* Copy remaining bytes from br.buf_ to ringbuffer. */\n  nbytes = (br.bit_end_pos_ - br.bit_pos_) >> 3;\n  if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) {\n    var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos;\n    for (var x = 0; x < tail; x++)\n      ringbuffer[rb_pos + x] = br.buf_[br_pos + x];\n    \n    nbytes -= tail;\n    rb_pos += tail;\n    len -= tail;\n    br_pos = 0;\n  }\n\n  for (var x = 0; x < nbytes; x++)\n    ringbuffer[rb_pos + x] = br.buf_[br_pos + x];\n  \n  rb_pos += nbytes;\n  len -= nbytes;\n\n  /* If we wrote past the logical end of the ringbuffer, copy the tail of the\n     ringbuffer to its beginning and flush the ringbuffer to the output. */\n  if (rb_pos >= rb_size) {\n    output.write(ringbuffer, rb_size);\n    rb_pos -= rb_size;    \n    for (var x = 0; x < rb_pos; x++)\n      ringbuffer[x] = ringbuffer[rb_size + x];\n  }\n\n  /* If we have more to copy than the remaining size of the ringbuffer, then we\n     first fill the ringbuffer from the input and then flush the ringbuffer to\n     the output */\n  while (rb_pos + len >= rb_size) {\n    nbytes = rb_size - rb_pos;\n    if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) {\n      throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');\n    }\n    output.write(ringbuffer, rb_size);\n    len -= nbytes;\n    rb_pos = 0;\n  }\n\n  /* Copy straight from the input onto the ringbuffer. The ringbuffer will be\n     flushed to the output at a later time. */\n  if (br.input_.read(ringbuffer, rb_pos, len) < len) {\n    throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');\n  }\n\n  /* Restore the state of the bit reader. */\n  br.reset();\n}\n\n/* Advances the bit reader position to the next byte boundary and verifies\n   that any skipped bits are set to zero. */\nfunction JumpToByteBoundary(br) {\n  var new_bit_pos = (br.bit_pos_ + 7) & ~7;\n  var pad_bits = br.readBits(new_bit_pos - br.bit_pos_);\n  return pad_bits == 0;\n}\n\nfunction BrotliDecompressedSize(buffer) {\n  var input = new BrotliInput(buffer);\n  var br = new BrotliBitReader(input);\n  DecodeWindowBits(br);\n  var out = DecodeMetaBlockLength(br);\n  return out.meta_block_length;\n}\n\n__webpack_unused_export__ = BrotliDecompressedSize;\n\nfunction BrotliDecompressBuffer(buffer, output_size) {\n  var input = new BrotliInput(buffer);\n  \n  if (output_size == null) {\n    output_size = BrotliDecompressedSize(buffer);\n  }\n  \n  var output_buffer = new Uint8Array(output_size);\n  var output = new BrotliOutput(output_buffer);\n  \n  BrotliDecompress(input, output);\n  \n  if (output.pos < output.buffer.length) {\n    output.buffer = output.buffer.subarray(0, output.pos);\n  }\n  \n  return output.buffer;\n}\n\nexports.BrotliDecompressBuffer = BrotliDecompressBuffer;\n\nfunction BrotliDecompress(input, output) {\n  var i;\n  var pos = 0;\n  var input_end = 0;\n  var window_bits = 0;\n  var max_backward_distance;\n  var max_distance = 0;\n  var ringbuffer_size;\n  var ringbuffer_mask;\n  var ringbuffer;\n  var ringbuffer_end;\n  /* This ring buffer holds a few past copy distances that will be used by */\n  /* some special distance codes. */\n  var dist_rb = [ 16, 15, 11, 4 ];\n  var dist_rb_idx = 0;\n  /* The previous 2 bytes used for context. */\n  var prev_byte1 = 0;\n  var prev_byte2 = 0;\n  var hgroup = [new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0)];\n  var block_type_trees;\n  var block_len_trees;\n  var br;\n\n  /* We need the slack region for the following reasons:\n       - always doing two 8-byte copies for fast backward copying\n       - transforms\n       - flushing the input ringbuffer when decoding uncompressed blocks */\n  var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE;\n\n  br = new BrotliBitReader(input);\n\n  /* Decode window size. */\n  window_bits = DecodeWindowBits(br);\n  max_backward_distance = (1 << window_bits) - 16;\n\n  ringbuffer_size = 1 << window_bits;\n  ringbuffer_mask = ringbuffer_size - 1;\n  ringbuffer = new Uint8Array(ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength);\n  ringbuffer_end = ringbuffer_size;\n\n  block_type_trees = [];\n  block_len_trees = [];\n  for (var x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++) {\n    block_type_trees[x] = new HuffmanCode(0, 0);\n    block_len_trees[x] = new HuffmanCode(0, 0);\n  }\n\n  while (!input_end) {\n    var meta_block_remaining_len = 0;\n    var is_uncompressed;\n    var block_length = [ 1 << 28, 1 << 28, 1 << 28 ];\n    var block_type = [ 0 ];\n    var num_block_types = [ 1, 1, 1 ];\n    var block_type_rb = [ 0, 1, 0, 1, 0, 1 ];\n    var block_type_rb_index = [ 0 ];\n    var distance_postfix_bits;\n    var num_direct_distance_codes;\n    var distance_postfix_mask;\n    var num_distance_codes;\n    var context_map = null;\n    var context_modes = null;\n    var num_literal_htrees;\n    var dist_context_map = null;\n    var num_dist_htrees;\n    var context_offset = 0;\n    var context_map_slice = null;\n    var literal_htree_index = 0;\n    var dist_context_offset = 0;\n    var dist_context_map_slice = null;\n    var dist_htree_index = 0;\n    var context_lookup_offset1 = 0;\n    var context_lookup_offset2 = 0;\n    var context_mode;\n    var htree_command;\n\n    for (i = 0; i < 3; ++i) {\n      hgroup[i].codes = null;\n      hgroup[i].htrees = null;\n    }\n\n    br.readMoreInput();\n    \n    var _out = DecodeMetaBlockLength(br);\n    meta_block_remaining_len = _out.meta_block_length;\n    if (pos + meta_block_remaining_len > output.buffer.length) {\n      /* We need to grow the output buffer to fit the additional data. */\n      var tmp = new Uint8Array( pos + meta_block_remaining_len );\n      tmp.set( output.buffer );\n      output.buffer = tmp;\n    }    \n    input_end = _out.input_end;\n    is_uncompressed = _out.is_uncompressed;\n    \n    if (_out.is_metadata) {\n      JumpToByteBoundary(br);\n      \n      for (; meta_block_remaining_len > 0; --meta_block_remaining_len) {\n        br.readMoreInput();\n        /* Read one byte and ignore it. */\n        br.readBits(8);\n      }\n      \n      continue;\n    }\n    \n    if (meta_block_remaining_len === 0) {\n      continue;\n    }\n    \n    if (is_uncompressed) {\n      br.bit_pos_ = (br.bit_pos_ + 7) & ~7;\n      CopyUncompressedBlockToOutput(output, meta_block_remaining_len, pos,\n                                    ringbuffer, ringbuffer_mask, br);\n      pos += meta_block_remaining_len;\n      continue;\n    }\n    \n    for (i = 0; i < 3; ++i) {\n      num_block_types[i] = DecodeVarLenUint8(br) + 1;\n      if (num_block_types[i] >= 2) {\n        ReadHuffmanCode(num_block_types[i] + 2, block_type_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n        ReadHuffmanCode(kNumBlockLengthCodes, block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n        block_length[i] = ReadBlockLength(block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n        block_type_rb_index[i] = 1;\n      }\n    }\n    \n    br.readMoreInput();\n    \n    distance_postfix_bits = br.readBits(2);\n    num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits);\n    distance_postfix_mask = (1 << distance_postfix_bits) - 1;\n    num_distance_codes = (num_direct_distance_codes + (48 << distance_postfix_bits));\n    context_modes = new Uint8Array(num_block_types[0]);\n\n    for (i = 0; i < num_block_types[0]; ++i) {\n       br.readMoreInput();\n       context_modes[i] = (br.readBits(2) << 1);\n    }\n    \n    var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br);\n    num_literal_htrees = _o1.num_htrees;\n    context_map = _o1.context_map;\n    \n    var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br);\n    num_dist_htrees = _o2.num_htrees;\n    dist_context_map = _o2.context_map;\n    \n    hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees);\n    hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]);\n    hgroup[2] = new HuffmanTreeGroup(num_distance_codes, num_dist_htrees);\n\n    for (i = 0; i < 3; ++i) {\n      hgroup[i].decode(br);\n    }\n\n    context_map_slice = 0;\n    dist_context_map_slice = 0;\n    context_mode = context_modes[block_type[0]];\n    context_lookup_offset1 = Context.lookupOffsets[context_mode];\n    context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];\n    htree_command = hgroup[1].htrees[0];\n\n    while (meta_block_remaining_len > 0) {\n      var cmd_code;\n      var range_idx;\n      var insert_code;\n      var copy_code;\n      var insert_length;\n      var copy_length;\n      var distance_code;\n      var distance;\n      var context;\n      var j;\n      var copy_dst;\n\n      br.readMoreInput();\n      \n      if (block_length[1] === 0) {\n        DecodeBlockType(num_block_types[1],\n                        block_type_trees, 1, block_type, block_type_rb,\n                        block_type_rb_index, br);\n        block_length[1] = ReadBlockLength(block_len_trees, HUFFMAN_MAX_TABLE_SIZE, br);\n        htree_command = hgroup[1].htrees[block_type[1]];\n      }\n      --block_length[1];\n      cmd_code = ReadSymbol(hgroup[1].codes, htree_command, br);\n      range_idx = cmd_code >> 6;\n      if (range_idx >= 2) {\n        range_idx -= 2;\n        distance_code = -1;\n      } else {\n        distance_code = 0;\n      }\n      insert_code = Prefix.kInsertRangeLut[range_idx] + ((cmd_code >> 3) & 7);\n      copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7);\n      insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset +\n          br.readBits(Prefix.kInsertLengthPrefixCode[insert_code].nbits);\n      copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset +\n          br.readBits(Prefix.kCopyLengthPrefixCode[copy_code].nbits);\n      prev_byte1 = ringbuffer[pos-1 & ringbuffer_mask];\n      prev_byte2 = ringbuffer[pos-2 & ringbuffer_mask];\n      for (j = 0; j < insert_length; ++j) {\n        br.readMoreInput();\n\n        if (block_length[0] === 0) {\n          DecodeBlockType(num_block_types[0],\n                          block_type_trees, 0, block_type, block_type_rb,\n                          block_type_rb_index, br);\n          block_length[0] = ReadBlockLength(block_len_trees, 0, br);\n          context_offset = block_type[0] << kLiteralContextBits;\n          context_map_slice = context_offset;\n          context_mode = context_modes[block_type[0]];\n          context_lookup_offset1 = Context.lookupOffsets[context_mode];\n          context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];\n        }\n        context = (Context.lookup[context_lookup_offset1 + prev_byte1] |\n                   Context.lookup[context_lookup_offset2 + prev_byte2]);\n        literal_htree_index = context_map[context_map_slice + context];\n        --block_length[0];\n        prev_byte2 = prev_byte1;\n        prev_byte1 = ReadSymbol(hgroup[0].codes, hgroup[0].htrees[literal_htree_index], br);\n        ringbuffer[pos & ringbuffer_mask] = prev_byte1;\n        if ((pos & ringbuffer_mask) === ringbuffer_mask) {\n          output.write(ringbuffer, ringbuffer_size);\n        }\n        ++pos;\n      }\n      meta_block_remaining_len -= insert_length;\n      if (meta_block_remaining_len <= 0) break;\n\n      if (distance_code < 0) {\n        var context;\n        \n        br.readMoreInput();\n        if (block_length[2] === 0) {\n          DecodeBlockType(num_block_types[2],\n                          block_type_trees, 2, block_type, block_type_rb,\n                          block_type_rb_index, br);\n          block_length[2] = ReadBlockLength(block_len_trees, 2 * HUFFMAN_MAX_TABLE_SIZE, br);\n          dist_context_offset = block_type[2] << kDistanceContextBits;\n          dist_context_map_slice = dist_context_offset;\n        }\n        --block_length[2];\n        context = (copy_length > 4 ? 3 : copy_length - 2) & 0xff;\n        dist_htree_index = dist_context_map[dist_context_map_slice + context];\n        distance_code = ReadSymbol(hgroup[2].codes, hgroup[2].htrees[dist_htree_index], br);\n        if (distance_code >= num_direct_distance_codes) {\n          var nbits;\n          var postfix;\n          var offset;\n          distance_code -= num_direct_distance_codes;\n          postfix = distance_code & distance_postfix_mask;\n          distance_code >>= distance_postfix_bits;\n          nbits = (distance_code >> 1) + 1;\n          offset = ((2 + (distance_code & 1)) << nbits) - 4;\n          distance_code = num_direct_distance_codes +\n              ((offset + br.readBits(nbits)) <<\n               distance_postfix_bits) + postfix;\n        }\n      }\n\n      /* Convert the distance code to the actual distance by possibly looking */\n      /* up past distnaces from the ringbuffer. */\n      distance = TranslateShortCodes(distance_code, dist_rb, dist_rb_idx);\n      if (distance < 0) {\n        throw new Error('[BrotliDecompress] invalid distance');\n      }\n\n      if (pos < max_backward_distance &&\n          max_distance !== max_backward_distance) {\n        max_distance = pos;\n      } else {\n        max_distance = max_backward_distance;\n      }\n\n      copy_dst = pos & ringbuffer_mask;\n\n      if (distance > max_distance) {\n        if (copy_length >= BrotliDictionary.minDictionaryWordLength &&\n            copy_length <= BrotliDictionary.maxDictionaryWordLength) {\n          var offset = BrotliDictionary.offsetsByLength[copy_length];\n          var word_id = distance - max_distance - 1;\n          var shift = BrotliDictionary.sizeBitsByLength[copy_length];\n          var mask = (1 << shift) - 1;\n          var word_idx = word_id & mask;\n          var transform_idx = word_id >> shift;\n          offset += word_idx * copy_length;\n          if (transform_idx < Transform.kNumTransforms) {\n            var len = Transform.transformDictionaryWord(ringbuffer, copy_dst, offset, copy_length, transform_idx);\n            copy_dst += len;\n            pos += len;\n            meta_block_remaining_len -= len;\n            if (copy_dst >= ringbuffer_end) {\n              output.write(ringbuffer, ringbuffer_size);\n              \n              for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++)\n                ringbuffer[_x] = ringbuffer[ringbuffer_end + _x];\n            }\n          } else {\n            throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n              \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n          }\n        } else {\n          throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n            \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n        }\n      } else {\n        if (distance_code > 0) {\n          dist_rb[dist_rb_idx & 3] = distance;\n          ++dist_rb_idx;\n        }\n\n        if (copy_length > meta_block_remaining_len) {\n          throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n            \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n        }\n\n        for (j = 0; j < copy_length; ++j) {\n          ringbuffer[pos & ringbuffer_mask] = ringbuffer[(pos - distance) & ringbuffer_mask];\n          if ((pos & ringbuffer_mask) === ringbuffer_mask) {\n            output.write(ringbuffer, ringbuffer_size);\n          }\n          ++pos;\n          --meta_block_remaining_len;\n        }\n      }\n\n      /* When we get here, we must have inserted at least one literal and */\n      /* made a copy of at least length two, therefore accessing the last 2 */\n      /* bytes is valid. */\n      prev_byte1 = ringbuffer[(pos - 1) & ringbuffer_mask];\n      prev_byte2 = ringbuffer[(pos - 2) & ringbuffer_mask];\n    }\n\n    /* Protect pos from overflow, wrap it around at every GB of input data */\n    pos &= 0x3fffffff;\n  }\n\n  output.write(ringbuffer, pos & ringbuffer_mask);\n}\n\n__webpack_unused_export__ = BrotliDecompress;\n\nBrotliDictionary.init();\n\n\n/***/ }),\n\n/***/ 5340:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar base64 = __webpack_require__(9742);\n\n/**\n * The normal dictionary-data.js is quite large, which makes it \n * unsuitable for browser usage. In order to make it smaller, \n * we read dictionary.bin, which is a compressed version of\n * the dictionary, and on initial load, Brotli decompresses \n * it's own dictionary. 😜\n */\nexports.init = function() {\n  var BrotliDecompressBuffer = (__webpack_require__(6450).BrotliDecompressBuffer);\n  var compressed = base64.toByteArray(__webpack_require__(2722));\n  return BrotliDecompressBuffer(compressed);\n};\n\n\n/***/ }),\n\n/***/ 2722:\n/***/ (function(module) {\n\nmodule.exports=\"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\";\n\n\n/***/ }),\n\n/***/ 5139:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Collection of static dictionary words.\n*/\n\nvar data = __webpack_require__(5340);\nexports.init = function() {\n  exports.dictionary = data.init();\n};\n\nexports.offsetsByLength = new Uint32Array([\n     0,     0,     0,     0,     0,  4096,  9216, 21504, 35840, 44032,\n 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536,\n 115968, 118528, 119872, 121280, 122016,\n]);\n\nexports.sizeBitsByLength = new Uint8Array([\n  0,  0,  0,  0, 10, 10, 11, 11, 10, 10,\n 10, 10, 10,  9,  9,  8,  7,  7,  8,  7,\n  7,  6,  6,  5,  5,\n]);\n\nexports.minDictionaryWordLength = 4;\nexports.maxDictionaryWordLength = 24;\n\n\n/***/ }),\n\n/***/ 966:\n/***/ (function(__unused_webpack_module, exports) {\n\nfunction HuffmanCode(bits, value) {\n  this.bits = bits;   /* number of bits used for this symbol */\n  this.value = value; /* symbol value or table offset */\n}\n\nexports.h = HuffmanCode;\n\nvar MAX_LENGTH = 15;\n\n/* Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the\n   bit-wise reversal of the len least significant bits of key. */\nfunction GetNextKey(key, len) {\n  var step = 1 << (len - 1);\n  while (key & step) {\n    step >>= 1;\n  }\n  return (key & (step - 1)) + step;\n}\n\n/* Stores code in table[0], table[step], table[2*step], ..., table[end] */\n/* Assumes that end is an integer multiple of step */\nfunction ReplicateValue(table, i, step, end, code) {\n  do {\n    end -= step;\n    table[i + end] = new HuffmanCode(code.bits, code.value);\n  } while (end > 0);\n}\n\n/* Returns the table width of the next 2nd level table. count is the histogram\n   of bit lengths for the remaining symbols, len is the code length of the next\n   processed symbol */\nfunction NextTableBitSize(count, len, root_bits) {\n  var left = 1 << (len - root_bits);\n  while (len < MAX_LENGTH) {\n    left -= count[len];\n    if (left <= 0) break;\n    ++len;\n    left <<= 1;\n  }\n  return len - root_bits;\n}\n\nexports.g = function(root_table, table, root_bits, code_lengths, code_lengths_size) {\n  var start_table = table;\n  var code;            /* current table entry */\n  var len;             /* current code length */\n  var symbol;          /* symbol index in original or sorted table */\n  var key;             /* reversed prefix code */\n  var step;            /* step size to replicate values in current table */\n  var low;             /* low bits for current root entry */\n  var mask;            /* mask for low bits */\n  var table_bits;      /* key length of current table */\n  var table_size;      /* size of current table */\n  var total_size;      /* sum of root table size and 2nd level table sizes */\n  var sorted;          /* symbols sorted by code length */\n  var count = new Int32Array(MAX_LENGTH + 1);  /* number of codes of each length */\n  var offset = new Int32Array(MAX_LENGTH + 1);  /* offsets in sorted table for each length */\n\n  sorted = new Int32Array(code_lengths_size);\n\n  /* build histogram of code lengths */\n  for (symbol = 0; symbol < code_lengths_size; symbol++) {\n    count[code_lengths[symbol]]++;\n  }\n\n  /* generate offsets into sorted symbol table by code length */\n  offset[1] = 0;\n  for (len = 1; len < MAX_LENGTH; len++) {\n    offset[len + 1] = offset[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (symbol = 0; symbol < code_lengths_size; symbol++) {\n    if (code_lengths[symbol] !== 0) {\n      sorted[offset[code_lengths[symbol]]++] = symbol;\n    }\n  }\n  \n  table_bits = root_bits;\n  table_size = 1 << table_bits;\n  total_size = table_size;\n\n  /* special case code with only one value */\n  if (offset[MAX_LENGTH] === 1) {\n    for (key = 0; key < total_size; ++key) {\n      root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff);\n    }\n    \n    return total_size;\n  }\n\n  /* fill in root table */\n  key = 0;\n  symbol = 0;\n  for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) {\n    for (; count[len] > 0; --count[len]) {\n      code = new HuffmanCode(len & 0xff, sorted[symbol++] & 0xffff);\n      ReplicateValue(root_table, table + key, step, table_size, code);\n      key = GetNextKey(key, len);\n    }\n  }\n\n  /* fill in 2nd level tables and add pointers to root table */\n  mask = total_size - 1;\n  low = -1;\n  for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) {\n    for (; count[len] > 0; --count[len]) {\n      if ((key & mask) !== low) {\n        table += table_size;\n        table_bits = NextTableBitSize(count, len, root_bits);\n        table_size = 1 << table_bits;\n        total_size += table_size;\n        low = key & mask;\n        root_table[start_table + low] = new HuffmanCode((table_bits + root_bits) & 0xff, ((table - start_table) - low) & 0xffff);\n      }\n      code = new HuffmanCode((len - root_bits) & 0xff, sorted[symbol++] & 0xffff);\n      ReplicateValue(root_table, table + (key >> root_bits), step, table_size, code);\n      key = GetNextKey(key, len);\n    }\n  }\n  \n  return total_size;\n}\n\n\n/***/ }),\n\n/***/ 8435:\n/***/ (function(__unused_webpack_module, exports) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Lookup tables to map prefix codes to value ranges. This is used during\n   decoding of the block lengths, literal insertion lengths and copy lengths.\n*/\n\n/* Represents the range of values belonging to a prefix code: */\n/* [offset, offset + 2^nbits) */\nfunction PrefixCodeRange(offset, nbits) {\n  this.offset = offset;\n  this.nbits = nbits;\n}\n\nexports.kBlockLengthPrefixCode = [\n  new PrefixCodeRange(1, 2), new PrefixCodeRange(5, 2), new PrefixCodeRange(9, 2), new PrefixCodeRange(13, 2),\n  new PrefixCodeRange(17, 3), new PrefixCodeRange(25, 3), new PrefixCodeRange(33, 3), new PrefixCodeRange(41, 3),\n  new PrefixCodeRange(49, 4), new PrefixCodeRange(65, 4), new PrefixCodeRange(81, 4), new PrefixCodeRange(97, 4),\n  new PrefixCodeRange(113, 5), new PrefixCodeRange(145, 5), new PrefixCodeRange(177, 5), new PrefixCodeRange(209, 5),\n  new PrefixCodeRange(241, 6), new PrefixCodeRange(305, 6), new PrefixCodeRange(369, 7), new PrefixCodeRange(497, 8),\n  new PrefixCodeRange(753, 9), new PrefixCodeRange(1265, 10), new PrefixCodeRange(2289, 11), new PrefixCodeRange(4337, 12),\n  new PrefixCodeRange(8433, 13), new PrefixCodeRange(16625, 24)\n];\n\nexports.kInsertLengthPrefixCode = [\n  new PrefixCodeRange(0, 0), new PrefixCodeRange(1, 0), new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0),\n  new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), new PrefixCodeRange(6, 1), new PrefixCodeRange(8, 1),\n  new PrefixCodeRange(10, 2), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 3), new PrefixCodeRange(26, 3),\n  new PrefixCodeRange(34, 4), new PrefixCodeRange(50, 4), new PrefixCodeRange(66, 5), new PrefixCodeRange(98, 5),\n  new PrefixCodeRange(130, 6), new PrefixCodeRange(194, 7), new PrefixCodeRange(322, 8), new PrefixCodeRange(578, 9),\n  new PrefixCodeRange(1090, 10), new PrefixCodeRange(2114, 12), new PrefixCodeRange(6210, 14), new PrefixCodeRange(22594, 24),\n];\n\nexports.kCopyLengthPrefixCode = [\n  new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0),\n  new PrefixCodeRange(6, 0), new PrefixCodeRange(7, 0), new PrefixCodeRange(8, 0), new PrefixCodeRange(9, 0),\n  new PrefixCodeRange(10, 1), new PrefixCodeRange(12, 1), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 2),\n  new PrefixCodeRange(22, 3), new PrefixCodeRange(30, 3), new PrefixCodeRange(38, 4), new PrefixCodeRange(54, 4),\n  new PrefixCodeRange(70, 5), new PrefixCodeRange(102, 5), new PrefixCodeRange(134, 6), new PrefixCodeRange(198, 7),\n  new PrefixCodeRange(326, 8), new PrefixCodeRange(582, 9), new PrefixCodeRange(1094, 10), new PrefixCodeRange(2118, 24),\n];\n\nexports.kInsertRangeLut = [\n  0, 0, 8, 8, 0, 16, 8, 16, 16,\n];\n\nexports.kCopyRangeLut = [\n  0, 8, 0, 8, 16, 0, 16, 8, 16,\n];\n\n\n/***/ }),\n\n/***/ 6154:\n/***/ (function(__unused_webpack_module, exports) {\n\nfunction BrotliInput(buffer) {\n  this.buffer = buffer;\n  this.pos = 0;\n}\n\nBrotliInput.prototype.read = function(buf, i, count) {\n  if (this.pos + count > this.buffer.length) {\n    count = this.buffer.length - this.pos;\n  }\n  \n  for (var p = 0; p < count; p++)\n    buf[i + p] = this.buffer[this.pos + p];\n  \n  this.pos += count;\n  return count;\n}\n\nexports.g = BrotliInput;\n\nfunction BrotliOutput(buf) {\n  this.buffer = buf;\n  this.pos = 0;\n}\n\nBrotliOutput.prototype.write = function(buf, count) {\n  if (this.pos + count > this.buffer.length)\n    throw new Error('Output buffer is not large enough');\n  \n  this.buffer.set(buf.subarray(0, count), this.pos);\n  this.pos += count;\n  return count;\n};\n\nexports.j = BrotliOutput;\n\n\n/***/ }),\n\n/***/ 2973:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Transformations on dictionary words.\n*/\n\nvar BrotliDictionary = __webpack_require__(5139);\n\nvar kIdentity       = 0;\nvar kOmitLast1      = 1;\nvar kOmitLast2      = 2;\nvar kOmitLast3      = 3;\nvar kOmitLast4      = 4;\nvar kOmitLast5      = 5;\nvar kOmitLast6      = 6;\nvar kOmitLast7      = 7;\nvar kOmitLast8      = 8;\nvar kOmitLast9      = 9;\nvar kUppercaseFirst = 10;\nvar kUppercaseAll   = 11;\nvar kOmitFirst1     = 12;\nvar kOmitFirst2     = 13;\nvar kOmitFirst3     = 14;\nvar kOmitFirst4     = 15;\nvar kOmitFirst5     = 16;\nvar kOmitFirst6     = 17;\nvar kOmitFirst7     = 18;\nvar kOmitFirst8     = 19;\nvar kOmitFirst9     = 20;\n\nfunction Transform(prefix, transform, suffix) {\n  this.prefix = new Uint8Array(prefix.length);\n  this.transform = transform;\n  this.suffix = new Uint8Array(suffix.length);\n  \n  for (var i = 0; i < prefix.length; i++)\n    this.prefix[i] = prefix.charCodeAt(i);\n  \n  for (var i = 0; i < suffix.length; i++)\n    this.suffix[i] = suffix.charCodeAt(i);\n}\n\nvar kTransforms = [\n     new Transform(         \"\", kIdentity,       \"\"           ),\n     new Transform(         \"\", kIdentity,       \" \"          ),\n     new Transform(        \" \", kIdentity,       \" \"          ),\n     new Transform(         \"\", kOmitFirst1,     \"\"           ),\n     new Transform(         \"\", kUppercaseFirst, \" \"          ),\n     new Transform(         \"\", kIdentity,       \" the \"      ),\n     new Transform(        \" \", kIdentity,       \"\"           ),\n     new Transform(       \"s \", kIdentity,       \" \"          ),\n     new Transform(         \"\", kIdentity,       \" of \"       ),\n     new Transform(         \"\", kUppercaseFirst, \"\"           ),\n     new Transform(         \"\", kIdentity,       \" and \"      ),\n     new Transform(         \"\", kOmitFirst2,     \"\"           ),\n     new Transform(         \"\", kOmitLast1,      \"\"           ),\n     new Transform(       \", \", kIdentity,       \" \"          ),\n     new Transform(         \"\", kIdentity,       \", \"         ),\n     new Transform(        \" \", kUppercaseFirst, \" \"          ),\n     new Transform(         \"\", kIdentity,       \" in \"       ),\n     new Transform(         \"\", kIdentity,       \" to \"       ),\n     new Transform(       \"e \", kIdentity,       \" \"          ),\n     new Transform(         \"\", kIdentity,       \"\\\"\"         ),\n     new Transform(         \"\", kIdentity,       \".\"          ),\n     new Transform(         \"\", kIdentity,       \"\\\">\"        ),\n     new Transform(         \"\", kIdentity,       \"\\n\"         ),\n     new Transform(         \"\", kOmitLast3,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \"]\"          ),\n     new Transform(         \"\", kIdentity,       \" for \"      ),\n     new Transform(         \"\", kOmitFirst3,     \"\"           ),\n     new Transform(         \"\", kOmitLast2,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \" a \"        ),\n     new Transform(         \"\", kIdentity,       \" that \"     ),\n     new Transform(        \" \", kUppercaseFirst, \"\"           ),\n     new Transform(         \"\", kIdentity,       \". \"         ),\n     new Transform(        \".\", kIdentity,       \"\"           ),\n     new Transform(        \" \", kIdentity,       \", \"         ),\n     new Transform(         \"\", kOmitFirst4,     \"\"           ),\n     new Transform(         \"\", kIdentity,       \" with \"     ),\n     new Transform(         \"\", kIdentity,       \"'\"          ),\n     new Transform(         \"\", kIdentity,       \" from \"     ),\n     new Transform(         \"\", kIdentity,       \" by \"       ),\n     new Transform(         \"\", kOmitFirst5,     \"\"           ),\n     new Transform(         \"\", kOmitFirst6,     \"\"           ),\n     new Transform(    \" the \", kIdentity,       \"\"           ),\n     new Transform(         \"\", kOmitLast4,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \". The \"     ),\n     new Transform(         \"\", kUppercaseAll,   \"\"           ),\n     new Transform(         \"\", kIdentity,       \" on \"       ),\n     new Transform(         \"\", kIdentity,       \" as \"       ),\n     new Transform(         \"\", kIdentity,       \" is \"       ),\n     new Transform(         \"\", kOmitLast7,      \"\"           ),\n     new Transform(         \"\", kOmitLast1,      \"ing \"       ),\n     new Transform(         \"\", kIdentity,       \"\\n\\t\"       ),\n     new Transform(         \"\", kIdentity,       \":\"          ),\n     new Transform(        \" \", kIdentity,       \". \"         ),\n     new Transform(         \"\", kIdentity,       \"ed \"        ),\n     new Transform(         \"\", kOmitFirst9,     \"\"           ),\n     new Transform(         \"\", kOmitFirst7,     \"\"           ),\n     new Transform(         \"\", kOmitLast6,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \"(\"          ),\n     new Transform(         \"\", kUppercaseFirst, \", \"         ),\n     new Transform(         \"\", kOmitLast8,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \" at \"       ),\n     new Transform(         \"\", kIdentity,       \"ly \"        ),\n     new Transform(    \" the \", kIdentity,       \" of \"       ),\n     new Transform(         \"\", kOmitLast5,      \"\"           ),\n     new Transform(         \"\", kOmitLast9,      \"\"           ),\n     new Transform(        \" \", kUppercaseFirst, \", \"         ),\n     new Transform(         \"\", kUppercaseFirst, \"\\\"\"         ),\n     new Transform(        \".\", kIdentity,       \"(\"          ),\n     new Transform(         \"\", kUppercaseAll,   \" \"          ),\n     new Transform(         \"\", kUppercaseFirst, \"\\\">\"        ),\n     new Transform(         \"\", kIdentity,       \"=\\\"\"        ),\n     new Transform(        \" \", kIdentity,       \".\"          ),\n     new Transform(    \".com/\", kIdentity,       \"\"           ),\n     new Transform(    \" the \", kIdentity,       \" of the \"   ),\n     new Transform(         \"\", kUppercaseFirst, \"'\"          ),\n     new Transform(         \"\", kIdentity,       \". This \"    ),\n     new Transform(         \"\", kIdentity,       \",\"          ),\n     new Transform(        \".\", kIdentity,       \" \"          ),\n     new Transform(         \"\", kUppercaseFirst, \"(\"          ),\n     new Transform(         \"\", kUppercaseFirst, \".\"          ),\n     new Transform(         \"\", kIdentity,       \" not \"      ),\n     new Transform(        \" \", kIdentity,       \"=\\\"\"        ),\n     new Transform(         \"\", kIdentity,       \"er \"        ),\n     new Transform(        \" \", kUppercaseAll,   \" \"          ),\n     new Transform(         \"\", kIdentity,       \"al \"        ),\n     new Transform(        \" \", kUppercaseAll,   \"\"           ),\n     new Transform(         \"\", kIdentity,       \"='\"         ),\n     new Transform(         \"\", kUppercaseAll,   \"\\\"\"         ),\n     new Transform(         \"\", kUppercaseFirst, \". \"         ),\n     new Transform(        \" \", kIdentity,       \"(\"          ),\n     new Transform(         \"\", kIdentity,       \"ful \"       ),\n     new Transform(        \" \", kUppercaseFirst, \". \"         ),\n     new Transform(         \"\", kIdentity,       \"ive \"       ),\n     new Transform(         \"\", kIdentity,       \"less \"      ),\n     new Transform(         \"\", kUppercaseAll,   \"'\"          ),\n     new Transform(         \"\", kIdentity,       \"est \"       ),\n     new Transform(        \" \", kUppercaseFirst, \".\"          ),\n     new Transform(         \"\", kUppercaseAll,   \"\\\">\"        ),\n     new Transform(        \" \", kIdentity,       \"='\"         ),\n     new Transform(         \"\", kUppercaseFirst, \",\"          ),\n     new Transform(         \"\", kIdentity,       \"ize \"       ),\n     new Transform(         \"\", kUppercaseAll,   \".\"          ),\n     new Transform( \"\\xc2\\xa0\", kIdentity,       \"\"           ),\n     new Transform(        \" \", kIdentity,       \",\"          ),\n     new Transform(         \"\", kUppercaseFirst, \"=\\\"\"        ),\n     new Transform(         \"\", kUppercaseAll,   \"=\\\"\"        ),\n     new Transform(         \"\", kIdentity,       \"ous \"       ),\n     new Transform(         \"\", kUppercaseAll,   \", \"         ),\n     new Transform(         \"\", kUppercaseFirst, \"='\"         ),\n     new Transform(        \" \", kUppercaseFirst, \",\"          ),\n     new Transform(        \" \", kUppercaseAll,   \"=\\\"\"        ),\n     new Transform(        \" \", kUppercaseAll,   \", \"         ),\n     new Transform(         \"\", kUppercaseAll,   \",\"          ),\n     new Transform(         \"\", kUppercaseAll,   \"(\"          ),\n     new Transform(         \"\", kUppercaseAll,   \". \"         ),\n     new Transform(        \" \", kUppercaseAll,   \".\"          ),\n     new Transform(         \"\", kUppercaseAll,   \"='\"         ),\n     new Transform(        \" \", kUppercaseAll,   \". \"         ),\n     new Transform(        \" \", kUppercaseFirst, \"=\\\"\"        ),\n     new Transform(        \" \", kUppercaseAll,   \"='\"         ),\n     new Transform(        \" \", kUppercaseFirst, \"='\"         )\n];\n\nexports.kTransforms = kTransforms;\nexports.kNumTransforms = kTransforms.length;\n\nfunction ToUpperCase(p, i) {\n  if (p[i] < 0xc0) {\n    if (p[i] >= 97 && p[i] <= 122) {\n      p[i] ^= 32;\n    }\n    return 1;\n  }\n  \n  /* An overly simplified uppercasing model for utf-8. */\n  if (p[i] < 0xe0) {\n    p[i + 1] ^= 32;\n    return 2;\n  }\n  \n  /* An arbitrary transform for three byte characters. */\n  p[i + 2] ^= 5;\n  return 3;\n}\n\nexports.transformDictionaryWord = function(dst, idx, word, len, transform) {\n  var prefix = kTransforms[transform].prefix;\n  var suffix = kTransforms[transform].suffix;\n  var t = kTransforms[transform].transform;\n  var skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1);\n  var i = 0;\n  var start_idx = idx;\n  var uppercase;\n  \n  if (skip > len) {\n    skip = len;\n  }\n  \n  var prefix_pos = 0;\n  while (prefix_pos < prefix.length) {\n    dst[idx++] = prefix[prefix_pos++];\n  }\n  \n  word += skip;\n  len -= skip;\n  \n  if (t <= kOmitLast9) {\n    len -= t;\n  }\n  \n  for (i = 0; i < len; i++) {\n    dst[idx++] = BrotliDictionary.dictionary[word + i];\n  }\n  \n  uppercase = idx - len;\n  \n  if (t === kUppercaseFirst) {\n    ToUpperCase(dst, uppercase);\n  } else if (t === kUppercaseAll) {\n    while (len > 0) {\n      var step = ToUpperCase(dst, uppercase);\n      uppercase += step;\n      len -= step;\n    }\n  }\n  \n  var suffix_pos = 0;\n  while (suffix_pos < suffix.length) {\n    dst[idx++] = suffix[suffix_pos++];\n  }\n  \n  return idx - start_idx;\n}\n\n\n/***/ }),\n\n/***/ 7709:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(6450).BrotliDecompressBuffer;\n\n\n/***/ }),\n\n/***/ 4505:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n/* provided dependency */ var process = __webpack_require__(4155);\n\n/* eslint camelcase: \"off\" */\n\nvar assert = __webpack_require__(9282);\n\nvar Zstream = __webpack_require__(2292);\nvar zlib_deflate = __webpack_require__(405);\nvar zlib_inflate = __webpack_require__(7948);\nvar constants = __webpack_require__(1619);\n\nfor (var key in constants) {\n  exports[key] = constants[key];\n}\n\n// zlib modes\nexports.NONE = 0;\nexports.DEFLATE = 1;\nexports.INFLATE = 2;\nexports.GZIP = 3;\nexports.GUNZIP = 4;\nexports.DEFLATERAW = 5;\nexports.INFLATERAW = 6;\nexports.UNZIP = 7;\n\nvar GZIP_HEADER_ID1 = 0x1f;\nvar GZIP_HEADER_ID2 = 0x8b;\n\n/**\n * Emulate Node's zlib C++ layer for use by the JS layer in index.js\n */\nfunction Zlib(mode) {\n  if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) {\n    throw new TypeError('Bad argument');\n  }\n\n  this.dictionary = null;\n  this.err = 0;\n  this.flush = 0;\n  this.init_done = false;\n  this.level = 0;\n  this.memLevel = 0;\n  this.mode = mode;\n  this.strategy = 0;\n  this.windowBits = 0;\n  this.write_in_progress = false;\n  this.pending_close = false;\n  this.gzip_id_bytes_read = 0;\n}\n\nZlib.prototype.close = function () {\n  if (this.write_in_progress) {\n    this.pending_close = true;\n    return;\n  }\n\n  this.pending_close = false;\n\n  assert(this.init_done, 'close before init');\n  assert(this.mode <= exports.UNZIP);\n\n  if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {\n    zlib_deflate.deflateEnd(this.strm);\n  } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) {\n    zlib_inflate.inflateEnd(this.strm);\n  }\n\n  this.mode = exports.NONE;\n\n  this.dictionary = null;\n};\n\nZlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) {\n  return this._write(true, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) {\n  return this._write(false, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) {\n  assert.equal(arguments.length, 8);\n\n  assert(this.init_done, 'write before init');\n  assert(this.mode !== exports.NONE, 'already finalized');\n  assert.equal(false, this.write_in_progress, 'write already in progress');\n  assert.equal(false, this.pending_close, 'close is pending');\n\n  this.write_in_progress = true;\n\n  assert.equal(false, flush === undefined, 'must provide flush value');\n\n  this.write_in_progress = true;\n\n  if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) {\n    throw new Error('Invalid flush value');\n  }\n\n  if (input == null) {\n    input = Buffer.alloc(0);\n    in_len = 0;\n    in_off = 0;\n  }\n\n  this.strm.avail_in = in_len;\n  this.strm.input = input;\n  this.strm.next_in = in_off;\n  this.strm.avail_out = out_len;\n  this.strm.output = out;\n  this.strm.next_out = out_off;\n  this.flush = flush;\n\n  if (!async) {\n    // sync version\n    this._process();\n\n    if (this._checkError()) {\n      return this._afterSync();\n    }\n    return;\n  }\n\n  // async version\n  var self = this;\n  process.nextTick(function () {\n    self._process();\n    self._after();\n  });\n\n  return this;\n};\n\nZlib.prototype._afterSync = function () {\n  var avail_out = this.strm.avail_out;\n  var avail_in = this.strm.avail_in;\n\n  this.write_in_progress = false;\n\n  return [avail_in, avail_out];\n};\n\nZlib.prototype._process = function () {\n  var next_expected_header_byte = null;\n\n  // If the avail_out is left at 0, then it means that it ran out\n  // of room.  If there was avail_out left over, then it means\n  // that all of the input was consumed.\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.GZIP:\n    case exports.DEFLATERAW:\n      this.err = zlib_deflate.deflate(this.strm, this.flush);\n      break;\n    case exports.UNZIP:\n      if (this.strm.avail_in > 0) {\n        next_expected_header_byte = this.strm.next_in;\n      }\n\n      switch (this.gzip_id_bytes_read) {\n        case 0:\n          if (next_expected_header_byte === null) {\n            break;\n          }\n\n          if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) {\n            this.gzip_id_bytes_read = 1;\n            next_expected_header_byte++;\n\n            if (this.strm.avail_in === 1) {\n              // The only available byte was already read.\n              break;\n            }\n          } else {\n            this.mode = exports.INFLATE;\n            break;\n          }\n\n        // fallthrough\n        case 1:\n          if (next_expected_header_byte === null) {\n            break;\n          }\n\n          if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) {\n            this.gzip_id_bytes_read = 2;\n            this.mode = exports.GUNZIP;\n          } else {\n            // There is no actual difference between INFLATE and INFLATERAW\n            // (after initialization).\n            this.mode = exports.INFLATE;\n          }\n\n          break;\n        default:\n          throw new Error('invalid number of gzip magic number bytes read');\n      }\n\n    // fallthrough\n    case exports.INFLATE:\n    case exports.GUNZIP:\n    case exports.INFLATERAW:\n      this.err = zlib_inflate.inflate(this.strm, this.flush\n\n      // If data was encoded with dictionary\n      );if (this.err === exports.Z_NEED_DICT && this.dictionary) {\n        // Load it\n        this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary);\n        if (this.err === exports.Z_OK) {\n          // And try to decode again\n          this.err = zlib_inflate.inflate(this.strm, this.flush);\n        } else if (this.err === exports.Z_DATA_ERROR) {\n          // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR.\n          // Make it possible for After() to tell a bad dictionary from bad\n          // input.\n          this.err = exports.Z_NEED_DICT;\n        }\n      }\n      while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) {\n        // Bytes remain in input buffer. Perhaps this is another compressed\n        // member in the same archive, or just trailing garbage.\n        // Trailing zero bytes are okay, though, since they are frequently\n        // used for padding.\n\n        this.reset();\n        this.err = zlib_inflate.inflate(this.strm, this.flush);\n      }\n      break;\n    default:\n      throw new Error('Unknown mode ' + this.mode);\n  }\n};\n\nZlib.prototype._checkError = function () {\n  // Acceptable error states depend on the type of zlib stream.\n  switch (this.err) {\n    case exports.Z_OK:\n    case exports.Z_BUF_ERROR:\n      if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) {\n        this._error('unexpected end of file');\n        return false;\n      }\n      break;\n    case exports.Z_STREAM_END:\n      // normal statuses, not fatal\n      break;\n    case exports.Z_NEED_DICT:\n      if (this.dictionary == null) {\n        this._error('Missing dictionary');\n      } else {\n        this._error('Bad dictionary');\n      }\n      return false;\n    default:\n      // something else.\n      this._error('Zlib error');\n      return false;\n  }\n\n  return true;\n};\n\nZlib.prototype._after = function () {\n  if (!this._checkError()) {\n    return;\n  }\n\n  var avail_out = this.strm.avail_out;\n  var avail_in = this.strm.avail_in;\n\n  this.write_in_progress = false;\n\n  // call the write() cb\n  this.callback(avail_in, avail_out);\n\n  if (this.pending_close) {\n    this.close();\n  }\n};\n\nZlib.prototype._error = function (message) {\n  if (this.strm.msg) {\n    message = this.strm.msg;\n  }\n  this.onerror(message, this.err\n\n  // no hope of rescue.\n  );this.write_in_progress = false;\n  if (this.pending_close) {\n    this.close();\n  }\n};\n\nZlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) {\n  assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])');\n\n  assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits');\n  assert(level >= -1 && level <= 9, 'invalid compression level');\n\n  assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel');\n\n  assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy');\n\n  this._init(level, windowBits, memLevel, strategy, dictionary);\n  this._setDictionary();\n};\n\nZlib.prototype.params = function () {\n  throw new Error('deflateParams Not supported');\n};\n\nZlib.prototype.reset = function () {\n  this._reset();\n  this._setDictionary();\n};\n\nZlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) {\n  this.level = level;\n  this.windowBits = windowBits;\n  this.memLevel = memLevel;\n  this.strategy = strategy;\n\n  this.flush = exports.Z_NO_FLUSH;\n\n  this.err = exports.Z_OK;\n\n  if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) {\n    this.windowBits += 16;\n  }\n\n  if (this.mode === exports.UNZIP) {\n    this.windowBits += 32;\n  }\n\n  if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) {\n    this.windowBits = -1 * this.windowBits;\n  }\n\n  this.strm = new Zstream();\n\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.GZIP:\n    case exports.DEFLATERAW:\n      this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy);\n      break;\n    case exports.INFLATE:\n    case exports.GUNZIP:\n    case exports.INFLATERAW:\n    case exports.UNZIP:\n      this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits);\n      break;\n    default:\n      throw new Error('Unknown mode ' + this.mode);\n  }\n\n  if (this.err !== exports.Z_OK) {\n    this._error('Init error');\n  }\n\n  this.dictionary = dictionary;\n\n  this.write_in_progress = false;\n  this.init_done = true;\n};\n\nZlib.prototype._setDictionary = function () {\n  if (this.dictionary == null) {\n    return;\n  }\n\n  this.err = exports.Z_OK;\n\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.DEFLATERAW:\n      this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary);\n      break;\n    default:\n      break;\n  }\n\n  if (this.err !== exports.Z_OK) {\n    this._error('Failed to set dictionary');\n  }\n};\n\nZlib.prototype._reset = function () {\n  this.err = exports.Z_OK;\n\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.DEFLATERAW:\n    case exports.GZIP:\n      this.err = zlib_deflate.deflateReset(this.strm);\n      break;\n    case exports.INFLATE:\n    case exports.INFLATERAW:\n    case exports.GUNZIP:\n      this.err = zlib_inflate.inflateReset(this.strm);\n      break;\n    default:\n      break;\n  }\n\n  if (this.err !== exports.Z_OK) {\n    this._error('Failed to reset stream');\n  }\n};\n\nexports.Zlib = Zlib;\n\n/***/ }),\n\n/***/ 2635:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n\n\nvar Buffer = (__webpack_require__(8823).Buffer);\nvar Transform = (__webpack_require__(2830).Transform);\nvar binding = __webpack_require__(4505);\nvar util = __webpack_require__(9539);\nvar assert = (__webpack_require__(9282).ok);\nvar kMaxLength = (__webpack_require__(8823).kMaxLength);\nvar kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes';\n\n// zlib doesn't provide these, so kludge them in following the same\n// const naming scheme zlib uses.\nbinding.Z_MIN_WINDOWBITS = 8;\nbinding.Z_MAX_WINDOWBITS = 15;\nbinding.Z_DEFAULT_WINDOWBITS = 15;\n\n// fewer than 64 bytes per chunk is stupid.\n// technically it could work with as few as 8, but even 64 bytes\n// is absurdly low.  Usually a MB or more is best.\nbinding.Z_MIN_CHUNK = 64;\nbinding.Z_MAX_CHUNK = Infinity;\nbinding.Z_DEFAULT_CHUNK = 16 * 1024;\n\nbinding.Z_MIN_MEMLEVEL = 1;\nbinding.Z_MAX_MEMLEVEL = 9;\nbinding.Z_DEFAULT_MEMLEVEL = 8;\n\nbinding.Z_MIN_LEVEL = -1;\nbinding.Z_MAX_LEVEL = 9;\nbinding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;\n\n// expose all the zlib constants\nvar bkeys = Object.keys(binding);\nfor (var bk = 0; bk < bkeys.length; bk++) {\n  var bkey = bkeys[bk];\n  if (bkey.match(/^Z/)) {\n    Object.defineProperty(exports, bkey, {\n      enumerable: true, value: binding[bkey], writable: false\n    });\n  }\n}\n\n// translation table for return codes.\nvar codes = {\n  Z_OK: binding.Z_OK,\n  Z_STREAM_END: binding.Z_STREAM_END,\n  Z_NEED_DICT: binding.Z_NEED_DICT,\n  Z_ERRNO: binding.Z_ERRNO,\n  Z_STREAM_ERROR: binding.Z_STREAM_ERROR,\n  Z_DATA_ERROR: binding.Z_DATA_ERROR,\n  Z_MEM_ERROR: binding.Z_MEM_ERROR,\n  Z_BUF_ERROR: binding.Z_BUF_ERROR,\n  Z_VERSION_ERROR: binding.Z_VERSION_ERROR\n};\n\nvar ckeys = Object.keys(codes);\nfor (var ck = 0; ck < ckeys.length; ck++) {\n  var ckey = ckeys[ck];\n  codes[codes[ckey]] = ckey;\n}\n\nObject.defineProperty(exports, \"codes\", ({\n  enumerable: true, value: Object.freeze(codes), writable: false\n}));\n\nexports.Deflate = Deflate;\nexports.Inflate = Inflate;\nexports.Gzip = Gzip;\nexports.Gunzip = Gunzip;\nexports.DeflateRaw = DeflateRaw;\nexports.InflateRaw = InflateRaw;\nexports.Unzip = Unzip;\n\nexports.createDeflate = function (o) {\n  return new Deflate(o);\n};\n\nexports.createInflate = function (o) {\n  return new Inflate(o);\n};\n\nexports.createDeflateRaw = function (o) {\n  return new DeflateRaw(o);\n};\n\nexports.createInflateRaw = function (o) {\n  return new InflateRaw(o);\n};\n\nexports.createGzip = function (o) {\n  return new Gzip(o);\n};\n\nexports.createGunzip = function (o) {\n  return new Gunzip(o);\n};\n\nexports.createUnzip = function (o) {\n  return new Unzip(o);\n};\n\n// Convenience methods.\n// compress/decompress a string or buffer in one step.\nexports.deflate = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Deflate(opts), buffer, callback);\n};\n\nexports.deflateSync = function (buffer, opts) {\n  return zlibBufferSync(new Deflate(opts), buffer);\n};\n\nexports.gzip = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Gzip(opts), buffer, callback);\n};\n\nexports.gzipSync = function (buffer, opts) {\n  return zlibBufferSync(new Gzip(opts), buffer);\n};\n\nexports.deflateRaw = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new DeflateRaw(opts), buffer, callback);\n};\n\nexports.deflateRawSync = function (buffer, opts) {\n  return zlibBufferSync(new DeflateRaw(opts), buffer);\n};\n\nexports.unzip = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Unzip(opts), buffer, callback);\n};\n\nexports.unzipSync = function (buffer, opts) {\n  return zlibBufferSync(new Unzip(opts), buffer);\n};\n\nexports.inflate = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Inflate(opts), buffer, callback);\n};\n\nexports.inflateSync = function (buffer, opts) {\n  return zlibBufferSync(new Inflate(opts), buffer);\n};\n\nexports.gunzip = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Gunzip(opts), buffer, callback);\n};\n\nexports.gunzipSync = function (buffer, opts) {\n  return zlibBufferSync(new Gunzip(opts), buffer);\n};\n\nexports.inflateRaw = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new InflateRaw(opts), buffer, callback);\n};\n\nexports.inflateRawSync = function (buffer, opts) {\n  return zlibBufferSync(new InflateRaw(opts), buffer);\n};\n\nfunction zlibBuffer(engine, buffer, callback) {\n  var buffers = [];\n  var nread = 0;\n\n  engine.on('error', onError);\n  engine.on('end', onEnd);\n\n  engine.end(buffer);\n  flow();\n\n  function flow() {\n    var chunk;\n    while (null !== (chunk = engine.read())) {\n      buffers.push(chunk);\n      nread += chunk.length;\n    }\n    engine.once('readable', flow);\n  }\n\n  function onError(err) {\n    engine.removeListener('end', onEnd);\n    engine.removeListener('readable', flow);\n    callback(err);\n  }\n\n  function onEnd() {\n    var buf;\n    var err = null;\n\n    if (nread >= kMaxLength) {\n      err = new RangeError(kRangeErrorMessage);\n    } else {\n      buf = Buffer.concat(buffers, nread);\n    }\n\n    buffers = [];\n    engine.close();\n    callback(err, buf);\n  }\n}\n\nfunction zlibBufferSync(engine, buffer) {\n  if (typeof buffer === 'string') buffer = Buffer.from(buffer);\n\n  if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer');\n\n  var flushFlag = engine._finishFlushFlag;\n\n  return engine._processChunk(buffer, flushFlag);\n}\n\n// generic zlib\n// minimal 2-byte header\nfunction Deflate(opts) {\n  if (!(this instanceof Deflate)) return new Deflate(opts);\n  Zlib.call(this, opts, binding.DEFLATE);\n}\n\nfunction Inflate(opts) {\n  if (!(this instanceof Inflate)) return new Inflate(opts);\n  Zlib.call(this, opts, binding.INFLATE);\n}\n\n// gzip - bigger header, same deflate compression\nfunction Gzip(opts) {\n  if (!(this instanceof Gzip)) return new Gzip(opts);\n  Zlib.call(this, opts, binding.GZIP);\n}\n\nfunction Gunzip(opts) {\n  if (!(this instanceof Gunzip)) return new Gunzip(opts);\n  Zlib.call(this, opts, binding.GUNZIP);\n}\n\n// raw - no header\nfunction DeflateRaw(opts) {\n  if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);\n  Zlib.call(this, opts, binding.DEFLATERAW);\n}\n\nfunction InflateRaw(opts) {\n  if (!(this instanceof InflateRaw)) return new InflateRaw(opts);\n  Zlib.call(this, opts, binding.INFLATERAW);\n}\n\n// auto-detect header.\nfunction Unzip(opts) {\n  if (!(this instanceof Unzip)) return new Unzip(opts);\n  Zlib.call(this, opts, binding.UNZIP);\n}\n\nfunction isValidFlushFlag(flag) {\n  return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK;\n}\n\n// the Zlib class they all inherit from\n// This thing manages the queue of requests, and returns\n// true or false if there is anything in the queue when\n// you call the .write() method.\n\nfunction Zlib(opts, mode) {\n  var _this = this;\n\n  this._opts = opts = opts || {};\n  this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;\n\n  Transform.call(this, opts);\n\n  if (opts.flush && !isValidFlushFlag(opts.flush)) {\n    throw new Error('Invalid flush flag: ' + opts.flush);\n  }\n  if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) {\n    throw new Error('Invalid flush flag: ' + opts.finishFlush);\n  }\n\n  this._flushFlag = opts.flush || binding.Z_NO_FLUSH;\n  this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH;\n\n  if (opts.chunkSize) {\n    if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) {\n      throw new Error('Invalid chunk size: ' + opts.chunkSize);\n    }\n  }\n\n  if (opts.windowBits) {\n    if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) {\n      throw new Error('Invalid windowBits: ' + opts.windowBits);\n    }\n  }\n\n  if (opts.level) {\n    if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) {\n      throw new Error('Invalid compression level: ' + opts.level);\n    }\n  }\n\n  if (opts.memLevel) {\n    if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) {\n      throw new Error('Invalid memLevel: ' + opts.memLevel);\n    }\n  }\n\n  if (opts.strategy) {\n    if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) {\n      throw new Error('Invalid strategy: ' + opts.strategy);\n    }\n  }\n\n  if (opts.dictionary) {\n    if (!Buffer.isBuffer(opts.dictionary)) {\n      throw new Error('Invalid dictionary: it should be a Buffer instance');\n    }\n  }\n\n  this._handle = new binding.Zlib(mode);\n\n  var self = this;\n  this._hadError = false;\n  this._handle.onerror = function (message, errno) {\n    // there is no way to cleanly recover.\n    // continuing only obscures problems.\n    _close(self);\n    self._hadError = true;\n\n    var error = new Error(message);\n    error.errno = errno;\n    error.code = exports.codes[errno];\n    self.emit('error', error);\n  };\n\n  var level = exports.Z_DEFAULT_COMPRESSION;\n  if (typeof opts.level === 'number') level = opts.level;\n\n  var strategy = exports.Z_DEFAULT_STRATEGY;\n  if (typeof opts.strategy === 'number') strategy = opts.strategy;\n\n  this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary);\n\n  this._buffer = Buffer.allocUnsafe(this._chunkSize);\n  this._offset = 0;\n  this._level = level;\n  this._strategy = strategy;\n\n  this.once('end', this.close);\n\n  Object.defineProperty(this, '_closed', {\n    get: function () {\n      return !_this._handle;\n    },\n    configurable: true,\n    enumerable: true\n  });\n}\n\nutil.inherits(Zlib, Transform);\n\nZlib.prototype.params = function (level, strategy, callback) {\n  if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) {\n    throw new RangeError('Invalid compression level: ' + level);\n  }\n  if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) {\n    throw new TypeError('Invalid strategy: ' + strategy);\n  }\n\n  if (this._level !== level || this._strategy !== strategy) {\n    var self = this;\n    this.flush(binding.Z_SYNC_FLUSH, function () {\n      assert(self._handle, 'zlib binding closed');\n      self._handle.params(level, strategy);\n      if (!self._hadError) {\n        self._level = level;\n        self._strategy = strategy;\n        if (callback) callback();\n      }\n    });\n  } else {\n    process.nextTick(callback);\n  }\n};\n\nZlib.prototype.reset = function () {\n  assert(this._handle, 'zlib binding closed');\n  return this._handle.reset();\n};\n\n// This is the _flush function called by the transform class,\n// internally, when the last chunk has been written.\nZlib.prototype._flush = function (callback) {\n  this._transform(Buffer.alloc(0), '', callback);\n};\n\nZlib.prototype.flush = function (kind, callback) {\n  var _this2 = this;\n\n  var ws = this._writableState;\n\n  if (typeof kind === 'function' || kind === undefined && !callback) {\n    callback = kind;\n    kind = binding.Z_FULL_FLUSH;\n  }\n\n  if (ws.ended) {\n    if (callback) process.nextTick(callback);\n  } else if (ws.ending) {\n    if (callback) this.once('end', callback);\n  } else if (ws.needDrain) {\n    if (callback) {\n      this.once('drain', function () {\n        return _this2.flush(kind, callback);\n      });\n    }\n  } else {\n    this._flushFlag = kind;\n    this.write(Buffer.alloc(0), '', callback);\n  }\n};\n\nZlib.prototype.close = function (callback) {\n  _close(this, callback);\n  process.nextTick(emitCloseNT, this);\n};\n\nfunction _close(engine, callback) {\n  if (callback) process.nextTick(callback);\n\n  // Caller may invoke .close after a zlib error (which will null _handle).\n  if (!engine._handle) return;\n\n  engine._handle.close();\n  engine._handle = null;\n}\n\nfunction emitCloseNT(self) {\n  self.emit('close');\n}\n\nZlib.prototype._transform = function (chunk, encoding, cb) {\n  var flushFlag;\n  var ws = this._writableState;\n  var ending = ws.ending || ws.ended;\n  var last = ending && (!chunk || ws.length === chunk.length);\n\n  if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input'));\n\n  if (!this._handle) return cb(new Error('zlib binding closed'));\n\n  // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag\n  // (or whatever flag was provided using opts.finishFlush).\n  // If it's explicitly flushing at some other time, then we use\n  // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression\n  // goodness.\n  if (last) flushFlag = this._finishFlushFlag;else {\n    flushFlag = this._flushFlag;\n    // once we've flushed the last of the queue, stop flushing and\n    // go back to the normal behavior.\n    if (chunk.length >= ws.length) {\n      this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;\n    }\n  }\n\n  this._processChunk(chunk, flushFlag, cb);\n};\n\nZlib.prototype._processChunk = function (chunk, flushFlag, cb) {\n  var availInBefore = chunk && chunk.length;\n  var availOutBefore = this._chunkSize - this._offset;\n  var inOff = 0;\n\n  var self = this;\n\n  var async = typeof cb === 'function';\n\n  if (!async) {\n    var buffers = [];\n    var nread = 0;\n\n    var error;\n    this.on('error', function (er) {\n      error = er;\n    });\n\n    assert(this._handle, 'zlib binding closed');\n    do {\n      var res = this._handle.writeSync(flushFlag, chunk, // in\n      inOff, // in_off\n      availInBefore, // in_len\n      this._buffer, // out\n      this._offset, //out_off\n      availOutBefore); // out_len\n    } while (!this._hadError && callback(res[0], res[1]));\n\n    if (this._hadError) {\n      throw error;\n    }\n\n    if (nread >= kMaxLength) {\n      _close(this);\n      throw new RangeError(kRangeErrorMessage);\n    }\n\n    var buf = Buffer.concat(buffers, nread);\n    _close(this);\n\n    return buf;\n  }\n\n  assert(this._handle, 'zlib binding closed');\n  var req = this._handle.write(flushFlag, chunk, // in\n  inOff, // in_off\n  availInBefore, // in_len\n  this._buffer, // out\n  this._offset, //out_off\n  availOutBefore); // out_len\n\n  req.buffer = chunk;\n  req.callback = callback;\n\n  function callback(availInAfter, availOutAfter) {\n    // When the callback is used in an async write, the callback's\n    // context is the `req` object that was created. The req object\n    // is === this._handle, and that's why it's important to null\n    // out the values after they are done being used. `this._handle`\n    // can stay in memory longer than the callback and buffer are needed.\n    if (this) {\n      this.buffer = null;\n      this.callback = null;\n    }\n\n    if (self._hadError) return;\n\n    var have = availOutBefore - availOutAfter;\n    assert(have >= 0, 'have should not go down');\n\n    if (have > 0) {\n      var out = self._buffer.slice(self._offset, self._offset + have);\n      self._offset += have;\n      // serve some output to the consumer.\n      if (async) {\n        self.push(out);\n      } else {\n        buffers.push(out);\n        nread += out.length;\n      }\n    }\n\n    // exhausted the output buffer, or used all the input create a new one.\n    if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n      availOutBefore = self._chunkSize;\n      self._offset = 0;\n      self._buffer = Buffer.allocUnsafe(self._chunkSize);\n    }\n\n    if (availOutAfter === 0) {\n      // Not actually done.  Need to reprocess.\n      // Also, update the availInBefore to the availInAfter value,\n      // so that if we have to hit it a third (fourth, etc.) time,\n      // it'll have the correct byte counts.\n      inOff += availInBefore - availInAfter;\n      availInBefore = availInAfter;\n\n      if (!async) return true;\n\n      var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize);\n      newReq.callback = callback; // this same function\n      newReq.buffer = chunk;\n      return;\n    }\n\n    if (!async) return false;\n\n    // finished with the chunk.\n    cb();\n  }\n};\n\nutil.inherits(Deflate, Zlib);\nutil.inherits(Inflate, Zlib);\nutil.inherits(Gzip, Zlib);\nutil.inherits(Gunzip, Zlib);\nutil.inherits(DeflateRaw, Zlib);\nutil.inherits(InflateRaw, Zlib);\nutil.inherits(Unzip, Zlib);\n\n/***/ }),\n\n/***/ 1924:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n\n\n/***/ }),\n\n/***/ 5559:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n\n\n/***/ }),\n\n/***/ 6313:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\nvar clone = (function() {\n'use strict';\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n *    circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n *    a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n *    (optional - defaults to parent prototype).\n*/\nfunction clone(parent, circular, depth, prototype) {\n  var filter;\n  if (typeof circular === 'object') {\n    depth = circular.depth;\n    prototype = circular.prototype;\n    filter = circular.filter;\n    circular = circular.circular\n  }\n  // maintain two arrays for circular references, where corresponding parents\n  // and children have the same index\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n\n  // recurse this function so we don't reset allParents and allChildren\n  function _clone(parent, depth) {\n    // cloning null always returns null\n    if (parent === null)\n      return null;\n\n    if (depth == 0)\n      return parent;\n\n    var child;\n    var proto;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (clone.__isArray(parent)) {\n      child = [];\n    } else if (clone.__isRegExp(parent)) {\n      child = new RegExp(parent.source, __getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (clone.__isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      if (Buffer.allocUnsafe) {\n        // Node.js >= 4.5.0\n        child = Buffer.allocUnsafe(parent.length);\n      } else {\n        // Older Node.js versions\n        child = new Buffer(parent.length);\n      }\n      parent.copy(child);\n      return child;\n    } else {\n      if (typeof prototype == 'undefined') {\n        proto = Object.getPrototypeOf(parent);\n        child = Object.create(proto);\n      }\n      else {\n        child = Object.create(prototype);\n        proto = prototype;\n      }\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    for (var i in parent) {\n      var attrs;\n      if (proto) {\n        attrs = Object.getOwnPropertyDescriptor(proto, i);\n      }\n\n      if (attrs && attrs.set == null) {\n        continue;\n      }\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n  return Object.prototype.toString.call(o);\n};\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Date]';\n};\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Array]';\n};\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n};\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n  var flags = '';\n  if (re.global) flags += 'g';\n  if (re.ignoreCase) flags += 'i';\n  if (re.multiline) flags += 'm';\n  return flags;\n};\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif ( true && module.exports) {\n  module.exports = clone;\n}\n\n\n/***/ }),\n\n/***/ 4667:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n__webpack_require__(2479);\nvar path = __webpack_require__(857);\n\nmodule.exports = path.Object.values;\n\n\n/***/ }),\n\n/***/ 7633:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n__webpack_require__(9170);\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(8674);\n__webpack_require__(7922);\n__webpack_require__(4668);\n__webpack_require__(7727);\n__webpack_require__(8783);\nvar path = __webpack_require__(857);\n\nmodule.exports = path.Promise;\n\n\n/***/ }),\n\n/***/ 3867:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar parent = __webpack_require__(1150);\n__webpack_require__(8628);\n// TODO: Remove from `core-js@4`\n__webpack_require__(7314);\n__webpack_require__(7479);\n__webpack_require__(6290);\n\nmodule.exports = parent;\n\n\n/***/ }),\n\n/***/ 9662:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\nvar tryToString = __webpack_require__(6330);\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n  if (isCallable(argument)) return argument;\n  throw TypeError(tryToString(argument) + ' is not a function');\n};\n\n\n/***/ }),\n\n/***/ 9483:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isConstructor = __webpack_require__(4411);\nvar tryToString = __webpack_require__(6330);\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n  if (isConstructor(argument)) return argument;\n  throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n\n\n/***/ }),\n\n/***/ 6077:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n  if (typeof argument == 'object' || isCallable(argument)) return argument;\n  throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n\n\n/***/ }),\n\n/***/ 1223:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\nvar create = __webpack_require__(30);\nvar definePropertyModule = __webpack_require__(3070);\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n  definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n    configurable: true,\n    value: create(null)\n  });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n\n\n/***/ }),\n\n/***/ 1530:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar charAt = (__webpack_require__(8710).charAt);\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? charAt(S, index).length : 1);\n};\n\n\n/***/ }),\n\n/***/ 5787:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isPrototypeOf = __webpack_require__(7976);\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n  if (isPrototypeOf(Prototype, it)) return it;\n  throw TypeError('Incorrect invocation');\n};\n\n\n/***/ }),\n\n/***/ 9670:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n  if (isObject(argument)) return argument;\n  throw TypeError(String(argument) + ' is not an object');\n};\n\n\n/***/ }),\n\n/***/ 1048:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toObject = __webpack_require__(7908);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar lengthOfArrayLike = __webpack_require__(6244);\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n// eslint-disable-next-line es/no-array-prototype-copywithin -- safe\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n  var O = toObject(this);\n  var len = lengthOfArrayLike(O);\n  var to = toAbsoluteIndex(target, len);\n  var from = toAbsoluteIndex(start, len);\n  var end = arguments.length > 2 ? arguments[2] : undefined;\n  var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n  var inc = 1;\n  if (from < to && to < from + count) {\n    inc = -1;\n    from += count - 1;\n    to += count - 1;\n  }\n  while (count-- > 0) {\n    if (from in O) O[to] = O[from];\n    else delete O[to];\n    to += inc;\n    from += inc;\n  } return O;\n};\n\n\n/***/ }),\n\n/***/ 1285:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toObject = __webpack_require__(7908);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar lengthOfArrayLike = __webpack_require__(6244);\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n  var O = toObject(this);\n  var length = lengthOfArrayLike(O);\n  var argumentsLength = arguments.length;\n  var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n  var end = argumentsLength > 2 ? arguments[2] : undefined;\n  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n  while (endPos > index) O[index++] = value;\n  return O;\n};\n\n\n/***/ }),\n\n/***/ 8533:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $forEach = (__webpack_require__(2092).forEach);\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n\n\n/***/ }),\n\n/***/ 7745:\n/***/ (function(module) {\n\nmodule.exports = function (Constructor, list) {\n  var index = 0;\n  var length = list.length;\n  var result = new Constructor(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 8457:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar bind = __webpack_require__(9974);\nvar call = __webpack_require__(6916);\nvar toObject = __webpack_require__(7908);\nvar callWithSafeIterationClosing = __webpack_require__(3411);\nvar isArrayIteratorMethod = __webpack_require__(7659);\nvar isConstructor = __webpack_require__(4411);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar createProperty = __webpack_require__(6135);\nvar getIterator = __webpack_require__(8554);\nvar getIteratorMethod = __webpack_require__(1246);\n\nvar Array = global.Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n  var O = toObject(arrayLike);\n  var IS_CONSTRUCTOR = isConstructor(this);\n  var argumentsLength = arguments.length;\n  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n  var mapping = mapfn !== undefined;\n  if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n  var iteratorMethod = getIteratorMethod(O);\n  var index = 0;\n  var length, result, step, iterator, next, value;\n  // if the target is not iterable or it's an array with the default iterator - use a simple case\n  if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n    iterator = getIterator(O, iteratorMethod);\n    next = iterator.next;\n    result = IS_CONSTRUCTOR ? new this() : [];\n    for (;!(step = call(next, iterator)).done; index++) {\n      value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n      createProperty(result, index, value);\n    }\n  } else {\n    length = lengthOfArrayLike(O);\n    result = IS_CONSTRUCTOR ? new this(length) : Array(length);\n    for (;length > index; index++) {\n      value = mapping ? mapfn(O[index], index) : O[index];\n      createProperty(result, index, value);\n    }\n  }\n  result.length = index;\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 1318:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toIndexedObject = __webpack_require__(5656);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar lengthOfArrayLike = __webpack_require__(6244);\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = lengthOfArrayLike(O);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ 2092:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar bind = __webpack_require__(9974);\nvar uncurryThis = __webpack_require__(1702);\nvar IndexedObject = __webpack_require__(8361);\nvar toObject = __webpack_require__(7908);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar arraySpeciesCreate = __webpack_require__(5417);\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var IS_FILTER_REJECT = TYPE == 7;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  return function ($this, callbackfn, that, specificCreate) {\n    var O = toObject($this);\n    var self = IndexedObject(O);\n    var boundFunction = bind(callbackfn, that);\n    var length = lengthOfArrayLike(self);\n    var index = 0;\n    var create = specificCreate || arraySpeciesCreate;\n    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n    var value, result;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      value = self[index];\n      result = boundFunction(value, index, O);\n      if (TYPE) {\n        if (IS_MAP) target[index] = result; // map\n        else if (result) switch (TYPE) {\n          case 3: return true;              // some\n          case 5: return value;             // find\n          case 6: return index;             // findIndex\n          case 2: push(target, value);      // filter\n        } else switch (TYPE) {\n          case 4: return false;             // every\n          case 7: push(target, value);      // filterReject\n        }\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.forEach` method\n  // https://tc39.es/ecma262/#sec-array.prototype.foreach\n  forEach: createMethod(0),\n  // `Array.prototype.map` method\n  // https://tc39.es/ecma262/#sec-array.prototype.map\n  map: createMethod(1),\n  // `Array.prototype.filter` method\n  // https://tc39.es/ecma262/#sec-array.prototype.filter\n  filter: createMethod(2),\n  // `Array.prototype.some` method\n  // https://tc39.es/ecma262/#sec-array.prototype.some\n  some: createMethod(3),\n  // `Array.prototype.every` method\n  // https://tc39.es/ecma262/#sec-array.prototype.every\n  every: createMethod(4),\n  // `Array.prototype.find` method\n  // https://tc39.es/ecma262/#sec-array.prototype.find\n  find: createMethod(5),\n  // `Array.prototype.findIndex` method\n  // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n  findIndex: createMethod(6),\n  // `Array.prototype.filterReject` method\n  // https://github.com/tc39/proposal-array-filtering\n  filterReject: createMethod(7)\n};\n\n\n/***/ }),\n\n/***/ 6583:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n/* eslint-disable es/no-array-prototype-lastindexof -- safe */\nvar apply = __webpack_require__(2104);\nvar toIndexedObject = __webpack_require__(5656);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar min = Math.min;\nvar $lastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$lastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n  // convert -0 to +0\n  if (NEGATIVE_ZERO) return apply($lastIndexOf, this, arguments) || 0;\n  var O = toIndexedObject(this);\n  var length = lengthOfArrayLike(O);\n  var index = length - 1;\n  if (arguments.length > 1) index = min(index, toIntegerOrInfinity(arguments[1]));\n  if (index < 0) index = length + index;\n  for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n  return -1;\n} : $lastIndexOf;\n\n\n/***/ }),\n\n/***/ 1194:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar V8_VERSION = __webpack_require__(7392);\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n  // We can't use this feature detection in V8 since it causes\n  // deoptimization and serious performance degradation\n  // https://github.com/zloirock/core-js/issues/677\n  return V8_VERSION >= 51 || !fails(function () {\n    var array = [];\n    var constructor = array.constructor = {};\n    constructor[SPECIES] = function () {\n      return { foo: 1 };\n    };\n    return array[METHOD_NAME](Boolean).foo !== 1;\n  });\n};\n\n\n/***/ }),\n\n/***/ 9341:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = function (METHOD_NAME, argument) {\n  var method = [][METHOD_NAME];\n  return !!method && fails(function () {\n    // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n    method.call(null, argument || function () { throw 1; }, 1);\n  });\n};\n\n\n/***/ }),\n\n/***/ 3671:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar aCallable = __webpack_require__(9662);\nvar toObject = __webpack_require__(7908);\nvar IndexedObject = __webpack_require__(8361);\nvar lengthOfArrayLike = __webpack_require__(6244);\n\nvar TypeError = global.TypeError;\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n  return function (that, callbackfn, argumentsLength, memo) {\n    aCallable(callbackfn);\n    var O = toObject(that);\n    var self = IndexedObject(O);\n    var length = lengthOfArrayLike(O);\n    var index = IS_RIGHT ? length - 1 : 0;\n    var i = IS_RIGHT ? -1 : 1;\n    if (argumentsLength < 2) while (true) {\n      if (index in self) {\n        memo = self[index];\n        index += i;\n        break;\n      }\n      index += i;\n      if (IS_RIGHT ? index < 0 : length <= index) {\n        throw TypeError('Reduce of empty array with no initial value');\n      }\n    }\n    for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n      memo = callbackfn(memo, self[index], index, O);\n    }\n    return memo;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.reduce` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduce\n  left: createMethod(false),\n  // `Array.prototype.reduceRight` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n  right: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ 206:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\nmodule.exports = uncurryThis([].slice);\n\n\n/***/ }),\n\n/***/ 4362:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar arraySlice = __webpack_require__(206);\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n  var length = array.length;\n  var middle = floor(length / 2);\n  return length < 8 ? insertionSort(array, comparefn) : merge(\n    array,\n    mergeSort(arraySlice(array, 0, middle), comparefn),\n    mergeSort(arraySlice(array, middle), comparefn),\n    comparefn\n  );\n};\n\nvar insertionSort = function (array, comparefn) {\n  var length = array.length;\n  var i = 1;\n  var element, j;\n\n  while (i < length) {\n    j = i;\n    element = array[i];\n    while (j && comparefn(array[j - 1], element) > 0) {\n      array[j] = array[--j];\n    }\n    if (j !== i++) array[j] = element;\n  } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n  var llength = left.length;\n  var rlength = right.length;\n  var lindex = 0;\n  var rindex = 0;\n\n  while (lindex < llength || rindex < rlength) {\n    array[lindex + rindex] = (lindex < llength && rindex < rlength)\n      ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n      : lindex < llength ? left[lindex++] : right[rindex++];\n  } return array;\n};\n\nmodule.exports = mergeSort;\n\n\n/***/ }),\n\n/***/ 7475:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isArray = __webpack_require__(3157);\nvar isConstructor = __webpack_require__(4411);\nvar isObject = __webpack_require__(111);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n  var C;\n  if (isArray(originalArray)) {\n    C = originalArray.constructor;\n    // cross-realm fallback\n    if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n    else if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n\n\n/***/ }),\n\n/***/ 5417:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar arraySpeciesConstructor = __webpack_require__(7475);\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n  return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n\n\n/***/ }),\n\n/***/ 3411:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar iteratorClose = __webpack_require__(9212);\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n  try {\n    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n  } catch (error) {\n    iteratorClose(iterator, 'throw', error);\n  }\n};\n\n\n/***/ }),\n\n/***/ 7072:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var called = 0;\n  var iteratorWithReturn = {\n    next: function () {\n      return { done: !!called++ };\n    },\n    'return': function () {\n      SAFE_CLOSING = true;\n    }\n  };\n  iteratorWithReturn[ITERATOR] = function () {\n    return this;\n  };\n  // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n  Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n  if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n  var ITERATION_SUPPORT = false;\n  try {\n    var object = {};\n    object[ITERATOR] = function () {\n      return {\n        next: function () {\n          return { done: ITERATION_SUPPORT = true };\n        }\n      };\n    };\n    exec(object);\n  } catch (error) { /* empty */ }\n  return ITERATION_SUPPORT;\n};\n\n\n/***/ }),\n\n/***/ 4326:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n  return stringSlice(toString(it), 8, -1);\n};\n\n\n/***/ }),\n\n/***/ 648:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar isCallable = __webpack_require__(614);\nvar classofRaw = __webpack_require__(4326);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n\n\n/***/ }),\n\n/***/ 7741:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar arraySlice = __webpack_require__(206);\n\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar join = uncurryThis([].join);\n\nvar TEST = (function (arg) { return String(Error(arg).stack); })('zxcasd');\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\nvar IS_FIREFOX_OR_SAFARI_STACK = /@[^\\n]*\\n/.test(TEST) && !/zxcasd/.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n  if (typeof stack != 'string') return stack;\n  if (IS_V8_OR_CHAKRA_STACK) {\n    while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n  } else if (IS_FIREFOX_OR_SAFARI_STACK) {\n    return join(arraySlice(split(stack, '\\n'), dropEntries), '\\n');\n  } return stack;\n};\n\n\n/***/ }),\n\n/***/ 5631:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar defineProperty = (__webpack_require__(3070).f);\nvar create = __webpack_require__(30);\nvar redefineAll = __webpack_require__(2248);\nvar bind = __webpack_require__(9974);\nvar anInstance = __webpack_require__(5787);\nvar iterate = __webpack_require__(408);\nvar defineIterator = __webpack_require__(654);\nvar setSpecies = __webpack_require__(6340);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar fastKey = (__webpack_require__(2423).fastKey);\nvar InternalStateModule = __webpack_require__(9909);\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var Constructor = wrapper(function (that, iterable) {\n      anInstance(that, Prototype);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        index: create(null),\n        first: undefined,\n        last: undefined,\n        size: 0\n      });\n      if (!DESCRIPTORS) that.size = 0;\n      if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n    });\n\n    var Prototype = Constructor.prototype;\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var entry = getEntry(that, key);\n      var previous, index;\n      // change existing entry\n      if (entry) {\n        entry.value = value;\n      // create new entry\n      } else {\n        state.last = entry = {\n          index: index = fastKey(key, true),\n          key: key,\n          value: value,\n          previous: previous = state.last,\n          next: undefined,\n          removed: false\n        };\n        if (!state.first) state.first = entry;\n        if (previous) previous.next = entry;\n        if (DESCRIPTORS) state.size++;\n        else that.size++;\n        // add to index\n        if (index !== 'F') state.index[index] = entry;\n      } return that;\n    };\n\n    var getEntry = function (that, key) {\n      var state = getInternalState(that);\n      // fast case\n      var index = fastKey(key);\n      var entry;\n      if (index !== 'F') return state.index[index];\n      // frozen object case\n      for (entry = state.first; entry; entry = entry.next) {\n        if (entry.key == key) return entry;\n      }\n    };\n\n    redefineAll(Prototype, {\n      // `{ Map, Set }.prototype.clear()` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.clear\n      // https://tc39.es/ecma262/#sec-set.prototype.clear\n      clear: function clear() {\n        var that = this;\n        var state = getInternalState(that);\n        var data = state.index;\n        var entry = state.first;\n        while (entry) {\n          entry.removed = true;\n          if (entry.previous) entry.previous = entry.previous.next = undefined;\n          delete data[entry.index];\n          entry = entry.next;\n        }\n        state.first = state.last = undefined;\n        if (DESCRIPTORS) state.size = 0;\n        else that.size = 0;\n      },\n      // `{ Map, Set }.prototype.delete(key)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.delete\n      // https://tc39.es/ecma262/#sec-set.prototype.delete\n      'delete': function (key) {\n        var that = this;\n        var state = getInternalState(that);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.next;\n          var prev = entry.previous;\n          delete state.index[entry.index];\n          entry.removed = true;\n          if (prev) prev.next = next;\n          if (next) next.previous = prev;\n          if (state.first == entry) state.first = next;\n          if (state.last == entry) state.last = prev;\n          if (DESCRIPTORS) state.size--;\n          else that.size--;\n        } return !!entry;\n      },\n      // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.foreach\n      // https://tc39.es/ecma262/#sec-set.prototype.foreach\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        var state = getInternalState(this);\n        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n        var entry;\n        while (entry = entry ? entry.next : state.first) {\n          boundFunction(entry.value, entry.key, this);\n          // revert to the last existing entry\n          while (entry && entry.removed) entry = entry.previous;\n        }\n      },\n      // `{ Map, Set}.prototype.has(key)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.has\n      // https://tc39.es/ecma262/#sec-set.prototype.has\n      has: function has(key) {\n        return !!getEntry(this, key);\n      }\n    });\n\n    redefineAll(Prototype, IS_MAP ? {\n      // `Map.prototype.get(key)` method\n      // https://tc39.es/ecma262/#sec-map.prototype.get\n      get: function get(key) {\n        var entry = getEntry(this, key);\n        return entry && entry.value;\n      },\n      // `Map.prototype.set(key, value)` method\n      // https://tc39.es/ecma262/#sec-map.prototype.set\n      set: function set(key, value) {\n        return define(this, key === 0 ? 0 : key, value);\n      }\n    } : {\n      // `Set.prototype.add(value)` method\n      // https://tc39.es/ecma262/#sec-set.prototype.add\n      add: function add(value) {\n        return define(this, value = value === 0 ? 0 : value, value);\n      }\n    });\n    if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n      get: function () {\n        return getInternalState(this).size;\n      }\n    });\n    return Constructor;\n  },\n  setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n    // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n    // https://tc39.es/ecma262/#sec-map.prototype.entries\n    // https://tc39.es/ecma262/#sec-map.prototype.keys\n    // https://tc39.es/ecma262/#sec-map.prototype.values\n    // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n    // https://tc39.es/ecma262/#sec-set.prototype.entries\n    // https://tc39.es/ecma262/#sec-set.prototype.keys\n    // https://tc39.es/ecma262/#sec-set.prototype.values\n    // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n    defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n      setInternalState(this, {\n        type: ITERATOR_NAME,\n        target: iterated,\n        state: getInternalCollectionState(iterated),\n        kind: kind,\n        last: undefined\n      });\n    }, function () {\n      var state = getInternalIteratorState(this);\n      var kind = state.kind;\n      var entry = state.last;\n      // revert to the last existing entry\n      while (entry && entry.removed) entry = entry.previous;\n      // get next entry\n      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n        // or finish the iteration\n        state.target = undefined;\n        return { value: undefined, done: true };\n      }\n      // return step by kind\n      if (kind == 'keys') return { value: entry.key, done: false };\n      if (kind == 'values') return { value: entry.value, done: false };\n      return { value: [entry.key, entry.value], done: false };\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // `{ Map, Set }.prototype[@@species]` accessors\n    // https://tc39.es/ecma262/#sec-get-map-@@species\n    // https://tc39.es/ecma262/#sec-get-set-@@species\n    setSpecies(CONSTRUCTOR_NAME);\n  }\n};\n\n\n/***/ }),\n\n/***/ 7710:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar isForced = __webpack_require__(4705);\nvar redefine = __webpack_require__(1320);\nvar InternalMetadataModule = __webpack_require__(2423);\nvar iterate = __webpack_require__(408);\nvar anInstance = __webpack_require__(5787);\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\nvar fails = __webpack_require__(7293);\nvar checkCorrectnessOfIteration = __webpack_require__(7072);\nvar setToStringTag = __webpack_require__(8003);\nvar inheritIfRequired = __webpack_require__(9587);\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n  var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n  var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var NativeConstructor = global[CONSTRUCTOR_NAME];\n  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n  var Constructor = NativeConstructor;\n  var exported = {};\n\n  var fixMethod = function (KEY) {\n    var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n    redefine(NativePrototype, KEY,\n      KEY == 'add' ? function add(value) {\n        uncurriedNativeMethod(this, value === 0 ? 0 : value);\n        return this;\n      } : KEY == 'delete' ? function (key) {\n        return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n      } : KEY == 'get' ? function get(key) {\n        return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n      } : KEY == 'has' ? function has(key) {\n        return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n      } : function set(key, value) {\n        uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n        return this;\n      }\n    );\n  };\n\n  var REPLACE = isForced(\n    CONSTRUCTOR_NAME,\n    !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n      new NativeConstructor().entries().next();\n    }))\n  );\n\n  if (REPLACE) {\n    // create collection constructor\n    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n    InternalMetadataModule.enable();\n  } else if (isForced(CONSTRUCTOR_NAME, true)) {\n    var instance = new Constructor();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    // eslint-disable-next-line no-new -- required for testing\n    var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new NativeConstructor();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n\n    if (!ACCEPT_ITERABLES) {\n      Constructor = wrapper(function (dummy, iterable) {\n        anInstance(dummy, NativePrototype);\n        var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n        if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n        return that;\n      });\n      Constructor.prototype = NativePrototype;\n      NativePrototype.constructor = Constructor;\n    }\n\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n    // weak collections should not contains .clear method\n    if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n  }\n\n  exported[CONSTRUCTOR_NAME] = Constructor;\n  $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n  setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n  return Constructor;\n};\n\n\n/***/ }),\n\n/***/ 9920:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar hasOwn = __webpack_require__(2597);\nvar ownKeys = __webpack_require__(3887);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar definePropertyModule = __webpack_require__(3070);\n\nmodule.exports = function (target, source) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n  }\n};\n\n\n/***/ }),\n\n/***/ 4964:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n  var regexp = /./;\n  try {\n    '/./'[METHOD_NAME](regexp);\n  } catch (error1) {\n    try {\n      regexp[MATCH] = false;\n      return '/./'[METHOD_NAME](regexp);\n    } catch (error2) { /* empty */ }\n  } return false;\n};\n\n\n/***/ }),\n\n/***/ 8544:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n\n\n/***/ }),\n\n/***/ 4230:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar toString = __webpack_require__(1340);\n\nvar quot = /\"/g;\nvar replace = uncurryThis(''.replace);\n\n// `CreateHTML` abstract operation\n// https://tc39.es/ecma262/#sec-createhtml\nmodule.exports = function (string, tag, attribute, value) {\n  var S = toString(requireObjectCoercible(string));\n  var p1 = '<' + tag;\n  if (attribute !== '') p1 += ' ' + attribute + '=\"' + replace(toString(value), quot, '&quot;') + '\"';\n  return p1 + '>' + S + '</' + tag + '>';\n};\n\n\n/***/ }),\n\n/***/ 4994:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar IteratorPrototype = (__webpack_require__(3383).IteratorPrototype);\nvar create = __webpack_require__(30);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar setToStringTag = __webpack_require__(8003);\nvar Iterators = __webpack_require__(7497);\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\n\n\n/***/ }),\n\n/***/ 8880:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar definePropertyModule = __webpack_require__(3070);\nvar createPropertyDescriptor = __webpack_require__(9114);\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n\n\n/***/ }),\n\n/***/ 9114:\n/***/ (function(module) {\n\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\n\n/***/ }),\n\n/***/ 6135:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toPropertyKey = __webpack_require__(4948);\nvar definePropertyModule = __webpack_require__(3070);\nvar createPropertyDescriptor = __webpack_require__(9114);\n\nmodule.exports = function (object, key, value) {\n  var propertyKey = toPropertyKey(key);\n  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n  else object[propertyKey] = value;\n};\n\n\n/***/ }),\n\n/***/ 8709:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar anObject = __webpack_require__(9670);\nvar ordinaryToPrimitive = __webpack_require__(2140);\n\nvar TypeError = global.TypeError;\n\n// `Date.prototype[@@toPrimitive](hint)` method implementation\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nmodule.exports = function (hint) {\n  anObject(this);\n  if (hint === 'string' || hint === 'default') hint = 'string';\n  else if (hint !== 'number') throw TypeError('Incorrect hint');\n  return ordinaryToPrimitive(this, hint);\n};\n\n\n/***/ }),\n\n/***/ 654:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar call = __webpack_require__(6916);\nvar IS_PURE = __webpack_require__(1913);\nvar FunctionName = __webpack_require__(6530);\nvar isCallable = __webpack_require__(614);\nvar createIteratorConstructor = __webpack_require__(4994);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar setToStringTag = __webpack_require__(8003);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar Iterators = __webpack_require__(7497);\nvar IteratorsCore = __webpack_require__(3383);\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n  createIteratorConstructor(IteratorConstructor, NAME, next);\n\n  var getIterationMethod = function (KIND) {\n    if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n    switch (KIND) {\n      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n    } return function () { return new IteratorConstructor(this); };\n  };\n\n  var TO_STRING_TAG = NAME + ' Iterator';\n  var INCORRECT_VALUES_NAME = false;\n  var IterablePrototype = Iterable.prototype;\n  var nativeIterator = IterablePrototype[ITERATOR]\n    || IterablePrototype['@@iterator']\n    || DEFAULT && IterablePrototype[DEFAULT];\n  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n  var CurrentIteratorPrototype, methods, KEY;\n\n  // fix native\n  if (anyNativeIterator) {\n    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n    if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n          redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n        }\n      }\n      // Set @@toStringTag to native iterators\n      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n    }\n  }\n\n  // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n  if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n      createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n    } else {\n      INCORRECT_VALUES_NAME = true;\n      defaultIterator = function values() { return call(nativeIterator, this); };\n    }\n  }\n\n  // export additional methods\n  if (DEFAULT) {\n    methods = {\n      values: getIterationMethod(VALUES),\n      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n      entries: getIterationMethod(ENTRIES)\n    };\n    if (FORCED) for (KEY in methods) {\n      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n        redefine(IterablePrototype, KEY, methods[KEY]);\n      }\n    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n  }\n  Iterators[NAME] = defaultIterator;\n\n  return methods;\n};\n\n\n/***/ }),\n\n/***/ 7235:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar path = __webpack_require__(857);\nvar hasOwn = __webpack_require__(2597);\nvar wrappedWellKnownSymbolModule = __webpack_require__(6061);\nvar defineProperty = (__webpack_require__(3070).f);\n\nmodule.exports = function (NAME) {\n  var Symbol = path.Symbol || (path.Symbol = {});\n  if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n    value: wrappedWellKnownSymbolModule.f(NAME)\n  });\n};\n\n\n/***/ }),\n\n/***/ 9781:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n\n\n/***/ }),\n\n/***/ 317:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n\n/***/ 8324:\n/***/ (function(module) {\n\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n  CSSRuleList: 0,\n  CSSStyleDeclaration: 0,\n  CSSValueList: 0,\n  ClientRectList: 0,\n  DOMRectList: 0,\n  DOMStringList: 0,\n  DOMTokenList: 1,\n  DataTransferItemList: 0,\n  FileList: 0,\n  HTMLAllCollection: 0,\n  HTMLCollection: 0,\n  HTMLFormElement: 0,\n  HTMLSelectElement: 0,\n  MediaList: 0,\n  MimeTypeArray: 0,\n  NamedNodeMap: 0,\n  NodeList: 1,\n  PaintRequestList: 0,\n  Plugin: 0,\n  PluginArray: 0,\n  SVGLengthList: 0,\n  SVGNumberList: 0,\n  SVGPathSegList: 0,\n  SVGPointList: 0,\n  SVGStringList: 0,\n  SVGTransformList: 0,\n  SourceBufferList: 0,\n  StyleSheetList: 0,\n  TextTrackCueList: 0,\n  TextTrackList: 0,\n  TouchList: 0\n};\n\n\n/***/ }),\n\n/***/ 8509:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = __webpack_require__(317);\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n\n\n/***/ }),\n\n/***/ 8886:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar userAgent = __webpack_require__(8113);\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n\n\n/***/ }),\n\n/***/ 7871:\n/***/ (function(module) {\n\nmodule.exports = typeof window == 'object';\n\n\n/***/ }),\n\n/***/ 256:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar UA = __webpack_require__(8113);\n\nmodule.exports = /MSIE|Trident/.test(UA);\n\n\n/***/ }),\n\n/***/ 1528:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar userAgent = __webpack_require__(8113);\nvar global = __webpack_require__(7854);\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n\n\n/***/ }),\n\n/***/ 6833:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar userAgent = __webpack_require__(8113);\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n\n\n/***/ }),\n\n/***/ 5268:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(4326);\nvar global = __webpack_require__(7854);\n\nmodule.exports = classof(global.process) == 'process';\n\n\n/***/ }),\n\n/***/ 1036:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar userAgent = __webpack_require__(8113);\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n\n\n/***/ }),\n\n/***/ 8113:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n\n\n/***/ }),\n\n/***/ 7392:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar userAgent = __webpack_require__(8113);\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n  // but their correct versions are not interesting for us\n  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = +match[1];\n  }\n}\n\nmodule.exports = version;\n\n\n/***/ }),\n\n/***/ 8008:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar userAgent = __webpack_require__(8113);\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n\n\n/***/ }),\n\n/***/ 748:\n/***/ (function(module) {\n\n// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n\n\n/***/ }),\n\n/***/ 2914:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar createPropertyDescriptor = __webpack_require__(9114);\n\nmodule.exports = !fails(function () {\n  var error = Error('a');\n  if (!('stack' in error)) return true;\n  // eslint-disable-next-line es/no-object-defineproperty -- safe\n  Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n  return error.stack !== 7;\n});\n\n\n/***/ }),\n\n/***/ 2109:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar getOwnPropertyDescriptor = (__webpack_require__(1236).f);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar setGlobal = __webpack_require__(3505);\nvar copyConstructorProperties = __webpack_require__(9920);\nvar isForced = __webpack_require__(4705);\n\n/*\n  options.target      - name of the target object\n  options.global      - target is the global object\n  options.stat        - export as static methods of target\n  options.proto       - export as prototype methods of target\n  options.real        - real prototype method for the `pure` version\n  options.forced      - export even if the native feature is available\n  options.bind        - bind methods to the target, required for the `pure` version\n  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe      - use the simple assignment of property instead of delete + defineProperty\n  options.sham        - add a flag to not completely full polyfills\n  options.enumerable  - export as enumerable property\n  options.noTargetGet - prevent calling a getter on target\n  options.name        - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = global;\n  } else if (STATIC) {\n    target = global[TARGET] || setGlobal(TARGET, {});\n  } else {\n    target = (global[TARGET] || {}).prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.noTargetGet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty == typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    // extend global\n    redefine(target, key, sourceProperty, options);\n  }\n};\n\n\n/***/ }),\n\n/***/ 7293:\n/***/ (function(module) {\n\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n\n\n/***/ }),\n\n/***/ 7007:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n// TODO: Remove from `core-js@4` since it's moved to entry points\n__webpack_require__(4916);\nvar uncurryThis = __webpack_require__(1702);\nvar redefine = __webpack_require__(1320);\nvar regexpExec = __webpack_require__(2261);\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n  var SYMBOL = wellKnownSymbol(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n\n    if (KEY === 'split') {\n      // We can't use real regex here since it causes deoptimization\n      // and serious performance degradation in V8\n      // https://github.com/zloirock/core-js/issues/306\n      re = {};\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n      re.flags = '';\n      re[SYMBOL] = /./[SYMBOL];\n    }\n\n    re.exec = function () { execCalled = true; return null; };\n\n    re[SYMBOL]('');\n    return !execCalled;\n  });\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    FORCED\n  ) {\n    var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);\n    var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n      var uncurriedNativeMethod = uncurryThis(nativeMethod);\n      var $exec = regexp.exec;\n      if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n        if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n          // The native String method already delegates to @@method (this\n          // polyfilled function), leasing to infinite recursion.\n          // We avoid it by directly calling the native @@method method.\n          return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };\n        }\n        return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };\n      }\n      return { done: false };\n    });\n\n    redefine(String.prototype, KEY, methods[0]);\n    redefine(RegExpPrototype, SYMBOL, methods[1]);\n  }\n\n  if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n\n\n/***/ }),\n\n/***/ 6677:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n  return Object.isExtensible(Object.preventExtensions({}));\n});\n\n\n/***/ }),\n\n/***/ 2104:\n/***/ (function(module) {\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () {\n  return call.apply(apply, arguments);\n});\n\n\n/***/ }),\n\n/***/ 9974:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar aCallable = __webpack_require__(9662);\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n  aCallable(fn);\n  return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n\n\n/***/ }),\n\n/***/ 7065:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar aCallable = __webpack_require__(9662);\nvar isObject = __webpack_require__(111);\nvar hasOwn = __webpack_require__(2597);\nvar arraySlice = __webpack_require__(206);\n\nvar Function = global.Function;\nvar concat = uncurryThis([].concat);\nvar join = uncurryThis([].join);\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n  if (!hasOwn(factories, argsLength)) {\n    for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n    factories[argsLength] = Function('C,a', 'return new C(' + join(list, ',') + ')');\n  } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n  var F = aCallable(this);\n  var Prototype = F.prototype;\n  var partArgs = arraySlice(arguments, 1);\n  var boundFunction = function bound(/* args... */) {\n    var args = concat(partArgs, arraySlice(arguments));\n    return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);\n  };\n  if (isObject(Prototype)) boundFunction.prototype = Prototype;\n  return boundFunction;\n};\n\n\n/***/ }),\n\n/***/ 6916:\n/***/ (function(module) {\n\nvar call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n  return call.apply(call, arguments);\n};\n\n\n/***/ }),\n\n/***/ 6530:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar hasOwn = __webpack_require__(2597);\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n  EXISTS: EXISTS,\n  PROPER: PROPER,\n  CONFIGURABLE: CONFIGURABLE\n};\n\n\n/***/ }),\n\n/***/ 1702:\n/***/ (function(module) {\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\n\nmodule.exports = bind ? function (fn) {\n  return fn && callBind(call, fn);\n} : function (fn) {\n  return fn && function () {\n    return call.apply(fn, arguments);\n  };\n};\n\n\n/***/ }),\n\n/***/ 5005:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\n\nvar aFunction = function (argument) {\n  return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n\n\n/***/ }),\n\n/***/ 1246:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(648);\nvar getMethod = __webpack_require__(8173);\nvar Iterators = __webpack_require__(7497);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (it != undefined) return getMethod(it, ITERATOR)\n    || getMethod(it, '@@iterator')\n    || Iterators[classof(it)];\n};\n\n\n/***/ }),\n\n/***/ 8554:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar aCallable = __webpack_require__(9662);\nvar anObject = __webpack_require__(9670);\nvar tryToString = __webpack_require__(6330);\nvar getIteratorMethod = __webpack_require__(1246);\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n  throw TypeError(tryToString(argument) + ' is not iterable');\n};\n\n\n/***/ }),\n\n/***/ 8173:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar aCallable = __webpack_require__(9662);\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n  var func = V[P];\n  return func == null ? undefined : aCallable(func);\n};\n\n\n/***/ }),\n\n/***/ 647:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar toObject = __webpack_require__(7908);\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n  var tailPos = position + matched.length;\n  var m = captures.length;\n  var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n  if (namedCaptures !== undefined) {\n    namedCaptures = toObject(namedCaptures);\n    symbols = SUBSTITUTION_SYMBOLS;\n  }\n  return replace(replacement, symbols, function (match, ch) {\n    var capture;\n    switch (charAt(ch, 0)) {\n      case '$': return '$';\n      case '&': return matched;\n      case '`': return stringSlice(str, 0, position);\n      case \"'\": return stringSlice(str, tailPos);\n      case '<':\n        capture = namedCaptures[stringSlice(ch, 1, -1)];\n        break;\n      default: // \\d\\d?\n        var n = +ch;\n        if (n === 0) return match;\n        if (n > m) {\n          var f = floor(n / 10);\n          if (f === 0) return match;\n          if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n          return match;\n        }\n        capture = captures[n - 1];\n    }\n    return capture === undefined ? '' : capture;\n  });\n};\n\n\n/***/ }),\n\n/***/ 7854:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n\n\n/***/ }),\n\n/***/ 2597:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar toObject = __webpack_require__(7908);\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n  return hasOwnProperty(toObject(it), key);\n};\n\n\n/***/ }),\n\n/***/ 3501:\n/***/ (function(module) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 842:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nmodule.exports = function (a, b) {\n  var console = global.console;\n  if (console && console.error) {\n    arguments.length == 1 ? console.error(a) : console.error(a, b);\n  }\n};\n\n\n/***/ }),\n\n/***/ 490:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n\n\n/***/ }),\n\n/***/ 4664:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar fails = __webpack_require__(7293);\nvar createElement = __webpack_require__(317);\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ 1179:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nvar global = __webpack_require__(7854);\n\nvar Array = global.Array;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n  var buffer = Array(bytes);\n  var exponentLength = bytes * 8 - mantissaLength - 1;\n  var eMax = (1 << exponentLength) - 1;\n  var eBias = eMax >> 1;\n  var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n  var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n  var index = 0;\n  var exponent, mantissa, c;\n  number = abs(number);\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (number != number || number === Infinity) {\n    // eslint-disable-next-line no-self-compare -- NaN check\n    mantissa = number != number ? 1 : 0;\n    exponent = eMax;\n  } else {\n    exponent = floor(log(number) / LN2);\n    if (number * (c = pow(2, -exponent)) < 1) {\n      exponent--;\n      c *= 2;\n    }\n    if (exponent + eBias >= 1) {\n      number += rt / c;\n    } else {\n      number += rt * pow(2, 1 - eBias);\n    }\n    if (number * c >= 2) {\n      exponent++;\n      c /= 2;\n    }\n    if (exponent + eBias >= eMax) {\n      mantissa = 0;\n      exponent = eMax;\n    } else if (exponent + eBias >= 1) {\n      mantissa = (number * c - 1) * pow(2, mantissaLength);\n      exponent = exponent + eBias;\n    } else {\n      mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n      exponent = 0;\n    }\n  }\n  for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);\n  exponent = exponent << mantissaLength | mantissa;\n  exponentLength += mantissaLength;\n  for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);\n  buffer[--index] |= sign * 128;\n  return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n  var bytes = buffer.length;\n  var exponentLength = bytes * 8 - mantissaLength - 1;\n  var eMax = (1 << exponentLength) - 1;\n  var eBias = eMax >> 1;\n  var nBits = exponentLength - 7;\n  var index = bytes - 1;\n  var sign = buffer[index--];\n  var exponent = sign & 127;\n  var mantissa;\n  sign >>= 7;\n  for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);\n  mantissa = exponent & (1 << -nBits) - 1;\n  exponent >>= -nBits;\n  nBits += mantissaLength;\n  for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);\n  if (exponent === 0) {\n    exponent = 1 - eBias;\n  } else if (exponent === eMax) {\n    return mantissa ? NaN : sign ? -Infinity : Infinity;\n  } else {\n    mantissa = mantissa + pow(2, mantissaLength);\n    exponent = exponent - eBias;\n  } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n  pack: pack,\n  unpack: unpack\n};\n\n\n/***/ }),\n\n/***/ 8361:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar fails = __webpack_require__(7293);\nvar classof = __webpack_require__(4326);\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n\n\n/***/ }),\n\n/***/ 9587:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\nvar setPrototypeOf = __webpack_require__(7674);\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n  var NewTarget, NewTargetPrototype;\n  if (\n    // it can work only with native `setPrototypeOf`\n    setPrototypeOf &&\n    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n    isCallable(NewTarget = dummy.constructor) &&\n    NewTarget !== Wrapper &&\n    isObject(NewTargetPrototype = NewTarget.prototype) &&\n    NewTargetPrototype !== Wrapper.prototype\n  ) setPrototypeOf($this, NewTargetPrototype);\n  return $this;\n};\n\n\n/***/ }),\n\n/***/ 2788:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar isCallable = __webpack_require__(614);\nvar store = __webpack_require__(5465);\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n  store.inspectSource = function (it) {\n    return functionToString(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n\n\n/***/ }),\n\n/***/ 8340:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n  if (isObject(options) && 'cause' in options) {\n    createNonEnumerableProperty(O, 'cause', options.cause);\n  }\n};\n\n\n/***/ }),\n\n/***/ 2423:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar uncurryThis = __webpack_require__(1702);\nvar hiddenKeys = __webpack_require__(3501);\nvar isObject = __webpack_require__(111);\nvar hasOwn = __webpack_require__(2597);\nvar defineProperty = (__webpack_require__(3070).f);\nvar getOwnPropertyNamesModule = __webpack_require__(8006);\nvar getOwnPropertyNamesExternalModule = __webpack_require__(1156);\nvar uid = __webpack_require__(9711);\nvar FREEZING = __webpack_require__(6677);\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\n\nvar setMetadata = function (it) {\n  defineProperty(it, METADATA, { value: {\n    objectID: 'O' + id++, // object ID\n    weakData: {}          // weak collections IDs\n  } });\n};\n\nvar fastKey = function (it, create) {\n  // return a primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!hasOwn(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMetadata(it);\n  // return object ID\n  } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n  if (!hasOwn(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMetadata(it);\n  // return the store of weak collections IDs\n  } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n  return it;\n};\n\nvar enable = function () {\n  meta.enable = function () { /* empty */ };\n  REQUIRED = true;\n  var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n  var splice = uncurryThis([].splice);\n  var test = {};\n  test[METADATA] = 1;\n\n  // prevent exposing of metadata key\n  if (getOwnPropertyNames(test).length) {\n    getOwnPropertyNamesModule.f = function (it) {\n      var result = getOwnPropertyNames(it);\n      for (var i = 0, length = result.length; i < length; i++) {\n        if (result[i] === METADATA) {\n          splice(result, i, 1);\n          break;\n        }\n      } return result;\n    };\n\n    $({ target: 'Object', stat: true, forced: true }, {\n      getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n    });\n  }\n};\n\nvar meta = module.exports = {\n  enable: enable,\n  fastKey: fastKey,\n  getWeakData: getWeakData,\n  onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n\n\n/***/ }),\n\n/***/ 9909:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar NATIVE_WEAK_MAP = __webpack_require__(8536);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar isObject = __webpack_require__(111);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar hasOwn = __webpack_require__(2597);\nvar shared = __webpack_require__(5465);\nvar sharedKey = __webpack_require__(6200);\nvar hiddenKeys = __webpack_require__(3501);\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n  var store = shared.state || (shared.state = new WeakMap());\n  var wmget = uncurryThis(store.get);\n  var wmhas = uncurryThis(store.has);\n  var wmset = uncurryThis(store.set);\n  set = function (it, metadata) {\n    if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    wmset(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return hasOwn(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return hasOwn(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n\n\n/***/ }),\n\n/***/ 7659:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\nvar Iterators = __webpack_require__(7497);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n\n\n/***/ }),\n\n/***/ 3157:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(4326);\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n  return classof(argument) == 'Array';\n};\n\n\n/***/ }),\n\n/***/ 614:\n/***/ (function(module) {\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n  return typeof argument == 'function';\n};\n\n\n/***/ }),\n\n/***/ 4411:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar fails = __webpack_require__(7293);\nvar isCallable = __webpack_require__(614);\nvar classof = __webpack_require__(648);\nvar getBuiltIn = __webpack_require__(5005);\nvar inspectSource = __webpack_require__(2788);\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function (argument) {\n  if (!isCallable(argument)) return false;\n  try {\n    construct(noop, empty, argument);\n    return true;\n  } catch (error) {\n    return false;\n  }\n};\n\nvar isConstructorLegacy = function (argument) {\n  if (!isCallable(argument)) return false;\n  switch (classof(argument)) {\n    case 'AsyncFunction':\n    case 'GeneratorFunction':\n    case 'AsyncGeneratorFunction': return false;\n    // we can't check .prototype since constructors produced by .bind haven't it\n  } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n  var called;\n  return isConstructorModern(isConstructorModern.call)\n    || !isConstructorModern(Object)\n    || !isConstructorModern(function () { called = true; })\n    || called;\n}) ? isConstructorLegacy : isConstructorModern;\n\n\n/***/ }),\n\n/***/ 4705:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar isCallable = __webpack_require__(614);\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : isCallable(detection) ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n\n\n/***/ }),\n\n/***/ 5988:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\n\nvar floor = Math.floor;\n\n// `IsIntegralNumber` abstract operation\n// https://tc39.es/ecma262/#sec-isintegralnumber\n// eslint-disable-next-line es/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n\n\n/***/ }),\n\n/***/ 111:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isCallable = __webpack_require__(614);\n\nmodule.exports = function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it);\n};\n\n\n/***/ }),\n\n/***/ 1913:\n/***/ (function(module) {\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ 7850:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar classof = __webpack_require__(4326);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n\n\n/***/ }),\n\n/***/ 2190:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar getBuiltIn = __webpack_require__(5005);\nvar isCallable = __webpack_require__(614);\nvar isPrototypeOf = __webpack_require__(7976);\nvar USE_SYMBOL_AS_UID = __webpack_require__(3307);\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  var $Symbol = getBuiltIn('Symbol');\n  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n\n\n/***/ }),\n\n/***/ 408:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar bind = __webpack_require__(9974);\nvar call = __webpack_require__(6916);\nvar anObject = __webpack_require__(9670);\nvar tryToString = __webpack_require__(6330);\nvar isArrayIteratorMethod = __webpack_require__(7659);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar isPrototypeOf = __webpack_require__(7976);\nvar getIterator = __webpack_require__(8554);\nvar getIteratorMethod = __webpack_require__(1246);\nvar iteratorClose = __webpack_require__(9212);\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n  var that = options && options.that;\n  var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n  var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n  var INTERRUPTED = !!(options && options.INTERRUPTED);\n  var fn = bind(unboundFunction, that);\n  var iterator, iterFn, index, length, result, next, step;\n\n  var stop = function (condition) {\n    if (iterator) iteratorClose(iterator, 'normal', condition);\n    return new Result(true, condition);\n  };\n\n  var callFn = function (value) {\n    if (AS_ENTRIES) {\n      anObject(value);\n      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n    } return INTERRUPTED ? fn(value, stop) : fn(value);\n  };\n\n  if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n        result = callFn(iterable[index]);\n        if (result && isPrototypeOf(ResultPrototype, result)) return result;\n      } return new Result(false);\n    }\n    iterator = getIterator(iterable, iterFn);\n  }\n\n  next = iterator.next;\n  while (!(step = call(next, iterator)).done) {\n    try {\n      result = callFn(step.value);\n    } catch (error) {\n      iteratorClose(iterator, 'throw', error);\n    }\n    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n  } return new Result(false);\n};\n\n\n/***/ }),\n\n/***/ 9212:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar call = __webpack_require__(6916);\nvar anObject = __webpack_require__(9670);\nvar getMethod = __webpack_require__(8173);\n\nmodule.exports = function (iterator, kind, value) {\n  var innerResult, innerError;\n  anObject(iterator);\n  try {\n    innerResult = getMethod(iterator, 'return');\n    if (!innerResult) {\n      if (kind === 'throw') throw value;\n      return value;\n    }\n    innerResult = call(innerResult, iterator);\n  } catch (error) {\n    innerError = true;\n    innerResult = error;\n  }\n  if (kind === 'throw') throw value;\n  if (innerError) throw innerResult;\n  anObject(innerResult);\n  return value;\n};\n\n\n/***/ }),\n\n/***/ 3383:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fails = __webpack_require__(7293);\nvar isCallable = __webpack_require__(614);\nvar create = __webpack_require__(30);\nvar getPrototypeOf = __webpack_require__(9518);\nvar redefine = __webpack_require__(1320);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar IS_PURE = __webpack_require__(1913);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n  var test = {};\n  // FF44- legacy iterators case\n  return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n  redefine(IteratorPrototype, ITERATOR, function () {\n    return this;\n  });\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n\n\n/***/ }),\n\n/***/ 7497:\n/***/ (function(module) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 6244:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toLength = __webpack_require__(7466);\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n  return toLength(obj.length);\n};\n\n\n/***/ }),\n\n/***/ 5948:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar bind = __webpack_require__(9974);\nvar getOwnPropertyDescriptor = (__webpack_require__(1236).f);\nvar macrotask = (__webpack_require__(261).set);\nvar IS_IOS = __webpack_require__(6833);\nvar IS_IOS_PEBBLE = __webpack_require__(1528);\nvar IS_WEBOS_WEBKIT = __webpack_require__(1036);\nvar IS_NODE = __webpack_require__(5268);\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n  flush = function () {\n    var parent, fn;\n    if (IS_NODE && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (error) {\n        if (head) notify();\n        else last = undefined;\n        throw error;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n  // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n  if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n    toggle = true;\n    node = document.createTextNode('');\n    new MutationObserver(flush).observe(node, { characterData: true });\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    promise = Promise.resolve(undefined);\n    // workaround of WebKit ~ iOS Safari 10.1 bug\n    promise.constructor = Promise;\n    then = bind(promise.then, promise);\n    notify = function () {\n      then(flush);\n    };\n  // Node.js without promises\n  } else if (IS_NODE) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    // strange IE + webpack dev server bug - use .bind(global)\n    macrotask = bind(macrotask, global);\n    notify = function () {\n      macrotask(flush);\n    };\n  }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n  var task = { fn: fn, next: undefined };\n  if (last) last.next = task;\n  if (!head) {\n    head = task;\n    notify();\n  } last = task;\n};\n\n\n/***/ }),\n\n/***/ 3366:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nmodule.exports = global.Promise;\n\n\n/***/ }),\n\n/***/ 133:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = __webpack_require__(7392);\nvar fails = __webpack_require__(7293);\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol();\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n  return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n\n\n/***/ }),\n\n/***/ 8536:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\nvar inspectSource = __webpack_require__(2788);\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n\n\n/***/ }),\n\n/***/ 8523:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar aCallable = __webpack_require__(9662);\n\nvar PromiseCapability = function (C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aCallable(resolve);\n  this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n\n\n/***/ }),\n\n/***/ 6277:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toString = __webpack_require__(1340);\n\nmodule.exports = function (argument, $default) {\n  return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n\n\n/***/ }),\n\n/***/ 3929:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isRegExp = __webpack_require__(7850);\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it) {\n  if (isRegExp(it)) {\n    throw TypeError(\"The method doesn't accept regular expressions\");\n  } return it;\n};\n\n\n/***/ }),\n\n/***/ 7023:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nvar globalIsFinite = global.isFinite;\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n// eslint-disable-next-line es/no-number-isfinite -- safe\nmodule.exports = Number.isFinite || function isFinite(it) {\n  return typeof it == 'number' && globalIsFinite(it);\n};\n\n\n/***/ }),\n\n/***/ 1574:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar uncurryThis = __webpack_require__(1702);\nvar call = __webpack_require__(6916);\nvar fails = __webpack_require__(7293);\nvar objectKeys = __webpack_require__(1956);\nvar getOwnPropertySymbolsModule = __webpack_require__(5181);\nvar propertyIsEnumerableModule = __webpack_require__(5296);\nvar toObject = __webpack_require__(7908);\nvar IndexedObject = __webpack_require__(8361);\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n  // should have correct order of operations (Edge bug)\n  if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n    enumerable: true,\n    get: function () {\n      defineProperty(this, 'b', {\n        value: 3,\n        enumerable: false\n      });\n    }\n  }), { b: 2 })).b !== 1) return true;\n  // should work with symbols and should have deterministic property order (V8 bug)\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line es/no-symbol -- safe\n  var symbol = Symbol();\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n  return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n  var T = toObject(target);\n  var argumentsLength = arguments.length;\n  var index = 1;\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  var propertyIsEnumerable = propertyIsEnumerableModule.f;\n  while (argumentsLength > index) {\n    var S = IndexedObject(arguments[index++]);\n    var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n\n\n/***/ }),\n\n/***/ 30:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = __webpack_require__(9670);\nvar defineProperties = __webpack_require__(6048);\nvar enumBugKeys = __webpack_require__(748);\nvar hiddenKeys = __webpack_require__(3501);\nvar html = __webpack_require__(490);\nvar documentCreateElement = __webpack_require__(317);\nvar sharedKey = __webpack_require__(6200);\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  activeXDocument = null; // avoid memory leak\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    activeXDocument = new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = typeof document != 'undefined'\n    ? document.domain && activeXDocument\n      ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n      : NullProtoObjectViaIFrame()\n    : NullProtoObjectViaActiveX(activeXDocument); // WSH\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : defineProperties(result, Properties);\n};\n\n\n/***/ }),\n\n/***/ 6048:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar definePropertyModule = __webpack_require__(3070);\nvar anObject = __webpack_require__(9670);\nvar toIndexedObject = __webpack_require__(5656);\nvar objectKeys = __webpack_require__(1956);\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var props = toIndexedObject(Properties);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n  return O;\n};\n\n\n/***/ }),\n\n/***/ 3070:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar IE8_DOM_DEFINE = __webpack_require__(4664);\nvar anObject = __webpack_require__(9670);\nvar toPropertyKey = __webpack_require__(4948);\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return $defineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n\n\n/***/ }),\n\n/***/ 1236:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar call = __webpack_require__(6916);\nvar propertyIsEnumerableModule = __webpack_require__(5296);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar toIndexedObject = __webpack_require__(5656);\nvar toPropertyKey = __webpack_require__(4948);\nvar hasOwn = __webpack_require__(2597);\nvar IE8_DOM_DEFINE = __webpack_require__(4664);\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPropertyKey(P);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n\n\n/***/ }),\n\n/***/ 1156:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = __webpack_require__(4326);\nvar toIndexedObject = __webpack_require__(5656);\nvar $getOwnPropertyNames = (__webpack_require__(8006).f);\nvar arraySlice = __webpack_require__(206);\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return $getOwnPropertyNames(it);\n  } catch (error) {\n    return arraySlice(windowNames);\n  }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && classof(it) == 'Window'\n    ? getWindowNames(it)\n    : $getOwnPropertyNames(toIndexedObject(it));\n};\n\n\n/***/ }),\n\n/***/ 8006:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(6324);\nvar enumBugKeys = __webpack_require__(748);\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n\n\n/***/ }),\n\n/***/ 5181:\n/***/ (function(__unused_webpack_module, exports) {\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ 9518:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar hasOwn = __webpack_require__(2597);\nvar isCallable = __webpack_require__(614);\nvar toObject = __webpack_require__(7908);\nvar sharedKey = __webpack_require__(6200);\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(8544);\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n  var object = toObject(O);\n  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n  var constructor = object.constructor;\n  if (isCallable(constructor) && object instanceof constructor) {\n    return constructor.prototype;\n  } return object instanceof Object ? ObjectPrototype : null;\n};\n\n\n/***/ }),\n\n/***/ 7976:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n\n\n/***/ }),\n\n/***/ 6324:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar hasOwn = __webpack_require__(2597);\nvar toIndexedObject = __webpack_require__(5656);\nvar indexOf = (__webpack_require__(1318).indexOf);\nvar hiddenKeys = __webpack_require__(3501);\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n    ~indexOf(result, key) || push(result, key);\n  }\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 1956:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(6324);\nvar enumBugKeys = __webpack_require__(748);\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n\n\n/***/ }),\n\n/***/ 5296:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ 7674:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable no-proto -- safe */\nvar uncurryThis = __webpack_require__(1702);\nvar anObject = __webpack_require__(9670);\nvar aPossiblePrototype = __webpack_require__(6077);\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n    setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n    setter(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    anObject(O);\n    aPossiblePrototype(proto);\n    if (CORRECT_SETTER) setter(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n\n\n/***/ }),\n\n/***/ 4699:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar uncurryThis = __webpack_require__(1702);\nvar objectKeys = __webpack_require__(1956);\nvar toIndexedObject = __webpack_require__(5656);\nvar $propertyIsEnumerable = (__webpack_require__(5296).f);\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n  return function (it) {\n    var O = toIndexedObject(it);\n    var keys = objectKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) {\n      key = keys[i++];\n      if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n        push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n      }\n    }\n    return result;\n  };\n};\n\nmodule.exports = {\n  // `Object.entries` method\n  // https://tc39.es/ecma262/#sec-object.entries\n  entries: createMethod(true),\n  // `Object.values` method\n  // https://tc39.es/ecma262/#sec-object.values\n  values: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ 288:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar classof = __webpack_require__(648);\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n  return '[object ' + classof(this) + ']';\n};\n\n\n/***/ }),\n\n/***/ 2140:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n  var fn, val;\n  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n\n/***/ 3887:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\nvar uncurryThis = __webpack_require__(1702);\nvar getOwnPropertyNamesModule = __webpack_require__(8006);\nvar getOwnPropertySymbolsModule = __webpack_require__(5181);\nvar anObject = __webpack_require__(9670);\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n\n\n/***/ }),\n\n/***/ 857:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nmodule.exports = global;\n\n\n/***/ }),\n\n/***/ 2534:\n/***/ (function(module) {\n\nmodule.exports = function (exec) {\n  try {\n    return { error: false, value: exec() };\n  } catch (error) {\n    return { error: true, value: error };\n  }\n};\n\n\n/***/ }),\n\n/***/ 9478:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar isObject = __webpack_require__(111);\nvar newPromiseCapability = __webpack_require__(8523);\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n\n\n/***/ }),\n\n/***/ 2248:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar redefine = __webpack_require__(1320);\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) redefine(target, key, src[key], options);\n  return target;\n};\n\n\n/***/ }),\n\n/***/ 1320:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\nvar hasOwn = __webpack_require__(2597);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar setGlobal = __webpack_require__(3505);\nvar inspectSource = __webpack_require__(2788);\nvar InternalStateModule = __webpack_require__(9909);\nvar CONFIGURABLE_FUNCTION_NAME = (__webpack_require__(6530).CONFIGURABLE);\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n  var unsafe = options ? !!options.unsafe : false;\n  var simple = options ? !!options.enumerable : false;\n  var noTargetGet = options ? !!options.noTargetGet : false;\n  var name = options && options.name !== undefined ? options.name : key;\n  var state;\n  if (isCallable(value)) {\n    if (String(name).slice(0, 7) === 'Symbol(') {\n      name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n    }\n    if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n      createNonEnumerableProperty(value, 'name', name);\n    }\n    state = enforceInternalState(value);\n    if (!state.source) {\n      state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n    }\n  }\n  if (O === global) {\n    if (simple) O[key] = value;\n    else setGlobal(key, value);\n    return;\n  } else if (!unsafe) {\n    delete O[key];\n  } else if (!noTargetGet && O[key]) {\n    simple = true;\n  }\n  if (simple) O[key] = value;\n  else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n  return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n\n\n/***/ }),\n\n/***/ 7651:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar anObject = __webpack_require__(9670);\nvar isCallable = __webpack_require__(614);\nvar classof = __webpack_require__(4326);\nvar regexpExec = __webpack_require__(2261);\n\nvar TypeError = global.TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (isCallable(exec)) {\n    var result = call(exec, R, S);\n    if (result !== null) anObject(result);\n    return result;\n  }\n  if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n  throw TypeError('RegExp#exec called on incompatible receiver');\n};\n\n\n/***/ }),\n\n/***/ 2261:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = __webpack_require__(6916);\nvar uncurryThis = __webpack_require__(1702);\nvar toString = __webpack_require__(1340);\nvar regexpFlags = __webpack_require__(7066);\nvar stickyHelpers = __webpack_require__(2999);\nvar shared = __webpack_require__(2309);\nvar create = __webpack_require__(30);\nvar getInternalState = (__webpack_require__(9909).get);\nvar UNSUPPORTED_DOT_ALL = __webpack_require__(9441);\nvar UNSUPPORTED_NCG = __webpack_require__(7168);\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/;\n  var re2 = /b*/g;\n  call(nativeExec, re1, 'a');\n  call(nativeExec, re2, 'a');\n  return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n  // eslint-disable-next-line max-statements -- TODO\n  patchedExec = function exec(string) {\n    var re = this;\n    var state = getInternalState(re);\n    var str = toString(string);\n    var raw = state.raw;\n    var result, reCopy, lastIndex, match, i, object, group;\n\n    if (raw) {\n      raw.lastIndex = re.lastIndex;\n      result = call(patchedExec, raw, str);\n      re.lastIndex = raw.lastIndex;\n      return result;\n    }\n\n    var groups = state.groups;\n    var sticky = UNSUPPORTED_Y && re.sticky;\n    var flags = call(regexpFlags, re);\n    var source = re.source;\n    var charsAdded = 0;\n    var strCopy = str;\n\n    if (sticky) {\n      flags = replace(flags, 'y', '');\n      if (indexOf(flags, 'g') === -1) {\n        flags += 'g';\n      }\n\n      strCopy = stringSlice(str, re.lastIndex);\n      // Support anchored sticky behavior.\n      if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n        source = '(?: ' + source + ')';\n        strCopy = ' ' + strCopy;\n        charsAdded++;\n      }\n      // ^(? + rx + ) is needed, in combination with some str slicing, to\n      // simulate the 'y' flag.\n      reCopy = new RegExp('^(?:' + source + ')', flags);\n    }\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n    match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n    if (sticky) {\n      if (match) {\n        match.input = stringSlice(match.input, charsAdded);\n        match[0] = stringSlice(match[0], charsAdded);\n        match.index = re.lastIndex;\n        re.lastIndex += match[0].length;\n      } else re.lastIndex = 0;\n    } else if (UPDATES_LAST_INDEX_WRONG && match) {\n      re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      call(nativeReplace, match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    if (match && groups) {\n      match.groups = object = create(null);\n      for (i = 0; i < groups.length; i++) {\n        group = groups[i];\n        object[group[0]] = match[group[1]];\n      }\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n\n\n/***/ }),\n\n/***/ 7066:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar anObject = __webpack_require__(9670);\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.dotAll) result += 's';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 2999:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar global = __webpack_require__(7854);\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nexports.UNSUPPORTED_Y = fails(function () {\n  var re = $RegExp('a', 'y');\n  re.lastIndex = 2;\n  return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n  var re = $RegExp('^r', 'gy');\n  re.lastIndex = 2;\n  return re.exec('str') != null;\n});\n\n\n/***/ }),\n\n/***/ 9441:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar global = __webpack_require__(7854);\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n  var re = $RegExp('.', 's');\n  return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n\n\n/***/ }),\n\n/***/ 7168:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar global = __webpack_require__(7854);\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n  var re = $RegExp('(?<a>b)', 'g');\n  return re.exec('b').groups.a !== 'b' ||\n    'b'.replace(re, '$<a>c') !== 'bc';\n});\n\n\n/***/ }),\n\n/***/ 4488:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n  return it;\n};\n\n\n/***/ }),\n\n/***/ 3505:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n  try {\n    defineProperty(global, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n\n\n/***/ }),\n\n/***/ 6340:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar getBuiltIn = __webpack_require__(5005);\nvar definePropertyModule = __webpack_require__(3070);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar DESCRIPTORS = __webpack_require__(9781);\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n  var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n  var defineProperty = definePropertyModule.f;\n\n  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n    defineProperty(Constructor, SPECIES, {\n      configurable: true,\n      get: function () { return this; }\n    });\n  }\n};\n\n\n/***/ }),\n\n/***/ 8003:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar defineProperty = (__webpack_require__(3070).f);\nvar hasOwn = __webpack_require__(2597);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n  if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n    defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n  }\n};\n\n\n/***/ }),\n\n/***/ 6200:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar shared = __webpack_require__(2309);\nvar uid = __webpack_require__(9711);\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ 5465:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar setGlobal = __webpack_require__(3505);\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n\n\n/***/ }),\n\n/***/ 2309:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar IS_PURE = __webpack_require__(1913);\nvar store = __webpack_require__(5465);\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.19.0',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n\n/***/ 6707:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar aConstructor = __webpack_require__(9483);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n\n\n/***/ }),\n\n/***/ 3429:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\n// check the existence of a method, lowercase\n// of a tag and escaping quotes in arguments\nmodule.exports = function (METHOD_NAME) {\n  return fails(function () {\n    var test = ''[METHOD_NAME]('\"');\n    return test !== test.toLowerCase() || test.split('\"').length > 3;\n  });\n};\n\n\n/***/ }),\n\n/***/ 8710:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar toString = __webpack_require__(1340);\nvar requireObjectCoercible = __webpack_require__(4488);\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n  return function ($this, pos) {\n    var S = toString(requireObjectCoercible($this));\n    var position = toIntegerOrInfinity(pos);\n    var size = S.length;\n    var first, second;\n    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n    first = charCodeAt(S, position);\n    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n      || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n        ? CONVERT_TO_STRING\n          ? charAt(S, position)\n          : first\n        : CONVERT_TO_STRING\n          ? stringSlice(S, position, position + 2)\n          : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.codePointAt` method\n  // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n  codeAt: createMethod(false),\n  // `String.prototype.at` method\n  // https://github.com/mathiasbynens/String.prototype.at\n  charAt: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ 8415:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar toString = __webpack_require__(1340);\nvar requireObjectCoercible = __webpack_require__(4488);\n\nvar RangeError = global.RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n  var str = toString(requireObjectCoercible(this));\n  var result = '';\n  var n = toIntegerOrInfinity(count);\n  if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 6091:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar PROPER_FUNCTION_NAME = (__webpack_require__(6530).PROPER);\nvar fails = __webpack_require__(7293);\nvar whitespaces = __webpack_require__(1361);\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n  return fails(function () {\n    return !!whitespaces[METHOD_NAME]()\n      || non[METHOD_NAME]() !== non\n      || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n  });\n};\n\n\n/***/ }),\n\n/***/ 3111:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar toString = __webpack_require__(1340);\nvar whitespaces = __webpack_require__(1361);\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n  return function ($this) {\n    var string = toString(requireObjectCoercible($this));\n    if (TYPE & 1) string = replace(string, ltrim, '');\n    if (TYPE & 2) string = replace(string, rtrim, '');\n    return string;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.{ trimLeft, trimStart }` methods\n  // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n  start: createMethod(1),\n  // `String.prototype.{ trimRight, trimEnd }` methods\n  // https://tc39.es/ecma262/#sec-string.prototype.trimend\n  end: createMethod(2),\n  // `String.prototype.trim` method\n  // https://tc39.es/ecma262/#sec-string.prototype.trim\n  trim: createMethod(3)\n};\n\n\n/***/ }),\n\n/***/ 261:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar apply = __webpack_require__(2104);\nvar bind = __webpack_require__(9974);\nvar isCallable = __webpack_require__(614);\nvar hasOwn = __webpack_require__(2597);\nvar fails = __webpack_require__(7293);\nvar html = __webpack_require__(490);\nvar arraySlice = __webpack_require__(206);\nvar createElement = __webpack_require__(317);\nvar IS_IOS = __webpack_require__(6833);\nvar IS_NODE = __webpack_require__(5268);\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n  // Deno throws a ReferenceError on `location` access without `--location` flag\n  location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n  if (hasOwn(queue, id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\n\nvar runner = function (id) {\n  return function () {\n    run(id);\n  };\n};\n\nvar listener = function (event) {\n  run(event.data);\n};\n\nvar post = function (id) {\n  // old engines have not location.origin\n  global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n  set = function setImmediate(fn) {\n    var args = arraySlice(arguments, 1);\n    queue[++counter] = function () {\n      apply(isCallable(fn) ? fn : Function(fn), undefined, args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clear = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (IS_NODE) {\n    defer = function (id) {\n      process.nextTick(runner(id));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(runner(id));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  // except iOS - https://github.com/zloirock/core-js/issues/624\n  } else if (MessageChannel && !IS_IOS) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = bind(port.postMessage, port);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (\n    global.addEventListener &&\n    isCallable(global.postMessage) &&\n    !global.importScripts &&\n    location && location.protocol !== 'file:' &&\n    !fails(post)\n  ) {\n    defer = post;\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in createElement('script')) {\n    defer = function (id) {\n      html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(runner(id), 0);\n    };\n  }\n}\n\nmodule.exports = {\n  set: set,\n  clear: clear\n};\n\n\n/***/ }),\n\n/***/ 863:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n\n\n/***/ }),\n\n/***/ 1400:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toIntegerOrInfinity = __webpack_require__(9303);\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toIntegerOrInfinity(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n\n\n/***/ }),\n\n/***/ 7067:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar toLength = __webpack_require__(7466);\n\nvar RangeError = global.RangeError;\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n  if (it === undefined) return 0;\n  var number = toIntegerOrInfinity(it);\n  var length = toLength(number);\n  if (number !== length) throw RangeError('Wrong length or index');\n  return length;\n};\n\n\n/***/ }),\n\n/***/ 5656:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = __webpack_require__(8361);\nvar requireObjectCoercible = __webpack_require__(4488);\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n\n\n/***/ }),\n\n/***/ 9303:\n/***/ (function(module) {\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n  var number = +argument;\n  // eslint-disable-next-line no-self-compare -- safe\n  return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n\n\n/***/ }),\n\n/***/ 7466:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toIntegerOrInfinity = __webpack_require__(9303);\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ 7908:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar requireObjectCoercible = __webpack_require__(4488);\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n\n\n/***/ }),\n\n/***/ 4590:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar toPositiveInteger = __webpack_require__(3002);\n\nvar RangeError = global.RangeError;\n\nmodule.exports = function (it, BYTES) {\n  var offset = toPositiveInteger(it);\n  if (offset % BYTES) throw RangeError('Wrong offset');\n  return offset;\n};\n\n\n/***/ }),\n\n/***/ 3002:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar toIntegerOrInfinity = __webpack_require__(9303);\n\nvar RangeError = global.RangeError;\n\nmodule.exports = function (it) {\n  var result = toIntegerOrInfinity(it);\n  if (result < 0) throw RangeError(\"The argument can't be less than 0\");\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 7593:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar isObject = __webpack_require__(111);\nvar isSymbol = __webpack_require__(2190);\nvar getMethod = __webpack_require__(8173);\nvar ordinaryToPrimitive = __webpack_require__(2140);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n  if (!isObject(input) || isSymbol(input)) return input;\n  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n  var result;\n  if (exoticToPrim) {\n    if (pref === undefined) pref = 'default';\n    result = call(exoticToPrim, input, pref);\n    if (!isObject(result) || isSymbol(result)) return result;\n    throw TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n\n\n/***/ }),\n\n/***/ 4948:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toPrimitive = __webpack_require__(7593);\nvar isSymbol = __webpack_require__(2190);\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n  var key = toPrimitive(argument, 'string');\n  return isSymbol(key) ? key : key + '';\n};\n\n\n/***/ }),\n\n/***/ 1694:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n\n\n/***/ }),\n\n/***/ 1340:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar classof = __webpack_require__(648);\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n  return String(argument);\n};\n\n\n/***/ }),\n\n/***/ 6330:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n  try {\n    return String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n\n\n/***/ }),\n\n/***/ 9843:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = __webpack_require__(3832);\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar ArrayBufferModule = __webpack_require__(2091);\nvar anInstance = __webpack_require__(5787);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar isIntegralNumber = __webpack_require__(5988);\nvar toLength = __webpack_require__(7466);\nvar toIndex = __webpack_require__(7067);\nvar toOffset = __webpack_require__(4590);\nvar toPropertyKey = __webpack_require__(4948);\nvar hasOwn = __webpack_require__(2597);\nvar classof = __webpack_require__(648);\nvar isObject = __webpack_require__(111);\nvar isSymbol = __webpack_require__(2190);\nvar create = __webpack_require__(30);\nvar isPrototypeOf = __webpack_require__(7976);\nvar setPrototypeOf = __webpack_require__(7674);\nvar getOwnPropertyNames = (__webpack_require__(8006).f);\nvar typedArrayFrom = __webpack_require__(7321);\nvar forEach = (__webpack_require__(2092).forEach);\nvar setSpecies = __webpack_require__(6340);\nvar definePropertyModule = __webpack_require__(3070);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar InternalStateModule = __webpack_require__(9909);\nvar inheritIfRequired = __webpack_require__(9587);\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar round = Math.round;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar ArrayBufferPrototype = ArrayBuffer.prototype;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n  aTypedArrayConstructor(C);\n  var index = 0;\n  var length = list.length;\n  var result = new C(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n};\n\nvar addGetter = function (it, key) {\n  nativeDefineProperty(it, key, { get: function () {\n    return getInternalState(this)[key];\n  } });\n};\n\nvar isArrayBuffer = function (it) {\n  var klass;\n  return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n  return isTypedArray(target)\n    && !isSymbol(key)\n    && key in target\n    && isIntegralNumber(+key)\n    && key >= 0;\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n  key = toPropertyKey(key);\n  return isTypedArrayIndex(target, key)\n    ? createPropertyDescriptor(2, target[key])\n    : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n  key = toPropertyKey(key);\n  if (isTypedArrayIndex(target, key)\n    && isObject(descriptor)\n    && hasOwn(descriptor, 'value')\n    && !hasOwn(descriptor, 'get')\n    && !hasOwn(descriptor, 'set')\n    // TODO: add validation descriptor w/o calling accessors\n    && !descriptor.configurable\n    && (!hasOwn(descriptor, 'writable') || descriptor.writable)\n    && (!hasOwn(descriptor, 'enumerable') || descriptor.enumerable)\n  ) {\n    target[key] = descriptor.value;\n    return target;\n  } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n  if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n    getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n    definePropertyModule.f = wrappedDefineProperty;\n    addGetter(TypedArrayPrototype, 'buffer');\n    addGetter(TypedArrayPrototype, 'byteOffset');\n    addGetter(TypedArrayPrototype, 'byteLength');\n    addGetter(TypedArrayPrototype, 'length');\n  }\n\n  $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n    getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n    defineProperty: wrappedDefineProperty\n  });\n\n  module.exports = function (TYPE, wrapper, CLAMPED) {\n    var BYTES = TYPE.match(/\\d+$/)[0] / 8;\n    var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n    var GETTER = 'get' + TYPE;\n    var SETTER = 'set' + TYPE;\n    var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n    var TypedArrayConstructor = NativeTypedArrayConstructor;\n    var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n    var exported = {};\n\n    var getter = function (that, index) {\n      var data = getInternalState(that);\n      return data.view[GETTER](index * BYTES + data.byteOffset, true);\n    };\n\n    var setter = function (that, index, value) {\n      var data = getInternalState(that);\n      if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n      data.view[SETTER](index * BYTES + data.byteOffset, value, true);\n    };\n\n    var addElement = function (that, index) {\n      nativeDefineProperty(that, index, {\n        get: function () {\n          return getter(this, index);\n        },\n        set: function (value) {\n          return setter(this, index, value);\n        },\n        enumerable: true\n      });\n    };\n\n    if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n      TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n        anInstance(that, TypedArrayConstructorPrototype);\n        var index = 0;\n        var byteOffset = 0;\n        var buffer, byteLength, length;\n        if (!isObject(data)) {\n          length = toIndex(data);\n          byteLength = length * BYTES;\n          buffer = new ArrayBuffer(byteLength);\n        } else if (isArrayBuffer(data)) {\n          buffer = data;\n          byteOffset = toOffset(offset, BYTES);\n          var $len = data.byteLength;\n          if ($length === undefined) {\n            if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n            byteLength = $len - byteOffset;\n            if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n          } else {\n            byteLength = toLength($length) * BYTES;\n            if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n          }\n          length = byteLength / BYTES;\n        } else if (isTypedArray(data)) {\n          return fromList(TypedArrayConstructor, data);\n        } else {\n          return call(typedArrayFrom, TypedArrayConstructor, data);\n        }\n        setInternalState(that, {\n          buffer: buffer,\n          byteOffset: byteOffset,\n          byteLength: byteLength,\n          length: length,\n          view: new DataView(buffer)\n        });\n        while (index < length) addElement(that, index++);\n      });\n\n      if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n      TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n    } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n      TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n        anInstance(dummy, TypedArrayConstructorPrototype);\n        return inheritIfRequired(function () {\n          if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n          if (isArrayBuffer(data)) return $length !== undefined\n            ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n            : typedArrayOffset !== undefined\n              ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n              : new NativeTypedArrayConstructor(data);\n          if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n          return call(typedArrayFrom, TypedArrayConstructor, data);\n        }(), dummy, TypedArrayConstructor);\n      });\n\n      if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n      forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n        if (!(key in TypedArrayConstructor)) {\n          createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n        }\n      });\n      TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n    }\n\n    if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n    }\n\n    createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_CONSTRUCTOR, TypedArrayConstructor);\n\n    if (TYPED_ARRAY_TAG) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n    }\n\n    exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n    $({\n      global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS\n    }, exported);\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n      createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n    }\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n    }\n\n    setSpecies(CONSTRUCTOR_NAME);\n  };\n} else module.exports = function () { /* empty */ };\n\n\n/***/ }),\n\n/***/ 3832:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable no-new -- required for testing */\nvar global = __webpack_require__(7854);\nvar fails = __webpack_require__(7293);\nvar checkCorrectnessOfIteration = __webpack_require__(7072);\nvar NATIVE_ARRAY_BUFFER_VIEWS = (__webpack_require__(2094).NATIVE_ARRAY_BUFFER_VIEWS);\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n  Int8Array(1);\n}) || !fails(function () {\n  new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n  new Int8Array();\n  new Int8Array(null);\n  new Int8Array(1.5);\n  new Int8Array(iterable);\n}, true) || fails(function () {\n  // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n  return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n\n\n/***/ }),\n\n/***/ 3074:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar arrayFromConstructorAndList = __webpack_require__(7745);\nvar typedArraySpeciesConstructor = __webpack_require__(6304);\n\nmodule.exports = function (instance, list) {\n  return arrayFromConstructorAndList(typedArraySpeciesConstructor(instance), list);\n};\n\n\n/***/ }),\n\n/***/ 7321:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar bind = __webpack_require__(9974);\nvar call = __webpack_require__(6916);\nvar aConstructor = __webpack_require__(9483);\nvar toObject = __webpack_require__(7908);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar getIterator = __webpack_require__(8554);\nvar getIteratorMethod = __webpack_require__(1246);\nvar isArrayIteratorMethod = __webpack_require__(7659);\nvar aTypedArrayConstructor = (__webpack_require__(2094).aTypedArrayConstructor);\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n  var C = aConstructor(this);\n  var O = toObject(source);\n  var argumentsLength = arguments.length;\n  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n  var mapping = mapfn !== undefined;\n  var iteratorMethod = getIteratorMethod(O);\n  var i, length, result, step, iterator, next;\n  if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) {\n    iterator = getIterator(O, iteratorMethod);\n    next = iterator.next;\n    O = [];\n    while (!(step = call(next, iterator)).done) {\n      O.push(step.value);\n    }\n  }\n  if (mapping && argumentsLength > 2) {\n    mapfn = bind(mapfn, arguments[2]);\n  }\n  length = lengthOfArrayLike(O);\n  result = new (aTypedArrayConstructor(C))(length);\n  for (i = 0; length > i; i++) {\n    result[i] = mapping ? mapfn(O[i], i) : O[i];\n  }\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 6304:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar speciesConstructor = __webpack_require__(6707);\n\nvar TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\n\n// a part of `TypedArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#typedarray-species-create\nmodule.exports = function (originalArray) {\n  return aTypedArrayConstructor(speciesConstructor(originalArray, originalArray[TYPED_ARRAY_CONSTRUCTOR]));\n};\n\n\n/***/ }),\n\n/***/ 9711:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n\n\n/***/ }),\n\n/***/ 3307:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = __webpack_require__(133);\n\nmodule.exports = NATIVE_SYMBOL\n  && !Symbol.sham\n  && typeof Symbol.iterator == 'symbol';\n\n\n/***/ }),\n\n/***/ 6061:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nexports.f = wellKnownSymbol;\n\n\n/***/ }),\n\n/***/ 5112:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar shared = __webpack_require__(2309);\nvar hasOwn = __webpack_require__(2597);\nvar uid = __webpack_require__(9711);\nvar NATIVE_SYMBOL = __webpack_require__(133);\nvar USE_SYMBOL_AS_UID = __webpack_require__(3307);\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n    var description = 'Symbol.' + name;\n    if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n      WellKnownSymbolsStore[name] = Symbol[name];\n    } else if (USE_SYMBOL_AS_UID && symbolFor) {\n      WellKnownSymbolsStore[name] = symbolFor(description);\n    } else {\n      WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n    }\n  } return WellKnownSymbolsStore[name];\n};\n\n\n/***/ }),\n\n/***/ 1361:\n/***/ (function(module) {\n\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n  '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\n\n/***/ }),\n\n/***/ 9170:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar isPrototypeOf = __webpack_require__(7976);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar copyConstructorProperties = __webpack_require__(9920);\nvar create = __webpack_require__(30);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar clearErrorStack = __webpack_require__(7741);\nvar installErrorCause = __webpack_require__(8340);\nvar iterate = __webpack_require__(408);\nvar normalizeStringArgument = __webpack_require__(6277);\nvar ERROR_STACK_INSTALLABLE = __webpack_require__(2914);\n\nvar Error = global.Error;\nvar push = [].push;\n\nvar $AggregateError = function AggregateError(errors, message /* , options */) {\n  var that = isPrototypeOf(AggregateErrorPrototype, this) ? this : create(AggregateErrorPrototype);\n  var options = arguments.length > 2 ? arguments[2] : undefined;\n  if (setPrototypeOf) {\n    that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));\n  }\n  createNonEnumerableProperty(that, 'message', normalizeStringArgument(message, ''));\n  if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));\n  installErrorCause(that, options);\n  var errorsArray = [];\n  iterate(errors, push, { that: errorsArray });\n  createNonEnumerableProperty(that, 'errors', errorsArray);\n  return that;\n};\n\nif (setPrototypeOf) setPrototypeOf($AggregateError, Error);\nelse copyConstructorProperties($AggregateError, Error);\n\nvar AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, {\n  constructor: createPropertyDescriptor(1, $AggregateError),\n  message: createPropertyDescriptor(1, ''),\n  name: createPropertyDescriptor(1, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true }, {\n  AggregateError: $AggregateError\n});\n\n\n/***/ }),\n\n/***/ 2222:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar fails = __webpack_require__(7293);\nvar isArray = __webpack_require__(3157);\nvar isObject = __webpack_require__(111);\nvar toObject = __webpack_require__(7908);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar createProperty = __webpack_require__(6135);\nvar arraySpeciesCreate = __webpack_require__(5417);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar V8_VERSION = __webpack_require__(7392);\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\nvar TypeError = global.TypeError;\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n  var array = [];\n  array[IS_CONCAT_SPREADABLE] = false;\n  return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n  if (!isObject(O)) return false;\n  var spreadable = O[IS_CONCAT_SPREADABLE];\n  return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  concat: function concat(arg) {\n    var O = toObject(this);\n    var A = arraySpeciesCreate(O, 0);\n    var n = 0;\n    var i, k, length, len, E;\n    for (i = -1, length = arguments.length; i < length; i++) {\n      E = i === -1 ? O : arguments[i];\n      if (isConcatSpreadable(E)) {\n        len = lengthOfArrayLike(E);\n        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n      } else {\n        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        createProperty(A, n++, E);\n      }\n    }\n    A.length = n;\n    return A;\n  }\n});\n\n\n/***/ }),\n\n/***/ 545:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar copyWithin = __webpack_require__(1048);\nvar addToUnscopables = __webpack_require__(1223);\n\n// `Array.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n$({ target: 'Array', proto: true }, {\n  copyWithin: copyWithin\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('copyWithin');\n\n\n/***/ }),\n\n/***/ 3290:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar fill = __webpack_require__(1285);\nvar addToUnscopables = __webpack_require__(1223);\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n  fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n\n\n/***/ }),\n\n/***/ 7327:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $filter = (__webpack_require__(2092).filter);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  filter: function filter(callbackfn /* , thisArg */) {\n    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n\n/***/ }),\n\n/***/ 1038:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar from = __webpack_require__(8457);\nvar checkCorrectnessOfIteration = __webpack_require__(7072);\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n  // eslint-disable-next-line es/no-array-from -- required for testing\n  Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n  from: from\n});\n\n\n/***/ }),\n\n/***/ 6699:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $includes = (__webpack_require__(1318).includes);\nvar addToUnscopables = __webpack_require__(1223);\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n\n\n/***/ }),\n\n/***/ 6992:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toIndexedObject = __webpack_require__(5656);\nvar addToUnscopables = __webpack_require__(1223);\nvar Iterators = __webpack_require__(7497);\nvar InternalStateModule = __webpack_require__(9909);\nvar defineIterator = __webpack_require__(654);\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return { value: undefined, done: true };\n  }\n  if (kind == 'keys') return { value: index, done: false };\n  if (kind == 'values') return { value: target[index], done: false };\n  return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n\n/***/ 9600:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar uncurryThis = __webpack_require__(1702);\nvar IndexedObject = __webpack_require__(8361);\nvar toIndexedObject = __webpack_require__(5656);\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar un$Join = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n  join: function join(separator) {\n    return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator);\n  }\n});\n\n\n/***/ }),\n\n/***/ 1249:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $map = (__webpack_require__(2092).map);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  map: function map(callbackfn /* , thisArg */) {\n    return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n\n/***/ }),\n\n/***/ 7042:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar isArray = __webpack_require__(3157);\nvar isConstructor = __webpack_require__(4411);\nvar isObject = __webpack_require__(111);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar toIndexedObject = __webpack_require__(5656);\nvar createProperty = __webpack_require__(6135);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\nvar un$Slice = __webpack_require__(206);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  slice: function slice(start, end) {\n    var O = toIndexedObject(this);\n    var length = lengthOfArrayLike(O);\n    var k = toAbsoluteIndex(start, length);\n    var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n    // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n    var Constructor, result, n;\n    if (isArray(O)) {\n      Constructor = O.constructor;\n      // cross-realm fallback\n      if (isConstructor(Constructor) && (Constructor === Array || isArray(Constructor.prototype))) {\n        Constructor = undefined;\n      } else if (isObject(Constructor)) {\n        Constructor = Constructor[SPECIES];\n        if (Constructor === null) Constructor = undefined;\n      }\n      if (Constructor === Array || Constructor === undefined) {\n        return un$Slice(O, k, fin);\n      }\n    }\n    result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n    for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n    result.length = n;\n    return result;\n  }\n});\n\n\n/***/ }),\n\n/***/ 2707:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar uncurryThis = __webpack_require__(1702);\nvar aCallable = __webpack_require__(9662);\nvar toObject = __webpack_require__(7908);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar toString = __webpack_require__(1340);\nvar fails = __webpack_require__(7293);\nvar internalSort = __webpack_require__(4362);\nvar arrayMethodIsStrict = __webpack_require__(9341);\nvar FF = __webpack_require__(8886);\nvar IE_OR_EDGE = __webpack_require__(256);\nvar V8 = __webpack_require__(7392);\nvar WEBKIT = __webpack_require__(8008);\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n  test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n  test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n  // feature detection can be too slow, so check engines versions\n  if (V8) return V8 < 70;\n  if (FF && FF > 3) return;\n  if (IE_OR_EDGE) return true;\n  if (WEBKIT) return WEBKIT < 603;\n\n  var result = '';\n  var code, chr, value, index;\n\n  // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n  for (code = 65; code < 76; code++) {\n    chr = String.fromCharCode(code);\n\n    switch (code) {\n      case 66: case 69: case 70: case 72: value = 3; break;\n      case 68: case 71: value = 4; break;\n      default: value = 2;\n    }\n\n    for (index = 0; index < 47; index++) {\n      test.push({ k: chr + index, v: value });\n    }\n  }\n\n  test.sort(function (a, b) { return b.v - a.v; });\n\n  for (index = 0; index < test.length; index++) {\n    chr = test[index].k.charAt(0);\n    if (result.charAt(result.length - 1) !== chr) result += chr;\n  }\n\n  return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n  return function (x, y) {\n    if (y === undefined) return -1;\n    if (x === undefined) return 1;\n    if (comparefn !== undefined) return +comparefn(x, y) || 0;\n    return toString(x) > toString(y) ? 1 : -1;\n  };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  sort: function sort(comparefn) {\n    if (comparefn !== undefined) aCallable(comparefn);\n\n    var array = toObject(this);\n\n    if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n    var items = [];\n    var arrayLength = lengthOfArrayLike(array);\n    var itemsLength, index;\n\n    for (index = 0; index < arrayLength; index++) {\n      if (index in array) push(items, array[index]);\n    }\n\n    internalSort(items, getSortCompare(comparefn));\n\n    itemsLength = items.length;\n    index = 0;\n\n    while (index < itemsLength) array[index] = items[index++];\n    while (index < arrayLength) delete array[index++];\n\n    return array;\n  }\n});\n\n\n/***/ }),\n\n/***/ 561:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar toObject = __webpack_require__(7908);\nvar arraySpeciesCreate = __webpack_require__(5417);\nvar createProperty = __webpack_require__(6135);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar TypeError = global.TypeError;\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  splice: function splice(start, deleteCount /* , ...items */) {\n    var O = toObject(this);\n    var len = lengthOfArrayLike(O);\n    var actualStart = toAbsoluteIndex(start, len);\n    var argumentsLength = arguments.length;\n    var insertCount, actualDeleteCount, A, k, from, to;\n    if (argumentsLength === 0) {\n      insertCount = actualDeleteCount = 0;\n    } else if (argumentsLength === 1) {\n      insertCount = 0;\n      actualDeleteCount = len - actualStart;\n    } else {\n      insertCount = argumentsLength - 2;\n      actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n    }\n    if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n      throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n    }\n    A = arraySpeciesCreate(O, actualDeleteCount);\n    for (k = 0; k < actualDeleteCount; k++) {\n      from = actualStart + k;\n      if (from in O) createProperty(A, k, O[from]);\n    }\n    A.length = actualDeleteCount;\n    if (insertCount < actualDeleteCount) {\n      for (k = actualStart; k < len - actualDeleteCount; k++) {\n        from = k + actualDeleteCount;\n        to = k + insertCount;\n        if (from in O) O[to] = O[from];\n        else delete O[to];\n      }\n      for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n    } else if (insertCount > actualDeleteCount) {\n      for (k = len - actualDeleteCount; k > actualStart; k--) {\n        from = k + actualDeleteCount - 1;\n        to = k + insertCount - 1;\n        if (from in O) O[to] = O[from];\n        else delete O[to];\n      }\n    }\n    for (k = 0; k < insertCount; k++) {\n      O[k + actualStart] = arguments[k + 2];\n    }\n    O.length = len - actualDeleteCount + insertCount;\n    return A;\n  }\n});\n\n\n/***/ }),\n\n/***/ 6078:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar hasOwn = __webpack_require__(2597);\nvar redefine = __webpack_require__(1320);\nvar dateToPrimitive = __webpack_require__(8709);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar DatePrototype = Date.prototype;\n\n// `Date.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nif (!hasOwn(DatePrototype, TO_PRIMITIVE)) {\n  redefine(DatePrototype, TO_PRIMITIVE, dateToPrimitive);\n}\n\n\n/***/ }),\n\n/***/ 8309:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar FUNCTION_NAME_EXISTS = (__webpack_require__(6530).EXISTS);\nvar uncurryThis = __webpack_require__(1702);\nvar defineProperty = (__webpack_require__(3070).f);\n\nvar FunctionPrototype = Function.prototype;\nvar functionToString = uncurryThis(FunctionPrototype.toString);\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar regExpExec = uncurryThis(nameRE.exec);\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {\n  defineProperty(FunctionPrototype, NAME, {\n    configurable: true,\n    get: function () {\n      try {\n        return regExpExec(nameRE, functionToString(this))[1];\n      } catch (error) {\n        return '';\n      }\n    }\n  });\n}\n\n\n/***/ }),\n\n/***/ 5837:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\n\n// `globalThis` object\n// https://tc39.es/ecma262/#sec-globalthis\n$({ global: true }, {\n  globalThis: global\n});\n\n\n/***/ }),\n\n/***/ 3706:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar setToStringTag = __webpack_require__(8003);\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n/***/ }),\n\n/***/ 1532:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar collection = __webpack_require__(7710);\nvar collectionStrong = __webpack_require__(5631);\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n  return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n\n\n/***/ }),\n\n/***/ 2703:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar setToStringTag = __webpack_require__(8003);\n\n// Math[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n\n\n/***/ }),\n\n/***/ 9653:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar isForced = __webpack_require__(4705);\nvar redefine = __webpack_require__(1320);\nvar hasOwn = __webpack_require__(2597);\nvar inheritIfRequired = __webpack_require__(9587);\nvar isPrototypeOf = __webpack_require__(7976);\nvar isSymbol = __webpack_require__(2190);\nvar toPrimitive = __webpack_require__(7593);\nvar fails = __webpack_require__(7293);\nvar getOwnPropertyNames = (__webpack_require__(8006).f);\nvar getOwnPropertyDescriptor = (__webpack_require__(1236).f);\nvar defineProperty = (__webpack_require__(3070).f);\nvar thisNumberValue = __webpack_require__(863);\nvar trim = (__webpack_require__(3111).trim);\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\nvar TypeError = global.TypeError;\nvar arraySlice = uncurryThis(''.slice);\nvar charCodeAt = uncurryThis(''.charCodeAt);\n\n// `ToNumeric` abstract operation\n// https://tc39.es/ecma262/#sec-tonumeric\nvar toNumeric = function (value) {\n  var primValue = toPrimitive(value, 'number');\n  return typeof primValue == 'bigint' ? primValue : toNumber(primValue);\n};\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n  var it = toPrimitive(argument, 'number');\n  var first, third, radix, maxCode, digits, length, index, code;\n  if (isSymbol(it)) throw TypeError('Cannot convert a Symbol value to a number');\n  if (typeof it == 'string' && it.length > 2) {\n    it = trim(it);\n    first = charCodeAt(it, 0);\n    if (first === 43 || first === 45) {\n      third = charCodeAt(it, 2);\n      if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n    } else if (first === 48) {\n      switch (charCodeAt(it, 1)) {\n        case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n        case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n        default: return +it;\n      }\n      digits = arraySlice(it, 2);\n      length = digits.length;\n      for (index = 0; index < length; index++) {\n        code = charCodeAt(digits, index);\n        // parseInt parses a string to a first unavailable symbol\n        // but ToNumber should return NaN if a string contains unavailable symbols\n        if (code < 48 || code > maxCode) return NaN;\n      } return parseInt(digits, radix);\n    }\n  } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n  var NumberWrapper = function Number(value) {\n    var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));\n    var dummy = this;\n    // check on 1..constructor(foo) case\n    return isPrototypeOf(NumberPrototype, dummy) && fails(function () { thisNumberValue(dummy); })\n      ? inheritIfRequired(Object(n), dummy, NumberWrapper) : n;\n  };\n  for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n    // ES3:\n    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n    // ES2015 (in case, if modules with ES2015 Number statics required before):\n    'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +\n    // ESNext\n    'fromString,range'\n  ).split(','), j = 0, key; keys.length > j; j++) {\n    if (hasOwn(NativeNumber, key = keys[j]) && !hasOwn(NumberWrapper, key)) {\n      defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n    }\n  }\n  NumberWrapper.prototype = NumberPrototype;\n  NumberPrototype.constructor = NumberWrapper;\n  redefine(global, NUMBER, NumberWrapper);\n}\n\n\n/***/ }),\n\n/***/ 3299:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\n\n// `Number.EPSILON` constant\n// https://tc39.es/ecma262/#sec-number.epsilon\n$({ target: 'Number', stat: true }, {\n  EPSILON: Math.pow(2, -52)\n});\n\n\n/***/ }),\n\n/***/ 5192:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar numberIsFinite = __webpack_require__(7023);\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n$({ target: 'Number', stat: true }, { isFinite: numberIsFinite });\n\n\n/***/ }),\n\n/***/ 3161:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar isIntegralNumber = __webpack_require__(5988);\n\n// `Number.isInteger` method\n// https://tc39.es/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n  isInteger: isIntegralNumber\n});\n\n\n/***/ }),\n\n/***/ 6977:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar thisNumberValue = __webpack_require__(863);\nvar $repeat = __webpack_require__(8415);\nvar fails = __webpack_require__(7293);\n\nvar RangeError = global.RangeError;\nvar String = global.String;\nvar floor = Math.floor;\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar un$ToFixed = uncurryThis(1.0.toFixed);\n\nvar pow = function (x, n, acc) {\n  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n  var n = 0;\n  var x2 = x;\n  while (x2 >= 4096) {\n    n += 12;\n    x2 /= 4096;\n  }\n  while (x2 >= 2) {\n    n += 1;\n    x2 /= 2;\n  } return n;\n};\n\nvar multiply = function (data, n, c) {\n  var index = -1;\n  var c2 = c;\n  while (++index < 6) {\n    c2 += n * data[index];\n    data[index] = c2 % 1e7;\n    c2 = floor(c2 / 1e7);\n  }\n};\n\nvar divide = function (data, n) {\n  var index = 6;\n  var c = 0;\n  while (--index >= 0) {\n    c += data[index];\n    data[index] = floor(c / n);\n    c = (c % n) * 1e7;\n  }\n};\n\nvar dataToString = function (data) {\n  var index = 6;\n  var s = '';\n  while (--index >= 0) {\n    if (s !== '' || index === 0 || data[index] !== 0) {\n      var t = String(data[index]);\n      s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\n    }\n  } return s;\n};\n\nvar FORCED = fails(function () {\n  return un$ToFixed(0.00008, 3) !== '0.000' ||\n    un$ToFixed(0.9, 0) !== '1' ||\n    un$ToFixed(1.255, 2) !== '1.25' ||\n    un$ToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\n}) || !fails(function () {\n  // V8 ~ Android 4.3-\n  un$ToFixed({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n  toFixed: function toFixed(fractionDigits) {\n    var number = thisNumberValue(this);\n    var fractDigits = toIntegerOrInfinity(fractionDigits);\n    var data = [0, 0, 0, 0, 0, 0];\n    var sign = '';\n    var result = '0';\n    var e, z, j, k;\n\n    if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (number != number) return 'NaN';\n    if (number <= -1e21 || number >= 1e21) return String(number);\n    if (number < 0) {\n      sign = '-';\n      number = -number;\n    }\n    if (number > 1e-21) {\n      e = log(number * pow(2, 69, 1)) - 69;\n      z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n      z *= 0x10000000000000;\n      e = 52 - e;\n      if (e > 0) {\n        multiply(data, 0, z);\n        j = fractDigits;\n        while (j >= 7) {\n          multiply(data, 1e7, 0);\n          j -= 7;\n        }\n        multiply(data, pow(10, j, 1), 0);\n        j = e - 1;\n        while (j >= 23) {\n          divide(data, 1 << 23);\n          j -= 23;\n        }\n        divide(data, 1 << j);\n        multiply(data, 1, 1);\n        divide(data, 2);\n        result = dataToString(data);\n      } else {\n        multiply(data, 0, z);\n        multiply(data, 1 << -e, 0);\n        result = dataToString(data) + repeat('0', fractDigits);\n      }\n    }\n    if (fractDigits > 0) {\n      k = result.length;\n      result = sign + (k <= fractDigits\n        ? '0.' + repeat('0', fractDigits - k) + result\n        : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\n    } else {\n      result = sign + result;\n    } return result;\n  }\n});\n\n\n/***/ }),\n\n/***/ 9601:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar assign = __webpack_require__(1574);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n  assign: assign\n});\n\n\n/***/ }),\n\n/***/ 3371:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar FREEZING = __webpack_require__(6677);\nvar fails = __webpack_require__(7293);\nvar isObject = __webpack_require__(111);\nvar onFreeze = (__webpack_require__(2423).onFreeze);\n\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar $freeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); });\n\n// `Object.freeze` method\n// https://tc39.es/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n  freeze: function freeze(it) {\n    return $freeze && isObject(it) ? $freeze(onFreeze(it)) : it;\n  }\n});\n\n\n/***/ }),\n\n/***/ 5003:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar fails = __webpack_require__(7293);\nvar toIndexedObject = __webpack_require__(5656);\nvar nativeGetOwnPropertyDescriptor = (__webpack_require__(1236).f);\nvar DESCRIPTORS = __webpack_require__(9781);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n    return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n  }\n});\n\n\n/***/ }),\n\n/***/ 9337:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar ownKeys = __webpack_require__(3887);\nvar toIndexedObject = __webpack_require__(5656);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar createProperty = __webpack_require__(6135);\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIndexedObject(object);\n    var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var index = 0;\n    var key, descriptor;\n    while (keys.length > index) {\n      descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n      if (descriptor !== undefined) createProperty(result, key, descriptor);\n    }\n    return result;\n  }\n});\n\n\n/***/ }),\n\n/***/ 489:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar fails = __webpack_require__(7293);\nvar toObject = __webpack_require__(7908);\nvar nativeGetPrototypeOf = __webpack_require__(9518);\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(8544);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n  getPrototypeOf: function getPrototypeOf(it) {\n    return nativeGetPrototypeOf(toObject(it));\n  }\n});\n\n\n\n/***/ }),\n\n/***/ 7941:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar toObject = __webpack_require__(7908);\nvar nativeKeys = __webpack_require__(1956);\nvar fails = __webpack_require__(7293);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n  keys: function keys(it) {\n    return nativeKeys(toObject(it));\n  }\n});\n\n\n/***/ }),\n\n/***/ 1539:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar redefine = __webpack_require__(1320);\nvar toString = __webpack_require__(288);\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n  redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ 2479:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar $values = (__webpack_require__(4699).values);\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n  values: function values(O) {\n    return $values(O);\n  }\n});\n\n\n/***/ }),\n\n/***/ 7922:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar call = __webpack_require__(6916);\nvar aCallable = __webpack_require__(9662);\nvar newPromiseCapabilityModule = __webpack_require__(8523);\nvar perform = __webpack_require__(2534);\nvar iterate = __webpack_require__(408);\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true }, {\n  allSettled: function allSettled(iterable) {\n    var C = this;\n    var capability = newPromiseCapabilityModule.f(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var promiseResolve = aCallable(C.resolve);\n      var values = [];\n      var counter = 0;\n      var remaining = 1;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyCalled = false;\n        remaining++;\n        call(promiseResolve, C, promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = { status: 'fulfilled', value: value };\n          --remaining || resolve(values);\n        }, function (error) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = { status: 'rejected', reason: error };\n          --remaining || resolve(values);\n        });\n      });\n      --remaining || resolve(values);\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n\n\n/***/ }),\n\n/***/ 4668:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar aCallable = __webpack_require__(9662);\nvar getBuiltIn = __webpack_require__(5005);\nvar call = __webpack_require__(6916);\nvar newPromiseCapabilityModule = __webpack_require__(8523);\nvar perform = __webpack_require__(2534);\nvar iterate = __webpack_require__(408);\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://tc39.es/ecma262/#sec-promise.any\n$({ target: 'Promise', stat: true }, {\n  any: function any(iterable) {\n    var C = this;\n    var AggregateError = getBuiltIn('AggregateError');\n    var capability = newPromiseCapabilityModule.f(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var promiseResolve = aCallable(C.resolve);\n      var errors = [];\n      var counter = 0;\n      var remaining = 1;\n      var alreadyResolved = false;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyRejected = false;\n        remaining++;\n        call(promiseResolve, C, promise).then(function (value) {\n          if (alreadyRejected || alreadyResolved) return;\n          alreadyResolved = true;\n          resolve(value);\n        }, function (error) {\n          if (alreadyRejected || alreadyResolved) return;\n          alreadyRejected = true;\n          errors[index] = error;\n          --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n        });\n      });\n      --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n\n\n/***/ }),\n\n/***/ 7727:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar IS_PURE = __webpack_require__(1913);\nvar NativePromise = __webpack_require__(3366);\nvar fails = __webpack_require__(7293);\nvar getBuiltIn = __webpack_require__(5005);\nvar isCallable = __webpack_require__(614);\nvar speciesConstructor = __webpack_require__(6707);\nvar promiseResolve = __webpack_require__(9478);\nvar redefine = __webpack_require__(1320);\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n  NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n  'finally': function (onFinally) {\n    var C = speciesConstructor(this, getBuiltIn('Promise'));\n    var isFunction = isCallable(onFinally);\n    return this.then(\n      isFunction ? function (x) {\n        return promiseResolve(C, onFinally()).then(function () { return x; });\n      } : onFinally,\n      isFunction ? function (e) {\n        return promiseResolve(C, onFinally()).then(function () { throw e; });\n      } : onFinally\n    );\n  }\n});\n\n// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromise)) {\n  var method = getBuiltIn('Promise').prototype['finally'];\n  if (NativePromise.prototype['finally'] !== method) {\n    redefine(NativePromise.prototype, 'finally', method, { unsafe: true });\n  }\n}\n\n\n/***/ }),\n\n/***/ 8674:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar IS_PURE = __webpack_require__(1913);\nvar global = __webpack_require__(7854);\nvar getBuiltIn = __webpack_require__(5005);\nvar call = __webpack_require__(6916);\nvar NativePromise = __webpack_require__(3366);\nvar redefine = __webpack_require__(1320);\nvar redefineAll = __webpack_require__(2248);\nvar setPrototypeOf = __webpack_require__(7674);\nvar setToStringTag = __webpack_require__(8003);\nvar setSpecies = __webpack_require__(6340);\nvar aCallable = __webpack_require__(9662);\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\nvar anInstance = __webpack_require__(5787);\nvar inspectSource = __webpack_require__(2788);\nvar iterate = __webpack_require__(408);\nvar checkCorrectnessOfIteration = __webpack_require__(7072);\nvar speciesConstructor = __webpack_require__(6707);\nvar task = (__webpack_require__(261).set);\nvar microtask = __webpack_require__(5948);\nvar promiseResolve = __webpack_require__(9478);\nvar hostReportErrors = __webpack_require__(842);\nvar newPromiseCapabilityModule = __webpack_require__(8523);\nvar perform = __webpack_require__(2534);\nvar InternalStateModule = __webpack_require__(9909);\nvar isForced = __webpack_require__(4705);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar IS_BROWSER = __webpack_require__(7871);\nvar IS_NODE = __webpack_require__(5268);\nvar V8_VERSION = __webpack_require__(7392);\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n  var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n  var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n  // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n  // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n  // We can't detect it synchronously, so just check versions\n  if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n  // We need Promise#finally in the pure version for preventing prototype pollution\n  if (IS_PURE && !PromisePrototype['finally']) return true;\n  // We can't use @@species feature detection in V8 since it causes\n  // deoptimization and performance degradation\n  // https://github.com/zloirock/core-js/issues/679\n  if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n  // Detect correctness of subclassing with @@species support\n  var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n  var FakePromise = function (exec) {\n    exec(function () { /* empty */ }, function () { /* empty */ });\n  };\n  var constructor = promise.constructor = {};\n  constructor[SPECIES] = FakePromise;\n  SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n  if (!SUBCLASSING) return true;\n  // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n  return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n  PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar notify = function (state, isReject) {\n  if (state.notified) return;\n  state.notified = true;\n  var chain = state.reactions;\n  microtask(function () {\n    var value = state.value;\n    var ok = state.state == FULFILLED;\n    var index = 0;\n    // variable length - can't use forEach\n    while (chain.length > index) {\n      var reaction = chain[index++];\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n            state.rejection = HANDLED;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // can throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            call(then, result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (error) {\n        if (domain && !exited) domain.exit();\n        reject(error);\n      }\n    }\n    state.reactions = [];\n    state.notified = false;\n    if (isReject && !state.rejection) onUnhandled(state);\n  });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n  var event, handler;\n  if (DISPATCH_EVENT) {\n    event = document.createEvent('Event');\n    event.promise = promise;\n    event.reason = reason;\n    event.initEvent(name, false, true);\n    global.dispatchEvent(event);\n  } else event = { promise: promise, reason: reason };\n  if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n  else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n  call(task, global, function () {\n    var promise = state.facade;\n    var value = state.value;\n    var IS_UNHANDLED = isUnhandled(state);\n    var result;\n    if (IS_UNHANDLED) {\n      result = perform(function () {\n        if (IS_NODE) {\n          process.emit('unhandledRejection', value, promise);\n        } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n      if (result.error) throw result.value;\n    }\n  });\n};\n\nvar isUnhandled = function (state) {\n  return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n  call(task, global, function () {\n    var promise = state.facade;\n    if (IS_NODE) {\n      process.emit('rejectionHandled', promise);\n    } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n  });\n};\n\nvar bind = function (fn, state, unwrap) {\n  return function (value) {\n    fn(state, value, unwrap);\n  };\n};\n\nvar internalReject = function (state, value, unwrap) {\n  if (state.done) return;\n  state.done = true;\n  if (unwrap) state = unwrap;\n  state.value = value;\n  state.state = REJECTED;\n  notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n  if (state.done) return;\n  state.done = true;\n  if (unwrap) state = unwrap;\n  try {\n    if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n    var then = isThenable(value);\n    if (then) {\n      microtask(function () {\n        var wrapper = { done: false };\n        try {\n          call(then, value,\n            bind(internalResolve, wrapper, state),\n            bind(internalReject, wrapper, state)\n          );\n        } catch (error) {\n          internalReject(wrapper, error, state);\n        }\n      });\n    } else {\n      state.value = value;\n      state.state = FULFILLED;\n      notify(state, false);\n    }\n  } catch (error) {\n    internalReject({ done: false }, error, state);\n  }\n};\n\n// constructor polyfill\nif (FORCED) {\n  // 25.4.3.1 Promise(executor)\n  PromiseConstructor = function Promise(executor) {\n    anInstance(this, PromisePrototype);\n    aCallable(executor);\n    call(Internal, this);\n    var state = getInternalState(this);\n    try {\n      executor(bind(internalResolve, state), bind(internalReject, state));\n    } catch (error) {\n      internalReject(state, error);\n    }\n  };\n  PromisePrototype = PromiseConstructor.prototype;\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  Internal = function Promise(executor) {\n    setInternalState(this, {\n      type: PROMISE,\n      done: false,\n      notified: false,\n      parent: false,\n      reactions: [],\n      rejection: false,\n      state: PENDING,\n      value: undefined\n    });\n  };\n  Internal.prototype = redefineAll(PromisePrototype, {\n    // `Promise.prototype.then` method\n    // https://tc39.es/ecma262/#sec-promise.prototype.then\n    then: function then(onFulfilled, onRejected) {\n      var state = getInternalPromiseState(this);\n      var reactions = state.reactions;\n      var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n      reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n      reaction.fail = isCallable(onRejected) && onRejected;\n      reaction.domain = IS_NODE ? process.domain : undefined;\n      state.parent = true;\n      reactions[reactions.length] = reaction;\n      if (state.state != PENDING) notify(state, false);\n      return reaction.promise;\n    },\n    // `Promise.prototype.catch` method\n    // https://tc39.es/ecma262/#sec-promise.prototype.catch\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    var state = getInternalState(promise);\n    this.promise = promise;\n    this.resolve = bind(internalResolve, state);\n    this.reject = bind(internalReject, state);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === PromiseConstructor || C === PromiseWrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n\n  if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) {\n    nativeThen = NativePromisePrototype.then;\n\n    if (!SUBCLASSING) {\n      // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n      redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n        var that = this;\n        return new PromiseConstructor(function (resolve, reject) {\n          call(nativeThen, that, resolve, reject);\n        }).then(onFulfilled, onRejected);\n      // https://github.com/zloirock/core-js/issues/640\n      }, { unsafe: true });\n\n      // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n      redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true });\n    }\n\n    // make `.constructor === Promise` work for native promise-based APIs\n    try {\n      delete NativePromisePrototype.constructor;\n    } catch (error) { /* empty */ }\n\n    // make `instanceof Promise` work for native promise-based APIs\n    if (setPrototypeOf) {\n      setPrototypeOf(NativePromisePrototype, PromisePrototype);\n    }\n  }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n  Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n  // `Promise.reject` method\n  // https://tc39.es/ecma262/#sec-promise.reject\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    call(capability.reject, undefined, r);\n    return capability.promise;\n  }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n  // `Promise.resolve` method\n  // https://tc39.es/ecma262/#sec-promise.resolve\n  resolve: function resolve(x) {\n    return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n  }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n  // `Promise.all` method\n  // https://tc39.es/ecma262/#sec-promise.all\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var $promiseResolve = aCallable(C.resolve);\n      var values = [];\n      var counter = 0;\n      var remaining = 1;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyCalled = false;\n        remaining++;\n        call($promiseResolve, C, promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  },\n  // `Promise.race` method\n  // https://tc39.es/ecma262/#sec-promise.race\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      var $promiseResolve = aCallable(C.resolve);\n      iterate(iterable, function (promise) {\n        call($promiseResolve, C, promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n\n\n/***/ }),\n\n/***/ 2419:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar getBuiltIn = __webpack_require__(5005);\nvar apply = __webpack_require__(2104);\nvar bind = __webpack_require__(7065);\nvar aConstructor = __webpack_require__(9483);\nvar anObject = __webpack_require__(9670);\nvar isObject = __webpack_require__(111);\nvar create = __webpack_require__(30);\nvar fails = __webpack_require__(7293);\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\nvar ObjectPrototype = Object.prototype;\nvar push = [].push;\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n  function F() { /* empty */ }\n  return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\n\nvar ARGS_BUG = !fails(function () {\n  nativeConstruct(function () { /* empty */ });\n});\n\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n  construct: function construct(Target, args /* , newTarget */) {\n    aConstructor(Target);\n    anObject(args);\n    var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);\n    if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n    if (Target == newTarget) {\n      // w/o altered newTarget, optimization for 0-4 arguments\n      switch (args.length) {\n        case 0: return new Target();\n        case 1: return new Target(args[0]);\n        case 2: return new Target(args[0], args[1]);\n        case 3: return new Target(args[0], args[1], args[2]);\n        case 4: return new Target(args[0], args[1], args[2], args[3]);\n      }\n      // w/o altered newTarget, lot of arguments case\n      var $args = [null];\n      apply(push, $args, args);\n      return new (apply(bind, Target, $args))();\n    }\n    // with altered newTarget, not support built-in constructors\n    var proto = newTarget.prototype;\n    var instance = create(isObject(proto) ? proto : ObjectPrototype);\n    var result = apply(Target, instance, args);\n    return isObject(result) ? result : instance;\n  }\n});\n\n\n/***/ }),\n\n/***/ 4916:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar exec = __webpack_require__(2261);\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n  exec: exec\n});\n\n\n/***/ }),\n\n/***/ 2087:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar objectDefinePropertyModule = __webpack_require__(3070);\nvar regExpFlags = __webpack_require__(7066);\nvar fails = __webpack_require__(7293);\n\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n  // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n  return Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call({ dotAll: true, sticky: true }) !== 'sy';\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) objectDefinePropertyModule.f(RegExpPrototype, 'flags', {\n  configurable: true,\n  get: regExpFlags\n});\n\n\n/***/ }),\n\n/***/ 9714:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar uncurryThis = __webpack_require__(1702);\nvar PROPER_FUNCTION_NAME = (__webpack_require__(6530).PROPER);\nvar redefine = __webpack_require__(1320);\nvar anObject = __webpack_require__(9670);\nvar isPrototypeOf = __webpack_require__(7976);\nvar $toString = __webpack_require__(1340);\nvar fails = __webpack_require__(7293);\nvar regExpFlags = __webpack_require__(7066);\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar n$ToString = RegExpPrototype[TO_STRING];\nvar getFlags = uncurryThis(regExpFlags);\n\nvar NOT_GENERIC = fails(function () { return n$ToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = PROPER_FUNCTION_NAME && n$ToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n  redefine(RegExp.prototype, TO_STRING, function toString() {\n    var R = anObject(this);\n    var p = $toString(R.source);\n    var rf = R.flags;\n    var f = $toString(rf === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype) ? getFlags(R) : rf);\n    return '/' + p + '/' + f;\n  }, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ 189:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar collection = __webpack_require__(7710);\nvar collectionStrong = __webpack_require__(5631);\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n  return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n\n\n/***/ }),\n\n/***/ 9841:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar codeAt = (__webpack_require__(8710).codeAt);\n\n// `String.prototype.codePointAt` method\n// https://tc39.es/ecma262/#sec-string.prototype.codepointat\n$({ target: 'String', proto: true }, {\n  codePointAt: function codePointAt(pos) {\n    return codeAt(this, pos);\n  }\n});\n\n\n/***/ }),\n\n/***/ 4953:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar toAbsoluteIndex = __webpack_require__(1400);\n\nvar RangeError = global.RangeError;\nvar fromCharCode = String.fromCharCode;\n// eslint-disable-next-line es/no-string-fromcodepoint -- required for testing\nvar $fromCodePoint = String.fromCodePoint;\nvar join = uncurryThis([].join);\n\n// length should be 1, old FF problem\nvar INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length != 1;\n\n// `String.fromCodePoint` method\n// https://tc39.es/ecma262/#sec-string.fromcodepoint\n$({ target: 'String', stat: true, forced: INCORRECT_LENGTH }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  fromCodePoint: function fromCodePoint(x) {\n    var elements = [];\n    var length = arguments.length;\n    var i = 0;\n    var code;\n    while (length > i) {\n      code = +arguments[i++];\n      if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw RangeError(code + ' is not a valid code point');\n      elements[i] = code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00);\n    } return join(elements, '');\n  }\n});\n\n\n/***/ }),\n\n/***/ 2023:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar uncurryThis = __webpack_require__(1702);\nvar notARegExp = __webpack_require__(3929);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar toString = __webpack_require__(1340);\nvar correctIsRegExpLogic = __webpack_require__(4964);\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~stringIndexOf(\n      toString(requireObjectCoercible(this)),\n      toString(notARegExp(searchString)),\n      arguments.length > 1 ? arguments[1] : undefined\n    );\n  }\n});\n\n\n/***/ }),\n\n/***/ 8734:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar createHTML = __webpack_require__(4230);\nvar forcedStringHTMLMethod = __webpack_require__(3429);\n\n// `String.prototype.italics` method\n// https://tc39.es/ecma262/#sec-string.prototype.italics\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('italics') }, {\n  italics: function italics() {\n    return createHTML(this, 'i', '', '');\n  }\n});\n\n\n/***/ }),\n\n/***/ 8783:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar charAt = (__webpack_require__(8710).charAt);\nvar toString = __webpack_require__(1340);\nvar InternalStateModule = __webpack_require__(9909);\nvar defineIterator = __webpack_require__(654);\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n  setInternalState(this, {\n    type: STRING_ITERATOR,\n    string: toString(iterated),\n    index: 0\n  });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n  var state = getInternalState(this);\n  var string = state.string;\n  var index = state.index;\n  var point;\n  if (index >= string.length) return { value: undefined, done: true };\n  point = charAt(string, index);\n  state.index += point.length;\n  return { value: point, done: false };\n});\n\n\n/***/ }),\n\n/***/ 9254:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar createHTML = __webpack_require__(4230);\nvar forcedStringHTMLMethod = __webpack_require__(3429);\n\n// `String.prototype.link` method\n// https://tc39.es/ecma262/#sec-string.prototype.link\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {\n  link: function link(url) {\n    return createHTML(this, 'a', 'href', url);\n  }\n});\n\n\n/***/ }),\n\n/***/ 6373:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n/* eslint-disable es/no-string-prototype-matchall -- safe */\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar uncurryThis = __webpack_require__(1702);\nvar createIteratorConstructor = __webpack_require__(4994);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar toLength = __webpack_require__(7466);\nvar toString = __webpack_require__(1340);\nvar anObject = __webpack_require__(9670);\nvar classof = __webpack_require__(4326);\nvar isPrototypeOf = __webpack_require__(7976);\nvar isRegExp = __webpack_require__(7850);\nvar regExpFlags = __webpack_require__(7066);\nvar getMethod = __webpack_require__(8173);\nvar redefine = __webpack_require__(1320);\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar speciesConstructor = __webpack_require__(6707);\nvar advanceStringIndex = __webpack_require__(1530);\nvar regExpExec = __webpack_require__(7651);\nvar InternalStateModule = __webpack_require__(9909);\nvar IS_PURE = __webpack_require__(1913);\n\nvar MATCH_ALL = wellKnownSymbol('matchAll');\nvar REGEXP_STRING = 'RegExp String';\nvar REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(REGEXP_STRING_ITERATOR);\nvar RegExpPrototype = RegExp.prototype;\nvar TypeError = global.TypeError;\nvar getFlags = uncurryThis(regExpFlags);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar un$MatchAll = uncurryThis(''.matchAll);\n\nvar WORKS_WITH_NON_GLOBAL_REGEX = !!un$MatchAll && !fails(function () {\n  un$MatchAll('a', /./);\n});\n\nvar $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) {\n  setInternalState(this, {\n    type: REGEXP_STRING_ITERATOR,\n    regexp: regexp,\n    string: string,\n    global: $global,\n    unicode: fullUnicode,\n    done: false\n  });\n}, REGEXP_STRING, function next() {\n  var state = getInternalState(this);\n  if (state.done) return { value: undefined, done: true };\n  var R = state.regexp;\n  var S = state.string;\n  var match = regExpExec(R, S);\n  if (match === null) return { value: undefined, done: state.done = true };\n  if (state.global) {\n    if (toString(match[0]) === '') R.lastIndex = advanceStringIndex(S, toLength(R.lastIndex), state.unicode);\n    return { value: match, done: false };\n  }\n  state.done = true;\n  return { value: match, done: false };\n});\n\nvar $matchAll = function (string) {\n  var R = anObject(this);\n  var S = toString(string);\n  var C, flagsValue, flags, matcher, $global, fullUnicode;\n  C = speciesConstructor(R, RegExp);\n  flagsValue = R.flags;\n  if (flagsValue === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype)) {\n    flagsValue = getFlags(R);\n  }\n  flags = flagsValue === undefined ? '' : toString(flagsValue);\n  matcher = new C(C === RegExp ? R.source : R, flags);\n  $global = !!~stringIndexOf(flags, 'g');\n  fullUnicode = !!~stringIndexOf(flags, 'u');\n  matcher.lastIndex = toLength(R.lastIndex);\n  return new $RegExpStringIterator(matcher, S, $global, fullUnicode);\n};\n\n// `String.prototype.matchAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.matchall\n$({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, {\n  matchAll: function matchAll(regexp) {\n    var O = requireObjectCoercible(this);\n    var flags, S, matcher, rx;\n    if (regexp != null) {\n      if (isRegExp(regexp)) {\n        flags = toString(requireObjectCoercible('flags' in RegExpPrototype\n          ? regexp.flags\n          : getFlags(regexp)\n        ));\n        if (!~stringIndexOf(flags, 'g')) throw TypeError('`.matchAll` does not allow non-global regexes');\n      }\n      if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);\n      matcher = getMethod(regexp, MATCH_ALL);\n      if (matcher === undefined && IS_PURE && classof(regexp) == 'RegExp') matcher = $matchAll;\n      if (matcher) return call(matcher, regexp, O);\n    } else if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);\n    S = toString(O);\n    rx = new RegExp(regexp, 'g');\n    return IS_PURE ? call($matchAll, rx, S) : rx[MATCH_ALL](S);\n  }\n});\n\nIS_PURE || MATCH_ALL in RegExpPrototype || redefine(RegExpPrototype, MATCH_ALL, $matchAll);\n\n\n/***/ }),\n\n/***/ 4723:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar call = __webpack_require__(6916);\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar anObject = __webpack_require__(9670);\nvar toLength = __webpack_require__(7466);\nvar toString = __webpack_require__(1340);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar getMethod = __webpack_require__(8173);\nvar advanceStringIndex = __webpack_require__(1530);\nvar regExpExec = __webpack_require__(7651);\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n  return [\n    // `String.prototype.match` method\n    // https://tc39.es/ecma262/#sec-string.prototype.match\n    function match(regexp) {\n      var O = requireObjectCoercible(this);\n      var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);\n      return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n    },\n    // `RegExp.prototype[@@match]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n    function (string) {\n      var rx = anObject(this);\n      var S = toString(string);\n      var res = maybeCallNative(nativeMatch, rx, S);\n\n      if (res.done) return res.value;\n\n      if (!rx.global) return regExpExec(rx, S);\n\n      var fullUnicode = rx.unicode;\n      rx.lastIndex = 0;\n      var A = [];\n      var n = 0;\n      var result;\n      while ((result = regExpExec(rx, S)) !== null) {\n        var matchStr = toString(result[0]);\n        A[n] = matchStr;\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n        n++;\n      }\n      return n === 0 ? null : A;\n    }\n  ];\n});\n\n\n/***/ }),\n\n/***/ 2481:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar repeat = __webpack_require__(8415);\n\n// `String.prototype.repeat` method\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\n$({ target: 'String', proto: true }, {\n  repeat: repeat\n});\n\n\n/***/ }),\n\n/***/ 5306:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar apply = __webpack_require__(2104);\nvar call = __webpack_require__(6916);\nvar uncurryThis = __webpack_require__(1702);\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar fails = __webpack_require__(7293);\nvar anObject = __webpack_require__(9670);\nvar isCallable = __webpack_require__(614);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar toLength = __webpack_require__(7466);\nvar toString = __webpack_require__(1340);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar advanceStringIndex = __webpack_require__(1530);\nvar getMethod = __webpack_require__(8173);\nvar getSubstitution = __webpack_require__(647);\nvar regExpExec = __webpack_require__(7651);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n  // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n  return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n  if (/./[REPLACE]) {\n    return /./[REPLACE]('a', '$0') === '';\n  }\n  return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n  return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n  var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.es/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = requireObjectCoercible(this);\n      var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);\n      return replacer\n        ? call(replacer, searchValue, O, replaceValue)\n        : call(nativeReplace, toString(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n    function (string, replaceValue) {\n      var rx = anObject(this);\n      var S = toString(string);\n\n      if (\n        typeof replaceValue == 'string' &&\n        stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n        stringIndexOf(replaceValue, '$<') === -1\n      ) {\n        var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n        if (res.done) return res.value;\n      }\n\n      var functionalReplace = isCallable(replaceValue);\n      if (!functionalReplace) replaceValue = toString(replaceValue);\n\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n\n        push(results, result);\n        if (!global) break;\n\n        var matchStr = toString(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n\n        var matched = toString(result[0]);\n        var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = concat([matched], captures, position, S);\n          if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n          var replacement = toString(apply(replaceValue, undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + stringSlice(S, nextSourcePosition);\n    }\n  ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n\n\n/***/ }),\n\n/***/ 3123:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar apply = __webpack_require__(2104);\nvar call = __webpack_require__(6916);\nvar uncurryThis = __webpack_require__(1702);\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar isRegExp = __webpack_require__(7850);\nvar anObject = __webpack_require__(9670);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar speciesConstructor = __webpack_require__(6707);\nvar advanceStringIndex = __webpack_require__(1530);\nvar toLength = __webpack_require__(7466);\nvar toString = __webpack_require__(1340);\nvar getMethod = __webpack_require__(8173);\nvar arraySlice = __webpack_require__(206);\nvar callRegExpExec = __webpack_require__(7651);\nvar regexpExec = __webpack_require__(2261);\nvar stickyHelpers = __webpack_require__(2999);\nvar fails = __webpack_require__(7293);\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n  // eslint-disable-next-line regexp/no-empty-group -- required for testing\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n  var internalSplit;\n  if (\n    'abbc'.split(/(b)*/)[1] == 'c' ||\n    // eslint-disable-next-line regexp/no-empty-group -- required for testing\n    'test'.split(/(?:)/, -1).length != 4 ||\n    'ab'.split(/(?:ab)*/).length != 2 ||\n    '.'.split(/(.?)(.?)/).length != 4 ||\n    // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n    '.'.split(/()()/).length > 1 ||\n    ''.split(/.?/).length\n  ) {\n    // based on es5-shim implementation, need to rework it\n    internalSplit = function (separator, limit) {\n      var string = toString(requireObjectCoercible(this));\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (separator === undefined) return [string];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) {\n        return call(nativeSplit, string, separator, lim);\n      }\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var match, lastIndex, lastLength;\n      while (match = call(regexpExec, separatorCopy, string)) {\n        lastIndex = separatorCopy.lastIndex;\n        if (lastIndex > lastLastIndex) {\n          push(output, stringSlice(string, lastLastIndex, match.index));\n          if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\n          lastLength = match[0].length;\n          lastLastIndex = lastIndex;\n          if (output.length >= lim) break;\n        }\n        if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string.length) {\n        if (lastLength || !exec(separatorCopy, '')) push(output, '');\n      } else push(output, stringSlice(string, lastLastIndex));\n      return output.length > lim ? arraySlice(output, 0, lim) : output;\n    };\n  // Chakra, V8\n  } else if ('0'.split(undefined, 0).length) {\n    internalSplit = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n    };\n  } else internalSplit = nativeSplit;\n\n  return [\n    // `String.prototype.split` method\n    // https://tc39.es/ecma262/#sec-string.prototype.split\n    function split(separator, limit) {\n      var O = requireObjectCoercible(this);\n      var splitter = separator == undefined ? undefined : getMethod(separator, SPLIT);\n      return splitter\n        ? call(splitter, separator, O, limit)\n        : call(internalSplit, toString(O), separator, limit);\n    },\n    // `RegExp.prototype[@@split]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n    //\n    // NOTE: This cannot be properly polyfilled in engines that don't support\n    // the 'y' flag.\n    function (string, limit) {\n      var rx = anObject(this);\n      var S = toString(string);\n      var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n      if (res.done) return res.value;\n\n      var C = speciesConstructor(rx, RegExp);\n\n      var unicodeMatching = rx.unicode;\n      var flags = (rx.ignoreCase ? 'i' : '') +\n                  (rx.multiline ? 'm' : '') +\n                  (rx.unicode ? 'u' : '') +\n                  (UNSUPPORTED_Y ? 'g' : 'y');\n\n      // ^(? + rx + ) is needed, in combination with some S slicing, to\n      // simulate the 'y' flag.\n      var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n      var p = 0;\n      var q = 0;\n      var A = [];\n      while (q < S.length) {\n        splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n        var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n        var e;\n        if (\n          z === null ||\n          (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n        ) {\n          q = advanceStringIndex(S, q, unicodeMatching);\n        } else {\n          push(A, stringSlice(S, p, q));\n          if (A.length === lim) return A;\n          for (var i = 1; i <= z.length - 1; i++) {\n            push(A, z[i]);\n            if (A.length === lim) return A;\n          }\n          q = p = e;\n        }\n      }\n      push(A, stringSlice(S, p));\n      return A;\n    }\n  ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n\n\n/***/ }),\n\n/***/ 7397:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar createHTML = __webpack_require__(4230);\nvar forcedStringHTMLMethod = __webpack_require__(3429);\n\n// `String.prototype.strike` method\n// https://tc39.es/ecma262/#sec-string.prototype.strike\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('strike') }, {\n  strike: function strike() {\n    return createHTML(this, 'strike', '', '');\n  }\n});\n\n\n/***/ }),\n\n/***/ 3210:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $trim = (__webpack_require__(3111).trim);\nvar forcedStringTrimMethod = __webpack_require__(6091);\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n  trim: function trim() {\n    return $trim(this);\n  }\n});\n\n\n/***/ }),\n\n/***/ 2443:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar defineWellKnownSymbol = __webpack_require__(7235);\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n\n\n/***/ }),\n\n/***/ 1817:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n\nvar $ = __webpack_require__(2109);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar hasOwn = __webpack_require__(2597);\nvar isCallable = __webpack_require__(614);\nvar isPrototypeOf = __webpack_require__(7976);\nvar toString = __webpack_require__(1340);\nvar defineProperty = (__webpack_require__(3070).f);\nvar copyConstructorProperties = __webpack_require__(9920);\n\nvar NativeSymbol = global.Symbol;\nvar SymbolPrototype = NativeSymbol && NativeSymbol.prototype;\n\nif (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||\n  // Safari 12 bug\n  NativeSymbol().description !== undefined\n)) {\n  var EmptyStringDescriptionStore = {};\n  // wrap Symbol constructor for correct work with undefined description\n  var SymbolWrapper = function Symbol() {\n    var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);\n    var result = isPrototypeOf(SymbolPrototype, this)\n      ? new NativeSymbol(description)\n      // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n      : description === undefined ? NativeSymbol() : NativeSymbol(description);\n    if (description === '') EmptyStringDescriptionStore[result] = true;\n    return result;\n  };\n\n  copyConstructorProperties(SymbolWrapper, NativeSymbol);\n  SymbolWrapper.prototype = SymbolPrototype;\n  SymbolPrototype.constructor = SymbolWrapper;\n\n  var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';\n  var symbolToString = uncurryThis(SymbolPrototype.toString);\n  var symbolValueOf = uncurryThis(SymbolPrototype.valueOf);\n  var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n  var replace = uncurryThis(''.replace);\n  var stringSlice = uncurryThis(''.slice);\n\n  defineProperty(SymbolPrototype, 'description', {\n    configurable: true,\n    get: function description() {\n      var symbol = symbolValueOf(this);\n      var string = symbolToString(symbol);\n      if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';\n      var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');\n      return desc === '' ? undefined : desc;\n    }\n  });\n\n  $({ global: true, forced: true }, {\n    Symbol: SymbolWrapper\n  });\n}\n\n\n/***/ }),\n\n/***/ 2165:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar defineWellKnownSymbol = __webpack_require__(7235);\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n\n\n/***/ }),\n\n/***/ 2526:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar getBuiltIn = __webpack_require__(5005);\nvar apply = __webpack_require__(2104);\nvar call = __webpack_require__(6916);\nvar uncurryThis = __webpack_require__(1702);\nvar IS_PURE = __webpack_require__(1913);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar NATIVE_SYMBOL = __webpack_require__(133);\nvar fails = __webpack_require__(7293);\nvar hasOwn = __webpack_require__(2597);\nvar isArray = __webpack_require__(3157);\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\nvar isPrototypeOf = __webpack_require__(7976);\nvar isSymbol = __webpack_require__(2190);\nvar anObject = __webpack_require__(9670);\nvar toObject = __webpack_require__(7908);\nvar toIndexedObject = __webpack_require__(5656);\nvar toPropertyKey = __webpack_require__(4948);\nvar $toString = __webpack_require__(1340);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar nativeObjectCreate = __webpack_require__(30);\nvar objectKeys = __webpack_require__(1956);\nvar getOwnPropertyNamesModule = __webpack_require__(8006);\nvar getOwnPropertyNamesExternal = __webpack_require__(1156);\nvar getOwnPropertySymbolsModule = __webpack_require__(5181);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar definePropertyModule = __webpack_require__(3070);\nvar propertyIsEnumerableModule = __webpack_require__(5296);\nvar arraySlice = __webpack_require__(206);\nvar redefine = __webpack_require__(1320);\nvar shared = __webpack_require__(2309);\nvar sharedKey = __webpack_require__(6200);\nvar hiddenKeys = __webpack_require__(3501);\nvar uid = __webpack_require__(9711);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar wrappedWellKnownSymbolModule = __webpack_require__(6061);\nvar defineWellKnownSymbol = __webpack_require__(7235);\nvar setToStringTag = __webpack_require__(8003);\nvar InternalStateModule = __webpack_require__(9909);\nvar $forEach = (__webpack_require__(2092).forEach);\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n  return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n    get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (O, P, Attributes) {\n  var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n  if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n  nativeDefineProperty(O, P, Attributes);\n  if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n    nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n  }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n  var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n  setInternalState(symbol, {\n    type: SYMBOL,\n    tag: tag,\n    description: description\n  });\n  if (!DESCRIPTORS) symbol.description = description;\n  return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n  if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n  anObject(O);\n  var key = toPropertyKey(P);\n  anObject(Attributes);\n  if (hasOwn(AllSymbols, key)) {\n    if (!Attributes.enumerable) {\n      if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n      O[HIDDEN][key] = true;\n    } else {\n      if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n      Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n    } return setSymbolDescriptor(O, key, Attributes);\n  } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n  anObject(O);\n  var properties = toIndexedObject(Properties);\n  var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n  $forEach(keys, function (key) {\n    if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n  });\n  return O;\n};\n\nvar $create = function create(O, Properties) {\n  return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n  var P = toPropertyKey(V);\n  var enumerable = call(nativePropertyIsEnumerable, this, P);\n  if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n  return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n    ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n  var it = toIndexedObject(O);\n  var key = toPropertyKey(P);\n  if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n  var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n  if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n    descriptor.enumerable = true;\n  }\n  return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n  var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n  });\n  return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n  var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n  var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n      push(result, AllSymbols[key]);\n    }\n  });\n  return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n  $Symbol = function Symbol() {\n    if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');\n    var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n    var tag = uid(description);\n    var setter = function (value) {\n      if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n      if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n    };\n    if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n    return wrap(tag, description);\n  };\n\n  SymbolPrototype = $Symbol[PROTOTYPE];\n\n  redefine(SymbolPrototype, 'toString', function toString() {\n    return getInternalState(this).tag;\n  });\n\n  redefine($Symbol, 'withoutSetter', function (description) {\n    return wrap(uid(description), description);\n  });\n\n  propertyIsEnumerableModule.f = $propertyIsEnumerable;\n  definePropertyModule.f = $defineProperty;\n  getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n  getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n  getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n  wrappedWellKnownSymbolModule.f = function (name) {\n    return wrap(wellKnownSymbol(name), name);\n  };\n\n  if (DESCRIPTORS) {\n    // https://github.com/tc39/proposal-Symbol-description\n    nativeDefineProperty(SymbolPrototype, 'description', {\n      configurable: true,\n      get: function description() {\n        return getInternalState(this).description;\n      }\n    });\n    if (!IS_PURE) {\n      redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n    }\n  }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n  Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n  defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Symbol.for` method\n  // https://tc39.es/ecma262/#sec-symbol.for\n  'for': function (key) {\n    var string = $toString(key);\n    if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n    var symbol = $Symbol(string);\n    StringToSymbolRegistry[string] = symbol;\n    SymbolToStringRegistry[symbol] = string;\n    return symbol;\n  },\n  // `Symbol.keyFor` method\n  // https://tc39.es/ecma262/#sec-symbol.keyfor\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n    if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n  },\n  useSetter: function () { USE_SETTER = true; },\n  useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n  // `Object.create` method\n  // https://tc39.es/ecma262/#sec-object.create\n  create: $create,\n  // `Object.defineProperty` method\n  // https://tc39.es/ecma262/#sec-object.defineproperty\n  defineProperty: $defineProperty,\n  // `Object.defineProperties` method\n  // https://tc39.es/ecma262/#sec-object.defineproperties\n  defineProperties: $defineProperties,\n  // `Object.getOwnPropertyDescriptor` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Object.getOwnPropertyNames` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertynames\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // `Object.getOwnPropertySymbols` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return getOwnPropertySymbolsModule.f(toObject(it));\n  }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n  var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n    var symbol = $Symbol();\n    // MS Edge converts symbol values to JSON as {}\n    return $stringify([symbol]) != '[null]'\n      // WebKit converts symbol values to JSON as null\n      || $stringify({ a: symbol }) != '{}'\n      // V8 throws on boxed symbols\n      || $stringify(Object(symbol)) != '{}';\n  });\n\n  $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n    // eslint-disable-next-line no-unused-vars -- required for `.length`\n    stringify: function stringify(it, replacer, space) {\n      var args = arraySlice(arguments);\n      var $replacer = replacer;\n      if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n      if (!isArray(replacer)) replacer = function (key, value) {\n        if (isCallable($replacer)) value = call($replacer, this, key, value);\n        if (!isSymbol(value)) return value;\n      };\n      args[1] = replacer;\n      return apply($stringify, null, args);\n    }\n  });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!SymbolPrototype[TO_PRIMITIVE]) {\n  var valueOf = SymbolPrototype.valueOf;\n  // eslint-disable-next-line no-unused-vars -- required for .length\n  redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n    // TODO: improve hint logic\n    return call(valueOf, this);\n  });\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n\n\n/***/ }),\n\n/***/ 6649:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar defineWellKnownSymbol = __webpack_require__(7235);\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n\n\n/***/ }),\n\n/***/ 3680:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar defineWellKnownSymbol = __webpack_require__(7235);\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n\n\n/***/ }),\n\n/***/ 2990:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar uncurryThis = __webpack_require__(1702);\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $ArrayCopyWithin = __webpack_require__(1048);\n\nvar u$ArrayCopyWithin = uncurryThis($ArrayCopyWithin);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin\nexportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {\n  return u$ArrayCopyWithin(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 8927:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $every = (__webpack_require__(2092).every);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.every` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every\nexportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {\n  return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 3105:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar call = __webpack_require__(6916);\nvar $fill = __webpack_require__(1285);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n  var length = arguments.length;\n  return call(\n    $fill,\n    aTypedArray(this),\n    value,\n    length > 1 ? arguments[1] : undefined,\n    length > 2 ? arguments[2] : undefined\n  );\n});\n\n\n/***/ }),\n\n/***/ 5035:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $filter = (__webpack_require__(2092).filter);\nvar fromSpeciesAndList = __webpack_require__(3074);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.filter` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter\nexportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {\n  var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  return fromSpeciesAndList(this, list);\n});\n\n\n/***/ }),\n\n/***/ 7174:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $findIndex = (__webpack_require__(2092).findIndex);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex\nexportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {\n  return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 4345:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $find = (__webpack_require__(2092).find);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.find` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find\nexportTypedArrayMethod('find', function find(predicate /* , thisArg */) {\n  return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 4197:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Float32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float32', function (init) {\n  return function Float32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 6495:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Float64Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float64', function (init) {\n  return function Float64Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 2846:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $forEach = (__webpack_require__(2092).forEach);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach\nexportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {\n  $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 8145:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = __webpack_require__(3832);\nvar exportTypedArrayStaticMethod = (__webpack_require__(2094).exportTypedArrayStaticMethod);\nvar typedArrayFrom = __webpack_require__(7321);\n\n// `%TypedArray%.from` method\n// https://tc39.es/ecma262/#sec-%typedarray%.from\nexportTypedArrayStaticMethod('from', typedArrayFrom, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS);\n\n\n/***/ }),\n\n/***/ 4731:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $includes = (__webpack_require__(1318).includes);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.includes` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes\nexportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {\n  return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 7209:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $indexOf = (__webpack_require__(1318).indexOf);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof\nexportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {\n  return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 5109:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Int16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int16', function (init) {\n  return function Int16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 5125:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Int32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int32', function (init) {\n  return function Int32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 7145:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Int8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int8', function (init) {\n  return function Int8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 6319:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar PROPER_FUNCTION_NAME = (__webpack_require__(6530).PROPER);\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar ArrayIterators = __webpack_require__(6992);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar Uint8Array = global.Uint8Array;\nvar arrayValues = uncurryThis(ArrayIterators.values);\nvar arrayKeys = uncurryThis(ArrayIterators.keys);\nvar arrayEntries = uncurryThis(ArrayIterators.entries);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar nativeTypedArrayIterator = Uint8Array && Uint8Array.prototype[ITERATOR];\n\nvar PROPER_ARRAY_VALUES_NAME = !!nativeTypedArrayIterator && nativeTypedArrayIterator.name === 'values';\n\nvar typedArrayValues = function values() {\n  return arrayValues(aTypedArray(this));\n};\n\n// `%TypedArray%.prototype.entries` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\nexportTypedArrayMethod('entries', function entries() {\n  return arrayEntries(aTypedArray(this));\n});\n// `%TypedArray%.prototype.keys` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys\nexportTypedArrayMethod('keys', function keys() {\n  return arrayKeys(aTypedArray(this));\n});\n// `%TypedArray%.prototype.values` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\nexportTypedArrayMethod('values', typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME);\n// `%TypedArray%.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator\nexportTypedArrayMethod(ITERATOR, typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME);\n\n\n/***/ }),\n\n/***/ 8867:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar uncurryThis = __webpack_require__(1702);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $join = uncurryThis([].join);\n\n// `%TypedArray%.prototype.join` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join\nexportTypedArrayMethod('join', function join(separator) {\n  return $join(aTypedArray(this), separator);\n});\n\n\n/***/ }),\n\n/***/ 7789:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar apply = __webpack_require__(2104);\nvar $lastIndexOf = __webpack_require__(6583);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof\nexportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {\n  var length = arguments.length;\n  return apply($lastIndexOf, aTypedArray(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]);\n});\n\n\n/***/ }),\n\n/***/ 3739:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $map = (__webpack_require__(2092).map);\nvar typedArraySpeciesConstructor = __webpack_require__(6304);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.map` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map\nexportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {\n  return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {\n    return new (typedArraySpeciesConstructor(O))(length);\n  });\n});\n\n\n/***/ }),\n\n/***/ 4483:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $reduceRight = (__webpack_require__(3671).right);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRicht` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n  var length = arguments.length;\n  return $reduceRight(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 9368:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $reduce = (__webpack_require__(3671).left);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce\nexportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {\n  var length = arguments.length;\n  return $reduce(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 2056:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar floor = Math.floor;\n\n// `%TypedArray%.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse\nexportTypedArrayMethod('reverse', function reverse() {\n  var that = this;\n  var length = aTypedArray(that).length;\n  var middle = floor(length / 2);\n  var index = 0;\n  var value;\n  while (index < middle) {\n    value = that[index];\n    that[index++] = that[--length];\n    that[length] = value;\n  } return that;\n});\n\n\n/***/ }),\n\n/***/ 3462:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar toOffset = __webpack_require__(4590);\nvar toObject = __webpack_require__(7908);\nvar fails = __webpack_require__(7293);\n\nvar RangeError = global.RangeError;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n  // eslint-disable-next-line es/no-typed-arrays -- required for testing\n  new Int8Array(1).set({});\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n  aTypedArray(this);\n  var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n  var length = this.length;\n  var src = toObject(arrayLike);\n  var len = lengthOfArrayLike(src);\n  var index = 0;\n  if (len + offset > length) throw RangeError('Wrong length');\n  while (index < len) this[offset + index] = src[index++];\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 678:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar typedArraySpeciesConstructor = __webpack_require__(6304);\nvar fails = __webpack_require__(7293);\nvar arraySlice = __webpack_require__(206);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n  // eslint-disable-next-line es/no-typed-arrays -- required for testing\n  new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n  var list = arraySlice(aTypedArray(this), start, end);\n  var C = typedArraySpeciesConstructor(this);\n  var index = 0;\n  var length = list.length;\n  var result = new C(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 7462:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $some = (__webpack_require__(2092).some);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.some` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some\nexportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {\n  return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 3824:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar fails = __webpack_require__(7293);\nvar aCallable = __webpack_require__(9662);\nvar internalSort = __webpack_require__(4362);\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar FF = __webpack_require__(8886);\nvar IE_OR_EDGE = __webpack_require__(256);\nvar V8 = __webpack_require__(7392);\nvar WEBKIT = __webpack_require__(8008);\n\nvar Array = global.Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar Uint16Array = global.Uint16Array;\nvar un$Sort = Uint16Array && uncurryThis(Uint16Array.prototype.sort);\n\n// WebKit\nvar ACCEPT_INCORRECT_ARGUMENTS = !!un$Sort && !(fails(function () {\n  un$Sort(new Uint16Array(2), null);\n}) && fails(function () {\n  un$Sort(new Uint16Array(2), {});\n}));\n\nvar STABLE_SORT = !!un$Sort && !fails(function () {\n  // feature detection can be too slow, so check engines versions\n  if (V8) return V8 < 74;\n  if (FF) return FF < 67;\n  if (IE_OR_EDGE) return true;\n  if (WEBKIT) return WEBKIT < 602;\n\n  var array = new Uint16Array(516);\n  var expected = Array(516);\n  var index, mod;\n\n  for (index = 0; index < 516; index++) {\n    mod = index % 4;\n    array[index] = 515 - index;\n    expected[index] = index - 2 * mod + 3;\n  }\n\n  un$Sort(array, function (a, b) {\n    return (a / 4 | 0) - (b / 4 | 0);\n  });\n\n  for (index = 0; index < 516; index++) {\n    if (array[index] !== expected[index]) return true;\n  }\n});\n\nvar getSortCompare = function (comparefn) {\n  return function (x, y) {\n    if (comparefn !== undefined) return +comparefn(x, y) || 0;\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (y !== y) return -1;\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (x !== x) return 1;\n    if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;\n    return x > y;\n  };\n};\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n  if (comparefn !== undefined) aCallable(comparefn);\n  if (STABLE_SORT) return un$Sort(this, comparefn);\n\n  return internalSort(aTypedArray(this), getSortCompare(comparefn));\n}, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);\n\n\n/***/ }),\n\n/***/ 5021:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar toLength = __webpack_require__(7466);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar typedArraySpeciesConstructor = __webpack_require__(6304);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.subarray` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray\nexportTypedArrayMethod('subarray', function subarray(begin, end) {\n  var O = aTypedArray(this);\n  var length = O.length;\n  var beginIndex = toAbsoluteIndex(begin, length);\n  var C = typedArraySpeciesConstructor(O);\n  return new C(\n    O.buffer,\n    O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,\n    toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)\n  );\n});\n\n\n/***/ }),\n\n/***/ 2974:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar apply = __webpack_require__(2104);\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar fails = __webpack_require__(7293);\nvar arraySlice = __webpack_require__(206);\n\nvar Int8Array = global.Int8Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $toLocaleString = [].toLocaleString;\n\n// iOS Safari 6.x fails here\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\n  $toLocaleString.call(new Int8Array(1));\n});\n\nvar FORCED = fails(function () {\n  return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\n}) || !fails(function () {\n  Int8Array.prototype.toLocaleString.call([1, 2]);\n});\n\n// `%TypedArray%.prototype.toLocaleString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\n  return apply(\n    $toLocaleString,\n    TO_LOCALE_STRING_BUG ? arraySlice(aTypedArray(this)) : aTypedArray(this),\n    arraySlice(arguments)\n  );\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 5016:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar exportTypedArrayMethod = (__webpack_require__(2094).exportTypedArrayMethod);\nvar fails = __webpack_require__(7293);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\n\nvar Uint8Array = global.Uint8Array;\nvar Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};\nvar arrayToString = [].toString;\nvar join = uncurryThis([].join);\n\nif (fails(function () { arrayToString.call({}); })) {\n  arrayToString = function toString() {\n    return join(this);\n  };\n}\n\nvar IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;\n\n// `%TypedArray%.prototype.toString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring\nexportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);\n\n\n/***/ }),\n\n/***/ 8255:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Uint16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint16', function (init) {\n  return function Uint16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 9135:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Uint32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint32', function (init) {\n  return function Uint32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 2472:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n  return function Uint8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 9743:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Uint8ClampedArray` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n  return function Uint8ClampedArray(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n}, true);\n\n\n/***/ }),\n\n/***/ 8628:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n// TODO: Remove from `core-js@4`\n__webpack_require__(9170);\n\n\n/***/ }),\n\n/***/ 5743:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n// TODO: Remove from `core-js@4`\n__webpack_require__(5837);\n\n\n/***/ }),\n\n/***/ 7314:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n// TODO: Remove from `core-js@4`\n__webpack_require__(7922);\n\n\n/***/ }),\n\n/***/ 6290:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n// TODO: Remove from `core-js@4`\n__webpack_require__(4668);\n\n\n/***/ }),\n\n/***/ 7479:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar newPromiseCapabilityModule = __webpack_require__(8523);\nvar perform = __webpack_require__(2534);\n\n// `Promise.try` method\n// https://github.com/tc39/proposal-promise-try\n$({ target: 'Promise', stat: true }, {\n  'try': function (callbackfn) {\n    var promiseCapability = newPromiseCapabilityModule.f(this);\n    var result = perform(callbackfn);\n    (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);\n    return promiseCapability.promise;\n  }\n});\n\n\n/***/ }),\n\n/***/ 3728:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n// TODO: Remove from `core-js@4`\n__webpack_require__(6373);\n\n\n/***/ }),\n\n/***/ 4747:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar DOMIterables = __webpack_require__(8324);\nvar DOMTokenListPrototype = __webpack_require__(8509);\nvar forEach = __webpack_require__(8533);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\nvar handlePrototype = function (CollectionPrototype) {\n  // some Chrome versions have non-configurable methods on DOMTokenList\n  if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n    createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n  } catch (error) {\n    CollectionPrototype.forEach = forEach;\n  }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  if (DOMIterables[COLLECTION_NAME]) {\n    handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n  }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n\n\n/***/ }),\n\n/***/ 3948:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar DOMIterables = __webpack_require__(8324);\nvar DOMTokenListPrototype = __webpack_require__(8509);\nvar ArrayIteratorMethods = __webpack_require__(6992);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n  if (CollectionPrototype) {\n    // some Chrome versions have non-configurable methods on DOMTokenList\n    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n    } catch (error) {\n      CollectionPrototype[ITERATOR] = ArrayValues;\n    }\n    if (!CollectionPrototype[TO_STRING_TAG]) {\n      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n    }\n    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n      // some Chrome versions have non-configurable methods on DOMTokenList\n      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n      } catch (error) {\n        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n      }\n    }\n  }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n\n\n/***/ }),\n\n/***/ 3753:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar call = __webpack_require__(6916);\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\n$({ target: 'URL', proto: true, enumerable: true }, {\n  toJSON: function toJSON() {\n    return call(URL.prototype.toString, this);\n  }\n});\n\n\n/***/ }),\n\n/***/ 1150:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar parent = __webpack_require__(7633);\n__webpack_require__(3948);\n\nmodule.exports = parent;\n\n\n/***/ }),\n\n/***/ 251:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar objectKeys = __webpack_require__(2215);\nvar isArguments = __webpack_require__(2584);\nvar is = __webpack_require__(609);\nvar isRegex = __webpack_require__(8420);\nvar flags = __webpack_require__(2847);\nvar isDate = __webpack_require__(8923);\n\nvar getTime = Date.prototype.getTime;\n\nfunction deepEqual(actual, expected, options) {\n  var opts = options || {};\n\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (opts.strict ? is(actual, expected) : actual === expected) {\n    return true;\n  }\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n  if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n    return opts.strict ? is(actual, expected) : actual == expected;\n  }\n\n  /*\n   * 7.4. For all other Object pairs, including Array objects, equivalence is\n   * determined by having the same number of owned properties (as verified\n   * with Object.prototype.hasOwnProperty.call), the same set of keys\n   * (although not necessarily the same order), equivalent values for every\n   * corresponding key, and an identical 'prototype' property. Note: this\n   * accounts for both named and indexed properties on Arrays.\n   */\n  // eslint-disable-next-line no-use-before-define\n  return objEquiv(actual, expected, opts);\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer(x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n    return false;\n  }\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') {\n    return false;\n  }\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  /* eslint max-statements: [2, 50] */\n  var i, key;\n  if (typeof a !== typeof b) { return false; }\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }\n\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) { return false; }\n\n  if (isArguments(a) !== isArguments(b)) { return false; }\n\n  var aIsRegex = isRegex(a);\n  var bIsRegex = isRegex(b);\n  if (aIsRegex !== bIsRegex) { return false; }\n  if (aIsRegex || bIsRegex) {\n    return a.source === b.source && flags(a) === flags(b);\n  }\n\n  if (isDate(a) && isDate(b)) {\n    return getTime.call(a) === getTime.call(b);\n  }\n\n  var aIsBuffer = isBuffer(a);\n  var bIsBuffer = isBuffer(b);\n  if (aIsBuffer !== bIsBuffer) { return false; }\n  if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n    if (a.length !== b.length) { return false; }\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) { return false; }\n    }\n    return true;\n  }\n\n  if (typeof a !== typeof b) { return false; }\n\n  try {\n    var ka = objectKeys(a);\n    var kb = objectKeys(b);\n  } catch (e) { // happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates hasOwnProperty)\n  if (ka.length !== kb.length) { return false; }\n\n  // the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  // ~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i]) { return false; }\n  }\n  // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) { return false; }\n  }\n\n  return true;\n}\n\nmodule.exports = deepEqual;\n\n\n/***/ }),\n\n/***/ 4289:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar hasPropertyDescriptors = __webpack_require__(1044)();\n\nvar supportsDescriptors = origDefineProperty && hasPropertyDescriptors;\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value; // eslint-disable-line no-param-reassign\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n\n\n/***/ }),\n\n/***/ 8091:\n/***/ (function(module) {\n\n\"use strict\";\n/**\n * Code refactored from Mozilla Developer Network:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\n\n\n\nfunction assign(target, firstSource) {\n  if (target === undefined || target === null) {\n    throw new TypeError('Cannot convert first argument to object');\n  }\n\n  var to = Object(target);\n  for (var i = 1; i < arguments.length; i++) {\n    var nextSource = arguments[i];\n    if (nextSource === undefined || nextSource === null) {\n      continue;\n    }\n\n    var keysArray = Object.keys(Object(nextSource));\n    for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n      var nextKey = keysArray[nextIndex];\n      var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n      if (desc !== undefined && desc.enumerable) {\n        to[nextKey] = nextSource[nextKey];\n      }\n    }\n  }\n  return to;\n}\n\nfunction polyfill() {\n  if (!Object.assign) {\n    Object.defineProperty(Object, 'assign', {\n      enumerable: false,\n      configurable: true,\n      writable: true,\n      value: assign\n    });\n  }\n}\n\nmodule.exports = {\n  assign: assign,\n  polyfill: polyfill\n};\n\n\n/***/ }),\n\n/***/ 7187:\n/***/ (function(module) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n\n\n/***/ }),\n\n/***/ 2536:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar ___EXPOSE_LOADER_IMPORT___ = __webpack_require__(4275);\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = __webpack_require__(7672);\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"pdfMake\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"pdfMake\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n\n\n/***/ }),\n\n/***/ 7672:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// eslint-disable-next-line func-names\nmodule.exports = function () {\n  if (typeof globalThis === \"object\") {\n    return globalThis;\n  }\n\n  var g;\n\n  try {\n    // This works if eval is allowed (see CSP)\n    // eslint-disable-next-line no-new-func\n    g = this || new Function(\"return this\")();\n  } catch (e) {\n    // This works if the window reference is available\n    if (typeof window === \"object\") {\n      return window;\n    } // This works if the self reference is available\n\n\n    if (typeof self === \"object\") {\n      return self;\n    } // This works if the global reference is available\n\n\n    if (typeof __webpack_require__.g !== \"undefined\") {\n      return __webpack_require__.g;\n    }\n  }\n\n  return g;\n}();\n\n/***/ }),\n\n/***/ 4029:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isCallable = __webpack_require__(5320);\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n    for (var i = 0, len = array.length; i < len; i++) {\n        if (hasOwnProperty.call(array, i)) {\n            if (receiver == null) {\n                iterator(array[i], i, array);\n            } else {\n                iterator.call(receiver, array[i], i, array);\n            }\n        }\n    }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n    for (var i = 0, len = string.length; i < len; i++) {\n        // no such thing as a sparse string.\n        if (receiver == null) {\n            iterator(string.charAt(i), i, string);\n        } else {\n            iterator.call(receiver, string.charAt(i), i, string);\n        }\n    }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n    for (var k in object) {\n        if (hasOwnProperty.call(object, k)) {\n            if (receiver == null) {\n                iterator(object[k], k, object);\n            } else {\n                iterator.call(receiver, object[k], k, object);\n            }\n        }\n    }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n    if (!isCallable(iterator)) {\n        throw new TypeError('iterator must be a function');\n    }\n\n    var receiver;\n    if (arguments.length >= 3) {\n        receiver = thisArg;\n    }\n\n    if (toStr.call(list) === '[object Array]') {\n        forEachArray(list, iterator, receiver);\n    } else if (typeof list === 'string') {\n        forEachString(list, iterator, receiver);\n    } else {\n        forEachObject(list, iterator, receiver);\n    }\n};\n\nmodule.exports = forEach;\n\n\n/***/ }),\n\n/***/ 7648:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slice.call(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                args.concat(slice.call(arguments))\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        } else {\n            return target.apply(\n                that,\n                args.concat(slice.call(arguments))\n            );\n        }\n    };\n\n    var boundLength = Math.max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs.push('$' + i);\n    }\n\n    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n\n\n/***/ }),\n\n/***/ 8612:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n\n\n/***/ }),\n\n/***/ 5972:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar functionsHaveNames = function functionsHaveNames() {\n\treturn typeof function f() {}.name === 'string';\n};\n\nvar gOPD = Object.getOwnPropertyDescriptor;\nif (gOPD) {\n\ttry {\n\t\tgOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\tgOPD = null;\n\t}\n}\n\nfunctionsHaveNames.functionsHaveConfigurableNames = function functionsHaveConfigurableNames() {\n\tif (!functionsHaveNames() || !gOPD) {\n\t\treturn false;\n\t}\n\tvar desc = gOPD(function () {}, 'name');\n\treturn !!desc && !!desc.configurable;\n};\n\nvar $bind = Function.prototype.bind;\n\nfunctionsHaveNames.boundFunctionsHaveNames = function boundFunctionsHaveNames() {\n\treturn functionsHaveNames() && typeof $bind === 'function' && function f() {}.bind().name !== '';\n};\n\nmodule.exports = functionsHaveNames;\n\n\n/***/ }),\n\n/***/ 210:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\n\n/***/ }),\n\n/***/ 7296:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n\n\n/***/ }),\n\n/***/ 1044:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n\n\n/***/ }),\n\n/***/ 1405:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n\n\n/***/ }),\n\n/***/ 5419:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n\n\n/***/ }),\n\n/***/ 6410:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n\n\n/***/ }),\n\n/***/ 7642:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n\n\n/***/ }),\n\n/***/ 688:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n    GB18030_CODE = -2,\n    SEQ_START  = -10,\n    NODE_START = -1000,\n    UNASSIGNED_NODE = new Array(0x100),\n    DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n    UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n    this.encodingName = codecOptions.encodingName;\n    if (!codecOptions)\n        throw new Error(\"DBCS codec is called without the data.\")\n    if (!codecOptions.table)\n        throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n    // Load tables.\n    var mappingTable = codecOptions.table();\n\n\n    // Decode tables: MBCS -> Unicode.\n\n    // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n    // Trie root is decodeTables[0].\n    // Values: >=  0 -> unicode character code. can be > 0xFFFF\n    //         == UNASSIGNED -> unknown/unassigned sequence.\n    //         == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n    //         <= NODE_START -> index of the next node in our trie to process next byte.\n    //         <= SEQ_START  -> index of the start of a character code sequence, in decodeTableSeq.\n    this.decodeTables = [];\n    this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n    // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n    this.decodeTableSeq = [];\n\n    // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n    for (var i = 0; i < mappingTable.length; i++)\n        this._addDecodeChunk(mappingTable[i]);\n\n    // Load & create GB18030 tables when needed.\n    if (typeof codecOptions.gb18030 === 'function') {\n        this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n        // Add GB18030 common decode nodes.\n        var commonThirdByteNodeIdx = this.decodeTables.length;\n        this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n        var commonFourthByteNodeIdx = this.decodeTables.length;\n        this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n        // Fill out the tree\n        var firstByteNode = this.decodeTables[0];\n        for (var i = 0x81; i <= 0xFE; i++) {\n            var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]];\n            for (var j = 0x30; j <= 0x39; j++) {\n                if (secondByteNode[j] === UNASSIGNED) {\n                    secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;\n                } else if (secondByteNode[j] > NODE_START) {\n                    throw new Error(\"gb18030 decode tables conflict at byte 2\");\n                }\n\n                var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];\n                for (var k = 0x81; k <= 0xFE; k++) {\n                    if (thirdByteNode[k] === UNASSIGNED) {\n                        thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;\n                    } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {\n                        continue;\n                    } else if (thirdByteNode[k] > NODE_START) {\n                        throw new Error(\"gb18030 decode tables conflict at byte 3\");\n                    }\n\n                    var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];\n                    for (var l = 0x30; l <= 0x39; l++) {\n                        if (fourthByteNode[l] === UNASSIGNED)\n                            fourthByteNode[l] = GB18030_CODE;\n                    }\n                }\n            }\n        }\n    }\n\n    this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n    \n    // Encode tables: Unicode -> DBCS.\n\n    // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n    // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n    // Values: >=  0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n    //         == UNASSIGNED -> no conversion found. Output a default char.\n    //         <= SEQ_START  -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n    this.encodeTable = [];\n    \n    // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n    // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n    // means end of sequence (needed when one sequence is a strict subsequence of another).\n    // Objects are kept separately from encodeTable to increase performance.\n    this.encodeTableSeq = [];\n\n    // Some chars can be decoded, but need not be encoded.\n    var skipEncodeChars = {};\n    if (codecOptions.encodeSkipVals)\n        for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n            var val = codecOptions.encodeSkipVals[i];\n            if (typeof val === 'number')\n                skipEncodeChars[val] = true;\n            else\n                for (var j = val.from; j <= val.to; j++)\n                    skipEncodeChars[j] = true;\n        }\n        \n    // Use decode trie to recursively fill out encode tables.\n    this._fillEncodeTable(0, 0, skipEncodeChars);\n\n    // Add more encoding pairs when needed.\n    if (codecOptions.encodeAdd) {\n        for (var uChar in codecOptions.encodeAdd)\n            if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n                this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n    }\n\n    this.defCharSB  = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n    var bytes = [];\n    for (; addr > 0; addr >>>= 8)\n        bytes.push(addr & 0xFF);\n    if (bytes.length == 0)\n        bytes.push(0);\n\n    var node = this.decodeTables[0];\n    for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n        var val = node[bytes[i]];\n\n        if (val == UNASSIGNED) { // Create new node.\n            node[bytes[i]] = NODE_START - this.decodeTables.length;\n            this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n        }\n        else if (val <= NODE_START) { // Existing node.\n            node = this.decodeTables[NODE_START - val];\n        }\n        else\n            throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n    }\n    return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n    // First element of chunk is the hex mbcs code where we start.\n    var curAddr = parseInt(chunk[0], 16);\n\n    // Choose the decoding node where we'll write our chars.\n    var writeTable = this._getDecodeTrieNode(curAddr);\n    curAddr = curAddr & 0xFF;\n\n    // Write all other elements of the chunk to the table.\n    for (var k = 1; k < chunk.length; k++) {\n        var part = chunk[k];\n        if (typeof part === \"string\") { // String, write as-is.\n            for (var l = 0; l < part.length;) {\n                var code = part.charCodeAt(l++);\n                if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n                    var codeTrail = part.charCodeAt(l++);\n                    if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n                        writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n                    else\n                        throw new Error(\"Incorrect surrogate pair in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n                }\n                else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n                    var len = 0xFFF - code + 2;\n                    var seq = [];\n                    for (var m = 0; m < len; m++)\n                        seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n                    writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n                    this.decodeTableSeq.push(seq);\n                }\n                else\n                    writeTable[curAddr++] = code; // Basic char\n            }\n        } \n        else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n            var charCode = writeTable[curAddr - 1] + 1;\n            for (var l = 0; l < part; l++)\n                writeTable[curAddr++] = charCode++;\n        }\n        else\n            throw new Error(\"Incorrect type '\" + typeof part + \"' given in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n    }\n    if (curAddr > 0xFF)\n        throw new Error(\"Incorrect chunk in \"  + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n    var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n    if (this.encodeTable[high] === undefined)\n        this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n    return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n    if (bucket[low] <= SEQ_START)\n        this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n    else if (bucket[low] == UNASSIGNED)\n        bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n    \n    // Get the root of character tree according to first character of the sequence.\n    var uCode = seq[0];\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n\n    var node;\n    if (bucket[low] <= SEQ_START) {\n        // There's already a sequence with  - use it.\n        node = this.encodeTableSeq[SEQ_START-bucket[low]];\n    }\n    else {\n        // There was no sequence object - allocate a new one.\n        node = {};\n        if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n        bucket[low] = SEQ_START - this.encodeTableSeq.length;\n        this.encodeTableSeq.push(node);\n    }\n\n    // Traverse the character tree, allocating new nodes as needed.\n    for (var j = 1; j < seq.length-1; j++) {\n        var oldVal = node[uCode];\n        if (typeof oldVal === 'object')\n            node = oldVal;\n        else {\n            node = node[uCode] = {}\n            if (oldVal !== undefined)\n                node[DEF_CHAR] = oldVal\n        }\n    }\n\n    // Set the leaf to given dbcsCode.\n    uCode = seq[seq.length-1];\n    node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n    var node = this.decodeTables[nodeIdx];\n    var hasValues = false;\n    var subNodeEmpty = {};\n    for (var i = 0; i < 0x100; i++) {\n        var uCode = node[i];\n        var mbCode = prefix + i;\n        if (skipEncodeChars[mbCode])\n            continue;\n\n        if (uCode >= 0) {\n            this._setEncodeChar(uCode, mbCode);\n            hasValues = true;\n        } else if (uCode <= NODE_START) {\n            var subNodeIdx = NODE_START - uCode;\n            if (!subNodeEmpty[subNodeIdx]) {  // Skip empty subtrees (they are too large in gb18030).\n                var newPrefix = (mbCode << 8) >>> 0;  // NOTE: '>>> 0' keeps 32-bit num positive.\n                if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars))\n                    hasValues = true;\n                else\n                    subNodeEmpty[subNodeIdx] = true;\n            }\n        } else if (uCode <= SEQ_START) {\n            this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n            hasValues = true;\n        }\n    }\n    return hasValues;\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n    // Encoder state\n    this.leadSurrogate = -1;\n    this.seqObj = undefined;\n    \n    // Static data\n    this.encodeTable = codec.encodeTable;\n    this.encodeTableSeq = codec.encodeTableSeq;\n    this.defaultCharSingleByte = codec.defCharSB;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n    var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n        leadSurrogate = this.leadSurrogate,\n        seqObj = this.seqObj, nextChar = -1,\n        i = 0, j = 0;\n\n    while (true) {\n        // 0. Get next character.\n        if (nextChar === -1) {\n            if (i == str.length) break;\n            var uCode = str.charCodeAt(i++);\n        }\n        else {\n            var uCode = nextChar;\n            nextChar = -1;    \n        }\n\n        // 1. Handle surrogates.\n        if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n            if (uCode < 0xDC00) { // We've got lead surrogate.\n                if (leadSurrogate === -1) {\n                    leadSurrogate = uCode;\n                    continue;\n                } else {\n                    leadSurrogate = uCode;\n                    // Double lead surrogate found.\n                    uCode = UNASSIGNED;\n                }\n            } else { // We've got trail surrogate.\n                if (leadSurrogate !== -1) {\n                    uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n                    leadSurrogate = -1;\n                } else {\n                    // Incomplete surrogate pair - only trail surrogate found.\n                    uCode = UNASSIGNED;\n                }\n                \n            }\n        }\n        else if (leadSurrogate !== -1) {\n            // Incomplete surrogate pair - only lead surrogate found.\n            nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n            leadSurrogate = -1;\n        }\n\n        // 2. Convert uCode character.\n        var dbcsCode = UNASSIGNED;\n        if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n            var resCode = seqObj[uCode];\n            if (typeof resCode === 'object') { // Sequence continues.\n                seqObj = resCode;\n                continue;\n\n            } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n                dbcsCode = resCode;\n\n            } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n                // Try default character for this sequence\n                resCode = seqObj[DEF_CHAR];\n                if (resCode !== undefined) {\n                    dbcsCode = resCode; // Found. Write it.\n                    nextChar = uCode; // Current character will be written too in the next iteration.\n\n                } else {\n                    // TODO: What if we have no default? (resCode == undefined)\n                    // Then, we should write first char of the sequence as-is and try the rest recursively.\n                    // Didn't do it for now because no encoding has this situation yet.\n                    // Currently, just skip the sequence and write current char.\n                }\n            }\n            seqObj = undefined;\n        }\n        else if (uCode >= 0) {  // Regular character\n            var subtable = this.encodeTable[uCode >> 8];\n            if (subtable !== undefined)\n                dbcsCode = subtable[uCode & 0xFF];\n            \n            if (dbcsCode <= SEQ_START) { // Sequence start\n                seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n                continue;\n            }\n\n            if (dbcsCode == UNASSIGNED && this.gb18030) {\n                // Use GB18030 algorithm to find character(s) to write.\n                var idx = findIdx(this.gb18030.uChars, uCode);\n                if (idx != -1) {\n                    var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n                    newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n                    newBuf[j++] = 0x30 + dbcsCode;\n                    continue;\n                }\n            }\n        }\n\n        // 3. Write dbcsCode character.\n        if (dbcsCode === UNASSIGNED)\n            dbcsCode = this.defaultCharSingleByte;\n        \n        if (dbcsCode < 0x100) {\n            newBuf[j++] = dbcsCode;\n        }\n        else if (dbcsCode < 0x10000) {\n            newBuf[j++] = dbcsCode >> 8;   // high byte\n            newBuf[j++] = dbcsCode & 0xFF; // low byte\n        }\n        else if (dbcsCode < 0x1000000) {\n            newBuf[j++] = dbcsCode >> 16;\n            newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n            newBuf[j++] = dbcsCode & 0xFF;\n        } else {\n            newBuf[j++] = dbcsCode >>> 24;\n            newBuf[j++] = (dbcsCode >>> 16) & 0xFF;\n            newBuf[j++] = (dbcsCode >>> 8) & 0xFF;\n            newBuf[j++] = dbcsCode & 0xFF;\n        }\n    }\n\n    this.seqObj = seqObj;\n    this.leadSurrogate = leadSurrogate;\n    return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n    if (this.leadSurrogate === -1 && this.seqObj === undefined)\n        return; // All clean. Most often case.\n\n    var newBuf = Buffer.alloc(10), j = 0;\n\n    if (this.seqObj) { // We're in the sequence.\n        var dbcsCode = this.seqObj[DEF_CHAR];\n        if (dbcsCode !== undefined) { // Write beginning of the sequence.\n            if (dbcsCode < 0x100) {\n                newBuf[j++] = dbcsCode;\n            }\n            else {\n                newBuf[j++] = dbcsCode >> 8;   // high byte\n                newBuf[j++] = dbcsCode & 0xFF; // low byte\n            }\n        } else {\n            // See todo above.\n        }\n        this.seqObj = undefined;\n    }\n\n    if (this.leadSurrogate !== -1) {\n        // Incomplete surrogate pair - only lead surrogate found.\n        newBuf[j++] = this.defaultCharSingleByte;\n        this.leadSurrogate = -1;\n    }\n    \n    return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n    // Decoder state\n    this.nodeIdx = 0;\n    this.prevBytes = [];\n\n    // Static data\n    this.decodeTables = codec.decodeTables;\n    this.decodeTableSeq = codec.decodeTableSeq;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n    var newBuf = Buffer.alloc(buf.length*2),\n        nodeIdx = this.nodeIdx, \n        prevBytes = this.prevBytes, prevOffset = this.prevBytes.length,\n        seqStart = -this.prevBytes.length, // idx of the start of current parsed sequence.\n        uCode;\n\n    for (var i = 0, j = 0; i < buf.length; i++) {\n        var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset];\n\n        // Lookup in current trie node.\n        var uCode = this.decodeTables[nodeIdx][curByte];\n\n        if (uCode >= 0) { \n            // Normal character, just use it.\n        }\n        else if (uCode === UNASSIGNED) { // Unknown char.\n            // TODO: Callback with seq.\n            uCode = this.defaultCharUnicode.charCodeAt(0);\n            i = seqStart; // Skip one byte ('i' will be incremented by the for loop) and try to parse again.\n        }\n        else if (uCode === GB18030_CODE) {\n            if (i >= 3) {\n                var ptr = (buf[i-3]-0x81)*12600 + (buf[i-2]-0x30)*1260 + (buf[i-1]-0x81)*10 + (curByte-0x30);\n            } else {\n                var ptr = (prevBytes[i-3+prevOffset]-0x81)*12600 + \n                          (((i-2 >= 0) ? buf[i-2] : prevBytes[i-2+prevOffset])-0x30)*1260 + \n                          (((i-1 >= 0) ? buf[i-1] : prevBytes[i-1+prevOffset])-0x81)*10 + \n                          (curByte-0x30);\n            }\n            var idx = findIdx(this.gb18030.gbChars, ptr);\n            uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n        }\n        else if (uCode <= NODE_START) { // Go to next trie node.\n            nodeIdx = NODE_START - uCode;\n            continue;\n        }\n        else if (uCode <= SEQ_START) { // Output a sequence of chars.\n            var seq = this.decodeTableSeq[SEQ_START - uCode];\n            for (var k = 0; k < seq.length - 1; k++) {\n                uCode = seq[k];\n                newBuf[j++] = uCode & 0xFF;\n                newBuf[j++] = uCode >> 8;\n            }\n            uCode = seq[seq.length-1];\n        }\n        else\n            throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n        // Write the character to buffer, handling higher planes using surrogate pair.\n        if (uCode >= 0x10000) { \n            uCode -= 0x10000;\n            var uCodeLead = 0xD800 | (uCode >> 10);\n            newBuf[j++] = uCodeLead & 0xFF;\n            newBuf[j++] = uCodeLead >> 8;\n\n            uCode = 0xDC00 | (uCode & 0x3FF);\n        }\n        newBuf[j++] = uCode & 0xFF;\n        newBuf[j++] = uCode >> 8;\n\n        // Reset trie node.\n        nodeIdx = 0; seqStart = i+1;\n    }\n\n    this.nodeIdx = nodeIdx;\n    this.prevBytes = (seqStart >= 0)\n        ? Array.prototype.slice.call(buf, seqStart)\n        : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));\n\n    return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n    var ret = '';\n\n    // Try to parse all remaining chars.\n    while (this.prevBytes.length > 0) {\n        // Skip 1 character in the buffer.\n        ret += this.defaultCharUnicode;\n        var bytesArr = this.prevBytes.slice(1);\n\n        // Parse remaining as usual.\n        this.prevBytes = [];\n        this.nodeIdx = 0;\n        if (bytesArr.length > 0)\n            ret += this.write(bytesArr);\n    }\n\n    this.prevBytes = [];\n    this.nodeIdx = 0;\n    return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n    if (table[0] > val)\n        return -1;\n\n    var l = 0, r = table.length;\n    while (l < r-1) { // always table[l] <= val < table[r]\n        var mid = l + ((r-l+1) >> 1);\n        if (table[mid] <= val)\n            l = mid;\n        else\n            r = mid;\n    }\n    return l;\n}\n\n\n\n/***/ }),\n\n/***/ 5990:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n    \n    // == Japanese/ShiftJIS ====================================================\n    // All japanese encodings are based on JIS X set of standards:\n    // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.\n    // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n    //              Has several variations in 1978, 1983, 1990 and 1997.\n    // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n    // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n    //              2 planes, first is superset of 0208, second - revised 0212.\n    //              Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n    // Byte encodings are:\n    //  * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n    //               encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n    //               Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n    //  * EUC-JP:    Up to 3 bytes per character. Used mostly on *nixes.\n    //               0x00-0x7F       - lower part of 0201\n    //               0x8E, 0xA1-0xDF - upper part of 0201\n    //               (0xA1-0xFE)x2   - 0208 plane (94x94).\n    //               0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n    //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n    //               Used as-is in ISO2022 family.\n    //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n    //                0201-1976 Roman, 0208-1978, 0208-1983.\n    //  * ISO2022-JP-1: Adds esc seq for 0212-1990.\n    //  * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n    //  * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n    //  * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n    //\n    // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n    //\n    // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n    'shiftjis': {\n        type: '_dbcs',\n        table: function() { return __webpack_require__(7014) },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n        encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n    },\n    'csshiftjis': 'shiftjis',\n    'mskanji': 'shiftjis',\n    'sjis': 'shiftjis',\n    'windows31j': 'shiftjis',\n    'ms31j': 'shiftjis',\n    'xsjis': 'shiftjis',\n    'windows932': 'shiftjis',\n    'ms932': 'shiftjis',\n    '932': 'shiftjis',\n    'cp932': 'shiftjis',\n\n    'eucjp': {\n        type: '_dbcs',\n        table: function() { return __webpack_require__(5633) },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n    },\n\n    // TODO: KDDI extension to Shift_JIS\n    // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n    // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n    // == Chinese/GBK ==========================================================\n    // http://en.wikipedia.org/wiki/GBK\n    // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n    // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n    'gb2312': 'cp936',\n    'gb231280': 'cp936',\n    'gb23121980': 'cp936',\n    'csgb2312': 'cp936',\n    'csiso58gb231280': 'cp936',\n    'euccn': 'cp936',\n\n    // Microsoft's CP936 is a subset and approximation of GBK.\n    'windows936': 'cp936',\n    'ms936': 'cp936',\n    '936': 'cp936',\n    'cp936': {\n        type: '_dbcs',\n        table: function() { return __webpack_require__(3336) },\n    },\n\n    // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n    'gbk': {\n        type: '_dbcs',\n        table: function() { return (__webpack_require__(3336).concat)(__webpack_require__(4346)) },\n    },\n    'xgbk': 'gbk',\n    'isoir58': 'gbk',\n\n    // GB18030 is an algorithmic extension of GBK.\n    // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n    // http://icu-project.org/docs/papers/gb18030.html\n    // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n    // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n    'gb18030': {\n        type: '_dbcs',\n        table: function() { return (__webpack_require__(3336).concat)(__webpack_require__(4346)) },\n        gb18030: function() { return __webpack_require__(6258) },\n        encodeSkipVals: [0x80],\n        encodeAdd: {'€': 0xA2E3},\n    },\n\n    'chinese': 'gb18030',\n\n\n    // == Korean ===============================================================\n    // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n    'windows949': 'cp949',\n    'ms949': 'cp949',\n    '949': 'cp949',\n    'cp949': {\n        type: '_dbcs',\n        table: function() { return __webpack_require__(7348) },\n    },\n\n    'cseuckr': 'cp949',\n    'csksc56011987': 'cp949',\n    'euckr': 'cp949',\n    'isoir149': 'cp949',\n    'korean': 'cp949',\n    'ksc56011987': 'cp949',\n    'ksc56011989': 'cp949',\n    'ksc5601': 'cp949',\n\n\n    // == Big5/Taiwan/Hong Kong ================================================\n    // There are lots of tables for Big5 and cp950. Please see the following links for history:\n    // http://moztw.org/docs/big5/  http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n    // Variations, in roughly number of defined chars:\n    //  * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n    //  * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n    //  * Big5-2003 (Taiwan standard) almost superset of cp950.\n    //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n    //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n    //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n    //    Plus, it has 4 combining sequences.\n    //    Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n    //    because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n    //    Implementations are not consistent within browsers; sometimes labeled as just big5.\n    //    MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n    //    Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n    //    In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n    //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n    //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n    // \n    // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n    // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n    'windows950': 'cp950',\n    'ms950': 'cp950',\n    '950': 'cp950',\n    'cp950': {\n        type: '_dbcs',\n        table: function() { return __webpack_require__(4284) },\n    },\n\n    // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n    'big5': 'big5hkscs',\n    'big5hkscs': {\n        type: '_dbcs',\n        table: function() { return (__webpack_require__(4284).concat)(__webpack_require__(3480)) },\n        encodeSkipVals: [\n            // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of\n            // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.\n            // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.\n            0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe,\n            0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca,\n            0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62,\n            0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef,\n            0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed,\n\n            // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345\n            0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce,\n        ],\n    },\n\n    'cnbig5': 'big5hkscs',\n    'csbig5': 'big5hkscs',\n    'xxbig5': 'big5hkscs',\n};\n\n\n/***/ }),\n\n/***/ 6934:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n    __webpack_require__(1025),\n    __webpack_require__(7688),\n    __webpack_require__(1279),\n    __webpack_require__(758),\n    __webpack_require__(9068),\n    __webpack_require__(3769),\n    __webpack_require__(7018),\n    __webpack_require__(688),\n    __webpack_require__(5990),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it.\nfor (var i = 0; i < modules.length; i++) {\n    var module = modules[i];\n    for (var enc in module)\n        if (Object.prototype.hasOwnProperty.call(module, enc))\n            exports[enc] = module[enc];\n}\n\n\n/***/ }),\n\n/***/ 1025:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n    // Encodings\n    utf8:   { type: \"_internal\", bomAware: true},\n    cesu8:  { type: \"_internal\", bomAware: true},\n    unicode11utf8: \"utf8\",\n\n    ucs2:   { type: \"_internal\", bomAware: true},\n    utf16le: \"ucs2\",\n\n    binary: { type: \"_internal\" },\n    base64: { type: \"_internal\" },\n    hex:    { type: \"_internal\" },\n\n    // Codec.\n    _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n    this.enc = codecOptions.encodingName;\n    this.bomAware = codecOptions.bomAware;\n\n    if (this.enc === \"base64\")\n        this.encoder = InternalEncoderBase64;\n    else if (this.enc === \"cesu8\") {\n        this.enc = \"utf8\"; // Use utf8 for decoding.\n        this.encoder = InternalEncoderCesu8;\n\n        // Add decoder for versions of Node not supporting CESU-8\n        if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') {\n            this.decoder = InternalDecoderCesu8;\n            this.defaultCharUnicode = iconv.defaultCharUnicode;\n        }\n    }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = (__webpack_require__(2553)/* .StringDecoder */ .s);\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n    StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n    this.decoder = new StringDecoder(codec.enc);\n}\n\nInternalDecoder.prototype.write = function(buf) {\n    if (!Buffer.isBuffer(buf)) {\n        buf = Buffer.from(buf);\n    }\n\n    return this.decoder.write(buf);\n}\n\nInternalDecoder.prototype.end = function() {\n    return this.decoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n    this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n    return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n    this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n    str = this.prevStr + str;\n    var completeQuads = str.length - (str.length % 4);\n    this.prevStr = str.slice(completeQuads);\n    str = str.slice(0, completeQuads);\n\n    return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n    return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n    for (var i = 0; i < str.length; i++) {\n        var charCode = str.charCodeAt(i);\n        // Naive implementation, but it works because CESU-8 is especially easy\n        // to convert from UTF-16 (which all JS strings are encoded in).\n        if (charCode < 0x80)\n            buf[bufIdx++] = charCode;\n        else if (charCode < 0x800) {\n            buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n        else { // charCode will always be < 0x10000 in javascript.\n            buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n            buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n    }\n    return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n    this.acc = 0;\n    this.contBytes = 0;\n    this.accBytes = 0;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n    var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n        res = '';\n    for (var i = 0; i < buf.length; i++) {\n        var curByte = buf[i];\n        if ((curByte & 0xC0) !== 0x80) { // Leading byte\n            if (contBytes > 0) { // Previous code is invalid\n                res += this.defaultCharUnicode;\n                contBytes = 0;\n            }\n\n            if (curByte < 0x80) { // Single-byte code\n                res += String.fromCharCode(curByte);\n            } else if (curByte < 0xE0) { // Two-byte code\n                acc = curByte & 0x1F;\n                contBytes = 1; accBytes = 1;\n            } else if (curByte < 0xF0) { // Three-byte code\n                acc = curByte & 0x0F;\n                contBytes = 2; accBytes = 1;\n            } else { // Four or more are not supported for CESU-8.\n                res += this.defaultCharUnicode;\n            }\n        } else { // Continuation byte\n            if (contBytes > 0) { // We're waiting for it.\n                acc = (acc << 6) | (curByte & 0x3f);\n                contBytes--; accBytes++;\n                if (contBytes === 0) {\n                    // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n                    if (accBytes === 2 && acc < 0x80 && acc > 0)\n                        res += this.defaultCharUnicode;\n                    else if (accBytes === 3 && acc < 0x800)\n                        res += this.defaultCharUnicode;\n                    else\n                        // Actually add character.\n                        res += String.fromCharCode(acc);\n                }\n            } else { // Unexpected continuation byte\n                res += this.defaultCharUnicode;\n            }\n        }\n    }\n    this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n    return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n    var res = 0;\n    if (this.contBytes > 0)\n        res += this.defaultCharUnicode;\n    return res;\n}\n\n\n/***/ }),\n\n/***/ 9068:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n    if (!codecOptions)\n        throw new Error(\"SBCS codec is called without the data.\")\n    \n    // Prepare char buffer for decoding.\n    if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n        throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n    \n    if (codecOptions.chars.length === 128) {\n        var asciiString = \"\";\n        for (var i = 0; i < 128; i++)\n            asciiString += String.fromCharCode(i);\n        codecOptions.chars = asciiString + codecOptions.chars;\n    }\n\n    this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n    \n    // Encoding buffer.\n    var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n    for (var i = 0; i < codecOptions.chars.length; i++)\n        encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n    this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n    this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length);\n    for (var i = 0; i < str.length; i++)\n        buf[i] = this.encodeBuf[str.charCodeAt(i)];\n    \n    return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n    this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n    // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n    var decodeBuf = this.decodeBuf;\n    var newBuf = Buffer.alloc(buf.length*2);\n    var idx1 = 0, idx2 = 0;\n    for (var i = 0; i < buf.length; i++) {\n        idx1 = buf[i]*2; idx2 = i*2;\n        newBuf[idx2] = decodeBuf[idx1];\n        newBuf[idx2+1] = decodeBuf[idx1+1];\n    }\n    return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n\n\n/***/ }),\n\n/***/ 7018:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n  \"437\": \"cp437\",\n  \"737\": \"cp737\",\n  \"775\": \"cp775\",\n  \"850\": \"cp850\",\n  \"852\": \"cp852\",\n  \"855\": \"cp855\",\n  \"856\": \"cp856\",\n  \"857\": \"cp857\",\n  \"858\": \"cp858\",\n  \"860\": \"cp860\",\n  \"861\": \"cp861\",\n  \"862\": \"cp862\",\n  \"863\": \"cp863\",\n  \"864\": \"cp864\",\n  \"865\": \"cp865\",\n  \"866\": \"cp866\",\n  \"869\": \"cp869\",\n  \"874\": \"windows874\",\n  \"922\": \"cp922\",\n  \"1046\": \"cp1046\",\n  \"1124\": \"cp1124\",\n  \"1125\": \"cp1125\",\n  \"1129\": \"cp1129\",\n  \"1133\": \"cp1133\",\n  \"1161\": \"cp1161\",\n  \"1162\": \"cp1162\",\n  \"1163\": \"cp1163\",\n  \"1250\": \"windows1250\",\n  \"1251\": \"windows1251\",\n  \"1252\": \"windows1252\",\n  \"1253\": \"windows1253\",\n  \"1254\": \"windows1254\",\n  \"1255\": \"windows1255\",\n  \"1256\": \"windows1256\",\n  \"1257\": \"windows1257\",\n  \"1258\": \"windows1258\",\n  \"28591\": \"iso88591\",\n  \"28592\": \"iso88592\",\n  \"28593\": \"iso88593\",\n  \"28594\": \"iso88594\",\n  \"28595\": \"iso88595\",\n  \"28596\": \"iso88596\",\n  \"28597\": \"iso88597\",\n  \"28598\": \"iso88598\",\n  \"28599\": \"iso88599\",\n  \"28600\": \"iso885910\",\n  \"28601\": \"iso885911\",\n  \"28603\": \"iso885913\",\n  \"28604\": \"iso885914\",\n  \"28605\": \"iso885915\",\n  \"28606\": \"iso885916\",\n  \"windows874\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"win874\": \"windows874\",\n  \"cp874\": \"windows874\",\n  \"windows1250\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n  },\n  \"win1250\": \"windows1250\",\n  \"cp1250\": \"windows1250\",\n  \"windows1251\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"win1251\": \"windows1251\",\n  \"cp1251\": \"windows1251\",\n  \"windows1252\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"win1252\": \"windows1252\",\n  \"cp1252\": \"windows1252\",\n  \"windows1253\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n  },\n  \"win1253\": \"windows1253\",\n  \"cp1253\": \"windows1253\",\n  \"windows1254\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n  },\n  \"win1254\": \"windows1254\",\n  \"cp1254\": \"windows1254\",\n  \"windows1255\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n  },\n  \"win1255\": \"windows1255\",\n  \"cp1255\": \"windows1255\",\n  \"windows1256\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے\"\n  },\n  \"win1256\": \"windows1256\",\n  \"cp1256\": \"windows1256\",\n  \"windows1257\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\"\n  },\n  \"win1257\": \"windows1257\",\n  \"cp1257\": \"windows1257\",\n  \"windows1258\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"win1258\": \"windows1258\",\n  \"cp1258\": \"windows1258\",\n  \"iso88591\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"cp28591\": \"iso88591\",\n  \"iso88592\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n  },\n  \"cp28592\": \"iso88592\",\n  \"iso88593\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" Ħ˘£¤�Ĥ§¨İŞĞĴ­�Ż°ħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙\"\n  },\n  \"cp28593\": \"iso88593\",\n  \"iso88594\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ĄĸŖ¤ĨĻ§¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩļˇ¸šēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖ×ØŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙\"\n  },\n  \"cp28594\": \"iso88594\",\n  \"iso88595\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ\"\n  },\n  \"cp28595\": \"iso88595\",\n  \"iso88596\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������\"\n  },\n  \"cp28596\": \"iso88596\",\n  \"iso88597\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n  },\n  \"cp28597\": \"iso88597\",\n  \"iso88598\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n  },\n  \"cp28598\": \"iso88598\",\n  \"iso88599\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n  },\n  \"cp28599\": \"iso88599\",\n  \"iso885910\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ĄĒĢĪĨĶ§ĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ\"\n  },\n  \"cp28600\": \"iso885910\",\n  \"iso885911\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"cp28601\": \"iso885911\",\n  \"iso885913\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’\"\n  },\n  \"cp28603\": \"iso885913\",\n  \"iso885914\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ\"\n  },\n  \"cp28604\": \"iso885914\",\n  \"iso885915\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"cp28605\": \"iso885915\",\n  \"iso885916\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ĄąŁ€„Š§š©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ\"\n  },\n  \"cp28606\": \"iso885916\",\n  \"cp437\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm437\": \"cp437\",\n  \"csibm437\": \"cp437\",\n  \"cp737\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm737\": \"cp737\",\n  \"csibm737\": \"cp737\",\n  \"cp775\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ \"\n  },\n  \"ibm775\": \"cp775\",\n  \"csibm775\": \"cp775\",\n  \"cp850\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñÑªº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýÝ¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm850\": \"cp850\",\n  \"csibm850\": \"cp850\",\n  \"cp852\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘę¬źČş«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ \"\n  },\n  \"ibm852\": \"cp852\",\n  \"csibm852\": \"cp852\",\n  \"cp855\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ \"\n  },\n  \"ibm855\": \"cp855\",\n  \"csibm855\": \"cp855\",\n  \"cp856\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm856\": \"cp856\",\n  \"csibm856\": \"cp856\",\n  \"cp857\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞğ¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm857\": \"cp857\",\n  \"csibm857\": \"cp857\",\n  \"cp858\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñÑªº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýÝ¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm858\": \"cp858\",\n  \"csibm858\": \"cp858\",\n  \"cp860\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñÑªº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm860\": \"cp860\",\n  \"csibm860\": \"cp860\",\n  \"cp861\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm861\": \"cp861\",\n  \"csibm861\": \"cp861\",\n  \"cp862\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm862\": \"cp862\",\n  \"csibm862\": \"cp862\",\n  \"cp863\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm863\": \"cp863\",\n  \"csibm863\": \"cp863\",\n  \"cp864\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�\"\n  },\n  \"ibm864\": \"cp864\",\n  \"csibm864\": \"cp864\",\n  \"cp865\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñÑªº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm865\": \"cp865\",\n  \"csibm865\": \"cp865\",\n  \"cp866\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ \"\n  },\n  \"ibm866\": \"cp866\",\n  \"csibm866\": \"cp866\",\n  \"cp869\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ \"\n  },\n  \"ibm869\": \"cp869\",\n  \"csibm869\": \"cp869\",\n  \"cp922\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖ×ØÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ\"\n  },\n  \"ibm922\": \"cp922\",\n  \"csibm922\": \"cp922\",\n  \"cp1046\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ﺈ×÷ﹱ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�\"\n  },\n  \"ibm1046\": \"cp1046\",\n  \"csibm1046\": \"cp1046\",\n  \"cp1124\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ\"\n  },\n  \"ibm1124\": \"cp1124\",\n  \"csibm1124\": \"cp1124\",\n  \"cp1125\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ \"\n  },\n  \"ibm1125\": \"cp1125\",\n  \"csibm1125\": \"cp1125\",\n  \"cp1129\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"ibm1129\": \"cp1129\",\n  \"csibm1129\": \"cp1129\",\n  \"cp1133\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�\"\n  },\n  \"ibm1133\": \"cp1133\",\n  \"csibm1133\": \"cp1133\",\n  \"cp1161\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ \"\n  },\n  \"ibm1161\": \"cp1161\",\n  \"csibm1161\": \"cp1161\",\n  \"cp1162\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€…‘’“”•–— กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"ibm1162\": \"cp1162\",\n  \"csibm1162\": \"cp1162\",\n  \"cp1163\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"ibm1163\": \"cp1163\",\n  \"csibm1163\": \"cp1163\",\n  \"maccroatian\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ\"\n  },\n  \"maccyrillic\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n  },\n  \"macgreek\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"Ä¹²É³ÖÜ΅àâä΄¨çéèêë£™îï•½‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\"\n  },\n  \"maciceland\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macroman\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macromania\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macthai\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����\"\n  },\n  \"macturkish\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macukraine\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n  },\n  \"koi8r\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8u\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8ru\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8t\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"armscii8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�\"\n  },\n  \"rk1048\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"tcvn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000ÚỤ\\u0003ỪỬỮ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010ỨỰỲỶỸÝỴ\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ\"\n  },\n  \"georgianacademy\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"georgianps\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"pt154\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"viscii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001Ẳ\\u0003\\u0004ẴẪ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013Ỷ\\u0015\\u0016\\u0017\\u0018Ỹ\\u001a\\u001b\\u001c\\u001dỴ\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ\"\n  },\n  \"iso646cn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"iso646jp\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"hproman8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�\"\n  },\n  \"macintosh\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"ascii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"tis620\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  }\n}\n\n/***/ }),\n\n/***/ 3769:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n    // Not supported by iconv, not sure why.\n    \"10029\": \"maccenteuro\",\n    \"maccenteuro\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"ÄĀāÉĄÖÜáąČäčĆćéŹźĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņŃ¬√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\"\n    },\n\n    \"808\": \"cp808\",\n    \"ibm808\": \"cp808\",\n    \"cp808\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ \"\n    },\n\n    \"mik\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n    },\n\n    \"cp720\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\\x80\\x81éâ\\x84à\\x86çêëèïî\\x8d\\x8e\\x8f\\x90\\u0651\\u0652ô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡\\u064b\\u064c\\u064d\\u064e\\u064f\\u0650≈°∙·√ⁿ²■\\u00a0\"\n    },\n\n    // Aliases of generated encodings.\n    \"ascii8bit\": \"ascii\",\n    \"usascii\": \"ascii\",\n    \"ansix34\": \"ascii\",\n    \"ansix341968\": \"ascii\",\n    \"ansix341986\": \"ascii\",\n    \"csascii\": \"ascii\",\n    \"cp367\": \"ascii\",\n    \"ibm367\": \"ascii\",\n    \"isoir6\": \"ascii\",\n    \"iso646us\": \"ascii\",\n    \"iso646irv\": \"ascii\",\n    \"us\": \"ascii\",\n\n    \"latin1\": \"iso88591\",\n    \"latin2\": \"iso88592\",\n    \"latin3\": \"iso88593\",\n    \"latin4\": \"iso88594\",\n    \"latin5\": \"iso88599\",\n    \"latin6\": \"iso885910\",\n    \"latin7\": \"iso885913\",\n    \"latin8\": \"iso885914\",\n    \"latin9\": \"iso885915\",\n    \"latin10\": \"iso885916\",\n\n    \"csisolatin1\": \"iso88591\",\n    \"csisolatin2\": \"iso88592\",\n    \"csisolatin3\": \"iso88593\",\n    \"csisolatin4\": \"iso88594\",\n    \"csisolatincyrillic\": \"iso88595\",\n    \"csisolatinarabic\": \"iso88596\",\n    \"csisolatingreek\" : \"iso88597\",\n    \"csisolatinhebrew\": \"iso88598\",\n    \"csisolatin5\": \"iso88599\",\n    \"csisolatin6\": \"iso885910\",\n\n    \"l1\": \"iso88591\",\n    \"l2\": \"iso88592\",\n    \"l3\": \"iso88593\",\n    \"l4\": \"iso88594\",\n    \"l5\": \"iso88599\",\n    \"l6\": \"iso885910\",\n    \"l7\": \"iso885913\",\n    \"l8\": \"iso885914\",\n    \"l9\": \"iso885915\",\n    \"l10\": \"iso885916\",\n\n    \"isoir14\": \"iso646jp\",\n    \"isoir57\": \"iso646cn\",\n    \"isoir100\": \"iso88591\",\n    \"isoir101\": \"iso88592\",\n    \"isoir109\": \"iso88593\",\n    \"isoir110\": \"iso88594\",\n    \"isoir144\": \"iso88595\",\n    \"isoir127\": \"iso88596\",\n    \"isoir126\": \"iso88597\",\n    \"isoir138\": \"iso88598\",\n    \"isoir148\": \"iso88599\",\n    \"isoir157\": \"iso885910\",\n    \"isoir166\": \"tis620\",\n    \"isoir179\": \"iso885913\",\n    \"isoir199\": \"iso885914\",\n    \"isoir203\": \"iso885915\",\n    \"isoir226\": \"iso885916\",\n\n    \"cp819\": \"iso88591\",\n    \"ibm819\": \"iso88591\",\n\n    \"cyrillic\": \"iso88595\",\n\n    \"arabic\": \"iso88596\",\n    \"arabic8\": \"iso88596\",\n    \"ecma114\": \"iso88596\",\n    \"asmo708\": \"iso88596\",\n\n    \"greek\" : \"iso88597\",\n    \"greek8\" : \"iso88597\",\n    \"ecma118\" : \"iso88597\",\n    \"elot928\" : \"iso88597\",\n\n    \"hebrew\": \"iso88598\",\n    \"hebrew8\": \"iso88598\",\n\n    \"turkish\": \"iso88599\",\n    \"turkish8\": \"iso88599\",\n\n    \"thai\": \"iso885911\",\n    \"thai8\": \"iso885911\",\n\n    \"celtic\": \"iso885914\",\n    \"celtic8\": \"iso885914\",\n    \"isoceltic\": \"iso885914\",\n\n    \"tis6200\": \"tis620\",\n    \"tis62025291\": \"tis620\",\n    \"tis62025330\": \"tis620\",\n\n    \"10000\": \"macroman\",\n    \"10006\": \"macgreek\",\n    \"10007\": \"maccyrillic\",\n    \"10079\": \"maciceland\",\n    \"10081\": \"macturkish\",\n\n    \"cspc8codepage437\": \"cp437\",\n    \"cspc775baltic\": \"cp775\",\n    \"cspc850multilingual\": \"cp850\",\n    \"cspcp852\": \"cp852\",\n    \"cspc862latinhebrew\": \"cp862\",\n    \"cpgr\": \"cp869\",\n\n    \"msee\": \"cp1250\",\n    \"mscyrl\": \"cp1251\",\n    \"msansi\": \"cp1252\",\n    \"msgreek\": \"cp1253\",\n    \"msturk\": \"cp1254\",\n    \"mshebr\": \"cp1255\",\n    \"msarab\": \"cp1256\",\n    \"winbaltrim\": \"cp1257\",\n\n    \"cp20866\": \"koi8r\",\n    \"20866\": \"koi8r\",\n    \"ibm878\": \"koi8r\",\n    \"cskoi8r\": \"koi8r\",\n\n    \"cp21866\": \"koi8u\",\n    \"21866\": \"koi8u\",\n    \"ibm1168\": \"koi8u\",\n\n    \"strk10482002\": \"rk1048\",\n\n    \"tcvn5712\": \"tcvn\",\n    \"tcvn57121\": \"tcvn\",\n\n    \"gb198880\": \"iso646cn\",\n    \"cn\": \"iso646cn\",\n\n    \"csiso14jisc6220ro\": \"iso646jp\",\n    \"jisc62201969ro\": \"iso646jp\",\n    \"jp\": \"iso646jp\",\n\n    \"cshproman8\": \"hproman8\",\n    \"r8\": \"hproman8\",\n    \"roman8\": \"hproman8\",\n    \"xroman8\": \"hproman8\",\n    \"ibm1051\": \"hproman8\",\n\n    \"mac\": \"macintosh\",\n    \"csmacintosh\": \"macintosh\",\n};\n\n\n\n/***/ }),\n\n/***/ 1279:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n    var buf = Buffer.from(str, 'ucs2');\n    for (var i = 0; i < buf.length; i += 2) {\n        var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n    }\n    return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n    this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n    if (buf.length == 0)\n        return '';\n\n    var buf2 = Buffer.alloc(buf.length + 1),\n        i = 0, j = 0;\n\n    if (this.overflowByte !== -1) {\n        buf2[0] = buf[0];\n        buf2[1] = this.overflowByte;\n        i = 1; j = 2;\n    }\n\n    for (; i < buf.length-1; i += 2, j+= 2) {\n        buf2[j] = buf[i+1];\n        buf2[j+1] = buf[i];\n    }\n\n    this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n    return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n    this.overflowByte = -1;\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n    options = options || {};\n    if (options.addBOM === undefined)\n        options.addBOM = true;\n    this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n    return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n    this.decoder = null;\n    this.initialBufs = [];\n    this.initialBufsLen = 0;\n\n    this.options = options || {};\n    this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n    if (!this.decoder) {\n        // Codec is not chosen yet. Accumulate initial bytes.\n        this.initialBufs.push(buf);\n        this.initialBufsLen += buf.length;\n        \n        if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below)\n            return '';\n\n        // We have enough bytes -> detect endianness.\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n    if (!this.decoder) {\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        var trail = this.decoder.end();\n        if (trail)\n            resStr += trail;\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n    return this.decoder.end();\n}\n\nfunction detectEncoding(bufs, defaultEncoding) {\n    var b = [];\n    var charsProcessed = 0;\n    var asciiCharsLE = 0, asciiCharsBE = 0; // Number of ASCII chars when decoded as LE or BE.\n\n    outer_loop:\n    for (var i = 0; i < bufs.length; i++) {\n        var buf = bufs[i];\n        for (var j = 0; j < buf.length; j++) {\n            b.push(buf[j]);\n            if (b.length === 2) {\n                if (charsProcessed === 0) {\n                    // Check BOM first.\n                    if (b[0] === 0xFF && b[1] === 0xFE) return 'utf-16le';\n                    if (b[0] === 0xFE && b[1] === 0xFF) return 'utf-16be';\n                }\n\n                if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;\n                if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;\n\n                b.length = 0;\n                charsProcessed++;\n\n                if (charsProcessed >= 100) {\n                    break outer_loop;\n                }\n            }\n        }\n    }\n\n    // Make decisions.\n    // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n    // So, we count ASCII as if it was LE or BE, and decide from that.\n    if (asciiCharsBE > asciiCharsLE) return 'utf-16be';\n    if (asciiCharsBE < asciiCharsLE) return 'utf-16le';\n\n    // Couldn't decide (likely all zeros or not enough data).\n    return defaultEncoding || 'utf-16le';\n}\n\n\n\n\n/***/ }),\n\n/***/ 7688:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// == UTF32-LE/BE codec. ==========================================================\n\nexports._utf32 = Utf32Codec;\n\nfunction Utf32Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n    this.bomAware = true;\n    this.isLE = codecOptions.isLE;\n}\n\nexports.utf32le = { type: '_utf32', isLE: true };\nexports.utf32be = { type: '_utf32', isLE: false };\n\n// Aliases\nexports.ucs4le = 'utf32le';\nexports.ucs4be = 'utf32be';\n\nUtf32Codec.prototype.encoder = Utf32Encoder;\nUtf32Codec.prototype.decoder = Utf32Decoder;\n\n// -- Encoding\n\nfunction Utf32Encoder(options, codec) {\n    this.isLE = codec.isLE;\n    this.highSurrogate = 0;\n}\n\nUtf32Encoder.prototype.write = function(str) {\n    var src = Buffer.from(str, 'ucs2');\n    var dst = Buffer.alloc(src.length * 2);\n    var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;\n    var offset = 0;\n\n    for (var i = 0; i < src.length; i += 2) {\n        var code = src.readUInt16LE(i);\n        var isHighSurrogate = (0xD800 <= code && code < 0xDC00);\n        var isLowSurrogate = (0xDC00 <= code && code < 0xE000);\n\n        if (this.highSurrogate) {\n            if (isHighSurrogate || !isLowSurrogate) {\n                // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low\n                // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character\n                // (technically wrong, but expected by some applications, like Windows file names).\n                write32.call(dst, this.highSurrogate, offset);\n                offset += 4;\n            }\n            else {\n                // Create 32-bit value from high and low surrogates;\n                var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000;\n\n                write32.call(dst, codepoint, offset);\n                offset += 4;\n                this.highSurrogate = 0;\n\n                continue;\n            }\n        }\n\n        if (isHighSurrogate)\n            this.highSurrogate = code;\n        else {\n            // Even if the current character is a low surrogate, with no previous high surrogate, we'll\n            // encode it as a semi-invalid stand-alone character for the same reasons expressed above for\n            // unpaired high surrogates.\n            write32.call(dst, code, offset);\n            offset += 4;\n            this.highSurrogate = 0;\n        }\n    }\n\n    if (offset < dst.length)\n        dst = dst.slice(0, offset);\n\n    return dst;\n};\n\nUtf32Encoder.prototype.end = function() {\n    // Treat any leftover high surrogate as a semi-valid independent character.\n    if (!this.highSurrogate)\n        return;\n\n    var buf = Buffer.alloc(4);\n\n    if (this.isLE)\n        buf.writeUInt32LE(this.highSurrogate, 0);\n    else\n        buf.writeUInt32BE(this.highSurrogate, 0);\n\n    this.highSurrogate = 0;\n\n    return buf;\n};\n\n// -- Decoding\n\nfunction Utf32Decoder(options, codec) {\n    this.isLE = codec.isLE;\n    this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);\n    this.overflow = [];\n}\n\nUtf32Decoder.prototype.write = function(src) {\n    if (src.length === 0)\n        return '';\n\n    var i = 0;\n    var codepoint = 0;\n    var dst = Buffer.alloc(src.length + 4);\n    var offset = 0;\n    var isLE = this.isLE;\n    var overflow = this.overflow;\n    var badChar = this.badChar;\n\n    if (overflow.length > 0) {\n        for (; i < src.length && overflow.length < 4; i++)\n            overflow.push(src[i]);\n        \n        if (overflow.length === 4) {\n            // NOTE: codepoint is a signed int32 and can be negative.\n            // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer).\n            if (isLE) {\n                codepoint = overflow[i] | (overflow[i+1] << 8) | (overflow[i+2] << 16) | (overflow[i+3] << 24);\n            } else {\n                codepoint = overflow[i+3] | (overflow[i+2] << 8) | (overflow[i+1] << 16) | (overflow[i] << 24);\n            }\n            overflow.length = 0;\n\n            offset = _writeCodepoint(dst, offset, codepoint, badChar);\n        }\n    }\n\n    // Main loop. Should be as optimized as possible.\n    for (; i < src.length - 3; i += 4) {\n        // NOTE: codepoint is a signed int32 and can be negative.\n        if (isLE) {\n            codepoint = src[i] | (src[i+1] << 8) | (src[i+2] << 16) | (src[i+3] << 24);\n        } else {\n            codepoint = src[i+3] | (src[i+2] << 8) | (src[i+1] << 16) | (src[i] << 24);\n        }\n        offset = _writeCodepoint(dst, offset, codepoint, badChar);\n    }\n\n    // Keep overflowing bytes.\n    for (; i < src.length; i++) {\n        overflow.push(src[i]);\n    }\n\n    return dst.slice(0, offset).toString('ucs2');\n};\n\nfunction _writeCodepoint(dst, offset, codepoint, badChar) {\n    // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations.\n    if (codepoint < 0 || codepoint > 0x10FFFF) {\n        // Not a valid Unicode codepoint\n        codepoint = badChar;\n    } \n\n    // Ephemeral Planes: Write high surrogate.\n    if (codepoint >= 0x10000) {\n        codepoint -= 0x10000;\n\n        var high = 0xD800 | (codepoint >> 10);\n        dst[offset++] = high & 0xff;\n        dst[offset++] = high >> 8;\n\n        // Low surrogate is written below.\n        var codepoint = 0xDC00 | (codepoint & 0x3FF);\n    }\n\n    // Write BMP char or low surrogate.\n    dst[offset++] = codepoint & 0xff;\n    dst[offset++] = codepoint >> 8;\n\n    return offset;\n};\n\nUtf32Decoder.prototype.end = function() {\n    this.overflow.length = 0;\n};\n\n// == UTF-32 Auto codec =============================================================\n// Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic.\n// Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32\n// Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'});\n\n// Encoder prepends BOM (which can be overridden with (addBOM: false}).\n\nexports.utf32 = Utf32AutoCodec;\nexports.ucs4 = 'utf32';\n\nfunction Utf32AutoCodec(options, iconv) {\n    this.iconv = iconv;\n}\n\nUtf32AutoCodec.prototype.encoder = Utf32AutoEncoder;\nUtf32AutoCodec.prototype.decoder = Utf32AutoDecoder;\n\n// -- Encoding\n\nfunction Utf32AutoEncoder(options, codec) {\n    options = options || {};\n\n    if (options.addBOM === undefined)\n        options.addBOM = true;\n\n    this.encoder = codec.iconv.getEncoder(options.defaultEncoding || 'utf-32le', options);\n}\n\nUtf32AutoEncoder.prototype.write = function(str) {\n    return this.encoder.write(str);\n};\n\nUtf32AutoEncoder.prototype.end = function() {\n    return this.encoder.end();\n};\n\n// -- Decoding\n\nfunction Utf32AutoDecoder(options, codec) {\n    this.decoder = null;\n    this.initialBufs = [];\n    this.initialBufsLen = 0;\n    this.options = options || {};\n    this.iconv = codec.iconv;\n}\n\nUtf32AutoDecoder.prototype.write = function(buf) {\n    if (!this.decoder) { \n        // Codec is not chosen yet. Accumulate initial bytes.\n        this.initialBufs.push(buf);\n        this.initialBufsLen += buf.length;\n\n        if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below)\n            return '';\n\n        // We have enough bytes -> detect endianness.\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.write(buf);\n};\n\nUtf32AutoDecoder.prototype.end = function() {\n    if (!this.decoder) {\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        var trail = this.decoder.end();\n        if (trail)\n            resStr += trail;\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.end();\n};\n\nfunction detectEncoding(bufs, defaultEncoding) {\n    var b = [];\n    var charsProcessed = 0;\n    var invalidLE = 0, invalidBE = 0;   // Number of invalid chars when decoded as LE or BE.\n    var bmpCharsLE = 0, bmpCharsBE = 0; // Number of BMP chars when decoded as LE or BE.\n\n    outer_loop:\n    for (var i = 0; i < bufs.length; i++) {\n        var buf = bufs[i];\n        for (var j = 0; j < buf.length; j++) {\n            b.push(buf[j]);\n            if (b.length === 4) {\n                if (charsProcessed === 0) {\n                    // Check BOM first.\n                    if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) {\n                        return 'utf-32le';\n                    }\n                    if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) {\n                        return 'utf-32be';\n                    }\n                }\n\n                if (b[0] !== 0 || b[1] > 0x10) invalidBE++;\n                if (b[3] !== 0 || b[2] > 0x10) invalidLE++;\n\n                if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;\n                if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;\n\n                b.length = 0;\n                charsProcessed++;\n\n                if (charsProcessed >= 100) {\n                    break outer_loop;\n                }\n            }\n        }\n    }\n\n    // Make decisions.\n    if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE)  return 'utf-32be';\n    if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE)  return 'utf-32le';\n\n    // Couldn't decide (likely all zeros or not enough data).\n    return defaultEncoding || 'utf-32le';\n}\n\n\n/***/ }),\n\n/***/ 758:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n    this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n    // Naive implementation.\n    // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n    return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n        return \"+\" + (chunk === '+' ? '' : \n            this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n            + \"-\";\n    }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n    base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n    minusChar = '-'.charCodeAt(0),\n    andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '+'\n            if (buf[i] == plusChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64Chars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n                    res += \"+\";\n                } else {\n                    var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\");\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus is absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\");\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n//  * Base64 part is started by \"&\" instead of \"+\"\n//  * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n//  * In Base64, \",\" is used instead of \"/\"\n//  * Base64 must not be used to represent direct characters.\n//  * No implicit shift back from Base64 (should always end with '-')\n//  * String must end in non-shifted position.\n//  * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = Buffer.alloc(6);\n    this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n    var inBase64 = this.inBase64,\n        base64Accum = this.base64Accum,\n        base64AccumIdx = this.base64AccumIdx,\n        buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n    for (var i = 0; i < str.length; i++) {\n        var uChar = str.charCodeAt(i);\n        if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n            if (inBase64) {\n                if (base64AccumIdx > 0) {\n                    bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n                    base64AccumIdx = 0;\n                }\n\n                buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n                inBase64 = false;\n            }\n\n            if (!inBase64) {\n                buf[bufIdx++] = uChar; // Write direct character\n\n                if (uChar === andChar)  // Ampersand -> '&-'\n                    buf[bufIdx++] = minusChar;\n            }\n\n        } else { // Non-direct character\n            if (!inBase64) {\n                buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n                inBase64 = true;\n            }\n            if (inBase64) {\n                base64Accum[base64AccumIdx++] = uChar >> 8;\n                base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n                if (base64AccumIdx == base64Accum.length) {\n                    bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n                    base64AccumIdx = 0;\n                }\n            }\n        }\n    }\n\n    this.inBase64 = inBase64;\n    this.base64AccumIdx = base64AccumIdx;\n\n    return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n    var buf = Buffer.alloc(10), bufIdx = 0;\n    if (this.inBase64) {\n        if (this.base64AccumIdx > 0) {\n            bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n            this.base64AccumIdx = 0;\n        }\n\n        buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n        this.inBase64 = false;\n    }\n\n    return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n    // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '&'\n            if (buf[i] == andChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n                    res += \"&\";\n                } else {\n                    var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\").replace(/,/g, '/');\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus may be absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\").replace(/,/g, '/');\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n\n\n/***/ }),\n\n/***/ 5395:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n    this.encoder = encoder;\n    this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n    if (this.addBOM) {\n        str = BOMChar + str;\n        this.addBOM = false;\n    }\n\n    return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n    this.decoder = decoder;\n    this.pass = false;\n    this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n    var res = this.decoder.write(buf);\n    if (this.pass || !res)\n        return res;\n\n    if (res[0] === BOMChar) {\n        res = res.slice(1);\n        if (typeof this.options.stripBOM === 'function')\n            this.options.stripBOM();\n    }\n\n    this.pass = true;\n    return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n    return this.decoder.end();\n}\n\n\n\n/***/ }),\n\n/***/ 4914:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\nvar bomHandling = __webpack_require__(5395),\n    iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '�';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n    str = \"\" + (str || \"\"); // Ensure string.\n\n    var encoder = iconv.getEncoder(encoding, options);\n\n    var res = encoder.write(str);\n    var trail = encoder.end();\n    \n    return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n    if (typeof buf === 'string') {\n        if (!iconv.skipDecodeWarning) {\n            console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n            iconv.skipDecodeWarning = true;\n        }\n\n        buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n    }\n\n    var decoder = iconv.getDecoder(encoding, options);\n\n    var res = decoder.write(buf);\n    var trail = decoder.end();\n\n    return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n    try {\n        iconv.getCodec(enc);\n        return true;\n    } catch (e) {\n        return false;\n    }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n    if (!iconv.encodings)\n        iconv.encodings = __webpack_require__(6934); // Lazy load all encoding definitions.\n    \n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    var enc = iconv._canonicalizeEncoding(encoding);\n\n    // Traverse iconv.encodings to find actual codec.\n    var codecOptions = {};\n    while (true) {\n        var codec = iconv._codecDataCache[enc];\n        if (codec)\n            return codec;\n\n        var codecDef = iconv.encodings[enc];\n\n        switch (typeof codecDef) {\n            case \"string\": // Direct alias to other encoding.\n                enc = codecDef;\n                break;\n\n            case \"object\": // Alias with options. Can be layered.\n                for (var key in codecDef)\n                    codecOptions[key] = codecDef[key];\n\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n                \n                enc = codecDef.type;\n                break;\n\n            case \"function\": // Codec itself.\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n\n                // The codec function must load all tables and return object with .encoder and .decoder methods.\n                // It'll be called only once (for each different options object).\n                codec = new codecDef(codecOptions, iconv);\n\n                iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n                return codec;\n\n            default:\n                throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n        }\n    }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        encoder = new codec.encoder(options, codec);\n\n    if (codec.bomAware && options && options.addBOM)\n        encoder = new bomHandling.PrependBOM(encoder, options);\n\n    return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        decoder = new codec.decoder(options, codec);\n\n    if (codec.bomAware && !(options && options.stripBOM === false))\n        decoder = new bomHandling.StripBOM(decoder, options);\n\n    return decoder;\n}\n\n// Streaming API\n// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add\n// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default.\n// If you would like to enable it explicitly, please add the following code to your app:\n// > iconv.enableStreamingAPI(require('stream'));\niconv.enableStreamingAPI = function enableStreamingAPI(stream_module) {\n    if (iconv.supportsStreams)\n        return;\n\n    // Dependency-inject stream module to create IconvLite stream classes.\n    var streams = __webpack_require__(8044)(stream_module);\n\n    // Not public API yet, but expose the stream classes.\n    iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;\n    iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;\n\n    // Streaming API.\n    iconv.encodeStream = function encodeStream(encoding, options) {\n        return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n    }\n\n    iconv.decodeStream = function decodeStream(encoding, options) {\n        return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n    }\n\n    iconv.supportsStreams = true;\n}\n\n// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments).\nvar stream_module;\ntry {\n    stream_module = __webpack_require__(5832);\n} catch (e) {}\n\nif (stream_module && stream_module.Transform) {\n    iconv.enableStreamingAPI(stream_module);\n\n} else {\n    // In rare cases where 'stream' module is not available by default, throw a helpful exception.\n    iconv.encodeStream = iconv.decodeStream = function() {\n        throw new Error(\"iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.\");\n    };\n}\n\nif (false) {}\n\n\n/***/ }),\n\n/***/ 8044:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments), \n// we opt to dependency-inject it instead of creating a hard dependency.\nmodule.exports = function(stream_module) {\n    var Transform = stream_module.Transform;\n\n    // == Encoder stream =======================================================\n\n    function IconvLiteEncoderStream(conv, options) {\n        this.conv = conv;\n        options = options || {};\n        options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n        Transform.call(this, options);\n    }\n\n    IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n        constructor: { value: IconvLiteEncoderStream }\n    });\n\n    IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n        if (typeof chunk != 'string')\n            return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n        try {\n            var res = this.conv.write(chunk);\n            if (res && res.length) this.push(res);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteEncoderStream.prototype._flush = function(done) {\n        try {\n            var res = this.conv.end();\n            if (res && res.length) this.push(res);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteEncoderStream.prototype.collect = function(cb) {\n        var chunks = [];\n        this.on('error', cb);\n        this.on('data', function(chunk) { chunks.push(chunk); });\n        this.on('end', function() {\n            cb(null, Buffer.concat(chunks));\n        });\n        return this;\n    }\n\n\n    // == Decoder stream =======================================================\n\n    function IconvLiteDecoderStream(conv, options) {\n        this.conv = conv;\n        options = options || {};\n        options.encoding = this.encoding = 'utf8'; // We output strings.\n        Transform.call(this, options);\n    }\n\n    IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n        constructor: { value: IconvLiteDecoderStream }\n    });\n\n    IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n        if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array))\n            return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n        try {\n            var res = this.conv.write(chunk);\n            if (res && res.length) this.push(res, this.encoding);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteDecoderStream.prototype._flush = function(done) {\n        try {\n            var res = this.conv.end();\n            if (res && res.length) this.push(res, this.encoding);                \n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteDecoderStream.prototype.collect = function(cb) {\n        var res = '';\n        this.on('error', cb);\n        this.on('data', function(chunk) { res += chunk; });\n        this.on('end', function() {\n            cb(null, res);\n        });\n        return this;\n    }\n\n    return {\n        IconvLiteEncoderStream: IconvLiteEncoderStream,\n        IconvLiteDecoderStream: IconvLiteDecoderStream,\n    };\n};\n\n\n/***/ }),\n\n/***/ 645:\n/***/ (function(__unused_webpack_module, exports) {\n\n/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n\n/***/ }),\n\n/***/ 5717:\n/***/ (function(module) {\n\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n\n\n/***/ }),\n\n/***/ 2584:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar hasToStringTag = __webpack_require__(6410)();\nvar callBound = __webpack_require__(1924);\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n\n\n/***/ }),\n\n/***/ 5320:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n\n\n/***/ }),\n\n/***/ 8923:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n\n\n/***/ }),\n\n/***/ 8662:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = __webpack_require__(6410)();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n\n\n/***/ }),\n\n/***/ 8611:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n\treturn value !== value;\n};\n\n\n/***/ }),\n\n/***/ 360:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(8611);\nvar getPolyfill = __webpack_require__(9415);\nvar shim = __webpack_require__(6743);\n\nvar polyfill = callBind(getPolyfill(), Number);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n\n\n/***/ }),\n\n/***/ 9415:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar implementation = __webpack_require__(8611);\n\nmodule.exports = function getPolyfill() {\n\tif (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n\t\treturn Number.isNaN;\n\t}\n\treturn implementation;\n};\n\n\n/***/ }),\n\n/***/ 6743:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar define = __webpack_require__(4289);\nvar getPolyfill = __webpack_require__(9415);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function shimNumberIsNaN() {\n\tvar polyfill = getPolyfill();\n\tdefine(Number, { isNaN: polyfill }, {\n\t\tisNaN: function testIsNaN() {\n\t\t\treturn Number.isNaN !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n\n\n/***/ }),\n\n/***/ 8420:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n\n\n/***/ }),\n\n/***/ 5692:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar forEach = __webpack_require__(4029);\nvar availableTypedArrays = __webpack_require__(3083);\nvar callBound = __webpack_require__(1924);\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = __webpack_require__(6410)();\nvar gOPD = __webpack_require__(7296);\n\nvar g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n\n\n/***/ }),\n\n/***/ 4244:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n\n\n/***/ }),\n\n/***/ 609:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(4244);\nvar getPolyfill = __webpack_require__(5624);\nvar shim = __webpack_require__(2281);\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n\n\n/***/ }),\n\n/***/ 5624:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar implementation = __webpack_require__(4244);\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n\n\n/***/ }),\n\n/***/ 2281:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar getPolyfill = __webpack_require__(5624);\nvar define = __webpack_require__(4289);\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n\n\n/***/ }),\n\n/***/ 8987:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n\n\n/***/ }),\n\n/***/ 2215:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n\n\n/***/ }),\n\n/***/ 1414:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n\n\n/***/ }),\n\n/***/ 4236:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n\n\n/***/ }),\n\n/***/ 6069:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n\n\n/***/ }),\n\n/***/ 1619:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n\n\n/***/ }),\n\n/***/ 2869:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n\n\n/***/ }),\n\n/***/ 405:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils   = __webpack_require__(4236);\nvar trees   = __webpack_require__(342);\nvar adler32 = __webpack_require__(6069);\nvar crc32   = __webpack_require__(2869);\nvar msg     = __webpack_require__(8898);\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH      = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\nvar Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\n//var Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\n//var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\n//var Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED            = 1;\nvar Z_HUFFMAN_ONLY        = 2;\nvar Z_RLE                 = 3;\nvar Z_FIXED               = 4;\nvar Z_DEFAULT_STRATEGY    = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES       = 30;\n/* number of distance codes */\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE     = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n  var s = strm.state;\n\n  //_tr_flush_bits(s);\n  var len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n//  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;      /* max hash chain length */\n  var scan = s.strstart; /* current string */\n  var match;                       /* matched string */\n  var len;                           /* length of current match */\n  var best_len = s.prev_length;              /* best match length so far */\n  var nice_match = s.nice_match;             /* stop if match long enough */\n  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1  = _win[scan + best_len - 1];\n  var scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    var curr = s.strstart + s.lookahead;\n//    var init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n  var hash_head;        /* head of the hash chain */\n  var bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n  var hash_head;          /* head of hash chain */\n  var bflush;              /* set if current block must be flushed */\n\n  var max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n  var bflush;            /* set if current block must be flushed */\n  var prev;              /* byte at distance one to match */\n  var scan, strend;      /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n  var bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  trees._tr_init(s);\n  return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  var s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      var level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n\n\n/***/ }),\n\n/***/ 4264:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30;       /* got a data error -- remain here until reset */\nvar TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n  var _in;                    /* local strm.input */\n  var last;                   /* have enough input while in < last */\n  var _out;                   /* local strm.output */\n  var beg;                    /* inflate()'s initial strm.output */\n  var end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  var dmax;                   /* maximum distance from zlib header */\n//#endif\n  var wsize;                  /* window size or zero if not using window */\n  var whave;                  /* valid bytes in the window */\n  var wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  var s_window;               /* allocated sliding window, if wsize != 0 */\n  var hold;                   /* local strm.hold */\n  var bits;                   /* local strm.bits */\n  var lcode;                  /* local strm.lencode */\n  var dcode;                  /* local strm.distcode */\n  var lmask;                  /* mask for first level of length codes */\n  var dmask;                  /* mask for first level of distance codes */\n  var here;                   /* retrieved table entry */\n  var op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  var len;                    /* match length, unused bytes */\n  var dist;                   /* match distance */\n  var from;                   /* where to copy match from */\n  var from_source;\n\n\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n\n\n/***/ }),\n\n/***/ 7948:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils         = __webpack_require__(4236);\nvar adler32       = __webpack_require__(6069);\nvar crc32         = __webpack_require__(2869);\nvar inflate_fast  = __webpack_require__(4264);\nvar inflate_table = __webpack_require__(9241);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\nvar Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\nvar Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar    HEAD = 1;       /* i: waiting for magic header */\nvar    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nvar    TIME = 3;       /* i: waiting for modification time (gzip) */\nvar    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nvar    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nvar    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nvar    NAME = 7;       /* i: waiting for end of file name (gzip) */\nvar    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nvar    HCRC = 9;       /* i: waiting for header crc (gzip) */\nvar    DICTID = 10;    /* i: waiting for dictionary check value */\nvar    DICT = 11;      /* waiting for inflateSetDictionary() call */\nvar        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nvar        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nvar        STORED = 14;    /* i: waiting for stored size (length and complement) */\nvar        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nvar        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nvar        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nvar        LENLENS = 18;   /* i: waiting for code length code lengths */\nvar        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nvar            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nvar            LEN = 21;       /* i: waiting for length/lit/eob code */\nvar            LENEXT = 22;    /* i: waiting for length extra bits */\nvar            DIST = 23;      /* i: waiting for distance code */\nvar            DISTEXT = 24;   /* i: waiting for distance extra bits */\nvar            MATCH = 25;     /* o: waiting for output space to copy string */\nvar            LIT = 26;       /* o: waiting for output space to write literal */\nvar    CHECK = 27;     /* i: waiting for 32-bit check value */\nvar    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nvar    DONE = 29;      /* finished check, done -- remain here until reset */\nvar    BAD = 30;       /* got a data error -- remain here until reset */\nvar    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nvar    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n  this.work = new utils.Buf16(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new utils.Buf8(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output;          // input/output buffers\n  var next;                   /* next input INDEX */\n  var put;                    /* next output INDEX */\n  var have, left;             /* available input and output */\n  var hold;                   /* bit buffer */\n  var bits;                   /* bits in bit buffer */\n  var _in, _out;              /* save starting available input and output */\n  var copy;                   /* number of stored or match bytes to copy */\n  var from;                   /* where to copy match bytes from */\n  var from_source;\n  var here = 0;               /* current decoding table entry */\n  var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n  var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  var len;                    /* length to copy for repeats, bits to drop */\n  var ret;                    /* return code */\n  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */\n  var opts;\n\n  var n; // temporary var for NEED_BITS\n\n  var order = /* permutation of code lengths */\n    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n        state.dmax = 1 << len;\n        //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Array(state.head.extra_len);\n              }\n              utils.arraySet(\n                state.head.extra,\n                input,\n                next,\n                // extra field is limited to 65536 bytes\n                // - no need for additional size check\n                copy,\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          utils.arraySet(output, input, next, copy, put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       stored end\\n\"));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inflate_fast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  var state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var state;\n  var dictid;\n  var ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n\n\n/***/ }),\n\n/***/ 9241:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = __webpack_require__(4236);\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n  var bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  var len = 0;               /* a code's length in bits */\n  var sym = 0;               /* index of code symbols */\n  var min = 0, max = 0;          /* minimum and maximum code lengths */\n  var root = 0;              /* number of index bits for root table */\n  var curr = 0;              /* number of index bits for current table */\n  var drop = 0;              /* code bits to drop for sub-table */\n  var left = 0;                   /* number of prefix codes available */\n  var used = 0;              /* code entries in table used */\n  var huff = 0;              /* Huffman code */\n  var incr;              /* for incrementing code, index */\n  var fill;              /* index for replicating entries */\n  var low;               /* low bits for current root entry */\n  var mask;              /* mask for low root bits */\n  var next;             /* next available space in table */\n  var base = null;     /* base value table to use */\n  var base_index = 0;\n//  var shoextra;    /* extra bits table to use */\n  var end;                    /* use base and extra for symbol > end */\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  var extra = null;\n  var extra_index = 0;\n\n  var here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n\n\n/***/ }),\n\n/***/ 8898:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n\n/***/ }),\n\n/***/ 342:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = __webpack_require__(4236);\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\nvar Z_FIXED               = 4;\n//var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY              = 0;\nvar Z_TEXT                = 1;\n//var Z_ASCII             = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES    = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH    = 3;\nvar MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES       = 30;\n/* number of distance codes */\n\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK   = 256;\n/* end of block literal code */\n\nvar REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits =   /* extra bits for each length code */\n  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits =   /* extra bits for each distance code */\n  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits =  /* extra bits for each bit length code */\n  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n  var res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nfunction gen_bitlen(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree            = desc.dyn_tree;\n  var max_code        = desc.max_code;\n  var stree           = desc.stat_desc.static_tree;\n  var has_stree       = desc.stat_desc.has_stree;\n  var extra           = desc.stat_desc.extra_bits;\n  var base            = desc.stat_desc.extra_base;\n  var max_length      = desc.stat_desc.max_length;\n  var h;              /* heap index */\n  var n, m;           /* iterate over the tree elements */\n  var bits;           /* bit length */\n  var xbits;          /* extra bits */\n  var f;              /* frequency */\n  var overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  var code = 0;              /* running code value */\n  var bits;                  /* bit index */\n  var n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    var len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n  var n;        /* iterates over tree elements */\n  var bits;     /* bit counter */\n  var length;   /* length value */\n  var code;     /* code value */\n  var dist;     /* distance index */\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n  var n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n  var _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;           /* distance of matched string */\n  var lc;             /* match length or unmatched char (if dist == 0) */\n  var lx = 0;         /* running index in l_buf */\n  var code;           /* the code to send */\n  var extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree     = desc.dyn_tree;\n  var stree    = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems    = desc.stat_desc.elems;\n  var n, m;          /* iterate over heap elements */\n  var max_code = -1; /* largest code with non zero frequency */\n  var node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n  var max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  var max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init  = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block  = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n\n\n/***/ }),\n\n/***/ 2292:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n\n\n/***/ }),\n\n/***/ 4155:\n/***/ (function(module) {\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ }),\n\n/***/ 3697:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar functionsHaveConfigurableNames = (__webpack_require__(5972).functionsHaveConfigurableNames)();\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.hasIndices) {\n\t\tresult += 'd';\n\t}\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n\nif (functionsHaveConfigurableNames && Object.defineProperty) {\n\tObject.defineProperty(module.exports, \"name\", ({ value: 'get flags' }));\n}\n\n\n/***/ }),\n\n/***/ 2847:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(getPolyfill());\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n\n\n/***/ }),\n\n/***/ 1721:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = (__webpack_require__(4289).supportsDescriptors);\nvar $gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function getPolyfill() {\n\tif (supportsDescriptors && (/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (\n\t\t\tdescriptor\n\t\t\t&& typeof descriptor.get === 'function'\n\t\t\t&& typeof RegExp.prototype.dotAll === 'boolean'\n\t\t\t&& typeof RegExp.prototype.hasIndices === 'boolean'\n\t\t) {\n\t\t\t/* eslint getter-return: 0 */\n\t\t\tvar calls = '';\n\t\t\tvar o = {};\n\t\t\tObject.defineProperty(o, 'hasIndices', {\n\t\t\t\tget: function () {\n\t\t\t\t\tcalls += 'd';\n\t\t\t\t}\n\t\t\t});\n\t\t\tObject.defineProperty(o, 'sticky', {\n\t\t\t\tget: function () {\n\t\t\t\t\tcalls += 'y';\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (calls === 'dy') {\n\t\t\t\treturn descriptor.get;\n\t\t\t}\n\t\t}\n\t}\n\treturn implementation;\n};\n\n\n/***/ }),\n\n/***/ 2753:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar supportsDescriptors = (__webpack_require__(4289).supportsDescriptors);\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n\n\n/***/ }),\n\n/***/ 6099:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n;(function (sax) { // wrapper for non-node envs\n  sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }\n  sax.SAXParser = SAXParser\n  sax.SAXStream = SAXStream\n  sax.createStream = createStream\n\n  // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n  // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n  // since that's the earliest that a buffer overrun could occur.  This way, checks are\n  // as rare as required, but as often as necessary to ensure never crossing this bound.\n  // Furthermore, buffers are only tested at most once per write(), so passing a very\n  // large string into write() might have undesirable effects, but this is manageable by\n  // the caller, so it is assumed to be safe.  Thus, a call to write() may, in the extreme\n  // edge case, result in creating at most one complete copy of the string passed in.\n  // Set to Infinity to have unlimited buffers.\n  sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n  var buffers = [\n    'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',\n    'procInstName', 'procInstBody', 'entity', 'attribName',\n    'attribValue', 'cdata', 'script'\n  ]\n\n  sax.EVENTS = [\n    'text',\n    'processinginstruction',\n    'sgmldeclaration',\n    'doctype',\n    'comment',\n    'opentagstart',\n    'attribute',\n    'opentag',\n    'closetag',\n    'opencdata',\n    'cdata',\n    'closecdata',\n    'error',\n    'end',\n    'ready',\n    'script',\n    'opennamespace',\n    'closenamespace'\n  ]\n\n  function SAXParser (strict, opt) {\n    if (!(this instanceof SAXParser)) {\n      return new SAXParser(strict, opt)\n    }\n\n    var parser = this\n    clearBuffers(parser)\n    parser.q = parser.c = ''\n    parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n    parser.opt = opt || {}\n    parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n    parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n    parser.tags = []\n    parser.closed = parser.closedRoot = parser.sawRoot = false\n    parser.tag = parser.error = null\n    parser.strict = !!strict\n    parser.noscript = !!(strict || parser.opt.noscript)\n    parser.state = S.BEGIN\n    parser.strictEntities = parser.opt.strictEntities\n    parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)\n    parser.attribList = []\n\n    // namespaces form a prototype chain.\n    // it always points at the current tag,\n    // which protos to its parent tag.\n    if (parser.opt.xmlns) {\n      parser.ns = Object.create(rootNS)\n    }\n\n    // mostly just for error reporting\n    parser.trackPosition = parser.opt.position !== false\n    if (parser.trackPosition) {\n      parser.position = parser.line = parser.column = 0\n    }\n    emit(parser, 'onready')\n  }\n\n  if (!Object.create) {\n    Object.create = function (o) {\n      function F () {}\n      F.prototype = o\n      var newf = new F()\n      return newf\n    }\n  }\n\n  if (!Object.keys) {\n    Object.keys = function (o) {\n      var a = []\n      for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n      return a\n    }\n  }\n\n  function checkBufferLength (parser) {\n    var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n    var maxActual = 0\n    for (var i = 0, l = buffers.length; i < l; i++) {\n      var len = parser[buffers[i]].length\n      if (len > maxAllowed) {\n        // Text/cdata nodes can get big, and since they're buffered,\n        // we can get here under normal conditions.\n        // Avoid issues by emitting the text node now,\n        // so at least it won't get any bigger.\n        switch (buffers[i]) {\n          case 'textNode':\n            closeText(parser)\n            break\n\n          case 'cdata':\n            emitNode(parser, 'oncdata', parser.cdata)\n            parser.cdata = ''\n            break\n\n          case 'script':\n            emitNode(parser, 'onscript', parser.script)\n            parser.script = ''\n            break\n\n          default:\n            error(parser, 'Max buffer length exceeded: ' + buffers[i])\n        }\n      }\n      maxActual = Math.max(maxActual, len)\n    }\n    // schedule the next check for the earliest possible buffer overrun.\n    var m = sax.MAX_BUFFER_LENGTH - maxActual\n    parser.bufferCheckPosition = m + parser.position\n  }\n\n  function clearBuffers (parser) {\n    for (var i = 0, l = buffers.length; i < l; i++) {\n      parser[buffers[i]] = ''\n    }\n  }\n\n  function flushBuffers (parser) {\n    closeText(parser)\n    if (parser.cdata !== '') {\n      emitNode(parser, 'oncdata', parser.cdata)\n      parser.cdata = ''\n    }\n    if (parser.script !== '') {\n      emitNode(parser, 'onscript', parser.script)\n      parser.script = ''\n    }\n  }\n\n  SAXParser.prototype = {\n    end: function () { end(this) },\n    write: write,\n    resume: function () { this.error = null; return this },\n    close: function () { return this.write(null) },\n    flush: function () { flushBuffers(this) }\n  }\n\n  var Stream\n  try {\n    Stream = (__webpack_require__(2830).Stream)\n  } catch (ex) {\n    Stream = function () {}\n  }\n\n  var streamWraps = sax.EVENTS.filter(function (ev) {\n    return ev !== 'error' && ev !== 'end'\n  })\n\n  function createStream (strict, opt) {\n    return new SAXStream(strict, opt)\n  }\n\n  function SAXStream (strict, opt) {\n    if (!(this instanceof SAXStream)) {\n      return new SAXStream(strict, opt)\n    }\n\n    Stream.apply(this)\n\n    this._parser = new SAXParser(strict, opt)\n    this.writable = true\n    this.readable = true\n\n    var me = this\n\n    this._parser.onend = function () {\n      me.emit('end')\n    }\n\n    this._parser.onerror = function (er) {\n      me.emit('error', er)\n\n      // if didn't throw, then means error was handled.\n      // go ahead and clear error, so we can write again.\n      me._parser.error = null\n    }\n\n    this._decoder = null\n\n    streamWraps.forEach(function (ev) {\n      Object.defineProperty(me, 'on' + ev, {\n        get: function () {\n          return me._parser['on' + ev]\n        },\n        set: function (h) {\n          if (!h) {\n            me.removeAllListeners(ev)\n            me._parser['on' + ev] = h\n            return h\n          }\n          me.on(ev, h)\n        },\n        enumerable: true,\n        configurable: false\n      })\n    })\n  }\n\n  SAXStream.prototype = Object.create(Stream.prototype, {\n    constructor: {\n      value: SAXStream\n    }\n  })\n\n  SAXStream.prototype.write = function (data) {\n    if (typeof Buffer === 'function' &&\n      typeof Buffer.isBuffer === 'function' &&\n      Buffer.isBuffer(data)) {\n      if (!this._decoder) {\n        var SD = (__webpack_require__(2553)/* .StringDecoder */ .s)\n        this._decoder = new SD('utf8')\n      }\n      data = this._decoder.write(data)\n    }\n\n    this._parser.write(data.toString())\n    this.emit('data', data)\n    return true\n  }\n\n  SAXStream.prototype.end = function (chunk) {\n    if (chunk && chunk.length) {\n      this.write(chunk)\n    }\n    this._parser.end()\n    return true\n  }\n\n  SAXStream.prototype.on = function (ev, handler) {\n    var me = this\n    if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n      me._parser['on' + ev] = function () {\n        var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)\n        args.splice(0, 0, ev)\n        me.emit.apply(me, args)\n      }\n    }\n\n    return Stream.prototype.on.call(me, ev, handler)\n  }\n\n  // this really needs to be replaced with character classes.\n  // XML allows all manner of ridiculous numbers and digits.\n  var CDATA = '[CDATA['\n  var DOCTYPE = 'DOCTYPE'\n  var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n  var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n  var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n  // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n  // This implementation works on strings, a single character at a time\n  // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n  // without a significant breaking change to either this  parser, or the\n  // JavaScript language.  Implementation of an emoji-capable xml parser\n  // is left as an exercise for the reader.\n  var nameStart = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n  var nameBody = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n  var entityStart = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n  var entityBody = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n  function isWhitespace (c) {\n    return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n  }\n\n  function isQuote (c) {\n    return c === '\"' || c === '\\''\n  }\n\n  function isAttribEnd (c) {\n    return c === '>' || isWhitespace(c)\n  }\n\n  function isMatch (regex, c) {\n    return regex.test(c)\n  }\n\n  function notMatch (regex, c) {\n    return !isMatch(regex, c)\n  }\n\n  var S = 0\n  sax.STATE = {\n    BEGIN: S++, // leading byte order mark or whitespace\n    BEGIN_WHITESPACE: S++, // leading whitespace\n    TEXT: S++, // general stuff\n    TEXT_ENTITY: S++, // &amp and such.\n    OPEN_WAKA: S++, // <\n    SGML_DECL: S++, // <!BLARG\n    SGML_DECL_QUOTED: S++, // <!BLARG foo \"bar\n    DOCTYPE: S++, // <!DOCTYPE\n    DOCTYPE_QUOTED: S++, // <!DOCTYPE \"//blah\n    DOCTYPE_DTD: S++, // <!DOCTYPE \"//blah\" [ ...\n    DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \"//blah\" [ \"foo\n    COMMENT_STARTING: S++, // <!-\n    COMMENT: S++, // <!--\n    COMMENT_ENDING: S++, // <!-- blah -\n    COMMENT_ENDED: S++, // <!-- blah --\n    CDATA: S++, // <![CDATA[ something\n    CDATA_ENDING: S++, // ]\n    CDATA_ENDING_2: S++, // ]]\n    PROC_INST: S++, // <?hi\n    PROC_INST_BODY: S++, // <?hi there\n    PROC_INST_ENDING: S++, // <?hi \"there\" ?\n    OPEN_TAG: S++, // <strong\n    OPEN_TAG_SLASH: S++, // <strong /\n    ATTRIB: S++, // <a\n    ATTRIB_NAME: S++, // <a foo\n    ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\n    ATTRIB_VALUE: S++, // <a foo=\n    ATTRIB_VALUE_QUOTED: S++, // <a foo=\"bar\n    ATTRIB_VALUE_CLOSED: S++, // <a foo=\"bar\"\n    ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\n    ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\"&quot;\"\n    ATTRIB_VALUE_ENTITY_U: S++, // <foo bar=&quot\n    CLOSE_TAG: S++, // </a\n    CLOSE_TAG_SAW_WHITE: S++, // </a   >\n    SCRIPT: S++, // <script> ...\n    SCRIPT_ENDING: S++ // <script> ... <\n  }\n\n  sax.XML_ENTITIES = {\n    'amp': '&',\n    'gt': '>',\n    'lt': '<',\n    'quot': '\"',\n    'apos': \"'\"\n  }\n\n  sax.ENTITIES = {\n    'amp': '&',\n    'gt': '>',\n    'lt': '<',\n    'quot': '\"',\n    'apos': \"'\",\n    'AElig': 198,\n    'Aacute': 193,\n    'Acirc': 194,\n    'Agrave': 192,\n    'Aring': 197,\n    'Atilde': 195,\n    'Auml': 196,\n    'Ccedil': 199,\n    'ETH': 208,\n    'Eacute': 201,\n    'Ecirc': 202,\n    'Egrave': 200,\n    'Euml': 203,\n    'Iacute': 205,\n    'Icirc': 206,\n    'Igrave': 204,\n    'Iuml': 207,\n    'Ntilde': 209,\n    'Oacute': 211,\n    'Ocirc': 212,\n    'Ograve': 210,\n    'Oslash': 216,\n    'Otilde': 213,\n    'Ouml': 214,\n    'THORN': 222,\n    'Uacute': 218,\n    'Ucirc': 219,\n    'Ugrave': 217,\n    'Uuml': 220,\n    'Yacute': 221,\n    'aacute': 225,\n    'acirc': 226,\n    'aelig': 230,\n    'agrave': 224,\n    'aring': 229,\n    'atilde': 227,\n    'auml': 228,\n    'ccedil': 231,\n    'eacute': 233,\n    'ecirc': 234,\n    'egrave': 232,\n    'eth': 240,\n    'euml': 235,\n    'iacute': 237,\n    'icirc': 238,\n    'igrave': 236,\n    'iuml': 239,\n    'ntilde': 241,\n    'oacute': 243,\n    'ocirc': 244,\n    'ograve': 242,\n    'oslash': 248,\n    'otilde': 245,\n    'ouml': 246,\n    'szlig': 223,\n    'thorn': 254,\n    'uacute': 250,\n    'ucirc': 251,\n    'ugrave': 249,\n    'uuml': 252,\n    'yacute': 253,\n    'yuml': 255,\n    'copy': 169,\n    'reg': 174,\n    'nbsp': 160,\n    'iexcl': 161,\n    'cent': 162,\n    'pound': 163,\n    'curren': 164,\n    'yen': 165,\n    'brvbar': 166,\n    'sect': 167,\n    'uml': 168,\n    'ordf': 170,\n    'laquo': 171,\n    'not': 172,\n    'shy': 173,\n    'macr': 175,\n    'deg': 176,\n    'plusmn': 177,\n    'sup1': 185,\n    'sup2': 178,\n    'sup3': 179,\n    'acute': 180,\n    'micro': 181,\n    'para': 182,\n    'middot': 183,\n    'cedil': 184,\n    'ordm': 186,\n    'raquo': 187,\n    'frac14': 188,\n    'frac12': 189,\n    'frac34': 190,\n    'iquest': 191,\n    'times': 215,\n    'divide': 247,\n    'OElig': 338,\n    'oelig': 339,\n    'Scaron': 352,\n    'scaron': 353,\n    'Yuml': 376,\n    'fnof': 402,\n    'circ': 710,\n    'tilde': 732,\n    'Alpha': 913,\n    'Beta': 914,\n    'Gamma': 915,\n    'Delta': 916,\n    'Epsilon': 917,\n    'Zeta': 918,\n    'Eta': 919,\n    'Theta': 920,\n    'Iota': 921,\n    'Kappa': 922,\n    'Lambda': 923,\n    'Mu': 924,\n    'Nu': 925,\n    'Xi': 926,\n    'Omicron': 927,\n    'Pi': 928,\n    'Rho': 929,\n    'Sigma': 931,\n    'Tau': 932,\n    'Upsilon': 933,\n    'Phi': 934,\n    'Chi': 935,\n    'Psi': 936,\n    'Omega': 937,\n    'alpha': 945,\n    'beta': 946,\n    'gamma': 947,\n    'delta': 948,\n    'epsilon': 949,\n    'zeta': 950,\n    'eta': 951,\n    'theta': 952,\n    'iota': 953,\n    'kappa': 954,\n    'lambda': 955,\n    'mu': 956,\n    'nu': 957,\n    'xi': 958,\n    'omicron': 959,\n    'pi': 960,\n    'rho': 961,\n    'sigmaf': 962,\n    'sigma': 963,\n    'tau': 964,\n    'upsilon': 965,\n    'phi': 966,\n    'chi': 967,\n    'psi': 968,\n    'omega': 969,\n    'thetasym': 977,\n    'upsih': 978,\n    'piv': 982,\n    'ensp': 8194,\n    'emsp': 8195,\n    'thinsp': 8201,\n    'zwnj': 8204,\n    'zwj': 8205,\n    'lrm': 8206,\n    'rlm': 8207,\n    'ndash': 8211,\n    'mdash': 8212,\n    'lsquo': 8216,\n    'rsquo': 8217,\n    'sbquo': 8218,\n    'ldquo': 8220,\n    'rdquo': 8221,\n    'bdquo': 8222,\n    'dagger': 8224,\n    'Dagger': 8225,\n    'bull': 8226,\n    'hellip': 8230,\n    'permil': 8240,\n    'prime': 8242,\n    'Prime': 8243,\n    'lsaquo': 8249,\n    'rsaquo': 8250,\n    'oline': 8254,\n    'frasl': 8260,\n    'euro': 8364,\n    'image': 8465,\n    'weierp': 8472,\n    'real': 8476,\n    'trade': 8482,\n    'alefsym': 8501,\n    'larr': 8592,\n    'uarr': 8593,\n    'rarr': 8594,\n    'darr': 8595,\n    'harr': 8596,\n    'crarr': 8629,\n    'lArr': 8656,\n    'uArr': 8657,\n    'rArr': 8658,\n    'dArr': 8659,\n    'hArr': 8660,\n    'forall': 8704,\n    'part': 8706,\n    'exist': 8707,\n    'empty': 8709,\n    'nabla': 8711,\n    'isin': 8712,\n    'notin': 8713,\n    'ni': 8715,\n    'prod': 8719,\n    'sum': 8721,\n    'minus': 8722,\n    'lowast': 8727,\n    'radic': 8730,\n    'prop': 8733,\n    'infin': 8734,\n    'ang': 8736,\n    'and': 8743,\n    'or': 8744,\n    'cap': 8745,\n    'cup': 8746,\n    'int': 8747,\n    'there4': 8756,\n    'sim': 8764,\n    'cong': 8773,\n    'asymp': 8776,\n    'ne': 8800,\n    'equiv': 8801,\n    'le': 8804,\n    'ge': 8805,\n    'sub': 8834,\n    'sup': 8835,\n    'nsub': 8836,\n    'sube': 8838,\n    'supe': 8839,\n    'oplus': 8853,\n    'otimes': 8855,\n    'perp': 8869,\n    'sdot': 8901,\n    'lceil': 8968,\n    'rceil': 8969,\n    'lfloor': 8970,\n    'rfloor': 8971,\n    'lang': 9001,\n    'rang': 9002,\n    'loz': 9674,\n    'spades': 9824,\n    'clubs': 9827,\n    'hearts': 9829,\n    'diams': 9830\n  }\n\n  Object.keys(sax.ENTITIES).forEach(function (key) {\n    var e = sax.ENTITIES[key]\n    var s = typeof e === 'number' ? String.fromCharCode(e) : e\n    sax.ENTITIES[key] = s\n  })\n\n  for (var s in sax.STATE) {\n    sax.STATE[sax.STATE[s]] = s\n  }\n\n  // shorthand\n  S = sax.STATE\n\n  function emit (parser, event, data) {\n    parser[event] && parser[event](data)\n  }\n\n  function emitNode (parser, nodeType, data) {\n    if (parser.textNode) closeText(parser)\n    emit(parser, nodeType, data)\n  }\n\n  function closeText (parser) {\n    parser.textNode = textopts(parser.opt, parser.textNode)\n    if (parser.textNode) emit(parser, 'ontext', parser.textNode)\n    parser.textNode = ''\n  }\n\n  function textopts (opt, text) {\n    if (opt.trim) text = text.trim()\n    if (opt.normalize) text = text.replace(/\\s+/g, ' ')\n    return text\n  }\n\n  function error (parser, er) {\n    closeText(parser)\n    if (parser.trackPosition) {\n      er += '\\nLine: ' + parser.line +\n        '\\nColumn: ' + parser.column +\n        '\\nChar: ' + parser.c\n    }\n    er = new Error(er)\n    parser.error = er\n    emit(parser, 'onerror', er)\n    return parser\n  }\n\n  function end (parser) {\n    if (parser.sawRoot && !parser.closedRoot) strictFail(parser, 'Unclosed root tag')\n    if ((parser.state !== S.BEGIN) &&\n      (parser.state !== S.BEGIN_WHITESPACE) &&\n      (parser.state !== S.TEXT)) {\n      error(parser, 'Unexpected end')\n    }\n    closeText(parser)\n    parser.c = ''\n    parser.closed = true\n    emit(parser, 'onend')\n    SAXParser.call(parser, parser.strict, parser.opt)\n    return parser\n  }\n\n  function strictFail (parser, message) {\n    if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {\n      throw new Error('bad call to strictFail')\n    }\n    if (parser.strict) {\n      error(parser, message)\n    }\n  }\n\n  function newTag (parser) {\n    if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()\n    var parent = parser.tags[parser.tags.length - 1] || parser\n    var tag = parser.tag = { name: parser.tagName, attributes: {} }\n\n    // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n    if (parser.opt.xmlns) {\n      tag.ns = parent.ns\n    }\n    parser.attribList.length = 0\n    emitNode(parser, 'onopentagstart', tag)\n  }\n\n  function qname (name, attribute) {\n    var i = name.indexOf(':')\n    var qualName = i < 0 ? [ '', name ] : name.split(':')\n    var prefix = qualName[0]\n    var local = qualName[1]\n\n    // <x \"xmlns\"=\"http://foo\">\n    if (attribute && name === 'xmlns') {\n      prefix = 'xmlns'\n      local = ''\n    }\n\n    return { prefix: prefix, local: local }\n  }\n\n  function attrib (parser) {\n    if (!parser.strict) {\n      parser.attribName = parser.attribName[parser.looseCase]()\n    }\n\n    if (parser.attribList.indexOf(parser.attribName) !== -1 ||\n      parser.tag.attributes.hasOwnProperty(parser.attribName)) {\n      parser.attribName = parser.attribValue = ''\n      return\n    }\n\n    if (parser.opt.xmlns) {\n      var qn = qname(parser.attribName, true)\n      var prefix = qn.prefix\n      var local = qn.local\n\n      if (prefix === 'xmlns') {\n        // namespace binding attribute. push the binding into scope\n        if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {\n          strictFail(parser,\n            'xml: prefix must be bound to ' + XML_NAMESPACE + '\\n' +\n            'Actual: ' + parser.attribValue)\n        } else if (local === 'xmlns' && parser.attribValue !== XMLNS_NAMESPACE) {\n          strictFail(parser,\n            'xmlns: prefix must be bound to ' + XMLNS_NAMESPACE + '\\n' +\n            'Actual: ' + parser.attribValue)\n        } else {\n          var tag = parser.tag\n          var parent = parser.tags[parser.tags.length - 1] || parser\n          if (tag.ns === parent.ns) {\n            tag.ns = Object.create(parent.ns)\n          }\n          tag.ns[local] = parser.attribValue\n        }\n      }\n\n      // defer onattribute events until all attributes have been seen\n      // so any new bindings can take effect. preserve attribute order\n      // so deferred events can be emitted in document order\n      parser.attribList.push([parser.attribName, parser.attribValue])\n    } else {\n      // in non-xmlns mode, we can emit the event right away\n      parser.tag.attributes[parser.attribName] = parser.attribValue\n      emitNode(parser, 'onattribute', {\n        name: parser.attribName,\n        value: parser.attribValue\n      })\n    }\n\n    parser.attribName = parser.attribValue = ''\n  }\n\n  function openTag (parser, selfClosing) {\n    if (parser.opt.xmlns) {\n      // emit namespace binding events\n      var tag = parser.tag\n\n      // add namespace info to tag\n      var qn = qname(parser.tagName)\n      tag.prefix = qn.prefix\n      tag.local = qn.local\n      tag.uri = tag.ns[qn.prefix] || ''\n\n      if (tag.prefix && !tag.uri) {\n        strictFail(parser, 'Unbound namespace prefix: ' +\n          JSON.stringify(parser.tagName))\n        tag.uri = qn.prefix\n      }\n\n      var parent = parser.tags[parser.tags.length - 1] || parser\n      if (tag.ns && parent.ns !== tag.ns) {\n        Object.keys(tag.ns).forEach(function (p) {\n          emitNode(parser, 'onopennamespace', {\n            prefix: p,\n            uri: tag.ns[p]\n          })\n        })\n      }\n\n      // handle deferred onattribute events\n      // Note: do not apply default ns to attributes:\n      //   http://www.w3.org/TR/REC-xml-names/#defaulting\n      for (var i = 0, l = parser.attribList.length; i < l; i++) {\n        var nv = parser.attribList[i]\n        var name = nv[0]\n        var value = nv[1]\n        var qualName = qname(name, true)\n        var prefix = qualName.prefix\n        var local = qualName.local\n        var uri = prefix === '' ? '' : (tag.ns[prefix] || '')\n        var a = {\n          name: name,\n          value: value,\n          prefix: prefix,\n          local: local,\n          uri: uri\n        }\n\n        // if there's any attributes with an undefined namespace,\n        // then fail on them now.\n        if (prefix && prefix !== 'xmlns' && !uri) {\n          strictFail(parser, 'Unbound namespace prefix: ' +\n            JSON.stringify(prefix))\n          a.uri = prefix\n        }\n        parser.tag.attributes[name] = a\n        emitNode(parser, 'onattribute', a)\n      }\n      parser.attribList.length = 0\n    }\n\n    parser.tag.isSelfClosing = !!selfClosing\n\n    // process the tag\n    parser.sawRoot = true\n    parser.tags.push(parser.tag)\n    emitNode(parser, 'onopentag', parser.tag)\n    if (!selfClosing) {\n      // special case for <script> in non-strict mode.\n      if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {\n        parser.state = S.SCRIPT\n      } else {\n        parser.state = S.TEXT\n      }\n      parser.tag = null\n      parser.tagName = ''\n    }\n    parser.attribName = parser.attribValue = ''\n    parser.attribList.length = 0\n  }\n\n  function closeTag (parser) {\n    if (!parser.tagName) {\n      strictFail(parser, 'Weird empty close tag.')\n      parser.textNode += '</>'\n      parser.state = S.TEXT\n      return\n    }\n\n    if (parser.script) {\n      if (parser.tagName !== 'script') {\n        parser.script += '</' + parser.tagName + '>'\n        parser.tagName = ''\n        parser.state = S.SCRIPT\n        return\n      }\n      emitNode(parser, 'onscript', parser.script)\n      parser.script = ''\n    }\n\n    // first make sure that the closing tag actually exists.\n    // <a><b></c></b></a> will close everything, otherwise.\n    var t = parser.tags.length\n    var tagName = parser.tagName\n    if (!parser.strict) {\n      tagName = tagName[parser.looseCase]()\n    }\n    var closeTo = tagName\n    while (t--) {\n      var close = parser.tags[t]\n      if (close.name !== closeTo) {\n        // fail the first time in strict mode\n        strictFail(parser, 'Unexpected close tag')\n      } else {\n        break\n      }\n    }\n\n    // didn't find it.  we already failed for strict, so just abort.\n    if (t < 0) {\n      strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)\n      parser.textNode += '</' + parser.tagName + '>'\n      parser.state = S.TEXT\n      return\n    }\n    parser.tagName = tagName\n    var s = parser.tags.length\n    while (s-- > t) {\n      var tag = parser.tag = parser.tags.pop()\n      parser.tagName = parser.tag.name\n      emitNode(parser, 'onclosetag', parser.tagName)\n\n      var x = {}\n      for (var i in tag.ns) {\n        x[i] = tag.ns[i]\n      }\n\n      var parent = parser.tags[parser.tags.length - 1] || parser\n      if (parser.opt.xmlns && tag.ns !== parent.ns) {\n        // remove namespace bindings introduced by tag\n        Object.keys(tag.ns).forEach(function (p) {\n          var n = tag.ns[p]\n          emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })\n        })\n      }\n    }\n    if (t === 0) parser.closedRoot = true\n    parser.tagName = parser.attribValue = parser.attribName = ''\n    parser.attribList.length = 0\n    parser.state = S.TEXT\n  }\n\n  function parseEntity (parser) {\n    var entity = parser.entity\n    var entityLC = entity.toLowerCase()\n    var num\n    var numStr = ''\n\n    if (parser.ENTITIES[entity]) {\n      return parser.ENTITIES[entity]\n    }\n    if (parser.ENTITIES[entityLC]) {\n      return parser.ENTITIES[entityLC]\n    }\n    entity = entityLC\n    if (entity.charAt(0) === '#') {\n      if (entity.charAt(1) === 'x') {\n        entity = entity.slice(2)\n        num = parseInt(entity, 16)\n        numStr = num.toString(16)\n      } else {\n        entity = entity.slice(1)\n        num = parseInt(entity, 10)\n        numStr = num.toString(10)\n      }\n    }\n    entity = entity.replace(/^0+/, '')\n    if (isNaN(num) || numStr.toLowerCase() !== entity) {\n      strictFail(parser, 'Invalid character entity')\n      return '&' + parser.entity + ';'\n    }\n\n    return String.fromCodePoint(num)\n  }\n\n  function beginWhiteSpace (parser, c) {\n    if (c === '<') {\n      parser.state = S.OPEN_WAKA\n      parser.startTagPosition = parser.position\n    } else if (!isWhitespace(c)) {\n      // have to process this as a text node.\n      // weird, but happens.\n      strictFail(parser, 'Non-whitespace before first tag.')\n      parser.textNode = c\n      parser.state = S.TEXT\n    }\n  }\n\n  function charAt (chunk, i) {\n    var result = ''\n    if (i < chunk.length) {\n      result = chunk.charAt(i)\n    }\n    return result\n  }\n\n  function write (chunk) {\n    var parser = this\n    if (this.error) {\n      throw this.error\n    }\n    if (parser.closed) {\n      return error(parser,\n        'Cannot write after close. Assign an onready handler.')\n    }\n    if (chunk === null) {\n      return end(parser)\n    }\n    if (typeof chunk === 'object') {\n      chunk = chunk.toString()\n    }\n    var i = 0\n    var c = ''\n    while (true) {\n      c = charAt(chunk, i++)\n      parser.c = c\n\n      if (!c) {\n        break\n      }\n\n      if (parser.trackPosition) {\n        parser.position++\n        if (c === '\\n') {\n          parser.line++\n          parser.column = 0\n        } else {\n          parser.column++\n        }\n      }\n\n      switch (parser.state) {\n        case S.BEGIN:\n          parser.state = S.BEGIN_WHITESPACE\n          if (c === '\\uFEFF') {\n            continue\n          }\n          beginWhiteSpace(parser, c)\n          continue\n\n        case S.BEGIN_WHITESPACE:\n          beginWhiteSpace(parser, c)\n          continue\n\n        case S.TEXT:\n          if (parser.sawRoot && !parser.closedRoot) {\n            var starti = i - 1\n            while (c && c !== '<' && c !== '&') {\n              c = charAt(chunk, i++)\n              if (c && parser.trackPosition) {\n                parser.position++\n                if (c === '\\n') {\n                  parser.line++\n                  parser.column = 0\n                } else {\n                  parser.column++\n                }\n              }\n            }\n            parser.textNode += chunk.substring(starti, i - 1)\n          }\n          if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {\n            parser.state = S.OPEN_WAKA\n            parser.startTagPosition = parser.position\n          } else {\n            if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {\n              strictFail(parser, 'Text data outside of root node.')\n            }\n            if (c === '&') {\n              parser.state = S.TEXT_ENTITY\n            } else {\n              parser.textNode += c\n            }\n          }\n          continue\n\n        case S.SCRIPT:\n          // only non-strict\n          if (c === '<') {\n            parser.state = S.SCRIPT_ENDING\n          } else {\n            parser.script += c\n          }\n          continue\n\n        case S.SCRIPT_ENDING:\n          if (c === '/') {\n            parser.state = S.CLOSE_TAG\n          } else {\n            parser.script += '<' + c\n            parser.state = S.SCRIPT\n          }\n          continue\n\n        case S.OPEN_WAKA:\n          // either a /, ?, !, or text is coming next.\n          if (c === '!') {\n            parser.state = S.SGML_DECL\n            parser.sgmlDecl = ''\n          } else if (isWhitespace(c)) {\n            // wait for it...\n          } else if (isMatch(nameStart, c)) {\n            parser.state = S.OPEN_TAG\n            parser.tagName = c\n          } else if (c === '/') {\n            parser.state = S.CLOSE_TAG\n            parser.tagName = ''\n          } else if (c === '?') {\n            parser.state = S.PROC_INST\n            parser.procInstName = parser.procInstBody = ''\n          } else {\n            strictFail(parser, 'Unencoded <')\n            // if there was some whitespace, then add that in.\n            if (parser.startTagPosition + 1 < parser.position) {\n              var pad = parser.position - parser.startTagPosition\n              c = new Array(pad).join(' ') + c\n            }\n            parser.textNode += '<' + c\n            parser.state = S.TEXT\n          }\n          continue\n\n        case S.SGML_DECL:\n          if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n            emitNode(parser, 'onopencdata')\n            parser.state = S.CDATA\n            parser.sgmlDecl = ''\n            parser.cdata = ''\n          } else if (parser.sgmlDecl + c === '--') {\n            parser.state = S.COMMENT\n            parser.comment = ''\n            parser.sgmlDecl = ''\n          } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n            parser.state = S.DOCTYPE\n            if (parser.doctype || parser.sawRoot) {\n              strictFail(parser,\n                'Inappropriately located doctype declaration')\n            }\n            parser.doctype = ''\n            parser.sgmlDecl = ''\n          } else if (c === '>') {\n            emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)\n            parser.sgmlDecl = ''\n            parser.state = S.TEXT\n          } else if (isQuote(c)) {\n            parser.state = S.SGML_DECL_QUOTED\n            parser.sgmlDecl += c\n          } else {\n            parser.sgmlDecl += c\n          }\n          continue\n\n        case S.SGML_DECL_QUOTED:\n          if (c === parser.q) {\n            parser.state = S.SGML_DECL\n            parser.q = ''\n          }\n          parser.sgmlDecl += c\n          continue\n\n        case S.DOCTYPE:\n          if (c === '>') {\n            parser.state = S.TEXT\n            emitNode(parser, 'ondoctype', parser.doctype)\n            parser.doctype = true // just remember that we saw it.\n          } else {\n            parser.doctype += c\n            if (c === '[') {\n              parser.state = S.DOCTYPE_DTD\n            } else if (isQuote(c)) {\n              parser.state = S.DOCTYPE_QUOTED\n              parser.q = c\n            }\n          }\n          continue\n\n        case S.DOCTYPE_QUOTED:\n          parser.doctype += c\n          if (c === parser.q) {\n            parser.q = ''\n            parser.state = S.DOCTYPE\n          }\n          continue\n\n        case S.DOCTYPE_DTD:\n          parser.doctype += c\n          if (c === ']') {\n            parser.state = S.DOCTYPE\n          } else if (isQuote(c)) {\n            parser.state = S.DOCTYPE_DTD_QUOTED\n            parser.q = c\n          }\n          continue\n\n        case S.DOCTYPE_DTD_QUOTED:\n          parser.doctype += c\n          if (c === parser.q) {\n            parser.state = S.DOCTYPE_DTD\n            parser.q = ''\n          }\n          continue\n\n        case S.COMMENT:\n          if (c === '-') {\n            parser.state = S.COMMENT_ENDING\n          } else {\n            parser.comment += c\n          }\n          continue\n\n        case S.COMMENT_ENDING:\n          if (c === '-') {\n            parser.state = S.COMMENT_ENDED\n            parser.comment = textopts(parser.opt, parser.comment)\n            if (parser.comment) {\n              emitNode(parser, 'oncomment', parser.comment)\n            }\n            parser.comment = ''\n          } else {\n            parser.comment += '-' + c\n            parser.state = S.COMMENT\n          }\n          continue\n\n        case S.COMMENT_ENDED:\n          if (c !== '>') {\n            strictFail(parser, 'Malformed comment')\n            // allow <!-- blah -- bloo --> in non-strict mode,\n            // which is a comment of \" blah -- bloo \"\n            parser.comment += '--' + c\n            parser.state = S.COMMENT\n          } else {\n            parser.state = S.TEXT\n          }\n          continue\n\n        case S.CDATA:\n          if (c === ']') {\n            parser.state = S.CDATA_ENDING\n          } else {\n            parser.cdata += c\n          }\n          continue\n\n        case S.CDATA_ENDING:\n          if (c === ']') {\n            parser.state = S.CDATA_ENDING_2\n          } else {\n            parser.cdata += ']' + c\n            parser.state = S.CDATA\n          }\n          continue\n\n        case S.CDATA_ENDING_2:\n          if (c === '>') {\n            if (parser.cdata) {\n              emitNode(parser, 'oncdata', parser.cdata)\n            }\n            emitNode(parser, 'onclosecdata')\n            parser.cdata = ''\n            parser.state = S.TEXT\n          } else if (c === ']') {\n            parser.cdata += ']'\n          } else {\n            parser.cdata += ']]' + c\n            parser.state = S.CDATA\n          }\n          continue\n\n        case S.PROC_INST:\n          if (c === '?') {\n            parser.state = S.PROC_INST_ENDING\n          } else if (isWhitespace(c)) {\n            parser.state = S.PROC_INST_BODY\n          } else {\n            parser.procInstName += c\n          }\n          continue\n\n        case S.PROC_INST_BODY:\n          if (!parser.procInstBody && isWhitespace(c)) {\n            continue\n          } else if (c === '?') {\n            parser.state = S.PROC_INST_ENDING\n          } else {\n            parser.procInstBody += c\n          }\n          continue\n\n        case S.PROC_INST_ENDING:\n          if (c === '>') {\n            emitNode(parser, 'onprocessinginstruction', {\n              name: parser.procInstName,\n              body: parser.procInstBody\n            })\n            parser.procInstName = parser.procInstBody = ''\n            parser.state = S.TEXT\n          } else {\n            parser.procInstBody += '?' + c\n            parser.state = S.PROC_INST_BODY\n          }\n          continue\n\n        case S.OPEN_TAG:\n          if (isMatch(nameBody, c)) {\n            parser.tagName += c\n          } else {\n            newTag(parser)\n            if (c === '>') {\n              openTag(parser)\n            } else if (c === '/') {\n              parser.state = S.OPEN_TAG_SLASH\n            } else {\n              if (!isWhitespace(c)) {\n                strictFail(parser, 'Invalid character in tag name')\n              }\n              parser.state = S.ATTRIB\n            }\n          }\n          continue\n\n        case S.OPEN_TAG_SLASH:\n          if (c === '>') {\n            openTag(parser, true)\n            closeTag(parser)\n          } else {\n            strictFail(parser, 'Forward-slash in opening tag not followed by >')\n            parser.state = S.ATTRIB\n          }\n          continue\n\n        case S.ATTRIB:\n          // haven't read the attribute name yet.\n          if (isWhitespace(c)) {\n            continue\n          } else if (c === '>') {\n            openTag(parser)\n          } else if (c === '/') {\n            parser.state = S.OPEN_TAG_SLASH\n          } else if (isMatch(nameStart, c)) {\n            parser.attribName = c\n            parser.attribValue = ''\n            parser.state = S.ATTRIB_NAME\n          } else {\n            strictFail(parser, 'Invalid attribute name')\n          }\n          continue\n\n        case S.ATTRIB_NAME:\n          if (c === '=') {\n            parser.state = S.ATTRIB_VALUE\n          } else if (c === '>') {\n            strictFail(parser, 'Attribute without value')\n            parser.attribValue = parser.attribName\n            attrib(parser)\n            openTag(parser)\n          } else if (isWhitespace(c)) {\n            parser.state = S.ATTRIB_NAME_SAW_WHITE\n          } else if (isMatch(nameBody, c)) {\n            parser.attribName += c\n          } else {\n            strictFail(parser, 'Invalid attribute name')\n          }\n          continue\n\n        case S.ATTRIB_NAME_SAW_WHITE:\n          if (c === '=') {\n            parser.state = S.ATTRIB_VALUE\n          } else if (isWhitespace(c)) {\n            continue\n          } else {\n            strictFail(parser, 'Attribute without value')\n            parser.tag.attributes[parser.attribName] = ''\n            parser.attribValue = ''\n            emitNode(parser, 'onattribute', {\n              name: parser.attribName,\n              value: ''\n            })\n            parser.attribName = ''\n            if (c === '>') {\n              openTag(parser)\n            } else if (isMatch(nameStart, c)) {\n              parser.attribName = c\n              parser.state = S.ATTRIB_NAME\n            } else {\n              strictFail(parser, 'Invalid attribute name')\n              parser.state = S.ATTRIB\n            }\n          }\n          continue\n\n        case S.ATTRIB_VALUE:\n          if (isWhitespace(c)) {\n            continue\n          } else if (isQuote(c)) {\n            parser.q = c\n            parser.state = S.ATTRIB_VALUE_QUOTED\n          } else {\n            strictFail(parser, 'Unquoted attribute value')\n            parser.state = S.ATTRIB_VALUE_UNQUOTED\n            parser.attribValue = c\n          }\n          continue\n\n        case S.ATTRIB_VALUE_QUOTED:\n          if (c !== parser.q) {\n            if (c === '&') {\n              parser.state = S.ATTRIB_VALUE_ENTITY_Q\n            } else {\n              parser.attribValue += c\n            }\n            continue\n          }\n          attrib(parser)\n          parser.q = ''\n          parser.state = S.ATTRIB_VALUE_CLOSED\n          continue\n\n        case S.ATTRIB_VALUE_CLOSED:\n          if (isWhitespace(c)) {\n            parser.state = S.ATTRIB\n          } else if (c === '>') {\n            openTag(parser)\n          } else if (c === '/') {\n            parser.state = S.OPEN_TAG_SLASH\n          } else if (isMatch(nameStart, c)) {\n            strictFail(parser, 'No whitespace between attributes')\n            parser.attribName = c\n            parser.attribValue = ''\n            parser.state = S.ATTRIB_NAME\n          } else {\n            strictFail(parser, 'Invalid attribute name')\n          }\n          continue\n\n        case S.ATTRIB_VALUE_UNQUOTED:\n          if (!isAttribEnd(c)) {\n            if (c === '&') {\n              parser.state = S.ATTRIB_VALUE_ENTITY_U\n            } else {\n              parser.attribValue += c\n            }\n            continue\n          }\n          attrib(parser)\n          if (c === '>') {\n            openTag(parser)\n          } else {\n            parser.state = S.ATTRIB\n          }\n          continue\n\n        case S.CLOSE_TAG:\n          if (!parser.tagName) {\n            if (isWhitespace(c)) {\n              continue\n            } else if (notMatch(nameStart, c)) {\n              if (parser.script) {\n                parser.script += '</' + c\n                parser.state = S.SCRIPT\n              } else {\n                strictFail(parser, 'Invalid tagname in closing tag.')\n              }\n            } else {\n              parser.tagName = c\n            }\n          } else if (c === '>') {\n            closeTag(parser)\n          } else if (isMatch(nameBody, c)) {\n            parser.tagName += c\n          } else if (parser.script) {\n            parser.script += '</' + parser.tagName\n            parser.tagName = ''\n            parser.state = S.SCRIPT\n          } else {\n            if (!isWhitespace(c)) {\n              strictFail(parser, 'Invalid tagname in closing tag')\n            }\n            parser.state = S.CLOSE_TAG_SAW_WHITE\n          }\n          continue\n\n        case S.CLOSE_TAG_SAW_WHITE:\n          if (isWhitespace(c)) {\n            continue\n          }\n          if (c === '>') {\n            closeTag(parser)\n          } else {\n            strictFail(parser, 'Invalid characters in closing tag')\n          }\n          continue\n\n        case S.TEXT_ENTITY:\n        case S.ATTRIB_VALUE_ENTITY_Q:\n        case S.ATTRIB_VALUE_ENTITY_U:\n          var returnState\n          var buffer\n          switch (parser.state) {\n            case S.TEXT_ENTITY:\n              returnState = S.TEXT\n              buffer = 'textNode'\n              break\n\n            case S.ATTRIB_VALUE_ENTITY_Q:\n              returnState = S.ATTRIB_VALUE_QUOTED\n              buffer = 'attribValue'\n              break\n\n            case S.ATTRIB_VALUE_ENTITY_U:\n              returnState = S.ATTRIB_VALUE_UNQUOTED\n              buffer = 'attribValue'\n              break\n          }\n\n          if (c === ';') {\n            parser[buffer] += parseEntity(parser)\n            parser.entity = ''\n            parser.state = returnState\n          } else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) {\n            parser.entity += c\n          } else {\n            strictFail(parser, 'Invalid character in entity name')\n            parser[buffer] += '&' + parser.entity + c\n            parser.entity = ''\n            parser.state = returnState\n          }\n\n          continue\n\n        default:\n          throw new Error(parser, 'Unknown state: ' + parser.state)\n      }\n    } // while\n\n    if (parser.position >= parser.bufferCheckPosition) {\n      checkBufferLength(parser)\n    }\n    return parser\n  }\n\n  /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n  /* istanbul ignore next */\n  if (!String.fromCodePoint) {\n    (function () {\n      var stringFromCharCode = String.fromCharCode\n      var floor = Math.floor\n      var fromCodePoint = function () {\n        var MAX_SIZE = 0x4000\n        var codeUnits = []\n        var highSurrogate\n        var lowSurrogate\n        var index = -1\n        var length = arguments.length\n        if (!length) {\n          return ''\n        }\n        var result = ''\n        while (++index < length) {\n          var codePoint = Number(arguments[index])\n          if (\n            !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n            codePoint < 0 || // not a valid Unicode code point\n            codePoint > 0x10FFFF || // not a valid Unicode code point\n            floor(codePoint) !== codePoint // not an integer\n          ) {\n            throw RangeError('Invalid code point: ' + codePoint)\n          }\n          if (codePoint <= 0xFFFF) { // BMP code point\n            codeUnits.push(codePoint)\n          } else { // Astral code point; split in surrogate halves\n            // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n            codePoint -= 0x10000\n            highSurrogate = (codePoint >> 10) + 0xD800\n            lowSurrogate = (codePoint % 0x400) + 0xDC00\n            codeUnits.push(highSurrogate, lowSurrogate)\n          }\n          if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n            result += stringFromCharCode.apply(null, codeUnits)\n            codeUnits.length = 0\n          }\n        }\n        return result\n      }\n      /* istanbul ignore next */\n      if (Object.defineProperty) {\n        Object.defineProperty(String, 'fromCodePoint', {\n          value: fromCodePoint,\n          configurable: true,\n          writable: true\n        })\n      } else {\n        String.fromCodePoint = fromCodePoint\n      }\n    }())\n  }\n})( false ? 0 : exports)\n\n\n/***/ }),\n\n/***/ 2830:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = (__webpack_require__(7187).EventEmitter);\nvar inherits = __webpack_require__(5717);\n\ninherits(Stream, EE);\nStream.Readable = __webpack_require__(6577);\nStream.Writable = __webpack_require__(323);\nStream.Duplex = __webpack_require__(8656);\nStream.Transform = __webpack_require__(4473);\nStream.PassThrough = __webpack_require__(2366);\nStream.finished = __webpack_require__(1086)\nStream.pipeline = __webpack_require__(6472)\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\n  }\n\n  dest.on('drain', ondrain);\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend);\n    source.on('close', onclose);\n  }\n\n  var didOnEnd = false;\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    dest.end();\n  }\n\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    if (typeof dest.destroy === 'function') dest.destroy();\n  }\n\n  // don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup();\n    if (EE.listenerCount(this, 'error') === 0) {\n      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('error', onerror);\n\n  // remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata);\n    dest.removeListener('drain', ondrain);\n\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n\n  dest.on('close', cleanup);\n\n  dest.emit('pipe', source);\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest;\n};\n\n\n/***/ }),\n\n/***/ 8106:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.q = codes;\n\n\n/***/ }),\n\n/***/ 8656:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n\n  for (var key in obj) {\n    keys.push(key);\n  }\n\n  return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = __webpack_require__(6577);\n\nvar Writable = __webpack_require__(323);\n\n__webpack_require__(5717)(Duplex, Readable);\n\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  this.allowHalfOpen = true;\n\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n}); // the no-half-open enforcer\n\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return; // no more data can be written.\n  // But allow more writes to happen in this tick.\n\n  process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\n/***/ }),\n\n/***/ 2366:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n\nmodule.exports = PassThrough;\n\nvar Transform = __webpack_require__(4473);\n\n__webpack_require__(5717)(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};\n\n/***/ }),\n\n/***/ 6577:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = (__webpack_require__(7187).EventEmitter);\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = __webpack_require__(3194);\n/*</replacement>*/\n\n\nvar Buffer = (__webpack_require__(8823).Buffer);\n\nvar OurUint8Array = __webpack_require__.g.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = __webpack_require__(964);\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = __webpack_require__(3361);\n\nvar destroyImpl = __webpack_require__(1029);\n\nvar _require = __webpack_require__(94),\n    getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = (__webpack_require__(8106)/* .codes */ .q),\n    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n    ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\n__webpack_require__(5717)(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || __webpack_require__(8656);\n  options = options || {}; // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n\n  this.sync = true; // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n  this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n  this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n  this.destroyed = false; // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n\n  this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n  this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = (__webpack_require__(2553)/* .StringDecoder */ .s);\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || __webpack_require__(8656);\n  if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5\n\n  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n      } else if (state.destroyed) {\n        return false;\n      } else {\n        state.reading = false;\n\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\n  } // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n\n\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    state.awaitDrain = 0;\n    stream.emit('data', chunk);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n\n  return er;\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = (__webpack_require__(2553)/* .StringDecoder */ .s);\n  var decoder = new StringDecoder(enc);\n  this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n  this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n  var p = this._readableState.buffer.head;\n  var content = '';\n\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n\n  this._readableState.buffer.clear();\n\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n\n  return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n; // Don't have enough\n\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n\n  return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n\n  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  } // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n  // if we need a readable event, then we need to do some reading.\n\n\n  var doRead = state.needReadable;\n  debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  } // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n\n\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n    if (state.length === 0) state.needReadable = true; // call internal read method\n\n    this._read(state.highWaterMark);\n\n    state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n\n  state.ended = true;\n\n  if (state.sync) {\n    // if we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call\n    emitReadable(stream);\n  } else {\n    // emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false;\n\n    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\n  }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  debug('emitReadable', state.needReadable, state.emittedReadable);\n  state.needReadable = false;\n\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    process.nextTick(emitReadable_, stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n  if (!state.destroyed && (state.length || state.ended)) {\n    stream.emit('readable');\n    state.emittedReadable = false;\n  } // The stream needs another readable event if\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n\n\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n  flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var len = state.length;\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length) // didn't get any data, stop spinning.\n      break;\n  }\n\n  state.readingMore = false;\n} // abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  } // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n\n\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n\n  function cleanup() {\n    debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true; // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  src.on('data', ondata);\n\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n\n    if (ret === false) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n\n      src.pause();\n    }\n  } // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n\n\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n  } // Make sure our error handler is attached before userland ones.\n\n\n  prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n\n  dest.once('close', onclose);\n\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  } // tell the dest that it's being piped to\n\n\n  dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  }; // if we're not piping anywhere, then do nothing.\n\n  if (state.pipesCount === 0) return this; // just one destination.  most common case.\n\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes; // got a match.\n\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  } // slow case. multiple pipe destinations.\n\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, {\n        hasUnpiped: false\n      });\n    }\n\n    return this;\n  } // try to find the right one.\n\n\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n  var state = this._readableState;\n\n  if (ev === 'data') {\n    // update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n    if (state.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.flowing = false;\n      state.emittedReadable = false;\n      debug('on readable', state.length, state.reading);\n\n      if (state.length) {\n        emitReadable(this);\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this);\n      }\n    }\n  }\n\n  return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n  var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n\n  return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n\n  return res;\n};\n\nfunction updateReadableListening(self) {\n  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n\n  if (state.resumeScheduled && !state.paused) {\n    // flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true; // crude way to check if we should resume\n  } else if (self.listenerCount('data') > 0) {\n    self.resume();\n  }\n}\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n\n  if (!state.flowing) {\n    debug('resume'); // we flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume()\n\n    state.flowing = !state.readableListening;\n    resume(this, state);\n  }\n\n  state.paused = false;\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  debug('resume', state.reading);\n\n  if (!state.reading) {\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n\n  if (this._readableState.flowing !== false) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n\n  this._readableState.paused = true;\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n\n  while (state.flowing && stream.read() !== null) {\n    ;\n  }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  }); // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  } // proxy certain important events.\n\n\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  } // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n\n\n  this._read = function (n) {\n    debug('wrapped _read', n);\n\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = __webpack_require__(828);\n    }\n\n    return createReadableStreamAsyncIterator(this);\n  };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = state.buffer.consume(n, state.decoder);\n  }\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n  debug('endReadable', state.endEmitted);\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n\n    if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well\n      var wState = stream._writableState;\n\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\n\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = __webpack_require__(1265);\n    }\n\n    return from(Readable, iterable, opts);\n  };\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n\n  return -1;\n}\n\n/***/ }),\n\n/***/ 4473:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n\nmodule.exports = Transform;\n\nvar _require$codes = (__webpack_require__(8106)/* .codes */ .q),\n    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n    ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n    ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = __webpack_require__(8656);\n\n__webpack_require__(5717)(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  }; // start out asking for a readable event once data is transformed.\n\n  this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  } // When the writable side finishes, then flush out anything remaining.\n\n\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\n}\n\n/***/ }),\n\n/***/ 323:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n  deprecate: __webpack_require__(4927)\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = __webpack_require__(3194);\n/*</replacement>*/\n\n\nvar Buffer = (__webpack_require__(8823).Buffer);\n\nvar OurUint8Array = __webpack_require__.g.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = __webpack_require__(1029);\n\nvar _require = __webpack_require__(94),\n    getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = (__webpack_require__(8106)/* .codes */ .q),\n    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n    ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n    ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n    ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n    ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n    ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\n__webpack_require__(5717)(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || __webpack_require__(8656);\n  options = options || {}; // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n\n  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n  this.finalCalled = false; // drain event flag.\n\n  this.needDrain = false; // at the start of calling end()\n\n  this.ending = false; // when end() has been called, and returned\n\n  this.ended = false; // when 'finish' is emitted\n\n  this.finished = false; // has it been destroyed\n\n  this.destroyed = false; // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode; // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n\n  this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n\n  this.length = 0; // a flag to see when we're in the middle of a write.\n\n  this.writing = false; // when true all writes will be buffered until .uncork() call\n\n  this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n\n  this.sync = true; // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n\n  this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n  this.writecb = null; // the amount that is being written when _write is called.\n\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n\n  this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n\n  this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n  this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n  this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n  this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n  this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || __webpack_require__(8656); // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5\n\n  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n\n  return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er); // this can emit finish, and it will always happen\n    // after error\n\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er); // this can emit finish, but finish must\n    // always follow error\n\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  } // ignore unnecessary end() calls.\n\n\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\n\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n\n  if (need) {\n    prefinish(stream, state);\n\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n\n      if (state.autoDestroy) {\n        // In case of duplex streams we need a way to detect\n        // if the readable side is ready for autoDestroy as well\n        var rState = stream._readableState;\n\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  } // reuse the free corkReq.\n\n\n  state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\n};\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = __webpack_require__(1086);\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\n\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n\n  if (resolve !== null) {\n    var data = iter[kStream].read(); // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\n\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n\n  next: function next() {\n    var _this = this;\n\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    } // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n\n\n    var lastPromise = this[kLastPromise];\n    var promise;\n\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n\n      promise = new Promise(this[kHandlePromise]);\n    }\n\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n\n      iterator[kError] = err;\n      return;\n    }\n\n    var resolve = iterator[kLastResolve];\n\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;\n\n/***/ }),\n\n/***/ 1029:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\n    }\n\n    return this;\n  } // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n\n  return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};\n\n/***/ }),\n\n/***/ 1086:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n\nvar ERR_STREAM_PREMATURE_CLOSE = (__webpack_require__(8106)/* .codes.ERR_STREAM_PREMATURE_CLOSE */ .q.ERR_STREAM_PREMATURE_CLOSE);\n\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    callback.apply(this, args);\n  };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n\n  var writableEnded = stream._writableState && stream._writableState.finished;\n\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n\n  var onclose = function onclose() {\n    var err;\n\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\n    stream.removeListener('complete', onfinish);\n    stream.removeListener('abort', onclose);\n    stream.removeListener('request', onrequest);\n    if (stream.req) stream.req.removeListener('finish', onfinish);\n    stream.removeListener('end', onlegacyfinish);\n    stream.removeListener('close', onlegacyfinish);\n    stream.removeListener('finish', onfinish);\n    stream.removeListener('end', onend);\n    stream.removeListener('error', onerror);\n    stream.removeListener('close', onclose);\n  };\n}\n\nmodule.exports = eos;\n\n/***/ }),\n\n/***/ 1265:\n/***/ (function(module) {\n\nmodule.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\n};\n\n\n/***/ }),\n\n/***/ 6472:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n\nvar eos;\n\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\n\nvar _require$codes = (__webpack_require__(8106)/* .codes */ .q),\n    ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n    ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\n\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = __webpack_require__(1086);\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true; // request.destroy just do .end - .abort is what we want\n\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\n\nfunction call(fn) {\n  fn();\n}\n\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\n\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;\n\n/***/ }),\n\n/***/ 94:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar ERR_INVALID_OPT_VALUE = (__webpack_require__(8106)/* .codes.ERR_INVALID_OPT_VALUE */ .q.ERR_INVALID_OPT_VALUE);\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n\n    return Math.floor(hwm);\n  } // Default value\n\n\n  return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};\n\n/***/ }),\n\n/***/ 3194:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(7187).EventEmitter;\n\n\n/***/ }),\n\n/***/ 2984:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(a,b){if(true)!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (b),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else {}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof __webpack_require__.g&&__webpack_require__.g.global===__webpack_require__.g?__webpack_require__.g:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:(typeof HTMLAnchorElement !== \"undefined\" && \"download\" in HTMLAnchorElement.prototype)&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g, true&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map\n\n/***/ }),\n\n/***/ 2553:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\n/*<replacement>*/\n\nvar Buffer = (__webpack_require__(4559).Buffer);\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.s = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}\n\n/***/ }),\n\n/***/ 311:\n/***/ (function(module) {\n\nvar TINF_OK = 0;\nvar TINF_DATA_ERROR = -3;\n\nfunction Tree() {\n  this.table = new Uint16Array(16);   /* table of code length counts */\n  this.trans = new Uint16Array(288);  /* code -> symbol translation table */\n}\n\nfunction Data(source, dest) {\n  this.source = source;\n  this.sourceIndex = 0;\n  this.tag = 0;\n  this.bitcount = 0;\n  \n  this.dest = dest;\n  this.destLen = 0;\n  \n  this.ltree = new Tree();  /* dynamic length/symbol tree */\n  this.dtree = new Tree();  /* dynamic distance tree */\n}\n\n/* --------------------------------------------------- *\n * -- uninitialized global data (static structures) -- *\n * --------------------------------------------------- */\n\nvar sltree = new Tree();\nvar sdtree = new Tree();\n\n/* extra bits and base tables for length codes */\nvar length_bits = new Uint8Array(30);\nvar length_base = new Uint16Array(30);\n\n/* extra bits and base tables for distance codes */\nvar dist_bits = new Uint8Array(30);\nvar dist_base = new Uint16Array(30);\n\n/* special ordering of code length codes */\nvar clcidx = new Uint8Array([\n  16, 17, 18, 0, 8, 7, 9, 6,\n  10, 5, 11, 4, 12, 3, 13, 2,\n  14, 1, 15\n]);\n\n/* used by tinf_decode_trees, avoids allocations every call */\nvar code_tree = new Tree();\nvar lengths = new Uint8Array(288 + 32);\n\n/* ----------------------- *\n * -- utility functions -- *\n * ----------------------- */\n\n/* build extra bits and base tables */\nfunction tinf_build_bits_base(bits, base, delta, first) {\n  var i, sum;\n\n  /* build bits table */\n  for (i = 0; i < delta; ++i) bits[i] = 0;\n  for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0;\n\n  /* build base table */\n  for (sum = first, i = 0; i < 30; ++i) {\n    base[i] = sum;\n    sum += 1 << bits[i];\n  }\n}\n\n/* build the fixed huffman trees */\nfunction tinf_build_fixed_trees(lt, dt) {\n  var i;\n\n  /* build fixed length tree */\n  for (i = 0; i < 7; ++i) lt.table[i] = 0;\n\n  lt.table[7] = 24;\n  lt.table[8] = 152;\n  lt.table[9] = 112;\n\n  for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i;\n  for (i = 0; i < 144; ++i) lt.trans[24 + i] = i;\n  for (i = 0; i < 8; ++i) lt.trans[24 + 144 + i] = 280 + i;\n  for (i = 0; i < 112; ++i) lt.trans[24 + 144 + 8 + i] = 144 + i;\n\n  /* build fixed distance tree */\n  for (i = 0; i < 5; ++i) dt.table[i] = 0;\n\n  dt.table[5] = 32;\n\n  for (i = 0; i < 32; ++i) dt.trans[i] = i;\n}\n\n/* given an array of code lengths, build a tree */\nvar offs = new Uint16Array(16);\n\nfunction tinf_build_tree(t, lengths, off, num) {\n  var i, sum;\n\n  /* clear code length count table */\n  for (i = 0; i < 16; ++i) t.table[i] = 0;\n\n  /* scan symbol lengths, and sum code length counts */\n  for (i = 0; i < num; ++i) t.table[lengths[off + i]]++;\n\n  t.table[0] = 0;\n\n  /* compute offset table for distribution sort */\n  for (sum = 0, i = 0; i < 16; ++i) {\n    offs[i] = sum;\n    sum += t.table[i];\n  }\n\n  /* create code->symbol translation table (symbols sorted by code) */\n  for (i = 0; i < num; ++i) {\n    if (lengths[off + i]) t.trans[offs[lengths[off + i]]++] = i;\n  }\n}\n\n/* ---------------------- *\n * -- decode functions -- *\n * ---------------------- */\n\n/* get one bit from source stream */\nfunction tinf_getbit(d) {\n  /* check if tag is empty */\n  if (!d.bitcount--) {\n    /* load next tag */\n    d.tag = d.source[d.sourceIndex++];\n    d.bitcount = 7;\n  }\n\n  /* shift bit out of tag */\n  var bit = d.tag & 1;\n  d.tag >>>= 1;\n\n  return bit;\n}\n\n/* read a num bit value from a stream and add base */\nfunction tinf_read_bits(d, num, base) {\n  if (!num)\n    return base;\n\n  while (d.bitcount < 24) {\n    d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n    d.bitcount += 8;\n  }\n\n  var val = d.tag & (0xffff >>> (16 - num));\n  d.tag >>>= num;\n  d.bitcount -= num;\n  return val + base;\n}\n\n/* given a data stream and a tree, decode a symbol */\nfunction tinf_decode_symbol(d, t) {\n  while (d.bitcount < 24) {\n    d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n    d.bitcount += 8;\n  }\n  \n  var sum = 0, cur = 0, len = 0;\n  var tag = d.tag;\n\n  /* get more bits while code value is above sum */\n  do {\n    cur = 2 * cur + (tag & 1);\n    tag >>>= 1;\n    ++len;\n\n    sum += t.table[len];\n    cur -= t.table[len];\n  } while (cur >= 0);\n  \n  d.tag = tag;\n  d.bitcount -= len;\n\n  return t.trans[sum + cur];\n}\n\n/* given a data stream, decode dynamic trees from it */\nfunction tinf_decode_trees(d, lt, dt) {\n  var hlit, hdist, hclen;\n  var i, num, length;\n\n  /* get 5 bits HLIT (257-286) */\n  hlit = tinf_read_bits(d, 5, 257);\n\n  /* get 5 bits HDIST (1-32) */\n  hdist = tinf_read_bits(d, 5, 1);\n\n  /* get 4 bits HCLEN (4-19) */\n  hclen = tinf_read_bits(d, 4, 4);\n\n  for (i = 0; i < 19; ++i) lengths[i] = 0;\n\n  /* read code lengths for code length alphabet */\n  for (i = 0; i < hclen; ++i) {\n    /* get 3 bits code length (0-7) */\n    var clen = tinf_read_bits(d, 3, 0);\n    lengths[clcidx[i]] = clen;\n  }\n\n  /* build code length tree */\n  tinf_build_tree(code_tree, lengths, 0, 19);\n\n  /* decode code lengths for the dynamic trees */\n  for (num = 0; num < hlit + hdist;) {\n    var sym = tinf_decode_symbol(d, code_tree);\n\n    switch (sym) {\n      case 16:\n        /* copy previous code length 3-6 times (read 2 bits) */\n        var prev = lengths[num - 1];\n        for (length = tinf_read_bits(d, 2, 3); length; --length) {\n          lengths[num++] = prev;\n        }\n        break;\n      case 17:\n        /* repeat code length 0 for 3-10 times (read 3 bits) */\n        for (length = tinf_read_bits(d, 3, 3); length; --length) {\n          lengths[num++] = 0;\n        }\n        break;\n      case 18:\n        /* repeat code length 0 for 11-138 times (read 7 bits) */\n        for (length = tinf_read_bits(d, 7, 11); length; --length) {\n          lengths[num++] = 0;\n        }\n        break;\n      default:\n        /* values 0-15 represent the actual code lengths */\n        lengths[num++] = sym;\n        break;\n    }\n  }\n\n  /* build dynamic trees */\n  tinf_build_tree(lt, lengths, 0, hlit);\n  tinf_build_tree(dt, lengths, hlit, hdist);\n}\n\n/* ----------------------------- *\n * -- block inflate functions -- *\n * ----------------------------- */\n\n/* given a stream and two trees, inflate a block of data */\nfunction tinf_inflate_block_data(d, lt, dt) {\n  while (1) {\n    var sym = tinf_decode_symbol(d, lt);\n\n    /* check for end of block */\n    if (sym === 256) {\n      return TINF_OK;\n    }\n\n    if (sym < 256) {\n      d.dest[d.destLen++] = sym;\n    } else {\n      var length, dist, offs;\n      var i;\n\n      sym -= 257;\n\n      /* possibly get more bits from length code */\n      length = tinf_read_bits(d, length_bits[sym], length_base[sym]);\n\n      dist = tinf_decode_symbol(d, dt);\n\n      /* possibly get more bits from distance code */\n      offs = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);\n\n      /* copy match */\n      for (i = offs; i < offs + length; ++i) {\n        d.dest[d.destLen++] = d.dest[i];\n      }\n    }\n  }\n}\n\n/* inflate an uncompressed block of data */\nfunction tinf_inflate_uncompressed_block(d) {\n  var length, invlength;\n  var i;\n  \n  /* unread from bitbuffer */\n  while (d.bitcount > 8) {\n    d.sourceIndex--;\n    d.bitcount -= 8;\n  }\n\n  /* get length */\n  length = d.source[d.sourceIndex + 1];\n  length = 256 * length + d.source[d.sourceIndex];\n\n  /* get one's complement of length */\n  invlength = d.source[d.sourceIndex + 3];\n  invlength = 256 * invlength + d.source[d.sourceIndex + 2];\n\n  /* check length */\n  if (length !== (~invlength & 0x0000ffff))\n    return TINF_DATA_ERROR;\n\n  d.sourceIndex += 4;\n\n  /* copy block */\n  for (i = length; i; --i)\n    d.dest[d.destLen++] = d.source[d.sourceIndex++];\n\n  /* make sure we start next block on a byte boundary */\n  d.bitcount = 0;\n\n  return TINF_OK;\n}\n\n/* inflate stream from source to dest */\nfunction tinf_uncompress(source, dest) {\n  var d = new Data(source, dest);\n  var bfinal, btype, res;\n\n  do {\n    /* read final block flag */\n    bfinal = tinf_getbit(d);\n\n    /* read block type (2 bits) */\n    btype = tinf_read_bits(d, 2, 0);\n\n    /* decompress block */\n    switch (btype) {\n      case 0:\n        /* decompress uncompressed block */\n        res = tinf_inflate_uncompressed_block(d);\n        break;\n      case 1:\n        /* decompress block with fixed huffman trees */\n        res = tinf_inflate_block_data(d, sltree, sdtree);\n        break;\n      case 2:\n        /* decompress block with dynamic huffman trees */\n        tinf_decode_trees(d, d.ltree, d.dtree);\n        res = tinf_inflate_block_data(d, d.ltree, d.dtree);\n        break;\n      default:\n        res = TINF_DATA_ERROR;\n    }\n\n    if (res !== TINF_OK)\n      throw new Error('Data error');\n\n  } while (!bfinal);\n\n  if (d.destLen < d.dest.length) {\n    if (typeof d.dest.slice === 'function')\n      return d.dest.slice(0, d.destLen);\n    else\n      return d.dest.subarray(0, d.destLen);\n  }\n  \n  return d.dest;\n}\n\n/* -------------------- *\n * -- initialization -- *\n * -------------------- */\n\n/* build fixed huffman trees */\ntinf_build_fixed_trees(sltree, sdtree);\n\n/* build extra bits and base tables */\ntinf_build_bits_base(length_bits, length_base, 4, 3);\ntinf_build_bits_base(dist_bits, dist_base, 2, 1);\n\n/* fix a special case */\nlength_bits[28] = 0;\nlength_base[28] = 258;\n\nmodule.exports = tinf_uncompress;\n\n\n/***/ }),\n\n/***/ 1917:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\n__webpack_require__(2526);\n__webpack_require__(1817);\n__webpack_require__(2165);\n__webpack_require__(6649);\n__webpack_require__(6078);\n__webpack_require__(1539);\n__webpack_require__(4747);\n__webpack_require__(7941);\n__webpack_require__(7042);\n__webpack_require__(6992);\n__webpack_require__(1532);\n__webpack_require__(8783);\n__webpack_require__(3948);\n__webpack_require__(2222);\n__webpack_require__(9653);\n__webpack_require__(1249);\n__webpack_require__(2087);\n__webpack_require__(8309);\n__webpack_require__(9601);\n__webpack_require__(4953);\n__webpack_require__(8674);\n__webpack_require__(5003);\n__webpack_require__(189);\n__webpack_require__(561);\n__webpack_require__(2481);\n__webpack_require__(2707);\n__webpack_require__(4916);\n__webpack_require__(4723);\n__webpack_require__(1038);\n__webpack_require__(9600);\n__webpack_require__(3371);\n__webpack_require__(3290);\n__webpack_require__(3299);\n__webpack_require__(8255);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(5109);\n__webpack_require__(9714);\n__webpack_require__(3210);\nvar _;\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nfunction _interopDefault(ex) {\n  return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\nvar r = _interopDefault(__webpack_require__(5106));\nvar utils = __webpack_require__(6610);\nvar isEqual = _interopDefault(__webpack_require__(251));\nvar unicode = _interopDefault(__webpack_require__(3631));\nvar UnicodeTrie = _interopDefault(__webpack_require__(4781));\nvar StateMachine = _interopDefault(__webpack_require__(9811));\nvar cloneDeep = _interopDefault(__webpack_require__(6313));\nvar inflate = _interopDefault(__webpack_require__(311));\nvar brotli = _interopDefault(__webpack_require__(7709));\nvar fs = __webpack_require__(3857);\nvar fontkit = {};\nfontkit.logErrors = false;\nvar formats = [];\nfontkit.registerFormat = function (format) {\n  formats.push(format);\n};\nfontkit.openSync = function (filename, postscriptName) {\n  var buffer = fs.readFileSync(filename);\n  return fontkit.create(buffer, postscriptName);\n};\nfontkit.open = function (filename, postscriptName, callback) {\n  if (typeof postscriptName === 'function') {\n    callback = postscriptName;\n    postscriptName = null;\n  }\n  fs.readFile(filename, function (err, buffer) {\n    if (err) {\n      return callback(err);\n    }\n    try {\n      var font = fontkit.create(buffer, postscriptName);\n    } catch (e) {\n      return callback(e);\n    }\n    return callback(null, font);\n  });\n  return;\n};\nfontkit.create = function (buffer, postscriptName) {\n  for (var i = 0; i < formats.length; i++) {\n    var format = formats[i];\n    if (format.probe(buffer)) {\n      var font = new format(new r.DecodeStream(buffer));\n      if (postscriptName) {\n        return font.getFont(postscriptName);\n      }\n      return font;\n    }\n  }\n  throw new Error('Unknown font format');\n};\nfontkit.defaultLanguage = 'en';\nfontkit.setDefaultLanguage = function (lang) {\n  if (lang === void 0) {\n    lang = 'en';\n  }\n  fontkit.defaultLanguage = lang;\n};\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n  var desc = {};\n  Object.keys(descriptor).forEach(function (key) {\n    desc[key] = descriptor[key];\n  });\n  desc.enumerable = !!desc.enumerable;\n  desc.configurable = !!desc.configurable;\n  if ('value' in desc || desc.initializer) {\n    desc.writable = true;\n  }\n  desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n    return decorator(target, property, desc) || desc;\n  }, desc);\n  if (context && desc.initializer !== void 0) {\n    desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n    desc.initializer = undefined;\n  }\n  if (desc.initializer === void 0) {\n    Object.defineProperty(target, property, desc);\n    desc = null;\n  }\n  return desc;\n}\n\n/**\n * This decorator caches the results of a getter or method such that\n * the results are lazily computed once, and then cached.\n * @private\n */\nfunction cache(target, key, descriptor) {\n  if (descriptor.get) {\n    var get = descriptor.get;\n    descriptor.get = function () {\n      var value = get.call(this);\n      Object.defineProperty(this, key, {\n        value: value\n      });\n      return value;\n    };\n  } else if (typeof descriptor.value === 'function') {\n    var fn = descriptor.value;\n    return {\n      get: function get() {\n        var cache = new Map();\n        function memoized() {\n          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n            args[_key] = arguments[_key];\n          }\n          var key = args.length > 0 ? args[0] : 'value';\n          if (cache.has(key)) {\n            return cache.get(key);\n          }\n          var result = fn.apply(this, args);\n          cache.set(key, result);\n          return result;\n        }\n        Object.defineProperty(this, key, {\n          value: memoized\n        });\n        return memoized;\n      }\n    };\n  }\n}\nvar SubHeader = new r.Struct({\n  firstCode: r.uint16,\n  entryCount: r.uint16,\n  idDelta: r.int16,\n  idRangeOffset: r.uint16\n});\nvar CmapGroup = new r.Struct({\n  startCharCode: r.uint32,\n  endCharCode: r.uint32,\n  glyphID: r.uint32\n});\nvar UnicodeValueRange = new r.Struct({\n  startUnicodeValue: r.uint24,\n  additionalCount: r.uint8\n});\nvar UVSMapping = new r.Struct({\n  unicodeValue: r.uint24,\n  glyphID: r.uint16\n});\nvar DefaultUVS = new r.Array(UnicodeValueRange, r.uint32);\nvar NonDefaultUVS = new r.Array(UVSMapping, r.uint32);\nvar VarSelectorRecord = new r.Struct({\n  varSelector: r.uint24,\n  defaultUVS: new r.Pointer(r.uint32, DefaultUVS, {\n    type: 'parent'\n  }),\n  nonDefaultUVS: new r.Pointer(r.uint32, NonDefaultUVS, {\n    type: 'parent'\n  })\n});\nvar CmapSubtable = new r.VersionedStruct(r.uint16, {\n  0: {\n    // Byte encoding\n    length: r.uint16,\n    // Total table length in bytes (set to 262 for format 0)\n    language: r.uint16,\n    // Language code for this encoding subtable, or zero if language-independent\n    codeMap: new r.LazyArray(r.uint8, 256)\n  },\n  2: {\n    // High-byte mapping (CJK)\n    length: r.uint16,\n    language: r.uint16,\n    subHeaderKeys: new r.Array(r.uint16, 256),\n    subHeaderCount: function subHeaderCount(t) {\n      return Math.max.apply(Math, t.subHeaderKeys);\n    },\n    subHeaders: new r.LazyArray(SubHeader, 'subHeaderCount'),\n    glyphIndexArray: new r.LazyArray(r.uint16, 'subHeaderCount')\n  },\n  4: {\n    // Segment mapping to delta values\n    length: r.uint16,\n    // Total table length in bytes\n    language: r.uint16,\n    // Language code\n    segCountX2: r.uint16,\n    segCount: function segCount(t) {\n      return t.segCountX2 >> 1;\n    },\n    searchRange: r.uint16,\n    entrySelector: r.uint16,\n    rangeShift: r.uint16,\n    endCode: new r.LazyArray(r.uint16, 'segCount'),\n    reservedPad: new r.Reserved(r.uint16),\n    // This value should be zero\n    startCode: new r.LazyArray(r.uint16, 'segCount'),\n    idDelta: new r.LazyArray(r.int16, 'segCount'),\n    idRangeOffset: new r.LazyArray(r.uint16, 'segCount'),\n    glyphIndexArray: new r.LazyArray(r.uint16, function (t) {\n      return (t.length - t._currentOffset) / 2;\n    })\n  },\n  6: {\n    // Trimmed table\n    length: r.uint16,\n    language: r.uint16,\n    firstCode: r.uint16,\n    entryCount: r.uint16,\n    glyphIndices: new r.LazyArray(r.uint16, 'entryCount')\n  },\n  8: {\n    // mixed 16-bit and 32-bit coverage\n    reserved: new r.Reserved(r.uint16),\n    length: r.uint32,\n    language: r.uint16,\n    is32: new r.LazyArray(r.uint8, 8192),\n    nGroups: r.uint32,\n    groups: new r.LazyArray(CmapGroup, 'nGroups')\n  },\n  10: {\n    // Trimmed Array\n    reserved: new r.Reserved(r.uint16),\n    length: r.uint32,\n    language: r.uint32,\n    firstCode: r.uint32,\n    entryCount: r.uint32,\n    glyphIndices: new r.LazyArray(r.uint16, 'numChars')\n  },\n  12: {\n    // Segmented coverage\n    reserved: new r.Reserved(r.uint16),\n    length: r.uint32,\n    language: r.uint32,\n    nGroups: r.uint32,\n    groups: new r.LazyArray(CmapGroup, 'nGroups')\n  },\n  13: {\n    // Many-to-one range mappings (same as 12 except for group.startGlyphID)\n    reserved: new r.Reserved(r.uint16),\n    length: r.uint32,\n    language: r.uint32,\n    nGroups: r.uint32,\n    groups: new r.LazyArray(CmapGroup, 'nGroups')\n  },\n  14: {\n    // Unicode Variation Sequences\n    length: r.uint32,\n    numRecords: r.uint32,\n    varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords')\n  }\n});\nvar CmapEntry = new r.Struct({\n  platformID: r.uint16,\n  // Platform identifier\n  encodingID: r.uint16,\n  // Platform-specific encoding identifier\n  table: new r.Pointer(r.uint32, CmapSubtable, {\n    type: 'parent',\n    lazy: true\n  })\n}); // character to glyph mapping\n\nvar cmap = new r.Struct({\n  version: r.uint16,\n  numSubtables: r.uint16,\n  tables: new r.Array(CmapEntry, 'numSubtables')\n});\nvar head = new r.Struct({\n  version: r.int32,\n  // 0x00010000 (version 1.0)\n  revision: r.int32,\n  // set by font manufacturer\n  checkSumAdjustment: r.uint32,\n  magicNumber: r.uint32,\n  // set to 0x5F0F3CF5\n  flags: r.uint16,\n  unitsPerEm: r.uint16,\n  // range from 64 to 16384\n  created: new r.Array(r.int32, 2),\n  modified: new r.Array(r.int32, 2),\n  xMin: r.int16,\n  // for all glyph bounding boxes\n  yMin: r.int16,\n  // for all glyph bounding boxes\n  xMax: r.int16,\n  // for all glyph bounding boxes\n  yMax: r.int16,\n  // for all glyph bounding boxes\n  macStyle: new r.Bitfield(r.uint16, ['bold', 'italic', 'underline', 'outline', 'shadow', 'condensed', 'extended']),\n  lowestRecPPEM: r.uint16,\n  // smallest readable size in pixels\n  fontDirectionHint: r.int16,\n  indexToLocFormat: r.int16,\n  // 0 for short offsets, 1 for long\n  glyphDataFormat: r.int16 // 0 for current format\n});\n\nvar hhea = new r.Struct({\n  version: r.int32,\n  ascent: r.int16,\n  // Distance from baseline of highest ascender\n  descent: r.int16,\n  // Distance from baseline of lowest descender\n  lineGap: r.int16,\n  // Typographic line gap\n  advanceWidthMax: r.uint16,\n  // Maximum advance width value in 'hmtx' table\n  minLeftSideBearing: r.int16,\n  // Maximum advance width value in 'hmtx' table\n  minRightSideBearing: r.int16,\n  // Minimum right sidebearing value\n  xMaxExtent: r.int16,\n  caretSlopeRise: r.int16,\n  // Used to calculate the slope of the cursor (rise/run); 1 for vertical\n  caretSlopeRun: r.int16,\n  // 0 for vertical\n  caretOffset: r.int16,\n  // Set to 0 for non-slanted fonts\n  reserved: new r.Reserved(r.int16, 4),\n  metricDataFormat: r.int16,\n  // 0 for current format\n  numberOfMetrics: r.uint16 // Number of advance widths in 'hmtx' table\n});\n\nvar HmtxEntry = new r.Struct({\n  advance: r.uint16,\n  bearing: r.int16\n});\nvar hmtx = new r.Struct({\n  metrics: new r.LazyArray(HmtxEntry, function (t) {\n    return t.parent.hhea.numberOfMetrics;\n  }),\n  bearings: new r.LazyArray(r.int16, function (t) {\n    return t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics;\n  })\n});\nvar maxp = new r.Struct({\n  version: r.int32,\n  numGlyphs: r.uint16,\n  // The number of glyphs in the font\n  maxPoints: r.uint16,\n  // Maximum points in a non-composite glyph\n  maxContours: r.uint16,\n  // Maximum contours in a non-composite glyph\n  maxComponentPoints: r.uint16,\n  // Maximum points in a composite glyph\n  maxComponentContours: r.uint16,\n  // Maximum contours in a composite glyph\n  maxZones: r.uint16,\n  // 1 if instructions do not use the twilight zone, 2 otherwise\n  maxTwilightPoints: r.uint16,\n  // Maximum points used in Z0\n  maxStorage: r.uint16,\n  // Number of Storage Area locations\n  maxFunctionDefs: r.uint16,\n  // Number of FDEFs\n  maxInstructionDefs: r.uint16,\n  // Number of IDEFs\n  maxStackElements: r.uint16,\n  // Maximum stack depth\n  maxSizeOfInstructions: r.uint16,\n  // Maximum byte count for glyph instructions\n  maxComponentElements: r.uint16,\n  // Maximum number of components referenced at “top level” for any composite glyph\n  maxComponentDepth: r.uint16 // Maximum levels of recursion; 1 for simple components\n});\n\n/**\n * Gets an encoding name from platform, encoding, and language ids.\n * Returned encoding names can be used in iconv-lite to decode text.\n */\nfunction getEncoding(platformID, encodingID, languageID) {\n  if (languageID === void 0) {\n    languageID = 0;\n  }\n  if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) {\n    return MAC_LANGUAGE_ENCODINGS[languageID];\n  }\n  return ENCODINGS[platformID][encodingID];\n} // Map of platform ids to encoding ids.\n\nvar ENCODINGS = [\n// unicode\n['utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be'],\n// macintosh\n// Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/\n// 0\tRoman                 17\tMalayalam\n// 1\tJapanese\t            18\tSinhalese\n// 2\tTraditional Chinese\t  19\tBurmese\n// 3\tKorean\t              20\tKhmer\n// 4\tArabic\t              21\tThai\n// 5\tHebrew\t              22\tLaotian\n// 6\tGreek\t                23\tGeorgian\n// 7\tRussian\t              24\tArmenian\n// 8\tRSymbol\t              25\tSimplified Chinese\n// 9\tDevanagari\t          26\tTibetan\n// 10\tGurmukhi\t            27\tMongolian\n// 11\tGujarati\t            28\tGeez\n// 12\tOriya\t                29\tSlavic\n// 13\tBengali\t              30\tVietnamese\n// 14\tTamil\t                31\tSindhi\n// 15\tTelugu\t              32\t(Uninterpreted)\n// 16\tKannada\n['macroman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8', 'macgreek', 'maccyrillic', 'symbol', 'Devanagari', 'Gurmukhi', 'Gujarati', 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese', 'Burmese', 'Khmer', 'macthai', 'Laotian', 'Georgian', 'Armenian', 'gb-2312-80', 'Tibetan', 'Mongolian', 'Geez', 'maccenteuro', 'Vietnamese', 'Sindhi'],\n// ISO (deprecated)\n['ascii'],\n// windows\n// Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx\n['symbol', 'utf16be', 'shift-jis', 'gb18030', 'big5', 'wansung', 'johab', null, null, null, 'utf16be']]; // Overrides for Mac scripts by language id.\n// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt\n\nvar MAC_LANGUAGE_ENCODINGS = {\n  15: 'maciceland',\n  17: 'macturkish',\n  18: 'maccroatian',\n  24: 'maccenteuro',\n  25: 'maccenteuro',\n  26: 'maccenteuro',\n  27: 'maccenteuro',\n  28: 'maccenteuro',\n  30: 'maciceland',\n  37: 'macromania',\n  38: 'maccenteuro',\n  39: 'maccenteuro',\n  40: 'maccenteuro',\n  143: 'macinuit',\n  // Unsupported by iconv-lite\n  146: 'macgaelic' // Unsupported by iconv-lite\n}; // Map of platform ids to BCP-47 language codes.\n\nvar LANGUAGES = [\n// unicode\n[], {\n  // macintosh\n  0: 'en',\n  30: 'fo',\n  60: 'ks',\n  90: 'rw',\n  1: 'fr',\n  31: 'fa',\n  61: 'ku',\n  91: 'rn',\n  2: 'de',\n  32: 'ru',\n  62: 'sd',\n  92: 'ny',\n  3: 'it',\n  33: 'zh',\n  63: 'bo',\n  93: 'mg',\n  4: 'nl',\n  34: 'nl-BE',\n  64: 'ne',\n  94: 'eo',\n  5: 'sv',\n  35: 'ga',\n  65: 'sa',\n  128: 'cy',\n  6: 'es',\n  36: 'sq',\n  66: 'mr',\n  129: 'eu',\n  7: 'da',\n  37: 'ro',\n  67: 'bn',\n  130: 'ca',\n  8: 'pt',\n  38: 'cz',\n  68: 'as',\n  131: 'la',\n  9: 'no',\n  39: 'sk',\n  69: 'gu',\n  132: 'qu',\n  10: 'he',\n  40: 'si',\n  70: 'pa',\n  133: 'gn',\n  11: 'ja',\n  41: 'yi',\n  71: 'or',\n  134: 'ay',\n  12: 'ar',\n  42: 'sr',\n  72: 'ml',\n  135: 'tt',\n  13: 'fi',\n  43: 'mk',\n  73: 'kn',\n  136: 'ug',\n  14: 'el',\n  44: 'bg',\n  74: 'ta',\n  137: 'dz',\n  15: 'is',\n  45: 'uk',\n  75: 'te',\n  138: 'jv',\n  16: 'mt',\n  46: 'be',\n  76: 'si',\n  139: 'su',\n  17: 'tr',\n  47: 'uz',\n  77: 'my',\n  140: 'gl',\n  18: 'hr',\n  48: 'kk',\n  78: 'km',\n  141: 'af',\n  19: 'zh-Hant',\n  49: 'az-Cyrl',\n  79: 'lo',\n  142: 'br',\n  20: 'ur',\n  50: 'az-Arab',\n  80: 'vi',\n  143: 'iu',\n  21: 'hi',\n  51: 'hy',\n  81: 'id',\n  144: 'gd',\n  22: 'th',\n  52: 'ka',\n  82: 'tl',\n  145: 'gv',\n  23: 'ko',\n  53: 'mo',\n  83: 'ms',\n  146: 'ga',\n  24: 'lt',\n  54: 'ky',\n  84: 'ms-Arab',\n  147: 'to',\n  25: 'pl',\n  55: 'tg',\n  85: 'am',\n  148: 'el-polyton',\n  26: 'hu',\n  56: 'tk',\n  86: 'ti',\n  149: 'kl',\n  27: 'es',\n  57: 'mn-CN',\n  87: 'om',\n  150: 'az',\n  28: 'lv',\n  58: 'mn',\n  88: 'so',\n  151: 'nn',\n  29: 'se',\n  59: 'ps',\n  89: 'sw'\n},\n// ISO (deprecated)\n[], {\n  // windows                                        \n  0x0436: 'af',\n  0x4009: 'en-IN',\n  0x0487: 'rw',\n  0x0432: 'tn',\n  0x041C: 'sq',\n  0x1809: 'en-IE',\n  0x0441: 'sw',\n  0x045B: 'si',\n  0x0484: 'gsw',\n  0x2009: 'en-JM',\n  0x0457: 'kok',\n  0x041B: 'sk',\n  0x045E: 'am',\n  0x4409: 'en-MY',\n  0x0412: 'ko',\n  0x0424: 'sl',\n  0x1401: 'ar-DZ',\n  0x1409: 'en-NZ',\n  0x0440: 'ky',\n  0x2C0A: 'es-AR',\n  0x3C01: 'ar-BH',\n  0x3409: 'en-PH',\n  0x0454: 'lo',\n  0x400A: 'es-BO',\n  0x0C01: 'ar',\n  0x4809: 'en-SG',\n  0x0426: 'lv',\n  0x340A: 'es-CL',\n  0x0801: 'ar-IQ',\n  0x1C09: 'en-ZA',\n  0x0427: 'lt',\n  0x240A: 'es-CO',\n  0x2C01: 'ar-JO',\n  0x2C09: 'en-TT',\n  0x082E: 'dsb',\n  0x140A: 'es-CR',\n  0x3401: 'ar-KW',\n  0x0809: 'en-GB',\n  0x046E: 'lb',\n  0x1C0A: 'es-DO',\n  0x3001: 'ar-LB',\n  0x0409: 'en',\n  0x042F: 'mk',\n  0x300A: 'es-EC',\n  0x1001: 'ar-LY',\n  0x3009: 'en-ZW',\n  0x083E: 'ms-BN',\n  0x440A: 'es-SV',\n  0x1801: 'ary',\n  0x0425: 'et',\n  0x043E: 'ms',\n  0x100A: 'es-GT',\n  0x2001: 'ar-OM',\n  0x0438: 'fo',\n  0x044C: 'ml',\n  0x480A: 'es-HN',\n  0x4001: 'ar-QA',\n  0x0464: 'fil',\n  0x043A: 'mt',\n  0x080A: 'es-MX',\n  0x0401: 'ar-SA',\n  0x040B: 'fi',\n  0x0481: 'mi',\n  0x4C0A: 'es-NI',\n  0x2801: 'ar-SY',\n  0x080C: 'fr-BE',\n  0x047A: 'arn',\n  0x180A: 'es-PA',\n  0x1C01: 'aeb',\n  0x0C0C: 'fr-CA',\n  0x044E: 'mr',\n  0x3C0A: 'es-PY',\n  0x3801: 'ar-AE',\n  0x040C: 'fr',\n  0x047C: 'moh',\n  0x280A: 'es-PE',\n  0x2401: 'ar-YE',\n  0x140C: 'fr-LU',\n  0x0450: 'mn',\n  0x500A: 'es-PR',\n  0x042B: 'hy',\n  0x180C: 'fr-MC',\n  0x0850: 'mn-CN',\n  0x0C0A: 'es',\n  0x044D: 'as',\n  0x100C: 'fr-CH',\n  0x0461: 'ne',\n  0x040A: 'es',\n  0x082C: 'az-Cyrl',\n  0x0462: 'fy',\n  0x0414: 'nb',\n  0x540A: 'es-US',\n  0x042C: 'az',\n  0x0456: 'gl',\n  0x0814: 'nn',\n  0x380A: 'es-UY',\n  0x046D: 'ba',\n  0x0437: 'ka',\n  0x0482: 'oc',\n  0x200A: 'es-VE',\n  0x042D: 'eu',\n  0x0C07: 'de-AT',\n  0x0448: 'or',\n  0x081D: 'sv-FI',\n  0x0423: 'be',\n  0x0407: 'de',\n  0x0463: 'ps',\n  0x041D: 'sv',\n  0x0845: 'bn',\n  0x1407: 'de-LI',\n  0x0415: 'pl',\n  0x045A: 'syr',\n  0x0445: 'bn-IN',\n  0x1007: 'de-LU',\n  0x0416: 'pt',\n  0x0428: 'tg',\n  0x201A: 'bs-Cyrl',\n  0x0807: 'de-CH',\n  0x0816: 'pt-PT',\n  0x085F: 'tzm',\n  0x141A: 'bs',\n  0x0408: 'el',\n  0x0446: 'pa',\n  0x0449: 'ta',\n  0x047E: 'br',\n  0x046F: 'kl',\n  0x046B: 'qu-BO',\n  0x0444: 'tt',\n  0x0402: 'bg',\n  0x0447: 'gu',\n  0x086B: 'qu-EC',\n  0x044A: 'te',\n  0x0403: 'ca',\n  0x0468: 'ha',\n  0x0C6B: 'qu',\n  0x041E: 'th',\n  0x0C04: 'zh-HK',\n  0x040D: 'he',\n  0x0418: 'ro',\n  0x0451: 'bo',\n  0x1404: 'zh-MO',\n  0x0439: 'hi',\n  0x0417: 'rm',\n  0x041F: 'tr',\n  0x0804: 'zh',\n  0x040E: 'hu',\n  0x0419: 'ru',\n  0x0442: 'tk',\n  0x1004: 'zh-SG',\n  0x040F: 'is',\n  0x243B: 'smn',\n  0x0480: 'ug',\n  0x0404: 'zh-TW',\n  0x0470: 'ig',\n  0x103B: 'smj-NO',\n  0x0422: 'uk',\n  0x0483: 'co',\n  0x0421: 'id',\n  0x143B: 'smj',\n  0x042E: 'hsb',\n  0x041A: 'hr',\n  0x045D: 'iu',\n  0x0C3B: 'se-FI',\n  0x0420: 'ur',\n  0x101A: 'hr-BA',\n  0x085D: 'iu-Latn',\n  0x043B: 'se',\n  0x0843: 'uz-Cyrl',\n  0x0405: 'cs',\n  0x083C: 'ga',\n  0x083B: 'se-SE',\n  0x0443: 'uz',\n  0x0406: 'da',\n  0x0434: 'xh',\n  0x203B: 'sms',\n  0x042A: 'vi',\n  0x048C: 'prs',\n  0x0435: 'zu',\n  0x183B: 'sma-NO',\n  0x0452: 'cy',\n  0x0465: 'dv',\n  0x0410: 'it',\n  0x1C3B: 'sms',\n  0x0488: 'wo',\n  0x0813: 'nl-BE',\n  0x0810: 'it-CH',\n  0x044F: 'sa',\n  0x0485: 'sah',\n  0x0413: 'nl',\n  0x0411: 'ja',\n  0x1C1A: 'sr-Cyrl-BA',\n  0x0478: 'ii',\n  0x0C09: 'en-AU',\n  0x044B: 'kn',\n  0x0C1A: 'sr',\n  0x046A: 'yo',\n  0x2809: 'en-BZ',\n  0x043F: 'kk',\n  0x181A: 'sr-Latn-BA',\n  0x1009: 'en-CA',\n  0x0453: 'km',\n  0x081A: 'sr-Latn',\n  0x2409: 'en-029',\n  0x0486: 'quc',\n  0x046C: 'nso'\n}];\nvar NameRecord = new r.Struct({\n  platformID: r.uint16,\n  encodingID: r.uint16,\n  languageID: r.uint16,\n  nameID: r.uint16,\n  length: r.uint16,\n  string: new r.Pointer(r.uint16, new r.String('length', function (t) {\n    return getEncoding(t.platformID, t.encodingID, t.languageID);\n  }), {\n    type: 'parent',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.parent.stringOffset;\n    },\n    allowNull: false\n  })\n});\nvar LangTagRecord = new r.Struct({\n  length: r.uint16,\n  tag: new r.Pointer(r.uint16, new r.String('length', 'utf16be'), {\n    type: 'parent',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.stringOffset;\n    }\n  })\n});\nvar NameTable = new r.VersionedStruct(r.uint16, {\n  0: {\n    count: r.uint16,\n    stringOffset: r.uint16,\n    records: new r.Array(NameRecord, 'count')\n  },\n  1: {\n    count: r.uint16,\n    stringOffset: r.uint16,\n    records: new r.Array(NameRecord, 'count'),\n    langTagCount: r.uint16,\n    langTags: new r.Array(LangTagRecord, 'langTagCount')\n  }\n});\nvar NAMES = ['copyright', 'fontFamily', 'fontSubfamily', 'uniqueSubfamily', 'fullName', 'version', 'postscriptName',\n// Note: A font may have only one PostScript name and that name must be ASCII.\n'trademark', 'manufacturer', 'designer', 'description', 'vendorURL', 'designerURL', 'license', 'licenseURL', null,\n// reserved\n'preferredFamily', 'preferredSubfamily', 'compatibleFull', 'sampleText', 'postscriptCIDFontName', 'wwsFamilyName', 'wwsSubfamilyName'];\nNameTable.process = function (stream) {\n  var records = {};\n  for (var _iterator = _createForOfIteratorHelperLoose(this.records), _step; !(_step = _iterator()).done;) {\n    var record = _step.value;\n    // find out what language this is for\n    var language = LANGUAGES[record.platformID][record.languageID];\n    if (language == null && this.langTags != null && record.languageID >= 0x8000) {\n      language = this.langTags[record.languageID - 0x8000].tag;\n    }\n    if (language == null) {\n      language = record.platformID + '-' + record.languageID;\n    } // if the nameID is >= 256, it is a font feature record (AAT)\n\n    var key = record.nameID >= 256 ? 'fontFeatures' : NAMES[record.nameID] || record.nameID;\n    if (records[key] == null) {\n      records[key] = {};\n    }\n    var obj = records[key];\n    if (record.nameID >= 256) {\n      obj = obj[record.nameID] || (obj[record.nameID] = {});\n    }\n    if (typeof record.string === 'string' || typeof obj[language] !== 'string') {\n      obj[language] = record.string;\n    }\n  }\n  this.records = records;\n};\nNameTable.preEncode = function () {\n  if (Array.isArray(this.records)) return;\n  this.version = 0;\n  var records = [];\n  for (var key in this.records) {\n    var val = this.records[key];\n    if (key === 'fontFeatures') continue;\n    records.push({\n      platformID: 3,\n      encodingID: 1,\n      languageID: 0x409,\n      nameID: NAMES.indexOf(key),\n      length: Buffer.byteLength(val.en, 'utf16le'),\n      string: val.en\n    });\n    if (key === 'postscriptName') {\n      records.push({\n        platformID: 1,\n        encodingID: 0,\n        languageID: 0,\n        nameID: NAMES.indexOf(key),\n        length: val.en.length,\n        string: val.en\n      });\n    }\n  }\n  this.records = records;\n  this.count = records.length;\n  this.stringOffset = NameTable.size(this, null, false);\n};\nvar OS2 = new r.VersionedStruct(r.uint16, {\n  header: {\n    xAvgCharWidth: r.int16,\n    // average weighted advance width of lower case letters and space\n    usWeightClass: r.uint16,\n    // visual weight of stroke in glyphs\n    usWidthClass: r.uint16,\n    // relative change from the normal aspect ratio (width to height ratio)\n    fsType: new r.Bitfield(r.uint16, [\n    // Indicates font embedding licensing rights\n    null, 'noEmbedding', 'viewOnly', 'editable', null, null, null, null, 'noSubsetting', 'bitmapOnly']),\n    ySubscriptXSize: r.int16,\n    // recommended horizontal size in pixels for subscripts\n    ySubscriptYSize: r.int16,\n    // recommended vertical size in pixels for subscripts\n    ySubscriptXOffset: r.int16,\n    // recommended horizontal offset for subscripts\n    ySubscriptYOffset: r.int16,\n    // recommended vertical offset form the baseline for subscripts\n    ySuperscriptXSize: r.int16,\n    // recommended horizontal size in pixels for superscripts\n    ySuperscriptYSize: r.int16,\n    // recommended vertical size in pixels for superscripts\n    ySuperscriptXOffset: r.int16,\n    // recommended horizontal offset for superscripts\n    ySuperscriptYOffset: r.int16,\n    // recommended vertical offset from the baseline for superscripts\n    yStrikeoutSize: r.int16,\n    // width of the strikeout stroke\n    yStrikeoutPosition: r.int16,\n    // position of the strikeout stroke relative to the baseline\n    sFamilyClass: r.int16,\n    // classification of font-family design\n    panose: new r.Array(r.uint8, 10),\n    // describe the visual characteristics of a given typeface\n    ulCharRange: new r.Array(r.uint32, 4),\n    vendorID: new r.String(4),\n    // four character identifier for the font vendor\n    fsSelection: new r.Bitfield(r.uint16, [\n    // bit field containing information about the font\n    'italic', 'underscore', 'negative', 'outlined', 'strikeout', 'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique']),\n    usFirstCharIndex: r.uint16,\n    // The minimum Unicode index in this font\n    usLastCharIndex: r.uint16 // The maximum Unicode index in this font\n  },\n\n  // The Apple version of this table ends here, but the Microsoft one continues on...\n  0: {},\n  1: {\n    typoAscender: r.int16,\n    typoDescender: r.int16,\n    typoLineGap: r.int16,\n    winAscent: r.uint16,\n    winDescent: r.uint16,\n    codePageRange: new r.Array(r.uint32, 2)\n  },\n  2: {\n    // these should be common with version 1 somehow\n    typoAscender: r.int16,\n    typoDescender: r.int16,\n    typoLineGap: r.int16,\n    winAscent: r.uint16,\n    winDescent: r.uint16,\n    codePageRange: new r.Array(r.uint32, 2),\n    xHeight: r.int16,\n    capHeight: r.int16,\n    defaultChar: r.uint16,\n    breakChar: r.uint16,\n    maxContent: r.uint16\n  },\n  5: {\n    typoAscender: r.int16,\n    typoDescender: r.int16,\n    typoLineGap: r.int16,\n    winAscent: r.uint16,\n    winDescent: r.uint16,\n    codePageRange: new r.Array(r.uint32, 2),\n    xHeight: r.int16,\n    capHeight: r.int16,\n    defaultChar: r.uint16,\n    breakChar: r.uint16,\n    maxContent: r.uint16,\n    usLowerOpticalPointSize: r.uint16,\n    usUpperOpticalPointSize: r.uint16\n  }\n});\nvar versions = OS2.versions;\nversions[3] = versions[4] = versions[2];\nvar post = new r.VersionedStruct(r.fixed32, {\n  header: {\n    // these fields exist at the top of all versions\n    italicAngle: r.fixed32,\n    // Italic angle in counter-clockwise degrees from the vertical.\n    underlinePosition: r.int16,\n    // Suggested distance of the top of the underline from the baseline\n    underlineThickness: r.int16,\n    // Suggested values for the underline thickness\n    isFixedPitch: r.uint32,\n    // Whether the font is monospaced\n    minMemType42: r.uint32,\n    // Minimum memory usage when a TrueType font is downloaded as a Type 42 font\n    maxMemType42: r.uint32,\n    // Maximum memory usage when a TrueType font is downloaded as a Type 42 font\n    minMemType1: r.uint32,\n    // Minimum memory usage when a TrueType font is downloaded as a Type 1 font\n    maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font\n  },\n\n  1: {},\n  // version 1 has no additional fields\n  2: {\n    numberOfGlyphs: r.uint16,\n    glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'),\n    names: new r.Array(new r.String(r.uint8))\n  },\n  2.5: {\n    numberOfGlyphs: r.uint16,\n    offsets: new r.Array(r.uint8, 'numberOfGlyphs')\n  },\n  3: {},\n  // version 3 has no additional fields\n  4: {\n    map: new r.Array(r.uint32, function (t) {\n      return t.parent.maxp.numGlyphs;\n    })\n  }\n});\nvar cvt = new r.Struct({\n  controlValues: new r.Array(r.int16)\n});\n\n// These instructions are known as the font program. The main use of this table\n// is for the definition of functions that are used in many different glyph programs.\n\nvar fpgm = new r.Struct({\n  instructions: new r.Array(r.uint8)\n});\nvar loca = new r.VersionedStruct('head.indexToLocFormat', {\n  0: {\n    offsets: new r.Array(r.uint16)\n  },\n  1: {\n    offsets: new r.Array(r.uint32)\n  }\n});\nloca.process = function () {\n  if (this.version === 0) {\n    for (var i = 0; i < this.offsets.length; i++) {\n      this.offsets[i] <<= 1;\n    }\n  }\n};\nloca.preEncode = function () {\n  if (this.version === 0) {\n    for (var i = 0; i < this.offsets.length; i++) {\n      this.offsets[i] >>>= 1;\n    }\n  }\n};\nvar prep = new r.Struct({\n  controlValueProgram: new r.Array(r.uint8)\n});\nvar glyf = new r.Array(new r.Buffer());\nvar CFFIndex = /*#__PURE__*/function () {\n  function CFFIndex(type) {\n    this.type = type;\n  }\n  var _proto = CFFIndex.prototype;\n  _proto.getCFFVersion = function getCFFVersion(ctx) {\n    while (ctx && !ctx.hdrSize) {\n      ctx = ctx.parent;\n    }\n    return ctx ? ctx.version : -1;\n  };\n  _proto.decode = function decode(stream, parent) {\n    var version = this.getCFFVersion(parent);\n    var count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE();\n    if (count === 0) {\n      return [];\n    }\n    var offSize = stream.readUInt8();\n    var offsetType;\n    if (offSize === 1) {\n      offsetType = r.uint8;\n    } else if (offSize === 2) {\n      offsetType = r.uint16;\n    } else if (offSize === 3) {\n      offsetType = r.uint24;\n    } else if (offSize === 4) {\n      offsetType = r.uint32;\n    } else {\n      throw new Error(\"Bad offset size in CFFIndex: \".concat(offSize, \" \").concat(stream.pos));\n    }\n    var ret = [];\n    var startPos = stream.pos + (count + 1) * offSize - 1;\n    var start = offsetType.decode(stream);\n    for (var i = 0; i < count; i++) {\n      var end = offsetType.decode(stream);\n      if (this.type != null) {\n        var pos = stream.pos;\n        stream.pos = startPos + start;\n        parent.length = end - start;\n        ret.push(this.type.decode(stream, parent));\n        stream.pos = pos;\n      } else {\n        ret.push({\n          offset: startPos + start,\n          length: end - start\n        });\n      }\n      start = end;\n    }\n    stream.pos = startPos + start;\n    return ret;\n  };\n  _proto.size = function size(arr, parent) {\n    var size = 2;\n    if (arr.length === 0) {\n      return size;\n    }\n    var type = this.type || new r.Buffer(); // find maximum offset to detminine offset type\n\n    var offset = 1;\n    for (var i = 0; i < arr.length; i++) {\n      var item = arr[i];\n      offset += type.size(item, parent);\n    }\n    var offsetType;\n    if (offset <= 0xff) {\n      offsetType = r.uint8;\n    } else if (offset <= 0xffff) {\n      offsetType = r.uint16;\n    } else if (offset <= 0xffffff) {\n      offsetType = r.uint24;\n    } else if (offset <= 0xffffffff) {\n      offsetType = r.uint32;\n    } else {\n      throw new Error(\"Bad offset in CFFIndex\");\n    }\n    size += 1 + offsetType.size() * (arr.length + 1);\n    size += offset - 1;\n    return size;\n  };\n  _proto.encode = function encode(stream, arr, parent) {\n    stream.writeUInt16BE(arr.length);\n    if (arr.length === 0) {\n      return;\n    }\n    var type = this.type || new r.Buffer(); // find maximum offset to detminine offset type\n\n    var sizes = [];\n    var offset = 1;\n    for (var _iterator2 = _createForOfIteratorHelperLoose(arr), _step2; !(_step2 = _iterator2()).done;) {\n      var item = _step2.value;\n      var s = type.size(item, parent);\n      sizes.push(s);\n      offset += s;\n    }\n    var offsetType;\n    if (offset <= 0xff) {\n      offsetType = r.uint8;\n    } else if (offset <= 0xffff) {\n      offsetType = r.uint16;\n    } else if (offset <= 0xffffff) {\n      offsetType = r.uint24;\n    } else if (offset <= 0xffffffff) {\n      offsetType = r.uint32;\n    } else {\n      throw new Error(\"Bad offset in CFFIndex\");\n    } // write offset size\n\n    stream.writeUInt8(offsetType.size()); // write elements\n\n    offset = 1;\n    offsetType.encode(stream, offset);\n    for (var _i22 = 0, _sizes = sizes; _i22 < _sizes.length; _i22++) {\n      var size = _sizes[_i22];\n      offset += size;\n      offsetType.encode(stream, offset);\n    }\n    for (var _iterator3 = _createForOfIteratorHelperLoose(arr), _step3; !(_step3 = _iterator3()).done;) {\n      var _item = _step3.value;\n      type.encode(stream, _item, parent);\n    }\n    return;\n  };\n  return CFFIndex;\n}();\nvar FLOAT_EOF = 0xf;\nvar FLOAT_LOOKUP = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'E', 'E-', null, '-'];\nvar FLOAT_ENCODE_LOOKUP = {\n  '.': 10,\n  'E': 11,\n  'E-': 12,\n  '-': 14\n};\nvar CFFOperand = /*#__PURE__*/function () {\n  function CFFOperand() {}\n  CFFOperand.decode = function decode(stream, value) {\n    if (32 <= value && value <= 246) {\n      return value - 139;\n    }\n    if (247 <= value && value <= 250) {\n      return (value - 247) * 256 + stream.readUInt8() + 108;\n    }\n    if (251 <= value && value <= 254) {\n      return -(value - 251) * 256 - stream.readUInt8() - 108;\n    }\n    if (value === 28) {\n      return stream.readInt16BE();\n    }\n    if (value === 29) {\n      return stream.readInt32BE();\n    }\n    if (value === 30) {\n      var str = '';\n      while (true) {\n        var b = stream.readUInt8();\n        var n1 = b >> 4;\n        if (n1 === FLOAT_EOF) {\n          break;\n        }\n        str += FLOAT_LOOKUP[n1];\n        var n2 = b & 15;\n        if (n2 === FLOAT_EOF) {\n          break;\n        }\n        str += FLOAT_LOOKUP[n2];\n      }\n      return parseFloat(str);\n    }\n    return null;\n  };\n  CFFOperand.size = function size(value) {\n    // if the value needs to be forced to the largest size (32 bit)\n    // e.g. for unknown pointers, set to 32768\n    if (value.forceLarge) {\n      value = 32768;\n    }\n    if ((value | 0) !== value) {\n      // floating point\n      var str = '' + value;\n      return 1 + Math.ceil((str.length + 1) / 2);\n    } else if (-107 <= value && value <= 107) {\n      return 1;\n    } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) {\n      return 2;\n    } else if (-32768 <= value && value <= 32767) {\n      return 3;\n    } else {\n      return 5;\n    }\n  };\n  CFFOperand.encode = function encode(stream, value) {\n    // if the value needs to be forced to the largest size (32 bit)\n    // e.g. for unknown pointers, save the old value and set to 32768\n    var val = Number(value);\n    if (value.forceLarge) {\n      stream.writeUInt8(29);\n      return stream.writeInt32BE(val);\n    } else if ((val | 0) !== val) {\n      // floating point\n      stream.writeUInt8(30);\n      var str = '' + val;\n      for (var i = 0; i < str.length; i += 2) {\n        var c1 = str[i];\n        var n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1;\n        if (i === str.length - 1) {\n          var n2 = FLOAT_EOF;\n        } else {\n          var c2 = str[i + 1];\n          var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2;\n        }\n        stream.writeUInt8(n1 << 4 | n2 & 15);\n      }\n      if (n2 !== FLOAT_EOF) {\n        return stream.writeUInt8(FLOAT_EOF << 4);\n      }\n    } else if (-107 <= val && val <= 107) {\n      return stream.writeUInt8(val + 139);\n    } else if (108 <= val && val <= 1131) {\n      val -= 108;\n      stream.writeUInt8((val >> 8) + 247);\n      return stream.writeUInt8(val & 0xff);\n    } else if (-1131 <= val && val <= -108) {\n      val = -val - 108;\n      stream.writeUInt8((val >> 8) + 251);\n      return stream.writeUInt8(val & 0xff);\n    } else if (-32768 <= val && val <= 32767) {\n      stream.writeUInt8(28);\n      return stream.writeInt16BE(val);\n    } else {\n      stream.writeUInt8(29);\n      return stream.writeInt32BE(val);\n    }\n  };\n  return CFFOperand;\n}();\nvar CFFDict = /*#__PURE__*/function () {\n  function CFFDict(ops) {\n    if (ops === void 0) {\n      ops = [];\n    }\n    this.ops = ops;\n    this.fields = {};\n    for (var _iterator4 = _createForOfIteratorHelperLoose(ops), _step4; !(_step4 = _iterator4()).done;) {\n      var field = _step4.value;\n      var key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0];\n      this.fields[key] = field;\n    }\n  }\n  var _proto2 = CFFDict.prototype;\n  _proto2.decodeOperands = function decodeOperands(type, stream, ret, operands) {\n    var _this = this;\n    if (Array.isArray(type)) {\n      return operands.map(function (op, i) {\n        return _this.decodeOperands(type[i], stream, ret, [op]);\n      });\n    } else if (type.decode != null) {\n      return type.decode(stream, ret, operands);\n    } else {\n      switch (type) {\n        case 'number':\n        case 'offset':\n        case 'sid':\n          return operands[0];\n        case 'boolean':\n          return !!operands[0];\n        default:\n          return operands;\n      }\n    }\n  };\n  _proto2.encodeOperands = function encodeOperands(type, stream, ctx, operands) {\n    var _this2 = this;\n    if (Array.isArray(type)) {\n      return operands.map(function (op, i) {\n        return _this2.encodeOperands(type[i], stream, ctx, op)[0];\n      });\n    } else if (type.encode != null) {\n      return type.encode(stream, operands, ctx);\n    } else if (typeof operands === 'number') {\n      return [operands];\n    } else if (typeof operands === 'boolean') {\n      return [+operands];\n    } else if (Array.isArray(operands)) {\n      return operands;\n    } else {\n      return [operands];\n    }\n  };\n  _proto2.decode = function decode(stream, parent) {\n    var end = stream.pos + parent.length;\n    var ret = {};\n    var operands = []; // define hidden properties\n\n    Object.defineProperties(ret, {\n      parent: {\n        value: parent\n      },\n      _startOffset: {\n        value: stream.pos\n      }\n    }); // fill in defaults\n\n    for (var key in this.fields) {\n      var field = this.fields[key];\n      ret[field[1]] = field[3];\n    }\n    while (stream.pos < end) {\n      var b = stream.readUInt8();\n      if (b < 28) {\n        if (b === 12) {\n          b = b << 8 | stream.readUInt8();\n        }\n        var _field = this.fields[b];\n        if (!_field) {\n          throw new Error(\"Unknown operator \".concat(b));\n        }\n        var val = this.decodeOperands(_field[2], stream, ret, operands);\n        if (val != null) {\n          if (val instanceof utils.PropertyDescriptor) {\n            Object.defineProperty(ret, _field[1], val);\n          } else {\n            ret[_field[1]] = val;\n          }\n        }\n        operands = [];\n      } else {\n        operands.push(CFFOperand.decode(stream, b));\n      }\n    }\n    return ret;\n  };\n  _proto2.size = function size(dict, parent, includePointers) {\n    if (includePointers === void 0) {\n      includePointers = true;\n    }\n    var ctx = {\n      parent: parent,\n      val: dict,\n      pointerSize: 0,\n      startOffset: parent.startOffset || 0\n    };\n    var len = 0;\n    for (var k in this.fields) {\n      var field = this.fields[k];\n      var val = dict[field[1]];\n      if (val == null || isEqual(val, field[3])) {\n        continue;\n      }\n      var operands = this.encodeOperands(field[2], null, ctx, val);\n      for (var _iterator5 = _createForOfIteratorHelperLoose(operands), _step5; !(_step5 = _iterator5()).done;) {\n        var op = _step5.value;\n        len += CFFOperand.size(op);\n      }\n      var key = Array.isArray(field[0]) ? field[0] : [field[0]];\n      len += key.length;\n    }\n    if (includePointers) {\n      len += ctx.pointerSize;\n    }\n    return len;\n  };\n  _proto2.encode = function encode(stream, dict, parent) {\n    var ctx = {\n      pointers: [],\n      startOffset: stream.pos,\n      parent: parent,\n      val: dict,\n      pointerSize: 0\n    };\n    ctx.pointerOffset = stream.pos + this.size(dict, ctx, false);\n    for (var _iterator6 = _createForOfIteratorHelperLoose(this.ops), _step6; !(_step6 = _iterator6()).done;) {\n      var field = _step6.value;\n      var val = dict[field[1]];\n      if (val == null || isEqual(val, field[3])) {\n        continue;\n      }\n      var operands = this.encodeOperands(field[2], stream, ctx, val);\n      for (var _iterator7 = _createForOfIteratorHelperLoose(operands), _step7; !(_step7 = _iterator7()).done;) {\n        var op = _step7.value;\n        CFFOperand.encode(stream, op);\n      }\n      var key = Array.isArray(field[0]) ? field[0] : [field[0]];\n      for (var _iterator8 = _createForOfIteratorHelperLoose(key), _step8; !(_step8 = _iterator8()).done;) {\n        var _op = _step8.value;\n        stream.writeUInt8(_op);\n      }\n    }\n    var i = 0;\n    while (i < ctx.pointers.length) {\n      var ptr = ctx.pointers[i++];\n      ptr.type.encode(stream, ptr.val, ptr.parent);\n    }\n    return;\n  };\n  return CFFDict;\n}();\nvar CFFPointer = /*#__PURE__*/function (_r$Pointer) {\n  _inheritsLoose(CFFPointer, _r$Pointer);\n  function CFFPointer(type, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    if (options.type == null) {\n      options.type = 'global';\n    }\n    return _r$Pointer.call(this, null, type, options) || this;\n  }\n  var _proto3 = CFFPointer.prototype;\n  _proto3.decode = function decode(stream, parent, operands) {\n    this.offsetType = {\n      decode: function decode() {\n        return operands[0];\n      }\n    };\n    return _r$Pointer.prototype.decode.call(this, stream, parent, operands);\n  };\n  _proto3.encode = function encode(stream, value, ctx) {\n    if (!stream) {\n      // compute the size (so ctx.pointerSize is correct)\n      this.offsetType = {\n        size: function size() {\n          return 0;\n        }\n      };\n      this.size(value, ctx);\n      return [new Ptr(0)];\n    }\n    var ptr = null;\n    this.offsetType = {\n      encode: function encode(stream, val) {\n        return ptr = val;\n      }\n    };\n    _r$Pointer.prototype.encode.call(this, stream, value, ctx);\n    return [new Ptr(ptr)];\n  };\n  return CFFPointer;\n}(r.Pointer);\nvar Ptr = /*#__PURE__*/function () {\n  function Ptr(val) {\n    this.val = val;\n    this.forceLarge = true;\n  }\n  var _proto4 = Ptr.prototype;\n  _proto4.valueOf = function valueOf() {\n    return this.val;\n  };\n  return Ptr;\n}();\nvar CFFBlendOp = /*#__PURE__*/function () {\n  function CFFBlendOp() {}\n  CFFBlendOp.decode = function decode(stream, parent, operands) {\n    var numBlends = operands.pop(); // TODO: actually blend. For now just consume the deltas\n    // since we don't use any of the values anyway.\n\n    while (operands.length > numBlends) {\n      operands.pop();\n    }\n  };\n  return CFFBlendOp;\n}();\nvar CFFPrivateDict = new CFFDict([\n// key       name                    type                                          default\n[6, 'BlueValues', 'delta', null], [7, 'OtherBlues', 'delta', null], [8, 'FamilyBlues', 'delta', null], [9, 'FamilyOtherBlues', 'delta', null], [[12, 9], 'BlueScale', 'number', 0.039625], [[12, 10], 'BlueShift', 'number', 7], [[12, 11], 'BlueFuzz', 'number', 1], [10, 'StdHW', 'number', null], [11, 'StdVW', 'number', null], [[12, 12], 'StemSnapH', 'delta', null], [[12, 13], 'StemSnapV', 'delta', null], [[12, 14], 'ForceBold', 'boolean', false], [[12, 17], 'LanguageGroup', 'number', 0], [[12, 18], 'ExpansionFactor', 'number', 0.06], [[12, 19], 'initialRandomSeed', 'number', 0], [20, 'defaultWidthX', 'number', 0], [21, 'nominalWidthX', 'number', 0], [22, 'vsindex', 'number', 0], [23, 'blend', CFFBlendOp, null], [19, 'Subrs', new CFFPointer(new CFFIndex(), {\n  type: 'local'\n}), null]]);\n\n// Automatically generated from Appendix A of the CFF specification; do\n// not edit. Length should be 391.\nvar standardStrings = [\".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\", \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\", \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\", \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\", \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\", \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\", \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\", \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\", \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\", \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\", \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\", \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\", \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\", \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\", \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\", \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\", \"ydieresis\", \"zcaron\", \"exclamsmall\", \"Hungarumlautsmall\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\", \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\", \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\", \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\", \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\", \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\", \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\", \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\", \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\", \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\", \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\", \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\", \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\", \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\", \"Black\", \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"];\nvar StandardEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', 'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls'];\nvar ExpertEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior', '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '', '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];\nvar ISOAdobeCharset = ['.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron'];\nvar ExpertCharset = ['.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];\nvar ExpertSubsetCharset = ['.notdef', 'space', 'dollaroldstyle', 'dollarsuperior', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted', 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter', 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior'];\n\n// Scripts and Languages #\n//########################\n\nvar LangSysTable = new r.Struct({\n  reserved: new r.Reserved(r.uint16),\n  reqFeatureIndex: r.uint16,\n  featureCount: r.uint16,\n  featureIndexes: new r.Array(r.uint16, 'featureCount')\n});\nvar LangSysRecord = new r.Struct({\n  tag: new r.String(4),\n  langSys: new r.Pointer(r.uint16, LangSysTable, {\n    type: 'parent'\n  })\n});\nvar Script = new r.Struct({\n  defaultLangSys: new r.Pointer(r.uint16, LangSysTable),\n  count: r.uint16,\n  langSysRecords: new r.Array(LangSysRecord, 'count')\n});\nvar ScriptRecord = new r.Struct({\n  tag: new r.String(4),\n  script: new r.Pointer(r.uint16, Script, {\n    type: 'parent'\n  })\n});\nvar ScriptList = new r.Array(ScriptRecord, r.uint16); //#######################\n// Features and Lookups #\n//#######################\n\nvar Feature = new r.Struct({\n  featureParams: r.uint16,\n  // pointer\n  lookupCount: r.uint16,\n  lookupListIndexes: new r.Array(r.uint16, 'lookupCount')\n});\nvar FeatureRecord = new r.Struct({\n  tag: new r.String(4),\n  feature: new r.Pointer(r.uint16, Feature, {\n    type: 'parent'\n  })\n});\nvar FeatureList = new r.Array(FeatureRecord, r.uint16);\nvar LookupFlags = new r.Struct({\n  markAttachmentType: r.uint8,\n  flags: new r.Bitfield(r.uint8, ['rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures', 'ignoreMarks', 'useMarkFilteringSet'])\n});\nfunction LookupList(SubTable) {\n  var Lookup = new r.Struct({\n    lookupType: r.uint16,\n    flags: LookupFlags,\n    subTableCount: r.uint16,\n    subTables: new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'),\n    markFilteringSet: new r.Optional(r.uint16, function (t) {\n      return t.flags.flags.useMarkFilteringSet;\n    })\n  });\n  return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16);\n} //#################\n// Coverage Table #\n//#################\n\nvar RangeRecord = new r.Struct({\n  start: r.uint16,\n  end: r.uint16,\n  startCoverageIndex: r.uint16\n});\nvar Coverage = new r.VersionedStruct(r.uint16, {\n  1: {\n    glyphCount: r.uint16,\n    glyphs: new r.Array(r.uint16, 'glyphCount')\n  },\n  2: {\n    rangeCount: r.uint16,\n    rangeRecords: new r.Array(RangeRecord, 'rangeCount')\n  }\n}); //#########################\n// Class Definition Table #\n//#########################\n\nvar ClassRangeRecord = new r.Struct({\n  start: r.uint16,\n  end: r.uint16,\n  class: r.uint16\n});\nvar ClassDef = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Class array\n    startGlyph: r.uint16,\n    glyphCount: r.uint16,\n    classValueArray: new r.Array(r.uint16, 'glyphCount')\n  },\n  2: {\n    // Class ranges\n    classRangeCount: r.uint16,\n    classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount')\n  }\n}); //###############\n// Device Table #\n//###############\n\nvar Device = new r.Struct({\n  a: r.uint16,\n  // startSize for hinting Device, outerIndex for VariationIndex\n  b: r.uint16,\n  // endSize for Device, innerIndex for VariationIndex\n  deltaFormat: r.uint16\n}); //#############################################\n// Contextual Substitution/Positioning Tables #\n//#############################################\n\nvar LookupRecord = new r.Struct({\n  sequenceIndex: r.uint16,\n  lookupListIndex: r.uint16\n});\nvar Rule = new r.Struct({\n  glyphCount: r.uint16,\n  lookupCount: r.uint16,\n  input: new r.Array(r.uint16, function (t) {\n    return t.glyphCount - 1;\n  }),\n  lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16);\nvar ClassRule = new r.Struct({\n  glyphCount: r.uint16,\n  lookupCount: r.uint16,\n  classes: new r.Array(r.uint16, function (t) {\n    return t.glyphCount - 1;\n  }),\n  lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16);\nvar Context = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Simple context\n    coverage: new r.Pointer(r.uint16, Coverage),\n    ruleSetCount: r.uint16,\n    ruleSets: new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount')\n  },\n  2: {\n    // Class-based context\n    coverage: new r.Pointer(r.uint16, Coverage),\n    classDef: new r.Pointer(r.uint16, ClassDef),\n    classSetCnt: r.uint16,\n    classSet: new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt')\n  },\n  3: {\n    glyphCount: r.uint16,\n    lookupCount: r.uint16,\n    coverages: new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'),\n    lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n  }\n}); //######################################################\n// Chaining Contextual Substitution/Positioning Tables #\n//######################################################\n\nvar ChainRule = new r.Struct({\n  backtrackGlyphCount: r.uint16,\n  backtrack: new r.Array(r.uint16, 'backtrackGlyphCount'),\n  inputGlyphCount: r.uint16,\n  input: new r.Array(r.uint16, function (t) {\n    return t.inputGlyphCount - 1;\n  }),\n  lookaheadGlyphCount: r.uint16,\n  lookahead: new r.Array(r.uint16, 'lookaheadGlyphCount'),\n  lookupCount: r.uint16,\n  lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16);\nvar ChainingContext = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Simple context glyph substitution\n    coverage: new r.Pointer(r.uint16, Coverage),\n    chainCount: r.uint16,\n    chainRuleSets: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n  },\n  2: {\n    // Class-based chaining context\n    coverage: new r.Pointer(r.uint16, Coverage),\n    backtrackClassDef: new r.Pointer(r.uint16, ClassDef),\n    inputClassDef: new r.Pointer(r.uint16, ClassDef),\n    lookaheadClassDef: new r.Pointer(r.uint16, ClassDef),\n    chainCount: r.uint16,\n    chainClassSet: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n  },\n  3: {\n    // Coverage-based chaining context\n    backtrackGlyphCount: r.uint16,\n    backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n    inputGlyphCount: r.uint16,\n    inputCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'),\n    lookaheadGlyphCount: r.uint16,\n    lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n    lookupCount: r.uint16,\n    lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n  }\n});\n\n/*******************\n * Variation Store *\n *******************/\n\nvar F2DOT14 = new r.Fixed(16, 'BE', 14);\nvar RegionAxisCoordinates = new r.Struct({\n  startCoord: F2DOT14,\n  peakCoord: F2DOT14,\n  endCoord: F2DOT14\n});\nvar VariationRegionList = new r.Struct({\n  axisCount: r.uint16,\n  regionCount: r.uint16,\n  variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount')\n});\nvar DeltaSet = new r.Struct({\n  shortDeltas: new r.Array(r.int16, function (t) {\n    return t.parent.shortDeltaCount;\n  }),\n  regionDeltas: new r.Array(r.int8, function (t) {\n    return t.parent.regionIndexCount - t.parent.shortDeltaCount;\n  }),\n  deltas: function deltas(t) {\n    return t.shortDeltas.concat(t.regionDeltas);\n  }\n});\nvar ItemVariationData = new r.Struct({\n  itemCount: r.uint16,\n  shortDeltaCount: r.uint16,\n  regionIndexCount: r.uint16,\n  regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),\n  deltaSets: new r.Array(DeltaSet, 'itemCount')\n});\nvar ItemVariationStore = new r.Struct({\n  format: r.uint16,\n  variationRegionList: new r.Pointer(r.uint32, VariationRegionList),\n  variationDataCount: r.uint16,\n  itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')\n});\n/**********************\n * Feature Variations *\n **********************/\n\nvar ConditionTable = new r.VersionedStruct(r.uint16, {\n  1: (_ = {\n    axisIndex: r.uint16\n  }, _[\"axisIndex\"] = r.uint16, _.filterRangeMinValue = F2DOT14, _.filterRangeMaxValue = F2DOT14, _)\n});\nvar ConditionSet = new r.Struct({\n  conditionCount: r.uint16,\n  conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')\n});\nvar FeatureTableSubstitutionRecord = new r.Struct({\n  featureIndex: r.uint16,\n  alternateFeatureTable: new r.Pointer(r.uint32, Feature, {\n    type: 'parent'\n  })\n});\nvar FeatureTableSubstitution = new r.Struct({\n  version: r.fixed32,\n  substitutionCount: r.uint16,\n  substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount')\n});\nvar FeatureVariationRecord = new r.Struct({\n  conditionSet: new r.Pointer(r.uint32, ConditionSet, {\n    type: 'parent'\n  }),\n  featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, {\n    type: 'parent'\n  })\n});\nvar FeatureVariations = new r.Struct({\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  featureVariationRecordCount: r.uint32,\n  featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount')\n});\n\n// otherwise delegates to the provided type.\nvar PredefinedOp = /*#__PURE__*/function () {\n  function PredefinedOp(predefinedOps, type) {\n    this.predefinedOps = predefinedOps;\n    this.type = type;\n  }\n  var _proto5 = PredefinedOp.prototype;\n  _proto5.decode = function decode(stream, parent, operands) {\n    if (this.predefinedOps[operands[0]]) {\n      return this.predefinedOps[operands[0]];\n    }\n    return this.type.decode(stream, parent, operands);\n  };\n  _proto5.size = function size(value, ctx) {\n    return this.type.size(value, ctx);\n  };\n  _proto5.encode = function encode(stream, value, ctx) {\n    var index = this.predefinedOps.indexOf(value);\n    if (index !== -1) {\n      return index;\n    }\n    return this.type.encode(stream, value, ctx);\n  };\n  return PredefinedOp;\n}();\nvar CFFEncodingVersion = /*#__PURE__*/function (_r$Number) {\n  _inheritsLoose(CFFEncodingVersion, _r$Number);\n  function CFFEncodingVersion() {\n    return _r$Number.call(this, 'UInt8') || this;\n  }\n  var _proto6 = CFFEncodingVersion.prototype;\n  _proto6.decode = function decode(stream) {\n    return r.uint8.decode(stream) & 0x7f;\n  };\n  return CFFEncodingVersion;\n}(r.Number);\nvar Range1 = new r.Struct({\n  first: r.uint16,\n  nLeft: r.uint8\n});\nvar Range2 = new r.Struct({\n  first: r.uint16,\n  nLeft: r.uint16\n});\nvar CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), {\n  0: {\n    nCodes: r.uint8,\n    codes: new r.Array(r.uint8, 'nCodes')\n  },\n  1: {\n    nRanges: r.uint8,\n    ranges: new r.Array(Range1, 'nRanges')\n  } // TODO: supplement?\n});\n\nvar CFFEncoding = new PredefinedOp([StandardEncoding, ExpertEncoding], new CFFPointer(CFFCustomEncoding, {\n  lazy: true\n})); // Decodes an array of ranges until the total\n// length is equal to the provided length.\nvar RangeArray = /*#__PURE__*/function (_r$Array) {\n  _inheritsLoose(RangeArray, _r$Array);\n  function RangeArray() {\n    return _r$Array.apply(this, arguments) || this;\n  }\n  var _proto7 = RangeArray.prototype;\n  _proto7.decode = function decode(stream, parent) {\n    var length = utils.resolveLength(this.length, stream, parent);\n    var count = 0;\n    var res = [];\n    while (count < length) {\n      var range = this.type.decode(stream, parent);\n      range.offset = count;\n      count += range.nLeft + 1;\n      res.push(range);\n    }\n    return res;\n  };\n  return RangeArray;\n}(r.Array);\nvar CFFCustomCharset = new r.VersionedStruct(r.uint8, {\n  0: {\n    glyphs: new r.Array(r.uint16, function (t) {\n      return t.parent.CharStrings.length - 1;\n    })\n  },\n  1: {\n    ranges: new RangeArray(Range1, function (t) {\n      return t.parent.CharStrings.length - 1;\n    })\n  },\n  2: {\n    ranges: new RangeArray(Range2, function (t) {\n      return t.parent.CharStrings.length - 1;\n    })\n  }\n});\nvar CFFCharset = new PredefinedOp([ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset], new CFFPointer(CFFCustomCharset, {\n  lazy: true\n}));\nvar FDRange3 = new r.Struct({\n  first: r.uint16,\n  fd: r.uint8\n});\nvar FDRange4 = new r.Struct({\n  first: r.uint32,\n  fd: r.uint16\n});\nvar FDSelect = new r.VersionedStruct(r.uint8, {\n  0: {\n    fds: new r.Array(r.uint8, function (t) {\n      return t.parent.CharStrings.length;\n    })\n  },\n  3: {\n    nRanges: r.uint16,\n    ranges: new r.Array(FDRange3, 'nRanges'),\n    sentinel: r.uint16\n  },\n  4: {\n    nRanges: r.uint32,\n    ranges: new r.Array(FDRange4, 'nRanges'),\n    sentinel: r.uint32\n  }\n});\nvar ptr = new CFFPointer(CFFPrivateDict);\nvar CFFPrivateOp = /*#__PURE__*/function () {\n  function CFFPrivateOp() {}\n  var _proto8 = CFFPrivateOp.prototype;\n  _proto8.decode = function decode(stream, parent, operands) {\n    parent.length = operands[0];\n    return ptr.decode(stream, parent, [operands[1]]);\n  };\n  _proto8.size = function size(dict, ctx) {\n    return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]];\n  };\n  _proto8.encode = function encode(stream, dict, ctx) {\n    return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]];\n  };\n  return CFFPrivateOp;\n}();\nvar FontDict = new CFFDict([\n// key       name                   type(s)                                 default\n[18, 'Private', new CFFPrivateOp(), null], [[12, 38], 'FontName', 'sid', null], [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [[12, 5], 'PaintType', 'number', 0]]);\nvar CFFTopDict = new CFFDict([\n// key       name                   type(s)                                 default\n[[12, 30], 'ROS', ['sid', 'sid', 'number'], null], [0, 'version', 'sid', null], [1, 'Notice', 'sid', null], [[12, 0], 'Copyright', 'sid', null], [2, 'FullName', 'sid', null], [3, 'FamilyName', 'sid', null], [4, 'Weight', 'sid', null], [[12, 1], 'isFixedPitch', 'boolean', false], [[12, 2], 'ItalicAngle', 'number', 0], [[12, 3], 'UnderlinePosition', 'number', -100], [[12, 4], 'UnderlineThickness', 'number', 50], [[12, 5], 'PaintType', 'number', 0], [[12, 6], 'CharstringType', 'number', 2], [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [13, 'UniqueID', 'number', null], [5, 'FontBBox', 'array', [0, 0, 0, 0]], [[12, 8], 'StrokeWidth', 'number', 0], [14, 'XUID', 'array', null], [15, 'charset', CFFCharset, ISOAdobeCharset], [16, 'Encoding', CFFEncoding, StandardEncoding], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [18, 'Private', new CFFPrivateOp(), null], [[12, 20], 'SyntheticBase', 'number', null], [[12, 21], 'PostScript', 'sid', null], [[12, 22], 'BaseFontName', 'sid', null], [[12, 23], 'BaseFontBlend', 'delta', null],\n// CID font specific\n[[12, 31], 'CIDFontVersion', 'number', 0], [[12, 32], 'CIDFontRevision', 'number', 0], [[12, 33], 'CIDFontType', 'number', 0], [[12, 34], 'CIDCount', 'number', 8720], [[12, 35], 'UIDBase', 'number', null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [[12, 38], 'FontName', 'sid', null]]);\nvar VariationStore = new r.Struct({\n  length: r.uint16,\n  itemVariationStore: ItemVariationStore\n});\nvar CFF2TopDict = new CFFDict([[[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [24, 'vstore', new CFFPointer(VariationStore), null], [25, 'maxstack', 'number', 193]]);\nvar CFFTop = new r.VersionedStruct(r.fixed16, {\n  1: {\n    hdrSize: r.uint8,\n    offSize: r.uint8,\n    nameIndex: new CFFIndex(new r.String('length')),\n    topDictIndex: new CFFIndex(CFFTopDict),\n    stringIndex: new CFFIndex(new r.String('length')),\n    globalSubrIndex: new CFFIndex()\n  },\n  2: {\n    hdrSize: r.uint8,\n    length: r.uint16,\n    topDict: CFF2TopDict,\n    globalSubrIndex: new CFFIndex()\n  }\n});\nvar CFFFont = /*#__PURE__*/function () {\n  function CFFFont(stream) {\n    this.stream = stream;\n    this.decode();\n  }\n  CFFFont.decode = function decode(stream) {\n    return new CFFFont(stream);\n  };\n  var _proto9 = CFFFont.prototype;\n  _proto9.decode = function decode() {\n    var start = this.stream.pos;\n    var top = CFFTop.decode(this.stream);\n    for (var key in top) {\n      var val = top[key];\n      this[key] = val;\n    }\n    if (this.version < 2) {\n      if (this.topDictIndex.length !== 1) {\n        throw new Error(\"Only a single font is allowed in CFF\");\n      }\n      this.topDict = this.topDictIndex[0];\n    }\n    this.isCIDFont = this.topDict.ROS != null;\n    return this;\n  };\n  _proto9.string = function string(sid) {\n    if (this.version >= 2) {\n      return null;\n    }\n    if (sid < standardStrings.length) {\n      return standardStrings[sid];\n    }\n    return this.stringIndex[sid - standardStrings.length];\n  };\n  _proto9.getCharString = function getCharString(glyph) {\n    this.stream.pos = this.topDict.CharStrings[glyph].offset;\n    return this.stream.readBuffer(this.topDict.CharStrings[glyph].length);\n  };\n  _proto9.getGlyphName = function getGlyphName(gid) {\n    // CFF2 glyph names are in the post table.\n    if (this.version >= 2) {\n      return null;\n    } // CID-keyed fonts don't have glyph names\n\n    if (this.isCIDFont) {\n      return null;\n    }\n    var charset = this.topDict.charset;\n    if (Array.isArray(charset)) {\n      return charset[gid];\n    }\n    if (gid === 0) {\n      return '.notdef';\n    }\n    gid -= 1;\n    switch (charset.version) {\n      case 0:\n        return this.string(charset.glyphs[gid]);\n      case 1:\n      case 2:\n        for (var i = 0; i < charset.ranges.length; i++) {\n          var range = charset.ranges[i];\n          if (range.offset <= gid && gid <= range.offset + range.nLeft) {\n            return this.string(range.first + (gid - range.offset));\n          }\n        }\n        break;\n    }\n    return null;\n  };\n  _proto9.fdForGlyph = function fdForGlyph(gid) {\n    if (!this.topDict.FDSelect) {\n      return null;\n    }\n    switch (this.topDict.FDSelect.version) {\n      case 0:\n        return this.topDict.FDSelect.fds[gid];\n      case 3:\n      case 4:\n        var ranges = this.topDict.FDSelect.ranges;\n        var low = 0;\n        var high = ranges.length - 1;\n        while (low <= high) {\n          var mid = low + high >> 1;\n          if (gid < ranges[mid].first) {\n            high = mid - 1;\n          } else if (mid < high && gid >= ranges[mid + 1].first) {\n            low = mid + 1;\n          } else {\n            return ranges[mid].fd;\n          }\n        }\n      default:\n        throw new Error(\"Unknown FDSelect version: \".concat(this.topDict.FDSelect.version));\n    }\n  };\n  _proto9.privateDictForGlyph = function privateDictForGlyph(gid) {\n    if (this.topDict.FDSelect) {\n      var fd = this.fdForGlyph(gid);\n      if (this.topDict.FDArray[fd]) {\n        return this.topDict.FDArray[fd].Private;\n      }\n      return null;\n    }\n    if (this.version < 2) {\n      return this.topDict.Private;\n    }\n    return this.topDict.FDArray[0].Private;\n  };\n  _createClass(CFFFont, [{\n    key: \"postscriptName\",\n    get: function get() {\n      if (this.version < 2) {\n        return this.nameIndex[0];\n      }\n      return null;\n    }\n  }, {\n    key: \"fullName\",\n    get: function get() {\n      return this.string(this.topDict.FullName);\n    }\n  }, {\n    key: \"familyName\",\n    get: function get() {\n      return this.string(this.topDict.FamilyName);\n    }\n  }]);\n  return CFFFont;\n}();\nvar VerticalOrigin = new r.Struct({\n  glyphIndex: r.uint16,\n  vertOriginY: r.int16\n});\nvar VORG = new r.Struct({\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  defaultVertOriginY: r.int16,\n  numVertOriginYMetrics: r.uint16,\n  metrics: new r.Array(VerticalOrigin, 'numVertOriginYMetrics')\n});\nvar BigMetrics = new r.Struct({\n  height: r.uint8,\n  width: r.uint8,\n  horiBearingX: r.int8,\n  horiBearingY: r.int8,\n  horiAdvance: r.uint8,\n  vertBearingX: r.int8,\n  vertBearingY: r.int8,\n  vertAdvance: r.uint8\n});\nvar SmallMetrics = new r.Struct({\n  height: r.uint8,\n  width: r.uint8,\n  bearingX: r.int8,\n  bearingY: r.int8,\n  advance: r.uint8\n});\nvar EBDTComponent = new r.Struct({\n  glyph: r.uint16,\n  xOffset: r.int8,\n  yOffset: r.int8\n});\nvar ByteAligned = function ByteAligned() {};\nvar BitAligned = function BitAligned() {};\nvar glyph = new r.VersionedStruct('version', {\n  1: {\n    metrics: SmallMetrics,\n    data: ByteAligned\n  },\n  2: {\n    metrics: SmallMetrics,\n    data: BitAligned\n  },\n  // format 3 is deprecated\n  // format 4 is not supported by Microsoft\n  5: {\n    data: BitAligned\n  },\n  6: {\n    metrics: BigMetrics,\n    data: ByteAligned\n  },\n  7: {\n    metrics: BigMetrics,\n    data: BitAligned\n  },\n  8: {\n    metrics: SmallMetrics,\n    pad: new r.Reserved(r.uint8),\n    numComponents: r.uint16,\n    components: new r.Array(EBDTComponent, 'numComponents')\n  },\n  9: {\n    metrics: BigMetrics,\n    pad: new r.Reserved(r.uint8),\n    numComponents: r.uint16,\n    components: new r.Array(EBDTComponent, 'numComponents')\n  },\n  17: {\n    metrics: SmallMetrics,\n    dataLen: r.uint32,\n    data: new r.Buffer('dataLen')\n  },\n  18: {\n    metrics: BigMetrics,\n    dataLen: r.uint32,\n    data: new r.Buffer('dataLen')\n  },\n  19: {\n    dataLen: r.uint32,\n    data: new r.Buffer('dataLen')\n  }\n});\nvar SBitLineMetrics = new r.Struct({\n  ascender: r.int8,\n  descender: r.int8,\n  widthMax: r.uint8,\n  caretSlopeNumerator: r.int8,\n  caretSlopeDenominator: r.int8,\n  caretOffset: r.int8,\n  minOriginSB: r.int8,\n  minAdvanceSB: r.int8,\n  maxBeforeBL: r.int8,\n  minAfterBL: r.int8,\n  pad: new r.Reserved(r.int8, 2)\n});\nvar CodeOffsetPair = new r.Struct({\n  glyphCode: r.uint16,\n  offset: r.uint16\n});\nvar IndexSubtable = new r.VersionedStruct(r.uint16, {\n  header: {\n    imageFormat: r.uint16,\n    imageDataOffset: r.uint32\n  },\n  1: {\n    offsetArray: new r.Array(r.uint32, function (t) {\n      return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1;\n    })\n  },\n  2: {\n    imageSize: r.uint32,\n    bigMetrics: BigMetrics\n  },\n  3: {\n    offsetArray: new r.Array(r.uint16, function (t) {\n      return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1;\n    })\n  },\n  4: {\n    numGlyphs: r.uint32,\n    glyphArray: new r.Array(CodeOffsetPair, function (t) {\n      return t.numGlyphs + 1;\n    })\n  },\n  5: {\n    imageSize: r.uint32,\n    bigMetrics: BigMetrics,\n    numGlyphs: r.uint32,\n    glyphCodeArray: new r.Array(r.uint16, 'numGlyphs')\n  }\n});\nvar IndexSubtableArray = new r.Struct({\n  firstGlyphIndex: r.uint16,\n  lastGlyphIndex: r.uint16,\n  subtable: new r.Pointer(r.uint32, IndexSubtable)\n});\nvar BitmapSizeTable = new r.Struct({\n  indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), {\n    type: 'parent'\n  }),\n  indexTablesSize: r.uint32,\n  numberOfIndexSubTables: r.uint32,\n  colorRef: r.uint32,\n  hori: SBitLineMetrics,\n  vert: SBitLineMetrics,\n  startGlyphIndex: r.uint16,\n  endGlyphIndex: r.uint16,\n  ppemX: r.uint8,\n  ppemY: r.uint8,\n  bitDepth: r.uint8,\n  flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical'])\n});\nvar EBLC = new r.Struct({\n  version: r.uint32,\n  // 0x00020000\n  numSizes: r.uint32,\n  sizes: new r.Array(BitmapSizeTable, 'numSizes')\n});\nvar ImageTable = new r.Struct({\n  ppem: r.uint16,\n  resolution: r.uint16,\n  imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), function (t) {\n    return t.parent.parent.maxp.numGlyphs + 1;\n  })\n}); // This is the Apple sbix table, used by the \"Apple Color Emoji\" font.\n// It includes several image tables with images for each bitmap glyph\n// of several different sizes.\n\nvar sbix = new r.Struct({\n  version: r.uint16,\n  flags: new r.Bitfield(r.uint16, ['renderOutlines']),\n  numImgTables: r.uint32,\n  imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables')\n});\nvar LayerRecord = new r.Struct({\n  gid: r.uint16,\n  // Glyph ID of layer glyph (must be in z-order from bottom to top).\n  paletteIndex: r.uint16 // Index value to use in the appropriate palette. This value must\n}); // be less than numPaletteEntries in the CPAL table, except for\n// the special case noted below. Each palette entry is 16 bits.\n// A palette index of 0xFFFF is a special case indicating that\n// the text foreground color should be used.\n\nvar BaseGlyphRecord = new r.Struct({\n  gid: r.uint16,\n  // Glyph ID of reference glyph. This glyph is for reference only\n  // and is not rendered for color.\n  firstLayerIndex: r.uint16,\n  // Index (from beginning of the Layer Records) to the layer record.\n  // There will be numLayers consecutive entries for this base glyph.\n  numLayers: r.uint16\n});\nvar COLR = new r.Struct({\n  version: r.uint16,\n  numBaseGlyphRecords: r.uint16,\n  baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')),\n  layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), {\n    lazy: true\n  }),\n  numLayerRecords: r.uint16\n});\nvar ColorRecord = new r.Struct({\n  blue: r.uint8,\n  green: r.uint8,\n  red: r.uint8,\n  alpha: r.uint8\n});\nvar CPAL = new r.VersionedStruct(r.uint16, {\n  header: {\n    numPaletteEntries: r.uint16,\n    numPalettes: r.uint16,\n    numColorRecords: r.uint16,\n    colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')),\n    colorRecordIndices: new r.Array(r.uint16, 'numPalettes')\n  },\n  0: {},\n  1: {\n    offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')),\n    offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')),\n    offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries'))\n  }\n});\nvar BaseCoord = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Design units only\n    coordinate: r.int16 // X or Y value, in design units\n  },\n\n  2: {\n    // Design units plus contour point\n    coordinate: r.int16,\n    // X or Y value, in design units\n    referenceGlyph: r.uint16,\n    // GlyphID of control glyph\n    baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph\n  },\n\n  3: {\n    // Design units plus Device table\n    coordinate: r.int16,\n    // X or Y value, in design units\n    deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value\n  }\n});\n\nvar BaseValues = new r.Struct({\n  defaultIndex: r.uint16,\n  // Index of default baseline for this script-same index in the BaseTagList\n  baseCoordCount: r.uint16,\n  baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCoordCount')\n});\nvar FeatMinMaxRecord = new r.Struct({\n  tag: new r.String(4),\n  // 4-byte feature identification tag-must match FeatureTag in FeatureList\n  minCoord: new r.Pointer(r.uint16, BaseCoord, {\n    type: 'parent'\n  }),\n  // May be NULL\n  maxCoord: new r.Pointer(r.uint16, BaseCoord, {\n    type: 'parent'\n  }) // May be NULL\n});\n\nvar MinMax = new r.Struct({\n  minCoord: new r.Pointer(r.uint16, BaseCoord),\n  // May be NULL\n  maxCoord: new r.Pointer(r.uint16, BaseCoord),\n  // May be NULL\n  featMinMaxCount: r.uint16,\n  // May be 0\n  featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order\n});\n\nvar BaseLangSysRecord = new r.Struct({\n  tag: new r.String(4),\n  // 4-byte language system identification tag\n  minMax: new r.Pointer(r.uint16, MinMax, {\n    type: 'parent'\n  })\n});\nvar BaseScript = new r.Struct({\n  baseValues: new r.Pointer(r.uint16, BaseValues),\n  // May be NULL\n  defaultMinMax: new r.Pointer(r.uint16, MinMax),\n  // May be NULL\n  baseLangSysCount: r.uint16,\n  // May be 0\n  baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag\n});\n\nvar BaseScriptRecord = new r.Struct({\n  tag: new r.String(4),\n  // 4-byte script identification tag\n  script: new r.Pointer(r.uint16, BaseScript, {\n    type: 'parent'\n  })\n});\nvar BaseScriptList = new r.Array(BaseScriptRecord, r.uint16); // Array of 4-byte baseline identification tags-must be in alphabetical order\n\nvar BaseTagList = new r.Array(new r.String(4), r.uint16);\nvar Axis = new r.Struct({\n  baseTagList: new r.Pointer(r.uint16, BaseTagList),\n  // May be NULL\n  baseScriptList: new r.Pointer(r.uint16, BaseScriptList)\n});\nvar BASE = new r.VersionedStruct(r.uint32, {\n  header: {\n    horizAxis: new r.Pointer(r.uint16, Axis),\n    // May be NULL\n    vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL\n  },\n\n  0x00010000: {},\n  0x00010001: {\n    itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n  }\n});\nvar AttachPoint = new r.Array(r.uint16, r.uint16);\nvar AttachList = new r.Struct({\n  coverage: new r.Pointer(r.uint16, Coverage),\n  glyphCount: r.uint16,\n  attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount')\n});\nvar CaretValue = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Design units only\n    coordinate: r.int16\n  },\n  2: {\n    // Contour point\n    caretValuePoint: r.uint16\n  },\n  3: {\n    // Design units plus Device table\n    coordinate: r.int16,\n    deviceTable: new r.Pointer(r.uint16, Device)\n  }\n});\nvar LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);\nvar LigCaretList = new r.Struct({\n  coverage: new r.Pointer(r.uint16, Coverage),\n  ligGlyphCount: r.uint16,\n  ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount')\n});\nvar MarkGlyphSetsDef = new r.Struct({\n  markSetTableFormat: r.uint16,\n  markSetCount: r.uint16,\n  coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount')\n});\nvar GDEF = new r.VersionedStruct(r.uint32, {\n  header: {\n    glyphClassDef: new r.Pointer(r.uint16, ClassDef),\n    attachList: new r.Pointer(r.uint16, AttachList),\n    ligCaretList: new r.Pointer(r.uint16, LigCaretList),\n    markAttachClassDef: new r.Pointer(r.uint16, ClassDef)\n  },\n  0x00010000: {},\n  0x00010002: {\n    markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef)\n  },\n  0x00010003: {\n    markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef),\n    itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n  }\n});\nvar ValueFormat = new r.Bitfield(r.uint16, ['xPlacement', 'yPlacement', 'xAdvance', 'yAdvance', 'xPlaDevice', 'yPlaDevice', 'xAdvDevice', 'yAdvDevice']);\nvar types = {\n  xPlacement: r.int16,\n  yPlacement: r.int16,\n  xAdvance: r.int16,\n  yAdvance: r.int16,\n  xPlaDevice: new r.Pointer(r.uint16, Device, {\n    type: 'global',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.rel;\n    }\n  }),\n  yPlaDevice: new r.Pointer(r.uint16, Device, {\n    type: 'global',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.rel;\n    }\n  }),\n  xAdvDevice: new r.Pointer(r.uint16, Device, {\n    type: 'global',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.rel;\n    }\n  }),\n  yAdvDevice: new r.Pointer(r.uint16, Device, {\n    type: 'global',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.rel;\n    }\n  })\n};\nvar ValueRecord = /*#__PURE__*/function () {\n  function ValueRecord(key) {\n    if (key === void 0) {\n      key = 'valueFormat';\n    }\n    this.key = key;\n  }\n  var _proto10 = ValueRecord.prototype;\n  _proto10.buildStruct = function buildStruct(parent) {\n    var struct = parent;\n    while (!struct[this.key] && struct.parent) {\n      struct = struct.parent;\n    }\n    if (!struct[this.key]) return;\n    var fields = {};\n    fields.rel = function () {\n      return struct._startOffset;\n    };\n    var format = struct[this.key];\n    for (var key in format) {\n      if (format[key]) {\n        fields[key] = types[key];\n      }\n    }\n    return new r.Struct(fields);\n  };\n  _proto10.size = function size(val, ctx) {\n    return this.buildStruct(ctx).size(val, ctx);\n  };\n  _proto10.decode = function decode(stream, parent) {\n    var res = this.buildStruct(parent).decode(stream, parent);\n    delete res.rel;\n    return res;\n  };\n  return ValueRecord;\n}();\nvar PairValueRecord = new r.Struct({\n  secondGlyph: r.uint16,\n  value1: new ValueRecord('valueFormat1'),\n  value2: new ValueRecord('valueFormat2')\n});\nvar PairSet = new r.Array(PairValueRecord, r.uint16);\nvar Class2Record = new r.Struct({\n  value1: new ValueRecord('valueFormat1'),\n  value2: new ValueRecord('valueFormat2')\n});\nvar Anchor = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Design units only\n    xCoordinate: r.int16,\n    yCoordinate: r.int16\n  },\n  2: {\n    // Design units plus contour point\n    xCoordinate: r.int16,\n    yCoordinate: r.int16,\n    anchorPoint: r.uint16\n  },\n  3: {\n    // Design units plus Device tables\n    xCoordinate: r.int16,\n    yCoordinate: r.int16,\n    xDeviceTable: new r.Pointer(r.uint16, Device),\n    yDeviceTable: new r.Pointer(r.uint16, Device)\n  }\n});\nvar EntryExitRecord = new r.Struct({\n  entryAnchor: new r.Pointer(r.uint16, Anchor, {\n    type: 'parent'\n  }),\n  exitAnchor: new r.Pointer(r.uint16, Anchor, {\n    type: 'parent'\n  })\n});\nvar MarkRecord = new r.Struct({\n  class: r.uint16,\n  markAnchor: new r.Pointer(r.uint16, Anchor, {\n    type: 'parent'\n  })\n});\nvar MarkArray = new r.Array(MarkRecord, r.uint16);\nvar BaseRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) {\n  return t.parent.classCount;\n});\nvar BaseArray = new r.Array(BaseRecord, r.uint16);\nvar ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) {\n  return t.parent.parent.classCount;\n});\nvar LigatureAttach = new r.Array(ComponentRecord, r.uint16);\nvar LigatureArray = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16);\nvar GPOSLookup = new r.VersionedStruct('lookupType', {\n  1: new r.VersionedStruct(r.uint16, {\n    // Single Adjustment\n    1: {\n      // Single positioning value\n      coverage: new r.Pointer(r.uint16, Coverage),\n      valueFormat: ValueFormat,\n      value: new ValueRecord()\n    },\n    2: {\n      coverage: new r.Pointer(r.uint16, Coverage),\n      valueFormat: ValueFormat,\n      valueCount: r.uint16,\n      values: new r.LazyArray(new ValueRecord(), 'valueCount')\n    }\n  }),\n  2: new r.VersionedStruct(r.uint16, {\n    // Pair Adjustment Positioning\n    1: {\n      // Adjustments for glyph pairs\n      coverage: new r.Pointer(r.uint16, Coverage),\n      valueFormat1: ValueFormat,\n      valueFormat2: ValueFormat,\n      pairSetCount: r.uint16,\n      pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount')\n    },\n    2: {\n      // Class pair adjustment\n      coverage: new r.Pointer(r.uint16, Coverage),\n      valueFormat1: ValueFormat,\n      valueFormat2: ValueFormat,\n      classDef1: new r.Pointer(r.uint16, ClassDef),\n      classDef2: new r.Pointer(r.uint16, ClassDef),\n      class1Count: r.uint16,\n      class2Count: r.uint16,\n      classRecords: new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count')\n    }\n  }),\n  3: {\n    // Cursive Attachment Positioning\n    format: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    entryExitCount: r.uint16,\n    entryExitRecords: new r.Array(EntryExitRecord, 'entryExitCount')\n  },\n  4: {\n    // MarkToBase Attachment Positioning\n    format: r.uint16,\n    markCoverage: new r.Pointer(r.uint16, Coverage),\n    baseCoverage: new r.Pointer(r.uint16, Coverage),\n    classCount: r.uint16,\n    markArray: new r.Pointer(r.uint16, MarkArray),\n    baseArray: new r.Pointer(r.uint16, BaseArray)\n  },\n  5: {\n    // MarkToLigature Attachment Positioning\n    format: r.uint16,\n    markCoverage: new r.Pointer(r.uint16, Coverage),\n    ligatureCoverage: new r.Pointer(r.uint16, Coverage),\n    classCount: r.uint16,\n    markArray: new r.Pointer(r.uint16, MarkArray),\n    ligatureArray: new r.Pointer(r.uint16, LigatureArray)\n  },\n  6: {\n    // MarkToMark Attachment Positioning\n    format: r.uint16,\n    mark1Coverage: new r.Pointer(r.uint16, Coverage),\n    mark2Coverage: new r.Pointer(r.uint16, Coverage),\n    classCount: r.uint16,\n    mark1Array: new r.Pointer(r.uint16, MarkArray),\n    mark2Array: new r.Pointer(r.uint16, BaseArray)\n  },\n  7: Context,\n  // Contextual positioning\n  8: ChainingContext,\n  // Chaining contextual positioning\n  9: {\n    // Extension Positioning\n    posFormat: r.uint16,\n    lookupType: r.uint16,\n    // cannot also be 9\n    extension: new r.Pointer(r.uint32, GPOSLookup)\n  }\n}); // Fix circular reference\n\nGPOSLookup.versions[9].extension.type = GPOSLookup;\nvar GPOS = new r.VersionedStruct(r.uint32, {\n  header: {\n    scriptList: new r.Pointer(r.uint16, ScriptList),\n    featureList: new r.Pointer(r.uint16, FeatureList),\n    lookupList: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n  },\n  0x00010000: {},\n  0x00010001: {\n    featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n  }\n}); // export GPOSLookup for JSTF table\n\nvar Sequence = new r.Array(r.uint16, r.uint16);\nvar AlternateSet = Sequence;\nvar Ligature = new r.Struct({\n  glyph: r.uint16,\n  compCount: r.uint16,\n  components: new r.Array(r.uint16, function (t) {\n    return t.compCount - 1;\n  })\n});\nvar LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16);\nvar GSUBLookup = new r.VersionedStruct('lookupType', {\n  1: new r.VersionedStruct(r.uint16, {\n    // Single Substitution\n    1: {\n      coverage: new r.Pointer(r.uint16, Coverage),\n      deltaGlyphID: r.int16\n    },\n    2: {\n      coverage: new r.Pointer(r.uint16, Coverage),\n      glyphCount: r.uint16,\n      substitute: new r.LazyArray(r.uint16, 'glyphCount')\n    }\n  }),\n  2: {\n    // Multiple Substitution\n    substFormat: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    count: r.uint16,\n    sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count')\n  },\n  3: {\n    // Alternate Substitution\n    substFormat: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    count: r.uint16,\n    alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count')\n  },\n  4: {\n    // Ligature Substitution\n    substFormat: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    count: r.uint16,\n    ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count')\n  },\n  5: Context,\n  // Contextual Substitution\n  6: ChainingContext,\n  // Chaining Contextual Substitution\n  7: {\n    // Extension Substitution\n    substFormat: r.uint16,\n    lookupType: r.uint16,\n    // cannot also be 7\n    extension: new r.Pointer(r.uint32, GSUBLookup)\n  },\n  8: {\n    // Reverse Chaining Contextual Single Substitution\n    substFormat: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n    lookaheadGlyphCount: r.uint16,\n    lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n    glyphCount: r.uint16,\n    substitutes: new r.Array(r.uint16, 'glyphCount')\n  }\n}); // Fix circular reference\n\nGSUBLookup.versions[7].extension.type = GSUBLookup;\nvar GSUB = new r.VersionedStruct(r.uint32, {\n  header: {\n    scriptList: new r.Pointer(r.uint16, ScriptList),\n    featureList: new r.Pointer(r.uint16, FeatureList),\n    lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup))\n  },\n  0x00010000: {},\n  0x00010001: {\n    featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n  }\n});\nvar JstfGSUBModList = new r.Array(r.uint16, r.uint16);\nvar JstfPriority = new r.Struct({\n  shrinkageEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)),\n  extensionEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n});\nvar JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16);\nvar JstfLangSysRecord = new r.Struct({\n  tag: new r.String(4),\n  jstfLangSys: new r.Pointer(r.uint16, JstfLangSys)\n});\nvar JstfScript = new r.Struct({\n  extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)),\n  // array of glyphs to extend line length\n  defaultLangSys: new r.Pointer(r.uint16, JstfLangSys),\n  langSysCount: r.uint16,\n  langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount')\n});\nvar JstfScriptRecord = new r.Struct({\n  tag: new r.String(4),\n  script: new r.Pointer(r.uint16, JstfScript, {\n    type: 'parent'\n  })\n});\nvar JSTF = new r.Struct({\n  version: r.uint32,\n  // should be 0x00010000\n  scriptCount: r.uint16,\n  scriptList: new r.Array(JstfScriptRecord, 'scriptCount')\n});\nvar VariableSizeNumber = /*#__PURE__*/function () {\n  function VariableSizeNumber(size) {\n    this._size = size;\n  }\n  var _proto11 = VariableSizeNumber.prototype;\n  _proto11.decode = function decode(stream, parent) {\n    switch (this.size(0, parent)) {\n      case 1:\n        return stream.readUInt8();\n      case 2:\n        return stream.readUInt16BE();\n      case 3:\n        return stream.readUInt24BE();\n      case 4:\n        return stream.readUInt32BE();\n    }\n  };\n  _proto11.size = function size(val, parent) {\n    return utils.resolveLength(this._size, null, parent);\n  };\n  return VariableSizeNumber;\n}();\nvar MapDataEntry = new r.Struct({\n  entry: new VariableSizeNumber(function (t) {\n    return ((t.parent.entryFormat & 0x0030) >> 4) + 1;\n  }),\n  outerIndex: function outerIndex(t) {\n    return t.entry >> (t.parent.entryFormat & 0x000F) + 1;\n  },\n  innerIndex: function innerIndex(t) {\n    return t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1;\n  }\n});\nvar DeltaSetIndexMap = new r.Struct({\n  entryFormat: r.uint16,\n  mapCount: r.uint16,\n  mapData: new r.Array(MapDataEntry, 'mapCount')\n});\nvar HVAR = new r.Struct({\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),\n  advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n  LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n  RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap)\n});\nvar Signature = new r.Struct({\n  format: r.uint32,\n  length: r.uint32,\n  offset: r.uint32\n});\nvar SignatureBlock = new r.Struct({\n  reserved: new r.Reserved(r.uint16, 2),\n  cbSignature: r.uint32,\n  // Length (in bytes) of the PKCS#7 packet in pbSignature\n  signature: new r.Buffer('cbSignature')\n});\nvar DSIG = new r.Struct({\n  ulVersion: r.uint32,\n  // Version number of the DSIG table (0x00000001)\n  usNumSigs: r.uint16,\n  // Number of signatures in the table\n  usFlag: r.uint16,\n  // Permission flags\n  signatures: new r.Array(Signature, 'usNumSigs'),\n  signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs')\n});\nvar GaspRange = new r.Struct({\n  rangeMaxPPEM: r.uint16,\n  // Upper limit of range, in ppem\n  rangeGaspBehavior: new r.Bitfield(r.uint16, [\n  // Flags describing desired rasterizer behavior\n  'grayscale', 'gridfit', 'symmetricSmoothing', 'symmetricGridfit' // only in version 1, for ClearType\n  ])\n});\n\nvar gasp = new r.Struct({\n  version: r.uint16,\n  // set to 0\n  numRanges: r.uint16,\n  gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem\n});\n\nvar DeviceRecord = new r.Struct({\n  pixelSize: r.uint8,\n  maximumWidth: r.uint8,\n  widths: new r.Array(r.uint8, function (t) {\n    return t.parent.parent.maxp.numGlyphs;\n  })\n}); // The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes\n\nvar hdmx = new r.Struct({\n  version: r.uint16,\n  numRecords: r.int16,\n  sizeDeviceRecord: r.int32,\n  records: new r.Array(DeviceRecord, 'numRecords')\n});\nvar KernPair = new r.Struct({\n  left: r.uint16,\n  right: r.uint16,\n  value: r.int16\n});\nvar ClassTable = new r.Struct({\n  firstGlyph: r.uint16,\n  nGlyphs: r.uint16,\n  offsets: new r.Array(r.uint16, 'nGlyphs'),\n  max: function max(t) {\n    return t.offsets.length && Math.max.apply(Math, t.offsets);\n  }\n});\nvar Kern2Array = new r.Struct({\n  off: function off(t) {\n    return t._startOffset - t.parent.parent._startOffset;\n  },\n  len: function len(t) {\n    return ((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2);\n  },\n  values: new r.LazyArray(r.int16, 'len')\n});\nvar KernSubtable = new r.VersionedStruct('format', {\n  0: {\n    nPairs: r.uint16,\n    searchRange: r.uint16,\n    entrySelector: r.uint16,\n    rangeShift: r.uint16,\n    pairs: new r.Array(KernPair, 'nPairs')\n  },\n  2: {\n    rowWidth: r.uint16,\n    leftTable: new r.Pointer(r.uint16, ClassTable, {\n      type: 'parent'\n    }),\n    rightTable: new r.Pointer(r.uint16, ClassTable, {\n      type: 'parent'\n    }),\n    array: new r.Pointer(r.uint16, Kern2Array, {\n      type: 'parent'\n    })\n  },\n  3: {\n    glyphCount: r.uint16,\n    kernValueCount: r.uint8,\n    leftClassCount: r.uint8,\n    rightClassCount: r.uint8,\n    flags: r.uint8,\n    kernValue: new r.Array(r.int16, 'kernValueCount'),\n    leftClass: new r.Array(r.uint8, 'glyphCount'),\n    rightClass: new r.Array(r.uint8, 'glyphCount'),\n    kernIndex: new r.Array(r.uint8, function (t) {\n      return t.leftClassCount * t.rightClassCount;\n    })\n  }\n});\nvar KernTable = new r.VersionedStruct('version', {\n  0: {\n    // Microsoft uses this format\n    subVersion: r.uint16,\n    // Microsoft has an extra sub-table version number\n    length: r.uint16,\n    // Length of the subtable, in bytes\n    format: r.uint8,\n    // Format of subtable\n    coverage: new r.Bitfield(r.uint8, ['horizontal',\n    // 1 if table has horizontal data, 0 if vertical\n    'minimum',\n    // If set to 1, the table has minimum values. If set to 0, the table has kerning values.\n    'crossStream',\n    // If set to 1, kerning is perpendicular to the flow of the text\n    'override' // If set to 1 the value in this table replaces the accumulated value\n    ]),\n\n    subtable: KernSubtable,\n    padding: new r.Reserved(r.uint8, function (t) {\n      return t.length - t._currentOffset;\n    })\n  },\n  1: {\n    // Apple uses this format\n    length: r.uint32,\n    coverage: new r.Bitfield(r.uint8, [null, null, null, null, null, 'variation',\n    // Set if table has variation kerning values\n    'crossStream',\n    // Set if table has cross-stream kerning values\n    'vertical' // Set if table has vertical kerning values\n    ]),\n\n    format: r.uint8,\n    tupleIndex: r.uint16,\n    subtable: KernSubtable,\n    padding: new r.Reserved(r.uint8, function (t) {\n      return t.length - t._currentOffset;\n    })\n  }\n});\nvar kern = new r.VersionedStruct(r.uint16, {\n  0: {\n    // Microsoft Version\n    nTables: r.uint16,\n    tables: new r.Array(KernTable, 'nTables')\n  },\n  1: {\n    // Apple Version\n    reserved: new r.Reserved(r.uint16),\n    // the other half of the version number\n    nTables: r.uint32,\n    tables: new r.Array(KernTable, 'nTables')\n  }\n});\n\n// Records the ppem for each glyph at which the scaling becomes linear again,\n// despite instructions effecting the advance width\n\nvar LTSH = new r.Struct({\n  version: r.uint16,\n  numGlyphs: r.uint16,\n  yPels: new r.Array(r.uint8, 'numGlyphs')\n});\n\n// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines\n\nvar PCLT = new r.Struct({\n  version: r.uint16,\n  fontNumber: r.uint32,\n  pitch: r.uint16,\n  xHeight: r.uint16,\n  style: r.uint16,\n  typeFamily: r.uint16,\n  capHeight: r.uint16,\n  symbolSet: r.uint16,\n  typeface: new r.String(16),\n  characterComplement: new r.String(8),\n  fileName: new r.String(6),\n  strokeWeight: new r.String(1),\n  widthType: new r.String(1),\n  serifStyle: r.uint8,\n  reserved: new r.Reserved(r.uint8)\n});\n\n// sizes. This is needed in order to match font metrics on Windows.\n\nvar Ratio = new r.Struct({\n  bCharSet: r.uint8,\n  // Character set\n  xRatio: r.uint8,\n  // Value to use for x-Ratio\n  yStartRatio: r.uint8,\n  // Starting y-Ratio value\n  yEndRatio: r.uint8 // Ending y-Ratio value\n});\n\nvar vTable = new r.Struct({\n  yPelHeight: r.uint16,\n  // yPelHeight to which values apply\n  yMax: r.int16,\n  // Maximum value (in pels) for this yPelHeight\n  yMin: r.int16 // Minimum value (in pels) for this yPelHeight\n});\n\nvar VdmxGroup = new r.Struct({\n  recs: r.uint16,\n  // Number of height records in this group\n  startsz: r.uint8,\n  // Starting yPelHeight\n  endsz: r.uint8,\n  // Ending yPelHeight\n  entries: new r.Array(vTable, 'recs') // The VDMX records\n});\n\nvar VDMX = new r.Struct({\n  version: r.uint16,\n  // Version number (0 or 1)\n  numRecs: r.uint16,\n  // Number of VDMX groups present\n  numRatios: r.uint16,\n  // Number of aspect ratio groupings\n  ratioRanges: new r.Array(Ratio, 'numRatios'),\n  // Ratio ranges\n  offsets: new r.Array(r.uint16, 'numRatios'),\n  // Offset to the VDMX group for this ratio range\n  groups: new r.Array(VdmxGroup, 'numRecs') // The actual VDMX groupings\n});\n\nvar vhea = new r.Struct({\n  version: r.uint16,\n  // Version number of the Vertical Header Table\n  ascent: r.int16,\n  // The vertical typographic ascender for this font\n  descent: r.int16,\n  // The vertical typographic descender for this font\n  lineGap: r.int16,\n  // The vertical typographic line gap for this font\n  advanceHeightMax: r.int16,\n  // The maximum advance height measurement found in the font\n  minTopSideBearing: r.int16,\n  // The minimum top side bearing measurement found in the font\n  minBottomSideBearing: r.int16,\n  // The minimum bottom side bearing measurement found in the font\n  yMaxExtent: r.int16,\n  caretSlopeRise: r.int16,\n  // Caret slope (rise/run)\n  caretSlopeRun: r.int16,\n  caretOffset: r.int16,\n  // Set value equal to 0 for nonslanted fonts\n  reserved: new r.Reserved(r.int16, 4),\n  metricDataFormat: r.int16,\n  // Set to 0\n  numberOfMetrics: r.uint16 // Number of advance heights in the Vertical Metrics table\n});\n\nvar VmtxEntry = new r.Struct({\n  advance: r.uint16,\n  // The advance height of the glyph\n  bearing: r.int16 // The top sidebearing of the glyph\n}); // Vertical Metrics Table\n\nvar vmtx = new r.Struct({\n  metrics: new r.LazyArray(VmtxEntry, function (t) {\n    return t.parent.vhea.numberOfMetrics;\n  }),\n  bearings: new r.LazyArray(r.int16, function (t) {\n    return t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics;\n  })\n});\nvar shortFrac = new r.Fixed(16, 'BE', 14);\nvar Correspondence = new r.Struct({\n  fromCoord: shortFrac,\n  toCoord: shortFrac\n});\nvar Segment = new r.Struct({\n  pairCount: r.uint16,\n  correspondence: new r.Array(Correspondence, 'pairCount')\n});\nvar avar = new r.Struct({\n  version: r.fixed32,\n  axisCount: r.uint32,\n  segment: new r.Array(Segment, 'axisCount')\n});\nvar UnboundedArrayAccessor = /*#__PURE__*/function () {\n  function UnboundedArrayAccessor(type, stream, parent) {\n    this.type = type;\n    this.stream = stream;\n    this.parent = parent;\n    this.base = this.stream.pos;\n    this._items = [];\n  }\n  var _proto12 = UnboundedArrayAccessor.prototype;\n  _proto12.getItem = function getItem(index) {\n    if (this._items[index] == null) {\n      var pos = this.stream.pos;\n      this.stream.pos = this.base + this.type.size(null, this.parent) * index;\n      this._items[index] = this.type.decode(this.stream, this.parent);\n      this.stream.pos = pos;\n    }\n    return this._items[index];\n  };\n  _proto12.inspect = function inspect() {\n    return \"[UnboundedArray \".concat(this.type.constructor.name, \"]\");\n  };\n  return UnboundedArrayAccessor;\n}();\nvar UnboundedArray = /*#__PURE__*/function (_r$Array2) {\n  _inheritsLoose(UnboundedArray, _r$Array2);\n  function UnboundedArray(type) {\n    return _r$Array2.call(this, type, 0) || this;\n  }\n  var _proto13 = UnboundedArray.prototype;\n  _proto13.decode = function decode(stream, parent) {\n    return new UnboundedArrayAccessor(this.type, stream, parent);\n  };\n  return UnboundedArray;\n}(r.Array);\nvar LookupTable = function LookupTable(ValueType) {\n  if (ValueType === void 0) {\n    ValueType = r.uint16;\n  }\n  // Helper class that makes internal structures invisible to pointers\n  var Shadow = /*#__PURE__*/function () {\n    function Shadow(type) {\n      this.type = type;\n    }\n    var _proto14 = Shadow.prototype;\n    _proto14.decode = function decode(stream, ctx) {\n      ctx = ctx.parent.parent;\n      return this.type.decode(stream, ctx);\n    };\n    _proto14.size = function size(val, ctx) {\n      ctx = ctx.parent.parent;\n      return this.type.size(val, ctx);\n    };\n    _proto14.encode = function encode(stream, val, ctx) {\n      ctx = ctx.parent.parent;\n      return this.type.encode(stream, val, ctx);\n    };\n    return Shadow;\n  }();\n  ValueType = new Shadow(ValueType);\n  var BinarySearchHeader = new r.Struct({\n    unitSize: r.uint16,\n    nUnits: r.uint16,\n    searchRange: r.uint16,\n    entrySelector: r.uint16,\n    rangeShift: r.uint16\n  });\n  var LookupSegmentSingle = new r.Struct({\n    lastGlyph: r.uint16,\n    firstGlyph: r.uint16,\n    value: ValueType\n  });\n  var LookupSegmentArray = new r.Struct({\n    lastGlyph: r.uint16,\n    firstGlyph: r.uint16,\n    values: new r.Pointer(r.uint16, new r.Array(ValueType, function (t) {\n      return t.lastGlyph - t.firstGlyph + 1;\n    }), {\n      type: 'parent'\n    })\n  });\n  var LookupSingle = new r.Struct({\n    glyph: r.uint16,\n    value: ValueType\n  });\n  return new r.VersionedStruct(r.uint16, {\n    0: {\n      values: new UnboundedArray(ValueType) // length == number of glyphs maybe?\n    },\n\n    2: {\n      binarySearchHeader: BinarySearchHeader,\n      segments: new r.Array(LookupSegmentSingle, function (t) {\n        return t.binarySearchHeader.nUnits;\n      })\n    },\n    4: {\n      binarySearchHeader: BinarySearchHeader,\n      segments: new r.Array(LookupSegmentArray, function (t) {\n        return t.binarySearchHeader.nUnits;\n      })\n    },\n    6: {\n      binarySearchHeader: BinarySearchHeader,\n      segments: new r.Array(LookupSingle, function (t) {\n        return t.binarySearchHeader.nUnits;\n      })\n    },\n    8: {\n      firstGlyph: r.uint16,\n      count: r.uint16,\n      values: new r.Array(ValueType, 'count')\n    }\n  });\n};\nfunction StateTable(entryData, lookupType) {\n  if (entryData === void 0) {\n    entryData = {};\n  }\n  if (lookupType === void 0) {\n    lookupType = r.uint16;\n  }\n  var entry = Object.assign({\n    newState: r.uint16,\n    flags: r.uint16\n  }, entryData);\n  var Entry = new r.Struct(entry);\n  var StateArray = new UnboundedArray(new r.Array(r.uint16, function (t) {\n    return t.nClasses;\n  }));\n  var StateHeader = new r.Struct({\n    nClasses: r.uint32,\n    classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)),\n    stateArray: new r.Pointer(r.uint32, StateArray),\n    entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry))\n  });\n  return StateHeader;\n} // This is the old version of the StateTable structure\n\nfunction StateTable1(entryData, lookupType) {\n  if (entryData === void 0) {\n    entryData = {};\n  }\n  if (lookupType === void 0) {\n    lookupType = r.uint16;\n  }\n  var ClassLookupTable = new r.Struct({\n    version: function version() {\n      return 8;\n    },\n    // simulate LookupTable\n    firstGlyph: r.uint16,\n    values: new r.Array(r.uint8, r.uint16)\n  });\n  var entry = Object.assign({\n    newStateOffset: r.uint16,\n    // convert offset to stateArray index\n    newState: function newState(t) {\n      return (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses;\n    },\n    flags: r.uint16\n  }, entryData);\n  var Entry = new r.Struct(entry);\n  var StateArray = new UnboundedArray(new r.Array(r.uint8, function (t) {\n    return t.nClasses;\n  }));\n  var StateHeader1 = new r.Struct({\n    nClasses: r.uint16,\n    classTable: new r.Pointer(r.uint16, ClassLookupTable),\n    stateArray: new r.Pointer(r.uint16, StateArray),\n    entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry))\n  });\n  return StateHeader1;\n}\nvar BslnSubtable = new r.VersionedStruct('format', {\n  0: {\n    // Distance-based, no mapping\n    deltas: new r.Array(r.int16, 32)\n  },\n  1: {\n    // Distance-based, with mapping\n    deltas: new r.Array(r.int16, 32),\n    mappingData: new LookupTable(r.uint16)\n  },\n  2: {\n    // Control point-based, no mapping\n    standardGlyph: r.uint16,\n    controlPoints: new r.Array(r.uint16, 32)\n  },\n  3: {\n    // Control point-based, with mapping\n    standardGlyph: r.uint16,\n    controlPoints: new r.Array(r.uint16, 32),\n    mappingData: new LookupTable(r.uint16)\n  }\n});\nvar bsln = new r.Struct({\n  version: r.fixed32,\n  format: r.uint16,\n  defaultBaseline: r.uint16,\n  subtable: BslnSubtable\n});\nvar Setting = new r.Struct({\n  setting: r.uint16,\n  nameIndex: r.int16,\n  name: function name(t) {\n    return t.parent.parent.parent.name.records.fontFeatures[t.nameIndex];\n  }\n});\nvar FeatureName = new r.Struct({\n  feature: r.uint16,\n  nSettings: r.uint16,\n  settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), {\n    type: 'parent'\n  }),\n  featureFlags: new r.Bitfield(r.uint8, [null, null, null, null, null, null, 'hasDefault', 'exclusive']),\n  defaultSetting: r.uint8,\n  nameIndex: r.int16,\n  name: function name(t) {\n    return t.parent.parent.name.records.fontFeatures[t.nameIndex];\n  }\n});\nvar feat = new r.Struct({\n  version: r.fixed32,\n  featureNameCount: r.uint16,\n  reserved1: new r.Reserved(r.uint16),\n  reserved2: new r.Reserved(r.uint32),\n  featureNames: new r.Array(FeatureName, 'featureNameCount')\n});\nvar Axis$1 = new r.Struct({\n  axisTag: new r.String(4),\n  minValue: r.fixed32,\n  defaultValue: r.fixed32,\n  maxValue: r.fixed32,\n  flags: r.uint16,\n  nameID: r.uint16,\n  name: function name(t) {\n    return t.parent.parent.name.records.fontFeatures[t.nameID];\n  }\n});\nvar Instance = new r.Struct({\n  nameID: r.uint16,\n  name: function name(t) {\n    return t.parent.parent.name.records.fontFeatures[t.nameID];\n  },\n  flags: r.uint16,\n  coord: new r.Array(r.fixed32, function (t) {\n    return t.parent.axisCount;\n  }),\n  postscriptNameID: new r.Optional(r.uint16, function (t) {\n    return t.parent.instanceSize - t._currentOffset > 0;\n  })\n});\nvar fvar = new r.Struct({\n  version: r.fixed32,\n  offsetToData: r.uint16,\n  countSizePairs: r.uint16,\n  axisCount: r.uint16,\n  axisSize: r.uint16,\n  instanceCount: r.uint16,\n  instanceSize: r.uint16,\n  axis: new r.Array(Axis$1, 'axisCount'),\n  instance: new r.Array(Instance, 'instanceCount')\n});\nvar shortFrac$1 = new r.Fixed(16, 'BE', 14);\nvar Offset = /*#__PURE__*/function () {\n  function Offset() {}\n  Offset.decode = function decode(stream, parent) {\n    // In short format, offsets are multiplied by 2.\n    // This doesn't seem to be documented by Apple, but it\n    // is implemented this way in Freetype.\n    return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2;\n  };\n  return Offset;\n}();\nvar gvar = new r.Struct({\n  version: r.uint16,\n  reserved: new r.Reserved(r.uint16),\n  axisCount: r.uint16,\n  globalCoordCount: r.uint16,\n  globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac$1, 'axisCount'), 'globalCoordCount')),\n  glyphCount: r.uint16,\n  flags: r.uint16,\n  offsetToData: r.uint32,\n  offsets: new r.Array(new r.Pointer(Offset, 'void', {\n    relativeTo: function relativeTo(ctx) {\n      return ctx.offsetToData;\n    },\n    allowNull: false\n  }), function (t) {\n    return t.glyphCount + 1;\n  })\n});\nvar ClassTable$1 = new r.Struct({\n  length: r.uint16,\n  coverage: r.uint16,\n  subFeatureFlags: r.uint32,\n  stateTable: new StateTable1()\n});\nvar WidthDeltaRecord = new r.Struct({\n  justClass: r.uint32,\n  beforeGrowLimit: r.fixed32,\n  beforeShrinkLimit: r.fixed32,\n  afterGrowLimit: r.fixed32,\n  afterShrinkLimit: r.fixed32,\n  growFlags: r.uint16,\n  shrinkFlags: r.uint16\n});\nvar WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32);\nvar ActionData = new r.VersionedStruct('actionType', {\n  0: {\n    // Decomposition action\n    lowerLimit: r.fixed32,\n    upperLimit: r.fixed32,\n    order: r.uint16,\n    glyphs: new r.Array(r.uint16, r.uint16)\n  },\n  1: {\n    // Unconditional add glyph action\n    addGlyph: r.uint16\n  },\n  2: {\n    // Conditional add glyph action\n    substThreshold: r.fixed32,\n    addGlyph: r.uint16,\n    substGlyph: r.uint16\n  },\n  3: {},\n  // Stretch glyph action (no data, not supported by CoreText)\n  4: {\n    // Ductile glyph action (not supported by CoreText)\n    variationAxis: r.uint32,\n    minimumLimit: r.fixed32,\n    noStretchValue: r.fixed32,\n    maximumLimit: r.fixed32\n  },\n  5: {\n    // Repeated add glyph action\n    flags: r.uint16,\n    glyph: r.uint16\n  }\n});\nvar Action = new r.Struct({\n  actionClass: r.uint16,\n  actionType: r.uint16,\n  actionLength: r.uint32,\n  actionData: ActionData,\n  padding: new r.Reserved(r.uint8, function (t) {\n    return t.actionLength - t._currentOffset;\n  })\n});\nvar PostcompensationAction = new r.Array(Action, r.uint32);\nvar PostCompensationTable = new r.Struct({\n  lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction))\n});\nvar JustificationTable = new r.Struct({\n  classTable: new r.Pointer(r.uint16, ClassTable$1, {\n    type: 'parent'\n  }),\n  wdcOffset: r.uint16,\n  postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, {\n    type: 'parent'\n  }),\n  widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, {\n    type: 'parent',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.wdcOffset;\n    }\n  }))\n});\nvar just = new r.Struct({\n  version: r.uint32,\n  format: r.uint16,\n  horizontal: new r.Pointer(r.uint16, JustificationTable),\n  vertical: new r.Pointer(r.uint16, JustificationTable)\n});\nvar LigatureData = {\n  action: r.uint16\n};\nvar ContextualData = {\n  markIndex: r.uint16,\n  currentIndex: r.uint16\n};\nvar InsertionData = {\n  currentInsertIndex: r.uint16,\n  markedInsertIndex: r.uint16\n};\nvar SubstitutionTable = new r.Struct({\n  items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable()))\n});\nvar SubtableData = new r.VersionedStruct('type', {\n  0: {\n    // Indic Rearrangement Subtable\n    stateTable: new StateTable()\n  },\n  1: {\n    // Contextual Glyph Substitution Subtable\n    stateTable: new StateTable(ContextualData),\n    substitutionTable: new r.Pointer(r.uint32, SubstitutionTable)\n  },\n  2: {\n    // Ligature subtable\n    stateTable: new StateTable(LigatureData),\n    ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)),\n    components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)),\n    ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n  },\n  4: {\n    // Non-contextual Glyph Substitution Subtable\n    lookupTable: new LookupTable()\n  },\n  5: {\n    // Glyph Insertion Subtable\n    stateTable: new StateTable(InsertionData),\n    insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n  }\n});\nvar Subtable = new r.Struct({\n  length: r.uint32,\n  coverage: r.uint24,\n  type: r.uint8,\n  subFeatureFlags: r.uint32,\n  table: SubtableData,\n  padding: new r.Reserved(r.uint8, function (t) {\n    return t.length - t._currentOffset;\n  })\n});\nvar FeatureEntry = new r.Struct({\n  featureType: r.uint16,\n  featureSetting: r.uint16,\n  enableFlags: r.uint32,\n  disableFlags: r.uint32\n});\nvar MorxChain = new r.Struct({\n  defaultFlags: r.uint32,\n  chainLength: r.uint32,\n  nFeatureEntries: r.uint32,\n  nSubtables: r.uint32,\n  features: new r.Array(FeatureEntry, 'nFeatureEntries'),\n  subtables: new r.Array(Subtable, 'nSubtables')\n});\nvar morx = new r.Struct({\n  version: r.uint16,\n  unused: new r.Reserved(r.uint16),\n  nChains: r.uint32,\n  chains: new r.Array(MorxChain, 'nChains')\n});\nvar OpticalBounds = new r.Struct({\n  left: r.int16,\n  top: r.int16,\n  right: r.int16,\n  bottom: r.int16\n});\nvar opbd = new r.Struct({\n  version: r.fixed32,\n  format: r.uint16,\n  lookupTable: new LookupTable(OpticalBounds)\n});\nvar tables = {};\ntables.cmap = cmap;\ntables.head = head;\ntables.hhea = hhea;\ntables.hmtx = hmtx;\ntables.maxp = maxp;\ntables.name = NameTable;\ntables['OS/2'] = OS2;\ntables.post = post; // TrueType Outlines\ntables.fpgm = fpgm;\ntables.loca = loca;\ntables.prep = prep;\ntables['cvt '] = cvt;\ntables.glyf = glyf; // PostScript Outlines\ntables['CFF '] = CFFFont;\ntables['CFF2'] = CFFFont;\ntables.VORG = VORG; // Bitmap Glyphs\ntables.EBLC = EBLC;\ntables.CBLC = tables.EBLC;\ntables.sbix = sbix;\ntables.COLR = COLR;\ntables.CPAL = CPAL; // Advanced OpenType Tables\ntables.BASE = BASE;\ntables.GDEF = GDEF;\ntables.GPOS = GPOS;\ntables.GSUB = GSUB;\ntables.JSTF = JSTF; // OpenType variations tables\ntables.HVAR = HVAR; // Other OpenType Tables\ntables.DSIG = DSIG;\ntables.gasp = gasp;\ntables.hdmx = hdmx;\ntables.kern = kern;\ntables.LTSH = LTSH;\ntables.PCLT = PCLT;\ntables.VDMX = VDMX;\ntables.vhea = vhea;\ntables.vmtx = vmtx; // Apple Advanced Typography Tables\ntables.avar = avar;\ntables.bsln = bsln;\ntables.feat = feat;\ntables.fvar = fvar;\ntables.gvar = gvar;\ntables.just = just;\ntables.morx = morx;\ntables.opbd = opbd;\nvar TableEntry = new r.Struct({\n  tag: new r.String(4),\n  checkSum: r.uint32,\n  offset: new r.Pointer(r.uint32, 'void', {\n    type: 'global'\n  }),\n  length: r.uint32\n});\nvar Directory = new r.Struct({\n  tag: new r.String(4),\n  numTables: r.uint16,\n  searchRange: r.uint16,\n  entrySelector: r.uint16,\n  rangeShift: r.uint16,\n  tables: new r.Array(TableEntry, 'numTables')\n});\nDirectory.process = function () {\n  var tables = {};\n  for (var _iterator9 = _createForOfIteratorHelperLoose(this.tables), _step9; !(_step9 = _iterator9()).done;) {\n    var table = _step9.value;\n    tables[table.tag] = table;\n  }\n  this.tables = tables;\n};\nDirectory.preEncode = function (stream) {\n  var tables$1 = [];\n  for (var tag in this.tables) {\n    var table = this.tables[tag];\n    if (table) {\n      tables$1.push({\n        tag: tag,\n        checkSum: 0,\n        offset: new r.VoidPointer(tables[tag], table),\n        length: tables[tag].size(table)\n      });\n    }\n  }\n  this.tag = 'true';\n  this.numTables = tables$1.length;\n  this.tables = tables$1;\n  var maxExponentFor2 = Math.floor(Math.log(this.numTables) / Math.LN2);\n  var maxPowerOf2 = Math.pow(2, maxExponentFor2);\n  this.searchRange = maxPowerOf2 * 16;\n  this.entrySelector = Math.log(maxPowerOf2) / Math.LN2;\n  this.rangeShift = this.numTables * 16 - this.searchRange;\n};\nfunction binarySearch(arr, cmp) {\n  var min = 0;\n  var max = arr.length - 1;\n  while (min <= max) {\n    var mid = min + max >> 1;\n    var res = cmp(arr[mid]);\n    if (res < 0) {\n      max = mid - 1;\n    } else if (res > 0) {\n      min = mid + 1;\n    } else {\n      return mid;\n    }\n  }\n  return -1;\n}\nfunction range(index, end) {\n  var range = [];\n  while (index < end) {\n    range.push(index++);\n  }\n  return range;\n}\nvar _class;\ntry {\n  var iconv = __webpack_require__(4914);\n} catch (err) {}\nvar CmapProcessor = (_class = /*#__PURE__*/function () {\n  function CmapProcessor(cmapTable) {\n    // Attempt to find a Unicode cmap first\n    this.encoding = null;\n    this.cmap = this.findSubtable(cmapTable, [\n    // 32-bit subtables\n    [3, 10], [0, 6], [0, 4],\n    // 16-bit subtables\n    [3, 1], [0, 3], [0, 2], [0, 1], [0, 0]]); // If not unicode cmap was found, and iconv-lite is installed,\n    // take the first table with a supported encoding.\n\n    if (!this.cmap && iconv) {\n      for (var _iterator10 = _createForOfIteratorHelperLoose(cmapTable.tables), _step10; !(_step10 = _iterator10()).done;) {\n        var cmap = _step10.value;\n        var encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1);\n        if (iconv.encodingExists(encoding)) {\n          this.cmap = cmap.table;\n          this.encoding = encoding;\n        }\n      }\n    }\n    if (!this.cmap) {\n      throw new Error(\"Could not find a supported cmap table\");\n    }\n    this.uvs = this.findSubtable(cmapTable, [[0, 5]]);\n    if (this.uvs && this.uvs.version !== 14) {\n      this.uvs = null;\n    }\n  }\n  var _proto15 = CmapProcessor.prototype;\n  _proto15.findSubtable = function findSubtable(cmapTable, pairs) {\n    for (var _iterator11 = _createForOfIteratorHelperLoose(pairs), _step11; !(_step11 = _iterator11()).done;) {\n      var _step11$value = _step11.value,\n        platformID = _step11$value[0],\n        encodingID = _step11$value[1];\n      for (var _iterator12 = _createForOfIteratorHelperLoose(cmapTable.tables), _step12; !(_step12 = _iterator12()).done;) {\n        var cmap = _step12.value;\n        if (cmap.platformID === platformID && cmap.encodingID === encodingID) {\n          return cmap.table;\n        }\n      }\n    }\n    return null;\n  };\n  _proto15.lookup = function lookup(codepoint, variationSelector) {\n    // If there is no Unicode cmap in this font, we need to re-encode\n    // the codepoint in the encoding that the cmap supports.\n    if (this.encoding) {\n      var buf = iconv.encode(String.fromCodePoint(codepoint), this.encoding);\n      codepoint = 0;\n      for (var i = 0; i < buf.length; i++) {\n        codepoint = codepoint << 8 | buf[i];\n      } // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided.\n    } else if (variationSelector) {\n      var gid = this.getVariationSelector(codepoint, variationSelector);\n      if (gid) {\n        return gid;\n      }\n    }\n    var cmap = this.cmap;\n    switch (cmap.version) {\n      case 0:\n        return cmap.codeMap.get(codepoint) || 0;\n      case 4:\n        {\n          var min = 0;\n          var max = cmap.segCount - 1;\n          while (min <= max) {\n            var mid = min + max >> 1;\n            if (codepoint < cmap.startCode.get(mid)) {\n              max = mid - 1;\n            } else if (codepoint > cmap.endCode.get(mid)) {\n              min = mid + 1;\n            } else {\n              var rangeOffset = cmap.idRangeOffset.get(mid);\n              var _gid = void 0;\n              if (rangeOffset === 0) {\n                _gid = codepoint + cmap.idDelta.get(mid);\n              } else {\n                var index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid);\n                _gid = cmap.glyphIndexArray.get(index) || 0;\n                if (_gid !== 0) {\n                  _gid += cmap.idDelta.get(mid);\n                }\n              }\n              return _gid & 0xffff;\n            }\n          }\n          return 0;\n        }\n      case 8:\n        throw new Error('TODO: cmap format 8');\n      case 6:\n      case 10:\n        return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0;\n      case 12:\n      case 13:\n        {\n          var _min = 0;\n          var _max = cmap.nGroups - 1;\n          while (_min <= _max) {\n            var _mid = _min + _max >> 1;\n            var group = cmap.groups.get(_mid);\n            if (codepoint < group.startCharCode) {\n              _max = _mid - 1;\n            } else if (codepoint > group.endCharCode) {\n              _min = _mid + 1;\n            } else {\n              if (cmap.version === 12) {\n                return group.glyphID + (codepoint - group.startCharCode);\n              } else {\n                return group.glyphID;\n              }\n            }\n          }\n          return 0;\n        }\n      case 14:\n        throw new Error('TODO: cmap format 14');\n      default:\n        throw new Error(\"Unknown cmap format \".concat(cmap.version));\n    }\n  };\n  _proto15.getVariationSelector = function getVariationSelector(codepoint, variationSelector) {\n    if (!this.uvs) {\n      return 0;\n    }\n    var selectors = this.uvs.varSelectors.toArray();\n    var i = binarySearch(selectors, function (x) {\n      return variationSelector - x.varSelector;\n    });\n    var sel = selectors[i];\n    if (i !== -1 && sel.defaultUVS) {\n      i = binarySearch(sel.defaultUVS, function (x) {\n        return codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0;\n      });\n    }\n    if (i !== -1 && sel.nonDefaultUVS) {\n      i = binarySearch(sel.nonDefaultUVS, function (x) {\n        return codepoint - x.unicodeValue;\n      });\n      if (i !== -1) {\n        return sel.nonDefaultUVS[i].glyphID;\n      }\n    }\n    return 0;\n  };\n  _proto15.getCharacterSet = function getCharacterSet() {\n    var cmap = this.cmap;\n    switch (cmap.version) {\n      case 0:\n        return range(0, cmap.codeMap.length);\n      case 4:\n        {\n          var res = [];\n          var endCodes = cmap.endCode.toArray();\n          for (var i = 0; i < endCodes.length; i++) {\n            var tail = endCodes[i] + 1;\n            var start = cmap.startCode.get(i);\n            res.push.apply(res, range(start, tail));\n          }\n          return res;\n        }\n      case 8:\n        throw new Error('TODO: cmap format 8');\n      case 6:\n      case 10:\n        return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length);\n      case 12:\n      case 13:\n        {\n          var _res = [];\n          for (var _iterator13 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step13; !(_step13 = _iterator13()).done;) {\n            var group = _step13.value;\n            _res.push.apply(_res, range(group.startCharCode, group.endCharCode + 1));\n          }\n          return _res;\n        }\n      case 14:\n        throw new Error('TODO: cmap format 14');\n      default:\n        throw new Error(\"Unknown cmap format \".concat(cmap.version));\n    }\n  };\n  _proto15.codePointsForGlyph = function codePointsForGlyph(gid) {\n    var cmap = this.cmap;\n    switch (cmap.version) {\n      case 0:\n        {\n          var res = [];\n          for (var i = 0; i < 256; i++) {\n            if (cmap.codeMap.get(i) === gid) {\n              res.push(i);\n            }\n          }\n          return res;\n        }\n      case 4:\n        {\n          var _res2 = [];\n          for (var _i = 0; _i < cmap.segCount; _i++) {\n            var end = cmap.endCode.get(_i);\n            var start = cmap.startCode.get(_i);\n            var rangeOffset = cmap.idRangeOffset.get(_i);\n            var delta = cmap.idDelta.get(_i);\n            for (var c = start; c <= end; c++) {\n              var g = 0;\n              if (rangeOffset === 0) {\n                g = c + delta;\n              } else {\n                var index = rangeOffset / 2 + (c - start) - (cmap.segCount - _i);\n                g = cmap.glyphIndexArray.get(index) || 0;\n                if (g !== 0) {\n                  g += delta;\n                }\n              }\n              if (g === gid) {\n                _res2.push(c);\n              }\n            }\n          }\n          return _res2;\n        }\n      case 12:\n        {\n          var _res3 = [];\n          for (var _iterator14 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step14; !(_step14 = _iterator14()).done;) {\n            var group = _step14.value;\n            if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) {\n              _res3.push(group.startCharCode + (gid - group.glyphID));\n            }\n          }\n          return _res3;\n        }\n      case 13:\n        {\n          var _res4 = [];\n          for (var _iterator15 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step15; !(_step15 = _iterator15()).done;) {\n            var _group = _step15.value;\n            if (gid === _group.glyphID) {\n              _res4.push.apply(_res4, range(_group.startCharCode, _group.endCharCode + 1));\n            }\n          }\n          return _res4;\n        }\n      default:\n        throw new Error(\"Unknown cmap format \".concat(cmap.version));\n    }\n  };\n  return CmapProcessor;\n}(), (_applyDecoratedDescriptor(_class.prototype, \"getCharacterSet\", [cache], Object.getOwnPropertyDescriptor(_class.prototype, \"getCharacterSet\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"codePointsForGlyph\", [cache], Object.getOwnPropertyDescriptor(_class.prototype, \"codePointsForGlyph\"), _class.prototype)), _class);\nvar KernProcessor = /*#__PURE__*/function () {\n  function KernProcessor(font) {\n    this.kern = font.kern;\n  }\n  var _proto16 = KernProcessor.prototype;\n  _proto16.process = function process(glyphs, positions) {\n    for (var glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) {\n      var left = glyphs[glyphIndex].id;\n      var right = glyphs[glyphIndex + 1].id;\n      positions[glyphIndex].xAdvance += this.getKerning(left, right);\n    }\n  };\n  _proto16.getKerning = function getKerning(left, right) {\n    var res = 0;\n    for (var _iterator16 = _createForOfIteratorHelperLoose(this.kern.tables), _step16; !(_step16 = _iterator16()).done;) {\n      var table = _step16.value;\n      if (table.coverage.crossStream) {\n        continue;\n      }\n      switch (table.version) {\n        case 0:\n          if (!table.coverage.horizontal) {\n            continue;\n          }\n          break;\n        case 1:\n          if (table.coverage.vertical || table.coverage.variation) {\n            continue;\n          }\n          break;\n        default:\n          throw new Error(\"Unsupported kerning table version \".concat(table.version));\n      }\n      var val = 0;\n      var s = table.subtable;\n      switch (table.format) {\n        case 0:\n          var pairIdx = binarySearch(s.pairs, function (pair) {\n            return left - pair.left || right - pair.right;\n          });\n          if (pairIdx >= 0) {\n            val = s.pairs[pairIdx].value;\n          }\n          break;\n        case 2:\n          var leftOffset = 0,\n            rightOffset = 0;\n          if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) {\n            leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph];\n          } else {\n            leftOffset = s.array.off;\n          }\n          if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) {\n            rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph];\n          }\n          var index = (leftOffset + rightOffset - s.array.off) / 2;\n          val = s.array.values.get(index);\n          break;\n        case 3:\n          if (left >= s.glyphCount || right >= s.glyphCount) {\n            return 0;\n          }\n          val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]];\n          break;\n        default:\n          throw new Error(\"Unsupported kerning sub-table format \".concat(table.format));\n      } // Microsoft supports the override flag, which resets the result\n      // Otherwise, the sum of the results from all subtables is returned\n\n      if (table.coverage.override) {\n        res = val;\n      } else {\n        res += val;\n      }\n    }\n    return res;\n  };\n  return KernProcessor;\n}();\n/**\n * This class is used when GPOS does not define 'mark' or 'mkmk' features\n * for positioning marks relative to base glyphs. It uses the unicode\n * combining class property to position marks.\n *\n * Based on code from Harfbuzz, thanks!\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc\n */\nvar UnicodeLayoutEngine = /*#__PURE__*/function () {\n  function UnicodeLayoutEngine(font) {\n    this.font = font;\n  }\n  var _proto17 = UnicodeLayoutEngine.prototype;\n  _proto17.positionGlyphs = function positionGlyphs(glyphs, positions) {\n    // find each base + mark cluster, and position the marks relative to the base\n    var clusterStart = 0;\n    var clusterEnd = 0;\n    for (var index = 0; index < glyphs.length; index++) {\n      var glyph = glyphs[index];\n      if (glyph.isMark) {\n        // TODO: handle ligatures\n        clusterEnd = index;\n      } else {\n        if (clusterStart !== clusterEnd) {\n          this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n        }\n        clusterStart = clusterEnd = index;\n      }\n    }\n    if (clusterStart !== clusterEnd) {\n      this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n    }\n    return positions;\n  };\n  _proto17.positionCluster = function positionCluster(glyphs, positions, clusterStart, clusterEnd) {\n    var base = glyphs[clusterStart];\n    var baseBox = base.cbox.copy(); // adjust bounding box for ligature glyphs\n\n    if (base.codePoints.length > 1) {\n      // LTR. TODO: RTL support.\n      baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length;\n    }\n    var xOffset = -positions[clusterStart].xAdvance;\n    var yOffset = 0;\n    var yGap = this.font.unitsPerEm / 16; // position each of the mark glyphs relative to the base glyph\n\n    for (var index = clusterStart + 1; index <= clusterEnd; index++) {\n      var mark = glyphs[index];\n      var markBox = mark.cbox;\n      var position = positions[index];\n      var combiningClass = this.getCombiningClass(mark.codePoints[0]);\n      if (combiningClass !== 'Not_Reordered') {\n        position.xOffset = position.yOffset = 0; // x positioning\n\n        switch (combiningClass) {\n          case 'Double_Above':\n          case 'Double_Below':\n            // LTR. TODO: RTL support.\n            position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX;\n            break;\n          case 'Attached_Below_Left':\n          case 'Below_Left':\n          case 'Above_Left':\n            // left align\n            position.xOffset += baseBox.minX - markBox.minX;\n            break;\n          case 'Attached_Above_Right':\n          case 'Below_Right':\n          case 'Above_Right':\n            // right align\n            position.xOffset += baseBox.maxX - markBox.width - markBox.minX;\n            break;\n          default:\n            // Attached_Below, Attached_Above, Below, Above, other\n            // center align\n            position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX;\n        } // y positioning\n\n        switch (combiningClass) {\n          case 'Double_Below':\n          case 'Below_Left':\n          case 'Below':\n          case 'Below_Right':\n          case 'Attached_Below_Left':\n          case 'Attached_Below':\n            // add a small gap between the glyphs if they are not attached\n            if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') {\n              baseBox.minY += yGap;\n            }\n            position.yOffset = -baseBox.minY - markBox.maxY;\n            baseBox.minY += markBox.height;\n            break;\n          case 'Double_Above':\n          case 'Above_Left':\n          case 'Above':\n          case 'Above_Right':\n          case 'Attached_Above':\n          case 'Attached_Above_Right':\n            // add a small gap between the glyphs if they are not attached\n            if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') {\n              baseBox.maxY += yGap;\n            }\n            position.yOffset = baseBox.maxY - markBox.minY;\n            baseBox.maxY += markBox.height;\n            break;\n        }\n        position.xAdvance = position.yAdvance = 0;\n        position.xOffset += xOffset;\n        position.yOffset += yOffset;\n      } else {\n        xOffset -= position.xAdvance;\n        yOffset -= position.yAdvance;\n      }\n    }\n    return;\n  };\n  _proto17.getCombiningClass = function getCombiningClass(codePoint) {\n    var combiningClass = unicode.getCombiningClass(codePoint); // Thai / Lao need some per-character work\n\n    if ((codePoint & ~0xff) === 0x0e00) {\n      if (combiningClass === 'Not_Reordered') {\n        switch (codePoint) {\n          case 0x0e31:\n          case 0x0e34:\n          case 0x0e35:\n          case 0x0e36:\n          case 0x0e37:\n          case 0x0e47:\n          case 0x0e4c:\n          case 0x0e3d:\n          case 0x0e4e:\n            return 'Above_Right';\n          case 0x0eb1:\n          case 0x0eb4:\n          case 0x0eb5:\n          case 0x0eb6:\n          case 0x0eb7:\n          case 0x0ebb:\n          case 0x0ecc:\n          case 0x0ecd:\n            return 'Above';\n          case 0x0ebc:\n            return 'Below';\n        }\n      } else if (codePoint === 0x0e3a) {\n        // virama\n        return 'Below_Right';\n      }\n    }\n    switch (combiningClass) {\n      // Hebrew\n      case 'CCC10': // sheva\n\n      case 'CCC11': // hataf segol\n\n      case 'CCC12': // hataf patah\n\n      case 'CCC13': // hataf qamats\n\n      case 'CCC14': // hiriq\n\n      case 'CCC15': // tsere\n\n      case 'CCC16': // segol\n\n      case 'CCC17': // patah\n\n      case 'CCC18': // qamats\n\n      case 'CCC20': // qubuts\n\n      case 'CCC22':\n        // meteg\n        return 'Below';\n      case 'CCC23':\n        // rafe\n        return 'Attached_Above';\n      case 'CCC24':\n        // shin dot\n        return 'Above_Right';\n      case 'CCC25': // sin dot\n\n      case 'CCC19':\n        // holam\n        return 'Above_Left';\n      case 'CCC26':\n        // point varika\n        return 'Above';\n      case 'CCC21':\n        // dagesh\n        break;\n      // Arabic and Syriac\n\n      case 'CCC27': // fathatan\n\n      case 'CCC28': // dammatan\n\n      case 'CCC30': // fatha\n\n      case 'CCC31': // damma\n\n      case 'CCC33': // shadda\n\n      case 'CCC34': // sukun\n\n      case 'CCC35': // superscript alef\n\n      case 'CCC36':\n        // superscript alaph\n        return 'Above';\n      case 'CCC29': // kasratan\n\n      case 'CCC32':\n        // kasra\n        return 'Below';\n      // Thai\n\n      case 'CCC103':\n        // sara u / sara uu\n        return 'Below_Right';\n      case 'CCC107':\n        // mai\n        return 'Above_Right';\n      // Lao\n\n      case 'CCC118':\n        // sign u / sign uu\n        return 'Below';\n      case 'CCC122':\n        // mai\n        return 'Above';\n      // Tibetan\n\n      case 'CCC129': // sign aa\n\n      case 'CCC132':\n        // sign u\n        return 'Below';\n      case 'CCC130':\n        // sign i\n        return 'Above';\n    }\n    return combiningClass;\n  };\n  return UnicodeLayoutEngine;\n}();\n/**\n * Represents a glyph bounding box\n */\nvar BBox = /*#__PURE__*/function () {\n  function BBox(minX, minY, maxX, maxY) {\n    if (minX === void 0) {\n      minX = Infinity;\n    }\n    if (minY === void 0) {\n      minY = Infinity;\n    }\n    if (maxX === void 0) {\n      maxX = -Infinity;\n    }\n    if (maxY === void 0) {\n      maxY = -Infinity;\n    }\n    /**\n     * The minimum X position in the bounding box\n     * @type {number}\n     */\n    this.minX = minX;\n    /**\n     * The minimum Y position in the bounding box\n     * @type {number}\n     */\n\n    this.minY = minY;\n    /**\n     * The maxmimum X position in the bounding box\n     * @type {number}\n     */\n\n    this.maxX = maxX;\n    /**\n     * The maxmimum Y position in the bounding box\n     * @type {number}\n     */\n\n    this.maxY = maxY;\n  }\n  /**\n   * The width of the bounding box\n   * @type {number}\n   */\n  var _proto18 = BBox.prototype;\n  _proto18.addPoint = function addPoint(x, y) {\n    if (Math.abs(x) !== Infinity) {\n      if (x < this.minX) {\n        this.minX = x;\n      }\n      if (x > this.maxX) {\n        this.maxX = x;\n      }\n    }\n    if (Math.abs(y) !== Infinity) {\n      if (y < this.minY) {\n        this.minY = y;\n      }\n      if (y > this.maxY) {\n        this.maxY = y;\n      }\n    }\n  };\n  _proto18.copy = function copy() {\n    return new BBox(this.minX, this.minY, this.maxX, this.maxY);\n  };\n  _createClass(BBox, [{\n    key: \"width\",\n    get: function get() {\n      return this.maxX - this.minX;\n    }\n    /**\n     * The height of the bounding box\n     * @type {number}\n     */\n  }, {\n    key: \"height\",\n    get: function get() {\n      return this.maxY - this.minY;\n    }\n  }]);\n  return BBox;\n}(); // Data from http://www.microsoft.com/typography/otspec/scripttags.htm\n// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt.\nvar UNICODE_SCRIPTS = {\n  Caucasian_Albanian: 'aghb',\n  Arabic: 'arab',\n  Imperial_Aramaic: 'armi',\n  Armenian: 'armn',\n  Avestan: 'avst',\n  Balinese: 'bali',\n  Bamum: 'bamu',\n  Bassa_Vah: 'bass',\n  Batak: 'batk',\n  Bengali: ['bng2', 'beng'],\n  Bopomofo: 'bopo',\n  Brahmi: 'brah',\n  Braille: 'brai',\n  Buginese: 'bugi',\n  Buhid: 'buhd',\n  Chakma: 'cakm',\n  Canadian_Aboriginal: 'cans',\n  Carian: 'cari',\n  Cham: 'cham',\n  Cherokee: 'cher',\n  Coptic: 'copt',\n  Cypriot: 'cprt',\n  Cyrillic: 'cyrl',\n  Devanagari: ['dev2', 'deva'],\n  Deseret: 'dsrt',\n  Duployan: 'dupl',\n  Egyptian_Hieroglyphs: 'egyp',\n  Elbasan: 'elba',\n  Ethiopic: 'ethi',\n  Georgian: 'geor',\n  Glagolitic: 'glag',\n  Gothic: 'goth',\n  Grantha: 'gran',\n  Greek: 'grek',\n  Gujarati: ['gjr2', 'gujr'],\n  Gurmukhi: ['gur2', 'guru'],\n  Hangul: 'hang',\n  Han: 'hani',\n  Hanunoo: 'hano',\n  Hebrew: 'hebr',\n  Hiragana: 'hira',\n  Pahawh_Hmong: 'hmng',\n  Katakana_Or_Hiragana: 'hrkt',\n  Old_Italic: 'ital',\n  Javanese: 'java',\n  Kayah_Li: 'kali',\n  Katakana: 'kana',\n  Kharoshthi: 'khar',\n  Khmer: 'khmr',\n  Khojki: 'khoj',\n  Kannada: ['knd2', 'knda'],\n  Kaithi: 'kthi',\n  Tai_Tham: 'lana',\n  Lao: 'lao ',\n  Latin: 'latn',\n  Lepcha: 'lepc',\n  Limbu: 'limb',\n  Linear_A: 'lina',\n  Linear_B: 'linb',\n  Lisu: 'lisu',\n  Lycian: 'lyci',\n  Lydian: 'lydi',\n  Mahajani: 'mahj',\n  Mandaic: 'mand',\n  Manichaean: 'mani',\n  Mende_Kikakui: 'mend',\n  Meroitic_Cursive: 'merc',\n  Meroitic_Hieroglyphs: 'mero',\n  Malayalam: ['mlm2', 'mlym'],\n  Modi: 'modi',\n  Mongolian: 'mong',\n  Mro: 'mroo',\n  Meetei_Mayek: 'mtei',\n  Myanmar: ['mym2', 'mymr'],\n  Old_North_Arabian: 'narb',\n  Nabataean: 'nbat',\n  Nko: 'nko ',\n  Ogham: 'ogam',\n  Ol_Chiki: 'olck',\n  Old_Turkic: 'orkh',\n  Oriya: ['ory2', 'orya'],\n  Osmanya: 'osma',\n  Palmyrene: 'palm',\n  Pau_Cin_Hau: 'pauc',\n  Old_Permic: 'perm',\n  Phags_Pa: 'phag',\n  Inscriptional_Pahlavi: 'phli',\n  Psalter_Pahlavi: 'phlp',\n  Phoenician: 'phnx',\n  Miao: 'plrd',\n  Inscriptional_Parthian: 'prti',\n  Rejang: 'rjng',\n  Runic: 'runr',\n  Samaritan: 'samr',\n  Old_South_Arabian: 'sarb',\n  Saurashtra: 'saur',\n  Shavian: 'shaw',\n  Sharada: 'shrd',\n  Siddham: 'sidd',\n  Khudawadi: 'sind',\n  Sinhala: 'sinh',\n  Sora_Sompeng: 'sora',\n  Sundanese: 'sund',\n  Syloti_Nagri: 'sylo',\n  Syriac: 'syrc',\n  Tagbanwa: 'tagb',\n  Takri: 'takr',\n  Tai_Le: 'tale',\n  New_Tai_Lue: 'talu',\n  Tamil: ['tml2', 'taml'],\n  Tai_Viet: 'tavt',\n  Telugu: ['tel2', 'telu'],\n  Tifinagh: 'tfng',\n  Tagalog: 'tglg',\n  Thaana: 'thaa',\n  Thai: 'thai',\n  Tibetan: 'tibt',\n  Tirhuta: 'tirh',\n  Ugaritic: 'ugar',\n  Vai: 'vai ',\n  Warang_Citi: 'wara',\n  Old_Persian: 'xpeo',\n  Cuneiform: 'xsux',\n  Yi: 'yi  ',\n  Inherited: 'zinh',\n  Common: 'zyyy',\n  Unknown: 'zzzz'\n};\nvar OPENTYPE_SCRIPTS = {};\nfor (var script in UNICODE_SCRIPTS) {\n  var tag = UNICODE_SCRIPTS[script];\n  if (Array.isArray(tag)) {\n    for (var _iterator17 = _createForOfIteratorHelperLoose(tag), _step17; !(_step17 = _iterator17()).done;) {\n      var t = _step17.value;\n      OPENTYPE_SCRIPTS[t] = script;\n    }\n  } else {\n    OPENTYPE_SCRIPTS[tag] = script;\n  }\n}\nfunction fromOpenType(tag) {\n  return OPENTYPE_SCRIPTS[tag];\n}\nfunction forString(string) {\n  var len = string.length;\n  var idx = 0;\n  while (idx < len) {\n    var code = string.charCodeAt(idx++); // Check if this is a high surrogate\n\n    if (0xd800 <= code && code <= 0xdbff && idx < len) {\n      var next = string.charCodeAt(idx); // Check if this is a low surrogate\n\n      if (0xdc00 <= next && next <= 0xdfff) {\n        idx++;\n        code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000;\n      }\n    }\n    var _script = unicode.getScript(code);\n    if (_script !== 'Common' && _script !== 'Inherited' && _script !== 'Unknown') {\n      return UNICODE_SCRIPTS[_script];\n    }\n  }\n  return UNICODE_SCRIPTS.Unknown;\n}\nfunction forCodePoints(codePoints) {\n  for (var i = 0; i < codePoints.length; i++) {\n    var codePoint = codePoints[i];\n    var _script2 = unicode.getScript(codePoint);\n    if (_script2 !== 'Common' && _script2 !== 'Inherited' && _script2 !== 'Unknown') {\n      return UNICODE_SCRIPTS[_script2];\n    }\n  }\n  return UNICODE_SCRIPTS.Unknown;\n} // The scripts in this map are written from right to left\n\nvar RTL = {\n  arab: true,\n  // Arabic\n  hebr: true,\n  // Hebrew\n  syrc: true,\n  // Syriac\n  thaa: true,\n  // Thaana\n  cprt: true,\n  // Cypriot Syllabary\n  khar: true,\n  // Kharosthi\n  phnx: true,\n  // Phoenician\n  'nko ': true,\n  // N'Ko\n  lydi: true,\n  // Lydian\n  avst: true,\n  // Avestan\n  armi: true,\n  // Imperial Aramaic\n  phli: true,\n  // Inscriptional Pahlavi\n  prti: true,\n  // Inscriptional Parthian\n  sarb: true,\n  // Old South Arabian\n  orkh: true,\n  // Old Turkic, Orkhon Runic\n  samr: true,\n  // Samaritan\n  mand: true,\n  // Mandaic, Mandaean\n  merc: true,\n  // Meroitic Cursive\n  mero: true,\n  // Meroitic Hieroglyphs\n  // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm)\n  mani: true,\n  // Manichaean\n  mend: true,\n  // Mende Kikakui\n  nbat: true,\n  // Nabataean\n  narb: true,\n  // Old North Arabian\n  palm: true,\n  // Palmyrene\n  phlp: true // Psalter Pahlavi\n};\n\nfunction direction(script) {\n  if (RTL[script]) {\n    return 'rtl';\n  }\n  return 'ltr';\n}\n\n/**\n * Represents a run of Glyph and GlyphPosition objects.\n * Returned by the font layout method.\n */\nvar GlyphRun = /*#__PURE__*/function () {\n  function GlyphRun(glyphs, features, script, language, direction$1) {\n    /**\n     * An array of Glyph objects in the run\n     * @type {Glyph[]}\n     */\n    this.glyphs = glyphs;\n    /**\n     * An array of GlyphPosition objects for each glyph in the run\n     * @type {GlyphPosition[]}\n     */\n\n    this.positions = null;\n    /**\n     * The script that was requested for shaping. This was either passed in or detected automatically.\n     * @type {string}\n     */\n\n    this.script = script;\n    /**\n     * The language requested for shaping, as passed in. If `null`, the default language for the\n     * script was used.\n     * @type {string}\n     */\n\n    this.language = language || null;\n    /**\n     * The direction requested for shaping, as passed in (either ltr or rtl).\n     * If `null`, the default direction of the script is used.\n     * @type {string}\n     */\n\n    this.direction = direction$1 || direction(script);\n    /**\n     * The features requested during shaping. This is a combination of user\n     * specified features and features chosen by the shaper.\n     * @type {object}\n     */\n\n    this.features = {}; // Convert features to an object\n\n    if (Array.isArray(features)) {\n      for (var _iterator18 = _createForOfIteratorHelperLoose(features), _step18; !(_step18 = _iterator18()).done;) {\n        var tag = _step18.value;\n        this.features[tag] = true;\n      }\n    } else if (typeof features === 'object') {\n      this.features = features;\n    }\n  }\n  /**\n   * The total advance width of the run.\n   * @type {number}\n   */\n  _createClass(GlyphRun, [{\n    key: \"advanceWidth\",\n    get: function get() {\n      var width = 0;\n      for (var _iterator19 = _createForOfIteratorHelperLoose(this.positions), _step19; !(_step19 = _iterator19()).done;) {\n        var position = _step19.value;\n        width += position.xAdvance;\n      }\n      return width;\n    }\n    /**\n     * The total advance height of the run.\n     * @type {number}\n     */\n  }, {\n    key: \"advanceHeight\",\n    get: function get() {\n      var height = 0;\n      for (var _iterator20 = _createForOfIteratorHelperLoose(this.positions), _step20; !(_step20 = _iterator20()).done;) {\n        var position = _step20.value;\n        height += position.yAdvance;\n      }\n      return height;\n    }\n    /**\n     * The bounding box containing all glyphs in the run.\n     * @type {BBox}\n     */\n  }, {\n    key: \"bbox\",\n    get: function get() {\n      var bbox = new BBox();\n      var x = 0;\n      var y = 0;\n      for (var index = 0; index < this.glyphs.length; index++) {\n        var glyph = this.glyphs[index];\n        var p = this.positions[index];\n        var b = glyph.bbox;\n        bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset);\n        bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset);\n        x += p.xAdvance;\n        y += p.yAdvance;\n      }\n      return bbox;\n    }\n  }]);\n  return GlyphRun;\n}();\n/**\n * Represents positioning information for a glyph in a GlyphRun.\n */\nvar GlyphPosition = function GlyphPosition(xAdvance, yAdvance, xOffset, yOffset) {\n  if (xAdvance === void 0) {\n    xAdvance = 0;\n  }\n  if (yAdvance === void 0) {\n    yAdvance = 0;\n  }\n  if (xOffset === void 0) {\n    xOffset = 0;\n  }\n  if (yOffset === void 0) {\n    yOffset = 0;\n  }\n  /**\n   * The amount to move the virtual pen in the X direction after rendering this glyph.\n   * @type {number}\n   */\n  this.xAdvance = xAdvance;\n  /**\n   * The amount to move the virtual pen in the Y direction after rendering this glyph.\n   * @type {number}\n   */\n\n  this.yAdvance = yAdvance;\n  /**\n   * The offset from the pen position in the X direction at which to render this glyph.\n   * @type {number}\n   */\n\n  this.xOffset = xOffset;\n  /**\n   * The offset from the pen position in the Y direction at which to render this glyph.\n   * @type {number}\n   */\n\n  this.yOffset = yOffset;\n}; // see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html\n// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac\nvar features = {\n  allTypographicFeatures: {\n    code: 0,\n    exclusive: false,\n    allTypeFeatures: 0\n  },\n  ligatures: {\n    code: 1,\n    exclusive: false,\n    requiredLigatures: 0,\n    commonLigatures: 2,\n    rareLigatures: 4,\n    // logos: 6\n    rebusPictures: 8,\n    diphthongLigatures: 10,\n    squaredLigatures: 12,\n    abbrevSquaredLigatures: 14,\n    symbolLigatures: 16,\n    contextualLigatures: 18,\n    historicalLigatures: 20\n  },\n  cursiveConnection: {\n    code: 2,\n    exclusive: true,\n    unconnected: 0,\n    partiallyConnected: 1,\n    cursive: 2\n  },\n  letterCase: {\n    code: 3,\n    exclusive: true\n  },\n  // upperAndLowerCase: 0          # deprecated\n  // allCaps: 1                    # deprecated\n  // allLowerCase: 2               # deprecated\n  // smallCaps: 3                  # deprecated\n  // initialCaps: 4                # deprecated\n  // initialCapsAndSmallCaps: 5    # deprecated\n  verticalSubstitution: {\n    code: 4,\n    exclusive: false,\n    substituteVerticalForms: 0\n  },\n  linguisticRearrangement: {\n    code: 5,\n    exclusive: false,\n    linguisticRearrangement: 0\n  },\n  numberSpacing: {\n    code: 6,\n    exclusive: true,\n    monospacedNumbers: 0,\n    proportionalNumbers: 1,\n    thirdWidthNumbers: 2,\n    quarterWidthNumbers: 3\n  },\n  smartSwash: {\n    code: 8,\n    exclusive: false,\n    wordInitialSwashes: 0,\n    wordFinalSwashes: 2,\n    // lineInitialSwashes: 4\n    // lineFinalSwashes: 6\n    nonFinalSwashes: 8\n  },\n  diacritics: {\n    code: 9,\n    exclusive: true,\n    showDiacritics: 0,\n    hideDiacritics: 1,\n    decomposeDiacritics: 2\n  },\n  verticalPosition: {\n    code: 10,\n    exclusive: true,\n    normalPosition: 0,\n    superiors: 1,\n    inferiors: 2,\n    ordinals: 3,\n    scientificInferiors: 4\n  },\n  fractions: {\n    code: 11,\n    exclusive: true,\n    noFractions: 0,\n    verticalFractions: 1,\n    diagonalFractions: 2\n  },\n  overlappingCharacters: {\n    code: 13,\n    exclusive: false,\n    preventOverlap: 0\n  },\n  typographicExtras: {\n    code: 14,\n    exclusive: false,\n    // hyphensToEmDash: 0\n    // hyphenToEnDash: 2\n    slashedZero: 4\n  },\n  // formInterrobang: 6\n  // smartQuotes: 8\n  // periodsToEllipsis: 10\n  mathematicalExtras: {\n    code: 15,\n    exclusive: false,\n    // hyphenToMinus: 0\n    // asteristoMultiply: 2\n    // slashToDivide: 4\n    // inequalityLigatures: 6\n    // exponents: 8\n    mathematicalGreek: 10\n  },\n  ornamentSets: {\n    code: 16,\n    exclusive: true,\n    noOrnaments: 0,\n    dingbats: 1,\n    piCharacters: 2,\n    fleurons: 3,\n    decorativeBorders: 4,\n    internationalSymbols: 5,\n    mathSymbols: 6\n  },\n  characterAlternatives: {\n    code: 17,\n    exclusive: true,\n    noAlternates: 0\n  },\n  // user defined options\n  designComplexity: {\n    code: 18,\n    exclusive: true,\n    designLevel1: 0,\n    designLevel2: 1,\n    designLevel3: 2,\n    designLevel4: 3,\n    designLevel5: 4\n  },\n  styleOptions: {\n    code: 19,\n    exclusive: true,\n    noStyleOptions: 0,\n    displayText: 1,\n    engravedText: 2,\n    illuminatedCaps: 3,\n    titlingCaps: 4,\n    tallCaps: 5\n  },\n  characterShape: {\n    code: 20,\n    exclusive: true,\n    traditionalCharacters: 0,\n    simplifiedCharacters: 1,\n    JIS1978Characters: 2,\n    JIS1983Characters: 3,\n    JIS1990Characters: 4,\n    traditionalAltOne: 5,\n    traditionalAltTwo: 6,\n    traditionalAltThree: 7,\n    traditionalAltFour: 8,\n    traditionalAltFive: 9,\n    expertCharacters: 10,\n    JIS2004Characters: 11,\n    hojoCharacters: 12,\n    NLCCharacters: 13,\n    traditionalNamesCharacters: 14\n  },\n  numberCase: {\n    code: 21,\n    exclusive: true,\n    lowerCaseNumbers: 0,\n    upperCaseNumbers: 1\n  },\n  textSpacing: {\n    code: 22,\n    exclusive: true,\n    proportionalText: 0,\n    monospacedText: 1,\n    halfWidthText: 2,\n    thirdWidthText: 3,\n    quarterWidthText: 4,\n    altProportionalText: 5,\n    altHalfWidthText: 6\n  },\n  transliteration: {\n    code: 23,\n    exclusive: true,\n    noTransliteration: 0\n  },\n  // hanjaToHangul: 1\n  // hiraganaToKatakana: 2\n  // katakanaToHiragana: 3\n  // kanaToRomanization: 4\n  // romanizationToHiragana: 5\n  // romanizationToKatakana: 6\n  // hanjaToHangulAltOne: 7\n  // hanjaToHangulAltTwo: 8\n  // hanjaToHangulAltThree: 9\n  annotation: {\n    code: 24,\n    exclusive: true,\n    noAnnotation: 0,\n    boxAnnotation: 1,\n    roundedBoxAnnotation: 2,\n    circleAnnotation: 3,\n    invertedCircleAnnotation: 4,\n    parenthesisAnnotation: 5,\n    periodAnnotation: 6,\n    romanNumeralAnnotation: 7,\n    diamondAnnotation: 8,\n    invertedBoxAnnotation: 9,\n    invertedRoundedBoxAnnotation: 10\n  },\n  kanaSpacing: {\n    code: 25,\n    exclusive: true,\n    fullWidthKana: 0,\n    proportionalKana: 1\n  },\n  ideographicSpacing: {\n    code: 26,\n    exclusive: true,\n    fullWidthIdeographs: 0,\n    proportionalIdeographs: 1,\n    halfWidthIdeographs: 2\n  },\n  unicodeDecomposition: {\n    code: 27,\n    exclusive: false,\n    canonicalComposition: 0,\n    compatibilityComposition: 2,\n    transcodingComposition: 4\n  },\n  rubyKana: {\n    code: 28,\n    exclusive: false,\n    // noRubyKana: 0     # deprecated - use rubyKanaOff instead\n    // rubyKana: 1     # deprecated - use rubyKanaOn instead\n    rubyKana: 2\n  },\n  CJKSymbolAlternatives: {\n    code: 29,\n    exclusive: true,\n    noCJKSymbolAlternatives: 0,\n    CJKSymbolAltOne: 1,\n    CJKSymbolAltTwo: 2,\n    CJKSymbolAltThree: 3,\n    CJKSymbolAltFour: 4,\n    CJKSymbolAltFive: 5\n  },\n  ideographicAlternatives: {\n    code: 30,\n    exclusive: true,\n    noIdeographicAlternatives: 0,\n    ideographicAltOne: 1,\n    ideographicAltTwo: 2,\n    ideographicAltThree: 3,\n    ideographicAltFour: 4,\n    ideographicAltFive: 5\n  },\n  CJKVerticalRomanPlacement: {\n    code: 31,\n    exclusive: true,\n    CJKVerticalRomanCentered: 0,\n    CJKVerticalRomanHBaseline: 1\n  },\n  italicCJKRoman: {\n    code: 32,\n    exclusive: false,\n    // noCJKItalicRoman: 0     # deprecated - use CJKItalicRomanOff instead\n    // CJKItalicRoman: 1     # deprecated - use CJKItalicRomanOn instead\n    CJKItalicRoman: 2\n  },\n  caseSensitiveLayout: {\n    code: 33,\n    exclusive: false,\n    caseSensitiveLayout: 0,\n    caseSensitiveSpacing: 2\n  },\n  alternateKana: {\n    code: 34,\n    exclusive: false,\n    alternateHorizKana: 0,\n    alternateVertKana: 2\n  },\n  stylisticAlternatives: {\n    code: 35,\n    exclusive: false,\n    noStylisticAlternates: 0,\n    stylisticAltOne: 2,\n    stylisticAltTwo: 4,\n    stylisticAltThree: 6,\n    stylisticAltFour: 8,\n    stylisticAltFive: 10,\n    stylisticAltSix: 12,\n    stylisticAltSeven: 14,\n    stylisticAltEight: 16,\n    stylisticAltNine: 18,\n    stylisticAltTen: 20,\n    stylisticAltEleven: 22,\n    stylisticAltTwelve: 24,\n    stylisticAltThirteen: 26,\n    stylisticAltFourteen: 28,\n    stylisticAltFifteen: 30,\n    stylisticAltSixteen: 32,\n    stylisticAltSeventeen: 34,\n    stylisticAltEighteen: 36,\n    stylisticAltNineteen: 38,\n    stylisticAltTwenty: 40\n  },\n  contextualAlternates: {\n    code: 36,\n    exclusive: false,\n    contextualAlternates: 0,\n    swashAlternates: 2,\n    contextualSwashAlternates: 4\n  },\n  lowerCase: {\n    code: 37,\n    exclusive: true,\n    defaultLowerCase: 0,\n    lowerCaseSmallCaps: 1,\n    lowerCasePetiteCaps: 2\n  },\n  upperCase: {\n    code: 38,\n    exclusive: true,\n    defaultUpperCase: 0,\n    upperCaseSmallCaps: 1,\n    upperCasePetiteCaps: 2\n  },\n  languageTag: {\n    // indices into ltag table\n    code: 39,\n    exclusive: true\n  },\n  CJKRomanSpacing: {\n    code: 103,\n    exclusive: true,\n    halfWidthCJKRoman: 0,\n    proportionalCJKRoman: 1,\n    defaultCJKRoman: 2,\n    fullWidthCJKRoman: 3\n  }\n};\nvar feature = function feature(name, selector) {\n  return [features[name].code, features[name][selector]];\n};\nvar OTMapping = {\n  rlig: feature('ligatures', 'requiredLigatures'),\n  clig: feature('ligatures', 'contextualLigatures'),\n  dlig: feature('ligatures', 'rareLigatures'),\n  hlig: feature('ligatures', 'historicalLigatures'),\n  liga: feature('ligatures', 'commonLigatures'),\n  hist: feature('ligatures', 'historicalLigatures'),\n  // ??\n  smcp: feature('lowerCase', 'lowerCaseSmallCaps'),\n  pcap: feature('lowerCase', 'lowerCasePetiteCaps'),\n  frac: feature('fractions', 'diagonalFractions'),\n  dnom: feature('fractions', 'diagonalFractions'),\n  // ??\n  numr: feature('fractions', 'diagonalFractions'),\n  // ??\n  afrc: feature('fractions', 'verticalFractions'),\n  // aalt\n  // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset?\n  // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum?\n  // unic, vatu, vhal, vjmo, vpal, vrt2\n  // dist -> trak table?\n  // kern, vkrn -> kern table\n  // lfbd + opbd + rtbd -> opbd table?\n  // mark, mkmk -> acnt table?\n  // locl -> languageTag + ltag table\n  case: feature('caseSensitiveLayout', 'caseSensitiveLayout'),\n  // also caseSensitiveSpacing\n  ccmp: feature('unicodeDecomposition', 'canonicalComposition'),\n  // compatibilityComposition?\n  cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n  // guess..., probably not given below\n  valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n  swsh: feature('contextualAlternates', 'swashAlternates'),\n  cswh: feature('contextualAlternates', 'contextualSwashAlternates'),\n  curs: feature('cursiveConnection', 'cursive'),\n  // ??\n  c2pc: feature('upperCase', 'upperCasePetiteCaps'),\n  c2sc: feature('upperCase', 'upperCaseSmallCaps'),\n  init: feature('smartSwash', 'wordInitialSwashes'),\n  // ??\n  fin2: feature('smartSwash', 'wordFinalSwashes'),\n  // ??\n  medi: feature('smartSwash', 'nonFinalSwashes'),\n  // ??\n  med2: feature('smartSwash', 'nonFinalSwashes'),\n  // ??\n  fin3: feature('smartSwash', 'wordFinalSwashes'),\n  // ??\n  fina: feature('smartSwash', 'wordFinalSwashes'),\n  // ??\n  pkna: feature('kanaSpacing', 'proportionalKana'),\n  half: feature('textSpacing', 'halfWidthText'),\n  // also HalfWidthCJKRoman, HalfWidthIdeographs?\n  halt: feature('textSpacing', 'altHalfWidthText'),\n  hkna: feature('alternateKana', 'alternateHorizKana'),\n  vkna: feature('alternateKana', 'alternateVertKana'),\n  // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated\n  ital: feature('italicCJKRoman', 'CJKItalicRoman'),\n  lnum: feature('numberCase', 'upperCaseNumbers'),\n  onum: feature('numberCase', 'lowerCaseNumbers'),\n  mgrk: feature('mathematicalExtras', 'mathematicalGreek'),\n  // nalt: not enough info. what type of annotation?\n  // ornm: ditto, which ornament style?\n  calt: feature('contextualAlternates', 'contextualAlternates'),\n  // or more?\n  vrt2: feature('verticalSubstitution', 'substituteVerticalForms'),\n  // oh... below?\n  vert: feature('verticalSubstitution', 'substituteVerticalForms'),\n  tnum: feature('numberSpacing', 'monospacedNumbers'),\n  pnum: feature('numberSpacing', 'proportionalNumbers'),\n  sups: feature('verticalPosition', 'superiors'),\n  subs: feature('verticalPosition', 'inferiors'),\n  ordn: feature('verticalPosition', 'ordinals'),\n  pwid: feature('textSpacing', 'proportionalText'),\n  hwid: feature('textSpacing', 'halfWidthText'),\n  qwid: feature('textSpacing', 'quarterWidthText'),\n  // also QuarterWidthNumbers?\n  twid: feature('textSpacing', 'thirdWidthText'),\n  // also ThirdWidthNumbers?\n  fwid: feature('textSpacing', 'proportionalText'),\n  //??\n  palt: feature('textSpacing', 'altProportionalText'),\n  trad: feature('characterShape', 'traditionalCharacters'),\n  smpl: feature('characterShape', 'simplifiedCharacters'),\n  jp78: feature('characterShape', 'JIS1978Characters'),\n  jp83: feature('characterShape', 'JIS1983Characters'),\n  jp90: feature('characterShape', 'JIS1990Characters'),\n  jp04: feature('characterShape', 'JIS2004Characters'),\n  expt: feature('characterShape', 'expertCharacters'),\n  hojo: feature('characterShape', 'hojoCharacters'),\n  nlck: feature('characterShape', 'NLCCharacters'),\n  tnam: feature('characterShape', 'traditionalNamesCharacters'),\n  ruby: feature('rubyKana', 'rubyKana'),\n  titl: feature('styleOptions', 'titlingCaps'),\n  zero: feature('typographicExtras', 'slashedZero'),\n  ss01: feature('stylisticAlternatives', 'stylisticAltOne'),\n  ss02: feature('stylisticAlternatives', 'stylisticAltTwo'),\n  ss03: feature('stylisticAlternatives', 'stylisticAltThree'),\n  ss04: feature('stylisticAlternatives', 'stylisticAltFour'),\n  ss05: feature('stylisticAlternatives', 'stylisticAltFive'),\n  ss06: feature('stylisticAlternatives', 'stylisticAltSix'),\n  ss07: feature('stylisticAlternatives', 'stylisticAltSeven'),\n  ss08: feature('stylisticAlternatives', 'stylisticAltEight'),\n  ss09: feature('stylisticAlternatives', 'stylisticAltNine'),\n  ss10: feature('stylisticAlternatives', 'stylisticAltTen'),\n  ss11: feature('stylisticAlternatives', 'stylisticAltEleven'),\n  ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'),\n  ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'),\n  ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'),\n  ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'),\n  ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'),\n  ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'),\n  ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'),\n  ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'),\n  ss20: feature('stylisticAlternatives', 'stylisticAltTwenty')\n}; // salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose\n// Add cv01-cv99 features\n\nfor (var i = 1; i <= 99; i++) {\n  OTMapping[\"cv\".concat(\"00\".concat(i).slice(-2))] = [features.characterAlternatives.code, i];\n} // create inverse mapping\n\nvar AATMapping = {};\nfor (var ot in OTMapping) {\n  var aat = OTMapping[ot];\n  if (AATMapping[aat[0]] == null) {\n    AATMapping[aat[0]] = {};\n  }\n  AATMapping[aat[0]][aat[1]] = ot;\n} // Maps an array of OpenType features to AAT features\n// in the form of {featureType:{featureSetting:true}}\n\nfunction mapOTToAAT(features) {\n  var res = {};\n  for (var k in features) {\n    var r = void 0;\n    if (r = OTMapping[k]) {\n      if (res[r[0]] == null) {\n        res[r[0]] = {};\n      }\n      res[r[0]][r[1]] = features[k];\n    }\n  }\n  return res;\n} // Maps strings in a [featureType, featureSetting]\n// to their equivalent number codes\n\nfunction mapFeatureStrings(f) {\n  var type = f[0],\n    setting = f[1];\n  if (isNaN(type)) {\n    var typeCode = features[type] && features[type].code;\n  } else {\n    var typeCode = type;\n  }\n  if (isNaN(setting)) {\n    var settingCode = features[type] && features[type][setting];\n  } else {\n    var settingCode = setting;\n  }\n  return [typeCode, settingCode];\n} // Maps AAT features to an array of OpenType features\n// Supports both arrays in the form of [[featureType, featureSetting]]\n// and objects in the form of {featureType:{featureSetting:true}}\n// featureTypes and featureSettings can be either strings or number codes\n\nfunction mapAATToOT(features) {\n  var res = {};\n  if (Array.isArray(features)) {\n    for (var k = 0; k < features.length; k++) {\n      var r = void 0;\n      var f = mapFeatureStrings(features[k]);\n      if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) {\n        res[r] = true;\n      }\n    }\n  } else if (typeof features === 'object') {\n    for (var type in features) {\n      var _feature = features[type];\n      for (var setting in _feature) {\n        var _r = void 0;\n        var _f = mapFeatureStrings([type, setting]);\n        if (_feature[setting] && (_r = AATMapping[_f[0]] && AATMapping[_f[0]][_f[1]])) {\n          res[_r] = true;\n        }\n      }\n    }\n  }\n  return Object.keys(res);\n}\nvar _class$1;\nvar AATLookupTable = (_class$1 = /*#__PURE__*/function () {\n  function AATLookupTable(table) {\n    this.table = table;\n  }\n  var _proto19 = AATLookupTable.prototype;\n  _proto19.lookup = function lookup(glyph) {\n    switch (this.table.version) {\n      case 0:\n        // simple array format\n        return this.table.values.getItem(glyph);\n      case 2: // segment format\n\n      case 4:\n        {\n          var min = 0;\n          var max = this.table.binarySearchHeader.nUnits - 1;\n          while (min <= max) {\n            var mid = min + max >> 1;\n            var seg = this.table.segments[mid]; // special end of search value\n\n            if (seg.firstGlyph === 0xffff) {\n              return null;\n            }\n            if (glyph < seg.firstGlyph) {\n              max = mid - 1;\n            } else if (glyph > seg.lastGlyph) {\n              min = mid + 1;\n            } else {\n              if (this.table.version === 2) {\n                return seg.value;\n              } else {\n                return seg.values[glyph - seg.firstGlyph];\n              }\n            }\n          }\n          return null;\n        }\n      case 6:\n        {\n          // lookup single\n          var _min = 0;\n          var _max = this.table.binarySearchHeader.nUnits - 1;\n          while (_min <= _max) {\n            var mid = _min + _max >> 1;\n            var seg = this.table.segments[mid]; // special end of search value\n\n            if (seg.glyph === 0xffff) {\n              return null;\n            }\n            if (glyph < seg.glyph) {\n              _max = mid - 1;\n            } else if (glyph > seg.glyph) {\n              _min = mid + 1;\n            } else {\n              return seg.value;\n            }\n          }\n          return null;\n        }\n      case 8:\n        // lookup trimmed\n        return this.table.values[glyph - this.table.firstGlyph];\n      default:\n        throw new Error(\"Unknown lookup table format: \".concat(this.table.version));\n    }\n  };\n  _proto19.glyphsForValue = function glyphsForValue(classValue) {\n    var res = [];\n    switch (this.table.version) {\n      case 2: // segment format\n\n      case 4:\n        {\n          for (var _iterator21 = _createForOfIteratorHelperLoose(this.table.segments), _step21; !(_step21 = _iterator21()).done;) {\n            var segment = _step21.value;\n            if (this.table.version === 2 && segment.value === classValue) {\n              res.push.apply(res, range(segment.firstGlyph, segment.lastGlyph + 1));\n            } else {\n              for (var index = 0; index < segment.values.length; index++) {\n                if (segment.values[index] === classValue) {\n                  res.push(segment.firstGlyph + index);\n                }\n              }\n            }\n          }\n          break;\n        }\n      case 6:\n        {\n          // lookup single\n          for (var _iterator22 = _createForOfIteratorHelperLoose(this.table.segments), _step22; !(_step22 = _iterator22()).done;) {\n            var _segment = _step22.value;\n            if (_segment.value === classValue) {\n              res.push(_segment.glyph);\n            }\n          }\n          break;\n        }\n      case 8:\n        {\n          // lookup trimmed\n          for (var i = 0; i < this.table.values.length; i++) {\n            if (this.table.values[i] === classValue) {\n              res.push(this.table.firstGlyph + i);\n            }\n          }\n          break;\n        }\n      default:\n        throw new Error(\"Unknown lookup table format: \".concat(this.table.version));\n    }\n    return res;\n  };\n  return AATLookupTable;\n}(), _applyDecoratedDescriptor(_class$1.prototype, \"glyphsForValue\", [cache], Object.getOwnPropertyDescriptor(_class$1.prototype, \"glyphsForValue\"), _class$1.prototype), _class$1);\nvar START_OF_TEXT_STATE = 0;\nvar END_OF_TEXT_CLASS = 0;\nvar OUT_OF_BOUNDS_CLASS = 1;\nvar DELETED_GLYPH_CLASS = 2;\nvar DONT_ADVANCE = 0x4000;\nvar AATStateMachine = /*#__PURE__*/function () {\n  function AATStateMachine(stateTable) {\n    this.stateTable = stateTable;\n    this.lookupTable = new AATLookupTable(stateTable.classTable);\n  }\n  var _proto20 = AATStateMachine.prototype;\n  _proto20.process = function process(glyphs, reverse, processEntry) {\n    var currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think?\n\n    var index = reverse ? glyphs.length - 1 : 0;\n    var dir = reverse ? -1 : 1;\n    while (dir === 1 && index <= glyphs.length || dir === -1 && index >= -1) {\n      var glyph = null;\n      var classCode = OUT_OF_BOUNDS_CLASS;\n      var shouldAdvance = true;\n      if (index === glyphs.length || index === -1) {\n        classCode = END_OF_TEXT_CLASS;\n      } else {\n        glyph = glyphs[index];\n        if (glyph.id === 0xffff) {\n          // deleted glyph\n          classCode = DELETED_GLYPH_CLASS;\n        } else {\n          classCode = this.lookupTable.lookup(glyph.id);\n          if (classCode == null) {\n            classCode = OUT_OF_BOUNDS_CLASS;\n          }\n        }\n      }\n      var row = this.stateTable.stateArray.getItem(currentState);\n      var entryIndex = row[classCode];\n      var entry = this.stateTable.entryTable.getItem(entryIndex);\n      if (classCode !== END_OF_TEXT_CLASS && classCode !== DELETED_GLYPH_CLASS) {\n        processEntry(glyph, entry, index);\n        shouldAdvance = !(entry.flags & DONT_ADVANCE);\n      }\n      currentState = entry.newState;\n      if (shouldAdvance) {\n        index += dir;\n      }\n    }\n    return glyphs;\n  }\n  /**\n   * Performs a depth-first traversal of the glyph strings\n   * represented by the state machine.\n   */;\n  _proto20.traverse = function traverse(opts, state, visited) {\n    if (state === void 0) {\n      state = 0;\n    }\n    if (visited === void 0) {\n      visited = new Set();\n    }\n    if (visited.has(state)) {\n      return;\n    }\n    visited.add(state);\n    var _this$stateTable = this.stateTable,\n      nClasses = _this$stateTable.nClasses,\n      stateArray = _this$stateTable.stateArray,\n      entryTable = _this$stateTable.entryTable;\n    var row = stateArray.getItem(state); // Skip predefined classes\n\n    for (var classCode = 4; classCode < nClasses; classCode++) {\n      var entryIndex = row[classCode];\n      var entry = entryTable.getItem(entryIndex); // Try all glyphs in the class\n\n      for (var _iterator23 = _createForOfIteratorHelperLoose(this.lookupTable.glyphsForValue(classCode)), _step23; !(_step23 = _iterator23()).done;) {\n        var glyph = _step23.value;\n        if (opts.enter) {\n          opts.enter(glyph, entry);\n        }\n        if (entry.newState !== 0) {\n          this.traverse(opts, entry.newState, visited);\n        }\n        if (opts.exit) {\n          opts.exit(glyph, entry);\n        }\n      }\n    }\n  };\n  return AATStateMachine;\n}();\nvar _class$2;\nvar MARK_FIRST = 0x8000;\nvar MARK_LAST = 0x2000;\nvar VERB = 0x000F; // contextual substitution and glyph insertion flag\n\nvar SET_MARK = 0x8000; // ligature entry flags\n\nvar SET_COMPONENT = 0x8000;\nvar PERFORM_ACTION = 0x2000; // ligature action masks\n\nvar LAST_MASK = 0x80000000;\nvar STORE_MASK = 0x40000000;\nvar OFFSET_MASK = 0x3FFFFFFF;\nvar REVERSE_DIRECTION = 0x400000;\nvar CURRENT_INSERT_BEFORE = 0x0800;\nvar MARKED_INSERT_BEFORE = 0x0400;\nvar CURRENT_INSERT_COUNT = 0x03E0;\nvar MARKED_INSERT_COUNT = 0x001F;\nvar AATMorxProcessor = (_class$2 = /*#__PURE__*/function () {\n  function AATMorxProcessor(font) {\n    this.processIndicRearragement = this.processIndicRearragement.bind(this);\n    this.processContextualSubstitution = this.processContextualSubstitution.bind(this);\n    this.processLigature = this.processLigature.bind(this);\n    this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this);\n    this.processGlyphInsertion = this.processGlyphInsertion.bind(this);\n    this.font = font;\n    this.morx = font.morx;\n    this.inputCache = null;\n  } // Processes an array of glyphs and applies the specified features\n  // Features should be in the form of {featureType:{featureSetting:boolean}}\n  var _proto21 = AATMorxProcessor.prototype;\n  _proto21.process = function process(glyphs, features) {\n    if (features === void 0) {\n      features = {};\n    }\n    for (var _iterator24 = _createForOfIteratorHelperLoose(this.morx.chains), _step24; !(_step24 = _iterator24()).done;) {\n      var chain = _step24.value;\n      var flags = chain.defaultFlags; // enable/disable the requested features\n\n      for (var _iterator25 = _createForOfIteratorHelperLoose(chain.features), _step25; !(_step25 = _iterator25()).done;) {\n        var feature = _step25.value;\n        var f = void 0;\n        if (f = features[feature.featureType]) {\n          if (f[feature.featureSetting]) {\n            flags &= feature.disableFlags;\n            flags |= feature.enableFlags;\n          } else if (f[feature.featureSetting] === false) {\n            flags |= ~feature.disableFlags;\n            flags &= ~feature.enableFlags;\n          }\n        }\n      }\n      for (var _iterator26 = _createForOfIteratorHelperLoose(chain.subtables), _step26; !(_step26 = _iterator26()).done;) {\n        var subtable = _step26.value;\n        if (subtable.subFeatureFlags & flags) {\n          this.processSubtable(subtable, glyphs);\n        }\n      }\n    } // remove deleted glyphs\n\n    var index = glyphs.length - 1;\n    while (index >= 0) {\n      if (glyphs[index].id === 0xffff) {\n        glyphs.splice(index, 1);\n      }\n      index--;\n    }\n    return glyphs;\n  };\n  _proto21.processSubtable = function processSubtable(subtable, glyphs) {\n    this.subtable = subtable;\n    this.glyphs = glyphs;\n    if (this.subtable.type === 4) {\n      this.processNoncontextualSubstitutions(this.subtable, this.glyphs);\n      return;\n    }\n    this.ligatureStack = [];\n    this.markedGlyph = null;\n    this.firstGlyph = null;\n    this.lastGlyph = null;\n    this.markedIndex = null;\n    var stateMachine = this.getStateMachine(subtable);\n    var process = this.getProcessor();\n    var reverse = !!(this.subtable.coverage & REVERSE_DIRECTION);\n    return stateMachine.process(this.glyphs, reverse, process);\n  };\n  _proto21.getStateMachine = function getStateMachine(subtable) {\n    return new AATStateMachine(subtable.table.stateTable);\n  };\n  _proto21.getProcessor = function getProcessor() {\n    switch (this.subtable.type) {\n      case 0:\n        return this.processIndicRearragement;\n      case 1:\n        return this.processContextualSubstitution;\n      case 2:\n        return this.processLigature;\n      case 4:\n        return this.processNoncontextualSubstitutions;\n      case 5:\n        return this.processGlyphInsertion;\n      default:\n        throw new Error(\"Invalid morx subtable type: \".concat(this.subtable.type));\n    }\n  };\n  _proto21.processIndicRearragement = function processIndicRearragement(glyph, entry, index) {\n    if (entry.flags & MARK_FIRST) {\n      this.firstGlyph = index;\n    }\n    if (entry.flags & MARK_LAST) {\n      this.lastGlyph = index;\n    }\n    reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph);\n  };\n  _proto21.processContextualSubstitution = function processContextualSubstitution(glyph, entry, index) {\n    var subsitutions = this.subtable.table.substitutionTable.items;\n    if (entry.markIndex !== 0xffff) {\n      var lookup = subsitutions.getItem(entry.markIndex);\n      var lookupTable = new AATLookupTable(lookup);\n      glyph = this.glyphs[this.markedGlyph];\n      var gid = lookupTable.lookup(glyph.id);\n      if (gid) {\n        this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints);\n      }\n    }\n    if (entry.currentIndex !== 0xffff) {\n      var _lookup = subsitutions.getItem(entry.currentIndex);\n      var _lookupTable = new AATLookupTable(_lookup);\n      glyph = this.glyphs[index];\n      var gid = _lookupTable.lookup(glyph.id);\n      if (gid) {\n        this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n      }\n    }\n    if (entry.flags & SET_MARK) {\n      this.markedGlyph = index;\n    }\n  };\n  _proto21.processLigature = function processLigature(glyph, entry, index) {\n    if (entry.flags & SET_COMPONENT) {\n      this.ligatureStack.push(index);\n    }\n    if (entry.flags & PERFORM_ACTION) {\n      var _this$ligatureStack;\n      var actions = this.subtable.table.ligatureActions;\n      var components = this.subtable.table.components;\n      var ligatureList = this.subtable.table.ligatureList;\n      var actionIndex = entry.action;\n      var last = false;\n      var ligatureIndex = 0;\n      var codePoints = [];\n      var ligatureGlyphs = [];\n      while (!last) {\n        var _codePoints;\n        var componentGlyph = this.ligatureStack.pop();\n        (_codePoints = codePoints).unshift.apply(_codePoints, this.glyphs[componentGlyph].codePoints);\n        var action = actions.getItem(actionIndex++);\n        last = !!(action & LAST_MASK);\n        var store = !!(action & STORE_MASK);\n        var offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits\n\n        offset += this.glyphs[componentGlyph].id;\n        var component = components.getItem(offset);\n        ligatureIndex += component;\n        if (last || store) {\n          var ligatureEntry = ligatureList.getItem(ligatureIndex);\n          this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints);\n          ligatureGlyphs.push(componentGlyph);\n          ligatureIndex = 0;\n          codePoints = [];\n        } else {\n          this.glyphs[componentGlyph] = this.font.getGlyph(0xffff);\n        }\n      } // Put ligature glyph indexes back on the stack\n\n      (_this$ligatureStack = this.ligatureStack).push.apply(_this$ligatureStack, ligatureGlyphs);\n    }\n  };\n  _proto21.processNoncontextualSubstitutions = function processNoncontextualSubstitutions(subtable, glyphs, index) {\n    var lookupTable = new AATLookupTable(subtable.table.lookupTable);\n    for (index = 0; index < glyphs.length; index++) {\n      var glyph = glyphs[index];\n      if (glyph.id !== 0xffff) {\n        var gid = lookupTable.lookup(glyph.id);\n        if (gid) {\n          // 0 means do nothing\n          glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n        }\n      }\n    }\n  };\n  _proto21._insertGlyphs = function _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) {\n    var _this$glyphs;\n    var insertions = [];\n    while (count--) {\n      var gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++);\n      insertions.push(this.font.getGlyph(gid));\n    }\n    if (!isBefore) {\n      glyphIndex++;\n    }\n    (_this$glyphs = this.glyphs).splice.apply(_this$glyphs, [glyphIndex, 0].concat(insertions));\n  };\n  _proto21.processGlyphInsertion = function processGlyphInsertion(glyph, entry, index) {\n    if (entry.flags & SET_MARK) {\n      this.markedIndex = index;\n    }\n    if (entry.markedInsertIndex !== 0xffff) {\n      var count = (entry.flags & MARKED_INSERT_COUNT) >>> 5;\n      var isBefore = !!(entry.flags & MARKED_INSERT_BEFORE);\n      this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore);\n    }\n    if (entry.currentInsertIndex !== 0xffff) {\n      var _count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5;\n      var _isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE);\n      this._insertGlyphs(index, entry.currentInsertIndex, _count, _isBefore);\n    }\n  };\n  _proto21.getSupportedFeatures = function getSupportedFeatures() {\n    var features = [];\n    for (var _iterator27 = _createForOfIteratorHelperLoose(this.morx.chains), _step27; !(_step27 = _iterator27()).done;) {\n      var chain = _step27.value;\n      for (var _iterator28 = _createForOfIteratorHelperLoose(chain.features), _step28; !(_step28 = _iterator28()).done;) {\n        var feature = _step28.value;\n        features.push([feature.featureType, feature.featureSetting]);\n      }\n    }\n    return features;\n  };\n  _proto21.generateInputs = function generateInputs(gid) {\n    if (!this.inputCache) {\n      this.generateInputCache();\n    }\n    return this.inputCache[gid] || [];\n  };\n  _proto21.generateInputCache = function generateInputCache() {\n    this.inputCache = {};\n    for (var _iterator29 = _createForOfIteratorHelperLoose(this.morx.chains), _step29; !(_step29 = _iterator29()).done;) {\n      var chain = _step29.value;\n      var flags = chain.defaultFlags;\n      for (var _iterator30 = _createForOfIteratorHelperLoose(chain.subtables), _step30; !(_step30 = _iterator30()).done;) {\n        var subtable = _step30.value;\n        if (subtable.subFeatureFlags & flags) {\n          this.generateInputsForSubtable(subtable);\n        }\n      }\n    }\n  };\n  _proto21.generateInputsForSubtable = function generateInputsForSubtable(subtable) {\n    var _this3 = this;\n    // Currently, only supporting ligature subtables.\n    if (subtable.type !== 2) {\n      return;\n    }\n    var reverse = !!(subtable.coverage & REVERSE_DIRECTION);\n    if (reverse) {\n      throw new Error('Reverse subtable, not supported.');\n    }\n    this.subtable = subtable;\n    this.ligatureStack = [];\n    var stateMachine = this.getStateMachine(subtable);\n    var process = this.getProcessor();\n    var input = [];\n    var stack = [];\n    this.glyphs = [];\n    stateMachine.traverse({\n      enter: function enter(glyph, entry) {\n        var glyphs = _this3.glyphs;\n        stack.push({\n          glyphs: glyphs.slice(),\n          ligatureStack: _this3.ligatureStack.slice()\n        }); // Add glyph to input and glyphs to process.\n\n        var g = _this3.font.getGlyph(glyph);\n        input.push(g);\n        glyphs.push(input[input.length - 1]); // Process ligature substitution\n\n        process(glyphs[glyphs.length - 1], entry, glyphs.length - 1); // Add input to result if only one matching (non-deleted) glyph remains.\n\n        var count = 0;\n        var found = 0;\n        for (var i = 0; i < glyphs.length && count <= 1; i++) {\n          if (glyphs[i].id !== 0xffff) {\n            count++;\n            found = glyphs[i].id;\n          }\n        }\n        if (count === 1) {\n          var result = input.map(function (g) {\n            return g.id;\n          });\n          var _cache = _this3.inputCache[found];\n          if (_cache) {\n            _cache.push(result);\n          } else {\n            _this3.inputCache[found] = [result];\n          }\n        }\n      },\n      exit: function exit() {\n        var _stack$pop = stack.pop();\n        _this3.glyphs = _stack$pop.glyphs;\n        _this3.ligatureStack = _stack$pop.ligatureStack;\n        input.pop();\n      }\n    });\n  };\n  return AATMorxProcessor;\n}(), _applyDecoratedDescriptor(_class$2.prototype, \"getStateMachine\", [cache], Object.getOwnPropertyDescriptor(_class$2.prototype, \"getStateMachine\"), _class$2.prototype), _class$2);\n// reverse the glyphs inside those ranges if specified\n// ranges are in [offset, length] format\n\nfunction swap(glyphs, rangeA, rangeB, reverseA, reverseB) {\n  if (reverseA === void 0) {\n    reverseA = false;\n  }\n  if (reverseB === void 0) {\n    reverseB = false;\n  }\n  var end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]);\n  if (reverseB) {\n    end.reverse();\n  }\n  var start = glyphs.splice.apply(glyphs, [rangeA[0], rangeA[1]].concat(end));\n  if (reverseA) {\n    start.reverse();\n  }\n  glyphs.splice.apply(glyphs, [rangeB[0] - (rangeA[1] - 1), 0].concat(start));\n  return glyphs;\n}\nfunction reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) {\n  switch (verb) {\n    case 0:\n      // no change\n      return glyphs;\n    case 1:\n      // Ax => xA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]);\n    case 2:\n      // xD => Dx\n      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]);\n    case 3:\n      // AxD => DxA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]);\n    case 4:\n      // ABx => xAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]);\n    case 5:\n      // ABx => xBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false);\n    case 6:\n      // xCD => CDx\n      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]);\n    case 7:\n      // xCD => DCx\n      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true);\n    case 8:\n      // AxCD => CDxA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]);\n    case 9:\n      // AxCD => DCxA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true);\n    case 10:\n      // ABxD => DxAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]);\n    case 11:\n      // ABxD => DxBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false);\n    case 12:\n      // ABxCD => CDxAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]);\n    case 13:\n      // ABxCD => CDxBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false);\n    case 14:\n      // ABxCD => DCxAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true);\n    case 15:\n      // ABxCD => DCxBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true);\n    default:\n      throw new Error(\"Unknown verb: \".concat(verb));\n  }\n}\nvar AATLayoutEngine = /*#__PURE__*/function () {\n  function AATLayoutEngine(font) {\n    this.font = font;\n    this.morxProcessor = new AATMorxProcessor(font);\n    this.fallbackPosition = false;\n  }\n  var _proto22 = AATLayoutEngine.prototype;\n  _proto22.substitute = function substitute(glyphRun) {\n    // AAT expects the glyphs to be in visual order prior to morx processing,\n    // so reverse the glyphs if the script is right-to-left.\n    if (glyphRun.direction === 'rtl') {\n      glyphRun.glyphs.reverse();\n    }\n    this.morxProcessor.process(glyphRun.glyphs, mapOTToAAT(glyphRun.features));\n  };\n  _proto22.getAvailableFeatures = function getAvailableFeatures(script, language) {\n    return mapAATToOT(this.morxProcessor.getSupportedFeatures());\n  };\n  _proto22.stringsForGlyph = function stringsForGlyph(gid) {\n    var glyphStrings = this.morxProcessor.generateInputs(gid);\n    var result = new Set();\n    for (var _iterator31 = _createForOfIteratorHelperLoose(glyphStrings), _step31; !(_step31 = _iterator31()).done;) {\n      var glyphs = _step31.value;\n      this._addStrings(glyphs, 0, result, '');\n    }\n    return result;\n  };\n  _proto22._addStrings = function _addStrings(glyphs, index, strings, string) {\n    var codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]);\n    for (var _iterator32 = _createForOfIteratorHelperLoose(codePoints), _step32; !(_step32 = _iterator32()).done;) {\n      var codePoint = _step32.value;\n      var s = string + String.fromCodePoint(codePoint);\n      if (index < glyphs.length - 1) {\n        this._addStrings(glyphs, index + 1, strings, s);\n      } else {\n        strings.add(s);\n      }\n    }\n  };\n  return AATLayoutEngine;\n}();\n/**\n * ShapingPlans are used by the OpenType shapers to store which\n * features should by applied, and in what order to apply them.\n * The features are applied in groups called stages. A feature\n * can be applied globally to all glyphs, or locally to only\n * specific glyphs.\n *\n * @private\n */\nvar ShapingPlan = /*#__PURE__*/function () {\n  function ShapingPlan(font, script, direction) {\n    this.font = font;\n    this.script = script;\n    this.direction = direction;\n    this.stages = [];\n    this.globalFeatures = {};\n    this.allFeatures = {};\n  }\n  /**\n   * Adds the given features to the last stage.\n   * Ignores features that have already been applied.\n   */\n  var _proto23 = ShapingPlan.prototype;\n  _proto23._addFeatures = function _addFeatures(features, global) {\n    var stageIndex = this.stages.length - 1;\n    var stage = this.stages[stageIndex];\n    for (var _iterator33 = _createForOfIteratorHelperLoose(features), _step33; !(_step33 = _iterator33()).done;) {\n      var feature = _step33.value;\n      if (this.allFeatures[feature] == null) {\n        stage.push(feature);\n        this.allFeatures[feature] = stageIndex;\n        if (global) {\n          this.globalFeatures[feature] = true;\n        }\n      }\n    }\n  }\n  /**\n   * Add features to the last stage\n   */;\n  _proto23.add = function add(arg, global) {\n    if (global === void 0) {\n      global = true;\n    }\n    if (this.stages.length === 0) {\n      this.stages.push([]);\n    }\n    if (typeof arg === 'string') {\n      arg = [arg];\n    }\n    if (Array.isArray(arg)) {\n      this._addFeatures(arg, global);\n    } else if (typeof arg === 'object') {\n      this._addFeatures(arg.global || [], true);\n      this._addFeatures(arg.local || [], false);\n    } else {\n      throw new Error(\"Unsupported argument to ShapingPlan#add\");\n    }\n  }\n  /**\n   * Add a new stage\n   */;\n  _proto23.addStage = function addStage(arg, global) {\n    if (typeof arg === 'function') {\n      this.stages.push(arg, []);\n    } else {\n      this.stages.push([]);\n      this.add(arg, global);\n    }\n  };\n  _proto23.setFeatureOverrides = function setFeatureOverrides(features) {\n    if (Array.isArray(features)) {\n      this.add(features);\n    } else if (typeof features === 'object') {\n      for (var tag in features) {\n        if (features[tag]) {\n          this.add(tag);\n        } else if (this.allFeatures[tag] != null) {\n          var stage = this.stages[this.allFeatures[tag]];\n          stage.splice(stage.indexOf(tag), 1);\n          delete this.allFeatures[tag];\n          delete this.globalFeatures[tag];\n        }\n      }\n    }\n  }\n  /**\n   * Assigns the global features to the given glyphs\n   */;\n  _proto23.assignGlobalFeatures = function assignGlobalFeatures(glyphs) {\n    for (var _iterator34 = _createForOfIteratorHelperLoose(glyphs), _step34; !(_step34 = _iterator34()).done;) {\n      var glyph = _step34.value;\n      for (var feature in this.globalFeatures) {\n        glyph.features[feature] = true;\n      }\n    }\n  }\n  /**\n   * Executes the planned stages using the given OTProcessor\n   */;\n  _proto23.process = function process(processor, glyphs, positions) {\n    for (var _iterator35 = _createForOfIteratorHelperLoose(this.stages), _step35; !(_step35 = _iterator35()).done;) {\n      var stage = _step35.value;\n      if (typeof stage === 'function') {\n        if (!positions) {\n          stage(this.font, glyphs, this);\n        }\n      } else if (stage.length > 0) {\n        processor.applyFeatures(stage, glyphs, positions);\n      }\n    }\n  };\n  return ShapingPlan;\n}();\nvar VARIATION_FEATURES = ['rvrn'];\nvar COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk'];\nvar FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom'];\nvar HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern'];\nvar DIRECTIONAL_FEATURES = {\n  ltr: ['ltra', 'ltrm'],\n  rtl: ['rtla', 'rtlm']\n};\nvar DefaultShaper = /*#__PURE__*/function () {\n  function DefaultShaper() {}\n  DefaultShaper.plan = function plan(_plan, glyphs, features) {\n    // Plan the features we want to apply\n    this.planPreprocessing(_plan);\n    this.planFeatures(_plan);\n    this.planPostprocessing(_plan, features); // Assign the global features to all the glyphs\n\n    _plan.assignGlobalFeatures(glyphs); // Assign local features to glyphs\n\n    this.assignFeatures(_plan, glyphs);\n  };\n  DefaultShaper.planPreprocessing = function planPreprocessing(plan) {\n    plan.add({\n      global: [].concat(VARIATION_FEATURES, DIRECTIONAL_FEATURES[plan.direction]),\n      local: FRACTIONAL_FEATURES\n    });\n  };\n  DefaultShaper.planFeatures = function planFeatures(plan) {// Do nothing by default. Let subclasses override this.\n  };\n  DefaultShaper.planPostprocessing = function planPostprocessing(plan, userFeatures) {\n    plan.add([].concat(COMMON_FEATURES, HORIZONTAL_FEATURES));\n    plan.setFeatureOverrides(userFeatures);\n  };\n  DefaultShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    // Enable contextual fractions\n    for (var i = 0; i < glyphs.length; i++) {\n      var glyph = glyphs[i];\n      if (glyph.codePoints[0] === 0x2044) {\n        // fraction slash\n        var start = i;\n        var end = i + 1; // Apply numerator\n\n        while (start > 0 && unicode.isDigit(glyphs[start - 1].codePoints[0])) {\n          glyphs[start - 1].features.numr = true;\n          glyphs[start - 1].features.frac = true;\n          start--;\n        } // Apply denominator\n\n        while (end < glyphs.length && unicode.isDigit(glyphs[end].codePoints[0])) {\n          glyphs[end].features.dnom = true;\n          glyphs[end].features.frac = true;\n          end++;\n        } // Apply fraction slash\n\n        glyph.features.frac = true;\n        i = end - 1;\n      }\n    }\n  };\n  return DefaultShaper;\n}();\n_defineProperty(DefaultShaper, \"zeroMarkWidths\", 'AFTER_GPOS');\nvar trie = new UnicodeTrie(Buffer(\"APABAAAAAAAAOAAAAf0BAv7tmi1MxDAUx7vtvjhAgcDgkEgEAnmXEBIMCYaEcygEiqBQ4FAkCE4ikUgMiiBJSAgSiUQSDMn9L9eSl6bddddug9t7yS/trevre+3r27pcNxZiG+yCfdCVv/9LeQxOwRm4AJegD27ALbgD9+ABPJF+z+BN/h7yDj5k/VOWX6SdmU5+wLWknggxDxaS8u0qiiX4uiz9XamQ3wzDMAzDMAzDMAzDVI/h959V/v7BMAzDMAzDMLlyNTNiMSdewVxbiA44B4/guz1qW58VYlMI0WsJ0W+N6kXw0spvPtdwhtkwnGM6uLaV4Xyzg3v3PM9DPfQ/sOg4xPWjipy31P8LTqbU304c/cLCUmWJLNB2Uz2U1KTeRKNmKHVMfbJC+/0loTZRH/W5cvEvBJPMbREkWt3FD1NcqXZBSpuE2Ad0PBehPtNrPtIEdYP+hiRt/V1jIiE69X4NT/uVZI3PUHE9bm5M7ePGdZWy951v7Nn6j8v1WWKP3mt6ttnsigx6VN7Vc0VomSSGqW2mGNP1muZPl7LfjNUaKNFtDGVf2fvE9O7VlBS5j333c5p/eeoOqcs1R/hIqDWLJ7TTlksirVT1SI7l8k4Yp+g3jafGcrU1RM6l9th80XOpnlN97bDNY4i4s61B0Si/ipa0uHMl6zqEjlFfCZm/TM8KmzQDjmuTAQ==\",\"base64\"));\nvar FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init'];\nvar ShapingClasses = {\n  Non_Joining: 0,\n  Left_Joining: 1,\n  Right_Joining: 2,\n  Dual_Joining: 3,\n  Join_Causing: 3,\n  ALAPH: 4,\n  'DALATH RISH': 5,\n  Transparent: 6\n};\nvar ISOL = 'isol';\nvar FINA = 'fina';\nvar FIN2 = 'fin2';\nvar FIN3 = 'fin3';\nvar MEDI = 'medi';\nvar MED2 = 'med2';\nvar INIT = 'init';\nvar NONE = null; // Each entry is [prevAction, curAction, nextState]\n\nvar STATE_TABLE = [\n//   Non_Joining,        Left_Joining,       Right_Joining,     Dual_Joining,           ALAPH,            DALATH RISH\n// State 0: prev was U,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 6]],\n// State 1: prev was R or ISOL/ALAPH,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN2, 5], [NONE, ISOL, 6]],\n// State 2: prev was D/L in ISOL form,  willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [INIT, FINA, 1], [INIT, FINA, 3], [INIT, FINA, 4], [INIT, FINA, 6]],\n// State 3: prev was D in FINA form,  willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [MEDI, FINA, 1], [MEDI, FINA, 3], [MEDI, FINA, 4], [MEDI, FINA, 6]],\n// State 4: prev was FINA ALAPH,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [MED2, ISOL, 1], [MED2, ISOL, 2], [MED2, FIN2, 5], [MED2, ISOL, 6]],\n// State 5: prev was FIN2/FIN3 ALAPH,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [ISOL, ISOL, 1], [ISOL, ISOL, 2], [ISOL, FIN2, 5], [ISOL, ISOL, 6]],\n// State 6: prev was DALATH/RISH,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN3, 5], [NONE, ISOL, 6]]];\n/**\n * This is a shaper for Arabic, and other cursive scripts.\n * It uses data from ArabicShaping.txt in the Unicode database,\n * compiled to a UnicodeTrie by generate-data.coffee.\n *\n * The shaping state machine was ported from Harfbuzz.\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc\n */\nvar ArabicShaper = /*#__PURE__*/function (_DefaultShaper) {\n  _inheritsLoose(ArabicShaper, _DefaultShaper);\n  function ArabicShaper() {\n    return _DefaultShaper.apply(this, arguments) || this;\n  }\n  ArabicShaper.planFeatures = function planFeatures(plan) {\n    plan.add(['ccmp', 'locl']);\n    for (var i = 0; i < FEATURES.length; i++) {\n      var feature = FEATURES[i];\n      plan.addStage(feature, false);\n    }\n    plan.addStage('mset');\n  };\n  ArabicShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    _DefaultShaper.assignFeatures.call(this, plan, glyphs);\n    var prev = -1;\n    var state = 0;\n    var actions = []; // Apply the state machine to map glyphs to features\n\n    for (var i = 0; i < glyphs.length; i++) {\n      var curAction = void 0,\n        prevAction = void 0;\n      var glyph = glyphs[i];\n      var type = getShapingClass(glyph.codePoints[0]);\n      if (type === ShapingClasses.Transparent) {\n        actions[i] = NONE;\n        continue;\n      }\n      var _STATE_TABLE$state$ty = STATE_TABLE[state][type];\n      prevAction = _STATE_TABLE$state$ty[0];\n      curAction = _STATE_TABLE$state$ty[1];\n      state = _STATE_TABLE$state$ty[2];\n      if (prevAction !== NONE && prev !== -1) {\n        actions[prev] = prevAction;\n      }\n      actions[i] = curAction;\n      prev = i;\n    } // Apply the chosen features to their respective glyphs\n\n    for (var index = 0; index < glyphs.length; index++) {\n      var feature = void 0;\n      var glyph = glyphs[index];\n      if (feature = actions[index]) {\n        glyph.features[feature] = true;\n      }\n    }\n  };\n  return ArabicShaper;\n}(DefaultShaper);\nfunction getShapingClass(codePoint) {\n  var res = trie.get(codePoint);\n  if (res) {\n    return res - 1;\n  }\n  var category = unicode.getCategory(codePoint);\n  if (category === 'Mn' || category === 'Me' || category === 'Cf') {\n    return ShapingClasses.Transparent;\n  }\n  return ShapingClasses.Non_Joining;\n}\nvar GlyphIterator = /*#__PURE__*/function () {\n  function GlyphIterator(glyphs, options) {\n    this.glyphs = glyphs;\n    this.reset(options);\n  }\n  var _proto24 = GlyphIterator.prototype;\n  _proto24.reset = function reset(options, index) {\n    if (options === void 0) {\n      options = {};\n    }\n    if (index === void 0) {\n      index = 0;\n    }\n    this.options = options;\n    this.flags = options.flags || {};\n    this.markAttachmentType = options.markAttachmentType || 0;\n    this.index = index;\n  };\n  _proto24.shouldIgnore = function shouldIgnore(glyph) {\n    return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType;\n  };\n  _proto24.move = function move(dir) {\n    this.index += dir;\n    while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) {\n      this.index += dir;\n    }\n    if (0 > this.index || this.index >= this.glyphs.length) {\n      return null;\n    }\n    return this.glyphs[this.index];\n  };\n  _proto24.next = function next() {\n    return this.move(+1);\n  };\n  _proto24.prev = function prev() {\n    return this.move(-1);\n  };\n  _proto24.peek = function peek(count) {\n    if (count === void 0) {\n      count = 1;\n    }\n    var idx = this.index;\n    var res = this.increment(count);\n    this.index = idx;\n    return res;\n  };\n  _proto24.peekIndex = function peekIndex(count) {\n    if (count === void 0) {\n      count = 1;\n    }\n    var idx = this.index;\n    this.increment(count);\n    var res = this.index;\n    this.index = idx;\n    return res;\n  };\n  _proto24.increment = function increment(count) {\n    if (count === void 0) {\n      count = 1;\n    }\n    var dir = count < 0 ? -1 : 1;\n    count = Math.abs(count);\n    while (count--) {\n      this.move(dir);\n    }\n    return this.glyphs[this.index];\n  };\n  _createClass(GlyphIterator, [{\n    key: \"cur\",\n    get: function get() {\n      return this.glyphs[this.index] || null;\n    }\n  }]);\n  return GlyphIterator;\n}();\nvar DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn'];\nvar OTProcessor = /*#__PURE__*/function () {\n  function OTProcessor(font, table) {\n    this.font = font;\n    this.table = table;\n    this.script = null;\n    this.scriptTag = null;\n    this.language = null;\n    this.languageTag = null;\n    this.features = {};\n    this.lookups = {}; // Setup variation substitutions\n\n    this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1; // initialize to default script + language\n\n    this.selectScript(); // current context (set by applyFeatures)\n\n    this.glyphs = [];\n    this.positions = []; // only used by GPOS\n\n    this.ligatureID = 1;\n    this.currentFeature = null;\n  }\n  var _proto25 = OTProcessor.prototype;\n  _proto25.findScript = function findScript(script) {\n    if (this.table.scriptList == null) {\n      return null;\n    }\n    if (!Array.isArray(script)) {\n      script = [script];\n    }\n    for (var _iterator36 = _createForOfIteratorHelperLoose(script), _step36; !(_step36 = _iterator36()).done;) {\n      var s = _step36.value;\n      for (var _iterator37 = _createForOfIteratorHelperLoose(this.table.scriptList), _step37; !(_step37 = _iterator37()).done;) {\n        var entry = _step37.value;\n        if (entry.tag === s) {\n          return entry;\n        }\n      }\n    }\n    return null;\n  };\n  _proto25.selectScript = function selectScript(script, language, direction$1) {\n    var changed = false;\n    var entry;\n    if (!this.script || script !== this.scriptTag) {\n      entry = this.findScript(script);\n      if (!entry) {\n        entry = this.findScript(DEFAULT_SCRIPTS);\n      }\n      if (!entry) {\n        return this.scriptTag;\n      }\n      this.scriptTag = entry.tag;\n      this.script = entry.script;\n      this.language = null;\n      this.languageTag = null;\n      changed = true;\n    }\n    if (!direction$1 || direction$1 !== this.direction) {\n      this.direction = direction$1 || direction(script);\n    }\n    if (language && language.length < 4) {\n      language += ' '.repeat(4 - language.length);\n    }\n    if (!language || language !== this.languageTag) {\n      this.language = null;\n      for (var _iterator38 = _createForOfIteratorHelperLoose(this.script.langSysRecords), _step38; !(_step38 = _iterator38()).done;) {\n        var lang = _step38.value;\n        if (lang.tag === language) {\n          this.language = lang.langSys;\n          this.languageTag = lang.tag;\n          break;\n        }\n      }\n      if (!this.language) {\n        this.language = this.script.defaultLangSys;\n        this.languageTag = null;\n      }\n      changed = true;\n    } // Build a feature lookup table\n\n    if (changed) {\n      this.features = {};\n      if (this.language) {\n        for (var _iterator39 = _createForOfIteratorHelperLoose(this.language.featureIndexes), _step39; !(_step39 = _iterator39()).done;) {\n          var featureIndex = _step39.value;\n          var record = this.table.featureList[featureIndex];\n          var substituteFeature = this.substituteFeatureForVariations(featureIndex);\n          this.features[record.tag] = substituteFeature || record.feature;\n        }\n      }\n    }\n    return this.scriptTag;\n  };\n  _proto25.lookupsForFeatures = function lookupsForFeatures(userFeatures, exclude) {\n    if (userFeatures === void 0) {\n      userFeatures = [];\n    }\n    var lookups = [];\n    for (var _iterator40 = _createForOfIteratorHelperLoose(userFeatures), _step40; !(_step40 = _iterator40()).done;) {\n      var tag = _step40.value;\n      var feature = this.features[tag];\n      if (!feature) {\n        continue;\n      }\n      for (var _iterator41 = _createForOfIteratorHelperLoose(feature.lookupListIndexes), _step41; !(_step41 = _iterator41()).done;) {\n        var lookupIndex = _step41.value;\n        if (exclude && exclude.indexOf(lookupIndex) !== -1) {\n          continue;\n        }\n        lookups.push({\n          feature: tag,\n          index: lookupIndex,\n          lookup: this.table.lookupList.get(lookupIndex)\n        });\n      }\n    }\n    lookups.sort(function (a, b) {\n      return a.index - b.index;\n    });\n    return lookups;\n  };\n  _proto25.substituteFeatureForVariations = function substituteFeatureForVariations(featureIndex) {\n    if (this.variationsIndex === -1) {\n      return null;\n    }\n    var record = this.table.featureVariations.featureVariationRecords[this.variationsIndex];\n    var substitutions = record.featureTableSubstitution.substitutions;\n    for (var _iterator42 = _createForOfIteratorHelperLoose(substitutions), _step42; !(_step42 = _iterator42()).done;) {\n      var substitution = _step42.value;\n      if (substitution.featureIndex === featureIndex) {\n        return substitution.alternateFeatureTable;\n      }\n    }\n    return null;\n  };\n  _proto25.findVariationsIndex = function findVariationsIndex(coords) {\n    var variations = this.table.featureVariations;\n    if (!variations) {\n      return -1;\n    }\n    var records = variations.featureVariationRecords;\n    for (var i = 0; i < records.length; i++) {\n      var conditions = records[i].conditionSet.conditionTable;\n      if (this.variationConditionsMatch(conditions, coords)) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  _proto25.variationConditionsMatch = function variationConditionsMatch(conditions, coords) {\n    return conditions.every(function (condition) {\n      var coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0;\n      return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue;\n    });\n  };\n  _proto25.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) {\n    var lookups = this.lookupsForFeatures(userFeatures);\n    this.applyLookups(lookups, glyphs, advances);\n  };\n  _proto25.applyLookups = function applyLookups(lookups, glyphs, positions) {\n    this.glyphs = glyphs;\n    this.positions = positions;\n    this.glyphIterator = new GlyphIterator(glyphs);\n    for (var _iterator43 = _createForOfIteratorHelperLoose(lookups), _step43; !(_step43 = _iterator43()).done;) {\n      var _step43$value = _step43.value,\n        feature = _step43$value.feature,\n        lookup = _step43$value.lookup;\n      this.currentFeature = feature;\n      this.glyphIterator.reset(lookup.flags);\n      while (this.glyphIterator.index < glyphs.length) {\n        if (!(feature in this.glyphIterator.cur.features)) {\n          this.glyphIterator.next();\n          continue;\n        }\n        for (var _iterator44 = _createForOfIteratorHelperLoose(lookup.subTables), _step44; !(_step44 = _iterator44()).done;) {\n          var table = _step44.value;\n          var res = this.applyLookup(lookup.lookupType, table);\n          if (res) {\n            break;\n          }\n        }\n        this.glyphIterator.next();\n      }\n    }\n  };\n  _proto25.applyLookup = function applyLookup(lookup, table) {\n    throw new Error(\"applyLookup must be implemented by subclasses\");\n  };\n  _proto25.applyLookupList = function applyLookupList(lookupRecords) {\n    var options = this.glyphIterator.options;\n    var glyphIndex = this.glyphIterator.index;\n    for (var _iterator45 = _createForOfIteratorHelperLoose(lookupRecords), _step45; !(_step45 = _iterator45()).done;) {\n      var lookupRecord = _step45.value;\n      // Reset flags and find glyph index for this lookup record\n      this.glyphIterator.reset(options, glyphIndex);\n      this.glyphIterator.increment(lookupRecord.sequenceIndex); // Get the lookup and setup flags for subtables\n\n      var lookup = this.table.lookupList.get(lookupRecord.lookupListIndex);\n      this.glyphIterator.reset(lookup.flags, this.glyphIterator.index); // Apply lookup subtables until one matches\n\n      for (var _iterator46 = _createForOfIteratorHelperLoose(lookup.subTables), _step46; !(_step46 = _iterator46()).done;) {\n        var table = _step46.value;\n        if (this.applyLookup(lookup.lookupType, table)) {\n          break;\n        }\n      }\n    }\n    this.glyphIterator.reset(options, glyphIndex);\n    return true;\n  };\n  _proto25.coverageIndex = function coverageIndex(coverage, glyph) {\n    if (glyph == null) {\n      glyph = this.glyphIterator.cur.id;\n    }\n    switch (coverage.version) {\n      case 1:\n        return coverage.glyphs.indexOf(glyph);\n      case 2:\n        for (var _iterator47 = _createForOfIteratorHelperLoose(coverage.rangeRecords), _step47; !(_step47 = _iterator47()).done;) {\n          var range = _step47.value;\n          if (range.start <= glyph && glyph <= range.end) {\n            return range.startCoverageIndex + glyph - range.start;\n          }\n        }\n        break;\n    }\n    return -1;\n  };\n  _proto25.match = function match(sequenceIndex, sequence, fn, matched) {\n    var pos = this.glyphIterator.index;\n    var glyph = this.glyphIterator.increment(sequenceIndex);\n    var idx = 0;\n    while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) {\n      if (matched) {\n        matched.push(this.glyphIterator.index);\n      }\n      idx++;\n      glyph = this.glyphIterator.next();\n    }\n    this.glyphIterator.index = pos;\n    if (idx < sequence.length) {\n      return false;\n    }\n    return matched || true;\n  };\n  _proto25.sequenceMatches = function sequenceMatches(sequenceIndex, sequence) {\n    return this.match(sequenceIndex, sequence, function (component, glyph) {\n      return component === glyph.id;\n    });\n  };\n  _proto25.sequenceMatchIndices = function sequenceMatchIndices(sequenceIndex, sequence) {\n    var _this4 = this;\n    return this.match(sequenceIndex, sequence, function (component, glyph) {\n      // If the current feature doesn't apply to this glyph,\n      if (!(_this4.currentFeature in glyph.features)) {\n        return false;\n      }\n      return component === glyph.id;\n    }, []);\n  };\n  _proto25.coverageSequenceMatches = function coverageSequenceMatches(sequenceIndex, sequence) {\n    var _this5 = this;\n    return this.match(sequenceIndex, sequence, function (coverage, glyph) {\n      return _this5.coverageIndex(coverage, glyph.id) >= 0;\n    });\n  };\n  _proto25.getClassID = function getClassID(glyph, classDef) {\n    switch (classDef.version) {\n      case 1:\n        // Class array\n        var i = glyph - classDef.startGlyph;\n        if (i >= 0 && i < classDef.classValueArray.length) {\n          return classDef.classValueArray[i];\n        }\n        break;\n      case 2:\n        for (var _iterator48 = _createForOfIteratorHelperLoose(classDef.classRangeRecord), _step48; !(_step48 = _iterator48()).done;) {\n          var range = _step48.value;\n          if (range.start <= glyph && glyph <= range.end) {\n            return range.class;\n          }\n        }\n        break;\n    }\n    return 0;\n  };\n  _proto25.classSequenceMatches = function classSequenceMatches(sequenceIndex, sequence, classDef) {\n    var _this6 = this;\n    return this.match(sequenceIndex, sequence, function (classID, glyph) {\n      return classID === _this6.getClassID(glyph.id, classDef);\n    });\n  };\n  _proto25.applyContext = function applyContext(table) {\n    switch (table.version) {\n      case 1:\n        var index = this.coverageIndex(table.coverage);\n        if (index === -1) {\n          return false;\n        }\n        var set = table.ruleSets[index];\n        for (var _iterator49 = _createForOfIteratorHelperLoose(set), _step49; !(_step49 = _iterator49()).done;) {\n          var rule = _step49.value;\n          if (this.sequenceMatches(1, rule.input)) {\n            return this.applyLookupList(rule.lookupRecords);\n          }\n        }\n        break;\n      case 2:\n        if (this.coverageIndex(table.coverage) === -1) {\n          return false;\n        }\n        index = this.getClassID(this.glyphIterator.cur.id, table.classDef);\n        if (index === -1) {\n          return false;\n        }\n        set = table.classSet[index];\n        for (var _iterator50 = _createForOfIteratorHelperLoose(set), _step50; !(_step50 = _iterator50()).done;) {\n          var _rule = _step50.value;\n          if (this.classSequenceMatches(1, _rule.classes, table.classDef)) {\n            return this.applyLookupList(_rule.lookupRecords);\n          }\n        }\n        break;\n      case 3:\n        if (this.coverageSequenceMatches(0, table.coverages)) {\n          return this.applyLookupList(table.lookupRecords);\n        }\n        break;\n    }\n    return false;\n  };\n  _proto25.applyChainingContext = function applyChainingContext(table) {\n    switch (table.version) {\n      case 1:\n        var index = this.coverageIndex(table.coverage);\n        if (index === -1) {\n          return false;\n        }\n        var set = table.chainRuleSets[index];\n        for (var _iterator51 = _createForOfIteratorHelperLoose(set), _step51; !(_step51 = _iterator51()).done;) {\n          var rule = _step51.value;\n          if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) {\n            return this.applyLookupList(rule.lookupRecords);\n          }\n        }\n        break;\n      case 2:\n        if (this.coverageIndex(table.coverage) === -1) {\n          return false;\n        }\n        index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef);\n        var rules = table.chainClassSet[index];\n        if (!rules) {\n          return false;\n        }\n        for (var _iterator52 = _createForOfIteratorHelperLoose(rules), _step52; !(_step52 = _iterator52()).done;) {\n          var _rule2 = _step52.value;\n          if (this.classSequenceMatches(-_rule2.backtrack.length, _rule2.backtrack, table.backtrackClassDef) && this.classSequenceMatches(1, _rule2.input, table.inputClassDef) && this.classSequenceMatches(1 + _rule2.input.length, _rule2.lookahead, table.lookaheadClassDef)) {\n            return this.applyLookupList(_rule2.lookupRecords);\n          }\n        }\n        break;\n      case 3:\n        if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) {\n          return this.applyLookupList(table.lookupRecords);\n        }\n        break;\n    }\n    return false;\n  };\n  return OTProcessor;\n}();\nvar GlyphInfo = /*#__PURE__*/function () {\n  function GlyphInfo(font, id, codePoints, features) {\n    if (codePoints === void 0) {\n      codePoints = [];\n    }\n    this._font = font;\n    this.codePoints = codePoints;\n    this.id = id;\n    this.features = {};\n    if (Array.isArray(features)) {\n      for (var i = 0; i < features.length; i++) {\n        var feature = features[i];\n        this.features[feature] = true;\n      }\n    } else if (typeof features === 'object') {\n      Object.assign(this.features, features);\n    }\n    this.ligatureID = null;\n    this.ligatureComponent = null;\n    this.isLigated = false;\n    this.cursiveAttachment = null;\n    this.markAttachment = null;\n    this.shaperInfo = null;\n    this.substituted = false;\n    this.isMultiplied = false;\n  }\n  var _proto26 = GlyphInfo.prototype;\n  _proto26.copy = function copy() {\n    return new GlyphInfo(this._font, this.id, this.codePoints, this.features);\n  };\n  _createClass(GlyphInfo, [{\n    key: \"id\",\n    get: function get() {\n      return this._id;\n    },\n    set: function set(id) {\n      this._id = id;\n      this.substituted = true;\n      var GDEF = this._font.GDEF;\n      if (GDEF && GDEF.glyphClassDef) {\n        // TODO: clean this up\n        var classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef);\n        this.isBase = classID === 1;\n        this.isLigature = classID === 2;\n        this.isMark = classID === 3;\n        this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0;\n      } else {\n        this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\n        this.isBase = !this.isMark;\n        this.isLigature = this.codePoints.length > 1;\n        this.markAttachmentType = 0;\n      }\n    }\n  }]);\n  return GlyphInfo;\n}();\n/**\n * This is a shaper for the Hangul script, used by the Korean language.\n * It does the following:\n *   - decompose if unsupported by the font:\n *     <LV>   -> <L,V>\n *     <LVT>  -> <L,V,T>\n *     <LV,T> -> <L,V,T>\n *\n *   - compose if supported by the font:\n *     <L,V>   -> <LV>\n *     <L,V,T> -> <LVT>\n *     <LV,T>  -> <LVT>\n *\n *   - reorder tone marks (S is any valid syllable):\n *     <S, M> -> <M, S>\n *\n *   - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.\n *\n * This logic is based on the following documents:\n *   - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm\n *   - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf\n */\nvar HangulShaper = /*#__PURE__*/function (_DefaultShaper2) {\n  _inheritsLoose(HangulShaper, _DefaultShaper2);\n  function HangulShaper() {\n    return _DefaultShaper2.apply(this, arguments) || this;\n  }\n  HangulShaper.planFeatures = function planFeatures(plan) {\n    plan.add(['ljmo', 'vjmo', 'tjmo'], false);\n  };\n  HangulShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    var state = 0;\n    var i = 0;\n    while (i < glyphs.length) {\n      var action = void 0;\n      var glyph = glyphs[i];\n      var code = glyph.codePoints[0];\n      var type = getType(code);\n      var _STATE_TABLE$1$state$ = STATE_TABLE$1[state][type];\n      action = _STATE_TABLE$1$state$[0];\n      state = _STATE_TABLE$1$state$[1];\n      switch (action) {\n        case DECOMPOSE:\n          // Decompose the composed syllable if it is not supported by the font.\n          if (!plan.font.hasGlyphForCodePoint(code)) {\n            i = decompose(glyphs, i, plan.font);\n          }\n          break;\n        case COMPOSE:\n          // Found a decomposed syllable. Try to compose if supported by the font.\n          i = compose(glyphs, i, plan.font);\n          break;\n        case TONE_MARK:\n          // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable.\n          reorderToneMark(glyphs, i, plan.font);\n          break;\n        case INVALID:\n          // Tone mark has no valid syllable to attach to, so insert a dotted circle\n          i = insertDottedCircle(glyphs, i, plan.font);\n          break;\n      }\n      i++;\n    }\n  };\n  return HangulShaper;\n}(DefaultShaper);\n_defineProperty(HangulShaper, \"zeroMarkWidths\", 'NONE');\nvar HANGUL_BASE = 0xac00;\nvar HANGUL_END = 0xd7a4;\nvar HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1;\nvar L_BASE = 0x1100; // lead\n\nvar V_BASE = 0x1161; // vowel\n\nvar T_BASE = 0x11a7; // trail\n\nvar L_COUNT = 19;\nvar V_COUNT = 21;\nvar T_COUNT = 28;\nvar L_END = L_BASE + L_COUNT - 1;\nvar V_END = V_BASE + V_COUNT - 1;\nvar T_END = T_BASE + T_COUNT - 1;\nvar DOTTED_CIRCLE = 0x25cc;\nvar isL = function isL(code) {\n  return 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c;\n};\nvar isV = function isV(code) {\n  return 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6;\n};\nvar isT = function isT(code) {\n  return 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb;\n};\nvar isTone = function isTone(code) {\n  return 0x302e <= code && code <= 0x302f;\n};\nvar isLVT = function isLVT(code) {\n  return HANGUL_BASE <= code && code <= HANGUL_END;\n};\nvar isLV = function isLV(code) {\n  return code - HANGUL_BASE < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0;\n};\nvar isCombiningL = function isCombiningL(code) {\n  return L_BASE <= code && code <= L_END;\n};\nvar isCombiningV = function isCombiningV(code) {\n  return V_BASE <= code && code <= V_END;\n};\nvar isCombiningT = function isCombiningT(code) {\n  return 1 <= code && code <= T_END;\n}; // Character categories\n\nvar X = 0; // Other character\n\nvar L = 1; // Leading consonant\n\nvar V = 2; // Medial vowel\n\nvar T = 3; // Trailing consonant\n\nvar LV = 4; // Composed <LV> syllable\n\nvar LVT = 5; // Composed <LVT> syllable\n\nvar M = 6; // Tone mark\n// This function classifies a character using the above categories.\n\nfunction getType(code) {\n  if (isL(code)) {\n    return L;\n  }\n  if (isV(code)) {\n    return V;\n  }\n  if (isT(code)) {\n    return T;\n  }\n  if (isLV(code)) {\n    return LV;\n  }\n  if (isLVT(code)) {\n    return LVT;\n  }\n  if (isTone(code)) {\n    return M;\n  }\n  return X;\n} // State machine actions\n\nvar NO_ACTION = 0;\nvar DECOMPOSE = 1;\nvar COMPOSE = 2;\nvar TONE_MARK = 4;\nvar INVALID = 5; // Build a state machine that accepts valid syllables, and applies actions along the way.\n// The logic this is implementing is documented at the top of the file.\n\nvar STATE_TABLE$1 = [\n//       X                 L                 V                T                  LV                LVT               M\n// State 0: start state\n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]],\n// State 1: <L>\n[[NO_ACTION, 0], [NO_ACTION, 1], [COMPOSE, 2], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]],\n// State 2: <L,V> or <LV>\n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [COMPOSE, 3], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]],\n// State 3: <L,V,T> or <LVT>\n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]]];\nfunction getGlyph(font, code, features) {\n  return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features);\n}\nfunction decompose(glyphs, i, font) {\n  var glyph = glyphs[i];\n  var code = glyph.codePoints[0];\n  var s = code - HANGUL_BASE;\n  var t = T_BASE + s % T_COUNT;\n  s = s / T_COUNT | 0;\n  var l = L_BASE + s / V_COUNT | 0;\n  var v = V_BASE + s % V_COUNT; // Don't decompose if all of the components are not available\n\n  if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== T_BASE && !font.hasGlyphForCodePoint(t)) {\n    return i;\n  } // Replace the current glyph with decomposed L, V, and T glyphs,\n  // and apply the proper OpenType features to each component.\n\n  var ljmo = getGlyph(font, l, glyph.features);\n  ljmo.features.ljmo = true;\n  var vjmo = getGlyph(font, v, glyph.features);\n  vjmo.features.vjmo = true;\n  var insert = [ljmo, vjmo];\n  if (t > T_BASE) {\n    var tjmo = getGlyph(font, t, glyph.features);\n    tjmo.features.tjmo = true;\n    insert.push(tjmo);\n  }\n  glyphs.splice.apply(glyphs, [i, 1].concat(insert));\n  return i + insert.length - 1;\n}\nfunction compose(glyphs, i, font) {\n  var glyph = glyphs[i];\n  var code = glyphs[i].codePoints[0];\n  var type = getType(code);\n  var prev = glyphs[i - 1].codePoints[0];\n  var prevType = getType(prev); // Figure out what type of syllable we're dealing with\n\n  var lv, ljmo, vjmo, tjmo;\n  if (prevType === LV && type === T) {\n    // <LV,T>\n    lv = prev;\n    tjmo = glyph;\n  } else {\n    if (type === V) {\n      // <L,V>\n      ljmo = glyphs[i - 1];\n      vjmo = glyph;\n    } else {\n      // <L,V,T>\n      ljmo = glyphs[i - 2];\n      vjmo = glyphs[i - 1];\n      tjmo = glyph;\n    }\n    var l = ljmo.codePoints[0];\n    var v = vjmo.codePoints[0]; // Make sure L and V are combining characters\n\n    if (isCombiningL(l) && isCombiningV(v)) {\n      lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT;\n    }\n  }\n  var t = tjmo && tjmo.codePoints[0] || T_BASE;\n  if (lv != null && (t === T_BASE || isCombiningT(t))) {\n    var s = lv + (t - T_BASE); // Replace with a composed glyph if supported by the font,\n    // otherwise apply the proper OpenType features to each component.\n\n    if (font.hasGlyphForCodePoint(s)) {\n      var del = prevType === V ? 3 : 2;\n      glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features));\n      return i - del + 1;\n    }\n  } // Didn't compose (either a non-combining component or unsupported by font).\n\n  if (ljmo) {\n    ljmo.features.ljmo = true;\n  }\n  if (vjmo) {\n    vjmo.features.vjmo = true;\n  }\n  if (tjmo) {\n    tjmo.features.tjmo = true;\n  }\n  if (prevType === LV) {\n    // Sequence was originally <L,V>, which got combined earlier.\n    // Either the T was non-combining, or the LVT glyph wasn't supported.\n    // Decompose the glyph again and apply OT features.\n    decompose(glyphs, i - 1, font);\n    return i + 1;\n  }\n  return i;\n}\nfunction getLength(code) {\n  switch (getType(code)) {\n    case LV:\n    case LVT:\n      return 1;\n    case V:\n      return 2;\n    case T:\n      return 3;\n  }\n}\nfunction reorderToneMark(glyphs, i, font) {\n  var glyph = glyphs[i];\n  var code = glyphs[i].codePoints[0]; // Move tone mark to the beginning of the previous syllable, unless it is zero width\n\n  if (font.glyphForCodePoint(code).advanceWidth === 0) {\n    return;\n  }\n  var prev = glyphs[i - 1].codePoints[0];\n  var len = getLength(prev);\n  glyphs.splice(i, 1);\n  return glyphs.splice(i - len, 0, glyph);\n}\nfunction insertDottedCircle(glyphs, i, font) {\n  var glyph = glyphs[i];\n  var code = glyphs[i].codePoints[0];\n  if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) {\n    var dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features); // If the tone mark is zero width, insert the dotted circle before, otherwise after\n\n    var idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1;\n    glyphs.splice(idx, 0, dottedCircle);\n    i++;\n  }\n  return i;\n}\nvar stateTable = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 14, 15, 16, 17], [0, 0, 0, 18, 19, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 28, 29, 30, 31, 32, 33, 0, 34, 0, 0, 35, 36, 0, 0, 37, 0], [0, 0, 0, 38, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 39, 0, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 12, 43, 0, 0, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0], [0, 0, 0, 45, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 55, 56, 57, 58, 0, 59, 0, 0, 60, 61, 0, 0, 62, 0], [0, 0, 0, 4, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 63, 64, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 63, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 0, 2, 16, 0], [0, 0, 0, 18, 65, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 0, 0], [0, 0, 0, 69, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 73, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 75, 0, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 25, 79, 0, 0, 0, 0], [0, 0, 0, 18, 19, 20, 74, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 81, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 87, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 18, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 89, 90, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 89, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 0, 0], [0, 0, 0, 94, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 96, 0, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 35, 100, 0, 0, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 102, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 28, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 110, 111, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 110, 0, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 0, 0], [0, 0, 0, 0, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 0, 0, 115, 116, 117, 118, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 39, 0, 122, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 124, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0], [0, 39, 0, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 47, 47, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 128, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 129, 130, 131, 132, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 135, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 136, 0, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 60, 140, 0, 0, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0], [0, 0, 0, 142, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 148, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 150, 151, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 150, 0, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 157, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 3, 4, 5, 159, 160, 8, 161, 0, 162, 0, 11, 12, 163, 0, 75, 16, 0], [0, 0, 0, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0], [0, 124, 64, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 124, 0, 0], [0, 0, 0, 0, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 172, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 75, 0, 176, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 178, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0], [0, 75, 0, 0, 0, 175, 179, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 180, 180, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 83, 83, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 182, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 183, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 191, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0], [0, 178, 90, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 178, 0, 0], [0, 0, 0, 0, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 198, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 96, 0, 202, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 204, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0], [0, 96, 0, 0, 0, 201, 205, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 206, 206, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 104, 104, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 208, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 209, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 217, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0], [0, 204, 111, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 204, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 223, 0, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 119, 225, 0, 0, 0, 0], [0, 0, 0, 115, 116, 117, 222, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 115, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 226, 64, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 226, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 39, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 44, 44, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 229, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 39, 0, 122, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 231, 231, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 130, 131, 132, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 131, 131, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 234, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 235, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 0, 0, 240, 241, 242, 243, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 136, 0, 247, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 249, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0], [0, 136, 0, 0, 0, 246, 250, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 251, 251, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 144, 144, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 253, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 254, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 262, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0], [0, 249, 151, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 249, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 158, 225, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 222, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 155, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 43, 266, 266, 8, 161, 0, 24, 0, 0, 12, 267, 0, 0, 0, 0], [0, 75, 0, 176, 43, 268, 268, 269, 161, 0, 24, 0, 0, 0, 267, 0, 75, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0], [0, 273, 274, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 273, 0, 0], [0, 0, 0, 40, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 121, 275, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 279, 0, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 173, 281, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 278, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 169, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 282, 90, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 282, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 80, 80, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 285, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 75, 0, 176, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 287, 287, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 185, 185, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 290, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 291, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 192, 281, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 278, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 189, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 76, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 175, 296, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 299, 0, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 199, 301, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 298, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 195, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 302, 111, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 302, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 96, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 101, 101, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 305, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 96, 0, 202, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 307, 307, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 211, 211, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 310, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 311, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 218, 301, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 298, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 215, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 97, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 201, 316, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 320, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 223, 0, 323, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 0, 0, 121, 324, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 325, 318, 326, 327, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 64, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 121, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0], [0, 0, 0, 0, 0, 329, 329, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 237, 237, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 332, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 333, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 337, 0, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 244, 339, 0, 0, 0, 0], [0, 0, 0, 240, 241, 242, 336, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 240, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 340, 151, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 340, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 136, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 141, 141, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 343, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 136, 0, 247, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 345, 345, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 256, 256, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 348, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 349, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 263, 339, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 336, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 260, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 137, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 246, 354, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 355, 90, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 355, 0, 0], [0, 0, 0, 0, 0, 356, 356, 269, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 357, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 366, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 40, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 372, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 279, 0, 375, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 0, 0, 175, 376, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 377, 370, 378, 379, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 90, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 175, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0], [0, 0, 0, 0, 0, 381, 381, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 293, 293, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 384, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 385, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 76, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 390, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 299, 0, 393, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 0, 0, 201, 394, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 395, 388, 396, 397, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 111, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 201, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0], [0, 0, 0, 0, 0, 399, 399, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 313, 313, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 402, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 403, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 97, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 407, 0, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 321, 409, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 406, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 0, 0, 317, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 410, 64, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 410, 0, 0], [0, 223, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 323, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 328, 409, 0, 0, 0, 0], [0, 0, 0, 325, 318, 326, 406, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 325, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0], [0, 0, 0, 0, 0, 411, 411, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 413, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 417, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 337, 0, 420, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 0, 0, 246, 421, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 422, 415, 423, 424, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 151, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 246, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0], [0, 0, 0, 0, 0, 426, 426, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 351, 351, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 429, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 430, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 137, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 434, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 180, 180, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 359, 359, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 437, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 438, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 443, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 367, 225, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 445, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 364, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 448, 0, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 373, 450, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 447, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 0, 0, 369, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 451, 90, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 451, 0, 0], [0, 279, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 375, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 380, 450, 0, 0, 0, 0], [0, 0, 0, 377, 370, 378, 447, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 377, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0], [0, 0, 0, 0, 0, 452, 452, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 454, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 457, 0, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 391, 459, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 456, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 0, 0, 387, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 460, 111, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 460, 0, 0], [0, 299, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 393, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 398, 459, 0, 0, 0, 0], [0, 0, 0, 395, 388, 396, 456, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 395, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0], [0, 0, 0, 0, 0, 461, 461, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 463, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 467, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 407, 0, 470, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 0, 0, 121, 471, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 472, 465, 473, 474, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0], [0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 479, 0, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 418, 481, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 478, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 0, 0, 414, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 482, 151, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 482, 0, 0], [0, 337, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 420, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 425, 481, 0, 0, 0, 0], [0, 0, 0, 422, 415, 423, 478, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 422, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0], [0, 0, 0, 0, 0, 483, 483, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 485, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 435, 225, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 445, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 432, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 486, 486, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 440, 440, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 489, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 490, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 497, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 0, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 0, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 502, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 448, 0, 505, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 0, 0, 175, 506, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 507, 500, 508, 509, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0], [0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 515, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 457, 0, 518, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 0, 0, 201, 519, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 520, 513, 521, 522, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0], [0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 527, 0, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 468, 529, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 526, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 0, 0, 464, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 530, 64, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 530, 0, 0], [0, 407, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 470, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 475, 529, 0, 0, 0, 0], [0, 0, 0, 472, 465, 473, 526, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 472, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0], [0, 0, 0, 0, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 534, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 479, 0, 537, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 0, 0, 246, 538, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 539, 532, 540, 541, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0], [0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0], [0, 0, 0, 0, 0, 544, 544, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 492, 492, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 547, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 548, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 274, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 368, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 553, 0, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 503, 555, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 552, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 0, 0, 499, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 556, 90, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 556, 0, 0], [0, 448, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 505, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 510, 555, 0, 0, 0, 0], [0, 0, 0, 507, 500, 508, 552, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 507, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 559, 0, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 516, 561, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 558, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 0, 0, 512, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 562, 111, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 562, 0, 0], [0, 457, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 518, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 523, 561, 0, 0, 0, 0], [0, 0, 0, 520, 513, 521, 558, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 520, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0], [0, 0, 0, 0, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 565, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 527, 0, 567, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 0, 0, 121, 568, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 569, 66, 570, 571, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 575, 0, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 535, 577, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 574, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 0, 0, 531, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 578, 151, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 578, 0, 0], [0, 479, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 537, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 542, 577, 0, 0, 0, 0], [0, 0, 0, 539, 532, 540, 574, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 539, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0], [0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0], [0, 0, 0, 0, 0, 579, 579, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 581, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 584, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 553, 0, 586, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 0, 0, 175, 587, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 588, 91, 589, 590, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 0, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0], [0, 0, 0, 592, 112, 593, 594, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 559, 0, 596, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 0, 0, 201, 597, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 598, 112, 599, 600, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 566, 165, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 67, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 0, 0, 563, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 527, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 567, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 572, 165, 0, 0, 0, 0], [0, 0, 0, 569, 66, 570, 67, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 569, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 605, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 575, 0, 607, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 0, 0, 246, 608, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 609, 152, 610, 611, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0], [0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 585, 194, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 92, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 0, 0, 582, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 553, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 586, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 591, 194, 0, 0, 0, 0], [0, 0, 0, 588, 91, 589, 92, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 588, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 595, 220, 0, 0, 0, 0], [0, 0, 0, 592, 112, 593, 113, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 0, 0, 592, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 559, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 596, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 601, 220, 0, 0, 0, 0], [0, 0, 0, 598, 112, 599, 113, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 598, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 606, 265, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 153, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 0, 0, 603, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 575, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 607, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 612, 265, 0, 0, 0, 0], [0, 0, 0, 609, 152, 610, 153, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 609, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0]];\nvar accepting = [false, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, false, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, false, false, true, false, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, false, false, true, true, false, false, true, true, true, false, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, false, false, false, false, false, false, false, true, true, false, false, true, true, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, false, true, true, false, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, false, true, true, true, true, true, false, true, true, false, true, true, true];\nvar tags = [[], [\"broken_cluster\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"symbol_cluster\"], [], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [], [\"broken_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [], [\"consonant_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [], [\"vowel_syllable\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [\"standalone_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"standalone_cluster\"]];\nvar indicMachine = {\n  stateTable: stateTable,\n  accepting: accepting,\n  tags: tags\n};\nvar categories = [\"O\", \"IND\", \"S\", \"GB\", \"B\", \"FM\", \"CGJ\", \"VMAbv\", \"VMPst\", \"VAbv\", \"VPst\", \"CMBlw\", \"VPre\", \"VBlw\", \"H\", \"VMBlw\", \"CMAbv\", \"MBlw\", \"CS\", \"R\", \"SUB\", \"MPst\", \"MPre\", \"FAbv\", \"FPst\", \"FBlw\", \"null\", \"SMAbv\", \"SMBlw\", \"VMPre\", \"ZWNJ\", \"ZWJ\", \"WJ\", \"M\", \"VS\", \"N\", \"HN\", \"MAbv\"];\nvar decompositions = {\n  \"2507\": [2503, 2494],\n  \"2508\": [2503, 2519],\n  \"2888\": [2887, 2902],\n  \"2891\": [2887, 2878],\n  \"2892\": [2887, 2903],\n  \"3018\": [3014, 3006],\n  \"3019\": [3015, 3006],\n  \"3020\": [3014, 3031],\n  \"3144\": [3142, 3158],\n  \"3264\": [3263, 3285],\n  \"3271\": [3270, 3285],\n  \"3272\": [3270, 3286],\n  \"3274\": [3270, 3266],\n  \"3275\": [3270, 3266, 3285],\n  \"3402\": [3398, 3390],\n  \"3403\": [3399, 3390],\n  \"3404\": [3398, 3415],\n  \"3546\": [3545, 3530],\n  \"3548\": [3545, 3535],\n  \"3549\": [3545, 3535, 3530],\n  \"3550\": [3545, 3551],\n  \"3635\": [3661, 3634],\n  \"3763\": [3789, 3762],\n  \"3955\": [3953, 3954],\n  \"3957\": [3953, 3956],\n  \"3958\": [4018, 3968],\n  \"3959\": [4018, 3953, 3968],\n  \"3960\": [4019, 3968],\n  \"3961\": [4019, 3953, 3968],\n  \"3969\": [3953, 3968],\n  \"6971\": [6970, 6965],\n  \"6973\": [6972, 6965],\n  \"6976\": [6974, 6965],\n  \"6977\": [6975, 6965],\n  \"6979\": [6978, 6965],\n  \"69934\": [69937, 69927],\n  \"69935\": [69938, 69927],\n  \"70475\": [70471, 70462],\n  \"70476\": [70471, 70487],\n  \"70843\": [70841, 70842],\n  \"70844\": [70841, 70832],\n  \"70846\": [70841, 70845],\n  \"71098\": [71096, 71087],\n  \"71099\": [71097, 71087]\n};\nvar stateTable$1 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [2, 2, 3, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 2, 0, 0, 24, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 27, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 39, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 49, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 53, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0]];\nvar accepting$1 = [false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true];\nvar tags$1 = [[], [\"broken_cluster\"], [\"independent_cluster\"], [\"symbol_cluster\"], [\"standard_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"numeral_cluster\"], [\"broken_cluster\"], [\"independent_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"virama_terminated_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"numeral_cluster\"], [\"number_joiner_terminated_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"numeral_cluster\"]];\nvar useData = {\n  categories: categories,\n  decompositions: decompositions,\n  stateTable: stateTable$1,\n  accepting: accepting$1,\n  tags: tags$1\n};\n\n// Cateories used in the OpenType spec:\n// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx\nvar CATEGORIES = {\n  X: 1 << 0,\n  C: 1 << 1,\n  V: 1 << 2,\n  N: 1 << 3,\n  H: 1 << 4,\n  ZWNJ: 1 << 5,\n  ZWJ: 1 << 6,\n  M: 1 << 7,\n  SM: 1 << 8,\n  VD: 1 << 9,\n  A: 1 << 10,\n  Placeholder: 1 << 11,\n  Dotted_Circle: 1 << 12,\n  RS: 1 << 13,\n  // Register Shifter, used in Khmer OT spec.\n  Coeng: 1 << 14,\n  // Khmer-style Virama.\n  Repha: 1 << 15,\n  // Atomically-encoded logical or visual repha.\n  Ra: 1 << 16,\n  CM: 1 << 17,\n  // Consonant-Medial.\n  Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD).\n}; // Visual positions in a syllable from left to right.\n\nvar POSITIONS = {\n  Start: 1 << 0,\n  Ra_To_Become_Reph: 1 << 1,\n  Pre_M: 1 << 2,\n  Pre_C: 1 << 3,\n  Base_C: 1 << 4,\n  After_Main: 1 << 5,\n  Above_C: 1 << 6,\n  Before_Sub: 1 << 7,\n  Below_C: 1 << 8,\n  After_Sub: 1 << 9,\n  Before_Post: 1 << 10,\n  Post_C: 1 << 11,\n  After_Post: 1 << 12,\n  Final_C: 1 << 13,\n  SMVD: 1 << 14,\n  End: 1 << 15\n};\nvar CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle;\nvar JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ;\nvar HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng;\nvar INDIC_CONFIGS = {\n  Default: {\n    hasOldSpec: false,\n    virama: 0,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Devanagari: {\n    hasOldSpec: true,\n    virama: 0x094D,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Bengali: {\n    hasOldSpec: true,\n    virama: 0x09CD,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Sub,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Gurmukhi: {\n    hasOldSpec: true,\n    virama: 0x0A4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Sub,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Gujarati: {\n    hasOldSpec: true,\n    virama: 0x0ACD,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Oriya: {\n    hasOldSpec: true,\n    virama: 0x0B4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Main,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Tamil: {\n    hasOldSpec: true,\n    virama: 0x0BCD,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Telugu: {\n    hasOldSpec: true,\n    virama: 0x0C4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Post,\n    rephMode: 'Explicit',\n    blwfMode: 'Post_Only'\n  },\n  Kannada: {\n    hasOldSpec: true,\n    virama: 0x0CCD,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Post_Only'\n  },\n  Malayalam: {\n    hasOldSpec: true,\n    virama: 0x0D4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Main,\n    rephMode: 'Log_Repha',\n    blwfMode: 'Pre_And_Post'\n  },\n  // Handled by UniversalShaper\n  // Sinhala: {\n  //   hasOldSpec: false,\n  //   virama: 0x0DCA,\n  //   basePos: 'Last_Sinhala',\n  //   rephPos: POSITIONS.After_Main,\n  //   rephMode: 'Explicit',\n  //   blwfMode: 'Pre_And_Post'\n  // },\n  Khmer: {\n    hasOldSpec: false,\n    virama: 0x17D2,\n    basePos: 'First',\n    rephPos: POSITIONS.Ra_To_Become_Reph,\n    rephMode: 'Vis_Repha',\n    blwfMode: 'Pre_And_Post'\n  }\n}; // Additional decompositions that aren't in Unicode\n\nvar INDIC_DECOMPOSITIONS = {\n  // Khmer\n  0x17BE: [0x17C1, 0x17BE],\n  0x17BF: [0x17C1, 0x17BF],\n  0x17C0: [0x17C1, 0x17C0],\n  0x17C4: [0x17C1, 0x17C4],\n  0x17C5: [0x17C1, 0x17C5]\n};\nvar decompositions$1 = useData.decompositions;\nvar trie$1 = new UnicodeTrie(Buffer(\"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\",\"base64\"));\nvar stateMachine = new StateMachine(indicMachine);\n/**\n * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc.\n * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc\n */\nvar IndicShaper = /*#__PURE__*/function (_DefaultShaper3) {\n  _inheritsLoose(IndicShaper, _DefaultShaper3);\n  function IndicShaper() {\n    return _DefaultShaper3.apply(this, arguments) || this;\n  }\n  IndicShaper.planFeatures = function planFeatures(plan) {\n    plan.addStage(setupSyllables);\n    plan.addStage(['locl', 'ccmp']);\n    plan.addStage(initialReordering);\n    plan.addStage('nukt');\n    plan.addStage('akhn');\n    plan.addStage('rphf', false);\n    plan.addStage('rkrf');\n    plan.addStage('pref', false);\n    plan.addStage('blwf', false);\n    plan.addStage('abvf', false);\n    plan.addStage('half', false);\n    plan.addStage('pstf', false);\n    plan.addStage('vatu');\n    plan.addStage('cjct');\n    plan.addStage('cfar', false);\n    plan.addStage(finalReordering);\n    plan.addStage({\n      local: ['init'],\n      global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig']\n    }); // Setup the indic config for the selected script\n\n    plan.unicodeScript = fromOpenType(plan.script);\n    plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default;\n    plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2'; // TODO: turn off kern (Khmer) and liga features.\n  };\n  IndicShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    var _loop = function _loop(i) {\n      var codepoint = glyphs[i].codePoints[0];\n      var d = INDIC_DECOMPOSITIONS[codepoint] || decompositions$1[codepoint];\n      if (d) {\n        var decomposed = d.map(function (c) {\n          var g = plan.font.glyphForCodePoint(c);\n          return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n        });\n        glyphs.splice.apply(glyphs, [i, 1].concat(decomposed));\n      }\n    };\n\n    // Decompose split matras\n    // TODO: do this in a more general unicode normalizer\n    for (var i = glyphs.length - 1; i >= 0; i--) {\n      _loop(i);\n    }\n  };\n  return IndicShaper;\n}(DefaultShaper);\n_defineProperty(IndicShaper, \"zeroMarkWidths\", 'NONE');\nfunction indicCategory(glyph) {\n  return trie$1.get(glyph.codePoints[0]) >> 8;\n}\nfunction indicPosition(glyph) {\n  return 1 << (trie$1.get(glyph.codePoints[0]) & 0xff);\n}\nvar IndicInfo = function IndicInfo(category, position, syllableType, syllable) {\n  this.category = category;\n  this.position = position;\n  this.syllableType = syllableType;\n  this.syllable = syllable;\n};\nfunction setupSyllables(font, glyphs) {\n  var syllable = 0;\n  var last = 0;\n  for (var _iterator53 = _createForOfIteratorHelperLoose(stateMachine.match(glyphs.map(indicCategory))), _step53; !(_step53 = _iterator53()).done;) {\n    var _step53$value = _step53.value,\n      start = _step53$value[0],\n      end = _step53$value[1],\n      tags = _step53$value[2];\n    if (start > last) {\n      ++syllable;\n      for (var i = last; i < start; i++) {\n        glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n      }\n    }\n    ++syllable; // Create shaper info\n\n    for (var _i = start; _i <= end; _i++) {\n      glyphs[_i].shaperInfo = new IndicInfo(1 << indicCategory(glyphs[_i]), indicPosition(glyphs[_i]), tags[0], syllable);\n    }\n    last = end + 1;\n  }\n  if (last < glyphs.length) {\n    ++syllable;\n    for (var _i2 = last; _i2 < glyphs.length; _i2++) {\n      glyphs[_i2].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n    }\n  }\n}\nfunction isConsonant(glyph) {\n  return glyph.shaperInfo.category & CONSONANT_FLAGS;\n}\nfunction isJoiner(glyph) {\n  return glyph.shaperInfo.category & JOINER_FLAGS;\n}\nfunction isHalantOrCoeng(glyph) {\n  return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS;\n}\nfunction wouldSubstitute(glyphs, feature) {\n  for (var _iterator54 = _createForOfIteratorHelperLoose(glyphs), _step54; !(_step54 = _iterator54()).done;) {\n    var _glyph$features;\n    var glyph = _step54.value;\n    glyph.features = (_glyph$features = {}, _glyph$features[feature] = true, _glyph$features);\n  }\n  var GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;\n  GSUB.applyFeatures([feature], glyphs);\n  return glyphs.length === 1;\n}\nfunction consonantPosition(font, consonant, virama) {\n  var glyphs = [virama, consonant, virama];\n  if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) {\n    return POSITIONS.Below_C;\n  } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) {\n    return POSITIONS.Post_C;\n  } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) {\n    return POSITIONS.Post_C;\n  }\n  return POSITIONS.Base_C;\n}\nfunction initialReordering(font, glyphs, plan) {\n  var indicConfig = plan.indicConfig;\n  var features = font._layoutEngine.engine.GSUBProcessor.features;\n  var dottedCircle = font.glyphForCodePoint(0x25cc).id;\n  var virama = font.glyphForCodePoint(indicConfig.virama).id;\n  if (virama) {\n    var info = new GlyphInfo(font, virama, [indicConfig.virama]);\n    for (var i = 0; i < glyphs.length; i++) {\n      if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n        glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info);\n      }\n    }\n  }\n  for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n    var _glyphs$start$shaperI = glyphs[start].shaperInfo,\n      category = _glyphs$start$shaperI.category,\n      syllableType = _glyphs$start$shaperI.syllableType;\n    if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') {\n      continue;\n    }\n    if (syllableType === 'broken_cluster' && dottedCircle) {\n      var g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n      g.shaperInfo = new IndicInfo(1 << indicCategory(g), indicPosition(g), glyphs[start].shaperInfo.syllableType, glyphs[start].shaperInfo.syllable); // Insert after possible Repha.\n\n      var _i3 = start;\n      while (_i3 < end && glyphs[_i3].shaperInfo.category === CATEGORIES.Repha) {\n        _i3++;\n      }\n      glyphs.splice(_i3++, 0, g);\n      end++;\n    } // 1. Find base consonant:\n    //\n    // The shaping engine finds the base consonant of the syllable, using the\n    // following algorithm: starting from the end of the syllable, move backwards\n    // until a consonant is found that does not have a below-base or post-base\n    // form (post-base forms have to follow below-base forms), or that is not a\n    // pre-base reordering Ra, or arrive at the first consonant. The consonant\n    // stopped at will be the base.\n\n    var base = end;\n    var limit = start;\n    var hasReph = false; // If the syllable starts with Ra + Halant (in a script that has Reph)\n    // and has more than one consonant, Ra is excluded from candidates for\n    // base consonants.\n\n    if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph && features.rphf && start + 3 <= end && (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2]) || indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)) {\n      // See if it matches the 'rphf' feature.\n      var _g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()];\n      if (wouldSubstitute(_g.slice(0, 2), 'rphf') || indicConfig.rephMode === 'Explicit' && wouldSubstitute(_g, 'rphf')) {\n        limit += 2;\n        while (limit < end && isJoiner(glyphs[limit])) {\n          limit++;\n        }\n        base = start;\n        hasReph = true;\n      }\n    } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) {\n      limit++;\n      while (limit < end && isJoiner(glyphs[limit])) {\n        limit++;\n      }\n      base = start;\n      hasReph = true;\n    }\n    switch (indicConfig.basePos) {\n      case 'Last':\n        {\n          // starting from the end of the syllable, move backwards\n          var _i4 = end;\n          var seenBelow = false;\n          do {\n            var _info = glyphs[--_i4].shaperInfo; // until a consonant is found\n\n            if (isConsonant(glyphs[_i4])) {\n              // that does not have a below-base or post-base form\n              // (post-base forms have to follow below-base forms),\n              if (_info.position !== POSITIONS.Below_C && (_info.position !== POSITIONS.Post_C || seenBelow)) {\n                base = _i4;\n                break;\n              } // or that is not a pre-base reordering Ra,\n              //\n              // IMPLEMENTATION NOTES:\n              //\n              // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped\n              // by the logic above already.\n              //\n              // or arrive at the first consonant. The consonant stopped at will\n              // be the base.\n\n              if (_info.position === POSITIONS.Below_C) {\n                seenBelow = true;\n              }\n              base = _i4;\n            } else if (start < _i4 && _info.category === CATEGORIES.ZWJ && glyphs[_i4 - 1].shaperInfo.category === CATEGORIES.H) {\n              // A ZWJ after a Halant stops the base search, and requests an explicit\n              // half form.\n              // A ZWJ before a Halant, requests a subjoined form instead, and hence\n              // search continues.  This is particularly important for Bengali\n              // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya.\n              break;\n            }\n          } while (_i4 > limit);\n          break;\n        }\n      case 'First':\n        {\n          // The first consonant is always the base.\n          base = start; // Mark all subsequent consonants as below.\n\n          for (var _i5 = base + 1; _i5 < end; _i5++) {\n            if (isConsonant(glyphs[_i5])) {\n              glyphs[_i5].shaperInfo.position = POSITIONS.Below_C;\n            }\n          }\n        }\n    } // If the syllable starts with Ra + Halant (in a script that has Reph)\n    // and has more than one consonant, Ra is excluded from candidates for\n    // base consonants.\n    //\n    //  Only do this for unforced Reph. (ie. not for Ra,H,ZWJ)\n\n    if (hasReph && base === start && limit - base <= 2) {\n      hasReph = false;\n    } // 2. Decompose and reorder Matras:\n    //\n    // Each matra and any syllable modifier sign in the cluster are moved to the\n    // appropriate position relative to the consonant(s) in the cluster. The\n    // shaping engine decomposes two- or three-part matras into their constituent\n    // parts before any repositioning. Matra characters are classified by which\n    // consonant in a conjunct they have affinity for and are reordered to the\n    // following positions:\n    //\n    //   o Before first half form in the syllable\n    //   o After subjoined consonants\n    //   o After post-form consonant\n    //   o After main consonant (for above marks)\n    //\n    // IMPLEMENTATION NOTES:\n    //\n    // The normalize() routine has already decomposed matras for us, so we don't\n    // need to worry about that.\n    // 3.  Reorder marks to canonical order:\n    //\n    // Adjacent nukta and halant or nukta and vedic sign are always repositioned\n    // if necessary, so that the nukta is first.\n    //\n    // IMPLEMENTATION NOTES:\n    //\n    // We don't need to do this: the normalize() routine already did this for us.\n    // Reorder characters\n\n    for (var _i6 = start; _i6 < base; _i6++) {\n      var _info2 = glyphs[_i6].shaperInfo;\n      _info2.position = Math.min(POSITIONS.Pre_C, _info2.position);\n    }\n    if (base < end) {\n      glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n    } // Mark final consonants.  A final consonant is one appearing after a matra,\n    // like in Khmer.\n\n    for (var _i7 = base + 1; _i7 < end; _i7++) {\n      if (glyphs[_i7].shaperInfo.category === CATEGORIES.M) {\n        for (var j = _i7 + 1; j < end; j++) {\n          if (isConsonant(glyphs[j])) {\n            glyphs[j].shaperInfo.position = POSITIONS.Final_C;\n            break;\n          }\n        }\n        break;\n      }\n    } // Handle beginning Ra\n\n    if (hasReph) {\n      glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph;\n    } // For old-style Indic script tags, move the first post-base Halant after\n    // last consonant.\n    //\n    // Reports suggest that in some scripts Uniscribe does this only if there\n    // is *not* a Halant after last consonant already (eg. Kannada), while it\n    // does it unconditionally in other scripts (eg. Malayalam).  We don't\n    // currently know about other scripts, so we single out Malayalam for now.\n    //\n    // Kannada test case:\n    // U+0C9A,U+0CCD,U+0C9A,U+0CCD\n    // With some versions of Lohit Kannada.\n    // https://bugs.freedesktop.org/show_bug.cgi?id=59118\n    //\n    // Malayalam test case:\n    // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D\n    // With lohit-ttf-20121122/Lohit-Malayalam.ttf\n\n    if (plan.isOldSpec) {\n      var disallowDoubleHalants = plan.unicodeScript !== 'Malayalam';\n      for (var _i8 = base + 1; _i8 < end; _i8++) {\n        if (glyphs[_i8].shaperInfo.category === CATEGORIES.H) {\n          var _j = void 0;\n          for (_j = end - 1; _j > _i8; _j--) {\n            if (isConsonant(glyphs[_j]) || disallowDoubleHalants && glyphs[_j].shaperInfo.category === CATEGORIES.H) {\n              break;\n            }\n          }\n          if (glyphs[_j].shaperInfo.category !== CATEGORIES.H && _j > _i8) {\n            // Move Halant to after last consonant.\n            var t = glyphs[_i8];\n            glyphs.splice.apply(glyphs, [_i8, 0].concat(glyphs.splice(_i8 + 1, _j - _i8)));\n            glyphs[_j] = t;\n          }\n          break;\n        }\n      }\n    } // Attach misc marks to previous char to move with them.\n\n    var lastPos = POSITIONS.Start;\n    for (var _i9 = start; _i9 < end; _i9++) {\n      var _info3 = glyphs[_i9].shaperInfo;\n      if (_info3.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & _info3.category)) {\n        _info3.position = lastPos;\n        if (_info3.category === CATEGORIES.H && _info3.position === POSITIONS.Pre_M) {\n          // Uniscribe doesn't move the Halant with Left Matra.\n          // TEST: U+092B,U+093F,U+094DE\n          // We follow.  This is important for the Sinhala\n          // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA\n          // where U+0DD9 is a left matra and U+0DCA is the virama.\n          // We don't want to move the virama with the left matra.\n          // TEST: U+0D9A,U+0DDA\n          for (var _j2 = _i9; _j2 > start; _j2--) {\n            if (glyphs[_j2 - 1].shaperInfo.position !== POSITIONS.Pre_M) {\n              _info3.position = glyphs[_j2 - 1].shaperInfo.position;\n              break;\n            }\n          }\n        }\n      } else if (_info3.position !== POSITIONS.SMVD) {\n        lastPos = _info3.position;\n      }\n    } // For post-base consonants let them own anything before them\n    // since the last consonant or matra.\n\n    var last = base;\n    for (var _i10 = base + 1; _i10 < end; _i10++) {\n      if (isConsonant(glyphs[_i10])) {\n        for (var _j3 = last + 1; _j3 < _i10; _j3++) {\n          if (glyphs[_j3].shaperInfo.position < POSITIONS.SMVD) {\n            glyphs[_j3].shaperInfo.position = glyphs[_i10].shaperInfo.position;\n          }\n        }\n        last = _i10;\n      } else if (glyphs[_i10].shaperInfo.category === CATEGORIES.M) {\n        last = _i10;\n      }\n    }\n    var arr = glyphs.slice(start, end);\n    arr.sort(function (a, b) {\n      return a.shaperInfo.position - b.shaperInfo.position;\n    });\n    glyphs.splice.apply(glyphs, [start, arr.length].concat(arr)); // Find base again\n\n    for (var _i11 = start; _i11 < end; _i11++) {\n      if (glyphs[_i11].shaperInfo.position === POSITIONS.Base_C) {\n        base = _i11;\n        break;\n      }\n    } // Setup features now\n    // Reph\n\n    for (var _i12 = start; _i12 < end && glyphs[_i12].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; _i12++) {\n      glyphs[_i12].features.rphf = true;\n    } // Pre-base\n\n    var blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post';\n    for (var _i13 = start; _i13 < base; _i13++) {\n      glyphs[_i13].features.half = true;\n      if (blwf) {\n        glyphs[_i13].features.blwf = true;\n      }\n    } // Post-base\n\n    for (var _i14 = base + 1; _i14 < end; _i14++) {\n      glyphs[_i14].features.abvf = true;\n      glyphs[_i14].features.pstf = true;\n      glyphs[_i14].features.blwf = true;\n    }\n    if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') {\n      // Old-spec eye-lash Ra needs special handling.  From the\n      // spec:\n      //\n      // \"The feature 'below-base form' is applied to consonants\n      // having below-base forms and following the base consonant.\n      // The exception is vattu, which may appear below half forms\n      // as well as below the base glyph. The feature 'below-base\n      // form' will be applied to all such occurrences of Ra as well.\"\n      //\n      // Test case: U+0924,U+094D,U+0930,U+094d,U+0915\n      // with Sanskrit 2003 font.\n      //\n      // However, note that Ra,Halant,ZWJ is the correct way to\n      // request eyelash form of Ra, so we wouldbn't inhibit it\n      // in that sequence.\n      //\n      // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915\n      for (var _i15 = start; _i15 + 1 < base; _i15++) {\n        if (glyphs[_i15].shaperInfo.category === CATEGORIES.Ra && glyphs[_i15 + 1].shaperInfo.category === CATEGORIES.H && (_i15 + 1 === base || glyphs[_i15 + 2].shaperInfo.category === CATEGORIES.ZWJ)) {\n          glyphs[_i15].features.blwf = true;\n          glyphs[_i15 + 1].features.blwf = true;\n        }\n      }\n    }\n    var prefLen = 2;\n    if (features.pref && base + prefLen < end) {\n      // Find a Halant,Ra sequence and mark it for pre-base reordering processing.\n      for (var _i16 = base + 1; _i16 + prefLen - 1 < end; _i16++) {\n        var _g2 = [glyphs[_i16].copy(), glyphs[_i16 + 1].copy()];\n        if (wouldSubstitute(_g2, 'pref')) {\n          for (var _j4 = 0; _j4 < prefLen; _j4++) {\n            glyphs[_i16++].features.pref = true;\n          } // Mark the subsequent stuff with 'cfar'.  Used in Khmer.\n          // Read the feature spec.\n          // This allows distinguishing the following cases with MS Khmer fonts:\n          // U+1784,U+17D2,U+179A,U+17D2,U+1782\n          // U+1784,U+17D2,U+1782,U+17D2,U+179A\n\n          if (features.cfar) {\n            for (; _i16 < end; _i16++) {\n              glyphs[_i16].features.cfar = true;\n            }\n          }\n          break;\n        }\n      }\n    } // Apply ZWJ/ZWNJ effects\n\n    for (var _i17 = start + 1; _i17 < end; _i17++) {\n      if (isJoiner(glyphs[_i17])) {\n        var nonJoiner = glyphs[_i17].shaperInfo.category === CATEGORIES.ZWNJ;\n        var _j5 = _i17;\n        do {\n          _j5--; // ZWJ/ZWNJ should disable CJCT.  They do that by simply\n          // being there, since we don't skip them for the CJCT\n          // feature (ie. F_MANUAL_ZWJ)\n          // A ZWNJ disables HALF.\n\n          if (nonJoiner) {\n            delete glyphs[_j5].features.half;\n          }\n        } while (_j5 > start && !isConsonant(glyphs[_j5]));\n      }\n    }\n  }\n}\nfunction finalReordering(font, glyphs, plan) {\n  var indicConfig = plan.indicConfig;\n  var features = font._layoutEngine.engine.GSUBProcessor.features;\n  for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n    // 4. Final reordering:\n    //\n    // After the localized forms and basic shaping forms GSUB features have been\n    // applied (see below), the shaping engine performs some final glyph\n    // reordering before applying all the remaining font features to the entire\n    // cluster.\n    var tryPref = !!features.pref; // Find base again\n\n    var base = start;\n    for (; base < end; base++) {\n      if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) {\n        if (tryPref && base + 1 < end) {\n          for (var i = base + 1; i < end; i++) {\n            if (glyphs[i].features.pref) {\n              if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) {\n                // Ok, this was a 'pref' candidate but didn't form any.\n                // Base is around here...\n                base = i;\n                while (base < end && isHalantOrCoeng(glyphs[base])) {\n                  base++;\n                }\n                glyphs[base].shaperInfo.position = POSITIONS.BASE_C;\n                tryPref = false;\n              }\n              break;\n            }\n          }\n        } // For Malayalam, skip over unformed below- (but NOT post-) forms.\n\n        if (plan.unicodeScript === 'Malayalam') {\n          for (var _i18 = base + 1; _i18 < end; _i18++) {\n            while (_i18 < end && isJoiner(glyphs[_i18])) {\n              _i18++;\n            }\n            if (_i18 === end || !isHalantOrCoeng(glyphs[_i18])) {\n              break;\n            }\n            _i18++; // Skip halant.\n\n            while (_i18 < end && isJoiner(glyphs[_i18])) {\n              _i18++;\n            }\n            if (_i18 < end && isConsonant(glyphs[_i18]) && glyphs[_i18].shaperInfo.position === POSITIONS.Below_C) {\n              base = _i18;\n              glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n            }\n          }\n        }\n        if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) {\n          base--;\n        }\n        break;\n      }\n    }\n    if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) {\n      base--;\n    }\n    if (base < end) {\n      while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) {\n        base--;\n      }\n    } // o Reorder matras:\n    //\n    // If a pre-base matra character had been reordered before applying basic\n    // features, the glyph can be moved closer to the main consonant based on\n    // whether half-forms had been formed. Actual position for the matra is\n    // defined as “after last standalone halant glyph, after initial matra\n    // position and before the main consonant”. If ZWJ or ZWNJ follow this\n    // halant, position is moved after it.\n    //\n\n    if (start + 1 < end && start < base) {\n      // Otherwise there can't be any pre-base matra characters.\n      // If we lost track of base, alas, position before last thingy.\n      var newPos = base === end ? base - 2 : base - 1; // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n      // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n      // We want to position matra after them.\n\n      if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n        while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n          newPos--;\n        } // If we found no Halant we are done.\n        // Otherwise only proceed if the Halant does\n        // not belong to the Matra itself!\n\n        if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n          // If ZWJ or ZWNJ follow this halant, position is moved after it.\n          if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) {\n            newPos++;\n          }\n        } else {\n          newPos = start; // No move.\n        }\n      }\n\n      if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n        // Now go see if there's actually any matras...\n        for (var _i19 = newPos; _i19 > start; _i19--) {\n          if (glyphs[_i19 - 1].shaperInfo.position === POSITIONS.Pre_M) {\n            var oldPos = _i19 - 1;\n            if (oldPos < base && base <= newPos) {\n              // Shouldn't actually happen.\n              base--;\n            }\n            var tmp = glyphs[oldPos];\n            glyphs.splice.apply(glyphs, [oldPos, 0].concat(glyphs.splice(oldPos + 1, newPos - oldPos)));\n            glyphs[newPos] = tmp;\n            newPos--;\n          }\n        }\n      }\n    } // o Reorder reph:\n    //\n    // Reph’s original position is always at the beginning of the syllable,\n    // (i.e. it is not reordered at the character reordering stage). However,\n    // it will be reordered according to the basic-forms shaping results.\n    // Possible positions for reph, depending on the script, are; after main,\n    // before post-base consonant forms, and after post-base consonant forms.\n    // Two cases:\n    //\n    // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then\n    //   we should only move it if the sequence ligated to the repha form.\n    //\n    // - If repha is encoded separately and in the logical position, we should only\n    //   move it if it did NOT ligate.  If it ligated, it's probably the font trying\n    //   to make it work without the reordering.\n\n    if (start + 1 < end && glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph && glyphs[start].shaperInfo.category === CATEGORIES.Repha !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)) {\n      var newRephPos = void 0;\n      var rephPos = indicConfig.rephPos;\n      var found = false; // 1. If reph should be positioned after post-base consonant forms,\n      //    proceed to step 5.\n\n      if (rephPos !== POSITIONS.After_Post) {\n        //  2. If the reph repositioning class is not after post-base: target\n        //     position is after the first explicit halant glyph between the\n        //     first post-reph consonant and last main consonant. If ZWJ or ZWNJ\n        //     are following this halant, position is moved after it. If such\n        //     position is found, this is the target position. Otherwise,\n        //     proceed to the next step.\n        //\n        //     Note: in old-implementation fonts, where classifications were\n        //     fixed in shaping engine, there was no case where reph position\n        //     will be found on this step.\n        newRephPos = start + 1;\n        while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n          newRephPos++;\n        }\n        if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n          // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n          if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n            newRephPos++;\n          }\n          found = true;\n        } // 3. If reph should be repositioned after the main consonant: find the\n        //    first consonant not ligated with main, or find the first\n        //    consonant that is not a potential pre-base reordering Ra.\n\n        if (!found && rephPos === POSITIONS.After_Main) {\n          newRephPos = base;\n          while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) {\n            newRephPos++;\n          }\n          found = newRephPos < end;\n        } // 4. If reph should be positioned before post-base consonant, find\n        //    first post-base classified consonant not ligated with main. If no\n        //    consonant is found, the target position should be before the\n        //    first matra, syllable modifier sign or vedic sign.\n        //\n        // This is our take on what step 4 is trying to say (and failing, BADLY).\n\n        if (!found && rephPos === POSITIONS.After_Sub) {\n          newRephPos = base;\n          while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) {\n            newRephPos++;\n          }\n          found = newRephPos < end;\n        }\n      } //  5. If no consonant is found in steps 3 or 4, move reph to a position\n      //     immediately before the first post-base matra, syllable modifier\n      //     sign or vedic sign that has a reordering class after the intended\n      //     reph position. For example, if the reordering position for reph\n      //     is post-main, it will skip above-base matras that also have a\n      //     post-main position.\n\n      if (!found) {\n        // Copied from step 2.\n        newRephPos = start + 1;\n        while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n          newRephPos++;\n        }\n        if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n          // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n          if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n            newRephPos++;\n          }\n          found = true;\n        }\n      } // 6. Otherwise, reorder reph to the end of the syllable.\n\n      if (!found) {\n        newRephPos = end - 1;\n        while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) {\n          newRephPos--;\n        } // If the Reph is to be ending up after a Matra,Halant sequence,\n        // position it before that Halant so it can interact with the Matra.\n        // However, if it's a plain Consonant,Halant we shouldn't do that.\n        // Uniscribe doesn't do this.\n        // TEST: U+0930,U+094D,U+0915,U+094B,U+094D\n\n        if (isHalantOrCoeng(glyphs[newRephPos])) {\n          for (var _i20 = base + 1; _i20 < newRephPos; _i20++) {\n            if (glyphs[_i20].shaperInfo.category === CATEGORIES.M) {\n              newRephPos--;\n            }\n          }\n        }\n      }\n      var reph = glyphs[start];\n      glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, newRephPos - start)));\n      glyphs[newRephPos] = reph;\n      if (start < base && base <= newRephPos) {\n        base--;\n      }\n    } // o Reorder pre-base reordering consonants:\n    //\n    // If a pre-base reordering consonant is found, reorder it according to\n    // the following rules:\n\n    if (tryPref && base + 1 < end) {\n      for (var _i21 = base + 1; _i21 < end; _i21++) {\n        if (glyphs[_i21].features.pref) {\n          // 1. Only reorder a glyph produced by substitution during application\n          //    of the <pref> feature. (Note that a font may shape a Ra consonant with\n          //    the feature generally but block it in certain contexts.)\n          // Note: We just check that something got substituted.  We don't check that\n          // the <pref> feature actually did it...\n          //\n          // Reorder pref only if it ligated.\n          if (glyphs[_i21].isLigated && !glyphs[_i21].isMultiplied) {\n            // 2. Try to find a target position the same way as for pre-base matra.\n            //    If it is found, reorder pre-base consonant glyph.\n            //\n            // 3. If position is not found, reorder immediately before main\n            //    consonant.\n            var _newPos = base; // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n            // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n            // We want to position matra after them.\n\n            if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n              while (_newPos > start && !(glyphs[_newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n                _newPos--;\n              } // In Khmer coeng model, a H,Ra can go *after* matras.  If it goes after a\n              // split matra, it should be reordered to *before* the left part of such matra.\n\n              if (_newPos > start && glyphs[_newPos - 1].shaperInfo.category === CATEGORIES.M) {\n                var _oldPos2 = _i21;\n                for (var j = base + 1; j < _oldPos2; j++) {\n                  if (glyphs[j].shaperInfo.category === CATEGORIES.M) {\n                    _newPos--;\n                    break;\n                  }\n                }\n              }\n            }\n            if (_newPos > start && isHalantOrCoeng(glyphs[_newPos - 1])) {\n              // -> If ZWJ or ZWNJ follow this halant, position is moved after it.\n              if (_newPos < end && isJoiner(glyphs[_newPos])) {\n                _newPos++;\n              }\n            }\n            var _oldPos = _i21;\n            var _tmp = glyphs[_oldPos];\n            glyphs.splice.apply(glyphs, [_newPos + 1, 0].concat(glyphs.splice(_newPos, _oldPos - _newPos)));\n            glyphs[_newPos] = _tmp;\n            if (_newPos <= base && base < _oldPos) {\n              base++;\n            }\n          }\n          break;\n        }\n      }\n    } // Apply 'init' to the Left Matra if it's a word start.\n\n    if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(unicode.getCategory(glyphs[start - 1].codePoints[0])))) {\n      glyphs[start].features.init = true;\n    }\n  }\n}\nfunction nextSyllable(glyphs, start) {\n  if (start >= glyphs.length) return start;\n  var syllable = glyphs[start].shaperInfo.syllable;\n  while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {}\n  return start;\n}\nvar categories$1 = useData.categories,\n  decompositions$2 = useData.decompositions;\nvar trie$2 = new UnicodeTrie(Buffer(\"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\",\"base64\"));\nvar stateMachine$1 = new StateMachine(useData);\n/**\n * This shaper is an implementation of the Universal Shaping Engine, which\n * uses Unicode data to shape a number of scripts without a dedicated shaping engine.\n * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm.\n */\nvar UniversalShaper = /*#__PURE__*/function (_DefaultShaper4) {\n  _inheritsLoose(UniversalShaper, _DefaultShaper4);\n  function UniversalShaper() {\n    return _DefaultShaper4.apply(this, arguments) || this;\n  }\n  UniversalShaper.planFeatures = function planFeatures(plan) {\n    plan.addStage(setupSyllables$1); // Default glyph pre-processing group\n\n    plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']); // Reordering group\n\n    plan.addStage(clearSubstitutionFlags);\n    plan.addStage(['rphf'], false);\n    plan.addStage(recordRphf);\n    plan.addStage(clearSubstitutionFlags);\n    plan.addStage(['pref']);\n    plan.addStage(recordPref); // Orthographic unit shaping group\n\n    plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']);\n    plan.addStage(reorder); // Topographical features\n    // Scripts that need this are handled by the Arabic shaper, not implemented here for now.\n    // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false);\n    // Standard topographic presentation and positional feature application\n\n    plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']);\n  };\n  UniversalShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    var _loop = function _loop(i) {\n      var codepoint = glyphs[i].codePoints[0];\n      if (decompositions$2[codepoint]) {\n        var decomposed = decompositions$2[codepoint].map(function (c) {\n          var g = plan.font.glyphForCodePoint(c);\n          return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n        });\n        glyphs.splice.apply(glyphs, [i, 1].concat(decomposed));\n      }\n    };\n\n    // Decompose split vowels\n    // TODO: do this in a more general unicode normalizer\n    for (var i = glyphs.length - 1; i >= 0; i--) {\n      _loop(i);\n    }\n  };\n  return UniversalShaper;\n}(DefaultShaper);\n_defineProperty(UniversalShaper, \"zeroMarkWidths\", 'BEFORE_GPOS');\nfunction useCategory(glyph) {\n  return trie$2.get(glyph.codePoints[0]);\n}\nvar USEInfo = function USEInfo(category, syllableType, syllable) {\n  this.category = category;\n  this.syllableType = syllableType;\n  this.syllable = syllable;\n};\nfunction setupSyllables$1(font, glyphs) {\n  var syllable = 0;\n  for (var _iterator55 = _createForOfIteratorHelperLoose(stateMachine$1.match(glyphs.map(useCategory))), _step55; !(_step55 = _iterator55()).done;) {\n    var _step55$value = _step55.value,\n      start = _step55$value[0],\n      end = _step55$value[1],\n      tags = _step55$value[2];\n    ++syllable; // Create shaper info\n\n    for (var i = start; i <= end; i++) {\n      glyphs[i].shaperInfo = new USEInfo(categories$1[useCategory(glyphs[i])], tags[0], syllable);\n    } // Assign rphf feature\n\n    var limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start);\n    for (var _i = start; _i < start + limit; _i++) {\n      glyphs[_i].features.rphf = true;\n    }\n  }\n}\nfunction clearSubstitutionFlags(font, glyphs) {\n  for (var _iterator56 = _createForOfIteratorHelperLoose(glyphs), _step56; !(_step56 = _iterator56()).done;) {\n    var glyph = _step56.value;\n    glyph.substituted = false;\n  }\n}\nfunction recordRphf(font, glyphs) {\n  for (var _iterator57 = _createForOfIteratorHelperLoose(glyphs), _step57; !(_step57 = _iterator57()).done;) {\n    var glyph = _step57.value;\n    if (glyph.substituted && glyph.features.rphf) {\n      // Mark a substituted repha.\n      glyph.shaperInfo.category = 'R';\n    }\n  }\n}\nfunction recordPref(font, glyphs) {\n  for (var _iterator58 = _createForOfIteratorHelperLoose(glyphs), _step58; !(_step58 = _iterator58()).done;) {\n    var glyph = _step58.value;\n    if (glyph.substituted) {\n      // Mark a substituted pref as VPre, as they behave the same way.\n      glyph.shaperInfo.category = 'VPre';\n    }\n  }\n}\nfunction reorder(font, glyphs) {\n  var dottedCircle = font.glyphForCodePoint(0x25cc).id;\n  for (var start = 0, end = nextSyllable$1(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable$1(glyphs, start)) {\n    var i = void 0,\n      j = void 0;\n    var info = glyphs[start].shaperInfo;\n    var type = info.syllableType; // Only a few syllable types need reordering.\n\n    if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') {\n      continue;\n    } // Insert a dotted circle glyph in broken clusters.\n\n    if (type === 'broken_cluster' && dottedCircle) {\n      var g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n      g.shaperInfo = info; // Insert after possible Repha.\n\n      for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++) {}\n      glyphs.splice(++i, 0, g);\n      end++;\n    } // Move things forward.\n\n    if (info.category === 'R' && end - start > 1) {\n      // Got a repha. Reorder it to after first base, before first halant.\n      for (i = start + 1; i < end; i++) {\n        info = glyphs[i].shaperInfo;\n        if (isBase(info) || isHalant(glyphs[i])) {\n          // If we hit a halant, move before it; otherwise it's a base: move to it's\n          // place, and shift things in between backward.\n          if (isHalant(glyphs[i])) {\n            i--;\n          }\n          glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, i - start), [glyphs[i]]));\n          break;\n        }\n      }\n    } // Move things back.\n\n    for (i = start, j = end; i < end; i++) {\n      info = glyphs[i].shaperInfo;\n      if (isBase(info) || isHalant(glyphs[i])) {\n        // If we hit a halant, move after it; otherwise it's a base: move to it's\n        // place, and shift things in between backward.\n        j = isHalant(glyphs[i]) ? i + 1 : i;\n      } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) {\n        glyphs.splice.apply(glyphs, [j, 1, glyphs[i]].concat(glyphs.splice(j, i - j)));\n      }\n    }\n  }\n}\nfunction nextSyllable$1(glyphs, start) {\n  if (start >= glyphs.length) return start;\n  var syllable = glyphs[start].shaperInfo.syllable;\n  while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {}\n  return start;\n}\nfunction isHalant(glyph) {\n  return glyph.shaperInfo.category === 'H' && !glyph.isLigated;\n}\nfunction isBase(info) {\n  return info.category === 'B' || info.category === 'GB';\n}\nvar SHAPERS = {\n  arab: ArabicShaper,\n  // Arabic\n  mong: ArabicShaper,\n  // Mongolian\n  syrc: ArabicShaper,\n  // Syriac\n  'nko ': ArabicShaper,\n  // N'Ko\n  phag: ArabicShaper,\n  // Phags Pa\n  mand: ArabicShaper,\n  // Mandaic\n  mani: ArabicShaper,\n  // Manichaean\n  phlp: ArabicShaper,\n  // Psalter Pahlavi\n  hang: HangulShaper,\n  // Hangul\n  bng2: IndicShaper,\n  // Bengali\n  beng: IndicShaper,\n  // Bengali\n  dev2: IndicShaper,\n  // Devanagari\n  deva: IndicShaper,\n  // Devanagari\n  gjr2: IndicShaper,\n  // Gujarati\n  gujr: IndicShaper,\n  // Gujarati\n  guru: IndicShaper,\n  // Gurmukhi\n  gur2: IndicShaper,\n  // Gurmukhi\n  knda: IndicShaper,\n  // Kannada\n  knd2: IndicShaper,\n  // Kannada\n  mlm2: IndicShaper,\n  // Malayalam\n  mlym: IndicShaper,\n  // Malayalam\n  ory2: IndicShaper,\n  // Oriya\n  orya: IndicShaper,\n  // Oriya\n  taml: IndicShaper,\n  // Tamil\n  tml2: IndicShaper,\n  // Tamil\n  telu: IndicShaper,\n  // Telugu\n  tel2: IndicShaper,\n  // Telugu\n  khmr: IndicShaper,\n  // Khmer\n  bali: UniversalShaper,\n  // Balinese\n  batk: UniversalShaper,\n  // Batak\n  brah: UniversalShaper,\n  // Brahmi\n  bugi: UniversalShaper,\n  // Buginese\n  buhd: UniversalShaper,\n  // Buhid\n  cakm: UniversalShaper,\n  // Chakma\n  cham: UniversalShaper,\n  // Cham\n  dupl: UniversalShaper,\n  // Duployan\n  egyp: UniversalShaper,\n  // Egyptian Hieroglyphs\n  gran: UniversalShaper,\n  // Grantha\n  hano: UniversalShaper,\n  // Hanunoo\n  java: UniversalShaper,\n  // Javanese\n  kthi: UniversalShaper,\n  // Kaithi\n  kali: UniversalShaper,\n  // Kayah Li\n  khar: UniversalShaper,\n  // Kharoshthi\n  khoj: UniversalShaper,\n  // Khojki\n  sind: UniversalShaper,\n  // Khudawadi\n  lepc: UniversalShaper,\n  // Lepcha\n  limb: UniversalShaper,\n  // Limbu\n  mahj: UniversalShaper,\n  // Mahajani\n  // mand: UniversalShaper, // Mandaic\n  // mani: UniversalShaper, // Manichaean\n  mtei: UniversalShaper,\n  // Meitei Mayek\n  modi: UniversalShaper,\n  // Modi\n  // mong: UniversalShaper, // Mongolian\n  // 'nko ': UniversalShaper, // N’Ko\n  hmng: UniversalShaper,\n  // Pahawh Hmong\n  // phag: UniversalShaper, // Phags-pa\n  // phlp: UniversalShaper, // Psalter Pahlavi\n  rjng: UniversalShaper,\n  // Rejang\n  saur: UniversalShaper,\n  // Saurashtra\n  shrd: UniversalShaper,\n  // Sharada\n  sidd: UniversalShaper,\n  // Siddham\n  sinh: UniversalShaper,\n  // Sinhala\n  sund: UniversalShaper,\n  // Sundanese\n  sylo: UniversalShaper,\n  // Syloti Nagri\n  tglg: UniversalShaper,\n  // Tagalog\n  tagb: UniversalShaper,\n  // Tagbanwa\n  tale: UniversalShaper,\n  // Tai Le\n  lana: UniversalShaper,\n  // Tai Tham\n  tavt: UniversalShaper,\n  // Tai Viet\n  takr: UniversalShaper,\n  // Takri\n  tibt: UniversalShaper,\n  // Tibetan\n  tfng: UniversalShaper,\n  // Tifinagh\n  tirh: UniversalShaper,\n  // Tirhuta\n  latn: DefaultShaper,\n  // Latin\n  DFLT: DefaultShaper // Default\n};\n\nfunction choose(script) {\n  if (!Array.isArray(script)) {\n    script = [script];\n  }\n  for (var _iterator59 = _createForOfIteratorHelperLoose(script), _step59; !(_step59 = _iterator59()).done;) {\n    var s = _step59.value;\n    var shaper = SHAPERS[s];\n    if (shaper) {\n      return shaper;\n    }\n  }\n  return DefaultShaper;\n}\nvar GSUBProcessor = /*#__PURE__*/function (_OTProcessor) {\n  _inheritsLoose(GSUBProcessor, _OTProcessor);\n  function GSUBProcessor() {\n    return _OTProcessor.apply(this, arguments) || this;\n  }\n  var _proto27 = GSUBProcessor.prototype;\n  _proto27.applyLookup = function applyLookup(lookupType, table) {\n    var _this7 = this;\n    switch (lookupType) {\n      case 1:\n        {\n          // Single Substitution\n          var index = this.coverageIndex(table.coverage);\n          if (index === -1) {\n            return false;\n          }\n          var glyph = this.glyphIterator.cur;\n          switch (table.version) {\n            case 1:\n              glyph.id = glyph.id + table.deltaGlyphID & 0xffff;\n              break;\n            case 2:\n              glyph.id = table.substitute.get(index);\n              break;\n          }\n          return true;\n        }\n      case 2:\n        {\n          // Multiple Substitution\n          var _index = this.coverageIndex(table.coverage);\n          if (_index !== -1) {\n            var _this$glyphs2;\n            var sequence = table.sequences.get(_index);\n            if (sequence.length === 0) {\n              // If the sequence length is zero, delete the glyph.\n              // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it.\n              this.glyphs.splice(this.glyphIterator.index, 1);\n              return true;\n            }\n            this.glyphIterator.cur.id = sequence[0];\n            this.glyphIterator.cur.ligatureComponent = 0;\n            var features = this.glyphIterator.cur.features;\n            var curGlyph = this.glyphIterator.cur;\n            var replacement = sequence.slice(1).map(function (gid, i) {\n              var glyph = new GlyphInfo(_this7.font, gid, undefined, features);\n              glyph.shaperInfo = curGlyph.shaperInfo;\n              glyph.isLigated = curGlyph.isLigated;\n              glyph.ligatureComponent = i + 1;\n              glyph.substituted = true;\n              glyph.isMultiplied = true;\n              return glyph;\n            });\n            (_this$glyphs2 = this.glyphs).splice.apply(_this$glyphs2, [this.glyphIterator.index + 1, 0].concat(replacement));\n            return true;\n          }\n          return false;\n        }\n      case 3:\n        {\n          // Alternate Substitution\n          var _index2 = this.coverageIndex(table.coverage);\n          if (_index2 !== -1) {\n            var USER_INDEX = 0; // TODO\n\n            this.glyphIterator.cur.id = table.alternateSet.get(_index2)[USER_INDEX];\n            return true;\n          }\n          return false;\n        }\n      case 4:\n        {\n          // Ligature Substitution\n          var _index3 = this.coverageIndex(table.coverage);\n          if (_index3 === -1) {\n            return false;\n          }\n          for (var _iterator60 = _createForOfIteratorHelperLoose(table.ligatureSets.get(_index3)), _step60; !(_step60 = _iterator60()).done;) {\n            var ligature = _step60.value;\n            var matched = this.sequenceMatchIndices(1, ligature.components);\n            if (!matched) {\n              continue;\n            }\n            var _curGlyph = this.glyphIterator.cur; // Concatenate all of the characters the new ligature will represent\n\n            var characters = _curGlyph.codePoints.slice();\n            for (var _iterator61 = _createForOfIteratorHelperLoose(matched), _step61; !(_step61 = _iterator61()).done;) {\n              var _characters;\n              var _index4 = _step61.value;\n              (_characters = characters).push.apply(_characters, this.glyphs[_index4].codePoints);\n            } // Create the replacement ligature glyph\n\n            var ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, _curGlyph.features);\n            ligatureGlyph.shaperInfo = _curGlyph.shaperInfo;\n            ligatureGlyph.isLigated = true;\n            ligatureGlyph.substituted = true; // From Harfbuzz:\n            // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave\n            //   the ligature to keep its old ligature id.  This will allow it to attach to\n            //   a base ligature in GPOS.  Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,\n            //   and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a\n            //   ligature id and component value of 2.  Then if SHADDA,FATHA form a ligature\n            //   later, we don't want them to lose their ligature id/component, otherwise\n            //   GPOS will fail to correctly position the mark ligature on top of the\n            //   LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343\n            //\n            // - If a ligature is formed of components that some of which are also ligatures\n            //   themselves, and those ligature components had marks attached to *their*\n            //   components, we have to attach the marks to the new ligature component\n            //   positions!  Now *that*'s tricky!  And these marks may be following the\n            //   last component of the whole sequence, so we should loop forward looking\n            //   for them and update them.\n            //\n            //   Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a\n            //   'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature\n            //   id and component == 1.  Now, during 'liga', the LAM and the LAM-HEH ligature\n            //   form a LAM-LAM-HEH ligature.  We need to reassign the SHADDA and FATHA to\n            //   the new ligature with a component value of 2.\n            //\n            //   This in fact happened to a font...  See https://bugzilla.gnome.org/show_bug.cgi?id=437633\n\n            var isMarkLigature = _curGlyph.isMark;\n            for (var i = 0; i < matched.length && isMarkLigature; i++) {\n              isMarkLigature = this.glyphs[matched[i]].isMark;\n            }\n            ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++;\n            var lastLigID = _curGlyph.ligatureID;\n            var lastNumComps = _curGlyph.codePoints.length;\n            var curComps = lastNumComps;\n            var idx = this.glyphIterator.index + 1; // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence.\n            // This allows GPOS to attach marks to the correct ligature components.\n\n            for (var _iterator62 = _createForOfIteratorHelperLoose(matched), _step62; !(_step62 = _iterator62()).done;) {\n              var matchIndex = _step62.value;\n              // Don't assign new ligature components for mark ligatures (see above)\n              if (isMarkLigature) {\n                idx = matchIndex;\n              } else {\n                while (idx < matchIndex) {\n                  var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps);\n                  this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID;\n                  this.glyphs[idx].ligatureComponent = ligatureComponent;\n                  idx++;\n                }\n              }\n              lastLigID = this.glyphs[idx].ligatureID;\n              lastNumComps = this.glyphs[idx].codePoints.length;\n              curComps += lastNumComps;\n              idx++; // skip base glyph\n            } // Adjust ligature components for any marks following\n\n            if (lastLigID && !isMarkLigature) {\n              for (var _i = idx; _i < this.glyphs.length; _i++) {\n                if (this.glyphs[_i].ligatureID === lastLigID) {\n                  var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[_i].ligatureComponent || 1, lastNumComps);\n                  this.glyphs[_i].ligatureComponent = ligatureComponent;\n                } else {\n                  break;\n                }\n              }\n            } // Delete the matched glyphs, and replace the current glyph with the ligature glyph\n\n            for (var _i2 = matched.length - 1; _i2 >= 0; _i2--) {\n              this.glyphs.splice(matched[_i2], 1);\n            }\n            this.glyphs[this.glyphIterator.index] = ligatureGlyph;\n            return true;\n          }\n          return false;\n        }\n      case 5:\n        // Contextual Substitution\n        return this.applyContext(table);\n      case 6:\n        // Chaining Contextual Substitution\n        return this.applyChainingContext(table);\n      case 7:\n        // Extension Substitution\n        return this.applyLookup(table.lookupType, table.extension);\n      default:\n        throw new Error(\"GSUB lookupType \".concat(lookupType, \" is not supported\"));\n    }\n  };\n  return GSUBProcessor;\n}(OTProcessor);\nvar GPOSProcessor = /*#__PURE__*/function (_OTProcessor2) {\n  _inheritsLoose(GPOSProcessor, _OTProcessor2);\n  function GPOSProcessor() {\n    return _OTProcessor2.apply(this, arguments) || this;\n  }\n  var _proto28 = GPOSProcessor.prototype;\n  _proto28.applyPositionValue = function applyPositionValue(sequenceIndex, value) {\n    var position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)];\n    if (value.xAdvance != null) {\n      position.xAdvance += value.xAdvance;\n    }\n    if (value.yAdvance != null) {\n      position.yAdvance += value.yAdvance;\n    }\n    if (value.xPlacement != null) {\n      position.xOffset += value.xPlacement;\n    }\n    if (value.yPlacement != null) {\n      position.yOffset += value.yPlacement;\n    } // Adjustments for font variations\n\n    var variationProcessor = this.font._variationProcessor;\n    var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n    if (variationProcessor && variationStore) {\n      if (value.xPlaDevice) {\n        position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b);\n      }\n      if (value.yPlaDevice) {\n        position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b);\n      }\n      if (value.xAdvDevice) {\n        position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b);\n      }\n      if (value.yAdvDevice) {\n        position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b);\n      }\n    } // TODO: device tables\n  };\n  _proto28.applyLookup = function applyLookup(lookupType, table) {\n    switch (lookupType) {\n      case 1:\n        {\n          // Single positioning value\n          var index = this.coverageIndex(table.coverage);\n          if (index === -1) {\n            return false;\n          }\n          switch (table.version) {\n            case 1:\n              this.applyPositionValue(0, table.value);\n              break;\n            case 2:\n              this.applyPositionValue(0, table.values.get(index));\n              break;\n          }\n          return true;\n        }\n      case 2:\n        {\n          // Pair Adjustment Positioning\n          var nextGlyph = this.glyphIterator.peek();\n          if (!nextGlyph) {\n            return false;\n          }\n          var _index = this.coverageIndex(table.coverage);\n          if (_index === -1) {\n            return false;\n          }\n          switch (table.version) {\n            case 1:\n              // Adjustments for glyph pairs\n              var set = table.pairSets.get(_index);\n              for (var _iterator63 = _createForOfIteratorHelperLoose(set), _step63; !(_step63 = _iterator63()).done;) {\n                var _pair = _step63.value;\n                if (_pair.secondGlyph === nextGlyph.id) {\n                  this.applyPositionValue(0, _pair.value1);\n                  this.applyPositionValue(1, _pair.value2);\n                  return true;\n                }\n              }\n              return false;\n            case 2:\n              // Class pair adjustment\n              var class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1);\n              var class2 = this.getClassID(nextGlyph.id, table.classDef2);\n              if (class1 === -1 || class2 === -1) {\n                return false;\n              }\n              var pair = table.classRecords.get(class1).get(class2);\n              this.applyPositionValue(0, pair.value1);\n              this.applyPositionValue(1, pair.value2);\n              return true;\n          }\n        }\n      case 3:\n        {\n          // Cursive Attachment Positioning\n          var nextIndex = this.glyphIterator.peekIndex();\n          var _nextGlyph = this.glyphs[nextIndex];\n          if (!_nextGlyph) {\n            return false;\n          }\n          var curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)];\n          if (!curRecord || !curRecord.exitAnchor) {\n            return false;\n          }\n          var nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, _nextGlyph.id)];\n          if (!nextRecord || !nextRecord.entryAnchor) {\n            return false;\n          }\n          var entry = this.getAnchor(nextRecord.entryAnchor);\n          var exit = this.getAnchor(curRecord.exitAnchor);\n          var cur = this.positions[this.glyphIterator.index];\n          var next = this.positions[nextIndex];\n          switch (this.direction) {\n            case 'ltr':\n              cur.xAdvance = exit.x + cur.xOffset;\n              var d = entry.x + next.xOffset;\n              next.xAdvance -= d;\n              next.xOffset -= d;\n              break;\n            case 'rtl':\n              d = exit.x + cur.xOffset;\n              cur.xAdvance -= d;\n              cur.xOffset -= d;\n              next.xAdvance = entry.x + next.xOffset;\n              break;\n          }\n          if (this.glyphIterator.flags.rightToLeft) {\n            this.glyphIterator.cur.cursiveAttachment = nextIndex;\n            cur.yOffset = entry.y - exit.y;\n          } else {\n            _nextGlyph.cursiveAttachment = this.glyphIterator.index;\n            cur.yOffset = exit.y - entry.y;\n          }\n          return true;\n        }\n      case 4:\n        {\n          // Mark to base positioning\n          var markIndex = this.coverageIndex(table.markCoverage);\n          if (markIndex === -1) {\n            return false;\n          } // search backward for a base glyph\n\n          var baseGlyphIndex = this.glyphIterator.index;\n          while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0)) {}\n          if (baseGlyphIndex < 0) {\n            return false;\n          }\n          var baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id);\n          if (baseIndex === -1) {\n            return false;\n          }\n          var markRecord = table.markArray[markIndex];\n          var baseAnchor = table.baseArray[baseIndex][markRecord.class];\n          this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n          return true;\n        }\n      case 5:\n        {\n          // Mark to ligature positioning\n          var _markIndex = this.coverageIndex(table.markCoverage);\n          if (_markIndex === -1) {\n            return false;\n          } // search backward for a base glyph\n\n          var _baseGlyphIndex = this.glyphIterator.index;\n          while (--_baseGlyphIndex >= 0 && this.glyphs[_baseGlyphIndex].isMark) {}\n          if (_baseGlyphIndex < 0) {\n            return false;\n          }\n          var ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[_baseGlyphIndex].id);\n          if (ligIndex === -1) {\n            return false;\n          }\n          var ligAttach = table.ligatureArray[ligIndex];\n          var markGlyph = this.glyphIterator.cur;\n          var ligGlyph = this.glyphs[_baseGlyphIndex];\n          var compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && markGlyph.ligatureComponent > 0 ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 : ligGlyph.codePoints.length - 1;\n          var _markRecord = table.markArray[_markIndex];\n          var _baseAnchor = ligAttach[compIndex][_markRecord.class];\n          this.applyAnchor(_markRecord, _baseAnchor, _baseGlyphIndex);\n          return true;\n        }\n      case 6:\n        {\n          // Mark to mark positioning\n          var mark1Index = this.coverageIndex(table.mark1Coverage);\n          if (mark1Index === -1) {\n            return false;\n          } // get the previous mark to attach to\n\n          var prevIndex = this.glyphIterator.peekIndex(-1);\n          var prev = this.glyphs[prevIndex];\n          if (!prev || !prev.isMark) {\n            return false;\n          }\n          var _cur = this.glyphIterator.cur; // The following logic was borrowed from Harfbuzz\n\n          var good = false;\n          if (_cur.ligatureID === prev.ligatureID) {\n            if (!_cur.ligatureID) {\n              // Marks belonging to the same base\n              good = true;\n            } else if (_cur.ligatureComponent === prev.ligatureComponent) {\n              // Marks belonging to the same ligature component\n              good = true;\n            }\n          } else {\n            // If ligature ids don't match, it may be the case that one of the marks\n            // itself is a ligature, in which case match.\n            if (_cur.ligatureID && !_cur.ligatureComponent || prev.ligatureID && !prev.ligatureComponent) {\n              good = true;\n            }\n          }\n          if (!good) {\n            return false;\n          }\n          var mark2Index = this.coverageIndex(table.mark2Coverage, prev.id);\n          if (mark2Index === -1) {\n            return false;\n          }\n          var _markRecord2 = table.mark1Array[mark1Index];\n          var _baseAnchor2 = table.mark2Array[mark2Index][_markRecord2.class];\n          this.applyAnchor(_markRecord2, _baseAnchor2, prevIndex);\n          return true;\n        }\n      case 7:\n        // Contextual positioning\n        return this.applyContext(table);\n      case 8:\n        // Chaining contextual positioning\n        return this.applyChainingContext(table);\n      case 9:\n        // Extension positioning\n        return this.applyLookup(table.lookupType, table.extension);\n      default:\n        throw new Error(\"Unsupported GPOS table: \".concat(lookupType));\n    }\n  };\n  _proto28.applyAnchor = function applyAnchor(markRecord, baseAnchor, baseGlyphIndex) {\n    var baseCoords = this.getAnchor(baseAnchor);\n    var markCoords = this.getAnchor(markRecord.markAnchor);\n    var basePos = this.positions[baseGlyphIndex];\n    var markPos = this.positions[this.glyphIterator.index];\n    markPos.xOffset = baseCoords.x - markCoords.x;\n    markPos.yOffset = baseCoords.y - markCoords.y;\n    this.glyphIterator.cur.markAttachment = baseGlyphIndex;\n  };\n  _proto28.getAnchor = function getAnchor(anchor) {\n    // TODO: contour point, device tables\n    var x = anchor.xCoordinate;\n    var y = anchor.yCoordinate; // Adjustments for font variations\n\n    var variationProcessor = this.font._variationProcessor;\n    var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n    if (variationProcessor && variationStore) {\n      if (anchor.xDeviceTable) {\n        x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b);\n      }\n      if (anchor.yDeviceTable) {\n        y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b);\n      }\n    }\n    return {\n      x: x,\n      y: y\n    };\n  };\n  _proto28.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) {\n    _OTProcessor2.prototype.applyFeatures.call(this, userFeatures, glyphs, advances);\n    for (var i = 0; i < this.glyphs.length; i++) {\n      this.fixCursiveAttachment(i);\n    }\n    this.fixMarkAttachment();\n  };\n  _proto28.fixCursiveAttachment = function fixCursiveAttachment(i) {\n    var glyph = this.glyphs[i];\n    if (glyph.cursiveAttachment != null) {\n      var j = glyph.cursiveAttachment;\n      glyph.cursiveAttachment = null;\n      this.fixCursiveAttachment(j);\n      this.positions[i].yOffset += this.positions[j].yOffset;\n    }\n  };\n  _proto28.fixMarkAttachment = function fixMarkAttachment() {\n    for (var i = 0; i < this.glyphs.length; i++) {\n      var glyph = this.glyphs[i];\n      if (glyph.markAttachment != null) {\n        var j = glyph.markAttachment;\n        this.positions[i].xOffset += this.positions[j].xOffset;\n        this.positions[i].yOffset += this.positions[j].yOffset;\n        if (this.direction === 'ltr') {\n          for (var k = j; k < i; k++) {\n            this.positions[i].xOffset -= this.positions[k].xAdvance;\n            this.positions[i].yOffset -= this.positions[k].yAdvance;\n          }\n        } else {\n          for (var _k = j + 1; _k < i + 1; _k++) {\n            this.positions[i].xOffset += this.positions[_k].xAdvance;\n            this.positions[i].yOffset += this.positions[_k].yAdvance;\n          }\n        }\n      }\n    }\n  };\n  return GPOSProcessor;\n}(OTProcessor);\nvar OTLayoutEngine = /*#__PURE__*/function () {\n  function OTLayoutEngine(font) {\n    this.font = font;\n    this.glyphInfos = null;\n    this.plan = null;\n    this.GSUBProcessor = null;\n    this.GPOSProcessor = null;\n    this.fallbackPosition = true;\n    if (font.GSUB) {\n      this.GSUBProcessor = new GSUBProcessor(font, font.GSUB);\n    }\n    if (font.GPOS) {\n      this.GPOSProcessor = new GPOSProcessor(font, font.GPOS);\n    }\n  }\n  var _proto29 = OTLayoutEngine.prototype;\n  _proto29.setup = function setup(glyphRun) {\n    var _this8 = this;\n    // Map glyphs to GlyphInfo objects so data can be passed between\n    // GSUB and GPOS without mutating the real (shared) Glyph objects.\n    this.glyphInfos = glyphRun.glyphs.map(function (glyph) {\n      return new GlyphInfo(_this8.font, glyph.id, [].concat(glyph.codePoints));\n    }); // Select a script based on what is available in GSUB/GPOS.\n\n    var script = null;\n    if (this.GPOSProcessor) {\n      script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n    }\n    if (this.GSUBProcessor) {\n      script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n    } // Choose a shaper based on the script, and setup a shaping plan.\n    // This determines which features to apply to which glyphs.\n\n    this.shaper = choose(script);\n    this.plan = new ShapingPlan(this.font, script, glyphRun.direction);\n    this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features); // Assign chosen features to output glyph run\n\n    for (var key in this.plan.allFeatures) {\n      glyphRun.features[key] = true;\n    }\n  };\n  _proto29.substitute = function substitute(glyphRun) {\n    var _this9 = this;\n    if (this.GSUBProcessor) {\n      this.plan.process(this.GSUBProcessor, this.glyphInfos); // Map glyph infos back to normal Glyph objects\n\n      glyphRun.glyphs = this.glyphInfos.map(function (glyphInfo) {\n        return _this9.font.getGlyph(glyphInfo.id, glyphInfo.codePoints);\n      });\n    }\n  };\n  _proto29.position = function position(glyphRun) {\n    if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') {\n      this.zeroMarkAdvances(glyphRun.positions);\n    }\n    if (this.GPOSProcessor) {\n      this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions);\n    }\n    if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') {\n      this.zeroMarkAdvances(glyphRun.positions);\n    } // Reverse the glyphs and positions if the script is right-to-left\n\n    if (glyphRun.direction === 'rtl') {\n      glyphRun.glyphs.reverse();\n      glyphRun.positions.reverse();\n    }\n    return this.GPOSProcessor && this.GPOSProcessor.features;\n  };\n  _proto29.zeroMarkAdvances = function zeroMarkAdvances(positions) {\n    for (var i = 0; i < this.glyphInfos.length; i++) {\n      if (this.glyphInfos[i].isMark) {\n        positions[i].xAdvance = 0;\n        positions[i].yAdvance = 0;\n      }\n    }\n  };\n  _proto29.cleanup = function cleanup() {\n    this.glyphInfos = null;\n    this.plan = null;\n    this.shaper = null;\n  };\n  _proto29.getAvailableFeatures = function getAvailableFeatures(script, language) {\n    var features = [];\n    if (this.GSUBProcessor) {\n      this.GSUBProcessor.selectScript(script, language);\n      features.push.apply(features, Object.keys(this.GSUBProcessor.features));\n    }\n    if (this.GPOSProcessor) {\n      this.GPOSProcessor.selectScript(script, language);\n      features.push.apply(features, Object.keys(this.GPOSProcessor.features));\n    }\n    return features;\n  };\n  return OTLayoutEngine;\n}();\nvar LayoutEngine = /*#__PURE__*/function () {\n  function LayoutEngine(font) {\n    this.font = font;\n    this.unicodeLayoutEngine = null;\n    this.kernProcessor = null; // Choose an advanced layout engine. We try the AAT morx table first since more\n    // scripts are currently supported because the shaping logic is built into the font.\n\n    if (this.font.morx) {\n      this.engine = new AATLayoutEngine(this.font);\n    } else if (this.font.GSUB || this.font.GPOS) {\n      this.engine = new OTLayoutEngine(this.font);\n    }\n  }\n  var _proto30 = LayoutEngine.prototype;\n  _proto30.layout = function layout(string, features, script, language, direction) {\n    // Make the features parameter optional\n    if (typeof features === 'string') {\n      direction = language;\n      language = script;\n      script = features;\n      features = [];\n    } // Map string to glyphs if needed\n\n    if (typeof string === 'string') {\n      // Attempt to detect the script from the string if not provided.\n      if (script == null) {\n        script = forString(string);\n      }\n      var glyphs = this.font.glyphsForString(string);\n    } else {\n      // Attempt to detect the script from the glyph code points if not provided.\n      if (script == null) {\n        var codePoints = [];\n        for (var _iterator64 = _createForOfIteratorHelperLoose(string), _step64; !(_step64 = _iterator64()).done;) {\n          var glyph = _step64.value;\n          codePoints.push.apply(codePoints, glyph.codePoints);\n        }\n        script = forCodePoints(codePoints);\n      }\n      var glyphs = string;\n    }\n    var glyphRun = new GlyphRun(glyphs, features, script, language, direction); // Return early if there are no glyphs\n\n    if (glyphs.length === 0) {\n      glyphRun.positions = [];\n      return glyphRun;\n    } // Setup the advanced layout engine\n\n    if (this.engine && this.engine.setup) {\n      this.engine.setup(glyphRun);\n    } // Substitute and position the glyphs\n\n    this.substitute(glyphRun);\n    this.position(glyphRun);\n    this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions); // Let the layout engine clean up any state it might have\n\n    if (this.engine && this.engine.cleanup) {\n      this.engine.cleanup();\n    }\n    return glyphRun;\n  };\n  _proto30.substitute = function substitute(glyphRun) {\n    // Call the advanced layout engine to make substitutions\n    if (this.engine && this.engine.substitute) {\n      this.engine.substitute(glyphRun);\n    }\n  };\n  _proto30.position = function position(glyphRun) {\n    // Get initial glyph positions\n    glyphRun.positions = glyphRun.glyphs.map(function (glyph) {\n      return new GlyphPosition(glyph.advanceWidth);\n    });\n    var positioned = null; // Call the advanced layout engine. Returns the features applied.\n\n    if (this.engine && this.engine.position) {\n      positioned = this.engine.position(glyphRun);\n    } // if there is no GPOS table, use unicode properties to position marks.\n\n    if (!positioned && (!this.engine || this.engine.fallbackPosition)) {\n      if (!this.unicodeLayoutEngine) {\n        this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font);\n      }\n      this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions);\n    } // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table\n\n    if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) {\n      if (!this.kernProcessor) {\n        this.kernProcessor = new KernProcessor(this.font);\n      }\n      this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions);\n      glyphRun.features.kern = true;\n    }\n  };\n  _proto30.hideDefaultIgnorables = function hideDefaultIgnorables(glyphs, positions) {\n    var space = this.font.glyphForCodePoint(0x20);\n    for (var i = 0; i < glyphs.length; i++) {\n      if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) {\n        glyphs[i] = space;\n        positions[i].xAdvance = 0;\n        positions[i].yAdvance = 0;\n      }\n    }\n  };\n  _proto30.isDefaultIgnorable = function isDefaultIgnorable(ch) {\n    // From DerivedCoreProperties.txt in the Unicode database,\n    // minus U+115F, U+1160, U+3164 and U+FFA0, which is what\n    // Harfbuzz and Uniscribe do.\n    var plane = ch >> 16;\n    if (plane === 0) {\n      // BMP\n      switch (ch >> 8) {\n        case 0x00:\n          return ch === 0x00AD;\n        case 0x03:\n          return ch === 0x034F;\n        case 0x06:\n          return ch === 0x061C;\n        case 0x17:\n          return 0x17B4 <= ch && ch <= 0x17B5;\n        case 0x18:\n          return 0x180B <= ch && ch <= 0x180E;\n        case 0x20:\n          return 0x200B <= ch && ch <= 0x200F || 0x202A <= ch && ch <= 0x202E || 0x2060 <= ch && ch <= 0x206F;\n        case 0xFE:\n          return 0xFE00 <= ch && ch <= 0xFE0F || ch === 0xFEFF;\n        case 0xFF:\n          return 0xFFF0 <= ch && ch <= 0xFFF8;\n        default:\n          return false;\n      }\n    } else {\n      // Other planes\n      switch (plane) {\n        case 0x01:\n          return 0x1BCA0 <= ch && ch <= 0x1BCA3 || 0x1D173 <= ch && ch <= 0x1D17A;\n        case 0x0E:\n          return 0xE0000 <= ch && ch <= 0xE0FFF;\n        default:\n          return false;\n      }\n    }\n  };\n  _proto30.getAvailableFeatures = function getAvailableFeatures(script, language) {\n    var features = [];\n    if (this.engine) {\n      features.push.apply(features, this.engine.getAvailableFeatures(script, language));\n    }\n    if (this.font.kern && features.indexOf('kern') === -1) {\n      features.push('kern');\n    }\n    return features;\n  };\n  _proto30.stringsForGlyph = function stringsForGlyph(gid) {\n    var result = new Set();\n    var codePoints = this.font._cmapProcessor.codePointsForGlyph(gid);\n    for (var _iterator65 = _createForOfIteratorHelperLoose(codePoints), _step65; !(_step65 = _iterator65()).done;) {\n      var codePoint = _step65.value;\n      result.add(String.fromCodePoint(codePoint));\n    }\n    if (this.engine && this.engine.stringsForGlyph) {\n      for (var _iterator66 = _createForOfIteratorHelperLoose(this.engine.stringsForGlyph(gid)), _step66; !(_step66 = _iterator66()).done;) {\n        var string = _step66.value;\n        result.add(string);\n      }\n    }\n    return Array.from(result);\n  };\n  return LayoutEngine;\n}();\nvar SVG_COMMANDS = {\n  moveTo: 'M',\n  lineTo: 'L',\n  quadraticCurveTo: 'Q',\n  bezierCurveTo: 'C',\n  closePath: 'Z'\n};\n/**\n * Path objects are returned by glyphs and represent the actual\n * vector outlines for each glyph in the font. Paths can be converted\n * to SVG path data strings, or to functions that can be applied to\n * render the path to a graphics context.\n */\nvar Path = /*#__PURE__*/function () {\n  function Path() {\n    this.commands = [];\n    this._bbox = null;\n    this._cbox = null;\n  }\n  /**\n   * Compiles the path to a JavaScript function that can be applied with\n   * a graphics context in order to render the path.\n   * @return {string}\n   */\n  var _proto31 = Path.prototype;\n  _proto31.toFunction = function toFunction() {\n    var _this10 = this;\n    return function (ctx) {\n      _this10.commands.forEach(function (c) {\n        return ctx[c.command].apply(ctx, c.args);\n      });\n    };\n  }\n  /**\n   * Converts the path to an SVG path data string\n   * @return {string}\n   */;\n  _proto31.toSVG = function toSVG() {\n    var cmds = this.commands.map(function (c) {\n      var args = c.args.map(function (arg) {\n        return Math.round(arg * 100) / 100;\n      });\n      return \"\".concat(SVG_COMMANDS[c.command]).concat(args.join(' '));\n    });\n    return cmds.join('');\n  }\n  /**\n   * Gets the \"control box\" of a path.\n   * This is like the bounding box, but it includes all points including\n   * control points of bezier segments and is much faster to compute than\n   * the real bounding box.\n   * @type {BBox}\n   */;\n  /**\n   * Applies a mapping function to each point in the path.\n   * @param {function} fn\n   * @return {Path}\n   */\n  _proto31.mapPoints = function mapPoints(fn) {\n    var path = new Path();\n    for (var _iterator67 = _createForOfIteratorHelperLoose(this.commands), _step67; !(_step67 = _iterator67()).done;) {\n      var c = _step67.value;\n      var args = [];\n      for (var i = 0; i < c.args.length; i += 2) {\n        var _fn = fn(c.args[i], c.args[i + 1]),\n          x = _fn[0],\n          y = _fn[1];\n        args.push(x, y);\n      }\n      path[c.command].apply(path, args);\n    }\n    return path;\n  }\n  /**\n   * Transforms the path by the given matrix.\n   */;\n  _proto31.transform = function transform(m0, m1, m2, m3, m4, m5) {\n    return this.mapPoints(function (x, y) {\n      x = m0 * x + m2 * y + m4;\n      y = m1 * x + m3 * y + m5;\n      return [x, y];\n    });\n  }\n  /**\n   * Translates the path by the given offset.\n   */;\n  _proto31.translate = function translate(x, y) {\n    return this.transform(1, 0, 0, 1, x, y);\n  }\n  /**\n   * Rotates the path by the given angle (in radians).\n   */;\n  _proto31.rotate = function rotate(angle) {\n    var cos = Math.cos(angle);\n    var sin = Math.sin(angle);\n    return this.transform(cos, sin, -sin, cos, 0, 0);\n  }\n  /**\n   * Scales the path.\n   */;\n  _proto31.scale = function scale(scaleX, scaleY) {\n    if (scaleY === void 0) {\n      scaleY = scaleX;\n    }\n    return this.transform(scaleX, 0, 0, scaleY, 0, 0);\n  };\n  _createClass(Path, [{\n    key: \"cbox\",\n    get: function get() {\n      if (!this._cbox) {\n        var cbox = new BBox();\n        for (var _iterator68 = _createForOfIteratorHelperLoose(this.commands), _step68; !(_step68 = _iterator68()).done;) {\n          var command = _step68.value;\n          for (var i = 0; i < command.args.length; i += 2) {\n            cbox.addPoint(command.args[i], command.args[i + 1]);\n          }\n        }\n        this._cbox = Object.freeze(cbox);\n      }\n      return this._cbox;\n    }\n    /**\n     * Gets the exact bounding box of the path by evaluating curve segments.\n     * Slower to compute than the control box, but more accurate.\n     * @type {BBox}\n     */\n  }, {\n    key: \"bbox\",\n    get: function get() {\n      if (this._bbox) {\n        return this._bbox;\n      }\n      var bbox = new BBox();\n      var cx = 0,\n        cy = 0;\n      var f = function f(t) {\n        return Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i];\n      };\n      for (var _iterator69 = _createForOfIteratorHelperLoose(this.commands), _step69; !(_step69 = _iterator69()).done;) {\n        var c = _step69.value;\n        switch (c.command) {\n          case 'moveTo':\n          case 'lineTo':\n            var _c$args = c.args,\n              x = _c$args[0],\n              y = _c$args[1];\n            bbox.addPoint(x, y);\n            cx = x;\n            cy = y;\n            break;\n          case 'quadraticCurveTo':\n          case 'bezierCurveTo':\n            if (c.command === 'quadraticCurveTo') {\n              // http://fontforge.org/bezier.html\n              var _c$args2 = c.args,\n                qp1x = _c$args2[0],\n                qp1y = _c$args2[1],\n                p3x = _c$args2[2],\n                p3y = _c$args2[3];\n              var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0)\n\n              var cp1y = cy + 2 / 3 * (qp1y - cy);\n              var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2)\n\n              var cp2y = p3y + 2 / 3 * (qp1y - p3y);\n            } else {\n              var _c$args3 = c.args,\n                cp1x = _c$args3[0],\n                cp1y = _c$args3[1],\n                cp2x = _c$args3[2],\n                cp2y = _c$args3[3],\n                p3x = _c$args3[4],\n                p3y = _c$args3[5];\n            } // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n\n            bbox.addPoint(p3x, p3y);\n            var p0 = [cx, cy];\n            var p1 = [cp1x, cp1y];\n            var p2 = [cp2x, cp2y];\n            var p3 = [p3x, p3y];\n            for (var i = 0; i <= 1; i++) {\n              var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n              var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n              c = 3 * p1[i] - 3 * p0[i];\n              if (a === 0) {\n                if (b === 0) {\n                  continue;\n                }\n                var t = -c / b;\n                if (0 < t && t < 1) {\n                  if (i === 0) {\n                    bbox.addPoint(f(t), bbox.maxY);\n                  } else if (i === 1) {\n                    bbox.addPoint(bbox.maxX, f(t));\n                  }\n                }\n                continue;\n              }\n              var b2ac = Math.pow(b, 2) - 4 * c * a;\n              if (b2ac < 0) {\n                continue;\n              }\n              var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n              if (0 < t1 && t1 < 1) {\n                if (i === 0) {\n                  bbox.addPoint(f(t1), bbox.maxY);\n                } else if (i === 1) {\n                  bbox.addPoint(bbox.maxX, f(t1));\n                }\n              }\n              var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n              if (0 < t2 && t2 < 1) {\n                if (i === 0) {\n                  bbox.addPoint(f(t2), bbox.maxY);\n                } else if (i === 1) {\n                  bbox.addPoint(bbox.maxX, f(t2));\n                }\n              }\n            }\n            cx = p3x;\n            cy = p3y;\n            break;\n        }\n      }\n      return this._bbox = Object.freeze(bbox);\n    }\n  }]);\n  return Path;\n}();\nvar _loop = function _loop(command) {\n  Path.prototype[command] = function () {\n    this._bbox = this._cbox = null;\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    this.commands.push({\n      command: command,\n      args: args\n    });\n    return this;\n  };\n};\nfor (var _i23 = 0, _arr = ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath']; _i23 < _arr.length; _i23++) {\n  var command = _arr[_i23];\n  _loop(command);\n}\nvar StandardNames = ['.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth', 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior', 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla', 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'];\nvar _class$3;\n/**\n * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and\n * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context.\n *\n * You do not create glyph objects directly. They are created by various methods on the font object.\n * There are several subclasses of the base Glyph class internally that may be returned depending\n * on the font format, but they all inherit from this class.\n */\n\nvar Glyph = (_class$3 = /*#__PURE__*/function () {\n  function Glyph(id, codePoints, font) {\n    /**\n     * The glyph id in the font\n     * @type {number}\n     */\n    this.id = id;\n    /**\n     * An array of unicode code points that are represented by this glyph.\n     * There can be multiple code points in the case of ligatures and other glyphs\n     * that represent multiple visual characters.\n     * @type {number[]}\n     */\n\n    this.codePoints = codePoints;\n    this._font = font; // TODO: get this info from GDEF if available\n\n    this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\n    this.isLigature = this.codePoints.length > 1;\n  }\n  var _proto32 = Glyph.prototype;\n  _proto32._getPath = function _getPath() {\n    return new Path();\n  };\n  _proto32._getCBox = function _getCBox() {\n    return this.path.cbox;\n  };\n  _proto32._getBBox = function _getBBox() {\n    return this.path.bbox;\n  };\n  _proto32._getTableMetrics = function _getTableMetrics(table) {\n    if (this.id < table.metrics.length) {\n      return table.metrics.get(this.id);\n    }\n    var metric = table.metrics.get(table.metrics.length - 1);\n    var res = {\n      advance: metric ? metric.advance : 0,\n      bearing: table.bearings.get(this.id - table.metrics.length) || 0\n    };\n    return res;\n  };\n  _proto32._getMetrics = function _getMetrics(cbox) {\n    if (this._metrics) {\n      return this._metrics;\n    }\n    var _this$_getTableMetric = this._getTableMetrics(this._font.hmtx),\n      advanceWidth = _this$_getTableMetric.advance,\n      leftBearing = _this$_getTableMetric.bearing; // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea\n\n    if (this._font.vmtx) {\n      var _this$_getTableMetric2 = this._getTableMetrics(this._font.vmtx),\n        advanceHeight = _this$_getTableMetric2.advance,\n        topBearing = _this$_getTableMetric2.bearing;\n    } else {\n      var os2;\n      if (typeof cbox === 'undefined' || cbox === null) {\n        cbox = this.cbox;\n      }\n      if ((os2 = this._font['OS/2']) && os2.version > 0) {\n        var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender);\n        var topBearing = os2.typoAscender - cbox.maxY;\n      } else {\n        var hhea = this._font.hhea;\n        var advanceHeight = Math.abs(hhea.ascent - hhea.descent);\n        var topBearing = hhea.ascent - cbox.maxY;\n      }\n    }\n    if (this._font._variationProcessor && this._font.HVAR) {\n      advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR);\n    }\n    return this._metrics = {\n      advanceWidth: advanceWidth,\n      advanceHeight: advanceHeight,\n      leftBearing: leftBearing,\n      topBearing: topBearing\n    };\n  }\n  /**\n   * The glyph’s control box.\n   * This is often the same as the bounding box, but is faster to compute.\n   * Because of the way bezier curves are defined, some of the control points\n   * can be outside of the bounding box. Where `bbox` takes this into account,\n   * `cbox` does not. Thus, cbox is less accurate, but faster to compute.\n   * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2)\n   * for a more detailed description.\n   *\n   * @type {BBox}\n   */;\n  /**\n   * Returns a path scaled to the given font size.\n   * @param {number} size\n   * @return {Path}\n   */\n  _proto32.getScaledPath = function getScaledPath(size) {\n    var scale = 1 / this._font.unitsPerEm * size;\n    return this.path.scale(scale);\n  }\n  /**\n   * The glyph's advance width.\n   * @type {number}\n   */;\n  _proto32._getName = function _getName() {\n    var post = this._font.post;\n    if (!post) {\n      return null;\n    }\n    switch (post.version) {\n      case 1:\n        return StandardNames[this.id];\n      case 2:\n        var id = post.glyphNameIndex[this.id];\n        if (id < StandardNames.length) {\n          return StandardNames[id];\n        }\n        return post.names[id - StandardNames.length];\n      case 2.5:\n        return StandardNames[this.id + post.offsets[this.id]];\n      case 4:\n        return String.fromCharCode(post.map[this.id]);\n    }\n  }\n  /**\n   * The glyph's name\n   * @type {string}\n   */;\n  /**\n   * Renders the glyph to the given graphics context, at the specified font size.\n   * @param {CanvasRenderingContext2d} ctx\n   * @param {number} size\n   */\n  _proto32.render = function render(ctx, size) {\n    ctx.save();\n    var scale = 1 / this._font.head.unitsPerEm * size;\n    ctx.scale(scale, scale);\n    var fn = this.path.toFunction();\n    fn(ctx);\n    ctx.fill();\n    ctx.restore();\n  };\n  _createClass(Glyph, [{\n    key: \"cbox\",\n    get: function get() {\n      return this._getCBox();\n    }\n    /**\n     * The glyph’s bounding box, i.e. the rectangle that encloses the\n     * glyph outline as tightly as possible.\n     * @type {BBox}\n     */\n  }, {\n    key: \"bbox\",\n    get: function get() {\n      return this._getBBox();\n    }\n    /**\n     * A vector Path object representing the glyph outline.\n     * @type {Path}\n     */\n  }, {\n    key: \"path\",\n    get: function get() {\n      // Cache the path so we only decode it once\n      // Decoding is actually performed by subclasses\n      return this._getPath();\n    }\n  }, {\n    key: \"advanceWidth\",\n    get: function get() {\n      return this._getMetrics().advanceWidth;\n    }\n    /**\n     * The glyph's advance height.\n     * @type {number}\n     */\n  }, {\n    key: \"advanceHeight\",\n    get: function get() {\n      return this._getMetrics().advanceHeight;\n    }\n  }, {\n    key: \"ligatureCaretPositions\",\n    get: function get() {}\n  }, {\n    key: \"name\",\n    get: function get() {\n      return this._getName();\n    }\n  }]);\n  return Glyph;\n}(), (_applyDecoratedDescriptor(_class$3.prototype, \"cbox\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"cbox\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"bbox\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"bbox\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"path\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"path\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"advanceWidth\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"advanceWidth\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"advanceHeight\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"advanceHeight\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"name\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"name\"), _class$3.prototype)), _class$3);\nvar GlyfHeader = new r.Struct({\n  numberOfContours: r.int16,\n  // if negative, this is a composite glyph\n  xMin: r.int16,\n  yMin: r.int16,\n  xMax: r.int16,\n  yMax: r.int16\n}); // Flags for simple glyphs\n\nvar ON_CURVE = 1 << 0;\nvar X_SHORT_VECTOR = 1 << 1;\nvar Y_SHORT_VECTOR = 1 << 2;\nvar REPEAT = 1 << 3;\nvar SAME_X = 1 << 4;\nvar SAME_Y = 1 << 5; // Flags for composite glyphs\n\nvar ARG_1_AND_2_ARE_WORDS = 1 << 0;\nvar WE_HAVE_A_SCALE = 1 << 3;\nvar MORE_COMPONENTS = 1 << 5;\nvar WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\nvar WE_HAVE_A_TWO_BY_TWO = 1 << 7;\nvar WE_HAVE_INSTRUCTIONS = 1 << 8;\nvar Point = /*#__PURE__*/function () {\n  function Point(onCurve, endContour, x, y) {\n    if (x === void 0) {\n      x = 0;\n    }\n    if (y === void 0) {\n      y = 0;\n    }\n    this.onCurve = onCurve;\n    this.endContour = endContour;\n    this.x = x;\n    this.y = y;\n  }\n  var _proto33 = Point.prototype;\n  _proto33.copy = function copy() {\n    return new Point(this.onCurve, this.endContour, this.x, this.y);\n  };\n  return Point;\n}(); // Represents a component in a composite glyph\nvar Component = function Component(glyphID, dx, dy) {\n  this.glyphID = glyphID;\n  this.dx = dx;\n  this.dy = dy;\n  this.pos = 0;\n  this.scaleX = this.scaleY = 1;\n  this.scale01 = this.scale10 = 0;\n};\n/**\n * Represents a TrueType glyph.\n */\nvar TTFGlyph = /*#__PURE__*/function (_Glyph) {\n  _inheritsLoose(TTFGlyph, _Glyph);\n  function TTFGlyph() {\n    return _Glyph.apply(this, arguments) || this;\n  }\n  var _proto34 = TTFGlyph.prototype;\n  // Parses just the glyph header and returns the bounding box\n  _proto34._getCBox = function _getCBox(internal) {\n    // We need to decode the glyph if variation processing is requested,\n    // so it's easier just to recompute the path's cbox after decoding.\n    if (this._font._variationProcessor && !internal) {\n      return this.path.cbox;\n    }\n    var stream = this._font._getTableStream('glyf');\n    stream.pos += this._font.loca.offsets[this.id];\n    var glyph = GlyfHeader.decode(stream);\n    var cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax);\n    return Object.freeze(cbox);\n  } // Parses a single glyph coordinate\n  ;\n  _proto34._parseGlyphCoord = function _parseGlyphCoord(stream, prev, short, same) {\n    if (short) {\n      var val = stream.readUInt8();\n      if (!same) {\n        val = -val;\n      }\n      val += prev;\n    } else {\n      if (same) {\n        var val = prev;\n      } else {\n        var val = prev + stream.readInt16BE();\n      }\n    }\n    return val;\n  } // Decodes the glyph data into points for simple glyphs,\n  // or components for composite glyphs\n  ;\n  _proto34._decode = function _decode() {\n    var glyfPos = this._font.loca.offsets[this.id];\n    var nextPos = this._font.loca.offsets[this.id + 1]; // Nothing to do if there is no data for this glyph\n\n    if (glyfPos === nextPos) {\n      return null;\n    }\n    var stream = this._font._getTableStream('glyf');\n    stream.pos += glyfPos;\n    var startPos = stream.pos;\n    var glyph = GlyfHeader.decode(stream);\n    if (glyph.numberOfContours > 0) {\n      this._decodeSimple(glyph, stream);\n    } else if (glyph.numberOfContours < 0) {\n      this._decodeComposite(glyph, stream, startPos);\n    }\n    return glyph;\n  };\n  _proto34._decodeSimple = function _decodeSimple(glyph, stream) {\n    // this is a simple glyph\n    glyph.points = [];\n    var endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream);\n    glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream);\n    var flags = [];\n    var numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1;\n    while (flags.length < numCoords) {\n      var flag = stream.readUInt8();\n      flags.push(flag); // check for repeat flag\n\n      if (flag & REPEAT) {\n        var count = stream.readUInt8();\n        for (var j = 0; j < count; j++) {\n          flags.push(flag);\n        }\n      }\n    }\n    for (var i = 0; i < flags.length; i++) {\n      var flag = flags[i];\n      var point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0);\n      glyph.points.push(point);\n    }\n    var px = 0;\n    for (var i = 0; i < flags.length; i++) {\n      var flag = flags[i];\n      glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X);\n    }\n    var py = 0;\n    for (var i = 0; i < flags.length; i++) {\n      var flag = flags[i];\n      glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y);\n    }\n    if (this._font._variationProcessor) {\n      var points = glyph.points.slice();\n      points.push.apply(points, this._getPhantomPoints(glyph));\n      this._font._variationProcessor.transformPoints(this.id, points);\n      glyph.phantomPoints = points.slice(-4);\n    }\n    return;\n  };\n  _proto34._decodeComposite = function _decodeComposite(glyph, stream, offset) {\n    if (offset === void 0) {\n      offset = 0;\n    }\n    // this is a composite glyph\n    glyph.components = [];\n    var haveInstructions = false;\n    var flags = MORE_COMPONENTS;\n    while (flags & MORE_COMPONENTS) {\n      flags = stream.readUInt16BE();\n      var gPos = stream.pos - offset;\n      var glyphID = stream.readUInt16BE();\n      if (!haveInstructions) {\n        haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0;\n      }\n      if (flags & ARG_1_AND_2_ARE_WORDS) {\n        var dx = stream.readInt16BE();\n        var dy = stream.readInt16BE();\n      } else {\n        var dx = stream.readInt8();\n        var dy = stream.readInt8();\n      }\n      var component = new Component(glyphID, dx, dy);\n      component.pos = gPos;\n      if (flags & WE_HAVE_A_SCALE) {\n        // fixed number with 14 bits of fraction\n        component.scaleX = component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n      } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n        component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n        component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n      } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\n        component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n        component.scale01 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n        component.scale10 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n        component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n      }\n      glyph.components.push(component);\n    }\n    if (this._font._variationProcessor) {\n      var points = [];\n      for (var j = 0; j < glyph.components.length; j++) {\n        var component = glyph.components[j];\n        points.push(new Point(true, true, component.dx, component.dy));\n      }\n      points.push.apply(points, this._getPhantomPoints(glyph));\n      this._font._variationProcessor.transformPoints(this.id, points);\n      glyph.phantomPoints = points.splice(-4, 4);\n      for (var i = 0; i < points.length; i++) {\n        var point = points[i];\n        glyph.components[i].dx = point.x;\n        glyph.components[i].dy = point.y;\n      }\n    }\n    return haveInstructions;\n  };\n  _proto34._getPhantomPoints = function _getPhantomPoints(glyph) {\n    var cbox = this._getCBox(true);\n    if (this._metrics == null) {\n      this._metrics = Glyph.prototype._getMetrics.call(this, cbox);\n    }\n    var _this$_metrics = this._metrics,\n      advanceWidth = _this$_metrics.advanceWidth,\n      advanceHeight = _this$_metrics.advanceHeight,\n      leftBearing = _this$_metrics.leftBearing,\n      topBearing = _this$_metrics.topBearing;\n    return [new Point(false, true, glyph.xMin - leftBearing, 0), new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0), new Point(false, true, 0, glyph.yMax + topBearing), new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight)];\n  } // Decodes font data, resolves composite glyphs, and returns an array of contours\n  ;\n  _proto34._getContours = function _getContours() {\n    var glyph = this._decode();\n    if (!glyph) {\n      return [];\n    }\n    var points = [];\n    if (glyph.numberOfContours < 0) {\n      // resolve composite glyphs\n      for (var _iterator70 = _createForOfIteratorHelperLoose(glyph.components), _step70; !(_step70 = _iterator70()).done;) {\n        var component = _step70.value;\n        var _contours = this._font.getGlyph(component.glyphID)._getContours();\n        for (var i = 0; i < _contours.length; i++) {\n          var contour = _contours[i];\n          for (var j = 0; j < contour.length; j++) {\n            var _point = contour[j];\n            var x = _point.x * component.scaleX + _point.y * component.scale01 + component.dx;\n            var y = _point.y * component.scaleY + _point.x * component.scale10 + component.dy;\n            points.push(new Point(_point.onCurve, _point.endContour, x, y));\n          }\n        }\n      }\n    } else {\n      points = glyph.points || [];\n    } // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table\n\n    if (glyph.phantomPoints && !this._font.directory.tables.HVAR) {\n      this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x;\n      this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y;\n      this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x;\n      this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax;\n    }\n    var contours = [];\n    var cur = [];\n    for (var k = 0; k < points.length; k++) {\n      var point = points[k];\n      cur.push(point);\n      if (point.endContour) {\n        contours.push(cur);\n        cur = [];\n      }\n    }\n    return contours;\n  };\n  _proto34._getMetrics = function _getMetrics() {\n    if (this._metrics) {\n      return this._metrics;\n    }\n    var cbox = this._getCBox(true);\n    _Glyph.prototype._getMetrics.call(this, cbox);\n    if (this._font._variationProcessor && !this._font.HVAR) {\n      // No HVAR table, decode the glyph. This triggers recomputation of metrics.\n      this.path;\n    }\n    return this._metrics;\n  } // Converts contours to a Path object that can be rendered\n  ;\n  _proto34._getPath = function _getPath() {\n    var contours = this._getContours();\n    var path = new Path();\n    for (var i = 0; i < contours.length; i++) {\n      var contour = contours[i];\n      var firstPt = contour[0];\n      var lastPt = contour[contour.length - 1];\n      var start = 0;\n      if (firstPt.onCurve) {\n        // The first point will be consumed by the moveTo command, so skip in the loop\n        var curvePt = null;\n        start = 1;\n      } else {\n        if (lastPt.onCurve) {\n          // Start at the last point if the first point is off curve and the last point is on curve\n          firstPt = lastPt;\n        } else {\n          // Start at the middle if both the first and last points are off curve\n          firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2);\n        }\n        var curvePt = firstPt;\n      }\n      path.moveTo(firstPt.x, firstPt.y);\n      for (var j = start; j < contour.length; j++) {\n        var pt = contour[j];\n        var prevPt = j === 0 ? firstPt : contour[j - 1];\n        if (prevPt.onCurve && pt.onCurve) {\n          path.lineTo(pt.x, pt.y);\n        } else if (prevPt.onCurve && !pt.onCurve) {\n          var curvePt = pt;\n        } else if (!prevPt.onCurve && !pt.onCurve) {\n          var midX = (prevPt.x + pt.x) / 2;\n          var midY = (prevPt.y + pt.y) / 2;\n          path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY);\n          var curvePt = pt;\n        } else if (!prevPt.onCurve && pt.onCurve) {\n          path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y);\n          var curvePt = null;\n        } else {\n          throw new Error(\"Unknown TTF path state\");\n        }\n      } // Connect the first and last points\n\n      if (curvePt) {\n        path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y);\n      }\n      path.closePath();\n    }\n    return path;\n  };\n  return TTFGlyph;\n}(Glyph);\n/**\n * Represents an OpenType PostScript glyph, in the Compact Font Format.\n */\nvar CFFGlyph = /*#__PURE__*/function (_Glyph2) {\n  _inheritsLoose(CFFGlyph, _Glyph2);\n  function CFFGlyph() {\n    return _Glyph2.apply(this, arguments) || this;\n  }\n  var _proto35 = CFFGlyph.prototype;\n  _proto35._getName = function _getName() {\n    if (this._font.CFF2) {\n      return _Glyph2.prototype._getName.call(this);\n    }\n    return this._font['CFF '].getGlyphName(this.id);\n  };\n  _proto35.bias = function bias(s) {\n    if (s.length < 1240) {\n      return 107;\n    } else if (s.length < 33900) {\n      return 1131;\n    } else {\n      return 32768;\n    }\n  };\n  _proto35._getPath = function _getPath() {\n    var cff = this._font.CFF2 || this._font['CFF '];\n    var stream = cff.stream;\n    var str = cff.topDict.CharStrings[this.id];\n    var end = str.offset + str.length;\n    stream.pos = str.offset;\n    var path = new Path();\n    var stack = [];\n    var trans = [];\n    var width = null;\n    var nStems = 0;\n    var x = 0,\n      y = 0;\n    var usedGsubrs;\n    var usedSubrs;\n    var open = false;\n    this._usedGsubrs = usedGsubrs = {};\n    this._usedSubrs = usedSubrs = {};\n    var gsubrs = cff.globalSubrIndex || [];\n    var gsubrsBias = this.bias(gsubrs);\n    var privateDict = cff.privateDictForGlyph(this.id) || {};\n    var subrs = privateDict.Subrs || [];\n    var subrsBias = this.bias(subrs);\n    var vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore;\n    var vsindex = privateDict.vsindex;\n    var variationProcessor = this._font._variationProcessor;\n    function checkWidth() {\n      if (width == null) {\n        width = stack.shift() + privateDict.nominalWidthX;\n      }\n    }\n    function parseStems() {\n      if (stack.length % 2 !== 0) {\n        checkWidth();\n      }\n      nStems += stack.length >> 1;\n      return stack.length = 0;\n    }\n    function moveTo(x, y) {\n      if (open) {\n        path.closePath();\n      }\n      path.moveTo(x, y);\n      open = true;\n    }\n    var parse = function parse() {\n      while (stream.pos < end) {\n        var op = stream.readUInt8();\n        if (op < 32) {\n          switch (op) {\n            case 1: // hstem\n\n            case 3: // vstem\n\n            case 18: // hstemhm\n\n            case 23:\n              // vstemhm\n              parseStems();\n              break;\n            case 4:\n              // vmoveto\n              if (stack.length > 1) {\n                checkWidth();\n              }\n              y += stack.shift();\n              moveTo(x, y);\n              break;\n            case 5:\n              // rlineto\n              while (stack.length >= 2) {\n                x += stack.shift();\n                y += stack.shift();\n                path.lineTo(x, y);\n              }\n              break;\n            case 6: // hlineto\n\n            case 7:\n              // vlineto\n              var phase = op === 6;\n              while (stack.length >= 1) {\n                if (phase) {\n                  x += stack.shift();\n                } else {\n                  y += stack.shift();\n                }\n                path.lineTo(x, y);\n                phase = !phase;\n              }\n              break;\n            case 8:\n              // rrcurveto\n              while (stack.length > 0) {\n                var c1x = x + stack.shift();\n                var c1y = y + stack.shift();\n                var c2x = c1x + stack.shift();\n                var c2y = c1y + stack.shift();\n                x = c2x + stack.shift();\n                y = c2y + stack.shift();\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              break;\n            case 10:\n              // callsubr\n              var index = stack.pop() + subrsBias;\n              var subr = subrs[index];\n              if (subr) {\n                usedSubrs[index] = true;\n                var p = stream.pos;\n                var e = end;\n                stream.pos = subr.offset;\n                end = subr.offset + subr.length;\n                parse();\n                stream.pos = p;\n                end = e;\n              }\n              break;\n            case 11:\n              // return\n              if (cff.version >= 2) {\n                break;\n              }\n              return;\n            case 14:\n              // endchar\n              if (cff.version >= 2) {\n                break;\n              }\n              if (stack.length > 0) {\n                checkWidth();\n              }\n              if (open) {\n                path.closePath();\n                open = false;\n              }\n              break;\n            case 15:\n              {\n                // vsindex\n                if (cff.version < 2) {\n                  throw new Error('vsindex operator not supported in CFF v1');\n                }\n                vsindex = stack.pop();\n                break;\n              }\n            case 16:\n              {\n                // blend\n                if (cff.version < 2) {\n                  throw new Error('blend operator not supported in CFF v1');\n                }\n                if (!variationProcessor) {\n                  throw new Error('blend operator in non-variation font');\n                }\n                var blendVector = variationProcessor.getBlendVector(vstore, vsindex);\n                var numBlends = stack.pop();\n                var numOperands = numBlends * blendVector.length;\n                var delta = stack.length - numOperands;\n                var base = delta - numBlends;\n                for (var i = 0; i < numBlends; i++) {\n                  var sum = stack[base + i];\n                  for (var j = 0; j < blendVector.length; j++) {\n                    sum += blendVector[j] * stack[delta++];\n                  }\n                  stack[base + i] = sum;\n                }\n                while (numOperands--) {\n                  stack.pop();\n                }\n                break;\n              }\n            case 19: // hintmask\n\n            case 20:\n              // cntrmask\n              parseStems();\n              stream.pos += nStems + 7 >> 3;\n              break;\n            case 21:\n              // rmoveto\n              if (stack.length > 2) {\n                checkWidth();\n              }\n              x += stack.shift();\n              y += stack.shift();\n              moveTo(x, y);\n              break;\n            case 22:\n              // hmoveto\n              if (stack.length > 1) {\n                checkWidth();\n              }\n              x += stack.shift();\n              moveTo(x, y);\n              break;\n            case 24:\n              // rcurveline\n              while (stack.length >= 8) {\n                var c1x = x + stack.shift();\n                var c1y = y + stack.shift();\n                var c2x = c1x + stack.shift();\n                var c2y = c1y + stack.shift();\n                x = c2x + stack.shift();\n                y = c2y + stack.shift();\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              x += stack.shift();\n              y += stack.shift();\n              path.lineTo(x, y);\n              break;\n            case 25:\n              // rlinecurve\n              while (stack.length >= 8) {\n                x += stack.shift();\n                y += stack.shift();\n                path.lineTo(x, y);\n              }\n              var c1x = x + stack.shift();\n              var c1y = y + stack.shift();\n              var c2x = c1x + stack.shift();\n              var c2y = c1y + stack.shift();\n              x = c2x + stack.shift();\n              y = c2y + stack.shift();\n              path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              break;\n            case 26:\n              // vvcurveto\n              if (stack.length % 2) {\n                x += stack.shift();\n              }\n              while (stack.length >= 4) {\n                c1x = x;\n                c1y = y + stack.shift();\n                c2x = c1x + stack.shift();\n                c2y = c1y + stack.shift();\n                x = c2x;\n                y = c2y + stack.shift();\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              break;\n            case 27:\n              // hhcurveto\n              if (stack.length % 2) {\n                y += stack.shift();\n              }\n              while (stack.length >= 4) {\n                c1x = x + stack.shift();\n                c1y = y;\n                c2x = c1x + stack.shift();\n                c2y = c1y + stack.shift();\n                x = c2x + stack.shift();\n                y = c2y;\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              break;\n            case 28:\n              // shortint\n              stack.push(stream.readInt16BE());\n              break;\n            case 29:\n              // callgsubr\n              index = stack.pop() + gsubrsBias;\n              subr = gsubrs[index];\n              if (subr) {\n                usedGsubrs[index] = true;\n                var p = stream.pos;\n                var e = end;\n                stream.pos = subr.offset;\n                end = subr.offset + subr.length;\n                parse();\n                stream.pos = p;\n                end = e;\n              }\n              break;\n            case 30: // vhcurveto\n\n            case 31:\n              // hvcurveto\n              phase = op === 31;\n              while (stack.length >= 4) {\n                if (phase) {\n                  c1x = x + stack.shift();\n                  c1y = y;\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  y = c2y + stack.shift();\n                  x = c2x + (stack.length === 1 ? stack.shift() : 0);\n                } else {\n                  c1x = x;\n                  c1y = y + stack.shift();\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  x = c2x + stack.shift();\n                  y = c2y + (stack.length === 1 ? stack.shift() : 0);\n                }\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n                phase = !phase;\n              }\n              break;\n            case 12:\n              op = stream.readUInt8();\n              switch (op) {\n                case 3:\n                  // and\n                  var a = stack.pop();\n                  var b = stack.pop();\n                  stack.push(a && b ? 1 : 0);\n                  break;\n                case 4:\n                  // or\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a || b ? 1 : 0);\n                  break;\n                case 5:\n                  // not\n                  a = stack.pop();\n                  stack.push(a ? 0 : 1);\n                  break;\n                case 9:\n                  // abs\n                  a = stack.pop();\n                  stack.push(Math.abs(a));\n                  break;\n                case 10:\n                  // add\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a + b);\n                  break;\n                case 11:\n                  // sub\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a - b);\n                  break;\n                case 12:\n                  // div\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a / b);\n                  break;\n                case 14:\n                  // neg\n                  a = stack.pop();\n                  stack.push(-a);\n                  break;\n                case 15:\n                  // eq\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a === b ? 1 : 0);\n                  break;\n                case 18:\n                  // drop\n                  stack.pop();\n                  break;\n                case 20:\n                  // put\n                  var val = stack.pop();\n                  var idx = stack.pop();\n                  trans[idx] = val;\n                  break;\n                case 21:\n                  // get\n                  idx = stack.pop();\n                  stack.push(trans[idx] || 0);\n                  break;\n                case 22:\n                  // ifelse\n                  var s1 = stack.pop();\n                  var s2 = stack.pop();\n                  var v1 = stack.pop();\n                  var v2 = stack.pop();\n                  stack.push(v1 <= v2 ? s1 : s2);\n                  break;\n                case 23:\n                  // random\n                  stack.push(Math.random());\n                  break;\n                case 24:\n                  // mul\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a * b);\n                  break;\n                case 26:\n                  // sqrt\n                  a = stack.pop();\n                  stack.push(Math.sqrt(a));\n                  break;\n                case 27:\n                  // dup\n                  a = stack.pop();\n                  stack.push(a, a);\n                  break;\n                case 28:\n                  // exch\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(b, a);\n                  break;\n                case 29:\n                  // index\n                  idx = stack.pop();\n                  if (idx < 0) {\n                    idx = 0;\n                  } else if (idx > stack.length - 1) {\n                    idx = stack.length - 1;\n                  }\n                  stack.push(stack[idx]);\n                  break;\n                case 30:\n                  // roll\n                  var n = stack.pop();\n                  var _j = stack.pop();\n                  if (_j >= 0) {\n                    while (_j > 0) {\n                      var t = stack[n - 1];\n                      for (var _i = n - 2; _i >= 0; _i--) {\n                        stack[_i + 1] = stack[_i];\n                      }\n                      stack[0] = t;\n                      _j--;\n                    }\n                  } else {\n                    while (_j < 0) {\n                      var t = stack[0];\n                      for (var _i2 = 0; _i2 <= n; _i2++) {\n                        stack[_i2] = stack[_i2 + 1];\n                      }\n                      stack[n - 1] = t;\n                      _j++;\n                    }\n                  }\n                  break;\n                case 34:\n                  // hflex\n                  c1x = x + stack.shift();\n                  c1y = y;\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  var c3x = c2x + stack.shift();\n                  var c3y = c2y;\n                  var c4x = c3x + stack.shift();\n                  var c4y = c3y;\n                  var c5x = c4x + stack.shift();\n                  var c5y = c4y;\n                  var c6x = c5x + stack.shift();\n                  var c6y = c5y;\n                  x = c6x;\n                  y = c6y;\n                  path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n                  path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n                  break;\n                case 35:\n                  // flex\n                  var pts = [];\n                  for (var _i3 = 0; _i3 <= 5; _i3++) {\n                    x += stack.shift();\n                    y += stack.shift();\n                    pts.push(x, y);\n                  }\n                  path.bezierCurveTo.apply(path, pts.slice(0, 6));\n                  path.bezierCurveTo.apply(path, pts.slice(6));\n                  stack.shift(); // fd\n\n                  break;\n                case 36:\n                  // hflex1\n                  c1x = x + stack.shift();\n                  c1y = y + stack.shift();\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  c3x = c2x + stack.shift();\n                  c3y = c2y;\n                  c4x = c3x + stack.shift();\n                  c4y = c3y;\n                  c5x = c4x + stack.shift();\n                  c5y = c4y + stack.shift();\n                  c6x = c5x + stack.shift();\n                  c6y = c5y;\n                  x = c6x;\n                  y = c6y;\n                  path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n                  path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n                  break;\n                case 37:\n                  // flex1\n                  var startx = x;\n                  var starty = y;\n                  pts = [];\n                  for (var _i4 = 0; _i4 <= 4; _i4++) {\n                    x += stack.shift();\n                    y += stack.shift();\n                    pts.push(x, y);\n                  }\n                  if (Math.abs(x - startx) > Math.abs(y - starty)) {\n                    // horizontal\n                    x += stack.shift();\n                    y = starty;\n                  } else {\n                    x = startx;\n                    y += stack.shift();\n                  }\n                  pts.push(x, y);\n                  path.bezierCurveTo.apply(path, pts.slice(0, 6));\n                  path.bezierCurveTo.apply(path, pts.slice(6));\n                  break;\n                default:\n                  throw new Error(\"Unknown op: 12 \".concat(op));\n              }\n              break;\n            default:\n              throw new Error(\"Unknown op: \".concat(op));\n          }\n        } else if (op < 247) {\n          stack.push(op - 139);\n        } else if (op < 251) {\n          var b1 = stream.readUInt8();\n          stack.push((op - 247) * 256 + b1 + 108);\n        } else if (op < 255) {\n          var b1 = stream.readUInt8();\n          stack.push(-(op - 251) * 256 - b1 - 108);\n        } else {\n          stack.push(stream.readInt32BE() / 65536);\n        }\n      }\n    };\n    parse();\n    if (open) {\n      path.closePath();\n    }\n    return path;\n  };\n  return CFFGlyph;\n}(Glyph);\nvar SBIXImage = new r.Struct({\n  originX: r.uint16,\n  originY: r.uint16,\n  type: new r.String(4),\n  data: new r.Buffer(function (t) {\n    return t.parent.buflen - t._currentOffset;\n  })\n});\n/**\n * Represents a color (e.g. emoji) glyph in Apple's SBIX format.\n */\nvar SBIXGlyph = /*#__PURE__*/function (_TTFGlyph) {\n  _inheritsLoose(SBIXGlyph, _TTFGlyph);\n  function SBIXGlyph() {\n    return _TTFGlyph.apply(this, arguments) || this;\n  }\n  var _proto36 = SBIXGlyph.prototype;\n  /**\n   * Returns an object representing a glyph image at the given point size.\n   * The object has a data property with a Buffer containing the actual image data,\n   * along with the image type, and origin.\n   *\n   * @param {number} size\n   * @return {object}\n   */\n  _proto36.getImageForSize = function getImageForSize(size) {\n    for (var i = 0; i < this._font.sbix.imageTables.length; i++) {\n      var table = this._font.sbix.imageTables[i];\n      if (table.ppem >= size) {\n        break;\n      }\n    }\n    var offsets = table.imageOffsets;\n    var start = offsets[this.id];\n    var end = offsets[this.id + 1];\n    if (start === end) {\n      return null;\n    }\n    this._font.stream.pos = start;\n    return SBIXImage.decode(this._font.stream, {\n      buflen: end - start\n    });\n  };\n  _proto36.render = function render(ctx, size) {\n    var img = this.getImageForSize(size);\n    if (img != null) {\n      var scale = size / this._font.unitsPerEm;\n      ctx.image(img.data, {\n        height: size,\n        x: img.originX,\n        y: (this.bbox.minY - img.originY) * scale\n      });\n    }\n    if (this._font.sbix.flags.renderOutlines) {\n      _TTFGlyph.prototype.render.call(this, ctx, size);\n    }\n  };\n  return SBIXGlyph;\n}(TTFGlyph);\nvar COLRLayer = function COLRLayer(glyph, color) {\n  this.glyph = glyph;\n  this.color = color;\n};\n/**\n * Represents a color (e.g. emoji) glyph in Microsoft's COLR format.\n * Each glyph in this format contain a list of colored layers, each\n * of which  is another vector glyph.\n */\nvar COLRGlyph = /*#__PURE__*/function (_Glyph3) {\n  _inheritsLoose(COLRGlyph, _Glyph3);\n  function COLRGlyph() {\n    return _Glyph3.apply(this, arguments) || this;\n  }\n  var _proto37 = COLRGlyph.prototype;\n  _proto37._getBBox = function _getBBox() {\n    var bbox = new BBox();\n    for (var i = 0; i < this.layers.length; i++) {\n      var layer = this.layers[i];\n      var b = layer.glyph.bbox;\n      bbox.addPoint(b.minX, b.minY);\n      bbox.addPoint(b.maxX, b.maxY);\n    }\n    return bbox;\n  }\n  /**\n   * Returns an array of objects containing the glyph and color for\n   * each layer in the composite color glyph.\n   * @type {object[]}\n   */;\n  _proto37.render = function render(ctx, size) {\n    for (var _iterator71 = _createForOfIteratorHelperLoose(this.layers), _step71; !(_step71 = _iterator71()).done;) {\n      var _step71$value = _step71.value,\n        glyph = _step71$value.glyph,\n        color = _step71$value.color;\n      ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100);\n      glyph.render(ctx, size);\n    }\n    return;\n  };\n  _createClass(COLRGlyph, [{\n    key: \"layers\",\n    get: function get() {\n      var cpal = this._font.CPAL;\n      var colr = this._font.COLR;\n      var low = 0;\n      var high = colr.baseGlyphRecord.length - 1;\n      while (low <= high) {\n        var mid = low + high >> 1;\n        var rec = colr.baseGlyphRecord[mid];\n        if (this.id < rec.gid) {\n          high = mid - 1;\n        } else if (this.id > rec.gid) {\n          low = mid + 1;\n        } else {\n          var baseLayer = rec;\n          break;\n        }\n      } // if base glyph not found in COLR table,\n      // default to normal glyph from glyf or CFF\n\n      if (baseLayer == null) {\n        var g = this._font._getBaseGlyph(this.id);\n        var color = {\n          red: 0,\n          green: 0,\n          blue: 0,\n          alpha: 255\n        };\n        return [new COLRLayer(g, color)];\n      } // otherwise, return an array of all the layers\n\n      var layers = [];\n      for (var i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) {\n        var rec = colr.layerRecords[i];\n        var color = cpal.colorRecords[rec.paletteIndex];\n        var g = this._font._getBaseGlyph(rec.gid);\n        layers.push(new COLRLayer(g, color));\n      }\n      return layers;\n    }\n  }]);\n  return COLRGlyph;\n}(Glyph);\nvar TUPLES_SHARE_POINT_NUMBERS = 0x8000;\nvar TUPLE_COUNT_MASK = 0x0fff;\nvar EMBEDDED_TUPLE_COORD = 0x8000;\nvar INTERMEDIATE_TUPLE = 0x4000;\nvar PRIVATE_POINT_NUMBERS = 0x2000;\nvar TUPLE_INDEX_MASK = 0x0fff;\nvar POINTS_ARE_WORDS = 0x80;\nvar POINT_RUN_COUNT_MASK = 0x7f;\nvar DELTAS_ARE_ZERO = 0x80;\nvar DELTAS_ARE_WORDS = 0x40;\nvar DELTA_RUN_COUNT_MASK = 0x3f;\n/**\n * This class is transforms TrueType glyphs according to the data from\n * the Apple Advanced Typography variation tables (fvar, gvar, and avar).\n * These tables allow infinite adjustments to glyph weight, width, slant,\n * and optical size without the designer needing to specify every exact style.\n *\n * Apple's documentation for these tables is not great, so thanks to the\n * Freetype project for figuring much of this out.\n *\n * @private\n */\nvar GlyphVariationProcessor = /*#__PURE__*/function () {\n  function GlyphVariationProcessor(font, coords) {\n    this.font = font;\n    this.normalizedCoords = this.normalizeCoords(coords);\n    this.blendVectors = new Map();\n  }\n  var _proto38 = GlyphVariationProcessor.prototype;\n  _proto38.normalizeCoords = function normalizeCoords(coords) {\n    // the default mapping is linear along each axis, in two segments:\n    // from the minValue to defaultValue, and from defaultValue to maxValue.\n    var normalized = [];\n    for (var i = 0; i < this.font.fvar.axis.length; i++) {\n      var axis = this.font.fvar.axis[i];\n      if (coords[i] < axis.defaultValue) {\n        normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\n      } else {\n        normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\n      }\n    } // if there is an avar table, the normalized value is calculated\n    // by interpolating between the two nearest mapped values.\n\n    if (this.font.avar) {\n      for (var i = 0; i < this.font.avar.segment.length; i++) {\n        var segment = this.font.avar.segment[i];\n        for (var j = 0; j < segment.correspondence.length; j++) {\n          var pair = segment.correspondence[j];\n          if (j >= 1 && normalized[i] < pair.fromCoord) {\n            var prev = segment.correspondence[j - 1];\n            normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) / (pair.fromCoord - prev.fromCoord + Number.EPSILON) + prev.toCoord;\n            break;\n          }\n        }\n      }\n    }\n    return normalized;\n  };\n  _proto38.transformPoints = function transformPoints(gid, glyphPoints) {\n    if (!this.font.fvar || !this.font.gvar) {\n      return;\n    }\n    var gvar = this.font.gvar;\n    if (gid >= gvar.glyphCount) {\n      return;\n    }\n    var offset = gvar.offsets[gid];\n    if (offset === gvar.offsets[gid + 1]) {\n      return;\n    } // Read the gvar data for this glyph\n\n    var stream = this.font.stream;\n    stream.pos = offset;\n    if (stream.pos >= stream.length) {\n      return;\n    }\n    var tupleCount = stream.readUInt16BE();\n    var offsetToData = offset + stream.readUInt16BE();\n    if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) {\n      var here = stream.pos;\n      stream.pos = offsetToData;\n      var sharedPoints = this.decodePoints();\n      offsetToData = stream.pos;\n      stream.pos = here;\n    }\n    var origPoints = glyphPoints.map(function (pt) {\n      return pt.copy();\n    });\n    tupleCount &= TUPLE_COUNT_MASK;\n    for (var i = 0; i < tupleCount; i++) {\n      var tupleDataSize = stream.readUInt16BE();\n      var tupleIndex = stream.readUInt16BE();\n      if (tupleIndex & EMBEDDED_TUPLE_COORD) {\n        var tupleCoords = [];\n        for (var a = 0; a < gvar.axisCount; a++) {\n          tupleCoords.push(stream.readInt16BE() / 16384);\n        }\n      } else {\n        if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) {\n          throw new Error('Invalid gvar table');\n        }\n        var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK];\n      }\n      if (tupleIndex & INTERMEDIATE_TUPLE) {\n        var startCoords = [];\n        for (var _a = 0; _a < gvar.axisCount; _a++) {\n          startCoords.push(stream.readInt16BE() / 16384);\n        }\n        var endCoords = [];\n        for (var _a2 = 0; _a2 < gvar.axisCount; _a2++) {\n          endCoords.push(stream.readInt16BE() / 16384);\n        }\n      } // Get the factor at which to apply this tuple\n\n      var factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords);\n      if (factor === 0) {\n        offsetToData += tupleDataSize;\n        continue;\n      }\n      var here = stream.pos;\n      stream.pos = offsetToData;\n      if (tupleIndex & PRIVATE_POINT_NUMBERS) {\n        var points = this.decodePoints();\n      } else {\n        var points = sharedPoints;\n      } // points.length = 0 means there are deltas for all points\n\n      var nPoints = points.length === 0 ? glyphPoints.length : points.length;\n      var xDeltas = this.decodeDeltas(nPoints);\n      var yDeltas = this.decodeDeltas(nPoints);\n      if (points.length === 0) {\n        // all points\n        for (var _i = 0; _i < glyphPoints.length; _i++) {\n          var point = glyphPoints[_i];\n          point.x += Math.round(xDeltas[_i] * factor);\n          point.y += Math.round(yDeltas[_i] * factor);\n        }\n      } else {\n        var outPoints = origPoints.map(function (pt) {\n          return pt.copy();\n        });\n        var hasDelta = glyphPoints.map(function () {\n          return false;\n        });\n        for (var _i2 = 0; _i2 < points.length; _i2++) {\n          var idx = points[_i2];\n          if (idx < glyphPoints.length) {\n            var _point = outPoints[idx];\n            hasDelta[idx] = true;\n            _point.x += Math.round(xDeltas[_i2] * factor);\n            _point.y += Math.round(yDeltas[_i2] * factor);\n          }\n        }\n        this.interpolateMissingDeltas(outPoints, origPoints, hasDelta);\n        for (var _i3 = 0; _i3 < glyphPoints.length; _i3++) {\n          var deltaX = outPoints[_i3].x - origPoints[_i3].x;\n          var deltaY = outPoints[_i3].y - origPoints[_i3].y;\n          glyphPoints[_i3].x += deltaX;\n          glyphPoints[_i3].y += deltaY;\n        }\n      }\n      offsetToData += tupleDataSize;\n      stream.pos = here;\n    }\n  };\n  _proto38.decodePoints = function decodePoints() {\n    var stream = this.font.stream;\n    var count = stream.readUInt8();\n    if (count & POINTS_ARE_WORDS) {\n      count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8();\n    }\n    var points = new Uint16Array(count);\n    var i = 0;\n    var point = 0;\n    while (i < count) {\n      var run = stream.readUInt8();\n      var runCount = (run & POINT_RUN_COUNT_MASK) + 1;\n      var fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8;\n      for (var j = 0; j < runCount && i < count; j++) {\n        point += fn.call(stream);\n        points[i++] = point;\n      }\n    }\n    return points;\n  };\n  _proto38.decodeDeltas = function decodeDeltas(count) {\n    var stream = this.font.stream;\n    var i = 0;\n    var deltas = new Int16Array(count);\n    while (i < count) {\n      var run = stream.readUInt8();\n      var runCount = (run & DELTA_RUN_COUNT_MASK) + 1;\n      if (run & DELTAS_ARE_ZERO) {\n        i += runCount;\n      } else {\n        var fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8;\n        for (var j = 0; j < runCount && i < count; j++) {\n          deltas[i++] = fn.call(stream);\n        }\n      }\n    }\n    return deltas;\n  };\n  _proto38.tupleFactor = function tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) {\n    var normalized = this.normalizedCoords;\n    var gvar = this.font.gvar;\n    var factor = 1;\n    for (var i = 0; i < gvar.axisCount; i++) {\n      if (tupleCoords[i] === 0) {\n        continue;\n      }\n      if (normalized[i] === 0) {\n        return 0;\n      }\n      if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) {\n        if (normalized[i] < Math.min(0, tupleCoords[i]) || normalized[i] > Math.max(0, tupleCoords[i])) {\n          return 0;\n        }\n        factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON);\n      } else {\n        if (normalized[i] < startCoords[i] || normalized[i] > endCoords[i]) {\n          return 0;\n        } else if (normalized[i] < tupleCoords[i]) {\n          factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON);\n        } else {\n          factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON);\n        }\n      }\n    }\n    return factor;\n  } // Interpolates points without delta values.\n  // Needed for the Ø and Q glyphs in Skia.\n  // Algorithm from Freetype.\n  ;\n  _proto38.interpolateMissingDeltas = function interpolateMissingDeltas(points, inPoints, hasDelta) {\n    if (points.length === 0) {\n      return;\n    }\n    var point = 0;\n    while (point < points.length) {\n      var firstPoint = point; // find the end point of the contour\n\n      var endPoint = point;\n      var pt = points[endPoint];\n      while (!pt.endContour) {\n        pt = points[++endPoint];\n      } // find the first point that has a delta\n\n      while (point <= endPoint && !hasDelta[point]) {\n        point++;\n      }\n      if (point > endPoint) {\n        continue;\n      }\n      var firstDelta = point;\n      var curDelta = point;\n      point++;\n      while (point <= endPoint) {\n        // find the next point with a delta, and interpolate intermediate points\n        if (hasDelta[point]) {\n          this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points);\n          curDelta = point;\n        }\n        point++;\n      } // shift contour if we only have a single delta\n\n      if (curDelta === firstDelta) {\n        this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points);\n      } else {\n        // otherwise, handle the remaining points at the end and beginning of the contour\n        this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points);\n        if (firstDelta > 0) {\n          this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points);\n        }\n      }\n      point = endPoint + 1;\n    }\n  };\n  _proto38.deltaInterpolate = function deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) {\n    if (p1 > p2) {\n      return;\n    }\n    var iterable = ['x', 'y'];\n    for (var i = 0; i < iterable.length; i++) {\n      var k = iterable[i];\n      if (inPoints[ref1][k] > inPoints[ref2][k]) {\n        var p = ref1;\n        ref1 = ref2;\n        ref2 = p;\n      }\n      var in1 = inPoints[ref1][k];\n      var in2 = inPoints[ref2][k];\n      var out1 = outPoints[ref1][k];\n      var out2 = outPoints[ref2][k]; // If the reference points have the same coordinate but different\n      // delta, inferred delta is zero.  Otherwise interpolate.\n\n      if (in1 !== in2 || out1 === out2) {\n        var scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\n        for (var _p = p1; _p <= p2; _p++) {\n          var out = inPoints[_p][k];\n          if (out <= in1) {\n            out += out1 - in1;\n          } else if (out >= in2) {\n            out += out2 - in2;\n          } else {\n            out = out1 + (out - in1) * scale;\n          }\n          outPoints[_p][k] = out;\n        }\n      }\n    }\n  };\n  _proto38.deltaShift = function deltaShift(p1, p2, ref, inPoints, outPoints) {\n    var deltaX = outPoints[ref].x - inPoints[ref].x;\n    var deltaY = outPoints[ref].y - inPoints[ref].y;\n    if (deltaX === 0 && deltaY === 0) {\n      return;\n    }\n    for (var p = p1; p <= p2; p++) {\n      if (p !== ref) {\n        outPoints[p].x += deltaX;\n        outPoints[p].y += deltaY;\n      }\n    }\n  };\n  _proto38.getAdvanceAdjustment = function getAdvanceAdjustment(gid, table) {\n    var outerIndex, innerIndex;\n    if (table.advanceWidthMapping) {\n      var idx = gid;\n      if (idx >= table.advanceWidthMapping.mapCount) {\n        idx = table.advanceWidthMapping.mapCount - 1;\n      }\n      var entryFormat = table.advanceWidthMapping.entryFormat;\n      var _table$advanceWidthMa = table.advanceWidthMapping.mapData[idx];\n      outerIndex = _table$advanceWidthMa.outerIndex;\n      innerIndex = _table$advanceWidthMa.innerIndex;\n    } else {\n      outerIndex = 0;\n      innerIndex = gid;\n    }\n    return this.getDelta(table.itemVariationStore, outerIndex, innerIndex);\n  } // See pseudo code from `Font Variations Overview'\n  // in the OpenType specification.\n  ;\n  _proto38.getDelta = function getDelta(itemStore, outerIndex, innerIndex) {\n    if (outerIndex >= itemStore.itemVariationData.length) {\n      return 0;\n    }\n    var varData = itemStore.itemVariationData[outerIndex];\n    if (innerIndex >= varData.deltaSets.length) {\n      return 0;\n    }\n    var deltaSet = varData.deltaSets[innerIndex];\n    var blendVector = this.getBlendVector(itemStore, outerIndex);\n    var netAdjustment = 0;\n    for (var master = 0; master < varData.regionIndexCount; master++) {\n      netAdjustment += deltaSet.deltas[master] * blendVector[master];\n    }\n    return netAdjustment;\n  };\n  _proto38.getBlendVector = function getBlendVector(itemStore, outerIndex) {\n    var varData = itemStore.itemVariationData[outerIndex];\n    if (this.blendVectors.has(varData)) {\n      return this.blendVectors.get(varData);\n    }\n    var normalizedCoords = this.normalizedCoords;\n    var blendVector = []; // outer loop steps through master designs to be blended\n\n    for (var master = 0; master < varData.regionIndexCount; master++) {\n      var scalar = 1;\n      var regionIndex = varData.regionIndexes[master];\n      var axes = itemStore.variationRegionList.variationRegions[regionIndex]; // inner loop steps through axes in this region\n\n      for (var j = 0; j < axes.length; j++) {\n        var axis = axes[j];\n        var axisScalar = void 0; // compute the scalar contribution of this axis\n        // ignore invalid ranges\n\n        if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\n          axisScalar = 1;\n        } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\n          axisScalar = 1; // peak of 0 means ignore this axis\n        } else if (axis.peakCoord === 0) {\n          axisScalar = 1; // ignore this region if coords are out of range\n        } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\n          axisScalar = 0; // calculate a proportional factor\n        } else {\n          if (normalizedCoords[j] === axis.peakCoord) {\n            axisScalar = 1;\n          } else if (normalizedCoords[j] < axis.peakCoord) {\n            axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) / (axis.peakCoord - axis.startCoord + Number.EPSILON);\n          } else {\n            axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON);\n          }\n        } // take product of all the axis scalars\n\n        scalar *= axisScalar;\n      }\n      blendVector[master] = scalar;\n    }\n    this.blendVectors.set(varData, blendVector);\n    return blendVector;\n  };\n  return GlyphVariationProcessor;\n}();\nvar resolved = Promise.resolve();\nvar Subset = /*#__PURE__*/function () {\n  function Subset(font) {\n    this.font = font;\n    this.glyphs = [];\n    this.mapping = {}; // always include the missing glyph\n\n    this.includeGlyph(0);\n  }\n  var _proto39 = Subset.prototype;\n  _proto39.includeGlyph = function includeGlyph(glyph) {\n    if (typeof glyph === 'object') {\n      glyph = glyph.id;\n    }\n    if (this.mapping[glyph] == null) {\n      this.glyphs.push(glyph);\n      this.mapping[glyph] = this.glyphs.length - 1;\n    }\n    return this.mapping[glyph];\n  };\n  _proto39.encodeStream = function encodeStream() {\n    var _this11 = this;\n    var s = new r.EncodeStream();\n    resolved.then(function () {\n      _this11.encode(s);\n      return s.end();\n    });\n    return s;\n  };\n  return Subset;\n}();\nvar ON_CURVE$1 = 1 << 0;\nvar X_SHORT_VECTOR$1 = 1 << 1;\nvar Y_SHORT_VECTOR$1 = 1 << 2;\nvar REPEAT$1 = 1 << 3;\nvar SAME_X$1 = 1 << 4;\nvar SAME_Y$1 = 1 << 5;\nvar Point$1 = /*#__PURE__*/function () {\n  function Point$1() {}\n  Point$1.size = function size(val) {\n    return val >= 0 && val <= 255 ? 1 : 2;\n  };\n  Point$1.encode = function encode(stream, value) {\n    if (value >= 0 && value <= 255) {\n      stream.writeUInt8(value);\n    } else {\n      stream.writeInt16BE(value);\n    }\n  };\n  return Point$1;\n}();\nvar Glyf = new r.Struct({\n  numberOfContours: r.int16,\n  // if negative, this is a composite glyph\n  xMin: r.int16,\n  yMin: r.int16,\n  xMax: r.int16,\n  yMax: r.int16,\n  endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'),\n  instructions: new r.Array(r.uint8, r.uint16),\n  flags: new r.Array(r.uint8, 0),\n  xPoints: new r.Array(Point$1, 0),\n  yPoints: new r.Array(Point$1, 0)\n});\n/**\n * Encodes TrueType glyph outlines\n */\nvar TTFGlyphEncoder = /*#__PURE__*/function () {\n  function TTFGlyphEncoder() {}\n  var _proto40 = TTFGlyphEncoder.prototype;\n  _proto40.encodeSimple = function encodeSimple(path, instructions) {\n    if (instructions === void 0) {\n      instructions = [];\n    }\n    var endPtsOfContours = [];\n    var xPoints = [];\n    var yPoints = [];\n    var flags = [];\n    var same = 0;\n    var lastX = 0,\n      lastY = 0,\n      lastFlag = 0;\n    var pointCount = 0;\n    for (var i = 0; i < path.commands.length; i++) {\n      var c = path.commands[i];\n      for (var j = 0; j < c.args.length; j += 2) {\n        var x = c.args[j];\n        var y = c.args[j + 1];\n        var flag = 0; // If the ending point of a quadratic curve is the midpoint\n        // between the control point and the control point of the next\n        // quadratic curve, we can omit the ending point.\n\n        if (c.command === 'quadraticCurveTo' && j === 2) {\n          var next = path.commands[i + 1];\n          if (next && next.command === 'quadraticCurveTo') {\n            var midX = (lastX + next.args[0]) / 2;\n            var midY = (lastY + next.args[1]) / 2;\n            if (x === midX && y === midY) {\n              continue;\n            }\n          }\n        } // All points except control points are on curve.\n\n        if (!(c.command === 'quadraticCurveTo' && j === 0)) {\n          flag |= ON_CURVE$1;\n        }\n        flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR$1, SAME_X$1);\n        flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR$1, SAME_Y$1);\n        if (flag === lastFlag && same < 255) {\n          flags[flags.length - 1] |= REPEAT$1;\n          same++;\n        } else {\n          if (same > 0) {\n            flags.push(same);\n            same = 0;\n          }\n          flags.push(flag);\n          lastFlag = flag;\n        }\n        lastX = x;\n        lastY = y;\n        pointCount++;\n      }\n      if (c.command === 'closePath') {\n        endPtsOfContours.push(pointCount - 1);\n      }\n    } // Close the path if the last command didn't already\n\n    if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') {\n      endPtsOfContours.push(pointCount - 1);\n    }\n    var bbox = path.bbox;\n    var glyf = {\n      numberOfContours: endPtsOfContours.length,\n      xMin: bbox.minX,\n      yMin: bbox.minY,\n      xMax: bbox.maxX,\n      yMax: bbox.maxY,\n      endPtsOfContours: endPtsOfContours,\n      instructions: instructions,\n      flags: flags,\n      xPoints: xPoints,\n      yPoints: yPoints\n    };\n    var size = Glyf.size(glyf);\n    var tail = 4 - size % 4;\n    var stream = new r.EncodeStream(size + tail);\n    Glyf.encode(stream, glyf); // Align to 4-byte length\n\n    if (tail !== 0) {\n      stream.fill(0, tail);\n    }\n    return stream.buffer;\n  };\n  _proto40._encodePoint = function _encodePoint(value, last, points, flag, shortFlag, sameFlag) {\n    var diff = value - last;\n    if (value === last) {\n      flag |= sameFlag;\n    } else {\n      if (-255 <= diff && diff <= 255) {\n        flag |= shortFlag;\n        if (diff < 0) {\n          diff = -diff;\n        } else {\n          flag |= sameFlag;\n        }\n      }\n      points.push(diff);\n    }\n    return flag;\n  };\n  return TTFGlyphEncoder;\n}();\nvar TTFSubset = /*#__PURE__*/function (_Subset) {\n  _inheritsLoose(TTFSubset, _Subset);\n  function TTFSubset(font) {\n    var _this12;\n    _this12 = _Subset.call(this, font) || this;\n    _this12.glyphEncoder = new TTFGlyphEncoder();\n    return _this12;\n  }\n  var _proto41 = TTFSubset.prototype;\n  _proto41._addGlyph = function _addGlyph(gid) {\n    var glyph = this.font.getGlyph(gid);\n    var glyf = glyph._decode(); // get the offset to the glyph from the loca table\n\n    var curOffset = this.font.loca.offsets[gid];\n    var nextOffset = this.font.loca.offsets[gid + 1];\n    var stream = this.font._getTableStream('glyf');\n    stream.pos += curOffset;\n    var buffer = stream.readBuffer(nextOffset - curOffset); // if it is a compound glyph, include its components\n\n    if (glyf && glyf.numberOfContours < 0) {\n      buffer = Buffer.from(buffer);\n      for (var _iterator72 = _createForOfIteratorHelperLoose(glyf.components), _step72; !(_step72 = _iterator72()).done;) {\n        var component = _step72.value;\n        gid = this.includeGlyph(component.glyphID);\n        buffer.writeUInt16BE(gid, component.pos);\n      }\n    } else if (glyf && this.font._variationProcessor) {\n      // If this is a TrueType variation glyph, re-encode the path\n      buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions);\n    }\n    this.glyf.push(buffer);\n    this.loca.offsets.push(this.offset);\n    this.hmtx.metrics.push({\n      advance: glyph.advanceWidth,\n      bearing: glyph._getMetrics().leftBearing\n    });\n    this.offset += buffer.length;\n    return this.glyf.length - 1;\n  };\n  _proto41.encode = function encode(stream) {\n    // tables required by PDF spec:\n    //   head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm\n    //\n    // additional tables required for standalone fonts:\n    //   name, cmap, OS/2, post\n    this.glyf = [];\n    this.offset = 0;\n    this.loca = {\n      offsets: [],\n      version: this.font.loca.version\n    };\n    this.hmtx = {\n      metrics: [],\n      bearings: []\n    }; // include all the glyphs\n    // not using a for loop because we need to support adding more\n    // glyphs to the array as we go, and CoffeeScript caches the length.\n\n    var i = 0;\n    while (i < this.glyphs.length) {\n      this._addGlyph(this.glyphs[i++]);\n    }\n    var maxp = cloneDeep(this.font.maxp);\n    maxp.numGlyphs = this.glyf.length;\n    this.loca.offsets.push(this.offset);\n    var head = cloneDeep(this.font.head);\n    head.indexToLocFormat = this.loca.version;\n    var hhea = cloneDeep(this.font.hhea);\n    hhea.numberOfMetrics = this.hmtx.metrics.length; // map = []\n    // for index in [0...256]\n    //     if index < @numGlyphs\n    //         map[index] = index\n    //     else\n    //         map[index] = 0\n    //\n    // cmapTable =\n    //     version: 0\n    //     length: 262\n    //     language: 0\n    //     codeMap: map\n    //\n    // cmap =\n    //     version: 0\n    //     numSubtables: 1\n    //     tables: [\n    //         platformID: 1\n    //         encodingID: 0\n    //         table: cmapTable\n    //     ]\n    // TODO: subset prep, cvt, fpgm?\n\n    Directory.encode(stream, {\n      tables: {\n        head: head,\n        hhea: hhea,\n        loca: this.loca,\n        maxp: maxp,\n        'cvt ': this.font['cvt '],\n        prep: this.font.prep,\n        glyf: this.glyf,\n        hmtx: this.hmtx,\n        fpgm: this.font.fpgm // name: clone @font.name\n        // 'OS/2': clone @font['OS/2']\n        // post: clone @font.post\n        // cmap: cmap\n      }\n    });\n  };\n  return TTFSubset;\n}(Subset);\nvar CFFSubset = /*#__PURE__*/function (_Subset2) {\n  _inheritsLoose(CFFSubset, _Subset2);\n  function CFFSubset(font) {\n    var _this13;\n    _this13 = _Subset2.call(this, font) || this;\n    _this13.cff = _this13.font['CFF '];\n    if (!_this13.cff) {\n      throw new Error('Not a CFF Font');\n    }\n    return _this13;\n  }\n  var _proto42 = CFFSubset.prototype;\n  _proto42.subsetCharstrings = function subsetCharstrings() {\n    this.charstrings = [];\n    var gsubrs = {};\n    for (var _iterator73 = _createForOfIteratorHelperLoose(this.glyphs), _step73; !(_step73 = _iterator73()).done;) {\n      var gid = _step73.value;\n      this.charstrings.push(this.cff.getCharString(gid));\n      var glyph = this.font.getGlyph(gid);\n      var path = glyph.path; // this causes the glyph to be parsed\n\n      for (var subr in glyph._usedGsubrs) {\n        gsubrs[subr] = true;\n      }\n    }\n    this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs);\n  };\n  _proto42.subsetSubrs = function subsetSubrs(subrs, used) {\n    var res = [];\n    for (var i = 0; i < subrs.length; i++) {\n      var subr = subrs[i];\n      if (used[i]) {\n        this.cff.stream.pos = subr.offset;\n        res.push(this.cff.stream.readBuffer(subr.length));\n      } else {\n        res.push(Buffer.from([11])); // return\n      }\n    }\n\n    return res;\n  };\n  _proto42.subsetFontdict = function subsetFontdict(topDict) {\n    topDict.FDArray = [];\n    topDict.FDSelect = {\n      version: 0,\n      fds: []\n    };\n    var used_fds = {};\n    var used_subrs = [];\n    var fd_select = {};\n    for (var _iterator74 = _createForOfIteratorHelperLoose(this.glyphs), _step74; !(_step74 = _iterator74()).done;) {\n      var gid = _step74.value;\n      var fd = this.cff.fdForGlyph(gid);\n      if (fd == null) {\n        continue;\n      }\n      if (!used_fds[fd]) {\n        topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd]));\n        used_subrs.push({});\n        fd_select[fd] = topDict.FDArray.length - 1;\n      }\n      used_fds[fd] = true;\n      topDict.FDSelect.fds.push(fd_select[fd]);\n      var glyph = this.font.getGlyph(gid);\n      var path = glyph.path; // this causes the glyph to be parsed\n\n      for (var subr in glyph._usedSubrs) {\n        used_subrs[fd_select[fd]][subr] = true;\n      }\n    }\n    for (var i = 0; i < topDict.FDArray.length; i++) {\n      var dict = topDict.FDArray[i];\n      delete dict.FontName;\n      if (dict.Private && dict.Private.Subrs) {\n        dict.Private = Object.assign({}, dict.Private);\n        dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]);\n      }\n    }\n    return;\n  };\n  _proto42.createCIDFontdict = function createCIDFontdict(topDict) {\n    var used_subrs = {};\n    for (var _iterator75 = _createForOfIteratorHelperLoose(this.glyphs), _step75; !(_step75 = _iterator75()).done;) {\n      var gid = _step75.value;\n      var glyph = this.font.getGlyph(gid);\n      var path = glyph.path; // this causes the glyph to be parsed\n\n      for (var subr in glyph._usedSubrs) {\n        used_subrs[subr] = true;\n      }\n    }\n    var privateDict = Object.assign({}, this.cff.topDict.Private);\n    if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) {\n      privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs);\n    }\n    topDict.FDArray = [{\n      Private: privateDict\n    }];\n    return topDict.FDSelect = {\n      version: 3,\n      nRanges: 1,\n      ranges: [{\n        first: 0,\n        fd: 0\n      }],\n      sentinel: this.charstrings.length\n    };\n  };\n  _proto42.addString = function addString(string) {\n    if (!string) {\n      return null;\n    }\n    if (!this.strings) {\n      this.strings = [];\n    }\n    this.strings.push(string);\n    return standardStrings.length + this.strings.length - 1;\n  };\n  _proto42.encode = function encode(stream) {\n    this.subsetCharstrings();\n    var charset = {\n      version: this.charstrings.length > 255 ? 2 : 1,\n      ranges: [{\n        first: 1,\n        nLeft: this.charstrings.length - 2\n      }]\n    };\n    var topDict = Object.assign({}, this.cff.topDict);\n    topDict.Private = null;\n    topDict.charset = charset;\n    topDict.Encoding = null;\n    topDict.CharStrings = this.charstrings;\n    for (var _i24 = 0, _arr2 = ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName']; _i24 < _arr2.length; _i24++) {\n      var key = _arr2[_i24];\n      topDict[key] = this.addString(this.cff.string(topDict[key]));\n    }\n    topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0];\n    topDict.CIDCount = this.charstrings.length;\n    if (this.cff.isCIDFont) {\n      this.subsetFontdict(topDict);\n    } else {\n      this.createCIDFontdict(topDict);\n    }\n    var top = {\n      version: 1,\n      hdrSize: this.cff.hdrSize,\n      offSize: 4,\n      header: this.cff.header,\n      nameIndex: [this.cff.postscriptName],\n      topDictIndex: [topDict],\n      stringIndex: this.strings,\n      globalSubrIndex: this.gsubrs\n    };\n    CFFTop.encode(stream, top);\n  };\n  return CFFSubset;\n}(Subset);\nvar _class$4;\n/**\n * This is the base class for all SFNT-based font formats in fontkit.\n * It supports TrueType, and PostScript glyphs, and several color glyph formats.\n */\n\nvar TTFFont = (_class$4 = /*#__PURE__*/function () {\n  TTFFont.probe = function probe(buffer) {\n    var format = buffer.toString('ascii', 0, 4);\n    return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0);\n  };\n  function TTFFont(stream, variationCoords) {\n    if (variationCoords === void 0) {\n      variationCoords = null;\n    }\n    this.defaultLanguage = null;\n    this.stream = stream;\n    this.variationCoords = variationCoords;\n    this._directoryPos = this.stream.pos;\n    this._tables = {};\n    this._glyphs = {};\n    this._decodeDirectory(); // define properties for each table to lazily parse\n\n    for (var tag in this.directory.tables) {\n      var table = this.directory.tables[tag];\n      if (tables[tag] && table.length > 0) {\n        Object.defineProperty(this, tag, {\n          get: this._getTable.bind(this, table)\n        });\n      }\n    }\n  }\n  var _proto43 = TTFFont.prototype;\n  _proto43.setDefaultLanguage = function setDefaultLanguage(lang) {\n    if (lang === void 0) {\n      lang = null;\n    }\n    this.defaultLanguage = lang;\n  };\n  _proto43._getTable = function _getTable(table) {\n    if (!(table.tag in this._tables)) {\n      try {\n        this._tables[table.tag] = this._decodeTable(table);\n      } catch (e) {\n        if (fontkit.logErrors) {\n          console.error(\"Error decoding table \".concat(table.tag));\n          console.error(e.stack);\n        }\n      }\n    }\n    return this._tables[table.tag];\n  };\n  _proto43._getTableStream = function _getTableStream(tag) {\n    var table = this.directory.tables[tag];\n    if (table) {\n      this.stream.pos = table.offset;\n      return this.stream;\n    }\n    return null;\n  };\n  _proto43._decodeDirectory = function _decodeDirectory() {\n    return this.directory = Directory.decode(this.stream, {\n      _startOffset: 0\n    });\n  };\n  _proto43._decodeTable = function _decodeTable(table) {\n    var pos = this.stream.pos;\n    var stream = this._getTableStream(table.tag);\n    var result = tables[table.tag].decode(stream, this, table.length);\n    this.stream.pos = pos;\n    return result;\n  }\n  /**\n   * Gets a string from the font's `name` table\n   * `lang` is a BCP-47 language code.\n   * @return {string}\n   */;\n  _proto43.getName = function getName(key, lang) {\n    if (lang === void 0) {\n      lang = this.defaultLanguage || fontkit.defaultLanguage;\n    }\n    var record = this.name && this.name.records[key];\n    if (record) {\n      // Attempt to retrieve the entry, depending on which translation is available:\n      return record[lang] || record[this.defaultLanguage] || record[fontkit.defaultLanguage] || record['en'] || record[Object.keys(record)[0]] // Seriously, ANY language would be fine\n      || null;\n    }\n    return null;\n  }\n  /**\n   * The unique PostScript name for this font, e.g. \"Helvetica-Bold\"\n   * @type {string}\n   */;\n  /**\n   * Returns whether there is glyph in the font for the given unicode code point.\n   *\n   * @param {number} codePoint\n   * @return {boolean}\n   */\n  _proto43.hasGlyphForCodePoint = function hasGlyphForCodePoint(codePoint) {\n    return !!this._cmapProcessor.lookup(codePoint);\n  }\n  /**\n   * Maps a single unicode code point to a Glyph object.\n   * Does not perform any advanced substitutions (there is no context to do so).\n   *\n   * @param {number} codePoint\n   * @return {Glyph}\n   */;\n  _proto43.glyphForCodePoint = function glyphForCodePoint(codePoint) {\n    return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]);\n  }\n  /**\n   * Returns an array of Glyph objects for the given string.\n   * This is only a one-to-one mapping from characters to glyphs.\n   * For most uses, you should use font.layout (described below), which\n   * provides a much more advanced mapping supporting AAT and OpenType shaping.\n   *\n   * @param {string} string\n   * @return {Glyph[]}\n   */;\n  _proto43.glyphsForString = function glyphsForString(string) {\n    var glyphs = [];\n    var len = string.length;\n    var idx = 0;\n    var last = -1;\n    var state = -1;\n    while (idx <= len) {\n      var code = 0;\n      var nextState = 0;\n      if (idx < len) {\n        // Decode the next codepoint from UTF 16\n        code = string.charCodeAt(idx++);\n        if (0xd800 <= code && code <= 0xdbff && idx < len) {\n          var next = string.charCodeAt(idx);\n          if (0xdc00 <= next && next <= 0xdfff) {\n            idx++;\n            code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000;\n          }\n        } // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise.\n\n        nextState = 0xfe00 <= code && code <= 0xfe0f || 0xe0100 <= code && code <= 0xe01ef ? 1 : 0;\n      } else {\n        idx++;\n      }\n      if (state === 0 && nextState === 1) {\n        // Variation selector following normal codepoint.\n        glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code]));\n      } else if (state === 0 && nextState === 0) {\n        // Normal codepoint following normal codepoint.\n        glyphs.push(this.glyphForCodePoint(last));\n      }\n      last = code;\n      state = nextState;\n    }\n    return glyphs;\n  };\n  /**\n   * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string.\n   *\n   * @param {string} string\n   * @param {string[]} [userFeatures]\n   * @param {string} [script]\n   * @param {string} [language]\n   * @param {string} [direction]\n   * @return {GlyphRun}\n   */\n  _proto43.layout = function layout(string, userFeatures, script, language, direction) {\n    return this._layoutEngine.layout(string, userFeatures, script, language, direction);\n  }\n  /**\n   * Returns an array of strings that map to the given glyph id.\n   * @param {number} gid - glyph id\n   */;\n  _proto43.stringsForGlyph = function stringsForGlyph(gid) {\n    return this._layoutEngine.stringsForGlyph(gid);\n  }\n  /**\n   * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm)\n   * (or mapped AAT tags) supported by the font.\n   * The features parameter is an array of OpenType feature tags to be applied in addition to the default set.\n   * If this is an AAT font, the OpenType feature tags are mapped to AAT features.\n   *\n   * @type {string[]}\n   */;\n  _proto43.getAvailableFeatures = function getAvailableFeatures(script, language) {\n    return this._layoutEngine.getAvailableFeatures(script, language);\n  };\n  _proto43._getBaseGlyph = function _getBaseGlyph(glyph, characters) {\n    if (characters === void 0) {\n      characters = [];\n    }\n    if (!this._glyphs[glyph]) {\n      if (this.directory.tables.glyf) {\n        this._glyphs[glyph] = new TTFGlyph(glyph, characters, this);\n      } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) {\n        this._glyphs[glyph] = new CFFGlyph(glyph, characters, this);\n      }\n    }\n    return this._glyphs[glyph] || null;\n  }\n  /**\n   * Returns a glyph object for the given glyph id.\n   * You can pass the array of code points this glyph represents for\n   * your use later, and it will be stored in the glyph object.\n   *\n   * @param {number} glyph\n   * @param {number[]} characters\n   * @return {Glyph}\n   */;\n  _proto43.getGlyph = function getGlyph(glyph, characters) {\n    if (characters === void 0) {\n      characters = [];\n    }\n    if (!this._glyphs[glyph]) {\n      if (this.directory.tables.sbix) {\n        this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this);\n      } else if (this.directory.tables.COLR && this.directory.tables.CPAL) {\n        this._glyphs[glyph] = new COLRGlyph(glyph, characters, this);\n      } else {\n        this._getBaseGlyph(glyph, characters);\n      }\n    }\n    return this._glyphs[glyph] || null;\n  }\n  /**\n   * Returns a Subset for this font.\n   * @return {Subset}\n   */;\n  _proto43.createSubset = function createSubset() {\n    if (this.directory.tables['CFF ']) {\n      return new CFFSubset(this);\n    }\n    return new TTFSubset(this);\n  }\n  /**\n   * Returns an object describing the available variation axes\n   * that this font supports. Keys are setting tags, and values\n   * contain the axis name, range, and default value.\n   *\n   * @type {object}\n   */;\n  /**\n   * Returns a new font with the given variation settings applied.\n   * Settings can either be an instance name, or an object containing\n   * variation tags as specified by the `variationAxes` property.\n   *\n   * @param {object} settings\n   * @return {TTFFont}\n   */\n  _proto43.getVariation = function getVariation(settings) {\n    if (!(this.directory.tables.fvar && (this.directory.tables.gvar && this.directory.tables.glyf || this.directory.tables.CFF2))) {\n      throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.');\n    }\n    if (typeof settings === 'string') {\n      settings = this.namedVariations[settings];\n    }\n    if (typeof settings !== 'object') {\n      throw new Error('Variation settings must be either a variation name or settings object.');\n    } // normalize the coordinates\n\n    var coords = this.fvar.axis.map(function (axis, i) {\n      var axisTag = axis.axisTag.trim();\n      if (axisTag in settings) {\n        return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag]));\n      } else {\n        return axis.defaultValue;\n      }\n    });\n    var stream = new r.DecodeStream(this.stream.buffer);\n    stream.pos = this._directoryPos;\n    var font = new TTFFont(stream, coords);\n    font._tables = this._tables;\n    return font;\n  };\n  // Standardized format plugin API\n  _proto43.getFont = function getFont(name) {\n    return this.getVariation(name);\n  };\n  _createClass(TTFFont, [{\n    key: \"postscriptName\",\n    get: function get() {\n      return this.getName('postscriptName');\n    }\n    /**\n     * The font's full name, e.g. \"Helvetica Bold\"\n     * @type {string}\n     */\n  }, {\n    key: \"fullName\",\n    get: function get() {\n      return this.getName('fullName');\n    }\n    /**\n     * The font's family name, e.g. \"Helvetica\"\n     * @type {string}\n     */\n  }, {\n    key: \"familyName\",\n    get: function get() {\n      return this.getName('fontFamily');\n    }\n    /**\n     * The font's sub-family, e.g. \"Bold\".\n     * @type {string}\n     */\n  }, {\n    key: \"subfamilyName\",\n    get: function get() {\n      return this.getName('fontSubfamily');\n    }\n    /**\n     * The font's copyright information\n     * @type {string}\n     */\n  }, {\n    key: \"copyright\",\n    get: function get() {\n      return this.getName('copyright');\n    }\n    /**\n     * The font's version number\n     * @type {string}\n     */\n  }, {\n    key: \"version\",\n    get: function get() {\n      return this.getName('version');\n    }\n    /**\n     * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography))\n     * @type {number}\n     */\n  }, {\n    key: \"ascent\",\n    get: function get() {\n      return this.hhea.ascent;\n    }\n    /**\n     * The font’s [descender](https://en.wikipedia.org/wiki/Descender)\n     * @type {number}\n     */\n  }, {\n    key: \"descent\",\n    get: function get() {\n      return this.hhea.descent;\n    }\n    /**\n     * The amount of space that should be included between lines\n     * @type {number}\n     */\n  }, {\n    key: \"lineGap\",\n    get: function get() {\n      return this.hhea.lineGap;\n    }\n    /**\n     * The offset from the normal underline position that should be used\n     * @type {number}\n     */\n  }, {\n    key: \"underlinePosition\",\n    get: function get() {\n      return this.post.underlinePosition;\n    }\n    /**\n     * The weight of the underline that should be used\n     * @type {number}\n     */\n  }, {\n    key: \"underlineThickness\",\n    get: function get() {\n      return this.post.underlineThickness;\n    }\n    /**\n     * If this is an italic font, the angle the cursor should be drawn at to match the font design\n     * @type {number}\n     */\n  }, {\n    key: \"italicAngle\",\n    get: function get() {\n      return this.post.italicAngle;\n    }\n    /**\n     * The height of capital letters above the baseline.\n     * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details.\n     * @type {number}\n     */\n  }, {\n    key: \"capHeight\",\n    get: function get() {\n      var os2 = this['OS/2'];\n      return os2 ? os2.capHeight : this.ascent;\n    }\n    /**\n     * The height of lower case letters in the font.\n     * See [here](https://en.wikipedia.org/wiki/X-height) for more details.\n     * @type {number}\n     */\n  }, {\n    key: \"xHeight\",\n    get: function get() {\n      var os2 = this['OS/2'];\n      return os2 ? os2.xHeight : 0;\n    }\n    /**\n     * The number of glyphs in the font.\n     * @type {number}\n     */\n  }, {\n    key: \"numGlyphs\",\n    get: function get() {\n      return this.maxp.numGlyphs;\n    }\n    /**\n     * The size of the font’s internal coordinate grid\n     * @type {number}\n     */\n  }, {\n    key: \"unitsPerEm\",\n    get: function get() {\n      return this.head.unitsPerEm;\n    }\n    /**\n     * The font’s bounding box, i.e. the box that encloses all glyphs in the font.\n     * @type {BBox}\n     */\n  }, {\n    key: \"bbox\",\n    get: function get() {\n      return Object.freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax));\n    }\n  }, {\n    key: \"_cmapProcessor\",\n    get: function get() {\n      return new CmapProcessor(this.cmap);\n    }\n    /**\n     * An array of all of the unicode code points supported by the font.\n     * @type {number[]}\n     */\n  }, {\n    key: \"characterSet\",\n    get: function get() {\n      return this._cmapProcessor.getCharacterSet();\n    }\n  }, {\n    key: \"_layoutEngine\",\n    get: function get() {\n      return new LayoutEngine(this);\n    }\n  }, {\n    key: \"availableFeatures\",\n    get: function get() {\n      return this._layoutEngine.getAvailableFeatures();\n    }\n  }, {\n    key: \"variationAxes\",\n    get: function get() {\n      var res = {};\n      if (!this.fvar) {\n        return res;\n      }\n      for (var _iterator76 = _createForOfIteratorHelperLoose(this.fvar.axis), _step76; !(_step76 = _iterator76()).done;) {\n        var axis = _step76.value;\n        res[axis.axisTag.trim()] = {\n          name: axis.name.en,\n          min: axis.minValue,\n          default: axis.defaultValue,\n          max: axis.maxValue\n        };\n      }\n      return res;\n    }\n    /**\n     * Returns an object describing the named variation instances\n     * that the font designer has specified. Keys are variation names\n     * and values are the variation settings for this instance.\n     *\n     * @type {object}\n     */\n  }, {\n    key: \"namedVariations\",\n    get: function get() {\n      var res = {};\n      if (!this.fvar) {\n        return res;\n      }\n      for (var _iterator77 = _createForOfIteratorHelperLoose(this.fvar.instance), _step77; !(_step77 = _iterator77()).done;) {\n        var instance = _step77.value;\n        var settings = {};\n        for (var i = 0; i < this.fvar.axis.length; i++) {\n          var axis = this.fvar.axis[i];\n          settings[axis.axisTag.trim()] = instance.coord[i];\n        }\n        res[instance.name.en] = settings;\n      }\n      return res;\n    }\n  }, {\n    key: \"_variationProcessor\",\n    get: function get() {\n      if (!this.fvar) {\n        return null;\n      }\n      var variationCoords = this.variationCoords; // Ignore if no variation coords and not CFF2\n\n      if (!variationCoords && !this.CFF2) {\n        return null;\n      }\n      if (!variationCoords) {\n        variationCoords = this.fvar.axis.map(function (axis) {\n          return axis.defaultValue;\n        });\n      }\n      return new GlyphVariationProcessor(this, variationCoords);\n    }\n  }]);\n  return TTFFont;\n}(), (_applyDecoratedDescriptor(_class$4.prototype, \"bbox\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"bbox\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_cmapProcessor\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_cmapProcessor\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"characterSet\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"characterSet\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_layoutEngine\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_layoutEngine\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"variationAxes\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"variationAxes\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"namedVariations\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"namedVariations\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_variationProcessor\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_variationProcessor\"), _class$4.prototype)), _class$4);\nvar WOFFDirectoryEntry = new r.Struct({\n  tag: new r.String(4),\n  offset: new r.Pointer(r.uint32, 'void', {\n    type: 'global'\n  }),\n  compLength: r.uint32,\n  length: r.uint32,\n  origChecksum: r.uint32\n});\nvar WOFFDirectory = new r.Struct({\n  tag: new r.String(4),\n  // should be 'wOFF'\n  flavor: r.uint32,\n  length: r.uint32,\n  numTables: r.uint16,\n  reserved: new r.Reserved(r.uint16),\n  totalSfntSize: r.uint32,\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  metaOffset: r.uint32,\n  metaLength: r.uint32,\n  metaOrigLength: r.uint32,\n  privOffset: r.uint32,\n  privLength: r.uint32,\n  tables: new r.Array(WOFFDirectoryEntry, 'numTables')\n});\nWOFFDirectory.process = function () {\n  var tables = {};\n  for (var _iterator78 = _createForOfIteratorHelperLoose(this.tables), _step78; !(_step78 = _iterator78()).done;) {\n    var table = _step78.value;\n    tables[table.tag] = table;\n  }\n  this.tables = tables;\n};\nvar WOFFFont = /*#__PURE__*/function (_TTFFont) {\n  _inheritsLoose(WOFFFont, _TTFFont);\n  function WOFFFont() {\n    return _TTFFont.apply(this, arguments) || this;\n  }\n  WOFFFont.probe = function probe(buffer) {\n    return buffer.toString('ascii', 0, 4) === 'wOFF';\n  };\n  var _proto44 = WOFFFont.prototype;\n  _proto44._decodeDirectory = function _decodeDirectory() {\n    this.directory = WOFFDirectory.decode(this.stream, {\n      _startOffset: 0\n    });\n  };\n  _proto44._getTableStream = function _getTableStream(tag) {\n    var table = this.directory.tables[tag];\n    if (table) {\n      this.stream.pos = table.offset;\n      if (table.compLength < table.length) {\n        this.stream.pos += 2; // skip deflate header\n\n        var outBuffer = Buffer.alloc(table.length);\n        var buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer);\n        return new r.DecodeStream(buf);\n      } else {\n        return this.stream;\n      }\n    }\n    return null;\n  };\n  return WOFFFont;\n}(TTFFont);\n/**\n * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently.\n */\nvar WOFF2Glyph = /*#__PURE__*/function (_TTFGlyph2) {\n  _inheritsLoose(WOFF2Glyph, _TTFGlyph2);\n  function WOFF2Glyph() {\n    return _TTFGlyph2.apply(this, arguments) || this;\n  }\n  var _proto45 = WOFF2Glyph.prototype;\n  _proto45._decode = function _decode() {\n    // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data.\n    return this._font._transformedGlyphs[this.id];\n  };\n  _proto45._getCBox = function _getCBox() {\n    return this.path.bbox;\n  };\n  return WOFF2Glyph;\n}(TTFGlyph);\nvar Base128 = {\n  decode: function decode(stream) {\n    var result = 0;\n    var iterable = [0, 1, 2, 3, 4];\n    for (var j = 0; j < iterable.length; j++) {\n      var code = stream.readUInt8(); // If any of the top seven bits are set then we're about to overflow.\n\n      if (result & 0xe0000000) {\n        throw new Error('Overflow');\n      }\n      result = result << 7 | code & 0x7f;\n      if ((code & 0x80) === 0) {\n        return result;\n      }\n    }\n    throw new Error('Bad base 128 number');\n  }\n};\nvar knownTags = ['cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ', 'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp', 'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF', 'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL', 'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc', 'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx', 'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill'];\nvar WOFF2DirectoryEntry = new r.Struct({\n  flags: r.uint8,\n  customTag: new r.Optional(new r.String(4), function (t) {\n    return (t.flags & 0x3f) === 0x3f;\n  }),\n  tag: function tag(t) {\n    return t.customTag || knownTags[t.flags & 0x3f];\n  },\n  // || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); },\n  length: Base128,\n  transformVersion: function transformVersion(t) {\n    return t.flags >>> 6 & 0x03;\n  },\n  transformed: function transformed(t) {\n    return t.tag === 'glyf' || t.tag === 'loca' ? t.transformVersion === 0 : t.transformVersion !== 0;\n  },\n  transformLength: new r.Optional(Base128, function (t) {\n    return t.transformed;\n  })\n});\nvar WOFF2Directory = new r.Struct({\n  tag: new r.String(4),\n  // should be 'wOF2'\n  flavor: r.uint32,\n  length: r.uint32,\n  numTables: r.uint16,\n  reserved: new r.Reserved(r.uint16),\n  totalSfntSize: r.uint32,\n  totalCompressedSize: r.uint32,\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  metaOffset: r.uint32,\n  metaLength: r.uint32,\n  metaOrigLength: r.uint32,\n  privOffset: r.uint32,\n  privLength: r.uint32,\n  tables: new r.Array(WOFF2DirectoryEntry, 'numTables')\n});\nWOFF2Directory.process = function () {\n  var tables = {};\n  for (var i = 0; i < this.tables.length; i++) {\n    var table = this.tables[i];\n    tables[table.tag] = table;\n  }\n  return this.tables = tables;\n};\n\n/**\n * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2\n * See spec here: http://www.w3.org/TR/WOFF2/\n */\nvar WOFF2Font = /*#__PURE__*/function (_TTFFont2) {\n  _inheritsLoose(WOFF2Font, _TTFFont2);\n  function WOFF2Font() {\n    return _TTFFont2.apply(this, arguments) || this;\n  }\n  WOFF2Font.probe = function probe(buffer) {\n    return buffer.toString('ascii', 0, 4) === 'wOF2';\n  };\n  var _proto46 = WOFF2Font.prototype;\n  _proto46._decodeDirectory = function _decodeDirectory() {\n    this.directory = WOFF2Directory.decode(this.stream);\n    this._dataPos = this.stream.pos;\n  };\n  _proto46._decompress = function _decompress() {\n    // decompress data and setup table offsets if we haven't already\n    if (!this._decompressed) {\n      this.stream.pos = this._dataPos;\n      var buffer = this.stream.readBuffer(this.directory.totalCompressedSize);\n      var decompressedSize = 0;\n      for (var tag in this.directory.tables) {\n        var entry = this.directory.tables[tag];\n        entry.offset = decompressedSize;\n        decompressedSize += entry.transformLength != null ? entry.transformLength : entry.length;\n      }\n      var decompressed = brotli(buffer, decompressedSize);\n      if (!decompressed) {\n        throw new Error('Error decoding compressed data in WOFF2');\n      }\n      this.stream = new r.DecodeStream(Buffer.from(decompressed));\n      this._decompressed = true;\n    }\n  };\n  _proto46._decodeTable = function _decodeTable(table) {\n    this._decompress();\n    return _TTFFont2.prototype._decodeTable.call(this, table);\n  } // Override this method to get a glyph and return our\n  // custom subclass if there is a glyf table.\n  ;\n  _proto46._getBaseGlyph = function _getBaseGlyph(glyph, characters) {\n    if (characters === void 0) {\n      characters = [];\n    }\n    if (!this._glyphs[glyph]) {\n      if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) {\n        if (!this._transformedGlyphs) {\n          this._transformGlyfTable();\n        }\n        return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this);\n      } else {\n        return _TTFFont2.prototype._getBaseGlyph.call(this, glyph, characters);\n      }\n    }\n  };\n  _proto46._transformGlyfTable = function _transformGlyfTable() {\n    this._decompress();\n    this.stream.pos = this.directory.tables.glyf.offset;\n    var table = GlyfTable.decode(this.stream);\n    var glyphs = [];\n    for (var index = 0; index < table.numGlyphs; index++) {\n      var glyph = {};\n      var nContours = table.nContours.readInt16BE();\n      glyph.numberOfContours = nContours;\n      if (nContours > 0) {\n        // simple glyph\n        var nPoints = [];\n        var totalPoints = 0;\n        for (var i = 0; i < nContours; i++) {\n          var _r = read255UInt16(table.nPoints);\n          totalPoints += _r;\n          nPoints.push(totalPoints);\n        }\n        glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints);\n        for (var _i = 0; _i < nContours; _i++) {\n          glyph.points[nPoints[_i] - 1].endContour = true;\n        }\n        var instructionSize = read255UInt16(table.glyphs);\n      } else if (nContours < 0) {\n        // composite glyph\n        var haveInstructions = TTFGlyph.prototype._decodeComposite.call({\n          _font: this\n        }, glyph, table.composites);\n        if (haveInstructions) {\n          var instructionSize = read255UInt16(table.glyphs);\n        }\n      }\n      glyphs.push(glyph);\n    }\n    this._transformedGlyphs = glyphs;\n  };\n  return WOFF2Font;\n}(TTFFont); // Special class that accepts a length and returns a sub-stream for that data\nvar Substream = /*#__PURE__*/function () {\n  function Substream(length) {\n    this.length = length;\n    this._buf = new r.Buffer(length);\n  }\n  var _proto47 = Substream.prototype;\n  _proto47.decode = function decode(stream, parent) {\n    return new r.DecodeStream(this._buf.decode(stream, parent));\n  };\n  return Substream;\n}(); // This struct represents the entire glyf table\nvar GlyfTable = new r.Struct({\n  version: r.uint32,\n  numGlyphs: r.uint16,\n  indexFormat: r.uint16,\n  nContourStreamSize: r.uint32,\n  nPointsStreamSize: r.uint32,\n  flagStreamSize: r.uint32,\n  glyphStreamSize: r.uint32,\n  compositeStreamSize: r.uint32,\n  bboxStreamSize: r.uint32,\n  instructionStreamSize: r.uint32,\n  nContours: new Substream('nContourStreamSize'),\n  nPoints: new Substream('nPointsStreamSize'),\n  flags: new Substream('flagStreamSize'),\n  glyphs: new Substream('glyphStreamSize'),\n  composites: new Substream('compositeStreamSize'),\n  bboxes: new Substream('bboxStreamSize'),\n  instructions: new Substream('instructionStreamSize')\n});\nvar WORD_CODE = 253;\nvar ONE_MORE_BYTE_CODE2 = 254;\nvar ONE_MORE_BYTE_CODE1 = 255;\nvar LOWEST_U_CODE = 253;\nfunction read255UInt16(stream) {\n  var code = stream.readUInt8();\n  if (code === WORD_CODE) {\n    return stream.readUInt16BE();\n  }\n  if (code === ONE_MORE_BYTE_CODE1) {\n    return stream.readUInt8() + LOWEST_U_CODE;\n  }\n  if (code === ONE_MORE_BYTE_CODE2) {\n    return stream.readUInt8() + LOWEST_U_CODE * 2;\n  }\n  return code;\n}\nfunction withSign(flag, baseval) {\n  return flag & 1 ? baseval : -baseval;\n}\nfunction decodeTriplet(flags, glyphs, nPoints) {\n  var y;\n  var x = y = 0;\n  var res = [];\n  for (var i = 0; i < nPoints; i++) {\n    var dx = 0,\n      dy = 0;\n    var flag = flags.readUInt8();\n    var onCurve = !(flag >> 7);\n    flag &= 0x7f;\n    if (flag < 10) {\n      dx = 0;\n      dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8());\n    } else if (flag < 20) {\n      dx = withSign(flag, ((flag - 10 & 14) << 7) + glyphs.readUInt8());\n      dy = 0;\n    } else if (flag < 84) {\n      var b0 = flag - 20;\n      var b1 = glyphs.readUInt8();\n      dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4));\n      dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f));\n    } else if (flag < 120) {\n      var b0 = flag - 84;\n      dx = withSign(flag, 1 + (b0 / 12 << 8) + glyphs.readUInt8());\n      dy = withSign(flag >> 1, 1 + (b0 % 12 >> 2 << 8) + glyphs.readUInt8());\n    } else if (flag < 124) {\n      var b1 = glyphs.readUInt8();\n      var b2 = glyphs.readUInt8();\n      dx = withSign(flag, (b1 << 4) + (b2 >> 4));\n      dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8());\n    } else {\n      dx = withSign(flag, glyphs.readUInt16BE());\n      dy = withSign(flag >> 1, glyphs.readUInt16BE());\n    }\n    x += dx;\n    y += dy;\n    res.push(new Point(onCurve, false, x, y));\n  }\n  return res;\n}\nvar TTCHeader = new r.VersionedStruct(r.uint32, {\n  0x00010000: {\n    numFonts: r.uint32,\n    offsets: new r.Array(r.uint32, 'numFonts')\n  },\n  0x00020000: {\n    numFonts: r.uint32,\n    offsets: new r.Array(r.uint32, 'numFonts'),\n    dsigTag: r.uint32,\n    dsigLength: r.uint32,\n    dsigOffset: r.uint32\n  }\n});\nvar TrueTypeCollection = /*#__PURE__*/function () {\n  TrueTypeCollection.probe = function probe(buffer) {\n    return buffer.toString('ascii', 0, 4) === 'ttcf';\n  };\n  function TrueTypeCollection(stream) {\n    this.stream = stream;\n    if (stream.readString(4) !== 'ttcf') {\n      throw new Error('Not a TrueType collection');\n    }\n    this.header = TTCHeader.decode(stream);\n  }\n  var _proto48 = TrueTypeCollection.prototype;\n  _proto48.getFont = function getFont(name) {\n    for (var _iterator79 = _createForOfIteratorHelperLoose(this.header.offsets), _step79; !(_step79 = _iterator79()).done;) {\n      var offset = _step79.value;\n      var stream = new r.DecodeStream(this.stream.buffer);\n      stream.pos = offset;\n      var font = new TTFFont(stream);\n      if (font.postscriptName === name) {\n        return font;\n      }\n    }\n    return null;\n  };\n  _createClass(TrueTypeCollection, [{\n    key: \"fonts\",\n    get: function get() {\n      var fonts = [];\n      for (var _iterator80 = _createForOfIteratorHelperLoose(this.header.offsets), _step80; !(_step80 = _iterator80()).done;) {\n        var offset = _step80.value;\n        var stream = new r.DecodeStream(this.stream.buffer);\n        stream.pos = offset;\n        fonts.push(new TTFFont(stream));\n      }\n      return fonts;\n    }\n  }]);\n  return TrueTypeCollection;\n}();\nvar DFontName = new r.String(r.uint8);\nvar DFontData = new r.Struct({\n  len: r.uint32,\n  buf: new r.Buffer('len')\n});\nvar Ref = new r.Struct({\n  id: r.uint16,\n  nameOffset: r.int16,\n  attr: r.uint8,\n  dataOffset: r.uint24,\n  handle: r.uint32\n});\nvar Type = new r.Struct({\n  name: new r.String(4),\n  maxTypeIndex: r.uint16,\n  refList: new r.Pointer(r.uint16, new r.Array(Ref, function (t) {\n    return t.maxTypeIndex + 1;\n  }), {\n    type: 'parent'\n  })\n});\nvar TypeList = new r.Struct({\n  length: r.uint16,\n  types: new r.Array(Type, function (t) {\n    return t.length + 1;\n  })\n});\nvar DFontMap = new r.Struct({\n  reserved: new r.Reserved(r.uint8, 24),\n  typeList: new r.Pointer(r.uint16, TypeList),\n  nameListOffset: new r.Pointer(r.uint16, 'void')\n});\nvar DFontHeader = new r.Struct({\n  dataOffset: r.uint32,\n  map: new r.Pointer(r.uint32, DFontMap),\n  dataLength: r.uint32,\n  mapLength: r.uint32\n});\nvar DFont = /*#__PURE__*/function () {\n  DFont.probe = function probe(buffer) {\n    var stream = new r.DecodeStream(buffer);\n    try {\n      var header = DFontHeader.decode(stream);\n    } catch (e) {\n      return false;\n    }\n    for (var _iterator81 = _createForOfIteratorHelperLoose(header.map.typeList.types), _step81; !(_step81 = _iterator81()).done;) {\n      var type = _step81.value;\n      if (type.name === 'sfnt') {\n        return true;\n      }\n    }\n    return false;\n  };\n  function DFont(stream) {\n    this.stream = stream;\n    this.header = DFontHeader.decode(this.stream);\n    for (var _iterator82 = _createForOfIteratorHelperLoose(this.header.map.typeList.types), _step82; !(_step82 = _iterator82()).done;) {\n      var type = _step82.value;\n      for (var _iterator83 = _createForOfIteratorHelperLoose(type.refList), _step83; !(_step83 = _iterator83()).done;) {\n        var ref = _step83.value;\n        if (ref.nameOffset >= 0) {\n          this.stream.pos = ref.nameOffset + this.header.map.nameListOffset;\n          ref.name = DFontName.decode(this.stream);\n        } else {\n          ref.name = null;\n        }\n      }\n      if (type.name === 'sfnt') {\n        this.sfnt = type;\n      }\n    }\n  }\n  var _proto49 = DFont.prototype;\n  _proto49.getFont = function getFont(name) {\n    if (!this.sfnt) {\n      return null;\n    }\n    for (var _iterator84 = _createForOfIteratorHelperLoose(this.sfnt.refList), _step84; !(_step84 = _iterator84()).done;) {\n      var ref = _step84.value;\n      var pos = this.header.dataOffset + ref.dataOffset + 4;\n      var stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n      var font = new TTFFont(stream);\n      if (font.postscriptName === name) {\n        return font;\n      }\n    }\n    return null;\n  };\n  _createClass(DFont, [{\n    key: \"fonts\",\n    get: function get() {\n      var fonts = [];\n      for (var _iterator85 = _createForOfIteratorHelperLoose(this.sfnt.refList), _step85; !(_step85 = _iterator85()).done;) {\n        var ref = _step85.value;\n        var pos = this.header.dataOffset + ref.dataOffset + 4;\n        var stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n        fonts.push(new TTFFont(stream));\n      }\n      return fonts;\n    }\n  }]);\n  return DFont;\n}();\nfontkit.registerFormat(TTFFont);\nfontkit.registerFormat(WOFFFont);\nfontkit.registerFormat(WOFF2Font);\nfontkit.registerFormat(TrueTypeCollection);\nfontkit.registerFormat(DFont);\nmodule.exports = fontkit;\n\n/***/ }),\n\n/***/ 7337:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UnicodeTrie = __webpack_require__(4781);\n\nvar base64 = __webpack_require__(9742);\nvar _require = __webpack_require__(2055),\n  BK = _require.BK,\n  CR = _require.CR,\n  LF = _require.LF,\n  NL = _require.NL,\n  SG = _require.SG,\n  WJ = _require.WJ,\n  SP = _require.SP,\n  ZWJ = _require.ZWJ,\n  BA = _require.BA,\n  HY = _require.HY,\n  NS = _require.NS,\n  AI = _require.AI,\n  AL = _require.AL,\n  CJ = _require.CJ,\n  HL = _require.HL,\n  RI = _require.RI,\n  SA = _require.SA,\n  XX = _require.XX;\nvar _require2 = __webpack_require__(8383),\n  DI_BRK = _require2.DI_BRK,\n  IN_BRK = _require2.IN_BRK,\n  CI_BRK = _require2.CI_BRK,\n  CP_BRK = _require2.CP_BRK,\n  PR_BRK = _require2.PR_BRK,\n  pairTable = _require2.pairTable;\nvar data = base64.toByteArray(\"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\");\nvar classTrie = new UnicodeTrie(data);\nvar mapClass = function mapClass(c) {\n  switch (c) {\n    case AI:\n      return AL;\n    case SA:\n    case SG:\n    case XX:\n      return AL;\n    case CJ:\n      return NS;\n    default:\n      return c;\n  }\n};\nvar mapFirst = function mapFirst(c) {\n  switch (c) {\n    case LF:\n    case NL:\n      return BK;\n    case SP:\n      return WJ;\n    default:\n      return c;\n  }\n};\nvar Break = function Break(position, required) {\n  if (required === void 0) {\n    required = false;\n  }\n  this.position = position;\n  this.required = required;\n};\nvar LineBreaker = /*#__PURE__*/function () {\n  function LineBreaker(string) {\n    this.string = string;\n    this.pos = 0;\n    this.lastPos = 0;\n    this.curClass = null;\n    this.nextClass = null;\n    this.LB8a = false;\n    this.LB21a = false;\n    this.LB30a = 0;\n  }\n  var _proto = LineBreaker.prototype;\n  _proto.nextCodePoint = function nextCodePoint() {\n    var code = this.string.charCodeAt(this.pos++);\n    var next = this.string.charCodeAt(this.pos);\n\n    // If a surrogate pair\n    if (0xd800 <= code && code <= 0xdbff && 0xdc00 <= next && next <= 0xdfff) {\n      this.pos++;\n      return (code - 0xd800) * 0x400 + (next - 0xdc00) + 0x10000;\n    }\n    return code;\n  };\n  _proto.nextCharClass = function nextCharClass() {\n    return mapClass(classTrie.get(this.nextCodePoint()));\n  };\n  _proto.getSimpleBreak = function getSimpleBreak() {\n    // handle classes not handled by the pair table\n    switch (this.nextClass) {\n      case SP:\n        return false;\n      case BK:\n      case LF:\n      case NL:\n        this.curClass = BK;\n        return false;\n      case CR:\n        this.curClass = CR;\n        return false;\n    }\n    return null;\n  };\n  _proto.getPairTableBreak = function getPairTableBreak(lastClass) {\n    // if not handled already, use the pair table\n    var shouldBreak = false;\n    switch (pairTable[this.curClass][this.nextClass]) {\n      case DI_BRK:\n        // Direct break\n        shouldBreak = true;\n        break;\n      case IN_BRK:\n        // possible indirect break\n        shouldBreak = lastClass === SP;\n        break;\n      case CI_BRK:\n        shouldBreak = lastClass === SP;\n        if (!shouldBreak) {\n          shouldBreak = false;\n          return shouldBreak;\n        }\n        break;\n      case CP_BRK:\n        // prohibited for combining marks\n        if (lastClass !== SP) {\n          return shouldBreak;\n        }\n        break;\n      case PR_BRK:\n        break;\n    }\n    if (this.LB8a) {\n      shouldBreak = false;\n    }\n\n    // Rule LB21a\n    if (this.LB21a && (this.curClass === HY || this.curClass === BA)) {\n      shouldBreak = false;\n      this.LB21a = false;\n    } else {\n      this.LB21a = this.curClass === HL;\n    }\n\n    // Rule LB30a\n    if (this.curClass === RI) {\n      this.LB30a++;\n      if (this.LB30a == 2 && this.nextClass === RI) {\n        shouldBreak = true;\n        this.LB30a = 0;\n      }\n    } else {\n      this.LB30a = 0;\n    }\n    this.curClass = this.nextClass;\n    return shouldBreak;\n  };\n  _proto.nextBreak = function nextBreak() {\n    // get the first char if we're at the beginning of the string\n    if (this.curClass == null) {\n      var firstClass = this.nextCharClass();\n      this.curClass = mapFirst(firstClass);\n      this.nextClass = firstClass;\n      this.LB8a = firstClass === ZWJ;\n      this.LB30a = 0;\n    }\n    while (this.pos < this.string.length) {\n      this.lastPos = this.pos;\n      var lastClass = this.nextClass;\n      this.nextClass = this.nextCharClass();\n\n      // explicit newline\n      if (this.curClass === BK || this.curClass === CR && this.nextClass !== LF) {\n        this.curClass = mapFirst(mapClass(this.nextClass));\n        return new Break(this.lastPos, true);\n      }\n      var shouldBreak = this.getSimpleBreak();\n      if (shouldBreak === null) {\n        shouldBreak = this.getPairTableBreak(lastClass);\n      }\n\n      // Rule LB8a\n      this.LB8a = this.nextClass === ZWJ;\n      if (shouldBreak) {\n        return new Break(this.lastPos);\n      }\n    }\n    if (this.lastPos < this.string.length) {\n      this.lastPos = this.string.length;\n      return new Break(this.string.length);\n    }\n    return null;\n  };\n  return LineBreaker;\n}();\nmodule.exports = LineBreaker;\n\n/***/ }),\n\n/***/ 4927:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!__webpack_require__.g.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = __webpack_require__.g.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n\n\n/***/ }),\n\n/***/ 384:\n/***/ (function(module) {\n\nmodule.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n\n/***/ }),\n\n/***/ 5955:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n\n\nvar isArgumentsObject = __webpack_require__(2584);\nvar isGeneratorFunction = __webpack_require__(8662);\nvar whichTypedArray = __webpack_require__(6430);\nvar isTypedArray = __webpack_require__(5692);\n\nfunction uncurryThis(f) {\n  return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n  var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n  var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n  if (typeof value !== 'object') {\n    return false;\n  }\n  try {\n    prototypeValueOf(value);\n    return true;\n  } catch(e) {\n    return false;\n  }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n    return ArrayBuffer.isView(value);\n  }\n\n  return (\n    isTypedArray(value) ||\n    isDataView(value)\n  );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n  return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n  return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n  return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n  return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n  return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n  return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n  return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n  return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n  return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n  return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n  return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n  return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n  typeof Map !== 'undefined' &&\n  isMapToString(new Map())\n);\n\nfunction isMap(value) {\n  if (typeof Map === 'undefined') {\n    return false;\n  }\n\n  return isMapToString.working\n    ? isMapToString(value)\n    : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n  return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n  typeof Set !== 'undefined' &&\n  isSetToString(new Set())\n);\nfunction isSet(value) {\n  if (typeof Set === 'undefined') {\n    return false;\n  }\n\n  return isSetToString.working\n    ? isSetToString(value)\n    : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n  return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n  typeof WeakMap !== 'undefined' &&\n  isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n  if (typeof WeakMap === 'undefined') {\n    return false;\n  }\n\n  return isWeakMapToString.working\n    ? isWeakMapToString(value)\n    : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n  return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n  typeof WeakSet !== 'undefined' &&\n  isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n  return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n  return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n  if (typeof ArrayBuffer === 'undefined') {\n    return false;\n  }\n\n  return isArrayBufferToString.working\n    ? isArrayBufferToString(value)\n    : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n  return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  typeof DataView !== 'undefined' &&\n  isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n  if (typeof DataView === 'undefined') {\n    return false;\n  }\n\n  return isDataViewToString.working\n    ? isDataViewToString(value)\n    : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n  return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n  if (typeof SharedArrayBufferCopy === 'undefined') {\n    return false;\n  }\n\n  if (typeof isSharedArrayBufferToString.working === 'undefined') {\n    isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n  }\n\n  return isSharedArrayBufferToString.working\n    ? isSharedArrayBufferToString(value)\n    : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n  return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n  return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n  return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n  return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n  return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n  return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n  return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n  return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n  return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n  return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n  return (\n    isNumberObject(value) ||\n    isStringObject(value) ||\n    isBooleanObject(value) ||\n    isBigIntObject(value) ||\n    isSymbolObject(value)\n  );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n  return typeof Uint8Array !== 'undefined' && (\n    isArrayBuffer(value) ||\n    isSharedArrayBuffer(value)\n  );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n  Object.defineProperty(exports, method, {\n    enumerable: false,\n    value: function() {\n      throw new Error(method + ' is not supported in userland');\n    }\n  });\n});\n\n\n/***/ }),\n\n/***/ 9539:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/* provided dependency */ var process = __webpack_require__(4155);\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n  function getOwnPropertyDescriptors(obj) {\n    var keys = Object.keys(obj);\n    var descriptors = {};\n    for (var i = 0; i < keys.length; i++) {\n      descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n    }\n    return descriptors;\n  };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  if (typeof process !== 'undefined' && process.noDeprecation === true) {\n    return fn;\n  }\n\n  // Allow for deprecating things in the process of starting up.\n  if (typeof process === 'undefined') {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n  var debugEnv = process.env.NODE_DEBUG;\n  debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n    .replace(/\\*/g, '.*')\n    .replace(/,/g, '$|^')\n    .toUpperCase();\n  debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (debugEnvRegex.test(set)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').slice(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.slice(1, -1);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = __webpack_require__(5955);\n\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = __webpack_require__(384);\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = __webpack_require__(5717);\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n  if (typeof original !== 'function')\n    throw new TypeError('The \"original\" argument must be of type Function');\n\n  if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n    var fn = original[kCustomPromisifiedSymbol];\n    if (typeof fn !== 'function') {\n      throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n    }\n    Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n      value: fn, enumerable: false, writable: false, configurable: true\n    });\n    return fn;\n  }\n\n  function fn() {\n    var promiseResolve, promiseReject;\n    var promise = new Promise(function (resolve, reject) {\n      promiseResolve = resolve;\n      promiseReject = reject;\n    });\n\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n    args.push(function (err, value) {\n      if (err) {\n        promiseReject(err);\n      } else {\n        promiseResolve(value);\n      }\n    });\n\n    try {\n      original.apply(this, args);\n    } catch (err) {\n      promiseReject(err);\n    }\n\n    return promise;\n  }\n\n  Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n  if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n    value: fn, enumerable: false, writable: false, configurable: true\n  });\n  return Object.defineProperties(\n    fn,\n    getOwnPropertyDescriptors(original)\n  );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n  // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n  // Because `null` is a special error value in callbacks which means \"no error\n  // occurred\", we error-wrap so the callback consumer can distinguish between\n  // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n  if (!reason) {\n    var newReason = new Error('Promise was rejected with a falsy value');\n    newReason.reason = reason;\n    reason = newReason;\n  }\n  return cb(reason);\n}\n\nfunction callbackify(original) {\n  if (typeof original !== 'function') {\n    throw new TypeError('The \"original\" argument must be of type Function');\n  }\n\n  // We DO NOT return the promise as it gives the user a false sense that\n  // the promise is actually somehow related to the callback's execution\n  // and that the callback throwing will reject the promise.\n  function callbackified() {\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n\n    var maybeCb = args.pop();\n    if (typeof maybeCb !== 'function') {\n      throw new TypeError('The last argument must be of type Function');\n    }\n    var self = this;\n    var cb = function() {\n      return maybeCb.apply(self, arguments);\n    };\n    // In true node style we process the callback on `nextTick` with all the\n    // implications (stack, `uncaughtException`, `async_hooks`)\n    original.apply(this, args)\n      .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n            function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n  }\n\n  Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n  Object.defineProperties(callbackified,\n                          getOwnPropertyDescriptors(original));\n  return callbackified;\n}\nexports.callbackify = callbackify;\n\n\n/***/ }),\n\n/***/ 6430:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar forEach = __webpack_require__(4029);\nvar availableTypedArrays = __webpack_require__(3083);\nvar callBound = __webpack_require__(1924);\nvar gOPD = __webpack_require__(7296);\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = __webpack_require__(6410)();\n\nvar g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof g[typedArray] === 'function') {\n\t\t\tvar arr = new g[typedArray]();\n\t\t\tif (Symbol.toStringTag in arr) {\n\t\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t\t}\n\t\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t\t}\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = __webpack_require__(5692);\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n\n\n/***/ }),\n\n/***/ 6513:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// This file is just added for convenience so this repository can be\n// directly checked out into a project's deps folder\nmodule.exports = __webpack_require__(5011);\n\n\n/***/ }),\n\n/***/ 5011:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n(function () {\n  var sax;\n\n  if (\n     true &&\n    module.exports &&\n    !__webpack_require__.g.xmldocAssumeBrowser\n  ) {\n    // We're being used in a Node-like environment\n    sax = __webpack_require__(6099);\n  } else {\n    // assume it's attached to the Window object in a browser\n    sax = this.sax;\n\n    if (!sax) {\n      // no sax for you!\n      throw new Error(\n        \"Expected sax to be defined. Make sure you're including sax.js before this file.\",\n      );\n    }\n  }\n\n  /*\n   * XmlElement is our basic building block. Everything is an XmlElement; even XmlDocument\n   * behaves like an XmlElement by inheriting its attributes and functions.\n   */\n\n  function XmlElement(tag) {\n    // Capture the parser object off of the XmlDocument delegate\n    var parser = delegates[delegates.length - 1].parser;\n\n    this.name = tag.name;\n    this.attr = tag.attributes;\n    this.val = \"\";\n    this.children = [];\n    this.firstChild = null;\n    this.lastChild = null;\n\n    // Assign parse information\n    this.line = parser.line;\n    this.column = parser.column;\n    this.position = parser.position;\n    this.startTagPosition = parser.startTagPosition;\n  }\n\n  // Private methods\n\n  XmlElement.prototype._addChild = function (child) {\n    // add to our children array\n    this.children.push(child);\n\n    // update first/last pointers\n    if (!this.firstChild) this.firstChild = child;\n    this.lastChild = child;\n  };\n\n  // SaxParser handlers\n\n  XmlElement.prototype._opentag = function (tag) {\n    var child = new XmlElement(tag);\n\n    this._addChild(child);\n\n    delegates.unshift(child);\n  };\n\n  XmlElement.prototype._closetag = function () {\n    delegates.shift();\n  };\n\n  XmlElement.prototype._text = function (text) {\n    if (typeof this.children === \"undefined\") return;\n\n    this.val += text;\n\n    this._addChild(new XmlTextNode(text));\n  };\n\n  XmlElement.prototype._cdata = function (cdata) {\n    this.val += cdata;\n\n    this._addChild(new XmlCDataNode(cdata));\n  };\n\n  XmlElement.prototype._comment = function (comment) {\n    if (typeof this.children === \"undefined\") return;\n\n    this._addChild(new XmlCommentNode(comment));\n  };\n\n  XmlElement.prototype._error = function (err) {\n    throw err;\n  };\n\n  // Useful functions\n\n  XmlElement.prototype.eachChild = function (iterator, context) {\n    for (var i = 0, l = this.children.length; i < l; i++)\n      if (this.children[i].type === \"element\")\n        if (\n          iterator.call(context, this.children[i], i, this.children) === false\n        )\n          return;\n  };\n\n  XmlElement.prototype.childNamed = function (name) {\n    for (var i = 0, l = this.children.length; i < l; i++) {\n      var child = this.children[i];\n      if (child.name === name) return child;\n    }\n    return undefined;\n  };\n\n  XmlElement.prototype.childrenNamed = function (name) {\n    var matches = [];\n\n    for (var i = 0, l = this.children.length; i < l; i++)\n      if (this.children[i].name === name) matches.push(this.children[i]);\n\n    return matches;\n  };\n\n  XmlElement.prototype.childWithAttribute = function (name, value) {\n    for (var i = 0, l = this.children.length; i < l; i++) {\n      var child = this.children[i];\n      if (\n        child.type === \"element\" &&\n        ((value && child.attr[name] === value) || (!value && child.attr[name]))\n      )\n        return child;\n    }\n    return undefined;\n  };\n  \n  XmlElement.prototype.descendantsNamed = function (name) {\n     var matches = [];\n\n     for (var i = 0, l = this.children.length; i < l; i++) {\n       var child = this.children[i];\n       if (child.type === \"element\") {\n         if (child.name === name) matches.push(child);\n         matches = matches.concat(child.descendantsNamed(name));\n       }\n     }\n\n     return matches;\n   };\n\n  XmlElement.prototype.descendantWithPath = function (path) {\n    var descendant = this;\n    var components = path.split(\".\");\n\n    for (var i = 0, l = components.length; i < l; i++)\n      if (descendant && descendant.type === \"element\")\n        descendant = descendant.childNamed(components[i]);\n      else return undefined;\n\n    return descendant;\n  };\n\n  XmlElement.prototype.valueWithPath = function (path) {\n    var components = path.split(\"@\");\n    var descendant = this.descendantWithPath(components[0]);\n    if (descendant)\n      return components.length > 1\n        ? descendant.attr[components[1]]\n        : descendant.val;\n    else return undefined;\n  };\n\n  // String formatting (for debugging)\n\n  XmlElement.prototype.toString = function (options) {\n    return this.toStringWithIndent(\"\", options);\n  };\n\n  XmlElement.prototype.toStringWithIndent = function (indent, options) {\n    var s = indent + \"<\" + this.name;\n    var linebreak = options && options.compressed ? \"\" : \"\\n\";\n    var preserveWhitespace = options && options.preserveWhitespace;\n\n    for (var name in this.attr)\n      if (Object.prototype.hasOwnProperty.call(this.attr, name))\n        s += \" \" + name + '=\"' + escapeXML(this.attr[name]) + '\"';\n\n    if (this.children.length === 1 && this.children[0].type !== \"element\") {\n      s += \">\" + this.children[0].toString(options) + \"</\" + this.name + \">\";\n    } else if (this.children.length) {\n      s += \">\" + linebreak;\n\n      var childIndent = indent + (options && options.compressed ? \"\" : \"  \");\n\n      for (var i = 0, l = this.children.length; i < l; i++) {\n        s +=\n          this.children[i].toStringWithIndent(childIndent, options) + linebreak;\n      }\n\n      s += indent + \"</\" + this.name + \">\";\n    } else if (options && options.html) {\n      var whiteList = [\n        \"area\",\n        \"base\",\n        \"br\",\n        \"col\",\n        \"embed\",\n        \"frame\",\n        \"hr\",\n        \"img\",\n        \"input\",\n        \"keygen\",\n        \"link\",\n        \"menuitem\",\n        \"meta\",\n        \"param\",\n        \"source\",\n        \"track\",\n        \"wbr\",\n      ];\n      if (whiteList.indexOf(this.name) !== -1) s += \"/>\";\n      else s += \"></\" + this.name + \">\";\n    } else {\n      s += \"/>\";\n    }\n\n    return s;\n  };\n\n  // Alternative XML nodes\n\n  function XmlTextNode(text) {\n    this.text = text;\n  }\n\n  XmlTextNode.prototype.toString = function (options) {\n    return formatText(escapeXML(this.text), options);\n  };\n\n  XmlTextNode.prototype.toStringWithIndent = function (indent, options) {\n    return indent + this.toString(options);\n  };\n\n  function XmlCDataNode(cdata) {\n    this.cdata = cdata;\n  }\n\n  XmlCDataNode.prototype.toString = function (options) {\n    return \"<![CDATA[\" + formatText(this.cdata, options) + \"]]>\";\n  };\n\n  XmlCDataNode.prototype.toStringWithIndent = function (indent, options) {\n    return indent + this.toString(options);\n  };\n\n  function XmlCommentNode(comment) {\n    this.comment = comment;\n  }\n\n  XmlCommentNode.prototype.toString = function (options) {\n    return \"<!--\" + formatText(escapeXML(this.comment), options) + \"-->\";\n  };\n\n  XmlCommentNode.prototype.toStringWithIndent = function (indent, options) {\n    return indent + this.toString(options);\n  };\n\n  // Node type tag\n\n  XmlElement.prototype.type = \"element\";\n  XmlTextNode.prototype.type = \"text\";\n  XmlCDataNode.prototype.type = \"cdata\";\n  XmlCommentNode.prototype.type = \"comment\";\n\n  /*\n   * XmlDocument is the class we expose to the user; it uses the sax parser to create a hierarchy\n   * of XmlElements.\n   */\n\n  function XmlDocument(xml) {\n    xml && (xml = xml.toString().trim());\n\n    if (!xml) throw new Error(\"No XML to parse!\");\n\n    // Stores doctype (if defined)\n    this.doctype = \"\";\n\n    // Expose the parser to the other delegates while the parser is running\n    this.parser = sax.parser(true); // strict\n    addParserEvents(this.parser);\n\n    // We'll use the file-scoped \"delegates\" var to remember what elements we're currently\n    // parsing; they will push and pop off the stack as we get deeper into the XML hierarchy.\n    // It's safe to use a global because JS is single-threaded.\n    delegates = [this];\n\n    this.parser.write(xml);\n\n    // Remove the parser as it is no longer needed and should not be exposed to clients\n    delete this.parser;\n  }\n\n  // make XmlDocument inherit XmlElement's methods\n  extend(XmlDocument.prototype, XmlElement.prototype);\n\n  XmlDocument.prototype._opentag = function (tag) {\n    if (typeof this.children === \"undefined\")\n      // the first tag we encounter should be the root - we'll \"become\" the root XmlElement\n      XmlElement.call(this, tag);\n    // all other tags will be the root element's children\n    else XmlElement.prototype._opentag.apply(this, arguments);\n  };\n\n  XmlDocument.prototype._doctype = function (doctype) {\n    this.doctype += doctype;\n  };\n\n  // file-scoped global stack of delegates\n  var delegates = null;\n\n  /*\n   * Helper functions\n   */\n\n  function addParserEvents(parser) {\n    parser.onopentag = parser_opentag;\n    parser.onclosetag = parser_closetag;\n    parser.ontext = parser_text;\n    parser.oncdata = parser_cdata;\n    parser.oncomment = parser_comment;\n    parser.ondoctype = parser_doctype;\n    parser.onerror = parser_error;\n  }\n\n  // create these closures and cache them by keeping them file-scoped\n  function parser_opentag() {\n    delegates[0] && delegates[0]._opentag.apply(delegates[0], arguments);\n  }\n  function parser_closetag() {\n    delegates[0] && delegates[0]._closetag.apply(delegates[0], arguments);\n  }\n  function parser_text() {\n    delegates[0] && delegates[0]._text.apply(delegates[0], arguments);\n  }\n  function parser_cdata() {\n    delegates[0] && delegates[0]._cdata.apply(delegates[0], arguments);\n  }\n  function parser_comment() {\n    delegates[0] && delegates[0]._comment.apply(delegates[0], arguments);\n  }\n  function parser_doctype() {\n    delegates[0] && delegates[0]._doctype.apply(delegates[0], arguments);\n  }\n  function parser_error() {\n    delegates[0] && delegates[0]._error.apply(delegates[0], arguments);\n  }\n\n  // a relatively standard extend method\n  function extend(destination, source) {\n    for (var prop in source)\n      if (source.hasOwnProperty(prop)) destination[prop] = source[prop];\n  }\n\n  // escapes XML entities like \"<\", \"&\", etc.\n  function escapeXML(value) {\n    return value\n      .toString()\n      .replace(/&/g, \"&amp;\")\n      .replace(/</g, \"&lt;\")\n      .replace(/>/g, \"&gt;\")\n      .replace(/'/g, \"&apos;\")\n      .replace(/\"/g, \"&quot;\");\n  }\n\n  // formats some text for debugging given a few options\n  function formatText(text, options) {\n    var finalText = text;\n\n    if (options && options.trimmed && text.length > 25) {\n      finalText = finalText.substring(0, 25).trim() + \"…\";\n    }\n\n    if (!(options && options.preserveWhitespace)) {\n      finalText = finalText.trim();\n    }\n\n    return finalText;\n  }\n\n  // Are we being used in a Node-like environment?\n  if (\n     true &&\n    module.exports &&\n    !__webpack_require__.g.xmldocAssumeBrowser\n  ) {\n    module.exports.XmlDocument = XmlDocument;\n    module.exports.XmlElement = XmlElement;\n    module.exports.XmlTextNode = XmlTextNode;\n    module.exports.XmlCDataNode = XmlCDataNode;\n    module.exports.XmlCommentNode = XmlCommentNode;\n  } else {\n    this.XmlDocument = XmlDocument;\n    this.XmlElement = XmlElement;\n    this.XmlTextNode = XmlTextNode;\n    this.XmlCDataNode = XmlCDataNode;\n    this.XmlCommentNode = XmlCommentNode;\n  }\n})();\n\n\n/***/ }),\n\n/***/ 6255:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Internet Explorer polyfills\nif (typeof window !== 'undefined' && !window.Promise) {\n\t__webpack_require__(3867);\n}\n__webpack_require__(4667);\n\nvar fetchUrl = function (url, headers) {\n\treturn new Promise(function (resolve, reject) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', url, true);\n\t\tfor (var headerName in headers) {\n\t\t\txhr.setRequestHeader(headerName, headers[headerName]);\n\t\t}\n\t\txhr.responseType = 'arraybuffer';\n\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState !== 4) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar ok = xhr.status >= 200 && xhr.status < 300;\n\t\t\tif (!ok) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\treject(new TypeError('Failed to fetch (url: \"' + url + '\")'));\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t};\n\n\t\txhr.onload = function () {\n\t\t\tvar ok = xhr.status >= 200 && xhr.status < 300;\n\t\t\tif (ok) {\n\t\t\t\tresolve(xhr.response);\n\t\t\t}\n\t\t};\n\n\t\txhr.onerror = function () {\n\t\t\tsetTimeout(function () {\n\t\t\t\treject(new TypeError('Network request failed (url: \"' + url + '\")'));\n\t\t\t}, 0);\n\t\t};\n\n\t\txhr.ontimeout = function () {\n\t\t\tsetTimeout(function () {\n\t\t\t\treject(new TypeError('Network request failed (url: \"' + url + '\")'));\n\t\t\t}, 0);\n\t\t};\n\n\t\txhr.send();\n\t});\n};\n\nfunction URLBrowserResolver(fs) {\n\tthis.fs = fs;\n\tthis.resolving = {};\n}\n\nURLBrowserResolver.prototype.resolve = function (url, headers) {\n\tif (!this.resolving[url]) {\n\t\tvar _this = this;\n\t\tthis.resolving[url] = new Promise(function (resolve, reject) {\n\t\t\tif (url.toLowerCase().indexOf('https://') === 0 || url.toLowerCase().indexOf('http://') === 0) {\n\t\t\t\tif (_this.fs.existsSync(url)) {\n\t\t\t\t\t// url was downloaded earlier\n\t\t\t\t\tresolve();\n\t\t\t\t} else {\n\t\t\t\t\tfetchUrl(url, headers).then(function (buffer) {\n\t\t\t\t\t\t_this.fs.writeFileSync(url, buffer);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}, function (result) {\n\t\t\t\t\t\treject(result);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// cannot be resolved\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\t}\n\n\treturn this.resolving[url];\n}\n\nURLBrowserResolver.prototype.resolved = function () {\n\tvar _this = this;\n\treturn new Promise(function (resolve, reject) {\n\t\tPromise.all(Object.values(_this.resolving)).then(function () {\n\t\t\tresolve();\n\t\t}, function (result) {\n\t\t\treject(result);\n\t\t});\n\t});\n}\n\nmodule.exports = URLBrowserResolver;\n\n\n/***/ }),\n\n/***/ 4275:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\nvar isFunction = (__webpack_require__(6225).isFunction);\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar isNull = (__webpack_require__(6225).isNull);\nvar FileSaver = __webpack_require__(2984);\nvar saveAs = FileSaver.saveAs;\n\nvar defaultClientFonts = {\n\tRoboto: {\n\t\tnormal: 'Roboto-Regular.ttf',\n\t\tbold: 'Roboto-Medium.ttf',\n\t\titalics: 'Roboto-Italic.ttf',\n\t\tbolditalics: 'Roboto-MediumItalic.ttf'\n\t}\n};\n\nfunction Document(docDefinition, tableLayouts, fonts, vfs) {\n\tthis.docDefinition = docDefinition;\n\tthis.tableLayouts = tableLayouts || null;\n\tthis.fonts = fonts || defaultClientFonts;\n\tthis.vfs = vfs;\n}\n\nfunction canCreatePdf() {\n\t// Ensure the browser provides the level of support needed\n\ttry {\n\t\tvar arr = new Uint8Array(1)\n\t\tvar proto = { foo: function () { return 42 } }\n\t\tObject.setPrototypeOf(proto, Uint8Array.prototype)\n\t\tObject.setPrototypeOf(arr, proto)\n\t\treturn arr.foo() === 42\n\t} catch (e) {\n\t\treturn false\n\t}\n}\n\nDocument.prototype._createDoc = function (options, cb) {\n\tvar getExtendedUrl = function (url) {\n\t\tif (typeof url === 'object') {\n\t\t\treturn { url: url.url, headers: url.headers };\n\t\t}\n\n\t\treturn { url: url, headers: {} };\n\t};\n\n\toptions = options || {};\n\tif (this.tableLayouts) {\n\t\toptions.tableLayouts = this.tableLayouts;\n\t}\n\n\tvar PdfPrinter = __webpack_require__(8617);\n\n\tvar printer = new PdfPrinter(this.fonts);\n\t(__webpack_require__(3857).bindFS)(this.vfs); // bind virtual file system to file system\n\n\tif (!isFunction(cb)) {\n\t\tvar doc = printer.createPdfKitDocument(this.docDefinition, options);\n\n\t\treturn doc;\n\t}\n\n\tvar URLBrowserResolver = __webpack_require__(6255);\n\tvar urlResolver = new URLBrowserResolver(__webpack_require__(3857));\n\n\tfor (var font in this.fonts) {\n\t\tif (this.fonts.hasOwnProperty(font)) {\n\t\t\tif (this.fonts[font].normal) {\n\t\t\t\tif (Array.isArray(this.fonts[font].normal)) { // TrueType Collection\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].normal[0]);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].normal[0] = url.url;\n\t\t\t\t} else {\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].normal);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].normal = url.url;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.fonts[font].bold) {\n\t\t\t\tif (Array.isArray(this.fonts[font].bold)) { // TrueType Collection\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bold[0]);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].bold[0] = url.url;\n\t\t\t\t} else {\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bold);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].bold = url.url;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.fonts[font].italics) {\n\t\t\t\tif (Array.isArray(this.fonts[font].italics)) { // TrueType Collection\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].italics[0]);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].italics[0] = url.url;\n\t\t\t\t} else {\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].italics);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].italics = url.url;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.fonts[font].bolditalics) {\n\t\t\t\tif (Array.isArray(this.fonts[font].bolditalics)) { // TrueType Collection\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bolditalics[0]);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].bolditalics[0] = url.url;\n\t\t\t\t} else {\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bolditalics);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].bolditalics = url.url;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.docDefinition.images) {\n\t\tfor (var image in this.docDefinition.images) {\n\t\t\tif (this.docDefinition.images.hasOwnProperty(image)) {\n\t\t\t\tvar url = getExtendedUrl(this.docDefinition.images[image]);\n\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\tthis.docDefinition.images[image] = url.url;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar _this = this;\n\n\turlResolver.resolved().then(function () {\n\t\tvar doc = printer.createPdfKitDocument(_this.docDefinition, options);\n\n\t\tcb(doc);\n\t}, function (result) {\n\t\tthrow result;\n\t});\n};\n\nDocument.prototype._flushDoc = function (doc, callback) {\n\tvar chunks = [];\n\tvar result;\n\n\tdoc.on('readable', function () {\n\t\tvar chunk;\n\t\twhile ((chunk = doc.read(9007199254740991)) !== null) {\n\t\t\tchunks.push(chunk);\n\t\t}\n\t});\n\tdoc.on('end', function () {\n\t\tresult = Buffer.concat(chunks);\n\t\tcallback(result, doc._pdfMakePages);\n\t});\n\tdoc.end();\n};\n\nDocument.prototype._getPages = function (options, cb) {\n\tif (!cb) {\n\t\tthrow '_getPages is an async method and needs a callback argument';\n\t}\n\tvar _this = this;\n\n\tthis._createDoc(options, function (doc) {\n\t\t_this._flushDoc(doc, function (ignoreBuffer, pages) {\n\t\t\tcb(pages);\n\t\t});\n\t});\n};\n\nDocument.prototype._bufferToBlob = function (buffer) {\n\tvar blob;\n\ttry {\n\t\tblob = new Blob([buffer], { type: 'application/pdf' });\n\t} catch (e) {\n\t\t// Old browser which can't handle it without making it an byte array (ie10)\n\t\tif (e.name === 'InvalidStateError') {\n\t\t\tvar byteArray = new Uint8Array(buffer);\n\t\t\tblob = new Blob([byteArray.buffer], { type: 'application/pdf' });\n\t\t}\n\t}\n\n\tif (!blob) {\n\t\tthrow 'Could not generate blob';\n\t}\n\n\treturn blob;\n};\n\nDocument.prototype._openWindow = function () {\n\t// we have to open the window immediately and store the reference\n\t// otherwise popup blockers will stop us\n\tvar win = window.open('', '_blank');\n\tif (win === null) {\n\t\tthrow 'Open PDF in new window blocked by browser';\n\t}\n\n\treturn win;\n};\n\nDocument.prototype._openPdf = function (options, win) {\n\tif (!win) {\n\t\twin = this._openWindow();\n\t}\n\ttry {\n\t\tthis.getBlob(function (result) {\n\t\t\tvar urlCreator = window.URL || window.webkitURL;\n\t\t\tvar pdfUrl = urlCreator.createObjectURL(result);\n\t\t\twin.location.href = pdfUrl;\n\n\t\t\t/* temporarily disabled\n\t\t\tif (win !== window) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tif (isNull(win.window)) { // is closed by AdBlock\n\t\t\t\t\t\twindow.location.href = pdfUrl; // open in actual window\n\t\t\t\t\t}\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t\t*/\n\t\t}, options);\n\t} catch (e) {\n\t\twin.close();\n\t\tthrow e;\n\t}\n};\n\nDocument.prototype.open = function (options, win) {\n\toptions = options || {};\n\toptions.autoPrint = false;\n\twin = win || null;\n\n\tthis._openPdf(options, win);\n};\n\n\nDocument.prototype.print = function (options, win) {\n\toptions = options || {};\n\toptions.autoPrint = true;\n\twin = win || null;\n\n\tthis._openPdf(options, win);\n};\n\n/**\n * download(defaultFileName = 'file.pdf', cb = null, options = {})\n * or\n * download(cb, options = {})\n */\nDocument.prototype.download = function (defaultFileName, cb, options) {\n\tif (isFunction(defaultFileName)) {\n\t\tif (!isUndefined(cb)) {\n\t\t\toptions = cb;\n\t\t}\n\t\tcb = defaultFileName;\n\t\tdefaultFileName = null;\n\t}\n\n\tdefaultFileName = defaultFileName || 'file.pdf';\n\tthis.getBlob(function (result) {\n\t\tsaveAs(result, defaultFileName);\n\n\t\tif (isFunction(cb)) {\n\t\t\tcb();\n\t\t}\n\t}, options);\n};\n\nDocument.prototype.getBase64 = function (cb, options) {\n\tif (!cb) {\n\t\tthrow 'getBase64 is an async method and needs a callback argument';\n\t}\n\tthis.getBuffer(function (buffer) {\n\t\tcb(buffer.toString('base64'));\n\t}, options);\n};\n\nDocument.prototype.getDataUrl = function (cb, options) {\n\tif (!cb) {\n\t\tthrow 'getDataUrl is an async method and needs a callback argument';\n\t}\n\tthis.getBuffer(function (buffer) {\n\t\tcb('data:application/pdf;base64,' + buffer.toString('base64'));\n\t}, options);\n};\n\nDocument.prototype.getBlob = function (cb, options) {\n\tif (!cb) {\n\t\tthrow 'getBlob is an async method and needs a callback argument';\n\t}\n\tvar that = this;\n\tthis.getBuffer(function (result) {\n\t\tvar blob = that._bufferToBlob(result);\n\t\tcb(blob);\n\t}, options);\n};\n\nDocument.prototype.getBuffer = function (cb, options) {\n\tif (!cb) {\n\t\tthrow 'getBuffer is an async method and needs a callback argument';\n\t}\n\n\tvar _this = this;\n\n\tthis._createDoc(options, function (doc) {\n\t\t_this._flushDoc(doc, function (buffer) {\n\t\t\tcb(buffer);\n\t\t});\n\t});\n};\n\nDocument.prototype.getStream = function (options, cb) {\n\tif (!isFunction(cb)) {\n\t\tvar doc = this._createDoc(options);\n\t\treturn doc;\n\t}\n\n\tthis._createDoc(options, function (doc) {\n\t\tcb(doc);\n\t});\n};\n\nmodule.exports = {\n\tcreatePdf: function (docDefinition, tableLayouts, fonts, vfs) {\n\t\tif (!canCreatePdf()) {\n\t\t\tthrow 'Your browser does not provide the level of support needed';\n\t\t}\n\t\treturn new Document(\n\t\t\tdocDefinition,\n\t\t\ttableLayouts || __webpack_require__.g.pdfMake.tableLayouts,\n\t\t\tfonts || __webpack_require__.g.pdfMake.fonts,\n\t\t\tvfs || __webpack_require__.g.pdfMake.vfs\n\t\t);\n\t}\n};\n\n\n/***/ }),\n\n/***/ 3857:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\nvar __dirname = \"/\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\nfunction VirtualFileSystem() {\n\tthis.fileSystem = {};\n\tthis.dataSystem = {};\n}\n\nVirtualFileSystem.prototype.existsSync = function (filename) {\n\tfilename = fixFilename(filename);\n\treturn typeof this.fileSystem[filename] !== 'undefined'\n\t\t|| typeof this.dataSystem[filename] !== 'undefined';\n}\n\nVirtualFileSystem.prototype.readFileSync = function (filename, options) {\n\tfilename = fixFilename(filename);\n\n\tvar dataContent = this.dataSystem[filename];\n\tif (typeof dataContent === 'string' && options === 'utf8') {\n\t\treturn dataContent;\n\t}\n\n\tif (dataContent) {\n\t\treturn new Buffer(dataContent, typeof dataContent === 'string' ? 'base64' : undefined);\n\t}\n\n\tvar content = this.fileSystem[filename];\n\tif (content) {\n\t\treturn content;\n\t}\n\n\tthrow 'File \\'' + filename + '\\' not found in virtual file system';\n};\n\nVirtualFileSystem.prototype.writeFileSync = function (filename, content) {\n\tthis.fileSystem[fixFilename(filename)] = content;\n};\n\nVirtualFileSystem.prototype.bindFS = function (data) {\n\tthis.dataSystem = data || {};\n};\n\n\nfunction fixFilename(filename) {\n\tif (filename.indexOf(__dirname) === 0) {\n\t\tfilename = filename.substring(__dirname.length);\n\t}\n\n\tif (filename.indexOf('/') === 0) {\n\t\tfilename = filename.substring(1);\n\t}\n\n\treturn filename;\n}\n\nmodule.exports = new VirtualFileSystem();\n\n\n/***/ }),\n\n/***/ 4498:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isString = (__webpack_require__(6225).isString);\n\nfunction buildColumnWidths(columns, availableWidth) {\n\tvar autoColumns = [],\n\t\tautoMin = 0, autoMax = 0,\n\t\tstarColumns = [],\n\t\tstarMaxMin = 0,\n\t\tstarMaxMax = 0,\n\t\tfixedColumns = [],\n\t\tinitial_availableWidth = availableWidth;\n\n\tcolumns.forEach(function (column) {\n\t\tif (isAutoColumn(column)) {\n\t\t\tautoColumns.push(column);\n\t\t\tautoMin += column._minWidth;\n\t\t\tautoMax += column._maxWidth;\n\t\t} else if (isStarColumn(column)) {\n\t\t\tstarColumns.push(column);\n\t\t\tstarMaxMin = Math.max(starMaxMin, column._minWidth);\n\t\t\tstarMaxMax = Math.max(starMaxMax, column._maxWidth);\n\t\t} else {\n\t\t\tfixedColumns.push(column);\n\t\t}\n\t});\n\n\tfixedColumns.forEach(function (col) {\n\t\t// width specified as %\n\t\tif (isString(col.width) && /\\d+%/.test(col.width)) {\n\t\t\tcol.width = parseFloat(col.width) * initial_availableWidth / 100;\n\t\t}\n\t\tif (col.width < (col._minWidth) && col.elasticWidth) {\n\t\t\tcol._calcWidth = col._minWidth;\n\t\t} else {\n\t\t\tcol._calcWidth = col.width;\n\t\t}\n\n\t\tavailableWidth -= col._calcWidth;\n\t});\n\n\t// http://www.freesoft.org/CIE/RFC/1942/18.htm\n\t// http://www.w3.org/TR/CSS2/tables.html#width-layout\n\t// http://dev.w3.org/csswg/css3-tables-algorithms/Overview.src.htm\n\tvar minW = autoMin + starMaxMin * starColumns.length;\n\tvar maxW = autoMax + starMaxMax * starColumns.length;\n\tif (minW >= availableWidth) {\n\t\t// case 1 - there's no way to fit all columns within available width\n\t\t// that's actually pretty bad situation with PDF as we have no horizontal scroll\n\t\t// no easy workaround (unless we decide, in the future, to split single words)\n\t\t// currently we simply use minWidths for all columns\n\t\tautoColumns.forEach(function (col) {\n\t\t\tcol._calcWidth = col._minWidth;\n\t\t});\n\n\t\tstarColumns.forEach(function (col) {\n\t\t\tcol._calcWidth = starMaxMin; // starMaxMin already contains padding\n\t\t});\n\t} else {\n\t\tif (maxW < availableWidth) {\n\t\t\t// case 2 - we can fit rest of the table within available space\n\t\t\tautoColumns.forEach(function (col) {\n\t\t\t\tcol._calcWidth = col._maxWidth;\n\t\t\t\tavailableWidth -= col._calcWidth;\n\t\t\t});\n\t\t} else {\n\t\t\t// maxW is too large, but minW fits within available width\n\t\t\tvar W = availableWidth - minW;\n\t\t\tvar D = maxW - minW;\n\n\t\t\tautoColumns.forEach(function (col) {\n\t\t\t\tvar d = col._maxWidth - col._minWidth;\n\t\t\t\tcol._calcWidth = col._minWidth + d * W / D;\n\t\t\t\tavailableWidth -= col._calcWidth;\n\t\t\t});\n\t\t}\n\n\t\tif (starColumns.length > 0) {\n\t\t\tvar starSize = availableWidth / starColumns.length;\n\n\t\t\tstarColumns.forEach(function (col) {\n\t\t\t\tcol._calcWidth = starSize;\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction isAutoColumn(column) {\n\treturn column.width === 'auto';\n}\n\nfunction isStarColumn(column) {\n\treturn column.width === null || column.width === undefined || column.width === '*' || column.width === 'star';\n}\n\n//TODO: refactor and reuse in measureTable\nfunction measureMinMax(columns) {\n\tvar result = { min: 0, max: 0 };\n\n\tvar maxStar = { min: 0, max: 0 };\n\tvar starCount = 0;\n\n\tfor (var i = 0, l = columns.length; i < l; i++) {\n\t\tvar c = columns[i];\n\n\t\tif (isStarColumn(c)) {\n\t\t\tmaxStar.min = Math.max(maxStar.min, c._minWidth);\n\t\t\tmaxStar.max = Math.max(maxStar.max, c._maxWidth);\n\t\t\tstarCount++;\n\t\t} else if (isAutoColumn(c)) {\n\t\t\tresult.min += c._minWidth;\n\t\t\tresult.max += c._maxWidth;\n\t\t} else {\n\t\t\tresult.min += ((c.width !== undefined && c.width) || c._minWidth);\n\t\t\tresult.max += ((c.width !== undefined && c.width) || c._maxWidth);\n\t\t}\n\t}\n\n\tif (starCount) {\n\t\tresult.min += starCount * maxStar.min;\n\t\tresult.max += starCount * maxStar.max;\n\t}\n\n\treturn result;\n}\n\n/**\n * Calculates column widths\n * @private\n */\nmodule.exports = {\n\tbuildColumnWidths: buildColumnWidths,\n\tmeasureMinMax: measureMinMax,\n\tisAutoColumn: isAutoColumn,\n\tisStarColumn: isStarColumn\n};\n\n\n/***/ }),\n\n/***/ 1728:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\n\n\n\nvar TextTools = __webpack_require__(1350);\nvar StyleContextStack = __webpack_require__(7597);\nvar ColumnCalculator = __webpack_require__(4498);\nvar isString = (__webpack_require__(6225).isString);\nvar isNumber = (__webpack_require__(6225).isNumber);\nvar isObject = (__webpack_require__(6225).isObject);\nvar isArray = (__webpack_require__(6225).isArray);\nvar fontStringify = (__webpack_require__(6225).fontStringify);\nvar getNodeId = (__webpack_require__(6225).getNodeId);\nvar pack = (__webpack_require__(6225).pack);\nvar qrEncoder = __webpack_require__(145);\n\n/**\n * @private\n */\nfunction DocMeasure(fontProvider, styleDictionary, defaultStyle, imageMeasure, svgMeasure, tableLayouts, images) {\n\tthis.textTools = new TextTools(fontProvider);\n\tthis.styleStack = new StyleContextStack(styleDictionary, defaultStyle);\n\tthis.imageMeasure = imageMeasure;\n\tthis.svgMeasure = svgMeasure;\n\tthis.tableLayouts = tableLayouts;\n\tthis.images = images;\n\tthis.autoImageIndex = 1;\n}\n\n/**\n * Measures all nodes and sets min/max-width properties required for the second\n * layout-pass.\n * @param  {Object} docStructure document-definition-object\n * @return {Object}              document-measurement-object\n */\nDocMeasure.prototype.measureDocument = function (docStructure) {\n\treturn this.measureNode(docStructure);\n};\n\nDocMeasure.prototype.measureNode = function (node) {\n\n\tvar self = this;\n\n\treturn this.styleStack.auto(node, function () {\n\t\t// TODO: refactor + rethink whether this is the proper way to handle margins\n\t\tnode._margin = getNodeMargin(node);\n\n\t\tif (node.columns) {\n\t\t\treturn extendMargins(self.measureColumns(node));\n\t\t} else if (node.stack) {\n\t\t\treturn extendMargins(self.measureVerticalContainer(node));\n\t\t} else if (node.ul) {\n\t\t\treturn extendMargins(self.measureUnorderedList(node));\n\t\t} else if (node.ol) {\n\t\t\treturn extendMargins(self.measureOrderedList(node));\n\t\t} else if (node.table) {\n\t\t\treturn extendMargins(self.measureTable(node));\n\t\t} else if (node.text !== undefined) {\n\t\t\treturn extendMargins(self.measureLeaf(node));\n\t\t} else if (node.toc) {\n\t\t\treturn extendMargins(self.measureToc(node));\n\t\t} else if (node.image) {\n\t\t\treturn extendMargins(self.measureImage(node));\n\t\t} else if (node.svg) {\n\t\t\treturn extendMargins(self.measureSVG(node));\n\t\t} else if (node.canvas) {\n\t\t\treturn extendMargins(self.measureCanvas(node));\n\t\t} else if (node.qr) {\n\t\t\treturn extendMargins(self.measureQr(node));\n\t\t} else {\n\t\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\n\t\t}\n\t});\n\n\tfunction extendMargins(node) {\n\t\tvar margin = node._margin;\n\n\t\tif (margin) {\n\t\t\tnode._minWidth += margin[0] + margin[2];\n\t\t\tnode._maxWidth += margin[0] + margin[2];\n\t\t}\n\n\t\treturn node;\n\t}\n\n\tfunction getNodeMargin() {\n\n\t\tfunction processSingleMargins(node, currentMargin) {\n\t\t\tif (node.marginLeft || node.marginTop || node.marginRight || node.marginBottom) {\n\t\t\t\treturn [\n\t\t\t\t\tnode.marginLeft || currentMargin[0] || 0,\n\t\t\t\t\tnode.marginTop || currentMargin[1] || 0,\n\t\t\t\t\tnode.marginRight || currentMargin[2] || 0,\n\t\t\t\t\tnode.marginBottom || currentMargin[3] || 0\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn currentMargin;\n\t\t}\n\n\t\tfunction flattenStyleArray(styleArray) {\n\t\t\tvar flattenedStyles = {};\n\t\t\tfor (var i = styleArray.length - 1; i >= 0; i--) {\n\t\t\t\tvar styleName = styleArray[i];\n\t\t\t\tvar style = self.styleStack.styleDictionary[styleName];\n\t\t\t\tfor (var key in style) {\n\t\t\t\t\tif (style.hasOwnProperty(key)) {\n\t\t\t\t\t\tflattenedStyles[key] = style[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn flattenedStyles;\n\t\t}\n\n\t\tfunction convertMargin(margin) {\n\t\t\tif (isNumber(margin)) {\n\t\t\t\tmargin = [margin, margin, margin, margin];\n\t\t\t} else if (isArray(margin)) {\n\t\t\t\tif (margin.length === 2) {\n\t\t\t\t\tmargin = [margin[0], margin[1], margin[0], margin[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn margin;\n\t\t}\n\n\t\tvar margin = [undefined, undefined, undefined, undefined];\n\n\t\tif (node.style) {\n\t\t\tvar styleArray = isArray(node.style) ? node.style : [node.style];\n\t\t\tvar flattenedStyleArray = flattenStyleArray(styleArray);\n\n\t\t\tif (flattenedStyleArray) {\n\t\t\t\tmargin = processSingleMargins(flattenedStyleArray, margin);\n\t\t\t}\n\n\t\t\tif (flattenedStyleArray.margin) {\n\t\t\t\tmargin = convertMargin(flattenedStyleArray.margin);\n\t\t\t}\n\t\t}\n\n\t\tmargin = processSingleMargins(node, margin);\n\n\t\tif (node.margin) {\n\t\t\tmargin = convertMargin(node.margin);\n\t\t}\n\n\t\tif (margin[0] === undefined && margin[1] === undefined && margin[2] === undefined && margin[3] === undefined) {\n\t\t\treturn null;\n\t\t} else {\n\t\t\treturn margin;\n\t\t}\n\t}\n};\n\nDocMeasure.prototype.convertIfBase64Image = function (node) {\n\tif (/^data:image\\/(jpeg|jpg|png);base64,/.test(node.image)) {\n\t\tvar label = '$$pdfmake$$' + this.autoImageIndex++;\n\t\tthis.images[label] = node.image;\n\t\tnode.image = label;\n\t}\n};\n\nDocMeasure.prototype.measureImageWithDimensions = function (node, dimensions) {\n\tif (node.fit) {\n\t\tvar factor = (dimensions.width / dimensions.height > node.fit[0] / node.fit[1]) ? node.fit[0] / dimensions.width : node.fit[1] / dimensions.height;\n\t\tnode._width = node._minWidth = node._maxWidth = dimensions.width * factor;\n\t\tnode._height = dimensions.height * factor;\n\t} else {\n\t\tnode._width = node._minWidth = node._maxWidth = node.width || dimensions.width;\n\t\tnode._height = node.height || (dimensions.height * node._width / dimensions.width);\n\n\t\tif (isNumber(node.maxWidth) && node.maxWidth < node._width) {\n\t\t\tnode._width = node._minWidth = node._maxWidth = node.maxWidth;\n\t\t\tnode._height = node._width * dimensions.height / dimensions.width;\n\t\t}\n\n\t\tif (isNumber(node.maxHeight) && node.maxHeight < node._height) {\n\t\t\tnode._height = node.maxHeight;\n\t\t\tnode._width = node._minWidth = node._maxWidth = node._height * dimensions.width / dimensions.height;\n\t\t}\n\n\t\tif (isNumber(node.minWidth) && node.minWidth > node._width) {\n\t\t\tnode._width = node._minWidth = node._maxWidth = node.minWidth;\n\t\t\tnode._height = node._width * dimensions.height / dimensions.width;\n\t\t}\n\n\t\tif (isNumber(node.minHeight) && node.minHeight > node._height) {\n\t\t\tnode._height = node.minHeight;\n\t\t\tnode._width = node._minWidth = node._maxWidth = node._height * dimensions.width / dimensions.height;\n\t\t}\n\t}\n\n\tnode._alignment = this.styleStack.getProperty('alignment');\n};\n\nDocMeasure.prototype.measureImage = function (node) {\n\tif (this.images) {\n\t\tthis.convertIfBase64Image(node);\n\t}\n\n\tvar dimensions = this.imageMeasure.measureImage(node.image);\n\n\tthis.measureImageWithDimensions(node, dimensions);\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureSVG = function (node) {\n\n\tvar dimensions = this.svgMeasure.measureSVG(node.svg);\n\n\tthis.measureImageWithDimensions(node, dimensions);\n\n\tnode.font = this.styleStack.getProperty('font');\n\n\t// scale SVG based on final dimension\n\tnode.svg = this.svgMeasure.writeDimensions(node.svg, {\n\t\twidth: node._width,\n\t\theight: node._height\n\t});\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureLeaf = function (node) {\n\n\tif (node._textRef && node._textRef._textNodeRef.text) {\n\t\tnode.text = node._textRef._textNodeRef.text;\n\t}\n\n\t// Make sure style properties of the node itself are considered when building inlines.\n\t// We could also just pass [node] to buildInlines, but that fails for bullet points.\n\tvar styleStack = this.styleStack.clone();\n\tstyleStack.push(node);\n\n\tvar data = this.textTools.buildInlines(node.text, styleStack);\n\n\tnode._inlines = data.items;\n\tnode._minWidth = data.minWidth;\n\tnode._maxWidth = data.maxWidth;\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureToc = function (node) {\n\tif (node.toc.title) {\n\t\tnode.toc.title = this.measureNode(node.toc.title);\n\t}\n\n\tif (node.toc._items.length > 0) {\n\t\tvar body = [];\n\t\tvar textStyle = node.toc.textStyle || {};\n\t\tvar numberStyle = node.toc.numberStyle || textStyle;\n\t\tvar textMargin = node.toc.textMargin || [0, 0, 0, 0];\n\t\tfor (var i = 0, l = node.toc._items.length; i < l; i++) {\n\t\t\tvar item = node.toc._items[i];\n\t\t\tvar lineStyle = item._textNodeRef.tocStyle || textStyle;\n\t\t\tvar lineMargin = item._textNodeRef.tocMargin || textMargin;\n\t\t\tvar lineNumberStyle = item._textNodeRef.tocNumberStyle || numberStyle;\n\t\t\tvar destination = getNodeId(item._nodeRef);\n\t\t\tbody.push([\n\t\t\t\t{ text: item._textNodeRef.text, linkToDestination: destination, alignment: 'left', style: lineStyle, margin: lineMargin },\n\t\t\t\t{ text: '00000', linkToDestination: destination, alignment: 'right', _tocItemRef: item._nodeRef, style: lineNumberStyle, margin: [0, lineMargin[1], 0, lineMargin[3]] }\n\t\t\t]);\n\t\t}\n\n\n\t\tnode.toc._table = {\n\t\t\ttable: {\n\t\t\t\tdontBreakRows: true,\n\t\t\t\twidths: ['*', 'auto'],\n\t\t\t\tbody: body\n\t\t\t},\n\t\t\tlayout: 'noBorders'\n\t\t};\n\n\t\tnode.toc._table = this.measureNode(node.toc._table);\n\t}\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureVerticalContainer = function (node) {\n\tvar items = node.stack;\n\n\tnode._minWidth = 0;\n\tnode._maxWidth = 0;\n\n\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\titems[i] = this.measureNode(items[i]);\n\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth);\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);\n\t}\n\n\treturn node;\n};\n\nDocMeasure.prototype.gapSizeForList = function () {\n\treturn this.textTools.sizeOfString('9. ', this.styleStack);\n};\n\nDocMeasure.prototype.buildUnorderedMarker = function (styleStack, gapSize, type) {\n\tfunction buildDisc(gapSize, color) {\n\t\t// TODO: ascender-based calculations\n\t\tvar radius = gapSize.fontSize / 6;\n\t\treturn {\n\t\t\tcanvas: [{\n\t\t\t\tx: radius,\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3,\n\t\t\t\tr1: radius,\n\t\t\t\tr2: radius,\n\t\t\t\ttype: 'ellipse',\n\t\t\t\tcolor: color\n\t\t\t}]\n\t\t};\n\t}\n\n\tfunction buildSquare(gapSize, color) {\n\t\t// TODO: ascender-based calculations\n\t\tvar size = gapSize.fontSize / 3;\n\t\treturn {\n\t\t\tcanvas: [{\n\t\t\t\tx: 0,\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - (gapSize.fontSize / 3) - (size / 2),\n\t\t\t\th: size,\n\t\t\t\tw: size,\n\t\t\t\ttype: 'rect',\n\t\t\t\tcolor: color\n\t\t\t}]\n\t\t};\n\t}\n\n\tfunction buildCircle(gapSize, color) {\n\t\t// TODO: ascender-based calculations\n\t\tvar radius = gapSize.fontSize / 6;\n\t\treturn {\n\t\t\tcanvas: [{\n\t\t\t\tx: radius,\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3,\n\t\t\t\tr1: radius,\n\t\t\t\tr2: radius,\n\t\t\t\ttype: 'ellipse',\n\t\t\t\tlineColor: color\n\t\t\t}]\n\t\t};\n\t}\n\n\tvar marker;\n\tvar color = styleStack.getProperty('markerColor') || styleStack.getProperty('color') || 'black';\n\n\tswitch (type) {\n\t\tcase 'circle':\n\t\t\tmarker = buildCircle(gapSize, color);\n\t\t\tbreak;\n\n\t\tcase 'square':\n\t\t\tmarker = buildSquare(gapSize, color);\n\t\t\tbreak;\n\n\t\tcase 'none':\n\t\t\tmarker = {};\n\t\t\tbreak;\n\n\t\tcase 'disc':\n\t\tdefault:\n\t\t\tmarker = buildDisc(gapSize, color);\n\t\t\tbreak;\n\t}\n\n\tmarker._minWidth = marker._maxWidth = gapSize.width;\n\tmarker._minHeight = marker._maxHeight = gapSize.height;\n\n\treturn marker;\n};\n\nDocMeasure.prototype.buildOrderedMarker = function (counter, styleStack, type, separator) {\n\tfunction prepareAlpha(counter) {\n\t\tfunction toAlpha(num) {\n\t\t\treturn (num >= 26 ? toAlpha((num / 26 >> 0) - 1) : '') + 'abcdefghijklmnopqrstuvwxyz'[num % 26 >> 0];\n\t\t}\n\n\t\tif (counter < 1) {\n\t\t\treturn counter.toString();\n\t\t}\n\n\t\treturn toAlpha(counter - 1);\n\t}\n\n\tfunction prepareRoman(counter) {\n\t\tif (counter < 1 || counter > 4999) {\n\t\t\treturn counter.toString();\n\t\t}\n\t\tvar num = counter;\n\t\tvar lookup = { M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1 }, roman = '', i;\n\t\tfor (i in lookup) {\n\t\t\twhile (num >= lookup[i]) {\n\t\t\t\troman += i;\n\t\t\t\tnum -= lookup[i];\n\t\t\t}\n\t\t}\n\t\treturn roman;\n\t}\n\n\tfunction prepareDecimal(counter) {\n\t\treturn counter.toString();\n\t}\n\n\tvar counterText;\n\tswitch (type) {\n\t\tcase 'none':\n\t\t\tcounterText = null;\n\t\t\tbreak;\n\n\t\tcase 'upper-alpha':\n\t\t\tcounterText = prepareAlpha(counter).toUpperCase();\n\t\t\tbreak;\n\n\t\tcase 'lower-alpha':\n\t\t\tcounterText = prepareAlpha(counter);\n\t\t\tbreak;\n\n\t\tcase 'upper-roman':\n\t\t\tcounterText = prepareRoman(counter);\n\t\t\tbreak;\n\n\t\tcase 'lower-roman':\n\t\t\tcounterText = prepareRoman(counter).toLowerCase();\n\t\t\tbreak;\n\n\t\tcase 'decimal':\n\t\tdefault:\n\t\t\tcounterText = prepareDecimal(counter);\n\t\t\tbreak;\n\t}\n\n\tif (counterText === null) {\n\t\treturn {};\n\t}\n\n\tif (separator) {\n\t\tif (isArray(separator)) {\n\t\t\tif (separator[0]) {\n\t\t\t\tcounterText = separator[0] + counterText;\n\t\t\t}\n\n\t\t\tif (separator[1]) {\n\t\t\t\tcounterText += separator[1];\n\t\t\t}\n\t\t\tcounterText += ' ';\n\t\t} else {\n\t\t\tcounterText += separator + ' ';\n\t\t}\n\t}\n\n\tvar textArray = { text: counterText };\n\tvar markerColor = styleStack.getProperty('markerColor');\n\tif (markerColor) {\n\t\ttextArray.color = markerColor;\n\t}\n\n\treturn { _inlines: this.textTools.buildInlines(textArray, styleStack).items };\n};\n\nDocMeasure.prototype.measureUnorderedList = function (node) {\n\tvar style = this.styleStack.clone();\n\tvar items = node.ul;\n\tnode.type = node.type || 'disc';\n\tnode._gapSize = this.gapSizeForList();\n\tnode._minWidth = 0;\n\tnode._maxWidth = 0;\n\n\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\tvar item = items[i] = this.measureNode(items[i]);\n\n\t\tif (!item.ol && !item.ul) {\n\t\t\titem.listMarker = this.buildUnorderedMarker(style, node._gapSize, item.listType || node.type);\n\t\t}\n\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth + node._gapSize.width);\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth + node._gapSize.width);\n\t}\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureOrderedList = function (node) {\n\tvar style = this.styleStack.clone();\n\tvar items = node.ol;\n\tnode.type = node.type || 'decimal';\n\tnode.separator = node.separator || '.';\n\tnode.reversed = node.reversed || false;\n\tif (!isNumber(node.start)) {\n\t\tnode.start = node.reversed ? items.length : 1;\n\t}\n\tnode._gapSize = this.gapSizeForList();\n\tnode._minWidth = 0;\n\tnode._maxWidth = 0;\n\n\tvar counter = node.start;\n\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\tvar item = items[i] = this.measureNode(items[i]);\n\n\t\tif (!item.ol && !item.ul) {\n\t\t\tvar counterValue = isNumber(item.counter) ? item.counter : counter;\n\t\t\titem.listMarker = this.buildOrderedMarker(counterValue, style, item.listType || node.type, node.separator);\n\t\t\tif (item.listMarker._inlines) {\n\t\t\t\tnode._gapSize.width = Math.max(node._gapSize.width, item.listMarker._inlines[0].width);\n\t\t\t}\n\t\t}  // TODO: else - nested lists numbering\n\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth);\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);\n\n\t\tif (node.reversed) {\n\t\t\tcounter--;\n\t\t} else {\n\t\t\tcounter++;\n\t\t}\n\t}\n\n\tnode._minWidth += node._gapSize.width;\n\tnode._maxWidth += node._gapSize.width;\n\n\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\tvar item = items[i];\n\t\tif (!item.ol && !item.ul) {\n\t\t\titem.listMarker._minWidth = item.listMarker._maxWidth = node._gapSize.width;\n\t\t}\n\t}\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureColumns = function (node) {\n\tvar columns = node.columns;\n\tnode._gap = this.styleStack.getProperty('columnGap') || 0;\n\n\tfor (var i = 0, l = columns.length; i < l; i++) {\n\t\tcolumns[i] = this.measureNode(columns[i]);\n\t}\n\n\tvar measures = ColumnCalculator.measureMinMax(columns);\n\n\tvar numGaps = (columns.length > 0) ? (columns.length - 1) : 0;\n\tnode._minWidth = measures.min + node._gap * numGaps;\n\tnode._maxWidth = measures.max + node._gap * numGaps;\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureTable = function (node) {\n\textendTableWidths(node);\n\tnode._layout = getLayout(this.tableLayouts);\n\tnode._offsets = getOffsets(node._layout);\n\n\tvar colSpans = [];\n\tvar col, row, cols, rows;\n\n\tfor (col = 0, cols = node.table.body[0].length; col < cols; col++) {\n\t\tvar c = node.table.widths[col];\n\t\tc._minWidth = 0;\n\t\tc._maxWidth = 0;\n\n\t\tfor (row = 0, rows = node.table.body.length; row < rows; row++) {\n\t\t\tvar rowData = node.table.body[row];\n\t\t\tvar data = rowData[col];\n\t\t\tif (data === undefined) {\n\t\t\t\tconsole.error('Malformed table row ', rowData, 'in node ', node);\n\t\t\t\tthrow 'Malformed table row, a cell is undefined.';\n\t\t\t}\n\t\t\tif (data === null) { // transform to object\n\t\t\t\tdata = '';\n\t\t\t}\n\n\t\t\tif (!data._span) {\n\t\t\t\tdata = rowData[col] = this.styleStack.auto(data, measureCb(this, data));\n\n\t\t\t\tif (data.colSpan && data.colSpan > 1) {\n\t\t\t\t\tmarkSpans(rowData, col, data.colSpan);\n\t\t\t\t\tcolSpans.push({ col: col, span: data.colSpan, minWidth: data._minWidth, maxWidth: data._maxWidth });\n\t\t\t\t} else {\n\t\t\t\t\tc._minWidth = Math.max(c._minWidth, data._minWidth);\n\t\t\t\t\tc._maxWidth = Math.max(c._maxWidth, data._maxWidth);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (data.rowSpan && data.rowSpan > 1) {\n\t\t\t\tmarkVSpans(node.table, row, col, data.rowSpan);\n\t\t\t}\n\t\t}\n\t}\n\n\textendWidthsForColSpans();\n\n\tvar measures = ColumnCalculator.measureMinMax(node.table.widths);\n\n\tnode._minWidth = measures.min + node._offsets.total;\n\tnode._maxWidth = measures.max + node._offsets.total;\n\n\treturn node;\n\n\tfunction measureCb(_this, data) {\n\t\treturn function () {\n\t\t\tif (isObject(data)) {\n\t\t\t\tdata.fillColor = _this.styleStack.getProperty('fillColor');\n\t\t\t\tdata.fillOpacity = _this.styleStack.getProperty('fillOpacity');\n\t\t\t}\n\t\t\treturn _this.measureNode(data);\n\t\t};\n\t}\n\n\tfunction getLayout(tableLayouts) {\n\t\tvar layout = node.layout;\n\n\t\tif (isString(layout)) {\n\t\t\tlayout = tableLayouts[layout];\n\t\t}\n\n\t\tvar defaultLayout = {\n\t\t\thLineWidth: function (i, node) {\n\t\t\t\treturn 1;\n\t\t\t},\n\t\t\tvLineWidth: function (i, node) {\n\t\t\t\treturn 1;\n\t\t\t},\n\t\t\thLineColor: function (i, node) {\n\t\t\t\treturn 'black';\n\t\t\t},\n\t\t\tvLineColor: function (i, node) {\n\t\t\t\treturn 'black';\n\t\t\t},\n\t\t\thLineStyle: function (i, node) {\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tvLineStyle: function (i, node) {\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tpaddingLeft: function (i, node) {\n\t\t\t\treturn 4;\n\t\t\t},\n\t\t\tpaddingRight: function (i, node) {\n\t\t\t\treturn 4;\n\t\t\t},\n\t\t\tpaddingTop: function (i, node) {\n\t\t\t\treturn 2;\n\t\t\t},\n\t\t\tpaddingBottom: function (i, node) {\n\t\t\t\treturn 2;\n\t\t\t},\n\t\t\tfillColor: function (i, node) {\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tfillOpacity: function (i, node) {\n\t\t\t\treturn 1;\n\t\t\t},\n\t\t\tdefaultBorder: true\n\t\t};\n\n\t\treturn pack(defaultLayout, layout);\n\t}\n\n\tfunction getOffsets(layout) {\n\t\tvar offsets = [];\n\t\tvar totalOffset = 0;\n\t\tvar prevRightPadding = 0;\n\n\t\tfor (var i = 0, l = node.table.widths.length; i < l; i++) {\n\t\t\tvar lOffset = prevRightPadding + layout.vLineWidth(i, node) + layout.paddingLeft(i, node);\n\t\t\toffsets.push(lOffset);\n\t\t\ttotalOffset += lOffset;\n\t\t\tprevRightPadding = layout.paddingRight(i, node);\n\t\t}\n\n\t\ttotalOffset += prevRightPadding + layout.vLineWidth(node.table.widths.length, node);\n\n\t\treturn {\n\t\t\ttotal: totalOffset,\n\t\t\toffsets: offsets\n\t\t};\n\t}\n\n\tfunction extendWidthsForColSpans() {\n\t\tvar q, j;\n\n\t\tfor (var i = 0, l = colSpans.length; i < l; i++) {\n\t\t\tvar span = colSpans[i];\n\n\t\t\tvar currentMinMax = getMinMax(span.col, span.span, node._offsets);\n\t\t\tvar minDifference = span.minWidth - currentMinMax.minWidth;\n\t\t\tvar maxDifference = span.maxWidth - currentMinMax.maxWidth;\n\n\t\t\tif (minDifference > 0) {\n\t\t\t\tq = minDifference / span.span;\n\n\t\t\t\tfor (j = 0; j < span.span; j++) {\n\t\t\t\t\tnode.table.widths[span.col + j]._minWidth += q;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (maxDifference > 0) {\n\t\t\t\tq = maxDifference / span.span;\n\n\t\t\t\tfor (j = 0; j < span.span; j++) {\n\t\t\t\t\tnode.table.widths[span.col + j]._maxWidth += q;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction getMinMax(col, span, offsets) {\n\t\tvar result = { minWidth: 0, maxWidth: 0 };\n\n\t\tfor (var i = 0; i < span; i++) {\n\t\t\tresult.minWidth += node.table.widths[col + i]._minWidth + (i ? offsets.offsets[col + i] : 0);\n\t\t\tresult.maxWidth += node.table.widths[col + i]._maxWidth + (i ? offsets.offsets[col + i] : 0);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction markSpans(rowData, col, span) {\n\t\tfor (var i = 1; i < span; i++) {\n\t\t\trowData[col + i] = {\n\t\t\t\t_span: true,\n\t\t\t\t_minWidth: 0,\n\t\t\t\t_maxWidth: 0,\n\t\t\t\trowSpan: rowData[col].rowSpan\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction markVSpans(table, row, col, span) {\n\t\tfor (var i = 1; i < span; i++) {\n\t\t\ttable.body[row + i][col] = {\n\t\t\t\t_span: true,\n\t\t\t\t_minWidth: 0,\n\t\t\t\t_maxWidth: 0,\n\t\t\t\tfillColor: table.body[row][col].fillColor,\n\t\t\t\tfillOpacity: table.body[row][col].fillOpacity\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction extendTableWidths(node) {\n\t\tif (!node.table.widths) {\n\t\t\tnode.table.widths = 'auto';\n\t\t}\n\n\t\tif (isString(node.table.widths)) {\n\t\t\tnode.table.widths = [node.table.widths];\n\n\t\t\twhile (node.table.widths.length < node.table.body[0].length) {\n\t\t\t\tnode.table.widths.push(node.table.widths[node.table.widths.length - 1]);\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = node.table.widths.length; i < l; i++) {\n\t\t\tvar w = node.table.widths[i];\n\t\t\tif (isNumber(w) || isString(w)) {\n\t\t\t\tnode.table.widths[i] = { width: w };\n\t\t\t}\n\t\t}\n\t}\n};\n\nDocMeasure.prototype.measureCanvas = function (node) {\n\tvar w = 0, h = 0;\n\n\tfor (var i = 0, l = node.canvas.length; i < l; i++) {\n\t\tvar vector = node.canvas[i];\n\n\t\tswitch (vector.type) {\n\t\t\tcase 'ellipse':\n\t\t\t\tw = Math.max(w, vector.x + vector.r1);\n\t\t\t\th = Math.max(h, vector.y + vector.r2);\n\t\t\t\tbreak;\n\t\t\tcase 'rect':\n\t\t\t\tw = Math.max(w, vector.x + vector.w);\n\t\t\t\th = Math.max(h, vector.y + vector.h);\n\t\t\t\tbreak;\n\t\t\tcase 'line':\n\t\t\t\tw = Math.max(w, vector.x1, vector.x2);\n\t\t\t\th = Math.max(h, vector.y1, vector.y2);\n\t\t\t\tbreak;\n\t\t\tcase 'polyline':\n\t\t\t\tfor (var i2 = 0, l2 = vector.points.length; i2 < l2; i2++) {\n\t\t\t\t\tw = Math.max(w, vector.points[i2].x);\n\t\t\t\t\th = Math.max(h, vector.points[i2].y);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tnode._minWidth = node._maxWidth = w;\n\tnode._minHeight = node._maxHeight = h;\n\tnode._alignment = this.styleStack.getProperty('alignment');\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureQr = function (node) {\n\tnode = qrEncoder.measure(node);\n\tnode._alignment = this.styleStack.getProperty('alignment');\n\treturn node;\n};\n\nmodule.exports = DocMeasure;\n\n\n/***/ }),\n\n/***/ 4889:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\nvar isString = (__webpack_require__(6225).isString);\nvar isNumber = (__webpack_require__(6225).isNumber);\nvar isBoolean = (__webpack_require__(6225).isBoolean);\nvar isArray = (__webpack_require__(6225).isArray);\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar fontStringify = (__webpack_require__(6225).fontStringify);\n\nfunction DocPreprocessor() {\n\n}\n\nDocPreprocessor.prototype.preprocessDocument = function (docStructure) {\n\tthis.parentNode = null;\n\tthis.tocs = [];\n\tthis.nodeReferences = [];\n\treturn this.preprocessNode(docStructure);\n};\n\nDocPreprocessor.prototype.preprocessNode = function (node) {\n\t// expand shortcuts and casting values\n\tif (isArray(node)) {\n\t\tnode = { stack: node };\n\t} else if (isString(node)) {\n\t\tnode = { text: node };\n\t} else if (isNumber(node) || isBoolean(node)) {\n\t\tnode = { text: node.toString() };\n\t} else if (node === undefined || node === null) {\n\t\tnode = { text: '' };\n\t} else if (Object.keys(node).length === 0) { // empty object\n\t\tnode = { text: '' };\n\t} else if ('text' in node && (node.text === undefined || node.text === null)) {\n\t\tnode.text = '';\n\t}\n\n\tif (node.columns) {\n\t\treturn this.preprocessColumns(node);\n\t} else if (node.stack) {\n\t\treturn this.preprocessVerticalContainer(node);\n\t} else if (node.ul) {\n\t\treturn this.preprocessList(node);\n\t} else if (node.ol) {\n\t\treturn this.preprocessList(node);\n\t} else if (node.table) {\n\t\treturn this.preprocessTable(node);\n\t} else if (node.text !== undefined) {\n\t\treturn this.preprocessText(node);\n\t} else if (node.toc) {\n\t\treturn this.preprocessToc(node);\n\t} else if (node.image) {\n\t\treturn this.preprocessImage(node);\n\t} else if (node.svg) {\n\t\treturn this.preprocessSVG(node);\n\t} else if (node.canvas) {\n\t\treturn this.preprocessCanvas(node);\n\t} else if (node.qr) {\n\t\treturn this.preprocessQr(node);\n\t} else if (node.pageReference || node.textReference) {\n\t\treturn this.preprocessText(node);\n\t} else {\n\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\n\t}\n};\n\nDocPreprocessor.prototype.preprocessColumns = function (node) {\n\tvar columns = node.columns;\n\n\tfor (var i = 0, l = columns.length; i < l; i++) {\n\t\tcolumns[i] = this.preprocessNode(columns[i]);\n\t}\n\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessVerticalContainer = function (node) {\n\tvar items = node.stack;\n\n\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\titems[i] = this.preprocessNode(items[i]);\n\t}\n\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessList = function (node) {\n\tvar items = node.ul || node.ol;\n\n\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\titems[i] = this.preprocessNode(items[i]);\n\t}\n\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessTable = function (node) {\n\tvar col, row, cols, rows;\n\n\tfor (col = 0, cols = node.table.body[0].length; col < cols; col++) {\n\t\tfor (row = 0, rows = node.table.body.length; row < rows; row++) {\n\t\t\tvar rowData = node.table.body[row];\n\t\t\tvar data = rowData[col];\n\t\t\tif (data !== undefined) {\n\t\t\t\tif (data === null) { // transform to object\n\t\t\t\t\tdata = '';\n\t\t\t\t}\n\t\t\t\tif (!data._span) {\n\t\t\t\t\trowData[col] = this.preprocessNode(data);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessText = function (node) {\n\tif (node.tocItem) {\n\t\tif (!isArray(node.tocItem)) {\n\t\t\tnode.tocItem = [node.tocItem];\n\t\t}\n\n\t\tfor (var i = 0, l = node.tocItem.length; i < l; i++) {\n\t\t\tif (!isString(node.tocItem[i])) {\n\t\t\t\tnode.tocItem[i] = '_default_';\n\t\t\t}\n\n\t\t\tvar tocItemId = node.tocItem[i];\n\n\t\t\tif (!this.tocs[tocItemId]) {\n\t\t\t\tthis.tocs[tocItemId] = { toc: { _items: [], _pseudo: true } };\n\t\t\t}\n\n\t\t\tif (!node.id) {\n\t\t\t\tnode.id = 'toc-' + tocItemId + '-' + this.tocs[tocItemId].toc._items.length;\n\t\t\t}\n\n\t\t\tvar tocItemRef = {\n\t\t\t\t_nodeRef: this._getNodeForNodeRef(node),\n\t\t\t\t_textNodeRef: node\n\t\t\t};\n\t\t\tthis.tocs[tocItemId].toc._items.push(tocItemRef);\n\t\t}\n\t}\n\n\tif (node.id) {\n\t\tif (this.nodeReferences[node.id]) {\n\t\t\tif (!this.nodeReferences[node.id]._pseudo) {\n\t\t\t\tthrow \"Node id '\" + node.id + \"' already exists\";\n\t\t\t}\n\n\t\t\tthis.nodeReferences[node.id]._nodeRef = this._getNodeForNodeRef(node);\n\t\t\tthis.nodeReferences[node.id]._textNodeRef = node;\n\t\t\tthis.nodeReferences[node.id]._pseudo = false;\n\t\t} else {\n\t\t\tthis.nodeReferences[node.id] = {\n\t\t\t\t_nodeRef: this._getNodeForNodeRef(node),\n\t\t\t\t_textNodeRef: node\n\t\t\t};\n\t\t}\n\t}\n\n\tif (node.pageReference) {\n\t\tif (!this.nodeReferences[node.pageReference]) {\n\t\t\tthis.nodeReferences[node.pageReference] = {\n\t\t\t\t_nodeRef: {},\n\t\t\t\t_textNodeRef: {},\n\t\t\t\t_pseudo: true\n\t\t\t};\n\t\t}\n\t\tnode.text = '00000';\n\t\tnode.linkToDestination = node.pageReference;\n\t\tnode._pageRef = this.nodeReferences[node.pageReference];\n\t}\n\n\tif (node.textReference) {\n\t\tif (!this.nodeReferences[node.textReference]) {\n\t\t\tthis.nodeReferences[node.textReference] = { _nodeRef: {}, _pseudo: true };\n\t\t}\n\n\t\tnode.text = '';\n\t\tnode.linkToDestination = node.textReference;\n\t\tnode._textRef = this.nodeReferences[node.textReference];\n\t}\n\n\tif (node.text && node.text.text) {\n\t\tnode.text = [this.preprocessNode(node.text)];\n\t} else if (isArray(node.text)) {\n\t\tvar isSetParentNode = false;\n\t\tif (this.parentNode === null) {\n\t\t\tthis.parentNode = node;\n\t\t\tisSetParentNode = true;\n\t\t}\n\n\t\tfor (var i = 0, l = node.text.length; i < l; i++) {\n\t\t\tnode.text[i] = this.preprocessNode(node.text[i]);\n\t\t}\n\n\t\tif (isSetParentNode) {\n\t\t\tthis.parentNode = null;\n\t\t}\n\t}\n\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessToc = function (node) {\n\tif (!node.toc.id) {\n\t\tnode.toc.id = '_default_';\n\t}\n\n\tnode.toc.title = node.toc.title ? this.preprocessNode(node.toc.title) : null;\n\tnode.toc._items = [];\n\n\tif (this.tocs[node.toc.id]) {\n\t\tif (!this.tocs[node.toc.id].toc._pseudo) {\n\t\t\tthrow \"TOC '\" + node.toc.id + \"' already exists\";\n\t\t}\n\n\t\tnode.toc._items = this.tocs[node.toc.id].toc._items;\n\t}\n\n\tthis.tocs[node.toc.id] = node;\n\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessImage = function (node) {\n\tif (!isUndefined(node.image.type) && !isUndefined(node.image.data) && (node.image.type === 'Buffer') && isArray(node.image.data)) {\n\t\tnode.image = Buffer.from(node.image.data);\n\t}\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessSVG = function (node) {\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessCanvas = function (node) {\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessQr = function (node) {\n\treturn node;\n};\n\nDocPreprocessor.prototype._getNodeForNodeRef = function (node) {\n\tif (this.parentNode) {\n\t\treturn this.parentNode;\n\t}\n\n\treturn node;\n}\n\nmodule.exports = DocPreprocessor;\n\n\n/***/ }),\n\n/***/ 3858:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar TraversalTracker = __webpack_require__(8537);\nvar isString = (__webpack_require__(6225).isString);\n\n/**\n * Creates an instance of DocumentContext - a store for current x, y positions and available width/height.\n * It facilitates column divisions and vertical sync\n */\nfunction DocumentContext(pageSize, pageMargins) {\n\tthis.pages = [];\n\n\tthis.pageMargins = pageMargins;\n\n\tthis.x = pageMargins.left;\n\tthis.availableWidth = pageSize.width - pageMargins.left - pageMargins.right;\n\tthis.availableHeight = 0;\n\tthis.page = -1;\n\n\tthis.snapshots = [];\n\n\tthis.endingCell = null;\n\n\tthis.tracker = new TraversalTracker();\n\n\tthis.backgroundLength = [];\n\n\tthis.addPage(pageSize);\n}\n\nDocumentContext.prototype.beginColumnGroup = function () {\n\tthis.snapshots.push({\n\t\tx: this.x,\n\t\ty: this.y,\n\t\tavailableHeight: this.availableHeight,\n\t\tavailableWidth: this.availableWidth,\n\t\tpage: this.page,\n\t\tbottomMost: {\n\t\t\tx: this.x,\n\t\t\ty: this.y,\n\t\t\tavailableHeight: this.availableHeight,\n\t\t\tavailableWidth: this.availableWidth,\n\t\t\tpage: this.page\n\t\t},\n\t\tendingCell: this.endingCell,\n\t\tlastColumnWidth: this.lastColumnWidth\n\t});\n\n\tthis.lastColumnWidth = 0;\n};\n\nDocumentContext.prototype.beginColumn = function (width, offset, endingCell) {\n\tvar saved = this.snapshots[this.snapshots.length - 1];\n\n\tthis.calculateBottomMost(saved);\n\n\tthis.endingCell = endingCell;\n\tthis.page = saved.page;\n\tthis.x = this.x + this.lastColumnWidth + (offset || 0);\n\tthis.y = saved.y;\n\tthis.availableWidth = width;\t//saved.availableWidth - offset;\n\tthis.availableHeight = saved.availableHeight;\n\n\tthis.lastColumnWidth = width;\n};\n\nDocumentContext.prototype.calculateBottomMost = function (destContext) {\n\tif (this.endingCell) {\n\t\tthis.saveContextInEndingCell(this.endingCell);\n\t\tthis.endingCell = null;\n\t} else {\n\t\tdestContext.bottomMost = bottomMostContext(this, destContext.bottomMost);\n\t}\n};\n\nDocumentContext.prototype.markEnding = function (endingCell) {\n\tthis.page = endingCell._columnEndingContext.page;\n\tthis.x = endingCell._columnEndingContext.x;\n\tthis.y = endingCell._columnEndingContext.y;\n\tthis.availableWidth = endingCell._columnEndingContext.availableWidth;\n\tthis.availableHeight = endingCell._columnEndingContext.availableHeight;\n\tthis.lastColumnWidth = endingCell._columnEndingContext.lastColumnWidth;\n};\n\nDocumentContext.prototype.saveContextInEndingCell = function (endingCell) {\n\tendingCell._columnEndingContext = {\n\t\tpage: this.page,\n\t\tx: this.x,\n\t\ty: this.y,\n\t\tavailableHeight: this.availableHeight,\n\t\tavailableWidth: this.availableWidth,\n\t\tlastColumnWidth: this.lastColumnWidth\n\t};\n};\n\nDocumentContext.prototype.completeColumnGroup = function (height) {\n\tvar saved = this.snapshots.pop();\n\n\tthis.calculateBottomMost(saved);\n\n\tthis.endingCell = null;\n\tthis.x = saved.x;\n\n\tvar y = saved.bottomMost.y;\n\tif (height) {\n\t\tif (saved.page === saved.bottomMost.page) {\n\t\t\tif ((saved.y + height) > y) {\n\t\t\t\ty = saved.y + height;\n\t\t\t}\n\t\t} else {\n\t\t\ty += height;\n\t\t}\n\t}\n\n\tthis.y = y;\n\tthis.page = saved.bottomMost.page;\n\tthis.availableWidth = saved.availableWidth;\n\tthis.availableHeight = saved.bottomMost.availableHeight;\n\tif (height) {\n\t\tthis.availableHeight -= (y - saved.bottomMost.y);\n\t}\n\tthis.lastColumnWidth = saved.lastColumnWidth;\n};\n\nDocumentContext.prototype.addMargin = function (left, right) {\n\tthis.x += left;\n\tthis.availableWidth -= left + (right || 0);\n};\n\nDocumentContext.prototype.moveDown = function (offset) {\n\tthis.y += offset;\n\tthis.availableHeight -= offset;\n\n\treturn this.availableHeight > 0;\n};\n\nDocumentContext.prototype.initializePage = function () {\n\tthis.y = this.pageMargins.top;\n\tthis.availableHeight = this.getCurrentPage().pageSize.height - this.pageMargins.top - this.pageMargins.bottom;\n\tthis.pageSnapshot().availableWidth = this.getCurrentPage().pageSize.width - this.pageMargins.left - this.pageMargins.right;\n};\n\nDocumentContext.prototype.pageSnapshot = function () {\n\tif (this.snapshots[0]) {\n\t\treturn this.snapshots[0];\n\t} else {\n\t\treturn this;\n\t}\n};\n\nDocumentContext.prototype.moveTo = function (x, y) {\n\tif (x !== undefined && x !== null) {\n\t\tthis.x = x;\n\t\tthis.availableWidth = this.getCurrentPage().pageSize.width - this.x - this.pageMargins.right;\n\t}\n\tif (y !== undefined && y !== null) {\n\t\tthis.y = y;\n\t\tthis.availableHeight = this.getCurrentPage().pageSize.height - this.y - this.pageMargins.bottom;\n\t}\n};\n\nDocumentContext.prototype.moveToRelative = function (x, y) {\n\tif (x !== undefined && x !== null) {\n\t\tthis.x = this.x + x;\n\t}\n\tif (y !== undefined && y !== null) {\n\t\tthis.y = this.y + y;\n\t}\n};\n\nDocumentContext.prototype.beginDetachedBlock = function () {\n\tthis.snapshots.push({\n\t\tx: this.x,\n\t\ty: this.y,\n\t\tavailableHeight: this.availableHeight,\n\t\tavailableWidth: this.availableWidth,\n\t\tpage: this.page,\n\t\tendingCell: this.endingCell,\n\t\tlastColumnWidth: this.lastColumnWidth\n\t});\n};\n\nDocumentContext.prototype.endDetachedBlock = function () {\n\tvar saved = this.snapshots.pop();\n\n\tthis.x = saved.x;\n\tthis.y = saved.y;\n\tthis.availableWidth = saved.availableWidth;\n\tthis.availableHeight = saved.availableHeight;\n\tthis.page = saved.page;\n\tthis.endingCell = saved.endingCell;\n\tthis.lastColumnWidth = saved.lastColumnWidth;\n};\n\nfunction pageOrientation(pageOrientationString, currentPageOrientation) {\n\tif (pageOrientationString === undefined) {\n\t\treturn currentPageOrientation;\n\t} else if (isString(pageOrientationString) && (pageOrientationString.toLowerCase() === 'landscape')) {\n\t\treturn 'landscape';\n\t} else {\n\t\treturn 'portrait';\n\t}\n}\n\nvar getPageSize = function (currentPage, newPageOrientation) {\n\n\tnewPageOrientation = pageOrientation(newPageOrientation, currentPage.pageSize.orientation);\n\n\tif (newPageOrientation !== currentPage.pageSize.orientation) {\n\t\treturn {\n\t\t\torientation: newPageOrientation,\n\t\t\twidth: currentPage.pageSize.height,\n\t\t\theight: currentPage.pageSize.width\n\t\t};\n\t} else {\n\t\treturn {\n\t\t\torientation: currentPage.pageSize.orientation,\n\t\t\twidth: currentPage.pageSize.width,\n\t\t\theight: currentPage.pageSize.height\n\t\t};\n\t}\n\n};\n\n\nDocumentContext.prototype.moveToNextPage = function (pageOrientation) {\n\tvar nextPageIndex = this.page + 1;\n\n\tvar prevPage = this.page;\n\tvar prevY = this.y;\n\n\tvar createNewPage = nextPageIndex >= this.pages.length;\n\tif (createNewPage) {\n\t\tvar currentAvailableWidth = this.availableWidth;\n\t\tvar currentPageOrientation = this.getCurrentPage().pageSize.orientation;\n\n\t\tvar pageSize = getPageSize(this.getCurrentPage(), pageOrientation);\n\t\tthis.addPage(pageSize);\n\n\t\tif (currentPageOrientation === pageSize.orientation) {\n\t\t\tthis.availableWidth = currentAvailableWidth;\n\t\t}\n\t} else {\n\t\tthis.page = nextPageIndex;\n\t\tthis.initializePage();\n\t}\n\n\treturn {\n\t\tnewPageCreated: createNewPage,\n\t\tprevPage: prevPage,\n\t\tprevY: prevY,\n\t\ty: this.y\n\t};\n};\n\n\nDocumentContext.prototype.addPage = function (pageSize) {\n\tvar page = { items: [], pageSize: pageSize };\n\tthis.pages.push(page);\n\tthis.backgroundLength.push(0);\n\tthis.page = this.pages.length - 1;\n\tthis.initializePage();\n\n\tthis.tracker.emit('pageAdded');\n\n\treturn page;\n};\n\nDocumentContext.prototype.getCurrentPage = function () {\n\tif (this.page < 0 || this.page >= this.pages.length) {\n\t\treturn null;\n\t}\n\n\treturn this.pages[this.page];\n};\n\nDocumentContext.prototype.getCurrentPosition = function () {\n\tvar pageSize = this.getCurrentPage().pageSize;\n\tvar innerHeight = pageSize.height - this.pageMargins.top - this.pageMargins.bottom;\n\tvar innerWidth = pageSize.width - this.pageMargins.left - this.pageMargins.right;\n\n\treturn {\n\t\tpageNumber: this.page + 1,\n\t\tpageOrientation: pageSize.orientation,\n\t\tpageInnerHeight: innerHeight,\n\t\tpageInnerWidth: innerWidth,\n\t\tleft: this.x,\n\t\ttop: this.y,\n\t\tverticalRatio: ((this.y - this.pageMargins.top) / innerHeight),\n\t\thorizontalRatio: ((this.x - this.pageMargins.left) / innerWidth)\n\t};\n};\n\nfunction bottomMostContext(c1, c2) {\n\tvar r;\n\n\tif (c1.page > c2.page) {\n\t\tr = c1;\n\t} else if (c2.page > c1.page) {\n\t\tr = c2;\n\t} else {\n\t\tr = (c1.y > c2.y) ? c1 : c2;\n\t}\n\n\treturn {\n\t\tpage: r.page,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tavailableHeight: r.availableHeight,\n\t\tavailableWidth: r.availableWidth\n\t};\n}\n\nmodule.exports = DocumentContext;\n\n\n/***/ }),\n\n/***/ 1196:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Line = __webpack_require__(4775);\nvar isNumber = (__webpack_require__(6225).isNumber);\nvar pack = (__webpack_require__(6225).pack);\nvar offsetVector = (__webpack_require__(6225).offsetVector);\nvar DocumentContext = __webpack_require__(3858);\n\n/**\n * Creates an instance of ElementWriter - a line/vector writer, which adds\n * elements to current page and sets their positions based on the context\n */\nfunction ElementWriter(context, tracker) {\n\tthis.context = context;\n\tthis.contextStack = [];\n\tthis.tracker = tracker;\n}\n\nfunction addPageItem(page, item, index) {\n\tif (index === null || index === undefined || index < 0 || index > page.items.length) {\n\t\tpage.items.push(item);\n\t} else {\n\t\tpage.items.splice(index, 0, item);\n\t}\n}\n\nElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) {\n\tvar height = line.getHeight();\n\tvar context = this.context;\n\tvar page = context.getCurrentPage(),\n\t\tposition = this.getCurrentPositionOnPage();\n\n\tif (context.availableHeight < height || !page) {\n\t\treturn false;\n\t}\n\n\tline.x = context.x + (line.x || 0);\n\tline.y = context.y + (line.y || 0);\n\n\tthis.alignLine(line);\n\n\taddPageItem(page, {\n\t\ttype: 'line',\n\t\titem: line\n\t}, index);\n\tthis.tracker.emit('lineAdded', line);\n\n\tif (!dontUpdateContextPosition) {\n\t\tcontext.moveDown(height);\n\t}\n\n\treturn position;\n};\n\nElementWriter.prototype.alignLine = function (line) {\n\tvar width = this.context.availableWidth;\n\tvar lineWidth = line.getWidth();\n\n\tvar alignment = line.inlines && line.inlines.length > 0 && line.inlines[0].alignment;\n\n\tvar offset = 0;\n\tswitch (alignment) {\n\t\tcase 'right':\n\t\t\toffset = width - lineWidth;\n\t\t\tbreak;\n\t\tcase 'center':\n\t\t\toffset = (width - lineWidth) / 2;\n\t\t\tbreak;\n\t}\n\n\tif (offset) {\n\t\tline.x = (line.x || 0) + offset;\n\t}\n\n\tif (alignment === 'justify' &&\n\t\t!line.newLineForced &&\n\t\t!line.lastLineInParagraph &&\n\t\tline.inlines.length > 1) {\n\t\tvar additionalSpacing = (width - lineWidth) / (line.inlines.length - 1);\n\n\t\tfor (var i = 1, l = line.inlines.length; i < l; i++) {\n\t\t\toffset = i * additionalSpacing;\n\n\t\t\tline.inlines[i].x += offset;\n\t\t\tline.inlines[i].justifyShift = additionalSpacing;\n\t\t}\n\t}\n};\n\nElementWriter.prototype.addImage = function (image, index, type) {\n\tvar context = this.context;\n\tvar page = context.getCurrentPage(),\n\t\tposition = this.getCurrentPositionOnPage();\n\n\tif (!page || (image.absolutePosition === undefined && context.availableHeight < image._height && page.items.length > 0)) {\n\t\treturn false;\n\t}\n\n\tif (image._x === undefined) {\n\t\timage._x = image.x || 0;\n\t}\n\n\timage.x = context.x + image._x;\n\timage.y = context.y;\n\n\tthis.alignImage(image);\n\n\taddPageItem(page, {\n\t\ttype: type || 'image',\n\t\titem: image\n\t}, index);\n\n\tcontext.moveDown(image._height);\n\n\treturn position;\n};\n\nElementWriter.prototype.addSVG = function (image, index) {\n\treturn this.addImage(image, index, 'svg')\n};\n\nElementWriter.prototype.addQr = function (qr, index) {\n\tvar context = this.context;\n\tvar page = context.getCurrentPage(),\n\t\tposition = this.getCurrentPositionOnPage();\n\n\tif (!page || (qr.absolutePosition === undefined && context.availableHeight < qr._height)) {\n\t\treturn false;\n\t}\n\n\tif (qr._x === undefined) {\n\t\tqr._x = qr.x || 0;\n\t}\n\n\tqr.x = context.x + qr._x;\n\tqr.y = context.y;\n\n\tthis.alignImage(qr);\n\n\tfor (var i = 0, l = qr._canvas.length; i < l; i++) {\n\t\tvar vector = qr._canvas[i];\n\t\tvector.x += qr.x;\n\t\tvector.y += qr.y;\n\t\tthis.addVector(vector, true, true, index);\n\t}\n\n\tcontext.moveDown(qr._height);\n\n\treturn position;\n};\n\nElementWriter.prototype.alignImage = function (image) {\n\tvar width = this.context.availableWidth;\n\tvar imageWidth = image._minWidth;\n\tvar offset = 0;\n\tswitch (image._alignment) {\n\t\tcase 'right':\n\t\t\toffset = width - imageWidth;\n\t\t\tbreak;\n\t\tcase 'center':\n\t\t\toffset = (width - imageWidth) / 2;\n\t\t\tbreak;\n\t}\n\n\tif (offset) {\n\t\timage.x = (image.x || 0) + offset;\n\t}\n};\n\nElementWriter.prototype.alignCanvas = function (node) {\n\tvar width = this.context.availableWidth;\n\tvar canvasWidth = node._minWidth;\n\tvar offset = 0;\n\tswitch (node._alignment) {\n\t\tcase 'right':\n\t\t\toffset = width - canvasWidth;\n\t\t\tbreak;\n\t\tcase 'center':\n\t\t\toffset = (width - canvasWidth) / 2;\n\t\t\tbreak;\n\t}\n\tif (offset) {\n\t\tnode.canvas.forEach(function (vector) {\n\t\t\toffsetVector(vector, offset, 0);\n\t\t});\n\t}\n};\n\nElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {\n\tvar context = this.context;\n\tvar page = context.getCurrentPage(),\n\t\tposition = this.getCurrentPositionOnPage();\n\n\tif (page) {\n\t\toffsetVector(vector, ignoreContextX ? 0 : context.x, ignoreContextY ? 0 : context.y);\n\t\taddPageItem(page, {\n\t\t\ttype: 'vector',\n\t\t\titem: vector\n\t\t}, index);\n\t\treturn position;\n\t}\n};\n\nElementWriter.prototype.beginClip = function (width, height) {\n\tvar ctx = this.context;\n\tvar page = ctx.getCurrentPage();\n\tpage.items.push({\n\t\ttype: 'beginClip',\n\t\titem: { x: ctx.x, y: ctx.y, width: width, height: height }\n\t});\n\treturn true;\n};\n\nElementWriter.prototype.endClip = function () {\n\tvar ctx = this.context;\n\tvar page = ctx.getCurrentPage();\n\tpage.items.push({\n\t\ttype: 'endClip'\n\t});\n\treturn true;\n};\n\nfunction cloneLine(line) {\n\tvar result = new Line(line.maxWidth);\n\n\tfor (var key in line) {\n\t\tif (line.hasOwnProperty(key)) {\n\t\t\tresult[key] = line[key];\n\t\t}\n\t}\n\n\treturn result;\n}\n\nElementWriter.prototype.addFragment = function (block, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {\n\tvar ctx = this.context;\n\tvar page = ctx.getCurrentPage();\n\n\tif (!useBlockXOffset && block.height > ctx.availableHeight) {\n\t\treturn false;\n\t}\n\n\tblock.items.forEach(function (item) {\n\t\tswitch (item.type) {\n\t\t\tcase 'line':\n\t\t\t\tvar l = cloneLine(item.item);\n\n\t\t\t\tif (l._node) {\n\t\t\t\t\tl._node.positions[0].pageNumber = ctx.page + 1;\n\t\t\t\t}\n\t\t\t\tl.x = (l.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);\n\t\t\t\tl.y = (l.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);\n\n\t\t\t\tpage.items.push({\n\t\t\t\t\ttype: 'line',\n\t\t\t\t\titem: l\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'vector':\n\t\t\t\tvar v = pack(item.item);\n\n\t\t\t\toffsetVector(v, useBlockXOffset ? (block.xOffset || 0) : ctx.x, useBlockYOffset ? (block.yOffset || 0) : ctx.y);\n\t\t\t\tpage.items.push({\n\t\t\t\t\ttype: 'vector',\n\t\t\t\t\titem: v\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'image':\n\t\t\tcase 'svg':\n\t\t\t\tvar img = pack(item.item);\n\n\t\t\t\timg.x = (img.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);\n\t\t\t\timg.y = (img.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);\n\n\t\t\t\tpage.items.push({\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\titem: img\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif (!dontUpdateContextPosition) {\n\t\tctx.moveDown(block.height);\n\t}\n\n\treturn true;\n};\n\n/**\n * Pushes the provided context onto the stack or creates a new one\n *\n * pushContext(context) - pushes the provided context and makes it current\n * pushContext(width, height) - creates and pushes a new context with the specified width and height\n * pushContext() - creates a new context for unbreakable blocks (with current availableWidth and full-page-height)\n */\nElementWriter.prototype.pushContext = function (contextOrWidth, height) {\n\tif (contextOrWidth === undefined) {\n\t\theight = this.context.getCurrentPage().height - this.context.pageMargins.top - this.context.pageMargins.bottom;\n\t\tcontextOrWidth = this.context.availableWidth;\n\t}\n\n\tif (isNumber(contextOrWidth)) {\n\t\tcontextOrWidth = new DocumentContext({ width: contextOrWidth, height: height }, { left: 0, right: 0, top: 0, bottom: 0 });\n\t}\n\n\tthis.contextStack.push(this.context);\n\tthis.context = contextOrWidth;\n};\n\nElementWriter.prototype.popContext = function () {\n\tthis.context = this.contextStack.pop();\n};\n\nElementWriter.prototype.getCurrentPositionOnPage = function () {\n\treturn (this.contextStack[0] || this.context).getCurrentPosition();\n};\n\n\nmodule.exports = ElementWriter;\n\n\n/***/ }),\n\n/***/ 2249:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isArray = (__webpack_require__(6225).isArray);\n\nfunction typeName(bold, italics) {\n\tvar type = 'normal';\n\tif (bold && italics) {\n\t\ttype = 'bolditalics';\n\t} else if (bold) {\n\t\ttype = 'bold';\n\t} else if (italics) {\n\t\ttype = 'italics';\n\t}\n\treturn type;\n}\n\nfunction FontProvider(fontDescriptors, pdfKitDoc) {\n\tthis.fonts = {};\n\tthis.pdfKitDoc = pdfKitDoc;\n\tthis.fontCache = {};\n\n\tfor (var font in fontDescriptors) {\n\t\tif (fontDescriptors.hasOwnProperty(font)) {\n\t\t\tvar fontDef = fontDescriptors[font];\n\n\t\t\tthis.fonts[font] = {\n\t\t\t\tnormal: fontDef.normal,\n\t\t\t\tbold: fontDef.bold,\n\t\t\t\titalics: fontDef.italics,\n\t\t\t\tbolditalics: fontDef.bolditalics\n\t\t\t};\n\t\t}\n\t}\n}\n\nFontProvider.prototype.getFontType = function (bold, italics) {\n\treturn typeName(bold, italics);\n}\n\nFontProvider.prototype.getFontFile = function (familyName, bold, italics) {\n\tvar type = this.getFontType(bold, italics);\n\tif (!this.fonts[familyName] || !this.fonts[familyName][type]) {\n\t\treturn null;\n\t}\n\n\treturn this.fonts[familyName][type];\n}\n\nFontProvider.prototype.provideFont = function (familyName, bold, italics) {\n\tvar type = this.getFontType(bold, italics);\n\tif (this.getFontFile(familyName, bold, italics) === null) {\n\t\tthrow new Error('Font \\'' + familyName + '\\' in style \\'' + type + '\\' is not defined in the font section of the document definition.');\n\t}\n\n\tthis.fontCache[familyName] = this.fontCache[familyName] || {};\n\n\tif (!this.fontCache[familyName][type]) {\n\t\tvar def = this.fonts[familyName][type];\n\t\tif (!isArray(def)) {\n\t\t\tdef = [def];\n\t\t}\n\t\tthis.fontCache[familyName][type] = this.pdfKitDoc.font.apply(this.pdfKitDoc, def)._font;\n\t}\n\n\treturn this.fontCache[familyName][type];\n};\n\nmodule.exports = FontProvider;\n\n\n/***/ }),\n\n/***/ 6225:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nfunction isString(variable) {\n\treturn typeof variable === 'string' || variable instanceof String;\n}\n\nfunction isNumber(variable) {\n\treturn typeof variable === 'number' || variable instanceof Number;\n}\n\nfunction isBoolean(variable) {\n\treturn typeof variable === 'boolean';\n}\n\nfunction isArray(variable) {\n\treturn Array.isArray(variable);\n}\n\nfunction isFunction(variable) {\n\treturn typeof variable === 'function';\n}\n\nfunction isObject(variable) {\n\treturn variable !== null && typeof variable === 'object';\n}\n\nfunction isNull(variable) {\n\treturn variable === null;\n}\n\nfunction isUndefined(variable) {\n\treturn variable === undefined;\n}\n\nfunction pack() {\n\tvar result = {};\n\n\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\tvar obj = arguments[i];\n\n\t\tif (obj) {\n\t\t\tfor (var key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tresult[key] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction offsetVector(vector, x, y) {\n\tswitch (vector.type) {\n\t\tcase 'ellipse':\n\t\tcase 'rect':\n\t\t\tvector.x += x;\n\t\t\tvector.y += y;\n\t\t\tbreak;\n\t\tcase 'line':\n\t\t\tvector.x1 += x;\n\t\t\tvector.x2 += x;\n\t\t\tvector.y1 += y;\n\t\t\tvector.y2 += y;\n\t\t\tbreak;\n\t\tcase 'polyline':\n\t\t\tfor (var i = 0, l = vector.points.length; i < l; i++) {\n\t\t\t\tvector.points[i].x += x;\n\t\t\t\tvector.points[i].y += y;\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nfunction fontStringify(key, val) {\n\tif (key === 'font') {\n\t\treturn 'font';\n\t}\n\treturn val;\n}\n\nfunction getNodeId(node) {\n\tif (node.id) {\n\t\treturn node.id;\n\t}\n\n\tif (isArray(node.text)) {\n\t\tfor (var i = 0, l = node.text.length; i < l; i++) {\n\t\t\tvar n = node.text[i];\n\t\t\tvar nodeId = getNodeId(n);\n\t\t\tif (nodeId) {\n\t\t\t\treturn nodeId;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction isPattern(color) {\n\treturn isArray(color) && color.length === 2;\n}\n\n// converts from a [<pattern name>, <color>] as used by pdfmake\n// into [<pattern object>, <color>] as used by pdfkit\n// (the pattern has to be registered in the doc definition of course)\nfunction getPattern(color, patterns) {\n\treturn [patterns[color[0]], color[1]];\n}\n\nmodule.exports = {\n\tisString: isString,\n\tisNumber: isNumber,\n\tisBoolean: isBoolean,\n\tisArray: isArray,\n\tisFunction: isFunction,\n\tisObject: isObject,\n\tisNull: isNull,\n\tisUndefined: isUndefined,\n\tpack: pack,\n\tfontStringify: fontStringify,\n\toffsetVector: offsetVector,\n\tgetNodeId: getNodeId,\n\tisPattern: isPattern,\n\tgetPattern: getPattern\n};\n\n\n/***/ }),\n\n/***/ 3090:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\nvar fs = __webpack_require__(3857);\n\nfunction ImageMeasure(pdfKitDoc, imageDictionary) {\n\tthis.pdfKitDoc = pdfKitDoc;\n\tthis.imageDictionary = imageDictionary || {};\n}\n\nImageMeasure.prototype.measureImage = function (src) {\n\tvar image;\n\tvar that = this;\n\n\tif (!this.pdfKitDoc._imageRegistry[src]) {\n\t\ttry {\n\t\t\timage = this.pdfKitDoc.openImage(realImageSrc(src));\n\t\t\tif (!image) {\n\t\t\t\tthrow 'No image';\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow 'Invalid image: ' + error.toString() + '\\nImages dictionary should contain dataURL entries (or local file paths in node.js)';\n\t\t}\n\t\timage.embed(this.pdfKitDoc);\n\t\tthis.pdfKitDoc._imageRegistry[src] = image;\n\t} else {\n\t\timage = this.pdfKitDoc._imageRegistry[src];\n\t}\n\n\treturn { width: image.width, height: image.height };\n\n\tfunction realImageSrc(src) {\n\t\tvar img = that.imageDictionary[src];\n\n\t\tif (!img) {\n\t\t\treturn src;\n\t\t}\n\n\t\tif (fs.existsSync(img)) {\n\t\t\treturn fs.readFileSync(img);\n\t\t}\n\n\t\tvar index = img.indexOf('base64,');\n\t\tif (index < 0) {\n\t\t\treturn that.imageDictionary[src];\n\t\t}\n\n\t\treturn Buffer.from(img.substring(index + 7), 'base64');\n\t}\n};\n\nmodule.exports = ImageMeasure;\n\n\n/***/ }),\n\n/***/ 2678:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar TraversalTracker = __webpack_require__(8537);\nvar DocPreprocessor = __webpack_require__(4889);\nvar DocMeasure = __webpack_require__(1728);\nvar DocumentContext = __webpack_require__(3858);\nvar PageElementWriter = __webpack_require__(2912);\nvar ColumnCalculator = __webpack_require__(4498);\nvar TableProcessor = __webpack_require__(9342);\nvar Line = __webpack_require__(4775);\nvar isString = (__webpack_require__(6225).isString);\nvar isArray = (__webpack_require__(6225).isArray);\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar isNull = (__webpack_require__(6225).isNull);\nvar pack = (__webpack_require__(6225).pack);\nvar offsetVector = (__webpack_require__(6225).offsetVector);\nvar fontStringify = (__webpack_require__(6225).fontStringify);\nvar getNodeId = (__webpack_require__(6225).getNodeId);\nvar isFunction = (__webpack_require__(6225).isFunction);\nvar TextTools = __webpack_require__(1350);\nvar StyleContextStack = __webpack_require__(7597);\nvar isNumber = (__webpack_require__(6225).isNumber);\n\nfunction addAll(target, otherArray) {\n\totherArray.forEach(function (item) {\n\t\ttarget.push(item);\n\t});\n}\n\n/**\n * Creates an instance of LayoutBuilder - layout engine which turns document-definition-object\n * into a set of pages, lines, inlines and vectors ready to be rendered into a PDF\n *\n * @param {Object} pageSize - an object defining page width and height\n * @param {Object} pageMargins - an object defining top, left, right and bottom margins\n */\nfunction LayoutBuilder(pageSize, pageMargins, imageMeasure, svgMeasure) {\n\tthis.pageSize = pageSize;\n\tthis.pageMargins = pageMargins;\n\tthis.tracker = new TraversalTracker();\n\tthis.imageMeasure = imageMeasure;\n\tthis.svgMeasure = svgMeasure;\n\tthis.tableLayouts = {};\n}\n\nLayoutBuilder.prototype.registerTableLayouts = function (tableLayouts) {\n\tthis.tableLayouts = pack(this.tableLayouts, tableLayouts);\n};\n\n/**\n * Executes layout engine on document-definition-object and creates an array of pages\n * containing positioned Blocks, Lines and inlines\n *\n * @param {Object} docStructure document-definition-object\n * @param {Object} fontProvider font provider\n * @param {Object} styleDictionary dictionary with style definitions\n * @param {Object} defaultStyle default style definition\n * @return {Array} an array of pages\n */\nLayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {\n\n\tfunction addPageBreaksIfNecessary(linearNodeList, pages) {\n\n\t\tif (!isFunction(pageBreakBeforeFct)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlinearNodeList = linearNodeList.filter(function (node) {\n\t\t\treturn node.positions.length > 0;\n\t\t});\n\n\t\tlinearNodeList.forEach(function (node) {\n\t\t\tvar nodeInfo = {};\n\t\t\t[\n\t\t\t\t'id', 'text', 'ul', 'ol', 'table', 'image', 'qr', 'canvas', 'svg', 'columns',\n\t\t\t\t'headlineLevel', 'style', 'pageBreak', 'pageOrientation',\n\t\t\t\t'width', 'height'\n\t\t\t].forEach(function (key) {\n\t\t\t\tif (node[key] !== undefined) {\n\t\t\t\t\tnodeInfo[key] = node[key];\n\t\t\t\t}\n\t\t\t});\n\t\t\tnodeInfo.startPosition = node.positions[0];\n\t\t\tnodeInfo.pageNumbers = Array.from(new Set(node.positions.map(function (node) { return node.pageNumber; })));\n\t\t\tnodeInfo.pages = pages.length;\n\t\t\tnodeInfo.stack = isArray(node.stack);\n\n\t\t\tnode.nodeInfo = nodeInfo;\n\t\t});\n\n\t\tfor (var index = 0; index < linearNodeList.length; index++) {\n\t\t\tvar node = linearNodeList[index];\n\t\t\tif (node.pageBreak !== 'before' && !node.pageBreakCalculated) {\n\t\t\t\tnode.pageBreakCalculated = true;\n\t\t\t\tvar pageNumber = node.nodeInfo.pageNumbers[0];\n\t\t\t\tvar followingNodesOnPage = [];\n\t\t\t\tvar nodesOnNextPage = [];\n\t\t\t\tvar previousNodesOnPage = [];\n\t\t\t\tif (pageBreakBeforeFct.length > 1) {\n\t\t\t\t\tfor (var ii = index + 1, l = linearNodeList.length; ii < l; ii++) {\n\t\t\t\t\t\tif (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {\n\t\t\t\t\t\t\tfollowingNodesOnPage.push(linearNodeList[ii].nodeInfo);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pageBreakBeforeFct.length > 2 && linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber + 1) > -1) {\n\t\t\t\t\t\t\tnodesOnNextPage.push(linearNodeList[ii].nodeInfo);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pageBreakBeforeFct.length > 3) {\n\t\t\t\t\tfor (var ii = 0; ii < index; ii++) {\n\t\t\t\t\t\tif (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {\n\t\t\t\t\t\t\tpreviousNodesOnPage.push(linearNodeList[ii].nodeInfo);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pageBreakBeforeFct(node.nodeInfo, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage)) {\n\t\t\t\t\tnode.pageBreak = 'before';\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tthis.docPreprocessor = new DocPreprocessor();\n\tthis.docMeasure = new DocMeasure(fontProvider, styleDictionary, defaultStyle, this.imageMeasure, this.svgMeasure, this.tableLayouts, images);\n\n\n\tfunction resetXYs(result) {\n\t\tresult.linearNodeList.forEach(function (node) {\n\t\t\tnode.resetXY();\n\t\t});\n\t}\n\n\tvar result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);\n\twhile (addPageBreaksIfNecessary(result.linearNodeList, result.pages)) {\n\t\tresetXYs(result);\n\t\tresult = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);\n\t}\n\n\treturn result.pages;\n};\n\nLayoutBuilder.prototype.tryLayoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {\n\n\tthis.linearNodeList = [];\n\tdocStructure = this.docPreprocessor.preprocessDocument(docStructure);\n\tdocStructure = this.docMeasure.measureDocument(docStructure);\n\n\tthis.writer = new PageElementWriter(\n\t\tnew DocumentContext(this.pageSize, this.pageMargins), this.tracker);\n\n\tvar _this = this;\n\tthis.writer.context().tracker.startTracking('pageAdded', function () {\n\t\t_this.addBackground(background);\n\t});\n\n\tthis.addBackground(background);\n\tthis.processNode(docStructure);\n\tthis.addHeadersAndFooters(header, footer);\n\tif (watermark != null) {\n\t\tthis.addWatermark(watermark, fontProvider, defaultStyle);\n\t}\n\n\treturn { pages: this.writer.context().pages, linearNodeList: this.linearNodeList };\n};\n\n\nLayoutBuilder.prototype.addBackground = function (background) {\n\tvar backgroundGetter = isFunction(background) ? background : function () {\n\t\treturn background;\n\t};\n\n\tvar context = this.writer.context();\n\tvar pageSize = context.getCurrentPage().pageSize;\n\n\tvar pageBackground = backgroundGetter(context.page + 1, pageSize);\n\n\tif (pageBackground) {\n\t\tthis.writer.beginUnbreakableBlock(pageSize.width, pageSize.height);\n\t\tpageBackground = this.docPreprocessor.preprocessDocument(pageBackground);\n\t\tthis.processNode(this.docMeasure.measureDocument(pageBackground));\n\t\tthis.writer.commitUnbreakableBlock(0, 0);\n\t\tcontext.backgroundLength[context.page] += pageBackground.positions.length;\n\t}\n};\n\nLayoutBuilder.prototype.addStaticRepeatable = function (headerOrFooter, sizeFunction) {\n\tthis.addDynamicRepeatable(function () {\n\t\treturn JSON.parse(JSON.stringify(headerOrFooter)); // copy to new object\n\t}, sizeFunction);\n};\n\nLayoutBuilder.prototype.addDynamicRepeatable = function (nodeGetter, sizeFunction) {\n\tvar pages = this.writer.context().pages;\n\n\tfor (var pageIndex = 0, l = pages.length; pageIndex < l; pageIndex++) {\n\t\tthis.writer.context().page = pageIndex;\n\n\t\tvar node = nodeGetter(pageIndex + 1, l, this.writer.context().pages[pageIndex].pageSize);\n\n\t\tif (node) {\n\t\t\tvar sizes = sizeFunction(this.writer.context().getCurrentPage().pageSize, this.pageMargins);\n\t\t\tthis.writer.beginUnbreakableBlock(sizes.width, sizes.height);\n\t\t\tnode = this.docPreprocessor.preprocessDocument(node);\n\t\t\tthis.processNode(this.docMeasure.measureDocument(node));\n\t\t\tthis.writer.commitUnbreakableBlock(sizes.x, sizes.y);\n\t\t}\n\t}\n};\n\nLayoutBuilder.prototype.addHeadersAndFooters = function (header, footer) {\n\tvar headerSizeFct = function (pageSize, pageMargins) {\n\t\treturn {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: pageSize.width,\n\t\t\theight: pageMargins.top\n\t\t};\n\t};\n\n\tvar footerSizeFct = function (pageSize, pageMargins) {\n\t\treturn {\n\t\t\tx: 0,\n\t\t\ty: pageSize.height - pageMargins.bottom,\n\t\t\twidth: pageSize.width,\n\t\t\theight: pageMargins.bottom\n\t\t};\n\t};\n\n\tif (isFunction(header)) {\n\t\tthis.addDynamicRepeatable(header, headerSizeFct);\n\t} else if (header) {\n\t\tthis.addStaticRepeatable(header, headerSizeFct);\n\t}\n\n\tif (isFunction(footer)) {\n\t\tthis.addDynamicRepeatable(footer, footerSizeFct);\n\t} else if (footer) {\n\t\tthis.addStaticRepeatable(footer, footerSizeFct);\n\t}\n};\n\nLayoutBuilder.prototype.addWatermark = function (watermark, fontProvider, defaultStyle) {\n\tif (isString(watermark)) {\n\t\twatermark = { 'text': watermark };\n\t}\n\n\tif (!watermark.text) { // empty watermark text\n\t\treturn;\n\t}\n\n\twatermark.font = watermark.font || defaultStyle.font || 'Roboto';\n\twatermark.fontSize = watermark.fontSize || 'auto';\n\twatermark.color = watermark.color || 'black';\n\twatermark.opacity = isNumber(watermark.opacity) ? watermark.opacity : 0.6;\n\twatermark.bold = watermark.bold || false;\n\twatermark.italics = watermark.italics || false;\n\twatermark.angle = !isUndefined(watermark.angle) && !isNull(watermark.angle) ? watermark.angle : null;\n\n\tif (watermark.angle === null) {\n\t\twatermark.angle = Math.atan2(this.pageSize.height, this.pageSize.width) * -180 / Math.PI;\n\t}\n\n\tif (watermark.fontSize === 'auto') {\n\t\twatermark.fontSize = getWatermarkFontSize(this.pageSize, watermark, fontProvider);\n\t}\n\n\tvar watermarkObject = {\n\t\ttext: watermark.text,\n\t\tfont: fontProvider.provideFont(watermark.font, watermark.bold, watermark.italics),\n\t\tfontSize: watermark.fontSize,\n\t\tcolor: watermark.color,\n\t\topacity: watermark.opacity,\n\t\tangle: watermark.angle\n\t};\n\n\twatermarkObject._size = getWatermarkSize(watermark, fontProvider);\n\n\tvar pages = this.writer.context().pages;\n\tfor (var i = 0, l = pages.length; i < l; i++) {\n\t\tpages[i].watermark = watermarkObject;\n\t}\n\n\tfunction getWatermarkSize(watermark, fontProvider) {\n\t\tvar textTools = new TextTools(fontProvider);\n\t\tvar styleContextStack = new StyleContextStack(null, { font: watermark.font, bold: watermark.bold, italics: watermark.italics });\n\n\t\tstyleContextStack.push({\n\t\t\tfontSize: watermark.fontSize\n\t\t});\n\n\t\tvar size = textTools.sizeOfString(watermark.text, styleContextStack);\n\t\tvar rotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);\n\n\t\treturn { size: size, rotatedSize: rotatedSize };\n\t}\n\n\tfunction getWatermarkFontSize(pageSize, watermark, fontProvider) {\n\t\tvar textTools = new TextTools(fontProvider);\n\t\tvar styleContextStack = new StyleContextStack(null, { font: watermark.font, bold: watermark.bold, italics: watermark.italics });\n\t\tvar rotatedSize;\n\n\t\t/**\n\t\t * Binary search the best font size.\n\t\t * Initial bounds [0, 1000]\n\t\t * Break when range < 1\n\t\t */\n\t\tvar a = 0;\n\t\tvar b = 1000;\n\t\tvar c = (a + b) / 2;\n\t\twhile (Math.abs(a - b) > 1) {\n\t\t\tstyleContextStack.push({\n\t\t\t\tfontSize: c\n\t\t\t});\n\t\t\trotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);\n\t\t\tif (rotatedSize.width > pageSize.width) {\n\t\t\t\tb = c;\n\t\t\t\tc = (a + b) / 2;\n\t\t\t} else if (rotatedSize.width < pageSize.width) {\n\t\t\t\tif (rotatedSize.height > pageSize.height) {\n\t\t\t\t\tb = c;\n\t\t\t\t\tc = (a + b) / 2;\n\t\t\t\t} else {\n\t\t\t\t\ta = c;\n\t\t\t\t\tc = (a + b) / 2;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstyleContextStack.pop();\n\t\t}\n\t\t/*\n\t\t End binary search\n\t\t */\n\t\treturn c;\n\t}\n};\n\nfunction decorateNode(node) {\n\tvar x = node.x, y = node.y;\n\tnode.positions = [];\n\n\tif (isArray(node.canvas)) {\n\t\tnode.canvas.forEach(function (vector) {\n\t\t\tvar x = vector.x, y = vector.y, x1 = vector.x1, y1 = vector.y1, x2 = vector.x2, y2 = vector.y2;\n\t\t\tvector.resetXY = function () {\n\t\t\t\tvector.x = x;\n\t\t\t\tvector.y = y;\n\t\t\t\tvector.x1 = x1;\n\t\t\t\tvector.y1 = y1;\n\t\t\t\tvector.x2 = x2;\n\t\t\t\tvector.y2 = y2;\n\t\t\t};\n\t\t});\n\t}\n\n\tnode.resetXY = function () {\n\t\tnode.x = x;\n\t\tnode.y = y;\n\t\tif (isArray(node.canvas)) {\n\t\t\tnode.canvas.forEach(function (vector) {\n\t\t\t\tvector.resetXY();\n\t\t\t});\n\t\t}\n\t};\n}\n\nLayoutBuilder.prototype.processNode = function (node) {\n\tvar self = this;\n\n\tthis.linearNodeList.push(node);\n\tdecorateNode(node);\n\n\tapplyMargins(function () {\n\t\tvar unbreakable = node.unbreakable;\n\t\tif (unbreakable) {\n\t\t\tself.writer.beginUnbreakableBlock();\n\t\t}\n\n\t\tvar absPosition = node.absolutePosition;\n\t\tif (absPosition) {\n\t\t\tself.writer.context().beginDetachedBlock();\n\t\t\tself.writer.context().moveTo(absPosition.x || 0, absPosition.y || 0);\n\t\t}\n\n\t\tvar relPosition = node.relativePosition;\n\t\tif (relPosition) {\n\t\t\tself.writer.context().beginDetachedBlock();\n\t\t\tself.writer.context().moveToRelative(relPosition.x || 0, relPosition.y || 0);\n\t\t}\n\n\t\tif (node.stack) {\n\t\t\tself.processVerticalContainer(node);\n\t\t} else if (node.columns) {\n\t\t\tself.processColumns(node);\n\t\t} else if (node.ul) {\n\t\t\tself.processList(false, node);\n\t\t} else if (node.ol) {\n\t\t\tself.processList(true, node);\n\t\t} else if (node.table) {\n\t\t\tself.processTable(node);\n\t\t} else if (node.text !== undefined) {\n\t\t\tself.processLeaf(node);\n\t\t} else if (node.toc) {\n\t\t\tself.processToc(node);\n\t\t} else if (node.image) {\n\t\t\tself.processImage(node);\n\t\t} else if (node.svg) {\n\t\t\tself.processSVG(node);\n\t\t} else if (node.canvas) {\n\t\t\tself.processCanvas(node);\n\t\t} else if (node.qr) {\n\t\t\tself.processQr(node);\n\t\t} else if (!node._span) {\n\t\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\n\t\t}\n\n\t\tif (absPosition || relPosition) {\n\t\t\tself.writer.context().endDetachedBlock();\n\t\t}\n\n\t\tif (unbreakable) {\n\t\t\tself.writer.commitUnbreakableBlock();\n\t\t}\n\t});\n\n\tfunction applyMargins(callback) {\n\t\tvar margin = node._margin;\n\n\t\tif (node.pageBreak === 'before') {\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t} else if (node.pageBreak === 'beforeOdd') {\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\tif ((self.writer.context().page + 1) % 2 === 1) {\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\t}\n\t\t} else if (node.pageBreak === 'beforeEven') {\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\tif ((self.writer.context().page + 1) % 2 === 0) {\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\t}\n\t\t}\n\n\t\tif (margin) {\n\t\t\tself.writer.context().moveDown(margin[1]);\n\t\t\tself.writer.context().addMargin(margin[0], margin[2]);\n\t\t}\n\n\t\tcallback();\n\n\t\tif (margin) {\n\t\t\tself.writer.context().addMargin(-margin[0], -margin[2]);\n\t\t\tself.writer.context().moveDown(margin[3]);\n\t\t}\n\n\t\tif (node.pageBreak === 'after') {\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t} else if (node.pageBreak === 'afterOdd') {\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\tif ((self.writer.context().page + 1) % 2 === 1) {\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\t}\n\t\t} else if (node.pageBreak === 'afterEven') {\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\tif ((self.writer.context().page + 1) % 2 === 0) {\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\t}\n\t\t}\n\t}\n};\n\n// vertical container\nLayoutBuilder.prototype.processVerticalContainer = function (node) {\n\tvar self = this;\n\tnode.stack.forEach(function (item) {\n\t\tself.processNode(item);\n\t\taddAll(node.positions, item.positions);\n\n\t\t//TODO: paragraph gap\n\t});\n};\n\n// columns\nLayoutBuilder.prototype.processColumns = function (columnNode) {\n\tvar columns = columnNode.columns;\n\tvar availableWidth = this.writer.context().availableWidth;\n\tvar gaps = gapArray(columnNode._gap);\n\n\tif (gaps) {\n\t\tavailableWidth -= (gaps.length - 1) * columnNode._gap;\n\t}\n\n\tColumnCalculator.buildColumnWidths(columns, availableWidth);\n\tvar result = this.processRow(columns, columns, gaps);\n\taddAll(columnNode.positions, result.positions);\n\n\n\tfunction gapArray(gap) {\n\t\tif (!gap) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar gaps = [];\n\t\tgaps.push(0);\n\n\t\tfor (var i = columns.length - 1; i > 0; i--) {\n\t\t\tgaps.push(gap);\n\t\t}\n\n\t\treturn gaps;\n\t}\n};\n\nLayoutBuilder.prototype.processRow = function (columns, widths, gaps, tableBody, tableRow, height) {\n\tvar self = this;\n\tvar pageBreaks = [], positions = [];\n\n\tthis.tracker.auto('pageChanged', storePageBreakData, function () {\n\t\twidths = widths || columns;\n\n\t\tself.writer.context().beginColumnGroup();\n\n\t\tfor (var i = 0, l = columns.length; i < l; i++) {\n\t\t\tvar column = columns[i];\n\t\t\tvar width = widths[i]._calcWidth;\n\t\t\tvar leftOffset = colLeftOffset(i);\n\n\t\t\tif (column.colSpan && column.colSpan > 1) {\n\t\t\t\tfor (var j = 1; j < column.colSpan; j++) {\n\t\t\t\t\twidth += widths[++i]._calcWidth + gaps[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.writer.context().beginColumn(width, leftOffset, getEndingCell(column, i));\n\t\t\tif (!column._span) {\n\t\t\t\tself.processNode(column);\n\t\t\t\taddAll(positions, column.positions);\n\t\t\t} else if (column._columnEndingContext) {\n\t\t\t\t// row-span ending\n\t\t\t\tself.writer.context().markEnding(column);\n\t\t\t}\n\t\t}\n\n\t\tself.writer.context().completeColumnGroup(height);\n\t});\n\n\treturn { pageBreaks: pageBreaks, positions: positions };\n\n\tfunction storePageBreakData(data) {\n\t\tvar pageDesc;\n\n\t\tfor (var i = 0, l = pageBreaks.length; i < l; i++) {\n\t\t\tvar desc = pageBreaks[i];\n\t\t\tif (desc.prevPage === data.prevPage) {\n\t\t\t\tpageDesc = desc;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!pageDesc) {\n\t\t\tpageDesc = data;\n\t\t\tpageBreaks.push(pageDesc);\n\t\t}\n\t\tpageDesc.prevY = Math.max(pageDesc.prevY, data.prevY);\n\t\tpageDesc.y = Math.min(pageDesc.y, data.y);\n\t}\n\n\tfunction colLeftOffset(i) {\n\t\tif (gaps && gaps.length > i) {\n\t\t\treturn gaps[i];\n\t\t}\n\t\treturn 0;\n\t}\n\n\tfunction getEndingCell(column, columnIndex) {\n\t\tif (column.rowSpan && column.rowSpan > 1) {\n\t\t\tvar endingRow = tableRow + column.rowSpan - 1;\n\t\t\tif (endingRow >= tableBody.length) {\n\t\t\t\tthrow 'Row span for column ' + columnIndex + ' (with indexes starting from 0) exceeded row count';\n\t\t\t}\n\t\t\treturn tableBody[endingRow][columnIndex];\n\t\t}\n\n\t\treturn null;\n\t}\n};\n\n// lists\nLayoutBuilder.prototype.processList = function (orderedList, node) {\n\tvar self = this,\n\t\titems = orderedList ? node.ol : node.ul,\n\t\tgapSize = node._gapSize;\n\n\tthis.writer.context().addMargin(gapSize.width);\n\n\tvar nextMarker;\n\tthis.tracker.auto('lineAdded', addMarkerToFirstLeaf, function () {\n\t\titems.forEach(function (item) {\n\t\t\tnextMarker = item.listMarker;\n\t\t\tself.processNode(item);\n\t\t\taddAll(node.positions, item.positions);\n\t\t});\n\t});\n\n\tthis.writer.context().addMargin(-gapSize.width);\n\n\tfunction addMarkerToFirstLeaf(line) {\n\t\t// I'm not very happy with the way list processing is implemented\n\t\t// (both code and algorithm should be rethinked)\n\t\tif (nextMarker) {\n\t\t\tvar marker = nextMarker;\n\t\t\tnextMarker = null;\n\n\t\t\tif (marker.canvas) {\n\t\t\t\tvar vector = marker.canvas[0];\n\n\t\t\t\toffsetVector(vector, -marker._minWidth, 0);\n\t\t\t\tself.writer.addVector(vector);\n\t\t\t} else if (marker._inlines) {\n\t\t\t\tvar markerLine = new Line(self.pageSize.width);\n\t\t\t\tmarkerLine.addInline(marker._inlines[0]);\n\t\t\t\tmarkerLine.x = -marker._minWidth;\n\t\t\t\tmarkerLine.y = line.getAscenderHeight() - markerLine.getAscenderHeight();\n\t\t\t\tself.writer.addLine(markerLine, true);\n\t\t\t}\n\t\t}\n\t}\n};\n\n// tables\nLayoutBuilder.prototype.processTable = function (tableNode) {\n\tvar processor = new TableProcessor(tableNode);\n\n\tprocessor.beginTable(this.writer);\n\n\tvar rowHeights = tableNode.table.heights;\n\tfor (var i = 0, l = tableNode.table.body.length; i < l; i++) {\n\t\tprocessor.beginRow(i, this.writer);\n\n\t\tvar height;\n\t\tif (isFunction(rowHeights)) {\n\t\t\theight = rowHeights(i);\n\t\t} else if (isArray(rowHeights)) {\n\t\t\theight = rowHeights[i];\n\t\t} else {\n\t\t\theight = rowHeights;\n\t\t}\n\n\t\tif (height === 'auto') {\n\t\t\theight = undefined;\n\t\t}\n\n\t\tvar result = this.processRow(tableNode.table.body[i], tableNode.table.widths, tableNode._offsets.offsets, tableNode.table.body, i, height);\n\t\taddAll(tableNode.positions, result.positions);\n\n\t\tprocessor.endRow(i, this.writer, result.pageBreaks);\n\t}\n\n\tprocessor.endTable(this.writer);\n};\n\n// leafs (texts)\nLayoutBuilder.prototype.processLeaf = function (node) {\n\tvar line = this.buildNextLine(node);\n\tif (line && (node.tocItem || node.id)) {\n\t\tline._node = node;\n\t}\n\tvar currentHeight = (line) ? line.getHeight() : 0;\n\tvar maxHeight = node.maxHeight || -1;\n\n\tif (line) {\n\t\tvar nodeId = getNodeId(node);\n\t\tif (nodeId) {\n\t\t\tline.id = nodeId;\n\t\t}\n\t}\n\n\tif (node._tocItemRef) {\n\t\tline._pageNodeRef = node._tocItemRef;\n\t}\n\n\tif (node._pageRef) {\n\t\tline._pageNodeRef = node._pageRef._nodeRef;\n\t}\n\n\tif (line && line.inlines && isArray(line.inlines)) {\n\t\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\n\t\t\tif (line.inlines[i]._tocItemRef) {\n\t\t\t\tline.inlines[i]._pageNodeRef = line.inlines[i]._tocItemRef;\n\t\t\t}\n\n\t\t\tif (line.inlines[i]._pageRef) {\n\t\t\t\tline.inlines[i]._pageNodeRef = line.inlines[i]._pageRef._nodeRef;\n\t\t\t}\n\t\t}\n\t}\n\n\twhile (line && (maxHeight === -1 || currentHeight < maxHeight)) {\n\t\tvar positions = this.writer.addLine(line);\n\t\tnode.positions.push(positions);\n\t\tline = this.buildNextLine(node);\n\t\tif (line) {\n\t\t\tcurrentHeight += line.getHeight();\n\t\t}\n\t}\n};\n\nLayoutBuilder.prototype.processToc = function (node) {\n\tif (node.toc.title) {\n\t\tthis.processNode(node.toc.title);\n\t}\n\tif (node.toc._table) {\n\t\tthis.processNode(node.toc._table);\n\t}\n};\n\nLayoutBuilder.prototype.buildNextLine = function (textNode) {\n\n\tfunction cloneInline(inline) {\n\t\tvar newInline = inline.constructor();\n\t\tfor (var key in inline) {\n\t\t\tnewInline[key] = inline[key];\n\t\t}\n\t\treturn newInline;\n\t}\n\n\tif (!textNode._inlines || textNode._inlines.length === 0) {\n\t\treturn null;\n\t}\n\n\tvar line = new Line(this.writer.context().availableWidth);\n\tvar textTools = new TextTools(null);\n\n\tvar isForceContinue = false;\n\twhile (textNode._inlines && textNode._inlines.length > 0 &&\n\t\t(line.hasEnoughSpaceForInline(textNode._inlines[0], textNode._inlines.slice(1)) || isForceContinue)) {\n\t\tvar isHardWrap = false;\n\t\tvar inline = textNode._inlines.shift();\n\t\tisForceContinue = false;\n\n\t\tif (!inline.noWrap && inline.text.length > 1 && inline.width > line.getAvailableWidth()) {\n\t\t\tvar widthPerChar = inline.width / inline.text.length;\n\t\t\tvar maxChars = Math.floor(line.getAvailableWidth() / widthPerChar);\n\t\t\tif (maxChars < 1) {\n\t\t\t\tmaxChars = 1;\n\t\t\t}\n\t\t\tif (maxChars < inline.text.length) {\n\t\t\t\tvar newInline = cloneInline(inline);\n\n\t\t\t\tnewInline.text = inline.text.substr(maxChars);\n\t\t\t\tinline.text = inline.text.substr(0, maxChars);\n\n\t\t\t\tnewInline.width = textTools.widthOfString(newInline.text, newInline.font, newInline.fontSize, newInline.characterSpacing, newInline.fontFeatures);\n\t\t\t\tinline.width = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures);\n\n\t\t\t\ttextNode._inlines.unshift(newInline);\n\t\t\t\tisHardWrap = true;\n\t\t\t}\n\t\t}\n\n\t\tline.addInline(inline);\n\n\t\tisForceContinue = inline.noNewLine && !isHardWrap;\n\t}\n\n\tline.lastLineInParagraph = textNode._inlines.length === 0;\n\n\treturn line;\n};\n\n// images\nLayoutBuilder.prototype.processImage = function (node) {\n\tvar position = this.writer.addImage(node);\n\tnode.positions.push(position);\n};\n\nLayoutBuilder.prototype.processSVG = function (node) {\n\tvar position = this.writer.addSVG(node);\n\tnode.positions.push(position);\n};\n\nLayoutBuilder.prototype.processCanvas = function (node) {\n\tvar height = node._minHeight;\n\n\tif (node.absolutePosition === undefined && this.writer.context().availableHeight < height) {\n\t\t// TODO: support for canvas larger than a page\n\t\t// TODO: support for other overflow methods\n\n\t\tthis.writer.moveToNextPage();\n\t}\n\n\tthis.writer.alignCanvas(node);\n\n\tnode.canvas.forEach(function (vector) {\n\t\tvar position = this.writer.addVector(vector);\n\t\tnode.positions.push(position);\n\t}, this);\n\n\tthis.writer.context().moveDown(height);\n};\n\nLayoutBuilder.prototype.processQr = function (node) {\n\tvar position = this.writer.addQr(node);\n\tnode.positions.push(position);\n};\n\nmodule.exports = LayoutBuilder;\n\n\n/***/ }),\n\n/***/ 4775:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/**\n * Creates an instance of Line\n *\n * @constructor\n * @this {Line}\n * @param {Number} Maximum width this line can have\n */\nfunction Line(maxWidth) {\n\tthis.maxWidth = maxWidth;\n\tthis.leadingCut = 0;\n\tthis.trailingCut = 0;\n\tthis.inlineWidths = 0;\n\tthis.inlines = [];\n}\n\nLine.prototype.getAscenderHeight = function () {\n\tvar y = 0;\n\n\tthis.inlines.forEach(function (inline) {\n\t\ty = Math.max(y, inline.font.ascender / 1000 * inline.fontSize);\n\t});\n\treturn y;\n};\n\nLine.prototype.hasEnoughSpaceForInline = function (inline, nextInlines) {\n\tnextInlines = nextInlines || [];\n\n\tif (this.inlines.length === 0) {\n\t\treturn true;\n\t}\n\tif (this.newLineForced) {\n\t\treturn false;\n\t}\n\n\tvar inlineWidth = inline.width;\n\tvar inlineTrailingCut = inline.trailingCut || 0;\n\tif (inline.noNewLine) {\n\t\tfor (var i = 0, l = nextInlines.length; i < l; i++) {\n\t\t\tvar nextInline = nextInlines[i];\n\t\t\tinlineWidth += nextInline.width;\n\t\t\tinlineTrailingCut += nextInline.trailingCut || 0;\n\t\t\tif (!nextInline.noNewLine) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (this.inlineWidths + inlineWidth - this.leadingCut - inlineTrailingCut) <= this.maxWidth;\n};\n\nLine.prototype.addInline = function (inline) {\n\tif (this.inlines.length === 0) {\n\t\tthis.leadingCut = inline.leadingCut || 0;\n\t}\n\tthis.trailingCut = inline.trailingCut || 0;\n\n\tinline.x = this.inlineWidths - this.leadingCut;\n\n\tthis.inlines.push(inline);\n\tthis.inlineWidths += inline.width;\n\n\tif (inline.lineEnd) {\n\t\tthis.newLineForced = true;\n\t}\n};\n\nLine.prototype.getWidth = function () {\n\treturn this.inlineWidths - this.leadingCut - this.trailingCut;\n};\n\nLine.prototype.getAvailableWidth = function () {\n\treturn this.maxWidth - this.getWidth();\n};\n\n/**\n * Returns line height\n * @return {Number}\n */\nLine.prototype.getHeight = function () {\n\tvar max = 0;\n\n\tthis.inlines.forEach(function (item) {\n\t\tmax = Math.max(max, item.height || 0);\n\t});\n\n\treturn max;\n};\n\nmodule.exports = Line;\n\n\n/***/ }),\n\n/***/ 2912:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar ElementWriter = __webpack_require__(1196);\n\n/**\n * Creates an instance of PageElementWriter - an extended ElementWriter\n * which can handle:\n * - page-breaks (it adds new pages when there's not enough space left),\n * - repeatable fragments (like table-headers, which are repeated everytime\n *                         a page-break occurs)\n * - transactions (used for unbreakable-blocks when we want to make sure\n *                 whole block will be rendered on the same page)\n */\nfunction PageElementWriter(context, tracker) {\n\tthis.transactionLevel = 0;\n\tthis.repeatables = [];\n\tthis.tracker = tracker;\n\tthis.writer = new ElementWriter(context, tracker);\n}\n\nfunction fitOnPage(self, addFct) {\n\tvar position = addFct(self);\n\tif (!position) {\n\t\tself.moveToNextPage();\n\t\tposition = addFct(self);\n\t}\n\treturn position;\n}\n\nPageElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) {\n\treturn fitOnPage(this, function (self) {\n\t\treturn self.writer.addLine(line, dontUpdateContextPosition, index);\n\t});\n};\n\nPageElementWriter.prototype.addImage = function (image, index) {\n\treturn fitOnPage(this, function (self) {\n\t\treturn self.writer.addImage(image, index);\n\t});\n};\n\nPageElementWriter.prototype.addSVG = function (image, index) {\n\treturn fitOnPage(this, function (self) {\n\t\treturn self.writer.addSVG(image, index);\n\t});\n};\n\nPageElementWriter.prototype.addQr = function (qr, index) {\n\treturn fitOnPage(this, function (self) {\n\t\treturn self.writer.addQr(qr, index);\n\t});\n};\n\nPageElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {\n\treturn this.writer.addVector(vector, ignoreContextX, ignoreContextY, index);\n};\n\nPageElementWriter.prototype.beginClip = function (width, height) {\n\treturn this.writer.beginClip(width, height);\n};\n\nPageElementWriter.prototype.endClip = function () {\n\treturn this.writer.endClip();\n};\n\nPageElementWriter.prototype.alignCanvas = function (node) {\n\tthis.writer.alignCanvas(node);\n};\n\nPageElementWriter.prototype.addFragment = function (fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {\n\tif (!this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition)) {\n\t\tthis.moveToNextPage();\n\t\tthis.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition);\n\t}\n};\n\nPageElementWriter.prototype.moveToNextPage = function (pageOrientation) {\n\n\tvar nextPage = this.writer.context.moveToNextPage(pageOrientation);\n\n\t// moveToNextPage is called multiple times for table, because is called for each column\n\t// and repeatables are inserted only in the first time. If columns are used, is needed\n\t// call for table in first column and then for table in the second column (is other repeatables).\n\tthis.repeatables.forEach(function (rep) {\n\t\tif (isUndefined(rep.insertedOnPages[this.writer.context.page])) {\n\t\t\trep.insertedOnPages[this.writer.context.page] = true;\n\t\t\tthis.writer.addFragment(rep, true);\n\t\t} else {\n\t\t\tthis.writer.context.moveDown(rep.height);\n\t\t}\n\t}, this);\n\n\tthis.writer.tracker.emit('pageChanged', {\n\t\tprevPage: nextPage.prevPage,\n\t\tprevY: nextPage.prevY,\n\t\ty: this.writer.context.y\n\t});\n};\n\nPageElementWriter.prototype.beginUnbreakableBlock = function (width, height) {\n\tif (this.transactionLevel++ === 0) {\n\t\tthis.originalX = this.writer.context.x;\n\t\tthis.writer.pushContext(width, height);\n\t}\n};\n\nPageElementWriter.prototype.commitUnbreakableBlock = function (forcedX, forcedY) {\n\tif (--this.transactionLevel === 0) {\n\t\tvar unbreakableContext = this.writer.context;\n\t\tthis.writer.popContext();\n\n\t\tvar nbPages = unbreakableContext.pages.length;\n\t\tif (nbPages > 0) {\n\t\t\t// no support for multi-page unbreakableBlocks\n\t\t\tvar fragment = unbreakableContext.pages[0];\n\t\t\tfragment.xOffset = forcedX;\n\t\t\tfragment.yOffset = forcedY;\n\n\t\t\t//TODO: vectors can influence height in some situations\n\t\t\tif (nbPages > 1) {\n\t\t\t\t// on out-of-context blocs (headers, footers, background) height should be the whole DocumentContext height\n\t\t\t\tif (forcedX !== undefined || forcedY !== undefined) {\n\t\t\t\t\tfragment.height = unbreakableContext.getCurrentPage().pageSize.height - unbreakableContext.pageMargins.top - unbreakableContext.pageMargins.bottom;\n\t\t\t\t} else {\n\t\t\t\t\tfragment.height = this.writer.context.getCurrentPage().pageSize.height - this.writer.context.pageMargins.top - this.writer.context.pageMargins.bottom;\n\t\t\t\t\tfor (var i = 0, l = this.repeatables.length; i < l; i++) {\n\t\t\t\t\t\tfragment.height -= this.repeatables[i].height;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfragment.height = unbreakableContext.y;\n\t\t\t}\n\n\t\t\tif (forcedX !== undefined || forcedY !== undefined) {\n\t\t\t\tthis.writer.addFragment(fragment, true, true, true);\n\t\t\t} else {\n\t\t\t\tthis.addFragment(fragment);\n\t\t\t}\n\t\t}\n\t}\n};\n\nPageElementWriter.prototype.currentBlockToRepeatable = function () {\n\tvar unbreakableContext = this.writer.context;\n\tvar rep = { items: [] };\n\n\tunbreakableContext.pages[0].items.forEach(function (item) {\n\t\trep.items.push(item);\n\t});\n\n\trep.xOffset = this.originalX;\n\n\t//TODO: vectors can influence height in some situations\n\trep.height = unbreakableContext.y;\n\n\trep.insertedOnPages = [];\n\n\treturn rep;\n};\n\nPageElementWriter.prototype.pushToRepeatables = function (rep) {\n\tthis.repeatables.push(rep);\n};\n\nPageElementWriter.prototype.popFromRepeatables = function () {\n\tthis.repeatables.pop();\n};\n\nPageElementWriter.prototype.context = function () {\n\treturn this.writer.context;\n};\n\nmodule.exports = PageElementWriter;\n\n\n/***/ }),\n\n/***/ 6079:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _interopDefault(ex) {\n\treturn (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex;\n}\n\nvar PdfKit = _interopDefault(__webpack_require__(5219));\n\nfunction getEngineInstance() {\n\treturn PdfKit;\n}\n\nfunction createPdfDocument(options) {\n\toptions = options || {};\n\treturn new PdfKit(options);\n}\n\nmodule.exports = {\n\tgetEngineInstance: getEngineInstance,\n\tcreatePdfDocument: createPdfDocument\n};\n\n\n/***/ }),\n\n/***/ 8617:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\n\n\nvar PdfKitEngine = __webpack_require__(6079);\nvar FontProvider = __webpack_require__(2249);\nvar LayoutBuilder = __webpack_require__(2678);\nvar sizes = __webpack_require__(4762);\nvar ImageMeasure = __webpack_require__(3090);\nvar SVGMeasure = __webpack_require__(7601);\nvar textDecorator = __webpack_require__(3497);\nvar TextTools = __webpack_require__(1350);\nvar isFunction = (__webpack_require__(6225).isFunction);\nvar isString = (__webpack_require__(6225).isString);\nvar isNumber = (__webpack_require__(6225).isNumber);\nvar isBoolean = (__webpack_require__(6225).isBoolean);\nvar isArray = (__webpack_require__(6225).isArray);\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar isPattern = (__webpack_require__(6225).isPattern);\nvar getPattern = (__webpack_require__(6225).getPattern);\nvar SVGtoPDF = __webpack_require__(8071);\n\nvar findFont = function (fonts, requiredFonts, defaultFont) {\n\tfor (var i = 0; i < requiredFonts.length; i++) {\n\t\tvar requiredFont = requiredFonts[i].toLowerCase();\n\n\t\tfor (var font in fonts) {\n\t\t\tif (font.toLowerCase() === requiredFont) {\n\t\t\t\treturn font;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn defaultFont;\n};\n\n////////////////////////////////////////\n// PdfPrinter\n\n/**\n * @class Creates an instance of a PdfPrinter which turns document definition into a pdf\n *\n * @param {Object} fontDescriptors font definition dictionary\n *\n * @example\n * var fontDescriptors = {\n *\tRoboto: {\n *\t\tnormal: 'fonts/Roboto-Regular.ttf',\n *\t\tbold: 'fonts/Roboto-Medium.ttf',\n *\t\titalics: 'fonts/Roboto-Italic.ttf',\n *\t\tbolditalics: 'fonts/Roboto-MediumItalic.ttf'\n *\t}\n * };\n *\n * var printer = new PdfPrinter(fontDescriptors);\n */\nfunction PdfPrinter(fontDescriptors) {\n\tthis.fontDescriptors = fontDescriptors;\n}\n\n/**\n * Executes layout engine for the specified document and renders it into a pdfkit document\n * ready to be saved.\n *\n * @param {Object} docDefinition document definition\n * @param {Object} docDefinition.content an array describing the pdf structure (for more information take a look at the examples in the /examples folder)\n * @param {Object} [docDefinition.defaultStyle] default (implicit) style definition\n * @param {Object} [docDefinition.styles] dictionary defining all styles which can be used in the document\n * @param {Object} [docDefinition.pageSize] page size (pdfkit units, A4 dimensions by default)\n * @param {Number} docDefinition.pageSize.width width\n * @param {Number} docDefinition.pageSize.height height\n * @param {Object} [docDefinition.pageMargins] page margins (pdfkit units)\n * @param {Number} docDefinition.maxPagesNumber maximum number of pages to render\n *\n * @example\n *\n * var docDefinition = {\n * \tinfo: {\n *\t\ttitle: 'awesome Document',\n *\t\tauthor: 'john doe',\n *\t\tsubject: 'subject of document',\n *\t\tkeywords: 'keywords for document',\n * \t},\n *\tcontent: [\n *\t\t'First paragraph',\n *\t\t'Second paragraph, this time a little bit longer',\n *\t\t{ text: 'Third paragraph, slightly bigger font size', fontSize: 20 },\n *\t\t{ text: 'Another paragraph using a named style', style: 'header' },\n *\t\t{ text: ['playing with ', 'inlines' ] },\n *\t\t{ text: ['and ', { text: 'restyling ', bold: true }, 'them'] },\n *\t],\n *\tstyles: {\n *\t\theader: { fontSize: 30, bold: true }\n *\t},\n *\tpatterns: {\n *\t\tstripe45d: {\n *\t\t\tboundingBox: [1, 1, 4, 4],\n *\t\t\txStep: 3,\n *\t\t\tyStep: 3,\n *\t\t\tpattern: '1 w 0 1 m 4 5 l s 2 0 m 5 3 l s'\n *\t\t}\n *\t}\n * };\n *\n * var pdfKitDoc = printer.createPdfKitDocument(docDefinition);\n *\n * pdfKitDoc.pipe(fs.createWriteStream('sample.pdf'));\n * pdfKitDoc.end();\n *\n * @return {Object} a pdfKit document object which can be saved or encode to data-url\n */\nPdfPrinter.prototype.createPdfKitDocument = function (docDefinition, options) {\n\toptions = options || {};\n\n\tdocDefinition.version = docDefinition.version || '1.3';\n\tdocDefinition.compress = isBoolean(docDefinition.compress) ? docDefinition.compress : true;\n\tdocDefinition.images = docDefinition.images || {};\n\tdocDefinition.pageMargins = ((docDefinition.pageMargins !== undefined) && (docDefinition.pageMargins !== null)) ? docDefinition.pageMargins : 40;\n\n\tvar pageSize = fixPageSize(docDefinition.pageSize, docDefinition.pageOrientation);\n\n\tvar pdfOptions = {\n\t\tsize: [pageSize.width, pageSize.height],\n\t\tpdfVersion: docDefinition.version,\n\t\tcompress: docDefinition.compress,\n\t\tuserPassword: docDefinition.userPassword,\n\t\townerPassword: docDefinition.ownerPassword,\n\t\tpermissions: docDefinition.permissions,\n\t\tfontLayoutCache: isBoolean(options.fontLayoutCache) ? options.fontLayoutCache : true,\n\t\tbufferPages: options.bufferPages || false,\n\t\tautoFirstPage: false,\n\t\tinfo: createMetadata(docDefinition),\n\t\tfont: null\n\t};\n\n\tthis.pdfKitDoc = PdfKitEngine.createPdfDocument(pdfOptions);\n\n\tthis.fontProvider = new FontProvider(this.fontDescriptors, this.pdfKitDoc);\n\n\tvar builder = new LayoutBuilder(pageSize, fixPageMargins(docDefinition.pageMargins), new ImageMeasure(this.pdfKitDoc, docDefinition.images), new SVGMeasure());\n\n\tregisterDefaultTableLayouts(builder);\n\tif (options.tableLayouts) {\n\t\tbuilder.registerTableLayouts(options.tableLayouts);\n\t}\n\n\tvar pages = builder.layoutDocument(docDefinition.content, this.fontProvider, docDefinition.styles || {}, docDefinition.defaultStyle || {\n\t\tfontSize: 12,\n\t\tfont: 'Roboto'\n\t}, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.images, docDefinition.watermark, docDefinition.pageBreakBefore);\n\tvar maxNumberPages = docDefinition.maxPagesNumber || -1;\n\tif (isNumber(maxNumberPages) && maxNumberPages > -1) {\n\t\tpages = pages.slice(0, maxNumberPages);\n\t}\n\n\t// if pageSize.height is set to Infinity, calculate the actual height of the page that\n\t// was laid out using the height of each of the items in the page.\n\tif (pageSize.height === Infinity) {\n\t\tvar pageHeight = calculatePageHeight(pages, docDefinition.pageMargins);\n\t\tthis.pdfKitDoc.options.size = [pageSize.width, pageHeight];\n\t}\n\n\tvar patterns = createPatterns(docDefinition.patterns || {}, this.pdfKitDoc);\n\n\trenderPages(pages, this.fontProvider, this.pdfKitDoc, patterns, options.progressCallback);\n\n\tif (options.autoPrint) {\n\t\tvar printActionRef = this.pdfKitDoc.ref({\n\t\t\tType: 'Action',\n\t\t\tS: 'Named',\n\t\t\tN: 'Print'\n\t\t});\n\t\tthis.pdfKitDoc._root.data.OpenAction = printActionRef;\n\t\tprintActionRef.end();\n\t}\n\treturn this.pdfKitDoc;\n};\n\nfunction createMetadata(docDefinition) {\n\t// PDF standard has these properties reserved: Title, Author, Subject, Keywords,\n\t// Creator, Producer, CreationDate, ModDate, Trapped.\n\t// To keep the pdfmake api consistent, the info field are defined lowercase.\n\t// Custom properties don't contain a space.\n\tfunction standardizePropertyKey(key) {\n\t\tvar standardProperties = ['Title', 'Author', 'Subject', 'Keywords',\n\t\t\t'Creator', 'Producer', 'CreationDate', 'ModDate', 'Trapped'];\n\t\tvar standardizedKey = key.charAt(0).toUpperCase() + key.slice(1);\n\t\tif (standardProperties.indexOf(standardizedKey) !== -1) {\n\t\t\treturn standardizedKey;\n\t\t}\n\n\t\treturn key.replace(/\\s+/g, '');\n\t}\n\n\tvar info = {\n\t\tProducer: 'pdfmake',\n\t\tCreator: 'pdfmake'\n\t};\n\n\tif (docDefinition.info) {\n\t\tfor (var key in docDefinition.info) {\n\t\t\tvar value = docDefinition.info[key];\n\t\t\tif (value) {\n\t\t\t\tkey = standardizePropertyKey(key);\n\t\t\t\tinfo[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn info;\n}\n\nfunction calculatePageHeight(pages, margins) {\n\tfunction getItemHeight(item) {\n\t\tif (isFunction(item.item.getHeight)) {\n\t\t\treturn item.item.getHeight();\n\t\t} else if (item.item._height) {\n\t\t\treturn item.item._height;\n\t\t} else if (item.type === 'vector') {\n\t\t\tif (typeof item.item.y1 !== 'undefined') {\n\t\t\t\treturn item.item.y1 > item.item.y2 ? item.item.y1 : item.item.y2;\n\t\t\t} else {\n\t\t\t\treturn item.item.h;\n\t\t\t}\n\t\t} else {\n\t\t\t// TODO: add support for next item types\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tfunction getBottomPosition(item) {\n\t\tvar top = item.item.y || 0;\n\t\tvar height = getItemHeight(item);\n\t\treturn top + height;\n\t}\n\n\tvar fixedMargins = fixPageMargins(margins || 40);\n\tvar height = fixedMargins.top;\n\n\tpages.forEach(function (page) {\n\t\tpage.items.forEach(function (item) {\n\t\t\tvar bottomPosition = getBottomPosition(item);\n\t\t\tif (bottomPosition > height) {\n\t\t\t\theight = bottomPosition;\n\t\t\t}\n\t\t});\n\t});\n\n\theight += fixedMargins.bottom;\n\n\treturn height;\n}\n\nfunction fixPageSize(pageSize, pageOrientation) {\n\tfunction isNeedSwapPageSizes(pageOrientation) {\n\t\tif (isString(pageOrientation)) {\n\t\t\tpageOrientation = pageOrientation.toLowerCase();\n\t\t\treturn ((pageOrientation === 'portrait') && (size.width > size.height)) ||\n\t\t\t\t((pageOrientation === 'landscape') && (size.width < size.height));\n\t\t}\n\t\treturn false;\n\t}\n\n\t// if pageSize.height is set to auto, set the height to infinity so there are no page breaks.\n\tif (pageSize && pageSize.height === 'auto') {\n\t\tpageSize.height = Infinity;\n\t}\n\n\tvar size = pageSize2widthAndHeight(pageSize || 'A4');\n\tif (isNeedSwapPageSizes(pageOrientation)) { // swap page sizes\n\t\tsize = { width: size.height, height: size.width };\n\t}\n\tsize.orientation = size.width > size.height ? 'landscape' : 'portrait';\n\treturn size;\n}\n\nfunction fixPageMargins(margin) {\n\tif (isNumber(margin)) {\n\t\tmargin = { left: margin, right: margin, top: margin, bottom: margin };\n\t} else if (isArray(margin)) {\n\t\tif (margin.length === 2) {\n\t\t\tmargin = { left: margin[0], top: margin[1], right: margin[0], bottom: margin[1] };\n\t\t} else if (margin.length === 4) {\n\t\t\tmargin = { left: margin[0], top: margin[1], right: margin[2], bottom: margin[3] };\n\t\t} else {\n\t\t\tthrow 'Invalid pageMargins definition';\n\t\t}\n\t}\n\n\treturn margin;\n}\n\nfunction registerDefaultTableLayouts(layoutBuilder) {\n\tlayoutBuilder.registerTableLayouts({\n\t\tnoBorders: {\n\t\t\thLineWidth: function (i) {\n\t\t\t\treturn 0;\n\t\t\t},\n\t\t\tvLineWidth: function (i) {\n\t\t\t\treturn 0;\n\t\t\t},\n\t\t\tpaddingLeft: function (i) {\n\t\t\t\treturn i && 4 || 0;\n\t\t\t},\n\t\t\tpaddingRight: function (i, node) {\n\t\t\t\treturn (i < node.table.widths.length - 1) ? 4 : 0;\n\t\t\t}\n\t\t},\n\t\theaderLineOnly: {\n\t\t\thLineWidth: function (i, node) {\n\t\t\t\tif (i === 0 || i === node.table.body.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn (i === node.table.headerRows) ? 2 : 0;\n\t\t\t},\n\t\t\tvLineWidth: function (i) {\n\t\t\t\treturn 0;\n\t\t\t},\n\t\t\tpaddingLeft: function (i) {\n\t\t\t\treturn i === 0 ? 0 : 8;\n\t\t\t},\n\t\t\tpaddingRight: function (i, node) {\n\t\t\t\treturn (i === node.table.widths.length - 1) ? 0 : 8;\n\t\t\t}\n\t\t},\n\t\tlightHorizontalLines: {\n\t\t\thLineWidth: function (i, node) {\n\t\t\t\tif (i === 0 || i === node.table.body.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn (i === node.table.headerRows) ? 2 : 1;\n\t\t\t},\n\t\t\tvLineWidth: function (i) {\n\t\t\t\treturn 0;\n\t\t\t},\n\t\t\thLineColor: function (i) {\n\t\t\t\treturn i === 1 ? 'black' : '#aaa';\n\t\t\t},\n\t\t\tpaddingLeft: function (i) {\n\t\t\t\treturn i === 0 ? 0 : 8;\n\t\t\t},\n\t\t\tpaddingRight: function (i, node) {\n\t\t\t\treturn (i === node.table.widths.length - 1) ? 0 : 8;\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction pageSize2widthAndHeight(pageSize) {\n\tif (isString(pageSize)) {\n\t\tvar size = sizes[pageSize.toUpperCase()];\n\t\tif (!size) {\n\t\t\tthrow 'Page size ' + pageSize + ' not recognized';\n\t\t}\n\t\treturn { width: size[0], height: size[1] };\n\t}\n\n\treturn pageSize;\n}\n\nfunction updatePageOrientationInOptions(currentPage, pdfKitDoc) {\n\tvar previousPageOrientation = pdfKitDoc.options.size[0] > pdfKitDoc.options.size[1] ? 'landscape' : 'portrait';\n\n\tif (currentPage.pageSize.orientation !== previousPageOrientation) {\n\t\tvar width = pdfKitDoc.options.size[0];\n\t\tvar height = pdfKitDoc.options.size[1];\n\t\tpdfKitDoc.options.size = [height, width];\n\t}\n}\n\nfunction renderPages(pages, fontProvider, pdfKitDoc, patterns, progressCallback) {\n\tpdfKitDoc._pdfMakePages = pages;\n\tpdfKitDoc.addPage();\n\n\tvar totalItems = 0;\n\tif (progressCallback) {\n\t\tpages.forEach(function (page) {\n\t\t\ttotalItems += page.items.length;\n\t\t});\n\t}\n\n\tvar renderedItems = 0;\n\tprogressCallback = progressCallback || function () {\n\t};\n\n\tfor (var i = 0; i < pages.length; i++) {\n\t\tif (i > 0) {\n\t\t\tupdatePageOrientationInOptions(pages[i], pdfKitDoc);\n\t\t\tpdfKitDoc.addPage(pdfKitDoc.options);\n\t\t}\n\n\t\tvar page = pages[i];\n\t\tfor (var ii = 0, il = page.items.length; ii < il; ii++) {\n\t\t\tvar item = page.items[ii];\n\t\t\tswitch (item.type) {\n\t\t\t\tcase 'vector':\n\t\t\t\t\trenderVector(item.item, patterns, pdfKitDoc);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'line':\n\t\t\t\t\trenderLine(item.item, item.item.x, item.item.y, patterns, pdfKitDoc);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'image':\n\t\t\t\t\trenderImage(item.item, item.item.x, item.item.y, pdfKitDoc);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'svg':\n\t\t\t\t\trenderSVG(item.item, item.item.x, item.item.y, pdfKitDoc, fontProvider);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'beginClip':\n\t\t\t\t\tbeginClip(item.item, pdfKitDoc);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'endClip':\n\t\t\t\t\tendClip(pdfKitDoc);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\trenderedItems++;\n\t\t\tprogressCallback(renderedItems / totalItems);\n\t\t}\n\t\tif (page.watermark) {\n\t\t\trenderWatermark(page, pdfKitDoc);\n\t\t}\n\t}\n}\n\n/**\n * Shift the \"y\" height of the text baseline up or down (superscript or subscript,\n * respectively). The exact shift can / should be changed according to standard\n * conventions.\n *\n * @param {number} y\n * @param {any} inline\n */\nfunction offsetText(y, inline) {\n\tvar newY = y;\n\tif (inline.sup) {\n\t\tnewY -= inline.fontSize * 0.75;\n\t}\n\tif (inline.sub) {\n\t\tnewY += inline.fontSize * 0.35;\n\t}\n\treturn newY;\n}\n\nfunction renderLine(line, x, y, patterns, pdfKitDoc) {\n\tfunction preparePageNodeRefLine(_pageNodeRef, inline) {\n\t\tvar newWidth;\n\t\tvar diffWidth;\n\t\tvar textTools = new TextTools(null);\n\n\t\tif (isUndefined(_pageNodeRef.positions)) {\n\t\t\tthrow 'Page reference id not found';\n\t\t}\n\n\t\tvar pageNumber = _pageNodeRef.positions[0].pageNumber.toString();\n\n\t\tinline.text = pageNumber;\n\t\tnewWidth = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures);\n\t\tdiffWidth = inline.width - newWidth;\n\t\tinline.width = newWidth;\n\n\t\tswitch (inline.alignment) {\n\t\t\tcase 'right':\n\t\t\t\tinline.x += diffWidth;\n\t\t\t\tbreak;\n\t\t\tcase 'center':\n\t\t\t\tinline.x += diffWidth / 2;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (line._pageNodeRef) {\n\t\tpreparePageNodeRefLine(line._pageNodeRef, line.inlines[0]);\n\t}\n\n\tx = x || 0;\n\ty = y || 0;\n\n\tvar lineHeight = line.getHeight();\n\tvar ascenderHeight = line.getAscenderHeight();\n\tvar descent = lineHeight - ascenderHeight;\n\n\ttextDecorator.drawBackground(line, x, y, patterns, pdfKitDoc);\n\n\t//TODO: line.optimizeInlines();\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\n\t\tvar inline = line.inlines[i];\n\t\tvar shiftToBaseline = lineHeight - ((inline.font.ascender / 1000) * inline.fontSize) - descent;\n\n\t\tif (inline._pageNodeRef) {\n\t\t\tpreparePageNodeRefLine(inline._pageNodeRef, inline);\n\t\t}\n\n\t\tvar options = {\n\t\t\tlineBreak: false,\n\t\t\ttextWidth: inline.width,\n\t\t\tcharacterSpacing: inline.characterSpacing,\n\t\t\twordCount: 1,\n\t\t\tlink: inline.link\n\t\t};\n\n\t\tif (inline.linkToDestination) {\n\t\t\toptions.goTo = inline.linkToDestination;\n\t\t}\n\n\t\tif (line.id && i === 0) {\n\t\t\toptions.destination = line.id;\n\t\t}\n\n\t\tif (inline.fontFeatures) {\n\t\t\toptions.features = inline.fontFeatures;\n\t\t}\n\n\t\tvar opacity = isNumber(inline.opacity) ? inline.opacity : 1;\n\t\tpdfKitDoc.opacity(opacity);\n\t\tpdfKitDoc.fill(inline.color || 'black');\n\n\t\tpdfKitDoc._font = inline.font;\n\t\tpdfKitDoc.fontSize(inline.fontSize);\n\n\t\tvar shiftedY = offsetText(y + shiftToBaseline, inline);\n\t\tpdfKitDoc.text(inline.text, x + inline.x, shiftedY, options);\n\n\t\tif (inline.linkToPage) {\n\t\t\tvar _ref = pdfKitDoc.ref({ Type: 'Action', S: 'GoTo', D: [inline.linkToPage, 0, 0] }).end();\n\t\t\tpdfKitDoc.annotate(x + inline.x, shiftedY, inline.width, inline.height, {\n\t\t\t\tSubtype: 'Link',\n\t\t\t\tDest: [inline.linkToPage - 1, 'XYZ', null, null, null]\n\t\t\t});\n\t\t}\n\n\t}\n\t// Decorations won't draw correctly for superscript\n\ttextDecorator.drawDecorations(line, x, y, pdfKitDoc);\n}\n\nfunction renderWatermark(page, pdfKitDoc) {\n\tvar watermark = page.watermark;\n\n\tpdfKitDoc.fill(watermark.color);\n\tpdfKitDoc.opacity(watermark.opacity);\n\n\tpdfKitDoc.save();\n\n\tpdfKitDoc.rotate(watermark.angle, { origin: [pdfKitDoc.page.width / 2, pdfKitDoc.page.height / 2] });\n\n\tvar x = pdfKitDoc.page.width / 2 - watermark._size.size.width / 2;\n\tvar y = pdfKitDoc.page.height / 2 - watermark._size.size.height / 2;\n\n\tpdfKitDoc._font = watermark.font;\n\tpdfKitDoc.fontSize(watermark.fontSize);\n\tpdfKitDoc.text(watermark.text, x, y, { lineBreak: false });\n\n\tpdfKitDoc.restore();\n}\n\nfunction renderVector(vector, patterns, pdfKitDoc) {\n\t//TODO: pdf optimization (there's no need to write all properties everytime)\n\tpdfKitDoc.lineWidth(vector.lineWidth || 1);\n\tif (vector.dash) {\n\t\tpdfKitDoc.dash(vector.dash.length, { space: vector.dash.space || vector.dash.length, phase: vector.dash.phase || 0 });\n\t} else {\n\t\tpdfKitDoc.undash();\n\t}\n\tpdfKitDoc.lineJoin(vector.lineJoin || 'miter');\n\tpdfKitDoc.lineCap(vector.lineCap || 'butt');\n\n\t//TODO: clipping\n\n\tvar gradient = null;\n\n\tswitch (vector.type) {\n\t\tcase 'ellipse':\n\t\t\tpdfKitDoc.ellipse(vector.x, vector.y, vector.r1, vector.r2);\n\n\t\t\tif (vector.linearGradient) {\n\t\t\t\tgradient = pdfKitDoc.linearGradient(vector.x - vector.r1, vector.y, vector.x + vector.r1, vector.y);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'rect':\n\t\t\tif (vector.r) {\n\t\t\t\tpdfKitDoc.roundedRect(vector.x, vector.y, vector.w, vector.h, vector.r);\n\t\t\t} else {\n\t\t\t\tpdfKitDoc.rect(vector.x, vector.y, vector.w, vector.h);\n\t\t\t}\n\n\t\t\tif (vector.linearGradient) {\n\t\t\t\tgradient = pdfKitDoc.linearGradient(vector.x, vector.y, vector.x + vector.w, vector.y);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'line':\n\t\t\tpdfKitDoc.moveTo(vector.x1, vector.y1);\n\t\t\tpdfKitDoc.lineTo(vector.x2, vector.y2);\n\t\t\tbreak;\n\t\tcase 'polyline':\n\t\t\tif (vector.points.length === 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tpdfKitDoc.moveTo(vector.points[0].x, vector.points[0].y);\n\t\t\tfor (var i = 1, l = vector.points.length; i < l; i++) {\n\t\t\t\tpdfKitDoc.lineTo(vector.points[i].x, vector.points[i].y);\n\t\t\t}\n\n\t\t\tif (vector.points.length > 1) {\n\t\t\t\tvar p1 = vector.points[0];\n\t\t\t\tvar pn = vector.points[vector.points.length - 1];\n\n\t\t\t\tif (vector.closePath || p1.x === pn.x && p1.y === pn.y) {\n\t\t\t\t\tpdfKitDoc.closePath();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'path':\n\t\t\tpdfKitDoc.path(vector.d);\n\t\t\tbreak;\n\t}\n\n\tif (vector.linearGradient && gradient) {\n\t\tvar step = 1 / (vector.linearGradient.length - 1);\n\n\t\tfor (var i = 0; i < vector.linearGradient.length; i++) {\n\t\t\tgradient.stop(i * step, vector.linearGradient[i]);\n\t\t}\n\n\t\tvector.color = gradient;\n\t}\n\n\tif (isPattern(vector.color)) {\n\t\tvector.color = getPattern(vector.color, patterns);\n\t}\n\n\tvar fillOpacity = isNumber(vector.fillOpacity) ? vector.fillOpacity : 1;\n\tvar strokeOpacity = isNumber(vector.strokeOpacity) ? vector.strokeOpacity : 1;\n\n\tif (vector.color && vector.lineColor) {\n\t\tpdfKitDoc.fillColor(vector.color, fillOpacity);\n\t\tpdfKitDoc.strokeColor(vector.lineColor, strokeOpacity);\n\t\tpdfKitDoc.fillAndStroke();\n\t} else if (vector.color) {\n\t\tpdfKitDoc.fillColor(vector.color, fillOpacity);\n\t\tpdfKitDoc.fill();\n\t} else {\n\t\tpdfKitDoc.strokeColor(vector.lineColor || 'black', strokeOpacity);\n\t\tpdfKitDoc.stroke();\n\t}\n}\n\nfunction renderImage(image, x, y, pdfKitDoc) {\n\tvar opacity = isNumber(image.opacity) ? image.opacity : 1;\n\tpdfKitDoc.opacity(opacity);\n\tif (image.cover) {\n\t\tvar align = image.cover.align || 'center';\n\t\tvar valign = image.cover.valign || 'center';\n\t\tvar width = image.cover.width ? image.cover.width : image.width;\n\t\tvar height = image.cover.height ? image.cover.height : image.height;\n\t\tpdfKitDoc.save();\n\t\tpdfKitDoc.rect(image.x, image.y, width, height).clip();\n\t\tpdfKitDoc.image(image.image, image.x, image.y, { cover: [width, height], align: align, valign: valign });\n\t\tpdfKitDoc.restore();\n\t} else {\n\t\tpdfKitDoc.image(image.image, image.x, image.y, { width: image._width, height: image._height });\n\t}\n\tif (image.link) {\n\t\tpdfKitDoc.link(image.x, image.y, image._width, image._height, image.link);\n\t}\n\tif (image.linkToPage) {\n\t\tpdfKitDoc.ref({ Type: 'Action', S: 'GoTo', D: [image.linkToPage, 0, 0] }).end();\n\t\tpdfKitDoc.annotate(image.x, image.y, image._width, image._height, { Subtype: 'Link', Dest: [image.linkToPage - 1, 'XYZ', null, null, null] });\n\t}\n\tif (image.linkToDestination) {\n\t\tpdfKitDoc.goTo(image.x, image.y, image._width, image._height, image.linkToDestination);\n\t}\n}\n\nfunction renderSVG(svg, x, y, pdfKitDoc, fontProvider) {\n\tvar options = Object.assign({ width: svg._width, height: svg._height, assumePt: true }, svg.options);\n\toptions.fontCallback = function (family, bold, italic) {\n\t\tvar fontsFamily = family.split(',').map(function (f) { return f.trim().replace(/('|\")/g, ''); });\n\t\tvar font = findFont(fontProvider.fonts, fontsFamily, svg.font || 'Roboto');\n\n\t\tvar fontFile = fontProvider.getFontFile(font, bold, italic);\n\t\tif (fontFile === null) {\n\t\t\tvar type = fontProvider.getFontType(bold, italic);\n\t\t\tthrow new Error('Font \\'' + font + '\\' in style \\'' + type + '\\' is not defined in the font section of the document definition.');\n\t\t}\n\n\t\treturn fontFile;\n\t};\n\n\tSVGtoPDF(pdfKitDoc, svg.svg, svg.x, svg.y, options);\n}\n\nfunction beginClip(rect, pdfKitDoc) {\n\tpdfKitDoc.save();\n\tpdfKitDoc.addContent('' + rect.x + ' ' + rect.y + ' ' + rect.width + ' ' + rect.height + ' re');\n\tpdfKitDoc.clip();\n}\n\nfunction endClip(pdfKitDoc) {\n\tpdfKitDoc.restore();\n}\n\nfunction createPatterns(patternDefinitions, pdfKitDoc) {\n\tvar patterns = {};\n\tObject.keys(patternDefinitions).forEach(function (p) {\n\t\tvar pattern = patternDefinitions[p];\n\t\tpatterns[p] = pdfKitDoc.pattern(pattern.boundingBox, pattern.xStep, pattern.yStep, pattern.pattern, pattern.colored);\n\t});\n\treturn patterns;\n}\n\nmodule.exports = PdfPrinter;\n\n\n/***/ }),\n\n/***/ 145:\n/***/ (function(module) {\n\n\"use strict\";\n/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\n/*eslint no-redeclare: \"off\"*/\n\n\n/* qr.js -- QR code generator in Javascript (revision 2011-01-19)\n * Written by Kang Seonghoon <public+qrjs@mearie.org>.\n *\n * This source code is in the public domain; if your jurisdiction does not\n * recognize the public domain the terms of Creative Commons CC0 license\n * apply. In the other words, you can always do what you want.\n */\n\n\n// per-version information (cf. JIS X 0510:2004 pp. 30--36, 71)\n//\n// [0]: the degree of generator polynomial by ECC levels\n// [1]: # of code blocks by ECC levels\n// [2]: left-top positions of alignment patterns\n//\n// the number in this table (in particular, [0]) does not exactly match with\n// the numbers in the specficiation. see augumenteccs below for the reason.\nvar VERSIONS = [\n\tnull,\n\t[[10, 7, 17, 13], [1, 1, 1, 1], []],\n\t[[16, 10, 28, 22], [1, 1, 1, 1], [4, 16]],\n\t[[26, 15, 22, 18], [1, 1, 2, 2], [4, 20]],\n\t[[18, 20, 16, 26], [2, 1, 4, 2], [4, 24]],\n\t[[24, 26, 22, 18], [2, 1, 4, 4], [4, 28]],\n\t[[16, 18, 28, 24], [4, 2, 4, 4], [4, 32]],\n\t[[18, 20, 26, 18], [4, 2, 5, 6], [4, 20, 36]],\n\t[[22, 24, 26, 22], [4, 2, 6, 6], [4, 22, 40]],\n\t[[22, 30, 24, 20], [5, 2, 8, 8], [4, 24, 44]],\n\t[[26, 18, 28, 24], [5, 4, 8, 8], [4, 26, 48]],\n\t[[30, 20, 24, 28], [5, 4, 11, 8], [4, 28, 52]],\n\t[[22, 24, 28, 26], [8, 4, 11, 10], [4, 30, 56]],\n\t[[22, 26, 22, 24], [9, 4, 16, 12], [4, 32, 60]],\n\t[[24, 30, 24, 20], [9, 4, 16, 16], [4, 24, 44, 64]],\n\t[[24, 22, 24, 30], [10, 6, 18, 12], [4, 24, 46, 68]],\n\t[[28, 24, 30, 24], [10, 6, 16, 17], [4, 24, 48, 72]],\n\t[[28, 28, 28, 28], [11, 6, 19, 16], [4, 28, 52, 76]],\n\t[[26, 30, 28, 28], [13, 6, 21, 18], [4, 28, 54, 80]],\n\t[[26, 28, 26, 26], [14, 7, 25, 21], [4, 28, 56, 84]],\n\t[[26, 28, 28, 30], [16, 8, 25, 20], [4, 32, 60, 88]],\n\t[[26, 28, 30, 28], [17, 8, 25, 23], [4, 26, 48, 70, 92]],\n\t[[28, 28, 24, 30], [17, 9, 34, 23], [4, 24, 48, 72, 96]],\n\t[[28, 30, 30, 30], [18, 9, 30, 25], [4, 28, 52, 76, 100]],\n\t[[28, 30, 30, 30], [20, 10, 32, 27], [4, 26, 52, 78, 104]],\n\t[[28, 26, 30, 30], [21, 12, 35, 29], [4, 30, 56, 82, 108]],\n\t[[28, 28, 30, 28], [23, 12, 37, 34], [4, 28, 56, 84, 112]],\n\t[[28, 30, 30, 30], [25, 12, 40, 34], [4, 32, 60, 88, 116]],\n\t[[28, 30, 30, 30], [26, 13, 42, 35], [4, 24, 48, 72, 96, 120]],\n\t[[28, 30, 30, 30], [28, 14, 45, 38], [4, 28, 52, 76, 100, 124]],\n\t[[28, 30, 30, 30], [29, 15, 48, 40], [4, 24, 50, 76, 102, 128]],\n\t[[28, 30, 30, 30], [31, 16, 51, 43], [4, 28, 54, 80, 106, 132]],\n\t[[28, 30, 30, 30], [33, 17, 54, 45], [4, 32, 58, 84, 110, 136]],\n\t[[28, 30, 30, 30], [35, 18, 57, 48], [4, 28, 56, 84, 112, 140]],\n\t[[28, 30, 30, 30], [37, 19, 60, 51], [4, 32, 60, 88, 116, 144]],\n\t[[28, 30, 30, 30], [38, 19, 63, 53], [4, 28, 52, 76, 100, 124, 148]],\n\t[[28, 30, 30, 30], [40, 20, 66, 56], [4, 22, 48, 74, 100, 126, 152]],\n\t[[28, 30, 30, 30], [43, 21, 70, 59], [4, 26, 52, 78, 104, 130, 156]],\n\t[[28, 30, 30, 30], [45, 22, 74, 62], [4, 30, 56, 82, 108, 134, 160]],\n\t[[28, 30, 30, 30], [47, 24, 77, 65], [4, 24, 52, 80, 108, 136, 164]],\n\t[[28, 30, 30, 30], [49, 25, 81, 68], [4, 28, 56, 84, 112, 140, 168]]];\n\n// mode constants (cf. Table 2 in JIS X 0510:2004 p. 16)\nvar MODE_TERMINATOR = 0;\nvar MODE_NUMERIC = 1, MODE_ALPHANUMERIC = 2, MODE_OCTET = 4, MODE_KANJI = 8;\n\n// validation regexps\nvar NUMERIC_REGEXP = /^\\d*$/;\nvar ALPHANUMERIC_REGEXP = /^[A-Za-z0-9 $%*+\\-./:]*$/;\nvar ALPHANUMERIC_OUT_REGEXP = /^[A-Z0-9 $%*+\\-./:]*$/;\n\n// ECC levels (cf. Table 22 in JIS X 0510:2004 p. 45)\nvar ECCLEVEL_L = 1, ECCLEVEL_M = 0, ECCLEVEL_Q = 3, ECCLEVEL_H = 2;\n\n// GF(2^8)-to-integer mapping with a reducing polynomial x^8+x^4+x^3+x^2+1\n// invariant: GF256_MAP[GF256_INVMAP[i]] == i for all i in [1,256)\nvar GF256_MAP = [], GF256_INVMAP = [-1];\nfor (var i = 0, v = 1; i < 255; ++i) {\n\tGF256_MAP.push(v);\n\tGF256_INVMAP[v] = i;\n\tv = (v * 2) ^ (v >= 128 ? 0x11d : 0);\n}\n\n// generator polynomials up to degree 30\n// (should match with polynomials in JIS X 0510:2004 Appendix A)\n//\n// generator polynomial of degree K is product of (x-\\alpha^0), (x-\\alpha^1),\n// ..., (x-\\alpha^(K-1)). by convention, we omit the K-th coefficient (always 1)\n// from the result; also other coefficients are written in terms of the exponent\n// to \\alpha to avoid the redundant calculation. (see also calculateecc below.)\nvar GF256_GENPOLY = [[]];\nfor (var i = 0; i < 30; ++i) {\n\tvar prevpoly = GF256_GENPOLY[i], poly = [];\n\tfor (var j = 0; j <= i; ++j) {\n\t\tvar a = (j < i ? GF256_MAP[prevpoly[j]] : 0);\n\t\tvar b = GF256_MAP[(i + (prevpoly[j - 1] || 0)) % 255];\n\t\tpoly.push(GF256_INVMAP[a ^ b]);\n\t}\n\tGF256_GENPOLY.push(poly);\n}\n\n// alphanumeric character mapping (cf. Table 5 in JIS X 0510:2004 p. 19)\nvar ALPHANUMERIC_MAP = {};\nfor (var i = 0; i < 45; ++i) {\n\tALPHANUMERIC_MAP['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'.charAt(i)] = i;\n}\n\n// mask functions in terms of row # and column #\n// (cf. Table 20 in JIS X 0510:2004 p. 42)\n/*jshint unused: false */\nvar MASKFUNCS = [\n\tfunction (i, j) {\n\t\treturn (i + j) % 2 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn i % 2 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn j % 3 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn (i + j) % 3 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn (((i / 2) | 0) + ((j / 3) | 0)) % 2 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn (i * j) % 2 + (i * j) % 3 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn ((i * j) % 2 + (i * j) % 3) % 2 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn ((i + j) % 2 + (i * j) % 3) % 2 === 0;\n\t}];\n\n// returns true when the version information has to be embeded.\nvar needsverinfo = function (ver) {\n\treturn ver > 6;\n};\n\n// returns the size of entire QR code for given version.\nvar getsizebyver = function (ver) {\n\treturn 4 * ver + 17;\n};\n\n// returns the number of bits available for code words in this version.\nvar nfullbits = function (ver) {\n\t/*\n\t * |<--------------- n --------------->|\n\t * |        |<----- n-17 ---->|        |\n\t * +-------+                ///+-------+ ----\n\t * |       |                ///|       |    ^\n\t * |  9x9  |       @@@@@    ///|  9x8  |    |\n\t * |       | # # # @5x5@ # # # |       |    |\n\t * +-------+       @@@@@       +-------+    |\n\t *       #                               ---|\n\t *                                        ^ |\n\t *       #                                |\n\t *     @@@@@       @@@@@       @@@@@      | n\n\t *     @5x5@       @5x5@       @5x5@   n-17\n\t *     @@@@@       @@@@@       @@@@@      | |\n\t *       #                                | |\n\t * //////                                 v |\n\t * //////#                               ---|\n\t * +-------+       @@@@@       @@@@@        |\n\t * |       |       @5x5@       @5x5@        |\n\t * |  8x9  |       @@@@@       @@@@@        |\n\t * |       |                                v\n\t * +-------+                             ----\n\t *\n\t * when the entire code has n^2 modules and there are m^2-3 alignment\n\t * patterns, we have:\n\t * - 225 (= 9x9 + 9x8 + 8x9) modules for finder patterns and\n\t *   format information;\n\t * - 2n-34 (= 2(n-17)) modules for timing patterns;\n\t * - 36 (= 3x6 + 6x3) modules for version information, if any;\n\t * - 25m^2-75 (= (m^2-3)(5x5)) modules for alignment patterns\n\t *   if any, but 10m-20 (= 2(m-2)x5) of them overlaps with\n\t *   timing patterns.\n\t */\n\tvar v = VERSIONS[ver];\n\tvar nbits = 16 * ver * ver + 128 * ver + 64; // finder, timing and format info.\n\tif (needsverinfo(ver))\n\t\tnbits -= 36; // version information\n\tif (v[2].length) { // alignment patterns\n\t\tnbits -= 25 * v[2].length * v[2].length - 10 * v[2].length - 55;\n\t}\n\treturn nbits;\n};\n\n// returns the number of bits available for data portions (i.e. excludes ECC\n// bits but includes mode and length bits) in this version and ECC level.\nvar ndatabits = function (ver, ecclevel) {\n\tvar nbits = nfullbits(ver) & ~7; // no sub-octet code words\n\tvar v = VERSIONS[ver];\n\tnbits -= 8 * v[0][ecclevel] * v[1][ecclevel]; // ecc bits\n\treturn nbits;\n};\n\n// returns the number of bits required for the length of data.\n// (cf. Table 3 in JIS X 0510:2004 p. 16)\nvar ndatalenbits = function (ver, mode) {\n\tswitch (mode) {\n\t\tcase MODE_NUMERIC:\n\t\t\treturn (ver < 10 ? 10 : ver < 27 ? 12 : 14);\n\t\tcase MODE_ALPHANUMERIC:\n\t\t\treturn (ver < 10 ? 9 : ver < 27 ? 11 : 13);\n\t\tcase MODE_OCTET:\n\t\t\treturn (ver < 10 ? 8 : 16);\n\t\tcase MODE_KANJI:\n\t\t\treturn (ver < 10 ? 8 : ver < 27 ? 10 : 12);\n\t}\n};\n\n// returns the maximum length of data possible in given configuration.\nvar getmaxdatalen = function (ver, mode, ecclevel) {\n\tvar nbits = ndatabits(ver, ecclevel) - 4 - ndatalenbits(ver, mode); // 4 for mode bits\n\tswitch (mode) {\n\t\tcase MODE_NUMERIC:\n\t\t\treturn ((nbits / 10) | 0) * 3 + (nbits % 10 < 4 ? 0 : nbits % 10 < 7 ? 1 : 2);\n\t\tcase MODE_ALPHANUMERIC:\n\t\t\treturn ((nbits / 11) | 0) * 2 + (nbits % 11 < 6 ? 0 : 1);\n\t\tcase MODE_OCTET:\n\t\t\treturn (nbits / 8) | 0;\n\t\tcase MODE_KANJI:\n\t\t\treturn (nbits / 13) | 0;\n\t}\n};\n\n// checks if the given data can be encoded in given mode, and returns\n// the converted data for the further processing if possible. otherwise\n// returns null.\n//\n// this function does not check the length of data; it is a duty of\n// encode function below (as it depends on the version and ECC level too).\nvar validatedata = function (mode, data) {\n\tswitch (mode) {\n\t\tcase MODE_NUMERIC:\n\t\t\tif (!data.match(NUMERIC_REGEXP))\n\t\t\t\treturn null;\n\t\t\treturn data;\n\n\t\tcase MODE_ALPHANUMERIC:\n\t\t\tif (!data.match(ALPHANUMERIC_REGEXP))\n\t\t\t\treturn null;\n\t\t\treturn data.toUpperCase();\n\n\t\tcase MODE_OCTET:\n\t\t\tif (typeof data === 'string') { // encode as utf-8 string\n\t\t\t\tvar newdata = [];\n\t\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\t\tvar ch = data.charCodeAt(i);\n\t\t\t\t\tif (ch < 0x80) {\n\t\t\t\t\t\tnewdata.push(ch);\n\t\t\t\t\t} else if (ch < 0x800) {\n\t\t\t\t\t\tnewdata.push(0xc0 | (ch >> 6),\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\n\t\t\t\t\t} else if (ch < 0x10000) {\n\t\t\t\t\t\tnewdata.push(0xe0 | (ch >> 12),\n\t\t\t\t\t\t\t0x80 | ((ch >> 6) & 0x3f),\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewdata.push(0xf0 | (ch >> 18),\n\t\t\t\t\t\t\t0x80 | ((ch >> 12) & 0x3f),\n\t\t\t\t\t\t\t0x80 | ((ch >> 6) & 0x3f),\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn newdata;\n\t\t\t} else {\n\t\t\t\treturn data;\n\t\t\t}\n\t}\n};\n\n// returns the code words (sans ECC bits) for given data and configurations.\n// requires data to be preprocessed by validatedata. no length check is\n// performed, and everything has to be checked before calling this function.\nvar encode = function (ver, mode, data, maxbuflen) {\n\tvar buf = [];\n\tvar bits = 0, remaining = 8;\n\tvar datalen = data.length;\n\n\t// this function is intentionally no-op when n=0.\n\tvar pack = function (x, n) {\n\t\tif (n >= remaining) {\n\t\t\tbuf.push(bits | (x >> (n -= remaining)));\n\t\t\twhile (n >= 8)\n\t\t\t\tbuf.push((x >> (n -= 8)) & 255);\n\t\t\tbits = 0;\n\t\t\tremaining = 8;\n\t\t}\n\t\tif (n > 0)\n\t\t\tbits |= (x & ((1 << n) - 1)) << (remaining -= n);\n\t};\n\n\tvar nlenbits = ndatalenbits(ver, mode);\n\tpack(mode, 4);\n\tpack(datalen, nlenbits);\n\n\tswitch (mode) {\n\t\tcase MODE_NUMERIC:\n\t\t\tfor (var i = 2; i < datalen; i += 3) {\n\t\t\t\tpack(parseInt(data.substring(i - 2, i + 1), 10), 10);\n\t\t\t}\n\t\t\tpack(parseInt(data.substring(i - 2), 10), [0, 4, 7][datalen % 3]);\n\t\t\tbreak;\n\n\t\tcase MODE_ALPHANUMERIC:\n\t\t\tfor (var i = 1; i < datalen; i += 2) {\n\t\t\t\tpack(ALPHANUMERIC_MAP[data.charAt(i - 1)] * 45 +\n\t\t\t\t\tALPHANUMERIC_MAP[data.charAt(i)], 11);\n\t\t\t}\n\t\t\tif (datalen % 2 == 1) {\n\t\t\t\tpack(ALPHANUMERIC_MAP[data.charAt(i - 1)], 6);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase MODE_OCTET:\n\t\t\tfor (var i = 0; i < datalen; ++i) {\n\t\t\t\tpack(data[i], 8);\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\t// final bits. it is possible that adding terminator causes the buffer\n\t// to overflow, but then the buffer truncated to the maximum size will\n\t// be valid as the truncated terminator mode bits and padding is\n\t// identical in appearance (cf. JIS X 0510:2004 sec 8.4.8).\n\tpack(MODE_TERMINATOR, 4);\n\tif (remaining < 8)\n\t\tbuf.push(bits);\n\n\t// the padding to fill up the remaining space. we should not add any\n\t// words when the overflow already occurred.\n\twhile (buf.length + 1 < maxbuflen)\n\t\tbuf.push(0xec, 0x11);\n\tif (buf.length < maxbuflen)\n\t\tbuf.push(0xec);\n\treturn buf;\n};\n\n// calculates ECC code words for given code words and generator polynomial.\n//\n// this is quite similar to CRC calculation as both Reed-Solomon and CRC use\n// the certain kind of cyclic codes, which is effectively the division of\n// zero-augumented polynomial by the generator polynomial. the only difference\n// is that Reed-Solomon uses GF(2^8), instead of CRC's GF(2), and Reed-Solomon\n// uses the different generator polynomial than CRC's.\nvar calculateecc = function (poly, genpoly) {\n\tvar modulus = poly.slice(0);\n\tvar polylen = poly.length, genpolylen = genpoly.length;\n\tfor (var i = 0; i < genpolylen; ++i)\n\t\tmodulus.push(0);\n\tfor (var i = 0; i < polylen; ) {\n\t\tvar quotient = GF256_INVMAP[modulus[i++]];\n\t\tif (quotient >= 0) {\n\t\t\tfor (var j = 0; j < genpolylen; ++j) {\n\t\t\t\tmodulus[i + j] ^= GF256_MAP[(quotient + genpoly[j]) % 255];\n\t\t\t}\n\t\t}\n\t}\n\treturn modulus.slice(polylen);\n};\n\n// auguments ECC code words to given code words. the resulting words are\n// ready to be encoded in the matrix.\n//\n// the much of actual augumenting procedure follows JIS X 0510:2004 sec 8.7.\n// the code is simplified using the fact that the size of each code & ECC\n// blocks is almost same; for example, when we have 4 blocks and 46 data words\n// the number of code words in those blocks are 11, 11, 12, 12 respectively.\nvar augumenteccs = function (poly, nblocks, genpoly) {\n\tvar subsizes = [];\n\tvar subsize = (poly.length / nblocks) | 0, subsize0 = 0;\n\tvar pivot = nblocks - poly.length % nblocks;\n\tfor (var i = 0; i < pivot; ++i) {\n\t\tsubsizes.push(subsize0);\n\t\tsubsize0 += subsize;\n\t}\n\tfor (var i = pivot; i < nblocks; ++i) {\n\t\tsubsizes.push(subsize0);\n\t\tsubsize0 += subsize + 1;\n\t}\n\tsubsizes.push(subsize0);\n\n\tvar eccs = [];\n\tfor (var i = 0; i < nblocks; ++i) {\n\t\teccs.push(calculateecc(poly.slice(subsizes[i], subsizes[i + 1]), genpoly));\n\t}\n\n\tvar result = [];\n\tvar nitemsperblock = (poly.length / nblocks) | 0;\n\tfor (var i = 0; i < nitemsperblock; ++i) {\n\t\tfor (var j = 0; j < nblocks; ++j) {\n\t\t\tresult.push(poly[subsizes[j] + i]);\n\t\t}\n\t}\n\tfor (var j = pivot; j < nblocks; ++j) {\n\t\tresult.push(poly[subsizes[j + 1] - 1]);\n\t}\n\tfor (var i = 0; i < genpoly.length; ++i) {\n\t\tfor (var j = 0; j < nblocks; ++j) {\n\t\t\tresult.push(eccs[j][i]);\n\t\t}\n\t}\n\treturn result;\n};\n\n// auguments BCH(p+q,q) code to the polynomial over GF(2), given the proper\n// genpoly. the both input and output are in binary numbers, and unlike\n// calculateecc genpoly should include the 1 bit for the highest degree.\n//\n// actual polynomials used for this procedure are as follows:\n// - p=10, q=5, genpoly=x^10+x^8+x^5+x^4+x^2+x+1 (JIS X 0510:2004 Appendix C)\n// - p=18, q=6, genpoly=x^12+x^11+x^10+x^9+x^8+x^5+x^2+1 (ibid. Appendix D)\nvar augumentbch = function (poly, p, genpoly, q) {\n\tvar modulus = poly << q;\n\tfor (var i = p - 1; i >= 0; --i) {\n\t\tif ((modulus >> (q + i)) & 1)\n\t\t\tmodulus ^= genpoly << i;\n\t}\n\treturn (poly << q) | modulus;\n};\n\n// creates the base matrix for given version. it returns two matrices, one of\n// them is the actual one and the another represents the \"reserved\" portion\n// (e.g. finder and timing patterns) of the matrix.\n//\n// some entries in the matrix may be undefined, rather than 0 or 1. this is\n// intentional (no initialization needed!), and putdata below will fill\n// the remaining ones.\nvar makebasematrix = function (ver) {\n\tvar v = VERSIONS[ver], n = getsizebyver(ver);\n\tvar matrix = [], reserved = [];\n\tfor (var i = 0; i < n; ++i) {\n\t\tmatrix.push([]);\n\t\treserved.push([]);\n\t}\n\n\tvar blit = function (y, x, h, w, bits) {\n\t\tfor (var i = 0; i < h; ++i) {\n\t\t\tfor (var j = 0; j < w; ++j) {\n\t\t\t\tmatrix[y + i][x + j] = (bits[i] >> j) & 1;\n\t\t\t\treserved[y + i][x + j] = 1;\n\t\t\t}\n\t\t}\n\t};\n\n\t// finder patterns and a part of timing patterns\n\t// will also mark the format information area (not yet written) as reserved.\n\tblit(0, 0, 9, 9, [0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x17f, 0x00, 0x40]);\n\tblit(n - 8, 0, 8, 9, [0x100, 0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x7f]);\n\tblit(0, n - 8, 9, 8, [0xfe, 0x82, 0xba, 0xba, 0xba, 0x82, 0xfe, 0x00, 0x00]);\n\n\t// the rest of timing patterns\n\tfor (var i = 9; i < n - 8; ++i) {\n\t\tmatrix[6][i] = matrix[i][6] = ~i & 1;\n\t\treserved[6][i] = reserved[i][6] = 1;\n\t}\n\n\t// alignment patterns\n\tvar aligns = v[2], m = aligns.length;\n\tfor (var i = 0; i < m; ++i) {\n\t\tvar minj = (i === 0 || i === m - 1 ? 1 : 0), maxj = (i === 0 ? m - 1 : m);\n\t\tfor (var j = minj; j < maxj; ++j) {\n\t\t\tblit(aligns[i], aligns[j], 5, 5, [0x1f, 0x11, 0x15, 0x11, 0x1f]);\n\t\t}\n\t}\n\n\t// version information\n\tif (needsverinfo(ver)) {\n\t\tvar code = augumentbch(ver, 6, 0x1f25, 12);\n\t\tvar k = 0;\n\t\tfor (var i = 0; i < 6; ++i) {\n\t\t\tfor (var j = 0; j < 3; ++j) {\n\t\t\t\tmatrix[i][(n - 11) + j] = matrix[(n - 11) + j][i] = (code >> k++) & 1;\n\t\t\t\treserved[i][(n - 11) + j] = reserved[(n - 11) + j][i] = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {matrix: matrix, reserved: reserved};\n};\n\n// fills the data portion (i.e. unmarked in reserved) of the matrix with given\n// code words. the size of code words should be no more than available bits,\n// and remaining bits are padded to 0 (cf. JIS X 0510:2004 sec 8.7.3).\nvar putdata = function (matrix, reserved, buf) {\n\tvar n = matrix.length;\n\tvar k = 0, dir = -1;\n\tfor (var i = n - 1; i >= 0; i -= 2) {\n\t\tif (i == 6)\n\t\t\t--i; // skip the entire timing pattern column\n\t\tvar jj = (dir < 0 ? n - 1 : 0);\n\t\tfor (var j = 0; j < n; ++j) {\n\t\t\tfor (var ii = i; ii > i - 2; --ii) {\n\t\t\t\tif (!reserved[jj][ii]) {\n\t\t\t\t\t// may overflow, but (undefined >> x)\n\t\t\t\t\t// is 0 so it will auto-pad to zero.\n\t\t\t\t\tmatrix[jj][ii] = (buf[k >> 3] >> (~k & 7)) & 1;\n\t\t\t\t\t++k;\n\t\t\t\t}\n\t\t\t}\n\t\t\tjj += dir;\n\t\t}\n\t\tdir = -dir;\n\t}\n\treturn matrix;\n};\n\n// XOR-masks the data portion of the matrix. repeating the call with the same\n// arguments will revert the prior call (convenient in the matrix evaluation).\nvar maskdata = function (matrix, reserved, mask) {\n\tvar maskf = MASKFUNCS[mask];\n\tvar n = matrix.length;\n\tfor (var i = 0; i < n; ++i) {\n\t\tfor (var j = 0; j < n; ++j) {\n\t\t\tif (!reserved[i][j])\n\t\t\t\tmatrix[i][j] ^= maskf(i, j);\n\t\t}\n\t}\n\treturn matrix;\n};\n\n// puts the format information.\nvar putformatinfo = function (matrix, reserved, ecclevel, mask) {\n\tvar n = matrix.length;\n\tvar code = augumentbch((ecclevel << 3) | mask, 5, 0x537, 10) ^ 0x5412;\n\tfor (var i = 0; i < 15; ++i) {\n\t\tvar r = [0, 1, 2, 3, 4, 5, 7, 8, n - 7, n - 6, n - 5, n - 4, n - 3, n - 2, n - 1][i];\n\t\tvar c = [n - 1, n - 2, n - 3, n - 4, n - 5, n - 6, n - 7, n - 8, 7, 5, 4, 3, 2, 1, 0][i];\n\t\tmatrix[r][8] = matrix[8][c] = (code >> i) & 1;\n\t\t// we don't have to mark those bits reserved; always done\n\t\t// in makebasematrix above.\n\t}\n\treturn matrix;\n};\n\n// evaluates the resulting matrix and returns the score (lower is better).\n// (cf. JIS X 0510:2004 sec 8.8.2)\n//\n// the evaluation procedure tries to avoid the problematic patterns naturally\n// occuring from the original matrix. for example, it penaltizes the patterns\n// which just look like the finder pattern which will confuse the decoder.\n// we choose the mask which results in the lowest score among 8 possible ones.\n//\n// note: zxing seems to use the same procedure and in many cases its choice\n// agrees to ours, but sometimes it does not. practically it doesn't matter.\nvar evaluatematrix = function (matrix) {\n\t// N1+(k-5) points for each consecutive row of k same-colored modules,\n\t// where k >= 5. no overlapping row counts.\n\tvar PENALTY_CONSECUTIVE = 3;\n\t// N2 points for each 2x2 block of same-colored modules.\n\t// overlapping block does count.\n\tvar PENALTY_TWOBYTWO = 3;\n\t// N3 points for each pattern with >4W:1B:1W:3B:1W:1B or\n\t// 1B:1W:3B:1W:1B:>4W, or their multiples (e.g. highly unlikely,\n\t// but 13W:3B:3W:9B:3W:3B counts).\n\tvar PENALTY_FINDERLIKE = 40;\n\t// N4*k points for every (5*k)% deviation from 50% black density.\n\t// i.e. k=1 for 55~60% and 40~45%, k=2 for 60~65% and 35~40%, etc.\n\tvar PENALTY_DENSITY = 10;\n\n\tvar evaluategroup = function (groups) { // assumes [W,B,W,B,W,...,B,W]\n\t\tvar score = 0;\n\t\tfor (var i = 0; i < groups.length; ++i) {\n\t\t\tif (groups[i] >= 5)\n\t\t\t\tscore += PENALTY_CONSECUTIVE + (groups[i] - 5);\n\t\t}\n\t\tfor (var i = 5; i < groups.length; i += 2) {\n\t\t\tvar p = groups[i];\n\t\t\tif (groups[i - 1] == p && groups[i - 2] == 3 * p && groups[i - 3] == p &&\n\t\t\t\tgroups[i - 4] == p && (groups[i - 5] >= 4 * p || groups[i + 1] >= 4 * p)) {\n\t\t\t\t// this part differs from zxing...\n\t\t\t\tscore += PENALTY_FINDERLIKE;\n\t\t\t}\n\t\t}\n\t\treturn score;\n\t};\n\n\tvar n = matrix.length;\n\tvar score = 0, nblacks = 0;\n\tfor (var i = 0; i < n; ++i) {\n\t\tvar row = matrix[i];\n\t\tvar groups;\n\n\t\t// evaluate the current row\n\t\tgroups = [0]; // the first empty group of white\n\t\tfor (var j = 0; j < n; ) {\n\t\t\tvar k;\n\t\t\tfor (k = 0; j < n && row[j]; ++k)\n\t\t\t\t++j;\n\t\t\tgroups.push(k);\n\t\t\tfor (k = 0; j < n && !row[j]; ++k)\n\t\t\t\t++j;\n\t\t\tgroups.push(k);\n\t\t}\n\t\tscore += evaluategroup(groups);\n\n\t\t// evaluate the current column\n\t\tgroups = [0];\n\t\tfor (var j = 0; j < n; ) {\n\t\t\tvar k;\n\t\t\tfor (k = 0; j < n && matrix[j][i]; ++k)\n\t\t\t\t++j;\n\t\t\tgroups.push(k);\n\t\t\tfor (k = 0; j < n && !matrix[j][i]; ++k)\n\t\t\t\t++j;\n\t\t\tgroups.push(k);\n\t\t}\n\t\tscore += evaluategroup(groups);\n\n\t\t// check the 2x2 box and calculate the density\n\t\tvar nextrow = matrix[i + 1] || [];\n\t\tnblacks += row[0];\n\t\tfor (var j = 1; j < n; ++j) {\n\t\t\tvar p = row[j];\n\t\t\tnblacks += p;\n\t\t\t// at least comparison with next row should be strict...\n\t\t\tif (row[j - 1] == p && nextrow[j] === p && nextrow[j - 1] === p) {\n\t\t\t\tscore += PENALTY_TWOBYTWO;\n\t\t\t}\n\t\t}\n\t}\n\n\tscore += PENALTY_DENSITY * ((Math.abs(nblacks / n / n - 0.5) / 0.05) | 0);\n\treturn score;\n};\n\n// returns the fully encoded QR code matrix which contains given data.\n// it also chooses the best mask automatically when mask is -1.\nvar generate = function (data, ver, mode, ecclevel, mask) {\n\tvar v = VERSIONS[ver];\n\tvar buf = encode(ver, mode, data, ndatabits(ver, ecclevel) >> 3);\n\tbuf = augumenteccs(buf, v[1][ecclevel], GF256_GENPOLY[v[0][ecclevel]]);\n\n\tvar result = makebasematrix(ver);\n\tvar matrix = result.matrix, reserved = result.reserved;\n\tputdata(matrix, reserved, buf);\n\n\tif (mask < 0) {\n\t\t// find the best mask\n\t\tmaskdata(matrix, reserved, 0);\n\t\tputformatinfo(matrix, reserved, ecclevel, 0);\n\t\tvar bestmask = 0, bestscore = evaluatematrix(matrix);\n\t\tmaskdata(matrix, reserved, 0);\n\t\tfor (mask = 1; mask < 8; ++mask) {\n\t\t\tmaskdata(matrix, reserved, mask);\n\t\t\tputformatinfo(matrix, reserved, ecclevel, mask);\n\t\t\tvar score = evaluatematrix(matrix);\n\t\t\tif (bestscore > score) {\n\t\t\t\tbestscore = score;\n\t\t\t\tbestmask = mask;\n\t\t\t}\n\t\t\tmaskdata(matrix, reserved, mask);\n\t\t}\n\t\tmask = bestmask;\n\t}\n\n\tmaskdata(matrix, reserved, mask);\n\tputformatinfo(matrix, reserved, ecclevel, mask);\n\treturn matrix;\n};\n\n// the public interface is trivial; the options available are as follows:\n//\n// - version: an integer in [1,40]. when omitted (or -1) the smallest possible\n//   version is chosen.\n// - mode: one of 'numeric', 'alphanumeric', 'octet'. when omitted the smallest\n//   possible mode is chosen.\n// - eccLevel: one of 'L', 'M', 'Q', 'H'. defaults to 'L'.\n// - mask: an integer in [0,7]. when omitted (or -1) the best mask is chosen.\n//\n\nfunction generateFrame(data, options) {\n\tvar MODES = {'numeric': MODE_NUMERIC, 'alphanumeric': MODE_ALPHANUMERIC,\n\t\t'octet': MODE_OCTET};\n\tvar ECCLEVELS = {'L': ECCLEVEL_L, 'M': ECCLEVEL_M, 'Q': ECCLEVEL_Q,\n\t\t'H': ECCLEVEL_H};\n\n\toptions = options || {};\n\tvar ver = options.version || -1;\n\tvar ecclevel = ECCLEVELS[(options.eccLevel || 'L').toUpperCase()];\n\tvar mode = options.mode ? MODES[options.mode.toLowerCase()] : -1;\n\tvar mask = 'mask' in options ? options.mask : -1;\n\n\tif (mode < 0) {\n\t\tif (typeof data === 'string') {\n\t\t\tif (data.match(NUMERIC_REGEXP)) {\n\t\t\t\tmode = MODE_NUMERIC;\n\t\t\t} else if (data.match(ALPHANUMERIC_OUT_REGEXP)) {\n\t\t\t\t// while encode supports case-insensitive encoding, we restrict the data to be uppercased when auto-selecting the mode.\n\t\t\t\tmode = MODE_ALPHANUMERIC;\n\t\t\t} else {\n\t\t\t\tmode = MODE_OCTET;\n\t\t\t}\n\t\t} else {\n\t\t\tmode = MODE_OCTET;\n\t\t}\n\t} else if (!(mode == MODE_NUMERIC || mode == MODE_ALPHANUMERIC ||\n\t\tmode == MODE_OCTET)) {\n\t\tthrow 'invalid or unsupported mode';\n\t}\n\n\tdata = validatedata(mode, data);\n\tif (data === null)\n\t\tthrow 'invalid data format';\n\n\tif (ecclevel < 0 || ecclevel > 3)\n\t\tthrow 'invalid ECC level';\n\n\tif (ver < 0) {\n\t\tfor (ver = 1; ver <= 40; ++ver) {\n\t\t\tif (data.length <= getmaxdatalen(ver, mode, ecclevel))\n\t\t\t\tbreak;\n\t\t}\n\t\tif (ver > 40)\n\t\t\tthrow 'too large data for the Qr format';\n\t} else if (ver < 1 || ver > 40) {\n\t\tthrow 'invalid Qr version! should be between 1 and 40';\n\t}\n\n\tif (mask != -1 && (mask < 0 || mask > 8))\n\t\tthrow 'invalid mask';\n\t//console.log('version:', ver, 'mode:', mode, 'ECC:', ecclevel, 'mask:', mask )\n\treturn generate(data, ver, mode, ecclevel, mask);\n}\n\n\n// options\n// - modulesize: a number. this is a size of each modules in pixels, and\n//   defaults to 5px.\n// - margin: a number. this is a size of margin in *modules*, and defaults to\n//   4 (white modules). the specficiation mandates the margin no less than 4\n//   modules, so it is better not to alter this value unless you know what\n//   you're doing.\nfunction buildCanvas(data, options) {\n\n\tvar canvas = [];\n\tvar background = options.background || '#fff';\n\tvar foreground = options.foreground || '#000';\n\t//var margin = options.margin || 4;\n\tvar matrix = generateFrame(data, options);\n\tvar n = matrix.length;\n\tvar modSize = Math.floor(options.fit ? options.fit / n : 5);\n\tvar size = n * modSize;\n\n\tcanvas.push({\n\t\ttype: 'rect',\n\t\tx: 0, y: 0, w: size, h: size, lineWidth: 0, color: background\n\t});\n\n\tfor (var i = 0; i < n; ++i) {\n\t\tfor (var j = 0; j < n; ++j) {\n\t\t\tif (matrix[i][j]) {\n\t\t\t\tcanvas.push({\n\t\t\t\t\ttype: 'rect',\n\t\t\t\t\tx: modSize * j,\n\t\t\t\t\ty: modSize * i,\n\t\t\t\t\tw: modSize,\n\t\t\t\t\th: modSize,\n\t\t\t\t\tlineWidth: 0,\n\t\t\t\t\tcolor: foreground\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tcanvas: canvas,\n\t\tsize: size\n\t};\n\n}\n\nfunction measure(node) {\n\tvar cd = buildCanvas(node.qr, node);\n\tnode._canvas = cd.canvas;\n\tnode._width = node._height = node._minWidth = node._maxWidth = node._minHeight = node._maxHeight = cd.size;\n\treturn node;\n}\n\nmodule.exports = {\n\tmeasure: measure\n};\n\n/***/ }),\n\n/***/ 4762:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nmodule.exports = {\n\t'4A0': [4767.87, 6740.79],\n\t'2A0': [3370.39, 4767.87],\n\tA0: [2383.94, 3370.39],\n\tA1: [1683.78, 2383.94],\n\tA2: [1190.55, 1683.78],\n\tA3: [841.89, 1190.55],\n\tA4: [595.28, 841.89],\n\tA5: [419.53, 595.28],\n\tA6: [297.64, 419.53],\n\tA7: [209.76, 297.64],\n\tA8: [147.40, 209.76],\n\tA9: [104.88, 147.40],\n\tA10: [73.70, 104.88],\n\tB0: [2834.65, 4008.19],\n\tB1: [2004.09, 2834.65],\n\tB2: [1417.32, 2004.09],\n\tB3: [1000.63, 1417.32],\n\tB4: [708.66, 1000.63],\n\tB5: [498.90, 708.66],\n\tB6: [354.33, 498.90],\n\tB7: [249.45, 354.33],\n\tB8: [175.75, 249.45],\n\tB9: [124.72, 175.75],\n\tB10: [87.87, 124.72],\n\tC0: [2599.37, 3676.54],\n\tC1: [1836.85, 2599.37],\n\tC2: [1298.27, 1836.85],\n\tC3: [918.43, 1298.27],\n\tC4: [649.13, 918.43],\n\tC5: [459.21, 649.13],\n\tC6: [323.15, 459.21],\n\tC7: [229.61, 323.15],\n\tC8: [161.57, 229.61],\n\tC9: [113.39, 161.57],\n\tC10: [79.37, 113.39],\n\tRA0: [2437.80, 3458.27],\n\tRA1: [1729.13, 2437.80],\n\tRA2: [1218.90, 1729.13],\n\tRA3: [864.57, 1218.90],\n\tRA4: [609.45, 864.57],\n\tSRA0: [2551.18, 3628.35],\n\tSRA1: [1814.17, 2551.18],\n\tSRA2: [1275.59, 1814.17],\n\tSRA3: [907.09, 1275.59],\n\tSRA4: [637.80, 907.09],\n\tEXECUTIVE: [521.86, 756.00],\n\tFOLIO: [612.00, 936.00],\n\tLEGAL: [612.00, 1008.00],\n\tLETTER: [612.00, 792.00],\n\tTABLOID: [792.00, 1224.00]\n};\n\n\n/***/ }),\n\n/***/ 7597:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isString = (__webpack_require__(6225).isString);\nvar isArray = (__webpack_require__(6225).isArray);\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar isNull = (__webpack_require__(6225).isNull);\n\n/**\n * Creates an instance of StyleContextStack used for style inheritance and style overrides\n *\n * @constructor\n * @this {StyleContextStack}\n * @param {Object} named styles dictionary\n * @param {Object} optional default style definition\n */\nfunction StyleContextStack(styleDictionary, defaultStyle) {\n\tthis.defaultStyle = defaultStyle || {};\n\tthis.styleDictionary = styleDictionary;\n\tthis.styleOverrides = [];\n}\n\n/**\n * Creates cloned version of current stack\n * @return {StyleContextStack} current stack snapshot\n */\nStyleContextStack.prototype.clone = function () {\n\tvar stack = new StyleContextStack(this.styleDictionary, this.defaultStyle);\n\n\tthis.styleOverrides.forEach(function (item) {\n\t\tstack.styleOverrides.push(item);\n\t});\n\n\treturn stack;\n};\n\n/**\n * Pushes style-name or style-overrides-object onto the stack for future evaluation\n *\n * @param {String|Object} styleNameOrOverride style-name (referring to styleDictionary) or\n *                                            a new dictionary defining overriding properties\n */\nStyleContextStack.prototype.push = function (styleNameOrOverride) {\n\tthis.styleOverrides.push(styleNameOrOverride);\n};\n\n/**\n * Removes last style-name or style-overrides-object from the stack\n *\n * @param {Number} howMany - optional number of elements to be popped (if not specified,\n *                           one element will be removed from the stack)\n */\nStyleContextStack.prototype.pop = function (howMany) {\n\thowMany = howMany || 1;\n\n\twhile (howMany-- > 0) {\n\t\tthis.styleOverrides.pop();\n\t}\n};\n\n/**\n * Creates a set of named styles or/and a style-overrides-object based on the item,\n * pushes those elements onto the stack for future evaluation and returns the number\n * of elements pushed, so they can be easily poped then.\n *\n * @param {Object} item - an object with optional style property and/or style overrides\n * @return the number of items pushed onto the stack\n */\nStyleContextStack.prototype.autopush = function (item) {\n\tif (isString(item)) {\n\t\treturn 0;\n\t}\n\n\tvar styleNames = [];\n\n\tif (item.style) {\n\t\tif (isArray(item.style)) {\n\t\t\tstyleNames = item.style;\n\t\t} else {\n\t\t\tstyleNames = [item.style];\n\t\t}\n\t}\n\n\tfor (var i = 0, l = styleNames.length; i < l; i++) {\n\t\tthis.push(styleNames[i]);\n\t}\n\n\tvar styleProperties = [\n\t\t'font',\n\t\t'fontSize',\n\t\t'fontFeatures',\n\t\t'bold',\n\t\t'italics',\n\t\t'alignment',\n\t\t'color',\n\t\t'columnGap',\n\t\t'fillColor',\n\t\t'fillOpacity',\n\t\t'decoration',\n\t\t'decorationStyle',\n\t\t'decorationColor',\n\t\t'background',\n\t\t'lineHeight',\n\t\t'characterSpacing',\n\t\t'noWrap',\n\t\t'markerColor',\n\t\t'leadingIndent',\n\t\t'sup',\n\t\t'sub'\n\t\t//'tableCellPadding'\n\t\t// 'cellBorder',\n\t\t// 'headerCellBorder',\n\t\t// 'oddRowCellBorder',\n\t\t// 'evenRowCellBorder',\n\t\t// 'tableBorder'\n\t];\n\tvar styleOverrideObject = {};\n\tvar pushStyleOverrideObject = false;\n\n\tstyleProperties.forEach(function (key) {\n\t\tif (!isUndefined(item[key]) && !isNull(item[key])) {\n\t\t\tstyleOverrideObject[key] = item[key];\n\t\t\tpushStyleOverrideObject = true;\n\t\t}\n\t});\n\n\tif (pushStyleOverrideObject) {\n\t\tthis.push(styleOverrideObject);\n\t}\n\n\treturn styleNames.length + (pushStyleOverrideObject ? 1 : 0);\n};\n\n/**\n * Automatically pushes elements onto the stack, using autopush based on item,\n * executes callback and then pops elements back. Returns value returned by callback\n *\n * @param  {Object}   item - an object with optional style property and/or style overrides\n * @param  {Function} function to be called between autopush and pop\n * @return {Object} value returned by callback\n */\nStyleContextStack.prototype.auto = function (item, callback) {\n\tvar pushedItems = this.autopush(item);\n\tvar result = callback();\n\n\tif (pushedItems > 0) {\n\t\tthis.pop(pushedItems);\n\t}\n\n\treturn result;\n};\n\n/**\n * Evaluates stack and returns value of a named property\n *\n * @param {String} property - property name\n * @return property value or null if not found\n */\nStyleContextStack.prototype.getProperty = function (property) {\n\tif (this.styleOverrides) {\n\t\tfor (var i = this.styleOverrides.length - 1; i >= 0; i--) {\n\t\t\tvar item = this.styleOverrides[i];\n\n\t\t\tif (isString(item)) {\n\t\t\t\t// named-style-override\n\t\t\t\tvar style = this.styleDictionary[item];\n\t\t\t\tif (style && !isUndefined(style[property]) && !isNull(style[property])) {\n\t\t\t\t\treturn style[property];\n\t\t\t\t}\n\t\t\t} else if (!isUndefined(item[property]) && !isNull(item[property])) {\n\t\t\t\t// style-overrides-object\n\t\t\t\treturn item[property];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this.defaultStyle && this.defaultStyle[property];\n};\n\nmodule.exports = StyleContextStack;\n\n\n/***/ }),\n\n/***/ 7601:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar xmldoc = __webpack_require__(6513);\n\n/** Strip unit postfix, parse number, but return undefined instead of NaN for bad input */\nfunction stripUnits(textVal) {\n\tvar n = parseFloat(textVal);\n\tif (typeof n !== 'number' || isNaN(n)) {\n\t\treturn undefined;\n\t}\n\treturn n;\n}\n\n/** Make sure it's valid XML and the root tage is <svg/>, returns xmldoc DOM */\nfunction parseSVG(svgString) {\n\tvar doc;\n\n\ttry {\n\t\tdoc = new xmldoc.XmlDocument(svgString);\n\t} catch (err) {\n\t\tthrow new Error('SVGMeasure: ' + err);\n\t}\n\n\tif (doc.name !== \"svg\") {\n\t\tthrow new Error('SVGMeasure: expected <svg> document');\n\t}\n\n\treturn doc;\n}\n\nfunction SVGMeasure() {\n}\n\nSVGMeasure.prototype.measureSVG = function (svgString) {\n\n\tvar doc = parseSVG(svgString);\n\n\tvar docWidth = stripUnits(doc.attr.width);\n\tvar docHeight = stripUnits(doc.attr.height);\n\n\tif ((docWidth == undefined || docHeight == undefined) && typeof doc.attr.viewBox == 'string') {\n\t\tvar viewBoxParts = doc.attr.viewBox.split(/[,\\s]+/);\n\t\tif (viewBoxParts.length !== 4) {\n\t\t\tthrow new Error(\"Unexpected svg viewbox format, should have 4 entries but found: '\" + doc.attr.viewBox + \"'\");\n\t\t}\n\t\tif (docWidth == undefined) {\n\t\t\tdocWidth = stripUnits(viewBoxParts[2]);\n\t\t}\n\t\tif (docHeight == undefined) {\n\t\t\tdocHeight = stripUnits(viewBoxParts[3]);\n\t\t}\n\t}\n\n\treturn {\n\t\twidth: docWidth,\n\t\theight: docHeight\n\t};\n};\n\nSVGMeasure.prototype.writeDimensions = function (svgString, dimensions) {\n\n\tvar doc = parseSVG(svgString);\n\n\tdoc.attr.width = \"\" + dimensions.width;\n\tdoc.attr.height = \"\" + dimensions.height;\n\n\treturn doc.toString();\n};\n\nmodule.exports = SVGMeasure;\n\n\n/***/ }),\n\n/***/ 9342:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar ColumnCalculator = __webpack_require__(4498);\nvar isFunction = (__webpack_require__(6225).isFunction);\nvar isNumber = (__webpack_require__(6225).isNumber);\n\nfunction TableProcessor(tableNode) {\n\tthis.tableNode = tableNode;\n}\n\nTableProcessor.prototype.beginTable = function (writer) {\n\tvar tableNode;\n\tvar availableWidth;\n\tvar self = this;\n\n\ttableNode = this.tableNode;\n\tthis.offsets = tableNode._offsets;\n\tthis.layout = tableNode._layout;\n\n\tavailableWidth = writer.context().availableWidth - this.offsets.total;\n\tColumnCalculator.buildColumnWidths(tableNode.table.widths, availableWidth);\n\n\tthis.tableWidth = tableNode._offsets.total + getTableInnerContentWidth();\n\tthis.rowSpanData = prepareRowSpanData();\n\tthis.cleanUpRepeatables = false;\n\n\tthis.headerRows = tableNode.table.headerRows || 0;\n\tthis.rowsWithoutPageBreak = this.headerRows + (tableNode.table.keepWithHeaderRows || 0);\n\tthis.dontBreakRows = tableNode.table.dontBreakRows || false;\n\n\tif (this.rowsWithoutPageBreak) {\n\t\twriter.beginUnbreakableBlock();\n\t}\n\n\t// update the border properties of all cells before drawing any lines\n\tprepareCellBorders(this.tableNode.table.body);\n\n\tthis.drawHorizontalLine(0, writer);\n\n\tfunction getTableInnerContentWidth() {\n\t\tvar width = 0;\n\n\t\ttableNode.table.widths.forEach(function (w) {\n\t\t\twidth += w._calcWidth;\n\t\t});\n\n\t\treturn width;\n\t}\n\n\tfunction prepareRowSpanData() {\n\t\tvar rsd = [];\n\t\tvar x = 0;\n\t\tvar lastWidth = 0;\n\n\t\trsd.push({ left: 0, rowSpan: 0 });\n\n\t\tfor (var i = 0, l = self.tableNode.table.body[0].length; i < l; i++) {\n\t\t\tvar paddings = self.layout.paddingLeft(i, self.tableNode) + self.layout.paddingRight(i, self.tableNode);\n\t\t\tvar lBorder = self.layout.vLineWidth(i, self.tableNode);\n\t\t\tlastWidth = paddings + lBorder + self.tableNode.table.widths[i]._calcWidth;\n\t\t\trsd[rsd.length - 1].width = lastWidth;\n\t\t\tx += lastWidth;\n\t\t\trsd.push({ left: x, rowSpan: 0, width: 0 });\n\t\t}\n\n\t\treturn rsd;\n\t}\n\n\t// Iterate through all cells. If the current cell is the start of a\n\t// rowSpan/colSpan, update the border property of the cells on its\n\t// bottom/right accordingly. This is needed since each iteration of the\n\t// line-drawing loops draws lines for a single cell, not for an entire\n\t// rowSpan/colSpan.\n\tfunction prepareCellBorders(body) {\n\t\tfor (var rowIndex = 0; rowIndex < body.length; rowIndex++) {\n\t\t\tvar row = body[rowIndex];\n\n\t\t\tfor (var colIndex = 0; colIndex < row.length; colIndex++) {\n\t\t\t\tvar cell = row[colIndex];\n\n\t\t\t\tif (cell.border) {\n\t\t\t\t\tvar rowSpan = cell.rowSpan || 1;\n\t\t\t\t\tvar colSpan = cell.colSpan || 1;\n\n\t\t\t\t\tfor (var rowOffset = 0; rowOffset < rowSpan; rowOffset++) {\n\t\t\t\t\t\t// set left border\n\t\t\t\t\t\tif (cell.border[0] !== undefined && rowOffset > 0) {\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowOffset, colIndex, 0, cell.border[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// set right border\n\t\t\t\t\t\tif (cell.border[2] !== undefined) {\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowOffset, colIndex + colSpan - 1, 2, cell.border[2]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (var colOffset = 0; colOffset < colSpan; colOffset++) {\n\t\t\t\t\t\t// set top border\n\t\t\t\t\t\tif (cell.border[1] !== undefined && colOffset > 0) {\n\t\t\t\t\t\t\tsetBorder(rowIndex, colIndex + colOffset, 1, cell.border[1]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// set bottom border\n\t\t\t\t\t\tif (cell.border[3] !== undefined) {\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowSpan - 1, colIndex + colOffset, 3, cell.border[3]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// helper function to set the border for a given cell\n\t\tfunction setBorder(rowIndex, colIndex, borderIndex, borderValue) {\n\t\t\tvar cell = body[rowIndex][colIndex];\n\t\t\tcell.border = cell.border || {};\n\t\t\tcell.border[borderIndex] = borderValue;\n\t\t}\n\t}\n};\n\nTableProcessor.prototype.onRowBreak = function (rowIndex, writer) {\n\tvar self = this;\n\treturn function () {\n\t\tvar offset = self.rowPaddingTop + (!self.headerRows ? self.topLineWidth : 0);\n\t\twriter.context().availableHeight -= self.reservedAtBottom;\n\t\twriter.context().moveDown(offset);\n\t};\n};\n\nTableProcessor.prototype.beginRow = function (rowIndex, writer) {\n\tthis.topLineWidth = this.layout.hLineWidth(rowIndex, this.tableNode);\n\tthis.rowPaddingTop = this.layout.paddingTop(rowIndex, this.tableNode);\n\tthis.bottomLineWidth = this.layout.hLineWidth(rowIndex + 1, this.tableNode);\n\tthis.rowPaddingBottom = this.layout.paddingBottom(rowIndex, this.tableNode);\n\n\tthis.rowCallback = this.onRowBreak(rowIndex, writer);\n\twriter.tracker.startTracking('pageChanged', this.rowCallback);\n\tif (this.dontBreakRows) {\n\t\twriter.beginUnbreakableBlock();\n\t}\n\tthis.rowTopY = writer.context().y;\n\tthis.reservedAtBottom = this.bottomLineWidth + this.rowPaddingBottom;\n\n\twriter.context().availableHeight -= this.reservedAtBottom;\n\n\twriter.context().moveDown(this.rowPaddingTop);\n};\n\nTableProcessor.prototype.drawHorizontalLine = function (lineIndex, writer, overrideY) {\n\tvar lineWidth = this.layout.hLineWidth(lineIndex, this.tableNode);\n\tif (lineWidth) {\n\t\tvar style = this.layout.hLineStyle(lineIndex, this.tableNode);\n\t\tvar dash;\n\t\tif (style && style.dash) {\n\t\t\tdash = style.dash;\n\t\t}\n\n\t\tvar offset = lineWidth / 2;\n\t\tvar currentLine = null;\n\t\tvar body = this.tableNode.table.body;\n\t\tvar cellAbove;\n\t\tvar currentCell;\n\t\tvar rowCellAbove;\n\n\t\tfor (var i = 0, l = this.rowSpanData.length; i < l; i++) {\n\t\t\tvar data = this.rowSpanData[i];\n\t\t\tvar shouldDrawLine = !data.rowSpan;\n\t\t\tvar borderColor = null;\n\n\t\t\t// draw only if the current cell requires a top border or the cell in the\n\t\t\t// row above requires a bottom border\n\t\t\tif (shouldDrawLine && i < l - 1) {\n\t\t\t\tvar topBorder = false, bottomBorder = false, rowBottomBorder = false;\n\n\t\t\t\t// the cell in the row above\n\t\t\t\tif (lineIndex > 0) {\n\t\t\t\t\tcellAbove = body[lineIndex - 1][i];\n\t\t\t\t\tbottomBorder = cellAbove.border ? cellAbove.border[3] : this.layout.defaultBorder;\n\t\t\t\t\tif (bottomBorder && cellAbove.borderColor) {\n\t\t\t\t\t\tborderColor = cellAbove.borderColor[3];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// the current cell\n\t\t\t\tif (lineIndex < body.length) {\n\t\t\t\t\tcurrentCell = body[lineIndex][i];\n\t\t\t\t\ttopBorder = currentCell.border ? currentCell.border[1] : this.layout.defaultBorder;\n\t\t\t\t\tif (topBorder && borderColor == null && currentCell.borderColor) {\n\t\t\t\t\t\tborderColor = currentCell.borderColor[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tshouldDrawLine = topBorder || bottomBorder;\n\t\t\t}\n\n\t\t\tif (cellAbove && cellAbove._rowSpanCurrentOffset) {\n\t\t\t\trowCellAbove = body[lineIndex - 1 - cellAbove._rowSpanCurrentOffset][i];\n\t\t\t\trowBottomBorder = rowCellAbove && rowCellAbove.border ? rowCellAbove.border[3] : this.layout.defaultBorder;\n\t\t\t\tif (rowBottomBorder && rowCellAbove && rowCellAbove.borderColor) {\n\t\t\t\t\tborderColor = rowCellAbove.borderColor[3];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (borderColor == null) {\n\t\t\t\tborderColor = isFunction(this.layout.hLineColor) ? this.layout.hLineColor(lineIndex, this.tableNode, i) : this.layout.hLineColor;\n\t\t\t}\n\n\t\t\tif (!currentLine && shouldDrawLine) {\n\t\t\t\tcurrentLine = { left: data.left, width: 0 };\n\t\t\t}\n\n\t\t\tif (shouldDrawLine) {\n\t\t\t\tvar colSpanIndex = 0;\n\t\t\t\tif (rowCellAbove && rowCellAbove.colSpan && rowBottomBorder) {\n\t\t\t\t\twhile (rowCellAbove.colSpan > colSpanIndex) {\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\n\t\t\t\t\t}\n\t\t\t\t\ti += colSpanIndex - 1;\n\t\t\t\t} else if (cellAbove && cellAbove.colSpan && bottomBorder) {\n\t\t\t\t\twhile (cellAbove.colSpan > colSpanIndex) {\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\n\t\t\t\t\t}\n\t\t\t\t\ti += colSpanIndex - 1;\n\t\t\t\t} else if (currentCell && currentCell.colSpan && topBorder) {\n\t\t\t\t\twhile (currentCell.colSpan > colSpanIndex) {\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\n\t\t\t\t\t}\n\t\t\t\t\ti += colSpanIndex - 1;\n\t\t\t\t} else {\n\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i].width || 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar y = (overrideY || 0) + offset;\n\n\n\t\t\tif (shouldDrawLine) {\n\t\t\t\tif (currentLine && currentLine.width) {\n\t\t\t\t\twriter.addVector({\n\t\t\t\t\t\ttype: 'line',\n\t\t\t\t\t\tx1: currentLine.left,\n\t\t\t\t\t\tx2: currentLine.left + currentLine.width,\n\t\t\t\t\t\ty1: y,\n\t\t\t\t\t\ty2: y,\n\t\t\t\t\t\tlineWidth: lineWidth,\n\t\t\t\t\t\tdash: dash,\n\t\t\t\t\t\tlineColor: borderColor\n\t\t\t\t\t}, false, overrideY);\n\t\t\t\t\tcurrentLine = null;\n\t\t\t\t\tborderColor = null;\n\t\t\t\t\tcellAbove = null;\n\t\t\t\t\tcurrentCell = null;\n\t\t\t\t\trowCellAbove = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twriter.context().moveDown(lineWidth);\n\t}\n};\n\nTableProcessor.prototype.drawVerticalLine = function (x, y0, y1, vLineColIndex, writer, vLineRowIndex, beforeVLineColIndex) {\n\tvar width = this.layout.vLineWidth(vLineColIndex, this.tableNode);\n\tif (width === 0) {\n\t\treturn;\n\t}\n\tvar style = this.layout.vLineStyle(vLineColIndex, this.tableNode);\n\tvar dash;\n\tif (style && style.dash) {\n\t\tdash = style.dash;\n\t}\n\n\tvar body = this.tableNode.table.body;\n\tvar cellBefore;\n\tvar currentCell;\n\tvar borderColor;\n\n\t// the cell in the col before\n\tif (vLineColIndex > 0) {\n\t\tcellBefore = body[vLineRowIndex][beforeVLineColIndex];\n\t\tif (cellBefore && cellBefore.borderColor) {\n\t\t\tif (cellBefore.border ? cellBefore.border[2] : this.layout.defaultBorder) {\n\t\t\t\tborderColor = cellBefore.borderColor[2];\n\t\t\t}\n\t\t}\n\t}\n\n\t// the current cell\n\tif (borderColor == null && vLineColIndex < body.length) {\n\t\tcurrentCell = body[vLineRowIndex][vLineColIndex];\n\t\tif (currentCell && currentCell.borderColor) {\n\t\t\tif (currentCell.border ? currentCell.border[0] : this.layout.defaultBorder) {\n\t\t\t\tborderColor = currentCell.borderColor[0];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (borderColor == null && cellBefore && cellBefore._rowSpanCurrentOffset) {\n\t\tvar rowCellBeforeAbove = body[vLineRowIndex - cellBefore._rowSpanCurrentOffset][beforeVLineColIndex];\n\t\tif (rowCellBeforeAbove.borderColor) {\n\t\t\tif (rowCellBeforeAbove.border ? rowCellBeforeAbove.border[2] : this.layout.defaultBorder) {\n\t\t\t\tborderColor = rowCellBeforeAbove.borderColor[2];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (borderColor == null && currentCell && currentCell._rowSpanCurrentOffset) {\n\t\tvar rowCurrentCellAbove = body[vLineRowIndex - currentCell._rowSpanCurrentOffset][vLineColIndex];\n\t\tif (rowCurrentCellAbove.borderColor) {\n\t\t\tif (rowCurrentCellAbove.border ? rowCurrentCellAbove.border[2] : this.layout.defaultBorder) {\n\t\t\t\tborderColor = rowCurrentCellAbove.borderColor[2];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (borderColor == null) {\n\t\tborderColor = isFunction(this.layout.vLineColor) ? this.layout.vLineColor(vLineColIndex, this.tableNode, vLineRowIndex) : this.layout.vLineColor;\n\t}\n\twriter.addVector({\n\t\ttype: 'line',\n\t\tx1: x + width / 2,\n\t\tx2: x + width / 2,\n\t\ty1: y0,\n\t\ty2: y1,\n\t\tlineWidth: width,\n\t\tdash: dash,\n\t\tlineColor: borderColor\n\t}, false, true);\n\tcellBefore = null;\n\tcurrentCell = null;\n\tborderColor = null;\n};\n\nTableProcessor.prototype.endTable = function (writer) {\n\tif (this.cleanUpRepeatables) {\n\t\twriter.popFromRepeatables();\n\t}\n};\n\nTableProcessor.prototype.endRow = function (rowIndex, writer, pageBreaks) {\n\tvar l, i;\n\tvar self = this;\n\twriter.tracker.stopTracking('pageChanged', this.rowCallback);\n\twriter.context().moveDown(this.layout.paddingBottom(rowIndex, this.tableNode));\n\twriter.context().availableHeight += this.reservedAtBottom;\n\n\tvar endingPage = writer.context().page;\n\tvar endingY = writer.context().y;\n\n\tvar xs = getLineXs();\n\n\tvar ys = [];\n\n\tvar hasBreaks = pageBreaks && pageBreaks.length > 0;\n\tvar body = this.tableNode.table.body;\n\n\tys.push({\n\t\ty0: this.rowTopY,\n\t\tpage: hasBreaks ? pageBreaks[0].prevPage : endingPage\n\t});\n\n\tif (hasBreaks) {\n\t\tfor (i = 0, l = pageBreaks.length; i < l; i++) {\n\t\t\tvar pageBreak = pageBreaks[i];\n\t\t\tys[ys.length - 1].y1 = pageBreak.prevY;\n\n\t\t\tys.push({ y0: pageBreak.y, page: pageBreak.prevPage + 1 });\n\t\t}\n\t}\n\n\tys[ys.length - 1].y1 = endingY;\n\n\tvar skipOrphanePadding = (ys[0].y1 - ys[0].y0 === this.rowPaddingTop);\n\tfor (var yi = (skipOrphanePadding ? 1 : 0), yl = ys.length; yi < yl; yi++) {\n\t\tvar willBreak = yi < ys.length - 1;\n\t\tvar rowBreakWithoutHeader = (yi > 0 && !this.headerRows);\n\t\tvar hzLineOffset = rowBreakWithoutHeader ? 0 : this.topLineWidth;\n\t\tvar y1 = ys[yi].y0;\n\t\tvar y2 = ys[yi].y1;\n\n\t\tif (willBreak) {\n\t\t\ty2 = y2 + this.rowPaddingBottom;\n\t\t}\n\n\t\tif (writer.context().page != ys[yi].page) {\n\t\t\twriter.context().page = ys[yi].page;\n\n\t\t\t//TODO: buggy, availableHeight should be updated on every pageChanged event\n\t\t\t// TableProcessor should be pageChanged listener, instead of processRow\n\t\t\tthis.reservedAtBottom = 0;\n\t\t}\n\n\t\tfor (i = 0, l = xs.length; i < l; i++) {\n\t\t\tvar leftCellBorder = false;\n\t\t\tvar rightCellBorder = false;\n\t\t\tvar colIndex = xs[i].index;\n\n\t\t\t// current cell\n\t\t\tif (colIndex < body[rowIndex].length) {\n\t\t\t\tvar cell = body[rowIndex][colIndex];\n\t\t\t\tleftCellBorder = cell.border ? cell.border[0] : this.layout.defaultBorder;\n\t\t\t\trightCellBorder = cell.border ? cell.border[2] : this.layout.defaultBorder;\n\t\t\t}\n\n\t\t\t// before cell\n\t\t\tif (colIndex > 0 && !leftCellBorder) {\n\t\t\t\tvar cell = body[rowIndex][colIndex - 1];\n\t\t\t\tleftCellBorder = cell.border ? cell.border[2] : this.layout.defaultBorder;\n\t\t\t}\n\n\t\t\t// after cell\n\t\t\tif (colIndex + 1 < body[rowIndex].length && !rightCellBorder) {\n\t\t\t\tvar cell = body[rowIndex][colIndex + 1];\n\t\t\t\trightCellBorder = cell.border ? cell.border[0] : this.layout.defaultBorder;\n\t\t\t}\n\n\t\t\tif (leftCellBorder) {\n\t\t\t\tthis.drawVerticalLine(xs[i].x, y1 - hzLineOffset, y2 + this.bottomLineWidth, xs[i].index, writer, rowIndex, xs[i - 1] ? xs[i - 1].index : null);\n\t\t\t}\n\n\t\t\tif (i < l - 1) {\n\t\t\t\tvar fillColor = body[rowIndex][colIndex].fillColor;\n\t\t\t\tvar fillOpacity = body[rowIndex][colIndex].fillOpacity;\n\t\t\t\tif (!fillColor) {\n\t\t\t\t\tfillColor = isFunction(this.layout.fillColor) ? this.layout.fillColor(rowIndex, this.tableNode, colIndex) : this.layout.fillColor;\n\t\t\t\t}\n\t\t\t\tif (!isNumber(fillOpacity)) {\n\t\t\t\t\tfillOpacity = isFunction(this.layout.fillOpacity) ? this.layout.fillOpacity(rowIndex, this.tableNode, colIndex) : this.layout.fillOpacity;\n\t\t\t\t}\n\t\t\t\tvar overlayPattern = body[rowIndex][colIndex].overlayPattern;\n\t\t\t\tvar overlayOpacity = body[rowIndex][colIndex].overlayOpacity;\n\t\t\t\tif (fillColor || overlayPattern) {\n\t\t\t\t\tvar widthLeftBorder = leftCellBorder ? this.layout.vLineWidth(colIndex, this.tableNode) : 0;\n\t\t\t\t\tvar widthRightBorder;\n\t\t\t\t\tif ((colIndex === 0 || colIndex + 1 == body[rowIndex].length) && !rightCellBorder) {\n\t\t\t\t\t\twidthRightBorder = this.layout.vLineWidth(colIndex + 1, this.tableNode);\n\t\t\t\t\t} else if (rightCellBorder) {\n\t\t\t\t\t\twidthRightBorder = this.layout.vLineWidth(colIndex + 1, this.tableNode) / 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\twidthRightBorder = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar x1f = this.dontBreakRows ? xs[i].x + widthLeftBorder : xs[i].x + (widthLeftBorder / 2);\n\t\t\t\t\tvar y1f = this.dontBreakRows ? y1 : y1 - (hzLineOffset / 2);\n\t\t\t\t\tvar x2f = xs[i + 1].x + widthRightBorder;\n\t\t\t\t\tvar y2f = this.dontBreakRows ? y2 + this.bottomLineWidth : y2 + (this.bottomLineWidth / 2);\n\t\t\t\t\tvar bgWidth = x2f - x1f;\n\t\t\t\t\tvar bgHeight = y2f - y1f;\n\t\t\t\t\tif (fillColor) {\n\t\t\t\t\t\twriter.addVector({\n\t\t\t\t\t\t\ttype: 'rect',\n\t\t\t\t\t\t\tx: x1f,\n\t\t\t\t\t\t\ty: y1f,\n\t\t\t\t\t\t\tw: bgWidth,\n\t\t\t\t\t\t\th: bgHeight,\n\t\t\t\t\t\t\tlineWidth: 0,\n\t\t\t\t\t\t\tcolor: fillColor,\n\t\t\t\t\t\t\tfillOpacity: fillOpacity\n\t\t\t\t\t\t}, false, true, writer.context().backgroundLength[writer.context().page]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (overlayPattern) {\n\t\t\t\t\t\twriter.addVector({\n\t\t\t\t\t\t\ttype: 'rect',\n\t\t\t\t\t\t\tx: x1f,\n\t\t\t\t\t\t\ty: y1f,\n\t\t\t\t\t\t\tw: bgWidth,\n\t\t\t\t\t\t\th: bgHeight,\n\t\t\t\t\t\t\tlineWidth: 0,\n\t\t\t\t\t\t\tcolor: overlayPattern,\n\t\t\t\t\t\t\tfillOpacity: overlayOpacity\n\t\t\t\t\t\t}, false, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (willBreak && this.layout.hLineWhenBroken !== false) {\n\t\t\tthis.drawHorizontalLine(rowIndex + 1, writer, y2);\n\t\t}\n\t\tif (rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) {\n\t\t\tthis.drawHorizontalLine(rowIndex, writer, y1);\n\t\t}\n\t}\n\n\twriter.context().page = endingPage;\n\twriter.context().y = endingY;\n\n\tvar row = this.tableNode.table.body[rowIndex];\n\tfor (i = 0, l = row.length; i < l; i++) {\n\t\tif (row[i].rowSpan) {\n\t\t\tthis.rowSpanData[i].rowSpan = row[i].rowSpan;\n\n\t\t\t// fix colSpans\n\t\t\tif (row[i].colSpan && row[i].colSpan > 1) {\n\t\t\t\tfor (var j = 1; j < row[i].rowSpan; j++) {\n\t\t\t\t\tthis.tableNode.table.body[rowIndex + j][i]._colSpan = row[i].colSpan;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// fix rowSpans\n\t\t\tif (row[i].rowSpan && row[i].rowSpan > 1) {\n\t\t\t\tfor (var j = 1; j < row[i].rowSpan; j++) {\n\t\t\t\t\tthis.tableNode.table.body[rowIndex + j][i]._rowSpanCurrentOffset = j;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.rowSpanData[i].rowSpan > 0) {\n\t\t\tthis.rowSpanData[i].rowSpan--;\n\t\t}\n\t}\n\n\tthis.drawHorizontalLine(rowIndex + 1, writer);\n\n\tif (this.headerRows && rowIndex === this.headerRows - 1) {\n\t\tthis.headerRepeatable = writer.currentBlockToRepeatable();\n\t}\n\n\tif (this.dontBreakRows) {\n\t\twriter.tracker.auto('pageChanged',\n\t\t\tfunction () {\n\t\t\t\tif (!self.headerRows && self.layout.hLineWhenBroken !== false) {\n\t\t\t\t\tself.drawHorizontalLine(rowIndex, writer);\n\t\t\t\t}\n\t\t\t},\n\t\t\tfunction () {\n\t\t\t\twriter.commitUnbreakableBlock();\n\t\t\t}\n\t\t);\n\t}\n\n\tif (this.headerRepeatable && (rowIndex === (this.rowsWithoutPageBreak - 1) || rowIndex === this.tableNode.table.body.length - 1)) {\n\t\twriter.commitUnbreakableBlock();\n\t\twriter.pushToRepeatables(this.headerRepeatable);\n\t\tthis.cleanUpRepeatables = true;\n\t\tthis.headerRepeatable = null;\n\t}\n\n\tfunction getLineXs() {\n\t\tvar result = [];\n\t\tvar cols = 0;\n\n\t\tfor (var i = 0, l = self.tableNode.table.body[rowIndex].length; i < l; i++) {\n\t\t\tif (!cols) {\n\t\t\t\tresult.push({ x: self.rowSpanData[i].left, index: i });\n\n\t\t\t\tvar item = self.tableNode.table.body[rowIndex][i];\n\t\t\t\tcols = (item._colSpan || item.colSpan || 0);\n\t\t\t}\n\t\t\tif (cols > 0) {\n\t\t\t\tcols--;\n\t\t\t}\n\t\t}\n\n\t\tresult.push({ x: self.rowSpanData[self.rowSpanData.length - 1].left, index: self.rowSpanData.length - 1 });\n\n\t\treturn result;\n\t}\n};\n\nmodule.exports = TableProcessor;\n\n\n/***/ }),\n\n/***/ 3497:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isArray = (__webpack_require__(6225).isArray);\nvar isPattern = (__webpack_require__(6225).isPattern);\nvar getPattern = (__webpack_require__(6225).getPattern);\n\nfunction groupDecorations(line) {\n\tvar groups = [], currentGroup = null;\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\n\t\tvar inline = line.inlines[i];\n\t\tvar decoration = inline.decoration;\n\t\tif (!decoration) {\n\t\t\tcurrentGroup = null;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isArray(decoration)) {\n\t\t\tdecoration = [decoration];\n\t\t}\n\t\tvar color = inline.decorationColor || inline.color || 'black';\n\t\tvar style = inline.decorationStyle || 'solid';\n\t\tfor (var ii = 0, ll = decoration.length; ii < ll; ii++) {\n\t\t\tvar decorationItem = decoration[ii];\n\t\t\tif (!currentGroup || decorationItem !== currentGroup.decoration ||\n\t\t\t\tstyle !== currentGroup.decorationStyle || color !== currentGroup.decorationColor) {\n\n\t\t\t\tcurrentGroup = {\n\t\t\t\t\tline: line,\n\t\t\t\t\tdecoration: decorationItem,\n\t\t\t\t\tdecorationColor: color,\n\t\t\t\t\tdecorationStyle: style,\n\t\t\t\t\tinlines: [inline]\n\t\t\t\t};\n\t\t\t\tgroups.push(currentGroup);\n\t\t\t} else {\n\t\t\t\tcurrentGroup.inlines.push(inline);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn groups;\n}\n\nfunction drawDecoration(group, x, y, pdfKitDoc) {\n\tfunction maxInline() {\n\t\tvar max = 0;\n\t\tfor (var i = 0, l = group.inlines.length; i < l; i++) {\n\t\t\tvar inline = group.inlines[i];\n\t\t\tmax = inline.fontSize > max ? i : max;\n\t\t}\n\t\treturn group.inlines[max];\n\t}\n\tfunction width() {\n\t\tvar sum = 0;\n\t\tfor (var i = 0, l = group.inlines.length; i < l; i++) {\n\t\t\tvar justifyShift = (group.inlines[i].justifyShift || 0);\n\t\t\tsum += group.inlines[i].width + justifyShift;\n\t\t}\n\t\treturn sum;\n\t}\n\tvar firstInline = group.inlines[0],\n\t\tbiggerInline = maxInline(),\n\t\ttotalWidth = width(),\n\t\tlineAscent = group.line.getAscenderHeight(),\n\t\tascent = biggerInline.font.ascender / 1000 * biggerInline.fontSize,\n\t\theight = biggerInline.height,\n\t\tdescent = height - ascent;\n\n\tvar lw = 0.5 + Math.floor(Math.max(biggerInline.fontSize - 8, 0) / 2) * 0.12;\n\n\tswitch (group.decoration) {\n\t\tcase 'underline':\n\t\t\ty += lineAscent + descent * 0.45;\n\t\t\tbreak;\n\t\tcase 'overline':\n\t\t\ty += lineAscent - (ascent * 0.85);\n\t\t\tbreak;\n\t\tcase 'lineThrough':\n\t\t\ty += lineAscent - (ascent * 0.25);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow 'Unkown decoration : ' + group.decoration;\n\t}\n\tpdfKitDoc.save();\n\n\tif (group.decorationStyle === 'double') {\n\t\tvar gap = Math.max(0.5, lw * 2);\n\t\tpdfKitDoc.fillColor(group.decorationColor)\n\t\t\t.rect(x + firstInline.x, y - lw / 2, totalWidth, lw / 2).fill()\n\t\t\t.rect(x + firstInline.x, y + gap - lw / 2, totalWidth, lw / 2).fill();\n\t} else if (group.decorationStyle === 'dashed') {\n\t\tvar nbDashes = Math.ceil(totalWidth / (3.96 + 2.84));\n\t\tvar rdx = x + firstInline.x;\n\t\tpdfKitDoc.rect(rdx, y, totalWidth, lw).clip();\n\t\tpdfKitDoc.fillColor(group.decorationColor);\n\t\tfor (var i = 0; i < nbDashes; i++) {\n\t\t\tpdfKitDoc.rect(rdx, y - lw / 2, 3.96, lw).fill();\n\t\t\trdx += 3.96 + 2.84;\n\t\t}\n\t} else if (group.decorationStyle === 'dotted') {\n\t\tvar nbDots = Math.ceil(totalWidth / (lw * 3));\n\t\tvar rx = x + firstInline.x;\n\t\tpdfKitDoc.rect(rx, y, totalWidth, lw).clip();\n\t\tpdfKitDoc.fillColor(group.decorationColor);\n\t\tfor (var ii = 0; ii < nbDots; ii++) {\n\t\t\tpdfKitDoc.rect(rx, y - lw / 2, lw, lw).fill();\n\t\t\trx += (lw * 3);\n\t\t}\n\t} else if (group.decorationStyle === 'wavy') {\n\t\tvar sh = 0.7, sv = 1;\n\t\tvar nbWaves = Math.ceil(totalWidth / (sh * 2)) + 1;\n\t\tvar rwx = x + firstInline.x - 1;\n\t\tpdfKitDoc.rect(x + firstInline.x, y - sv, totalWidth, y + sv).clip();\n\t\tpdfKitDoc.lineWidth(0.24);\n\t\tpdfKitDoc.moveTo(rwx, y);\n\t\tfor (var iii = 0; iii < nbWaves; iii++) {\n\t\t\tpdfKitDoc.bezierCurveTo(rwx + sh, y - sv, rwx + sh * 2, y - sv, rwx + sh * 3, y)\n\t\t\t\t.bezierCurveTo(rwx + sh * 4, y + sv, rwx + sh * 5, y + sv, rwx + sh * 6, y);\n\t\t\trwx += sh * 6;\n\t\t}\n\t\tpdfKitDoc.stroke(group.decorationColor);\n\t} else {\n\t\tpdfKitDoc.fillColor(group.decorationColor)\n\t\t\t.rect(x + firstInline.x, y - lw / 2, totalWidth, lw)\n\t\t\t.fill();\n\t}\n\tpdfKitDoc.restore();\n}\n\nfunction drawDecorations(line, x, y, pdfKitDoc) {\n\tvar groups = groupDecorations(line);\n\tfor (var i = 0, l = groups.length; i < l; i++) {\n\t\tdrawDecoration(groups[i], x, y, pdfKitDoc);\n\t}\n}\n\nfunction drawBackground(line, x, y, patterns, pdfKitDoc) {\n\tvar height = line.getHeight();\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\n\t\tvar inline = line.inlines[i];\n\t\tif (!inline.background) {\n\t\t\tcontinue;\n\t\t}\n\t\tvar color = inline.background;\n\t\tif (isPattern(inline.background)) {\n\t\t\tcolor = getPattern(inline.background, patterns);\n\t\t}\n\t\tvar justifyShift = (inline.justifyShift || 0);\n\t\tpdfKitDoc.fillColor(color)\n\t\t\t.rect(x + inline.x - justifyShift, y, inline.width + justifyShift, height)\n\t\t\t.fill();\n\t}\n}\n\nmodule.exports = {\n\tdrawBackground: drawBackground,\n\tdrawDecorations: drawDecorations\n};\n\n\n/***/ }),\n\n/***/ 1350:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isString = (__webpack_require__(6225).isString);\nvar isNumber = (__webpack_require__(6225).isNumber);\nvar isObject = (__webpack_require__(6225).isObject);\nvar isArray = (__webpack_require__(6225).isArray);\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar LineBreaker = __webpack_require__(7337);\n\nvar LEADING = /^(\\s)+/g;\nvar TRAILING = /(\\s)+$/g;\n\n/**\n * Creates an instance of TextTools - text measurement utility\n *\n * @constructor\n * @param {FontProvider} fontProvider\n */\nfunction TextTools(fontProvider) {\n\tthis.fontProvider = fontProvider;\n}\n\n/**\n * Converts an array of strings (or inline-definition-objects) into a collection\n * of inlines and calculated minWidth/maxWidth.\n * and their min/max widths\n * @param  {Object} textArray - an array of inline-definition-objects (or strings)\n * @param  {Object} styleContextStack current style stack\n * @return {Object}                   collection of inlines, minWidth, maxWidth\n */\nTextTools.prototype.buildInlines = function (textArray, styleContextStack) {\n\tvar measured = measure(this.fontProvider, textArray, styleContextStack);\n\n\tvar minWidth = 0,\n\t\tmaxWidth = 0,\n\t\tcurrentLineWidth;\n\n\tmeasured.forEach(function (inline) {\n\t\tminWidth = Math.max(minWidth, inline.width - inline.leadingCut - inline.trailingCut);\n\n\t\tif (!currentLineWidth) {\n\t\t\tcurrentLineWidth = { width: 0, leadingCut: inline.leadingCut, trailingCut: 0 };\n\t\t}\n\n\t\tcurrentLineWidth.width += inline.width;\n\t\tcurrentLineWidth.trailingCut = inline.trailingCut;\n\n\t\tmaxWidth = Math.max(maxWidth, getTrimmedWidth(currentLineWidth));\n\n\t\tif (inline.lineEnd) {\n\t\t\tcurrentLineWidth = null;\n\t\t}\n\t});\n\n\tif (getStyleProperty({}, styleContextStack, 'noWrap', false)) {\n\t\tminWidth = maxWidth;\n\t}\n\n\treturn {\n\t\titems: measured,\n\t\tminWidth: minWidth,\n\t\tmaxWidth: maxWidth\n\t};\n\n\tfunction getTrimmedWidth(item) {\n\t\treturn Math.max(0, item.width - item.leadingCut - item.trailingCut);\n\t}\n};\n\n/**\n * Returns size of the specified string (without breaking it) using the current style\n * @param  {String} text              text to be measured\n * @param  {Object} styleContextStack current style stack\n * @return {Object}                   size of the specified string\n */\nTextTools.prototype.sizeOfString = function (text, styleContextStack) {\n\ttext = text ? text.toString().replace(/\\t/g, '    ') : '';\n\n\t//TODO: refactor - extract from measure\n\tvar fontName = getStyleProperty({}, styleContextStack, 'font', 'Roboto');\n\tvar fontSize = getStyleProperty({}, styleContextStack, 'fontSize', 12);\n\tvar fontFeatures = getStyleProperty({}, styleContextStack, 'fontFeatures', null);\n\tvar bold = getStyleProperty({}, styleContextStack, 'bold', false);\n\tvar italics = getStyleProperty({}, styleContextStack, 'italics', false);\n\tvar lineHeight = getStyleProperty({}, styleContextStack, 'lineHeight', 1);\n\tvar characterSpacing = getStyleProperty({}, styleContextStack, 'characterSpacing', 0);\n\n\tvar font = this.fontProvider.provideFont(fontName, bold, italics);\n\n\treturn {\n\t\twidth: widthOfString(text, font, fontSize, characterSpacing, fontFeatures),\n\t\theight: font.lineHeight(fontSize) * lineHeight,\n\t\tfontSize: fontSize,\n\t\tlineHeight: lineHeight,\n\t\tascender: font.ascender / 1000 * fontSize,\n\t\tdescender: font.descender / 1000 * fontSize\n\t};\n};\n\n/**\n * Returns size of the specified rotated string (without breaking it) using the current style\n *\n * @param  {string} text text to be measured\n * @param  {number} angle\n * @param  {object} styleContextStack current style stack\n * @returns {object} size of the specified string\n */\nTextTools.prototype.sizeOfRotatedText = function (text, angle, styleContextStack) {\n\tvar angleRad = angle * Math.PI / -180;\n\tvar size = this.sizeOfString(text, styleContextStack);\n\treturn {\n\t\twidth: Math.abs(size.height * Math.sin(angleRad)) + Math.abs(size.width * Math.cos(angleRad)),\n\t\theight: Math.abs(size.width * Math.sin(angleRad)) + Math.abs(size.height * Math.cos(angleRad))\n\t};\n}\n\nTextTools.prototype.widthOfString = function (text, font, fontSize, characterSpacing, fontFeatures) {\n\treturn widthOfString(text, font, fontSize, characterSpacing, fontFeatures);\n};\n\nfunction splitWords(text, noWrap) {\n\tvar results = [];\n\ttext = text.replace(/\\t/g, '    ');\n\n\tif (noWrap) {\n\t\tresults.push({ text: text });\n\t\treturn results;\n\t}\n\n\tvar breaker = new LineBreaker(text);\n\tvar last = 0;\n\tvar bk;\n\n\twhile (bk = breaker.nextBreak()) {\n\t\tvar word = text.slice(last, bk.position);\n\n\t\tif (bk.required || word.match(/\\r?\\n$|\\r$/)) { // new line\n\t\t\tword = word.replace(/\\r?\\n$|\\r$/, '');\n\t\t\tresults.push({ text: word, lineEnd: true });\n\t\t} else {\n\t\t\tresults.push({ text: word });\n\t\t}\n\n\t\tlast = bk.position;\n\t}\n\n\treturn results;\n}\n\nfunction copyStyle(source, destination) {\n\tdestination = destination || {};\n\tsource = source || {}; //TODO: default style\n\n\tfor (var key in source) {\n\t\tif (key != 'text' && source.hasOwnProperty(key)) {\n\t\t\tdestination[key] = source[key];\n\t\t}\n\t}\n\n\treturn destination;\n}\n\nfunction normalizeTextArray(array, styleContextStack) {\n\tfunction flatten(array) {\n\t\treturn array.reduce(function (prev, cur) {\n\t\t\tvar current = isArray(cur.text) ? flatten(cur.text) : cur;\n\t\t\tvar more = [].concat(current).some(Array.isArray);\n\t\t\treturn prev.concat(more ? flatten(current) : current);\n\t\t}, []);\n\t}\n\n\tfunction getOneWord(index, words, noWrap) {\n\t\tif (isUndefined(words[index])) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (words[index].lineEnd) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar word = words[index].text;\n\n\t\tif (noWrap) {\n\t\t\tvar tmpWords = splitWords(normalizeString(word), false);\n\t\t\tif (isUndefined(tmpWords[tmpWords.length - 1])) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tword = tmpWords[tmpWords.length - 1].text;\n\t\t}\n\n\t\treturn word;\n\t}\n\n\tvar results = [];\n\n\tif (!isArray(array)) {\n\t\tarray = [array];\n\t}\n\n\tarray = flatten(array);\n\n\tvar lastWord = null;\n\tfor (var i = 0, l = array.length; i < l; i++) {\n\t\tvar item = array[i];\n\t\tvar style = null;\n\t\tvar words;\n\n\t\tvar noWrap = getStyleProperty(item || {}, styleContextStack, 'noWrap', false);\n\t\tif (isObject(item)) {\n\t\t\tif (item._textRef && item._textRef._textNodeRef.text) {\n\t\t\t\titem.text = item._textRef._textNodeRef.text;\n\t\t\t}\n\t\t\twords = splitWords(normalizeString(item.text), noWrap);\n\t\t\tstyle = copyStyle(item);\n\t\t} else {\n\t\t\twords = splitWords(normalizeString(item), noWrap);\n\t\t}\n\n\t\tif (lastWord && words.length) {\n\t\t\tvar firstWord = getOneWord(0, words, noWrap);\n\n\t\t\tvar wrapWords = splitWords(normalizeString(lastWord + firstWord), false);\n\t\t\tif (wrapWords.length === 1) {\n\t\t\t\tresults[results.length - 1].noNewLine = true;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i2 = 0, l2 = words.length; i2 < l2; i2++) {\n\t\t\tvar result = {\n\t\t\t\ttext: words[i2].text\n\t\t\t};\n\n\t\t\tif (words[i2].lineEnd) {\n\t\t\t\tresult.lineEnd = true;\n\t\t\t}\n\n\t\t\tcopyStyle(style, result);\n\n\t\t\tresults.push(result);\n\t\t}\n\n\t\tlastWord = null;\n\t\tif (i + 1 < l) {\n\t\t\tlastWord = getOneWord(words.length - 1, words, noWrap);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction normalizeString(value) {\n\tif (value === undefined || value === null) {\n\t\treturn '';\n\t} else if (isNumber(value)) {\n\t\treturn value.toString();\n\t} else if (isString(value)) {\n\t\treturn value;\n\t} else {\n\t\treturn value.toString();\n\t}\n}\n\nfunction getStyleProperty(item, styleContextStack, property, defaultValue) {\n\tvar value;\n\n\tif (item[property] !== undefined && item[property] !== null) {\n\t\t// item defines this property\n\t\treturn item[property];\n\t}\n\n\tif (!styleContextStack) {\n\t\treturn defaultValue;\n\t}\n\n\tstyleContextStack.auto(item, function () {\n\t\tvalue = styleContextStack.getProperty(property);\n\t});\n\n\tif (value !== null && value !== undefined) {\n\t\treturn value;\n\t} else {\n\t\treturn defaultValue;\n\t}\n}\n\nfunction measure(fontProvider, textArray, styleContextStack) {\n\tvar normalized = normalizeTextArray(textArray, styleContextStack);\n\n\tif (normalized.length) {\n\t\tvar leadingIndent = getStyleProperty(normalized[0], styleContextStack, 'leadingIndent', 0);\n\n\t\tif (leadingIndent) {\n\t\t\tnormalized[0].leadingCut = -leadingIndent;\n\t\t\tnormalized[0].leadingIndent = leadingIndent;\n\t\t}\n\t}\n\n\tnormalized.forEach(function (item) {\n\t\tvar fontName = getStyleProperty(item, styleContextStack, 'font', 'Roboto');\n\t\tvar fontSize = getStyleProperty(item, styleContextStack, 'fontSize', 12);\n\t\tvar fontFeatures = getStyleProperty(item, styleContextStack, 'fontFeatures', null);\n\t\tvar bold = getStyleProperty(item, styleContextStack, 'bold', false);\n\t\tvar italics = getStyleProperty(item, styleContextStack, 'italics', false);\n\t\tvar color = getStyleProperty(item, styleContextStack, 'color', 'black');\n\t\tvar decoration = getStyleProperty(item, styleContextStack, 'decoration', null);\n\t\tvar decorationColor = getStyleProperty(item, styleContextStack, 'decorationColor', null);\n\t\tvar decorationStyle = getStyleProperty(item, styleContextStack, 'decorationStyle', null);\n\t\tvar background = getStyleProperty(item, styleContextStack, 'background', null);\n\t\tvar lineHeight = getStyleProperty(item, styleContextStack, 'lineHeight', 1);\n\t\tvar characterSpacing = getStyleProperty(item, styleContextStack, 'characterSpacing', 0);\n\t\tvar link = getStyleProperty(item, styleContextStack, 'link', null);\n\t\tvar linkToPage = getStyleProperty(item, styleContextStack, 'linkToPage', null);\n\t\tvar linkToDestination = getStyleProperty(item, styleContextStack, 'linkToDestination', null);\n\t\tvar noWrap = getStyleProperty(item, styleContextStack, 'noWrap', null);\n\t\tvar preserveLeadingSpaces = getStyleProperty(item, styleContextStack, 'preserveLeadingSpaces', false);\n\t\tvar preserveTrailingSpaces = getStyleProperty(item, styleContextStack, 'preserveTrailingSpaces', false);\n\t\tvar opacity = getStyleProperty(item, styleContextStack, 'opacity', 1);\n\t\tvar sup = getStyleProperty(item, styleContextStack, 'sup', false);\n\t\tvar sub = getStyleProperty(item, styleContextStack, 'sub', false);\n\n\t\tif ((sup || sub) && item.fontSize === undefined) {\n\t\t\t// font size reduction taken from here: https://en.wikipedia.org/wiki/Subscript_and_superscript#Desktop_publishing\n\t\t\tfontSize *= 0.58\n\t\t}\n\n\t\tvar font = fontProvider.provideFont(fontName, bold, italics);\n\n\t\titem.width = widthOfString(item.text, font, fontSize, characterSpacing, fontFeatures);\n\t\titem.height = font.lineHeight(fontSize) * lineHeight;\n\n\t\tif (!item.leadingCut) {\n\t\t\titem.leadingCut = 0;\n\t\t}\n\n\t\tvar leadingSpaces;\n\t\tif (!preserveLeadingSpaces && (leadingSpaces = item.text.match(LEADING))) {\n\t\t\titem.leadingCut += widthOfString(leadingSpaces[0], font, fontSize, characterSpacing, fontFeatures);\n\t\t}\n\n\t\tvar trailingSpaces;\n\t\tif (!preserveTrailingSpaces && (trailingSpaces = item.text.match(TRAILING))) {\n\t\t\titem.trailingCut = widthOfString(trailingSpaces[0], font, fontSize, characterSpacing, fontFeatures);\n\t\t} else {\n\t\t\titem.trailingCut = 0;\n\t\t}\n\n\t\titem.alignment = getStyleProperty(item, styleContextStack, 'alignment', 'left');\n\t\titem.font = font;\n\t\titem.fontSize = fontSize;\n\t\titem.fontFeatures = fontFeatures;\n\t\titem.characterSpacing = characterSpacing;\n\t\titem.color = color;\n\t\titem.decoration = decoration;\n\t\titem.decorationColor = decorationColor;\n\t\titem.decorationStyle = decorationStyle;\n\t\titem.background = background;\n\t\titem.link = link;\n\t\titem.linkToPage = linkToPage;\n\t\titem.linkToDestination = linkToDestination;\n\t\titem.noWrap = noWrap;\n\t\titem.opacity = opacity;\n\t\titem.sup = sup;\n\t\titem.sub = sub;\n\t});\n\n\treturn normalized;\n}\n\nfunction widthOfString(text, font, fontSize, characterSpacing, fontFeatures) {\n\treturn font.widthOfString(text, fontSize, fontFeatures) + ((characterSpacing || 0) * (text.length - 1));\n}\n\nmodule.exports = TextTools;\n\n\n/***/ }),\n\n/***/ 8537:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nfunction TraversalTracker() {\n\tthis.events = {};\n}\n\nTraversalTracker.prototype.startTracking = function (event, callback) {\n\tvar callbacks = this.events[event] || (this.events[event] = []);\n\n\tif (callbacks.indexOf(callback) < 0) {\n\t\tcallbacks.push(callback);\n\t}\n};\n\nTraversalTracker.prototype.stopTracking = function (event, callback) {\n\tvar callbacks = this.events[event];\n\n\tif (!callbacks) {\n\t\treturn;\n\t}\n\n\tvar index = callbacks.indexOf(callback);\n\tif (index >= 0) {\n\t\tcallbacks.splice(index, 1);\n\t}\n};\n\nTraversalTracker.prototype.emit = function (event) {\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\tvar callbacks = this.events[event];\n\n\tif (!callbacks) {\n\t\treturn;\n\t}\n\n\tcallbacks.forEach(function (callback) {\n\t\tcallback.apply(this, args);\n\t});\n};\n\nTraversalTracker.prototype.auto = function (event, callback, innerFunction) {\n\tthis.startTracking(event, callback);\n\tinnerFunction();\n\tthis.stopTracking(event, callback);\n};\n\nmodule.exports = TraversalTracker;\n\n\n/***/ }),\n\n/***/ 2480:\n/***/ (function() {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 5832:\n/***/ (function() {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 9862:\n/***/ (function() {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 964:\n/***/ (function() {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 3083:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n\n\n/***/ }),\n\n/***/ 3631:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar $c5L0i$base64js = __webpack_require__(9742);\nvar $c5L0i$unicodetrie = __webpack_require__(4781);\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n  Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"getCategory\", () => $43d7963e56408b24$export$410364bbb673ddbc);\n$parcel$export(module.exports, \"getCombiningClass\", () => $43d7963e56408b24$export$c03b919c6651ed55);\n$parcel$export(module.exports, \"getScript\", () => $43d7963e56408b24$export$941569448d136665);\n$parcel$export(module.exports, \"getEastAsianWidth\", () => $43d7963e56408b24$export$92f6187db8ca6d26);\n$parcel$export(module.exports, \"getNumericValue\", () => $43d7963e56408b24$export$7d1258ebb7625a0d);\n$parcel$export(module.exports, \"isAlphabetic\", () => $43d7963e56408b24$export$52c8ea63abd07594);\n$parcel$export(module.exports, \"isDigit\", () => $43d7963e56408b24$export$727d9dbc4fbb948f);\n$parcel$export(module.exports, \"isPunctuation\", () => $43d7963e56408b24$export$a5b49f4dc6a07d2c);\n$parcel$export(module.exports, \"isLowerCase\", () => $43d7963e56408b24$export$7b6804e8df61fcf5);\n$parcel$export(module.exports, \"isUpperCase\", () => $43d7963e56408b24$export$aebd617640818cda);\n$parcel$export(module.exports, \"isTitleCase\", () => $43d7963e56408b24$export$de8b4ee23b2cf823);\n$parcel$export(module.exports, \"isWhiteSpace\", () => $43d7963e56408b24$export$3c52dd84024ae72c);\n$parcel$export(module.exports, \"isBaseForm\", () => $43d7963e56408b24$export$a11bdcffe109e74b);\n$parcel$export(module.exports, \"isMark\", () => $43d7963e56408b24$export$e33ad6871e762338);\n$parcel$export(module.exports, \"default\", () => $43d7963e56408b24$export$2e2bcd8739ae039);\n\n\nvar $29668e65f2091c2c$exports = {};\n$29668e65f2091c2c$exports = JSON.parse('{\"categories\":[\"Cc\",\"Zs\",\"Po\",\"Sc\",\"Ps\",\"Pe\",\"Sm\",\"Pd\",\"Nd\",\"Lu\",\"Sk\",\"Pc\",\"Ll\",\"So\",\"Lo\",\"Pi\",\"Cf\",\"No\",\"Pf\",\"Lt\",\"Lm\",\"Mn\",\"Me\",\"Mc\",\"Nl\",\"Zl\",\"Zp\",\"Cs\",\"Co\"],\"combiningClasses\":[\"Not_Reordered\",\"Above\",\"Above_Right\",\"Below\",\"Attached_Above_Right\",\"Attached_Below\",\"Overlay\",\"Iota_Subscript\",\"Double_Below\",\"Double_Above\",\"Below_Right\",\"Above_Left\",\"CCC10\",\"CCC11\",\"CCC12\",\"CCC13\",\"CCC14\",\"CCC15\",\"CCC16\",\"CCC17\",\"CCC18\",\"CCC19\",\"CCC20\",\"CCC21\",\"CCC22\",\"CCC23\",\"CCC24\",\"CCC25\",\"CCC30\",\"CCC31\",\"CCC32\",\"CCC27\",\"CCC28\",\"CCC29\",\"CCC33\",\"CCC34\",\"CCC35\",\"CCC36\",\"Nukta\",\"Virama\",\"CCC84\",\"CCC91\",\"CCC103\",\"CCC107\",\"CCC118\",\"CCC122\",\"CCC129\",\"CCC130\",\"CCC132\",\"Attached_Above\",\"Below_Left\",\"Left\",\"Kana_Voicing\",\"CCC26\",\"Right\"],\"scripts\":[\"Common\",\"Latin\",\"Bopomofo\",\"Inherited\",\"Greek\",\"Coptic\",\"Cyrillic\",\"Armenian\",\"Hebrew\",\"Arabic\",\"Syriac\",\"Thaana\",\"Nko\",\"Samaritan\",\"Mandaic\",\"Devanagari\",\"Bengali\",\"Gurmukhi\",\"Gujarati\",\"Oriya\",\"Tamil\",\"Telugu\",\"Kannada\",\"Malayalam\",\"Sinhala\",\"Thai\",\"Lao\",\"Tibetan\",\"Myanmar\",\"Georgian\",\"Hangul\",\"Ethiopic\",\"Cherokee\",\"Canadian_Aboriginal\",\"Ogham\",\"Runic\",\"Tagalog\",\"Hanunoo\",\"Buhid\",\"Tagbanwa\",\"Khmer\",\"Mongolian\",\"Limbu\",\"Tai_Le\",\"New_Tai_Lue\",\"Buginese\",\"Tai_Tham\",\"Balinese\",\"Sundanese\",\"Batak\",\"Lepcha\",\"Ol_Chiki\",\"Braille\",\"Glagolitic\",\"Tifinagh\",\"Han\",\"Hiragana\",\"Katakana\",\"Yi\",\"Lisu\",\"Vai\",\"Bamum\",\"Syloti_Nagri\",\"Phags_Pa\",\"Saurashtra\",\"Kayah_Li\",\"Rejang\",\"Javanese\",\"Cham\",\"Tai_Viet\",\"Meetei_Mayek\",\"null\",\"Linear_B\",\"Lycian\",\"Carian\",\"Old_Italic\",\"Gothic\",\"Old_Permic\",\"Ugaritic\",\"Old_Persian\",\"Deseret\",\"Shavian\",\"Osmanya\",\"Osage\",\"Elbasan\",\"Caucasian_Albanian\",\"Linear_A\",\"Cypriot\",\"Imperial_Aramaic\",\"Palmyrene\",\"Nabataean\",\"Hatran\",\"Phoenician\",\"Lydian\",\"Meroitic_Hieroglyphs\",\"Meroitic_Cursive\",\"Kharoshthi\",\"Old_South_Arabian\",\"Old_North_Arabian\",\"Manichaean\",\"Avestan\",\"Inscriptional_Parthian\",\"Inscriptional_Pahlavi\",\"Psalter_Pahlavi\",\"Old_Turkic\",\"Old_Hungarian\",\"Hanifi_Rohingya\",\"Old_Sogdian\",\"Sogdian\",\"Elymaic\",\"Brahmi\",\"Kaithi\",\"Sora_Sompeng\",\"Chakma\",\"Mahajani\",\"Sharada\",\"Khojki\",\"Multani\",\"Khudawadi\",\"Grantha\",\"Newa\",\"Tirhuta\",\"Siddham\",\"Modi\",\"Takri\",\"Ahom\",\"Dogra\",\"Warang_Citi\",\"Nandinagari\",\"Zanabazar_Square\",\"Soyombo\",\"Pau_Cin_Hau\",\"Bhaiksuki\",\"Marchen\",\"Masaram_Gondi\",\"Gunjala_Gondi\",\"Makasar\",\"Cuneiform\",\"Egyptian_Hieroglyphs\",\"Anatolian_Hieroglyphs\",\"Mro\",\"Bassa_Vah\",\"Pahawh_Hmong\",\"Medefaidrin\",\"Miao\",\"Tangut\",\"Nushu\",\"Duployan\",\"SignWriting\",\"Nyiakeng_Puachue_Hmong\",\"Wancho\",\"Mende_Kikakui\",\"Adlam\"],\"eaw\":[\"N\",\"Na\",\"A\",\"W\",\"H\",\"F\"]}');\n\n\nconst $43d7963e56408b24$var$trie = new (0, ($parcel$interopDefault($c5L0i$unicodetrie)))((0, ($parcel$interopDefault($c5L0i$base64js))).toByteArray(\"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\"));\nconst $43d7963e56408b24$var$log2 = Math.log2 || ((n)=>Math.log(n) / Math.LN2);\nconst $43d7963e56408b24$var$bits = (n)=>$43d7963e56408b24$var$log2(n) + 1 | 0;\n// compute the number of bits stored for each field\nconst $43d7963e56408b24$var$CATEGORY_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).categories.length - 1);\nconst $43d7963e56408b24$var$COMBINING_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).combiningClasses.length - 1);\nconst $43d7963e56408b24$var$SCRIPT_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).scripts.length - 1);\nconst $43d7963e56408b24$var$EAW_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).eaw.length - 1);\nconst $43d7963e56408b24$var$NUMBER_BITS = 10;\n// compute shift and mask values for each field\nconst $43d7963e56408b24$var$CATEGORY_SHIFT = $43d7963e56408b24$var$COMBINING_BITS + $43d7963e56408b24$var$SCRIPT_BITS + $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS;\nconst $43d7963e56408b24$var$COMBINING_SHIFT = $43d7963e56408b24$var$SCRIPT_BITS + $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS;\nconst $43d7963e56408b24$var$SCRIPT_SHIFT = $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS;\nconst $43d7963e56408b24$var$EAW_SHIFT = $43d7963e56408b24$var$NUMBER_BITS;\nconst $43d7963e56408b24$var$CATEGORY_MASK = (1 << $43d7963e56408b24$var$CATEGORY_BITS) - 1;\nconst $43d7963e56408b24$var$COMBINING_MASK = (1 << $43d7963e56408b24$var$COMBINING_BITS) - 1;\nconst $43d7963e56408b24$var$SCRIPT_MASK = (1 << $43d7963e56408b24$var$SCRIPT_BITS) - 1;\nconst $43d7963e56408b24$var$EAW_MASK = (1 << $43d7963e56408b24$var$EAW_BITS) - 1;\nconst $43d7963e56408b24$var$NUMBER_MASK = (1 << $43d7963e56408b24$var$NUMBER_BITS) - 1;\nfunction $43d7963e56408b24$export$410364bbb673ddbc(codePoint) {\n    const val = $43d7963e56408b24$var$trie.get(codePoint);\n    return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).categories[val >> $43d7963e56408b24$var$CATEGORY_SHIFT & $43d7963e56408b24$var$CATEGORY_MASK];\n}\nfunction $43d7963e56408b24$export$c03b919c6651ed55(codePoint) {\n    const val = $43d7963e56408b24$var$trie.get(codePoint);\n    return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).combiningClasses[val >> $43d7963e56408b24$var$COMBINING_SHIFT & $43d7963e56408b24$var$COMBINING_MASK];\n}\nfunction $43d7963e56408b24$export$941569448d136665(codePoint) {\n    const val = $43d7963e56408b24$var$trie.get(codePoint);\n    return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).scripts[val >> $43d7963e56408b24$var$SCRIPT_SHIFT & $43d7963e56408b24$var$SCRIPT_MASK];\n}\nfunction $43d7963e56408b24$export$92f6187db8ca6d26(codePoint) {\n    const val = $43d7963e56408b24$var$trie.get(codePoint);\n    return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).eaw[val >> $43d7963e56408b24$var$EAW_SHIFT & $43d7963e56408b24$var$EAW_MASK];\n}\nfunction $43d7963e56408b24$export$7d1258ebb7625a0d(codePoint) {\n    let val = $43d7963e56408b24$var$trie.get(codePoint);\n    let num = val & $43d7963e56408b24$var$NUMBER_MASK;\n    if (num === 0) return null;\n    else if (num <= 50) return num - 1;\n    else if (num < 0x1e0) {\n        const numerator = (num >> 4) - 12;\n        const denominator = (num & 0xf) + 1;\n        return numerator / denominator;\n    } else if (num < 0x300) {\n        val = (num >> 5) - 14;\n        let exp = (num & 0x1f) + 2;\n        while(exp > 0){\n            val *= 10;\n            exp--;\n        }\n        return val;\n    } else {\n        val = (num >> 2) - 0xbf;\n        let exp = (num & 3) + 1;\n        while(exp > 0){\n            val *= 60;\n            exp--;\n        }\n        return val;\n    }\n}\nfunction $43d7963e56408b24$export$52c8ea63abd07594(codePoint) {\n    const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n    return category === \"Lu\" || category === \"Ll\" || category === \"Lt\" || category === \"Lm\" || category === \"Lo\" || category === \"Nl\";\n}\nfunction $43d7963e56408b24$export$727d9dbc4fbb948f(codePoint) {\n    return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === \"Nd\";\n}\nfunction $43d7963e56408b24$export$a5b49f4dc6a07d2c(codePoint) {\n    const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n    return category === \"Pc\" || category === \"Pd\" || category === \"Pe\" || category === \"Pf\" || category === \"Pi\" || category === \"Po\" || category === \"Ps\";\n}\nfunction $43d7963e56408b24$export$7b6804e8df61fcf5(codePoint) {\n    return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === \"Ll\";\n}\nfunction $43d7963e56408b24$export$aebd617640818cda(codePoint) {\n    return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === \"Lu\";\n}\nfunction $43d7963e56408b24$export$de8b4ee23b2cf823(codePoint) {\n    return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === \"Lt\";\n}\nfunction $43d7963e56408b24$export$3c52dd84024ae72c(codePoint) {\n    const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n    return category === \"Zs\" || category === \"Zl\" || category === \"Zp\";\n}\nfunction $43d7963e56408b24$export$a11bdcffe109e74b(codePoint) {\n    const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n    return category === \"Nd\" || category === \"No\" || category === \"Nl\" || category === \"Lu\" || category === \"Ll\" || category === \"Lt\" || category === \"Lm\" || category === \"Lo\" || category === \"Me\" || category === \"Mc\";\n}\nfunction $43d7963e56408b24$export$e33ad6871e762338(codePoint) {\n    const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n    return category === \"Mn\" || category === \"Me\" || category === \"Mc\";\n}\nvar // Backwards compatibility.\n$43d7963e56408b24$export$2e2bcd8739ae039 = {\n    getCategory: $43d7963e56408b24$export$410364bbb673ddbc,\n    getCombiningClass: $43d7963e56408b24$export$c03b919c6651ed55,\n    getScript: $43d7963e56408b24$export$941569448d136665,\n    getEastAsianWidth: $43d7963e56408b24$export$92f6187db8ca6d26,\n    getNumericValue: $43d7963e56408b24$export$7d1258ebb7625a0d,\n    isAlphabetic: $43d7963e56408b24$export$52c8ea63abd07594,\n    isDigit: $43d7963e56408b24$export$727d9dbc4fbb948f,\n    isPunctuation: $43d7963e56408b24$export$a5b49f4dc6a07d2c,\n    isLowerCase: $43d7963e56408b24$export$7b6804e8df61fcf5,\n    isUpperCase: $43d7963e56408b24$export$aebd617640818cda,\n    isTitleCase: $43d7963e56408b24$export$de8b4ee23b2cf823,\n    isWhiteSpace: $43d7963e56408b24$export$3c52dd84024ae72c,\n    isBaseForm: $43d7963e56408b24$export$a11bdcffe109e74b,\n    isMark: $43d7963e56408b24$export$e33ad6871e762338\n};\n\n\n//# sourceMappingURL=main.cjs.map\n\n\n/***/ }),\n\n/***/ 3480:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"8740\",\"䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻\"],[\"8767\",\"綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬\"],[\"87a1\",\"𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋\"],[\"8840\",\"㇀\",4,\"𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ\"],[\"88a1\",\"ǜü࿿ê̄ế࿿ê̌ềêɡ⏚⏛\"],[\"8940\",\"𪎩𡅅\"],[\"8943\",\"攊\"],[\"8946\",\"丽滝鵎釟\"],[\"894c\",\"𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮\"],[\"89a1\",\"琑糼緍楆竉刧\"],[\"89ab\",\"醌碸酞肼\"],[\"89b0\",\"贋胶𠧧\"],[\"89b5\",\"肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁\"],[\"89c1\",\"溚舾甙\"],[\"89c5\",\"䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅\"],[\"8a40\",\"𧶄唥\"],[\"8a43\",\"𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓\"],[\"8a64\",\"𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕\"],[\"8a76\",\"䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯\"],[\"8aa1\",\"𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱\"],[\"8aac\",\"䠋𠆩㿺塳𢶍\"],[\"8ab2\",\"𤗈𠓼𦂗𠽌𠶖啹䂻䎺\"],[\"8abb\",\"䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃\"],[\"8ac9\",\"𪘁𠸉𢫏𢳉\"],[\"8ace\",\"𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻\"],[\"8adf\",\"𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌\"],[\"8af6\",\"𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭\"],[\"8b40\",\"𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹\"],[\"8b55\",\"𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑\"],[\"8ba1\",\"𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁\"],[\"8bde\",\"𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢\"],[\"8c40\",\"倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋\"],[\"8ca1\",\"𣏹椙橃𣱣泿\"],[\"8ca7\",\"爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚\"],[\"8cc9\",\"顨杫䉶圽\"],[\"8cce\",\"藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶\"],[\"8ce6\",\"峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻\"],[\"8d40\",\"𠮟\"],[\"8d42\",\"𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱\"],[\"8da1\",\"㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘\"],[\"8e40\",\"𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎\"],[\"8ea1\",\"繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛\"],[\"8f40\",\"蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖\"],[\"8fa1\",\"𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起\"],[\"9040\",\"趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛\"],[\"90a1\",\"𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜\"],[\"9140\",\"𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈\"],[\"91a1\",\"鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨\"],[\"9240\",\"𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘\"],[\"92a1\",\"働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃\"],[\"9340\",\"媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍\"],[\"93a1\",\"摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋\"],[\"9440\",\"銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻\"],[\"94a1\",\"㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡\"],[\"9540\",\"𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂\"],[\"95a1\",\"衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰\"],[\"9640\",\"桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸\"],[\"96a1\",\"𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉\"],[\"9740\",\"愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫\"],[\"97a1\",\"𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎\"],[\"9840\",\"𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦\"],[\"98a1\",\"咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃\"],[\"9940\",\"䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚\"],[\"99a1\",\"䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿\"],[\"9a40\",\"鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺\"],[\"9aa1\",\"黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪\"],[\"9b40\",\"𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌\"],[\"9b62\",\"𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎\"],[\"9ba1\",\"椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊\"],[\"9c40\",\"嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶\"],[\"9ca1\",\"㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏\"],[\"9d40\",\"𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁\"],[\"9da1\",\"辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢\"],[\"9e40\",\"𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺\"],[\"9ea1\",\"鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭\"],[\"9ead\",\"𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹\"],[\"9ec5\",\"㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲\"],[\"9ef5\",\"噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼\"],[\"9f40\",\"籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱\"],[\"9f4f\",\"凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰\"],[\"9fa1\",\"椬叚鰊鴂䰻陁榀傦畆𡝭駚剳\"],[\"9fae\",\"酙隁酜\"],[\"9fb2\",\"酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽\"],[\"9fc1\",\"𤤙盖鮝个𠳔莾衂\"],[\"9fc9\",\"届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳\"],[\"9fdb\",\"歒酼龥鮗頮颴骺麨麄煺笔\"],[\"9fe7\",\"毺蠘罸\"],[\"9feb\",\"嘠𪙊蹷齓\"],[\"9ff0\",\"跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇\"],[\"a040\",\"𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷\"],[\"a055\",\"𡠻𦸅\"],[\"a058\",\"詾𢔛\"],[\"a05b\",\"惽癧髗鵄鍮鮏蟵\"],[\"a063\",\"蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽\"],[\"a073\",\"坟慯抦戹拎㩜懢厪𣏵捤栂㗒\"],[\"a0a1\",\"嵗𨯂迚𨸹\"],[\"a0a6\",\"僙𡵆礆匲阸𠼻䁥\"],[\"a0ae\",\"矾\"],[\"a0b0\",\"糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦\"],[\"a0d4\",\"覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷\"],[\"a0e2\",\"罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫\"],[\"a3c0\",\"␀\",31,\"␡\"],[\"c6a1\",\"①\",9,\"⑴\",9,\"ⅰ\",9,\"丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー［］✽ぁ\",23],[\"c740\",\"す\",58,\"ァアィイ\"],[\"c7a1\",\"ゥ\",81,\"А\",5,\"ЁЖ\",4],[\"c840\",\"Л\",26,\"ёж\",25,\"⇧↸↹㇏𠃌乚𠂊刂䒑\"],[\"c8a1\",\"龰冈龱𧘇\"],[\"c8cd\",\"￢￤＇＂㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣\"],[\"c8f5\",\"ʃɐɛɔɵœøŋʊɪ\"],[\"f9fe\",\"￭\"],[\"fa40\",\"𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸\"],[\"faa1\",\"鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍\"],[\"fb40\",\"𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙\"],[\"fba1\",\"𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂\"],[\"fc40\",\"廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷\"],[\"fca1\",\"𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝\"],[\"fd40\",\"𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀\"],[\"fda1\",\"𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎\"],[\"fe40\",\"鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌\"],[\"fea1\",\"𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔\"]]');\n\n/***/ }),\n\n/***/ 3336:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",127,\"€\"],[\"8140\",\"丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪\",5,\"乲乴\",9,\"乿\",6,\"亇亊\"],[\"8180\",\"亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂\",6,\"伋伌伒\",4,\"伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾\",4,\"佄佅佇\",5,\"佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢\"],[\"8240\",\"侤侫侭侰\",4,\"侶\",8,\"俀俁係俆俇俈俉俋俌俍俒\",4,\"俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿\",11],[\"8280\",\"個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯\",10,\"倻倽倿偀偁偂偄偅偆偉偊偋偍偐\",4,\"偖偗偘偙偛偝\",7,\"偦\",5,\"偭\",8,\"偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎\",20,\"傤傦傪傫傭\",4,\"傳\",6,\"傼\"],[\"8340\",\"傽\",17,\"僐\",5,\"僗僘僙僛\",10,\"僨僩僪僫僯僰僱僲僴僶\",4,\"僼\",9,\"儈\"],[\"8380\",\"儉儊儌\",5,\"儓\",13,\"儢\",28,\"兂兇兊兌兎兏児兒兓兗兘兙兛兝\",4,\"兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦\",4,\"冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒\",5],[\"8440\",\"凘凙凚凜凞凟凢凣凥\",5,\"凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄\",5,\"剋剎剏剒剓剕剗剘\"],[\"8480\",\"剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳\",9,\"剾劀劃\",4,\"劉\",6,\"劑劒劔\",6,\"劜劤劥劦劧劮劯劰労\",9,\"勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務\",5,\"勠勡勢勣勥\",10,\"勱\",7,\"勻勼勽匁匂匃匄匇匉匊匋匌匎\"],[\"8540\",\"匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯\",9,\"匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏\"],[\"8580\",\"厐\",4,\"厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯\",6,\"厷厸厹厺厼厽厾叀參\",4,\"収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝\",4,\"呣呥呧呩\",7,\"呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡\"],[\"8640\",\"咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠\",4,\"哫哬哯哰哱哴\",5,\"哻哾唀唂唃唄唅唈唊\",4,\"唒唓唕\",5,\"唜唝唞唟唡唥唦\"],[\"8680\",\"唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋\",4,\"啑啒啓啔啗\",4,\"啝啞啟啠啢啣啨啩啫啯\",5,\"啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠\",6,\"喨\",8,\"喲喴営喸喺喼喿\",4,\"嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗\",4,\"嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸\",4,\"嗿嘂嘃嘄嘅\"],[\"8740\",\"嘆嘇嘊嘋嘍嘐\",7,\"嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀\",11,\"噏\",4,\"噕噖噚噛噝\",4],[\"8780\",\"噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽\",7,\"嚇\",6,\"嚐嚑嚒嚔\",14,\"嚤\",10,\"嚰\",6,\"嚸嚹嚺嚻嚽\",12,\"囋\",8,\"囕囖囘囙囜団囥\",5,\"囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國\",6],[\"8840\",\"園\",9,\"圝圞圠圡圢圤圥圦圧圫圱圲圴\",4,\"圼圽圿坁坃坄坅坆坈坉坋坒\",4,\"坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀\"],[\"8880\",\"垁垇垈垉垊垍\",4,\"垔\",6,\"垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹\",8,\"埄\",6,\"埌埍埐埑埓埖埗埛埜埞埡埢埣埥\",7,\"埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥\",4,\"堫\",4,\"報堲堳場堶\",7],[\"8940\",\"堾\",5,\"塅\",6,\"塎塏塐塒塓塕塖塗塙\",4,\"塟\",5,\"塦\",4,\"塭\",16,\"塿墂墄墆墇墈墊墋墌\"],[\"8980\",\"墍\",4,\"墔\",4,\"墛墜墝墠\",7,\"墪\",17,\"墽墾墿壀壂壃壄壆\",10,\"壒壓壔壖\",13,\"壥\",5,\"壭壯壱売壴壵壷壸壺\",7,\"夃夅夆夈\",4,\"夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻\"],[\"8a40\",\"夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛\",4,\"奡奣奤奦\",12,\"奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦\"],[\"8a80\",\"妧妬妭妰妱妳\",5,\"妺妼妽妿\",6,\"姇姈姉姌姍姎姏姕姖姙姛姞\",4,\"姤姦姧姩姪姫姭\",11,\"姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪\",6,\"娳娵娷\",4,\"娽娾娿婁\",4,\"婇婈婋\",9,\"婖婗婘婙婛\",5],[\"8b40\",\"婡婣婤婥婦婨婩婫\",8,\"婸婹婻婼婽婾媀\",17,\"媓\",6,\"媜\",13,\"媫媬\"],[\"8b80\",\"媭\",4,\"媴媶媷媹\",4,\"媿嫀嫃\",5,\"嫊嫋嫍\",4,\"嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬\",4,\"嫲\",22,\"嬊\",11,\"嬘\",25,\"嬳嬵嬶嬸\",7,\"孁\",6],[\"8c40\",\"孈\",7,\"孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏\"],[\"8c80\",\"寑寔\",8,\"寠寢寣實寧審\",4,\"寯寱\",6,\"寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧\",6,\"屰屲\",6,\"屻屼屽屾岀岃\",4,\"岉岊岋岎岏岒岓岕岝\",4,\"岤\",4],[\"8d40\",\"岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅\",5,\"峌\",5,\"峓\",5,\"峚\",6,\"峢峣峧峩峫峬峮峯峱\",9,\"峼\",4],[\"8d80\",\"崁崄崅崈\",5,\"崏\",4,\"崕崗崘崙崚崜崝崟\",4,\"崥崨崪崫崬崯\",4,\"崵\",7,\"崿\",7,\"嵈嵉嵍\",10,\"嵙嵚嵜嵞\",10,\"嵪嵭嵮嵰嵱嵲嵳嵵\",12,\"嶃\",21,\"嶚嶛嶜嶞嶟嶠\"],[\"8e40\",\"嶡\",21,\"嶸\",12,\"巆\",6,\"巎\",12,\"巜巟巠巣巤巪巬巭\"],[\"8e80\",\"巰巵巶巸\",4,\"巿帀帄帇帉帊帋帍帎帒帓帗帞\",7,\"帨\",4,\"帯帰帲\",4,\"帹帺帾帿幀幁幃幆\",5,\"幍\",6,\"幖\",4,\"幜幝幟幠幣\",14,\"幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨\",4,\"庮\",4,\"庴庺庻庼庽庿\",6],[\"8f40\",\"廆廇廈廋\",5,\"廔廕廗廘廙廚廜\",11,\"廩廫\",8,\"廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤\"],[\"8f80\",\"弨弫弬弮弰弲\",6,\"弻弽弾弿彁\",14,\"彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢\",5,\"復徫徬徯\",5,\"徶徸徹徺徻徾\",4,\"忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇\"],[\"9040\",\"怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰\",4,\"怶\",4,\"怽怾恀恄\",6,\"恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀\"],[\"9080\",\"悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽\",7,\"惇惈惉惌\",4,\"惒惓惔惖惗惙惛惞惡\",4,\"惪惱惲惵惷惸惻\",4,\"愂愃愄愅愇愊愋愌愐\",4,\"愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬\",18,\"慀\",6],[\"9140\",\"慇慉態慍慏慐慒慓慔慖\",6,\"慞慟慠慡慣慤慥慦慩\",6,\"慱慲慳慴慶慸\",18,\"憌憍憏\",4,\"憕\"],[\"9180\",\"憖\",6,\"憞\",8,\"憪憫憭\",9,\"憸\",5,\"憿懀懁懃\",4,\"應懌\",4,\"懓懕\",16,\"懧\",13,\"懶\",8,\"戀\",5,\"戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸\",4,\"扂扄扅扆扊\"],[\"9240\",\"扏扐払扖扗扙扚扜\",6,\"扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋\",5,\"抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁\"],[\"9280\",\"拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳\",5,\"挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖\",7,\"捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙\",6,\"採掤掦掫掯掱掲掵掶掹掻掽掿揀\"],[\"9340\",\"揁揂揃揅揇揈揊揋揌揑揓揔揕揗\",6,\"揟揢揤\",4,\"揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆\",4,\"損搎搑搒搕\",5,\"搝搟搢搣搤\"],[\"9380\",\"搥搧搨搩搫搮\",5,\"搵\",4,\"搻搼搾摀摂摃摉摋\",6,\"摓摕摖摗摙\",4,\"摟\",7,\"摨摪摫摬摮\",9,\"摻\",6,\"撃撆撈\",8,\"撓撔撗撘撚撛撜撝撟\",4,\"撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆\",6,\"擏擑擓擔擕擖擙據\"],[\"9440\",\"擛擜擝擟擠擡擣擥擧\",24,\"攁\",7,\"攊\",7,\"攓\",4,\"攙\",8],[\"9480\",\"攢攣攤攦\",4,\"攬攭攰攱攲攳攷攺攼攽敀\",4,\"敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數\",14,\"斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱\",7,\"斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘\",7,\"旡旣旤旪旫\"],[\"9540\",\"旲旳旴旵旸旹旻\",4,\"昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷\",4,\"昽昿晀時晄\",6,\"晍晎晐晑晘\"],[\"9580\",\"晙晛晜晝晞晠晢晣晥晧晩\",4,\"晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘\",4,\"暞\",8,\"暩\",4,\"暯\",4,\"暵暶暷暸暺暻暼暽暿\",25,\"曚曞\",7,\"曧曨曪\",5,\"曱曵曶書曺曻曽朁朂會\"],[\"9640\",\"朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠\",5,\"朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗\",4,\"杝杢杣杤杦杧杫杬杮東杴杶\"],[\"9680\",\"杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹\",7,\"柂柅\",9,\"柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵\",7,\"柾栁栂栃栄栆栍栐栒栔栕栘\",4,\"栞栟栠栢\",6,\"栫\",6,\"栴栵栶栺栻栿桇桋桍桏桒桖\",5],[\"9740\",\"桜桝桞桟桪桬\",7,\"桵桸\",8,\"梂梄梇\",7,\"梐梑梒梔梕梖梘\",9,\"梣梤梥梩梪梫梬梮梱梲梴梶梷梸\"],[\"9780\",\"梹\",6,\"棁棃\",5,\"棊棌棎棏棐棑棓棔棖棗棙棛\",4,\"棡棢棤\",9,\"棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆\",4,\"椌椏椑椓\",11,\"椡椢椣椥\",7,\"椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃\",16,\"楕楖楘楙楛楜楟\"],[\"9840\",\"楡楢楤楥楧楨楩楪楬業楯楰楲\",4,\"楺楻楽楾楿榁榃榅榊榋榌榎\",5,\"榖榗榙榚榝\",9,\"榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽\"],[\"9880\",\"榾榿槀槂\",7,\"構槍槏槑槒槓槕\",5,\"槜槝槞槡\",11,\"槮槯槰槱槳\",9,\"槾樀\",9,\"樋\",11,\"標\",5,\"樠樢\",5,\"権樫樬樭樮樰樲樳樴樶\",6,\"樿\",4,\"橅橆橈\",7,\"橑\",6,\"橚\"],[\"9940\",\"橜\",4,\"橢橣橤橦\",10,\"橲\",6,\"橺橻橽橾橿檁檂檃檅\",8,\"檏檒\",4,\"檘\",7,\"檡\",5],[\"9980\",\"檧檨檪檭\",114,\"欥欦欨\",6],[\"9a40\",\"欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍\",11,\"歚\",7,\"歨歩歫\",13,\"歺歽歾歿殀殅殈\"],[\"9a80\",\"殌殎殏殐殑殔殕殗殘殙殜\",4,\"殢\",7,\"殫\",7,\"殶殸\",6,\"毀毃毄毆\",4,\"毌毎毐毑毘毚毜\",4,\"毢\",7,\"毬毭毮毰毱毲毴毶毷毸毺毻毼毾\",6,\"氈\",4,\"氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋\",4,\"汑汒汓汖汘\"],[\"9b40\",\"汙汚汢汣汥汦汧汫\",4,\"汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘\"],[\"9b80\",\"泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟\",5,\"洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽\",4,\"涃涄涆涇涊涋涍涏涐涒涖\",4,\"涜涢涥涬涭涰涱涳涴涶涷涹\",5,\"淁淂淃淈淉淊\"],[\"9c40\",\"淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽\",7,\"渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵\"],[\"9c80\",\"渶渷渹渻\",7,\"湅\",7,\"湏湐湑湒湕湗湙湚湜湝湞湠\",10,\"湬湭湯\",14,\"満溁溂溄溇溈溊\",4,\"溑\",6,\"溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪\",5],[\"9d40\",\"滰滱滲滳滵滶滷滸滺\",7,\"漃漄漅漇漈漊\",4,\"漐漑漒漖\",9,\"漡漢漣漥漦漧漨漬漮漰漲漴漵漷\",6,\"漿潀潁潂\"],[\"9d80\",\"潃潄潅潈潉潊潌潎\",9,\"潙潚潛潝潟潠潡潣潤潥潧\",5,\"潯潰潱潳潵潶潷潹潻潽\",6,\"澅澆澇澊澋澏\",12,\"澝澞澟澠澢\",4,\"澨\",10,\"澴澵澷澸澺\",5,\"濁濃\",5,\"濊\",6,\"濓\",10,\"濟濢濣濤濥\"],[\"9e40\",\"濦\",7,\"濰\",32,\"瀒\",7,\"瀜\",6,\"瀤\",6],[\"9e80\",\"瀫\",9,\"瀶瀷瀸瀺\",17,\"灍灎灐\",13,\"灟\",11,\"灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞\",12,\"炰炲炴炵炶為炾炿烄烅烆烇烉烋\",12,\"烚\"],[\"9f40\",\"烜烝烞烠烡烢烣烥烪烮烰\",6,\"烸烺烻烼烾\",10,\"焋\",4,\"焑焒焔焗焛\",10,\"焧\",7,\"焲焳焴\"],[\"9f80\",\"焵焷\",13,\"煆煇煈煉煋煍煏\",12,\"煝煟\",4,\"煥煩\",4,\"煯煰煱煴煵煶煷煹煻煼煾\",5,\"熅\",4,\"熋熌熍熎熐熑熒熓熕熖熗熚\",4,\"熡\",6,\"熩熪熫熭\",5,\"熴熶熷熸熺\",8,\"燄\",9,\"燏\",4],[\"a040\",\"燖\",9,\"燡燢燣燤燦燨\",5,\"燯\",9,\"燺\",11,\"爇\",19],[\"a080\",\"爛爜爞\",9,\"爩爫爭爮爯爲爳爴爺爼爾牀\",6,\"牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅\",4,\"犌犎犐犑犓\",11,\"犠\",11,\"犮犱犲犳犵犺\",6,\"狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛\"],[\"a1a1\",\"　、。·ˉˇ¨〃々—～‖…‘’“”〔〕〈\",7,\"〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃＄¤￠￡‰§№☆★○●◎◇◆□■△▲※→←↑↓〓\"],[\"a2a1\",\"ⅰ\",9],[\"a2b1\",\"⒈\",19,\"⑴\",19,\"①\",9],[\"a2e5\",\"㈠\",9],[\"a2f1\",\"Ⅰ\",11],[\"a3a1\",\"！＂＃￥％\",88,\"￣\"],[\"a4a1\",\"ぁ\",82],[\"a5a1\",\"ァ\",85],[\"a6a1\",\"Α\",16,\"Σ\",6],[\"a6c1\",\"α\",16,\"σ\",6],[\"a6e0\",\"︵︶︹︺︿﹀︽︾﹁﹂﹃﹄\"],[\"a6ee\",\"︻︼︷︸︱\"],[\"a6f4\",\"︳︴\"],[\"a7a1\",\"А\",5,\"ЁЖ\",25],[\"a7d1\",\"а\",5,\"ёж\",25],[\"a840\",\"ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═\",35,\"▁\",6],[\"a880\",\"█\",7,\"▓▔▕▼▽◢◣◤◥☉⊕〒〝〞\"],[\"a8a1\",\"āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ\"],[\"a8bd\",\"ńň\"],[\"a8c0\",\"ɡ\"],[\"a8c5\",\"ㄅ\",36],[\"a940\",\"〡\",8,\"㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰￢￤\"],[\"a959\",\"℡㈱\"],[\"a95c\",\"‐\"],[\"a960\",\"ー゛゜ヽヾ〆ゝゞ﹉\",9,\"﹔﹕﹖﹗﹙\",8],[\"a980\",\"﹢\",4,\"﹨﹩﹪﹫\"],[\"a996\",\"〇\"],[\"a9a4\",\"─\",75],[\"aa40\",\"狜狝狟狢\",5,\"狪狫狵狶狹狽狾狿猀猂猄\",5,\"猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀\",8],[\"aa80\",\"獉獊獋獌獎獏獑獓獔獕獖獘\",7,\"獡\",10,\"獮獰獱\"],[\"ab40\",\"獲\",11,\"獿\",4,\"玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣\",5,\"玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃\",4],[\"ab80\",\"珋珌珎珒\",6,\"珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳\",4],[\"ac40\",\"珸\",10,\"琄琇琈琋琌琍琎琑\",8,\"琜\",5,\"琣琤琧琩琫琭琯琱琲琷\",4,\"琽琾琿瑀瑂\",11],[\"ac80\",\"瑎\",6,\"瑖瑘瑝瑠\",12,\"瑮瑯瑱\",4,\"瑸瑹瑺\"],[\"ad40\",\"瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑\",10,\"璝璟\",7,\"璪\",15,\"璻\",12],[\"ad80\",\"瓈\",9,\"瓓\",8,\"瓝瓟瓡瓥瓧\",6,\"瓰瓱瓲\"],[\"ae40\",\"瓳瓵瓸\",6,\"甀甁甂甃甅\",7,\"甎甐甒甔甕甖甗甛甝甞甠\",4,\"甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘\"],[\"ae80\",\"畝\",7,\"畧畨畩畫\",6,\"畳畵當畷畺\",4,\"疀疁疂疄疅疇\"],[\"af40\",\"疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦\",4,\"疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇\"],[\"af80\",\"瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄\"],[\"b040\",\"癅\",6,\"癎\",5,\"癕癗\",4,\"癝癟癠癡癢癤\",6,\"癬癭癮癰\",7,\"癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛\"],[\"b080\",\"皜\",7,\"皥\",8,\"皯皰皳皵\",9,\"盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥\"],[\"b140\",\"盄盇盉盋盌盓盕盙盚盜盝盞盠\",4,\"盦\",7,\"盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎\",10,\"眛眜眝眞眡眣眤眥眧眪眫\"],[\"b180\",\"眬眮眰\",4,\"眹眻眽眾眿睂睄睅睆睈\",7,\"睒\",7,\"睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳\"],[\"b240\",\"睝睞睟睠睤睧睩睪睭\",11,\"睺睻睼瞁瞂瞃瞆\",5,\"瞏瞐瞓\",11,\"瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶\",4],[\"b280\",\"瞼瞾矀\",12,\"矎\",8,\"矘矙矚矝\",4,\"矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖\"],[\"b340\",\"矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃\",5,\"砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚\"],[\"b380\",\"硛硜硞\",11,\"硯\",7,\"硸硹硺硻硽\",6,\"场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚\"],[\"b440\",\"碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨\",7,\"碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚\",9],[\"b480\",\"磤磥磦磧磩磪磫磭\",4,\"磳磵磶磸磹磻\",5,\"礂礃礄礆\",6,\"础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮\"],[\"b540\",\"礍\",5,\"礔\",9,\"礟\",4,\"礥\",14,\"礵\",4,\"礽礿祂祃祄祅祇祊\",8,\"祔祕祘祙祡祣\"],[\"b580\",\"祤祦祩祪祫祬祮祰\",6,\"祹祻\",4,\"禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠\"],[\"b640\",\"禓\",6,\"禛\",11,\"禨\",10,\"禴\",4,\"禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙\",5,\"秠秡秢秥秨秪\"],[\"b680\",\"秬秮秱\",6,\"秹秺秼秾秿稁稄稅稇稈稉稊稌稏\",4,\"稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二\"],[\"b740\",\"稝稟稡稢稤\",14,\"稴稵稶稸稺稾穀\",5,\"穇\",9,\"穒\",4,\"穘\",16],[\"b780\",\"穩\",6,\"穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服\"],[\"b840\",\"窣窤窧窩窪窫窮\",4,\"窴\",10,\"竀\",10,\"竌\",9,\"竗竘竚竛竜竝竡竢竤竧\",5,\"竮竰竱竲竳\"],[\"b880\",\"竴\",4,\"竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹\"],[\"b940\",\"笯笰笲笴笵笶笷笹笻笽笿\",5,\"筆筈筊筍筎筓筕筗筙筜筞筟筡筣\",10,\"筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆\",6,\"箎箏\"],[\"b980\",\"箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹\",7,\"篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈\"],[\"ba40\",\"篅篈築篊篋篍篎篏篐篒篔\",4,\"篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲\",4,\"篸篹篺篻篽篿\",7,\"簈簉簊簍簎簐\",5,\"簗簘簙\"],[\"ba80\",\"簚\",4,\"簠\",5,\"簨簩簫\",12,\"簹\",5,\"籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖\"],[\"bb40\",\"籃\",9,\"籎\",36,\"籵\",5,\"籾\",9],[\"bb80\",\"粈粊\",6,\"粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴\",4,\"粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕\"],[\"bc40\",\"粿糀糂糃糄糆糉糋糎\",6,\"糘糚糛糝糞糡\",6,\"糩\",5,\"糰\",7,\"糹糺糼\",13,\"紋\",5],[\"bc80\",\"紑\",14,\"紡紣紤紥紦紨紩紪紬紭紮細\",6,\"肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件\"],[\"bd40\",\"紷\",54,\"絯\",7],[\"bd80\",\"絸\",32,\"健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸\"],[\"be40\",\"継\",12,\"綧\",6,\"綯\",42],[\"be80\",\"線\",32,\"尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻\"],[\"bf40\",\"緻\",62],[\"bf80\",\"縺縼\",4,\"繂\",4,\"繈\",21,\"俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀\"],[\"c040\",\"繞\",35,\"纃\",23,\"纜纝纞\"],[\"c080\",\"纮纴纻纼绖绤绬绹缊缐缞缷缹缻\",6,\"罃罆\",9,\"罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐\"],[\"c140\",\"罖罙罛罜罝罞罠罣\",4,\"罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂\",7,\"羋羍羏\",4,\"羕\",4,\"羛羜羠羢羣羥羦羨\",6,\"羱\"],[\"c180\",\"羳\",4,\"羺羻羾翀翂翃翄翆翇翈翉翋翍翏\",4,\"翖翗翙\",5,\"翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿\"],[\"c240\",\"翤翧翨翪翫翬翭翯翲翴\",6,\"翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫\",5,\"耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗\"],[\"c280\",\"聙聛\",13,\"聫\",5,\"聲\",11,\"隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫\"],[\"c340\",\"聾肁肂肅肈肊肍\",5,\"肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇\",4,\"胏\",6,\"胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋\"],[\"c380\",\"脌脕脗脙脛脜脝脟\",12,\"脭脮脰脳脴脵脷脹\",4,\"脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸\"],[\"c440\",\"腀\",5,\"腇腉腍腎腏腒腖腗腘腛\",4,\"腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃\",4,\"膉膋膌膍膎膐膒\",5,\"膙膚膞\",4,\"膤膥\"],[\"c480\",\"膧膩膫\",7,\"膴\",5,\"膼膽膾膿臄臅臇臈臉臋臍\",6,\"摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁\"],[\"c540\",\"臔\",14,\"臤臥臦臨臩臫臮\",4,\"臵\",5,\"臽臿舃與\",4,\"舎舏舑舓舕\",5,\"舝舠舤舥舦舧舩舮舲舺舼舽舿\"],[\"c580\",\"艀艁艂艃艅艆艈艊艌艍艎艐\",7,\"艙艛艜艝艞艠\",7,\"艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗\"],[\"c640\",\"艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸\"],[\"c680\",\"苺苼\",4,\"茊茋茍茐茒茓茖茘茙茝\",9,\"茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐\"],[\"c740\",\"茾茿荁荂荄荅荈荊\",4,\"荓荕\",4,\"荝荢荰\",6,\"荹荺荾\",6,\"莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡\",6,\"莬莭莮\"],[\"c780\",\"莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠\"],[\"c840\",\"菮華菳\",4,\"菺菻菼菾菿萀萂萅萇萈萉萊萐萒\",5,\"萙萚萛萞\",5,\"萩\",7,\"萲\",5,\"萹萺萻萾\",7,\"葇葈葉\"],[\"c880\",\"葊\",6,\"葒\",4,\"葘葝葞葟葠葢葤\",4,\"葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁\"],[\"c940\",\"葽\",4,\"蒃蒄蒅蒆蒊蒍蒏\",7,\"蒘蒚蒛蒝蒞蒟蒠蒢\",12,\"蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗\"],[\"c980\",\"蓘\",4,\"蓞蓡蓢蓤蓧\",4,\"蓭蓮蓯蓱\",10,\"蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳\"],[\"ca40\",\"蔃\",8,\"蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢\",8,\"蔭\",9,\"蔾\",4,\"蕄蕅蕆蕇蕋\",10],[\"ca80\",\"蕗蕘蕚蕛蕜蕝蕟\",4,\"蕥蕦蕧蕩\",8,\"蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱\"],[\"cb40\",\"薂薃薆薈\",6,\"薐\",10,\"薝\",6,\"薥薦薧薩薫薬薭薱\",5,\"薸薺\",6,\"藂\",6,\"藊\",4,\"藑藒\"],[\"cb80\",\"藔藖\",5,\"藝\",6,\"藥藦藧藨藪\",14,\"恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔\"],[\"cc40\",\"藹藺藼藽藾蘀\",4,\"蘆\",10,\"蘒蘓蘔蘕蘗\",15,\"蘨蘪\",13,\"蘹蘺蘻蘽蘾蘿虀\"],[\"cc80\",\"虁\",11,\"虒虓處\",4,\"虛虜虝號虠虡虣\",7,\"獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃\"],[\"cd40\",\"虭虯虰虲\",6,\"蚃\",6,\"蚎\",4,\"蚔蚖\",5,\"蚞\",4,\"蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻\",4,\"蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜\"],[\"cd80\",\"蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威\"],[\"ce40\",\"蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀\",6,\"蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚\",5,\"蝡蝢蝦\",7,\"蝯蝱蝲蝳蝵\"],[\"ce80\",\"蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎\",4,\"螔螕螖螘\",6,\"螠\",4,\"巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺\"],[\"cf40\",\"螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁\",4,\"蟇蟈蟉蟌\",4,\"蟔\",6,\"蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯\",9],[\"cf80\",\"蟺蟻蟼蟽蟿蠀蠁蠂蠄\",5,\"蠋\",7,\"蠔蠗蠘蠙蠚蠜\",4,\"蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓\"],[\"d040\",\"蠤\",13,\"蠳\",5,\"蠺蠻蠽蠾蠿衁衂衃衆\",5,\"衎\",5,\"衕衖衘衚\",6,\"衦衧衪衭衯衱衳衴衵衶衸衹衺\"],[\"d080\",\"衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗\",4,\"袝\",4,\"袣袥\",5,\"小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄\"],[\"d140\",\"袬袮袯袰袲\",4,\"袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚\",4,\"裠裡裦裧裩\",6,\"裲裵裶裷裺裻製裿褀褁褃\",5],[\"d180\",\"褉褋\",4,\"褑褔\",4,\"褜\",4,\"褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶\"],[\"d240\",\"褸\",8,\"襂襃襅\",24,\"襠\",5,\"襧\",19,\"襼\"],[\"d280\",\"襽襾覀覂覄覅覇\",26,\"摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐\"],[\"d340\",\"覢\",30,\"觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴\",6],[\"d380\",\"觻\",4,\"訁\",5,\"計\",21,\"印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉\"],[\"d440\",\"訞\",31,\"訿\",8,\"詉\",21],[\"d480\",\"詟\",25,\"詺\",6,\"浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧\"],[\"d540\",\"誁\",7,\"誋\",7,\"誔\",46],[\"d580\",\"諃\",32,\"铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政\"],[\"d640\",\"諤\",34,\"謈\",27],[\"d680\",\"謤謥謧\",30,\"帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑\"],[\"d740\",\"譆\",31,\"譧\",4,\"譭\",25],[\"d780\",\"讇\",24,\"讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座\"],[\"d840\",\"谸\",8,\"豂豃豄豅豈豊豋豍\",7,\"豖豗豘豙豛\",5,\"豣\",6,\"豬\",6,\"豴豵豶豷豻\",6,\"貃貄貆貇\"],[\"d880\",\"貈貋貍\",6,\"貕貖貗貙\",20,\"亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝\"],[\"d940\",\"貮\",62],[\"d980\",\"賭\",32,\"佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼\"],[\"da40\",\"贎\",14,\"贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸\",8,\"趂趃趆趇趈趉趌\",4,\"趒趓趕\",9,\"趠趡\"],[\"da80\",\"趢趤\",12,\"趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺\"],[\"db40\",\"跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾\",6,\"踆踇踈踋踍踎踐踑踒踓踕\",7,\"踠踡踤\",4,\"踫踭踰踲踳踴踶踷踸踻踼踾\"],[\"db80\",\"踿蹃蹅蹆蹌\",4,\"蹓\",5,\"蹚\",11,\"蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝\"],[\"dc40\",\"蹳蹵蹷\",4,\"蹽蹾躀躂躃躄躆躈\",6,\"躑躒躓躕\",6,\"躝躟\",11,\"躭躮躰躱躳\",6,\"躻\",7],[\"dc80\",\"軃\",10,\"軏\",21,\"堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥\"],[\"dd40\",\"軥\",62],[\"dd80\",\"輤\",32,\"荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺\"],[\"de40\",\"轅\",32,\"轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆\"],[\"de80\",\"迉\",4,\"迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖\"],[\"df40\",\"這逜連逤逥逧\",5,\"逰\",4,\"逷逹逺逽逿遀遃遅遆遈\",4,\"過達違遖遙遚遜\",5,\"遤遦遧適遪遫遬遯\",4,\"遶\",6,\"遾邁\"],[\"df80\",\"還邅邆邇邉邊邌\",4,\"邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼\"],[\"e040\",\"郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅\",19,\"鄚鄛鄜\"],[\"e080\",\"鄝鄟鄠鄡鄤\",10,\"鄰鄲\",6,\"鄺\",8,\"酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼\"],[\"e140\",\"酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀\",4,\"醆醈醊醎醏醓\",6,\"醜\",5,\"醤\",5,\"醫醬醰醱醲醳醶醷醸醹醻\"],[\"e180\",\"醼\",10,\"釈釋釐釒\",9,\"針\",8,\"帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺\"],[\"e240\",\"釦\",62],[\"e280\",\"鈥\",32,\"狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧\",5,\"饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂\"],[\"e340\",\"鉆\",45,\"鉵\",16],[\"e380\",\"銆\",7,\"銏\",24,\"恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾\"],[\"e440\",\"銨\",5,\"銯\",24,\"鋉\",31],[\"e480\",\"鋩\",32,\"洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑\"],[\"e540\",\"錊\",51,\"錿\",10],[\"e580\",\"鍊\",31,\"鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣\"],[\"e640\",\"鍬\",34,\"鎐\",27],[\"e680\",\"鎬\",29,\"鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩\"],[\"e740\",\"鏎\",7,\"鏗\",54],[\"e780\",\"鐎\",32,\"纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡\",6,\"缪缫缬缭缯\",4,\"缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬\"],[\"e840\",\"鐯\",14,\"鐿\",43,\"鑬鑭鑮鑯\"],[\"e880\",\"鑰\",20,\"钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹\"],[\"e940\",\"锧锳锽镃镈镋镕镚镠镮镴镵長\",7,\"門\",42],[\"e980\",\"閫\",32,\"椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋\"],[\"ea40\",\"闌\",27,\"闬闿阇阓阘阛阞阠阣\",6,\"阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗\"],[\"ea80\",\"陘陙陚陜陝陞陠陣陥陦陫陭\",4,\"陳陸\",12,\"隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰\"],[\"eb40\",\"隌階隑隒隓隕隖隚際隝\",9,\"隨\",7,\"隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖\",9,\"雡\",6,\"雫\"],[\"eb80\",\"雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗\",4,\"霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻\"],[\"ec40\",\"霡\",8,\"霫霬霮霯霱霳\",4,\"霺霻霼霽霿\",18,\"靔靕靗靘靚靜靝靟靣靤靦靧靨靪\",7],[\"ec80\",\"靲靵靷\",4,\"靽\",7,\"鞆\",4,\"鞌鞎鞏鞐鞓鞕鞖鞗鞙\",4,\"臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐\"],[\"ed40\",\"鞞鞟鞡鞢鞤\",6,\"鞬鞮鞰鞱鞳鞵\",46],[\"ed80\",\"韤韥韨韮\",4,\"韴韷\",23,\"怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨\"],[\"ee40\",\"頏\",62],[\"ee80\",\"顎\",32,\"睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶\",4,\"钼钽钿铄铈\",6,\"铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪\"],[\"ef40\",\"顯\",5,\"颋颎颒颕颙颣風\",37,\"飏飐飔飖飗飛飜飝飠\",4],[\"ef80\",\"飥飦飩\",30,\"铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒\",4,\"锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤\",8,\"镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔\"],[\"f040\",\"餈\",4,\"餎餏餑\",28,\"餯\",26],[\"f080\",\"饊\",9,\"饖\",12,\"饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨\",4,\"鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦\",6,\"鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙\"],[\"f140\",\"馌馎馚\",10,\"馦馧馩\",47],[\"f180\",\"駙\",32,\"瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃\"],[\"f240\",\"駺\",62],[\"f280\",\"騹\",32,\"颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒\"],[\"f340\",\"驚\",17,\"驲骃骉骍骎骔骕骙骦骩\",6,\"骲骳骴骵骹骻骽骾骿髃髄髆\",4,\"髍髎髏髐髒體髕髖髗髙髚髛髜\"],[\"f380\",\"髝髞髠髢髣髤髥髧髨髩髪髬髮髰\",8,\"髺髼\",6,\"鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋\"],[\"f440\",\"鬇鬉\",5,\"鬐鬑鬒鬔\",10,\"鬠鬡鬢鬤\",10,\"鬰鬱鬳\",7,\"鬽鬾鬿魀魆魊魋魌魎魐魒魓魕\",5],[\"f480\",\"魛\",32,\"簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤\"],[\"f540\",\"魼\",62],[\"f580\",\"鮻\",32,\"酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜\"],[\"f640\",\"鯜\",62],[\"f680\",\"鰛\",32,\"觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅\",5,\"龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞\",5,\"鲥\",4,\"鲫鲭鲮鲰\",7,\"鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋\"],[\"f740\",\"鰼\",62],[\"f780\",\"鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾\",4,\"鳈鳉鳑鳒鳚鳛鳠鳡鳌\",4,\"鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄\"],[\"f840\",\"鳣\",62],[\"f880\",\"鴢\",32],[\"f940\",\"鵃\",62],[\"f980\",\"鶂\",32],[\"fa40\",\"鶣\",62],[\"fa80\",\"鷢\",32],[\"fb40\",\"鸃\",27,\"鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴\",9,\"麀\"],[\"fb80\",\"麁麃麄麅麆麉麊麌\",5,\"麔\",8,\"麞麠\",5,\"麧麨麩麪\"],[\"fc40\",\"麫\",8,\"麵麶麷麹麺麼麿\",4,\"黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰\",8,\"黺黽黿\",6],[\"fc80\",\"鼆\",4,\"鼌鼏鼑鼒鼔鼕鼖鼘鼚\",5,\"鼡鼣\",8,\"鼭鼮鼰鼱\"],[\"fd40\",\"鼲\",4,\"鼸鼺鼼鼿\",4,\"齅\",10,\"齒\",38],[\"fd80\",\"齹\",5,\"龁龂龍\",11,\"龜龝龞龡\",4,\"郎凉秊裏隣\"],[\"fe40\",\"兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩\"]]');\n\n/***/ }),\n\n/***/ 7348:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",127],[\"8141\",\"갂갃갅갆갋\",4,\"갘갞갟갡갢갣갥\",6,\"갮갲갳갴\"],[\"8161\",\"갵갶갷갺갻갽갾갿걁\",9,\"걌걎\",5,\"걕\"],[\"8181\",\"걖걗걙걚걛걝\",18,\"걲걳걵걶걹걻\",4,\"겂겇겈겍겎겏겑겒겓겕\",6,\"겞겢\",5,\"겫겭겮겱\",6,\"겺겾겿곀곂곃곅곆곇곉곊곋곍\",7,\"곖곘\",7,\"곢곣곥곦곩곫곭곮곲곴곷\",4,\"곾곿괁괂괃괅괇\",4,\"괎괐괒괓\"],[\"8241\",\"괔괕괖괗괙괚괛괝괞괟괡\",7,\"괪괫괮\",5],[\"8261\",\"괶괷괹괺괻괽\",6,\"굆굈굊\",5,\"굑굒굓굕굖굗\"],[\"8281\",\"굙\",7,\"굢굤\",7,\"굮굯굱굲굷굸굹굺굾궀궃\",4,\"궊궋궍궎궏궑\",10,\"궞\",5,\"궥\",17,\"궸\",7,\"귂귃귅귆귇귉\",6,\"귒귔\",7,\"귝귞귟귡귢귣귥\",18],[\"8341\",\"귺귻귽귾긂\",5,\"긊긌긎\",5,\"긕\",7],[\"8361\",\"긝\",18,\"긲긳긵긶긹긻긼\"],[\"8381\",\"긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗\",4,\"깞깢깣깤깦깧깪깫깭깮깯깱\",6,\"깺깾\",5,\"꺆\",5,\"꺍\",46,\"꺿껁껂껃껅\",6,\"껎껒\",5,\"껚껛껝\",8],[\"8441\",\"껦껧껩껪껬껮\",5,\"껵껶껷껹껺껻껽\",8],[\"8461\",\"꼆꼉꼊꼋꼌꼎꼏꼑\",18],[\"8481\",\"꼤\",7,\"꼮꼯꼱꼳꼵\",6,\"꼾꽀꽄꽅꽆꽇꽊\",5,\"꽑\",10,\"꽞\",5,\"꽦\",18,\"꽺\",5,\"꾁꾂꾃꾅꾆꾇꾉\",6,\"꾒꾓꾔꾖\",5,\"꾝\",26,\"꾺꾻꾽꾾\"],[\"8541\",\"꾿꿁\",5,\"꿊꿌꿏\",4,\"꿕\",6,\"꿝\",4],[\"8561\",\"꿢\",5,\"꿪\",5,\"꿲꿳꿵꿶꿷꿹\",6,\"뀂뀃\"],[\"8581\",\"뀅\",6,\"뀍뀎뀏뀑뀒뀓뀕\",6,\"뀞\",9,\"뀩\",26,\"끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞\",29,\"끾끿낁낂낃낅\",6,\"낎낐낒\",5,\"낛낝낞낣낤\"],[\"8641\",\"낥낦낧낪낰낲낶낷낹낺낻낽\",6,\"냆냊\",5,\"냒\"],[\"8661\",\"냓냕냖냗냙\",6,\"냡냢냣냤냦\",10],[\"8681\",\"냱\",22,\"넊넍넎넏넑넔넕넖넗넚넞\",4,\"넦넧넩넪넫넭\",6,\"넶넺\",5,\"녂녃녅녆녇녉\",6,\"녒녓녖녗녙녚녛녝녞녟녡\",22,\"녺녻녽녾녿놁놃\",4,\"놊놌놎놏놐놑놕놖놗놙놚놛놝\"],[\"8741\",\"놞\",9,\"놩\",15],[\"8761\",\"놹\",18,\"뇍뇎뇏뇑뇒뇓뇕\"],[\"8781\",\"뇖\",5,\"뇞뇠\",7,\"뇪뇫뇭뇮뇯뇱\",7,\"뇺뇼뇾\",5,\"눆눇눉눊눍\",6,\"눖눘눚\",5,\"눡\",18,\"눵\",6,\"눽\",26,\"뉙뉚뉛뉝뉞뉟뉡\",6,\"뉪\",4],[\"8841\",\"뉯\",4,\"뉶\",5,\"뉽\",6,\"늆늇늈늊\",4],[\"8861\",\"늏늒늓늕늖늗늛\",4,\"늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷\"],[\"8881\",\"늸\",15,\"닊닋닍닎닏닑닓\",4,\"닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉\",6,\"댒댖\",5,\"댝\",54,\"덗덙덚덝덠덡덢덣\"],[\"8941\",\"덦덨덪덬덭덯덲덳덵덶덷덹\",6,\"뎂뎆\",5,\"뎍\"],[\"8961\",\"뎎뎏뎑뎒뎓뎕\",10,\"뎢\",5,\"뎩뎪뎫뎭\"],[\"8981\",\"뎮\",21,\"돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩\",18,\"돽\",18,\"됑\",6,\"됙됚됛됝됞됟됡\",6,\"됪됬\",7,\"됵\",15],[\"8a41\",\"둅\",10,\"둒둓둕둖둗둙\",6,\"둢둤둦\"],[\"8a61\",\"둧\",4,\"둭\",18,\"뒁뒂\"],[\"8a81\",\"뒃\",4,\"뒉\",19,\"뒞\",5,\"뒥뒦뒧뒩뒪뒫뒭\",7,\"뒶뒸뒺\",5,\"듁듂듃듅듆듇듉\",6,\"듑듒듓듔듖\",5,\"듞듟듡듢듥듧\",4,\"듮듰듲\",5,\"듹\",26,\"딖딗딙딚딝\"],[\"8b41\",\"딞\",5,\"딦딫\",4,\"딲딳딵딶딷딹\",6,\"땂땆\"],[\"8b61\",\"땇땈땉땊땎땏땑땒땓땕\",6,\"땞땢\",8],[\"8b81\",\"땫\",52,\"떢떣떥떦떧떩떬떭떮떯떲떶\",4,\"떾떿뗁뗂뗃뗅\",6,\"뗎뗒\",5,\"뗙\",18,\"뗭\",18],[\"8c41\",\"똀\",15,\"똒똓똕똖똗똙\",4],[\"8c61\",\"똞\",6,\"똦\",5,\"똭\",6,\"똵\",5],[\"8c81\",\"똻\",12,\"뙉\",26,\"뙥뙦뙧뙩\",50,\"뚞뚟뚡뚢뚣뚥\",5,\"뚭뚮뚯뚰뚲\",16],[\"8d41\",\"뛃\",16,\"뛕\",8],[\"8d61\",\"뛞\",17,\"뛱뛲뛳뛵뛶뛷뛹뛺\"],[\"8d81\",\"뛻\",4,\"뜂뜃뜄뜆\",33,\"뜪뜫뜭뜮뜱\",6,\"뜺뜼\",7,\"띅띆띇띉띊띋띍\",6,\"띖\",9,\"띡띢띣띥띦띧띩\",6,\"띲띴띶\",5,\"띾띿랁랂랃랅\",6,\"랎랓랔랕랚랛랝랞\"],[\"8e41\",\"랟랡\",6,\"랪랮\",5,\"랶랷랹\",8],[\"8e61\",\"럂\",4,\"럈럊\",19],[\"8e81\",\"럞\",13,\"럮럯럱럲럳럵\",6,\"럾렂\",4,\"렊렋렍렎렏렑\",6,\"렚렜렞\",5,\"렦렧렩렪렫렭\",6,\"렶렺\",5,\"롁롂롃롅\",11,\"롒롔\",7,\"롞롟롡롢롣롥\",6,\"롮롰롲\",5,\"롹롺롻롽\",7],[\"8f41\",\"뢅\",7,\"뢎\",17],[\"8f61\",\"뢠\",7,\"뢩\",6,\"뢱뢲뢳뢵뢶뢷뢹\",4],[\"8f81\",\"뢾뢿룂룄룆\",5,\"룍룎룏룑룒룓룕\",7,\"룞룠룢\",5,\"룪룫룭룮룯룱\",6,\"룺룼룾\",5,\"뤅\",18,\"뤙\",6,\"뤡\",26,\"뤾뤿륁륂륃륅\",6,\"륍륎륐륒\",5],[\"9041\",\"륚륛륝륞륟륡\",6,\"륪륬륮\",5,\"륶륷륹륺륻륽\"],[\"9061\",\"륾\",5,\"릆릈릋릌릏\",15],[\"9081\",\"릟\",12,\"릮릯릱릲릳릵\",6,\"릾맀맂\",5,\"맊맋맍맓\",4,\"맚맜맟맠맢맦맧맩맪맫맭\",6,\"맶맻\",4,\"먂\",5,\"먉\",11,\"먖\",33,\"먺먻먽먾먿멁멃멄멅멆\"],[\"9141\",\"멇멊멌멏멐멑멒멖멗멙멚멛멝\",6,\"멦멪\",5],[\"9161\",\"멲멳멵멶멷멹\",9,\"몆몈몉몊몋몍\",5],[\"9181\",\"몓\",20,\"몪몭몮몯몱몳\",4,\"몺몼몾\",5,\"뫅뫆뫇뫉\",14,\"뫚\",33,\"뫽뫾뫿묁묂묃묅\",7,\"묎묐묒\",5,\"묙묚묛묝묞묟묡\",6],[\"9241\",\"묨묪묬\",7,\"묷묹묺묿\",4,\"뭆뭈뭊뭋뭌뭎뭑뭒\"],[\"9261\",\"뭓뭕뭖뭗뭙\",7,\"뭢뭤\",7,\"뭭\",4],[\"9281\",\"뭲\",21,\"뮉뮊뮋뮍뮎뮏뮑\",18,\"뮥뮦뮧뮩뮪뮫뮭\",6,\"뮵뮶뮸\",7,\"믁믂믃믅믆믇믉\",6,\"믑믒믔\",35,\"믺믻믽믾밁\"],[\"9341\",\"밃\",4,\"밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵\"],[\"9361\",\"밶밷밹\",6,\"뱂뱆뱇뱈뱊뱋뱎뱏뱑\",8],[\"9381\",\"뱚뱛뱜뱞\",37,\"벆벇벉벊벍벏\",4,\"벖벘벛\",4,\"벢벣벥벦벩\",6,\"벲벶\",5,\"벾벿볁볂볃볅\",7,\"볎볒볓볔볖볗볙볚볛볝\",22,\"볷볹볺볻볽\"],[\"9441\",\"볾\",5,\"봆봈봊\",5,\"봑봒봓봕\",8],[\"9461\",\"봞\",5,\"봥\",6,\"봭\",12],[\"9481\",\"봺\",5,\"뵁\",6,\"뵊뵋뵍뵎뵏뵑\",6,\"뵚\",9,\"뵥뵦뵧뵩\",22,\"붂붃붅붆붋\",4,\"붒붔붖붗붘붛붝\",6,\"붥\",10,\"붱\",6,\"붹\",24],[\"9541\",\"뷒뷓뷖뷗뷙뷚뷛뷝\",11,\"뷪\",5,\"뷱\"],[\"9561\",\"뷲뷳뷵뷶뷷뷹\",6,\"븁븂븄븆\",5,\"븎븏븑븒븓\"],[\"9581\",\"븕\",6,\"븞븠\",35,\"빆빇빉빊빋빍빏\",4,\"빖빘빜빝빞빟빢빣빥빦빧빩빫\",4,\"빲빶\",4,\"빾빿뺁뺂뺃뺅\",6,\"뺎뺒\",5,\"뺚\",13,\"뺩\",14],[\"9641\",\"뺸\",23,\"뻒뻓\"],[\"9661\",\"뻕뻖뻙\",6,\"뻡뻢뻦\",5,\"뻭\",8],[\"9681\",\"뻶\",10,\"뼂\",5,\"뼊\",13,\"뼚뼞\",33,\"뽂뽃뽅뽆뽇뽉\",6,\"뽒뽓뽔뽖\",44],[\"9741\",\"뾃\",16,\"뾕\",8],[\"9761\",\"뾞\",17,\"뾱\",7],[\"9781\",\"뾹\",11,\"뿆\",5,\"뿎뿏뿑뿒뿓뿕\",6,\"뿝뿞뿠뿢\",89,\"쀽쀾쀿\"],[\"9841\",\"쁀\",16,\"쁒\",5,\"쁙쁚쁛\"],[\"9861\",\"쁝쁞쁟쁡\",6,\"쁪\",15],[\"9881\",\"쁺\",21,\"삒삓삕삖삗삙\",6,\"삢삤삦\",5,\"삮삱삲삷\",4,\"삾샂샃샄샆샇샊샋샍샎샏샑\",6,\"샚샞\",5,\"샦샧샩샪샫샭\",6,\"샶샸샺\",5,\"섁섂섃섅섆섇섉\",6,\"섑섒섓섔섖\",5,\"섡섢섥섨섩섪섫섮\"],[\"9941\",\"섲섳섴섵섷섺섻섽섾섿셁\",6,\"셊셎\",5,\"셖셗\"],[\"9961\",\"셙셚셛셝\",6,\"셦셪\",5,\"셱셲셳셵셶셷셹셺셻\"],[\"9981\",\"셼\",8,\"솆\",5,\"솏솑솒솓솕솗\",4,\"솞솠솢솣솤솦솧솪솫솭솮솯솱\",11,\"솾\",5,\"쇅쇆쇇쇉쇊쇋쇍\",6,\"쇕쇖쇙\",6,\"쇡쇢쇣쇥쇦쇧쇩\",6,\"쇲쇴\",7,\"쇾쇿숁숂숃숅\",6,\"숎숐숒\",5,\"숚숛숝숞숡숢숣\"],[\"9a41\",\"숤숥숦숧숪숬숮숰숳숵\",16],[\"9a61\",\"쉆쉇쉉\",6,\"쉒쉓쉕쉖쉗쉙\",6,\"쉡쉢쉣쉤쉦\"],[\"9a81\",\"쉧\",4,\"쉮쉯쉱쉲쉳쉵\",6,\"쉾슀슂\",5,\"슊\",5,\"슑\",6,\"슙슚슜슞\",5,\"슦슧슩슪슫슮\",5,\"슶슸슺\",33,\"싞싟싡싢싥\",5,\"싮싰싲싳싴싵싷싺싽싾싿쌁\",6,\"쌊쌋쌎쌏\"],[\"9b41\",\"쌐쌑쌒쌖쌗쌙쌚쌛쌝\",6,\"쌦쌧쌪\",8],[\"9b61\",\"쌳\",17,\"썆\",7],[\"9b81\",\"썎\",25,\"썪썫썭썮썯썱썳\",4,\"썺썻썾\",5,\"쎅쎆쎇쎉쎊쎋쎍\",50,\"쏁\",22,\"쏚\"],[\"9c41\",\"쏛쏝쏞쏡쏣\",4,\"쏪쏫쏬쏮\",5,\"쏶쏷쏹\",5],[\"9c61\",\"쏿\",8,\"쐉\",6,\"쐑\",9],[\"9c81\",\"쐛\",8,\"쐥\",6,\"쐭쐮쐯쐱쐲쐳쐵\",6,\"쐾\",9,\"쑉\",26,\"쑦쑧쑩쑪쑫쑭\",6,\"쑶쑷쑸쑺\",5,\"쒁\",18,\"쒕\",6,\"쒝\",12],[\"9d41\",\"쒪\",13,\"쒹쒺쒻쒽\",8],[\"9d61\",\"쓆\",25],[\"9d81\",\"쓠\",8,\"쓪\",5,\"쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂\",9,\"씍씎씏씑씒씓씕\",6,\"씝\",10,\"씪씫씭씮씯씱\",6,\"씺씼씾\",5,\"앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩\",6,\"앲앶\",5,\"앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔\"],[\"9e41\",\"얖얙얚얛얝얞얟얡\",7,\"얪\",9,\"얶\"],[\"9e61\",\"얷얺얿\",4,\"엋엍엏엒엓엕엖엗엙\",6,\"엢엤엦엧\"],[\"9e81\",\"엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑\",6,\"옚옝\",6,\"옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉\",6,\"왒왖\",5,\"왞왟왡\",10,\"왭왮왰왲\",5,\"왺왻왽왾왿욁\",6,\"욊욌욎\",5,\"욖욗욙욚욛욝\",6,\"욦\"],[\"9f41\",\"욨욪\",5,\"욲욳욵욶욷욻\",4,\"웂웄웆\",5,\"웎\"],[\"9f61\",\"웏웑웒웓웕\",6,\"웞웟웢\",5,\"웪웫웭웮웯웱웲\"],[\"9f81\",\"웳\",4,\"웺웻웼웾\",5,\"윆윇윉윊윋윍\",6,\"윖윘윚\",5,\"윢윣윥윦윧윩\",6,\"윲윴윶윸윹윺윻윾윿읁읂읃읅\",4,\"읋읎읐읙읚읛읝읞읟읡\",6,\"읩읪읬\",7,\"읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛\",4,\"잢잧\",4,\"잮잯잱잲잳잵잶잷\"],[\"a041\",\"잸잹잺잻잾쟂\",5,\"쟊쟋쟍쟏쟑\",6,\"쟙쟚쟛쟜\"],[\"a061\",\"쟞\",5,\"쟥쟦쟧쟩쟪쟫쟭\",13],[\"a081\",\"쟻\",4,\"젂젃젅젆젇젉젋\",4,\"젒젔젗\",4,\"젞젟젡젢젣젥\",6,\"젮젰젲\",5,\"젹젺젻젽젾젿졁\",6,\"졊졋졎\",5,\"졕\",26,\"졲졳졵졶졷졹졻\",4,\"좂좄좈좉좊좎\",5,\"좕\",7,\"좞좠좢좣좤\"],[\"a141\",\"좥좦좧좩\",18,\"좾좿죀죁\"],[\"a161\",\"죂죃죅죆죇죉죊죋죍\",6,\"죖죘죚\",5,\"죢죣죥\"],[\"a181\",\"죦\",14,\"죶\",5,\"죾죿줁줂줃줇\",4,\"줎　、。·‥…¨〃­―∥＼∼‘’“”〔〕〈\",9,\"±×÷≠≤≥∞∴°′″℃Å￠￡￥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨￢\"],[\"a241\",\"줐줒\",5,\"줙\",18],[\"a261\",\"줭\",6,\"줵\",18],[\"a281\",\"쥈\",7,\"쥒쥓쥕쥖쥗쥙\",6,\"쥢쥤\",7,\"쥭쥮쥯⇒⇔∀∃´～ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®\"],[\"a341\",\"쥱쥲쥳쥵\",6,\"쥽\",10,\"즊즋즍즎즏\"],[\"a361\",\"즑\",6,\"즚즜즞\",16],[\"a381\",\"즯\",16,\"짂짃짅짆짉짋\",4,\"짒짔짗짘짛！\",58,\"￦］\",32,\"￣\"],[\"a441\",\"짞짟짡짣짥짦짨짩짪짫짮짲\",5,\"짺짻짽짾짿쨁쨂쨃쨄\"],[\"a461\",\"쨅쨆쨇쨊쨎\",5,\"쨕쨖쨗쨙\",12],[\"a481\",\"쨦쨧쨨쨪\",28,\"ㄱ\",93],[\"a541\",\"쩇\",4,\"쩎쩏쩑쩒쩓쩕\",6,\"쩞쩢\",5,\"쩩쩪\"],[\"a561\",\"쩫\",17,\"쩾\",5,\"쪅쪆\"],[\"a581\",\"쪇\",16,\"쪙\",14,\"ⅰ\",9],[\"a5b0\",\"Ⅰ\",9],[\"a5c1\",\"Α\",16,\"Σ\",6],[\"a5e1\",\"α\",16,\"σ\",6],[\"a641\",\"쪨\",19,\"쪾쪿쫁쫂쫃쫅\"],[\"a661\",\"쫆\",5,\"쫎쫐쫒쫔쫕쫖쫗쫚\",5,\"쫡\",6],[\"a681\",\"쫨쫩쫪쫫쫭\",6,\"쫵\",18,\"쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃\",7],[\"a741\",\"쬋\",4,\"쬑쬒쬓쬕쬖쬗쬙\",6,\"쬢\",7],[\"a761\",\"쬪\",22,\"쭂쭃쭄\"],[\"a781\",\"쭅쭆쭇쭊쭋쭍쭎쭏쭑\",6,\"쭚쭛쭜쭞\",5,\"쭥\",7,\"㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙\",9,\"㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰\",9,\"㎀\",4,\"㎺\",5,\"㎐\",4,\"Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆\"],[\"a841\",\"쭭\",10,\"쭺\",14],[\"a861\",\"쮉\",18,\"쮝\",6],[\"a881\",\"쮤\",19,\"쮹\",11,\"ÆÐªĦ\"],[\"a8a6\",\"Ĳ\"],[\"a8a8\",\"ĿŁØŒºÞŦŊ\"],[\"a8b1\",\"㉠\",27,\"ⓐ\",25,\"①\",14,\"½⅓⅔¼¾⅛⅜⅝⅞\"],[\"a941\",\"쯅\",14,\"쯕\",10],[\"a961\",\"쯠쯡쯢쯣쯥쯦쯨쯪\",18],[\"a981\",\"쯽\",14,\"찎찏찑찒찓찕\",6,\"찞찟찠찣찤æđðħıĳĸŀłøœßþŧŋŉ㈀\",27,\"⒜\",25,\"⑴\",14,\"¹²³⁴ⁿ₁₂₃₄\"],[\"aa41\",\"찥찦찪찫찭찯찱\",6,\"찺찿\",4,\"챆챇챉챊챋챍챎\"],[\"aa61\",\"챏\",4,\"챖챚\",5,\"챡챢챣챥챧챩\",6,\"챱챲\"],[\"aa81\",\"챳챴챶\",29,\"ぁ\",82],[\"ab41\",\"첔첕첖첗첚첛첝첞첟첡\",6,\"첪첮\",5,\"첶첷첹\"],[\"ab61\",\"첺첻첽\",6,\"쳆쳈쳊\",5,\"쳑쳒쳓쳕\",5],[\"ab81\",\"쳛\",8,\"쳥\",6,\"쳭쳮쳯쳱\",12,\"ァ\",85],[\"ac41\",\"쳾쳿촀촂\",5,\"촊촋촍촎촏촑\",6,\"촚촜촞촟촠\"],[\"ac61\",\"촡촢촣촥촦촧촩촪촫촭\",11,\"촺\",4],[\"ac81\",\"촿\",28,\"쵝쵞쵟А\",5,\"ЁЖ\",25],[\"acd1\",\"а\",5,\"ёж\",25],[\"ad41\",\"쵡쵢쵣쵥\",6,\"쵮쵰쵲\",5,\"쵹\",7],[\"ad61\",\"춁\",6,\"춉\",10,\"춖춗춙춚춛춝춞춟\"],[\"ad81\",\"춠춡춢춣춦춨춪\",5,\"춱\",18,\"췅\"],[\"ae41\",\"췆\",5,\"췍췎췏췑\",16],[\"ae61\",\"췢\",5,\"췩췪췫췭췮췯췱\",6,\"췺췼췾\",4],[\"ae81\",\"츃츅츆츇츉츊츋츍\",6,\"츕츖츗츘츚\",5,\"츢츣츥츦츧츩츪츫\"],[\"af41\",\"츬츭츮츯츲츴츶\",19],[\"af61\",\"칊\",13,\"칚칛칝칞칢\",5,\"칪칬\"],[\"af81\",\"칮\",5,\"칶칷칹칺칻칽\",6,\"캆캈캊\",5,\"캒캓캕캖캗캙\"],[\"b041\",\"캚\",5,\"캢캦\",5,\"캮\",12],[\"b061\",\"캻\",5,\"컂\",19],[\"b081\",\"컖\",13,\"컦컧컩컪컭\",6,\"컶컺\",5,\"가각간갇갈갉갊감\",7,\"같\",4,\"갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆\"],[\"b141\",\"켂켃켅켆켇켉\",6,\"켒켔켖\",5,\"켝켞켟켡켢켣\"],[\"b161\",\"켥\",6,\"켮켲\",5,\"켹\",11],[\"b181\",\"콅\",14,\"콖콗콙콚콛콝\",6,\"콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸\"],[\"b241\",\"콭콮콯콲콳콵콶콷콹\",6,\"쾁쾂쾃쾄쾆\",5,\"쾍\"],[\"b261\",\"쾎\",18,\"쾢\",5,\"쾩\"],[\"b281\",\"쾪\",5,\"쾱\",18,\"쿅\",6,\"깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙\"],[\"b341\",\"쿌\",19,\"쿢쿣쿥쿦쿧쿩\"],[\"b361\",\"쿪\",5,\"쿲쿴쿶\",5,\"쿽쿾쿿퀁퀂퀃퀅\",5],[\"b381\",\"퀋\",5,\"퀒\",5,\"퀙\",19,\"끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫\",4,\"낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝\"],[\"b441\",\"퀮\",5,\"퀶퀷퀹퀺퀻퀽\",6,\"큆큈큊\",5],[\"b461\",\"큑큒큓큕큖큗큙\",6,\"큡\",10,\"큮큯\"],[\"b481\",\"큱큲큳큵\",6,\"큾큿킀킂\",18,\"뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫\",4,\"닳담답닷\",4,\"닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥\"],[\"b541\",\"킕\",14,\"킦킧킩킪킫킭\",5],[\"b561\",\"킳킶킸킺\",5,\"탂탃탅탆탇탊\",5,\"탒탖\",4],[\"b581\",\"탛탞탟탡탢탣탥\",6,\"탮탲\",5,\"탹\",11,\"덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸\"],[\"b641\",\"턅\",7,\"턎\",17],[\"b661\",\"턠\",15,\"턲턳턵턶턷턹턻턼턽턾\"],[\"b681\",\"턿텂텆\",5,\"텎텏텑텒텓텕\",6,\"텞텠텢\",5,\"텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗\"],[\"b741\",\"텮\",13,\"텽\",6,\"톅톆톇톉톊\"],[\"b761\",\"톋\",20,\"톢톣톥톦톧\"],[\"b781\",\"톩\",6,\"톲톴톶톷톸톹톻톽톾톿퇁\",14,\"래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩\"],[\"b841\",\"퇐\",7,\"퇙\",17],[\"b861\",\"퇫\",8,\"퇵퇶퇷퇹\",13],[\"b881\",\"툈툊\",5,\"툑\",24,\"륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많\",4,\"맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼\"],[\"b941\",\"툪툫툮툯툱툲툳툵\",6,\"툾퉀퉂\",5,\"퉉퉊퉋퉌\"],[\"b961\",\"퉍\",14,\"퉝\",6,\"퉥퉦퉧퉨\"],[\"b981\",\"퉩\",22,\"튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바\",4,\"받\",4,\"밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗\"],[\"ba41\",\"튍튎튏튒튓튔튖\",5,\"튝튞튟튡튢튣튥\",6,\"튭\"],[\"ba61\",\"튮튯튰튲\",5,\"튺튻튽튾틁틃\",4,\"틊틌\",5],[\"ba81\",\"틒틓틕틖틗틙틚틛틝\",6,\"틦\",9,\"틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤\"],[\"bb41\",\"틻\",4,\"팂팄팆\",5,\"팏팑팒팓팕팗\",4,\"팞팢팣\"],[\"bb61\",\"팤팦팧팪팫팭팮팯팱\",6,\"팺팾\",5,\"퍆퍇퍈퍉\"],[\"bb81\",\"퍊\",31,\"빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤\"],[\"bc41\",\"퍪\",17,\"퍾퍿펁펂펃펅펆펇\"],[\"bc61\",\"펈펉펊펋펎펒\",5,\"펚펛펝펞펟펡\",6,\"펪펬펮\"],[\"bc81\",\"펯\",4,\"펵펶펷펹펺펻펽\",6,\"폆폇폊\",5,\"폑\",5,\"샥샨샬샴샵샷샹섀섄섈섐섕서\",4,\"섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭\"],[\"bd41\",\"폗폙\",7,\"폢폤\",7,\"폮폯폱폲폳폵폶폷\"],[\"bd61\",\"폸폹폺폻폾퐀퐂\",5,\"퐉\",13],[\"bd81\",\"퐗\",5,\"퐞\",25,\"숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰\"],[\"be41\",\"퐸\",7,\"푁푂푃푅\",14],[\"be61\",\"푔\",7,\"푝푞푟푡푢푣푥\",7,\"푮푰푱푲\"],[\"be81\",\"푳\",4,\"푺푻푽푾풁풃\",4,\"풊풌풎\",5,\"풕\",8,\"쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄\",6,\"엌엎\"],[\"bf41\",\"풞\",10,\"풪\",14],[\"bf61\",\"풹\",18,\"퓍퓎퓏퓑퓒퓓퓕\"],[\"bf81\",\"퓖\",5,\"퓝퓞퓠\",7,\"퓩퓪퓫퓭퓮퓯퓱\",6,\"퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염\",5,\"옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨\"],[\"c041\",\"퓾\",5,\"픅픆픇픉픊픋픍\",6,\"픖픘\",5],[\"c061\",\"픞\",25],[\"c081\",\"픸픹픺픻픾픿핁핂핃핅\",6,\"핎핐핒\",5,\"핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응\",7,\"읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊\"],[\"c141\",\"핤핦핧핪핬핮\",5,\"핶핷핹핺핻핽\",6,\"햆햊햋\"],[\"c161\",\"햌햍햎햏햑\",19,\"햦햧\"],[\"c181\",\"햨\",31,\"점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓\"],[\"c241\",\"헊헋헍헎헏헑헓\",4,\"헚헜헞\",5,\"헦헧헩헪헫헭헮\"],[\"c261\",\"헯\",4,\"헶헸헺\",5,\"혂혃혅혆혇혉\",6,\"혒\"],[\"c281\",\"혖\",5,\"혝혞혟혡혢혣혥\",7,\"혮\",9,\"혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻\"],[\"c341\",\"혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝\",4],[\"c361\",\"홢\",4,\"홨홪\",5,\"홲홳홵\",11],[\"c381\",\"횁횂횄횆\",5,\"횎횏횑횒횓횕\",7,\"횞횠횢\",5,\"횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층\"],[\"c441\",\"횫횭횮횯횱\",7,\"횺횼\",7,\"훆훇훉훊훋\"],[\"c461\",\"훍훎훏훐훒훓훕훖훘훚\",5,\"훡훢훣훥훦훧훩\",4],[\"c481\",\"훮훯훱훲훳훴훶\",5,\"훾훿휁휂휃휅\",11,\"휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼\"],[\"c541\",\"휕휖휗휚휛휝휞휟휡\",6,\"휪휬휮\",5,\"휶휷휹\"],[\"c561\",\"휺휻휽\",6,\"흅흆흈흊\",5,\"흒흓흕흚\",4],[\"c581\",\"흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵\",6,\"흾흿힀힂\",5,\"힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜\"],[\"c641\",\"힍힎힏힑\",6,\"힚힜힞\",5],[\"c6a1\",\"퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁\"],[\"c7a1\",\"퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠\"],[\"c8a1\",\"혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝\"],[\"caa1\",\"伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕\"],[\"cba1\",\"匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢\"],[\"cca1\",\"瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械\"],[\"cda1\",\"棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜\"],[\"cea1\",\"科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾\"],[\"cfa1\",\"區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴\"],[\"d0a1\",\"鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣\"],[\"d1a1\",\"朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩\",5,\"那樂\",4,\"諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉\"],[\"d2a1\",\"納臘蠟衲囊娘廊\",4,\"乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧\",5,\"駑魯\",10,\"濃籠聾膿農惱牢磊腦賂雷尿壘\",7,\"嫩訥杻紐勒\",5,\"能菱陵尼泥匿溺多茶\"],[\"d3a1\",\"丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃\"],[\"d4a1\",\"棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅\"],[\"d5a1\",\"蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣\"],[\"d6a1\",\"煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼\"],[\"d7a1\",\"遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬\"],[\"d8a1\",\"立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅\"],[\"d9a1\",\"蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文\"],[\"daa1\",\"汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑\"],[\"dba1\",\"發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖\"],[\"dca1\",\"碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦\"],[\"dda1\",\"孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥\"],[\"dea1\",\"脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索\"],[\"dfa1\",\"傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署\"],[\"e0a1\",\"胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬\"],[\"e1a1\",\"聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁\"],[\"e2a1\",\"戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧\"],[\"e3a1\",\"嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁\"],[\"e4a1\",\"沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額\"],[\"e5a1\",\"櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬\"],[\"e6a1\",\"旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒\"],[\"e7a1\",\"簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳\"],[\"e8a1\",\"烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療\"],[\"e9a1\",\"窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓\"],[\"eaa1\",\"運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜\"],[\"eba1\",\"濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼\"],[\"eca1\",\"議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄\"],[\"eda1\",\"立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長\"],[\"eea1\",\"障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱\"],[\"efa1\",\"煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖\"],[\"f0a1\",\"靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫\"],[\"f1a1\",\"踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只\"],[\"f2a1\",\"咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯\"],[\"f3a1\",\"鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策\"],[\"f4a1\",\"責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢\"],[\"f5a1\",\"椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃\"],[\"f6a1\",\"贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託\"],[\"f7a1\",\"鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑\"],[\"f8a1\",\"阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃\"],[\"f9a1\",\"品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航\"],[\"faa1\",\"行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型\"],[\"fba1\",\"形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵\"],[\"fca1\",\"禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆\"],[\"fda1\",\"爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰\"]]');\n\n/***/ }),\n\n/***/ 4284:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",127],[\"a140\",\"　，、。．‧；：？！︰…‥﹐﹑﹒·﹔﹕﹖﹗｜–︱—︳╴︴﹏（）︵︶｛｝︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚\"],[\"a1a1\",\"﹛﹜﹝﹞‘’“”〝〞‵′＃＆＊※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯￣＿ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡＋－×÷±√＜＞＝≦≧≠∞≒≡﹢\",4,\"～∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣／\"],[\"a240\",\"＼∕﹨＄￥〒￠￡％＠℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁\",7,\"▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭\"],[\"a2a1\",\"╮╰╯═╞╪╡◢◣◥◤╱╲╳０\",9,\"Ⅰ\",9,\"〡\",8,\"十卄卅Ａ\",25,\"ａ\",21],[\"a340\",\"ｗｘｙｚΑ\",16,\"Σ\",6,\"α\",16,\"σ\",6,\"ㄅ\",10],[\"a3a1\",\"ㄐ\",25,\"˙ˉˊˇˋ\"],[\"a3e1\",\"€\"],[\"a440\",\"一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才\"],[\"a4a1\",\"丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙\"],[\"a540\",\"世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外\"],[\"a5a1\",\"央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全\"],[\"a640\",\"共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年\"],[\"a6a1\",\"式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣\"],[\"a740\",\"作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍\"],[\"a7a1\",\"均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠\"],[\"a840\",\"杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒\"],[\"a8a1\",\"芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵\"],[\"a940\",\"咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居\"],[\"a9a1\",\"屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊\"],[\"aa40\",\"昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠\"],[\"aaa1\",\"炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附\"],[\"ab40\",\"陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品\"],[\"aba1\",\"哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷\"],[\"ac40\",\"拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗\"],[\"aca1\",\"活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄\"],[\"ad40\",\"耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥\"],[\"ada1\",\"迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪\"],[\"ae40\",\"哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙\"],[\"aea1\",\"恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓\"],[\"af40\",\"浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷\"],[\"afa1\",\"砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃\"],[\"b040\",\"虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡\"],[\"b0a1\",\"陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀\"],[\"b140\",\"娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽\"],[\"b1a1\",\"情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺\"],[\"b240\",\"毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶\"],[\"b2a1\",\"瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼\"],[\"b340\",\"莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途\"],[\"b3a1\",\"部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠\"],[\"b440\",\"婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍\"],[\"b4a1\",\"插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋\"],[\"b540\",\"溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘\"],[\"b5a1\",\"窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁\"],[\"b640\",\"詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑\"],[\"b6a1\",\"間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼\"],[\"b740\",\"媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業\"],[\"b7a1\",\"楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督\"],[\"b840\",\"睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫\"],[\"b8a1\",\"腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊\"],[\"b940\",\"辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴\"],[\"b9a1\",\"飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇\"],[\"ba40\",\"愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢\"],[\"baa1\",\"滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬\"],[\"bb40\",\"罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤\"],[\"bba1\",\"說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜\"],[\"bc40\",\"劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂\"],[\"bca1\",\"慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃\"],[\"bd40\",\"瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯\"],[\"bda1\",\"翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞\"],[\"be40\",\"輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉\"],[\"bea1\",\"鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡\"],[\"bf40\",\"濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊\"],[\"bfa1\",\"縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚\"],[\"c040\",\"錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇\"],[\"c0a1\",\"嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬\"],[\"c140\",\"瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪\"],[\"c1a1\",\"薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁\"],[\"c240\",\"駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘\"],[\"c2a1\",\"癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦\"],[\"c340\",\"鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸\"],[\"c3a1\",\"獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類\"],[\"c440\",\"願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼\"],[\"c4a1\",\"纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴\"],[\"c540\",\"護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬\"],[\"c5a1\",\"禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒\"],[\"c640\",\"讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲\"],[\"c940\",\"乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕\"],[\"c9a1\",\"氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋\"],[\"ca40\",\"汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘\"],[\"caa1\",\"吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇\"],[\"cb40\",\"杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓\"],[\"cba1\",\"芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢\"],[\"cc40\",\"坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋\"],[\"cca1\",\"怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲\"],[\"cd40\",\"泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺\"],[\"cda1\",\"矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏\"],[\"ce40\",\"哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛\"],[\"cea1\",\"峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺\"],[\"cf40\",\"柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂\"],[\"cfa1\",\"洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀\"],[\"d040\",\"穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪\"],[\"d0a1\",\"苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱\"],[\"d140\",\"唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧\"],[\"d1a1\",\"恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤\"],[\"d240\",\"毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸\"],[\"d2a1\",\"牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐\"],[\"d340\",\"笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢\"],[\"d3a1\",\"荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐\"],[\"d440\",\"酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅\"],[\"d4a1\",\"唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏\"],[\"d540\",\"崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟\"],[\"d5a1\",\"捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉\"],[\"d640\",\"淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏\"],[\"d6a1\",\"痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟\"],[\"d740\",\"耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷\"],[\"d7a1\",\"蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪\"],[\"d840\",\"釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷\"],[\"d8a1\",\"堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔\"],[\"d940\",\"惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒\"],[\"d9a1\",\"晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞\"],[\"da40\",\"湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖\"],[\"daa1\",\"琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥\"],[\"db40\",\"罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳\"],[\"dba1\",\"菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺\"],[\"dc40\",\"軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈\"],[\"dca1\",\"隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆\"],[\"dd40\",\"媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤\"],[\"dda1\",\"搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼\"],[\"de40\",\"毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓\"],[\"dea1\",\"煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓\"],[\"df40\",\"稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯\"],[\"dfa1\",\"腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤\"],[\"e040\",\"觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿\"],[\"e0a1\",\"遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠\"],[\"e140\",\"凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠\"],[\"e1a1\",\"寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉\"],[\"e240\",\"榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊\"],[\"e2a1\",\"漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓\"],[\"e340\",\"禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞\"],[\"e3a1\",\"耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻\"],[\"e440\",\"裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍\"],[\"e4a1\",\"銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘\"],[\"e540\",\"噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉\"],[\"e5a1\",\"憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒\"],[\"e640\",\"澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙\"],[\"e6a1\",\"獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟\"],[\"e740\",\"膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢\"],[\"e7a1\",\"蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧\"],[\"e840\",\"踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓\"],[\"e8a1\",\"銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮\"],[\"e940\",\"噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺\"],[\"e9a1\",\"憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸\"],[\"ea40\",\"澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙\"],[\"eaa1\",\"瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘\"],[\"eb40\",\"蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠\"],[\"eba1\",\"諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌\"],[\"ec40\",\"錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕\"],[\"eca1\",\"魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎\"],[\"ed40\",\"檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶\"],[\"eda1\",\"瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞\"],[\"ee40\",\"蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞\"],[\"eea1\",\"謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜\"],[\"ef40\",\"鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰\"],[\"efa1\",\"鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶\"],[\"f040\",\"璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒\"],[\"f0a1\",\"臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧\"],[\"f140\",\"蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪\"],[\"f1a1\",\"鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰\"],[\"f240\",\"徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛\"],[\"f2a1\",\"礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕\"],[\"f340\",\"譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦\"],[\"f3a1\",\"鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲\"],[\"f440\",\"嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩\"],[\"f4a1\",\"禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿\"],[\"f540\",\"鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛\"],[\"f5a1\",\"鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥\"],[\"f640\",\"蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺\"],[\"f6a1\",\"騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚\"],[\"f740\",\"糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊\"],[\"f7a1\",\"驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾\"],[\"f840\",\"讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏\"],[\"f8a1\",\"齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚\"],[\"f940\",\"纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊\"],[\"f9a1\",\"龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓\"]]');\n\n/***/ }),\n\n/***/ 5633:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",127],[\"8ea1\",\"｡\",62],[\"a1a1\",\"　、。，．・：；？！゛゜´｀¨＾￣＿ヽヾゝゞ〃仝々〆〇ー―‐／＼～∥｜…‥‘’“”（）〔〕［］｛｝〈\",9,\"＋－±×÷＝≠＜＞≦≧∞∴♂♀°′″℃￥＄￠￡％＃＆＊＠§☆★○●◎◇\"],[\"a2a1\",\"◆□■△▲▽▼※〒→←↑↓〓\"],[\"a2ba\",\"∈∋⊆⊇⊂⊃∪∩\"],[\"a2ca\",\"∧∨￢⇒⇔∀∃\"],[\"a2dc\",\"∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬\"],[\"a2f2\",\"Å‰♯♭♪†‡¶\"],[\"a2fe\",\"◯\"],[\"a3b0\",\"０\",9],[\"a3c1\",\"Ａ\",25],[\"a3e1\",\"ａ\",25],[\"a4a1\",\"ぁ\",82],[\"a5a1\",\"ァ\",85],[\"a6a1\",\"Α\",16,\"Σ\",6],[\"a6c1\",\"α\",16,\"σ\",6],[\"a7a1\",\"А\",5,\"ЁЖ\",25],[\"a7d1\",\"а\",5,\"ёж\",25],[\"a8a1\",\"─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂\"],[\"ada1\",\"①\",19,\"Ⅰ\",9],[\"adc0\",\"㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡\"],[\"addf\",\"㍻〝〟№㏍℡㊤\",4,\"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪\"],[\"b0a1\",\"亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭\"],[\"b1a1\",\"院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応\"],[\"b2a1\",\"押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改\"],[\"b3a1\",\"魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱\"],[\"b4a1\",\"粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄\"],[\"b5a1\",\"機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京\"],[\"b6a1\",\"供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈\"],[\"b7a1\",\"掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲\"],[\"b8a1\",\"検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向\"],[\"b9a1\",\"后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込\"],[\"baa1\",\"此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷\"],[\"bba1\",\"察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時\"],[\"bca1\",\"次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周\"],[\"bda1\",\"宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償\"],[\"bea1\",\"勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾\"],[\"bfa1\",\"拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾\"],[\"c0a1\",\"澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線\"],[\"c1a1\",\"繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎\"],[\"c2a1\",\"臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只\"],[\"c3a1\",\"叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵\"],[\"c4a1\",\"帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓\"],[\"c5a1\",\"邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到\"],[\"c6a1\",\"董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入\"],[\"c7a1\",\"如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦\"],[\"c8a1\",\"函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美\"],[\"c9a1\",\"鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服\"],[\"caa1\",\"福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋\"],[\"cba1\",\"法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満\"],[\"cca1\",\"漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒\"],[\"cda1\",\"諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃\"],[\"cea1\",\"痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯\"],[\"cfa1\",\"蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕\"],[\"d0a1\",\"弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲\"],[\"d1a1\",\"僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨\"],[\"d2a1\",\"辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨\"],[\"d3a1\",\"咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉\"],[\"d4a1\",\"圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩\"],[\"d5a1\",\"奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓\"],[\"d6a1\",\"屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏\"],[\"d7a1\",\"廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚\"],[\"d8a1\",\"悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛\"],[\"d9a1\",\"戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼\"],[\"daa1\",\"據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼\"],[\"dba1\",\"曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍\"],[\"dca1\",\"棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣\"],[\"dda1\",\"檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾\"],[\"dea1\",\"沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌\"],[\"dfa1\",\"漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼\"],[\"e0a1\",\"燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱\"],[\"e1a1\",\"瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰\"],[\"e2a1\",\"癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬\"],[\"e3a1\",\"磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐\"],[\"e4a1\",\"筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆\"],[\"e5a1\",\"紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺\"],[\"e6a1\",\"罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋\"],[\"e7a1\",\"隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙\"],[\"e8a1\",\"茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈\"],[\"e9a1\",\"蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙\"],[\"eaa1\",\"蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞\"],[\"eba1\",\"襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫\"],[\"eca1\",\"譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊\"],[\"eda1\",\"蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸\"],[\"eea1\",\"遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮\"],[\"efa1\",\"錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞\"],[\"f0a1\",\"陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰\"],[\"f1a1\",\"顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷\"],[\"f2a1\",\"髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈\"],[\"f3a1\",\"鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠\"],[\"f4a1\",\"堯槇遙瑤凜熙\"],[\"f9a1\",\"纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德\"],[\"faa1\",\"忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱\"],[\"fba1\",\"犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚\"],[\"fca1\",\"釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑\"],[\"fcf1\",\"ⅰ\",9,\"￢￤＇＂\"],[\"8fa2af\",\"˘ˇ¸˙˝¯˛˚～΄΅\"],[\"8fa2c2\",\"¡¦¿\"],[\"8fa2eb\",\"ºª©®™¤№\"],[\"8fa6e1\",\"ΆΈΉΊΪ\"],[\"8fa6e7\",\"Ό\"],[\"8fa6e9\",\"ΎΫ\"],[\"8fa6ec\",\"Ώ\"],[\"8fa6f1\",\"άέήίϊΐόςύϋΰώ\"],[\"8fa7c2\",\"Ђ\",10,\"ЎЏ\"],[\"8fa7f2\",\"ђ\",10,\"ўџ\"],[\"8fa9a1\",\"ÆĐ\"],[\"8fa9a4\",\"Ħ\"],[\"8fa9a6\",\"Ĳ\"],[\"8fa9a8\",\"ŁĿ\"],[\"8fa9ab\",\"ŊØŒ\"],[\"8fa9af\",\"ŦÞ\"],[\"8fa9c1\",\"æđðħıĳĸłŀŉŋøœßŧþ\"],[\"8faaa1\",\"ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ\"],[\"8faaba\",\"ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ\"],[\"8faba1\",\"áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ\"],[\"8fabbd\",\"ġĥíìïîǐ\"],[\"8fabc5\",\"īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż\"],[\"8fb0a1\",\"丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄\"],[\"8fb1a1\",\"侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐\"],[\"8fb2a1\",\"傒傓傔傖傛傜傞\",4,\"傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂\"],[\"8fb3a1\",\"凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋\"],[\"8fb4a1\",\"匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿\"],[\"8fb5a1\",\"咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒\"],[\"8fb6a1\",\"嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍\",5,\"嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤\",4,\"囱囫园\"],[\"8fb7a1\",\"囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭\",4,\"坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡\"],[\"8fb8a1\",\"堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭\"],[\"8fb9a1\",\"奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿\"],[\"8fbaa1\",\"嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖\",4,\"寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩\"],[\"8fbba1\",\"屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤\"],[\"8fbca1\",\"巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪\",4,\"幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧\"],[\"8fbda1\",\"彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐\",4,\"忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷\"],[\"8fbea1\",\"悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐\",4,\"愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥\"],[\"8fbfa1\",\"懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵\"],[\"8fc0a1\",\"捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿\"],[\"8fc1a1\",\"擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝\"],[\"8fc2a1\",\"昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝\"],[\"8fc3a1\",\"杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮\",4,\"桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏\"],[\"8fc4a1\",\"棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲\"],[\"8fc5a1\",\"樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽\"],[\"8fc6a1\",\"歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖\"],[\"8fc7a1\",\"泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞\"],[\"8fc8a1\",\"湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊\"],[\"8fc9a1\",\"濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔\",4,\"炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃\",4,\"焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠\"],[\"8fcaa1\",\"煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻\"],[\"8fcba1\",\"狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽\"],[\"8fcca1\",\"珿琀琁琄琇琊琑琚琛琤琦琨\",9,\"琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆\"],[\"8fcda1\",\"甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹\",5,\"疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹\"],[\"8fcea1\",\"瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢\",6,\"皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢\"],[\"8fcfa1\",\"睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳\"],[\"8fd0a1\",\"碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞\"],[\"8fd1a1\",\"秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰\"],[\"8fd2a1\",\"笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙\",5],[\"8fd3a1\",\"籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝\"],[\"8fd4a1\",\"綞綦綧綪綳綶綷綹緂\",4,\"緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭\"],[\"8fd5a1\",\"罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮\"],[\"8fd6a1\",\"胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆\"],[\"8fd7a1\",\"艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸\"],[\"8fd8a1\",\"荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓\"],[\"8fd9a1\",\"蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏\",4,\"蕖蕙蕜\",6,\"蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼\"],[\"8fdaa1\",\"藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠\",4,\"虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣\"],[\"8fdba1\",\"蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃\",6,\"螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵\"],[\"8fdca1\",\"蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊\",4,\"裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺\"],[\"8fdda1\",\"襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔\",4,\"觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳\"],[\"8fdea1\",\"誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂\",4,\"譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆\"],[\"8fdfa1\",\"貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢\"],[\"8fe0a1\",\"踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁\"],[\"8fe1a1\",\"轃轇轏轑\",4,\"轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃\"],[\"8fe2a1\",\"郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿\"],[\"8fe3a1\",\"釂釃釅釓釔釗釙釚釞釤釥釩釪釬\",5,\"釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵\",4,\"鉻鉼鉽鉿銈銉銊銍銎銒銗\"],[\"8fe4a1\",\"銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿\",4,\"鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶\"],[\"8fe5a1\",\"鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉\",4,\"鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹\"],[\"8fe6a1\",\"镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂\"],[\"8fe7a1\",\"霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦\"],[\"8fe8a1\",\"頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱\",4,\"餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵\"],[\"8fe9a1\",\"馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿\",4],[\"8feaa1\",\"鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪\",4,\"魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸\"],[\"8feba1\",\"鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦\",4,\"鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻\"],[\"8feca1\",\"鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵\"],[\"8feda1\",\"黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃\",4,\"齓齕齖齗齘齚齝齞齨齩齭\",4,\"齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥\"]]');\n\n/***/ }),\n\n/***/ 6258:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('{\"uChars\":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],\"gbChars\":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}');\n\n/***/ }),\n\n/***/ 4346:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"a140\",\"\",62],[\"a180\",\"\",32],[\"a240\",\"\",62],[\"a280\",\"\",32],[\"a2ab\",\"\",5],[\"a2e3\",\"€\"],[\"a2ef\",\"\"],[\"a2fd\",\"\"],[\"a340\",\"\",62],[\"a380\",\"\",31,\"　\"],[\"a440\",\"\",62],[\"a480\",\"\",32],[\"a4f4\",\"\",10],[\"a540\",\"\",62],[\"a580\",\"\",32],[\"a5f7\",\"\",7],[\"a640\",\"\",62],[\"a680\",\"\",32],[\"a6b9\",\"\",7],[\"a6d9\",\"\",6],[\"a6ec\",\"\"],[\"a6f3\",\"\"],[\"a6f6\",\"\",8],[\"a740\",\"\",62],[\"a780\",\"\",32],[\"a7c2\",\"\",14],[\"a7f2\",\"\",12],[\"a896\",\"\",10],[\"a8bc\",\"ḿ\"],[\"a8bf\",\"ǹ\"],[\"a8c1\",\"\"],[\"a8ea\",\"\",20],[\"a958\",\"\"],[\"a95b\",\"\"],[\"a95d\",\"\"],[\"a989\",\"〾⿰\",11],[\"a997\",\"\",12],[\"a9f0\",\"\",14],[\"aaa1\",\"\",93],[\"aba1\",\"\",93],[\"aca1\",\"\",93],[\"ada1\",\"\",93],[\"aea1\",\"\",93],[\"afa1\",\"\",93],[\"d7fa\",\"\",4],[\"f8a1\",\"\",93],[\"f9a1\",\"\",93],[\"faa1\",\"\",93],[\"fba1\",\"\",93],[\"fca1\",\"\",93],[\"fda1\",\"\",93],[\"fe50\",\"⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌\"],[\"fe80\",\"䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓\",6,\"䶮\",93],[\"8135f437\",\"\"]]');\n\n/***/ }),\n\n/***/ 7014:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",128],[\"a1\",\"｡\",62],[\"8140\",\"　、。，．・：；？！゛゜´｀¨＾￣＿ヽヾゝゞ〃仝々〆〇ー―‐／＼～∥｜…‥‘’“”（）〔〕［］｛｝〈\",9,\"＋－±×\"],[\"8180\",\"÷＝≠＜＞≦≧∞∴♂♀°′″℃￥＄￠￡％＃＆＊＠§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓\"],[\"81b8\",\"∈∋⊆⊇⊂⊃∪∩\"],[\"81c8\",\"∧∨￢⇒⇔∀∃\"],[\"81da\",\"∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬\"],[\"81f0\",\"Å‰♯♭♪†‡¶\"],[\"81fc\",\"◯\"],[\"824f\",\"０\",9],[\"8260\",\"Ａ\",25],[\"8281\",\"ａ\",25],[\"829f\",\"ぁ\",82],[\"8340\",\"ァ\",62],[\"8380\",\"ム\",22],[\"839f\",\"Α\",16,\"Σ\",6],[\"83bf\",\"α\",16,\"σ\",6],[\"8440\",\"А\",5,\"ЁЖ\",25],[\"8470\",\"а\",5,\"ёж\",7],[\"8480\",\"о\",17],[\"849f\",\"─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂\"],[\"8740\",\"①\",19,\"Ⅰ\",9],[\"875f\",\"㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡\"],[\"877e\",\"㍻\"],[\"8780\",\"〝〟№㏍℡㊤\",4,\"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪\"],[\"889f\",\"亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭\"],[\"8940\",\"院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円\"],[\"8980\",\"園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改\"],[\"8a40\",\"魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫\"],[\"8a80\",\"橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄\"],[\"8b40\",\"機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救\"],[\"8b80\",\"朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈\"],[\"8c40\",\"掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨\"],[\"8c80\",\"劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向\"],[\"8d40\",\"后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降\"],[\"8d80\",\"項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷\"],[\"8e40\",\"察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止\"],[\"8e80\",\"死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周\"],[\"8f40\",\"宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳\"],[\"8f80\",\"準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾\"],[\"9040\",\"拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨\"],[\"9080\",\"逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線\"],[\"9140\",\"繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻\"],[\"9180\",\"操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只\"],[\"9240\",\"叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄\"],[\"9280\",\"逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓\"],[\"9340\",\"邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬\"],[\"9380\",\"凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入\"],[\"9440\",\"如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅\"],[\"9480\",\"楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美\"],[\"9540\",\"鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷\"],[\"9580\",\"斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋\"],[\"9640\",\"法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆\"],[\"9680\",\"摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒\"],[\"9740\",\"諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲\"],[\"9780\",\"沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯\"],[\"9840\",\"蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕\"],[\"989f\",\"弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲\"],[\"9940\",\"僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭\"],[\"9980\",\"凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨\"],[\"9a40\",\"咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸\"],[\"9a80\",\"噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩\"],[\"9b40\",\"奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀\"],[\"9b80\",\"它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏\"],[\"9c40\",\"廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠\"],[\"9c80\",\"怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛\"],[\"9d40\",\"戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫\"],[\"9d80\",\"捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼\"],[\"9e40\",\"曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎\"],[\"9e80\",\"梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣\"],[\"9f40\",\"檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯\"],[\"9f80\",\"麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌\"],[\"e040\",\"漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝\"],[\"e080\",\"烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱\"],[\"e140\",\"瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿\"],[\"e180\",\"痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬\"],[\"e240\",\"磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰\"],[\"e280\",\"窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆\"],[\"e340\",\"紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷\"],[\"e380\",\"縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋\"],[\"e440\",\"隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤\"],[\"e480\",\"艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈\"],[\"e540\",\"蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬\"],[\"e580\",\"蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞\"],[\"e640\",\"襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧\"],[\"e680\",\"諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊\"],[\"e740\",\"蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜\"],[\"e780\",\"轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮\"],[\"e840\",\"錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙\"],[\"e880\",\"閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰\"],[\"e940\",\"顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃\"],[\"e980\",\"騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈\"],[\"ea40\",\"鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯\"],[\"ea80\",\"黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙\"],[\"ed40\",\"纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏\"],[\"ed80\",\"塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱\"],[\"ee40\",\"犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙\"],[\"ee80\",\"蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑\"],[\"eeef\",\"ⅰ\",9,\"￢￤＇＂\"],[\"f040\",\"\",62],[\"f080\",\"\",124],[\"f140\",\"\",62],[\"f180\",\"\",124],[\"f240\",\"\",62],[\"f280\",\"\",124],[\"f340\",\"\",62],[\"f380\",\"\",124],[\"f440\",\"\",62],[\"f480\",\"\",124],[\"f540\",\"\",62],[\"f580\",\"\",124],[\"f640\",\"\",62],[\"f680\",\"\",124],[\"f740\",\"\",62],[\"f780\",\"\",124],[\"f840\",\"\",62],[\"f880\",\"\",124],[\"f940\",\"\"],[\"fa40\",\"ⅰ\",9,\"Ⅰ\",9,\"￢￤＇＂㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊\"],[\"fa80\",\"兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯\"],[\"fb40\",\"涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神\"],[\"fb80\",\"祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙\"],[\"fc40\",\"髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑\"]]');\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/global */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/node module decorator */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.nmd = function(module) {\n/******/ \t\t\tmodule.paths = [];\n/******/ \t\t\tif (!module.children) module.children = [];\n/******/ \t\t\treturn module;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(2536);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=pdfmake.js.map\n\nthis.pdfMake = this.pdfMake || {}; this.pdfMake.vfs = {\n  \"Roboto-Italic.ttf\": \"AAEAAAARAQAABAAQR0RFRqWLoiAAAdT4AAACWEdQT1PInCKzAAHXUAAAZfhHU1VChRYO9AACPUgAABX2T1MvMpeDsUwAAAGYAAAAYGNtYXDOyFo6AAAWdAAABoJjdnQgO/gmfQAAL1AAAAD+ZnBnbagFhDIAABz4AAAPhmdhc3AACAAZAAHU7AAAAAxnbHlmJ9ZJigAAOpAAAZd6aGVhZAakHScAAAEcAAAANmhoZWEMnBKaAAABVAAAACRobXR4O9/cTQAAAfgAABR8bG9jYY3Y7xYAADBQAAAKQG1heHAIzxDGAAABeAAAACBuYW1lOSJt4gAB0gwAAALAcG9zdP9hAGQAAdTMAAAAIHByZXB5WM7TAAAsgAAAAs4AAQAAAAMBSDPLHDFfDzz1ABsIAAAAAADE8BEuAAAAAN8Gv2v6N/3VCUMIcwACAAkAAgAAAAAAAAABAAAHbP4MAAAJA/o3/mwJQwgAAbMAAAAAAAAAAAAAAAAFHwABAAAFHwCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAAQAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA5YAZAAAAAAAAAAAAfcAAAH3AAACAABEAnwAyQTHAFIEXABJBa8AugTUADkBWwCsAqgAbQK0/5ADWABrBGcATAGH/48CJQAaAgwANAM0/5AEXABqBFwA+gRcABgEXAA1BFwABQRcAHIEXABtBFwAnQRcAEAEXACUAesAKQGu/5sD8gBCBEIAcAQPADsDqwClBvgAQQUQ/68E1gA7BQ0AcAUYADsEaQA7BEoAOwVJAHQFiQA7AhwASQRIAAcE3gA7BC4AOwbGADsFiQA7BVcAcwTlADsFVwBrBMgAOwScACkEoQCpBQgAYwTxAKUG4gDDBN3/1ASpAKgEpv/sAg8AAAMwAMACD/97Az4ATwOA/4ECZgDQBDkAMQRcAB8EEABGBGAARwQdAEUCswB1BFwAAwRGACAB4wAvAdv/EwPvACAB4wAvBs4AHgRJACAEbQBGBFz/1wRpAEYCoQAgBAEALgKKAEMERwBbA8IAbgXVAIAD2v/FA6z/qgPa/+4CoAA3AeUAIgKg/40FRwBpAeX/8QQ/AFAEg//zBYkAEgQUAEMB3f/4BML/2gM/ANoGGQBeA3kAwwOuAFYETACBBhoAXQOPAPgC5gDoBCYAJgLiAF0C4gBvAm8A1QRm/+YDzAB4AgcApQHt/8gC4gDgA4gAvwOtABEFuQC6Bg8AtQYTAJ4Drf/RB0H/gwQkACgFVwAgBJYAOQSdAB8GjgATBI0AXARvAEQEZgA6BHn/4ASjAEYFcAA2AewALwRSAC4ELgAjAhkAJAVgADUEZgAlB2YAVQcMAEcB7QA0BV0AUgKl/0cFVQBmBHAAQwVlAGMEzQBbAfX/CQQYAD8DpwEYA3MBKAOZAPgDUQEHAeMBDgKZAQECGv+uA6kA3gLlAMMCSP/pAAD9agAA/eoAAP0LAAD99AAA/NsAAPy6Af4BIwPtAPQCEQClBFEARAV5/7IFSABnBRf/xARvAAwFiQBEBG//2wWPAFYFXgCFBSkACgRjAEgEmf/xA+QAhQRmAEUEMAApBAUAigRmACUEawB1AoQAhARN/7gDzgBABKAAYARm/90ELQBKBGUASAQMAIcEPABoBXgAQAVvAE4GZABnBH4AUgQiAGcGGABoBdIAogU8AHMIUP/NCGMARAZRALQFiABCBO4ANgXW/4wHC/+rBJwAJQWJAEQFf//LBOEAlAX+AFsFrQBBBVAAywdNAEIHhABCBeMAigbAAEQE3gA2BTwAdgb6AEkE8f/pBEsARwRwADEDQgAuBK//jQXy/6cD8QAgBHsAMAQyADAEfP/IBcEAMQR6ADAEewAwA7sAYAWhAEkEmgAwBDkAeQZHADAGbAAlBNEAVgYQADEENwAxBC0AMgZWADEEQv+/BEYAIAQtAE4Glf/DBq8AMARwACAEewAwBtMAbgX9AE8ENgAvBvUASgXLAC0Erv+6BCb/ogbWAFsF3gBPBp4AJgW1ACoIwABJB5UALwQE/80Dvf/JBUgAZwRpAEME5ACtA+UAhQVIAGcEZgBDBssAdAX1AFIG0wBuBf0ATwUKAGkEJwBMBNgAQAAA/OcAAP0KAAD+FgAA/jsAAPo3AAD6TgXlAEQE0QAwBDYALwT0ADsEZ//XBEIANQN2ACUEwABEA+cAJQdx/6sGOv+nBXkARASeADAE4wA2BFwALgZaALwFWgB2BdsAOwS+ADAHkwA7BYgAJQf8AEIGvwAlBcEAawSvAFwE+//UBBT/xQb2AKwFNABXBZoAywR9AHkFRgDKBEkAlAVGABwGAACIBJoABATjADYEOQAuBdr/ywTT/8gFhwBEBGYAJQXtADsE0AAwByEAOwYYADEFXQBSBIQAPASE//0Env/5A5n/6QUQ/9QEKf/FBNEALgZiADEGsABIBiYArQUEAGgEKQCwA+kAoAeG/+AGRP/aB74APAZvACME0QBlA/4ATQWCAJsE+gB9BTwAaAXe/8sE1//IAwkA8wP/AAAH9AAAA/8AAAf0AAACrgAAAgQAAAFcAAAEZgAAAikAAAGfAAABAgAAANUAAAAAAAACLQAaAi0AGgUiAKYGGQCYA4r/XgGOALABjgCJAYz/lwGOANICyAC4AtAAlQKt/5QESAB3BG3/9gKeAKEDsQA4BTsAOAF0AFIHbwCWAlUAXQJVAAQDh//wAuIAjwLiAGQC4gCKAuIAkALiAKIC4gB7AuIAqgNHAH4C4v/cAuIALQLi/6sC4v+8AuL/sgLi/9gC4v/eAuL/8ALi/8kC4v/4BIP/8wYlAAoGXwA5CD8AOwW+AAkF/AAfBFwAUQWtAEMEAwBKBFIACwUf//IFJv/lBbsAzAOxAEsH+wA1BNsA6wTxAH8GAQC2BqwAkgalAJAGQwC+BG0ATQVkACQEi/+tBHAAqwSgAEEH+wBLAf3/FQRfADMEQgBwA/z/0wQZABgD6QBCAkQAdwJ8AHEB9f/kBNcAdQRNAFkEaAB1BqAAdQagAHUEyAB1BmgAKAAAAAAH9f+rCDUAXALY/+oC2ABsAtgAHAPxAGkD8QAnA/EAcAPwAEsD8QBKA/H/9wPxABcD8f/9A/EAvQPxAEYEA//dBAsAdQQz/7cF5gCUBEYAeQRbAEIEBwBuBAAAEgQpAB0EmABGBDsAHgSYAEwEvQAeBdQAHgOZAB4ENAAeA7L/9gHaACsEvgAeBIgATAOvAB4EAAASBBQABgOFABkDkwAeBEb/sASYAEwERv+wA27/0wSqAB4D0v/WBT4AUgTwAH0EzQAOBUkAbQRaAEgHCv/DBxgAHgVKAG4EqQAeBDkAIAT9/4kF3f+vBB8AEgTGACAELQAfBJz/xAQAAFoFAQAeBEgAVgYgAB4GeQAeBPYAUQXNACAELgAgBFoAIAZFAB4EZP/gA/P/+gYY/68EVwAfBOMAHwUPAGoFlwBQBEcAdQSE/7cGMQBtBEgAVQRIAB4FmAAuBKYAQAQfABIEnABGBBQAAAPGAB8H5AAeBIf/3gLY//sC2P/xAtgAFwLYAB0C2AAvAtgACALYADcDewCTAqABCwPIAB4EGv+ZBJ8ASAUjAEQE/QBEA/UAJgUVAEQD8AAmBF0AHgRaAEgEMAAeBGP/pgHvAPwDiQESAAD9KgPSANMD1gAiA/AAzgPXAM0DkwAeA4QBEgODARMC4gCPAuIAZALiAIoC4gCQAuIAogLiAHsC4gCqBVgAgAWDAIEFaABEBbMAgwW2AIMDuAC8BF8AOQQ3/4EEqv/TBEn/1QQOACsDiQEUAYb/vgZxAEwElgA+Ae3/DwRm/6wEZv/jBGb/uARmACwEZgBWBGYAJARmAGYEZgAbBGYAQARmAQ0CAP8JAf//CQH2AC8B9v94AfYALwQwAB4E2gBkBAEAYgRcAB8EEwBEBHAAQwRpACMEfABCBGv/1wR5AEIEHQBGBFwANQRO/78DaACpBLEALAOZ/+kGCv+aA9oAHgSY//QEvQAeBL0AHgH3AAACJQAaBTYALwU2AC8EZAA+BKEAqQKK//QFEP+vBRD/rwUQ/68FEP+vBRD/rwUQ/68FEP+vBQ0AcARpADsEaQA7BGkAOwRpADsCHABJAhwASQIcAEkCHABJBYkAOwVXAHMFVwBzBVcAcwVXAHMFVwBzBQgAYwUIAGMFCABjBQgAYwSpAKgEOQAxBDkAMQQ5ADEEOQAxBDkAMQQ5ADEEOQAxBBAARgQdAEUEHQBFBB0ARQQdAEUB7AAvAewALwHsAC8B7AAvBEkAIARtAEYEbQBGBG0ARgRtAEYEbQBGBEcAWwRHAFsERwBbBEcAWwOs/6oDrP+qBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBQ0AcAQQAEYFDQBwBBAARgUNAHAEEABGBQ0AcAQQAEYFGAA7BPYARwRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUFSQB0BFwAAwVJAHQEXAADBUkAdARcAAMFSQB0BFwAAwWJADsERgAgAhwASQHsABECHABJAewALgIcAEkB7AAvAhz/iwHj/20CHABJBmQASQO+AC8ESAAHAfX/CQTeADsD7wAgBC4AOwHjAC8ELgA7AeP/ogQuADsCeQAvBC4AOwK/AC8FiQA7BEkAIAWJADsESQAgBYkAOwRJACAESQAgBVcAcwRtAEYFVwBzBG0ARgVXAHMEbQBGBMgAOwKhACAEyAA7AqH/nwTIADsCoQAgBJwAKQQBAC4EnAApBAEALgScACkEAQAuBJwAKQQBAC4EnAApBAEALgShAKkCigBDBKEAqQKKAEMEoQCpArIAQwUIAGMERwBbBQgAYwRHAFsFCABjBEcAWwUIAGMERwBbBQgAYwRHAFsFCABjBEcAWwbiAMMF1QCABKkAqAOs/6oEqQCoBKb/7APa/+4Epv/sA9r/7gSm/+wD2v/uB0H/gwaOABMFVwAgBGYAOgRd/68EXf+vBAcAbgRj/6YEY/+mBGP/pgRj/6YEY/+mBGP/pgRj/6YEWgBIA8gAHgPIAB4DyAAeA8gAHgHaACsB2gArAdoAKwHaACsEvQAeBJgATASYAEwEmABMBJgATASYAEwEWwBCBFsAQgRbAEIEWwBCBAsAdQRj/6YEY/+mBGP/pgRaAEgEWgBIBFoASARaAEgEXQAeA8gAHgPIAB4DyAAeA8gAHgPIAB4EiABMBIgATASIAEwEiABMBL4AHgHaAA4B2gArAdoAKwHk/4IB2gArA7L/9gQ0AB4DmQAeA5kAHgOZAB4DmQAeBL0AHgS9AB4EvQAeBJgATASYAEwEmABMBCkAHQQpAB0EKQAdBAAAEgQAABIEAAASBAAAEgQHAG4EBwBuBAcAbgRbAEIEWwBCBFsAQgRbAEIEWwBCBFsAQgXmAJQECwB1BAsAdQQD/90EA//dBAP/3QUQ/68EzQADBe0AEQKAABcFawBrBQ3/7QU9AB4ChAAgBRD/rwTWADsEaQA7BKb/7AWJADsCHABJBN4AOwbGADsFiQA7BVcAcwTlADsEoQCpBKkAqATd/9QCHABJBKkAqARjAEgEMAApBGYAJQKEAIQEPABoBFIALgRtAEYEZv/mA8IAbgRO/78ChABlBDwAaARtAEYEPABoBmQAZwRpADsEUQBEBJwAKQIcAEkCHABJBEgABwT9AEQE3gA7BOEAlAUQ/68E1gA7BFEARARpADsFiQBEBsYAOwWJADsFVwBzBYkARATlADsFDQBwBKEAqQTd/9QEOQAxBB0ARQR7ADAEbQBGBFz/1wQQAEYDrP+qA9r/xQQdAEUDQgAuBAEALgHjAC8B7AAvAdv/EwQyADADrP+qBuIAwwXVAIAG4gDDBdUAgAbiAMMF1QCABKkAqAOs/6oBWwCsAnwAyQQAAEQB9f8JAY4AiQbGADsGzgAeBRD/rwQ5ADEEaQA7BYkARAQdAEUEewAwBV4AhQVvAE4E5ACtA+UAhQgZAEYJAwBzBJwAJQPxACAFDQBwBBAARgSpAKgD5ACFAhwASQcL/6sF8v+nAhwASQUQ/68EOQAxBRD/rwQ5ADEHQf+DBo4AEwRpADsEHQBFBV0AUgQYAD8EGAA/Bwv/qwXy/6cEnAAlA/EAIAWJAEQEewAwBYkARAR7ADAFVwBzBG0ARgVIAGcEaQBDBUgAZwRpAEMFPAB2BC0AMgThAJQDrP+qBOEAlAOs/6oE4QCUA6z/qgVQAMsEOQB5BsAARAYQADEEYABHBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQIcAEkB7AAvAhwADQHj//AFVwBzBG0ARgVXAHMEbQBGBVcAcwRtAEYFVwBzBG0ARgVXAHMEbQBGBVcAcwRtAEYFVwBzBG0ARgVVAGYEcABDBVUAZgRwAEMFVQBmBHAAQwVVAGYEcABDBVUAZgRwAEMFCABjBEcAWwUIAGMERwBbBWUAYwTNAFsFZQBjBM0AWwVlAGMEzQBbBWUAYwTNAFsFZQBjBM0AWwSpAKgDrP+qBKkAqAOs/6oEqQCoA6z/qgR+AAAEoQCpA7sAYAVQAMsEOQB5BFEARANCAC4GAACIBJoABARGACAE3gAsBN4ALARRABEDQv/nBREAWAQJADoEqQCoA+QAXgTd/9QD2v/FBDAAKQRK/9cGGQCYBFwAGARcADUEXAAFBFwAcgRwAIEEhABUBHAAlASEAH4FSQB0BFwAAwWJADsESQAgBRD/rwQ5ADEEaQA7BB0ARQIc/+AB7P+NBVcAcwRtAEYEyAA7AqEAIAUIAGMERwBbBIb/sQTWADsEXAAfBRgAOwRgAEcFGAA7BGAARwWJADsERgAgBN4AOwPvACAE3gA7A+8AIAQuADsB4//wBsYAOwbOAB4FiQA7BEkAIAVXAHME5QA7BFz/1wTIADsCof/uBJwAKQQBAC4EoQCpAooAQwUIAGME8QClA8IAbgTxAKUDwgBuBuIAwwXVAIAEpv/sA9r/7gWd/wwEY/+mBAT/4gT6//0CFgACBKIAHgRH/5oE1wAYBGP/pgQwAB4DyAAeBAP/3QS+AB4B2gArBDQAHgXUAB4EvQAeBJgATAQ7AB4EBwBuBAsAdQQz/7cB2gArBAsAdQPIAB4DkwAeBAAAEgHaACsB2gArA7L/9gQ0AB4EAABaBGP/pgQwAB4DkwAeA8gAHgTGACAF1AAeBL4AHgSYAEwEqgAeBDsAHgRaAEgEBwBuBDP/twQfABIEvgAeBFoASAQLAHUFmAAuBMYAIAQAAFoFPgBSBYwAKwYK/5oEmP/0BAAAEgXmAJQF5gCUBeYAlAQLAHUFEP+vBDkAMQRpADsEHQBFBGP/pgPIAB4B7P/wAAAAAgAAAAMAAAAUAAMAAQAAABQABAZuAAAA9ACAAAYAdAAAAAIADQB+AKAArACtAL8AxgDPAOYA7wD+AQ8BEQElAScBMAFTAV8BZwF+AX8BjwGSAaEBsAHwAf8CGwI3AlkCvALHAskC3QLzAwEDAwMJAw8DIwOKA4wDkgOhA7ADuQPJA84D0gPWBCUELwRFBE8EYgRvBHkEhgSfBKkEsQS6BM4E1wThBPUFAQUQBRMeAR4/HoUe8R7zHvkfTSAJIAsgESAVIB4gIiAnIDAgMyA6IDwgRCB0IH8gpCCqIKwgsSC6IL0hBSETIRYhIiEmIS4hXiICIgYiDyISIhoiHiIrIkgiYCJlJcruAvbD+wT+///9//8AAAAAAAIADQAgAKAAoQCtAK4AwADHANAA5wDwAP8BEAESASYBKAExAVQBYAFoAX8BjwGSAaABrwHwAfoCGAI3AlkCvALGAskC2ALzAwADAwMJAw8DIwOEA4wDjgOTA6MDsQO6A8oD0QPWBAAEJgQwBEYEUARjBHAEegSIBKAEqgSyBLsEzwTYBOIE9gUCBREeAB4+HoAeoB7yHvQfTSAAIAogECATIBcgICAlIDAgMiA5IDwgRCB0IH8goyCmIKsgsSC5ILwhBSETIRYhIiEmIS4hWyICIgYiDyIRIhoiHiIrIkgiYCJkJcruAfbD+wH+///8//8AAQAA//b/5AHp/8IB3f/BAAAB0AAAAcsAAAHHAAABxQAAAcMAAAG7AAABvf8W/wf/Bf74/usB/wAAAAD+Zf5EATT92P3X/cn9tP2o/af9ov2d/YoAAAAPAA4AAAAA/QoAAP/v/P78+wAA/LoAAPyyAAD8pwAA/KEAAPyZAAD8kQAA/zkAAP82AAD8XgAA5fPls+Vk5Y/k+OWN5Y7hcuFz4W8AAOFs4WvhaeFh47rhWeOy4VDhIuEdAADhAgAA4P3g9uD14K7goeCf4JTflOCJ4F3fut6s367frd+m36Pfl99732TfYdv9E8cLBwbLAtMB1wABAAAAAAAAAAAAAAAAAAAAAADkAAAA7gAAARgAAAEyAAABMgAAATIAAAF0AAAAAAAAAAAAAAAAAAABdAF+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAXQBkAAAAagAAAAAAAABwAAAAggAAAIwAAACUgAAAmIAAAKOAAACmgAAAr4AAALOAAAC4gAAAAAAAAAAAAAAAAAAAAAAAAAAAtIAAAAAAAAAAAAAAAAAAAAAAAAAAALCAAACwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQApECkgKTApQClQCBAowCoAKhAqICowKkAqUAggCDAqYCpwKoAqkCqgCEAIUCqwKsAq0CrgKvArAAhgCHArsCvAK9Ar4CvwLAAIgAiQLBAsICwwLEAsUAigKLAIsAjAKNAI0C9AL1AvYC9wL4AvkAjgL6AvsC/AL9Av4C/wMAAwEAjwCQAwIDAwMEAwUDBgMHAwgAkQCSAwkDCgMLAwwDDQMOAJMAlAMdAx4DIQMiAyMDJAKOAo8ClgKxAzwDPQM+Az8DGwMcAx8DIACuAK8DlwCwA5gDmQOaALEAsgOhA6IDowCzA6QDpQC0A6YDpwC1A6gAtgOpALcDqgOrALgDrAC5ALoDrQOuA68DsAOxA7IDswO0AMQDtgO3AMUDtQDGAMcAyADJAMoAywDMA7gAzQDOA/UDvgDSA78A0wPAA8EDwgPDANQA1QDWA8UD9gPGANcDxwDYA8gDyQDZA8oA2gDbANwDywPEAN0DzAPNA84DzwPQA9ED0gDeAN8D0wPUAOoA6wDsAO0D1QDuAO8A8APWAPEA8gDzAPQD1wD1A9gD2QD2A9oA9wPbA/cD3AECA90BAwPeA98D4APhAQQBBQEGA+ID+APjAQcBCAEJBJID+QP6ARcBGAEZARoD+wP8A/4D/QEoASkBKgErBJEBLAEtAS4BLwEwBJMElAExATIBMwE0A/8EAAE1ATYBNwE4BJUElgQBBAIEiASJBAMEBASXBJgEkAFMAU0EjgSPBAUEBgQHAU4BTwFQAVEBUgFTAVQBVQSKBIsBVgFXAVgEEgQRBBMEFAQVBBYEFwFZAVoEjASNBCwELQFbAVwBXQFeBJkEmgFfBC4EmwFvAXABgQGCBJ0EnAGnBIcBrQAAQEqZmJeWh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNRUE9OTUxLSklIR0YoHxAKCSwBsQsKQyNDZQotLACxCgtDI0MLLSwBsAZDsAdDZQotLLBPKyCwQFFYIUtSWEVEGyEhWRsjIbBAsAQlRbAEJUVhZIpjUlhFRBshIVlZLSwAsAdDsAZDCy0sS1MjS1FaWCBFimBEGyEhWS0sS1RYIEWKYEQbISFZLSxLUyNLUVpYOBshIVktLEtUWDgbISFZLSywAkNUWLBGKxshISEhWS0ssAJDVFiwRysbISEhWS0ssAJDVFiwSCsbISEhIVktLLACQ1RYsEkrGyEhIVktLCMgsABQiopksQADJVRYsEAbsQEDJVRYsAVDi1mwTytZI7BiKyMhI1hlWS0ssQgADCFUYEMtLLEMAAwhVGBDLSwBIEewAkMguBAAYrgQAGNXI7gBAGK4EABjV1pYsCBgZllILSyxAAIlsAIlsAIlU7gANSN4sAIlsAIlYLAgYyAgsAYlI2JQWIohsAFgIxsgILAGJSNiUlgjIbABYRuKISMhIFlZuP/BHGCwIGMjIS0ssQIAQrEjAYhRsUABiFNaWLgQALAgiFRYsgIBAkNgQlmxJAGIUVi4IACwQIhUWLICAgJDYEKxJAGIVFiyAiACQ2BCAEsBS1JYsgIIAkNgQlkbuEAAsICIVFiyAgQCQ2BCWbhAALCAY7gBAIhUWLICCAJDYEJZuUAAAQBjuAIAiFRYsgIQAkNgQlmxJgGIUVi5QAACAGO4BACIVFiyAkACQ2BCWblAAAQAY7gIAIhUWLICgAJDYEJZsSgBiFFYuUAACABjuBAAiFRYuQACAQCwAkNgQllZWVlZWVmxAAJDVFhACgVACEAJQAwCDQIbsQECQ1RYsgVACLoBAAAJAQCzDAENARuxgAJDUliyBUAIuAGAsQlAG7gBALACQ1JYsgVACLoBgAAJAUAbuAGAsAJDUliyBUAIuAIAsQlAG7IFQAi6AQAACQEAWVlZuEAAsICIVblAAAIAY7gEAIhVWlizDAANARuzDAANAVlZWUJCQkJCLSxFsQJOKyOwTysgsEBRWCFLUViwAiVFsQFOK2BZGyNLUViwAyVFIGSKY7BAU1ixAk4rYBshWRshWVlELSwgsABQIFgjZRsjWbEUFIpwRbBPKyOxYQYmYCuKWLAFQ4tZI1hlWSMQOi0ssAMlSWMjRmCwTysjsAQlsAQlSbADJWNWIGCwYmArsAMlIBBGikZgsCBjYTotLLAAFrECAyWxAQQlAT4APrEBAgYMsAojZUKwCyNCsQIDJbEBBCUBPwA/sQECBgywBiNlQrAHI0KwARaxAAJDVFhFI0UgGGmKYyNiICCwQFBYZxtmWWGwIGOwQCNhsAQjQhuxBABCISFZGAEtLCBFsQBOK0QtLEtRsUBPK1BbWCBFsQFOKyCKikQgsUAEJmFjYbEBTitEIRsjIYpFsQFOKyCKI0REWS0sS1GxQE8rUFtYRSCKsEBhY2AbIyFFWbEBTitELSwjRSCKRSNhIGSwQFGwBCUgsABTI7BAUVpasUBPK1RaWIoMZCNkI1NYsUBAimEgY2EbIGNZG4pZY7ECTitgRC0sAS0sAC0sBbELCkMjQ2UKLSyxCgtDI0MLAi0ssAIlY2awAiW4IABiYCNiLSywAiVjsCBgZrACJbggAGJgI2ItLLACJWNnsAIluCAAYmAjYi0ssAIlY2awIGCwAiW4IABiYCNiLSwjSrECTistLCNKsQFOKy0sI4pKI0VksAIlZLACJWFksANDUlghIGRZsQJOKyOwAFBYZVktLCOKSiNFZLACJWSwAiVhZLADQ1JYISBkWbEBTisjsABQWGVZLSwgsAMlSrECTiuKEDstLCCwAyVKsQFOK4oQOy0ssAMlsAMlirBnK4oQOy0ssAMlsAMlirBoK4oQOy0ssAMlRrADJUZgsAQlLrAEJbAEJbAEJiCwAFBYIbBqG7BsWSuwAyVGsAMlRmBhsIBiIIogECM6IyAQIzotLLADJUewAyVHYLAFJUewgGNhsAIlsAYlSWMjsAUlSrCAYyBYYhshWbAEJkZgikaKRmCwIGNhLSywBCawBCWwBCWwBCawbisgiiAQIzojIBAjOi0sIyCwAVRYIbACJbECTiuwgFAgYFkgYGAgsAFRWCEhGyCwBVFYISBmYbBAI2GxAAMlULADJbADJVBaWCCwAyVhilNYIbAAWRshWRuwB1RYIGZhZSMhGyEhsABZWVmxAk4rLSywAiWwBCVKsABTWLAAG4qKI4qwAVmwBCVGIGZhILAFJrAGJkmwBSawBSawcCsjYWWwIGAgZmGwIGFlLSywAiVGIIogsABQWCGxAk4rG0UjIVlhZbACJRA7LSywBCYguAIAYiC4AgBjiiNhILBdYCuwBSURihKKIDmKWLkAXRAAsAQmY1ZgKyMhIBAgRiCxAk4rI2EbIyEgiiAQSbECTitZOy0suQBdEACwCSVjVmArsAUlsAUlsAUmsG0rsV0HJWArsAUlsAUlsAUlsAUlsG8ruQBdEACwCCZjVmArILAAUliwUCuwBSWwBSWwByWwByWwBSWwcSuwAhc4sABSsAIlsAFSWliwBCWwBiVJsAMlsAUlSWAgsEBSWCEbsABSWCCwAlRYsAQlsAQlsAclsAclSbACFzgbsAQlsAQlsAQlsAYlSbACFzhZWVlZWSEhISEhLSy5AF0QALALJWNWYCuwByWwByWwBiWwBiWwDCWwDCWwCSWwCCWwbiuwBBc4sAclsAclsAcmsG0rsAQlsAQlsAQmsG0rsFArsAYlsAYlsAMlsHErsAUlsAUlsAMlsAIXOCCwBiWwBiWwBSWwcStgsAYlsAYlsAQlZbACFziwAiWwAiVgILBAU1ghsEBhI7BAYSMbuP/AUFiwQGAjsEBgI1lZsAglsAglsAQmsAIXOLAFJbAFJYqwAhc4ILAAUliwBiWwCCVJsAMlsAUlSWAgsEBSWCEbsABSWLAGJbAGJbAGJbAGJbALJbALJUmwBBc4sAYlsAYlsAYlsAYlsAolsAolsAclsHErsAQXOLAEJbAEJbAFJbAHJbAFJbBxK7ACFzgbsAQlsAQluP/AsAIXOFlZWSEhISEhISEhLSywBCWwAyWHsAMlsAMliiCwAFBYIbBlG7BoWStksAQlsAQlBrAEJbAEJUkgIGOwAyUgY1GxAAMlVFtYISEjIQcbIGOwAiUgY2EgsFMrimOwBSWwBSWHsAQlsAQmSrAAUFhlWbAEJiABRiMARrAFJiABRiMARrAAFgCwACNIAbAAI0gAILABI0iwAiNIASCwASNIsAIjSCOyAgABCCM4sgIAAQkjOLECAQewARZZLSwjEA0MimMjimNgZLlAAAQAY1BYsAA4GzxZLSywBiWwCSWwCSWwByawdisjsABUWAUbBFmwBCWwBiawdyuwBSWwBSawBSWwBSawdiuwAFRYBRsEWbB3Ky0ssAclsAolsAolsAgmsHYrirAAVFgFGwRZsAUlsAcmsHcrsAYlsAYmsAYlsAYmsHYrCLB3Ky0ssAclsAolsAolsAgmsHYriooIsAQlsAYmsHcrsAUlsAUmsAUlsAUmsHYrsABUWAUbBFmwdystLLAIJbALJbALJbAJJrB2K7AEJrAEJgiwBSWwByawdyuwBiWwBiawBiWwBiawdisIsHcrLSwDsAMlsAMlSrAEJbADJUoCsAUlsAUmSrAFJrAFJkqwBCZjiopjYS0ssV0OJWArsAwmEbAFJhKwCiU5sAclObAKJbAKJbAJJbB8K7AAULALJbAIJbAKJbB8K7AAUFRYsAclsAslh7AEJbAEJQuwCiUQsAklwbACJbACJQuwByUQsAYlwRuwByWwCyWwCyW4//+wdiuwBCWwBCULsAclsAolsHcrsAolsAglsAgluP//sHYrsAIlsAIlC7AKJbAHJbB3K1mwCiVGsAolRmCwCCVGsAglRmCwBiWwBiULsAwlsAwlsAwmILAAUFghsGobsGxZK7AEJbAEJQuwCSWwCSWwCSYgsABQWCGwahuwbFkrI7AKJUawCiVGYGGwIGMjsAglRrAIJUZgYbAgY7EBDCVUWAQbBVmwCiYgELADJTqwBiawBiYLsAcmIBCKOrEBByZUWAQbBVmwBSYgELACJTqKigsjIBAjOi0sI7ABVFi5AABAABu4QACwAFmKsAFUWLkAAEAAG7hAALAAWbB9Ky0siooIDYqwAVRYuQAAQAAbuEAAsABZsH0rLSwIsAFUWLkAAEAAG7hAALAAWQ2wfSstLLAEJrAEJggNsAQmsAQmCA2wfSstLCABRiMARrAKQ7ALQ4pjI2JhLSywCSuwBiUusAUlfcWwBiWwBSWwBCUgsABQWCGwahuwbFkrsAUlsAQlsAMlILAAUFghsGobsGxZKxiwCCWwByWwBiWwCiWwbyuwBiWwBSWwBCYgsABQWCGwZhuwaFkrsAUlsAQlsAQmILAAUFghsGYbsGhZK1RYfbAEJRCwAyXFsAIlELABJcWwBSYhsAUmIRuwBiawBCWwAyWwCCawbytZsQACQ1RYfbACJbCCK7AFJbCCKyAgaWGwBEMBI2GwYGAgaWGwIGEgsAgmsAgmirACFziKimEgaWFhsAIXOBshISEhWRgtLEtSsQECQ1NaWCMQIAE8ADwbISFZLSwjsAIlsAIlU1ggsAQlWDwbOVmwAWC4/+kcWSEhIS0ssAIlR7ACJUdUiiAgEBGwAWCKIBKwAWGwhSstLLAEJUewAiVHVCMgErABYSMgsAYmICAQEbABYLAGJrCFK4qKsIUrLSywAkNUWAwCiktTsAQmS1FaWAo4GwohIVkbISEhIVktLLCYK1gMAopLU7AEJktRWlgKOBsKISFZGyEhISFZLSwgsAJDVLABI7gAaCN4IbEAAkO4AF4jeSGwAkMjsCAgXFghISGwALgATRxZioogiiCKI7gQAGNWWLgQAGNWWCEhIbABuAAwHFkbIVmwgGIgXFghISGwALgAHRxZI7CAYiBcWCEhIbAAuAAMHFmKsAFhuP+rHCMhLSwgsAJDVLABI7gAgSN4IbEAAkO4AHcjeSGxAAJDirAgIFxYISEhuABnHFmKiiCKIIojuBAAY1ZYuBAAY1ZYsAQmsAFbsAQmsAQmsAQmGyEhISG4ADiwACMcWRshWbAEJiOwgGIgXFiKXIpaIyEjIbgAHhxZirCAYiBcWCEhIyG4AA4cWbAEJrABYbj/kxwjIS0AAED/fjR9VXw+/x97O/8fej3/H3k7QB94PP8fdzw9H3Y1Bx91Ov8fdDpnH3M5Tx9yOf8fcTb/H3A4zR9vOP8fbjdeH203zR9sN/8fazctH2o3GB9pNP8faDL/H2cyzR9mM/8fZTH/H2Qw/x9jMKsfYjBnH2Eu/x9gLoAfXy//H14vkx9dLf8fXCz/H1sr/x9aKs0fWSr/H1gqDR9XKf8fVij/H1UnJB9UJy0fUyVeH1Il/x9RJasfUCb/H08mgB9OJP8fTSMrH0wjqx9LI/8fSiNWH0kjKx9IIv8fRyD/H0Ygch9FIf8fRCFyH0Mf/x9CHpMfQR7/H0Ad/x8/HP8fPTuTQOofPDs0Hzo1Dh85NnIfODZPHzc2Ih82NZMfMzJAHzEwch8vLkofKypAHycZBB8mJSgfJTMbGVwkGhIfIwUaGVwiGf8fISA9HyA4GBZcHxgtHx4X/x8dFv8fHBYHHxszGRxbGDQWHFsaMxkcWxc0FhxbFRk+FqZaEzESVRExEFUSWRBZDTQMVQU0BFUMWQRZHwRfBAIPBH8E7wQDD14OVQs0ClUHNAZVATEAVQ5ZClkGWX8GAS8GTwZvBgM/Bl8GfwYDAFkvAAEvAG8A7wADCTQIVQM0AlUIWQJZHwJfAgIPAn8C7wIDA0BABQG4AZCwVCtLuAf/UkuwCVBbsAGIsCVTsAGIsEBRWrAGiLAAVVpbWLEBAY5ZhY2NAB1CS7CQU1iyAwAAHUJZsQICQ1FYsQQDjllzdAArACsrK3N0ACtzdHUAKwArACsrKysrc3QAKwArKysAKwArKysBKwErASsBKwErASsrACsrASsrASsAKwArASsrKysrASsrACsrKysrKysBKysAKysrKysrKwErACsrKysrKysrKysrKysBKysAKysrKysrKysrKwErKysrKysrACsrKysrKysrKysrKysrKysrKysrKxgAAAYAABUFsAAUBbAAFAQ6ABQAAP/sAAD/7AAA/+z+YP/1BbAAFQAA/+sAAAC9AMAAnQCdALoAlwCXACcAwACdAIYAvACrALoAmgDTALMAmQHgAJYAugCaAKkBCwCCAK4AoACMAJUAuQCpABcAkwCaAHsAiwChAN4AoACMAJ0AtgAnAMAAnQCkAIYAogCrALYAvwC6AIIAjgCaAKIAsgDTAJEAmQCtALMAvgHJAf0AlgC6AEcAmACdAKkBCwCCAJkAnwCpALAAgQCFAIsAlACpALUAugAXAFAAYwB4AH0AgwCLAJAAmACiAK4A1ADeASYAewCJAJMAnQClALQEjQAQAAAAAAAyADIAMgAyADIAXQB/ALYBNQHEAj8CVQKIArsC6AMHAyIDNANRA2UDuwPVBBkEiwS4BQoFbAWKBgQGZQZxBn0GpAbBBugHQAfzCCoIkgjcCSEJVgmCCdYKAQoWCkUKeQqaCs8K9AtDC3wL1wwgDIgMqAzaDQANQQ1uDZMNww3fDfMODw40DkUOWQ7LDyUPcA/KEB8QUhDDEQARKRFmEZsRsRIVElMSoBL7E1YTjBPrFB4UWhR/FMIU7hUqFVgVpRW5FggWSxZyFtMXIxeJF9MX7xiNGMAZRRmiGa4ZzRp1GocavhrmGyIbiBucG+AcARweHEkcYhynHLMcxBzVHOYdPR2OHaweCh5JHq8fWx/DIAIgXSC6IR4hUyFoIZshyCHqIioifSLyI4kjsSQFJFkkwSUhJWYltiXeJjAmUSZwJngmnia8Ju4nGydaJ3knqSe9J9In2ygJKCUoQihWKJconyi4KOgpRyltKZcptinuKkkqjSr2K2or1iwELHcs6S0+LXwt4C4JLlwu1S8RL2cvtzASMEUwgjDaMSAxkTH7MlQy0TMgM3cz2jQpNG00lDTdNTQ1gDXyNhY2UTaONuc3EzdNN3U3qTfsODE4azjCOSk5bTnkOlA6aTqwOv87bzuTO8Y8ATwyPF08hjykPUQ9bz2oPc8+Az5HPow+xj8cP4M/yEArQIBA4kEyQXhBn0H9QlxCokMDQ2VDoUPaRC5EgEToRU5FzEZKRtNHWEfCSBhITkiGSPJJWkoRSsdLOUusS/ZMPkxsTIpMukzQTOVNmE3sTghOJE5nTq9PG08/T2NPo0/hT/RQB1ATUCZQZVCjUN9RG1EuUUFRdlGrUe9SPFKzUyZTOVNMU4JTuFPLU95UJ1RvVKlVElV6VcdWEVYkVjdWclavVsJW1VboVvtXT1efV+9X/lgNWBlYJVhcWLlZNlm0WjBaplsbW3xb4FwvXINc1F0kXWldrl4iXi5eOl5lXmVeZV5lXmVeZV5lXmVeZV5lXmVeZV5lXmVebV51XodemV61XtFe7V8IXyNfL187X2lfil+4X9df41/zYBBg2GD7YRthMmE7YURhTWFWYV9haGFxYaphs2G8YcVhzmHXYeBh6WHyYftiBGJcYpdi+GMEY15jq2QFZFZkq2TuZS9lcGX7Zk5muWb3Z0VnW2dsZ4JnmGgGaCNoWmhsaJhpMmlvac5p/WoxamZqmWqmasRq4GrsayhraGvLbDVsmG1QbVBubm60bu5vE29Wb69wKnBFcJ1w5nEPcX1xvHHVciJyUHKBcqty7nMQc0BzXnPBdAR0YHSYdOV1B3U5dVZ1h3WzdcZ18HZAdmx26Hc5d3h3lXfFeB14P3hoeI54x3kaeWB5yXoWeml6xXsRe1N7hnvJfBN8ZHzSfP59MX1rfaV92n4RfkN+hX7FftF/B39af76AC4A2gJKA0IEQgUuBvoHKggKCQIKFgruDG4Nsg7uEHYR5hNGFPoWBhd2GBoZHhpmGs4cfh3GHg4fAh/OIoIkAiV6JkonFifaKK4psirSLG4tLi2iLlovVi/qMIYxijKqM1o0FjVaNX41ojXGNeo2DjYyNlY3ijjmOe47OjzCPT4+Tj9mQA5BQkGyQwpDUkU6Rs5HYkeCR6JHwkfiSAJIIkhCSGJIgkiiSMJI4kkCSUpJaksOTD5Mtk4eT0pQslJ2U6pVFlaCV8ZZhlrCWuJcsl1mXqpfjmD+YcZi1mLWYvZkOmV+ZpZnNmg2aIJozmkaaWZptmoGal5qqmr2a0JrjmvebCpsdmzCbRJtXm2qbfZuQm6Obt5vKm92b8JwEnBecKpw9nE+cYZx1nImcn5yynMWc2JzqnP6dEJ0inTWdSZ1bnW6dgZ2TnaWduZ3Mnd+d8Z4FnhieK54+nlCeY552ns+fYp91n4ifm5+tn8Cf05/mn/igC6AeoDGgQ6BWoGmgfKCPoOuhY6F2oYihm6GtocCh06HmofmiDaIgojOiRqJZomyif6KSoqWiuKLKotyi76L7owejGqMto0GjVaNoo3ujj6Ojo7ajyaPVo+Gj9KQHpBukL6RCpFSkZ6R6pIykn6SypMak2qTtpQClFKUopTulTaVgpXOlhqWYpaulvqXSpeal+aYLph+mM6ZGplmmbKaAppOmpaa4psqm3abwpwSnGKcsp0Cnl6f6qA2oIKgzqEWoWahsqH+okqilqLioyqjdqPCpA6kWqSKpLqk5qUypX6lxqYOpl6mrqbepw6nWqemp+6oOqiCqMqpFqlmqbKp/qpKqpaq4qsyq36ryqwSrGKsrqz2rUKukq7eryavcq++sAawTrCWsOKyQrKKstKzHrNqs7q0BrRStJ606rUWtV61qrXatiK2craittK3HrdOt5q35rgyuIK4zrj+uUa5krnaugq6Urqiuuq7Grtiu6q79rxGvJa97r46voK+zr8av2a/rr/6wErAesDKwRrBZsG2wgrCKsJKwmrCisKqwsrC6sMKwyrDSsNqw4rDqsPKxBrEasS2xQLFTsWWxebGBsYmxkbGZsaGxtLHHsdqx7bIAshSyJ7KNspWyqbKxsrmyzLLfsuey77L3sv+zErMasyKzKrMyszqzQrNKs1KzWrNis3WzfbOFs82z1bPds/G0BLQMtBS0KLQwtEO0VbRotHu0jrShtLW0ybTctO+097T/tQu1HrUmtTm1TLVhtXa1ibWcta+1wrXKtdK15rX6tga2ErYltji2S7Zetma2brZ2tom2nLaktre2yrbetvK2+rcCtxW3KLc8t0S3WLdst4C3lLent7q3zLfgt/S4CLgcuCS4LLhAuFS4aLh8uI+4obi1uMi43LjwuQS5F7kruT+5R7lbuW+5grmVuam5vLnQueO597oKuh66MbpOumq6frqSuqa6urrOuuK69rsKuye7RLtYu2y7f7uSu6W7t7vLu9678rwFvBm8LLxAvFO8cLyMvJ+8srzGvNq87r0CvRW9KL08vU+9Y712vYq9nb2xvcS94b39vhC+I742vkm+XL5vvoK+lL6ovry+0L7kvve/Cr8dvzC/Q79Wv2m/fL+Pv6G/tb/Jv92/8cAEwBfAKsA8wFnAbMB/wJLApcC4wMvA3sDxwPnBPMF+waPByMIJwkzCfMKxwujDH8MnwzvDQ8NLw1PDW8Njw2vDc8N7w4PDlsOpw7zDz8Pjw/fEC8QfxDPER8RbxG/Eg8SXxKvEv8TLxN/E88UHxRvFL8VDxVfFa8V+xZHFpcW5xc3F4cX1xgnGHcYxxkXGWMZrxn/Gk8anxrvGz8bjxvfHCsccxzDHRMdYx2zHgMeUx6jHtMfAx8zH2Mfkx/DH/MgEyAzIFMgcyCTILMg0yDzIRMhMyFTIXMhkyGzIgMiTyKbIucjByMnI3cjlyPjJCskSyRrJIskqyT3JRclNyVXJXcllyW3Jdcl9yfnKLcqAyojKlMqnyrnKwcrNyuDK88r/yxLLJcs5y0XLWMtry37Lkcudy6nLvQAGAGQAAAMoBbAAAwAHAAsADwATABcAAEEVITUzESMRIREjERMVITUBASMBEQEzAQMJ/XYbNgLENhf9dgKK/a86AlH9rzoCUQWwNjb6UAWw+lAFsPqGNjYFXPqMBXT6jAV0+owAAgBE//IB9AWwAAMADwATQAkCAgcNC3IAAnIAKyvdzi8wMUEDIxMDNjY3NhYHFAYHBiYB9MKkqPIBOy8uPQE9Li48BbD76wQV+qovPwEBPC4uPgEBOgACAMkEEwKnBgAABQALAAyzCQMLBQAvM80yMDFBBwMjEzchBwMjEzcBoRdTbjcXAZAXU244FgYAkv6lAVyRkv6lAWOKAAQAUgAABPsFsAADAAcACwAPACNAEQQABQ0ODgAKCQkAAgJyABJyACsrETkvMxE5LzMyETMwMXMBMwEzATMBASE3IQMhNyGkAg+S/e/7AhCQ/fACJPwOGAPytvwNGAPzBbD6UAWw+lADhYv9iooAAwBJ/zAELgacAAMABwA9ADZAHAQHOjoIKxAjBBQvNTUGLw1yAQIfHxQaGgMUBXIAK80zLxEzEjk5K80zLxESFzkzEjk5MDFBAyMTAwMjEwE2JiYnLgI3PgIXHgMHIzYuAicmBgYHBhYWFx4CBw4CJy4DNzMGHgIXFjY2AzoxkzF+KpIqAYQJPmw8ZJ9XCAmAzHxnkVciBrQEDSpQP0t1SAkIPW4/Y51VCAqO3YBlmWUvBrYEFTVZQE2HWgac/s8BMfmf/vUBCwFDSWRDFyZuonV+uGIDAkyBqF40a1o4AgI6bEpNZEIZJ22hdIe2WwICQ3mjYjtnTy0CATVtAAAFALr/6AUxBcgAEQAjADUARwBLACNAEUkySwU7RCkyFw4gBQVyMg1yACsrMsQyEMQyMxEzETMwMVM3PgIXHgIHBw4CJy4CNwcGFhYXFjY2Nzc2JiYnJgYGATc+AhceAgcHDgInLgI3BwYWFhcWNjY3NzYmJicmBgYBAScBvwcJVotZVXc7BgYJVotYVHg8lgkDFjoyNEwtBwkDFTkzNE0uAYsHCFeLWFV3OwUHCVWLWFV3PJYHAxU5MjVMLQcJAxY6MjVMLgFd/JBjA3EES0xVi1ECAlOIUU1ViVACAlKHnk8rUTQCATNTL04sUjYBATNU/E9NVYtQAgJTh1FOVYpQAgJTh59RK1E1AQIzVDBPLFI1AQEzUwNF+5dIBGgAAQA5/+oEgQXHAEIAJEAUIxIADyIBBhowMCsRETsTcgcaA3IAKzIrMi8yMi8RFzkwMUE3NjY3NiYnIgYGBwYWFhcBIwEuAjc+AhceAgcOAgcFDgIHBhYWFxY+AjczDgIHBgYHBgYnLgI3PgIBpew9XggHVkE5VzUGByQ8HAIby/5GLFw7BQhnrG5VjlEFBENmOf7FK1Q9Bwo2bktssYVSDqALPGJCCQ8JSudtdr5qCQhvngMomyhiTUJSATpeNjZnXyv8xgKkQYuYU22lWgMCSoVaSnZeKNceS1w3THA/AgNfocFfZKeVSQoXClNPAgNis3xnmXYAAQCsBCIBigYAAAUACLEDBQAvxjAxQQcDIxM3AYoTTH88EAYAdf6XAXhmAAABAG3+KgMUBmwAFwAIsQYTAC8vMDFTNzYSEjY3Fw4CAgcHBgISFhcHJiYCAn8CFmCb2Y0cbqJxSBQCEAweXVoud5BECAJBC5MBOAEj7EZ8UdTz/vuCD2v+/v7851FvUvgBIwEoAAAB/5D+KQI3BmsAFwAIsRMGAC8vMDFBBwYCAgYHJz4CEjc3NhICJic3FhYSEgIlAhVhmtmOHG2ickgUAw8LIFxYL3aPRQgCVQuT/sf+3exGclPW9wEHgw9qAQABBudQcFP4/t7+2QABAGsCYAOLBbEADgAUQAoNAQcEBA4MBgJyACvEMhc5MDFTEyU3BRMzAyUXBRMHAwOP8f7rRQEWM5VGATAT/sWSgILfAswBEFqPcAFc/qdtoFv+7VcBIf7qAAACAEwAkgQ0BLYAAwAHABC1BwcDAwYCAC/GMxDGLzAxQQchNwEDIxMENB78Nh8Cibi1uAMNrq4BqfvcBCQAAAH/j/7dAOsA3AAKAAixBAAAL80wMXcHBgYHJz4CNzfrGBF4V2QjOikLGtyUbbxCSytZYjaYAAEAGgIfAhACtwADAAixAwIALzMwMUEHITcCEBv+JRsCt5iYAAEANP/yARUA1AALAAqzAwkLcgArMjAxdzQ2NzYWBxQGBwYmNT8xMT8BPzEwQF8xQgEBPjExQAEBPAAB/5D/gwOTBbAAAwAJsgACAQAvPzAxQQEjAQOT/KGkA2AFsPnTBi0AAgBq/+gEIAXIABcALwATQAkrBh8SBXIGDXIAKysyETMwMUEHDgMnLgM2Nzc+AxceAwYDEzY2LgInJg4CBwMGBh4CFxY+AgQUIhJFe8GMa4xRIQELIRFHe8GKa41RIgHmKwYJCSdSRV18TSoLKgYJCSZRRV59TCoDTN1257xuBAJPhKSzVt525LdrBAJMgKKx/q0BHTJ2dWM+AwRTiaBL/uQweHlnQQMEVo2kAAEA+gAAA1QFuAAGAAy1BgRyAQxyACsrMDFBAyMTBTclA1T4tdb+fSACGgW4+kgEzIevxAABABgAAAQnBccAHwAZQAwQEAwVBXIDHx8CDHIAKzIRMysyMi8wMWUHITcBPgI3NiYmJyYGBgcHPgIXHgIHDgMHAQPOGPxiFgIaN3xeCwgqYEhdiFMNsg2L3ohxtGELBkJhcDb+Q5iYjQIMN36QU0RxRQIDTIhXAYjMbwMCW6p3To+DdDP+WQAAAgA1/+oEGgXHABwAOwAqQBYbHB4fBAAAHR0SMy8vKQ1yDQ0JEgVyACsyMi8rMi8yETkvMxIXOTAxQRc+Ajc2JiYnJgYGBwc+AhceAgcOAyMnBzcXHgMHDgMnLgM3FwYWFhcWNjY3NiYmJwGdeVGNXQkIKGBNTntPDLMMidJ5eLJaCQdai6RRpQYSjlaZczwHCFOHrWNalm04BLQFNGlNVoZRCAk7dVADMwIBOXJWSm9AAgE+cksBe7ZjAgJltXpbiFwuAShvAQIsV4hfZKJyOwICOmmVXAFLcEACAkR+VlRwOgIAAgAFAAAEHgWwAAcACwAdQA4DBwcGAgIFCQxyCwUEcgArMisSOS85MxI5MDFBByE3ATMDAQEDIxMEHhv8AhUDIJ/U/e4DDfy1/QHqmHcD5/7V/WUDxvpQBbAAAQBy/+gEawWwACkAHUAOJwkJAh0ZGRMNcgUCBHIAKzIrMi8yETkvMzAxQScTIQchAzY2Fx4DBw4DJy4DJzMeAhcWPgI3Ni4CJyYGAXGVuALXG/3FcDZ5P2WPWCIICU6DtG5bj2U4BKoFM2RNSXBQLgcGFDZcQkhxArYoAtKr/nMgIAEBUYirW2q1hkoDAT1sk1hIcUICATdge0I7b1k2AgIxAAABAG3/6QPyBbMANgAbQA0OLBgiIiwDAARyLA1yACsrMhE5LzMRMzAxQTMHIyYOAgcHBh4CFxY+Ajc2LgInJgYGByc+AxceAwcOAycuAzc3NhI2JAOjFRAMf8qWXhIeBwkrWEpHb04tBwYNLlRBT4lhFGAUTnOaYmKKVSEICkyBsG1vnF0hDAsZc8EBFwWznQFTl8t31ziHfFICAzpjez82cmI+AgJJe0kBWJp0PwMDUYemWGa3jU8DAmWkw2FXqgEt5oQAAQCdAAAEjQWwAAYAE0AJAQUFBgRyAwxyACsrMhEzMDFBBwEjASE3BI0S/OnHAxT9CBgFsHL6wgUYmAAABABA/+kEKwXHABAAIAAwAEAAIUAQDT09JS0VFQQ1LQVyHQQNcgArMisyEjkvEjkzEjkwMUEOAicuAjc+AxceAgc2JiYnJgYGBwYWFhcWNjYBDgInLgI3PgIXHgIHNiYmJyYGBgcGFhYXFjY2A8sKjt6Bd7lkCgdZjK1bcLtrvAcwaExUiFYJCC9oTlSIVQEVCYnOcWitYgcJgc57cqtZvgYpW0RMeEkIByhbRUx3SwGThsBkAwJktHxgmWo2AgJgrnJJeEkCAkuDUUxzQgICRH4C+natXgMCW6NtfrpjAwJir3ZAbUQBAkV4SUFtQgECRXcAAAEAlP/9BBAFxwA4ABtADQA4FiEhOAwrBXI4DHIAKysyETkvMxEzMDF3MxY+Ajc3Ni4CJyYOAgcGHgIXFj4CNzcOAycuAzc+AxceAwcHDgQjI94PgsmRWhIfBwcpWEtHb08uBgYNLVNCQHJbPw5WC05+oV1iilMgCAlNgLFud5xUGAwIEk5+s+6YF5oBS4zGe+A3i4BWAgM8Zn0/NnNlQAICMVZtOwFXpINMAgNUiqhXZrqQUQMDa6zMZEWK+M2WUwD//wAp//IBpARHBCYAEvUAAAcAEgCPA3P///+b/t0BjQRHBCcAEgB4A3MABgAQDAAAAgBCAMkDuARPAAQACQAWQAwBAwcGAAQIBQgCCQIALy8SFzkwMVMBBwE3JQEHNwHEAngh/ScTAz/9PIoVA10CoP7kuwF7bNL+6A96AXoAAgBwAY8D/wPPAAMABwAOtQYHEgMCEAA/Mz8zMDFBByE3AQchNwP/HfzWHALjHfzWHAPPoaH+YaGhAAIAOwDAA9UESAAEAAkAFUALBQgEAAYDAQcCCQIALy8SFzkwMUEBNwEHBQE3BwEDRP10IQL8FPyeAtmZFvyAAngBGbf+hW7XARcXe/6FAAIApf/yA7wFxwAgACwAG0ANAQEkJCoLchERDRYDcgArMjIvKzIRMy8wMUEHPgI3PgI3NiYmJyYGBgcHPgIXHgIHDgIHBgYBNjY3NhYHFAYHBiYB87IJN1pAMF9FCQceTj9BaEUNtA58v3Fvn08KCV+JRj0//vsBOy8vPAE8Ly48AZoBVoRwOStYaUU7YDoCAjBbPwFzpFUCA12mb2Gcgjoyfv5zLz8BATwvLj0BAToAAgBB/joGoAWZAEEAaAAnQBISBQVHUhNyYWRkC11dHR08KTAALzMvMxEzLzMzETMrMjIRMzAxQQ4DJy4DNxMzAwYGFhYXFj4CNzY2LgInJg4DBwYGHgIXFjY3FwYGJy4DAjc2EjY2JBceAxIFBgYWFhcWPgI3Fw4DJy4CNjc+BBcWFhcHJiYnJg4CBogPR3Oia0pbLQYLjZKLBggKKitNb0wtCxQCNHXAjIvswJJhGBUCM3K8iFirTxxQw12f55hPCxgbdK7kARWgnuaVTQv79wcKDDI2MlE/LxE5F0Vbc0dVXyYCCw04VnORWFKDP1ojVjNUfFU0AfxbvZ5fAwI/Zno9Aiz91B5NSTICA1GDkDt25ciaWQICWqHU8n1w4s2hXgEBKCZ0MiYBAmi06wELipEBGfW6ZwICaLTq/vbrJGBcQAICNFJcJkg5d2M7AgNWhJQ/SaGZfEgCATszXyQoAQNZjp4AAAP/rwAABIsFsAAEAAkADQApQBQEBwcKDQ0GAAsMDAIIAwJyBQIIcgArMisyETkvMzk5MxEzMhEzMDFBASMBMxMDNzMBAwchNwMs/UzJAxiBivETeAEfdhz85RwFJPrcBbD6UAU6dvpQAhuengAAAgA7//8EmgWwABkAMAApQBQZKSYCJycBJiYODA8CchwbGw4IcgArMhEzKzIROS8zMxEzEjk5MDFBITcFMjY2NzYmJiclAyMTBR4DBw4CBwMhNwUyNjY3NiYmJyU3BRceAgcOAgK0/o8ZATtNiV0KCjRrSP7i4b39AcNbm3A5CAh3s2DJ/kaFATpVkF8LCSpmT/7pHQFjH1p7OQYLlegCqZsBNmxSTl8rAgH67gWwAQItW45ja5JTDf0pnQE+eFhOcD0DAZsBOA5jlVmPv18AAAEAcP/oBPkFxwAnABVAChkVEANyJAAFCXIAK8wzK8wzMDFBNw4CJy4DNzc+AxceAhcjLgInJg4CBwcGHgIXFjY2A9y5HqX5moq7aSEQFRRpqeeTk8ZnBLoDNHZlbqV0Rg8WCwY1d2ZwnmgBzgKW3HYEA3jE7HiRhPXAbgMDftqNXJRYAwNYl7pflE+xnWUDBE6VAAACADsAAATPBbAAGgAeABtADQIBAR0ODw8eAnIdCHIAKysyETMRMxEzMDFhITcFMjY2Nzc2LgInJTcFHgMHBw4CBAMDIxMBxv7NHQEbn+mOFw0MEUqOcP62HAEyktGBLxAMFXzC/wBr/b39nQGL75ZaYLiVWwMBngEDcb70hleU+7hlBbD6UAWwAAAEADsAAASxBbAAAwAHAAsADwAdQA4LCgoGDw4HAnIDAgYIcgArMjIrMjIROS8zMDFlByE3AQMjEwEHITcBByE3A9oc/RMbAQn9vf0Csxv9dRwDUBz9HRydnZ0FE/pQBbD9jp2dAnKengAAAwA7AAAEpAWwAAMABwALABtADQcGBgIKCwsDAnICCHIAKysyETMROS8zMDFBAyMTAQchNwEHITcB9f29/QKbHP2GHANLHP0nHAWw+lAFsP1xnp4Cj56eAAEAdP/rBQUFxwArABtADSsqKgUZFRADciQFCXIAKzIrzDMSOS8zMDFBAw4CJy4DNzc+AxceAhcjLgInJg4CBwcGHgIXFjY2NxMhNwTOVjuvyF+Rx3QnERAUZafqmYvHcQq6B0F5WnKncUQPEQsLP4JrPXdsLzv+uBwC1f3rUl0mAQJ4xvSAcYn7w28DA27GiFaASAMEW5u/YnRVuaBlAgESLioBRpwAAAMAOwAABXcFsAADAAcACwAbQA0JBggDAgIGBwJyBghyACsrETkvMzIRMzAxQQchNxMDIxMhAyMTBGgc/QIci/29/QQ//bv8Az6dnQJy+lAFsPpQBbAAAQBJAAACAgWwAAMADLUAAnIBCHIAKyswMUEDIxMCAv28/QWw+lAFsAAAAQAH/+gERAWwABMAE0AJEAwMBwlyAgJyACsrMi8yMDFBEzMDDgInLgI3MwYWFhcWNjYC2bC7rxOI2IuBtVoJvAYoYlFXg1EBqAQI+/mHy28CA2i9gUx2RgIDTYQAAAMAOwAABVEFsAADAAkADQAcQBAGBwsFDAgGAgQDAnIKAghyACsyKzISFzkwMUEDIxMhAQE3AQEDATcBAfX9vf0EGf09/nMGASYCMsD+aYMB5QWw+lAFsP1X/pvdARcCGvpQAs+Q/KEAAgA7AAADsQWwAAMABwAVQAoDAgIGBwJyBghyACsrETMRMzAxZQchNwEDIxMDsRz9PRsBCP29/Z2dnQUT+lAFsAAAAwA7AAAGtwWwAAYACwAQABtADQIHDgULCHIMBAAHAnIAKzIyMisyMhE5MDFBMwEBMwEjATMDAyMBMwMjEwF3rgEBApvA/MWP/oGhgGK8Bdqi/btkBbD7XwSh+lAFsPyC/c4FsPpQAkIAAAEAOwAABXgFsAAJABdACwMIBQkHAnICBQhyACsyKzISOTkwMUEDIwEDIxMzARMFeP23/fjEvf22AgrFBbD6UARr+5UFsPuSBG4AAgBz/+kFEAXHABUAKwATQAknBhwRA3IGCXIAKysyETMwMUEHDgMnLgM3Nz4DFx4DBzc2LgInJg4CBwcGHgIXFj4CBQAMFGeo6peQwWshEA0TaanqlZLBah/XDQsGN3xtb6h1Rg4NCwc4fGtyqHNFAwZbhv7KdAMDfcz2fFuG/cp1AwN8zPbZX1W4oWYEA12fwGBfU7miaQQDXZ7CAAABADsAAATvBbAAFwAXQAsCAQEODA8Ccg4IcgArKzIROS8zMDFBJTcFMjY2NzYmJiclAyMTBR4CBw4CArT+ehwBb16dZwwLN3ZU/qjhvf0B/oLLbAwNnfUCOgGdAUCAY1V7RAMB+u4FsAEDZ8CJmshgAAADAGv/CgUIBccAAwAZAC8AGUAMIBUDcgArKwMKCXICAC8rMjIRMysyMDFlAQcBAQcOAycuAzc3PgMXHgMHNzYuAicmDgIHBwYeAhcWPgIDJQE9iv7IAlgNE2io6paRwWsgDw0TaanrlZHBax/YDQsFN31scKd1Rw4NCgY5fGtyqHNEp/7TcAEpAtNbh/7JdAMDfcz2fFyF/cp1AwN8y/fZX1W4oWYEA12fwGBfU7miaQQDXZ/BAAIAOwAABLwFsAAYAB0AI0ASGxoJAwwMCwsAHBkYCHIWAAJyACsyKzIyEjkvMxIXOTAxQQUeAgcOAgcHITcFMjY2NzYmJiclAyMhAzcTBwE4AciFzGsMCmuoZjj+PBoBQVibaQwLOHdU/t3hvQM/5br0AQWwAQNgu45xo20gFJ0BQH1cWHY+AgH67gKUAf14DQAAAQAp/+oEowXGADkAH0APCiYPNjExKwlyGBQUDwNyACsyLzIrMi8yETk5MDFBNi4CJy4DNz4DFx4CByc2JiYnJgYGBwYeAhceAwcOAycuAzcXBh4CFxY2NgNsCSxUaDRLkXRBBwhimLZdgcxyB7wHOnlYUJFkCwgwVWUuUJVzPQgJZJy6XmKvhkgFuwUoUXBDT5dqAXdCWT0pEhpGY4hbZZlmMgIDbcSFAVd9RAICNG1VO1Q6KA8bSWeOYGiYYS4CAT1yo2gBRmpHJQECMGoAAAIAqQAABQkFsAADAAcAFUAKAAMDBgcCcgEIcgArKzIyETMwMUEDIxMhByE3A0P8uv0Cfxz7vBwFsPpQBbCengABAGP/6AUcBbAAFQATQAkBEQYLAnIGCXIAKysRMzIwMUEzAw4CJy4CNxMzAwYWFhcWNjY3BGC8qBai+ZmR0WURqLqnCzF7ZGqjZxAFsPwpmOB5AwN825ID2fwmX5RXAwNRmGgAAgClAAAFYQWwAAQACQAXQAsABggBCQJyAwgIcgArMisyEjk5MDFlATMBIwMTFyMBAjECXdP9EZdx3RCM/trmBMr6UAWw+yXVBbAAAAQAwwAAB0EFsAAFAAoADwAVABtADRAMAQoCchMSDgQJCHIAKzIyMjIrMjIyMDFBATMDASMTEwMjAwEBMwEjAxMTIwMDAf8BtI6Q/jCNJkQFg3MESgFzwf3HjCxzHYN+EQHBA+/+bfvjBbD8Ev4+BbD8JgPa+lAFsPv//lEELgGCAAAB/9QAAAUrBbAACwAaQA4HBAoBBAkDCwJyBgkIcgArMisyEhc5MDFBEwEzAQEjAQEjAQEBnvwBquf9yQFT0v79/kvpAkT+tgWw/dMCLf0m/SoCOP3IAugCyAABAKgAAAUzBbAACAAXQAwEBwEDBgMIAnIGCHIAKysyEhc5MDFBEwEzAQMjEwEBde8B7uH9c128Yf66BbD9JgLa/Gb96gIrA4UAAAP/7AAABM4FsAADAAkADQAfQA8EDAwJDQJyBwMDAgIGCHIAKzIRMxEzKzIyETMwMWUHITcBASM3ATMjByE3BAwc/EMbBGb7s3sbBEt8Txz8dhydnZ0EfvrlmgUWnp4AAAEAAP7IAqMGgAAHAA60AwYCBwYALy8zETMwMUEHIwEzByEBAqMZuf77uhj+kgE0BoCY+XiYB7gAAQDA/4MCnwWwAAMACbIBAgAALz8wMUUBMwEB/P7EpAE7fQYt+dMAAAH/e/7IAiAGgAAHAA60BQQAAQQALy8zETMwMVM3IQEhNzMBlxkBcP7L/pAYugEFBeiY+EiYBogAAgBPAtkDEAWwAAQACQAWQAkIBwcGAAUCAwIAP80yOTkzETMwMUEBIwEzEwM3MxMCGP7osQGhdA1uAmijBND+CQLX/SkCC8z9KQAB/4H/aAMXAAAAAwAIsQIDAC8zMDFhByE3Axcb/IUbmJgAAQDQBNoCKwYAAAMACrIDgAIALxrNMDFBEyMDAZ6Njs0GAP7aASYAAAIAMf/pA8cEUAAbADoAKUAVKyweJx46Og8nMQtyGBkKcgkFDwdyACsyMisyKzISOS8zERI5OTAxZRM2JiYnJgYGBwc+AxceAgcDBgYXBwcmNhMHJyIOAgcGFhYXFjY2NxcOAycuAjc+AzMCrloHJVVAOGtODLQHWISYSG2hUgtTCQMOArcLAXUVqzZ4bEoIBidQNUWGZBNCE1Z1hkNbk1UGBmCXtFi5Ai8+XjQCASZMOgFReVEnAQJZoHD+CDdvNREBLl4CBYIBECxTQjZPLAEBOGhEWUJvUCwBAk6NXmeMVCUAAAMAH//oBAIGAAAEABoALwAZQA4hFgdyKwsLcgQKcgAAcgArKysyKzIwMUEzAwcjAQcOAycuAzc3PgMXHgMHNzYuAicmDgIHBwYWFhcWPgIBKrboMqcD2QINRXerc2iOUh4GCxFOfKpub4tIE8IDBwQnWU8/b1o/ECcCPG9KU3hRLwYA+sfHAiwVY8akYgMCXJW1W1xhupZXAwNmob5vFjyGdksCAi1RaTrzSH9PAwNHd5AAAAEARv/qA+IEUQAnABlADB0ZGRQHcgQEAAkLcgArMjIvKzIvMjAxZRY2Njc3DgInLgM3Nz4DFx4CFScuAicmDgIHBwYeAgHjQnJQEawQicVrcp9gJAoEDFKJvHVyqFyqATBeRVN7VTEJBQYJLmCDATRgPwFtpFsCAluYv2UrbcWZVgMCZ7BwAUBsQgMCQnOMSCpAhnNIAAMAR//oBHYGAAAEABoALwAZQA0hBAQWC3IrCwdyAQByACsrMisyLzIwMWUTMwEjATc+AxceAwcHDgMnLgM3BwYeAhcWNjY3NzYuAicmDgIC3OS2/vWl/YoCDUd6rnRojFEdBgsRTnurbmqLTRfDAgcFKFpNUoxkFicDID9bOFR6UzDdBSP6AAIJFWTIpmIDA1yXtFtcYbqVVgMEZqG7bxU8hXVLAwJOgkzzN2VQMQEDR3eQAAEARf/rA9oEUQArAB9AEGcTAQYTEhIAGQsHciQAC3IAKzIrMhE5LzNfXTAxRS4DNzc+AxceAwcHITcFNzYmJicmDgIHBwYeAhcWNjcXDgIB6m+jZywJBApSibtycZZVGgsL/O8YAlcDCiRfUFN6Ui8JBAYUOWZLW5E8Zy+CmhQCVZG6ZitoyaJfAwJcl7tiU5cBEEiGVwIDSXuRRSpAgmtDAgJTQFhFXi4AAgB1AAADUQYZABEAFQAVQAsUFQZyDQYBcgEKcgArKzIrMjAxYSMTPgIXFhYXByYmJyIGBgcXByE3AS21zA5kpnIhQiAWFzEYQF45Cs4Z/cYaBKttpVwBAQkHmAUGATVdPXKOjgAAAwAD/lEEKQRRABMAKQA+ABtADzAlC3I6GgdyDgYPcgAGcgArKzIrMisyMDFBMwMOAicuAic3FhYXFjY2NxMBNz4DFx4DBwcOAycuAzcHBh4CFxY2Njc3Ni4CJyYOAgODprUTh9mLSYx2KGgvgVNbjVkOjv0HAwxHeK50aYxRHQYLEU58q21ri0wWwgMHBihZTVKMZBYnAyA/WjlUelMwBDr73ofOcgMCLlQ9bENPAwJHhFkDR/60FmTIpWECA1yXtFtcYbqVVgMEZqG7bxY8hHVLAgNOgkzzN2ZQMAEDR3iQAAIAIAAAA9oGAAADABoAF0AMEQIWCgdyAwByAgpyACsrKzIRMzAxQQEjAQMnPgMXHgMHAyMTNiYmJyYOAgHg/vW1AQsYSg5Le6tuV3VCFgl2tngHF01ITHpbOQYA+gAGAPxGAmG7llcDAj9sjU/9OwLIQWk/AgI+a4MAAgAvAAAB5QXGAAMADwAQtwcNAwZyAgpyACsrzjIwMUEDIxMTNDY3NhYHFAYHBiYBoLy1vCQ7Ly89AT0uLjwEOvvGBDoBHC8/AQE8Li49AQE5AAL/E/5GAdYFxgARAB0AE0AJDQYPchUbAAZyACvOMisyMDFTMwMOAicmJic3FhYzMjY2NxM0Njc2FhUGBgcGJuG2zQxLhWIfPB4RFSoVMD8kB+87Ly88ATwuLj0EOvtFW45QAgEKCJUFBylGLAXXLz8BATwuLzwBATkAAwAgAAAEGwYAAAMACQANAB1AEQYHCwUMCAYCCQYDAHIKAgpyACsyKz8SFzkwMUEBIwkDNzcBAwE3AQHh/vW2AQsC8P3o/r0W2AGBdf7ccwF3BgD6AAYA/jr+EP7d1twBYfvGAg6b/VcAAAEALwAAAe8GAAADAAy1AwByAgpyACsrMDFBASMBAe/+9bUBCgYA+gAGAAAAAwAeAAAGYARRAAQAGwAyACFAESkSAi4iIhcLAwZyCwdyAgpyACsrKxEzMxEzETMzMDFBAyMTMwMnPgMXHgMHAyMTNiYmJyYOAiUHPgMXHgMHAyMTNiYmJyYOAgFolLa8rG9SDkh5rHFUdEcZB3m1eAgfVEhRd08wArCCDE18pGNYekkZCXe2eAgdVEo7YkgvA1j8qAQ6/gwCZbyUVAMCPWmITf0vAslEaD0CAjxphSAmXaaASAICPWqNUv05AspFaDsBAihJYAACACAAAAPaBFEABAAbABlADRICFwsDBnILB3ICCnIAKysrETMRMzAxQQMjEzMDJz4DFx4DBwMjEzYmJicmDgIBZ5K1vKt0Sg5Le6tuV3VCFgl2tngHF01ITHpbOQNI/LgEOv4MAmG7llcDAj9sjU/9OwLIQWk/AgI+a4MAAgBG/+kEFwRRABUAKwAQtxwRC3InBgdyACsyKzIwMVM3PgMXHgMHBw4DJy4DNwcGHgIXFj4CNzc2LgInJg4CTwMMVYzAdnKjZSgKAg1WjcB1caNkKMACBw0zYk5Tflk1CQIHDTNiTlN/WDUCCxdtyp5aAwJem8JnF23InFkDAl2awH0YP4h0SgICRXaQRxc/iXdLAgNHeJEAAAP/1/5gBAAEUQAEABoALwAZQA4hFgdyKwsLcgMGcgIOcgArKysyKzIwMUEDIwEzAQcOAycuAzc3PgMXHgMHNzYuAicmDgIHAwYWFhcWPgIBa962AQSmAnUCDUV2q3NlkFglBg4RUX6tbm+LSRLCAwcHK1tOPm9aQA8rAUBvR1N7VDIDX/sBBdr98hVix6RiAwJVja9cb2K7llUDA2WhvXAWPIZ1TAICLVFpOv77R3lKAgJHeZEAAwBG/mAEJwRRAAQAGgAvABlADiEWC3IrCwdyBA5yAwZyACsrKzIrMjAxQRM3MwEBNz4DFx4DBwcOAycuAzcHBh4CFxY2Njc3Ni4CJyYOAgJt4TGo/vv9LgMMSHmwdWiOUx8GCxFQfqxubI1NF8QDBwYqWk1Tj2YXJwIhQVw5VHtUMv5gBRXF+iYDqhVlyaRgAgNclrVbXGK6lVUDBGWgvG8VPIZ2TQMCUIVM8zdnUTIBA0h5kgACACAAAALRBFQABAAWABlADQYJCQUUB3IDBnICCnIAKysrMjIRMzAxQQMjEzMlByYmIyYOAgcHPgMXMhYBcp21vLABRREVKxVBZ083EDkLM1uLYhYrA4j8eAQ6Ca4EBgEpSmQ6HlGqkFgDCAABAC7/6wOzBE8ANQAXQAsbAA4yKQtyFw4HcgArMisyETk5MDFBNiYmJy4DNz4DFx4CByc2JiYnJgYGBwYeAhceAgcOAycuAjcXFBYWFxY2NgK8CT9lMDx6ZTsDBE17kkhmp2IDswIyWDg1ZkgIBiZDSx9SoGQFBFF/mExptWwDtTdiPzVvUQElPkYlDA8sRWdKUHpSKAECUJZrATlSLQEBI0k6KzchFQgXRntkVX1RJgECU51xAUFZLgEBHkcAAgBD/+0ClQVBAAMAFQATQAkKEQtyBAIDBnIAKzIvKzIwMUEHITcTMwMGFhYXMjY3BwYGJy4CNwKVGf3HGe60twMKJicWKxYNIEMhU14iBwQ6jo4BB/vJIzghAQcDmAkJAQFSgkoAAgBb/+gEFAQ6AAQAGwAVQAoBEQZyGAMDCwtyACsyLzIrMjAxQRMzAyMTNw4DJy4DNxMzAwYeAhcWNjYC0I62vK1pSg1CcadyWXdEFgh1tXUEBh4/NGyWWAEEAzb7xgHeA2a3jU8DA0JwkFACuv1DLFVGKwIEWZ4AAgBuAAAD7gQ6AAQACQAXQAsABggBCQZyAwgKcgArMisyEjk5MDFlATMBIwMTByMDAYUBqr/93X8rmgV01LADivvGBDr8X5kEOgAEAIAAAAX+BDoABQAKAA8AFQAkQBQHCwARAxQGCRAMAQoGchIOBAkKcgArMjIyKzIyMhIXOTAxZQEzBwEjExMHIwMBATMBIwMTByMDNwFMAaR9Ov5WeiBLD3Z1A1MBcbr+FH8RcgZvfgfJA3G7/IEEOvxxqwQ6/I0Dc/vGBDr8isQDlqQAAAH/xQAAA/UEOgALABpADgcECgEECQMLBnIGCQpyACsyKzISFzkwMUETATMBASMDASMBAwFJpwEm3/5OAQjFs/7P3QG+/wQ6/ncBif3h/eUBlf5rAi0CDQAC/6r+RwPsBDoAEwAYABlADRcWFQMIAhgGcg8ID3IAKzIrMhIXOTAxZQEzAQ4DIyYmJzcWFhcWNjY3ExMXBwMBXAHIyP2FGUNVakAbNxoLDBgLQ2FHHD+BDIfEewO/+x41Yk4sAQoGmAIDAQIqUjkEnfyuv0IEUwAD/+4AAAPPBDoAAwAJAA0AHEANBAwMCQ0GcgcDAwYCEgA/MzMRMysyMhEzMDFlByE3AQEjNwEzIwchNwNKG/0EGwNp/Kx1GQNOek8b/TEcmJiYAxb8UpEDqZmZAAIAN/6TAxYGPwARACUAGUAKHQkKChwcEhMBAAAvMi8zOS8zEjk5MDFBFwYGBwcOAgc3NjY3Nz4CAwcuAjc3NiYmJzceAgcHBhYWAvocengRHA94vXYLb3oPHBFprXsqbIg3DBwHGExHCmyeUAsbCQxFBj90Kbx6z3udTgN6BIBrz3y4ffjncSSFuG/PQmc+BXoEVZ5wz0iKbgABACL+8gHCBbAAAwAJsgACAQAvPzAxQQEjAQHC/vKSAQ4FsPlCBr4AAv+N/pACbAY8ABMAJgAbQAseCwoKHx8BFRQAAQAvMy8zEjkvMxI5OTAxUzceAgcHBhYWFwcuAjc3NiYmASc+Ajc3PgI3BwYGBwcOApwqbIc4DRsIGE1GCWqfUQsbCQ1E/sIcUWs8DBsQeLx1Cm95EBwQaa0FzHAjhrhv0EJmPgRyBFGZb9BIi2744nUbZ4tRznuZSQNwBIFrzny4fQABAGkBkATdAyYAHwAbQAsMAAAWBoAcBhAQBgAvMy8RMxoQzTIvMjAxQTcOAycmJicmJicmBgYHBz4DFxYWFxYWFzI2NgRPjgY0WHxPVIY6JFE2O04rCJwHNVl8T1SGOSRSNj1RMAMIA0eIbT8BAlE5JD8BATpeMwNHhWo8AQJSOSRAAT5jAAL/8f6XAaEETwADAA8ADLMBBw0AAC8v3c4wMUMTMwMTFAYHBiY1NjY3NhYPw6On8DsvLj0BPC8uPP6XBBX76wVQLz4BATsuLz0BAToAAAMAUP8LA/IFJgADAAcALwAlQBICASUlIQMcB3IHBAgIDAYRDXIAK83MMxI5OSvNzDMSOTkwMUEDIxMDAyMTNxY2Njc3DgInLgM3Nz4DFx4CByM0JiYnJg4CBwcGHgIDCDO2MycztjNyQ3NSEawRisdrcp5dIgoFDVWLvnVyp1oBqy5cRVN9VzMKBQgILF4FJv7gASD7BP7hAR9ZAjVgPwFtpVsCA1uYv2UrbcaYVgMDZ69wQWxDAgJCco1IKj+Gc0kAA//zAAAEiAXHAAMABwAiACFAEAYFBQEfFgVyDA0NAgIBDHIAKzIRMxEzKzIROS8zMDFhITchASE3IQEDBgYHJz4CNxM+AhceAgcnNiYmJyYGBgPf/BQcA+z+7v1zGwKO/upSCkFGsSw2HAZVEIXUhHSiUQa8BSZXRlF2R50B0p0BBP2EVaM2NxFUZSoCfoHIbwMDY65yAUJoPgICUIIAAAYAEv/lBY0E8QATACcAKwAvADMANwAOtQ8ZBSMNcgArMi8zMDFBBh4CFxY+Ajc2LgInJg4CBz4DFx4DBw4DJy4DAQcnNwEHJzcBJzcXASc3FwEyCyFThFhfqIRUDAsgVINYYKeEVbUOcrXng33AfjYNDnK06IN9v382BRHfcOD8QuBu3wNdqZCo/I2ojqgCV1CdgU8CA0yFqVpQnIBPAgNMhKhZfuazZgIDabDbdH7ntGcDA2qx2wJ7xZLF+7rFkcT+qtaA1gM113/XAAUAQwAABJ8FsQADAAcADAARABUALUAWCxAQBgcSFRUIDgMDAgIRFAxyCREEcgArMisSOS8zEjk5MhEzzjIzETMwMUEHITcBByE3JQEzAQcDEwcHAQEDIxMDtxb81RYC+Rb81BcBhAHn2v3GdoHmIXr+7wHahryHAuF9ff7dfHzdAxX8rAEDVvzgNAEDVP1W/PoDBgAC//j+8gHZBbAAAwAHAA20AQIGBwIAP93ezTAxUyMTMxMDIxOttYq1ooS1hP7yAxgDpv0KAvYAAAL/2v4PBJkFxwAvAGEAHkATUz8AAQUrXTUxMA8hDE9EHRQRcgArMi8zFzkwMWU3PgI3Ni4CJy4DNz4DFx4CByM2JiYnJgYGBwYeAhceAwcOAwMHDgIHBh4CFx4DBw4DJy4DNzcGHgIXFjY2NzYuAicuAzc+AwJVDEJ+WAsIM11qLk6QcDsHB2KWs1mFw2QJtAY3clRIkmgMCTBYajFPk3I9BwdbjaZ9DEN1TwoJMFlrMk6RcDwHB2CVs1pkqnxABboFI0lqQUeSaQsJM1xpLU6ScjwHBleHoGt2AixcST1UOSYPGkFdhV9kj1sqAgJmv4hRfEgCASphUUBTNSQPGkFfh2Bff0shAv94AyxbSEBVNiQQGkBdhl5mj1opAQI4bKBqAkNoRyYBAStiTz1SNyUPGkJfh2Bcfk0jAAACANoE7wNSBcgACwAXAA60AwkJDxUALzMzLzMwMVM2Njc2FhUGBgcGJiU0Njc2FgcUBgcGJtoBOy8vPAE9Li09AaI7Ly89AT0uLjwFWS4/AQE8Ly48AQE6LC4/AQE8Ly48AQE5AAADAF7/6AXeBccAHwAzAEcAH0AOHQQEJSVDFA0NLy85A3IAKzIRMxEzLzMRMxEzMDFBNwYGJy4CNzc+AhcWFgcnNiYnJgYGBwcGFhYXFjYlBh4CFxY+Ajc2LgInJg4CBzYSNiQXHgISBwYCBgQnLgICA6+MDriYbIY5CAwMX6JxkZoHjgVFW0liNwkNBRNGRl5h/T4PMXq9fYTot3UQDzB6vH2E6bd1ghGG1gERnJXnmUIQEYXW/u+cleeZQgJVAZWqBQNvr2JzaLJsAgOpjwFVZAECTHhBdTl1UgIEZtR03LJsAgNntud9c9uyawIDZrTnfZUBEdV6AwJ+0/76jJT+7tZ7AwJ/1AEHAAIAwwKyA0oFyAAXADEAGrUxGhoNFiq4AQCyCA0DAD8zGtzEEjkvMzAxQRM2JiYnJgYHJz4CFx4CBwMGBhcjJhMHIw4CBwYWMzI2NjcXDgIjJiY3PgIzAnE0Aw0qKDlWD5wIX4tMU3I4BzEHAwebDWEThihYQQYHQCsmU0MPBhlNXjVjfgMDcKJQA14BViQ7JAECMjgMUmgyAgFHe1L+xi5aLlABbG8BFzUvMScfNiVxLkEiAXVmYGgo//8AVgCWA40DsgQmAZL5/QAHAZIBOv/9AAIAgQF4A8UDIQADAAcAErYGBwMGAgIDAC8zETMSOS8wMUEHITcFAyMTA8Uc/NgdAxo9tT4DIaKiS/6iAV4ABABd/+gF3QXHAB4ALwBDAFcANUAbHxsYIAQCAgEBDykNDTU1UwwPD0lTE3I/SQNyACsyKxI5LzMRMxEzLzMSOX0vMxIXOTAxQSM3Fz4CNzYmJicjAyMTBR4CBw4CBwYGBw4CBzcWFgcHBhYXByMmNjc3NiYlBh4CFxY+Ajc2LgInJg4CBzYSNiQXHgISBwYCBgQnLgICAzXeErwoTzoHCCVHLY1xioUBAk2ETgUDSGk1BAcEChASHxdvfggGAwMCAYsFBQQGBzf9dQ8xer19hOm2dRAPMHq8fYTpt3WCEYbWARGcleeZQhAQhtb+75yV55lCAo+AAQIbNyw0NhQC/S8DUAECM2xWS00wHQIIAwcIBQFaA250NyE9IRElSCU1Rz5KdNyybAMCZ7bnfXPcsWsCA2a0532VARHVegMCftP++oyU/u7WewIDf9MBCAAAAQD4BRcDmwWlAAMACLEDAgAvMzAxQQchNwObF/10FwWljo4AAgDoA74C1wXHAA8AGwAPtRMMwBkEAwA/MxrMMjAxUz4CFx4CBw4CJy4CNwYWMzI2NzYmJyIG6wJKeElDZTcCA0d2SUNnOnsFOzM4UgYGNzQ4VgS4R3xMAQFJckBHeksBAUZxQzFKUzYwTQFVAAADACYAAQQABPMAAwAHAAsAErcLAgMDBAoScgArLzkvMzIwMUEHITcBAyMTAQchNwQAGfyGGQJamaSZAS0Y/NUYA1eYmAGc/C4D0vull5cAAAEAXQKbAuYFvgAcABOxHAK4AQCzCxMDcgArMhrMMjAxQQchNwE+Ajc2JiciBgcHPgIXHgIHDgIHBwK5F/27FAE8HEEyBgc1L0JQDpsJV4hSRnZGBARIZC/EAxuAdAEJGDtFKC83AUs9AVN2PwEBM2VMQWxZJZIAAAIAbwKOAuwFvgAZADMALEAMHBgAABoaECwpKSQQuAEAtQsLCBADcgArMjIvGhDMMi8yETkvMxI5OTAxQTM+Ajc2JiMmBgcjPgIXHgIHDgIHIwc3Fx4CBw4CJy4CNTMGFhcyNjc2JiYnAVxJJUg0BgdCLjJND5wIVoFIQ3xNAwJdhT54Bw5fQHlNAwJhkEpJekmXAUg1N2IIBiI9JARlAhcyKjMvAS4wS2QwAQEuYExKWScBJE4BAiFTTFRqMgIBNWdONzIBOTwqLhMBAAEA1QTaAqYGAAADAAqyAYAAAC8azTAxUxMzAdXr5v7OBNoBJv7aAAAD/+b+YAQlBDoABAAaAB4AGUAMHQUAFgsTcgMSchwAAC8yKysyETkvMDFBMwMjEzc3DgMnLgInEzMGFBYWFxY+AgEzASMDcLW8oxtEPAwvWJJtPHdXDAttBBtGQlh6Tiz9zrT++7MEOvvGAQX2Ali8oGIDASlUQgEiM3FjQQIDO2uKAov6JgAAAQB4AAADvQWxAAwADrYDCwJyABJyACsrzTAxYSMTJy4CNz4CMwUCwbZbSIjAXg4PluyRARUCCAEDdcyHlNV0AQAAAQClAmoBhQNLAAsACLEDCQAvMzAxUzY2NzYWFQYGBwYmpgE9MjE+AT8xMD8C1jFCAQE+MTE/AQE8AAH/yP5LAREAAAATABG2CwqAEwIAEgA/MjIazDIwMXMzBxYWBw4DBzc+Ajc2JiYnJoEVP0ACAj5hcTUEJE88BwYuRhs4DlVAQVQvFAJsAhEtKycjCgQAAQDgApsCcAWwAAYACrMGAnIBAC8rMDFBAyMTBzclAnCEmWncGAFiBbD86wJVOIhwAAACAL8CsANvBcgAEQAjABC2Fw4gBQNyDgAvKzIRMzAxUzc+AhceAgcHDgInLgI3BwYWFhcWNjY3NzYmJicmBgbHBwtjoWpkhj4ICAthoGpkhz+xCQUUQDw+VjIICQUVPzs+VzMEE1Bko14CA2GfX1Fkol0CA2GesFMzYEABAj1jOFIyYT8CAjxjAP//ABEAmQNaA7UEJgGTDQAABwGTAV8AAP//ALoAAAU0Ba0EJwHWAE4CmAAnAZQBEQAIAAcCMALAAAD//wC1AAAFeQWtBCcBlADmAAgAJwHWAEkCmAAHAdUDBgAA//8AngAABY0FvgQnAZQBjAAIACcCMAMZAAAABwIvAKMCmwAC/9H+ewLwBFAAIQAtABhACgAAJSUrEBERDRYALzMzLz8zLzMvMDFBNw4CBw4CBwYWFhcWNjY3Nw4CJy4CNz4CNz4CARQGBwYmNTY2NzYWAZCyCTZZPi9dQwgIIVJCQWhFDLQNfL9yb6RSCghdh0UoNR8BADsvLj0BPC4vPAKoAVWCbjosWWpFPmE4AQIzXT8Bc6ZYAgNapXJhnoQ7IkxZAXIvPgEBOy4vPQEBOgAG/4MAAAd5BbAABAAIAAwAEAAUABgAMUAYABcXCAcUEwcTBxMCDQMYAnIMCwsOAghyACsyMhEzKzIyETk5Ly8RMxEzMhEzMDFBASMBMwMHITcBByE3EwMjEwEHITcBByE3BCf8RekEVHskH/0uHwV3G/04G8nBtcICnxv9mxsDHxv9ORsFEfrvBbD8YK+v/oiYmAUY+lAFsP2SmJgCbpiYAAACACgAzQQCBGQAAwAHAAyzBAYCAAAvLzMyMDF3JwEXAwE3AY5mA3Vl8f2OgQJxzoQDEoX87gMkc/zcAAADACD/owWcBewAAwAbADMAF0ALAQAvCiMWA3IKCXIAKysyETMyMzAxQQEjAQMHDgMnLgQ3Nz4DFx4EBzc2Ni4CJyYOAgcHBhQeAhcWPgIFnPscmATnBwwUZ6jql3OqcD0QDQ0TaanqlXWpcD0O1A0JARtBclZwqHVGDg0JHEJxVXKoc0UF7Pm3Bkn9GluG/sp0AwJTjLLHZFyF/cp1AwJTi7PHwF9Ek4pwRQMDXp7BYF9DkotyRQMEXZ/BAAIAOQAABF4FsAADABkAHUAODw4OAxkEBAMAAnIDCHIAKysROS8zETkvMzAxQTMDIwEFHgIHDgIjJTcFMjY2NzYmJiclATa1/bUBKgFWfMFoCwyZ6ob+vRsBK1eXZAwKNHBP/usFsPpQBIsBA2O4go/BYQGXAUF9WlB2QgMBAAEAH//pBBoGFQA5ABlADSMbNggCCnIIAXIbC3IAKysrETMRMzAxQQMjEz4DFx4CBw4DBwYeAwcOAicuAic3FhYXFjY2NzYuAzc+Azc2JiYnJgYGAZC9tL4MQ26aZGSWTggGMkA2CgkuTlE2BAZ0uG0wZWEqNy9yOzxsSQkIMVBRNAUFNUQ4CAccRThWbDoEWfunBFhbonxEAgNNkmc/Zl5iOjldVVdkP3KdTgEBDyAZnCErAQEpUz87XlZYZ0I6YVtfOjRXNgIDVokAAAMAE//qBlcEUQAUADIAXgA3QBxXMzMyF0ZFFCUAAykXRRdFDx8pC3JMPj4FDwdyACsyMhEzKzISOTkvLxIXOREzETMyETMwMWUTNiYmJyYGBgcnPgMXHgIHAwMHJyIGBgcGFhYzFj4CNxcOAicuAjc+AzMBLgM3Nz4DFx4DBwchNyE3NiYmJyYOAgcHBh4CFxY2NxcOAgKNWgYbTEM9cE8MsQlUgJlNcptIDFM9GfRAg14JBytQMS5sZ0wNTC6Zs1ZfjkoGBliJplQCcnWkYyYKBQxShrdwaZRYHgsS/PMZAlIGCx9dUk55VjMJBgcONmhRW5xLMzJ/iLUCHTxmQAICK1Y+EVR8USUBA2OrcP4KAaSMASpaSTZIJQEeOE4vkU1gKwECTY1hYYNPIv1vAViWwGotZsOcWgMCUIetYHaOIEp9TgIDRXWLQyxFh29FAgI+LoorNhgAAgBc/+gESgYtADQAOAAZQAs2IBYWASoMC3I4AQAvMysyEjkvMzMwMUE3HgISBwcOAycuAzc+AxceAgcnNi4CJyYOAgcGHgIXFj4CNzc2LgIlAScBAYlEpvGSNBYOD1SIuXVjmmYuCQlOg7FtY6BdBEkFJkdZLlB+WjYIBxQ3W0FQd1IyCg4UJXPFAjX9wTsCPwWNoCy2/f7QpWJoyKFeAwNPhateZL2UVQMEY6NjATRONRwBAjpohUo5cmA7AwJKfI9CZYv6z5Uc/pltAWYAAAMARACqBC4EvAADAA8AGwATtxkTAgcNAwISAD/dxjIQxjIwMUEHITcBNjY3NhYHBgYHBiYDNjY3NhYHBgYHBiYELiD8NiEBsQE+MTE/AQE/MDA/jQE9MjE/AQE/MTA/AxC4uAE3MUIBAT4xMT8BATz9ADFCAQE+MTFAAQE9AAMAOv95BCkEuQADABkALwAZQAwgAQEVC3IrAAAKB3IAKzIvMisyLzIwMUEBIwEBNz4DFx4DBwcOAycuAzcHBh4CFxY+Ajc3Ni4CJyYOAgQp/JSDA238pgMOV4/BeHGhYiULAg5Yj8F2caFjJcMDBwowYU5TgFo3CwIICzBhTlSAWjYEufrABUD9UBhty59aAwNenMFmGG3JnFkDA12ZwH0XP4d1SgIDRXeQRxc/iHdMAwJGeJIAA//g/mAECQYAAAMAGQAvABtADysKIBUHcgoLcgMAcgIOcgArKysrMhEzMDFBASMBAQcOAycuAzc3PgMXHgMHNzYuAicmDgIHAwYeAhcWPgIB6P6utgFTAswCDUV2q3NmkFgkBg4RUX6tbm+LSBPCAwcHK1tOPm9bPw8rASRCWjZTe1QyBgD4YAeg/CwVY8akYgMCVY2vXG9iu5ZWAwNmob5uFT2FdksCAi1RaTr++zZfSiwBA0h5kQAABABG/+gFEgYAAAQAGgAvADMAHUAPIQQEFgtyMzIrCwdyAQByACsrMs4yKzIvMjAxZRMzASMBNz4DFx4DBwcOAycuAzcHBh4CFxY2Njc3Ni4CJyYOAgEHITcC3OS2/vWl/YoCDEh6rnRojFEdBgsRTXyrbmqLTRjEAgcFKFpNUoxkFicCHz9bOFR6UzAD/hv9lRvdBSP6AAIIFmPJpmMDA12XtFtcYbqWVQMEZqC7cRY8hXVMAgNOg0zzN2VQMQEDRniQAwKYmAAEADYAAAXCBbAAAwAHAAsADwAfQA8DAoAHBgYKDAsCcg0KCHIAKzIrMhE5LzMazDIwMUEHITcBByE3EwMjEyEDIxMFwhn6vRkD4xz9AhyL/bz9BD/9vPwEj4+P/q+dnQJy+lAFsPpQBbAAAQAvAAABnwQ6AAMADLUDBnICCnIAKyswMUEDIxMBn7y0vAQ6+8YEOgAAAwAuAAAEWQQ6AAMACQANAB9ADwwHBwsGBgIJAwZyCgIKcgArMisyETkvMzMRMzAxQQMjEyEBIzczAQMBNwEBn7y1vANv/Y3vAacB0JP+rIMBpgQ6+8YEOv2UogHK+8YB8339kAAAAwAjAAADsQWwAAMABwALABtADQIKAAcGBgoLAnIKCHIAKysRMxEzMhEzMDFBBwU3AQchNwEDIxMCmBf9ohgDdhz9PBwBB/28/QOjg7yF/bSdnQUT+lAFsAAAAgAkAAACNwYAAAMABwATQAkCBgAHAHIGCnIAKysyETMwMUEHBTcBASMBAjcX/gQXAcn+9rUBCwOmgruCAxX6AAYAAAADADX+RwVhBbMAAwAHABkAHUAOFQ4GBwcDCHIJBQQAAnIAKzIyMisyETMvMzAxQTMDIwE3AQcTMwEOAiciJic3FhYzMjY2NwExvf28ASOOAleO9b3++Q5am24fOx4eGDAZN0cnBwWw+lAFRm36t2oFsPn9Z6JdAgoJmQcJPFwvAAIAJf5IA+cEUQAEACoAGUAOHBUPciYLB3IDBnICCnIAKysrMisyMDFBAyMTMwMHPgMXHgMHAw4CJyImJzcWFjMWNjY3EzYuAicmDgIBa5G1vKF9JA1DcKRvXHxFFgl9DlmZbB87HR4YMxg3RyYIfQcJJkw9U39ZOQNI/LgEOv4GAl6+m1wCAkV1llP8/WafWgEKCZwHCAE4VzADATZfSisCAjxqhwAFAFX/7AdfBccAIwAnACsALwAzADNAGi8uLiYyKDMCciknJghyFRISFhkJBAcHAwADAD8yMhEzPzMzETMrMjIrMjIROS8zMDFBMhYXByYmIyYOAgcDBh4CFxY2NwcGBicuAzcTPgMBByE3AQMjEwEHITcBByE3AwpJkkkRRYxGY5ltRQ8wCg08dF1JkkgORo5GfLZyKw8vE2ei2AQAG/0SHAEI/L39ArMc/XYcA1Ac/RwcBcYOCJ4OEAFHfKJa/s1Om39PAgIODJ8ICwEDY6fTcwEwe9mmXfrWnZ0FE/pQBbD9jp2dAnKengADAEf/6AbYBFIAKgBAAFYAJ0ATJAAARzwTEhI8UhkLCzEHcjwLcgArKzIRMzIROS8zETMzETMwMUUuAzc3PgMXHgMHByE3BTc2JiYnJg4CBwcGHgIXFjY3FwYGATc+AxceAwcHDgMnLgM3BwYeAhcWPgI3NzYuAicmDgIE3XGeYCQKBAxUibZuaJNYIAwT/P4aAkkFCyNfTUx1VDIJBQcLLl5NWJ9FPUvO+w8DDVWMvndyn18iCgMOVoy+dnGfXyPFAwcILV1OU35XNAoDBwkuXk9TfVYzFAJbmb5lLWTCnlwDA0+FrGB6lwEcR3xOAgNId4pAKz6Fc0kCAzg0f0g9AiAXbcqfWgMCX5zBZRhtyJ1ZAgNem798Fz6HdUwCA0Z3kEgWPol3TAMCR3mRAAEANAAAAwsGGQARAA62DQYBcgEKcgArKzIwMXMjEz4CFxYWFwcmJiciBgYH6LTLDV6fcCVJJCIWLBdAWzYKBKxppl4BAQ0IjwYHATlhOwAAAQBS/+kFGgXEACwAG0ANDwAGCQkAGiIDcgAJcgArKzIROS8zETMwMUUuAzc3IQchBwYeAhcWPgI3NzYuAicmBgcnPgIXHgMHBw4DAkeQyXUnEhQEHxv8owcPFUqFY26re0wPDg4STZV0YbdYIziMkkOX2YMuEg0TcLLuFAJsuO2EfJUjWZ96SAMCX6DCX19jvpteAgEtJ5EoKxABAXLE+4teg/vLdgAAAf9H/kYDOAYZACcAKUAVFAICFScGch8iIh4bAXILDg4KBw9yACsyMhEzKzIyETMrMjIRMzAxQQcjAw4CJyImJzcWFjMyNjY3EyM3Mzc+AhcyFhcHJiYjIgYGBwcCmhbFnQxWl2wfOh0dFzAZN0UmBp6mFqYODVyecCZJJCQYMBhAVjEJDwQ6jvv7ZqBbAgsJkwcJPVwvBAWOcmmmXgIOCZEGBjddO3IAAwBm/+kGFAY6AAkAIQA5AB1ADgUGBikpAAAcA3I1EAlyACsyKzIvMhE5ETMwMUE3DgIHNz4CAwcOAycuBDc3PgMXHgQHNzY2LgInJg4CBwcGFB4CFxY+AgV5mwxltYIOVGc4fQ0TZ6nqlnSpcD4PDQwUaKrqlXSqcD0O1Q4IARtBcVdwp3VGDg0JHEFxVnKoc0QGOAKBtWEDhwJJev0aW4f+yXQDAlOMs8djXIX9ynUDAlOLssjAX0STinBEAwRen8BgX0OSi3JGAgRdnsIAAAMAQ//pBPUEsgAJAB8ANQAVQAomGwtyMQAAEAdyACsyLzIrMjAxQTcOAgc3PgIBNz4DFx4DBwcOAycuAzcHBh4CFxY+Ajc3Ni4CJyYOAgRrigpQl3YMS1Qo++0CDlePwXdyoWIlCwIOWI/BdnGhYibDAwcKMGFOU4BaNwoDCAswYU5UgFo2BLEBcZ5UA3QDQWv9mxdty55aAwJenMFmGG3JnFgCA12av30XP4d1SgIDRXeQRxc/iHdMAwJGeJIAAAIAY//pBooGAwAJAB8AGUAMBQoKAAAVAnIbEAlyACsyKzIvMhEzMDFBNw4CBzc+AiUzAw4CJy4CNxMzAwYWFhcWNjY3BfWVDm/GkQ5jfET+ebyoF6H5mZHRZRGouqcLMXxkaqNmEAYCAZC+YQOHAkeEC/wol+B4AwJ825ID2fwmX5VXAwNSmWcAAAMAW//oBUcEkQAJAA4AJQAdQA4FCwsAABsGciIODhULcgArMi8yKzIvMhEzMDFBMw4CBzc+AgETMwMjEzcOAycuAzcTMwMGHgIXFjY2BMCHC1SadgxQVyr+G462vK1pSg1BcqdzWXdDFgh1tXUFBx8/NGuXWASRdJFGAnICL2D8vQM2+8YB3gNmuIxPAwJDcJBQArr9QyxVRisCBFmdAAAB/wn+RwGwBDoAEQAOtg0GD3IBBnIAKysyMDFTMwMOAicmJic3FhYzMjY2N/u1xw1YmW0eOh0eFzAZN0cnBwQ6+25moFsBAQoJkwcJPF0vAAEAP//qA80EUQAqABlADBEUFAAZCwtyJAAHcgArMisyEjkvMzAxQR4DBwcOAycuAzc3IQclBwYWFhcWPgI3NzYuAicmBgcnNjYCOnGeYCQKBQtUibdtaJRYHwwSAwMb/bgFDCReTUx1VDIJBQcKL15MWJ9GPEvOBE8CXJi+ZS1kwp1cAwJPhaxgepgBG0d8TwICSHeKPyw+hHNKAgM4NH9IPQAAAQEYBOMDZQYAAAgAFLcHBQUEAQOACAAvGs0yOTIRMzAxQRMVJycHBycBApfOk3KwlwEBFQYA/vEOAqinAw8BDgAAAQEoBOMDggYBAAgAErYBBoAHBAIAAC8yMjIazTkwMUEXNzcXASMDNQG9c7GgAf7ib80F/6moAw3+7wEQDv//APgFFwObBaUGBgBwAAAAAQEHBMoDSwXYAA4AELUBAQmADAUALzMazDIvMDFBNw4CJyYmNxcGFhcWNgK6kQhTh1R5lQKSAzhGR1EF1gFUeUACApB6AUBVAQFVAAEBDgTtAeQFxAALAAmyAwkQAD8zMDFBNDY3NhYVBgYHBiYBDzsvLj0BPC4vPAVVLz4BATsuLz0BAToAAAIBAQS0AqQGUgANABkADrQXBIARCwAvMxrMMjAxQT4CMzIWBw4CIyImNwYWMzI2NzYmIyIGAQIBPGQ7VHIBATxkO1RyYQQ0LTFNBQY0LjJMBXk8Yjt2UzxhOHFWK0JJMCxETAAB/67+TgEVADoAFQAOtAgPgAEAAC8yGswyMDF3Fw4CBwYWFzI2NxcGBiMmJjc+AspLJVdCBgQdIBoyGAQjTClRWwICWYE6PRtCUzIgIQEQCnsVFQFnUE51VAABAN4E2wOwBecAGQAnQBMAAAEBChJADxpIEgWADQ0ODhcFAC8zMy8zLxoQzSsyMi8zLzAxQRcOAicuAwcGBgcnPgIXHgMzNjYDOHgGN2JGJj47PCQxNwx6BzdiRyQ+Oz0lMTgF5wo/ckYBAR8oHQIBQysFP3RIAQEfJx0CRAACAMME0AO+Bf8AAwAHAA60AQWAAAQALzMazTIwMUEBMwEhEzMBAdIBFNj+x/4+2s7+9wTQAS/+0QEv/tEAAAL/6f5oATf/tgALABcADrQPCYAVAwAvMxrMMjAxRzQ2MzYWBxQGBwYmNwYWMzI2NzYmIyIGFmZIQ1wBYkdDYVUEKCAiOgUEIyEkPPpIZwFgQ0ZjAQFaRh8vNiIeNDgAAAH9agTa/r4GAAADAAqyA4ACAC8azTAxQRMjA/42iIzIBgD+2gEmAAAB/eoE2v/BBgAAAwAKsgGAAAAvGs0wMUETFwH96vDn/skE2gEmAf7bAP///QsE2//dBecEBwCl/C0AAAAB/fQE2f80BnMAFAAQtRQCAIALDAAvMxrMMjIwMUEnNz4CNzYuAic3HgMHBgYH/n+LFhxGNwUEHzIzEQ8qXlMzAgNjQgTZAZgCCyAkGh0MAwFpARAnRTZKSgwAAAL82wTk/4UF7gADAAcADrQHA4AEAAAvMhrNMjAxQSMDMwEjAzP+ibP76gHAn8HXBOQBCv72AQoAAfy6/qD9kf93AAsACLEDCQAvMzAxRTQ2NzYWBwYGBwYm/Ls7Ly89AQE8Li49+S8/AQE8Li88AQE5AAEBIwTvAkIGPwADAAqyAIABAC8azTAxQRMzAwEjb7CsBO8BUP6wAAADAPQE7wPvBokAAwAPABsAGUAKExkZDQGAAAAHDQAvMzMvGs0RMxEzMDFBEzMDBTY2NzYWBxQGBwYmJTQ2NzYWBwYGBwYmAi1evY/+OwE6MC49AT0uLjwCJTsvLz0BATwuLj0FgQEI/vgpLz8BATwuLzwBATksLz8BATsvLzwBATn//wClAmoBhQNLBgYAeAAAAAEARAAABKUFsAAFAA62AgUCcgQIcgArKzIwMUEHIQMjEwSlHP1Y4bz9BbCe+u4FsAAAA/+yAAAE3wWwAAQACQANABtADQYCBwMCcg0MDAUCEnIAKzIyETMrMhI5MDFBASMBMxMBNzMBJwchNwNn/RXKA1F6qf71GnQBNnQc+/UcBR364wWw+lAFO3X6UJ2dnQAAAwBn/+kE/gXHAAMAGwAzABtADS8KAwICCiMWA3IKCXIAKysyETkvMxEzMDFBByE3BQcOAycuBDc3PgMXHgQHNzY2LgInJg4CBwcGFB4CFxY+AgPJG/4KGwMeDRNnqeqWdKlwPg8NDBRoquqVdKpwPA/VDQkBG0FxV3CndUYODggcQnBWcqhzRAMrl5clW4f+yXQDAlOMs8djXIX9ynUDAlKMs8fAX0STinBEAwNdn8BgX0OSi3JGAwNdnsIAAAL/xAAABHIFsAAEAAkAF0ALBgACBwMCcgUCCHIAKzIrMhI5OTAxQQEjATMTAzczAQMt/WnSAwB/bd8ieQEGBQj6+AWw+lAFIo76UAADAAwAAASHBbAAAwAHAAsAG0ANAQAFBAQACAkCcgAIcgArKzIROS8zETMwMXM3IQcBNyEHATchBwwcA48c/TocAtwb/T4dA3ocnZ0Cop2dAnCengABAEQAAAVwBbAABwATQAkCBgQHAnIGCHIAKysyETMwMUEDIxMhAyMTBXD9u+H9SeG9/QWw+lAFEvruBbAAAAP/2wAABIoFsAADAAcAEAAhQBAOBgYHBw8CcgwDAwICCwhyACsyETMRMysyETMRMzAxZQchNwEHITcBBwEjNwEBNzMD2Bz8aBwEShz8exwB8AP9YnkbAjn+kRhrnp6eBRKenv03Gf0ymAJLAkeGAAADAFYAAAVrBbAAEwAnACsAIUAQFBUVAQApCHIfHh4KCygCcgArzTIyETMrzTIyETMwMWUnLgM3NjYkMxceAwcGBgQlFzI2Njc2LgInJyYGBgcGHgIBAyMTAtyedLt/OgwRsgEWpaZzuX86DBG0/uj+waF8wHYQCRhId1SpfL92DwoaSXkB0v29/a8CA1CPw3Sn/IwCA1KRw3Kp+4mhAmCze1CIZjsDAgFjtHpRiGQ6BF36UAWwAAIAhQAABZAFsAAZAB0AGUAMFAcHDRwIch0BDQJyACsyMisROREzMDFBMwMGAgQnJy4DNxMzAwYeAhcXFjY2NwMDIxME071ZG7n+4rIefMB/NQ5YvFkKGkp9VxyAy4IU5P29/QWw/fKw/v6LAgEEVpfOewIO/fFSkXFDBAECZ7t9Ag76UAWwAAADAAoAAATeBccALQAxADUAJUASKBISLykpNBERMy4yEnIGHQNyACsyKzIyMhEzMxEzMhEzMDFBNzYuAicmDgIHBwYGFhYXBy4DNzc+AxceAwcHDgMHNz4DATchByE3IQcEABEKCDVzYWaYakANEQkIHllYDXSaVhkOEBJloduJgrdtJg8QEl+WzH8PYYhaNf5vHAHWHPvRHAHeHALWdk6kjVoDA1GLrVh1Ra+pfhaNFpPP4mVye+e1aAMDb7bgdHJ168mHEo4Vc6C1/YGdnZ2dAAADAEj/5wQmBFIAFgAsAEEAGkANLgY0OzsdEgtyKAYHcgArMisyMhEzPzAxUzc+AxceBAcHDgMnLgM3BwYeAhcWPgI3NzYuAicmDgIBMwMGBhYWFxY2NxcGBicuAzcTUgINQ3aveFJ3TisOBQoQSXambWmLTBjDAgcGKlhLSXlePxAJAxQ1XUVXfFAuAnebhgEFBBUZCBEICho3ID1DHAEEXAHtFmTSsGkDA0BrhZFGU167mVkDA12WtHAWO35tRAMCQnCEQEA6g3VNAgRRhZoB8PzrDzAvIgEBBAGMEQ8BAT9hay4CNAAAAv/x/oAESAXHABwAOgAeQA41ACYnJxwcMB0DEwkLcgArMj8zOS8zEjk5LzAxQRceAgcOAicuAzc3BhYWFxY2Njc2JiYnJxMeAgcOAiMjNzMyNjY3NiYmJyYGBgcDIxM+AgIcg3KsWQkLhtqIVIxlNAZOB0yFT1qOWQoIIlhJl8xwqlsJCI7Oa2MVSUx7TgkHK1tBSn5VDPq1+RGP0wM4AQRgrXWHz3MDAjZjilUqVHdAAgJOiFdCe1MEAQMCAmGscXedT3g3ak8/Zz0CAkN0R/pOBbF2uGgAAwCF/l8EGwQ6AAMACAANABlADggMAwQKBQEFDQZyAQ5yACsrMhIXOTAxZQMjEzcBMwEjAxMHIwMCAmC1YGoBo8H9v38lkQRzy4T92wIlgQM1+8YEOvy17wQ6AAACAEX/6QQJBiAALABCABlADRQoPgMEMx4LcgsEAXIAKzIrMhIXOTAxQT4CFzIWFwcmJgciBgYHBh4CFx4CBwcOAycuAzc3PgI3Ny4CAwcGHgIXFj4CNzc2LgInJg4CAUsGeLRhRYFADzuDQi5bQgkGIjxDG3eaQQ0DDVaMvXNvn2EmCQMNaatyAjNHJEADBwswXkxQe1Y0CwIHEzRYQFB9WjUE7WuIQAEfGaIbIwEePzImOSsfDDKg1oAXbMGWUwMCWZS6ZRdww4cVDRhNYv1YFj+AbkUCA0FwiUcVNntyTgkKRHmPAAIAKf/qA+AETwAfAD8AH0APACE+PgMDFjUrB3IMFgtyACsyKzISOS8zEjk5MDFBFwcnIgYGBwYeAhcWNjY3Nw4DJy4DNz4DBScuAzc+AxceAwcnNiYmJyYGBgcGHgIXFwHw4hS8P31ZCAYoRVIlPnxcDrQJWYiiU0iQd0QEBVaGmQEeyTp/bUIDA1SFnk1Jim9AArICP2M0N3hZCQYeOUkk0wJMAWwBH09KLkAnEgEBKVVCAVuCUyYCASVLeFRYcUAaRwECHTxjR1p8TCICAihPd1EBOkskAQEhTD8tOiIPAQEAAAIAiv5/BD0FsAAoACwAFUAJFQIsLCkpAAJyACsyLzMRMy8wMUEzBwEOAgcGHgIXFx4CBw4CByc+Ajc2JiYnJy4DNz4CNwEhByED41oX/mpKimIPBQQWLSR3Omc9BAU/XC9cGDQoBQUnORdRRWVAGQgNcqBO/v8DBhr8+QWwgf5fTKG4biU/NSgOJxMqTkk+cV8kWho6QiUfJhYHGRU/V3NJc9/FTwHUlwAAAgAl/mED6ARRAAQAHAAXQAwYCwMGcgIKcgsHchEALysrKxEzMDFBAyMTMwMHPgMXHgMHAyMTNi4CJyYOAgFskrW8oWhEC0R2qXBdfEUWCbu1uwcKJ0w8UnlUMwNI/LgEOv4GBGO+mloCAkBuk1b7qwRTN11GKAEDP22IAAMAdf/pBCMFxwAZACcANgAdQBANKGowIGowMA0AGmoADQtyACsvKxI5LysrMDFBHgMUBwcOBCcuAzY3Nz4EFyYOAgcHITc2Ni4CARY+Azc3IQcGBh4CArxpi1EiCxwOM1N5pm5pi1AiAQsbDjNTeaZkW31PKwsIAhIJBggJJ1D+7kltTTQfCAb97QYGCAkmUQXEA1KIqLNTuFu9rYdMAwNUjKu0Urlbu6qESpkEW5OlRzc5L3h8a0P7WAM8aYGFOCcoLnmAbkcAAQCE//QB6AQ6ABEADrYGDQtyAAZyACsrMjAxQTMDBhYWFzI2NwcGBicuAjcBEbWIBAonJxUsFQwgQyJTXiIHBDr82CM4IgEHA5cKCQEBUoNKAAL/uP/xA8AF7AAEACYAHkAQABsEAwQCIAUAcg8WFgIKcgArMi8zKzISFzkwMUEBIwEXATIeAhcTHgIXFjY3BwYGIyImJicDAy4CJyYGIzc2NgIu/lrQAliD/vstSDcnC+MGER0ZCRIJBhEiEkJSMBCnQAcVJR4MGA0MFiwDHfzjBE0MAasWLEEq+6oWJRgCAQEBmgUFNFs7AyMBExsrGwEBAY8EBgACAED+dgQABcYAHgBGABlACx8RDw8hITMFGwNyACsyLzkvMxI5OTAxQQcuAiMiBgYHBh4CFxcHJy4DNz4DFzIWFgEXByciBgYHBhYWFxceAgcOAgcnPgI3NiYmJycuAzc+AwQAKSJISCVBk24LCSpRZjOVFYFInopSBQZhlrFVK1VU/tyZFH9uwIANCTBjRWY4aUAFBEBcLWQaOCoGBSc6GDVYjmMuCApzsdMFnJMLEQoiVk0+US8UAQF0AQEjS3pZY4hSJAEKEv3GAXABQpN3SnVRFBsQK1BFPW9fI1ccOkIoISMSBw8YSWmTYnioZzAAAAMAYP/0BKQEOgADAAcAGQAZQA0OFQtyBgpyCQcCAwZyACsyMjIrKzIwMUEHITchAyMTITMDBhYWMzI2NwcGBiMuAjcEpBv71xsBWry2vAI5tYgECyYnFSsUCSFDIVReIgYEOpmZ+8YEOvzYIzgiBgSYCgkCUoNKAAH/3f5gA/8EUQAvABdADB4pBhELcgYHcgAOcgArKysRMzIwMUMTPgMXHgMHBw4DJy4DNR4CFx4CFxY+Ajc3NjYmJicmDgIHAyOqD05/sXF4mVIXCwMMRnWnb2qOVCUMGRoNCjdmUE94UzEKAgcBIlhRSW5NLwqr/mAD4mW+llYDA2ioymUWYbyYWAIDVY2vXQ0aGQxHeUoDAj5sh0UVO5CGWAMCRnOEPfwgAAABAEr+iQPfBFEALQAOtRsJBQAHcgArzDMvMDFBHgIHJzYmJicmDgIHBwYWFhceAgcOAgcnPgI3NiYmJy4CNzc+AwJzdKVTBqsFKFpIT3hWMwkGCz+BWDtvRQUEQFsuXBozJQUFJDoagrdZDgQMVIq6BE4CZa9zAUNrQQICRXWMQyphj2IdEy5TTDxwXyNZGzlBKCIlEwckic2LK2nEm1kAAwBI/+kErgRIABgALgAyABNACSoGMgZyHxQLcgArMisyMjAxUzc+AxceAhceAgcHDgMnLgM3BwYeAhcWPgI3NzYuAicmDgIBByE3UgMNVo6+dB08OhpWYyQJAwxajrtucZ9fIsIDBwktXk9TfVczCgMHCy9fTFF8VzUDmxv91hsCChdlyaJXDQMnLg0qmLdYF2i8kFECAl6bv3wXPod1SwMCRnaQRxc+gm9HAgJBcYoB0pmZAAACAIf/6wQRBDoAAwAVABVACgUKEQIDBnIRC3IAKysyETMyMDFBByE3ITMDBhYWMzI2NxcGBicuAjcEERr8kBsBUrSJAwUgJRgsFh4nVDBWWhwHBDqWlvzSHjsnDgmGGhgBAleISwABAGj/5wPiBDwAHgATQAkQBxkABnIZC3IAKysRMzIwMVMzAwYeAhcWPgI3NgInFxYWBgcOAycuAzfftW0FARk/OlJ/WTUKExEjtxkVAwwOUYi/e2OESxgJBDr9bStkWjsBA1OImkSAAQd9AlKsr1Vt1KxkAwJKfaBZAAEAQP4iBSUEPQAvABlADCsFBRkYBnIiDwtyAAAvKzIrMjIRMzAxQRM+AhceAwcOAycuAzc+AjcXDgIHBh4CFxY2Njc2LgInBgYHAwGf4QhKdEhpnmYqCg97wvKHg86KOxANUoddWTxePw0QIluOXIHhlxAHDjJeRx8mCeb+IgU1SGc3AQJemrxfi9iSSgICU5jThG7CoT2IMnuOTVqackECA2W+hT2Bb0kFCBwh+sQAAgBO/icFJAQ8AB4AIgAVQAohBxkLciAQAAZyACsyMisyLzAxUzMDBh4CFxY+Ajc2AicXFhYGBw4DJy4DNwEzASOwtVIMFUqIZmayjFwQExYlthsXAQsTdrryjY3Nfy8RAka1/vK1BDr+FlylgEsCAj52pWV+AQZ6AlGrrFWN3ptPAgJbpOGIAeb57QACAGf/5wXvBDwAHgA/ABlADAEXCgopNh8GcjYLcgArKxEzMxEzMjAxQRceAgcOAycuAzcTMwMGBhYWFxY+Ajc2AiUXBgIHBgYeAhcWPgI3EzMDDgMnLgM0Nz4CBPu0IB4CCww9baZ2ZHg7CwowgDAGARpGQU5nPiEIERr8HsNGhRYGCQQeQDdGYj8kCDB/MQw5YZVpWnhGHwgNOVcEPAJSrK9WYdCzbAMCXpSrUAEp/tQvc2pGAgNbjZY6ggEHegF8/v2PJGpyZUEDBD5oejgBLP7XWLGTVgMCTHuWnEZhtaoAAQBS/+cEawXLADgAHUANHR4XNgQEDSMXC3ItDQAvMysyETkvMxDMMjAxQQcGBicuAjc3PgIXHgMHAw4CJy4DNxM3AwYWFhcWNjY3EzYuAicmBgYHBwYWFhcyNgRrAjBnM5vygwwBCl+daFBxRBkIbRJ7y4xhlGAoCza1NgkgXlVaeUUMawQCFDIsN0knBgEIUZ9uMmQDCZYSEQEBgOigEWOgXQMCPmiFSf1igtJ5BAJJfaRdAU0C/rBLhlcDA1OLUAKgI0pAKQECOFowEm6gWAIPAAADAGcAAATdBcEAAwAWACkAHkAOEAkJHyYDchoYFgMDAhIAPzMRMzMzKzIyETMwMUEDIxM3AT4CFzIWFwcmJiMiBgYHAScDExcHAy4CJyYGByc2NjMeAgKBeLt3ZwEuHUVeQSM/IDQMGA0cKyMO/l+LKIoFfbgHFiAXDhsOFBw6HzpRNAKv/VECr1MCATVXMgIQDpUEBhYmFf1ZAgLh/efIAgKmFSIUAQEFBJoMDQEyUwAAAwBo/+YGQQQ8AAMAJABFACFAECYFAxwPLzwLcjwPAgMGcg8ALysyETkrMhEzETMzMDFBByE3JRceAgcOBCcuAzc3MwcGBhYWFxY+Azc2AiUXBgIHDgIWFhcWPgI3NzMHDgMnLgM2Nz4CBkEb+lsbBBq1IB4BCwkmP1+HWmN5OgsKKH8nBgEbRkE5UDUiEgURG/xmxEaGFgQLARU0MUVhPyMIJ4ApDDhilWhWbjwXAggNOlcEOpiYAgJSrK9WSKKdf0sDAl+Uq1D5/C90a0YBAT9oeHAoggEHegF8/v2PHWZzakYDBj9qezb8+Veyk1cDA1CAmJg/YbWqAAMAov/xBXYFsAAbAB8AIwAhQBEfIxgFBQ4iIx4IciMCcg4JcgArKysRMxI5LzMRMzAxQTc+AhceAgcOAwc3PgM3NiYmJyYGBhMDIxMhByE3AjoLOXp+PYrPagwLXJS/bgtJels5CAo3ellAfXqX/bv8Arcc+7ccAoqoFyESAQJqyJB0qm44ApkBJ0xxSlp9QgECEyIDEPpQBbCengAAAgBz/+kE/gXHAAMALAAdQA4DAgIJHRkUA3IpBAkJcgArzDMrzDMSOS8zMDFBByE3ATcOAicuAzc3PgMXHgIXIy4CJyYOAgcHBhQeAhcWNjYDghz9uxwCorsepviai7tqIRAVFGmp6JOUxmcEuwQ0dWVupXNGDxYJGj5sUm+fZwMunZ3+oAKW3HUDA3fE7XiQhfXBbQMDf9qMXJNYAwRYmLpfkz+Mhm5EAgROlQAAA//N//8H7QWwABEAFQAuACdAEyQhIQkuFhYACgkIchQVFSMAAnIAKzIyETMrMhI5LzMRMxEzMDFBMwMOBCcjNzc+BDcBByE3AQUeAgcOAychEzMDBTI2Njc2JiYnJQIBu5sTL0dxqXk4EiRXdUotHAwDUBz9ghwCjwF1gsJlDApclbxo/eP9veIBSluXYgwKMW5S/nMFsP03X8/CnFwBnAIGWIihoEICqZ6e/cwBBGvChW6pdDsBBbD67QFJhl1Qe0cDAQAAAwBE//8H+gWwAAMABwAgACNAEQggIAMCAgYVBwJyFhMTBghyACsyETMrMhE5LzMzLzMwMUEHITcTAyMTAQUeAgcOAychEzMDBT4CNzYmJiclBGIc/Q8cjPy9/QOYAXV7xmsLCF6Vu2b95P284AFJVpZlDAo5cUz+cwM5nZ0Cd/pQBbD9nwEEXrSEbKVuNgEFsPr2AQE9elpPbjoDAQADALQAAAWcBbAAFQAZAB0AHUAOGQEYBhERGBwdAnIYCHIAKysyETkvMxEzMjAxYSMTNiYmJyYOAgc3PgMXHgIHAQMjEyEHITcFQLxMCyZsXzlubmw2EDRqa203jsNbEf2O/b39Ar0c+7ccAcpcgEMCAQoSGg+gEBoQCAECZsaSA+j6UAWwnp4AAgBC/pkFbwWwAAcACwAXQAsJBgECcgsDAwAIcgArMhI5KzIvMDFzEzMDIRMzAyUDIxNC/b3hArbivP3+ZVa8VwWw+u0FE/pQiv4PAfEAAgA2//8ElwWwAAUAHgAhQBAGHh4EAhMTBQJyFBERBAhyACsyETMrMhEzETkvMzAxQQchAyMTEwUeAgcOAychEzMDBTI2Njc2JiYnJQSXHP1X4bv8KAF1f8VpDAldlbto/eT8veIBSlmXYgwKNXBP/nMFsJ767gWw/a8BA2K4hm6mcDgBBbD67QFEgVxRcj0DAQAG/4z+mgV6BbAAAwAHAAsADwATACUAJ0ATCxERIAMDBx4Icg4PDxAUAnIJBQAvMysyMhEzKzIyETMyETMwMWUHITczAyMTIQMjExMHITchAyMTITMDDgUHIzcXPgM3BK8c+9IcH1q6WAVuW7tZRBz9lBwDDf28/f1uv4UNKTxQaoZSYhY9THBQNxSdnZ39/QID/f4CAgUTnp76UAWw/bc9qb65nGUJnQJDp7vFYQAF/6sAAAd1BbAABQAJAA0AEwAXACdAExYRCQMDAAAPDxQMCAhyDgoBAnIAKzIyKzIyMi8zETMRMzMzMDFBATMBIQcnASMBAQMjEyEBISczAQMBNwECSv6Q0AELARI74f339wKhAjb8u/0Drf19/r4B+AHl2P7YjQF4ApkDF/2JoAX9YgNOAmL6UAWw/OmgAnf6UAKynfyxAAIAJf/qBI4FxgAeAD4AI0ARACACAj4+FTQwKglyDwsVA3IAKzLMK8wzEjkvMxI5OTAxQSc3FzI2Njc2JiYnJgYGBwc+AxceAwcOAycXHgMHDgMnLgM3FwYWFhcWNjY3Ni4CJycCcrUWl1SYZwsKRoBMTo1jDrsKYJS0Xl6nf0EICGadtPqcV6aBRwgIaaTHZmClekAFuwVDek9Xp3YLCCFJaD2tAroBewEyb1xUbDUCATlwTwFkmGYzAQIyY5hoYo1aK1YBAihWjGVwpmszAgI5bJ1lAVF2QgMCO3teQ188HQEBAAEARAAABW8FsAAJABdACwUABgIIAnIEBghyACsyKzISOTkwMUEBMwMjEwEjEzMBOwNxw/28wfyPwv27AVoEVvpQBFf7qQWwAAP/y//+BWYFsAADAAcAGQAZQAwSBREIcgIDAwQIAnIAKzIyETMrMjIwMUEHITchAyMTITMDDgQnIzc3PgQ3BMUc/XkcAyj8vf39VbubFC5Hcal5OBIkWHVKLBwNBbCenvpQBbD9N17Qw51bAp0CBleIoKBDAAACAJT/6AVABbAAEwAYABpADhcWABUECAIYAnIPCAlyACsyKzISFzkwMUEBMwEOAyMmJic3FhYzPgI3AxMXBwECRgIZ4f09IEpackkaNhoXFSwWNEk3GCHuD5n+0wHtA8P7QTtiRyUBBQSaAwQBK0cpBI/8bKsMBEsAAAMAW//EBdgF7AAVACkALQAbQAwfDAwrFgAAKyoDcisALysROS8zETkvMzAxQRceAwcOAyMnLgM3PgMXJgYGBwYeAhcXMjY2NzYuAicTASMBAv7peL+AOg0NcbTkgul6vYA4DQ1xs+R9hsx9EQoYSn9c7IbLfhALGUp+XBf+77UBEQUgAgNcns91gdqhWQICXJ/PdYHZolmYAXPJglSXdkYDAnPKgVSXdUYDAWb52AYoAAACAEH+oQVuBbAABQANABlADAwHAnIFBAQJBghyAQAvKzIyETMrMjAxZQMjEyM3BRMzAyETMwMFI2uqPosc/GT9veECtuK8/aL9/wFfoqIFsPrtBRP6UAAAAgDLAAAFOgWwABUAGQAXQAsXBhERGAACchgIcgArKxE5LzMyMDFBMwMGFhYXFj4CNwcOAycuAjcBMwMjASe8SwokbGA3b21sNQ41amxtN47DWRADor39vQWw/jhdf0QCAQoSGg6fERoRCAECZ8eSAcf6UAABAEIAAAc5BbAACwAZQAwFCQYCAgsAAnILCHIAKysRMxEzMjIwMUEzAyETMwMhEzMDIQE/veEB5OG84gHh4b39+gYFsPrtBRP67QUT+lAAAAIAQv6hBzkFsAAFABEAHUAODAUICAQRCHIPCwYCcgEALysyMisyMhEzMzAxZQMjEyM3ATMDIRMzAyETMwMhBuZpoz2JG/uWveEB5OG84gHh4b39+gaY/gkBX5gFGPrtBRP67QUT+lAAAgCK//8FfAWwAAMAHAAdQA4REg8EHBwPAAECcg8IcgArKzIROS8zETMyMDFTNyEHEwUeAgcOAychEzMDBTI2Njc2JiYnJYobAbwbFAF0f8ZpDAldlbxo/eX8vOIBSlqWYgwKNHFO/nMFGJiY/kcBA2G5hm6mcDgBBbD67QFFgF1Qcj0DAQACAET//waXBbAAGAAcAB1ADhoZDgsAGBgLDAJyCwhyACsrETkvMxEzMjMwMUEFHgIHDgMnIRMzAwUyNjY3NiYmJyUBAyMTAWkBdX/FaAsKXZS8aP3k/bzhAUlalmMLCzVwT/5zBUr9vPwDXwEDYriGbqZwOAEFsPrtAUSBXFFyPQMBAu/6UAWwAAABADb//wR8BbAAGAAZQAwOCwAYGAsMAnILCHIAKysROS8zETMwMUEFHgIHDgMnIRMzAwUyNjY3NiYmJyUBWgF1f8VpDAldlbto/eT8veIBSlmXYgwKNXBP/nMDXwEDYriGbqZwOAEFsPrtAUSBXFFyPQMBAAIAdv/pBP8FxwADACwAHUAOAwICHgkFKQlyGRUeA3IAKzLMK8wzEjkvMzAxQQchNwEzHgIXFj4CNzc2LgMnJgYGBwc+AhceAwcHDgMnLgIEUBz9uxz+a7oFOXxqa59vQw4WCQEeQnFUbJpjHLsen/KZjcFvIxAVE2ak44+Vzm4DJZ6e/qtikVIDA1yauVuTQ46Fa0EDBFSXYgGT3nkDAnbC73yQgfPCcAMDedgAAAQASf/pBtMFxwADAAcAHQAzACNAEy8HBgYOJBkDAnICCHIZA3IOCXIAKysrKxEzEjkvMzIwMUEDIxMBByE3BQcOAycuAzc3PgMXHgMHNzYuAicmDgIHBwYeAhcWPgICAv28/QGIE/6vEwVGDBRnqOqXkMFrIRANE2mp6pWSwWof1w0LBjd8bHCodUYODQsHOHxrcqhzRQWw+lAFsP1lmJgPW4b+ynQDA33M9nxbhv3KdQMDfMz22V9VuKFmBANdn8BgX1O5omkEA12ewgAAAv/pAAAE2QWxABYAGgAfQA8XFhYAAAkMDBkIcg4JAnIAKzIrMhESOS8zEjkwMUEhJyYmNz4CMwUDIxMnBgYHBhYWFwUFASMBA6/+fVWDiw0NoPeOAdH9veL+jNMSCjVzVAFI/rz+NNMB1QI3KDjGlJjGYgH6UAUSAgGOk1R9SAMBOv1lApsAAAMAR//oBEwGEgAWAC8ARAAZQAw6IjAXFyIAAXIiC3IAKysROS8zETMwMUE3DgMHDgMHByM3NhI2Njc+AgEeAwcHDgMnLgM3Nz4CNz4CFyYGBgcHBh4CFxY+Ajc3Ni4CA7uRCD9nhU59qWs6DQ2VDRNQic+RNnRZ/ttnlF0mCAMLVYq8cm+gZCkKAgQZHw0ykblGY5FWDAIHDjFgTVB6VTMJAgYSN2AGEQFZcUMmDxhypc11XFyEAQHalxoKGj7+KwJSia1eFmzBlVQDAliVumUXHTMxGV2cW5gCX55bFj+Cb0YCAkFviEYWPndgOwACADH//wQKBDoAGwAzAC1AFgIBGyspKSgBKAEoDw0QBnIeHR0PCnIAKzIRMysyETk5Ly8RMxI5OREzMDFBITcFPgI3Ni4CIycDIxMFHgMHDgMHAyE3BT4CNzYmJiclNwUXHgIHDgMCav6dGAEPOH9gCgYlRFAk8aK0vAGNRo92RQUEPGBxOaH+VHMBPDpxUQkIM1ox/uMcAUw2Q2w8AwRQgJoB3JQBARZERTA6HgwB/FwEOgEBHD9vVUJePiMG/e6WAQEeSkI7Qh0BAZQBOAlAakhaekkgAAABAC4AAAOEBDoABQAOtgIFBnIECnIAKysyMDFBByEDIxMDhBz+HKG1vAQ6mfxfBDoAAAP/jf7BBD8EOgAPABUAHQAhQBAdGAkWFhsTCApyFRAQAAZyACsyETMrMjIyETMvMzAxQTMDDgMHIzczPgM3EyEDIxMhASEDIxMhAyMBmbZWFEBijWNmHCQ7W0MvD4ICeby1nv48/jgERFK1OP0lOLUEOv5saMeykjOWOXZ/j1IBlfvGA4/9Cf4pAT/+wQAF/6cAAAYOBDoABQAJAA0AEwAXADBAFxUQEAAWEREJAwMGAAAUBwwSEw0NAgZyACsyETM/MzM5LzMzETMzETMRMxEzMDFBATMTMwcnASMBAQMjEyEBITUzAQMDNwEBt/7czcLaN6/+gfACDgHvvLW8Ax/+CP7pygFeluKEATUB1wJj/kCjCv4fAnAByvvGBDr9naMBwPvGAfN+/Y8AAAIAIP/qA6QEUAAdADsAI0ARAB8CAjs7FDIuKQtyDwsUB3IAKzLMK8wzEjkvMxI5OTAxQSc3Fz4CNzYmJicmBgYHBz4CFx4DBw4DJRceAwcOAycuAjcXBhYWFxY2Njc2JiYnJwIOzRSoOGZFBwcxVjE4aEwNtAuEwGZHg2U3BAVNdon+/rVCf2U5BAVRgZtOZ69nBLICOF86OXJRCAgsVza/AgQBcgEBHkc+OEUhAQEnTDkBbo9GAgElSnNQTGpCH0cBAR0+aE1Yf1ImAgJOlm8BPFQtAQEmUT8+Rh0BAQAAAQAwAAAEOAQ6AAkAF0ALBQAGAggGcgQGCnIAKzIrMhI5OTAxQQEzAyMTASMTMwEYAmS8vLaI/Zy6vLMBMQMJ+8YDCfz3BDoAAwAwAAAEWAQ6AAMACQANAB9ADwwHBwsGBgIJAwZyCgIKcgArMisyETkvMzMRMzAxQQMjEyEBITczAQMBNwEBoLy0vANs/aP+/gHFAa+T/syDAYcEOvvGBDr9lKIByvvGAfN+/Y8AA//I//8EOQQ6AAMABwAZABlADBIFEQpyAgMDBAgGcgArMjIRMysyMjAxQQchNyEDIxMhMwMOBCcjNzc+BDcDmxv+AxsCm7y1vP3ut3QPJzpbhl89EiVCWDkiFQkEOpmZ+8YEOv32TJ+Sc0EBogIEQGN2dzIAAAMAMQAABX8EOgAGAAoADgAbQA0ACQwGAQoGcgsDCQpyACsyMisyMjISOTAxZQEzASMBMyMDIxMBEzMDAqIB9rf9cX7+6qUwvLS8AyC8trz3A0P7xgQ6+8YEOvvGBDr7xgAAAwAwAAAENwQ6AAMABwALABtADQkGCAMCAgYHBnIGCnIAKysROS8zMhEzMDFBByE3EwMjEyEDIxMDVBr90xt4vLS8A0u8trwCZZaWAdX7xgQ6+8YEOgADADAAAAQ4BDoAAwAHAAsAGUAMCQYIAgMDBwZyBgpyACsrMhEzMhEzMDFBByE3MwMjEyEDIxMDmRv97BsbvLS8A0y8trwEOpmZ+8YEOvvGBDoAAgBgAAAD6QQ6AAMABwAQtwMGBwZyAgpyACsrMjIwMUEDIxMhByE3Aom8tbwCFRr8kRoEOvvGBDqWlgAABQBJ/mAFOgYAABYAKwBCAFYAWgAnQBUnBgZJHhERUjM+C3IzB3JYAHJXDnIAKysrKxEzMxEzMjIRMzAxQQcOAycuAzcTPgMXHgQHNzY2LgInJgYGBwMeAjMWPgIlNz4EFx4DBwMOAycuAzcHBhQWFhcWNjY3Ey4CJyYOAhMBMwEFMgIMP2ygbkNtTicDSg0+X31MWXZFHgK+AwUEDCdLPixNQBZuDzdEI05xTC373gIKKkdoj11Fa0ciA0YNPV17TGiBQxDCAgYfTkgsTD8ZagszRCdUc0gnqwFTtv6tAg8VXb2cXQMCL1NxRAHgSHtbMAICTHyWm1kWK21xXzwBARUwJf2LIyQPAkNwhjUVTKWbe0cDAjVbdkP+M0d7WzICA2GasmsWNH1wSQEBFi4kAmMoLRQBAlSGmfwaB6D4YAACADD+vwQ4BDoABwANABtADQYBAw0MDAAKcgEGcgkALysrMhEzMhEzMDFzEzMDIRMzAzcDIxMjNzC8tKEB4qG2vJdkoTiJGgQ6/F4DovvGmP4nAUGYAAIAeQAAA/UEPAADABcAF0ALDxQJCQEABnIBCnIAKysROS8zMjAxQQMjExMHDgInLgI3EzMDBhYWFxY2NgP1vLW8HA07enxAeqNIDTK1MwgZUE1AfXoEOvvGBDr+D5kXIBABAme1eAE8/sNFcEQCAhIhAAEAMAAABggEOgALABlADAUJBgICCwAGcgsKcgArKxEzETMyMjAxUzMDIRMzAyETMwMh7LShAX+htqIBfqK1vPrkBDr8XgOi/F4DovvGAAIAJf6/Bf0EOgAFABEAHUAODAUICAQRCnIPCwYGcgEALysyMisyMhEzMzAxZQMjEyM3ATMDIRMzAyETMwMhBfBkojiJG/wttaIBf6K1oQF+obW8+uSY/icBQZgDovxeA6L8XgOi+8YAAgBW//8EeQQ6AAMAHAAdQA4REg8cBAQPAgMGcg8KcgArKzIROS8zETMyMDFBByE3AQUeAgcOAychEzMDBT4CNzYmJiclAj8b/jIbAXoBMGWhWAgGS3qaVP40vLaiAQBBbUgJByNOOf64BDqYmP6MAQRQlmxZil4vAQQ6/F4BATBdRDlWMgMBAAIAMf//BaoEOgAYABwAHUAOGhkOCxgAAAsMBnILCnIAKysROS8zETMyMzAxQQUeAgcOAychEzMDBT4CNzYmJiclAQMjEwEvAS9moVgIBkt6mlT+Nby0oQEAQW1JCQcjTzn+uASWvLW8AsYBA1GWbFmKXi8BBDr8XgEBMF1DOlYyAwECDPvGBDoAAAEAMf//A70EOgAYABlADA4LGAAACwwGcgsKcgArKxE5LzMRMzAxQQUeAgcOAychEzMDBT4CNzYmJiclAS8BL2ahWAgGS3qaVP41vLShAQBBbUkJByNPOf64AsYBA1GWbFmKXi8BBDr8XgEBMF1DOlYyAwEAAgAy/+gDxARRACcAKwAdQA4rKioJHRkUC3IEAAkHcgArMswrzDMSOS8zMDFBJgYGBwc+AhceAwcHDgMnLgI3FwYWFhcWPgI3NzYuAhMHITcCNkBxTw2sC4jGaW6aXCEJBQ1Uibpzb6ZYBa0EK1tDT3lWMwkGBggrW+wb/hsbA7cCNmA/AWylXQMCXpu9YStpxZtZAwJpsG4BP2xDAwJGdYxDKjuEdkz+vpeXAAQAMf/oBgMEUgADAAcAHQAzACNAEyQDAgIZLw4HBnIGCnIOB3IZC3IAKysrKxEzEjkvMzIwMUEHITcTAyMTATc+AxceAwcHDgMnLgM3BwYeAhcWPgI3NzYuAicmDgIC5Bv90RrtvLS8AUwDDlePwXdyomIlCwMNWY/BdnGhYibEAwcKMGBOU4BbNwoDCAsxYU9Tf1o2Am+XlwHL+8YEOv3PGG3LnlsDA16cwWYYbsicWQMDXZq/fRc/h3RLAgNFdpBIFz+JdkwDAkZ5kQAAAv+/AAAD/wQ7AAMAHQAdQA4BEhITEwMJBAZyBwMKcgArMisyEjkvMxI5MDFBMwEjAQUDIxMnDgIHBhYWFwUHJS4DNz4DAUnP/nbPAn0Bw7y1ovg8cE8JByVLMgFVG/7DSH1cMAUFUH6aAgT9/AQ7AfvGA6QBASlUQTRKKAIBmAECLFF3TFiAUygABAAg/kcD2QYAABEAFQAsADAAHUAQMC8oHAdyFQByFApyDQYPcgArMisrKzLMMjAxQTMDDgInIiYnNxYWMzI2NjcDASMBAyc+AxceAwcDIxM2JiYnJg4CAQchNwL0tloNWZlsHzseHhgzGThGJQi6/vW1AQsYSg5Le6tuV3VCFQh2tngHF0xITXpbOQG5G/2VGwHG/eJloFwCCgmTCAk9XS8GWfoABgD8RgJhu5ZXAwI/bYxP/TsCyEFpQAICPmuEAsiYmAAAAgBO/+kD7wRRAAMAKwAbQA0EDQMCAg0hGAdyDQtyACsrMhE5LzMRMzAxQQchNwEWNjY3Nw4CJy4DNzc+AxceAgcjLgInJg4CBwcGHgICphv95hoBWkNzUhGrEIrHa3KeXSIKBQ1Vi711c6ZaAakBLl1FU31XMwoFBwcsXwJomJj+GwI1YD8BbaVbAgNbmL9lK23FmVYDAmivcEFsQgMCQnKNSCo/hnNJAAAD/8P//wYtBDoAEQAVAC4AJUASFi4uACQhIQoJCnIUFRUjAAZyACsyMhEzKzIyETMROS8zMDFBMwMOBCcjNzc+BDcBByE3AQUeAgcOAychEzMDBT4CNzYmJiclAW62cw8mO1uGXz4TJUFYOSMVCQJqG/4cHAIIAS9ho10HBU17mFH+Nby1ogEAPm1JCQgqUjT+uQQ6/fZMn5JzQQGiAgQ/ZXZ3MQHQmZn+ZAEDSI1qWINWKwEEOvxcAQEuWEE4SiUCAQAAAwAw//8GTgQ6AAMABwAgACVAEhUWExMGCAMgAwICBgcGcgYKcgArKxE5LzMzETMRMxEzMjAxQQchNxMDIxMBBR4CBw4DJyETMwMFPgI3NiYmJyUDXxv91BpuvLS8AtEBMGGiXgcFTXuZUP40vLaiAQA+bEoICCpRNP64AqGWlgGZ+8YEOv5kAQNIjWpXg1crAQQ6/FwBAS5YQThKJQIBAAMAIAAAA9oGAAADABoAHgAZQA0eHRYKB3IDAHIRAgpyACsyKysyzDIwMUEBIwEDJz4DFx4DBwMjEzYmJicmDgIBByE3AeD+9bUBCxhKDkt7q25XdUIWCXa2eAcXTUhMels5Ac8b/ZQbBgD6AAYA/EYCYbuWVwMCP2yNT/07AshBaT8CAj5rgwLNmJgAAgAw/pwEOAQ6AAMACwAXQAsABgYLCnIJBAZyAgAvKzIrMhI5MDFlMwMjAzMDIRMzAyEBmLZZtVS0oQHioba8/LSY/gQFnvxeA6L7xgAAAgBu/+UG2gWwABgAMAAbQA4sHwlyFAcJciYaDgACcgArMjIyKzIrMjAxQTMDDgMnLgM3EzMDBh4CFxY2NjcBMwMOAicuAzcTMwMGHgIXFjY2NwOimbQMR3GbYVuGVSMKtL20BQgiQjZQd0kMAy+9tBF5xoNZgE4dCbSYswYMKEk3Tm9DCgWw+95bm3Q+AwJDc5ZXBCL73S1aTDACA0V5SgQj+99+wGwEAkZ1lVMEIvvdMFxKLQIDSHpGAAACAE//5wXXBDoAGAAxABtADiwfC3IUBwtyJhoOAAZyACsyMjIrMisyMDFBMwMOAycuAzcTMwMGHgIXFjY2NwEzAw4CJy4DNxMzAwYeAhcWPgI3AviTegs+ZYpXUXhLHwh6tXoEBhs3LURlPgoCpLV6D2ywdlByRRsIepN6BAkhPi8yTTgiBwQ6/SlSi2c3AgM7ZodNAtj9JyVNQSoCAzxnPwLZ/SlxrF8EAj5ohUoC2P0nKU5AJwIBI0BRLQAAAgAv//4DvwYWABcAGwAhQBANCgAXFwoaGxsKCwFyCgpyACsrETkvMxE5LzMRMzAxQQUeAgcOAichATMDBT4CNzYmJiclAQchNwE0AS9qn1MICXzDdf41AQ619AEARW9GCQcfTD3+uQHZG/1YGwLqAQRYn214rl0CBhb6ggEBOGVGOl87AwECf5iYAAADAEr/6ga0BcgAAwAsADAAIEARAwICLzACci8IHRQDcikJCXIAKzIrMj8rEjkvMzAxQQchNwE3DgInLgM3Nz4DFx4CFyMuAicmDgIHBwYGHgIXFjY2AQMjEwUgG/wuGwRJuR6m+JuKu2khEBUUaanokpPHZwS7AzR1ZW6lc0YPFggBGj5rUnCeaPyK/bz9A0GYmP6OAZbbdQMDeMPteJGE9cBuAwN/2Y1clFgDA1iXul+UP4yGbkQCBE+UBEf6UAWwAAMALf/pBYwEUQADACsALwAkQBMDAgIuLwZyLgohHRgHcggEDQtyACsyzCvMMz8rEjkvMzAxQQchNwEWNjY3Nw4CJy4DNzc+AxceAgcjNCYmJyYOAgcHBh4CAQMjEwRjG/ypGwJ3QnNSEasQisdrcp5dIgsEDVWLvnVyp1kBqS5dRVN9VjQKBQcHLF7+a7y1vAJomJj+GwI1YD8BbaVbAgNbmb5lK23FmVYDA2evcEFsQwICQnKNSCo/hnNJA7X7xgQ6AAAE/7oAAARUBbAABAAJAA0AEQAkQBERDQwMAgAGBgcDAnIPBQUCCAA/MxEzKzIyETMROS8zMzAxQQEjATMTAzczEwMHITcFAyMTAxb9bckC+3xqzxx194od/VIdAadguWAFCfr3BbD6UAUnifpQAlqjozP92QInAAAE/6IAAAOaBDoABAAJAA0AEQAeQA4RDQwMAQcDBnIQBQUBCgA/MxEzKzISOS8zMzAxQQEjATMTAwMzEwMHITcFAyMTAgz+WMICaZJNrRqE84Mb/b0bAXJItEgC9P0MBDr7xgMGATT7xgHBmJgm/mUBmwAGAFsAAAZWBbAAAwAIAA0AEQAVABkANEAaCRQUBgYYFREREBADAgIYCBYCcgQKCgsHAnIAKzIyETMrPzkvMzMRMxEzETMRMxEzMDFBByE3AQEjATMTAzczEwMHITcFAyMTAQMjEwNDHf3sHQPo/W3JAvt8as8cdfiLHf1SHQGnYLlg/gr9vf0CWqGhArD69gWw+lAFJ4n6UAJao6Mz/dkCJwOJ+lAFsAAGAE8AAAVLBDoAAwAIAA0AEQAVABkALkAXFREREBADAgIYGQZyCRQUBgYYCgsHBnIAKzI/MxEzETMrEjkvMzMRMxEzMDFBByE3AQEjATMTAwMzEwMHITcFAyMTAQMjEwK4G/45GwLN/lfCAmqSTa4ahPODG/2+GwFxSLNH/n28tbwBwZiYATP9DAQ6+8YDBgE0+8YBwZiYJv5lAZsCn/vGBDoAAAUAJgAABjkFsQAWABoAHwAkACgANEAZGRoaJBsfHyMjEygGBhMTARwkAnINJycBCAA/MxEzKzISOS8zETMRMxEzETMRMxEzMDFzIxM+AjMFHgIHAyMTNiYmJyUmBgcBByE3EwEzASMDAQcjAQEDIxPjvT0WjOOWAdSMv1gQPL09CyJoXf4slq0WBFQc/PccvgIu4v17ecsBNyp1/qECJ4e8iAFymcNdAQNjwZH+jgFzWntCAgMBhpgEPp6e/QoC9vyyA0/890YDTv1d/PMDDQAFACoAAAULBDsAFwAbACAAJQApADBAFxobGyUgJCQTKQYGExMBHSUGcg0oKAEKAD8zETMrMhI5LzMRMxEzETMRMxEzMDFzIzc+AjMFHgIHByM3NiYmJyUmBgYHAQchNxMBMwEjAxMHIwEBAyMT37UZFXvRkwExiKxHDxm1GQoUVlr+zmKCSQ4Dmxv9YhunAZnW/g5vheIma/7zAcxltWajkcVkAgNrw4akpVF/TAMDAUOCXwOXmZn9xAI7/W0ClP21SQKT/gv9uwJFAAAHAEkAAAhbBbEAAwAHAB4AIgAnACwAMAA8QB4hIiIkLAJyJysrGzAODhsbAwICBQcCchUvLwkJBQgAPzMRMxEzKxI5LzMzETMRMxEzETMrMjIRMzAxQQchNxMDIxMBIxM+AjcFHgIHAyMTNiYmJyUmBgcBByE3EwEzASMDAQcjAQEDIxME8Bv8iRuJ/bz9Ab+9PRWM45YB1Y2/VhA8vD0LImde/iuWrBYEVBz89xy+Ai/h/Xp4ywE3KnX+oQInh72IAyyXlwKE+lAFsPpQAXGaw1wBAQNjwZH+jgFzWntCAgMBh5cEPp6e/QoC9vyyA0/8+UgDTv1d/PMDDQAHAC8AAAbsBDsAAwAHAB8AIwAoAC0AMQA+QB4lIiMjLS0HKCwsGzEODhsbAwICBgcGchUwMAkJBgoAPzMRMxEzKxI5LzMzETMRMxEzETMRMxEzETMzMDFBByE3EwMjEwEjNz4CMwUeAgcHIzc2JiYnJSYGBgcBByE3EwEzASMDEwcjAQEDIxMEvBv8OhupvLS8AdW1GhR80JMBMYmrRw8ZtRkKFFZa/s5igkkOA5sb/WIbpwGZ1v4PcIXiJWz+8wHNZrRlAlyXlwHe+8YEOvvGpJHEZAIDa8OGpKVRf0wDAwFDgl8Dl5mZ/cQCO/1tApT9s0cCk/4L/bsCRQAD/83+SAQhB4gAFwBAAEkAK0AUGA0MQEAAKywJRUNDQkhBgEcXAAIAPzLeGs0yOTIRMz8zEjkvMzMzMDFBBR4DBw4DIyc3FzI2Njc2JiYnJRMXHgMHDgMjJwYGBwYWFhcHLgI3PgIzFz4DNzYuAicnARc3NxUBIwM1ARQBHVaZdD0GCGadtFSZFH9UmmgMCTpvRv7LNIFXpYJGCAhakbZkNTxqCQcjPiRSO2M6AwRpoFctQHRdPAkIIUlpP5UBRXSwoP7jb84FsAECM2COXWKLVygBcwEyb1xMYzMCAf34AQEpVoxlaaNuOAEBNUMuQjETeB5adkZkczEBASVHaEJFYT8fAQEE5qmoAw3+7wEQDgAAA//J/kgDmAYzABgAQQBKACZAEQ0ZDEFBAC1DSUZEQoBIGAAGAD8y3hrNMjIyOS8SOS8zMzMwMVMFHgMHDgMjJzcXPgI3Ni4CIyUTFx4DBw4DIycGBgcGFhYXBy4CNz4CMzMyPgI3Ni4CJyMTFzc3FQEjAzXRARdEinNCBARjk59CmRV+OoRjCQYkQEsh/s9MgT+VhFEEBFeJoE4xPGoKBiI/JFI7YzoDBGmhVikrXVI5BwgsTlkmledzsaD+4m/OBDoBAiJHcVFTbT4ZAXMBARhIRyw4Hw0B/qEBARU4aFNaf08kAQI0Qy5CMRN4Hlp2RmN0MRIoRDI0PiALAQRfqagDDv7vAREOAAADAGf/6QT+BccAFwAoADkAH0ASDClqMiBqMjIMABhqAANyDAlyACsrKxI5LysrMDFBHgQHBw4DJy4ENzc+AxcmDgIHBgYHITY2NzYuAgEWPgI3NjY3IQYUBwYeAgMldKpwPQ4NDRNoqOqWdKlxPQ8NDBRoquqMaaF0SREBAwEC+QEBAQgNO3r+yWmgcUkSAQIB/QcBAQYRPXkFxAJTi7PHZFuH/cp0AwJTjLPHY1yF/cp1pgNTj7JbBwwHBwwHU6qQXPtxBE+LrlsFCwUFCwZQpY1ZAAMAQ//oBBYEUgAVACAAKwAfQBILIWonG2onJwsAFmoAB3ILC3IAKysrEjkvKyswMUEeAwcHDgMnLgM3Nz4DFyYOAgchNi4CAxY+AjchBh4CAn1yoWElCwIOWI/BdnCiYiYLAg5Xj8FvSXNXOxECRgEVNVrTSnZZOxD9tgMTNFwETwNenMFmGG3JnFkDA12av2UYbsqeW5sCNl54PzpyYDv8zgM4YnxBO3djPQACAK0AAAVLBcYADgATABlADQ4SCAUTAnIFA3ISCHIAKysrETMRMzAxQQE+AhcXByciBgYHASMDExMjAwJMAX4hVXxcMxQKLUAuEv3BmDeXHovvAX0DI0yHUwEBqgEqQyX7dwWw+8D+kAWwAAACAIUAAAQ9BFIAEgAXABVACxcGchIWCnIMBQdyACsyKzIrMDFBEz4CFzIWFwcmJiMOAgcBIwMTEyMDAcfxGEtpSCA2GyQKFQscLyQM/k9+D2URcrUBOQIjPHFJAQ4OkgQGARwsF/yzBDr8+f7NBDoABABn/3ME/gY1AAMABwAfADcAJEAQAgInJwMaA3IHBzMzBg4JcgArzTMRM3wvKxjNMxEzfS8wMUEDIxMDAyMTAQcOAycuBDc3PgMXHgQHNzY2LgInJg4CBwcGFB4CFxY+AgOrRLRDMkW1RQLiDRNnqOuWdKlxPQ8NDBRoquqVdKpwPA/VDQkBG0FxV3CndUYODggcQnBWcqhzRAY1/n4BgvrJ/nUBiwIIW4f+yXQDA1KMs8ZkXIX9ynUDAlOLs8fAX0STinBFAwNen8BgX0OSi3JFAwRdn8EABABD/4kEFgS2AAMABwAdADMAJEAQBwckJAYZC3ICAi8vAw4HcgArzTMRM30vKxjNMxEzfC8wMUEDIxMTAyMTATc+AxceAwcHDgMnLgM3BwYeAhcWPgI3NzYuAicmDgIC+EC2QBBAtkD+sgIOV4/BeHGhYiULAg5Yj8F2caFiJsMDBwowYU5TgFo3CwIICzBhTlSAWjYEtv6QAXD8Qv6RAW8BERhty59aAwNenMFmGG3JnFkDA12ZwH0XP4d1SgIDRXeQRxc/iHdMAwJGeJIAAAQAdP/nBooHVwAVACAAQQBlADNAGVtOCXJUMTEsOAlyQkNDEQgIGxsWFiIhAnIAKzIyfC8zGC8zETMyETMrMjIvMysyMDFBMwcnLgMjIgYHByc3NjYXHgMBJzY2NzcXBw4CJQcOAgcDBh4CFxY2NjcTMwMOAycuAzcTPgIFNx4DBwMOAycuAzcTMwMGHgIXFj4CNxM2LgIFsysKJzxua2s5NEYKAn0DCYZsPG5scP5gTR4zChGaDQg1Sf61ElNsPAxbBQMdQjpQd0gMR5hGDUZym2Bgh1AcClsTdMUDDQtfhE8bClsORXGfZluEVCAJR5hGBg8uTjk+Wj0kCFwGAxxCBtWBAQEnMiY7NBIBJGtzAgEmMib+VDwhRixfAWUtSztzngJXh0r9xS1kWjoDBEZ6SgGt/lRbm3M+AwJNf6FXAjqFzHSfoARNfqBX/cZdpn9HAwJDc5ZWAaz+UzRdSSsCAjRZajQCPDBjVTkAAAQAUv/nBZEF9gAVACAAQgBmADNAGVxPC3JVMjIsOQtyQ0REEQgIGxsWFiIhBnIAKzIyfC8zGC8zETMyETMrMjIvMysyMDFBMwcnLgMjIgYHByc3NjYXHgMBJzY2NzcXBw4CJQcOAgcDBh4CFxY+Ajc3MwcOAycuAzcTPgIFNx4DBwMOAycuAzc3MwcGHgIXFj4CNxM2NiYmBSAtCik7b2prODVHCQJ9AgqHbDxua3D+WkkeMwkSmg8HN0r+xRBIWzEKKgQBFzYxM1I9JwglkSQLPmSLVld4RhkIKhBmsAK1ClV2RRgIKgs8ZY1dUXdLHggkkSQFDihCMTVMMh0GKwQBFTYFdIEBASczJTo1EgEkbHICASYyJv5MOyBHLF8BZS5KOnCXAk53P/7dJFhQNgIDIj5TL+vqUotnNwMCR3SSTgEiebhpmJkER3OPTv7eU5h0QQMCPGeGTerrLE8/JQECME5dLAElJ1ZMMwADAG7/5QbaBwQABwAgADgAK0AVNCcJcgUCAQEHBy0hCAgVAnIcDwlyACsyKzIRMzMzfC8zGC8zMysyMDFBITchByEHIwczAw4DJy4DNxMzAwYeAhcWNjY3ATMDDgInLgM3EzMDBh4CFxY2NjcD1f7QEwMUEv6/FqQdmbQMR3GbYVuGViIKtL20BQgiQzVQd0kMAy+9tBF5xoJagE4dCbSYswYMKEk3Tm9DCgaYbGx9a/veW5t0PgICQ3SXVgQi+90tWkwwAgNFeUoEI/vffcFsAwJGdZZTBCL73TBcSi0CA0l5RgADAE//5wXXBbEABwAgADkAK0AVNCcLcgUCAQEHBy0hCAgVBnIcDwtyACsyKzIRMzMzfC8zGC8zMysyMDFBITchByEHIwczAw4DJy4DNxMzAwYeAhcWNjY3ATMDDgInLgM3EzMDBh4CFxY+AjcDLv7PFAMTEP6+F6Qfk3oLPWWKV1J4TB4He7V6BAYbNy1EZT4KAqS1eg9ssHZQckYaCHqTegQJIT0wMU44IgcFRWxsf4z9KVKMZjgDAjxmh00C2P0nJU1BKgICO2c/Atn9KXGsXwMCPmiGSgLY/ScpTj8nAgIjP1ItAAIAaf6EBOcFyAAhACUAGUAMFhINA3IlAAAkAQlyACvNMxEzK8wzMDFlBy4ENzc+AxceAgcjNiYmJyYOAgcHBh4DFwMjEwI6CmWcb0IVDCcTZ6PahZPSagm7Bzd+ZWCXbUUNKQkEH0BmvVq7WomfBUh6nLJc+nrisWYDAnrZkl+TVgIDUYinVP09gHZfOwX9/AIEAAACAEz+ggPeBFEAHwAjABlADBURDAdyIAAAIgELcgArzTMRMyvMMzAxZQcuAzc3PgMXHgIHJzYmJicmDgIHBwYeAhcDIxMB1w1smFogCgQNVIq6cnClWAaqBCtbQ095VjQJBgcHKlqzWrVahZoGX5m7YStpxJtZAwNosG4BP2xDAwNGdYxDKj6DcUoH/f8CAQABAEAAAAS4BT4AEwAIsQ8FAC8vMDFBARcHJwMjASc3FwEnNxcTMwEXBwM8/vH8U/zqsAEl+1L+AQ39VPzyrP7V/1YDLP6MrHOp/r4BlatyqgF1q3SqAUz+YqtyAAH85wSm/9AF/AAHABW3BgYEBAECAgEALzMvETMRM3wvMDFDIQcnNyE3F1b99heiKgIMEqEFJH4B6WwBAAH9CgUW/+sGFAAVABK2ARQUDwaACwAvGswyMxEzMDFBFz4DFxYWBwcnNzYmJyYOAgcj/RYlQHZydT5kcQYDegIDKTI7dHR3PjAFlwEBJzElAQFwZScBFC84AQIkMicBAAH+FgUW/uQGWAAFAAqyAIACAC8azTAxQSc3MwcX/peBFLAcJgUWz3OXcgAAAf47BRj/UAZYAAUACrIBgAQALxrNMDFDByc3NzPItkdOFrEF07tJdYIACPo3/sIBlAWxAA0AGwApADcARQBTAGEAbwAAQQc2NhcWFhUnNiYjJgYBBzY2FxYWFSc2JiMmBhMHNjYXFhYVJzYmIyIGAQc2NhcWFhUnNiYjIgYBBzY2FxYWFSc2JiMmBgEHNjYXFhYVJzYmIyYGAQc2NhcWFhUnNiYjIgYTBzY2FxYWFSc2JiMiBv4CcApyWlhpbAMfMDA0AgNwCXNZWGpsAh4xLzRSbQlxWlhoawIeMDA0/tttCXFaV2lrAh4wMDT9lG8Jc1pXaWsCHjAwNP6ncAlzWlhpbAMeMTA0/vJtCXFaV2lrAh4xLzQ8bglxWldqbAIeMS80BPQBWGYBAWdXASo8ATv+wQFYZgEBZ1cBKjwBPP3gAVdmAQFmVwEqPDv90AFXZgEBZlcBKjw7/rsBWGYBAWdXASo8ATsE8AFYZgEBZ1cBKjwBO/3fAVdmAQFmVwEqPDv90AFXZgEBZlcBKjw7AAj6Tv5jAVMFxgAEAAkADgATABgAHQAiACcAAEU3FwMjAQcnEzMBNzcFByUHByU3ASc3JRcBFwcFJwEHJwM3ATcXEwf9P4UNrGQBo4QNq2UBHw8LATcR+l0QCv7JEQVmWQMBTT363FgD/rU+AgZpEV1DAt5oE11FPQMS/q8GBAIQAVH8JowKf1yVjAp/WwEIYhGZTfwwYhKZTgQDXwIBTz37V2AC/rE+//8ARP6ZBW8HGgQmANwAAAAnAKEBXwFCAQcAEARR/7wAFUAOAiMEAACYVgEPAQEBXlYAKzQrNAD//wAw/pkERgXDBCYA8AAAACcAoQCZ/+sBBwAQA1v/vAAVQA4CIwQBAJhWAQ8BAQF9VgArNCs0AAACAC///gO/BnIAFwAbABpADBoLGwJyABcXDQ0KEgA/MxEzLzMrzjMwMUEFHgIHDgInIQEzAQU+Ajc2JiYnJQEHITcBNAEvap9TCAl8w3X+NQEetf78AQBFb0YICB9MPf65AgAb/VcbAuoBBFiebnmuXAIGcvomAQE4ZkU6XzsDAQNdmJgAAAIAOwAABO4FsAADABsAI0ARAQIFAAMGBgUFEhATAnISCHIAKysyETkvMxEzMxEzMzAxQQEHAQMlNwUyNjY3NiYmJyUDIxMFHgIHDgIDiAEmdP7cYv56HAFvXp1nDAs3dlT+p+G8/QH9g8psDA2c9QPV/mJeAZz+xQGdAUCBYlV7RAMB+u4FsAEDZ8GImshgAAT/1/5gBAAEUgADAAgAHgA0ACVAFAADMAECMCUaDwtyBwZyGgdyBg5yACsrKysRMzIyMhEzMzAxQQEHAQMDIwEzAQcOAycuAzc3PgMXHgMHNzYuAicmDgIHAwYeAhcWPgIClwEGc/75uN62AQSmAnUCDUV2q3Nmj1kkBg4RUX6tbm+LSRLBAgcHK1tOPm9aQA8rASRDWTZTe1UxAYb+gF4BfwI4+wEF2v3yFWLHpGIDAlWNr1xvYruWVgQDZaG9cBY8hnVMAgItUWk6/vs2X0orAgJHeZEAAAIANQAABNQHAAADAAkAFUAKAgYGAwkCcggIcgArK84zETMwMUEDIxMTByEDIxME1FW2VXkc/VfhvPwHAP4YAej+sJ767gWwAAIAJQAAA7YFdwADAAkAFUAKAgYGAwkGcggKcgArK84zETMwMUEDIxMTByEDIxMDtlK2Unsb/huhtbwFd/4qAdb+w5n8XwQ6AAIARP7dBKUFsAAFAB0AGUAMBgcHExICBQJyBAhyACsrMi8zOS8zMDFBByEDIxMTNxceAwcOAwc3PgM3Ni4CJwSlHP1Y4bz9EhzEgMN/NQ0NUIjBfg9YflMuCQoZTIFdBbCe+u4FsPzwoQECVJbPfnjJlVMBkgJEc5FPWJNsPgIAAgAl/uEDewQ6ABQAGgAbQA0AAQELFxoGchkKcgwLAC8zKysyETkvMzAxUzcXHgIHDgMHJz4CNzYmJicBByEDIxOdHPWGzGgPCU15mVUhUH5PCgo0dlkB0hv+G6G1vAHkogEDd9CKWZp5UhKVFlR+VVeHTwMCV5n8XwQ6////q/6ZB3UFsAQmANoAAAEHAmEGMAAAAAu2BRsMAACaVgArNAD///+n/pkGDgQ6BCYA7gAAAQcCYQT1AAAAC7YFGwwAAJpWACs0AP//AET+lgVqBbAEJgI8AAAABwJhBAP//f//ADD+mQRYBDoEJgDxAAABBwJhA0YAAAALtgMRAgEAmlYAKzQAAAQANgAABUkFsAADAAcADQARAC9AFw8ODgsMBAQMDAsHBwsLABADCHIIAAJyACsyKzISOS8zLxEzETMvERI5ETMwMUEzAyMBMwMjATMBITUhBzcBIwEzvP28AdqSc5ICxOj9sf4gAZ4ZhAFJ4AWw+lAEMP1rBBX836B9nfyxAAQALgAABJQEOgADAAcADQARAC1AFg8ODgsEBAwMCwcHCwsAEAMKcgkABnIAKzIrMhI5LzMvETMRMy8RMxEzMDFTMwMjATMDIwEzASE3IQc3ASPqtby1AaeSZJICPeb+CP5bAQFrGYMBI9kEOvvGA0X9xgMv/ZSifH39jwAEALwAAAbNBbAAAwAHAA0AEQAjQBEQDw8LCgoDDgYIcg0HAgMCcgArMjIyKzISOS8zMxEzMDFBByE3IQMjEyEBITUzAQMBNwEC3Rv9+hsCiPy8/QQp/Q/+ru8CXML+XX8B/AWwmJj6UAWw/N+gAoH6UAKyn/yvAAAEAHYAAAWMBDoAAwAHAA0AEQAjQBEQDw8LCgoDDgYKcg0HAgMGcgArMjIyKzISOS8zMxEzMDFBByE3IQMjEyEBITczAQMBNwECfhv+ExsCRLy2vANt/aP+/gHEAbCT/s2CAYYEOpiY+8YEOv2UogHK+8YB8379j///ADv+mQV3BbAEJgAsAAABBwJhBGUAAAALtgMPCgAAmlYAKzQA//8AMP6ZBDcEOgQmAPQAAAEHAmEDZgAAAAu2Aw8KAACaVgArNAAABAA7AAAH4AWwAAMABwALAA8AH0APBwYGCgIDAwwLAnINCghyACsyKzIyETMROS8zMDFBByEnAwchNxMDIxMhAyMTB+Ab/ZBZlRz9AxyL/b39BD/9vPwFsJiY/Y6dnQJy+lAFsPpQBbAAAAQAJQAABZUEOgADAAcACwAPAB9ADwcGBgoCAwMMCwZyDQoKcgArMisyMhEzETkvMzAxQQchNwMHITcTAyMTIQMjEwWVG/47G4Ub/dMaeby1vANLvLW8BDqZmf4rlpYB1fvGBDr7xgQ6AAACAEL+3QdiBbAABwAfABlADAgJCRQEBwJyBghyAgAvKysyLzkvMzAxQQMjEyEDIxMBNxceAwcOAwc3PgM3Ni4CJwVu/bvh/Unhvf0DSx3EgMN+Ng4MUIjBfg5YflMvCQoaS4FeBbD6UAUS+u4FsPzwoQECVJbPfnjJlVMBkgJEc5FPWJNsPgIABAAl/uAGQQQ6ABQAGAAcACAAI0ARHhcYGAABAQsdHAZyGwpyDAsALzMrKzIROS8zMhEzLzAxQTcXHgIHDgMHJz4CNzYmJicDByE3MwMjEyEDIxMDXR39iNNvDghMeJdVJFB9TwoLPIBa5Bv97BscvLW8A0y8tbwB5KIBA3PQjlmaeVMSlhZUf1Rbh0sDAleZmfvGBDr7xgQ6AAEAa//jBa0FxwBDAB1ADjkMDCMiA3IAAQEuFwlyACsyMhEzKzIyETMwMWUHJiQmAjc3PgMXHgMHBwYCBgQnLgM3Nz4DNwcOAwcHBh4CFxY+Ajc3NjYmJicmDgIHBwYeAgUjDp7+8cNbFyMORnWmbmuHRxMLJheHz/72mo7LeywRGhFSh8B/ElZ5UC4LGgwQRYVqdseZZBInBQQXQ0JGYkAkCCQTPI7QhqMFZ7sBCajjXMOlZAQDa6a+VvOT/v/BagMDecj1f6xw3bhwA6QCXY+fRa9WuJ5lAwRTlsVv+Sx/fVYDA056hjXphs+PTAABAFz/5wRaBFQAQwAdQA45DAwjIgdyAAEBLhcLcgArMjIvMysyMhEzMDFlBy4DNzc+AxceAwcHDgMnLgM3Nz4DNwcOAwcHBh4CFxY+Ajc3NjYmJicmDgIHBwYeAgQnCn/dok8QDQozV4FXVWk2DQcOEGOdznt1oFwfCwcLPWeUYhI5TzMdBwcHBixfUVeNaEELDgMFCycrLj0kEwQNDTJun5KfBFKX1YhnSZmBTQMDWYqZQ2ly0aFbBANrrM1lO1ioiFMDnQNBY2wuOj6ShVcEA0V4lk5tGV5jRgIDOlpdIG1mnGs4////1P6ZBSsFsAQmADwAAAEHAmEDugAAAAu2AQ8GAACaVgArNAD////F/pkD9QQ6BCYAXAAAAQcCYQLPAAAAC7YBDwYAAJpWACs0AAADAKz+oQZjBbAAAwAJABEAHUAOCQ0NCAoIcgUQDAIDAnIAKzIyMi8rMjIRMzAxQQchNwEDIxMjNwUTMwMhEzMDBGQb/GMbBVBrqT2LHfxk/L7iArjhvP0FsJiY+vL9/wFfoqIFsPrtBRP6UAADAFf+vwTIBDsAAwALABEAH0APAgMDDQoFBnIIBwcQBApyACsyMhEzKzIvOS8zMDFBByE3ExMzAyETMwM3AyMTIzcDIhv9UBtNvLaiAeKitbyYZKM4iRsEO5iY+8UEOvxeA6L7xpj+JwFBmP//AMv+mQU6BbAEJgDhAAABBwJhBCUAAAALtgIdGQAAmlYAKzQA//8Aef6ZA/UEPAQmAPkAAAEHAmEDJQAAAAu2AhsCAACaVgArNAAAAwDKAAAFOgWwAAMAGQAdACNAEQMDCgoVAgIVFQQcCHIbBAJyACsyKxE5LzMvETMRMy8wMUEDIxMBMwMGFhYXFj4CNwcOAycuAjcBMwMjA0l6knr+cLxKCyVrYDhubWw1DjVqbG03jsRZEQOivf29A/v9QwK9AbX+OF1/RAIBChIaDp8RGhEIAQJnx5IBx/pQAAADAJQAAAQQBDwAAwAHABsAI0AQAAAYGA0BAQ0NBQpyEgQGcgArMisyLzN9LxEzETMYLzAxQQMjEwEDIxMTBw4CJy4CNxMzAwYWFhcWNjYClmOSYwIMvLW8HA07eX0/e6JJDTO0MggYUE1AfXsDG/3KAjYBH/vGBDr+D5oXIA8BAme1eAE8/sNFcEQCAhIhAAACABwAAASLBbAAFQAZABlADAEXBhERFxgCchcIcgArKxE5LzMRMzAxYSMTNiYmJyYOAgc3PgMXHgIHASMTMwQvvEsLJGtgOG9tbTUPNGprbTeOxFkQ/F69/b0ByVyAQwIBCRMZD58RGREIAQJmx5L+OQWwAAIAiP/pBcUFxgAJADYAJUASBR0BAR0dBhwcCiQVA3IvCglyACsyKzIROS8zMxEzLxEzMDFTFwYWFhcHLgIBLgM3Nz4DFx4DBwchNyE3Ni4CJyYOAgcHBh4CFxY2NxcOAo+UByVbSwxzmUcC5YjLgjMRJxJloNWDi7VgGRAR/FEZAu0GDQg1cV5fkmlBDigMFUuIZl2tUyI0hY0EOgFKaToFjARhqfwhAWKr4oH5duGzaAMDdcDpeHGLIk2bglICA1GKplL6WqWCTQICLiaQKCsQAAIABP/qBEkEUQAIADUAJUASBBwBARwcBRsbCSMUB3IuCQtyACsyKzISOS8zMxEzLxEzMDFTFwYWFwcuAgEuAzc3PgMXHgMHByE3BTc2LgInJg4CBwcGHgIXFjY3Fw4CCpEJR2QNaYY9AkluoWUpCQULVYu8c3CVUxkNDPzuGgJXBAgOMFM8U3tVMQkFBxI3ZEtckjxoMIObA1oBYG8HiARbm/z3AlaRuWYraMqiXgMDW5e7YlOXAhI1Z1UzAwNJe5JGKUCBbEMCAlNAWUReLwADADb+0wVFBbAAAwAJACEAIUAQCgYGCwgHBxcWCQMCcgIIcgArKzIvMzkvMzMzETMwMUEDIxMhASE3MwEBNxceAwcOAwc3PgM3Ni4CJwHv/bz9BBL8+f7dAeACXv08HcqAw381DQxRicJ9C1d9UjAIChhKf10FsPpQBbD85aoCcfzlpwECVJfPfnjKlVQDmgFEco9OVpFsPgIAAwAu/voEVwQ6AAMACQAeACFAEBYVCQZyBgoKBwsLAQMGcgEALysSOS8zMxEzKy8zMDFBAyMTIQEjNzMBATcFHgIHDgMHJz4CNzYmJicBn7y1vANt/YbmAacBzf1fHQEBhNZ1DglNepdSIUx9UQkLQYJXBDr7xgQ6/ZSiAcr9lKEBA2TBj1iUc00RlRRNd1JdeD0C////y/6ZBWYFsAQmAN0AAAEHABAERv+8AAu2AyQGAACYVgArNAD////I/pkERwQ6BCYA8gAAAQcAEANc/7wAC7YDJAYBAJhWACs0AAABAET+SAVuBbAAGQAZQAwZCHIXAgIRCgUAAnIAKzIvMzkvMyswMUEzAyETMwEOAiciJic3FhYzMjY2NxMhAyMBQbxyArRzvP75Dlqabh87HR4XMRg4RicHev1Mb70FsP1vApH5/GeiWwELCJkHCTxcLwLW/X4AAQAl/kgELAQ6ABkAHUAPGQpyFwICABEKD3IFAAZyACsyKzISOS8zKzAxUzMDIRMzAw4CJyImJzcWFjMWNjY3EyEDI+G1UgHhUrXHDVmYbB86Hh8XMBk3RyYIXP4fULUEOv4rAdX7bWafWgEKCZMHCQE9XDACKP4xAP//ADv+mQV3BbAEJgAsAAABBwAQBFn/vAALtgMWCgEAmFYAKzQA//8AMP6ZBEUEOgQmAPQAAAEHABADWv+8AAu2AxYKAQCYVgArNAD//wA7/pkGtwWwBCYAMQAAAQcAEAWN/7wAC7YDGw8AAJhWACs0AP//ADH+mQWNBDoEJgDzAAABBwAQBKL/vAALtgMZCwEAmFYAKzQAAAEAUv/pBRoFxAAsABtADRoLERQUCyUAA3ILCXIAKysyETkvMxEzMDFBHgMHBw4DJy4DNzchByEHBh4CFxY+Ajc3Ni4CJyYGByc+AgL5l9mDLhINE3Cy7pGQyXUnEhQEHxv8owcPFUqFY26re0wPDg4STZV0YbdYIziMkgXDAXLE+4teg/zKdgMDa7jthHyVI1mfekgDAl+gwl9fY76bXgIBLSeRKCsQAAIAPP/oBHYFsAAHACUAH0APBQgIBCUlABwSCXIHAAJyACsyKzIROREzMxEzMDFBIQcBIzcBIRMzHgIHDgMnLgM3MwYWFhcWNjY3NiYmJycBJANSF/28dxcBu/2SsYaGymgMCV2UuWVfmGs1BrsFMWhNVJJiCgszeFuWBbCF/bV9AbX+QQJmwYxqpHA4AgI+cZteSXdJAgNCfFZcgEQDAQAC//3+cwQvBDoABwAlAB9ADggFBQQlJQAcGBIHAAZyACsyL8wzEjkvMzMRMzAxUyEHASM3ASETFx4CBw4DJy4DNzMGFhYXFjY2NzYmJicn4wNMFP3IgBYBrf2ir4CFy2sLCVyUuWRemGo0BrMFMmpOVpRjCgs1el2VBDp//a59Abv+NwEDYr2NaaRwOAICPnCbXUp6SQIDQn5YXn9DAgH////5/kcE5wWwBCYAsUIAACYCNrhAAAcCZADqAAD////p/kcD0QQ6BCYA7E0AACYCNpqNAAcCZADaAAD////U/kcFKwWwBCYAPAAAAAcCZAOLAAD////F/kcD9QQ6BCYAXAAAAAcCZAKgAAAAAQAuAAAE2QWwABgAErcDAAALEA0CcgArLzM5LzMwMUEFByUiBgYHBhYWFwUTMwMlLgI3PgMCWQGNHP6KWZZjCwsxbVIBX+G9/f38gcRlDAldlbwDdAGeAUN/XFB9SQQBBRP6UAEEar+HbqdxOQACADH//wYgBbAAGAAtAB9ADhsLCxAlJQMAABoQDQJyACsvMzkvMzMvETMRMzAxQQUHJSIGBgcGFhYXBRMzAyUuAjc+AwEjNxc+Ajc2NiYmJxceAgcOAgJcAY4c/olZlmIMCjBtUgFg4bz9/fyCw2ULCl2VvAJMlRyAUXRGDQcGAgoKrwoOAwcRfMkDdAGeAUN/XFB9SgMBBRP6UAEEacCHbqdxOfyMnAEBTH1MKFJSUigBNmxsNn/FbwADAEj/5wY+BhgAFgArAEcAHUAQM0QLcjstAXIdEgtyJwYHcgArMisyKy8rMjAxUzc+AxceBAcHDgMnLgM3BwYeAhcWNjY3NzYuAicmDgIFEzMDBhYWFxY+Ajc2NiczFhYHDgMnLgJSAg1Ddq93U3ZOLA4ECxBKd6VsaYtMGMMCBwcpWEtSjGQWJwIfP1s4V3tRLgHXzrbPBRE6OlN6UzILEAUQqQ0GDhBSiLt4bok6Ae0WZNGwagMDP2mEkEZbX7qXWAMDXZa0cBY8fGtDAgJOg0zzN2VQMQICT4KZ8gS/+0AwYEIDBEh6kURkyGNkx2NtyZ1bAgFgpAAAAgCt/+kFpwWwACAARgAhQBAoJycCAQEOMkMJcjoNDgJyACsyLysyETkvMzMRMzAxQSM3FzI2Njc2LgInJTcFHgMHDgQHDgIHBgYTJzc2JiYnNx4DBwcGFhYXFj4CNzY2JzMWFgcOAycuAgHGyhyCW5xmDAcdQF46/pgcAVBfoXU6CAcyT2NtNwQHBwUONaMBCAclXEsaWI1fLAkHAxM1Lk1uSCsJEAUQsAwGDg5MfrJ1ZoI7AnmeATJ0Yz5aOx0CAZ4BAjFjlmZPZ0QwLx8DCgoDCAn+twJDSXFDBWwBL1qIXEYpSzICBE18jTxjyWNkx2Nnx6JeAQJRkgAAAgBo/+MErgQ6AB0AQgAlQBI+PT0bAgEBDSoqIjMLcgwNBnIAKzIrMjIvETkvMzMzETMwMUEnNxc+Ajc2JiYnJTcXHgIHDgMHDgIHBgYFNwYWFxY+Ajc2JicXFhYHDgMnLgM3NzYmJic3HgIHAVjwGaw6dFQJCTVeNf72FPhisGoGBUFfaS0GBQQGCTQBKQUEHDFAYUQqCQwGFKkPEQoMSnahZDtdQB8DCQQwVDIqVpVWCQG5AZYBAR1KQz5JIQIBlQECP4dwUE8nJCQFEREEBwfuFCwzAwUyWm42TqBNAU6dTl6lfUcCAR07Wz1OOj4bA2kBL3BjAAADALD+1gOWBbAAHwA0AD8AH0AOOjk/LAwNAnIhICABAQIALzMRMxEzKzIvMy8zMDFBIzcXMjY2NzYmJiclNxceAgcOBAcOAgcOAgc3HgIHBwYGFhcHIyYmNjc3NiYmAQcGBgcnPgI3NwGR4RuTXKBqDAo3clD+6Rv/f8RpCwcxTWFtNwUHCAUJHh8WGHatVQ4TBgIQFwOxGRAFBRMKKWIBwxgReVdjIjoqChsCeZgBMnZkVG43AgGYAQNZsohMZ0UzLh0DCQkCBgcFAm0DUaJ8iSRJRR4aIVBVJ4ZMcUP+YpRtvEJLK1liNpgAAAMAoP7FA3cEOgAeADMAPgAeQA44IB8fAgEBPisKDA0GcgArMj8zOS8zMxEzLzAxQSU3Fz4CNzYmJiclNwUeAwcOAwcGBgcOAiM3HgIHBwYWFhcHIyYmNjc3NiYmBQcGBgcnPgI3NwGt/vMbwzt3VAoINF02/t8cAQhJiWs7BQVAXmovCQUIBhscLChallIKDQQBERQCsxUQAQQNBipSAbYYEXVWaCM6KQobAbgBlgEBHUpFPkkgAQGWAQIjSnZTT1ApJCMHHAcFBgRqATd5ZWIcNTAWFBc6Ph5hPEgj8JRtvENMK1liNpgAAAP/4P/mBzcFsAARABUAMgAdQA4mJh4vCXIXFAAVAnILCAAvMysyMjIrMjIvMDFBMwMOBCMjNzc+BDcBByE3ARMzAwYeAhcWPgI3NjYnMxYWBw4DJy4CAhO7mxMvR3CpejcRJVZ1Si0cDQNBHP2THAGLvL28BAccNCtReFExCxAFEbEMBQ0PVIi8eHCMOgWw/TdgzsKbXJ0CBViJoKBCAqmenvurBFX7qiNIPicCBEh4j0NjyWNjyGNsy59bAwNfpAAAA//a/+YGAgQ6ABEAFQAzAB9AECcnHi8LchcUABUGcgsICnIAKzIrMjIyKzIyLzAxQTMDDgQnIzc3PgQ3AQchNwETMwMGHgIXFj4CNzY2JzcWFgcOAycuAwGFtnQPJjtbhl89EyZBWDkiFQkCZxv+IhsBQ3u1ewMHGzYqR2VCJwkOAxCoDAoNDUd2pmxTeEkdBDr99kyfknNBAaICBD9kd3cxAdCZmf0fAuH9HiRJPygBA0Nvfzhevl0BXr1eX7mVVwMCN2OEAAADADz/5wc4BbAAAwAHACMAIEARFhYOHwlyCAJyAAMDBggEAnIAKz85LzMrKzIyLzAxQSEHIQMzAyMBMwMGFhYXFj4CNzY2JzMWFgcOAycuAjcBZQLjHP0dELz9vARhu7oEEDk4UXhSMQsQBBGwDAcOEFOIvHhuijoIAx+eAy/6UAWw+6guX0EDA0h5jkNjyWNjyGNtyZ9bAgJhpWoAAAMAI//oBhQEOgADAAcAJQAiQBIZGRAhC3IJBnIDAgIFBwZyBQoAPysSOS8zKysyMi8wMUEHITcTAyMTARMzAwYeAhcWPgI3NjYnNxYWBw4DJy4DA0cb/dUaery2vAIje7Z7BAcbNitHZUInCQ8BEKgNCg0NR3ambVJ2SR0CZJaWAdb7xgQ6/R8C4f0eJEk/JwIDQ29/OF6+XQFevV5guJRWAQE4Y4YAAAEAZf/oBIIFyAArABVAChILA3IlJR0ACXIAKzIyLysyMDFFLgM3Ez4DFzIWFwcmJicmDgIHAwYeAhcWNjY3NjYnMxYWBw4CAkiAvXguDykUbarfh1urTkVAjElhnnVLDyoLE0N6XFyQXA8PAQuzBwcMEpbmFQNnrtx2AQZ+4axiAigvjCQiAQFMhKVZ/vdOoIhVAgJLhllYtFhZsliMzm4AAAEATf/oA4YEUQArABVACiEaB3IHBwAPC3IAKzIyLysyMDFlFjY2NzY2JzMWFgcOAicuAzc3PgMXFhYXByYmIyYOAgcHBh4CAfE6XDsJCQMEqQQDBw1yr2lwoGImCwUMVIq6ckiNPjoyczpQelY0CgUHDTJhgwEmTjo6djo6dTlslEoCA1yZvmUrasSaWQEBHCiOHx0BRnSLRSo/hnRJAAACAJv/5gUfBbAAAwAgABdACxQUDB0JcgUCAwJyACsyMisyMi8wMUEHITcBEzMDBh4CFxY+Ajc2NiczFhYHDgMnLgIFFhz7oRwBEby8vAMGGzUqUndSMQsQBBCwDQYPD1OHvHluijsFsJ6e+6sEVfuqI0k+JwIDSHmOQ2PJY2THY23Kn1sDAmGlAAACAH3/6ASABDoAAwAgABdACxMTCxwLcgUCAwZyACsyMisyMi8wMUEHITcTEzMDBhYWFxY+Ajc2JicXFhYHDgMnLgMECBr8jxrhfLR7BRE8OUBgRSkJDQYSpw4RCg1Jd6JlUndJHgQ6lpb9HwLh/R4wYEIDAjNZbTdQok8BT6BQXqZ/RwEBOGOFAAACAGj/6QUfBccAIAA/ACNAEQAiPz8CAhc1MSwDchENFwlyACsyzCvMMxI5LzMSOTkwMUEXByciDgIHBh4CFxY2Njc3DgMnLgM3PgMFJy4DNz4DFx4CByc2JiYnJgYGBwYeAhcXAsLGFalGinVOCQg0YHc7V6l8ELsMbafIZ1+5k1EICHKuygEXrk2ojlQGCG2qy2d52IMFugRRhkpVr30MCSpUaznAAxEBeQEZPGlQRmM9HAECOnhcAXCiaDECATJlnW5zllYkVgECKFSGXnSjZS0CA1uyhQFSbDYCAjJ0YENaNRkBAQD////L/kcFZgWwBCYA3QAAAAcCZAQkAAD////I/kcESgQ6BCYA8gAAAAcCZAM6AAAAAgDzBHMDTAXXAAUADwAStgUFDQcCAgcALzMvEM0yLzAxQTcTMwcBJTczBwYWFwcmJgHqAaO+Af71/rwMpA4KEiRGSEkEgxMBQRb+w/5VUD5tNDUtjP//ABoCHwIQArcEBgARAAD//wAaAh8CEAK3BAYAEQAAAAEApgKLBJQDIwADAAixAwIALzMwMUEHITcElCD8MiEDI5iYAAEAmAKLBdYDIwADAAixAwIALzMwMUEHITcF1iv67SwDI5iYAAL/Xv5qAx4AAAADAAcADrQCA4AGBwAvMxrOMjAxRQchNyUHITcC8hv8hxsDpRv8hxv+mJj+mJgAAQCwBDECBQYVAAoACLEFAAAvzTAxUzc+AjcXBgYHB7ASCz1bOWczSw8WBDF4SYRyLUxAi1F8AAABAIkEFQHhBgAACgAIsQUAAC/NMDFBBw4CByc2Njc3AeEUCz1bOGk0Sw8XBgB/SYRyLUxAi1GDAAH/l/7kAOsAtgAKAAixBQAAL80wMXcHDgIHJzY2NzfrEAs9WjlpNEoPE7ZmSYRyLUtAjFFqAAEA0gQXAbkGAAAKAAixBgAAL80wMVMzBwYWFwcuAjfvtBcMFCVoLTsXCAYAhE2ORUUvdoNB//8AuAQxAz4GFQQmAYQIAAAHAYQBOQAA//8AlQQVAxYGAAQmAYUMAAAHAYUBNQAAAAL/lP7SAhUA9gAKABUADLMQBQsAAC8yzTIwMXcHDgIHJzY2NzchBw4CByc2Njc39hsMPl07ZTVLEB4B0xsMPl07ZDRLEB72pkyKeDBLRZRWqqZMingwS0WUVqoAAgB3AAAEUQWwAAMABwAVQAoGBwcCAwJyAhJyACsrETkvMzAxQQMjEwEHITcDA+S15AIDGfw/GAWw+lAFsP6KmZkAA//2/mAEYAWwAAMABwALAB1ADgsKBgcHAQMKEnIDAnIBAC8rKxESOS8zETMwMUEBIwEBByE3AQchNwMR/tu1ASUCBBj8PxgDMBj8PxgFsPiwB1D+ipmZ/F6YmAABAKECFQItA8wADQAIsQQLAC/NMDFTNzY2MxYWFQcGBiciJqECBXBbV2MCBXJaVGUC1CpZdQFvVCtYcAFr//8AOP/yAsEA1AQmABIEAAAHABIBrAAA//8AOP/yBFMA1AQmABIEAAAnABIBrAAAAAcAEgM+AAAAAQBSAgABKQLYAAsACLEDCQAvzTAxUzQ2NzYWBwYGBwYmUzsvLz0BATwuLj0CaC8/AQE7Ly89AQE6AAcAlv/oBvcFyAARACMANQBHAFkAawBvAClAE19WVjJoTU1EKSk7Mg0XDg4gBQUAPzMzLzM/MzMvMzMvMxEzLzMwMVM3PgIXHgIHBw4CJy4CNwcGFhYXFjY2Nzc2JiYnJgYGATc+AhceAgcHDgInLgI3BwYWFhcWNjY3NzYmJicmBgYFNz4CFx4CBwcOAicuAjcHBhYWFxY2Njc3NiYmJyYGBgMBJwGbBwlWi1lVdzsGBglWi1hUeDyWCAQWOjI0TC4HCAQVOjM0TS0BtwYJVotZU240BQcJToJWVXg8lwgDFjkyNUwtBwgEFjozNEwuATcHCE+DV1V3OwUHCVWLWFNvNYQJAxY6MjRMLgcJAxY6MjVMLnj8j2MDcQRLTFWLUQICU4hRTVWJUAICUoeeTytRNQEBMlMwTixSNgEBM1T8T01Vi1ACAlaITU5Ri1MCAlOHn1ErUTUBAjNUME8sUjUBATNTfk1SilQCAlOHUU5VilACAlaIm1ArUjUBAjRTME8sUjUBATNTA0X7l0gEaAACAF0AmQJTA7UABAAJABJACQEFAwkCCAYGAAAvLxc5MDFBAQc1AQMTIwM1AlP+v68BWrW2fuMDtP5wAhABg/53/m0BhBAAAgAEAJkB+wO1AAQACQAOtAIICAUAAC8vOS8zMDF3ATcVAQMzEwcnBAFCr/6mAX3kAaqaAZACEP59Axz+fBABAAH/8ABxA8MFIQADAA6zAAMCAQB8LzMYLzMwMUEBJwEDw/yPYgNxBNn7mEgEaP//AI8CjALpBb8GBwHXAHMCm///AGQCmwLnBbAGBwIwAHMCm///AIoCjgMDBbAGBwIxAHMCm///AJACjgLTBbwGBwIyAHMCm///AKICmwMnBbAGBwIzAHMCm///AHsCjgLrBb0GBwI0AHMCm///AKoCkgLjBb0GBwI1AHMCmwACAH4CiwNGBb0ABAAZABO3FgsEBAsCEQIALzM/My8RMzAxQQMjEzMDBz4DFx4CBwMjEzYmJicmBgYBkGunjHswKAkqSG9PWGQkCFKmTQUJMDZFVS4E9P2XAyD+iwFAinZIAgJYi0/+BAHdLFk9AgFMc////9z+gQI2AbQGBwHX/8D+kP//AC3+kQG9AaYGBwHW/8H+kf///6v+kQI0AbQGBwHV/8H+kf///7z+hAI5AbQGBwIv/8H+kf///7L+kQI1AaYGBwIw/8H+kf///9j+hAJRAaYGBwIx/8H+kf///97+hAIhAbIGBwIy/8H+kf////D+kQJ1AaYGBwIz/8H+kf///8n+hAI5AbMGBwI0/8H+kf////j+iAIxAbMGBwI1/8H+kQAE//MAAASIBccAAwAeACIAJgAiQBAiISUmJgEbFxIFcgkCAgEMAD8zETMrzDMSOS8zzjIwMWEhNyEBAwYGByc+AjcTPgIXHgIHJzYmJicmBgYBByE3AQchNwPf/BQcA+z99FIKQUaxLDYcBlUQhdSEdKJRBrwFJldGUXZHATIW/VgXAnoX/VkWnQNz/YRVozY4EFRlKgJ+gchvAwNjrXMBQmg+AgJQgv8AfX3++n19AAMACgAABkQFsAADAAcAEQAiQBADAgYLDhAHBw0RDgRyCg0MAD8zKzISOS85EjkzzjIwMUEHITcBByE3AQMjAQMjEzMBEwZEG/oVGwW3G/oVGwWf/bb9+MS9/bYCCsUDrZiY/tSYmAMv+lAEa/uVBbD7kgRuAAADADn/7QYlBbAAFwAbAC0AI0ASIikNHBkYBnICAQEODA8Ecg4MAD8rMhI5LzMrMsw/MzAxQSc3FzI2Njc2JiYnJwMjEwUeAgcOAgEHITcTMwMGFhYzFjY3BwYGJy4CNwIX8BvZYYtRDAodYVrF47X9AWOGs1IMDofdA38a/ckZ7bS3BAonJxUrFQwgQyFTXiEHAjQBmAFIhl5Sf0sDAfroBbABBGzBhJHLawIHjo4BB/vJIzghAQcEmQkJAQFSgkoA//8AO//rB+cFsAQmADYAAAAHAFcENAAAAAYACQAABhcFsAADAAcADQASABcAHQAqQBQdFQoKEgYHAwICERIEchMbGwgRDAA/MzMRMysSOS8zzjIRMxEzMzAxQQchNwEHITcBEwEzAwEDEwMjAwETATMBAxMDIxMTBeMb+n0bBUcb+n0bAQ+VAVSElf6pKwsedS8CpYgBV8H91yICFX8CFAPUl5f+ppeX/YYB4APQ/h/8MQWw/CL+LgWw+lAB5gPK+lAFsPwg/jAD0gHeAAIAH//+BckEOgARACIAIEAPFhMTERQIFAgRChwPAAZyACsyMj85OS8vETMRMzAxUwUeAwcDIxM2LgInJQMjISETMwMFMjY2NxMzAw4D2wIRWXM/Egg1tjYGBR9CN/7CorYDqP3WgLVlASlSbj8Mc7VyCzhgjQQ6AgJCb49Q/rcBTDBXRSkCAvxeAt79ugI9cU4CqP1aWZVtOwADAFH/7QSJBcYAIwAnACsAHUAOKisnJiYHGRIFcgAHDXIAKzIrMhI5LzPOMjAxZRY2NxcGBicuAzcTPgMXMhYXByYmJyYOAgcDBh4CAQchNwEHITcCvzhtNgU5dTp+smomDjQTX5rShTx2OyEyaDRgkWc/DTUJCzZtAQwW/SIXArAW/SIXigESD6EODgECXaDPdAFNfNafWAESDKMRFAEBQ3ebV/6wSpN6TAMTfX3++3x8AAADAEMAAAX7BbAAAwAHAB8AKUATBgcDAgIUChQXCQoKFhcEchYMcgArKxI5fS8zETMREjkYLzPOMjAxQQchNwUHITcBJTcFMjY2NzYmJiclAyMTBR4CBw4CBfsb+o0bBUkb+o0bApD+ehwBb16dZwwLN3VV/qjhvPwB/oLLbAwNnfQEvZiY9ZiY/nIBnQFAgGNVe0QDAfruBbABA2fBiZrHYQADAEoAAARzBbAAAwAcACAALUAVHyAgEQMCBQYGGgIaAhoEEBEEcgQMAD8rMhI5OX0vLxEzETMRMxEzETMwMUEHITcBATcXMjY2NzYmJiclNxceAgcOAgcBBwEHITcENkn8dEkBPP5kFOJYnGoMCzZ4V/7xScqLzGYNDZbskAF7AQG0SP0iSQRMnp77tAJzcwE+e11ZekECAZ4BA2LCkJq9WAP9yA4FsJ6eAAQAC//nBBUFsAADABQAGAAcABVACQQEAw8BCw0DBAA/PzMzEjkvMDFBAyMTATMHDgMnJiYnNz4DNwMHATcFBwE3Alz8vP0BuroLEmip65cwXzDEc6t1RQ4XIv0uIQKZIf0tIgWw+lAFsP1TV4f+y3UDAQ8GjwNal8BoAn28/sa8Erv+xrsAAv/yAAAEigQ6ABsAHwAYQAsIFRUeHwZyDgEeCgA/MzMrEjkvMzAxYSM3NjYuAicmDgIHByM3PgMXHgQHAQMjEwRetR8KARxDc1dxqHVHDx62HxRop+mWdKlwPA4O/sK8try+RZOKcEQCBF6ewWG8uoT9y3YEAlKMs8dkA4D7xgQ6AAL/5QAABTAFsAAXABsAGkAMGRgDAAAODA8Ecg4MAD8rMhI5LzPOMjAxQSU3BTI2Njc2JiYnJQMjEwUeAgcOAgcHITcC+P0gHALIYJxlDAs4dVL+puG8/QH+gsprCw6b878c/TccAjoBnQFBgmNTekQDAfruBbABA2a/iZnJYoiengAEAMz/6AUxBckAIQAzAEUASQAlQBJCJzBHRzkwDXIfBQ5JSRYOBXIAKzIyLxDMMisyMi8QzDIwMUE3DgInLgI3Nz4CFx4CByM2JicmBgYHBwYWFhcyNhM3PgIXHgIHBw4CJy4CNwcGFhYXFjY2Nzc2JiYnJgYGAQEnAQJahAdMfE5TbjQFBwhPg1dMcTwBiAM2PzNFKAYJAw4xLz1NlAYJV4tYVXc7BQcJVYtYVXg7lgcDFTkyNUwtBwgEFjoyNUwuAVz8kGMDcQQdAk11QAICVohMTVGMVAICQ3RKOk8BATZVLE4mUjoBTv0yTVaKUAMBU4dRTlWKUAICU4efUStSNAIBM1QwTyxSNgEBM1QDRfuXSARoAAEAS//rA74GFwAuABS3GRgYASQMAAEALzMvMxI5LzMwMWUHLgM3Ez4DFx4DBwcOBAc3PgM3NzY2JiYnJg4CBwMGFBYWAmQLYIZPGgp6CS5PdVBAWjYVBAUOa6jW9H8UfOS5eA8GAQIIGxwnMh0OA3gHHEaLoARLfZ9ZAulFiHBCAwI3Wm45KoLpwo5QArACXqXafSoSNTMjAgIvSkwc/RU1ZFI0AAAEADUAAAfrBcMAAwAVACcAMQAlQBErMC4qAgMbEiQJCTEuBCotDAA/Mz8zMy8z3DLOMhESOTkwMUEHITcTNz4CFx4CBwcOAicuAjcHBhYWFxY2Njc3NiYmJyYGBgEDIwEDIxMzARMHZBr9qhkzCQtkomhjhkAICgtioGhjiEGzCwQWQTs+VTEICwUXQDs+VjL++v3B/oPHtfzCAX7HAiuOjgHaY2SeWQIDXZpfY2SeWAIDXJrCZTRbOwECOF84ZDRcOwECOF8BEPpQBHb7igWw+4cEeQAAAgDrA5YErQWwAAwAFAAkQBEJBAEDBgoHBxMUAgADAwYGEQAvMxEzETM/MzMRMxIXOTAxQRMDBwMDIxMzExMzAwEHIwMjEyM3A/dDwjRGR1leakbQcV7+Ig+PUFlPjg4DlwF8/oUCAZL+bwIZ/nQBjP3nAhlR/jgByFEAAAIAf//rBHEEUQAdACYAF0AKIhcXBB4OBxsECwA/Mz8zEjkvMzAxZQcGBicuAzc+AxceAwcGBgchAxYWFxY2AyYGBwMhEyYmA6wDU79kbahvMAoLZaLLcW+fYioGAQIB/RI7L3lGaL91U5E+MwILMyx4xWg1PQICYJ7CZWvNpl8DA16bv2IMFwz+tjI3AgNIA14CSTL+6gEfNDsA//8Atv/zBXQFmwQnAdYASgKGACcBlADfAAABBwI0AvwAAAAHsQYEAD8wMQD//wCS//MGEAW3BCcCLwCXApQAJwGUAZgAAAAHAjQDmAAA//8AkP/zBgYFpAQnAjEAeQKPACcBlAF3AAABBwI0A44AAAAHsQIEAD8wMQD//wC+//MFvAWkBCcCMwCPAo8AJwGUARcAAAEHAjQDRAAAAAexBgQAPzAxAAACAE3/6AQ0BewAKQA/ABlADCoAABI1HwtyCRIAcgArMisyETkvMzAxQRYWFzYuAycmBgYHJz4CFx4DBgcHDgQnLgM3Nz4DFyYOAgcHBh4CFxY+Ajc3Ni4CAmZVmDMFCCI/Y0YyYV8vATFmajeBplsjBQ0IDTtdgqlqbp9gJgoDDFWItnVLeVk4CQMHCy9dTFyEVzMMCgEtS1kD/gJKRTh/fGc/AwEPGhCXFx8OAQJus9neYDtZuqqFTAMCWZS7ZBdotYlLmgI2YX1FFj6Cb0YDA1aOpEpEMkw2HAAAAQAk/ysFRwWwAAcADrUEBwJyAgYALzMrMjAxQQEjEyEDIwEFR/77tu79Te22AQUFsPl7Be36EwaFAAP/rf7zBNMFsAADAAcAEAAfQA4OBgYHBw8CcgwDAwoCCwAvMzMzETMrMhEzETMwMUUHITcBByE3AQcBIzcBATczBA0b/AEbBMUb/CsbAlMD/MZnGgLK/i8YWXaXlwYml5f8qxr8spYCzgLThgAAAQCrAosD8QMjAAMACLEDAgAvMzAxQQchNwPxG/zVGwMjmJgAAwBB//8FDwWwAAQACQANABZACgkLCwoECAgBAnIAKz8zLzMRMzAxQQEzASMTEwcjAwc3IQcB1gJ4wfz1fgVkA3GgmhwBKxsBAASw+k8DD/3e7QMPmZmZAAQAS//oB5EEUQAXAC8ARwBfAB1ADls2Nh4TC3JOQ0MrBgdyACsyMhEzKzIyETMwMVM3PgMXHgQXBw4EJy4DNwcGHgIXFj4DNzc2LgMnJg4CBQcOAycuBCc3PgQXHgMHNzYuAicmDgMHBwYeAxcWPgJVAw1Yjr5zWIReQCsQBhRQcYqcUm2dYifCBAYKL15MO25hUDsQBwMZMkhbNFJ9WTUGcQMNWI+/c1iDXkArDwYUUHKKnFNtnGImwgQGCi9cTDtuYlE7EQcDGTJIWjRSflk2AggbaMmgXQMDQm2IlUkrTJyNbz8CAmCdvnsbPIZ2TAIBL1NnbzMqMGlkUDICA0d5kTcbacihXAMDQm2JlUkrTJyNbj8CAmGdvnobO4Z2TQIBL1JnbzQpMGlkUTICA0d5kAAAAf8V/kYDBwYZAB8AELcbFAFyCwQPcgArMisyMDFXDgInJiYnNxYWMxY2NjcTPgIXMhYXByYmIyIGBgfyDFeWaiA8HiETJxQ3TSsIxQ1bnnAlSCQhFisXQFk1CWtml1ICAQwJkQYJAjFTMwUZaaReAQ4IjwYHN2A7AAACADMBFgQtA/UAGQAzABtACxcEgAoRQDEegCQrAC8zGt0yGt4yGs0yMDFTNzY2MzYWFxYWMzI2NwcGBiciJicmJiMiBgM3NjYzNhYXFhYzMjY3BwYGJyImJyYmIwYGfBAzgUlAZjUxXjpMfzUUMXpGO2AxNWRATYR/EDOBSEBmNjFeOkx/NBQwe0Y7XzI1ZD9NhALKvDI8ASwfHCtNMrwxPQEpHR8rTP4svDI7ASwfHCpNMr0xPQEpHR8sAUsAAwBwAJ4D/wTTAAMABwALAB9ADQIBAQoKCwADAwcHBgsAL84yETMRMxEzETMRMzAxQQEnARMHITcBByE3A9r9EVoC7oAd/NYcAuMd/NYcBJL8DEED9P78oaH+YaGhAAP/0wABA8kESwAEAAkADQAiQBADBwYABAgGBQkJAQICDQ0MAC8zfBDOLzIyGC8zFzkwMVMBBwE3JQUHNwEDByE31QJ4If0mFAM+/T2LFgNdsBv81RsCw/7+qgFZYr7+DW4BWPxOmJgAAwAYAAAD6QRWAAQACQANACJAEAMHBgAECAYBAgIFCQkNDQwALzN8EM4vMjIYLzMXOTAxQQE3AQcFJTcHAQUHITcDWP10IQL8FPyeAtmZFvyAAw8b/NUbArEBAKX+qGPE/RVv/qiKmJgAAAIAQgAAA9UFsAAHAA8AHUAOBQgIDgcScgMKCgsBAnIAKzIyETMrMjIRMzAxUwEzBwETByM3AQM3MwEBI0IB+4Ar/mbSCXEzAZvSCnEBDv4EfwLhAs+O/av9rXqNAlQCVXr9Hf0z//8AdwCkAfAE+AQnABIAQwCyAAcAEgDbBCQAAgBxAnkCdwQ6AAMABwAQtgYCAgcDBnIAKzIyETMwMUEDIxMhAyMTAUhOiU4BuE+JTwQ6/j8Bwf4/AcEAAf/k/14BDwDvAAkACrIEgAkALxrNMDFlBwYGByc2Njc3AQ8MD2FMYyk7DQ7vTmCnPEs4eEVRAP//AHUAAAVsBhkEJgBKAAAABwBKAhsAAAADAFkAAAQFBhkAEAAUABgAG0APGAYXCnITFAZyDQYBcgEKAD8rMisyKz8wMWEjEz4CFxYWFwcmJiMmBgcXByE3IQMjEwERtckQcrl6R4lDLDVxOm+HEcoa/c8aA5K8tbwEl3euXQICJRaeGB4Cb21ejo77xgQ6AAADAHUAAARoBhoAEgAWABoAG0APGRoGchQAcg4GAXITAQpyACsyKzIrKzIwMWEjEz4CFx4CFwcmJiMiBgYHEwEzAQMHITcBLbXMD2mtdUGFgz9gR5JIQmI9CrYBBLT+/Z0Z/cYaBKpxplkDARUdDoMOGjJdP/tTBdj6KAQ6jo4AAAUAdQAABlgGGgARABUAJgAqAC4AJUAUIxwBci4qFBUGcg0GAXItFxcBCnIAKzIRMysyKzIyMisyMDFhIxM+AhcWFhcHJiYjIgYGBxcHITcBIxM+AhcWFhcHJiYjJgYHFwchNyEDIxMBLbXMDmSnciFBIBYYMBlAXTkK2Bn9vBoC1rXIEHK5ekiIRC01cTtuhhHJGf3PGQOSvLW8BKttplwBAQoGmQUHNV09co6O+8YElnitXgIBJhedGB0Cbm1ejo77xgQ6AAUAdQAABqAGGgARABUAKAAsADAAKUAXKwByJBwBci4UFC0VBnINBgFyKRcBCnIAKzIyKzIrMjIRMysyKzAxYSMTPgIXFhYXByYmIyIGBgcXByE3ASMTPgIXHgIXByYmIyYGBgcTATMBAwchNwEttMsOZKdyIUEgFhgxGUBdOQnZGf27GgLWtcwQaKx0QoWDQGBHkkhCYj4KtgEEtf78nBn9xhkEq22mXAEBCgeYBQY0XT1yjo77xgSscaNYAQEVHQ6DDRoBMl0/+1MF2PooBDqOjgAABAB1/+0EyAYaAAMAFwAbAC0AJUAUIikLchMKcgkcHA0NBAFyGAIDBnIAKzIyKzIRMxEzKysyMDFBByE3ARYWFwcnNyYmIyIGBgcDIxM+AgEHITcTMwMGFhYXMjY3BwYGJy4CNwHLGf7DGgIvZMRaILQWJ10sQFo1Csy1zA5dnwJ6Gv3HGu21twQLJicVKxQLIEEhU14jBwQ6jo4B3gI7K9ABehQSOWA7+1MErGmmX/4gjo4BB/vJIjghAQYEmQkJAQFSgkoABAAo/+oGcwYTABsAHwAxAGcAMUAbOzJAZGBbC3IBRUlAB3ImLQtyHhAfBnIUCgFyACsyKzIyKzIrMswyK8wzEjk5MDFBBy4CNz4DFx4DByM2JiYnJgYHBh4CAQchNzczAwYWFhcWNjcHBgYnLgI3BTYmJicuAzc+AxceAgcnNiYmJyYGBgcGHgIXHgIHDgMnLgI3FxQWFhcWNjYDtmEOMyMICEVrgkRZgVIjBbYEFkdFTXYMCQgSDAK4Gf3RGca0kgQGJCkVKxQMIEMiV1ocB/4/Cj1kMDt6ZDoEBU57k0llp2ADtAIwVzc2ZkoIByVBSiBSnWIGBVGAmU1ps2oEtTVhQDVvUwL8AVGlplNJb0wlAQI6Z4xTOmlDAQFWTjt1dncBA46OWPyUIUUxAQEHBJkJCQECYZBJBD1GJQwPLEVmSlB7UigBAlCWawE4Uy0BASNKOSs3IRUIF0Z7Y1Z9UScCAlOdcQFBWS4BAR5HAAAV/6v+cghGBa4ABQALABEAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBXAHMAjACaAKgAAEEjEyEHIyEjNyEDIwEhEzMHMwUhNzM3MwEhNyEFITchASE3IQEHIzcTByM3ASE3IQEHIzcBITchBSE3IQEHIzcTByM3AQcjNwUTMwMGBiMiJicXBhY3MjYlIzcXNjY3NiYnJwMjExceAgcOAgcGBgcGIgcnNzM2Njc2JicnNzcyFhcWBhceAgcGBgEHBgYnJiY3NzY2FxYWBzc2JicmBgcHBhYXFjYBKW8yAS0UvgZ+wRQBLjJt+TH+0zdvJL8GGf7SFMAkbf4n/vEUAQ/85P7zFAENARj+8xUBDQPhLG0s8C1tLfxM/vIUAQ78ny1vLQTo/vIVAQ4Bb/7xFQEP+i8tby2wLG8sBxksbSz+9zphOwlpUFFnAVkCJjAsOf3wmQZtLFUICEEiZFFeYKstWTkCAzJGIAQCAwQQLrw1gCtJCAYuJHoHjAUTBAICBBg0IwECgf7GCQmHZGByBAkKhmNfc2oNBTJAQ1AKDgUyQURPBJEBHXR0/uP54QE7ynFxyv7FcXFxBld0+3T5+QLy+vr6XnECP/n5BBh0dHT87vz8AXj6+v6I/Pz0AXv+hU5cUlUCKzMBOnBGAQIiMiwUAQH+LwIlAQEZPjc4JxEYAw8DBPUDSAMoLykjAwFGAQIFAw8DGBIiMldJAUdwYX4CAnxfcGJ8AgJ8znI6VwIBWD1yO1cCAVgAAAUAXP3VB9cIcwADAB4AIgAmACoAAFMJAgMzNDY3NjY1NCYjIgYHMzY2MzIWFRQGBw4CEzUjFRM1MxUDNTMVXAO8A7/8QXfKGSlEYqeVf7ECywI+Jzg5NSgvPR3Jyn8EBgQCgwPP/DH8MQLeMz4bJYFSgJd9jTcwQDQ0TRohOk7+u6qq/UgEBAqaBAQAAf/qAAACcwMjABwAELUDHBwLEwIAL8wyMxEzMDFlByE3AT4CNzYmJyIGBwc+AhceAgcOAgcHAkYX/bsUATwcQTIGBjQvQlAOmwlXiFJFd0YEBEhlL8OAgHQBCRg7RSgvNwFLPQFTdj8BATNlTEFsWSWSAAABAGwAAAH8AxUABgAjQBUEBQUDAy8AfwACDwBfAK8A/wAEAAEAL81dcTIRMxEzMDFBAyMTBzclAfyDmWjcGAFjAxX86wJVOIhwAAIAHP/xAnYDJAARACMADLMXDiAFAC8zxDIwMUEHDgInLgI3Nz4CFx4CBzc2JiYnJgYGBwcGFhYXFjY2Am8PCk2JZmFxLAcPC0yKZmBxLLQSBActNDdDIgYTBAguNThCIQHQi1ycXAMDX5dYi12bXAMDX5jwqihYPwECO1suqClaPwICPF0AAQBp//gDmASgADIAF0AKFB4eJgExCgwmfgA/Mz8zEjkvMzAxdzMWPgI3NzYuAicmBgYHBhYWFxY+AjcXDgInLgI3PgIXHgMHBw4DIyO2D2KshlkQHgULJ0s5SnJGCAYhU0MyW0w3DScTbpdSb5NFCQp8xntljFIcCggTcLX3mxiSAS5hlGXLMGRVNgECSHhGPG1GAQIfO08vZFN2PQECaa5oeb5rAwJPhKdbRpbwqVkAAAQAJ//uA6gEoAASACIANABEAB1ADSgXF0EODgU5MX4fBQsAPzM/MxI5LzMzETMwMUEOAycuAjc+AxceAwc2JiYnJgYGBwYWFhcWNjYTDgMnLgM3PgIXHgIHNiYmJyYGBgcGFhYXMjY2A2AFUIGcT2KuaAYFU4KaTEWHbT63BzReNz9zTgcHM145PnNO/QVNeI9HQH5lOQMFertmXqFfvAYuUjE5Y0IGBitRMzhlQwFFWIJVKAIBSI9tVX1SJwIBJ011RTxUKwEBL1tDPlEpAQEtWgJXT3VOJQECJUltSW+USgICSIpuNUwoAQEtUzs2TCgBLFUAAAEAcAAABAYEjQAGAA61BQEGfQMKAD8/MzMwMUEHASMBITcEBhT9SMoCt/1gGwSNc/vmA/SZAAEAS//sA4EElQAxABVACRYfHw4nCwMAfgA/Mj8zOS8zMDFBMwcjJg4CBwcGHgIXFjY2NzYmJicmBgYHJz4CFx4CBw4CJy4DNzc+AwMwGRENZa+JWxAYBgsnSzxJckYIBiNUREF2VRInFXOaUG2SQwgKesV6X45aJAoLFXK2+ASVnQEzaJpmqTBoWjkCAkNzRT9qQgIBNV8/Zk91PwECaaxnebpnAwNKf6FaVJbwqlsAAQBK/+sD2QSNACMAF0AKIQkJAhkRCwUCfQA/Mz8zEjkvMzAxQScTIQchAzY2FzIWFgcOAicuAiczFhYXFjY2NzYmJicmBgExlqcClx3+B18waTdvm0sICXzIe2SjYwWsB25XS3NGBwcuX0M9ZAIfJwJHov7eGBkBZKxsfLVhAwJPk2dZVwEBQXJJQmQ5AQEkAAAC//cAAAOoBI0ABwALABVACQABAQoEC30KEgA/PzMSOS8zMDFBByE3ATMDAQEDIxMDqBv8ahMCsZrU/lYCqMq1ywGemHwDC/7X/joC7/tzBI0AAgAX/+4DogSgAB0APQAdQA0fAAAdHh4SNCoLCRJ+AD8zPzMSOS8zMxEzMDFBFzI2Njc2JiYnJgYGBwc+AhceAwcOAyMnBzcXHgMHDgMnLgM3FwYWFhcWNjY3Ni4CJwFhbj56VQkHLVU3OGdJDLYLgr9lSoRkNgUFUX6RRaUHE4tHh2s7BgVRgZ1STIhoOgOzAzZcOT90TwgHHz5SLQKcASVURjtMJQEBJEs6AW2PRgICKFB4UVFxRiEBLGkBAh1Cb1JZhVcqAgEqU3tSATxPJgECKlhENEcqFAEAAAH//QAAA6gEoAAeABK3CxR+Ax4eAhIAPzMRMz8zMDFlByE3AT4CNzYmJyYGBgcHPgIXHgIHDgMHAQNiG/y2GQHcLmxTCQtiUEp1TAy1DIjNdGCiXAgFPVpmLv6NmJiLAZYnXG9AU18CAjFkSQF5qFUCAkyQaEF4bF0n/ukAAAEAvQAAAugEkAAGAAqzBn0CCgA/PzAxQQMjEwU3JQLoxbaj/q0eAe8EkPtwA6thpaEAAgBG/+0DowSgABUAKwAOtRwRficGCwA/Mz8zMDFBBw4DJy4DNzc+AxceAwM3Ni4CJyYOAgcHBh4CFxY+AgOYFw5FdKlybIxMFQsYDkV0qXFtjEwU3CAHAh9LQkdlQiYJIAYBIEpCSGVCJgKfrWW7k1IDAlqTtF6uZbmRUgMCWZG0/trmM3FjQAIDOWJ3POUzc2VDAgM7ZHkAAAP/3QAABA4EjQADAAkADQAcQAwEDAwNDQh9BwMDBgIALzMzETM/My8zETMwMWUHITcBASM3ATMjByE3A3cb/L4bA8L8Y30YA596Rxv86RuYmJgDdPv0hQQImJgAAwB1AAAEZQSOAAQACQANABtAEAgHAwQGAAoNCAEMCnIFAX0APzMrERc5MDFBATMBIwMTByMBAQMjEwG8AdPW/dVxmfkpav7fAd5ftF8B8AKd/QADAf1TVAMA/ZL94QIfAAAB/7cAAARuBI0ACwAVQAoHCgQBBAkFAwB9AD8yLzMXOTAxQRMBMwEBIwMBIwEBAV/JAWHl/hQBIsrU/pTjAfj+6ASN/k4Bsv20/b8Buv5GAlUCOAAEAJQAAAYpBI0ABQAKAA8AFQAgQA4SBBABDgQMAQgEBgF9BAAvPzMRMxEzETMRMxEzMDFBATMDASMTEwMjAwEBMwEjAxMTIwMnAYUBhoNb/mGBLysKeFcDiwFRuf4VgRFTDHZeAgEgA23/APxzBI38j/7kBI38pgNa+3MEjfx+/vUDoO0AAAIAeQAABJoEjQAEAAkAD7UHAwUBfQMALz8zETMwMUEBMwEjAxMTIwMCCAHJyf16kk6fG4PyASwDYftzBI38jf7mBI0AAQBC/+sETwSNABUAD7UMEQYAfQYALz8RMzIwMUEzAw4CJy4CNxMzAwYWFhcWNjY3A5m2gxKP2H94uWEOg7OECS9oTVKEVQ0Ejfz0gbZfAwJhs30DDPzzTW48AgI4cVIAAgBuAAAEQgSNAAMABwARtgYHBwEAfQEALz8ROS8zMDFBAyMTIQchNwK+yrTLAjcc/EgcBI37cwSNmZkAAQAS/+4D6wSeADkAGEAKCiYPNjErGBQPfgA/zDMvzDMSOTkwMUE2LgInLgM3PgMXHgIHJzYmJiciBgYHBh4CFx4DBw4DJy4DNxcGHgIXMjY2AtcIJURSJkGDaz0FBVaGnkxrtGoEtQU3ZUI6dlYJBy9OVyJCfWM3BQZYiaBNU5l4QwO1BCRFXDQ6eloBMTJCLBwLEzdRc09XflAkAQJTnXIBRVosASFNQTBAKhsLEzpTdU5ZfU0jAgEvW4hbATlRMxkBHksAAgAdAAAD/QSNABkAHgAYQAobDQ0MDBoYFwB9AD8yLzM5LzMSOTAxUwUeAwcOAgcHITcFMjY2NzYmJicnAyMhAzcTFegBkVGPbDgGB1uOVTn+dRkBF0N+WAoIMmI/87C2AsTIs9cEjQECKlOBWWSBVB8amAEsXUpEWCoCAfwMAgcB/gQMAAADAEb/NgRCBKAAAwAZAC8AHEAMAAMDKysKCgIgFX4CAC8/MxI5LzMSOREzMDFlBQclAQcOAycuAzc3PgMXHgMHNzYuAicmDgIHBwYeAhcWPgICpgEZg/7vAgsHD1uUyH13pmUkCwgOW5TJfHioYyTICAcLMmdUWYdgOgoJCAsyZ1VaiV84lPhm+AI5QXTPnlgDAl+ex2tEc9CfWQMCYJ/Jp0RGjHVJAwNEdpVORUWOeUwDA0V5mAAAAQAeAAAEJgSNABgAE7cCAQENDA99DQAvPzMSOS8zMDFBJTcFMjY2NzYmJiclAyMTBR4CBw4DAjz+sRsBOEaBWQoIM2I+/uSwtcsBuWyyZggHVYemAbUBmQErXk1DWy8CAfwMBI0BA1GddWKMWSoAAAIATP/tBEYEoAAVACsAELYnBhwRfgYLAD8/MxEzMDFBBw4DJy4DNzc+AxceAwc3Ni4CJyYOAgcHBh4CFxY+AgQ6Bw9Zk8l9d6dkJAsIDluUyHx3p2QkxggHCzJnVFmHYDoKCQgLM2dUW4hfOAJuQ3TRoFkDAl+ex2tEc8+gWQMCXp3HrURGjHVJAwNEdpVORUWOeUwDA0V5mAABAB4AAASbBI0ACQARtgMIBQEHAH0APzIvMzk5MDFBAyMBAyMTMwETBJvLrv5LmrXLrQG2mgSN+3MDdPyMBI38jAN0AAMAHgAABbEEjQAGAAsAEAAWQAkCDgoFDAcEAH0APzIyMi8zMzkwMUEzEwEzASMBMwMDIwEzAyMTASyh3QIYs/1Tg/6kmWxEtAT4m8q1RwSN/HMDjftzBI38+/54BI37cwGYAAACAB4AAAMjBI0AAwAHAA+1BgMCBH0CAC8/ETMzMDFlByE3EwMjEwMjG/2eG9zKtcuYmJgD9ftzBI0AAwAeAAAEgASNAAMACQANABdADAYHCwUMCAYKAQQAfQA/Mi8zFzkwMUEDIxMhAQEnNwEDATcBAZ3KtcsDl/2o/rUC8wHEl/6shwGZBI37cwSN/c/+6MvmAZj7cwI1fP1PAAAB//b/7QOXBI0AEwANtBAMBwF9AD8vzDMwMUETMwMOAicuAjcXBhYWFxY2NgJVjLaMD3W2b2unWgW1BClXQD9iPgFSAzv8xm+hVgIDUJlxAUBXLQECNV0AAQArAAABqgSNAAMACbIAfQEALz8wMUEDIxMBqsq1ygSN+3MEjQADAB4AAASbBI0AAwAHAAsAGEAKAgMDBAkFCAR9BQAvPzMRMxI5LzMwMUEHITcTAyMTIQMjEwOtG/1yG37KtcsDssu0ygKLmZkCAvtzBI37cwSNAAABAEz/7wQ8BKAAKgAWQAkpKioFGRB+JAUALzM/MxI5LzMwMUEDDgInLgM3Nz4DFx4CFycuAicmDgIHBwYeAhcWNjc3ITcEFUU1m6xQd6xrKg0KEFmRyH51sWkKsAc7Zkdah145CwwIDjlsVEmKOy3+7xkCUP5GQ0gcAgFbm8duVHXMmVUDA1WjdwFGYDEDAkByk1BXR451SAIBHyzukAAAAwAeAAAD4gSNAAMABwALABpACwcGBgEKCwsBAH0BAC8/ETkvMxE5LzMwMUEDIxMBByE3AQchNwGdyrXLAlQb/dwbAskb/Y8bBI37cwSN/f+YmAIBmZkAAAMAEv8TA+sFcwADAAcAQQApQBMHPj4kCBczBgYzCwIgIBcAABd+AD8zLxEzETM/My8REjk5MxEzMDFBAyMTAwMjEyU2LgInLgM3PgMXHgIHJzYmJicmBgYHBh4CFx4DBw4DJy4DNxcGHgIXMjY2Auk1kjZVNZI2AWUIJURSJkGDaz0FBVaGnU1rtGoEtQU3ZUI6dlUKBy9OVyJCfWM3BQZYiaBNU5l4QwO1BCRFXDU5elsFc/7PATH60f7PATHtMkIsHAsTN1B0T1d+TyUBAlOdcgFFWiwBASJNQS9BKhsLEzpTdU5ZfU0jAQIvW4hbATlRMxkBHksAAwAGAAAD1QSgAAMABwAmAB1ADQQFBQEiGX4OAgINAQoAPzMzETM/MxI5LzMwMWEhNyEDByE3JQMOAgcnPgM3Ez4DFx4CByc2JiYnJg4CA2n8nRsDY3oV/SkVAV0kCR49NqYoMx4QBSIKPmuWYnSWRAa2BRhHRDtUNx+YAdZ5eXv+6kSNgDBHD0leXyQBFlmgekUDAmatbwE6akQCAjJUZgAABQAZAAAD3wSOAAMABwAMABEAFQAbQAsGBwMCAhEUCgkRfQA/Mz8SOXwvMxjOMjAxQQchNwUHITclATMBIwMTByMDAQMjEwMZFv04FQKnFv04FQFXAZLI/hdyXLUhat4BnF+0XwIaenrEeHiaAp39AAMB/VRVAwD9kv3hAh8AAgAeAAADzQSNAAMABwAOtQcGA30CCgA/PzMzMDFBAyMTIQchNwGdyrXLAuQb/aQbBI37cwSNmZkAAAP/sAAAA88EjQADAAgADQAbQAwIDH0ABQUJAgMDCQoAPzMRMxEzETM/MzAxYTchBwETMwMjAQETIwEDNxv9BxsCLZ3H8o/+GwHRfYH9epiYA1/8oQSN+3MDdAEZ+3MAAAMATP/tBEYEoAADABkALwAXQAoDAgIKIBV+KwoLAD8zPzMSOS8zMDFBByE3BQcOAycuAzc3PgMXHgMHNzYuAicmDgIHBwYeAhcWPgIDRxv+LRsCxgcPWZPJfXenZCQLCA5blMh8d6dkJMYIBwsyZ1RZh2A6CgkICzNnVFuJXzgCkpiYJUJ00aBZAwJfnsdrRHPQn1kCA16dx61FRYx1SQMDRHaVTkVFjnlMAwNFeZgAAv+wAAADzwSNAAQACQAOtQEJCgQIfQA/Mz8zMDFBEzMDIwEBEyMBAmudx/KP/hsB0X2B/XoDX/yhBI37cwN0ARn7cwAD/9MAAAOVBI0AAwAHAAsAF0AKBwYGAgoLfQMCCgA/Mz8zEjkvMzAxZQchNwEHITcBByE3AuUb/QkbAxMc/YobAwsb/QkbmJiYAhSZmQHhmJgAAwAeAAAEhgSNAAMABwALABO3CgULBwIAA30APzMzMzMvMzAxQQchNzMDIxMhAyMTA/Ub/YEbJ8q1ywOdyrbLBI2YmPtzBI37cwSNAAP/1gABA98EjQADAAcAEAAlQBINCAkDCgYQEA4HfQoCDAMDAgoAPzMRMxEzPzMzETMSFzkwMWUHITcBByE3AQcBIzcBAzczA2Ab/NgbA6cb/OcbAZcC/exxGgGT+xhimZiYA/SYmP3JGv3FlwG5AbaGAAMAUgAABOUEjQAVACcAKwAVQAkWAAArfR4MKgoAP80yPzMvMzAxQRceAwcOAyMnLgM3PgMXJgYGBwYWFhcXFjY2NzYmJicTAyMTArVWZrGCQQkKa6jQb1ZnsYBACQpqqM9rbLR1Dgs/iWJZbbR1DQxAimJUy7bLBBgBAj50qG53tHk9AgI+dqltd7R4PJsBQo9zZoZEAwEBRJBzZ4RCAwEQ+3MEjQACAH0AAAT1BI0AGQAdAB9ADhUUFAYHBw0cDgAdHQ19AD8zETM/EjkRMzMRMzAxQTMDBgIEJyMuAzcTMwMGHgIXFxY2NjcDAyMTBEC1NRmf/vuyFXyxaycPNLQzCgw3b1gUgrZsE9fLtMoEjf7Jqv7/kAIEWprLdQE4/sdNkXVIBAEDbb55ATj7cwSNAAMADgAABGoEoAAsADAANAAnQBMtNAouMwooEhIpEREyMjEKBh1+AD8zPzMRMxEzMxEzPzM/MzAxQTc2LgInJg4CBwcGBhYWFwcuAzc3PgMXHgMHBw4DBzc+AgE3IQchNyEHA6UFBxA4aFBVhmI8CgUHASBRSgxskE8ZCwQNX5fGdnGoaywKBA5Rhbh2DXGJRv6nGwG2G/waGwG1GwJvJkeBZj4CAjloik4mQYyCYhd6E26gvmIlcsORUAMCVJG9aiVyx5xkEHodjMD9/JiYmJgAAAMAbf/rBOYEjQADAAcAIwAcQA0XFgsgDQ0DBAoFAgN9AD8zMz8SOS8zPzMwMUEHITcTEzMDEzc+AhceAgcOAwc3PgM3NiYmJyYGBgP3G/yRG47KtssiCjt7fUB7rFUKCFWJrmEQPGlQMwgII1tMQX58BI2YmPtzBI37cwIcmhcgEAICXrB8a5RbKQGYARo4WkBKazwBAhMhAAACAEj/7QQzBKAAAwArABdACgABAQkdFH4oCQsAPzM/MxI5LzMwMUEHITcBNw4CJy4DNzc+AxceAhcjLgInJg4CBwcGHgIXFjY2As8b/gQbAl60GZHXgHSiYiQMDg9bksV5e7NjBrQDMmVQV4ZeOQsOCQkvYlNWgVYClJmZ/uQBgLJaAwJcm8JoZnHJmFUDA2GyeU1tOwMCP3CRTmhDiXRJAwM2bgAAA//D//8GpQSNABEAKQAtACBADygpKRwsHQEtfR8cCgsICgA/Mz8zPzMzMxI5LzMwMUEzAw4EJyM3Mz4ENyUeAgcOAychEzMDBTY2NzYmJiclNwMHITcBgLhyDyY8YJBoOhYmQlo5IhUIBBtqrGEIB1KCo1j+M8q2sAEBaqYOCC9cPP62GyAb/dMbBI3951GwpINNAaQBQWh7eTFkA1Cbcl+NXi4BBI38CwEBc29AVS0CAZkBtZiYAAMAHv//BrMEjQAXABsAHwAhQA8XFhYbGhoeCx99DQoKHgoAPzMRMz8zEjkvMzMvMzAxQR4CBw4DJyETMwMFNjY3NiYmJyU3BwchNxMDIxMFO2qtYQgGUoOjWP4yy7WwAQJqpQ4ILlw8/rYbbxv9hRt+yrXLAtcDUJtyXo5eLgEEjfwLAQFzb0BVLQIBmU2ZmQIC+3MEjQAAAwBuAAAE5gSNAAMABwAbABlACxgNDQMTBAoFAgN9AD8zMz8zEjkvMzAxQQchNxMTMwMTNz4CFx4CBwMjEzYmJicmBgYD+Bv8kRyOyrXLIwo7e31AfK1RDTq1OwkfWVBAfnwEjZmZ+3MEjftzAhyaFyAPAQJitH7+mwFmS3A/AgITIQAABAAe/poEhQSNAAMABwALAA8AG0AMDwt9AwcHDgoCAgoKAD8zLxEzMxEzPzMwMWUDIxMlByE3EwMjEyEDIxMCYFa1VQGbG/2CG9bKtcsDnMq1y4T+FgHqFJiYA/X7cwSN+3MEjQAAAgAg//wD2wSNABcAGwAbQAwCAQENCw4KGxoaDX0APzMRMz8zEjkvMzAxQSUHBR4CBwYGByUTIwMFFj4CNzYmJhM3IQcCaf64GwExPGM5AgScaP7nsLLKAbRZpohZDA5Vpu4a/ZgbAtcBmQECK1ZCbnMBAQP1+3MCAjBgj1xxm1EBI5aWAAAD/4n+rASbBI0AEAAWAB4AI0AQGh0dCRcKChwUCQoWEREAfQA/MhEzPzMzMxEzETMvMzAxQTMDDgQHIzcXPgM3EyEDIxMhASEDIxMhAyMBqbVdES1CXH5UZhwmQF9ELhCEAsfLtLD97f4nBJZWtjz81Tu3BI3+S1esopB4K5cBPoKOnFkBtPtzA/X8o/4UAVT+rQAABf+vAAAGBQSNAAMACQANABMAFwA1QBkUFxcRDAsLBwcREQYODg8KAgIVCgkDAw99AD8zETM/MxEzEjkvMzMRMxEzETMRMxEzMDFBAyMTIQEhJzMBAwM3CQIzEzMHJwEjAQOryrXKAw/99v7mAcMBe6TtkwEx/HX+48/K0zan/mnyAhsEjftzBI39apkB/ftzAhx+/WYB9wKW/gOZE/32ApgAAgAS/+4D2ASfAB4APgAdQA0fAgIBPj4VNCoLCxV+AD8zPzMSOS8zMxEzMDFBJzcXMjY2NzYmJicmBgYHBz4DFx4DBw4DJxceAwcOAycuAzczHgIXFjY2NzYuAicnAgSaFYA/fFgJCENrNjxsTw21CVN/mE5JkHVDBQRaip7WgkWPeEYFBV2QqlROjmw8A7IBOWE9QIhjCgcfP1UulgIrAXQBIFBJQUsfAQEhSz4BVXtQJQEBIkh2VlZ5SiNGAQEeQ3BUYIVSJQIBKlJ+VkJPJAECIlRKNkkrFAEBAAMAIAAABKIEjQADAAcACwAbQAwAAwoHCwoBAgUFCH0APzMRMzM/MzMzMzAxdwEXAQEzAyMBMwMjYgOUZ/xuAySzyrP9xbLKslQEOVT7xwSN+3MEjftzAAADAB8AAARYBI0AAwAJAA0AH0AODAsLBwcGBgIJA30KAgoAPzM/MxI5LzMRMxEzMDFBAyMTIQEjJzMBAwE3AQGeyrXLA279h+8BsAHQrP6+egGjBI37cwSN/WqZAf37cwIcff1nAAAD/8T//wR6BI0AAwAHABkAGEALExAKBwIDAwh9BgoAPz8zETMzPzMwMUEHITchAyMTITMDDgQnIzc3PgQ3A9sb/dMbAszLtcr9vLZyDyc9X45nORYmQVk5IhQJBI2YmPtzBI395lCupYRNAaQCBEFleHgyAAIAWv/pBFQEjQASABcAF0AKARd9FRYWDg4HCwA/MxEzETM/MzAxQQEzAQ4CIyImJzcWFjcyNjY3AxMTBwMB9gGG2P3bK2CCXxs0GhEWLRYxSDYXO484m/MBwQLM/GRNeEMDBJYDBAEsRiYDdf2b/t8tA7MABAAe/qwEhgSNAAUACQANABEAHUANEQ19BQkJEAsIAgIICgA/My8RMzMzETM/MzAxZQMjEyM3MwchNxMDIxMhAyMTBIBnozuMGwUb/YIb1sq1ywOdyrbLmP4UAVSYmJgD9ftzBI37cwSNAAIAVgAABCUEjQADABcAE7cUCQkCAw59AgAvPzMSOS8zMDFBAyMTAwcOAicuAjcTMwMGFhYXFjY2BCXKtssiCjx7fUB9rFENOrY7CB5aUEB+ewSN+3MEjf3mmhcgEAICYrR+AWP+nEtvPwMBEiEABAAeAAAF/gSNAAMABwALAA8AGUALCwcHDxAKBgYDDn0APzMzETM/MxEzMDFlByE3AQMjEyEDIxMhAyMTBL0b++UbAyvKtcoC5su1yvxVyrXLmJiYA/X7cwSN+3MEjftzBI0AAAUAHv6sBf8EjQAFAAkADQARABUAJ0ASEQ0NFX0EEAICEBAMDBMTCQgKAD8zMxEzETMRMy8RMz8zETMwMWUDIxMjNzMHITcBAyMTIQMjEyEDIxMF92eiPIwbBBv75RsDK8q1ygLny7bK/FXKtcuY/hQBVJiYmAP1+3MEjftzBI37cwSNAAIAUf/8BJYEjQADABoAF0AKBgUFDxIKEQEAfQA/MjI/MzkvMzAxUwchNwElBwUeAgcGBgclEyMDBRY2Njc2JiZsGwGmGwEf/rgbATA9YzoCBJ5n/uewsssBtXbVkRAOVaYEjZiY/koBmQECK1ZCb3IBAQP1+3MCAlaqe3GbUQD//wAg//wFoQSNBCYCGAAAAAcB8wP3AAAAAQAg//wDzwSNABYAFUAJFRYWCgwJCgp9AD8/MxI5LzMwMUEeAgcOAiclEzMDBTY2NzYmJiclNwJpaqZWDxCR1Xb+TMqysAEZaJwEAjljPP7PGwLXA1GbcXuqVgMBBI38CwEBcm9CVSwCAZkAAgAg/+0EDASgAAMAKwAXQAoCAQEcCCcLExx+AD8zPzMSOS8zMDFBITchAR4CFxY+Ajc3Ni4CJyYGBgcHPgIXHgMHBw4DJy4CJwOB/gYbAfr9OAU2alFXgVs2Cw4JCzJmU1V+VBa2GY7TgHWmZSYMDg9ZjsF5e7dpBwH7mf7mT2s4AgJBcpBMaEWJc0cDAzpwTwF/tF4DAluawmtmb8iZVgMDXq57AAQAHv/tBfMEoAADAAcAHQAzAB1ADiQZfi8OCwMCAgYHfQYKAD8/EjkvMz8zPzMwMUEHITcTAyMTAQcOAycuAzc3PgMXHgMHNzYuAicmDgIHBwYeAhcWPgICfhv+eRylyrXLBP8IDlmTyX13qGQlDAgPW5TIfHenYyTHCQcKMmdVWIlgOgsICAwzZ1RaiF84ApeZmQH2+3MEjf3gQnXQoFkDAmCfyGxCcs+fWQIDXp3HtEZFjndLAwNEd5ZOREWOeEwDA0N3lgAAAv/gAAAEQQSOAAMAIwAZQAsjAAQEGRsWfRkBCgA/Mz8zEjkvMzMwMUEBIwEFJS4CJy4CJy4CNz4DMwUDIxMnBgYHBhYWFwUCPf5uywGcAdH+lAoVFggGCQoFRGY1BQZQgp9VAcnKtrD9ZqAOCC9bOgFIAkb9ugJGZgEBBggEAgcHAiBKbVNehVQnAftzA/UBAV1tQUwjAgEAAAP/+gAABC0EjQADAAcACwAbQAwLCgoDAgYHBwN9AgoAPz8zETMREjkvMzAxQQMjEyEHITcTByE3AfzKtcsC5Rv9oxuwG/2VGwSN+3MEjZmZ/giYmAAABv+v/qwGBQSNAAMABwANABEAFwAbADtAHAIOAQEODgYbGBgVEhIQDwwJCRMGBhkKDQcHE30APzMRMz8zERI5LzMzMzMRMzMRMxEzETMvETMwMUEjEzMBAyMTIQEhJzMBAwM3CQIzEzMHJwEjAQVSpVak/gTKtcoDD/32/uYBwwF7pO2TATH8df7jz8rTNqf+afICG/6sAesD9vtzBI39apkB/ftzAhx+/WYB9wKW/gOZE/32ApgAAAQAH/6sBFgEjQADAAcADQARACdAEhAPDwsKCgYNB30CDgEBDg4GCgA/MxEzLxEzPzMSOS8zMxEzMDFBIxMzAQMjEyEBIyczAQMBNwEDi6RWo/2+yrXLA279h+8BsAHQrP6+egGj/qwB6wP2+3MEjf1qmQH9+3MCHH39ZwAEAB8AAAUOBI0AAwAHAA0AEQApQBMQDw8KAAsLCgMDCgoGDQd9DgYKAD8zPzMSOS8zLxEzETMRMxEzMDFBMwMjEwMjEyEBISchAQMBNwEBuZJmkkvKtcsEJP2H/lsBAWUB0qz+vXoBowN1/bQDZPtzBI39apkB/ftzAhx9/WcAAAQAagAABToEjQADAAcADQARACFADxAPDwsKCg4GCg0HBwMAfQA/MjIRMz8zOS8zMxEzMDFTIQchJQMjEyEBIyczAQMBNwGFAakb/lcCFsq1ywNu/YfvAbAB0Kz+v3kBowSNmJj7cwSN/WqZAf37cwIcff1nAAABAFD/6AUsBKEARAAbQAwAAQEvGAskIyM6DX4APzMzETM/MzMvMzAxZQcuBDc3PgMXHgMHBw4DJy4DNzc+AzcHIg4CBwcGHgIXFj4CNzc2NiYmJyYOAgcHBh4CBN8OfNqvdzUNBQo/bJ5qZ4FDEgkHE3zD+pGJw3YtDgMOT4S7ehFUd08tCQQKEkSCZnC6jVkPBwUFFUBARFw4HgcFDj2JyYugAzhqndOFJ120kFMCA1mPrFY7jvCwYAMCYafefyByyZlZAp5GdI1IIVmjgEwCA0iGtWs+LXFpRgMCP2h4NiuGvnk6//8AdQAABGUEjgQmAeMAAAAHAjYAEP7dAAL/t/6sBG4EjQADAA8AIkARCw4IBQQKBg99AgoBAQoKDQoAPzMRMy8RMz8zEhc5MDFBIxMzARMBMwEBIwMBIwEBA62kVqP9XckBYeX+FAEiytT+lOMB+P7o/qwB6wP2/k4Bsv20/b8Buv5GAlUCOAAFAG3+rAV/BI0ABQAJAA0AEQAVACJAEBENDRQVfRASDAkECAICCBIAPzMvETMzMz8/MzMRMzAxZQMjEyM3MwchNxMDIxMhAyMTIwchNwV5Z6M8jBoGG/2AG9jLtcoDnsu0ytMb/JEbmP4UAVSYmJgD9ftzBI37cwSNmJgAAwBVAAAEJQSNAAMABwAbAB9ADgAYGA0DAw0NBgcSfQYKAD8/MxI5LzMvETMRMzAxQTMDIwEDIxMDBw4CJy4CNxMzAwYWFhcWNjYB2pFmkQKxyrbLIgo8e34/fa1RDjq2OgkfWVBAfnsDHP20A737cwSN/eaaFyAQAgJitH4BY/6cS28/AwESIQAAAgAeAAAD7QSNAAMAFwAUQAkPEhQJCQF9ABIAPz85LzM/MDFzEzMDEzc+AhceAgcDIxM2JiYnJgYGHsu0yiMKO3t9P32tUQ06tTsJH1lQQX57BI37cwIcmhcgDwECYrR+/psBZktvQAICEyEAAQAu//AFVwSfADQAG0AMGBgdHRERIgt+LQALAD8yPzM5LzMRMy8wMUUuAzc3PgMXHgMHByUuAzcXBhYWFwU3NiYmJyYOAgcHBh4CFxY2NxcOAgMadLh7Nw0SD2GYx3V2rWwpDhT8T1aDVicFlQUlWEcDDgUPMX5jUoZjPwwTChlHeFROkUYtMnN5DwFPjsFzg2/ElFICAlKPv3GGAQM2Y4lVAUVjNwMCHV+UVwICPWyKTIRPhWI3AQIoH5MhJRAAAQBA/+0EXAScACsAFUAJERQUGQsLJAB+AD8yPzM5LzMwMUEeAwcHDgMnLgM3NyEHJQcGFhYXFj4CNzc2LgInJgYHJz4CAo5zs3YyDRIQYZfGdnatbCoPFAN1G/1HBQ8yfWNThWM+DBMKGUd4VE+QRyo0eH4EnAJRkMBwgm/ElFMDAlGPwHGGmAEcX5RWAwI9bIpMg0+GYjgBASgglCElDwAAAgAS/+gD7wSNAAcAJgAbQAwIBQUEJiYdEwsHAH0APzI/MzkvMzMRMzAxUyEHASM3ASETFx4DBw4DJy4DNzMeAhcWNjY3NiYmJyfOAyEV/hFuFgFM/dTcdUyQcT4FB1qOrVhPjW07A7IBOGE9SIhfCQg6aT2KBI1+/kF8ASn+wAICLFSAVmKOWikCAitVf1ZBUicBAilgUEZTJQIBAAADAEb/7QQ/BKEAFQAkADQAG0AOCyVqLR1qLS0LABZqAAsALy8rEjkvKyswMUEeAwcHDgMnLgM3Nz4DFyYGBgcGBgchNjQ1NiYmARY2Njc2NjchFAYVBh4CApp3p2MkCwcPWZPIfnenZCQLCA5blMhzaZhgFgEDAgJxAQQnbf7/a5hfFQIDAf2OAQIUN2IEngNencdsQnTRoFkDAl+ex2tEc8+gWp4EYJ9cBwwHBgwGVZtm/IkDX59dBwwHBQoFP3tkPgAABAAAAAAD1QSgAAMABwALACoAIUAPBgcDAgIJJh1+EgoKEQkSAD8zMxEzPzMSOS8zzjIwMUEHITcFByE3ASE3IQEDDgIHJz4DNxM+AxceAgcnNiYmJyYOAgMUFf0pFgKuFf0pFgNT/J0bA2P+DCQJHj02pigzHhAFIgo+a5ZidJZEBrYFGEdEO1Q3HwKpenrneXn+PpgCUf7qRI2AMEcPSV5fJAEWWaB6RQMCZq1vATpqRAICMlRmAAMAH//xA+AEnwAjACcAKwAdQA0nJiYqKysHGRJ+AAcLAD8zPzMSOS8zMy8zMDFlFjY3FwYGJy4DNzc+AxcyFhcHJiYjJg4CBwcGHgIBByE3BQchNwJONGQyDTduOG+fYCMMGhBUiLp3OnM5JDFkM1J7VjQLGwgJLV0BMhb9KBYCsBb9KRWJARANlw4PAQJOh7RpvHC7iUkBFA2TEA4BNmGCTL9BemM8Amp5eeZ5eQAABAAeAAAHogSgAAMAFQAnADEAKUASKzAuLSQJCTEufSotChsSEgIDAC8zM3wvMxg/Mz8zMy8zERI5OTAxQQchNxM3PgIXHgIHBw4CJy4CNwcGFhYXFjY2Nzc2JiYnJgYGAQMjAQMjEzMBEwcJGv3jGQ4IC2WhZWGHQwgIC2OgZWGIRLAJBBlBOTtWMwcJBRlBODtXM/7xy67+S5q1y60BtpoBS46OAbBSY5pWAgNZll5TYppVAgNYlrFVM1g3AQI1WzdUMlg4AQI1WgEI+3MDdPyMBI38jAN0AAAC/94AAARvBI0AGAAcABtACxscAgEBDgwPfQ4KAD8/MxI5fC8zGM4yMDFBJTcFMjY2NzYmJiclAyMTBR4CBw4DBwchNwKP/XgbAnFGfFMJCCtaP/7psLXLAbRrrGAJBlKEo4Mb/ZUaAaQBmAE1ZUlBXTUCAfwLBI0BA1agcl6PYDBYl5cAAAL/+//zAngDIwAZADMAGUAKGwAAGRoaCBAsJAAvM8wyOS8zMxEzMDFTMz4CNzYmIyYGByM+AhceAgcOAgcjBzcXHgIHDgInLgI3MxQWFzI2NzYmJifpSCZINAYHQi8xTRCcCVaBR0R7TQICXYU+eQYOX0B5TAIDYJBLSXpJAZZINTdiCAYiPiMBygIXMiozLwEuMEtkMAEBLmBMSlknASROAQIhU0xUajICATVnTjcyATk8Ki4TAQAC//EAAAJ0AxUABwALABdACQMHBwEBBgUICgAvzDIyOS8zETMwMUEHITcBMwcHAQMjEwJ0F/2UDAHAhrHxAb+JmooBLIJwAfvr/gHp/OsDFQAAAQAX//MCkAMVACEAErYfCQkEAxkRAC8zzDI5LzMwMVMnEyEHIQc2NjMyFhYHDgInLgInFxYWNzI2NzYmJyIGyIF1AdQY/rA8H0IiS2s3AwRVilRGd0sDlAU+NUNTCAZAPCU/AWUiAY6DrA0QP3FJVn1EAgE1ZkkBNS8BVUE7SAEXAAEAHf/zAmADIQAtABO2ExwcAwAMJAAvM8wyOX0vMzAxQRcHJyYGBgcHBhYWNzI2Njc2JiMiBgYHJz4CMzIWFgcOAicuAjc3PgMCHBsNCFqSXw4OBBEzMClDKgQHOzomRDQOJgxKaTpKZjIDBFWJU1t4OAYFDFCCrQMhAYMBAjl4XHUoTTMBKUMoOUocMyMvOlgwRnRHVH9GAQJVjlY3aaRyOwAAAQAvAAACtAMVAAYADLMFAQYCAC/MMjIwMUEHASMBITcCtBL+Oq0Bx/5NFwMVZP1PApSBAAQACP/zAngDIgAPAB8ALwA9ABdACgwkOwMUFDQsHAQALzPMMjkvFzMwMWUOAicuAjc+AhceAgc2JiYjJgYGBwYWFjMyNjYTDgIjLgI3PgIXHgIHNiYmIyIGBwYWFjMyNgJIAluLSUN9TwICXoxGQHxRlgQfOCAkQy4FBB83ICRDL8gCV4FCPHVMAQFUgkZBdEieBBkuHTFPBgQZLx0wTuBTaTEBAS5hTFBmMAEBLV4/JC4XARs1JiQvFho1AYdKXy0BKlhETmYyAQEvXlMeLBY5Mx8rFjoAAAEAN//3AnADIgAuABO2EhsbCiMBLQAvM8wyOXwvMzAxdxcWNjY3NzYmJiMiBgYHBhYWFzI2NjcXDgIjLgI3PgIXHgIHBw4DIydzC1WJWQ0TBBAwLitCKQQDFjMnJUExDCwMRWU5TGc0BANVilRdcjAGBQtNfqtpFXcBATBtWJMmSjEuSSglPiQBHDIjLjhVMAFEdUhUhEsCAVqSVTNqom85AQAAAQCTAosDGQMjAAMACLEDAgAvMzAxQQchNwMZG/2VGwMjmJgAAwELBD4DHAZxAAMADwAbABlACRMNDQcBAwMZBwAvMzN8LxjNETMRMzAxQTczBwU0Njc2FgcUBiMGJjcWFjMyNjc2JiMiBgGmrsj2/uZjSENbAWFHQ15SAh0kJDkFBSMiKTAFvLW130dmAQFfQ0ZlAVtFHzA2Ix80OgAEAB4AAAPwBI0AAwAHAAsADwAbQAwLCgoGDw4HfQMCBgoAPzMzPzMzEjkvMzAxZQchNxMDIxMBByE3AQchNwNGG/17G9zKtcsCZBv9zxsC1Bv9gBuYmJgD9ftzBI3+GZeXAeeZmQAE/5n+SQREBFEAEgAkAFsAXwAzQBpdXwZyJSYYGA9AQUEuU1MPDwVKNw9yIQUHcgArMisyETkvOREzMxEzETMSOTkrMjAxUzc+AhceAgcHDgMnLgI3BwYWFhcWNjY3NzYmJicmBgYDFwYGBwYWFhcXHgIHDgMnLgM3PgI3Fw4CBwYeAjMyPgI3NiYmJycuAjc+AgEHITdxAgqIy3BorWMHAQhUgp1RZa1mvAMENV45PnVSCgIFM147QHVRIF4nPwcEGy8ZplyraAcFdrC9TDyRg1IEBF+QTzEuTjQHBitLVSQueHVUCgk3Wy7JNWpGAgI0UwNjGP6PDwLKFnamVQMCVZ1vF1aIXTACAlabghY8WTIBATRgQBU9WzMBATRh/q02F0MwHiAMAQECNHttX4ZSJQEBGTxnT1l/UBJSCzdQMTA8IQ4SLUw6OjkTAgEBIEk/PFtGAoaSkgAABABI/+cEiARSABUAKwAvADMAF0AMMAotBhwRC3InBgdyACsyKzI/PzAxUzc+AxceAwcHDgMnLgM3BwYeAhcWPgI3NzYuAicmDgIFEzMDAxMzE1EDDER2r3hqi08cBgkRTXuqb2mLTRfDAgcHKVlLSHJVOA4FAw4sU0JXe1AuAhmqscWeDI0QAe0WZdGwaQMDX5q3WkpivZlZAwNdlrRwFjt+bUUCAk17ijskM4N7UgMEUIaaLgIe/eL95AIc/eQAAgBEAAAE4AWwABkALgAfQA8mCBsaGgIBAQ4MDwJyDggAPysyEjkvMzMRMz8wMUEhNwUyNjY3NiYmJyUDIxMFHgIHDgIPAjceAgcHBgYWFwcjJiY2Nzc2JiYC2f5nGQFTW55oDAk2cU/+tuG9/QHyfsZpCwl1sWIcXx12rlYOFAUDEBgDuRkPBQUTCShhAnWdATJ0Y1JsNwIB+u4FsAEDWbKIbpZcFxsTbwJSonyGJEpFHhohUVUng0xxQQADAEQAAAVqBbAAAwAJAA0AIEAQCggJAgwLCwcGBgIDAnICCAA/KxI5LzMzETM/PzAxQQMjEyEBISczAQMBNwEB/fy9/QQp/RD+rgHwAlzC/l1/AfsFsPpQBbD836ACgfpQArKf/K8AAAMAJgAABB8GAAADAAkADQAcQA4LBwYGAgkGcgMAcgoCCgA/MysrEjkvMzMwMUEBIwkCITczAQMBNwEB5f72tQELAu796/7oBscBe3v+6nYBaQYA+gAGAP46/buaAav7xgIMm/1ZAAMARAAABUoFsAADAAkADQAaQA4GCwcIDAUCCQMCcgoCCAA/MysyEhc5MDFBAyMTIQEhNzMBAwE3AQH9/L39BAn85v7vBWsCwcL9xaQCbwWw+lAFsP0fWwKG+lAC71/8sgAAAwAmAAAEBwYYAAMACQANACBAEAwLCwcGBgIJBnIDAXIKAgoAPzMrKxI5LzMzETMwMUEBIwkCIzczAQMBNwEB6v7xtQEPAtL9h5wFTQHJeP6ZegG9Bhj56AYY/iL9upkBrfvGAgmK/W0AAAIAHv//BAwEjQAZAB0AFkAJGxoPAgEOD30BAC8/MxEzETMyMDFhITcXFjY2Nzc2LgInJTcFHgMHBwYGBAMDIxMBfP70HPR+vncRCQkTQHRY/uIbAQZ3s3YyDAcVrv7viMq1y5gBAWKze0NPjG0/AwGZAQNVlMRyQqn4iASO+3MEjQABAEj/7QQzBKAAJwARthkVEH4kAAUAL8wzP8wzMDFBNw4CJy4DNzc+AxceAhcjLgInJg4CBwcGHgIXFjY2AzG0GZHXgHOjYiQMDg9bksV6e7JjBrQDMmVQV4ZeOQsOCQkvYlNWgVYBeAGAsloDAlybwmhmccmYVQMDYbJ5TW07AwI/cZBOaEOJdEkDAzZuAAACAB7//wPjBI0AGQAxAChAExwbKRkCAgEbJgEBJhsDDQwPfQ0ALz8zEhc5Ly8vETMSOTkRMzAxQSE3BT4CNzYmJicnAyMTBR4DBw4CBwMhNwU+Ajc2JiYnJzcFFx4CBw4DAj7+wBcBCjpzUgkINl824bC1ywF+SYtsPAUGaZtQqf6BdwENP3VSCggpVTr0GgEtHktwOwUFUIGeAhOMAQEhTUJARh0BAfwMBI0BAiFIdVVcdD0I/b6YAQEmVEU+USoCAYwBNQhIdk1dg1EmAAP/pgAAA+MEjQAEAAkADQAcQAwNAAYDDAwBBwN9BQEALzM/MxI5LxI5OTMwMUEBIwEzEwM3MwEDByE3ApH918ICnHx20g5zAQCBG/1gGwPh/B8EjftzA/mU+3MBr5iYAAEA/ASPAicGPQAKAAqyBYAAAC8azTAxUzc+AjcXBgYHB/wTCTJJLWcjMgsWBI+AO21gJlY1bT54AAACARIE3QNcBosADwATABK1EhMKAA0FAC8zfNwy1hjNMDFBNw4CJy4CJxcGFhcyNicnMxcCxpYIXohGQ39TAZICRjs9WJN9iUsFrwFOXSgCASpcTAI9NgE4UMfHAAL9KgS//2YGlAAXABsAHUAMABUVBRkbGwkREQwFAC8zMxEzMy8zETMRMzAxQxcOAgcGJiYHBgYHJz4CMzIWFjc2Nic3FwfzTQYpRzQpQUAnKC4NUgYsSjQoQUInKC32p7TZBZcXLlM1AQEpKAICNCIULlU1KSgCAjY/4QHgAAIA0wTiBPsGlQAGAAoAFLcIBwcFAYAEBgAvMxrNOTMvzTAxUwEzEyMnByUTMwPTAUiU7q+KwAHRttDxBOIBBv76nZ2xAQL+/gAAAgAiBM8DkwaDAAYACgAXQAkHQAgIAwaAAgQALzMazTkzLxrNMDFBEyMnByMBJRMjAwKm7a+Kv9EBSP7GXX2WBdb++Z6eAQet/v4BAgAAAgDOBOQEeQbPAAYAGgAfQA0REghAGgkICAMGgAIEAC8zGs05MxEzMxoQzDIwMUETIycHBwEFJzc+Ajc2JiYnNx4DBwYGBwK73JWg3bcBNgHYeRQXPC8FBC8+Ew8jUUgsAgNVOQXr/vm5uAEBB34BhAIIGx8eGQUBXAEOIjsuQD8LAAIAzQTkA5cG1AAGAB4AJUAQCAcHEBgMQBQTExwMDAaABAAvGs0yETMzETMaEM0yMhEzMDFBFyMnBwclJRcOAiMiJiYHBgYHJz4CFzIWFjc2NgKc+5Sl2LkBTwEgTgcsRi0mPTolIjENTwcsRy4lPDwkIzAF2PSdnAH0+xUrSCwmJgIBLB0TKkouASYkAgEqAAMAHgAABAMFxAADAAcACwAbQAwCCgoLCwcDAwd9BgoAPz8zLxEzETMRMzAxQQMjEwEDIxMhByE3BANRtVH+T8q1ywLkG/2kGwXE/jAB0P7J+3MEjZmZAAACARIE3QNcBosADwATABK1ERMACg0FAC8zfNwyGNbNMDFBNw4CJy4CJxcGFhcyNic3FwcCxpYIXohGQ39TAZICRjs9WLuRo8MFrwFOXSgCASpcTAI9NgE4UcYBxQAAAgETBN8DRgcEAA8AJQAoQBEbHBwRJRISEREJDQUACQkFEAA/M3wvMxEzETMYLzMRMxEzLzMwMUE3DgInLgI1FwYWFzI2Jyc3PgI3Ni4CIzceAwcOAgcCuI4HWYNFQ3pOjANCOztWK4YSFkQ5BAIiMzAMDB9aVzkBAjFIIwWvAkxdKQEBK1tLAjs4ATlLAX0BBhkeFhYIAVMBCRw2LisxGAb//wCPAokC6QW8BgcB1wBzApj//wBkApgC5wWtBgcCMABzApj//wCKAosDAwWtBgcCMQBzApj//wCQAosC0wW5BgcCMgBzApj//wCiApgDJwWtBgcCMwBzApj//wB7AosC6wW6BgcCNABzApj//wCqAo8C4wW6BgcCNQBzApgAAQCA/+gFPQXIACkAFUAKGhYRA3ImAAUJcgArzDMrzDMwMUE3DgInLgQ3NzYSNjYXHgIXIy4CJyYOAgcHBh4DFxY2NgQeuh6o+5h1sXxHFg0IE3G19piT1HUFvARCgWVzsoBPDwkJBSVMeVdvoGsBzgKV3HcDAlOOtstnPosBBM53AwN82pBfk1YDBGKlyWNARpmRdkgDA1CWAAEAgf/qBUUFyAAtABtADS0sLAUaFhEDciYFCXIAKzIrzDMSOS8zMDFBAw4CJy4ENzc2EjY2Fx4CFyMuAicmDgIHBwYeAxcWNjY3EyE3BQ5WOrjPXXq6gUwYDgMTcLX4m4/Sewy6CUqEXnW0gU4OBAoHKVGAXD1+dC48/rkcAtP97FFeJgECU4+60mwcjQEJ1HsDA2nHjVyARAIEZ63OZB1Ln5R3SAIBEi8qAUWbAAIARAAABRIFsAAbAB8AErccDxACcgIdAAAvMjIrMjIwMWEhNwUyPgI3NzYuAiclNwUeAwcHBgIGBAMDIxMB5f61HgExes2dYxEGDRpWm3T+oBwBSpXdjDkQBRSG0v7xhfy9/Z0BU5bJdyxmwJpdAwGeAQNzw/uLLZr+/b5oBbD6UAWwAAIAg//oBVoFyAAZADEAELchFANyLQcJcgArMisyMDFBBw4EJy4ENzc+BBceBAc3Ni4DJyYOAgcHBh4DFxY+AgVPBg5PfqnPenSveUcWDAUPUICpznd1sHlGFcsGCQYlS3hXcLWGUw4GCAYmS3hXc7aDUAL1LW7WvY9QAwJXkrnMZC1t1LyPUAMCVZG3zJEuRpePdUcDA2SpyWEuRJmReEoCBGSqzQADAIP/BAVaBcgAAwAdADUAG0ANJRgDcgADAzELCXIBAgAvMysyMhEzKzIwMWUBBwEBBw4EJy4ENzc+BBceBAc3Ni4DJyYOAgcHBh4DFxY+AgM4AT+L/scCmwUOUH6o0Hl0sHlGFgwFDlF/qc93dbB5RhXLBgkGJEt4V3G1hlMOBggGJkt4V3S1g1Cf/tVwASkCxitu1r2PUAMCV5K4zWQrbdW8kFADAlaQucyPLEaYj3VIAwNlqcpiK0WYkndKAgRkqs0AAQC8AAADEQSNAAYAFUAJAwQEBQUGfQIKAD8/My8zETMwMUEDIxMFNyUDEcW0of6DHwIUBI37cwOiiq/GAAABADkAAAP4BKMAIAAXQAoQEAwVfgMgIAISAD8zETM/MzMvMDFlByE3AT4CNzYmJicmBgYHBz4CFx4DBw4DBwEDtBv8oBkCHi1XPggHLlc4UX9SDrINjtd6SYVmNgcELkZVK/5fmJiMAbElUWE9O1EsAQNDd00BfLtnAgIrUnlROmlcUSP+swAAAf+B/qEEEQSNAB8AGkALBgAeHgMWDwUCA30APzMzLzMSOS8zMzAxQQEhNyEHAR4CBw4DJyYmJzcWFhcWNjY3NiYmJycBaAGm/Y4bA1oW/kRrkkUJC2io2X1owV0/SKFUc8OADg4/j2k/AmsBiph9/nAUf7hqfsySTgIBOSyMKy8BAl2rdGyPSgIBAAAC/9P+tgQwBI0ABwALABZACQYEC30KAwcHAgAvMxEzLz8zMzAxZQchNwEzAwkCIwEEMBv7vhUDcZnU/asDV/79tQEEl5h3BBf+yf1BA/b6KQXXAAAB/9X+nQREBIwAJwAWQAkkCQkCGhMFAn0APzMvMxI5LzMwMVMnEyEHIQM2NhcyHgIHDgMnJiYnNxYWFxY+Ajc2LgInJgYG95/tAv8e/ZWDOoJDZpFXIgkMYZ7Nd2e9VkVAplRTi2pCCgcVOV5BPWRPAWQSAxar/nQiHwFQiKxcdsWQTQECOzaLOC4BATxqi1A7cFk2AgIaPwAAAQAr/rYENwSNAAYAD7UBBQUGfQMALz8zETMwMUEHASMBITcENxT8yMADLv02GwSNc/qcBT+YAAACARQE1wN0Bs8ADwAnAClAEREQEBkhIRUdHBwlFRUACQ0FAC8zzTIyfC8zMxEzETMYLzMzETMwMUE3DgInLgI1FwYWFzI2ExcOAiMGJiYHBgYHJz4CMzIWFjc2NgK8kQdahUdDe06QAz88PVV5TQUrSTQpQUEnKC4NUgYsSjQoQkInKC8FrQJOXysCASxfSwI7OwE7AV0VL1Q0ASooAgI0IxUuVTUpKAICNAAAAf++/pkAzACaAAMACLEBAAAvzTAxdwMjE8xZtVqa/f8CAQAABQBM//AGmQSfACkALQAxADUAOQAxQBg4OTkxfRYtLRcwCjU0NCYbAQYGJn4RGwsAPzM/MxEzERI5LzM/MzMRMz8zETMwMUEHLgMnJg4CBwcGHgIXFj4CNxcOAicuAzc3PgMzHgIBByE3EwMjEwEHITcBByE3BDMzLFlZWS1ZiWE7CwkICjFlUyxZWVgtHECDgkB3pWMkCwgPW5TIfUOFhgH/G/17G9zKtcsCZBv9zxsC1Bv9gBsEjJoBBQcGAQFEdZVQRUSNd0wDAgIEBQGXBAcFAgNencZrRHXOnlkBCAn8C5iYA/X7cwSN/hmXlwHnmZkAAAEAPv6mBC4EpAA7ABS3ABUfHzULKTUALy8zEjkvMzIwMUUWPgI3EzYuAicmDgIHBh4CFxY+Ajc3DgInLgM3PgMXHgMHBw4EJyYmJzcWFgFAeLN+TBEoCAcuYlFOdlIvCAYPMllDP3RgQQxlDn3JgWmYXyYJClCGtnF5pl8eDSYQSnKdyXtHiUA0MmbCAmKnzGcBCUOIdEgDAkFuh0Q4d2VBAgIkRmQ/An3AagMDUoqvYWm/lFQCA16fyW3ybdO5jE8CAR8ejBYdAAAB/w/+RwEQAJkAEQAKsg0GAAAvzDIwMXczBw4CIyYmJzcWFjMyNjY3W7UkDViYbB45HRsXMRg2RicHmfFloFwBCQifBgk3WC8A////rP6hBDwEjQQGAlwrAP///+P+nQRSBIwEBgJeDgD///+4/rYEFQSNBAYCXeUA//8ALAAAA+sEowQGAlvzAP//AFb+tgRiBI0EBgJfKwD//wAk/+gEMASkBAYCdcAA//8AZv/pA+sFswQGABr5AP//ABv+pgQLBKQEBgJj3QD//wBA/+kEKwXHBgYAHAAA//8BDQAAA2IEjQQGAlpRAP///wn+RwGwBDoEBgCcAAD///8J/kcBsAQ6BgYAnAAA//8ALwAAAZ8EOgYGAI0AAP///3j+WAGfBDoGJgCNAAABBgCkygoAC7YBBAIAAENWACs0AP//AC8AAAGfBDoGBgCNAAAAAwAe/+YD1QShAAMAFgAxAClAFA8mJg0jIwkbLwtyBAAAAhMJfgIKAD8/MxI5LzMrMhE5LzMzETMwMUEDIxMXBz4CFxYWFwEjNwEmJicmBgYDNxYWMzI2Njc2JiYnJzcXHgMHDgInIiYBVYO0g7arC2W5inO1Tv5hbhQBGCFPLVRpOD1BJFArRGlBBwg9ajtdGGZIh2o6BQh0vnQ6bQLx/Q8C8QICgsVtAwNpT/5TcgEkHh4BAlGC/OWZGRw+aUFHShsBAYoBASRIdFN2sGACHQAAAgBk/+gEcASkABUAKwAOtRwRficGCwA/Mz8zMDFBBw4DJy4DNzc+AxceAwc3Ni4CJyYOAgcHBh4CFxY+AgRkAg9alM+DfatkIwwCD1yWzoJ9q2MixAUHCzNpVlyNYzwKBgcLNGpWXY1jOQJXFHnaqV8DA2So0G8VeNmnXgMCZKXQjy9GkntOAwNIfZxQLkaUflEDA0mAngABAGIAAARLBbAABgATQAkBBQUGBHIDDHIAKysyETMwMUEHASMBITcESxT868ADEv0+GwWwc/rDBRiYAAADAB//6AQWBgAABAAaAC8AGUAOIRYHcisLC3IECnIAAHIAKysrMisyMDFBMwMHIwEHDgMnLgM3Nz4DFx4DBzc2LgInJg4CBwcGFhYXFj4CASq26DqfA+0DDEx+sXNpjVIeBgsRTnyrbW+RUBnCAgcKLl9PPm9bPw8oAjxvSVR+WDUGAPrHxwItFWTIo2EDA1uVtVtcYbuVVwMDZJ++cRU/hnRJAgItUWk680h/TwMDRneQAAABAET/6QPnBFEAJwAZQAwdGRkUB3IEBAAJC3IAKzIyLysyLzIwMWUWNjY3Nw4CJy4DNzc+AxceAgcjNCYmJyYOAgcHBh4CAd1Cc1ISqxCLx2tynl4iCwUNVYu+dnKmWgGpL1xGU31YNAoFBwctX4ICNWE/AW2lWwIDW5i/ZSttxphWAwNnr3BBbEIDA0NyjUgqP4dzSQADAEP/6ASGBgAABAAaAC8AGUANIQQEFgtyKwsHcgEAcgArKzIrMi8yMDFlEzMBIwE3PgMXHgMHBw4DJy4DNwcGHgIXFjY2Nzc2LgInJg4CAuzktv71nP1tAwxOgbRzaYxQHgYLEU58q25qkVQdwwMHCzFfTVKMZBYoAh8/WjlUgVo23QUj+gACCRVlyqRhAwNdlrRbXGG7lVUDBGSgu3IVP4V0SQMCToJM8zdlUDACA0V2kQADACP+UQQ3BFEAEwApAD4AG0APMCULcjoaB3IOBg9yAAZyACsrMisyKzIwMUEzAw4DJyYmJzcWFhcWNjY3EwE3PgMXHgMHBw4DJy4DNwcGHgIXFjY2Nzc2LgInJg4CA5ybrBBShLh2Wq5MQjyQSmuPUQ6G/PMCDUyAtHRpjFEeBgsRT3ysbWuRUxzDAwcLMF9NU4tkFigCHz9aOVSAWjYEOvwVbruKSwICODCLLDABA12eYgMT/rEWZsmjYAMCXZa0W1tiupVWAwNloLxwFT6FdEkCA06CTPM3ZVAwAgNFd5EAAgBC/+kEJgRRABUAKwAQtxwRC3InBgdyACsyKzIwMVM3PgMXHgMHBw4DJy4DNwcGHgIXFj4CNzc2LgInJg4CTAMOWpLDd3KjZigKAw5bk8R2cKNmKMIDCA40Y05Tgl46CgMHDTRjTlSCXjkCChduy55ZAwJem8FnGG7Jm1gDAl2ZwH0YP4h0SQMDRXeQSRZAiXZLAwJGeJIAAAP/1/5gBBQEUgAEABoALwAZQA4hFgdyKwsLcgMGcgIOcgArKysyKzIwMUEDIwEzAQcOAycuAzc3PgMXHgMHNzYuAicmDgIHAwYWFhcWPgIBa962AQSaApUDDEt+sXNmj1kkBg4RUX+tbW+STxnDAwcLMmFPPnBaQA8rAT9vR1OBXDcDX/sBBdr98hVkx6NhAwNVjK9cb2K7llYDA2SgvnEVQIZ0SQICLVFpOv77R3lKAwJHeJEAAwBC/mAENgRSAAQAGgAvABlADiEWC3IrCwdyBA5yAwZyACsrKzIrMjAxQRM3MwEBNz4DFx4DBwcOAycuAzcHBh4CFxY2Njc3Ni4CJyYOAgJ84jmf/vz9GgMMTYG2dWmOUh8FDBBQfq1ubJNUHcQDBwsxYE5Tj2cWKAIhQVw4VYJbN/5gBRXF+iYDqBZnyqNgAwNclrVbXGK7lFUDA2OfvHIVPod1SwMCUIVN8zdnUTECA0Z5kwABAEb/7APhBFEAKgAZQAwTEhIAGQsHciQAC3IAKzIrMhE5LzMwMUUuAzc3PgMXHgMHByE3BTc2JiYnJg4CBwcGHgIXFjY3FwYGAgJzrG8uCQUMVYu6cWuVWB4ME/zvGwJXBQwiX1FReVUzCQUIFkFuUU2QQC1FuBMBVpTBbC1ow5tZAwJRiK9ieZcBHEp/UAMDRHOMRSxHiG5DAgEwKoE+MgADADX+UQQpBFEAEgAoAD0AG0APLyQLcjkZB3INBg9yAAZyACsrMisyKzIwMUEzAw4CJyYmJzcWFhcWNjY3EwE3PgMXHgMHBw4DJy4DNwcGHgIXFjY2Nzc2LgInJg4CA46brxWF3plQnkZCN35BZ45TD4j9BgMMR3iudGmMUR0GCxFOfKtta4tMFsIDBwYoWU1SjGQWJwMgP1o5VXpSMAQ6/AOQ4HwCAi0ojCQmAQJUlmADJf6wFmTIpmECA1yXtFtcYbqVVgMEZaG7bhU8hHRLAgNOgkzzN2ZQMAEDR3iQAAL/v/5LBFEERwADACUAGUAMDhUBARUfBAdyAwZyACsrMi8zLxEzMDFBASMBJR4DFxMeAhcWNjcHBgYHBi4CJwMuAicmBgc3NjYEUfw4ygPR/XM7UjknDvIIGSkjFzAXPg4aDzpRNyUO6woeNS4QIRALFy8EOvomBdoNAi5LXjD8TBxCMQQCAgKeBgcBAjFRYC4DmSRSOwIBAwGXBQf//wCpAAADAwW4BAYAFa8AAAEALP/uBCMEnwBBABdACzg4ECJ+GQozAAtyACsyPz8zOS8wMUUuAzc+AjclNjY3NiYHBgYHBhYWFwEjAS4CNz4CFx4CBw4CBwUOAgcGFhYXFj4CNzcGBgcGBgcGBgF+P3piNwQEPmA4ASUkQAcHQTM3VgcGIjYWAf++/kAkRi0EBmGWU0iATgUDL0or/rccMyIFCDBVMWaoflAOoQ9oUAsUDFTtDwEkRWpISG5YJr8aSS81PgEBSjYpSEEe/U0CVi9gaj9Zej4BAj1wTzddTR3ZFDA7JDhEIAEDSIKpXwF7ylwMGgtSRwAD/+kAAAMjBI0AAwAHAAsAHUANCAkJCwoKBgd9AwIGCgA/MzM/EjkvMzMvMzAxZQchNxMDIxMBBwU3AyMb/Z4b3Mq1ywF1GP2jGJiYmAP1+3MEjf6FhLqEAAAG/5oAAAYABI0AAwAHAAsAEAAUABgAM0AYCgsLGBgPBwYUEwYTBhMND30DAgIXFw0KAD8zETMRMz8SOTkvLxEzETMRMxEzETMwMWUHITcBByE3AQchNwcBIwEzEwchNwEDIxMFeBv91BoCIxr+HxsCchv91BuU/SjOA056Cxv9thsCzKSzo5aWlgIVlZUB4paWevvtBI39N5aWAsn7cwSNAAACAB4AAAOiBI0AAwAZABdACg8QEAF9BQQEAAoAPzIvMz8zLzMwMXMTMwMnNxcyNjY3NiYmJyc3Fx4CBw4CJx7LtMoJG9hGgVgKCDNiPuwc02yyZggKjNV3BI37c+yZASteTURaLwIBmQEDUZ11g6NMAQAD//T/xgSjBLcAFQArAC8AG0ALLy8cEX4tLScGC3IAKzIyfC8YPzMzfC8wMUEHDgMnLgM3Nz4DFx4DBzc2LgInJg4CBwcGHgIXFj4CAQEjAQQ6Bw9Zk8l9d6dkJAsIDluUyHx3p2QkxggHCjNnVFmHYDoKCQgLM2dUW4lfOAEt+/CfBBACbUJ10KBZAwJfnsdrRHPQn1kCA16exq1FRox0SQMDRHaVTkVFjnlMAwNFeZgC2/sPBPEABAAeAAAE1QSNAAMABwALAA8AG0AMAgOADg8PCwd9CgYKAD8zPzMzLzMazDIwMUEHITcTAyMTIQMjExcHITcDrRv9cht+yrXLA7LLtMrvG/ufGwKLmZkCAvtzBI37cwSNppiYAAIAHv5HBJsEjQAJABsAH0APFxAPcgkDBn0ICgoCAgUKAD8zETMRMz8zMysyMDFBAyMBAyMTMwETAzMHDgInJiYnNxYWMzI2NjcEm8uu/kuatcutAbaawLQUDVmYbR85Hh8YMBg3RicIBI37cwN0/IwEjfyMA3T7qI1moFsBAQoJnAYJN1cwAP//ABoCHwIQArcGBgARAAAAAwAvAAAE7QWwABoAHgAiACNAEQIBAR0iISEdDg8PHgJyHQhyACsrMhEzETkvMxEzETMwMWEhNwUyNjY3NzYuAiclNwUeAwcHDgIEAwMjEwEHITcB5P7NHQEbn+mOFw0MEUqOcP62HAEyktGBLxAMFXzC/wBr/b39AWAb/ZQbnQGL75ZaYLiVWwMBngEDcb70hleU+7hlBbD6UAWw/YGYmAAAAwAvAAAE7QWwABoAHgAiACNAEQIBAR0iISEdDg8PHgJyHQhyACsrMhEzETkvMxEzETMwMWEhNwUyNjY3NzYuAiclNwUeAwcHDgIEAwMjEwEHITcB5P7NHQEbn+mOFw0MEUqOcP62HAEyktGBLxAMFXzC/wBr/b39AWAb/ZQbnQGL75ZaYLiVWwMBngEDcb70hleU+7hlBbD6UAWw/YGYmAAAAwA+AAAD+AYAAAMAGgAeABlADR4dFgoHcgMAchECCnIAKzIrKzLEMjAxQQEjAQMnPgMXHgMHAyMTNiYmJyYOAgEHITcB/v71tQELGEoOS3urbld1QhYJdrZ4BxdNSEx6WzkBuRv9lRsGAPoABgD8RgJhu5ZXAwI/bI1P/TsCyEFpPwICPmuDAuCYmAADAKkAAAUJBbAAAwAHAAsAFUAKAwoLBgcCcgEIcgArKzIvMzIwMUEDIxMhByE3AQchNwND/Lr9An8c+7wcAwwb/ZUbBbD6UAWwnp7+HpiYAAP/9P/tApUFQQADABUAGQAdQA4KEQtyGBkZAgIEBAMGcgArMi8yETMvMysyMDFBByE3EzMDBhYWFzI2NwcGBicuAjcBByE3ApUZ/ccZ7rS3AwomJxYrFg0gQyFTXiIHAeUb/ZUbBDqOjgEH+8kjOCEBBwOYCQkBAVKCSgHlmJj///+vAAAEiwc3BiYAJQAAAQcARAFnATcAC7YDEAcBAWFWACs0AP///68AAASZBzcGJgAlAAABBwB1AfMBNwALtgMOAwEBYVYAKzQA////rwAABIsHNwYmACUAAAEHAJ4A+QE3AAu2AxEHAQFsVgArNAD///+vAAAEsAciBiYAJQAAAQcApQEAATsAC7YDHAMBAWtWACs0AP///68AAASLBv8GJgAlAAABBwBqATMBNwANtwQDIwcBAXhWACs0NAD///+vAAAEiweUBiYAJQAAAQcAowF+AUIADbcEAxkHAQFHVgArNDQA////rwAABJ0HkwYmACUAAAEHAjcBgQEiABK2BQQDGwcBALj/srBWACs0NDT//wBw/kEE+QXHBiYAJwAAAQcAeQHD//YAC7YBKAUAAApWACs0AP//ADsAAASxB0IGJgApAAABBwBEATYBQgALtgQSBwEBbFYAKzQA//8AOwAABLEHQgYmACkAAAEHAHUBwgFCAAu2BBAHAQFsVgArNAD//wA7AAAEsQdCBiYAKQAAAQcAngDHAUIAC7YEEwcBAXdWACs0AP//ADsAAASxBwoGJgApAAABBwBqAQEBQgANtwUEJQcBAYNWACs0NAD//wBJAAACFwdCBiYALQAAAQcARP/sAUIAC7YBBgMBAWxWACs0AP//AEkAAAMeB0IGJgAtAAABBwB1AHgBQgALtgEEAwEBbFYAKzQA//8ASQAAAuIHQgYmAC0AAAEHAJ7/fQFCAAu2AQcDAQF3VgArNAD//wBJAAADCgcKBiYALQAAAQcAav+4AUIADbcCARkDAQGDVgArNDQA//8AOwAABXgHIgYmADIAAAEHAKUBNQE7AAu2ARgGAQFrVgArNAD//wBz/+kFEAc5BiYAMwAAAQcARAGKATkAC7YCLhEBAU9WACs0AP//AHP/6QUQBzkGJgAzAAABBwB1AhUBOQALtgIsEQEBT1YAKzQA//8Ac//pBRAHOQYmADMAAAEHAJ4BGwE5AAu2Ai8RAQFaVgArNAD//wBz/+kFEAckBiYAMwAAAQcApQEiAT0AC7YCOhEBAVlWACs0AP//AHP/6QUQBwEGJgAzAAABBwBqAVUBOQANtwMCQREBAWZWACs0NAD//wBj/+gFHAc3BiYAOQAAAQcARAFjATcAC7YBGAABAWFWACs0AP//AGP/6AUcBzcGJgA5AAABBwB1Ae4BNwALtgEWCwEBYVYAKzQA//8AY//oBRwHNwYmADkAAAEHAJ4A9AE3AAu2ARkAAQFsVgArNAD//wBj/+gFHAb/BiYAOQAAAQcAagEuATcADbcCASsAAQF4VgArNDQA//8AqAAABTMHNgYmAD0AAAEHAHUBvgE2AAu2AQkCAQFgVgArNAD//wAx/+kDxwYABiYARQAAAQcARADaAAAAC7YCPQ8BAYxWACs0AP//ADH/6QQMBgAGJgBFAAABBwB1AWYAAAALtgI7DwEBjFYAKzQA//8AMf/pA9EGAAYmAEUAAAEGAJ5sAAALtgI+DwEBl1YAKzQA//8AMf/pBCMF6wYmAEUAAAEGAKVzBAALtgJJDwEBllYAKzQA//8AMf/pA/gFyAYmAEUAAAEHAGoApgAAAA23AwJQDwEBo1YAKzQ0AP//ADH/6QPHBl0GJgBFAAABBwCjAPEACwANtwMCRg8BAXJWACs0NAD//wAx/+kEEAZcBiYARQAAAQcCNwD0/+sAErYEAwJIDwAAuP/dsFYAKzQ0NP//AEb+QQPiBFEGJgBHAAABBwB5AT//9gALtgEoCQAAClYAKzQA//8ARf/rA9oGAAYmAEkAAAEHAEQAvgAAAAu2AS4LAQGMVgArNAD//wBF/+sD8AYABiYASQAAAQcAdQFKAAAAC7YBLAsBAYxWACs0AP//AEX/6wPaBgAGJgBJAAABBgCeTwAAC7YBLwsBAZdWACs0AP//AEX/6wPcBcgGJgBJAAABBwBqAIoAAAANtwIBQQsBAaNWACs0NAD//wAvAAABxQX+BiYAjQAAAQYARJr+AAu2AQYDAQGeVgArNAD//wAvAAACzAX+BiYAjQAAAQYAdSb+AAu2AQQDAQGeVgArNAD//wAvAAACkAX+BiYAjQAAAQcAnv8r//4AC7YBBwMBAalWACs0AP//AC8AAAK4BcYGJgCNAAABBwBq/2b//gANtwIBGQMBAbVWACs0NAD//wAgAAAEGgXrBiYAUgAAAQYApWoEAAu2AioDAQGqVgArNAD//wBG/+kEFwYABiYAUwAAAQcARADIAAAAC7YCLgYBAYxWACs0AP//AEb/6QQXBgAGJgBTAAABBwB1AVQAAAALtgIsBgEBjFYAKzQA//8ARv/pBBcGAAYmAFMAAAEGAJ5ZAAALtgIvBgEBl1YAKzQA//8ARv/pBBcF6wYmAFMAAAEGAKVhBAALtgI6BgEBllYAKzQA//8ARv/pBBcFyAYmAFMAAAEHAGoAkwAAAA23AwJBBgEBo1YAKzQ0AP//AFv/6AQUBgAGJgBZAAABBwBEAMwAAAALtgIeEQEBoFYAKzQA//8AW//oBBQGAAYmAFkAAAEHAHUBVwAAAAu2AhwRAQGgVgArNAD//wBb/+gEFAYABiYAWQAAAQYAnl0AAAu2Ah8RAQGrVgArNAD//wBb/+gEFAXIBiYAWQAAAQcAagCXAAAADbcDAjERAQG3VgArNDQA////qv5HA+wGAAYmAF0AAAEHAHUBHgAAAAu2AhkBAQGgVgArNAD///+q/kcD7AXIBiYAXQAAAQYAal4AAA23AwIuAQEBt1YAKzQ0AP///68AAASfBuQGJgAlAAABBwBwAQQBPwALtgMQAwEBplYAKzQA//8AMf/pBBIFrQYmAEUAAAEGAHB3CAALtgI9DwEB0VYAKzQA////rwAABIsHDwYmACUAAAEHAKEBLQE3AAu2AxMHAQFTVgArNAD//wAx/+kD6wXYBiYARQAAAQcAoQCgAAAAC7YCQA8BAX5WACs0AAAE/6/+TgSLBbAABAAJAA0AIwArQBUNDAwDFh0GAAIHAwJyDg8PBQUCCHIAKzIRMxEzKzISOTkvMxI5LzMwMUEBIwEzEwM3MwEDByE3ARcOAgcGFhcyNjcXBgYjJiY3PgIDLP1MyQMYgYrxE3gBH3Yc/OUcAyVLJVdCBgMcIBozFwQiTSlRWwICWYEFJPrcBbD6UAU6dvpQAhuenv4fPRtCUzIgIQEQCnsVFQFnUE51VAAAAwAx/k4DxwRQABsAOgBQACtAFx46Og9DSg9yJzELcjs8PBkKcgkFDwdyACsyMisyETMrMisyEjkvMzAxZRM2JiYnJgYGBwc+AxceAgcDBgYXBwcmNhMHJyIOAgcGFhYXFjY2NxcOAycuAjc+AzMTFw4CBwYWFzI2NxcGBiMmJjc+AgKuWgclVUA4a04MtAdYhJhIbaFSC1MJAw4CtwsBdRWrNnhsSggGJ1A1RYZkE0ITVnWGQ1uTVQYGYJe0WLtKJVdCBgMcIRoyFwQiTSlRWwICWYG5Ai8+XjQCASZMOgFReVEnAQJZoHD+CDdvNREBLl4CBYIBECxTQjZPLAEBOGhEWUJvUCwBAk6NXmeMVCX9qT0bQlMyICEBEAp7FRUBZ1BOdVT//wBw/+gE+QdXBiYAJwAAAQcAdQIAAVcAC7YBKBABAW1WACs0AP//AEb/6gPiBgAGJgBHAAABBwB1ASsAAAALtgEoFAEBjFYAKzQA//8AcP/oBPkHVwYmACcAAAEHAJ4BBgFXAAu2ASsQAQF4VgArNAD//wBG/+oD4gYABiYARwAAAQYAnjAAAAu2ASsUAQGXVgArNAD//wBw/+gE+QcbBiYAJwAAAQcAogHbAVcAC7YBMRABAYJWACs0AP//AEb/6gPiBcQGJgBHAAABBwCiAQYAAAALtgExFAEBoVYAKzQA//8AcP/oBPkHWAYmACcAAAEHAJ8BGgFXAAu2AS4QAQF2VgArNAD//wBG/+oD4gYBBiYARwAAAQYAn0UAAAu2AS4UAQGVVgArNAD//wA7AAAEzwdDBiYAKAAAAQcAnwDSAUIAC7YCJR4BAXVWACs0AP//AEf/6AWnBgIEJgBIAAABBwHKBJgFEwALtgM5AQEAAFYAKzQA//8AOwAABLEG7wYmACkAAAEHAHAA0gFKAAu2BBIHAQGxVgArNAD//wBF/+sD9QWtBiYASQAAAQYAcFoIAAu2AS4LAQHRVgArNAD//wA7AAAEsQcaBiYAKQAAAQcAoQD8AUIAC7YEFQcBAV5WACs0AP//AEX/6wPaBdgGJgBJAAABBwChAIQAAAALtgExCwEBflYAKzQA//8AOwAABLEHBgYmACkAAAEHAKIBnQFCAAu2BBkHAQGBVgArNAD//wBF/+sD2gXEBiYASQAAAQcAogElAAAAC7YBNQsBAaFWACs0AAAFADv+TgSxBbAAAwAHAAsADwAlAClAFAoLCxgfDg8PBwJyEBERAwICBghyACsyETMyETMrMhEzLzM5LzMwMWUHITcBAyMTAQchNwEHITcBFw4CBwYWFzI2NxcGBiMmJjc+AgPaHP0TGwEJ/b39ArMb/XUcA1Ac/R0cAV9LJldCBQQdIBoyFwQiTShRWwICWIGdnZ0FE/pQBbD9jp2dAnKenvqKPRtCUzIgIQEQCnsVFQFnUE51VAAAAgBF/mgD2gRRACsAQQAlQBMSExMLNDsOchkLB3IsLSQkAAtyACsyETk5KzIrMhI5LzMwMUUuAzc3PgMXHgMHByE3BTc2JiYnJg4CBwcGHgIXFjY3Fw4CNxcOAgcGFhcyNjcXBgYjJiY3PgIB6m+jZywJBApSibtycZZVGgsL/O8YAlcDCiRfUFN6Ui8JBAYUOWZLW5E8Zy+CmjNKJVdCBgMcIRkzFwQiTSlRWwICWYEUAlWRumYraMmiXwMCXJe7YlOXARBIhlcCA0l7kUUqQIJrQwICU0BYRV4uaT0bQlMyICEBEAp7FRUBZ1BOdVT//wA7AAAEsQdDBiYAKQAAAQcAnwDcAUIAC7YEFgcBAXVWACs0AP//AEX/6wPmBgEGJgBJAAABBgCfZAAAC7YBMgsBAZVWACs0AP//AHT/6wUFB1cGJgArAAABBwCeAP4BVwALtgEvEAEBeFYAKzQA//8AA/5RBCkGAAYmAEsAAAEGAJ5SAAALtgNCGgEBl1YAKzQA//8AdP/rBQUHLwYmACsAAAEHAKEBMwFXAAu2ATEQAQFfVgArNAD//wAD/lEEKQXYBiYASwAAAQcAoQCHAAAAC7YDRBoBAX5WACs0AP//AHT/6wUFBxsGJgArAAABBwCiAdQBVwALtgE1EAEBglYAKzQA//8AA/5RBCkFxAQmAEsAAAEHAKIBKAAAAAu2A0gaAQGhVgArNAD//wB0/fMFBQXHBiYAKwAAAQcBygGN/pUADrQBNQUBAbj/mLBWACs0//8AA/5RBCkGlAQmAEsAAAEHAkQBMQBXAAu2Az8aAQGYVgArNAD//wA7AAAFdwdCBiYALAAAAQcAngEhAUIAC7YDDwsBAXdWACs0AP//ACAAAAPaB0EGJgBMAAABBwCeAFUBQQALtgIeAwEBJlYAKzQA//8ASQAAAzUHLQYmAC0AAAEHAKX/hQFGAAu2ARIDAQF2VgArNAD//wARAAAC4wXpBiYAjQAAAQcApf8zAAIAC7YBEgMBAahWACs0AP//AEkAAAMjBu8GJgAtAAABBwBw/4gBSgALtgEGAwEBsVYAKzQA//8ALgAAAtEFqwYmAI0AAAEHAHD/NgAGAAu2AQYDAQHjVgArNAD//wBJAAAC/QcaBiYALQAAAQcAof+yAUIAC7YBCQMBAV5WACs0AP//AC8AAAKrBdYGJgCNAAABBwCh/2D//gALtgEJAwEBkFYAKzQA////i/5XAgIFsAYmAC0AAAEGAKTdCQALtgEFAgAAAFYAKzQA////bf5OAeUFxgYmAE0AAAEGAKS/AAALtgIRAgAAAFYAKzQA//8ASQAAAjcHBgYmAC0AAAEHAKIAUwFCAAu2AQ0DAQGBVgArNAD//wBJ/+gGYAWwBCYALQAAAAcALgIcAAD//wAv/kYDuQXGBCYATQAAAAcATgHjAAD//wAH/+gFDAc1BiYALgAAAQcAngGnATUAC7YBFwEBAWpWACs0AP///wn+RwKXBdcGJgCcAAABBwCe/zL/1wALtgEVAAEBglYAKzQA//8AO/5WBVEFsAQmAC8AAAEHAcoBWv74AA60AxcCAQC4/+ewVgArNP//ACD+QwQbBgAGJgBPAAABBwHKANj+5QAOtAMXAgEBuP/UsFYAKzT//wA7AAADsQcyBiYAMAAAAQcAdQBmATIAC7YCCAcBAVxWACs0AP//AC8AAAMPB5cGJgBQAAABBwB1AGkBlwALtgEEAwEBcVYAKzQA//8AO/4GA7EFsAQmADAAAAEHAcoBJv6oAA60AhECAQG4/5ewVgArNP///6L+BgHvBgAEJgBQAAABBwHK/77+qAAOtAENAgEBuP+XsFYAKzT//wA7AAADsQWxBiYAMAAAAQcBygKaBMIAC7YCEQcAAAFWACs0AP//AC8AAAM7BgIEJgBQAAABBwHKAiwFEwALtgENAwAAAlYAKzQA//8AOwAAA7EFsAYmADAAAAAHAKIBTP3E//8ALwAAAq4GAAQmAFAAAAAHAKIAyv21//8AOwAABXgHNwYmADIAAAEHAHUCJwE3AAu2AQoGAQFhVgArNAD//wAgAAAEAwYABiYAUgAAAQcAdQFdAAAAC7YCHAMBAaBWACs0AP//ADv+BgV4BbAEJgAyAAABBwHKAYf+qAAOtAETBQEBuP+XsFYAKzT//wAg/gYD2gRRBCYAUgAAAQcBygDu/qgADrQCJQIBAbj/l7BWACs0//8AOwAABXgHOAYmADIAAAEHAJ8BQQE3AAu2ARAJAQFqVgArNAD//wAgAAAD+QYBBiYAUgAAAQYAn3cAAAu2AiIDAQGpVgArNAD//wAgAAAD2gYFBiYAUgAAAQcBygBEBRYAC7YCIAMBATpWACs0AP//AHP/6QUQBuYGJgAzAAABBwBwASYBQQALtgIuEQEBlFYAKzQA//8ARv/pBBcFrQYmAFMAAAEGAHBkCAALtgIuBgEB0VYAKzQA//8Ac//pBRAHEQYmADMAAAEHAKEBTwE5AAu2AjERAQFBVgArNAD//wBG/+kEFwXYBiYAUwAAAQcAoQCOAAAAC7YCMQYBAX5WACs0AP//AHP/6QVUBzgGJgAzAAABBwCmAZYBOQANtwMCLBEBAUVWACs0NAD//wBG/+kEkgX/BiYAUwAAAQcApgDUAAAADbcDAiwGAQGCVgArNDQA//8AOwAABLwHNwYmADYAAAEHAHUBtwE3AAu2Ah4AAQFhVgArNAD//wAgAAADYwYABiYAVgAAAQcAdQC9AAAAC7YCFwMBAaBWACs0AP//ADv+BgS8BbAEJgA2AAABBwHKAR3+qAAOtAInGAEBuP+XsFYAKzT///+f/gcC0QRUBCYAVgAAAQcByv+7/qkADrQCIAIBAbj/mLBWACs0//8AOwAABLwHOAYmADYAAAEHAJ8A0QE3AAu2AiQAAQFqVgArNAD//wAgAAADWQYBBiYAVgAAAQYAn9cAAAu2Ah0DAQGpVgArNAD//wAp/+oEowc5BiYANwAAAQcAdQHDATkAC7YBOg8BAU9WACs0AP//AC7/6wPtBgAGJgBXAAABBwB1AUcAAAALtgE2DgEBjFYAKzQA//8AKf/qBKMHOQYmADcAAAEHAJ4AyQE5AAu2AT0PAQFaVgArNAD//wAu/+sDswYABiYAVwAAAQYAnk0AAAu2ATkOAQGXVgArNAD//wAp/koEowXGBiYANwAAAQcAeQGS//8AC7YBOisAABNWACs0AP//AC7+QQOzBE8GJgBXAAABBwB5AVv/9gALtgE2KQAAClYAKzQA//8AKf37BKMFxgYmADcAAAEHAcoBLP6dAA60AUMrAQG4/6CwVgArNP//AC798gOzBE8GJgBXAAABBwHKAPT+lAAOtAE/KQEBuP+XsFYAKzT//wAp/+oEowc6BiYANwAAAQcAnwDdATkAC7YBQA8BAVhWACs0AP//AC7/6wPjBgEGJgBXAAABBgCfYQAAC7YBPA4BAZVWACs0AP//AKn9/AUJBbAGJgA4AAABBwHKAR7+ngAOtAIRAgEBuP+NsFYAKzT//wBD/fwClQVBBiYAWAAAAQcBygCC/p4ADrQCHxEBAbj/obBWACs0//8Aqf5LBQkFsAYmADgAAAEHAHkBhQAAAAu2AggCAQAAVgArNAD//wBD/ksClQVBBiYAWAAAAQcAeQDpAAAAC7YCFhEAABRWACs0AP//AKkAAAUJBzcGJgA4AAABBwCfANMBNgALtgIOAwEBaVYAKzQA//8AQ//tA40GegQmAFgAAAEHAcoCfgWLAA60AhoEAQC4/6iwVgArNP//AGP/6AUcByIGJgA5AAABBwClAPsBOwALtgEkCwEBa1YAKzQA//8AW//oBBUF6wYmAFkAAAEGAKVlBAALtgIqEQEBqlYAKzQA//8AY//oBRwG5AYmADkAAAEHAHAA/wE/AAu2ARgLAQGmVgArNAD//wBb/+gEFAWtBiYAWQAAAQYAcGgIAAu2Ah4RAQHlVgArNAD//wBj/+gFHAcPBiYAOQAAAQcAoQEoATcAC7YBGwABAVNWACs0AP//AFv/6AQUBdgGJgBZAAABBwChAJIAAAALtgIhEQEBklYAKzQA//8AY//oBRwHlAYmADkAAAEHAKMBeQFCAA23AgEhAAEBR1YAKzQ0AP//AFv/6AQUBl0GJgBZAAABBwCjAOIACwANtwMCJxEBAYZWACs0NAD//wBj/+gFLQc2BiYAOQAAAQcApgFvATcADbcCARYAAQFXVgArNDQA//8AW//oBJYF/wYmAFkAAAEHAKYA2AAAAA23AwIcEQEBllYAKzQ0AAACAGP+egUcBbAAFQArABtADR4lAQsCchcWEREGCXIAKzISOTkrMi8zMDFBMwMOAicuAjcTMwMGFhYXFjY2NwMXDgIHBhYXMjY3FwYGIyYmNz4CBGC8qBai+ZmR0WURqLqnCzF7ZGqjZxDSSyZXQgUEHSAaMhcEIk0oUVsCAliBBbD8KZjgeQMDfNuSA9n8Jl+UVwMDUZho/o89G0JTMiAhARAKexUVAWdQTnVUAAADAFv+TgQUBDoABAAbADEAIUARJCsPcgERBnIcHR0EBBgLC3IAKzIyETMRMysyKzIwMUETMwMjEzcOAycuAzcTMwMGHgIXFjY2AxcOAgcGFhcyNjcXBgYjJiY3PgIC0I62vK1pSg1CcadyWXdEFgh1tXUEBh4/NGyWWAJLJVdCBgQdIBoyGAQjTClRWwICWYEBBAM2+8YB3gNmt41PAwNCcJBQArr9QyxVRisCBFme/r49G0JTMiAhARAKexUVAWdQTnVUAP//AMMAAAdBBzcGJgA7AAABBwCeAdwBNwALtgQZFQEBbFYAKzQA//8AgAAABf4GAAYmAFsAAAEHAJ4BGwAAAAu2BBkVAQGrVgArNAD//wCoAAAFMwc2BiYAPQAAAQcAngDEATYAC7YBDAIBAWtWACs0AP///6r+RwPsBgAGJgBdAAABBgCeJAAAC7YCHAEBAatWACs0AP//AKgAAAUzBv4GJgA9AAABBwBqAP4BNgANtwIBHgIBAXdWACs0NAD////sAAAEzgc3BiYAPgAAAQcAdQG9ATcAC7YDDg0BAWFWACs0AP///+4AAAPPBgAGJgBeAAABBwB1ASUAAAALtgMODQEBoFYAKzQA////7AAABM4G+wYmAD4AAAEHAKIBmAE3AAu2AxcIAQF2VgArNAD////uAAADzwXEBiYAXgAAAQcAogEAAAAAC7YDFwgBAbVWACs0AP///+wAAATOBzgGJgA+AAABBwCfANcBNwALtgMUCAEBalYAKzQA////7gAAA88GAQYmAF4AAAEGAJ8/AAALtgMUCAEBqVYAKzQA////gwAAB3kHQgYmAIEAAAEHAHUC+AFCAAu2BhkDAQFsVgArNAD//wAT/+oGVwYBBiYAhgAAAQcAdQJzAAEAC7YDXw8BAY1WACs0AP//ACD/owWcB4AGJgCDAAABBwB1AikBgAALtgM0FgEBllYAKzQA//8AOv95BCkF/wYmAIkAAAEHAHUBOv//AAu2AzAKAQGLVgArNAD///+v//8EDASNBiYCQAAAAAcCNv8c/3b///+v//8EDASNBiYCQAAAAAcCNv8c/3b//wBuAAAEQgSNBiYB6AAAAAYCNj7f////pgAAA+MGHgYmAkMAAAEHAEQA3wAeAAu2AxAHAQFrVgArNAD///+mAAAEEAYeBiYCQwAAAQcAdQFqAB4AC7YDDgMBAWtWACs0AP///6YAAAPjBh4GJgJDAAABBgCecB4AC7YDEwMBAWtWACs0AP///6YAAAQnBgkGJgJDAAABBgCldyIAC7YDGwMBAWtWACs0AP///6YAAAP8BeYGJgJDAAABBwBqAKoAHgANtwQDFwMBAWtWACs0NAD///+mAAAD4wZ7BiYCQwAAAQcAowD1ACkADbcEAxkDAQFRVgArNDQA////pgAABBQGegYmAkMAAAAHAjcA+AAJ//8ASP5HBDMEoAYmAkEAAAAHAHkBaf/8//8AHgAAA/AGHgYmAjgAAAEHAEQAtAAeAAu2BBIHAQFsVgArNAD//wAeAAAD8AYeBiYCOAAAAQcAdQFAAB4AC7YEEAcBAWxWACs0AP//AB4AAAPwBh4GJgI4AAABBgCeRR4AC7YEFgcBAWxWACs0AP//AB4AAAPwBeYGJgI4AAABBgBqfx4ADbcFBBkHAQGEVgArNDQA//8AKwAAAcMGHgYmAfMAAAEGAESYHgALtgEGAwEBa1YAKzQA//8AKwAAAskGHgYmAfMAAAEGAHUjHgALtgEEAwEBa1YAKzQA//8AKwAAAo4GHgYmAfMAAAEHAJ7/KQAeAAu2AQkDAQF2VgArNAD//wArAAACtQXmBiYB8wAAAQcAav9jAB4ADbcCAQ0DAQGEVgArNDQA//8AHgAABJsGCQYmAe4AAAEHAKUAoQAiAAu2ARgGAQF2VgArNAD//wBM/+0ERgYeBiYB7QAAAQcARAD3AB4AC7YCLhEBAVtWACs0AP//AEz/7QRGBh4GJgHtAAABBwB1AYIAHgALtgIsEQEBW1YAKzQA//8ATP/tBEYGHgYmAe0AAAEHAJ4AiAAeAAu2AjERAQFbVgArNAD//wBM/+0ERgYJBiYB7QAAAQcApQCQACIAC7YCMREBAW9WACs0AP//AEz/7QRGBeYGJgHtAAABBwBqAMIAHgANtwMCNREBAXRWACs0NAD//wBC/+sETwYeBiYB5wAAAQcARADaAB4AC7YBGAsBAWtWACs0AP//AEL/6wRPBh4GJgHnAAABBwB1AWUAHgALtgEWCwEBa1YAKzQA//8AQv/rBE8GHgYmAecAAAEGAJ5rHgALtgEbCwEBa1YAKzQA//8AQv/rBE8F5gYmAecAAAEHAGoApQAeAA23AgEfCwEBhFYAKzQ0AP//AHUAAARlBh4GJgHjAAABBwB1ATwAHgALtgMOCQEBa1YAKzQA////pgAABBYFywYmAkMAAAEGAHB7JgALtgMQAwEBsFYAKzQA////pgAAA+8F9gYmAkMAAAEHAKEApAAeAAu2AxMDAQFdVgArNAAABP+m/k4D4wSNAAQACQANACMAIUAPDQwMAxYdCAN9Dw4FBQESAD8zETMzPzMvMxI5LzMwMUEBIwEzEwM3MwEDByE3ARcOAgcGFhcyNjcXBgYjJiY3PgICkf3XwgKcfHbSDnMBAIEb/WAbArVLJldCBgMdIBoyFwQiTShSWwICWYED4fwfBI37cwP5lPtzAa+YmP6LPRtCUzIgIQEQCnsVFQFnUE51VAD//wBI/+0EMwYeBiYCQQAAAQcAdQFwAB4AC7YBKBABAVtWACs0AP//AEj/7QQzBh4GJgJBAAABBgCedh4AC7YBLRABAVtWACs0AP//AEj/7QQzBeIGJgJBAAABBwCiAUsAHgALtgExEAEBcFYAKzQA//8ASP/tBDMGHwYmAkEAAAEHAJ8AigAeAAu2AS4QAQFkVgArNAD//wAe//8EDAYfBiYCQAAAAQYAnzYeAAu2AiQdAQF0VgArNAD//wAeAAAD8AXLBiYCOAAAAQYAcFAmAAu2BBIHAQGwVgArNAD//wAeAAAD8AX2BiYCOAAAAQYAoXoeAAu2BBUHAQFeVgArNAD//wAeAAAD8AXiBiYCOAAAAQcAogEbAB4AC7YEGQcBAYBWACs0AAAFAB7+TgPwBI0AAwAHAAsADwAlACNAEBgfCwoKBg8OB30REBAFBhIAPzMzETM/MzMSOS8zLzMwMWUHITcTAyMTAQchNwEHITcBFw4CBwYWFzI2NxcGBiMmJjc+AgNGG/17G9zKtcsCZBv9zxsC1Bv9gBsBNUslWEIFBB0gGjIYBCNMKVFbAgJZgZiYmAP1+3MEjf4Zl5cB55mZ+609G0JTMiAhARAKexUVAWdQTnVU//8AHgAAA/AGHwYmAjgAAAEGAJ9aHgALtgQWBwEBdFYAKzQA//8ATP/vBDwGHgYmAfUAAAEGAJ5zHgALtgEwEAEBZlYAKzQA//8ATP/vBDwF9gYmAfUAAAEHAKEApwAeAAu2ATAQAQFNVgArNAD//wBM/+8EPAXiBiYB9QAAAQcAogFIAB4AC7YBNBABAXBWACs0AP//AEz9+AQ8BKAGJgH1AAABBwHKAQf+mgAOtAE0BQEBuP+ZsFYAKzT//wAeAAAEmwYeBiYB9AAAAQcAngCRAB4AC7YDEQcBAXZWACs0AP//AA4AAALgBgkGJgHzAAABBwCl/zAAIgALtgEJAwEBf1YAKzQA//8AKwAAAs8FywYmAfMAAAEHAHD/NAAmAAu2AQYDAQGwVgArNAD//wArAAACqAX2BiYB8wAAAQcAof9dAB4AC7YBCQMBAV1WACs0AP///4L+TgGqBI0GJgHzAAAABgCk1AD//wArAAAB4gXiBiYB8wAAAQYAov4eAAu2AQ0DAQGAVgArNAD////2/+0EaQYeBiYB8gAAAQcAngEEAB4AC7YBGQEBAXZWACs0AP//AB7+AgSABI0GJgHxAAAABwHKAND+pP//AB4AAAMjBh4GJgHwAAABBgB1GR4AC7YCCAcBAWtWACs0AP//AB7+BAMjBI0GJgHwAAABBwHKAMv+pgAOtAIRBgEBuP+VsFYAKzT//wAeAAADIwSPBiYB8AAAAAcBygITA6D//wAeAAADIwSNBiYB8AAAAAcAogDg/TX//wAeAAAEmwYeBiYB7gAAAQcAdQGUAB4AC7YBCgYBAWtWACs0AP//AB7+AASbBI0GJgHuAAAABwHKAST+ov//AB4AAASbBh8GJgHuAAABBwCfAK4AHgALtgEQBgEBdFYAKzQA//8ATP/tBEYFywYmAe0AAAEHAHAAkwAmAAu2Ai4RAQGgVgArNAD//wBM/+0ERgX2BiYB7QAAAQcAoQC9AB4AC7YCMREBAU1WACs0AP//AEz/7QTBBh0GJgHtAAABBwCmAQMAHgANtwMCMBEBAVFWACs0NAD//wAdAAAD/QYeBiYB6gAAAQcAdQEvAB4AC7YCHwABAWtWACs0AP//AB3+BAP9BI0GJgHqAAAABwHKAMn+pv//AB0AAAP9Bh8GJgHqAAABBgCfSR4AC7YCJQABAXRWACs0AP//ABL/7gPrBh4GJgHpAAABBwB1AUUAHgALtgE6DwEBW1YAKzQA//8AEv/uA+sGHgYmAekAAAEGAJ5LHgALtgE/DwEBZlYAKzQA//8AEv5LA+sEngYmAekAAAAHAHkBSQAA//8AEv/uA+sGHwYmAekAAAEGAJ9fHgALtgFADwEBZlYAKzQA//8Abv3/BEIEjQYmAegAAAEHAcoAzv6hAA60AhECAQG4/5CwVgArNP//AG4AAARCBh8GJgHoAAABBgCfUx4AC7YCDgcBAXRWACs0AP//AG7+TgRCBI0GJgHoAAAABwB5ATUAA///AEL/6wRPBgkGJgHnAAABBgClcyIAC7YBGwsBAX9WACs0AP//AEL/6wRPBcsGJgHnAAABBgBwdiYAC7YBGAsBAbBWACs0AP//AEL/6wRPBfYGJgHnAAABBwChAJ8AHgALtgEbCwEBXVYAKzQA//8AQv/rBE8GewYmAecAAAEHAKMA8AApAA23AgEhCwEBUVYAKzQ0AP//AEL/6wSkBh0GJgHnAAABBwCmAOYAHgANtwIBGgsBAWFWACs0NAAAAgBC/nMETwSNABUAKwAaQAweJRcWFhEGC3IMAH0APzIrMjIRMy8zMDFBMwMOAicuAjcTMwMGFhYXFjY2NwMXDgIHBhYXMjY3FwYGIyYmNz4CA5m2gxKP2H94uWEOg7OECS9oTVKEVQ2pSiVXQgYDHCEaMhcEIk0oUlsCAlmBBI389IG2XwMCYbN9Awz8801uPAICOHFS/t89G0JTMiAhARAKexUVAWdQTnVU//8AlAAABikGHgYmAeUAAAEHAJ4BNwAeAAu2BBsKAQF2VgArNAD//wB1AAAEZQYeBiYB4wAAAQYAnkEeAAu2AxMJAQF2VgArNAD//wB1AAAEZQXmBiYB4wAAAQYAanweAA23BAMXCQEBhFYAKzQ0AP///90AAAQOBh4GJgHiAAABBwB1ATwAHgALtgMODQEBa1YAKzQA////3QAABA4F4gYmAeIAAAEHAKIBFwAeAAu2AxcNAQGAVgArNAD////dAAAEDgYfBiYB4gAAAQYAn1YeAAu2AxQNAQF0VgArNAD///+vAAAEiwY+BiYAJQAAAQYArgP/AA60Aw4DAAC4/z6wVgArNP//AAMAAAUVBj8EJgApZAABBwCu/uAAAAAOtAQQBwAAuP8/sFYAKzT//wARAAAF2wZBBCYALGQAAAcArv7uAAL//wAXAAACZgZBBCYALWQAAQcArv70AAIADrQBBAMAALj/QbBWACs0//8Aa//pBSQGPgQmADMUAAEHAK7/SP//AA60AiwRAAC4/yqwVgArNP///+0AAAWXBj4EJgA9ZAABBwCu/sr//wALtgEKCAAAjlYAKzQA//8AHgAABPIGPgQmALoUAAEHAK7/Sv//AA60AzYdAAC4/yqwVgArNP//ACD/9AMbBnQGJgDDAAABBwCv/yz/6wAQQAkDAgErAAEBolYAKzQ0NP///68AAASLBbAGBgAlAAD//wA7//8EmgWwBgYAJgAA//8AOwAABLEFsAYGACkAAP///+wAAATOBbAGBgA+AAD//wA7AAAFdwWwBgYALAAA//8ASQAAAgIFsAYGAC0AAP//ADsAAAVRBbAGBgAvAAD//wA7AAAGtwWwBgYAMQAA//8AOwAABXgFsAYGADIAAP//AHP/6QUQBccGBgAzAAD//wA7AAAE7wWwBgYANAAA//8AqQAABQkFsAYGADgAAP//AKgAAAUzBbAGBgA9AAD////UAAAFKwWwBgYAPAAA//8ASQAAAwoHCgYmAC0AAAEHAGr/uAFCAA23AgEZAwEBg1YAKzQ0AP//AKgAAAUzBv4GJgA9AAABBwBqAP4BNgANtwIBHgIBAXdWACs0NAD//wBI/+cEJgY4BiYAuwAAAQcArgFp//kAC7YDQgYBAZpWACs0AP//ACn/6gPgBjcGJgC/AAABBwCuASH/+AALtgJAKwEBmlYAKzQA//8AJf5hA+gGOAYmAMEAAAEHAK4BO//5AAu2Ah0DAQGuVgArNAD//wCE//QCZgYjBiYAwwAAAQYAriTkAAu2ARIAAQGZVgArNAD//wBo/+cEDAZ0BiYAywAAAQYArx3rABBACQMCATgPAQGiVgArNDQ0//8ALgAABFkEOgYGAI4AAP//AEb/6QQXBFEGBgBTAAD////m/mAEJQQ6BgYAdgAA//8AbgAAA+4EOgYGAFoAAP///7/+SwRRBEcGBgKAAAD//wBl//QC3QWzBiYAwwAAAQYAaovrAA23AgEnAAEBolYAKzQ0AP//AGj/5wPiBbMGJgDLAAABBgBqfOsADbcCATQPAQGiVgArNDQA//8ARv/pBBcGOAYmAFMAAAEHAK4BLP/5AAu2AiwGAQGaVgArNAD//wBo/+cD4gYjBiYAywAAAQcArgEV/+QAC7YBHw8BAZlWACs0AP//AGf/5wXvBiAGJgDOAAABBwCuAj3/4QALtgJAHwEBllYAKzQA//8AOwAABLEHCgYmACkAAAEHAGoBAQFCAA23BQQlBwEBg1YAKzQ0AP//AEQAAASlB0IGJgCxAAABBwB1AccBQgALtgEGBQEBbFYAKzQAAAEAKf/qBKMFxgA5ABtADQomDzYxKwlyGBQPA3IAK8wzK8wzEjk5MDFBNi4CJy4DNz4DFx4CByc2JiYnJgYGBwYeAhceAwcOAycuAzcXBh4CFxY2NgNsCSxUaDRLkXRBBwhimLZdgcxyB7wHOnlYUJFkCwgwVWUuUJVzPQgJZJy6XmKvhkgFuwUoUXBDT5dqAXdCWT0pEhpGY4hbZZlmMgIDbcSFAVd9RAICNG1VO1Q6KA8bSWeOYGiYYS4CAT1yo2gBRmpHJQECMGoA//8ASQAAAgIFsAYGAC0AAP//AEkAAAMKBwoGJgAtAAABBwBq/7gBQgANtwIBGQMBAYNWACs0NAD//wAH/+gERAWwBgYALgAA//8ARAAABWoFsAYGAjwAAP//ADsAAAVRBzEGJgAvAAABBwB1AbEBMQALtgMOAwEBW1YAKzQA//8AlP/oBUAHGgYmAN4AAAEHAKEBFgFCAAu2Ah4BAQFeVgArNAD///+vAAAEiwWwBgYAJQAA//8AO///BJoFsAYGACYAAP//AEQAAASlBbAGBgCxAAD//wA7AAAEsQWwBgYAKQAA//8ARAAABW8HGgYmANwAAAEHAKEBagFCAAu2AQ8BAQFeVgArNAD//wA7AAAGtwWwBgYAMQAA//8AOwAABXcFsAYGACwAAP//AHP/6QUQBccGBgAzAAD//wBEAAAFcAWwBgYAtgAA//8AOwAABO8FsAYGADQAAP//AHD/6AT5BccGBgAnAAD//wCpAAAFCQWwBgYAOAAA////1AAABSsFsAYGADwAAP//ADH/6QPHBFAGBgBFAAD//wBF/+sD2gRRBgYASQAA//8AMAAABDgFwwYmAPAAAAEHAKEApP/rAAu2AQ8BAQF9VgArNAD//wBG/+kEFwRRBgYAUwAA////1/5gBAAEUQYGAFQAAAABAEb/6gPiBFEAJwATQAkACR0UB3IJC3IAKysyETMwMWUWNjY3Nw4CJy4DNzc+AxceAhUnLgInJg4CBwcGHgIB40JyUBGsEInFa3KfYCQKBAxSibx1cqhcqgEwXkVTe1UxCQUGCS5ggwE0YD8BbaRbAgJbmL9lK23FmVYDAmewcAFAbEIDAkJzjEgqQIZzSP///6r+RwPsBDoGBgBdAAD////FAAAD9QQ6BgYAXAAA//8ARf/rA9wFyAYmAEkAAAEHAGoAigAAAA23AgFBCwEBo1YAKzQ0AP//AC4AAAOEBesGJgDsAAABBwB1AND/6wALtgEGBQEBi1YAKzQA//8ALv/rA7METwYGAFcAAP//AC8AAAHlBcYGBgBNAAD//wAvAAACuAXGBiYAjQAAAQcAav9m//4ADbcCARkDAQG1VgArNDQA////E/5GAdYFxgYGAE4AAP//ADAAAARYBeoGJgDxAAABBwB1ATr/6gALtgMOAwEBilYAKzQA////qv5HA+wF2AYmAF0AAAEGAKFYAAALtgIeAQEBklYAKzQA//8AwwAAB0EHNwYmADsAAAEHAEQCSwE3AAu2BBgVAQFhVgArNAD//wCAAAAF/gYABiYAWwAAAQcARAGKAAAAC7YEGBUBAaBWACs0AP//AMMAAAdBBzcGJgA7AAABBwB1AtYBNwALtgQWAQEBYVYAKzQA//8AgAAABf4GAAYmAFsAAAEHAHUCFgAAAAu2BBYBAQGgVgArNAD//wDDAAAHQQb/BiYAOwAAAQcAagIWATcADbcFBCsVAQF4VgArNDQA//8AgAAABf4FyAYmAFsAAAEHAGoBVgAAAA23BQQrFQEBt1YAKzQ0AP//AKgAAAUzBzYGJgA9AAABBwBEATMBNgALtgELAgEBYFYAKzQA////qv5HA+wGAAYmAF0AAAEHAEQAkwAAAAu2AhsBAQGgVgArNAD//wCsBCIBigYABgYACwAA//8AyQQTAqcGAAYGAAYAAP//AET/8gP0BbAEJgAFAAAABwAFAgAAAP///wn+RwLIBdgGJgCcAAABBwCf/0b/1wALtgEYAAEBgFYAKzQA//8AiQQVAeEGAAYGAYUAAP//ADsAAAa3BzcGJgAxAAABBwB1AscBNwALtgMRAAEBYVYAKzQA//8AHgAABmAGAAYmAFEAAAEHAHUCpQAAAAu2AzMDAQGgVgArNAD///+v/mkEiwWwBiYAJQAAAQcApwF1AAEAELUEAxEFAQG4/7WwVgArNDT//wAx/mkDxwRQBiYARQAAAQcApwDCAAEAELUDAj4xAQG4/8mwVgArNDT//wA7AAAEsQdCBiYAKQAAAQcARAE2AUIAC7YEEgcBAWxWACs0AP//AEQAAAVvB0IGJgDcAAABBwBEAaQBQgALtgEMAQEBbFYAKzQA//8ARf/rA9oGAAYmAEkAAAEHAEQAvgAAAAu2AS4LAQGMVgArNAD//wAwAAAEOAXrBiYA8AAAAQcARADe/+sAC7YBDAEBAYtWACs0AP//AIUAAAWQBbAGBgC5AAD//wBO/icFJAQ8BgYAzQAA//8ArQAABUsG5wYmARkAAAEHAKwERQD5AA23AwIVEwEBLVYAKzQ0AP//AIUAAAQ9Bb8GJgEaAAABBwCsA67/0QANtwMCGRcBAXtWACs0NAD//wBG/kcIWQRRBCYAUwAAAAcAXQRtAAD//wBz/kcJQwXHBCYAMwAAAAcAXQVXAAD//wAl/k8EjgXGBiYA2wAAAQcCYQGC/7YAC7YCQioAAGRWACs0AP//ACD+UAOkBFAGJgDvAAABBwJhAS3/twALtgI/KQAAZVYAKzQA//8AcP5PBPkFxwYmACcAAAEHAmEByv+2AAu2ASsFAABkVgArNAD//wBG/k8D4gRRBiYARwAAAQcCYQFF/7YAC7YBKwkAAGRWACs0AP//AKgAAAUzBbAGBgA9AAD//wCF/l8EGwQ6BgYAvQAA//8ASQAAAgIFsAYGAC0AAP///6sAAAd1BxoGJgDaAAABBwChAiwBQgALtgUdDQEBXlYAKzQA////pwAABg4FwwYmAO4AAAEHAKEBXf/rAAu2BR0NAQF9VgArNAD//wBJAAACAgWwBgYALQAA////rwAABIsHDwYmACUAAAEHAKEBLQE3AAu2AxMHAQFTVgArNAD//wAx/+kD6wXYBiYARQAAAQcAoQCgAAAAC7YCQA8BAX5WACs0AP///68AAASLBv8GJgAlAAABBwBqATMBNwANtwQDIwcBAXhWACs0NAD//wAx/+kD+AXIBiYARQAAAQcAagCmAAAADbcDAlAPAQGjVgArNDQA////gwAAB3kFsAYGAIEAAP//ABP/6gZXBFEGBgCGAAD//wA7AAAEsQcaBiYAKQAAAQcAoQD8AUIAC7YEFQcBAV5WACs0AP//AEX/6wPaBdgGJgBJAAABBwChAIQAAAALtgExCwEBflYAKzQA//8AUv/pBRoG3AYmAVgAAAEHAGoBCQEUAA23AgFCAAEBQVYAKzQ0AP//AD//6gPNBFEGBgCdAAD//wA//+oD4gXJBiYAnQAAAQcAagCQAAEADbcCAUAAAQGiVgArNDQA////qwAAB3UHCgYmANoAAAEHAGoCMgFCAA23BgUtDQEBg1YAKzQ0AP///6cAAAYOBbMGJgDuAAABBwBqAWL/6wANtwYFLQ0BAaJWACs0NAD//wAl/+oEjgcfBiYA2wAAAQcAagD4AVcADbcDAlQVAQGEVgArNDQA//8AIP/qA7oFxwYmAO8AAAEGAGpo/wANtwMCURQBAaNWACs0NAD//wBEAAAFbwbvBiYA3AAAAQcAcAFBAUoAC7YBDAgBAbFWACs0AP//ADAAAAQ4BZgGJgDwAAABBgBwe/MAC7YBDAgBAdBWACs0AP//AEQAAAVvBwoGJgDcAAABBwBqAXABQgANtwIBHwEBAYNWACs0NAD//wAwAAAEOAWzBiYA8AAAAQcAagCq/+sADbcCAR8BAQGiVgArNDQA//8Ac//pBRAHAQYmADMAAAEHAGoBVQE5AA23AwJBEQEBZlYAKzQ0AP//AEb/6QQXBcgGJgBTAAABBwBqAJMAAAANtwMCQQYBAaNWACs0NAD//wBn/+kE/gXHBgYBFwAA//8AQ//oBBYEUgYGARgAAP//AGf/6QT+BwUGJgEXAAABBwBqAWIBPQANtwQDTwABAWpWACs0NAD//wBD/+gEFgXKBiYBGAAAAQcAagCQAAIADbcEA0EAAQGlVgArNDQA//8Adv/pBP8HIAYmAOcAAAEHAGoBTAFYAA23AwJCHgEBhVYAKzQ0AP//ADL/6APWBcgGJgD/AAABBwBqAIQAAAANtwMCQQkBAaNWACs0NAD//wCU/+gFQAbvBiYA3gAAAQcAcADsAUoAC7YCGxgBAbFWACs0AP///6r+RwPsBa0GJgBdAAABBgBwLwgAC7YCGxgBAeVWACs0AP//AJT/6AVABwoGJgDeAAABBwBqARwBQgANtwMCLgEBAYNWACs0NAD///+q/kcD7AXIBiYAXQAAAQYAal4AAA23AwIuAQEBt1YAKzQ0AP//AJT/6AVAB0EGJgDeAAABBwCmAV0BQgANtwMCGQEBAWJWACs0NAD///+q/kcEXQX/BiYAXQAAAQcApgCfAAAADbcDAhkBAQGWVgArNDQA//8AywAABToHCgYmAOEAAAEHAGoBRAFCAA23AwIvFgEBg1YAKzQ0AP//AHkAAAP1BbMGJgD5AAABBgBqausADbcDAi0DAQGiVgArNDQA//8ARP//BpcHCgYmAOUAAAEHAGoCCAFCAA23AwIyHAEBg1YAKzQ0AP//ADH//wWqBbMGJgD9AAABBwBqAWr/6wANtwMCMhwBAaJWACs0NAD//wBH/+gEdgYABgYASAAA////r/6gBIsFsAYmACUAAAEHAK0E3QAAAA60AxEFAQG4/3WwVgArNP//ADH+oAPHBFAGJgBFAAABBwCtBCoAAAAOtAI+MQEBuP+JsFYAKzT///+vAAAEiwe6BiYAJQAAAQcAqwUBAUcAC7YDDwcBAXFWACs0AP//ADH/6QPHBoMGJgBFAAABBwCrBHQAEAALtgI8DwEBnFYAKzQA////rwAABewHxAYmACUAAAEHAkcA8QEvAA23BAMSBwEBYVYAKzQ0AP//ADH/6QVeBo0GJgBFAAABBgJHY/gADbcDAkEPAQGMVgArNDQA////rwAABIsHwAYmACUAAAEHAkgA9wE9AA23BAMQBwEBXFYAKzQ0AP//ADH/6QP9BokGJgBFAAABBgJIagYADbcDAj0PAQGHVgArNDQA////rwAABWsH6wYmACUAAAEHAkkA8gEcAA23BAMTAwEBUFYAKzQ0AP//ADH/6QTeBrQGJgBFAAABBgJJZeUADbcDAkAPAQF7VgArNDQA////rwAABIsH2gYmACUAAAEHAkoA7gEGAA23BAMQBwEBOlYAKzQ0AP//ADH/6QP4BqMGJgBFAAABBgJKYc8ADbcDAj0PAQFlVgArNDQA////r/6gBIsHNwYmACUAAAAnAJ4A+QE3AQcArQTdAAAAF7QEGgUBAbj/dbdWAxEHAQFsVgArNCs0AP//ADH+oAPRBgAGJgBFAAAAJgCebAABBwCtBCoAAAAXtANHMQEBuP+Jt1YCPg8BAZdWACs0KzQA////rwAABIsHuAYmACUAAAEHAkwBFwEtAA23BAMTBwEBXFYAKzQ0AP//ADH/6QPmBoEGJgBFAAABBwJMAIr/9gANtwMCQA8BAYdWACs0NAD///+vAAAEiwe4BiYAJQAAAQcCRQEXAS0ADbcEAxMHAQFcVgArNDQA//8AMf/pA+YGgQYmAEUAAAEHAkUAiv/2AA23AwJADwEBh1YAKzQ0AP///68AAASLCEIGJgAlAAABBwJNAR4BPgANtwQDEwcBAW5WACs0NAD//wAx/+kD1wcLBiYARQAAAQcCTQCRAAcADbcDAkAPAQGZVgArNDQA////rwAABJMIFQYmACUAAAEHAmABHwFGAA23BAMTBwEBb1YAKzQ0AP//ADH/6QQGBt4GJgBFAAABBwJgAJIADwANtwMCQA8BAZpWACs0NAD///+v/qAEiwcPBiYAJQAAACcAoQEtATcBBwCtBN0AAAAXtAQgBQEBuP91t1YDEwcBAVNWACs0KzQA//8AMf6gA+sF2AYmAEUAAAAnAKEAoAAAAQcArQQqAAAAF7QDTTEBAbj/ibdWAkAPAQF+VgArNCs0AP//ADv+qgSxBbAGJgApAAABBwCtBJ0ACgAOtAQTAgEBuP9/sFYAKzT//wBF/qAD2gRRBiYASQAAAQcArQR0AAAADrQBLwABAbj/ibBWACs0//8AOwAABLEHxQYmACkAAAEHAKsEzwFSAAu2BBEHAQF8VgArNAD//wBF/+sD2gaDBiYASQAAAQcAqwRXABAAC7YBLQsBAZxWACs0AP//ADsAAASxBy0GJgApAAABBwClAM8BRgALtgQeBwEBdlYAKzQA//8ARf/rBAcF6wYmAEkAAAEGAKVXBAALtgE6CwEBllYAKzQA//8AOwAABboHzwYmACkAAAEHAkcAvwE6AA23BQQUBwEBbFYAKzQ0AP//AEX/6wVCBo0GJgBJAAABBgJHR/gADbcCATALAQGMVgArNDQA//8AOwAABLEHywYmACkAAAEHAkgAxQFIAA23BQQSBwEBZ1YAKzQ0AP//AEX/6wPhBokGJgBJAAABBgJITgYADbcCAS4LAQGHVgArNDQA//8AOwAABToH9gYmACkAAAEHAkkAwQEnAA23BQQVBwEBW1YAKzQ0AP//AEX/6wTCBrQGJgBJAAABBgJJSeUADbcCATELAQF7VgArNDQA//8AOwAABLEH5QYmACkAAAEHAkoAvQERAA23BQQSBwEBRVYAKzQ0AP//AEX/6wPcBqMGJgBJAAABBgJKRc8ADbcCAS4LAQFlVgArNDQA//8AO/6qBLEHQgYmACkAAAAnAJ4AxwFCAQcArQSdAAoAF7QFHAIBAbj/f7dWBBMHAQF3VgArNCs0AP//AEX+oAPaBgAGJgBJAAAAJgCeTwABBwCtBHQAAAAXtAI4AAEBuP+Jt1YBLwsBAZdWACs0KzQA//8ASQAAArkHxQYmAC0AAAEHAKsDhQFSAAu2AQUDAQF8VgArNAD//wAvAAACZwaBBiYAjQAAAQcAqwMzAA4AC7YBBQMBAa5WACs0AP//AA3+qQICBbAGJgAtAAABBwCtA1MACQAOtAEHAgEBuP9+sFYAKzT////w/qoB5QXGBiYATQAAAQcArQM2AAoADrQCEwIBAbj/f7BWACs0//8Ac/6gBRAFxwYmADMAAAEHAK0E8QAAAA60Ai8GAQG4/4mwVgArNP//AEb+nwQXBFEGJgBTAAABBwCtBIT//wAOtAIvEQEBuP+IsFYAKzT//wBz/+kFEAe8BiYAMwAAAQcAqwUjAUkAC7YCLREBAV9WACs0AP//AEb/6QQXBoMGJgBTAAABBwCrBGEAEAALtgItBgEBnFYAKzQA//8Ac//pBg4HxgYmADMAAAEHAkcBEwExAA23AwIwEQEBT1YAKzQ0AP//AEb/6QVMBo0GJgBTAAABBgJHUfgADbcDAjAGAQGMVgArNDQA//8Ac//pBRAHwgYmADMAAAEHAkgBGQE/AA23AwIuEQEBSlYAKzQ0AP//AEb/6QQXBokGJgBTAAABBgJIVwYADbcDAi4GAQGHVgArNDQA//8Ac//pBY0H7QYmADMAAAEHAkkBFAEeAA23AwIxEQEBPlYAKzQ0AP//AEb/6QTMBrQGJgBTAAABBgJJU+UADbcDAjEGAQF7VgArNDQA//8Ac//pBRAH3AYmADMAAAEHAkoBEQEIAA23AwIuEQEBKFYAKzQ0AP//AEb/6QQXBqMGJgBTAAABBgJKT88ADbcDAi4GAQFlVgArNDQA//8Ac/6gBRAHOQYmADMAAAAnAJ4BGwE5AQcArQTxAAAAF7QDOAYBAbj/ibdWAi8RAQFaVgArNCs0AP//AEb+nwQXBgAGJgBTAAAAJgCeWQABBwCtBIT//wAXtAM4EQEBuP+It1YCLwYBAZdWACs0KzQA//8AZv/pBhQHMQYmAJgAAAEHAHUCEAExAAu2AzocAQFHVgArNAD//wBD/+kE9QYABiYAmQAAAQcAdQFmAAAAC7YDNhABAYxWACs0AP//AGb/6QYUBzEGJgCYAAABBwBEAYQBMQALtgM8HAEBR1YAKzQA//8AQ//pBPUGAAYmAJkAAAEHAEQA2gAAAAu2AzgQAQGMVgArNAD//wBm/+kGFAe0BiYAmAAAAQcAqwUeAUEAC7YDOxwBAVdWACs0AP//AEP/6QT1BoMGJgCZAAABBwCrBHQAEAALtgM3EAEBnFYAKzQA//8AZv/pBhQHHAYmAJgAAAEHAKUBHQE1AAu2A0gcAQFRVgArNAD//wBD/+kE9QXrBiYAmQAAAQYApXMEAAu2A0QQAQGWVgArNAD//wBm/qAGFAY6BiYAmAAAAQcArQTiAAAADrQDPRABAbj/ibBWACs0//8AQ/6WBPUEsgYmAJkAAAEHAK0Edv/2AA60AzkbAQG4/3+wVgArNP//AGP+oAUcBbAGJgA5AAABBwCtBMkAAAAOtAEZBgEBuP+JsFYAKzT//wBb/qAEFAQ6BiYAWQAAAQcArQQxAAAADrQCHwsBAbj/ibBWACs0//8AY//oBRwHugYmADkAAAEHAKsE/AFHAAu2ARcAAQFxVgArNAD//wBb/+gEFAaDBiYAWQAAAQcAqwRlABAAC7YCHREBAbBWACs0AP//AGP/6QaKB0IGJgCaAAABBwB1AgoBQgALtgIgCgEBbFYAKzQA//8AW//oBUcF6wYmAJsAAAEHAHUBYP/rAAu2AyYbAQGLVgArNAD//wBj/+kGigdCBiYAmgAAAQcARAF/AUIAC7YCIgoBAWxWACs0AP//AFv/6AVHBesGJgCbAAABBwBEANX/6wALtgMoGwEBi1YAKzQA//8AY//pBooHxQYmAJoAAAEHAKsFGAFSAAu2AiEKAQF8VgArNAD//wBb/+gFRwZuBiYAmwAAAQcAqwRu//sAC7YDJxsBAZtWACs0AP//AGP/6QaKBy0GJgCaAAABBwClARcBRgALtgIuFQEBdlYAKzQA//8AW//oBUcF1gYmAJsAAAEGAKVu7wALtgM0GwEBlVYAKzQA//8AY/6XBooGAwYmAJoAAAEHAK0E4f/3AA60AiMQAQG4/4CwVgArNP//AFv+oAVHBJEGJgCbAAABBwCtBGUAAAAOtAMpFQEBuP+JsFYAKzT//wCo/qEFMwWwBiYAPQAAAQcArQSYAAEADrQBDAYBAbj/drBWACs0////qv4CA+wEOgYmAF0AAAEHAK0E2v9iAA60AiIIAAC4/7mwVgArNP//AKgAAAUzB7kGJgA9AAABBwCrBMwBRgALtgEKAgEBcFYAKzQA////qv5HA+wGgwYmAF0AAAEHAKsELAAQAAu2AhoBAQGwVgArNAD//wCoAAAFMwchBiYAPQAAAQcApQDMAToAC7YBFwgBAWpWACs0AP///6r+RwPsBesGJgBdAAABBgClKwQAC7YCJxgBAapWACs0AP//AAD+ywUSBgAEJgBIAAAAJwI2AfkCRgEHAEMAf/9jABe0BDcWAQG4/3e3VgMyCwEBg1YAKzQrNAD//wCp/pkFCQWwBiYAOAAAAQcCYQIvAAAAC7YCCwIAAJpWACs0AP//AGD+mQPpBDoGJgD2AAABBwJhAbkAAAALtgILAgAAmlYAKzQA//8Ay/6ZBToFsAYmAOEAAAEHAmEC5wAAAAu2Ah0ZAQCaVgArNAD//wB5/pkD9QQ8BiYA+QAAAQcCYQHnAAAAC7YCGwIBAJpWACs0AP//AET+mQSlBbAGJgCxAAABBwJhAOkAAAALtgEJBAAAmlYAKzQA//8ALv6ZA4QEOgYmAOwAAAEHAmEAzwAAAAu2AQkEAACaVgArNAD//wCI/lMFxQXGBiYBTAAAAQcCYQLj/7oAC7YCOgoAAGtWACs0AP//AAT+VgRJBFEGJgFNAAABBwJhAeX/vQALtgI5CQAAa1YAKzQA//8AIAAAA9oGAAYGAEwAAAACACz//wR8BbAAGAAcABpADBwbGAAACwwCcg4LCAA/MysSOS8zzDIwMUEFHgIHDgMnIRMzAwUyNjY3NiYmJyUBByE3AVoBdX/FaQwJXZW7aP3k/L3iAUpZl2IMCjVwT/5zAXQb/ZUbA18BA2K4hm6mcDgBBbD67QFEgVxRcj0DAQImmJgAAAIALP//BHwFsAAYABwAGUALHBsYAAALDAIOCwgAPzM/EjkvM8wyMDFBBR4CBw4DJyETMwMFMjY2NzYmJiclAQchNwFaAXV/xWkMCV2Vu2j95Py94gFKWZdiDAo1cE/+cwF0G/2VGwNfAQNiuIZupnA4AQWw+u0BRIFcUXI9AwECJpiYAAIAEQAABKUFsAAFAAkAFkAKBgcHBAIFAnIECAA/KzISOS8zMDFBByEDIxMBByE3BKUc/VjhvP0BVhv9lRsFsJ767gWw/ZOYmAAAAv/nAAADhAQ6AAUACQAWQAoJCAgEAgUGcgQKAD8rMhI5LzMwMUEHIQMjEwEHITcDhBz+HKG1vAGEG/2UGwQ6mfxfBDr+PJiYAAAEAFgAAAV+BbAAAwAJAA0AEQArQBUMCwsHBwYQEQYRBhECCQMCcgoCCHIAKzIrMhE5OS8vETMRMxI5ETMwMUEDIxMhASEnMwEDATcBAQchNwIR/L39BCn9EP6uAfACXML+XX8B+/5HG/2VGwWw+lAFsPzfoAKB+lACsp/8rwTOmJgABAA6AAAEMwYAAAMACQANABEALUAXBAZyDAsLBwcGEBEGEQYRAgMAcgoCCnIAKzIrETk5Ly8RMxEzEjkRMyswMUEBIwkCITczAQMBNwEDByE3Afn+9rUBCwLu/ev+6AbHAXt7/up2AWnXG/2VGwYA+gAGAP46/buaAav7xgIMm/1ZBViYmAACAKgAAAUzBbAACAAMAB1ADwwBBAcDCwsGAwgCcgYIcgArKzIROS8XOTMwMUETATMBAyMTAQEHITcBde8B7uH9c128Yf66AvIb/ZUbBbD9JgLa/Gb96gIrA4X88JiYAAAEAF7+XwQbBDoAAwAIAA0AEQAXQAsREBACBQ0GcgIOcgArKzISOS8zMDFlAyMTNwEzASMDEwcjAwEHITcCAmC1YGoBo8H9v38lkQRzywJgG/2UG4T92wIlgQM1+8YEOvy17wQ6/FKYmAAAAv/UAAAFKwWwAAsADwAfQA8PBwUBBAoDDg4JBQMAAnIAKzIvMzkvFzkSOTMwMUETATMBASMBASMJAgchNwGe/AGq5/3JAVPS/v3+S+kCRP62AwAb/ZUbBbD90wIt/Sb9KgI4/cgC6ALI/YWYmAAC/8UAAAP1BDoACwAPAB9ADw8HBQEKBAMODgkFAwAGcgArMi8zOS8XORI5MzAxQRMBMwEBIwMBIwEDAQchNwFJpwEm3/5OAQjFs/7P3QG+/wKoG/2VGwQ6/ncBif3h/eUBlf5rAi0CDf4+mJgA//8AKf/qA+AETwYGAL8AAP///9cAAASkBbAGJgAqAAABBwI2/0T+fQAOtAMOAgIAuAEIsFYAKzT//wCYAosF1gMjBgYBggAA//8AGAAABCcFxwYGABYAAP//ADX/6gQaBccGBgAXAAD//wAFAAAEHgWwBgYAGAAA//8Acv/oBGsFsAYGABkAAP//AIH/6QQGBbMEBgAaFAD//wBU/+kEPwXHBAYAHBQA//8AlP/9BBAFxwQGAB0AAP//AH7/6AQ0BcgEBgAUFAD//wB0/+sFBQdXBiYAKwAAAQcAdQH5AVcAC7YBLBABAW1WACs0AP//AAP+UQQpBgAGJgBLAAABBwB1AU0AAAALtgM/GgEBjFYAKzQA//8AOwAABXgHNwYmADIAAAEHAEQBnAE3AAu2AQwJAQFhVgArNAD//wAgAAAD2gYABiYAUgAAAQcARADSAAAAC7YCHgMBAaBWACs0AP///68AAASLByAGJgAlAAABBwCsBIABMgANtwQDDgMBAWZWACs0NAD//wAx/+kDxwXpBiYARQAAAQcArAPz//sADbcDAjwPAQGRVgArNDQA//8AOwAABLEHKwYmACkAAAEHAKwETgE9AA23BQQRBwEBcVYAKzQ0AP//AEX/6wPaBekGJgBJAAABBwCsA9f/+wANtwIBLQsBAZFWACs0NAD////gAAACigcrBiYALQAAAQcArAMFAT0ADbcCAQUDAQFxVgArNDQA////jQAAAjcF5wYmAI0AAAEHAKwCsv/5AA23AgEFAwEBo1YAKzQ0AP//AHP/6QUQByIGJgAzAAABBwCsBKIBNAANtwMCLREBAVRWACs0NAD//wBG/+kEFwXpBiYAUwAAAQcArAPg//sADbcDAi0GAQGRVgArNDQA//8AOwAABLwHIAYmADYAAAEHAKwERAEyAA23AwIfAAEBZlYAKzQ0AP//ACAAAALRBekGJgBWAAABBwCsA0r/+wANtwMCGAMBAaVWACs0NAD//wBj/+gFHAcgBiYAOQAAAQcArAR7ATIADbcCARcLAQFmVgArNDQA//8AW//oBBQF6QYmAFkAAAEHAKwD5P/7AA23AwIdEQEBpVYAKzQ0AP///7EAAAVBBj4EJgDQZAAABwCu/o7/////ADv+qgSaBbAGJgAmAAABBwCtBJcACgAOtAI0GwEBuP9/sFYAKzT//wAf/pYEAgYABiYARgAAAQcArQSF//YADrQDMwQBAbj/a7BWACs0//8AO/6qBM8FsAYmACgAAAEHAK0ElwAKAA60AiIdAQG4/3+wVgArNP//AEf+oAR2BgAGJgBIAAABBwCtBJoAAAAOtAMzFgEBuP+JsFYAKzT//wA7/gYEzwWwBiYAKAAAAQcBygEf/qgADrQCKB0BAbj/l7BWACs0//8AR/38BHYGAAYmAEgAAAEHAcoBIf6eAA60AzkWAQG4/6GwVgArNP//ADv+qgV3BbAGJgAsAAABBwCtBPkACgAOtAMPCgEBuP9/sFYAKzT//wAg/qoD2gYABiYATAAAAQcArQR/AAoADrQCHgIBAbj/f7BWACs0//8AOwAABVEHMQYmAC8AAAEHAHUBsQExAAu2Aw4DAQFbVgArNAD//wAgAAAEIwdBBiYATwAAAQcAdQF9AUEAC7YDDgMBABtWACs0AP//ADv++gVRBbAGJgAvAAABBwCtBNMAWgAOtAMRAgEBuP/PsFYAKzT//wAg/ucEGwYABiYATwAAAQcArQRQAEcADrQDEQIBAbj/vLBWACs0//8AO/6qA7EFsAYmADAAAAEHAK0EngAKAA60AgsCAQG4/3+wVgArNP////D+qgHvBgAGJgBQAAABBwCtAzYACgAOtAEHAgEBuP9/sFYAKzT//wA7/qoGtwWwBiYAMQAAAQcArQWnAAoADrQDFAYBAbj/f7BWACs0//8AHv6qBmAEUQYmAFEAAAEHAK0FqwAKAA60AzYCAQG4/3+wVgArNP//ADv+qgV4BbAGJgAyAAABBwCtBP8ACgAOtAENAgEBuP9/sFYAKzT//wAg/qoD2gRRBiYAUgAAAQcArQRnAAoADrQCHwIBAbj/f7BWACs0//8Ac//pBRAH6AYmADMAAAEHAkYFIAFUAA23AwIxEQEBWlYAKzQ0AP//ADsAAATvB0IGJgA0AAABBwB1AbUBQgALtgEYDwEBbFYAKzQA////1/5gBDgF9gYmAFQAAAEHAHUBkv/2AAu2AzADAQGWVgArNAD//wA7/qoEvAWwBiYANgAAAQcArQSVAAoADrQCIRgBAbj/f7BWACs0////7v6rAtEEVAYmAFYAAAEHAK0DNAALAA60AhoCAQG4/4CwVgArNP//ACn+nwSjBcYGJgA3AAABBwCtBKT//wAOtAE9KwEBuP+IsFYAKzT//wAu/pYDswRPBiYAVwAAAQcArQRt//YADrQBOSkBAbj/f7BWACs0//8Aqf6gBQkFsAYmADgAAAEHAK0ElwAAAA60AgsCAQG4/3WwVgArNP//AEP+oAKVBUEGJgBYAAABBwCtA/sAAAAOtAIZEQEBuP+JsFYAKzT//wBj/+gFHAfmBiYAOQAAAQcCRgT5AVIADbcCARsAAQFsVgArNDQA//8ApQAABWEHLQYmADoAAAEHAKUA4AFGAAu2AhgJAQF2VgArNAD//wBuAAAD7gXhBiYAWgAAAQYApRv6AAu2AhgJAQGgVgArNAD//wCl/qoFYQWwBiYAOgAAAQcArQTKAAoADrQCDQQBAbj/f7BWACs0//8Abv6qA+4EOgYmAFoAAAEHAK0EOAAKAA60Ag0EAQG4/3+wVgArNP//AMP+qgdBBbAGJgA7AAABBwCtBc0ACgAOtAQZEwEBuP9/sFYAKzT//wCA/qoF/gQ6BiYAWwAAAQcArQUsAAoADrQEGRMBAbj/f7BWACs0////7P6qBM4FsAYmAD4AAAEHAK0ElwAKAA60AxECAQG4/3+wVgArNP///+7+qgPPBDoGJgBeAAABBwCtBEMACgAOtAMRAgEBuP9/sFYAKzT///8M/+kFVgXWBCYAM0YAAQcBcf4Z//8ADbcDAi4RAAASVgArNDQA////pgAAA+MFGwYmAkMAAAAHAK7/qv7c////4gAABCwFHgQmAjg8AAAHAK7+v/7f/////QAABNcFGwQmAfQ8AAAHAK7+2v7c//8AAgAAAeYFHgQmAfM8AAAHAK7+3/7f//8AHv/tBFAFGwQmAe0KAAAHAK7++/7c////mgAABKEFGwQmAeM8AAAHAK7+d/7c//8AGAAABHQFGgQmAgMKAAAHAK7/Ev7b////pgAAA+MEjQYGAkMAAP//AB7//wPjBI0GBgJCAAD//wAeAAAD8ASNBgYCOAAA////3QAABA4EjQYGAeIAAP//AB4AAASbBI0GBgH0AAD//wArAAABqgSNBgYB8wAA//8AHgAABIAEjQYGAfEAAP//AB4AAAWxBI0GBgHvAAD//wAeAAAEmwSNBgYB7gAA//8ATP/tBEYEoAYGAe0AAP//AB4AAAQmBI0GBgHsAAD//wBuAAAEQgSNBgYB6AAA//8AdQAABGUEjgYGAeMAAP///7cAAARuBI0GBgHkAAD//wArAAACtQXmBiYB8wAAAQcAav9jAB4ADbcCAQ0DAQGEVgArNDQA//8AdQAABGUF5gYmAeMAAAEGAGp8HgANtwQDFwkBAYNWACs0NAD//wAeAAAD8AXmBiYCOAAAAQYAan8eAA23BQQZBwEBg1YAKzQ0AP//AB4AAAPjBh4GJgH6AAABBwB1AT0AHgALtgIIAwEBg1YAKzQA//8AEv/uA+sEngYGAekAAP//ACsAAAGqBI0GBgHzAAD//wArAAACtQXmBiYB8wAAAQcAav9jAB4ADbcCAQ0DAQGEVgArNDQA////9v/tA5cEjQYGAfIAAP//AB4AAASABh4GJgHxAAABBwB1AS0AHgALtgMOAwEBhFYAKzQA//8AWv/pBFQF9gYmAhEAAAEGAKF1HgALtgIdFwEBhFYAKzQA////pgAAA+MEjQYGAkMAAP//AB7//wPjBI0GBgJCAAD//wAeAAADzQSNBgYB+gAA//8AHgAAA/AEjQYGAjgAAP//ACAAAASiBfYGJgIOAAABBwChANQAHgALtgMRCAEBhFYAKzQA//8AHgAABbEEjQYGAe8AAP//AB4AAASbBI0GBgH0AAD//wBM/+0ERgSgBgYB7QAA//8AHgAABIYEjQYGAf8AAP//AB4AAAQmBI0GBgHsAAD//wBI/+0EMwSgBgYCQQAA//8AbgAABEIEjQYGAegAAP///7cAAARuBI0GBgHkAAAAAwAS/k8D2ASfAB4APgBCAChAEx8BAgI+PhU/NDRAMCoLcg8LFX4APzPMK8zNMxI5EjkvMxI5OTAxQSc3FzI2Njc2JiYnJgYGBwc+AxceAwcOAycXHgMHDgMnLgM3Mx4CFxY2Njc2LgInJxMDIxMCBJoVgD98WAkIQ2s2PGxPDbUJU3+YTkmQdUMFBFqKntaCRY94RgUFXZCqVE6ObDwDsgE5YT1AiGMKBx8/VS6Wi1m1WQIrAXQBIFBJQUsfAQEhSz4BVXtQJQEBIkh2VlZ5SiNGAQEeQ3BUYIVSJQIBKlJ+VkJPJAECIlRKNkkrFAEB/kf9/wIBAAAEAB7+mQSbBI0AAwAHAAsADwAdQA0DAgIGCwd9Dw4KCgYSAD8zEM4zPzMSOS8zMDFBByE3EwMjEyEDIxMTAyMTA60b/XIbfsq1ywOyy7TKo1q1WgKLmZkCAvtzBI37cwSN/A39/wIBAAIASP5VBDMEoAAnACsAGEALGRB+KCQkKioFC3IAKzIvMhEzPzMwMUE3DgInLgM3Nz4DFx4CFyMuAicmDgIHBwYeAhcWNjYHAyMTAzG0GZHXgHOjYiQMDg9bksV6e7JjBrQDMmVQV4ZeOQsOCQkvYlNWgVbdWrRZAXgBgLJaAwJcm8JoZnHJmFUDA2GyeU1tOwMCP3GQTmhDiXRJAwM2btH9/wIBAP//AHUAAARlBI4GBgHjAAD//wAu/k8FVwSfBiYCJwAAAAcCYQKZ/7b//wAgAAAEogXLBiYCDgAAAQcAcACqACYAC7YDDggBAbBWACs0AP//AFr/6QRUBcsGJgIRAAABBgBwSyYAC7YCGhcBAbBWACs0AP//AFIAAATlBI0GBgIBAAD//wAr/+0FcQSNBCYB8wAAAAcB8gHaAAD///+aAAAGAAYABiYChAAAAQcAdQKXAAAAC7YGGQ8BAU1WACs0AP////T/xgSjBh4GJgKGAAABBwB1AYIAHgALtgMwEQEBW1YAKzQA//8AEv38A+sEngYmAekAAAAHAcoA4v6e//8AlAAABikGHgYmAeUAAAEHAEQBpQAeAAu2BBgKAQFrVgArNAD//wCUAAAGKQYeBiYB5QAAAQcAdQIxAB4AC7YEFgoBAWtWACs0AP//AJQAAAYpBeYGJgHlAAABBwBqAXEAHgANtwUEHwoBAYRWACs0NAD//wB1AAAEZQYeBiYB4wAAAAcARACwAB7///+v/k4EiwWwBiYAJQAAAQcApAFmAAAAC7YDDgUBATlWACs0AP//ADH+TgPHBFAGJgBFAAABBwCkALQAAAALtgI7MQAATVYAKzQA//8AO/5YBLEFsAYmACkAAAEHAKQBJwAKAAu2BBACAABDVgArNAD//wBF/k4D2gRRBiYASQAAAQcApAD+AAAAC7YBLAAAAE1WACs0AP///6b+TgPjBI0GJgJDAAAABwCkAQsAAP//AB7+VgPwBI0GJgI4AAAABwCkANcACP////D+qgGfBDoGJgCNAAABBwCtAzYACgAOtAEHAgEBuP9/sFYAKzQAAAAAAA8AugADAAEECQAAAF4AAAADAAEECQABAAwAXgADAAEECQACAAwAagADAAEECQADABoAdgADAAEECQAEABoAdgADAAEECQAFACYAkAADAAEECQAGABoAtgADAAEECQAHAEAA0AADAAEECQAIAAwBEAADAAEECQAJACYBHAADAAEECQALABQBQgADAAEECQAMABQBQgADAAEECQANAFwBVgADAAEECQAOAFQBsgADAAEECQAZAAwAXgBDAG8AcAB5AHIAaQBnAGgAdAAgADIAMAAxADEAIABHAG8AbwBnAGwAZQAgAEkAbgBjAC4AIABBAGwAbAAgAFIAaQBnAGgAdABzACAAUgBlAHMAZQByAHYAZQBkAC4AUgBvAGIAbwB0AG8ASQB0AGEAbABpAGMAUgBvAGIAbwB0AG8AIABJAHQAYQBsAGkAYwBWAGUAcgBzAGkAbwBuACAAMwAuADAAMAA1ADsAIAAyADAAMgAyAFIAbwBiAG8AdABvAC0ASQB0AGEAbABp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As//8wLR//MC0//zAuH/8wLj//MC5f/zAuf/8wMJ//MDC//zAw3/8wM+//MDm//zA6j/8wPO//MD0f/zA/7/8wQB//MEHP/zBB7/8wQg//MEW//zBF3/8wRf//MEYf/zBGP/8wRl//MEZ//zBGn/8wRr//MEbf/zBG//8wRx//MEsP/zBMn/8wBAAEf/7ABI/+wASf/sAEv/7ABV/+wAlP/sAJn/7AC7/+wAyP/sAMn/7AD3/+wBA//sAR7/7AEi/+wBQv/sAWD/7AFh/+wBa//sArL/7AKz/+wCtP/sArX/7AK2/+wCzv/sAtD/7ALS/+wC1P/sAtb/7ALY/+wC2v/sAtz/7ALe/+wC4P/sAuL/7ALk/+wC5v/sAuj/7AOv/+wD1f/sA9n/7APc/+wD9//sA/3/7AQC/+wEEP/sBBL/7AQT/+wEH//sBC7/7ARI/+wESv/sBEz/7ARO/+wEUP/sBFL/7ARU/+wEVv/sBGr/7ARs/+wEbv/sBHL/7ASt/+wEuv/sBLz/7ABAACf/5gAr/+YAM//mADX/5gCD/+YAk//mAJj/5gCz/+YAuP/CAMQAEADT/+YBCP/mARf/5gEb/+YBHf/mAR//5gEh/+YBQf/mAWr/5gJV/+YCVv/mAlj/5gJZ/+YCl//mAqH/5gKi/+YCo//mAqT/5gKl/+YCzf/mAs//5gLR/+YC0//mAuH/5gLj/+YC5f/mAuf/5gMJ/+YDC//mAw3/5gM+/+YDm//mA6j/5gPO/+YD0f/mA/7/5gQB/+YEHP/mBB7/5gQg/+YEW//mBF3/5gRf/+YEYf/mBGP/5gRl/+YEZ//mBGn/5gRr/+YEbf/mBG//5gRx/+YEsP/mBMn/5gBHABAAAAASAAAAR//nAEj/5wBJ/+cAS//nAFX/5wCU/+cAmf/nALv/5wDEAA8AyP/nAMn/5wD3/+cBA//nAR7/5wEi/+cBQv/nAWD/5wFh/+cBa//nAYYAAAGKAAABjgAAAY8AAAKy/+cCs//nArT/5wK1/+cCtv/nAs7/5wLQ/+cC0v/nAtT/5wLW/+cC2P/nAtr/5wLc/+cC3v/nAuD/5wLi/+cC5P/nAub/5wLo/+cDr//nA9X/5wPZ/+cD3P/nA/f/5wP9/+cEAv/nBBD/5wQS/+cEE//nBB//5wQu/+cESP/nBEr/5wRM/+cETv/nBFD/5wRS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/+sC4P/rAuL/6wLk/+sC5v/rAuj/6wL2/vgDCv/rAwz/6wMO/+sDHwAUAyEAFAMjABQDJv/qAyj/6gMq/+oDLP/qAy7/6gMw/+oDNP/oA0P/wANE/8ADRf/AA0b/wANH/8ADSP/AA0n/wANe/8ADX//AA2D/wAOX/1YDn/9WA6//6wOz/+oDtf/rA7f/6AO6/+oDu//rA7z/6gPD/vgDx/9WA9IAFAPU/94D1f/rA9f/6wPZ/+sD2v/oA9z/6wPj/+gD6//oA/P/VgP0/94D9//rA/z/6AP9/+sEAv/rBAT/6AQJ/1YECv/eBAv/VgQM/94EEP/rBBL/6wQT/+sEHf/rBB//6wQh/+sEJf/oBCf/6AQp/+gELv/rBC//VgQw/94EMf9WBDL/3gQz/1YENP/eBDX/VgQ2/94EN/9WBDj/3gQ5/1YEOv/eBDv/VgQ8/94EPf9WBD7/3gQ//1YEQP/eBEH/VgRC/94EQ/9WBET/3gRF/1YERv/eBEj/6wRK/+sETP/rBE7/6wRQ/+sEUv/rBFT/6wRW/+sEXP/rBF7/6wRg/+sEYv/rBGT/6wRm/+sEaP/rBGr/6wRs/+sEbv/rBHD/6wRy/+sEdP/qBHb/6gR4/+oEev/qBHz/6gR+/+oEgP/qBIL/6ASE/+gEhv/oBIgAFASq/1YEq//eBK3/6wSx/+sEtf/qBLr/6wS8/+sE0AAUBNT/6ATW/+gE3P/ABOP/wAT7/8AAAgCgAAQABAAAAAYABgABAAsADAACABMAEwAEACUAKgAFACwALQALAC8ANgANADgAOAAVADoAPwAWAEUARgAcAEkASgAeAEwATAAgAE8ATwAhAFEAVAAiAFYAVgAmAFgAWAAnAFoAXQAoAF8AXwAsAIoAigAtAJYAlgAuAJ0AnQAvALEAtQAwALcAuQA1ALsAuwA4AL0AvgA5AMAAwQA7AMMAxQA9AMcAzgBAANIA0gBIANQA3gBJAOAA7wBUAPEA8QBkAPYA+ABlAPsA/ABoAP4BAABqAQMBBQBtAQoBCgBwAQ0BDQBxARgBGgByASIBIgB1AS4BMAB2ATMBNQB5ATcBNwB8ATkBOQB9ATsBOwB+AUMBRAB/AVQBVACBAVYBVgCCAVgBWACDAVwBXgCEAYQBhQCHAYcBiQCJAegB6ACMAeoB6wCNAe0B7QCPAfAB8ACQAfsB/QCRAkACQACUAkMCQwCVAlUCVQCWAlcCWACXAosCjACZAo4CjgCbApACpQCcAqoCsQCyArMCtgC6ArsCwAC+AsUCzQDEAs8CzwDNAtEC0QDOAtMC0wDPAtUC1QDQAtcC4ADRAukC6wDbAu0C7QDeAu8C7wDfAvEC8QDgAvMC8wDhAvgC+ADiAvoC+gDjAvwC/ADkAv4C/gDlAwADAADmAwIDDgDnAxADEAD0AxIDEgD1AxQDFAD2Ax8DHwD3AyEDIQD4AyMDIwD5AzEDMQD6AzMDNgD7AzgDOAD/AzoDOgEAA0ADSQEBA1QDWAELA14DYAEQA2UDZQETA3cDegEUA34DgAEYA4kDiQEbA5cDnAEcA58DrgEiA7EDsQEyA7UDtQEzA7cDtwE0A7sDuwE1A74DvwE2A8EDwgE4A8QDygE6A8wDzgFBA9AD1QFEA9cD2AFKA9oD3QFMA+MD5AFQA+YD5gFSA+gD6AFTA+oD7QFUA/AD9QFYA/cD9wFeA/sD/AFfBAEEAQFhBAMEDAFiBA8EEAFsBBIEFQFuBBwEHQFyBCEEIQF0BCMEKQF1BC8EVwF8BFkEWQGlBFsEaAGmBHAEcAG0BIEEhgG1BIgEiAG7BIwEjQG8BJAEkAG+BJIEkwG/BJUElQHBBJcElwHCBKgErAHDBK4ErgHIBLAEsQHJBLMEswHLBLcEuQHMBLsEuwHPBL0EvwHQBMEEwQHTBMMEwwHUBMUEywHVBM0EzQHcBNAE0AHdBNME1wHeBNkE2QHjBNsE3AHkBOAE4AHmBOME4wHnBO4E7gHoBPsE+wHpBQIFAgHqBQYFBgHrAAIAmgAGAAYAAAALAAsAAQAQABAAAgASABIAAwAlACkABAAsADQACQA4AD4AEgBFAEcAGQBJAEkAHABMAEwAHQBRAFQAHgBWAFYAIgBaAFoAIwBcAF4AJACKAIoAJwCWAJYAKACxALQAKQC9AL0ALQDBAMEALgDHAMcALwDUANUAMADXANcAMgDaANoAMwDcAN4ANADgAOYANwDsAOwAPgDuAO4APwD3APcAQAD8APwAQQD+AP8AQgEEAQUARAEKAQoARgENAQ0ARwEYARoASAEuATAASwEzATUATgE3ATcAUQE5ATkAUgE7ATsAUwFDAUQAVAFUAVQAVgFWAVYAVwFYAVgAWAFcAV4AWQGEAYoAXAGOAY8AYwHoAegAZQHtAe0AZgHwAfEAZwH7Af0AaQIPAg8AbAIeAiAAbQJAAkAAcAJDAkMAcQJVAlUAcgJXAlgAcwKLAowAdQKOAo4AdwKQArYAeAK7AsAAnwLFAtUApQLXAuAAtgLpAusAwALtAu0AwwLvAu8AxALxAvEAxQLzAvMAxgL2AvYAxwL4AvgAyAL6AvoAyQL8AvwAygL+Av4AywMAAwAAzAMCAw4AzQMQAxAA2gMSAxIA2wMUAxQA3AMfAx8A3QMhAyEA3gMjAyMA3wMlAyUA4AMnAycA4QMpAykA4gMrAysA4wMtAy0A5AMvAy8A5QMxAzEA5gMzAzsA5wNAA0kA8ANUA1gA+gNeA2AA/wNlA2UBAgN2A3oBAwN+A4ABCAOJA4kBCwOXA5wBDAOfA64BEgOxA7EBIgO1A7UBIwO3A7cBJAO7A7sBJQO+A78BJgPBA8oBKAPMA84BMgPQA9UBNQPXA90BOwPjA+QBQgPmA+YBRAPoA+gBRQPqA+0BRgPwA/UBSgP3A/cBUAP7A/wBUQQBBAwBUwQPBBABXwQSBBUBYQQcBB0BZQQhBCEBZwQjBCkBaAQvBFcBbwRZBFkBmARbBGgBmQRwBHABpwRzBHMBqAR1BHUBqQSBBIYBqgSIBIgBsASMBI0BsQSQBJABswSSBJMBtASVBJUBtgSXBJcBtwSoBKwBuASuBK4BvQSwBLEBvgSzBLMBwAS3BLkBwQS7BLsBxAS9BL8BxQTBBMEByATDBMMByQTFBMsBygTNBM0B0QTQBNAB0gTSBNcB0wTZBNwB2QTgBOAB3QTjBOMB3gTpBOkB3wTuBO4B4AT5BPkB4QT7BPsB4gUCBQIB4wUGBQYB5AACAXQABgAGAA8ACwALAA8AEAAQABoAEgASABoAJQAlAAIAJgAmACQAJwAnABAAKAAoAAEAKQApAAQALgAuAAgALwAvAA0AMAAwABcAMwAzAAEANAA0ACUAOAA4ABIAOQA5AAgAOgA6ABwAOwA7ABgAPAA8ABEAPQA9AAwAPgA+ABkARQBFAAMARgBGAA4ARwBHABMASQBJAAUATABMAAkAUQBSAAkAUwBTAAYAVABUAA4AVgBWABsAWgBaAAcAXABcABUAXQBdAAcAXgBeAB8AigCKAA4AlgCWAAEAsQCxABYAsgCyAAIAswCzAAEAtAC0AAIAvQC9AAcAwQDBAAkAxwDHAA4A1ADVACAA2gDaABEA3gDeACEA5ADkACAA5gDmACAA7ADsACIA7gDuABUA9wD3AA4A/AD8ACMA/gD+ACMA/wD/AA4BBAEFACMBCgEKACMBDQENAAIBGAEYAAYBGQEZABwBGgEaAAcBLgEuAA4BLwEvABYBMAEwACIBMwEzABEBNAE0ABUBNQE1AA0BNwE3AA0BOQE5AA0BQwFDABEBRAFEABUBWAFYAAEBXAFcACIBXQFdABEBXgFeABUBhAGFAA8BhgGGABoBhwGJAA8BigGKABoBjgGPABoB6AHoAB0B7QHtAAoB8AHwAB4B8QHxABQB+wH7AAsB/AH8AAoB/QH9AAsCDwIPABQCHgIgABQCQAJAAAoCQwJDAAsCVQJVABACVwJYAAECiwKMAAECjgKOABICkAKWAAIClwKXABACmAKbAAQCoQKlAAECpgKpAAgCqgKqAAwCqwKxAAMCsgKyABMCswK2AAUCuwK7AAkCvALAAAYCxQLGAAcCxwLHAAICyALIAAMCyQLJAAICygLKAAMCywLLAAICzALMAAMCzQLNABACzgLOABMCzwLPABAC0ALQABMC0QLRABAC0gLSABMC0wLTABAC1ALUABMC1QLVAAEC1wLXAAQC2ALYAAUC2QLZAAQC2gLaAAUC2wLbAAQC3ALcAAUC3QLdAAQC3gLeAAUC3wLfAAQC4ALgAAUC6gLqAAkC9gL2AAgC+AL4AA0C+gL6ABcC/AL8ABcC/gL+ABcDAAMAABcDAwMDAAkDBQMFAAkDBwMIAAkDCQMJAAEDCgMKAAYDCwMLAAEDDAMMAAYDDQMNAAEDDgMOAAYDEAMQABsDEgMSABsDFAMUABsDHwMfABIDIQMhABIDIwMjABIDJQMlAAgDJwMnAAgDKQMpAAgDKwMrAAgDLQMtAAgDLwMvAAgDMQMxABgDMwMzAAwDNAM0AAcDNQM1AAwDNgM2ABkDNwM3AB8DOAM4ABkDOQM5AB8DOgM6ABkDOwM7AB8DQANBAAoDQgNCAB0DQwNJAAsDVANYAAoDXgNgAAsDZQNlAAoDdgN2ABQDdwN6AB4DfgOAAAoDiQOJAB0DlwOXAAIDmAOYAAQDmwObAAEDnAOcAAwDnwOfAAIDoAOgACQDoQOhAAQDogOiABkDpQOlAA0DqAOoAAEDqQOpACUDqgOqABIDqwOr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AAIAAQAAAAAAAAAeACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbABsAAAAPAA8AGAAPAA8ADwAYAAAAAAAAABgAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAZACQAAAAOABUAHAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAACgAFAAoAAAAAAAAAAAAAAAAAFQAFAAAAAAAVAAAAAAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAVAAUAEgAZABUAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAAAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAgAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAgACAAIACwALAAsACwAMAAYABgAGAAYABgAGAAYAAQABAAEAAQABAAAAAAAAAAAAAwAHAAcABwAHAAcACAAIAAgACAAJAAkABAAGAAQABgAEAAYAAgABAAIAAQACAAEAAgABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAIAAQACAAEAAgABAAIAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAMAAgAHAAIABwACAAcAAAAAAAAAAAAAAAAAFAARABQAEQAUABEAFAARABQAEQANAAAADQAAAA0AAAALAAgACwAIAAsACAALAAgACwAIAAsACAAWAAAADAAJAAwAFwAdABcAHQAXAB0AAAAAAAIAAAAAAAAAAAAKAAoACgAKAAoACgAKAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAA4ADgAOAA4AEgAKAAoACgAFAAUABQAFAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAHAAcABwAHAAAABUAAAAOAA4ADgAOAA4ADgAkABIAEgAAAAAAAAAEAAAAAAAAAAIADAAAAAAABAAAAAAAFwAAAAAAAAAAAAAAAgAAAAAADAAQAAAADAABAAAAAwAAAAgAAAAHAAAACQAAAAAACAAHAAgAAAAAAAAAAAAAAAAAIwAAAAAAHwAEAAAAAAAAAAAAAAAAAAIAAAAAAAIADQAQAAYAAQADAAcAAwABAAkAEwABAAMAEQAAAAAAAAADAAkAFgAAABYAAAAWAAAADAAJAA8ADwAAAAAADwAAAAMABAAGAAAAAAABAAMAAAAAABoACQABAAIAAAAAAAIAAQAMAAkAAAAQABMAAAAEAAYABAAGAAAAAAAAAAEAAAABAAEAEAATAAAAAAAAAAMAAAADAAIABwACAAEAAgAHAAAAAAAfAAkAHwAJAB8ACQAgACIAAAADAAEABAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAEAAYAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAAIABwACAAcAAgAHAAIABwACAAcAAgAHAAIABwACAAEAAgABAAIAAQACAAcAAgABAAsACAALAAgAAAAIAAAACAAAAAgAAAAIAAAACAAMAAkADAAJAAwACQAAAA0AAAAgACIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAABsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMABAAGAAAAAQAAAAAAAgAHAAAAAAAAAAgAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwACAAAAAAAAAAAAFAARAA0AAAALABoACQAaAAkAFgAAABcAHQAAAAoAAAAAAAAABQASAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAA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BOgB/QH+Af8E7QIAAgAE7gTvAgECAgIDAgoE/AT9AgsCDAINAg4CDwIQBQAFAQUDBQYFDwISAhMCFAIVAhYCFwIYAhkCGgIbAgQCBQIGAgcCCAIJAksCHQIeAh8CIAUJAiECIwIkAiUCJwIpAocDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQOTA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MFEAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgUTA4cDiAOKA4kDiwOMA40DjgOPA5ADkQOSA5QDlQOWBREFEgTcBN0E3gTfBOkE7ATqBOsE8ATxBPIE4AThBOIE+wT+BP8FAgUEBQUCEQUHBPME9AT1BPYE9wT4BPkE+gUUBRUFFgUXBQgFCgULAigFDQIqBQ4FDAImAhwCIgUcBR0AAgcAAPoB9wKCAeEB4AHfAd4B3QHcAdsB2gHZAdgCQwJCAkECQAI4AfYB9QH0AfMB8gHxAfAB7wHuAe0B7AHrAeoB6QHoAecB5gHlAeQB4wHiAfgB+QKEAoYChQKHAoMCiAJiAfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAhACEQUPAhICEwIUAhUCFgIXAhgCGQIaAhsCSwIdAh4CHwIgBQkCIQIjAiQCJQImAicCKAIpAisCLAIuAi0DQANBA0IDQwNEA0UDRgNHA0gDSQNKA0sDTANNA04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwN0BRADdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YFEwOHA4gDigOJA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWBREFEgTcBN0E3gTfBOAE4QTiBOME5ATlBOYE5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUE9gT3BPgCDwT5BPoE+wT8BP0E/gT/BQAFAQUCBQMFBAUFBQYFBwUUBRUFFgUXBQgFCgULBQ0CKgUOBQwCHAIiBRwFHQABAAEBewABAAEASwABAAEAuwABAAEANgABAAEAEwABAAIDGQMaAAIG5AbYAAIG5gbYAAEG7gABBvAAAQbyAAIAAQAUAB0AAAABAAIALwBPAAEAAwBJAEsCegACAAAAAQbeAAEABgLLAswC3QLeA2ADaQABAAYATQBOAvID3wPhBFoAAgADAZQBlAAAAdUB1wABAi8CNQAEAAIAAgCoAKwAAQEkAScAAQABAAwAJwAoACsAMwA1AEYARwBIAEsAUwBUAFUAAgACABQAHQAAAmUCbgAKAAIABgBNAE0ABgBOAE4ABALyAvIABQPfA98AAwPhA+EAAgRaBFoAAQACAAQAFAAdAAACdgJ2AAoCgQKBAAsEngSlAAwAAgAGABoAGgAAABwAHAABAloCXwACAmMCYwAIAmUCbgAJAnUCdQATAAEAFAAaABwCWgJbAlwCXQJeAl8CYwJ1AnYCgQSeBJ8EoAShBKIEowSkBKUAAQXeAAEF4AABBeIAAQXkAAEF5gABBegAAQXqAAEF7AABBe4AAQXwAAEF8gABBfQAAQX2AAEF+AABBfoAAgX8BgIAAgYCBggAAgYIBg4AAgYOBhQAAgYUBhoAAgYaBiAAAgYgBiYAAgYmBiwAAgYsBjIAAgYyBjgAAgY4Bj4AAwY+BkQGSgADBkgGTgZUAAMGUgZYBl4AAwZcBmIGaAADBmYGbAZyAAMGcAZ2BnwAAwZ6BoAGhgADBoQGigaQAAQGjgaUBpoGoAAEBpwGogaoBq4ABQaqBrAGtga8BsIABQa8BsIGyAbOBtQABQbOBtQG2gbgBuYABQbgBuYG7AbyBvgABQbyBvgG/gcEBwoABQcEBwoHEAcWBxwABQcWBxwHIgcoBy4ABQcoBy4HNAc6B0AABQc6B0AHRgdMB1IABgdMB1IHWAdeB2QHagAGB2IHaAduB3QHegeAAAYHeAd+B4QHigeQB5YABgeOB5QHmgegB6YHrAAGB6QHqgewB7YHvAfCAAYHugfAB8YHzAfSB9gABgfQB9YH3AfiB+gH7gAHCC4H5gfsB/IH+Af+CAQABwgmB/oIAAgGCAwIEggYAAEA6wAKAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgCFAIYAhwCJAIoAiwCNAJAAkgCUALsAvAC9AL4AvwDAAMEAwgDDAMQAxQDGAMcAyADJAMoAywDMAM0AzgDqAOsA7ADtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD/AQABAQECAQMBBAEFAQYBBwEwATQBNgE4AToBPAFCAUQBRgFKAU0BWgKNAo8CqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLIAsoCzALOAtAC0gLUAtYC2ALaAtwC3gLgAuIC5ALmAugC6gLsAu4C8ALyAvUC9wL5AvsC/QL/AwEDAwMFAwcDCgMMAw4DEAMSAxQDFgMYAxoDHAMeAyADIgMkAyYDKAMqAywDLgMwAzIDNAM3AzkDOwM9Az8DrwOwA7EDsgO0A7UDtgO3A7gDuQO6A7sDvAO9A9QD1QPWA9cD2APZA9oD2wPcA90D3gPfA+AD4QPiA+MD5QPnA+kD6wQABAIEBAQSBBkEHwQlBI8EkASUBJgFGQUbAAEA+gAIAAoAFAAVABYAFwAYABkAGgAbABwAHQAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4AZQBnAIEAgwCEAIwAjwCRAJMAsQCyALMAtAC1ALYAtwC4ALkAugDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgA6QEvATMBNQE3ATkBOwFBAUMBRQFJAUsBTAFYAVkBpwGtAbIBtQKLAowCjgKQApECkgKTApQClQKWApcCmAKZApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkCqgLHAskCywLNAs8C0QLTAtUC1wLZAtsC3QLfAuEC4wLlAucC6QLrAu0C7wLxAvMC9AL2AvgC+gL8Av4DAAMCAwQDBgMJAwsDDQMPAxEDEwMVAxcDGQMbAx0DHwMhAyMDJQMnAykDKwMtAy8DMQMzAzUDNgM4AzoDPAM+A5cDmAOZA5oDmwOcA50DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgO+A78DwAPBA8IDwwPEA8UDxgPHA8gDyQPKA8sDzAPNA84DzwPQA9ED0gPTA+QD5gPoA+oD/wQBBAMEGAQeBCQEjgSTBJcFGAUaAcwAAgBNAc0AAgBQAc4AAwBKAE0BzwADAEoAUAABAAEASgHLAAIASgHRAAIAWAHQAAIAWAABAAMASgBXAJUAAAABAAEAAQABAAAAAwS3AAIArQLNAAIAqQS9AAIArQTKAAIAqQS4AAIArQLOAAIAqQSnAAIAqQS+AAIArQRaAAIArQTLAAIAqQM8AAIAqQM+AAIAqQM9AAIAqQM/AAIAqQS2AAIAqQS7AAIBygS5AAIArQSmAAIAqQLnAAIBygPxAAIAqQTFAAIArQMfAAIBygTQAAIArQTVAAIArQTTAAIAqgM2AAIAqQTZAAIArQS8AAIBygS6AAIArQPyAAIAqQTGAAIArQMgAAIBygTRAAIArQTWAAIArQTUAAIAqgM3AAIAqQTaAAIArQS/AAIAqQL4AAIBygTBAAIArQL6AAIAqQL8AAIBygTDAAIArQMVAAIAqQMbAAIBygTOAAIArQPmAAIAqQTXAAIArQPkAAIAqATAAAIAqQL5AAIBygTCAAIArQL7AAIAqQL9AAIBygTEAAIArQMWAAIAqQMcAAIBygTPAAIArQPnAAIAqQTYAAIArQPlAAIAqAMPAAIAqQMRAAIBygTMAAIArQSyAAIArAMQAAIAqQMSAAIBygTNAAIArQSzAAIArAMCAAIAqQMEAAIBygTHAAIArQSoAAIAqAKgAAIAqgKqAAIAqQSBAAIArQPqAAIAqASDAAIAqwSFAAIAqgMDAAIAqQMFAAIBygTIAAIArQSpAAIAqAK7AAIAqgLFAAIAqQSCAAIArQPrAAIAqASEAAIAqwSGAAIAqgK4AAIAqQK3AAIAqARYAAIAqwLsAAIAqgSvAAIArARpAAIAqQRxAAIArQRrAAIAqARtAAIAqwRvAAIAqgRqAAIAqQRyAAIArQRsAAIAqARuAAIAqwRwAAIAqgR3AAIAqQR/AAIArQR5AAIAqAR7AAIAqwR9AAIAqgR4AAIAqQSAAAIArQR6AAIAqAR8AAIAqwR+AAIAqgKRAAIAqQQvAAIArQKQAAIAqAQxAAIAqwKTAAIAqgSqAAIArAKZAAIAqQRHAAIArQKYAAIAqARJAAIAqwRLAAIAqgSsAAIArAKdAAIAqQRZAAIArQKcAAIAqARXAAIAqwLrAAIAqgSuAAIArAKsAAIAqQQwAAIArQKrAAIAqAQyAAIAqwKuAAIAqgSrAAIArAK0AAIAqQRIAAIArQKzAAIAqARKAAIAqwRMAAIAqgStAAIArAK9AAIAqQRcAAIArQK8AAIAqAReAAIAqwK/AAIAqgSxAAIArALCAAIAqQR0AAIArQLBAAIAqAR2AAIAqwMmAAIAqgS1AAIArAKiAAIAqQRbAAIArQKhAAIAqARdAAIAqwKkAAIAqgSwAAIArAKnAAIAqQRzAAIArQKmAAIAqAR1AAIAqwMlAAIAqgS0AAIArATJAAMAqgCpBNIAAwCqAKkAAgARACUAKQAAACsALQAFAC8ANAAIADYAOwAOAD0APgAUAEUASQAWAEsATQAbAE8AVAAeAFYAWwAkAF0AXgAqAIEAgQAsAIMAgwAtAIYAhgAuAIkAiQAvAI0AjQAwAJgAmwAxANAA0AA1AAA=\",\n  \"Roboto-Medium.ttf\": \"AAEAAAARAQAABAAQR0RFRqWLoiAAAb9IAAACWEdQT1Pk1zcKAAHBoAAAZixHU1VChRYO9AACJ8wAABX2T1MvMpfnsYsAAAGYAAAAYGNtYXDOyFo6AAAWdAAABoJjdnQgO/gmfQAAL1AAAAD+ZnBnbagFhDIAABz4AAAPhmdhc3AACAAZAAG/PAAAAAxnbHlmoVpeAgAAOpAAAYGiaGVhZAatHSkAAAEcAAAANmhoZWEK9grYAAABVAAAACRobXR4JpFVzgAAAfgAABR8bG9jYSpiho0AADBQAAAKQG1heHAIzxDGAAABeAAAACBuYW1lQlx1PgABvDQAAALmcG9zdP9tAGQAAb8cAAAAIHByZXB5WM7TAAAsgAAAAs4AAQAAAAMBSOm9QH9fDzz1ABkIAAAAAADE8BEuAAAAAN8Gv236Jv3VCWEIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJbvom/j4JYQABAAAAAAAAAAAAAAAAAAAFHwABAAAFHwCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAQAAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA4wAZAAAAAAAAAAAAf0AAAH9AAACHgCMAo4AYATTAFYEjABkBeQAZAUhAFUBVwBSAsUAgQLMACcDjAAcBHEAQgHKACICuABQAjkAhgMfAAEEjABoBIwAqgSMAFIEjABOBIwANwSMAH8EjABzBIwARASMAGcEjABdAhwAfwHrADMEEgA+BIAAjwQoAH4D5AA7By0AWwVOABEFDQCUBTkAZgU5AJQEhQCUBGgAlAVzAGsFrQCUAkQApQRyAC8FDgCUBFIAlAb/AJQFrQCUBYMAZQUbAJQFgwBgBQkAlATYAEsE4AAtBTwAgAUqABEHCwAvBQ0AJgTjAAgE0wBQAiwAhQNVABICLAALA24ANgOVAAICkAA4BFAAVgR/AH0ELQBOBIIAUARJAFEC0wArBIkAUgRyAHoCCgB8AgL/qwQsAH0CCgCMBvgAfAR0AHoEigBOBH8AfQSHAFAC1AB9BB4ASQKqAAoEcwB3A/gAFgXwACMEBgAfA+sADAQGAFECqwA4Af0ArwKrABwFTQB1Ah8AhQSCAGcEtQBfBZ4AXARAAA0B+ACJBPkAXAOSAGMGSQBaA5AAjgPjAFcEawB/BkoAWQPaAJ0DDwCBBEoAXAL1AD0C9QA3ApQAbwTBAJMD6gBJAkQAkAITAGwC9QCCA6cAeQPjAF4FygBfBiIAUwZcAGYD5QBGB37//ARCAEwFgQBpBM8AlQTrAIoGwgBIBKQAaASRAEMEhgBOBJEAgQTsAFAFsAAfAhcAkASaAI0EZAAgAlIAIAWXAJAEhgB9B7AAZQc+AFkCBwCJBY0AVQLQ/94FkQBbBJ0ATQWjAIAE5gB3AiX/rgQ5AFcD3gCQA6oAbgPaAJ0DfgB1AgoAgQKqAHgCTAApA84AdwMoAEsCcwCJAAD8kwAA/WIAAPx0AAD9OgAA/AgAAP0eAmsAzQQ7AG4CRACQBHQAmQXCABoFegBcBTUAIASMAGoFrgCZBIwARwX5AEwFsQBGBVkAbASEAFYEyACXBA0AHgSGAFEEZQBiBA8AWQSGAH0EpwB2AqUAowRoABUEGgBnBPwAMASGAIAEMwBQBI4AUAQqADwEXQB/BdEARgXMAFIGlABlBLQAeASH/+EGeQArBf0AJAVTAGcIgQAtCIwAmQZRAC0FpQCPBQcAkAX9ACYHqQAVBNsASQWmAJIFqAAsBQsAMgZfAE4F+ACOBYUAkQeaAJUH+gCVBiEAFQbwAJkFAgCQBUgAYwdiAKEE6AAXBIAAWgSLAI8DWwCDBPIAJwaHACAEFwBOBJIAhARsAI8ElAAgBgIAjwSRAIQEkgCEA/oAIwXUAFMEzwCEBGUAYAaNAIQG8QB9BSEAIAZvAI8EaQCPBDkAUAaCAJIEcAAuBHL/1wQ5AFIG1gAdBuQAhASG/+gEkgCEB1gAiAZqAHIEaP/hBygAmAYCAIYFFgAaBGMACwdLAKwGPQCaBuUAfgXdAIEJKgClB+4AkAQgACgD9QAyBXoAYASIAE0FGAAQBA0AHgV6AGAEhgBOB1QAiAZWAHUHWACIBmoAcgUQAGcERwBdBPsAcAAA/HAAAPx1AAD9gQAA/aYAAPomAAD6UQYgAJIFEwCEBGj/4QUQAJQEhgB9BGsAjwOjAH0E6gCZBCQAfQgjABUG4AAgBckAmQT7AI8FLgCRBKwAjQaUADQFoAA8BiAAlAUHAIQH3QCUBa0AfQhJAJcG7wB9BjcAZwUEAGAFOQAmBEEAHwcoACkFbwAnBfIAkQTcAGAFcACBBHQAdQWFAIkGGwAKBMT/ywUgAJEEeACNBh8ALAUUACAFrQCZBIYAfQYqAJQFEQCEB3UAlAZ0AI8FjQBVBKMAWwSkAF0EwwAsA6oAJAVpACYEcQAfBPkATwbzAGgG2wBfBlEAPQUoAC8EgwBKBEgAcwe8AEIGpAA/B/UAlAaeAHQFBgBcBC8AVQWoACEFHQBEBU4AfQZGACwFOwAgAxsAZAQUAAAIKQAABBQAAAgpAAACuQAAAgoAAAFcAAAEfwAAAjAAAAGiAAABAAAAANEAAAAAAAACtwBQArcAUAUjAJwGKgB7A5oACAG/AGUBugA3Ac4ANQGjAEsDCwBtAxMAQwMAADUEWwA/BJoAXQLMAIoD/QCNBaoAjQHPAF4HrgBQAnQAbAJpAFUDmQArAvUATAL1ADYC9QBQAvUATgL1ADcC9QBLAvUARwNcAGcC9QBMAvUAggL1AD0C9QA3AvUANgL1AFAC9QBOAvUANwL1AEsC9QBHBLUAYgZuACMGvwCZCJUAlAY7ACMGmwB9BIwAXAXqACMELQAqBJsAJAViAE8FfgArBeQAbgPjAEUIKQCQBQgAbwUUAJYGNwBcBt4AVgbQAF4GrABcBJMAYQWKAKYE3gA/BIAAnASdADsIUgBhAjL/pwSRAGUEgACPBBIAPQQoAH0EDgAlAlEAnAKOAGQB6QBHBRkAKwStABoEvQArBygAKwcoACsFDwArBrcASQAAAAAIMABZCDUAXAL1AD0C9QCCAvUATAQdAE8EHQBXBB0AOAQdAF8EHQBmBB0AMwQdAD0EHQBDBB0AmAQdAFgEKwBBBD4ABgRcABMGCQAnBHkACASIAGkEPwAlBDcAPwRkAHUEvQBNBGsAdgS9AE4E3AB2BgUAdgO3AHYEXgB2A9YAJgH+AIYE3QB2BKcAVgPIAHYENwA/BGgAOgOlAAoDvAB2BHkACAS9AE4EeQAIA50ARgTZAHYEHgBEBaYATwVYAE8E4ABeBZIAIwSAAE8HVgAkB1gAdgWZACUE2AB2BHIAdgVeACcGRQAbBEYAQwTiAHYEXQB2BMsAJARMAB8FYgB2BI0AQwaEAHYHDgB2BWEACQYWAHYEZwB2BIAAPQaPAHYEhABCBCgACwajABsEoAB2BQ0AdgV0ACEF+ABOBFYABgTEABMGlwAjBI0AQwSNAHYGAAAOBM4ATQRHAEMEvQBOBGgAOgP0AEUILQB2BPQAKAL1ADcC9QA2AvUAUAL1AE4C9QA3AvUASwL1AEcDtgCNAq4AmAPgAHYEOgAMBLYAVgVBAJkFKACZBDAAgQU1AJkEKACBBHoAdgSAAE8EYAB2BJoACAH+AJADoQB1AAD8ngP3AHoD+v9RBAsAeQP6AHkDvAB2A50AdQOdAHUC9QBMAvUANgL1AFAC9QBOAvUANwL1AEsC9QBHBXMAaQWeAGkFfwCZBdkAaQXaAGkEKACWBIIAawRYAA8EuwA0BGsAZwQuAEIDoQB2AboAYgaYAE4ErwBuAgz/pwSMADgEjABoBIwALASMAGIEjABfBIwANASMAGwEjABZBIwAZwSMAOYCJv+uAiX/rgIXAJACF//6AhcAkARgAHYE5gBgBDAAOQSIAH0EPgBPBJUATgSRAE4EnQBJBJIAfQSaAE4ESQBRBIkAUARZADQDrQBhBQwAXwPEAAUGRv/sBAcAdgS9AE4FDgA0BNwAdgH9AAACuABQBVcAFwVXABcEkP/1BOAALQKq/+sFTgARBU4AEQVOABEFTgARBU4AEQVOABEFTgARBTkAZgSFAJQEhQCUBIUAlASFAJQCRP/LAkQApQJE/8oCRP++Ba0AlAWDAGUFgwBlBYMAZQWDAGUFgwBlBTwAgAU8AIAFPACABTwAgATjAAgEUABWBFAAVgRQAFYEUABWBFAAVgRQAFYEUABWBC0ATgRJAFEESQBRBEkAUQRJAFECF/+1AhcAkAIX/7MCF/+oBHQAegSKAE4EigBOBIoATgSKAE4EigBOBHMAdwRzAHcEcwB3BHMAdwPrAAwD6wAMBU4AEQRQAFYFTgARBFAAVgVOABEEUABWBTkAZgQtAE4FOQBmBC0ATgU5AGYELQBOBTkAZgQtAE4FOQCUBRgAUASFAJQESQBRBIUAlARJAFEEhQCUBEkAUQSFAJQESQBRBIUAlARJAFEFcwBrBIkAUgVzAGsEiQBSBXMAawSJAFIFcwBrBIkAUgWtAJQEcgB6AkT/tAIX/50CRP/RAhf/uwJE/90CF//GAkQAGAIK//8CRACfBrUApQQLAHwEcgAvAiX/rgUOAJQELAB9BFIAlAIKAIwEUgCUAgoAWQRSAJQCoACMBFIAlALmAIwFrQCUBHQAegWtAJQEdAB6Ba0AlAR0AHoEdP+jBYMAZQSKAE4FgwBlBIoATgWDAGUEigBOBQkAlALUAH0FCQCUAtQAUgUJAJQC1AA3BNgASwQeAEkE2ABLBB4ASQTYAEsEHgBJBNgASwQeAEkE2ABLBB4ASQTgAC0CqgAKBOAALQKqAAoE4AAtAtIACgU8AIAEcwB3BTwAgARzAHcFPACABHMAdwU8AIAEcwB3BTwAgARzAHcFPACABHMAdwcLAC8F8AAjBOMACAPrAAwE4wAIBNMAUAQGAFEE0wBQBAYAUQTTAFAEBgBRB37//AbCAEgFgQBpBIYATgR6/6UEev+lBD8AJQSaAAgEmgAIBJoACASaAAgEmgAIBJoACASaAAgEgABPA+AAdgPgAHYD4AB2A+AAdgH+/6kB/gCGAf7/pwH+/5wE3AB2BL0ATgS9AE4EvQBOBL0ATgS9AE4EiABpBIgAaQSIAGkEiABpBD4ABgSaAAgEmgAIBJoACASAAE8EgABPBIAATwSAAE8EegBhA+AAdgPgAHYD4AB2A+AAdgPgAHYEpwBWBKcAVgSnAFYEpwBWBN0AdgH+/5EB/v+vAf7/ugH+ABcB/gB9A9YAJgReAHYDtwB2A7cAdgO3AHYDtwB2BNwAdgTcAHYE3AB2BL0ATgS9AE4EvQBOBGQAdQRkAHUEZAB1BDcAPwQ3AD8ENwA/BDcAPwQ/ACUEPwAlBD8AJQSIAGkEiABpBIgAaQSIAGkEiABpBIgAaQYJACcEPgAGBD4ABgQrAEEEKwBBBCsAQQVOABEE6f9CBhH/SgKo/04Fl/+0BUf/QQVt/8ICpf+FBU4AEQUNAJQEhQCUBNMAUAWtAJQCRAClBQ4AlAb/AJQFrQCUBYMAZQUbAJQE4AAtBOMACAUNACYCRP++BOMACASEAFYEZQBiBIYAfQKlAKMEXQB/BJoAjQSKAE4EwQCTA/gAFgRZADQCpf/DBF0AfwSKAE4EXQB/BpQAZQSFAJQEdACZBNgASwJEAKUCRP++BHIALwUoAJkFDgCUBQsAMgVOABEFDQCUBHQAmQSFAJQFpgCSBv8AlAWtAJQFgwBlBa4AmQUbAJQFOQBmBOAALQUNACYEUABWBEkAUQSSAIQEigBOBH8AfQQtAE4D6wAMBAYAHwRJAFEDWwCDBB4ASQIKAHwCF/+oAgL/qwRsAI8D6wAMBwsALwXwACMHCwAv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FgoBAWtWACs0AP//ACcAAAXlBesGJgHlAAABBwBqATsAHgANtwUEHwoBAYRWACs0NAD//wAGAAAEOAYeBiYB4wAAAAcARACKAB7//wAR/lcFPwWwBiYAJQAAAQcApAGAAAMAC7YDDgUBATlWACs0AP//AFb+XAP5BE4GJgBFAAABBwCkALQACAALtgI7MQAATVYAKzQA//8AlP5eBE0FsAYmACkAAAEHAKQBQgAKAAu2BBACAABDVgArNAD//wBR/lQECgROBiYASQAAAQcApAEFAAAAC7YBLAAAAE1WACs0AP//AAj+VASRBI0GJgJDAAAABwCkASIAAP//AHb+XAO2BI0GJgI4AAAABwCkAPEACP//AHj+oQGLBDoGJgCNAAABBwCtA1oACgAOtAEHAgEBuP9/sFYAKzQAAAAAABEA0gADAAEECQAAAF4AAAADAAEECQABABoAXgADAAEECQACAA4AeAADAAEECQADABoAXgADAAEECQAEABoAXgADAAEECQAFACYAhgADAAEECQAGABoArAADAAEECQAHAEAAxgADAAEECQAIAAwBBgADAAEECQAJACYBEgADAAEECQALABQBOAADAAEECQAMABQBOAADAAEECQANAFwBTAADAAEECQAOAFQBqAADAAEECQAQAAwB/AADAAEECQARAAwCCAADAAEECQAZAAwB/ABDAG8AcAB5AHIAaQBnAGgAdAAgADIAMAAxADEAIABHAG8AbwBnAGwAZQAgAEkAbgBjAC4AIABBAGwAbAAgAFIAaQBnAGgAdABzACAAUgBlAHMAZQByAHYAZQBkAC4AUgBvAGIAbwB0AG8AIABNAGUAZABpAHUAbQBSAGUAZwB1AGwAYQByAFYAZQByAHMAaQBvAG4AIAAzAC4AMAAwADUAOwAgADIAMAAyADIAUgBvAGIAbwB0AG8ALQBNAGUAZABpAHUAbQBSAG8AYgBvAHQAbwAgAGkAcwAgAGEAIAB0AHIAYQBkAGUAbQBhAHIAawAgAG8AZgAgAEcAbwBvAGcAbABlAC4ARwBvAG8AZwBsAGUAQwBoAHIAaQBzAHQAaQBhAG4AIABSAG8AYgBlAHIAdABzAG8AbgBHAG8AbwBnAGwAZQAuAGMAbwBtAEwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAQQBwAGEAYwBoAGUAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMgAuADAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcABhAGMAaABlAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBMAEkAQwBFAE4AUwBFAC0AMgAuADAAUgBvAGIAbwB0AG8ATQBlAGQAaQB1AG0AAAADAAAAAAAA/2oAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgAIAAj//wAPAAEAAgAOAAAAAAAAAigAAgBZACUAPgABAEQAXgABAGoAagABAHAAcAABAHUAdQABAIEAgQABAIMAgwABAIYAhgABAIkAiQABAIsAlgABAJgAnwABAKEAowABAKUApgABAKgArQADALEAsQABALoAuwABAL8AvwABAMEAwQABAMMAxAABAMcAxwABAMsAywABAM0AzgABANAA0QABANMA0wABANoA3gABAOEA4QABAOUA5QABAOcA6QABAOsA+wABAP0A/QABAP8BAQABAQMBAwABAQgBCQABARYBGgABARwBHAABASABIgABASQBJwADASoBKwABATMBNAABATYBNgABATsBPAABAUEBRAABAUcBSAABAUsBTQABAVEBUQABAVQBWAABAV0BXgABAWIBYgABAWQBZAABAWgBaAABAWoBbAABAW4BbgABAXABcAABAcsB0QACAeIB9gABAfoB+gABAgMCAwABAgUCBQABAgwCDgABAhACEQABAhMCEwABAhcCFwABAhkCGwABAiECIQABAiYCKAABAioCKgABAjgCOAABAjsCOwABAj0CPQABAkACQwABAm8CcwABAoMCiAABAosC8wABAvYDtQABA7cDtwABA7kDwwABA8UDzgABA9AD6wABA+8D7wABA/ED+AABA/oD/AABA/8EAwABBAUEkAABBJMElAABBJYElwABBJkEnAABBKYFAgABBQQFDgABBREFHgABAAEAAwAAABAAAAAWAAAAIAABAAEArQACAAEAqACsAAAAAgACAKgArAAAASQBJwAFAAEAAAAeABAACgACAC4ANgACY3BzcAA6a2VybgBAAARERkxUADhjeXJsADhncmVrADhsYXRuADgAAQAAAAEAIgACAAgAAgAuBBAAAAABAAAAAAABAAEADgAAAAEPAgAFACQASAAA//8AAgAAAAEAAUuMAAQAAAHsE9wRBBEEF7QQ5hdaEVQRkhJkEXZH7hKkEqQVxBG2EqQSpBJkEsYgkBlQH8YRpBHMFwAY3hHiFO4SghIsEUAp5BEiJsIRXhFeEw4SLBGEGHgSRhH4EQoSRhU0EiwSZBnGHwAXWhJkF1olxCfEIwodmBDsEkYRLD54EV438iTSKMYSEhDyEPhBYhD+FHYUChpIOeQtpjRCLFgSpDDqPBYXACFeEqQSpBV6EqQSpBKkMpQa0hKkE7IeOhx0GBYj7B0GEUoiNBEKEzQ2GERgEiwUsCsaG1wS6BIsG+YTXhaqFEAS6BdaEw4RpBJGE4gSLB8AEUoXABEKFcQVxBXEEqQXABEKEqQSpBJkEUoXABEKEQQvSBEEEQQRBBEcFg4WXBEWETYREBEWERARaBEQEZISZBJkEmQSZB/GF1oXWhdaF1oXWhdaF1oRkhF2EXYRdhF2EqQSpBKkEqQSpBJkEmQSZBJkEmQY3hKCEoISghKCEoISghKCEUARQBFAEUARXhMOEw4TDhMOEw4SRhJGF1oSghdaEoIXWhKCEZIRkhGSEZISZBF2EUARdhFAEXYRQBF2EUARdhFAEqQRXhKkEqQSpBKkEqQVxBG2EbYRthG2EqQRXhKkEV4SpBFeEV4SZBMOEmQTDhJkEw4RhBGEEYQfxh/GH8YRzBjeEkYY3hHiEeIR4hEWERYRHBEQERAREBEQERAREBEQERYRFhEWERYRFhEQERAREBEWETYRNhE2ETYRFhEWERYRHBdaEXYSpBKkEmQY3hdaEVQRdhHiEqQSpBXEEqQSpBJkEsYfxhjeFwASpBjeEV4TDhJGEw4Rdh8AEqQSpBXEFcQVehdaEVQfABF2EqQSpBJkEsYRkh/GFwASghFAEw4SLBJGEQoRQBFKEkYRzBHMEcwY3hJGEQQRBBEEEqQRXhdaEoIRdhFAEaQSRhGSGN4SRhKkFwARChKkF1oSghdaEoIRdhFAEUARQBcAEQoSZBMOEw4SLBV6EkYVehJGFXoSRhdaEoIXWhKCF1oSghdaEoIXWhKCF1oSghdaEoIXWhKCF1oSghdaEoIXWhKCF1oSghF2EUARdhFAEXYRQBF2EUARdhFAEXYRQBF2EUARdhFAEqQSpBJkEw4SZBMOEmQTDhJkEw4SZBMOEmQTDhJkEw4TDhjeEkYY3hJGGN4SRh/GHwARShFeE7IfABXEGN4SpBFeF1oSghF2EqQSZBMOEYQRVBIsEmQSZBKkEV4VxBXEEbYSpBFeEqQRXhJkEsYSLBGEH8YRpBJGEaQSRhHMEeISZBEQERYREBEcERARFhEcAAJLbgAEAABPDlfKACYAJQAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAP/k/+MAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAD/5AAR/+UAAAAAAAAAAAAAAAD/6wAAAAAAAAAAAAD/7QAA/9X/0AAAAAD/6gAAAAAAAAAAAAAAAP/p/5P/9f/qAAAAAAAA/+EAAAAAAAAAAAAAAAAAAAAA//H/7gAA//UAAP/0//X/zgAA/+//jf+C//H/iAAAAAD/xAAAAAD/x//GAAAAAAAA/60AAAAAAAwAEQAA/8kAEv+sAAD/3QAAAAAAAAAAAAAAAAAAAAAAAP/xAAAAAAAAAAAAAP/PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7QAAAAAAAAAAAAD/7f/v/+YAAAAAAAAAFAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+0AAAAAAAAAAAAAAAAAAAAAAAD/8wAAAAAAAAAAAAD/8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/xAAAAAAAAAAAAAP+KAAAAAAAA/+sAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAP/wAAAAAAAAAAD/8wAAAAAAAAAA//H/8QAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAA/38AAAAAAAAAAAAAAAAAAAAA/9cAAAAAAAAAAAAAAAAAAP/qAAAAAAAAAAAAAP/rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+oAAAAA/+4AAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//IAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAD/vwAAAAD/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2AAA/7//4//Y/43/y/+7/7//2f/s/6v/oAASABEAAAAAAA3/xgAA/+n/8P/zABEAAP8m/+8AEv+nAAD/4gAAAAAAAAAAAAD/oP/zAAD/5v/h//EAAP/nAAD/5f/p/9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/5sAAAAAAAAAAAAAAAD/owAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9QAAAAAAAAAAAAD/4wAAAAAAAP/xAAAAAAAAAAAAAAAAAAAAAAAA//EAAAAAAAD/8gAAAAAAAAAA/8UAAP/s/4gAAP/O/7gAAAAAAAAAAAAAAAAAAP+vAAD/rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/m/+cAAAAA/+cAAP/r/+v/4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/qgAAAAAAEQAAAAAAEf/RAAAAAAAA/6H/5P+a/6L/uf97/3X/rP+0/68AAAAQABAAAAAAAAD/mwAA/7P/8P/xAA8AAP8X/+0AEP8J/7z/xP/LAAAAAP9+/3z/Gf/xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAA/+UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Sv+9/z//OgAA/z//UP9e/2wAAAAAAAcABwAAAAAAAP9AAAD/av/RAAAABQAA/mEAAAAH/kkAAP+G/5IAAAAA/w//DAAAAAAAAAAA/78AAAAT//IAAAAA/9//fwAT/9X/Av8H/+EAAAAAAAD/awAAAAD/a/+DAAAAAAAA/0YAAAAAAAAAAAAAAAAAAAAAAAD/qwAA/+EAAAAA/9X/5//f/+H/7QAA/8sAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAP9+AAAAAP/EAAAAAAAAAAAAAAAAAAAAAAAAAAD/6//mAAAADf/sAAD/6//t/+UADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+0AAAAAAAAAAP/c/+YAAAASAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAP9zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/1P/zAAD/tf/Z/9L/0v/k//X/tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/yMAAAAA/68AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7wAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAP+0AAAAAP+7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/VAAD/8AAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/rf8zAAD/wP/2AAAAAP/JAAAAAAAAAAAAAAAA/8gAAAAAAAD/+f/r/+cAAAAAAAAAAAAA/73/6f+h/6UAAP+c/70AAAAAAAAAAAASABIAAAAAAAD/0gAAAAAAAAAAAAAAAP5xAAAAAP9sAAAAAP/KAAAAAP+7/+kAAAAAAAD/7AAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zgAAAAAAAAAAAAD/eQAAAAAAAP/xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/J/+UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6AAAAAAAAAAA//MAAAAAAAAAAAAAAAD/8wAAAAD/ZwAA//X/8wAAAA//rAAAAAAAAAAAAAD/2gAAAAAAAAAAAAAAAP/i/p8AAAAAAAAAAAAA/6gAAAAA/8cAAP8+AAAAAQD6AAgACgAUABUAFgAXABgAGQAaABsAHAAdACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAgQCDAIQAjACPAJEAkwCxALIAswC0ALUAtgC3ALgAuQC6ANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAS8BMwE1ATcBOQE7AUEBQwFFAUkBSwFMAVgBWQGnAa0BsgG1AosCjAKOApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAscCyQLLAs0CzwLRAtMC1QLXAtkC2wLdAt8C4QLjAuUC5wLpAusC7QLvAvEC8wL0AvYC+AL6AvwC/gMAAwIDBAMGAwkDCwMNAw8DEQMTAxUDFwMZAxsDHQMfAyEDIwMlAycDKQMrAy0DLwMxAzMDNQM2AzgDOgM8Az4DlwOYA5kDmgObA5wDnQOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD5APmA+gD6gP/BAEEAwQYBB4EJASOBJMElwUYBRoAAQAT/xcAAQDEAA4AAQD2/80AAQDKABMAAQD2/9wAAQBbAAsAAQEc//EAAQHm/8cAAQHm//EAAQHmAA0AAgD2/8gBhf+nAAIAyv/0APb/2AACAeb/twHr//AAAgD2//UBhf+2AAIA7f+lARz/7gACAREACwFs/+YAAgD2/8gBhf+hAAMB5f/1Aeb/7gOR//UAAwBK/+4AW//qAeb/8AADAEoAEQBYADIAWwARAAQADf/mAEH/9ABh/+8BTf/tAAQADQAUAEEAEQBW/+IAYQATAAUAW/+zAeb/eQHr//EB9f/xAkH/8wAFAA0ADwBBAAwAVv/rAGEADgJB/+kABQBb/+UAuP/LAM3/5AH1/+sCQf/tAAYAEP+EABL/hAGG/4QBiv+EAY7/hAGP/4QABgDK/+oA7f/uAPb/ugD+//kBOv/sAW3/7AAGAMr/6gDt/+4A9v++AP7/+QE6/+wBbf/sAAcASgANAL7/+QDGAAsAx//qAMoADADt/8gBHP/xAAcAgf/fALX/8wC3//AAxP/qANn/3wDm/+ABbP/gAAgA9v/wAP7/+gEJ//EBIP/zATr/8QFj//MBZf/tAW3/3gAIANkAFQDtABUBSf/kAUr/5QFM/+QBYv/jAWT/4gFs/+QACABYAA4Agf9WAL7/+QDE/8QAx//aANn/cQDt/54BX//cAAkA9v+dAP7/6wEJ/9MBIP/bATr/PgFK/7oBY//wAWX/8gFt/1AACQDK/+oA7f+4APb/5wEJ//ABIP/xATr/6wFj//UBbf/sAYX/pAAKAAb/9QAL//UBhP/1AYX/9QGH//UBiP/1AYn/9QPs//UD7f/1A/D/9QAKAAb/1gAL/9YBhP/WAYX/1gGH/9YBiP/WAYn/1gPs/9YD7f/WA/D/1gAKAAb/6gAL/+oBhP/qAYX/6gGH/+oBiP/qAYn/6gPs/+oD7f/qA/D/6gAKAOb/wwD2/88A/v/wATr/zgFJ/+cBTP/fAWL/0QFk/+wBbP+gAW3/0QALADj/0QDS/9EA1v/RATn/0QFF/9EDH//RAyH/0QMj/9ED0v/RBIj/0QTQ/9EADQBc//IAXv/yAO7/8gE0//IBRP/yAV7/8gM3//IDOf/yAzv/8gPb//IEB//yBBX/8gTa//IADQD2/5oA+f/WAP7/8gEJ/9MBIP/bATr/PgFI/9YBSv+6AWP/8AFl//IBbf9QBCv/1gSL/9YADgBc/+0AXv/tAO7/7QD2/7IBNP/tAUT/7QFe/+0DN//tAzn/7QM7/+0D2//tBAf/7QQV/+0E2v/tAA8A7QAUAPIAEAD2//AA+f/wAP7/+gEBABABBAAQATr/7AFI//ABSv/iAVEAEAFt//ABcAAQBCv/8ASL//AAEQAu/+4AOf/uAqb/7gKn/+4CqP/uAqn/7gL2/+4DJf/uAyf/7gMp/+4DK//uAy3/7gMv/+4Dw//uBHP/7gR1/+4E0v/uABEALv/sADn/7AKm/+wCp//sAqj/7AKp/+wC9v/sAyX/7AMn/+wDKf/sAyv/7AMt/+wDL//sA8P/7ARz/+wEdf/sBNL/7AASANn/rgDmABIA6//gAO3/rQDv/9YA/f/fAQH/0gEH/+ABHP/OAS7/3QEw/+IBOP/gAUD/4AFK/+kBTf/aAV//vQFp/98BbAARABIAW//BALj/xQDK/7QA6v/XAPb/uQD+/+kBCf+yARz/0gEg/8gBOv+gAUr/xQFY/+QBY//MAWX/zAFt/8sBbv/vAfX/5gJB/+gAEwHj/+4B5f/1Aeb/8QHo//ICBP/yAgj/8gIg//ICIv/uAiT/8gNd/+4Dif/yA5H/9QOS/+4Dk//uBOH/7gTv/+4E8v/uBQb/8gUL/+4AEwHj/+UB5f/xAeb/6wHo/+kCBP/pAgj/6QIg/+kCIv/lAiT/6QNd/+UDif/pA5H/8QOS/+UDk//lBOH/5QTv/+UE8v/lBQb/6QUL/+UAFQBc/+0A7v/tAPb/oQD5/9EA/v/vAQn/0wEg/9sBNP/tATr/PgFE/+0BSP/RAUr/ugFe/+0BY//wAWX/8gFt/1AD2//tBAf/7QQV/+0EK//RBIv/0QAWALj/1AC+//YAwv/tAMQAEQDK/+AAzP/nAM3/5QDO/+4A2QASAOr/6QD2/9cBOv/XAUr/0wFM/9YBTf/FAVj/5wFiAA0BZAAMAW3/1gFu//IB6//pAkH/6QAWACP/vABY/+8AW//fAJr/7gC4/+UAuf/RAMQAEQDK/8gA2QATAOb/xQD2/8oBOv+UAUn/WAFK/38BTP+lAU3/3QFY//IBYv+LAWT/ygFs/3ABbf+iAeb/zQAYADoAFAA7ABkAPQAWARkAFAKqABYDMQAZAzMAFgM1ABYDnAAWA6sAFgOuABYD5AAZA+YAGQPoABkD6gAWA/sAFAQDABYEgQAWBIMAFgSFABYElwAWBNMAFATVABQE1wAZABgAOP/rAD3/8wDS/+sA1v/rATn/6wFF/+sCqv/zAx//6wMh/+sDI//rAzP/8wM1//MDnP/zA6v/8wOu//MD0v/rA+r/8wQD//MEgf/zBIP/8wSF//MEiP/rBJf/8wTQ/+sAGQBT/+gBGP/oAYUACQK8/+gCvf/oAr7/6AK//+gCwP/oAwr/6AMM/+gDDv/oA7X/6AO7/+gD1//oBB3/6AQh/+gEXP/oBF7/6ARg/+gEYv/oBGT/6ARm/+gEaP/oBHD/6ASx/+gAHAAK/+IADQAUAA7/zwBBABIASv/qAFb/2ABY/+oAYQATAG3/rgB8/80Agf+gAIb/wQCJ/8AAuP/QALz/6gC+//UAv//GAMAADQDC/+kAw//WAMb/6ADH/7oAyv/pAMz/ywDN/9oAzv/HAY3/0wJB/80AHQA4/7sAOv/tAD3/0ADS/7sA1v+7ARn/7QE5/7sBRf+7Aqr/0AMf/7sDIf+7AyP/uwMz/9ADNf/QA5z/0AOr/9ADrv/QA9L/uwPq/9AD+//tBAP/0ASB/9AEg//QBIX/0ASI/7sEl//QBND/uwTT/+0E1f/tACAABv/yAAv/8gBa//MAXf/zAL3/8wD2//UBGv/zAYT/8gGF//IBh//yAYj/8gGJ//ICxf/zAsb/8wM0//MDt//zA9r/8wPj//MD6//zA+z/8gPt//ID8P/yA/z/8wQE//MEJf/zBCf/8wQp//MEgv/zBIT/8wSG//ME1P/zBNb/8wAiAFr/9ABc//IAXf/0AF7/8wC9//QA7v/yARr/9AE0//IBRP/yAV7/8gLF//QCxv/0AzT/9AM3//MDOf/zAzv/8wO3//QD2v/0A9v/8gPj//QD6//0A/z/9AQE//QEB//yBBX/8gQl//QEJ//0BCn/9ASC//QEhP/0BIb/9ATU//QE1v/0BNr/8wAiAAb/wAAL/8AAOv/IAN7/6wDh/+cA5v/DAPb/zgD+//ABGf/IATr/zQFH/+cBSf/nAUz/3wFi/9EBZP/sAWz/oAFt/9ABhP/AAYX/wAGH/8ABiP/AAYn/wAPG/+sD7P/AA+3/wAPw/8AD+//IBCT/6wQm/+sEKP/rBCr/5wSK/+cE0//IBNX/yAAiAFr/0gBd/9IAvf/SAPb/pQD5/+EA/v/6AQn/0wEa/9IBIP/bATr/TQFI/+EBSv+7AWP/+AFl//MBbf9fAsX/0gLG/9IDNP/SA7f/0gPa/9ID4//SA+v/0gP8/9IEBP/SBCX/0gQn/9IEKf/SBCv/4QSC/9IEhP/SBIb/0gSL/+EE1P/SBNb/0gAjAFr/9ABc//AAXf/0AL3/9ADt/+8A7v/wAPL/8wD+//kBBP/zARr/9AE0//ABRP/wAVH/8wFe//ABcP/zAsX/9ALG//QDNP/0A7f/9APa//QD2//wA+P/9APr//QD/P/0BAT/9AQH//AEFf/wBCX/9AQn//QEKf/0BIL/9ASE//QEhv/0BNT/9ATW//QAJAA4/+IAPP/kANL/4gDU/+QA1v/iANn/4QDa/+QA3f/kAN7/6QDt/+QA8v/rAQT/6wEz/+QBOf/iAUP/5AFF/+IBUP/kAVH/6wFd/+QBZv/kAW//5AFw/+sDH//iAyH/4gMj/+IDrP/kA8b/6QPS/+ID0//kBAb/5AQU/+QEJP/pBCb/6QQo/+kEiP/iBND/4gAkAAb/8gAL//IAWv/1AF3/9QC9//UA9v/0AP7//AEJ//UBGv/1ATr/9QFt//UBhP/yAYX/8gGH//IBiP/yAYn/8gLF//UCxv/1AzT/9QO3//UD2v/1A+P/9QPr//UD7P/yA+3/8gPw//ID/P/1BAT/9QQl//UEJ//1BCn/9QSC//UEhP/1BIb/9QTU//UE1v/1ACgAEP8tABL/LQAl/80Asv/NALT/zQDH//IBDf/NAYb/LQGK/y0Bjv8tAY//LQKQ/80Ckf/NApL/zQKT/80ClP/NApX/zQKW/80Cx//NAsn/zQLL/80Dl//NA5//zQPH/80D8//NBAn/zQQL/80EL//NBDH/zQQz/80ENf/NBDf/zQQ5/80EO//NBD3/zQQ//80EQf/NBEP/zQRF/80Eqv/NADEAOP/jADz/5QA9/+QA0v/jANT/5QDW/+MA2f/iANr/5QDd/+UA3v/pAPL/6gEE/+oBM//lATn/4wFD/+UBRf/jAVD/5QFR/+oBXf/lAWb/5QFs/+QBb//lAXD/6gKq/+QDH//jAyH/4wMj/+MDM//kAzX/5AOc/+QDq//kA6z/5QOu/+QDxv/pA9L/4wPT/+UD6v/kBAP/5AQG/+UEFP/lBCT/6QQm/+kEKP/pBIH/5ASD/+QEhf/kBIj/4wSX/+QE0P/jADEAVv9zAFv/kgBt/i8AfP6pAIH+tgCG/z4Aif9LALj/ZwC+/7kAv/8PAMP+9ADG/ysAx/7xAMr/UgDM/vkAzf8DAM7+7ADZ/1gA5gAFAOr/vQDr/0kA7f7+AO//EwD2/2gA/f8OAP7/RgD//xMBAf8HAQIAEgEH/w4BCf8RARz/HQEg/6wBLv8VATD/PAE4/w4BOv9qAUD/SQFK/wwBTP8/AU3+8QFY/8ABX/7vAWP/MQFl/18Baf8KAWwABQFt/zABbv/VADIABP/RAFb/uQBb/8sAbf76AHz/QgCB/0kAhv+ZAIn/oQC4/7IAvv/dAL//fgDD/24Axv+OAMf/bADK/6UAzP9xAM3/dwDO/2kA2f+pAOYADwDq/+QA6/+gAO3/dADv/4AA9v+yAP3/fQD+/54A//+AAQH/eQECAA8BB/99AQn/fwEc/4YBIP/aAS7/gQEw/5gBOP99ATr/swFA/6ABSv98AUz/mgFN/2wBWP/mAV//awFj/5IBZf+tAWn/ewFsAA8Bbf+RAW7/8gAzADj/2QA6/+QAO//sAD3/3QDS/9kA1v/ZARn/5AE5/9kBRf/ZAfsADgH9AA4CQwAOAqr/3QMf/9kDIf/ZAyP/2QMx/+wDM//dAzX/3QNDAA4DRAAOA0UADgNGAA4DRwAOA0gADgNJAA4DXgAOA18ADgNgAA4DnP/dA6v/3QOu/90D0v/ZA+T/7APm/+wD6P/sA+r/3QP7/+QEA//dBIH/3QSD/90Ehf/dBIj/2QSX/90E0P/ZBNP/5ATV/+QE1//sBNwADgTjAA4E+wAOADUAG//yADj/8QA6//QAPP/0AD3/8ADS//EA1P/1ANb/8QDa//QA3f/1AN7/8wDm//EBGf/0ATP/9AE5//EBQ//0AUX/8QFQ//UBXf/0AWL/8gFk//IBZv/1AWz/8gFv//UCqv/wAx//8QMh//EDI//xAzP/8AM1//ADnP/wA6v/8AOs//QDrv/wA8b/8wPS//ED0//0A+r/8AP7//QEA//wBAb/9AQU//QEJP/zBCb/8wQo//MEgf/wBIP/8ASF//AEiP/xBJf/8ATQ//EE0//0BNX/9AA1AFH/+QBS//kAVP/5AMH/+QDs//kA7QAUAPD/+QDx//kA8//5APT/+QD1//kA9v/tAPj/+QD5/+0A+v/5APv/+QD8/9sA/v/5AQD/+QEF//kBK//5ATb/+QE6/+0BPP/5AT7/+QFI/+0BSv/tAVP/+QFV//kBV//5AVz/+QFt/+0Cu//5AwP/+QMF//kDB//5Awj/+QOx//kD1v/5A9j/+QPd//kD4v/5A/L/+QP4//kEGf/5BBv/+QQr/+0ELf/5BIv/7QSN//kEqf/5BMb/+QTI//kAOAAl/+QAPP/SAD3/0wCy/+QAtP/kAMT/4gDa/9IBDf/kATP/0gFD/9IBXf/SApD/5AKR/+QCkv/kApP/5AKU/+QClf/kApb/5AKq/9MCx//kAsn/5ALL/+QDM//TAzX/0wOX/+QDnP/TA5//5AOr/9MDrP/SA67/0wPH/+QD0//SA+r/0wPz/+QEA//TBAb/0gQJ/+QEC//kBBT/0gQv/+QEMf/kBDP/5AQ1/+QEN//kBDn/5AQ7/+QEPf/kBD//5ARB/+QEQ//kBEX/5ASB/9MEg//TBIX/0wSX/9MEqv/kADkAUf/vAFL/7wBU/+8AXP/wAMH/7wDs/+8A7f/uAO7/8ADw/+8A8f/vAPP/7wD0/+8A9f/vAPb/7gD4/+8A+v/vAPv/7wD+/+8BAP/vAQX/7wEJ//QBIP/xASv/7wE0//ABNv/vATr/7wE8/+8BPv/vAUT/8AFT/+8BVf/vAVf/7wFc/+8BXv/wAW3/7wK7/+8DA//vAwX/7wMH/+8DCP/vA7H/7wPW/+8D2P/vA9v/8APd/+8D4v/vA/L/7wP4/+8EB//wBBX/8AQZ/+8EG//vBC3/7wSN/+8Eqf/vBMb/7wTI/+8APAAG/8MAC//DAEr/8QBZ//cAWv/bAF3/2wCb//cAvf/bAML/9QDEAAoAxv/zAMr/cgDL//cBGv/bAYT/wwGF/8MBh//DAYj/wwGJ/8MCwf/3AsL/9wLD//cCxP/3AsX/2wLG/9sDJv/3Ayj/9wMq//cDLP/3Ay7/9wMw//cDNP/bA7P/9wO3/9sDuv/3A7z/9wPa/9sD4//bA+v/2wPs/8MD7f/DA/D/wwP8/9sEBP/bBCX/2wQn/9sEKf/bBHT/9wR2//cEeP/3BHr/9wR8//cEfv/3BID/9wSC/9sEhP/bBIb/2wS1//cE1P/bBNb/2wA/ACf/8wAr//MAM//zADX/8wCD//MAk//zAJj/8wCz//MAxAANANP/8wEI//MBF//zARv/8wEd//MBH//zASH/8wFB//MBav/zAlX/8wJW//MCWP/zAln/8wKX//MCof/zAqL/8wKj//MCpP/zAqX/8wLN//MCz//zAtH/8wLT//MC4f/zAuP/8wLl//MC5//zAwn/8wML//MDDf/zAz7/8wOb//MDqP/zA87/8wPR//MD/v/zBAH/8wQc//MEHv/zBCD/8wRb//MEXf/zBF//8wRh//MEY//zBGX/8wRn//MEaf/zBGv/8wRt//MEb//zBHH/8wSw//MEyf/zAEAAR//sAEj/7ABJ/+wAS//sAFX/7ACU/+wAmf/sALv/7ADI/+wAyf/sAPf/7AED/+wBHv/sASL/7AFC/+wBYP/sAWH/7AFr/+wCsv/sArP/7AK0/+wCtf/sArb/7ALO/+wC0P/sAtL/7ALU/+wC1v/sAtj/7ALa/+wC3P/sAt7/7ALg/+wC4v/sAuT/7ALm/+wC6P/sA6//7APV/+wD2f/sA9z/7AP3/+wD/f/sBAL/7AQQ/+wEEv/sBBP/7AQf/+wELv/sBEj/7ARK/+wETP/sBE7/7ARQ/+wEUv/sBFT/7ARW/+wEav/sBGz/7ARu/+wEcv/sBK3/7AS6/+wEvP/sAEAAJ//mACv/5gAz/+YANf/mAIP/5gCT/+YAmP/mALP/5gC4/8IAxAAQANP/5gEI/+YBF//mARv/5gEd/+YBH//mASH/5gFB/+YBav/mAlX/5gJW/+YCWP/mAln/5gKX/+YCof/mAqL/5gKj/+YCpP/mAqX/5gLN/+YCz//mAtH/5gLT/+YC4f/mAuP/5gLl/+YC5//mAwn/5gML/+YDDf/mAz7/5gOb/+YDqP/mA87/5gPR/+YD/v/mBAH/5gQc/+YEHv/mBCD/5gRb/+YEXf/mBF//5gRh/+YEY//mBGX/5gRn/+YEaf/mBGv/5gRt/+YEb//mBHH/5gSw/+YEyf/mAEcAEAAEABIABABH/+cASP/nAEn/5wBL/+cAVf/nAJT/5wCZ/+cAu//nAMQADwDI/+cAyf/nAPf/5wED/+cBHv/nASL/5wFC/+cBYP/nAWH/5wFr/+cBhgAEAYoABAGOAAQBjwAEArL/5wKz/+cCtP/nArX/5wK2/+cCzv/nAtD/5wLS/+cC1P/nAtb/5wLY/+cC2v/nAtz/5wLe/+cC4P/nAuL/5wLk/+cC5v/nAuj/5wOv/+cD1f/nA9n/5wPc/+cD9//nA/3/5wQC/+cEEP/nBBL/5wQT/+cEH//nBC7/5wRI/+cESv/nBEz/5wRO/+cEUP/nBFL/5wRU/+cEVv/nBGr/5wRs/+cEbv/nBHL/5wSt/+cEuv/nBLz/5wBNAAYAEAALABAADQAUAEEAEgBH/+gASP/oAEn/6ABL/+gAVf/oAGEAEwCU/+gAmf/oALv/6ADI/+gAyf/oAPf/6AED/+gBHv/oASL/6AFC/+gBYP/oAWH/6AFr/+gBhAAQAYUAEAGHABABiAAQAYkAEAKy/+gCs//oArT/6AK1/+gCtv/oAs7/6ALQ/+gC0v/oAtT/6ALW/+gC2P/oAtr/6ALc/+gC3v/oAuD/6ALi/+gC5P/oAub/6ALo/+gDr//oA9X/6APZ/+gD3P/oA+wAEAPtABAD8AAQA/f/6AP9/+gEAv/oBBD/6AQS/+gEE//oBB//6AQu/+gESP/oBEr/6ARM/+gETv/oBFD/6ARS/+gEVP/oBFb/6ARq/+gEbP/oBG7/6ARy/+gErf/oBLr/6AS8/+gATwBHAAEASAABAEkAAQBLAAEAVQABAJQAAQCZAAEAuwABAMgAAQDJAAEA7QArAPIAFAD2/+MA9wABAPn/8AD8/+YA/v/1AQMAAQEEABQBHgABASIAAQE6/9MBQgABAUj/8AFK/98BUQAUAWAAAQFhAAEBawABAW3/4wFwABQCsgABArMAAQK0AAECtQABArYAAQLOAAEC0AABAtIAAQLUAAEC1gABAtgAAQLaAAEC3AABAt4AAQLgAAEC4gABAuQAAQLmAAEC6AABA68AAQPVAAED2QABA9wAAQP3AAED/QABBAIAAQQQAAEEEgABBBMAAQQfAAEEK//wBC4AAQRIAAEESgABBEwAAQROAAEEUAABBFIAAQRUAAEEVgABBGoAAQRsAAEEbgABBHIAAQSL//AErQABBLoAAQS8AAEAUwA4/74AUf/1AFL/9QBU//UAWv/vAF3/7wC9/+8Awf/1ANL/vgDW/74A5v/JAOz/9QDw//UA8f/1APP/9QD0//UA9f/1APb/3wD4//UA+v/1APv/9QD+//UBAP/1AQX/9QEJ/+0BGv/vASD/6wEr//UBNv/1ATn/vgE6/98BPP/1AT7/9QFF/74BTP/pAVP/9QFV//UBV//1AVz/9QFj//UBbf/gArv/9QLF/+8Cxv/vAwP/9QMF//UDB//1Awj/9QMf/74DIf++AyP/vgM0/+8Dsf/1A7f/7wPS/74D1v/1A9j/9QPa/+8D3f/1A+L/9QPj/+8D6//vA/L/9QP4//UD/P/vBAT/7wQZ//UEG//1BCX/7wQn/+8EKf/vBC3/9QSC/+8EhP/vBIb/7wSI/74Ejf/1BKn/9QTG//UEyP/1BND/vgTU/+8E1v/vAGgAOP8zADr/yAA8//AAPf+sAFH/7wBS/+8AVP/vAMH/7wDS/zMA1P/1ANb/MwDa//AA3f/1AN7/6wDh/+YA5v/CAOz/7wDw/+8A8f/vAPP/7wD0/+8A9f/vAPb/zgD4/+8A+v/vAPv/7wD+/+8BAP/vAQX/7wEZ/8gBK//vATP/8AE2/+8BOf8zATr/zQE8/+8BPv/vAUP/8AFF/zMBR//mAUn/5gFM/98BUP/1AVP/7wFV/+8BV//vAVz/7wFd//ABYv/QAWT/6wFm//UBbP+fAW3/0AFv//UCqv+sArv/7wMD/+8DBf/vAwf/7wMI/+8DH/8zAyH/MwMj/zMDM/+sAzX/rAOc/6wDq/+sA6z/8AOu/6wDsf/vA8b/6wPS/zMD0//wA9b/7wPY/+8D3f/vA+L/7wPq/6wD8v/vA/j/7wP7/8gEA/+sBAb/8AQU//AEGf/vBBv/7wQk/+sEJv/rBCj/6wQq/+YELf/vBIH/rASD/6wEhf+sBIj/MwSK/+YEjf/vBJf/rASp/+8Exv/vBMj/7wTQ/zME0//IBNX/yABoAEf/tABI/7QASf+0AEv/tABMABQATwAUAFAAFABT/3oAVf+0AFf/ZABbAAsAlP+0AJn/tAC7/7QAyP+0AMn/tAD3/7QBA/+0ARj/egEe/7QBIv+0AUL/tAFg/7QBYf+0AWv/tAHR/2QCsv+0ArP/tAK0/7QCtf+0Arb/tAK8/3oCvf96Ar7/egK//3oCwP96As7/tALQ/7QC0v+0AtT/tALW/7QC2P+0Atr/tALc/7QC3v+0AuD/tALi/7QC5P+0Aub/tALo/7QDCv96Awz/egMO/3oDFv9kAxj/ZAMa/2QDHP9kAx7/ZAOv/7QDtf96A7v/egPV/7QD1/96A9n/tAPc/7QD3v9kA/f/tAP9/7QEAv+0BBD/tAQS/7QEE/+0BB3/egQf/7QEIf96BC7/tARI/7QESv+0BEz/tARO/7QEUP+0BFL/tARU/7QEVv+0BFz/egRe/3oEYP96BGL/egRk/3oEZv96BGj/egRq/7QEbP+0BG7/tARw/3oEcv+0BK3/tASx/3oEuv+0BLz/tAS+ABQEwAAUBMIAFATP/2QAagA4/+YAOv/nADz/8gA9/+cAUf/xAFL/8QBU//EAXP/xAMH/8QDS/+YA1v/mANr/8gDe/+4A4f/oAOb/5gDs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ASL/3AEr/+EBNv/hATz/4QE+/+EBQv/cAVP/4QFV/+EBV//hAVz/4QFg/9wBYf/cAWv/3AKy/9wCs//cArT/3AK1/9wCtv/cArv/4QK8/9YCvf/WAr7/1gK//9YCwP/WAsH/3QLC/90Cw//dAsT/3QLF/+ECxv/hAs7/3ALQ/9wC0v/cAtT/3ALW/9wC2P/cAtr/3ALc/9wC3v/cAuD/3ALi/9wC5P/cAub/3ALo/9wDA//hAwX/4QMH/+EDCP/hAwr/1gMM/9YDDv/WAyb/3QMo/90DKv/dAyz/3QMu/90DMP/dAzT/4QOv/9wDsf/hA7P/3QO1/9YDt//hA7r/3QO7/9YDvP/dA9X/3APW/+ED1//WA9j/4QPZ/9wD2v/hA9z/3APd/+ED4v/hA+P/4QPr/+ED8v/hA/f/3AP4/+ED/P/hA/3/3AQC/9wEBP/hBBD/3AQS/9wEE//cBBn/4QQb/+EEHf/WBB//3AQh/9YEJf/hBCf/4QQp/+EELf/hBC7/3ARI/9wESv/cBEz/3ARO/9wEUP/cBFL/3ARU/9wEVv/cBFz/1gRe/9YEYP/WBGL/1gRk/9YEZv/WBGj/1gRq/9wEbP/cBG7/3ARw/9YEcv/cBHT/3QR2/90EeP/dBHr/3QR8/90Efv/dBID/3QSC/+EEhP/hBIb/4QSN/+EEqf/hBK3/3ASx/9YEtf/dBLr/3AS8/9wExv/hBMj/4QTU/+EE1v/hAL8ABgAMAAsADABH/+gASP/oAEn/6ABKAAwAS//oAFP/6gBV/+gAWgALAF0ACwCU/+gAmf/oALv/6AC9AAsAvv/0AMT/1wDGAAsAyP/oAMn/6ADKAAwA9//oAQP/6AEY/+oBGgALAR7/6AEi/+gBQv/oAWD/6AFh/+gBa//oAYQADAGFAAwBhwAMAYgADAGJAAwB4wANAeYADQHoAA4B6f/1Aev/7AHt/+0B9f/sAfv/vwH8/+0B/f+/AgQADgIF/+0CCAAOAiAADgIh/+0CIgANAiQADgIq/+0CQf/uAkP/vwKy/+gCs//oArT/6AK1/+gCtv/oArz/6gK9/+oCvv/qAr//6gLA/+oCxQALAsYACwLO/+gC0P/oAtL/6ALU/+gC1v/oAtj/6ALa/+gC3P/oAt7/6ALg/+gC4v/oAuT/6ALm/+gC6P/oAwr/6gMM/+oDDv/qAzQACwND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/8ADSf/AA17/wANf/8ADYP/AA5f/TgOf/04Dr//rA7P/6gO1/+sDt//oA7r/6gO7/+sDvP/qA8P/DQPH/04D0gAUA9T/3gPV/+sD1//rA9n/6wPa/+gD3P/rA+P/6APr/+gD8/9OA/T/3gP3/+sD/P/oA/3/6wQC/+sEBP/oBAn/TgQK/94EC/9OBAz/3gQQ/+sEEv/rBBP/6wQd/+sEH//rBCH/6wQl/+gEJ//oBCn/6AQu/+sEL/9OBDD/3gQx/04EMv/eBDP/TgQ0/94ENf9OBDb/3gQ3/04EOP/eBDn/TgQ6/94EO/9OBDz/3gQ9/04EPv/eBD//TgRA/94EQf9OBEL/3gRD/04ERP/eBEX/TgRG/94ESP/rBEr/6wRM/+sETv/rBFD/6wRS/+sEVP/rBFb/6wRc/+sEXv/rBGD/6wRi/+sEZP/rBGb/6wRo/+sEav/rBGz/6wRu/+sEcP/rBHL/6wR0/+oEdv/qBHj/6gR6/+oEfP/qBH7/6gSA/+oEgv/oBIT/6ASG/+gEiAAUBKr/TgSr/94Erf/rBLH/6wS1/+oEuv/rBLz/6wTQABQE1P/oBNb/6ATc/8AE4//ABPv/wAACAKAABAAEAAAABgAGAAEACwAMAAIAEwATAAQAJQAqAAUALAAtAAsALwA2AA0AOAA4ABUAOgA/ABYARQBGABwASQBKAB4ATABMACAATwBPACEAUQBUACIAVgBWACYAWABYACcAWgBdACgAXwBfACwAigCKAC0AlgCWAC4AnQCdAC8AsQC1ADAAtwC5ADUAuwC7ADgAvQC+ADkAwADBADsAwwDFAD0AxwDOAEAA0gDSAEgA1ADeAEkA4ADvAFQA8QDxAGQA9gD4AGUA+wD8AGgA/gEAAGoBAwEFAG0BCgEKAHABDQENAHEBGAEaAHIBIgEiAHUBLgEwAHYBMwE1AHkBNwE3AHwBOQE5AH0BOwE7AH4BQwFEAH8BVAFUAIEBVgFWAIIBWAFYAIMBXAFeAIQBhAGFAIcBhwGJAIkB6AHoAIwB6gHrAI0B7QHtAI8B8AHwAJAB+wH9AJECQAJAAJQCQwJDAJUCVQJVAJYCVwJYAJcCiwKMAJkCjgKOAJsCkAKlAJwCqgKxALICswK2ALoCuwLAAL4CxQLNAMQCzwLPAM0C0QLRAM4C0wLTAM8C1QLVANAC1wLgANEC6QLrANsC7QLtAN4C7wLvAN8C8QLxAOAC8wLzAOEC+AL4AOIC+gL6AOMC/AL8AOQC/gL+AOUDAAMAAOYDAgMOAOcDEAMQAPQDEgMSAPUDFAMUAPYDHwMfAPcDIQMhAPgDIwMjAPkDMQMxAPoDMwM2APsDOAM4AP8DOgM6AQADQANJAQEDVANYAQsDXgNgARADZQNlARMDdwN6ARQDfgOAARgDiQOJARsDlwOcARwDnwOuASIDsQOxATIDtQO1ATMDtwO3ATQDuwO7ATUDvgO/ATYDwQPCATgDxAPKAToDzAPOAUED0APVAUQD1wPYAUoD2gPdAUwD4wPkAVAD5gPmAVID6APoAVMD6gPtAVQD8AP1AVgD9wP3AV4D+wP8AV8EAQQBAWEEAwQMAWIEDwQQAWwEEgQVAW4EHAQdAXIEIQQhAXQEIwQpAXUELwRXAXwEWQRZAaUEWwRoAaYEcARwAbQEgQSGAbUEiASIAbsEjASNAbwEkASQAb4EkgSTAb8ElQSVAcEElwSXAcIEqASsAcMErgSuAcgEsASxAckEswSzAcsEtwS5AcwEuwS7Ac8EvQS/AdAEwQTBAdMEwwTDAdQExQTLAdUEzQTNAdwE0ATQAd0E0wTXAd4E2QTZAeME2wTcAeQE4ATgAeYE4wTjAecE7gTuAegE+wT7AekFAgUCAeoFBgUGAesAAgCaAAYABgAAAAsACwABABAAEAACABIAEgADACUAKQAEACwANAAJADgAPgASAEUARwAZAEkASQAcAEwATAAdAFEAVAAeAFYAVgAiAFoAWgAjAFwAXgAkAIoAigAnAJYAlgAoALEAtAApAL0AvQAtAMEAwQAuAMcAxwAvANQA1QAwANcA1wAyANoA2gAzANwA3gA0AOAA5gA3AOwA7AA+AO4A7gA/APcA9wBAAPwA/ABBAP4A/wBCAQQBBQBEAQoBCgBGAQ0BDQBHARgBGgBIAS4BMABLATMBNQBOATcBNwBRATkBOQBSATsBOwBTAUMBRABUAVQBVABWAVYBVgBXAVgBWABYAVwBXgBZAYQBigBcAY4BjwBjAegB6ABlAe0B7QBmAfAB8QBnAfsB/QBpAg8CDwBsAh4CIABtAkACQABwAkMCQwBxAlUCVQByAlcCWABzAosCjAB1Ao4CjgB3ApACtgB4ArsCwACfAsUC1QClAtcC4AC2AukC6wDA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASABkAJAAAAA4AFQAcAAAABQAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAKAAUACgAAAAAAAAAAAAAAAAAVAAUAAAAAABUAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAABUABQASABkAFQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAAACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAAAAAAAAAAABAAEAAQABAAEAAQABAACAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgACAAIAAgALAAsACwALAAwABgAGAAYABgAGAAYABgABAAEAAQABAAEAAAAAAAAAAAADAAcABwAHAAcABwAIAAgACAAIAAkACQAEAAYABAAGAAQABgACAAEAAgABAAIAAQACAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAgABAAIAAQACAAEAAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAMAAwACAAcAAgAHAAIABwAAAAAAAAAAAAAAAAAUABEAFAARABQAEQAUABEAFAARAA0AAAANAAAADQAAAAsACAALAAgACwAIAAsACAALAAgACwAIABYAAAAMAAkADAAXAB0AFwAdABcAHQAAAAAAAgAAAAAAAAAAAAoACgAKAAoACgAKAAoABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUADgAOAA4ADgAS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AiQCJQInAikChwNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA5MDXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwUQA3UDdgN3A3gDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGBRMDhwOIA4oDiQOLA4wDjQOOA48DkAORA5IDlAOVA5YFEQUSBNwE3QTeBN8E6QTsBOoE6wTwBPEE8gTgBOEE4gT7BP4E/wUCBQQFBQIRBQcE8wT0BPUE9gT3BPgE+QT6BRQFFQUWBRcFCAUKBQsCKAUNAioFDgUMAiYCHAIiBRwFHQACBwAA+gH3AoIB4QHgAd8B3gHdAdwB2wHaAdkB2AJDAkICQQJAAjgB9gH1AfQB8wHyAfEB8AHvAe4B7QHsAesB6gHpAegB5wHmAeUB5AHjAeIB+AH5AoQChgKFAocCgwKIAmIB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CEAIRBQ8CEgITAhQCFQIWAhcCGAIZAhoCGwJLAh0CHgIfAiAFCQIhAiMCJAIlAiYCJwIoAikCKwIsAi4CLQNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QFEAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgUTA4cDiAOKA4kDiwOMA40DjgOPA5ADkQOSA5MDlAOVA5YFEQUSBNwE3QTeBN8E4AThBOIE4wTkBOUE5gTnBOgE6QTqBOsE7ATtBO4E7wTwBPEE8gTzBPQE9QT2BPcE+AIPBPkE+gT7BPwE/QT+BP8FAAUBBQIFAwUEBQUFBgUHBRQFFQUWBRcFCAUKBQsFDQIqBQ4FDAIcAiIFHAUdAAEAAQF7AAEAAQBLAAEAAQC7AAEAAQA2AAEAAQATAAEAAgMZAxoAAgbkBtgAAgbmBtgAAQbuAAEG8AABBvIAAgABABQAHQAAAAEAAgAvAE8AAQADAEkASwJ6AAIAAAABBt4AAQAGAssCzALdAt4DYANpAAEABgBNAE4C8gPfA+EEWgACAAMBlAGUAAAB1QHXAAECLwI1AAQAAgACAKgArAABASQBJwABAAEADAAnACgAKwAzADUARgBHAEgASwBTAFQAVQACAAIAFAAdAAACZQJuAAoAAgAGAE0ATQAGAE4ATgAEAvIC8gAFA98D3wADA+ED4QACBFoEWgABAAIABAAUAB0AAAJ2AnYACgKBAoEACwSeBKUADAACAAYAGgAaAAAAHAAcAAECWgJfAAICYwJjAAgCZQJuAAkCdQJ1ABMAAQAUABoAHAJaAlsCXAJdAl4CXwJjAnUCdgKBBJ4EnwSgBKEEogSjBKQEpQABBd4AAQXgAAEF4gABBeQAAQXmAAEF6AABBeoAAQXsAAEF7gABBfAAAQXyAAEF9AABBfYAAQX4AAEF+gACBfwGAgACBgIGCAACBggGDgACBg4GFAACBhQGGgACBhoGIAACBiAGJgACBiYGLAACBiwGMgACBjIGOAACBjgGPgADBj4GRAZKAAMGSAZOBlQAAwZSBlgGXgADBlwGYgZoAAMGZgZsBnIAAwZwBnYGfAADBnoGgAaGAAMGhAaKBpAABAaOBpQGmgagAAQGnAaiBqgGrgAFBqoGsAa2BrwGwgAFBrwGwgbIBs4G1AAFBs4G1AbaBuAG5gAFBuAG5gbsBvIG+AAFBvIG+Ab+BwQHCgAFBwQHCgcQBxYHHAAFBxYHHAciBygHLgAFBygHLgc0BzoHQAAFBzoHQAdGB0wHUgAGB0wHUgdYB14HZAdqAAYHYgdoB24HdAd6B4AABgd4B34HhAeKB5AHlgAGB44HlAeaB6AHpgesAAYHpAeqB7AHtge8B8IABge6B8AHxgfMB9IH2AAGB9AH1gfcB+IH6AfuAAcILgfmB+wH8gf4B/4IBAAHCCYH+ggACAYIDAgSCBgAAQDrAAoARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAIUAhgCHAIkAigCLAI0AkACSAJQAuwC8AL0AvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkAygDLAMwAzQDOAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEHATABNAE2ATgBOgE8AUIBRAFGAUoBTQFaAo0CjwKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAsgCygLMAs4C0ALSAtQC1gLYAtoC3ALeAuAC4gLkAuYC6ALqAuwC7gLwAvIC9QL3AvkC+wL9Av8DAQMDAwUDBwMKAwwDDgMQAxIDFAMWAxgDGgMcAx4DIAMiAyQDJgMoAyoDLAMuAzADMgM0AzcDOQM7Az0DPwOvA7ADsQOyA7QDtQO2A7cDuAO5A7oDuwO8A70D1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPlA+cD6QPrBAAEAgQEBBIEGQQfBCUEjwSQBJQEmAUZBRsAAQD6AAgACgAUABUAFgAXABgAGQAaABsAHAAdACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAgQCDAIQAjACPAJEAkwCxALIAswC0ALUAtgC3ALgAuQC6ANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAS8BMwE1ATcBOQE7AUEBQwFFAUkBSwFMAVgBWQGnAa0BsgG1AosCjAKOApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAscCyQLLAs0CzwLRAtMC1QLXAtkC2wLdAt8C4QLjAuUC5wLpAusC7QLvAvEC8wL0AvYC+AL6AvwC/gMAAwIDBAMGAwkDCwMNAw8DEQMTAxUDFwMZAxsDHQMfAyEDIwMlAycDKQMrAy0DLwMxAzMDNQM2AzgDOgM8Az4DlwOYA5kDmgObA5wDnQOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD5APmA+gD6gP/BAEEAwQYBB4EJASOBJMElwUYBRoBzAACAE0BzQACAFABzgADAEoATQHPAAMASgBQAAEAAQBKAcsAAgBKAdEAAgBYAdAAAgBYAAEAAwBKAFcAlQAAAAEAAQABAAEAAAADBLcAAgCtAs0AAgCpBL0AAgCtBMoAAgCpBLgAAgCtAs4AAgCpBKcAAgCpBL4AAgCtBFoAAgCtBMsAAgCpAzwAAgCpAz4AAgCpAz0AAgCpAz8AAgCpBLYAAgCpBLsAAgHKBLkAAgCtBKYAAgCpAucAAgHKA/EAAgCpBMUAAgCtAx8AAgHKBNAAAgCtBNUAAgCtBNMAAgCqAzYAAgCpBNkAAgCtBLwAAgHKBLoAAgCtA/IAAgCpBMYAAgCtAyAAAgHKBNEAAgCtBNYAAgCtBNQAAgCqAzcAAgCpBNoAAgCtBL8AAgCpAvgAAgHKBMEAAgCtAvoAAgCpAvwAAgHKBMMAAgCtAxUAAgCpAxsAAgHKBM4AAgCtA+YAAgCpBNcAAgCtA+QAAgCoBMAAAgCpAvkAAgHKBMIAAgCtAvsAAgCpAv0AAgHKBMQAAgCtAxYAAgCpAxwAAgHKBM8AAgCtA+cAAgCpBNgAAgCtA+UAAgCoAw8AAgCpAxEAAgHKBMwAAgCtBLIAAgCsAxAAAgCpAxIAAgHKBM0AAgCtBLMAAgCsAwIAAgCpAwQAAgHKBMcAAgCtBKgAAgCoAqAAAgCqAqoAAgCpBIEAAgCtA+oAAgCoBIMAAgCrBIUAAgCqAwMAAgCpAwUAAgHKBMgAAgCtBKkAAgCoArsAAgCqAsUAAgCpBIIAAgCtA+sAAgCoBIQAAgCrBIYAAgCqArgAAgCpArcAAgCoBFgAAgCrAuwAAgCqBK8AAgCsBGkAAgCpBHEAAgCtBGsAAgCoBG0AAgCrBG8AAgCqBGoAAgCpBHIAAgCtBGwAAgCoBG4AAgCrBHAAAgCqBHcAAgCpBH8AAgCtBHkAAgCoBHsAAgCrBH0AAgCqBHgAAgCpBIAAAgCtBHoAAgCoBHwAAgCrBH4AAgCqApEAAgCpBC8AAgCtApAAAgCoBDEAAgCrApMAAgCqBKoAAgCsApkAAgCpBEcAAgCtApgAAgCoBEkAAgCrBEsAAgCqBKwAAgCsAp0AAgCpBFkAAgCtApwAAgCoBFcAAgCrAusAAgCqBK4AAgCsAqwAAgCpBDAAAgCtAqsAAgCoBDIAAgCrAq4AAgCqBKsAAgCsArQAAgCpBEgAAgCtArMAAgCoBEoAAgCrBEwAAgCqBK0AAgCsAr0AAgCpBFwAAgCtArwAAgCoBF4AAgCrAr8AAgCqBLEAAgCsAsIAAgCpBHQAAgCtAsEAAgCoBHYAAgCrAyYAAgCqBLUAAgCsAqIAAgCpBFsAAgCtAqEAAgCoBF0AAgCrAqQAAgCqBLAAAgCsAqcAAgCpBHMAAgCtAqYAAgCoBHUAAgCrAyUAAgCqBLQAAgCsBMkAAwCqAKkE0gADAKoAqQACABEAJQApAAAAKwAtAAUALwA0AAgANgA7AA4APQA+ABQARQBJABYASwBNABsATwBUAB4AVgBbACQAXQBeACoAgQCBACwAgwCDAC0AhgCGAC4AiQCJAC8AjQCNADAAmACbADEA0ADQADUAAA==\",\n  \"Roboto-MediumItalic.ttf\": \"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BGoAWwRqAAkF0gA7BKkAMgQmAA4EnAA0BEYABwPWAB4H7wAJBM7/2gLe//UC3v/zAt4ACwLeABYC3gAlAt4ABQLeADQDmQCRApoBCAPCAAkEGv+HBJIAOwUZACsFAAArBBAAFAUNACsECQAUBFcACQReADkEPwAJBHb/mgHvAOgDhQEEAAD9JwPZANwD2wAWA+wA3APcANsDnwAJA4EBBAOBAQUC6ACJAugAZgLoAH4C6ACJAugAmALoAHgC6ACnBUoAbAVzAGsFVQArBawAbgWuAG0ECQCrBF8AHAQ3/4EEl//RBEn/2AQOADEDhQEFAa3/uAZmADsEiwBFAfz/AARz/6kEc//ZBHP/yQRzABMEcwBMBHMAIgRzAFcEcwAxBHMANwRzAPgCH/8EAh//BAIRACMCEf98AhEAIwQ/AAkEwQBMBBAAVgRmABAEHgA2BHIANwRuAC0EegAyBG//yAR3ADYEKAA6BGYALgQ4/58DmwCrBOYAJAOn/+8GFf9+A+gACQSZ/9sE5wAiBLYACQH4AAACowBABS8AIAUvACAEbgArBLoAnQKW/+UFJf+jBSX/owUl/6MFJf+jBSX/owUl/6MFJf+jBREAXwRjACYEYwAmBGMAJgRjACYCMgA3AjIANwIyADcCMgA3BYEAJgVZAGIFWQBiBVkAYgVZAGIFWQBiBRQAWAUUAFgFFABYBRQAWAS9AKEELwAcBC8AHAQvABwELwAcBC8AHAQvABwELwAcBA0ANwQoADoEKAA6BCgAOgQoADoCBwAjAgcAIwIHACMCBwAjBFIADQRnADgEZwA4BGcAOARnADgEZwA4BFEASgRRAEoEUQBKBFEASgPN/7wDzf+8BSX/owQvABwFJf+jBC8AHAUl/6MELwAcBREAXwQNADcFEQBfBA0ANwURAF8EDQA3BREAXwQNADcFEQAmBPUAOARjACYEKAA6BGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoFSQBmBGb/+QVJAGYEZv/5BUkAZgRm//kFSQBmBGb/+QWBACYEUAANAjIANwIHABMCMgA3AgcAIwIyADcCBwAjAjL/jgH6/3UCMgA3BoIANwPsACAETwAEAhX/BATnACYEDAARBDEAJgH6ACAEMQAmAfr/pgQxACYCkAAgBDEAJgLWACAFgQAmBFIADQWBACYEUgANBYEAJgRSAA0EUgANBVkAYgRnADgFWQBiBGcAOAVZAGIEZwA4BOIAJgK+ABEE4gAmAr7/nwTiACYCvgARBLQAJgP/ABsEtAAmA/8AGwS0ACYD/wAbBLQAJgP/ABsEtAAmA/8AGwS6AJ0ClgA/BLoAnQKWAD8EugCdAr4APwUUAFgEUQBKBRQAWARRAEoFFABYBFEASgUUAFgEUQBKBRQAWARRAEoFFABYBFEASgbVALUFwgB5BL0AoQPN/7wEvQChBK7/5QPo/+YErv/lA+j/5gSu/+UD6P/mB0X/jQaOAA4FVwAWBGMAKgRX/5YEV/+WBB4AYwR2/5oEdv+aBHb/mgR2/5oEdv+aBHb/mgR2/5oEXgA5A8IACQPCAAkDwgAJA8IACQHvABoB7wAaAe8AGgHvABoEtgAJBJkAOwSZADsEmQA7BJkAOwSZADsEZgA4BGYAOARmADgEZgA4BB4AbAR2/5oEdv+aBHb/mgReADkEXgA5BF4AOQReADkEVwAJA8IACQPCAAkDwgAJA8IACQPCAAkEgwA/BIMAPwSDAD8EgwA/BLcACQHvAA4B7wAaAe8AGgH5/5cB7wAaA7n/8wQ8AAkDmwAJA5sACQObAAkDmwAJBLYACQS2AAkEtgAJBJkAOwSZADsEmQA7BEMACQRDAAkEQwAJBBYADwQWAA8EFgAPBBYADwQeAGMEHgBjBB4AYwRmADgEZgA4BGYAOARmADgEZgA4BGYAOAXaAIsEHgBsBB4AbAQL/9YEC//WBAv/1gUl/6MEx/+6BeX/wgKW/8YFbQAmBSH/uAVEAB4CkAAJBSX/owTmACYEYwAmBK7/5QWBACYCMgA3BOcAJgbJACYFgQAmBVkAYgT0ACYEugCdBL0AoQTm/8ACMgA3BL0AoQRhADsEQwAoBGMAEQKQAGYEPABXBHcAIQRnADgEnf/eA9oAZAQ4/58CkABEBDwAVwRnADgEPABXBmEAUgRjACYEUgArBLQAJgIyADcCMgA3BE8ABAUAACsE5wAmBOQAmQUl/6ME5gAmBFIAKwRjACYFegAlBskAJgWBACYFWQBiBYIAKwT0ACYFEQBfBLoAnQTm/8AELwAcBCgAOgRvABcEZwA4BF3/yAQNADcDzf+8A+j/ugQoADoDQQAWA/8AGwH6ACACBwAjAfL/AgRKACIDzf+8BtUAtQXCAHkG1QC1BcIAeQbVALUFwgB5BL0AoQPN/7wBTACRAnoAnQQbADMCFf8EAa0AjQbJACYGwwAPBSX/owQvABwEYwAmBXoAJQQoADoEbwAXBYUAdgWfAD8E8QCoA+4AdQg0ADgJJgBiBLYAHwP4ABcFEQBfBA0ANwS9AKED7QB1AjIANwdu/6QGVf+wAjIANwUl/6MELwAcBSX/owQvABwHRf+NBo4ADgRjACYEKAA6BWIASwQZADQEGQA0B27/pAZV/7AEtgAfA/gAFwV6ACUEbwAXBXoAJQRvABcFWQBiBGcAOAVQAGEEZQA0BVAAYQRlADQFIABIBBkAIATkAJkDzf+8BOQAmQPN/7wE5ACZA83/vAVaAMQEQwBtBsUALAZIACMEXwA4BSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoEYwAmBCgAOgIyADcCBwAjAjL//wH6/+MFWQBiBGcAOAVZAGIEZwA4BVkAYgRnADgFWQBiBGcAOAVZAGIEZwA4BVkAYgRnADgFWQBiBGcAOAVmAFwEegA0BWYAXAR6ADQFZgBcBHoANAVmAFwEegA0BWYAXAR6ADQFFABYBFEASgUUAFgEUQBKBXcAWATAAEoFdwBYBMAASgV3AFgEwABKBXcAWATAAEoFdwBYBMAASgS9AKEDzf+8BL0AoQPN/7wEvQChA83/vAR9//QEugCdA9sAVAVaAMQEQwBtBFIAKwNBABYF7ABVBKD/8gRQAA0E2wAkBNsAJARSAAADQf/HBRQAPwQkACgEvQChA+0AUgTm/8AD6P+6BEMAKARG/8IGBAB8BGkADQRpACYEaQANBGkAWAR9AHEEkQBLBH0AjASRAHMFSQBmBGb/+QWBACYEUgANBSX/owQvABwEYwAmBCgAOgIy/88CB/+ABVkAYgRnADgE4gAmAr4ADAUUAFgEUQBKBMj/hQTmACYEXQAQBREAJgRfADgFEQAmBF8AOAWBACYEUAANBOcAJgQMABEE5wAmBAwAEQQxACYB+v/jBskAJgbDAA8FgQAm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AGQAaQB1AG0AIABJAHQAYQBsAGkAYwBWAGUAcgBzAGkAbwBuACAAMwAuADAAMAA1ADsAIAAyADAAMgAyAFIAbwBiAG8AdABvAC0ATQBlAGQAaQB1AG0ASQB0AGEAbABpAGMAUgBvAGIAbwB0AG8AIABpAHMAIABhACAAdAByAGEAZABlAG0AYQByAGsAIABvAGYAIABHAG8AbwBnAGwAZQAuAEcAbwBvAGcAbABlAEMAaAByAGkAcwB0AGkAYQBuACAAUgBvAGIAZQByAHQAcwBvAG4ARwBvAG8AZwBsAGUALgBjAG8AbQBMAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAEEAcABhAGMAaABlACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADIALgAwAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBhAHAAYQBjAGgAZQAuAG8AcgBnAC8AbABpAGMAZQBuAHMAZQBzAC8ATABJAEMARQBOAFMARQAtADIALgAwAFIAbwBiAG8AdABvAE0AZQBkAGkAdQBtACAASQB0AGEAbABpAGMAAAADAAD/9AAA/2oAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgAIAAj//wAPAAEAAgAOAAAAAAAAAigAAgBZACUAPgABAEQAXgABAGoAagABAHAAcAABAHUAdQABAIEAgQABAIMAgwABAIYAhgABAIkAiQABAIsAlgABAJgAnwABAKEAowABAKUApgABAKgArQADALEAsQABALoAuwABAL8AvwABAMEAwQABAMMAxAABAMcAxwABAMsAywABAM0AzgABANAA0QABANMA0wABANoA3gABAOEA4QABAOUA5QABAOcA6QABAOsA+wABAP0A/QABAP8BAQABAQMBAwABAQgBCQABARYBGgABARwBHAABASABIgABASQBJwADASoBKwABATMBNAABATYBNgABATsBPAABAUEBRAABAUcBSAABAUsBTQABAVEBUQABAVQBWAABAV0BXgABAWIBYgABAWQBZAABAWgBaAABAWoBbAABAW4BbgABAXABcAABAcsB0QACAeIB9gABAfoB+gABAgMCAwABAgUCBQABAgwCDgABAhACEQABAhMCEwABAhcCFwABAhkCGwABAiECIQABAiYCKAAB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/+gEX//oBGH/6ARj/+gEZf/oBGf/6ARp/+gEa//oBG3/6ARv/+gEcf/oBIH/3wSD/98Ehf/fBIj/4ASK/+EEi//gBJf/3wSqABAEsP/oBMn/6ATQ/+AE0//gBNX/4AC6AEf/3ABI/9wASf/cAEv/3ABR/+EAUv/hAFP/1gBU/+EAVf/cAFn/3QBa/+EAXf/hAJT/3ACZ/9wAm//dALv/3AC9/+EAvv/1AL//5gDB/+EAwv/rAMP/6QDF//AAxv/nAMj/3ADJ/9wAyv/jAMv/3QDM/84Azf/UAM7/2wDs/+EA8P/hAPH/4QDz/+EA9P/hAPX/4QD3/9wA+P/hAPr/4QD7/+EA/v/hAQD/4QED/9wBBf/hARj/1gEa/+EBHv/cASL/3AEr/+EBNv/hATz/4QE+/+EBQv/cAVP/4QFV/+EBV//hAVz/4QFg/9wBYf/cAWv/3AKy/9wCs//cArT/3AK1/9wCtv/cArv/4QK8/9YCvf/WAr7/1gK//9YCwP/WAsH/3QLC/90Cw//dAsT/3QLF/+ECxv/hAs7/3ALQ/9wC0v/cAtT/3ALW/9wC2P/cAtr/3ALc/9wC3v/cAuD/3ALi/9wC5P/cAub/3ALo/9wDA//hAwX/4QMH/+EDCP/hAwr/1gMM/9YDDv/WAyb/3QMo/90DKv/dAyz/3QMu/90DMP/dAzT/4QOv/9wDsf/hA7P/3QO1/9YDt//hA7r/3QO7/9YDvP/dA9X/3APW/+ED1//WA9j/4QPZ/9wD2v/hA9z/3APd/+ED4v/hA+P/4QPr/+ED8v/hA/f/3AP4/+ED/P/hA/3/3AQC/9wEBP/hBBD/3AQS/9wEE//cBBn/4QQb/+EEHf/WBB//3AQh/9YEJf/hBCf/4QQp/+EELf/hBC7/3ARI/9wESv/cBEz/3ARO/9wEUP/cBFL/3ARU/9wEVv/cBFz/1gRe/9YEYP/WBGL/1gRk/9YEZv/WBGj/1gRq/9wEbP/cBG7/3ARw/9YEcv/cBHT/3QR2/90EeP/dBHr/3QR8/90Efv/dBID/3QSC/+EEhP/hBIb/4QSN/+EEqf/hBK3/3ASx/9YEtf/dBLr/3AS8/9wExv/hBMj/4QTU/+EE1v/hAL8ABgAMAAsADABH/+gASP/oAEn/6ABKAAwAS//oAFP/6gBV/+gAWgALAF0ACwCU/+gAmf/oALv/6AC9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/8AB/f/AAkP/wAKQ/04Ckf9OApL/TgKT/04ClP9OApX/TgKW/04Cq//eAqz/3gKt/94Crv/eAq//3gKw/94Csf/eArL/6wKz/+sCtP/rArX/6wK2/+sCvP/rAr3/6wK+/+sCv//rAsD/6wLB/+oCwv/qAsP/6gLE/+oCxf/oAsb/6ALH/04CyP/eAsn/TgLK/94Cy/9OAsz/3gLO/+sC0P/rAtL/6wLU/+sC1v/rAtj/6wLa/+sC3P/rAt7/6wLg/+sC4v/rAuT/6wLm/+sC6P/rAvb/DQMK/+sDDP/rAw7/6wMfABQDIQAUAyMAFAMm/+oDKP/qAyr/6gMs/+oDLv/qAzD/6gM0/+gDQ//AA0T/wANF/8ADRv/AA0f/wANI/8ADSf/AA17/wANf/8ADYP/AA5f/TgOf/04Dr//rA7P/6gO1/+sDt//oA7r/6gO7/+sDvP/qA8P/DQPH/04D0gAUA9T/3gPV/+sD1//rA9n/6wPa/+gD3P/rA+P/6APr/+gD8/9OA/T/3gP3/+sD/P/oA/3/6wQC/+sEBP/oBAn/TgQK/94EC/9OBAz/3gQQ/+sEEv/rBBP/6wQd/+sEH//rBCH/6wQl/+gEJ//oBCn/6AQu/+sEL/9OBDD/3gQx/04EMv/eBDP/TgQ0/94ENf9OBDb/3gQ3/04EOP/eBDn/TgQ6/94EO/9OBDz/3gQ9/04EPv/eBD//TgRA/94EQf9OBEL/3gRD/04ERP/eBEX/TgRG/94ESP/rBEr/6wRM/+sETv/rBFD/6wRS/+sEVP/rBFb/6wRc/+sEXv/rBGD/6wRi/+sEZP/rBGb/6wRo/+sEav/rBGz/6wRu/+sEcP/rBHL/6wR0/+oEdv/qBHj/6gR6/+oEfP/qBH7/6gSA/+oEgv/oBIT/6ASG/+gEiAAUBKr/TgSr/94Erf/rBLH/6wS1/+oEuv/rBLz/6wTQABQE1P/oBNb/6ATc/8AE4//ABPv/wAACAKAABAAEAAAABgAGAAEACwAMAAIAEwATAAQAJQAqAAUALAAtAAsALwA2AA0AOAA4ABUAOgA/ABYARQBGABwASQBKAB4ATABMACAATwBPACEAUQBUACIAVgBWACYAWABYACcAWgBdACgAXwBfACwAigCKAC0AlgCWAC4AnQCdAC8AsQC1ADAAtwC5ADUAuwC7ADgAvQC+ADkAwADBADsAwwDFAD0AxwDOAEAA0gDSAEgA1ADeAEkA4ADvAFQA8QDxAGQA9gD4AGUA+wD8AGgA/gEAAGoBAwEFAG0BCgEKAHABDQENAHEBGAEaAHIBIgEiAHUBLgEwAHYBMwE1AHkBNwE3AHwBOQE5AH0BOwE7AH4BQwFEAH8BVAFUAIEBVgFWAIIBWAFYAIMBXAFeAIQBhAGFAIcBhwGJAIkB6AHoAIwB6gHrAI0B7QHtAI8B8AHwAJAB+wH9AJECQAJAAJQCQwJDAJUCVQJVAJYCVwJYAJcCiwKMAJkCjgKOAJsCkAKlAJwCqgKxALICswK2ALoCuwLAAL4CxQLNAMQCzwLPAM0C0QLRAM4C0wLTAM8C1QLVANAC1wLgANEC6QLrANsC7QLtAN4C7wLvAN8C8QLxAOAC8wLzAOEC+AL4AOIC+gL6AOMC/AL8AOQC/gL+AOUDAAMAAOYDAgMOAOcDEAMQAPQDEgMSAPUDFAMUAPYDHwMfAPcDIQMhAPgDIwMjAPkDMQMxAPoDMwM2APsDOAM4AP8DOgM6AQADQANJAQEDVANYAQsDXgNgARADZQNlARMDdwN6ARQDfgOAARgDiQOJARsDlwOcARwDnwOuASIDsQOxATIDtQO1ATMDtwO3ATQDuwO7ATUDvgO/ATYDwQPCATgDxAPKAToDzAPOAUED0APVAUQD1wPYAUoD2gPdAUwD4wPkAVAD5gPmAVID6APoAVMD6gPtAVQD8AP1AVgD9wP3AV4D+wP8AV8EAQQBAWEEAwQMAWIEDwQQAWwEEgQVAW4EHAQdAXIEIQQhAXQEIwQpAXUELwRXAXwEWQRZAaUEWwRoAaYEcARwAbQEgQSGAbUEiASIAbsEjASNAbwEkASQAb4EkgSTAb8ElQSVAcEElwSXAcIEqASsAcMErgSuAcgEsASxAckEswSzAcsEtwS5AcwEuwS7Ac8EvQS/AdAEwQTBAdMEwwTDAdQExQTLAdUEzQTNAdwE0ATQAd0E0wTXAd4E2QTZAeME2wTcAeQE4ATgAeYE4wTjAecE7gTuAegE+wT7AekFAgUCAeoFBgUGAesAAgCaAAYABgAAAAsACwABABAAEAACABIAEgADACUAKQAEACwANAAJADgAPgASAEUARwAZAEkASQAcAEwATAAdAFEAVAAeAFYAVgAiAFoAWgAjAFwAXgAkAIoAigAnAJYAlgAoALEAtAApAL0AvQAtAMEAwQAuAMcAxwAvANQA1QAwANcA1wAyANoA2gAzANwA3gA0AOAA5gA3AOwA7AA+AO4A7gA/APcA9wBAAPwA/ABBAP4A/wBCAQQBBQBEAQoBCgBGAQ0BDQBHARgBGgBIAS4BMABLATMBNQBOATcBNwBRATkBOQBSATsBOwBTAUMBRABUAVQBVABWAVYBVgBXAVgBWABYAVwBXgBZAYQBigBcAY4BjwBjAegB6ABlAe0B7QBmAfAB8QBnAfsB/QBpAg8CDwBsAh4CIABtAkACQABwAkMCQwBxAlUCVQByAlcCWABzAosCjAB1Ao4CjgB3ApACtgB4ArsCwACfAsUC1QClAtcC4AC2AukC6wDAAu0C7QDDAu8C7wDEAvEC8QDFAvMC8wDGAvYC9gDHAvgC+ADIAvoC+gDJAvwC/ADKAv4C/gDLAwADAADMAwIDDgDNAxADEADaAxIDEgDbAxQDFADcAx8DHwDdAyEDIQDeAyMDIwDfAyUDJQDgAycDJwDhAykDKQDiAysDKwDjAy0DLQDkAy8DLwDlAzEDMQDmAzMDOwDnA0ADSQDwA1QDWAD6A14DYAD/A2UDZQECA3YDegEDA34DgAEIA4kDiQELA5cDnAEMA58DrgESA7EDsQEiA7UDtQEjA7cDtwEkA7sDuwElA74DvwEmA8EDygEoA8wDzgEyA9AD1QE1A9cD3QE7A+MD5AFCA+YD5gFEA+gD6AFFA+oD7QFGA/AD9QFKA/cD9wFQA/sD/AFRBAEEDAFTBA8EEAFfBBIEFQFhBBwEHQFlBCEEIQFnBCMEKQFoBC8EVwFvBFkEWQGYBFsEaAGZBHAEcAGnBHMEcwGoBHUEdQGpBIEEhgGqBIgEiAGwBIwEjQGxBJAEkAGzBJIEkwG0BJUElQG2BJcElwG3BKgErAG4BK4ErgG9BLAEsQG+BLMEswHABLcEuQHBBLsEuwHEBL0EvwHFBMEEwQHIBMMEwwHJBMUEywHKBM0EzQHRBNAE0AHSBNIE1wHTBNkE3AHZBOAE4AHdBOME4wHeBOkE6QHfBO4E7gHgBPkE+QHhBPsE+wHiBQIFAgHjBQYFBgHkAAIBdAAGAAYADwALAAsADwAQABAAGgASABIAGgAlACUAAgAmACYAJAAnACcAEAAoACgAAQApACkABAAuAC4ACAAv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AAAABAAAAAAAAAAAAAAAAAAAAAAAAAACAAcAGgAJAAIAAAACAAEAAgAAAAIAAQAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAABAAEwAAAAMAAAAAAA0AAAAAAAMAAAADAAAAAAACAAEAEAATAA0AAAAgACIAAAAAAAAAAAAAAAAAAAAeACEAAAADAAAAAwAAAAMAAAAAAAAAAAADABAAEwAAAAEAAQAAAAAAAAAAAB4AAAAAAAAAAgABAAAAAAAAAB4AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAGwAAAA8ADwAYAA8ADwAPABgAAAAAAAAAGAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASABkAJAAAAA4AFQAcAAAABQAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAKAAUACgAAAAAAAAAAAAAAAAAVAAUAAAAAABUAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAABUABQASABkAFQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAAACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAAAAAAAAAAABAAEAAQABAAEAAQABAACAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgACAAIAAgALAAsACwALAAwABgAGAAYABgAGAAYABgABAAEAAQABAAEAAAAAAAAAAAADAAcABwAHAAcABwAIAAgACAAIAAkACQAEAAYABAAGAAQABgACAAEAAgABAAIAAQACAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAgABAAIAAQACAAEAAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAMAAwACAAcAAgAHAAIABwAAAAAAAAAAAAAAAAAUABEAFAARABQAEQAUABEAFAARAA0AAAANAAAADQAAAAsACAALAAgACwAIAAsACAALAAgACwAIABYAAAAMAAkADAAXAB0AFwAdABcAHQAAAAAAAgAAAAAAAAAAAAoACgAKAAoACgAKAAoABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUADgAOAA4ADgASAAoACgAKAAUABQAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAcABwAHAAcAAAAFQAAAA4ADgAOAA4ADgAOACQAEgASAAAAAAAAAAQAAAAAAAAAAgAMAAAAAAAEAAAAAAAXAAAAAAAAAAAAAAACAAAAAAAMABAAAAAMAAEAAAADAAAACAAAAAcAAAAJAAAAAAAIAAcACAAAAAAAAAAAAAAAAAAjAAAAAAAfAAQAAAAAAAAAAAAAAAAAAgAAAAAAAgANABAABgABAAMABwADAAEACQATAAEAAwARAAAAAAAAAAMACQAWAAAAFgAAABYAAAAMAAkADwAPAAAAAAAPAAAAAwAEAAYAAAAAAAEAAwAAAAAAGgAJAAEAAgAAAAAAAgABAAwACQAAABAAEwAAAAQABgAEAAYAAAAAAAAAAQAAAAEAAQAQABMAAAAAAAAAAwAAAAMAAgAHAAIAAQACAAcAAAAAAB8ACQAfAAkAHwAJACAAIgAAAAMAAQAEAAYABAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAgAHAAIABwACAAcAAgAHAAIABwACAAcAAgAHAAIAAQACAAEAAgABAAIABwACAAEACwAIAAsACAAAAAgAAAAIAAAACAAAAAgAAAAIAAwACQAMAAkADAAJAAAADQAAACAAIgAAAAMAAAAA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BjIGOgX8BoYHVAXABnIGQgYCB2QGCAZKBpIGDgccBcQFyAYUByoFzAXQBdQGUgZaBhoGngc4BdgGfAZiBiAHRgYmBmoGqgYsBdwF4AXkBegGtgbCBs4G2gbmBewAAgcCAOsCggJDAkICQQJAAjgB9gH1AfQB8wHyAfEB8AHvAe4B7QHsAesB6gHpAegB5wHmAeUB5AHjAeICdAKEA0EChgKFA0AB8wKDAogCYgTjBOQB+gH7BOUE5gTnAfwE6AH9Af4B/wTtAgACAATuBO8CAQICAgMCCgT8BP0CCwIMAg0CDgIPAhAFAAUBBQMFBgUPAhICEwIUAhUCFgIXAhgCGQIaAhsCBAIFAgYCBwIIAgkCSwIdAh4CHwIgBQkCIQIjAiQCJQInAikChwNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA5MDXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwUQA3UDdgN3A3gDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGBRMDhwOIA4oDiQOLA4wDjQOOA48DkAORA5IDlAOVA5YFEQUSBNwE3QTeBN8E6QTsBOoE6wTwBPEE8gTgBOEE4gT7BP4E/wUCBQQFBQIRBQcE8wT0BPUE9gT3BPgE+QT6BRQFFQUWBRcFCAUKBQsCKAUNAioFDgUMAiYCHAIiBRwFHQACBwAA+gH3AoIB4QHgAd8B3gHdAdwB2wHaAdkB2AJDAkICQQJAAjgB9gH1AfQB8wHyAfEB8AHvAe4B7QHsAesB6gHpAegB5wHmAeUB5AHjAeIB+AH5AoQChgKFAocCgwKIAmIB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CEAIRBQ8CEgITAhQCFQIWAhcCGAIZAhoCGwJLAh0CHgIfAiAFCQIhAiMCJAIlAiYCJwIoAikCKwIsAi4CLQNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QFEAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgUTA4cDiAOKA4kDiwOMA40DjgOPA5ADkQOSA5MDlAOVA5YFEQUSBNwE3QTeBN8E4AThBOIE4wTkBOUE5gTnBOgE6QTqBOsE7ATtBO4E7wTwBPEE8gTzBPQE9QT2BPcE+AIPBPkE+gT7BPwE/QT+BP8FAAUBBQIFAwUEBQUFBgUHBRQFFQUWBRcFCAUKBQsFDQIqBQ4FDAIcAiIFHAUdAAEAAQF7AAEAAQBLAAEAAQC7AAEAAQA2AAEAAQATAAEAAgMZAxoAAgbkBtgAAgbmBtgAAQbuAAEG8AABBvIAAgABABQAHQAAAAEAAgAvAE8AAQADAEkASwJ6AAIAAAABBt4AAQAGAssCzALdAt4DYANpAAEABgBNAE4C8gPfA+EEWgACAAMBlAGUAAAB1QHXAAECLwI1AAQAAgACAKgArAABASQBJwABAAEADAAnACgAKwAzADUARgBHAEgASwBTAFQAVQACAAIAFAAdAAACZQJuAAoAAgAGAE0ATQAGAE4ATgAEAvIC8gAFA98D3wADA+ED4QACBFoEWgABAAIABAAUAB0AAAJ2AnYACgKBAoEACwSeBKUADAACAAYAGgAaAAAAHAAcAAECWgJfAAICYwJjAAgCZQJuAAkCdQJ1ABMAAQAUABoAHAJaAlsCXAJdAl4CXwJjAnUCdgKBBJ4EnwSgBKEEogSjBKQEpQABBd4AAQXgAAEF4gABBeQAAQXmAAEF6AABBeoAAQXsAAEF7gABBfAAAQXyAAEF9AABBfYAAQX4AAEF+gACBfwGAgACBgIGCAACBggGDgACBg4GFAACBhQGGgACBhoGIAACBiAGJgACBiYGLAACBiwGMgACBjIGOAACBjgGPgADBj4GRAZKAAMGSAZOBlQAAwZSBlgGXgADBlwGYgZoAAMGZgZsBnIAAwZwBnYGfAADBnoGgAaGAAMGhAaKBpAABAaOBpQGmgagAAQGnAaiBqgGrgAFBqoGsAa2BrwGwgAFBrwGwgbIBs4G1AAFBs4G1AbaBuAG5gAFBuAG5gbsBvIG+AAFBvIG+Ab+BwQHCgAFBwQHCgcQBxYHHAAFBxYHHAciBygHLgAFBygHLgc0BzoHQAAFBzoHQAdGB0wHUgAGB0wHUgdYB14HZAdqAAYHYgdoB24HdAd6B4AABgd4B34HhAeKB5AHlgAGB44HlAeaB6AHpgesAAYHpAeqB7AHtge8B8IABge6B8AHxgfMB9IH2AAGB9AH1gfcB+IH6AfuAAcILgfmB+wH8gf4B/4IBAAHCCYH+ggACAYIDAgSCBgAAQDrAAoARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAIUAhgCHAIkAigCLAI0AkACSAJQAuwC8AL0AvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkAygDLAMwAzQDOAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEHATABNAE2ATgBOgE8AUIBRAFGAUoBTQFaAo0CjwKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAsgCygLMAs4C0ALSAtQC1gLYAtoC3ALeAuAC4gLkAuYC6ALqAuwC7gLwAvIC9QL3AvkC+wL9Av8DAQMDAwUDBwMKAwwDDgMQAxIDFAMWAxgDGgMcAx4DIAMiAyQDJgMoAyoDLAMuAzADMgM0AzcDOQM7Az0DPwOvA7ADsQOyA7QDtQO2A7cDuAO5A7oDuwO8A70D1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPlA+cD6QPrBAAEAgQEBBIEGQQfBCUEjwSQBJQEmAUZBRsAAQD6AAgACgAUABUAFgAXABgAGQAaABsAHAAdACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAgQCDAIQAjACPAJEAkwCxALIAswC0ALUAtgC3ALgAuQC6ANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAS8BMwE1ATcBOQE7AUEBQwFFAUkBSwFMAVgBWQGnAa0BsgG1AosCjAKOApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAscCyQLLAs0CzwLRAtMC1QLXAtkC2wLdAt8C4QLjAuUC5wLpAusC7QLvAvEC8wL0AvYC+AL6AvwC/gMAAwIDBAMGAwkDCwMNAw8DEQMTAxUDFwMZAxsDHQMfAyEDIwMlAycDKQMrAy0DLwMxAzMDNQM2AzgDOgM8Az4DlwOYA5kDmgObA5wDnQOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD5APmA+gD6gP/BAEEAwQYBB4EJASOBJMElwUYBRoBzAACAE0BzQACAFABzgADAEoATQHPAAMASgBQAAEAAQBKAcsAAgBKAdEAAgBYAdAAAgBYAAEAAwBKAFcAlQAAAAEAAQABAAEAAAADBLcAAgCtAs0AAgCpBL0AAgCtBMoAAgCpBLgAAgCtAs4AAgCpBKcAAgCpBL4AAgCtBFoAAgCtBMsAAgCpAzwAAgCpAz4AAgCpAz0AAgCpAz8AAgCpBLYAAgCpBLsAAgHKBLkAAgCtBKYAAgCpAucAAgHKA/EAAgCpBMUAAgCtAx8AAgHKBNAAAgCtBNUAAgCtBNMAAgCqAzYAAgCpBNkAAgCtBLwAAgHKBLoAAgCtA/IAAgCpBMYAAgCtAyAAAgHKBNEAAgCtBNYAAgCtBNQAAgCqAzcAAgCpBNoAAgCtBL8AAgCpAvgAAgHKBMEAAgCtAvoAAgCpAvwAAgHKBMMAAgCtAxUAAgCpAxsAAgHKBM4AAgCtA+YAAgCpBNcAAgCtA+QAAgCoBMAAAgCpAvkAAgHKBMIAAgCtAvsAAgCpAv0AAgHKBMQAAgCtAxYAAgCpAxwAAgHKBM8AAgCtA+cAAgCpBNgAAgCtA+UAAgCoAw8AAgCpAxEAAgHKBMwAAgCtBLIAAgCsAxAAAgCpAxIAAgHKBM0AAgCtBLMAAgCsAwIAAgCpAwQAAgHKBMcAAgCtBKgAAgCoAqAAAgCqAqoAAgCpBIEAAgCtA+oAAgCoBIMAAgCrBIUAAgCqAwMAAgCpAwUAAgHKBMgAAgCtBKkAAgCoArsAAgCqAsUAAgCpBIIAAgCtA+sAAgCoBIQAAgCrBIYAAgCqArgAAgCpArcAAgCoBFgAAgCrAuwAAgCqBK8AAgCsBGkAAgCpBHEAAgCtBGsAAgCoBG0AAgCrBG8AAgCqBGoAAgCpBHIAAgCtBGwAAgCoBG4AAgCrBHAAAgCqBHcAAgCpBH8AAgCtBHkAAgCoBHsAAgCrBH0AAgCqBHgAAgCpBIAAAgCtBHoAAgCoBHwAAgCrBH4AAgCqApEAAgCpBC8AAgCtApAAAgCoBDEAAgCrApMAAgCqBKoAAgCsApkAAgCpBEcAAgCtApgAAgCoBEkAAgCrBEsAAgCqBKwAAgCsAp0AAgCpBFkAAgCtApwAAgCoBFcAAgCrAusAAgCqBK4AAgCsAqwAAgCpBDAAAgCtAqsAAgCoBDIAAgCrAq4AAgCqBKsAAgCsArQAAgCpBEgAAgCtArMAAgCoBEoAAgCrBEwAAgCqBK0AAgCsAr0AAgCpBFwAAgCtArwAAgCoBF4AAgCrAr8AAgCqBLEAAgCsAsIAAgCpBHQAAgCtAsEAAgCoBHYAAgCrAyYAAgCqBLUAAgCsAqIAAgCpBFsAAgCtAqEAAgCoBF0AAgCrAqQAAgCqBLAAAgCsAqcAAgCpBHMAAgCtAqYAAgCoBHUAAgCrAyUAAgCqBLQAAgCsBMkAAwCqAKkE0gADAKoAqQACABEAJQApAAAAKwAtAAUALwA0AAgANgA7AA4APQA+ABQARQBJABYASwBNABsATwBUAB4AVgBbACQAXQBeACoAgQCBACwAgwCDAC0AhgCGAC4AiQCJAC8AjQCNADAAmACbADEA0ADQADUAAA==\",\n  \"Roboto-Regular.ttf\": \"AAEAAAARAQAABAAQR0RFRqWLoiAAAb8IAAACWEdQT1PInCKzAAHBYAAAZfhHU1VChRYO9AACJ1gAABX2T1MvMpeDsYsAAAGYAAAAYGNtYXDOyFo6AAAWdAAABoJjdnQgO/gmfQAAL1AAAAD+ZnBnbagFhDIAABz4AAAPhmdhc3AACAAZAAG+/AAAAAxnbHlmnLrJSwAAOpAAAYGgaGVhZAZzHSoAAAEcAAAANmhoZWEKugrAAAABVAAAACRobXR45eWbKgAAAfgAABR8bG9jYQ+pa9gAADBQAAAKQG1heHAIzxDGAAABeAAAACBuYW1lOEJpvQABvDAAAAKqcG9zdP9tAGQAAb7cAAAAIHByZXB5WM7TAAAsgAAAAs4AAQAAAAMBSPgkVmdfDzz1ABsIAAAAAADE8BEuAAAAAN8Gv276Gv3VCTEIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJSvoa/koJMQABAAAAAAAAAAAAAAAAAAAFHwABAAAFHwCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAQAAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA4wAZAAAAAAAAAAAAfwAAAH8AAACEAChApAAiQTtAHcEfwBuBdwAaQT6AGYBZgBoAr0AhgLJACcDcgAcBIoATgGTAB0CNgAmAhwAkANNABMEfwBzBH8AqwR/AF4EfwBfBH8ANQR/AJoEfwCFBH8ATgR/AHEEfwBkAfAAhQGxACkEEQBIBGQAmAQvAIcDyABLBy8AbQU4AB0E/ACpBTUAeAVAAKkEjACpBGwAqQVzAHoFtQCpAi0AtwRqADUFBQCpBE8AqQb8AKkFtQCpBYEAdwUMAKkFgQBuBO4AqQTAAFEExgAyBTAAjAUYAB0HGQA9BQQAOgTOAA8EywBXAh8AkwNJACkCHwAKA1gAQAOcAAQCeQA5BFoAbQR+AIwEMABdBIMAXwQ+AF0CyAA9BH4AYQRoAI0B8gCOAer/vgQOAI0B8gCcBwQAiwRrAI0EkABcBH4AjASMAF8CtgCNBCEAXwKeAAkEaQCJA+AAIQYDACsD+AAqA8kAFgP4AFkCtQBAAfQAsAK1ABQFcQCDAfQAiwRhAGkEpwBbBbUAaQQ0AA8B7ACUBOgAWwNZAGUGSQBcA5QAkwPBAGUEbgB/BkoAWwOrAI8C/QCDBEcAYQLvAEIC7wA/AoIAewSJAJsD6gBEAhcAlAH8AHQC7wB7A6QAewPAAGcF3ABVBjUAUAY5AHADygBEB3r/8QRFAFkFgQB3BLoApwTCAIwGwgBPBLEAfgSSAEcEiQBcBJwAlQTIAF8FmwAeAfsAnAR0AJsETwAjAioAIwWLAKIEiQCSB6EAaQdEAGEB/AChBYcAXgK6/+MFfwBmBJMAXAWQAIwE8wCJAgT/tAQ4AGMDxACqA44AjgOrAI8DawCCAfIAjgKuAHkCKwAyA8YAewL8AF8CWgB/AAD8pwAA/W4AAPyKAAD9XQAA/CcAAP04Ag4AuAQMAHICFwCUBHMAsgWkACAFcgBnBT8AMgSSAHgFtQCyBJIARgW7AE4FiQBaBVIAcgSGAGQEvQChBAMALwSJAGEEUQBkBCUAbQSJAJIEjwB7ApgAwwRvACYD7ABmBMUAKQSJAJIETgBlBIgAYQQsAFEEXgCQBaMAWAWaAGAGlwB6BKIAegRD/9oGSABLBgAAKwVlAHsIkgAyCKUAsgaDAD4FtACwBQsAowYEADMHQwAbBMAAUAW1ALIFqgAwBQgATQYtAFQF2gCvBXoAlweHALAHwACwBhIAEQbrALIFBQCjBWUAlAcnALcFGABaBG0AYgSTAJ4DXACbBNQALgYhABYEEABYBJ4AnQRTAJ0EoAAsBe8AngSdAJ0EngCdA9kAKAXOAGQEvgCdBFoAaAZ5AJ0GnwCSBPcAHgY2AJ4EWACeBE4AZAaIAJ4EZAAvBGj/5wROAGcGyQAnBuQAnQSJ//0EngCdBwkAnAYsAIEEV//bBywAuAX5AJoE0wAoBEcADwcMAMoGDAC9BtIAkwXiAJcJBQC3B9EAnAQkAFAD2wBMBXIAZwSMAFwFCwAWBAQALwVyAGcEiQBcBwEAnAYkAH4HCQCcBiwAgQUyAHYESABkBP4AdAAA/GYAAPxwAAD9ZQAA/aQAAPoaAAD6KwYJALIE7QCdBFf/2wUbAKkEigCMBGQAogORAJIE2wCyBAYAkgeiABsGYQAWBZoAsgS4AJ0FCgCkBH4AmwaMAEUFhAA/Bf8AqQTZAJ0HzwCpBbQAkggxALAG9ACSBe8AcQTUAG4FGAA6BCoAKgctADQFXQAfBbwAlwSWAGgFcACXBGsAhAVwAIkGMAA/BL7/3QUKAKQEWgCbBf4AMATvACwFswCyBIkAkgYSAKkE7ACdB08AqQY+AJ4FhwBeBKgAaASoAGoEuAA5A6sAOgUuADoEQAAqBPcAVwaVAFoG5QBkBlcANgUsADEESgBTBAgAeQfCAEUGdgA/B/sAqgaiAJAE9wB2BB4AZgWuACQFIQBGBWUAlwYCADAE8wAsAyEAcAQUAAAIKQAABBQAAAgpAAACuQAAAgoAAAFcAAAEfwAAAjAAAAGiAAABAAAAANEAAAAAAAACNAAmAjQAJgVAAKIGPwCQA6YADQGaAGEBmgAwAZgAJAGaAE8C1ABpAtwAPALCACQEagBGBJAAVwKzAIsDxACUBVoAlAF/AFIHqgBEAmcAbAJnAFoDowA8Au8AUQLvADYC7wBcAu8AVgLvADsC7wBPAu8ASgNhAHoC7wBRAu8AewLvAEIC7wA/Au8ANgLvAFwC7wBWAu8AOwLvAE8C7wBKBKcAWwZWAB8GkQCnCHYAqQXrAB8GKwCMBH8AXwXaAB8EIwArBHQAIQVIAF0FTwAfBegAewPOAGgIOgCiBQEAaAUYAJgGJgBUBtcAZQbPAGQGagBaBJAAagWPAKkErwBGBJMAqATFAD8IOgBjAg3/rwSCAGUEZACYBBEAPQQvAIQECAAsAkwAtQKQAG8CBABdBPMAPQRvACAEiwA9BtQAPQbUAD0E7gA9BpsAXwAAAAAINABbCDUAXALvAEIC7wB7Au8AUQQQAFYEEABhBBAAQgQPAHIEEACBBBAAMQQQAE8EEABPBBAAmQQQAGMEIwBIBCsADgRUACcGFQAxBGgAFAR9AHUEJwApBCAARARKAIoEvABaBF0AiwS8AGAE4wCLBgIAiwO1AIsEVQCLA88ALAHpAJgE5ACLBKwAZAPMAIsEIABEBDQAMQOhAA4DrwCLBGgAFAS8AGAEaAAUA4kAPgTPAIsD8ABABWcAYQUXAGEE8wB2BXMAJwR8AGEHQgAoB1AAiwV0ACkEzgCLBFoAiwUlAC4GCwAfBEAASATsAIsETgCMBMEAKAQgACMFKQCLBGoAPQZRAIsGrACLBR0ACQXxAIsETwCLBHwASwZ3AIsEhwBQBBIACwZIAB8EeQCMBQoAjAU3ACQFwwBgBF8ADgSoACcGYgAnBGoAPQRqAIsFxAACBMsAXgRAAEgEvABgBDQAMQPkAEMIIgCLBKsAKALvAD8C7wA2Au8AXALvAFYC7wA7Au8ATwLvAEoDlwCPArUAnwPmAIsEOgAfBMQAZAVMALIFJACyBBQAkwU9ALIEDwCTBIAAiwR8AGEEUQCLBIYAFAH+AJ8DpQCCAAD8owPwAG8D9P9dBA8AaQP1AGkDrwCLA6AAggOfAIIC7wBRAu8ANgLvAFwC7wBWAu8AOwLvAE8C7wBKBYIAfgWvAH4FkwCyBeAAfgXjAH4D1QCgBIIAgwRYAA8EzwA+BGsAZQQuAEoDpQCEAZIAaAakAGAEugCCAfz/tgR/ADsEfwBzBH8AIgR/AHYEfwB2BH8ANgR/AH4EfwBeBH8AcQR/APQCBv+0AgT/tAH7AJwB+//5AfsAnARRAIsFAAB4BCEAOwR+AIwEMwBdBJMAWwSMAFsEnwBaBI4AjAScAFsEPgBdBH4AYQRwAFoDeQBXBNYAaAO1AAEGOgAJA/kAiwS8AGAE4wAwBOMAiwH8AAACNgAmBV4AJQVeACUEhgABBMYAMgKe//QFOAAdBTgAHQU4AB0FOAAdBTgAHQU4AB0FOAAdBTUAeASMAKkEjACpBIwAqQSMAKkCLf/fAi0AsQIt/+oCLf/VBbUAqQWBAHcFgQB3BYEAdwWBAHcFgQB3BTAAjAUwAIwFMACMBTAAjATOAA8EWgBtBFoAbQRaAG0EWgBtBFoAbQRaAG0EWgBtBDAAXQQ+AF0EPgBdBD4AXQQ+AF0B+//EAfsAlgH7/88B+/+6BGsAjQSQAFwEkABcBJAAXASQAFwEkABcBGkAiQRpAIkEaQCJBGkAiQPJABYDyQAWBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBTUAeAQwAF0FNQB4BDAAXQU1AHgEMABdBTUAeAQwAF0FQACpBRkAXwSMAKkEPgBdBIwAqQQ+AF0EjACpBD4AXQSMAKkEPgBdBIwAqQQ+AF0FcwB6BH4AYQVzAHoEfgBhBXMAegR+AGEFcwB6BH4AYQW1AKkEaACNAi3/tgH7/5sCLf/NAfv/sgIt/+wB+//RAi0AFwHy//oCLQCqBpcAtwPcAI4EagA1AgT/tAUFAKkEDgCNBE8AogHyAJMETwCpAfIAVgRPAKkCiACcBE8AqQLOAJwFtQCpBGsAjQW1AKkEawCNBbUAqQRrAI0Ea/+7BYEAdwSQAFwFgQB3BJAAXAWBAHcEkABcBO4AqQK2AI0E7gCpArYAUwTuAKkCtgBkBMAAUQQhAF8EwABRBCEAXwTAAFEEIQBfBMAAUQQhAF8EwABRBCEAXwTGADICngAJBMYAMgKeAAkExgAyAsYACQUwAIwEaQCJBTAAjARpAIkFMACMBGkAiQUwAIwEaQCJBTAAjARpAIkFMACMBGkAiQcZAD0GAwArBM4ADwPJABYEzgAPBMsAVwP4AFkEywBXA/gAWQTLAFcD+ABZB3r/8QbCAE8FgQB3BIkAXASA/70EgP+9BCcAKQSGABQEhgAUBIYAFASGABQEhgAUBIYAFASGABQEfABhA+YAiwPmAIsD5gCLA+YAiwHp/7wB6QCOAen/xwHp/7IE4wCLBLwAYAS8AGAEvABgBLwAYAS8AGAEfQB1BH0AdQR9AHUEfQB1BCsADgSGABQEhgAUBIYAFAR8AGEEfABhBHwAYQR8AGEEgACLA+YAiwPmAIsD5gCLA+YAiwPmAIsErABkBKwAZASsAGQErABkBOQAiwHp/5MB6f+qAen/yQHpAAUB6QCHA88ALARVAIsDtQCDA7UAiwO1AIsDtQCLBOMAiwTjAIsE4wCLBLwAYAS8AGAEvABgBEoAigRKAIoESgCKBCAARAQgAEQEIABEBCAARAQnACkEJwApBCcAKQR9AHUEfQB1BH0AdQR9AHUEfQB1BH0AdQYVADEEKwAOBCsADgQjAEgEIwBIBCMASAU4AB0E8P+MBhn/mgKR/6AFlf/6BTL/dgVm//wCmP+bBTgAHQT8AKkEjACpBMsAVwW1AKkCLQC3BQUAqQb8AKkFtQCpBYEAdwUMAKkExgAyBM4ADwUEADoCLf/VBM4ADwSGAGQEUQBkBIkAkgKYAMMEXgCQBHQAmwSQAFwEiQCbA+AAIQRwAFoCmP/kBF4AkASQAFwEXgCQBpcAegSMAKkEcwCyBMAAUQItALcCLf/VBGoANQUkALIFBQCpBQgATQU4AB0E/ACpBHMAsgSMAKkFtQCyBvwAqQW1AKkFgQB3BbUAsgUMAKkFNQB4BMYAMgUEADoEWgBtBD4AXQSeAJ0EkABcBH4AjAQwAF0DyQAWA/gAKgQ+AF0DXACbBCEAXwHyAI4B+/+6Aer/vgRTAJ0DyQAWBxkAPQYDACsHGQA9BgMAKwcZAD0GAwArBM4ADwPJABYBZgBoApAAiQQgAKECBP+0AZoAMAb8AKkHBACLBTgAHQRaAG0EjACpBbUAsgQ+AF0EngCdBYkAWgWaAGAFCwAWBAT/+whZAFwJSgB3BMAAUAQQAFgFNQB4BDAAXQTOAA8EAwAvAi0AtwdDABsGIQAWAi0AtwU4AB0EWgBtBTgAHQRaAG0Hev/xBsIATwSMAKkEPgBdBYcAXgQ4AGMEOABjB0MAGwYhABYEwABQBBAAWAW1ALIEngCdBbUAsgSeAJ0FgQB3BJAAXAVyAGcEjABcBXIAZwSMAFwFZQCUBE4AZAUIAE0DyQAWBQgATQPJABYFCABNA8kAFgV6AJcEWgBoBusAsgY2AJ4EgwBfBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBTgAHQRa/8kFOAAdBFoAbQU4AB0EWgBtBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBIwAqQQ+AF0EjACpBD4AXQSMAKkEPgBdBIwAqQQ+AF0EjP/uBD7/uASMAKkEPgBdBIwAqQQ+AF0EjACpBD4AXQItALcB+wCcAi0ApAHyAIYFgQB3BJAAXAWBAHcEkABcBYEAdwSQAFwFgQBGBJD/wgWBAHcEkABcBYEAdwSQAFwFgQB3BJAAXAV/AGYEkwBcBX8AZgSTAFwFfwBmBJMAXAV/AGYEkwBcBX8AZgSTAFwFMACMBGkAiQUwAIwEaQCJBZAAjATzAIkFkACMBPMAiQWQAIwE8wCJBZAAjATzAIkFkACMBPMAiQTOAA8DyQAWBM4ADwPJABYEzgAPA8kAFgShAF8ExgAyA9kAKAV6AJcEWgBoBHMAsgNcAJsGMAA/BL7/3QRoAI0FBf/UBQX/1ARzAAMDXP/9BTgACwQo/9MEzgAPBAMALwUEADoD+AAqBFEAZARsABIGPwCQBH8AXgR/AF8EfwA1BH8AmgSTAJkEpwCFBJMAZASnAIcFcwB6BH4AYQW1AKkEawCNBTgAHQRaADoEjABfBD4AKQIt/wsB+/7wBYEAdwSQADME7gBWArb/jAUwAIwEaQArBKf/OAT8AKkEfgCMBUAAqQSDAF8FQACpBIMAXwW1AKkEaACNBQUAqQQOAI0FBQCpBA4AjQRPAKkB8gCGBvwAqQcEAIsFtQCp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GRwfkhGaEcIWzBiqEdgUuhJ4EiIRNimwEVQmjhFUEVQTBBIiEXoYRBI8Ee4RChI8FQASIhJaGZIezBcmEloXJiWQJ5Ai1h1kEOwSPBEiPkQRVDe+JJ4okhIIEPIQ+EEuEP4UQhPWGhQ5sC1yNA4sJBKaMLY74hbMISoSmhKaFUYSmhKaEpoyYBqeEpoTfh4GHEAX4iO4HNIRQCIAEQoTVDXkRCwSIhR8KuYbKBLeEiIbshMqFnYUDBLeFyYTBBGaEjwTVBIiHswRQBbMEQoVkBWQFZASmhbMEQoSmhKaEloRQBbMEQoRBC8UEQQRBBEEERwV2hYoERYRLBEQERYREBFeERARiBJaEloSWhJaH5IXJhcmFyYXJhcmFyYXJhGIEWwRbBFsEWwSmhKaEpoSmhKaEloSWhJaEloSWhiqEngSeBJ4EngSeBJ4EngRNhE2ETYRNhFUEwQTBBMEEwQTBBI8EjwXJhJ4FyYSeBcmEngRiBGIEYgRiBJaEWwRNhFsETYRbBE2EWwRNhFsETYSmhFUEpoSmhKaEpoSmhWQEawRrBGsEawSmhFUEpoRVBKaEVQRVBJaEwQSWhMEEloTBBF6EXoReh+SH5IfkhHCGKoSPBiqEdgR2BHYERYRFhEcERAREBEQERAREBEQERARFhEWERYRFhEWERAREBEQERYRLBEsESwRLBEWERYRFhEcFyYRbBKaEpoSWhiqFyYRShFsEdgSmhKaFZASmhKaEloSvB+SGKoWzBKaGKoRVBMEEjwTBBFsHswSmhKaFZAVkBVGFyYRSh7MEWwSmhKaEloSvBGIH5IWzBJ4ETYTBBIiEjwRChE2EUASPBHCEcIRwhiqEjwRBBEEEQQSmhFUFyYSeBFsETYRmhI8EYgYqhI8EpoWzBEKEpoXJhJ4FyYSeBFsETYRNhE2FswRChJaEwQTBBIiFUYSPBVGEjwVRhI8FyYSeBcmEngXJhJ4FyYSeBcmEngXJhJ4FyYSeBcmEngXJhJ4FyYSeBcmEngXJhJ4EWwRNhFsETYRbBE2EWwRNhFsETYRbBE2EWwRNhFsETYSmhKaEloTBBJaEwQSWhMEEloTBBJaEwQSWhMEEloTBBMEGKoSPBiqEjwYqhI8H5IezBFAEVQTfh7MFZAYqhKaEVQXJhJ4EWwSmhJaEwQRehFKEiISWhJaEpoRVBWQFZARrBKa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/+wCtP/sArX/7AK2/+wCzv/sAtD/7ALS/+wC1P/sAtb/7ALY/+wC2v/sAtz/7ALe/+wC4P/sAuL/7ALk/+wC5v/sAuj/7AOv/+wD1f/sA9n/7APc/+wD9//sA/3/7AQC/+wEEP/sBBL/7AQT/+wEH//sBC7/7ARI/+wESv/sBEz/7ARO/+wEUP/sBFL/7ARU/+wEVv/sBGr/7ARs/+wEbv/sBHL/7ASt/+wEuv/sBLz/7ABAACf/5gAr/+YAM//mADX/5gCD/+YAk//mAJj/5gCz/+YAuP/CAMQAEADT/+YBCP/mARf/5gEb/+YBHf/mAR//5gEh/+YBQf/mAWr/5gJV/+YCVv/mAlj/5gJZ/+YCl//mAqH/5gKi/+YCo//mAqT/5gKl/+YCzf/mAs//5gLR/+YC0//mAuH/5gLj/+YC5f/mAuf/5gMJ/+YDC//mAw3/5gM+/+YDm//mA6j/5gPO/+YD0f/mA/7/5gQB/+YEHP/mBB7/5gQg/+YEW//mBF3/5gRf/+YEYf/mBGP/5gRl/+YEZ//mBGn/5gRr/+YEbf/mBG//5gRx/+YEsP/mBMn/5gBHABAAAAASAAAAR//nAEj/5wBJ/+cAS//nAFX/5wCU/+cAmf/nALv/5wDEAA8AyP/nAMn/5wD3/+cBA//nAR7/5wEi/+cBQv/nAWD/5wFh/+cBa//nAYYAAAGKAAABjgAAAY8AAAKy/+cCs//nArT/5wK1/+cCtv/nAs7/5wLQ/+cC0v/nAtT/5wLW/+cC2P/nAtr/5wLc/+cC3v/nAuD/5wLi/+cC5P/nAub/5wLo/+cDr//nA9X/5wPZ/+cD3P/nA/f/5wP9/+cEAv/nBBD/5wQS/+cEE//nBB//5wQu/+cESP/nBEr/5wRM/+cETv/nBFD/5wRS/+cEVP/nBFb/5wRq/+cEbP/nBG7/5wRy/+cErf/nBLr/5wS8/+cATQAGABAACwAQAA0AFABBABIAR//oAEj/6ABJ/+gAS//oAFX/6ABhABMAlP/oAJn/6AC7/+gAyP/oAMn/6AD3/+gBA//oAR7/6AEi/+gBQv/oAWD/6AFh/+gBa//oAYQAEAGFABABhwAQAYgAEAGJABACsv/oArP/6AK0/+gCtf/oArb/6ALO/+gC0P/oAtL/6ALU/+gC1v/oAtj/6ALa/+gC3P/oAt7/6ALg/+gC4v/o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A9z/sAPjAAsD6wALA+wADQPtAA0D8AANA/T/8AP3/7AD/AALA/3/sAQC/7AEBAALBAr/8AQM//AEEP+wBBL/sAQT/7AEHf/WBB//sAQh/9YEJQALBCcACwQpAAsELv+wBDD/8AQy//AENP/wBDb/8AQ4//AEOv/wBDz/8AQ+//AEQP/wBEL/8ARE//AERv/wBEj/sARK/7AETP+wBE7/sARQ/7AEUv+wBFT/sARW/7AEXP/WBF7/1gRg/9YEYv/WBGT/1gRm/9YEaP/WBGr/sARs/7AEbv+wBHD/1gRy/7AEggALBIQACwSGAAsEq//wBK3/sASx/9YEuv+wBLz/sATUAAsE1gALBNz/vwTg/+0E4QANBOP/vwTvAA0E8gANBPv/vwUC/+0FBf/tBQYADgUK/+0FCwANAOcAEP8WABL/FgAl/1YALv74ADgAFABF/94AR//rAEj/6wBJ/+sAS//rAFP/6wBV/+sAVv/mAFn/6gBa/+gAXf/oAJT/6wCZ/+sAm//qALL/VgC0/1YAu//rAL3/6ADI/+sAyf/rAMv/6gDSABQA1gAUAPf/6wED/+sBDf9WARj/6wEa/+gBHv/rASL/6wE5ABQBQv/rAUUAFAFg/+sBYf/rAWv/6wGG/xYBiv8WAY7/FgGP/xYB+//AAf3/wAJD/8ACkP9WApH/VgKS/1YCk/9WApT/VgKV/1YClv9WAqv/3gKs/94Crf/eAq7/3gKv/94CsP/eArH/3gKy/+sCs//rArT/6wK1/+sCtv/rArz/6wK9/+sCvv/rAr//6wLA/+sCwf/qAsL/6gLD/+oCxP/qAsX/6ALG/+gCx/9WAsj/3gLJ/1YCyv/eAsv/VgLM/94Czv/rAtD/6wLS/+sC1P/rAtb/6wLY/+sC2v/rAtz/6wLe/+sC4P/rAuL/6wLk/+sC5v/rAuj/6wL2/vgDCv/rAwz/6wMO/+sDHwAUAyEAFAMjABQDJv/qAyj/6gMq/+oDLP/qAy7/6gMw/+oDNP/oA0P/wANE/8ADRf/AA0b/wANH/8ADSP/AA0n/wANe/8ADX//AA2D/wAOX/1YDn/9WA6//6wOz/+oDtf/rA7f/6AO6/+oDu//rA7z/6gPD/vgDx/9WA9IAFAPU/94D1f/rA9f/6wPZ/+sD2v/oA9z/6wPj/+gD6//oA/P/VgP0/94D9//rA/z/6AP9/+sEAv/rBAT/6AQJ/1YECv/eBAv/VgQM/94EEP/rBBL/6wQT/+sEHf/rBB//6wQh/+sEJf/oBCf/6AQp/+gELv/rBC//VgQw/94EMf9WBDL/3gQz/1YENP/eBDX/VgQ2/94EN/9WBDj/3gQ5/1YEOv/eBDv/VgQ8/94EPf9WBD7/3gQ//1YEQP/eBEH/VgRC/94EQ/9WBET/3gRF/1YERv/eBEj/6wRK/+sETP/rBE7/6wRQ/+sEUv/rBFT/6wRW/+sEXP/rBF7/6wRg/+sEYv/rBGT/6wRm/+sEaP/rBGr/6wRs/+sEbv/rBHD/6wRy/+sEdP/qBHb/6gR4/+oEev/qBHz/6gR+/+oEgP/qBIL/6ASE/+gEhv/oBIgAFASq/1YEq//eBK3/6wSx/+sEtf/qBLr/6wS8/+sE0AAUBNT/6ATW/+gE3P/ABOP/wAT7/8AAAgCgAAQABAAAAAYABgABAAsADAACABMAEwAEACUAKgAFACwALQALAC8ANgANADgAOAAVADoAPwAWAEUARgAcAEkASgAeAEwATAAgAE8ATwAhAFEAVAAiAFYAVgAmAFgAWAAnAFoAXQAoAF8AXwAsAIoAigAtAJYAlgAuAJ0AnQAvALEAtQAwALcAuQA1ALsAuwA4AL0AvgA5AMAAwQA7AMMAxQA9AMcAzgBAANIA0gBIANQA3gBJAOAA7wBUAPEA8QBkAPYA+ABlAPsA/ABoAP4BAABqAQMBBQBtAQoBCgBwAQ0BDQBxARgBGgByASIBIgB1AS4BMAB2ATMBNQB5ATcBNwB8ATkBOQB9ATsBOwB+AUMBRAB/AVQBVACBAVYBVgCCAVgBWACDAVwBXgCEAYQBhQCHAYcBiQCJAegB6ACMAeoB6wCNAe0B7QCPAfAB8ACQAfsB/QCRAkACQACUAkMCQwCVAlUCVQCWAlcCWACXAosCjACZAo4CjgCbApACpQCcAqoCsQCyArMCtgC6ArsCwAC+AsUCzQDEAs8CzwDNAtEC0QDOAtMC0wDPAtUC1QDQAtcC4ADRAukC6wDbAu0C7QDeAu8C7wDfAvEC8QDgAvMC8wDhAvgC+ADiAvoC+gDjAvwC/ADkAv4C/gDlAwADAADmAwIDDgDnAxADEAD0AxIDEgD1AxQDFAD2Ax8DHwD3AyEDIQD4AyMDIwD5AzEDMQD6AzMDNgD7AzgDOAD/AzoDOgEAA0ADSQEBA1QDWAELA14DYAEQA2UDZQETA3cDegEUA34DgAEYA4kDiQEbA5cDnAEcA58DrgEiA7EDsQEyA7UDtQEzA7cDtwE0A7sDuwE1A74DvwE2A8EDwgE4A8QDygE6A8wDzgFBA9AD1QFEA9cD2AFKA9oD3QFMA+MD5AFQA+YD5gFSA+gD6AFTA+oD7QFUA/AD9QFYA/cD9wFeA/sD/AFfBAEEAQFhBAMEDAFiBA8EEAFsBBIEFQFuBBwEHQFyBCEEIQF0BCMEKQF1BC8EVwF8BFkEWQGlBFsEaAGmBHAEcAG0BIEEhgG1BIgEiAG7BIwEjQG8BJAEkAG+BJIEkwG/BJUElQHBBJcElwHCBKgErAHDBK4ErgHIBLAEsQHJBLMEswHLBLcEuQHMBLsEuwHPBL0EvwHQBMEEwQHTBMMEwwHUBMUEywHVBM0EzQHcBNAE0AHdBNME1wHeBNkE2QHjBNsE3AHkBOAE4AHmBOME4wHnBO4E7gHoBPsE+wHpBQIFAgHqBQYFBgHrAAIAmgAGAAYAAAALAAsAAQAQABAAAgASABIAAwAlACkABAAsADQACQA4AD4AEgBFAEcAGQBJAEkAHABMAEwAHQBRAFQAHgBWAFYAIgBaAFoAIwBcAF4AJACKAIoAJwCWAJYAKACxALQAKQC9AL0ALQDBAMEALgDHAMcALwDUANUAMADXANcAMgDaANoAMwDcAN4ANADgAOYANwDsAOwAPgDuAO4APwD3APcAQAD8APwAQQD+AP8AQgEEAQUARAEKAQoARgENAQ0ARwEYARoASAEuATAASwEzATUATgE3ATcAUQE5ATkAUgE7ATsAUwFDAUQAVAFUAVQAVgFWAVYAVwFYAVgAWAFcAV4AWQGEAYoAXAGOAY8AYwHoAegAZQHtAe0AZgHwAfEAZwH7Af0AaQIPAg8AbAIeAiAAbQJAAkAAcAJDAkMAcQJVAlUAcgJXAlgAcwKLAowAdQKOAo4AdwKQArYAeAK7AsAAnwLFAtUApQLXAuAAtgLpAusAwALtAu0AwwLvAu8AxALxAvEAxQLzAvMAxgL2AvYAxwL4AvgAyAL6AvoAyQL8AvwAygL+Av4AywMAAwAAzAMCAw4AzQMQAxAA2gMSAxIA2wMUAxQA3AMfAx8A3QMhAyEA3gMjAyMA3wMlAyUA4AMnAycA4QMp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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAgAAAAAAAAACAAAAAAAjAAAAAAAAAAAAAgAAAAIAAAAUAA0ACwAaABYAEAAMABcAAAAAAAAAAAAAAAAABgAAAAEAAQABAAAAAQAAAAAAAAAAAAAAAwADAAcAAwABAAAAEQAAAAgACQAAABMACQAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgABAAAAAAAAAAIAAQAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAIABAAAAAAAAAAAAAAAAAABAAAACQAAAAAAAAADAAAAAAAAAAAAAAAAAAEAAQAAAAgAAAAAAAAAAAAAAAAADQACAB4AAAANAAAAAAAAABAAAAAAAB4AHwAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAATAAAAAwADACEAAwADAAMAAAABAAMAIgADAAMAAAAAAAMAAAADAAAAAAABACEAAwAAAAAAAgAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAgAHABoACQACAAAAAgABAAIAAAACAAEAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAQABMAAAADAAAAAAANAAAAAAADAAAAAwAAAAAAAgABABAAEwANAAAAIAAiAAAAAAAAAAAAAAAAAAAAHgAhAAAAAwAAAAMAAAADAAAAAAAAAAAAAwAQABMAAAABAAEAAAAAAAAAAAAeAAAAAAAAAAIAAQAAAAAAAAAeACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbABsAAAAPAA8AGAAPAA8ADwAYAAAAAAAAABgAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAZACQAAAAOABUAHAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAACgAFAAoAAAAAAAAAAAAAAAAAFQAFAAAAAAAVAAAAAAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAVAAUAEgAZABUAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAAAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAgAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAgACAAIACwALAAsACwAMAAYABgAGAAYABgAGAAYAAQABAAEAAQABAAAAAAAAAAAAAwAHAAcABwAHAAcACAAIAAgACAAJAAkABAAGAAQABgAEAAYAAgABAAIAAQACAAEAAgABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAIAAQACAAEAAgABAAIAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAMAAgAHAAIABwACAAcAAAAAAAAAAAAAAAAAFAARABQAEQAUABEAFAARABQAEQANAAAADQAAAA0AAAALAAgACwAIAAsACAALAAgACwAIAAsACAAWAAAADAAJAAwAFwAdABcAHQAXAB0AAAAAAAIAAAAAAAAAAAAKAAoACgAKAAoACgAKAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAA4ADgAOAA4AEgAKAAoACgAFAAUABQAFAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAHAAcABwAHAAAABUAAAAOAA4ADgAOAA4ADgAkABIAEgAAAAAAAAAE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\"\n};\n\n/*! DataTables 1.13.8\n * ©2008-2023 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     DataTables\n * @description Paginate, search and order HTML tables\n * @version     1.13.8\n * @author      SpryMedia Ltd\n * @contact     www.datatables.net\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - https://datatables.net/license\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: https://www.datatables.net\n */\n\n/*jslint evil: true, undef: true, browser: true */\n/*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_re_escape_regex,_empty,_intVal,_numToDecimal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidate,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/\n\n(function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\t// jQuery's factory checks for a global window - if it isn't present then it\n\t\t// returns a factory function that expects the window object\n\t\tvar jq = require('jquery');\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\twindow.DataTable = factory( jQuery, window, document );\n\t}\n}\n(function( $, window, document, undefined ) {\n\t\"use strict\";\n\n\t\n\tvar DataTable = function ( selector, options )\n\t{\n\t\t// Check if called with a window or jQuery object for DOM less applications\n\t\t// This is for backwards compatibility\n\t\tif (DataTable.factory(selector, options)) {\n\t\t\treturn DataTable;\n\t\t}\n\t\n\t\t// When creating with `new`, create a new DataTable, returning the API instance\n\t\tif (this instanceof DataTable) {\n\t\t\treturn $(selector).DataTable(options);\n\t\t}\n\t\telse {\n\t\t\t// Argument switching\n\t\t\toptions = selector;\n\t\t}\n\t\n\t\t/**\n\t\t * Perform a jQuery selector action on the table's TR elements (from the tbody) and\n\t\t * return the resulting jQuery object.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter\n\t\t *    criterion (\"applied\") or all TR elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {object} jQuery object, filtered by the given selector.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Highlight every second row\n\t\t *      oTable.$('tr:odd').css('backgroundColor', 'blue');\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to rows with 'Webkit' in them, add a background colour and then\n\t\t *      // remove the filter, thus highlighting the 'Webkit' rows only.\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      oTable.$('tr', {\"search\": \"applied\"}).css('backgroundColor', 'blue');\n\t\t *      oTable.fnFilter('');\n\t\t *    } );\n\t\t */\n\t\tthis.$ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).$( sSelector, oOpts );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Almost identical to $ in operation, but in this case returns the data for the matched\n\t\t * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes\n\t\t * rather than any descendants, so the data can be obtained for the row/cell. If matching\n\t\t * rows are found, the data returned is the original data array/object that was used to\n\t\t * create the row (or a generated array if from a DOM source).\n\t\t *\n\t\t * This method is often useful in-combination with $ where both functions are given the\n\t\t * same parameters and the array indexes will match identically.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select elements that meet the current filter\n\t\t *    criterion (\"applied\") or all elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the data in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {array} Data for the matched elements. If any elements, as a result of the\n\t\t *    selector, were not TR, TD or TH elements in the DataTable, they will have a null\n\t\t *    entry in the array.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the data from the first row in the table\n\t\t *      var data = oTable._('tr:first');\n\t\t *\n\t\t *      // Do something useful with the data\n\t\t *      alert( \"First cell is: \"+data[0] );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to 'Webkit' and get all data for\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      var data = oTable._('tr', {\"search\": \"applied\"});\n\t\t *\n\t\t *      // Do something with the data\n\t\t *      alert( data.length+\" rows matched the search\" );\n\t\t *    } );\n\t\t */\n\t\tthis._ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).rows( sSelector, oOpts ).data();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Create a DataTables Api instance, with the currently selected tables for\n\t\t * the Api's context.\n\t\t * @param {boolean} [traditional=false] Set the API instance's context to be\n\t\t *   only the table referred to by the `DataTable.ext.iApiIndex` option, as was\n\t\t *   used in the API presented by DataTables 1.9- (i.e. the traditional mode),\n\t\t *   or if all tables captured in the jQuery object should be used.\n\t\t * @return {DataTables.Api}\n\t\t */\n\t\tthis.api = function ( traditional )\n\t\t{\n\t\t\treturn traditional ?\n\t\t\t\tnew _Api(\n\t\t\t\t\t_fnSettingsFromNode( this[ _ext.iApiIndex ] )\n\t\t\t\t) :\n\t\t\t\tnew _Api( this );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Add a single new row or multiple rows of data to the table. Please note\n\t\t * that this is suitable for client-side processing only - if you are using\n\t\t * server-side processing (i.e. \"bServerSide\": true), then to add data, you\n\t\t * must add it to the data source, i.e. the server-side, through an Ajax call.\n\t\t *  @param {array|object} data The data to be added to the table. This can be:\n\t\t *    <ul>\n\t\t *      <li>1D array of data - add a single row with the data provided</li>\n\t\t *      <li>2D array of arrays - add multiple rows in a single call</li>\n\t\t *      <li>object - data object when using <i>mData</i></li>\n\t\t *      <li>array of objects - multiple data objects when using <i>mData</i></li>\n\t\t *    </ul>\n\t\t *  @param {bool} [redraw=true] redraw the table or not\n\t\t *  @returns {array} An array of integers, representing the list of indexes in\n\t\t *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to\n\t\t *    the table.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Global var for counter\n\t\t *    var giCount = 2;\n\t\t *\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example').dataTable();\n\t\t *    } );\n\t\t *\n\t\t *    function fnClickAddRow() {\n\t\t *      $('#example').dataTable().fnAddData( [\n\t\t *        giCount+\".1\",\n\t\t *        giCount+\".2\",\n\t\t *        giCount+\".3\",\n\t\t *        giCount+\".4\" ]\n\t\t *      );\n\t\t *\n\t\t *      giCount++;\n\t\t *    }\n\t\t */\n\t\tthis.fnAddData = function( data, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\t/* Check if we want to add multiple rows or not */\n\t\t\tvar rows = Array.isArray(data) && ( Array.isArray(data[0]) || $.isPlainObject(data[0]) ) ?\n\t\t\t\tapi.rows.add( data ) :\n\t\t\t\tapi.row.add( data );\n\t\t\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\n\t\t\treturn rows.flatten().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * This function will make DataTables recalculate the column sizes, based on the data\n\t\t * contained in the table and the sizes applied to the columns (in the DOM, CSS or\n\t\t * through the sWidth parameter). This can be useful when the width of the table's\n\t\t * parent element changes (for example a window resize).\n\t\t *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable( {\n\t\t *        \"sScrollY\": \"200px\",\n\t\t *        \"bPaginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      $(window).on('resize', function () {\n\t\t *        oTable.fnAdjustColumnSizing();\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnAdjustColumnSizing = function ( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).columns.adjust();\n\t\t\tvar settings = api.settings()[0];\n\t\t\tvar scroll = settings.oScroll;\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw( false );\n\t\t\t}\n\t\t\telse if ( scroll.sX !== \"\" || scroll.sY !== \"\" ) {\n\t\t\t\t/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */\n\t\t\t\t_fnScrollDraw( settings );\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Quickly and simply clear a table\n\t\t *  @param {bool} [bRedraw=true] redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)\n\t\t *      oTable.fnClearTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClearTable = function( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).clear();\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * The exact opposite of 'opening' a row, this function will close any rows which\n\t\t * are currently 'open'.\n\t\t *  @param {node} nTr the table row to 'close'\n\t\t *  @returns {int} 0 on success, or 1 if failed (can't find the row)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClose = function( nTr )\n\t\t{\n\t\t\tthis.api( true ).row( nTr ).child.hide();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Remove a row for the table\n\t\t *  @param {mixed} target The index of the row from aoData to be deleted, or\n\t\t *    the TR element you want to delete\n\t\t *  @param {function|null} [callBack] Callback function\n\t\t *  @param {bool} [redraw=true] Redraw the table or not\n\t\t *  @returns {array} The row that was deleted\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately remove the first row\n\t\t *      oTable.fnDeleteRow( 0 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnDeleteRow = function( target, callback, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar rows = api.rows( target );\n\t\t\tvar settings = rows.settings()[0];\n\t\t\tvar data = settings.aoData[ rows[0][0] ];\n\t\t\n\t\t\trows.remove();\n\t\t\n\t\t\tif ( callback ) {\n\t\t\t\tcallback.call( this, settings, data );\n\t\t\t}\n\t\t\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\n\t\t\treturn data;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Restore the table to it's original state in the DOM by removing all of DataTables\n\t\t * enhancements, alterations to the DOM structure of the table and event listeners.\n\t\t *  @param {boolean} [remove=false] Completely remove the table from the DOM\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      // This example is fairly pointless in reality, but shows how fnDestroy can be used\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnDestroy();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDestroy = function ( remove )\n\t\t{\n\t\t\tthis.api( true ).destroy( remove );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Redraw the table\n\t\t *  @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)\n\t\t *      oTable.fnDraw();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDraw = function( complete )\n\t\t{\n\t\t\t// Note that this isn't an exact match to the old call to _fnDraw - it takes\n\t\t\t// into account the new data, but can hold position.\n\t\t\tthis.api( true ).draw( complete );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Filter the input based on data\n\t\t *  @param {string} sInput String to filter the table on\n\t\t *  @param {int|null} [iColumn] Column to limit filtering to\n\t\t *  @param {bool} [bRegex=false] Treat as regular expression or not\n\t\t *  @param {bool} [bSmart=true] Perform smart filtering or not\n\t\t *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)\n\t\t *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sometime later - filter...\n\t\t *      oTable.fnFilter( 'test string' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( iColumn === null || iColumn === undefined ) {\n\t\t\t\tapi.search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\t\t\n\t\t\tapi.draw();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the data for the whole table, an individual row or an individual cell based on the\n\t\t * provided parameters.\n\t\t *  @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as\n\t\t *    a TR node then the data source for the whole row will be returned. If given as a\n\t\t *    TD/TH cell node then iCol will be automatically calculated and the data for the\n\t\t *    cell returned. If given as an integer, then this is treated as the aoData internal\n\t\t *    data index for the row (see fnGetPosition) and the data for that row used.\n\t\t *  @param {int} [col] Optional column index that you want the data of.\n\t\t *  @returns {array|object|string} If mRow is undefined, then the data for all rows is\n\t\t *    returned. If mRow is defined, just data for that row, and is iCol is\n\t\t *    defined, only data for the designated cell is returned.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Row data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('tr').click( function () {\n\t\t *        var data = oTable.fnGetData( this );\n\t\t *        // ... do something with the array / object of data for the row\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Individual cell data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('td').click( function () {\n\t\t *        var sData = oTable.fnGetData( this );\n\t\t *        alert( 'The cell clicked on had the value of '+sData );\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetData = function( src, col )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( src !== undefined ) {\n\t\t\t\tvar type = src.nodeName ? src.nodeName.toLowerCase() : '';\n\t\t\n\t\t\t\treturn col !== undefined || type == 'td' || type == 'th' ?\n\t\t\t\t\tapi.cell( src, col ).data() :\n\t\t\t\t\tapi.row( src ).data() || null;\n\t\t\t}\n\t\t\n\t\t\treturn api.data().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get an array of the TR nodes that are used in the table's body. Note that you will\n\t\t * typically want to use the '$' API method in preference to this as it is more\n\t\t * flexible.\n\t\t *  @param {int} [iRow] Optional row index for the TR element you want\n\t\t *  @returns {array|node} If iRow is undefined, returns an array of all TR elements\n\t\t *    in the table's body, or iRow is defined, just the TR element requested.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the nodes from the table\n\t\t *      var nNodes = oTable.fnGetNodes( );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetNodes = function( iRow )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\treturn iRow !== undefined ?\n\t\t\t\tapi.row( iRow ).node() :\n\t\t\t\tapi.rows().nodes().flatten().toArray();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the array indexes of a particular cell from it's DOM element\n\t\t * and column index including hidden columns\n\t\t *  @param {node} node this can either be a TR, TD or TH in the table's body\n\t\t *  @returns {int} If nNode is given as a TR, then a single index is returned, or\n\t\t *    if given as a cell, an array of [row index, column index (visible),\n\t\t *    column index (all)] is given.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example tbody td').click( function () {\n\t\t *        // Get the position of the current data from the node\n\t\t *        var aPos = oTable.fnGetPosition( this );\n\t\t *\n\t\t *        // Get the data array for this row\n\t\t *        var aData = oTable.fnGetData( aPos[0] );\n\t\t *\n\t\t *        // Update the data array and return the value\n\t\t *        aData[ aPos[1] ] = 'clicked';\n\t\t *        this.innerHTML = 'clicked';\n\t\t *      } );\n\t\t *\n\t\t *      // Init DataTables\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetPosition = function( node )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar nodeName = node.nodeName.toUpperCase();\n\t\t\n\t\t\tif ( nodeName == 'TR' ) {\n\t\t\t\treturn api.row( node ).index();\n\t\t\t}\n\t\t\telse if ( nodeName == 'TD' || nodeName == 'TH' ) {\n\t\t\t\tvar cell = api.cell( node ).index();\n\t\t\n\t\t\t\treturn [\n\t\t\t\t\tcell.row,\n\t\t\t\t\tcell.columnVisible,\n\t\t\t\t\tcell.column\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Check to see if a row is 'open' or not.\n\t\t *  @param {node} nTr the table row to check\n\t\t *  @returns {boolean} true if the row is currently open, false otherwise\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnIsOpen = function( nTr )\n\t\t{\n\t\t\treturn this.api( true ).row( nTr ).child.isShown();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * This function will place a new row directly after a row which is currently\n\t\t * on display on the page, with the HTML contents that is passed into the\n\t\t * function. This can be used, for example, to ask for confirmation that a\n\t\t * particular record should be deleted.\n\t\t *  @param {node} nTr The table row to 'open'\n\t\t *  @param {string|node|jQuery} mHtml The HTML to put into the row\n\t\t *  @param {string} sClass Class to give the new TD cell\n\t\t *  @returns {node} The row opened. Note that if the table row passed in as the\n\t\t *    first parameter, is not found in the table, this method will silently\n\t\t *    return.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnOpen = function( nTr, mHtml, sClass )\n\t\t{\n\t\t\treturn this.api( true )\n\t\t\t\t.row( nTr )\n\t\t\t\t.child( mHtml, sClass )\n\t\t\t\t.show()\n\t\t\t\t.child()[0];\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Change the pagination - provides the internal logic for pagination in a simple API\n\t\t * function. With this function you can have a DataTables table go to the next,\n\t\t * previous, first or last pages.\n\t\t *  @param {string|int} mAction Paging action to take: \"first\", \"previous\", \"next\" or \"last\"\n\t\t *    or page number to jump to (integer), note that page 0 is the first page.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnPageChange( 'next' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnPageChange = function ( mAction, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).page( mAction );\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw(false);\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Show a particular column\n\t\t *  @param {int} iCol The column whose display should be changed\n\t\t *  @param {bool} bShow Show (true) or hide (false) the column\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Hide the second column after initialisation\n\t\t *      oTable.fnSetColumnVis( 1, false );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSetColumnVis = function ( iCol, bShow, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).column( iCol ).visible( bShow );\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.columns.adjust().draw();\n\t\t\t}\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Get the settings for a particular table for external manipulation\n\t\t *  @returns {object} DataTables settings object. See\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      var oSettings = oTable.fnSettings();\n\t\t *\n\t\t *      // Show an example parameter from the settings\n\t\t *      alert( oSettings._iDisplayStart );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSettings = function()\n\t\t{\n\t\t\treturn _fnSettingsFromNode( this[_ext.iApiIndex] );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Sort the table by a particular column\n\t\t *  @param {int} iCol the data index to sort on. Note that this will not match the\n\t\t *    'display index' if you have hidden data entries\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort immediately with columns 0 and 1\n\t\t *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSort = function( aaSort )\n\t\t{\n\t\t\tthis.api( true ).order( aaSort ).draw();\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Attach a sort listener to an element for a given column\n\t\t *  @param {node} nNode the element to attach the sort listener to\n\t\t *  @param {int} iColumn the column that a click on this node will sort on\n\t\t *  @param {function} [fnCallback] callback function when sort is run\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort on column 1, when 'sorter' is clicked on\n\t\t *      oTable.fnSortListener( document.getElementById('sorter'), 1 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSortListener = function( nNode, iColumn, fnCallback )\n\t\t{\n\t\t\tthis.api( true ).order.listener( nNode, iColumn, fnCallback );\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Update a table cell or row - this method will accept either a single value to\n\t\t * update the cell with, an array of values with one element for each column or\n\t\t * an object in the same format as the original data source. The function is\n\t\t * self-referencing in order to make the multi column updates easier.\n\t\t *  @param {object|array|string} mData Data to update the cell/row with\n\t\t *  @param {node|int} mRow TR element you want to update or the aoData index\n\t\t *  @param {int} [iColumn] The column to update, give as null or undefined to\n\t\t *    update a whole row.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @param {bool} [bAction=true] Perform pre-draw actions or not\n\t\t *  @returns {int} 0 on success, 1 on error\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell\n\t\t *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row\n\t\t *    } );\n\t\t */\n\t\tthis.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\n\t\t\tif ( iColumn === undefined || iColumn === null ) {\n\t\t\t\tapi.row( mRow ).data( mData );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.cell( mRow, iColumn ).data( mData );\n\t\t\t}\n\t\t\n\t\t\tif ( bAction === undefined || bAction ) {\n\t\t\t\tapi.columns.adjust();\n\t\t\t}\n\t\t\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\treturn 0;\n\t\t};\n\t\t\n\t\t\n\t\t/**\n\t\t * Provide a common method for plug-ins to check the version of DataTables being used, in order\n\t\t * to ensure compatibility.\n\t\t *  @param {string} sVersion Version string to check for, in the format \"X.Y.Z\". Note that the\n\t\t *    formats \"X\" and \"X.Y\" are also acceptable.\n\t\t *  @returns {boolean} true if this version of DataTables is greater or equal to the required\n\t\t *    version, or false if this version of DataTales is not suitable\n\t\t *  @method\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      alert( oTable.fnVersionCheck( '1.9.0' ) );\n\t\t *    } );\n\t\t */\n\t\tthis.fnVersionCheck = _ext.fnVersionCheck;\n\t\t\n\t\n\t\tvar _that = this;\n\t\tvar emptyInit = options === undefined;\n\t\tvar len = this.length;\n\t\n\t\tif ( emptyInit ) {\n\t\t\toptions = {};\n\t\t}\n\t\n\t\tthis.oApi = this.internal = _ext.internal;\n\t\n\t\t// Extend with old style plug-in API methods\n\t\tfor ( var fn in DataTable.ext.internal ) {\n\t\t\tif ( fn ) {\n\t\t\t\tthis[fn] = _fnExternApiFunc(fn);\n\t\t\t}\n\t\t}\n\t\n\t\tthis.each(function() {\n\t\t\t// For each initialisation we want to give it a clean initialisation\n\t\t\t// object that can be bashed around\n\t\t\tvar o = {};\n\t\t\tvar oInit = len > 1 ? // optimisation for single table case\n\t\t\t\t_fnExtend( o, options, true ) :\n\t\t\t\toptions;\n\t\n\t\t\t/*global oInit,_that,emptyInit*/\n\t\t\tvar i=0, iLen, j, jLen, k, kLen;\n\t\t\tvar sId = this.getAttribute( 'id' );\n\t\t\tvar bInitHandedOff = false;\n\t\t\tvar defaults = DataTable.defaults;\n\t\t\tvar $this = $(this);\n\t\t\t\n\t\t\t\n\t\t\t/* Sanity check */\n\t\t\tif ( this.nodeName.toLowerCase() != 'table' )\n\t\t\t{\n\t\t\t\t_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\t/* Backwards compatibility for the defaults */\n\t\t\t_fnCompatOpts( defaults );\n\t\t\t_fnCompatCols( defaults.column );\n\t\t\t\n\t\t\t/* Convert the camel-case defaults to Hungarian */\n\t\t\t_fnCamelToHungarian( defaults, defaults, true );\n\t\t\t_fnCamelToHungarian( defaults.column, defaults.column, true );\n\t\t\t\n\t\t\t/* Setting up the initialisation object */\n\t\t\t_fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ), true );\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t/* Check to see if we are re-initialising a table */\n\t\t\tvar allSettings = DataTable.settings;\n\t\t\tfor ( i=0, iLen=allSettings.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tvar s = allSettings[i];\n\t\t\t\n\t\t\t\t/* Base check on table node */\n\t\t\t\tif (\n\t\t\t\t\ts.nTable == this ||\n\t\t\t\t\t(s.nTHead && s.nTHead.parentNode == this) ||\n\t\t\t\t\t(s.nTFoot && s.nTFoot.parentNode == this)\n\t\t\t\t) {\n\t\t\t\t\tvar bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;\n\t\t\t\t\tvar bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;\n\t\t\t\n\t\t\t\t\tif ( emptyInit || bRetrieve )\n\t\t\t\t\t{\n\t\t\t\t\t\treturn s.oInstance;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( bDestroy )\n\t\t\t\t\t{\n\t\t\t\t\t\ts.oInstance.fnDestroy();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* If the element we are initialising has the same ID as a table which was previously\n\t\t\t\t * initialised, but the table nodes don't match (from before) then we destroy the old\n\t\t\t\t * instance by simply deleting it. This is under the assumption that the table has been\n\t\t\t\t * destroyed by other methods. Anyone using non-id selectors will need to do this manually\n\t\t\t\t */\n\t\t\t\tif ( s.sTableId == this.id )\n\t\t\t\t{\n\t\t\t\t\tallSettings.splice( i, 1 );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* Ensure the table has an ID - required for accessibility */\n\t\t\tif ( sId === null || sId === \"\" )\n\t\t\t{\n\t\t\t\tsId = \"DataTables_Table_\"+(DataTable.ext._unique++);\n\t\t\t\tthis.id = sId;\n\t\t\t}\n\t\t\t\n\t\t\t/* Create the settings object for this table and set some of the default parameters */\n\t\t\tvar oSettings = $.extend( true, {}, DataTable.models.oSettings, {\n\t\t\t\t\"sDestroyWidth\": $this[0].style.width,\n\t\t\t\t\"sInstance\":     sId,\n\t\t\t\t\"sTableId\":      sId\n\t\t\t} );\n\t\t\toSettings.nTable = this;\n\t\t\toSettings.oApi   = _that.internal;\n\t\t\toSettings.oInit  = oInit;\n\t\t\t\n\t\t\tallSettings.push( oSettings );\n\t\t\t\n\t\t\t// Need to add the instance after the instance after the settings object has been added\n\t\t\t// to the settings array, so we can self reference the table instance if more than one\n\t\t\toSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();\n\t\t\t\n\t\t\t// Backwards compatibility, before we apply all the defaults\n\t\t\t_fnCompatOpts( oInit );\n\t\t\t_fnLanguageCompat( oInit.oLanguage );\n\t\t\t\n\t\t\t// If the length menu is given, but the init display length is not, use the length menu\n\t\t\tif ( oInit.aLengthMenu && ! oInit.iDisplayLength )\n\t\t\t{\n\t\t\t\toInit.iDisplayLength = Array.isArray( oInit.aLengthMenu[0] ) ?\n\t\t\t\t\toInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];\n\t\t\t}\n\t\t\t\n\t\t\t// Apply the defaults and init options to make a single init object will all\n\t\t\t// options defined from defaults and instance options.\n\t\t\toInit = _fnExtend( $.extend( true, {}, defaults ), oInit );\n\t\t\t\n\t\t\t\n\t\t\t// Map the initialisation options onto the settings object\n\t\t\t_fnMap( oSettings.oFeatures, oInit, [\n\t\t\t\t\"bPaginate\",\n\t\t\t\t\"bLengthChange\",\n\t\t\t\t\"bFilter\",\n\t\t\t\t\"bSort\",\n\t\t\t\t\"bSortMulti\",\n\t\t\t\t\"bInfo\",\n\t\t\t\t\"bProcessing\",\n\t\t\t\t\"bAutoWidth\",\n\t\t\t\t\"bSortClasses\",\n\t\t\t\t\"bServerSide\",\n\t\t\t\t\"bDeferRender\"\n\t\t\t] );\n\t\t\t_fnMap( oSettings, oInit, [\n\t\t\t\t\"asStripeClasses\",\n\t\t\t\t\"ajax\",\n\t\t\t\t\"fnServerData\",\n\t\t\t\t\"fnFormatNumber\",\n\t\t\t\t\"sServerMethod\",\n\t\t\t\t\"aaSorting\",\n\t\t\t\t\"aaSortingFixed\",\n\t\t\t\t\"aLengthMenu\",\n\t\t\t\t\"sPaginationType\",\n\t\t\t\t\"sAjaxSource\",\n\t\t\t\t\"sAjaxDataProp\",\n\t\t\t\t\"iStateDuration\",\n\t\t\t\t\"sDom\",\n\t\t\t\t\"bSortCellsTop\",\n\t\t\t\t\"iTabIndex\",\n\t\t\t\t\"fnStateLoadCallback\",\n\t\t\t\t\"fnStateSaveCallback\",\n\t\t\t\t\"renderer\",\n\t\t\t\t\"searchDelay\",\n\t\t\t\t\"rowId\",\n\t\t\t\t[ \"iCookieDuration\", \"iStateDuration\" ], // backwards compat\n\t\t\t\t[ \"oSearch\", \"oPreviousSearch\" ],\n\t\t\t\t[ \"aoSearchCols\", \"aoPreSearchCols\" ],\n\t\t\t\t[ \"iDisplayLength\", \"_iDisplayLength\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oScroll, oInit, [\n\t\t\t\t[ \"sScrollX\", \"sX\" ],\n\t\t\t\t[ \"sScrollXInner\", \"sXInner\" ],\n\t\t\t\t[ \"sScrollY\", \"sY\" ],\n\t\t\t\t[ \"bScrollCollapse\", \"bCollapse\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oLanguage, oInit, \"fnInfoCallback\" );\n\t\t\t\n\t\t\t/* Callback functions which are array driven */\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoServerParams',       oInit.fnServerParams,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow,        'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );\n\t\t\t\n\t\t\toSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );\n\t\t\t\n\t\t\t/* Browser support detection */\n\t\t\t_fnBrowserDetect( oSettings );\n\t\t\t\n\t\t\tvar oClasses = oSettings.oClasses;\n\t\t\t\n\t\t\t$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );\n\t\t\t$this.addClass( oClasses.sTable );\n\t\t\t\n\t\t\t\n\t\t\tif ( oSettings.iInitDisplayStart === undefined )\n\t\t\t{\n\t\t\t\t/* Display start point, taking into account the save saving */\n\t\t\t\toSettings.iInitDisplayStart = oInit.iDisplayStart;\n\t\t\t\toSettings._iDisplayStart = oInit.iDisplayStart;\n\t\t\t}\n\t\t\t\n\t\t\tif ( oInit.iDeferLoading !== null )\n\t\t\t{\n\t\t\t\toSettings.bDeferLoading = true;\n\t\t\t\tvar tmp = Array.isArray( oInit.iDeferLoading );\n\t\t\t\toSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;\n\t\t\t\toSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;\n\t\t\t}\n\t\t\t\n\t\t\t/* Language definitions */\n\t\t\tvar oLanguage = oSettings.oLanguage;\n\t\t\t$.extend( true, oLanguage, oInit.oLanguage );\n\t\t\t\n\t\t\tif ( oLanguage.sUrl )\n\t\t\t{\n\t\t\t\t/* Get the language definitions from a file - because this Ajax call makes the language\n\t\t\t\t * get async to the remainder of this function we use bInitHandedOff to indicate that\n\t\t\t\t * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor\n\t\t\t\t */\n\t\t\t\t$.ajax( {\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\turl: oLanguage.sUrl,\n\t\t\t\t\tsuccess: function ( json ) {\n\t\t\t\t\t\t_fnCamelToHungarian( defaults.oLanguage, json );\n\t\t\t\t\t\t_fnLanguageCompat( json );\n\t\t\t\t\t\t$.extend( true, oLanguage, json, oSettings.oInit.oLanguage );\n\t\t\t\n\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t},\n\t\t\t\t\terror: function () {\n\t\t\t\t\t\t// Error occurred loading language file, continue on as best we can\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tbInitHandedOff = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t\t}\n\t\t\t\n\t\t\t/*\n\t\t\t * Stripes\n\t\t\t */\n\t\t\tif ( oInit.asStripeClasses === null )\n\t\t\t{\n\t\t\t\toSettings.asStripeClasses =[\n\t\t\t\t\toClasses.sStripeOdd,\n\t\t\t\t\toClasses.sStripeEven\n\t\t\t\t];\n\t\t\t}\n\t\t\t\n\t\t\t/* Remove row stripe classes if they are already on the table row */\n\t\t\tvar stripeClasses = oSettings.asStripeClasses;\n\t\t\tvar rowOne = $this.children('tbody').find('tr').eq(0);\n\t\t\tif ( $.inArray( true, $.map( stripeClasses, function(el, i) {\n\t\t\t\treturn rowOne.hasClass(el);\n\t\t\t} ) ) !== -1 ) {\n\t\t\t\t$('tbody tr', this).removeClass( stripeClasses.join(' ') );\n\t\t\t\toSettings.asDestroyStripes = stripeClasses.slice();\n\t\t\t}\n\t\t\t\n\t\t\t/*\n\t\t\t * Columns\n\t\t\t * See if we should load columns automatically or use defined ones\n\t\t\t */\n\t\t\tvar anThs = [];\n\t\t\tvar aoColumnsInit;\n\t\t\tvar nThead = this.getElementsByTagName('thead');\n\t\t\tif ( nThead.length !== 0 )\n\t\t\t{\n\t\t\t\t_fnDetectHeader( oSettings.aoHeader, nThead[0] );\n\t\t\t\tanThs = _fnGetUniqueThs( oSettings );\n\t\t\t}\n\t\t\t\n\t\t\t/* If not given a column array, generate one with nulls */\n\t\t\tif ( oInit.aoColumns === null )\n\t\t\t{\n\t\t\t\taoColumnsInit = [];\n\t\t\t\tfor ( i=0, iLen=anThs.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\taoColumnsInit.push( null );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\taoColumnsInit = oInit.aoColumns;\n\t\t\t}\n\t\t\t\n\t\t\t/* Add the columns */\n\t\t\tfor ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\t_fnAddColumn( oSettings, anThs ? anThs[i] : null );\n\t\t\t}\n\t\t\t\n\t\t\t/* Apply the column definitions */\n\t\t\t_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {\n\t\t\t\t_fnColumnOptions( oSettings, iCol, oDef );\n\t\t\t} );\n\t\t\t\n\t\t\t/* HTML5 attribute detection - build an mData object automatically if the\n\t\t\t * attributes are found\n\t\t\t */\n\t\t\tif ( rowOne.length ) {\n\t\t\t\tvar a = function ( cell, name ) {\n\t\t\t\t\treturn cell.getAttribute( 'data-'+name ) !== null ? name : null;\n\t\t\t\t};\n\t\t\t\n\t\t\t\t$( rowOne[0] ).children('th, td').each( function (i, cell) {\n\t\t\t\t\tvar col = oSettings.aoColumns[i];\n\t\t\t\n\t\t\t\t\tif (! col) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\tif ( col.mData === i ) {\n\t\t\t\t\t\tvar sort = a( cell, 'sort' ) || a( cell, 'order' );\n\t\t\t\t\t\tvar filter = a( cell, 'filter' ) || a( cell, 'search' );\n\t\t\t\n\t\t\t\t\t\tif ( sort !== null || filter !== null ) {\n\t\t\t\t\t\t\tcol.mData = {\n\t\t\t\t\t\t\t\t_:      i+'.display',\n\t\t\t\t\t\t\t\tsort:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\ttype:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\tfilter: filter !== null ? i+'.@data-'+filter : undefined\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcol._isArrayHost = true;\n\t\t\t\n\t\t\t\t\t\t\t_fnColumnOptions( oSettings, i );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\t\n\t\t\tvar features = oSettings.oFeatures;\n\t\t\tvar loadedInit = function () {\n\t\t\t\t/*\n\t\t\t\t * Sorting\n\t\t\t\t * @todo For modularisation (1.11) this needs to do into a sort start up handler\n\t\t\t\t */\n\t\t\t\n\t\t\t\t// If aaSorting is not defined, then we use the first indicator in asSorting\n\t\t\t\t// in case that has been altered, so the default sort reflects that option\n\t\t\t\tif ( oInit.aaSorting === undefined ) {\n\t\t\t\t\tvar sorting = oSettings.aaSorting;\n\t\t\t\t\tfor ( i=0, iLen=sorting.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\tsorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* Do a first pass on the sorting classes (allows any size changes to be taken into\n\t\t\t\t * account, and also will apply sorting disabled classes if disabled\n\t\t\t\t */\n\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\n\t\t\t\tif ( features.bSort ) {\n\t\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\t\tif ( oSettings.bSorted ) {\n\t\t\t\t\t\t\tvar aSort = _fnSortFlatten( oSettings );\n\t\t\t\t\t\t\tvar sortedColumns = {};\n\t\t\t\n\t\t\t\t\t\t\t$.each( aSort, function (i, val) {\n\t\t\t\t\t\t\t\tsortedColumns[ val.src ] = val.dir;\n\t\t\t\t\t\t\t} );\n\t\t\t\n\t\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );\n\t\t\t\t\t\t\t_fnSortAria( oSettings );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\n\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\tif ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {\n\t\t\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\t\t}\n\t\t\t\t}, 'sc' );\n\t\t\t\n\t\t\t\n\t\t\t\t/*\n\t\t\t\t * Final init\n\t\t\t\t * Cache the header, body and footer as required, creating them if needed\n\t\t\t\t */\n\t\t\t\n\t\t\t\t// Work around for Webkit bug 83867 - store the caption-side before removing from doc\n\t\t\t\tvar captions = $this.children('caption').each( function () {\n\t\t\t\t\tthis._captionSide = $(this).css('caption-side');\n\t\t\t\t} );\n\t\t\t\n\t\t\t\tvar thead = $this.children('thead');\n\t\t\t\tif ( thead.length === 0 ) {\n\t\t\t\t\tthead = $('<thead/>').appendTo($this);\n\t\t\t\t}\n\t\t\t\toSettings.nTHead = thead[0];\n\t\t\t\n\t\t\t\tvar tbody = $this.children('tbody');\n\t\t\t\tif ( tbody.length === 0 ) {\n\t\t\t\t\ttbody = $('<tbody/>').insertAfter(thead);\n\t\t\t\t}\n\t\t\t\toSettings.nTBody = tbody[0];\n\t\t\t\n\t\t\t\tvar tfoot = $this.children('tfoot');\n\t\t\t\tif ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\") ) {\n\t\t\t\t\t// If we are a scrolling table, and no footer has been given, then we need to create\n\t\t\t\t\t// a tfoot element for the caption element to be appended to\n\t\t\t\t\ttfoot = $('<tfoot/>').appendTo($this);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif ( tfoot.length === 0 || tfoot.children().length === 0 ) {\n\t\t\t\t\t$this.addClass( oClasses.sNoFooter );\n\t\t\t\t}\n\t\t\t\telse if ( tfoot.length > 0 ) {\n\t\t\t\t\toSettings.nTFoot = tfoot[0];\n\t\t\t\t\t_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* Check if there is data passing into the constructor */\n\t\t\t\tif ( oInit.aaData ) {\n\t\t\t\t\tfor ( i=0 ; i<oInit.aaData.length ; i++ ) {\n\t\t\t\t\t\t_fnAddData( oSettings, oInit.aaData[ i ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' ) {\n\t\t\t\t\t/* Grab the data from the page - only do this when deferred loading or no Ajax\n\t\t\t\t\t * source since there is no point in reading the DOM data if we are then going\n\t\t\t\t\t * to replace it with Ajax data\n\t\t\t\t\t */\n\t\t\t\t\t_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* Copy the data index array */\n\t\t\t\toSettings.aiDisplay = oSettings.aiDisplayMaster.slice();\n\t\t\t\n\t\t\t\t/* Initialisation complete - table can be drawn */\n\t\t\t\toSettings.bInitialised = true;\n\t\t\t\n\t\t\t\t/* Check if we need to initialise the table (it might not have been handed off to the\n\t\t\t\t * language processor)\n\t\t\t\t */\n\t\t\t\tif ( bInitHandedOff === false ) {\n\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\t/* Must be done after everything which can be overridden by the state saving! */\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );\n\t\t\t\n\t\t\tif ( oInit.bStateSave )\n\t\t\t{\n\t\t\t\tfeatures.bStateSave = true;\n\t\t\t\t_fnLoadState( oSettings, oInit, loadedInit );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tloadedInit();\n\t\t\t}\n\t\t\t\n\t\t} );\n\t\t_that = null;\n\t\treturn this;\n\t};\n\t\n\t\n\t/*\n\t * It is useful to have variables which are scoped locally so only the\n\t * DataTables functions can access them and they don't leak into global space.\n\t * At the same time these functions are often useful over multiple files in the\n\t * core and API, so we list, or at least document, all variables which are used\n\t * by DataTables as private variables here. This also ensures that there is no\n\t * clashing of variable names and that they can easily referenced for reuse.\n\t */\n\t\n\t\n\t// Defined else where\n\t//  _selector_run\n\t//  _selector_opts\n\t//  _selector_first\n\t//  _selector_row_indexes\n\t\n\tvar _ext; // DataTable.ext\n\tvar _Api; // DataTable.Api\n\tvar _api_register; // DataTable.Api.register\n\tvar _api_registerPlural; // DataTable.Api.registerPlural\n\t\n\tvar _re_dic = {};\n\tvar _re_new_lines = /[\\r\\n\\u2028]/g;\n\tvar _re_html = /<.*?>/g;\n\t\n\t// This is not strict ISO8601 - Date.parse() is quite lax, although\n\t// implementations differ between browsers.\n\tvar _re_date = /^\\d{2,4}[\\.\\/\\-]\\d{1,2}[\\.\\/\\-]\\d{1,2}([T ]{1}\\d{1,2}[:\\.]\\d{2}([\\.:]\\d{2})?)?$/;\n\t\n\t// Escape regular expression special characters\n\tvar _re_escape_regex = new RegExp( '(\\\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\', '$', '^', '-' ].join('|\\\\') + ')', 'g' );\n\t\n\t// https://en.wikipedia.org/wiki/Foreign_exchange_market\n\t// - \\u20BD - Russian ruble.\n\t// - \\u20a9 - South Korean Won\n\t// - \\u20BA - Turkish Lira\n\t// - \\u20B9 - Indian Rupee\n\t// - R - Brazil (R$) and South Africa\n\t// - fr - Swiss Franc\n\t// - kr - Swedish krona, Norwegian krone and Danish krone\n\t// - \\u2009 is thin space and \\u202F is narrow no-break space, both used in many\n\t// - Ƀ - Bitcoin\n\t// - Ξ - Ethereum\n\t//   standards as thousands separators.\n\tvar _re_formatted_numeric = /['\\u00A0,$£€¥%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfkɃΞ]/gi;\n\t\n\t\n\tvar _empty = function ( d ) {\n\t\treturn !d || d === true || d === '-' ? true : false;\n\t};\n\t\n\t\n\tvar _intVal = function ( s ) {\n\t\tvar integer = parseInt( s, 10 );\n\t\treturn !isNaN(integer) && isFinite(s) ? integer : null;\n\t};\n\t\n\t// Convert from a formatted number with characters other than `.` as the\n\t// decimal place, to a Javascript number\n\tvar _numToDecimal = function ( num, decimalPoint ) {\n\t\t// Cache created regular expressions for speed as this function is called often\n\t\tif ( ! _re_dic[ decimalPoint ] ) {\n\t\t\t_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );\n\t\t}\n\t\treturn typeof num === 'string' && decimalPoint !== '.' ?\n\t\t\tnum.replace( /\\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :\n\t\t\tnum;\n\t};\n\t\n\t\n\tvar _isNumber = function ( d, decimalPoint, formatted ) {\n\t\tvar type = typeof d;\n\t\tvar strType = type === 'string';\n\t\n\t\tif ( type === 'number' || type === 'bigint') {\n\t\t\treturn true;\n\t\t}\n\t\n\t\t// If empty return immediately so there must be a number if it is a\n\t\t// formatted string (this stops the string \"k\", or \"kr\", etc being detected\n\t\t// as a formatted number for currency\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tif ( decimalPoint && strType ) {\n\t\t\td = _numToDecimal( d, decimalPoint );\n\t\t}\n\t\n\t\tif ( formatted && strType ) {\n\t\t\td = d.replace( _re_formatted_numeric, '' );\n\t\t}\n\t\n\t\treturn !isNaN( parseFloat(d) ) && isFinite( d );\n\t};\n\t\n\t\n\t// A string without HTML in it can be considered to be HTML still\n\tvar _isHtml = function ( d ) {\n\t\treturn _empty( d ) || typeof d === 'string';\n\t};\n\t\n\t\n\tvar _htmlNumeric = function ( d, decimalPoint, formatted ) {\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tvar html = _isHtml( d );\n\t\treturn ! html ?\n\t\t\tnull :\n\t\t\t_isNumber( _stripHtml( d ), decimalPoint, formatted ) ?\n\t\t\t\ttrue :\n\t\t\t\tnull;\n\t};\n\t\n\t\n\tvar _pluck = function ( a, prop, prop2 ) {\n\t\tvar out = [];\n\t\tvar i=0, ien=a.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] && a[i][ prop ] ) {\n\t\t\t\t\tout.push( a[i][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] ) {\n\t\t\t\t\tout.push( a[i][ prop ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\t// Basically the same as _pluck, but rather than looping over `a` we use `order`\n\t// as the indexes to pick from `a`\n\tvar _pluck_order = function ( a, order, prop, prop2 )\n\t{\n\t\tvar out = [];\n\t\tvar i=0, ien=order.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[ order[i] ][ prop ] ) {\n\t\t\t\t\tout.push( a[ order[i] ][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tout.push( a[ order[i] ][ prop ] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _range = function ( len, start )\n\t{\n\t\tvar out = [];\n\t\tvar end;\n\t\n\t\tif ( start === undefined ) {\n\t\t\tstart = 0;\n\t\t\tend = len;\n\t\t}\n\t\telse {\n\t\t\tend = start;\n\t\t\tstart = len;\n\t\t}\n\t\n\t\tfor ( var i=start ; i<end ; i++ ) {\n\t\t\tout.push( i );\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _removeEmpty = function ( a )\n\t{\n\t\tvar out = [];\n\t\n\t\tfor ( var i=0, ien=a.length ; i<ien ; i++ ) {\n\t\t\tif ( a[i] ) { // careful - will remove all falsy values!\n\t\t\t\tout.push( a[i] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _stripHtml = function ( d ) {\n\t\treturn d\n\t\t\t.replace( _re_html, '' ) // Complete tags\n\t\t\t.replace(/<script/i, ''); // Safety for incomplete script tag\n\t};\n\t\n\t\n\t/**\n\t * Determine if all values in the array are unique. This means we can short\n\t * cut the _unique method at the cost of a single loop. A sorted array is used\n\t * to easily check the values.\n\t *\n\t * @param  {array} src Source array\n\t * @return {boolean} true if all unique, false otherwise\n\t * @ignore\n\t */\n\tvar _areAllUnique = function ( src ) {\n\t\tif ( src.length < 2 ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tvar sorted = src.slice().sort();\n\t\tvar last = sorted[0];\n\t\n\t\tfor ( var i=1, ien=sorted.length ; i<ien ; i++ ) {\n\t\t\tif ( sorted[i] === last ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tlast = sorted[i];\n\t\t}\n\t\n\t\treturn true;\n\t};\n\t\n\t\n\t/**\n\t * Find the unique elements in a source array.\n\t *\n\t * @param  {array} src Source array\n\t * @return {array} Array of unique items\n\t * @ignore\n\t */\n\tvar _unique = function ( src )\n\t{\n\t\tif ( _areAllUnique( src ) ) {\n\t\t\treturn src.slice();\n\t\t}\n\t\n\t\t// A faster unique method is to use object keys to identify used values,\n\t\t// but this doesn't work with arrays or objects, which we must also\n\t\t// consider. See jsperf.com/compare-array-unique-versions/4 for more\n\t\t// information.\n\t\tvar\n\t\t\tout = [],\n\t\t\tval,\n\t\t\ti, ien=src.length,\n\t\t\tj, k=0;\n\t\n\t\tagain: for ( i=0 ; i<ien ; i++ ) {\n\t\t\tval = src[i];\n\t\n\t\t\tfor ( j=0 ; j<k ; j++ ) {\n\t\t\t\tif ( out[j] === val ) {\n\t\t\t\t\tcontinue again;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tout.push( val );\n\t\t\tk++;\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t// Surprisingly this is faster than [].concat.apply\n\t// https://jsperf.com/flatten-an-array-loop-vs-reduce/2\n\tvar _flatten = function (out, val) {\n\t\tif (Array.isArray(val)) {\n\t\t\tfor (var i=0 ; i<val.length ; i++) {\n\t\t\t\t_flatten(out, val[i]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tout.push(val);\n\t\t}\n\t  \n\t\treturn out;\n\t}\n\t\n\tvar _includes = function (search, start) {\n\t\tif (start === undefined) {\n\t\t\tstart = 0;\n\t\t}\n\t\n\t\treturn this.indexOf(search, start) !== -1;\t\n\t};\n\t\n\t// Array.isArray polyfill.\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\n\tif (! Array.isArray) {\n\t    Array.isArray = function(arg) {\n\t        return Object.prototype.toString.call(arg) === '[object Array]';\n\t    };\n\t}\n\t\n\tif (! Array.prototype.includes) {\n\t\tArray.prototype.includes = _includes;\n\t}\n\t\n\t// .trim() polyfill\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim\n\tif (!String.prototype.trim) {\n\t  String.prototype.trim = function () {\n\t    return this.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t  };\n\t}\n\t\n\tif (! String.prototype.includes) {\n\t\tString.prototype.includes = _includes;\n\t}\n\t\n\t/**\n\t * DataTables utility methods\n\t * \n\t * This namespace provides helper methods that DataTables uses internally to\n\t * create a DataTable, but which are not exclusively used only for DataTables.\n\t * These methods can be used by extension authors to save the duplication of\n\t * code.\n\t *\n\t *  @namespace\n\t */\n\tDataTable.util = {\n\t\t/**\n\t\t * Throttle the calls to a function. Arguments and context are maintained\n\t\t * for the throttled function.\n\t\t *\n\t\t * @param {function} fn Function to be called\n\t\t * @param {integer} freq Call frequency in mS\n\t\t * @return {function} Wrapped function\n\t\t */\n\t\tthrottle: function ( fn, freq ) {\n\t\t\tvar\n\t\t\t\tfrequency = freq !== undefined ? freq : 200,\n\t\t\t\tlast,\n\t\t\t\ttimer;\n\t\n\t\t\treturn function () {\n\t\t\t\tvar\n\t\t\t\t\tthat = this,\n\t\t\t\t\tnow  = +new Date(),\n\t\t\t\t\targs = arguments;\n\t\n\t\t\t\tif ( last && now < last + frequency ) {\n\t\t\t\t\tclearTimeout( timer );\n\t\n\t\t\t\t\ttimer = setTimeout( function () {\n\t\t\t\t\t\tlast = undefined;\n\t\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t\t}, frequency );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlast = now;\n\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Escape a string such that it can be used in a regular expression\n\t\t *\n\t\t *  @param {string} val string to escape\n\t\t *  @returns {string} escaped string\n\t\t */\n\t\tescapeRegex: function ( val ) {\n\t\t\treturn val.replace( _re_escape_regex, '\\\\$1' );\n\t\t},\n\t\n\t\t/**\n\t\t * Create a function that will write to a nested object or array\n\t\t * @param {*} source JSON notation string\n\t\t * @returns Write function\n\t\t */\n\t\tset: function ( source ) {\n\t\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t\t/* Unlike get, only the underscore (global) option is used for for\n\t\t\t\t * setting data since we don't know the type here. This is why an object\n\t\t\t\t * option is not documented for `mData` (which is read/write), but it is\n\t\t\t\t * for `mRender` which is read only.\n\t\t\t\t */\n\t\t\t\treturn DataTable.util.set( source._ );\n\t\t\t}\n\t\t\telse if ( source === null ) {\n\t\t\t\t// Nothing to do when the data source is null\n\t\t\t\treturn function () {};\n\t\t\t}\n\t\t\telse if ( typeof source === 'function' ) {\n\t\t\t\treturn function (data, val, meta) {\n\t\t\t\t\tsource( data, 'set', val, meta );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t\t  source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t\t{\n\t\t\t\t// Like the get, we need to get data from a nested object\n\t\t\t\tvar setData = function (data, val, src) {\n\t\t\t\t\tvar a = _fnSplitObjNotation( src ), b;\n\t\t\t\t\tvar aLast = a[a.length-1];\n\t\t\t\t\tvar arrayNotation, funcNotation, o, innerSrc;\n\t\t\n\t\t\t\t\tfor ( var i=0, iLen=a.length-1 ; i<iLen ; i++ ) {\n\t\t\t\t\t\t// Protect against prototype pollution\n\t\t\t\t\t\tif (a[i] === '__proto__' || a[i] === 'constructor') {\n\t\t\t\t\t\t\tthrow new Error('Cannot set prototype values');\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t// Check if we are dealing with an array notation request\n\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\t\n\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\t\t\t\t\tdata[ a[i] ] = [];\n\t\t\n\t\t\t\t\t\t\t// Get the remainder of the nested object to set so we can recurse\n\t\t\t\t\t\t\tb = a.slice();\n\t\t\t\t\t\t\tb.splice( 0, i+1 );\n\t\t\t\t\t\t\tinnerSrc = b.join('.');\n\t\t\n\t\t\t\t\t\t\t// Traverse each entry in the array setting the properties requested\n\t\t\t\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t\t\t\tfor ( var j=0, jLen=val.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\to = {};\n\t\t\t\t\t\t\t\t\tsetData( o, val[j], innerSrc );\n\t\t\t\t\t\t\t\t\tdata[ a[i] ].push( o );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// We've been asked to save data to an array, but it\n\t\t\t\t\t\t\t\t// isn't array data to be saved. Best that can be done\n\t\t\t\t\t\t\t\t// is to just save the value.\n\t\t\t\t\t\t\t\tdata[ a[i] ] = val;\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// The inner call to setData has already traversed through the remainder\n\t\t\t\t\t\t\t// of the source and has set the data, thus we can exit here\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\tdata = data[ a[i] ]( val );\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t// If the nested object doesn't currently exist - since we are\n\t\t\t\t\t\t// trying to set the value - create it\n\t\t\t\t\t\tif ( data[ a[i] ] === null || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\tdata[ a[i] ] = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\t// Last item in the input - i.e, the actual set\n\t\t\t\t\tif ( aLast.match(__reFn ) ) {\n\t\t\t\t\t\t// Function call\n\t\t\t\t\t\tdata = data[ aLast.replace(__reFn, '') ]( val );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// If array notation is used, we just want to strip it and use the property name\n\t\t\t\t\t\t// and assign the value. If it isn't used, then we get the result we want anyway\n\t\t\t\t\t\tdata[ aLast.replace(__reArray, '') ] = val;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\n\t\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\t\treturn setData( data, val, source );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Array or flat object mapping\n\t\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\t\tdata[source] = val;\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Create a function that will read nested objects from arrays, based on JSON notation\n\t\t * @param {*} source JSON notation string\n\t\t * @returns Value read\n\t\t */\n\t\tget: function ( source ) {\n\t\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t\t// Build an object of get functions, and wrap them in a single call\n\t\t\t\tvar o = {};\n\t\t\t\t$.each( source, function (key, val) {\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\to[key] = DataTable.util.get( val );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\n\t\t\t\treturn function (data, type, row, meta) {\n\t\t\t\t\tvar t = o[type] || o._;\n\t\t\t\t\treturn t !== undefined ?\n\t\t\t\t\t\tt(data, type, row, meta) :\n\t\t\t\t\t\tdata;\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( source === null ) {\n\t\t\t\t// Give an empty string for rendering / sorting etc\n\t\t\t\treturn function (data) { // type, row and meta also passed, but not used\n\t\t\t\t\treturn data;\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( typeof source === 'function' ) {\n\t\t\t\treturn function (data, type, row, meta) {\n\t\t\t\t\treturn source( data, type, row, meta );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t\t  source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t\t{\n\t\t\t\t/* If there is a . in the source string then the data source is in a\n\t\t\t\t * nested object so we loop over the data for each level to get the next\n\t\t\t\t * level down. On each loop we test for undefined, and if found immediately\n\t\t\t\t * return. This allows entire objects to be missing and sDefaultContent to\n\t\t\t\t * be used if defined, rather than throwing an error\n\t\t\t\t */\n\t\t\t\tvar fetchData = function (data, type, src) {\n\t\t\t\t\tvar arrayNotation, funcNotation, out, innerSrc;\n\t\t\n\t\t\t\t\tif ( src !== \"\" ) {\n\t\t\t\t\t\tvar a = _fnSplitObjNotation( src );\n\t\t\n\t\t\t\t\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\t\t// Check if we are dealing with special notation\n\t\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\t\n\t\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\t\t// Array notation\n\t\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\n\t\t\t\t\t\t\t\t// Condition allows simply [] to be passed in\n\t\t\t\t\t\t\t\tif ( a[i] !== \"\" ) {\n\t\t\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tout = [];\n\t\t\n\t\t\t\t\t\t\t\t// Get the remainder of the nested object to get\n\t\t\t\t\t\t\t\ta.splice( 0, i+1 );\n\t\t\t\t\t\t\t\tinnerSrc = a.join('.');\n\t\t\n\t\t\t\t\t\t\t\t// Traverse each entry in the array getting the properties requested\n\t\t\t\t\t\t\t\tif ( Array.isArray( data ) ) {\n\t\t\t\t\t\t\t\t\tfor ( var j=0, jLen=data.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\t\tout.push( fetchData( data[j], type, innerSrc ) );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t\t// If a string is given in between the array notation indicators, that\n\t\t\t\t\t\t\t\t// is used to join the strings together, otherwise an array is returned\n\t\t\t\t\t\t\t\tvar join = arrayNotation[0].substring(1, arrayNotation[0].length-1);\n\t\t\t\t\t\t\t\tdata = (join===\"\") ? out : out.join(join);\n\t\t\n\t\t\t\t\t\t\t\t// The inner call to fetchData has already traversed through the remainder\n\t\t\t\t\t\t\t\t// of the source requested, so we exit from the loop\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\t\tdata = data[ a[i] ]();\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\tif (data === null || data[ a[i] ] === null) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if ( data === undefined || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\treturn data;\n\t\t\t\t};\n\t\t\n\t\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\t\treturn fetchData( data, type, source );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Array or flat object mapping\n\t\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\t\treturn data[source];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\t\n\t/**\n\t * Create a mapping object that allows camel case parameters to be looked up\n\t * for their Hungarian counterparts. The mapping is stored in a private\n\t * parameter called `_hungarianMap` which can be accessed on the source object.\n\t *  @param {object} o\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnHungarianMap ( o )\n\t{\n\t\tvar\n\t\t\thungarian = 'a aa ai ao as b fn i m o s ',\n\t\t\tmatch,\n\t\t\tnewKey,\n\t\t\tmap = {};\n\t\n\t\t$.each( o, function (key, val) {\n\t\t\tmatch = key.match(/^([^A-Z]+?)([A-Z])/);\n\t\n\t\t\tif ( match && hungarian.indexOf(match[1]+' ') !== -1 )\n\t\t\t{\n\t\t\t\tnewKey = key.replace( match[0], match[2].toLowerCase() );\n\t\t\t\tmap[ newKey ] = key;\n\t\n\t\t\t\tif ( match[1] === 'o' )\n\t\t\t\t{\n\t\t\t\t\t_fnHungarianMap( o[key] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t\n\t\to._hungarianMap = map;\n\t}\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian, based on a Hungarian map\n\t * created by _fnHungarianMap.\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCamelToHungarian ( src, user, force )\n\t{\n\t\tif ( ! src._hungarianMap ) {\n\t\t\t_fnHungarianMap( src );\n\t\t}\n\t\n\t\tvar hungarianKey;\n\t\n\t\t$.each( user, function (key, val) {\n\t\t\thungarianKey = src._hungarianMap[ key ];\n\t\n\t\t\tif ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )\n\t\t\t{\n\t\t\t\t// For objects, we need to buzz down into the object to copy parameters\n\t\t\t\tif ( hungarianKey.charAt(0) === 'o' )\n\t\t\t\t{\n\t\t\t\t\t// Copy the camelCase options over to the hungarian\n\t\t\t\t\tif ( ! user[ hungarianKey ] ) {\n\t\t\t\t\t\tuser[ hungarianKey ] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, user[hungarianKey], user[key] );\n\t\n\t\t\t\t\t_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tuser[hungarianKey] = user[ key ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Language compatibility - when certain options are given, and others aren't, we\n\t * need to duplicate the values over, in order to provide backwards compatibility\n\t * with older language files.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLanguageCompat( lang )\n\t{\n\t\t// Note the use of the Hungarian notation for the parameters in this method as\n\t\t// this is called after the mapping of camelCase to Hungarian\n\t\tvar defaults = DataTable.defaults.oLanguage;\n\t\n\t\t// Default mapping\n\t\tvar defaultDecimal = defaults.sDecimal;\n\t\tif ( defaultDecimal ) {\n\t\t\t_addNumericSort( defaultDecimal );\n\t\t}\n\t\n\t\tif ( lang ) {\n\t\t\tvar zeroRecords = lang.sZeroRecords;\n\t\n\t\t\t// Backwards compatibility - if there is no sEmptyTable given, then use the same as\n\t\t\t// sZeroRecords - assuming that is given.\n\t\t\tif ( ! lang.sEmptyTable && zeroRecords &&\n\t\t\t\tdefaults.sEmptyTable === \"No data available in table\" )\n\t\t\t{\n\t\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sEmptyTable' );\n\t\t\t}\n\t\n\t\t\t// Likewise with loading records\n\t\t\tif ( ! lang.sLoadingRecords && zeroRecords &&\n\t\t\t\tdefaults.sLoadingRecords === \"Loading...\" )\n\t\t\t{\n\t\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sLoadingRecords' );\n\t\t\t}\n\t\n\t\t\t// Old parameter name of the thousands separator mapped onto the new\n\t\t\tif ( lang.sInfoThousands ) {\n\t\t\t\tlang.sThousands = lang.sInfoThousands;\n\t\t\t}\n\t\n\t\t\tvar decimal = lang.sDecimal;\n\t\t\tif ( decimal && defaultDecimal !== decimal ) {\n\t\t\t\t_addNumericSort( decimal );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Map one parameter onto another\n\t *  @param {object} o Object to map\n\t *  @param {*} knew The new parameter name\n\t *  @param {*} old The old parameter name\n\t */\n\tvar _fnCompatMap = function ( o, knew, old ) {\n\t\tif ( o[ knew ] !== undefined ) {\n\t\t\to[ old ] = o[ knew ];\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for the main DT options. Note that the new\n\t * options are mapped onto the old parameters, so this is an external interface\n\t * change only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatOpts ( init )\n\t{\n\t\t_fnCompatMap( init, 'ordering',      'bSort' );\n\t\t_fnCompatMap( init, 'orderMulti',    'bSortMulti' );\n\t\t_fnCompatMap( init, 'orderClasses',  'bSortClasses' );\n\t\t_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );\n\t\t_fnCompatMap( init, 'order',         'aaSorting' );\n\t\t_fnCompatMap( init, 'orderFixed',    'aaSortingFixed' );\n\t\t_fnCompatMap( init, 'paging',        'bPaginate' );\n\t\t_fnCompatMap( init, 'pagingType',    'sPaginationType' );\n\t\t_fnCompatMap( init, 'pageLength',    'iDisplayLength' );\n\t\t_fnCompatMap( init, 'searching',     'bFilter' );\n\t\n\t\t// Boolean initialisation of x-scrolling\n\t\tif ( typeof init.sScrollX === 'boolean' ) {\n\t\t\tinit.sScrollX = init.sScrollX ? '100%' : '';\n\t\t}\n\t\tif ( typeof init.scrollX === 'boolean' ) {\n\t\t\tinit.scrollX = init.scrollX ? '100%' : '';\n\t\t}\n\t\n\t\t// Column search objects are in an array, so it needs to be converted\n\t\t// element by element\n\t\tvar searchCols = init.aoSearchCols;\n\t\n\t\tif ( searchCols ) {\n\t\t\tfor ( var i=0, ien=searchCols.length ; i<ien ; i++ ) {\n\t\t\t\tif ( searchCols[i] ) {\n\t\t\t\t\t_fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for column options. Note that the new options\n\t * are mapped onto the old parameters, so this is an external interface change\n\t * only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatCols ( init )\n\t{\n\t\t_fnCompatMap( init, 'orderable',     'bSortable' );\n\t\t_fnCompatMap( init, 'orderData',     'aDataSort' );\n\t\t_fnCompatMap( init, 'orderSequence', 'asSorting' );\n\t\t_fnCompatMap( init, 'orderDataType', 'sortDataType' );\n\t\n\t\t// orderData can be given as an integer\n\t\tvar dataSort = init.aDataSort;\n\t\tif ( typeof dataSort === 'number' && ! Array.isArray( dataSort ) ) {\n\t\t\tinit.aDataSort = [ dataSort ];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Browser feature detection for capabilities, quirks\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBrowserDetect( settings )\n\t{\n\t\t// We don't need to do this every time DataTables is constructed, the values\n\t\t// calculated are specific to the browser and OS configuration which we\n\t\t// don't expect to change between initialisations\n\t\tif ( ! DataTable.__browser ) {\n\t\t\tvar browser = {};\n\t\t\tDataTable.__browser = browser;\n\t\n\t\t\t// Scrolling feature / quirks detection\n\t\t\tvar n = $('<div/>')\n\t\t\t\t.css( {\n\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: $(window).scrollLeft()*-1, // allow for scrolling\n\t\t\t\t\theight: 1,\n\t\t\t\t\twidth: 1,\n\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\ttop: 1,\n\t\t\t\t\t\t\tleft: 1,\n\t\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\t\toverflow: 'scroll'\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\theight: 10\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.appendTo( 'body' );\n\t\n\t\t\tvar outer = n.children();\n\t\t\tvar inner = outer.children();\n\t\n\t\t\t// Numbers below, in order, are:\n\t\t\t// inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth\n\t\t\t//\n\t\t\t// IE6 XP:                           100 100 100  83\n\t\t\t// IE7 Vista:                        100 100 100  83\n\t\t\t// IE 8+ Windows:                     83  83 100  83\n\t\t\t// Evergreen Windows:                 83  83 100  83\n\t\t\t// Evergreen Mac with scrollbars:     85  85 100  85\n\t\t\t// Evergreen Mac without scrollbars: 100 100 100 100\n\t\n\t\t\t// Get scrollbar width\n\t\t\tbrowser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;\n\t\n\t\t\t// IE6/7 will oversize a width 100% element inside a scrolling element, to\n\t\t\t// include the width of the scrollbar, while other browsers ensure the inner\n\t\t\t// element is contained without forcing scrolling\n\t\t\tbrowser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;\n\t\n\t\t\t// In rtl text layout, some browsers (most, but not all) will place the\n\t\t\t// scrollbar on the left, rather than the right.\n\t\t\tbrowser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;\n\t\n\t\t\t// IE8- don't provide height and width for getBoundingClientRect\n\t\t\tbrowser.bBounding = n[0].getBoundingClientRect().width ? true : false;\n\t\n\t\t\tn.remove();\n\t\t}\n\t\n\t\t$.extend( settings.oBrowser, DataTable.__browser );\n\t\tsettings.oScroll.iBarWidth = DataTable.__browser.barWidth;\n\t}\n\t\n\t\n\t/**\n\t * Array.prototype reduce[Right] method, used for browsers which don't support\n\t * JS 1.6. Done this way to reduce code size, since we iterate either way\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReduce ( that, fn, init, start, end, inc )\n\t{\n\t\tvar\n\t\t\ti = start,\n\t\t\tvalue,\n\t\t\tisSet = false;\n\t\n\t\tif ( init !== undefined ) {\n\t\t\tvalue = init;\n\t\t\tisSet = true;\n\t\t}\n\t\n\t\twhile ( i !== end ) {\n\t\t\tif ( ! that.hasOwnProperty(i) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tvalue = isSet ?\n\t\t\t\tfn( value, that[i], i, that ) :\n\t\t\t\tthat[i];\n\t\n\t\t\tisSet = true;\n\t\t\ti += inc;\n\t\t}\n\t\n\t\treturn value;\n\t}\n\t\n\t/**\n\t * Add a column to the list used for the table with default values\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nTh The th element for this column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddColumn( oSettings, nTh )\n\t{\n\t\t// Add column to aoColumns array\n\t\tvar oDefaults = DataTable.defaults.column;\n\t\tvar iCol = oSettings.aoColumns.length;\n\t\tvar oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {\n\t\t\t\"nTh\": nTh ? nTh : document.createElement('th'),\n\t\t\t\"sTitle\":    oDefaults.sTitle    ? oDefaults.sTitle    : nTh ? nTh.innerHTML : '',\n\t\t\t\"aDataSort\": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],\n\t\t\t\"mData\": oDefaults.mData ? oDefaults.mData : iCol,\n\t\t\tidx: iCol\n\t\t} );\n\t\toSettings.aoColumns.push( oCol );\n\t\n\t\t// Add search object for column specific search. Note that the `searchCols[ iCol ]`\n\t\t// passed into extend can be undefined. This allows the user to give a default\n\t\t// with only some of the parameters defined, and also not give a default\n\t\tvar searchCols = oSettings.aoPreSearchCols;\n\t\tsearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );\n\t\n\t\t// Use the default column options function to initialise classes etc\n\t\t_fnColumnOptions( oSettings, iCol, $(nTh).data() );\n\t}\n\t\n\t\n\t/**\n\t * Apply options for a column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iCol column index to consider\n\t *  @param {object} oOptions object with sType, bVisible and bSearchable etc\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnOptions( oSettings, iCol, oOptions )\n\t{\n\t\tvar oCol = oSettings.aoColumns[ iCol ];\n\t\tvar oClasses = oSettings.oClasses;\n\t\tvar th = $(oCol.nTh);\n\t\n\t\t// Try to get width information from the DOM. We can't get it from CSS\n\t\t// as we'd need to parse the CSS stylesheet. `width` option can override\n\t\tif ( ! oCol.sWidthOrig ) {\n\t\t\t// Width attribute\n\t\t\toCol.sWidthOrig = th.attr('width') || null;\n\t\n\t\t\t// Style attribute\n\t\t\tvar t = (th.attr('style') || '').match(/width:\\s*(\\d+[pxem%]+)/);\n\t\t\tif ( t ) {\n\t\t\t\toCol.sWidthOrig = t[1];\n\t\t\t}\n\t\t}\n\t\n\t\t/* User specified column options */\n\t\tif ( oOptions !== undefined && oOptions !== null )\n\t\t{\n\t\t\t// Backwards compatibility\n\t\t\t_fnCompatCols( oOptions );\n\t\n\t\t\t// Map camel case parameters to their Hungarian counterparts\n\t\t\t_fnCamelToHungarian( DataTable.defaults.column, oOptions, true );\n\t\n\t\t\t/* Backwards compatibility for mDataProp */\n\t\t\tif ( oOptions.mDataProp !== undefined && !oOptions.mData )\n\t\t\t{\n\t\t\t\toOptions.mData = oOptions.mDataProp;\n\t\t\t}\n\t\n\t\t\tif ( oOptions.sType )\n\t\t\t{\n\t\t\t\toCol._sManualType = oOptions.sType;\n\t\t\t}\n\t\n\t\t\t// `class` is a reserved word in Javascript, so we need to provide\n\t\t\t// the ability to use a valid name for the camel case input\n\t\t\tif ( oOptions.className && ! oOptions.sClass )\n\t\t\t{\n\t\t\t\toOptions.sClass = oOptions.className;\n\t\t\t}\n\t\t\tif ( oOptions.sClass ) {\n\t\t\t\tth.addClass( oOptions.sClass );\n\t\t\t}\n\t\n\t\t\tvar origClass = oCol.sClass;\n\t\n\t\t\t$.extend( oCol, oOptions );\n\t\t\t_fnMap( oCol, oOptions, \"sWidth\", \"sWidthOrig\" );\n\t\n\t\t\t// Merge class from previously defined classes with this one, rather than just\n\t\t\t// overwriting it in the extend above\n\t\t\tif (origClass !== oCol.sClass) {\n\t\t\t\toCol.sClass = origClass + ' ' + oCol.sClass;\n\t\t\t}\n\t\n\t\t\t/* iDataSort to be applied (backwards compatibility), but aDataSort will take\n\t\t\t * priority if defined\n\t\t\t */\n\t\t\tif ( oOptions.iDataSort !== undefined )\n\t\t\t{\n\t\t\t\toCol.aDataSort = [ oOptions.iDataSort ];\n\t\t\t}\n\t\t\t_fnMap( oCol, oOptions, \"aDataSort\" );\n\t\n\t\t\t// Fall back to the aria-label attribute on the table header if no ariaTitle is\n\t\t\t// provided.\n\t\t\tif (! oCol.ariaTitle) {\n\t\t\t\toCol.ariaTitle = th.attr(\"aria-label\");\n\t\t\t}\n\t\t}\n\t\n\t\t/* Cache the data get and set functions for speed */\n\t\tvar mDataSrc = oCol.mData;\n\t\tvar mData = _fnGetObjectDataFn( mDataSrc );\n\t\tvar mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;\n\t\n\t\tvar attrTest = function( src ) {\n\t\t\treturn typeof src === 'string' && src.indexOf('@') !== -1;\n\t\t};\n\t\toCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (\n\t\t\tattrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)\n\t\t);\n\t\toCol._setter = null;\n\t\n\t\toCol.fnGetData = function (rowData, type, meta) {\n\t\t\tvar innerData = mData( rowData, type, undefined, meta );\n\t\n\t\t\treturn mRender && type ?\n\t\t\t\tmRender( innerData, type, rowData, meta ) :\n\t\t\t\tinnerData;\n\t\t};\n\t\toCol.fnSetData = function ( rowData, val, meta ) {\n\t\t\treturn _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );\n\t\t};\n\t\n\t\t// Indicate if DataTables should read DOM data as an object or array\n\t\t// Used in _fnGetRowElements\n\t\tif ( typeof mDataSrc !== 'number' && ! oCol._isArrayHost ) {\n\t\t\toSettings._rowReadObject = true;\n\t\t}\n\t\n\t\t/* Feature sorting overrides column specific when off */\n\t\tif ( !oSettings.oFeatures.bSort )\n\t\t{\n\t\t\toCol.bSortable = false;\n\t\t\tth.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called\n\t\t}\n\t\n\t\t/* Check that the class assignment is correct for sorting */\n\t\tvar bAsc = $.inArray('asc', oCol.asSorting) !== -1;\n\t\tvar bDesc = $.inArray('desc', oCol.asSorting) !== -1;\n\t\tif ( !oCol.bSortable || (!bAsc && !bDesc) )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableNone;\n\t\t\toCol.sSortingClassJUI = \"\";\n\t\t}\n\t\telse if ( bAsc && !bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableAsc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;\n\t\t}\n\t\telse if ( !bAsc && bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableDesc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;\n\t\t}\n\t\telse\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortable;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUI;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Adjust the table column widths for new data. Note: you would probably want to\n\t * do a redraw after calling this function!\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAdjustColumnSizing ( settings )\n\t{\n\t\t/* Not interested in doing column width calculation if auto-width is disabled */\n\t\tif ( settings.oFeatures.bAutoWidth !== false )\n\t\t{\n\t\t\tvar columns = settings.aoColumns;\n\t\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t\tfor ( var i=0 , iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tcolumns[i].nTh.style.width = columns[i].sWidth;\n\t\t\t}\n\t\t}\n\t\n\t\tvar scroll = settings.oScroll;\n\t\tif ( scroll.sY !== '' || scroll.sX !== '')\n\t\t{\n\t\t\t_fnScrollDraw( settings );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'column-sizing', [settings] );\n\t}\n\t\n\t\n\t/**\n\t * Convert the index of a visible column to the index in the data array (take account\n\t * of hidden columns)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iMatch Visible column index to lookup\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisibleToColumnIndex( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\n\t\treturn typeof aiVis[iMatch] === 'number' ?\n\t\t\taiVis[iMatch] :\n\t\t\tnull;\n\t}\n\t\n\t\n\t/**\n\t * Convert the index of an index in the data array and convert it to the visible\n\t *   column index (take account of hidden columns)\n\t *  @param {int} iMatch Column index to lookup\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnIndexToVisible( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\tvar iPos = $.inArray( iMatch, aiVis );\n\t\n\t\treturn iPos !== -1 ? iPos : null;\n\t}\n\t\n\t\n\t/**\n\t * Get the number of visible columns\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the number of visible columns\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisbleColumns( oSettings )\n\t{\n\t\tvar vis = 0;\n\t\n\t\t// No reduce in IE8, use a loop for now\n\t\t$.each( oSettings.aoColumns, function ( i, col ) {\n\t\t\tif ( col.bVisible && $(col.nTh).css('display') !== 'none' ) {\n\t\t\t\tvis++;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn vis;\n\t}\n\t\n\t\n\t/**\n\t * Get an array of column indexes that match a given property\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sParam Parameter in aoColumns to look for - typically\n\t *    bVisible or bSearchable\n\t *  @returns {array} Array of indexes with matched properties\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetColumns( oSettings, sParam )\n\t{\n\t\tvar a = [];\n\t\n\t\t$.map( oSettings.aoColumns, function(val, i) {\n\t\t\tif ( val[sParam] ) {\n\t\t\t\ta.push( i );\n\t\t\t}\n\t\t} );\n\t\n\t\treturn a;\n\t}\n\t\n\t\n\t/**\n\t * Calculate the 'type' of a column\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnTypes ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar data = settings.aoData;\n\t\tvar types = DataTable.ext.type.detect;\n\t\tvar i, ien, j, jen, k, ken;\n\t\tvar col, cell, detectedType, cache;\n\t\n\t\t// For each column, spin over the \n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcol = columns[i];\n\t\t\tcache = [];\n\t\n\t\t\tif ( ! col.sType && col._sManualType ) {\n\t\t\t\tcol.sType = col._sManualType;\n\t\t\t}\n\t\t\telse if ( ! col.sType ) {\n\t\t\t\tfor ( j=0, jen=types.length ; j<jen ; j++ ) {\n\t\t\t\t\tfor ( k=0, ken=data.length ; k<ken ; k++ ) {\n\t\t\t\t\t\t// Use a cache array so we only need to get the type data\n\t\t\t\t\t\t// from the formatter once (when using multiple detectors)\n\t\t\t\t\t\tif ( cache[k] === undefined ) {\n\t\t\t\t\t\t\tcache[k] = _fnGetCellData( settings, k, i, 'type' );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tdetectedType = types[j]( cache[k], settings );\n\t\n\t\t\t\t\t\t// If null, then this type can't apply to this column, so\n\t\t\t\t\t\t// rather than testing all cells, break out. There is an\n\t\t\t\t\t\t// exception for the last type which is `html`. We need to\n\t\t\t\t\t\t// scan all rows since it is possible to mix string and HTML\n\t\t\t\t\t\t// types\n\t\t\t\t\t\tif ( ! detectedType && j !== types.length-1 ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Only a single match is needed for html type since it is\n\t\t\t\t\t\t// bottom of the pile and very similar to string - but it\n\t\t\t\t\t\t// must not be empty\n\t\t\t\t\t\tif ( detectedType === 'html' && ! _empty(cache[k]) ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Type is valid for all data points in the column - use this\n\t\t\t\t\t// type\n\t\t\t\t\tif ( detectedType ) {\n\t\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Fall back - if no type was detected, always use string\n\t\t\t\tif ( ! col.sType ) {\n\t\t\t\t\tcol.sType = 'string';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Take the column definitions and static columns arrays and calculate how\n\t * they relate to column indexes. The callback function will then apply the\n\t * definition found for a column to a suitable configuration object.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aoColDefs The aoColumnDefs array that is to be applied\n\t *  @param {array} aoCols The aoColumns array that defines columns individually\n\t *  @param {function} fn Callback function - takes two parameters, the calculated\n\t *    column index and the definition for that column.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, def;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\t// Column definitions with aTargets\n\t\tif ( aoColDefs )\n\t\t{\n\t\t\t/* Loop over the definitions array - loop in reverse so first instance has priority */\n\t\t\tfor ( i=aoColDefs.length-1 ; i>=0 ; i-- )\n\t\t\t{\n\t\t\t\tdef = aoColDefs[i];\n\t\n\t\t\t\t/* Each definition can target multiple columns, as it is an array */\n\t\t\t\tvar aTargets = def.target !== undefined\n\t\t\t\t\t? def.target\n\t\t\t\t\t: def.targets !== undefined\n\t\t\t\t\t\t? def.targets\n\t\t\t\t\t\t: def.aTargets;\n\t\n\t\t\t\tif ( ! Array.isArray( aTargets ) )\n\t\t\t\t{\n\t\t\t\t\taTargets = [ aTargets ];\n\t\t\t\t}\n\t\n\t\t\t\tfor ( j=0, jLen=aTargets.length ; j<jLen ; j++ )\n\t\t\t\t{\n\t\t\t\t\tif ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Add columns that we don't yet know about */\n\t\t\t\t\t\twhile( columns.length <= aTargets[j] )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t_fnAddColumn( oSettings );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t/* Integer, basic index */\n\t\t\t\t\t\tfn( aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Negative integer, right to left column counting */\n\t\t\t\t\t\tfn( columns.length+aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'string' )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Class name matching on TH element */\n\t\t\t\t\t\tfor ( k=0, kLen=columns.length ; k<kLen ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ( aTargets[j] == \"_all\" ||\n\t\t\t\t\t\t\t     $(columns[k].nTh).hasClass( aTargets[j] ) )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfn( k, def );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Statically defined columns array\n\t\tif ( aoCols )\n\t\t{\n\t\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tfn( i, aoCols[i] );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Add a data array to the table, creating DOM node etc. This is the parallel to\n\t * _fnGatherData, but for adding rows from a Javascript source, rather than a\n\t * DOM source.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aData data array to be added\n\t *  @param {node} [nTr] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddData ( oSettings, aDataIn, nTr, anTds )\n\t{\n\t\t/* Create the object for storing information about this new row */\n\t\tvar iRow = oSettings.aoData.length;\n\t\tvar oData = $.extend( true, {}, DataTable.models.oRow, {\n\t\t\tsrc: nTr ? 'dom' : 'data',\n\t\t\tidx: iRow\n\t\t} );\n\t\n\t\toData._aData = aDataIn;\n\t\toSettings.aoData.push( oData );\n\t\n\t\t/* Create the cells */\n\t\tvar nTd, sThisType;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\t// Invalidate the column types as the new data needs to be revalidated\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tcolumns[i].sType = null;\n\t\t}\n\t\n\t\t/* Add to the display array */\n\t\toSettings.aiDisplayMaster.push( iRow );\n\t\n\t\tvar id = oSettings.rowIdFn( aDataIn );\n\t\tif ( id !== undefined ) {\n\t\t\toSettings.aIds[ id ] = oData;\n\t\t}\n\t\n\t\t/* Create the DOM information, or register it if already present */\n\t\tif ( nTr || ! oSettings.oFeatures.bDeferRender )\n\t\t{\n\t\t\t_fnCreateTr( oSettings, iRow, nTr, anTds );\n\t\t}\n\t\n\t\treturn iRow;\n\t}\n\t\n\t\n\t/**\n\t * Add one or more TR elements to the table. Generally we'd expect to\n\t * use this for reading data from a DOM sourced table, but it could be\n\t * used for an TR element. Note that if a TR is given, it is used (i.e.\n\t * it is not cloned).\n\t *  @param {object} settings dataTables settings object\n\t *  @param {array|node|jQuery} trs The TR element(s) to add to the table\n\t *  @returns {array} Array of indexes for the added rows\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddTr( settings, trs )\n\t{\n\t\tvar row;\n\t\n\t\t// Allow an individual node to be passed in\n\t\tif ( ! (trs instanceof $) ) {\n\t\t\ttrs = $(trs);\n\t\t}\n\t\n\t\treturn trs.map( function (i, el) {\n\t\t\trow = _fnGetRowElements( settings, el );\n\t\t\treturn _fnAddData( settings, row.data, el, row.cells );\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Take a TR element and convert it to an index in aoData\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} n the TR element to find\n\t *  @returns {int} index if the node is found, null if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToDataIndex( oSettings, n )\n\t{\n\t\treturn (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;\n\t}\n\t\n\t\n\t/**\n\t * Take a TD element and convert it into a column data index (not the visible index)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow The row number the TD/TH can be found in\n\t *  @param {node} n The TD/TH element to find\n\t *  @returns {int} index if the node is found, -1 if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToColumnIndex( oSettings, iRow, n )\n\t{\n\t\treturn $.inArray( n, oSettings.aoData[ iRow ].anCells );\n\t}\n\t\n\t\n\t/**\n\t * Get the data for a given cell from the internal cache, taking into account data mapping\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {string} type data get type ('display', 'type' 'filter|search' 'sort|order')\n\t *  @returns {*} Cell data\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetCellData( settings, rowIdx, colIdx, type )\n\t{\n\t\tif (type === 'search') {\n\t\t\ttype = 'filter';\n\t\t}\n\t\telse if (type === 'order') {\n\t\t\ttype = 'sort';\n\t\t}\n\t\n\t\tvar draw           = settings.iDraw;\n\t\tvar col            = settings.aoColumns[colIdx];\n\t\tvar rowData        = settings.aoData[rowIdx]._aData;\n\t\tvar defaultContent = col.sDefaultContent;\n\t\tvar cellData       = col.fnGetData( rowData, type, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t} );\n\t\n\t\tif ( cellData === undefined ) {\n\t\t\tif ( settings.iDrawError != draw && defaultContent === null ) {\n\t\t\t\t_fnLog( settings, 0, \"Requested unknown parameter \"+\n\t\t\t\t\t(typeof col.mData=='function' ? '{function}' : \"'\"+col.mData+\"'\")+\n\t\t\t\t\t\" for row \"+rowIdx+\", column \"+colIdx, 4 );\n\t\t\t\tsettings.iDrawError = draw;\n\t\t\t}\n\t\t\treturn defaultContent;\n\t\t}\n\t\n\t\t// When the data source is null and a specific data type is requested (i.e.\n\t\t// not the original data), we can use default column data\n\t\tif ( (cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined ) {\n\t\t\tcellData = defaultContent;\n\t\t}\n\t\telse if ( typeof cellData === 'function' ) {\n\t\t\t// If the data source is a function, then we run it and use the return,\n\t\t\t// executing in the scope of the data object (for instances)\n\t\t\treturn cellData.call( rowData );\n\t\t}\n\t\n\t\tif ( cellData === null && type === 'display' ) {\n\t\t\treturn '';\n\t\t}\n\t\n\t\tif ( type === 'filter' ) {\n\t\t\tvar fomatters = DataTable.ext.type.search;\n\t\n\t\t\tif ( fomatters[ col.sType ] ) {\n\t\t\t\tcellData = fomatters[ col.sType ]( cellData );\n\t\t\t}\n\t\t}\n\t\n\t\treturn cellData;\n\t}\n\t\n\t\n\t/**\n\t * Set the value for a specific cell, into the internal data cache\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {*} val Value to set\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSetCellData( settings, rowIdx, colIdx, val )\n\t{\n\t\tvar col     = settings.aoColumns[colIdx];\n\t\tvar rowData = settings.aoData[rowIdx]._aData;\n\t\n\t\tcol.fnSetData( rowData, val, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t}  );\n\t}\n\t\n\t\n\t// Private variable that is used to match action syntax in the data property object\n\tvar __reArray = /\\[.*?\\]$/;\n\tvar __reFn = /\\(\\)$/;\n\t\n\t/**\n\t * Split string on periods, taking into account escaped periods\n\t * @param  {string} str String to split\n\t * @return {array} Split string\n\t */\n\tfunction _fnSplitObjNotation( str )\n\t{\n\t\treturn $.map( str.match(/(\\\\.|[^\\.])+/g) || [''], function ( s ) {\n\t\t\treturn s.replace(/\\\\\\./g, '.');\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Return a function that can be used to get data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data get function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnGetObjectDataFn = DataTable.util.get;\n\t\n\t\n\t/**\n\t * Return a function that can be used to set data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data set function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnSetObjectDataFn = DataTable.util.set;\n\t\n\t\n\t/**\n\t * Return an array with the full table data\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns array {array} aData Master data array\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetDataMaster ( settings )\n\t{\n\t\treturn _pluck( settings.aoData, '_aData' );\n\t}\n\t\n\t\n\t/**\n\t * Nuke the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnClearTable( settings )\n\t{\n\t\tsettings.aoData.length = 0;\n\t\tsettings.aiDisplayMaster.length = 0;\n\t\tsettings.aiDisplay.length = 0;\n\t\tsettings.aIds = {};\n\t}\n\t\n\t\n\t /**\n\t * Take an array of integers (index array) and remove a target integer (value - not\n\t * the key!)\n\t *  @param {array} a Index array to target\n\t *  @param {int} iTarget value to find\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDeleteIndex( a, iTarget, splice )\n\t{\n\t\tvar iTargetIndex = -1;\n\t\n\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( a[i] == iTarget )\n\t\t\t{\n\t\t\t\tiTargetIndex = i;\n\t\t\t}\n\t\t\telse if ( a[i] > iTarget )\n\t\t\t{\n\t\t\t\ta[i]--;\n\t\t\t}\n\t\t}\n\t\n\t\tif ( iTargetIndex != -1 && splice === undefined )\n\t\t{\n\t\t\ta.splice( iTargetIndex, 1 );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Mark cached data as invalid such that a re-read of the data will occur when\n\t * the cached data is next requested. Also update from the data source object.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {int}    rowIdx   Row index to invalidate\n\t * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'\n\t *     or 'data'\n\t * @param {int}    [colIdx] Column index to invalidate. If undefined the whole\n\t *     row will be invalidated\n\t * @memberof DataTable#oApi\n\t *\n\t * @todo For the modularisation of v1.11 this will need to become a callback, so\n\t *   the sort and filter methods can subscribe to it. That will required\n\t *   initialisation options for sorting, which is why it is not already baked in\n\t */\n\tfunction _fnInvalidate( settings, rowIdx, src, colIdx )\n\t{\n\t\tvar row = settings.aoData[ rowIdx ];\n\t\tvar i, ien;\n\t\tvar cellWrite = function ( cell, col ) {\n\t\t\t// This is very frustrating, but in IE if you just write directly\n\t\t\t// to innerHTML, and elements that are overwritten are GC'ed,\n\t\t\t// even if there is a reference to them elsewhere\n\t\t\twhile ( cell.childNodes.length ) {\n\t\t\t\tcell.removeChild( cell.firstChild );\n\t\t\t}\n\t\n\t\t\tcell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );\n\t\t};\n\t\n\t\t// Are we reading last data from DOM or the data object?\n\t\tif ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {\n\t\t\t// Read the data from the DOM\n\t\t\trow._aData = _fnGetRowElements(\n\t\t\t\t\tsettings, row, colIdx, colIdx === undefined ? undefined : row._aData\n\t\t\t\t)\n\t\t\t\t.data;\n\t\t}\n\t\telse {\n\t\t\t// Reading from data object, update the DOM\n\t\t\tvar cells = row.anCells;\n\t\n\t\t\tif ( cells ) {\n\t\t\t\tif ( colIdx !== undefined ) {\n\t\t\t\t\tcellWrite( cells[colIdx], colIdx );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\t\t\tcellWrite( cells[i], i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// For both row and cell invalidation, the cached data for sorting and\n\t\t// filtering is nulled out\n\t\trow._aSortData = null;\n\t\trow._aFilterData = null;\n\t\n\t\t// Invalidate the type for a specific column (if given) or all columns since\n\t\t// the data might have changed\n\t\tvar cols = settings.aoColumns;\n\t\tif ( colIdx !== undefined ) {\n\t\t\tcols[ colIdx ].sType = null;\n\t\t}\n\t\telse {\n\t\t\tfor ( i=0, ien=cols.length ; i<ien ; i++ ) {\n\t\t\t\tcols[i].sType = null;\n\t\t\t}\n\t\n\t\t\t// Update DataTables special `DT_*` attributes for the row\n\t\t\t_fnRowAttributes( settings, row );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a data source object from an HTML row, reading the contents of the\n\t * cells that are in the row.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {node|object} TR element from which to read data or existing row\n\t *   object from which to re-read the data from the cells\n\t * @param {int} [colIdx] Optional column index\n\t * @param {array|object} [d] Data source object. If `colIdx` is given then this\n\t *   parameter should also be given and will be used to write the data into.\n\t *   Only the column in question will be written\n\t * @returns {object} Object with two parameters: `data` the data read, in\n\t *   document order, and `cells` and array of nodes (they can be useful to the\n\t *   caller, so rather than needing a second traversal to get them, just return\n\t *   them from here).\n\t * @memberof DataTable#oApi\n\t */\n\tfunction _fnGetRowElements( settings, row, colIdx, d )\n\t{\n\t\tvar\n\t\t\ttds = [],\n\t\t\ttd = row.firstChild,\n\t\t\tname, col, o, i=0, contents,\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tobjectRead = settings._rowReadObject;\n\t\n\t\t// Allow the data object to be passed in, or construct\n\t\td = d !== undefined ?\n\t\t\td :\n\t\t\tobjectRead ?\n\t\t\t\t{} :\n\t\t\t\t[];\n\t\n\t\tvar attr = function ( str, td  ) {\n\t\t\tif ( typeof str === 'string' ) {\n\t\t\t\tvar idx = str.indexOf('@');\n\t\n\t\t\t\tif ( idx !== -1 ) {\n\t\t\t\t\tvar attr = str.substring( idx+1 );\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( str );\n\t\t\t\t\tsetter( d, td.getAttribute( attr ) );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\t// Read data from a cell and store into the data object\n\t\tvar cellProcess = function ( cell ) {\n\t\t\tif ( colIdx === undefined || colIdx === i ) {\n\t\t\t\tcol = columns[i];\n\t\t\t\tcontents = (cell.innerHTML).trim();\n\t\n\t\t\t\tif ( col && col._bAttrSrc ) {\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( col.mData._ );\n\t\t\t\t\tsetter( d, contents );\n\t\n\t\t\t\t\tattr( col.mData.sort, cell );\n\t\t\t\t\tattr( col.mData.type, cell );\n\t\t\t\t\tattr( col.mData.filter, cell );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Depending on the `data` option for the columns the data can\n\t\t\t\t\t// be read to either an object or an array.\n\t\t\t\t\tif ( objectRead ) {\n\t\t\t\t\t\tif ( ! col._setter ) {\n\t\t\t\t\t\t\t// Cache the setter function\n\t\t\t\t\t\t\tcol._setter = _fnSetObjectDataFn( col.mData );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcol._setter( d, contents );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\td[i] = contents;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t};\n\t\n\t\tif ( td ) {\n\t\t\t// `tr` element was passed in\n\t\t\twhile ( td ) {\n\t\t\t\tname = td.nodeName.toUpperCase();\n\t\n\t\t\t\tif ( name == \"TD\" || name == \"TH\" ) {\n\t\t\t\t\tcellProcess( td );\n\t\t\t\t\ttds.push( td );\n\t\t\t\t}\n\t\n\t\t\t\ttd = td.nextSibling;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Existing row object passed in\n\t\t\ttds = row.anCells;\n\t\n\t\t\tfor ( var j=0, jen=tds.length ; j<jen ; j++ ) {\n\t\t\t\tcellProcess( tds[j] );\n\t\t\t}\n\t\t}\n\t\n\t\t// Read the ID from the DOM if present\n\t\tvar rowNode = row.firstChild ? row : row.nTr;\n\t\n\t\tif ( rowNode ) {\n\t\t\tvar id = rowNode.getAttribute( 'id' );\n\t\n\t\t\tif ( id ) {\n\t\t\t\t_fnSetObjectDataFn( settings.rowId )( d, id );\n\t\t\t}\n\t\t}\n\t\n\t\treturn {\n\t\t\tdata: d,\n\t\t\tcells: tds\n\t\t};\n\t}\n\t/**\n\t * Create a new TR element (and it's TD children) for a row\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow Row to consider\n\t *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCreateTr ( oSettings, iRow, nTrIn, anTds )\n\t{\n\t\tvar\n\t\t\trow = oSettings.aoData[iRow],\n\t\t\trowData = row._aData,\n\t\t\tcells = [],\n\t\t\tnTr, nTd, oCol,\n\t\t\ti, iLen, create;\n\t\n\t\tif ( row.nTr === null )\n\t\t{\n\t\t\tnTr = nTrIn || document.createElement('tr');\n\t\n\t\t\trow.nTr = nTr;\n\t\t\trow.anCells = cells;\n\t\n\t\t\t/* Use a private property on the node to allow reserve mapping from the node\n\t\t\t * to the aoData array for fast look up\n\t\t\t */\n\t\t\tnTr._DT_RowIndex = iRow;\n\t\n\t\t\t/* Special parameters can be given by the data source to be used on the row */\n\t\t\t_fnRowAttributes( oSettings, row );\n\t\n\t\t\t/* Process each column */\n\t\t\tfor ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\toCol = oSettings.aoColumns[i];\n\t\t\t\tcreate = nTrIn ? false : true;\n\t\n\t\t\t\tnTd = create ? document.createElement( oCol.sCellType ) : anTds[i];\n\t\n\t\t\t\tif (! nTd) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t}\n\t\n\t\t\t\tnTd._DT_CellIndex = {\n\t\t\t\t\trow: iRow,\n\t\t\t\t\tcolumn: i\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tcells.push( nTd );\n\t\n\t\t\t\t// Need to create the HTML if new, or if a rendering function is defined\n\t\t\t\tif ( create || ((oCol.mRender || oCol.mData !== i) &&\n\t\t\t\t\t (!$.isPlainObject(oCol.mData) || oCol.mData._ !== i+'.display')\n\t\t\t\t)) {\n\t\t\t\t\tnTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );\n\t\t\t\t}\n\t\n\t\t\t\t/* Add user defined class */\n\t\t\t\tif ( oCol.sClass )\n\t\t\t\t{\n\t\t\t\t\tnTd.className += ' '+oCol.sClass;\n\t\t\t\t}\n\t\n\t\t\t\t// Visibility - add or remove as required\n\t\t\t\tif ( oCol.bVisible && ! nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTr.appendChild( nTd );\n\t\t\t\t}\n\t\t\t\telse if ( ! oCol.bVisible && nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTd.parentNode.removeChild( nTd );\n\t\t\t\t}\n\t\n\t\t\t\tif ( oCol.fnCreatedCell )\n\t\t\t\t{\n\t\t\t\t\toCol.fnCreatedCell.call( oSettings.oInstance,\n\t\t\t\t\t\tnTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow, cells] );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Add attributes to a row based on the special `DT_*` parameters in a data\n\t * source object.\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} DataTables row object for the row to be modified\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnRowAttributes( settings, row )\n\t{\n\t\tvar tr = row.nTr;\n\t\tvar data = row._aData;\n\t\n\t\tif ( tr ) {\n\t\t\tvar id = settings.rowIdFn( data );\n\t\n\t\t\tif ( id ) {\n\t\t\t\ttr.id = id;\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowClass ) {\n\t\t\t\t// Remove any classes added by DT_RowClass before\n\t\t\t\tvar a = data.DT_RowClass.split(' ');\n\t\t\t\trow.__rowc = row.__rowc ?\n\t\t\t\t\t_unique( row.__rowc.concat( a ) ) :\n\t\t\t\t\ta;\n\t\n\t\t\t\t$(tr)\n\t\t\t\t\t.removeClass( row.__rowc.join(' ') )\n\t\t\t\t\t.addClass( data.DT_RowClass );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowAttr ) {\n\t\t\t\t$(tr).attr( data.DT_RowAttr );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowData ) {\n\t\t\t\t$(tr).data( data.DT_RowData );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Create the HTML header for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBuildHead( oSettings )\n\t{\n\t\tvar i, ien, cell, row, column;\n\t\tvar thead = oSettings.nTHead;\n\t\tvar tfoot = oSettings.nTFoot;\n\t\tvar createHeader = $('th, td', thead).length === 0;\n\t\tvar classes = oSettings.oClasses;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\tif ( createHeader ) {\n\t\t\trow = $('<tr/>').appendTo( thead );\n\t\t}\n\t\n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcell = $( column.nTh ).addClass( column.sClass );\n\t\n\t\t\tif ( createHeader ) {\n\t\t\t\tcell.appendTo( row );\n\t\t\t}\n\t\n\t\t\t// 1.11 move into sorting\n\t\t\tif ( oSettings.oFeatures.bSort ) {\n\t\t\t\tcell.addClass( column.sSortingClass );\n\t\n\t\t\t\tif ( column.bSortable !== false ) {\n\t\t\t\t\tcell\n\t\t\t\t\t\t.attr( 'tabindex', oSettings.iTabIndex )\n\t\t\t\t\t\t.attr( 'aria-controls', oSettings.sTableId );\n\t\n\t\t\t\t\t_fnSortAttachListener( oSettings, column.nTh, i );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( column.sTitle != cell[0].innerHTML ) {\n\t\t\t\tcell.html( column.sTitle );\n\t\t\t}\n\t\n\t\t\t_fnRenderer( oSettings, 'header' )(\n\t\t\t\toSettings, cell, column, classes\n\t\t\t);\n\t\t}\n\t\n\t\tif ( createHeader ) {\n\t\t\t_fnDetectHeader( oSettings.aoHeader, thead );\n\t\t}\n\t\n\t\t/* Deal with the footer - add classes if required */\n\t\t$(thead).children('tr').children('th, td').addClass( classes.sHeaderTH );\n\t\t$(tfoot).children('tr').children('th, td').addClass( classes.sFooterTH );\n\t\n\t\t// Cache the footer cells. Note that we only take the cells from the first\n\t\t// row in the footer. If there is more than one row the user wants to\n\t\t// interact with, they need to use the table().foot() method. Note also this\n\t\t// allows cells to be used for multiple columns using colspan\n\t\tif ( tfoot !== null ) {\n\t\t\tvar cells = oSettings.aoFooter[0];\n\t\n\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tcolumn = columns[i];\n\t\n\t\t\t\tif (column) {\n\t\t\t\t\tcolumn.nTf = cells[i].cell;\n\t\t\n\t\t\t\t\tif ( column.sClass ) {\n\t\t\t\t\t\t$(column.nTf).addClass( column.sClass );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Draw the header (or footer) element based on the column visibility states. The\n\t * methodology here is to use the layout array from _fnDetectHeader, modified for\n\t * the instantaneous column visibility, to construct the new layout. The grid is\n\t * traversed over cell at a time in a rows x columns grid fashion, although each\n\t * cell insert can cover multiple elements in the grid - which is tracks using the\n\t * aApplied array. Cell inserts in the grid will only occur where there isn't\n\t * already a cell in that position.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param array {objects} aoSource Layout array from _fnDetectHeader\n\t *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDrawHead( oSettings, aoSource, bIncludeHidden )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, n, nLocalTr;\n\t\tvar aoLocal = [];\n\t\tvar aApplied = [];\n\t\tvar iColumns = oSettings.aoColumns.length;\n\t\tvar iRowspan, iColspan;\n\t\n\t\tif ( ! aoSource )\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\n\t\tif (  bIncludeHidden === undefined )\n\t\t{\n\t\t\tbIncludeHidden = false;\n\t\t}\n\t\n\t\t/* Make a copy of the master layout array, but without the visible columns in it */\n\t\tfor ( i=0, iLen=aoSource.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taoLocal[i] = aoSource[i].slice();\n\t\t\taoLocal[i].nTr = aoSource[i].nTr;\n\t\n\t\t\t/* Remove any columns which are currently hidden */\n\t\t\tfor ( j=iColumns-1 ; j>=0 ; j-- )\n\t\t\t{\n\t\t\t\tif ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )\n\t\t\t\t{\n\t\t\t\t\taoLocal[i].splice( j, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Prep the applied array - it needs an element for each row */\n\t\t\taApplied.push( [] );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnLocalTr = aoLocal[i].nTr;\n\t\n\t\t\t/* All cells are going to be replaced, so empty out the row */\n\t\t\tif ( nLocalTr )\n\t\t\t{\n\t\t\t\twhile( (n = nLocalTr.firstChild) )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.removeChild( n );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tiRowspan = 1;\n\t\t\t\tiColspan = 1;\n\t\n\t\t\t\t/* Check to see if there is already a cell (row/colspan) covering our target\n\t\t\t\t * insert point. If there is, then there is nothing to do.\n\t\t\t\t */\n\t\t\t\tif ( aApplied[i][j] === undefined )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.appendChild( aoLocal[i][j].cell );\n\t\t\t\t\taApplied[i][j] = 1;\n\t\n\t\t\t\t\t/* Expand the cell to cover as many rows as needed */\n\t\t\t\t\twhile ( aoLocal[i+iRowspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\taApplied[i+iRowspan][j] = 1;\n\t\t\t\t\t\tiRowspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Expand the cell to cover as many columns as needed */\n\t\t\t\t\twhile ( aoLocal[i][j+iColspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Must update the applied array over the rows for the columns */\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taApplied[i+k][j+iColspan] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tiColspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Do the actual expansion in the DOM */\n\t\t\t\t\t$(aoLocal[i][j].cell)\n\t\t\t\t\t\t.attr('rowspan', iRowspan)\n\t\t\t\t\t\t.attr('colspan', iColspan);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Insert the required TR nodes into the table for display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param ajaxComplete true after ajax call to complete rendering\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDraw( oSettings, ajaxComplete )\n\t{\n\t\t// Allow for state saving and a custom start position\n\t\t_fnStart( oSettings );\n\t\n\t\t/* Provide a pre-callback function which can be used to cancel the draw is false is returned */\n\t\tvar aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );\n\t\tif ( $.inArray( false, aPreDraw ) !== -1 )\n\t\t{\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar anRows = [];\n\t\tvar iRowCount = 0;\n\t\tvar asStripeClasses = oSettings.asStripeClasses;\n\t\tvar iStripes = asStripeClasses.length;\n\t\tvar oLang = oSettings.oLanguage;\n\t\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\t\tvar aiDisplay = oSettings.aiDisplay;\n\t\tvar iDisplayStart = oSettings._iDisplayStart;\n\t\tvar iDisplayEnd = oSettings.fnDisplayEnd();\n\t\n\t\toSettings.bDrawing = true;\n\t\n\t\t/* Server-side processing draw intercept */\n\t\tif ( oSettings.bDeferLoading )\n\t\t{\n\t\t\toSettings.bDeferLoading = false;\n\t\t\toSettings.iDraw++;\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t}\n\t\telse if ( !bServerSide )\n\t\t{\n\t\t\toSettings.iDraw++;\n\t\t}\n\t\telse if ( !oSettings.bDestroying && !ajaxComplete)\n\t\t{\n\t\t\t_fnAjaxUpdate( oSettings );\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( aiDisplay.length !== 0 )\n\t\t{\n\t\t\tvar iStart = bServerSide ? 0 : iDisplayStart;\n\t\t\tvar iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;\n\t\n\t\t\tfor ( var j=iStart ; j<iEnd ; j++ )\n\t\t\t{\n\t\t\t\tvar iDataIndex = aiDisplay[j];\n\t\t\t\tvar aoData = oSettings.aoData[ iDataIndex ];\n\t\t\t\tif ( aoData.nTr === null )\n\t\t\t\t{\n\t\t\t\t\t_fnCreateTr( oSettings, iDataIndex );\n\t\t\t\t}\n\t\n\t\t\t\tvar nRow = aoData.nTr;\n\t\n\t\t\t\t/* Remove the old striping classes and then add the new one */\n\t\t\t\tif ( iStripes !== 0 )\n\t\t\t\t{\n\t\t\t\t\tvar sStripe = asStripeClasses[ iRowCount % iStripes ];\n\t\t\t\t\tif ( aoData._sRowStripe != sStripe )\n\t\t\t\t\t{\n\t\t\t\t\t\t$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );\n\t\t\t\t\t\taoData._sRowStripe = sStripe;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Row callback functions - might want to manipulate the row\n\t\t\t\t// iRowCount and j are not currently documented. Are they at all\n\t\t\t\t// useful?\n\t\t\t\t_fnCallbackFire( oSettings, 'aoRowCallback', null,\n\t\t\t\t\t[nRow, aoData._aData, iRowCount, j, iDataIndex] );\n\t\n\t\t\t\tanRows.push( nRow );\n\t\t\t\tiRowCount++;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Table is empty - create a row with an empty message in it */\n\t\t\tvar sZero = oLang.sZeroRecords;\n\t\t\tif ( oSettings.iDraw == 1 &&  _fnDataSource( oSettings ) == 'ajax' )\n\t\t\t{\n\t\t\t\tsZero = oLang.sLoadingRecords;\n\t\t\t}\n\t\t\telse if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )\n\t\t\t{\n\t\t\t\tsZero = oLang.sEmptyTable;\n\t\t\t}\n\t\n\t\t\tanRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )\n\t\t\t\t.append( $('<td />', {\n\t\t\t\t\t'valign':  'top',\n\t\t\t\t\t'colSpan': _fnVisbleColumns( oSettings ),\n\t\t\t\t\t'class':   oSettings.oClasses.sRowEmpty\n\t\t\t\t} ).html( sZero ) )[0];\n\t\t}\n\t\n\t\t/* Header and footer callbacks */\n\t\t_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\t_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\tvar body = $(oSettings.nTBody);\n\t\n\t\tbody.children().detach();\n\t\tbody.append( $(anRows) );\n\t\n\t\t/* Call all required callback functions for the end of a draw */\n\t\t_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );\n\t\n\t\t/* Draw is complete, sorting and filtering must be as well */\n\t\toSettings.bSorted = false;\n\t\toSettings.bFiltered = false;\n\t\toSettings.bDrawing = false;\n\t}\n\t\n\t\n\t/**\n\t * Redraw the table - taking account of the various features which are enabled\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {boolean} [holdPosition] Keep the current paging position. By default\n\t *    the paging is reset to the first page\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReDraw( settings, holdPosition )\n\t{\n\t\tvar\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tsort     = features.bSort,\n\t\t\tfilter   = features.bFilter;\n\t\n\t\tif ( sort ) {\n\t\t\t_fnSort( settings );\n\t\t}\n\t\n\t\tif ( filter ) {\n\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t\t}\n\t\telse {\n\t\t\t// No filtering, so we want to just use the display master\n\t\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\t}\n\t\n\t\tif ( holdPosition !== true ) {\n\t\t\tsettings._iDisplayStart = 0;\n\t\t}\n\t\n\t\t// Let any modules know about the draw hold position state (used by\n\t\t// scrolling internally)\n\t\tsettings._drawHold = holdPosition;\n\t\n\t\t_fnDraw( settings );\n\t\n\t\tsettings._drawHold = false;\n\t}\n\t\n\t\n\t/**\n\t * Add the options to the page HTML for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddOptionsHtml ( oSettings )\n\t{\n\t\tvar classes = oSettings.oClasses;\n\t\tvar table = $(oSettings.nTable);\n\t\tvar holding = $('<div/>').insertBefore( table ); // Holding element for speed\n\t\tvar features = oSettings.oFeatures;\n\t\n\t\t// All DataTables are wrapped in a div\n\t\tvar insert = $('<div/>', {\n\t\t\tid:      oSettings.sTableId+'_wrapper',\n\t\t\t'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)\n\t\t} );\n\t\n\t\toSettings.nHolding = holding[0];\n\t\toSettings.nTableWrapper = insert[0];\n\t\toSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;\n\t\n\t\t/* Loop over the user set positioning and place the elements as needed */\n\t\tvar aDom = oSettings.sDom.split('');\n\t\tvar featureNode, cOption, nNewNode, cNext, sAttr, j;\n\t\tfor ( var i=0 ; i<aDom.length ; i++ )\n\t\t{\n\t\t\tfeatureNode = null;\n\t\t\tcOption = aDom[i];\n\t\n\t\t\tif ( cOption == '<' )\n\t\t\t{\n\t\t\t\t/* New container div */\n\t\t\t\tnNewNode = $('<div/>')[0];\n\t\n\t\t\t\t/* Check to see if we should append an id and/or a class name to the container */\n\t\t\t\tcNext = aDom[i+1];\n\t\t\t\tif ( cNext == \"'\" || cNext == '\"' )\n\t\t\t\t{\n\t\t\t\t\tsAttr = \"\";\n\t\t\t\t\tj = 2;\n\t\t\t\t\twhile ( aDom[i+j] != cNext )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr += aDom[i+j];\n\t\t\t\t\t\tj++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* Replace jQuery UI constants @todo depreciated */\n\t\t\t\t\tif ( sAttr == \"H\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = classes.sJUIHeader;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr == \"F\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = classes.sJUIFooter;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t/* The attribute can be in the format of \"#id.class\", \"#id\" or \"class\" This logic\n\t\t\t\t\t * breaks the string into parts and applies them as needed\n\t\t\t\t\t */\n\t\t\t\t\tif ( sAttr.indexOf('.') != -1 )\n\t\t\t\t\t{\n\t\t\t\t\t\tvar aSplit = sAttr.split('.');\n\t\t\t\t\t\tnNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);\n\t\t\t\t\t\tnNewNode.className = aSplit[1];\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr.charAt(0) == \"#\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.id = sAttr.substr(1, sAttr.length-1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.className = sAttr;\n\t\t\t\t\t}\n\t\n\t\t\t\t\ti += j; /* Move along the position array */\n\t\t\t\t}\n\t\n\t\t\t\tinsert.append( nNewNode );\n\t\t\t\tinsert = $(nNewNode);\n\t\t\t}\n\t\t\telse if ( cOption == '>' )\n\t\t\t{\n\t\t\t\t/* End container div */\n\t\t\t\tinsert = insert.parent();\n\t\t\t}\n\t\t\t// @todo Move options into their own plugins?\n\t\t\telse if ( cOption == 'l' && features.bPaginate && features.bLengthChange )\n\t\t\t{\n\t\t\t\t/* Length */\n\t\t\t\tfeatureNode = _fnFeatureHtmlLength( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'f' && features.bFilter )\n\t\t\t{\n\t\t\t\t/* Filter */\n\t\t\t\tfeatureNode = _fnFeatureHtmlFilter( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'r' && features.bProcessing )\n\t\t\t{\n\t\t\t\t/* pRocessing */\n\t\t\t\tfeatureNode = _fnFeatureHtmlProcessing( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 't' )\n\t\t\t{\n\t\t\t\t/* Table */\n\t\t\t\tfeatureNode = _fnFeatureHtmlTable( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption ==  'i' && features.bInfo )\n\t\t\t{\n\t\t\t\t/* Info */\n\t\t\t\tfeatureNode = _fnFeatureHtmlInfo( oSettings );\n\t\t\t}\n\t\t\telse if ( cOption == 'p' && features.bPaginate )\n\t\t\t{\n\t\t\t\t/* Pagination */\n\t\t\t\tfeatureNode = _fnFeatureHtmlPaginate( oSettings );\n\t\t\t}\n\t\t\telse if ( DataTable.ext.feature.length !== 0 )\n\t\t\t{\n\t\t\t\t/* Plug-in features */\n\t\t\t\tvar aoFeatures = DataTable.ext.feature;\n\t\t\t\tfor ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )\n\t\t\t\t{\n\t\t\t\t\tif ( cOption == aoFeatures[k].cFeature )\n\t\t\t\t\t{\n\t\t\t\t\t\tfeatureNode = aoFeatures[k].fnInit( oSettings );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Add to the 2D features array */\n\t\t\tif ( featureNode )\n\t\t\t{\n\t\t\t\tvar aanFeatures = oSettings.aanFeatures;\n\t\n\t\t\t\tif ( ! aanFeatures[cOption] )\n\t\t\t\t{\n\t\t\t\t\taanFeatures[cOption] = [];\n\t\t\t\t}\n\t\n\t\t\t\taanFeatures[cOption].push( featureNode );\n\t\t\t\tinsert.append( featureNode );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Built our DOM structure - replace the holding div with what we want */\n\t\tholding.replaceWith( insert );\n\t\toSettings.nHolding = null;\n\t}\n\t\n\t\n\t/**\n\t * Use the DOM source to create up an array of header cells. The idea here is to\n\t * create a layout grid (array) of rows x columns, which contains a reference\n\t * to the cell that that point in the grid (regardless of col/rowspan), such that\n\t * any column / row could be removed and the new grid constructed\n\t *  @param array {object} aLayout Array to store the calculated layout in\n\t *  @param {node} nThead The header/footer element for the table\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDetectHeader ( aLayout, nThead )\n\t{\n\t\tvar nTrs = $(nThead).children('tr');\n\t\tvar nTr, nCell;\n\t\tvar i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;\n\t\tvar bUnique;\n\t\tvar fnShiftCol = function ( a, i, j ) {\n\t\t\tvar k = a[i];\n\t                while ( k[j] ) {\n\t\t\t\tj++;\n\t\t\t}\n\t\t\treturn j;\n\t\t};\n\t\n\t\taLayout.splice( 0, aLayout.length );\n\t\n\t\t/* We know how many rows there are in the layout - so prep it */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taLayout.push( [] );\n\t\t}\n\t\n\t\t/* Calculate a layout array */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnTr = nTrs[i];\n\t\t\tiColumn = 0;\n\t\n\t\t\t/* For every cell in the row... */\n\t\t\tnCell = nTr.firstChild;\n\t\t\twhile ( nCell ) {\n\t\t\t\tif ( nCell.nodeName.toUpperCase() == \"TD\" ||\n\t\t\t\t     nCell.nodeName.toUpperCase() == \"TH\" )\n\t\t\t\t{\n\t\t\t\t\t/* Get the col and rowspan attributes from the DOM and sanitise them */\n\t\t\t\t\tiColspan = nCell.getAttribute('colspan') * 1;\n\t\t\t\t\tiRowspan = nCell.getAttribute('rowspan') * 1;\n\t\t\t\t\tiColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;\n\t\t\t\t\tiRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;\n\t\n\t\t\t\t\t/* There might be colspan cells already in this row, so shift our target\n\t\t\t\t\t * accordingly\n\t\t\t\t\t */\n\t\t\t\t\tiColShifted = fnShiftCol( aLayout, i, iColumn );\n\t\n\t\t\t\t\t/* Cache calculation for unique columns */\n\t\t\t\t\tbUnique = iColspan === 1 ? true : false;\n\t\n\t\t\t\t\t/* If there is col / rowspan, copy the information into the layout grid */\n\t\t\t\t\tfor ( l=0 ; l<iColspan ; l++ )\n\t\t\t\t\t{\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taLayout[i+k][iColShifted+l] = {\n\t\t\t\t\t\t\t\t\"cell\": nCell,\n\t\t\t\t\t\t\t\t\"unique\": bUnique\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\taLayout[i+k].nTr = nTr;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCell = nCell.nextSibling;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Get an array of unique th elements, one for each column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nHeader automatically detect the layout from this node - optional\n\t *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional\n\t *  @returns array {node} aReturn list of unique th's\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetUniqueThs ( oSettings, nHeader, aLayout )\n\t{\n\t\tvar aReturn = [];\n\t\tif ( !aLayout )\n\t\t{\n\t\t\taLayout = oSettings.aoHeader;\n\t\t\tif ( nHeader )\n\t\t\t{\n\t\t\t\taLayout = [];\n\t\t\t\t_fnDetectHeader( aLayout, nHeader );\n\t\t\t}\n\t\t}\n\t\n\t\tfor ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfor ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tif ( aLayout[i][j].unique &&\n\t\t\t\t\t (!aReturn[j] || !oSettings.bSortCellsTop) )\n\t\t\t\t{\n\t\t\t\t\taReturn[j] = aLayout[i][j].cell;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn aReturn;\n\t}\n\t\n\t/**\n\t * Set the start position for draw\n\t *  @param {object} oSettings dataTables settings object\n\t */\n\tfunction _fnStart( oSettings )\n\t{\n\t\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\t\tvar iInitDisplayStart = oSettings.iInitDisplayStart;\n\t\n\t\t// Check and see if we have an initial draw position from state saving\n\t\tif ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )\n\t\t{\n\t\t\toSettings._iDisplayStart = bServerSide ?\n\t\t\t\tiInitDisplayStart :\n\t\t\t\tiInitDisplayStart >= oSettings.fnRecordsDisplay() ?\n\t\t\t\t\t0 :\n\t\t\t\t\tiInitDisplayStart;\n\t\n\t\t\toSettings.iInitDisplayStart = -1;\n\t\t}\n\t}\n\t\n\t/**\n\t * Create an Ajax call based on the table's settings, taking into account that\n\t * parameters can have multiple forms, and backwards compatibility.\n\t *\n\t * @param {object} oSettings dataTables settings object\n\t * @param {array} data Data to send to the server, required by\n\t *     DataTables - may be augmented by developer callbacks\n\t * @param {function} fn Callback function to run when data is obtained\n\t */\n\tfunction _fnBuildAjax( oSettings, data, fn )\n\t{\n\t\t// Compatibility with 1.9-, allow fnServerData and event to manipulate\n\t\t_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );\n\t\n\t\t// Convert to object based for 1.10+ if using the old array scheme which can\n\t\t// come from server-side processing or serverParams\n\t\tif ( data && Array.isArray(data) ) {\n\t\t\tvar tmp = {};\n\t\t\tvar rbracket = /(.*?)\\[\\]$/;\n\t\n\t\t\t$.each( data, function (key, val) {\n\t\t\t\tvar match = val.name.match(rbracket);\n\t\n\t\t\t\tif ( match ) {\n\t\t\t\t\t// Support for arrays\n\t\t\t\t\tvar name = match[0];\n\t\n\t\t\t\t\tif ( ! tmp[ name ] ) {\n\t\t\t\t\t\ttmp[ name ] = [];\n\t\t\t\t\t}\n\t\t\t\t\ttmp[ name ].push( val.value );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttmp[val.name] = val.value;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tdata = tmp;\n\t\t}\n\t\n\t\tvar ajaxData;\n\t\tvar ajax = oSettings.ajax;\n\t\tvar instance = oSettings.oInstance;\n\t\tvar callback = function ( json ) {\n\t\t\tvar status = oSettings.jqXHR\n\t\t\t\t? oSettings.jqXHR.status\n\t\t\t\t: null;\n\t\n\t\t\tif ( json === null || (typeof status === 'number' && status == 204 ) ) {\n\t\t\t\tjson = {};\n\t\t\t\t_fnAjaxDataSrc( oSettings, json, [] );\n\t\t\t}\n\t\n\t\t\tvar error = json.error || json.sError;\n\t\t\tif ( error ) {\n\t\t\t\t_fnLog( oSettings, 0, error );\n\t\t\t}\n\t\n\t\t\toSettings.json = json;\n\t\n\t\t\t_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );\n\t\t\tfn( json );\n\t\t};\n\t\n\t\tif ( $.isPlainObject( ajax ) && ajax.data )\n\t\t{\n\t\t\tajaxData = ajax.data;\n\t\n\t\t\tvar newData = typeof ajaxData === 'function' ?\n\t\t\t\tajaxData( data, oSettings ) :  // fn can manipulate data or return\n\t\t\t\tajaxData;                      // an object object or array to merge\n\t\n\t\t\t// If the function returned something, use that alone\n\t\t\tdata = typeof ajaxData === 'function' && newData ?\n\t\t\t\tnewData :\n\t\t\t\t$.extend( true, data, newData );\n\t\n\t\t\t// Remove the data property as we've resolved it already and don't want\n\t\t\t// jQuery to do it again (it is restored at the end of the function)\n\t\t\tdelete ajax.data;\n\t\t}\n\t\n\t\tvar baseAjax = {\n\t\t\t\"data\": data,\n\t\t\t\"success\": callback,\n\t\t\t\"dataType\": \"json\",\n\t\t\t\"cache\": false,\n\t\t\t\"type\": oSettings.sServerMethod,\n\t\t\t\"error\": function (xhr, error, thrown) {\n\t\t\t\tvar ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );\n\t\n\t\t\t\tif ( $.inArray( true, ret ) === -1 ) {\n\t\t\t\t\tif ( error == \"parsererror\" ) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Invalid JSON response', 1 );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Ajax error', 7 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\t}\n\t\t};\n\t\n\t\t// Store the data submitted for the API\n\t\toSettings.oAjaxData = data;\n\t\n\t\t// Allow plug-ins and external processes to modify the data\n\t\t_fnCallbackFire( oSettings, null, 'preXhr', [oSettings, data] );\n\t\n\t\tif ( oSettings.fnServerData )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.fnServerData.call( instance,\n\t\t\t\toSettings.sAjaxSource,\n\t\t\t\t$.map( data, function (val, key) { // Need to convert back to 1.9 trad format\n\t\t\t\t\treturn { name: key, value: val };\n\t\t\t\t} ),\n\t\t\t\tcallback,\n\t\t\t\toSettings\n\t\t\t);\n\t\t}\n\t\telse if ( oSettings.sAjaxSource || typeof ajax === 'string' )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, {\n\t\t\t\turl: ajax || oSettings.sAjaxSource\n\t\t\t} ) );\n\t\t}\n\t\telse if ( typeof ajax === 'function' )\n\t\t{\n\t\t\t// Is a function - let the caller define what needs to be done\n\t\t\toSettings.jqXHR = ajax.call( instance, data, callback, oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Object to extend the base settings\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );\n\t\n\t\t\t// Restore for next time around\n\t\t\tajax.data = ajaxData;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Update the table using an Ajax call\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {boolean} Block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdate( settings )\n\t{\n\t\tsettings.iDraw++;\n\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t// Keep track of drawHold state to handle scrolling after the Ajax call\n\t\tvar drawHold = settings._drawHold;\n\t\n\t\t_fnBuildAjax(\n\t\t\tsettings,\n\t\t\t_fnAjaxParameters( settings ),\n\t\t\tfunction(json) {\n\t\t\t\tsettings._drawHold = drawHold;\n\t\t\t\t_fnAjaxUpdateDraw( settings, json );\n\t\t\t\tsettings._drawHold = false;\n\t\t\t}\n\t\t);\n\t}\n\t\n\t\n\t/**\n\t * Build up the parameters in an object needed for a server-side processing\n\t * request. Note that this is basically done twice, is different ways - a modern\n\t * method which is used by default in DataTables 1.10 which uses objects and\n\t * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if\n\t * the sAjaxSource option is used in the initialisation, or the legacyAjax\n\t * option is set.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {bool} block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxParameters( settings )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tcolumnCount = columns.length,\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tpreSearch = settings.oPreviousSearch,\n\t\t\tpreColSearch = settings.aoPreSearchCols,\n\t\t\ti, data = [], dataProp, column, columnSearch,\n\t\t\tsort = _fnSortFlatten( settings ),\n\t\t\tdisplayStart = settings._iDisplayStart,\n\t\t\tdisplayLength = features.bPaginate !== false ?\n\t\t\t\tsettings._iDisplayLength :\n\t\t\t\t-1;\n\t\n\t\tvar param = function ( name, value ) {\n\t\t\tdata.push( { 'name': name, 'value': value } );\n\t\t};\n\t\n\t\t// DataTables 1.9- compatible method\n\t\tparam( 'sEcho',          settings.iDraw );\n\t\tparam( 'iColumns',       columnCount );\n\t\tparam( 'sColumns',       _pluck( columns, 'sName' ).join(',') );\n\t\tparam( 'iDisplayStart',  displayStart );\n\t\tparam( 'iDisplayLength', displayLength );\n\t\n\t\t// DataTables 1.10+ method\n\t\tvar d = {\n\t\t\tdraw:    settings.iDraw,\n\t\t\tcolumns: [],\n\t\t\torder:   [],\n\t\t\tstart:   displayStart,\n\t\t\tlength:  displayLength,\n\t\t\tsearch:  {\n\t\t\t\tvalue: preSearch.sSearch,\n\t\t\t\tregex: preSearch.bRegex\n\t\t\t}\n\t\t};\n\t\n\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcolumnSearch = preColSearch[i];\n\t\t\tdataProp = typeof column.mData==\"function\" ? 'function' : column.mData ;\n\t\n\t\t\td.columns.push( {\n\t\t\t\tdata:       dataProp,\n\t\t\t\tname:       column.sName,\n\t\t\t\tsearchable: column.bSearchable,\n\t\t\t\torderable:  column.bSortable,\n\t\t\t\tsearch:     {\n\t\t\t\t\tvalue: columnSearch.sSearch,\n\t\t\t\t\tregex: columnSearch.bRegex\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\tparam( \"mDataProp_\"+i, dataProp );\n\t\n\t\t\tif ( features.bFilter ) {\n\t\t\t\tparam( 'sSearch_'+i,     columnSearch.sSearch );\n\t\t\t\tparam( 'bRegex_'+i,      columnSearch.bRegex );\n\t\t\t\tparam( 'bSearchable_'+i, column.bSearchable );\n\t\t\t}\n\t\n\t\t\tif ( features.bSort ) {\n\t\t\t\tparam( 'bSortable_'+i, column.bSortable );\n\t\t\t}\n\t\t}\n\t\n\t\tif ( features.bFilter ) {\n\t\t\tparam( 'sSearch', preSearch.sSearch );\n\t\t\tparam( 'bRegex', preSearch.bRegex );\n\t\t}\n\t\n\t\tif ( features.bSort ) {\n\t\t\t$.each( sort, function ( i, val ) {\n\t\t\t\td.order.push( { column: val.col, dir: val.dir } );\n\t\n\t\t\t\tparam( 'iSortCol_'+i, val.col );\n\t\t\t\tparam( 'sSortDir_'+i, val.dir );\n\t\t\t} );\n\t\n\t\t\tparam( 'iSortingCols', sort.length );\n\t\t}\n\t\n\t\t// If the legacy.ajax parameter is null, then we automatically decide which\n\t\t// form to use, based on sAjaxSource\n\t\tvar legacy = DataTable.ext.legacy.ajax;\n\t\tif ( legacy === null ) {\n\t\t\treturn settings.sAjaxSource ? data : d;\n\t\t}\n\t\n\t\t// Otherwise, if legacy has been specified then we use that to decide on the\n\t\t// form\n\t\treturn legacy ? data : d;\n\t}\n\t\n\t\n\t/**\n\t * Data the data from the server (nuking the old) and redraw the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} json json data return from the server.\n\t *  @param {string} json.sEcho Tracking flag for DataTables to match requests\n\t *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering\n\t *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering\n\t *  @param {array} json.aaData The data to display on this page\n\t *  @param {string} [json.sColumns] Column ordering (sName, comma separated)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdateDraw ( settings, json )\n\t{\n\t\t// v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.\n\t\t// Support both\n\t\tvar compat = function ( old, modern ) {\n\t\t\treturn json[old] !== undefined ? json[old] : json[modern];\n\t\t};\n\t\n\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\tvar draw            = compat( 'sEcho',                'draw' );\n\t\tvar recordsTotal    = compat( 'iTotalRecords',        'recordsTotal' );\n\t\tvar recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );\n\t\n\t\tif ( draw !== undefined ) {\n\t\t\t// Protect against out of sequence returns\n\t\t\tif ( draw*1 < settings.iDraw ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettings.iDraw = draw * 1;\n\t\t}\n\t\n\t\t// No data in returned object, so rather than an array, we show an empty table\n\t\tif ( ! data ) {\n\t\t\tdata = [];\n\t\t}\n\t\n\t\t_fnClearTable( settings );\n\t\tsettings._iRecordsTotal   = parseInt(recordsTotal, 10);\n\t\tsettings._iRecordsDisplay = parseInt(recordsFiltered, 10);\n\t\n\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t_fnAddData( settings, data[i] );\n\t\t}\n\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\n\t\t_fnDraw( settings, true );\n\t\n\t\tif ( ! settings._bInitComplete ) {\n\t\t\t_fnInitComplete( settings, json );\n\t\t}\n\t\n\t\t_fnProcessingDisplay( settings, false );\n\t}\n\t\n\t\n\t/**\n\t * Get the data from the JSON data source to use for drawing a table. Using\n\t * `_fnGetObjectDataFn` allows the data to be sourced from a property of the\n\t * source object, or from a processing function.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param  {object} json Data source object / array from the server\n\t *  @return {array} Array of data to use\n\t */\n\t function _fnAjaxDataSrc ( oSettings, json, write )\n\t {\n\t\tvar dataSrc = $.isPlainObject( oSettings.ajax ) && oSettings.ajax.dataSrc !== undefined ?\n\t\t\toSettings.ajax.dataSrc :\n\t\t\toSettings.sAjaxDataProp; // Compatibility with 1.9-.\n\t\n\t\tif ( ! write ) {\n\t\t\tif ( dataSrc === 'data' ) {\n\t\t\t\t// If the default, then we still want to support the old style, and safely ignore\n\t\t\t\t// it if possible\n\t\t\t\treturn json.aaData || json[dataSrc];\n\t\t\t}\n\t\n\t\t\treturn dataSrc !== \"\" ?\n\t\t\t\t_fnGetObjectDataFn( dataSrc )( json ) :\n\t\t\t\tjson;\n\t\t}\n\t\n\t\t// set\n\t\t_fnSetObjectDataFn( dataSrc )( json, write );\n\t}\n\t\n\t/**\n\t * Generate the node required for filtering text\n\t *  @returns {node} Filter control element\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlFilter ( settings )\n\t{\n\t\tvar classes = settings.oClasses;\n\t\tvar tableId = settings.sTableId;\n\t\tvar language = settings.oLanguage;\n\t\tvar previousSearch = settings.oPreviousSearch;\n\t\tvar features = settings.aanFeatures;\n\t\tvar input = '<input type=\"search\" class=\"'+classes.sFilterInput+'\"/>';\n\t\n\t\tvar str = language.sSearch;\n\t\tstr = str.match(/_INPUT_/) ?\n\t\t\tstr.replace('_INPUT_', input) :\n\t\t\tstr+input;\n\t\n\t\tvar filter = $('<div/>', {\n\t\t\t\t'id': ! features.f ? tableId+'_filter' : null,\n\t\t\t\t'class': classes.sFilter\n\t\t\t} )\n\t\t\t.append( $('<label/>' ).append( str ) );\n\t\n\t\tvar searchFn = function(event) {\n\t\t\t/* Update all other filter input elements for the new display */\n\t\t\tvar n = features.f;\n\t\t\tvar val = !this.value ? \"\" : this.value; // mental IE8 fix :-(\n\t\t\tif(previousSearch['return'] && event.key !== \"Enter\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t/* Now do the filter */\n\t\t\tif ( val != previousSearch.sSearch ) {\n\t\t\t\t_fnFilterComplete( settings, {\n\t\t\t\t\t\"sSearch\": val,\n\t\t\t\t\t\"bRegex\": previousSearch.bRegex,\n\t\t\t\t\t\"bSmart\": previousSearch.bSmart ,\n\t\t\t\t\t\"bCaseInsensitive\": previousSearch.bCaseInsensitive,\n\t\t\t\t\t\"return\": previousSearch['return']\n\t\t\t\t} );\n\t\n\t\t\t\t// Need to redraw, without resorting\n\t\t\t\tsettings._iDisplayStart = 0;\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t};\n\t\n\t\tvar searchDelay = settings.searchDelay !== null ?\n\t\t\tsettings.searchDelay :\n\t\t\t_fnDataSource( settings ) === 'ssp' ?\n\t\t\t\t400 :\n\t\t\t\t0;\n\t\n\t\tvar jqFilter = $('input', filter)\n\t\t\t.val( previousSearch.sSearch )\n\t\t\t.attr( 'placeholder', language.sSearchPlaceholder )\n\t\t\t.on(\n\t\t\t\t'keyup.DT search.DT input.DT paste.DT cut.DT',\n\t\t\t\tsearchDelay ?\n\t\t\t\t\t_fnThrottle( searchFn, searchDelay ) :\n\t\t\t\t\tsearchFn\n\t\t\t)\n\t\t\t.on( 'mouseup.DT', function(e) {\n\t\t\t\t// Edge fix! Edge 17 does not trigger anything other than mouse events when clicking\n\t\t\t\t// on the clear icon (Edge bug 17584515). This is safe in other browsers as `searchFn`\n\t\t\t\t// checks the value to see if it has changed. In other browsers it won't have.\n\t\t\t\tsetTimeout( function () {\n\t\t\t\t\tsearchFn.call(jqFilter[0], e);\n\t\t\t\t}, 10);\n\t\t\t} )\n\t\t\t.on( 'keypress.DT', function(e) {\n\t\t\t\t/* Prevent form submission */\n\t\t\t\tif ( e.keyCode == 13 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.attr('aria-controls', tableId);\n\t\n\t\t// Update the input elements whenever the table is filtered\n\t\t$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {\n\t\t\tif ( settings === s ) {\n\t\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t\t// inside an iframe or frame...\n\t\t\t\ttry {\n\t\t\t\t\tif ( jqFilter[0] !== document.activeElement ) {\n\t\t\t\t\t\tjqFilter.val( previousSearch.sSearch );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {}\n\t\t\t}\n\t\t} );\n\t\n\t\treturn filter[0];\n\t}\n\t\n\t\n\t/**\n\t * Filter the table using both the global filter and column based filtering\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oSearch search information\n\t *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterComplete ( oSettings, oInput, iForce )\n\t{\n\t\tvar oPrevSearch = oSettings.oPreviousSearch;\n\t\tvar aoPrevSearch = oSettings.aoPreSearchCols;\n\t\tvar fnSaveFilter = function ( oFilter ) {\n\t\t\t/* Save the filtering values */\n\t\t\toPrevSearch.sSearch = oFilter.sSearch;\n\t\t\toPrevSearch.bRegex = oFilter.bRegex;\n\t\t\toPrevSearch.bSmart = oFilter.bSmart;\n\t\t\toPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;\n\t\t\toPrevSearch['return'] = oFilter['return'];\n\t\t};\n\t\tvar fnRegex = function ( o ) {\n\t\t\t// Backwards compatibility with the bEscapeRegex option\n\t\t\treturn o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;\n\t\t};\n\t\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo As per sort - can this be moved into an event handler?\n\t\t_fnColumnTypes( oSettings );\n\t\n\t\t/* In server-side processing all filtering is done by the server, so no point hanging around here */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' )\n\t\t{\n\t\t\t/* Global filter */\n\t\t\t_fnFilter( oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive );\n\t\t\tfnSaveFilter( oInput );\n\t\n\t\t\t/* Now do the individual column filter */\n\t\t\tfor ( var i=0 ; i<aoPrevSearch.length ; i++ )\n\t\t\t{\n\t\t\t\t_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, fnRegex(aoPrevSearch[i]),\n\t\t\t\t\taoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );\n\t\t\t}\n\t\n\t\t\t/* Custom filtering */\n\t\t\t_fnFilterCustom( oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfnSaveFilter( oInput );\n\t\t}\n\t\n\t\t/* Tell the draw function we have been filtering */\n\t\toSettings.bFiltered = true;\n\t\t_fnCallbackFire( oSettings, null, 'search', [oSettings] );\n\t}\n\t\n\t\n\t/**\n\t * Apply custom filtering functions\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCustom( settings )\n\t{\n\t\tvar filters = DataTable.ext.search;\n\t\tvar displayRows = settings.aiDisplay;\n\t\tvar row, rowIdx;\n\t\n\t\tfor ( var i=0, ien=filters.length ; i<ien ; i++ ) {\n\t\t\tvar rows = [];\n\t\n\t\t\t// Loop over each row and see if it should be included\n\t\t\tfor ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {\n\t\t\t\trowIdx = displayRows[ j ];\n\t\t\t\trow = settings.aoData[ rowIdx ];\n\t\n\t\t\t\tif ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {\n\t\t\t\t\trows.push( rowIdx );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// So the array reference doesn't break set the results into the\n\t\t\t// existing array\n\t\t\tdisplayRows.length = 0;\n\t\t\t$.merge( displayRows, rows );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Filter the table on a per-column basis\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sInput string to filter on\n\t *  @param {int} iColumn column to filter\n\t *  @param {bool} bRegex treat search string as a regular expression or not\n\t *  @param {bool} bSmart use smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, caseInsensitive )\n\t{\n\t\tif ( searchStr === '' ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar data;\n\t\tvar out = [];\n\t\tvar display = settings.aiDisplay;\n\t\tvar rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );\n\t\n\t\tfor ( var i=0 ; i<display.length ; i++ ) {\n\t\t\tdata = settings.aoData[ display[i] ]._aFilterData[ colIdx ];\n\t\n\t\t\tif ( rpSearch.test( data ) ) {\n\t\t\t\tout.push( display[i] );\n\t\t\t}\n\t\t}\n\t\n\t\tsettings.aiDisplay = out;\n\t}\n\t\n\t\n\t/**\n\t * Filter the data table based on user input and draw the table\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} input string to filter on\n\t *  @param {int} force optional - force a research of the master array (1) or not (undefined or 0)\n\t *  @param {bool} regex treat as a regular expression or not\n\t *  @param {bool} smart perform smart filtering or not\n\t *  @param {bool} caseInsensitive Do case insensitive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilter( settings, input, force, regex, smart, caseInsensitive )\n\t{\n\t\tvar rpSearch = _fnFilterCreateSearch( input, regex, smart, caseInsensitive );\n\t\tvar prevSearch = settings.oPreviousSearch.sSearch;\n\t\tvar displayMaster = settings.aiDisplayMaster;\n\t\tvar display, invalidated, i;\n\t\tvar filtered = [];\n\t\n\t\t// Need to take account of custom filtering functions - always filter\n\t\tif ( DataTable.ext.search.length !== 0 ) {\n\t\t\tforce = true;\n\t\t}\n\t\n\t\t// Check if any of the rows were invalidated\n\t\tinvalidated = _fnFilterData( settings );\n\t\n\t\t// If the input is blank - we just want the full data set\n\t\tif ( input.length <= 0 ) {\n\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t}\n\t\telse {\n\t\t\t// New search - start from the master array\n\t\t\tif ( invalidated ||\n\t\t\t\t force ||\n\t\t\t\t regex ||\n\t\t\t\t prevSearch.length > input.length ||\n\t\t\t\t input.indexOf(prevSearch) !== 0 ||\n\t\t\t\t settings.bSorted // On resort, the display master needs to be\n\t\t\t\t                  // re-filtered since indexes will have changed\n\t\t\t) {\n\t\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t\t}\n\t\n\t\t\t// Search the display array\n\t\t\tdisplay = settings.aiDisplay;\n\t\n\t\t\tfor ( i=0 ; i<display.length ; i++ ) {\n\t\t\t\tif ( rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {\n\t\t\t\t\tfiltered.push( display[i] );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tsettings.aiDisplay = filtered;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a regular expression object suitable for searching a table\n\t *  @param {string} sSearch string to search for\n\t *  @param {bool} bRegex treat as a regular expression or not\n\t *  @param {bool} bSmart perform smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n\t *  @returns {RegExp} constructed object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCreateSearch( search, regex, smart, caseInsensitive )\n\t{\n\t\tsearch = regex ?\n\t\t\tsearch :\n\t\t\t_fnEscapeRegex( search );\n\t\t\n\t\tif ( smart ) {\n\t\t\t/* For smart filtering we want to allow the search to work regardless of\n\t\t\t * word order. We also want double quoted text to be preserved, so word\n\t\t\t * order is important - a la google. So this is what we want to\n\t\t\t * generate:\n\t\t\t * \n\t\t\t * ^(?=.*?\\bone\\b)(?=.*?\\btwo three\\b)(?=.*?\\bfour\\b).*$\n\t\t\t */\n\t\t\tvar a = $.map( search.match( /[\"\\u201C][^\"\\u201D]+[\"\\u201D]|[^ ]+/g ) || [''], function ( word ) {\n\t\t\t\tif ( word.charAt(0) === '\"' ) {\n\t\t\t\t\tvar m = word.match( /^\"(.*)\"$/ );\n\t\t\t\t\tword = m ? m[1] : word;\n\t\t\t\t}\n\t\t\t\telse if ( word.charAt(0) === '\\u201C' ) {\n\t\t\t\t\tvar m = word.match( /^\\u201C(.*)\\u201D$/ );\n\t\t\t\t\tword = m ? m[1] : word;\n\t\t\t\t}\n\t\n\t\t\t\treturn word.replace('\"', '');\n\t\t\t} );\n\t\n\t\t\tsearch = '^(?=.*?'+a.join( ')(?=.*?' )+').*$';\n\t\t}\n\t\n\t\treturn new RegExp( search, caseInsensitive ? 'i' : '' );\n\t}\n\t\n\t\n\t/**\n\t * Escape a string such that it can be used in a regular expression\n\t *  @param {string} sVal string to escape\n\t *  @returns {string} escaped string\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnEscapeRegex = DataTable.util.escapeRegex;\n\t\n\tvar __filter_div = $('<div>')[0];\n\tvar __filter_div_textContent = __filter_div.textContent !== undefined;\n\t\n\t// Update the filtering data for each row if needed (by invalidation or first run)\n\tfunction _fnFilterData ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar column;\n\t\tvar i, j, ien, jen, filterData, cellData, row;\n\t\tvar wasInvalidated = false;\n\t\n\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\t\n\t\t\tif ( ! row._aFilterData ) {\n\t\t\t\tfilterData = [];\n\t\n\t\t\t\tfor ( j=0, jen=columns.length ; j<jen ; j++ ) {\n\t\t\t\t\tcolumn = columns[j];\n\t\n\t\t\t\t\tif ( column.bSearchable ) {\n\t\t\t\t\t\tcellData = _fnGetCellData( settings, i, j, 'filter' );\n\t\n\t\t\t\t\t\t// Search in DataTables 1.10 is string based. In 1.11 this\n\t\t\t\t\t\t// should be altered to also allow strict type checking.\n\t\t\t\t\t\tif ( cellData === null ) {\n\t\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( typeof cellData !== 'string' && cellData.toString ) {\n\t\t\t\t\t\t\tcellData = cellData.toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If it looks like there is an HTML entity in the string,\n\t\t\t\t\t// attempt to decode it so sorting works as expected. Note that\n\t\t\t\t\t// we could use a single line of jQuery to do this, but the DOM\n\t\t\t\t\t// method used here is much faster https://jsperf.com/html-decode\n\t\t\t\t\tif ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {\n\t\t\t\t\t\t__filter_div.innerHTML = cellData;\n\t\t\t\t\t\tcellData = __filter_div_textContent ?\n\t\t\t\t\t\t\t__filter_div.textContent :\n\t\t\t\t\t\t\t__filter_div.innerText;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif ( cellData.replace ) {\n\t\t\t\t\t\tcellData = cellData.replace(/[\\r\\n\\u2028]/g, '');\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfilterData.push( cellData );\n\t\t\t\t}\n\t\n\t\t\t\trow._aFilterData = filterData;\n\t\t\t\trow._sFilterRow = filterData.join('  ');\n\t\t\t\twasInvalidated = true;\n\t\t\t}\n\t\t}\n\t\n\t\treturn wasInvalidated;\n\t}\n\t\n\t\n\t/**\n\t * Convert from the internal Hungarian notation to camelCase for external\n\t * interaction\n\t *  @param {object} obj Object to convert\n\t *  @returns {object} Inverted object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSearchToCamel ( obj )\n\t{\n\t\treturn {\n\t\t\tsearch:          obj.sSearch,\n\t\t\tsmart:           obj.bSmart,\n\t\t\tregex:           obj.bRegex,\n\t\t\tcaseInsensitive: obj.bCaseInsensitive\n\t\t};\n\t}\n\t\n\t\n\t\n\t/**\n\t * Convert from camelCase notation to the internal Hungarian. We could use the\n\t * Hungarian convert function here, but this is cleaner\n\t *  @param {object} obj Object to convert\n\t *  @returns {object} Inverted object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSearchToHung ( obj )\n\t{\n\t\treturn {\n\t\t\tsSearch:          obj.search,\n\t\t\tbSmart:           obj.smart,\n\t\t\tbRegex:           obj.regex,\n\t\t\tbCaseInsensitive: obj.caseInsensitive\n\t\t};\n\t}\n\t\n\t/**\n\t * Generate the node required for the info display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Information element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlInfo ( settings )\n\t{\n\t\tvar\n\t\t\ttid = settings.sTableId,\n\t\t\tnodes = settings.aanFeatures.i,\n\t\t\tn = $('<div/>', {\n\t\t\t\t'class': settings.oClasses.sInfo,\n\t\t\t\t'id': ! nodes ? tid+'_info' : null\n\t\t\t} );\n\t\n\t\tif ( ! nodes ) {\n\t\t\t// Update display on each draw\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": _fnUpdateInfo,\n\t\t\t\t\"sName\": \"information\"\n\t\t\t} );\n\t\n\t\t\tn\n\t\t\t\t.attr( 'role', 'status' )\n\t\t\t\t.attr( 'aria-live', 'polite' );\n\t\n\t\t\t// Table is described by our info div\n\t\t\t$(settings.nTable).attr( 'aria-describedby', tid+'_info' );\n\t\t}\n\t\n\t\treturn n[0];\n\t}\n\t\n\t\n\t/**\n\t * Update the information elements in the display\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnUpdateInfo ( settings )\n\t{\n\t\t/* Show information about the table */\n\t\tvar nodes = settings.aanFeatures.i;\n\t\tif ( nodes.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\tlang  = settings.oLanguage,\n\t\t\tstart = settings._iDisplayStart+1,\n\t\t\tend   = settings.fnDisplayEnd(),\n\t\t\tmax   = settings.fnRecordsTotal(),\n\t\t\ttotal = settings.fnRecordsDisplay(),\n\t\t\tout   = total ?\n\t\t\t\tlang.sInfo :\n\t\t\t\tlang.sInfoEmpty;\n\t\n\t\tif ( total !== max ) {\n\t\t\t/* Record set after filtering */\n\t\t\tout += ' ' + lang.sInfoFiltered;\n\t\t}\n\t\n\t\t// Convert the macros\n\t\tout += lang.sInfoPostFix;\n\t\tout = _fnInfoMacros( settings, out );\n\t\n\t\tvar callback = lang.fnInfoCallback;\n\t\tif ( callback !== null ) {\n\t\t\tout = callback.call( settings.oInstance,\n\t\t\t\tsettings, start, end, max, total, out\n\t\t\t);\n\t\t}\n\t\n\t\t$(nodes).html( out );\n\t}\n\t\n\t\n\tfunction _fnInfoMacros ( settings, str )\n\t{\n\t\t// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only\n\t\t// internally\n\t\tvar\n\t\t\tformatter  = settings.fnFormatNumber,\n\t\t\tstart      = settings._iDisplayStart+1,\n\t\t\tlen        = settings._iDisplayLength,\n\t\t\tvis        = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn str.\n\t\t\treplace(/_START_/g, formatter.call( settings, start ) ).\n\t\t\treplace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).\n\t\t\treplace(/_MAX_/g,   formatter.call( settings, settings.fnRecordsTotal() ) ).\n\t\t\treplace(/_TOTAL_/g, formatter.call( settings, vis ) ).\n\t\t\treplace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).\n\t\t\treplace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );\n\t}\n\t\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitialise ( settings )\n\t{\n\t\tvar i, iLen, iAjaxStart=settings.iInitDisplayStart;\n\t\tvar columns = settings.aoColumns, column;\n\t\tvar features = settings.oFeatures;\n\t\tvar deferLoading = settings.bDeferLoading; // value modified by the draw\n\t\n\t\t/* Ensure that the table data is fully initialised */\n\t\tif ( ! settings.bInitialised ) {\n\t\t\tsetTimeout( function(){ _fnInitialise( settings ); }, 200 );\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Show the display HTML options */\n\t\t_fnAddOptionsHtml( settings );\n\t\n\t\t/* Build and draw the header / footer for the table */\n\t\t_fnBuildHead( settings );\n\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\n\t\t/* Okay to show that something is going on now */\n\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t/* Calculate sizes for columns */\n\t\tif ( features.bAutoWidth ) {\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\n\t\t\tif ( column.sWidth ) {\n\t\t\t\tcolumn.nTh.style.width = _fnStringToCss( column.sWidth );\n\t\t\t}\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'preInit', [settings] );\n\t\n\t\t// If there is default sorting required - let's do it. The sort function\n\t\t// will do the drawing for us. Otherwise we draw the table regardless of the\n\t\t// Ajax source - this allows the table to look initialised for Ajax sourcing\n\t\t// data (show 'loading' message possibly)\n\t\t_fnReDraw( settings );\n\t\n\t\t// Server-side processing init complete is done by _fnAjaxUpdateDraw\n\t\tvar dataSrc = _fnDataSource( settings );\n\t\tif ( dataSrc != 'ssp' || deferLoading ) {\n\t\t\t// if there is an ajax source load the data\n\t\t\tif ( dataSrc == 'ajax' ) {\n\t\t\t\t_fnBuildAjax( settings, [], function(json) {\n\t\t\t\t\tvar aData = _fnAjaxDataSrc( settings, json );\n\t\n\t\t\t\t\t// Got the data - add it to the table\n\t\t\t\t\tfor ( i=0 ; i<aData.length ; i++ ) {\n\t\t\t\t\t\t_fnAddData( settings, aData[i] );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Reset the init display for cookie saving. We've already done\n\t\t\t\t\t// a filter, and therefore cleared it before. So we need to make\n\t\t\t\t\t// it appear 'fresh'\n\t\t\t\t\tsettings.iInitDisplayStart = iAjaxStart;\n\t\n\t\t\t\t\t_fnReDraw( settings );\n\t\n\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t_fnInitComplete( settings, json );\n\t\t\t\t}, settings );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t_fnInitComplete( settings );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} [json] JSON from the server that completed the table, if using Ajax source\n\t *    with client-side processing (optional)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitComplete ( settings, json )\n\t{\n\t\tsettings._bInitComplete = true;\n\t\n\t\t// When data was added after the initialisation (data or Ajax) we need to\n\t\t// calculate the column sizing\n\t\tif ( json || settings.oInit.aaData ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'plugin-init', [settings, json] );\n\t\t_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );\n\t}\n\t\n\t\n\tfunction _fnLengthChange ( settings, val )\n\t{\n\t\tvar len = parseInt( val, 10 );\n\t\tsettings._iDisplayLength = len;\n\t\n\t\t_fnLengthOverflow( settings );\n\t\n\t\t// Fire length change event\n\t\t_fnCallbackFire( settings, null, 'length', [settings, len] );\n\t}\n\t\n\t\n\t/**\n\t * Generate the node required for user display length changing\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Display length feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlLength ( settings )\n\t{\n\t\tvar\n\t\t\tclasses  = settings.oClasses,\n\t\t\ttableId  = settings.sTableId,\n\t\t\tmenu     = settings.aLengthMenu,\n\t\t\td2       = Array.isArray( menu[0] ),\n\t\t\tlengths  = d2 ? menu[0] : menu,\n\t\t\tlanguage = d2 ? menu[1] : menu;\n\t\n\t\tvar select = $('<select/>', {\n\t\t\t'name':          tableId+'_length',\n\t\t\t'aria-controls': tableId,\n\t\t\t'class':         classes.sLengthSelect\n\t\t} );\n\t\n\t\tfor ( var i=0, ien=lengths.length ; i<ien ; i++ ) {\n\t\t\tselect[0][ i ] = new Option(\n\t\t\t\ttypeof language[i] === 'number' ?\n\t\t\t\t\tsettings.fnFormatNumber( language[i] ) :\n\t\t\t\t\tlanguage[i],\n\t\t\t\tlengths[i]\n\t\t\t);\n\t\t}\n\t\n\t\tvar div = $('<div><label/></div>').addClass( classes.sLength );\n\t\tif ( ! settings.aanFeatures.l ) {\n\t\t\tdiv[0].id = tableId+'_length';\n\t\t}\n\t\n\t\tdiv.children().append(\n\t\t\tsettings.oLanguage.sLengthMenu.replace( '_MENU_', select[0].outerHTML )\n\t\t);\n\t\n\t\t// Can't use `select` variable as user might provide their own and the\n\t\t// reference is broken by the use of outerHTML\n\t\t$('select', div)\n\t\t\t.val( settings._iDisplayLength )\n\t\t\t.on( 'change.DT', function(e) {\n\t\t\t\t_fnLengthChange( settings, $(this).val() );\n\t\t\t\t_fnDraw( settings );\n\t\t\t} );\n\t\n\t\t// Update node value whenever anything changes the table's length\n\t\t$(settings.nTable).on( 'length.dt.DT', function (e, s, len) {\n\t\t\tif ( settings === s ) {\n\t\t\t\t$('select', div).val( len );\n\t\t\t}\n\t\t} );\n\t\n\t\treturn div[0];\n\t}\n\t\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Note that most of the paging logic is done in\n\t * DataTable.ext.pager\n\t */\n\t\n\t/**\n\t * Generate the node required for default pagination\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Pagination feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlPaginate ( settings )\n\t{\n\t\tvar\n\t\t\ttype   = settings.sPaginationType,\n\t\t\tplugin = DataTable.ext.pager[ type ],\n\t\t\tmodern = typeof plugin === 'function',\n\t\t\tredraw = function( settings ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t},\n\t\t\tnode = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],\n\t\t\tfeatures = settings.aanFeatures;\n\t\n\t\tif ( ! modern ) {\n\t\t\tplugin.fnInit( settings, node, redraw );\n\t\t}\n\t\n\t\t/* Add a draw callback for the pagination on first instance, to update the paging display */\n\t\tif ( ! features.p )\n\t\t{\n\t\t\tnode.id = settings.sTableId+'_paginate';\n\t\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": function( settings ) {\n\t\t\t\t\tif ( modern ) {\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\tstart      = settings._iDisplayStart,\n\t\t\t\t\t\t\tlen        = settings._iDisplayLength,\n\t\t\t\t\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\t\t\t\t\tall        = len === -1,\n\t\t\t\t\t\t\tpage = all ? 0 : Math.ceil( start / len ),\n\t\t\t\t\t\t\tpages = all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\t\t\t\tbuttons = plugin(page, pages),\n\t\t\t\t\t\t\ti, ien;\n\t\n\t\t\t\t\t\tfor ( i=0, ien=features.p.length ; i<ien ; i++ ) {\n\t\t\t\t\t\t\t_fnRenderer( settings, 'pageButton' )(\n\t\t\t\t\t\t\t\tsettings, features.p[i], i, buttons, page, pages\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplugin.fnUpdate( settings, redraw );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"sName\": \"pagination\"\n\t\t\t} );\n\t\t}\n\t\n\t\treturn node;\n\t}\n\t\n\t\n\t/**\n\t * Alter the display settings to change the page\n\t *  @param {object} settings DataTables settings object\n\t *  @param {string|int} action Paging action to take: \"first\", \"previous\",\n\t *    \"next\" or \"last\" or page number to jump to (integer)\n\t *  @param [bool] redraw Automatically draw the update or not\n\t *  @returns {bool} true page has changed, false - no change\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnPageChange ( settings, action, redraw )\n\t{\n\t\tvar\n\t\t\tstart     = settings._iDisplayStart,\n\t\t\tlen       = settings._iDisplayLength,\n\t\t\trecords   = settings.fnRecordsDisplay();\n\t\n\t\tif ( records === 0 || len === -1 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( typeof action === \"number\" )\n\t\t{\n\t\t\tstart = action * len;\n\t\n\t\t\tif ( start > records )\n\t\t\t{\n\t\t\t\tstart = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"first\" )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( action == \"previous\" )\n\t\t{\n\t\t\tstart = len >= 0 ?\n\t\t\t\tstart - len :\n\t\t\t\t0;\n\t\n\t\t\tif ( start < 0 )\n\t\t\t{\n\t\t\t  start = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"next\" )\n\t\t{\n\t\t\tif ( start + len < records )\n\t\t\t{\n\t\t\t\tstart += len;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"last\" )\n\t\t{\n\t\t\tstart = Math.floor( (records-1) / len) * len;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_fnLog( settings, 0, \"Unknown paging action: \"+action, 5 );\n\t\t}\n\t\n\t\tvar changed = settings._iDisplayStart !== start;\n\t\tsettings._iDisplayStart = start;\n\t\n\t\tif ( changed ) {\n\t\t\t_fnCallbackFire( settings, null, 'page', [settings] );\n\t\n\t\t\tif ( redraw ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// No change event - paging was called, but no change\n\t\t\t_fnCallbackFire( settings, null, 'page-nc', [settings] );\n\t\t}\n\t\n\t\treturn changed;\n\t}\n\t\n\t\n\t\n\t/**\n\t * Generate the node required for the processing node\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Processing element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlProcessing ( settings )\n\t{\n\t\treturn $('<div/>', {\n\t\t\t\t'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,\n\t\t\t\t'class': settings.oClasses.sProcessing,\n\t\t\t\t'role': 'status'\n\t\t\t} )\n\t\t\t.html( settings.oLanguage.sProcessing )\n\t\t\t.append('<div><div></div><div></div><div></div><div></div></div>')\n\t\t\t.insertBefore( settings.nTable )[0];\n\t}\n\t\n\t\n\t/**\n\t * Display or hide the processing indicator\n\t *  @param {object} settings dataTables settings object\n\t *  @param {bool} show Show the processing indicator (true) or not (false)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnProcessingDisplay ( settings, show )\n\t{\n\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t$(settings.aanFeatures.r).css( 'display', show ? 'block' : 'none' );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'processing', [settings, show] );\n\t}\n\t\n\t/**\n\t * Add any control elements for the table - specifically scrolling\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Node to add to the DOM\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlTable ( settings )\n\t{\n\t\tvar table = $(settings.nTable);\n\t\n\t\t// Scrolling from here on in\n\t\tvar scroll = settings.oScroll;\n\t\n\t\tif ( scroll.sX === '' && scroll.sY === '' ) {\n\t\t\treturn settings.nTable;\n\t\t}\n\t\n\t\tvar scrollX = scroll.sX;\n\t\tvar scrollY = scroll.sY;\n\t\tvar classes = settings.oClasses;\n\t\tvar caption = table.children('caption');\n\t\tvar captionSide = caption.length ? caption[0]._captionSide : null;\n\t\tvar headerClone = $( table[0].cloneNode(false) );\n\t\tvar footerClone = $( table[0].cloneNode(false) );\n\t\tvar footer = table.children('tfoot');\n\t\tvar _div = '<div/>';\n\t\tvar size = function ( s ) {\n\t\t\treturn !s ? null : _fnStringToCss( s );\n\t\t};\n\t\n\t\tif ( ! footer.length ) {\n\t\t\tfooter = null;\n\t\t}\n\t\n\t\t/*\n\t\t * The HTML structure that we want to generate in this function is:\n\t\t *  div - scroller\n\t\t *    div - scroll head\n\t\t *      div - scroll head inner\n\t\t *        table - scroll head table\n\t\t *          thead - thead\n\t\t *    div - scroll body\n\t\t *      table - table (master table)\n\t\t *        thead - thead clone for sizing\n\t\t *        tbody - tbody\n\t\t *    div - scroll foot\n\t\t *      div - scroll foot inner\n\t\t *        table - scroll foot table\n\t\t *          tfoot - tfoot\n\t\t */\n\t\tvar scroller = $( _div, { 'class': classes.sScrollWrapper } )\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollHead } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollHeadInner } )\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t'box-sizing': 'content-box',\n\t\t\t\t\t\t\t\twidth: scroll.sXInner || '100%'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\theaderClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'top' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('thead')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollBody } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t\twidth: size( scrollX )\n\t\t\t\t\t} )\n\t\t\t\t\t.append( table )\n\t\t\t);\n\t\n\t\tif ( footer ) {\n\t\t\tscroller.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollFoot } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollFootInner } )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\tfooterClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'bottom' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('tfoot')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\n\t\tvar children = scroller.children();\n\t\tvar scrollHead = children[0];\n\t\tvar scrollBody = children[1];\n\t\tvar scrollFoot = footer ? children[2] : null;\n\t\n\t\t// When the body is scrolled, then we also want to scroll the headers\n\t\tif ( scrollX ) {\n\t\t\t$(scrollBody).on( 'scroll.DT', function (e) {\n\t\t\t\tvar scrollLeft = this.scrollLeft;\n\t\n\t\t\t\tscrollHead.scrollLeft = scrollLeft;\n\t\n\t\t\t\tif ( footer ) {\n\t\t\t\t\tscrollFoot.scrollLeft = scrollLeft;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\n\t\t$(scrollBody).css('max-height', scrollY);\n\t\tif (! scroll.bCollapse) {\n\t\t\t$(scrollBody).css('height', scrollY);\n\t\t}\n\t\n\t\tsettings.nScrollHead = scrollHead;\n\t\tsettings.nScrollBody = scrollBody;\n\t\tsettings.nScrollFoot = scrollFoot;\n\t\n\t\t// On redraw - align columns\n\t\tsettings.aoDrawCallback.push( {\n\t\t\t\"fn\": _fnScrollDraw,\n\t\t\t\"sName\": \"scrolling\"\n\t\t} );\n\t\n\t\treturn scroller[0];\n\t}\n\t\n\t\n\t\n\t/**\n\t * Update the header, footer and body tables for resizing - i.e. column\n\t * alignment.\n\t *\n\t * Welcome to the most horrible function DataTables. The process that this\n\t * function follows is basically:\n\t *   1. Re-create the table inside the scrolling div\n\t *   2. Take live measurements from the DOM\n\t *   3. Apply the measurements to align the columns\n\t *   4. Clean up\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnScrollDraw ( settings )\n\t{\n\t\t// Given that this is such a monster function, a lot of variables are use\n\t\t// to try and keep the minimised size as small as possible\n\t\tvar\n\t\t\tscroll         = settings.oScroll,\n\t\t\tscrollX        = scroll.sX,\n\t\t\tscrollXInner   = scroll.sXInner,\n\t\t\tscrollY        = scroll.sY,\n\t\t\tbarWidth       = scroll.iBarWidth,\n\t\t\tdivHeader      = $(settings.nScrollHead),\n\t\t\tdivHeaderStyle = divHeader[0].style,\n\t\t\tdivHeaderInner = divHeader.children('div'),\n\t\t\tdivHeaderInnerStyle = divHeaderInner[0].style,\n\t\t\tdivHeaderTable = divHeaderInner.children('table'),\n\t\t\tdivBodyEl      = settings.nScrollBody,\n\t\t\tdivBody        = $(divBodyEl),\n\t\t\tdivBodyStyle   = divBodyEl.style,\n\t\t\tdivFooter      = $(settings.nScrollFoot),\n\t\t\tdivFooterInner = divFooter.children('div'),\n\t\t\tdivFooterTable = divFooterInner.children('table'),\n\t\t\theader         = $(settings.nTHead),\n\t\t\ttable          = $(settings.nTable),\n\t\t\ttableEl        = table[0],\n\t\t\ttableStyle     = tableEl.style,\n\t\t\tfooter         = settings.nTFoot ? $(settings.nTFoot) : null,\n\t\t\tbrowser        = settings.oBrowser,\n\t\t\tie67           = browser.bScrollOversize,\n\t\t\tdtHeaderCells  = _pluck( settings.aoColumns, 'nTh' ),\n\t\t\theaderTrgEls, footerTrgEls,\n\t\t\theaderSrcEls, footerSrcEls,\n\t\t\theaderCopy, footerCopy,\n\t\t\theaderWidths=[], footerWidths=[],\n\t\t\theaderContent=[], footerContent=[],\n\t\t\tidx, correction, sanityWidth,\n\t\t\tzeroOut = function(nSizer) {\n\t\t\t\tvar style = nSizer.style;\n\t\t\t\tstyle.paddingTop = \"0\";\n\t\t\t\tstyle.paddingBottom = \"0\";\n\t\t\t\tstyle.borderTopWidth = \"0\";\n\t\t\t\tstyle.borderBottomWidth = \"0\";\n\t\t\t\tstyle.height = 0;\n\t\t\t};\n\t\n\t\t// If the scrollbar visibility has changed from the last draw, we need to\n\t\t// adjust the column sizes as the table width will have changed to account\n\t\t// for the scrollbar\n\t\tvar scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;\n\t\t\n\t\tif ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {\n\t\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t\treturn; // adjust column sizing will call this function again\n\t\t}\n\t\telse {\n\t\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t}\n\t\n\t\t/*\n\t\t * 1. Re-create the table inside the scrolling div\n\t\t */\n\t\n\t\t// Remove the old minimised thead and tfoot elements in the inner table\n\t\ttable.children('thead, tfoot').remove();\n\t\n\t\tif ( footer ) {\n\t\t\tfooterCopy = footer.clone().prependTo( table );\n\t\t\tfooterTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized\n\t\t\tfooterSrcEls = footerCopy.find('tr');\n\t\t\tfooterCopy.find('[id]').removeAttr('id');\n\t\t}\n\t\n\t\t// Clone the current header and footer elements and then place it into the inner table\n\t\theaderCopy = header.clone().prependTo( table );\n\t\theaderTrgEls = header.find('tr'); // original header is in its own table\n\t\theaderSrcEls = headerCopy.find('tr');\n\t\theaderCopy.find('th, td').removeAttr('tabindex');\n\t\theaderCopy.find('[id]').removeAttr('id');\n\t\n\t\n\t\t/*\n\t\t * 2. Take live measurements from the DOM - do not alter the DOM itself!\n\t\t */\n\t\n\t\t// Remove old sizing and apply the calculated column widths\n\t\t// Get the unique column headers in the newly created (cloned) header. We want to apply the\n\t\t// calculated sizes to this header\n\t\tif ( ! scrollX )\n\t\t{\n\t\t\tdivBodyStyle.width = '100%';\n\t\t\tdivHeader[0].style.width = '100%';\n\t\t}\n\t\n\t\t$.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {\n\t\t\tidx = _fnVisibleToColumnIndex( settings, i );\n\t\t\tel.style.width = settings.aoColumns[idx].sWidth;\n\t\t} );\n\t\n\t\tif ( footer ) {\n\t\t\t_fnApplyToChildren( function(n) {\n\t\t\t\tn.style.width = \"\";\n\t\t\t}, footerSrcEls );\n\t\t}\n\t\n\t\t// Size the table as a whole\n\t\tsanityWidth = table.outerWidth();\n\t\tif ( scrollX === \"\" ) {\n\t\t\t// No x scrolling\n\t\t\ttableStyle.width = \"100%\";\n\t\n\t\t\t// IE7 will make the width of the table when 100% include the scrollbar\n\t\t\t// - which is shouldn't. When there is a scrollbar we need to take this\n\t\t\t// into account.\n\t\t\tif ( ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);\n\t\t\t}\n\t\n\t\t\t// Recalculate the sanity width\n\t\t\tsanityWidth = table.outerWidth();\n\t\t}\n\t\telse if ( scrollXInner !== \"\" ) {\n\t\t\t// legacy x scroll inner has been given - use it\n\t\t\ttableStyle.width = _fnStringToCss(scrollXInner);\n\t\n\t\t\t// Recalculate the sanity width\n\t\t\tsanityWidth = table.outerWidth();\n\t\t}\n\t\n\t\t// Hidden header should have zero height, so remove padding and borders. Then\n\t\t// set the width based on the real headers\n\t\n\t\t// Apply all styles in one pass\n\t\t_fnApplyToChildren( zeroOut, headerSrcEls );\n\t\n\t\t// Read all widths in next pass\n\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\tvar style = window.getComputedStyle ?\n\t\t\t\twindow.getComputedStyle(nSizer).width :\n\t\t\t\t_fnStringToCss( $(nSizer).width() );\n\t\n\t\t\theaderContent.push( nSizer.innerHTML );\n\t\t\theaderWidths.push( style );\n\t\t}, headerSrcEls );\n\t\n\t\t// Apply all widths in final pass\n\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\tnToSize.style.width = headerWidths[i];\n\t\t}, headerTrgEls );\n\t\n\t\t$(headerSrcEls).css('height', 0);\n\t\n\t\t/* Same again with the footer if we have one */\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( zeroOut, footerSrcEls );\n\t\n\t\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\t\tfooterContent.push( nSizer.innerHTML );\n\t\t\t\tfooterWidths.push( _fnStringToCss( $(nSizer).css('width') ) );\n\t\t\t}, footerSrcEls );\n\t\n\t\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\t\tnToSize.style.width = footerWidths[i];\n\t\t\t}, footerTrgEls );\n\t\n\t\t\t$(footerSrcEls).height(0);\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 3. Apply the measurements\n\t\t */\n\t\n\t\t// \"Hide\" the header and footer that we used for the sizing. We need to keep\n\t\t// the content of the cell so that the width applied to the header and body\n\t\t// both match, but we want to hide it completely. We want to also fix their\n\t\t// width to what they currently are\n\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+headerContent[i]+'</div>';\n\t\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\t\tnSizer.style.width = headerWidths[i];\n\t\t}, headerSrcEls );\n\t\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+footerContent[i]+'</div>';\n\t\t\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\t\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\t\t\tnSizer.style.width = footerWidths[i];\n\t\t\t}, footerSrcEls );\n\t\t}\n\t\n\t\t// Sanity check that the table is of a sensible width. If not then we are going to get\n\t\t// misalignment - try to prevent this by not allowing the table to shrink below its min width\n\t\tif ( Math.round(table.outerWidth()) < Math.round(sanityWidth) )\n\t\t{\n\t\t\t// The min width depends upon if we have a vertical scrollbar visible or not */\n\t\t\tcorrection = ((divBodyEl.scrollHeight > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")) ?\n\t\t\t\t\tsanityWidth+barWidth :\n\t\t\t\t\tsanityWidth;\n\t\n\t\t\t// IE6/7 are a law unto themselves...\n\t\t\tif ( ie67 && (divBodyEl.scrollHeight >\n\t\t\t\tdivBodyEl.offsetHeight || divBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( correction-barWidth );\n\t\t\t}\n\t\n\t\t\t// And give the user a warning that we've stopped the table getting too small\n\t\t\tif ( scrollX === \"\" || scrollXInner !== \"\" ) {\n\t\t\t\t_fnLog( settings, 1, 'Possible column misalignment', 6 );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcorrection = '100%';\n\t\t}\n\t\n\t\t// Apply to the container elements\n\t\tdivBodyStyle.width = _fnStringToCss( correction );\n\t\tdivHeaderStyle.width = _fnStringToCss( correction );\n\t\n\t\tif ( footer ) {\n\t\t\tsettings.nScrollFoot.style.width = _fnStringToCss( correction );\n\t\t}\n\t\n\t\n\t\t/*\n\t\t * 4. Clean up\n\t\t */\n\t\tif ( ! scrollY ) {\n\t\t\t/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting\n\t\t\t * the scrollbar height from the visible display, rather than adding it on. We need to\n\t\t\t * set the height in order to sort this. Don't want to do it in any other browsers.\n\t\t\t */\n\t\t\tif ( ie67 ) {\n\t\t\t\tdivBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+barWidth );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Finally set the width's of the header and footer tables */\n\t\tvar iOuterWidth = table.outerWidth();\n\t\tdivHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\tdivHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );\n\t\n\t\t// Figure out if there are scrollbar present - if so then we need a the header and footer to\n\t\t// provide a bit more space to allow \"overflow\" scrolling (i.e. past the scrollbar)\n\t\tvar bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == \"scroll\";\n\t\tvar padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );\n\t\tdivHeaderInnerStyle[ padding ] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t\n\t\tif ( footer ) {\n\t\t\tdivFooterTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style[padding] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t\t}\n\t\n\t\t// Correct DOM ordering for colgroup - comes before the thead\n\t\ttable.children('colgroup').insertBefore( table.children('thead') );\n\t\n\t\t/* Adjust the position of the header in case we loose the y-scrollbar */\n\t\tdivBody.trigger('scroll');\n\t\n\t\t// If sorting or filtering has occurred, jump the scrolling back to the top\n\t\t// only if we aren't holding the position\n\t\tif ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {\n\t\t\tdivBodyEl.scrollTop = 0;\n\t\t}\n\t}\n\t\n\t\n\t\n\t/**\n\t * Apply a given function to the display child nodes of an element array (typically\n\t * TD children of TR rows\n\t *  @param {function} fn Method to apply to the objects\n\t *  @param array {nodes} an1 List of elements to look through for display children\n\t *  @param array {nodes} an2 Another list (identical structure to the first) - optional\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyToChildren( fn, an1, an2 )\n\t{\n\t\tvar index=0, i=0, iLen=an1.length;\n\t\tvar nNode1, nNode2;\n\t\n\t\twhile ( i < iLen ) {\n\t\t\tnNode1 = an1[i].firstChild;\n\t\t\tnNode2 = an2 ? an2[i].firstChild : null;\n\t\n\t\t\twhile ( nNode1 ) {\n\t\t\t\tif ( nNode1.nodeType === 1 ) {\n\t\t\t\t\tif ( an2 ) {\n\t\t\t\t\t\tfn( nNode1, nNode2, index );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfn( nNode1, index );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\n\t\t\t\tnNode1 = nNode1.nextSibling;\n\t\t\t\tnNode2 = an2 ? nNode2.nextSibling : null;\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t}\n\t}\n\t\n\t\n\t\n\tvar __re_html_remove = /<.*?>/g;\n\t\n\t\n\t/**\n\t * Calculate the width of columns for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCalculateColumnWidths ( oSettings )\n\t{\n\t\tvar\n\t\t\ttable = oSettings.nTable,\n\t\t\tcolumns = oSettings.aoColumns,\n\t\t\tscroll = oSettings.oScroll,\n\t\t\tscrollY = scroll.sY,\n\t\t\tscrollX = scroll.sX,\n\t\t\tscrollXInner = scroll.sXInner,\n\t\t\tcolumnCount = columns.length,\n\t\t\tvisibleColumns = _fnGetColumns( oSettings, 'bVisible' ),\n\t\t\theaderCells = $('th', oSettings.nTHead),\n\t\t\ttableWidthAttr = table.getAttribute('width'), // from DOM element\n\t\t\ttableContainer = table.parentNode,\n\t\t\tuserInputs = false,\n\t\t\ti, column, columnIdx, width, outerWidth,\n\t\t\tbrowser = oSettings.oBrowser,\n\t\t\tie67 = browser.bScrollOversize;\n\t\n\t\tvar styleWidth = table.style.width;\n\t\tif ( styleWidth && styleWidth.indexOf('%') !== -1 ) {\n\t\t\ttableWidthAttr = styleWidth;\n\t\t}\n\t\n\t\t/* Convert any user input sizes into pixel sizes */\n\t\tvar sizes = _fnConvertToWidth(_pluck(columns, 'sWidthOrig'), tableContainer);\n\t\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\n\t\t\tif ( column.sWidth !== null ) {\n\t\t\t\tcolumn.sWidth = sizes[i];\n\t\n\t\t\t\tuserInputs = true;\n\t\t\t}\n\t\t}\n\t\n\t\t/* If the number of columns in the DOM equals the number that we have to\n\t\t * process in DataTables, then we can use the offsets that are created by\n\t\t * the web- browser. No custom sizes can be set in order for this to happen,\n\t\t * nor scrolling used\n\t\t */\n\t\tif ( ie67 || ! userInputs && ! scrollX && ! scrollY &&\n\t\t     columnCount == _fnVisbleColumns( oSettings ) &&\n\t\t     columnCount == headerCells.length\n\t\t) {\n\t\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\t\tvar colIdx = _fnVisibleToColumnIndex( oSettings, i );\n\t\n\t\t\t\tif ( colIdx !== null ) {\n\t\t\t\t\tcolumns[ colIdx ].sWidth = _fnStringToCss( headerCells.eq(i).width() );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Otherwise construct a single row, worst case, table with the widest\n\t\t\t// node in the data, assign any user defined widths, then insert it into\n\t\t\t// the DOM and allow the browser to do all the hard work of calculating\n\t\t\t// table widths\n\t\t\tvar tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table\n\t\t\t\t.css( 'visibility', 'hidden' )\n\t\t\t\t.removeAttr( 'id' );\n\t\n\t\t\t// Clean up the table body\n\t\t\ttmpTable.find('tbody tr').remove();\n\t\t\tvar tr = $('<tr/>').appendTo( tmpTable.find('tbody') );\n\t\n\t\t\t// Clone the table header and footer - we can't use the header / footer\n\t\t\t// from the cloned table, since if scrolling is active, the table's\n\t\t\t// real header and footer are contained in different table tags\n\t\t\ttmpTable.find('thead, tfoot').remove();\n\t\t\ttmpTable\n\t\t\t\t.append( $(oSettings.nTHead).clone() )\n\t\t\t\t.append( $(oSettings.nTFoot).clone() );\n\t\n\t\t\t// Remove any assigned widths from the footer (from scrolling)\n\t\t\ttmpTable.find('tfoot th, tfoot td').css('width', '');\n\t\n\t\t\t// Apply custom sizing to the cloned header\n\t\t\theaderCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );\n\t\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\n\t\t\t\theaderCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?\n\t\t\t\t\t_fnStringToCss( column.sWidthOrig ) :\n\t\t\t\t\t'';\n\t\n\t\t\t\t// For scrollX we need to force the column width otherwise the\n\t\t\t\t// browser will collapse it. If this width is smaller than the\n\t\t\t\t// width the column requires, then it will have no effect\n\t\t\t\tif ( column.sWidthOrig && scrollX ) {\n\t\t\t\t\t$( headerCells[i] ).append( $('<div/>').css( {\n\t\t\t\t\t\twidth: column.sWidthOrig,\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\theight: 1\n\t\t\t\t\t} ) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Find the widest cell for each column and put it into the table\n\t\t\tif ( oSettings.aoData.length ) {\n\t\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\t\tcolumnIdx = visibleColumns[i];\n\t\t\t\t\tcolumn = columns[ columnIdx ];\n\t\n\t\t\t\t\t$( _fnGetWidestNode( oSettings, columnIdx ) )\n\t\t\t\t\t\t.clone( false )\n\t\t\t\t\t\t.append( column.sContentPadding )\n\t\t\t\t\t\t.appendTo( tr );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Tidy the temporary table - remove name attributes so there aren't\n\t\t\t// duplicated in the dom (radio elements for example)\n\t\t\t$('[name]', tmpTable).removeAttr('name');\n\t\n\t\t\t// Table has been built, attach to the document so we can work with it.\n\t\t\t// A holding element is used, positioned at the top of the container\n\t\t\t// with minimal height, so it has no effect on if the container scrolls\n\t\t\t// or not. Otherwise it might trigger scrolling when it actually isn't\n\t\t\t// needed\n\t\t\tvar holder = $('<div/>').css( scrollX || scrollY ?\n\t\t\t\t\t{\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\theight: 1,\n\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t\t} :\n\t\t\t\t\t{}\n\t\t\t\t)\n\t\t\t\t.append( tmpTable )\n\t\t\t\t.appendTo( tableContainer );\n\t\n\t\t\t// When scrolling (X or Y) we want to set the width of the table as \n\t\t\t// appropriate. However, when not scrolling leave the table width as it\n\t\t\t// is. This results in slightly different, but I think correct behaviour\n\t\t\tif ( scrollX && scrollXInner ) {\n\t\t\t\ttmpTable.width( scrollXInner );\n\t\t\t}\n\t\t\telse if ( scrollX ) {\n\t\t\t\ttmpTable.css( 'width', 'auto' );\n\t\t\t\ttmpTable.removeAttr('width');\n\t\n\t\t\t\t// If there is no width attribute or style, then allow the table to\n\t\t\t\t// collapse\n\t\t\t\tif ( tmpTable.width() < tableContainer.clientWidth && tableWidthAttr ) {\n\t\t\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( scrollY ) {\n\t\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t\t}\n\t\t\telse if ( tableWidthAttr ) {\n\t\t\t\ttmpTable.width( tableWidthAttr );\n\t\t\t}\n\t\n\t\t\t// Get the width of each column in the constructed table - we need to\n\t\t\t// know the inner width (so it can be assigned to the other table's\n\t\t\t// cells) and the outer width so we can calculate the full width of the\n\t\t\t// table. This is safe since DataTables requires a unique cell for each\n\t\t\t// column, but if ever a header can span multiple columns, this will\n\t\t\t// need to be modified.\n\t\t\tvar total = 0;\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tvar cell = $(headerCells[i]);\n\t\t\t\tvar border = cell.outerWidth() - cell.width();\n\t\n\t\t\t\t// Use getBounding... where possible (not IE8-) because it can give\n\t\t\t\t// sub-pixel accuracy, which we then want to round up!\n\t\t\t\tvar bounding = browser.bBounding ?\n\t\t\t\t\tMath.ceil( headerCells[i].getBoundingClientRect().width ) :\n\t\t\t\t\tcell.outerWidth();\n\t\n\t\t\t\t// Total is tracked to remove any sub-pixel errors as the outerWidth\n\t\t\t\t// of the table might not equal the total given here (IE!).\n\t\t\t\ttotal += bounding;\n\t\n\t\t\t\t// Width for each column to use\n\t\t\t\tcolumns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding - border );\n\t\t\t}\n\t\n\t\t\ttable.style.width = _fnStringToCss( total );\n\t\n\t\t\t// Finished with the table - ditch it\n\t\t\tholder.remove();\n\t\t}\n\t\n\t\t// If there is a width attr, we want to attach an event listener which\n\t\t// allows the table sizing to automatically adjust when the window is\n\t\t// resized. Use the width attr rather than CSS, since we can't know if the\n\t\t// CSS is a relative value or absolute - DOM read is always px.\n\t\tif ( tableWidthAttr ) {\n\t\t\ttable.style.width = _fnStringToCss( tableWidthAttr );\n\t\t}\n\t\n\t\tif ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {\n\t\t\tvar bindResize = function () {\n\t\t\t\t$(window).on('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {\n\t\t\t\t\t_fnAdjustColumnSizing( oSettings );\n\t\t\t\t} ) );\n\t\t\t};\n\t\n\t\t\t// IE6/7 will crash if we bind a resize event handler on page load.\n\t\t\t// To be removed in 1.11 which drops IE6/7 support\n\t\t\tif ( ie67 ) {\n\t\t\t\tsetTimeout( bindResize, 1000 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbindResize();\n\t\t\t}\n\t\n\t\t\toSettings._reszEvt = true;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Throttle the calls to a function. Arguments and context are maintained for\n\t * the throttled function\n\t *  @param {function} fn Function to be called\n\t *  @param {int} [freq=200] call frequency in mS\n\t *  @returns {function} wrapped function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnThrottle = DataTable.util.throttle;\n\t\n\t\n\t/**\n\t * Convert a set of CSS units width to pixels (e.g. 2em)\n\t *  @param {string[]} widths widths to be converted\n\t *  @param {node} parent parent to get the with for (required for relative widths) - optional\n\t *  @returns {int[]} widths in pixels\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnConvertToWidth ( widths, parent )\n\t{\n\t\tvar els = [];\n\t\tvar results = [];\n\t\n\t\t// Add the elements in a single loop so we only need to reflow once\n\t\tfor (var i=0 ; i<widths.length ; i++) {\n\t\t\tif (widths[i]) {\n\t\t\t\tels.push(\n\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t.css( 'width', _fnStringToCss( widths[i] ) )\n\t\t\t\t\t\t.appendTo( parent || document.body )\n\t\t\t\t)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tels.push(null);\n\t\t\t}\n\t\t}\n\t\n\t\t// Get the sizes (will reflow once)\n\t\tfor (var i=0 ; i<widths.length ; i++) {\n\t\t\tresults.push(els[i] ? els[i][0].offsetWidth : null);\n\t\t}\n\t\n\t\t// Tidy\n\t\t$(els).remove();\n\t\n\t\treturn results;\n\t}\n\t\n\t\n\t/**\n\t * Get the widest node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {node} widest table node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetWidestNode( settings, colIdx )\n\t{\n\t\tvar idx = _fnGetMaxLenString( settings, colIdx );\n\t\tif ( idx < 0 ) {\n\t\t\treturn null;\n\t\t}\n\t\n\t\tvar data = settings.aoData[ idx ];\n\t\treturn ! data.nTr ? // Might not have been created when deferred rendering\n\t\t\t$('<td/>').html( _fnGetCellData( settings, idx, colIdx, 'display' ) )[0] :\n\t\t\tdata.anCells[ colIdx ];\n\t}\n\t\n\t\n\t/**\n\t * Get the maximum strlen for each data column\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {string} max string length for each column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetMaxLenString( settings, colIdx )\n\t{\n\t\tvar s, max=-1, maxIdx = -1;\n\t\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\ts = _fnGetCellData( settings, i, colIdx, 'display' )+'';\n\t\t\ts = s.replace( __re_html_remove, '' );\n\t\t\ts = s.replace( /&nbsp;/g, ' ' );\n\t\n\t\t\tif ( s.length > max ) {\n\t\t\t\tmax = s.length;\n\t\t\t\tmaxIdx = i;\n\t\t\t}\n\t\t}\n\t\n\t\treturn maxIdx;\n\t}\n\t\n\t\n\t/**\n\t * Append a CSS unit (only if required) to a string\n\t *  @param {string} value to css-ify\n\t *  @returns {string} value with css unit\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnStringToCss( s )\n\t{\n\t\tif ( s === null ) {\n\t\t\treturn '0px';\n\t\t}\n\t\n\t\tif ( typeof s == 'number' ) {\n\t\t\treturn s < 0 ?\n\t\t\t\t'0px' :\n\t\t\t\ts+'px';\n\t\t}\n\t\n\t\t// Check it has a unit character already\n\t\treturn s.match(/\\d$/) ?\n\t\t\ts+'px' :\n\t\t\ts;\n\t}\n\t\n\t\n\t\n\tfunction _fnSortFlatten ( settings )\n\t{\n\t\tvar\n\t\t\ti, iLen, k, kLen,\n\t\t\taSort = [],\n\t\t\taiOrig = [],\n\t\t\taoColumns = settings.aoColumns,\n\t\t\taDataSort, iCol, sType, srcCol,\n\t\t\tfixed = settings.aaSortingFixed,\n\t\t\tfixedObj = $.isPlainObject( fixed ),\n\t\t\tnestedSort = [],\n\t\t\tadd = function ( a ) {\n\t\t\t\tif ( a.length && ! Array.isArray( a[0] ) ) {\n\t\t\t\t\t// 1D array\n\t\t\t\t\tnestedSort.push( a );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// 2D array\n\t\t\t\t\t$.merge( nestedSort, a );\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t// Build the sort array, with pre-fix and post-fix options if they have been\n\t\t// specified\n\t\tif ( Array.isArray( fixed ) ) {\n\t\t\tadd( fixed );\n\t\t}\n\t\n\t\tif ( fixedObj && fixed.pre ) {\n\t\t\tadd( fixed.pre );\n\t\t}\n\t\n\t\tadd( settings.aaSorting );\n\t\n\t\tif (fixedObj && fixed.post ) {\n\t\t\tadd( fixed.post );\n\t\t}\n\t\n\t\tfor ( i=0 ; i<nestedSort.length ; i++ )\n\t\t{\n\t\t\tsrcCol = nestedSort[i][0];\n\t\t\taDataSort = aoColumns[ srcCol ].aDataSort;\n\t\n\t\t\tfor ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )\n\t\t\t{\n\t\t\t\tiCol = aDataSort[k];\n\t\t\t\tsType = aoColumns[ iCol ].sType || 'string';\n\t\n\t\t\t\tif ( nestedSort[i]._idx === undefined ) {\n\t\t\t\t\tnestedSort[i]._idx = $.inArray( nestedSort[i][1], aoColumns[iCol].asSorting );\n\t\t\t\t}\n\t\n\t\t\t\taSort.push( {\n\t\t\t\t\tsrc:       srcCol,\n\t\t\t\t\tcol:       iCol,\n\t\t\t\t\tdir:       nestedSort[i][1],\n\t\t\t\t\tindex:     nestedSort[i]._idx,\n\t\t\t\t\ttype:      sType,\n\t\t\t\t\tformatter: DataTable.ext.type.order[ sType+\"-pre\" ]\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\n\t\treturn aSort;\n\t}\n\t\n\t/**\n\t * Change the order of the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t *  @todo This really needs split up!\n\t */\n\tfunction _fnSort ( oSettings )\n\t{\n\t\tvar\n\t\t\ti, ien, iLen, j, jLen, k, kLen,\n\t\t\tsDataType, nTh,\n\t\t\taiOrig = [],\n\t\t\toExtSort = DataTable.ext.type.order,\n\t\t\taoData = oSettings.aoData,\n\t\t\taoColumns = oSettings.aoColumns,\n\t\t\taDataSort, data, iCol, sType, oSort,\n\t\t\tformatters = 0,\n\t\t\tsortCol,\n\t\t\tdisplayMaster = oSettings.aiDisplayMaster,\n\t\t\taSort;\n\t\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo Can this be moved into a 'data-ready' handler which is called when\n\t\t//   data is going to be used in the table?\n\t\t_fnColumnTypes( oSettings );\n\t\n\t\taSort = _fnSortFlatten( oSettings );\n\t\n\t\tfor ( i=0, ien=aSort.length ; i<ien ; i++ ) {\n\t\t\tsortCol = aSort[i];\n\t\n\t\t\t// Track if we can use the fast sort algorithm\n\t\t\tif ( sortCol.formatter ) {\n\t\t\t\tformatters++;\n\t\t\t}\n\t\n\t\t\t// Load the data needed for the sort, for each cell\n\t\t\t_fnSortData( oSettings, sortCol.col );\n\t\t}\n\t\n\t\t/* No sorting required if server-side or no sorting array */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )\n\t\t{\n\t\t\t// Create a value - key array of the current row positions such that we can use their\n\t\t\t// current position during the sort, if values match, in order to perform stable sorting\n\t\t\tfor ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {\n\t\t\t\taiOrig[ displayMaster[i] ] = i;\n\t\t\t}\n\t\n\t\t\t/* Do the sort - here we want multi-column sorting based on a given data source (column)\n\t\t\t * and sorting function (from oSort) in a certain direction. It's reasonably complex to\n\t\t\t * follow on it's own, but this is what we want (example two column sorting):\n\t\t\t *  fnLocalSorting = function(a,b){\n\t\t\t *    var iTest;\n\t\t\t *    iTest = oSort['string-asc']('data11', 'data12');\n\t\t\t *      if (iTest !== 0)\n\t\t\t *        return iTest;\n\t\t\t *    iTest = oSort['numeric-desc']('data21', 'data22');\n\t\t\t *    if (iTest !== 0)\n\t\t\t *      return iTest;\n\t\t\t *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );\n\t\t\t *  }\n\t\t\t * Basically we have a test for each sorting column, if the data in that column is equal,\n\t\t\t * test the next column. If all columns match, then we use a numeric sort on the row\n\t\t\t * positions in the original data array to provide a stable sort.\n\t\t\t *\n\t\t\t * Note - I know it seems excessive to have two sorting methods, but the first is around\n\t\t\t * 15% faster, so the second is only maintained for backwards compatibility with sorting\n\t\t\t * methods which do not have a pre-sort formatting function.\n\t\t\t */\n\t\t\tif ( formatters === aSort.length ) {\n\t\t\t\t// All sort types have formatting functions\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, test, sort,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\t\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\t\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\t\n\t\t\t\t\t\ttest = x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn sort.dir === 'asc' ? test : -test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Depreciated - remove in 1.11 (providing a plug-in option)\n\t\t\t\t// Not all sort types have formatting methods, so we have to call their sorting\n\t\t\t\t// methods.\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, l, test, sort, fn,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\t\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\t\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\t\n\t\t\t\t\t\tfn = oExtSort[ sort.type+\"-\"+sort.dir ] || oExtSort[ \"string-\"+sort.dir ];\n\t\t\t\t\t\ttest = fn( x, y );\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\n\t\t/* Tell the draw function that we have sorted the data */\n\t\toSettings.bSorted = true;\n\t}\n\t\n\t\n\tfunction _fnSortAria ( settings )\n\t{\n\t\tvar label;\n\t\tvar nextSort;\n\t\tvar columns = settings.aoColumns;\n\t\tvar aSort = _fnSortFlatten( settings );\n\t\tvar oAria = settings.oLanguage.oAria;\n\t\n\t\t// ARIA attributes - need to loop all columns, to update all (removing old\n\t\t// attributes as needed)\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar col = columns[i];\n\t\t\tvar asSorting = col.asSorting;\n\t\t\tvar sTitle = col.ariaTitle || col.sTitle.replace( /<.*?>/g, \"\" );\n\t\t\tvar th = col.nTh;\n\t\n\t\t\t// IE7 is throwing an error when setting these properties with jQuery's\n\t\t\t// attr() and removeAttr() methods...\n\t\t\tth.removeAttribute('aria-sort');\n\t\n\t\t\t/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */\n\t\t\tif ( col.bSortable ) {\n\t\t\t\tif ( aSort.length > 0 && aSort[0].col == i ) {\n\t\t\t\t\tth.setAttribute('aria-sort', aSort[0].dir==\"asc\" ? \"ascending\" : \"descending\" );\n\t\t\t\t\tnextSort = asSorting[ aSort[0].index+1 ] || asSorting[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnextSort = asSorting[0];\n\t\t\t\t}\n\t\n\t\t\t\tlabel = sTitle + ( nextSort === \"asc\" ?\n\t\t\t\t\toAria.sSortAscending :\n\t\t\t\t\toAria.sSortDescending\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlabel = sTitle;\n\t\t\t}\n\t\n\t\t\tth.setAttribute('aria-label', label);\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Function to run on user sort request\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {boolean} [append=false] Append the requested sort to the existing\n\t *    sort if true (i.e. multi-column sort)\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortListener ( settings, colIdx, append, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\tvar sorting = settings.aaSorting;\n\t\tvar asSorting = col.asSorting;\n\t\tvar nextSortIdx;\n\t\tvar next = function ( a, overflow ) {\n\t\t\tvar idx = a._idx;\n\t\t\tif ( idx === undefined ) {\n\t\t\t\tidx = $.inArray( a[1], asSorting );\n\t\t\t}\n\t\n\t\t\treturn idx+1 < asSorting.length ?\n\t\t\t\tidx+1 :\n\t\t\t\toverflow ?\n\t\t\t\t\tnull :\n\t\t\t\t\t0;\n\t\t};\n\t\n\t\t// Convert to 2D array if needed\n\t\tif ( typeof sorting[0] === 'number' ) {\n\t\t\tsorting = settings.aaSorting = [ sorting ];\n\t\t}\n\t\n\t\t// If appending the sort then we are multi-column sorting\n\t\tif ( append && settings.oFeatures.bSortMulti ) {\n\t\t\t// Are we already doing some kind of sort on this column?\n\t\t\tvar sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );\n\t\n\t\t\tif ( sortIdx !== -1 ) {\n\t\t\t\t// Yes, modify the sort\n\t\t\t\tnextSortIdx = next( sorting[sortIdx], true );\n\t\n\t\t\t\tif ( nextSortIdx === null && sorting.length === 1 ) {\n\t\t\t\t\tnextSortIdx = 0; // can't remove sorting completely\n\t\t\t\t}\n\t\n\t\t\t\tif ( nextSortIdx === null ) {\n\t\t\t\t\tsorting.splice( sortIdx, 1 );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsorting[sortIdx][1] = asSorting[ nextSortIdx ];\n\t\t\t\t\tsorting[sortIdx]._idx = nextSortIdx;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// No sort on this column yet\n\t\t\t\tsorting.push( [ colIdx, asSorting[0], 0 ] );\n\t\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( sorting.length && sorting[0][0] == colIdx ) {\n\t\t\t// Single column - already sorting on this column, modify the sort\n\t\t\tnextSortIdx = next( sorting[0] );\n\t\n\t\t\tsorting.length = 1;\n\t\t\tsorting[0][1] = asSorting[ nextSortIdx ];\n\t\t\tsorting[0]._idx = nextSortIdx;\n\t\t}\n\t\telse {\n\t\t\t// Single column - sort only on this column\n\t\t\tsorting.length = 0;\n\t\t\tsorting.push( [ colIdx, asSorting[0] ] );\n\t\t\tsorting[0]._idx = 0;\n\t\t}\n\t\n\t\t// Run the sort by calling a full redraw\n\t\t_fnReDraw( settings );\n\t\n\t\t// callback used for async user interaction\n\t\tif ( typeof callback == 'function' ) {\n\t\t\tcallback( settings );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Attach a sort handler (click) to a node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortAttachListener ( settings, attachTo, colIdx, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\n\t\t_fnBindAction( attachTo, {}, function (e) {\n\t\t\t/* If the column is not sortable - don't to anything */\n\t\t\tif ( col.bSortable === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If processing is enabled use a timeout to allow the processing\n\t\t\t// display to be shown - otherwise to it synchronously\n\t\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\n\t\t\t\t\t// In server-side processing, the draw callback will remove the\n\t\t\t\t\t// processing display\n\t\t\t\t\tif ( _fnDataSource( settings ) !== 'ssp' ) {\n\t\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t}\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Set the sorting classes on table's body, Note: it is safe to call this function\n\t * when bSort and bSortClasses are false\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortingClasses( settings )\n\t{\n\t\tvar oldSort = settings.aLastSort;\n\t\tvar sortClass = settings.oClasses.sSortColumn;\n\t\tvar sort = _fnSortFlatten( settings );\n\t\tvar features = settings.oFeatures;\n\t\tvar i, ien, colIdx;\n\t\n\t\tif ( features.bSort && features.bSortClasses ) {\n\t\t\t// Remove old sorting classes\n\t\t\tfor ( i=0, ien=oldSort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = oldSort[i].src;\n\t\n\t\t\t\t// Remove column sorting\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.removeClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\n\t\t\t// Add new column sorting\n\t\t\tfor ( i=0, ien=sort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = sort[i].src;\n\t\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.addClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\t}\n\t\n\t\tsettings.aLastSort = sort;\n\t}\n\t\n\t\n\t// Get the data to sort a column, be it from cache, fresh (populating the\n\t// cache), or from a sort formatter\n\tfunction _fnSortData( settings, idx )\n\t{\n\t\t// Custom sorting function - provided by the sort data type\n\t\tvar column = settings.aoColumns[ idx ];\n\t\tvar customSort = DataTable.ext.order[ column.sSortDataType ];\n\t\tvar customData;\n\t\n\t\tif ( customSort ) {\n\t\t\tcustomData = customSort.call( settings.oInstance, settings, idx,\n\t\t\t\t_fnColumnIndexToVisible( settings, idx )\n\t\t\t);\n\t\t}\n\t\n\t\t// Use / populate cache\n\t\tvar row, cellData;\n\t\tvar formatter = DataTable.ext.type.order[ column.sType+\"-pre\" ];\n\t\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\t\n\t\t\tif ( ! row._aSortData ) {\n\t\t\t\trow._aSortData = [];\n\t\t\t}\n\t\n\t\t\tif ( ! row._aSortData[idx] || customSort ) {\n\t\t\t\tcellData = customSort ?\n\t\t\t\t\tcustomData[i] : // If there was a custom sort function, use data from there\n\t\t\t\t\t_fnGetCellData( settings, i, idx, 'sort' );\n\t\n\t\t\t\trow._aSortData[ idx ] = formatter ?\n\t\t\t\t\tformatter( cellData ) :\n\t\t\t\t\tcellData;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t\n\t/**\n\t * Save the state of a table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSaveState ( settings )\n\t{\n\t\tif (settings._bLoadingState) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t/* Store the interesting variables */\n\t\tvar state = {\n\t\t\ttime:    +new Date(),\n\t\t\tstart:   settings._iDisplayStart,\n\t\t\tlength:  settings._iDisplayLength,\n\t\t\torder:   $.extend( true, [], settings.aaSorting ),\n\t\t\tsearch:  _fnSearchToCamel( settings.oPreviousSearch ),\n\t\t\tcolumns: $.map( settings.aoColumns, function ( col, i ) {\n\t\t\t\treturn {\n\t\t\t\t\tvisible: col.bVisible,\n\t\t\t\t\tsearch: _fnSearchToCamel( settings.aoPreSearchCols[i] )\n\t\t\t\t};\n\t\t\t} )\n\t\t};\n\t\n\t\tsettings.oSavedState = state;\n\t\t_fnCallbackFire( settings, \"aoStateSaveParams\", 'stateSaveParams', [settings, state] );\n\t\t\n\t\tif ( settings.oFeatures.bStateSave && !settings.bDestroying )\n\t\t{\n\t\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, state );\n\t\t}\t\n\t}\n\t\n\t\n\t/**\n\t * Attempt to load a saved table state\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oInit DataTables init object so we can override settings\n\t *  @param {function} callback Callback to execute when the state has been loaded\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLoadState ( settings, oInit, callback )\n\t{\n\t\tif ( ! settings.oFeatures.bStateSave ) {\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar loaded = function(state) {\n\t\t\t_fnImplementState(settings, state, callback);\n\t\t}\n\t\n\t\tvar state = settings.fnStateLoadCallback.call( settings.oInstance, settings, loaded );\n\t\n\t\tif ( state !== undefined ) {\n\t\t\t_fnImplementState( settings, state, callback );\n\t\t}\n\t\t// otherwise, wait for the loaded callback to be executed\n\t\n\t\treturn true;\n\t}\n\t\n\tfunction _fnImplementState ( settings, s, callback) {\n\t\tvar i, ien;\n\t\tvar columns = settings.aoColumns;\n\t\tsettings._bLoadingState = true;\n\t\n\t\t// When StateRestore was introduced the state could now be implemented at any time\n\t\t// Not just initialisation. To do this an api instance is required in some places\n\t\tvar api = settings._bInitComplete ? new DataTable.Api(settings) : null;\n\t\n\t\tif ( ! s || ! s.time ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Allow custom and plug-in manipulation functions to alter the saved data set and\n\t\t// cancelling of loading by returning false\n\t\tvar abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, s] );\n\t\tif ( $.inArray( false, abStateLoad ) !== -1 ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Reject old data\n\t\tvar duration = settings.iStateDuration;\n\t\tif ( duration > 0 && s.time < +new Date() - (duration*1000) ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Number of columns have changed - all bets are off, no restore of settings\n\t\tif ( s.columns && columns.length !== s.columns.length ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Store the saved state so it might be accessed at any time\n\t\tsettings.oLoadedState = $.extend( true, {}, s );\n\t\n\t\t// Page Length\n\t\tif ( s.length !== undefined ) {\n\t\t\t// If already initialised just set the value directly so that the select element is also updated\n\t\t\tif (api) {\n\t\t\t\tapi.page.len(s.length)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsettings._iDisplayLength   = s.length;\n\t\t\t}\n\t\t}\n\t\n\t\t// Restore key features - todo - for 1.11 this needs to be done by\n\t\t// subscribed events\n\t\tif ( s.start !== undefined ) {\n\t\t\tif(api === null) {\n\t\t\t\tsettings._iDisplayStart    = s.start;\n\t\t\t\tsettings.iInitDisplayStart = s.start;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnPageChange(settings, s.start/settings._iDisplayLength);\n\t\t\t}\n\t\t}\n\t\n\t\t// Order\n\t\tif ( s.order !== undefined ) {\n\t\t\tsettings.aaSorting = [];\n\t\t\t$.each( s.order, function ( i, col ) {\n\t\t\t\tsettings.aaSorting.push( col[0] >= columns.length ?\n\t\t\t\t\t[ 0, col[1] ] :\n\t\t\t\t\tcol\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t\n\t\t// Search\n\t\tif ( s.search !== undefined ) {\n\t\t\t$.extend( settings.oPreviousSearch, _fnSearchToHung( s.search ) );\n\t\t}\n\t\n\t\t// Columns\n\t\tif ( s.columns ) {\n\t\t\tfor ( i=0, ien=s.columns.length ; i<ien ; i++ ) {\n\t\t\t\tvar col = s.columns[i];\n\t\n\t\t\t\t// Visibility\n\t\t\t\tif ( col.visible !== undefined ) {\n\t\t\t\t\t// If the api is defined, the table has been initialised so we need to use it rather than internal settings\n\t\t\t\t\tif (api) {\n\t\t\t\t\t\t// Don't redraw the columns on every iteration of this loop, we will do this at the end instead\n\t\t\t\t\t\tapi.column(i).visible(col.visible, false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcolumns[i].bVisible = col.visible;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Search\n\t\t\t\tif ( col.search !== undefined ) {\n\t\t\t\t\t$.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// If the api is defined then we need to adjust the columns once the visibility has been changed\n\t\t\tif (api) {\n\t\t\t\tapi.columns.adjust();\n\t\t\t}\n\t\t}\n\t\n\t\tsettings._bLoadingState = false;\n\t\t_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, s] );\n\t\tcallback();\n\t};\n\t\n\t\n\t/**\n\t * Return the settings object for a particular table\n\t *  @param {node} table table we are using as a dataTable\n\t *  @returns {object} Settings object - or null if not found\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSettingsFromNode ( table )\n\t{\n\t\tvar settings = DataTable.settings;\n\t\tvar idx = $.inArray( table, _pluck( settings, 'nTable' ) );\n\t\n\t\treturn idx !== -1 ?\n\t\t\tsettings[ idx ] :\n\t\t\tnull;\n\t}\n\t\n\t\n\t/**\n\t * Log an error message\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} level log error messages, or display them to the user\n\t *  @param {string} msg error message\n\t *  @param {int} tn Technical note id to get more information about the error.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLog( settings, level, msg, tn )\n\t{\n\t\tmsg = 'DataTables warning: '+\n\t\t\t(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;\n\t\n\t\tif ( tn ) {\n\t\t\tmsg += '. For more information about this error, please see '+\n\t\t\t'https://datatables.net/tn/'+tn;\n\t\t}\n\t\n\t\tif ( ! level  ) {\n\t\t\t// Backwards compatibility pre 1.10\n\t\t\tvar ext = DataTable.ext;\n\t\t\tvar type = ext.sErrMode || ext.errMode;\n\t\n\t\t\tif ( settings ) {\n\t\t\t\t_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );\n\t\t\t}\n\t\n\t\t\tif ( type == 'alert' ) {\n\t\t\t\talert( msg );\n\t\t\t}\n\t\t\telse if ( type == 'throw' ) {\n\t\t\t\tthrow new Error(msg);\n\t\t\t}\n\t\t\telse if ( typeof type == 'function' ) {\n\t\t\t\ttype( settings, tn, msg );\n\t\t\t}\n\t\t}\n\t\telse if ( window.console && console.log ) {\n\t\t\tconsole.log( msg );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * See if a property is defined on one object, if so assign it to the other object\n\t *  @param {object} ret target object\n\t *  @param {object} src source object\n\t *  @param {string} name property\n\t *  @param {string} [mappedName] name to map too - optional, name used if not given\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnMap( ret, src, name, mappedName )\n\t{\n\t\tif ( Array.isArray( name ) ) {\n\t\t\t$.each( name, function (i, val) {\n\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t_fnMap( ret, src, val[0], val[1] );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_fnMap( ret, src, val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( mappedName === undefined ) {\n\t\t\tmappedName = name;\n\t\t}\n\t\n\t\tif ( src[name] !== undefined ) {\n\t\t\tret[mappedName] = src[name];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Extend objects - very similar to jQuery.extend, but deep copy objects, and\n\t * shallow copy arrays. The reason we need to do this, is that we don't want to\n\t * deep copy array init values (such as aaSorting) since the dev wouldn't be\n\t * able to override them, but we do want to deep copy arrays.\n\t *  @param {object} out Object to extend\n\t *  @param {object} extender Object from which the properties will be applied to\n\t *      out\n\t *  @param {boolean} breakRefs If true, then arrays will be sliced to take an\n\t *      independent copy with the exception of the `data` or `aaData` parameters\n\t *      if they are present. This is so you can pass in a collection to\n\t *      DataTables and have that used as your data source without breaking the\n\t *      references\n\t *  @returns {object} out Reference, just for convenience - out === the return.\n\t *  @memberof DataTable#oApi\n\t *  @todo This doesn't take account of arrays inside the deep copied objects.\n\t */\n\tfunction _fnExtend( out, extender, breakRefs )\n\t{\n\t\tvar val;\n\t\n\t\tfor ( var prop in extender ) {\n\t\t\tif ( extender.hasOwnProperty(prop) ) {\n\t\t\t\tval = extender[prop];\n\t\n\t\t\t\tif ( $.isPlainObject( val ) ) {\n\t\t\t\t\tif ( ! $.isPlainObject( out[prop] ) ) {\n\t\t\t\t\t\tout[prop] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, out[prop], val );\n\t\t\t\t}\n\t\t\t\telse if ( breakRefs && prop !== 'data' && prop !== 'aaData' && Array.isArray(val) ) {\n\t\t\t\t\tout[prop] = val.slice();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tout[prop] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t}\n\t\n\t\n\t/**\n\t * Bind an event handers to allow a click or return key to activate the callback.\n\t * This is good for accessibility since a return on the keyboard will have the\n\t * same effect as a click, if the element has focus.\n\t *  @param {element} n Element to bind the action to\n\t *  @param {object} oData Data object to pass to the triggered function\n\t *  @param {function} fn Callback function for when the event is triggered\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBindAction( n, oData, fn )\n\t{\n\t\t$(n)\n\t\t\t.on( 'click.DT', oData, function (e) {\n\t\t\t\t\t$(n).trigger('blur'); // Remove focus outline for mouse users\n\t\t\t\t\tfn(e);\n\t\t\t\t} )\n\t\t\t.on( 'keypress.DT', oData, function (e){\n\t\t\t\t\tif ( e.which === 13 ) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tfn(e);\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t.on( 'selectstart.DT', function () {\n\t\t\t\t\t/* Take the brutal approach to cancelling text selection */\n\t\t\t\t\treturn false;\n\t\t\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Register a callback function. Easily allows a callback function to be added to\n\t * an array store of callback functions that can then all be called together.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sStore Name of the array storage for the callbacks in oSettings\n\t *  @param {function} fn Function to be called back\n\t *  @param {string} sName Identifying name for the callback (i.e. a label)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackReg( oSettings, sStore, fn, sName )\n\t{\n\t\tif ( fn )\n\t\t{\n\t\t\toSettings[sStore].push( {\n\t\t\t\t\"fn\": fn,\n\t\t\t\t\"sName\": sName\n\t\t\t} );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Fire callback functions and trigger events. Note that the loop over the\n\t * callback array store is done backwards! Further note that you do not want to\n\t * fire off triggers in time sensitive applications (for example cell creation)\n\t * as its slow.\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} callbackArr Name of the array storage for the callbacks in\n\t *      oSettings\n\t *  @param {string} eventName Name of the jQuery custom event to trigger. If\n\t *      null no trigger is fired\n\t *  @param {array} args Array of arguments to pass to the callback function /\n\t *      trigger\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackFire( settings, callbackArr, eventName, args )\n\t{\n\t\tvar ret = [];\n\t\n\t\tif ( callbackArr ) {\n\t\t\tret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {\n\t\t\t\treturn val.fn.apply( settings.oInstance, args );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( eventName !== null ) {\n\t\t\tvar e = $.Event( eventName+'.dt' );\n\t\t\tvar table = $(settings.nTable);\n\t\n\t\t\ttable.trigger( e, args );\n\t\n\t\t\t// If not yet attached to the document, trigger the event\n\t\t\t// on the body directly to sort of simulate the bubble\n\t\t\tif (table.parents('body').length === 0) {\n\t\t\t\t$('body').trigger( e, args );\n\t\t\t}\n\t\n\t\t\tret.push( e.result );\n\t\t}\n\t\n\t\treturn ret;\n\t}\n\t\n\t\n\tfunction _fnLengthOverflow ( settings )\n\t{\n\t\tvar\n\t\t\tstart = settings._iDisplayStart,\n\t\t\tend = settings.fnDisplayEnd(),\n\t\t\tlen = settings._iDisplayLength;\n\t\n\t\t/* If we have space to show extra rows (backing up from the end point - then do so */\n\t\tif ( start >= end )\n\t\t{\n\t\t\tstart = end - len;\n\t\t}\n\t\n\t\t// Keep the start record on the current page\n\t\tstart -= (start % len);\n\t\n\t\tif ( len === -1 || start < 0 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\n\t\tsettings._iDisplayStart = start;\n\t}\n\t\n\t\n\tfunction _fnRenderer( settings, type )\n\t{\n\t\tvar renderer = settings.renderer;\n\t\tvar host = DataTable.ext.renderer[type];\n\t\n\t\tif ( $.isPlainObject( renderer ) && renderer[type] ) {\n\t\t\t// Specific renderer for this type. If available use it, otherwise use\n\t\t\t// the default.\n\t\t\treturn host[renderer[type]] || host._;\n\t\t}\n\t\telse if ( typeof renderer === 'string' ) {\n\t\t\t// Common renderer - if there is one available for this type use it,\n\t\t\t// otherwise use the default\n\t\t\treturn host[renderer] || host._;\n\t\t}\n\t\n\t\t// Use the default\n\t\treturn host._;\n\t}\n\t\n\t\n\t/**\n\t * Detect the data source being used for the table. Used to simplify the code\n\t * a little (ajax) and to make it compress a little smaller.\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {string} Data source\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDataSource ( settings )\n\t{\n\t\tif ( settings.oFeatures.bServerSide ) {\n\t\t\treturn 'ssp';\n\t\t}\n\t\telse if ( settings.ajax || settings.sAjaxSource ) {\n\t\t\treturn 'ajax';\n\t\t}\n\t\treturn 'dom';\n\t}\n\t\n\t\n\t\n\t\n\t/**\n\t * Computed structure of the DataTables API, defined by the options passed to\n\t * `DataTable.Api.register()` when building the API.\n\t *\n\t * The structure is built in order to speed creation and extension of the Api\n\t * objects since the extensions are effectively pre-parsed.\n\t *\n\t * The array is an array of objects with the following structure, where this\n\t * base array represents the Api prototype base:\n\t *\n\t *     [\n\t *       {\n\t *         name:      'data'                -- string   - Property name\n\t *         val:       function () {},       -- function - Api method (or undefined if just an object\n\t *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t *       },\n\t *       {\n\t *         name:     'row'\n\t *         val:       {},\n\t *         methodExt: [ ... ],\n\t *         propExt:   [\n\t *           {\n\t *             name:      'data'\n\t *             val:       function () {},\n\t *             methodExt: [ ... ],\n\t *             propExt:   [ ... ]\n\t *           },\n\t *           ...\n\t *         ]\n\t *       }\n\t *     ]\n\t *\n\t * @type {Array}\n\t * @ignore\n\t */\n\tvar __apiStruct = [];\n\t\n\t\n\t/**\n\t * `Array.prototype` reference.\n\t *\n\t * @type object\n\t * @ignore\n\t */\n\tvar __arrayProto = Array.prototype;\n\t\n\t\n\t/**\n\t * Abstraction for `context` parameter of the `Api` constructor to allow it to\n\t * take several different forms for ease of use.\n\t *\n\t * Each of the input parameter types will be converted to a DataTables settings\n\t * object where possible.\n\t *\n\t * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one\n\t *   of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t *   * `DataTables.Api` - API instance\n\t * @return {array|null} Matching DataTables settings objects. `null` or\n\t *   `undefined` is returned if no matching DataTable is found.\n\t * @ignore\n\t */\n\tvar _toSettings = function ( mixed )\n\t{\n\t\tvar idx, jq;\n\t\tvar settings = DataTable.settings;\n\t\tvar tables = $.map( settings, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\t\n\t\tif ( ! mixed ) {\n\t\t\treturn [];\n\t\t}\n\t\telse if ( mixed.nTable && mixed.oApi ) {\n\t\t\t// DataTables settings object\n\t\t\treturn [ mixed ];\n\t\t}\n\t\telse if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {\n\t\t\t// Table node\n\t\t\tidx = $.inArray( mixed, tables );\n\t\t\treturn idx !== -1 ? [ settings[idx] ] : null;\n\t\t}\n\t\telse if ( mixed && typeof mixed.settings === 'function' ) {\n\t\t\treturn mixed.settings().toArray();\n\t\t}\n\t\telse if ( typeof mixed === 'string' ) {\n\t\t\t// jQuery selector\n\t\t\tjq = $(mixed);\n\t\t}\n\t\telse if ( mixed instanceof $ ) {\n\t\t\t// jQuery object (also DataTables instance)\n\t\t\tjq = mixed;\n\t\t}\n\t\n\t\tif ( jq ) {\n\t\t\treturn jq.map( function(i) {\n\t\t\t\tidx = $.inArray( this, tables );\n\t\t\t\treturn idx !== -1 ? settings[idx] : null;\n\t\t\t} ).toArray();\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * DataTables API class - used to control and interface with  one or more\n\t * DataTables enhanced tables.\n\t *\n\t * The API class is heavily based on jQuery, presenting a chainable interface\n\t * that you can use to interact with tables. Each instance of the API class has\n\t * a \"context\" - i.e. the tables that it will operate on. This could be a single\n\t * table, all tables on a page or a sub-set thereof.\n\t *\n\t * Additionally the API is designed to allow you to easily work with the data in\n\t * the tables, retrieving and manipulating it as required. This is done by\n\t * presenting the API class as an array like interface. The contents of the\n\t * array depend upon the actions requested by each method (for example\n\t * `rows().nodes()` will return an array of nodes, while `rows().data()` will\n\t * return an array of objects or arrays depending upon your table's\n\t * configuration). The API object has a number of array like methods (`push`,\n\t * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,\n\t * `unique` etc) to assist your working with the data held in a table.\n\t *\n\t * Most methods (those which return an Api instance) are chainable, which means\n\t * the return from a method call also has all of the methods available that the\n\t * top level object had. For example, these two calls are equivalent:\n\t *\n\t *     // Not chained\n\t *     api.row.add( {...} );\n\t *     api.draw();\n\t *\n\t *     // Chained\n\t *     api.row.add( {...} ).draw();\n\t *\n\t * @class DataTable.Api\n\t * @param {array|object|string|jQuery} context DataTable identifier. This is\n\t *   used to define which DataTables enhanced tables this API will operate on.\n\t *   Can be one of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t * @param {array} [data] Data to initialise the Api instance with.\n\t *\n\t * @example\n\t *   // Direct initialisation during DataTables construction\n\t *   var api = $('#example').DataTable();\n\t *\n\t * @example\n\t *   // Initialisation using a DataTables jQuery object\n\t *   var api = $('#example').dataTable().api();\n\t *\n\t * @example\n\t *   // Initialisation as a constructor\n\t *   var api = new $.fn.DataTable.Api( 'table.dataTable' );\n\t */\n\t_Api = function ( context, data )\n\t{\n\t\tif ( ! (this instanceof _Api) ) {\n\t\t\treturn new _Api( context, data );\n\t\t}\n\t\n\t\tvar settings = [];\n\t\tvar ctxSettings = function ( o ) {\n\t\t\tvar a = _toSettings( o );\n\t\t\tif ( a ) {\n\t\t\t\tsettings.push.apply( settings, a );\n\t\t\t}\n\t\t};\n\t\n\t\tif ( Array.isArray( context ) ) {\n\t\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tctxSettings( context[i] );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tctxSettings( context );\n\t\t}\n\t\n\t\t// Remove duplicates\n\t\tthis.context = _unique( settings );\n\t\n\t\t// Initial data\n\t\tif ( data ) {\n\t\t\t$.merge( this, data );\n\t\t}\n\t\n\t\t// selector\n\t\tthis.selector = {\n\t\t\trows: null,\n\t\t\tcols: null,\n\t\t\topts: null\n\t\t};\n\t\n\t\t_Api.extend( this, this, __apiStruct );\n\t};\n\t\n\tDataTable.Api = _Api;\n\t\n\t// Don't destroy the existing prototype, just extend it. Required for jQuery 2's\n\t// isPlainObject.\n\t$.extend( _Api.prototype, {\n\t\tany: function ()\n\t\t{\n\t\t\treturn this.count() !== 0;\n\t\t},\n\t\n\t\n\t\tconcat:  __arrayProto.concat,\n\t\n\t\n\t\tcontext: [], // array of table settings objects\n\t\n\t\n\t\tcount: function ()\n\t\t{\n\t\t\treturn this.flatten().length;\n\t\t},\n\t\n\t\n\t\teach: function ( fn )\n\t\t{\n\t\t\tfor ( var i=0, ien=this.length ; i<ien; i++ ) {\n\t\t\t\tfn.call( this, this[i], i, this );\n\t\t\t}\n\t\n\t\t\treturn this;\n\t\t},\n\t\n\t\n\t\teq: function ( idx )\n\t\t{\n\t\t\tvar ctx = this.context;\n\t\n\t\t\treturn ctx.length > idx ?\n\t\t\t\tnew _Api( ctx[idx], this[idx] ) :\n\t\t\t\tnull;\n\t\t},\n\t\n\t\n\t\tfilter: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\t\n\t\t\tif ( __arrayProto.filter ) {\n\t\t\t\ta = __arrayProto.filter.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( fn.call( this, this[i], i, this ) ) {\n\t\t\t\t\t\ta.push( this[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\n\t\tflatten: function ()\n\t\t{\n\t\t\tvar a = [];\n\t\t\treturn new _Api( this.context, a.concat.apply( a, this.toArray() ) );\n\t\t},\n\t\n\t\n\t\tjoin:    __arrayProto.join,\n\t\n\t\n\t\tindexOf: __arrayProto.indexOf || function (obj, start)\n\t\t{\n\t\t\tfor ( var i=(start || 0), ien=this.length ; i<ien ; i++ ) {\n\t\t\t\tif ( this[i] === obj ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\t\n\t\titerator: function ( flatten, type, fn, alwaysNew ) {\n\t\t\tvar\n\t\t\t\ta = [], ret,\n\t\t\t\ti, ien, j, jen,\n\t\t\t\tcontext = this.context,\n\t\t\t\trows, items, item,\n\t\t\t\tselector = this.selector;\n\t\n\t\t\t// Argument shifting\n\t\t\tif ( typeof flatten === 'string' ) {\n\t\t\t\talwaysNew = fn;\n\t\t\t\tfn = type;\n\t\t\t\ttype = flatten;\n\t\t\t\tflatten = false;\n\t\t\t}\n\t\n\t\t\tfor ( i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tvar apiInst = new _Api( context[i] );\n\t\n\t\t\t\tif ( type === 'table' ) {\n\t\t\t\t\tret = fn.call( apiInst, context[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'columns' || type === 'rows' ) {\n\t\t\t\t\t// this has same length as context - one entry for each table\n\t\t\t\t\tret = fn.call( apiInst, context[i], this[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {\n\t\t\t\t\t// columns and rows share the same structure.\n\t\t\t\t\t// 'this' is an array of column indexes for each context\n\t\t\t\t\titems = this[i];\n\t\n\t\t\t\t\tif ( type === 'column-rows' ) {\n\t\t\t\t\t\trows = _selector_row_indexes( context[i], selector.opts );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfor ( j=0, jen=items.length ; j<jen ; j++ ) {\n\t\t\t\t\t\titem = items[j];\n\t\n\t\t\t\t\t\tif ( type === 'cell' ) {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item.row, item.column, i, j );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item, i, j, rows );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( a.length || alwaysNew ) {\n\t\t\t\tvar api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );\n\t\t\t\tvar apiSelector = api.selector;\n\t\t\t\tapiSelector.rows = selector.rows;\n\t\t\t\tapiSelector.cols = selector.cols;\n\t\t\t\tapiSelector.opts = selector.opts;\n\t\t\t\treturn api;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\n\t\n\t\tlastIndexOf: __arrayProto.lastIndexOf || function (obj, start)\n\t\t{\n\t\t\t// Bit cheeky...\n\t\t\treturn this.indexOf.apply( this.toArray.reverse(), arguments );\n\t\t},\n\t\n\t\n\t\tlength:  0,\n\t\n\t\n\t\tmap: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\t\n\t\t\tif ( __arrayProto.map ) {\n\t\t\t\ta = __arrayProto.map.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\ta.push( fn.call( this, this[i], i ) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\n\t\tpluck: function ( prop )\n\t\t{\n\t\t\tvar fn = DataTable.util.get(prop);\n\t\n\t\t\treturn this.map( function ( el ) {\n\t\t\t\treturn fn(el);\n\t\t\t} );\n\t\t},\n\t\n\t\tpop:     __arrayProto.pop,\n\t\n\t\n\t\tpush:    __arrayProto.push,\n\t\n\t\n\t\t// Does not return an API instance\n\t\treduce: __arrayProto.reduce || function ( fn, init )\n\t\t{\n\t\t\treturn _fnReduce( this, fn, init, 0, this.length, 1 );\n\t\t},\n\t\n\t\n\t\treduceRight: __arrayProto.reduceRight || function ( fn, init )\n\t\t{\n\t\t\treturn _fnReduce( this, fn, init, this.length-1, -1, -1 );\n\t\t},\n\t\n\t\n\t\treverse: __arrayProto.reverse,\n\t\n\t\n\t\t// Object with rows, columns and opts\n\t\tselector: null,\n\t\n\t\n\t\tshift:   __arrayProto.shift,\n\t\n\t\n\t\tslice: function () {\n\t\t\treturn new _Api( this.context, this );\n\t\t},\n\t\n\t\n\t\tsort:    __arrayProto.sort, // ? name - order?\n\t\n\t\n\t\tsplice:  __arrayProto.splice,\n\t\n\t\n\t\ttoArray: function ()\n\t\t{\n\t\t\treturn __arrayProto.slice.call( this );\n\t\t},\n\t\n\t\n\t\tto$: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\n\t\ttoJQuery: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\n\t\tunique: function ()\n\t\t{\n\t\t\treturn new _Api( this.context, _unique(this) );\n\t\t},\n\t\n\t\n\t\tunshift: __arrayProto.unshift\n\t} );\n\t\n\t\n\t_Api.extend = function ( scope, obj, ext )\n\t{\n\t\t// Only extend API instances and static properties of the API\n\t\tif ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, ien,\n\t\t\tstruct,\n\t\t\tmethodScoping = function ( scope, fn, struc ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar ret = fn.apply( scope, arguments );\n\t\n\t\t\t\t\t// Method extension\n\t\t\t\t\t_Api.extend( ret, ret, struc.methodExt );\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\t\t\t};\n\t\n\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\tstruct = ext[i];\n\t\n\t\t\t// Value\n\t\t\tobj[ struct.name ] = struct.type === 'function' ?\n\t\t\t\tmethodScoping( scope, struct.val, struct ) :\n\t\t\t\tstruct.type === 'object' ?\n\t\t\t\t\t{} :\n\t\t\t\t\tstruct.val;\n\t\n\t\t\tobj[ struct.name ].__dt_wrapper = true;\n\t\n\t\t\t// Property extension\n\t\t\t_Api.extend( scope, obj[ struct.name ], struct.propExt );\n\t\t}\n\t};\n\t\n\t\n\t// @todo - Is there need for an augment function?\n\t// _Api.augment = function ( inst, name )\n\t// {\n\t// \t// Find src object in the structure from the name\n\t// \tvar parts = name.split('.');\n\t\n\t// \t_Api.extend( inst, obj );\n\t// };\n\t\n\t\n\t//     [\n\t//       {\n\t//         name:      'data'                -- string   - Property name\n\t//         val:       function () {},       -- function - Api method (or undefined if just an object\n\t//         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t//         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t//       },\n\t//       {\n\t//         name:     'row'\n\t//         val:       {},\n\t//         methodExt: [ ... ],\n\t//         propExt:   [\n\t//           {\n\t//             name:      'data'\n\t//             val:       function () {},\n\t//             methodExt: [ ... ],\n\t//             propExt:   [ ... ]\n\t//           },\n\t//           ...\n\t//         ]\n\t//       }\n\t//     ]\n\t\n\t_Api.register = _api_register = function ( name, val )\n\t{\n\t\tif ( Array.isArray( name ) ) {\n\t\t\tfor ( var j=0, jen=name.length ; j<jen ; j++ ) {\n\t\t\t\t_Api.register( name[j], val );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, ien,\n\t\t\their = name.split('.'),\n\t\t\tstruct = __apiStruct,\n\t\t\tkey, method;\n\t\n\t\tvar find = function ( src, name ) {\n\t\t\tfor ( var i=0, ien=src.length ; i<ien ; i++ ) {\n\t\t\t\tif ( src[i].name === name ) {\n\t\t\t\t\treturn src[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\t\n\t\tfor ( i=0, ien=heir.length ; i<ien ; i++ ) {\n\t\t\tmethod = heir[i].indexOf('()') !== -1;\n\t\t\tkey = method ?\n\t\t\t\their[i].replace('()', '') :\n\t\t\t\their[i];\n\t\n\t\t\tvar src = find( struct, key );\n\t\t\tif ( ! src ) {\n\t\t\t\tsrc = {\n\t\t\t\t\tname:      key,\n\t\t\t\t\tval:       {},\n\t\t\t\t\tmethodExt: [],\n\t\t\t\t\tpropExt:   [],\n\t\t\t\t\ttype:      'object'\n\t\t\t\t};\n\t\t\t\tstruct.push( src );\n\t\t\t}\n\t\n\t\t\tif ( i === ien-1 ) {\n\t\t\t\tsrc.val = val;\n\t\t\t\tsrc.type = typeof val === 'function' ?\n\t\t\t\t\t'function' :\n\t\t\t\t\t$.isPlainObject( val ) ?\n\t\t\t\t\t\t'object' :\n\t\t\t\t\t\t'other';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstruct = method ?\n\t\t\t\t\tsrc.methodExt :\n\t\t\t\t\tsrc.propExt;\n\t\t\t}\n\t\t}\n\t};\n\t\n\t_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {\n\t\t_Api.register( pluralName, val );\n\t\n\t\t_Api.register( singularName, function () {\n\t\t\tvar ret = val.apply( this, arguments );\n\t\n\t\t\tif ( ret === this ) {\n\t\t\t\t// Returned item is the API instance that was passed in, return it\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\telse if ( ret instanceof _Api ) {\n\t\t\t\t// New API instance returned, want the value from the first item\n\t\t\t\t// in the returned array for the singular result.\n\t\t\t\treturn ret.length ?\n\t\t\t\t\tArray.isArray( ret[0] ) ?\n\t\t\t\t\t\tnew _Api( ret.context, ret[0] ) : // Array results are 'enhanced'\n\t\t\t\t\t\tret[0] :\n\t\t\t\t\tundefined;\n\t\t\t}\n\t\n\t\t\t// Non-API return - just fire it back\n\t\t\treturn ret;\n\t\t} );\n\t};\n\t\n\t\n\t/**\n\t * Selector for HTML tables. Apply the given selector to the give array of\n\t * DataTables settings objects.\n\t *\n\t * @param {string|integer} [selector] jQuery selector string or integer\n\t * @param  {array} Array of DataTables settings objects to be filtered\n\t * @return {array}\n\t * @ignore\n\t */\n\tvar __table_selector = function ( selector, a )\n\t{\n\t\tif ( Array.isArray(selector) ) {\n\t\t\treturn $.map( selector, function (item) {\n\t\t\t\treturn __table_selector(item, a);\n\t\t\t} );\n\t\t}\n\t\n\t\t// Integer is used to pick out a table by index\n\t\tif ( typeof selector === 'number' ) {\n\t\t\treturn [ a[ selector ] ];\n\t\t}\n\t\n\t\t// Perform a jQuery selector on the table nodes\n\t\tvar nodes = $.map( a, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\t\n\t\treturn $(nodes)\n\t\t\t.filter( selector )\n\t\t\t.map( function (i) {\n\t\t\t\t// Need to translate back from the table node to the settings\n\t\t\t\tvar idx = $.inArray( this, nodes );\n\t\t\t\treturn a[ idx ];\n\t\t\t} )\n\t\t\t.toArray();\n\t};\n\t\n\t\n\t\n\t/**\n\t * Context selector for the API's context (i.e. the tables the API instance\n\t * refers to.\n\t *\n\t * @name    DataTable.Api#tables\n\t * @param {string|integer} [selector] Selector to pick which tables the iterator\n\t *   should operate on. If not given, all tables in the current context are\n\t *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to\n\t *   select multiple tables or as an integer to select a single table.\n\t * @returns {DataTable.Api} Returns a new API instance if a selector is given.\n\t */\n\t_api_register( 'tables()', function ( selector ) {\n\t\t// A new instance is created if there was a selector specified\n\t\treturn selector !== undefined && selector !== null ?\n\t\t\tnew _Api( __table_selector( selector, this.context ) ) :\n\t\t\tthis;\n\t} );\n\t\n\t\n\t_api_register( 'table()', function ( selector ) {\n\t\tvar tables = this.tables( selector );\n\t\tvar ctx = tables.context;\n\t\n\t\t// Truncate to the first matched table\n\t\treturn ctx.length ?\n\t\t\tnew _Api( ctx[0] ) :\n\t\t\ttables;\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().nodes()', 'table().node()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTable;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().body()', 'table().body()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTBody;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().header()', 'table().header()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTHead;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().footer()', 'table().footer()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTFoot;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'tables().containers()', 'table().container()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTableWrapper;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Redraw the tables in the current context.\n\t */\n\t_api_register( 'draw()', function ( paging ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( paging === 'page' ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( typeof paging === 'string' ) {\n\t\t\t\t\tpaging = paging === 'full-hold' ?\n\t\t\t\t\t\tfalse :\n\t\t\t\t\t\ttrue;\n\t\t\t\t}\n\t\n\t\t\t\t_fnReDraw( settings, paging===false );\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get the current page index.\n\t *\n\t * @return {integer} Current page index (zero based)\n\t *//**\n\t * Set the current page.\n\t *\n\t * Note that if you attempt to show a page which does not exist, DataTables will\n\t * not throw an error, but rather reset the paging.\n\t *\n\t * @param {integer|string} action The paging action to take. This can be one of:\n\t *  * `integer` - The page index to jump to\n\t *  * `string` - An action to take:\n\t *    * `first` - Jump to first page.\n\t *    * `next` - Jump to the next page\n\t *    * `previous` - Jump to previous page\n\t *    * `last` - Jump to the last page.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page()', function ( action ) {\n\t\tif ( action === undefined ) {\n\t\t\treturn this.page.info().page; // not an expensive call\n\t\t}\n\t\n\t\t// else, have an action to take on all tables\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnPageChange( settings, action );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Paging information for the first table in the current context.\n\t *\n\t * If you require paging information for another table, use the `table()` method\n\t * with a suitable selector.\n\t *\n\t * @return {object} Object with the following properties set:\n\t *  * `page` - Current page index (zero based - i.e. the first page is `0`)\n\t *  * `pages` - Total number of pages\n\t *  * `start` - Display index for the first record shown on the current page\n\t *  * `end` - Display index for the last record shown on the current page\n\t *  * `length` - Display length (number of records). Note that generally `start\n\t *    + length = end`, but this is not always true, for example if there are\n\t *    only 2 records to show on the final page, with a length of 10.\n\t *  * `recordsTotal` - Full data set length\n\t *  * `recordsDisplay` - Data set length once the current filtering criterion\n\t *    are applied.\n\t */\n\t_api_register( 'page.info()', function ( action ) {\n\t\tif ( this.context.length === 0 ) {\n\t\t\treturn undefined;\n\t\t}\n\t\n\t\tvar\n\t\t\tsettings   = this.context[0],\n\t\t\tstart      = settings._iDisplayStart,\n\t\t\tlen        = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,\n\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn {\n\t\t\t\"page\":           all ? 0 : Math.floor( start / len ),\n\t\t\t\"pages\":          all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\"start\":          start,\n\t\t\t\"end\":            settings.fnDisplayEnd(),\n\t\t\t\"length\":         len,\n\t\t\t\"recordsTotal\":   settings.fnRecordsTotal(),\n\t\t\t\"recordsDisplay\": visRecords,\n\t\t\t\"serverSide\":     _fnDataSource( settings ) === 'ssp'\n\t\t};\n\t} );\n\t\n\t\n\t/**\n\t * Get the current page length.\n\t *\n\t * @return {integer} Current page length. Note `-1` indicates that all records\n\t *   are to be shown.\n\t *//**\n\t * Set the current page length.\n\t *\n\t * @param {integer} Page length to set. Use `-1` to show all records.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page.len()', function ( len ) {\n\t\t// Note that we can't call this function 'length()' because `length`\n\t\t// is a Javascript property of functions which defines how many arguments\n\t\t// the function expects.\n\t\tif ( len === undefined ) {\n\t\t\treturn this.context.length !== 0 ?\n\t\t\t\tthis.context[0]._iDisplayLength :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// else, set the page length\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnLengthChange( settings, len );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\tvar __reload = function ( settings, holdPosition, callback ) {\n\t\t// Use the draw event to trigger a callback\n\t\tif ( callback ) {\n\t\t\tvar api = new _Api( settings );\n\t\n\t\t\tapi.one( 'draw', function () {\n\t\t\t\tcallback( api.ajax.json() );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t_fnReDraw( settings, holdPosition );\n\t\t}\n\t\telse {\n\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t// Cancel an existing request\n\t\t\tvar xhr = settings.jqXHR;\n\t\t\tif ( xhr && xhr.readyState !== 4 ) {\n\t\t\t\txhr.abort();\n\t\t\t}\n\t\n\t\t\t// Trigger xhr\n\t\t\t_fnBuildAjax( settings, [], function( json ) {\n\t\t\t\t_fnClearTable( settings );\n\t\n\t\t\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\t_fnAddData( settings, data[i] );\n\t\t\t\t}\n\t\n\t\t\t\t_fnReDraw( settings, holdPosition );\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Get the JSON response from the last Ajax request that DataTables made to the\n\t * server. Note that this returns the JSON from the first table in the current\n\t * context.\n\t *\n\t * @return {object} JSON received from the server.\n\t */\n\t_api_register( 'ajax.json()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].json;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Get the data submitted in the last Ajax request\n\t */\n\t_api_register( 'ajax.params()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].oAjaxData;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Reload tables from the Ajax data source. Note that this function will\n\t * automatically re-draw the table when the remote data has been loaded.\n\t *\n\t * @param {boolean} [reset=true] Reset (default) or hold the current paging\n\t *   position. A full re-sort and re-filter is performed when this method is\n\t *   called, which is why the pagination reset is the default action.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.reload()', function ( callback, resetPaging ) {\n\t\treturn this.iterator( 'table', function (settings) {\n\t\t\t__reload( settings, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Get the current Ajax URL. Note that this returns the URL from the first\n\t * table in the current context.\n\t *\n\t * @return {string} Current Ajax source URL\n\t *//**\n\t * Set the Ajax URL. Note that this will set the URL for all tables in the\n\t * current context.\n\t *\n\t * @param {string} url URL to set.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url()', function ( url ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( url === undefined ) {\n\t\t\t// get\n\t\t\tif ( ctx.length === 0 ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tctx = ctx[0];\n\t\n\t\t\treturn ctx.ajax ?\n\t\t\t\t$.isPlainObject( ctx.ajax ) ?\n\t\t\t\t\tctx.ajax.url :\n\t\t\t\t\tctx.ajax :\n\t\t\t\tctx.sAjaxSource;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( $.isPlainObject( settings.ajax ) ) {\n\t\t\t\tsettings.ajax.url = url;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsettings.ajax = url;\n\t\t\t}\n\t\t\t// No need to consider sAjaxSource here since DataTables gives priority\n\t\t\t// to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any\n\t\t\t// value of `sAjaxSource` redundant.\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Load data from the newly set Ajax URL. Note that this method is only\n\t * available when `ajax.url()` is used to set a URL. Additionally, this method\n\t * has the same effect as calling `ajax.reload()` but is provided for\n\t * convenience when setting a new URL. Like `ajax.reload()` it will\n\t * automatically redraw the table once the remote data has been loaded.\n\t *\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {\n\t\t// Same as a reload, but makes sense to present it for easy access after a\n\t\t// url change\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\t__reload( ctx, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t\n\tvar _selector_run = function ( type, selector, selectFn, settings, opts )\n\t{\n\t\tvar\n\t\t\tout = [], res,\n\t\t\ta, i, ien, j, jen,\n\t\t\tselectorType = typeof selector;\n\t\n\t\t// Can't just check for isArray here, as an API or jQuery instance might be\n\t\t// given with their array like look\n\t\tif ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {\n\t\t\tselector = [ selector ];\n\t\t}\n\t\n\t\tfor ( i=0, ien=selector.length ; i<ien ; i++ ) {\n\t\t\t// Only split on simple strings - complex expressions will be jQuery selectors\n\t\t\ta = selector[i] && selector[i].split && ! selector[i].match(/[\\[\\(:]/) ?\n\t\t\t\tselector[i].split(',') :\n\t\t\t\t[ selector[i] ];\n\t\n\t\t\tfor ( j=0, jen=a.length ; j<jen ; j++ ) {\n\t\t\t\tres = selectFn( typeof a[j] === 'string' ? (a[j]).trim() : a[j] );\n\t\n\t\t\t\tif ( res && res.length ) {\n\t\t\t\t\tout = out.concat( res );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// selector extensions\n\t\tvar ext = _ext.selector[ type ];\n\t\tif ( ext.length ) {\n\t\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\t\tout = ext[i]( settings, opts, out );\n\t\t\t}\n\t\t}\n\t\n\t\treturn _unique( out );\n\t};\n\t\n\t\n\tvar _selector_opts = function ( opts )\n\t{\n\t\tif ( ! opts ) {\n\t\t\topts = {};\n\t\t}\n\t\n\t\t// Backwards compatibility for 1.9- which used the terminology filter rather\n\t\t// than search\n\t\tif ( opts.filter && opts.search === undefined ) {\n\t\t\topts.search = opts.filter;\n\t\t}\n\t\n\t\treturn $.extend( {\n\t\t\tsearch: 'none',\n\t\t\torder: 'current',\n\t\t\tpage: 'all'\n\t\t}, opts );\n\t};\n\t\n\t\n\tvar _selector_first = function ( inst )\n\t{\n\t\t// Reduce the API instance to the first item found\n\t\tfor ( var i=0, ien=inst.length ; i<ien ; i++ ) {\n\t\t\tif ( inst[i].length > 0 ) {\n\t\t\t\t// Assign the first element to the first item in the instance\n\t\t\t\t// and truncate the instance and context\n\t\t\t\tinst[0] = inst[i];\n\t\t\t\tinst[0].length = 1;\n\t\t\t\tinst.length = 1;\n\t\t\t\tinst.context = [ inst.context[i] ];\n\t\n\t\t\t\treturn inst;\n\t\t\t}\n\t\t}\n\t\n\t\t// Not found - return an empty instance\n\t\tinst.length = 0;\n\t\treturn inst;\n\t};\n\t\n\t\n\tvar _selector_row_indexes = function ( settings, opts )\n\t{\n\t\tvar\n\t\t\ti, ien, tmp, a=[],\n\t\t\tdisplayFiltered = settings.aiDisplay,\n\t\t\tdisplayMaster = settings.aiDisplayMaster;\n\t\n\t\tvar\n\t\t\tsearch = opts.search,  // none, applied, removed\n\t\t\torder  = opts.order,   // applied, current, index (original - compatibility with 1.9)\n\t\t\tpage   = opts.page;    // all, current\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t// In server-side processing mode, most options are irrelevant since\n\t\t\t// rows not shown don't exist and the index order is the applied order\n\t\t\t// Removed is a special case - for consistency just return an empty\n\t\t\t// array\n\t\t\treturn search === 'removed' ?\n\t\t\t\t[] :\n\t\t\t\t_range( 0, displayMaster.length );\n\t\t}\n\t\telse if ( page == 'current' ) {\n\t\t\t// Current page implies that order=current and filter=applied, since it is\n\t\t\t// fairly senseless otherwise, regardless of what order and search actually\n\t\t\t// are\n\t\t\tfor ( i=settings._iDisplayStart, ien=settings.fnDisplayEnd() ; i<ien ; i++ ) {\n\t\t\t\ta.push( displayFiltered[i] );\n\t\t\t}\n\t\t}\n\t\telse if ( order == 'current' || order == 'applied' ) {\n\t\t\tif ( search == 'none') {\n\t\t\t\ta = displayMaster.slice();\n\t\t\t}\n\t\t\telse if ( search == 'applied' ) {\n\t\t\t\ta = displayFiltered.slice();\n\t\t\t}\n\t\t\telse if ( search == 'removed' ) {\n\t\t\t\t// O(n+m) solution by creating a hash map\n\t\t\t\tvar displayFilteredMap = {};\n\t\n\t\t\t\tfor ( var i=0, ien=displayFiltered.length ; i<ien ; i++ ) {\n\t\t\t\t\tdisplayFilteredMap[displayFiltered[i]] = null;\n\t\t\t\t}\n\t\n\t\t\t\ta = $.map( displayMaster, function (el) {\n\t\t\t\t\treturn ! displayFilteredMap.hasOwnProperty(el) ?\n\t\t\t\t\t\tel :\n\t\t\t\t\t\tnull;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\telse if ( order == 'index' || order == 'original' ) {\n\t\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\t\tif ( search == 'none' ) {\n\t\t\t\t\ta.push( i );\n\t\t\t\t}\n\t\t\t\telse { // applied | removed\n\t\t\t\t\ttmp = $.inArray( i, displayFiltered );\n\t\n\t\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t\t(tmp >= 0   && search == 'applied') )\n\t\t\t\t\t{\n\t\t\t\t\t\ta.push( i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn a;\n\t};\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Rows\n\t *\n\t * {}          - no selector - use all available rows\n\t * {integer}   - row aoData index\n\t * {node}      - TR node\n\t * {string}    - jQuery selector to apply to the TR elements\n\t * {array}     - jQuery array of nodes, or simply an array of TR nodes\n\t *\n\t */\n\tvar __row_selector = function ( settings, selector, opts )\n\t{\n\t\tvar rows;\n\t\tvar run = function ( sel ) {\n\t\t\tvar selInt = _intVal( sel );\n\t\t\tvar i, ien;\n\t\t\tvar aoData = settings.aoData;\n\t\n\t\t\t// Short cut - selector is a number and no options provided (default is\n\t\t\t// all records, so no need to check if the index is in there, since it\n\t\t\t// must be - dev error if the index doesn't exist).\n\t\t\tif ( selInt !== null && ! opts ) {\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\n\t\t\tif ( ! rows ) {\n\t\t\t\trows = _selector_row_indexes( settings, opts );\n\t\t\t}\n\t\n\t\t\tif ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {\n\t\t\t\t// Selector - integer\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\t\telse if ( sel === null || sel === undefined || sel === '' ) {\n\t\t\t\t// Selector - none\n\t\t\t\treturn rows;\n\t\t\t}\n\t\n\t\t\t// Selector - function\n\t\t\tif ( typeof sel === 'function' ) {\n\t\t\t\treturn $.map( rows, function (idx) {\n\t\t\t\t\tvar row = aoData[ idx ];\n\t\t\t\t\treturn sel( idx, row._aData, row.nTr ) ? idx : null;\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t// Selector - node\n\t\t\tif ( sel.nodeName ) {\n\t\t\t\tvar rowIdx = sel._DT_RowIndex;  // Property added by DT for fast lookup\n\t\t\t\tvar cellIdx = sel._DT_CellIndex;\n\t\n\t\t\t\tif ( rowIdx !== undefined ) {\n\t\t\t\t\t// Make sure that the row is actually still present in the table\n\t\t\t\t\treturn aoData[ rowIdx ] && aoData[ rowIdx ].nTr === sel ?\n\t\t\t\t\t\t[ rowIdx ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t\telse if ( cellIdx ) {\n\t\t\t\t\treturn aoData[ cellIdx.row ] && aoData[ cellIdx.row ].nTr === sel.parentNode ?\n\t\t\t\t\t\t[ cellIdx.row ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar host = $(sel).closest('*[data-dt-row]');\n\t\t\t\t\treturn host.length ?\n\t\t\t\t\t\t[ host.data('dt-row') ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// ID selector. Want to always be able to select rows by id, regardless\n\t\t\t// of if the tr element has been created or not, so can't rely upon\n\t\t\t// jQuery here - hence a custom implementation. This does not match\n\t\t\t// Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,\n\t\t\t// but to select it using a CSS selector engine (like Sizzle or\n\t\t\t// querySelect) it would need to need to be escaped for some characters.\n\t\t\t// DataTables simplifies this for row selectors since you can select\n\t\t\t// only a row. A # indicates an id any anything that follows is the id -\n\t\t\t// unescaped.\n\t\t\tif ( typeof sel === 'string' && sel.charAt(0) === '#' ) {\n\t\t\t\t// get row index from id\n\t\t\t\tvar rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];\n\t\t\t\tif ( rowObj !== undefined ) {\n\t\t\t\t\treturn [ rowObj.idx ];\n\t\t\t\t}\n\t\n\t\t\t\t// need to fall through to jQuery in case there is DOM id that\n\t\t\t\t// matches\n\t\t\t}\n\t\t\t\n\t\t\t// Get nodes in the order from the `rows` array with null values removed\n\t\t\tvar nodes = _removeEmpty(\n\t\t\t\t_pluck_order( settings.aoData, rows, 'nTr' )\n\t\t\t);\n\t\n\t\t\t// Selector - jQuery selector string, array of nodes or jQuery object/\n\t\t\t// As jQuery's .filter() allows jQuery objects to be passed in filter,\n\t\t\t// it also allows arrays, so this will cope with all three options\n\t\t\treturn $(nodes)\n\t\t\t\t.filter( sel )\n\t\t\t\t.map( function () {\n\t\t\t\t\treturn this._DT_RowIndex;\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\t};\n\t\n\t\treturn _selector_run( 'row', selector, run, settings, opts );\n\t};\n\t\n\t\n\t_api_register( 'rows()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __row_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in __row_selector?\n\t\tinst.selector.rows = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_register( 'rows().nodes()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn settings.aoData[ row ].nTr || undefined;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'rows().data()', function () {\n\t\treturn this.iterator( true, 'rows', function ( settings, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, '_aData' );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\tvar r = settings.aoData[ row ];\n\t\t\treturn type === 'search' ? r._aFilterData : r._aSortData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\t_fnInvalidate( settings, row, src );\n\t\t} );\n\t} );\n\t\n\t_api_registerPlural( 'rows().indexes()', 'row().index()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn row;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {\n\t\tvar a = [];\n\t\tvar context = this.context;\n\t\n\t\t// `iterator` will drop undefined values, but in this case we want them\n\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\tfor ( var j=0, jen=this[i].length ; j<jen ; j++ ) {\n\t\t\t\tvar id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );\n\t\t\t\ta.push( (hash === true ? '#' : '' )+ id );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new _Api( context, a );\n\t} );\n\t\n\t_api_registerPlural( 'rows().remove()', 'row().remove()', function () {\n\t\tvar that = this;\n\t\n\t\tthis.iterator( 'row', function ( settings, row, thatIdx ) {\n\t\t\tvar data = settings.aoData;\n\t\t\tvar rowData = data[ row ];\n\t\t\tvar i, ien, j, jen;\n\t\t\tvar loopRow, loopCells;\n\t\n\t\t\tdata.splice( row, 1 );\n\t\n\t\t\t// Update the cached indexes\n\t\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\tloopRow = data[i];\n\t\t\t\tloopCells = loopRow.anCells;\n\t\n\t\t\t\t// Rows\n\t\t\t\tif ( loopRow.nTr !== null ) {\n\t\t\t\t\tloopRow.nTr._DT_RowIndex = i;\n\t\t\t\t}\n\t\n\t\t\t\t// Cells\n\t\t\t\tif ( loopCells !== null ) {\n\t\t\t\t\tfor ( j=0, jen=loopCells.length ; j<jen ; j++ ) {\n\t\t\t\t\t\tloopCells[j]._DT_CellIndex.row = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Delete from the display arrays\n\t\t\t_fnDeleteIndex( settings.aiDisplayMaster, row );\n\t\t\t_fnDeleteIndex( settings.aiDisplay, row );\n\t\t\t_fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes\n\t\n\t\t\t// For server-side processing tables - subtract the deleted row from the count\n\t\t\tif ( settings._iRecordsDisplay > 0 ) {\n\t\t\t\tsettings._iRecordsDisplay--;\n\t\t\t}\n\t\n\t\t\t// Check for an 'overflow' they case for displaying the table\n\t\t\t_fnLengthOverflow( settings );\n\t\n\t\t\t// Remove the row's ID reference if there is one\n\t\t\tvar id = settings.rowIdFn( rowData._aData );\n\t\t\tif ( id !== undefined ) {\n\t\t\t\tdelete settings.aIds[ id ];\n\t\t\t}\n\t\t} );\n\t\n\t\tthis.iterator( 'table', function ( settings ) {\n\t\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\t\tsettings.aoData[i].idx = i;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( 'rows.add()', function ( rows ) {\n\t\tvar newRows = this.iterator( 'table', function ( settings ) {\n\t\t\t\tvar row, i, ien;\n\t\t\t\tvar out = [];\n\t\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\t\t\tout.push( _fnAddTr( settings, row )[0] );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tout.push( _fnAddData( settings, row ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn out;\n\t\t\t}, 1 );\n\t\n\t\t// Return an Api.rows() extended instance, so rows().nodes() etc can be used\n\t\tvar modRows = this.rows( -1 );\n\t\tmodRows.pop();\n\t\t$.merge( modRows, newRows );\n\t\n\t\treturn modRows;\n\t} );\n\t\n\t\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( 'row()', function ( selector, opts ) {\n\t\treturn _selector_first( this.rows( selector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'row().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._aData :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\tvar row = ctx[0].aoData[ this[0] ];\n\t\trow._aData = data;\n\t\n\t\t// If the DOM has an id, and the data source is an array\n\t\tif ( Array.isArray( data ) && row.nTr && row.nTr.id ) {\n\t\t\t_fnSetObjectDataFn( ctx[0].rowId )( data, row.nTr.id );\n\t\t}\n\t\n\t\t// Automatically invalidate\n\t\t_fnInvalidate( ctx[0], this[0], 'data' );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( 'row().node()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\treturn ctx.length && this.length ?\n\t\t\tctx[0].aoData[ this[0] ].nTr || null :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'row.add()', function ( row ) {\n\t\t// Allow a jQuery object to be passed in - only a single row is added from\n\t\t// it though - the first element in the set\n\t\tif ( row instanceof $ && row.length ) {\n\t\t\trow = row[0];\n\t\t}\n\t\n\t\tvar rows = this.iterator( 'table', function ( settings ) {\n\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\treturn _fnAddTr( settings, row )[0];\n\t\t\t}\n\t\t\treturn _fnAddData( settings, row );\n\t\t} );\n\t\n\t\t// Return an Api.rows() extended instance, with the newly added row selected\n\t\treturn this.row( rows[0] );\n\t} );\n\t\n\t\n\t$(document).on('plugin-init.dt', function (e, context) {\n\t\tvar api = new _Api( context );\n\t\tvar namespace = 'on-plugin-init';\n\t\tvar stateSaveParamsEvent = 'stateSaveParams.' + namespace;\n\t\tvar destroyEvent = 'destroy. ' + namespace;\n\t\n\t\tapi.on( stateSaveParamsEvent, function ( e, settings, d ) {\n\t\t\t// This could be more compact with the API, but it is a lot faster as a simple\n\t\t\t// internal loop\n\t\t\tvar idFn = settings.rowIdFn;\n\t\t\tvar data = settings.aoData;\n\t\t\tvar ids = [];\n\t\n\t\t\tfor (var i=0 ; i<data.length ; i++) {\n\t\t\t\tif (data[i]._detailsShow) {\n\t\t\t\t\tids.push( '#' + idFn(data[i]._aData) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\td.childRows = ids;\n\t\t});\n\t\n\t\tapi.on( destroyEvent, function () {\n\t\t\tapi.off(stateSaveParamsEvent + ' ' + destroyEvent);\n\t\t});\n\t\n\t\tvar loaded = api.state.loaded();\n\t\n\t\tif ( loaded && loaded.childRows ) {\n\t\t\tapi\n\t\t\t\t.rows( $.map(loaded.childRows, function (id){\n\t\t\t\t\treturn id.replace(/:/g, '\\\\:')\n\t\t\t\t}) )\n\t\t\t\t.every( function () {\n\t\t\t\t\t_fnCallbackFire( context, null, 'requestChild', [ this ] )\n\t\t\t\t});\n\t\t}\n\t});\n\t\n\tvar __details_add = function ( ctx, row, data, klass )\n\t{\n\t\t// Convert to array of TR elements\n\t\tvar rows = [];\n\t\tvar addRow = function ( r, k ) {\n\t\t\t// Recursion to allow for arrays of jQuery objects\n\t\t\tif ( Array.isArray( r ) || r instanceof $ ) {\n\t\t\t\tfor ( var i=0, ien=r.length ; i<ien ; i++ ) {\n\t\t\t\t\taddRow( r[i], k );\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If we get a TR element, then just add it directly - up to the dev\n\t\t\t// to add the correct number of columns etc\n\t\t\tif ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {\n\t\t\t\trows.push( r );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Otherwise create a row with a wrapper\n\t\t\t\tvar created = $('<tr><td></td></tr>').addClass( k );\n\t\t\t\t$('td', created)\n\t\t\t\t\t.addClass( k )\n\t\t\t\t\t.html( r )\n\t\t\t\t\t[0].colSpan = _fnVisbleColumns( ctx );\n\t\n\t\t\t\trows.push( created[0] );\n\t\t\t}\n\t\t};\n\t\n\t\taddRow( data, klass );\n\t\n\t\tif ( row._details ) {\n\t\t\trow._details.detach();\n\t\t}\n\t\n\t\trow._details = $(rows);\n\t\n\t\t// If the children were already shown, that state should be retained\n\t\tif ( row._detailsShow ) {\n\t\t\trow._details.insertAfter( row.nTr );\n\t\t}\n\t};\n\t\n\t\n\t// Make state saving of child row details async to allow them to be batch processed\n\tvar __details_state = DataTable.util.throttle(\n\t\tfunction (ctx) {\n\t\t\t_fnSaveState( ctx[0] )\n\t\t},\n\t\t500\n\t);\n\t\n\t\n\tvar __details_remove = function ( api, idx )\n\t{\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length ) {\n\t\t\tvar row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];\n\t\n\t\t\tif ( row && row._details ) {\n\t\t\t\trow._details.remove();\n\t\n\t\t\t\trow._detailsShow = undefined;\n\t\t\t\trow._details = undefined;\n\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t\t__details_state( ctx );\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_display = function ( api, show ) {\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length && api.length ) {\n\t\t\tvar row = ctx[0].aoData[ api[0] ];\n\t\n\t\t\tif ( row._details ) {\n\t\t\t\trow._detailsShow = show;\n\t\n\t\t\t\tif ( show ) {\n\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t\t$( row.nTr ).addClass( 'dt-hasChild' );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow._details.detach();\n\t\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t\t}\n\t\n\t\t\t\t_fnCallbackFire( ctx[0], null, 'childRow', [ show, api.row( api[0] ) ] )\n\t\n\t\t\t\t__details_events( ctx[0] );\n\t\t\t\t__details_state( ctx );\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_events = function ( settings )\n\t{\n\t\tvar api = new _Api( settings );\n\t\tvar namespace = '.dt.DT_details';\n\t\tvar drawEvent = 'draw'+namespace;\n\t\tvar colvisEvent = 'column-sizing'+namespace;\n\t\tvar destroyEvent = 'destroy'+namespace;\n\t\tvar data = settings.aoData;\n\t\n\t\tapi.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );\n\t\n\t\tif ( _pluck( data, '_details' ).length > 0 ) {\n\t\t\t// On each draw, insert the required elements into the document\n\t\t\tapi.on( drawEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tapi.rows( {page:'current'} ).eq(0).each( function (idx) {\n\t\t\t\t\t// Internal data grab\n\t\t\t\t\tvar row = data[ idx ];\n\t\n\t\t\t\t\tif ( row._detailsShow ) {\n\t\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\n\t\t\t// Column visibility change - update the colspan\n\t\t\tapi.on( colvisEvent, function ( e, ctx, idx, vis ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t// Update the colspan for the details rows (note, only if it already has\n\t\t\t\t// a colspan)\n\t\t\t\tvar row, visible = _fnVisbleColumns( ctx );\n\t\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = data[i];\n\t\n\t\t\t\t\tif ( row._details ) {\n\t\t\t\t\t\trow._details.each(function () {\n\t\t\t\t\t\t\tvar el = $(this).children('td');\n\t\n\t\t\t\t\t\t\tif (el.length == 1) {\n\t\t\t\t\t\t\t\tel.attr('colspan', visible);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\t// Table destroyed - nuke any child rows\n\t\t\tapi.on( destroyEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( data[i]._details ) {\n\t\t\t\t\t\t__details_remove( api, i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t// Strings for the method names to help minification\n\tvar _emp = '';\n\tvar _child_obj = _emp+'row().child';\n\tvar _child_mth = _child_obj+'()';\n\t\n\t// data can be:\n\t//  tr\n\t//  string\n\t//  jQuery or array of any of the above\n\t_api_register( _child_mth, function ( data, klass ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._details :\n\t\t\t\tundefined;\n\t\t}\n\t\telse if ( data === true ) {\n\t\t\t// show\n\t\t\tthis.child.show();\n\t\t}\n\t\telse if ( data === false ) {\n\t\t\t// remove\n\t\t\t__details_remove( this );\n\t\t}\n\t\telse if ( ctx.length && this.length ) {\n\t\t\t// set\n\t\t\t__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );\n\t\t}\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.show()',\n\t\t_child_mth+'.show()' // only when `child()` was called with parameters (without\n\t], function ( show ) {   // it returns an object and this method is not executed)\n\t\t__details_display( this, true );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.hide()',\n\t\t_child_mth+'.hide()' // only when `child()` was called with parameters (without\n\t], function () {         // it returns an object and this method is not executed)\n\t\t__details_display( this, false );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.remove()',\n\t\t_child_mth+'.remove()' // only when `child()` was called with parameters (without\n\t], function () {           // it returns an object and this method is not executed)\n\t\t__details_remove( this );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( _child_obj+'.isShown()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length && this.length ) {\n\t\t\t// _detailsShown as false or undefined will fall through to return false\n\t\t\treturn ctx[0].aoData[ this[0] ]._detailsShow || false;\n\t\t}\n\t\treturn false;\n\t} );\n\t\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Columns\n\t *\n\t * {integer}           - column index (>=0 count from left, <0 count from right)\n\t * \"{integer}:visIdx\"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)\n\t * \"{integer}:visible\" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)\n\t * \"{string}:name\"     - column name\n\t * \"{string}\"          - jQuery selector on column header nodes\n\t *\n\t */\n\t\n\t// can be an array of these items, comma separated list, or an array of comma\n\t// separated lists\n\t\n\tvar __re_column_selector = /^([^:]+):(name|visIdx|visible)$/;\n\t\n\t\n\t// r1 and r2 are redundant - but it means that the parameters match for the\n\t// iterator callback in columns().data()\n\tvar __columnData = function ( settings, column, r1, r2, rows ) {\n\t\tvar a = [];\n\t\tfor ( var row=0, ien=rows.length ; row<ien ; row++ ) {\n\t\t\ta.push( _fnGetCellData( settings, rows[row], column ) );\n\t\t}\n\t\treturn a;\n\t};\n\t\n\t\n\tvar __column_selector = function ( settings, selector, opts )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tnames = _pluck( columns, 'sName' ),\n\t\t\tnodes = _pluck( columns, 'nTh' );\n\t\n\t\tvar run = function ( s ) {\n\t\t\tvar selInt = _intVal( s );\n\t\n\t\t\t// Selector - all\n\t\t\tif ( s === '' ) {\n\t\t\t\treturn _range( columns.length );\n\t\t\t}\n\t\n\t\t\t// Selector - index\n\t\t\tif ( selInt !== null ) {\n\t\t\t\treturn [ selInt >= 0 ?\n\t\t\t\t\tselInt : // Count from left\n\t\t\t\t\tcolumns.length + selInt // Count from right (+ because its a negative value)\n\t\t\t\t];\n\t\t\t}\n\t\n\t\t\t// Selector = function\n\t\t\tif ( typeof s === 'function' ) {\n\t\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\n\t\t\t\treturn $.map( columns, function (col, idx) {\n\t\t\t\t\treturn s(\n\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t__columnData( settings, idx, 0, 0, rows ),\n\t\t\t\t\t\t\tnodes[ idx ]\n\t\t\t\t\t\t) ? idx : null;\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t// jQuery or string selector\n\t\t\tvar match = typeof s === 'string' ?\n\t\t\t\ts.match( __re_column_selector ) :\n\t\t\t\t'';\n\t\n\t\t\tif ( match ) {\n\t\t\t\tswitch( match[2] ) {\n\t\t\t\t\tcase 'visIdx':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\t\tvar idx = parseInt( match[1], 10 );\n\t\t\t\t\t\t// Visible index given, convert to column index\n\t\t\t\t\t\tif ( idx < 0 ) {\n\t\t\t\t\t\t\t// Counting from the right\n\t\t\t\t\t\t\tvar visColumns = $.map( columns, function (col,i) {\n\t\t\t\t\t\t\t\treturn col.bVisible ? i : null;\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn [ visColumns[ visColumns.length + idx ] ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Counting from the left\n\t\t\t\t\t\treturn [ _fnVisibleToColumnIndex( settings, idx ) ];\n\t\n\t\t\t\t\tcase 'name':\n\t\t\t\t\t\t// match by name. `names` is column index complete and in order\n\t\t\t\t\t\treturn $.map( names, function (name, i) {\n\t\t\t\t\t\t\treturn name === match[1] ? i : null;\n\t\t\t\t\t\t} );\n\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Cell in the table body\n\t\t\tif ( s.nodeName && s._DT_CellIndex ) {\n\t\t\t\treturn [ s._DT_CellIndex.column ];\n\t\t\t}\n\t\n\t\t\t// jQuery selector on the TH elements for the columns\n\t\t\tvar jqResult = $( nodes )\n\t\t\t\t.filter( s )\n\t\t\t\t.map( function () {\n\t\t\t\t\treturn $.inArray( this, nodes ); // `nodes` is column index complete and in order\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\n\t\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\t\treturn jqResult;\n\t\t\t}\n\t\n\t\t\t// Otherwise a node which might have a `dt-column` data attribute, or be\n\t\t\t// a child or such an element\n\t\t\tvar host = $(s).closest('*[data-dt-column]');\n\t\t\treturn host.length ?\n\t\t\t\t[ host.data('dt-column') ] :\n\t\t\t\t[];\n\t\t};\n\t\n\t\treturn _selector_run( 'column', selector, run, settings, opts );\n\t};\n\t\n\t\n\tvar __setColumnVis = function ( settings, column, vis ) {\n\t\tvar\n\t\t\tcols = settings.aoColumns,\n\t\t\tcol  = cols[ column ],\n\t\t\tdata = settings.aoData,\n\t\t\trow, cells, i, ien, tr;\n\t\n\t\t// Get\n\t\tif ( vis === undefined ) {\n\t\t\treturn col.bVisible;\n\t\t}\n\t\n\t\t// Set\n\t\t// No change\n\t\tif ( col.bVisible === vis ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( vis ) {\n\t\t\t// Insert column\n\t\t\t// Need to decide if we should use appendChild or insertBefore\n\t\t\tvar insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );\n\t\n\t\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\ttr = data[i].nTr;\n\t\t\t\tcells = data[i].anCells;\n\t\n\t\t\t\tif ( tr ) {\n\t\t\t\t\t// insertBefore can act like appendChild if 2nd arg is null\n\t\t\t\t\ttr.insertBefore( cells[ column ], cells[ insertBefore ] || null );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Remove column\n\t\t\t$( _pluck( settings.aoData, 'anCells', column ) ).detach();\n\t\t}\n\t\n\t\t// Common actions\n\t\tcol.bVisible = vis;\n\t};\n\t\n\t\n\t_api_register( 'columns()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __column_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in _row_selector?\n\t\tinst.selector.cols = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTh;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTf;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().data()', 'column().data()', function () {\n\t\treturn this.iterator( 'column-rows', __columnData, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].mData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows,\n\t\t\t\ttype === 'search' ? '_aFilterData' : '_aSortData', column\n\t\t\t);\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, 'anCells', column ) ;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {\n\t\tvar that = this;\n\t\tvar ret = this.iterator( 'column', function ( settings, column ) {\n\t\t\tif ( vis === undefined ) {\n\t\t\t\treturn settings.aoColumns[ column ].bVisible;\n\t\t\t} // else\n\t\t\t__setColumnVis( settings, column, vis );\n\t\t} );\n\t\n\t\t// Group the column visibility changes\n\t\tif ( vis !== undefined ) {\n\t\t\tthis.iterator( 'table', function ( settings ) {\n\t\t\t\t// Redraw the header after changes\n\t\t\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\t\n\t\t\t\t// Update colspan for no records display. Child rows and extensions will use their own\n\t\t\t\t// listeners to do this - only need to update the empty table item here\n\t\t\t\tif ( ! settings.aiDisplay.length ) {\n\t\t\t\t\t$(settings.nTBody).find('td[colspan]').attr('colspan', _fnVisbleColumns(settings));\n\t\t\t\t}\n\t\t\n\t\t\t\t_fnSaveState( settings );\n\t\n\t\t\t\t// Second loop once the first is done for events\n\t\t\t\tthat.iterator( 'column', function ( settings, column ) {\n\t\t\t\t\t_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, calc] );\n\t\t\t\t} );\n\t\n\t\t\t\tif ( calc === undefined || calc ) {\n\t\t\t\t\tthat.columns.adjust();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\n\t\treturn ret;\n\t} );\n\t\n\t_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn type === 'visible' ?\n\t\t\t\t_fnColumnIndexToVisible( settings, column ) :\n\t\t\t\tcolumn;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'columns.adjust()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'column.index()', function ( type, idx ) {\n\t\tif ( this.context.length !== 0 ) {\n\t\t\tvar ctx = this.context[0];\n\t\n\t\t\tif ( type === 'fromVisible' || type === 'toData' ) {\n\t\t\t\treturn _fnVisibleToColumnIndex( ctx, idx );\n\t\t\t}\n\t\t\telse if ( type === 'fromData' || type === 'toVisible' ) {\n\t\t\t\treturn _fnColumnIndexToVisible( ctx, idx );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t_api_register( 'column()', function ( selector, opts ) {\n\t\treturn _selector_first( this.columns( selector, opts ) );\n\t} );\n\t\n\tvar __cell_selector = function ( settings, selector, opts )\n\t{\n\t\tvar data = settings.aoData;\n\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\tvar cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );\n\t\tvar allCells = $(_flatten( [], cells ));\n\t\tvar row;\n\t\tvar columns = settings.aoColumns.length;\n\t\tvar a, i, ien, j, o, host;\n\t\n\t\tvar run = function ( s ) {\n\t\t\tvar fnSelector = typeof s === 'function';\n\t\n\t\t\tif ( s === null || s === undefined || fnSelector ) {\n\t\t\t\t// All cells and function selectors\n\t\t\t\ta = [];\n\t\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tfor ( j=0 ; j<columns ; j++ ) {\n\t\t\t\t\t\to = {\n\t\t\t\t\t\t\trow: row,\n\t\t\t\t\t\t\tcolumn: j\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tif ( fnSelector ) {\n\t\t\t\t\t\t\t// Selector - function\n\t\t\t\t\t\t\thost = data[ row ];\n\t\n\t\t\t\t\t\t\tif ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {\n\t\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Selector - all\n\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn a;\n\t\t\t}\n\t\t\t\n\t\t\t// Selector - index\n\t\t\tif ( $.isPlainObject( s ) ) {\n\t\t\t\t// Valid cell index and its in the array of selectable rows\n\t\t\t\treturn s.column !== undefined && s.row !== undefined && $.inArray( s.row, rows ) !== -1 ?\n\t\t\t\t\t[s] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\n\t\t\t// Selector - jQuery filtered cells\n\t\t\tvar jqResult = allCells\n\t\t\t\t.filter( s )\n\t\t\t\t.map( function (i, el) {\n\t\t\t\t\treturn { // use a new object, in case someone changes the values\n\t\t\t\t\t\trow:    el._DT_CellIndex.row,\n\t\t\t\t\t\tcolumn: el._DT_CellIndex.column\n\t \t\t\t\t};\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\n\t\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\t\treturn jqResult;\n\t\t\t}\n\t\n\t\t\t// Otherwise the selector is a node, and there is one last option - the\n\t\t\t// element might be a child of an element which has dt-row and dt-column\n\t\t\t// data attributes\n\t\t\thost = $(s).closest('*[data-dt-row]');\n\t\t\treturn host.length ?\n\t\t\t\t[ {\n\t\t\t\t\trow: host.data('dt-row'),\n\t\t\t\t\tcolumn: host.data('dt-column')\n\t\t\t\t} ] :\n\t\t\t\t[];\n\t\t};\n\t\n\t\treturn _selector_run( 'cell', selector, run, settings, opts );\n\t};\n\t\n\t\n\t\n\t\n\t_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {\n\t\t// Argument shifting\n\t\tif ( $.isPlainObject( rowSelector ) ) {\n\t\t\t// Indexes\n\t\t\tif ( rowSelector.row === undefined ) {\n\t\t\t\t// Selector options in first parameter\n\t\t\t\topts = rowSelector;\n\t\t\t\trowSelector = null;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Cell index objects in first parameter\n\t\t\t\topts = columnSelector;\n\t\t\t\tcolumnSelector = null;\n\t\t\t}\n\t\t}\n\t\tif ( $.isPlainObject( columnSelector ) ) {\n\t\t\topts = columnSelector;\n\t\t\tcolumnSelector = null;\n\t\t}\n\t\n\t\t// Cell selector\n\t\tif ( columnSelector === null || columnSelector === undefined ) {\n\t\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t\treturn __cell_selector( settings, rowSelector, _selector_opts( opts ) );\n\t\t\t} );\n\t\t}\n\t\n\t\t// The default built in options need to apply to row and columns\n\t\tvar internalOpts = opts ? {\n\t\t\tpage: opts.page,\n\t\t\torder: opts.order,\n\t\t\tsearch: opts.search\n\t\t} : {};\n\t\n\t\t// Row + column selector\n\t\tvar columns = this.columns( columnSelector, internalOpts );\n\t\tvar rows = this.rows( rowSelector, internalOpts );\n\t\tvar i, ien, j, jen;\n\t\n\t\tvar cellsNoOpts = this.iterator( 'table', function ( settings, idx ) {\n\t\t\tvar a = [];\n\t\n\t\t\tfor ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {\n\t\t\t\tfor ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {\n\t\t\t\t\ta.push( {\n\t\t\t\t\t\trow:    rows[idx][i],\n\t\t\t\t\t\tcolumn: columns[idx][j]\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn a;\n\t\t}, 1 );\n\t\n\t\t// There is currently only one extension which uses a cell selector extension\n\t\t// It is a _major_ performance drag to run this if it isn't needed, so this is\n\t\t// an extension specific check at the moment\n\t\tvar cells = opts && opts.selected ?\n\t\t\tthis.cells( cellsNoOpts, opts ) :\n\t\t\tcellsNoOpts;\n\t\n\t\t$.extend( cells.selector, {\n\t\t\tcols: columnSelector,\n\t\t\trows: rowSelector,\n\t\t\topts: opts\n\t\t} );\n\t\n\t\treturn cells;\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\tvar data = settings.aoData[ row ];\n\t\n\t\t\treturn data && data.anCells ?\n\t\t\t\tdata.anCells[ column ] :\n\t\t\t\tundefined;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_register( 'cells().data()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {\n\t\ttype = type === 'search' ? '_aFilterData' : '_aSortData';\n\t\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn settings.aoData[ row ][ type ][ column ];\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column, type );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn {\n\t\t\t\trow: row,\n\t\t\t\tcolumn: column,\n\t\t\t\tcolumnVisible: _fnColumnIndexToVisible( settings, column )\n\t\t\t};\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\t_fnInvalidate( settings, row, src, column );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {\n\t\treturn _selector_first( this.cells( rowSelector, columnSelector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'cell().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\tvar cell = this[0];\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && cell.length ?\n\t\t\t\t_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\t_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );\n\t\t_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get current ordering (sorting) that has been applied to the table.\n\t *\n\t * @returns {array} 2D array containing the sorting information for the first\n\t *   table in the current context. Each element in the parent array represents\n\t *   a column being sorted upon (i.e. multi-sorting with two columns would have\n\t *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is\n\t *   the column index that the sorting condition applies to, the second is the\n\t *   direction of the sort (`desc` or `asc`) and, optionally, the third is the\n\t *   index of the sorting order from the `column.sorting` initialisation array.\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {integer} order Column index to sort upon.\n\t * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 1D array of sorting information to be applied.\n\t * @param {array} [...] Optional additional sorting conditions\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 2D array of sorting information to be applied.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order()', function ( order, dir ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( order === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].aaSorting :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\tif ( typeof order === 'number' ) {\n\t\t\t// Simple column / direction passed in\n\t\t\torder = [ [ order, dir ] ];\n\t\t}\n\t\telse if ( order.length && ! Array.isArray( order[0] ) ) {\n\t\t\t// Arguments passed in (list of 1D arrays)\n\t\t\torder = Array.prototype.slice.call( arguments );\n\t\t}\n\t\t// otherwise a 2D array was passed in\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tsettings.aaSorting = order.slice();\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Attach a sort listener to an element for a given column\n\t *\n\t * @param {node|jQuery|string} node Identifier for the element(s) to attach the\n\t *   listener to. This can take the form of a single DOM node, a jQuery\n\t *   collection of nodes or a jQuery selector which will identify the node(s).\n\t * @param {integer} column the column that a click on this node will sort on\n\t * @param {function} [callback] callback function when sort is run\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order.listener()', function ( node, column, callback ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSortAttachListener( settings, node, column, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'order.fixed()', function ( set ) {\n\t\tif ( ! set ) {\n\t\t\tvar ctx = this.context;\n\t\t\tvar fixed = ctx.length ?\n\t\t\t\tctx[0].aaSortingFixed :\n\t\t\t\tundefined;\n\t\n\t\t\treturn Array.isArray( fixed ) ?\n\t\t\t\t{ pre: fixed } :\n\t\t\t\tfixed;\n\t\t}\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tsettings.aaSortingFixed = $.extend( true, {}, set );\n\t\t} );\n\t} );\n\t\n\t\n\t// Order by the selected column(s)\n\t_api_register( [\n\t\t'columns().order()',\n\t\t'column().order()'\n\t], function ( dir ) {\n\t\tvar that = this;\n\t\n\t\treturn this.iterator( 'table', function ( settings, i ) {\n\t\t\tvar sort = [];\n\t\n\t\t\t$.each( that[i], function (j, col) {\n\t\t\t\tsort.push( [ col, dir ] );\n\t\t\t} );\n\t\n\t\t\tsettings.aaSorting = sort;\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t_api_register( 'search()', function ( input, regex, smart, caseInsen ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( input === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].oPreviousSearch.sSearch :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t_fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {\n\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t} ), 1 );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_registerPlural(\n\t\t'columns().search()',\n\t\t'column().search()',\n\t\tfunction ( input, regex, smart, caseInsen ) {\n\t\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\t\tvar preSearch = settings.aoPreSearchCols;\n\t\n\t\t\t\tif ( input === undefined ) {\n\t\t\t\t\t// get\n\t\t\t\t\treturn preSearch[ column ].sSearch;\n\t\t\t\t}\n\t\n\t\t\t\t// set\n\t\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t$.extend( preSearch[ column ], {\n\t\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t\t} );\n\t\n\t\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch, 1 );\n\t\t\t} );\n\t\t}\n\t);\n\t\n\t/*\n\t * State API methods\n\t */\n\t\n\t_api_register( 'state()', function () {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oSavedState :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'state.clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t// Save an empty object\n\t\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, {} );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'state.loaded()', function () {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oLoadedState :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'state.save()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSaveState( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Set the jQuery or window object to be used by DataTables\n\t *\n\t * @param {*} module Library / container object\n\t * @param {string} [type] Library or container type `lib`, `win` or `datetime`.\n\t *   If not provided, automatic detection is attempted.\n\t */\n\tDataTable.use = function (module, type) {\n\t\tif (type === 'lib' || module.fn) {\n\t\t\t$ = module;\n\t\t}\n\t\telse if (type == 'win' || module.document) {\n\t\t\twindow = module;\n\t\t\tdocument = module.document;\n\t\t}\n\t\telse if (type === 'datetime' || module.type === 'DateTime') {\n\t\t\tDataTable.DateTime = module;\n\t\t}\n\t}\n\t\n\t/**\n\t * CommonJS factory function pass through. This will check if the arguments\n\t * given are a window object or a jQuery object. If so they are set\n\t * accordingly.\n\t * @param {*} root Window\n\t * @param {*} jq jQUery\n\t * @returns {boolean} Indicator\n\t */\n\tDataTable.factory = function (root, jq) {\n\t\tvar is = false;\n\t\n\t\t// Test if the first parameter is a window object\n\t\tif (root && root.document) {\n\t\t\twindow = root;\n\t\t\tdocument = root.document;\n\t\t}\n\t\n\t\t// Test if the second parameter is a jQuery object\n\t\tif (jq && jq.fn && jq.fn.jquery) {\n\t\t\t$ = jq;\n\t\t\tis = true;\n\t\t}\n\t\n\t\treturn is;\n\t}\n\t\n\t/**\n\t * Provide a common method for plug-ins to check the version of DataTables being\n\t * used, in order to ensure compatibility.\n\t *\n\t *  @param {string} version Version string to check for, in the format \"X.Y.Z\".\n\t *    Note that the formats \"X\" and \"X.Y\" are also acceptable.\n\t *  @returns {boolean} true if this version of DataTables is greater or equal to\n\t *    the required version, or false if this version of DataTales is not\n\t *    suitable\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );\n\t */\n\tDataTable.versionCheck = DataTable.fnVersionCheck = function( version )\n\t{\n\t\tvar aThis = DataTable.version.split('.');\n\t\tvar aThat = version.split('.');\n\t\tvar iThis, iThat;\n\t\n\t\tfor ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {\n\t\t\tiThis = parseInt( aThis[i], 10 ) || 0;\n\t\t\tiThat = parseInt( aThat[i], 10 ) || 0;\n\t\n\t\t\t// Parts are the same, keep comparing\n\t\t\tif (iThis === iThat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// Parts are different, return immediately\n\t\t\treturn iThis > iThat;\n\t\t}\n\t\n\t\treturn true;\n\t};\n\t\n\t\n\t/**\n\t * Check if a `<table>` node is a DataTable table already or not.\n\t *\n\t *  @param {node|jquery|string} table Table node, jQuery object or jQuery\n\t *      selector for the table to test. Note that if more than more than one\n\t *      table is passed on, only the first will be checked\n\t *  @returns {boolean} true the table given is a DataTable, or false otherwise\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {\n\t *      $('#example').dataTable();\n\t *    }\n\t */\n\tDataTable.isDataTable = DataTable.fnIsDataTable = function ( table )\n\t{\n\t\tvar t = $(table).get(0);\n\t\tvar is = false;\n\t\n\t\tif ( table instanceof DataTable.Api ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\t$.each( DataTable.settings, function (i, o) {\n\t\t\tvar head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;\n\t\t\tvar foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;\n\t\n\t\t\tif ( o.nTable === t || head === t || foot === t ) {\n\t\t\t\tis = true;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn is;\n\t};\n\t\n\t\n\t/**\n\t * Get all DataTable tables that have been initialised - optionally you can\n\t * select to get only currently visible tables.\n\t *\n\t *  @param {boolean} [visible=false] Flag to indicate if you want all (default)\n\t *    or visible tables only.\n\t *  @returns {array} Array of `table` nodes (not DataTable instances) which are\n\t *    DataTables\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    $.each( $.fn.dataTable.tables(true), function () {\n\t *      $(table).DataTable().columns.adjust();\n\t *    } );\n\t */\n\tDataTable.tables = DataTable.fnTables = function ( visible )\n\t{\n\t\tvar api = false;\n\t\n\t\tif ( $.isPlainObject( visible ) ) {\n\t\t\tapi = visible.api;\n\t\t\tvisible = visible.visible;\n\t\t}\n\t\n\t\tvar a = $.map( DataTable.settings, function (o) {\n\t\t\tif ( !visible || (visible && $(o.nTable).is(':visible')) ) {\n\t\t\t\treturn o.nTable;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn api ?\n\t\t\tnew _Api( a ) :\n\t\t\ta;\n\t};\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian notation. This is made public\n\t * for the extensions to provide the same ability as DataTables core to accept\n\t * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase\n\t * parameters.\n\t *\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t */\n\tDataTable.camelToHungarian = _fnCamelToHungarian;\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( '$()', function ( selector, opts ) {\n\t\tvar\n\t\t\trows   = this.rows( opts ).nodes(), // Get all rows\n\t\t\tjqRows = $(rows);\n\t\n\t\treturn $( [].concat(\n\t\t\tjqRows.filter( selector ).toArray(),\n\t\t\tjqRows.find( selector ).toArray()\n\t\t) );\n\t} );\n\t\n\t\n\t// jQuery functions to operate on the tables\n\t$.each( [ 'on', 'one', 'off' ], function (i, key) {\n\t\t_api_register( key+'()', function ( /* event, handler */ ) {\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\n\t\t\t// Add the `dt` namespace automatically if it isn't already present\n\t\t\targs[0] = $.map( args[0].split( /\\s/ ), function ( e ) {\n\t\t\t\treturn ! e.match(/\\.dt\\b/) ?\n\t\t\t\t\te+'.dt' :\n\t\t\t\t\te;\n\t\t\t\t} ).join( ' ' );\n\t\n\t\t\tvar inst = $( this.tables().nodes() );\n\t\t\tinst[key].apply( inst, args );\n\t\t\treturn this;\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnClearTable( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'settings()', function () {\n\t\treturn new _Api( this.context, this.context );\n\t} );\n\t\n\t\n\t_api_register( 'init()', function () {\n\t\tvar ctx = this.context;\n\t\treturn ctx.length ? ctx[0].oInit : null;\n\t} );\n\t\n\t\n\t_api_register( 'data()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\treturn _pluck( settings.aoData, '_aData' );\n\t\t} ).flatten();\n\t} );\n\t\n\t\n\t_api_register( 'destroy()', function ( remove ) {\n\t\tremove = remove || false;\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tvar classes   = settings.oClasses;\n\t\t\tvar table     = settings.nTable;\n\t\t\tvar tbody     = settings.nTBody;\n\t\t\tvar thead     = settings.nTHead;\n\t\t\tvar tfoot     = settings.nTFoot;\n\t\t\tvar jqTable   = $(table);\n\t\t\tvar jqTbody   = $(tbody);\n\t\t\tvar jqWrapper = $(settings.nTableWrapper);\n\t\t\tvar rows      = $.map( settings.aoData, function (r) { return r.nTr; } );\n\t\t\tvar i, ien;\n\t\n\t\t\t// Flag to note that the table is currently being destroyed - no action\n\t\t\t// should be taken\n\t\t\tsettings.bDestroying = true;\n\t\n\t\t\t// Fire off the destroy callbacks for plug-ins etc\n\t\t\t_fnCallbackFire( settings, \"aoDestroyCallback\", \"destroy\", [settings] );\n\t\n\t\t\t// If not being removed from the document, make all columns visible\n\t\t\tif ( ! remove ) {\n\t\t\t\tnew _Api( settings ).columns().visible( true );\n\t\t\t}\n\t\n\t\t\t// Blitz all `DT` namespaced events (these are internal events, the\n\t\t\t// lowercase, `dt` events are user subscribed and they are responsible\n\t\t\t// for removing them\n\t\t\tjqWrapper.off('.DT').find(':not(tbody *)').off('.DT');\n\t\t\t$(window).off('.DT-'+settings.sInstance);\n\t\n\t\t\t// When scrolling we had to break the table up - restore it\n\t\t\tif ( table != thead.parentNode ) {\n\t\t\t\tjqTable.children('thead').detach();\n\t\t\t\tjqTable.append( thead );\n\t\t\t}\n\t\n\t\t\tif ( tfoot && table != tfoot.parentNode ) {\n\t\t\t\tjqTable.children('tfoot').detach();\n\t\t\t\tjqTable.append( tfoot );\n\t\t\t}\n\t\n\t\t\tsettings.aaSorting = [];\n\t\t\tsettings.aaSortingFixed = [];\n\t\t\t_fnSortingClasses( settings );\n\t\n\t\t\t$( rows ).removeClass( settings.asStripeClasses.join(' ') );\n\t\n\t\t\t$('th, td', thead).removeClass( classes.sSortable+' '+\n\t\t\t\tclasses.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone\n\t\t\t);\n\t\n\t\t\t// Add the TR elements back into the table in their original order\n\t\t\tjqTbody.children().detach();\n\t\t\tjqTbody.append( rows );\n\t\n\t\t\tvar orig = settings.nTableWrapper.parentNode;\n\t\n\t\t\t// Remove the DataTables generated nodes, events and classes\n\t\t\tvar removedMethod = remove ? 'remove' : 'detach';\n\t\t\tjqTable[ removedMethod ]();\n\t\t\tjqWrapper[ removedMethod ]();\n\t\n\t\t\t// If we need to reattach the table to the document\n\t\t\tif ( ! remove && orig ) {\n\t\t\t\t// insertBefore acts like appendChild if !arg[1]\n\t\t\t\torig.insertBefore( table, settings.nTableReinsertBefore );\n\t\n\t\t\t\t// Restore the width of the original table - was read from the style property,\n\t\t\t\t// so we can restore directly to that\n\t\t\t\tjqTable\n\t\t\t\t\t.css( 'width', settings.sDestroyWidth )\n\t\t\t\t\t.removeClass( classes.sTable );\n\t\n\t\t\t\t// If the were originally stripe classes - then we add them back here.\n\t\t\t\t// Note this is not fool proof (for example if not all rows had stripe\n\t\t\t\t// classes - but it's a good effort without getting carried away\n\t\t\t\tien = settings.asDestroyStripes.length;\n\t\n\t\t\t\tif ( ien ) {\n\t\t\t\t\tjqTbody.children().each( function (i) {\n\t\t\t\t\t\t$(this).addClass( settings.asDestroyStripes[i % ien] );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t/* Remove the settings object from the settings array */\n\t\t\tvar idx = $.inArray( settings, DataTable.settings );\n\t\t\tif ( idx !== -1 ) {\n\t\t\t\tDataTable.settings.splice( idx, 1 );\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t// Add the `every()` method for rows, columns and cells in a compact form\n\t$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {\n\t\t_api_register( type+'s().every()', function ( fn ) {\n\t\t\tvar opts = this.selector.opts;\n\t\t\tvar api = this;\n\t\n\t\t\treturn this.iterator( type, function ( settings, arg1, arg2, arg3, arg4 ) {\n\t\t\t\t// Rows and columns:\n\t\t\t\t//  arg1 - index\n\t\t\t\t//  arg2 - table counter\n\t\t\t\t//  arg3 - loop counter\n\t\t\t\t//  arg4 - undefined\n\t\t\t\t// Cells:\n\t\t\t\t//  arg1 - row index\n\t\t\t\t//  arg2 - column index\n\t\t\t\t//  arg3 - table counter\n\t\t\t\t//  arg4 - loop counter\n\t\t\t\tfn.call(\n\t\t\t\t\tapi[ type ](\n\t\t\t\t\t\targ1,\n\t\t\t\t\t\ttype==='cell' ? arg2 : opts,\n\t\t\t\t\t\ttype==='cell' ? opts : undefined\n\t\t\t\t\t),\n\t\t\t\t\targ1, arg2, arg3, arg4\n\t\t\t\t);\n\t\t\t} );\n\t\t} );\n\t} );\n\t\n\t\n\t// i18n method for extensions to be able to use the language object from the\n\t// DataTable\n\t_api_register( 'i18n()', function ( token, def, plural ) {\n\t\tvar ctx = this.context[0];\n\t\tvar resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );\n\t\n\t\tif ( resolved === undefined ) {\n\t\t\tresolved = def;\n\t\t}\n\t\n\t\tif ( plural !== undefined && $.isPlainObject( resolved ) ) {\n\t\t\tresolved = resolved[ plural ] !== undefined ?\n\t\t\t\tresolved[ plural ] :\n\t\t\t\tresolved._;\n\t\t}\n\t\n\t\treturn typeof resolved === 'string'\n\t\t\t? resolved.replace( '%d', plural ) // nb: plural might be undefined,\n\t\t\t: resolved;\n\t} );\t\n\t/**\n\t * Version string for plug-ins to check compatibility. Allowed format is\n\t * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used\n\t * only for non-release builds. See https://semver.org/ for more information.\n\t *  @member\n\t *  @type string\n\t *  @default Version number\n\t */\n\tDataTable.version = \"1.13.8\";\n\t\n\t/**\n\t * Private data store, containing all of the settings objects that are\n\t * created for the tables on a given page.\n\t *\n\t * Note that the `DataTable.settings` object is aliased to\n\t * `jQuery.fn.dataTableExt` through which it may be accessed and\n\t * manipulated, or `jQuery.fn.dataTable.settings`.\n\t *  @member\n\t *  @type array\n\t *  @default []\n\t *  @private\n\t */\n\tDataTable.settings = [];\n\t\n\t/**\n\t * Object models container, for the various models that DataTables has\n\t * available to it. These models define the objects that are used to hold\n\t * the active state and configuration of the table.\n\t *  @namespace\n\t */\n\tDataTable.models = {};\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * search information for the global filter and individual column filters.\n\t *  @namespace\n\t */\n\tDataTable.models.oSearch = {\n\t\t/**\n\t\t * Flag to indicate if the filtering should be case insensitive or not\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bCaseInsensitive\": true,\n\t\n\t\t/**\n\t\t * Applied search term\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sSearch\": \"\",\n\t\n\t\t/**\n\t\t * Flag to indicate if the search term should be interpreted as a\n\t\t * regular expression (true) or not (false) and therefore and special\n\t\t * regex characters escaped.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bRegex\": false,\n\t\n\t\t/**\n\t\t * Flag to indicate if DataTables is to use its smart filtering or not.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bSmart\": true,\n\t\n\t\t/**\n\t\t * Flag to indicate if DataTables should only trigger a search when\n\t\t * the return key is pressed.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"return\": false\n\t};\n\t\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * each individual row. This is the object format used for the settings\n\t * aoData array.\n\t *  @namespace\n\t */\n\tDataTable.models.oRow = {\n\t\t/**\n\t\t * TR element for the row\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTr\": null,\n\t\n\t\t/**\n\t\t * Array of TD elements for each row. This is null until the row has been\n\t\t * created.\n\t\t *  @type array nodes\n\t\t *  @default []\n\t\t */\n\t\t\"anCells\": null,\n\t\n\t\t/**\n\t\t * Data object from the original data source for the row. This is either\n\t\t * an array if using the traditional form of DataTables, or an object if\n\t\t * using mData options. The exact type will depend on the passed in\n\t\t * data from the data source, or will be an array if using DOM a data\n\t\t * source.\n\t\t *  @type array|object\n\t\t *  @default []\n\t\t */\n\t\t\"_aData\": [],\n\t\n\t\t/**\n\t\t * Sorting data cache - this array is ostensibly the same length as the\n\t\t * number of columns (although each index is generated only as it is\n\t\t * needed), and holds the data that is used for sorting each column in the\n\t\t * row. We do this cache generation at the start of the sort in order that\n\t\t * the formatting of the sort data need be done only once for each cell\n\t\t * per sort. This array should not be read from or written to by anything\n\t\t * other than the master sorting methods.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aSortData\": null,\n\t\n\t\t/**\n\t\t * Per cell filtering data cache. As per the sort data cache, used to\n\t\t * increase the performance of the filtering in DataTables\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aFilterData\": null,\n\t\n\t\t/**\n\t\t * Filtering data cache. This is the same as the cell filtering cache, but\n\t\t * in this case a string rather than an array. This is easily computed with\n\t\t * a join on `_aFilterData`, but is provided as a cache so the join isn't\n\t\t * needed on every search (memory traded for performance)\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sFilterRow\": null,\n\t\n\t\t/**\n\t\t * Cache of the class name that DataTables has applied to the row, so we\n\t\t * can quickly look at this variable rather than needing to do a DOM check\n\t\t * on className for the nTr property.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *  @private\n\t\t */\n\t\t\"_sRowStripe\": \"\",\n\t\n\t\t/**\n\t\t * Denote if the original data source was from the DOM, or the data source\n\t\t * object. This is used for invalidating data, so DataTables can\n\t\t * automatically read data from the original source, unless uninstructed\n\t\t * otherwise.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"src\": null,\n\t\n\t\t/**\n\t\t * Index in the aoData array. This saves an indexOf lookup when we have the\n\t\t * object, but want to know the index\n\t\t *  @type integer\n\t\t *  @default -1\n\t\t *  @private\n\t\t */\n\t\t\"idx\": -1\n\t};\n\t\n\t\n\t/**\n\t * Template object for the column information object in DataTables. This object\n\t * is held in the settings aoColumns array and contains all the information that\n\t * DataTables needs about each individual column.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults.column}\n\t * but this one is the internal data store for DataTables's cache of columns.\n\t * It should NOT be manipulated outside of DataTables. Any configuration should\n\t * be done through the initialisation options.\n\t *  @namespace\n\t */\n\tDataTable.models.oColumn = {\n\t\t/**\n\t\t * Column index. This could be worked out on-the-fly with $.inArray, but it\n\t\t * is faster to just hold it as a variable\n\t\t *  @type integer\n\t\t *  @default null\n\t\t */\n\t\t\"idx\": null,\n\t\n\t\t/**\n\t\t * A list of the columns that sorting should occur on when this column\n\t\t * is sorted. That this property is an array allows multi-column sorting\n\t\t * to be defined for a column (for example first name / last name columns\n\t\t * would benefit from this). The values are integers pointing to the\n\t\t * columns to be sorted on (typically it will be a single integer pointing\n\t\t * at itself, but that doesn't need to be the case).\n\t\t *  @type array\n\t\t */\n\t\t\"aDataSort\": null,\n\t\n\t\t/**\n\t\t * Define the sorting directions that are applied to the column, in sequence\n\t\t * as the column is repeatedly sorted upon - i.e. the first value is used\n\t\t * as the sorting direction when the column if first sorted (clicked on).\n\t\t * Sort it again (click again) and it will move on to the next index.\n\t\t * Repeat until loop.\n\t\t *  @type array\n\t\t */\n\t\t\"asSorting\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is searchable, and thus should be included\n\t\t * in the filtering or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSearchable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is sortable or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is currently visible in the table or not\n\t\t *  @type boolean\n\t\t */\n\t\t\"bVisible\": null,\n\t\n\t\t/**\n\t\t * Store for manual type assignment using the `column.type` option. This\n\t\t * is held in store so we can manipulate the column's `sType` property.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sManualType\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if HTML5 data attributes should be used as the data\n\t\t * source for filtering or sorting. True is either are.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @private\n\t\t */\n\t\t\"_bAttrSrc\": false,\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} nTd The TD node that has been created\n\t\t *  @param {*} sData The Data for the cell\n\t\t *  @param {array|object} oData The data for the whole row\n\t\t *  @param {int} iRow The row index for the aoData data store\n\t\t *  @default null\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\t/**\n\t\t * Function to get data from a cell in a column. You should <b>never</b>\n\t\t * access data directly through _aData internally in DataTables - always use\n\t\t * the method attached to this property. It allows mData to function as\n\t\t * required. This function is automatically assigned by the column\n\t\t * initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {string} sSpecific The specific data type you want to get -\n\t\t *    'display', 'type' 'filter' 'sort'\n\t\t *  @returns {*} The data for the cell from the given row's data\n\t\t *  @default null\n\t\t */\n\t\t\"fnGetData\": null,\n\t\n\t\t/**\n\t\t * Function to set data for a cell in the column. You should <b>never</b>\n\t\t * set the data directly to _aData internally in DataTables - always use\n\t\t * this method. It allows mData to function as required. This function\n\t\t * is automatically assigned by the column initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {*} sValue Value to set\n\t\t *  @default null\n\t\t */\n\t\t\"fnSetData\": null,\n\t\n\t\t/**\n\t\t * Property to read the value for the cells in the column from the data\n\t\t * source array / object. If null, then the default content is used, if a\n\t\t * function is given then the return from the function is used.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\t/**\n\t\t * Partner property to mData which is used (only when defined) to get\n\t\t * the data - i.e. it is basically the same as mData, but without the\n\t\t * 'set' option, and also the data fed to it is the result from mData.\n\t\t * This is the rendering method to match the data method of mData.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\t/**\n\t\t * Unique header TH/TD element for this column - this is what the sorting\n\t\t * listener is attached to (if sorting is enabled.)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTh\": null,\n\t\n\t\t/**\n\t\t * Unique footer TH/TD element for this column (if there is one). Not used\n\t\t * in DataTables as such, but can be used for plug-ins to reference the\n\t\t * footer for each column.\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTf\": null,\n\t\n\t\t/**\n\t\t * The class to apply to all TD elements in the table's TBODY for the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sClass\": null,\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t *  @type string\n\t\t */\n\t\t\"sContentPadding\": null,\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because mData\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\t/**\n\t\t * Name for the column, allowing reference to the column by name as well as\n\t\t * by index (needs a lookup to work by name).\n\t\t *  @type string\n\t\t */\n\t\t\"sName\": null,\n\t\n\t\t/**\n\t\t * Custom sorting data type - defines which of the available plug-ins in\n\t\t * afnSortData the custom sorting will use - if any is defined.\n\t\t *  @type string\n\t\t *  @default std\n\t\t */\n\t\t\"sSortDataType\": 'std',\n\t\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClass\": null,\n\t\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column -\n\t\t * when jQuery UI theming is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClassJUI\": null,\n\t\n\t\t/**\n\t\t * Title of the column - what is seen in the TH element (nTh).\n\t\t *  @type string\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\t/**\n\t\t * Column sorting and filtering type\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\t/**\n\t\t * Width of the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidth\": null,\n\t\n\t\t/**\n\t\t * Width of the column when it was first \"encountered\"\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidthOrig\": null\n\t};\n\t\n\t\n\t/*\n\t * Developer note: The properties of the object below are given in Hungarian\n\t * notation, that was used as the interface for DataTables prior to v1.10, however\n\t * from v1.10 onwards the primary interface is camel case. In order to avoid\n\t * breaking backwards compatibility utterly with this change, the Hungarian\n\t * version is still, internally the primary interface, but is is not documented\n\t * - hence the @name tags in each doc comment. This allows a Javascript function\n\t * to create a map from Hungarian notation to camel case (going the other direction\n\t * would require each property to be listed, which would add around 3K to the size\n\t * of DataTables, while this method is about a 0.5K hit).\n\t *\n\t * Ultimately this does pave the way for Hungarian notation to be dropped\n\t * completely, but that is a massive amount of work and will break current\n\t * installs (therefore is on-hold until v2).\n\t */\n\t\n\t/**\n\t * Initialisation options that can be given to DataTables at initialisation\n\t * time.\n\t *  @namespace\n\t */\n\tDataTable.defaults = {\n\t\t/**\n\t\t * An array of data to use for the table, passed in at initialisation which\n\t\t * will be used in preference to any data which is already in the DOM. This is\n\t\t * particularly useful for constructing tables purely in Javascript, for\n\t\t * example with a custom Ajax call.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.data\n\t\t *\n\t\t *  @example\n\t\t *    // Using a 2D array data source\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],\n\t\t *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\" },\n\t\t *          { \"title\": \"Browser\" },\n\t\t *          { \"title\": \"Platform\" },\n\t\t *          { \"title\": \"Version\" },\n\t\t *          { \"title\": \"Grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using an array of objects as a data source (`data`)\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 4.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  4,\n\t\t *            \"grade\":    \"X\"\n\t\t *          },\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 5.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  5,\n\t\t *            \"grade\":    \"C\"\n\t\t *          }\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\",   \"data\": \"engine\" },\n\t\t *          { \"title\": \"Browser\",  \"data\": \"browser\" },\n\t\t *          { \"title\": \"Platform\", \"data\": \"platform\" },\n\t\t *          { \"title\": \"Version\",  \"data\": \"version\" },\n\t\t *          { \"title\": \"Grade\",    \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaData\": null,\n\t\n\t\n\t\t/**\n\t\t * If ordering is enabled, then DataTables will perform a first pass sort on\n\t\t * initialisation. You can define which column(s) the sort is performed\n\t\t * upon, and the sorting direction, with this variable. The `sorting` array\n\t\t * should contain an array for each column to be sorted initially containing\n\t\t * the column's index and a direction string ('asc' or 'desc').\n\t\t *  @type array\n\t\t *  @default [[0,'asc']]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.order\n\t\t *\n\t\t *  @example\n\t\t *    // Sort by 3rd column first, and then 4th column\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": [[2,'asc'], [3,'desc']]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *    // No initial sorting\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": []\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaSorting\": [[0,'asc']],\n\t\n\t\n\t\t/**\n\t\t * This parameter is basically identical to the `sorting` parameter, but\n\t\t * cannot be overridden by user interaction with the table. What this means\n\t\t * is that you could have a column (visible or hidden) which the sorting\n\t\t * will always be forced on first - any sorting after that (from the user)\n\t\t * will then be performed as required. This can be useful for grouping rows\n\t\t * together.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.orderFixed\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderFixed\": [[0,'asc']]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\n\t\t/**\n\t\t * DataTables can be instructed to load data to display in the table from a\n\t\t * Ajax source. This option defines how that Ajax call is made and where to.\n\t\t *\n\t\t * The `ajax` property has three different modes of operation, depending on\n\t\t * how it is defined. These are:\n\t\t *\n\t\t * * `string` - Set the URL from where the data should be loaded from.\n\t\t * * `object` - Define properties for `jQuery.ajax`.\n\t\t * * `function` - Custom data get function\n\t\t *\n\t\t * `string`\n\t\t * --------\n\t\t *\n\t\t * As a string, the `ajax` property simply defines the URL from which\n\t\t * DataTables will load data.\n\t\t *\n\t\t * `object`\n\t\t * --------\n\t\t *\n\t\t * As an object, the parameters in the object are passed to\n\t\t * [jQuery.ajax](https://api.jquery.com/jQuery.ajax/) allowing fine control\n\t\t * of the Ajax request. DataTables has a number of default parameters which\n\t\t * you can override using this option. Please refer to the jQuery\n\t\t * documentation for a full description of the options available, although\n\t\t * the following parameters provide additional options in DataTables or\n\t\t * require special consideration:\n\t\t *\n\t\t * * `data` - As with jQuery, `data` can be provided as an object, but it\n\t\t *   can also be used as a function to manipulate the data DataTables sends\n\t\t *   to the server. The function takes a single parameter, an object of\n\t\t *   parameters with the values that DataTables has readied for sending. An\n\t\t *   object may be returned which will be merged into the DataTables\n\t\t *   defaults, or you can add the items to the object that was passed in and\n\t\t *   not return anything from the function. This supersedes `fnServerParams`\n\t\t *   from DataTables 1.9-.\n\t\t *\n\t\t * * `dataSrc` - By default DataTables will look for the property `data` (or\n\t\t *   `aaData` for compatibility with DataTables 1.9-) when obtaining data\n\t\t *   from an Ajax source or for server-side processing - this parameter\n\t\t *   allows that property to be changed. You can use Javascript dotted\n\t\t *   object notation to get a data source for multiple levels of nesting, or\n\t\t *   it my be used as a function. As a function it takes a single parameter,\n\t\t *   the JSON returned from the server, which can be manipulated as\n\t\t *   required, with the returned value being that used by DataTables as the\n\t\t *   data source for the table. This supersedes `sAjaxDataProp` from\n\t\t *   DataTables 1.9-.\n\t\t *\n\t\t * * `success` - Should not be overridden it is used internally in\n\t\t *   DataTables. To manipulate / transform the data returned by the server\n\t\t *   use `ajax.dataSrc`, or use `ajax` as a function (see below).\n\t\t *\n\t\t * `function`\n\t\t * ----------\n\t\t *\n\t\t * As a function, making the Ajax call is left up to yourself allowing\n\t\t * complete control of the Ajax request. Indeed, if desired, a method other\n\t\t * than Ajax could be used to obtain the required data, such as Web storage\n\t\t * or an AIR database.\n\t\t *\n\t\t * The function is given four parameters and no return is required. The\n\t\t * parameters are:\n\t\t *\n\t\t * 1. _object_ - Data to send to the server\n\t\t * 2. _function_ - Callback function that must be executed when the required\n\t\t *    data has been obtained. That data should be passed into the callback\n\t\t *    as the only parameter\n\t\t * 3. _object_ - DataTables settings object for the table\n\t\t *\n\t\t * Note that this supersedes `fnServerData` from DataTables 1.9-.\n\t\t *\n\t\t *  @type string|object|function\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.ajax\n\t\t *  @since 1.10.0\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax.\n\t\t *   // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": \"data.json\"\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to change\n\t\t *   // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"tableData\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to read data\n\t\t *   // from a plain array rather than an array in an object\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Manipulate the data returned from the server - add a link to data\n\t\t *   // (note this can, should, be done using `render` for the column - this\n\t\t *   // is just a simple example of how the data can be manipulated).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": function ( json ) {\n\t\t *         for ( var i=0, ien=json.length ; i<ien ; i++ ) {\n\t\t *           json[i][0] = '<a href=\"/message/'+json[i][0]+'>View message</a>';\n\t\t *         }\n\t\t *         return json;\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Add data to the request\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"data\": function ( d ) {\n\t\t *         return {\n\t\t *           \"extra_search\": $('#extra').val()\n\t\t *         };\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Send request as POST\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"type\": \"POST\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get the data from localStorage (could interface with a form for\n\t\t *   // adding, editing and removing rows).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": function (data, callback, settings) {\n\t\t *       callback(\n\t\t *         JSON.parse( localStorage.getItem('dataTablesData') )\n\t\t *       );\n\t\t *     }\n\t\t *   } );\n\t\t */\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to readily specify the entries in the length drop\n\t\t * down menu that DataTables shows when pagination is enabled. It can be\n\t\t * either a 1D array of options which will be used for both the displayed\n\t\t * option and the value, or a 2D array which will use the array in the first\n\t\t * position as the value, and the array in the second position as the\n\t\t * displayed options (useful for language strings such as 'All').\n\t\t *\n\t\t * Note that the `pageLength` property will be automatically set to the\n\t\t * first value given in this array, unless `pageLength` is also provided.\n\t\t *  @type array\n\t\t *  @default [ 10, 25, 50, 100 ]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.lengthMenu\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthMenu\": [[10, 25, 50, -1], [10, 25, 50, \"All\"]]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aLengthMenu\": [ 10, 25, 50, 100 ],\n\t\n\t\n\t\t/**\n\t\t * The `columns` option in the initialisation parameter allows you to define\n\t\t * details about the way individual columns behave. For a full list of\n\t\t * column options that can be set, please see\n\t\t * {@link DataTable.defaults.column}. Note that if you use `columns` to\n\t\t * define your columns, you must have an entry in the array for every single\n\t\t * column that you have in your table (these can be null if you don't which\n\t\t * to specify any options).\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.column\n\t\t */\n\t\t\"aoColumns\": null,\n\t\n\t\t/**\n\t\t * Very similar to `columns`, `columnDefs` allows you to target a specific\n\t\t * column, multiple columns, or all columns, using the `targets` property of\n\t\t * each object in the array. This allows great flexibility when creating\n\t\t * tables, as the `columnDefs` arrays can be of any length, targeting the\n\t\t * columns you specifically want. `columnDefs` may use any of the column\n\t\t * options available: {@link DataTable.defaults.column}, but it _must_\n\t\t * have `targets` defined in each object in the array. Values in the `targets`\n\t\t * array may be:\n\t\t *   <ul>\n\t\t *     <li>a string - class name will be matched on the TH for the column</li>\n\t\t *     <li>0 or a positive integer - column index counting from the left</li>\n\t\t *     <li>a negative integer - column index counting from the right</li>\n\t\t *     <li>the string \"_all\" - all columns (i.e. assign a default)</li>\n\t\t *   </ul>\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.columnDefs\n\t\t */\n\t\t\"aoColumnDefs\": null,\n\t\n\t\n\t\t/**\n\t\t * Basically the same as `search`, this parameter defines the individual column\n\t\t * filtering state at initialisation time. The array must be of the same size\n\t\t * as the number of columns, and each element be an object with the parameters\n\t\t * `search` and `escapeRegex` (the latter is optional). 'null' is also\n\t\t * accepted and the default will be used.\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.searchCols\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searchCols\": [\n\t\t *          null,\n\t\t *          { \"search\": \"My filter\" },\n\t\t *          null,\n\t\t *          { \"search\": \"^[0-9]\", \"escapeRegex\": false }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aoSearchCols\": [],\n\t\n\t\n\t\t/**\n\t\t * An array of CSS classes that should be applied to displayed rows. This\n\t\t * array may be of any length, and DataTables will apply each class\n\t\t * sequentially, looping when required.\n\t\t *  @type array\n\t\t *  @default null <i>Will take the values determined by the `oClasses.stripe*`\n\t\t *    options</i>\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.stripeClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stripeClasses\": [ 'strip1', 'strip2', 'strip3' ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"asStripeClasses\": null,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable automatic column width calculation. This can be disabled\n\t\t * as an optimisation (it takes some time to calculate the widths) if the\n\t\t * tables widths are passed in using `columns`.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.autoWidth\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"autoWidth\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bAutoWidth\": true,\n\t\n\t\n\t\t/**\n\t\t * Deferred rendering can provide DataTables with a huge speed boost when you\n\t\t * are using an Ajax or JS data source for the table. This option, when set to\n\t\t * true, will cause DataTables to defer the creation of the table elements for\n\t\t * each row until they are needed for a draw - saving a significant amount of\n\t\t * time.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.deferRender\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajax\": \"sources/arrays.txt\",\n\t\t *        \"deferRender\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDeferRender\": false,\n\t\n\t\n\t\t/**\n\t\t * Replace a DataTable which matches the given selector and replace it with\n\t\t * one which has the properties of the new initialisation object passed. If no\n\t\t * table matches the selector, then the new DataTable will be constructed as\n\t\t * per normal.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.destroy\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"srollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      // Some time later....\n\t\t *      $('#example').dataTable( {\n\t\t *        \"filter\": false,\n\t\t *        \"destroy\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDestroy\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering of data. Filtering in DataTables is \"smart\" in\n\t\t * that it allows the end user to input multiple words (space separated) and\n\t\t * will match a row containing those words, even if not in the order that was\n\t\t * specified (this allow matching across multiple columns). Note that if you\n\t\t * wish to use filtering in DataTables this must remain 'true' - to remove the\n\t\t * default filtering input box and retain filtering abilities, please use\n\t\t * {@link DataTable.defaults.dom}.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.searching\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searching\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bFilter\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the table information display. This shows information\n\t\t * about the data that is currently visible on the page, including information\n\t\t * about filtered data if that action is being performed.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.info\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"info\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bInfo\": true,\n\t\n\t\n\t\t/**\n\t\t * Allows the end user to select the size of a formatted page from a select\n\t\t * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.lengthChange\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthChange\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bLengthChange\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable pagination.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.paging\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"paging\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bPaginate\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of a 'processing' indicator when the table is\n\t\t * being processed (e.g. a sort). This is particularly useful for tables with\n\t\t * large amounts of data where it can take a noticeable amount of time to sort\n\t\t * the entries.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.processing\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"processing\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bProcessing\": false,\n\t\n\t\n\t\t/**\n\t\t * Retrieve the DataTables object for the given selector. Note that if the\n\t\t * table has already been initialised, this parameter will cause DataTables\n\t\t * to simply return the object that has already been set up - it will not take\n\t\t * account of any changes you might have made to the initialisation object\n\t\t * passed to DataTables (setting this parameter to true is an acknowledgement\n\t\t * that you understand this). `destroy` can be used to reinitialise a table if\n\t\t * you need.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.retrieve\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      initTable();\n\t\t *      tableActions();\n\t\t *    } );\n\t\t *\n\t\t *    function initTable ()\n\t\t *    {\n\t\t *      return $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false,\n\t\t *        \"retrieve\": true\n\t\t *      } );\n\t\t *    }\n\t\t *\n\t\t *    function tableActions ()\n\t\t *    {\n\t\t *      var table = initTable();\n\t\t *      // perform API operations with oTable\n\t\t *    }\n\t\t */\n\t\t\"bRetrieve\": false,\n\t\n\t\n\t\t/**\n\t\t * When vertical (y) scrolling is enabled, DataTables will force the height of\n\t\t * the table's viewport to the given height at all times (useful for layout).\n\t\t * However, this can look odd when filtering data down to a small data set,\n\t\t * and the footer is left \"floating\" further down. This parameter (when\n\t\t * enabled) will cause DataTables to collapse the table's viewport down when\n\t\t * the result set will fit within the given Y height.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollCollapse\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200\",\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bScrollCollapse\": false,\n\t\n\t\n\t\t/**\n\t\t * Configure DataTables to use server-side processing. Note that the\n\t\t * `ajax` parameter must also be given in order to give DataTables a\n\t\t * source to obtain the required data for each draw.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverSide\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"xhr.php\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bServerSide\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable sorting of columns. Sorting of individual columns can be\n\t\t * disabled by the `sortable` option for each column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.ordering\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ordering\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSort\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or display DataTables' ability to sort multiple columns at the\n\t\t * same time (activated by shift-click by the user).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderMulti\n\t\t *\n\t\t *  @example\n\t\t *    // Disable multiple column sorting ability\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderMulti\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortMulti\": true,\n\t\n\t\n\t\t/**\n\t\t * Allows control over whether DataTables should use the top (true) unique\n\t\t * cell that is found for a single column, or the bottom (false - default).\n\t\t * This is useful when using complex headers.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderCellsTop\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderCellsTop\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortCellsTop\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the addition of the classes `sorting\\_1`, `sorting\\_2` and\n\t\t * `sorting\\_3` to the columns which are currently being sorted on. This is\n\t\t * presented as a feature switch as it can increase processing time (while\n\t\t * classes are removed and added) so for large data sets you might want to\n\t\t * turn this off.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.orderClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderClasses\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortClasses\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable state saving. When enabled HTML5 `localStorage` will be\n\t\t * used to save table display information such as pagination information,\n\t\t * display length, filtering and sorting. As such when the end user reloads\n\t\t * the page the display display will match what thy had previously set up.\n\t\t *\n\t\t * Due to the use of `localStorage` the default state saving is not supported\n\t\t * in IE6 or 7. If state saving is required in those browsers, use\n\t\t * `stateSaveCallback` to provide a storage solution such as cookies.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.stateSave\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bStateSave\": false,\n\t\n\t\n\t\t/**\n\t\t * This function is called when a TR element is created (and all TD child\n\t\t * elements have been inserted), or registered if using a DOM source, allowing\n\t\t * manipulation of the TR element (adding classes etc).\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} dataIndex The index of this row in the internal aoData array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.createdRow\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"createdRow\": function( row, data, dataIndex ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" )\n\t\t *          {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedRow\": null,\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify any aspect you want about the created DOM.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.drawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"drawCallback\": function( settings ) {\n\t\t *          alert( 'DataTables has redrawn the table' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Identical to fnHeaderCallback() but for the table footer this function\n\t\t * allows you to modify the table footer on every 'draw' event.\n\t\t *  @type function\n\t\t *  @param {node} foot \"TR\" element for the footer\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.footerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"footerCallback\": function( tfoot, data, start, end, display ) {\n\t\t *          tfoot.getElementsByTagName('th')[0].innerHTML = \"Starting index is \"+start;\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnFooterCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * When rendering large numbers in the information element for the table\n\t\t * (i.e. \"Showing 1 to 10 of 57 entries\") DataTables will render large numbers\n\t\t * to have a comma separator for the 'thousands' units (e.g. 1 million is\n\t\t * rendered as \"1,000,000\") to help readability for the end user. This\n\t\t * function will override the default method DataTables uses.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {int} toFormat number to be formatted\n\t\t *  @returns {string} formatted string for DataTables to show the number\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.formatNumber\n\t\t *\n\t\t *  @example\n\t\t *    // Format a number using a single quote for the separator (note that\n\t\t *    // this can also be done with the language.thousands option)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"formatNumber\": function ( toFormat ) {\n\t\t *          return toFormat.toString().replace(\n\t\t *            /\\B(?=(\\d{3})+(?!\\d))/g, \"'\"\n\t\t *          );\n\t\t *        };\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnFormatNumber\": function ( toFormat ) {\n\t\t\treturn toFormat.toString().replace(\n\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g,\n\t\t\t\tthis.oLanguage.sThousands\n\t\t\t);\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify the header row. This can be used to calculate and\n\t\t * display useful information about the table.\n\t\t *  @type function\n\t\t *  @param {node} head \"TR\" element for the header\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.headerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"fheaderCallback\": function( head, data, start, end, display ) {\n\t\t *          head.getElementsByTagName('th')[0].innerHTML = \"Displaying \"+(end-start)+\" records\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnHeaderCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * The information element can be used to convey information about the current\n\t\t * state of the table. Although the internationalisation options presented by\n\t\t * DataTables are quite capable of dealing with most customisations, there may\n\t\t * be times where you wish to customise the string further. This callback\n\t\t * allows you to do exactly that.\n\t\t *  @type function\n\t\t *  @param {object} oSettings DataTables settings object\n\t\t *  @param {int} start Starting position in data for the draw\n\t\t *  @param {int} end End position in data for the draw\n\t\t *  @param {int} max Total number of rows in the table (regardless of\n\t\t *    filtering)\n\t\t *  @param {int} total Total number of rows in the data set, after filtering\n\t\t *  @param {string} pre The string that DataTables has formatted using it's\n\t\t *    own rules\n\t\t *  @returns {string} The string to be displayed in the information element.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.infoCallback\n\t\t *\n\t\t *  @example\n\t\t *    $('#example').dataTable( {\n\t\t *      \"infoCallback\": function( settings, start, end, max, total, pre ) {\n\t\t *        return start +\" to \"+ end;\n\t\t *      }\n\t\t *    } );\n\t\t */\n\t\t\"fnInfoCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Called when the table has been initialised. Normally DataTables will\n\t\t * initialise sequentially and there will be no need for this function,\n\t\t * however, this does not hold true when using external language information\n\t\t * since that is obtained using an async XHR call.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} json The JSON object request from the server - only\n\t\t *    present if client-side Ajax sourced data is used\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.initComplete\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"initComplete\": function(settings, json) {\n\t\t *          alert( 'DataTables has finished its initialisation.' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnInitComplete\": null,\n\t\n\t\n\t\t/**\n\t\t * Called at the very start of each table draw and can be used to cancel the\n\t\t * draw by returning false, any other return (including undefined) results in\n\t\t * the full draw occurring).\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @returns {boolean} False will cancel the draw, anything else (including no\n\t\t *    return) will allow it to complete.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.preDrawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"preDrawCallback\": function( settings ) {\n\t\t *          if ( $('#test').val() == 1 ) {\n\t\t *            return false;\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnPreDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * This function allows you to 'post process' each row after it have been\n\t\t * generated for each table draw, but before it is rendered on screen. This\n\t\t * function might be used for setting the row class name etc.\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} displayIndex The display index for the current table draw\n\t\t *  @param {int} displayIndexFull The index of the data in the full list of\n\t\t *    rows (after filtering)\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.rowCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"rowCallback\": function( row, data, displayIndex, displayIndexFull ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" ) {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnRowCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * This parameter allows you to override the default function which obtains\n\t\t * the data from the server so something more suitable for your application.\n\t\t * For example you could use POST data, or pull information from a Gears or\n\t\t * AIR database.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {string} source HTTP source to obtain the data from (`ajax`)\n\t\t *  @param {array} data A key/value pair object containing the data to send\n\t\t *    to the server\n\t\t *  @param {function} callback to be called on completion of the data get\n\t\t *    process that will draw the data on the page.\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverData\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerData\": null,\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t *  It is often useful to send extra data to the server when making an Ajax\n\t\t * request - for example custom filtering information, and this callback\n\t\t * function makes it trivial to send extra information to the server. The\n\t\t * passed in parameter is the data set that has been constructed by\n\t\t * DataTables, and you can add to this or modify it as you require.\n\t\t *  @type function\n\t\t *  @param {array} data Data array (array of objects which are name/value\n\t\t *    pairs) that has been constructed by DataTables and will be sent to the\n\t\t *    server. In the case of Ajax sourced data with server-side processing\n\t\t *    this will be an empty array, for server-side processing there will be a\n\t\t *    significant number of parameters!\n\t\t *  @returns {undefined} Ensure that you modify the data array passed in,\n\t\t *    as this is passed by reference.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverParams\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Load the table state. With this function you can define from where, and how, the\n\t\t * state of a table is loaded. By default DataTables will load from `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} callback Callback that can be executed when done. It\n\t\t *    should be passed the loaded state object.\n\t\t *  @return {object} The DataTables state object to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadCallback\": function (settings, callback) {\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_load\",\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"success\": function (json) {\n\t\t *              callback( json );\n\t\t *            }\n\t\t *          } );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadCallback\": function ( settings ) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(\n\t\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(\n\t\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the saved state prior to loading that state.\n\t\t * This callback is called when the table is loading state from the stored data, but\n\t\t * prior to the settings object being modified by the saved state. Note that for\n\t\t * plug-in authors, you should use the `stateLoadParams` event to load parameters for\n\t\t * a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that is to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never loaded\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Disallow state loading by returning false\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          return false;\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Callback that is called when the state has been loaded from the state saving method\n\t\t * and the DataTables settings object has been modified as a result of the loaded state.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that was loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoaded\n\t\t *\n\t\t *  @example\n\t\t *    // Show an alert with the filtering value that was saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoaded\": function (settings, data) {\n\t\t *          alert( 'Saved filter was: '+data.oSearch.sSearch );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoaded\": null,\n\t\n\t\n\t\t/**\n\t\t * Save the table state. This function allows you to define where and how the state\n\t\t * information for the table is stored By default DataTables will use `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveCallback\": function (settings, data) {\n\t\t *          // Send an Ajax request to the server with the state object\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_save\",\n\t\t *            \"data\": data,\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"method\": \"POST\"\n\t\t *            \"success\": function () {}\n\t\t *          } );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveCallback\": function ( settings, data ) {\n\t\t\ttry {\n\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(\n\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname,\n\t\t\t\t\tJSON.stringify( data )\n\t\t\t\t);\n\t\t\t} catch (e) {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the state to be saved. Called when the table\n\t\t * has changed state a new state save is required. This method allows modification of\n\t\t * the state saving object prior to actually doing the save, including addition or\n\t\t * other state properties or modification. Note that for plug-in authors, you should\n\t\t * use the `stateSaveParams` event to save parameters for a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Duration for which the saved state information is considered valid. After this period\n\t\t * has elapsed the state will be returned to the default.\n\t\t * Value is given in seconds.\n\t\t *  @type int\n\t\t *  @default 7200 <i>(2 hours)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.stateDuration\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateDuration\": 60*60*24; // 1 day\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iStateDuration\": 7200,\n\t\n\t\n\t\t/**\n\t\t * When enabled DataTables will not make a request to the server for the first\n\t\t * page draw - rather it will use the data already on the page (no sorting etc\n\t\t * will be applied to it), thus saving on an XHR at load time. `deferLoading`\n\t\t * is used to indicate that deferred loading is required, but it is also used\n\t\t * to tell DataTables how many records there are in the full table (allowing\n\t\t * the information element and pagination to be displayed correctly). In the case\n\t\t * where a filtering is applied to the table on initial load, this can be\n\t\t * indicated by giving the parameter as an array, where the first element is\n\t\t * the number of records available after filtering and the second element is the\n\t\t * number of records without filtering (allowing the table information element\n\t\t * to be shown correctly).\n\t\t *  @type int | array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.deferLoading\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records available in the table, no filtering applied\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": 57\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records after filtering, 100 without filtering (an initial filter applied)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": [ 57, 100 ],\n\t\t *        \"search\": {\n\t\t *          \"search\": \"my_filter\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iDeferLoading\": null,\n\t\n\t\n\t\t/**\n\t\t * Number of rows to display on a single page when using pagination. If\n\t\t * feature enabled (`lengthChange`) then the end user will be able to override\n\t\t * this to a custom setting using a pop-up menu.\n\t\t *  @type int\n\t\t *  @default 10\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pageLength\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pageLength\": 50\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayLength\": 10,\n\t\n\t\n\t\t/**\n\t\t * Define the starting point for data display when using DataTables with\n\t\t * pagination. Note that this parameter is the number of records, rather than\n\t\t * the page number, so if you have 10 records per page and want to start on\n\t\t * the third page, it should be \"20\".\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.displayStart\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"displayStart\": 20\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayStart\": 0,\n\t\n\t\n\t\t/**\n\t\t * By default DataTables allows keyboard navigation of the table (sorting, paging,\n\t\t * and filtering) by adding a `tabindex` attribute to the required elements. This\n\t\t * allows you to tab through the controls and press the enter key to activate them.\n\t\t * The tabindex is default 0, meaning that the tab follows the flow of the document.\n\t\t * You can overrule this using this parameter if you wish. Use a value of -1 to\n\t\t * disable built-in keyboard navigation.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.tabIndex\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"tabIndex\": 1\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\n\t\t/**\n\t\t * Classes that DataTables assigns to the various components and features\n\t\t * that it adds to the HTML table. This allows classes to be configured\n\t\t * during initialisation in addition to through the static\n\t\t * {@link DataTable.ext.oStdClasses} object).\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.classes\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\n\t\t/**\n\t\t * All strings that DataTables uses in the user interface that it creates\n\t\t * are defined in this object, allowing you to modified them individually or\n\t\t * completely replace them all as required.\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.language\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Strings that are used for WAI-ARIA labels and controls only (these are not\n\t\t\t * actually visible on the page, but will be read by screenreaders, and thus\n\t\t\t * must be internationalised as well).\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.aria\n\t\t\t */\n\t\t\t\"oAria\": {\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted ascending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortAscending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortAscending\": \" - click/return to sort ascending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortAscending\": \": activate to sort column ascending\",\n\t\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted descending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortDescending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortDescending\": \" - click/return to sort descending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortDescending\": \": activate to sort column descending\"\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * Pagination string used by DataTables for the built-in pagination\n\t\t\t * control types.\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.paginate\n\t\t\t */\n\t\t\t\"oPaginate\": {\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the first page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default First\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.first\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"first\": \"First page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sFirst\": \"First\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the last page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Last\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.last\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"last\": \"Last page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sLast\": \"Last\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'next' pagination button (to take the user to the\n\t\t\t\t * next page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Next\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.next\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"next\": \"Next page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sNext\": \"Next\",\n\t\n\t\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'previous' pagination button (to take the user to\n\t\t\t\t * the previous page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Previous\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.previous\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"previous\": \"Previous page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sPrevious\": \"Previous\"\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * This string is shown in preference to `zeroRecords` when the table is\n\t\t\t * empty of data (regardless of filtering). Note that this is an optional\n\t\t\t * parameter - if it is not given, the value of `zeroRecords` will be used\n\t\t\t * instead (either the default or given value).\n\t\t\t *  @type string\n\t\t\t *  @default No data available in table\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.emptyTable\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"emptyTable\": \"No data available in table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sEmptyTable\": \"No data available in table\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This string gives information to the end user about the information\n\t\t\t * that is current on display on the page. The following tokens can be\n\t\t\t * used in the string and will be dynamically replaced as the table\n\t\t\t * display updates. This tokens can be placed anywhere in the string, or\n\t\t\t * removed as needed by the language requires:\n\t\t\t *\n\t\t\t * * `\\_START\\_` - Display index of the first record on the current page\n\t\t\t * * `\\_END\\_` - Display index of the last record on the current page\n\t\t\t * * `\\_TOTAL\\_` - Number of records in the table after filtering\n\t\t\t * * `\\_MAX\\_` - Number of records in the table without filtering\n\t\t\t * * `\\_PAGE\\_` - Current page number\n\t\t\t * * `\\_PAGES\\_` - Total number of pages of data in the table\n\t\t\t *\n\t\t\t *  @type string\n\t\t\t *  @default Showing _START_ to _END_ of _TOTAL_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.info\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"info\": \"Showing page _PAGE_ of _PAGES_\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfo\": \"Showing _START_ to _END_ of _TOTAL_ entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Display information string for when the table is empty. Typically the\n\t\t\t * format of this string should match `info`.\n\t\t\t *  @type string\n\t\t\t *  @default Showing 0 to 0 of 0 entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoEmpty\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoEmpty\": \"No entries to show\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoEmpty\": \"Showing 0 to 0 of 0 entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When a user filters the information in a table, this string is appended\n\t\t\t * to the information (`info`) to give an idea of how strong the filtering\n\t\t\t * is. The variable _MAX_ is dynamically updated.\n\t\t\t *  @type string\n\t\t\t *  @default (filtered from _MAX_ total entries)\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoFiltered\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoFiltered\": \" - filtering from _MAX_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoFiltered\": \"(filtered from _MAX_ total entries)\",\n\t\n\t\n\t\t\t/**\n\t\t\t * If can be useful to append extra information to the info string at times,\n\t\t\t * and this variable does exactly that. This information will be appended to\n\t\t\t * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are\n\t\t\t * being used) at all times.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoPostFix\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoPostFix\": \"All records shown are derived from real information.\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoPostFix\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This decimal place operator is a little different from the other\n\t\t\t * language options since DataTables doesn't output floating point\n\t\t\t * numbers, so it won't ever use this for display of a number. Rather,\n\t\t\t * what this parameter does is modify the sort methods of the table so\n\t\t\t * that numbers which are in a format which has a character other than\n\t\t\t * a period (`.`) as a decimal place will be sorted numerically.\n\t\t\t *\n\t\t\t * Note that numbers with different decimal places cannot be shown in\n\t\t\t * the same table and still be sortable, the table must be consistent.\n\t\t\t * However, multiple different tables on the page can use different\n\t\t\t * decimal place characters.\n\t\t\t *  @type string\n\t\t\t *  @default \n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.decimal\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"decimal\": \",\"\n\t\t\t *          \"thousands\": \".\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sDecimal\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * DataTables has a build in number formatter (`formatNumber`) which is\n\t\t\t * used to format large numbers that are used in the table information.\n\t\t\t * By default a comma is used, but this can be trivially changed to any\n\t\t\t * character you wish with this parameter.\n\t\t\t *  @type string\n\t\t\t *  @default ,\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.thousands\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"thousands\": \"'\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sThousands\": \",\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Detail the action that will be taken when the drop down menu for the\n\t\t\t * pagination length option is changed. The '_MENU_' variable is replaced\n\t\t\t * with a default select list of 10, 25, 50 and 100, and can be replaced\n\t\t\t * with a custom select box if required.\n\t\t\t *  @type string\n\t\t\t *  @default Show _MENU_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.lengthMenu\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language change only\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": \"Display _MENU_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language and options change\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": 'Display <select>'+\n\t\t\t *            '<option value=\"10\">10</option>'+\n\t\t\t *            '<option value=\"20\">20</option>'+\n\t\t\t *            '<option value=\"30\">30</option>'+\n\t\t\t *            '<option value=\"40\">40</option>'+\n\t\t\t *            '<option value=\"50\">50</option>'+\n\t\t\t *            '<option value=\"-1\">All</option>'+\n\t\t\t *            '</select> records'\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLengthMenu\": \"Show _MENU_ entries\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When using Ajax sourced data and during the first draw when DataTables is\n\t\t\t * gathering the data, this message is shown in an empty row in the table to\n\t\t\t * indicate to the end user the the data is being loaded. Note that this\n\t\t\t * parameter is not used when loading data by server-side processing, just\n\t\t\t * Ajax sourced data with client-side processing.\n\t\t\t *  @type string\n\t\t\t *  @default Loading...\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.loadingRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"loadingRecords\": \"Please wait - loading...\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLoadingRecords\": \"Loading...\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text which is displayed when the table is processing a user action\n\t\t\t * (usually a sort command or similar).\n\t\t\t *  @type string\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.processing\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"processing\": \"DataTables is currently busy\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sProcessing\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Details the actions that will be taken when the user types into the\n\t\t\t * filtering input text box. The variable \"_INPUT_\", if used in the string,\n\t\t\t * is replaced with the HTML text box for the filtering input allowing\n\t\t\t * control over where it appears in the string. If \"_INPUT_\" is not given\n\t\t\t * then the input box is appended to the string automatically.\n\t\t\t *  @type string\n\t\t\t *  @default Search:\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.search\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Input text box will be appended at the end automatically\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Filter records:\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Specify where the filter should appear\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Apply filter _INPUT_ to table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sSearch\": \"Search:\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Assign a `placeholder` attribute to the search `input` element\n\t\t\t *  @type string\n\t\t\t *  @default \n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.searchPlaceholder\n\t\t\t */\n\t\t\t\"sSearchPlaceholder\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * All of the language information can be stored in a file on the\n\t\t\t * server-side, which DataTables will look up if this parameter is passed.\n\t\t\t * It must store the URL of the language file, which is in a JSON format,\n\t\t\t * and the object has the same properties as the oLanguage object in the\n\t\t\t * initialiser object (i.e. the above parameters). Please refer to one of\n\t\t\t * the example language files to see how this works in action.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string - i.e. disabled</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.url\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"url\": \"https://www.sprymedia.co.uk/dataTables/lang.txt\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sUrl\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text shown inside the table records when the is no information to be\n\t\t\t * displayed after filtering. `emptyTable` is shown when there is simply no\n\t\t\t * information in the table at all (regardless of filtering).\n\t\t\t *  @type string\n\t\t\t *  @default No matching records found\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.zeroRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"zeroRecords\": \"No records to display\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sZeroRecords\": \"No matching records found\"\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to have define the global filtering state at\n\t\t * initialisation time. As an object the `search` parameter must be\n\t\t * defined, but all other parameters are optional. When `regex` is true,\n\t\t * the search string will be treated as a regular expression, when false\n\t\t * (default) it will be treated as a straight string. When `smart`\n\t\t * DataTables will use it's smart filtering methods (to word match at\n\t\t * any point in the data), when false this will not be done.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.search\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"search\": {\"search\": \"Initial search\"}\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"oSearch\": $.extend( {}, DataTable.models.oSearch ),\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * By default DataTables will look for the property `data` (or `aaData` for\n\t\t * compatibility with DataTables 1.9-) when obtaining data from an Ajax\n\t\t * source or for server-side processing - this parameter allows that\n\t\t * property to be changed. You can use Javascript dotted object notation to\n\t\t * get a data source for multiple levels of nesting.\n\t\t *  @type string\n\t\t *  @default data\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxDataProp\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxDataProp\": \"data\",\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * You can instruct DataTables to load data from an external\n\t\t * source using this parameter (use aData if you want to pass data in you\n\t\t * already have). Simply provide a url a JSON object can be obtained from.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxSource\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxSource\": null,\n\t\n\t\n\t\t/**\n\t\t * This initialisation variable allows you to specify exactly where in the\n\t\t * DOM you want DataTables to inject the various controls it adds to the page\n\t\t * (for example you might want the pagination controls at the top of the\n\t\t * table). DIV elements (with or without a custom class) can also be added to\n\t\t * aid styling. The follow syntax is used:\n\t\t *   <ul>\n\t\t *     <li>The following options are allowed:\n\t\t *       <ul>\n\t\t *         <li>'l' - Length changing</li>\n\t\t *         <li>'f' - Filtering input</li>\n\t\t *         <li>'t' - The table!</li>\n\t\t *         <li>'i' - Information</li>\n\t\t *         <li>'p' - Pagination</li>\n\t\t *         <li>'r' - pRocessing</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following constants are allowed:\n\t\t *       <ul>\n\t\t *         <li>'H' - jQueryUI theme \"header\" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>\n\t\t *         <li>'F' - jQueryUI theme \"footer\" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following syntax is expected:\n\t\t *       <ul>\n\t\t *         <li>'&lt;' and '&gt;' - div elements</li>\n\t\t *         <li>'&lt;\"class\" and '&gt;' - div with a class</li>\n\t\t *         <li>'&lt;\"#id\" and '&gt;' - div with an ID</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>Examples:\n\t\t *       <ul>\n\t\t *         <li>'&lt;\"wrapper\"flipt&gt;'</li>\n\t\t *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *   </ul>\n\t\t *  @type string\n\t\t *  @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>\n\t\t *    <\"H\"lfr>t<\"F\"ip> <i>(when `jQueryUI` is true)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.dom\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"dom\": '&lt;\"top\"i&gt;rt&lt;\"bottom\"flp&gt;&lt;\"clear\"&gt;'\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDom\": \"lfrtip\",\n\t\n\t\n\t\t/**\n\t\t * Search delay option. This will throttle full table searches that use the\n\t\t * DataTables provided search input element (it does not effect calls to\n\t\t * `dt-api search()`, providing a delay before the search is made.\n\t\t *  @type integer\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.searchDelay\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searchDelay\": 200\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\n\t\t/**\n\t\t * DataTables features six different built-in options for the buttons to\n\t\t * display for pagination control:\n\t\t *\n\t\t * * `numbers` - Page number buttons only\n\t\t * * `simple` - 'Previous' and 'Next' buttons only\n\t\t * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers\n\t\t * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons\n\t\t * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers\n\t\t * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers\n\t\t *  \n\t\t * Further methods can be added using {@link DataTable.ext.oPagination}.\n\t\t *  @type string\n\t\t *  @default simple_numbers\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pagingType\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pagingType\": \"full_numbers\"\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"sPaginationType\": \"simple_numbers\",\n\t\n\t\n\t\t/**\n\t\t * Enable horizontal scrolling. When a table is too wide to fit into a\n\t\t * certain layout, or you have a large number of columns in the table, you\n\t\t * can enable x-scrolling to show the table in a viewport, which can be\n\t\t * scrolled. This property can be `true` which will allow the table to\n\t\t * scroll horizontally when needed, or any CSS unit, or a number (in which\n\t\t * case it will be treated as a pixel measurement). Setting as simply `true`\n\t\t * is recommended.\n\t\t *  @type boolean|string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollX\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": true,\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollX\": \"\",\n\t\n\t\n\t\t/**\n\t\t * This property can be used to force a DataTable to use more width than it\n\t\t * might otherwise do when x-scrolling is enabled. For example if you have a\n\t\t * table which requires to be well spaced, this parameter is useful for\n\t\t * \"over-sizing\" the table, and thus forcing scrolling. This property can by\n\t\t * any CSS unit, or a number (in which case it will be treated as a pixel\n\t\t * measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollXInner\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": \"100%\",\n\t\t *        \"scrollXInner\": \"110%\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollXInner\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Enable vertical scrolling. Vertical scrolling will constrain the DataTable\n\t\t * to the given height, and enable scrolling for any data which overflows the\n\t\t * current viewport. This can be used as an alternative to paging to display\n\t\t * a lot of data in a small area (although paging and scrolling can both be\n\t\t * enabled at the same time). This property can be any CSS unit, or a number\n\t\t * (in which case it will be treated as a pixel measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollY\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollY\": \"\",\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * Set the HTTP method that is used to make the Ajax call for server-side\n\t\t * processing or Ajax sourced data.\n\t\t *  @type string\n\t\t *  @default GET\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverMethod\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sServerMethod\": \"GET\",\n\t\n\t\n\t\t/**\n\t\t * DataTables makes use of renderers when displaying HTML elements for\n\t\t * a table. These renderers can be added or modified by plug-ins to\n\t\t * generate suitable mark-up for a site. For example the Bootstrap\n\t\t * integration plug-in for DataTables uses a paging button renderer to\n\t\t * display pagination buttons in the mark-up required by Bootstrap.\n\t\t *\n\t\t * For further information about the renderers available see\n\t\t * DataTable.ext.renderer\n\t\t *  @type string|object\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.renderer\n\t\t *\n\t\t */\n\t\t\"renderer\": null,\n\t\n\t\n\t\t/**\n\t\t * Set the data property name that DataTables should use to get a row's id\n\t\t * to set as the `id` property in the node.\n\t\t *  @type string\n\t\t *  @default DT_RowId\n\t\t *\n\t\t *  @name DataTable.defaults.rowId\n\t\t */\n\t\t\"rowId\": \"DT_RowId\"\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults );\n\t\n\t\n\t\n\t/*\n\t * Developer note - See note in model.defaults.js about the use of Hungarian\n\t * notation and camel case.\n\t */\n\t\n\t/**\n\t * Column options that can be given to DataTables at initialisation time.\n\t *  @namespace\n\t */\n\tDataTable.defaults.column = {\n\t\t/**\n\t\t * Define which column(s) an order will occur on for this column. This\n\t\t * allows a column's ordering to take multiple columns into account when\n\t\t * doing a sort or use the data from a different column. For example first\n\t\t * name / last name columns make sense to do a multi-column sort over the\n\t\t * two columns.\n\t\t *  @type array|int\n\t\t *  @default null <i>Takes the value of the column index automatically</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderData\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderData\": [ 0, 1 ], \"targets\": [ 0 ] },\n\t\t *          { \"orderData\": [ 1, 0 ], \"targets\": [ 1 ] },\n\t\t *          { \"orderData\": 2, \"targets\": [ 2 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderData\": [ 0, 1 ] },\n\t\t *          { \"orderData\": [ 1, 0 ] },\n\t\t *          { \"orderData\": 2 },\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aDataSort\": null,\n\t\t\"iDataSort\": -1,\n\t\n\t\n\t\t/**\n\t\t * You can control the default ordering direction, and even alter the\n\t\t * behaviour of the sort handler (i.e. only allow ascending ordering etc)\n\t\t * using this parameter.\n\t\t *  @type array\n\t\t *  @default [ 'asc', 'desc' ]\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderSequence\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderSequence\": [ \"asc\" ], \"targets\": [ 1 ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ], \"targets\": [ 2 ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ], \"targets\": [ 3 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          { \"orderSequence\": [ \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ] },\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"asSorting\": [ 'asc', 'desc' ],\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering on the data in this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.searchable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"searchable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"searchable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSearchable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable ordering on this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.visible\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"visible\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"visible\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bVisible\": true,\n\t\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} td The TD node that has been created\n\t\t *  @param {*} cellData The Data for the cell\n\t\t *  @param {array|object} rowData The data for the whole row\n\t\t *  @param {int} row The row index for the aoData data store\n\t\t *  @param {int} col The column index for aoColumns\n\t\t *\n\t\t *  @name DataTable.defaults.column.createdCell\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [3],\n\t\t *          \"createdCell\": function (td, cellData, rowData, row, col) {\n\t\t *            if ( cellData == \"1.7\" ) {\n\t\t *              $(td).css('color', 'blue')\n\t\t *            }\n\t\t *          }\n\t\t *        } ]\n\t\t *      });\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter has been replaced by `data` in DataTables to ensure naming\n\t\t * consistency. `dataProp` can still be used, as there is backwards\n\t\t * compatibility in DataTables for this option, but it is strongly\n\t\t * recommended that you use `data` in preference to `dataProp`.\n\t\t *  @name DataTable.defaults.column.dataProp\n\t\t */\n\t\n\t\n\t\t/**\n\t\t * This property can be used to read data from any data source property,\n\t\t * including deeply nested objects / properties. `data` can be given in a\n\t\t * number of different ways which effect its behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object. Note that\n\t\t *      function notation is recommended for use in `render` rather than\n\t\t *      `data` as it is much simpler to use as a renderer.\n\t\t * * `null` - use the original data source for the row rather than plucking\n\t\t *   data directly from it. This action has effects on two other\n\t\t *   initialisation options:\n\t\t *    * `defaultContent` - When null is given as the `data` option and\n\t\t *      `defaultContent` is specified for the column, the value defined by\n\t\t *      `defaultContent` will be used for the cell.\n\t\t *    * `render` - When null is used for the `data` option and the `render`\n\t\t *      option is specified for the column, the whole data source for the\n\t\t *      row is used for the renderer.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * `{array|object}` The data source for the row\n\t\t *      * `{string}` The type call data requested - this will be 'set' when\n\t\t *        setting data or 'filter', 'display', 'type', 'sort' or undefined\n\t\t *        when gathering data. Note that when `undefined` is given for the\n\t\t *        type DataTables expects to get the raw data for the object back<\n\t\t *      * `{*}` Data to set when the second parameter is 'set'.\n\t\t *    * Return:\n\t\t *      * The return value from the function is not required when 'set' is\n\t\t *        the type of call, but otherwise the return is what will be used\n\t\t *        for the data requested.\n\t\t *\n\t\t * Note that `data` is a getter and setter option. If you just require\n\t\t * formatting of data for output, you will likely want to use `render` which\n\t\t * is simply a getter and thus simpler to use.\n\t\t *\n\t\t * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The\n\t\t * name change reflects the flexibility of this property and is consistent\n\t\t * with the naming of mRender. If 'mDataProp' is given, then it will still\n\t\t * be used by DataTables, as it automatically maps the old name to the new\n\t\t * if required.\n\t\t *\n\t\t *  @type string|int|function|null\n\t\t *  @default null <i>Use automatically calculated column index</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.data\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Read table data from objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {value},\n\t\t *    //      \"version\": {value},\n\t\t *    //      \"grade\": {value}\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/objects.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform\" },\n\t\t *          { \"data\": \"version\" },\n\t\t *          { \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Read information from deeply nested objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {\n\t\t *    //         \"inner\": {value}\n\t\t *    //      },\n\t\t *    //      \"details\": [\n\t\t *    //         {value}, {value}\n\t\t *    //      ]\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform.inner\" },\n\t\t *          { \"data\": \"details.0\" },\n\t\t *          { \"data\": \"details.1\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `data` as a function to provide different information for\n\t\t *    // sorting, filtering and display. In this case, currency (price)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": function ( source, type, val ) {\n\t\t *            if (type === 'set') {\n\t\t *              source.price = val;\n\t\t *              // Store the computed display and filter values for efficiency\n\t\t *              source.price_display = val==\"\" ? \"\" : \"$\"+numberFormat(val);\n\t\t *              source.price_filter  = val==\"\" ? \"\" : \"$\"+numberFormat(val)+\" \"+val;\n\t\t *              return;\n\t\t *            }\n\t\t *            else if (type === 'display') {\n\t\t *              return source.price_display;\n\t\t *            }\n\t\t *            else if (type === 'filter') {\n\t\t *              return source.price_filter;\n\t\t *            }\n\t\t *            // 'sort', 'type' and undefined all just use the integer\n\t\t *            return source.price;\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using default content\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null,\n\t\t *          \"defaultContent\": \"Click to edit\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using array notation - outputting a list from an array\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"name[, ]\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\n\t\t/**\n\t\t * This property is the rendering partner to `data` and it is suggested that\n\t\t * when you want to manipulate data for display (including filtering,\n\t\t * sorting etc) without altering the underlying data for the table, use this\n\t\t * property. `render` can be considered to be the the read only companion to\n\t\t * `data` which is read / write (then as such more complex). Like `data`\n\t\t * this option can be given in a number of different ways to effect its\n\t\t * behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object.\n\t\t * * `object` - use different data for the different data types requested by\n\t\t *   DataTables ('filter', 'display', 'type' or 'sort'). The property names\n\t\t *   of the object is the data type the property refers to and the value can\n\t\t *   defined using an integer, string or function using the same rules as\n\t\t *   `render` normally does. Note that an `_` option _must_ be specified.\n\t\t *   This is the default value to use if you haven't specified a value for\n\t\t *   the data type requested by DataTables.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * {array|object} The data source for the row (based on `data`)\n\t\t *      * {string} The type call data requested - this will be 'filter',\n\t\t *        'display', 'type' or 'sort'.\n\t\t *      * {array|object} The full data source for the row (not based on\n\t\t *        `data`)\n\t\t *    * Return:\n\t\t *      * The return value from the function is what will be used for the\n\t\t *        data requested.\n\t\t *\n\t\t *  @type string|int|function|object|null\n\t\t *  @default null Use the data source value.\n\t\t *\n\t\t *  @name DataTable.defaults.column.render\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Create a comma separated list from an array of objects\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          {\n\t\t *            \"data\": \"platform\",\n\t\t *            \"render\": \"[, ].name\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Execute a function to obtain data\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": \"browserName()\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // As an object, extracting different data for the different types\n\t\t *    // This would be used with a data source such as:\n\t\t *    //   { \"phone\": 5552368, \"phone_filter\": \"5552368 555-2368\", \"phone_display\": \"555-2368\" }\n\t\t *    // Here the `phone` integer is used for sorting and type detection, while `phone_filter`\n\t\t *    // (which has both forms) is used for filtering for if a user inputs either format, while\n\t\t *    // the formatted phone number is the one that is shown in the table.\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": {\n\t\t *            \"_\": \"phone\",\n\t\t *            \"filter\": \"phone_filter\",\n\t\t *            \"display\": \"phone_display\"\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Use as a function to create a link from the data source\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"download_link\",\n\t\t *          \"render\": function ( data, type, full ) {\n\t\t *            return '<a href=\"'+data+'\">Download</a>';\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\n\t\t/**\n\t\t * Change the cell type created for the column - either TD cells or TH cells. This\n\t\t * can be useful as TH cells have semantic meaning in the table body, allowing them\n\t\t * to act as a header for a row (you may wish to add scope='row' to the TH elements).\n\t\t *  @type string\n\t\t *  @default td\n\t\t *\n\t\t *  @name DataTable.defaults.column.cellType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Make the first column use TH cells\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"cellType\": \"th\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sCellType\": \"td\",\n\t\n\t\n\t\t/**\n\t\t * Class to give to each cell in this column.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.class\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"class\": \"my_class\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"class\": \"my_class\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sClass\": \"\",\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t * Generally you shouldn't need this!\n\t\t *  @type string\n\t\t *  @default <i>Empty string<i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.contentPadding\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"contentPadding\": \"mmm\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sContentPadding\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because `data`\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.column.defaultContent\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\",\n\t\t *            \"targets\": [ -1 ]\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter is only used in DataTables' server-side processing. It can\n\t\t * be exceptionally useful to know what columns are being displayed on the\n\t\t * client side, and to map these to database fields. When defined, the names\n\t\t * also allow DataTables to reorder information from the server if it comes\n\t\t * back in an unexpected order (i.e. if you switch your columns around on the\n\t\t * client-side, your server-side code does not also need updating).\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.name\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"name\": \"engine\", \"targets\": [ 0 ] },\n\t\t *          { \"name\": \"browser\", \"targets\": [ 1 ] },\n\t\t *          { \"name\": \"platform\", \"targets\": [ 2 ] },\n\t\t *          { \"name\": \"version\", \"targets\": [ 3 ] },\n\t\t *          { \"name\": \"grade\", \"targets\": [ 4 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"name\": \"engine\" },\n\t\t *          { \"name\": \"browser\" },\n\t\t *          { \"name\": \"platform\" },\n\t\t *          { \"name\": \"version\" },\n\t\t *          { \"name\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sName\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Defines a data source type for the ordering which can be used to read\n\t\t * real-time information from the table (updating the internally cached\n\t\t * version) prior to ordering. This allows ordering to occur on user\n\t\t * editable elements such as form inputs.\n\t\t *  @type string\n\t\t *  @default std\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderDataType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderDataType\": \"dom-text\", \"targets\": [ 2, 3 ] },\n\t\t *          { \"type\": \"numeric\", \"targets\": [ 3 ] },\n\t\t *          { \"orderDataType\": \"dom-select\", \"targets\": [ 4 ] },\n\t\t *          { \"orderDataType\": \"dom-checkbox\", \"targets\": [ 5 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          { \"orderDataType\": \"dom-text\" },\n\t\t *          { \"orderDataType\": \"dom-text\", \"type\": \"numeric\" },\n\t\t *          { \"orderDataType\": \"dom-select\" },\n\t\t *          { \"orderDataType\": \"dom-checkbox\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sSortDataType\": \"std\",\n\t\n\t\n\t\t/**\n\t\t * The title of this column.\n\t\t *  @type string\n\t\t *  @default null <i>Derived from the 'TH' value for this column in the\n\t\t *    original HTML table.</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.title\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"title\": \"My column title\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"My column title\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\n\t\t/**\n\t\t * The type allows you to specify how the data for this column will be\n\t\t * ordered. Four types (string, numeric, date and html (which will strip\n\t\t * HTML tags before ordering)) are currently available. Note that only date\n\t\t * formats understood by Javascript's Date() object will be accepted as type\n\t\t * date. For example: \"Mar 26, 2008 5:03 PM\". May take the values: 'string',\n\t\t * 'numeric', 'date' or 'html' (by default). Further types can be adding\n\t\t * through plug-ins.\n\t\t *  @type string\n\t\t *  @default null <i>Auto-detected from raw data</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.type\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"type\": \"html\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"type\": \"html\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\n\t\t/**\n\t\t * Defining the width of the column, this parameter may take any CSS value\n\t\t * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not\n\t\t * been given a specific width through this interface ensuring that the table\n\t\t * remains readable.\n\t\t *  @type string\n\t\t *  @default null <i>Automatic</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.width\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"width\": \"20%\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"width\": \"20%\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sWidth\": null\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults.column );\n\t\n\t\n\t\n\t/**\n\t * DataTables settings object - this holds all the information needed for a\n\t * given table, including configuration, data and current application of the\n\t * table options. DataTables does not have a single instance for each DataTable\n\t * with the settings attached to that instance, but rather instances of the\n\t * DataTable \"class\" are created on-the-fly as needed (typically by a\n\t * $().dataTable() call) and the settings object is then applied to that\n\t * instance.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults} but this\n\t * one is the internal data store for DataTables's cache of columns. It should\n\t * NOT be manipulated outside of DataTables. Any configuration should be done\n\t * through the initialisation options.\n\t *  @namespace\n\t *  @todo Really should attach the settings object to individual instances so we\n\t *    don't need to create new instances on each $().dataTable() call (if the\n\t *    table already exists). It would also save passing oSettings around and\n\t *    into every single function. However, this is a very significant\n\t *    architecture change for DataTables and will almost certainly break\n\t *    backwards compatibility with older installations. This is something that\n\t *    will be done in 2.0.\n\t */\n\tDataTable.models.oSettings = {\n\t\t/**\n\t\t * Primary features of DataTables and their enablement state.\n\t\t *  @namespace\n\t\t */\n\t\t\"oFeatures\": {\n\t\n\t\t\t/**\n\t\t\t * Flag to say if DataTables should automatically try to calculate the\n\t\t\t * optimum table and columns widths (true) or not (false).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bAutoWidth\": null,\n\t\n\t\t\t/**\n\t\t\t * Delay the creation of TR and TD elements until they are actually\n\t\t\t * needed by a driven page draw. This can give a significant speed\n\t\t\t * increase for Ajax source and Javascript source data, but makes no\n\t\t\t * difference at all for DOM and server-side processing tables.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bDeferRender\": null,\n\t\n\t\t\t/**\n\t\t\t * Enable filtering on the table or not. Note that if this is disabled\n\t\t\t * then there is no filtering at all on the table, including fnFilter.\n\t\t\t * To just remove the filtering input use sDom and remove the 'f' option.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bFilter\": null,\n\t\n\t\t\t/**\n\t\t\t * Table information element (the 'Showing x of y records' div) enable\n\t\t\t * flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bInfo\": null,\n\t\n\t\t\t/**\n\t\t\t * Present a user control allowing the end user to change the page size\n\t\t\t * when pagination is enabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bLengthChange\": null,\n\t\n\t\t\t/**\n\t\t\t * Pagination enabled or not. Note that if this is disabled then length\n\t\t\t * changing must also be disabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bPaginate\": null,\n\t\n\t\t\t/**\n\t\t\t * Processing indicator enable flag whenever DataTables is enacting a\n\t\t\t * user request - typically an Ajax request for server-side processing.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bProcessing\": null,\n\t\n\t\t\t/**\n\t\t\t * Server-side processing enabled flag - when enabled DataTables will\n\t\t\t * get all data from the server for every draw - there is no filtering,\n\t\t\t * sorting or paging done on the client-side.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bServerSide\": null,\n\t\n\t\t\t/**\n\t\t\t * Sorting enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSort\": null,\n\t\n\t\t\t/**\n\t\t\t * Multi-column sorting\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortMulti\": null,\n\t\n\t\t\t/**\n\t\t\t * Apply a class to the columns which are being sorted to provide a\n\t\t\t * visual highlight or not. This can slow things down when enabled since\n\t\t\t * there is a lot of DOM interaction.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortClasses\": null,\n\t\n\t\t\t/**\n\t\t\t * State saving enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bStateSave\": null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Scrolling settings for a table.\n\t\t *  @namespace\n\t\t */\n\t\t\"oScroll\": {\n\t\t\t/**\n\t\t\t * When the table is shorter in height than sScrollY, collapse the\n\t\t\t * table container down to the height of the table (when true).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bCollapse\": null,\n\t\n\t\t\t/**\n\t\t\t * Width of the scrollbar for the web-browser's platform. Calculated\n\t\t\t * during table initialisation.\n\t\t\t *  @type int\n\t\t\t *  @default 0\n\t\t\t */\n\t\t\t\"iBarWidth\": 0,\n\t\n\t\t\t/**\n\t\t\t * Viewport width for horizontal scrolling. Horizontal scrolling is\n\t\t\t * disabled if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sX\": null,\n\t\n\t\t\t/**\n\t\t\t * Width to expand the table to when using x-scrolling. Typically you\n\t\t\t * should not need to use this.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t *  @deprecated\n\t\t\t */\n\t\t\t\"sXInner\": null,\n\t\n\t\t\t/**\n\t\t\t * Viewport height for vertical scrolling. Vertical scrolling is disabled\n\t\t\t * if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sY\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Language information for the table.\n\t\t *  @namespace\n\t\t *  @extends DataTable.defaults.oLanguage\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Information callback function. See\n\t\t\t * {@link DataTable.defaults.fnInfoCallback}\n\t\t\t *  @type function\n\t\t\t *  @default null\n\t\t\t */\n\t\t\t\"fnInfoCallback\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Browser support parameters\n\t\t *  @namespace\n\t\t */\n\t\t\"oBrowser\": {\n\t\t\t/**\n\t\t\t * Indicate if the browser incorrectly calculates width:100% inside a\n\t\t\t * scrolling element (IE6/7)\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollOversize\": false,\n\t\n\t\t\t/**\n\t\t\t * Determine if the vertical scrollbar is on the right or left of the\n\t\t\t * scrolling container - needed for rtl language layout, although not\n\t\t\t * all browsers move the scrollbar (Safari).\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollbarLeft\": false,\n\t\n\t\t\t/**\n\t\t\t * Flag for if `getBoundingClientRect` is fully supported or not\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bBounding\": false,\n\t\n\t\t\t/**\n\t\t\t * Browser scrollbar width\n\t\t\t *  @type integer\n\t\t\t *  @default 0\n\t\t\t */\n\t\t\t\"barWidth\": 0\n\t\t},\n\t\n\t\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * Array referencing the nodes which are used for the features. The\n\t\t * parameters of this object match what is allowed by sDom - i.e.\n\t\t *   <ul>\n\t\t *     <li>'l' - Length changing</li>\n\t\t *     <li>'f' - Filtering input</li>\n\t\t *     <li>'t' - The table!</li>\n\t\t *     <li>'i' - Information</li>\n\t\t *     <li>'p' - Pagination</li>\n\t\t *     <li>'r' - pRocessing</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aanFeatures\": [],\n\t\n\t\t/**\n\t\t * Store data information - see {@link DataTable.models.oRow} for detailed\n\t\t * information.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoData\": [],\n\t\n\t\t/**\n\t\t * Array of indexes which are in the current display (after filtering etc)\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplay\": [],\n\t\n\t\t/**\n\t\t * Array of indexes for display - no filtering\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplayMaster\": [],\n\t\n\t\t/**\n\t\t * Map of row ids to data indexes\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"aIds\": {},\n\t\n\t\t/**\n\t\t * Store information about each column that is in use\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoColumns\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's header\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeader\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's footer\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooter\": [],\n\t\n\t\t/**\n\t\t * Store the applied global search information in case we want to force a\n\t\t * research or compare the old search to a new one.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t */\n\t\t\"oPreviousSearch\": {},\n\t\n\t\t/**\n\t\t * Store the applied search for each column - see\n\t\t * {@link DataTable.models.oSearch} for the format that is used for the\n\t\t * filtering information for each column.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreSearchCols\": [],\n\t\n\t\t/**\n\t\t * Sorting that is applied to the table. Note that the inner arrays are\n\t\t * used in the following manner:\n\t\t * <ul>\n\t\t *   <li>Index 0 - column number</li>\n\t\t *   <li>Index 1 - current sorting direction</li>\n\t\t * </ul>\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @todo These inner arrays should really be objects\n\t\t */\n\t\t\"aaSorting\": null,\n\t\n\t\t/**\n\t\t * Sorting that is always applied to the table (i.e. prefixed in front of\n\t\t * aaSorting).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\t/**\n\t\t * Classes to use for the striping of a table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asStripeClasses\": null,\n\t\n\t\t/**\n\t\t * If restoring a table - we should restore its striping classes as well\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asDestroyStripes\": [],\n\t\n\t\t/**\n\t\t * If restoring a table - we should restore its width\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"sDestroyWidth\": 0,\n\t\n\t\t/**\n\t\t * Callback functions array for every time a row is inserted (i.e. on a draw).\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for the header on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeaderCallback\": [],\n\t\n\t\t/**\n\t\t * Callback function for the footer on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooterCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for draw callback functions\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for row created function\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCreatedCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for just before the table is redrawn. A return of\n\t\t * false will be used to cancel the draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for when the table has been initialised.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoInitComplete\": [],\n\t\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings to be stored for state saving, prior to\n\t\t * saving state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSaveParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings that have been stored for state saving\n\t\t * prior to using the stored values to restore the state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoadParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for operating on the settings object once the saved state has been\n\t\t * loaded\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoaded\": [],\n\t\n\t\t/**\n\t\t * Cache the table ID for quick access\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sTableId\": \"\",\n\t\n\t\t/**\n\t\t * The TABLE node for the main table\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTable\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the thead element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTHead\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tfoot element - if it exists\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTFoot\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tbody element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTBody\": null,\n\t\n\t\t/**\n\t\t * Cache the wrapper node (contains all DataTables controlled elements)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTableWrapper\": null,\n\t\n\t\t/**\n\t\t * Indicate if when using server-side processing the loading of data\n\t\t * should be deferred until the second draw.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDeferLoading\": false,\n\t\n\t\t/**\n\t\t * Indicate if all required information has been read in\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bInitialised\": false,\n\t\n\t\t/**\n\t\t * Information about open rows. Each object in the array has the parameters\n\t\t * 'nTr' and 'nParent'\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoOpenRows\": [],\n\t\n\t\t/**\n\t\t * Dictate the positioning of DataTables' control elements - see\n\t\t * {@link DataTable.model.oInit.sDom}.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDom\": null,\n\t\n\t\t/**\n\t\t * Search delay (in mS)\n\t\t *  @type integer\n\t\t *  @default null\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\t/**\n\t\t * Which type of pagination should be used.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default two_button\n\t\t */\n\t\t\"sPaginationType\": \"two_button\",\n\t\n\t\t/**\n\t\t * The state duration (for `stateSave`) in seconds.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iStateDuration\": 0,\n\t\n\t\t/**\n\t\t * Array of callback functions for state saving. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the JSON string to save that has been thus far created. Returns\n\t\t *       a JSON string to be inserted into a json object\n\t\t *       (i.e. '\"param\": [ 0, 1, 2]')</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSave\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for state loading. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the object stored. May return false to cancel state loading</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoad\": [],\n\t\n\t\t/**\n\t\t * State that was saved. Useful for back reference\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oSavedState\": null,\n\t\n\t\t/**\n\t\t * State that was loaded. Useful for back reference\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oLoadedState\": null,\n\t\n\t\t/**\n\t\t * Source url for AJAX data for the table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sAjaxSource\": null,\n\t\n\t\t/**\n\t\t * Property from a given object from which to read the table data from. This\n\t\t * can be an empty string (when not server-side processing), in which case\n\t\t * it is  assumed an an array is given directly.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sAjaxDataProp\": null,\n\t\n\t\t/**\n\t\t * The last jQuery XHR object that was used for server-side data gathering.\n\t\t * This can be used for working with the XHR information in one of the\n\t\t * callbacks\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"jqXHR\": null,\n\t\n\t\t/**\n\t\t * JSON returned from the server in the last Ajax request\n\t\t *  @type object\n\t\t *  @default undefined\n\t\t */\n\t\t\"json\": undefined,\n\t\n\t\t/**\n\t\t * Data submitted as part of the last Ajax request\n\t\t *  @type object\n\t\t *  @default undefined\n\t\t */\n\t\t\"oAjaxData\": undefined,\n\t\n\t\t/**\n\t\t * Function to get the server-side data.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnServerData\": null,\n\t\n\t\t/**\n\t\t * Functions which are called prior to sending an Ajax request so extra\n\t\t * parameters can easily be sent to the server\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoServerParams\": [],\n\t\n\t\t/**\n\t\t * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if\n\t\t * required).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sServerMethod\": null,\n\t\n\t\t/**\n\t\t * Format numbers for display.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnFormatNumber\": null,\n\t\n\t\t/**\n\t\t * List of options that can be used for the user selectable length menu.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLengthMenu\": null,\n\t\n\t\t/**\n\t\t * Counter for the draws that the table does. Also used as a tracker for\n\t\t * server-side processing\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iDraw\": 0,\n\t\n\t\t/**\n\t\t * Indicate if a redraw is being done - useful for Ajax\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDrawing\": false,\n\t\n\t\t/**\n\t\t * Draw index (iDraw) of the last error when parsing the returned data\n\t\t *  @type int\n\t\t *  @default -1\n\t\t */\n\t\t\"iDrawError\": -1,\n\t\n\t\t/**\n\t\t * Paging display length\n\t\t *  @type int\n\t\t *  @default 10\n\t\t */\n\t\t\"_iDisplayLength\": 10,\n\t\n\t\t/**\n\t\t * Paging start point - aiDisplay index\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"_iDisplayStart\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the result set\n\t\t * (i.e. before filtering), Use fnRecordsTotal rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsTotal\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the current display set\n\t\t * (i.e. after filtering). Use fnRecordsDisplay rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type boolean\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsDisplay\": 0,\n\t\n\t\t/**\n\t\t * The classes to use for the table\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if filtering has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bFiltered\": false,\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if sorting has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bSorted\": false,\n\t\n\t\t/**\n\t\t * Indicate that if multiple rows are in the header and there is more than\n\t\t * one unique cell per column, if the top one (true) or bottom one (false)\n\t\t * should be used for sorting / title by DataTables.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortCellsTop\": null,\n\t\n\t\t/**\n\t\t * Initialisation object that is used for the table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInit\": null,\n\t\n\t\t/**\n\t\t * Destroy callback functions - for plug-ins to attach themselves to the\n\t\t * destroy so they can clean up markup and events.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDestroyCallback\": [],\n\t\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, before filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsTotal\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsTotal * 1 :\n\t\t\t\tthis.aiDisplayMaster.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, after filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsDisplay\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsDisplay * 1 :\n\t\t\t\tthis.aiDisplay.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the display end point - aiDisplay index\n\t\t *  @type function\n\t\t */\n\t\t\"fnDisplayEnd\": function ()\n\t\t{\n\t\t\tvar\n\t\t\t\tlen      = this._iDisplayLength,\n\t\t\t\tstart    = this._iDisplayStart,\n\t\t\t\tcalc     = start + len,\n\t\t\t\trecords  = this.aiDisplay.length,\n\t\t\t\tfeatures = this.oFeatures,\n\t\t\t\tpaginate = features.bPaginate;\n\t\n\t\t\tif ( features.bServerSide ) {\n\t\t\t\treturn paginate === false || len === -1 ?\n\t\t\t\t\tstart + records :\n\t\t\t\t\tMath.min( start+len, this._iRecordsDisplay );\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn ! paginate || calc>records || len===-1 ?\n\t\t\t\t\trecords :\n\t\t\t\t\tcalc;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * The DataTables object for this table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInstance\": null,\n\t\n\t\t/**\n\t\t * Unique identifier for each instance of the DataTables object. If there\n\t\t * is an ID on the table node, then it takes that value, otherwise an\n\t\t * incrementing internal counter is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sInstance\": null,\n\t\n\t\t/**\n\t\t * tabindex attribute value that is added to DataTables control elements, allowing\n\t\t * keyboard navigation of the table and its controls.\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollHead\": null,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollFoot\": null,\n\t\n\t\t/**\n\t\t * Last applied sort\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLastSort\": [],\n\t\n\t\t/**\n\t\t * Stored plug-in instances\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oPlugins\": {},\n\t\n\t\t/**\n\t\t * Function used to get a row's id from the row's data\n\t\t *  @type function\n\t\t *  @default null\n\t\t */\n\t\t\"rowIdFn\": null,\n\t\n\t\t/**\n\t\t * Data location where to store a row's id\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"rowId\": null\n\t};\n\t\n\t/**\n\t * Extension object for DataTables that is used to provide all extension\n\t * options.\n\t *\n\t * Note that the `DataTable.ext` object is available through\n\t * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is\n\t * also aliased to `jQuery.fn.dataTableExt` for historic reasons.\n\t *  @namespace\n\t *  @extends DataTable.models.ext\n\t */\n\t\n\t\n\t/**\n\t * DataTables extensions\n\t * \n\t * This namespace acts as a collection area for plug-ins that can be used to\n\t * extend DataTables capabilities. Indeed many of the build in methods\n\t * use this method to provide their own capabilities (sorting methods for\n\t * example).\n\t *\n\t * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy\n\t * reasons\n\t *\n\t *  @namespace\n\t */\n\tDataTable.ext = _ext = {\n\t\t/**\n\t\t * Buttons. For use with the Buttons extension for DataTables. This is\n\t\t * defined here so other extensions can define buttons regardless of load\n\t\t * order. It is _not_ used by DataTables core.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tbuttons: {},\n\t\n\t\n\t\t/**\n\t\t * Element class names\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tclasses: {},\n\t\n\t\n\t\t/**\n\t\t * DataTables build type (expanded by the download builder)\n\t\t *\n\t\t *  @type string\n\t\t */\n\t\tbuild:\"bs5/jszip-3.10.1/pdfmake-0.2.7/dt-1.13.8/af-2.6.0/b-2.4.2/b-colvis-2.4.2/b-html5-2.4.2/b-print-2.4.2/cr-1.7.0/date-1.5.1/fc-4.3.0/fh-3.4.0/kt-2.11.0/r-2.5.0/rg-1.4.1/rr-1.4.1/sc-2.3.0/sb-1.6.0/sp-2.2.0/sl-1.7.0/sr-1.3.0\",\n\t\n\t\n\t\t/**\n\t\t * Error reporting.\n\t\t * \n\t\t * How should DataTables report an error. Can take the value 'alert',\n\t\t * 'throw', 'none' or a function.\n\t\t *\n\t\t *  @type string|function\n\t\t *  @default alert\n\t\t */\n\t\terrMode: \"alert\",\n\t\n\t\n\t\t/**\n\t\t * Feature plug-ins.\n\t\t * \n\t\t * This is an array of objects which describe the feature plug-ins that are\n\t\t * available to DataTables. These feature plug-ins are then available for\n\t\t * use through the `dom` initialisation option.\n\t\t * \n\t\t * Each feature plug-in is described by an object which must have the\n\t\t * following properties:\n\t\t * \n\t\t * * `fnInit` - function that is used to initialise the plug-in,\n\t\t * * `cFeature` - a character so the feature can be enabled by the `dom`\n\t\t *   instillation option. This is case sensitive.\n\t\t *\n\t\t * The `fnInit` function has the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *\n\t\t * And the following return is expected:\n\t\t * \n\t\t * * {node|null} The element which contains your feature. Note that the\n\t\t *   return may also be void if your plug-in does not require to inject any\n\t\t *   DOM elements into DataTables control (`dom`) - for example this might\n\t\t *   be useful when developing a plug-in which allows table control via\n\t\t *   keyboard entry\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    $.fn.dataTable.ext.features.push( {\n\t\t *      \"fnInit\": function( oSettings ) {\n\t\t *        return new TableTools( { \"oDTSettings\": oSettings } );\n\t\t *      },\n\t\t *      \"cFeature\": \"T\"\n\t\t *    } );\n\t\t */\n\t\tfeature: [],\n\t\n\t\n\t\t/**\n\t\t * Row searching.\n\t\t * \n\t\t * This method of searching is complimentary to the default type based\n\t\t * searching, and a lot more comprehensive as it allows you complete control\n\t\t * over the searching logic. Each element in this array is a function\n\t\t * (parameters described below) that is called for every row in the table,\n\t\t * and your logic decides if it should be included in the searching data set\n\t\t * or not.\n\t\t *\n\t\t * Searching functions have the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{array|object}` Data for the row to be processed (same as the\n\t\t *    original format that was passed in as the data source, or an array\n\t\t *    from a DOM data source\n\t\t * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which\n\t\t *    can be useful to retrieve the `TR` element if you need DOM interaction.\n\t\t *\n\t\t * And the following return is expected:\n\t\t *\n\t\t * * {boolean} Include the row in the searched result set (true) or not\n\t\t *   (false)\n\t\t *\n\t\t * Note that as with the main search ability in DataTables, technically this\n\t\t * is \"filtering\", since it is subtractive. However, for consistency in\n\t\t * naming we call it searching here.\n\t\t *\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @example\n\t\t *    // The following example shows custom search being applied to the\n\t\t *    // fourth column (i.e. the data[3] index) based on two input values\n\t\t *    // from the end-user, matching the data in a certain range.\n\t\t *    $.fn.dataTable.ext.search.push(\n\t\t *      function( settings, data, dataIndex ) {\n\t\t *        var min = document.getElementById('min').value * 1;\n\t\t *        var max = document.getElementById('max').value * 1;\n\t\t *        var version = data[3] == \"-\" ? 0 : data[3]*1;\n\t\t *\n\t\t *        if ( min == \"\" && max == \"\" ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min == \"\" && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && \"\" == max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        return false;\n\t\t *      }\n\t\t *    );\n\t\t */\n\t\tsearch: [],\n\t\n\t\n\t\t/**\n\t\t * Selector extensions\n\t\t *\n\t\t * The `selector` option can be used to extend the options available for the\n\t\t * selector modifier options (`selector-modifier` object data type) that\n\t\t * each of the three built in selector types offer (row, column and cell +\n\t\t * their plural counterparts). For example the Select extension uses this\n\t\t * mechanism to provide an option to select only rows, columns and cells\n\t\t * that have been marked as selected by the end user (`{selected: true}`),\n\t\t * which can be used in conjunction with the existing built in selector\n\t\t * options.\n\t\t *\n\t\t * Each property is an array to which functions can be pushed. The functions\n\t\t * take three attributes:\n\t\t *\n\t\t * * Settings object for the host table\n\t\t * * Options object (`selector-modifier` object type)\n\t\t * * Array of selected item indexes\n\t\t *\n\t\t * The return is an array of the resulting item indexes after the custom\n\t\t * selector has been applied.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tselector: {\n\t\t\tcell: [],\n\t\t\tcolumn: [],\n\t\t\trow: []\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Internal functions, exposed for used in plug-ins.\n\t\t * \n\t\t * Please note that you should not need to use the internal methods for\n\t\t * anything other than a plug-in (and even then, try to avoid if possible).\n\t\t * The internal function may change between releases.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tinternal: {},\n\t\n\t\n\t\t/**\n\t\t * Legacy configuration options. Enable and disable legacy options that\n\t\t * are available in DataTables.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tlegacy: {\n\t\t\t/**\n\t\t\t * Enable / disable DataTables 1.9 compatible server-side processing\n\t\t\t * requests\n\t\t\t *\n\t\t\t *  @type boolean\n\t\t\t *  @default null\n\t\t\t */\n\t\t\tajax: null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Pagination plug-in methods.\n\t\t * \n\t\t * Each entry in this object is a function and defines which buttons should\n\t\t * be shown by the pagination rendering method that is used for the table:\n\t\t * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the\n\t\t * buttons are displayed in the document, while the functions here tell it\n\t\t * what buttons to display. This is done by returning an array of button\n\t\t * descriptions (what each button will do).\n\t\t *\n\t\t * Pagination types (the four built in options and any additional plug-in\n\t\t * options defined here) can be used through the `paginationType`\n\t\t * initialisation parameter.\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{int} page` The current page index\n\t\t * 2. `{int} pages` The number of pages in the table\n\t\t *\n\t\t * Each function is expected to return an array where each element of the\n\t\t * array can be one of:\n\t\t *\n\t\t * * `first` - Jump to first page when activated\n\t\t * * `last` - Jump to last page when activated\n\t\t * * `previous` - Show previous page when activated\n\t\t * * `next` - Show next page when activated\n\t\t * * `{int}` - Show page of the index given\n\t\t * * `{array}` - A nested array containing the above elements to add a\n\t\t *   containing 'DIV' element (might be useful for styling).\n\t\t *\n\t\t * Note that DataTables v1.9- used this object slightly differently whereby\n\t\t * an object with two functions would be defined for each plug-in. That\n\t\t * ability is still supported by DataTables 1.10+ to provide backwards\n\t\t * compatibility, but this option of use is now decremented and no longer\n\t\t * documented in DataTables 1.10+.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    // Show previous, next and current page buttons only\n\t\t *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {\n\t\t *      return [ 'previous', page, 'next' ];\n\t\t *    };\n\t\t */\n\t\tpager: {},\n\t\n\t\n\t\trenderer: {\n\t\t\tpageButton: {},\n\t\t\theader: {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Ordering plug-ins - custom data source\n\t\t * \n\t\t * The extension options for ordering of data available here is complimentary\n\t\t * to the default type based ordering that DataTables typically uses. It\n\t\t * allows much greater control over the the data that is being used to\n\t\t * order a column, but is necessarily therefore more complex.\n\t\t * \n\t\t * This type of ordering is useful if you want to do ordering based on data\n\t\t * live from the DOM (for example the contents of an 'input' element) rather\n\t\t * than just the static string that DataTables knows of.\n\t\t * \n\t\t * The way these plug-ins work is that you create an array of the values you\n\t\t * wish to be ordering for the column in question and then return that\n\t\t * array. The data in the array much be in the index order of the rows in\n\t\t * the table (not the currently ordering order!). Which order data gathering\n\t\t * function is run here depends on the `dt-init columns.orderDataType`\n\t\t * parameter that is used for the column (if any).\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{int}` Target column index\n\t\t *\n\t\t * Each function is expected to return an array:\n\t\t *\n\t\t * * `{array}` Data for the column to be ordering upon\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    // Ordering using `input` node values\n\t\t *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )\n\t\t *    {\n\t\t *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {\n\t\t *        return $('input', td).val();\n\t\t *      } );\n\t\t *    }\n\t\t */\n\t\torder: {},\n\t\n\t\n\t\t/**\n\t\t * Type based plug-ins.\n\t\t *\n\t\t * Each column in DataTables has a type assigned to it, either by automatic\n\t\t * detection or by direct assignment using the `type` option for the column.\n\t\t * The type of a column will effect how it is ordering and search (plug-ins\n\t\t * can also make use of the column type if required).\n\t\t *\n\t\t * @namespace\n\t\t */\n\t\ttype: {\n\t\t\t/**\n\t\t\t * Type detection functions.\n\t\t\t *\n\t\t\t * The functions defined in this object are used to automatically detect\n\t\t\t * a column's type, making initialisation of DataTables super easy, even\n\t\t\t * when complex data is in the table.\n\t\t\t *\n\t\t\t * The functions defined take two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be analysed\n\t\t     *  2. `{settings}` DataTables settings object. This can be used to\n\t\t     *     perform context specific type detection - for example detection\n\t\t     *     based on language settings such as using a comma for a decimal\n\t\t     *     place. Generally speaking the options from the settings will not\n\t\t     *     be required\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Data type detected, or null if unknown (and thus\n\t\t\t *   pass it on to the other type detection functions.\n\t\t\t *\n\t\t\t *  @type array\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Currency type detection plug-in:\n\t\t\t *    $.fn.dataTable.ext.type.detect.push(\n\t\t\t *      function ( data, settings ) {\n\t\t\t *        // Check the numeric part\n\t\t\t *        if ( ! data.substring(1).match(/[0-9]/) ) {\n\t\t\t *          return null;\n\t\t\t *        }\n\t\t\t *\n\t\t\t *        // Check prefixed by currency\n\t\t\t *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {\n\t\t\t *          return 'currency';\n\t\t\t *        }\n\t\t\t *        return null;\n\t\t\t *      }\n\t\t\t *    );\n\t\t\t */\n\t\t\tdetect: [],\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based search formatting.\n\t\t\t *\n\t\t\t * The type based searching functions can be used to pre-format the\n\t\t\t * data to be search on. For example, it can be used to strip HTML\n\t\t\t * tags or to de-format telephone numbers for numeric only searching.\n\t\t\t *\n\t\t\t * Note that is a search is not defined for a column of a given type,\n\t\t\t * no search formatting will be performed.\n\t\t\t * \n\t\t\t * Pre-processing of searching data plug-ins - When you assign the sType\n\t\t\t * for a column (or have it automatically detected for you by DataTables\n\t\t\t * or a type detection plug-in), you will typically be using this for\n\t\t\t * custom sorting, but it can also be used to provide custom searching\n\t\t\t * by allowing you to pre-processing the data and returning the data in\n\t\t\t * the format that should be searched upon. This is done by adding\n\t\t\t * functions this object with a parameter name which matches the sType\n\t\t\t * for that target column. This is the corollary of <i>afnSortData</i>\n\t\t\t * for searching data.\n\t\t\t *\n\t\t\t * The functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for searching\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Formatted string that will be used for the searching.\n\t\t\t *\n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {\n\t\t\t *      return d.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" );\n\t\t\t *    }\n\t\t\t */\n\t\t\tsearch: {},\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based ordering.\n\t\t\t *\n\t\t\t * The column type tells DataTables what ordering to apply to the table\n\t\t\t * when a column is sorted upon. The order for each type that is defined,\n\t\t\t * is defined by the functions available in this object.\n\t\t\t *\n\t\t\t * Each ordering option can be described by three properties added to\n\t\t\t * this object:\n\t\t\t *\n\t\t\t * * `{type}-pre` - Pre-formatting function\n\t\t\t * * `{type}-asc` - Ascending order function\n\t\t\t * * `{type}-desc` - Descending order function\n\t\t\t *\n\t\t\t * All three can be used together, only `{type}-pre` or only\n\t\t\t * `{type}-asc` and `{type}-desc` together. It is generally recommended\n\t\t\t * that only `{type}-pre` is used, as this provides the optimal\n\t\t\t * implementation in terms of speed, although the others are provided\n\t\t\t * for compatibility with existing Javascript sort functions.\n\t\t\t *\n\t\t\t * `{type}-pre`: Functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for ordering\n\t\t\t *\n\t\t\t * And return:\n\t\t\t *\n\t\t\t * * `{*}` Data to be sorted upon\n\t\t\t *\n\t\t\t * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort\n\t\t\t * functions, taking two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data to compare to the second parameter\n\t\t     *  2. `{*}` Data to compare to the first parameter\n\t\t\t *\n\t\t\t * And returning:\n\t\t\t *\n\t\t\t * * `{*}` Ordering match: <0 if first parameter should be sorted lower\n\t\t\t *   than the second parameter, ===0 if the two parameters are equal and\n\t\t\t *   >0 if the first parameter should be sorted height than the second\n\t\t\t *   parameter.\n\t\t\t * \n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Numeric ordering of formatted numbers with a pre-formatter\n\t\t\t *    $.extend( $.fn.dataTable.ext.type.order, {\n\t\t\t *      \"string-pre\": function(x) {\n\t\t\t *        a = (a === \"-\" || a === \"\") ? 0 : a.replace( /[^\\d\\-\\.]/g, \"\" );\n\t\t\t *        return parseFloat( a );\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Case-sensitive string ordering, with no pre-formatting method\n\t\t\t *    $.extend( $.fn.dataTable.ext.order, {\n\t\t\t *      \"string-case-asc\": function(x,y) {\n\t\t\t *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t\t *      },\n\t\t\t *      \"string-case-desc\": function(x,y) {\n\t\t\t *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t */\n\t\t\torder: {}\n\t\t},\n\t\n\t\t/**\n\t\t * Unique DataTables instance counter\n\t\t *\n\t\t * @type int\n\t\t * @private\n\t\t */\n\t\t_unique: 0,\n\t\n\t\n\t\t//\n\t\t// Depreciated\n\t\t// The following properties are retained for backwards compatibility only.\n\t\t// The should not be used in new projects and will be removed in a future\n\t\t// version\n\t\t//\n\t\n\t\t/**\n\t\t * Version check function.\n\t\t *  @type function\n\t\t *  @depreciated Since 1.10\n\t\t */\n\t\tfnVersionCheck: DataTable.fnVersionCheck,\n\t\n\t\n\t\t/**\n\t\t * Index for what 'this' index API functions should use\n\t\t *  @type int\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tiApiIndex: 0,\n\t\n\t\n\t\t/**\n\t\t * jQuery UI class container\n\t\t *  @type object\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\toJUIClasses: {},\n\t\n\t\n\t\t/**\n\t\t * Software version\n\t\t *  @type string\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tsVersion: DataTable.version\n\t};\n\t\n\t\n\t//\n\t// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts\n\t//\n\t$.extend( _ext, {\n\t\tafnFiltering: _ext.search,\n\t\taTypes:       _ext.type.detect,\n\t\tofnSearch:    _ext.type.search,\n\t\toSort:        _ext.type.order,\n\t\tafnSortData:  _ext.order,\n\t\taoFeatures:   _ext.feature,\n\t\toApi:         _ext.internal,\n\t\toStdClasses:  _ext.classes,\n\t\toPagination:  _ext.pager\n\t} );\n\t\n\t\n\t$.extend( DataTable.ext.classes, {\n\t\t\"sTable\": \"dataTable\",\n\t\t\"sNoFooter\": \"no-footer\",\n\t\n\t\t/* Paging buttons */\n\t\t\"sPageButton\": \"paginate_button\",\n\t\t\"sPageButtonActive\": \"current\",\n\t\t\"sPageButtonDisabled\": \"disabled\",\n\t\n\t\t/* Striping classes */\n\t\t\"sStripeOdd\": \"odd\",\n\t\t\"sStripeEven\": \"even\",\n\t\n\t\t/* Empty row */\n\t\t\"sRowEmpty\": \"dataTables_empty\",\n\t\n\t\t/* Features */\n\t\t\"sWrapper\": \"dataTables_wrapper\",\n\t\t\"sFilter\": \"dataTables_filter\",\n\t\t\"sInfo\": \"dataTables_info\",\n\t\t\"sPaging\": \"dataTables_paginate paging_\", /* Note that the type is postfixed */\n\t\t\"sLength\": \"dataTables_length\",\n\t\t\"sProcessing\": \"dataTables_processing\",\n\t\n\t\t/* Sorting */\n\t\t\"sSortAsc\": \"sorting_asc\",\n\t\t\"sSortDesc\": \"sorting_desc\",\n\t\t\"sSortable\": \"sorting\", /* Sortable in both directions */\n\t\t\"sSortableAsc\": \"sorting_desc_disabled\",\n\t\t\"sSortableDesc\": \"sorting_asc_disabled\",\n\t\t\"sSortableNone\": \"sorting_disabled\",\n\t\t\"sSortColumn\": \"sorting_\", /* Note that an int is postfixed for the sorting order */\n\t\n\t\t/* Filtering */\n\t\t\"sFilterInput\": \"\",\n\t\n\t\t/* Page length */\n\t\t\"sLengthSelect\": \"\",\n\t\n\t\t/* Scrolling */\n\t\t\"sScrollWrapper\": \"dataTables_scroll\",\n\t\t\"sScrollHead\": \"dataTables_scrollHead\",\n\t\t\"sScrollHeadInner\": \"dataTables_scrollHeadInner\",\n\t\t\"sScrollBody\": \"dataTables_scrollBody\",\n\t\t\"sScrollFoot\": \"dataTables_scrollFoot\",\n\t\t\"sScrollFootInner\": \"dataTables_scrollFootInner\",\n\t\n\t\t/* Misc */\n\t\t\"sHeaderTH\": \"\",\n\t\t\"sFooterTH\": \"\",\n\t\n\t\t// Deprecated\n\t\t\"sSortJUIAsc\": \"\",\n\t\t\"sSortJUIDesc\": \"\",\n\t\t\"sSortJUI\": \"\",\n\t\t\"sSortJUIAscAllowed\": \"\",\n\t\t\"sSortJUIDescAllowed\": \"\",\n\t\t\"sSortJUIWrapper\": \"\",\n\t\t\"sSortIcon\": \"\",\n\t\t\"sJUIHeader\": \"\",\n\t\t\"sJUIFooter\": \"\"\n\t} );\n\t\n\t\n\tvar extPagination = DataTable.ext.pager;\n\t\n\tfunction _numbers ( page, pages ) {\n\t\tvar\n\t\t\tnumbers = [],\n\t\t\tbuttons = extPagination.numbers_length,\n\t\t\thalf = Math.floor( buttons / 2 ),\n\t\t\ti = 1;\n\t\n\t\tif ( pages <= buttons ) {\n\t\t\tnumbers = _range( 0, pages );\n\t\t}\n\t\telse if ( page <= half ) {\n\t\t\tnumbers = _range( 0, buttons-2 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t}\n\t\telse if ( page >= pages - 1 - half ) {\n\t\t\tnumbers = _range( pages-(buttons-2), pages );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\t\telse {\n\t\t\tnumbers = _range( page-half+2, page+half-1 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' );\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\t\n\t\tnumbers.DT_el = 'span';\n\t\treturn numbers;\n\t}\n\t\n\t\n\t$.extend( extPagination, {\n\t\tsimple: function ( page, pages ) {\n\t\t\treturn [ 'previous', 'next' ];\n\t\t},\n\t\n\t\tfull: function ( page, pages ) {\n\t\t\treturn [  'first', 'previous', 'next', 'last' ];\n\t\t},\n\t\n\t\tnumbers: function ( page, pages ) {\n\t\t\treturn [ _numbers(page, pages) ];\n\t\t},\n\t\n\t\tsimple_numbers: function ( page, pages ) {\n\t\t\treturn [ 'previous', _numbers(page, pages), 'next' ];\n\t\t},\n\t\n\t\tfull_numbers: function ( page, pages ) {\n\t\t\treturn [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];\n\t\t},\n\t\t\n\t\tfirst_last_numbers: function (page, pages) {\n\t \t\treturn ['first', _numbers(page, pages), 'last'];\n\t \t},\n\t\n\t\t// For testing and plug-ins to use\n\t\t_numbers: _numbers,\n\t\n\t\t// Number of number buttons (including ellipsis) to show. _Must be odd!_\n\t\tnumbers_length: 7\n\t} );\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\tpageButton: {\n\t\t\t_: function ( settings, host, idx, buttons, page, pages ) {\n\t\t\t\tvar classes = settings.oClasses;\n\t\t\t\tvar lang = settings.oLanguage.oPaginate;\n\t\t\t\tvar aria = settings.oLanguage.oAria.paginate || {};\n\t\t\t\tvar btnDisplay, btnClass;\n\t\n\t\t\t\tvar attach = function( container, buttons ) {\n\t\t\t\t\tvar i, ien, node, button;\n\t\t\t\t\tvar disabledClass = classes.sPageButtonDisabled;\n\t\t\t\t\tvar clickHandler = function ( e ) {\n\t\t\t\t\t\t_fnPageChange( settings, e.data.action, true );\n\t\t\t\t\t};\n\t\n\t\t\t\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\t\t\t\tbutton = buttons[i];\n\t\n\t\t\t\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\t\t\t\tvar inner = $( '<'+(button.DT_el || 'div')+'/>' )\n\t\t\t\t\t\t\t\t.appendTo( container );\n\t\t\t\t\t\t\tattach( inner, button );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar disabled = false;\n\t\n\t\t\t\t\t\t\tbtnDisplay = null;\n\t\t\t\t\t\t\tbtnClass = button;\n\t\n\t\t\t\t\t\t\tswitch ( button ) {\n\t\t\t\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\t\t\t\tcontainer.append('<span class=\"ellipsis\">&#x2026;</span>');\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'first':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\n\t\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\n\t\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'next':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\n\t\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tcase 'last':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\n\t\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tbtnDisplay = settings.fnFormatNumber( button + 1 );\n\t\t\t\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t\t\t\tclasses.sPageButtonActive : '';\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif ( btnDisplay !== null ) {\n\t\t\t\t\t\t\t\tvar tag = settings.oInit.pagingTag || 'a';\n\t\n\t\t\t\t\t\t\t\tif (disabled) {\n\t\t\t\t\t\t\t\t\tbtnClass += ' ' + disabledClass;\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\tnode = $('<'+tag+'>', {\n\t\t\t\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t\t\t'aria-current': btnClass === classes.sPageButtonActive ? 'page' : null,\n\t\t\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex,\n\t\t\t\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t\t\t\t.appendTo( container );\n\t\n\t\t\t\t\t\t\t\t_fnBindAction(\n\t\t\t\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t\t// inside an iframe or frame. Try / catch the error. Not good for\n\t\t\t\t// accessibility, but neither are frames.\n\t\t\t\tvar activeEl;\n\t\n\t\t\t\ttry {\n\t\t\t\t\t// Because this approach is destroying and recreating the paging\n\t\t\t\t\t// elements, focus is lost on the select button which is bad for\n\t\t\t\t\t// accessibility. So we want to restore focus once the draw has\n\t\t\t\t\t// completed\n\t\t\t\t\tactiveEl = $(host).find(document.activeElement).data('dt-idx');\n\t\t\t\t}\n\t\t\t\tcatch (e) {}\n\t\n\t\t\t\tattach( $(host).empty(), buttons );\n\t\n\t\t\t\tif ( activeEl !== undefined ) {\n\t\t\t\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t\n\t\n\t// Built in type detection. See model.ext.aTypes for information about\n\t// what is required from this methods.\n\t$.extend( DataTable.ext.type.detect, [\n\t\t// Plain numbers - first since V8 detects some plain numbers as dates\n\t\t// e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal ) ? 'num'+decimal : null;\n\t\t},\n\t\n\t\t// Dates (only those recognised by the browser's Date.parse)\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\t// V8 tries _very_ hard to make a string passed into `Date.parse()`\n\t\t\t// valid, so we need to use a regex to restrict date formats. Use a\n\t\t\t// plug-in for anything other than ISO8601 style strings\n\t\t\tif ( d && !(d instanceof Date) && ! _re_date.test(d) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar parsed = Date.parse(d);\n\t\t\treturn (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;\n\t\t},\n\t\n\t\t// Formatted numbers\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null;\n\t\t},\n\t\n\t\t// HTML numeric\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null;\n\t\t},\n\t\n\t\t// HTML numeric, formatted\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null;\n\t\t},\n\t\n\t\t// HTML (this is strict checking - there must be html)\n\t\tfunction ( d, settings )\n\t\t{\n\t\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ?\n\t\t\t\t'html' : null;\n\t\t}\n\t] );\n\t\n\t\n\t\n\t// Filter formatting functions. See model.ext.ofnSearch for information about\n\t// what is required from these methods.\n\t// \n\t// Note that additional search methods are added for the html numbers and\n\t// html formatted numbers by `_addNumericSort()` when we know what the decimal\n\t// place is\n\t\n\t\n\t$.extend( DataTable.ext.type.search, {\n\t\thtml: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\tdata :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata\n\t\t\t\t\t\t.replace( _re_new_lines, \" \" )\n\t\t\t\t\t\t.replace( _re_html, \"\" ) :\n\t\t\t\t\t'';\n\t\t},\n\t\n\t\tstring: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\tdata :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata.replace( _re_new_lines, \" \" ) :\n\t\t\t\t\tdata;\n\t\t}\n\t} );\n\t\n\t\n\t\n\tvar __numericReplace = function ( d, decimalPlace, re1, re2 ) {\n\t\tif ( d !== 0 && (!d || d === '-') ) {\n\t\t\treturn -Infinity;\n\t\t}\n\t\t\n\t\tvar type = typeof d;\n\t\n\t\tif (type === 'number' || type === 'bigint') {\n\t\t\treturn d;\n\t\t}\n\t\n\t\t// If a decimal place other than `.` is used, it needs to be given to the\n\t\t// function so we can detect it and replace with a `.` which is the only\n\t\t// decimal place Javascript recognises - it is not locale aware.\n\t\tif ( decimalPlace ) {\n\t\t\td = _numToDecimal( d, decimalPlace );\n\t\t}\n\t\n\t\tif ( d.replace ) {\n\t\t\tif ( re1 ) {\n\t\t\t\td = d.replace( re1, '' );\n\t\t\t}\n\t\n\t\t\tif ( re2 ) {\n\t\t\t\td = d.replace( re2, '' );\n\t\t\t}\n\t\t}\n\t\n\t\treturn d * 1;\n\t};\n\t\n\t\n\t// Add the numeric 'deformatting' functions for sorting and search. This is done\n\t// in a function to provide an easy ability for the language options to add\n\t// additional methods if a non-period decimal place is used.\n\tfunction _addNumericSort ( decimalPlace ) {\n\t\t$.each(\n\t\t\t{\n\t\t\t\t// Plain numbers\n\t\t\t\t\"num\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace );\n\t\t\t\t},\n\t\n\t\t\t\t// Formatted numbers\n\t\t\t\t\"num-fmt\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_formatted_numeric );\n\t\t\t\t},\n\t\n\t\t\t\t// HTML numeric\n\t\t\t\t\"html-num\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html );\n\t\t\t\t},\n\t\n\t\t\t\t// HTML numeric, formatted\n\t\t\t\t\"html-num-fmt\": function ( d ) {\n\t\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html, _re_formatted_numeric );\n\t\t\t\t}\n\t\t\t},\n\t\t\tfunction ( key, fn ) {\n\t\t\t\t// Add the ordering method\n\t\t\t\t_ext.type.order[ key+decimalPlace+'-pre' ] = fn;\n\t\n\t\t\t\t// For HTML types add a search formatter that will strip the HTML\n\t\t\t\tif ( key.match(/^html\\-/) ) {\n\t\t\t\t\t_ext.type.search[ key+decimalPlace ] = _ext.type.search.html;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\t\n\t\n\t// Default sort methods\n\t$.extend( _ext.type.order, {\n\t\t// Dates\n\t\t\"date-pre\": function ( d ) {\n\t\t\tvar ts = Date.parse( d );\n\t\t\treturn isNaN(ts) ? -Infinity : ts;\n\t\t},\n\t\n\t\t// html\n\t\t\"html-pre\": function ( a ) {\n\t\t\treturn _empty(a) ?\n\t\t\t\t'' :\n\t\t\t\ta.replace ?\n\t\t\t\t\ta.replace( /<.*?>/g, \"\" ).toLowerCase() :\n\t\t\t\t\ta+'';\n\t\t},\n\t\n\t\t// string\n\t\t\"string-pre\": function ( a ) {\n\t\t\t// This is a little complex, but faster than always calling toString,\n\t\t\t// https://jsperf.com/tostring-v-check\n\t\t\treturn _empty(a) ?\n\t\t\t\t'' :\n\t\t\t\ttypeof a === 'string' ?\n\t\t\t\t\ta.toLowerCase() :\n\t\t\t\t\t! a.toString ?\n\t\t\t\t\t\t'' :\n\t\t\t\t\t\ta.toString();\n\t\t},\n\t\n\t\t// string-asc and -desc are retained only for compatibility with the old\n\t\t// sort methods\n\t\t\"string-asc\": function ( x, y ) {\n\t\t\treturn ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t},\n\t\n\t\t\"string-desc\": function ( x, y ) {\n\t\t\treturn ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t}\n\t} );\n\t\n\t\n\t// Numeric sorting types - order doesn't matter here\n\t_addNumericSort( '' );\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\theader: {\n\t\t\t_: function ( settings, cell, column, classes ) {\n\t\t\t\t// No additional mark-up required\n\t\t\t\t// Attach a sort listener to update on sort - note that using the\n\t\t\t\t// `DT` namespace will allow the event to be removed automatically\n\t\t\t\t// on destroy, while the `dt` namespaced event is the one we are\n\t\t\t\t// listening for\n\t\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\t\tif ( settings !== ctx ) { // need to check this this is the host\n\t\t\t\t\t\treturn;               // table, not a nested one\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar colIdx = column.idx;\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tclasses.sSortAsc +' '+\n\t\t\t\t\t\t\tclasses.sSortDesc\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t},\n\t\n\t\t\tjqueryui: function ( settings, cell, column, classes ) {\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.addClass( classes.sSortJUIWrapper )\n\t\t\t\t\t.append( cell.contents() )\n\t\t\t\t\t.append( $('<span/>')\n\t\t\t\t\t\t.addClass( classes.sSortIcon+' '+column.sSortingClassJUI )\n\t\t\t\t\t)\n\t\t\t\t\t.appendTo( cell );\n\t\n\t\t\t\t// Attach a sort listener to update on sort\n\t\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar colIdx = column.idx;\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass( classes.sSortAsc +\" \"+classes.sSortDesc )\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.find( 'span.'+classes.sSortIcon )\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tclasses.sSortJUIAsc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDesc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUI +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIAscAllowed +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDescAllowed\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortJUIAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortJUIDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClassJUI\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t/*\n\t * Public helper functions. These aren't used internally by DataTables, or\n\t * called by any of the options passed into DataTables, but they can be used\n\t * externally by developers working with DataTables. They are helper functions\n\t * to make working with DataTables a little bit easier.\n\t */\n\t\n\tvar __htmlEscapeEntities = function ( d ) {\n\t\tif (Array.isArray(d)) {\n\t\t\td = d.join(',');\n\t\t}\n\t\n\t\treturn typeof d === 'string' ?\n\t\t\td\n\t\t\t\t.replace(/&/g, '&amp;')\n\t\t\t\t.replace(/</g, '&lt;')\n\t\t\t\t.replace(/>/g, '&gt;')\n\t\t\t\t.replace(/\"/g, '&quot;') :\n\t\t\td;\n\t};\n\t\n\t// Common logic for moment, luxon or a date action\n\tfunction __mld( dt, momentFn, luxonFn, dateFn, arg1 ) {\n\t\tif (window.moment) {\n\t\t\treturn dt[momentFn]( arg1 );\n\t\t}\n\t\telse if (window.luxon) {\n\t\t\treturn dt[luxonFn]( arg1 );\n\t\t}\n\t\t\n\t\treturn dateFn ? dt[dateFn]( arg1 ) : dt;\n\t}\n\t\n\t\n\tvar __mlWarning = false;\n\tfunction __mldObj (d, format, locale) {\n\t\tvar dt;\n\t\n\t\tif (window.moment) {\n\t\t\tdt = window.moment.utc( d, format, locale, true );\n\t\n\t\t\tif (! dt.isValid()) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\telse if (window.luxon) {\n\t\t\tdt = format && typeof d === 'string'\n\t\t\t\t? window.luxon.DateTime.fromFormat( d, format )\n\t\t\t\t: window.luxon.DateTime.fromISO( d );\n\t\n\t\t\tif (! dt.isValid) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\n\t\t\tdt.setLocale(locale);\n\t\t}\n\t\telse if (! format) {\n\t\t\t// No format given, must be ISO\n\t\t\tdt = new Date(d);\n\t\t}\n\t\telse {\n\t\t\tif (! __mlWarning) {\n\t\t\t\talert('DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17');\n\t\t\t}\n\t\n\t\t\t__mlWarning = true;\n\t\t}\n\t\n\t\treturn dt;\n\t}\n\t\n\t// Wrapper for date, datetime and time which all operate the same way with the exception of\n\t// the output string for auto locale support\n\tfunction __mlHelper (localeString) {\n\t\treturn function ( from, to, locale, def ) {\n\t\t\t// Luxon and Moment support\n\t\t\t// Argument shifting\n\t\t\tif ( arguments.length === 0 ) {\n\t\t\t\tlocale = 'en';\n\t\t\t\tto = null; // means toLocaleString\n\t\t\t\tfrom = null; // means iso8601\n\t\t\t}\n\t\t\telse if ( arguments.length === 1 ) {\n\t\t\t\tlocale = 'en';\n\t\t\t\tto = from;\n\t\t\t\tfrom = null;\n\t\t\t}\n\t\t\telse if ( arguments.length === 2 ) {\n\t\t\t\tlocale = to;\n\t\t\t\tto = from;\n\t\t\t\tfrom = null;\n\t\t\t}\n\t\n\t\t\tvar typeName = 'datetime-' + to;\n\t\n\t\t\t// Add type detection and sorting specific to this date format - we need to be able to identify\n\t\t\t// date type columns as such, rather than as numbers in extensions. Hence the need for this.\n\t\t\tif (! DataTable.ext.type.order[typeName]) {\n\t\t\t\t// The renderer will give the value to type detect as the type!\n\t\t\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\t\t\treturn d === typeName ? typeName : false;\n\t\t\t\t});\n\t\n\t\t\t\t// The renderer gives us Moment, Luxon or Date obects for the sorting, all of which have a\n\t\t\t\t// `valueOf` which gives milliseconds epoch\n\t\t\t\tDataTable.ext.type.order[typeName + '-asc'] = function (a, b) {\n\t\t\t\t\tvar x = a.valueOf();\n\t\t\t\t\tvar y = b.valueOf();\n\t\n\t\t\t\t\treturn x === y\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: x < y\n\t\t\t\t\t\t\t? -1\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t}\n\t\n\t\t\t\tDataTable.ext.type.order[typeName + '-desc'] = function (a, b) {\n\t\t\t\t\tvar x = a.valueOf();\n\t\t\t\t\tvar y = b.valueOf();\n\t\n\t\t\t\t\treturn x === y\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: x > y\n\t\t\t\t\t\t\t? -1\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\treturn function ( d, type ) {\n\t\t\t\t// Allow for a default value\n\t\t\t\tif (d === null || d === undefined) {\n\t\t\t\t\tif (def === '--now') {\n\t\t\t\t\t\t// We treat everything as UTC further down, so no changes are\n\t\t\t\t\t\t// made, as such need to get the local date / time as if it were\n\t\t\t\t\t\t// UTC\n\t\t\t\t\t\tvar local = new Date();\n\t\t\t\t\t\td = new Date( Date.UTC(\n\t\t\t\t\t\t\tlocal.getFullYear(), local.getMonth(), local.getDate(),\n\t\t\t\t\t\t\tlocal.getHours(), local.getMinutes(), local.getSeconds()\n\t\t\t\t\t\t) );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\td = '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (type === 'type') {\n\t\t\t\t\t// Typing uses the type name for fast matching\n\t\t\t\t\treturn typeName;\n\t\t\t\t}\n\t\n\t\t\t\tif (d === '') {\n\t\t\t\t\treturn type !== 'sort'\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: __mldObj('0000-01-01 00:00:00', null, locale);\n\t\t\t\t}\n\t\n\t\t\t\t// Shortcut. If `from` and `to` are the same, we are using the renderer to\n\t\t\t\t// format for ordering, not display - its already in the display format.\n\t\t\t\tif ( to !== null && from === to && type !== 'sort' && type !== 'type' && ! (d instanceof Date) ) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\t\n\t\t\t\tvar dt = __mldObj(d, from, locale);\n\t\n\t\t\t\tif (dt === null) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\t\n\t\t\t\tif (type === 'sort') {\n\t\t\t\t\treturn dt;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar formatted = to === null\n\t\t\t\t\t? __mld(dt, 'toDate', 'toJSDate', '')[localeString]()\n\t\t\t\t\t: __mld(dt, 'format', 'toFormat', 'toISOString', to);\n\t\n\t\t\t\t// XSS protection\n\t\t\t\treturn type === 'display' ?\n\t\t\t\t\t__htmlEscapeEntities( formatted ) :\n\t\t\t\t\tformatted;\n\t\t\t};\n\t\t}\n\t}\n\t\n\t// Based on locale, determine standard number formatting\n\t// Fallback for legacy browsers is US English\n\tvar __thousands = ',';\n\tvar __decimal = '.';\n\t\n\tif (window.Intl !== undefined) {\n\t\ttry {\n\t\t\tvar num = new Intl.NumberFormat().formatToParts(100000.1);\n\t\t\n\t\t\tfor (var i=0 ; i<num.length ; i++) {\n\t\t\t\tif (num[i].type === 'group') {\n\t\t\t\t\t__thousands = num[i].value;\n\t\t\t\t}\n\t\t\t\telse if (num[i].type === 'decimal') {\n\t\t\t\t\t__decimal = num[i].value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (e) {\n\t\t\t// noop\n\t\t}\n\t}\n\t\n\t// Formatted date time detection - use by declaring the formats you are going to use\n\tDataTable.datetime = function ( format, locale ) {\n\t\tvar typeName = 'datetime-detect-' + format;\n\t\n\t\tif (! locale) {\n\t\t\tlocale = 'en';\n\t\t}\n\t\n\t\tif (! DataTable.ext.type.order[typeName]) {\n\t\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\t\tvar dt = __mldObj(d, format, locale);\n\t\t\t\treturn d === '' || dt ? typeName : false;\n\t\t\t});\n\t\n\t\t\tDataTable.ext.type.order[typeName + '-pre'] = function (d) {\n\t\t\t\treturn __mldObj(d, format, locale) || 0;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Helpers for `columns.render`.\n\t *\n\t * The options defined here can be used with the `columns.render` initialisation\n\t * option to provide a display renderer. The following functions are defined:\n\t *\n\t * * `number` - Will format numeric data (defined by `columns.data`) for\n\t *   display, retaining the original unformatted data for sorting and filtering.\n\t *   It takes 5 parameters:\n\t *   * `string` - Thousands grouping separator\n\t *   * `string` - Decimal point indicator\n\t *   * `integer` - Number of decimal points to show\n\t *   * `string` (optional) - Prefix.\n\t *   * `string` (optional) - Postfix (/suffix).\n\t * * `text` - Escape HTML to help prevent XSS attacks. It has no optional\n\t *   parameters.\n\t *\n\t * @example\n\t *   // Column definition using the number renderer\n\t *   {\n\t *     data: \"salary\",\n\t *     render: $.fn.dataTable.render.number( '\\'', '.', 0, '$' )\n\t *   }\n\t *\n\t * @namespace\n\t */\n\tDataTable.render = {\n\t\tdate: __mlHelper('toLocaleDateString'),\n\t\tdatetime: __mlHelper('toLocaleString'),\n\t\ttime: __mlHelper('toLocaleTimeString'),\n\t\tnumber: function ( thousands, decimal, precision, prefix, postfix ) {\n\t\t\t// Auto locale detection\n\t\t\tif (thousands === null || thousands === undefined) {\n\t\t\t\tthousands = __thousands;\n\t\t\t}\n\t\n\t\t\tif (decimal === null || decimal === undefined) {\n\t\t\t\tdecimal = __decimal;\n\t\t\t}\n\t\n\t\t\treturn {\n\t\t\t\tdisplay: function ( d ) {\n\t\t\t\t\tif ( typeof d !== 'number' && typeof d !== 'string' ) {\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (d === '' || d === null) {\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar negative = d < 0 ? '-' : '';\n\t\t\t\t\tvar flo = parseFloat( d );\n\t\n\t\t\t\t\t// If NaN then there isn't much formatting that we can do - just\n\t\t\t\t\t// return immediately, escaping any HTML (this was supposed to\n\t\t\t\t\t// be a number after all)\n\t\t\t\t\tif ( isNaN( flo ) ) {\n\t\t\t\t\t\treturn __htmlEscapeEntities( d );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tflo = flo.toFixed( precision );\n\t\t\t\t\td = Math.abs( flo );\n\t\n\t\t\t\t\tvar intPart = parseInt( d, 10 );\n\t\t\t\t\tvar floatPart = precision ?\n\t\t\t\t\t\tdecimal+(d - intPart).toFixed( precision ).substring( 2 ):\n\t\t\t\t\t\t'';\n\t\n\t\t\t\t\t// If zero, then can't have a negative prefix\n\t\t\t\t\tif (intPart === 0 && parseFloat(floatPart) === 0) {\n\t\t\t\t\t\tnegative = '';\n\t\t\t\t\t}\n\t\n\t\t\t\t\treturn negative + (prefix||'') +\n\t\t\t\t\t\tintPart.toString().replace(\n\t\t\t\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g, thousands\n\t\t\t\t\t\t) +\n\t\t\t\t\t\tfloatPart +\n\t\t\t\t\t\t(postfix||'');\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\n\t\ttext: function () {\n\t\t\treturn {\n\t\t\t\tdisplay: __htmlEscapeEntities,\n\t\t\t\tfilter: __htmlEscapeEntities\n\t\t\t};\n\t\t}\n\t};\n\t\n\t\n\t/*\n\t * This is really a good bit rubbish this method of exposing the internal methods\n\t * publicly... - To be fixed in 2.0 using methods on the prototype\n\t */\n\t\n\t\n\t/**\n\t * Create a wrapper function for exporting an internal functions to an external API.\n\t *  @param {string} fn API function name\n\t *  @returns {function} wrapped function\n\t *  @memberof DataTable#internal\n\t */\n\tfunction _fnExternApiFunc (fn)\n\t{\n\t\treturn function() {\n\t\t\tvar args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat(\n\t\t\t\tArray.prototype.slice.call(arguments)\n\t\t\t);\n\t\t\treturn DataTable.ext.internal[fn].apply( this, args );\n\t\t};\n\t}\n\t\n\t\n\t/**\n\t * Reference to internal functions for use by plug-in developers. Note that\n\t * these methods are references to internal functions and are considered to be\n\t * private. If you use these methods, be aware that they are liable to change\n\t * between versions.\n\t *  @namespace\n\t */\n\t$.extend( DataTable.ext.internal, {\n\t\t_fnExternApiFunc: _fnExternApiFunc,\n\t\t_fnBuildAjax: _fnBuildAjax,\n\t\t_fnAjaxUpdate: _fnAjaxUpdate,\n\t\t_fnAjaxParameters: _fnAjaxParameters,\n\t\t_fnAjaxUpdateDraw: _fnAjaxUpdateDraw,\n\t\t_fnAjaxDataSrc: _fnAjaxDataSrc,\n\t\t_fnAddColumn: _fnAddColumn,\n\t\t_fnColumnOptions: _fnColumnOptions,\n\t\t_fnAdjustColumnSizing: _fnAdjustColumnSizing,\n\t\t_fnVisibleToColumnIndex: _fnVisibleToColumnIndex,\n\t\t_fnColumnIndexToVisible: _fnColumnIndexToVisible,\n\t\t_fnVisbleColumns: _fnVisbleColumns,\n\t\t_fnGetColumns: _fnGetColumns,\n\t\t_fnColumnTypes: _fnColumnTypes,\n\t\t_fnApplyColumnDefs: _fnApplyColumnDefs,\n\t\t_fnHungarianMap: _fnHungarianMap,\n\t\t_fnCamelToHungarian: _fnCamelToHungarian,\n\t\t_fnLanguageCompat: _fnLanguageCompat,\n\t\t_fnBrowserDetect: _fnBrowserDetect,\n\t\t_fnAddData: _fnAddData,\n\t\t_fnAddTr: _fnAddTr,\n\t\t_fnNodeToDataIndex: _fnNodeToDataIndex,\n\t\t_fnNodeToColumnIndex: _fnNodeToColumnIndex,\n\t\t_fnGetCellData: _fnGetCellData,\n\t\t_fnSetCellData: _fnSetCellData,\n\t\t_fnSplitObjNotation: _fnSplitObjNotation,\n\t\t_fnGetObjectDataFn: _fnGetObjectDataFn,\n\t\t_fnSetObjectDataFn: _fnSetObjectDataFn,\n\t\t_fnGetDataMaster: _fnGetDataMaster,\n\t\t_fnClearTable: _fnClearTable,\n\t\t_fnDeleteIndex: _fnDeleteIndex,\n\t\t_fnInvalidate: _fnInvalidate,\n\t\t_fnGetRowElements: _fnGetRowElements,\n\t\t_fnCreateTr: _fnCreateTr,\n\t\t_fnBuildHead: _fnBuildHead,\n\t\t_fnDrawHead: _fnDrawHead,\n\t\t_fnDraw: _fnDraw,\n\t\t_fnReDraw: _fnReDraw,\n\t\t_fnAddOptionsHtml: _fnAddOptionsHtml,\n\t\t_fnDetectHeader: _fnDetectHeader,\n\t\t_fnGetUniqueThs: _fnGetUniqueThs,\n\t\t_fnFeatureHtmlFilter: _fnFeatureHtmlFilter,\n\t\t_fnFilterComplete: _fnFilterComplete,\n\t\t_fnFilterCustom: _fnFilterCustom,\n\t\t_fnFilterColumn: _fnFilterColumn,\n\t\t_fnFilter: _fnFilter,\n\t\t_fnFilterCreateSearch: _fnFilterCreateSearch,\n\t\t_fnEscapeRegex: _fnEscapeRegex,\n\t\t_fnFilterData: _fnFilterData,\n\t\t_fnFeatureHtmlInfo: _fnFeatureHtmlInfo,\n\t\t_fnUpdateInfo: _fnUpdateInfo,\n\t\t_fnInfoMacros: _fnInfoMacros,\n\t\t_fnInitialise: _fnInitialise,\n\t\t_fnInitComplete: _fnInitComplete,\n\t\t_fnLengthChange: _fnLengthChange,\n\t\t_fnFeatureHtmlLength: _fnFeatureHtmlLength,\n\t\t_fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,\n\t\t_fnPageChange: _fnPageChange,\n\t\t_fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,\n\t\t_fnProcessingDisplay: _fnProcessingDisplay,\n\t\t_fnFeatureHtmlTable: _fnFeatureHtmlTable,\n\t\t_fnScrollDraw: _fnScrollDraw,\n\t\t_fnApplyToChildren: _fnApplyToChildren,\n\t\t_fnCalculateColumnWidths: _fnCalculateColumnWidths,\n\t\t_fnThrottle: _fnThrottle,\n\t\t_fnConvertToWidth: _fnConvertToWidth,\n\t\t_fnGetWidestNode: _fnGetWidestNode,\n\t\t_fnGetMaxLenString: _fnGetMaxLenString,\n\t\t_fnStringToCss: _fnStringToCss,\n\t\t_fnSortFlatten: _fnSortFlatten,\n\t\t_fnSort: _fnSort,\n\t\t_fnSortAria: _fnSortAria,\n\t\t_fnSortListener: _fnSortListener,\n\t\t_fnSortAttachListener: _fnSortAttachListener,\n\t\t_fnSortingClasses: _fnSortingClasses,\n\t\t_fnSortData: _fnSortData,\n\t\t_fnSaveState: _fnSaveState,\n\t\t_fnLoadState: _fnLoadState,\n\t\t_fnImplementState: _fnImplementState,\n\t\t_fnSettingsFromNode: _fnSettingsFromNode,\n\t\t_fnLog: _fnLog,\n\t\t_fnMap: _fnMap,\n\t\t_fnBindAction: _fnBindAction,\n\t\t_fnCallbackReg: _fnCallbackReg,\n\t\t_fnCallbackFire: _fnCallbackFire,\n\t\t_fnLengthOverflow: _fnLengthOverflow,\n\t\t_fnRenderer: _fnRenderer,\n\t\t_fnDataSource: _fnDataSource,\n\t\t_fnRowAttributes: _fnRowAttributes,\n\t\t_fnExtend: _fnExtend,\n\t\t_fnCalculateEnd: function () {} // Used by a lot of plug-ins, but redundant\n\t\t                                // in 1.10, so this dead-end function is\n\t\t                                // added to prevent errors\n\t} );\n\t\n\t\n\t// jQuery access\n\t$.fn.dataTable = DataTable;\n\t\n\t// Provide access to the host jQuery object (circular reference)\n\tDataTable.$ = $;\n\t\n\t// Legacy aliases\n\t$.fn.dataTableSettings = DataTable.settings;\n\t$.fn.dataTableExt = DataTable.ext;\n\t\n\t// With a capital `D` we return a DataTables API instance rather than a\n\t// jQuery object\n\t$.fn.DataTable = function ( opts ) {\n\t\treturn $(this).dataTable( opts ).api();\n\t};\n\t\n\t// All properties that are available to $.fn.dataTable should also be\n\t// available on $.fn.DataTable\n\t$.each( DataTable, function ( prop, val ) {\n\t\t$.fn.DataTable[ prop ] = val;\n\t} );\n\n\treturn DataTable;\n}));\n\n\n/*! DataTables Bootstrap 5 integration\n * 2020 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * DataTables integration for Bootstrap 5. This requires Bootstrap 5 and\n * DataTables 1.10 or newer.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using Bootstrap. See https://datatables.net/manual/styling/bootstrap\n * for further information.\n */\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t\"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>\" +\n\t\t\"<'row dt-row'<'col-sm-12'tr>>\" +\n\t\t\"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>\",\n\trenderer: 'bootstrap'\n} );\n\n\n/* Default class modification */\n$.extend( DataTable.ext.classes, {\n\tsWrapper:      \"dataTables_wrapper dt-bootstrap5\",\n\tsFilterInput:  \"form-control form-control-sm\",\n\tsLengthSelect: \"form-select form-select-sm\",\n\tsProcessing:   \"dataTables_processing card\",\n\tsPageButton:   \"paginate_button page-item\"\n} );\n\n\n/* Bootstrap paging button renderer */\nDataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {\n\tvar api     = new DataTable.Api( settings );\n\tvar classes = settings.oClasses;\n\tvar lang    = settings.oLanguage.oPaginate;\n\tvar aria = settings.oLanguage.oAria.paginate || {};\n\tvar btnDisplay, btnClass;\n\n\tvar attach = function( container, buttons ) {\n\t\tvar i, ien, node, button;\n\t\tvar clickHandler = function ( e ) {\n\t\t\te.preventDefault();\n\t\t\tif ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {\n\t\t\t\tapi.page( e.data.action ).draw( 'page' );\n\t\t\t}\n\t\t};\n\n\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\tattach( container, button );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtnDisplay = '';\n\t\t\t\tbtnClass = '';\n\n\t\t\t\tswitch ( button ) {\n\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\tbtnDisplay = '&#x2026;';\n\t\t\t\t\t\tbtnClass = 'disabled';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'first':\n\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'next':\n\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'last':\n\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t'active' : '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\tvar disabled = btnClass.indexOf('disabled') !== -1;\n\n\t\t\t\t\tnode = $('<li>', {\n\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append( $('<a>', {\n\t\t\t\t\t\t\t\t'href': disabled ? null : '#',\n\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t'aria-current': btnClass === 'active' ? 'page' : null,\n\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex,\n\t\t\t\t\t\t\t\t'class': 'page-link'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\tsettings.oApi._fnBindAction(\n\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tvar hostEl = $(host);\n\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t// inside an iframe or frame. \n\tvar activeEl;\n\n\ttry {\n\t\t// Because this approach is destroying and recreating the paging\n\t\t// elements, focus is lost on the select button which is bad for\n\t\t// accessibility. So we want to restore focus once the draw has\n\t\t// completed\n\t\tactiveEl = hostEl.find(document.activeElement).data('dt-idx');\n\t}\n\tcatch (e) {}\n\n\tvar paginationEl = hostEl.children('ul.pagination');\n\n\tif (paginationEl.length) {\n\t\tpaginationEl.empty();\n\t}\n\telse {\n\t\tpaginationEl = hostEl.html('<ul/>').children('ul').addClass('pagination');\n\t}\n\n\tattach(\n\t\tpaginationEl,\n\t\tbuttons\n\t);\n\n\tif ( activeEl !== undefined ) {\n\t\thostEl.find('[data-dt-idx='+activeEl+']').trigger('focus');\n\t}\n};\n\n\nreturn DataTable;\n}));\n\n\n/*! AutoFill 2.6.0\n * ©2008-2023 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     AutoFill\n * @description Add Excel like click and drag auto-fill options to DataTables\n * @version     2.6.0\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\nvar _instance = 0;\n\n/** \n * AutoFill provides Excel like auto-fill features for a DataTable\n *\n * @class AutoFill\n * @constructor\n * @param {object} oTD DataTables settings object\n * @param {object} oConfig Configuration object for AutoFill\n */\nvar AutoFill = function( dt, opts )\n{\n\tif ( ! DataTable.versionCheck || ! DataTable.versionCheck( '1.10.8' ) ) {\n\t\tthrow( \"Warning: AutoFill requires DataTables 1.10.8 or greater\");\n\t}\n\n\t// User and defaults configuration object\n\tthis.c = $.extend( true, {},\n\t\tDataTable.defaults.autoFill,\n\t\tAutoFill.defaults,\n\t\topts\n\t);\n\n\t/**\n\t * @namespace Settings object which contains customisable information for AutoFill instance\n\t */\n\tthis.s = {\n\t\t/** @type {DataTable.Api} DataTables' API instance */\n\t\tdt: new DataTable.Api( dt ),\n\n\t\t/** @type {String} Unique namespace for events attached to the document */\n\t\tnamespace: '.autoFill'+(_instance++),\n\n\t\t/** @type {Object} Cached dimension information for use in the mouse move event handler */\n\t\tscroll: {},\n\n\t\t/** @type {integer} Interval object used for smooth scrolling */\n\t\tscrollInterval: null,\n\n\t\thandle: {\n\t\t\theight: 0,\n\t\t\twidth: 0\n\t\t},\n\n\t\t/**\n\t\t * Enabled setting\n\t\t * @type {Boolean}\n\t\t */\n\t\tenabled: false\n\t};\n\n\n\t/**\n\t * @namespace Common and useful DOM elements for the class instance\n\t */\n\tthis.dom = {\n\t\tcloseButton: $('<div class=\"dtaf-popover-close\">&times;</div>'),\n\n\t\t/** @type {jQuery} AutoFill handle */\n\t\thandle: $('<div class=\"dt-autofill-handle\"/>'),\n\n\t\t/**\n\t\t * @type {Object} Selected cells outline - Need to use 4 elements,\n\t\t *   otherwise the mouse over if you back into the selected rectangle\n\t\t *   will be over that element, rather than the cells!\n\t\t */\n\t\tselect: {\n\t\t\ttop:    $('<div class=\"dt-autofill-select top\"/>'),\n\t\t\tright:  $('<div class=\"dt-autofill-select right\"/>'),\n\t\t\tbottom: $('<div class=\"dt-autofill-select bottom\"/>'),\n\t\t\tleft:   $('<div class=\"dt-autofill-select left\"/>')\n\t\t},\n\n\t\t/** @type {jQuery} Fill type chooser background */\n\t\tbackground: $('<div class=\"dt-autofill-background\"/>'),\n\n\t\t/** @type {jQuery} Fill type chooser */\n\t\tlist: $('<div class=\"dt-autofill-list\">'+this.s.dt.i18n('autoFill.info', '')+'</div>')\n\t\t\t.attr('aria-modal', true)\n\t\t\t.attr('role', 'dialog')\n\t\t\t.append('<div class=\"dt-autofill-list-items\"></div>'),\n\n\t\t/** @type {jQuery} DataTables scrolling container */\n\t\tdtScroll: null,\n\n\t\t/** @type {jQuery} Offset parent element */\n\t\toffsetParent: null\n\t};\n\n\n\t/* Constructor logic */\n\tthis._constructor();\n};\n\n\n\n$.extend( AutoFill.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods (exposed via the DataTables API below)\n\t */\n\tenabled: function ()\n\t{\n\t\treturn this.s.enabled;\n\t},\n\n\n\tenable: function ( flag )\n\t{\n\t\tvar that = this;\n\n\t\tif ( flag === false ) {\n\t\t\treturn this.disable();\n\t\t}\n\n\t\tthis.s.enabled = true;\n\n\t\tthis._focusListener();\n\n\t\tthis.dom.handle.on( 'mousedown touchstart', function (e) {\n\t\t\tthat._mousedown( e );\n\t\t\treturn false;\n\t\t} );\n\n\t\t$(window).on('resize', function() {\n\t\t\tvar handle = $('div.dt-autofill-handle');\n\t\t\tif(handle.length > 0 && that.dom.attachedTo !== undefined) {\n\t\t\t\tthat._attach(that.dom.attachedTo)\n\t\t\t}\n\t\t})\n\n\t\tlet orientationReset = function() {\n\t\t\tthat.s.handle = {\n\t\t\t\theight: false,\n\t\t\t\twidth: false\n\t\t\t};\n\t\t\t$(that.dom.handle).css({\n\t\t\t\t'height': '',\n\t\t\t\t'width': ''\n\t\t\t})\n\t\t\tif(that.dom.attachedTo !== undefined) {\n\t\t\t\tthat._attach(that.dom.attachedTo)\n\t\t\t}\n\t\t}\n\n\t\t$(window)\n\t\t\t.on('orientationchange', function() {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\torientationReset();\n\t\t\t\t\tsetTimeout(orientationReset, 150);\n\t\t\t\t}, 50);\n\t\t\t});\n\n\t\treturn this;\n\t},\n\n\tdisable: function ()\n\t{\n\t\tthis.s.enabled = false;\n\n\t\tthis._focusListenerRemove();\n\n\t\treturn this;\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialise the RowReorder instance\n\t *\n\t * @private\n\t */\n\t_constructor: function ()\n\t{\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar dtScroll = $('div.dataTables_scrollBody', this.s.dt.table().container());\n\n\t\t// Make the instance accessible to the API\n\t\tdt.settings()[0].autoFill = this;\n\n\t\tif ( dtScroll.length ) {\n\t\t\tthis.dom.dtScroll = dtScroll;\n\n\t\t\t// Need to scroll container to be the offset parent\n\t\t\tif ( dtScroll.css('position') === 'static' ) {\n\t\t\t\tdtScroll.css( 'position', 'relative' );\n\t\t\t}\n\t\t}\n\n\t\tif ( this.c.enable !== false ) {\n\t\t\tthis.enable();\n\t\t}\n\n\t\tdt.on( 'destroy.autoFill', function () {\n\t\t\tthat._focusListenerRemove();\n\t\t} );\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Display the AutoFill drag handle by appending it to a table cell. This\n\t * is the opposite of the _detach method.\n\t *\n\t * @param  {node} node TD/TH cell to insert the handle into\n\t * @private\n\t */\n\t_attach: function ( node )\n\t{\n\t\tvar dt = this.s.dt;\n\t\tvar idx = dt.cell( node ).index();\n\t\tvar handle = this.dom.handle;\n\t\tvar handleDim = this.s.handle;\n\n\t\tif ( ! idx || dt.columns( this.c.columns ).indexes().indexOf( idx.column ) === -1 ) {\n\t\t\tthis._detach();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! this.dom.offsetParent ) {\n\t\t\t// We attach to the table's offset parent\n\t\t\tthis.dom.offsetParent = $( dt.table().node() ).offsetParent();\n\t\t}\n\n\t\tif ( ! handleDim.height || ! handleDim.width ) {\n\t\t\t// Append to document so we can get its size. Not expecting it to\n\t\t\t// change during the life time of the page\n\t\t\thandle.appendTo( 'body' );\n\t\t\thandleDim.height = handle.outerHeight();\n\t\t\thandleDim.width = handle.outerWidth();\n\t\t}\n\n\t\t// Might need to go through multiple offset parents\n\t\tvar offset = this._getPosition( node, this.dom.offsetParent );\n\t\t\n\t\tthis.dom.attachedTo = node;\n\t\thandle\n\t\t\t.css( {\n\t\t\t\ttop: offset.top + node.offsetHeight - handleDim.height,\n\t\t\t\tleft: offset.left + node.offsetWidth - handleDim.width\n\t\t\t} )\n\t\t\t.appendTo( this.dom.offsetParent );\n\t},\n\n\n\t/**\n\t * Determine can the fill type should be. This can be automatic, or ask the\n\t * end user.\n\t *\n\t * @param {array} cells Information about the selected cells from the key\n\t *     up function\n\t * @private\n\t */\n\t_actionSelector: function ( cells )\n\t{\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar actions = AutoFill.actions;\n\t\tvar available = [];\n\n\t\t// \"Ask\" each plug-in if it wants to handle this data\n\t\t$.each( actions, function ( key, action ) {\n\t\t\tif ( action.available( dt, cells ) ) {\n\t\t\t\tavailable.push( key );\n\t\t\t}\n\t\t} );\n\n\t\tif ( available.length === 1 && this.c.alwaysAsk === false ) {\n\t\t\t// Only one action available - enact it immediately\n\t\t\tvar result = actions[ available[0] ].execute( dt, cells );\n\t\t\tthis._update( result, cells );\n\t\t}\n\t\telse if ( available.length > 1 || this.c.alwaysAsk ) {\n\t\t\t// Multiple actions available - ask the end user what they want to do\n\t\t\tvar list = this.dom.list.children('div.dt-autofill-list-items').empty();\n\n\t\t\t// Add a cancel option\n\t\t\tavailable.push( 'cancel' );\n\n\t\t\t$.each( available, function ( i, name ) {\n\t\t\t\tlist.append( $('<button/>')\n\t\t\t\t\t.html(actions[ name ].option( dt, cells ))\n\t\t\t\t\t.append( $('<span class=\"dt-autofill-button\"/>').html(dt.i18n('autoFill.button', '&gt;')))\n\t\t\t\t\t.on( 'click', function () {\n\t\t\t\t\t\tvar result = actions[ name ].execute(\n\t\t\t\t\t\t\tdt, cells, $(this).closest('li')\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthat._update( result, cells );\n\n\t\t\t\t\t\tthat.dom.background.remove();\n\t\t\t\t\t\tthat.dom.list.remove();\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t} );\n\n\t\t\tthis.dom.background.appendTo( 'body' );\n\t\t\tthis.dom.background.one('click', function() {\n\t\t\t\tthat.dom.background.remove();\n\t\t\t\tthat.dom.list.remove();\n\t\t\t})\n\t\t\tthis.dom.list.appendTo( 'body' );\n\n\t\t\tif (this.c.closeButton) {\n\t\t\t\tthis.dom.list.prepend(this.dom.closeButton).addClass(AutoFill.classes.closeable)\n\t\t\t\tthis.dom.closeButton.on('click', function() {\n\t\t\t\t\treturn that.dom.background.click()\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.dom.list.css( 'margin-top', this.dom.list.outerHeight()/2 * -1 );\n\t\t}\n\t},\n\n\n\t/**\n\t * Remove the AutoFill handle from the document\n\t *\n\t * @private\n\t */\n\t_detach: function ()\n\t{\n\t\tthis.dom.attachedTo = null;\n\t\tthis.dom.handle.detach();\n\t},\n\n\n\t/**\n\t * Draw the selection outline by calculating the range between the start\n\t * and end cells, then placing the highlighting elements to draw a rectangle\n\t *\n\t * @param  {node}   target End cell\n\t * @param  {object} e      Originating event\n\t * @private\n\t */\n\t_drawSelection: function ( target, e )\n\t{\n\t\t// Calculate boundary for start cell to this one\n\t\tvar dt = this.s.dt;\n\t\tvar start = this.s.start;\n\t\tvar startCell = $(this.dom.start);\n\t\tvar end = {\n\t\t\trow: this.c.vertical ?\n\t\t\t\tdt.rows( { page: 'current' } ).nodes().indexOf( target.parentNode ) :\n\t\t\t\tstart.row,\n\t\t\tcolumn: this.c.horizontal ?\n\t\t\t\t$(target).index() :\n\t\t\t\tstart.column\n\t\t};\n\t\tvar colIndx = dt.column.index( 'toData', end.column );\n\t\tvar endRow =  dt.row( ':eq('+end.row+')', { page: 'current' } ); // Workaround for M581\n\t\tvar endCell = $( dt.cell( endRow.index(), colIndx ).node() );\n\n\t\t// Be sure that is a DataTables controlled cell\n\t\tif ( ! dt.cell( endCell ).any() ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// if target is not in the columns available - do nothing\n\t\tif ( dt.columns( this.c.columns ).indexes().indexOf( colIndx ) === -1 || end.row === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.s.end = end;\n\n\t\tvar top, bottom, left, right, height, width;\n\n\t\ttop    = start.row    < end.row    ? startCell : endCell;\n\t\tbottom = start.row    < end.row    ? endCell   : startCell;\n\t\tleft   = start.column < end.column ? startCell : endCell;\n\t\tright  = start.column < end.column ? endCell   : startCell;\n\n\t\ttop    = this._getPosition( top.get(0) ).top;\n\t\tleft   = this._getPosition( left.get(0) ).left;\n\t\theight = this._getPosition( bottom.get(0) ).top + bottom.outerHeight() - top;\n\t\twidth  = this._getPosition( right.get(0) ).left + right.outerWidth() - left;\n\n\t\tvar select = this.dom.select;\n\t\tselect.top.css( {\n\t\t\ttop: top,\n\t\t\tleft: left,\n\t\t\twidth: width\n\t\t} );\n\n\t\tselect.left.css( {\n\t\t\ttop: top,\n\t\t\tleft: left,\n\t\t\theight: height\n\t\t} );\n\n\t\tselect.bottom.css( {\n\t\t\ttop: top + height,\n\t\t\tleft: left,\n\t\t\twidth: width\n\t\t} );\n\n\t\tselect.right.css( {\n\t\t\ttop: top,\n\t\t\tleft: left + width,\n\t\t\theight: height\n\t\t} );\n\t},\n\n\n\t/**\n\t * Use the Editor API to perform an update based on the new data for the\n\t * cells\n\t *\n\t * @param {array} cells Information about the selected cells from the key\n\t *     up function\n\t * @private\n\t */\n\t_editor: function ( cells )\n\t{\n\t\tvar dt = this.s.dt;\n\t\tvar editor = this.c.editor;\n\n\t\tif ( ! editor ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Build the object structure for Editor's multi-row editing\n\t\tvar idValues = {};\n\t\tvar nodes = [];\n\t\tvar fields = editor.fields();\n\n\t\tfor ( var i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\tfor ( var j=0, jen=cells[i].length ; j<jen ; j++ ) {\n\t\t\t\tvar cell = cells[i][j];\n\n\t\t\t\t// Determine the field name for the cell being edited\n\t\t\t\tvar col = dt.settings()[0].aoColumns[ cell.index.column ];\n\t\t\t\tvar fieldName = col.editField;\n\n\t\t\t\tif ( fieldName === undefined ) {\n\t\t\t\t\tvar dataSrc = col.mData;\n\n\t\t\t\t\t// dataSrc is the `field.data` property, but we need to set\n\t\t\t\t\t// using the field name, so we need to translate from the\n\t\t\t\t\t// data to the name\n\t\t\t\t\tfor ( var k=0, ken=fields.length ; k<ken ; k++ ) {\n\t\t\t\t\t\tvar field = editor.field( fields[k] );\n\n\t\t\t\t\t\tif ( field.dataSrc() === dataSrc ) {\n\t\t\t\t\t\t\tfieldName = field.name();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( ! fieldName ) {\n\t\t\t\t\tthrow 'Could not automatically determine field data. '+\n\t\t\t\t\t\t'Please see https://datatables.net/tn/11';\n\t\t\t\t}\n\n\t\t\t\tif ( ! idValues[ fieldName ] ) {\n\t\t\t\t\tidValues[ fieldName ] = {};\n\t\t\t\t}\n\n\t\t\t\tvar id = dt.row( cell.index.row ).id();\n\t\t\t\tidValues[ fieldName ][ id ] = cell.set;\n\n\t\t\t\t// Keep a list of cells so we can activate the bubble editing\n\t\t\t\t// with them\n\t\t\t\tnodes.push( cell.index );\n\t\t\t}\n\t\t}\n\n\t\t// Perform the edit using bubble editing as it allows us to specify\n\t\t// the cells to be edited, rather than using full rows\n\t\teditor\n\t\t\t.bubble( nodes, false )\n\t\t\t.multiSet( idValues )\n\t\t\t.submit();\n\t},\n\n\n\t/**\n\t * Emit an event on the DataTable for listeners\n\t *\n\t * @param  {string} name Event name\n\t * @param  {array} args Event arguments\n\t * @private\n\t */\n\t_emitEvent: function ( name, args )\n\t{\n\t\tthis.s.dt.iterator( 'table', function ( ctx, i ) {\n\t\t\t$(ctx.nTable).triggerHandler( name+'.dt', args );\n\t\t} );\n\t},\n\n\n\t/**\n\t * Attach suitable listeners (based on the configuration) that will attach\n\t * and detach the AutoFill handle in the document.\n\t *\n\t * @private\n\t */\n\t_focusListener: function ()\n\t{\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar namespace = this.s.namespace;\n\t\tvar focus = this.c.focus !== null ?\n\t\t\tthis.c.focus :\n\t\t\tdt.init().keys || dt.settings()[0].keytable ?\n\t\t\t\t'focus' :\n\t\t\t\t'hover';\n\n\t\t// All event listeners attached here are removed in the `destroy`\n\t\t// callback in the constructor\n\t\tif ( focus === 'focus' ) {\n\t\t\tdt\n\t\t\t\t.on( 'key-focus.autoFill', function ( e, dt, cell ) {\n\t\t\t\t\tthat._attach( cell.node() );\n\t\t\t\t} )\n\t\t\t\t.on( 'key-blur.autoFill', function ( e, dt, cell ) {\n\t\t\t\t\tthat._detach();\n\t\t\t\t} );\n\t\t}\n\t\telse if ( focus === 'click' ) {\n\t\t\t$(dt.table().body()).on( 'click'+namespace, 'td, th', function (e) {\n\t\t\t\tthat._attach( this );\n\t\t\t} );\n\n\t\t\t$(document.body).on( 'click'+namespace, function (e) {\n\t\t\t\tif ( ! $(e.target).parents().filter( dt.table().body() ).length ) {\n\t\t\t\t\tthat._detach();\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\telse {\n\t\t\t$(dt.table().body())\n\t\t\t\t.on( 'mouseenter'+namespace+' touchstart'+namespace, 'td, th', function (e) {\n\t\t\t\t\tthat._attach( this );\n\t\t\t\t} )\n\t\t\t\t.on( 'mouseleave'+namespace+'touchend'+namespace, function (e) {\n\t\t\t\t\tif ( $(e.relatedTarget).hasClass('dt-autofill-handle') ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthat._detach();\n\t\t\t\t} );\n\n\t\t\t\n\t\t}\n\t},\n\n\n\t_focusListenerRemove: function ()\n\t{\n\t\tvar dt = this.s.dt;\n\n\t\tdt.off( '.autoFill' );\n\t\t$(dt.table().body()).off( this.s.namespace );\n\t\t$(document.body).off( this.s.namespace );\n\t},\n\n\n\t/**\n\t * Get the position of a node, relative to another, including any scrolling\n\t * offsets.\n\t * @param  {Node}   node         Node to get the position of\n\t * @param  {jQuery} targetParent Node to use as the parent\n\t * @return {object}              Offset calculation\n\t * @private\n\t */\n\t_getPosition: function ( node, targetParent )\n\t{\n\t\tvar\n\t\t\tcurrNode = node,\n\t\t\tcurrOffsetParent,\n\t\t\ttop = 0,\n\t\t\tleft = 0;\n\n\t\tif ( ! targetParent ) {\n\t\t\ttargetParent = $( $( this.s.dt.table().node() )[0].offsetParent );\n\t\t}\n\n\t\tdo {\n\t\t\t// Don't use jQuery().position() the behaviour changes between 1.x and 3.x for\n\t\t\t// tables\n\t\t\tvar positionTop = currNode.offsetTop;\n\t\t\tvar positionLeft = currNode.offsetLeft;\n\n\t\t\t// jQuery doesn't give a `table` as the offset parent oddly, so use DOM directly\n\t\t\tcurrOffsetParent = $( currNode.offsetParent );\n\n\t\t\ttop += positionTop + parseInt( currOffsetParent.css('border-top-width') || 0 ) * 1;\n\t\t\tleft += positionLeft + parseInt( currOffsetParent.css('border-left-width') || 0 ) * 1;\n\n\t\t\t// Emergency fall back. Shouldn't happen, but just in case!\n\t\t\tif ( currNode.nodeName.toLowerCase() === 'body' ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcurrNode = currOffsetParent.get(0); // for next loop\n\t\t}\n\t\twhile ( currOffsetParent.get(0) !== targetParent.get(0) )\n\n\t\treturn {\n\t\t\ttop: top,\n\t\t\tleft: left\n\t\t};\n\t},\n\n\n\t/**\n\t * Start mouse drag - selects the start cell\n\t *\n\t * @param  {object} e Mouse down event\n\t * @private\n\t */\n\t_mousedown: function ( e )\n\t{\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\n\t\tthis.dom.start = this.dom.attachedTo;\n\t\tthis.s.start = {\n\t\t\trow: dt.rows( { page: 'current' } ).nodes().indexOf( $(this.dom.start).parent()[0] ),\n\t\t\tcolumn: $(this.dom.start).index()\n\t\t};\n\n\t\t$(document.body)\n\t\t\t.on( 'mousemove.autoFill touchmove.autoFill', function (e) {\n\t\t\t\tthat._mousemove( e );\n\t\t\t\t// If it is a touch event then when the touch ends we need to remove the handle\n\t\t\t\tif(e.type === 'touchmove') {\n\t\t\t\t\t$(document.body).one('touchend.autoFill', function() {\n\t\t\t\t\t\tthat._detach();\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'mouseup.autoFill touchend.autoFill', function (e) {\n\t\t\t\tthat._mouseup( e );\n\t\t\t} );\n\n\t\tvar select = this.dom.select;\n\t\tvar offsetParent = $( dt.table().node() ).offsetParent();\n\t\tselect.top.appendTo( offsetParent );\n\t\tselect.left.appendTo( offsetParent );\n\t\tselect.right.appendTo( offsetParent );\n\t\tselect.bottom.appendTo( offsetParent );\n\n\t\tthis._drawSelection( this.dom.start, e );\n\n\t\tthis.dom.handle.css( 'display', 'none' );\n\n\t\t// Cache scrolling information so mouse move doesn't need to read.\n\t\t// This assumes that the window and DT scroller will not change size\n\t\t// during an AutoFill drag, which I think is a fair assumption\n\t\tvar scrollWrapper = this.dom.dtScroll;\n\t\tthis.s.scroll = {\n\t\t\twindowHeight: $(window).height(),\n\t\t\twindowWidth:  $(window).width(),\n\t\t\tdtTop:        scrollWrapper ? scrollWrapper.offset().top : null,\n\t\t\tdtLeft:       scrollWrapper ? scrollWrapper.offset().left : null,\n\t\t\tdtHeight:     scrollWrapper ? scrollWrapper.outerHeight() : null,\n\t\t\tdtWidth:      scrollWrapper ? scrollWrapper.outerWidth() : null\n\t\t};\n\t},\n\n\n\t/**\n\t * Mouse drag - selects the end cell and update the selection display for\n\t * the end user\n\t *\n\t * @param  {object} e Mouse move event\n\t * @private\n\t */\n\t_mousemove: function ( e )\n\t{\n\t\tvar target = e.touches && e.touches.length\n\t\t\t? document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY)\n\t\t\t: e.target;\n\t\tvar name = target.nodeName.toLowerCase();\n\n\t\tif ( name !== 'td' && name !== 'th' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._drawSelection( target, e );\n\t\tthis._shiftScroll( e );\n\t},\n\n\n\t/**\n\t * End mouse drag - perform the update actions\n\t *\n\t * @param  {object} e Mouse up event\n\t * @private\n\t */\n\t_mouseup: function ( e )\n\t{\n\t\t$(document.body).off( '.autoFill' );\n\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar select = this.dom.select;\n\t\tselect.top.remove();\n\t\tselect.left.remove();\n\t\tselect.right.remove();\n\t\tselect.bottom.remove();\n\n\t\tthis.dom.handle.css( 'display', 'block' );\n\n\t\t// Display complete - now do something useful with the selection!\n\t\tvar start = this.s.start;\n\t\tvar end = this.s.end;\n\n\t\t// Haven't selected multiple cells, so nothing to do\n\t\tif ( start.row === end.row && start.column === end.column ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar startDt = dt.cell( ':eq('+start.row+')', start.column+':visible', {page:'current'} );\n\n\t\t// If Editor is active inside this cell (inline editing) we need to wait for Editor to\n\t\t// submit and then we can loop back and trigger the fill.\n\t\tif ( $('div.DTE', startDt.node()).length ) {\n\t\t\tvar editor = dt.editor();\n\n\t\t\teditor\n\t\t\t\t.on( 'submitSuccess.dtaf close.dtaf', function () {\n\t\t\t\t\teditor.off( '.dtaf');\n\n\t\t\t\t\tsetTimeout( function () {\n\t\t\t\t\t\tthat._mouseup( e );\n\t\t\t\t\t}, 100 );\n\t\t\t\t} )\n\t\t\t\t.on( 'submitComplete.dtaf preSubmitCancelled.dtaf close.dtaf', function () {\n\t\t\t\t\teditor.off( '.dtaf');\n\t\t\t\t} );\n\n\t\t\t// Make the current input submit\n\t\t\teditor.submit();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Build a matrix representation of the selected rows\n\t\tvar rows       = this._range( start.row, end.row );\n\t\tvar columns    = this._range( start.column, end.column );\n\t\tvar selected   = [];\n\t\tvar dtSettings = dt.settings()[0];\n\t\tvar dtColumns  = dtSettings.aoColumns;\n\t\tvar enabledColumns = dt.columns( this.c.columns ).indexes();\n\n\t\t// Can't use Array.prototype.map as IE8 doesn't support it\n\t\t// Can't use $.map as jQuery flattens 2D arrays\n\t\t// Need to use a good old fashioned for loop\n\t\tfor ( var rowIdx=0 ; rowIdx<rows.length ; rowIdx++ ) {\n\t\t\tselected.push(\n\t\t\t\t$.map( columns, function (column) {\n\t\t\t\t\tvar row = dt.row( ':eq('+rows[rowIdx]+')', {page:'current'} ); // Workaround for M581\n\t\t\t\t\tvar cell = dt.cell( row.index(), column+':visible' );\n\t\t\t\t\tvar data = cell.data();\n\t\t\t\t\tvar cellIndex = cell.index();\n\t\t\t\t\tvar editField = dtColumns[ cellIndex.column ].editField;\n\n\t\t\t\t\tif ( editField !== undefined ) {\n\t\t\t\t\t\tdata = dtSettings.oApi._fnGetObjectDataFn( editField )( dt.row( cellIndex.row ).data() );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( enabledColumns.indexOf(cellIndex.column) === -1 ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcell:  cell,\n\t\t\t\t\t\tdata:  data,\n\t\t\t\t\t\tlabel: cell.data(),\n\t\t\t\t\t\tindex: cellIndex\n\t\t\t\t\t};\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\tthis._actionSelector( selected );\n\t\t\n\t\t// Stop shiftScroll\n\t\tclearInterval( this.s.scrollInterval );\n\t\tthis.s.scrollInterval = null;\n\t},\n\n\n\t/**\n\t * Create an array with a range of numbers defined by the start and end\n\t * parameters passed in (inclusive!).\n\t * \n\t * @param  {integer} start Start\n\t * @param  {integer} end   End\n\t * @private\n\t */\n\t_range: function ( start, end )\n\t{\n\t\tvar out = [];\n\t\tvar i;\n\n\t\tif ( start <= end ) {\n\t\t\tfor ( i=start ; i<=end ; i++ ) {\n\t\t\t\tout.push( i );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( i=start ; i>=end ; i-- ) {\n\t\t\t\tout.push( i );\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t},\n\n\n\t/**\n\t * Move the window and DataTables scrolling during a drag to scroll new\n\t * content into view. This is done by proximity to the edge of the scrolling\n\t * container of the mouse - for example near the top edge of the window\n\t * should scroll up. This is a little complicated as there are two elements\n\t * that can be scrolled - the window and the DataTables scrolling view port\n\t * (if scrollX and / or scrollY is enabled).\n\t *\n\t * @param  {object} e Mouse move event object\n\t * @private\n\t */\n\t_shiftScroll: function ( e )\n\t{\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar scroll = this.s.scroll;\n\t\tvar runInterval = false;\n\t\tvar scrollSpeed = 5;\n\t\tvar buffer = 65;\n\n\t\t// Different values if using a touchscreen\n\t\tvar pageX = !e.type.includes('touch') ? e.pageX - window.scrollX :e.touches[0].clientX;\n\t\tvar pageY = !e.type.includes('touch') ? e.pageY - window.scrollY :e.touches[0].clientY;\n\t\tvar\n\t\t\twindowY = pageY,\n\t\t\twindowX = pageX,\n\t\t\twindowVert, windowHoriz,\n\t\t\tdtVert, dtHoriz;\n\n\t\t// Window calculations - based on the mouse position in the window,\n\t\t// regardless of scrolling\n\t\tif ( windowY < buffer ) {\n\t\t\twindowVert = scrollSpeed * -1;\n\t\t}\n\t\telse if ( windowY > scroll.windowHeight - buffer ) {\n\t\t\twindowVert = scrollSpeed;\n\t\t}\n\n\t\tif ( windowX < buffer ) {\n\t\t\twindowHoriz = scrollSpeed * -1;\n\t\t}\n\t\telse if ( windowX > scroll.windowWidth - buffer ) {\n\t\t\twindowHoriz = scrollSpeed;\n\t\t}\n\n\t\t// DataTables scrolling calculations - based on the table's position in\n\t\t// the document and the mouse position on the page\n\t\tif ( scroll.dtTop !== null && pageY < scroll.dtTop + buffer ) {\n\t\t\tdtVert = scrollSpeed * -1;\n\t\t}\n\t\telse if ( scroll.dtTop !== null && pageY > scroll.dtTop + scroll.dtHeight - buffer ) {\n\t\t\tdtVert = scrollSpeed;\n\t\t}\n\n\t\tif ( scroll.dtLeft !== null && pageX < scroll.dtLeft + buffer ) {\n\t\t\tdtHoriz = scrollSpeed * -1;\n\t\t}\n\t\telse if ( scroll.dtLeft !== null && pageX > scroll.dtLeft + scroll.dtWidth - buffer ) {\n\t\t\tdtHoriz = scrollSpeed;\n\t\t}\n\n\t\t// This is where it gets interesting. We want to continue scrolling\n\t\t// without requiring a mouse move, so we need an interval to be\n\t\t// triggered. The interval should continue until it is no longer needed,\n\t\t// but it must also use the latest scroll commands (for example consider\n\t\t// that the mouse might move from scrolling up to scrolling left, all\n\t\t// with the same interval running. We use the `scroll` object to \"pass\"\n\t\t// this information to the interval. Can't use local variables as they\n\t\t// wouldn't be the ones that are used by an already existing interval!\n\t\tif ( windowVert || windowHoriz || dtVert || dtHoriz ) {\n\t\t\tscroll.windowVert = windowVert;\n\t\t\tscroll.windowHoriz = windowHoriz;\n\t\t\tscroll.dtVert = dtVert;\n\t\t\tscroll.dtHoriz = dtHoriz;\n\t\t\trunInterval = true;\n\t\t}\n\t\telse if ( this.s.scrollInterval ) {\n\t\t\t// Don't need to scroll - remove any existing timer\n\t\t\tclearInterval( this.s.scrollInterval );\n\t\t\tthis.s.scrollInterval = null;\n\t\t}\n\n\t\t// If we need to run the interval to scroll and there is no existing\n\t\t// interval (if there is an existing one, it will continue to run)\n\t\tif ( ! this.s.scrollInterval && runInterval ) {\n\t\t\tthis.s.scrollInterval = setInterval( function () {\n\t\t\t\t// Don't need to worry about setting scroll <0 or beyond the\n\t\t\t\t// scroll bound as the browser will just reject that.\n\t\t\t\twindow.scrollTo(window.scrollX + (scroll.windowHoriz ? scroll.windowHoriz : 0), window.scrollY + (scroll.windowVert ? scroll.windowVert : 0))\n\n\t\t\t\t// DataTables scrolling\n\t\t\t\tif ( scroll.dtVert || scroll.dtHoriz ) {\n\t\t\t\t\tvar scroller = that.dom.dtScroll[0];\n\n\t\t\t\t\tif ( scroll.dtVert ) {\n\t\t\t\t\t\tscroller.scrollTop += scroll.dtVert;\n\t\t\t\t\t}\n\t\t\t\t\tif ( scroll.dtHoriz ) {\n\t\t\t\t\t\tscroller.scrollLeft += scroll.dtHoriz;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 20 );\n\t\t}\n\t},\n\n\n\t/**\n\t * Update the DataTable after the user has selected what they want to do\n\t *\n\t * @param  {false|undefined} result Return from the `execute` method - can\n\t *   be false internally to do nothing. This is not documented for plug-ins\n\t *   and is used only by the cancel option.\n\t * @param {array} cells Information about the selected cells from the key\n\t *     up function, argumented with the set values\n\t * @private\n\t */\n\t_update: function ( result, cells )\n\t{\n\t\t// Do nothing on `false` return from an execute function\n\t\tif ( result === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dt = this.s.dt;\n\t\tvar cell;\n\t\tvar columns = dt.columns( this.c.columns ).indexes();\n\n\t\t// Potentially allow modifications to the cells matrix\n\t\tthis._emitEvent( 'preAutoFill', [ dt, cells ] );\n\n\t\tthis._editor( cells );\n\n\t\t// Automatic updates are not performed if `update` is null and the\n\t\t// `editor` parameter is passed in - the reason being that Editor will\n\t\t// update the data once submitted\n\t\tvar update = this.c.update !== null ?\n\t\t\tthis.c.update :\n\t\t\tthis.c.editor ?\n\t\t\t\tfalse :\n\t\t\t\ttrue;\n\n\t\tif ( update ) {\n\t\t\tfor ( var i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tfor ( var j=0, jen=cells[i].length ; j<jen ; j++ ) {\n\t\t\t\t\tcell = cells[i][j];\n\n\t\t\t\t\tif ( columns.indexOf(cell.index.column) !== -1 ) {\n\t\t\t\t\t\tcell.cell.data( cell.set );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdt.draw(false);\n\t\t}\n\n\t\tthis._emitEvent( 'autoFill', [ dt, cells ] );\n\t}\n} );\n\n\n/**\n * AutoFill actions. The options here determine how AutoFill will fill the data\n * in the table when the user has selected a range of cells. Please see the\n * documentation on the DataTables site for full details on how to create plug-\n * ins.\n *\n * @type {Object}\n */\nAutoFill.actions = {\n\tincrement: {\n\t\tavailable: function ( dt, cells ) {\n\t\t\tvar d = cells[0][0].label;\n\n\t\t\t// is numeric test based on jQuery's old `isNumeric` function\n\t\t\treturn !isNaN( d - parseFloat( d ) );\n\t\t},\n\n\t\toption: function ( dt, cells ) {\n\t\t\treturn dt.i18n(\n\t\t\t\t'autoFill.increment',\n\t\t\t\t'Increment / decrement each cell by: <input type=\"number\" value=\"1\">'\n\t\t\t);\n\t\t},\n\n\t\texecute: function ( dt, cells, node ) {\n\t\t\tvar value = cells[0][0].data * 1;\n\t\t\tvar increment = $('input', node).val() * 1;\n\n\t\t\tfor ( var i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tfor ( var j=0, jen=cells[i].length ; j<jen ; j++ ) {\n\t\t\t\t\tcells[i][j].set = value;\n\n\t\t\t\t\tvalue += increment;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tfill: {\n\t\tavailable: function ( dt, cells ) {\n\t\t\treturn true;\n\t\t},\n\n\t\toption: function ( dt, cells ) {\n\t\t\treturn dt.i18n('autoFill.fill', 'Fill all cells with <i>%d</i>', cells[0][0].label );\n\t\t},\n\n\t\texecute: function ( dt, cells, node ) {\n\t\t\tvar value = cells[0][0].data;\n\n\t\t\tfor ( var i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tfor ( var j=0, jen=cells[i].length ; j<jen ; j++ ) {\n\t\t\t\t\tcells[i][j].set = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tfillHorizontal: {\n\t\tavailable: function ( dt, cells ) {\n\t\t\treturn cells.length > 1 && cells[0].length > 1;\n\t\t},\n\n\t\toption: function ( dt, cells ) {\n\t\t\treturn dt.i18n('autoFill.fillHorizontal', 'Fill cells horizontally' );\n\t\t},\n\n\t\texecute: function ( dt, cells, node ) {\n\t\t\tfor ( var i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tfor ( var j=0, jen=cells[i].length ; j<jen ; j++ ) {\n\t\t\t\t\tcells[i][j].set = cells[i][0].data;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tfillVertical: {\n\t\tavailable: function ( dt, cells ) {\n\t\t\treturn cells.length > 1 && cells[0].length > 1;\n\t\t},\n\n\t\toption: function ( dt, cells ) {\n\t\t\treturn dt.i18n('autoFill.fillVertical', 'Fill cells vertically' );\n\t\t},\n\n\t\texecute: function ( dt, cells, node ) {\n\t\t\tfor ( var i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tfor ( var j=0, jen=cells[i].length ; j<jen ; j++ ) {\n\t\t\t\t\tcells[i][j].set = cells[0][j].data;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Special type that does not make itself available, but is added\n\t// automatically by AutoFill if a multi-choice list is shown. This allows\n\t// sensible code reuse\n\tcancel: {\n\t\tavailable: function () {\n\t\t\treturn false;\n\t\t},\n\n\t\toption: function ( dt ) {\n\t\t\treturn dt.i18n('autoFill.cancel', 'Cancel' );\n\t\t},\n\n\t\texecute: function () {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n\n/**\n * AutoFill version\n * \n * @static\n * @type      String\n */\nAutoFill.version = '2.6.0';\n\n\n/**\n * AutoFill defaults\n * \n * @namespace\n */\nAutoFill.defaults = {\n\t/** @type {Boolean} Ask user what they want to do, even for a single option */\n\talwaysAsk: false,\n\n\tcloseButton: true,\n\n\t/** @type {string|null} What will trigger a focus */\n\tfocus: null, // focus, click, hover\n\n\t/** @type {column-selector} Columns to provide auto fill for */\n\tcolumns: '', // all\n\n\t/** @type {Boolean} Enable AutoFill on load */\n\tenable: true,\n\n\t/** @type {boolean|null} Update the cells after a drag */\n\tupdate: null, // false is editor given, true otherwise\n\n\t/** @type {DataTable.Editor} Editor instance for automatic submission */\n\teditor: null,\n\n\t/** @type {boolean} Enable vertical fill */\n\tvertical: true,\n\n\t/** @type {boolean} Enable horizontal fill */\n\thorizontal: true\n};\n\n\n/**\n * Classes used by AutoFill that are configurable\n * \n * @namespace\n */\nAutoFill.classes = {\n\t/** @type {String} Class used by the selection button */\n\tbtn: 'btn',\n\n\tcloseable: 'dtaf-popover-closeable'\n};\n\n\n/*\n * API\n */\nvar Api = $.fn.dataTable.Api;\n\n// Doesn't do anything - Not documented\nApi.register( 'autoFill()', function () {\n\treturn this;\n} );\n\nApi.register( 'autoFill().enabled()', function () {\n\tvar ctx = this.context[0];\n\n\treturn ctx.autoFill ?\n\t\tctx.autoFill.enabled() :\n\t\tfalse;\n} );\n\nApi.register( 'autoFill().enable()', function ( flag ) {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\tif ( ctx.autoFill ) {\n\t\t\tctx.autoFill.enable( flag );\n\t\t}\n\t} );\n} );\n\nApi.register( 'autoFill().disable()', function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\tif ( ctx.autoFill ) {\n\t\t\tctx.autoFill.disable();\n\t\t}\n\t} );\n} );\n\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on( 'preInit.dt.autofill', function (e, settings, json) {\n\tif ( e.namespace !== 'dt' ) {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.autoFill;\n\tvar defaults = DataTable.defaults.autoFill;\n\n\tif ( init || defaults ) {\n\t\tvar opts = $.extend( {}, init, defaults );\n\n\t\tif ( init !== false ) {\n\t\t\tnew AutoFill( settings, opts  );\n\t\t}\n\t}\n} );\n\n\n// Alias for access\nDataTable.AutoFill = AutoFill;\n$.fn.DataTable.AutoFill = AutoFill;\n\n\nreturn DataTable;\n}));\n\n\n/*! Bootstrap integration for DataTables' AutoFill\n * ©2015 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-autofill'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.AutoFill ) {\n\t\t\t\trequire('datatables.net-autofill')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nDataTable.AutoFill.classes.btn = 'btn btn-primary';\n\n\nreturn DataTable;\n}));\n\n\n/*! Buttons for DataTables 2.4.2\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n// Used for namespacing events added to the document by each instance, so they\n// can be removed on destroy\nvar _instCounter = 0;\n\n// Button namespacing counter for namespacing events on individual buttons\nvar _buttonCounter = 0;\n\nvar _dtButtons = DataTable.ext.buttons;\n\n// Custom entity decoder for data export\nvar _entityDecoder = null;\n\n// Allow for jQuery slim\nfunction _fadeIn(el, duration, fn) {\n\tif ($.fn.animate) {\n\t\tel.stop().fadeIn(duration, fn);\n\t}\n\telse {\n\t\tel.css('display', 'block');\n\n\t\tif (fn) {\n\t\t\tfn.call(el);\n\t\t}\n\t}\n}\n\nfunction _fadeOut(el, duration, fn) {\n\tif ($.fn.animate) {\n\t\tel.stop().fadeOut(duration, fn);\n\t}\n\telse {\n\t\tel.css('display', 'none');\n\n\t\tif (fn) {\n\t\t\tfn.call(el);\n\t\t}\n\t}\n}\n\n/**\n * [Buttons description]\n * @param {[type]}\n * @param {[type]}\n */\nvar Buttons = function (dt, config) {\n\t// If not created with a `new` keyword then we return a wrapper function that\n\t// will take the settings object for a DT. This allows easy use of new instances\n\t// with the `layout` option - e.g. `topLeft: $.fn.dataTable.Buttons( ... )`.\n\tif (!(this instanceof Buttons)) {\n\t\treturn function (settings) {\n\t\t\treturn new Buttons(settings, dt).container();\n\t\t};\n\t}\n\n\t// If there is no config set it to an empty object\n\tif (typeof config === 'undefined') {\n\t\tconfig = {};\n\t}\n\n\t// Allow a boolean true for defaults\n\tif (config === true) {\n\t\tconfig = {};\n\t}\n\n\t// For easy configuration of buttons an array can be given\n\tif (Array.isArray(config)) {\n\t\tconfig = { buttons: config };\n\t}\n\n\tthis.c = $.extend(true, {}, Buttons.defaults, config);\n\n\t// Don't want a deep copy for the buttons\n\tif (config.buttons) {\n\t\tthis.c.buttons = config.buttons;\n\t}\n\n\tthis.s = {\n\t\tdt: new DataTable.Api(dt),\n\t\tbuttons: [],\n\t\tlistenKeys: '',\n\t\tnamespace: 'dtb' + _instCounter++\n\t};\n\n\tthis.dom = {\n\t\tcontainer: $('<' + this.c.dom.container.tag + '/>').addClass(this.c.dom.container.className)\n\t};\n\n\tthis._constructor();\n};\n\n$.extend(Buttons.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods\n\t */\n\n\t/**\n\t * Get the action of a button\n\t * @param  {int|string} Button index\n\t * @return {function}\n\t */ /**\n\t * Set the action of a button\n\t * @param  {node} node Button element\n\t * @param  {function} action Function to set\n\t * @return {Buttons} Self for chaining\n\t */\n\taction: function (node, action) {\n\t\tvar button = this._nodeToButton(node);\n\n\t\tif (action === undefined) {\n\t\t\treturn button.conf.action;\n\t\t}\n\n\t\tbutton.conf.action = action;\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Add an active class to the button to make to look active or get current\n\t * active state.\n\t * @param  {node} node Button element\n\t * @param  {boolean} [flag] Enable / disable flag\n\t * @return {Buttons} Self for chaining or boolean for getter\n\t */\n\tactive: function (node, flag) {\n\t\tvar button = this._nodeToButton(node);\n\t\tvar klass = this.c.dom.button.active;\n\t\tvar jqNode = $(button.node);\n\n\t\tif (\n\t\t\tbutton.inCollection &&\n\t\t\tthis.c.dom.collection.button &&\n\t\t\tthis.c.dom.collection.button.active !== undefined\n\t\t) {\n\t\t\tklass = this.c.dom.collection.button.active;\n\t\t}\n\n\t\tif (flag === undefined) {\n\t\t\treturn jqNode.hasClass(klass);\n\t\t}\n\n\t\tjqNode.toggleClass(klass, flag === undefined ? true : flag);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Add a new button\n\t * @param {object} config Button configuration object, base string name or function\n\t * @param {int|string} [idx] Button index for where to insert the button\n\t * @param {boolean} [draw=true] Trigger a draw. Set a false when adding\n\t *   lots of buttons, until the last button.\n\t * @return {Buttons} Self for chaining\n\t */\n\tadd: function (config, idx, draw) {\n\t\tvar buttons = this.s.buttons;\n\n\t\tif (typeof idx === 'string') {\n\t\t\tvar split = idx.split('-');\n\t\t\tvar base = this.s;\n\n\t\t\tfor (var i = 0, ien = split.length - 1; i < ien; i++) {\n\t\t\t\tbase = base.buttons[split[i] * 1];\n\t\t\t}\n\n\t\t\tbuttons = base.buttons;\n\t\t\tidx = split[split.length - 1] * 1;\n\t\t}\n\n\t\tthis._expandButton(\n\t\t\tbuttons,\n\t\t\tconfig,\n\t\t\tconfig !== undefined ? config.split : undefined,\n\t\t\t(config === undefined || config.split === undefined || config.split.length === 0) &&\n\t\t\t\tbase !== undefined,\n\t\t\tfalse,\n\t\t\tidx\n\t\t);\n\n\t\tif (draw === undefined || draw === true) {\n\t\t\tthis._draw();\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Clear buttons from a collection and then insert new buttons\n\t */\n\tcollectionRebuild: function (node, newButtons) {\n\t\tvar button = this._nodeToButton(node);\n\n\t\tif (newButtons !== undefined) {\n\t\t\tvar i;\n\t\t\t// Need to reverse the array\n\t\t\tfor (i = button.buttons.length - 1; i >= 0; i--) {\n\t\t\t\tthis.remove(button.buttons[i].node);\n\t\t\t}\n\n\t\t\t// If the collection has prefix and / or postfix buttons we need to add them in\n\t\t\tif (button.conf.prefixButtons) {\n\t\t\t\tnewButtons.unshift.apply(newButtons, button.conf.prefixButtons);\n\t\t\t}\n\n\t\t\tif (button.conf.postfixButtons) {\n\t\t\t\tnewButtons.push.apply(newButtons, button.conf.postfixButtons);\n\t\t\t}\n\n\t\t\tfor (i = 0; i < newButtons.length; i++) {\n\t\t\t\tvar newBtn = newButtons[i];\n\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tbutton.buttons,\n\t\t\t\t\tnewBtn,\n\t\t\t\t\tnewBtn !== undefined &&\n\t\t\t\t\t\tnewBtn.config !== undefined &&\n\t\t\t\t\t\tnewBtn.config.split !== undefined,\n\t\t\t\t\ttrue,\n\t\t\t\t\tnewBtn.parentConf !== undefined && newBtn.parentConf.split !== undefined,\n\t\t\t\t\tnull,\n\t\t\t\t\tnewBtn.parentConf\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis._draw(button.collection, button.buttons);\n\t},\n\n\t/**\n\t * Get the container node for the buttons\n\t * @return {jQuery} Buttons node\n\t */\n\tcontainer: function () {\n\t\treturn this.dom.container;\n\t},\n\n\t/**\n\t * Disable a button\n\t * @param  {node} node Button node\n\t * @return {Buttons} Self for chaining\n\t */\n\tdisable: function (node) {\n\t\tvar button = this._nodeToButton(node);\n\n\t\t$(button.node).addClass(this.c.dom.button.disabled).prop('disabled', true);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Destroy the instance, cleaning up event handlers and removing DOM\n\t * elements\n\t * @return {Buttons} Self for chaining\n\t */\n\tdestroy: function () {\n\t\t// Key event listener\n\t\t$('body').off('keyup.' + this.s.namespace);\n\n\t\t// Individual button destroy (so they can remove their own events if\n\t\t// needed). Take a copy as the array is modified by `remove`\n\t\tvar buttons = this.s.buttons.slice();\n\t\tvar i, ien;\n\n\t\tfor (i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tthis.remove(buttons[i].node);\n\t\t}\n\n\t\t// Container\n\t\tthis.dom.container.remove();\n\n\t\t// Remove from the settings object collection\n\t\tvar buttonInsts = this.s.dt.settings()[0];\n\n\t\tfor (i = 0, ien = buttonInsts.length; i < ien; i++) {\n\t\t\tif (buttonInsts.inst === this) {\n\t\t\t\tbuttonInsts.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Enable / disable a button\n\t * @param  {node} node Button node\n\t * @param  {boolean} [flag=true] Enable / disable flag\n\t * @return {Buttons} Self for chaining\n\t */\n\tenable: function (node, flag) {\n\t\tif (flag === false) {\n\t\t\treturn this.disable(node);\n\t\t}\n\n\t\tvar button = this._nodeToButton(node);\n\t\t$(button.node).removeClass(this.c.dom.button.disabled).prop('disabled', false);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Get a button's index\n\t *\n\t * This is internally recursive\n\t * @param {element} node Button to get the index of\n\t * @return {string} Button index\n\t */\n\tindex: function (node, nested, buttons) {\n\t\tif (!nested) {\n\t\t\tnested = '';\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tvar inner = buttons[i].buttons;\n\n\t\t\tif (buttons[i].node === node) {\n\t\t\t\treturn nested + i;\n\t\t\t}\n\n\t\t\tif (inner && inner.length) {\n\t\t\t\tvar match = this.index(node, i + '-', inner);\n\n\t\t\t\tif (match !== null) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Get the instance name for the button set selector\n\t * @return {string} Instance name\n\t */\n\tname: function () {\n\t\treturn this.c.name;\n\t},\n\n\t/**\n\t * Get a button's node of the buttons container if no button is given\n\t * @param  {node} [node] Button node\n\t * @return {jQuery} Button element, or container\n\t */\n\tnode: function (node) {\n\t\tif (!node) {\n\t\t\treturn this.dom.container;\n\t\t}\n\n\t\tvar button = this._nodeToButton(node);\n\t\treturn $(button.node);\n\t},\n\n\t/**\n\t * Set / get a processing class on the selected button\n\t * @param {element} node Triggering button node\n\t * @param  {boolean} flag true to add, false to remove, undefined to get\n\t * @return {boolean|Buttons} Getter value or this if a setter.\n\t */\n\tprocessing: function (node, flag) {\n\t\tvar dt = this.s.dt;\n\t\tvar button = this._nodeToButton(node);\n\n\t\tif (flag === undefined) {\n\t\t\treturn $(button.node).hasClass('processing');\n\t\t}\n\n\t\t$(button.node).toggleClass('processing', flag);\n\n\t\t$(dt.table().node()).triggerHandler('buttons-processing.dt', [\n\t\t\tflag,\n\t\t\tdt.button(node),\n\t\t\tdt,\n\t\t\t$(node),\n\t\t\tbutton.conf\n\t\t]);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Remove a button.\n\t * @param  {node} node Button node\n\t * @return {Buttons} Self for chaining\n\t */\n\tremove: function (node) {\n\t\tvar button = this._nodeToButton(node);\n\t\tvar host = this._nodeToHost(node);\n\t\tvar dt = this.s.dt;\n\n\t\t// Remove any child buttons first\n\t\tif (button.buttons.length) {\n\t\t\tfor (var i = button.buttons.length - 1; i >= 0; i--) {\n\t\t\t\tthis.remove(button.buttons[i].node);\n\t\t\t}\n\t\t}\n\n\t\tbutton.conf.destroying = true;\n\n\t\t// Allow the button to remove event handlers, etc\n\t\tif (button.conf.destroy) {\n\t\t\tbutton.conf.destroy.call(dt.button(node), dt, $(node), button.conf);\n\t\t}\n\n\t\tthis._removeKey(button.conf);\n\n\t\t$(button.node).remove();\n\n\t\tvar idx = $.inArray(button, host);\n\t\thost.splice(idx, 1);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Get the text for a button\n\t * @param  {int|string} node Button index\n\t * @return {string} Button text\n\t */ /**\n\t * Set the text for a button\n\t * @param  {int|string|function} node Button index\n\t * @param  {string} label Text\n\t * @return {Buttons} Self for chaining\n\t */\n\ttext: function (node, label) {\n\t\tvar button = this._nodeToButton(node);\n\t\tvar textNode = button.textNode;\n\t\tvar dt = this.s.dt;\n\t\tvar jqNode = $(button.node);\n\t\tvar text = function (opt) {\n\t\t\treturn typeof opt === 'function' ? opt(dt, jqNode, button.conf) : opt;\n\t\t};\n\n\t\tif (label === undefined) {\n\t\t\treturn text(button.conf.text);\n\t\t}\n\n\t\tbutton.conf.text = label;\n\t\ttextNode.html(text(label));\n\n\t\treturn this;\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Buttons constructor\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar dtSettings = dt.settings()[0];\n\t\tvar buttons = this.c.buttons;\n\n\t\tif (!dtSettings._buttons) {\n\t\t\tdtSettings._buttons = [];\n\t\t}\n\n\t\tdtSettings._buttons.push({\n\t\t\tinst: this,\n\t\t\tname: this.c.name\n\t\t});\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tthis.add(buttons[i]);\n\t\t}\n\n\t\tdt.on('destroy', function (e, settings) {\n\t\t\tif (settings === dtSettings) {\n\t\t\t\tthat.destroy();\n\t\t\t}\n\t\t});\n\n\t\t// Global key event binding to listen for button keys\n\t\t$('body').on('keyup.' + this.s.namespace, function (e) {\n\t\t\tif (!document.activeElement || document.activeElement === document.body) {\n\t\t\t\t// SUse a string of characters for fast lookup of if we need to\n\t\t\t\t// handle this\n\t\t\t\tvar character = String.fromCharCode(e.keyCode).toLowerCase();\n\n\t\t\t\tif (that.s.listenKeys.toLowerCase().indexOf(character) !== -1) {\n\t\t\t\t\tthat._keypress(character, e);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Add a new button to the key press listener\n\t * @param {object} conf Resolved button configuration object\n\t * @private\n\t */\n\t_addKey: function (conf) {\n\t\tif (conf.key) {\n\t\t\tthis.s.listenKeys += $.isPlainObject(conf.key) ? conf.key.key : conf.key;\n\t\t}\n\t},\n\n\t/**\n\t * Insert the buttons into the container. Call without parameters!\n\t * @param  {node} [container] Recursive only - Insert point\n\t * @param  {array} [buttons] Recursive only - Buttons array\n\t * @private\n\t */\n\t_draw: function (container, buttons) {\n\t\tif (!container) {\n\t\t\tcontainer = this.dom.container;\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tcontainer.children().detach();\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tcontainer.append(buttons[i].inserter);\n\t\t\tcontainer.append(' ');\n\n\t\t\tif (buttons[i].buttons && buttons[i].buttons.length) {\n\t\t\t\tthis._draw(buttons[i].collection, buttons[i].buttons);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Create buttons from an array of buttons\n\t * @param  {array} attachTo Buttons array to attach to\n\t * @param  {object} button Button definition\n\t * @param  {boolean} inCollection true if the button is in a collection\n\t * @private\n\t */\n\t_expandButton: function (\n\t\tattachTo,\n\t\tbutton,\n\t\tsplit,\n\t\tinCollection,\n\t\tinSplit,\n\t\tattachPoint,\n\t\tparentConf\n\t) {\n\t\tvar dt = this.s.dt;\n\t\tvar isSplit = false;\n\t\tvar domCollection = this.c.dom.collection;\n\t\tvar buttons = !Array.isArray(button) ? [button] : button;\n\n\t\tif (button === undefined) {\n\t\t\tbuttons = !Array.isArray(split) ? [split] : split;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tvar conf = this._resolveExtends(buttons[i]);\n\n\t\t\tif (!conf) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tisSplit = conf.config && conf.config.split ? true : false;\n\n\t\t\t// If the configuration is an array, then expand the buttons at this\n\t\t\t// point\n\t\t\tif (Array.isArray(conf)) {\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tattachTo,\n\t\t\t\t\tconf,\n\t\t\t\t\tbuilt !== undefined && built.conf !== undefined ? built.conf.split : undefined,\n\t\t\t\t\tinCollection,\n\t\t\t\t\tparentConf !== undefined && parentConf.split !== undefined,\n\t\t\t\t\tattachPoint,\n\t\t\t\t\tparentConf\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar built = this._buildButton(\n\t\t\t\tconf,\n\t\t\t\tinCollection,\n\t\t\t\tconf.split !== undefined ||\n\t\t\t\t\t(conf.config !== undefined && conf.config.split !== undefined),\n\t\t\t\tinSplit\n\t\t\t);\n\t\t\tif (!built) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (attachPoint !== undefined && attachPoint !== null) {\n\t\t\t\tattachTo.splice(attachPoint, 0, built);\n\t\t\t\tattachPoint++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tattachTo.push(built);\n\t\t\t}\n\n\t\t\t// Create the dropdown for a collection\n\t\t\tif (built.conf.buttons) {\n\t\t\t\tbuilt.collection = $('<' + domCollection.container.content.tag + '/>');\n\t\t\t\tbuilt.conf._collection = built.collection;\n\n\t\t\t\t$(built.node).append(domCollection.action.dropHtml);\n\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tbuilt.buttons,\n\t\t\t\t\tbuilt.conf.buttons,\n\t\t\t\t\tbuilt.conf.split,\n\t\t\t\t\t!isSplit,\n\t\t\t\t\tisSplit,\n\t\t\t\t\tattachPoint,\n\t\t\t\t\tbuilt.conf\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// And the split collection\n\t\t\tif (built.conf.split) {\n\t\t\t\tbuilt.collection = $('<' + domCollection.container.tag + '/>');\n\t\t\t\tbuilt.conf._collection = built.collection;\n\n\t\t\t\tfor (var j = 0; j < built.conf.split.length; j++) {\n\t\t\t\t\tvar item = built.conf.split[j];\n\n\t\t\t\t\tif (typeof item === 'object') {\n\t\t\t\t\t\titem.parent = parentConf;\n\n\t\t\t\t\t\tif (item.collectionLayout === undefined) {\n\t\t\t\t\t\t\titem.collectionLayout = built.conf.collectionLayout;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (item.dropup === undefined) {\n\t\t\t\t\t\t\titem.dropup = built.conf.dropup;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (item.fade === undefined) {\n\t\t\t\t\t\t\titem.fade = built.conf.fade;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tbuilt.buttons,\n\t\t\t\t\tbuilt.conf.buttons,\n\t\t\t\t\tbuilt.conf.split,\n\t\t\t\t\t!isSplit,\n\t\t\t\t\tisSplit,\n\t\t\t\t\tattachPoint,\n\t\t\t\t\tbuilt.conf\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbuilt.conf.parent = parentConf;\n\n\t\t\t// init call is made here, rather than buildButton as it needs to\n\t\t\t// be selectable, and for that it needs to be in the buttons array\n\t\t\tif (conf.init) {\n\t\t\t\tconf.init.call(dt.button(built.node), dt, $(built.node), conf);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Create an individual button\n\t * @param  {object} config            Resolved button configuration\n\t * @param  {boolean} inCollection `true` if a collection button\n\t * @return {object} Completed button description object\n\t * @private\n\t */\n\t_buildButton: function (config, inCollection, isSplit, inSplit) {\n\t\tvar configDom = this.c.dom;\n\t\tvar textNode;\n\t\tvar dt = this.s.dt;\n\t\tvar text = function (opt) {\n\t\t\treturn typeof opt === 'function' ? opt(dt, button, config) : opt;\n\t\t};\n\n\t\t// Create an object that describes the button which can be in `dom.button`, or\n\t\t// `dom.collection.button` or `dom.split.button` or `dom.collection.split.button`!\n\t\t// Each should extend from `dom.button`.\n\t\tvar dom = $.extend(true, {}, configDom.button);\n\n\t\tif (inCollection && isSplit && configDom.collection.split) {\n\t\t\t$.extend(true, dom, configDom.collection.split.action);\n\t\t}\n\t\telse if (inSplit || inCollection) {\n\t\t\t$.extend(true, dom, configDom.collection.button);\n\t\t}\n\t\telse if (isSplit) {\n\t\t\t$.extend(true, dom, configDom.split.button);\n\t\t}\n\n\t\t// Spacers don't do much other than insert an element into the DOM\n\t\tif (config.spacer) {\n\t\t\tvar spacer = $('<' + dom.spacer.tag + '/>')\n\t\t\t\t.addClass('dt-button-spacer ' + config.style + ' ' + dom.spacer.className)\n\t\t\t\t.html(text(config.text));\n\n\t\t\treturn {\n\t\t\t\tconf: config,\n\t\t\t\tnode: spacer,\n\t\t\t\tinserter: spacer,\n\t\t\t\tbuttons: [],\n\t\t\t\tinCollection: inCollection,\n\t\t\t\tisSplit: isSplit,\n\t\t\t\tcollection: null,\n\t\t\t\ttextNode: spacer\n\t\t\t};\n\t\t}\n\n\t\t// Make sure that the button is available based on whatever requirements\n\t\t// it has. For example, PDF button require pdfmake\n\t\tif (config.available && !config.available(dt, config) && !config.hasOwnProperty('html')) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar button;\n\n\t\tif (!config.hasOwnProperty('html')) {\n\t\t\tvar action = function (e, dt, button, config) {\n\t\t\t\tconfig.action.call(dt.button(button), e, dt, button, config);\n\n\t\t\t\t$(dt.table().node()).triggerHandler('buttons-action.dt', [\n\t\t\t\t\tdt.button(button),\n\t\t\t\t\tdt,\n\t\t\t\t\tbutton,\n\t\t\t\t\tconfig\n\t\t\t\t]);\n\t\t\t};\n\n\t\t\tvar tag = config.tag || dom.tag;\n\t\t\tvar clickBlurs = config.clickBlurs === undefined ? true : config.clickBlurs;\n\n\t\t\tbutton = $('<' + tag + '/>')\n\t\t\t\t.addClass(dom.className)\n\t\t\t\t.attr('tabindex', this.s.dt.settings()[0].iTabIndex)\n\t\t\t\t.attr('aria-controls', this.s.dt.table().node().id)\n\t\t\t\t.on('click.dtb', function (e) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif (!button.hasClass(dom.disabled) && config.action) {\n\t\t\t\t\t\taction(e, dt, button, config);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (clickBlurs) {\n\t\t\t\t\t\tbutton.trigger('blur');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keypress.dtb', function (e) {\n\t\t\t\t\tif (e.keyCode === 13) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (!button.hasClass(dom.disabled) && config.action) {\n\t\t\t\t\t\t\taction(e, dt, button, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t// Make `a` tags act like a link\n\t\t\tif (tag.toLowerCase() === 'a') {\n\t\t\t\tbutton.attr('href', '#');\n\t\t\t}\n\n\t\t\t// Button tags should have `type=button` so they don't have any default behaviour\n\t\t\tif (tag.toLowerCase() === 'button') {\n\t\t\t\tbutton.attr('type', 'button');\n\t\t\t}\n\n\t\t\tif (dom.liner.tag) {\n\t\t\t\tvar liner = $('<' + dom.liner.tag + '/>')\n\t\t\t\t\t.html(text(config.text))\n\t\t\t\t\t.addClass(dom.liner.className);\n\n\t\t\t\tif (dom.liner.tag.toLowerCase() === 'a') {\n\t\t\t\t\tliner.attr('href', '#');\n\t\t\t\t}\n\n\t\t\t\tbutton.append(liner);\n\t\t\t\ttextNode = liner;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbutton.html(text(config.text));\n\t\t\t\ttextNode = button;\n\t\t\t}\n\n\t\t\tif (config.enabled === false) {\n\t\t\t\tbutton.addClass(dom.disabled);\n\t\t\t}\n\n\t\t\tif (config.className) {\n\t\t\t\tbutton.addClass(config.className);\n\t\t\t}\n\n\t\t\tif (config.titleAttr) {\n\t\t\t\tbutton.attr('title', text(config.titleAttr));\n\t\t\t}\n\n\t\t\tif (config.attr) {\n\t\t\t\tbutton.attr(config.attr);\n\t\t\t}\n\n\t\t\tif (!config.namespace) {\n\t\t\t\tconfig.namespace = '.dt-button-' + _buttonCounter++;\n\t\t\t}\n\n\t\t\tif (config.config !== undefined && config.config.split) {\n\t\t\t\tconfig.split = config.config.split;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tbutton = $(config.html);\n\t\t}\n\n\t\tvar buttonContainer = this.c.dom.buttonContainer;\n\t\tvar inserter;\n\t\tif (buttonContainer && buttonContainer.tag) {\n\t\t\tinserter = $('<' + buttonContainer.tag + '/>')\n\t\t\t\t.addClass(buttonContainer.className)\n\t\t\t\t.append(button);\n\t\t}\n\t\telse {\n\t\t\tinserter = button;\n\t\t}\n\n\t\tthis._addKey(config);\n\n\t\t// Style integration callback for DOM manipulation\n\t\t// Note that this is _not_ documented. It is currently\n\t\t// for style integration only\n\t\tif (this.c.buttonCreated) {\n\t\t\tinserter = this.c.buttonCreated(config, inserter);\n\t\t}\n\n\t\tvar splitDiv;\n\n\t\tif (isSplit) {\n\t\t\tvar dropdownConf = inCollection\n\t\t\t\t? $.extend(true, this.c.dom.split, this.c.dom.collection.split)\n\t\t\t\t: this.c.dom.split;\n\t\t\tvar wrapperConf = dropdownConf.wrapper;\n\n\t\t\tsplitDiv = $('<' + wrapperConf.tag + '/>')\n\t\t\t\t.addClass(wrapperConf.className)\n\t\t\t\t.append(button);\n\n\t\t\tvar dropButtonConfig = $.extend(config, {\n\t\t\t\talign: dropdownConf.dropdown.align,\n\t\t\t\tattr: {\n\t\t\t\t\t'aria-haspopup': 'dialog',\n\t\t\t\t\t'aria-expanded': false\n\t\t\t\t},\n\t\t\t\tclassName: dropdownConf.dropdown.className,\n\t\t\t\tcloseButton: false,\n\t\t\t\tsplitAlignClass: dropdownConf.dropdown.splitAlignClass,\n\t\t\t\ttext: dropdownConf.dropdown.text\n\t\t\t});\n\n\t\t\tthis._addKey(dropButtonConfig);\n\n\t\t\tvar splitAction = function (e, dt, button, config) {\n\t\t\t\t_dtButtons.split.action.call(dt.button(splitDiv), e, dt, button, config);\n\n\t\t\t\t$(dt.table().node()).triggerHandler('buttons-action.dt', [\n\t\t\t\t\tdt.button(button),\n\t\t\t\t\tdt,\n\t\t\t\t\tbutton,\n\t\t\t\t\tconfig\n\t\t\t\t]);\n\t\t\t\tbutton.attr('aria-expanded', true);\n\t\t\t};\n\n\t\t\tvar dropButton = $(\n\t\t\t\t'<button class=\"' + dropdownConf.dropdown.className + ' dt-button\"></button>'\n\t\t\t)\n\t\t\t\t.html(dropdownConf.dropdown.dropHtml)\n\t\t\t\t.on('click.dtb', function (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\tif (!dropButton.hasClass(dom.disabled)) {\n\t\t\t\t\t\tsplitAction(e, dt, dropButton, dropButtonConfig);\n\t\t\t\t\t}\n\t\t\t\t\tif (clickBlurs) {\n\t\t\t\t\t\tdropButton.trigger('blur');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keypress.dtb', function (e) {\n\t\t\t\t\tif (e.keyCode === 13) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (!dropButton.hasClass(dom.disabled)) {\n\t\t\t\t\t\t\tsplitAction(e, dt, dropButton, dropButtonConfig);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tif (config.split.length === 0) {\n\t\t\t\tdropButton.addClass('dtb-hide-drop');\n\t\t\t}\n\n\t\t\tsplitDiv.append(dropButton).attr(dropButtonConfig.attr);\n\t\t}\n\n\t\treturn {\n\t\t\tconf: config,\n\t\t\tnode: isSplit ? splitDiv.get(0) : button.get(0),\n\t\t\tinserter: isSplit ? splitDiv : inserter,\n\t\t\tbuttons: [],\n\t\t\tinCollection: inCollection,\n\t\t\tisSplit: isSplit,\n\t\t\tinSplit: inSplit,\n\t\t\tcollection: null,\n\t\t\ttextNode: textNode\n\t\t};\n\t},\n\n\t/**\n\t * Get the button object from a node (recursive)\n\t * @param  {node} node Button node\n\t * @param  {array} [buttons] Button array, uses base if not defined\n\t * @return {object} Button object\n\t * @private\n\t */\n\t_nodeToButton: function (node, buttons) {\n\t\tif (!buttons) {\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tif (buttons[i].node === node) {\n\t\t\t\treturn buttons[i];\n\t\t\t}\n\n\t\t\tif (buttons[i].buttons.length) {\n\t\t\t\tvar ret = this._nodeToButton(node, buttons[i].buttons);\n\n\t\t\t\tif (ret) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Get container array for a button from a button node (recursive)\n\t * @param  {node} node Button node\n\t * @param  {array} [buttons] Button array, uses base if not defined\n\t * @return {array} Button's host array\n\t * @private\n\t */\n\t_nodeToHost: function (node, buttons) {\n\t\tif (!buttons) {\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tif (buttons[i].node === node) {\n\t\t\t\treturn buttons;\n\t\t\t}\n\n\t\t\tif (buttons[i].buttons.length) {\n\t\t\t\tvar ret = this._nodeToHost(node, buttons[i].buttons);\n\n\t\t\t\tif (ret) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle a key press - determine if any button's key configured matches\n\t * what was typed and trigger the action if so.\n\t * @param  {string} character The character pressed\n\t * @param  {object} e Key event that triggered this call\n\t * @private\n\t */\n\t_keypress: function (character, e) {\n\t\t// Check if this button press already activated on another instance of Buttons\n\t\tif (e._buttonsHandled) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar run = function (conf, node) {\n\t\t\tif (!conf.key) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (conf.key === character) {\n\t\t\t\te._buttonsHandled = true;\n\t\t\t\t$(node).click();\n\t\t\t}\n\t\t\telse if ($.isPlainObject(conf.key)) {\n\t\t\t\tif (conf.key.key !== character) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.shiftKey && !e.shiftKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.altKey && !e.altKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.ctrlKey && !e.ctrlKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.metaKey && !e.metaKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Made it this far - it is good\n\t\t\t\te._buttonsHandled = true;\n\t\t\t\t$(node).click();\n\t\t\t}\n\t\t};\n\n\t\tvar recurse = function (a) {\n\t\t\tfor (var i = 0, ien = a.length; i < ien; i++) {\n\t\t\t\trun(a[i].conf, a[i].node);\n\n\t\t\t\tif (a[i].buttons.length) {\n\t\t\t\t\trecurse(a[i].buttons);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\trecurse(this.s.buttons);\n\t},\n\n\t/**\n\t * Remove a key from the key listener for this instance (to be used when a\n\t * button is removed)\n\t * @param  {object} conf Button configuration\n\t * @private\n\t */\n\t_removeKey: function (conf) {\n\t\tif (conf.key) {\n\t\t\tvar character = $.isPlainObject(conf.key) ? conf.key.key : conf.key;\n\n\t\t\t// Remove only one character, as multiple buttons could have the\n\t\t\t// same listening key\n\t\t\tvar a = this.s.listenKeys.split('');\n\t\t\tvar idx = $.inArray(character, a);\n\t\t\ta.splice(idx, 1);\n\t\t\tthis.s.listenKeys = a.join('');\n\t\t}\n\t},\n\n\t/**\n\t * Resolve a button configuration\n\t * @param  {string|function|object} conf Button config to resolve\n\t * @return {object} Button configuration\n\t * @private\n\t */\n\t_resolveExtends: function (conf) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar i, ien;\n\t\tvar toConfObject = function (base) {\n\t\t\tvar loop = 0;\n\n\t\t\t// Loop until we have resolved to a button configuration, or an\n\t\t\t// array of button configurations (which will be iterated\n\t\t\t// separately)\n\t\t\twhile (!$.isPlainObject(base) && !Array.isArray(base)) {\n\t\t\t\tif (base === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (typeof base === 'function') {\n\t\t\t\t\tbase = base.call(that, dt, conf);\n\n\t\t\t\t\tif (!base) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (typeof base === 'string') {\n\t\t\t\t\tif (!_dtButtons[base]) {\n\t\t\t\t\t\treturn { html: base };\n\t\t\t\t\t}\n\n\t\t\t\t\tbase = _dtButtons[base];\n\t\t\t\t}\n\n\t\t\t\tloop++;\n\t\t\t\tif (loop > 30) {\n\t\t\t\t\t// Protect against misconfiguration killing the browser\n\t\t\t\t\tthrow 'Buttons: Too many iterations';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Array.isArray(base) ? base : $.extend({}, base);\n\t\t};\n\n\t\tconf = toConfObject(conf);\n\n\t\twhile (conf && conf.extend) {\n\t\t\t// Use `toConfObject` in case the button definition being extended\n\t\t\t// is itself a string or a function\n\t\t\tif (!_dtButtons[conf.extend]) {\n\t\t\t\tthrow 'Cannot extend unknown button type: ' + conf.extend;\n\t\t\t}\n\n\t\t\tvar objArray = toConfObject(_dtButtons[conf.extend]);\n\t\t\tif (Array.isArray(objArray)) {\n\t\t\t\treturn objArray;\n\t\t\t}\n\t\t\telse if (!objArray) {\n\t\t\t\t// This is a little brutal as it might be possible to have a\n\t\t\t\t// valid button without the extend, but if there is no extend\n\t\t\t\t// then the host button would be acting in an undefined state\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Stash the current class name\n\t\t\tvar originalClassName = objArray.className;\n\n\t\t\tif (conf.config !== undefined && objArray.config !== undefined) {\n\t\t\t\tconf.config = $.extend({}, objArray.config, conf.config);\n\t\t\t}\n\n\t\t\tconf = $.extend({}, objArray, conf);\n\n\t\t\t// The extend will have overwritten the original class name if the\n\t\t\t// `conf` object also assigned a class, but we want to concatenate\n\t\t\t// them so they are list that is combined from all extended buttons\n\t\t\tif (originalClassName && conf.className !== originalClassName) {\n\t\t\t\tconf.className = originalClassName + ' ' + conf.className;\n\t\t\t}\n\n\t\t\t// Although we want the `conf` object to overwrite almost all of\n\t\t\t// the properties of the object being extended, the `extend`\n\t\t\t// property should come from the object being extended\n\t\t\tconf.extend = objArray.extend;\n\t\t}\n\n\t\t// Buttons to be added to a collection  -gives the ability to define\n\t\t// if buttons should be added to the start or end of a collection\n\t\tvar postfixButtons = conf.postfixButtons;\n\t\tif (postfixButtons) {\n\t\t\tif (!conf.buttons) {\n\t\t\t\tconf.buttons = [];\n\t\t\t}\n\n\t\t\tfor (i = 0, ien = postfixButtons.length; i < ien; i++) {\n\t\t\t\tconf.buttons.push(postfixButtons[i]);\n\t\t\t}\n\t\t}\n\n\t\tvar prefixButtons = conf.prefixButtons;\n\t\tif (prefixButtons) {\n\t\t\tif (!conf.buttons) {\n\t\t\t\tconf.buttons = [];\n\t\t\t}\n\n\t\t\tfor (i = 0, ien = prefixButtons.length; i < ien; i++) {\n\t\t\t\tconf.buttons.splice(i, 0, prefixButtons[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn conf;\n\t},\n\n\t/**\n\t * Display (and replace if there is an existing one) a popover attached to a button\n\t * @param {string|node} content Content to show\n\t * @param {DataTable.Api} hostButton DT API instance of the button\n\t * @param {object} inOpts Options (see object below for all options)\n\t */\n\t_popover: function (content, hostButton, inOpts, e) {\n\t\tvar dt = hostButton;\n\t\tvar c = this.c;\n\t\tvar closed = false;\n\t\tvar options = $.extend(\n\t\t\t{\n\t\t\t\talign: 'button-left', // button-right, dt-container, split-left, split-right\n\t\t\t\tautoClose: false,\n\t\t\t\tbackground: true,\n\t\t\t\tbackgroundClassName: 'dt-button-background',\n\t\t\t\tcloseButton: true,\n\t\t\t\tcontainerClassName: c.dom.collection.container.className,\n\t\t\t\tcontentClassName: c.dom.collection.container.content.className,\n\t\t\t\tcollectionLayout: '',\n\t\t\t\tcollectionTitle: '',\n\t\t\t\tdropup: false,\n\t\t\t\tfade: 400,\n\t\t\t\tpopoverTitle: '',\n\t\t\t\trightAlignClassName: 'dt-button-right',\n\t\t\t\ttag: c.dom.collection.container.tag\n\t\t\t},\n\t\t\tinOpts\n\t\t);\n\n\t\tvar containerSelector = options.tag + '.' + options.containerClassName.replace(/ /g, '.');\n\t\tvar hostNode = hostButton.node();\n\n\t\tvar close = function () {\n\t\t\tclosed = true;\n\n\t\t\t_fadeOut($(containerSelector), options.fade, function () {\n\t\t\t\t$(this).detach();\n\t\t\t});\n\n\t\t\t$(dt.buttons('[aria-haspopup=\"dialog\"][aria-expanded=\"true\"]').nodes()).attr(\n\t\t\t\t'aria-expanded',\n\t\t\t\t'false'\n\t\t\t);\n\n\t\t\t$('div.dt-button-background').off('click.dtb-collection');\n\t\t\tButtons.background(false, options.backgroundClassName, options.fade, hostNode);\n\n\t\t\t$(window).off('resize.resize.dtb-collection');\n\t\t\t$('body').off('.dtb-collection');\n\t\t\tdt.off('buttons-action.b-internal');\n\t\t\tdt.off('destroy');\n\t\t};\n\n\t\tif (content === false) {\n\t\t\tclose();\n\t\t\treturn;\n\t\t}\n\n\t\tvar existingExpanded = $(\n\t\t\tdt.buttons('[aria-haspopup=\"dialog\"][aria-expanded=\"true\"]').nodes()\n\t\t);\n\t\tif (existingExpanded.length) {\n\t\t\t// Reuse the current position if the button that was triggered is inside an existing collection\n\t\t\tif (hostNode.closest(containerSelector).length) {\n\t\t\t\thostNode = existingExpanded.eq(0);\n\t\t\t}\n\n\t\t\tclose();\n\t\t}\n\n\t\t// Try to be smart about the layout\n\t\tvar cnt = $('.dt-button', content).length;\n\t\tvar mod = '';\n\n\t\tif (cnt === 3) {\n\t\t\tmod = 'dtb-b3';\n\t\t}\n\t\telse if (cnt === 2) {\n\t\t\tmod = 'dtb-b2';\n\t\t}\n\t\telse if (cnt === 1) {\n\t\t\tmod = 'dtb-b1';\n\t\t}\n\n\t\tvar display = $('<' + options.tag + '/>')\n\t\t\t.addClass(options.containerClassName)\n\t\t\t.addClass(options.collectionLayout)\n\t\t\t.addClass(options.splitAlignClass)\n\t\t\t.addClass(mod)\n\t\t\t.css('display', 'none')\n\t\t\t.attr({\n\t\t\t\t'aria-modal': true,\n\t\t\t\trole: 'dialog'\n\t\t\t});\n\n\t\tcontent = $(content)\n\t\t\t.addClass(options.contentClassName)\n\t\t\t.attr('role', 'menu')\n\t\t\t.appendTo(display);\n\n\t\thostNode.attr('aria-expanded', 'true');\n\n\t\tif (hostNode.parents('body')[0] !== document.body) {\n\t\t\thostNode = document.body.lastChild;\n\t\t}\n\n\t\tif (options.popoverTitle) {\n\t\t\tdisplay.prepend(\n\t\t\t\t'<div class=\"dt-button-collection-title\">' + options.popoverTitle + '</div>'\n\t\t\t);\n\t\t}\n\t\telse if (options.collectionTitle) {\n\t\t\tdisplay.prepend(\n\t\t\t\t'<div class=\"dt-button-collection-title\">' + options.collectionTitle + '</div>'\n\t\t\t);\n\t\t}\n\n\t\tif (options.closeButton) {\n\t\t\tdisplay\n\t\t\t\t.prepend('<div class=\"dtb-popover-close\">&times;</div>')\n\t\t\t\t.addClass('dtb-collection-closeable');\n\t\t}\n\n\t\t_fadeIn(display.insertAfter(hostNode), options.fade);\n\n\t\tvar tableContainer = $(hostButton.table().container());\n\t\tvar position = display.css('position');\n\n\t\tif (options.span === 'container' || options.align === 'dt-container') {\n\t\t\thostNode = hostNode.parent();\n\t\t\tdisplay.css('width', tableContainer.width());\n\t\t}\n\n\t\t// Align the popover relative to the DataTables container\n\t\t// Useful for wide popovers such as SearchPanes\n\t\tif (position === 'absolute') {\n\t\t\t// Align relative to the host button\n\t\t\tvar offsetParent = $(hostNode[0].offsetParent);\n\t\t\tvar buttonPosition = hostNode.position();\n\t\t\tvar buttonOffset = hostNode.offset();\n\t\t\tvar tableSizes = offsetParent.offset();\n\t\t\tvar containerPosition = offsetParent.position();\n\t\t\tvar computed = window.getComputedStyle(offsetParent[0]);\n\n\t\t\ttableSizes.height = offsetParent.outerHeight();\n\t\t\ttableSizes.width = offsetParent.width() + parseFloat(computed.paddingLeft);\n\t\t\ttableSizes.right = tableSizes.left + tableSizes.width;\n\t\t\ttableSizes.bottom = tableSizes.top + tableSizes.height;\n\n\t\t\t// Set the initial position so we can read height / width\n\t\t\tvar top = buttonPosition.top + hostNode.outerHeight();\n\t\t\tvar left = buttonPosition.left;\n\n\t\t\tdisplay.css({\n\t\t\t\ttop: top,\n\t\t\t\tleft: left\n\t\t\t});\n\n\t\t\t// Get the popover position\n\t\t\tcomputed = window.getComputedStyle(display[0]);\n\t\t\tvar popoverSizes = display.offset();\n\n\t\t\tpopoverSizes.height = display.outerHeight();\n\t\t\tpopoverSizes.width = display.outerWidth();\n\t\t\tpopoverSizes.right = popoverSizes.left + popoverSizes.width;\n\t\t\tpopoverSizes.bottom = popoverSizes.top + popoverSizes.height;\n\t\t\tpopoverSizes.marginTop = parseFloat(computed.marginTop);\n\t\t\tpopoverSizes.marginBottom = parseFloat(computed.marginBottom);\n\n\t\t\t// First position per the class requirements - pop up and right align\n\t\t\tif (options.dropup) {\n\t\t\t\ttop =\n\t\t\t\t\tbuttonPosition.top -\n\t\t\t\t\tpopoverSizes.height -\n\t\t\t\t\tpopoverSizes.marginTop -\n\t\t\t\t\tpopoverSizes.marginBottom;\n\t\t\t}\n\n\t\t\tif (options.align === 'button-right' || display.hasClass(options.rightAlignClassName)) {\n\t\t\t\tleft = buttonPosition.left - popoverSizes.width + hostNode.outerWidth();\n\t\t\t}\n\n\t\t\t// Container alignment - make sure it doesn't overflow the table container\n\t\t\tif (options.align === 'dt-container' || options.align === 'container') {\n\t\t\t\tif (left < buttonPosition.left) {\n\t\t\t\t\tleft = -buttonPosition.left;\n\t\t\t\t}\n\n\t\t\t\tif (left + popoverSizes.width > tableSizes.width) {\n\t\t\t\t\tleft = tableSizes.width - popoverSizes.width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Window adjustment\n\t\t\tif (containerPosition.left + left + popoverSizes.width > $(window).width()) {\n\t\t\t\t// Overflowing the document to the right\n\t\t\t\tleft = $(window).width() - popoverSizes.width - containerPosition.left;\n\t\t\t}\n\n\t\t\tif (buttonOffset.left + left < 0) {\n\t\t\t\t// Off to the left of the document\n\t\t\t\tleft = -buttonOffset.left;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tcontainerPosition.top + top + popoverSizes.height >\n\t\t\t\t$(window).height() + $(window).scrollTop()\n\t\t\t) {\n\t\t\t\t// Pop up if otherwise we'd need the user to scroll down\n\t\t\t\ttop =\n\t\t\t\t\tbuttonPosition.top -\n\t\t\t\t\tpopoverSizes.height -\n\t\t\t\t\tpopoverSizes.marginTop -\n\t\t\t\t\tpopoverSizes.marginBottom;\n\t\t\t}\n\n\t\t\tif (containerPosition.top + top < $(window).scrollTop()) {\n\t\t\t\t// Correction for when the top is beyond the top of the page\n\t\t\t\ttop = buttonPosition.top + hostNode.outerHeight();\n\t\t\t}\n\n\t\t\t// Calculations all done - now set it\n\t\t\tdisplay.css({\n\t\t\t\ttop: top,\n\t\t\t\tleft: left\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t// Fix position - centre on screen\n\t\t\tvar position = function () {\n\t\t\t\tvar half = $(window).height() / 2;\n\n\t\t\t\tvar top = display.height() / 2;\n\t\t\t\tif (top > half) {\n\t\t\t\t\ttop = half;\n\t\t\t\t}\n\n\t\t\t\tdisplay.css('marginTop', top * -1);\n\t\t\t};\n\n\t\t\tposition();\n\n\t\t\t$(window).on('resize.dtb-collection', function () {\n\t\t\t\tposition();\n\t\t\t});\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tButtons.background(\n\t\t\t\ttrue,\n\t\t\t\toptions.backgroundClassName,\n\t\t\t\toptions.fade,\n\t\t\t\toptions.backgroundHost || hostNode\n\t\t\t);\n\t\t}\n\n\t\t// This is bonkers, but if we don't have a click listener on the\n\t\t// background element, iOS Safari will ignore the body click\n\t\t// listener below. An empty function here is all that is\n\t\t// required to make it work...\n\t\t$('div.dt-button-background').on('click.dtb-collection', function () {});\n\n\t\tif (options.autoClose) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tdt.on('buttons-action.b-internal', function (e, btn, dt, node) {\n\t\t\t\t\tif (node[0] === hostNode[0]) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tclose();\n\t\t\t\t});\n\t\t\t}, 0);\n\t\t}\n\n\t\t$(display).trigger('buttons-popover.dt');\n\n\t\tdt.on('destroy', close);\n\n\t\tsetTimeout(function () {\n\t\t\tclosed = false;\n\t\t\t$('body')\n\t\t\t\t.on('click.dtb-collection', function (e) {\n\t\t\t\t\tif (closed) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// andSelf is deprecated in jQ1.8, but we want 1.7 compat\n\t\t\t\t\tvar back = $.fn.addBack ? 'addBack' : 'andSelf';\n\t\t\t\t\tvar parent = $(e.target).parent()[0];\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(!$(e.target).parents()[back]().filter(content).length &&\n\t\t\t\t\t\t\t!$(parent).hasClass('dt-buttons')) ||\n\t\t\t\t\t\t$(e.target).hasClass('dt-button-background')\n\t\t\t\t\t) {\n\t\t\t\t\t\tclose();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keyup.dtb-collection', function (e) {\n\t\t\t\t\tif (e.keyCode === 27) {\n\t\t\t\t\t\tclose();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keydown.dtb-collection', function (e) {\n\t\t\t\t\t// Focus trap for tab key\n\t\t\t\t\tvar elements = $('a, button', content);\n\t\t\t\t\tvar active = document.activeElement;\n\n\t\t\t\t\tif (e.keyCode !== 9) {\n\t\t\t\t\t\t// tab\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (elements.index(active) === -1) {\n\t\t\t\t\t\t// If current focus is not inside the popover\n\t\t\t\t\t\telements.first().focus();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\telse if (e.shiftKey) {\n\t\t\t\t\t\t// Reverse tabbing order when shift key is pressed\n\t\t\t\t\t\tif (active === elements[0]) {\n\t\t\t\t\t\t\telements.last().focus();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (active === elements.last()[0]) {\n\t\t\t\t\t\t\telements.first().focus();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, 0);\n\t}\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Statics\n */\n\n/**\n * Show / hide a background layer behind a collection\n * @param  {boolean} Flag to indicate if the background should be shown or\n *   hidden\n * @param  {string} Class to assign to the background\n * @static\n */\nButtons.background = function (show, className, fade, insertPoint) {\n\tif (fade === undefined) {\n\t\tfade = 400;\n\t}\n\tif (!insertPoint) {\n\t\tinsertPoint = document.body;\n\t}\n\n\tif (show) {\n\t\t_fadeIn(\n\t\t\t$('<div/>').addClass(className).css('display', 'none').insertAfter(insertPoint),\n\t\t\tfade\n\t\t);\n\t}\n\telse {\n\t\t_fadeOut($('div.' + className), fade, function () {\n\t\t\t$(this).removeClass(className).remove();\n\t\t});\n\t}\n};\n\n/**\n * Instance selector - select Buttons instances based on an instance selector\n * value from the buttons assigned to a DataTable. This is only useful if\n * multiple instances are attached to a DataTable.\n * @param  {string|int|array} Instance selector - see `instance-selector`\n *   documentation on the DataTables site\n * @param  {array} Button instance array that was attached to the DataTables\n *   settings object\n * @return {array} Buttons instances\n * @static\n */\nButtons.instanceSelector = function (group, buttons) {\n\tif (group === undefined || group === null) {\n\t\treturn $.map(buttons, function (v) {\n\t\t\treturn v.inst;\n\t\t});\n\t}\n\n\tvar ret = [];\n\tvar names = $.map(buttons, function (v) {\n\t\treturn v.name;\n\t});\n\n\t// Flatten the group selector into an array of single options\n\tvar process = function (input) {\n\t\tif (Array.isArray(input)) {\n\t\t\tfor (var i = 0, ien = input.length; i < ien; i++) {\n\t\t\t\tprocess(input[i]);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof input === 'string') {\n\t\t\tif (input.indexOf(',') !== -1) {\n\t\t\t\t// String selector, list of names\n\t\t\t\tprocess(input.split(','));\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// String selector individual name\n\t\t\t\tvar idx = $.inArray(input.trim(), names);\n\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tret.push(buttons[idx].inst);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (typeof input === 'number') {\n\t\t\t// Index selector\n\t\t\tret.push(buttons[input].inst);\n\t\t}\n\t\telse if (typeof input === 'object') {\n\t\t\t// Actual instance selector\n\t\t\tret.push(input);\n\t\t}\n\t};\n\n\tprocess(group);\n\n\treturn ret;\n};\n\n/**\n * Button selector - select one or more buttons from a selector input so some\n * operation can be performed on them.\n * @param  {array} Button instances array that the selector should operate on\n * @param  {string|int|node|jQuery|array} Button selector - see\n *   `button-selector` documentation on the DataTables site\n * @return {array} Array of objects containing `inst` and `idx` properties of\n *   the selected buttons so you know which instance each button belongs to.\n * @static\n */\nButtons.buttonSelector = function (insts, selector) {\n\tvar ret = [];\n\tvar nodeBuilder = function (a, buttons, baseIdx) {\n\t\tvar button;\n\t\tvar idx;\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif (button) {\n\t\t\t\tidx = baseIdx !== undefined ? baseIdx + i : i + '';\n\n\t\t\t\ta.push({\n\t\t\t\t\tnode: button.node,\n\t\t\t\t\tname: button.conf.name,\n\t\t\t\t\tidx: idx\n\t\t\t\t});\n\n\t\t\t\tif (button.buttons) {\n\t\t\t\t\tnodeBuilder(a, button.buttons, idx + '-');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tvar run = function (selector, inst) {\n\t\tvar i, ien;\n\t\tvar buttons = [];\n\t\tnodeBuilder(buttons, inst.s.buttons);\n\n\t\tvar nodes = $.map(buttons, function (v) {\n\t\t\treturn v.node;\n\t\t});\n\n\t\tif (Array.isArray(selector) || selector instanceof $) {\n\t\t\tfor (i = 0, ien = selector.length; i < ien; i++) {\n\t\t\t\trun(selector[i], inst);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (selector === null || selector === undefined || selector === '*') {\n\t\t\t// Select all\n\t\t\tfor (i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: buttons[i].node\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if (typeof selector === 'number') {\n\t\t\t// Main button index selector\n\t\t\tif (inst.s.buttons[selector]) {\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: inst.s.buttons[selector].node\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if (typeof selector === 'string') {\n\t\t\tif (selector.indexOf(',') !== -1) {\n\t\t\t\t// Split\n\t\t\t\tvar a = selector.split(',');\n\n\t\t\t\tfor (i = 0, ien = a.length; i < ien; i++) {\n\t\t\t\t\trun(a[i].trim(), inst);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (selector.match(/^\\d+(\\-\\d+)*$/)) {\n\t\t\t\t// Sub-button index selector\n\t\t\t\tvar indexes = $.map(buttons, function (v) {\n\t\t\t\t\treturn v.idx;\n\t\t\t\t});\n\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: buttons[$.inArray(selector, indexes)].node\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (selector.indexOf(':name') !== -1) {\n\t\t\t\t// Button name selector\n\t\t\t\tvar name = selector.replace(':name', '');\n\n\t\t\t\tfor (i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\t\t\tif (buttons[i].name === name) {\n\t\t\t\t\t\tret.push({\n\t\t\t\t\t\t\tinst: inst,\n\t\t\t\t\t\t\tnode: buttons[i].node\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// jQuery selector on the nodes\n\t\t\t\t$(nodes)\n\t\t\t\t\t.filter(selector)\n\t\t\t\t\t.each(function () {\n\t\t\t\t\t\tret.push({\n\t\t\t\t\t\t\tinst: inst,\n\t\t\t\t\t\t\tnode: this\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if (typeof selector === 'object' && selector.nodeName) {\n\t\t\t// Node selector\n\t\t\tvar idx = $.inArray(selector, nodes);\n\n\t\t\tif (idx !== -1) {\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: nodes[idx]\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tfor (var i = 0, ien = insts.length; i < ien; i++) {\n\t\tvar inst = insts[i];\n\n\t\trun(selector, inst);\n\t}\n\n\treturn ret;\n};\n\n/**\n * Default function used for formatting output data.\n * @param {*} str Data to strip\n */\nButtons.stripData = function (str, config) {\n\tif (typeof str !== 'string') {\n\t\treturn str;\n\t}\n\n\t// Always remove script tags\n\tstr = str.replace(/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi, '');\n\n\t// Always remove comments\n\tstr = str.replace(/<!\\-\\-.*?\\-\\->/g, '');\n\n\tif (!config || config.stripHtml) {\n\t\tstr = str.replace(/<[^>]*>/g, '');\n\t}\n\n\tif (!config || config.trim) {\n\t\tstr = str.replace(/^\\s+|\\s+$/g, '');\n\t}\n\n\tif (!config || config.stripNewlines) {\n\t\tstr = str.replace(/\\n/g, ' ');\n\t}\n\n\tif (!config || config.decodeEntities) {\n\t\tif (_entityDecoder) {\n\t\t\tstr = _entityDecoder(str);\n\t\t}\n\t\telse {\n\t\t\t_exportTextarea.innerHTML = str;\n\t\t\tstr = _exportTextarea.value;\n\t\t}\n\t}\n\n\treturn str;\n};\n\n/**\n * Provide a custom entity decoding function - e.g. a regex one, which can be\n * much faster than the built in DOM option, but also larger code size.\n * @param {function} fn\n */\nButtons.entityDecoder = function (fn) {\n\t_entityDecoder = fn;\n}\n\n/**\n * Buttons defaults. For full documentation, please refer to the docs/option\n * directory or the DataTables site.\n * @type {Object}\n * @static\n */\nButtons.defaults = {\n\tbuttons: ['copy', 'excel', 'csv', 'pdf', 'print'],\n\tname: 'main',\n\ttabIndex: 0,\n\tdom: {\n\t\tcontainer: {\n\t\t\ttag: 'div',\n\t\t\tclassName: 'dt-buttons'\n\t\t},\n\t\tcollection: {\n\t\t\taction: {\n\t\t\t\t// action button\n\t\t\t\tdropHtml: '<span class=\"dt-button-down-arrow\">&#x25BC;</span>'\n\t\t\t},\n\t\t\tcontainer: {\n\t\t\t\t// The element used for the dropdown\n\t\t\t\tclassName: 'dt-button-collection',\n\t\t\t\tcontent: {\n\t\t\t\t\tclassName: '',\n\t\t\t\t\ttag: 'div'\n\t\t\t\t},\n\t\t\t\ttag: 'div'\n\t\t\t}\n\t\t\t// optionally\n\t\t\t// , button: IButton - buttons inside the collection container\n\t\t\t// , split: ISplit - splits inside the collection container\n\t\t},\n\t\tbutton: {\n\t\t\ttag: 'button',\n\t\t\tclassName: 'dt-button',\n\t\t\tactive: 'dt-button-active', // class name\n\t\t\tdisabled: 'disabled', // class name\n\t\t\tspacer: {\n\t\t\t\tclassName: 'dt-button-spacer',\n\t\t\t\ttag: 'span'\n\t\t\t},\n\t\t\tliner: {\n\t\t\t\ttag: 'span',\n\t\t\t\tclassName: ''\n\t\t\t}\n\t\t},\n\t\tsplit: {\n\t\t\taction: {\n\t\t\t\t// action button\n\t\t\t\tclassName: 'dt-button-split-drop-button dt-button',\n\t\t\t\ttag: 'button'\n\t\t\t},\n\t\t\tdropdown: {\n\t\t\t\t// button to trigger the dropdown\n\t\t\t\talign: 'split-right',\n\t\t\t\tclassName: 'dt-button-split-drop',\n\t\t\t\tdropHtml: '<span class=\"dt-button-down-arrow\">&#x25BC;</span>',\n\t\t\t\tsplitAlignClass: 'dt-button-split-left',\n\t\t\t\ttag: 'button'\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\t// wrap around both\n\t\t\t\tclassName: 'dt-button-split',\n\t\t\t\ttag: 'div'\n\t\t\t}\n\t\t}\n\t}\n};\n\n/**\n * Version information\n * @type {string}\n * @static\n */\nButtons.version = '2.4.2';\n\n$.extend(_dtButtons, {\n\tcollection: {\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.collection', 'Collection');\n\t\t},\n\t\tclassName: 'buttons-collection',\n\t\tcloseButton: false,\n\t\tinit: function (dt, button, config) {\n\t\t\tbutton.attr('aria-expanded', false);\n\t\t},\n\t\taction: function (e, dt, button, config) {\n\t\t\tif (config._collection.parents('body').length) {\n\t\t\t\tthis.popover(false, config);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.popover(config._collection, config);\n\t\t\t}\n\n\t\t\t// When activated using a key - auto focus on the\n\t\t\t// first item in the popover\n\t\t\tif (e.type === 'keypress') {\n\t\t\t\t$('a, button', config._collection).eq(0).focus();\n\t\t\t}\n\t\t},\n\t\tattr: {\n\t\t\t'aria-haspopup': 'dialog'\n\t\t}\n\t\t// Also the popover options, defined in Buttons.popover\n\t},\n\tsplit: {\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.split', 'Split');\n\t\t},\n\t\tclassName: 'buttons-split',\n\t\tcloseButton: false,\n\t\tinit: function (dt, button, config) {\n\t\t\treturn button.attr('aria-expanded', false);\n\t\t},\n\t\taction: function (e, dt, button, config) {\n\t\t\tthis.popover(config._collection, config);\n\t\t},\n\t\tattr: {\n\t\t\t'aria-haspopup': 'dialog'\n\t\t}\n\t\t// Also the popover options, defined in Buttons.popover\n\t},\n\tcopy: function (dt, conf) {\n\t\tif (_dtButtons.copyHtml5) {\n\t\t\treturn 'copyHtml5';\n\t\t}\n\t},\n\tcsv: function (dt, conf) {\n\t\tif (_dtButtons.csvHtml5 && _dtButtons.csvHtml5.available(dt, conf)) {\n\t\t\treturn 'csvHtml5';\n\t\t}\n\t},\n\texcel: function (dt, conf) {\n\t\tif (_dtButtons.excelHtml5 && _dtButtons.excelHtml5.available(dt, conf)) {\n\t\t\treturn 'excelHtml5';\n\t\t}\n\t},\n\tpdf: function (dt, conf) {\n\t\tif (_dtButtons.pdfHtml5 && _dtButtons.pdfHtml5.available(dt, conf)) {\n\t\t\treturn 'pdfHtml5';\n\t\t}\n\t},\n\tpageLength: function (dt) {\n\t\tvar lengthMenu = dt.settings()[0].aLengthMenu;\n\t\tvar vals = [];\n\t\tvar lang = [];\n\t\tvar text = function (dt) {\n\t\t\treturn dt.i18n(\n\t\t\t\t'buttons.pageLength',\n\t\t\t\t{\n\t\t\t\t\t'-1': 'Show all rows',\n\t\t\t\t\t_: 'Show %d rows'\n\t\t\t\t},\n\t\t\t\tdt.page.len()\n\t\t\t);\n\t\t};\n\n\t\t// Support for DataTables 1.x 2D array\n\t\tif (Array.isArray(lengthMenu[0])) {\n\t\t\tvals = lengthMenu[0];\n\t\t\tlang = lengthMenu[1];\n\t\t}\n\t\telse {\n\t\t\tfor (var i = 0; i < lengthMenu.length; i++) {\n\t\t\t\tvar option = lengthMenu[i];\n\n\t\t\t\t// Support for DataTables 2 object in the array\n\t\t\t\tif ($.isPlainObject(option)) {\n\t\t\t\t\tvals.push(option.value);\n\t\t\t\t\tlang.push(option.label);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvals.push(option);\n\t\t\t\t\tlang.push(option);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\textend: 'collection',\n\t\t\ttext: text,\n\t\t\tclassName: 'buttons-page-length',\n\t\t\tautoClose: true,\n\t\t\tbuttons: $.map(vals, function (val, i) {\n\t\t\t\treturn {\n\t\t\t\t\ttext: lang[i],\n\t\t\t\t\tclassName: 'button-page-length',\n\t\t\t\t\taction: function (e, dt) {\n\t\t\t\t\t\tdt.page.len(val).draw();\n\t\t\t\t\t},\n\t\t\t\t\tinit: function (dt, node, conf) {\n\t\t\t\t\t\tvar that = this;\n\t\t\t\t\t\tvar fn = function () {\n\t\t\t\t\t\t\tthat.active(dt.page.len() === val);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdt.on('length.dt' + conf.namespace, fn);\n\t\t\t\t\t\tfn();\n\t\t\t\t\t},\n\t\t\t\t\tdestroy: function (dt, node, conf) {\n\t\t\t\t\t\tdt.off('length.dt' + conf.namespace);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}),\n\t\t\tinit: function (dt, node, conf) {\n\t\t\t\tvar that = this;\n\t\t\t\tdt.on('length.dt' + conf.namespace, function () {\n\t\t\t\t\tthat.text(conf.text);\n\t\t\t\t});\n\t\t\t},\n\t\t\tdestroy: function (dt, node, conf) {\n\t\t\t\tdt.off('length.dt' + conf.namespace);\n\t\t\t}\n\t\t};\n\t},\n\tspacer: {\n\t\tstyle: 'empty',\n\t\tspacer: true,\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.spacer', '');\n\t\t}\n\t}\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables API\n *\n * For complete documentation, please refer to the docs/api directory or the\n * DataTables site\n */\n\n// Buttons group and individual button selector\nDataTable.Api.register('buttons()', function (group, selector) {\n\t// Argument shifting\n\tif (selector === undefined) {\n\t\tselector = group;\n\t\tgroup = undefined;\n\t}\n\n\tthis.selector.buttonGroup = group;\n\n\tvar res = this.iterator(\n\t\ttrue,\n\t\t'table',\n\t\tfunction (ctx) {\n\t\t\tif (ctx._buttons) {\n\t\t\t\treturn Buttons.buttonSelector(\n\t\t\t\t\tButtons.instanceSelector(group, ctx._buttons),\n\t\t\t\t\tselector\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\ttrue\n\t);\n\n\tres._groupSelector = group;\n\treturn res;\n});\n\n// Individual button selector\nDataTable.Api.register('button()', function (group, selector) {\n\t// just run buttons() and truncate\n\tvar buttons = this.buttons(group, selector);\n\n\tif (buttons.length > 1) {\n\t\tbuttons.splice(1, buttons.length);\n\t}\n\n\treturn buttons;\n});\n\n// Active buttons\nDataTable.Api.registerPlural('buttons().active()', 'button().active()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.active(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.active(set.node, flag);\n\t});\n});\n\n// Get / set button action\nDataTable.Api.registerPlural('buttons().action()', 'button().action()', function (action) {\n\tif (action === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.action(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.action(set.node, action);\n\t});\n});\n\n// Collection control\nDataTable.Api.registerPlural(\n\t'buttons().collectionRebuild()',\n\t'button().collectionRebuild()',\n\tfunction (buttons) {\n\t\treturn this.each(function (set) {\n\t\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\t\tif (typeof buttons[i] === 'object') {\n\t\t\t\t\tbuttons[i].parentConf = set;\n\t\t\t\t}\n\t\t\t}\n\t\t\tset.inst.collectionRebuild(set.node, buttons);\n\t\t});\n\t}\n);\n\n// Enable / disable buttons\nDataTable.Api.register(['buttons().enable()', 'button().enable()'], function (flag) {\n\treturn this.each(function (set) {\n\t\tset.inst.enable(set.node, flag);\n\t});\n});\n\n// Disable buttons\nDataTable.Api.register(['buttons().disable()', 'button().disable()'], function () {\n\treturn this.each(function (set) {\n\t\tset.inst.disable(set.node);\n\t});\n});\n\n// Button index\nDataTable.Api.register('button().index()', function () {\n\tvar idx = null;\n\n\tthis.each(function (set) {\n\t\tvar res = set.inst.index(set.node);\n\n\t\tif (res !== null) {\n\t\t\tidx = res;\n\t\t}\n\t});\n\n\treturn idx;\n});\n\n// Get button nodes\nDataTable.Api.registerPlural('buttons().nodes()', 'button().node()', function () {\n\tvar jq = $();\n\n\t// jQuery will automatically reduce duplicates to a single entry\n\t$(\n\t\tthis.each(function (set) {\n\t\t\tjq = jq.add(set.inst.node(set.node));\n\t\t})\n\t);\n\n\treturn jq;\n});\n\n// Get / set button processing state\nDataTable.Api.registerPlural('buttons().processing()', 'button().processing()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.processing(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.processing(set.node, flag);\n\t});\n});\n\n// Get / set button text (i.e. the button labels)\nDataTable.Api.registerPlural('buttons().text()', 'button().text()', function (label) {\n\tif (label === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.text(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.text(set.node, label);\n\t});\n});\n\n// Trigger a button's action\nDataTable.Api.registerPlural('buttons().trigger()', 'button().trigger()', function () {\n\treturn this.each(function (set) {\n\t\tset.inst.node(set.node).trigger('click');\n\t});\n});\n\n// Button resolver to the popover\nDataTable.Api.register('button().popover()', function (content, options) {\n\treturn this.map(function (set) {\n\t\treturn set.inst._popover(content, this.button(this[0].node), options);\n\t});\n});\n\n// Get the container elements\nDataTable.Api.register('buttons().containers()', function () {\n\tvar jq = $();\n\tvar groupSelector = this._groupSelector;\n\n\t// We need to use the group selector directly, since if there are no buttons\n\t// the result set will be empty\n\tthis.iterator(true, 'table', function (ctx) {\n\t\tif (ctx._buttons) {\n\t\t\tvar insts = Buttons.instanceSelector(groupSelector, ctx._buttons);\n\n\t\t\tfor (var i = 0, ien = insts.length; i < ien; i++) {\n\t\t\t\tjq = jq.add(insts[i].container());\n\t\t\t}\n\t\t}\n\t});\n\n\treturn jq;\n});\n\nDataTable.Api.register('buttons().container()', function () {\n\t// API level of nesting is `buttons()` so we can zip into the containers method\n\treturn this.containers().eq(0);\n});\n\n// Add a new button\nDataTable.Api.register('button().add()', function (idx, conf, draw) {\n\tvar ctx = this.context;\n\n\t// Don't use `this` as it could be empty - select the instances directly\n\tif (ctx.length) {\n\t\tvar inst = Buttons.instanceSelector(this._groupSelector, ctx[0]._buttons);\n\n\t\tif (inst.length) {\n\t\t\tinst[0].add(conf, idx, draw);\n\t\t}\n\t}\n\n\treturn this.button(this._groupSelector, idx);\n});\n\n// Destroy the button sets selected\nDataTable.Api.register('buttons().destroy()', function () {\n\tthis.pluck('inst')\n\t\t.unique()\n\t\t.each(function (inst) {\n\t\t\tinst.destroy();\n\t\t});\n\n\treturn this;\n});\n\n// Remove a button\nDataTable.Api.registerPlural('buttons().remove()', 'buttons().remove()', function () {\n\tthis.each(function (set) {\n\t\tset.inst.remove(set.node);\n\t});\n\n\treturn this;\n});\n\n// Information box that can be used by buttons\nvar _infoTimer;\nDataTable.Api.register('buttons.info()', function (title, message, time) {\n\tvar that = this;\n\n\tif (title === false) {\n\t\tthis.off('destroy.btn-info');\n\t\t_fadeOut($('#datatables_buttons_info'), 400, function () {\n\t\t\t$(this).remove();\n\t\t});\n\t\tclearTimeout(_infoTimer);\n\t\t_infoTimer = null;\n\n\t\treturn this;\n\t}\n\n\tif (_infoTimer) {\n\t\tclearTimeout(_infoTimer);\n\t}\n\n\tif ($('#datatables_buttons_info').length) {\n\t\t$('#datatables_buttons_info').remove();\n\t}\n\n\ttitle = title ? '<h2>' + title + '</h2>' : '';\n\n\t_fadeIn(\n\t\t$('<div id=\"datatables_buttons_info\" class=\"dt-button-info\"/>')\n\t\t\t.html(title)\n\t\t\t.append($('<div/>')[typeof message === 'string' ? 'html' : 'append'](message))\n\t\t\t.css('display', 'none')\n\t\t\t.appendTo('body')\n\t);\n\n\tif (time !== undefined && time !== 0) {\n\t\t_infoTimer = setTimeout(function () {\n\t\t\tthat.buttons.info(false);\n\t\t}, time);\n\t}\n\n\tthis.on('destroy.btn-info', function () {\n\t\tthat.buttons.info(false);\n\t});\n\n\treturn this;\n});\n\n// Get data from the table for export - this is common to a number of plug-in\n// buttons so it is included in the Buttons core library\nDataTable.Api.register('buttons.exportData()', function (options) {\n\tif (this.context.length) {\n\t\treturn _exportData(new DataTable.Api(this.context[0]), options);\n\t}\n});\n\n// Get information about the export that is common to many of the export data\n// types (DRY)\nDataTable.Api.register('buttons.exportInfo()', function (conf) {\n\tif (!conf) {\n\t\tconf = {};\n\t}\n\n\treturn {\n\t\tfilename: _filename(conf),\n\t\ttitle: _title(conf),\n\t\tmessageTop: _message(this, conf.message || conf.messageTop, 'top'),\n\t\tmessageBottom: _message(this, conf.messageBottom, 'bottom')\n\t};\n});\n\n/**\n * Get the file name for an exported file.\n *\n * @param {object}\tconfig Button configuration\n * @param {boolean} incExtension Include the file name extension\n */\nvar _filename = function (config) {\n\t// Backwards compatibility\n\tvar filename =\n\t\tconfig.filename === '*' &&\n\t\tconfig.title !== '*' &&\n\t\tconfig.title !== undefined &&\n\t\tconfig.title !== null &&\n\t\tconfig.title !== ''\n\t\t\t? config.title\n\t\t\t: config.filename;\n\n\tif (typeof filename === 'function') {\n\t\tfilename = filename();\n\t}\n\n\tif (filename === undefined || filename === null) {\n\t\treturn null;\n\t}\n\n\tif (filename.indexOf('*') !== -1) {\n\t\tfilename = filename.replace('*', $('head > title').text()).trim();\n\t}\n\n\t// Strip characters which the OS will object to\n\tfilename = filename.replace(/[^a-zA-Z0-9_\\u00A1-\\uFFFF\\.,\\-_ !\\(\\)]/g, '');\n\n\tvar extension = _stringOrFunction(config.extension);\n\tif (!extension) {\n\t\textension = '';\n\t}\n\n\treturn filename + extension;\n};\n\n/**\n * Simply utility method to allow parameters to be given as a function\n *\n * @param {undefined|string|function} option Option\n * @return {null|string} Resolved value\n */\nvar _stringOrFunction = function (option) {\n\tif (option === null || option === undefined) {\n\t\treturn null;\n\t}\n\telse if (typeof option === 'function') {\n\t\treturn option();\n\t}\n\treturn option;\n};\n\n/**\n * Get the title for an exported file.\n *\n * @param {object} config\tButton configuration\n */\nvar _title = function (config) {\n\tvar title = _stringOrFunction(config.title);\n\n\treturn title === null\n\t\t? null\n\t\t: title.indexOf('*') !== -1\n\t\t? title.replace('*', $('head > title').text() || 'Exported data')\n\t\t: title;\n};\n\nvar _message = function (dt, option, position) {\n\tvar message = _stringOrFunction(option);\n\tif (message === null) {\n\t\treturn null;\n\t}\n\n\tvar caption = $('caption', dt.table().container()).eq(0);\n\tif (message === '*') {\n\t\tvar side = caption.css('caption-side');\n\t\tif (side !== position) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn caption.length ? caption.text() : '';\n\t}\n\n\treturn message;\n};\n\nvar _exportTextarea = $('<textarea/>')[0];\nvar _exportData = function (dt, inOpts) {\n\tvar config = $.extend(\n\t\ttrue,\n\t\t{},\n\t\t{\n\t\t\trows: null,\n\t\t\tcolumns: '',\n\t\t\tmodifier: {\n\t\t\t\tsearch: 'applied',\n\t\t\t\torder: 'applied'\n\t\t\t},\n\t\t\torthogonal: 'display',\n\t\t\tstripHtml: true,\n\t\t\tstripNewlines: true,\n\t\t\tdecodeEntities: true,\n\t\t\ttrim: true,\n\t\t\tformat: {\n\t\t\t\theader: function (d) {\n\t\t\t\t\treturn Buttons.stripData(d, config);\n\t\t\t\t},\n\t\t\t\tfooter: function (d) {\n\t\t\t\t\treturn Buttons.stripData(d, config);\n\t\t\t\t},\n\t\t\t\tbody: function (d) {\n\t\t\t\t\treturn Buttons.stripData(d, config);\n\t\t\t\t}\n\t\t\t},\n\t\t\tcustomizeData: null\n\t\t},\n\t\tinOpts\n\t);\n\n\tvar header = dt\n\t\t.columns(config.columns)\n\t\t.indexes()\n\t\t.map(function (idx) {\n\t\t\tvar el = dt.column(idx).header();\n\t\t\treturn config.format.header(el.innerHTML, idx, el);\n\t\t})\n\t\t.toArray();\n\n\tvar footer = dt.table().footer()\n\t\t? dt\n\t\t\t\t.columns(config.columns)\n\t\t\t\t.indexes()\n\t\t\t\t.map(function (idx) {\n\t\t\t\t\tvar el = dt.column(idx).footer();\n\t\t\t\t\treturn config.format.footer(el ? el.innerHTML : '', idx, el);\n\t\t\t\t})\n\t\t\t\t.toArray()\n\t\t: null;\n\n\t// If Select is available on this table, and any rows are selected, limit the export\n\t// to the selected rows. If no rows are selected, all rows will be exported. Specify\n\t// a `selected` modifier to control directly.\n\tvar modifier = $.extend({}, config.modifier);\n\tif (dt.select && typeof dt.select.info === 'function' && modifier.selected === undefined) {\n\t\tif (dt.rows(config.rows, $.extend({ selected: true }, modifier)).any()) {\n\t\t\t$.extend(modifier, { selected: true });\n\t\t}\n\t}\n\n\tvar rowIndexes = dt.rows(config.rows, modifier).indexes().toArray();\n\tvar selectedCells = dt.cells(rowIndexes, config.columns);\n\tvar cells = selectedCells.render(config.orthogonal).toArray();\n\tvar cellNodes = selectedCells.nodes().toArray();\n\n\tvar columns = header.length;\n\tvar rows = columns > 0 ? cells.length / columns : 0;\n\tvar body = [];\n\tvar cellCounter = 0;\n\n\tfor (var i = 0, ien = rows; i < ien; i++) {\n\t\tvar row = [columns];\n\n\t\tfor (var j = 0; j < columns; j++) {\n\t\t\trow[j] = config.format.body(cells[cellCounter], i, j, cellNodes[cellCounter]);\n\t\t\tcellCounter++;\n\t\t}\n\n\t\tbody[i] = row;\n\t}\n\n\tvar data = {\n\t\theader: header,\n\t\tfooter: footer,\n\t\tbody: body\n\t};\n\n\tif (config.customizeData) {\n\t\tconfig.customizeData(data);\n\t}\n\n\treturn data;\n};\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables interface\n */\n\n// Attach to DataTables objects for global access\n$.fn.dataTable.Buttons = Buttons;\n$.fn.DataTable.Buttons = Buttons;\n\n// DataTables creation - check if the buttons have been defined for this table,\n// they will have been if the `B` option was used in `dom`, otherwise we should\n// create the buttons instance here so they can be inserted into the document\n// using the API. Listen for `init` for compatibility with pre 1.10.10, but to\n// be removed in future.\n$(document).on('init.dt plugin-init.dt', function (e, settings) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar opts = settings.oInit.buttons || DataTable.defaults.buttons;\n\n\tif (opts && !settings._buttons) {\n\t\tnew Buttons(settings, opts).container();\n\t}\n});\n\nfunction _init(settings, options) {\n\tvar api = new DataTable.Api(settings);\n\tvar opts = options ? options : api.init().buttons || DataTable.defaults.buttons;\n\n\treturn new Buttons(api, opts).container();\n}\n\n// DataTables `dom` feature option\nDataTable.ext.feature.push({\n\tfnInit: _init,\n\tcFeature: 'B'\n});\n\n// DataTables 2 layout feature\nif (DataTable.ext.features) {\n\tDataTable.ext.features.register('buttons', _init);\n}\n\n\nreturn DataTable;\n}));\n\n\n/*! Bootstrap integration for DataTables' Buttons\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n$.extend(true, DataTable.Buttons.defaults, {\n\tdom: {\n\t\tcontainer: {\n\t\t\tclassName: 'dt-buttons btn-group flex-wrap'\n\t\t},\n\t\tbutton: {\n\t\t\tclassName: 'btn btn-secondary',\n\t\t\tactive: 'active'\n\t\t},\n\t\tcollection: {\n\t\t\taction: {\n\t\t\t\tdropHtml: ''\n\t\t\t},\n\t\t\tcontainer: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dropdown-menu dt-button-collection'\n\t\t\t},\n\t\t\tcloseButton: false,\n\t\t\tbutton: {\n\t\t\t\ttag: 'a',\n\t\t\t\tclassName: 'dt-button dropdown-item',\n\t\t\t\tactive: 'dt-button-active',\n\t\t\t\tdisabled: 'disabled',\n\t\t\t\tspacer: {\n\t\t\t\t\tclassName: 'dropdown-divider',\n\t\t\t\t\ttag: 'hr'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsplit: {\n\t\t\taction: {\n\t\t\t\ttag: 'a',\n\t\t\t\tclassName: 'btn btn-secondary dt-button-split-drop-button',\n\t\t\t\tcloseButton: false\n\t\t\t},\n\t\t\tdropdown: {\n\t\t\t\ttag: 'button',\n\t\t\t\tdropHtml: '',\n\t\t\t\tclassName:\n\t\t\t\t\t'btn btn-secondary dt-button-split-drop dropdown-toggle dropdown-toggle-split',\n\t\t\t\tcloseButton: false,\n\t\t\t\talign: 'split-left',\n\t\t\t\tsplitAlignClass: 'dt-button-split-left'\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dt-button-split btn-group',\n\t\t\t\tcloseButton: false\n\t\t\t}\n\t\t}\n\t},\n\tbuttonCreated: function (config, button) {\n\t\treturn config.buttons ? $('<div class=\"btn-group\"/>').append(button) : button;\n\t}\n});\n\nDataTable.ext.buttons.collection.className += ' dropdown-toggle';\nDataTable.ext.buttons.collection.rightAlignClassName = 'dropdown-menu-right';\n\n\nreturn DataTable;\n}));\n\n\n/*!\n * Column visibility buttons for Buttons and DataTables.\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n$.extend(DataTable.ext.buttons, {\n\t// A collection of column visibility buttons\n\tcolvis: function (dt, conf) {\n\t\tvar node = null;\n\t\tvar buttonConf = {\n\t\t\textend: 'collection',\n\t\t\tinit: function (dt, n) {\n\t\t\t\tnode = n;\n\t\t\t},\n\t\t\ttext: function (dt) {\n\t\t\t\treturn dt.i18n('buttons.colvis', 'Column visibility');\n\t\t\t},\n\t\t\tclassName: 'buttons-colvis',\n\t\t\tcloseButton: false,\n\t\t\tbuttons: [\n\t\t\t\t{\n\t\t\t\t\textend: 'columnsToggle',\n\t\t\t\t\tcolumns: conf.columns,\n\t\t\t\t\tcolumnText: conf.columnText\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\t// Rebuild the collection with the new column structure if columns are reordered\n\t\tdt.on('column-reorder.dt' + conf.namespace, function (e, settings, details) {\n\t\t\tdt.button(null, dt.button(null, node).node()).collectionRebuild([\n\t\t\t\t{\n\t\t\t\t\textend: 'columnsToggle',\n\t\t\t\t\tcolumns: conf.columns,\n\t\t\t\t\tcolumnText: conf.columnText\n\t\t\t\t}\n\t\t\t]);\n\t\t});\n\n\t\treturn buttonConf;\n\t},\n\n\t// Selected columns with individual buttons - toggle column visibility\n\tcolumnsToggle: function (dt, conf) {\n\t\tvar columns = dt\n\t\t\t.columns(conf.columns)\n\t\t\t.indexes()\n\t\t\t.map(function (idx) {\n\t\t\t\treturn {\n\t\t\t\t\textend: 'columnToggle',\n\t\t\t\t\tcolumns: idx,\n\t\t\t\t\tcolumnText: conf.columnText\n\t\t\t\t};\n\t\t\t})\n\t\t\t.toArray();\n\n\t\treturn columns;\n\t},\n\n\t// Single button to toggle column visibility\n\tcolumnToggle: function (dt, conf) {\n\t\treturn {\n\t\t\textend: 'columnVisibility',\n\t\t\tcolumns: conf.columns,\n\t\t\tcolumnText: conf.columnText\n\t\t};\n\t},\n\n\t// Selected columns with individual buttons - set column visibility\n\tcolumnsVisibility: function (dt, conf) {\n\t\tvar columns = dt\n\t\t\t.columns(conf.columns)\n\t\t\t.indexes()\n\t\t\t.map(function (idx) {\n\t\t\t\treturn {\n\t\t\t\t\textend: 'columnVisibility',\n\t\t\t\t\tcolumns: idx,\n\t\t\t\t\tvisibility: conf.visibility,\n\t\t\t\t\tcolumnText: conf.columnText\n\t\t\t\t};\n\t\t\t})\n\t\t\t.toArray();\n\n\t\treturn columns;\n\t},\n\n\t// Single button to set column visibility\n\tcolumnVisibility: {\n\t\tcolumns: undefined, // column selector\n\t\ttext: function (dt, button, conf) {\n\t\t\treturn conf._columnText(dt, conf);\n\t\t},\n\t\tclassName: 'buttons-columnVisibility',\n\t\taction: function (e, dt, button, conf) {\n\t\t\tvar col = dt.columns(conf.columns);\n\t\t\tvar curr = col.visible();\n\n\t\t\tcol.visible(\n\t\t\t\tconf.visibility !== undefined ? conf.visibility : !(curr.length ? curr[0] : false)\n\t\t\t);\n\t\t},\n\t\tinit: function (dt, button, conf) {\n\t\t\tvar that = this;\n\t\t\tbutton.attr('data-cv-idx', conf.columns);\n\n\t\t\tdt.on('column-visibility.dt' + conf.namespace, function (e, settings) {\n\t\t\t\tif (!settings.bDestroying && settings.nTable == dt.settings()[0].nTable) {\n\t\t\t\t\tthat.active(dt.column(conf.columns).visible());\n\t\t\t\t}\n\t\t\t}).on('column-reorder.dt' + conf.namespace, function (e, settings, details) {\n\t\t\t\t// Button has been removed from the DOM\n\t\t\t\tif (conf.destroying) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (dt.columns(conf.columns).count() !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// This button controls the same column index but the text for the column has\n\t\t\t\t// changed\n\t\t\t\tthat.text(conf._columnText(dt, conf));\n\n\t\t\t\t// Since its a different column, we need to check its visibility\n\t\t\t\tthat.active(dt.column(conf.columns).visible());\n\t\t\t});\n\n\t\t\tthis.active(dt.column(conf.columns).visible());\n\t\t},\n\t\tdestroy: function (dt, button, conf) {\n\t\t\tdt.off('column-visibility.dt' + conf.namespace).off(\n\t\t\t\t'column-reorder.dt' + conf.namespace\n\t\t\t);\n\t\t},\n\n\t\t_columnText: function (dt, conf) {\n\t\t\t// Use DataTables' internal data structure until this is presented\n\t\t\t// is a public API. The other option is to use\n\t\t\t// `$( column(col).node() ).text()` but the node might not have been\n\t\t\t// populated when Buttons is constructed.\n\t\t\tvar idx = dt.column(conf.columns).index();\n\t\t\tvar title = dt.settings()[0].aoColumns[idx].sTitle;\n\n\t\t\tif (!title) {\n\t\t\t\ttitle = dt.column(idx).header().innerHTML;\n\t\t\t}\n\n\t\t\ttitle = title\n\t\t\t\t.replace(/\\n/g, ' ') // remove new lines\n\t\t\t\t.replace(/<br\\s*\\/?>/gi, ' ') // replace line breaks with spaces\n\t\t\t\t.replace(/<select(.*?)<\\/select>/g, '') // remove select tags, including options text\n\t\t\t\t.replace(/<!\\-\\-.*?\\-\\->/g, '') // strip HTML comments\n\t\t\t\t.replace(/<.*?>/g, '') // strip HTML\n\t\t\t\t.replace(/^\\s+|\\s+$/g, ''); // trim\n\n\t\t\treturn conf.columnText ? conf.columnText(dt, idx, title) : title;\n\t\t}\n\t},\n\n\tcolvisRestore: {\n\t\tclassName: 'buttons-colvisRestore',\n\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.colvisRestore', 'Restore visibility');\n\t\t},\n\n\t\tinit: function (dt, button, conf) {\n\t\t\tconf._visOriginal = dt\n\t\t\t\t.columns()\n\t\t\t\t.indexes()\n\t\t\t\t.map(function (idx) {\n\t\t\t\t\treturn dt.column(idx).visible();\n\t\t\t\t})\n\t\t\t\t.toArray();\n\t\t},\n\n\t\taction: function (e, dt, button, conf) {\n\t\t\tdt.columns().every(function (i) {\n\t\t\t\t// Take into account that ColReorder might have disrupted our\n\t\t\t\t// indexes\n\t\t\t\tvar idx =\n\t\t\t\t\tdt.colReorder && dt.colReorder.transpose\n\t\t\t\t\t\t? dt.colReorder.transpose(i, 'toOriginal')\n\t\t\t\t\t\t: i;\n\n\t\t\t\tthis.visible(conf._visOriginal[idx]);\n\t\t\t});\n\t\t}\n\t},\n\n\tcolvisGroup: {\n\t\tclassName: 'buttons-colvisGroup',\n\n\t\taction: function (e, dt, button, conf) {\n\t\t\tdt.columns(conf.show).visible(true, false);\n\t\t\tdt.columns(conf.hide).visible(false, false);\n\n\t\t\tdt.columns.adjust();\n\t\t},\n\n\t\tshow: [],\n\n\t\thide: []\n\t}\n});\n\n\nreturn DataTable;\n}));\n\n\n/*!\n * HTML5 export buttons for Buttons and DataTables.\n * © SpryMedia Ltd - datatables.net/license\n *\n * FileSaver.js (1.3.3) - MIT license\n * Copyright © 2016 Eli Grey - http://eligrey.com\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $, jszip, pdfmake) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document, jszip, pdfmake );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, jszip, pdfmake, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n// Allow the constructor to pass in JSZip and PDFMake from external requires.\n// Otherwise, use globally defined variables, if they are available.\nvar useJszip;\nvar usePdfmake;\n\nfunction _jsZip() {\n\treturn useJszip || window.JSZip;\n}\nfunction _pdfMake() {\n\treturn usePdfmake || window.pdfMake;\n}\n\nDataTable.Buttons.pdfMake = function (_) {\n\tif (!_) {\n\t\treturn _pdfMake();\n\t}\n\tusePdfmake = _;\n};\n\nDataTable.Buttons.jszip = function (_) {\n\tif (!_) {\n\t\treturn _jsZip();\n\t}\n\tuseJszip = _;\n};\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * FileSaver.js dependency\n */\n\n/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */\n\nvar _saveAs = (function (view) {\n\t'use strict';\n\t// IE <10 is explicitly unsupported\n\tif (\n\t\ttypeof view === 'undefined' ||\n\t\t(typeof navigator !== 'undefined' && /MSIE [1-9]\\./.test(navigator.userAgent))\n\t) {\n\t\treturn;\n\t}\n\tvar doc = view.document,\n\t\t// only get URL when necessary in case Blob.js hasn't overridden it yet\n\t\tget_URL = function () {\n\t\t\treturn view.URL || view.webkitURL || view;\n\t\t},\n\t\tsave_link = doc.createElementNS('http://www.w3.org/1999/xhtml', 'a'),\n\t\tcan_use_save_link = 'download' in save_link,\n\t\tclick = function (node) {\n\t\t\tvar event = new MouseEvent('click');\n\t\t\tnode.dispatchEvent(event);\n\t\t},\n\t\tis_safari = /constructor/i.test(view.HTMLElement) || view.safari,\n\t\tis_chrome_ios = /CriOS\\/[\\d]+/.test(navigator.userAgent),\n\t\tthrow_outside = function (ex) {\n\t\t\t(view.setImmediate || view.setTimeout)(function () {\n\t\t\t\tthrow ex;\n\t\t\t}, 0);\n\t\t},\n\t\tforce_saveable_type = 'application/octet-stream',\n\t\t// the Blob API is fundamentally broken as there is no \"downloadfinished\" event to subscribe to\n\t\tarbitrary_revoke_timeout = 1000 * 40, // in ms\n\t\trevoke = function (file) {\n\t\t\tvar revoker = function () {\n\t\t\t\tif (typeof file === 'string') {\n\t\t\t\t\t// file is an object URL\n\t\t\t\t\tget_URL().revokeObjectURL(file);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// file is a File\n\t\t\t\t\tfile.remove();\n\t\t\t\t}\n\t\t\t};\n\t\t\tsetTimeout(revoker, arbitrary_revoke_timeout);\n\t\t},\n\t\tdispatch = function (filesaver, event_types, event) {\n\t\t\tevent_types = [].concat(event_types);\n\t\t\tvar i = event_types.length;\n\t\t\twhile (i--) {\n\t\t\t\tvar listener = filesaver['on' + event_types[i]];\n\t\t\t\tif (typeof listener === 'function') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlistener.call(filesaver, event || filesaver);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tthrow_outside(ex);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tauto_bom = function (blob) {\n\t\t\t// prepend BOM for UTF-8 XML and text/* types (including HTML)\n\t\t\t// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n\t\t\tif (\n\t\t\t\t/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(\n\t\t\t\t\tblob.type\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n\t\t\t}\n\t\t\treturn blob;\n\t\t},\n\t\tFileSaver = function (blob, name, no_auto_bom) {\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\t// First try a.download, then web filesystem, then object URLs\n\t\t\tvar filesaver = this,\n\t\t\t\ttype = blob.type,\n\t\t\t\tforce = type === force_saveable_type,\n\t\t\t\tobject_url,\n\t\t\t\tdispatch_all = function () {\n\t\t\t\t\tdispatch(filesaver, 'writestart progress write writeend'.split(' '));\n\t\t\t\t},\n\t\t\t\t// on any filesys errors revert to saving with object URLs\n\t\t\t\tfs_error = function () {\n\t\t\t\t\tif ((is_chrome_ios || (force && is_safari)) && view.FileReader) {\n\t\t\t\t\t\t// Safari doesn't allow downloading of blob urls\n\t\t\t\t\t\tvar reader = new FileReader();\n\t\t\t\t\t\treader.onloadend = function () {\n\t\t\t\t\t\t\tvar url = is_chrome_ios\n\t\t\t\t\t\t\t\t? reader.result\n\t\t\t\t\t\t\t\t: reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');\n\t\t\t\t\t\t\tvar popup = view.open(url, '_blank');\n\t\t\t\t\t\t\tif (!popup) view.location.href = url;\n\t\t\t\t\t\t\turl = undefined; // release reference before dispatching\n\t\t\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\t\t\tdispatch_all();\n\t\t\t\t\t\t};\n\t\t\t\t\t\treader.readAsDataURL(blob);\n\t\t\t\t\t\tfilesaver.readyState = filesaver.INIT;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// don't create more object URLs than needed\n\t\t\t\t\tif (!object_url) {\n\t\t\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\t\t}\n\t\t\t\t\tif (force) {\n\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar opened = view.open(object_url, '_blank');\n\t\t\t\t\t\tif (!opened) {\n\t\t\t\t\t\t\t// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html\n\t\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t};\n\t\t\tfilesaver.readyState = filesaver.INIT;\n\n\t\t\tif (can_use_save_link) {\n\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tsave_link.href = object_url;\n\t\t\t\t\tsave_link.download = name;\n\t\t\t\t\tclick(save_link);\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfs_error();\n\t\t},\n\t\tFS_proto = FileSaver.prototype,\n\t\tsaveAs = function (blob, name, no_auto_bom) {\n\t\t\treturn new FileSaver(blob, name || blob.name || 'download', no_auto_bom);\n\t\t};\n\t// IE 10+ (native saveAs)\n\tif (typeof navigator !== 'undefined' && navigator.msSaveOrOpenBlob) {\n\t\treturn function (blob, name, no_auto_bom) {\n\t\t\tname = name || blob.name || 'download';\n\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\treturn navigator.msSaveOrOpenBlob(blob, name);\n\t\t};\n\t}\n\n\tFS_proto.abort = function () {};\n\tFS_proto.readyState = FS_proto.INIT = 0;\n\tFS_proto.WRITING = 1;\n\tFS_proto.DONE = 2;\n\n\tFS_proto.error =\n\t\tFS_proto.onwritestart =\n\t\tFS_proto.onprogress =\n\t\tFS_proto.onwrite =\n\t\tFS_proto.onabort =\n\t\tFS_proto.onerror =\n\t\tFS_proto.onwriteend =\n\t\t\tnull;\n\n\treturn saveAs;\n})(\n\t(typeof self !== 'undefined' && self) ||\n\t\t(typeof window !== 'undefined' && window) ||\n\t\tthis.content\n);\n\n// Expose file saver on the DataTables API. Can't attach to `DataTables.Buttons`\n// since this file can be loaded before Button's core!\nDataTable.fileSave = _saveAs;\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Local (private) functions\n */\n\n/**\n * Get the sheet name for Excel exports.\n *\n * @param {object}\tconfig Button configuration\n */\nvar _sheetname = function (config) {\n\tvar sheetName = 'Sheet1';\n\n\tif (config.sheetName) {\n\t\tsheetName = config.sheetName.replace(/[\\[\\]\\*\\/\\\\\\?\\:]/g, '');\n\t}\n\n\treturn sheetName;\n};\n\n/**\n * Get the newline character(s)\n *\n * @param {object}\tconfig Button configuration\n * @return {string}\t\t\t\tNewline character\n */\nvar _newLine = function (config) {\n\treturn config.newline ? config.newline : navigator.userAgent.match(/Windows/) ? '\\r\\n' : '\\n';\n};\n\n/**\n * Combine the data from the `buttons.exportData` method into a string that\n * will be used in the export file.\n *\n * @param\t{DataTable.Api} dt\t\t DataTables API instance\n * @param\t{object}\t\t\t\tconfig Button configuration\n * @return {object}\t\t\t\t\t\t\t The data to export\n */\nvar _exportData = function (dt, config) {\n\tvar newLine = _newLine(config);\n\tvar data = dt.buttons.exportData(config.exportOptions);\n\tvar boundary = config.fieldBoundary;\n\tvar separator = config.fieldSeparator;\n\tvar reBoundary = new RegExp(boundary, 'g');\n\tvar escapeChar = config.escapeChar !== undefined ? config.escapeChar : '\\\\';\n\tvar join = function (a) {\n\t\tvar s = '';\n\n\t\t// If there is a field boundary, then we might need to escape it in\n\t\t// the source data\n\t\tfor (var i = 0, ien = a.length; i < ien; i++) {\n\t\t\tif (i > 0) {\n\t\t\t\ts += separator;\n\t\t\t}\n\n\t\t\ts += boundary\n\t\t\t\t? boundary + ('' + a[i]).replace(reBoundary, escapeChar + boundary) + boundary\n\t\t\t\t: a[i];\n\t\t}\n\n\t\treturn s;\n\t};\n\n\tvar header = config.header ? join(data.header) + newLine : '';\n\tvar footer = config.footer && data.footer ? newLine + join(data.footer) : '';\n\tvar body = [];\n\n\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\tbody.push(join(data.body[i]));\n\t}\n\n\treturn {\n\t\tstr: header + body.join(newLine) + footer,\n\t\trows: body.length\n\t};\n};\n\n/**\n * Older versions of Safari (prior to tech preview 18) don't support the\n * download option required.\n *\n * @return {Boolean} `true` if old Safari\n */\nvar _isDuffSafari = function () {\n\tvar safari =\n\t\tnavigator.userAgent.indexOf('Safari') !== -1 &&\n\t\tnavigator.userAgent.indexOf('Chrome') === -1 &&\n\t\tnavigator.userAgent.indexOf('Opera') === -1;\n\n\tif (!safari) {\n\t\treturn false;\n\t}\n\n\tvar version = navigator.userAgent.match(/AppleWebKit\\/(\\d+\\.\\d+)/);\n\tif (version && version.length > 1 && version[1] * 1 < 603.1) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Convert from numeric position to letter for column names in Excel\n * @param  {int} n Column number\n * @return {string} Column letter(s) name\n */\nfunction createCellPos(n) {\n\tvar ordA = 'A'.charCodeAt(0);\n\tvar ordZ = 'Z'.charCodeAt(0);\n\tvar len = ordZ - ordA + 1;\n\tvar s = '';\n\n\twhile (n >= 0) {\n\t\ts = String.fromCharCode((n % len) + ordA) + s;\n\t\tn = Math.floor(n / len) - 1;\n\t}\n\n\treturn s;\n}\n\ntry {\n\tvar _serialiser = new XMLSerializer();\n\tvar _ieExcel;\n} catch (t) {}\n\n/**\n * Recursively add XML files from an object's structure to a ZIP file. This\n * allows the XSLX file to be easily defined with an object's structure matching\n * the files structure.\n *\n * @param {JSZip} zip ZIP package\n * @param {object} obj Object to add (recursive)\n */\nfunction _addToZip(zip, obj) {\n\tif (_ieExcel === undefined) {\n\t\t// Detect if we are dealing with IE's _awful_ serialiser by seeing if it\n\t\t// drop attributes\n\t\t_ieExcel =\n\t\t\t_serialiser\n\t\t\t\t.serializeToString(\n\t\t\t\t\tnew window.DOMParser().parseFromString(\n\t\t\t\t\t\texcelStrings['xl/worksheets/sheet1.xml'],\n\t\t\t\t\t\t'text/xml'\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.indexOf('xmlns:r') === -1;\n\t}\n\n\t$.each(obj, function (name, val) {\n\t\tif ($.isPlainObject(val)) {\n\t\t\tvar newDir = zip.folder(name);\n\t\t\t_addToZip(newDir, val);\n\t\t}\n\t\telse {\n\t\t\tif (_ieExcel) {\n\t\t\t\t// IE's XML serialiser will drop some name space attributes from\n\t\t\t\t// from the root node, so we need to save them. Do this by\n\t\t\t\t// replacing the namespace nodes with a regular attribute that\n\t\t\t\t// we convert back when serialised. Edge does not have this\n\t\t\t\t// issue\n\t\t\t\tvar worksheet = val.childNodes[0];\n\t\t\t\tvar i, ien;\n\t\t\t\tvar attrs = [];\n\n\t\t\t\tfor (i = worksheet.attributes.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar attrName = worksheet.attributes[i].nodeName;\n\t\t\t\t\tvar attrValue = worksheet.attributes[i].nodeValue;\n\n\t\t\t\t\tif (attrName.indexOf(':') !== -1) {\n\t\t\t\t\t\tattrs.push({ name: attrName, value: attrValue });\n\n\t\t\t\t\t\tworksheet.removeAttribute(attrName);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0, ien = attrs.length; i < ien; i++) {\n\t\t\t\t\tvar attr = val.createAttribute(\n\t\t\t\t\t\tattrs[i].name.replace(':', '_dt_b_namespace_token_')\n\t\t\t\t\t);\n\t\t\t\t\tattr.value = attrs[i].value;\n\t\t\t\t\tworksheet.setAttributeNode(attr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar str = _serialiser.serializeToString(val);\n\n\t\t\t// Fix IE's XML\n\t\t\tif (_ieExcel) {\n\t\t\t\t// IE doesn't include the XML declaration\n\t\t\t\tif (str.indexOf('<?xml') === -1) {\n\t\t\t\t\tstr = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' + str;\n\t\t\t\t}\n\n\t\t\t\t// Return namespace attributes to being as such\n\t\t\t\tstr = str.replace(/_dt_b_namespace_token_/g, ':');\n\n\t\t\t\t// Remove testing name space that IE puts into the space preserve attr\n\t\t\t\tstr = str.replace(/xmlns:NS[\\d]+=\"\" NS[\\d]+:/g, '');\n\t\t\t}\n\n\t\t\t// Safari, IE and Edge will put empty name space attributes onto\n\t\t\t// various elements making them useless. This strips them out\n\t\t\tstr = str.replace(/<([^<>]*?) xmlns=\"\"([^<>]*?)>/g, '<$1 $2>');\n\n\t\t\tzip.file(name, str);\n\t\t}\n\t});\n}\n\n/**\n * Create an XML node and add any children, attributes, etc without needing to\n * be verbose in the DOM.\n *\n * @param  {object} doc      XML document\n * @param  {string} nodeName Node name\n * @param  {object} opts     Options - can be `attr` (attributes), `children`\n *   (child nodes) and `text` (text content)\n * @return {node}            Created node\n */\nfunction _createNode(doc, nodeName, opts) {\n\tvar tempNode = doc.createElement(nodeName);\n\n\tif (opts) {\n\t\tif (opts.attr) {\n\t\t\t$(tempNode).attr(opts.attr);\n\t\t}\n\n\t\tif (opts.children) {\n\t\t\t$.each(opts.children, function (key, value) {\n\t\t\t\ttempNode.appendChild(value);\n\t\t\t});\n\t\t}\n\n\t\tif (opts.text !== null && opts.text !== undefined) {\n\t\t\ttempNode.appendChild(doc.createTextNode(opts.text));\n\t\t}\n\t}\n\n\treturn tempNode;\n}\n\n/**\n * Get the width for an Excel column based on the contents of that column\n * @param  {object} data Data for export\n * @param  {int}    col  Column index\n * @return {int}         Column width\n */\nfunction _excelColWidth(data, col) {\n\tvar max = data.header[col].length;\n\tvar len, lineSplit, str;\n\n\tif (data.footer && data.footer[col].length > max) {\n\t\tmax = data.footer[col].length;\n\t}\n\n\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\tvar point = data.body[i][col];\n\t\tstr = point !== null && point !== undefined ? point.toString() : '';\n\n\t\t// If there is a newline character, workout the width of the column\n\t\t// based on the longest line in the string\n\t\tif (str.indexOf('\\n') !== -1) {\n\t\t\tlineSplit = str.split('\\n');\n\t\t\tlineSplit.sort(function (a, b) {\n\t\t\t\treturn b.length - a.length;\n\t\t\t});\n\n\t\t\tlen = lineSplit[0].length;\n\t\t}\n\t\telse {\n\t\t\tlen = str.length;\n\t\t}\n\n\t\tif (len > max) {\n\t\t\tmax = len;\n\t\t}\n\n\t\t// Max width rather than having potentially massive column widths\n\t\tif (max > 40) {\n\t\t\treturn 54; // 40 * 1.35\n\t\t}\n\t}\n\n\tmax *= 1.35;\n\n\t// And a min width\n\treturn max > 6 ? max : 6;\n}\n\n// Excel - Pre-defined strings to build a basic XLSX file\nvar excelStrings = {\n\t'_rels/.rels':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n\t\t'<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>' +\n\t\t'</Relationships>',\n\n\t'xl/_rels/workbook.xml.rels':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n\t\t'<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>' +\n\t\t'<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>' +\n\t\t'</Relationships>',\n\n\t'[Content_Types].xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">' +\n\t\t'<Default Extension=\"xml\" ContentType=\"application/xml\" />' +\n\t\t'<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" />' +\n\t\t'<Default Extension=\"jpeg\" ContentType=\"image/jpeg\" />' +\n\t\t'<Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\" />' +\n\t\t'<Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\" />' +\n\t\t'<Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\" />' +\n\t\t'</Types>',\n\n\t'xl/workbook.xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">' +\n\t\t'<fileVersion appName=\"xl\" lastEdited=\"5\" lowestEdited=\"5\" rupBuild=\"24816\"/>' +\n\t\t'<workbookPr showInkAnnotation=\"0\" autoCompressPictures=\"0\"/>' +\n\t\t'<bookViews>' +\n\t\t'<workbookView xWindow=\"0\" yWindow=\"0\" windowWidth=\"25600\" windowHeight=\"19020\" tabRatio=\"500\"/>' +\n\t\t'</bookViews>' +\n\t\t'<sheets>' +\n\t\t'<sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/>' +\n\t\t'</sheets>' +\n\t\t'<definedNames/>' +\n\t\t'</workbook>',\n\n\t'xl/worksheets/sheet1.xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">' +\n\t\t'<sheetData/>' +\n\t\t'<mergeCells count=\"0\"/>' +\n\t\t'</worksheet>',\n\n\t'xl/styles.xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\"?>' +\n\t\t'<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">' +\n\t\t'<numFmts count=\"6\">' +\n\t\t'<numFmt numFmtId=\"164\" formatCode=\"#,##0.00_- [$$-45C]\"/>' +\n\t\t'<numFmt numFmtId=\"165\" formatCode=\"&quot;£&quot;#,##0.00\"/>' +\n\t\t'<numFmt numFmtId=\"166\" formatCode=\"[$€-2] #,##0.00\"/>' +\n\t\t'<numFmt numFmtId=\"167\" formatCode=\"0.0%\"/>' +\n\t\t'<numFmt numFmtId=\"168\" formatCode=\"#,##0;(#,##0)\"/>' +\n\t\t'<numFmt numFmtId=\"169\" formatCode=\"#,##0.00;(#,##0.00)\"/>' +\n\t\t'</numFmts>' +\n\t\t'<fonts count=\"5\" x14ac:knownFonts=\"1\">' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<color rgb=\"FFFFFFFF\" />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<b />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<i />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<u />' +\n\t\t'</font>' +\n\t\t'</fonts>' +\n\t\t'<fills count=\"6\">' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"none\" />' +\n\t\t'</fill>' +\n\t\t'<fill>' + // Excel appears to use this as a dotted background regardless of values but\n\t\t'<patternFill patternType=\"none\" />' + // to be valid to the schema, use a patternFill\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"FFD9D9D9\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"FFD99795\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"ffc6efce\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"ffc6cfef\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'</fills>' +\n\t\t'<borders count=\"2\">' +\n\t\t'<border>' +\n\t\t'<left />' +\n\t\t'<right />' +\n\t\t'<top />' +\n\t\t'<bottom />' +\n\t\t'<diagonal />' +\n\t\t'</border>' +\n\t\t'<border diagonalUp=\"false\" diagonalDown=\"false\">' +\n\t\t'<left style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</left>' +\n\t\t'<right style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</right>' +\n\t\t'<top style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</top>' +\n\t\t'<bottom style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</bottom>' +\n\t\t'<diagonal />' +\n\t\t'</border>' +\n\t\t'</borders>' +\n\t\t'<cellStyleXfs count=\"1\">' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" />' +\n\t\t'</cellStyleXfs>' +\n\t\t'<cellXfs count=\"68\">' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"left\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"center\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"right\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"fill\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment textRotation=\"90\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment wrapText=\"1\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"9\"   fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"164\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"165\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"166\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"167\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"168\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"169\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"3\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"4\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"1\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"2\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"14\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'</cellXfs>' +\n\t\t'<cellStyles count=\"1\">' +\n\t\t'<cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\" />' +\n\t\t'</cellStyles>' +\n\t\t'<dxfs count=\"0\" />' +\n\t\t'<tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium9\" defaultPivotStyle=\"PivotStyleMedium4\" />' +\n\t\t'</styleSheet>'\n};\n// Note we could use 3 `for` loops for the styles, but when gzipped there is\n// virtually no difference in size, since the above can be easily compressed\n\n// Pattern matching for special number formats. Perhaps this should be exposed\n// via an API in future?\n// Ref: section 3.8.30 - built in formatters in open spreadsheet\n//   https://www.ecma-international.org/news/TC45_current_work/Office%20Open%20XML%20Part%204%20-%20Markup%20Language%20Reference.pdf\nvar _excelSpecials = [\n\t{\n\t\tmatch: /^\\-?\\d+\\.\\d%$/,\n\t\tstyle: 60,\n\t\tfmt: function (d) {\n\t\t\treturn d / 100;\n\t\t}\n\t}, // Percent with d.p.\n\t{\n\t\tmatch: /^\\-?\\d+\\.?\\d*%$/,\n\t\tstyle: 56,\n\t\tfmt: function (d) {\n\t\t\treturn d / 100;\n\t\t}\n\t}, // Percent\n\t{ match: /^\\-?\\$[\\d,]+.?\\d*$/, style: 57 }, // Dollars\n\t{ match: /^\\-?£[\\d,]+.?\\d*$/, style: 58 }, // Pounds\n\t{ match: /^\\-?€[\\d,]+.?\\d*$/, style: 59 }, // Euros\n\t{ match: /^\\-?\\d+$/, style: 65 }, // Numbers without thousand separators\n\t{ match: /^\\-?\\d+\\.\\d{2}$/, style: 66 }, // Numbers 2 d.p. without thousands separators\n\t{\n\t\tmatch: /^\\([\\d,]+\\)$/,\n\t\tstyle: 61,\n\t\tfmt: function (d) {\n\t\t\treturn -1 * d.replace(/[\\(\\)]/g, '');\n\t\t}\n\t}, // Negative numbers indicated by brackets\n\t{\n\t\tmatch: /^\\([\\d,]+\\.\\d{2}\\)$/,\n\t\tstyle: 62,\n\t\tfmt: function (d) {\n\t\t\treturn -1 * d.replace(/[\\(\\)]/g, '');\n\t\t}\n\t}, // Negative numbers indicated by brackets - 2d.p.\n\t{ match: /^\\-?[\\d,]+$/, style: 63 }, // Numbers with thousand separators\n\t{ match: /^\\-?[\\d,]+\\.\\d{2}$/, style: 64 },\n\t{\n\t\tmatch: /^[\\d]{4}\\-[01][\\d]\\-[0123][\\d]$/,\n\t\tstyle: 67,\n\t\tfmt: function (d) {\n\t\t\treturn Math.round(25569 + Date.parse(d) / (86400 * 1000));\n\t\t}\n\t} //Date yyyy-mm-dd\n];\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Buttons\n */\n\n//\n// Copy to clipboard\n//\nDataTable.ext.buttons.copyHtml5 = {\n\tclassName: 'buttons-copy buttons-html5',\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.copy', 'Copy');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\tvar that = this;\n\t\tvar exportData = _exportData(dt, config);\n\t\tvar info = dt.buttons.exportInfo(config);\n\t\tvar newline = _newLine(config);\n\t\tvar output = exportData.str;\n\t\tvar hiddenDiv = $('<div/>').css({\n\t\t\theight: 1,\n\t\t\twidth: 1,\n\t\t\toverflow: 'hidden',\n\t\t\tposition: 'fixed',\n\t\t\ttop: 0,\n\t\t\tleft: 0\n\t\t});\n\n\t\tif (info.title) {\n\t\t\toutput = info.title + newline + newline + output;\n\t\t}\n\n\t\tif (info.messageTop) {\n\t\t\toutput = info.messageTop + newline + newline + output;\n\t\t}\n\n\t\tif (info.messageBottom) {\n\t\t\toutput = output + newline + newline + info.messageBottom;\n\t\t}\n\n\t\tif (config.customize) {\n\t\t\toutput = config.customize(output, config, dt);\n\t\t}\n\n\t\tvar textarea = $('<textarea readonly/>').val(output).appendTo(hiddenDiv);\n\n\t\t// For browsers that support the copy execCommand, try to use it\n\t\tif (document.queryCommandSupported('copy')) {\n\t\t\thiddenDiv.appendTo(dt.table().container());\n\t\t\ttextarea[0].focus();\n\t\t\ttextarea[0].select();\n\n\t\t\ttry {\n\t\t\t\tvar successful = document.execCommand('copy');\n\t\t\t\thiddenDiv.remove();\n\n\t\t\t\tif (successful) {\n\t\t\t\t\tdt.buttons.info(\n\t\t\t\t\t\tdt.i18n('buttons.copyTitle', 'Copy to clipboard'),\n\t\t\t\t\t\tdt.i18n(\n\t\t\t\t\t\t\t'buttons.copySuccess',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t1: 'Copied one row to clipboard',\n\t\t\t\t\t\t\t\t_: 'Copied %d rows to clipboard'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\texportData.rows\n\t\t\t\t\t\t),\n\t\t\t\t\t\t2000\n\t\t\t\t\t);\n\n\t\t\t\t\tthis.processing(false);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch (t) {}\n\t\t}\n\n\t\t// Otherwise we show the text box and instruct the user to use it\n\t\tvar message = $(\n\t\t\t'<span>' +\n\t\t\t\tdt.i18n(\n\t\t\t\t\t'buttons.copyKeys',\n\t\t\t\t\t'Press <i>ctrl</i> or <i>\\u2318</i> + <i>C</i> to copy the table data<br>to your system clipboard.<br><br>' +\n\t\t\t\t\t\t'To cancel, click this message or press escape.'\n\t\t\t\t) +\n\t\t\t\t'</span>'\n\t\t).append(hiddenDiv);\n\n\t\tdt.buttons.info(dt.i18n('buttons.copyTitle', 'Copy to clipboard'), message, 0);\n\n\t\t// Select the text so when the user activates their system clipboard\n\t\t// it will copy that text\n\t\ttextarea[0].focus();\n\t\ttextarea[0].select();\n\n\t\t// Event to hide the message when the user is done\n\t\tvar container = $(message).closest('.dt-button-info');\n\t\tvar close = function () {\n\t\t\tcontainer.off('click.buttons-copy');\n\t\t\t$(document).off('.buttons-copy');\n\t\t\tdt.buttons.info(false);\n\t\t};\n\n\t\tcontainer.on('click.buttons-copy', close);\n\t\t$(document)\n\t\t\t.on('keydown.buttons-copy', function (e) {\n\t\t\t\tif (e.keyCode === 27) {\n\t\t\t\t\t// esc\n\t\t\t\t\tclose();\n\t\t\t\t\tthat.processing(false);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('copy.buttons-copy cut.buttons-copy', function () {\n\t\t\t\tclose();\n\t\t\t\tthat.processing(false);\n\t\t\t});\n\t},\n\n\texportOptions: {},\n\n\tfieldSeparator: '\\t',\n\n\tfieldBoundary: '',\n\n\theader: true,\n\n\tfooter: false,\n\n\ttitle: '*',\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*'\n};\n\n//\n// CSV export\n//\nDataTable.ext.buttons.csvHtml5 = {\n\tbom: false,\n\n\tclassName: 'buttons-csv buttons-html5',\n\n\tavailable: function () {\n\t\treturn window.FileReader !== undefined && window.Blob;\n\t},\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.csv', 'CSV');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\t// Set the text\n\t\tvar output = _exportData(dt, config).str;\n\t\tvar info = dt.buttons.exportInfo(config);\n\t\tvar charset = config.charset;\n\n\t\tif (config.customize) {\n\t\t\toutput = config.customize(output, config, dt);\n\t\t}\n\n\t\tif (charset !== false) {\n\t\t\tif (!charset) {\n\t\t\t\tcharset = document.characterSet || document.charset;\n\t\t\t}\n\n\t\t\tif (charset) {\n\t\t\t\tcharset = ';charset=' + charset;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tcharset = '';\n\t\t}\n\n\t\tif (config.bom) {\n\t\t\toutput = String.fromCharCode(0xfeff) + output;\n\t\t}\n\n\t\t_saveAs(new Blob([output], { type: 'text/csv' + charset }), info.filename, true);\n\n\t\tthis.processing(false);\n\t},\n\n\tfilename: '*',\n\n\textension: '.csv',\n\n\texportOptions: {},\n\n\tfieldSeparator: ',',\n\n\tfieldBoundary: '\"',\n\n\tescapeChar: '\"',\n\n\tcharset: null,\n\n\theader: true,\n\n\tfooter: false\n};\n\n//\n// Excel (xlsx) export\n//\nDataTable.ext.buttons.excelHtml5 = {\n\tclassName: 'buttons-excel buttons-html5',\n\n\tavailable: function () {\n\t\treturn (\n\t\t\twindow.FileReader !== undefined &&\n\t\t\t_jsZip() !== undefined &&\n\t\t\t!_isDuffSafari() &&\n\t\t\t_serialiser\n\t\t);\n\t},\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.excel', 'Excel');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\tvar that = this;\n\t\tvar rowPos = 0;\n\t\tvar dataStartRow, dataEndRow;\n\t\tvar getXml = function (type) {\n\t\t\tvar str = excelStrings[type];\n\n\t\t\t//str = str.replace( /xmlns:/g, 'xmlns_' ).replace( /mc:/g, 'mc_' );\n\n\t\t\treturn $.parseXML(str);\n\t\t};\n\t\tvar rels = getXml('xl/worksheets/sheet1.xml');\n\t\tvar relsGet = rels.getElementsByTagName('sheetData')[0];\n\n\t\tvar xlsx = {\n\t\t\t_rels: {\n\t\t\t\t'.rels': getXml('_rels/.rels')\n\t\t\t},\n\t\t\txl: {\n\t\t\t\t_rels: {\n\t\t\t\t\t'workbook.xml.rels': getXml('xl/_rels/workbook.xml.rels')\n\t\t\t\t},\n\t\t\t\t'workbook.xml': getXml('xl/workbook.xml'),\n\t\t\t\t'styles.xml': getXml('xl/styles.xml'),\n\t\t\t\tworksheets: {\n\t\t\t\t\t'sheet1.xml': rels\n\t\t\t\t}\n\t\t\t},\n\t\t\t'[Content_Types].xml': getXml('[Content_Types].xml')\n\t\t};\n\n\t\tvar data = dt.buttons.exportData(config.exportOptions);\n\t\tvar currentRow, rowNode;\n\t\tvar addRow = function (row) {\n\t\t\tcurrentRow = rowPos + 1;\n\t\t\trowNode = _createNode(rels, 'row', { attr: { r: currentRow } });\n\n\t\t\tfor (var i = 0, ien = row.length; i < ien; i++) {\n\t\t\t\t// Concat both the Cell Columns as a letter and the Row of the cell.\n\t\t\t\tvar cellId = createCellPos(i) + '' + currentRow;\n\t\t\t\tvar cell = null;\n\n\t\t\t\t// For null, undefined of blank cell, continue so it doesn't create the _createNode\n\t\t\t\tif (row[i] === null || row[i] === undefined || row[i] === '') {\n\t\t\t\t\tif (config.createEmptyCells === true) {\n\t\t\t\t\t\trow[i] = '';\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar originalContent = row[i];\n\t\t\t\trow[i] = typeof row[i].trim === 'function' ? row[i].trim() : row[i];\n\n\t\t\t\t// Special number formatting options\n\t\t\t\tfor (var j = 0, jen = _excelSpecials.length; j < jen; j++) {\n\t\t\t\t\tvar special = _excelSpecials[j];\n\n\t\t\t\t\t// TODO Need to provide the ability for the specials to say\n\t\t\t\t\t// if they are returning a string, since at the moment it is\n\t\t\t\t\t// assumed to be a number\n\t\t\t\t\tif (row[i].match && !row[i].match(/^0\\d+/) && row[i].match(special.match)) {\n\t\t\t\t\t\tvar val = row[i].replace(/[^\\d\\.\\-]/g, '');\n\n\t\t\t\t\t\tif (special.fmt) {\n\t\t\t\t\t\t\tval = special.fmt(val);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcell = _createNode(rels, 'c', {\n\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\tr: cellId,\n\t\t\t\t\t\t\t\ts: special.style\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: [_createNode(rels, 'v', { text: val })]\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!cell) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof row[i] === 'number' ||\n\t\t\t\t\t\t(row[i].match &&\n\t\t\t\t\t\t\trow[i].match(/^-?\\d+(\\.\\d+)?([eE]\\-?\\d+)?$/) && // Includes exponential format\n\t\t\t\t\t\t\t!row[i].match(/^0\\d+/))\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Detect numbers - don't match numbers with leading zeros\n\t\t\t\t\t\t// or a negative anywhere but the start\n\t\t\t\t\t\tcell = _createNode(rels, 'c', {\n\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\tt: 'n',\n\t\t\t\t\t\t\t\tr: cellId\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: [_createNode(rels, 'v', { text: row[i] })]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// String output - replace non standard characters for text output\n\t\t\t\t\t\tvar text = !originalContent.replace\n\t\t\t\t\t\t\t? originalContent\n\t\t\t\t\t\t\t: originalContent.replace(/[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x9F]/g, '');\n\n\t\t\t\t\t\tcell = _createNode(rels, 'c', {\n\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\tt: 'inlineStr',\n\t\t\t\t\t\t\t\tr: cellId\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: {\n\t\t\t\t\t\t\t\trow: _createNode(rels, 'is', {\n\t\t\t\t\t\t\t\t\tchildren: {\n\t\t\t\t\t\t\t\t\t\trow: _createNode(rels, 't', {\n\t\t\t\t\t\t\t\t\t\t\ttext: text,\n\t\t\t\t\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\t\t\t\t\t'xml:space': 'preserve'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trowNode.appendChild(cell);\n\t\t\t}\n\n\t\t\trelsGet.appendChild(rowNode);\n\t\t\trowPos++;\n\t\t};\n\n\t\tif (config.customizeData) {\n\t\t\tconfig.customizeData(data);\n\t\t}\n\n\t\tvar mergeCells = function (row, colspan) {\n\t\t\tvar mergeCells = $('mergeCells', rels);\n\n\t\t\tmergeCells[0].appendChild(\n\t\t\t\t_createNode(rels, 'mergeCell', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tref: 'A' + row + ':' + createCellPos(colspan) + row\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t\tmergeCells.attr('count', parseFloat(mergeCells.attr('count')) + 1);\n\t\t\t$('row:eq(' + (row - 1) + ') c', rels).attr('s', '51'); // centre\n\t\t};\n\n\t\t// Title and top messages\n\t\tvar exportInfo = dt.buttons.exportInfo(config);\n\t\tif (exportInfo.title) {\n\t\t\taddRow([exportInfo.title], rowPos);\n\t\t\tmergeCells(rowPos, data.header.length - 1);\n\t\t}\n\n\t\tif (exportInfo.messageTop) {\n\t\t\taddRow([exportInfo.messageTop], rowPos);\n\t\t\tmergeCells(rowPos, data.header.length - 1);\n\t\t}\n\n\t\t// Table itself\n\t\tif (config.header) {\n\t\t\taddRow(data.header, rowPos);\n\t\t\t$('row:last c', rels).attr('s', '2'); // bold\n\t\t}\n\n\t\tdataStartRow = rowPos;\n\n\t\tfor (var n = 0, ie = data.body.length; n < ie; n++) {\n\t\t\taddRow(data.body[n], rowPos);\n\t\t}\n\n\t\tdataEndRow = rowPos;\n\n\t\tif (config.footer && data.footer) {\n\t\t\taddRow(data.footer, rowPos);\n\t\t\t$('row:last c', rels).attr('s', '2'); // bold\n\t\t}\n\n\t\t// Below the table\n\t\tif (exportInfo.messageBottom) {\n\t\t\taddRow([exportInfo.messageBottom], rowPos);\n\t\t\tmergeCells(rowPos, data.header.length - 1);\n\t\t}\n\n\t\t// Set column widths\n\t\tvar cols = _createNode(rels, 'cols');\n\t\t$('worksheet', rels).prepend(cols);\n\n\t\tfor (var i = 0, ien = data.header.length; i < ien; i++) {\n\t\t\tcols.appendChild(\n\t\t\t\t_createNode(rels, 'col', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tmin: i + 1,\n\t\t\t\t\t\tmax: i + 1,\n\t\t\t\t\t\twidth: _excelColWidth(data, i),\n\t\t\t\t\t\tcustomWidth: 1\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\t// Workbook modifications\n\t\tvar workbook = xlsx.xl['workbook.xml'];\n\n\t\t$('sheets sheet', workbook).attr('name', _sheetname(config));\n\n\t\t// Auto filter for columns\n\t\tif (config.autoFilter) {\n\t\t\t$('mergeCells', rels).before(\n\t\t\t\t_createNode(rels, 'autoFilter', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tref:\n\t\t\t\t\t\t\t'A' +\n\t\t\t\t\t\t\tdataStartRow +\n\t\t\t\t\t\t\t':' +\n\t\t\t\t\t\t\tcreateCellPos(data.header.length - 1) +\n\t\t\t\t\t\t\tdataEndRow\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\n\t\t\t$('definedNames', workbook).append(\n\t\t\t\t_createNode(workbook, 'definedName', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tname: '_xlnm._FilterDatabase',\n\t\t\t\t\t\tlocalSheetId: '0',\n\t\t\t\t\t\thidden: 1\n\t\t\t\t\t},\n\t\t\t\t\ttext:\n\t\t\t\t\t\t_sheetname(config) +\n\t\t\t\t\t\t'!$A$' +\n\t\t\t\t\t\tdataStartRow +\n\t\t\t\t\t\t':' +\n\t\t\t\t\t\tcreateCellPos(data.header.length - 1) +\n\t\t\t\t\t\tdataEndRow\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\t// Let the developer customise the document if they want to\n\t\tif (config.customize) {\n\t\t\tconfig.customize(xlsx, config, dt);\n\t\t}\n\n\t\t// Excel doesn't like an empty mergeCells tag\n\t\tif ($('mergeCells', rels).children().length === 0) {\n\t\t\t$('mergeCells', rels).remove();\n\t\t}\n\n\t\tvar jszip = _jsZip();\n\t\tvar zip = new jszip();\n\t\tvar zipConfig = {\n\t\t\tcompression: 'DEFLATE',\n\t\t\ttype: 'blob',\n\t\t\tmimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t};\n\n\t\t_addToZip(zip, xlsx);\n\n\t\t// Modern Excel has a 218 character limit on the file name + path of the file (why!?)\n\t\t// https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3\n\t\t// So we truncate to allow for this.\n\t\tvar filename = exportInfo.filename;\n\n\t\tif (filename > 175) {\n\t\t\tfilename = filename.substr(0, 175);\n\t\t}\n\n\t\tif (zip.generateAsync) {\n\t\t\t// JSZip 3+\n\t\t\tzip.generateAsync(zipConfig).then(function (blob) {\n\t\t\t\t_saveAs(blob, filename);\n\t\t\t\tthat.processing(false);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t// JSZip 2.5\n\t\t\t_saveAs(zip.generate(zipConfig), filename);\n\t\t\tthis.processing(false);\n\t\t}\n\t},\n\n\tfilename: '*',\n\n\textension: '.xlsx',\n\n\texportOptions: {},\n\n\theader: true,\n\n\tfooter: false,\n\n\ttitle: '*',\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*',\n\n\tcreateEmptyCells: false,\n\n\tautoFilter: false,\n\n\tsheetName: ''\n};\n\n//\n// PDF export - using pdfMake - http://pdfmake.org\n//\nDataTable.ext.buttons.pdfHtml5 = {\n\tclassName: 'buttons-pdf buttons-html5',\n\n\tavailable: function () {\n\t\treturn window.FileReader !== undefined && _pdfMake();\n\t},\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.pdf', 'PDF');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\tvar that = this;\n\t\tvar data = dt.buttons.exportData(config.exportOptions);\n\t\tvar info = dt.buttons.exportInfo(config);\n\t\tvar rows = [];\n\n\t\tif (config.header) {\n\t\t\trows.push(\n\t\t\t\t$.map(data.header, function (d) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: typeof d === 'string' ? d : d + '',\n\t\t\t\t\t\tstyle: 'tableHeader'\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\t\trows.push(\n\t\t\t\t$.map(data.body[i], function (d) {\n\t\t\t\t\tif (d === null || d === undefined) {\n\t\t\t\t\t\td = '';\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: typeof d === 'string' ? d : d + '',\n\t\t\t\t\t\tstyle: i % 2 ? 'tableBodyEven' : 'tableBodyOdd'\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tif (config.footer && data.footer) {\n\t\t\trows.push(\n\t\t\t\t$.map(data.footer, function (d) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: typeof d === 'string' ? d : d + '',\n\t\t\t\t\t\tstyle: 'tableFooter'\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar doc = {\n\t\t\tpageSize: config.pageSize,\n\t\t\tpageOrientation: config.orientation,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttable: {\n\t\t\t\t\t\theaderRows: 1,\n\t\t\t\t\t\tbody: rows\n\t\t\t\t\t},\n\t\t\t\t\tlayout: 'noBorders'\n\t\t\t\t}\n\t\t\t],\n\t\t\tstyles: {\n\t\t\t\ttableHeader: {\n\t\t\t\t\tbold: true,\n\t\t\t\t\tfontSize: 11,\n\t\t\t\t\tcolor: 'white',\n\t\t\t\t\tfillColor: '#2d4154',\n\t\t\t\t\talignment: 'center'\n\t\t\t\t},\n\t\t\t\ttableBodyEven: {},\n\t\t\t\ttableBodyOdd: {\n\t\t\t\t\tfillColor: '#f3f3f3'\n\t\t\t\t},\n\t\t\t\ttableFooter: {\n\t\t\t\t\tbold: true,\n\t\t\t\t\tfontSize: 11,\n\t\t\t\t\tcolor: 'white',\n\t\t\t\t\tfillColor: '#2d4154'\n\t\t\t\t},\n\t\t\t\ttitle: {\n\t\t\t\t\talignment: 'center',\n\t\t\t\t\tfontSize: 15\n\t\t\t\t},\n\t\t\t\tmessage: {}\n\t\t\t},\n\t\t\tdefaultStyle: {\n\t\t\t\tfontSize: 10\n\t\t\t}\n\t\t};\n\n\t\tif (info.messageTop) {\n\t\t\tdoc.content.unshift({\n\t\t\t\ttext: info.messageTop,\n\t\t\t\tstyle: 'message',\n\t\t\t\tmargin: [0, 0, 0, 12]\n\t\t\t});\n\t\t}\n\n\t\tif (info.messageBottom) {\n\t\t\tdoc.content.push({\n\t\t\t\ttext: info.messageBottom,\n\t\t\t\tstyle: 'message',\n\t\t\t\tmargin: [0, 0, 0, 12]\n\t\t\t});\n\t\t}\n\n\t\tif (info.title) {\n\t\t\tdoc.content.unshift({\n\t\t\t\ttext: info.title,\n\t\t\t\tstyle: 'title',\n\t\t\t\tmargin: [0, 0, 0, 12]\n\t\t\t});\n\t\t}\n\n\t\tif (config.customize) {\n\t\t\tconfig.customize(doc, config, dt);\n\t\t}\n\n\t\tvar pdf = _pdfMake().createPdf(doc);\n\n\t\tif (config.download === 'open' && !_isDuffSafari()) {\n\t\t\tpdf.open();\n\t\t}\n\t\telse {\n\t\t\tpdf.download(info.filename);\n\t\t}\n\n\t\tthis.processing(false);\n\t},\n\n\ttitle: '*',\n\n\tfilename: '*',\n\n\textension: '.pdf',\n\n\texportOptions: {},\n\n\torientation: 'portrait',\n\n\tpageSize: 'A4',\n\n\theader: true,\n\n\tfooter: false,\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*',\n\n\tcustomize: null,\n\n\tdownload: 'download'\n};\n\n\nreturn DataTable;\n}));\n\n\n/*!\n * Print button for Buttons and DataTables.\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Buttons ) {\n\t\t\t\trequire('datatables.net-buttons')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nvar _link = document.createElement('a');\n\n/**\n * Clone link and style tags, taking into account the need to change the source\n * path.\n *\n * @param  {node}     el Element to convert\n */\nvar _styleToAbs = function (el) {\n\tvar url;\n\tvar clone = $(el).clone()[0];\n\tvar linkHost;\n\n\tif (clone.nodeName.toLowerCase() === 'link') {\n\t\tclone.href = _relToAbs(clone.href);\n\t}\n\n\treturn clone.outerHTML;\n};\n\n/**\n * Convert a URL from a relative to an absolute address so it will work\n * correctly in the popup window which has no base URL.\n *\n * @param  {string} href URL\n */\nvar _relToAbs = function (href) {\n\t// Assign to a link on the original page so the browser will do all the\n\t// hard work of figuring out where the file actually is\n\t_link.href = href;\n\tvar linkHost = _link.host;\n\n\t// IE doesn't have a trailing slash on the host\n\t// Chrome has it on the pathname\n\tif (linkHost.indexOf('/') === -1 && _link.pathname.indexOf('/') !== 0) {\n\t\tlinkHost += '/';\n\t}\n\n\treturn _link.protocol + '//' + linkHost + _link.pathname + _link.search;\n};\n\nDataTable.ext.buttons.print = {\n\tclassName: 'buttons-print',\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.print', 'Print');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tvar data = dt.buttons.exportData(\n\t\t\t$.extend({ decodeEntities: false }, config.exportOptions) // XSS protection\n\t\t);\n\t\tvar exportInfo = dt.buttons.exportInfo(config);\n\t\tvar columnClasses = dt\n\t\t\t.columns(config.exportOptions.columns)\n\t\t\t.flatten()\n\t\t\t.map(function (idx) {\n\t\t\t\treturn dt.settings()[0].aoColumns[dt.column(idx).index()].sClass;\n\t\t\t})\n\t\t\t.toArray();\n\n\t\tvar addRow = function (d, tag) {\n\t\t\tvar str = '<tr>';\n\n\t\t\tfor (var i = 0, ien = d.length; i < ien; i++) {\n\t\t\t\t// null and undefined aren't useful in the print output\n\t\t\t\tvar dataOut = d[i] === null || d[i] === undefined ? '' : d[i];\n\t\t\t\tvar classAttr = columnClasses[i] ? 'class=\"' + columnClasses[i] + '\"' : '';\n\n\t\t\t\tstr += '<' + tag + ' ' + classAttr + '>' + dataOut + '</' + tag + '>';\n\t\t\t}\n\n\t\t\treturn str + '</tr>';\n\t\t};\n\n\t\t// Construct a table for printing\n\t\tvar html = '<table class=\"' + dt.table().node().className + '\">';\n\n\t\tif (config.header) {\n\t\t\thtml += '<thead>' + addRow(data.header, 'th') + '</thead>';\n\t\t}\n\n\t\thtml += '<tbody>';\n\t\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\t\thtml += addRow(data.body[i], 'td');\n\t\t}\n\t\thtml += '</tbody>';\n\n\t\tif (config.footer && data.footer) {\n\t\t\thtml += '<tfoot>' + addRow(data.footer, 'th') + '</tfoot>';\n\t\t}\n\t\thtml += '</table>';\n\n\t\t// Open a new window for the printable table\n\t\tvar win = window.open('', '');\n\n\t\tif (!win) {\n\t\t\tdt.buttons.info(\n\t\t\t\tdt.i18n('buttons.printErrorTitle', 'Unable to open print view'),\n\t\t\t\tdt.i18n(\n\t\t\t\t\t'buttons.printErrorMsg',\n\t\t\t\t\t'Please allow popups in your browser for this site to be able to view the print view.'\n\t\t\t\t),\n\t\t\t\t5000\n\t\t\t);\n\n\t\t\treturn;\n\t\t}\n\n\t\twin.document.close();\n\n\t\t// Inject the title and also a copy of the style and link tags from this\n\t\t// document so the table can retain its base styling. Note that we have\n\t\t// to use string manipulation as IE won't allow elements to be created\n\t\t// in the host document and then appended to the new window.\n\t\tvar head = '<title>' + exportInfo.title + '</title>';\n\t\t$('style, link').each(function () {\n\t\t\thead += _styleToAbs(this);\n\t\t});\n\n\t\ttry {\n\t\t\twin.document.head.innerHTML = head; // Work around for Edge\n\t\t} catch (e) {\n\t\t\t$(win.document.head).html(head); // Old IE\n\t\t}\n\n\t\t// Inject the table and other surrounding information\n\t\twin.document.body.innerHTML =\n\t\t\t'<h1>' +\n\t\t\texportInfo.title +\n\t\t\t'</h1>' +\n\t\t\t'<div>' +\n\t\t\t(exportInfo.messageTop || '') +\n\t\t\t'</div>' +\n\t\t\thtml +\n\t\t\t'<div>' +\n\t\t\t(exportInfo.messageBottom || '') +\n\t\t\t'</div>';\n\n\t\t$(win.document.body).addClass('dt-print-view');\n\n\t\t$('img', win.document.body).each(function (i, img) {\n\t\t\timg.setAttribute('src', _relToAbs(img.getAttribute('src')));\n\t\t});\n\n\t\tif (config.customize) {\n\t\t\tconfig.customize(win, config, dt);\n\t\t}\n\n\t\t// Allow stylesheets time to load\n\t\tvar autoPrint = function () {\n\t\t\tif (config.autoPrint) {\n\t\t\t\twin.print(); // blocking - so close will not\n\t\t\t\twin.close(); // execute until this is done\n\t\t\t}\n\t\t};\n\n\t\tif (navigator.userAgent.match(/Trident\\/\\d.\\d/)) {\n\t\t\t// IE needs to call this without a setTimeout\n\t\t\tautoPrint();\n\t\t}\n\t\telse {\n\t\t\twin.setTimeout(autoPrint, 1000);\n\t\t}\n\t},\n\n\ttitle: '*',\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*',\n\n\texportOptions: {},\n\n\theader: true,\n\n\tfooter: false,\n\n\tautoPrint: true,\n\n\tcustomize: null\n};\n\n\nreturn DataTable;\n}));\n\n\n/*! ColReorder 1.7.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     ColReorder\n * @description Provide the ability to reorder columns in a DataTable\n * @version     1.7.0\n * @author      SpryMedia Ltd\n * @contact     datatables.net\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/**\n * Switch the key value pairing of an index array to be value key (i.e. the old value is now the\n * key). For example consider [ 2, 0, 1 ] this would be returned as [ 1, 2, 0 ].\n *  @method  fnInvertKeyValues\n *  @param   array aIn Array to switch around\n *  @returns array\n */\nfunction fnInvertKeyValues( aIn )\n{\n\tvar aRet=[];\n\tfor ( var i=0, iLen=aIn.length ; i<iLen ; i++ )\n\t{\n\t\taRet[ aIn[i] ] = i;\n\t}\n\treturn aRet;\n}\n\n\n/**\n * Modify an array by switching the position of two elements\n *  @method  fnArraySwitch\n *  @param   array aArray Array to consider, will be modified by reference (i.e. no return)\n *  @param   int iFrom From point\n *  @param   int iTo Insert point\n *  @returns void\n */\nfunction fnArraySwitch( aArray, iFrom, iTo )\n{\n\tvar mStore = aArray.splice( iFrom, 1 )[0];\n\taArray.splice( iTo, 0, mStore );\n}\n\n\n/**\n * Switch the positions of nodes in a parent node (note this is specifically designed for\n * table rows). Note this function considers all element nodes under the parent!\n *  @method  fnDomSwitch\n *  @param   string sTag Tag to consider\n *  @param   int iFrom Element to move\n *  @param   int Point to element the element to (before this point), can be null for append\n *  @returns void\n */\nfunction fnDomSwitch( nParent, iFrom, iTo )\n{\n\tvar anTags = [];\n\tfor ( var i=0, iLen=nParent.childNodes.length ; i<iLen ; i++ )\n\t{\n\t\tif ( nParent.childNodes[i].nodeType == 1 )\n\t\t{\n\t\t\tanTags.push( nParent.childNodes[i] );\n\t\t}\n\t}\n\tvar nStore = anTags[ iFrom ];\n\n\tif ( iTo !== null )\n\t{\n\t\tnParent.insertBefore( nStore, anTags[iTo] );\n\t}\n\telse\n\t{\n\t\tnParent.appendChild( nStore );\n\t}\n}\n\n\n/**\n * Plug-in for DataTables which will reorder the internal column structure by taking the column\n * from one position (iFrom) and insert it into a given point (iTo).\n *  @method  $.fn.dataTableExt.oApi.fnColReorder\n *  @param   object oSettings DataTables settings object - automatically added by DataTables!\n *  @param   int iFrom Take the column to be repositioned from this point\n *  @param   int iTo and insert it into this point\n *  @param   bool drop Indicate if the reorder is the final one (i.e. a drop)\n *    not a live reorder\n *  @param   bool invalidateRows speeds up processing if false passed\n *  @returns void\n */\n$.fn.dataTableExt.oApi.fnColReorder = function ( oSettings, iFrom, iTo, drop, invalidateRows )\n{\n\tvar i, iLen, j, jLen, jen, iCols=oSettings.aoColumns.length, nTrs, oCol;\n\tvar attrMap = function ( obj, prop, mapping ) {\n\t\tif ( ! obj[ prop ] || typeof obj[ prop ] === 'function' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar a = obj[ prop ].split('.');\n\t\tvar num = a.shift();\n\n\t\tif ( isNaN( num*1 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tobj[ prop ] = mapping[ num*1 ]+'.'+a.join('.');\n\t};\n\n\t/* Sanity check in the input */\n\tif ( iFrom == iTo )\n\t{\n\t\t/* Pointless reorder */\n\t\treturn;\n\t}\n\n\tif ( iFrom < 0 || iFrom >= iCols )\n\t{\n\t\tthis.oApi._fnLog( oSettings, 1, \"ColReorder 'from' index is out of bounds: \"+iFrom );\n\t\treturn;\n\t}\n\n\tif ( iTo < 0 || iTo >= iCols )\n\t{\n\t\tthis.oApi._fnLog( oSettings, 1, \"ColReorder 'to' index is out of bounds: \"+iTo );\n\t\treturn;\n\t}\n\n\t/*\n\t * Calculate the new column array index, so we have a mapping between the old and new\n\t */\n\tvar aiMapping = [];\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ )\n\t{\n\t\taiMapping[i] = i;\n\t}\n\tfnArraySwitch( aiMapping, iFrom, iTo );\n\tvar aiInvertMapping = fnInvertKeyValues( aiMapping );\n\n\n\t/*\n\t * Convert all internal indexing to the new column order indexes\n\t */\n\t/* Sorting */\n\tfor ( i=0, iLen=oSettings.aaSorting.length ; i<iLen ; i++ )\n\t{\n\t\toSettings.aaSorting[i][0] = aiInvertMapping[ oSettings.aaSorting[i][0] ];\n\t}\n\n\t/* Fixed sorting */\n\tif ( oSettings.aaSortingFixed !== null )\n\t{\n\t\tfor ( i=0, iLen=oSettings.aaSortingFixed.length ; i<iLen ; i++ )\n\t\t{\n\t\t\toSettings.aaSortingFixed[i][0] = aiInvertMapping[ oSettings.aaSortingFixed[i][0] ];\n\t\t}\n\t}\n\n\t/* Data column sorting (the column which the sort for a given column should take place on) */\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ )\n\t{\n\t\toCol = oSettings.aoColumns[i];\n\t\tfor ( j=0, jLen=oCol.aDataSort.length ; j<jLen ; j++ )\n\t\t{\n\t\t\toCol.aDataSort[j] = aiInvertMapping[ oCol.aDataSort[j] ];\n\t\t}\n\n\t\t// Update the column indexes\n\t\toCol.idx = aiInvertMapping[ oCol.idx ];\n\t}\n\n\t// Update 1.10 optimised sort class removal variable\n\t$.each( oSettings.aLastSort, function (i, val) {\n\t\toSettings.aLastSort[i].src = aiInvertMapping[ val.src ];\n\t} );\n\n\t/* Update the Get and Set functions for each column */\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ )\n\t{\n\t\toCol = oSettings.aoColumns[i];\n\n\t\tif ( typeof oCol.mData == 'number' ) {\n\t\t\toCol.mData = aiInvertMapping[ oCol.mData ];\n\t\t}\n\t\telse if ( $.isPlainObject( oCol.mData ) ) {\n\t\t\t// HTML5 data sourced\n\t\t\tattrMap( oCol.mData, '_',      aiInvertMapping );\n\t\t\tattrMap( oCol.mData, 'filter', aiInvertMapping );\n\t\t\tattrMap( oCol.mData, 'sort',   aiInvertMapping );\n\t\t\tattrMap( oCol.mData, 'type',   aiInvertMapping );\n\t\t}\n\t}\n\n\t/*\n\t * Move the DOM elements\n\t */\n\tif ( oSettings.aoColumns[iFrom].bVisible )\n\t{\n\t\t/* Calculate the current visible index and the point to insert the node before. The insert\n\t\t * before needs to take into account that there might not be an element to insert before,\n\t\t * in which case it will be null, and an appendChild should be used\n\t\t */\n\t\tvar iVisibleIndex = this.oApi._fnColumnIndexToVisible( oSettings, iFrom );\n\t\tvar iInsertBeforeIndex = null;\n\n\t\ti = iTo < iFrom ? iTo : iTo + 1;\n\t\twhile ( iInsertBeforeIndex === null && i < iCols )\n\t\t{\n\t\t\tiInsertBeforeIndex = this.oApi._fnColumnIndexToVisible( oSettings, i );\n\t\t\ti++;\n\t\t}\n\n\t\t/* Header */\n\t\tnTrs = oSettings.nTHead.getElementsByTagName('tr');\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfnDomSwitch( nTrs[i], iVisibleIndex, iInsertBeforeIndex );\n\t\t}\n\n\t\t/* Footer */\n\t\tif ( oSettings.nTFoot !== null )\n\t\t{\n\t\t\tnTrs = oSettings.nTFoot.getElementsByTagName('tr');\n\t\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tfnDomSwitch( nTrs[i], iVisibleIndex, iInsertBeforeIndex );\n\t\t\t}\n\t\t}\n\n\t\t/* Body */\n\t\tfor ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( oSettings.aoData[i].nTr !== null )\n\t\t\t{\n\t\t\t\tfnDomSwitch( oSettings.aoData[i].nTr, iVisibleIndex, iInsertBeforeIndex );\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Move the internal array elements\n\t */\n\t/* Columns */\n\tfnArraySwitch( oSettings.aoColumns, iFrom, iTo );\n\n\t// regenerate the get / set functions\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ ) {\n\t\toSettings.oApi._fnColumnOptions( oSettings, i, {} );\n\t}\n\n\t/* Search columns */\n\tfnArraySwitch( oSettings.aoPreSearchCols, iFrom, iTo );\n\n\t/* Array array - internal data anodes cache */\n\tfor ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ )\n\t{\n\t\tvar data = oSettings.aoData[i];\n\t\tvar cells = data.anCells;\n\n\t\tif ( cells ) {\n\t\t\tfnArraySwitch( cells, iFrom, iTo );\n\n\t\t\t// Longer term, should this be moved into the DataTables' invalidate\n\t\t\t// methods?\n\t\t\tfor ( j=0, jen=cells.length ; j<jen ; j++ ) {\n\t\t\t\tif ( cells[j] && cells[j]._DT_CellIndex ) {\n\t\t\t\t\tcells[j]._DT_CellIndex.column = j;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Swap around array sourced data (object based is left as is)\n\t\tif ( Array.isArray( data._aData ) ) {\n\t\t\tfnArraySwitch( data._aData, iFrom, iTo );\n\t\t}\n\t}\n\n\t/* Reposition the header elements in the header layout array */\n\tfor ( i=0, iLen=oSettings.aoHeader.length ; i<iLen ; i++ )\n\t{\n\t\tfnArraySwitch( oSettings.aoHeader[i], iFrom, iTo );\n\t}\n\n\tif ( oSettings.aoFooter !== null )\n\t{\n\t\tfor ( i=0, iLen=oSettings.aoFooter.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfnArraySwitch( oSettings.aoFooter[i], iFrom, iTo );\n\t\t}\n\t}\n\n\tif ( invalidateRows || invalidateRows === undefined )\n\t{\n\t\t// Always read from the data object rather than reading back from the DOM\n\t\t// since it could have been changed by a renderer\n\t\t$.fn.dataTable.Api( oSettings ).rows().invalidate('data');\n\t}\n\n\t/*\n\t * Update DataTables' event handlers\n\t */\n\n\t/* Sort listener */\n\tfor ( i=0, iLen=iCols ; i<iLen ; i++ )\n\t{\n\t\t$(oSettings.aoColumns[i].nTh).off('.DT');\n\t\tthis.oApi._fnSortAttachListener( oSettings, oSettings.aoColumns[i].nTh, i );\n\t}\n\n\n\t/* Fire an event so other plug-ins can update */\n\t$(oSettings.oInstance).trigger( 'column-reorder.dt', [ oSettings, {\n\t\tfrom: iFrom,\n\t\tto: iTo,\n\t\tmapping: aiInvertMapping,\n\t\tdrop: drop,\n\n\t\t// Old style parameters for compatibility\n\t\tiFrom: iFrom,\n\t\tiTo: iTo,\n\t\taiInvertMapping: aiInvertMapping\n\t} ] );\n};\n\n/**\n * ColReorder provides column visibility control for DataTables\n * @class ColReorder\n * @constructor\n * @param {object} dt DataTables settings object\n * @param {object} opts ColReorder options\n */\nvar ColReorder = function( dt, opts )\n{\n\tvar settings = new $.fn.dataTable.Api( dt ).settings()[0];\n\n\t// Ensure that we can't initialise on the same table twice\n\tif ( settings._colReorder ) {\n\t\treturn settings._colReorder;\n\t}\n\n\t// Allow the options to be a boolean for defaults\n\tif ( opts === true ) {\n\t\topts = {};\n\t}\n\n\t// Convert from camelCase to Hungarian, just as DataTables does\n\tvar camelToHungarian = $.fn.dataTable.camelToHungarian;\n\tif ( camelToHungarian ) {\n\t\tcamelToHungarian( ColReorder.defaults, ColReorder.defaults, true );\n\t\tcamelToHungarian( ColReorder.defaults, opts || {} );\n\t}\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public class variables\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * @namespace Settings object which contains customisable information for ColReorder instance\n\t */\n\tthis.s = {\n\t\t/**\n\t\t * DataTables settings object\n\t\t *  @property dt\n\t\t *  @type     Object\n\t\t *  @default  null\n\t\t */\n\t\t\"dt\": null,\n\n\t\t/**\n\t\t * Enable flag\n\t\t *  @property dt\n\t\t *  @type     Object\n\t\t *  @default  null\n\t\t */\n\t\t\"enable\": null,\n\n\t\t/**\n\t\t * Initialisation object used for this instance\n\t\t *  @property init\n\t\t *  @type     object\n\t\t *  @default  {}\n\t\t */\n\t\t\"init\": $.extend( true, {}, ColReorder.defaults, opts ),\n\n\t\t/**\n\t\t * Number of columns to fix (not allow to be reordered)\n\t\t *  @property fixed\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\t\"fixed\": 0,\n\n\t\t/**\n\t\t * Number of columns to fix counting from right (not allow to be reordered)\n\t\t *  @property fixedRight\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\t\"fixedRight\": 0,\n\n\t\t/**\n\t\t * Callback function for once the reorder has been done\n\t\t *  @property reorderCallback\n\t\t *  @type     function\n\t\t *  @default  null\n\t\t */\n\t\t\"reorderCallback\": null,\n\n\t\t/**\n\t\t * @namespace Information used for the mouse drag\n\t\t */\n\t\t\"mouse\": {\n\t\t\t\"startX\": -1,\n\t\t\t\"startY\": -1,\n\t\t\t\"offsetX\": -1,\n\t\t\t\"offsetY\": -1,\n\t\t\t\"target\": -1,\n\t\t\t\"targetIndex\": -1,\n\t\t\t\"fromIndex\": -1\n\t\t},\n\n\t\t/**\n\t\t * Information which is used for positioning the insert cusor and knowing where to do the\n\t\t * insert. Array of objects with the properties:\n\t\t *   x: x-axis position\n\t\t *   to: insert point\n\t\t *  @property aoTargets\n\t\t *  @type     array\n\t\t *  @default  []\n\t\t */\n\t\t\"aoTargets\": []\n\t};\n\n\n\t/**\n\t * @namespace Common and useful DOM elements for the class instance\n\t */\n\tthis.dom = {\n\t\t/**\n\t\t * Dragging element (the one the mouse is moving)\n\t\t *  @property drag\n\t\t *  @type     element\n\t\t *  @default  null\n\t\t */\n\t\t\"drag\": null,\n\n\t\t/**\n\t\t * The insert cursor\n\t\t *  @property pointer\n\t\t *  @type     element\n\t\t *  @default  null\n\t\t */\n\t\t\"pointer\": null\n\t};\n\n\t/* Constructor logic */\n\tthis.s.enable = this.s.init.bEnable;\n\tthis.s.dt = settings;\n\tthis.s.dt._colReorder = this;\n\tthis._fnConstruct();\n\n\treturn this;\n};\n\n\n\n$.extend( ColReorder.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Enable / disable end user interaction\n\t */\n\tfnEnable: function ( flag )\n\t{\n\t\tif ( flag === false ) {\n\t\t\treturn this.fnDisable();\n\t\t}\n\n\t\tthis.s.enable = true;\n\t},\n\n\t/**\n\t * Disable end user interaction\n\t */\n\tfnDisable: function ()\n\t{\n\t\tthis.s.enable = false;\n\t},\n\n\t/**\n\t * Reset the column ordering to the original ordering that was detected on\n\t * start up.\n\t *  @return {this} Returns `this` for chaining.\n\t *\n\t *  @example\n\t *    // DataTables initialisation with ColReorder\n\t *    var table = $('#example').dataTable( {\n\t *        \"sDom\": 'Rlfrtip'\n\t *    } );\n\t *\n\t *    // Add click event to a button to reset the ordering\n\t *    $('#resetOrdering').click( function (e) {\n\t *        e.preventDefault();\n\t *        $.fn.dataTable.ColReorder( table ).fnReset();\n\t *    } );\n\t */\n\t\"fnReset\": function ()\n\t{\n\t\tthis._fnOrderColumns( this.fnOrder() );\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * `Deprecated` - Get the current order of the columns, as an array.\n\t *  @return {array} Array of column identifiers\n\t *  @deprecated `fnOrder` should be used in preference to this method.\n\t *      `fnOrder` acts as a getter/setter.\n\t */\n\t\"fnGetCurrentOrder\": function ()\n\t{\n\t\treturn this.fnOrder();\n\t},\n\n\t/**\n\t * Get the current order of the columns, as an array. Note that the values\n\t * given in the array are unique identifiers for each column. Currently\n\t * these are the original ordering of the columns that was detected on\n\t * start up, but this could potentially change in future.\n\t *  @return {array} Array of column identifiers\n\t *\n\t *  @example\n\t *    // Get column ordering for the table\n\t *    var order = $.fn.dataTable.ColReorder( dataTable ).fnOrder();\n\t *//**\n\t * Set the order of the columns, from the positions identified in the\n\t * ordering array given. Note that ColReorder takes a brute force approach\n\t * to reordering, so it is possible multiple reordering events will occur\n\t * before the final order is settled upon.\n\t *  @param {array} [set] Array of column identifiers in the new order. Note\n\t *    that every column must be included, uniquely, in this array.\n\t *  @return {this} Returns `this` for chaining.\n\t *\n\t *  @example\n\t *    // Swap the first and second columns\n\t *    $.fn.dataTable.ColReorder( dataTable ).fnOrder( [1, 0, 2, 3, 4] );\n\t *\n\t *  @example\n\t *    // Move the first column to the end for the table `#example`\n\t *    var curr = $.fn.dataTable.ColReorder( '#example' ).fnOrder();\n\t *    var first = curr.shift();\n\t *    curr.push( first );\n\t *    $.fn.dataTable.ColReorder( '#example' ).fnOrder( curr );\n\t *\n\t *  @example\n\t *    // Reverse the table's order\n\t *    $.fn.dataTable.ColReorder( '#example' ).fnOrder(\n\t *      $.fn.dataTable.ColReorder( '#example' ).fnOrder().reverse()\n\t *    );\n\t */\n\t\"fnOrder\": function ( set, original )\n\t{\n\t\tvar a = [], i, ien, j, jen;\n\t\tvar columns = this.s.dt.aoColumns;\n\n\t\tif ( set === undefined ){\n\t\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\t\ta.push( columns[i]._ColReorder_iOrigCol );\n\t\t\t}\n\n\t\t\treturn a;\n\t\t}\n\n\t\t// The order given is based on the original indexes, rather than the\n\t\t// existing ones, so we need to translate from the original to current\n\t\t// before then doing the order\n\t\tif ( original ) {\n\t\t\tvar order = this.fnOrder();\n\n\t\t\tfor ( i=0, ien=set.length ; i<ien ; i++ ) {\n\t\t\t\ta.push( $.inArray( set[i], order ) );\n\t\t\t}\n\n\t\t\tset = a;\n\t\t}\n\n\t\tthis._fnOrderColumns( fnInvertKeyValues( set ) );\n\n\t\treturn this;\n\t},\n\n\n\t/**\n\t * Convert from the original column index, to the original\n\t *\n\t * @param  {int|array} idx Index(es) to convert\n\t * @param  {string} dir Transpose direction - `fromOriginal` / `toCurrent`\n\t *   or `'toOriginal` / `fromCurrent`\n\t * @return {int|array}     Converted values\n\t */\n\tfnTranspose: function ( idx, dir )\n\t{\n\t\tif ( ! dir ) {\n\t\t\tdir = 'toCurrent';\n\t\t}\n\n\t\tvar order = this.fnOrder();\n\t\tvar columns = this.s.dt.aoColumns;\n\n\t\tif ( dir === 'toCurrent' ) {\n\t\t\t// Given an original index, want the current\n\t\t\treturn ! Array.isArray( idx ) ?\n\t\t\t\t$.inArray( idx, order ) :\n\t\t\t\t$.map( idx, function ( index ) {\n\t\t\t\t\treturn $.inArray( index, order );\n\t\t\t\t} );\n\t\t}\n\t\telse {\n\t\t\t// Given a current index, want the original\n\t\t\treturn ! Array.isArray( idx ) ?\n\t\t\t\tcolumns[idx]._ColReorder_iOrigCol :\n\t\t\t\t$.map( idx, function ( index ) {\n\t\t\t\t\treturn columns[index]._ColReorder_iOrigCol;\n\t\t\t\t} );\n\t\t}\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods (they are of course public in JS, but recommended as private)\n\t * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\t/**\n\t * Constructor logic\n\t *  @method  _fnConstruct\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnConstruct\": function ()\n\t{\n\t\tvar that = this;\n\t\tvar iLen = this.s.dt.aoColumns.length;\n\t\tvar table = this.s.dt.nTable;\n\t\tvar i;\n\n\t\t/* Columns discounted from reordering - counting left to right */\n\t\tif ( this.s.init.iFixedColumns )\n\t\t{\n\t\t\tthis.s.fixed = this.s.init.iFixedColumns;\n\t\t}\n\n\t\tif ( this.s.init.iFixedColumnsLeft )\n\t\t{\n\t\t\tthis.s.fixed = this.s.init.iFixedColumnsLeft;\n\t\t}\n\n\t\t/* Columns discounted from reordering - counting right to left */\n\t\tthis.s.fixedRight = this.s.init.iFixedColumnsRight ?\n\t\t\tthis.s.init.iFixedColumnsRight :\n\t\t\t0;\n\n\t\t/* Drop callback initialisation option */\n\t\tif ( this.s.init.fnReorderCallback )\n\t\t{\n\t\t\tthis.s.reorderCallback = this.s.init.fnReorderCallback;\n\t\t}\n\n\t\t/* Add event handlers for the drag and drop, and also mark the original column order */\n\t\tfor ( i = 0; i < iLen; i++ )\n\t\t{\n\t\t\tif ( i > this.s.fixed-1 && i < iLen - this.s.fixedRight )\n\t\t\t{\n\t\t\t\tthis._fnMouseListener( i, this.s.dt.aoColumns[i].nTh );\n\t\t\t}\n\n\t\t\t/* Mark the original column order for later reference */\n\t\t\tthis.s.dt.aoColumns[i]._ColReorder_iOrigCol = i;\n\t\t}\n\n\t\t/* State saving */\n\t\tthis.s.dt.oApi._fnCallbackReg( this.s.dt, 'aoStateSaveParams', function (oS, oData) {\n\t\t\tthat._fnStateSave.call( that, oData );\n\t\t}, \"ColReorder_State\" );\n\n\t\tthis.s.dt.oApi._fnCallbackReg(this.s.dt, 'aoStateLoadParams', function(oS, oData) {\n\t\t\tthat.s.dt._colReorder.fnOrder(oData.ColReorder, true);\n\t\t})\n\n\t\t/* An initial column order has been specified */\n\t\tvar aiOrder = null;\n\t\tif ( this.s.init.aiOrder )\n\t\t{\n\t\t\taiOrder = this.s.init.aiOrder.slice();\n\t\t}\n\n\t\t/* State loading, overrides the column order given */\n\t\tif ( this.s.dt.oLoadedState && typeof this.s.dt.oLoadedState.ColReorder != 'undefined' &&\n\t\t  this.s.dt.oLoadedState.ColReorder.length == this.s.dt.aoColumns.length )\n\t\t{\n\t\t\taiOrder = this.s.dt.oLoadedState.ColReorder;\n\t\t}\n\n\t\t/* If we have an order to apply - do so */\n\t\tif ( aiOrder )\n\t\t{\n\t\t\t/* We might be called during or after the DataTables initialisation. If before, then we need\n\t\t\t * to wait until the draw is done, if after, then do what we need to do right away\n\t\t\t */\n\t\t\tif ( !that.s.dt._bInitComplete )\n\t\t\t{\n\t\t\t\tvar bDone = false;\n\t\t\t\t$(table).on( 'draw.dt.colReorder', function () {\n\t\t\t\t\tif ( !that.s.dt._bInitComplete && !bDone )\n\t\t\t\t\t{\n\t\t\t\t\t\tbDone = true;\n\t\t\t\t\t\tvar resort = fnInvertKeyValues( aiOrder );\n\t\t\t\t\t\tthat._fnOrderColumns.call( that, resort );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvar resort = fnInvertKeyValues( aiOrder );\n\t\t\t\tthat._fnOrderColumns.call( that, resort );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis._fnSetColumnIndexes();\n\t\t}\n\n\t\t// Destroy clean up\n\t\t$(table).on( 'destroy.dt.colReorder', function () {\n\t\t\t// Restore table to original order from when it was loaded\n\t\t\tthat.fnReset();\n\n\t\t\t$(table).off( 'destroy.dt.colReorder draw.dt.colReorder' );\n\n\t\t\t$.each( that.s.dt.aoColumns, function (i, column) {\n\t\t\t\t$(column.nTh).off('.ColReorder');\n\t\t\t\t$(column.nTh).removeAttr('data-column-index');\n\t\t\t} );\n\n\t\t\tthat.s.dt._colReorder = null;\n\t\t\tthat.s = null;\n\t\t} );\n\t},\n\n\n\t/**\n\t * Set the column order from an array\n\t *  @method  _fnOrderColumns\n\t *  @param   array a An array of integers which dictate the column order that should be applied\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnOrderColumns\": function ( a )\n\t{\n\t\tvar changed = false;\n\n\t\tif ( a.length != this.s.dt.aoColumns.length )\n\t\t{\n\t\t\tthis.s.dt.oInstance.oApi._fnLog( this.s.dt, 1, \"ColReorder - array reorder does not \"+\n\t\t\t\t\"match known number of columns. Skipping.\" );\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar currIndex = $.inArray( i, a );\n\t\t\tif ( i != currIndex )\n\t\t\t{\n\t\t\t\t/* Reorder our switching array */\n\t\t\t\tfnArraySwitch( a, currIndex, i );\n\n\t\t\t\t/* Do the column reorder in the table */\n\t\t\t\tthis.s.dt.oInstance.fnColReorder( currIndex, i, true, false );\n\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t}\n\n\t\tthis._fnSetColumnIndexes();\n\n\t\t// Has anything actually changed? If not, then nothing else to do\n\t\tif ( ! changed ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$.fn.dataTable.Api( this.s.dt ).rows().invalidate('data');\n\n\t\t/* When scrolling we need to recalculate the column sizes to allow for the shift */\n\t\tif ( this.s.dt.oScroll.sX !== \"\" || this.s.dt.oScroll.sY !== \"\" )\n\t\t{\n\t\t\tthis.s.dt.oInstance.fnAdjustColumnSizing( false );\n\t\t}\n\n\t\t/* Save the state */\n\t\tthis.s.dt.oInstance.oApi._fnSaveState( this.s.dt );\n\n\t\tif ( this.s.reorderCallback !== null )\n\t\t{\n\t\t\tthis.s.reorderCallback.call( this );\n\t\t}\n\t},\n\n\n\t/**\n\t * Because we change the indexes of columns in the table, relative to their starting point\n\t * we need to reorder the state columns to what they are at the starting point so we can\n\t * then rearrange them again on state load!\n\t *  @method  _fnStateSave\n\t *  @param   object oState DataTables state\n\t *  @returns string JSON encoded cookie string for DataTables\n\t *  @private\n\t */\n\t\"_fnStateSave\": function ( oState )\n\t{\n\t\tif(this.s === null) {\n\t\t\treturn;\n\t\t}\n\t\tvar i, iLen, aCopy, iOrigColumn;\n\t\tvar oSettings = this.s.dt;\n\t\tvar columns = oSettings.aoColumns;\n\n\t\toState.ColReorder = [];\n\n\t\t/* Sorting */\n\t\tif ( oState.aaSorting ) {\n\t\t\t// 1.10.0-\n\t\t\tfor ( i=0 ; i<oState.aaSorting.length ; i++ ) {\n\t\t\t\toState.aaSorting[i][0] = columns[ oState.aaSorting[i][0] ]._ColReorder_iOrigCol;\n\t\t\t}\n\n\t\t\tvar aSearchCopy = $.extend( true, [], oState.aoSearchCols );\n\n\t\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tiOrigColumn = columns[i]._ColReorder_iOrigCol;\n\n\t\t\t\t/* Column filter */\n\t\t\t\toState.aoSearchCols[ iOrigColumn ] = aSearchCopy[i];\n\n\t\t\t\t/* Visibility */\n\t\t\t\toState.abVisCols[ iOrigColumn ] = columns[i].bVisible;\n\n\t\t\t\t/* Column reordering */\n\t\t\t\toState.ColReorder.push( iOrigColumn );\n\t\t\t}\n\t\t}\n\t\telse if ( oState.order ) {\n\t\t\t// 1.10.1+\n\t\t\tfor ( i=0 ; i<oState.order.length ; i++ ) {\n\t\t\t\toState.order[i][0] = columns[ oState.order[i][0] ]._ColReorder_iOrigCol;\n\t\t\t}\n\n\t\t\tvar stateColumnsCopy = $.extend( true, [], oState.columns );\n\n\t\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tiOrigColumn = columns[i]._ColReorder_iOrigCol;\n\n\t\t\t\t/* Columns */\n\t\t\t\toState.columns[ iOrigColumn ] = stateColumnsCopy[i];\n\n\t\t\t\t/* Column reordering */\n\t\t\t\toState.ColReorder.push( iOrigColumn );\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Mouse drop and drag\n\t */\n\n\t/**\n\t * Add a mouse down listener to a particluar TH element\n\t *  @method  _fnMouseListener\n\t *  @param   int i Column index\n\t *  @param   element nTh TH element clicked on\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnMouseListener\": function ( i, nTh )\n\t{\n\t\tvar that = this;\n\t\t$(nTh)\n\t\t\t.on( 'mousedown.ColReorder', function (e) {\n\t\t\t\tif ( that.s.enable && e.which === 1 ) {\n\t\t\t\t\tthat._fnMouseDown.call( that, e, nTh );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'touchstart.ColReorder', function (e) {\n\t\t\t\tif ( that.s.enable ) {\n\t\t\t\t\tthat._fnMouseDown.call( that, e, nTh );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\n\n\t/**\n\t * Mouse down on a TH element in the table header\n\t *  @method  _fnMouseDown\n\t *  @param   event e Mouse event\n\t *  @param   element nTh TH element to be dragged\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnMouseDown\": function ( e, nTh )\n\t{\n\t\tvar that = this;\n\n\t\t/* Store information about the mouse position */\n\t\tvar target = $(e.target).closest('th, td');\n\t\tvar offset = target.offset();\n\t\tvar idx = parseInt( $(nTh).attr('data-column-index'), 10 );\n\n\t\tif ( idx === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.s.mouse.startX = this._fnCursorPosition( e, 'pageX' );\n\t\tthis.s.mouse.startY = this._fnCursorPosition( e, 'pageY' );\n\t\tthis.s.mouse.offsetX = this._fnCursorPosition( e, 'pageX' ) - offset.left;\n\t\tthis.s.mouse.offsetY = this._fnCursorPosition( e, 'pageY' ) - offset.top;\n\t\tthis.s.mouse.target = this.s.dt.aoColumns[ idx ].nTh;//target[0];\n\t\tthis.s.mouse.targetIndex = idx;\n\t\tthis.s.mouse.fromIndex = idx;\n\n\t\tthis._fnRegions();\n\n\t\t/* Add event handlers to the document */\n\t\t$(document)\n\t\t\t.on( 'mousemove.ColReorder touchmove.ColReorder', function (e) {\n\t\t\t\tthat._fnMouseMove.call( that, e );\n\t\t\t} )\n\t\t\t.on( 'mouseup.ColReorder touchend.ColReorder', function (e) {\n\t\t\t\tthat._fnMouseUp.call( that, e );\n\t\t\t} );\n\t},\n\n\n\t/**\n\t * Deal with a mouse move event while dragging a node\n\t *  @method  _fnMouseMove\n\t *  @param   event e Mouse event\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnMouseMove\": function ( e )\n\t{\n\t\tvar that = this;\n\n\t\tif ( this.dom.drag === null )\n\t\t{\n\t\t\t/* Only create the drag element if the mouse has moved a specific distance from the start\n\t\t\t * point - this allows the user to make small mouse movements when sorting and not have a\n\t\t\t * possibly confusing drag element showing up\n\t\t\t */\n\t\t\tif ( Math.pow(\n\t\t\t\tMath.pow(this._fnCursorPosition( e, 'pageX') - this.s.mouse.startX, 2) +\n\t\t\t\tMath.pow(this._fnCursorPosition( e, 'pageY') - this.s.mouse.startY, 2), 0.5 ) < 5 )\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._fnCreateDragNode();\n\t\t}\n\n\t\t/* Position the element - we respect where in the element the click occured */\n\t\tthis.dom.drag.css( {\n\t\t\tleft: this._fnCursorPosition( e, 'pageX' ) - this.s.mouse.offsetX,\n\t\t\ttop: this._fnCursorPosition( e, 'pageY' ) - this.s.mouse.offsetY\n\t\t} );\n\n\t\t/* Based on the current mouse position, calculate where the insert should go */\n\t\tvar target;\n\t\tvar lastToIndex = this.s.mouse.toIndex;\n\t\tvar cursorXPosiotion = this._fnCursorPosition(e, 'pageX');\n\t\tvar targetsPrev = function (i) {\n\t\t\twhile (i >= 0) {\n\t\t\t\ti--;\n\n\t\t\t\tif (i <= 0) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (that.s.aoTargets[i+1].x !== that.s.aoTargets[i].x) {\n\t\t\t\t\treturn that.s.aoTargets[i];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tvar firstNotHidden = function () {\n\t\t\tfor (var i=0 ; i<that.s.aoTargets.length-1 ; i++) {\n\t\t\t\tif (that.s.aoTargets[i].x !== that.s.aoTargets[i+1].x) {\n\t\t\t\t\treturn that.s.aoTargets[i];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tvar lastNotHidden = function () {\n\t\t\tfor (var i=that.s.aoTargets.length-1 ; i>0 ; i--) {\n\t\t\t\tif (that.s.aoTargets[i].x !== that.s.aoTargets[i-1].x) {\n\t\t\t\t\treturn that.s.aoTargets[i];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n        for (var i = 1; i < this.s.aoTargets.length; i++) {\n\t\t\tvar prevTarget = targetsPrev(i);\n\t\t\tif (! prevTarget) {\n\t\t\t\tprevTarget = firstNotHidden();\n\t\t\t}\n\n\t\t\tvar prevTargetMiddle = prevTarget.x + (this.s.aoTargets[i].x - prevTarget.x) / 2;\n\n            if (this._fnIsLtr()) {\n                if (cursorXPosiotion < prevTargetMiddle ) {\n                    target = prevTarget;\n                    break;\n                }\n            }\n            else {\n                if (cursorXPosiotion > prevTargetMiddle) {\n                    target = prevTarget;\n                    break;\n                }\n            }\n\t\t}\n\n        if (target) {\n            this.dom.pointer.css('left', target.x);\n            this.s.mouse.toIndex = target.to;\n        }\n        else {\n\t\t\t// The insert element wasn't positioned in the array (less than\n\t\t\t// operator), so we put it at the end\n\t\t\tthis.dom.pointer.css( 'left', lastNotHidden().x );\n\t\t\tthis.s.mouse.toIndex = lastNotHidden().to;\n\t\t}\n\n\t\t// Perform reordering if realtime updating is on and the column has moved\n\t\tif ( this.s.init.bRealtime && lastToIndex !== this.s.mouse.toIndex ) {\n\t\t\tthis.s.dt.oInstance.fnColReorder( this.s.mouse.fromIndex, this.s.mouse.toIndex );\n\t\t\tthis.s.mouse.fromIndex = this.s.mouse.toIndex;\n\n\t\t\t// Not great for performance, but required to keep everything in alignment\n\t\t\tif ( this.s.dt.oScroll.sX !== \"\" || this.s.dt.oScroll.sY !== \"\" )\n\t\t\t{\n\t\t\t\tthis.s.dt.oInstance.fnAdjustColumnSizing( false );\n\t\t\t}\n\n\t\t\tthis._fnRegions();\n\t\t}\n\t},\n\n\n\t/**\n\t * Finish off the mouse drag and insert the column where needed\n\t *  @method  _fnMouseUp\n\t *  @param   event e Mouse event\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnMouseUp\": function ( e )\n\t{\n\t\tvar that = this;\n\n\t\t$(document).off( '.ColReorder' );\n\n\t\tif ( this.dom.drag !== null )\n\t\t{\n\t\t\t/* Remove the guide elements */\n\t\t\tthis.dom.drag.remove();\n\t\t\tthis.dom.pointer.remove();\n\t\t\tthis.dom.drag = null;\n\t\t\tthis.dom.pointer = null;\n\n\t\t\t/* Actually do the reorder */\n\t\t\tthis.s.dt.oInstance.fnColReorder( this.s.mouse.fromIndex, this.s.mouse.toIndex, true );\n\t\t\tthis._fnSetColumnIndexes();\n\n\t\t\t/* When scrolling we need to recalculate the column sizes to allow for the shift */\n\t\t\tif ( this.s.dt.oScroll.sX !== \"\" || this.s.dt.oScroll.sY !== \"\" )\n\t\t\t{\n\t\t\t\tthis.s.dt.oInstance.fnAdjustColumnSizing( false );\n\t\t\t}\n\n\t\t\t/* Save the state */\n\t\t\tthis.s.dt.oInstance.oApi._fnSaveState( this.s.dt );\n\n\t\t\tif ( this.s.reorderCallback !== null )\n\t\t\t{\n\t\t\t\tthis.s.reorderCallback.call( this );\n\t\t\t}\n\t\t}\n\t},\n\n\n\t/**\n\t * Calculate a cached array with the points of the column inserts, and the\n\t * 'to' points\n\t *  @method  _fnRegions\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnRegions\": function ()\n\t{\n\t\tvar aoColumns = this.s.dt.aoColumns;\n        var isLTR = this._fnIsLtr();\n\t\tthis.s.aoTargets.splice(0, this.s.aoTargets.length);\n\t\tvar lastBound = $(this.s.dt.nTable).offset().left;\n\n        var aoColumnBounds = [];\n        $.each(aoColumns, function (i, column) {\n            if (column.bVisible && column.nTh.style.display !== 'none') {\n                var nth = $(column.nTh);\n\t\t\t\tvar bound = nth.offset().left;\n\n                if (isLTR) {\n                    bound += nth.outerWidth();\n                }\n\n                aoColumnBounds.push({\n                    index: i,\n                    bound: bound\n\t\t\t\t});\n\n\t\t\t\tlastBound = bound;\n\t\t\t}\n\t\t\telse {\n                aoColumnBounds.push({\n\t\t\t\t\tindex: i,\n\t\t\t\t\tbound: lastBound\n                });\n\t\t\t}\n\t\t});\n\n        var firstColumn = aoColumnBounds[0];\n\t\tvar firstColumnWidth = $(aoColumns[firstColumn.index].nTh).outerWidth();\n\n        this.s.aoTargets.push({\n            to: 0,\n\t\t\tx: firstColumn.bound - firstColumnWidth\n        });\n\n        for (var i = 0; i < aoColumnBounds.length; i++) {\n            var columnBound = aoColumnBounds[i];\n            var iToPoint = columnBound.index;\n\n            /* For the column / header in question, we want it's position to remain the same if the\n            * position is just to it's immediate left or right, so we only increment the counter for\n            * other columns\n            */\n            if (columnBound.index < this.s.mouse.fromIndex) {\n                iToPoint++;\n            }\n\n            this.s.aoTargets.push({\n\t\t\t\tto: iToPoint,\n                x: columnBound.bound\n            });\n        }\n\n\t\t/* Disallow columns for being reordered by drag and drop, counting right to left */\n\t\tif ( this.s.fixedRight !== 0 )\n\t\t{\n\t\t\tthis.s.aoTargets.splice( this.s.aoTargets.length - this.s.fixedRight );\n\t\t}\n\n\t\t/* Disallow columns for being reordered by drag and drop, counting left to right */\n\t\tif ( this.s.fixed !== 0 )\n\t\t{\n\t\t\tthis.s.aoTargets.splice( 0, this.s.fixed );\n\t\t}\n\t},\n\n\n\t/**\n\t * Copy the TH element that is being drags so the user has the idea that they are actually\n\t * moving it around the page.\n\t *  @method  _fnCreateDragNode\n\t *  @returns void\n\t *  @private\n\t */\n\t\"_fnCreateDragNode\": function ()\n\t{\n\t\tvar scrolling = this.s.dt.oScroll.sX !== \"\" || this.s.dt.oScroll.sY !== \"\";\n\n\t\tvar origCell = this.s.dt.aoColumns[ this.s.mouse.targetIndex ].nTh;\n\t\tvar origTr = origCell.parentNode;\n\t\tvar origThead = origTr.parentNode;\n\t\tvar origTable = origThead.parentNode;\n\t\tvar cloneCell = $(origCell).clone();\n\n\t\t// This is a slightly odd combination of jQuery and DOM, but it is the\n\t\t// fastest and least resource intensive way I could think of cloning\n\t\t// the table with just a single header cell in it.\n\t\tthis.dom.drag = $(origTable.cloneNode(false))\n\t\t\t.addClass( 'DTCR_clonedTable' )\n\t\t\t.append(\n\t\t\t\t$(origThead.cloneNode(false)).append(\n\t\t\t\t\t$(origTr.cloneNode(false)).append(\n\t\t\t\t\t\tcloneCell[0]\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.css( {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: $(origCell).outerWidth(),\n\t\t\t\theight: $(origCell).outerHeight()\n\t\t\t} )\n\t\t\t.appendTo( 'body' );\n\n\t\tthis.dom.pointer = $('<div></div>')\n\t\t\t.addClass( 'DTCR_pointer' )\n\t\t\t.css( {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: scrolling ?\n\t\t\t\t\t$($(this.s.dt.nScrollBody).parent()).offset().top :\n\t\t\t\t\t$(this.s.dt.nTable).offset().top,\n\t\t\t\theight : scrolling ?\n\t\t\t\t\t$($(this.s.dt.nScrollBody).parent()).height() :\n\t\t\t\t\t$(this.s.dt.nTable).height()\n\t\t\t} )\n\t\t\t.appendTo( 'body' );\n\t},\n\n\n\t/**\n\t * Add a data attribute to the column headers, so we know the index of\n\t * the row to be reordered. This allows fast detection of the index, and\n\t * for this plug-in to work with FixedHeader which clones the nodes.\n\t *  @private\n\t */\n\t\"_fnSetColumnIndexes\": function ()\n\t{\n\t\t$.each( this.s.dt.aoColumns, function (i, column) {\n\t\t\t$(column.nTh).attr('data-column-index', i);\n\t\t} );\n\t},\n\n\n\t/**\n\t * Get cursor position regardless of mouse or touch input\n\t * @param  {Event}  e    jQuery Event\n\t * @param  {string} prop Property to get\n\t * @return {number}      Value\n\t */\n\t_fnCursorPosition: function ( e, prop ) {\n\t\tif ( e.type.indexOf('touch') !== -1 ) {\n\t\t\treturn e.originalEvent.touches[0][ prop ];\n\t\t}\n\t\treturn e[ prop ];\n    },\n\n    _fnIsLtr: function () {\n        return $(this.s.dt.nTable).css('direction') !== \"rtl\";\n    }\n} );\n\n\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Static parameters\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n\n/**\n * ColReorder default settings for initialisation\n *  @namespace\n *  @static\n */\nColReorder.defaults = {\n\t/**\n\t * Predefined ordering for the columns that will be applied automatically\n\t * on initialisation. If not specified then the order that the columns are\n\t * found to be in the HTML is the order used.\n\t *  @type array\n\t *  @default null\n\t *  @static\n\t */\n\taiOrder: null,\n\n\t/**\n\t * ColReorder enable on initialisation\n\t *  @type boolean\n\t *  @default true\n\t *  @static\n\t */\n\tbEnable: true,\n\n\t/**\n\t * Redraw the table's column ordering as the end user draws the column\n\t * (`true`) or wait until the mouse is released (`false` - default). Note\n\t * that this will perform a redraw on each reordering, which involves an\n\t * Ajax request each time if you are using server-side processing in\n\t * DataTables.\n\t *  @type boolean\n\t *  @default false\n\t *  @static\n\t */\n\tbRealtime: true,\n\n\t/**\n\t * Indicate how many columns should be fixed in position (counting from the\n\t * left). This will typically be 1 if used, but can be as high as you like.\n\t *  @type int\n\t *  @default 0\n\t *  @static\n\t */\n\tiFixedColumnsLeft: 0,\n\n\t/**\n\t * As `iFixedColumnsRight` but counting from the right.\n\t *  @type int\n\t *  @default 0\n\t *  @static\n\t */\n\tiFixedColumnsRight: 0,\n\n\t/**\n\t * Callback function that is fired when columns are reordered. The `column-\n\t * reorder` event is preferred over this callback\n\t *  @type function():void\n\t *  @default null\n\t *  @static\n\t */\n\tfnReorderCallback: null\n};\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * ColReorder version\n *  @constant  version\n *  @type      String\n *  @default   As code\n */\nColReorder.version = \"1.7.0\";\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables interfaces\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n// Expose\n$.fn.dataTable.ColReorder = ColReorder;\n$.fn.DataTable.ColReorder = ColReorder;\n\n\n// Register a new feature with DataTables\nif ( typeof $.fn.dataTable == \"function\" &&\n     typeof $.fn.dataTableExt.fnVersionCheck == \"function\" &&\n     $.fn.dataTableExt.fnVersionCheck('1.10.8') )\n{\n\t$.fn.dataTableExt.aoFeatures.push( {\n\t\t\"fnInit\": function( settings ) {\n\t\t\tvar table = settings.oInstance;\n\n\t\t\tif ( ! settings._colReorder ) {\n\t\t\t\tvar dtInit = settings.oInit;\n\t\t\t\tvar opts = dtInit.colReorder || dtInit.oColReorder || {};\n\n\t\t\t\tnew ColReorder( settings, opts );\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttable.oApi._fnLog( settings, 1, \"ColReorder attempted to initialise twice. Ignoring second\" );\n\t\t\t}\n\n\t\t\treturn null; /* No node for DataTables to insert */\n\t\t},\n\t\t\"cFeature\": \"R\",\n\t\t\"sFeature\": \"ColReorder\"\n\t} );\n}\nelse {\n\talert( \"Warning: ColReorder requires DataTables 1.10.8 or greater - www.datatables.net/download\");\n}\n\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on( 'preInit.dt.colReorder', function (e, settings) {\n\tif ( e.namespace !== 'dt' ) {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.colReorder;\n\tvar defaults = DataTable.defaults.colReorder;\n\n\tif ( init || defaults ) {\n\t\tvar opts = $.extend( {}, init, defaults );\n\n\t\tif ( init !== false ) {\n\t\t\tnew ColReorder( settings, opts  );\n\t\t}\n\t}\n} );\n\n\n// API augmentation\n$.fn.dataTable.Api.register( 'colReorder.reset()', function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\tctx._colReorder.fnReset();\n\t} );\n} );\n\n$.fn.dataTable.Api.register( 'colReorder.order()', function ( set, original ) {\n\tif ( set ) {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\tctx._colReorder.fnOrder( set, original );\n\t\t} );\n\t}\n\n\treturn this.context.length ?\n\t\tthis.context[0]._colReorder.fnOrder() :\n\t\tnull;\n} );\n\n$.fn.dataTable.Api.register( 'colReorder.transpose()', function ( idx, dir ) {\n\treturn this.context.length && this.context[0]._colReorder ?\n\t\tthis.context[0]._colReorder.fnTranspose( idx, dir ) :\n\t\tidx;\n} );\n\n$.fn.dataTable.Api.register( 'colReorder.move()', function( from, to, drop, invalidateRows ) {\n\tif (this.context.length) {\n\t\tthis.context[0]._colReorder.s.dt.oInstance.fnColReorder( from, to, drop, invalidateRows );\n\t\tthis.context[0]._colReorder._fnSetColumnIndexes();\n\t}\n\treturn this;\n} );\n\n$.fn.dataTable.Api.register( 'colReorder.enable()', function( flag ) {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\tif ( ctx._colReorder ) {\n\t\t\tctx._colReorder.fnEnable( flag );\n\t\t}\n\t} );\n} );\n\n$.fn.dataTable.Api.register( 'colReorder.disable()', function() {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\tif ( ctx._colReorder ) {\n\t\t\tctx._colReorder.fnDisable();\n\t\t}\n\t} );\n} );\n\n\nreturn DataTable;\n}));\n\n\n/*! DateTime picker for DataTables.net v1.5.1\n *\n * © SpryMedia Ltd, all rights reserved.\n * License: MIT datatables.net/license/mit\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\n\n\n\n/**\n * @summary     DateTime picker for DataTables.net\n * @version     1.5.1\n * @file        dataTables.dateTime.js\n * @author      SpryMedia Ltd\n * @contact     www.datatables.net/contact\n */\n\n// Supported formatting and parsing libraries:\n// * Moment\n// * Luxon\n// * DayJS\nvar dateLib;\n\n/*\n * This file provides a DateTime GUI picker (calendar and time input). Only the\n * format YYYY-MM-DD is supported without additional software, but the end user\n * experience can be greatly enhanced by including the momentjs, dayjs or luxon library\n * which provide date / time parsing and formatting options.\n *\n * This functionality is required because the HTML5 date and datetime input\n * types are not widely supported in desktop browsers.\n *\n * Constructed by using:\n *\n *     new DateTime( input, opts )\n *\n * where `input` is the HTML input element to use and `opts` is an object of\n * options based on the `DateTime.defaults` object.\n */\nvar DateTime = function ( input, opts ) {\n\t// Check if called with a window or jQuery object for DOM less applications\n\t// This is for backwards compatibility with CommonJS loader\n\tif (DateTime.factory(input, opts)) {\n\t\treturn DateTime;\n\t}\n\n\t// Attempt to auto detect the formatting library (if there is one). Having it in\n\t// the constructor allows load order independence.\n\tif (typeof dateLib === 'undefined') {\n\t\tdateLib = window.moment\n\t\t\t? window.moment\n\t\t\t: window.dayjs\n\t\t\t\t? window.dayjs\n\t\t\t\t: window.luxon\n\t\t\t\t\t? window.luxon\n\t\t\t\t\t: null;\n\t}\n\n\tthis.c = $.extend( true, {}, DateTime.defaults, opts );\n\tvar classPrefix = this.c.classPrefix;\n\tvar i18n = this.c.i18n;\n\n\t// Only IS8601 dates are supported without moment, dayjs or luxon\n\tif ( ! dateLib && this.c.format !== 'YYYY-MM-DD' ) {\n\t\tthrow \"DateTime: Without momentjs, dayjs or luxon only the format 'YYYY-MM-DD' can be used\";\n\t}\n\n\t// Min and max need to be `Date` objects in the config\n\tif (typeof this.c.minDate === 'string') {\n\t\tthis.c.minDate = new Date(this.c.minDate);\n\t}\n\tif (typeof this.c.maxDate === 'string') {\n\t\tthis.c.maxDate = new Date(this.c.maxDate);\n\t}\n\n\t// DOM structure\n\tvar structure = $(\n\t\t'<div class=\"'+classPrefix+'\">'+\n\t\t\t'<div class=\"'+classPrefix+'-date\">'+\n\t\t\t\t'<div class=\"'+classPrefix+'-title\">'+\n\t\t\t\t\t'<div class=\"'+classPrefix+'-iconLeft\">'+\n\t\t\t\t\t\t'<button type=\"button\"></button>'+\n\t\t\t\t\t'</div>'+\n\t\t\t\t\t'<div class=\"'+classPrefix+'-iconRight\">'+\n\t\t\t\t\t\t'<button type=\"button\"></button>'+\n\t\t\t\t\t'</div>'+\n\t\t\t\t\t'<div class=\"'+classPrefix+'-label\">'+\n\t\t\t\t\t\t'<span></span>'+\n\t\t\t\t\t\t'<select class=\"'+classPrefix+'-month\"></select>'+\n\t\t\t\t\t'</div>'+\n\t\t\t\t\t'<div class=\"'+classPrefix+'-label\">'+\n\t\t\t\t\t\t'<span></span>'+\n\t\t\t\t\t\t'<select class=\"'+classPrefix+'-year\"></select>'+\n\t\t\t\t\t'</div>'+\n\t\t\t\t'</div>'+\n\t\t\t\t'<div class=\"'+classPrefix+'-buttons\">'+\n\t\t\t\t\t'<a class=\"'+classPrefix+'-clear\"></a>'+\n\t\t\t\t\t'<a class=\"'+classPrefix+'-today\"></a>'+\n\t\t\t\t'</div>'+\n\t\t\t\t'<div class=\"'+classPrefix+'-calendar\"></div>'+\n\t\t\t'</div>'+\n\t\t\t'<div class=\"'+classPrefix+'-time\">'+\n\t\t\t\t'<div class=\"'+classPrefix+'-hours\"></div>'+\n\t\t\t\t'<div class=\"'+classPrefix+'-minutes\"></div>'+\n\t\t\t\t'<div class=\"'+classPrefix+'-seconds\"></div>'+\n\t\t\t'</div>'+\n\t\t\t'<div class=\"'+classPrefix+'-error\"></div>'+\n\t\t'</div>'\n\t);\n\n\tthis.dom = {\n\t\tcontainer: structure,\n\t\tdate:      structure.find( '.'+classPrefix+'-date' ),\n\t\ttitle:     structure.find( '.'+classPrefix+'-title' ),\n\t\tcalendar:  structure.find( '.'+classPrefix+'-calendar' ),\n\t\ttime:      structure.find( '.'+classPrefix+'-time' ),\n\t\terror:     structure.find( '.'+classPrefix+'-error' ),\n\t\tbuttons:   structure.find( '.'+classPrefix+'-buttons' ),\n\t\tclear:     structure.find( '.'+classPrefix+'-clear' ),\n\t\ttoday:     structure.find( '.'+classPrefix+'-today' ),\n\t\tprevious:  structure.find( '.'+classPrefix+'-iconLeft' ),\n\t\tnext:      structure.find( '.'+classPrefix+'-iconRight' ),\n\t\tinput:     $(input)\n\t};\n\n\tthis.s = {\n\t\t/** @type {Date} Date value that the picker has currently selected */\n\t\td: null,\n\n\t\t/** @type {Date} Date of the calendar - might not match the value */\n\t\tdisplay: null,\n\n\t\t/** @type {number} Used to select minutes in a range where the range base is itself unavailable */\n\t\tminutesRange: null,\n\n\t\t/** @type {number} Used to select minutes in a range where the range base is itself unavailable */\n\t\tsecondsRange: null,\n\n\t\t/** @type {String} Unique namespace string for this instance */\n\t\tnamespace: 'dateime-'+(DateTime._instance++),\n\n\t\t/** @type {Object} Parts of the picker that should be shown */\n\t\tparts: {\n\t\t\tdate:    this.c.format.match( /[YMD]|L(?!T)|l/ ) !== null,\n\t\t\ttime:    this.c.format.match( /[Hhm]|LT|LTS/ ) !== null,\n\t\t\tseconds: this.c.format.indexOf( 's' )   !== -1,\n\t\t\thours12: this.c.format.match( /[haA]/ ) !== null\n\t\t}\n\t};\n\n\tthis.dom.container\n\t\t.append( this.dom.date )\n\t\t.append( this.dom.time )\n\t\t.append( this.dom.error );\n\n\tthis.dom.date\n\t\t.append( this.dom.title )\n\t\t.append( this.dom.buttons )\n\t\t.append( this.dom.calendar );\n\n\tthis.dom.input.addClass('dt-datetime');\n\n\tthis._constructor();\n};\n\n$.extend( DateTime.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public\n\t */\n\t\n\t/**\n\t * Destroy the control\n\t */\n\tdestroy: function () {\n\t\tthis._hide(true);\n\t\tthis.dom.container.off().empty();\n\t\tthis.dom.input\n\t\t\t.removeClass('dt-datetime')\n\t\t\t.removeAttr('autocomplete')\n\t\t\t.off('.datetime');\n\t},\n\n\tdisplay: function (year, month) {\n\t\tif (year !== undefined) {\n\t\t\tthis.s.display.setUTCFullYear(year);\n\t\t}\n\n\t\tif (month !== undefined) {\n\t\t\tthis.s.display.setUTCMonth(month - 1);\n\t\t}\n\n\t\tif (year !== undefined || month !== undefined) {\n\t\t\tthis._setTitle();\n\t\t\tthis._setCalander();\n\n\t\t\treturn this;\n\t\t}\n\n\t\treturn {\n\t\t\tmonth: this.s.display.getUTCMonth() + 1,\n\t\t\tyear: this.s.display.getUTCFullYear()\n\t\t};\n\t},\n\n\terrorMsg: function ( msg ) {\n\t\tvar error = this.dom.error;\n\n\t\tif ( msg ) {\n\t\t\terror.html( msg );\n\t\t}\n\t\telse {\n\t\t\terror.empty();\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thide: function () {\n\t\tthis._hide();\n\n\t\treturn this;\n\t},\n\n\tmax: function ( date ) {\n\t\tthis.c.maxDate = typeof date === 'string'\n\t\t\t? new Date(date)\n\t\t\t: date;\n\n\t\tthis._optionsTitle();\n\t\tthis._setCalander();\n\n\t\treturn this;\n\t},\n\n\tmin: function ( date ) {\n\t\tthis.c.minDate = typeof date === 'string'\n\t\t\t? new Date(date)\n\t\t\t: date;\n\n\t\tthis._optionsTitle();\n\t\tthis._setCalander();\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Check if an element belongs to this control\n\t *\n\t * @param  {node} node Element to check\n\t * @return {boolean}   true if owned by this control, false otherwise\n\t */\n\towns: function ( node ) {\n\t\treturn $(node).parents().filter( this.dom.container ).length > 0;\n\t},\n\n\t/**\n\t * Get / set the value\n\t *\n\t * @param  {string|Date} set   Value to set\n\t * @param  {boolean} [write=true] Flag to indicate if the formatted value\n\t *   should be written into the input element\n\t */\n\tval: function ( set, write ) {\n\t\tif ( set === undefined ) {\n\t\t\treturn this.s.d;\n\t\t}\n\n\t\tif ( set instanceof Date ) {\n\t\t\tthis.s.d = this._dateToUtc( set );\n\t\t}\n\t\telse if ( set === null || set === '' ) {\n\t\t\tthis.s.d = null;\n\t\t}\n\t\telse if ( set === '--now' ) {\n\t\t\tthis.s.d = this._dateToUtc(new Date());\n\t\t}\n\t\telse if ( typeof set === 'string' ) {\n\t\t\tthis.s.d = this._dateToUtc(\n\t\t\t\tthis._convert(set, this.c.format, null)\n\t\t\t);\n\t\t}\n\n\t\tif ( write || write === undefined ) {\n\t\t\tif ( this.s.d ) {\n\t\t\t\tthis._writeOutput();\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// The input value was not valid...\n\t\t\t\tthis.dom.input.val( set );\n\t\t\t}\n\t\t}\n\n\t\t// Need something to display\n\t\tthis.s.display = this.s.d\n\t\t\t? new Date( this.s.d.toString() )\n\t\t\t: new Date();\n\n\t\t// Set the day of the month to be 1 so changing between months doesn't\n        // run into issues when going from day 31 to 28 (for example)\n\t\tthis.s.display.setUTCDate( 1 );\n\n\t\t// Update the display elements for the new value\n\t\tthis._setTitle();\n\t\tthis._setCalander();\n\t\tthis._setTime();\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Similar to `val()` but uses a given date / time format\n\t *\n\t * @param format Format to get the data as (getter) or that is input (setter)\n\t * @param val Value to write (if undefined, used as a getter)\n\t * @returns \n\t */\n\tvalFormat: function (format, val) {\n\t\tif (! val) {\n\t\t\treturn this._convert(this.val(), null, format);\n\t\t}\n\n\t\t// Convert from the format given here to the instance's configured format\n\t\tthis.val(\n\t\t\tthis._convert(val, format, null)\n\t\t);\n\n\t\treturn this;\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\t\n\t/**\n\t * Build the control and assign initial event handlers\n\t *\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar classPrefix = this.c.classPrefix;\n\t\tvar last = this.dom.input.val();\n\n\t\tvar onChange = function () {\n\t\t\tvar curr = that.dom.input.val();\n\n\t\t\tif (curr !== last) {\n\t\t\t\tthat.c.onChange.call( that, curr, that.s.d, that.dom.input );\n\t\t\t\tlast = curr;\n\t\t\t}\n\t\t};\n\n\t\tif ( ! this.s.parts.date ) {\n\t\t\tthis.dom.date.css( 'display', 'none' );\n\t\t}\n\n\t\tif ( ! this.s.parts.time ) {\n\t\t\tthis.dom.time.css( 'display', 'none' );\n\t\t}\n\n\t\tif ( ! this.s.parts.seconds ) {\n\t\t\tthis.dom.time.children('div.'+classPrefix+'-seconds').remove();\n\t\t\tthis.dom.time.children('span').eq(1).remove();\n\t\t}\n\n\t\tif ( ! this.c.buttons.clear ) {\n\t\t\tthis.dom.clear.css( 'display', 'none' );\n\t\t}\n\n\t\tif ( ! this.c.buttons.today ) {\n\t\t\tthis.dom.today.css( 'display', 'none' );\n\t\t}\n\n\t\t// Render the options\n\t\tthis._optionsTitle();\n\n\t\t$(document).on('i18n.dt', function (e, settings) {\n\t\t\tif (settings.oLanguage.datetime) {\n\t\t\t\t$.extend(true, that.c.i18n, settings.oLanguage.datetime);\n\t\t\t\tthat._optionsTitle();\n\t\t\t}\n\t\t});\n\n\t\t// When attached to a hidden input, we always show the input picker, and\n\t\t// do so inline\n\t\tif (this.dom.input.attr('type') === 'hidden') {\n\t\t\tthis.dom.container.addClass('inline');\n\t\t\tthis.c.attachTo = 'input';\n\n\t\t\tthis.val( this.dom.input.val(), false );\n\t\t\tthis._show();\n\t\t}\n\n\t\t// Set the initial value\n\t\tif (last) {\n\t\t\tthis.val( last, false );\n\t\t}\n\n\t\t// Trigger the display of the widget when clicking or focusing on the\n\t\t// input element\n\t\tthis.dom.input\n\t\t\t.attr('autocomplete', 'off')\n\t\t\t.on('focus.datetime click.datetime', function () {\n\t\t\t\t// If already visible - don't do anything\n\t\t\t\tif ( that.dom.container.is(':visible') || that.dom.input.is(':disabled') ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// In case the value has changed by text\n\t\t\t\tthat.val( that.dom.input.val(), false );\n\n\t\t\t\tthat._show();\n\t\t\t} )\n\t\t\t.on('keyup.datetime', function () {\n\t\t\t\t// Update the calendar's displayed value as the user types\n\t\t\t\tif ( that.dom.container.is(':visible') ) {\n\t\t\t\t\tthat.val( that.dom.input.val(), false );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// Want to prevent the focus bubbling up the document to account for\n\t\t// focus capture in modals (e.g. Editor and Bootstrap). They can see\n\t\t// the focus as outside the modal and thus immediately blur focus on\n\t\t// the picker. Need to use a native addEL since jQuery changes the\n\t\t// focusin to focus for some reason! focusin bubbles, focus does not.\n\t\tthis.dom.container[0].addEventListener('focusin', function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\t// Main event handlers for input in the widget\n\t\tthis.dom.container\n\t\t\t.on( 'change', 'select', function () {\n\t\t\t\tvar select = $(this);\n\t\t\t\tvar val = select.val();\n\n\t\t\t\tif ( select.hasClass(classPrefix+'-month') ) {\n\t\t\t\t\t// Month select\n\t\t\t\t\tthat._correctMonth( that.s.display, val );\n\t\t\t\t\tthat._setTitle();\n\t\t\t\t\tthat._setCalander();\n\t\t\t\t}\n\t\t\t\telse if ( select.hasClass(classPrefix+'-year') ) {\n\t\t\t\t\t// Year select\n\t\t\t\t\tthat.s.display.setUTCFullYear( val );\n\t\t\t\t\tthat._setTitle();\n\t\t\t\t\tthat._setCalander();\n\t\t\t\t}\n\t\t\t\telse if ( select.hasClass(classPrefix+'-hours') || select.hasClass(classPrefix+'-ampm') ) {\n\t\t\t\t\t// Hours - need to take account of AM/PM input if present\n\t\t\t\t\tif ( that.s.parts.hours12 ) {\n\t\t\t\t\t\tvar hours = $(that.dom.container).find('.'+classPrefix+'-hours').val() * 1;\n\t\t\t\t\t\tvar pm = $(that.dom.container).find('.'+classPrefix+'-ampm').val() === 'pm';\n\n\t\t\t\t\t\tthat.s.d.setUTCHours( hours === 12 && !pm ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\tpm && hours !== 12 ?\n\t\t\t\t\t\t\t\thours + 12 :\n\t\t\t\t\t\t\t\thours\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthat.s.d.setUTCHours( val );\n\t\t\t\t\t}\n\n\t\t\t\t\tthat._setTime();\n\t\t\t\t\tthat._writeOutput( true );\n\n\t\t\t\t\tonChange();\n\t\t\t\t}\n\t\t\t\telse if ( select.hasClass(classPrefix+'-minutes') ) {\n\t\t\t\t\t// Minutes select\n\t\t\t\t\tthat.s.d.setUTCMinutes( val );\n\t\t\t\t\tthat._setTime();\n\t\t\t\t\tthat._writeOutput( true );\n\n\t\t\t\t\tonChange();\n\t\t\t\t}\n\t\t\t\telse if ( select.hasClass(classPrefix+'-seconds') ) {\n\t\t\t\t\t// Seconds select\n\t\t\t\t\tthat.s.d.setSeconds( val );\n\t\t\t\t\tthat._setTime();\n\t\t\t\t\tthat._writeOutput( true );\n\n\t\t\t\t\tonChange();\n\t\t\t\t}\n\n\t\t\t\tthat.dom.input.focus();\n\t\t\t\tthat._position();\n\t\t\t} )\n\t\t\t.on( 'click', function (e) {\n\t\t\t\tvar d = that.s.d;\n\t\t\t\tvar nodeName = e.target.nodeName.toLowerCase();\n\t\t\t\tvar target = nodeName === 'span' ?\n\t\t\t\t\te.target.parentNode :\n\t\t\t\t\te.target;\n\n\t\t\t\tnodeName = target.nodeName.toLowerCase();\n\n\t\t\t\tif ( nodeName === 'select' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\te.stopPropagation();\n\n\t\t\t\tif ( nodeName === 'a' ) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif ($(target).hasClass(classPrefix+'-clear')) {\n\t\t\t\t\t\t// Clear the value and don't change the display\n\t\t\t\t\t\tthat.s.d = null;\n\t\t\t\t\t\tthat.dom.input.val('');\n\t\t\t\t\t\tthat._writeOutput();\n\t\t\t\t\t\tthat._setCalander();\n\t\t\t\t\t\tthat._setTime();\n\n\t\t\t\t\t\tonChange();\n\t\t\t\t\t}\n\t\t\t\t\telse if ($(target).hasClass(classPrefix+'-today')) {\n\t\t\t\t\t\t// Don't change the value, but jump to the month\n\t\t\t\t\t\t// containing today\n\t\t\t\t\t\tthat.s.display = new Date();\n\n\t\t\t\t\t\tthat._setTitle();\n\t\t\t\t\t\tthat._setCalander();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( nodeName === 'button' ) {\n\t\t\t\t\tvar button = $(target);\n\t\t\t\t\tvar parent = button.parent();\n\n\t\t\t\t\tif ( parent.hasClass('disabled') && ! parent.hasClass('range') ) {\n\t\t\t\t\t\tbutton.blur();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( parent.hasClass(classPrefix+'-iconLeft') ) {\n\t\t\t\t\t\t// Previous month\n\t\t\t\t\t\tthat.s.display.setUTCMonth( that.s.display.getUTCMonth()-1 );\n\t\t\t\t\t\tthat._setTitle();\n\t\t\t\t\t\tthat._setCalander();\n\n\t\t\t\t\t\tthat.dom.input.focus();\n\t\t\t\t\t}\n\t\t\t\t\telse if ( parent.hasClass(classPrefix+'-iconRight') ) {\n\t\t\t\t\t\t// Next month\n\t\t\t\t\t\tthat._correctMonth( that.s.display, that.s.display.getUTCMonth()+1 );\n\t\t\t\t\t\tthat._setTitle();\n\t\t\t\t\t\tthat._setCalander();\n\n\t\t\t\t\t\tthat.dom.input.focus();\n\t\t\t\t\t}\n\t\t\t\t\telse if ( button.parents('.'+classPrefix+'-time').length ) {\n\t\t\t\t\t\tvar val = button.data('value');\n\t\t\t\t\t\tvar unit = button.data('unit');\n\n\t\t\t\t\t\td = that._needValue();\n\n\t\t\t\t\t\tif ( unit === 'minutes' ) {\n\t\t\t\t\t\t\tif ( parent.hasClass('disabled') && parent.hasClass('range') ) {\n\t\t\t\t\t\t\t\tthat.s.minutesRange = val;\n\t\t\t\t\t\t\t\tthat._setTime();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthat.s.minutesRange = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( unit === 'seconds' ) {\n\t\t\t\t\t\t\tif ( parent.hasClass('disabled') && parent.hasClass('range') ) {\n\t\t\t\t\t\t\t\tthat.s.secondsRange = val;\n\t\t\t\t\t\t\t\tthat._setTime();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthat.s.secondsRange = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Specific to hours for 12h clock\n\t\t\t\t\t\tif ( val === 'am' ) {\n\t\t\t\t\t\t\tif ( d.getUTCHours() >= 12 ) {\n\t\t\t\t\t\t\t\tval = d.getUTCHours() - 12;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( val === 'pm' ) {\n\t\t\t\t\t\t\tif ( d.getUTCHours() < 12 ) {\n\t\t\t\t\t\t\t\tval = d.getUTCHours() + 12;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar set = unit === 'hours' ?\n\t\t\t\t\t\t\t'setUTCHours' :\n\t\t\t\t\t\t\tunit === 'minutes' ?\n\t\t\t\t\t\t\t\t'setUTCMinutes' :\n\t\t\t\t\t\t\t\t'setSeconds';\n\n\t\t\t\t\t\td[set]( val );\n\t\t\t\t\t\tthat._setCalander();\n\t\t\t\t\t\tthat._setTime();\n\t\t\t\t\t\tthat._writeOutput( true );\n\t\t\t\t\t\tonChange();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Calendar click\n\t\t\t\t\t\td = that._needValue();\n\n\t\t\t\t\t\t// Can't be certain that the current day will exist in\n\t\t\t\t\t\t// the new month, and likewise don't know that the\n\t\t\t\t\t\t// new day will exist in the old month, But 1 always\n\t\t\t\t\t\t// does, so we can change the month without worry of a\n\t\t\t\t\t\t// recalculation being done automatically by `Date`\n\t\t\t\t\t\td.setUTCDate( 1 );\n\t\t\t\t\t\td.setUTCFullYear( button.data('year') );\n\t\t\t\t\t\td.setUTCMonth( button.data('month') );\n\t\t\t\t\t\td.setUTCDate( button.data('day') );\n\n\t\t\t\t\t\tthat._writeOutput( true );\n\n\t\t\t\t\t\t// Don't hide if there is a time picker, since we want to\n\t\t\t\t\t\t// be able to select a time as well.\n\t\t\t\t\t\tif ( ! that.s.parts.time ) {\n\t\t\t\t\t\t\t// This is annoying but IE has some kind of async\n\t\t\t\t\t\t\t// behaviour with focus and the focus from the above\n\t\t\t\t\t\t\t// write would occur after this hide - resulting in the\n\t\t\t\t\t\t\t// calendar opening immediately\n\t\t\t\t\t\t\tsetTimeout( function () {\n\t\t\t\t\t\t\t\tthat._hide();\n\t\t\t\t\t\t\t}, 10 );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthat._setCalander();\n\t\t\t\t\t\t\tthat._setTime();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Click anywhere else in the widget - return focus to the\n\t\t\t\t\t// input element\n\t\t\t\t\tthat.dom.input.focus();\n\t\t\t\t}\n\t\t\t} );\n\t},\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private\n\t */\n\n\t/**\n\t * Compare the date part only of two dates - this is made super easy by the\n\t * toDateString method!\n\t *\n\t * @param  {Date} a Date 1\n\t * @param  {Date} b Date 2\n\t * @private\n\t */\n\t_compareDates: function( a, b ) {\n\t\t// Can't use toDateString as that converts to local time\n\t\t// luxon uses different method names so need to be able to call them\n\t\treturn this._isLuxon()\n\t\t\t? dateLib.DateTime.fromJSDate(a).toUTC().toISODate() === dateLib.DateTime.fromJSDate(b).toUTC().toISODate()\n\t\t\t: this._dateToUtcString(a) === this._dateToUtcString(b);\n\t},\n\n\t/**\n\t * Convert from one format to another\n\t *\n\t * @param {string|Date} val Value \n\t * @param {string|null} from Format to convert from. If null a `Date` must be given\n\t * @param {string|null} to Format to convert to. If null a `Date` will be returned\n\t * @returns {string|Date} Converted value\n\t */\n\t_convert: function(val, from, to) {\n\t\tif (! val) {\n\t\t\treturn val;\n\t\t}\n\n\t\tif (! dateLib) {\n\t\t\t// Note that in here from and to can either be null or YYYY-MM-DD\n\t\t\t// They cannot be anything else\n\t\t\tif ((! from && ! to) || (from && to)) {\n\t\t\t\t// No conversion\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\telse if (! from) {\n\t\t\t\t// Date in, string back\n\t\t\t\treturn val.getUTCFullYear() +'-'+\n\t\t\t\t\tthis._pad(val.getUTCMonth() + 1) +'-'+\n\t\t\t\t\tthis._pad(val.getUTCDate());\n\t\t\t}\n\t\t\telse { // (! to)\n\t\t\t\t// String in, date back\n\t\t\t\tvar match = val.match(/(\\d{4})\\-(\\d{2})\\-(\\d{2})/ );\n\t\t\t\treturn match ?\n\t\t\t\t\tnew Date( match[1], match[2]-1, match[3] ) :\n\t\t\t\t\tnull;\n\t\t\t}\n\t\t}\n\t\telse if (this._isLuxon()) {\n\t\t\t// Luxon\n\t\t\tvar dtLux = val instanceof Date\n\t\t\t\t? dateLib.DateTime.fromJSDate(val).toUTC()\n\t\t\t\t: dateLib.DateTime.fromFormat(val, from);\n\n\t\t\tif (! dtLux.isValid) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn to\n\t\t\t\t? dtLux.toFormat(to)\n\t\t\t\t: dtLux.toJSDate();\n\t\t}\n\t\telse {\n\t\t\t// Moment / DayJS\n\t\t\tvar dtMo = val instanceof Date\n\t\t\t\t? dateLib.utc( val, undefined, this.c.locale, this.c.strict )\n\t\t\t\t: dateLib( val, from, this.c.locale, this.c.strict );\n\t\t\t\n\t\t\tif (! dtMo.isValid()) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn to\n\t\t\t\t? dtMo.format(to)\n\t\t\t\t: dtMo.toDate();\n\t\t}\n\t},\n\n\t/**\n\t * When changing month, take account of the fact that some months don't have\n\t * the same number of days. For example going from January to February you\n\t * can have the 31st of Jan selected and just add a month since the date\n\t * would still be 31, and thus drop you into March.\n\t *\n\t * @param  {Date} date  Date - will be modified\n\t * @param  {integer} month Month to set\n\t * @private\n\t */\n\t_correctMonth: function ( date, month ) {\n\t\tvar days = this._daysInMonth( date.getUTCFullYear(), month );\n\t\tvar correctDays = date.getUTCDate() > days;\n\n\t\tdate.setUTCMonth( month );\n\n\t\tif ( correctDays ) {\n\t\t\tdate.setUTCDate( days );\n\t\t\tdate.setUTCMonth( month );\n\t\t}\n\t},\n\n\t/**\n\t * Get the number of days in a method. Based on\n\t * http://stackoverflow.com/a/4881951 by Matti Virkkunen\n\t *\n\t * @param  {integer} year  Year\n\t * @param  {integer} month Month (starting at 0)\n\t * @private\n\t */\n\t_daysInMonth: function ( year, month ) {\n\t\t// \n\t\tvar isLeap = ((year % 4) === 0 && ((year % 100) !== 0 || (year % 400) === 0));\n\t\tvar months = [31, (isLeap ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n\t\treturn months[month];\n\t},\n\n\t/**\n\t * Create a new date object which has the UTC values set to the local time.\n\t * This allows the local time to be used directly for the library which\n\t * always bases its calculations and display on UTC.\n\t *\n\t * @param  {Date} s Date to \"convert\"\n\t * @return {Date}   Shifted date\n\t */\n\t_dateToUtc: function ( s ) {\n\t\tif (! s) {\n\t\t\treturn s;\n\t\t}\n\n\t\treturn new Date( Date.UTC(\n\t\t\ts.getFullYear(), s.getMonth(), s.getDate(),\n\t\t\ts.getHours(), s.getMinutes(), s.getSeconds()\n\t\t) );\n\t},\n\n\t/**\n\t * Create a UTC ISO8601 date part from a date object\n\t *\n\t * @param  {Date} d Date to \"convert\"\n\t * @return {string} ISO formatted date\n\t */\n\t_dateToUtcString: function ( d ) {\n\t\t// luxon uses different method names so need to be able to call them\n\t\treturn this._isLuxon()\n\t\t\t? dateLib.DateTime.fromJSDate(d).toUTC().toISODate()\n\t\t\t: d.getUTCFullYear()+'-'+\n\t\t\t\tthis._pad(d.getUTCMonth()+1)+'-'+\n\t\t\t\tthis._pad(d.getUTCDate());\n\t},\n\n\t/**\n\t * Hide the control and remove events related to its display\n\t *\n\t * @private\n\t */\n\t_hide: function (destroy) {\n\t\tif (! destroy && this.dom.input.attr('type') === 'hidden') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar namespace = this.s.namespace;\n\n\t\tthis.dom.container.detach();\n\n\t\t$(window).off( '.'+namespace );\n\t\t$(document).off( 'keydown.'+namespace );\n\t\t$('div.dataTables_scrollBody').off( 'scroll.'+namespace );\n\t\t$('div.DTE_Body_Content').off( 'scroll.'+namespace );\n\t\t$('body').off( 'click.'+namespace );\n\t\t$(this.dom.input[0].offsetParent).off('.'+namespace);\n\t},\n\n\t/**\n\t * Convert a 24 hour value to a 12 hour value\n\t *\n\t * @param  {integer} val 24 hour value\n\t * @return {integer}     12 hour value\n\t * @private\n\t */\n\t_hours24To12: function ( val ) {\n\t\treturn val === 0 ?\n\t\t\t12 :\n\t\t\tval > 12 ?\n\t\t\t\tval - 12 :\n\t\t\t\tval;\n\t},\n\n\t/**\n\t * Generate the HTML for a single day in the calendar - this is basically\n\t * and HTML cell with a button that has data attributes so we know what was\n\t * clicked on (if it is clicked on) and a bunch of classes for styling.\n\t *\n\t * @param  {object} day Day object from the `_htmlMonth` method\n\t * @return {string}     HTML cell\n\t */\n\t_htmlDay: function( day )\n\t{\n\t\tif ( day.empty ) {\n\t\t\treturn '<td class=\"empty\"></td>';\n\t\t}\n\n\t\tvar classes = [ 'selectable' ];\n\t\tvar classPrefix = this.c.classPrefix;\n\n\t\tif ( day.disabled ) {\n\t\t\tclasses.push( 'disabled' );\n\t\t}\n\n\t\tif ( day.today ) {\n\t\t\tclasses.push( 'now' );\n\t\t}\n\n\t\tif ( day.selected ) {\n\t\t\tclasses.push( 'selected' );\n\t\t}\n\n\t\treturn '<td data-day=\"' + day.day + '\" class=\"' + classes.join(' ') + '\">' +\n\t\t\t\t'<button class=\"'+classPrefix+'-button '+classPrefix+'-day\" type=\"button\" ' +'data-year=\"' + day.year + '\" data-month=\"' + day.month + '\" data-day=\"' + day.day + '\">' +\n\t\t\t\t\t'<span>'+day.day+'</span>'+\n\t\t\t\t'</button>' +\n\t\t\t'</td>';\n\t},\n\n\n\t/**\n\t * Create the HTML for a month to be displayed in the calendar table.\n\t * \n\t * Based upon the logic used in Pikaday - MIT licensed\n\t * Copyright (c) 2014 David Bushell\n\t * https://github.com/dbushell/Pikaday\n\t *\n\t * @param  {integer} year  Year\n\t * @param  {integer} month Month (starting at 0)\n\t * @return {string} Calendar month HTML\n\t * @private\n\t */\n\t_htmlMonth: function ( year, month ) {\n\t\tvar now    = this._dateToUtc( new Date() ),\n\t\t\tdays   = this._daysInMonth( year, month ),\n\t\t\tbefore = new Date( Date.UTC(year, month, 1) ).getUTCDay(),\n\t\t\tdata   = [],\n\t\t\trow    = [];\n\n\t\tif ( this.c.firstDay > 0 ) {\n\t\t\tbefore -= this.c.firstDay;\n\n\t\t\tif (before < 0) {\n\t\t\t\tbefore += 7;\n\t\t\t}\n\t\t}\n\n\t\tvar cells = days + before,\n\t\t\tafter = cells;\n\n\t\twhile ( after > 7 ) {\n\t\t\tafter -= 7;\n\t\t}\n\n\t\tcells += 7 - after;\n\n\t\tvar minDate = this.c.minDate;\n\t\tvar maxDate = this.c.maxDate;\n\n\t\tif ( minDate ) {\n\t\t\tminDate.setUTCHours(0);\n\t\t\tminDate.setUTCMinutes(0);\n\t\t\tminDate.setSeconds(0);\n\t\t}\n\n\t\tif ( maxDate ) {\n\t\t\tmaxDate.setUTCHours(23);\n\t\t\tmaxDate.setUTCMinutes(59);\n\t\t\tmaxDate.setSeconds(59);\n\t\t}\n\n\t\tfor ( var i=0, r=0 ; i<cells ; i++ ) {\n\t\t\tvar day      = new Date( Date.UTC(year, month, 1 + (i - before)) ),\n\t\t\t\tselected = this.s.d ? this._compareDates(day, this.s.d) : false,\n\t\t\t\ttoday    = this._compareDates(day, now),\n\t\t\t\tempty    = i < before || i >= (days + before),\n\t\t\t\tdisabled = (minDate && day < minDate) ||\n\t\t\t\t           (maxDate && day > maxDate);\n\n\t\t\tvar disableDays = this.c.disableDays;\n\t\t\tif ( Array.isArray( disableDays ) && $.inArray( day.getUTCDay(), disableDays ) !== -1 ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\t\t\telse if ( typeof disableDays === 'function' && disableDays( day ) === true ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\n\t\t\tvar dayConfig = {\n\t\t\t\tday:      1 + (i - before),\n\t\t\t\tmonth:    month,\n\t\t\t\tyear:     year,\n\t\t\t\tselected: selected,\n\t\t\t\ttoday:    today,\n\t\t\t\tdisabled: disabled,\n\t\t\t\tempty:    empty\n\t\t\t};\n\n\t\t\trow.push( this._htmlDay(dayConfig) );\n\n\t\t\tif ( ++r === 7 ) {\n\t\t\t\tif ( this.c.showWeekNumber ) {\n\t\t\t\t\trow.unshift( this._htmlWeekOfYear(i - before, month, year) );\n\t\t\t\t}\n\n\t\t\t\tdata.push( '<tr>'+row.join('')+'</tr>' );\n\t\t\t\trow = [];\n\t\t\t\tr = 0;\n\t\t\t}\n\t\t}\n\n\t\tvar classPrefix = this.c.classPrefix;\n\t\tvar className = classPrefix+'-table';\n\t\tif ( this.c.showWeekNumber ) {\n\t\t\tclassName += ' weekNumber';\n\t\t}\n\n\t\t// Show / hide month icons based on min/max\n\t\tif ( minDate ) {\n\t\t\tvar underMin = minDate >= new Date( Date.UTC(year, month, 1, 0, 0, 0 ) );\n\n\t\t\tthis.dom.title.find('div.'+classPrefix+'-iconLeft')\n\t\t\t\t.css( 'display', underMin ? 'none' : 'block' );\n\t\t}\n\n\t\tif ( maxDate ) {\n\t\t\tvar overMax = maxDate < new Date( Date.UTC(year, month+1, 1, 0, 0, 0 ) );\n\n\t\t\tthis.dom.title.find('div.'+classPrefix+'-iconRight')\n\t\t\t\t.css( 'display', overMax ? 'none' : 'block' );\n\t\t}\n\n\t\treturn '<table class=\"'+className+'\">' +\n\t\t\t\t'<thead>'+\n\t\t\t\t\tthis._htmlMonthHead() +\n\t\t\t\t'</thead>'+\n\t\t\t\t'<tbody>'+\n\t\t\t\t\tdata.join('') +\n\t\t\t\t'</tbody>'+\n\t\t\t'</table>';\n\t},\n\n\t/**\n\t * Create the calendar table's header (week days)\n\t *\n\t * @return {string} HTML cells for the row\n\t * @private\n\t */\n\t_htmlMonthHead: function () {\n\t\tvar a = [];\n\t\tvar firstDay = this.c.firstDay;\n\t\tvar i18n = this.c.i18n;\n\n\t\t// Take account of the first day shift\n\t\tvar dayName = function ( day ) {\n\t\t\tday += firstDay;\n\n\t\t\twhile (day >= 7) {\n\t\t\t\tday -= 7;\n\t\t\t}\n\n\t\t\treturn i18n.weekdays[day];\n\t\t};\n\t\t\n\t\t// Empty cell in the header\n\t\tif ( this.c.showWeekNumber ) {\n\t\t\ta.push( '<th></th>' );\n\t\t}\n\n\t\tfor ( var i=0 ; i<7 ; i++ ) {\n\t\t\ta.push( '<th>'+dayName( i )+'</th>' );\n\t\t}\n\n\t\treturn a.join('');\n\t},\n\n\t/**\n\t * Create a cell that contains week of the year - ISO8601\n\t *\n\t * Based on https://stackoverflow.com/questions/6117814/ and\n\t * http://techblog.procurios.nl/k/n618/news/view/33796/14863/\n\t *\n\t * @param  {integer} d Day of month\n\t * @param  {integer} m Month of year (zero index)\n\t * @param  {integer} y Year\n\t * @return {string}   \n\t * @private\n\t */\n\t_htmlWeekOfYear: function ( d, m, y ) {\n\t\tvar date = new Date( y, m, d, 0, 0, 0, 0 );\n\n\t\t// First week of the year always has 4th January in it\n\t\tdate.setDate( date.getDate() + 4 - (date.getDay() || 7) );\n\n\t\tvar oneJan = new Date( y, 0, 1 );\n\t\tvar weekNum = Math.ceil( ( ( (date - oneJan) / 86400000) + 1)/7 );\n\n\t\treturn '<td class=\"'+this.c.classPrefix+'-week\">' + weekNum + '</td>';\n\t},\n\n\t/**\n\t * Determine if Luxon is being used\n\t *\n\t * @returns Flag for Luxon\n\t */\n\t_isLuxon: function () {\n\t\treturn dateLib && dateLib.DateTime && dateLib.Duration && dateLib.Settings\n\t\t\t? true\n\t\t\t: false;\n\t},\n\n\t/**\n\t * Check if the instance has a date object value - it might be null.\n\t * If is doesn't set one to now.\n\t * @returns A Date object\n\t * @private\n\t */\n\t_needValue: function () {\n\t\tif ( ! this.s.d ) {\n\t\t\tthis.s.d = this._dateToUtc( new Date() );\n\n\t\t\tif (! this.s.parts.time) {\n\t\t\t\tthis.s.d.setUTCHours(0);\n\t\t\t\tthis.s.d.setUTCMinutes(0);\n\t\t\t\tthis.s.d.setSeconds(0);\n\t\t\t\tthis.s.d.setMilliseconds(0);\n\t\t\t}\n\t\t}\n\n\t\treturn this.s.d;\n\t},\n\n\t/**\n\t * Create option elements from a range in an array\n\t *\n\t * @param  {string} selector Class name unique to the select element to use\n\t * @param  {array} values   Array of values\n\t * @param  {array} [labels] Array of labels. If given must be the same\n\t *   length as the values parameter.\n\t * @private\n\t */\n\t_options: function ( selector, values, labels ) {\n\t\tif ( ! labels ) {\n\t\t\tlabels = values;\n\t\t}\n\n\t\tvar select = this.dom.container.find('select.'+this.c.classPrefix+'-'+selector);\n\t\tselect.empty();\n\n\t\tfor ( var i=0, ien=values.length ; i<ien ; i++ ) {\n\t\t\tselect.append( '<option value=\"'+values[i]+'\">'+labels[i]+'</option>' );\n\t\t}\n\t},\n\n\t/**\n\t * Set an option and update the option's span pair (since the select element\n\t * has opacity 0 for styling)\n\t *\n\t * @param  {string} selector Class name unique to the select element to use\n\t * @param  {*}      val      Value to set\n\t * @private\n\t */\n\t_optionSet: function ( selector, val ) {\n\t\tvar select = this.dom.container.find('select.'+this.c.classPrefix+'-'+selector);\n\t\tvar span = select.parent().children('span');\n\n\t\tselect.val( val );\n\n\t\tvar selected = select.find('option:selected');\n\t\tspan.html( selected.length !== 0 ?\n\t\t\tselected.text() :\n\t\t\tthis.c.i18n.unknown\n\t\t);\n\t},\n\n\t/**\n\t * Create time options list.\n\t *\n\t * @param  {string} unit Time unit - hours, minutes or seconds\n\t * @param  {integer} count Count range - 12, 24 or 60\n\t * @param  {integer} val Existing value for this unit\n\t * @param  {integer[]} allowed Values allow for selection\n\t * @param  {integer} range Override range\n\t * @private\n\t */\n\t_optionsTime: function ( unit, count, val, allowed, range ) {\n\t\tvar classPrefix = this.c.classPrefix;\n\t\tvar container = this.dom.container.find('div.'+classPrefix+'-'+unit);\n\t\tvar i, j;\n\t\tvar render = count === 12 ?\n\t\t\tfunction (i) { return i; } :\n\t\t\tthis._pad;\n\t\tvar classPrefix = this.c.classPrefix;\n\t\tvar className = classPrefix+'-table';\n\t\tvar i18n = this.c.i18n;\n\n\t\tif ( ! container.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar a = '';\n\t\tvar span = 10;\n\t\tvar button = function (value, label, className) {\n\t\t\t// Shift the value for PM\n\t\t\tif ( count === 12 && typeof value === 'number' ) {\n\t\t\t\tif (val >= 12 ) {\n\t\t\t\t\tvalue += 12;\n\t\t\t\t}\n\n\t\t\t\tif (value == 12) {\n\t\t\t\t\tvalue = 0;\n\t\t\t\t}\n\t\t\t\telse if (value == 24) {\n\t\t\t\t\tvalue = 12;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar selected = val === value || (value === 'am' && val < 12) || (value === 'pm' && val >= 12) ?\n\t\t\t\t'selected' :\n\t\t\t\t'';\n\t\t\t\n\t\t\tif (typeof value === 'number' && allowed && $.inArray(value, allowed) === -1) {\n\t\t\t\tselected += ' disabled';\n\t\t\t}\n\n\t\t\tif ( className ) {\n\t\t\t\tselected += ' '+className;\n\t\t\t}\n\n\t\t\treturn '<td class=\"selectable '+selected+'\">' +\n\t\t\t\t'<button class=\"'+classPrefix+'-button '+classPrefix+'-day\" type=\"button\" data-unit=\"'+unit+'\" data-value=\"'+value+ '\">' +\n\t\t\t\t\t'<span>'+label+'</span>'+\n\t\t\t\t'</button>' +\n\t\t\t'</td>';\n\t\t}\n\n\t\tif ( count === 12 ) {\n\t\t\t// Hours with AM/PM\n\t\t\ta += '<tr>';\n\t\t\t\n\t\t\tfor ( i=1 ; i<=6 ; i++ ) {\n\t\t\t\ta += button(i, render(i));\n\t\t\t}\n\t\t\ta += button('am', i18n.amPm[0]);\n\n\t\t\ta += '</tr>';\n\t\t\ta += '<tr>';\n\n\t\t\tfor ( i=7 ; i<=12 ; i++ ) {\n\t\t\t\ta += button(i, render(i));\n\t\t\t}\n\t\t\ta += button('pm', i18n.amPm[1]);\n\t\t\ta += '</tr>';\n\n\t\t\tspan = 7;\n\t\t}\n\t\telse if ( count === 24 ) {\n\t\t\t// Hours - 24\n\t\t\tvar c = 0;\n\t\t\tfor (j=0 ; j<4 ; j++ ) {\n\t\t\t\ta += '<tr>';\n\t\t\t\tfor ( i=0 ; i<6 ; i++ ) {\n\t\t\t\t\ta += button(c, render(c));\n\t\t\t\t\tc++;\n\t\t\t\t}\n\t\t\t\ta += '</tr>';\n\t\t\t}\n\n\t\t\tspan = 6;\n\t\t}\n\t\telse {\n\t\t\t// Minutes and seconds\n\t\t\ta += '<tr>';\n\t\t\tfor (j=0 ; j<60 ; j+=10 ) {\n\t\t\t\ta += button(j, render(j), 'range');\n\t\t\t}\n\t\t\ta += '</tr>';\n\t\t\t\n\t\t\t// Slight hack to allow for the different number of columns\n\t\t\ta += '</tbody></thead><table class=\"'+className+' '+className+'-nospace\"><tbody>';\n\n\t\t\tvar start = range !== null\n\t\t\t\t? range\n\t\t\t\t: val === -1\n\t\t\t\t\t? 0\n\t\t\t\t\t: Math.floor( val / 10 )*10;\n\n\t\t\ta += '<tr>';\n\t\t\tfor (j=start+1 ; j<start+10 ; j++ ) {\n\t\t\t\ta += button(j, render(j));\n\t\t\t}\n\t\t\ta += '</tr>';\n\n\t\t\tspan = 6;\n\t\t}\n\n\t\tcontainer\n\t\t\t.empty()\n\t\t\t.append(\n\t\t\t\t'<table class=\"'+className+'\">'+\n\t\t\t\t\t'<thead><tr><th colspan=\"'+span+'\">'+\n\t\t\t\t\t\ti18n[unit] +\n\t\t\t\t\t'</th></tr></thead>'+\n\t\t\t\t\t'<tbody>'+\n\t\t\t\t\t\ta+\n\t\t\t\t\t'</tbody>'+\n\t\t\t\t'</table>'\n\t\t\t);\n\t},\n\n\t/**\n\t * Create the options for the month and year\n\t *\n\t * @param  {integer} year  Year\n\t * @param  {integer} month Month (starting at 0)\n\t * @private\n\t */\n\t_optionsTitle: function () {\n\t\tvar i18n = this.c.i18n;\n\t\tvar min = this.c.minDate;\n\t\tvar max = this.c.maxDate;\n\t\tvar minYear = min ? min.getFullYear() : null;\n\t\tvar maxYear = max ? max.getFullYear() : null;\n\n\t\tvar i = minYear !== null ? minYear : new Date().getFullYear() - this.c.yearRange;\n\t\tvar j = maxYear !== null ? maxYear : new Date().getFullYear() + this.c.yearRange;\n\n\t\tthis._options( 'month', this._range( 0, 11 ), i18n.months );\n\t\tthis._options( 'year', this._range( i, j ) );\n\n\t\t// Set the language strings in case any have changed\n\t\tthis.dom.today.text(i18n.today).text(i18n.today);\n\t\tthis.dom.clear.text(i18n.clear).text(i18n.clear);\n\t\tthis.dom.previous\n\t\t\t.attr('title', i18n.previous)\n\t\t\t.children('button')\n\t\t\t.text(i18n.previous);\n\t\tthis.dom.next\n\t\t\t.attr('title', i18n.next)\n\t\t\t.children('button')\n\t\t\t.text(i18n.next);\n\t},\n\n\t/**\n\t * Simple two digit pad\n\t *\n\t * @param  {integer} i      Value that might need padding\n\t * @return {string|integer} Padded value\n\t * @private\n\t */\n\t_pad: function ( i ) {\n\t\treturn i<10 ? '0'+i : i;\n\t},\n\n\t/**\n\t * Position the calendar to look attached to the input element\n\t * @private\n\t */\n\t_position: function () {\n\t\tvar offset = this.c.attachTo === 'input' ? this.dom.input.position() : this.dom.input.offset();\n\t\tvar container = this.dom.container;\n\t\tvar inputHeight = this.dom.input.outerHeight();\n\n\t\tif (container.hasClass('inline')) {\n\t\t\tcontainer.insertAfter( this.dom.input );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.s.parts.date && this.s.parts.time && $(window).width() > 550 ) {\n\t\t\tcontainer.addClass('horizontal');\n\t\t}\n\t\telse {\n\t\t\tcontainer.removeClass('horizontal');\n\t\t}\n\n\t\tif(this.c.attachTo === 'input') {\n\t\t\tcontainer\n\t\t\t\t.css( {\n\t\t\t\t\ttop: offset.top + inputHeight,\n\t\t\t\t\tleft: offset.left\n\t\t\t\t} )\n\t\t\t\t.insertAfter( this.dom.input );\n\t\t}\n\t\telse {\n\t\t\tcontainer\n\t\t\t\t.css( {\n\t\t\t\t\ttop: offset.top + inputHeight,\n\t\t\t\t\tleft: offset.left\n\t\t\t\t} )\n\t\t\t\t.appendTo( 'body' );\n\t\t}\n\n\t\tvar calHeight = container.outerHeight();\n\t\tvar calWidth = container.outerWidth();\n\t\tvar scrollTop = $(window).scrollTop();\n\n\t\t// Correct to the bottom\n\t\tif ( offset.top + inputHeight + calHeight - scrollTop > $(window).height() ) {\n\t\t\tvar newTop = offset.top - calHeight;\n\n\t\t\tcontainer.css( 'top', newTop < 0 ? 0 : newTop );\n\t\t}\n\n\t\t// Correct to the right\n\t\tif ( calWidth + offset.left > $(window).width() ) {\n\t\t\tvar newLeft = $(window).width() - calWidth;\n\n\t\t\t// Account for elements which are inside a position absolute element\n\t\t\tif (this.c.attachTo === 'input') {\n\t\t\t\tnewLeft -= $(container).offsetParent().offset().left;\n\t\t\t}\n\n\t\t\tcontainer.css( 'left', newLeft < 0 ? 0 : newLeft );\n\t\t}\n\t},\n\n\t/**\n\t * Create a simple array with a range of values\n\t *\n\t * @param  {integer} start   Start value (inclusive)\n\t * @param  {integer} end     End value (inclusive)\n\t * @param  {integer} [inc=1] Increment value\n\t * @return {array}           Created array\n\t * @private\n\t */\n\t_range: function ( start, end, inc ) {\n\t\tvar a = [];\n\n\t\tif ( ! inc ) {\n\t\t\tinc = 1;\n\t\t}\n\n\t\tfor ( var i=start ; i<=end ; i+=inc ) {\n\t\t\ta.push( i );\n\t\t}\n\n\t\treturn a;\n\t},\n\n\t/**\n\t * Redraw the calendar based on the display date - this is a destructive\n\t * operation\n\t *\n\t * @private\n\t */\n\t_setCalander: function () {\n\t\tif ( this.s.display ) {\n\t\t\tthis.dom.calendar\n\t\t\t\t.empty()\n\t\t\t\t.append( this._htmlMonth(\n\t\t\t\t\tthis.s.display.getUTCFullYear(),\n\t\t\t\t\tthis.s.display.getUTCMonth()\n\t\t\t\t) );\n\t\t}\n\t},\n\n\t/**\n\t * Set the month and year for the calendar based on the current display date\n\t *\n\t * @private\n\t */\n\t_setTitle: function () {\n\t\tthis._optionSet( 'month', this.s.display.getUTCMonth() );\n\t\tthis._optionSet( 'year', this.s.display.getUTCFullYear() );\n\t},\n\n\t/**\n\t * Set the time based on the current value of the widget\n\t *\n\t * @private\n\t */\n\t_setTime: function () {\n\t\tvar that = this;\n\t\tvar d = this.s.d;\n\t\t\n\t\t// luxon uses different method names so need to be able to call them. This happens a few time later in this method too\n\t\tvar luxDT = null\n\t\tif (this._isLuxon()) {\n\t\t\tluxDT = dateLib.DateTime.fromJSDate(d).toUTC();\n\t\t}\n\n\t\tvar hours = luxDT != null\n\t\t\t? luxDT.hour\n\t\t\t: d\n\t\t\t\t? d.getUTCHours()\n\t\t\t\t: -1;\n\n\t\tvar allowed = function ( prop ) { // Backwards compt with `Increment` option\n\t\t\treturn that.c[prop+'Available'] ?\n\t\t\t\tthat.c[prop+'Available'] :\n\t\t\t\tthat._range( 0, 59, that.c[prop+'Increment'] );\n\t\t}\n\n\t\tthis._optionsTime( 'hours', this.s.parts.hours12 ? 12 : 24, hours, this.c.hoursAvailable )\n\t\tthis._optionsTime(\n\t\t\t'minutes',\n\t\t\t60,\n\t\t\tluxDT != null\n\t\t\t\t? luxDT.minute\n\t\t\t\t: d\n\t\t\t\t\t? d.getUTCMinutes()\n\t\t\t\t\t: -1,\n\t\t\tallowed('minutes'),\n\t\t\tthis.s.minutesRange\n\t\t);\n\t\tthis._optionsTime(\n\t\t\t'seconds',\n\t\t\t60,\n\t\t\tluxDT != null\n\t\t\t\t? luxDT.second\n\t\t\t\t: d\n\t\t\t\t\t? d.getSeconds()\n\t\t\t\t\t: -1,\n\t\t\tallowed('seconds'),\n\t\t\tthis.s.secondsRange\n\t\t);\n\t},\n\n\t/**\n\t * Show the widget and add events to the document required only while it\n\t * is displayed\n\t * \n\t * @private\n\t */\n\t_show: function () {\n\t\tvar that = this;\n\t\tvar namespace = this.s.namespace;\n\n\t\tthis._position();\n\n\t\t// Need to reposition on scroll\n\t\t$(window).on( 'scroll.'+namespace+' resize.'+namespace, function () {\n\t\t\tthat._position();\n\t\t} );\n\n\t\t$('div.DTE_Body_Content').on( 'scroll.'+namespace, function () {\n\t\t\tthat._position();\n\t\t} );\n\n\t\t$('div.dataTables_scrollBody').on( 'scroll.'+namespace, function () {\n\t\t\tthat._position();\n\t\t} );\n\n\t\tvar offsetParent = this.dom.input[0].offsetParent;\n\n\t\tif ( offsetParent !== document.body ) {\n\t\t\t$(offsetParent).on( 'scroll.'+namespace, function () {\n\t\t\t\tthat._position();\n\t\t\t} );\n\t\t}\n\n\t\t// On tab focus will move to a different field (no keyboard navigation\n\t\t// in the date picker - this might need to be changed).\n\t\t$(document).on( 'keydown.'+namespace, function (e) {\n\t\t\tif (\n\t\t\t\te.keyCode === 9  || // tab\n\t\t\t\te.keyCode === 27 || // esc\n\t\t\t\te.keyCode === 13    // return\n\t\t\t) {\n\t\t\t\tthat._hide();\n\t\t\t}\n\t\t} );\n\n\t\t// Hide if clicking outside of the widget - but in a different click\n\t\t// event from the one that was used to trigger the show (bubble and\n\t\t// inline)\n\t\tsetTimeout( function () {\n\t\t\t$('body').on( 'click.'+namespace, function (e) {\n\t\t\t\tvar parents = $(e.target).parents();\n\n\t\t\t\tif ( ! parents.filter( that.dom.container ).length && e.target !== that.dom.input[0] ) {\n\t\t\t\t\tthat._hide();\n\t\t\t\t}\n\t\t\t} );\n\t\t}, 10 );\n\t},\n\n\t/**\n\t * Write the formatted string to the input element this control is attached\n\t * to\n\t *\n\t * @private\n\t */\n\t_writeOutput: function ( focus ) {\n\t\tvar date = this.s.d;\n\t\tvar out = '';\n\t\tvar input = this.dom.input;\n\n\t\tif (date) {\n\t\t\tout = this._convert(date, null, this.c.format);\n\t\t}\n\n\t\tinput.val( out );\n\n\t\t// Create a DOM synthetic event. Can't use $().trigger() as\n\t\t// that doesn't actually trigger non-jQuery event listeners\n\t\tvar event = new Event('change', {bubbles: true});\n\t\tinput[0].dispatchEvent(event);\n\t\t\n\t\tif ( input.attr('type') === 'hidden' ) {\n\t\t\tthis.val(out, false);\n\t\t}\n\n\t\tif ( focus ) {\n\t\t\tinput.focus();\n\t\t}\n\t}\n} );\n\n/**\n * Use a specificmoment compatible date library\n */\nDateTime.use = function (lib) {\n\tdateLib = lib;\n};\n\n/**\n * For generating unique namespaces\n *\n * @type {Number}\n * @private\n */\nDateTime._instance = 0;\n\n/**\n * To indicate to DataTables what type of library this is\n */\nDateTime.type = 'DateTime';\n\n/**\n * Defaults for the date time picker\n *\n * @type {Object}\n */\nDateTime.defaults = {\n\tattachTo: 'body',\n\n\tbuttons: {\n\t\tclear: false,\n\t\ttoday: false\n\t},\n\n\t// Not documented - could be an internal property\n\tclassPrefix: 'dt-datetime',\n\n\t// function or array of ints\n\tdisableDays: null,\n\n\t// first day of the week (0: Sunday, 1: Monday, etc)\n\tfirstDay: 1,\n\n\tformat: 'YYYY-MM-DD',\n\n\thoursAvailable: null,\n\n\ti18n: {\n\t\tclear:    'Clear',\n\t\tprevious: 'Previous',\n\t\tnext:     'Next',\n\t\tmonths:   [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],\n\t\tweekdays: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],\n\t\tamPm:     [ 'am', 'pm' ],\n\t\thours:    'Hour',\n\t\tminutes:  'Minute',\n\t\tseconds:  'Second',\n\t\tunknown:  '-',\n\t\ttoday:    'Today'\n\t},\n\n\tmaxDate: null,\n\n\tminDate: null,\n\n\tminutesAvailable: null,\n\n\tminutesIncrement: 1, // deprecated\n\n\tstrict: true,\n\n\tlocale: 'en',\n\n\tonChange: function () {},\n\n\tsecondsAvailable: null,\n\n\tsecondsIncrement: 1, // deprecated\n\n\t// show the ISO week number at the head of the row\n\tshowWeekNumber: false,\n\n\t// overruled by max / min date\n\tyearRange: 25\n};\n\nDateTime.version = '1.5.1';\n\n/**\n * CommonJS factory function pass through. Matches DataTables.\n * @param {*} root Window\n * @param {*} jq jQUery\n * @returns {boolean} Indicator\n */\nDateTime.factory = function (root, jq) {\n\tvar is = false;\n\n\t// Test if the first parameter is a window object\n\tif (root && root.document) {\n\t\twindow = root;\n\t\tdocument = root.document;\n\t}\n\n\t// Test if the second parameter is a jQuery object\n\tif (jq && jq.fn && jq.fn.jquery) {\n\t\t$ = jq;\n\t\tis = true;\n\t}\n\n\treturn is;\n}\n\n// Global export - if no conflicts\nif (! window.DateTime) {\n\twindow.DateTime = DateTime;\n}\n\n// Global DataTable\nif (window.DataTable) {\n\twindow.DataTable.DateTime = DateTime;\n}\n\n// Make available via jQuery\n$.fn.dtDateTime = function (options) {\n\treturn this.each(function() {\n\t\tnew DateTime(this, options);\n\t});\n}\n\n// Attach to DataTables if present\nif ($.fn.dataTable) {\n\t$.fn.dataTable.DateTime = DateTime;\n\t$.fn.DataTable.DateTime = DateTime;\n\n\tif ($.fn.dataTable.Editor) {\n\t\t$.fn.dataTable.Editor.DateTime = DateTime;\n\t}\n}\n\n\nreturn DateTime;\n}));\n\n\n/*! FixedColumns 4.3.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n(function () {\n    'use strict';\n\n    var $$1;\n    var dataTable;\n    function setJQuery(jq) {\n        $$1 = jq;\n        dataTable = $$1.fn.dataTable;\n    }\n    var FixedColumns = /** @class */ (function () {\n        function FixedColumns(settings, opts) {\n            var _this = this;\n            // Check that the required version of DataTables is included\n            if (!dataTable || !dataTable.versionCheck || !dataTable.versionCheck('1.10.0')) {\n                throw new Error('FixedColumns requires DataTables 1.10 or newer');\n            }\n            var table = new dataTable.Api(settings);\n            this.classes = $$1.extend(true, {}, FixedColumns.classes);\n            // Get options from user\n            this.c = $$1.extend(true, {}, FixedColumns.defaults, opts);\n            // Backwards compatibility for deprecated leftColumns\n            if ((!opts || opts.left === undefined) && this.c.leftColumns !== undefined) {\n                this.c.left = this.c.leftColumns;\n            }\n            // Backwards compatibility for deprecated rightColumns\n            if ((!opts || opts.right === undefined) && this.c.rightColumns !== undefined) {\n                this.c.right = this.c.rightColumns;\n            }\n            this.s = {\n                barWidth: 0,\n                dt: table,\n                rtl: $$1('body').css('direction') === 'rtl'\n            };\n            // Common CSS for all blockers\n            var blockerCSS = {\n                'bottom': '0px',\n                'display': 'block',\n                'position': 'absolute',\n                'width': this.s.barWidth + 1 + 'px'\n            };\n            this.dom = {\n                leftBottomBlocker: $$1('<div>')\n                    .css(blockerCSS)\n                    .css('left', 0)\n                    .addClass(this.classes.leftBottomBlocker),\n                leftTopBlocker: $$1('<div>')\n                    .css(blockerCSS)\n                    .css({\n                    left: 0,\n                    top: 0\n                })\n                    .addClass(this.classes.leftTopBlocker),\n                rightBottomBlocker: $$1('<div>')\n                    .css(blockerCSS)\n                    .css('right', 0)\n                    .addClass(this.classes.rightBottomBlocker),\n                rightTopBlocker: $$1('<div>')\n                    .css(blockerCSS)\n                    .css({\n                    right: 0,\n                    top: 0\n                })\n                    .addClass(this.classes.rightTopBlocker)\n            };\n            if (this.s.dt.settings()[0]._bInitComplete) {\n                // Fixed Columns Initialisation\n                this._addStyles();\n                this._setKeyTableListener();\n            }\n            else {\n                table.one('init.dt.dtfc', function () {\n                    // Fixed Columns Initialisation\n                    _this._addStyles();\n                    _this._setKeyTableListener();\n                });\n            }\n            table.on('column-sizing.dt.dtfc', function () { return _this._addStyles(); });\n            // Make class available through dt object\n            table.settings()[0]._fixedColumns = this;\n            table.on('destroy', function () { return _this._destroy(); });\n            return this;\n        }\n        FixedColumns.prototype.left = function (newVal) {\n            // If the value is to change\n            if (newVal !== undefined) {\n                if (newVal >= 0 && newVal <= this.s.dt.columns().count()) {\n                    // Set the new values and redraw the columns\n                    this.c.left = newVal;\n                    this._addStyles();\n                }\n                return this;\n            }\n            return this.c.left;\n        };\n        FixedColumns.prototype.right = function (newVal) {\n            // If the value is to change\n            if (newVal !== undefined) {\n                if (newVal >= 0 && newVal <= this.s.dt.columns().count()) {\n                    // Set the new values and redraw the columns\n                    this.c.right = newVal;\n                    this._addStyles();\n                }\n                return this;\n            }\n            return this.c.right;\n        };\n        /**\n         * Iterates over the columns, fixing the appropriate ones to the left and right\n         */\n        FixedColumns.prototype._addStyles = function () {\n            // Set the bar width if vertical scrolling is enabled\n            if (this.s.dt.settings()[0].oScroll.sY) {\n                var scroll_1 = $$1(this.s.dt.table().node()).closest('div.dataTables_scrollBody')[0];\n                var barWidth = this.s.dt.settings()[0].oBrowser.barWidth;\n                if (scroll_1.offsetWidth - scroll_1.clientWidth >= barWidth) {\n                    this.s.barWidth = barWidth;\n                }\n                else {\n                    this.s.barWidth = 0;\n                }\n                this.dom.rightTopBlocker.css('width', this.s.barWidth + 1);\n                this.dom.leftTopBlocker.css('width', this.s.barWidth + 1);\n                this.dom.rightBottomBlocker.css('width', this.s.barWidth + 1);\n                this.dom.leftBottomBlocker.css('width', this.s.barWidth + 1);\n            }\n            var parentDiv = null;\n            // Get the header and it's height\n            var header = this.s.dt.column(0).header();\n            var headerHeight = null;\n            if (header !== null) {\n                header = $$1(header);\n                headerHeight = header.outerHeight() + 1;\n                parentDiv = $$1(header.closest('div.dataTables_scroll')).css('position', 'relative');\n            }\n            // Get the footer and it's height\n            var footer = this.s.dt.column(0).footer();\n            var footerHeight = null;\n            if (footer !== null) {\n                footer = $$1(footer);\n                footerHeight = footer.outerHeight();\n                // Only attempt to retrieve the parentDiv if it has not been retrieved already\n                if (parentDiv === null) {\n                    parentDiv = $$1(footer.closest('div.dataTables_scroll')).css('position', 'relative');\n                }\n            }\n            // Get the number of columns in the table - this is used often so better to only make 1 api call\n            var numCols = this.s.dt.columns().data().toArray().length;\n            // Tracker for the number of pixels should be left to the left of the table\n            var distLeft = 0;\n            // Sometimes the headers have slightly different widths so need to track them individually\n            var headLeft = 0;\n            // Get all of the row elements in the table\n            var rows = $$1(this.s.dt.table().node()).children('tbody').children('tr');\n            var invisibles = 0;\n            // When working from right to left we need to know how many are invisible before a point,\n            // without including those that are invisible after\n            var prevInvisible = new Map();\n            // Iterate over all of the columns\n            for (var i = 0; i < numCols; i++) {\n                var column = this.s.dt.column(i);\n                // Set the map for the previous column\n                if (i > 0) {\n                    prevInvisible.set(i - 1, invisibles);\n                }\n                if (!column.visible()) {\n                    invisibles++;\n                    continue;\n                }\n                // Get the columns header and footer element\n                var colHeader = $$1(column.header());\n                var colFooter = $$1(column.footer());\n                // If i is less than the value of left then this column should be fixed left\n                if (i - invisibles < this.c.left) {\n                    $$1(this.s.dt.table().node()).addClass(this.classes.tableFixedLeft);\n                    parentDiv.addClass(this.classes.tableFixedLeft);\n                    // Add the width of the previous node - only if we are on atleast the second column\n                    if (i - invisibles > 0) {\n                        var prevIdx = i;\n                        // Simply using the number of hidden columns doesn't work here,\n                        // if the first is hidden then this would be thrown off\n                        while (prevIdx + 1 < numCols) {\n                            var prevCol = this.s.dt.column(prevIdx - 1, { page: 'current' });\n                            if (prevCol.visible()) {\n                                distLeft += $$1(prevCol.nodes()[0]).outerWidth();\n                                headLeft += prevCol.header() ?\n                                    $$1(prevCol.header()).outerWidth() :\n                                    prevCol.footer() ?\n                                        $$1(prevCol.header()).outerWidth() :\n                                        0;\n                                break;\n                            }\n                            prevIdx--;\n                        }\n                    }\n                    // Iterate over all of the rows, fixing the cell to the left\n                    for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n                        var row = rows_1[_i];\n                        $$1($$1(row).children()[i - invisibles])\n                            .css(this._getCellCSS(false, distLeft, 'left'))\n                            .addClass(this.classes.fixedLeft);\n                    }\n                    // Add the css for the header and the footer\n                    colHeader\n                        .css(this._getCellCSS(true, headLeft, 'left'))\n                        .addClass(this.classes.fixedLeft);\n                    colFooter\n                        .css(this._getCellCSS(true, headLeft, 'left'))\n                        .addClass(this.classes.fixedLeft);\n                }\n                else {\n                    // Iteriate through all of the rows, making sure they aren't currently trying to fix left\n                    for (var _a = 0, rows_2 = rows; _a < rows_2.length; _a++) {\n                        var row = rows_2[_a];\n                        var cell = $$1($$1(row).children()[i - invisibles]);\n                        // If the cell is trying to fix to the left, remove the class and the css\n                        if (cell.hasClass(this.classes.fixedLeft)) {\n                            cell\n                                .css(this._clearCellCSS('left'))\n                                .removeClass(this.classes.fixedLeft);\n                        }\n                    }\n                    // Make sure the header for this column isn't fixed left\n                    if (colHeader.hasClass(this.classes.fixedLeft)) {\n                        colHeader\n                            .css(this._clearCellCSS('left'))\n                            .removeClass(this.classes.fixedLeft);\n                    }\n                    // Make sure the footer for this column isn't fixed left\n                    if (colFooter.hasClass(this.classes.fixedLeft)) {\n                        colFooter\n                            .css(this._clearCellCSS('left'))\n                            .removeClass(this.classes.fixedLeft);\n                    }\n                }\n            }\n            var distRight = 0;\n            var headRight = 0;\n            // Counter for the number of invisible columns so far\n            var rightInvisibles = 0;\n            for (var i = numCols - 1; i >= 0; i--) {\n                var column = this.s.dt.column(i);\n                // If a column is invisible just skip it\n                if (!column.visible()) {\n                    rightInvisibles++;\n                    continue;\n                }\n                // Get the columns header and footer element\n                var colHeader = $$1(column.header());\n                var colFooter = $$1(column.footer());\n                // Get the number of visible columns that came before this one\n                var prev = prevInvisible.get(i);\n                if (prev === undefined) {\n                    // If it wasn't set then it was the last column so just use the final value\n                    prev = invisibles;\n                }\n                if (i + rightInvisibles >= numCols - this.c.right) {\n                    $$1(this.s.dt.table().node()).addClass(this.classes.tableFixedRight);\n                    parentDiv.addClass(this.classes.tableFixedRight);\n                    // Add the widht of the previous node, only if we are on atleast the second column\n                    if (i + 1 + rightInvisibles < numCols) {\n                        var prevIdx = i;\n                        // Simply using the number of hidden columns doesn't work here,\n                        // if the first is hidden then this would be thrown off\n                        while (prevIdx + 1 < numCols) {\n                            var prevCol = this.s.dt.column(prevIdx + 1, { page: 'current' });\n                            if (prevCol.visible()) {\n                                distRight += $$1(prevCol.nodes()[0]).outerWidth();\n                                headRight += prevCol.header() ?\n                                    $$1(prevCol.header()).outerWidth() :\n                                    prevCol.footer() ?\n                                        $$1(prevCol.header()).outerWidth() :\n                                        0;\n                                break;\n                            }\n                            prevIdx++;\n                        }\n                    }\n                    // Iterate over all of the rows, fixing the cell to the right\n                    for (var _b = 0, rows_3 = rows; _b < rows_3.length; _b++) {\n                        var row = rows_3[_b];\n                        $$1($$1(row).children()[i - prev])\n                            .css(this._getCellCSS(false, distRight, 'right'))\n                            .addClass(this.classes.fixedRight);\n                    }\n                    // Add the css for the header and the footer\n                    colHeader\n                        .css(this._getCellCSS(true, headRight, 'right'))\n                        .addClass(this.classes.fixedRight);\n                    colFooter\n                        .css(this._getCellCSS(true, headRight, 'right'))\n                        .addClass(this.classes.fixedRight);\n                }\n                else {\n                    // Iteriate through all of the rows, making sure they aren't currently trying to fix right\n                    for (var _c = 0, rows_4 = rows; _c < rows_4.length; _c++) {\n                        var row = rows_4[_c];\n                        var cell = $$1($$1(row).children()[i - prev]);\n                        // If the cell is trying to fix to the right, remove the class and the css\n                        if (cell.hasClass(this.classes.fixedRight)) {\n                            cell\n                                .css(this._clearCellCSS('right'))\n                                .removeClass(this.classes.fixedRight);\n                        }\n                    }\n                    // Make sure the header for this column isn't fixed right\n                    if (colHeader.hasClass(this.classes.fixedRight)) {\n                        colHeader\n                            .css(this._clearCellCSS('right'))\n                            .removeClass(this.classes.fixedRight);\n                    }\n                    // Make sure the footer for this column isn't fixed right\n                    if (colFooter.hasClass(this.classes.fixedRight)) {\n                        colFooter\n                            .css(this._clearCellCSS('right'))\n                            .removeClass(this.classes.fixedRight);\n                    }\n                }\n            }\n            // If there is a header with the index class and reading rtl then add right top blocker\n            if (header) {\n                if (!this.s.rtl) {\n                    this.dom.rightTopBlocker.outerHeight(headerHeight);\n                    parentDiv.append(this.dom.rightTopBlocker);\n                }\n                else {\n                    this.dom.leftTopBlocker.outerHeight(headerHeight);\n                    parentDiv.append(this.dom.leftTopBlocker);\n                }\n            }\n            // If there is a footer with the index class and reading rtl then add right bottom blocker\n            if (footer) {\n                if (!this.s.rtl) {\n                    this.dom.rightBottomBlocker.outerHeight(footerHeight);\n                    parentDiv.append(this.dom.rightBottomBlocker);\n                }\n                else {\n                    this.dom.leftBottomBlocker.outerHeight(footerHeight);\n                    parentDiv.append(this.dom.leftBottomBlocker);\n                }\n            }\n        };\n        /**\n         * Clean up\n         */\n        FixedColumns.prototype._destroy = function () {\n            this.s.dt.off('.dtfc');\n            this.dom.leftBottomBlocker.remove();\n            this.dom.leftTopBlocker.remove();\n            this.dom.rightBottomBlocker.remove();\n            this.dom.rightTopBlocker.remove();\n        };\n        /**\n         * Gets the correct CSS for the cell, header or footer based on options provided\n         *\n         * @param header Whether this cell is a header or a footer\n         * @param dist The distance that the cell should be moved away from the edge\n         * @param lr Indicator of fixing to the left or the right\n         * @returns An object containing the correct css\n         */\n        FixedColumns.prototype._getCellCSS = function (header, dist, lr) {\n            if (lr === 'left') {\n                return this.s.rtl\n                    ? {\n                        position: 'sticky',\n                        right: dist + 'px'\n                    }\n                    : {\n                        left: dist + 'px',\n                        position: 'sticky'\n                    };\n            }\n            else {\n                return this.s.rtl\n                    ? {\n                        left: dist + (header ? this.s.barWidth : 0) + 'px',\n                        position: 'sticky'\n                    }\n                    : {\n                        position: 'sticky',\n                        right: dist + (header ? this.s.barWidth : 0) + 'px'\n                    };\n            }\n        };\n        /**\n         * Gets the css that is required to clear the fixing to a side\n         *\n         * @param lr Indicator of fixing to the left or the right\n         * @returns An object containing the correct css\n         */\n        FixedColumns.prototype._clearCellCSS = function (lr) {\n            if (lr === 'left') {\n                return !this.s.rtl ?\n                    {\n                        left: '',\n                        position: ''\n                    } :\n                    {\n                        position: '',\n                        right: ''\n                    };\n            }\n            else {\n                return !this.s.rtl ?\n                    {\n                        position: '',\n                        right: ''\n                    } :\n                    {\n                        left: '',\n                        position: ''\n                    };\n            }\n        };\n        FixedColumns.prototype._setKeyTableListener = function () {\n            var _this = this;\n            this.s.dt.on('key-focus.dt.dtfc', function (e, dt, cell) {\n                var cellPos = $$1(cell.node()).offset();\n                var scroll = $$1($$1(_this.s.dt.table().node()).closest('div.dataTables_scrollBody'));\n                // If there are fixed columns to the left\n                if (_this.c.left > 0) {\n                    // Get the rightmost left fixed column header, it's position and it's width\n                    var rightMost = $$1(_this.s.dt.column(_this.c.left - 1).header());\n                    var rightMostPos = rightMost.offset();\n                    var rightMostWidth = rightMost.outerWidth();\n                    // If the current highlighted cell is left of the rightmost cell on the screen\n                    if (cellPos.left < rightMostPos.left + rightMostWidth) {\n                        // Scroll it into view\n                        var currScroll = scroll.scrollLeft();\n                        scroll.scrollLeft(currScroll - (rightMostPos.left + rightMostWidth - cellPos.left));\n                    }\n                }\n                // If there are fixed columns to the right\n                if (_this.c.right > 0) {\n                    // Get the number of columns and the width of the cell as doing right side calc\n                    var numCols = _this.s.dt.columns().data().toArray().length;\n                    var cellWidth = $$1(cell.node()).outerWidth();\n                    // Get the leftmost right fixed column header and it's position\n                    var leftMost = $$1(_this.s.dt.column(numCols - _this.c.right).header());\n                    var leftMostPos = leftMost.offset();\n                    // If the current highlighted cell is right of the leftmost cell on the screen\n                    if (cellPos.left + cellWidth > leftMostPos.left) {\n                        // Scroll it into view\n                        var currScroll = scroll.scrollLeft();\n                        scroll.scrollLeft(currScroll - (leftMostPos.left - (cellPos.left + cellWidth)));\n                    }\n                }\n            });\n            // Whenever a draw occurs there is potential for the data to have changed and therefore also the column widths\n            // Therefore it is necessary to recalculate the values for the fixed columns\n            this.s.dt.on('draw.dt.dtfc', function () {\n                _this._addStyles();\n            });\n            this.s.dt.on('column-reorder.dt.dtfc', function () {\n                _this._addStyles();\n            });\n            this.s.dt.on('column-visibility.dt.dtfc', function (e, settings, column, state, recalc) {\n                if (recalc && !settings.bDestroying) {\n                    setTimeout(function () {\n                        _this._addStyles();\n                    }, 50);\n                }\n            });\n        };\n        FixedColumns.version = '4.3.0';\n        FixedColumns.classes = {\n            fixedLeft: 'dtfc-fixed-left',\n            fixedRight: 'dtfc-fixed-right',\n            leftBottomBlocker: 'dtfc-left-bottom-blocker',\n            leftTopBlocker: 'dtfc-left-top-blocker',\n            rightBottomBlocker: 'dtfc-right-bottom-blocker',\n            rightTopBlocker: 'dtfc-right-top-blocker',\n            tableFixedLeft: 'dtfc-has-left',\n            tableFixedRight: 'dtfc-has-right'\n        };\n        FixedColumns.defaults = {\n            i18n: {\n                button: 'FixedColumns'\n            },\n            left: 1,\n            right: 0\n        };\n        return FixedColumns;\n    }());\n\n    /*! FixedColumns 4.3.0\n     * © SpryMedia Ltd - datatables.net/license\n     */\n    setJQuery($);\n    $.fn.dataTable.FixedColumns = FixedColumns;\n    $.fn.DataTable.FixedColumns = FixedColumns;\n    var apiRegister = DataTable.Api.register;\n    apiRegister('fixedColumns()', function () {\n        return this;\n    });\n    apiRegister('fixedColumns().left()', function (newVal) {\n        var ctx = this.context[0];\n        if (newVal !== undefined) {\n            ctx._fixedColumns.left(newVal);\n            return this;\n        }\n        else {\n            return ctx._fixedColumns.left();\n        }\n    });\n    apiRegister('fixedColumns().right()', function (newVal) {\n        var ctx = this.context[0];\n        if (newVal !== undefined) {\n            ctx._fixedColumns.right(newVal);\n            return this;\n        }\n        else {\n            return ctx._fixedColumns.right();\n        }\n    });\n    DataTable.ext.buttons.fixedColumns = {\n        action: function (e, dt, node, config) {\n            if ($(node).attr('active')) {\n                $(node).removeAttr('active').removeClass('active');\n                dt.fixedColumns().left(0);\n                dt.fixedColumns().right(0);\n            }\n            else {\n                $(node).attr('active', 'true').addClass('active');\n                dt.fixedColumns().left(config.config.left);\n                dt.fixedColumns().right(config.config.right);\n            }\n        },\n        config: {\n            left: 1,\n            right: 0\n        },\n        init: function (dt, node, config) {\n            if (dt.settings()[0]._fixedColumns === undefined) {\n                _init(dt.settings(), config);\n            }\n            $(node).attr('active', 'true').addClass('active');\n            dt.button(node).text(config.text || dt.i18n('buttons.fixedColumns', dt.settings()[0]._fixedColumns.c.i18n.button));\n        },\n        text: null\n    };\n    function _init(settings, options) {\n        if (options === void 0) { options = null; }\n        var api = new DataTable.Api(settings);\n        var opts = options\n            ? options\n            : api.init().fixedColumns || DataTable.defaults.fixedColumns;\n        var fixedColumns = new FixedColumns(api, opts);\n        return fixedColumns;\n    }\n    // Attach a listener to the document which listens for DataTables initialisation\n    // events so we can automatically initialise\n    $(document).on('plugin-init.dt', function (e, settings) {\n        if (e.namespace !== 'dt') {\n            return;\n        }\n        if (settings.oInit.fixedColumns ||\n            DataTable.defaults.fixedColumns) {\n            if (!settings._fixedColumns) {\n                _init(settings, null);\n            }\n        }\n    });\n\n})();\n\n\nreturn DataTable;\n}));\n\n\n/*! FixedHeader 3.4.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     FixedHeader\n * @description Fix a table's header or footer, so it is always visible while\n *              scrolling\n * @version     3.4.0\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\nvar _instCounter = 0;\n\nvar FixedHeader = function (dt, config) {\n\t// Sanity check - you just know it will happen\n\tif (!(this instanceof FixedHeader)) {\n\t\tthrow \"FixedHeader must be initialised with the 'new' keyword.\";\n\t}\n\n\t// Allow a boolean true for defaults\n\tif (config === true) {\n\t\tconfig = {};\n\t}\n\n\tdt = new DataTable.Api(dt);\n\n\tthis.c = $.extend(true, {}, FixedHeader.defaults, config);\n\n\tthis.s = {\n\t\tdt: dt,\n\t\tposition: {\n\t\t\ttheadTop: 0,\n\t\t\ttbodyTop: 0,\n\t\t\ttfootTop: 0,\n\t\t\ttfootBottom: 0,\n\t\t\twidth: 0,\n\t\t\tleft: 0,\n\t\t\ttfootHeight: 0,\n\t\t\ttheadHeight: 0,\n\t\t\twindowHeight: $(window).height(),\n\t\t\tvisible: true\n\t\t},\n\t\theaderMode: null,\n\t\tfooterMode: null,\n\t\tautoWidth: dt.settings()[0].oFeatures.bAutoWidth,\n\t\tnamespace: '.dtfc' + _instCounter++,\n\t\tscrollLeft: {\n\t\t\theader: -1,\n\t\t\tfooter: -1\n\t\t},\n\t\tenable: true,\n\t\tautoDisable: false\n\t};\n\n\tthis.dom = {\n\t\tfloatingHeader: null,\n\t\tthead: $(dt.table().header()),\n\t\ttbody: $(dt.table().body()),\n\t\ttfoot: $(dt.table().footer()),\n\t\theader: {\n\t\t\thost: null,\n\t\t\tfloating: null,\n\t\t\tfloatingParent: $('<div class=\"dtfh-floatingparent\">'),\n\t\t\tplaceholder: null\n\t\t},\n\t\tfooter: {\n\t\t\thost: null,\n\t\t\tfloating: null,\n\t\t\tfloatingParent: $('<div class=\"dtfh-floatingparent\">'),\n\t\t\tplaceholder: null\n\t\t}\n\t};\n\n\tthis.dom.header.host = this.dom.thead.parent();\n\tthis.dom.footer.host = this.dom.tfoot.parent();\n\n\tvar dtSettings = dt.settings()[0];\n\tif (dtSettings._fixedHeader) {\n\t\tthrow 'FixedHeader already initialised on table ' + dtSettings.nTable.id;\n\t}\n\n\tdtSettings._fixedHeader = this;\n\n\tthis._constructor();\n};\n\n/*\n * Variable: FixedHeader\n * Purpose:  Prototype for FixedHeader\n * Scope:    global\n */\n$.extend(FixedHeader.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * API methods\n\t */\n\n\t/**\n\t * Kill off FH and any events\n\t */\n\tdestroy: function () {\n\t\tvar dom = this.dom;\n\n\t\tthis.s.dt.off('.dtfc');\n\t\t$(window).off(this.s.namespace);\n\n\t\t// Remove clones of FC blockers\n\t\tif (dom.header.rightBlocker) {\n\t\t\tdom.header.rightBlocker.remove();\n\t\t}\n\t\tif (dom.header.leftBlocker) {\n\t\t\tdom.header.leftBlocker.remove();\n\t\t}\n\t\tif (dom.footer.rightBlocker) {\n\t\t\tdom.footer.rightBlocker.remove();\n\t\t}\n\t\tif (dom.footer.leftBlocker) {\n\t\t\tdom.footer.leftBlocker.remove();\n\t\t}\n\n\t\tif (this.c.header) {\n\t\t\tthis._modeChange('in-place', 'header', true);\n\t\t}\n\n\t\tif (this.c.footer && dom.tfoot.length) {\n\t\t\tthis._modeChange('in-place', 'footer', true);\n\t\t}\n\t},\n\n\t/**\n\t * Enable / disable the fixed elements\n\t *\n\t * @param  {boolean} enable `true` to enable, `false` to disable\n\t */\n\tenable: function (enable, update, type) {\n\t\tthis.s.enable = enable;\n\n\t\tthis.s.enableType = type;\n\n\t\tif (update || update === undefined) {\n\t\t\tthis._positions();\n\t\t\tthis._scroll(true);\n\t\t}\n\t},\n\n\t/**\n\t * Get enabled status\n\t */\n\tenabled: function () {\n\t\treturn this.s.enable;\n\t},\n\n\t/**\n\t * Set header offset\n\t *\n\t * @param  {int} new value for headerOffset\n\t */\n\theaderOffset: function (offset) {\n\t\tif (offset !== undefined) {\n\t\t\tthis.c.headerOffset = offset;\n\t\t\tthis.update();\n\t\t}\n\n\t\treturn this.c.headerOffset;\n\t},\n\n\t/**\n\t * Set footer offset\n\t *\n\t * @param  {int} new value for footerOffset\n\t */\n\tfooterOffset: function (offset) {\n\t\tif (offset !== undefined) {\n\t\t\tthis.c.footerOffset = offset;\n\t\t\tthis.update();\n\t\t}\n\n\t\treturn this.c.footerOffset;\n\t},\n\n\t/**\n\t * Recalculate the position of the fixed elements and force them into place\n\t */\n\tupdate: function (force) {\n\t\tvar table = this.s.dt.table().node();\n\n\t\t// Update should only do something if enabled by the dev.\n\t\tif (!this.s.enable && !this.s.autoDisable) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ($(table).is(':visible')) {\n\t\t\tthis.s.autoDisable = false;\n\t\t\tthis.enable(true, false);\n\t\t}\n\t\telse {\n\t\t\tthis.s.autoDisable = true;\n\t\t\tthis.enable(false, false);\n\t\t}\n\n\t\t// Don't update if header is not in the document atm (due to\n\t\t// async events)\n\t\tif ($(table).children('thead').length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._positions();\n\t\tthis._scroll(force !== undefined ? force : true);\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * FixedHeader constructor - adding the required event listeners and\n\t * simple initialisation\n\t *\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\n\t\t$(window)\n\t\t\t.on('scroll' + this.s.namespace, function () {\n\t\t\t\tthat._scroll();\n\t\t\t})\n\t\t\t.on(\n\t\t\t\t'resize' + this.s.namespace,\n\t\t\t\tDataTable.util.throttle(function () {\n\t\t\t\t\tthat.s.position.windowHeight = $(window).height();\n\t\t\t\t\tthat.update();\n\t\t\t\t}, 50)\n\t\t\t);\n\n\t\tvar autoHeader = $('.fh-fixedHeader');\n\t\tif (!this.c.headerOffset && autoHeader.length) {\n\t\t\tthis.c.headerOffset = autoHeader.outerHeight();\n\t\t}\n\n\t\tvar autoFooter = $('.fh-fixedFooter');\n\t\tif (!this.c.footerOffset && autoFooter.length) {\n\t\t\tthis.c.footerOffset = autoFooter.outerHeight();\n\t\t}\n\n\t\tdt.on(\n\t\t\t'column-reorder.dt.dtfc column-visibility.dt.dtfc column-sizing.dt.dtfc responsive-display.dt.dtfc',\n\t\t\tfunction (e, ctx) {\n\t\t\t\tthat.update();\n\t\t\t}\n\t\t).on('draw.dt.dtfc', function (e, ctx) {\n\t\t\t// For updates from our own table, don't reclone, but for all others, do\n\t\t\tthat.update(ctx === dt.settings()[0] ? false : true);\n\t\t});\n\n\t\tdt.on('destroy.dtfc', function () {\n\t\t\tthat.destroy();\n\t\t});\n\n\t\tthis._positions();\n\t\tthis._scroll();\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Clone a fixed item to act as a place holder for the original element\n\t * which is moved into a clone of the table element, and moved around the\n\t * document to give the fixed effect.\n\t *\n\t * @param  {string}  item  'header' or 'footer'\n\t * @param  {boolean} force Force the clone to happen, or allow automatic\n\t *   decision (reuse existing if available)\n\t * @private\n\t */\n\t_clone: function (item, force) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar itemDom = this.dom[item];\n\t\tvar itemElement = item === 'header' ? this.dom.thead : this.dom.tfoot;\n\n\t\t// If footer and scrolling is enabled then we don't clone\n\t\t// Instead the table's height is decreased accordingly - see `_scroll()`\n\t\tif (item === 'footer' && this._scrollEnabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!force && itemDom.floating) {\n\t\t\t// existing floating element - reuse it\n\t\t\titemDom.floating.removeClass('fixedHeader-floating fixedHeader-locked');\n\t\t}\n\t\telse {\n\t\t\tif (itemDom.floating) {\n\t\t\t\tif (itemDom.placeholder !== null) {\n\t\t\t\t\titemDom.placeholder.remove();\n\t\t\t\t}\n\t\t\t\tthis._unsize(item);\n\t\t\t\titemDom.floating.children().detach();\n\t\t\t\titemDom.floating.remove();\n\t\t\t}\n\n\t\t\tvar tableNode = $(dt.table().node());\n\t\t\tvar scrollBody = $(tableNode.parent());\n\t\t\tvar scrollEnabled = this._scrollEnabled();\n\n\t\t\titemDom.floating = $(dt.table().node().cloneNode(false))\n\t\t\t\t.attr('aria-hidden', 'true')\n\t\t\t\t.css({\n\t\t\t\t\t'table-layout': 'fixed',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0\n\t\t\t\t})\n\t\t\t\t.removeAttr('id')\n\t\t\t\t.append(itemElement);\n\n\t\t\titemDom.floatingParent\n\t\t\t\t.css({\n\t\t\t\t\twidth: scrollBody.width(),\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\theight: 'fit-content',\n\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\tleft: scrollEnabled ? tableNode.offset().left + scrollBody.scrollLeft() : 0\n\t\t\t\t})\n\t\t\t\t.css(\n\t\t\t\t\titem === 'header'\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttop: this.c.headerOffset,\n\t\t\t\t\t\t\t\tbottom: ''\n\t\t\t\t\t\t  }\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\ttop: '',\n\t\t\t\t\t\t\t\tbottom: this.c.footerOffset\n\t\t\t\t\t\t  }\n\t\t\t\t)\n\t\t\t\t.addClass(item === 'footer' ? 'dtfh-floatingparentfoot' : 'dtfh-floatingparenthead')\n\t\t\t\t.append(itemDom.floating)\n\t\t\t\t.appendTo('body');\n\n\t\t\tthis._stickyPosition(itemDom.floating, '-');\n\n\t\t\tvar scrollLeftUpdate = function () {\n\t\t\t\tvar scrollLeft = scrollBody.scrollLeft();\n\t\t\t\tthat.s.scrollLeft = { footer: scrollLeft, header: scrollLeft };\n\t\t\t\titemDom.floatingParent.scrollLeft(that.s.scrollLeft.header);\n\t\t\t};\n\n\t\t\tscrollLeftUpdate();\n\t\t\tscrollBody.off('scroll.dtfh').on('scroll.dtfh', scrollLeftUpdate);\n\n\t\t\t// Insert a fake thead/tfoot into the DataTable to stop it jumping around\n\t\t\titemDom.placeholder = itemElement.clone(false);\n\t\t\titemDom.placeholder.find('*[id]').removeAttr('id');\n\n\t\t\titemDom.host.prepend(itemDom.placeholder);\n\n\t\t\t// Clone widths\n\t\t\tthis._matchWidths(itemDom.placeholder, itemDom.floating);\n\t\t}\n\t},\n\n\t/**\n\t * This method sets the sticky position of the header elements to match fixed columns\n\t * @param {JQuery<HTMLElement>} el\n\t * @param {string} sign\n\t */\n\t_stickyPosition: function (el, sign) {\n\t\tif (this._scrollEnabled()) {\n\t\t\tvar that = this;\n\t\t\tvar rtl = $(that.s.dt.table().node()).css('direction') === 'rtl';\n\n\t\t\tel.find('th').each(function () {\n\t\t\t\t// Find out if fixed header has previously set this column\n\t\t\t\tif ($(this).css('position') === 'sticky') {\n\t\t\t\t\tvar right = $(this).css('right');\n\t\t\t\t\tvar left = $(this).css('left');\n\t\t\t\t\tif (right !== 'auto' && !rtl) {\n\t\t\t\t\t\t// New position either adds or dismisses the barWidth\n\t\t\t\t\t\tvar potential =\n\t\t\t\t\t\t\t+right.replace(/px/g, '') +\n\t\t\t\t\t\t\t(sign === '-' ? -1 : 1) * that.s.dt.settings()[0].oBrowser.barWidth;\n\t\t\t\t\t\t$(this).css('right', potential > 0 ? potential : 0);\n\t\t\t\t\t}\n\t\t\t\t\telse if (left !== 'auto' && rtl) {\n\t\t\t\t\t\tvar potential =\n\t\t\t\t\t\t\t+left.replace(/px/g, '') +\n\t\t\t\t\t\t\t(sign === '-' ? -1 : 1) * that.s.dt.settings()[0].oBrowser.barWidth;\n\t\t\t\t\t\t$(this).css('left', potential > 0 ? potential : 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Copy widths from the cells in one element to another. This is required\n\t * for the footer as the footer in the main table takes its sizes from the\n\t * header columns. That isn't present in the footer so to have it still\n\t * align correctly, the sizes need to be copied over. It is also required\n\t * for the header when auto width is not enabled\n\t *\n\t * @param  {jQuery} from Copy widths from\n\t * @param  {jQuery} to   Copy widths to\n\t * @private\n\t */\n\t_matchWidths: function (from, to) {\n\t\tvar get = function (name) {\n\t\t\treturn $(name, from)\n\t\t\t\t.map(function () {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t$(this)\n\t\t\t\t\t\t\t.css('width')\n\t\t\t\t\t\t\t.replace(/[^\\d\\.]/g, '') * 1\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t\t.toArray();\n\t\t};\n\n\t\tvar set = function (name, toWidths) {\n\t\t\t$(name, to).each(function (i) {\n\t\t\t\t$(this).css({\n\t\t\t\t\twidth: toWidths[i],\n\t\t\t\t\tminWidth: toWidths[i]\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tvar thWidths = get('th');\n\t\tvar tdWidths = get('td');\n\n\t\tset('th', thWidths);\n\t\tset('td', tdWidths);\n\t},\n\n\t/**\n\t * Remove assigned widths from the cells in an element. This is required\n\t * when inserting the footer back into the main table so the size is defined\n\t * by the header columns and also when auto width is disabled in the\n\t * DataTable.\n\t *\n\t * @param  {string} item The `header` or `footer`\n\t * @private\n\t */\n\t_unsize: function (item) {\n\t\tvar el = this.dom[item].floating;\n\n\t\tif (el && (item === 'footer' || (item === 'header' && !this.s.autoWidth))) {\n\t\t\t$('th, td', el).css({\n\t\t\t\twidth: '',\n\t\t\t\tminWidth: ''\n\t\t\t});\n\t\t}\n\t\telse if (el && item === 'header') {\n\t\t\t$('th, td', el).css('min-width', '');\n\t\t}\n\t},\n\n\t/**\n\t * Reposition the floating elements to take account of horizontal page\n\t * scroll\n\t *\n\t * @param  {string} item       The `header` or `footer`\n\t * @param  {int}    scrollLeft Document scrollLeft\n\t * @private\n\t */\n\t_horizontal: function (item, scrollLeft) {\n\t\tvar itemDom = this.dom[item];\n\t\tvar position = this.s.position;\n\t\tvar lastScrollLeft = this.s.scrollLeft;\n\n\t\tif (itemDom.floating && lastScrollLeft[item] !== scrollLeft) {\n\t\t\t// If scrolling is enabled we need to match the floating header to the body\n\t\t\tif (this._scrollEnabled()) {\n\t\t\t\tvar newScrollLeft = $($(this.s.dt.table().node()).parent()).scrollLeft();\n\t\t\t\titemDom.floating.scrollLeft(newScrollLeft);\n\t\t\t\titemDom.floatingParent.scrollLeft(newScrollLeft);\n\t\t\t}\n\n\t\t\tlastScrollLeft[item] = scrollLeft;\n\t\t}\n\t},\n\n\t/**\n\t * Change from one display mode to another. Each fixed item can be in one\n\t * of:\n\t *\n\t * * `in-place` - In the main DataTable\n\t * * `in` - Floating over the DataTable\n\t * * `below` - (Header only) Fixed to the bottom of the table body\n\t * * `above` - (Footer only) Fixed to the top of the table body\n\t *\n\t * @param  {string}  mode        Mode that the item should be shown in\n\t * @param  {string}  item        'header' or 'footer'\n\t * @param  {boolean} forceChange Force a redraw of the mode, even if already\n\t *     in that mode.\n\t * @private\n\t */\n\t_modeChange: function (mode, item, forceChange) {\n\t\tvar dt = this.s.dt;\n\t\tvar itemDom = this.dom[item];\n\t\tvar position = this.s.position;\n\n\t\t// Just determine if scroll is enabled once\n\t\tvar scrollEnabled = this._scrollEnabled();\n\n\t\t// If footer and scrolling is enabled then we don't clone\n\t\t// Instead the table's height is decreased accordingly - see `_scroll()`\n\t\tif (item === 'footer' && scrollEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// It isn't trivial to add a !important css attribute...\n\t\tvar importantWidth = function (w) {\n\t\t\titemDom.floating.attr('style', function (i, s) {\n\t\t\t\treturn (s || '') + 'width: ' + w + 'px !important;';\n\t\t\t});\n\n\t\t\t// If not scrolling also have to update the floatingParent\n\t\t\tif (!scrollEnabled) {\n\t\t\t\titemDom.floatingParent.attr('style', function (i, s) {\n\t\t\t\t\treturn (s || '') + 'width: ' + w + 'px !important;';\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t// Record focus. Browser's will cause input elements to loose focus if\n\t\t// they are inserted else where in the doc\n\t\tvar tablePart = this.dom[item === 'footer' ? 'tfoot' : 'thead'];\n\t\tvar focus = $.contains(tablePart[0], document.activeElement)\n\t\t\t? document.activeElement\n\t\t\t: null;\n\t\tvar scrollBody = $($(this.s.dt.table().node()).parent());\n\n\t\tif (mode === 'in-place') {\n\t\t\t// Insert the header back into the table's real header\n\t\t\tif (itemDom.placeholder) {\n\t\t\t\titemDom.placeholder.remove();\n\t\t\t\titemDom.placeholder = null;\n\t\t\t}\n\n\t\t\tthis._unsize(item);\n\n\t\t\tif (item === 'header') {\n\t\t\t\titemDom.host.prepend(tablePart);\n\t\t\t}\n\t\t\telse {\n\t\t\t\titemDom.host.append(tablePart);\n\t\t\t}\n\n\t\t\tif (itemDom.floating) {\n\t\t\t\titemDom.floating.remove();\n\t\t\t\titemDom.floating = null;\n\t\t\t\tthis._stickyPosition(itemDom.host, '+');\n\t\t\t}\n\n\t\t\tif (itemDom.floatingParent) {\n\t\t\t\titemDom.floatingParent.remove();\n\t\t\t}\n\n\t\t\t$($(itemDom.host.parent()).parent()).scrollLeft(scrollBody.scrollLeft());\n\t\t}\n\t\telse if (mode === 'in') {\n\t\t\t// Remove the header from the read header and insert into a fixed\n\t\t\t// positioned floating table clone\n\t\t\tthis._clone(item, forceChange);\n\n\t\t\t// Get useful position values\n\t\t\tvar scrollOffset = scrollBody.offset();\n\t\t\tvar windowTop = $(document).scrollTop();\n\t\t\tvar windowHeight = $(window).height();\n\t\t\tvar windowBottom = windowTop + windowHeight;\n\t\t\tvar bodyTop = scrollEnabled ? scrollOffset.top : position.tbodyTop;\n\t\t\tvar bodyBottom = scrollEnabled\n\t\t\t\t? scrollOffset.top + scrollBody.outerHeight()\n\t\t\t\t: position.tfootTop;\n\n\t\t\t// Calculate the amount that the footer or header needs to be shuffled\n\t\t\tvar shuffle =\n\t\t\t\titem === 'footer'\n\t\t\t\t\t? // footer and top of body isn't on screen\n\t\t\t\t\t  bodyTop > windowBottom\n\t\t\t\t\t\t? // Yes - push the footer below\n\t\t\t\t\t\t  position.tfootHeight\n\t\t\t\t\t\t: // No - bottom set to the gap between the top of the body and the bottom of the window\n\t\t\t\t\t\t  bodyTop + position.tfootHeight - windowBottom\n\t\t\t\t\t: // Otherwise must be a header so get the difference from the bottom of the\n\t\t\t\t\t  //  desired floating header and the bottom of the table body\n\t\t\t\t\t  windowTop + this.c.headerOffset + position.theadHeight - bodyBottom;\n\n\t\t\t// Set the top or bottom based off of the offset and the shuffle value\n\t\t\tvar prop = item === 'header' ? 'top' : 'bottom';\n\t\t\tvar val = this.c[item + 'Offset'] - (shuffle > 0 ? shuffle : 0);\n\n\t\t\titemDom.floating.addClass('fixedHeader-floating');\n\t\t\titemDom.floatingParent\n\t\t\t\t.css(prop, val)\n\t\t\t\t.css({\n\t\t\t\t\tleft: position.left,\n\t\t\t\t\theight: item === 'header' ? position.theadHeight : position.tfootHeight,\n\t\t\t\t\t'z-index': 2\n\t\t\t\t})\n\t\t\t\t.append(itemDom.floating);\n\n\t\t\timportantWidth(position.width);\n\n\t\t\tif (item === 'footer') {\n\t\t\t\titemDom.floating.css('top', '');\n\t\t\t}\n\t\t}\n\t\telse if (mode === 'below') {\n\t\t\t// only used for the header\n\t\t\t// Fix the position of the floating header at base of the table body\n\t\t\tthis._clone(item, forceChange);\n\n\t\t\titemDom.floating.addClass('fixedHeader-locked');\n\t\t\titemDom.floatingParent.css({\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: position.tfootTop - position.theadHeight,\n\t\t\t\tleft: position.left + 'px'\n\t\t\t});\n\n\t\t\timportantWidth(position.width);\n\t\t}\n\t\telse if (mode === 'above') {\n\t\t\t// only used for the footer\n\t\t\t// Fix the position of the floating footer at top of the table body\n\t\t\tthis._clone(item, forceChange);\n\n\t\t\titemDom.floating.addClass('fixedHeader-locked');\n\t\t\titemDom.floatingParent.css({\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: position.tbodyTop,\n\t\t\t\tleft: position.left + 'px'\n\t\t\t});\n\n\t\t\timportantWidth(position.width);\n\t\t}\n\n\t\t// Restore focus if it was lost\n\t\tif (focus && focus !== document.activeElement) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tfocus.focus();\n\t\t\t}, 10);\n\t\t}\n\n\t\tthis.s.scrollLeft.header = -1;\n\t\tthis.s.scrollLeft.footer = -1;\n\t\tthis.s[item + 'Mode'] = mode;\n\t},\n\n\t/**\n\t * Cache the positional information that is required for the mode\n\t * calculations that FixedHeader performs.\n\t *\n\t * @private\n\t */\n\t_positions: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar table = dt.table();\n\t\tvar position = this.s.position;\n\t\tvar dom = this.dom;\n\t\tvar tableNode = $(table.node());\n\t\tvar scrollEnabled = this._scrollEnabled();\n\n\t\t// Need to use the header and footer that are in the main table,\n\t\t// regardless of if they are clones, since they hold the positions we\n\t\t// want to measure from\n\t\tvar thead = $(dt.table().header());\n\t\tvar tfoot = $(dt.table().footer());\n\t\tvar tbody = dom.tbody;\n\t\tvar scrollBody = tableNode.parent();\n\n\t\tposition.visible = tableNode.is(':visible');\n\t\tposition.width = tableNode.outerWidth();\n\t\tposition.left = tableNode.offset().left;\n\t\tposition.theadTop = thead.offset().top;\n\t\tposition.tbodyTop = scrollEnabled ? scrollBody.offset().top : tbody.offset().top;\n\t\tposition.tbodyHeight = scrollEnabled ? scrollBody.outerHeight() : tbody.outerHeight();\n\t\tposition.theadHeight = thead.outerHeight();\n\t\tposition.theadBottom = position.theadTop + position.theadHeight;\n\n\t\tif (tfoot.length) {\n\t\t\tposition.tfootTop = position.tbodyTop + position.tbodyHeight; //tfoot.offset().top;\n\t\t\tposition.tfootBottom = position.tfootTop + tfoot.outerHeight();\n\t\t\tposition.tfootHeight = tfoot.outerHeight();\n\t\t}\n\t\telse {\n\t\t\tposition.tfootTop = position.tbodyTop + tbody.outerHeight();\n\t\t\tposition.tfootBottom = position.tfootTop;\n\t\t\tposition.tfootHeight = position.tfootTop;\n\t\t}\n\t},\n\n\t/**\n\t * Mode calculation - determine what mode the fixed items should be placed\n\t * into.\n\t *\n\t * @param  {boolean} forceChange Force a redraw of the mode, even if already\n\t *     in that mode.\n\t * @private\n\t */\n\t_scroll: function (forceChange) {\n\t\tif (this.s.dt.settings()[0].bDestroying) {\n\t\t\treturn;\n\t\t}\n\n\t\t// ScrollBody details\n\t\tvar scrollEnabled = this._scrollEnabled();\n\t\tvar scrollBody = $(this.s.dt.table().node()).parent();\n\t\tvar scrollOffset = scrollBody.offset();\n\t\tvar scrollHeight = scrollBody.outerHeight();\n\n\t\t// Window details\n\t\tvar windowLeft = $(document).scrollLeft();\n\t\tvar windowTop = $(document).scrollTop();\n\t\tvar windowHeight = $(window).height();\n\t\tvar windowBottom = windowHeight + windowTop;\n\n\t\tvar position = this.s.position;\n\t\tvar headerMode, footerMode;\n\n\t\t// Body Details\n\t\tvar bodyTop = scrollEnabled ? scrollOffset.top : position.tbodyTop;\n\t\tvar bodyLeft = scrollEnabled ? scrollOffset.left : position.left;\n\t\tvar bodyBottom = scrollEnabled ? scrollOffset.top + scrollHeight : position.tfootTop;\n\t\tvar bodyWidth = scrollEnabled ? scrollBody.outerWidth() : position.tbodyWidth;\n\n\t\tvar windowBottom = windowTop + windowHeight;\n\n\t\tif (this.c.header) {\n\t\t\tif (!this.s.enable) {\n\t\t\t\theaderMode = 'in-place';\n\t\t\t}\n\t\t\t// The header is in it's normal place if the body top is lower than\n\t\t\t//  the scroll of the window plus the headerOffset and the height of the header\n\t\t\telse if (\n\t\t\t\t!position.visible ||\n\t\t\t\twindowTop + this.c.headerOffset + position.theadHeight <= bodyTop\n\t\t\t) {\n\t\t\t\theaderMode = 'in-place';\n\t\t\t}\n\t\t\t// The header should be floated if\n\t\t\telse if (\n\t\t\t\t// The scrolling plus the header offset plus the height of the header is lower than the top of the body\n\t\t\t\twindowTop + this.c.headerOffset + position.theadHeight > bodyTop &&\n\t\t\t\t// And the scrolling at the top plus the header offset is above the bottom of the body\n\t\t\t\twindowTop + this.c.headerOffset + position.theadHeight < bodyBottom\n\t\t\t) {\n\t\t\t\theaderMode = 'in';\n\t\t\t\tvar scrollBody = $($(this.s.dt.table().node()).parent());\n\n\t\t\t\t// Further to the above, If the scrolling plus the header offset plus the header height is lower\n\t\t\t\t// than the bottom of the table a shuffle is required so have to force the calculation\n\t\t\t\tif (\n\t\t\t\t\twindowTop + this.c.headerOffset + position.theadHeight > bodyBottom ||\n\t\t\t\t\tthis.dom.header.floatingParent === undefined\n\t\t\t\t) {\n\t\t\t\t\tforceChange = true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.dom.header.floatingParent\n\t\t\t\t\t\t.css({\n\t\t\t\t\t\t\ttop: this.c.headerOffset,\n\t\t\t\t\t\t\tposition: 'fixed'\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.append(this.dom.header.floating);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Anything else and the view is below the table\n\t\t\telse {\n\t\t\t\theaderMode = 'below';\n\t\t\t}\n\n\t\t\tif (forceChange || headerMode !== this.s.headerMode) {\n\t\t\t\tthis._modeChange(headerMode, 'header', forceChange);\n\t\t\t}\n\n\t\t\tthis._horizontal('header', windowLeft);\n\t\t}\n\n\t\tvar header = {\n\t\t\toffset: { top: 0, left: 0 },\n\t\t\theight: 0\n\t\t};\n\t\tvar footer = {\n\t\t\toffset: { top: 0, left: 0 },\n\t\t\theight: 0\n\t\t};\n\n\t\tif (this.c.footer && this.dom.tfoot.length) {\n\t\t\tif (!this.s.enable) {\n\t\t\t\tfooterMode = 'in-place';\n\t\t\t}\n\t\t\telse if (\n\t\t\t\t!position.visible ||\n\t\t\t\tposition.tfootBottom + this.c.footerOffset <= windowBottom\n\t\t\t) {\n\t\t\t\tfooterMode = 'in-place';\n\t\t\t}\n\t\t\telse if (\n\t\t\t\tbodyBottom + position.tfootHeight + this.c.footerOffset > windowBottom &&\n\t\t\t\tbodyTop + this.c.footerOffset < windowBottom\n\t\t\t) {\n\t\t\t\tfooterMode = 'in';\n\t\t\t\tforceChange = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfooterMode = 'above';\n\t\t\t}\n\n\t\t\tif (forceChange || footerMode !== this.s.footerMode) {\n\t\t\t\tthis._modeChange(footerMode, 'footer', forceChange);\n\t\t\t}\n\n\t\t\tthis._horizontal('footer', windowLeft);\n\n\t\t\tvar getOffsetHeight = function (el) {\n\t\t\t\treturn {\n\t\t\t\t\toffset: el.offset(),\n\t\t\t\t\theight: el.outerHeight()\n\t\t\t\t};\n\t\t\t};\n\n\t\t\theader = this.dom.header.floating\n\t\t\t\t? getOffsetHeight(this.dom.header.floating)\n\t\t\t\t: getOffsetHeight(this.dom.thead);\n\t\t\tfooter = this.dom.footer.floating\n\t\t\t\t? getOffsetHeight(this.dom.footer.floating)\n\t\t\t\t: getOffsetHeight(this.dom.tfoot);\n\n\t\t\t// If scrolling is enabled and the footer is off the screen\n\t\t\tif (scrollEnabled && footer.offset.top > windowTop) {\n\t\t\t\t// && footer.offset.top >= windowBottom) {\n\t\t\t\t// Calculate the gap between the top of the scrollBody and the top of the window\n\t\t\t\tvar overlap = windowTop - scrollOffset.top;\n\t\t\t\t// The new height is the bottom of the window\n\t\t\t\tvar newHeight =\n\t\t\t\t\twindowBottom +\n\t\t\t\t\t// If the gap between the top of the scrollbody and the window is more than\n\t\t\t\t\t//  the height of the header then the top of the table is still visible so add that gap\n\t\t\t\t\t// Doing this has effectively calculated the height from the top of the table to the bottom of the current page\n\t\t\t\t\t(overlap > -header.height ? overlap : 0) -\n\t\t\t\t\t// Take from that\n\t\t\t\t\t// The top of the header plus\n\t\t\t\t\t(header.offset.top +\n\t\t\t\t\t\t// The header height if the standard header is present\n\t\t\t\t\t\t(overlap < -header.height ? header.height : 0) +\n\t\t\t\t\t\t// And the height of the footer\n\t\t\t\t\t\tfooter.height);\n\n\t\t\t\t// Don't want a negative height\n\t\t\t\tif (newHeight < 0) {\n\t\t\t\t\tnewHeight = 0;\n\t\t\t\t}\n\n\t\t\t\t// At the end of the above calculation the space between the header (top of the page if floating)\n\t\t\t\t// and the point just above the footer should be the new value for the height of the table.\n\t\t\t\tscrollBody.outerHeight(newHeight);\n\n\t\t\t\t// Need some rounding here as sometimes very small decimal places are encountered\n\t\t\t\t// If the actual height is bigger or equal to the height we just applied then the footer is \"Floating\"\n\t\t\t\tif (Math.round(scrollBody.outerHeight()) >= Math.round(newHeight)) {\n\t\t\t\t\t$(this.dom.tfoot.parent()).addClass('fixedHeader-floating');\n\t\t\t\t}\n\t\t\t\t// Otherwise max-width has kicked in so it is not floating\n\t\t\t\telse {\n\t\t\t\t\t$(this.dom.tfoot.parent()).removeClass('fixedHeader-floating');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.dom.header.floating) {\n\t\t\tthis.dom.header.floatingParent.css('left', bodyLeft - windowLeft);\n\t\t}\n\t\tif (this.dom.footer.floating) {\n\t\t\tthis.dom.footer.floatingParent.css('left', bodyLeft - windowLeft);\n\t\t}\n\n\t\t// If fixed columns is being used on this table then the blockers need to be copied across\n\t\t// Cloning these is cleaner than creating as our own as it will keep consistency with fixedColumns automatically\n\t\t// ASSUMING that the class remains the same\n\t\tif (this.s.dt.settings()[0]._fixedColumns !== undefined) {\n\t\t\tvar adjustBlocker = function (side, end, el) {\n\t\t\t\tif (el === undefined) {\n\t\t\t\t\tvar blocker = $('div.dtfc-' + side + '-' + end + '-blocker');\n\n\t\t\t\t\tel = blocker.length === 0 ? null : blocker.clone().css('z-index', 1);\n\t\t\t\t}\n\n\t\t\t\tif (el !== null) {\n\t\t\t\t\tif (headerMode === 'in' || headerMode === 'below') {\n\t\t\t\t\t\tel.appendTo('body').css({\n\t\t\t\t\t\t\ttop: end === 'top' ? header.offset.top : footer.offset.top,\n\t\t\t\t\t\t\tleft: side === 'right' ? bodyLeft + bodyWidth - el.width() : bodyLeft\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tel.detach();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn el;\n\t\t\t};\n\n\t\t\t// Adjust all blockers\n\t\t\tthis.dom.header.rightBlocker = adjustBlocker(\n\t\t\t\t'right',\n\t\t\t\t'top',\n\t\t\t\tthis.dom.header.rightBlocker\n\t\t\t);\n\t\t\tthis.dom.header.leftBlocker = adjustBlocker('left', 'top', this.dom.header.leftBlocker);\n\t\t\tthis.dom.footer.rightBlocker = adjustBlocker(\n\t\t\t\t'right',\n\t\t\t\t'bottom',\n\t\t\t\tthis.dom.footer.rightBlocker\n\t\t\t);\n\t\t\tthis.dom.footer.leftBlocker = adjustBlocker(\n\t\t\t\t'left',\n\t\t\t\t'bottom',\n\t\t\t\tthis.dom.footer.leftBlocker\n\t\t\t);\n\t\t}\n\t},\n\n\t/**\n\t * Function to check if scrolling is enabled on the table or not\n\t * @returns Boolean value indicating if scrolling on the table is enabled or not\n\t */\n\t_scrollEnabled: function () {\n\t\tvar oScroll = this.s.dt.settings()[0].oScroll;\n\t\tif (oScroll.sY !== '' || oScroll.sX !== '') {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n});\n\n/**\n * Version\n * @type {String}\n * @static\n */\nFixedHeader.version = '3.4.0';\n\n/**\n * Defaults\n * @type {Object}\n * @static\n */\nFixedHeader.defaults = {\n\theader: true,\n\tfooter: false,\n\theaderOffset: 0,\n\tfooterOffset: 0\n};\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables interfaces\n */\n\n// Attach for constructor access\n$.fn.dataTable.FixedHeader = FixedHeader;\n$.fn.DataTable.FixedHeader = FixedHeader;\n\n// DataTables creation - check if the FixedHeader option has been defined on the\n// table and if so, initialise\n$(document).on('init.dt.dtfh', function (e, settings, json) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.fixedHeader;\n\tvar defaults = DataTable.defaults.fixedHeader;\n\n\tif ((init || defaults) && !settings._fixedHeader) {\n\t\tvar opts = $.extend({}, defaults, init);\n\n\t\tif (init !== false) {\n\t\t\tnew FixedHeader(settings, opts);\n\t\t}\n\t}\n});\n\n// DataTables API methods\nDataTable.Api.register('fixedHeader()', function () {});\n\nDataTable.Api.register('fixedHeader.adjust()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tvar fh = ctx._fixedHeader;\n\n\t\tif (fh) {\n\t\t\tfh.update();\n\t\t}\n\t});\n});\n\nDataTable.Api.register('fixedHeader.enable()', function (flag) {\n\treturn this.iterator('table', function (ctx) {\n\t\tvar fh = ctx._fixedHeader;\n\n\t\tflag = flag !== undefined ? flag : true;\n\t\tif (fh && flag !== fh.enabled()) {\n\t\t\tfh.enable(flag);\n\t\t}\n\t});\n});\n\nDataTable.Api.register('fixedHeader.enabled()', function () {\n\tif (this.context.length) {\n\t\tvar fh = this.context[0]._fixedHeader;\n\n\t\tif (fh) {\n\t\t\treturn fh.enabled();\n\t\t}\n\t}\n\n\treturn false;\n});\n\nDataTable.Api.register('fixedHeader.disable()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tvar fh = ctx._fixedHeader;\n\n\t\tif (fh && fh.enabled()) {\n\t\t\tfh.enable(false);\n\t\t}\n\t});\n});\n\n$.each(['header', 'footer'], function (i, el) {\n\tDataTable.Api.register('fixedHeader.' + el + 'Offset()', function (offset) {\n\t\tvar ctx = this.context;\n\n\t\tif (offset === undefined) {\n\t\t\treturn ctx.length && ctx[0]._fixedHeader\n\t\t\t\t? ctx[0]._fixedHeader[el + 'Offset']()\n\t\t\t\t: undefined;\n\t\t}\n\n\t\treturn this.iterator('table', function (ctx) {\n\t\t\tvar fh = ctx._fixedHeader;\n\n\t\t\tif (fh) {\n\t\t\t\tfh[el + 'Offset'](offset);\n\t\t\t}\n\t\t});\n\t});\n});\n\n\nreturn DataTable;\n}));\n\n\n/*! KeyTable 2.11.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     KeyTable\n * @description Spreadsheet like keyboard navigation for DataTables\n * @version     2.11.0\n * @file        dataTables.keyTable.js\n * @author      SpryMedia Ltd\n * @contact     datatables.net\n * @copyright   Copyright SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\nvar namespaceCounter = 0;\nvar editorNamespaceCounter = 0;\n\nvar KeyTable = function (dt, opts) {\n\t// Sanity check that we are using DataTables 1.10 or newer\n\tif (!DataTable.versionCheck || !DataTable.versionCheck('1.10.8')) {\n\t\tthrow 'KeyTable requires DataTables 1.10.8 or newer';\n\t}\n\n\t// User and defaults configuration object\n\tthis.c = $.extend(true, {}, DataTable.defaults.keyTable, KeyTable.defaults, opts);\n\n\t// Internal settings\n\tthis.s = {\n\t\t/** @type {DataTable.Api} DataTables' API instance */\n\t\tdt: new DataTable.Api(dt),\n\n\t\t/** Indicate when the DataTable is redrawing - take no action on key presses */\n\t\tdtDrawing: false,\n\n\t\tenable: true,\n\n\t\t/** @type {bool} Flag for if a draw is triggered by focus */\n\t\tfocusDraw: false,\n\n\t\t/** @type {bool} Flag to indicate when waiting for a draw to happen.\n\t\t *   Will ignore key presses at this point\n\t\t */\n\t\twaitingForDraw: false,\n\n\t\t/** @type {object} Information about the last cell that was focused */\n\t\tlastFocus: null,\n\n\t\t/** @type {string} Unique namespace per instance */\n\t\tnamespace: '.keyTable-' + namespaceCounter++,\n\n\t\t/** @type {Node} Input element for tabbing into the table */\n\t\ttabInput: null\n\t};\n\n\t// DOM items\n\tthis.dom = {};\n\n\t// Check if row reorder has already been initialised on this table\n\tvar settings = this.s.dt.settings()[0];\n\tvar exisiting = settings.keytable;\n\tif (exisiting) {\n\t\treturn exisiting;\n\t}\n\n\tsettings.keytable = this;\n\tthis._constructor();\n};\n\n$.extend(KeyTable.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * API methods for DataTables API interface\n\t */\n\n\t/**\n\t * Blur the table's cell focus\n\t */\n\tblur: function () {\n\t\tthis._blur();\n\t},\n\n\t/**\n\t * Enable cell focus for the table\n\t *\n\t * @param  {string} state Can be `true`, `false` or `-string navigation-only`\n\t */\n\tenable: function (state) {\n\t\tthis.s.enable = state;\n\t},\n\n\t/**\n\t * Get enable status\n\t */\n\tenabled: function () {\n\t\treturn this.s.enable;\n\t},\n\n\t/**\n\t * Focus on a cell\n\t * @param  {integer} row    Row index\n\t * @param  {integer} column Column index\n\t */\n\tfocus: function (row, column) {\n\t\tthis._focus(this.s.dt.cell(row, column));\n\t},\n\n\t/**\n\t * Is the cell focused\n\t * @param  {object} cell Cell index to check\n\t * @returns {boolean} true if focused, false otherwise\n\t */\n\tfocused: function (cell) {\n\t\tvar lastFocus = this.s.lastFocus;\n\n\t\tif (!lastFocus) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar lastIdx = this.s.lastFocus.cell.index();\n\t\treturn cell.row === lastIdx.row && cell.column === lastIdx.column;\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialise the KeyTable instance\n\t *\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tthis._tabInput();\n\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar table = $(dt.table().node());\n\t\tvar namespace = this.s.namespace;\n\t\tvar editorBlock = false;\n\n\t\t// Need to be able to calculate the cell positions relative to the table\n\t\tif (table.css('position') === 'static') {\n\t\t\ttable.css('position', 'relative');\n\t\t}\n\n\t\t// Click to focus\n\t\t$(dt.table().body()).on('click' + namespace, 'th, td', function (e) {\n\t\t\tif (that.s.enable === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar cell = dt.cell(this);\n\n\t\t\tif (!cell.any()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthat._focus(cell, null, false, e);\n\t\t});\n\n\t\t// Key events\n\t\t$(document).on('keydown' + namespace, function (e) {\n\t\t\tif (!editorBlock && !that.s.dtDrawing) {\n\t\t\t\tthat._key(e);\n\t\t\t}\n\t\t\telse {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\t// Click blur\n\t\tif (this.c.blurable) {\n\t\t\t$(document).on('mousedown' + namespace, function (e) {\n\t\t\t\t// Click on the search input will blur focus\n\t\t\t\tif ($(e.target).parents('.dataTables_filter, .dt-search').length) {\n\t\t\t\t\tthat._blur();\n\t\t\t\t}\n\n\t\t\t\t// If the click was inside the DataTables container, don't blur\n\t\t\t\tif ($(e.target).parents().filter(dt.table().container()).length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Don't blur in Editor form\n\t\t\t\tif ($(e.target).parents('div.DTE').length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Or an Editor date input\n\t\t\t\tif (\n\t\t\t\t\t$(e.target).parents('div.editor-datetime').length ||\n\t\t\t\t\t$(e.target).parents('div.dt-datetime').length\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//If the click was inside the fixed columns container, don't blur\n\t\t\t\tif ($(e.target).parents().filter('.DTFC_Cloned').length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthat._blur();\n\t\t\t});\n\t\t}\n\n\t\tif (this.c.editor) {\n\t\t\tvar editor = this.c.editor;\n\n\t\t\t// Need to disable KeyTable when the main editor is shown\n\t\t\teditor.on('open.keyTableMain', function (e, mode, action) {\n\t\t\t\tif (mode !== 'inline' && that.s.enable) {\n\t\t\t\t\tthat.enable(false);\n\n\t\t\t\t\teditor.one('close' + namespace, function () {\n\t\t\t\t\t\tthat.enable(true);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (this.c.editOnFocus) {\n\t\t\t\tdt.on(\n\t\t\t\t\t'key-focus' + namespace + ' key-refocus' + namespace,\n\t\t\t\t\tfunction (e, dt, cell, orig) {\n\t\t\t\t\t\tthat._editor(null, orig, true);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Activate Editor when a key is pressed (will be ignored, if\n\t\t\t// already active).\n\t\t\tdt.on('key' + namespace, function (e, dt, key, cell, orig) {\n\t\t\t\tthat._editor(key, orig, false);\n\t\t\t});\n\n\t\t\t// Active editing on double click - it will already have focus from\n\t\t\t// the click event handler above\n\t\t\t$(dt.table().body()).on('dblclick' + namespace, 'th, td', function (e) {\n\t\t\t\tif (that.s.enable === false) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar cell = dt.cell(this);\n\n\t\t\t\tif (!cell.any()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (that.s.lastFocus && this !== that.s.lastFocus.cell.node()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthat._editor(null, e, true);\n\t\t\t});\n\n\t\t\t// While Editor is busy processing, we don't want to process any key events\n\t\t\teditor\n\t\t\t\t.on('preSubmit', function () {\n\t\t\t\t\teditorBlock = true;\n\t\t\t\t})\n\t\t\t\t.on('preSubmitCancelled', function () {\n\t\t\t\t\teditorBlock = false;\n\t\t\t\t})\n\t\t\t\t.on('submitComplete', function () {\n\t\t\t\t\teditorBlock = false;\n\t\t\t\t});\n\t\t}\n\n\t\t// Stave saving\n\t\t// if ( dt.settings()[0].oFeatures.bStateSave ) {\n\t\tdt.on('stateSaveParams' + namespace, function (e, s, d) {\n\t\t\td.keyTable = that.s.lastFocus ? that.s.lastFocus.cell.index() : null;\n\t\t});\n\t\t// }\n\n\t\tdt.on('column-visibility' + namespace, function (e) {\n\t\t\tthat._tabInput();\n\t\t});\n\n\t\tdt.on('column-reorder' + namespace, function (e, s, d) {\n\t\t\t// Need to update the last focus cell's index\n\t\t\tvar lastFocus = that.s.lastFocus;\n\n\t\t\tif (lastFocus && lastFocus.cell) {\n\t\t\t\tvar curr = lastFocus.relative.column;\n\n\t\t\t\t// Manipulate the API instance to correct the column index\n\t\t\t\tlastFocus.cell[0][0].column = d.mapping.indexOf(curr);\n\t\t\t\tlastFocus.relative.column = d.mapping.indexOf(curr);\n\t\t\t}\n\t\t});\n\n\t\t// When the table is about to do a draw we need to block key\n\t\t// handling. This is only important for async draws - i.e.\n\t\t// server-side processing.\n\t\tdt.on('preDraw' + namespace + ' scroller-will-draw' + namespace, function (e) {\n\t\t\tthat.s.dtDrawing = true;\n\t\t});\n\n\t\t// Redraw - retain focus on the current cell\n\t\tdt.on('draw' + namespace, function (e) {\n\t\t\tthat.s.dtDrawing = false;\n\n\t\t\tthat._tabInput();\n\n\t\t\tif (that.s.focusDraw) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar lastFocus = that.s.lastFocus;\n\n\t\t\tif (lastFocus) {\n\t\t\t\tvar relative = that.s.lastFocus.relative;\n\t\t\t\tvar info = dt.page.info();\n\t\t\t\tvar row = relative.row;\n\n\t\t\t\tif (info.recordsDisplay === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If the refocus is outside the current draw zone -\n\t\t\t\t// don't attempt to refocus onto it\n\t\t\t\tif (row < info.start || row > info.start + info.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Reverse if needed\n\t\t\t\tif (row >= info.recordsDisplay) {\n\t\t\t\t\trow = info.recordsDisplay - 1;\n\t\t\t\t}\n\n\t\t\t\tthat._focus(row, relative.column, true, e);\n\t\t\t}\n\t\t});\n\n\t\t// Clipboard support\n\t\tif (this.c.clipboard) {\n\t\t\tthis._clipboard();\n\t\t}\n\n\t\tdt.on('destroy' + namespace, function () {\n\t\t\tthat._blur(true);\n\n\t\t\t// Event tidy up\n\t\t\tdt.off(namespace);\n\n\t\t\t$(dt.table().body())\n\t\t\t\t.off('click' + namespace, 'th, td')\n\t\t\t\t.off('dblclick' + namespace, 'th, td');\n\n\t\t\t$(document)\n\t\t\t\t.off('mousedown' + namespace)\n\t\t\t\t.off('keydown' + namespace)\n\t\t\t\t.off('copy' + namespace)\n\t\t\t\t.off('paste' + namespace);\n\t\t});\n\n\t\t// Initial focus comes from state or options\n\t\tvar state = dt.state.loaded();\n\n\t\tif (state && state.keyTable) {\n\t\t\t// Wait until init is done\n\t\t\tdt.one('init', function () {\n\t\t\t\tvar cell = dt.cell(state.keyTable);\n\n\t\t\t\t// Ensure that the saved cell still exists\n\t\t\t\tif (cell.any()) {\n\t\t\t\t\tcell.focus();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse if (this.c.focus) {\n\t\t\tdt.cell(this.c.focus).focus();\n\t\t}\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Blur the control\n\t *\n\t * @param {boolean} [noEvents=false] Don't trigger updates / events (for destroying)\n\t * @private\n\t */\n\t_blur: function (noEvents) {\n\t\tif (!this.s.enable || !this.s.lastFocus) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar cell = this.s.lastFocus.cell;\n\n\t\t$(cell.node()).removeClass(this.c.className);\n\t\tthis.s.lastFocus = null;\n\n\t\tif (!noEvents) {\n\t\t\tthis._updateFixedColumns(cell.index().column);\n\n\t\t\tthis._emitEvent('key-blur', [this.s.dt, cell]);\n\t\t}\n\t},\n\n\t/**\n\t * Clipboard interaction handlers\n\t *\n\t * @private\n\t */\n\t_clipboard: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar that = this;\n\t\tvar namespace = this.s.namespace;\n\n\t\t// IE8 doesn't support getting selected text\n\t\tif (!window.getSelection) {\n\t\t\treturn;\n\t\t}\n\n\t\t$(document).on('copy' + namespace, function (ejq) {\n\t\t\tvar e = ejq.originalEvent;\n\t\t\tvar selection = window.getSelection().toString();\n\t\t\tvar focused = that.s.lastFocus;\n\n\t\t\t// Only copy cell text to clipboard if there is no other selection\n\t\t\t// and there is a focused cell\n\t\t\tif (!selection && focused) {\n\t\t\t\te.clipboardData.setData(\n\t\t\t\t\t'text/plain',\n\t\t\t\t\tfocused.cell.render(that.c.clipboardOrthogonal)\n\t\t\t\t);\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\t$(document).on('paste' + namespace, function (ejq) {\n\t\t\tvar e = ejq.originalEvent;\n\t\t\tvar focused = that.s.lastFocus;\n\t\t\tvar activeEl = document.activeElement;\n\t\t\tvar editor = that.c.editor;\n\t\t\tvar pastedText;\n\n\t\t\tif (focused && (!activeEl || activeEl.nodeName.toLowerCase() === 'body')) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (window.clipboardData && window.clipboardData.getData) {\n\t\t\t\t\t// IE\n\t\t\t\t\tpastedText = window.clipboardData.getData('Text');\n\t\t\t\t}\n\t\t\t\telse if (e.clipboardData && e.clipboardData.getData) {\n\t\t\t\t\t// Everything else\n\t\t\t\t\tpastedText = e.clipboardData.getData('text/plain');\n\t\t\t\t}\n\n\t\t\t\tif (editor) {\n\t\t\t\t\t// Got Editor - need to activate inline editing,\n\t\t\t\t\t// set the value and submit\n\t\t\t\t\tvar options = that._inlineOptions(focused.cell.index());\n\n\t\t\t\t\teditor\n\t\t\t\t\t\t.inline(options.cell, options.field, options.options)\n\t\t\t\t\t\t.set(editor.displayed()[0], pastedText)\n\t\t\t\t\t\t.submit();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// No editor, so just dump the data in\n\t\t\t\t\tfocused.cell.data(pastedText);\n\t\t\t\t\tdt.draw(false);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Get an array of the column indexes that KeyTable can operate on. This\n\t * is a merge of the user supplied columns and the visible columns.\n\t *\n\t * @private\n\t */\n\t_columns: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar user = dt.columns(this.c.columns).indexes();\n\t\tvar out = [];\n\n\t\tdt.columns(':visible').every(function (i) {\n\t\t\tif (user.indexOf(i) !== -1) {\n\t\t\t\tout.push(i);\n\t\t\t}\n\t\t});\n\n\t\treturn out;\n\t},\n\n\t/**\n\t * Perform excel like navigation for Editor by triggering an edit on key\n\t * press\n\t *\n\t * @param  {integer} key Key code for the pressed key\n\t * @param  {object} orig Original event\n\t * @private\n\t */\n\t_editor: function (key, orig, hardEdit) {\n\t\t// If nothing focused, we can't take any action\n\t\tif (!this.s.lastFocus) {\n\t\t\treturn;\n\t\t}\n\n\t\t// DataTables draw event\n\t\tif (orig && orig.type === 'draw') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar editor = this.c.editor;\n\t\tvar editCell = this.s.lastFocus.cell;\n\t\tvar namespace = this.s.namespace + 'e' + editorNamespaceCounter++;\n\n\t\t// Do nothing if there is already an inline edit in this cell\n\t\tif ($('div.DTE', editCell.node()).length) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Don't activate Editor on control key presses\n\t\tif (\n\t\t\tkey !== null &&\n\t\t\t((key >= 0x00 && key <= 0x09) ||\n\t\t\t\tkey === 0x0b ||\n\t\t\t\tkey === 0x0c ||\n\t\t\t\t(key >= 0x0e && key <= 0x1f) ||\n\t\t\t\t(key >= 0x70 && key <= 0x7b) ||\n\t\t\t\t(key >= 0x7f && key <= 0x9f))\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (orig) {\n\t\t\torig.stopPropagation();\n\n\t\t\t// Return key should do nothing - for textareas it would empty the\n\t\t\t// contents\n\t\t\tif (key === 13) {\n\t\t\t\torig.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tvar editInline = function () {\n\t\t\tvar options = that._inlineOptions(editCell.index());\n\n\t\t\teditor\n\t\t\t\t.one('open' + namespace, function () {\n\t\t\t\t\t// Remove cancel open\n\t\t\t\t\teditor.off('cancelOpen' + namespace);\n\n\t\t\t\t\t// Excel style - select all text\n\t\t\t\t\tif (!hardEdit) {\n\t\t\t\t\t\t$(\n\t\t\t\t\t\t\t'div.DTE_Field_InputControl input, div.DTE_Field_InputControl textarea'\n\t\t\t\t\t\t).select();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reduce the keys the Keys listens for\n\t\t\t\t\tdt.keys.enable(hardEdit ? 'tab-only' : 'navigation-only');\n\n\t\t\t\t\t// On blur of the navigation submit\n\t\t\t\t\tdt.on('key-blur.editor', function (e, dt, cell) {\n\t\t\t\t\t\t// When Editor has its own blur enabled - do nothing here\n\t\t\t\t\t\tif (editor.s.editOpts.onBlur === 'submit') {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (editor.displayed() && cell.node() === editCell.node()) {\n\t\t\t\t\t\t\teditor.submit();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// Highlight the cell a different colour on full edit\n\t\t\t\t\tif (hardEdit) {\n\t\t\t\t\t\t$(dt.table().container()).addClass('dtk-focus-alt');\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the dev cancels the submit, we need to return focus\n\t\t\t\t\teditor.on('preSubmitCancelled' + namespace, function () {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tthat._focus(editCell, null, false);\n\t\t\t\t\t\t}, 50);\n\t\t\t\t\t});\n\n\t\t\t\t\teditor.on('submitUnsuccessful' + namespace, function () {\n\t\t\t\t\t\tthat._focus(editCell, null, false);\n\t\t\t\t\t});\n\n\t\t\t\t\t// Restore full key navigation on close\n\t\t\t\t\teditor.one('close' + namespace, function () {\n\t\t\t\t\t\tdt.keys.enable(true);\n\t\t\t\t\t\tdt.off('key-blur.editor');\n\t\t\t\t\t\teditor.off(namespace);\n\t\t\t\t\t\t$(dt.table().container()).removeClass('dtk-focus-alt');\n\n\t\t\t\t\t\tif (that.s.returnSubmit) {\n\t\t\t\t\t\t\tthat.s.returnSubmit = false;\n\t\t\t\t\t\t\tthat._emitEvent('key-return-submit', [dt, editCell]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.one('cancelOpen' + namespace, function () {\n\t\t\t\t\t// `preOpen` can cancel the display of the form, so it\n\t\t\t\t\t// might be that the open event handler isn't needed\n\t\t\t\t\teditor.off(namespace);\n\t\t\t\t})\n\t\t\t\t.inline(options.cell, options.field, options.options);\n\t\t};\n\n\t\t// Editor 1.7 listens for `return` on keyup, so if return is the trigger\n\t\t// key, we need to wait for `keyup` otherwise Editor would just submit\n\t\t// the content triggered by this keypress.\n\t\tif (key === 13) {\n\t\t\thardEdit = true;\n\n\t\t\t$(document).one('keyup', function () {\n\t\t\t\t// immediately removed\n\t\t\t\teditInline();\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\teditInline();\n\t\t}\n\t},\n\n\t_inlineOptions: function (cellIdx) {\n\t\tif (this.c.editorOptions) {\n\t\t\treturn this.c.editorOptions(cellIdx);\n\t\t}\n\n\t\treturn {\n\t\t\tcell: cellIdx,\n\t\t\tfield: undefined,\n\t\t\toptions: undefined\n\t\t};\n\t},\n\n\t/**\n\t * Emit an event on the DataTable for listeners\n\t *\n\t * @param  {string} name Event name\n\t * @param  {array} args Event arguments\n\t * @private\n\t */\n\t_emitEvent: function (name, args) {\n\t\treturn this.s.dt.iterator('table', function (ctx, i) {\n\t\t\treturn $(ctx.nTable).triggerHandler(name, args);\n\t\t});\n\t},\n\n\t/**\n\t * Focus on a particular cell, shifting the table's paging if required\n\t *\n\t * @param  {DataTables.Api|integer} row Can be given as an API instance that\n\t *   contains the cell to focus or as an integer. As the latter it is the\n\t *   visible row index (from the whole data set) - NOT the data index\n\t * @param  {integer} [column] Not required if a cell is given as the first\n\t *   parameter. Otherwise this is the column data index for the cell to\n\t *   focus on\n\t * @param {boolean} [shift=true] Should the viewport be moved to show cell\n\t * @private\n\t */\n\t_focus: function (row, column, shift, originalEvent) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar pageInfo = dt.page.info();\n\t\tvar lastFocus = this.s.lastFocus;\n\n\t\tif (!originalEvent) {\n\t\t\toriginalEvent = null;\n\t\t}\n\n\t\tif (!this.s.enable) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof row !== 'number') {\n\t\t\t// Its an API instance - check that there is actually a row\n\t\t\tif (!row.any()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Convert the cell to a row and column\n\t\t\tvar index = row.index();\n\t\t\tcolumn = index.column;\n\t\t\trow = dt.rows({ filter: 'applied', order: 'applied' }).indexes().indexOf(index.row);\n\n\t\t\t// Don't focus rows that were filtered out.\n\t\t\tif (row < 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For server-side processing normalise the row by adding the start\n\t\t\t// point, since `rows().indexes()` includes only rows that are\n\t\t\t// available at the client-side\n\t\t\tif (pageInfo.serverSide) {\n\t\t\t\trow += pageInfo.start;\n\t\t\t}\n\t\t}\n\n\t\t// Is the row on the current page? If not, we need to redraw to show the\n\t\t// page\n\t\tif (\n\t\t\tpageInfo.length !== -1 &&\n\t\t\t(row < pageInfo.start || row >= pageInfo.start + pageInfo.length)\n\t\t) {\n\t\t\tthis.s.focusDraw = true;\n\t\t\tthis.s.waitingForDraw = true;\n\n\t\t\tdt.one('draw', function () {\n\t\t\t\tthat.s.focusDraw = false;\n\t\t\t\tthat.s.waitingForDraw = false;\n\t\t\t\tthat._focus(row, column, undefined, originalEvent);\n\t\t\t})\n\t\t\t\t.page(Math.floor(row / pageInfo.length))\n\t\t\t\t.draw(false);\n\n\t\t\treturn;\n\t\t}\n\n\t\t// In the available columns?\n\t\tif ($.inArray(column, this._columns()) === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// De-normalise the server-side processing row, so we select the row\n\t\t// in its displayed position\n\t\tif (pageInfo.serverSide) {\n\t\t\trow -= pageInfo.start;\n\t\t}\n\n\t\t// Get the cell from the current position - ignoring any cells which might\n\t\t// not have been rendered (therefore can't use `:eq()` selector).\n\t\tvar cells = dt.cells(null, column, { search: 'applied', order: 'applied' }).flatten();\n\t\tvar cell = dt.cell(cells[row]);\n\n\t\t// Prefocus check - this event allows a focus action to be disallowed.\n\t\tvar preFocus = this._emitEvent('key-prefocus', [this.s.dt, cell, originalEvent || null]);\n\t\tif (preFocus.indexOf(false) !== -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (lastFocus) {\n\t\t\t// Don't trigger a refocus on the same cell\n\t\t\tif (lastFocus.node === cell.node()) {\n\t\t\t\tthis._emitEvent('key-refocus', [this.s.dt, cell, originalEvent || null]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Otherwise blur the old focus\n\t\t\tthis._blur();\n\t\t}\n\n\t\t// Clear focus from other tables\n\t\tthis._removeOtherFocus();\n\n\t\tvar node = $(cell.node());\n\t\tnode.addClass(this.c.className);\n\n\t\tthis._updateFixedColumns(column);\n\n\t\t// Shift viewpoint and page to make cell visible\n\t\tif (shift === undefined || shift === true) {\n\t\t\tthis._scroll($(window), $(document.body), node, 'offset');\n\n\t\t\tvar bodyParent = dt.table().body().parentNode;\n\t\t\tif (bodyParent !== dt.table().header().parentNode) {\n\t\t\t\tvar parent = $(bodyParent.parentNode);\n\n\t\t\t\tthis._scroll(parent, parent, node, 'position');\n\t\t\t}\n\t\t}\n\n\t\t// Event and finish\n\t\tvar info = dt.page.info();\n\n\t\tthis.s.lastFocus = {\n\t\t\tcell: cell,\n\t\t\tnode: cell.node(),\n\t\t\trelative: {\n\t\t\t\trow: info.start + dt.rows({ page: 'current' }).indexes().indexOf(cell.index().row),\n\t\t\t\tcolumn: cell.index().column\n\t\t\t}\n\t\t};\n\n\t\tthis._emitEvent('key-focus', [this.s.dt, cell, originalEvent || null]);\n\t\tdt.state.save();\n\t},\n\n\t/**\n\t * Handle key press\n\t *\n\t * @param  {object} e Event\n\t * @private\n\t */\n\t_key: function (e) {\n\t\t// If we are waiting for a draw to happen from another key event, then\n\t\t// do nothing for this new key press.\n\t\tif (this.s.waitingForDraw) {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\t// Ignore key presses in an Editor inline create row - it is not navigatable\n\t\t// by KeyTable\n\t\tif ($(e.target).closest('.dte-inlineAdd').length) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar enable = this.s.enable;\n\t\tthis.s.returnSubmit =\n\t\t\t(enable === 'navigation-only' || enable === 'tab-only') && e.keyCode === 13\n\t\t\t\t? true\n\t\t\t\t: false;\n\n\t\tvar navEnable = enable === true || enable === 'navigation-only';\n\t\tif (!enable) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ((e.keyCode === 0 || e.ctrlKey || e.metaKey || e.altKey) && !(e.ctrlKey && e.altKey)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If not focused, then there is no key action to take\n\t\tvar lastFocus = this.s.lastFocus;\n\t\tif (!lastFocus) {\n\t\t\treturn;\n\t\t}\n\n\t\t// And the last focus still exists!\n\t\tif (!this.s.dt.cell(lastFocus.node).any()) {\n\t\t\tthis.s.lastFocus = null;\n\t\t\treturn;\n\t\t}\n\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar scrolling = this.s.dt.settings()[0].oScroll.sY ? true : false;\n\n\t\t// If we are not listening for this key, do nothing\n\t\tif (this.c.keys && $.inArray(e.keyCode, this.c.keys) === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (e.keyCode) {\n\t\t\tcase 9: // tab\n\t\t\t\t// `enable` can be tab-only\n\t\t\t\te.preventDefault();\n\n\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\tthat._shift(e, e.shiftKey ? 'left' : 'right', true);\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 27: // esc\n\t\t\t\tif (this.c.blurable && enable === true) {\n\t\t\t\t\tthis._blur();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 33: // page up (previous page)\n\t\t\tcase 34: // page down (next page)\n\t\t\t\tif (navEnable && !scrolling) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\t\tdt.page(e.keyCode === 33 ? 'previous' : 'next').draw(false);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 35: // end (end of current page)\n\t\t\tcase 36: // home (start of current page)\n\t\t\t\tif (navEnable) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\t\tvar indexes = dt.cells({ page: 'current' }).indexes();\n\t\t\t\t\t\tvar colIndexes = that._columns();\n\n\t\t\t\t\t\tthat._focus(\n\t\t\t\t\t\t\tdt.cell(indexes[e.keyCode === 35 ? indexes.length - 1 : colIndexes[0]]),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\te\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 37: // left arrow\n\t\t\t\tif (navEnable) {\n\t\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\t\tthat._shift(e, 'left');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 38: // up arrow\n\t\t\t\tif (navEnable) {\n\t\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\t\tthat._shift(e, 'up');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 39: // right arrow\n\t\t\t\tif (navEnable) {\n\t\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\t\tthat._shift(e, 'right');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 40: // down arrow\n\t\t\t\tif (navEnable) {\n\t\t\t\t\tthis._keyAction(function () {\n\t\t\t\t\t\tthat._shift(e, 'down');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 113: // F2 - Excel like hard edit\n\t\t\t\tif (this.c.editor) {\n\t\t\t\t\tthis._editor(null, e, true);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t// else fallthrough\n\n\t\t\tdefault:\n\t\t\t\t// Everything else - pass through only when fully enabled\n\t\t\t\tif (enable === true) {\n\t\t\t\t\tthis._emitEvent('key', [dt, e.keyCode, this.s.lastFocus.cell, e]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\t/**\n\t * Whether we perform a key shift action immediately or not depends\n\t * upon if Editor is being used. If it is, then we wait until it\n\t * completes its action\n\t * @param {*} action Function to trigger when ready\n\t */\n\t_keyAction: function (action) {\n\t\tvar editor = this.c.editor;\n\n\t\tif (editor && editor.mode()) {\n\t\t\teditor.submit(action);\n\t\t}\n\t\telse {\n\t\t\taction();\n\t\t}\n\t},\n\n\t/**\n\t * Remove focus from all tables other than this one\n\t */\n\t_removeOtherFocus: function () {\n\t\tvar thisTable = this.s.dt.table().node();\n\n\t\t$.fn.dataTable.tables({ api: true }).iterator('table', function (settings) {\n\t\t\tif (this.table().node() !== thisTable) {\n\t\t\t\tthis.cell.blur();\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Scroll a container to make a cell visible in it. This can be used for\n\t * both DataTables scrolling and native window scrolling.\n\t *\n\t * @param  {jQuery} container Scrolling container\n\t * @param  {jQuery} scroller  Item being scrolled\n\t * @param  {jQuery} cell      Cell in the scroller\n\t * @param  {string} posOff    `position` or `offset` - which to use for the\n\t *   calculation. `offset` for the document, otherwise `position`\n\t * @private\n\t */\n\t_scroll: function (container, scroller, cell, posOff) {\n\t\tvar offset = cell[posOff]();\n\t\tvar height = cell.outerHeight();\n\t\tvar width = cell.outerWidth();\n\n\t\tvar scrollTop = scroller.scrollTop();\n\t\tvar scrollLeft = scroller.scrollLeft();\n\t\tvar containerHeight = container.height();\n\t\tvar containerWidth = container.width();\n\n\t\t// If Scroller is being used, the table can be `position: absolute` and that\n\t\t// needs to be taken account of in the offset. If no Scroller, this will be 0\n\t\tif (posOff === 'position') {\n\t\t\toffset.top += parseInt(cell.closest('table').css('top'), 10);\n\t\t}\n\n\t\t// Top correction (partially in view)\n\t\tif (offset.top < scrollTop && offset.top + height > scrollTop - 5) {\n\t\t\tscroller.scrollTop(offset.top);\n\t\t}\n\n\t\t// Left correction\n\t\tif (offset.left < scrollLeft) {\n\t\t\tscroller.scrollLeft(offset.left);\n\t\t}\n\n\t\t// Bottom correction plus in view correction. Note that the magic 5 is to allow\n\t\t// for the edge just passing the bottom of the view\n\t\tif (\n\t\t\toffset.top + height > scrollTop + containerHeight &&\n\t\t\toffset.top < scrollTop + containerHeight + 5 &&\n\t\t\theight < containerHeight\n\t\t) {\n\t\t\tscroller.scrollTop(offset.top + height - containerHeight);\n\t\t}\n\n\t\t// Right correction\n\t\tif (offset.left + width > scrollLeft + containerWidth && width < containerWidth) {\n\t\t\tscroller.scrollLeft(offset.left + width - containerWidth);\n\t\t}\n\t},\n\n\t/**\n\t * Calculate a single offset movement in the table - up, down, left and\n\t * right and then perform the focus if possible\n\t *\n\t * @param  {object}  e           Event object\n\t * @param  {string}  direction   Movement direction\n\t * @param  {boolean} keyBlurable `true` if the key press can result in the\n\t *   table being blurred. This is so arrow keys won't blur the table, but\n\t *   tab will.\n\t * @private\n\t */\n\t_shift: function (e, direction, keyBlurable) {\n\t\tvar dt = this.s.dt;\n\t\tvar pageInfo = dt.page.info();\n\t\tvar rows = pageInfo.recordsDisplay;\n\t\tvar columns = this._columns();\n\t\tvar last = this.s.lastFocus;\n\t\tif (!last) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar currentCell = last.cell;\n\t\tif (!currentCell) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar currRow = dt\n\t\t\t.rows({ filter: 'applied', order: 'applied' })\n\t\t\t.indexes()\n\t\t\t.indexOf(currentCell.index().row);\n\n\t\t// When server-side processing, `rows().indexes()` only gives the rows\n\t\t// that are available at the client-side, so we need to normalise the\n\t\t// row's current position by the display start point\n\t\tif (pageInfo.serverSide) {\n\t\t\tcurrRow += pageInfo.start;\n\t\t}\n\n\t\tvar currCol = dt.columns(columns).indexes().indexOf(currentCell.index().column);\n\n\t\tvar row = currRow,\n\t\t\tcolumn = columns[currCol]; // row is the display, column is an index\n\n\t\t// If the direction is rtl then the logic needs to be inverted from this point forwards\n\t\tif ($(dt.table().node()).css('direction') === 'rtl') {\n\t\t\tif (direction === 'right') {\n\t\t\t\tdirection = 'left';\n\t\t\t}\n\t\t\telse if (direction === 'left') {\n\t\t\t\tdirection = 'right';\n\t\t\t}\n\t\t}\n\n\t\tif (direction === 'right') {\n\t\t\tif (currCol >= columns.length - 1) {\n\t\t\t\trow++;\n\t\t\t\tcolumn = columns[0];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcolumn = columns[currCol + 1];\n\t\t\t}\n\t\t}\n\t\telse if (direction === 'left') {\n\t\t\tif (currCol === 0) {\n\t\t\t\trow--;\n\t\t\t\tcolumn = columns[columns.length - 1];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcolumn = columns[currCol - 1];\n\t\t\t}\n\t\t}\n\t\telse if (direction === 'up') {\n\t\t\trow--;\n\t\t}\n\t\telse if (direction === 'down') {\n\t\t\trow++;\n\t\t}\n\n\t\tif (row >= 0 && row < rows && $.inArray(column, columns) !== -1) {\n\t\t\tif (e) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\tthis._focus(row, column, true, e);\n\t\t}\n\t\telse if (!keyBlurable || !this.c.blurable) {\n\t\t\t// No new focus, but if the table isn't blurable, then don't loose\n\t\t\t// focus\n\t\t\tif (e) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis._blur();\n\t\t}\n\t},\n\n\t/**\n\t * Create and insert a hidden input element that can receive focus on behalf\n\t * of the table\n\t *\n\t * @private\n\t */\n\t_tabInput: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar tabIndex = this.c.tabIndex !== null ? this.c.tabIndex : dt.settings()[0].iTabIndex;\n\n\t\tif (tabIndex == -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Only create the input element once on first class\n\t\tif (!this.s.tabInput) {\n\t\t\tvar div = $('<div><input type=\"text\" tabindex=\"' + tabIndex + '\"/></div>').css({\n\t\t\t\tposition: 'absolute',\n\t\t\t\theight: 1,\n\t\t\t\twidth: 0,\n\t\t\t\toverflow: 'hidden'\n\t\t\t});\n\n\t\t\tdiv.children().on('focus', function (e) {\n\t\t\t\tvar cell = dt.cell(':eq(0)', that._columns(), { page: 'current' });\n\n\t\t\t\tif (cell.any()) {\n\t\t\t\t\tthat._focus(cell, null, true, e);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.s.tabInput = div;\n\t\t}\n\n\t\t// Insert the input element into the first cell in the table's body\n\t\tvar cell = this.s.dt\n\t\t\t.cell(':eq(0)', '0:visible', { page: 'current', order: 'current' })\n\t\t\t.node();\n\t\tif (cell) {\n\t\t\t$(cell).prepend(this.s.tabInput);\n\t\t}\n\t},\n\n\t/**\n\t * Update fixed columns if they are enabled and if the cell we are\n\t * focusing is inside a fixed column\n\t * @param  {integer} column Index of the column being changed\n\t * @private\n\t */\n\t_updateFixedColumns: function (column) {\n\t\tvar dt = this.s.dt;\n\t\tvar settings = dt.settings()[0];\n\n\t\tif (settings._oFixedColumns) {\n\t\t\tvar leftCols = settings._oFixedColumns.s.iLeftColumns;\n\t\t\tvar rightCols = settings.aoColumns.length - settings._oFixedColumns.s.iRightColumns;\n\n\t\t\tif (column < leftCols || column >= rightCols) {\n\t\t\t\tdt.fixedColumns().update();\n\t\t\t}\n\t\t}\n\t}\n});\n\n/**\n * KeyTable default settings for initialisation\n *\n * @namespace\n * @name KeyTable.defaults\n * @static\n */\nKeyTable.defaults = {\n\t/**\n\t * Can focus be removed from the table\n\t * @type {Boolean}\n\t */\n\tblurable: true,\n\n\t/**\n\t * Class to give to the focused cell\n\t * @type {String}\n\t */\n\tclassName: 'focus',\n\n\t/**\n\t * Enable or disable clipboard support\n\t * @type {Boolean}\n\t */\n\tclipboard: true,\n\n\t/**\n\t * Orthogonal data that should be copied to clipboard\n\t * @type {string}\n\t */\n\tclipboardOrthogonal: 'display',\n\n\t/**\n\t * Columns that can be focused. This is automatically merged with the\n\t * visible columns as only visible columns can gain focus.\n\t * @type {String}\n\t */\n\tcolumns: '', // all\n\n\t/**\n\t * Editor instance to automatically perform Excel like navigation\n\t * @type {Editor}\n\t */\n\teditor: null,\n\n\t/**\n\t * Trigger editing immediately on focus\n\t * @type {boolean}\n\t */\n\teditOnFocus: false,\n\n\t/**\n\t * Options to pass to Editor's inline method\n\t * @type {function}\n\t */\n\teditorOptions: null,\n\n\t/**\n\t * Select a cell to automatically select on start up. `null` for no\n\t * automatic selection\n\t * @type {cell-selector}\n\t */\n\tfocus: null,\n\n\t/**\n\t * Array of keys to listen for\n\t * @type {null|array}\n\t */\n\tkeys: null,\n\n\t/**\n\t * Tab index for where the table should sit in the document's tab flow\n\t * @type {integer|null}\n\t */\n\ttabIndex: null\n};\n\nKeyTable.version = '2.11.0';\n\n$.fn.dataTable.KeyTable = KeyTable;\n$.fn.DataTable.KeyTable = KeyTable;\n\nDataTable.Api.register('cell.blur()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.keytable) {\n\t\t\tctx.keytable.blur();\n\t\t}\n\t});\n});\n\nDataTable.Api.register('cell().focus()', function () {\n\treturn this.iterator('cell', function (ctx, row, column) {\n\t\tif (ctx.keytable) {\n\t\t\tctx.keytable.focus(row, column);\n\t\t}\n\t});\n});\n\nDataTable.Api.register('keys.disable()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.keytable) {\n\t\t\tctx.keytable.enable(false);\n\t\t}\n\t});\n});\n\nDataTable.Api.register('keys.enable()', function (opts) {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.keytable) {\n\t\t\tctx.keytable.enable(opts === undefined ? true : opts);\n\t\t}\n\t});\n});\n\nDataTable.Api.register('keys.enabled()', function (opts) {\n\tvar ctx = this.context;\n\n\tif (ctx.length) {\n\t\treturn ctx[0].keytable ? ctx[0].keytable.enabled() : false;\n\t}\n\n\treturn false;\n});\n\nDataTable.Api.register('keys.move()', function (dir) {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.keytable) {\n\t\t\tctx.keytable._shift(null, dir, false);\n\t\t}\n\t});\n});\n\n// Cell selector\nDataTable.ext.selector.cell.push(function (settings, opts, cells) {\n\tvar focused = opts.focused;\n\tvar kt = settings.keytable;\n\tvar out = [];\n\n\tif (!kt || focused === undefined) {\n\t\treturn cells;\n\t}\n\n\tfor (var i = 0, ien = cells.length; i < ien; i++) {\n\t\tif (\n\t\t\t(focused === true && kt.focused(cells[i])) ||\n\t\t\t(focused === false && !kt.focused(cells[i]))\n\t\t) {\n\t\t\tout.push(cells[i]);\n\t\t}\n\t}\n\n\treturn out;\n});\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('preInit.dt.dtk', function (e, settings, json) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.keys;\n\tvar defaults = DataTable.defaults.keys;\n\n\tif (init || defaults) {\n\t\tvar opts = $.extend({}, defaults, init);\n\n\t\tif (init !== false) {\n\t\t\tnew KeyTable(settings, opts);\n\t\t}\n\t}\n});\n\n\nreturn DataTable;\n}));\n\n\n/*! Responsive 2.5.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     Responsive\n * @description Responsive tables plug-in for DataTables\n * @version     2.5.0\n * @author      SpryMedia Ltd\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/**\n * Responsive is a plug-in for the DataTables library that makes use of\n * DataTables' ability to change the visibility of columns, changing the\n * visibility of columns so the displayed columns fit into the table container.\n * The end result is that complex tables will be dynamically adjusted to fit\n * into the viewport, be it on a desktop, tablet or mobile browser.\n *\n * Responsive for DataTables has two modes of operation, which can used\n * individually or combined:\n *\n * * Class name based control - columns assigned class names that match the\n *   breakpoint logic can be shown / hidden as required for each breakpoint.\n * * Automatic control - columns are automatically hidden when there is no\n *   room left to display them. Columns removed from the right.\n *\n * In additional to column visibility control, Responsive also has built into\n * options to use DataTables' child row display to show / hide the information\n * from the table that has been hidden. There are also two modes of operation\n * for this child row display:\n *\n * * Inline - when the control element that the user can use to show / hide\n *   child rows is displayed inside the first column of the table.\n * * Column - where a whole column is dedicated to be the show / hide control.\n *\n * Initialisation of Responsive is performed by:\n *\n * * Adding the class `responsive` or `dt-responsive` to the table. In this case\n *   Responsive will automatically be initialised with the default configuration\n *   options when the DataTable is created.\n * * Using the `responsive` option in the DataTables configuration options. This\n *   can also be used to specify the configuration options, or simply set to\n *   `true` to use the defaults.\n *\n *  @class\n *  @param {object} settings DataTables settings object for the host table\n *  @param {object} [opts] Configuration options\n *  @requires jQuery 1.7+\n *  @requires DataTables 1.10.3+\n *\n *  @example\n *      $('#example').DataTable( {\n *        responsive: true\n *      } );\n *    } );\n */\nvar Responsive = function (settings, opts) {\n\t// Sanity check that we are using DataTables 1.10 or newer\n\tif (!DataTable.versionCheck || !DataTable.versionCheck('1.10.10')) {\n\t\tthrow 'DataTables Responsive requires DataTables 1.10.10 or newer';\n\t}\n\n\tthis.s = {\n\t\tchildNodeStore: {},\n\t\tcolumns: [],\n\t\tcurrent: [],\n\t\tdt: new DataTable.Api(settings)\n\t};\n\n\t// Check if responsive has already been initialised on this table\n\tif (this.s.dt.settings()[0].responsive) {\n\t\treturn;\n\t}\n\n\t// details is an object, but for simplicity the user can give it as a string\n\t// or a boolean\n\tif (opts && typeof opts.details === 'string') {\n\t\topts.details = { type: opts.details };\n\t}\n\telse if (opts && opts.details === false) {\n\t\topts.details = { type: false };\n\t}\n\telse if (opts && opts.details === true) {\n\t\topts.details = { type: 'inline' };\n\t}\n\n\tthis.c = $.extend(true, {}, Responsive.defaults, DataTable.defaults.responsive, opts);\n\tsettings.responsive = this;\n\tthis._constructor();\n};\n\n$.extend(Responsive.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialise the Responsive instance\n\t *\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar dtPrivateSettings = dt.settings()[0];\n\t\tvar oldWindowWidth = $(window).innerWidth();\n\n\t\tdt.settings()[0]._responsive = this;\n\n\t\t// Use DataTables' throttle function to avoid processor thrashing on\n\t\t// resize\n\t\t$(window).on(\n\t\t\t'resize.dtr orientationchange.dtr',\n\t\t\tDataTable.util.throttle(function () {\n\t\t\t\t// iOS has a bug whereby resize can fire when only scrolling\n\t\t\t\t// See: http://stackoverflow.com/questions/8898412\n\t\t\t\tvar width = $(window).innerWidth();\n\n\t\t\t\tif (width !== oldWindowWidth) {\n\t\t\t\t\tthat._resize();\n\t\t\t\t\toldWindowWidth = width;\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\t// DataTables doesn't currently trigger an event when a row is added, so\n\t\t// we need to hook into its private API to enforce the hidden rows when\n\t\t// new data is added\n\t\tdtPrivateSettings.oApi._fnCallbackReg(\n\t\t\tdtPrivateSettings,\n\t\t\t'aoRowCreatedCallback',\n\t\t\tfunction (tr, data, idx) {\n\t\t\t\tif ($.inArray(false, that.s.current) !== -1) {\n\t\t\t\t\t$('>td, >th', tr).each(function (i) {\n\t\t\t\t\t\tvar idx = dt.column.index('toData', i);\n\n\t\t\t\t\t\tif (that.s.current[idx] === false) {\n\t\t\t\t\t\t\t$(this).css('display', 'none');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\t// Destroy event handler\n\t\tdt.on('destroy.dtr', function () {\n\t\t\tdt.off('.dtr');\n\t\t\t$(dt.table().body()).off('.dtr');\n\t\t\t$(window).off('resize.dtr orientationchange.dtr');\n\t\t\tdt.cells('.dtr-control').nodes().to$().removeClass('dtr-control');\n\n\t\t\t// Restore the columns that we've hidden\n\t\t\t$.each(that.s.current, function (i, val) {\n\t\t\t\tif (val === false) {\n\t\t\t\t\tthat._setColumnVis(i, true);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// Reorder the breakpoints array here in case they have been added out\n\t\t// of order\n\t\tthis.c.breakpoints.sort(function (a, b) {\n\t\t\treturn a.width < b.width ? 1 : a.width > b.width ? -1 : 0;\n\t\t});\n\n\t\tthis._classLogic();\n\t\tthis._resizeAuto();\n\n\t\t// Details handler\n\t\tvar details = this.c.details;\n\n\t\tif (details.type !== false) {\n\t\t\tthat._detailsInit();\n\n\t\t\t// DataTables will trigger this event on every column it shows and\n\t\t\t// hides individually\n\t\t\tdt.on('column-visibility.dtr', function () {\n\t\t\t\t// Use a small debounce to allow multiple columns to be set together\n\t\t\t\tif (that._timer) {\n\t\t\t\t\tclearTimeout(that._timer);\n\t\t\t\t}\n\n\t\t\t\tthat._timer = setTimeout(function () {\n\t\t\t\t\tthat._timer = null;\n\n\t\t\t\t\tthat._classLogic();\n\t\t\t\t\tthat._resizeAuto();\n\t\t\t\t\tthat._resize(true);\n\n\t\t\t\t\tthat._redrawChildren();\n\t\t\t\t}, 100);\n\t\t\t});\n\n\t\t\t// Redraw the details box on each draw which will happen if the data\n\t\t\t// has changed. This is used until DataTables implements a native\n\t\t\t// `updated` event for rows\n\t\t\tdt.on('draw.dtr', function () {\n\t\t\t\tthat._redrawChildren();\n\t\t\t});\n\n\t\t\t$(dt.table().node()).addClass('dtr-' + details.type);\n\t\t}\n\n\t\tdt.on('column-reorder.dtr', function (e, settings, details) {\n\t\t\tthat._classLogic();\n\t\t\tthat._resizeAuto();\n\t\t\tthat._resize(true);\n\t\t});\n\n\t\t// Change in column sizes means we need to calc\n\t\tdt.on('column-sizing.dtr', function () {\n\t\t\tthat._resizeAuto();\n\t\t\tthat._resize();\n\t\t});\n\n\t\t// DT2 let's us tell it if we are hiding columns\n\t\tdt.on('column-calc.dt', function (e, d) {\n\t\t\tvar curr = that.s.current;\n\n\t\t\tfor (var i = 0; i < curr.length; i++) {\n\t\t\t\tvar idx = d.visible.indexOf(i);\n\n\t\t\t\tif (curr[i] === false && idx >= 0) {\n\t\t\t\t\td.visible.splice(idx, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// On Ajax reload we want to reopen any child rows which are displayed\n\t\t// by responsive\n\t\tdt.on('preXhr.dtr', function () {\n\t\t\tvar rowIds = [];\n\t\t\tdt.rows().every(function () {\n\t\t\t\tif (this.child.isShown()) {\n\t\t\t\t\trowIds.push(this.id(true));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdt.one('draw.dtr', function () {\n\t\t\t\tthat._resizeAuto();\n\t\t\t\tthat._resize();\n\n\t\t\t\tdt.rows(rowIds).every(function () {\n\t\t\t\t\tthat._detailsDisplay(this, false);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tdt.on('draw.dtr', function () {\n\t\t\tthat._controlClass();\n\t\t}).on('init.dtr', function (e, settings, details) {\n\t\t\tif (e.namespace !== 'dt') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthat._resizeAuto();\n\t\t\tthat._resize();\n\n\t\t\t// If columns were hidden, then DataTables needs to adjust the\n\t\t\t// column sizing\n\t\t\tif ($.inArray(false, that.s.current)) {\n\t\t\t\tdt.columns.adjust();\n\t\t\t}\n\t\t});\n\n\t\t// First pass - draw the table for the current viewport size\n\t\tthis._resize();\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Get and store nodes from a cell - use for node moving renderers\n\t *\n\t * @param {*} dt DT instance\n\t * @param {*} row Row index\n\t * @param {*} col Column index\n\t */\n\t_childNodes: function (dt, row, col) {\n\t\tvar name = row + '-' + col;\n\n\t\tif (this.s.childNodeStore[name]) {\n\t\t\treturn this.s.childNodeStore[name];\n\t\t}\n\n\t\t// https://jsperf.com/childnodes-array-slice-vs-loop\n\t\tvar nodes = [];\n\t\tvar children = dt.cell(row, col).node().childNodes;\n\t\tfor (var i = 0, ien = children.length; i < ien; i++) {\n\t\t\tnodes.push(children[i]);\n\t\t}\n\n\t\tthis.s.childNodeStore[name] = nodes;\n\n\t\treturn nodes;\n\t},\n\n\t/**\n\t * Restore nodes from the cache to a table cell\n\t *\n\t * @param {*} dt DT instance\n\t * @param {*} row Row index\n\t * @param {*} col Column index\n\t */\n\t_childNodesRestore: function (dt, row, col) {\n\t\tvar name = row + '-' + col;\n\n\t\tif (!this.s.childNodeStore[name]) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar node = dt.cell(row, col).node();\n\t\tvar store = this.s.childNodeStore[name];\n\t\tvar parent = store[0].parentNode;\n\t\tvar parentChildren = parent.childNodes;\n\t\tvar a = [];\n\n\t\tfor (var i = 0, ien = parentChildren.length; i < ien; i++) {\n\t\t\ta.push(parentChildren[i]);\n\t\t}\n\n\t\tfor (var j = 0, jen = a.length; j < jen; j++) {\n\t\t\tnode.appendChild(a[j]);\n\t\t}\n\n\t\tthis.s.childNodeStore[name] = undefined;\n\t},\n\n\t/**\n\t * Calculate the visibility for the columns in a table for a given\n\t * breakpoint. The result is pre-determined based on the class logic if\n\t * class names are used to control all columns, but the width of the table\n\t * is also used if there are columns which are to be automatically shown\n\t * and hidden.\n\t *\n\t * @param  {string} breakpoint Breakpoint name to use for the calculation\n\t * @return {array} Array of boolean values initiating the visibility of each\n\t *   column.\n\t *  @private\n\t */\n\t_columnsVisiblity: function (breakpoint) {\n\t\tvar dt = this.s.dt;\n\t\tvar columns = this.s.columns;\n\t\tvar i, ien;\n\n\t\t// Create an array that defines the column ordering based first on the\n\t\t// column's priority, and secondly the column index. This allows the\n\t\t// columns to be removed from the right if the priority matches\n\t\tvar order = columns\n\t\t\t.map(function (col, idx) {\n\t\t\t\treturn {\n\t\t\t\t\tcolumnIdx: idx,\n\t\t\t\t\tpriority: col.priority\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort(function (a, b) {\n\t\t\t\tif (a.priority !== b.priority) {\n\t\t\t\t\treturn a.priority - b.priority;\n\t\t\t\t}\n\t\t\t\treturn a.columnIdx - b.columnIdx;\n\t\t\t});\n\n\t\t// Class logic - determine which columns are in this breakpoint based\n\t\t// on the classes. If no class control (i.e. `auto`) then `-` is used\n\t\t// to indicate this to the rest of the function\n\t\tvar display = $.map(columns, function (col, i) {\n\t\t\tif (dt.column(i).visible() === false) {\n\t\t\t\treturn 'not-visible';\n\t\t\t}\n\t\t\treturn col.auto && col.minWidth === null\n\t\t\t\t? false\n\t\t\t\t: col.auto === true\n\t\t\t\t? '-'\n\t\t\t\t: $.inArray(breakpoint, col.includeIn) !== -1;\n\t\t});\n\n\t\t// Auto column control - first pass: how much width is taken by the\n\t\t// ones that must be included from the non-auto columns\n\t\tvar requiredWidth = 0;\n\t\tfor (i = 0, ien = display.length; i < ien; i++) {\n\t\t\tif (display[i] === true) {\n\t\t\t\trequiredWidth += columns[i].minWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Second pass, use up any remaining width for other columns. For\n\t\t// scrolling tables we need to subtract the width of the scrollbar. It\n\t\t// may not be requires which makes this sub-optimal, but it would\n\t\t// require another full redraw to make complete use of those extra few\n\t\t// pixels\n\t\tvar scrolling = dt.settings()[0].oScroll;\n\t\tvar bar = scrolling.sY || scrolling.sX ? scrolling.iBarWidth : 0;\n\t\tvar widthAvailable = dt.table().container().offsetWidth - bar;\n\t\tvar usedWidth = widthAvailable - requiredWidth;\n\n\t\t// Control column needs to always be included. This makes it sub-\n\t\t// optimal in terms of using the available with, but to stop layout\n\t\t// thrashing or overflow. Also we need to account for the control column\n\t\t// width first so we know how much width is available for the other\n\t\t// columns, since the control column might not be the first one shown\n\t\tfor (i = 0, ien = display.length; i < ien; i++) {\n\t\t\tif (columns[i].control) {\n\t\t\t\tusedWidth -= columns[i].minWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Allow columns to be shown (counting by priority and then right to\n\t\t// left) until we run out of room\n\t\tvar empty = false;\n\t\tfor (i = 0, ien = order.length; i < ien; i++) {\n\t\t\tvar colIdx = order[i].columnIdx;\n\n\t\t\tif (display[colIdx] === '-' && !columns[colIdx].control && columns[colIdx].minWidth) {\n\t\t\t\t// Once we've found a column that won't fit we don't let any\n\t\t\t\t// others display either, or columns might disappear in the\n\t\t\t\t// middle of the table\n\t\t\t\tif (empty || usedWidth - columns[colIdx].minWidth < 0) {\n\t\t\t\t\tempty = true;\n\t\t\t\t\tdisplay[colIdx] = false;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdisplay[colIdx] = true;\n\t\t\t\t}\n\n\t\t\t\tusedWidth -= columns[colIdx].minWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Determine if the 'control' column should be shown (if there is one).\n\t\t// This is the case when there is a hidden column (that is not the\n\t\t// control column). The two loops look inefficient here, but they are\n\t\t// trivial and will fly through. We need to know the outcome from the\n\t\t// first , before the action in the second can be taken\n\t\tvar showControl = false;\n\n\t\tfor (i = 0, ien = columns.length; i < ien; i++) {\n\t\t\tif (!columns[i].control && !columns[i].never && display[i] === false) {\n\t\t\t\tshowControl = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, ien = columns.length; i < ien; i++) {\n\t\t\tif (columns[i].control) {\n\t\t\t\tdisplay[i] = showControl;\n\t\t\t}\n\n\t\t\t// Replace not visible string with false from the control column detection above\n\t\t\tif (display[i] === 'not-visible') {\n\t\t\t\tdisplay[i] = false;\n\t\t\t}\n\t\t}\n\n\t\t// Finally we need to make sure that there is at least one column that\n\t\t// is visible\n\t\tif ($.inArray(true, display) === -1) {\n\t\t\tdisplay[0] = true;\n\t\t}\n\n\t\treturn display;\n\t},\n\n\t/**\n\t * Create the internal `columns` array with information about the columns\n\t * for the table. This includes determining which breakpoints the column\n\t * will appear in, based upon class names in the column, which makes up the\n\t * vast majority of this method.\n\t *\n\t * @private\n\t */\n\t_classLogic: function () {\n\t\tvar that = this;\n\t\tvar calc = {};\n\t\tvar breakpoints = this.c.breakpoints;\n\t\tvar dt = this.s.dt;\n\t\tvar columns = dt\n\t\t\t.columns()\n\t\t\t.eq(0)\n\t\t\t.map(function (i) {\n\t\t\t\tvar column = this.column(i);\n\t\t\t\tvar className = column.header().className;\n\t\t\t\tvar priority = dt.settings()[0].aoColumns[i].responsivePriority;\n\t\t\t\tvar dataPriority = column.header().getAttribute('data-priority');\n\n\t\t\t\tif (priority === undefined) {\n\t\t\t\t\tpriority =\n\t\t\t\t\t\tdataPriority === undefined || dataPriority === null\n\t\t\t\t\t\t\t? 10000\n\t\t\t\t\t\t\t: dataPriority * 1;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tclassName: className,\n\t\t\t\t\tincludeIn: [],\n\t\t\t\t\tauto: false,\n\t\t\t\t\tcontrol: false,\n\t\t\t\t\tnever: className.match(/\\b(dtr\\-)?never\\b/) ? true : false,\n\t\t\t\t\tpriority: priority\n\t\t\t\t};\n\t\t\t});\n\n\t\t// Simply add a breakpoint to `includeIn` array, ensuring that there are\n\t\t// no duplicates\n\t\tvar add = function (colIdx, name) {\n\t\t\tvar includeIn = columns[colIdx].includeIn;\n\n\t\t\tif ($.inArray(name, includeIn) === -1) {\n\t\t\t\tincludeIn.push(name);\n\t\t\t}\n\t\t};\n\n\t\tvar column = function (colIdx, name, operator, matched) {\n\t\t\tvar size, i, ien;\n\n\t\t\tif (!operator) {\n\t\t\t\tcolumns[colIdx].includeIn.push(name);\n\t\t\t}\n\t\t\telse if (operator === 'max-') {\n\t\t\t\t// Add this breakpoint and all smaller\n\t\t\t\tsize = that._find(name).width;\n\n\t\t\t\tfor (i = 0, ien = breakpoints.length; i < ien; i++) {\n\t\t\t\t\tif (breakpoints[i].width <= size) {\n\t\t\t\t\t\tadd(colIdx, breakpoints[i].name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (operator === 'min-') {\n\t\t\t\t// Add this breakpoint and all larger\n\t\t\t\tsize = that._find(name).width;\n\n\t\t\t\tfor (i = 0, ien = breakpoints.length; i < ien; i++) {\n\t\t\t\t\tif (breakpoints[i].width >= size) {\n\t\t\t\t\t\tadd(colIdx, breakpoints[i].name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (operator === 'not-') {\n\t\t\t\t// Add all but this breakpoint\n\t\t\t\tfor (i = 0, ien = breakpoints.length; i < ien; i++) {\n\t\t\t\t\tif (breakpoints[i].name.indexOf(matched) === -1) {\n\t\t\t\t\t\tadd(colIdx, breakpoints[i].name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Loop over each column and determine if it has a responsive control\n\t\t// class\n\t\tcolumns.each(function (col, i) {\n\t\t\tvar classNames = col.className.split(' ');\n\t\t\tvar hasClass = false;\n\n\t\t\t// Split the class name up so multiple rules can be applied if needed\n\t\t\tfor (var k = 0, ken = classNames.length; k < ken; k++) {\n\t\t\t\tvar className = classNames[k].trim();\n\n\t\t\t\tif (className === 'all' || className === 'dtr-all') {\n\t\t\t\t\t// Include in all\n\t\t\t\t\thasClass = true;\n\t\t\t\t\tcol.includeIn = $.map(breakpoints, function (a) {\n\t\t\t\t\t\treturn a.name;\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (className === 'none' || className === 'dtr-none' || col.never) {\n\t\t\t\t\t// Include in none (default) and no auto\n\t\t\t\t\thasClass = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (className === 'control' || className === 'dtr-control') {\n\t\t\t\t\t// Special column that is only visible, when one of the other\n\t\t\t\t\t// columns is hidden. This is used for the details control\n\t\t\t\t\thasClass = true;\n\t\t\t\t\tcol.control = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t$.each(breakpoints, function (j, breakpoint) {\n\t\t\t\t\t// Does this column have a class that matches this breakpoint?\n\t\t\t\t\tvar brokenPoint = breakpoint.name.split('-');\n\t\t\t\t\tvar re = new RegExp(\n\t\t\t\t\t\t'(min\\\\-|max\\\\-|not\\\\-)?(' + brokenPoint[0] + ')(\\\\-[_a-zA-Z0-9])?'\n\t\t\t\t\t);\n\t\t\t\t\tvar match = className.match(re);\n\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\thasClass = true;\n\n\t\t\t\t\t\tif (match[2] === brokenPoint[0] && match[3] === '-' + brokenPoint[1]) {\n\t\t\t\t\t\t\t// Class name matches breakpoint name fully\n\t\t\t\t\t\t\tcolumn(i, breakpoint.name, match[1], match[2] + match[3]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (match[2] === brokenPoint[0] && !match[3]) {\n\t\t\t\t\t\t\t// Class name matched primary breakpoint name with no qualifier\n\t\t\t\t\t\t\tcolumn(i, breakpoint.name, match[1], match[2]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// If there was no control class, then automatic sizing is used\n\t\t\tif (!hasClass) {\n\t\t\t\tcol.auto = true;\n\t\t\t}\n\t\t});\n\n\t\tthis.s.columns = columns;\n\t},\n\n\t/**\n\t * Update the cells to show the correct control class / button\n\t * @private\n\t */\n\t_controlClass: function () {\n\t\tif (this.c.details.type === 'inline') {\n\t\t\tvar dt = this.s.dt;\n\t\t\tvar columnsVis = this.s.current;\n\t\t\tvar firstVisible = $.inArray(true, columnsVis);\n\n\t\t\t// Remove from any cells which shouldn't have it\n\t\t\tdt.cells(\n\t\t\t\tnull,\n\t\t\t\tfunction (idx) {\n\t\t\t\t\treturn idx !== firstVisible;\n\t\t\t\t},\n\t\t\t\t{ page: 'current' }\n\t\t\t)\n\t\t\t\t.nodes()\n\t\t\t\t.to$()\n\t\t\t\t.filter('.dtr-control')\n\t\t\t\t.removeClass('dtr-control');\n\n\t\t\tdt.cells(null, firstVisible, { page: 'current' }).nodes().to$().addClass('dtr-control');\n\t\t}\n\t},\n\n\t/**\n\t * Show the details for the child row\n\t *\n\t * @param  {DataTables.Api} row    API instance for the row\n\t * @param  {boolean}        update Update flag\n\t * @private\n\t */\n\t_detailsDisplay: function (row, update) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar details = this.c.details;\n\t\tvar event = function (res) {\n\t\t\t$(row.node()).toggleClass('parent', res !== false);\n\t\t\t$(dt.table().node()).triggerHandler('responsive-display.dt', [dt, row, res, update]);\n\t\t};\n\n\t\tif (details && details.type !== false) {\n\t\t\tvar renderer =\n\t\t\t\ttypeof details.renderer === 'string'\n\t\t\t\t\t? Responsive.renderer[details.renderer]()\n\t\t\t\t\t: details.renderer;\n\n\t\t\tvar res = details.display(\n\t\t\t\trow,\n\t\t\t\tupdate,\n\t\t\t\tfunction () {\n\t\t\t\t\treturn renderer.call(that, dt, row[0], that._detailsObj(row[0]));\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\tevent(false);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (typeof res === 'boolean') {\n\t\t\t\tevent(res);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Initialisation for the details handler\n\t *\n\t * @private\n\t */\n\t_detailsInit: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar details = this.c.details;\n\n\t\t// The inline type always uses the first child as the target\n\t\tif (details.type === 'inline') {\n\t\t\tdetails.target = 'td.dtr-control, th.dtr-control';\n\t\t}\n\n\t\t// Keyboard accessibility\n\t\tdt.on('draw.dtr', function () {\n\t\t\tthat._tabIndexes();\n\t\t});\n\t\tthat._tabIndexes(); // Initial draw has already happened\n\n\t\t$(dt.table().body()).on('keyup.dtr', 'td, th', function (e) {\n\t\t\tif (e.keyCode === 13 && $(this).data('dtr-keyboard')) {\n\t\t\t\t$(this).click();\n\t\t\t}\n\t\t});\n\n\t\t// type.target can be a string jQuery selector or a column index\n\t\tvar target = details.target;\n\t\tvar selector = typeof target === 'string' ? target : 'td, th';\n\n\t\tif (target !== undefined || target !== null) {\n\t\t\t// Click handler to show / hide the details rows when they are available\n\t\t\t$(dt.table().body()).on('click.dtr mousedown.dtr mouseup.dtr', selector, function (e) {\n\t\t\t\t// If the table is not collapsed (i.e. there is no hidden columns)\n\t\t\t\t// then take no action\n\t\t\t\tif (!$(dt.table().node()).hasClass('collapsed')) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check that the row is actually a DataTable's controlled node\n\t\t\t\tif ($.inArray($(this).closest('tr').get(0), dt.rows().nodes().toArray()) === -1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// For column index, we determine if we should act or not in the\n\t\t\t\t// handler - otherwise it is already okay\n\t\t\t\tif (typeof target === 'number') {\n\t\t\t\t\tvar targetIdx = target < 0 ? dt.columns().eq(0).length + target : target;\n\n\t\t\t\t\tif (dt.cell(this).index().column !== targetIdx) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// $().closest() includes itself in its check\n\t\t\t\tvar row = dt.row($(this).closest('tr'));\n\n\t\t\t\t// Check event type to do an action\n\t\t\t\tif (e.type === 'click') {\n\t\t\t\t\t// The renderer is given as a function so the caller can execute it\n\t\t\t\t\t// only when they need (i.e. if hiding there is no point is running\n\t\t\t\t\t// the renderer)\n\t\t\t\t\tthat._detailsDisplay(row, false);\n\t\t\t\t}\n\t\t\t\telse if (e.type === 'mousedown') {\n\t\t\t\t\t// For mouse users, prevent the focus ring from showing\n\t\t\t\t\t$(this).css('outline', 'none');\n\t\t\t\t}\n\t\t\t\telse if (e.type === 'mouseup') {\n\t\t\t\t\t// And then re-allow at the end of the click\n\t\t\t\t\t$(this).trigger('blur').css('outline', '');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Get the details to pass to a renderer for a row\n\t * @param  {int} rowIdx Row index\n\t * @private\n\t */\n\t_detailsObj: function (rowIdx) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\n\t\treturn $.map(this.s.columns, function (col, i) {\n\t\t\t// Never and control columns should not be passed to the renderer\n\t\t\tif (col.never || col.control) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar dtCol = dt.settings()[0].aoColumns[i];\n\n\t\t\treturn {\n\t\t\t\tclassName: dtCol.sClass,\n\t\t\t\tcolumnIndex: i,\n\t\t\t\tdata: dt.cell(rowIdx, i).render(that.c.orthogonal),\n\t\t\t\thidden: dt.column(i).visible() && !that.s.current[i],\n\t\t\t\trowIndex: rowIdx,\n\t\t\t\ttitle: dtCol.sTitle !== null ? dtCol.sTitle : $(dt.column(i).header()).text()\n\t\t\t};\n\t\t});\n\t},\n\n\t/**\n\t * Find a breakpoint object from a name\n\t *\n\t * @param  {string} name Breakpoint name to find\n\t * @return {object}      Breakpoint description object\n\t * @private\n\t */\n\t_find: function (name) {\n\t\tvar breakpoints = this.c.breakpoints;\n\n\t\tfor (var i = 0, ien = breakpoints.length; i < ien; i++) {\n\t\t\tif (breakpoints[i].name === name) {\n\t\t\t\treturn breakpoints[i];\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Re-create the contents of the child rows as the display has changed in\n\t * some way.\n\t *\n\t * @private\n\t */\n\t_redrawChildren: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\n\t\tdt.rows({ page: 'current' }).iterator('row', function (settings, idx) {\n\t\t\tthat._detailsDisplay(dt.row(idx), true);\n\t\t});\n\t},\n\n\t/**\n\t * Alter the table display for a resized viewport. This involves first\n\t * determining what breakpoint the window currently is in, getting the\n\t * column visibilities to apply and then setting them.\n\t *\n\t * @param  {boolean} forceRedraw Force a redraw\n\t * @private\n\t */\n\t_resize: function (forceRedraw) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar width = $(window).innerWidth();\n\t\tvar breakpoints = this.c.breakpoints;\n\t\tvar breakpoint = breakpoints[0].name;\n\t\tvar columns = this.s.columns;\n\t\tvar i, ien;\n\t\tvar oldVis = this.s.current.slice();\n\n\t\t// Determine what breakpoint we are currently at\n\t\tfor (i = breakpoints.length - 1; i >= 0; i--) {\n\t\t\tif (width <= breakpoints[i].width) {\n\t\t\t\tbreakpoint = breakpoints[i].name;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Show the columns for that break point\n\t\tvar columnsVis = this._columnsVisiblity(breakpoint);\n\t\tthis.s.current = columnsVis;\n\n\t\t// Set the class before the column visibility is changed so event\n\t\t// listeners know what the state is. Need to determine if there are\n\t\t// any columns that are not visible but can be shown\n\t\tvar collapsedClass = false;\n\n\t\tfor (i = 0, ien = columns.length; i < ien; i++) {\n\t\t\tif (\n\t\t\t\tcolumnsVis[i] === false &&\n\t\t\t\t!columns[i].never &&\n\t\t\t\t!columns[i].control &&\n\t\t\t\t!dt.column(i).visible() === false\n\t\t\t) {\n\t\t\t\tcollapsedClass = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t$(dt.table().node()).toggleClass('collapsed', collapsedClass);\n\n\t\tvar changed = false;\n\t\tvar visible = 0;\n\n\t\tdt.columns()\n\t\t\t.eq(0)\n\t\t\t.each(function (colIdx, i) {\n\t\t\t\tif (columnsVis[i] === true) {\n\t\t\t\t\tvisible++;\n\t\t\t\t}\n\n\t\t\t\tif (forceRedraw || columnsVis[i] !== oldVis[i]) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t\tthat._setColumnVis(colIdx, columnsVis[i]);\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Always need to update the display, regardless of if it has changed or not, so nodes\n\t\t// can be re-inserted for listHiddenNodes\n\t\tthis._redrawChildren();\n\n\t\tif (changed) {\n\t\t\t// Inform listeners of the change\n\t\t\t$(dt.table().node()).trigger('responsive-resize.dt', [dt, this.s.current]);\n\n\t\t\t// If no records, update the \"No records\" display element\n\t\t\tif (dt.page.info().recordsDisplay === 0) {\n\t\t\t\t$('td', dt.table().body()).eq(0).attr('colspan', visible);\n\t\t\t}\n\t\t}\n\n\t\tthat._controlClass();\n\t},\n\n\t/**\n\t * Determine the width of each column in the table so the auto column hiding\n\t * has that information to work with. This method is never going to be 100%\n\t * perfect since column widths can change slightly per page, but without\n\t * seriously compromising performance this is quite effective.\n\t *\n\t * @private\n\t */\n\t_resizeAuto: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar columns = this.s.columns;\n\t\tvar that = this;\n\n\t\t// Are we allowed to do auto sizing?\n\t\tif (!this.c.auto) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Are there any columns that actually need auto-sizing, or do they all\n\t\t// have classes defined\n\t\tif (\n\t\t\t$.inArray(\n\t\t\t\ttrue,\n\t\t\t\t$.map(columns, function (c) {\n\t\t\t\t\treturn c.auto;\n\t\t\t\t})\n\t\t\t) === -1\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Need to restore all children. They will be reinstated by a re-render\n\t\tif (!$.isEmptyObject(this.s.childNodeStore)) {\n\t\t\t$.each(this.s.childNodeStore, function (key) {\n\t\t\t\tvar idx = key.split('-');\n\n\t\t\t\tthat._childNodesRestore(dt, idx[0] * 1, idx[1] * 1);\n\t\t\t});\n\t\t}\n\n\t\t// Clone the table with the current data in it\n\t\tvar tableWidth = dt.table().node().offsetWidth;\n\t\tvar columnWidths = dt.columns;\n\t\tvar clonedTable = dt.table().node().cloneNode(false);\n\t\tvar clonedHeader = $(dt.table().header().cloneNode(false)).appendTo(clonedTable);\n\t\tvar clonedBody = $(dt.table().body()).clone(false, false).empty().appendTo(clonedTable); // use jQuery because of IE8\n\n\t\tclonedTable.style.width = 'auto';\n\n\t\t// Header\n\t\tvar headerCells = dt\n\t\t\t.columns()\n\t\t\t.header()\n\t\t\t.filter(function (idx) {\n\t\t\t\treturn dt.column(idx).visible();\n\t\t\t})\n\t\t\t.to$()\n\t\t\t.clone(false)\n\t\t\t.css('display', 'table-cell')\n\t\t\t.css('width', 'auto')\n\t\t\t.css('min-width', 0);\n\n\t\t// Body rows - we don't need to take account of DataTables' column\n\t\t// visibility since we implement our own here (hence the `display` set)\n\t\t$(clonedBody)\n\t\t\t.append($(dt.rows({ page: 'current' }).nodes()).clone(false))\n\t\t\t.find('th, td')\n\t\t\t.css('display', '');\n\n\t\t// Footer\n\t\tvar footer = dt.table().footer();\n\t\tif (footer) {\n\t\t\tvar clonedFooter = $(footer.cloneNode(false)).appendTo(clonedTable);\n\t\t\tvar footerCells = dt\n\t\t\t\t.columns()\n\t\t\t\t.footer()\n\t\t\t\t.filter(function (idx) {\n\t\t\t\t\treturn dt.column(idx).visible();\n\t\t\t\t})\n\t\t\t\t.to$()\n\t\t\t\t.clone(false)\n\t\t\t\t.css('display', 'table-cell');\n\n\t\t\t$('<tr/>').append(footerCells).appendTo(clonedFooter);\n\t\t}\n\n\t\t$('<tr/>').append(headerCells).appendTo(clonedHeader);\n\n\t\t// In the inline case extra padding is applied to the first column to\n\t\t// give space for the show / hide icon. We need to use this in the\n\t\t// calculation\n\t\tif (this.c.details.type === 'inline') {\n\t\t\t$(clonedTable).addClass('dtr-inline collapsed');\n\t\t}\n\n\t\t// It is unsafe to insert elements with the same name into the DOM\n\t\t// multiple times. For example, cloning and inserting a checked radio\n\t\t// clears the chcecked state of the original radio.\n\t\t$(clonedTable).find('[name]').removeAttr('name');\n\n\t\t// A position absolute table would take the table out of the flow of\n\t\t// our container element, bypassing the height and width (Scroller)\n\t\t$(clonedTable).css('position', 'relative');\n\n\t\tvar inserted = $('<div/>')\n\t\t\t.css({\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1,\n\t\t\t\toverflow: 'hidden',\n\t\t\t\tclear: 'both'\n\t\t\t})\n\t\t\t.append(clonedTable);\n\n\t\tinserted.insertBefore(dt.table().node());\n\n\t\t// The cloned header now contains the smallest that each column can be\n\t\theaderCells.each(function (i) {\n\t\t\tvar idx = dt.column.index('fromVisible', i);\n\t\t\tcolumns[idx].minWidth = this.offsetWidth || 0;\n\t\t});\n\n\t\tinserted.remove();\n\t},\n\n\t/**\n\t * Get the state of the current hidden columns - controlled by Responsive only\n\t */\n\t_responsiveOnlyHidden: function () {\n\t\tvar dt = this.s.dt;\n\n\t\treturn $.map(this.s.current, function (v, i) {\n\t\t\t// If the column is hidden by DataTables then it can't be hidden by\n\t\t\t// Responsive!\n\t\t\tif (dt.column(i).visible() === false) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn v;\n\t\t});\n\t},\n\n\t/**\n\t * Set a column's visibility.\n\t *\n\t * We don't use DataTables' column visibility controls in order to ensure\n\t * that column visibility can Responsive can no-exist. Since only IE8+ is\n\t * supported (and all evergreen browsers of course) the control of the\n\t * display attribute works well.\n\t *\n\t * @param {integer} col      Column index\n\t * @param {boolean} showHide Show or hide (true or false)\n\t * @private\n\t */\n\t_setColumnVis: function (col, showHide) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar display = showHide ? '' : 'none'; // empty string will remove the attr\n\n\t\t$(dt.column(col).header()).css('display', display).toggleClass('dtr-hidden', !showHide);\n\n\t\t$(dt.column(col).footer()).css('display', display).toggleClass('dtr-hidden', !showHide);\n\n\t\tdt.column(col).nodes().to$().css('display', display).toggleClass('dtr-hidden', !showHide);\n\n\t\t// If the are child nodes stored, we might need to reinsert them\n\t\tif (!$.isEmptyObject(this.s.childNodeStore)) {\n\t\t\tdt.cells(null, col)\n\t\t\t\t.indexes()\n\t\t\t\t.each(function (idx) {\n\t\t\t\t\tthat._childNodesRestore(dt, idx.row, idx.column);\n\t\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Update the cell tab indexes for keyboard accessibility. This is called on\n\t * every table draw - that is potentially inefficient, but also the least\n\t * complex option given that column visibility can change on the fly. Its a\n\t * shame user-focus was removed from CSS 3 UI, as it would have solved this\n\t * issue with a single CSS statement.\n\t *\n\t * @private\n\t */\n\t_tabIndexes: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar cells = dt.cells({ page: 'current' }).nodes().to$();\n\t\tvar ctx = dt.settings()[0];\n\t\tvar target = this.c.details.target;\n\n\t\tcells.filter('[data-dtr-keyboard]').removeData('[data-dtr-keyboard]');\n\n\t\tif (typeof target === 'number') {\n\t\t\tdt.cells(null, target, { page: 'current' })\n\t\t\t\t.nodes()\n\t\t\t\t.to$()\n\t\t\t\t.attr('tabIndex', ctx.iTabIndex)\n\t\t\t\t.data('dtr-keyboard', 1);\n\t\t}\n\t\telse {\n\t\t\t// This is a bit of a hack - we need to limit the selected nodes to just\n\t\t\t// those of this table\n\t\t\tif (target === 'td:first-child, th:first-child') {\n\t\t\t\ttarget = '>td:first-child, >th:first-child';\n\t\t\t}\n\n\t\t\t$(target, dt.rows({ page: 'current' }).nodes())\n\t\t\t\t.attr('tabIndex', ctx.iTabIndex)\n\t\t\t\t.data('dtr-keyboard', 1);\n\t\t}\n\t}\n});\n\n/**\n * List of default breakpoints. Each item in the array is an object with two\n * properties:\n *\n * * `name` - the breakpoint name.\n * * `width` - the breakpoint width\n *\n * @name Responsive.breakpoints\n * @static\n */\nResponsive.breakpoints = [\n\t{ name: 'desktop', width: Infinity },\n\t{ name: 'tablet-l', width: 1024 },\n\t{ name: 'tablet-p', width: 768 },\n\t{ name: 'mobile-l', width: 480 },\n\t{ name: 'mobile-p', width: 320 }\n];\n\n/**\n * Display methods - functions which define how the hidden data should be shown\n * in the table.\n *\n * @namespace\n * @name Responsive.defaults\n * @static\n */\nResponsive.display = {\n\tchildRow: function (row, update, render) {\n\t\tif (update) {\n\t\t\tif ($(row.node()).hasClass('parent')) {\n\t\t\t\trow.child(render(), 'child').show();\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (!row.child.isShown()) {\n\t\t\t\trow.child(render(), 'child').show();\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\trow.child(false);\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\tchildRowImmediate: function (row, update, render) {\n\t\tif ((!update && row.child.isShown()) || !row.responsive.hasHidden()) {\n\t\t\t// User interaction and the row is show, or nothing to show\n\t\t\trow.child(false);\n\n\t\t\treturn false;\n\t\t}\n\t\telse {\n\t\t\t// Display\n\t\t\trow.child(render(), 'child').show();\n\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t// This is a wrapper so the modal options for Bootstrap and jQuery UI can\n\t// have options passed into them. This specific one doesn't need to be a\n\t// function but it is for consistency in the `modal` name\n\tmodal: function (options) {\n\t\treturn function (row, update, render, closeCallback) {\n\t\t\tif (!update) {\n\t\t\t\t// Show a modal\n\t\t\t\tvar close = function () {\n\t\t\t\t\tmodal.remove(); // will tidy events for us\n\t\t\t\t\t$(document).off('keypress.dtr');\n\t\t\t\t\t$(row.node()).removeClass('parent');\n\n\t\t\t\t\tcloseCallback();\n\t\t\t\t};\n\n\t\t\t\tvar modal = $('<div class=\"dtr-modal\"/>')\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('<div class=\"dtr-modal-display\"/>')\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t$('<div class=\"dtr-modal-content\"/>')\n\t\t\t\t\t\t\t\t\t.data('dtr-row-idx', row.index())\n\t\t\t\t\t\t\t\t\t.append(render())\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t$('<div class=\"dtr-modal-close\">&times;</div>').click(function () {\n\t\t\t\t\t\t\t\t\tclose();\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('<div class=\"dtr-modal-background\"/>').click(function () {\n\t\t\t\t\t\t\tclose();\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t.appendTo('body');\n\n\t\t\t\t$(row.node()).addClass('parent');\n\n\t\t\t\t$(document).on('keyup.dtr', function (e) {\n\t\t\t\t\tif (e.keyCode === 27) {\n\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\tclose();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar modal = $('div.dtr-modal-content');\n\n\t\t\t\tif (modal.length && row.index() === modal.data('dtr-row-idx')) {\n\t\t\t\t\tmodal.empty().append(render());\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Modal not shown, nothing to update\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options && options.header) {\n\t\t\t\t$('div.dtr-modal-content').prepend('<h2>' + options.header(row) + '</h2>');\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\t}\n};\n\n/**\n * Display methods - functions which define how the hidden data should be shown\n * in the table.\n *\n * @namespace\n * @name Responsive.defaults\n * @static\n */\nResponsive.renderer = {\n\tlistHiddenNodes: function () {\n\t\treturn function (api, rowIdx, columns) {\n\t\t\tvar that = this;\n\t\t\tvar ul = $('<ul data-dtr-index=\"' + rowIdx + '\" class=\"dtr-details\"/>');\n\t\t\tvar found = false;\n\n\t\t\tvar data = $.each(columns, function (i, col) {\n\t\t\t\tif (col.hidden) {\n\t\t\t\t\tvar klass = col.className ? 'class=\"' + col.className + '\"' : '';\n\n\t\t\t\t\t$(\n\t\t\t\t\t\t'<li ' +\n\t\t\t\t\t\t\tklass +\n\t\t\t\t\t\t\t' data-dtr-index=\"' +\n\t\t\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t\t\t'\" data-dt-row=\"' +\n\t\t\t\t\t\t\tcol.rowIndex +\n\t\t\t\t\t\t\t'\" data-dt-column=\"' +\n\t\t\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t\t\t'\">' +\n\t\t\t\t\t\t\t'<span class=\"dtr-title\">' +\n\t\t\t\t\t\t\tcol.title +\n\t\t\t\t\t\t\t'</span> ' +\n\t\t\t\t\t\t\t'</li>'\n\t\t\t\t\t)\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t$('<span class=\"dtr-data\"/>').append(\n\t\t\t\t\t\t\t\tthat._childNodes(api, col.rowIndex, col.columnIndex)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) // api.cell( col.rowIndex, col.columnIndex ).node().childNodes ) )\n\t\t\t\t\t\t.appendTo(ul);\n\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn found ? ul : false;\n\t\t};\n\t},\n\n\tlistHidden: function () {\n\t\treturn function (api, rowIdx, columns) {\n\t\t\tvar data = $.map(columns, function (col) {\n\t\t\t\tvar klass = col.className ? 'class=\"' + col.className + '\"' : '';\n\n\t\t\t\treturn col.hidden\n\t\t\t\t\t? '<li ' +\n\t\t\t\t\t\t\tklass +\n\t\t\t\t\t\t\t' data-dtr-index=\"' +\n\t\t\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t\t\t'\" data-dt-row=\"' +\n\t\t\t\t\t\t\tcol.rowIndex +\n\t\t\t\t\t\t\t'\" data-dt-column=\"' +\n\t\t\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t\t\t'\">' +\n\t\t\t\t\t\t\t'<span class=\"dtr-title\">' +\n\t\t\t\t\t\t\tcol.title +\n\t\t\t\t\t\t\t'</span> ' +\n\t\t\t\t\t\t\t'<span class=\"dtr-data\">' +\n\t\t\t\t\t\t\tcol.data +\n\t\t\t\t\t\t\t'</span>' +\n\t\t\t\t\t\t\t'</li>'\n\t\t\t\t\t: '';\n\t\t\t}).join('');\n\n\t\t\treturn data\n\t\t\t\t? $('<ul data-dtr-index=\"' + rowIdx + '\" class=\"dtr-details\"/>').append(data)\n\t\t\t\t: false;\n\t\t};\n\t},\n\n\ttableAll: function (options) {\n\t\toptions = $.extend(\n\t\t\t{\n\t\t\t\ttableClass: ''\n\t\t\t},\n\t\t\toptions\n\t\t);\n\n\t\treturn function (api, rowIdx, columns) {\n\t\t\tvar data = $.map(columns, function (col) {\n\t\t\t\tvar klass = col.className ? 'class=\"' + col.className + '\"' : '';\n\n\t\t\t\treturn (\n\t\t\t\t\t'<tr ' +\n\t\t\t\t\tklass +\n\t\t\t\t\t' data-dt-row=\"' +\n\t\t\t\t\tcol.rowIndex +\n\t\t\t\t\t'\" data-dt-column=\"' +\n\t\t\t\t\tcol.columnIndex +\n\t\t\t\t\t'\">' +\n\t\t\t\t\t'<td>' +\n\t\t\t\t\tcol.title +\n\t\t\t\t\t':' +\n\t\t\t\t\t'</td> ' +\n\t\t\t\t\t'<td>' +\n\t\t\t\t\tcol.data +\n\t\t\t\t\t'</td>' +\n\t\t\t\t\t'</tr>'\n\t\t\t\t);\n\t\t\t}).join('');\n\n\t\t\treturn $('<table class=\"' + options.tableClass + ' dtr-details\" width=\"100%\"/>').append(\n\t\t\t\tdata\n\t\t\t);\n\t\t};\n\t}\n};\n\n/**\n * Responsive default settings for initialisation\n *\n * @namespace\n * @name Responsive.defaults\n * @static\n */\nResponsive.defaults = {\n\t/**\n\t * List of breakpoints for the instance. Note that this means that each\n\t * instance can have its own breakpoints. Additionally, the breakpoints\n\t * cannot be changed once an instance has been creased.\n\t *\n\t * @type {Array}\n\t * @default Takes the value of `Responsive.breakpoints`\n\t */\n\tbreakpoints: Responsive.breakpoints,\n\n\t/**\n\t * Enable / disable auto hiding calculations. It can help to increase\n\t * performance slightly if you disable this option, but all columns would\n\t * need to have breakpoint classes assigned to them\n\t *\n\t * @type {Boolean}\n\t * @default  `true`\n\t */\n\tauto: true,\n\n\t/**\n\t * Details control. If given as a string value, the `type` property of the\n\t * default object is set to that value, and the defaults used for the rest\n\t * of the object - this is for ease of implementation.\n\t *\n\t * The object consists of the following properties:\n\t *\n\t * * `display` - A function that is used to show and hide the hidden details\n\t * * `renderer` - function that is called for display of the child row data.\n\t *   The default function will show the data from the hidden columns\n\t * * `target` - Used as the selector for what objects to attach the child\n\t *   open / close to\n\t * * `type` - `false` to disable the details display, `inline` or `column`\n\t *   for the two control types\n\t *\n\t * @type {Object|string}\n\t */\n\tdetails: {\n\t\tdisplay: Responsive.display.childRow,\n\n\t\trenderer: Responsive.renderer.listHidden(),\n\n\t\ttarget: 0,\n\n\t\ttype: 'inline'\n\t},\n\n\t/**\n\t * Orthogonal data request option. This is used to define the data type\n\t * requested when Responsive gets the data to show in the child row.\n\t *\n\t * @type {String}\n\t */\n\torthogonal: 'display'\n};\n\n/*\n * API\n */\nvar Api = $.fn.dataTable.Api;\n\n// Doesn't do anything - work around for a bug in DT... Not documented\nApi.register('responsive()', function () {\n\treturn this;\n});\n\nApi.register('responsive.index()', function (li) {\n\tli = $(li);\n\n\treturn {\n\t\tcolumn: li.data('dtr-index'),\n\t\trow: li.parent().data('dtr-index')\n\t};\n});\n\nApi.register('responsive.rebuild()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx._responsive) {\n\t\t\tctx._responsive._classLogic();\n\t\t}\n\t});\n});\n\nApi.register('responsive.recalc()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx._responsive) {\n\t\t\tctx._responsive._resizeAuto();\n\t\t\tctx._responsive._resize();\n\t\t}\n\t});\n});\n\nApi.register('responsive.hasHidden()', function () {\n\tvar ctx = this.context[0];\n\n\treturn ctx._responsive\n\t\t? $.inArray(false, ctx._responsive._responsiveOnlyHidden()) !== -1\n\t\t: false;\n});\n\nApi.registerPlural('columns().responsiveHidden()', 'column().responsiveHidden()', function () {\n\treturn this.iterator(\n\t\t'column',\n\t\tfunction (settings, column) {\n\t\t\treturn settings._responsive\n\t\t\t\t? settings._responsive._responsiveOnlyHidden()[column]\n\t\t\t\t: false;\n\t\t},\n\t\t1\n\t);\n});\n\n/**\n * Version information\n *\n * @name Responsive.version\n * @static\n */\nResponsive.version = '2.5.0';\n\n$.fn.dataTable.Responsive = Responsive;\n$.fn.DataTable.Responsive = Responsive;\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('preInit.dt.dtr', function (e, settings, json) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tif (\n\t\t$(settings.nTable).hasClass('responsive') ||\n\t\t$(settings.nTable).hasClass('dt-responsive') ||\n\t\tsettings.oInit.responsive ||\n\t\tDataTable.defaults.responsive\n\t) {\n\t\tvar init = settings.oInit.responsive;\n\n\t\tif (init !== false) {\n\t\t\tnew Responsive(settings, $.isPlainObject(init) ? init : {});\n\t\t}\n\t}\n});\n\n\nreturn DataTable;\n}));\n\n\n/*! Bootstrap 5 integration for DataTables' Responsive\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-responsive'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.Responsive ) {\n\t\t\t\trequire('datatables.net-responsive')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\nvar _display = DataTable.Responsive.display;\nvar _original = _display.modal;\nvar _modal = $(\n\t'<div class=\"modal fade dtr-bs-modal\" role=\"dialog\">' +\n\t\t'<div class=\"modal-dialog\" role=\"document\">' +\n\t\t'<div class=\"modal-content\">' +\n\t\t'<div class=\"modal-header\">' +\n\t\t'<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>' +\n\t\t'</div>' +\n\t\t'<div class=\"modal-body\"/>' +\n\t\t'</div>' +\n\t\t'</div>' +\n\t\t'</div>'\n);\nvar modal;\n\n// Note this could be undefined at the time of initialisation - the\n// DataTable.Responsive.bootstrap function can be used to set a different\n// bootstrap object\nvar _bs = window.bootstrap;\n\nDataTable.Responsive.bootstrap = function (bs) {\n\t_bs = bs;\n};\n\n_display.modal = function (options) {\n\tif (!modal) {\n\t\tmodal = new _bs.Modal(_modal[0]);\n\t}\n\n\treturn function (row, update, render, closeCallback) {\n\t\tif (!$.fn.modal) {\n\t\t\treturn _original(row, update, render, closeCallback);\n\t\t}\n\t\telse {\n\t\t\tif (!update) {\n\t\t\t\tif (options && options.header) {\n\t\t\t\t\tvar header = _modal.find('div.modal-header');\n\t\t\t\t\tvar button = header.find('button').detach();\n\n\t\t\t\t\theader\n\t\t\t\t\t\t.empty()\n\t\t\t\t\t\t.append('<h4 class=\"modal-title\">' + options.header(row) + '</h4>')\n\t\t\t\t\t\t.append(button);\n\t\t\t\t}\n\n\t\t\t\t_modal.find('div.modal-body').empty().append(render());\n\n\t\t\t\t_modal\n\t\t\t\t\t.data('dtr-row-idx', row.index())\n\t\t\t\t\t.one('hidden.bs.modal', closeCallback)\n\t\t\t\t\t.appendTo('body')\n\t\t\t\t\t.modal();\n\n\t\t\t\tmodal.show();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ($.contains(document, _modal[0]) && row.index() === _modal.data('dtr-row-idx')) {\n\t\t\t\t\t_modal.find('div.modal-body').empty().append(render());\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Modal not shown for this row - do nothing\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t};\n};\n\n\nreturn DataTable;\n}));\n\n\n/*! RowGroup 1.4.1\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     RowGroup\n * @description RowGrouping for DataTables\n * @version     1.4.1\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     datatables.net\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\nvar RowGroup = function (dt, opts) {\n\t// Sanity check that we are using DataTables 1.10 or newer\n\tif (!DataTable.versionCheck || !DataTable.versionCheck('1.10.8')) {\n\t\tthrow 'RowGroup requires DataTables 1.10.8 or newer';\n\t}\n\n\t// User and defaults configuration object\n\tthis.c = $.extend(true, {}, DataTable.defaults.rowGroup, RowGroup.defaults, opts);\n\n\t// Internal settings\n\tthis.s = {\n\t\tdt: new DataTable.Api(dt)\n\t};\n\n\t// DOM items\n\tthis.dom = {};\n\n\t// Check if row grouping has already been initialised on this table\n\tvar settings = this.s.dt.settings()[0];\n\tvar existing = settings.rowGroup;\n\tif (existing) {\n\t\treturn existing;\n\t}\n\n\tsettings.rowGroup = this;\n\tthis._constructor();\n};\n\n$.extend(RowGroup.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * API methods for DataTables API interface\n\t */\n\n\t/**\n\t * Get/set the grouping data source - need to call draw after this is\n\t * executed as a setter\n\t * @returns string~RowGroup\n\t */\n\tdataSrc: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.c.dataSrc;\n\t\t}\n\n\t\tvar dt = this.s.dt;\n\n\t\tthis.c.dataSrc = val;\n\n\t\t$(dt.table().node()).triggerHandler('rowgroup-datasrc.dt', [dt, val]);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Disable - need to call draw after this is executed\n\t * @returns RowGroup\n\t */\n\tdisable: function () {\n\t\tthis.c.enable = false;\n\t\treturn this;\n\t},\n\n\t/**\n\t * Enable - need to call draw after this is executed\n\t * @returns RowGroup\n\t */\n\tenable: function (flag) {\n\t\tif (flag === false) {\n\t\t\treturn this.disable();\n\t\t}\n\n\t\tthis.c.enable = true;\n\t\treturn this;\n\t},\n\n\t/**\n\t * Get enabled flag\n\t * @returns boolean\n\t */\n\tenabled: function () {\n\t\treturn this.c.enable;\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar hostSettings = dt.settings()[0];\n\n\t\tdt.on('draw.dtrg', function (e, s) {\n\t\t\tif (that.c.enable && hostSettings === s) {\n\t\t\t\tthat._draw();\n\t\t\t}\n\t\t});\n\n\t\tdt.on('column-visibility.dt.dtrg responsive-resize.dt.dtrg', function () {\n\t\t\tthat._adjustColspan();\n\t\t});\n\n\t\tdt.on('destroy', function () {\n\t\t\tdt.off('.dtrg');\n\t\t});\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Adjust column span when column visibility changes\n\t * @private\n\t */\n\t_adjustColspan: function () {\n\t\t$('tr.' + this.c.className, this.s.dt.table().body())\n\t\t\t.find('th:visible, td:visible')\n\t\t\t.attr('colspan', this._colspan());\n\t},\n\n\t/**\n\t * Get the number of columns that a grouping row should span\n\t * @private\n\t */\n\t_colspan: function () {\n\t\treturn this.s.dt\n\t\t\t.columns()\n\t\t\t.visible()\n\t\t\t.reduce(function (a, b) {\n\t\t\t\treturn a + b;\n\t\t\t}, 0);\n\t},\n\n\t/**\n\t * Update function that is called whenever we need to draw the grouping rows.\n\t * This is basically a bootstrap for the self iterative _group and _groupDisplay\n\t * methods\n\t * @private\n\t */\n\t_draw: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar groupedRows = this._group(0, dt.rows({ page: 'current' }).indexes());\n\n\t\tthis._groupDisplay(0, groupedRows);\n\t},\n\n\t/**\n\t * Get the grouping information from a data set (index) of rows\n\t * @param {number} level Nesting level\n\t * @param {DataTables.Api} rows API of the rows to consider for this group\n\t * @returns {object[]} Nested grouping information - it is structured like this:\n\t *\t{\n\t *\t\tdataPoint: 'Edinburgh',\n\t *\t\trows: [ 1,2,3,4,5,6,7 ],\n\t *\t\tchildren: [ {\n\t *\t\t\tdataPoint: 'developer'\n\t *\t\t\trows: [ 1, 2, 3 ]\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tdataPoint: 'support',\n\t *\t\t\trows: [ 4, 5, 6, 7 ]\n\t *\t\t} ]\n\t *\t}\n\t * @private\n\t */\n\t_group: function (level, rows) {\n\t\tvar fns = Array.isArray(this.c.dataSrc) ? this.c.dataSrc : [this.c.dataSrc];\n\t\tvar fn = DataTable.ext.oApi._fnGetObjectDataFn(fns[level]);\n\t\tvar dt = this.s.dt;\n\t\tvar group, last;\n\t\tvar data = [];\n\t\tvar that = this;\n\n\t\tfor (var i = 0, ien = rows.length; i < ien; i++) {\n\t\t\tvar rowIndex = rows[i];\n\t\t\tvar rowData = dt.row(rowIndex).data();\n\t\t\tvar group = fn(rowData);\n\n\t\t\tif (group === null || group === undefined) {\n\t\t\t\tgroup = that.c.emptyDataGroup;\n\t\t\t}\n\n\t\t\tif (last === undefined || group !== last) {\n\t\t\t\tdata.push({\n\t\t\t\t\tdataPoint: group,\n\t\t\t\t\trows: []\n\t\t\t\t});\n\n\t\t\t\tlast = group;\n\t\t\t}\n\n\t\t\tdata[data.length - 1].rows.push(rowIndex);\n\t\t}\n\n\t\tif (fns[level + 1] !== undefined) {\n\t\t\tfor (var i = 0, ien = data.length; i < ien; i++) {\n\t\t\t\tdata[i].children = this._group(level + 1, data[i].rows);\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t/**\n\t * Row group display - insert the rows into the document\n\t * @param {number} level Nesting level\n\t * @param {object[]} groups Takes the nested array from `_group`\n\t * @private\n\t */\n\t_groupDisplay: function (level, groups) {\n\t\tvar dt = this.s.dt;\n\t\tvar display;\n\n\t\tfor (var i = 0, ien = groups.length; i < ien; i++) {\n\t\t\tvar group = groups[i];\n\t\t\tvar groupName = group.dataPoint;\n\t\t\tvar row;\n\t\t\tvar rows = group.rows;\n\n\t\t\tif (this.c.startRender) {\n\t\t\t\tdisplay = this.c.startRender.call(this, dt.rows(rows), groupName, level);\n\t\t\t\trow = this._rowWrap(display, this.c.startClassName, level);\n\n\t\t\t\tif (row) {\n\t\t\t\t\trow.insertBefore(dt.row(rows[0]).node());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.c.endRender) {\n\t\t\t\tdisplay = this.c.endRender.call(this, dt.rows(rows), groupName, level);\n\t\t\t\trow = this._rowWrap(display, this.c.endClassName, level);\n\n\t\t\t\tif (row) {\n\t\t\t\t\trow.insertAfter(dt.row(rows[rows.length - 1]).node());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (group.children) {\n\t\t\t\tthis._groupDisplay(level + 1, group.children);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Take a rendered value from an end user and make it suitable for display\n\t * as a row, by wrapping it in a row, or detecting that it is a row.\n\t * @param {node|jQuery|string} display Display value\n\t * @param {string} className Class to add to the row\n\t * @param {array} group\n\t * @param {number} group level\n\t * @private\n\t */\n\t_rowWrap: function (display, className, level) {\n\t\tvar row;\n\n\t\tif (display === null || display === '') {\n\t\t\tdisplay = this.c.emptyDataGroup;\n\t\t}\n\n\t\tif (display === undefined || display === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (\n\t\t\ttypeof display === 'object' &&\n\t\t\tdisplay.nodeName &&\n\t\t\tdisplay.nodeName.toLowerCase() === 'tr'\n\t\t) {\n\t\t\trow = $(display);\n\t\t}\n\t\telse if (\n\t\t\tdisplay instanceof $ &&\n\t\t\tdisplay.length &&\n\t\t\tdisplay[0].nodeName.toLowerCase() === 'tr'\n\t\t) {\n\t\t\trow = display;\n\t\t}\n\t\telse {\n\t\t\trow = $('<tr/>').append(\n\t\t\t\t$('<th/>').attr('colspan', this._colspan()).attr('scope', 'row').append(display)\n\t\t\t);\n\t\t}\n\n\t\treturn row\n\t\t\t.addClass(this.c.className)\n\t\t\t.addClass(className)\n\t\t\t.addClass('dtrg-level-' + level);\n\t}\n});\n\n/**\n * RowGroup default settings for initialisation\n *\n * @namespace\n * @name RowGroup.defaults\n * @static\n */\nRowGroup.defaults = {\n\t/**\n\t * Class to apply to grouping rows - applied to both the start and\n\t * end grouping rows.\n\t * @type string\n\t */\n\tclassName: 'dtrg-group',\n\n\t/**\n\t * Data property from which to read the grouping information\n\t * @type string|integer|array\n\t */\n\tdataSrc: 0,\n\n\t/**\n\t * Text to show if no data is found for a group\n\t * @type string\n\t */\n\temptyDataGroup: 'No group',\n\n\t/**\n\t * Initial enablement state\n\t * @boolean\n\t */\n\tenable: true,\n\n\t/**\n\t * Class name to give to the end grouping row\n\t * @type string\n\t */\n\tendClassName: 'dtrg-end',\n\n\t/**\n\t * End grouping label function\n\t * @function\n\t */\n\tendRender: null,\n\n\t/**\n\t * Class name to give to the start grouping row\n\t * @type string\n\t */\n\tstartClassName: 'dtrg-start',\n\n\t/**\n\t * Start grouping label function\n\t * @function\n\t */\n\tstartRender: function (rows, group) {\n\t\treturn group;\n\t}\n};\n\nRowGroup.version = '1.4.1';\n\n$.fn.dataTable.RowGroup = RowGroup;\n$.fn.DataTable.RowGroup = RowGroup;\n\nDataTable.Api.register('rowGroup()', function () {\n\treturn this;\n});\n\nDataTable.Api.register('rowGroup().disable()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.rowGroup) {\n\t\t\tctx.rowGroup.enable(false);\n\t\t}\n\t});\n});\n\nDataTable.Api.register('rowGroup().enable()', function (opts) {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.rowGroup) {\n\t\t\tctx.rowGroup.enable(opts === undefined ? true : opts);\n\t\t}\n\t});\n});\n\nDataTable.Api.register('rowGroup().enabled()', function () {\n\tvar ctx = this.context;\n\n\treturn ctx.length && ctx[0].rowGroup ? ctx[0].rowGroup.enabled() : false;\n});\n\nDataTable.Api.register('rowGroup().dataSrc()', function (val) {\n\tif (val === undefined) {\n\t\treturn this.context[0].rowGroup.dataSrc();\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.rowGroup) {\n\t\t\tctx.rowGroup.dataSrc(val);\n\t\t}\n\t});\n});\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('preInit.dt.dtrg', function (e, settings, json) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.rowGroup;\n\tvar defaults = DataTable.defaults.rowGroup;\n\n\tif (init || defaults) {\n\t\tvar opts = $.extend({}, defaults, init);\n\n\t\tif (init !== false) {\n\t\t\tnew RowGroup(settings, opts);\n\t\t}\n\t}\n});\n\n\nreturn DataTable;\n}));\n\n\n/*! RowReorder 1.4.1\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     RowReorder\n * @description Row reordering extension for DataTables\n * @version     1.4.1\n * @file        dataTables.rowReorder.js\n * @author      SpryMedia Ltd\n * @contact     datatables.net\n * @copyright   Copyright 2015-2023 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/**\n * RowReorder provides the ability in DataTables to click and drag rows to\n * reorder them. When a row is dropped the data for the rows effected will be\n * updated to reflect the change. Normally this data point should also be the\n * column being sorted upon in the DataTable but this does not need to be the\n * case. RowReorder implements a \"data swap\" method - so the rows being\n * reordered take the value of the data point from the row that used to occupy\n * the row's new position.\n *\n * Initialisation is done by either:\n *\n * * `rowReorder` parameter in the DataTable initialisation object\n * * `new $.fn.dataTable.RowReorder( table, opts )` after DataTables\n *   initialisation.\n *\n *  @class\n *  @param {object} settings DataTables settings object for the host table\n *  @param {object} [opts] Configuration options\n *  @requires jQuery 1.7+\n *  @requires DataTables 1.10.7+\n */\nvar RowReorder = function (dt, opts) {\n\t// Sanity check that we are using DataTables 1.10 or newer\n\tif (!DataTable.versionCheck || !DataTable.versionCheck('1.10.8')) {\n\t\tthrow 'DataTables RowReorder requires DataTables 1.10.8 or newer';\n\t}\n\n\t// User and defaults configuration object\n\tthis.c = $.extend(true, {}, DataTable.defaults.rowReorder, RowReorder.defaults, opts);\n\n\t// Internal settings\n\tthis.s = {\n\t\t/** @type {integer} Scroll body top cache */\n\t\tbodyTop: null,\n\n\t\t/** @type {DataTable.Api} DataTables' API instance */\n\t\tdt: new DataTable.Api(dt),\n\n\t\t/** @type {function} Data fetch function */\n\t\tgetDataFn: DataTable.ext.oApi._fnGetObjectDataFn(this.c.dataSrc),\n\n\t\t/** @type {array} Pixel positions for row insertion calculation */\n\t\tmiddles: null,\n\n\t\t/** @type {Object} Cached dimension information for use in the mouse move event handler */\n\t\tscroll: {},\n\n\t\t/** @type {integer} Interval object used for smooth scrolling */\n\t\tscrollInterval: null,\n\n\t\t/** @type {function} Data set function */\n\t\tsetDataFn: DataTable.ext.oApi._fnSetObjectDataFn(this.c.dataSrc),\n\n\t\t/** @type {Object} Mouse down information */\n\t\tstart: {\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\toffsetTop: 0,\n\t\t\toffsetLeft: 0,\n\t\t\tnodes: [],\n\t\t\trowIndex: 0\n\t\t},\n\n\t\t/** @type {integer} Window height cached value */\n\t\twindowHeight: 0,\n\n\t\t/** @type {integer} Document outer height cached value */\n\t\tdocumentOuterHeight: 0,\n\n\t\t/** @type {integer} DOM clone outer height cached value */\n\t\tdomCloneOuterHeight: 0,\n\n\t\t/** @type {integer} Flag used for signing if the drop is enabled or not */\n\t\tdropAllowed: true\n\t};\n\n\t// DOM items\n\tthis.dom = {\n\t\t/** @type {jQuery} Cloned row being moved around */\n\t\tclone: null,\n\t\tcloneParent: null,\n\n\t\t/** @type {jQuery} DataTables scrolling container */\n\t\tdtScroll: $('div.dataTables_scrollBody', this.s.dt.table().container())\n\t};\n\n\t// Check if row reorder has already been initialised on this table\n\tvar settings = this.s.dt.settings()[0];\n\tvar exisiting = settings.rowreorder;\n\n\tif (exisiting) {\n\t\treturn exisiting;\n\t}\n\n\tif (!this.dom.dtScroll.length) {\n\t\tthis.dom.dtScroll = $(this.s.dt.table().container(), 'tbody');\n\t}\n\n\tsettings.rowreorder = this;\n\tthis._constructor();\n};\n\n$.extend(RowReorder.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialise the RowReorder instance\n\t *\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar table = $(dt.table().node());\n\n\t\t// Need to be able to calculate the row positions relative to the table\n\t\tif (table.css('position') === 'static') {\n\t\t\ttable.css('position', 'relative');\n\t\t}\n\n\t\t// listen for mouse down on the target column - we have to implement\n\t\t// this rather than using HTML5 drag and drop as drag and drop doesn't\n\t\t// appear to work on table rows at this time. Also mobile browsers are\n\t\t// not supported.\n\t\t// Use `table().container()` rather than just the table node for IE8 -\n\t\t// otherwise it only works once...\n\t\t$(dt.table().container()).on(\n\t\t\t'mousedown.rowReorder touchstart.rowReorder',\n\t\t\tthis.c.selector,\n\t\t\tfunction (e) {\n\t\t\t\tif (!that.c.enable) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Ignore excluded children of the selector\n\t\t\t\tif ($(e.target).is(that.c.excludedChildren)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tvar tr = $(this).closest('tr');\n\t\t\t\tvar row = dt.row(tr);\n\n\t\t\t\t// Double check that it is a DataTable row\n\t\t\t\tif (row.any()) {\n\t\t\t\t\tthat._emitEvent('pre-row-reorder', {\n\t\t\t\t\t\tnode: row.node(),\n\t\t\t\t\t\tindex: row.index()\n\t\t\t\t\t});\n\n\t\t\t\t\tthat._mouseDown(e, tr);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tdt.on('destroy.rowReorder', function () {\n\t\t\t$(dt.table().container()).off('.rowReorder');\n\t\t\tdt.off('.rowReorder');\n\t\t});\n\n\t\tthis._keyup = this._keyup.bind(this);\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Cache the measurements that RowReorder needs in the mouse move handler\n\t * to attempt to speed things up, rather than reading from the DOM.\n\t *\n\t * @private\n\t */\n\t_cachePositions: function () {\n\t\tvar dt = this.s.dt;\n\n\t\t// Frustratingly, if we add `position:relative` to the tbody, the\n\t\t// position is still relatively to the parent. So we need to adjust\n\t\t// for that\n\t\tvar headerHeight = $(dt.table().node()).find('thead').outerHeight();\n\n\t\t// Need to pass the nodes through jQuery to get them in document order,\n\t\t// not what DataTables thinks it is, since we have been altering the\n\t\t// order\n\t\tvar nodes = $.unique(dt.rows({ page: 'current' }).nodes().toArray());\n\t\tvar middles = $.map(nodes, function (node, i) {\n\t\t\tvar top = $(node).position().top - headerHeight;\n\n\t\t\treturn (top + top + $(node).outerHeight()) / 2;\n\t\t});\n\n\t\tthis.s.middles = middles;\n\t\tthis.s.bodyTop = $(dt.table().body()).offset().top;\n\t\tthis.s.windowHeight = $(window).height();\n\t\tthis.s.documentOuterHeight = $(document).outerHeight();\n\t\tthis.s.bodyArea = this._calcBodyArea();\n\t},\n\n\t/**\n\t * Clone a row so it can be floated around the screen\n\t *\n\t * @param  {jQuery} target Node to be cloned\n\t * @private\n\t */\n\t_clone: function (target) {\n\t\tvar dt = this.s.dt;\n\t\tvar clone = $(dt.table().node().cloneNode(false))\n\t\t\t.addClass('dt-rowReorder-float')\n\t\t\t.append('<tbody/>')\n\t\t\t.append(target.clone(false));\n\n\t\t// Match the table and column widths - read all sizes before setting\n\t\t// to reduce reflows\n\t\tvar tableWidth = target.outerWidth();\n\t\tvar tableHeight = target.outerHeight();\n\t\tvar scrollBody = $($(this.s.dt.table().node()).parent());\n\t\tvar scrollWidth = scrollBody.width();\n\t\tvar scrollLeft = scrollBody.scrollLeft();\n\t\tvar sizes = target.children().map(function () {\n\t\t\treturn $(this).width();\n\t\t});\n\n\t\tclone\n\t\t\t.width(tableWidth)\n\t\t\t.height(tableHeight)\n\t\t\t.find('tr')\n\t\t\t.children()\n\t\t\t.each(function (i) {\n\t\t\t\tthis.style.width = sizes[i] + 'px';\n\t\t\t});\n\n\t\tvar cloneParent = $('<div>')\n\t\t\t.addClass('dt-rowReorder-float-parent')\n\t\t\t.width(scrollWidth)\n\t\t\t.append(clone)\n\t\t\t.appendTo('body')\n\t\t\t.scrollLeft(scrollLeft);\n\n\t\t// Insert into the document to have it floating around\n\n\t\tthis.dom.clone = clone;\n\t\tthis.dom.cloneParent = cloneParent;\n\t\tthis.s.domCloneOuterHeight = clone.outerHeight();\n\t},\n\n\t/**\n\t * Update the cloned item's position in the document\n\t *\n\t * @param  {object} e Event giving the mouse's position\n\t * @private\n\t */\n\t_clonePosition: function (e) {\n\t\tvar start = this.s.start;\n\t\tvar topDiff = this._eventToPage(e, 'Y') - start.top;\n\t\tvar leftDiff = this._eventToPage(e, 'X') - start.left;\n\t\tvar snap = this.c.snapX;\n\t\tvar left;\n\t\tvar top = topDiff + start.offsetTop;\n\n\t\tif (snap === true) {\n\t\t\tleft = start.offsetLeft;\n\t\t}\n\t\telse if (typeof snap === 'number') {\n\t\t\tleft = start.offsetLeft + snap;\n\t\t}\n\t\telse {\n\t\t\tleft = leftDiff + start.offsetLeft + this.dom.cloneParent.scrollLeft();\n\t\t}\n\n\t\tif (top < 0) {\n\t\t\ttop = 0;\n\t\t}\n\t\telse if (top + this.s.domCloneOuterHeight > this.s.documentOuterHeight) {\n\t\t\ttop = this.s.documentOuterHeight - this.s.domCloneOuterHeight;\n\t\t}\n\n\t\tthis.dom.cloneParent.css({\n\t\t\ttop: top,\n\t\t\tleft: left\n\t\t});\n\t},\n\n\t/**\n\t * Emit an event on the DataTable for listeners\n\t *\n\t * @param  {string} name Event name\n\t * @param  {array} args Event arguments\n\t * @private\n\t */\n\t_emitEvent: function ( name, args )\n\t{\n\t\tvar ret;\n\n\t\tthis.s.dt.iterator( 'table', function ( ctx, i ) {\n\t\t\tvar innerRet = $(ctx.nTable).triggerHandler( name+'.dt', args );\n\n\t\t\tif (innerRet !== undefined) {\n\t\t\t\tret = innerRet;\n\t\t\t}\n\t\t} );\n\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Get pageX/Y position from an event, regardless of if it is a mouse or\n\t * touch event.\n\t *\n\t * @param  {object} e Event\n\t * @param  {string} pos X or Y (must be a capital)\n\t * @private\n\t */\n\t_eventToPage: function (e, pos) {\n\t\tif (e.type.indexOf('touch') !== -1) {\n\t\t\treturn e.originalEvent.touches[0]['page' + pos];\n\t\t}\n\n\t\treturn e['page' + pos];\n\t},\n\n\t/**\n\t * Mouse down event handler. Read initial positions and add event handlers\n\t * for the move.\n\t *\n\t * @param  {object} e      Mouse event\n\t * @param  {jQuery} target TR element that is to be moved\n\t * @private\n\t */\n\t_mouseDown: function (e, target) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar start = this.s.start;\n\t\tvar cancelable = this.c.cancelable;\n\n\t\tvar offset = target.offset();\n\t\tstart.top = this._eventToPage(e, 'Y');\n\t\tstart.left = this._eventToPage(e, 'X');\n\t\tstart.offsetTop = offset.top;\n\t\tstart.offsetLeft = offset.left;\n\t\tstart.nodes = $.unique(dt.rows({ page: 'current' }).nodes().toArray());\n\n\t\tthis._cachePositions();\n\t\tthis._clone(target);\n\t\tthis._clonePosition(e);\n\n\t\tvar bodyY = this._eventToPage(e, 'Y') - this.s.bodyTop;\n\t\tstart.rowIndex = this._calcRowIndexByPos(bodyY);\n\n\t\tthis.dom.target = target;\n\t\ttarget.addClass('dt-rowReorder-moving');\n\n\t\t$(document)\n\t\t\t.on('mouseup.rowReorder touchend.rowReorder', function (e) {\n\t\t\t\tthat._mouseUp(e);\n\t\t\t})\n\t\t\t.on('mousemove.rowReorder touchmove.rowReorder', function (e) {\n\t\t\t\tthat._mouseMove(e);\n\t\t\t});\n\n\t\t// Check if window is x-scrolling - if not, disable it for the duration\n\t\t// of the drag\n\t\tif ($(window).width() === $(document).width()) {\n\t\t\t$(document.body).addClass('dt-rowReorder-noOverflow');\n\t\t}\n\n\t\t// Cache scrolling information so mouse move doesn't need to read.\n\t\t// This assumes that the window and DT scroller will not change size\n\t\t// during an row drag, which I think is a fair assumption\n\t\tvar scrollWrapper = this.dom.dtScroll;\n\t\tthis.s.scroll = {\n\t\t\twindowHeight: $(window).height(),\n\t\t\twindowWidth: $(window).width(),\n\t\t\tdtTop: scrollWrapper.length ? scrollWrapper.offset().top : null,\n\t\t\tdtLeft: scrollWrapper.length ? scrollWrapper.offset().left : null,\n\t\t\tdtHeight: scrollWrapper.length ? scrollWrapper.outerHeight() : null,\n\t\t\tdtWidth: scrollWrapper.length ? scrollWrapper.outerWidth() : null\n\t\t};\n\n\t\t// Add keyup handler if dragging is cancelable\n\t\tif (cancelable) {\n\t\t\t$(document).on('keyup', this._keyup);\n\t\t}\n\t},\n\n\t/**\n\t * Mouse move event handler - move the cloned row and shuffle the table's\n\t * rows if required.\n\t *\n\t * @param  {object} e Mouse event\n\t * @private\n\t */\n\t_mouseMove: function (e) {\n\t\tthis._clonePosition(e);\n\n\t\tvar start = this.s.start;\n\t\tvar cancelable = this.c.cancelable;\n\n\t\tif (cancelable) {\n\t\t\tvar bodyArea = this.s.bodyArea;\n\t\t\tvar cloneArea = this._calcCloneParentArea();\n\t\t\tthis.s.dropAllowed = this._rectanglesIntersect(bodyArea, cloneArea);\n\n\t\t\tthis.s.dropAllowed\n\t\t\t\t? $(this.dom.cloneParent).removeClass('drop-not-allowed')\n\t\t\t\t: $(this.dom.cloneParent).addClass('drop-not-allowed');\n\t\t}\n\n\t\t// Transform the mouse position into a position in the table's body\n\t\tvar bodyY = this._eventToPage(e, 'Y') - this.s.bodyTop;\n\t\tvar middles = this.s.middles;\n\t\tvar insertPoint = null;\n\n\t\t// Determine where the row should be inserted based on the mouse\n\t\t// position\n\t\tfor (var i = 0, ien = middles.length; i < ien; i++) {\n\t\t\tif (bodyY < middles[i]) {\n\t\t\t\tinsertPoint = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (insertPoint === null) {\n\t\t\tinsertPoint = middles.length;\n\t\t}\n\n\t\tif (cancelable) {\n\t\t\tif (!this.s.dropAllowed) {\n\t\t\t\t// Move the row back to its original position becasuse the drop is not allowed\n\t\t\t\tinsertPoint =\n\t\t\t\t\tstart.rowIndex > this.s.lastInsert ? start.rowIndex + 1 : start.rowIndex;\n\t\t\t}\n\n\t\t\tthis.dom.target.toggleClass('dt-rowReorder-moving', this.s.dropAllowed);\n\t\t}\n\n\t\tthis._moveTargetIntoPosition(insertPoint);\n\n\t\tthis._shiftScroll(e);\n\t},\n\n\t/**\n\t * Mouse up event handler - release the event handlers and perform the\n\t * table updates\n\t *\n\t * @param  {object} e Mouse event\n\t * @private\n\t */\n\t_mouseUp: function (e) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar i, ien;\n\t\tvar dataSrc = this.c.dataSrc;\n\t\tvar dropAllowed = this.s.dropAllowed;\n\n\t\tif (!dropAllowed) {\n\t\t\tthat._cancel();\n\t\t\treturn;\n\t\t}\n\n\t\t// Calculate the difference\n\t\tvar startNodes = this.s.start.nodes;\n\t\tvar endNodes = $.unique(dt.rows({ page: 'current' }).nodes().toArray());\n\t\tvar idDiff = {};\n\t\tvar fullDiff = [];\n\t\tvar diffNodes = [];\n\t\tvar getDataFn = this.s.getDataFn;\n\t\tvar setDataFn = this.s.setDataFn;\n\n\t\tfor (i = 0, ien = startNodes.length; i < ien; i++) {\n\t\t\tif (startNodes[i] !== endNodes[i]) {\n\t\t\t\tvar id = dt.row(endNodes[i]).id();\n\t\t\t\tvar endRowData = dt.row(endNodes[i]).data();\n\t\t\t\tvar startRowData = dt.row(startNodes[i]).data();\n\n\t\t\t\tif (id) {\n\t\t\t\t\tidDiff[id] = getDataFn(startRowData);\n\t\t\t\t}\n\n\t\t\t\tfullDiff.push({\n\t\t\t\t\tnode: endNodes[i],\n\t\t\t\t\toldData: getDataFn(endRowData),\n\t\t\t\t\tnewData: getDataFn(startRowData),\n\t\t\t\t\tnewPosition: i,\n\t\t\t\t\toldPosition: $.inArray(endNodes[i], startNodes)\n\t\t\t\t});\n\n\t\t\t\tdiffNodes.push(endNodes[i]);\n\t\t\t}\n\t\t}\n\n\t\t// Create event args\n\t\tvar eventArgs = [\n\t\t\tfullDiff,\n\t\t\t{\n\t\t\t\tdataSrc: dataSrc,\n\t\t\t\tnodes: diffNodes,\n\t\t\t\tvalues: idDiff,\n\t\t\t\ttriggerRow: dt.row(this.dom.target),\n\t\t\t\toriginalEvent: e\n\t\t\t}\n\t\t];\n\n\t\t// Emit event\n\t\tvar eventResult = this._emitEvent( 'row-reorder', eventArgs );\n\n\t\tif (eventResult === false) {\n\t\t\tthat._cancel();\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove cloned elements, handlers, etc\n\t\tthis._cleanupDragging();\n\n\t\tvar update = function () {\n\t\t\tif (that.c.update) {\n\t\t\t\tfor (i = 0, ien = fullDiff.length; i < ien; i++) {\n\t\t\t\t\tvar row = dt.row(fullDiff[i].node);\n\t\t\t\t\tvar rowData = row.data();\n\n\t\t\t\t\tsetDataFn(rowData, fullDiff[i].newData);\n\n\t\t\t\t\t// Invalidate the cell that has the same data source as the dataSrc\n\t\t\t\t\tdt.columns().every(function () {\n\t\t\t\t\t\tif (this.dataSrc() === dataSrc) {\n\t\t\t\t\t\t\tdt.cell(fullDiff[i].node, this.index()).invalidate('data');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Trigger row reordered event\n\t\t\t\tthat._emitEvent('row-reordered', eventArgs);\n\n\t\t\t\tdt.draw(false);\n\t\t\t}\n\t\t};\n\n\t\t// Editor interface\n\t\tif (this.c.editor) {\n\t\t\t// Disable user interaction while Editor is submitting\n\t\t\tthis.c.enable = false;\n\n\t\t\tthis.c.editor\n\t\t\t\t.edit(diffNodes, false, $.extend({ submit: 'changed' }, this.c.formOptions))\n\t\t\t\t.multiSet(dataSrc, idDiff)\n\t\t\t\t.one('preSubmitCancelled.rowReorder', function () {\n\t\t\t\t\tthat.c.enable = true;\n\t\t\t\t\tthat.c.editor.off('.rowReorder');\n\t\t\t\t\tdt.draw(false);\n\t\t\t\t})\n\t\t\t\t.one('submitUnsuccessful.rowReorder', function () {\n\t\t\t\t\tdt.draw(false);\n\t\t\t\t})\n\t\t\t\t.one('submitSuccess.rowReorder', function () {\n\t\t\t\t\tupdate();\n\t\t\t\t})\n\t\t\t\t.one('submitComplete', function () {\n\t\t\t\t\tthat.c.enable = true;\n\t\t\t\t\tthat.c.editor.off('.rowReorder');\n\t\t\t\t})\n\t\t\t\t.submit();\n\t\t}\n\t\telse {\n\t\t\tupdate();\n\t\t}\n\t},\n\n\t/**\n\t * Moves the current target into the given position within the table\n\t * and caches the new positions\n\t *\n\t * @param  {integer} insertPoint Position\n\t * @private\n\t */\n\t_moveTargetIntoPosition: function (insertPoint) {\n\t\tvar dt = this.s.dt;\n\n\t\t// Perform the DOM shuffle if it has changed from last time\n\t\tif (this.s.lastInsert === null || this.s.lastInsert !== insertPoint) {\n\t\t\tvar nodes = $.unique(dt.rows({ page: 'current' }).nodes().toArray());\n\t\t\tvar insertPlacement = '';\n\n\t\t\tif (insertPoint > this.s.lastInsert) {\n\t\t\t\tthis.dom.target.insertAfter(nodes[insertPoint - 1]);\n\t\t\t\tinsertPlacement = 'after';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.dom.target.insertBefore(nodes[insertPoint]);\n\t\t\t\tinsertPlacement = 'before';\n\t\t\t}\n\n\t\t\tthis._cachePositions();\n\n\t\t\tthis.s.lastInsert = insertPoint;\n\n\t\t\tthis._emitEvent('row-reorder-changed', {\n\t\t\t\tinsertPlacement,\n\t\t\t\tinsertPoint,\n\t\t\t\trow: dt.row(this.dom.target)\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Removes the cloned elements, event handlers, scrolling intervals, etc\n\t *\n\t * @private\n\t */\n\t_cleanupDragging: function () {\n\t\tvar cancelable = this.c.cancelable;\n\n\t\tthis.dom.clone.remove();\n\t\tthis.dom.cloneParent.remove();\n\t\tthis.dom.clone = null;\n\t\tthis.dom.cloneParent = null;\n\n\t\tthis.dom.target.removeClass('dt-rowReorder-moving');\n\t\t//this.dom.target = null;\n\n\t\t$(document).off('.rowReorder');\n\t\t$(document.body).removeClass('dt-rowReorder-noOverflow');\n\n\t\tclearInterval(this.s.scrollInterval);\n\t\tthis.s.scrollInterval = null;\n\n\t\tif (cancelable) {\n\t\t\t$(document).off('keyup', this._keyup);\n\t\t}\n\t},\n\n\t/**\n\t * Move the window and DataTables scrolling during a drag to scroll new\n\t * content into view.\n\t *\n\t * This matches the `_shiftScroll` method used in AutoFill, but only\n\t * horizontal scrolling is considered here.\n\t *\n\t * @param  {object} e Mouse move event object\n\t * @private\n\t */\n\t_shiftScroll: function (e) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar scroll = this.s.scroll;\n\t\tvar runInterval = false;\n\t\tvar scrollSpeed = 5;\n\t\tvar buffer = 65;\n\t\tvar windowY = e.pageY - document.body.scrollTop,\n\t\t\twindowVert,\n\t\t\tdtVert;\n\n\t\t// Window calculations - based on the mouse position in the window,\n\t\t// regardless of scrolling\n\t\tif (windowY < $(window).scrollTop() + buffer) {\n\t\t\twindowVert = scrollSpeed * -1;\n\t\t}\n\t\telse if (windowY > scroll.windowHeight + $(window).scrollTop() - buffer) {\n\t\t\twindowVert = scrollSpeed;\n\t\t}\n\n\t\t// DataTables scrolling calculations - based on the table's position in\n\t\t// the document and the mouse position on the page\n\t\tif (scroll.dtTop !== null && e.pageY < scroll.dtTop + buffer) {\n\t\t\tdtVert = scrollSpeed * -1;\n\t\t}\n\t\telse if (scroll.dtTop !== null && e.pageY > scroll.dtTop + scroll.dtHeight - buffer) {\n\t\t\tdtVert = scrollSpeed;\n\t\t}\n\n\t\t// This is where it gets interesting. We want to continue scrolling\n\t\t// without requiring a mouse move, so we need an interval to be\n\t\t// triggered. The interval should continue until it is no longer needed,\n\t\t// but it must also use the latest scroll commands (for example consider\n\t\t// that the mouse might move from scrolling up to scrolling left, all\n\t\t// with the same interval running. We use the `scroll` object to \"pass\"\n\t\t// this information to the interval. Can't use local variables as they\n\t\t// wouldn't be the ones that are used by an already existing interval!\n\t\tif (windowVert || dtVert) {\n\t\t\tscroll.windowVert = windowVert;\n\t\t\tscroll.dtVert = dtVert;\n\t\t\trunInterval = true;\n\t\t}\n\t\telse if (this.s.scrollInterval) {\n\t\t\t// Don't need to scroll - remove any existing timer\n\t\t\tclearInterval(this.s.scrollInterval);\n\t\t\tthis.s.scrollInterval = null;\n\t\t}\n\n\t\t// If we need to run the interval to scroll and there is no existing\n\t\t// interval (if there is an existing one, it will continue to run)\n\t\tif (!this.s.scrollInterval && runInterval) {\n\t\t\tthis.s.scrollInterval = setInterval(function () {\n\t\t\t\t// Don't need to worry about setting scroll <0 or beyond the\n\t\t\t\t// scroll bound as the browser will just reject that.\n\t\t\t\tif (scroll.windowVert) {\n\t\t\t\t\tvar top = $(document).scrollTop();\n\t\t\t\t\t$(document).scrollTop(top + scroll.windowVert);\n\n\t\t\t\t\tif (top !== $(document).scrollTop()) {\n\t\t\t\t\t\tvar move = parseFloat(that.dom.cloneParent.css('top'));\n\t\t\t\t\t\tthat.dom.cloneParent.css('top', move + scroll.windowVert);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// DataTables scrolling\n\t\t\t\tif (scroll.dtVert) {\n\t\t\t\t\tvar scroller = that.dom.dtScroll[0];\n\n\t\t\t\t\tif (scroll.dtVert) {\n\t\t\t\t\t\tscroller.scrollTop += scroll.dtVert;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 20);\n\t\t}\n\t},\n\n\t/**\n\t * Calculates the current area of the table body and returns it as a rectangle\n\t *\n\t * @private\n\t */\n\t_calcBodyArea: function (e) {\n\t\tvar dt = this.s.dt;\n\t\tvar offset = $(dt.table().body()).offset();\n\t\tvar area = {\n\t\t\tleft: offset.left,\n\t\t\ttop: offset.top,\n\t\t\tright: offset.left + $(dt.table().body()).width(),\n\t\t\tbottom: offset.top + $(dt.table().body()).height()\n\t\t};\n\n\t\treturn area;\n\t},\n\n\t/**\n\t * Calculates the current area of the cloned parent element and returns it as a rectangle\n\t *\n\t * @private\n\t */\n\t_calcCloneParentArea: function (e) {\n\t\tvar dt = this.s.dt;\n\t\tvar offset = $(this.dom.cloneParent).offset();\n\t\tvar area = {\n\t\t\tleft: offset.left,\n\t\t\ttop: offset.top,\n\t\t\tright: offset.left + $(this.dom.cloneParent).width(),\n\t\t\tbottom: offset.top + $(this.dom.cloneParent).height()\n\t\t};\n\n\t\treturn area;\n\t},\n\n\t/**\n\t * Returns whether the given reactangles intersect or not\n\t *\n\t * @private\n\t */\n\t_rectanglesIntersect: function (a, b) {\n\t\tvar noOverlap =\n\t\t\ta.left >= b.right || b.left >= a.right || a.top >= b.bottom || b.top >= a.bottom;\n\n\t\treturn !noOverlap;\n\t},\n\n\t/**\n\t * Calculates the index of the row which lays under the given Y position or\n\t * returns -1 if no such row\n\t *\n\t * @param  {integer} insertPoint Position\n\t * @private\n\t */\n\t_calcRowIndexByPos: function (bodyY) {\n\t\t// Determine where the row is located based on the mouse\n\t\t// position\n\n\t\tvar dt = this.s.dt;\n\t\tvar nodes = $.unique(dt.rows({ page: 'current' }).nodes().toArray());\n\t\tvar rowIndex = -1;\n\t\tvar headerHeight = $(dt.table().node()).find('thead').outerHeight();\n\n\t\t$.each(nodes, function (i, node) {\n\t\t\tvar top = $(node).position().top - headerHeight;\n\t\t\tvar bottom = top + $(node).outerHeight();\n\n\t\t\tif (bodyY >= top && bodyY <= bottom) {\n\t\t\t\trowIndex = i;\n\t\t\t}\n\t\t});\n\n\t\treturn rowIndex;\n\t},\n\n\t/**\n\t * Handles key up events and cancels the dragging if ESC key is pressed\n\t *\n\t * @param  {object} e Mouse move event object\n\t * @private\n\t */\n\t_keyup: function (e) {\n\t\tvar cancelable = this.c.cancelable;\n\n\t\tif (cancelable && e.which === 27) {\n\t\t\t// ESC key is up\n\t\t\te.preventDefault();\n\t\t\tthis._cancel();\n\t\t}\n\t},\n\n\t/**\n\t * Cancels the dragging, moves target back into its original position\n\t * and cleans up the dragging\n\t *\n\t * @param  {object} e Mouse move event object\n\t * @private\n\t */\n\t_cancel: function () {\n\t\tvar start = this.s.start;\n\t\tvar insertPoint = start.rowIndex > this.s.lastInsert ? start.rowIndex + 1 : start.rowIndex;\n\n\t\tthis._moveTargetIntoPosition(insertPoint);\n\n\t\tthis._cleanupDragging();\n\n\t\t// Emit event\n\t\tthis._emitEvent('row-reorder-canceled', [this.s.start.rowIndex]);\n\t}\n});\n\n/**\n * RowReorder default settings for initialisation\n *\n * @namespace\n * @name RowReorder.defaults\n * @static\n */\nRowReorder.defaults = {\n\t/**\n\t * Data point in the host row's data source object for where to get and set\n\t * the data to reorder. This will normally also be the sorting column.\n\t *\n\t * @type {Number}\n\t */\n\tdataSrc: 0,\n\n\t/**\n\t * Editor instance that will be used to perform the update\n\t *\n\t * @type {DataTable.Editor}\n\t */\n\teditor: null,\n\n\t/**\n\t * Enable / disable RowReorder's user interaction\n\t * @type {Boolean}\n\t */\n\tenable: true,\n\n\t/**\n\t * Form options to pass to Editor when submitting a change in the row order.\n\t * See the Editor `from-options` object for details of the options\n\t * available.\n\t * @type {Object}\n\t */\n\tformOptions: {},\n\n\t/**\n\t * Drag handle selector. This defines the element that when dragged will\n\t * reorder a row.\n\t *\n\t * @type {String}\n\t */\n\tselector: 'td:first-child',\n\n\t/**\n\t * Optionally lock the dragged row's x-position. This can be `true` to\n\t * fix the position match the host table's, `false` to allow free movement\n\t * of the row, or a number to define an offset from the host table.\n\t *\n\t * @type {Boolean|number}\n\t */\n\tsnapX: false,\n\n\t/**\n\t * Update the table's data on drop\n\t *\n\t * @type {Boolean}\n\t */\n\tupdate: true,\n\n\t/**\n\t * Selector for children of the drag handle selector that mouseDown events\n\t * will be passed through to and drag will not activate\n\t *\n\t * @type {String}\n\t */\n\texcludedChildren: 'a',\n\n\t/**\n\t * Enable / disable the canceling of the drag & drop interaction\n\t *\n\t * @type {Boolean}\n\t */\n\tcancelable: false\n};\n\n/*\n * API\n */\nvar Api = $.fn.dataTable.Api;\n\n// Doesn't do anything - work around for a bug in DT... Not documented\nApi.register('rowReorder()', function () {\n\treturn this;\n});\n\nApi.register('rowReorder.enable()', function (toggle) {\n\tif (toggle === undefined) {\n\t\ttoggle = true;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.rowreorder) {\n\t\t\tctx.rowreorder.c.enable = toggle;\n\t\t}\n\t});\n});\n\nApi.register('rowReorder.disable()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tif (ctx.rowreorder) {\n\t\t\tctx.rowreorder.c.enable = false;\n\t\t}\n\t});\n});\n\n/**\n * Version information\n *\n * @name RowReorder.version\n * @static\n */\nRowReorder.version = '1.4.1';\n\n$.fn.dataTable.RowReorder = RowReorder;\n$.fn.DataTable.RowReorder = RowReorder;\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('init.dt.dtr', function (e, settings, json) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.rowReorder;\n\tvar defaults = DataTable.defaults.rowReorder;\n\n\tif (init || defaults) {\n\t\tvar opts = $.extend({}, init, defaults);\n\n\t\tif (init !== false) {\n\t\t\tnew RowReorder(settings, opts);\n\t\t}\n\t}\n});\n\n\nreturn DataTable;\n}));\n\n\n/*! Scroller 2.3.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     Scroller\n * @description Virtual rendering for DataTables\n * @version     2.3.0\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/**\n * Scroller is a virtual rendering plug-in for DataTables which allows large\n * datasets to be drawn on screen every quickly. What the virtual rendering means\n * is that only the visible portion of the table (and a bit to either side to make\n * the scrolling smooth) is drawn, while the scrolling container gives the\n * visual impression that the whole table is visible. This is done by making use\n * of the pagination abilities of DataTables and moving the table around in the\n * scrolling container DataTables adds to the page. The scrolling container is\n * forced to the height it would be for the full table display using an extra\n * element.\n *\n * Note that rows in the table MUST all be the same height. Information in a cell\n * which expands on to multiple lines will cause some odd behaviour in the scrolling.\n *\n * Scroller is initialised by simply including the letter 'S' in the sDom for the\n * table you want to have this feature enabled on. Note that the 'S' must come\n * AFTER the 't' parameter in `dom`.\n *\n * Key features include:\n *   <ul class=\"limit_length\">\n *     <li>Speed! The aim of Scroller for DataTables is to make rendering large data sets fast</li>\n *     <li>Full compatibility with deferred rendering in DataTables for maximum speed</li>\n *     <li>Display millions of rows</li>\n *     <li>Integration with state saving in DataTables (scrolling position is saved)</li>\n *     <li>Easy to use</li>\n *   </ul>\n *\n *  @class\n *  @constructor\n *  @global\n *  @param {object} dt DataTables settings object or API instance\n *  @param {object} [opts={}] Configuration object for Scroller. Options\n *    are defined by {@link Scroller.defaults}\n *\n *  @requires jQuery 1.7+\n *  @requires DataTables 1.11.0+\n */\nvar Scroller = function (dt, opts) {\n\t/* Sanity check - you just know it will happen */\n\tif (!(this instanceof Scroller)) {\n\t\talert(\n\t\t\t\"Scroller warning: Scroller must be initialised with the 'new' keyword.\"\n\t\t);\n\t\treturn;\n\t}\n\n\tif (opts === undefined) {\n\t\topts = {};\n\t}\n\n\tvar dtApi = $.fn.dataTable.Api(dt);\n\n\t/**\n\t * Settings object which contains customisable information for the Scroller instance\n\t * @namespace\n\t * @private\n\t * @extends Scroller.defaults\n\t */\n\tthis.s = {\n\t\t/**\n\t\t * DataTables settings object\n\t\t *  @type     object\n\t\t *  @default  Passed in as first parameter to constructor\n\t\t */\n\t\tdt: dtApi.settings()[0],\n\n\t\t/**\n\t\t * DataTables API instance\n\t\t *  @type     DataTable.Api\n\t\t */\n\t\tdtApi: dtApi,\n\n\t\t/**\n\t\t * Pixel location of the top of the drawn table in the viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\ttableTop: 0,\n\n\t\t/**\n\t\t * Pixel location of the bottom of the drawn table in the viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\ttableBottom: 0,\n\n\t\t/**\n\t\t * Pixel location of the boundary for when the next data set should be loaded and drawn\n\t\t * when scrolling up the way.\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t *  @private\n\t\t */\n\t\tredrawTop: 0,\n\n\t\t/**\n\t\t * Pixel location of the boundary for when the next data set should be loaded and drawn\n\t\t * when scrolling down the way. Note that this is actually calculated as the offset from\n\t\t * the top.\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t *  @private\n\t\t */\n\t\tredrawBottom: 0,\n\n\t\t/**\n\t\t * Auto row height or not indicator\n\t\t *  @type     bool\n\t\t *  @default  0\n\t\t */\n\t\tautoHeight: true,\n\n\t\t/**\n\t\t * Number of rows calculated as visible in the visible viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\tviewportRows: 0,\n\n\t\t/**\n\t\t * setTimeout reference for state saving, used when state saving is enabled in the DataTable\n\t\t * and when the user scrolls the viewport in order to stop the cookie set taking too much\n\t\t * CPU!\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\tstateTO: null,\n\n\t\tstateSaveThrottle: function () {},\n\n\t\t/**\n\t\t * setTimeout reference for the redraw, used when server-side processing is enabled in the\n\t\t * DataTables in order to prevent DoSing the server\n\t\t *  @type     int\n\t\t *  @default  null\n\t\t */\n\t\tdrawTO: null,\n\n\t\theights: {\n\t\t\tjump: null,\n\t\t\tpage: null,\n\t\t\tvirtual: null,\n\t\t\tscroll: null,\n\n\t\t\t/**\n\t\t\t * Height of rows in the table\n\t\t\t *  @type     int\n\t\t\t *  @default  0\n\t\t\t */\n\t\t\trow: null,\n\n\t\t\t/**\n\t\t\t * Pixel height of the viewport\n\t\t\t *  @type     int\n\t\t\t *  @default  0\n\t\t\t */\n\t\t\tviewport: null,\n\t\t\tlabelHeight: 0,\n\t\t\txbar: 0\n\t\t},\n\n\t\ttopRowFloat: 0,\n\t\tscrollDrawDiff: null,\n\t\tloaderVisible: false,\n\t\tforceReposition: false,\n\t\tbaseRowTop: 0,\n\t\tbaseScrollTop: 0,\n\t\tmousedown: false,\n\t\tlastScrollTop: 0\n\t};\n\n\t// @todo The defaults should extend a `c` property and the internal settings\n\t// only held in the `s` property. At the moment they are mixed\n\tthis.s = $.extend(this.s, Scroller.oDefaults, opts);\n\n\t// Workaround for row height being read from height object (see above comment)\n\tthis.s.heights.row = this.s.rowHeight;\n\n\t/**\n\t * DOM elements used by the class instance\n\t * @private\n\t * @namespace\n\t *\n\t */\n\tthis.dom = {\n\t\tforce: document.createElement('div'),\n\t\tlabel: $('<div class=\"dts_label\">0</div>'),\n\t\tscroller: null,\n\t\ttable: null,\n\t\tloader: null\n\t};\n\n\t// Attach the instance to the DataTables instance so it can be accessed in\n\t// future. Don't initialise Scroller twice on the same table\n\tif (this.s.dt.oScroller) {\n\t\treturn;\n\t}\n\n\tthis.s.dt.oScroller = this;\n\n\t/* Let's do it */\n\tthis.construct();\n};\n\n$.extend(Scroller.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods - to be exposed via the DataTables API\n\t */\n\n\t/**\n\t * Calculate and store information about how many rows are to be displayed\n\t * in the scrolling viewport, based on current dimensions in the browser's\n\t * rendering. This can be particularly useful if the table is initially\n\t * drawn in a hidden element - for example in a tab.\n\t *  @param {bool} [redraw=true] Redraw the table automatically after the recalculation, with\n\t *    the new dimensions forming the basis for the draw.\n\t *  @returns {void}\n\t */\n\tmeasure: function (redraw) {\n\t\tif (this.s.autoHeight) {\n\t\t\tthis._calcRowHeight();\n\t\t}\n\n\t\tvar heights = this.s.heights;\n\n\t\tif (heights.row) {\n\t\t\theights.viewport = this._parseHeight(\n\t\t\t\t$(this.dom.scroller).css('max-height')\n\t\t\t);\n\n\t\t\tthis.s.viewportRows =\n\t\t\t\tparseInt(heights.viewport / heights.row, 10) + 1;\n\t\t\tthis.s.dt._iDisplayLength =\n\t\t\t\tthis.s.viewportRows * this.s.displayBuffer;\n\t\t}\n\n\t\tvar label = this.dom.label.outerHeight();\n\n\t\theights.xbar =\n\t\t\tthis.dom.scroller.offsetHeight - this.dom.scroller.clientHeight;\n\t\theights.labelHeight = label;\n\n\t\tif (redraw === undefined || redraw) {\n\t\t\tthis.s.dt.oInstance.fnDraw(false);\n\t\t}\n\t},\n\n\t/**\n\t * Get information about current displayed record range. This corresponds to\n\t * the information usually displayed in the \"Info\" block of the table.\n\t *\n\t * @returns {object} info as an object:\n\t *  {\n\t *      start: {int}, // the 0-indexed record at the top of the viewport\n\t *      end:   {int}, // the 0-indexed record at the bottom of the viewport\n\t *  }\n\t */\n\tpageInfo: function () {\n\t\tvar dt = this.s.dt,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTotal = dt.fnRecordsDisplay(),\n\t\t\tiPossibleEnd = Math.ceil(\n\t\t\t\tthis.pixelsToRow(\n\t\t\t\t\tiScrollTop + this.s.heights.viewport,\n\t\t\t\t\tfalse,\n\t\t\t\t\tthis.s.ani\n\t\t\t\t)\n\t\t\t);\n\n\t\treturn {\n\t\t\tstart: Math.floor(this.pixelsToRow(iScrollTop, false, this.s.ani)),\n\t\t\tend: iTotal < iPossibleEnd ? iTotal - 1 : iPossibleEnd - 1\n\t\t};\n\t},\n\n\t/**\n\t * Calculate the row number that will be found at the given pixel position\n\t * (y-scroll).\n\t *\n\t * Please note that when the height of the full table exceeds 1 million\n\t * pixels, Scroller switches into a non-linear mode for the scrollbar to fit\n\t * all of the records into a finite area, but this function returns a linear\n\t * value (relative to the last non-linear positioning).\n\t *  @param {int} pixels Offset from top to calculate the row number of\n\t *  @param {int} [intParse=true] If an integer value should be returned\n\t *  @param {int} [virtual=false] Perform the calculations in the virtual domain\n\t *  @returns {int} Row index\n\t */\n\tpixelsToRow: function (pixels, intParse, virtual) {\n\t\tvar diff = pixels - this.s.baseScrollTop;\n\t\tvar row = virtual\n\t\t\t? (this._domain('physicalToVirtual', this.s.baseScrollTop) + diff) /\n\t\t\t\tthis.s.heights.row\n\t\t\t: diff / this.s.heights.row + this.s.baseRowTop;\n\n\t\treturn intParse || intParse === undefined ? parseInt(row, 10) : row;\n\t},\n\n\t/**\n\t * Calculate the pixel position from the top of the scrolling container for\n\t * a given row\n\t *  @param {int} iRow Row number to calculate the position of\n\t *  @returns {int} Pixels\n\t */\n\trowToPixels: function (rowIdx, intParse, virtual) {\n\t\tvar pixels;\n\t\tvar diff = rowIdx - this.s.baseRowTop;\n\n\t\tif (virtual) {\n\t\t\tpixels = this._domain('virtualToPhysical', this.s.baseScrollTop);\n\t\t\tpixels += diff * this.s.heights.row;\n\t\t}\n\t\telse {\n\t\t\tpixels = this.s.baseScrollTop;\n\t\t\tpixels += diff * this.s.heights.row;\n\t\t}\n\n\t\treturn intParse || intParse === undefined\n\t\t\t? parseInt(pixels, 10)\n\t\t\t: pixels;\n\t},\n\n\t/**\n\t * Calculate the row number that will be found at the given pixel position (y-scroll)\n\t *  @param {int} row Row index to scroll to\n\t *  @param {bool} [animate=true] Animate the transition or not\n\t *  @returns {void}\n\t */\n\tscrollToRow: function (row, animate) {\n\t\tvar that = this;\n\t\tvar ani = false;\n\t\tvar px = this.rowToPixels(row);\n\n\t\t// We need to know if the table will redraw or not before doing the\n\t\t// scroll. If it will not redraw, then we need to use the currently\n\t\t// displayed table, and scroll with the physical pixels. Otherwise, we\n\t\t// need to calculate the table's new position from the virtual\n\t\t// transform.\n\t\tvar preRows = ((this.s.displayBuffer - 1) / 2) * this.s.viewportRows;\n\t\tvar drawRow = row - preRows;\n\t\tif (drawRow < 0) {\n\t\t\tdrawRow = 0;\n\t\t}\n\n\t\tif (\n\t\t\t(px > this.s.redrawBottom || px < this.s.redrawTop) &&\n\t\t\tthis.s.dt._iDisplayStart !== drawRow\n\t\t) {\n\t\t\tani = true;\n\t\t\tpx = this._domain('virtualToPhysical', row * this.s.heights.row);\n\n\t\t\t// If we need records outside the current draw region, but the new\n\t\t\t// scrolling position is inside that (due to the non-linear nature\n\t\t\t// for larger numbers of records), we need to force position update.\n\t\t\tif (this.s.redrawTop < px && px < this.s.redrawBottom) {\n\t\t\t\tthis.s.forceReposition = true;\n\t\t\t\tanimate = false;\n\t\t\t}\n\t\t}\n\n\t\tif (animate === undefined || animate) {\n\t\t\tthis.s.ani = ani;\n\t\t\t$(this.dom.scroller).animate(\n\t\t\t\t{\n\t\t\t\t\tscrollTop: px\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\t// This needs to happen after the animation has completed and\n\t\t\t\t\t// the final scroll event fired\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tthat.s.ani = false;\n\t\t\t\t\t}, 250);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\t$(this.dom.scroller).scrollTop(px);\n\t\t}\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialisation for Scroller\n\t *  @returns {void}\n\t *  @private\n\t */\n\tconstruct: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dtApi;\n\n\t\t/* Sanity check */\n\t\tif (!this.s.dt.oFeatures.bPaginate) {\n\t\t\tthrow new Error(\n\t\t\t\t'Pagination must be enabled for Scroller to operate'\n\t\t\t);\n\t\t}\n\n\t\t/* Insert a div element that we can use to force the DT scrolling container to\n\t\t * the height that would be required if the whole table was being displayed\n\t\t */\n\t\tthis.dom.force.style.position = 'relative';\n\t\tthis.dom.force.style.top = '0px';\n\t\tthis.dom.force.style.left = '0px';\n\t\tthis.dom.force.style.width = '1px';\n\n\t\tthis.dom.scroller = dt.table().node().parentNode;\n\t\tthis.dom.scroller.appendChild(this.dom.force);\n\t\tthis.dom.scroller.style.position = 'relative';\n\n\t\tthis.dom.table = $('>table', this.dom.scroller)[0];\n\t\tthis.dom.table.style.position = 'absolute';\n\t\tthis.dom.table.style.top = '0px';\n\t\tthis.dom.table.style.left = '0px';\n\n\t\t// Add class to 'announce' that we are a Scroller table\n\t\t$(dt.table().container()).addClass('dts DTS');\n\n\t\tthis.dom.label.appendTo(this.dom.scroller);\n\n\t\t/* Initial size calculations */\n\t\tif (this.s.heights.row && this.s.heights.row != 'auto') {\n\t\t\tthis.s.autoHeight = false;\n\t\t}\n\n\t\t// Scrolling callback to see if a page change is needed\n\t\tthis.s.ingnoreScroll = true;\n\t\t$(this.dom.scroller).on('scroll.dt-scroller', function (e) {\n\t\t\tthat._scroll.call(that);\n\t\t});\n\n\t\t// In iOS we catch the touchstart event in case the user tries to scroll\n\t\t// while the display is already scrolling\n\t\t$(this.dom.scroller).on('touchstart.dt-scroller', function () {\n\t\t\tthat._scroll.call(that);\n\t\t});\n\n\t\t$(this.dom.scroller)\n\t\t\t.on('mousedown.dt-scroller', function () {\n\t\t\t\tthat.s.mousedown = true;\n\t\t\t})\n\t\t\t.on('mouseup.dt-scroller', function () {\n\t\t\t\tthat.s.labelVisible = false;\n\t\t\t\tthat.s.mousedown = false;\n\t\t\t\tthat.dom.label.css('display', 'none');\n\t\t\t});\n\n\t\t// On resize, update the information element, since the number of rows shown might change\n\t\t$(window).on('resize.dt-scroller', function () {\n\t\t\tthat.measure(false);\n\t\t\tthat._info();\n\t\t});\n\n\t\t// Add a state saving parameter to the DT state saving so we can restore the exact\n\t\t// position of the scrolling.\n\t\tvar initialStateSave = true;\n\t\tvar loadedState = dt.state.loaded();\n\n\t\tdt.on('stateSaveParams.scroller', function (e, settings, data) {\n\t\t\tif (initialStateSave && loadedState) {\n\t\t\t\tdata.scroller = loadedState.scroller;\n\t\t\t\tinitialStateSave = false;\n\n\t\t\t\tif (data.scroller) {\n\t\t\t\t\tthat.s.lastScrollTop = data.scroller.scrollTop;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Need to used the saved position on init\n\t\t\t\tdata.scroller = {\n\t\t\t\t\ttopRow: that.s.topRowFloat,\n\t\t\t\t\tbaseScrollTop: that.s.baseScrollTop,\n\t\t\t\t\tbaseRowTop: that.s.baseRowTop,\n\t\t\t\t\tscrollTop: that.s.lastScrollTop\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\n\t\tdt.on('stateLoadParams.scroller', function (e, settings, data) {\n\t\t\tif (data.scroller !== undefined) {\n\t\t\t\tthat.scrollToRow(data.scroller.topRow);\n\t\t\t}\n\t\t});\n\n\t\tif (loadedState && loadedState.scroller) {\n\t\t\tthis.s.topRowFloat = loadedState.scroller.topRow;\n\t\t\tthis.s.baseScrollTop = loadedState.scroller.baseScrollTop;\n\t\t\tthis.s.baseRowTop = loadedState.scroller.baseRowTop;\n\t\t}\n\n\t\tthis.measure(false);\n\n\t\tthat.s.stateSaveThrottle = DataTable.util.throttle(function () {\n\t\t\tthat.s.dtApi.state.save();\n\t\t}, 500);\n\n\t\tdt.on('init.scroller', function () {\n\t\t\tthat.measure(false);\n\n\t\t\t// Setting to `jump` will instruct _draw to calculate the scroll top\n\t\t\t// position\n\t\t\tthat.s.scrollType = 'jump';\n\t\t\tthat._draw();\n\n\t\t\t// Update the scroller when the DataTable is redrawn\n\t\t\tdt.on('draw.scroller', function () {\n\t\t\t\tthat._draw();\n\t\t\t});\n\t\t});\n\n\t\t// Set height before the draw happens, allowing everything else to update\n\t\t// on draw complete without worry for roder.\n\t\tdt.on('preDraw.dt.scroller', function () {\n\t\t\tthat._scrollForce();\n\t\t});\n\n\t\t// Destructor\n\t\tdt.on('destroy.scroller', function () {\n\t\t\t$(window).off('resize.dt-scroller');\n\t\t\t$(that.dom.scroller).off('.dt-scroller');\n\t\t\t$(that.s.dt.nTable).off('.scroller');\n\n\t\t\t$(that.s.dt.nTableWrapper).removeClass('DTS');\n\t\t\t$('div.DTS_Loading', that.dom.scroller.parentNode).remove();\n\n\t\t\tthat.dom.table.style.position = '';\n\t\t\tthat.dom.table.style.top = '';\n\t\t\tthat.dom.table.style.left = '';\n\t\t});\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Automatic calculation of table row height. This is just a little tricky here as using\n\t * initialisation DataTables has tale the table out of the document, so we need to create\n\t * a new table and insert it into the document, calculate the row height and then whip the\n\t * table out.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_calcRowHeight: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar origTable = dt.nTable;\n\t\tvar nTable = origTable.cloneNode(false);\n\t\tvar tbody = $('<tbody/>').appendTo(nTable);\n\t\tvar dtClasses = dt.oClasses;\n\n\t\t// Different locations for classes in DT2\n\t\tvar classes = DataTable.versionCheck('2')\n\t\t\t? {\n\t\t\t\t\tcontainer: dtClasses.container,\n\t\t\t\t\tscroller: dtClasses.scrolling.container,\n\t\t\t\t\tbody: dtClasses.scrolling.body\n\t\t\t}\n\t\t\t: {\n\t\t\t\t\tcontainer: dtClasses.sWrapper,\n\t\t\t\t\tscroller: dtClasses.sScrollWrapper,\n\t\t\t\t\tbody: dtClasses.sScrollBody\n\t\t\t};\n\n\t\tvar container = $(\n\t\t\t'<div class=\"' +\n\t\t\t\tclasses.container +\n\t\t\t\t' DTS\"><div class=\"' +\n\t\t\t\tclasses.scroller +\n\t\t\t\t'\"><div class=\"' +\n\t\t\t\tclasses.body +\n\t\t\t\t'\"></div></div></div>'\n\t\t);\n\n\t\t// Want 3 rows in the sizing table so :first-child and :last-child\n\t\t// CSS styles don't come into play - take the size of the middle row\n\t\t$('tbody tr:lt(4)', origTable).clone().appendTo(tbody);\n\t\tvar rowsCount = $('tr', tbody).length;\n\n\t\tif (rowsCount === 1) {\n\t\t\ttbody.prepend('<tr><td>&#160;</td></tr>');\n\t\t\ttbody.append('<tr><td>&#160;</td></tr>');\n\t\t}\n\t\telse {\n\t\t\tfor (; rowsCount < 3; rowsCount++) {\n\t\t\t\ttbody.append('<tr><td>&#160;</td></tr>');\n\t\t\t}\n\t\t}\n\n\t\t$('div.' + classes.body, container).append(nTable);\n\n\t\t// If initialised using `dom`, use the holding element as the insert point\n\t\tvar insertEl = this.s.dt.nHolding || origTable.parentNode;\n\n\t\tif (!$(insertEl).is(':visible')) {\n\t\t\tinsertEl = 'body';\n\t\t}\n\n\t\t// Remove form element links as they might select over others (particularly radio and checkboxes)\n\t\tcontainer.find('input').removeAttr('name');\n\n\t\tcontainer.appendTo(insertEl);\n\t\tthis.s.heights.row = $('tr', tbody).eq(1).outerHeight();\n\n\t\tcontainer.remove();\n\t},\n\n\t/**\n\t * Draw callback function which is fired when the DataTable is redrawn. The main function of\n\t * this method is to position the drawn table correctly the scrolling container for the rows\n\t * that is displays as a result of the scrolling position.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_draw: function () {\n\t\tvar that = this,\n\t\t\theights = this.s.heights,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTableHeight = $(this.s.dt.nTable).height(),\n\t\t\tdisplayStart = this.s.dt._iDisplayStart,\n\t\t\tdisplayLen = this.s.dt._iDisplayLength,\n\t\t\tdisplayEnd = this.s.dt.fnRecordsDisplay(),\n\t\t\tviewportEndY = iScrollTop + heights.viewport;\n\n\t\t// Disable the scroll event listener while we are updating the DOM\n\t\tthis.s.skip = true;\n\n\t\t// If paging is reset\n\t\tif (\n\t\t\t(this.s.dt.bSorted || this.s.dt.bFiltered) &&\n\t\t\tdisplayStart === 0 &&\n\t\t\t!this.s.dt._drawHold\n\t\t) {\n\t\t\tthis.s.topRowFloat = 0;\n\t\t}\n\n\t\tiScrollTop =\n\t\t\tthis.s.scrollType === 'jump'\n\t\t\t\t? this._domain(\n\t\t\t\t\t\t'virtualToPhysical',\n\t\t\t\t\t\tthis.s.topRowFloat * heights.row\n\t\t\t\t)\n\t\t\t\t: iScrollTop;\n\n\t\t// Store positional information so positional calculations can be based\n\t\t// upon the current table draw position\n\t\tthis.s.baseScrollTop = iScrollTop;\n\t\tthis.s.baseRowTop = this.s.topRowFloat;\n\n\t\t// Position the table in the virtual scroller\n\t\tvar tableTop =\n\t\t\tiScrollTop - (this.s.topRowFloat - displayStart) * heights.row;\n\t\tif (displayStart === 0) {\n\t\t\ttableTop = 0;\n\t\t}\n\t\telse if (displayStart + displayLen >= displayEnd) {\n\t\t\ttableTop = heights.scroll - iTableHeight;\n\t\t}\n\t\telse {\n\t\t\tvar iTableBottomY = tableTop + iTableHeight;\n\t\t\tif (iTableBottomY < viewportEndY) {\n\t\t\t\t// The last row of the data is above the end of the viewport.\n\t\t\t\t// This means the background is visible, which is not what the user expects.\n\t\t\t\tvar newTableTop = viewportEndY - iTableHeight;\n\t\t\t\tvar diffPx = newTableTop - tableTop;\n\t\t\t\tthis.s.baseScrollTop += diffPx + 1; // Update start row number in footer.\n\t\t\t\ttableTop = newTableTop; // Move table so last line of data is at the bottom of the viewport.\n\t\t\t}\n\t\t}\n\n\t\tthis.dom.table.style.top = tableTop + 'px';\n\n\t\t/* Cache some information for the scroller */\n\t\tthis.s.tableTop = tableTop;\n\t\tthis.s.tableBottom = iTableHeight + this.s.tableTop;\n\n\t\t// Calculate the boundaries for where a redraw will be triggered by the\n\t\t// scroll event listener\n\t\tvar boundaryPx = (iScrollTop - this.s.tableTop) * this.s.boundaryScale;\n\t\tthis.s.redrawTop = iScrollTop - boundaryPx;\n\t\tthis.s.redrawBottom =\n\t\t\tiScrollTop + boundaryPx >\n\t\t\theights.scroll - heights.viewport - heights.row\n\t\t\t\t? heights.scroll - heights.viewport - heights.row\n\t\t\t\t: iScrollTop + boundaryPx;\n\n\t\tthis.s.skip = false;\n\n\t\tif (that.s.ingnoreScroll) {\n\t\t\t// Restore the scrolling position that was saved by DataTable's state\n\t\t\t// saving Note that this is done on the second draw when data is Ajax\n\t\t\t// sourced, and the first draw when DOM soured\n\t\t\tif (\n\t\t\t\tthis.s.dt.oFeatures.bStateSave &&\n\t\t\t\tthis.s.dt.oLoadedState !== null &&\n\t\t\t\ttypeof this.s.dt.oLoadedState.scroller != 'undefined'\n\t\t\t) {\n\t\t\t\t// A quirk of DataTables is that the draw callback will occur on an\n\t\t\t\t// empty set if Ajax sourced, but not if server-side processing.\n\t\t\t\tvar ajaxSourced =\n\t\t\t\t\t(this.s.dt.sAjaxSource || that.s.dt.ajax) &&\n\t\t\t\t\t!this.s.dt.oFeatures.bServerSide\n\t\t\t\t\t\t? true\n\t\t\t\t\t\t: false;\n\n\t\t\t\tif (\n\t\t\t\t\t(ajaxSourced && this.s.dt.iDraw >= 2) ||\n\t\t\t\t\t(!ajaxSourced && this.s.dt.iDraw >= 1)\n\t\t\t\t) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t$(that.dom.scroller).scrollTop(\n\t\t\t\t\t\t\tthat.s.dt.oLoadedState.scroller.scrollTop\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// In order to prevent layout thrashing we need another\n\t\t\t\t\t\t// small delay\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tthat.s.ingnoreScroll = false;\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthat.s.ingnoreScroll = false;\n\t\t\t}\n\t\t}\n\n\t\t// Because of the order of the DT callbacks, the info update will\n\t\t// take precedence over the one we want here. So a 'thread' break is\n\t\t// needed.  Only add the thread break if bInfo is set\n\t\tif (this.s.dt.oFeatures.bInfo) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tthat._info.call(that);\n\t\t\t}, 0);\n\t\t}\n\n\t\t$(this.s.dt.nTable).triggerHandler('position.dts.dt', tableTop);\n\t},\n\n\t/**\n\t * Convert from one domain to another. The physical domain is the actual\n\t * pixel count on the screen, while the virtual is if we had browsers which\n\t * had scrolling containers of infinite height (i.e. the absolute value)\n\t *\n\t *  @param {string} dir Domain transform direction, `virtualToPhysical` or\n\t *    `physicalToVirtual`\n\t *  @returns {number} Calculated transform\n\t *  @private\n\t */\n\t_domain: function (dir, val) {\n\t\tvar heights = this.s.heights;\n\t\tvar diff;\n\t\tvar magic = 10000; // the point at which the non-linear calculations start to happen\n\n\t\t// If the virtual and physical height match, then we use a linear\n\t\t// transform between the two, allowing the scrollbar to be linear\n\t\tif (heights.virtual === heights.scroll) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// In the first 10k pixels and the last 10k pixels, we want the scrolling\n\t\t// to be linear. After that it can be non-linear. It would be unusual for\n\t\t// anyone to mouse wheel through that much.\n\t\tif (val < magic) {\n\t\t\treturn val;\n\t\t}\n\t\telse if (\n\t\t\tdir === 'virtualToPhysical' &&\n\t\t\tval >= heights.virtual - magic\n\t\t) {\n\t\t\tdiff = heights.virtual - val;\n\t\t\treturn heights.scroll - diff;\n\t\t}\n\t\telse if (dir === 'physicalToVirtual' && val >= heights.scroll - magic) {\n\t\t\tdiff = heights.scroll - val;\n\t\t\treturn heights.virtual - diff;\n\t\t}\n\n\t\t// Otherwise, we want a non-linear scrollbar to take account of the\n\t\t// redrawing regions at the start and end of the table, otherwise these\n\t\t// can stutter badly - on large tables 30px (for example) scroll might\n\t\t// be hundreds of rows, so the table would be redrawing every few px at\n\t\t// the start and end. Use a simple linear eq. to stop this, effectively\n\t\t// causing a kink in the scrolling ratio. It does mean the scrollbar is\n\t\t// non-linear, but with such massive data sets, the scrollbar is going\n\t\t// to be a best guess anyway\n\t\tvar m =\n\t\t\t(heights.virtual - magic - magic) /\n\t\t\t(heights.scroll - magic - magic);\n\t\tvar c = magic - m * magic;\n\n\t\treturn dir === 'virtualToPhysical' ? (val - c) / m : m * val + c;\n\t},\n\n\t/**\n\t * Update any information elements that are controlled by the DataTable based on the scrolling\n\t * viewport and what rows are visible in it. This function basically acts in the same way as\n\t * _fnUpdateInfo in DataTables, and effectively replaces that function.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_info: function () {\n\t\tif (!this.s.dt.oFeatures.bInfo) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dt = this.s.dt,\n\t\t\tdtApi = this.s.dtApi,\n\t\t\tlanguage = dt.oLanguage,\n\t\t\tinfo = dtApi.page.info(),\n\t\t\ttotal = info.recordsDisplay,\n\t\t\tmax = info.recordsTotal,\n\t\t\tstart = Math.floor(this.s.topRowFloat) + 1,\n\t\t\tpossibleEnd = start + Math.floor(this.s.heights.viewport / this.s.heights.row),\n\t\t\tend = possibleEnd > total ? total : possibleEnd,\n\t\t\tresult;\n\n\t\tif (total === 0 && total == max) {\n\t\t\t/* Empty record set */\n\t\t\tresult = language.sInfoEmpty + language.sInfoPostFix;\n\t\t}\n\t\telse if (total === 0) {\n\t\t\t// Empty record set after filtering\n\t\t\tresult =\n\t\t\t\tlanguage.sInfoEmpty +\n\t\t\t\t' ' +\n\t\t\t\tlanguage.sInfoFiltered +\n\t\t\t\tlanguage.sInfoPostFix;\n\t\t}\n\t\telse if (total == max) {\n\t\t\t// Normal record set\n\t\t\tresult = language.sInfo + language.sInfoPostFix;\n\t\t}\n\t\telse {\n\t\t\t// Record set after filtering\n\t\t\tresult = language.sInfo;\n\t\t\t' ' + language.sInfoFiltered + language.sInfoPostFix;\n\t\t}\n\n\t\tresult = this._macros(result, start, end, max, total);\n\n\t\tvar callback = language.fnInfoCallback;\n\t\tif (callback) {\n\t\t\tresult = callback.call(\n\t\t\t\tdt.oInstance,\n\t\t\t\tdt,\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\tmax,\n\t\t\t\ttotal,\n\t\t\t\tresult\n\t\t\t);\n\t\t}\n\n\t\t// DT 1.x features\n\t\tvar n = dt.aanFeatures.i;\n\t\tif (typeof n != 'undefined') {\n\t\t\tfor (var i = 0, iLen = n.length; i < iLen; i++) {\n\t\t\t\t$(n[i]).html(result);\n\t\t\t}\n\n\t\t\t$(dt.nTable).triggerHandler('info.dt');\n\t\t}\n\n\t\t// DT 2.x features\n\t\t$('div.dt-info', dtApi.table().container()).each(function () {\n\t\t\t$(this).html(result);\n\t\t\tdtApi.trigger('info', [this, result]);\n\t\t});\n\t},\n\n\t/**\n\t * String replacement for info display. Basically the same as what DataTables does.\n\t *\n\t * @param {*} str\n\t * @param {*} start\n\t * @param {*} end\n\t * @param {*} max\n\t * @param {*} total\n\t * @returns Formatted string\n\t */\n\t_macros: function (str, start, end, max, total) {\n\t\tvar api = this.s.dtApi;\n\t\tvar settings = this.s.dt;\n\t\tvar formatter = settings.fnFormatNumber;\n\n\t\treturn str\n\t\t\t.replace(/_START_/g, formatter.call(settings, start))\n\t\t\t.replace(/_END_/g, formatter.call(settings, end))\n\t\t\t.replace(/_MAX_/g, formatter.call(settings, max))\n\t\t\t.replace(/_TOTAL_/g, formatter.call(settings, total))\n\t\t\t.replace(/_ENTRIES_/g, api.i18n('entries', ''))\n\t\t\t.replace(/_ENTRIES-MAX_/g, api.i18n('entries', '', max))\n\t\t\t.replace(/_ENTRIES-TOTAL_/g, api.i18n('entries', '', total));\n\t},\n\n\t/**\n\t * Parse CSS height property string as number\n\t *\n\t * An attempt is made to parse the string as a number. Currently supported units are 'px',\n\t * 'vh', and 'rem'. 'em' is partially supported; it works as long as the parent element's\n\t * font size matches the body element. Zero is returned for unrecognized strings.\n\t *  @param {string} cssHeight CSS height property string\n\t *  @returns {number} height\n\t *  @private\n\t */\n\t_parseHeight: function (cssHeight) {\n\t\tvar height;\n\t\tvar matches = /^([+-]?(?:\\d+(?:\\.\\d+)?|\\.\\d+))(px|em|rem|vh)$/.exec(\n\t\t\tcssHeight\n\t\t);\n\n\t\tif (matches === null) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar value = parseFloat(matches[1]);\n\t\tvar unit = matches[2];\n\n\t\tif (unit === 'px') {\n\t\t\theight = value;\n\t\t}\n\t\telse if (unit === 'vh') {\n\t\t\theight = (value / 100) * $(window).height();\n\t\t}\n\t\telse if (unit === 'rem') {\n\t\t\theight = value * parseFloat($(':root').css('font-size'));\n\t\t}\n\t\telse if (unit === 'em') {\n\t\t\theight = value * parseFloat($('body').css('font-size'));\n\t\t}\n\n\t\treturn height ? height : 0;\n\t},\n\n\t/**\n\t * Scrolling function - fired whenever the scrolling position is changed.\n\t * This method needs to use the stored values to see if the table should be\n\t * redrawn as we are moving towards the end of the information that is\n\t * currently drawn or not. If needed, then it will redraw the table based on\n\t * the new position.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_scroll: function () {\n\t\tvar that = this,\n\t\t\theights = this.s.heights,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTopRow;\n\n\t\tif (this.s.skip) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.s.ingnoreScroll) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (iScrollTop === this.s.lastScrollTop) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* If the table has been sorted or filtered, then we use the redraw that\n\t\t * DataTables as done, rather than performing our own\n\t\t */\n\t\tif (this.s.dt.bFiltered || this.s.dt.bSorted) {\n\t\t\tthis.s.lastScrollTop = 0;\n\t\t\treturn;\n\t\t}\n\n\t\t/* We don't want to state save on every scroll event - that's heavy\n\t\t * handed, so use a timeout to update the state saving only when the\n\t\t * scrolling has finished\n\t\t */\n\t\tclearTimeout(this.s.stateTO);\n\t\tthis.s.stateTO = setTimeout(function () {\n\t\t\tthat.s.dtApi.state.save();\n\t\t}, 250);\n\n\t\tthis.s.scrollType =\n\t\t\tMath.abs(iScrollTop - this.s.lastScrollTop) > heights.viewport\n\t\t\t\t? 'jump'\n\t\t\t\t: 'cont';\n\n\t\tthis.s.topRowFloat =\n\t\t\tthis.s.scrollType === 'cont'\n\t\t\t\t? this.pixelsToRow(iScrollTop, false, false)\n\t\t\t\t: this._domain('physicalToVirtual', iScrollTop) / heights.row;\n\n\t\tif (this.s.topRowFloat < 0) {\n\t\t\tthis.s.topRowFloat = 0;\n\t\t}\n\n\t\t/* Check if the scroll point is outside the trigger boundary which would required\n\t\t * a DataTables redraw\n\t\t */\n\t\tif (\n\t\t\tthis.s.forceReposition ||\n\t\t\tiScrollTop < this.s.redrawTop ||\n\t\t\tiScrollTop > this.s.redrawBottom\n\t\t) {\n\t\t\tvar preRows = Math.ceil(\n\t\t\t\t((this.s.displayBuffer - 1) / 2) * this.s.viewportRows\n\t\t\t);\n\n\t\t\tiTopRow = parseInt(this.s.topRowFloat, 10) - preRows;\n\t\t\tthis.s.forceReposition = false;\n\n\t\t\tif (iTopRow <= 0) {\n\t\t\t\t/* At the start of the table */\n\t\t\t\tiTopRow = 0;\n\t\t\t}\n\t\t\telse if (\n\t\t\t\tiTopRow + this.s.dt._iDisplayLength >\n\t\t\t\tthis.s.dt.fnRecordsDisplay()\n\t\t\t) {\n\t\t\t\t/* At the end of the table */\n\t\t\t\tiTopRow =\n\t\t\t\t\tthis.s.dt.fnRecordsDisplay() - this.s.dt._iDisplayLength;\n\t\t\t\tif (iTopRow < 0) {\n\t\t\t\t\tiTopRow = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (iTopRow % 2 !== 0) {\n\t\t\t\t// For the row-striping classes (odd/even) we want only to start\n\t\t\t\t// on evens otherwise the stripes will change between draws and\n\t\t\t\t// look rubbish\n\t\t\t\tiTopRow++;\n\t\t\t}\n\n\t\t\t// Store calcuated value, in case the following condition is not met, but so\n\t\t\t// that the draw function will still use it.\n\t\t\tthis.s.targetTop = iTopRow;\n\n\t\t\tif (iTopRow != this.s.dt._iDisplayStart) {\n\t\t\t\t/* Cache the new table position for quick lookups */\n\t\t\t\tthis.s.tableTop = $(this.s.dt.nTable).offset().top;\n\t\t\t\tthis.s.tableBottom =\n\t\t\t\t\t$(this.s.dt.nTable).height() + this.s.tableTop;\n\n\t\t\t\tvar draw = function () {\n\t\t\t\t\tthat.s.dt._iDisplayStart = that.s.targetTop;\n\t\t\t\t\tthat.s.dtApi.draw('page');\n\t\t\t\t};\n\n\t\t\t\t/* Do the DataTables redraw based on the calculated start point - note that when\n\t\t\t\t * using server-side processing we introduce a small delay to not DoS the server...\n\t\t\t\t */\n\t\t\t\tif (this.s.dt.oFeatures.bServerSide) {\n\t\t\t\t\tthis.s.forceReposition = true;\n\n\t\t\t\t\t// This is used only for KeyTable and is not currently publicly\n\t\t\t\t\t// documented. Open question - is it useful for anything else?\n\t\t\t\t\t$(this.s.dt.nTable).triggerHandler('scroller-will-draw.dt');\n\n\t\t\t\t\tif (DataTable.versionCheck('2')) {\n\t\t\t\t\t\tthat.s.dtApi.processing(true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.s.dt.oApi._fnProcessingDisplay(this.s.dt, true);\n\t\t\t\t\t}\n\n\t\t\t\t\tclearTimeout(this.s.drawTO);\n\t\t\t\t\tthis.s.drawTO = setTimeout(draw, this.s.serverWait);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdraw();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.s.topRowFloat = this.pixelsToRow(iScrollTop, false, true);\n\t\t}\n\n\t\t/* Update the table's information display for what is now in the viewport */\n\t\tthis._info();\n\n\t\tthis.s.lastScrollTop = iScrollTop;\n\t\tthis.s.stateSaveThrottle();\n\n\t\tif (this.s.scrollType === 'jump' && this.s.mousedown) {\n\t\t\tthis.s.labelVisible = true;\n\t\t}\n\t\tif (this.s.labelVisible) {\n\t\t\tvar labelFactor =\n\t\t\t\t(heights.viewport - heights.labelHeight - heights.xbar) /\n\t\t\t\theights.scroll;\n\n\t\t\tthis.dom.label\n\t\t\t\t.html(\n\t\t\t\t\tthis.s.dt.fnFormatNumber(\n\t\t\t\t\t\tparseInt(this.s.topRowFloat, 10) + 1\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.css('top', iScrollTop + iScrollTop * labelFactor)\n\t\t\t\t.css('display', 'block');\n\t\t}\n\t},\n\n\t/**\n\t * Force the scrolling container to have height beyond that of just the\n\t * table that has been drawn so the user can scroll the whole data set.\n\t *\n\t * Note that if the calculated required scrolling height exceeds a maximum\n\t * value (1 million pixels - hard-coded) the forcing element will be set\n\t * only to that maximum value and virtual / physical domain transforms will\n\t * be used to allow Scroller to display tables of any number of records.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_scrollForce: function () {\n\t\tvar heights = this.s.heights;\n\t\tvar max = 1000000;\n\n\t\theights.virtual = heights.row * this.s.dt.fnRecordsDisplay();\n\t\theights.scroll = heights.virtual;\n\n\t\tif (heights.scroll > max) {\n\t\t\theights.scroll = max;\n\t\t}\n\n\t\t// Minimum height so there is always a row visible (the 'no rows found'\n\t\t// if reduced to zero filtering)\n\t\tthis.dom.force.style.height =\n\t\t\theights.scroll > this.s.heights.row\n\t\t\t\t? heights.scroll + 'px'\n\t\t\t\t: this.s.heights.row + 'px';\n\t}\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Statics\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Scroller default settings for initialisation\n *  @namespace\n *  @name Scroller.defaults\n *  @static\n */\nScroller.defaults = {\n\t/**\n\t * Scroller uses the boundary scaling factor to decide when to redraw the table - which it\n\t * typically does before you reach the end of the currently loaded data set (in order to\n\t * allow the data to look continuous to a user scrolling through the data). If given as 0\n\t * then the table will be redrawn whenever the viewport is scrolled, while 1 would not\n\t * redraw the table until the currently loaded data has all been shown. You will want\n\t * something in the middle - the default factor of 0.5 is usually suitable.\n\t *  @type     float\n\t *  @default  0.5\n\t *  @static\n\t */\n\tboundaryScale: 0.5,\n\n\t/**\n\t * The display buffer is what Scroller uses to calculate how many rows it should pre-fetch\n\t * for scrolling. Scroller automatically adjusts DataTables' display length to pre-fetch\n\t * rows that will be shown in \"near scrolling\" (i.e. just beyond the current display area).\n\t * The value is based upon the number of rows that can be displayed in the viewport (i.e.\n\t * a value of 1), and will apply the display range to records before before and after the\n\t * current viewport - i.e. a factor of 3 will allow Scroller to pre-fetch 1 viewport's worth\n\t * of rows before the current viewport, the current viewport's rows and 1 viewport's worth\n\t * of rows after the current viewport. Adjusting this value can be useful for ensuring\n\t * smooth scrolling based on your data set.\n\t *  @type     int\n\t *  @default  7\n\t *  @static\n\t */\n\tdisplayBuffer: 9,\n\n\t/**\n\t * Scroller will attempt to automatically calculate the height of rows for it's internal\n\t * calculations. However the height that is used can be overridden using this parameter.\n\t *  @type     int|string\n\t *  @default  auto\n\t *  @static\n\t */\n\trowHeight: 'auto',\n\n\t/**\n\t * When using server-side processing, Scroller will wait a small amount of time to allow\n\t * the scrolling to finish before requesting more data from the server. This prevents\n\t * you from DoSing your own server! The wait time can be configured by this parameter.\n\t *  @type     int\n\t *  @default  200\n\t *  @static\n\t */\n\tserverWait: 200\n};\n\nScroller.oDefaults = Scroller.defaults;\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Scroller version\n *  @type      String\n *  @default   See code\n *  @name      Scroller.version\n *  @static\n */\nScroller.version = '2.3.0';\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Initialisation\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('preInit.dt.dtscroller', function (e, settings) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.scroller;\n\tvar defaults = DataTable.defaults.scroller;\n\n\tif (init || defaults) {\n\t\tvar opts = $.extend({}, init, defaults);\n\n\t\tif (init !== false) {\n\t\t\tnew Scroller(settings, opts);\n\t\t}\n\t}\n});\n\n// Attach Scroller to DataTables so it can be accessed as an 'extra'\n$.fn.dataTable.Scroller = Scroller;\n$.fn.DataTable.Scroller = Scroller;\n\n// DataTables 1.10 API method aliases\nvar Api = $.fn.dataTable.Api;\n\nApi.register('scroller()', function () {\n\treturn this;\n});\n\n// Undocumented and deprecated - is it actually useful at all?\nApi.register('scroller().rowToPixels()', function (rowIdx, intParse, virtual) {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.rowToPixels(rowIdx, intParse, virtual);\n\t}\n\t// undefined\n});\n\n// Undocumented and deprecated - is it actually useful at all?\nApi.register('scroller().pixelsToRow()', function (pixels, intParse, virtual) {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.pixelsToRow(pixels, intParse, virtual);\n\t}\n\t// undefined\n});\n\n// `scroller().scrollToRow()` is undocumented and deprecated. Use `scroller.toPosition()\nApi.register(\n\t['scroller().scrollToRow()', 'scroller.toPosition()'],\n\tfunction (idx, ani) {\n\t\tthis.iterator('table', function (ctx) {\n\t\t\tif (ctx.oScroller) {\n\t\t\t\tctx.oScroller.scrollToRow(idx, ani);\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n);\n\nApi.register('row().scrollTo()', function (ani) {\n\tvar that = this;\n\n\tthis.iterator('row', function (ctx, rowIdx) {\n\t\tif (ctx.oScroller) {\n\t\t\tvar displayIdx = that\n\t\t\t\t.rows({ order: 'applied', search: 'applied' })\n\t\t\t\t.indexes()\n\t\t\t\t.indexOf(rowIdx);\n\n\t\t\tctx.oScroller.scrollToRow(displayIdx, ani);\n\t\t}\n\t});\n\n\treturn this;\n});\n\nApi.register('scroller.measure()', function (redraw) {\n\tthis.iterator('table', function (ctx) {\n\t\tif (ctx.oScroller) {\n\t\t\tctx.oScroller.measure(redraw);\n\t\t}\n\t});\n\n\treturn this;\n});\n\nApi.register('scroller.page()', function () {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.pageInfo();\n\t}\n\t// undefined\n});\n\n\nreturn DataTable;\n}));\n\n\n/*! SearchBuilder 1.6.0\n * ©SpryMedia Ltd - datatables.net/license/mit\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n(function () {\n    'use strict';\n\n    var $$3;\n    var dataTable$3;\n    function moment() {\n        return window.moment;\n    }\n    function luxon() {\n        return window.luxon;\n    }\n    /**\n     * Sets the value of jQuery for use in the file\n     *\n     * @param jq the instance of jQuery to be set\n     */\n    function setJQuery$2(jq) {\n        $$3 = jq;\n        dataTable$3 = jq.fn.dataTable;\n    }\n    /**\n     * The Criteria class is used within SearchBuilder to represent a search criteria\n     */\n    var Criteria = /** @class */ (function () {\n        function Criteria(table, opts, topGroup, index, depth, serverData, liveSearch) {\n            if (index === void 0) { index = 0; }\n            if (depth === void 0) { depth = 1; }\n            if (serverData === void 0) { serverData = undefined; }\n            if (liveSearch === void 0) { liveSearch = false; }\n            var _this = this;\n            // Check that the required version of DataTables is included\n            if (!dataTable$3 || !dataTable$3.versionCheck || !dataTable$3.versionCheck('1.10.0')) {\n                throw new Error('SearchPane requires DataTables 1.10 or newer');\n            }\n            this.classes = $$3.extend(true, {}, Criteria.classes);\n            // Get options from user and any extra conditions/column types defined by plug-ins\n            this.c = $$3.extend(true, {}, Criteria.defaults, $$3.fn.dataTable.ext.searchBuilder, opts);\n            var i18n = this.c.i18n;\n            this.s = {\n                condition: undefined,\n                conditions: {},\n                data: undefined,\n                dataIdx: -1,\n                dataPoints: [],\n                dateFormat: false,\n                depth: depth,\n                dt: table,\n                filled: false,\n                index: index,\n                liveSearch: liveSearch,\n                origData: undefined,\n                preventRedraw: false,\n                serverData: serverData,\n                topGroup: topGroup,\n                type: '',\n                value: []\n            };\n            this.dom = {\n                buttons: $$3('<div/>')\n                    .addClass(this.classes.buttonContainer),\n                condition: $$3('<select disabled/>')\n                    .addClass(this.classes.condition)\n                    .addClass(this.classes.dropDown)\n                    .addClass(this.classes.italic)\n                    .attr('autocomplete', 'hacking'),\n                conditionTitle: $$3('<option value=\"\" disabled selected hidden/>')\n                    .html(this.s.dt.i18n('searchBuilder.condition', i18n.condition)),\n                container: $$3('<div/>')\n                    .addClass(this.classes.container),\n                data: $$3('<select/>')\n                    .addClass(this.classes.data)\n                    .addClass(this.classes.dropDown)\n                    .addClass(this.classes.italic),\n                dataTitle: $$3('<option value=\"\" disabled selected hidden/>')\n                    .html(this.s.dt.i18n('searchBuilder.data', i18n.data)),\n                defaultValue: $$3('<select disabled/>')\n                    .addClass(this.classes.value)\n                    .addClass(this.classes.dropDown)\n                    .addClass(this.classes.select)\n                    .addClass(this.classes.italic),\n                \"delete\": $$3('<button/>')\n                    .html(this.s.dt.i18n('searchBuilder.delete', i18n[\"delete\"]))\n                    .addClass(this.classes[\"delete\"])\n                    .addClass(this.classes.button)\n                    .attr('title', this.s.dt.i18n('searchBuilder.deleteTitle', i18n.deleteTitle))\n                    .attr('type', 'button'),\n                inputCont: $$3('<div/>')\n                    .addClass(this.classes.inputCont),\n                // eslint-disable-next-line no-useless-escape\n                left: $$3('<button/>')\n                    .html(this.s.dt.i18n('searchBuilder.left', i18n.left))\n                    .addClass(this.classes.left)\n                    .addClass(this.classes.button)\n                    .attr('title', this.s.dt.i18n('searchBuilder.leftTitle', i18n.leftTitle))\n                    .attr('type', 'button'),\n                // eslint-disable-next-line no-useless-escape\n                right: $$3('<button/>')\n                    .html(this.s.dt.i18n('searchBuilder.right', i18n.right))\n                    .addClass(this.classes.right)\n                    .addClass(this.classes.button)\n                    .attr('title', this.s.dt.i18n('searchBuilder.rightTitle', i18n.rightTitle))\n                    .attr('type', 'button'),\n                value: [\n                    $$3('<select disabled/>')\n                        .addClass(this.classes.value)\n                        .addClass(this.classes.dropDown)\n                        .addClass(this.classes.italic)\n                        .addClass(this.classes.select)\n                ],\n                valueTitle: $$3('<option value=\"--valueTitle--\" disabled selected hidden/>')\n                    .html(this.s.dt.i18n('searchBuilder.value', i18n.value))\n            };\n            // If the greyscale option is selected then add the class to add the grey colour to SearchBuilder\n            if (this.c.greyscale) {\n                this.dom.data.addClass(this.classes.greyscale);\n                this.dom.condition.addClass(this.classes.greyscale);\n                this.dom.defaultValue.addClass(this.classes.greyscale);\n                for (var _i = 0, _a = this.dom.value; _i < _a.length; _i++) {\n                    var val = _a[_i];\n                    val.addClass(this.classes.greyscale);\n                }\n            }\n            $$3(window).on('resize.dtsb', dataTable$3.util.throttle(function () {\n                _this.s.topGroup.trigger('dtsb-redrawLogic');\n            }));\n            this._buildCriteria();\n            return this;\n        }\n        /**\n         * Escape html characters within a string\n         *\n         * @param txt the string to be escaped\n         * @returns the escaped string\n         */\n        Criteria._escapeHTML = function (txt) {\n            return txt\n                .toString()\n                .replace(/&amp;/g, '&')\n                .replace(/&lt;/g, '<')\n                .replace(/&gt;/g, '>')\n                .replace(/&quot;/g, '\"');\n        };\n        /**\n         * Redraw the DataTable with the current search parameters\n         */\n        Criteria.prototype.doSearch = function () {\n            // Only do the search if live search is disabled, otherwise the search\n            // is triggered by the button at the top level group.\n            if (this.c.liveSearch) {\n                this.s.dt.draw();\n            }\n        };\n        /**\n         * Parses formatted numbers down to a form where they can be compared\n         *\n         * @param val the value to convert\n         * @returns the converted value\n         */\n        Criteria.parseNumFmt = function (val) {\n            return +val.replace(/(?!^-)[^0-9.]/g, '');\n        };\n        /**\n         * Adds the left button to the criteria\n         */\n        Criteria.prototype.updateArrows = function (hasSiblings) {\n            if (hasSiblings === void 0) { hasSiblings = false; }\n            // Empty the container and append all of the elements in the correct order\n            this.dom.container.children().detach();\n            this.dom.container\n                .append(this.dom.data)\n                .append(this.dom.condition)\n                .append(this.dom.inputCont);\n            this.setListeners();\n            // Trigger the inserted events for the value elements as they are inserted\n            if (this.dom.value[0] !== undefined) {\n                this.dom.value[0].trigger('dtsb-inserted');\n            }\n            for (var i = 1; i < this.dom.value.length; i++) {\n                this.dom.inputCont.append(this.dom.value[i]);\n                this.dom.value[i].trigger('dtsb-inserted');\n            }\n            // If this is a top level criteria then don't let it move left\n            if (this.s.depth > 1) {\n                this.dom.buttons.append(this.dom.left);\n            }\n            // If the depthLimit of the query has been hit then don't add the right button\n            if ((this.c.depthLimit === false || this.s.depth < this.c.depthLimit) && hasSiblings) {\n                this.dom.buttons.append(this.dom.right);\n            }\n            else {\n                this.dom.right.remove();\n            }\n            this.dom.buttons.append(this.dom[\"delete\"]);\n            this.dom.container.append(this.dom.buttons);\n        };\n        /**\n         * Destroys the criteria, removing listeners and container from the dom\n         */\n        Criteria.prototype.destroy = function () {\n            // Turn off listeners\n            this.dom.data.off('.dtsb');\n            this.dom.condition.off('.dtsb');\n            this.dom[\"delete\"].off('.dtsb');\n            for (var _i = 0, _a = this.dom.value; _i < _a.length; _i++) {\n                var val = _a[_i];\n                val.off('.dtsb');\n            }\n            // Remove container from the dom\n            this.dom.container.remove();\n        };\n        /**\n         * Passes in the data for the row and compares it against this single criteria\n         *\n         * @param rowData The data for the row to be compared\n         * @returns boolean Whether the criteria has passed\n         */\n        Criteria.prototype.search = function (rowData, rowIdx) {\n            var condition = this.s.conditions[this.s.condition];\n            if (this.s.condition !== undefined && condition !== undefined) {\n                var filter = rowData[this.s.dataIdx];\n                // This check is in place for if a custom decimal character is in place\n                if (this.s.type.includes('num') &&\n                    (this.s.dt.settings()[0].oLanguage.sDecimal !== '' ||\n                        this.s.dt.settings()[0].oLanguage.sThousands !== '')) {\n                    var splitRD = [rowData[this.s.dataIdx]];\n                    if (this.s.dt.settings()[0].oLanguage.sDecimal !== '') {\n                        splitRD = rowData[this.s.dataIdx].split(this.s.dt.settings()[0].oLanguage.sDecimal);\n                    }\n                    if (this.s.dt.settings()[0].oLanguage.sThousands !== '') {\n                        for (var i = 0; i < splitRD.length; i++) {\n                            splitRD[i] = splitRD[i].replace(this.s.dt.settings()[0].oLanguage.sThousands, ',');\n                        }\n                    }\n                    filter = splitRD.join('.');\n                }\n                // If orthogonal data is in place we need to get it's values for searching\n                if (this.c.orthogonal.search !== 'filter') {\n                    var settings = this.s.dt.settings()[0];\n                    filter = settings.oApi._fnGetCellData(settings, rowIdx, this.s.dataIdx, typeof this.c.orthogonal === 'string' ?\n                        this.c.orthogonal :\n                        this.c.orthogonal.search);\n                }\n                if (this.s.type === 'array') {\n                    // Make sure we are working with an array\n                    if (!Array.isArray(filter)) {\n                        filter = [filter];\n                    }\n                    filter.sort();\n                    for (var _i = 0, filter_1 = filter; _i < filter_1.length; _i++) {\n                        var filt = filter_1[_i];\n                        if (filt && typeof filt === 'string') {\n                            filt = filt.replace(/[\\r\\n\\u2028]/g, ' ');\n                        }\n                    }\n                }\n                else if (filter !== null && typeof filter === 'string') {\n                    filter = filter.replace(/[\\r\\n\\u2028]/g, ' ');\n                }\n                if (this.s.type.includes('html') && typeof filter === 'string') {\n                    filter = filter.replace(/(<([^>]+)>)/ig, '');\n                }\n                // Not ideal, but jqueries .val() returns an empty string even\n                // when the value set is null, so we shall assume the two are equal\n                if (filter === null) {\n                    filter = '';\n                }\n                return condition.search(filter, this.s.value, this);\n            }\n        };\n        /**\n         * Gets the details required to rebuild the criteria\n         */\n        Criteria.prototype.getDetails = function (deFormatDates) {\n            if (deFormatDates === void 0) { deFormatDates = false; }\n            // This check is in place for if a custom decimal character is in place\n            if (this.s.type !== null &&\n                this.s.type.includes('num') &&\n                (this.s.dt.settings()[0].oLanguage.sDecimal !== '' || this.s.dt.settings()[0].oLanguage.sThousands !== '')) {\n                for (var i = 0; i < this.s.value.length; i++) {\n                    var splitRD = [this.s.value[i].toString()];\n                    if (this.s.dt.settings()[0].oLanguage.sDecimal !== '') {\n                        splitRD = this.s.value[i].split(this.s.dt.settings()[0].oLanguage.sDecimal);\n                    }\n                    if (this.s.dt.settings()[0].oLanguage.sThousands !== '') {\n                        for (var j = 0; j < splitRD.length; j++) {\n                            splitRD[j] = splitRD[j].replace(this.s.dt.settings()[0].oLanguage.sThousands, ',');\n                        }\n                    }\n                    this.s.value[i] = splitRD.join('.');\n                }\n            }\n            else if (this.s.type !== null && deFormatDates) {\n                if (this.s.type.includes('date') ||\n                    this.s.type.includes('time')) {\n                    for (var i = 0; i < this.s.value.length; i++) {\n                        if (this.s.value[i].match(/^\\d{4}-([0]\\d|1[0-2])-([0-2]\\d|3[01])$/g) === null) {\n                            this.s.value[i] = '';\n                        }\n                    }\n                }\n                else if (this.s.type.includes('moment')) {\n                    for (var i = 0; i < this.s.value.length; i++) {\n                        if (this.s.value[i] &&\n                            this.s.value[i].length > 0 &&\n                            moment()(this.s.value[i], this.s.dateFormat, true).isValid()) {\n                            this.s.value[i] = moment()(this.s.value[i], this.s.dateFormat).format('YYYY-MM-DD HH:mm:ss');\n                        }\n                    }\n                }\n                else if (this.s.type.includes('luxon')) {\n                    for (var i = 0; i < this.s.value.length; i++) {\n                        if (this.s.value[i] &&\n                            this.s.value[i].length > 0 &&\n                            luxon().DateTime.fromFormat(this.s.value[i], this.s.dateFormat).invalid === null) {\n                            this.s.value[i] = luxon().DateTime.fromFormat(this.s.value[i], this.s.dateFormat).toFormat('yyyy-MM-dd HH:mm:ss');\n                        }\n                    }\n                }\n            }\n            if (this.s.type.includes('num') && this.s.dt.page.info().serverSide) {\n                for (var i = 0; i < this.s.value.length; i++) {\n                    this.s.value[i] = this.s.value[i].replace(/[^0-9.\\-]/g, '');\n                }\n            }\n            return {\n                condition: this.s.condition,\n                data: this.s.data,\n                origData: this.s.origData,\n                type: this.s.type,\n                value: this.s.value.map(function (a) { return a !== null && a !== undefined ? a.toString() : a; })\n            };\n        };\n        /**\n         * Getter for the node for the container of the criteria\n         *\n         * @returns JQuery<HTMLElement> the node for the container\n         */\n        Criteria.prototype.getNode = function () {\n            return this.dom.container;\n        };\n        /**\n         * Populates the criteria data, condition and value(s) as far as has been selected\n         */\n        Criteria.prototype.populate = function () {\n            this._populateData();\n            // If the column index has been found attempt to select a condition\n            if (this.s.dataIdx !== -1) {\n                this._populateCondition();\n                // If the condittion has been found attempt to select the values\n                if (this.s.condition !== undefined) {\n                    this._populateValue();\n                }\n            }\n        };\n        /**\n         * Rebuilds the criteria based upon the details passed in\n         *\n         * @param loadedCriteria the details required to rebuild the criteria\n         */\n        Criteria.prototype.rebuild = function (loadedCriteria) {\n            // Check to see if the previously selected data exists, if so select it\n            var foundData = false;\n            var dataIdx;\n            this._populateData();\n            // If a data selection has previously been made attempt to find and select it\n            if (loadedCriteria.data !== undefined) {\n                var italic_1 = this.classes.italic;\n                var data_1 = this.dom.data;\n                this.dom.data.children('option').each(function () {\n                    if (!foundData &&\n                        ($$3(this).text() === loadedCriteria.data ||\n                            loadedCriteria.origData && $$3(this).prop('origData') === loadedCriteria.origData)) {\n                        $$3(this).prop('selected', true);\n                        data_1.removeClass(italic_1);\n                        foundData = true;\n                        dataIdx = parseInt($$3(this).val(), 10);\n                    }\n                    else {\n                        $$3(this).removeProp('selected');\n                    }\n                });\n            }\n            // If the data has been found and selected then the condition can be populated and searched\n            if (foundData) {\n                this.s.data = loadedCriteria.data;\n                this.s.origData = loadedCriteria.origData;\n                this.s.dataIdx = dataIdx;\n                this.c.orthogonal = this._getOptions().orthogonal;\n                this.dom.dataTitle.remove();\n                this._populateCondition();\n                this.dom.conditionTitle.remove();\n                var condition = void 0;\n                // Check to see if the previously selected condition exists, if so select it\n                var options = this.dom.condition.children('option');\n                // eslint-disable-next-line @typescript-eslint/prefer-for-of\n                for (var i = 0; i < options.length; i++) {\n                    var option = $$3(options[i]);\n                    if (loadedCriteria.condition !== undefined &&\n                        option.val() === loadedCriteria.condition &&\n                        typeof loadedCriteria.condition === 'string') {\n                        option.prop('selected', true);\n                        condition = option.val();\n                    }\n                    else {\n                        option.removeProp('selected');\n                    }\n                }\n                this.s.condition = condition;\n                // If the condition has been found and selected then the value can be populated and searched\n                if (this.s.condition !== undefined) {\n                    this.dom.conditionTitle.removeProp('selected');\n                    this.dom.conditionTitle.remove();\n                    this.dom.condition.removeClass(this.classes.italic);\n                    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n                    for (var i = 0; i < options.length; i++) {\n                        var option = $$3(options[i]);\n                        if (option.val() !== this.s.condition) {\n                            option.removeProp('selected');\n                        }\n                    }\n                    this._populateValue(loadedCriteria);\n                }\n                else {\n                    this.dom.conditionTitle.prependTo(this.dom.condition).prop('selected', true);\n                }\n            }\n        };\n        /**\n         * Sets the listeners for the criteria\n         */\n        Criteria.prototype.setListeners = function () {\n            var _this = this;\n            this.dom.data\n                .unbind('change')\n                .on('change.dtsb', function () {\n                _this.dom.dataTitle.removeProp('selected');\n                // Need to go over every option to identify the correct selection\n                var options = _this.dom.data.children('option.' + _this.classes.option);\n                // eslint-disable-next-line @typescript-eslint/prefer-for-of\n                for (var i = 0; i < options.length; i++) {\n                    var option = $$3(options[i]);\n                    if (option.val() === _this.dom.data.val()) {\n                        _this.dom.data.removeClass(_this.classes.italic);\n                        option.prop('selected', true);\n                        _this.s.dataIdx = +option.val();\n                        _this.s.data = option.text();\n                        _this.s.origData = option.prop('origData');\n                        _this.c.orthogonal = _this._getOptions().orthogonal;\n                        // When the data is changed, the values in condition and\n                        // value may also change so need to renew them\n                        _this._clearCondition();\n                        _this._clearValue();\n                        _this._populateCondition();\n                        // If this criteria was previously active in the search then\n                        // remove it from the search and trigger a new search\n                        if (_this.s.filled) {\n                            _this.s.filled = false;\n                            _this.doSearch();\n                            _this.setListeners();\n                        }\n                        _this.s.dt.state.save();\n                    }\n                    else {\n                        option.removeProp('selected');\n                    }\n                }\n            });\n            this.dom.condition\n                .unbind('change')\n                .on('change.dtsb', function () {\n                _this.dom.conditionTitle.removeProp('selected');\n                // Need to go over every option to identify the correct selection\n                var options = _this.dom.condition.children('option.' + _this.classes.option);\n                // eslint-disable-next-line @typescript-eslint/prefer-for-of\n                for (var i = 0; i < options.length; i++) {\n                    var option = $$3(options[i]);\n                    if (option.val() === _this.dom.condition.val()) {\n                        _this.dom.condition.removeClass(_this.classes.italic);\n                        option.prop('selected', true);\n                        var condDisp = option.val();\n                        // Find the condition that has been selected and store it internally\n                        for (var _i = 0, _a = Object.keys(_this.s.conditions); _i < _a.length; _i++) {\n                            var cond = _a[_i];\n                            if (cond === condDisp) {\n                                _this.s.condition = condDisp;\n                                break;\n                            }\n                        }\n                        // When the condition is changed, the value selector may switch between\n                        // a select element and an input element\n                        _this._clearValue();\n                        _this._populateValue();\n                        for (var _b = 0, _c = _this.dom.value; _b < _c.length; _b++) {\n                            var val = _c[_b];\n                            // If this criteria was previously active in the search then remove\n                            // it from the search and trigger a new search\n                            if (_this.s.filled && val !== undefined && _this.dom.inputCont.has(val[0]).length !== 0) {\n                                _this.s.filled = false;\n                                _this.doSearch();\n                                _this.setListeners();\n                            }\n                        }\n                        if (_this.dom.value.length === 0 ||\n                            _this.dom.value.length === 1 && _this.dom.value[0] === undefined) {\n                            _this.doSearch();\n                        }\n                    }\n                    else {\n                        option.removeProp('selected');\n                    }\n                }\n            });\n        };\n        Criteria.prototype.setupButtons = function () {\n            if (window.innerWidth > 550) {\n                this.dom.container.removeClass(this.classes.vertical);\n                this.dom.buttons.css('left', null);\n                this.dom.buttons.css('top', null);\n                return;\n            }\n            this.dom.container.addClass(this.classes.vertical);\n            this.dom.buttons.css('left', this.dom.data.innerWidth());\n            this.dom.buttons.css('top', this.dom.data.position().top);\n        };\n        /**\n         * Builds the elements of the dom together\n         */\n        Criteria.prototype._buildCriteria = function () {\n            // Append Titles for select elements\n            this.dom.data.append(this.dom.dataTitle);\n            this.dom.condition.append(this.dom.conditionTitle);\n            // Add elements to container\n            this.dom.container\n                .append(this.dom.data)\n                .append(this.dom.condition);\n            this.dom.inputCont.empty();\n            for (var _i = 0, _a = this.dom.value; _i < _a.length; _i++) {\n                var val = _a[_i];\n                val.append(this.dom.valueTitle);\n                this.dom.inputCont.append(val);\n            }\n            // Add buttons to container\n            this.dom.buttons\n                .append(this.dom[\"delete\"])\n                .append(this.dom.right);\n            this.dom.container.append(this.dom.inputCont).append(this.dom.buttons);\n            this.setListeners();\n        };\n        /**\n         * Clears the condition select element\n         */\n        Criteria.prototype._clearCondition = function () {\n            this.dom.condition.empty();\n            this.dom.conditionTitle.prop('selected', true).attr('disabled', 'true');\n            this.dom.condition.prepend(this.dom.conditionTitle).prop('selectedIndex', 0);\n            this.s.conditions = {};\n            this.s.condition = undefined;\n        };\n        /**\n         * Clears the value elements\n         */\n        Criteria.prototype._clearValue = function () {\n            if (this.s.condition !== undefined) {\n                if (this.dom.value.length > 0 && this.dom.value[0] !== undefined) {\n                    var _loop_1 = function (val) {\n                        if (val !== undefined) {\n                            // Timeout is annoying but because of IOS\n                            setTimeout(function () {\n                                val.remove();\n                            }, 50);\n                        }\n                    };\n                    // Remove all of the value elements\n                    for (var _i = 0, _a = this.dom.value; _i < _a.length; _i++) {\n                        var val = _a[_i];\n                        _loop_1(val);\n                    }\n                }\n                // Call the init function to get the value elements for this condition\n                this.dom.value = [].concat(this.s.conditions[this.s.condition].init(this, Criteria.updateListener));\n                if (this.dom.value.length > 0 && this.dom.value[0] !== undefined) {\n                    this.dom.inputCont\n                        .empty()\n                        .append(this.dom.value[0])\n                        .insertAfter(this.dom.condition);\n                    this.dom.value[0].trigger('dtsb-inserted');\n                    // Insert all of the value elements\n                    for (var i = 1; i < this.dom.value.length; i++) {\n                        this.dom.inputCont.append(this.dom.value[i]);\n                        this.dom.value[i].trigger('dtsb-inserted');\n                    }\n                }\n            }\n            else {\n                var _loop_2 = function (val) {\n                    if (val !== undefined) {\n                        // Timeout is annoying but because of IOS\n                        setTimeout(function () {\n                            val.remove();\n                        }, 50);\n                    }\n                };\n                // Remove all of the value elements\n                for (var _b = 0, _c = this.dom.value; _b < _c.length; _b++) {\n                    var val = _c[_b];\n                    _loop_2(val);\n                }\n                // Append the default valueTitle to the default select element\n                this.dom.valueTitle\n                    .prop('selected', true);\n                this.dom.defaultValue\n                    .append(this.dom.valueTitle)\n                    .insertAfter(this.dom.condition);\n            }\n            this.s.value = [];\n            this.dom.value = [\n                $$3('<select disabled/>')\n                    .addClass(this.classes.value)\n                    .addClass(this.classes.dropDown)\n                    .addClass(this.classes.italic)\n                    .addClass(this.classes.select)\n                    .append(this.dom.valueTitle.clone())\n            ];\n        };\n        /**\n         * Gets the options for the column\n         *\n         * @returns {object} The options for the column\n         */\n        Criteria.prototype._getOptions = function () {\n            var table = this.s.dt;\n            return $$3.extend(true, {}, Criteria.defaults, table.settings()[0].aoColumns[this.s.dataIdx].searchBuilder);\n        };\n        /**\n         * Populates the condition dropdown\n         */\n        Criteria.prototype._populateCondition = function () {\n            var conditionOpts = [];\n            var conditionsLength = Object.keys(this.s.conditions).length;\n            var colInits = this.s.dt.settings()[0].aoColumns;\n            var column = +this.dom.data.children('option:selected').val();\n            // If there are no conditions stored then we need to get them from the appropriate type\n            if (conditionsLength === 0) {\n                this.s.type = this.s.dt.columns().type().toArray()[column];\n                if (colInits !== undefined) {\n                    var colInit = colInits[column];\n                    if (colInit.searchBuilderType !== undefined && colInit.searchBuilderType !== null) {\n                        this.s.type = colInit.searchBuilderType;\n                    }\n                    else if (this.s.type === undefined || this.s.type === null) {\n                        this.s.type = colInit.sType;\n                    }\n                }\n                // If the column type is still unknown, call a draw to try reading it again\n                if (this.s.type === null || this.s.type === undefined) {\n                    $$3.fn.dataTable.ext.oApi._fnColumnTypes(this.s.dt.settings()[0]);\n                    this.s.type = this.s.dt.columns().type().toArray()[column];\n                }\n                // Enable the condition element\n                this.dom.condition\n                    .removeAttr('disabled')\n                    .empty()\n                    .append(this.dom.conditionTitle)\n                    .addClass(this.classes.italic);\n                this.dom.conditionTitle\n                    .prop('selected', true);\n                var decimal = this.s.dt.settings()[0].oLanguage.sDecimal;\n                // This check is in place for if a custom decimal character is in place\n                if (decimal !== '' && this.s.type.indexOf(decimal) === this.s.type.length - decimal.length) {\n                    if (this.s.type.includes('num-fmt')) {\n                        this.s.type = this.s.type.replace(decimal, '');\n                    }\n                    else if (this.s.type.includes('num')) {\n                        this.s.type = this.s.type.replace(decimal, '');\n                    }\n                }\n                // Select which conditions are going to be used based on the column type\n                var conditionObj = this.c.conditions[this.s.type] !== undefined ?\n                    this.c.conditions[this.s.type] :\n                    this.s.type.includes('moment') ?\n                        this.c.conditions.moment :\n                        this.s.type.includes('luxon') ?\n                            this.c.conditions.luxon :\n                            this.c.conditions.string;\n                // If it is a moment format then extract the date format\n                if (this.s.type.includes('moment')) {\n                    this.s.dateFormat = this.s.type.replace(/moment-/g, '');\n                }\n                else if (this.s.type.includes('luxon')) {\n                    this.s.dateFormat = this.s.type.replace(/luxon-/g, '');\n                }\n                // Add all of the conditions to the select element\n                for (var _i = 0, _a = Object.keys(conditionObj); _i < _a.length; _i++) {\n                    var condition = _a[_i];\n                    if (conditionObj[condition] !== null) {\n                        // Serverside processing does not supply the options for the select elements\n                        // Instead input elements need to be used for these instead\n                        if (this.s.dt.page.info().serverSide && conditionObj[condition].init === Criteria.initSelect) {\n                            var col = colInits[column];\n                            if (this.s.serverData && this.s.serverData[col.data]) {\n                                conditionObj[condition].init = Criteria.initSelectSSP;\n                                conditionObj[condition].inputValue = Criteria.inputValueSelect;\n                                conditionObj[condition].isInputValid = Criteria.isInputValidSelect;\n                            }\n                            else {\n                                conditionObj[condition].init = Criteria.initInput;\n                                conditionObj[condition].inputValue = Criteria.inputValueInput;\n                                conditionObj[condition].isInputValid = Criteria.isInputValidInput;\n                            }\n                        }\n                        this.s.conditions[condition] = conditionObj[condition];\n                        var condName = conditionObj[condition].conditionName;\n                        if (typeof condName === 'function') {\n                            condName = condName(this.s.dt, this.c.i18n);\n                        }\n                        conditionOpts.push($$3('<option>', {\n                            text: condName,\n                            value: condition\n                        })\n                            .addClass(this.classes.option)\n                            .addClass(this.classes.notItalic));\n                    }\n                }\n            }\n            // Otherwise we can just load them in\n            else if (conditionsLength > 0) {\n                this.dom.condition.empty().removeAttr('disabled').addClass(this.classes.italic);\n                for (var _b = 0, _c = Object.keys(this.s.conditions); _b < _c.length; _b++) {\n                    var condition = _c[_b];\n                    var condName = this.s.conditions[condition].conditionName;\n                    if (typeof condName === 'function') {\n                        condName = condName(this.s.dt, this.c.i18n);\n                    }\n                    var newOpt = $$3('<option>', {\n                        text: condName,\n                        value: condition\n                    })\n                        .addClass(this.classes.option)\n                        .addClass(this.classes.notItalic);\n                    if (this.s.condition !== undefined && this.s.condition === condName) {\n                        newOpt.prop('selected', true);\n                        this.dom.condition.removeClass(this.classes.italic);\n                    }\n                    conditionOpts.push(newOpt);\n                }\n            }\n            else {\n                this.dom.condition\n                    .attr('disabled', 'true')\n                    .addClass(this.classes.italic);\n                return;\n            }\n            for (var _d = 0, conditionOpts_1 = conditionOpts; _d < conditionOpts_1.length; _d++) {\n                var opt = conditionOpts_1[_d];\n                this.dom.condition.append(opt);\n            }\n            // Selecting a default condition if one is set\n            if (colInits[column].searchBuilder && colInits[column].searchBuilder.defaultCondition) {\n                var defaultCondition = colInits[column].searchBuilder.defaultCondition;\n                // If it is a number just use it as an index\n                if (typeof defaultCondition === 'number') {\n                    this.dom.condition.prop('selectedIndex', defaultCondition);\n                    this.dom.condition.trigger('change');\n                }\n                // If it is a string then things get slightly more tricly\n                else if (typeof defaultCondition === 'string') {\n                    // We need to check each condition option to see if any will match\n                    for (var i = 0; i < conditionOpts.length; i++) {\n                        // Need to check against the stored conditions so we can match the token \"cond\" to the option\n                        for (var _e = 0, _f = Object.keys(this.s.conditions); _e < _f.length; _e++) {\n                            var cond = _f[_e];\n                            var condName = this.s.conditions[cond].conditionName;\n                            if (\n                            // If the conditionName matches the text of the option\n                            (typeof condName === 'string' ? condName : condName(this.s.dt, this.c.i18n)) ===\n                                conditionOpts[i].text() &&\n                                // and the tokens match\n                                cond === defaultCondition) {\n                                // Select that option\n                                this.dom.condition\n                                    .prop('selectedIndex', this.dom.condition.children().toArray().indexOf(conditionOpts[i][0]))\n                                    .removeClass(this.classes.italic);\n                                this.dom.condition.trigger('change');\n                                i = conditionOpts.length;\n                                break;\n                            }\n                        }\n                    }\n                }\n            }\n            // If not default set then default to 0, the title\n            else {\n                this.dom.condition.prop('selectedIndex', 0);\n            }\n        };\n        /**\n         * Populates the data / column select element\n         */\n        Criteria.prototype._populateData = function () {\n            var columns = this.s.dt.settings()[0].aoColumns;\n            var includeColumns = this.s.dt.columns(this.c.columns).indexes().toArray();\n            this.dom.data.empty().append(this.dom.dataTitle);\n            for (var index = 0; index < columns.length; index++) {\n                // Need to check that the column can be filtered on before adding it\n                if (this.c.columns === true || includeColumns.includes(index)) {\n                    var col = columns[index];\n                    var opt = {\n                        index: index,\n                        origData: col.data,\n                        text: (col.searchBuilderTitle || col.sTitle)\n                            .replace(/(<([^>]+)>)/ig, '')\n                    };\n                    this.dom.data.append($$3('<option>', {\n                        text: opt.text,\n                        value: opt.index\n                    })\n                        .addClass(this.classes.option)\n                        .addClass(this.classes.notItalic)\n                        .prop('origData', col.data)\n                        .prop('selected', this.s.dataIdx === opt.index ? true : false));\n                    if (this.s.dataIdx === opt.index) {\n                        this.dom.dataTitle.removeProp('selected');\n                    }\n                }\n            }\n        };\n        /**\n         * Populates the Value select element\n         *\n         * @param loadedCriteria optional, used to reload criteria from predefined filters\n         */\n        Criteria.prototype._populateValue = function (loadedCriteria) {\n            var _this = this;\n            var prevFilled = this.s.filled;\n            this.s.filled = false;\n            // Remove any previous value elements\n            // Timeout is annoying but because of IOS\n            setTimeout(function () {\n                _this.dom.defaultValue.remove();\n            }, 50);\n            var _loop_3 = function (val) {\n                // Timeout is annoying but because of IOS\n                setTimeout(function () {\n                    if (val !== undefined) {\n                        val.remove();\n                    }\n                }, 50);\n            };\n            for (var _i = 0, _a = this.dom.value; _i < _a.length; _i++) {\n                var val = _a[_i];\n                _loop_3(val);\n            }\n            var children = this.dom.inputCont.children();\n            if (children.length > 1) {\n                // eslint-disable-next-line @typescript-eslint/prefer-for-of\n                for (var i = 0; i < children.length; i++) {\n                    $$3(children[i]).remove();\n                }\n            }\n            // Find the column with the title matching the data for the criteria and take note of the index\n            if (loadedCriteria !== undefined) {\n                this.s.dt.columns().every(function (index) {\n                    if (_this.s.dt.settings()[0].aoColumns[index].sTitle === loadedCriteria.data) {\n                        _this.s.dataIdx = index;\n                    }\n                });\n            }\n            // Initialise the value elements based on the condition\n            this.dom.value = [].concat(this.s.conditions[this.s.condition].init(this, Criteria.updateListener, loadedCriteria !== undefined ? loadedCriteria.value : undefined));\n            if (loadedCriteria !== undefined && loadedCriteria.value !== undefined) {\n                this.s.value = loadedCriteria.value;\n            }\n            this.dom.inputCont.empty();\n            // Insert value elements and trigger the inserted event\n            if (this.dom.value[0] !== undefined) {\n                this.dom.value[0]\n                    .appendTo(this.dom.inputCont)\n                    .trigger('dtsb-inserted');\n            }\n            for (var i = 1; i < this.dom.value.length; i++) {\n                this.dom.value[i]\n                    .insertAfter(this.dom.value[i - 1])\n                    .trigger('dtsb-inserted');\n            }\n            // Check if the criteria can be used in a search\n            this.s.filled = this.s.conditions[this.s.condition].isInputValid(this.dom.value, this);\n            this.setListeners();\n            // If it can and this is different to before then trigger a draw\n            if (!this.s.preventRedraw && prevFilled !== this.s.filled) {\n                // If using SSP we want to restrict the amount of server calls that take place\n                //  and this will already have taken place\n                if (!this.s.dt.page.info().serverSide) {\n                    this.doSearch();\n                }\n                this.setListeners();\n            }\n        };\n        /**\n         * Provides throttling capabilities to SearchBuilder without having to use dt's _fnThrottle function\n         * This is because that function is not quite suitable for our needs as it runs initially rather than waiting\n         *\n         * @param args arguments supplied to the throttle function\n         * @returns Function that is to be run that implements the throttling\n         */\n        Criteria.prototype._throttle = function (fn, frequency) {\n            if (frequency === void 0) { frequency = 200; }\n            var last = null;\n            var timer = null;\n            var that = this;\n            if (frequency === null) {\n                frequency = 200;\n            }\n            return function () {\n                var args = [];\n                for (var _i = 0; _i < arguments.length; _i++) {\n                    args[_i] = arguments[_i];\n                }\n                var now = +new Date();\n                if (last !== null && now < last + frequency) {\n                    clearTimeout(timer);\n                }\n                else {\n                    last = now;\n                }\n                timer = setTimeout(function () {\n                    last = null;\n                    fn.apply(that, args);\n                }, frequency);\n            };\n        };\n        Criteria.version = '1.1.0';\n        Criteria.classes = {\n            button: 'dtsb-button',\n            buttonContainer: 'dtsb-buttonContainer',\n            condition: 'dtsb-condition',\n            container: 'dtsb-criteria',\n            data: 'dtsb-data',\n            \"delete\": 'dtsb-delete',\n            dropDown: 'dtsb-dropDown',\n            greyscale: 'dtsb-greyscale',\n            input: 'dtsb-input',\n            inputCont: 'dtsb-inputCont',\n            italic: 'dtsb-italic',\n            joiner: 'dtsp-joiner',\n            left: 'dtsb-left',\n            notItalic: 'dtsb-notItalic',\n            option: 'dtsb-option',\n            right: 'dtsb-right',\n            select: 'dtsb-select',\n            value: 'dtsb-value',\n            vertical: 'dtsb-vertical'\n        };\n        /**\n         * Default initialisation function for select conditions\n         */\n        Criteria.initSelect = function (that, fn, preDefined, array) {\n            if (preDefined === void 0) { preDefined = null; }\n            if (array === void 0) { array = false; }\n            var column = that.dom.data.children('option:selected').val();\n            var indexArray = that.s.dt.rows().indexes().toArray();\n            var settings = that.s.dt.settings()[0];\n            that.dom.valueTitle.prop('selected', true);\n            // Declare select element to be used with all of the default classes and listeners.\n            var el = $$3('<select/>')\n                .addClass(Criteria.classes.value)\n                .addClass(Criteria.classes.dropDown)\n                .addClass(Criteria.classes.italic)\n                .addClass(Criteria.classes.select)\n                .append(that.dom.valueTitle)\n                .on('change.dtsb', function () {\n                $$3(this).removeClass(Criteria.classes.italic);\n                fn(that, this);\n            });\n            if (that.c.greyscale) {\n                el.addClass(Criteria.classes.greyscale);\n            }\n            var added = [];\n            var options = [];\n            // Add all of the options from the table to the select element.\n            // Only add one option for each possible value\n            for (var _i = 0, indexArray_1 = indexArray; _i < indexArray_1.length; _i++) {\n                var index = indexArray_1[_i];\n                var filter = settings.oApi._fnGetCellData(settings, index, column, typeof that.c.orthogonal === 'string' ?\n                    that.c.orthogonal :\n                    that.c.orthogonal.search);\n                var value = {\n                    filter: typeof filter === 'string' ?\n                        filter.replace(/[\\r\\n\\u2028]/g, ' ') : // Need to replace certain characters to match search values\n                        filter,\n                    index: index,\n                    text: settings.oApi._fnGetCellData(settings, index, column, typeof that.c.orthogonal === 'string' ?\n                        that.c.orthogonal :\n                        that.c.orthogonal.display)\n                };\n                // If we are dealing with an array type, either make sure we are working with arrays, or sort them\n                if (that.s.type === 'array') {\n                    value.filter = !Array.isArray(value.filter) ? [value.filter] : value.filter;\n                    value.text = !Array.isArray(value.text) ? [value.text] : value.text;\n                }\n                // Function to add an option to the select element\n                var addOption = function (filt, text) {\n                    if (that.s.type.includes('html') && filt !== null && typeof filt === 'string') {\n                        filt.replace(/(<([^>]+)>)/ig, '');\n                    }\n                    // Add text and value, stripping out any html if that is the column type\n                    var opt = $$3('<option>', {\n                        type: Array.isArray(filt) ? 'Array' : 'String',\n                        value: filt\n                    })\n                        .data('sbv', filt)\n                        .addClass(that.classes.option)\n                        .addClass(that.classes.notItalic)\n                        // Have to add the text this way so that special html characters are not escaped - &amp; etc.\n                        .html(typeof text === 'string' ?\n                        text.replace(/(<([^>]+)>)/ig, '') :\n                        text);\n                    var val = opt.val();\n                    // Check that this value has not already been added\n                    if (added.indexOf(val) === -1) {\n                        added.push(val);\n                        options.push(opt);\n                        if (preDefined !== null && Array.isArray(preDefined[0])) {\n                            preDefined[0] = preDefined[0].sort().join(',');\n                        }\n                        // If this value was previously selected as indicated by preDefined, then select it again\n                        if (preDefined !== null && opt.val() === preDefined[0]) {\n                            opt.prop('selected', true);\n                            el.removeClass(Criteria.classes.italic);\n                            that.dom.valueTitle.removeProp('selected');\n                        }\n                    }\n                };\n                // If this is to add the individual values within the array we need to loop over the array\n                if (array) {\n                    for (var i = 0; i < value.filter.length; i++) {\n                        addOption(value.filter[i], value.text[i]);\n                    }\n                }\n                // Otherwise the value that is in the cell is to be added\n                else {\n                    addOption(value.filter, Array.isArray(value.text) ? value.text.join(', ') : value.text);\n                }\n            }\n            options.sort(function (a, b) {\n                if (that.s.type === 'array' ||\n                    that.s.type === 'string' ||\n                    that.s.type === 'html') {\n                    if (a.val() < b.val()) {\n                        return -1;\n                    }\n                    else if (a.val() > b.val()) {\n                        return 1;\n                    }\n                    else {\n                        return 0;\n                    }\n                }\n                else if (that.s.type === 'num' ||\n                    that.s.type === 'html-num') {\n                    if (+a.val().replace(/(<([^>]+)>)/ig, '') < +b.val().replace(/(<([^>]+)>)/ig, '')) {\n                        return -1;\n                    }\n                    else if (+a.val().replace(/(<([^>]+)>)/ig, '') > +b.val().replace(/(<([^>]+)>)/ig, '')) {\n                        return 1;\n                    }\n                    else {\n                        return 0;\n                    }\n                }\n                else if (that.s.type === 'num-fmt' || that.s.type === 'html-num-fmt') {\n                    if (+a.val().replace(/[^0-9.]/g, '') < +b.val().replace(/[^0-9.]/g, '')) {\n                        return -1;\n                    }\n                    else if (+a.val().replace(/[^0-9.]/g, '') > +b.val().replace(/[^0-9.]/g, '')) {\n                        return 1;\n                    }\n                    else {\n                        return 0;\n                    }\n                }\n            });\n            for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {\n                var opt = options_1[_a];\n                el.append(opt);\n            }\n            return el;\n        };\n        /**\n         * Default initialisation function for select conditions\n         */\n        Criteria.initSelectSSP = function (that, fn, preDefined) {\n            if (preDefined === void 0) { preDefined = null; }\n            that.dom.valueTitle.prop('selected', true);\n            // Declare select element to be used with all of the default classes and listeners.\n            var el = $$3('<select/>')\n                .addClass(Criteria.classes.value)\n                .addClass(Criteria.classes.dropDown)\n                .addClass(Criteria.classes.italic)\n                .addClass(Criteria.classes.select)\n                .append(that.dom.valueTitle)\n                .on('change.dtsb', function () {\n                $$3(this).removeClass(Criteria.classes.italic);\n                fn(that, this);\n            });\n            if (that.c.greyscale) {\n                el.addClass(Criteria.classes.greyscale);\n            }\n            var options = [];\n            for (var _i = 0, _a = that.s.serverData[that.s.origData]; _i < _a.length; _i++) {\n                var option = _a[_i];\n                var value = option.value;\n                var label = option.label;\n                // Function to add an option to the select element\n                var addOption = function (filt, text) {\n                    if (that.s.type.includes('html') && filt !== null && typeof filt === 'string') {\n                        filt.replace(/(<([^>]+)>)/ig, '');\n                    }\n                    // Add text and value, stripping out any html if that is the column type\n                    var opt = $$3('<option>', {\n                        type: Array.isArray(filt) ? 'Array' : 'String',\n                        value: filt\n                    })\n                        .data('sbv', filt)\n                        .addClass(that.classes.option)\n                        .addClass(that.classes.notItalic)\n                        // Have to add the text this way so that special html characters are not escaped - &amp; etc.\n                        .html(typeof text === 'string' ?\n                        text.replace(/(<([^>]+)>)/ig, '') :\n                        text);\n                    options.push(opt);\n                    // If this value was previously selected as indicated by preDefined, then select it again\n                    if (preDefined !== null && opt.val() === preDefined[0]) {\n                        opt.prop('selected', true);\n                        el.removeClass(Criteria.classes.italic);\n                        that.dom.valueTitle.removeProp('selected');\n                    }\n                };\n                addOption(value, label);\n            }\n            for (var _b = 0, options_2 = options; _b < options_2.length; _b++) {\n                var opt = options_2[_b];\n                el.append(opt);\n            }\n            return el;\n        };\n        /**\n         * Default initialisation function for select array conditions\n         *\n         * This exists because there needs to be different select functionality for contains/without and equals/not\n         */\n        Criteria.initSelectArray = function (that, fn, preDefined) {\n            if (preDefined === void 0) { preDefined = null; }\n            return Criteria.initSelect(that, fn, preDefined, true);\n        };\n        /**\n         * Default initialisation function for input conditions\n         */\n        Criteria.initInput = function (that, fn, preDefined) {\n            if (preDefined === void 0) { preDefined = null; }\n            // Declare the input element\n            var searchDelay = that.s.dt.settings()[0].searchDelay;\n            var el = $$3('<input/>')\n                .addClass(Criteria.classes.value)\n                .addClass(Criteria.classes.input)\n                .on('input.dtsb keypress.dtsb', that._throttle(function (e) {\n                var code = e.keyCode || e.which;\n                return fn(that, this, code);\n            }, searchDelay === null ? 100 : searchDelay));\n            if (that.c.greyscale) {\n                el.addClass(Criteria.classes.greyscale);\n            }\n            // If there is a preDefined value then add it\n            if (preDefined !== null) {\n                el.val(preDefined[0]);\n            }\n            // This is add responsive functionality to the logic button without redrawing everything else\n            that.s.dt.one('draw.dtsb', function () {\n                that.s.topGroup.trigger('dtsb-redrawLogic');\n            });\n            return el;\n        };\n        /**\n         * Default initialisation function for conditions requiring 2 inputs\n         */\n        Criteria.init2Input = function (that, fn, preDefined) {\n            if (preDefined === void 0) { preDefined = null; }\n            // Declare all of the necessary jQuery elements\n            var searchDelay = that.s.dt.settings()[0].searchDelay;\n            var els = [\n                $$3('<input/>')\n                    .addClass(Criteria.classes.value)\n                    .addClass(Criteria.classes.input)\n                    .on('input.dtsb keypress.dtsb', that._throttle(function (e) {\n                    var code = e.keyCode || e.which;\n                    return fn(that, this, code);\n                }, searchDelay === null ? 100 : searchDelay)),\n                $$3('<span>')\n                    .addClass(that.classes.joiner)\n                    .html(that.s.dt.i18n('searchBuilder.valueJoiner', that.c.i18n.valueJoiner)),\n                $$3('<input/>')\n                    .addClass(Criteria.classes.value)\n                    .addClass(Criteria.classes.input)\n                    .on('input.dtsb keypress.dtsb', that._throttle(function (e) {\n                    var code = e.keyCode || e.which;\n                    return fn(that, this, code);\n                }, searchDelay === null ? 100 : searchDelay))\n            ];\n            if (that.c.greyscale) {\n                els[0].addClass(Criteria.classes.greyscale);\n                els[2].addClass(Criteria.classes.greyscale);\n            }\n            // If there is a preDefined value then add it\n            if (preDefined !== null) {\n                els[0].val(preDefined[0]);\n                els[2].val(preDefined[1]);\n            }\n            // This is add responsive functionality to the logic button without redrawing everything else\n            that.s.dt.one('draw.dtsb', function () {\n                that.s.topGroup.trigger('dtsb-redrawLogic');\n            });\n            return els;\n        };\n        /**\n         * Default initialisation function for date conditions\n         */\n        Criteria.initDate = function (that, fn, preDefined) {\n            if (preDefined === void 0) { preDefined = null; }\n            var searchDelay = that.s.dt.settings()[0].searchDelay;\n            var i18n = that.s.dt.i18n('datetime', {});\n            // Declare date element using DataTables dateTime plugin\n            var el = $$3('<input/>')\n                .addClass(Criteria.classes.value)\n                .addClass(Criteria.classes.input)\n                .dtDateTime({\n                attachTo: 'input',\n                format: that.s.dateFormat ? that.s.dateFormat : undefined,\n                i18n: i18n\n            })\n                .on('change.dtsb', that._throttle(function () {\n                return fn(that, this);\n            }, searchDelay === null ? 100 : searchDelay))\n                .on('input.dtsb keypress.dtsb', function (e) {\n                that._throttle(function () {\n                    var code = e.keyCode || e.which;\n                    return fn(that, this, code);\n                }, searchDelay === null ? 100 : searchDelay);\n            });\n            if (that.c.greyscale) {\n                el.addClass(Criteria.classes.greyscale);\n            }\n            // If there is a preDefined value then add it\n            if (preDefined !== null) {\n                el.val(preDefined[0]);\n            }\n            // This is add responsive functionality to the logic button without redrawing everything else\n            that.s.dt.one('draw.dtsb', function () {\n                that.s.topGroup.trigger('dtsb-redrawLogic');\n            });\n            return el;\n        };\n        Criteria.initNoValue = function (that) {\n            // This is add responsive functionality to the logic button without redrawing everything else\n            that.s.dt.one('draw.dtsb', function () {\n                that.s.topGroup.trigger('dtsb-redrawLogic');\n            });\n            return [];\n        };\n        Criteria.init2Date = function (that, fn, preDefined) {\n            var _this = this;\n            if (preDefined === void 0) { preDefined = null; }\n            var searchDelay = that.s.dt.settings()[0].searchDelay;\n            var i18n = that.s.dt.i18n('datetime', {});\n            // Declare all of the date elements that are required using DataTables dateTime plugin\n            var els = [\n                $$3('<input/>')\n                    .addClass(Criteria.classes.value)\n                    .addClass(Criteria.classes.input)\n                    .dtDateTime({\n                    attachTo: 'input',\n                    format: that.s.dateFormat ? that.s.dateFormat : undefined,\n                    i18n: i18n\n                })\n                    .on('change.dtsb', searchDelay !== null ?\n                    that.s.dt.settings()[0].oApi._fnThrottle(function () {\n                        return fn(that, this);\n                    }, searchDelay) :\n                    function () {\n                        fn(that, _this);\n                    })\n                    .on('input.dtsb keypress.dtsb', function (e) {\n                    that.s.dt.settings()[0].oApi._fnThrottle(function () {\n                        var code = e.keyCode || e.which;\n                        return fn(that, this, code);\n                    }, searchDelay === null ? 0 : searchDelay);\n                }),\n                $$3('<span>')\n                    .addClass(that.classes.joiner)\n                    .html(that.s.dt.i18n('searchBuilder.valueJoiner', that.c.i18n.valueJoiner)),\n                $$3('<input/>')\n                    .addClass(Criteria.classes.value)\n                    .addClass(Criteria.classes.input)\n                    .dtDateTime({\n                    attachTo: 'input',\n                    format: that.s.dateFormat ? that.s.dateFormat : undefined,\n                    i18n: i18n\n                })\n                    .on('change.dtsb', searchDelay !== null ?\n                    that.s.dt.settings()[0].oApi._fnThrottle(function () {\n                        return fn(that, this);\n                    }, searchDelay) :\n                    function () {\n                        fn(that, _this);\n                    })\n                    .on('input.dtsb keypress.dtsb', !that.c.enterSearch &&\n                    !(that.s.dt.settings()[0].oInit.search !== undefined &&\n                        that.s.dt.settings()[0].oInit.search[\"return\"]) &&\n                    searchDelay !== null ?\n                    that.s.dt.settings()[0].oApi._fnThrottle(function () {\n                        return fn(that, this);\n                    }, searchDelay) :\n                    function (e) {\n                        var code = e.keyCode || e.which;\n                        fn(that, _this, code);\n                    })\n            ];\n            if (that.c.greyscale) {\n                els[0].addClass(Criteria.classes.greyscale);\n                els[2].addClass(Criteria.classes.greyscale);\n            }\n            // If there are and preDefined values then add them\n            if (preDefined !== null && preDefined.length > 0) {\n                els[0].val(preDefined[0]);\n                els[2].val(preDefined[1]);\n            }\n            // This is add responsive functionality to the logic button without redrawing everything else\n            that.s.dt.one('draw.dtsb', function () {\n                that.s.topGroup.trigger('dtsb-redrawLogic');\n            });\n            return els;\n        };\n        /**\n         * Default function for select elements to validate condition\n         */\n        Criteria.isInputValidSelect = function (el) {\n            var allFilled = true;\n            // Check each element to make sure that the selections are valid\n            for (var _i = 0, el_1 = el; _i < el_1.length; _i++) {\n                var element = el_1[_i];\n                if (element.children('option:selected').length ===\n                    element.children('option').length -\n                        element.children('option.' + Criteria.classes.notItalic).length &&\n                    element.children('option:selected').length === 1 &&\n                    element.children('option:selected')[0] === element.children('option')[0]) {\n                    allFilled = false;\n                }\n            }\n            return allFilled;\n        };\n        /**\n         * Default function for input and date elements to validate condition\n         */\n        Criteria.isInputValidInput = function (el) {\n            var allFilled = true;\n            // Check each element to make sure that the inputs are valid\n            for (var _i = 0, el_2 = el; _i < el_2.length; _i++) {\n                var element = el_2[_i];\n                if (element.is('input') && element.val().length === 0) {\n                    allFilled = false;\n                }\n            }\n            return allFilled;\n        };\n        /**\n         * Default function for getting select conditions\n         */\n        Criteria.inputValueSelect = function (el) {\n            var values = [];\n            // Go through the select elements and push each selected option to the return array\n            for (var _i = 0, el_3 = el; _i < el_3.length; _i++) {\n                var element = el_3[_i];\n                if (element.is('select')) {\n                    values.push(Criteria._escapeHTML(element.children('option:selected').data('sbv')));\n                }\n            }\n            return values;\n        };\n        /**\n         * Default function for getting input conditions\n         */\n        Criteria.inputValueInput = function (el) {\n            var values = [];\n            // Go through the input elements and push each value to the return array\n            for (var _i = 0, el_4 = el; _i < el_4.length; _i++) {\n                var element = el_4[_i];\n                if (element.is('input')) {\n                    values.push(Criteria._escapeHTML(element.val()));\n                }\n            }\n            return values;\n        };\n        /**\n         * Function that is run on each element as a call back when a search should be triggered\n         */\n        Criteria.updateListener = function (that, el, code) {\n            // When the value is changed the criteria is now complete so can be included in searches\n            // Get the condition from the map based on the key that has been selected for the condition\n            var condition = that.s.conditions[that.s.condition];\n            that.s.filled = condition.isInputValid(that.dom.value, that);\n            that.s.value = condition.inputValue(that.dom.value, that);\n            if (!that.s.filled) {\n                if (!that.c.enterSearch &&\n                    !(that.s.dt.settings()[0].oInit.search !== undefined &&\n                        that.s.dt.settings()[0].oInit.search[\"return\"]) ||\n                    code === 13) {\n                    that.doSearch();\n                }\n                return;\n            }\n            if (!Array.isArray(that.s.value)) {\n                that.s.value = [that.s.value];\n            }\n            for (var i = 0; i < that.s.value.length; i++) {\n                // If the value is an array we need to sort it\n                if (Array.isArray(that.s.value[i])) {\n                    that.s.value[i].sort();\n                }\n                // Otherwise replace the decimal place character for i18n\n                else if (that.s.type.includes('num') &&\n                    (that.s.dt.settings()[0].oLanguage.sDecimal !== '' ||\n                        that.s.dt.settings()[0].oLanguage.sThousands !== '')) {\n                    var splitRD = [that.s.value[i].toString()];\n                    if (that.s.dt.settings()[0].oLanguage.sDecimal !== '') {\n                        splitRD = that.s.value[i].split(that.s.dt.settings()[0].oLanguage.sDecimal);\n                    }\n                    if (that.s.dt.settings()[0].oLanguage.sThousands !== '') {\n                        for (var j = 0; j < splitRD.length; j++) {\n                            splitRD[j] = splitRD[j].replace(that.s.dt.settings()[0].oLanguage.sThousands, ',');\n                        }\n                    }\n                    that.s.value[i] = splitRD.join('.');\n                }\n            }\n            // Take note of the cursor position so that we can refocus there later\n            var idx = null;\n            var cursorPos = null;\n            for (var i = 0; i < that.dom.value.length; i++) {\n                if (el === that.dom.value[i][0]) {\n                    idx = i;\n                    if (el.selectionStart !== undefined) {\n                        cursorPos = el.selectionStart;\n                    }\n                }\n            }\n            if (!that.c.enterSearch &&\n                !(that.s.dt.settings()[0].oInit.search !== undefined &&\n                    that.s.dt.settings()[0].oInit.search[\"return\"]) ||\n                code === 13) {\n                // Trigger a search\n                that.doSearch();\n            }\n            // Refocus the element and set the correct cursor position\n            if (idx !== null) {\n                that.dom.value[idx].removeClass(that.classes.italic);\n                that.dom.value[idx].focus();\n                if (cursorPos !== null) {\n                    that.dom.value[idx][0].setSelectionRange(cursorPos, cursorPos);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Has to be in this order so that they are displayed correctly in select elements\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.dateConditions = {\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.equals', i18n.conditions.date.equals);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    value = value.replace(/(\\/|-|,)/g, '-');\n                    return value === comparison[0];\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.not', i18n.conditions.date.not);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    value = value.replace(/(\\/|-|,)/g, '-');\n                    return value !== comparison[0];\n                }\n            },\n            '<': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.before', i18n.conditions.date.before);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    value = value.replace(/(\\/|-|,)/g, '-');\n                    return value < comparison[0];\n                }\n            },\n            '>': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.after', i18n.conditions.date.after);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    value = value.replace(/(\\/|-|,)/g, '-');\n                    return value > comparison[0];\n                }\n            },\n            'between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.between', i18n.conditions.date.between);\n                },\n                init: Criteria.init2Date,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    value = value.replace(/(\\/|-|,)/g, '-');\n                    if (comparison[0] < comparison[1]) {\n                        return comparison[0] <= value && value <= comparison[1];\n                    }\n                    else {\n                        return comparison[1] <= value && value <= comparison[0];\n                    }\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.notBetween', i18n.conditions.date.notBetween);\n                },\n                init: Criteria.init2Date,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    value = value.replace(/(\\/|-|,)/g, '-');\n                    if (comparison[0] < comparison[1]) {\n                        return !(comparison[0] <= value && value <= comparison[1]);\n                    }\n                    else {\n                        return !(comparison[1] <= value && value <= comparison[0]);\n                    }\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.empty', i18n.conditions.date.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.notEmpty', i18n.conditions.date.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return !(value === null || value === undefined || value.length === 0);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Has to be in this order so that they are displayed correctly in select elements\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.momentDateConditions = {\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.equals', i18n.conditions.date.equals);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return moment()(value, that.s.dateFormat).valueOf() ===\n                        moment()(comparison[0], that.s.dateFormat).valueOf();\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.not', i18n.conditions.date.not);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return moment()(value, that.s.dateFormat).valueOf() !==\n                        moment()(comparison[0], that.s.dateFormat).valueOf();\n                }\n            },\n            '<': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.before', i18n.conditions.date.before);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return moment()(value, that.s.dateFormat).valueOf() < moment()(comparison[0], that.s.dateFormat).valueOf();\n                }\n            },\n            '>': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.after', i18n.conditions.date.after);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return moment()(value, that.s.dateFormat).valueOf() > moment()(comparison[0], that.s.dateFormat).valueOf();\n                }\n            },\n            'between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.between', i18n.conditions.date.between);\n                },\n                init: Criteria.init2Date,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    var val = moment()(value, that.s.dateFormat).valueOf();\n                    var comp0 = moment()(comparison[0], that.s.dateFormat).valueOf();\n                    var comp1 = moment()(comparison[1], that.s.dateFormat).valueOf();\n                    if (comp0 < comp1) {\n                        return comp0 <= val && val <= comp1;\n                    }\n                    else {\n                        return comp1 <= val && val <= comp0;\n                    }\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.notBetween', i18n.conditions.date.notBetween);\n                },\n                init: Criteria.init2Date,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    var val = moment()(value, that.s.dateFormat).valueOf();\n                    var comp0 = moment()(comparison[0], that.s.dateFormat).valueOf();\n                    var comp1 = moment()(comparison[1], that.s.dateFormat).valueOf();\n                    if (comp0 < comp1) {\n                        return !(+comp0 <= +val && +val <= +comp1);\n                    }\n                    else {\n                        return !(+comp1 <= +val && +val <= +comp0);\n                    }\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.empty', i18n.conditions.date.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.notEmpty', i18n.conditions.date.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return !(value === null || value === undefined || value.length === 0);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Has to be in this order so that they are displayed correctly in select elements\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.luxonDateConditions = {\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.equals', i18n.conditions.date.equals);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return luxon().DateTime.fromFormat(value, that.s.dateFormat).ts\n                        === luxon().DateTime.fromFormat(comparison[0], that.s.dateFormat).ts;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.not', i18n.conditions.date.not);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return luxon().DateTime.fromFormat(value, that.s.dateFormat).ts\n                        !== luxon().DateTime.fromFormat(comparison[0], that.s.dateFormat).ts;\n                }\n            },\n            '<': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.before', i18n.conditions.date.before);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return luxon().DateTime.fromFormat(value, that.s.dateFormat).ts\n                        < luxon().DateTime.fromFormat(comparison[0], that.s.dateFormat).ts;\n                }\n            },\n            '>': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.after', i18n.conditions.date.after);\n                },\n                init: Criteria.initDate,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    return luxon().DateTime.fromFormat(value, that.s.dateFormat).ts\n                        > luxon().DateTime.fromFormat(comparison[0], that.s.dateFormat).ts;\n                }\n            },\n            'between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.between', i18n.conditions.date.between);\n                },\n                init: Criteria.init2Date,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    var val = luxon().DateTime.fromFormat(value, that.s.dateFormat).ts;\n                    var comp0 = luxon().DateTime.fromFormat(comparison[0], that.s.dateFormat).ts;\n                    var comp1 = luxon().DateTime.fromFormat(comparison[1], that.s.dateFormat).ts;\n                    if (comp0 < comp1) {\n                        return comp0 <= val && val <= comp1;\n                    }\n                    else {\n                        return comp1 <= val && val <= comp0;\n                    }\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.notBetween', i18n.conditions.date.notBetween);\n                },\n                init: Criteria.init2Date,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison, that) {\n                    var val = luxon().DateTime.fromFormat(value, that.s.dateFormat).ts;\n                    var comp0 = luxon().DateTime.fromFormat(comparison[0], that.s.dateFormat).ts;\n                    var comp1 = luxon().DateTime.fromFormat(comparison[1], that.s.dateFormat).ts;\n                    if (comp0 < comp1) {\n                        return !(+comp0 <= +val && +val <= +comp1);\n                    }\n                    else {\n                        return !(+comp1 <= +val && +val <= +comp0);\n                    }\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.empty', i18n.conditions.date.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.date.notEmpty', i18n.conditions.date.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return !(value === null || value === undefined || value.length === 0);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Has to be in this order so that they are displayed correctly in select elements\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.numConditions = {\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.equals', i18n.conditions.number.equals);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return +value === +comparison[0];\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.not', i18n.conditions.number.not);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return +value !== +comparison[0];\n                }\n            },\n            '<': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.lt', i18n.conditions.number.lt);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return +value < +comparison[0];\n                }\n            },\n            '<=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.lte', i18n.conditions.number.lte);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return +value <= +comparison[0];\n                }\n            },\n            '>=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.gte', i18n.conditions.number.gte);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return +value >= +comparison[0];\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '>': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.gt', i18n.conditions.number.gt);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return +value > +comparison[0];\n                }\n            },\n            'between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.between', i18n.conditions.number.between);\n                },\n                init: Criteria.init2Input,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    if (+comparison[0] < +comparison[1]) {\n                        return +comparison[0] <= +value && +value <= +comparison[1];\n                    }\n                    else {\n                        return +comparison[1] <= +value && +value <= +comparison[0];\n                    }\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.notBetween', i18n.conditions.number.notBetween);\n                },\n                init: Criteria.init2Input,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    if (+comparison[0] < +comparison[1]) {\n                        return !(+comparison[0] <= +value && +value <= +comparison[1]);\n                    }\n                    else {\n                        return !(+comparison[1] <= +value && +value <= +comparison[0]);\n                    }\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.empty', i18n.conditions.number.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.notEmpty', i18n.conditions.number.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return !(value === null || value === undefined || value.length === 0);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Has to be in this order so that they are displayed correctly in select elements\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.numFmtConditions = {\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.equals', i18n.conditions.number.equals);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return Criteria.parseNumFmt(value) === Criteria.parseNumFmt(comparison[0]);\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.not', i18n.conditions.number.not);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return Criteria.parseNumFmt(value) !== Criteria.parseNumFmt(comparison[0]);\n                }\n            },\n            '<': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.lt', i18n.conditions.number.lt);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return Criteria.parseNumFmt(value) < Criteria.parseNumFmt(comparison[0]);\n                }\n            },\n            '<=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.lte', i18n.conditions.number.lte);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return Criteria.parseNumFmt(value) <= Criteria.parseNumFmt(comparison[0]);\n                }\n            },\n            '>=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.gte', i18n.conditions.number.gte);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return Criteria.parseNumFmt(value) >= Criteria.parseNumFmt(comparison[0]);\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '>': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.gt', i18n.conditions.number.gt);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return Criteria.parseNumFmt(value) > Criteria.parseNumFmt(comparison[0]);\n                }\n            },\n            'between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.between', i18n.conditions.number.between);\n                },\n                init: Criteria.init2Input,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    var val = Criteria.parseNumFmt(value);\n                    var comp0 = Criteria.parseNumFmt(comparison[0]);\n                    var comp1 = Criteria.parseNumFmt(comparison[1]);\n                    if (+comp0 < +comp1) {\n                        return +comp0 <= +val && +val <= +comp1;\n                    }\n                    else {\n                        return +comp1 <= +val && +val <= +comp0;\n                    }\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!between': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.notBetween', i18n.conditions.number.notBetween);\n                },\n                init: Criteria.init2Input,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    var val = Criteria.parseNumFmt(value);\n                    var comp0 = Criteria.parseNumFmt(comparison[0]);\n                    var comp1 = Criteria.parseNumFmt(comparison[1]);\n                    if (+comp0 < +comp1) {\n                        return !(+comp0 <= +val && +val <= +comp1);\n                    }\n                    else {\n                        return !(+comp1 <= +val && +val <= +comp0);\n                    }\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.empty', i18n.conditions.number.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.number.notEmpty', i18n.conditions.number.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return !(value === null || value === undefined || value.length === 0);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Has to be in this order so that they are displayed correctly in select elements\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.stringConditions = {\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.equals', i18n.conditions.string.equals);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return value === comparison[0];\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.not', i18n.conditions.string.not);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return value !== comparison[0];\n                }\n            },\n            'starts': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.startsWith', i18n.conditions.string.startsWith);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return value.toLowerCase().indexOf(comparison[0].toLowerCase()) === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!starts': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.notStartsWith', i18n.conditions.string.notStartsWith);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return value.toLowerCase().indexOf(comparison[0].toLowerCase()) !== 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            'contains': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.contains', i18n.conditions.string.contains);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return value.toLowerCase().includes(comparison[0].toLowerCase());\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!contains': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.notContains', i18n.conditions.string.notContains);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return !value.toLowerCase().includes(comparison[0].toLowerCase());\n                }\n            },\n            'ends': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.endsWith', i18n.conditions.string.endsWith);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return value.toLowerCase().endsWith(comparison[0].toLowerCase());\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!ends': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.notEndsWith', i18n.conditions.string.notEndsWith);\n                },\n                init: Criteria.initInput,\n                inputValue: Criteria.inputValueInput,\n                isInputValid: Criteria.isInputValidInput,\n                search: function (value, comparison) {\n                    return !value.toLowerCase().endsWith(comparison[0].toLowerCase());\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.empty', i18n.conditions.string.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.string.notEmpty', i18n.conditions.string.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return !(value === null || value === undefined || value.length === 0);\n                }\n            }\n        };\n        // The order of the conditions will make eslint sad :(\n        // Also have to disable member ordering for this as the private methods used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.arrayConditions = {\n            'contains': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.array.contains', i18n.conditions.array.contains);\n                },\n                init: Criteria.initSelectArray,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return value.includes(comparison[0]);\n                }\n            },\n            'without': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.array.without', i18n.conditions.array.without);\n                },\n                init: Criteria.initSelectArray,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    return value.indexOf(comparison[0]) === -1;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.array.equals', i18n.conditions.array.equals);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    if (value.length === comparison[0].length) {\n                        for (var i = 0; i < value.length; i++) {\n                            if (value[i] !== comparison[0][i]) {\n                                return false;\n                            }\n                        }\n                        return true;\n                    }\n                    return false;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!=': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.array.not', i18n.conditions.array.not);\n                },\n                init: Criteria.initSelect,\n                inputValue: Criteria.inputValueSelect,\n                isInputValid: Criteria.isInputValidSelect,\n                search: function (value, comparison) {\n                    if (value.length === comparison[0].length) {\n                        for (var i = 0; i < value.length; i++) {\n                            if (value[i] !== comparison[0][i]) {\n                                return true;\n                            }\n                        }\n                        return false;\n                    }\n                    return true;\n                }\n            },\n            'null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.array.empty', i18n.conditions.array.empty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value === null || value === undefined || value.length === 0;\n                }\n            },\n            // eslint-disable-next-line sort-keys\n            '!null': {\n                conditionName: function (dt, i18n) {\n                    return dt.i18n('searchBuilder.conditions.array.notEmpty', i18n.conditions.array.notEmpty);\n                },\n                init: Criteria.initNoValue,\n                inputValue: function () {\n                    return;\n                },\n                isInputValid: function () {\n                    return true;\n                },\n                search: function (value) {\n                    return value !== null && value !== undefined && value.length !== 0;\n                }\n            }\n        };\n        // eslint will be sad because we have to disable member ordering for this as the\n        // private static properties used are not yet declared otherwise\n        // eslint-disable-next-line @typescript-eslint/member-ordering\n        Criteria.defaults = {\n            columns: true,\n            conditions: {\n                'array': Criteria.arrayConditions,\n                'date': Criteria.dateConditions,\n                'html': Criteria.stringConditions,\n                'html-num': Criteria.numConditions,\n                'html-num-fmt': Criteria.numFmtConditions,\n                'luxon': Criteria.luxonDateConditions,\n                'moment': Criteria.momentDateConditions,\n                'num': Criteria.numConditions,\n                'num-fmt': Criteria.numFmtConditions,\n                'string': Criteria.stringConditions\n            },\n            depthLimit: false,\n            enterSearch: false,\n            filterChanged: undefined,\n            greyscale: false,\n            i18n: {\n                add: 'Add Condition',\n                button: {\n                    0: 'Search Builder',\n                    _: 'Search Builder (%d)'\n                },\n                clearAll: 'Clear All',\n                condition: 'Condition',\n                data: 'Data',\n                \"delete\": '&times',\n                deleteTitle: 'Delete filtering rule',\n                left: '<',\n                leftTitle: 'Outdent criteria',\n                logicAnd: 'And',\n                logicOr: 'Or',\n                right: '>',\n                rightTitle: 'Indent criteria',\n                search: 'Search',\n                title: {\n                    0: 'Custom Search Builder',\n                    _: 'Custom Search Builder (%d)'\n                },\n                value: 'Value',\n                valueJoiner: 'and'\n            },\n            logic: 'AND',\n            orthogonal: {\n                display: 'display',\n                search: 'filter'\n            },\n            preDefined: false\n        };\n        return Criteria;\n    }());\n\n    var $$2;\n    var dataTable$2;\n    /**\n     * Sets the value of jQuery for use in the file\n     *\n     * @param jq the instance of jQuery to be set\n     */\n    function setJQuery$1(jq) {\n        $$2 = jq;\n        dataTable$2 = jq.fn.dataTable;\n    }\n    /**\n     * The Group class is used within SearchBuilder to represent a group of criteria\n     */\n    var Group = /** @class */ (function () {\n        function Group(table, opts, topGroup, index, isChild, depth, serverData) {\n            if (index === void 0) { index = 0; }\n            if (isChild === void 0) { isChild = false; }\n            if (depth === void 0) { depth = 1; }\n            if (serverData === void 0) { serverData = undefined; }\n            // Check that the required version of DataTables is included\n            if (!dataTable$2 || !dataTable$2.versionCheck || !dataTable$2.versionCheck('1.10.0')) {\n                throw new Error('SearchBuilder requires DataTables 1.10 or newer');\n            }\n            this.classes = $$2.extend(true, {}, Group.classes);\n            // Get options from user\n            this.c = $$2.extend(true, {}, Group.defaults, opts);\n            this.s = {\n                criteria: [],\n                depth: depth,\n                dt: table,\n                index: index,\n                isChild: isChild,\n                logic: undefined,\n                opts: opts,\n                preventRedraw: false,\n                serverData: serverData,\n                toDrop: undefined,\n                topGroup: topGroup\n            };\n            this.dom = {\n                add: $$2('<button/>')\n                    .addClass(this.classes.add)\n                    .addClass(this.classes.button)\n                    .attr('type', 'button'),\n                clear: $$2('<button>&times</button>')\n                    .addClass(this.classes.button)\n                    .addClass(this.classes.clearGroup)\n                    .attr('type', 'button'),\n                container: $$2('<div/>')\n                    .addClass(this.classes.group),\n                logic: $$2('<button><div/></button>')\n                    .addClass(this.classes.logic)\n                    .addClass(this.classes.button)\n                    .attr('type', 'button'),\n                logicContainer: $$2('<div/>')\n                    .addClass(this.classes.logicContainer),\n                search: $$2('<button/>')\n                    .addClass(this.classes.search)\n                    .addClass(this.classes.button)\n                    .attr('type', 'button')\n                    .css('display', 'none')\n            };\n            // A reference to the top level group is maintained throughout any subgroups and criteria that may be created\n            if (this.s.topGroup === undefined) {\n                this.s.topGroup = this.dom.container;\n            }\n            this._setup();\n            return this;\n        }\n        /**\n         * Destroys the groups buttons, clears the internal criteria and removes it from the dom\n         */\n        Group.prototype.destroy = function () {\n            // Turn off listeners\n            this.dom.add.off('.dtsb');\n            this.dom.logic.off('.dtsb');\n            this.dom.search.off('.dtsb');\n            // Trigger event for groups at a higher level to pick up on\n            this.dom.container\n                .trigger('dtsb-destroy')\n                .remove();\n            this.s.criteria = [];\n        };\n        /**\n         * Gets the details required to rebuild the group\n         */\n        // Eslint upset at empty object but needs to be done\n        // eslint-disable-next-line @typescript-eslint/ban-types\n        Group.prototype.getDetails = function (deFormatDates) {\n            if (deFormatDates === void 0) { deFormatDates = false; }\n            if (this.s.criteria.length === 0) {\n                return {};\n            }\n            var details = {\n                criteria: [],\n                logic: this.s.logic\n            };\n            // NOTE here crit could be either a subgroup or a criteria\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                details.criteria.push(crit.criteria.getDetails(deFormatDates));\n            }\n            return details;\n        };\n        /**\n         * Getter for the node for the container of the group\n         *\n         * @returns Node for the container of the group\n         */\n        Group.prototype.getNode = function () {\n            return this.dom.container;\n        };\n        /**\n         * Rebuilds the group based upon the details passed in\n         *\n         * @param loadedDetails the details required to rebuild the group\n         */\n        Group.prototype.rebuild = function (loadedDetails) {\n            // If no criteria are stored then just return\n            if (loadedDetails.criteria === undefined ||\n                loadedDetails.criteria === null ||\n                Array.isArray(loadedDetails.criteria) && loadedDetails.criteria.length === 0) {\n                return;\n            }\n            this.s.logic = loadedDetails.logic;\n            this.dom.logic.children().first().html(this.s.logic === 'OR'\n                ? this.s.dt.i18n('searchBuilder.logicOr', this.c.i18n.logicOr)\n                : this.s.dt.i18n('searchBuilder.logicAnd', this.c.i18n.logicAnd));\n            // Add all of the criteria, be it a sub group or a criteria\n            if (Array.isArray(loadedDetails.criteria)) {\n                for (var _i = 0, _a = loadedDetails.criteria; _i < _a.length; _i++) {\n                    var crit = _a[_i];\n                    if (crit.logic !== undefined) {\n                        this._addPrevGroup(crit);\n                    }\n                    else if (crit.logic === undefined) {\n                        this._addPrevCriteria(crit);\n                    }\n                }\n            }\n            // For all of the criteria children, update the arrows incase they require changing and set the listeners\n            for (var _b = 0, _c = this.s.criteria; _b < _c.length; _b++) {\n                var crit = _c[_b];\n                if (crit.criteria instanceof Criteria) {\n                    crit.criteria.updateArrows(this.s.criteria.length > 1);\n                    this._setCriteriaListeners(crit.criteria);\n                }\n            }\n        };\n        /**\n         * Redraws the Contents of the searchBuilder Groups and Criteria\n         */\n        Group.prototype.redrawContents = function () {\n            if (this.s.preventRedraw) {\n                return;\n            }\n            // Clear the container out and add the basic elements\n            this.dom.container.children().detach();\n            this.dom.container\n                .append(this.dom.logicContainer)\n                .append(this.dom.add)\n                .append(this.dom.search);\n            // Sort the criteria by index so that they appear in the correct order\n            this.s.criteria.sort(function (a, b) {\n                if (a.criteria.s.index < b.criteria.s.index) {\n                    return -1;\n                }\n                else if (a.criteria.s.index > b.criteria.s.index) {\n                    return 1;\n                }\n                return 0;\n            });\n            this.setListeners();\n            for (var i = 0; i < this.s.criteria.length; i++) {\n                var crit = this.s.criteria[i].criteria;\n                if (crit instanceof Criteria) {\n                    // Reset the index to the new value\n                    this.s.criteria[i].index = i;\n                    this.s.criteria[i].criteria.s.index = i;\n                    // Add to the group\n                    this.s.criteria[i].criteria.dom.container.insertBefore(this.dom.add);\n                    // Set listeners for various points\n                    this._setCriteriaListeners(crit);\n                    this.s.criteria[i].criteria.s.preventRedraw = this.s.preventRedraw;\n                    this.s.criteria[i].criteria.rebuild(this.s.criteria[i].criteria.getDetails());\n                    this.s.criteria[i].criteria.s.preventRedraw = false;\n                }\n                else if (crit instanceof Group && crit.s.criteria.length > 0) {\n                    // Reset the index to the new value\n                    this.s.criteria[i].index = i;\n                    this.s.criteria[i].criteria.s.index = i;\n                    // Add the sub group to the group\n                    this.s.criteria[i].criteria.dom.container.insertBefore(this.dom.add);\n                    // Redraw the contents of the group\n                    crit.s.preventRedraw = this.s.preventRedraw;\n                    crit.redrawContents();\n                    crit.s.preventRedraw = false;\n                    this._setGroupListeners(crit);\n                }\n                else {\n                    // The group is empty so remove it\n                    this.s.criteria.splice(i, 1);\n                    i--;\n                }\n            }\n            this.setupLogic();\n        };\n        /**\n         * Resizes the logic button only rather than the entire dom.\n         */\n        Group.prototype.redrawLogic = function () {\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                if (crit.criteria instanceof Group) {\n                    crit.criteria.redrawLogic();\n                }\n            }\n            this.setupLogic();\n        };\n        /**\n         * Search method, checking the row data against the criteria in the group\n         *\n         * @param rowData The row data to be compared\n         * @returns boolean The result of the search\n         */\n        Group.prototype.search = function (rowData, rowIdx) {\n            if (this.s.logic === 'AND') {\n                return this._andSearch(rowData, rowIdx);\n            }\n            else if (this.s.logic === 'OR') {\n                return this._orSearch(rowData, rowIdx);\n            }\n            return true;\n        };\n        /**\n         * Locates the groups logic button to the correct location on the page\n         */\n        Group.prototype.setupLogic = function () {\n            // Remove logic button\n            this.dom.logicContainer.remove();\n            this.dom.clear.remove();\n            // If there are no criteria in the group then keep the logic removed and return\n            if (this.s.criteria.length < 1) {\n                if (!this.s.isChild) {\n                    this.dom.container.trigger('dtsb-destroy');\n                    // Set criteria left margin\n                    this.dom.container.css('margin-left', 0);\n                }\n                this.dom.search.css('display', 'none');\n                return;\n            }\n            this.dom.clear.height('0px');\n            this.dom.logicContainer.append(this.dom.clear);\n            if (!this.s.isChild) {\n                this.dom.search.css('display', 'inline-block');\n            }\n            // Prepend logic button\n            this.dom.container.prepend(this.dom.logicContainer);\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                if (crit.criteria instanceof Criteria) {\n                    crit.criteria.setupButtons();\n                }\n            }\n            // Set width, take 2 for the border\n            var height = this.dom.container.outerHeight() - 1;\n            this.dom.logicContainer.width(height);\n            this._setLogicListener();\n            // Set criteria left margin\n            this.dom.container.css('margin-left', this.dom.logicContainer.outerHeight(true));\n            var logicOffset = this.dom.logicContainer.offset();\n            // Set horizontal alignment\n            var currentLeft = logicOffset.left;\n            var groupLeft = this.dom.container.offset().left;\n            var shuffleLeft = currentLeft - groupLeft;\n            var newPos = currentLeft - shuffleLeft - this.dom.logicContainer.outerHeight(true);\n            this.dom.logicContainer.offset({ left: newPos });\n            // Set vertical alignment\n            var firstCrit = this.dom.logicContainer.next();\n            var currentTop = logicOffset.top;\n            var firstTop = $$2(firstCrit).offset().top;\n            var shuffleTop = currentTop - firstTop;\n            var newTop = currentTop - shuffleTop;\n            this.dom.logicContainer.offset({ top: newTop });\n            this.dom.clear.outerHeight(this.dom.logicContainer.height());\n            this._setClearListener();\n        };\n        /**\n         * Sets listeners on the groups elements\n         */\n        Group.prototype.setListeners = function () {\n            var _this = this;\n            this.dom.add.unbind('click');\n            this.dom.add.on('click.dtsb', function () {\n                // If this is the parent group then the logic button has not been added yet\n                if (!_this.s.isChild) {\n                    _this.dom.container.prepend(_this.dom.logicContainer);\n                }\n                _this.addCriteria();\n                _this.dom.container.trigger('dtsb-add');\n                _this.s.dt.state.save();\n                return false;\n            });\n            this.dom.search.on('click.dtsb', function () {\n                _this.s.dt.draw();\n            });\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                crit.criteria.setListeners();\n            }\n            this._setClearListener();\n            this._setLogicListener();\n        };\n        /**\n         * Adds a criteria to the group\n         *\n         * @param crit Instance of Criteria to be added to the group\n         */\n        Group.prototype.addCriteria = function (crit) {\n            if (crit === void 0) { crit = null; }\n            var index = crit === null ? this.s.criteria.length : crit.s.index;\n            var criteria = new Criteria(this.s.dt, this.s.opts, this.s.topGroup, index, this.s.depth, this.s.serverData, this.c.liveSearch);\n            // If a Criteria has been passed in then set the values to continue that\n            if (crit !== null) {\n                criteria.c = crit.c;\n                criteria.s = crit.s;\n                criteria.s.depth = this.s.depth;\n                criteria.classes = crit.classes;\n            }\n            criteria.populate();\n            var inserted = false;\n            for (var i = 0; i < this.s.criteria.length; i++) {\n                if (i === 0 && this.s.criteria[i].criteria.s.index > criteria.s.index) {\n                    // Add the node for the criteria at the start of the group\n                    criteria.getNode().insertBefore(this.s.criteria[i].criteria.dom.container);\n                    inserted = true;\n                }\n                else if (i < this.s.criteria.length - 1 &&\n                    this.s.criteria[i].criteria.s.index < criteria.s.index &&\n                    this.s.criteria[i + 1].criteria.s.index > criteria.s.index) {\n                    // Add the node for the criteria in the correct location\n                    criteria.getNode().insertAfter(this.s.criteria[i].criteria.dom.container);\n                    inserted = true;\n                }\n            }\n            if (!inserted) {\n                criteria.getNode().insertBefore(this.dom.add);\n            }\n            // Add the details for this criteria to the array\n            this.s.criteria.push({\n                criteria: criteria,\n                index: index\n            });\n            this.s.criteria = this.s.criteria.sort(function (a, b) { return a.criteria.s.index - b.criteria.s.index; });\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var opt = _a[_i];\n                if (opt.criteria instanceof Criteria) {\n                    opt.criteria.updateArrows(this.s.criteria.length > 1);\n                }\n            }\n            this._setCriteriaListeners(criteria);\n            criteria.setListeners();\n            this.setupLogic();\n        };\n        /**\n         * Checks the group to see if it has any filled criteria\n         */\n        Group.prototype.checkFilled = function () {\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                if (crit.criteria instanceof Criteria && crit.criteria.s.filled ||\n                    crit.criteria instanceof Group && crit.criteria.checkFilled()) {\n                    return true;\n                }\n            }\n            return false;\n        };\n        /**\n         * Gets the count for the number of criteria in this group and any sub groups\n         */\n        Group.prototype.count = function () {\n            var count = 0;\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                if (crit.criteria instanceof Group) {\n                    count += crit.criteria.count();\n                }\n                else {\n                    count++;\n                }\n            }\n            return count;\n        };\n        /**\n         * Rebuilds a sub group that previously existed\n         *\n         * @param loadedGroup The details of a group within this group\n         */\n        Group.prototype._addPrevGroup = function (loadedGroup) {\n            var idx = this.s.criteria.length;\n            var group = new Group(this.s.dt, this.c, this.s.topGroup, idx, true, this.s.depth + 1, this.s.serverData);\n            // Add the new group to the criteria array\n            this.s.criteria.push({\n                criteria: group,\n                index: idx,\n                logic: group.s.logic\n            });\n            // Rebuild it with the previous conditions for that group\n            group.rebuild(loadedGroup);\n            this.s.criteria[idx].criteria = group;\n            this.s.topGroup.trigger('dtsb-redrawContents');\n            this._setGroupListeners(group);\n        };\n        /**\n         * Rebuilds a criteria of this group that previously existed\n         *\n         * @param loadedCriteria The details of a criteria within the group\n         */\n        Group.prototype._addPrevCriteria = function (loadedCriteria) {\n            var idx = this.s.criteria.length;\n            var criteria = new Criteria(this.s.dt, this.s.opts, this.s.topGroup, idx, this.s.depth, this.s.serverData);\n            criteria.populate();\n            // Add the new criteria to the criteria array\n            this.s.criteria.push({\n                criteria: criteria,\n                index: idx\n            });\n            // Rebuild it with the previous conditions for that criteria\n            criteria.s.preventRedraw = this.s.preventRedraw;\n            criteria.rebuild(loadedCriteria);\n            criteria.s.preventRedraw = false;\n            this.s.criteria[idx].criteria = criteria;\n            if (!this.s.preventRedraw) {\n                this.s.topGroup.trigger('dtsb-redrawContents');\n            }\n        };\n        /**\n         * Checks And the criteria using AND logic\n         *\n         * @param rowData The row data to be checked against the search criteria\n         * @returns boolean The result of the AND search\n         */\n        Group.prototype._andSearch = function (rowData, rowIdx) {\n            // If there are no criteria then return true for this group\n            if (this.s.criteria.length === 0) {\n                return true;\n            }\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                // If the criteria is not complete then skip it\n                if (crit.criteria instanceof Criteria && !crit.criteria.s.filled) {\n                    continue;\n                }\n                // Otherwise if a single one fails return false\n                else if (!crit.criteria.search(rowData, rowIdx)) {\n                    return false;\n                }\n            }\n            // If we get to here then everything has passed, so return true for the group\n            return true;\n        };\n        /**\n         * Checks And the criteria using OR logic\n         *\n         * @param rowData The row data to be checked against the search criteria\n         * @returns boolean The result of the OR search\n         */\n        Group.prototype._orSearch = function (rowData, rowIdx) {\n            // If there are no criteria in the group then return true\n            if (this.s.criteria.length === 0) {\n                return true;\n            }\n            // This will check to make sure that at least one criteria in the group is complete\n            var filledfound = false;\n            for (var _i = 0, _a = this.s.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                if (crit.criteria instanceof Criteria && crit.criteria.s.filled) {\n                    // A completed criteria has been found so set the flag\n                    filledfound = true;\n                    // If the search passes then return true\n                    if (crit.criteria.search(rowData, rowIdx)) {\n                        return true;\n                    }\n                }\n                else if (crit.criteria instanceof Group && crit.criteria.checkFilled()) {\n                    filledfound = true;\n                    if (crit.criteria.search(rowData, rowIdx)) {\n                        return true;\n                    }\n                }\n            }\n            // If we get here we need to return the inverse of filledfound,\n            //  as if any have been found and we are here then none have passed\n            return !filledfound;\n        };\n        /**\n         * Removes a criteria from the group\n         *\n         * @param criteria The criteria instance to be removed\n         */\n        Group.prototype._removeCriteria = function (criteria, group) {\n            if (group === void 0) { group = false; }\n            // If removing a criteria and there is only then then just destroy the group\n            if (this.s.criteria.length <= 1 && this.s.isChild) {\n                this.destroy();\n            }\n            else {\n                // Otherwise splice the given criteria out and redo the indexes\n                var last = void 0;\n                for (var i = 0; i < this.s.criteria.length; i++) {\n                    if (this.s.criteria[i].index === criteria.s.index &&\n                        (!group || this.s.criteria[i].criteria instanceof Group)) {\n                        last = i;\n                    }\n                }\n                // We want to remove the last element with the desired index, as its replacement will be inserted before it\n                if (last !== undefined) {\n                    this.s.criteria.splice(last, 1);\n                }\n                for (var i = 0; i < this.s.criteria.length; i++) {\n                    this.s.criteria[i].index = i;\n                    this.s.criteria[i].criteria.s.index = i;\n                }\n            }\n        };\n        /**\n         * Sets the listeners in group for a criteria\n         *\n         * @param criteria The criteria for the listeners to be set on\n         */\n        Group.prototype._setCriteriaListeners = function (criteria) {\n            var _this = this;\n            criteria.dom[\"delete\"]\n                .unbind('click')\n                .on('click.dtsb', function () {\n                _this._removeCriteria(criteria);\n                criteria.dom.container.remove();\n                for (var _i = 0, _a = _this.s.criteria; _i < _a.length; _i++) {\n                    var crit = _a[_i];\n                    if (crit.criteria instanceof Criteria) {\n                        crit.criteria.updateArrows(_this.s.criteria.length > 1);\n                    }\n                }\n                criteria.destroy();\n                _this.s.dt.draw();\n                _this.s.topGroup.trigger('dtsb-redrawContents');\n                return false;\n            });\n            criteria.dom.right\n                .unbind('click')\n                .on('click.dtsb', function () {\n                var idx = criteria.s.index;\n                var group = new Group(_this.s.dt, _this.s.opts, _this.s.topGroup, criteria.s.index, true, _this.s.depth + 1, _this.s.serverData);\n                // Add the criteria that is to be moved to the new group\n                group.addCriteria(criteria);\n                // Update the details in the current groups criteria array\n                _this.s.criteria[idx].criteria = group;\n                _this.s.criteria[idx].logic = 'AND';\n                _this.s.topGroup.trigger('dtsb-redrawContents');\n                _this._setGroupListeners(group);\n                return false;\n            });\n            criteria.dom.left\n                .unbind('click')\n                .on('click.dtsb', function () {\n                _this.s.toDrop = new Criteria(_this.s.dt, _this.s.opts, _this.s.topGroup, criteria.s.index, undefined, _this.s.serverData);\n                _this.s.toDrop.s = criteria.s;\n                _this.s.toDrop.c = criteria.c;\n                _this.s.toDrop.classes = criteria.classes;\n                _this.s.toDrop.populate();\n                // The dropCriteria event mutates the reference to the index so need to store it\n                var index = _this.s.toDrop.s.index;\n                _this.dom.container.trigger('dtsb-dropCriteria');\n                criteria.s.index = index;\n                _this._removeCriteria(criteria);\n                // By tracking the top level group we can directly trigger a redraw on it,\n                //  bubbling is also possible, but that is slow with deep levelled groups\n                _this.s.topGroup.trigger('dtsb-redrawContents');\n                _this.s.dt.draw();\n                return false;\n            });\n        };\n        /**\n         * Set's the listeners for the group clear button\n         */\n        Group.prototype._setClearListener = function () {\n            var _this = this;\n            this.dom.clear\n                .unbind('click')\n                .on('click.dtsb', function () {\n                if (!_this.s.isChild) {\n                    _this.dom.container.trigger('dtsb-clearContents');\n                    return false;\n                }\n                _this.destroy();\n                _this.s.topGroup.trigger('dtsb-redrawContents');\n                return false;\n            });\n        };\n        /**\n         * Sets listeners for sub groups of this group\n         *\n         * @param group The sub group that the listeners are to be set on\n         */\n        Group.prototype._setGroupListeners = function (group) {\n            var _this = this;\n            // Set listeners for the new group\n            group.dom.add\n                .unbind('click')\n                .on('click.dtsb', function () {\n                _this.setupLogic();\n                _this.dom.container.trigger('dtsb-add');\n                return false;\n            });\n            group.dom.container\n                .unbind('dtsb-add')\n                .on('dtsb-add.dtsb', function () {\n                _this.setupLogic();\n                _this.dom.container.trigger('dtsb-add');\n                return false;\n            });\n            group.dom.container\n                .unbind('dtsb-destroy')\n                .on('dtsb-destroy.dtsb', function () {\n                _this._removeCriteria(group, true);\n                group.dom.container.remove();\n                _this.setupLogic();\n                return false;\n            });\n            group.dom.container\n                .unbind('dtsb-dropCriteria')\n                .on('dtsb-dropCriteria.dtsb', function () {\n                var toDrop = group.s.toDrop;\n                toDrop.s.index = group.s.index;\n                toDrop.updateArrows(_this.s.criteria.length > 1);\n                _this.addCriteria(toDrop);\n                return false;\n            });\n            group.setListeners();\n        };\n        /**\n         * Sets up the Group instance, setting listeners and appending elements\n         */\n        Group.prototype._setup = function () {\n            this.setListeners();\n            this.dom.add.html(this.s.dt.i18n('searchBuilder.add', this.c.i18n.add));\n            this.dom.search.html(this.s.dt.i18n('searchBuilder.search', this.c.i18n.search));\n            this.dom.logic.children().first().html(this.c.logic === 'OR'\n                ? this.s.dt.i18n('searchBuilder.logicOr', this.c.i18n.logicOr)\n                : this.s.dt.i18n('searchBuilder.logicAnd', this.c.i18n.logicAnd));\n            this.s.logic = this.c.logic === 'OR' ? 'OR' : 'AND';\n            if (this.c.greyscale) {\n                this.dom.logic.addClass(this.classes.greyscale);\n            }\n            this.dom.logicContainer.append(this.dom.logic).append(this.dom.clear);\n            // Only append the logic button immediately if this is a sub group,\n            //  otherwise it will be prepended later when adding a criteria\n            if (this.s.isChild) {\n                this.dom.container.append(this.dom.logicContainer);\n            }\n            this.dom.container\n                .append(this.dom.add)\n                .append(this.dom.search);\n        };\n        /**\n         * Sets the listener for the logic button\n         */\n        Group.prototype._setLogicListener = function () {\n            var _this = this;\n            this.dom.logic\n                .unbind('click')\n                .on('click.dtsb', function () {\n                _this._toggleLogic();\n                _this.s.dt.draw();\n                for (var _i = 0, _a = _this.s.criteria; _i < _a.length; _i++) {\n                    var crit = _a[_i];\n                    crit.criteria.setListeners();\n                }\n            });\n        };\n        /**\n         * Toggles the logic for the group\n         */\n        Group.prototype._toggleLogic = function () {\n            if (this.s.logic === 'OR') {\n                this.s.logic = 'AND';\n                this.dom.logic.children().first().html(this.s.dt.i18n('searchBuilder.logicAnd', this.c.i18n.logicAnd));\n            }\n            else if (this.s.logic === 'AND') {\n                this.s.logic = 'OR';\n                this.dom.logic.children().first().html(this.s.dt.i18n('searchBuilder.logicOr', this.c.i18n.logicOr));\n            }\n        };\n        Group.version = '1.1.0';\n        Group.classes = {\n            add: 'dtsb-add',\n            button: 'dtsb-button',\n            clearGroup: 'dtsb-clearGroup',\n            greyscale: 'dtsb-greyscale',\n            group: 'dtsb-group',\n            inputButton: 'dtsb-iptbtn',\n            logic: 'dtsb-logic',\n            logicContainer: 'dtsb-logicContainer',\n            search: 'dtsb-search'\n        };\n        Group.defaults = {\n            columns: true,\n            conditions: {\n                'date': Criteria.dateConditions,\n                'html': Criteria.stringConditions,\n                'html-num': Criteria.numConditions,\n                'html-num-fmt': Criteria.numFmtConditions,\n                'luxon': Criteria.luxonDateConditions,\n                'moment': Criteria.momentDateConditions,\n                'num': Criteria.numConditions,\n                'num-fmt': Criteria.numFmtConditions,\n                'string': Criteria.stringConditions\n            },\n            depthLimit: false,\n            enterSearch: false,\n            filterChanged: undefined,\n            greyscale: false,\n            liveSearch: true,\n            i18n: {\n                add: 'Add Condition',\n                button: {\n                    0: 'Search Builder',\n                    _: 'Search Builder (%d)'\n                },\n                clearAll: 'Clear All',\n                condition: 'Condition',\n                data: 'Data',\n                \"delete\": '&times',\n                deleteTitle: 'Delete filtering rule',\n                left: '<',\n                leftTitle: 'Outdent criteria',\n                logicAnd: 'And',\n                logicOr: 'Or',\n                right: '>',\n                rightTitle: 'Indent criteria',\n                search: 'Search',\n                title: {\n                    0: 'Custom Search Builder',\n                    _: 'Custom Search Builder (%d)'\n                },\n                value: 'Value',\n                valueJoiner: 'and'\n            },\n            logic: 'AND',\n            orthogonal: {\n                display: 'display',\n                search: 'filter'\n            },\n            preDefined: false\n        };\n        return Group;\n    }());\n\n    var $$1;\n    var dataTable$1;\n    /**\n     * Sets the value of jQuery for use in the file\n     *\n     * @param jq the instance of jQuery to be set\n     */\n    function setJQuery(jq) {\n        $$1 = jq;\n        dataTable$1 = jq.fn.DataTable;\n    }\n    /**\n     * SearchBuilder class for DataTables.\n     * Allows for complex search queries to be constructed and implemented on a DataTable\n     */\n    var SearchBuilder = /** @class */ (function () {\n        function SearchBuilder(builderSettings, opts) {\n            var _this = this;\n            // Check that the required version of DataTables is included\n            if (!dataTable$1 || !dataTable$1.versionCheck || !dataTable$1.versionCheck('1.10.0')) {\n                throw new Error('SearchBuilder requires DataTables 1.10 or newer');\n            }\n            var table = new dataTable$1.Api(builderSettings);\n            this.classes = $$1.extend(true, {}, SearchBuilder.classes);\n            // Get options from user\n            this.c = $$1.extend(true, {}, SearchBuilder.defaults, opts);\n            this.dom = {\n                clearAll: $$1('<button type=\"button\">' + table.i18n('searchBuilder.clearAll', this.c.i18n.clearAll) + '</button>')\n                    .addClass(this.classes.clearAll)\n                    .addClass(this.classes.button)\n                    .attr('type', 'button'),\n                container: $$1('<div/>')\n                    .addClass(this.classes.container),\n                title: $$1('<div/>')\n                    .addClass(this.classes.title),\n                titleRow: $$1('<div/>')\n                    .addClass(this.classes.titleRow),\n                topGroup: undefined\n            };\n            this.s = {\n                dt: table,\n                opts: opts,\n                search: undefined,\n                serverData: undefined,\n                topGroup: undefined\n            };\n            // If searchbuilder is already defined for this table then return\n            if (table.settings()[0]._searchBuilder !== undefined) {\n                return;\n            }\n            table.settings()[0]._searchBuilder = this;\n            // If using SSP we want to include the previous state in the very first server call\n            if (this.s.dt.page.info().serverSide) {\n                this.s.dt.on('preXhr.dtsb', function (e, settings, data) {\n                    var loadedState = _this.s.dt.state.loaded();\n                    if (loadedState && loadedState.searchBuilder) {\n                        data.searchBuilder = _this._collapseArray(loadedState.searchBuilder);\n                    }\n                });\n                this.s.dt.on('xhr.dtsb', function (e, settings, json) {\n                    if (json && json.searchBuilder && json.searchBuilder.options) {\n                        _this.s.serverData = json.searchBuilder.options;\n                    }\n                });\n            }\n            // Run the remaining setup when the table is initialised\n            if (this.s.dt.settings()[0]._bInitComplete) {\n                this._setUp();\n            }\n            else {\n                table.one('init.dt', function () {\n                    _this._setUp();\n                });\n            }\n            return this;\n        }\n        /**\n         * Gets the details required to rebuild the SearchBuilder as it currently is\n         */\n        // eslint upset at empty object but that is what it is\n        // eslint-disable-next-line @typescript-eslint/ban-types\n        SearchBuilder.prototype.getDetails = function (deFormatDates) {\n            if (deFormatDates === void 0) { deFormatDates = false; }\n            return this.s.topGroup.getDetails(deFormatDates);\n        };\n        /**\n         * Getter for the node of the container for the searchBuilder\n         *\n         * @returns JQuery<HTMLElement> the node of the container\n         */\n        SearchBuilder.prototype.getNode = function () {\n            return this.dom.container;\n        };\n        /**\n         * Rebuilds the SearchBuilder to a state that is provided\n         *\n         * @param details The details required to perform a rebuild\n         */\n        SearchBuilder.prototype.rebuild = function (details) {\n            this.dom.clearAll.click();\n            // If there are no details to rebuild then return\n            if (details === undefined || details === null) {\n                return this;\n            }\n            this.s.topGroup.s.preventRedraw = true;\n            this.s.topGroup.rebuild(details);\n            this.s.topGroup.s.preventRedraw = false;\n            this._checkClear();\n            this._updateTitle(this.s.topGroup.count());\n            this.s.topGroup.redrawContents();\n            this.s.dt.draw(false);\n            this.s.topGroup.setListeners();\n            return this;\n        };\n        /**\n         * Applies the defaults to preDefined criteria\n         *\n         * @param preDef the array of criteria to be processed.\n         */\n        SearchBuilder.prototype._applyPreDefDefaults = function (preDef) {\n            var _this = this;\n            if (preDef.criteria !== undefined && preDef.logic === undefined) {\n                preDef.logic = 'AND';\n            }\n            var _loop_1 = function (crit) {\n                // Apply the defaults to any further criteria\n                if (crit.criteria !== undefined) {\n                    crit = this_1._applyPreDefDefaults(crit);\n                }\n                else {\n                    this_1.s.dt.columns().every(function (index) {\n                        if (_this.s.dt.settings()[0].aoColumns[index].sTitle === crit.data) {\n                            crit.dataIdx = index;\n                        }\n                    });\n                }\n            };\n            var this_1 = this;\n            for (var _i = 0, _a = preDef.criteria; _i < _a.length; _i++) {\n                var crit = _a[_i];\n                _loop_1(crit);\n            }\n            return preDef;\n        };\n        /**\n         * Set's up the SearchBuilder\n         */\n        SearchBuilder.prototype._setUp = function (loadState) {\n            var _this = this;\n            if (loadState === void 0) { loadState = true; }\n            // Register an Api method for getting the column type\n            $$1.fn.DataTable.Api.registerPlural('columns().type()', 'column().type()', function () {\n                return this.iterator('column', function (settings, column) {\n                    return settings.aoColumns[column].sType;\n                }, 1);\n            });\n            // Check that DateTime is included, If not need to check if it could be used\n            // eslint-disable-next-line no-extra-parens\n            if (!dataTable$1.DateTime) {\n                var types = this.s.dt.columns().type().toArray();\n                if (types === undefined || types.includes(undefined) || types.includes(null)) {\n                    types = [];\n                    for (var _i = 0, _a = this.s.dt.settings()[0].aoColumns; _i < _a.length; _i++) {\n                        var colInit = _a[_i];\n                        types.push(colInit.searchBuilderType !== undefined ? colInit.searchBuilderType : colInit.sType);\n                    }\n                }\n                var columnIdxs = this.s.dt.columns().toArray();\n                // If the types are not yet set then draw to see if they can be retrieved then\n                if (types === undefined || types.includes(undefined) || types.includes(null)) {\n                    $$1.fn.dataTable.ext.oApi._fnColumnTypes(this.s.dt.settings()[0]);\n                    types = this.s.dt.columns().type().toArray();\n                }\n                for (var i = 0; i < columnIdxs[0].length; i++) {\n                    var column = columnIdxs[0][i];\n                    var type = types[column];\n                    if (\n                    // Check if this column can be filtered\n                    (this.c.columns === true ||\n                        Array.isArray(this.c.columns) &&\n                            this.c.columns.includes(i)) &&\n                        // Check if the type is one of the restricted types\n                        (type.includes('date') ||\n                            type.includes('moment') ||\n                            type.includes('luxon'))) {\n                        alert('SearchBuilder Requires DateTime when used with dates.');\n                        throw new Error('SearchBuilder requires DateTime');\n                    }\n                }\n            }\n            this.s.topGroup = new Group(this.s.dt, this.c, undefined, undefined, undefined, undefined, this.s.serverData);\n            this._setClearListener();\n            this.s.dt.on('stateSaveParams.dtsb', function (e, settings, data) {\n                data.searchBuilder = _this.getDetails();\n                if (!data.scroller) {\n                    data.page = _this.s.dt.page();\n                }\n                else {\n                    data.start = _this.s.dt.state().start;\n                }\n            });\n            this.s.dt.on('stateLoadParams.dtsb', function (e, settings, data) {\n                _this.rebuild(data.searchBuilder);\n            });\n            this._build();\n            this.s.dt.on('preXhr.dtsb', function (e, settings, data) {\n                if (_this.s.dt.page.info().serverSide) {\n                    data.searchBuilder = _this._collapseArray(_this.getDetails(true));\n                }\n            });\n            this.s.dt.on('column-reorder', function () {\n                _this.rebuild(_this.getDetails());\n            });\n            if (loadState) {\n                var loadedState = this.s.dt.state.loaded();\n                // If the loaded State is not null rebuild based on it for statesave\n                if (loadedState !== null && loadedState.searchBuilder !== undefined) {\n                    this.s.topGroup.rebuild(loadedState.searchBuilder);\n                    this.s.topGroup.dom.container.trigger('dtsb-redrawContents');\n                    // If using SSP we want to restrict the amount of server calls that take place\n                    //  and this information will already have been processed\n                    if (!this.s.dt.page.info().serverSide) {\n                        if (loadedState.page) {\n                            this.s.dt.page(loadedState.page).draw('page');\n                        }\n                        else if (this.s.dt.scroller && loadedState.scroller) {\n                            this.s.dt.scroller().scrollToRow(loadedState.scroller.topRow);\n                        }\n                    }\n                    this.s.topGroup.setListeners();\n                }\n                // Otherwise load any predefined options\n                else if (this.c.preDefined !== false) {\n                    this.c.preDefined = this._applyPreDefDefaults(this.c.preDefined);\n                    this.rebuild(this.c.preDefined);\n                }\n            }\n            this._setEmptyListener();\n            this.s.dt.state.save();\n        };\n        SearchBuilder.prototype._collapseArray = function (criteria) {\n            if (criteria.logic === undefined) {\n                if (criteria.value !== undefined) {\n                    criteria.value.sort(function (a, b) {\n                        if (!isNaN(+a)) {\n                            a = +a;\n                            b = +b;\n                        }\n                        if (a < b) {\n                            return -1;\n                        }\n                        else if (b < a) {\n                            return 1;\n                        }\n                        else {\n                            return 0;\n                        }\n                    });\n                    criteria.value1 = criteria.value[0];\n                    criteria.value2 = criteria.value[1];\n                }\n            }\n            else {\n                for (var i = 0; i < criteria.criteria.length; i++) {\n                    criteria.criteria[i] = this._collapseArray(criteria.criteria[i]);\n                }\n            }\n            return criteria;\n        };\n        /**\n         * Updates the title of the SearchBuilder\n         *\n         * @param count the number of filters in the SearchBuilder\n         */\n        SearchBuilder.prototype._updateTitle = function (count) {\n            this.dom.title.html(this.s.dt.i18n('searchBuilder.title', this.c.i18n.title, count));\n        };\n        /**\n         * Builds all of the dom elements together\n         */\n        SearchBuilder.prototype._build = function () {\n            var _this = this;\n            // Empty and setup the container\n            this.dom.clearAll.remove();\n            this.dom.container.empty();\n            var count = this.s.topGroup.count();\n            this._updateTitle(count);\n            this.dom.titleRow.append(this.dom.title);\n            this.dom.container.append(this.dom.titleRow);\n            this.dom.topGroup = this.s.topGroup.getNode();\n            this.dom.container.append(this.dom.topGroup);\n            this._setRedrawListener();\n            var tableNode = this.s.dt.table(0).node();\n            if (!$$1.fn.dataTable.ext.search.includes(this.s.search)) {\n                // Custom search function for SearchBuilder\n                this.s.search = function (settings, searchData, dataIndex) {\n                    if (settings.nTable !== tableNode) {\n                        return true;\n                    }\n                    return _this.s.topGroup.search(searchData, dataIndex);\n                };\n                // Add SearchBuilder search function to the dataTables search array\n                $$1.fn.dataTable.ext.search.push(this.s.search);\n            }\n            this.s.dt.on('destroy.dtsb', function () {\n                _this.dom.container.remove();\n                _this.dom.clearAll.remove();\n                var searchIdx = $$1.fn.dataTable.ext.search.indexOf(_this.s.search);\n                while (searchIdx !== -1) {\n                    $$1.fn.dataTable.ext.search.splice(searchIdx, 1);\n                    searchIdx = $$1.fn.dataTable.ext.search.indexOf(_this.s.search);\n                }\n                _this.s.dt.off('.dtsb');\n                $$1(_this.s.dt.table().node()).off('.dtsb');\n            });\n        };\n        /**\n         * Checks if the clearAll button should be added or not\n         */\n        SearchBuilder.prototype._checkClear = function () {\n            if (this.s.topGroup.s.criteria.length > 0) {\n                this.dom.clearAll.insertAfter(this.dom.title);\n                this._setClearListener();\n            }\n            else {\n                this.dom.clearAll.remove();\n            }\n        };\n        /**\n         * Update the count in the title/button\n         *\n         * @param count Number of filters applied\n         */\n        SearchBuilder.prototype._filterChanged = function (count) {\n            var fn = this.c.filterChanged;\n            if (typeof fn === 'function') {\n                fn(count, this.s.dt.i18n('searchBuilder.button', this.c.i18n.button, count));\n            }\n        };\n        /**\n         * Set the listener for the clear button\n         */\n        SearchBuilder.prototype._setClearListener = function () {\n            var _this = this;\n            this.dom.clearAll.unbind('click');\n            this.dom.clearAll.on('click.dtsb', function () {\n                _this.s.topGroup = new Group(_this.s.dt, _this.c, undefined, undefined, undefined, undefined, _this.s.serverData);\n                _this._build();\n                _this.s.dt.draw();\n                _this.s.topGroup.setListeners();\n                _this.dom.clearAll.remove();\n                _this._setEmptyListener();\n                _this._filterChanged(0);\n                return false;\n            });\n        };\n        /**\n         * Set the listener for the Redraw event\n         */\n        SearchBuilder.prototype._setRedrawListener = function () {\n            var _this = this;\n            this.s.topGroup.dom.container.unbind('dtsb-redrawContents');\n            this.s.topGroup.dom.container.on('dtsb-redrawContents.dtsb', function () {\n                _this._checkClear();\n                _this.s.topGroup.redrawContents();\n                _this.s.topGroup.setupLogic();\n                _this._setEmptyListener();\n                var count = _this.s.topGroup.count();\n                _this._updateTitle(count);\n                _this._filterChanged(count);\n                // If using SSP we want to restrict the amount of server calls that take place\n                //  and this information will already have been processed\n                if (!_this.s.dt.page.info().serverSide) {\n                    _this.s.dt.draw();\n                }\n                _this.s.dt.state.save();\n            });\n            this.s.topGroup.dom.container.unbind('dtsb-redrawContents-noDraw');\n            this.s.topGroup.dom.container.on('dtsb-redrawContents-noDraw.dtsb', function () {\n                _this._checkClear();\n                _this.s.topGroup.s.preventRedraw = true;\n                _this.s.topGroup.redrawContents();\n                _this.s.topGroup.s.preventRedraw = false;\n                _this.s.topGroup.setupLogic();\n                _this._setEmptyListener();\n                var count = _this.s.topGroup.count();\n                _this._updateTitle(count);\n                _this._filterChanged(count);\n            });\n            this.s.topGroup.dom.container.unbind('dtsb-redrawLogic');\n            this.s.topGroup.dom.container.on('dtsb-redrawLogic.dtsb', function () {\n                _this.s.topGroup.redrawLogic();\n                var count = _this.s.topGroup.count();\n                _this._updateTitle(count);\n                _this._filterChanged(count);\n            });\n            this.s.topGroup.dom.container.unbind('dtsb-add');\n            this.s.topGroup.dom.container.on('dtsb-add.dtsb', function () {\n                var count = _this.s.topGroup.count();\n                _this._updateTitle(count);\n                _this._filterChanged(count);\n                _this._checkClear();\n            });\n            this.s.dt.on('postEdit.dtsb postCreate.dtsb postRemove.dtsb', function () {\n                _this.s.topGroup.redrawContents();\n            });\n            this.s.topGroup.dom.container.unbind('dtsb-clearContents');\n            this.s.topGroup.dom.container.on('dtsb-clearContents.dtsb', function () {\n                _this._setUp(false);\n                _this._filterChanged(0);\n                _this.s.dt.draw();\n            });\n        };\n        /**\n         * Sets listeners to check whether clearAll should be added or removed\n         */\n        SearchBuilder.prototype._setEmptyListener = function () {\n            var _this = this;\n            this.s.topGroup.dom.add.on('click.dtsb', function () {\n                _this._checkClear();\n            });\n            this.s.topGroup.dom.container.on('dtsb-destroy.dtsb', function () {\n                _this.dom.clearAll.remove();\n            });\n        };\n        SearchBuilder.version = '1.6.0';\n        SearchBuilder.classes = {\n            button: 'dtsb-button',\n            clearAll: 'dtsb-clearAll',\n            container: 'dtsb-searchBuilder',\n            inputButton: 'dtsb-iptbtn',\n            title: 'dtsb-title',\n            titleRow: 'dtsb-titleRow'\n        };\n        SearchBuilder.defaults = {\n            columns: true,\n            conditions: {\n                'date': Criteria.dateConditions,\n                'html': Criteria.stringConditions,\n                'html-num': Criteria.numConditions,\n                'html-num-fmt': Criteria.numFmtConditions,\n                'luxon': Criteria.luxonDateConditions,\n                'moment': Criteria.momentDateConditions,\n                'num': Criteria.numConditions,\n                'num-fmt': Criteria.numFmtConditions,\n                'string': Criteria.stringConditions\n            },\n            depthLimit: false,\n            enterSearch: false,\n            filterChanged: undefined,\n            greyscale: false,\n            liveSearch: true,\n            i18n: {\n                add: 'Add Condition',\n                button: {\n                    0: 'Search Builder',\n                    _: 'Search Builder (%d)'\n                },\n                clearAll: 'Clear All',\n                condition: 'Condition',\n                conditions: {\n                    array: {\n                        contains: 'Contains',\n                        empty: 'Empty',\n                        equals: 'Equals',\n                        not: 'Not',\n                        notEmpty: 'Not Empty',\n                        without: 'Without'\n                    },\n                    date: {\n                        after: 'After',\n                        before: 'Before',\n                        between: 'Between',\n                        empty: 'Empty',\n                        equals: 'Equals',\n                        not: 'Not',\n                        notBetween: 'Not Between',\n                        notEmpty: 'Not Empty'\n                    },\n                    // eslint-disable-next-line id-blacklist\n                    number: {\n                        between: 'Between',\n                        empty: 'Empty',\n                        equals: 'Equals',\n                        gt: 'Greater Than',\n                        gte: 'Greater Than Equal To',\n                        lt: 'Less Than',\n                        lte: 'Less Than Equal To',\n                        not: 'Not',\n                        notBetween: 'Not Between',\n                        notEmpty: 'Not Empty'\n                    },\n                    // eslint-disable-next-line id-blacklist\n                    string: {\n                        contains: 'Contains',\n                        empty: 'Empty',\n                        endsWith: 'Ends With',\n                        equals: 'Equals',\n                        not: 'Not',\n                        notContains: 'Does Not Contain',\n                        notEmpty: 'Not Empty',\n                        notEndsWith: 'Does Not End With',\n                        notStartsWith: 'Does Not Start With',\n                        startsWith: 'Starts With'\n                    }\n                },\n                data: 'Data',\n                \"delete\": '&times',\n                deleteTitle: 'Delete filtering rule',\n                left: '<',\n                leftTitle: 'Outdent criteria',\n                logicAnd: 'And',\n                logicOr: 'Or',\n                right: '>',\n                rightTitle: 'Indent criteria',\n                search: 'Search',\n                title: {\n                    0: 'Custom Search Builder',\n                    _: 'Custom Search Builder (%d)'\n                },\n                value: 'Value',\n                valueJoiner: 'and'\n            },\n            logic: 'AND',\n            orthogonal: {\n                display: 'display',\n                search: 'filter'\n            },\n            preDefined: false\n        };\n        return SearchBuilder;\n    }());\n\n    /*! SearchBuilder 1.6.0\n     * ©SpryMedia Ltd - datatables.net/license/mit\n     */\n    setJQuery($);\n    setJQuery$1($);\n    setJQuery$2($);\n    var dataTable = $.fn.dataTable;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchBuilder = SearchBuilder;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchBuilder = SearchBuilder;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.Group = Group;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.Group = Group;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.Criteria = Criteria;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.Criteria = Criteria;\n    // eslint-disable-next-line no-extra-parens\n    var apiRegister = DataTable.Api.register;\n    // Set up object for plugins\n    DataTable.ext.searchBuilder = {\n        conditions: {}\n    };\n    DataTable.ext.buttons.searchBuilder = {\n        action: function (e, dt, node, config) {\n            this.popover(config._searchBuilder.getNode(), {\n                align: 'container',\n                span: 'container'\n            });\n            var topGroup = config._searchBuilder.s.topGroup;\n            // Need to redraw the contents to calculate the correct positions for the elements\n            if (topGroup !== undefined) {\n                topGroup.dom.container.trigger('dtsb-redrawContents-noDraw');\n            }\n            if (topGroup.s.criteria.length === 0) {\n                $('.' + $.fn.dataTable.Group.classes.add.replace(/ /g, '.')).click();\n            }\n        },\n        config: {},\n        init: function (dt, node, config) {\n            var sb = new DataTable.SearchBuilder(dt, $.extend({\n                filterChanged: function (count, text) {\n                    dt.button(node).text(text);\n                }\n            }, config.config));\n            dt.button(node).text(config.text || dt.i18n('searchBuilder.button', sb.c.i18n.button, 0));\n            config._searchBuilder = sb;\n        },\n        text: null\n    };\n    apiRegister('searchBuilder.getDetails()', function (deFormatDates) {\n        if (deFormatDates === void 0) { deFormatDates = false; }\n        var ctx = this.context[0];\n        // If SearchBuilder has not been initialised on this instance then return\n        return ctx._searchBuilder ?\n            ctx._searchBuilder.getDetails(deFormatDates) :\n            null;\n    });\n    apiRegister('searchBuilder.rebuild()', function (details) {\n        var ctx = this.context[0];\n        // If SearchBuilder has not been initialised on this instance then return\n        if (ctx._searchBuilder === undefined) {\n            return null;\n        }\n        ctx._searchBuilder.rebuild(details);\n        return this;\n    });\n    apiRegister('searchBuilder.container()', function () {\n        var ctx = this.context[0];\n        // If SearchBuilder has not been initialised on this instance then return\n        return ctx._searchBuilder ?\n            ctx._searchBuilder.getNode() :\n            null;\n    });\n    /**\n     * Init function for SearchBuilder\n     *\n     * @param settings the settings to be applied\n     * @param options the options for SearchBuilder\n     * @returns JQUERY<HTMLElement> Returns the node of the SearchBuilder\n     */\n    function _init(settings, options) {\n        var api = new DataTable.Api(settings);\n        var opts = options\n            ? options\n            : api.init().searchBuilder || DataTable.defaults.searchBuilder;\n        var searchBuilder = new SearchBuilder(api, opts);\n        var node = searchBuilder.getNode();\n        return node;\n    }\n    // Attach a listener to the document which listens for DataTables initialisation\n    // events so we can automatically initialise\n    $(document).on('preInit.dt.dtsp', function (e, settings) {\n        if (e.namespace !== 'dt') {\n            return;\n        }\n        if (settings.oInit.searchBuilder ||\n            DataTable.defaults.searchBuilder) {\n            if (!settings._searchBuilder) {\n                _init(settings);\n            }\n        }\n    });\n    // DataTables `dom` feature option\n    DataTable.ext.feature.push({\n        cFeature: 'Q',\n        fnInit: _init\n    });\n    // DataTables 2 layout feature\n    if (DataTable.ext.features) {\n        DataTable.ext.features.register('searchBuilder', _init);\n    }\n\n})();\n\n\nreturn DataTable;\n}));\n\n\n/*! Bootstrap 5 ui integration for DataTables' SearchBuilder\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-searchbuilder'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchBuilder ) {\n\t\t\t\trequire('datatables.net-searchbuilder')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchBuilder.classes, {\n    clearAll: 'btn btn-secondary dtsb-clearAll'\n});\n$.extend(true, DataTable.Group.classes, {\n    add: 'btn btn-secondary dtsb-add',\n    clearGroup: 'btn btn-secondary dtsb-clearGroup',\n    logic: 'btn btn-secondary dtsb-logic'\n});\n$.extend(true, DataTable.Criteria.classes, {\n    condition: 'form-select dtsb-condition',\n    data: 'dtsb-data form-select',\n    \"delete\": 'btn btn-secondary dtsb-delete',\n    input: 'form-control dtsb-input',\n    left: 'btn btn-secondary dtsb-left',\n    right: 'btn btn-secondary dtsb-right',\n    select: 'form-select',\n    value: 'dtsb-value'\n});\n\n\nreturn DataTable;\n}));\n\n\n/*! SearchPanes 2.2.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n(function () {\n    'use strict';\n\n    var $$5;\n    var dataTable$2;\n    function setJQuery$4(jq) {\n        $$5 = jq;\n        dataTable$2 = jq.fn.dataTable;\n    }\n    var SearchPane = /** @class */ (function () {\n        /**\n         * Creates the panes, sets up the search function\n         *\n         * @param paneSettings The settings for the searchPanes\n         * @param opts The options for the default features\n         * @param index the index of the column for this pane\n         * @param panesContainer The overall container for SearchPanes that this pane will be attached to\n         * @param panes The custom pane settings if this is a custom pane\n         * @returns {object} the pane that has been created, including the table and the index of the pane\n         */\n        function SearchPane(paneSettings, opts, index, panesContainer, panes) {\n            var _this = this;\n            if (panes === void 0) { panes = null; }\n            // Check that the required version of DataTables is included\n            if (!dataTable$2 || !dataTable$2.versionCheck || !dataTable$2.versionCheck('1.10.0')) {\n                throw new Error('SearchPane requires DataTables 1.10 or newer');\n            }\n            // Check that Select is included\n            // eslint-disable-next-line no-extra-parens\n            if (!dataTable$2.select) {\n                throw new Error('SearchPane requires Select');\n            }\n            var table = new dataTable$2.Api(paneSettings);\n            this.classes = $$5.extend(true, {}, SearchPane.classes);\n            // Get options from user\n            this.c = $$5.extend(true, {}, SearchPane.defaults, opts, panes);\n            if (opts && opts.hideCount && opts.viewCount === undefined) {\n                this.c.viewCount = !this.c.hideCount;\n            }\n            var rowLength = table.columns().eq(0).toArray().length;\n            this.s = {\n                colExists: index < rowLength,\n                colOpts: undefined,\n                customPaneSettings: panes,\n                displayed: false,\n                dt: table,\n                dtPane: undefined,\n                firstSet: true,\n                index: index,\n                indexes: [],\n                listSet: false,\n                name: undefined,\n                rowData: {\n                    arrayFilter: [],\n                    arrayOriginal: [],\n                    bins: {},\n                    binsOriginal: {},\n                    filterMap: new Map(),\n                    totalOptions: 0\n                },\n                scrollTop: 0,\n                searchFunction: undefined,\n                selections: [],\n                serverSelect: [],\n                serverSelecting: false,\n                tableLength: null,\n                updating: false\n            };\n            this.s.colOpts = this.s.colExists ? this._getOptions() : this._getBonusOptions();\n            this.dom = {\n                buttonGroup: $$5('<div/>').addClass(this.classes.buttonGroup),\n                clear: $$5('<button type=\"button\">&#215;</button>')\n                    .attr('disabled', 'true')\n                    .addClass(this.classes.disabledButton)\n                    .addClass(this.classes.paneButton)\n                    .addClass(this.classes.clearButton)\n                    .html(this.s.dt.i18n('searchPanes.clearPane', this.c.i18n.clearPane)),\n                collapseButton: $$5('<button type=\"button\"><span class=\"' + this.classes.caret + '\">&#x5e;</span></button>')\n                    .addClass(this.classes.paneButton)\n                    .addClass(this.classes.collapseButton),\n                container: $$5('<div/>')\n                    .addClass(this.classes.container)\n                    .addClass(this.s.colOpts.className)\n                    .addClass(this.classes.layout +\n                    (parseInt(this.c.layout.split('-')[1], 10) < 10 ?\n                        this.c.layout :\n                        this.c.layout.split('-')[0] + '-9'))\n                    .addClass(this.s.customPaneSettings && this.s.customPaneSettings.className\n                    ? this.s.customPaneSettings.className\n                    : ''),\n                countButton: $$5('<button type=\"button\"><span></span></button>')\n                    .addClass(this.classes.paneButton)\n                    .addClass(this.classes.countButton),\n                dtP: $$5('<table><thead><tr><th>' +\n                    (this.s.colExists\n                        ? $$5(this.s.dt.column(this.s.index).header()).text()\n                        : this.s.customPaneSettings.header || 'Custom Pane') + '</th><th/></tr></thead></table>'),\n                lower: $$5('<div/>').addClass(this.classes.subRow2).addClass(this.classes.narrowButton),\n                nameButton: $$5('<button type=\"button\"><span></span></button>')\n                    .addClass(this.classes.paneButton)\n                    .addClass(this.classes.nameButton),\n                panesContainer: $$5(panesContainer),\n                searchBox: $$5('<input/>').addClass(this.classes.paneInputButton).addClass(this.classes.search),\n                searchButton: $$5('<button type=\"button\"><span></span></button>')\n                    .addClass(this.classes.searchIcon)\n                    .addClass(this.classes.paneButton),\n                searchCont: $$5('<div/>').addClass(this.classes.searchCont),\n                searchLabelCont: $$5('<div/>').addClass(this.classes.searchLabelCont),\n                topRow: $$5('<div/>').addClass(this.classes.topRow),\n                upper: $$5('<div/>').addClass(this.classes.subRow1).addClass(this.classes.narrowSearch)\n            };\n            // Set the value of name incase ordering is desired\n            if (this.s.colOpts.name) {\n                this.s.name = this.s.colOpts.name;\n            }\n            else if (this.s.customPaneSettings && this.s.customPaneSettings.name) {\n                this.s.name = this.s.customPaneSettings.name;\n            }\n            else {\n                this.s.name = this.s.colExists ?\n                    $$5(this.s.dt.column(this.s.index).header()).text() :\n                    this.s.customPaneSettings.header || 'Custom Pane';\n            }\n            var tableNode = this.s.dt.table(0).node();\n            // Custom search function for table\n            this.s.searchFunction = function (settings, searchData, dataIndex) {\n                // If no data has been selected then show all\n                if (_this.s.selections.length === 0) {\n                    return true;\n                }\n                if (settings.nTable !== tableNode) {\n                    return true;\n                }\n                var filter = null;\n                if (_this.s.colExists) {\n                    // Get the current filtered data\n                    filter = searchData[_this.s.index];\n                    if (_this.s.colOpts.orthogonal.filter !== 'filter') {\n                        // get the filter value from the map\n                        filter = _this.s.rowData.filterMap.get(dataIndex);\n                        if (filter instanceof $$5.fn.dataTable.Api) {\n                            // eslint-disable-next-line no-extra-parens\n                            filter = filter.toArray();\n                        }\n                    }\n                }\n                return _this._search(filter, dataIndex);\n            };\n            $$5.fn.dataTable.ext.search.push(this.s.searchFunction);\n            // If the clear button for this pane is clicked clear the selections\n            if (this.c.clear) {\n                this.dom.clear.on('click.dtsp', function () {\n                    var searches = _this.dom.container.find('.' + _this.classes.search.replace(/\\s+/g, '.'));\n                    searches.each(function () {\n                        $$5(this).val('').trigger('input');\n                    });\n                    _this.clearPane();\n                });\n            }\n            // Sometimes the top row of the panes containing the search box and ordering buttons appears\n            //  weird if the width of the panes is lower than expected, this fixes the design.\n            // Equally this may occur when the table is resized.\n            this.s.dt.on('draw.dtsp', function () { return _this.adjustTopRow(); });\n            this.s.dt.on('buttons-action.dtsp', function () { return _this.adjustTopRow(); });\n            // When column-reorder is present and the columns are moved, it is necessary to\n            //  reassign all of the panes indexes to the new index of the column.\n            this.s.dt.on('column-reorder.dtsp', function (e, settings, details) {\n                _this.s.index = details.mapping[_this.s.index];\n            });\n            return this;\n        }\n        /**\n         * Adds a row to the panes table\n         *\n         * @param display the value to be displayed to the user\n         * @param filter the value to be filtered on when searchpanes is implemented\n         * @param shown the number of rows in the table that are currently visible matching this criteria\n         * @param total the total number of rows in the table that match this criteria\n         * @param sort the value to be sorted in the pane table\n         * @param type the value of which the type is to be derived from\n         */\n        SearchPane.prototype.addRow = function (display, filter, sort, type, className, total, shown) {\n            if (!total) {\n                total = this.s.rowData.bins[filter] ?\n                    this.s.rowData.bins[filter] :\n                    0;\n            }\n            if (!shown) {\n                shown = this._getShown(filter);\n            }\n            var index;\n            for (var _i = 0, _a = this.s.indexes; _i < _a.length; _i++) {\n                var entry = _a[_i];\n                if (entry.filter === filter) {\n                    index = entry.index;\n                }\n            }\n            if (index === undefined) {\n                index = this.s.indexes.length;\n                this.s.indexes.push({ filter: filter, index: index });\n            }\n            return this.s.dtPane.row.add({\n                className: className,\n                display: display !== '' ?\n                    display :\n                    this.emptyMessage(),\n                filter: filter,\n                index: index,\n                shown: shown,\n                sort: sort,\n                total: total,\n                type: type\n            });\n        };\n        /**\n         * Adjusts the layout of the top row when the screen is resized\n         */\n        SearchPane.prototype.adjustTopRow = function () {\n            var subContainers = this.dom.container.find('.' + this.classes.subRowsContainer.replace(/\\s+/g, '.'));\n            var subRow1 = this.dom.container.find('.' + this.classes.subRow1.replace(/\\s+/g, '.'));\n            var subRow2 = this.dom.container.find('.' + this.classes.subRow2.replace(/\\s+/g, '.'));\n            var topRow = this.dom.container.find('.' + this.classes.topRow.replace(/\\s+/g, '.'));\n            // If the width is 0 then it is safe to assume that the pane has not yet been displayed.\n            //  Even if it has, if the width is 0 it won't make a difference if it has the narrow class or not\n            if (($$5(subContainers[0]).width() < 252 || $$5(topRow[0]).width() < 252) && $$5(subContainers[0]).width() !== 0) {\n                $$5(subContainers[0]).addClass(this.classes.narrow);\n                $$5(subRow1[0]).addClass(this.classes.narrowSub).removeClass(this.classes.narrowSearch);\n                $$5(subRow2[0]).addClass(this.classes.narrowSub).removeClass(this.classes.narrowButton);\n            }\n            else {\n                $$5(subContainers[0]).removeClass(this.classes.narrow);\n                $$5(subRow1[0]).removeClass(this.classes.narrowSub).addClass(this.classes.narrowSearch);\n                $$5(subRow2[0]).removeClass(this.classes.narrowSub).addClass(this.classes.narrowButton);\n            }\n        };\n        /**\n         * In the case of a rebuild there is potential for new data to have been included or removed\n         * so all of the rowData must be reset as a precaution.\n         */\n        SearchPane.prototype.clearData = function () {\n            this.s.rowData = {\n                arrayFilter: [],\n                arrayOriginal: [],\n                bins: {},\n                binsOriginal: {},\n                filterMap: new Map(),\n                totalOptions: 0\n            };\n        };\n        /**\n         * Clear the selections in the pane\n         */\n        SearchPane.prototype.clearPane = function () {\n            // Deselect all rows which are selected and update the table and filter count.\n            this.s.dtPane.rows({ selected: true }).deselect();\n            this.updateTable();\n            return this;\n        };\n        /**\n         * Collapses the pane so that only the header is displayed\n         */\n        SearchPane.prototype.collapse = function () {\n            var _this = this;\n            if (!this.s.displayed ||\n                (\n                // If collapsing is disabled globally, and not enabled specifically for this column\n                !this.c.collapse && this.s.colOpts.collapse !== true ||\n                    // OR, collapsing could be enabled globally and this column specifically\n                    // is not to be collapsed.\n                    // We can't just take !this.s.colOpts.collapse here as if it is undefined\n                    // then the global should be used\n                    this.s.colOpts.collapse === false)) {\n                return;\n            }\n            $$5(this.s.dtPane.table().container()).addClass(this.classes.hidden);\n            this.dom.topRow.addClass(this.classes.bordered);\n            this.dom.nameButton.addClass(this.classes.disabledButton);\n            this.dom.countButton.addClass(this.classes.disabledButton);\n            this.dom.searchButton.addClass(this.classes.disabledButton);\n            this.dom.collapseButton.addClass(this.classes.rotated);\n            this.dom.topRow.one('click.dtsp', function () { return _this.show(); });\n            this.dom.topRow.trigger('collapse.dtsps');\n        };\n        /**\n         * Strips all of the SearchPanes elements from the document and turns all of the listeners for the buttons off\n         */\n        SearchPane.prototype.destroy = function () {\n            if (this.s.dtPane) {\n                this.s.dtPane.off('.dtsp');\n            }\n            this.s.dt.off('.dtsp');\n            this.dom.clear.off('.dtsp');\n            this.dom.nameButton.off('.dtsp');\n            this.dom.countButton.off('.dtsp');\n            this.dom.searchButton.off('.dtsp');\n            this.dom.collapseButton.off('.dtsp');\n            $$5(this.s.dt.table().node()).off('.dtsp');\n            this.dom.container.detach();\n            var searchIdx = $$5.fn.dataTable.ext.search.indexOf(this.s.searchFunction);\n            while (searchIdx !== -1) {\n                $$5.fn.dataTable.ext.search.splice(searchIdx, 1);\n                searchIdx = $$5.fn.dataTable.ext.search.indexOf(this.s.searchFunction);\n            }\n            // If the datatables have been defined for the panes then also destroy these\n            if (this.s.dtPane) {\n                this.s.dtPane.destroy();\n            }\n            this.s.listSet = false;\n        };\n        /**\n         * Getting the legacy message is a little complex due a legacy parameter\n         */\n        SearchPane.prototype.emptyMessage = function () {\n            var def = this.c.i18n.emptyMessage;\n            // Legacy parameter support\n            if (this.c.emptyMessage) {\n                def = this.c.emptyMessage;\n            }\n            // Override per column\n            if (this.s.colOpts.emptyMessage !== false && this.s.colOpts.emptyMessage !== null) {\n                def = this.s.colOpts.emptyMessage;\n            }\n            return this.s.dt.i18n('searchPanes.emptyMessage', def);\n        };\n        /**\n         * Updates the number of filters that have been applied in the title\n         */\n        SearchPane.prototype.getPaneCount = function () {\n            return this.s.dtPane ?\n                this.s.dtPane.rows({ selected: true }).data().toArray().length :\n                0;\n        };\n        /**\n         * Rebuilds the panes from the start having deleted the old ones\n         *\n         * @param? dataIn data to be used in buildPane\n         * @param? maintainSelection Whether the current selections are to be maintained over rebuild\n         */\n        SearchPane.prototype.rebuildPane = function (dataIn, maintainSelection) {\n            if (dataIn === void 0) { dataIn = null; }\n            if (maintainSelection === void 0) { maintainSelection = false; }\n            this.clearData();\n            var selectedRows = [];\n            this.s.serverSelect = [];\n            var prevEl = null;\n            // When rebuilding strip all of the HTML Elements out of the container and start from scratch\n            if (this.s.dtPane) {\n                if (maintainSelection) {\n                    if (!this.s.dt.page.info().serverSide) {\n                        selectedRows = this.s.dtPane.rows({ selected: true }).data().toArray();\n                    }\n                    else {\n                        this.s.serverSelect = this.s.dtPane.rows({ selected: true }).data().toArray();\n                    }\n                }\n                this.s.dtPane.clear().destroy();\n                prevEl = this.dom.container.prev();\n                this.destroy();\n                this.s.dtPane = undefined;\n                $$5.fn.dataTable.ext.search.push(this.s.searchFunction);\n            }\n            this.dom.container.removeClass(this.classes.hidden);\n            this.s.displayed = false;\n            this._buildPane(!this.s.dt.page.info().serverSide ?\n                selectedRows :\n                this.s.serverSelect, dataIn, prevEl);\n            return this;\n        };\n        /**\n         * Resizes the pane based on the layout that is passed in\n         *\n         * @param layout the layout to be applied to this pane\n         */\n        SearchPane.prototype.resize = function (layout) {\n            this.c.layout = layout;\n            this.dom.container\n                .removeClass()\n                .addClass(this.classes.show)\n                .addClass(this.classes.container)\n                .addClass(this.s.colOpts.className)\n                .addClass(this.classes.layout +\n                (parseInt(layout.split('-')[1], 10) < 10 ?\n                    layout :\n                    layout.split('-')[0] + '-9'))\n                .addClass(this.s.customPaneSettings !== null && this.s.customPaneSettings.className\n                ? this.s.customPaneSettings.className\n                : '');\n            this.adjustTopRow();\n        };\n        /**\n         * Sets the listeners for the pane.\n         *\n         * Having it in it's own function makes it easier to only set them once\n         */\n        SearchPane.prototype.setListeners = function () {\n            var _this = this;\n            if (!this.s.dtPane) {\n                return;\n            }\n            // When an item is selected on the pane, add these to the array which holds selected items.\n            // Custom search will perform.\n            this.s.dtPane.off('select.dtsp').on('select.dtsp', function () {\n                clearTimeout(_this.s.deselectTimeout);\n                _this._updateSelection(!_this.s.updating);\n                _this.dom.clear.removeClass(_this.classes.disabledButton).removeAttr('disabled');\n            });\n            // When an item is deselected on the pane, re add the currently selected items to the array\n            // which holds selected items. Custom search will be performed.\n            this.s.dtPane.off('deselect.dtsp').on('deselect.dtsp', function () {\n                _this.s.deselectTimeout = setTimeout(function () {\n                    _this._updateSelection(true);\n                    if (_this.s.dtPane.rows({ selected: true }).data().toArray().length === 0) {\n                        _this.dom.clear.addClass(_this.classes.disabledButton).attr('disabled', 'true');\n                    }\n                }, 50);\n            });\n            // If we attempty to turn off this event then it will ruin behaviour in other panes\n            //  so need to make sure that it is only done once\n            if (this.s.firstSet) {\n                this.s.firstSet = false;\n                // When saving the state store all of the selected rows for preselection next time around\n                this.s.dt.on('stateSaveParams.dtsp', function (e, settings, data) {\n                    // If the data being passed in is empty then state clear must have occured\n                    // so clear the panes state as well\n                    if ($$5.isEmptyObject(data)) {\n                        _this.s.dtPane.state.clear();\n                        return;\n                    }\n                    var bins;\n                    var order;\n                    var selected = [];\n                    var collapsed;\n                    var searchTerm;\n                    var arrayFilter;\n                    // Get all of the data needed for the state save from the pane\n                    if (_this.s.dtPane) {\n                        selected = _this.s.dtPane\n                            .rows({ selected: true })\n                            .data()\n                            .map(function (item) { return item.filter.toString(); })\n                            .toArray();\n                        searchTerm = _this.dom.searchBox.val();\n                        order = _this.s.dtPane.order();\n                        bins = _this.s.rowData.binsOriginal;\n                        arrayFilter = _this.s.rowData.arrayOriginal;\n                        collapsed = _this.dom.collapseButton.hasClass(_this.classes.rotated);\n                    }\n                    if (data.searchPanes === undefined) {\n                        data.searchPanes = {};\n                    }\n                    if (data.searchPanes.panes === undefined) {\n                        data.searchPanes.panes = [];\n                    }\n                    for (var i = 0; i < data.searchPanes.panes.length; i++) {\n                        if (data.searchPanes.panes[i].id === _this.s.index) {\n                            data.searchPanes.panes.splice(i, 1);\n                            i--;\n                        }\n                    }\n                    // Add the panes data to the state object\n                    data.searchPanes.panes.push({\n                        arrayFilter: arrayFilter,\n                        bins: bins,\n                        collapsed: collapsed,\n                        id: _this.s.index,\n                        order: order,\n                        searchTerm: searchTerm,\n                        selected: selected\n                    });\n                });\n            }\n            this.s.dtPane.off('user-select.dtsp').on('user-select.dtsp', function (e, _dt, type, cell, originalEvent) {\n                originalEvent.stopPropagation();\n            });\n            this.s.dtPane.off('draw.dtsp').on('draw.dtsp', function () { return _this.adjustTopRow(); });\n            // When the button to order by the name of the options is clicked then\n            //  change the ordering to whatever it isn't currently\n            this.dom.nameButton.off('click.dtsp').on('click.dtsp', function () {\n                var currentOrder = _this.s.dtPane.order()[0][1];\n                _this.s.dtPane.order([0, currentOrder === 'asc' ? 'desc' : 'asc']).draw();\n                // This state save is required so that the ordering of the panes is maintained\n                _this.s.dt.state.save();\n            });\n            // When the button to order by the number of entries in the column is clicked then\n            //  change the ordering to whatever it isn't currently\n            this.dom.countButton.off('click.dtsp').on('click.dtsp', function () {\n                var currentOrder = _this.s.dtPane.order()[0][1];\n                _this.s.dtPane.order([1, currentOrder === 'asc' ? 'desc' : 'asc']).draw();\n                // This state save is required so that the ordering of the panes is maintained\n                _this.s.dt.state.save();\n            });\n            // When the button to order by the number of entries in the column is clicked then\n            //  change the ordering to whatever it isn't currently\n            this.dom.collapseButton.off('click.dtsp').on('click.dtsp', function (e) {\n                e.stopPropagation();\n                var container = $$5(_this.s.dtPane.table().container());\n                // Toggle the classes\n                container.toggleClass(_this.classes.hidden);\n                _this.dom.topRow.toggleClass(_this.classes.bordered);\n                _this.dom.nameButton.toggleClass(_this.classes.disabledButton);\n                _this.dom.countButton.toggleClass(_this.classes.disabledButton);\n                _this.dom.searchButton.toggleClass(_this.classes.disabledButton);\n                _this.dom.collapseButton.toggleClass(_this.classes.rotated);\n                if (container.hasClass(_this.classes.hidden)) {\n                    _this.dom.topRow.on('click.dtsp', function () { return _this.dom.collapseButton.click(); });\n                }\n                else {\n                    _this.dom.topRow.off('click.dtsp');\n                }\n                _this.s.dt.state.save();\n                _this.dom.topRow.trigger('collapse.dtsps');\n            });\n            // When the clear button is clicked reset the pane\n            this.dom.clear.off('click.dtsp').on('click.dtsp', function () {\n                var searches = _this.dom.container.find('.' + _this.classes.search.replace(/ /g, '.'));\n                searches.each(function () {\n                    // set the value of the search box to be an empty string and then search on that, effectively reseting\n                    $$5(this).val('').trigger('input');\n                });\n                _this.clearPane();\n            });\n            // When the search button is clicked then draw focus to the search box\n            this.dom.searchButton.off('click.dtsp').on('click.dtsp', function () { return _this.dom.searchBox.focus(); });\n            // When a character is inputted into the searchbox search the pane for matching values.\n            // Doing it this way means that no button has to be clicked to trigger a search, it is done asynchronously\n            this.dom.searchBox.off('click.dtsp').on('input.dtsp', function () {\n                var searchval = _this.dom.searchBox.val();\n                _this.s.dtPane.search(searchval).draw();\n                if (typeof searchval === 'string' &&\n                    (searchval.length > 0 ||\n                        searchval.length === 0 && _this.s.dtPane.rows({ selected: true }).data().toArray().length > 0)) {\n                    _this.dom.clear.removeClass(_this.classes.disabledButton).removeAttr('disabled');\n                }\n                else {\n                    _this.dom.clear.addClass(_this.classes.disabledButton).attr('disabled', 'true');\n                }\n                // This state save is required so that the searching on the panes is maintained\n                _this.s.dt.state.save();\n            });\n            this.s.dtPane.select.style(this.s.colOpts.dtOpts && this.s.colOpts.dtOpts.select && this.s.colOpts.dtOpts.select.style\n                ? this.s.colOpts.dtOpts.select.style\n                : this.c.dtOpts && this.c.dtOpts.select && this.c.dtOpts.select.style\n                    ? this.c.dtOpts.select.style\n                    : 'os');\n        };\n        /**\n         * Populates the SearchPane based off of the data that has been recieved from the server\n         *\n         * This method is overriden by SearchPaneST\n         *\n         * @param dataIn The data that has been sent from the server\n         */\n        SearchPane.prototype._serverPopulate = function (dataIn) {\n            if (dataIn.tableLength) {\n                this.s.tableLength = dataIn.tableLength;\n                this.s.rowData.totalOptions = this.s.tableLength;\n            }\n            else if (this.s.tableLength === null || this.s.dt.rows()[0].length > this.s.tableLength) {\n                this.s.tableLength = this.s.dt.rows()[0].length;\n                this.s.rowData.totalOptions = this.s.tableLength;\n            }\n            var colTitle = this.s.dt.column(this.s.index).dataSrc();\n            // If there is SP data for this column add it to the data array and bin\n            if (dataIn.searchPanes.options[colTitle]) {\n                for (var _i = 0, _a = dataIn.searchPanes.options[colTitle]; _i < _a.length; _i++) {\n                    var dataPoint = _a[_i];\n                    this.s.rowData.arrayFilter.push({\n                        display: dataPoint.label,\n                        filter: dataPoint.value,\n                        sort: dataPoint.label,\n                        type: dataPoint.label\n                    });\n                    this.s.rowData.bins[dataPoint.value] = dataPoint.total;\n                }\n            }\n            var binLength = Object.keys(this.s.rowData.bins).length;\n            var uniqueRatio = this._uniqueRatio(binLength, this.s.tableLength);\n            // Don't show the pane if there isnt enough variance in the data, or there is only 1 entry for that pane\n            if (this.s.displayed === false &&\n                ((this.s.colOpts.show === undefined && this.s.colOpts.threshold === null ?\n                    uniqueRatio > this.c.threshold :\n                    uniqueRatio > this.s.colOpts.threshold) ||\n                    this.s.colOpts.show !== true && binLength <= 1)) {\n                this.dom.container.addClass(this.classes.hidden);\n                this.s.displayed = false;\n                return;\n            }\n            // Store the original data\n            this.s.rowData.arrayOriginal = this.s.rowData.arrayFilter;\n            this.s.rowData.binsOriginal = this.s.rowData.bins;\n            // Flag this pane as being displayed\n            this.s.displayed = true;\n        };\n        /**\n         * Expands the pane from the collapsed state\n         */\n        SearchPane.prototype.show = function () {\n            if (!this.s.displayed) {\n                return;\n            }\n            this.dom.topRow.removeClass(this.classes.bordered);\n            this.dom.nameButton.removeClass(this.classes.disabledButton);\n            this.dom.countButton.removeClass(this.classes.disabledButton);\n            this.dom.searchButton.removeClass(this.classes.disabledButton);\n            this.dom.collapseButton.removeClass(this.classes.rotated);\n            $$5(this.s.dtPane.table().container()).removeClass(this.classes.hidden);\n            this.dom.topRow.trigger('collapse.dtsps');\n        };\n        /**\n         * Finds the ratio of the number of different options in the table to the number of rows\n         *\n         * @param bins the number of different options in the table\n         * @param rowCount the total number of rows in the table\n         * @returns {number} returns the ratio\n         */\n        SearchPane.prototype._uniqueRatio = function (bins, rowCount) {\n            if (rowCount > 0 &&\n                (this.s.rowData.totalOptions > 0 && !this.s.dt.page.info().serverSide ||\n                    this.s.dt.page.info().serverSide && this.s.tableLength > 0)) {\n                return bins / this.s.rowData.totalOptions;\n            }\n            return 1;\n        };\n        /**\n         * Updates the panes if one of the options to do so has been set to true\n         * rather than the filtered message when using viewTotal.\n         */\n        SearchPane.prototype.updateTable = function () {\n            var selectedRows = this.s.dtPane.rows({ selected: true }).data().toArray().map(function (el) { return el.filter; });\n            this.s.selections = selectedRows;\n            this._searchExtras();\n        };\n        /**\n         * Adds the custom options to the pane\n         *\n         * @returns {Array} Returns the array of rows which have been added to the pane\n         */\n        SearchPane.prototype._getComparisonRows = function () {\n            // Find the appropriate options depending on whether this is a pane for a specific column or a custom pane\n            var options = this.s.colOpts.options\n                ? this.s.colOpts.options\n                : this.s.customPaneSettings && this.s.customPaneSettings.options\n                    ? this.s.customPaneSettings.options\n                    : undefined;\n            if (options === undefined) {\n                return;\n            }\n            var allRows = this.s.dt.rows();\n            var tableValsTotal = allRows.data().toArray();\n            var rows = [];\n            // Clear all of the other rows from the pane, only custom options are to be displayed when they are defined\n            this.s.dtPane.clear();\n            this.s.indexes = [];\n            for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n                var comp = options_1[_i];\n                // Initialise the object which is to be placed in the row\n                var insert = comp.label !== '' ?\n                    comp.label :\n                    this.emptyMessage();\n                var comparisonObj = {\n                    className: comp.className,\n                    display: insert,\n                    filter: typeof comp.value === 'function' ? comp.value : [],\n                    sort: insert,\n                    total: 0,\n                    type: insert\n                };\n                // If a custom function is in place\n                if (typeof comp.value === 'function') {\n                    // Count the number of times the function evaluates to true for the original data in the Table\n                    for (var i = 0; i < tableValsTotal.length; i++) {\n                        if (comp.value.call(this.s.dt, tableValsTotal[i], allRows[0][i])) {\n                            comparisonObj.total++;\n                        }\n                    }\n                    // Update the comparisonObj\n                    if (typeof comparisonObj.filter !== 'function') {\n                        comparisonObj.filter.push(comp.filter);\n                    }\n                }\n                rows.push(this.addRow(comparisonObj.display, comparisonObj.filter, comparisonObj.sort, comparisonObj.type, comparisonObj.className, comparisonObj.total));\n            }\n            return rows;\n        };\n        SearchPane.prototype._getMessage = function (row) {\n            return this.s.dt.i18n('searchPanes.count', this.c.i18n.count).replace(/{total}/g, row.total);\n        };\n        /**\n         * Overridden in SearchPaneViewTotal and SearchPaneCascade to get the number of times a specific value is shown\n         *\n         * Here it is blanked so that it takes no action\n         *\n         * @param filter The filter value\n         * @returns undefined\n         */\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        SearchPane.prototype._getShown = function (filter) {\n            return undefined;\n        };\n        /**\n         * Get's the pane config appropriate to this class\n         *\n         * @returns The config needed to create a pane of this type\n         */\n        SearchPane.prototype._getPaneConfig = function () {\n            var _this = this;\n            // eslint-disable-next-line no-extra-parens\n            var haveScroller = dataTable$2.Scroller;\n            var langOpts = this.s.dt.settings()[0].oLanguage;\n            langOpts.url = undefined;\n            langOpts.sUrl = undefined;\n            return {\n                columnDefs: [\n                    {\n                        className: 'dtsp-nameColumn',\n                        data: 'display',\n                        render: function (data, type, row) {\n                            if (type === 'sort') {\n                                return row.sort;\n                            }\n                            else if (type === 'type') {\n                                return row.type;\n                            }\n                            var message = _this._getMessage(row);\n                            // We are displaying the count in the same columne as the name of the search option.\n                            // This is so that there is not need to call columns.adjust()\n                            //  which in turn speeds up the code\n                            var pill = '<span class=\"' + _this.classes.pill + '\">' + message + '</span>';\n                            if (!_this.c.viewCount || !_this.s.colOpts.viewCount) {\n                                pill = '';\n                            }\n                            if (type === 'filter') {\n                                return typeof data === 'string' && data.match(/<[^>]*>/) !== null ?\n                                    data.replace(/<[^>]*>/g, '') :\n                                    data;\n                            }\n                            return '<div class=\"' + _this.classes.nameCont + '\"><span title=\"' +\n                                (typeof data === 'string' && data.match(/<[^>]*>/) !== null ?\n                                    data.replace(/<[^>]*>/g, '') :\n                                    data) +\n                                '\" class=\"' + _this.classes.name + '\">' +\n                                data + '</span>' +\n                                pill + '</div>';\n                        },\n                        targets: 0,\n                        // Accessing the private datatables property to set type based on the original table.\n                        // This is null if not defined by the user, meaning that automatic type detection\n                        //  would take place\n                        type: this.s.dt.settings()[0].aoColumns[this.s.index] ?\n                            this.s.dt.settings()[0].aoColumns[this.s.index]._sManualType :\n                            null\n                    },\n                    {\n                        className: 'dtsp-countColumn ' + this.classes.badgePill,\n                        data: 'total',\n                        searchable: false,\n                        targets: 1,\n                        visible: false\n                    }\n                ],\n                deferRender: true,\n                dom: 't',\n                info: false,\n                language: langOpts,\n                paging: haveScroller ? true : false,\n                scrollX: false,\n                scrollY: '200px',\n                scroller: haveScroller ? true : false,\n                select: true,\n                stateSave: this.s.dt.settings()[0].oFeatures.bStateSave ? true : false\n            };\n        };\n        /**\n         * This method allows for changes to the panes and table to be made when a selection or a deselection occurs\n         */\n        SearchPane.prototype._makeSelection = function () {\n            this.updateTable();\n            this.s.updating = true;\n            this.s.dt.draw(false);\n            this.s.updating = false;\n        };\n        /**\n         * Populates an array with all of the data for the table\n         *\n         * @param rowIdx The current row index to be compared\n         * @param arrayFilter The array that is to be populated with row Details\n         * @param settings The DataTable settings object\n         * @param bins The bins object that is to be populated with the row counts\n         */\n        SearchPane.prototype._populatePaneArray = function (rowIdx, arrayFilter, settings, bins) {\n            if (bins === void 0) { bins = this.s.rowData.bins; }\n            // Retrieve the rendered data from the cell using the fnGetCellData function\n            // rather than the cell().render API method for optimisation\n            if (typeof this.s.colOpts.orthogonal === 'string') {\n                var rendered = settings.oApi._fnGetCellData(settings, rowIdx, this.s.index, this.s.colOpts.orthogonal);\n                this.s.rowData.filterMap.set(rowIdx, rendered);\n                this._addOption(rendered, rendered, rendered, rendered, arrayFilter, bins);\n                this.s.rowData.totalOptions++;\n            }\n            else {\n                var filter = settings.oApi._fnGetCellData(settings, rowIdx, this.s.index, this.s.colOpts.orthogonal.search);\n                // Null and empty string are to be considered the same value\n                if (filter === null) {\n                    filter = '';\n                }\n                if (typeof filter === 'string') {\n                    filter = filter.replace(/<[^>]*>/g, '');\n                }\n                this.s.rowData.filterMap.set(rowIdx, filter);\n                if (!bins[filter]) {\n                    bins[filter] = 1;\n                    this._addOption(filter, settings.oApi._fnGetCellData(settings, rowIdx, this.s.index, this.s.colOpts.orthogonal.display), settings.oApi._fnGetCellData(settings, rowIdx, this.s.index, this.s.colOpts.orthogonal.sort), settings.oApi._fnGetCellData(settings, rowIdx, this.s.index, this.s.colOpts.orthogonal.type), arrayFilter, bins);\n                    this.s.rowData.totalOptions++;\n                }\n                else {\n                    bins[filter]++;\n                    this.s.rowData.totalOptions++;\n                }\n            }\n        };\n        /**\n         * Reloads all of the previous selects into the panes\n         *\n         * @param loadedFilter The loaded filters from a previous state\n         */\n        SearchPane.prototype._reloadSelect = function (loadedFilter) {\n            // If the state was not saved don't selected any\n            if (loadedFilter === undefined) {\n                return;\n            }\n            var idx;\n            // For each pane, check that the loadedFilter list exists and is not null,\n            // find the id of each search item and set it to be selected.\n            for (var i = 0; i < loadedFilter.searchPanes.panes.length; i++) {\n                if (loadedFilter.searchPanes.panes[i].id === this.s.index) {\n                    idx = i;\n                    break;\n                }\n            }\n            if (idx) {\n                var table = this.s.dtPane;\n                var rows = table.rows({ order: 'index' }).data().map(function (item) { return item.filter !== null ?\n                    item.filter.toString() :\n                    null; }).toArray();\n                for (var _i = 0, _a = loadedFilter.searchPanes.panes[idx].selected; _i < _a.length; _i++) {\n                    var filter = _a[_i];\n                    var id = -1;\n                    if (filter !== null) {\n                        id = rows.indexOf(filter.toString());\n                    }\n                    if (id > -1) {\n                        this.s.serverSelecting = true;\n                        table.row(id).select();\n                        this.s.serverSelecting = false;\n                    }\n                }\n            }\n        };\n        /**\n         * Notes the rows that have been selected within this pane and stores them internally\n         *\n         * @param notUpdating Whether the panes are updating themselves or not\n         */\n        SearchPane.prototype._updateSelection = function (notUpdating) {\n            var _this = this;\n            var settings = this.s.dt.settings()[0];\n            var oApi = settings.oApi;\n            var run = function () {\n                _this.s.scrollTop = $$5(_this.s.dtPane.table().node()).parent()[0].scrollTop;\n                if (_this.s.dt.page.info().serverSide && !_this.s.updating) {\n                    if (!_this.s.serverSelecting) {\n                        _this.s.serverSelect = _this.s.dtPane.rows({ selected: true }).data().toArray();\n                        _this.s.dt.draw(false);\n                    }\n                }\n                else if (notUpdating) {\n                    _this._makeSelection();\n                }\n                oApi._fnProcessingDisplay(settings, false);\n            };\n            // If the processing display is enabled, we need to allow the browser\n            // to draw it before performing our calculations\n            if (settings.oFeatures.bProcessing) {\n                oApi._fnProcessingDisplay(settings, true);\n                setTimeout(run, 1);\n            }\n            else {\n                run();\n            }\n        };\n        /**\n         * Takes in potentially undetected rows and adds them to the array if they are not yet featured\n         *\n         * @param filter the filter value of the potential row\n         * @param display the display value of the potential row\n         * @param sort the sort value of the potential row\n         * @param type the type value of the potential row\n         * @param arrayFilter the array to be populated\n         * @param bins the bins to be populated\n         */\n        SearchPane.prototype._addOption = function (filter, display, sort, type, arrayFilter, bins) {\n            // If the filter is an array then take a note of this, and add the elements to the arrayFilter array\n            if (Array.isArray(filter) || filter instanceof dataTable$2.Api) {\n                // Convert to an array so that we can work with it\n                if (filter instanceof dataTable$2.Api) {\n                    filter = filter.toArray();\n                    display = display.toArray();\n                }\n                if (filter.length === display.length) {\n                    for (var i = 0; i < filter.length; i++) {\n                        // If we haven't seen this row before add it\n                        if (!bins[filter[i]]) {\n                            bins[filter[i]] = 1;\n                            arrayFilter.push({\n                                display: display[i],\n                                filter: filter[i],\n                                sort: sort[i],\n                                type: type[i]\n                            });\n                        }\n                        // Otherwise just increment the count\n                        else {\n                            bins[filter[i]]++;\n                        }\n                        this.s.rowData.totalOptions++;\n                    }\n                    return;\n                }\n                throw new Error('display and filter not the same length');\n            }\n            // If the values were affected by othogonal data and are not an array then check if it is already present\n            else if (typeof this.s.colOpts.orthogonal === 'string') {\n                if (!bins[filter]) {\n                    bins[filter] = 1;\n                    arrayFilter.push({\n                        display: display,\n                        filter: filter,\n                        sort: sort,\n                        type: type\n                    });\n                    this.s.rowData.totalOptions++;\n                }\n                else {\n                    bins[filter]++;\n                    this.s.rowData.totalOptions++;\n                }\n            }\n            // Otherwise we must just be adding an option\n            else {\n                arrayFilter.push({\n                    display: display,\n                    filter: filter,\n                    sort: sort,\n                    type: type\n                });\n            }\n        };\n        /**\n         * Method to construct the actual pane.\n         *\n         * @param selectedRows previously selected Rows to be reselected\n         * @param dataIn Data that should be used to populate this pane\n         * @param prevEl Reference to the previous element, used to ensure insert is in the correct location\n         * @returns boolean to indicate whether this pane was the last one to have a selection made\n         */\n        SearchPane.prototype._buildPane = function (selectedRows, dataIn, prevEl) {\n            var _this = this;\n            if (selectedRows === void 0) { selectedRows = []; }\n            if (dataIn === void 0) { dataIn = null; }\n            if (prevEl === void 0) { prevEl = null; }\n            // Aliases\n            this.s.selections = [];\n            // Other Variables\n            var loadedFilter = this.s.dt.state.loaded();\n            // If the listeners have not been set yet then using the latest state may result in funny errors\n            if (this.s.listSet) {\n                loadedFilter = this.s.dt.state();\n            }\n            // If it is not a custom pane in place\n            if (this.s.colExists) {\n                var idx = -1;\n                if (loadedFilter && loadedFilter.searchPanes && loadedFilter.searchPanes.panes) {\n                    for (var i = 0; i < loadedFilter.searchPanes.panes.length; i++) {\n                        if (loadedFilter.searchPanes.panes[i].id === this.s.index) {\n                            idx = i;\n                            break;\n                        }\n                    }\n                }\n                // Perform checks that do not require populate pane to run\n                if ((this.s.colOpts.show === false ||\n                    this.s.colOpts.show !== undefined && this.s.colOpts.show !== true) &&\n                    idx === -1) {\n                    this.dom.container.addClass(this.classes.hidden);\n                    this.s.displayed = false;\n                    return false;\n                }\n                else if (this.s.colOpts.show === true || idx !== -1) {\n                    this.s.displayed = true;\n                }\n                if (!this.s.dt.page.info().serverSide &&\n                    (!dataIn ||\n                        !dataIn.searchPanes ||\n                        !dataIn.searchPanes.options)) {\n                    // Only run populatePane if the data has not been collected yet\n                    if (this.s.rowData.arrayFilter.length === 0) {\n                        this.s.rowData.totalOptions = 0;\n                        this._populatePane();\n                        this.s.rowData.arrayOriginal = this.s.rowData.arrayFilter;\n                        this.s.rowData.binsOriginal = this.s.rowData.bins;\n                    }\n                    var binLength = Object.keys(this.s.rowData.binsOriginal).length;\n                    var uniqueRatio = this._uniqueRatio(binLength, this.s.dt.rows()[0].length);\n                    // Don't show the pane if there isn't enough variance in the data, or there is only 1 entry\n                    //  for that pane\n                    if (this.s.displayed === false &&\n                        ((this.s.colOpts.show === undefined && this.s.colOpts.threshold === null ?\n                            uniqueRatio > this.c.threshold :\n                            uniqueRatio > this.s.colOpts.threshold) ||\n                            this.s.colOpts.show !== true && binLength <= 1)) {\n                        this.dom.container.addClass(this.classes.hidden);\n                        this.s.displayed = false;\n                        return;\n                    }\n                    this.dom.container.addClass(this.classes.show);\n                    this.s.displayed = true;\n                }\n                else if (dataIn && dataIn.searchPanes && dataIn.searchPanes.options) {\n                    this._serverPopulate(dataIn);\n                }\n            }\n            else {\n                this.s.displayed = true;\n            }\n            // If the variance is accceptable then display the search pane\n            this._displayPane();\n            if (!this.s.listSet) {\n                // Here, when the state is loaded if the data object on the original table is empty,\n                //  then a state.clear() must have occurred, so delete all of the panes tables state objects too.\n                this.dom.dtP.on('stateLoadParams.dtsp', function (e, settings, data) {\n                    if ($$5.isEmptyObject(_this.s.dt.state.loaded())) {\n                        $$5.each(data, function (index) {\n                            delete data[index];\n                        });\n                    }\n                });\n            }\n            // Add the container to the document in its original location\n            if (prevEl !== null && this.dom.panesContainer.has(prevEl).length > 0) {\n                this.dom.container.insertAfter(prevEl);\n            }\n            else {\n                this.dom.panesContainer.prepend(this.dom.container);\n            }\n            // Declare the datatable for the pane\n            var errMode = $$5.fn.dataTable.ext.errMode;\n            $$5.fn.dataTable.ext.errMode = 'none';\n            // eslint-disable-next-line no-extra-parens\n            this.s.dtPane = this.dom.dtP.DataTable($$5.extend(true, this._getPaneConfig(), this.c.dtOpts, this.s.colOpts ? this.s.colOpts.dtOpts : {}, this.s.colOpts.options || !this.s.colExists ?\n                {\n                    createdRow: function (row, data) {\n                        $$5(row).addClass(data.className);\n                    }\n                } :\n                undefined, this.s.customPaneSettings !== null && this.s.customPaneSettings.dtOpts ?\n                this.s.customPaneSettings.dtOpts :\n                {}, $$5.fn.dataTable.versionCheck('2')\n                ? {\n                    layout: {\n                        bottomLeft: null,\n                        bottomRight: null,\n                        topLeft: null,\n                        topRight: null\n                    }\n                }\n                : {}));\n            this.dom.dtP.addClass(this.classes.table);\n            // Getting column titles is a little messy\n            var headerText = 'Custom Pane';\n            if (this.s.customPaneSettings && this.s.customPaneSettings.header) {\n                headerText = this.s.customPaneSettings.header;\n            }\n            else if (this.s.colOpts.header) {\n                headerText = this.s.colOpts.header;\n            }\n            else if (this.s.colExists) {\n                headerText = $$5.fn.dataTable.versionCheck('2')\n                    ? this.s.dt.column(this.s.index).title()\n                    : this.s.dt.settings()[0].aoColumns[this.s.index].sTitle;\n            }\n            headerText = this._escapeHTML(headerText);\n            this.dom.searchBox.attr('placeholder', headerText);\n            // As the pane table is not in the document yet we must initialise select ourselves\n            // eslint-disable-next-line no-extra-parens\n            $$5.fn.dataTable.select.init(this.s.dtPane);\n            $$5.fn.dataTable.ext.errMode = errMode;\n            // If it is not a custom pane\n            if (this.s.colExists) {\n                // Add all of the search options to the pane\n                for (var i = 0, ien = this.s.rowData.arrayFilter.length; i < ien; i++) {\n                    if (this.s.dt.page.info().serverSide) {\n                        var row = this.addRow(this.s.rowData.arrayFilter[i].display, this.s.rowData.arrayFilter[i].filter, this.s.rowData.arrayFilter[i].sort, this.s.rowData.arrayFilter[i].type);\n                        for (var _i = 0, _a = this.s.serverSelect; _i < _a.length; _i++) {\n                            var option = _a[_i];\n                            if (option.filter === this.s.rowData.arrayFilter[i].filter) {\n                                this.s.serverSelecting = true;\n                                row.select();\n                                this.s.serverSelecting = false;\n                            }\n                        }\n                    }\n                    else if (!this.s.dt.page.info().serverSide && this.s.rowData.arrayFilter[i]) {\n                        this.addRow(this.s.rowData.arrayFilter[i].display, this.s.rowData.arrayFilter[i].filter, this.s.rowData.arrayFilter[i].sort, this.s.rowData.arrayFilter[i].type);\n                    }\n                    else if (!this.s.dt.page.info().serverSide) {\n                        // Just pass an empty string as the message will be calculated based on that in addRow()\n                        this.addRow('', '', '', '');\n                    }\n                }\n            }\n            // eslint-disable-next-line no-extra-parens\n            dataTable$2.select.init(this.s.dtPane);\n            // If there are custom options set or it is a custom pane then get them\n            if (this.s.colOpts.options ||\n                this.s.customPaneSettings && this.s.customPaneSettings.options) {\n                this._getComparisonRows();\n            }\n            // Display the pane\n            this.s.dtPane.draw();\n            this.s.dtPane.table().node().parentNode.scrollTop = this.s.scrollTop;\n            this.adjustTopRow();\n            this.setListeners();\n            this.s.listSet = true;\n            for (var _b = 0, selectedRows_1 = selectedRows; _b < selectedRows_1.length; _b++) {\n                var selection = selectedRows_1[_b];\n                if (selection) {\n                    for (var _c = 0, _d = this.s.dtPane.rows().indexes().toArray(); _c < _d.length; _c++) {\n                        var row = _d[_c];\n                        if (this.s.dtPane.row(row).data() &&\n                            selection.filter === this.s.dtPane.row(row).data().filter) {\n                            // If this is happening when serverSide processing is happening then\n                            //  different behaviour is needed\n                            if (this.s.dt.page.info().serverSide) {\n                                this.s.serverSelecting = true;\n                                this.s.dtPane.row(row).select();\n                                this.s.serverSelecting = false;\n                            }\n                            else {\n                                this.s.dtPane.row(row).select();\n                            }\n                        }\n                    }\n                }\n            }\n            //  If SSP and the table is ready, apply the search for the pane\n            if (this.s.dt.page.info().serverSide) {\n                this.s.dtPane.search(this.dom.searchBox.val()).draw();\n            }\n            if ((this.c.initCollapsed && this.s.colOpts.initCollapsed !== false ||\n                this.s.colOpts.initCollapsed) &&\n                (this.c.collapse && this.s.colOpts.collapse !== false ||\n                    this.s.colOpts.collapse)) {\n                // If the pane has not initialised yet then we need to wait for it to do so before collapsing\n                // Otherwise the container that the class is added to does not exist\n                if (this.s.dtPane.settings()[0]._bInitComplete) {\n                    this.collapse();\n                }\n                else {\n                    this.s.dtPane.one('init', function () { return _this.collapse(); });\n                }\n            }\n            // Reload the selection, searchbox entry and ordering from the previous state\n            // Need to check here if SSP that this is the first draw, otherwise it will infinite loop\n            if (loadedFilter &&\n                loadedFilter.searchPanes &&\n                loadedFilter.searchPanes.panes &&\n                (!dataIn ||\n                    dataIn.draw === 1)) {\n                this._reloadSelect(loadedFilter);\n                for (var _e = 0, _f = loadedFilter.searchPanes.panes; _e < _f.length; _e++) {\n                    var pane = _f[_e];\n                    if (pane.id === this.s.index) {\n                        // Save some time by only triggering an input if there is a value\n                        if (pane.searchTerm && pane.searchTerm.length > 0) {\n                            this.dom.searchBox.val(pane.searchTerm).trigger('input');\n                        }\n                        if (pane.order) {\n                            this.s.dtPane.order(pane.order).draw();\n                        }\n                        // Is the pane to be hidden or shown?\n                        if (pane.collapsed) {\n                            this.collapse();\n                        }\n                        else {\n                            this.show();\n                        }\n                    }\n                }\n            }\n            return true;\n        };\n        /**\n         * Appends all of the HTML elements to their relevant parent Elements\n         */\n        SearchPane.prototype._displayPane = function () {\n            // Empty everything to start again\n            this.dom.dtP.empty();\n            this.dom.topRow.empty().addClass(this.classes.topRow);\n            // If there are more than 3 columns defined then make there be a smaller gap between the panes\n            if (parseInt(this.c.layout.split('-')[1], 10) > 3) {\n                this.dom.container.addClass(this.classes.smallGap);\n            }\n            this.dom.topRow\n                .addClass(this.classes.subRowsContainer)\n                .append(this.dom.upper.append(this.dom.searchCont))\n                .append(this.dom.lower.append(this.dom.buttonGroup));\n            // If no selections have been made in the pane then disable the clear button\n            if (this.c.dtOpts.searching === false ||\n                this.s.colOpts.dtOpts && this.s.colOpts.dtOpts.searching === false ||\n                (!this.c.controls || !this.s.colOpts.controls) ||\n                this.s.customPaneSettings &&\n                    this.s.customPaneSettings.dtOpts &&\n                    this.s.customPaneSettings.dtOpts.searching !== undefined &&\n                    !this.s.customPaneSettings.dtOpts.searching) {\n                this.dom.searchBox\n                    .removeClass(this.classes.paneInputButton)\n                    .addClass(this.classes.disabledButton)\n                    .attr('disabled', 'true');\n            }\n            this.dom.searchBox.appendTo(this.dom.searchCont);\n            // Create the contents of the searchCont div. Worth noting that this function will change when using semantic ui\n            this._searchContSetup();\n            // If the clear button is allowed to show then display it\n            if (this.c.clear && this.c.controls && this.s.colOpts.controls) {\n                this.dom.clear.appendTo(this.dom.buttonGroup);\n            }\n            if (this.c.orderable && this.s.colOpts.orderable && this.c.controls && this.s.colOpts.controls) {\n                this.dom.nameButton.appendTo(this.dom.buttonGroup);\n            }\n            // If the count column is hidden then don't display the ordering button for it\n            if (this.c.viewCount &&\n                this.s.colOpts.viewCount &&\n                this.c.orderable &&\n                this.s.colOpts.orderable &&\n                this.c.controls &&\n                this.s.colOpts.controls) {\n                this.dom.countButton.appendTo(this.dom.buttonGroup);\n            }\n            if ((this.c.collapse && this.s.colOpts.collapse !== false ||\n                this.s.colOpts.collapse) &&\n                this.c.controls && this.s.colOpts.controls) {\n                this.dom.collapseButton.appendTo(this.dom.buttonGroup);\n            }\n            this.dom.container.prepend(this.dom.topRow).append(this.dom.dtP).show();\n        };\n        /**\n         * Escape html characters within a string\n         *\n         * @param txt the string to be escaped\n         * @returns the escaped string\n         */\n        SearchPane.prototype._escapeHTML = function (txt) {\n            return txt\n                .toString()\n                .replace(/&amp;/g, '&')\n                .replace(/&lt;/g, '<')\n                .replace(/&gt;/g, '>')\n                .replace(/&quot;/g, '\"');\n        };\n        /**\n         * Gets the options for the row for the customPanes\n         *\n         * @returns {object} The options for the row extended to include the options from the user.\n         */\n        SearchPane.prototype._getBonusOptions = function () {\n            // We need to reset the thresholds as if they have a value in colOpts then that value will be used\n            var defaultMutator = {\n                threshold: null\n            };\n            return $$5.extend(true, {}, SearchPane.defaults, defaultMutator, this.c ? this.c : {});\n        };\n        /**\n         * Gets the options for the row for the customPanes\n         *\n         * @returns {object} The options for the row extended to include the options from the user.\n         */\n        SearchPane.prototype._getOptions = function () {\n            var table = this.s.dt;\n            // We need to reset the thresholds as if they have a value in colOpts then that value will be used\n            var defaultMutator = {\n                collapse: null,\n                emptyMessage: false,\n                initCollapsed: null,\n                threshold: null\n            };\n            var columnOptions = table.settings()[0].aoColumns[this.s.index].searchPanes;\n            var colOpts = $$5.extend(true, {}, SearchPane.defaults, defaultMutator, columnOptions);\n            if (columnOptions && columnOptions.hideCount && columnOptions.viewCount === undefined) {\n                colOpts.viewCount = !columnOptions.hideCount;\n            }\n            return colOpts;\n        };\n        /**\n         * Fill the array with the values that are currently being displayed in the table\n         */\n        SearchPane.prototype._populatePane = function () {\n            this.s.rowData.arrayFilter = [];\n            this.s.rowData.bins = {};\n            var settings = this.s.dt.settings()[0];\n            if (!this.s.dt.page.info().serverSide) {\n                for (var _i = 0, _a = this.s.dt.rows().indexes().toArray(); _i < _a.length; _i++) {\n                    var index = _a[_i];\n                    this._populatePaneArray(index, this.s.rowData.arrayFilter, settings);\n                }\n            }\n        };\n        /**\n         * This method decides whether a row should contribute to the pane or not\n         *\n         * @param filter the value that the row is to be filtered on\n         * @param dataIndex the row index\n         */\n        SearchPane.prototype._search = function (filter, dataIndex) {\n            var colOpts = this.s.colOpts;\n            var table = this.s.dt;\n            // For each item selected in the pane, check if it is available in the cell\n            for (var _i = 0, _a = this.s.selections; _i < _a.length; _i++) {\n                var colSelect = _a[_i];\n                if (typeof colSelect === 'string' && typeof filter === 'string') {\n                    // The filter value will not have the &amp; in place but a &,\n                    // so we need to do a replace to make sure that they will match\n                    colSelect = this._escapeHTML(colSelect);\n                }\n                // if the filter is an array then is the column present in it\n                if (Array.isArray(filter)) {\n                    if (colOpts.combiner === 'and') {\n                        if (!filter.includes(colSelect)) {\n                            return false;\n                        }\n                    }\n                    else if (filter.includes(colSelect)) {\n                        return true;\n                    }\n                }\n                // if the filter is a function then does it meet the criteria of that function or not\n                else if (typeof colSelect === 'function') {\n                    if (colSelect.call(table, table.row(dataIndex).data(), dataIndex)) {\n                        if (colOpts.combiner === 'or') {\n                            return true;\n                        }\n                    }\n                    // If the combiner is an \"and\" then we need to check against all possible selections\n                    // so if it fails here then the and is not met and return false\n                    else if (colOpts.combiner === 'and') {\n                        return false;\n                    }\n                }\n                // otherwise if the two filter values are equal then return true\n                else if (filter === colSelect ||\n                    // Loose type checking incase number type in column comparing to a string\n                    // eslint-disable-next-line eqeqeq\n                    !(typeof filter === 'string' && filter.length === 0) && filter == colSelect ||\n                    colSelect === null && typeof filter === 'string' && filter === '') {\n                    return true;\n                }\n            }\n            // If the combiner is an and then we need to check against all possible selections\n            // so return true here if so because it would have returned false earlier if it had failed\n            if (colOpts.combiner === 'and') {\n                return true;\n            }\n            // Otherwise it hasn't matched with anything by this point so it must be false\n            return false;\n        };\n        /**\n         * Creates the contents of the searchCont div\n         *\n         * NOTE This is overridden when semantic ui styling in order to integrate the search button into the text box.\n         */\n        SearchPane.prototype._searchContSetup = function () {\n            if (this.c.controls && this.s.colOpts.controls) {\n                this.dom.searchButton.appendTo(this.dom.searchLabelCont);\n            }\n            if (!(this.c.dtOpts.searching === false ||\n                this.s.colOpts.dtOpts.searching === false ||\n                this.s.customPaneSettings &&\n                    this.s.customPaneSettings.dtOpts &&\n                    this.s.customPaneSettings.dtOpts.searching !== undefined &&\n                    !this.s.customPaneSettings.dtOpts.searching)) {\n                this.dom.searchLabelCont.appendTo(this.dom.searchCont);\n            }\n        };\n        /**\n         * Adds outline to the pane when a selection has been made\n         */\n        SearchPane.prototype._searchExtras = function () {\n            var updating = this.s.updating;\n            this.s.updating = true;\n            var filters = this.s.dtPane.rows({ selected: true }).data().pluck('filter').toArray();\n            var nullIndex = filters.indexOf(this.emptyMessage());\n            var container = $$5(this.s.dtPane.table().container());\n            // If null index is found then search for empty cells as a filter.\n            if (nullIndex > -1) {\n                filters[nullIndex] = '';\n            }\n            // If a filter has been applied then outline the respective pane, remove it when it no longer is.\n            if (filters.length > 0) {\n                container.addClass(this.classes.selected);\n            }\n            else if (filters.length === 0) {\n                container.removeClass(this.classes.selected);\n            }\n            this.s.updating = updating;\n        };\n        SearchPane.version = '2.1.2';\n        SearchPane.classes = {\n            bordered: 'dtsp-bordered',\n            buttonGroup: 'dtsp-buttonGroup',\n            buttonSub: 'dtsp-buttonSub',\n            caret: 'dtsp-caret',\n            clear: 'dtsp-clear',\n            clearAll: 'dtsp-clearAll',\n            clearButton: 'clearButton',\n            collapseAll: 'dtsp-collapseAll',\n            collapseButton: 'dtsp-collapseButton',\n            container: 'dtsp-searchPane',\n            countButton: 'dtsp-countButton',\n            disabledButton: 'dtsp-disabledButton',\n            hidden: 'dtsp-hidden',\n            hide: 'dtsp-hide',\n            layout: 'dtsp-',\n            name: 'dtsp-name',\n            nameButton: 'dtsp-nameButton',\n            nameCont: 'dtsp-nameCont',\n            narrow: 'dtsp-narrow',\n            paneButton: 'dtsp-paneButton',\n            paneInputButton: 'dtsp-paneInputButton',\n            pill: 'dtsp-pill',\n            rotated: 'dtsp-rotated',\n            search: 'dtsp-search',\n            searchCont: 'dtsp-searchCont',\n            searchIcon: 'dtsp-searchIcon',\n            searchLabelCont: 'dtsp-searchButtonCont',\n            selected: 'dtsp-selected',\n            smallGap: 'dtsp-smallGap',\n            subRow1: 'dtsp-subRow1',\n            subRow2: 'dtsp-subRow2',\n            subRowsContainer: 'dtsp-subRowsContainer',\n            title: 'dtsp-title',\n            topRow: 'dtsp-topRow'\n        };\n        // Define SearchPanes default options\n        SearchPane.defaults = {\n            clear: true,\n            collapse: true,\n            combiner: 'or',\n            container: function (dt) {\n                return dt.table().container();\n            },\n            controls: true,\n            dtOpts: {},\n            emptyMessage: null,\n            hideCount: false,\n            i18n: {\n                clearPane: '&times;',\n                count: '{total}',\n                emptyMessage: '<em>No data</em>'\n            },\n            initCollapsed: false,\n            layout: 'auto',\n            name: undefined,\n            orderable: true,\n            orthogonal: {\n                display: 'display',\n                filter: 'filter',\n                hideCount: false,\n                search: 'filter',\n                show: undefined,\n                sort: 'sort',\n                threshold: 0.6,\n                type: 'type',\n                viewCount: true\n            },\n            preSelect: [],\n            threshold: 0.6,\n            viewCount: true\n        };\n        return SearchPane;\n    }());\n\n    var __extends$4 = (window && window.__extends) || (function () {\n        var extendStatics = function (d, b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n                function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n            return extendStatics(d, b);\n        };\n        return function (d, b) {\n            extendStatics(d, b);\n            function __() { this.constructor = d; }\n            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n        };\n    })();\n    var SearchPaneST = /** @class */ (function (_super) {\n        __extends$4(SearchPaneST, _super);\n        function SearchPaneST(paneSettings, opts, index, panesContainer, panes) {\n            return _super.call(this, paneSettings, opts, index, panesContainer, panes) || this;\n        }\n        /**\n         * Populates the SearchPane based off of the data that has been recieved from the server\n         *\n         * This method overrides SearchPane's _serverPopulate() method\n         *\n         * @param dataIn The data that has been sent from the server\n         */\n        SearchPaneST.prototype._serverPopulate = function (dataIn) {\n            this.s.rowData.binsShown = {};\n            this.s.rowData.arrayFilter = [];\n            if (dataIn.tableLength !== undefined) {\n                this.s.tableLength = dataIn.tableLength;\n                this.s.rowData.totalOptions = this.s.tableLength;\n            }\n            else if (this.s.tableLength === null || this.s.dt.rows()[0].length > this.s.tableLength) {\n                this.s.tableLength = this.s.dt.rows()[0].length;\n                this.s.rowData.totalOptions = this.s.tableLength;\n            }\n            var colTitle = this.s.dt.column(this.s.index).dataSrc();\n            // If there is SP data for this column add it to the data array and bin\n            if (dataIn.searchPanes.options[colTitle] !== undefined) {\n                for (var _i = 0, _a = dataIn.searchPanes.options[colTitle]; _i < _a.length; _i++) {\n                    var dataPoint = _a[_i];\n                    this.s.rowData.arrayFilter.push({\n                        display: dataPoint.label,\n                        filter: dataPoint.value,\n                        shown: +dataPoint.count,\n                        sort: dataPoint.label,\n                        total: +dataPoint.total,\n                        type: dataPoint.label\n                    });\n                    this.s.rowData.binsShown[dataPoint.value] = +dataPoint.count;\n                    this.s.rowData.bins[dataPoint.value] = +dataPoint.total;\n                }\n            }\n            var binLength = Object.keys(this.s.rowData.bins).length;\n            var uniqueRatio = this._uniqueRatio(binLength, this.s.tableLength);\n            // Don't show the pane if there isnt enough variance in the data, or there is only 1 entry for that pane\n            if (!this.s.colOpts.show &&\n                this.s.displayed === false &&\n                ((this.s.colOpts.show === undefined && this.s.colOpts.threshold === null ?\n                    uniqueRatio > this.c.threshold :\n                    uniqueRatio > this.s.colOpts.threshold) ||\n                    this.s.colOpts.show !== true && binLength <= 1)) {\n                this.dom.container.addClass(this.classes.hidden);\n                this.s.displayed = false;\n                return;\n            }\n            // Store the original data\n            this.s.rowData.arrayOriginal = this.s.rowData.arrayFilter;\n            this.s.rowData.binsOriginal = this.s.rowData.bins;\n            // Flag this pane as being displayed\n            this.s.displayed = true;\n            // If the pane exists\n            if (this.s.dtPane) {\n                // Not the selections that have been made and remove all of the rows\n                var selected = this.s.serverSelect;\n                this.s.dtPane.rows().remove();\n                // Add the rows that are to be shown into the pane\n                for (var _b = 0, _c = this.s.rowData.arrayFilter; _b < _c.length; _b++) {\n                    var data = _c[_b];\n                    if (this._shouldAddRow(data)) {\n                        var row = this.addRow(data.display, data.filter, data.sort, data.type);\n                        // Select the row if it was selected before\n                        for (var i = 0; i < selected.length; i++) {\n                            var selection = selected[i];\n                            if (selection.filter === data.filter) {\n                                // This flag stops another request being made to the server\n                                this.s.serverSelecting = true;\n                                row.select();\n                                this.s.serverSelecting = false;\n                                // Remove the selection from the to select list and add it to the selected list\n                                selected.splice(i, 1);\n                                this.s.selections.push(data.filter);\n                                break;\n                            }\n                        }\n                    }\n                }\n                // Remake any selections that are no longer present\n                for (var _d = 0, selected_1 = selected; _d < selected_1.length; _d++) {\n                    var selection = selected_1[_d];\n                    for (var _e = 0, _f = this.s.rowData.arrayOriginal; _e < _f.length; _e++) {\n                        var data = _f[_e];\n                        if (data.filter === selection.filter) {\n                            var row = this.addRow(data.display, data.filter, data.sort, data.type);\n                            this.s.serverSelecting = true;\n                            row.select();\n                            this.s.serverSelecting = false;\n                            this.s.selections.push(data.filter);\n                        }\n                    }\n                }\n                // Store the selected rows\n                this.s.serverSelect = this.s.dtPane.rows({ selected: true }).data().toArray();\n                // Update the pane\n                this.s.dtPane.draw();\n            }\n        };\n        /**\n         * This method updates the rows and their data within the SearchPanes\n         *\n         * SearchPaneCascade overrides this method\n         */\n        SearchPaneST.prototype.updateRows = function () {\n            if (!this.s.dt.page.info().serverSide) {\n                // Get the latest count values from the table\n                this.s.rowData.binsShown = {};\n                for (var _i = 0, _a = this.s.dt.rows({ search: 'applied' }).indexes().toArray(); _i < _a.length; _i++) {\n                    var index = _a[_i];\n                    this._updateShown(index, this.s.dt.settings()[0], this.s.rowData.binsShown);\n                }\n            }\n            // Update the rows data to show the current counts\n            for (var _b = 0, _c = this.s.dtPane.rows().data().toArray(); _b < _c.length; _b++) {\n                var row = _c[_b];\n                row.shown = typeof this.s.rowData.binsShown[row.filter] === 'number' ?\n                    this.s.rowData.binsShown[row.filter] :\n                    0;\n                this.s.dtPane.row(row.index).data(row);\n            }\n            // Show updates in the pane\n            this.s.dtPane.draw();\n            this.s.dtPane.table().node().parentNode.scrollTop = this.s.scrollTop;\n        };\n        /**\n         * Remove functionality from makeSelection - needs to be more advanced when tracking selections\n         */\n        SearchPaneST.prototype._makeSelection = function () {\n            return;\n        };\n        /**\n         * Blank method to remove reloading of selected rows - needs to be more advanced when tracking selections\n         */\n        SearchPaneST.prototype._reloadSelect = function () {\n            return;\n        };\n        /**\n         * Decides if a row should be added when being added from the server\n         *\n         * Overridden by SearchPaneCascade\n         *\n         * @param data the row data\n         * @returns boolean indicating if the row should be added or not\n         */\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        SearchPaneST.prototype._shouldAddRow = function (data) {\n            return true;\n        };\n        /**\n         * Updates the server selection list where appropriate\n         */\n        SearchPaneST.prototype._updateSelection = function () {\n            if (this.s.dt.page.info().serverSide && !this.s.updating && !this.s.serverSelecting) {\n                this.s.serverSelect = this.s.dtPane.rows({ selected: true }).data().toArray();\n            }\n        };\n        /**\n         * Used when binning the data for a column\n         *\n         * @param rowIdx The current row that is to be added to the bins\n         * @param settings The datatables settings object\n         * @param bins The bins object that is to be incremented\n         */\n        SearchPaneST.prototype._updateShown = function (rowIdx, settings, bins) {\n            if (bins === void 0) { bins = this.s.rowData.binsShown; }\n            var orth = typeof this.s.colOpts.orthogonal === 'string'\n                ? this.s.colOpts.orthogonal\n                : this.s.colOpts.orthogonal.search;\n            var filter = settings.oApi._fnGetCellData(settings, rowIdx, this.s.index, orth);\n            var add = function (f) {\n                if (!bins[f]) {\n                    bins[f] = 1;\n                }\n                else {\n                    bins[f]++;\n                }\n            };\n            if (Array.isArray(filter)) {\n                for (var _i = 0, filter_1 = filter; _i < filter_1.length; _i++) {\n                    var f = filter_1[_i];\n                    add(f);\n                }\n            }\n            else {\n                add(filter);\n            }\n        };\n        return SearchPaneST;\n    }(SearchPane));\n\n    var __extends$3 = (window && window.__extends) || (function () {\n        var extendStatics = function (d, b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n                function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n            return extendStatics(d, b);\n        };\n        return function (d, b) {\n            extendStatics(d, b);\n            function __() { this.constructor = d; }\n            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n        };\n    })();\n    var $$4;\n    function setJQuery$3(jq) {\n        $$4 = jq;\n    }\n    var SearchPaneViewTotal = /** @class */ (function (_super) {\n        __extends$3(SearchPaneViewTotal, _super);\n        function SearchPaneViewTotal(paneSettings, opts, index, panesContainer, panes) {\n            var _this = this;\n            var override = {\n                i18n: {\n                    countFiltered: '{shown} ({total})'\n                }\n            };\n            _this = _super.call(this, paneSettings, $$4.extend(override, opts), index, panesContainer, panes) || this;\n            return _this;\n        }\n        /**\n         * Gets the message that is to be used to indicate the count for each SearchPane row\n         *\n         * This method overrides _getMessage() in SearchPane and is overridden by SearchPaneCascadeViewTotal\n         *\n         * @param row The row object that is being processed\n         * @returns string - the message that is to be shown for the count of each entry\n         */\n        SearchPaneViewTotal.prototype._getMessage = function (row) {\n            var countMessage = this.s.dt.i18n('searchPanes.count', this.c.i18n.count);\n            var filteredMessage = this.s.dt.i18n('searchPanes.countFiltered', this.c.i18n.countFiltered);\n            return (this.s.filteringActive ? filteredMessage : countMessage)\n                .replace(/{total}/g, row.total)\n                .replace(/{shown}/g, row.shown);\n        };\n        /**\n         * Overrides the blank method in SearchPane to return the number of times a given value is currently being displayed\n         *\n         * @param filter The filter value\n         * @returns number - The number of times the value is shown\n         */\n        SearchPaneViewTotal.prototype._getShown = function (filter) {\n            return this.s.rowData.binsShown && this.s.rowData.binsShown[filter] ?\n                this.s.rowData.binsShown[filter] :\n                0;\n        };\n        return SearchPaneViewTotal;\n    }(SearchPaneST));\n\n    var __extends$2 = (window && window.__extends) || (function () {\n        var extendStatics = function (d, b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n                function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n            return extendStatics(d, b);\n        };\n        return function (d, b) {\n            extendStatics(d, b);\n            function __() { this.constructor = d; }\n            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n        };\n    })();\n    var $$3;\n    function setJQuery$2(jq) {\n        $$3 = jq;\n    }\n    var SearchPaneCascade = /** @class */ (function (_super) {\n        __extends$2(SearchPaneCascade, _super);\n        function SearchPaneCascade(paneSettings, opts, index, panesContainer, panes) {\n            var _this = this;\n            var override = {\n                i18n: {\n                    count: '{shown}'\n                }\n            };\n            _this = _super.call(this, paneSettings, $$3.extend(override, opts), index, panesContainer, panes) || this;\n            return _this;\n        }\n        /**\n         * This method updates the rows and their data within the SearchPanes\n         *\n         * This overrides the method in SearchPane\n         */\n        SearchPaneCascade.prototype.updateRows = function () {\n            // Note the currently selected values in the pane and remove all of the rows\n            var selected = this.s.dtPane.rows({ selected: true }).data().toArray();\n            if (this.s.colOpts.options ||\n                this.s.customPaneSettings && this.s.customPaneSettings.options) {\n                // If there are custom options set or it is a custom pane then get them\n                this._getComparisonRows();\n                var rows = this.s.dtPane.rows().toArray()[0];\n                for (var i = 0; i < rows.length; i++) {\n                    var row = this.s.dtPane.row(rows[i]);\n                    var rowData = row.data();\n                    if (rowData === undefined) {\n                        continue;\n                    }\n                    if (rowData.shown === 0) {\n                        row.remove();\n                        rows = this.s.dtPane.rows().toArray()[0];\n                        i--;\n                        continue;\n                    }\n                    for (var _i = 0, selected_1 = selected; _i < selected_1.length; _i++) {\n                        var selection = selected_1[_i];\n                        if (rowData.filter === selection.filter) {\n                            row.select();\n                            selected.splice(i, 1);\n                            this.s.selections.push(rowData.filter);\n                            break;\n                        }\n                    }\n                }\n            }\n            else {\n                if (!this.s.dt.page.info().serverSide) {\n                    // Get the latest count values from the table\n                    this._activePopulatePane();\n                    this.s.rowData.binsShown = {};\n                    for (var _a = 0, _b = this.s.dt.rows({ search: 'applied' }).indexes().toArray(); _a < _b.length; _a++) {\n                        var index = _b[_a];\n                        this._updateShown(index, this.s.dt.settings()[0], this.s.rowData.binsShown);\n                    }\n                }\n                this.s.dtPane.rows().remove();\n                // Go over all of the rows that could be displayed\n                for (var _c = 0, _d = this.s.rowData.arrayFilter; _c < _d.length; _c++) {\n                    var data = _d[_c];\n                    // Cascade - If there are no rows present in the table don't show the option\n                    if (data.shown === 0) {\n                        continue;\n                    }\n                    // Add the row to the pane\n                    var row = this.addRow(data.display, data.filter, data.sort, data.type, undefined);\n                    // Check if this row was selected\n                    for (var i = 0; i < selected.length; i++) {\n                        var selection = selected[i];\n                        if (selection.filter === data.filter) {\n                            row.select();\n                            // Remove the row from the to find list and then add it to the selections list\n                            selected.splice(i, 1);\n                            this.s.selections.push(data.filter);\n                            break;\n                        }\n                    }\n                }\n                // Add all of the rows that were previously selected but aren't any more\n                for (var _e = 0, selected_2 = selected; _e < selected_2.length; _e++) {\n                    var selection = selected_2[_e];\n                    for (var _f = 0, _g = this.s.rowData.arrayOriginal; _f < _g.length; _f++) {\n                        var data = _g[_f];\n                        if (data.filter === selection.filter) {\n                            var row = this.addRow(data.display, data.filter, data.sort, data.type, undefined);\n                            row.select();\n                            this.s.selections.push(data.filter);\n                        }\n                    }\n                }\n            }\n            // Show updates in the pane\n            this.s.dtPane.draw();\n            this.s.dtPane.table().node().parentNode.scrollTop = this.s.scrollTop;\n            // If client side updated the tables results\n            if (!this.s.dt.page.info().serverSide) {\n                this.s.dt.draw(false);\n            }\n        };\n        /**\n         * Fill the array with the values that are currently being displayed in the table\n         */\n        SearchPaneCascade.prototype._activePopulatePane = function () {\n            this.s.rowData.arrayFilter = [];\n            this.s.rowData.bins = {};\n            var settings = this.s.dt.settings()[0];\n            if (!this.s.dt.page.info().serverSide) {\n                for (var _i = 0, _a = this.s.dt.rows({ search: 'applied' }).indexes().toArray(); _i < _a.length; _i++) {\n                    var index = _a[_i];\n                    this._populatePaneArray(index, this.s.rowData.arrayFilter, settings);\n                }\n            }\n        };\n        SearchPaneCascade.prototype._getComparisonRows = function () {\n            // Find the appropriate options depending on whether this is a pane for a specific column or a custom pane\n            var options = this.s.colOpts.options\n                ? this.s.colOpts.options\n                : this.s.customPaneSettings && this.s.customPaneSettings.options\n                    ? this.s.customPaneSettings.options\n                    : undefined;\n            if (options === undefined) {\n                return;\n            }\n            var allRows = this.s.dt.rows();\n            var shownRows = this.s.dt.rows({ search: 'applied' });\n            var tableValsTotal = allRows.data().toArray();\n            var tableValsShown = shownRows.data().toArray();\n            var rows = [];\n            // Clear all of the other rows from the pane, only custom options are to be displayed when they are defined\n            this.s.dtPane.clear();\n            this.s.indexes = [];\n            for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n                var comp = options_1[_i];\n                // Initialise the object which is to be placed in the row\n                var insert = comp.label !== '' ?\n                    comp.label :\n                    this.emptyMessage();\n                var comparisonObj = {\n                    className: comp.className,\n                    display: insert,\n                    filter: typeof comp.value === 'function' ? comp.value : [],\n                    shown: 0,\n                    sort: insert,\n                    total: 0,\n                    type: insert\n                };\n                // If a custom function is in place\n                if (typeof comp.value === 'function') {\n                    // Count the number of times the function evaluates to true for the original data in the Table\n                    for (var i = 0; i < tableValsTotal.length; i++) {\n                        if (comp.value.call(this.s.dt, tableValsTotal[i], allRows[0][i])) {\n                            comparisonObj.total++;\n                        }\n                    }\n                    for (var i = 0; i < tableValsShown.length; i++) {\n                        if (comp.value.call(this.s.dt, tableValsShown[i], shownRows[0][i])) {\n                            comparisonObj.shown++;\n                        }\n                    }\n                    // Update the comparisonObj\n                    if (typeof comparisonObj.filter !== 'function') {\n                        comparisonObj.filter.push(comp.filter);\n                    }\n                }\n                rows.push(this.addRow(comparisonObj.display, comparisonObj.filter, comparisonObj.sort, comparisonObj.type, comparisonObj.className, comparisonObj.total, comparisonObj.shown));\n            }\n            return rows;\n        };\n        /**\n         * Gets the message that is to be used to indicate the count for each SearchPane row\n         *\n         * This method overrides _getMessage() in SearchPane and is overridden by SearchPaneCascadeViewTotal\n         *\n         * @param row The row object that is being processed\n         * @returns string - the message that is to be shown for the count of each entry\n         */\n        SearchPaneCascade.prototype._getMessage = function (row) {\n            return this.s.dt.i18n('searchPanes.count', this.c.i18n.count)\n                .replace(/{total}/g, row.total)\n                .replace(/{shown}/g, row.shown);\n        };\n        /**\n         * Overrides the blank method in SearchPane to return the number of times a given value is currently being displayed\n         *\n         * @param filter The filter value\n         * @returns number - The number of times the value is shown\n         */\n        SearchPaneCascade.prototype._getShown = function (filter) {\n            return this.s.rowData.binsShown && this.s.rowData.binsShown[filter] ?\n                this.s.rowData.binsShown[filter] :\n                0;\n        };\n        /**\n         * Decides if a row should be added when being added from the server\n         *\n         * Overrides method in by SearchPaneST\n         *\n         * @param data the row data\n         * @returns boolean indicating if the row should be added or not\n         */\n        SearchPaneCascade.prototype._shouldAddRow = function (data) {\n            return data.shown > 0;\n        };\n        return SearchPaneCascade;\n    }(SearchPaneST));\n\n    var __extends$1 = (window && window.__extends) || (function () {\n        var extendStatics = function (d, b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n                function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n            return extendStatics(d, b);\n        };\n        return function (d, b) {\n            extendStatics(d, b);\n            function __() { this.constructor = d; }\n            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n        };\n    })();\n    var $$2;\n    function setJQuery$1(jq) {\n        $$2 = jq;\n    }\n    var SearchPaneCascadeViewTotal = /** @class */ (function (_super) {\n        __extends$1(SearchPaneCascadeViewTotal, _super);\n        function SearchPaneCascadeViewTotal(paneSettings, opts, index, panesContainer, panes) {\n            var _this = this;\n            var override = {\n                i18n: {\n                    count: '{total}',\n                    countFiltered: '{shown} ({total})'\n                }\n            };\n            _this = _super.call(this, paneSettings, $$2.extend(override, opts), index, panesContainer, panes) || this;\n            return _this;\n        }\n        /**\n         * Fill the array with the values that are currently being displayed in the table\n         *\n         * This method overrides _activePopulatePane() in SearchPaneCascade\n         */\n        SearchPaneCascadeViewTotal.prototype._activePopulatePane = function () {\n            this.s.rowData.arrayFilter = [];\n            this.s.rowData.binsShown = {};\n            var settings = this.s.dt.settings()[0];\n            if (!this.s.dt.page.info().serverSide) {\n                for (var _i = 0, _a = this.s.dt.rows({ search: 'applied' }).indexes().toArray(); _i < _a.length; _i++) {\n                    var index = _a[_i];\n                    this._populatePaneArray(index, this.s.rowData.arrayFilter, settings, this.s.rowData.binsShown);\n                }\n            }\n        };\n        /**\n         * Gets the message that is to be used to indicate the count for each SearchPane row\n         *\n         * This method overrides _getMessage() in SearchPaneCascade\n         *\n         * @param row The row object that is being processed\n         * @returns string - the message that is to be shown for the count of each entry\n         */\n        SearchPaneCascadeViewTotal.prototype._getMessage = function (row) {\n            var countMessage = this.s.dt.i18n('searchPanes.count', this.c.i18n.count);\n            var filteredMessage = this.s.dt.i18n('searchPanes.countFiltered', this.c.i18n.countFiltered);\n            return (this.s.filteringActive ? filteredMessage : countMessage)\n                .replace(/{total}/g, row.total)\n                .replace(/{shown}/g, row.shown);\n        };\n        return SearchPaneCascadeViewTotal;\n    }(SearchPaneCascade));\n\n    var $$1;\n    var dataTable$1;\n    function setJQuery(jq) {\n        $$1 = jq;\n        dataTable$1 = jq.fn.dataTable;\n    }\n    var SearchPanes = /** @class */ (function () {\n        function SearchPanes(paneSettings, opts, fromPreInit, paneClass) {\n            var _this = this;\n            if (fromPreInit === void 0) { fromPreInit = false; }\n            if (paneClass === void 0) { paneClass = SearchPane; }\n            // Check that the required version of DataTables is included\n            if (!dataTable$1 || !dataTable$1.versionCheck || !dataTable$1.versionCheck('1.10.0')) {\n                throw new Error('SearchPane requires DataTables 1.10 or newer');\n            }\n            // Check that Select is included\n            // eslint-disable-next-line no-extra-parens\n            if (!dataTable$1.select) {\n                throw new Error('SearchPane requires Select');\n            }\n            var table = new dataTable$1.Api(paneSettings);\n            this.classes = $$1.extend(true, {}, SearchPanes.classes);\n            // Get options from user\n            this.c = $$1.extend(true, {}, SearchPanes.defaults, opts);\n            // Add extra elements to DOM object including clear\n            this.dom = {\n                clearAll: $$1('<button type=\"button\"/>')\n                    .addClass(this.classes.clearAll)\n                    .html(table.i18n('searchPanes.clearMessage', this.c.i18n.clearMessage)),\n                collapseAll: $$1('<button type=\"button\"/>')\n                    .addClass(this.classes.collapseAll)\n                    .html(table.i18n('searchPanes.collapseMessage', this.c.i18n.collapseMessage)),\n                container: $$1('<div/>').addClass(this.classes.panes).html(table.i18n('searchPanes.loadMessage', this.c.i18n.loadMessage)),\n                emptyMessage: $$1('<div/>').addClass(this.classes.emptyMessage),\n                panes: $$1('<div/>').addClass(this.classes.container),\n                showAll: $$1('<button type=\"button\"/>')\n                    .addClass(this.classes.showAll)\n                    .addClass(this.classes.disabledButton)\n                    .attr('disabled', 'true')\n                    .html(table.i18n('searchPanes.showMessage', this.c.i18n.showMessage)),\n                title: $$1('<div/>').addClass(this.classes.title),\n                titleRow: $$1('<div/>').addClass(this.classes.titleRow)\n            };\n            this.s = {\n                colOpts: [],\n                dt: table,\n                filterCount: 0,\n                minPaneWidth: 260.0,\n                page: 0,\n                paging: false,\n                pagingST: false,\n                paneClass: paneClass,\n                panes: [],\n                selectionList: [],\n                serverData: {},\n                stateRead: false,\n                updating: false\n            };\n            // Do not reinitialise if already initialised on table\n            if (table.settings()[0]._searchPanes) {\n                return;\n            }\n            this._getState();\n            if (this.s.dt.page.info().serverSide) {\n                var hostSettings = this.s.dt.settings()[0];\n                // Listener to get the data into the server request before it is made\n                this.s.dt.on('preXhr.dtsps', function (e, settings, data) {\n                    if (hostSettings !== settings) {\n                        return;\n                    }\n                    if (data.searchPanes === undefined) {\n                        data.searchPanes = {};\n                    }\n                    if (data.searchPanes_null === undefined) {\n                        data.searchPanes_null = {};\n                    }\n                    var src;\n                    for (var _i = 0, _a = _this.s.selectionList; _i < _a.length; _i++) {\n                        var selection = _a[_i];\n                        src = _this.s.dt.column(selection.column).dataSrc();\n                        if (data.searchPanes[src] === undefined) {\n                            data.searchPanes[src] = {};\n                        }\n                        if (data.searchPanes_null[src] === undefined) {\n                            data.searchPanes_null[src] = {};\n                        }\n                        for (var i = 0; i < selection.rows.length; i++) {\n                            data.searchPanes[src][i] = selection.rows[i];\n                            if (data.searchPanes[src][i] === null) {\n                                data.searchPanes_null[src][i] = true;\n                            }\n                        }\n                    }\n                    if (_this.s.selectionList.length > 0) {\n                        data.searchPanesLast = src;\n                    }\n                    // Config options that will change how the querying is done\n                    data.searchPanes_options = {\n                        cascade: _this.c.cascadePanes,\n                        viewCount: _this.c.viewCount,\n                        viewTotal: _this.c.viewTotal\n                    };\n                });\n            }\n            this._setXHR();\n            table.settings()[0]._searchPanes = this;\n            if (this.s.dt.settings()[0]._bInitComplete || fromPreInit) {\n                this._paneDeclare(table, paneSettings, opts);\n            }\n            else {\n                table.one('preInit.dtsps', function () {\n                    _this._paneDeclare(table, paneSettings, opts);\n                });\n            }\n            return this;\n        }\n        /**\n         * Clear the selections of all of the panes\n         */\n        SearchPanes.prototype.clearSelections = function () {\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.dtPane) {\n                    pane.s.scrollTop = pane.s.dtPane.table().node().parentNode.scrollTop;\n                }\n            }\n            // Load in all of the searchBoxes in the documents\n            var searches = this.dom.container.find('.' + this.classes.search.replace(/\\s+/g, '.'));\n            // For each searchBox set the input text to be empty and then trigger\n            // an input on them so that they no longer filter the panes\n            searches.each(function () {\n                $$1(this).val('').trigger('input');\n            });\n            // Clear the selectionList\n            this.s.selectionList = [];\n            var returnArray = [];\n            for (var _b = 0, _c = this.s.panes; _b < _c.length; _b++) {\n                var pane = _c[_b];\n                if (pane.s.dtPane) {\n                    returnArray.push(pane.clearPane());\n                }\n            }\n            return returnArray;\n        };\n        /**\n         * returns the container node for the searchPanes\n         */\n        SearchPanes.prototype.getNode = function () {\n            return this.dom.container;\n        };\n        /**\n         * rebuilds all of the panes\n         */\n        SearchPanes.prototype.rebuild = function (targetIdx, maintainSelection) {\n            if (targetIdx === void 0) { targetIdx = false; }\n            if (maintainSelection === void 0) { maintainSelection = false; }\n            this.dom.emptyMessage.detach();\n            // As a rebuild from scratch is required, empty the searchpanes container.\n            if (targetIdx === false) {\n                this.dom.panes.empty();\n            }\n            // Rebuild each pane individually, if a specific pane has been selected then only rebuild that one\n            var returnArray = [];\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (targetIdx === false || pane.s.index === targetIdx) {\n                    pane.clearData();\n                    pane.rebuildPane(this.s.dt.page.info().serverSide ?\n                        this.s.serverData :\n                        undefined, maintainSelection);\n                    this.dom.panes.append(pane.dom.container);\n                    returnArray.push(pane);\n                }\n            }\n            this._updateSelection();\n            // Attach panes, clear buttons, and title bar to the document\n            this._updateFilterCount();\n            this._attachPaneContainer();\n            this._initSelectionListeners(false);\n            // If the selections are to be maintained, then it is safe to assume that paging is also to be maintained\n            // Otherwise, the paging should be reset\n            this.s.dt.draw(!maintainSelection);\n            // Resize the panes incase there has been a change\n            this.resizePanes();\n            // If a single pane has been rebuilt then return only that pane\n            return returnArray.length === 1 ? returnArray[0] : returnArray;\n        };\n        /**\n         * Resizes all of the panes\n         */\n        SearchPanes.prototype.resizePanes = function () {\n            if (this.c.layout === 'auto') {\n                var contWidth = $$1(this.s.dt.searchPanes.container()).width();\n                var target = Math.floor(contWidth / this.s.minPaneWidth); // The neatest number of panes per row\n                var highest_1 = 1;\n                var highestmod_1 = 0;\n                // Get the indexes of all of the displayed panes\n                var dispIndex = [];\n                for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                    var pane = _a[_i];\n                    if (pane.s.displayed) {\n                        dispIndex.push(pane.s.index);\n                    }\n                }\n                var displayCount = dispIndex.length;\n                // If the neatest number is the number we have then use this.\n                if (target === displayCount) {\n                    highest_1 = target;\n                }\n                else {\n                    // Go from the target down and find the value with the most panes left over, this will be the best fit\n                    for (var ppr = target; ppr > 1; ppr--) {\n                        var rem = displayCount % ppr;\n                        if (rem === 0) {\n                            highest_1 = ppr;\n                            highestmod_1 = 0;\n                            break;\n                        }\n                        // If there are more left over at this amount of panes per row (ppr)\n                        // then it fits better so new values\n                        else if (rem > highestmod_1) {\n                            highest_1 = ppr;\n                            highestmod_1 = rem;\n                        }\n                    }\n                }\n                // If there is a perfect fit then none are to be wider\n                var widerIndexes_1 = highestmod_1 !== 0 ? dispIndex.slice(dispIndex.length - highestmod_1, dispIndex.length) : [];\n                this.s.panes.forEach(function (pane) {\n                    // Resize the pane with the new layout\n                    if (pane.s.displayed) {\n                        pane.resize('columns-' + (!widerIndexes_1.includes(pane.s.index) ? highest_1 : highestmod_1));\n                    }\n                });\n            }\n            else {\n                for (var _b = 0, _c = this.s.panes; _b < _c.length; _b++) {\n                    var pane = _c[_b];\n                    pane.adjustTopRow();\n                }\n            }\n            return this;\n        };\n        /**\n         * Holder method that is userd in SearchPanesST to set listeners that have an effect on other panes\n         *\n         * @param isPreselect boolean to indicate if the preselect array is to override the current selection list.\n         */\n        SearchPanes.prototype._initSelectionListeners = function (isPreselect) {\n            return;\n        };\n        /**\n         * Blank method that is overridden in SearchPanesST to retrieve the totals from the server data\n         */\n        SearchPanes.prototype._serverTotals = function () {\n            return;\n        };\n        /**\n         * Set's the xhr listener so that SP can extact appropriate data from the response\n         */\n        SearchPanes.prototype._setXHR = function () {\n            var _this = this;\n            var hostSettings = this.s.dt.settings()[0];\n            var run = function (json) {\n                if (json && json.searchPanes && json.searchPanes.options) {\n                    _this.s.serverData = json;\n                    _this.s.serverData.tableLength = json.recordsTotal;\n                    _this._serverTotals();\n                }\n            };\n            // We are using the xhr event to rebuild the panes if required due to viewTotal being enabled\n            // If viewTotal is not enabled then we simply update the data from the server\n            this.s.dt.on('xhr.dtsps', function (e, settings, json) {\n                if (hostSettings === settings) {\n                    run(json);\n                }\n            });\n            // Account for the initial JSON fetch having already completed\n            run(this.s.dt.ajax.json());\n        };\n        /**\n         * Set's the function that is to be performed when a state is loaded\n         *\n         * Overridden by the method in SearchPanesST\n         */\n        SearchPanes.prototype._stateLoadListener = function () {\n            var _this = this;\n            var hostSettings = this.s.dt.settings()[0];\n            this.s.dt.on('stateLoadParams.dtsps', function (e, settings, data) {\n                if (data.searchPanes === undefined || settings !== hostSettings) {\n                    return;\n                }\n                _this.clearSelections();\n                // Set the selection list for the panes so that the correct\n                // rows can be reselected and in the right order\n                _this.s.selectionList =\n                    data.searchPanes.selectionList ?\n                        data.searchPanes.selectionList :\n                        [];\n                // Find the panes that match from the state and the actual instance\n                if (data.searchPanes.panes) {\n                    for (var _i = 0, _a = data.searchPanes.panes; _i < _a.length; _i++) {\n                        var loadedPane = _a[_i];\n                        for (var _b = 0, _c = _this.s.panes; _b < _c.length; _b++) {\n                            var pane = _c[_b];\n                            if (loadedPane.id === pane.s.index && pane.s.dtPane) {\n                                // Set the value of the searchbox\n                                pane.dom.searchBox.val(loadedPane.searchTerm);\n                                // Set the value of the order\n                                pane.s.dtPane.order(loadedPane.order);\n                            }\n                        }\n                    }\n                }\n                _this._makeSelections(_this.s.selectionList);\n            });\n        };\n        /**\n         * Updates the selectionList when cascade is not in place\n         *\n         * Overridden in SearchPanesST\n         */\n        SearchPanes.prototype._updateSelection = function () {\n            this.s.selectionList = [];\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.dtPane) {\n                    var rows = pane.s.dtPane.rows({ selected: true }).data().toArray().map(function (el) { return el.filter; });\n                    if (rows.length) {\n                        this.s.selectionList.push({\n                            column: pane.s.index,\n                            rows: rows\n                        });\n                    }\n                }\n            }\n        };\n        /**\n         * Attach the panes, buttons and title to the document\n         */\n        SearchPanes.prototype._attach = function () {\n            var _this = this;\n            this.dom.titleRow\n                .removeClass(this.classes.hide)\n                .detach()\n                .append(this.dom.title);\n            // If the clear button is permitted attach it\n            if (this.c.clear) {\n                this.dom.clearAll\n                    .appendTo(this.dom.titleRow)\n                    .on('click.dtsps', function () { return _this.clearSelections(); });\n            }\n            if (this.c.collapse) {\n                this.dom.showAll.appendTo(this.dom.titleRow);\n                this.dom.collapseAll.appendTo(this.dom.titleRow);\n                this._setCollapseListener();\n            }\n            // Attach the container for each individual pane to the overall container\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                this.dom.panes.append(pane.dom.container);\n            }\n            // Attach everything to the document\n            this.dom.container\n                .text('')\n                .removeClass(this.classes.hide)\n                .append(this.dom.titleRow)\n                .append(this.dom.panes);\n            // WORKAROUND\n            this.s.panes.forEach(function (pane) { return pane.setListeners(); });\n            if ($$1('div.' + this.classes.container).length === 0) {\n                this.dom.container.prependTo(this.s.dt);\n            }\n        };\n        /**\n         * If there are no panes to display then this method is called to either\n         * display a message in their place or hide them completely.\n         */\n        SearchPanes.prototype._attachMessage = function () {\n            // Create a message to display on the screen\n            var message;\n            try {\n                message = this.s.dt.i18n('searchPanes.emptyPanes', this.c.i18n.emptyPanes);\n            }\n            catch (error) {\n                message = null;\n            }\n            // If the message is an empty string then searchPanes.emptyPanes is undefined,\n            // therefore the pane container should be removed from the display\n            if (message === null) {\n                this.dom.container.addClass(this.classes.hide);\n                this.dom.titleRow.removeClass(this.classes.hide);\n                return;\n            }\n            // Otherwise display the message\n            this.dom.container.removeClass(this.classes.hide);\n            this.dom.titleRow.addClass(this.classes.hide);\n            this.dom.emptyMessage.html(message).appendTo(this.dom.container);\n        };\n        /**\n         * Attaches the panes to the document and displays a message or hides if there are none\n         */\n        SearchPanes.prototype._attachPaneContainer = function () {\n            // If a pane is to be displayed then attach the normal pane output\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.displayed === true) {\n                    this._attach();\n                    return;\n                }\n            }\n            // Otherwise attach the custom message or remove the container from the display\n            this._attachMessage();\n        };\n        /**\n         * Checks which panes are collapsed and then performs relevant actions to the collapse/show all buttons\n         */\n        SearchPanes.prototype._checkCollapse = function () {\n            var disableClose = true;\n            var disableShow = true;\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.displayed) {\n                    // If the pane is not collapsed\n                    if (!pane.dom.collapseButton.hasClass(pane.classes.rotated)) {\n                        // Enable the collapse all button\n                        this.dom.collapseAll.removeClass(this.classes.disabledButton).removeAttr('disabled');\n                        disableClose = false;\n                    }\n                    else {\n                        // Otherwise enable the show all button\n                        this.dom.showAll.removeClass(this.classes.disabledButton).removeAttr('disabled');\n                        disableShow = false;\n                    }\n                }\n            }\n            // If this flag is still true, no panes are open so the close button should be disabled\n            if (disableClose) {\n                this.dom.collapseAll.addClass(this.classes.disabledButton).attr('disabled', 'true');\n            }\n            // If this flag is still true, no panes are closed so the show button should be disabled\n            if (disableShow) {\n                this.dom.showAll.addClass(this.classes.disabledButton).attr('disabled', 'true');\n            }\n        };\n        /**\n         * Attaches the message to the document but does not add any panes\n         */\n        SearchPanes.prototype._checkMessage = function () {\n            // If a pane is to be displayed then attach the normal pane output\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.displayed === true) {\n                    // Ensure that the empty message is removed if a pane is displayed\n                    this.dom.emptyMessage.detach();\n                    this.dom.titleRow.removeClass(this.classes.hide);\n                    return;\n                }\n            }\n            // Otherwise attach the custom message or remove the container from the display\n            this._attachMessage();\n        };\n        /**\n         * Collapses all of the panes\n         */\n        SearchPanes.prototype._collapseAll = function () {\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                pane.collapse();\n            }\n        };\n        /**\n         * Finds a pane based upon the name of that pane\n         *\n         * @param name string representing the name of the pane\n         * @returns SearchPane The pane which has that name\n         */\n        SearchPanes.prototype._findPane = function (name) {\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (name === pane.s.name) {\n                    return pane;\n                }\n            }\n        };\n        /**\n         * Gets the selection list from the previous state and stores it in the selectionList Property\n         */\n        SearchPanes.prototype._getState = function () {\n            var loadedFilter = this.s.dt.state.loaded();\n            if (loadedFilter && loadedFilter.searchPanes && loadedFilter.searchPanes.selectionList) {\n                this.s.selectionList = loadedFilter.searchPanes.selectionList;\n            }\n        };\n        SearchPanes.prototype._makeSelections = function (selectList) {\n            for (var _i = 0, selectList_1 = selectList; _i < selectList_1.length; _i++) {\n                var selection = selectList_1[_i];\n                var pane = void 0;\n                for (var _a = 0, _b = this.s.panes; _a < _b.length; _a++) {\n                    var p = _b[_a];\n                    if (p.s.index === selection.column) {\n                        pane = p;\n                        break;\n                    }\n                }\n                if (pane && pane.s.dtPane) {\n                    for (var j = 0; j < pane.s.dtPane.rows().data().toArray().length; j++) {\n                        if (selection.rows.includes(typeof pane.s.dtPane.row(j).data().filter === 'function' ?\n                            pane.s.dtPane.cell(j, 0).data() :\n                            pane.s.dtPane.row(j).data().filter)) {\n                            pane.s.dtPane.row(j).select();\n                        }\n                    }\n                    pane.updateTable();\n                }\n            }\n        };\n        /**\n         * Declares the instances of individual searchpanes dependant on the number of columns.\n         * It is necessary to run this once preInit has completed otherwise no panes will be\n         * created as the column count will be 0.\n         *\n         * @param table the DataTable api for the parent table\n         * @param paneSettings the settings passed into the constructor\n         * @param opts the options passed into the constructor\n         */\n        SearchPanes.prototype._paneDeclare = function (table, paneSettings, opts) {\n            var _this = this;\n            // Create Panes\n            table\n                .columns(this.c.columns.length > 0 ? this.c.columns : undefined)\n                .eq(0)\n                .each(function (idx) {\n                _this.s.panes.push(new _this.s.paneClass(paneSettings, opts, idx, _this.dom.panes));\n            });\n            // If there is any extra custom panes defined then create panes for them too\n            var colCount = table.columns().eq(0).toArray().length;\n            for (var i = 0; i < this.c.panes.length; i++) {\n                var id = colCount + i;\n                this.s.panes.push(new this.s.paneClass(paneSettings, opts, id, this.dom.panes, this.c.panes[i]));\n            }\n            // If a custom ordering is being used\n            if (this.c.order.length > 0) {\n                // Make a new Array of panes based upon the order\n                this.s.panes = this.c.order.map(function (name) { return _this._findPane(name); });\n            }\n            // If this internal property is true then the DataTable has been initialised already\n            if (this.s.dt.settings()[0]._bInitComplete) {\n                this._startup(table);\n            }\n            else {\n                // Otherwise add the paneStartup function to the list of functions\n                // that are to be run when the table is initialised. This will garauntee that the\n                // panes are initialised before the init event and init Complete callback is fired\n                this.s.dt.settings()[0].aoInitComplete.push({\n                    fn: function () { return _this._startup(table); }\n                });\n            }\n        };\n        /**\n         * Sets the listeners for the collapse and show all buttons\n         * Also sets and performs checks on current panes to see if they are collapsed\n         */\n        SearchPanes.prototype._setCollapseListener = function () {\n            var _this = this;\n            this.dom.collapseAll.on('click.dtsps', function () {\n                _this._collapseAll();\n                _this.dom.collapseAll.addClass(_this.classes.disabledButton).attr('disabled', 'true');\n                _this.dom.showAll.removeClass(_this.classes.disabledButton).removeAttr('disabled');\n                _this.s.dt.state.save();\n            });\n            this.dom.showAll.on('click.dtsps', function () {\n                _this._showAll();\n                _this.dom.showAll.addClass(_this.classes.disabledButton).attr('disabled', 'true');\n                _this.dom.collapseAll.removeClass(_this.classes.disabledButton).removeAttr('disabled');\n                _this.s.dt.state.save();\n            });\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                // We want to make the same check whenever there is a collapse/expand\n                pane.dom.topRow.on('collapse.dtsps', function () { return _this._checkCollapse(); });\n            }\n            this._checkCollapse();\n        };\n        /**\n         * Shows all of the panes\n         */\n        SearchPanes.prototype._showAll = function () {\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                pane.show();\n            }\n        };\n        /**\n         * Initialises the tables previous/preset selections and initialises callbacks for events\n         *\n         * @param table the parent table for which the searchPanes are being created\n         */\n        SearchPanes.prototype._startup = function (table) {\n            var _this = this;\n            // Attach clear button and title bar to the document\n            this._attach();\n            this.dom.panes.empty();\n            var hostSettings = this.s.dt.settings()[0];\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                pane.rebuildPane(Object.keys(this.s.serverData).length > 0 ? this.s.serverData : undefined);\n                this.dom.panes.append(pane.dom.container);\n            }\n            // If the layout is set to auto then the panes need to be resized to their best fit\n            if (this.c.layout === 'auto') {\n                this.resizePanes();\n            }\n            var loadedFilter = this.s.dt.state.loaded();\n            // Reset the paging if that has been saved in the state\n            if (!this.s.stateRead && loadedFilter) {\n                this.s.dt\n                    .page(loadedFilter.start / this.s.dt.page.len())\n                    .draw('page');\n            }\n            this.s.stateRead = true;\n            this._checkMessage();\n            // When a draw is called on the DataTable, update all of the panes incase the data in the DataTable has changed\n            table.on('preDraw.dtsps', function () {\n                // Check that the panes are not updating to avoid infinite loops\n                // Also check that this draw is not due to paging\n                if (!_this.s.updating && !_this.s.paging) {\n                    _this._updateFilterCount();\n                    _this._updateSelection();\n                }\n                // Paging flag reset - we only need to dodge the draw once\n                _this.s.paging = false;\n            });\n            $$1(window).on('resize.dtsps', dataTable$1.util.throttle(function () { return _this.resizePanes(); }));\n            // Whenever a state save occurs store the selection list in the state object\n            this.s.dt.on('stateSaveParams.dtsps', function (e, settings, data) {\n                if (settings !== hostSettings) {\n                    return;\n                }\n                if (data.searchPanes === undefined) {\n                    data.searchPanes = {};\n                }\n                data.searchPanes.selectionList = _this.s.selectionList;\n            });\n            this._stateLoadListener();\n            // Listener for paging on main table\n            table.off('page.dtsps page-nc.dtsps').on('page.dtsps page-nc.dtsps', function (e, s) {\n                _this.s.paging = true;\n                // This is an indicator to any selection tracking classes that paging has occured\n                // It has to happen here so that we don't stack event listeners unnecessarily\n                // The value is only ever set back to false in the SearchPanesST class\n                // Equally it is never read in this class\n                _this.s.pagingST = true;\n                _this.s.page = _this.s.dt.page();\n            });\n            if (this.s.dt.page.info().serverSide) {\n                table.off('preXhr.dtsps').on('preXhr.dtsps', function (e, settings, data) {\n                    if (settings !== hostSettings) {\n                        return;\n                    }\n                    if (!data.searchPanes) {\n                        data.searchPanes = {};\n                    }\n                    if (!data.searchPanes_null) {\n                        data.searchPanes_null = {};\n                    }\n                    // Count how many filters are being applied\n                    var filterCount = 0;\n                    for (var _i = 0, _a = _this.s.panes; _i < _a.length; _i++) {\n                        var pane = _a[_i];\n                        var src = _this.s.dt.column(pane.s.index).dataSrc();\n                        if (!data.searchPanes[src]) {\n                            data.searchPanes[src] = {};\n                        }\n                        if (!data.searchPanes_null[src]) {\n                            data.searchPanes_null[src] = {};\n                        }\n                        if (pane.s.dtPane) {\n                            var rowData = pane.s.dtPane.rows({ selected: true }).data().toArray();\n                            for (var i = 0; i < rowData.length; i++) {\n                                data.searchPanes[src][i] = rowData[i].filter;\n                                if (!data.searchPanes[src][i]) {\n                                    data.searchPanes_null[src][i] = true;\n                                }\n                                filterCount++;\n                            }\n                        }\n                    }\n                    // If there is a filter to be applied, then we need to read from the start of the result set\n                    // and set the paging to 0. This matches the behaviour of client side processing\n                    if (filterCount > 0) {\n                        // If the number of filters has changed we need to read from the start of the\n                        // result set and reset the paging\n                        if (filterCount !== _this.s.filterCount) {\n                            data.start = 0;\n                            _this.s.page = 0;\n                        }\n                        // Otherwise it is a paging request and we need to read from whatever the paging has been set to\n                        else {\n                            data.start = _this.s.page * _this.s.dt.page.len();\n                        }\n                        _this.s.dt.page(_this.s.page);\n                        _this.s.filterCount = filterCount;\n                    }\n                    if (_this.s.selectionList.length > 0) {\n                        data.searchPanesLast = _this.s.dt\n                            .column(_this.s.selectionList[_this.s.selectionList.length - 1].column)\n                            .dataSrc();\n                    }\n                    // Config options that will change how the querying is done\n                    data.searchPanes_options = {\n                        cascade: _this.c.cascadePanes,\n                        viewCount: _this.c.viewCount,\n                        viewTotal: _this.c.viewTotal\n                    };\n                });\n            }\n            else {\n                table.on('preXhr.dtsps', function () { return _this.s.panes.forEach(function (pane) { return pane.clearData(); }); });\n            }\n            // If the data is reloaded from the server then it is possible that it has changed completely,\n            // so we need to rebuild the panes\n            this.s.dt.on('xhr.dtsps', function (e, settings) {\n                if (settings.nTable !== _this.s.dt.table().node()) {\n                    return;\n                }\n                if (!_this.s.dt.page.info().serverSide) {\n                    var processing_1 = false;\n                    _this.s.dt.one('preDraw.dtsps', function () {\n                        if (processing_1) {\n                            return;\n                        }\n                        var page = _this.s.dt.page();\n                        processing_1 = true;\n                        _this.s.updating = true;\n                        _this.dom.panes.empty();\n                        for (var _i = 0, _a = _this.s.panes; _i < _a.length; _i++) {\n                            var pane = _a[_i];\n                            pane.clearData(); // Clears all of the bins and will mean that the data has to be re-read\n                            // Pass a boolean to say whether this is the last choice made for maintaining selections\n                            // when rebuilding\n                            pane.rebuildPane(undefined, true);\n                            _this.dom.panes.append(pane.dom.container);\n                        }\n                        if (!_this.s.dt.page.info().serverSide) {\n                            _this.s.dt.draw();\n                        }\n                        _this.s.updating = false;\n                        _this._updateSelection();\n                        _this._checkMessage();\n                        _this.s.dt.one('draw.dtsps', function () {\n                            _this.s.updating = true;\n                            _this.s.dt.page(page).draw(false);\n                            _this.s.updating = false;\n                        });\n                    });\n                }\n            });\n            // PreSelect any selections which have been defined using the preSelect option\n            var selectList = this.c.preSelect;\n            if (loadedFilter && loadedFilter.searchPanes && loadedFilter.searchPanes.selectionList) {\n                selectList = loadedFilter.searchPanes.selectionList;\n            }\n            this._makeSelections(selectList);\n            // Update the title bar to show how many filters have been selected\n            this._updateFilterCount();\n            // If the table is destroyed and restarted then clear the selections so that they do not persist.\n            table.on('destroy.dtsps', function (e, settings) {\n                if (settings !== hostSettings) {\n                    return;\n                }\n                for (var _i = 0, _a = _this.s.panes; _i < _a.length; _i++) {\n                    var pane = _a[_i];\n                    pane.destroy();\n                }\n                table.off('.dtsps');\n                _this.dom.showAll.off('.dtsps');\n                _this.dom.clearAll.off('.dtsps');\n                _this.dom.collapseAll.off('.dtsps');\n                $$1(table.table().node()).off('.dtsps');\n                _this.dom.container.detach();\n                _this.clearSelections();\n            });\n            if (this.c.collapse) {\n                this._setCollapseListener();\n            }\n            // When the clear All button has been pressed clear all of the selections in the panes\n            if (this.c.clear) {\n                this.dom.clearAll.on('click.dtsps', function () { return _this.clearSelections(); });\n            }\n            hostSettings._searchPanes = this;\n            // This state save is required so that state is maintained over multiple refreshes if no actions are made\n            this.s.dt.state.save();\n        };\n        /**\n         * Updates the number of filters that have been applied in the title\n         */\n        SearchPanes.prototype._updateFilterCount = function () {\n            var filterCount = 0;\n            // Add the number of all of the filters throughout the panes\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.dtPane) {\n                    filterCount += pane.getPaneCount();\n                }\n            }\n            // Run the message through the internationalisation method to improve readability\n            this.dom.title.html(this.s.dt.i18n('searchPanes.title', this.c.i18n.title, filterCount));\n            if (this.c.filterChanged && typeof this.c.filterChanged === 'function') {\n                this.c.filterChanged.call(this.s.dt, filterCount);\n            }\n            if (filterCount === 0) {\n                this.dom.clearAll.addClass(this.classes.disabledButton).attr('disabled', 'true');\n            }\n            else {\n                this.dom.clearAll.removeClass(this.classes.disabledButton).removeAttr('disabled');\n            }\n        };\n        SearchPanes.version = '2.2.0';\n        SearchPanes.classes = {\n            clear: 'dtsp-clear',\n            clearAll: 'dtsp-clearAll',\n            collapseAll: 'dtsp-collapseAll',\n            container: 'dtsp-searchPanes',\n            disabledButton: 'dtsp-disabledButton',\n            emptyMessage: 'dtsp-emptyMessage',\n            hide: 'dtsp-hidden',\n            panes: 'dtsp-panesContainer',\n            search: 'dtsp-search',\n            showAll: 'dtsp-showAll',\n            title: 'dtsp-title',\n            titleRow: 'dtsp-titleRow'\n        };\n        // Define SearchPanes default options\n        SearchPanes.defaults = {\n            cascadePanes: false,\n            clear: true,\n            collapse: true,\n            columns: [],\n            container: function (dt) {\n                return dt.table().container();\n            },\n            filterChanged: undefined,\n            i18n: {\n                clearMessage: 'Clear All',\n                clearPane: '&times;',\n                collapse: {\n                    0: 'SearchPanes',\n                    _: 'SearchPanes (%d)'\n                },\n                collapseMessage: 'Collapse All',\n                count: '{total}',\n                emptyMessage: '<em>No data</em>',\n                emptyPanes: 'No SearchPanes',\n                loadMessage: 'Loading Search Panes...',\n                showMessage: 'Show All',\n                title: 'Filters Active - %d'\n            },\n            layout: 'auto',\n            order: [],\n            panes: [],\n            preSelect: [],\n            viewCount: true,\n            viewTotal: false\n        };\n        return SearchPanes;\n    }());\n\n    var __extends = (window && window.__extends) || (function () {\n        var extendStatics = function (d, b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n                function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n            return extendStatics(d, b);\n        };\n        return function (d, b) {\n            extendStatics(d, b);\n            function __() { this.constructor = d; }\n            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n        };\n    })();\n    var SearchPanesST = /** @class */ (function (_super) {\n        __extends(SearchPanesST, _super);\n        function SearchPanesST(paneSettings, opts, fromPreInit) {\n            if (fromPreInit === void 0) { fromPreInit = false; }\n            var _this = this;\n            var paneClass;\n            if (opts.cascadePanes && opts.viewTotal) {\n                paneClass = SearchPaneCascadeViewTotal;\n            }\n            else if (opts.cascadePanes) {\n                paneClass = SearchPaneCascade;\n            }\n            else if (opts.viewTotal) {\n                paneClass = SearchPaneViewTotal;\n            }\n            _this = _super.call(this, paneSettings, opts, fromPreInit, paneClass) || this;\n            var dt = _this.s.dt;\n            var loadedFilter = dt.state.loaded();\n            var loadFn = function () { return _this._initSelectionListeners(true, loadedFilter && loadedFilter.searchPanes && loadedFilter.searchPanes.selectionList ?\n                loadedFilter.searchPanes.selectionList :\n                _this.c.preSelect); };\n            if (dt.settings()[0]._bInitComplete) {\n                loadFn();\n            }\n            else {\n                dt.off('init.dtsps').on('init.dtsps', loadFn);\n            }\n            return _this;\n        }\n        /**\n         * Ensures that the correct selection listeners are set for selection tracking\n         *\n         * @param preSelect Any values that are to be preselected\n         */\n        SearchPanesST.prototype._initSelectionListeners = function (isPreselect, preSelect) {\n            if (isPreselect === void 0) { isPreselect = true; }\n            if (preSelect === void 0) { preSelect = []; }\n            if (isPreselect) {\n                this.s.selectionList = preSelect;\n            }\n            // Set selection listeners for each pane\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.displayed) {\n                    pane.s.dtPane\n                        .off('select.dtsp')\n                        .on('select.dtsp', this._update(pane))\n                        .off('deselect.dtsp')\n                        .on('deselect.dtsp', this._updateTimeout(pane));\n                }\n            }\n            // Update on every draw\n            this.s.dt.off('draw.dtsps').on('draw.dtsps', this._update());\n            // Also update right now as table has just initialised\n            this._updateSelectionList();\n        };\n        /**\n         * Retrieve the total values from the server data\n         */\n        SearchPanesST.prototype._serverTotals = function () {\n            for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                var pane = _a[_i];\n                if (pane.s.colOpts.show) {\n                    var colTitle = this.s.dt.column(pane.s.index).dataSrc();\n                    var blockVT = true;\n                    // If any of the counts are not equal to the totals filtering must be active\n                    if (this.s.serverData.searchPanes.options[colTitle]) {\n                        for (var _b = 0, _c = this.s.serverData.searchPanes.options[colTitle]; _b < _c.length; _b++) {\n                            var data = _c[_b];\n                            if (data.total !== data.count) {\n                                blockVT = false;\n                                break;\n                            }\n                        }\n                    }\n                    // Set if filtering is present on the pane and populate the data arrays\n                    pane.s.filteringActive = !blockVT;\n                    pane._serverPopulate(this.s.serverData);\n                }\n            }\n        };\n        /**\n         * Set's the function that is to be performed when a state is loaded\n         *\n         * Overrides the method in SearchPanes\n         */\n        SearchPanesST.prototype._stateLoadListener = function () {\n            var _this = this;\n            var stateLoadFunction = function (e, settings, data) {\n                if (data.searchPanes === undefined) {\n                    return;\n                }\n                // Set the selection list for the panes so that the correct\n                // rows can be reselected and in the right order\n                _this.s.selectionList =\n                    data.searchPanes.selectionList ?\n                        data.searchPanes.selectionList :\n                        [];\n                // Find the panes that match from the state and the actual instance\n                if (data.searchPanes.panes) {\n                    for (var _i = 0, _a = data.searchPanes.panes; _i < _a.length; _i++) {\n                        var loadedPane = _a[_i];\n                        for (var _b = 0, _c = _this.s.panes; _b < _c.length; _b++) {\n                            var pane = _c[_b];\n                            if (loadedPane.id === pane.s.index && pane.s.dtPane) {\n                                // Set the value of the searchbox\n                                pane.dom.searchBox.val(loadedPane.searchTerm);\n                                // Set the value of the order\n                                pane.s.dtPane.order(loadedPane.order);\n                            }\n                        }\n                    }\n                }\n                _this._updateSelectionList();\n            };\n            this.s.dt.off('stateLoadParams.dtsps', stateLoadFunction).on('stateLoadParams.dtsps', stateLoadFunction);\n        };\n        /**\n         * Remove the function's actions when using cascade\n         *\n         * Overrides the method in SearchPanes\n         */\n        SearchPanesST.prototype._updateSelection = function () {\n            return;\n        };\n        /**\n         * Returns a function that updates the selection list based on a specific pane\n         * Also clears the timeout to stop the deselect from running\n         *\n         * @param pane the pane that is to have it's selections loaded\n         */\n        SearchPanesST.prototype._update = function (pane) {\n            var _this = this;\n            if (pane === void 0) { pane = undefined; }\n            return function () {\n                if (pane) {\n                    clearTimeout(pane.s.deselectTimeout);\n                }\n                _this._updateSelectionList(pane);\n            };\n        };\n        /**\n         * Returns a function that updates the selection list based on a specific pane\n         * Also sets a timeout incase a select is about to be made\n         *\n         * @param pane the pane that is to have it's selections loaded\n         */\n        SearchPanesST.prototype._updateTimeout = function (pane) {\n            var _this = this;\n            if (pane === void 0) { pane = undefined; }\n            return function () { return pane ?\n                pane.s.deselectTimeout = setTimeout(function () { return _this._updateSelectionList(pane); }, 50) :\n                _this._updateSelectionList(); };\n        };\n        /**\n         * Updates the selection list to include the latest selections for a given pane\n         *\n         * @param index The index of the pane that is to be updated\n         * @param selected Which rows are selected within the pane\n         */\n        SearchPanesST.prototype._updateSelectionList = function (paneIn) {\n            if (paneIn === void 0) { paneIn = undefined; }\n            // Bail if any of these flags are set\n            if (this.s.pagingST) {\n                // Reset pagingST flag\n                this.s.pagingST = false;\n                return;\n            }\n            else if (this.s.updating || paneIn && paneIn.s.serverSelecting) {\n                return;\n            }\n            if (paneIn !== undefined) {\n                if (this.s.dt.page.info().serverSide) {\n                    paneIn._updateSelection();\n                }\n                // Get filter values for all of the rows and the selections\n                var rows = paneIn.s.dtPane.rows({ selected: true }).data().toArray().map(function (el) { return el.filter; });\n                this.s.selectionList = this.s.selectionList.filter(function (selection) { return selection.column !== paneIn.s.index; });\n                if (rows.length > 0) {\n                    this.s.selectionList.push({\n                        column: paneIn.s.index,\n                        rows: rows\n                    });\n                    paneIn.dom.clear.removeClass(this.classes.disabledButton).removeAttr('disabled');\n                }\n                else {\n                    paneIn.dom.clear.addClass(this.classes.disabledButton).attr('disabled', 'true');\n                }\n                if (this.s.dt.page.info().serverSide) {\n                    this.s.dt.draw(false);\n                }\n            }\n            this._remakeSelections();\n            this._updateFilterCount();\n        };\n        /**\n         * Remake the selections that were present before new data or calculations have occured\n         */\n        SearchPanesST.prototype._remakeSelections = function () {\n            this.s.updating = true;\n            if (!this.s.dt.page.info().serverSide) {\n                var tmpSL = this.s.selectionList;\n                var anotherFilter = false;\n                this.clearSelections();\n                this.s.dt.draw(false);\n                // When there are no selections present if the length of the data does not match the searched data\n                // then another filter is present\n                if (this.s.dt.rows().toArray()[0].length > this.s.dt.rows({ search: 'applied' }).toArray()[0].length) {\n                    anotherFilter = true;\n                }\n                this.s.selectionList = tmpSL;\n                // Update the rows in each pane\n                for (var _i = 0, _a = this.s.panes; _i < _a.length; _i++) {\n                    var pane = _a[_i];\n                    if (pane.s.displayed) {\n                        pane.s.filteringActive = anotherFilter;\n                        pane.updateRows();\n                    }\n                }\n                for (var _b = 0, _c = this.s.selectionList; _b < _c.length; _b++) {\n                    var selection = _c[_b];\n                    var pane = void 0;\n                    for (var _d = 0, _e = this.s.panes; _d < _e.length; _d++) {\n                        var paneCheck = _e[_d];\n                        if (paneCheck.s.index === selection.column) {\n                            pane = paneCheck;\n                            break;\n                        }\n                    }\n                    if (!pane.s.dtPane) {\n                        continue;\n                    }\n                    var ids = pane.s.dtPane.rows().indexes().toArray();\n                    // Select the rows that are present in the selection list\n                    for (var i = 0; i < selection.rows.length; i++) {\n                        var rowFound = false;\n                        for (var _f = 0, ids_1 = ids; _f < ids_1.length; _f++) {\n                            var id = ids_1[_f];\n                            var currRow = pane.s.dtPane.row(id);\n                            var data = currRow.data();\n                            if (selection.rows[i] === data.filter) {\n                                currRow.select();\n                                rowFound = true;\n                            }\n                        }\n                        if (!rowFound) {\n                            selection.rows.splice(i, 1);\n                            i--;\n                        }\n                    }\n                    pane.s.selections = selection.rows;\n                    // If there are no rows selected then don't bother continuing past here\n                    // Will just increase processing time and skew the rows that are shown in the table\n                    if (selection.rows.length === 0) {\n                        continue;\n                    }\n                    // Update the table to display the current results\n                    this.s.dt.draw(false);\n                    var filteringActive = false;\n                    var filterCount = 0;\n                    var prevSelectedPanes = 0;\n                    var selectedPanes = 0;\n                    // Add the number of all of the filters throughout the panes\n                    for (var _g = 0, _h = this.s.panes; _g < _h.length; _g++) {\n                        var currPane = _h[_g];\n                        if (currPane.s.dtPane) {\n                            filterCount += currPane.getPaneCount();\n                            if (filterCount > prevSelectedPanes) {\n                                selectedPanes++;\n                                prevSelectedPanes = filterCount;\n                            }\n                        }\n                    }\n                    filteringActive = filterCount > 0;\n                    for (var _j = 0, _k = this.s.panes; _j < _k.length; _j++) {\n                        var currPane = _k[_j];\n                        if (currPane.s.displayed) {\n                            // Set the filtering active flag\n                            if (anotherFilter || pane.s.index !== currPane.s.index || !filteringActive) {\n                                currPane.s.filteringActive = filteringActive || anotherFilter;\n                            }\n                            else if (selectedPanes === 1) {\n                                currPane.s.filteringActive = false;\n                            }\n                            // Update the rows to show correct counts\n                            if (currPane.s.index !== pane.s.index) {\n                                currPane.updateRows();\n                            }\n                        }\n                    }\n                }\n                // Update table to show final search results\n                this.s.dt.draw(false);\n            }\n            else {\n                // Identify the last pane to have a change in selection\n                var pane = void 0;\n                if (this.s.selectionList.length > 0) {\n                    pane = this.s.panes[this.s.selectionList[this.s.selectionList.length - 1].column];\n                }\n                // Update the rows of all of the other panes\n                for (var _l = 0, _m = this.s.panes; _l < _m.length; _l++) {\n                    var currPane = _m[_l];\n                    if (currPane.s.displayed && (!pane || currPane.s.index !== pane.s.index)) {\n                        currPane.updateRows();\n                    }\n                }\n            }\n            this.s.updating = false;\n        };\n        return SearchPanesST;\n    }(SearchPanes));\n\n    /*! SearchPanes 2.2.0\n     * © SpryMedia Ltd - datatables.net/license\n     */\n    setJQuery$4($);\n    setJQuery($);\n    setJQuery$3($);\n    setJQuery$2($);\n    setJQuery$1($);\n    var dataTable = $.fn.dataTable;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchPanes = SearchPanes;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchPanes = SearchPanes;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchPanesST = SearchPanesST;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchPanesST = SearchPanesST;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchPane = SearchPane;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchPane = SearchPane;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchPaneViewTotal = SearchPaneViewTotal;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchPaneViewTotal = SearchPaneViewTotal;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchPaneCascade = SearchPaneCascade;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchPaneCascade = SearchPaneCascade;\n    // eslint-disable-next-line no-extra-parens\n    dataTable.SearchPaneCascadeViewTotal = SearchPaneCascadeViewTotal;\n    // eslint-disable-next-line no-extra-parens\n    DataTable.SearchPaneCascadeViewTotal = SearchPaneCascadeViewTotal;\n    // eslint-disable-next-line no-extra-parens\n    var apiRegister = $.fn.dataTable.Api.register;\n    apiRegister('searchPanes()', function () {\n        return this;\n    });\n    apiRegister('searchPanes.clearSelections()', function () {\n        return this.iterator('table', function (ctx) {\n            if (ctx._searchPanes) {\n                ctx._searchPanes.clearSelections();\n            }\n        });\n    });\n    apiRegister('searchPanes.rebuildPane()', function (targetIdx, maintainSelections) {\n        return this.iterator('table', function (ctx) {\n            if (ctx._searchPanes) {\n                ctx._searchPanes.rebuild(targetIdx, maintainSelections);\n            }\n        });\n    });\n    apiRegister('searchPanes.resizePanes()', function () {\n        var ctx = this.context[0];\n        return ctx._searchPanes ?\n            ctx._searchPanes.resizePanes() :\n            null;\n    });\n    apiRegister('searchPanes.container()', function () {\n        var ctx = this.context[0];\n        return ctx._searchPanes\n            ? ctx._searchPanes.getNode()\n            : null;\n    });\n    DataTable.ext.buttons.searchPanesClear = {\n        action: function (e, dt) {\n            dt.searchPanes.clearSelections();\n        },\n        text: 'Clear Panes'\n    };\n    DataTable.ext.buttons.searchPanes = {\n        action: function (e, dt, node, config) {\n            var _this = this;\n            if (!config._panes) {\n                // No SearchPanes on this button yet - initialise and show\n                this.processing(true);\n                setTimeout(function () {\n                    _buttonSourced(dt, node, config);\n                    _this.popover(config._panes.getNode(), {\n                        align: 'container',\n                        span: 'container'\n                    });\n                    config._panes.rebuild(undefined, true);\n                    _this.processing(false);\n                }, 10);\n            }\n            else {\n                // Already got SP - show it\n                this.popover(config._panes.getNode(), {\n                    align: 'container',\n                    span: 'container'\n                });\n                config._panes.rebuild(undefined, true);\n            }\n        },\n        init: function (dt, node, config) {\n            dt.button(node).text(config.text || dt.i18n('searchPanes.collapse', 'SearchPanes', 0));\n            // If state save is enabled, we need to initialise SP immediately\n            // to allow any saved state to be restored. Otherwise we can delay\n            // the init until needed by button press\n            if (dt.init().stateSave) {\n                _buttonSourced(dt, node, config);\n            }\n        },\n        config: {},\n        text: ''\n    };\n    function _buttonSourced(dt, node, config) {\n        var buttonOpts = $.extend({\n            filterChanged: function (count) {\n                dt.button(node).text(dt.i18n('searchPanes.collapse', dt.context[0].oLanguage.searchPanes !== undefined ?\n                    dt.context[0].oLanguage.searchPanes.collapse :\n                    dt.context[0]._searchPanes.c.i18n.collapse, count));\n            }\n        }, config.config);\n        var panes = buttonOpts && (buttonOpts.cascadePanes || buttonOpts.viewTotal) ?\n            new DataTable.SearchPanesST(dt, buttonOpts) :\n            new DataTable.SearchPanes(dt, buttonOpts);\n        dt.button(node).text(config.text || dt.i18n('searchPanes.collapse', panes.c.i18n.collapse, 0));\n        config._panes = panes;\n    }\n    function _init(settings, options, fromPre) {\n        if (options === void 0) { options = null; }\n        if (fromPre === void 0) { fromPre = false; }\n        var api = new dataTable.Api(settings);\n        var opts = options\n            ? options\n            : api.init().searchPanes || dataTable.defaults.searchPanes;\n        var searchPanes = opts && (opts.cascadePanes || opts.viewTotal) ?\n            new SearchPanesST(api, opts, fromPre) :\n            new SearchPanes(api, opts, fromPre);\n        var node = searchPanes.getNode();\n        return node;\n    }\n    // Attach a listener to the document which listens for DataTables initialisation\n    // events so we can automatically initialise\n    $(document).on('preInit.dt.dtsp', function (e, settings) {\n        if (e.namespace !== 'dt') {\n            return;\n        }\n        if (settings.oInit.searchPanes ||\n            DataTable.defaults.searchPanes) {\n            if (!settings._searchPanes) {\n                _init(settings, null, true);\n            }\n        }\n    });\n    // DataTables `dom` feature option\n    DataTable.ext.feature.push({\n        cFeature: 'P',\n        fnInit: _init\n    });\n    // DataTables 2 layout feature\n    if (DataTable.ext.features) {\n        DataTable.ext.features.register('searchPanes', _init);\n    }\n\n})();\n\n\nreturn DataTable;\n}));\n\n\n/*! Bootstrap 5 integration for DataTables' SearchPanes\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-searchpanes'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.SearchPanes ) {\n\t\t\t\trequire('datatables.net-searchpanes')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.SearchPane.classes, {\n    buttonGroup: 'btn-group',\n    disabledButton: 'disabled',\n    narrow: 'col',\n    pane: {\n        container: 'table'\n    },\n    paneButton: 'btn btn-subtle',\n    pill: 'badge rounded-pill bg-secondary',\n    search: 'form-control search',\n    table: 'table table-sm table-borderless',\n    topRow: 'dtsp-topRow'\n});\n$.extend(true, DataTable.SearchPanes.classes, {\n    clearAll: 'dtsp-clearAll btn btn-subtle',\n    collapseAll: 'dtsp-collapseAll btn btn-subtle',\n    container: 'dtsp-searchPanes',\n    disabledButton: 'disabled',\n    panes: 'dtsp-panes dtsp-panesContainer',\n    search: DataTable.SearchPane.classes.search,\n    showAll: 'dtsp-showAll btn btn-subtle',\n    title: 'dtsp-title',\n    titleRow: 'dtsp-titleRow'\n});\n\n\nreturn DataTable;\n}));\n\n\n/*! Select for DataTables 1.7.0\n * © SpryMedia Ltd - datatables.net/license/mit\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n// Version information for debugger\nDataTable.select = {};\n\nDataTable.select.version = '1.7.0';\n\nDataTable.select.init = function (dt) {\n\tvar ctx = dt.settings()[0];\n\n\tif (ctx._select) {\n\t\treturn;\n\t}\n\n\tvar savedSelected = dt.state.loaded();\n\n\tvar selectAndSave = function (e, settings, data) {\n\t\tif (data === null || data.select === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear any currently selected rows, before restoring state\n\t\t// None will be selected on first initialisation\n\t\tif (dt.rows({ selected: true }).any()) {\n\t\t\tdt.rows().deselect();\n\t\t}\n\t\tif (data.select.rows !== undefined) {\n\t\t\tdt.rows(data.select.rows).select();\n\t\t}\n\n\t\tif (dt.columns({ selected: true }).any()) {\n\t\t\tdt.columns().deselect();\n\t\t}\n\t\tif (data.select.columns !== undefined) {\n\t\t\tdt.columns(data.select.columns).select();\n\t\t}\n\n\t\tif (dt.cells({ selected: true }).any()) {\n\t\t\tdt.cells().deselect();\n\t\t}\n\t\tif (data.select.cells !== undefined) {\n\t\t\tfor (var i = 0; i < data.select.cells.length; i++) {\n\t\t\t\tdt.cell(data.select.cells[i].row, data.select.cells[i].column).select();\n\t\t\t}\n\t\t}\n\n\t\tdt.state.save();\n\t};\n\n\tdt.on('stateSaveParams', function (e, settings, data) {\n\t\tdata.select = {};\n\t\tdata.select.rows = dt.rows({ selected: true }).ids(true).toArray();\n\t\tdata.select.columns = dt.columns({ selected: true })[0];\n\t\tdata.select.cells = dt.cells({ selected: true })[0].map(function (coords) {\n\t\t\treturn { row: dt.row(coords.row).id(true), column: coords.column };\n\t\t});\n\t})\n\t\t.on('stateLoadParams', selectAndSave)\n\t\t.one('init', function () {\n\t\t\tselectAndSave(undefined, undefined, savedSelected);\n\t\t});\n\n\tvar init = ctx.oInit.select;\n\tvar defaults = DataTable.defaults.select;\n\tvar opts = init === undefined ? defaults : init;\n\n\t// Set defaults\n\tvar items = 'row';\n\tvar style = 'api';\n\tvar blurable = false;\n\tvar toggleable = true;\n\tvar info = true;\n\tvar selector = 'td, th';\n\tvar className = 'selected';\n\tvar setStyle = false;\n\n\tctx._select = {};\n\n\t// Initialisation customisations\n\tif (opts === true) {\n\t\tstyle = 'os';\n\t\tsetStyle = true;\n\t}\n\telse if (typeof opts === 'string') {\n\t\tstyle = opts;\n\t\tsetStyle = true;\n\t}\n\telse if ($.isPlainObject(opts)) {\n\t\tif (opts.blurable !== undefined) {\n\t\t\tblurable = opts.blurable;\n\t\t}\n\n\t\tif (opts.toggleable !== undefined) {\n\t\t\ttoggleable = opts.toggleable;\n\t\t}\n\n\t\tif (opts.info !== undefined) {\n\t\t\tinfo = opts.info;\n\t\t}\n\n\t\tif (opts.items !== undefined) {\n\t\t\titems = opts.items;\n\t\t}\n\n\t\tif (opts.style !== undefined) {\n\t\t\tstyle = opts.style;\n\t\t\tsetStyle = true;\n\t\t}\n\t\telse {\n\t\t\tstyle = 'os';\n\t\t\tsetStyle = true;\n\t\t}\n\n\t\tif (opts.selector !== undefined) {\n\t\t\tselector = opts.selector;\n\t\t}\n\n\t\tif (opts.className !== undefined) {\n\t\t\tclassName = opts.className;\n\t\t}\n\t}\n\n\tdt.select.selector(selector);\n\tdt.select.items(items);\n\tdt.select.style(style);\n\tdt.select.blurable(blurable);\n\tdt.select.toggleable(toggleable);\n\tdt.select.info(info);\n\tctx._select.className = className;\n\n\t// Sort table based on selected rows. Requires Select Datatables extension\n\t$.fn.dataTable.ext.order['select-checkbox'] = function (settings, col) {\n\t\treturn this.api()\n\t\t\t.column(col, { order: 'index' })\n\t\t\t.nodes()\n\t\t\t.map(function (td) {\n\t\t\t\tif (settings._select.items === 'row') {\n\t\t\t\t\treturn $(td).parent().hasClass(settings._select.className);\n\t\t\t\t}\n\t\t\t\telse if (settings._select.items === 'cell') {\n\t\t\t\t\treturn $(td).hasClass(settings._select.className);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t};\n\n\t// If the init options haven't enabled select, but there is a selectable\n\t// class name, then enable\n\tif (!setStyle && $(dt.table().node()).hasClass('selectable')) {\n\t\tdt.select.style('os');\n\t}\n};\n\n/*\n\nSelect is a collection of API methods, event handlers, event emitters and\nbuttons (for the `Buttons` extension) for DataTables. It provides the following\nfeatures, with an overview of how they are implemented:\n\n## Selection of rows, columns and cells. Whether an item is selected or not is\n   stored in:\n\n* rows: a `_select_selected` property which contains a boolean value of the\n  DataTables' `aoData` object for each row\n* columns: a `_select_selected` property which contains a boolean value of the\n  DataTables' `aoColumns` object for each column\n* cells: a `_selected_cells` property which contains an array of boolean values\n  of the `aoData` object for each row. The array is the same length as the\n  columns array, with each element of it representing a cell.\n\nThis method of using boolean flags allows Select to operate when nodes have not\nbeen created for rows / cells (DataTables' defer rendering feature).\n\n## API methods\n\nA range of API methods are available for triggering selection and de-selection\nof rows. Methods are also available to configure the selection events that can\nbe triggered by an end user (such as which items are to be selected). To a large\nextent, these of API methods *is* Select. It is basically a collection of helper\nfunctions that can be used to select items in a DataTable.\n\nConfiguration of select is held in the object `_select` which is attached to the\nDataTables settings object on initialisation. Select being available on a table\nis not optional when Select is loaded, but its default is for selection only to\nbe available via the API - so the end user wouldn't be able to select rows\nwithout additional configuration.\n\nThe `_select` object contains the following properties:\n\n```\n{\n\titems:string       - Can be `rows`, `columns` or `cells`. Defines what item \n\t                     will be selected if the user is allowed to activate row\n\t                     selection using the mouse.\n\tstyle:string       - Can be `none`, `single`, `multi` or `os`. Defines the\n\t                     interaction style when selecting items\n\tblurable:boolean   - If row selection can be cleared by clicking outside of\n\t                     the table\n\ttoggleable:boolean - If row selection can be cancelled by repeated clicking\n\t                     on the row\n\tinfo:boolean       - If the selection summary should be shown in the table\n\t                     information elements\n}\n```\n\nIn addition to the API methods, Select also extends the DataTables selector\noptions for rows, columns and cells adding a `selected` option to the selector\noptions object, allowing the developer to select only selected items or\nunselected items.\n\n## Mouse selection of items\n\nClicking on items can be used to select items. This is done by a simple event\nhandler that will select the items using the API methods.\n\n */\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Local functions\n */\n\n/**\n * Add one or more cells to the selection when shift clicking in OS selection\n * style cell selection.\n *\n * Cell range is more complicated than row and column as we want to select\n * in the visible grid rather than by index in sequence. For example, if you\n * click first in cell 1-1 and then shift click in 2-2 - cells 1-2 and 2-1\n * should also be selected (and not 1-3, 1-4. etc)\n *\n * @param  {DataTable.Api} dt   DataTable\n * @param  {object}        idx  Cell index to select to\n * @param  {object}        last Cell index to select from\n * @private\n */\nfunction cellRange(dt, idx, last) {\n\tvar indexes;\n\tvar columnIndexes;\n\tvar rowIndexes;\n\tvar selectColumns = function (start, end) {\n\t\tif (start > end) {\n\t\t\tvar tmp = end;\n\t\t\tend = start;\n\t\t\tstart = tmp;\n\t\t}\n\n\t\tvar record = false;\n\t\treturn dt\n\t\t\t.columns(':visible')\n\t\t\t.indexes()\n\t\t\t.filter(function (i) {\n\t\t\t\tif (i === start) {\n\t\t\t\t\trecord = true;\n\t\t\t\t}\n\n\t\t\t\tif (i === end) {\n\t\t\t\t\t// not else if, as start might === end\n\t\t\t\t\trecord = false;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn record;\n\t\t\t});\n\t};\n\n\tvar selectRows = function (start, end) {\n\t\tvar indexes = dt.rows({ search: 'applied' }).indexes();\n\n\t\t// Which comes first - might need to swap\n\t\tif (indexes.indexOf(start) > indexes.indexOf(end)) {\n\t\t\tvar tmp = end;\n\t\t\tend = start;\n\t\t\tstart = tmp;\n\t\t}\n\n\t\tvar record = false;\n\t\treturn indexes.filter(function (i) {\n\t\t\tif (i === start) {\n\t\t\t\trecord = true;\n\t\t\t}\n\n\t\t\tif (i === end) {\n\t\t\t\trecord = false;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn record;\n\t\t});\n\t};\n\n\tif (!dt.cells({ selected: true }).any() && !last) {\n\t\t// select from the top left cell to this one\n\t\tcolumnIndexes = selectColumns(0, idx.column);\n\t\trowIndexes = selectRows(0, idx.row);\n\t}\n\telse {\n\t\t// Get column indexes between old and new\n\t\tcolumnIndexes = selectColumns(last.column, idx.column);\n\t\trowIndexes = selectRows(last.row, idx.row);\n\t}\n\n\tindexes = dt.cells(rowIndexes, columnIndexes).flatten();\n\n\tif (!dt.cells(idx, { selected: true }).any()) {\n\t\t// Select range\n\t\tdt.cells(indexes).select();\n\t}\n\telse {\n\t\t// Deselect range\n\t\tdt.cells(indexes).deselect();\n\t}\n}\n\n/**\n * Disable mouse selection by removing the selectors\n *\n * @param {DataTable.Api} dt DataTable to remove events from\n * @private\n */\nfunction disableMouseSelection(dt) {\n\tvar ctx = dt.settings()[0];\n\tvar selector = ctx._select.selector;\n\n\t$(dt.table().container())\n\t\t.off('mousedown.dtSelect', selector)\n\t\t.off('mouseup.dtSelect', selector)\n\t\t.off('click.dtSelect', selector);\n\n\t$('body').off('click.dtSelect' + _safeId(dt.table().node()));\n}\n\n/**\n * Attach mouse listeners to the table to allow mouse selection of items\n *\n * @param {DataTable.Api} dt DataTable to remove events from\n * @private\n */\nfunction enableMouseSelection(dt) {\n\tvar container = $(dt.table().container());\n\tvar ctx = dt.settings()[0];\n\tvar selector = ctx._select.selector;\n\tvar matchSelection;\n\n\tcontainer\n\t\t.on('mousedown.dtSelect', selector, function (e) {\n\t\t\t// Disallow text selection for shift clicking on the table so multi\n\t\t\t// element selection doesn't look terrible!\n\t\t\tif (e.shiftKey || e.metaKey || e.ctrlKey) {\n\t\t\t\tcontainer\n\t\t\t\t\t.css('-moz-user-select', 'none')\n\t\t\t\t\t.one('selectstart.dtSelect', selector, function () {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (window.getSelection) {\n\t\t\t\tmatchSelection = window.getSelection();\n\t\t\t}\n\t\t})\n\t\t.on('mouseup.dtSelect', selector, function () {\n\t\t\t// Allow text selection to occur again, Mozilla style (tested in FF\n\t\t\t// 35.0.1 - still required)\n\t\t\tcontainer.css('-moz-user-select', '');\n\t\t})\n\t\t.on('click.dtSelect', selector, function (e) {\n\t\t\tvar items = dt.select.items();\n\t\t\tvar idx;\n\n\t\t\t// If text was selected (click and drag), then we shouldn't change\n\t\t\t// the row's selected state\n\t\t\tif (matchSelection) {\n\t\t\t\tvar selection = window.getSelection();\n\n\t\t\t\t// If the element that contains the selection is not in the table, we can ignore it\n\t\t\t\t// This can happen if the developer selects text from the click event\n\t\t\t\tif (\n\t\t\t\t\t!selection.anchorNode ||\n\t\t\t\t\t$(selection.anchorNode).closest('table')[0] === dt.table().node()\n\t\t\t\t) {\n\t\t\t\t\tif (selection !== matchSelection) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar ctx = dt.settings()[0];\n\t\t\tvar wrapperClass = dt.settings()[0].oClasses.sWrapper.trim().replace(/ +/g, '.');\n\n\t\t\t// Ignore clicks inside a sub-table\n\t\t\tif ($(e.target).closest('div.' + wrapperClass)[0] != dt.table().container()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar cell = dt.cell($(e.target).closest('td, th'));\n\n\t\t\t// Check the cell actually belongs to the host DataTable (so child\n\t\t\t// rows, etc, are ignored)\n\t\t\tif (!cell.any()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar event = $.Event('user-select.dt');\n\t\t\teventTrigger(dt, event, [items, cell, e]);\n\n\t\t\tif (event.isDefaultPrevented()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar cellIndex = cell.index();\n\t\t\tif (items === 'row') {\n\t\t\t\tidx = cellIndex.row;\n\t\t\t\ttypeSelect(e, dt, ctx, 'row', idx);\n\t\t\t}\n\t\t\telse if (items === 'column') {\n\t\t\t\tidx = cell.index().column;\n\t\t\t\ttypeSelect(e, dt, ctx, 'column', idx);\n\t\t\t}\n\t\t\telse if (items === 'cell') {\n\t\t\t\tidx = cell.index();\n\t\t\t\ttypeSelect(e, dt, ctx, 'cell', idx);\n\t\t\t}\n\n\t\t\tctx._select_lastCell = cellIndex;\n\t\t});\n\n\t// Blurable\n\t$('body').on('click.dtSelect' + _safeId(dt.table().node()), function (e) {\n\t\tif (ctx._select.blurable) {\n\t\t\t// If the click was inside the DataTables container, don't blur\n\t\t\tif ($(e.target).parents().filter(dt.table().container()).length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Ignore elements which have been removed from the DOM (i.e. paging\n\t\t\t// buttons)\n\t\t\tif ($(e.target).parents('html').length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Don't blur in Editor form\n\t\t\tif ($(e.target).parents('div.DTE').length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar event = $.Event('select-blur.dt');\n\t\t\teventTrigger(dt, event, [e.target, e]);\n\n\t\t\tif (event.isDefaultPrevented()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclear(ctx, true);\n\t\t}\n\t});\n}\n\n/**\n * Trigger an event on a DataTable\n *\n * @param {DataTable.Api} api      DataTable to trigger events on\n * @param  {boolean}      selected true if selected, false if deselected\n * @param  {string}       type     Item type acting on\n * @param  {boolean}      any      Require that there are values before\n *     triggering\n * @private\n */\nfunction eventTrigger(api, type, args, any) {\n\tif (any && !api.flatten().length) {\n\t\treturn;\n\t}\n\n\tif (typeof type === 'string') {\n\t\ttype = type + '.dt';\n\t}\n\n\targs.unshift(api);\n\n\t$(api.table().node()).trigger(type, args);\n}\n\n/**\n * Update the information element of the DataTable showing information about the\n * items selected. This is done by adding tags to the existing text\n *\n * @param {DataTable.Api} api DataTable to update\n * @private\n */\nfunction info(api) {\n\tvar ctx = api.settings()[0];\n\n\tif (!ctx._select.info || !ctx.aanFeatures.i) {\n\t\treturn;\n\t}\n\n\tif (api.select.style() === 'api') {\n\t\treturn;\n\t}\n\n\tvar rows = api.rows({ selected: true }).flatten().length;\n\tvar columns = api.columns({ selected: true }).flatten().length;\n\tvar cells = api.cells({ selected: true }).flatten().length;\n\n\tvar add = function (el, name, num) {\n\t\tel.append(\n\t\t\t$('<span class=\"select-item\"/>').append(\n\t\t\t\tapi.i18n(\n\t\t\t\t\t'select.' + name + 's',\n\t\t\t\t\t{ _: '%d ' + name + 's selected', 0: '', 1: '1 ' + name + ' selected' },\n\t\t\t\t\tnum\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t};\n\n\t// Internal knowledge of DataTables to loop over all information elements\n\t$.each(ctx.aanFeatures.i, function (i, el) {\n\t\tel = $(el);\n\n\t\tvar output = $('<span class=\"select-info\"/>');\n\t\tadd(output, 'row', rows);\n\t\tadd(output, 'column', columns);\n\t\tadd(output, 'cell', cells);\n\n\t\tvar exisiting = el.children('span.select-info');\n\t\tif (exisiting.length) {\n\t\t\texisiting.remove();\n\t\t}\n\n\t\tif (output.text() !== '') {\n\t\t\tel.append(output);\n\t\t}\n\t});\n}\n\n/**\n * Initialisation of a new table. Attach event handlers and callbacks to allow\n * Select to operate correctly.\n *\n * This will occur _after_ the initial DataTables initialisation, although\n * before Ajax data is rendered, if there is ajax data\n *\n * @param  {DataTable.settings} ctx Settings object to operate on\n * @private\n */\nfunction init(ctx) {\n\tvar api = new DataTable.Api(ctx);\n\tctx._select_init = true;\n\n\t// Row callback so that classes can be added to rows and cells if the item\n\t// was selected before the element was created. This will happen with the\n\t// `deferRender` option enabled.\n\t//\n\t// This method of attaching to `aoRowCreatedCallback` is a hack until\n\t// DataTables has proper events for row manipulation If you are reviewing\n\t// this code to create your own plug-ins, please do not do this!\n\tctx.aoRowCreatedCallback.push({\n\t\tfn: function (row, data, index) {\n\t\t\tvar i, ien;\n\t\t\tvar d = ctx.aoData[index];\n\n\t\t\t// Row\n\t\t\tif (d._select_selected) {\n\t\t\t\t$(row).addClass(ctx._select.className);\n\t\t\t}\n\n\t\t\t// Cells and columns - if separated out, we would need to do two\n\t\t\t// loops, so it makes sense to combine them into a single one\n\t\t\tfor (i = 0, ien = ctx.aoColumns.length; i < ien; i++) {\n\t\t\t\tif (\n\t\t\t\t\tctx.aoColumns[i]._select_selected ||\n\t\t\t\t\t(d._selected_cells && d._selected_cells[i])\n\t\t\t\t) {\n\t\t\t\t\t$(d.anCells[i]).addClass(ctx._select.className);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsName: 'select-deferRender'\n\t});\n\n\t// On Ajax reload we want to reselect all rows which are currently selected,\n\t// if there is an rowId (i.e. a unique value to identify each row with)\n\tapi.on('preXhr.dt.dtSelect', function (e, settings) {\n\t\tif (settings !== api.settings()[0]) {\n\t\t\t// Not triggered by our DataTable!\n\t\t\treturn;\n\t\t}\n\n\t\t// note that column selection doesn't need to be cached and then\n\t\t// reselected, as they are already selected\n\t\tvar rows = api\n\t\t\t.rows({ selected: true })\n\t\t\t.ids(true)\n\t\t\t.filter(function (d) {\n\t\t\t\treturn d !== undefined;\n\t\t\t});\n\n\t\tvar cells = api\n\t\t\t.cells({ selected: true })\n\t\t\t.eq(0)\n\t\t\t.map(function (cellIdx) {\n\t\t\t\tvar id = api.row(cellIdx.row).id(true);\n\t\t\t\treturn id ? { row: id, column: cellIdx.column } : undefined;\n\t\t\t})\n\t\t\t.filter(function (d) {\n\t\t\t\treturn d !== undefined;\n\t\t\t});\n\n\t\t// On the next draw, reselect the currently selected items\n\t\tapi.one('draw.dt.dtSelect', function () {\n\t\t\tapi.rows(rows).select();\n\n\t\t\t// `cells` is not a cell index selector, so it needs a loop\n\t\t\tif (cells.any()) {\n\t\t\t\tcells.each(function (id) {\n\t\t\t\t\tapi.cells(id.row, id.column).select();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\t// Update the table information element with selected item summary\n\tapi.on('draw.dtSelect.dt select.dtSelect.dt deselect.dtSelect.dt info.dt', function () {\n\t\tinfo(api);\n\t\tapi.state.save();\n\t});\n\n\t// Clean up and release\n\tapi.on('destroy.dtSelect', function () {\n\t\t// Remove class directly rather than calling deselect - which would trigger events\n\t\t$(api.rows({ selected: true }).nodes()).removeClass(api.settings()[0]._select.className);\n\n\t\tdisableMouseSelection(api);\n\t\tapi.off('.dtSelect');\n\t\t$('body').off('.dtSelect' + _safeId(api.table().node()));\n\t});\n}\n\n/**\n * Add one or more items (rows or columns) to the selection when shift clicking\n * in OS selection style\n *\n * @param  {DataTable.Api} dt   DataTable\n * @param  {string}        type Row or column range selector\n * @param  {object}        idx  Item index to select to\n * @param  {object}        last Item index to select from\n * @private\n */\nfunction rowColumnRange(dt, type, idx, last) {\n\t// Add a range of rows from the last selected row to this one\n\tvar indexes = dt[type + 's']({ search: 'applied' }).indexes();\n\tvar idx1 = $.inArray(last, indexes);\n\tvar idx2 = $.inArray(idx, indexes);\n\n\tif (!dt[type + 's']({ selected: true }).any() && idx1 === -1) {\n\t\t// select from top to here - slightly odd, but both Windows and Mac OS\n\t\t// do this\n\t\tindexes.splice($.inArray(idx, indexes) + 1, indexes.length);\n\t}\n\telse {\n\t\t// reverse so we can shift click 'up' as well as down\n\t\tif (idx1 > idx2) {\n\t\t\tvar tmp = idx2;\n\t\t\tidx2 = idx1;\n\t\t\tidx1 = tmp;\n\t\t}\n\n\t\tindexes.splice(idx2 + 1, indexes.length);\n\t\tindexes.splice(0, idx1);\n\t}\n\n\tif (!dt[type](idx, { selected: true }).any()) {\n\t\t// Select range\n\t\tdt[type + 's'](indexes).select();\n\t}\n\telse {\n\t\t// Deselect range - need to keep the clicked on row selected\n\t\tindexes.splice($.inArray(idx, indexes), 1);\n\t\tdt[type + 's'](indexes).deselect();\n\t}\n}\n\n/**\n * Clear all selected items\n *\n * @param  {DataTable.settings} ctx Settings object of the host DataTable\n * @param  {boolean} [force=false] Force the de-selection to happen, regardless\n *     of selection style\n * @private\n */\nfunction clear(ctx, force) {\n\tif (force || ctx._select.style === 'single') {\n\t\tvar api = new DataTable.Api(ctx);\n\n\t\tapi.rows({ selected: true }).deselect();\n\t\tapi.columns({ selected: true }).deselect();\n\t\tapi.cells({ selected: true }).deselect();\n\t}\n}\n\n/**\n * Select items based on the current configuration for style and items.\n *\n * @param  {object}             e    Mouse event object\n * @param  {DataTables.Api}     dt   DataTable\n * @param  {DataTable.settings} ctx  Settings object of the host DataTable\n * @param  {string}             type Items to select\n * @param  {int|object}         idx  Index of the item to select\n * @private\n */\nfunction typeSelect(e, dt, ctx, type, idx) {\n\tvar style = dt.select.style();\n\tvar toggleable = dt.select.toggleable();\n\tvar isSelected = dt[type](idx, { selected: true }).any();\n\n\tif (isSelected && !toggleable) {\n\t\treturn;\n\t}\n\n\tif (style === 'os') {\n\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\t// Add or remove from the selection\n\t\t\tdt[type](idx).select(!isSelected);\n\t\t}\n\t\telse if (e.shiftKey) {\n\t\t\tif (type === 'cell') {\n\t\t\t\tcellRange(dt, idx, ctx._select_lastCell || null);\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowColumnRange(\n\t\t\t\t\tdt,\n\t\t\t\t\ttype,\n\t\t\t\t\tidx,\n\t\t\t\t\tctx._select_lastCell ? ctx._select_lastCell[type] : null\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// No cmd or shift click - deselect if selected, or select\n\t\t\t// this row only\n\t\t\tvar selected = dt[type + 's']({ selected: true });\n\n\t\t\tif (isSelected && selected.flatten().length === 1) {\n\t\t\t\tdt[type](idx).deselect();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tselected.deselect();\n\t\t\t\tdt[type](idx).select();\n\t\t\t}\n\t\t}\n\t}\n\telse if (style == 'multi+shift') {\n\t\tif (e.shiftKey) {\n\t\t\tif (type === 'cell') {\n\t\t\t\tcellRange(dt, idx, ctx._select_lastCell || null);\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowColumnRange(\n\t\t\t\t\tdt,\n\t\t\t\t\ttype,\n\t\t\t\t\tidx,\n\t\t\t\t\tctx._select_lastCell ? ctx._select_lastCell[type] : null\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tdt[type](idx).select(!isSelected);\n\t\t}\n\t}\n\telse {\n\t\tdt[type](idx).select(!isSelected);\n\t}\n}\n\nfunction _safeId(node) {\n\treturn node.id.replace(/[^a-zA-Z0-9\\-\\_]/g, '-');\n}\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables selectors\n */\n\n// row and column are basically identical just assigned to different properties\n// and checking a different array, so we can dynamically create the functions to\n// reduce the code size\n$.each(\n\t[\n\t\t{ type: 'row', prop: 'aoData' },\n\t\t{ type: 'column', prop: 'aoColumns' }\n\t],\n\tfunction (i, o) {\n\t\tDataTable.ext.selector[o.type].push(function (settings, opts, indexes) {\n\t\t\tvar selected = opts.selected;\n\t\t\tvar data;\n\t\t\tvar out = [];\n\n\t\t\tif (selected !== true && selected !== false) {\n\t\t\t\treturn indexes;\n\t\t\t}\n\n\t\t\tfor (var i = 0, ien = indexes.length; i < ien; i++) {\n\t\t\t\tdata = settings[o.prop][indexes[i]];\n\n\t\t\t\tif (\n\t\t\t\t\t(selected === true && data._select_selected === true) ||\n\t\t\t\t\t(selected === false && !data._select_selected)\n\t\t\t\t) {\n\t\t\t\t\tout.push(indexes[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn out;\n\t\t});\n\t}\n);\n\nDataTable.ext.selector.cell.push(function (settings, opts, cells) {\n\tvar selected = opts.selected;\n\tvar rowData;\n\tvar out = [];\n\n\tif (selected === undefined) {\n\t\treturn cells;\n\t}\n\n\tfor (var i = 0, ien = cells.length; i < ien; i++) {\n\t\trowData = settings.aoData[cells[i].row];\n\n\t\tif (\n\t\t\t(selected === true &&\n\t\t\t\trowData._selected_cells &&\n\t\t\t\trowData._selected_cells[cells[i].column] === true) ||\n\t\t\t(selected === false &&\n\t\t\t\t(!rowData._selected_cells || !rowData._selected_cells[cells[i].column]))\n\t\t) {\n\t\t\tout.push(cells[i]);\n\t\t}\n\t}\n\n\treturn out;\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables API\n *\n * For complete documentation, please refer to the docs/api directory or the\n * DataTables site\n */\n\n// Local variables to improve compression\nvar apiRegister = DataTable.Api.register;\nvar apiRegisterPlural = DataTable.Api.registerPlural;\n\napiRegister('select()', function () {\n\treturn this.iterator('table', function (ctx) {\n\t\tDataTable.select.init(new DataTable.Api(ctx));\n\t});\n});\n\napiRegister('select.blurable()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.context[0]._select.blurable;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tctx._select.blurable = flag;\n\t});\n});\n\napiRegister('select.toggleable()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.context[0]._select.toggleable;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tctx._select.toggleable = flag;\n\t});\n});\n\napiRegister('select.info()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.context[0]._select.info;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tctx._select.info = flag;\n\t});\n});\n\napiRegister('select.items()', function (items) {\n\tif (items === undefined) {\n\t\treturn this.context[0]._select.items;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tctx._select.items = items;\n\n\t\teventTrigger(new DataTable.Api(ctx), 'selectItems', [items]);\n\t});\n});\n\n// Takes effect from the _next_ selection. None disables future selection, but\n// does not clear the current selection. Use the `deselect` methods for that\napiRegister('select.style()', function (style) {\n\tif (style === undefined) {\n\t\treturn this.context[0]._select.style;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tif (!ctx._select) {\n\t\t\tDataTable.select.init(new DataTable.Api(ctx));\n\t\t}\n\n\t\tif (!ctx._select_init) {\n\t\t\tinit(ctx);\n\t\t}\n\n\t\tctx._select.style = style;\n\n\t\t// Add / remove mouse event handlers. They aren't required when only\n\t\t// API selection is available\n\t\tvar dt = new DataTable.Api(ctx);\n\t\tdisableMouseSelection(dt);\n\n\t\tif (style !== 'api') {\n\t\t\tenableMouseSelection(dt);\n\t\t}\n\n\t\teventTrigger(new DataTable.Api(ctx), 'selectStyle', [style]);\n\t});\n});\n\napiRegister('select.selector()', function (selector) {\n\tif (selector === undefined) {\n\t\treturn this.context[0]._select.selector;\n\t}\n\n\treturn this.iterator('table', function (ctx) {\n\t\tdisableMouseSelection(new DataTable.Api(ctx));\n\n\t\tctx._select.selector = selector;\n\n\t\tif (ctx._select.style !== 'api') {\n\t\t\tenableMouseSelection(new DataTable.Api(ctx));\n\t\t}\n\t});\n});\n\napiRegisterPlural('rows().select()', 'row().select()', function (select) {\n\tvar api = this;\n\n\tif (select === false) {\n\t\treturn this.deselect();\n\t}\n\n\tthis.iterator('row', function (ctx, idx) {\n\t\tclear(ctx);\n\n\t\tctx.aoData[idx]._select_selected = true;\n\t\t$(ctx.aoData[idx].nTr).addClass(ctx._select.className);\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'select', ['row', api[i]], true);\n\t});\n\n\treturn this;\n});\n\napiRegister('row().selected()', function () {\n\tvar ctx = this.context[0];\n\n\tif (ctx && this.length && ctx.aoData[this[0]] && ctx.aoData[this[0]]._select_selected) {\n\t\treturn true;\n\t}\n\n\treturn false;\n});\n\napiRegisterPlural('columns().select()', 'column().select()', function (select) {\n\tvar api = this;\n\n\tif (select === false) {\n\t\treturn this.deselect();\n\t}\n\n\tthis.iterator('column', function (ctx, idx) {\n\t\tclear(ctx);\n\n\t\tctx.aoColumns[idx]._select_selected = true;\n\n\t\tvar column = new DataTable.Api(ctx).column(idx);\n\n\t\t$(column.header()).addClass(ctx._select.className);\n\t\t$(column.footer()).addClass(ctx._select.className);\n\n\t\tcolumn.nodes().to$().addClass(ctx._select.className);\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'select', ['column', api[i]], true);\n\t});\n\n\treturn this;\n});\n\napiRegister('column().selected()', function () {\n\tvar ctx = this.context[0];\n\n\tif (ctx && this.length && ctx.aoColumns[this[0]] && ctx.aoColumns[this[0]]._select_selected) {\n\t\treturn true;\n\t}\n\n\treturn false;\n});\n\napiRegisterPlural('cells().select()', 'cell().select()', function (select) {\n\tvar api = this;\n\n\tif (select === false) {\n\t\treturn this.deselect();\n\t}\n\n\tthis.iterator('cell', function (ctx, rowIdx, colIdx) {\n\t\tclear(ctx);\n\n\t\tvar data = ctx.aoData[rowIdx];\n\n\t\tif (data._selected_cells === undefined) {\n\t\t\tdata._selected_cells = [];\n\t\t}\n\n\t\tdata._selected_cells[colIdx] = true;\n\n\t\tif (data.anCells) {\n\t\t\t$(data.anCells[colIdx]).addClass(ctx._select.className);\n\t\t}\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'select', ['cell', api.cells(api[i]).indexes().toArray()], true);\n\t});\n\n\treturn this;\n});\n\napiRegister('cell().selected()', function () {\n\tvar ctx = this.context[0];\n\n\tif (ctx && this.length) {\n\t\tvar row = ctx.aoData[this[0][0].row];\n\n\t\tif (row && row._selected_cells && row._selected_cells[this[0][0].column]) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n});\n\napiRegisterPlural('rows().deselect()', 'row().deselect()', function () {\n\tvar api = this;\n\n\tthis.iterator('row', function (ctx, idx) {\n\t\tctx.aoData[idx]._select_selected = false;\n\t\tctx._select_lastCell = null;\n\t\t$(ctx.aoData[idx].nTr).removeClass(ctx._select.className);\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'deselect', ['row', api[i]], true);\n\t});\n\n\treturn this;\n});\n\napiRegisterPlural('columns().deselect()', 'column().deselect()', function () {\n\tvar api = this;\n\n\tthis.iterator('column', function (ctx, idx) {\n\t\tctx.aoColumns[idx]._select_selected = false;\n\n\t\tvar api = new DataTable.Api(ctx);\n\t\tvar column = api.column(idx);\n\n\t\t$(column.header()).removeClass(ctx._select.className);\n\t\t$(column.footer()).removeClass(ctx._select.className);\n\n\t\t// Need to loop over each cell, rather than just using\n\t\t// `column().nodes()` as cells which are individually selected should\n\t\t// not have the `selected` class removed from them\n\t\tapi.cells(null, idx)\n\t\t\t.indexes()\n\t\t\t.each(function (cellIdx) {\n\t\t\t\tvar data = ctx.aoData[cellIdx.row];\n\t\t\t\tvar cellSelected = data._selected_cells;\n\n\t\t\t\tif (data.anCells && (!cellSelected || !cellSelected[cellIdx.column])) {\n\t\t\t\t\t$(data.anCells[cellIdx.column]).removeClass(ctx._select.className);\n\t\t\t\t}\n\t\t\t});\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'deselect', ['column', api[i]], true);\n\t});\n\n\treturn this;\n});\n\napiRegisterPlural('cells().deselect()', 'cell().deselect()', function () {\n\tvar api = this;\n\n\tthis.iterator('cell', function (ctx, rowIdx, colIdx) {\n\t\tvar data = ctx.aoData[rowIdx];\n\n\t\tif (data._selected_cells !== undefined) {\n\t\t\tdata._selected_cells[colIdx] = false;\n\t\t}\n\n\t\t// Remove class only if the cells exist, and the cell is not column\n\t\t// selected, in which case the class should remain (since it is selected\n\t\t// in the column)\n\t\tif (data.anCells && !ctx.aoColumns[colIdx]._select_selected) {\n\t\t\t$(data.anCells[colIdx]).removeClass(ctx._select.className);\n\t\t}\n\t});\n\n\tthis.iterator('table', function (ctx, i) {\n\t\teventTrigger(api, 'deselect', ['cell', api[i]], true);\n\t});\n\n\treturn this;\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Buttons\n */\nfunction i18n(label, def) {\n\treturn function (dt) {\n\t\treturn dt.i18n('buttons.' + label, def);\n\t};\n}\n\n// Common events with suitable namespaces\nfunction namespacedEvents(config) {\n\tvar unique = config._eventNamespace;\n\n\treturn 'draw.dt.DT' + unique + ' select.dt.DT' + unique + ' deselect.dt.DT' + unique;\n}\n\nfunction enabled(dt, config) {\n\tif ($.inArray('rows', config.limitTo) !== -1 && dt.rows({ selected: true }).any()) {\n\t\treturn true;\n\t}\n\n\tif ($.inArray('columns', config.limitTo) !== -1 && dt.columns({ selected: true }).any()) {\n\t\treturn true;\n\t}\n\n\tif ($.inArray('cells', config.limitTo) !== -1 && dt.cells({ selected: true }).any()) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nvar _buttonNamespace = 0;\n\n$.extend(DataTable.ext.buttons, {\n\tselected: {\n\t\ttext: i18n('selected', 'Selected'),\n\t\tclassName: 'buttons-selected',\n\t\tlimitTo: ['rows', 'columns', 'cells'],\n\t\tinit: function (dt, node, config) {\n\t\t\tvar that = this;\n\t\t\tconfig._eventNamespace = '.select' + _buttonNamespace++;\n\n\t\t\t// .DT namespace listeners are removed by DataTables automatically\n\t\t\t// on table destroy\n\t\t\tdt.on(namespacedEvents(config), function () {\n\t\t\t\tthat.enable(enabled(dt, config));\n\t\t\t});\n\n\t\t\tthis.disable();\n\t\t},\n\t\tdestroy: function (dt, node, config) {\n\t\t\tdt.off(config._eventNamespace);\n\t\t}\n\t},\n\tselectedSingle: {\n\t\ttext: i18n('selectedSingle', 'Selected single'),\n\t\tclassName: 'buttons-selected-single',\n\t\tinit: function (dt, node, config) {\n\t\t\tvar that = this;\n\t\t\tconfig._eventNamespace = '.select' + _buttonNamespace++;\n\n\t\t\tdt.on(namespacedEvents(config), function () {\n\t\t\t\tvar count =\n\t\t\t\t\tdt.rows({ selected: true }).flatten().length +\n\t\t\t\t\tdt.columns({ selected: true }).flatten().length +\n\t\t\t\t\tdt.cells({ selected: true }).flatten().length;\n\n\t\t\t\tthat.enable(count === 1);\n\t\t\t});\n\n\t\t\tthis.disable();\n\t\t},\n\t\tdestroy: function (dt, node, config) {\n\t\t\tdt.off(config._eventNamespace);\n\t\t}\n\t},\n\tselectAll: {\n\t\ttext: i18n('selectAll', 'Select all'),\n\t\tclassName: 'buttons-select-all',\n\t\taction: function (e, dt, node, config) {\n\t\t\tvar items = this.select.items();\n\t\t\tvar mod = config.selectorModifier;\n\t\t\t\n\t\t\tif (mod) {\n\t\t\t\tif (typeof mod === 'function') {\n\t\t\t\t\tmod = mod.call(dt, e, dt, node, config);\n\t\t\t\t}\n\n\t\t\t\tthis[items + 's'](mod).select();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis[items + 's']().select();\n\t\t\t}\n\t\t}\n\t\t// selectorModifier can be specified\n\t},\n\tselectNone: {\n\t\ttext: i18n('selectNone', 'Deselect all'),\n\t\tclassName: 'buttons-select-none',\n\t\taction: function () {\n\t\t\tclear(this.settings()[0], true);\n\t\t},\n\t\tinit: function (dt, node, config) {\n\t\t\tvar that = this;\n\t\t\tconfig._eventNamespace = '.select' + _buttonNamespace++;\n\n\t\t\tdt.on(namespacedEvents(config), function () {\n\t\t\t\tvar count =\n\t\t\t\t\tdt.rows({ selected: true }).flatten().length +\n\t\t\t\t\tdt.columns({ selected: true }).flatten().length +\n\t\t\t\t\tdt.cells({ selected: true }).flatten().length;\n\n\t\t\t\tthat.enable(count > 0);\n\t\t\t});\n\n\t\t\tthis.disable();\n\t\t},\n\t\tdestroy: function (dt, node, config) {\n\t\t\tdt.off(config._eventNamespace);\n\t\t}\n\t},\n\tshowSelected: {\n\t\ttext: i18n('showSelected', 'Show only selected'),\n\t\tclassName: 'buttons-show-selected',\n\t\taction: function (e, dt, node, conf) {\n\t\t\t// Works by having a filtering function which will reduce to the selected\n\t\t\t// items only. So we can re-reference the function it gets stored in the\n\t\t\t// `conf` object\n\t\t\tif (conf._filter) {\n\t\t\t\tvar idx = DataTable.ext.search.indexOf(conf._filter);\n\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tDataTable.ext.search.splice(idx, 1);\n\t\t\t\t\tconf._filter = null;\n\t\t\t\t}\n\n\t\t\t\tthis.active(false);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar fn = function (s, data, idx) {\n\t\t\t\t\t// Need to be sure we are operating on our table!\n\t\t\t\t\tif (s !== dt.settings()[0]) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet row = s.aoData[idx];\n\n\t\t\t\t\treturn row._select_selected;\n\t\t\t\t};\n\n\t\t\t\tconf._filter = fn;\n\t\t\t\tDataTable.ext.search.push(fn);\n\n\t\t\t\tthis.active(true);\n\t\t\t}\n\n\t\t\tdt.draw();\n\t\t}\n\t}\n});\n\n$.each(['Row', 'Column', 'Cell'], function (i, item) {\n\tvar lc = item.toLowerCase();\n\n\tDataTable.ext.buttons['select' + item + 's'] = {\n\t\ttext: i18n('select' + item + 's', 'Select ' + lc + 's'),\n\t\tclassName: 'buttons-select-' + lc + 's',\n\t\taction: function () {\n\t\t\tthis.select.items(lc);\n\t\t},\n\t\tinit: function (dt) {\n\t\t\tvar that = this;\n\n\t\t\tdt.on('selectItems.dt.DT', function (e, ctx, items) {\n\t\t\t\tthat.active(items === lc);\n\t\t\t});\n\t\t}\n\t};\n});\n\n$.fn.DataTable.select = DataTable.select;\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Initialisation\n */\n\n// DataTables creation - check if select has been defined in the options. Note\n// this required that the table be in the document! If it isn't then something\n// needs to trigger this method unfortunately. The next major release of\n// DataTables will rework the events and address this.\n$(document).on('preInit.dt.dtSelect', function (e, ctx) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tDataTable.select.init(new DataTable.Api(ctx));\n});\n\n\nreturn DataTable;\n}));\n\n\n/*! StateRestore 1.3.0\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n(function () {\n    'use strict';\n\n    var $$2;\n    var dataTable$1;\n    function setJQuery$1(jq) {\n        $$2 = jq;\n        dataTable$1 = jq.fn.dataTable;\n    }\n    var StateRestore = /** @class */ (function () {\n        function StateRestore(settings, opts, identifier, state, isPreDefined, successCallback) {\n            if (state === void 0) { state = undefined; }\n            if (isPreDefined === void 0) { isPreDefined = false; }\n            if (successCallback === void 0) { successCallback = function () { return null; }; }\n            // Check that the required version of DataTables is included\n            if (!dataTable$1 || !dataTable$1.versionCheck || !dataTable$1.versionCheck('1.10.0')) {\n                throw new Error('StateRestore requires DataTables 1.10 or newer');\n            }\n            // Check that Select is included\n            // eslint-disable-next-line no-extra-parens\n            if (!dataTable$1.Buttons) {\n                throw new Error('StateRestore requires Buttons');\n            }\n            var table = new dataTable$1.Api(settings);\n            this.classes = $$2.extend(true, {}, StateRestore.classes);\n            // Get options from user\n            this.c = $$2.extend(true, {}, StateRestore.defaults, opts);\n            this.s = {\n                dt: table,\n                identifier: identifier,\n                isPreDefined: isPreDefined,\n                savedState: null,\n                tableId: state && state.stateRestore ? state.stateRestore.tableId : undefined\n            };\n            this.dom = {\n                background: $$2('<div class=\"' + this.classes.background + '\"/>'),\n                closeButton: $$2('<div class=\"' + this.classes.closeButton + '\">&times;</div>'),\n                confirmation: $$2('<div class=\"' + this.classes.confirmation + '\"/>'),\n                confirmationButton: $$2('<button class=\"' + this.classes.confirmationButton + ' ' + this.classes.dtButton + '\">'),\n                confirmationTitleRow: $$2('<div class=\"' + this.classes.confirmationTitleRow + '\"></div>'),\n                dtContainer: $$2(this.s.dt.table().container()),\n                duplicateError: $$2('<span class=\"' + this.classes.modalError + '\">' +\n                    this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError) +\n                    '</span>'),\n                emptyError: $$2('<span class=\"' + this.classes.modalError + '\">' +\n                    this.s.dt.i18n('stateRestore.emptyError', this.c.i18n.emptyError) +\n                    '</span>'),\n                removeContents: $$2('<div class=\"' + this.classes.confirmationText + '\"><span>' +\n                    this.s.dt\n                        .i18n('stateRestore.removeConfirm', this.c.i18n.removeConfirm)\n                        .replace(/%s/g, this.s.identifier) +\n                    '</span></div>'),\n                removeError: $$2('<span class=\"' + this.classes.modalError + '\">' +\n                    this.s.dt.i18n('stateRestore.removeError', this.c.i18n.removeError) +\n                    '</span>'),\n                removeTitle: $$2('<h2 class=\"' + this.classes.confirmationTitle + '\">' +\n                    this.s.dt.i18n('stateRestore.removeTitle', this.c.i18n.removeTitle) +\n                    '</h2>'),\n                renameContents: $$2('<div class=\"' + this.classes.confirmationText + ' ' + this.classes.renameModal + '\">' +\n                    '<label class=\"' + this.classes.confirmationMessage + '\">' +\n                    this.s.dt\n                        .i18n('stateRestore.renameLabel', this.c.i18n.renameLabel)\n                        .replace(/%s/g, this.s.identifier) +\n                    '</label>' +\n                    '</div>'),\n                renameInput: $$2('<input class=\"' + this.classes.input + '\" type=\"text\"></input>'),\n                renameTitle: $$2('<h2 class=\"' + this.classes.confirmationTitle + '\">' +\n                    this.s.dt.i18n('stateRestore.renameTitle', this.c.i18n.renameTitle) +\n                    '</h2>')\n            };\n            // When a StateRestore instance is created the current state of the table should also be saved.\n            this.save(state, successCallback);\n        }\n        /**\n         * Removes a state from storage and then triggers the dtsr-remove event\n         * so that the StateRestoreCollection class can remove it's references as well.\n         *\n         * @param skipModal Flag to indicate if the modal should be skipped or not\n         */\n        StateRestore.prototype.remove = function (skipModal) {\n            var _a;\n            var _this = this;\n            if (skipModal === void 0) { skipModal = false; }\n            // Check if removal of states is allowed\n            if (!this.c.remove) {\n                return false;\n            }\n            var removeFunction;\n            var ajaxData = {\n                action: 'remove',\n                stateRestore: (_a = {},\n                    _a[this.s.identifier] = this.s.savedState,\n                    _a)\n            };\n            var successCallback = function () {\n                _this.dom.confirmation.trigger('dtsr-remove');\n                $$2(_this.s.dt.table().node()).trigger('stateRestore-change');\n                _this.dom.background.click();\n                _this.dom.confirmation.remove();\n                $$2(document).unbind('keyup', function (e) { return _this._keyupFunction(e); });\n                _this.dom.confirmationButton.off('click');\n            };\n            // If the remove is not happening over ajax remove it from local storage and then trigger the event\n            if (!this.c.ajax) {\n                removeFunction = function () {\n                    try {\n                        localStorage.removeItem('DataTables_stateRestore_' + _this.s.identifier + '_' + location.pathname +\n                            (_this.s.tableId ? '_' + _this.s.tableId : ''));\n                        successCallback();\n                    }\n                    catch (e) {\n                        _this.dom.confirmation.children('.' + _this.classes.modalError).remove();\n                        _this.dom.confirmation.append(_this.dom.removeError);\n                        return 'remove';\n                    }\n                    return true;\n                };\n            }\n            // Ajax property has to be a string, not just true\n            // Also only want to save if the table has been initialised and the states have been loaded in\n            else if (typeof this.c.ajax === 'string' && this.s.dt.settings()[0]._bInitComplete) {\n                removeFunction = function () {\n                    $$2.ajax({\n                        data: ajaxData,\n                        success: successCallback,\n                        type: 'POST',\n                        url: _this.c.ajax\n                    });\n                    return true;\n                };\n            }\n            else if (typeof this.c.ajax === 'function') {\n                removeFunction = function () {\n                    if (typeof _this.c.ajax === 'function') {\n                        _this.c.ajax.call(_this.s.dt, ajaxData, successCallback);\n                    }\n                    return true;\n                };\n            }\n            // If the modal is to be skipped then remove straight away\n            if (skipModal) {\n                this.dom.confirmation.appendTo(this.dom.dtContainer);\n                $$2(this.s.dt.table().node()).trigger('dtsr-modal-inserted');\n                removeFunction();\n                this.dom.confirmation.remove();\n            }\n            // Otherwise display the modal\n            else {\n                this._newModal(this.dom.removeTitle, this.s.dt.i18n('stateRestore.removeSubmit', this.c.i18n.removeSubmit), removeFunction, this.dom.removeContents);\n            }\n            return true;\n        };\n        /**\n         * Compares the state held within this instance with a state that is passed in\n         *\n         * @param state The state that is to be compared against\n         * @returns boolean indicating if the states match\n         */\n        StateRestore.prototype.compare = function (state) {\n            // Order\n            if (!this.c.saveState.order) {\n                state.order = undefined;\n            }\n            // Search\n            if (!this.c.saveState.search) {\n                state.search = undefined;\n            }\n            // Columns\n            if (this.c.saveState.columns && state.columns) {\n                for (var i = 0, ien = state.columns.length; i < ien; i++) {\n                    // Visibility\n                    if (typeof this.c.saveState.columns !== 'boolean' && !this.c.saveState.columns.visible) {\n                        state.columns[i].visible = undefined;\n                    }\n                    // Search\n                    if (typeof this.c.saveState.columns !== 'boolean' && !this.c.saveState.columns.search) {\n                        state.columns[i].search = undefined;\n                    }\n                }\n            }\n            else if (!this.c.saveState.columns) {\n                state.columns = undefined;\n            }\n            // Paging\n            if (!this.c.saveState.paging) {\n                state.page = undefined;\n            }\n            // SearchBuilder\n            if (!this.c.saveState.searchBuilder) {\n                state.searchBuilder = undefined;\n            }\n            // SearchPanes\n            if (!this.c.saveState.searchPanes) {\n                state.searchPanes = undefined;\n            }\n            // Select\n            if (!this.c.saveState.select) {\n                state.select = undefined;\n            }\n            // ColReorder\n            if (!this.c.saveState.colReorder) {\n                state.ColReorder = undefined;\n            }\n            // Scroller\n            if (!this.c.saveState.scroller) {\n                state.scroller = undefined;\n                if (dataTable$1.Scroller !== undefined) {\n                    state.start = 0;\n                }\n            }\n            // Paging\n            if (!this.c.saveState.paging) {\n                state.start = 0;\n            }\n            // Page Length\n            if (!this.c.saveState.length) {\n                state.length = undefined;\n            }\n            // Need to delete properties that we do not want to compare\n            delete state.time;\n            var copyState = this.s.savedState;\n            delete copyState.time;\n            delete copyState.c;\n            delete copyState.stateRestore;\n            // Perform a deep compare of the two state objects\n            return this._deepCompare(state, copyState);\n        };\n        /**\n         * Removes all of the dom elements from the document\n         */\n        StateRestore.prototype.destroy = function () {\n            Object.values(this.dom).forEach(function (node) { return node.off().remove(); });\n        };\n        /**\n         * Loads the state referenced by the identifier from storage\n         *\n         * @param state The identifier of the state that should be loaded\n         * @returns the state that has been loaded\n         */\n        StateRestore.prototype.load = function () {\n            var _this = this;\n            var loadedState = this.s.savedState;\n            var settings = this.s.dt.settings()[0];\n            // Always want the states stored here to be loaded in - regardless of when they were created\n            loadedState.time = +new Date();\n            settings.oLoadedState = $$2.extend(true, {}, loadedState);\n            // Click on a background if there is one to shut the collection\n            $$2('div.dt-button-background').click();\n            // Call the internal datatables function to implement the state on the table\n            $$2.fn.dataTable.ext.oApi._fnImplementState(settings, loadedState, function () {\n                var correctPaging = function (e, preSettings) {\n                    setTimeout(function () {\n                        var currpage = preSettings._iDisplayStart / preSettings._iDisplayLength;\n                        var intendedPage = loadedState.start / loadedState.length;\n                        // If the paging is incorrect then we have to set it again so that it is correct\n                        // This happens when a searchpanes filter is removed\n                        // This has to happen in a timeout because searchpanes only deselects after a timeout\n                        if (currpage >= 0 && intendedPage >= 0 && currpage !== intendedPage) {\n                            _this.s.dt.page(intendedPage).draw(false);\n                        }\n                    }, 50);\n                };\n                _this.s.dt.one('preDraw', correctPaging);\n                _this.s.dt.draw(false);\n            });\n            return loadedState;\n        };\n        /**\n         * Shows a modal that allows a state to be renamed\n         *\n         * @param newIdentifier Optional. The new identifier for this state\n         */\n        StateRestore.prototype.rename = function (newIdentifier, currentIdentifiers) {\n            var _this = this;\n            if (newIdentifier === void 0) { newIdentifier = null; }\n            // Check if renaming of states is allowed\n            if (!this.c.rename) {\n                return;\n            }\n            var renameFunction = function () {\n                var _a;\n                if (newIdentifier === null) {\n                    var tempIdentifier = $$2('input.' + _this.classes.input.replace(/ /g, '.')).val();\n                    if (tempIdentifier.length === 0) {\n                        _this.dom.confirmation.children('.' + _this.classes.modalError).remove();\n                        _this.dom.confirmation.append(_this.dom.emptyError);\n                        return 'empty';\n                    }\n                    else if (currentIdentifiers.includes(tempIdentifier)) {\n                        _this.dom.confirmation.children('.' + _this.classes.modalError).remove();\n                        _this.dom.confirmation.append(_this.dom.duplicateError);\n                        return 'duplicate';\n                    }\n                    else {\n                        newIdentifier = tempIdentifier;\n                    }\n                }\n                var ajaxData = {\n                    action: 'rename',\n                    stateRestore: (_a = {},\n                        _a[_this.s.identifier] = newIdentifier,\n                        _a)\n                };\n                var successCallback = function () {\n                    _this.s.identifier = newIdentifier;\n                    _this.save(_this.s.savedState, function () { return null; }, false);\n                    _this.dom.removeContents = $$2('<div class=\"' + _this.classes.confirmationText + '\"><span>' +\n                        _this.s.dt\n                            .i18n('stateRestore.removeConfirm', _this.c.i18n.removeConfirm)\n                            .replace(/%s/g, _this.s.identifier) +\n                        '</span></div>');\n                    _this.dom.confirmation.trigger('dtsr-rename');\n                    _this.dom.background.click();\n                    _this.dom.confirmation.remove();\n                    $$2(document).unbind('keyup', function (e) { return _this._keyupFunction(e); });\n                    _this.dom.confirmationButton.off('click');\n                };\n                if (!_this.c.ajax) {\n                    try {\n                        localStorage.removeItem('DataTables_stateRestore_' + _this.s.identifier + '_' + location.pathname +\n                            (_this.s.tableId ? '_' + _this.s.tableId : ''));\n                        successCallback();\n                    }\n                    catch (e) {\n                        _this.dom.confirmation.children('.' + _this.classes.modalError).remove();\n                        _this.dom.confirmation.append(_this.dom.removeError);\n                        return false;\n                    }\n                }\n                else if (typeof _this.c.ajax === 'string' && _this.s.dt.settings()[0]._bInitComplete) {\n                    $$2.ajax({\n                        data: ajaxData,\n                        success: successCallback,\n                        type: 'POST',\n                        url: _this.c.ajax\n                    });\n                }\n                else if (typeof _this.c.ajax === 'function') {\n                    _this.c.ajax.call(_this.s.dt, ajaxData, successCallback);\n                }\n                return true;\n            };\n            // Check if a new identifier has been provided, if so no need for a modal\n            if (newIdentifier !== null) {\n                if (currentIdentifiers.includes(newIdentifier)) {\n                    throw new Error(this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError));\n                }\n                else if (newIdentifier.length === 0) {\n                    throw new Error(this.s.dt.i18n('stateRestore.emptyError', this.c.i18n.emptyError));\n                }\n                else {\n                    this.dom.confirmation.appendTo(this.dom.dtContainer);\n                    $$2(this.s.dt.table().node()).trigger('dtsr-modal-inserted');\n                    renameFunction();\n                    this.dom.confirmation.remove();\n                }\n            }\n            else {\n                this.dom.renameInput.val(this.s.identifier);\n                this.dom.renameContents.append(this.dom.renameInput);\n                this._newModal(this.dom.renameTitle, this.s.dt.i18n('stateRestore.renameButton', this.c.i18n.renameButton), renameFunction, this.dom.renameContents);\n            }\n        };\n        /**\n         * Saves the tables current state using the identifier that is passed in.\n         *\n         * @param state Optional. If provided this is the state that will be saved rather than using the current state\n         */\n        StateRestore.prototype.save = function (state, passedSuccessCallback, callAjax) {\n            var _a;\n            var _this = this;\n            if (callAjax === void 0) { callAjax = true; }\n            // Check if saving states is allowed\n            if (!this.c.save) {\n                if (passedSuccessCallback) {\n                    passedSuccessCallback.call(this);\n                }\n                return;\n            }\n            // this.s.dt.state.save();\n            var savedState;\n            // If no state has been provided then create a new one from the current state\n            this.s.dt.state.save();\n            if (state === undefined) {\n                savedState = this.s.dt.state();\n            }\n            else if (typeof state !== 'object') {\n                return;\n            }\n            else {\n                savedState = state;\n            }\n            if (savedState.stateRestore) {\n                savedState.stateRestore.isPreDefined = this.s.isPreDefined;\n                savedState.stateRestore.state = this.s.identifier;\n                savedState.stateRestore.tableId = this.s.tableId;\n            }\n            else {\n                savedState.stateRestore = {\n                    isPreDefined: this.s.isPreDefined,\n                    state: this.s.identifier,\n                    tableId: this.s.tableId\n                };\n            }\n            this.s.savedState = savedState;\n            // Order\n            if (!this.c.saveState.order) {\n                this.s.savedState.order = undefined;\n            }\n            // Search\n            if (!this.c.saveState.search) {\n                this.s.savedState.search = undefined;\n            }\n            // Columns\n            if (this.c.saveState.columns && this.s.savedState.columns) {\n                for (var i = 0, ien = this.s.savedState.columns.length; i < ien; i++) {\n                    // Visibility\n                    if (typeof this.c.saveState.columns !== 'boolean' && !this.c.saveState.columns.visible) {\n                        this.s.savedState.columns[i].visible = undefined;\n                    }\n                    // Search\n                    if (typeof this.c.saveState.columns !== 'boolean' && !this.c.saveState.columns.search) {\n                        this.s.savedState.columns[i].search = undefined;\n                    }\n                }\n            }\n            else if (!this.c.saveState.columns) {\n                this.s.savedState.columns = undefined;\n            }\n            // SearchBuilder\n            if (!this.c.saveState.searchBuilder) {\n                this.s.savedState.searchBuilder = undefined;\n            }\n            // SearchPanes\n            if (!this.c.saveState.searchPanes) {\n                this.s.savedState.searchPanes = undefined;\n            }\n            // Select\n            if (!this.c.saveState.select) {\n                this.s.savedState.select = undefined;\n            }\n            // ColReorder\n            if (!this.c.saveState.colReorder) {\n                this.s.savedState.ColReorder = undefined;\n            }\n            // Scroller\n            if (!this.c.saveState.scroller) {\n                this.s.savedState.scroller = undefined;\n                if (dataTable$1.Scroller !== undefined) {\n                    this.s.savedState.start = 0;\n                }\n            }\n            // Paging\n            if (!this.c.saveState.paging) {\n                this.s.savedState.start = 0;\n            }\n            // Page Length\n            if (!this.c.saveState.length) {\n                this.s.savedState.length = undefined;\n            }\n            this.s.savedState.c = this.c;\n            // Need to remove the parent reference before we save the state\n            // Its not needed to rebuild, but it does cause a circular reference when converting to JSON\n            if (this.s.savedState.c.splitSecondaries.length) {\n                for (var _i = 0, _b = this.s.savedState.c.splitSecondaries; _i < _b.length; _i++) {\n                    var secondary = _b[_i];\n                    if (secondary.parent) {\n                        secondary.parent = undefined;\n                    }\n                }\n            }\n            // If the state is predefined there is no need to save it over ajax or to local storage\n            if (this.s.isPreDefined) {\n                if (passedSuccessCallback) {\n                    passedSuccessCallback.call(this);\n                }\n                return;\n            }\n            var ajaxData = {\n                action: 'save',\n                stateRestore: (_a = {},\n                    _a[this.s.identifier] = this.s.savedState,\n                    _a)\n            };\n            var successCallback = function () {\n                if (passedSuccessCallback) {\n                    passedSuccessCallback.call(_this);\n                }\n                _this.dom.confirmation.trigger('dtsr-save');\n                $$2(_this.s.dt.table().node()).trigger('stateRestore-change');\n            };\n            if (!this.c.ajax) {\n                localStorage.setItem('DataTables_stateRestore_' + this.s.identifier + '_' + location.pathname +\n                    (this.s.tableId ? '_' + this.s.tableId : ''), JSON.stringify(this.s.savedState));\n                successCallback();\n            }\n            else if (typeof this.c.ajax === 'string' && callAjax) {\n                if (this.s.dt.settings()[0]._bInitComplete) {\n                    $$2.ajax({\n                        data: ajaxData,\n                        success: successCallback,\n                        type: 'POST',\n                        url: this.c.ajax\n                    });\n                }\n                else {\n                    this.s.dt.one('init', function () {\n                        $$2.ajax({\n                            data: ajaxData,\n                            success: successCallback,\n                            type: 'POST',\n                            url: _this.c.ajax\n                        });\n                    });\n                }\n            }\n            else if (typeof this.c.ajax === 'function' && callAjax) {\n                this.c.ajax.call(this.s.dt, ajaxData, successCallback);\n            }\n        };\n        /**\n         * Performs a deep compare of two state objects, returning true if they match\n         *\n         * @param state1 The first object to compare\n         * @param state2 The second object to compare\n         * @returns boolean indicating if the objects match\n         */\n        StateRestore.prototype._deepCompare = function (state1, state2) {\n            // Put keys and states into arrays as this makes the later code easier to work\n            var states = [state1, state2];\n            var keys = [Object.keys(state1).sort(), Object.keys(state2).sort()];\n            // If scroller is included then we need to remove the start value\n            //  as it can be different but yield the same results\n            if (keys[0].includes('scroller')) {\n                var startIdx = keys[0].indexOf('start');\n                if (startIdx) {\n                    keys[0].splice(startIdx, 1);\n                }\n            }\n            if (keys[1].includes('scroller')) {\n                var startIdx = keys[1].indexOf('start');\n                if (startIdx) {\n                    keys[1].splice(startIdx, 1);\n                }\n            }\n            // We want to remove any private properties within the states\n            for (var i = 0; i < keys[0].length; i++) {\n                if (keys[0][i].indexOf('_') === 0) {\n                    keys[0].splice(i, 1);\n                    i--;\n                    continue;\n                }\n                // If scroller is included then we need to remove the following values\n                //  as they can be different but yield the same results\n                if (keys[0][i] === 'baseRowTop' ||\n                    keys[0][i] === 'baseScrollTop' ||\n                    keys[0][i] === 'scrollTop' ||\n                    (!this.c.saveState.paging && keys[0][i] === 'page')) {\n                    keys[0].splice(i, 1);\n                    i--;\n                    continue;\n                }\n            }\n            for (var i = 0; i < keys[1].length; i++) {\n                if (keys[1][i].indexOf('_') === 0) {\n                    keys[1].splice(i, 1);\n                    i--;\n                    continue;\n                }\n                if (keys[1][i] === 'baseRowTop' ||\n                    keys[1][i] === 'baseScrollTop' ||\n                    keys[1][i] === 'scrollTop' ||\n                    (!this.c.saveState.paging && keys[0][i] === 'page')) {\n                    keys[1].splice(i, 1);\n                    i--;\n                    continue;\n                }\n            }\n            if (keys[0].length === 0 && keys[1].length > 0 ||\n                keys[1].length === 0 && keys[0].length > 0) {\n                return false;\n            }\n            // We are only going to compare the keys that are common between both states\n            for (var i = 0; i < keys[0].length; i++) {\n                if (!keys[1].includes(keys[0][i])) {\n                    keys[0].splice(i, 1);\n                    i--;\n                }\n            }\n            for (var i = 0; i < keys[1].length; i++) {\n                if (!keys[0].includes(keys[1][i])) {\n                    keys[1].splice(i, 1);\n                    i--;\n                }\n            }\n            // Then each key and value has to be checked against each other\n            for (var i = 0; i < keys[0].length; i++) {\n                // If the keys dont equal, or their corresponding types are different we can return false\n                if (keys[0][i] !== keys[1][i] || typeof states[0][keys[0][i]] !== typeof states[1][keys[1][i]]) {\n                    return false;\n                }\n                // If the type is an object then further deep comparisons are required\n                if (typeof states[0][keys[0][i]] === 'object') {\n                    if (!this._deepCompare(states[0][keys[0][i]], states[1][keys[1][i]])) {\n                        return false;\n                    }\n                }\n                else if (typeof states[0][keys[0][i]] === 'number' && typeof states[1][keys[1][i]] === 'number') {\n                    if (Math.round(states[0][keys[0][i]]) !== Math.round(states[1][keys[1][i]])) {\n                        return false;\n                    }\n                }\n                // Otherwise we can just check the value\n                else if (states[0][keys[0][i]] !== states[1][keys[1][i]]) {\n                    return false;\n                }\n            }\n            // If we get all the way to here there are no differences so return true for this object\n            return true;\n        };\n        StateRestore.prototype._keyupFunction = function (e) {\n            // If enter same action as pressing the button\n            if (e.key === 'Enter') {\n                this.dom.confirmationButton.click();\n            }\n            // If escape close modal\n            else if (e.key === 'Escape') {\n                $$2('div.' + this.classes.background.replace(/ /g, '.')).click();\n            }\n        };\n        /**\n         * Creates a new confirmation modal for the user to approve an action\n         *\n         * @param title The title that is to be displayed at the top of the modal\n         * @param buttonText The text that is to be displayed in the confirmation button of the modal\n         * @param buttonAction The action that should be taken when the confirmation button is pressed\n         * @param modalContents The contents for the main body of the modal\n         */\n        StateRestore.prototype._newModal = function (title, buttonText, buttonAction, modalContents) {\n            var _this = this;\n            this.dom.background.appendTo(this.dom.dtContainer);\n            this.dom.confirmationTitleRow.empty().append(title);\n            this.dom.confirmationButton.html(buttonText);\n            this.dom.confirmation\n                .empty()\n                .append(this.dom.confirmationTitleRow)\n                .append(modalContents)\n                .append($$2('<div class=\"' + this.classes.confirmationButtons + '\"></div>')\n                .append(this.dom.confirmationButton))\n                .appendTo(this.dom.dtContainer);\n            $$2(this.s.dt.table().node()).trigger('dtsr-modal-inserted');\n            var inputs = modalContents.children('input');\n            // If there is an input focus on that\n            if (inputs.length > 0) {\n                $$2(inputs[0]).focus();\n            }\n            // Otherwise focus on the confirmation button\n            else {\n                this.dom.confirmationButton.focus();\n            }\n            var background = $$2('div.' + this.classes.background.replace(/ /g, '.'));\n            if (this.c.modalCloseButton) {\n                this.dom.confirmation.append(this.dom.closeButton);\n                this.dom.closeButton.on('click', function () { return background.click(); });\n            }\n            // When the button is clicked, call the appropriate action,\n            // remove the background and modal from the screen and unbind the keyup event.\n            this.dom.confirmationButton.on('click', function () { return buttonAction(); });\n            this.dom.confirmation.on('click', function (e) {\n                e.stopPropagation();\n            });\n            // When the button is clicked, remove the background and modal from the screen and unbind the keyup event.\n            background.one('click', function () {\n                _this.dom.background.remove();\n                _this.dom.confirmation.remove();\n                $$2(document).unbind('keyup', function (e) { return _this._keyupFunction(e); });\n            });\n            $$2(document).on('keyup', function (e) { return _this._keyupFunction(e); });\n        };\n        /**\n         * Convert from camelCase notation to the internal Hungarian.\n         * We could use the Hungarian convert function here, but this is cleaner\n         *\n         * @param {object} obj Object to convert\n         * @returns {object} Inverted object\n         * @memberof DataTable#oApi\n         */\n        StateRestore.prototype._searchToHung = function (obj) {\n            return {\n                bCaseInsensitive: obj.caseInsensitive,\n                bRegex: obj.regex,\n                bSmart: obj.smart,\n                sSearch: obj.search\n            };\n        };\n        StateRestore.version = '1.3.0';\n        StateRestore.classes = {\n            background: 'dtsr-background',\n            closeButton: 'dtsr-popover-close',\n            confirmation: 'dtsr-confirmation',\n            confirmationButton: 'dtsr-confirmation-button',\n            confirmationButtons: 'dtsr-confirmation-buttons',\n            confirmationMessage: 'dtsr-confirmation-message dtsr-name-label',\n            confirmationText: 'dtsr-confirmation-text',\n            confirmationTitle: 'dtsr-confirmation-title',\n            confirmationTitleRow: 'dtsr-confirmation-title-row',\n            dtButton: 'dt-button',\n            input: 'dtsr-input',\n            modalError: 'dtsr-modal-error',\n            renameModal: 'dtsr-rename-modal'\n        };\n        StateRestore.defaults = {\n            _createInSaved: false,\n            ajax: false,\n            create: true,\n            creationModal: false,\n            i18n: {\n                creationModal: {\n                    button: 'Create',\n                    colReorder: 'Column Order:',\n                    columns: {\n                        search: 'Column Search:',\n                        visible: 'Column Visibility:'\n                    },\n                    length: 'Page Length:',\n                    name: 'Name:',\n                    order: 'Sorting:',\n                    paging: 'Paging:',\n                    scroller: 'Scroll Position:',\n                    search: 'Search:',\n                    searchBuilder: 'SearchBuilder:',\n                    searchPanes: 'SearchPanes:',\n                    select: 'Select:',\n                    title: 'Create New State',\n                    toggleLabel: 'Includes:'\n                },\n                duplicateError: 'A state with this name already exists.',\n                emptyError: 'Name cannot be empty.',\n                emptyStates: 'No saved states',\n                removeConfirm: 'Are you sure you want to remove %s?',\n                removeError: 'Failed to remove state.',\n                removeJoiner: ' and ',\n                removeSubmit: 'Remove',\n                removeTitle: 'Remove State',\n                renameButton: 'Rename',\n                renameLabel: 'New Name for %s:',\n                renameTitle: 'Rename State'\n            },\n            modalCloseButton: true,\n            remove: true,\n            rename: true,\n            save: true,\n            saveState: {\n                colReorder: true,\n                columns: {\n                    search: true,\n                    visible: true\n                },\n                length: true,\n                order: true,\n                paging: true,\n                scroller: true,\n                search: true,\n                searchBuilder: true,\n                searchPanes: true,\n                select: true\n            },\n            splitSecondaries: [\n                'updateState',\n                'renameState',\n                'removeState'\n            ],\n            toggle: {\n                colReorder: false,\n                columns: {\n                    search: false,\n                    visible: false\n                },\n                length: false,\n                order: false,\n                paging: false,\n                scroller: false,\n                search: false,\n                searchBuilder: false,\n                searchPanes: false,\n                select: false\n            }\n        };\n        return StateRestore;\n    }());\n\n    var $$1;\n    var dataTable;\n    function setJQuery(jq) {\n        $$1 = jq;\n        dataTable = jq.fn.dataTable;\n    }\n    var StateRestoreCollection = /** @class */ (function () {\n        function StateRestoreCollection(settings, opts) {\n            var _this = this;\n            // Check that the required version of DataTables is included\n            if (!dataTable || !dataTable.versionCheck || !dataTable.versionCheck('1.10.0')) {\n                throw new Error('StateRestore requires DataTables 1.10 or newer');\n            }\n            // Check that Select is included\n            // eslint-disable-next-line no-extra-parens\n            if (!dataTable.Buttons) {\n                throw new Error('StateRestore requires Buttons');\n            }\n            var table = new dataTable.Api(settings);\n            this.classes = $$1.extend(true, {}, StateRestoreCollection.classes);\n            if (table.settings()[0]._stateRestore !== undefined) {\n                return;\n            }\n            // Get options from user\n            this.c = $$1.extend(true, {}, StateRestoreCollection.defaults, opts);\n            this.s = {\n                dt: table,\n                hasColReorder: dataTable.ColReorder !== undefined,\n                hasScroller: dataTable.Scroller !== undefined,\n                hasSearchBuilder: dataTable.SearchBuilder !== undefined,\n                hasSearchPanes: dataTable.SearchPanes !== undefined,\n                hasSelect: dataTable.select !== undefined,\n                states: []\n            };\n            this.s.dt.on('xhr', function (e, xhrsettings, json) {\n                // Has staterestore been used before? Is there anything to load?\n                if (json && json.stateRestore) {\n                    _this._addPreDefined(json.stateRestore);\n                }\n            });\n            this.dom = {\n                background: $$1('<div class=\"' + this.classes.background + '\"/>'),\n                closeButton: $$1('<div class=\"' + this.classes.closeButton + '\">x</div>'),\n                colReorderToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.colReorderToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.colReorder', this.c.i18n.creationModal.colReorder) +\n                    '</label>' +\n                    '</div>'),\n                columnsSearchToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.columnsSearchToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.columns.search', this.c.i18n.creationModal.columns.search) +\n                    '</label>' +\n                    '</div>'),\n                columnsVisibleToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + ' ' + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.columnsVisibleToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.columns.visible', this.c.i18n.creationModal.columns.visible) +\n                    '</label>' +\n                    '</div>'),\n                confirmation: $$1('<div class=\"' + this.classes.confirmation + '\"/>'),\n                confirmationTitleRow: $$1('<div class=\"' + this.classes.confirmationTitleRow + '\"></div>'),\n                createButtonRow: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.modalFoot + '\">' +\n                    '<button class=\"' + this.classes.creationButton + ' ' + this.classes.dtButton + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.button', this.c.i18n.creationModal.button) +\n                    '</button>' +\n                    '</div>'),\n                creation: $$1('<div class=\"' + this.classes.creation + '\"/>'),\n                creationForm: $$1('<div class=\"' + this.classes.creationForm + '\"/>'),\n                creationTitle: $$1('<div class=\"' + this.classes.creationText + '\">' +\n                    '<h2 class=\"' + this.classes.creationTitle + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.title', this.c.i18n.creationModal.title) +\n                    '</h2>' +\n                    '</div>'),\n                dtContainer: $$1(this.s.dt.table().container()),\n                duplicateError: $$1('<span class=\"' + this.classes.modalError + '\">' +\n                    this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError) +\n                    '</span>'),\n                emptyError: $$1('<span class=\"' + this.classes.modalError + '\">' +\n                    this.s.dt.i18n('stateRestore.emptyError', this.c.i18n.emptyError) +\n                    '</span>'),\n                lengthToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.lengthToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.length', this.c.i18n.creationModal.length) +\n                    '</label>' +\n                    '</div>'),\n                nameInputRow: $$1('<div class=\"' + this.classes.formRow + '\">' +\n                    '<label class=\"' + this.classes.nameLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.name', this.c.i18n.creationModal.name) +\n                    '</label>' +\n                    '<input class=\"' + this.classes.nameInput + '\" type=\"text\">' +\n                    '</div>'),\n                orderToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.orderToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.order', this.c.i18n.creationModal.order) +\n                    '</label>' +\n                    '</div>'),\n                pagingToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.pagingToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.paging', this.c.i18n.creationModal.paging) +\n                    '</label>' +\n                    '</div>'),\n                removeContents: $$1('<div class=\"' + this.classes.confirmationText + '\"><span></span></div>'),\n                removeTitle: $$1('<div class=\"' + this.classes.creationText + '\">' +\n                    '<h2 class=\"' + this.classes.creationTitle + '\">' +\n                    this.s.dt.i18n('stateRestore.removeTitle', this.c.i18n.removeTitle) +\n                    '</h2>' +\n                    '</div>'),\n                scrollerToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.scrollerToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.scroller', this.c.i18n.creationModal.scroller) +\n                    '</label>' +\n                    '</div>'),\n                searchBuilderToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.searchBuilderToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.searchBuilder', this.c.i18n.creationModal.searchBuilder) +\n                    '</label>' +\n                    '</div>'),\n                searchPanesToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.searchPanesToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.searchPanes', this.c.i18n.creationModal.searchPanes) +\n                    '</label>' +\n                    '</div>'),\n                searchToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.searchToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.search', this.c.i18n.creationModal.search) +\n                    '</label>' +\n                    '</div>'),\n                selectToggle: $$1('<div class=\"' + this.classes.formRow + ' ' + this.classes.checkRow + '\">' +\n                    '<input type=\"checkbox\" class=\"' +\n                    this.classes.selectToggle + ' ' +\n                    this.classes.checkBox +\n                    '\" checked>' +\n                    '<label class=\"' + this.classes.checkLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.select', this.c.i18n.creationModal.select) +\n                    '</label>' +\n                    '</div>'),\n                toggleLabel: $$1('<label class=\"' + this.classes.nameLabel + ' ' + this.classes.toggleLabel + '\">' +\n                    this.s.dt.i18n('stateRestore.creationModal.toggleLabel', this.c.i18n.creationModal.toggleLabel) +\n                    '</label>')\n            };\n            table.settings()[0]._stateRestore = this;\n            this._searchForStates();\n            // Has staterestore been used before? Is there anything to load?\n            this._addPreDefined(this.c.preDefined);\n            var ajaxFunction;\n            var ajaxData = {\n                action: 'load'\n            };\n            if (typeof this.c.ajax === 'function') {\n                ajaxFunction = function () {\n                    if (typeof _this.c.ajax === 'function') {\n                        _this.c.ajax.call(_this.s.dt, ajaxData, function (s) { return _this._addPreDefined(s); });\n                    }\n                };\n            }\n            else if (typeof this.c.ajax === 'string') {\n                ajaxFunction = function () {\n                    $$1.ajax({\n                        data: ajaxData,\n                        success: function (data) {\n                            _this._addPreDefined(data);\n                        },\n                        type: 'POST',\n                        url: _this.c.ajax\n                    });\n                };\n            }\n            if (typeof ajaxFunction === 'function') {\n                if (this.s.dt.settings()[0]._bInitComplete) {\n                    ajaxFunction();\n                }\n                else {\n                    this.s.dt.one('preInit.dtsr', function () {\n                        ajaxFunction();\n                    });\n                }\n            }\n            this.s.dt.on('destroy.dtsr', function () {\n                _this.destroy();\n            });\n            this.s.dt.on('draw.dtsr buttons-action.dtsr', function () { return _this.findActive(); });\n            return this;\n        }\n        /**\n         * Adds a new StateRestore instance to the collection based on the current properties of the table\n         *\n         * @param identifier The value that is used to identify a state.\n         * @returns The state that has been created\n         */\n        StateRestoreCollection.prototype.addState = function (identifier, currentIdentifiers, options) {\n            var _this = this;\n            // If creation/saving is not allowed then return\n            if (!this.c.create || !this.c.save) {\n                return;\n            }\n            // Check if the state exists before creating a new ones\n            var state = this.getState(identifier);\n            var createFunction = function (id, toggles) {\n                if (id.length === 0) {\n                    return 'empty';\n                }\n                else if (currentIdentifiers.includes(id)) {\n                    return 'duplicate';\n                }\n                _this.s.dt.state.save();\n                var that = _this;\n                var successCallback = function () {\n                    that.s.states.push(this);\n                    that._collectionRebuild();\n                };\n                var currState = _this.s.dt.state();\n                currState.stateRestore = {\n                    isPredefined: false,\n                    state: id,\n                    tableId: _this.s.dt.table().node().id\n                };\n                if (toggles.saveState) {\n                    var opts = _this.c.saveState;\n                    // We don't want to extend, but instead AND all properties of the saveState option\n                    for (var _i = 0, _a = Object.keys(toggles.saveState); _i < _a.length; _i++) {\n                        var key = _a[_i];\n                        if (!toggles.saveState[key]) {\n                            opts[key] = false;\n                        }\n                    }\n                    _this.c.saveState = opts;\n                }\n                var newState = new StateRestore(_this.s.dt.settings()[0], $$1.extend(true, {}, _this.c, options), id, currState, false, successCallback);\n                $$1(_this.s.dt.table().node()).on('dtsr-modal-inserted', function () {\n                    newState.dom.confirmation.one('dtsr-remove', function () { return _this._removeCallback(newState.s.identifier); });\n                    newState.dom.confirmation.one('dtsr-rename', function () { return _this._collectionRebuild(); });\n                    newState.dom.confirmation.one('dtsr-save', function () { return _this._collectionRebuild(); });\n                });\n                return true;\n            };\n            // If there isn't already a state with this identifier\n            if (state === null) {\n                if (this.c.creationModal || options !== undefined && options.creationModal) {\n                    this._creationModal(createFunction, identifier, options);\n                }\n                else {\n                    var success = createFunction(identifier, {});\n                    if (success === 'empty') {\n                        throw new Error(this.s.dt.i18n('stateRestore.emptyError', this.c.i18n.emptyError));\n                    }\n                    else if (success === 'duplicate') {\n                        throw new Error(this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError));\n                    }\n                }\n            }\n            else {\n                throw new Error(this.s.dt.i18n('stateRestore.duplicateError', this.c.i18n.duplicateError));\n            }\n        };\n        /**\n         * Removes all of the states, showing a modal to the user for confirmation\n         *\n         * @param removeFunction The action to be taken when the action is confirmed\n         */\n        StateRestoreCollection.prototype.removeAll = function (removeFunction) {\n            // There are no states to remove so just return\n            if (this.s.states.length === 0) {\n                return;\n            }\n            var ids = this.s.states.map(function (state) { return state.s.identifier; });\n            var replacementString = ids[0];\n            if (ids.length > 1) {\n                replacementString = ids.slice(0, -1).join(', ') +\n                    this.s.dt.i18n('stateRestore.removeJoiner', this.c.i18n.removeJoiner) +\n                    ids.slice(-1);\n            }\n            $$1(this.dom.removeContents.children('span')).html(this.s.dt\n                .i18n('stateRestore.removeConfirm', this.c.i18n.removeConfirm)\n                .replace(/%s/g, replacementString));\n            this._newModal(this.dom.removeTitle, this.s.dt.i18n('stateRestore.removeSubmit', this.c.i18n.removeSubmit), removeFunction, this.dom.removeContents);\n        };\n        /**\n         * Removes all of the dom elements from the document for the collection and the stored states\n         */\n        StateRestoreCollection.prototype.destroy = function () {\n            for (var _i = 0, _a = this.s.states; _i < _a.length; _i++) {\n                var state = _a[_i];\n                state.destroy();\n            }\n            Object.values(this.dom).forEach(function (node) {\n                node.off();\n                node.remove();\n            });\n            this.s.states = [];\n            this.s.dt.off('.dtsr');\n            $$1(this.s.dt.table().node()).off('.dtsr');\n        };\n        /**\n         * Identifies active states and updates their button to reflect this.\n         *\n         * @returns An array containing objects with the details of currently active states\n         */\n        StateRestoreCollection.prototype.findActive = function () {\n            // Make sure that the state is up to date\n            this.s.dt.state.save();\n            var currState = this.s.dt.state();\n            // Make all of the buttons inactive so that only any that match will be marked as active\n            var buttons = $$1('button.' + $$1.fn.DataTable.Buttons.defaults.dom.button.className.replace(/ /g, '.'));\n            // Some of the styling libraries use a tags instead of buttons\n            if (buttons.length === 0) {\n                buttons = $$1('a.' + $$1.fn.DataTable.Buttons.defaults.dom.button.className.replace(/ /g, '.'));\n            }\n            for (var _i = 0, buttons_1 = buttons; _i < buttons_1.length; _i++) {\n                var button = buttons_1[_i];\n                this.s.dt.button($$1(button).parent()[0]).active(false);\n            }\n            var results = [];\n            // Go through all of the states comparing if their state is the same to the current one\n            for (var _a = 0, _b = this.s.states; _a < _b.length; _a++) {\n                var state = _b[_a];\n                if (state.compare(currState)) {\n                    results.push({\n                        data: state.s.savedState,\n                        name: state.s.identifier\n                    });\n                    // If so, find the corresponding button and mark it as active\n                    for (var _c = 0, buttons_2 = buttons; _c < buttons_2.length; _c++) {\n                        var button = buttons_2[_c];\n                        if ($$1(button).text() === state.s.identifier) {\n                            this.s.dt.button($$1(button).parent()[0]).active(true);\n                            break;\n                        }\n                    }\n                }\n            }\n            return results;\n        };\n        /**\n         * Gets a single state that has the identifier matching that which is passed in\n         *\n         * @param identifier The value that is used to identify a state\n         * @returns The state that has been identified or null if no states have been identified\n         */\n        StateRestoreCollection.prototype.getState = function (identifier) {\n            for (var _i = 0, _a = this.s.states; _i < _a.length; _i++) {\n                var state = _a[_i];\n                if (state.s.identifier === identifier) {\n                    return state;\n                }\n            }\n            return null;\n        };\n        /**\n         * Gets an array of all of the states\n         *\n         * @returns Any states that have been identified\n         */\n        StateRestoreCollection.prototype.getStates = function (ids) {\n            if (ids === undefined) {\n                return this.s.states;\n            }\n            else {\n                var states = [];\n                for (var _i = 0, ids_1 = ids; _i < ids_1.length; _i++) {\n                    var id = ids_1[_i];\n                    var found = false;\n                    for (var _a = 0, _b = this.s.states; _a < _b.length; _a++) {\n                        var state = _b[_a];\n                        if (id === state.s.identifier) {\n                            states.push(state);\n                            found = true;\n                            break;\n                        }\n                    }\n                    if (!found) {\n                        states.push(undefined);\n                    }\n                }\n                return states;\n            }\n        };\n        /**\n         * Reloads states that are set via datatables config or over ajax\n         *\n         * @param preDefined Object containing the predefined states that are to be reintroduced\n         */\n        StateRestoreCollection.prototype._addPreDefined = function (preDefined) {\n            var _this = this;\n            // There is a potential issue here if sorting where the string parts of the name are the same,\n            // only the number differs and there are many states - but this wouldn't be usfeul naming so\n            // more of a priority to sort alphabetically\n            var states = Object.keys(preDefined).sort(function (a, b) { return a > b ? 1 : a < b ? -1 : 0; });\n            var _loop_1 = function (state) {\n                for (var i = 0; i < this_1.s.states.length; i++) {\n                    if (this_1.s.states[i].s.identifier === state) {\n                        this_1.s.states.splice(i, 1);\n                    }\n                }\n                var that = this_1;\n                var successCallback = function () {\n                    that.s.states.push(this);\n                    that._collectionRebuild();\n                };\n                var loadedState = preDefined[state];\n                var newState = new StateRestore(this_1.s.dt, $$1.extend(true, {}, this_1.c, loadedState.c !== undefined ?\n                    { saveState: loadedState.c.saveState } :\n                    undefined, true), state, loadedState, true, successCallback);\n                newState.s.savedState = loadedState;\n                $$1(this_1.s.dt.table().node()).on('dtsr-modal-inserted', function () {\n                    newState.dom.confirmation.one('dtsr-remove', function () { return _this._removeCallback(newState.s.identifier); });\n                    newState.dom.confirmation.one('dtsr-rename', function () { return _this._collectionRebuild(); });\n                    newState.dom.confirmation.one('dtsr-save', function () { return _this._collectionRebuild(); });\n                });\n            };\n            var this_1 = this;\n            for (var _i = 0, states_1 = states; _i < states_1.length; _i++) {\n                var state = states_1[_i];\n                _loop_1(state);\n            }\n        };\n        /**\n         * Rebuilds all of the buttons in the collection of states to make sure that states and text is up to date\n         */\n        StateRestoreCollection.prototype._collectionRebuild = function () {\n            var button = this.s.dt.button('SaveStateRestore:name');\n            var stateButtons = [];\n            // Need to get the original configuration object, so we can rebuild it\n            // It might be nested, so need to traverse down the tree\n            if (button[0]) {\n                var idxs = button.index().split('-');\n                stateButtons = button[0].inst.c.buttons;\n                for (var i = 0; i < idxs.length; i++) {\n                    if (stateButtons[idxs[i]].buttons) {\n                        stateButtons = stateButtons[idxs[i]].buttons;\n                    }\n                    else {\n                        stateButtons = [];\n                        break;\n                    }\n                }\n            }\n            // remove any states from the previous rebuild - if they are still there they will be added later\n            for (var i = 0; i < stateButtons.length; i++) {\n                if (stateButtons[i].extend === 'stateRestore') {\n                    stateButtons.splice(i, 1);\n                    i--;\n                }\n            }\n            if (this.c._createInSaved) {\n                stateButtons.push('createState');\n            }\n            var emptyText = '<span class=\"' + this.classes.emptyStates + '\">' +\n                this.s.dt.i18n('stateRestore.emptyStates', this.c.i18n.emptyStates) +\n                '</span>';\n            // If there are no states display an empty message\n            if (this.s.states.length === 0) {\n                // Don't want the empty text included more than twice\n                if (!stateButtons.includes(emptyText)) {\n                    stateButtons.push(emptyText);\n                }\n            }\n            else {\n                // There are states to add so there shouldn't be any empty text left!\n                while (stateButtons.includes(emptyText)) {\n                    stateButtons.splice(stateButtons.indexOf(emptyText), 1);\n                }\n                // There is a potential issue here if sorting where the string parts of the name are the same,\n                // only the number differs and there are many states - but this wouldn't be usfeul naming so\n                // more of a priority to sort alphabetically\n                this.s.states = this.s.states.sort(function (a, b) {\n                    var aId = a.s.identifier;\n                    var bId = b.s.identifier;\n                    return aId > bId ?\n                        1 :\n                        aId < bId ?\n                            -1 :\n                            0;\n                });\n                // Construct the split property of each button\n                for (var _i = 0, _a = this.s.states; _i < _a.length; _i++) {\n                    var state = _a[_i];\n                    var split = Object.assign([], this.c.splitSecondaries);\n                    if (split.includes('updateState') && (!this.c.save || !state.c.save)) {\n                        split.splice(split.indexOf('updateState'), 1);\n                    }\n                    if (split.includes('renameState') &&\n                        (!this.c.save || !state.c.save || !this.c.rename || !state.c.rename)) {\n                        split.splice(split.indexOf('renameState'), 1);\n                    }\n                    if (split.includes('removeState') && (!this.c.remove || !state.c.remove)) {\n                        split.splice(split.indexOf('removeState'), 1);\n                    }\n                    if (split.length > 0 &&\n                        !split.includes('<h3>' + state.s.identifier + '</h3>')) {\n                        split.unshift('<h3>' + state.s.identifier + '</h3>');\n                    }\n                    stateButtons.push({\n                        _stateRestore: state,\n                        attr: {\n                            title: state.s.identifier\n                        },\n                        config: {\n                            split: split\n                        },\n                        extend: 'stateRestore',\n                        text: state.s.identifier\n                    });\n                }\n            }\n            button.collectionRebuild(stateButtons);\n            // Need to disable the removeAllStates button if there are no states and it is present\n            var buttons = this.s.dt.buttons();\n            for (var _b = 0, buttons_3 = buttons; _b < buttons_3.length; _b++) {\n                var butt = buttons_3[_b];\n                if ($$1(butt.node).hasClass('dtsr-removeAllStates')) {\n                    if (this.s.states.length === 0) {\n                        this.s.dt.button(butt.node).disable();\n                    }\n                    else {\n                        this.s.dt.button(butt.node).enable();\n                    }\n                }\n            }\n        };\n        /**\n         * Displays a modal that is used to get information from the user to create a new state.\n         *\n         * @param buttonAction The action that should be taken when the button is pressed\n         * @param identifier The default identifier for the next new state\n         */\n        StateRestoreCollection.prototype._creationModal = function (buttonAction, identifier, options) {\n            var _this = this;\n            this.dom.creation.empty();\n            this.dom.creationForm.empty();\n            this.dom.nameInputRow.children('input').val(identifier);\n            this.dom.creationForm.append(this.dom.nameInputRow);\n            var tableConfig = this.s.dt.settings()[0].oInit;\n            var togglesToInsert = [];\n            var toggleDefined = options !== undefined && options.toggle !== undefined;\n            // Order toggle - check toggle and saving enabled\n            if (((!toggleDefined || options.toggle.order === undefined) && this.c.toggle.order ||\n                toggleDefined && options.toggle.order) &&\n                this.c.saveState.order &&\n                (tableConfig.ordering === undefined || tableConfig.ordering)) {\n                togglesToInsert.push(this.dom.orderToggle);\n            }\n            // Search toggle - check toggle and saving enabled\n            if (((!toggleDefined || options.toggle.search === undefined) && this.c.toggle.search ||\n                toggleDefined && options.toggle.search) &&\n                this.c.saveState.search &&\n                (tableConfig.searching === undefined || tableConfig.searching)) {\n                togglesToInsert.push(this.dom.searchToggle);\n            }\n            // Paging toggle - check toggle and saving enabled\n            if (((!toggleDefined || options.toggle.paging === undefined) && this.c.toggle.paging ||\n                toggleDefined && options.toggle.paging) &&\n                this.c.saveState.paging &&\n                (tableConfig.paging === undefined || tableConfig.paging)) {\n                togglesToInsert.push(this.dom.pagingToggle);\n            }\n            // Page Length toggle - check toggle and saving enabled\n            if (((!toggleDefined || options.toggle.length === undefined) && this.c.toggle.length ||\n                toggleDefined && options.toggle.length) &&\n                this.c.saveState.length &&\n                (tableConfig.length === undefined || tableConfig.length)) {\n                togglesToInsert.push(this.dom.lengthToggle);\n            }\n            // ColReorder toggle - check toggle and saving enabled\n            if (this.s.hasColReorder &&\n                ((!toggleDefined || options.toggle.colReorder === undefined) && this.c.toggle.colReorder ||\n                    toggleDefined && options.toggle.colReorder) &&\n                this.c.saveState.colReorder) {\n                togglesToInsert.push(this.dom.colReorderToggle);\n            }\n            // Scroller toggle - check toggle and saving enabled\n            if (this.s.hasScroller &&\n                ((!toggleDefined || options.toggle.scroller === undefined) && this.c.toggle.scroller ||\n                    toggleDefined && options.toggle.scroller) &&\n                this.c.saveState.scroller) {\n                togglesToInsert.push(this.dom.scrollerToggle);\n            }\n            // SearchBuilder toggle - check toggle and saving enabled\n            if (this.s.hasSearchBuilder &&\n                ((!toggleDefined || options.toggle.searchBuilder === undefined) && this.c.toggle.searchBuilder ||\n                    toggleDefined && options.toggle.searchBuilder) &&\n                this.c.saveState.searchBuilder) {\n                togglesToInsert.push(this.dom.searchBuilderToggle);\n            }\n            // SearchPanes toggle - check toggle and saving enabled\n            if (this.s.hasSearchPanes &&\n                ((!toggleDefined || options.toggle.searchPanes === undefined) && this.c.toggle.searchPanes ||\n                    toggleDefined && options.toggle.searchPanes) &&\n                this.c.saveState.searchPanes) {\n                togglesToInsert.push(this.dom.searchPanesToggle);\n            }\n            // Select toggle - check toggle and saving enabled\n            if (this.s.hasSelect &&\n                ((!toggleDefined || options.toggle.select === undefined) && this.c.toggle.select ||\n                    toggleDefined && options.toggle.select) &&\n                this.c.saveState.select) {\n                togglesToInsert.push(this.dom.selectToggle);\n            }\n            // Columns toggle - check toggle and saving enabled\n            if (typeof this.c.toggle.columns === 'boolean' &&\n                ((!toggleDefined || options.toggle.order === undefined) && this.c.toggle.columns ||\n                    toggleDefined && options.toggle.order) &&\n                this.c.saveState.columns) {\n                togglesToInsert.push(this.dom.columnsSearchToggle);\n                togglesToInsert.push(this.dom.columnsVisibleToggle);\n            }\n            else if ((!toggleDefined || options.toggle.columns === undefined) && typeof this.c.toggle.columns !== 'boolean' ||\n                typeof options.toggle.order !== 'boolean') {\n                if (typeof this.c.saveState.columns !== 'boolean' && this.c.saveState.columns) {\n                    // Column search toggle - check toggle and saving enabled\n                    if ((\n                    // columns.search is defined when passed in\n                    toggleDefined &&\n                        options.toggle.columns !== undefined &&\n                        typeof options.toggle.columns !== 'boolean' &&\n                        options.toggle.columns.search ||\n                        // Columns search is not defined when passed in but is in defaults\n                        (!toggleDefined ||\n                            options.toggle.columns === undefined ||\n                            typeof options.toggle.columns !== 'boolean' && options.toggle.columns.search === undefined) &&\n                            typeof this.c.toggle.columns !== 'boolean' &&\n                            this.c.toggle.columns.search) &&\n                        this.c.saveState.columns.search) {\n                        togglesToInsert.push(this.dom.columnsSearchToggle);\n                    }\n                    // Column visiblity toggle - check toggle and saving enabled\n                    if ((\n                    // columns.visible is defined when passed in\n                    toggleDefined &&\n                        options.toggle.columns !== undefined &&\n                        typeof options.toggle.columns !== 'boolean' &&\n                        options.toggle.columns.visible ||\n                        // Columns visible is not defined when passed in but is in defaults\n                        (!toggleDefined ||\n                            options.toggle.columns === undefined ||\n                            typeof options.toggle.columns !== 'boolean' && options.toggle.columns.visible === undefined) &&\n                            typeof this.c.toggle.columns !== 'boolean' &&\n                            this.c.toggle.columns.visible) &&\n                        this.c.saveState.columns.visible) {\n                        togglesToInsert.push(this.dom.columnsVisibleToggle);\n                    }\n                }\n                else if (this.c.saveState.columns) {\n                    togglesToInsert.push(this.dom.columnsSearchToggle);\n                    togglesToInsert.push(this.dom.columnsVisibleToggle);\n                }\n            }\n            // Make sure that the toggles are displayed alphabetically\n            togglesToInsert.sort(function (a, b) {\n                var aVal = a.children('label.dtsr-check-label')[0].innerHTML;\n                var bVal = b.children('label.dtsr-check-label')[0].innerHTML;\n                if (aVal < bVal) {\n                    return -1;\n                }\n                else if (aVal > bVal) {\n                    return 1;\n                }\n                else {\n                    return 0;\n                }\n            });\n            // Append all of the toggles that are to be inserted\n            for (var _i = 0, togglesToInsert_1 = togglesToInsert; _i < togglesToInsert_1.length; _i++) {\n                var toggle = togglesToInsert_1[_i];\n                this.dom.creationForm.append(toggle);\n            }\n            // Insert the toggle label next to the first check box\n            $$1(this.dom.creationForm.children('div.' + this.classes.checkRow)[0]).prepend(this.dom.toggleLabel);\n            // Insert the creation modal and the background\n            this.dom.background.appendTo(this.dom.dtContainer);\n            this.dom.creation\n                .append(this.dom.creationTitle)\n                .append(this.dom.creationForm)\n                .append(this.dom.createButtonRow)\n                .appendTo(this.dom.dtContainer);\n            $$1(this.s.dt.table().node()).trigger('dtsr-modal-inserted');\n            var _loop_2 = function (toggle) {\n                $$1(toggle.children('label:last-child')).on('click', function () {\n                    toggle.children('input').prop('checked', !toggle.children('input').prop('checked'));\n                });\n            };\n            // Allow the label to be clicked to toggle the checkbox\n            for (var _a = 0, togglesToInsert_2 = togglesToInsert; _a < togglesToInsert_2.length; _a++) {\n                var toggle = togglesToInsert_2[_a];\n                _loop_2(toggle);\n            }\n            var creationButton = $$1('button.' + this.classes.creationButton.replace(/ /g, '.'));\n            var inputs = this.dom.creationForm.find('input');\n            // If there is an input focus on that\n            if (inputs.length > 0) {\n                $$1(inputs[0]).focus();\n            }\n            // Otherwise focus on the confirmation button\n            else {\n                creationButton.focus();\n            }\n            var background = $$1('div.' + this.classes.background.replace(/ /g, '.'));\n            var keyupFunction = function (e) {\n                if (e.key === 'Enter') {\n                    creationButton.click();\n                }\n                else if (e.key === 'Escape') {\n                    background.click();\n                }\n            };\n            if (this.c.modalCloseButton) {\n                this.dom.creation.append(this.dom.closeButton);\n                this.dom.closeButton.on('click', function () { return background.click(); });\n            }\n            creationButton.on('click', function () {\n                // Get the values of the checkBoxes\n                var saveState = {\n                    colReorder: _this.dom.colReorderToggle.children('input').is(':checked'),\n                    columns: {\n                        search: _this.dom.columnsSearchToggle.children('input').is(':checked'),\n                        visible: _this.dom.columnsVisibleToggle.children('input').is(':checked')\n                    },\n                    length: _this.dom.lengthToggle.children('input').is(':checked'),\n                    order: _this.dom.orderToggle.children('input').is(':checked'),\n                    paging: _this.dom.pagingToggle.children('input').is(':checked'),\n                    scroller: _this.dom.scrollerToggle.children('input').is(':checked'),\n                    search: _this.dom.searchToggle.children('input').is(':checked'),\n                    searchBuilder: _this.dom.searchBuilderToggle.children('input').is(':checked'),\n                    searchPanes: _this.dom.searchPanesToggle.children('input').is(':checked'),\n                    select: _this.dom.selectToggle.children('input').is(':checked')\n                };\n                // Call the buttons functionality passing in the identifier and what should be saved\n                var success = buttonAction($$1('input.' + _this.classes.nameInput.replace(/ /g, '.')).val(), { saveState: saveState });\n                if (success === true) {\n                    // Remove the dom elements as operation has completed\n                    _this.dom.background.remove();\n                    _this.dom.creation.remove();\n                    // Unbind the keyup function  - don't want it to run unnecessarily on every keypress that occurs\n                    $$1(document).unbind('keyup', keyupFunction);\n                }\n                else {\n                    _this.dom.creation.children('.' + _this.classes.modalError).remove();\n                    _this.dom.creation.append(_this.dom[success + 'Error']);\n                }\n            });\n            background.one('click', function () {\n                // Remove the dome elements as operation has been cancelled\n                _this.dom.background.remove();\n                _this.dom.creation.remove();\n                // Unbind the keyup function - don't want it to run unnecessarily on every keypress that occurs\n                $$1(document).unbind('keyup', keyupFunction);\n                // Rebuild the collection to ensure that the latest changes are present\n                _this._collectionRebuild();\n            });\n            // Have to listen to the keyup event as `escape` doesn't trigger keypress\n            $$1(document).on('keyup', keyupFunction);\n            // Need to save the state before the focus is lost when the modal is interacted with\n            this.s.dt.state.save();\n        };\n        /**\n         * This callback is called when a state is removed.\n         * This removes the state from storage and also strips it's button from the container\n         *\n         * @param identifier The value that is used to identify a state\n         */\n        StateRestoreCollection.prototype._removeCallback = function (identifier) {\n            for (var i = 0; i < this.s.states.length; i++) {\n                if (this.s.states[i].s.identifier === identifier) {\n                    this.s.states.splice(i, 1);\n                    i--;\n                }\n            }\n            this._collectionRebuild();\n            return true;\n        };\n        /**\n         * Creates a new confirmation modal for the user to approve an action\n         *\n         * @param title The title that is to be displayed at the top of the modal\n         * @param buttonText The text that is to be displayed in the confirmation button of the modal\n         * @param buttonAction The action that should be taken when the confirmation button is pressed\n         * @param modalContents The contents for the main body of the modal\n         */\n        StateRestoreCollection.prototype._newModal = function (title, buttonText, buttonAction, modalContents) {\n            var _this = this;\n            this.dom.background.appendTo(this.dom.dtContainer);\n            this.dom.confirmationTitleRow.empty().append(title);\n            var confirmationButton = $$1('<button class=\"' + this.classes.confirmationButton + ' ' + this.classes.dtButton + '\">' +\n                buttonText +\n                '</button>');\n            this.dom.confirmation\n                .empty()\n                .append(this.dom.confirmationTitleRow)\n                .append(modalContents)\n                .append($$1('<div class=\"' + this.classes.confirmationButtons + '\"></div>')\n                .append(confirmationButton))\n                .appendTo(this.dom.dtContainer);\n            $$1(this.s.dt.table().node()).trigger('dtsr-modal-inserted');\n            var inputs = modalContents.children('input');\n            // If there is an input focus on that\n            if (inputs.length > 0) {\n                $$1(inputs[0]).focus();\n            }\n            // Otherwise focus on the confirmation button\n            else {\n                confirmationButton.focus();\n            }\n            var background = $$1('div.' + this.classes.background.replace(/ /g, '.'));\n            var keyupFunction = function (e) {\n                // If enter same action as pressing the button\n                if (e.key === 'Enter') {\n                    confirmationButton.click();\n                }\n                // If escape close modal\n                else if (e.key === 'Escape') {\n                    background.click();\n                }\n            };\n            // When the button is clicked, call the appropriate action,\n            // remove the background and modal from the screen and unbind the keyup event.\n            confirmationButton.on('click', function () {\n                var success = buttonAction(true);\n                if (success === true) {\n                    _this.dom.background.remove();\n                    _this.dom.confirmation.remove();\n                    $$1(document).unbind('keyup', keyupFunction);\n                    confirmationButton.off('click');\n                }\n                else {\n                    _this.dom.confirmation.children('.' + _this.classes.modalError).remove();\n                    _this.dom.confirmation.append(_this.dom[success + 'Error']);\n                }\n            });\n            this.dom.confirmation.on('click', function (e) {\n                e.stopPropagation();\n            });\n            // When the button is clicked, remove the background and modal from the screen and unbind the keyup event.\n            background.one('click', function () {\n                _this.dom.background.remove();\n                _this.dom.confirmation.remove();\n                $$1(document).unbind('keyup', keyupFunction);\n            });\n            $$1(document).on('keyup', keyupFunction);\n        };\n        /**\n         * Private method that checks for previously created states on initialisation\n         */\n        StateRestoreCollection.prototype._searchForStates = function () {\n            var _this = this;\n            var keys = Object.keys(localStorage);\n            var _loop_3 = function (key) {\n                // eslint-disable-next-line no-useless-escape\n                if (key.match(new RegExp('^DataTables_stateRestore_.*_' + location.pathname.replace(/\\//g, '/') + '$')) ||\n                    key.match(new RegExp('^DataTables_stateRestore_.*_' + location.pathname.replace(/\\//g, '/') +\n                        '_' + this_2.s.dt.table().node().id + '$'))) {\n                    var loadedState_1 = JSON.parse(localStorage.getItem(key));\n                    if (loadedState_1.stateRestore.isPreDefined ||\n                        (loadedState_1.stateRestore.tableId &&\n                            loadedState_1.stateRestore.tableId !== this_2.s.dt.table().node().id)) {\n                        return \"continue\";\n                    }\n                    var that_1 = this_2;\n                    var successCallback = function () {\n                        this.s.savedState = loadedState_1;\n                        that_1.s.states.push(this);\n                        that_1._collectionRebuild();\n                    };\n                    var newState_1 = new StateRestore(this_2.s.dt, $$1.extend(true, {}, this_2.c, { saveState: loadedState_1.c.saveState }), loadedState_1.stateRestore.state, loadedState_1, false, successCallback);\n                    $$1(this_2.s.dt.table().node()).on('dtsr-modal-inserted', function () {\n                        newState_1.dom.confirmation.one('dtsr-remove', function () { return _this._removeCallback(newState_1.s.identifier); });\n                        newState_1.dom.confirmation.one('dtsr-rename', function () { return _this._collectionRebuild(); });\n                        newState_1.dom.confirmation.one('dtsr-save', function () { return _this._collectionRebuild(); });\n                    });\n                }\n            };\n            var this_2 = this;\n            for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n                var key = keys_1[_i];\n                _loop_3(key);\n            }\n        };\n        StateRestoreCollection.version = '1.0.0';\n        StateRestoreCollection.classes = {\n            background: 'dtsr-background',\n            checkBox: 'dtsr-check-box',\n            checkLabel: 'dtsr-check-label',\n            checkRow: 'dtsr-check-row',\n            closeButton: 'dtsr-popover-close',\n            colReorderToggle: 'dtsr-colReorder-toggle',\n            columnsSearchToggle: 'dtsr-columns-search-toggle',\n            columnsVisibleToggle: 'dtsr-columns-visible-toggle',\n            confirmation: 'dtsr-confirmation',\n            confirmationButton: 'dtsr-confirmation-button',\n            confirmationButtons: 'dtsr-confirmation-buttons',\n            confirmationMessage: 'dtsr-confirmation-message dtsr-name-label',\n            confirmationText: 'dtsr-confirmation-text',\n            confirmationTitle: 'dtsr-confirmation-title',\n            confirmationTitleRow: 'dtsr-confirmation-title-row',\n            creation: 'dtsr-creation',\n            creationButton: 'dtsr-creation-button',\n            creationForm: 'dtsr-creation-form',\n            creationText: 'dtsr-creation-text',\n            creationTitle: 'dtsr-creation-title',\n            dtButton: 'dt-button',\n            emptyStates: 'dtsr-emptyStates',\n            formRow: 'dtsr-form-row',\n            leftSide: 'dtsr-left',\n            lengthToggle: 'dtsr-length-toggle',\n            modalError: 'dtsr-modal-error',\n            modalFoot: 'dtsr-modal-foot',\n            nameInput: 'dtsr-name-input',\n            nameLabel: 'dtsr-name-label',\n            orderToggle: 'dtsr-order-toggle',\n            pagingToggle: 'dtsr-paging-toggle',\n            rightSide: 'dtsr-right',\n            scrollerToggle: 'dtsr-scroller-toggle',\n            searchBuilderToggle: 'dtsr-searchBuilder-toggle',\n            searchPanesToggle: 'dtsr-searchPanes-toggle',\n            searchToggle: 'dtsr-search-toggle',\n            selectToggle: 'dtsr-select-toggle',\n            toggleLabel: 'dtsr-toggle-title'\n        };\n        StateRestoreCollection.defaults = {\n            _createInSaved: false,\n            ajax: false,\n            create: true,\n            creationModal: false,\n            i18n: {\n                creationModal: {\n                    button: 'Create',\n                    colReorder: 'Column Order',\n                    columns: {\n                        search: 'Column Search',\n                        visible: 'Column Visibility'\n                    },\n                    length: 'Page Length',\n                    name: 'Name:',\n                    order: 'Sorting',\n                    paging: 'Paging',\n                    scroller: 'Scroll Position',\n                    search: 'Search',\n                    searchBuilder: 'SearchBuilder',\n                    searchPanes: 'SearchPanes',\n                    select: 'Select',\n                    title: 'Create New State',\n                    toggleLabel: 'Includes:'\n                },\n                duplicateError: 'A state with this name already exists.',\n                emptyError: 'Name cannot be empty.',\n                emptyStates: 'No saved states',\n                removeConfirm: 'Are you sure you want to remove %s?',\n                removeError: 'Failed to remove state.',\n                removeJoiner: ' and ',\n                removeSubmit: 'Remove',\n                removeTitle: 'Remove State',\n                renameButton: 'Rename',\n                renameLabel: 'New Name for %s:',\n                renameTitle: 'Rename State'\n            },\n            modalCloseButton: true,\n            preDefined: {},\n            remove: true,\n            rename: true,\n            save: true,\n            saveState: {\n                colReorder: true,\n                columns: {\n                    search: true,\n                    visible: true\n                },\n                length: true,\n                order: true,\n                paging: true,\n                scroller: true,\n                search: true,\n                searchBuilder: true,\n                searchPanes: true,\n                select: true\n            },\n            splitSecondaries: [\n                'updateState',\n                'renameState',\n                'removeState'\n            ],\n            toggle: {\n                colReorder: false,\n                columns: {\n                    search: false,\n                    visible: false\n                },\n                length: false,\n                order: false,\n                paging: false,\n                scroller: false,\n                search: false,\n                searchBuilder: false,\n                searchPanes: false,\n                select: false\n            }\n        };\n        return StateRestoreCollection;\n    }());\n\n    /*! StateRestore 1.3.0\n     * © SpryMedia Ltd - datatables.net/license\n     */\n    setJQuery$1($);\n    setJQuery($);\n    $.fn.dataTable.StateRestore = StateRestore;\n    $.fn.DataTable.StateRestore = StateRestore;\n    $.fn.dataTable.StateRestoreCollection = StateRestoreCollection;\n    $.fn.DataTable.StateRestoreCollection = StateRestoreCollection;\n    var apiRegister = DataTable.Api.register;\n    apiRegister('stateRestore()', function () {\n        return this;\n    });\n    apiRegister('stateRestore.state()', function (identifier) {\n        var ctx = this.context[0];\n        if (!ctx._stateRestore) {\n            var api = DataTable.Api(ctx);\n            var src = new DataTable.StateRestoreCollection(api, {});\n            _stateRegen(api, src);\n        }\n        this[0] = ctx._stateRestore.getState(identifier);\n        return this;\n    });\n    apiRegister('stateRestore.state.add()', function (identifier, options) {\n        var ctx = this.context[0];\n        if (!ctx._stateRestore) {\n            var api = DataTable.Api(ctx);\n            var src = new DataTable.StateRestoreCollection(api, {});\n            _stateRegen(api, src);\n        }\n        if (!ctx._stateRestore.c.create) {\n            return this;\n        }\n        if (ctx._stateRestore.addState) {\n            var states = ctx._stateRestore.s.states;\n            var ids = [];\n            for (var _i = 0, states_1 = states; _i < states_1.length; _i++) {\n                var intState = states_1[_i];\n                ids.push(intState.s.identifier);\n            }\n            ctx._stateRestore.addState(identifier, ids, options);\n            return this;\n        }\n    });\n    apiRegister('stateRestore.states()', function (ids) {\n        var ctx = this.context[0];\n        if (!ctx._stateRestore) {\n            var api = DataTable.Api(ctx);\n            var src = new DataTable.StateRestoreCollection(api, {});\n            _stateRegen(api, src);\n        }\n        this.length = 0;\n        this.push.apply(this, ctx._stateRestore.getStates(ids));\n        return this;\n    });\n    apiRegister('stateRestore.state().save()', function () {\n        var ctx = this[0];\n        // Check if saving states is allowed\n        if (ctx.c.save) {\n            ctx.save();\n        }\n        return this;\n    });\n    apiRegister('stateRestore.state().rename()', function (newIdentifier) {\n        var ctx = this.context[0];\n        var state = this[0];\n        // Check if renaming states is allowed\n        if (state.c.save) {\n            var states = ctx._stateRestore.s.states;\n            var ids = [];\n            for (var _i = 0, states_2 = states; _i < states_2.length; _i++) {\n                var intState = states_2[_i];\n                ids.push(intState.s.identifier);\n            }\n            state.rename(newIdentifier, ids);\n        }\n        return this;\n    });\n    apiRegister('stateRestore.state().load()', function () {\n        var ctx = this[0];\n        ctx.load();\n        return this;\n    });\n    apiRegister('stateRestore.state().remove()', function (skipModal) {\n        var ctx = this[0];\n        // Check if removal of states is allowed\n        if (ctx.c.remove) {\n            ctx.remove(skipModal);\n        }\n        return this;\n    });\n    apiRegister('stateRestore.states().remove()', function (skipModal) {\n        var _this = this;\n        var removeAllCallBack = function (skipModalIn) {\n            var success = true;\n            var that = _this.toArray();\n            while (that.length > 0) {\n                var set = that[0];\n                if (set !== undefined && set.c.remove) {\n                    var tempSuccess = set.remove(skipModalIn);\n                    if (tempSuccess !== true) {\n                        success = tempSuccess;\n                    }\n                    else {\n                        that.splice(0, 1);\n                    }\n                }\n                else {\n                    break;\n                }\n            }\n            return success;\n        };\n        if (this.context[0]._stateRestore && this.context[0]._stateRestore.c.remove) {\n            if (skipModal) {\n                removeAllCallBack(skipModal);\n            }\n            else {\n                this.context[0]._stateRestore.removeAll(removeAllCallBack);\n            }\n        }\n        return this;\n    });\n    apiRegister('stateRestore.activeStates()', function () {\n        var ctx = this.context[0];\n        this.length = 0;\n        if (!ctx._stateRestore) {\n            var api = DataTable.Api(ctx);\n            var src = new DataTable.StateRestoreCollection(api, {});\n            _stateRegen(api, src);\n        }\n        if (ctx._stateRestore) {\n            this.push.apply(this, ctx._stateRestore.findActive());\n        }\n        return this;\n    });\n    DataTable.ext.buttons.stateRestore = {\n        action: function (e, dt, node, config) {\n            config._stateRestore.load();\n            node.blur();\n        },\n        config: {\n            split: ['updateState', 'renameState', 'removeState']\n        },\n        text: function (dt) {\n            return dt.i18n('buttons.stateRestore', 'State %d', dt.stateRestore.states()[0].length + 1);\n        }\n    };\n    DataTable.ext.buttons.updateState = {\n        action: function (e, dt, node, config) {\n            $('div.dt-button-background').click();\n            config.parent._stateRestore.save();\n        },\n        text: function (dt) {\n            return dt.i18n('buttons.updateState', 'Update');\n        }\n    };\n    DataTable.ext.buttons.savedStates = {\n        buttons: [],\n        extend: 'collection',\n        init: function (dt, node, config) {\n            dt.on('stateRestore-change', function () {\n                dt.button(node).text(dt.i18n('buttons.savedStates', 'Saved States', dt.stateRestore.states().length));\n            });\n            if (dt.settings()[0]._stateRestore === undefined) {\n                _buttonInit(dt, config);\n            }\n        },\n        name: 'SaveStateRestore',\n        text: function (dt) {\n            return dt.i18n('buttons.savedStates', 'Saved States', 0);\n        }\n    };\n    DataTable.ext.buttons.savedStatesCreate = {\n        buttons: [],\n        extend: 'collection',\n        init: function (dt, node, config) {\n            dt.on('stateRestore-change', function () {\n                dt.button(node).text(dt.i18n('buttons.savedStates', 'Saved States', dt.stateRestore.states().length));\n            });\n            if (dt.settings()[0]._stateRestore === undefined) {\n                if (config.config === undefined) {\n                    config.config = {};\n                }\n                config.config._createInSaved = true;\n                _buttonInit(dt, config);\n            }\n        },\n        name: 'SaveStateRestore',\n        text: function (dt) {\n            return dt.i18n('buttons.savedStates', 'Saved States', 0);\n        }\n    };\n    DataTable.ext.buttons.createState = {\n        action: function (e, dt, node, config) {\n            e.stopPropagation();\n            var stateRestoreOpts = dt.settings()[0]._stateRestore.c;\n            var language = dt.settings()[0].oLanguage;\n            // If creation/saving is not allowed then return\n            if (!stateRestoreOpts.create || !stateRestoreOpts.save) {\n                return;\n            }\n            var prevStates = dt.stateRestore.states().toArray();\n            // Create a replacement regex based on the i18n values\n            var defaultString = language.buttons !== undefined && language.buttons.stateRestore !== undefined ?\n                language.buttons.stateRestore :\n                'State ';\n            var replaceRegex;\n            if (defaultString.indexOf('%d') === defaultString.length - 3) {\n                replaceRegex = new RegExp(defaultString.replace(/%d/g, ''));\n            }\n            else {\n                var splitString = defaultString.split('%d');\n                replaceRegex = [];\n                for (var _i = 0, splitString_1 = splitString; _i < splitString_1.length; _i++) {\n                    var split = splitString_1[_i];\n                    replaceRegex.push(new RegExp(split));\n                }\n            }\n            var getId = function (identifier) {\n                var id;\n                if (Array.isArray(replaceRegex)) {\n                    id = identifier;\n                    for (var _i = 0, replaceRegex_1 = replaceRegex; _i < replaceRegex_1.length; _i++) {\n                        var reg = replaceRegex_1[_i];\n                        id = id.replace(reg, '');\n                    }\n                }\n                else {\n                    id = identifier.replace(replaceRegex, '');\n                }\n                // If the id after replacement is not a number, or the length is the same as before,\n                //  it has been customised so return 0\n                if (isNaN(+id) || id.length === identifier) {\n                    return 0;\n                }\n                // Otherwise return the number that has been assigned previously\n                else {\n                    return +id;\n                }\n            };\n            // Extract the numbers from the identifiers that use the standard naming convention\n            var identifiers = prevStates\n                .map(function (state) { return getId(state.s.identifier); })\n                .sort(function (a, b) { return +a < +b ?\n                1 :\n                +a > +b ?\n                    -1 :\n                    0; });\n            var lastNumber = identifiers[0];\n            dt.stateRestore.state.add(dt.i18n('buttons.stateRestore', 'State %d', lastNumber !== undefined ? lastNumber + 1 : 1), config.config);\n            var states = dt.stateRestore.states().sort(function (a, b) {\n                var aId = +getId(a.s.identifier);\n                var bId = +getId(b.s.identifier);\n                return aId > bId ?\n                    1 :\n                    aId < bId ?\n                        -1 :\n                        0;\n            });\n            var button = dt.button('SaveStateRestore:name');\n            var stateButtons = button[0] !== undefined && button[0].inst.c.buttons[0].buttons !== undefined ?\n                button[0].inst.c.buttons[0].buttons :\n                [];\n            // remove any states from the previous rebuild - if they are still there they will be added later\n            for (var i = 0; i < stateButtons.length; i++) {\n                if (stateButtons[i].extend === 'stateRestore') {\n                    stateButtons.splice(i, 1);\n                    i--;\n                }\n            }\n            if (stateRestoreOpts._createInSaved) {\n                stateButtons.push('createState');\n                stateButtons.push('');\n            }\n            for (var _a = 0, states_3 = states; _a < states_3.length; _a++) {\n                var state = states_3[_a];\n                var split = Object.assign([], stateRestoreOpts.splitSecondaries);\n                if (split.includes('updateState') && !stateRestoreOpts.save) {\n                    split.splice(split.indexOf('updateState'), 1);\n                }\n                if (split.includes('renameState') &&\n                    (!stateRestoreOpts.save || !stateRestoreOpts.rename)) {\n                    split.splice(split.indexOf('renameState'), 1);\n                }\n                if (split.includes('removeState') && !stateRestoreOpts.remove) {\n                    split.splice(split.indexOf('removeState'), 1);\n                }\n                if (split.length > 0 &&\n                    !split.includes('<h3>' + state.s.identifier + '</h3>')) {\n                    split.unshift('<h3>' + state.s.identifier + '</h3>');\n                }\n                stateButtons.push({\n                    _stateRestore: state,\n                    attr: {\n                        title: state.s.identifier\n                    },\n                    config: {\n                        split: split\n                    },\n                    extend: 'stateRestore',\n                    text: state.s.identifier\n                });\n            }\n            dt.button('SaveStateRestore:name').collectionRebuild(stateButtons);\n            node.blur();\n            // Need to disable the removeAllStates button if there are no states and it is present\n            var buttons = dt.buttons();\n            for (var _b = 0, buttons_1 = buttons; _b < buttons_1.length; _b++) {\n                var butt = buttons_1[_b];\n                if ($(butt.node).hasClass('dtsr-removeAllStates')) {\n                    if (states.length === 0) {\n                        dt.button(butt.node).disable();\n                    }\n                    else {\n                        dt.button(butt.node).enable();\n                    }\n                }\n            }\n        },\n        init: function (dt, node, config) {\n            if (dt.settings()[0]._stateRestore === undefined && dt.button('SaveStateRestore:name').length > 1) {\n                _buttonInit(dt, config);\n            }\n        },\n        text: function (dt) {\n            return dt.i18n('buttons.createState', 'Create State');\n        }\n    };\n    DataTable.ext.buttons.removeState = {\n        action: function (e, dt, node, config) {\n            config.parent._stateRestore.remove();\n            node.blur();\n        },\n        text: function (dt) {\n            return dt.i18n('buttons.removeState', 'Remove');\n        }\n    };\n    DataTable.ext.buttons.removeAllStates = {\n        action: function (e, dt, node) {\n            dt.stateRestore.states().remove(true);\n            node.blur();\n        },\n        className: 'dt-button dtsr-removeAllStates',\n        init: function (dt, node) {\n            if (!dt.settings()[0]._stateRestore || dt.stateRestore.states().length === 0) {\n                $(node).addClass('disabled');\n            }\n        },\n        text: function (dt) {\n            return dt.i18n('buttons.removeAllStates', 'Remove All States');\n        }\n    };\n    DataTable.ext.buttons.renameState = {\n        action: function (e, dt, node, config) {\n            var states = dt.settings()[0]._stateRestore.s.states;\n            var ids = [];\n            for (var _i = 0, states_4 = states; _i < states_4.length; _i++) {\n                var state = states_4[_i];\n                ids.push(state.s.identifier);\n            }\n            config.parent._stateRestore.rename(undefined, ids);\n            node.blur();\n        },\n        text: function (dt) {\n            return dt.i18n('buttons.renameState', 'Rename');\n        }\n    };\n    function _init(settings, options) {\n        if (options === void 0) { options = null; }\n        var api = new DataTable.Api(settings);\n        var opts = options\n            ? options\n            : api.init().stateRestore || DataTable.defaults.stateRestore;\n        var stateRestore = new StateRestoreCollection(api, opts);\n        _stateRegen(api, stateRestore);\n        return stateRestore;\n    }\n    /**\n     * Initialisation function if initialising using a button\n     *\n     * @param dt The datatables instance\n     * @param config the config for the button\n     */\n    function _buttonInit(dt, config) {\n        var SRC = new DataTable.StateRestoreCollection(dt, config.config);\n        _stateRegen(dt, SRC);\n    }\n    function _stateRegen(dt, src) {\n        var states = dt.stateRestore.states();\n        var button = dt.button('SaveStateRestore:name');\n        var stateButtons = [];\n        // Need to get the original configuration object, so we can rebuild it\n        // It might be nested, so need to traverse down the tree\n        if (button[0]) {\n            var idxs = button.index().split('-');\n            stateButtons = button[0].inst.c.buttons;\n            for (var i = 0; i < idxs.length; i++) {\n                if (stateButtons[idxs[i]].buttons) {\n                    stateButtons = stateButtons[idxs[i]].buttons;\n                }\n                else {\n                    stateButtons = [];\n                    break;\n                }\n            }\n        }\n        var stateRestoreOpts = dt.settings()[0]._stateRestore.c;\n        // remove any states from the previous rebuild - if they are still there they will be added later\n        for (var i = 0; i < stateButtons.length; i++) {\n            if (stateButtons[i].extend === 'stateRestore') {\n                stateButtons.splice(i, 1);\n                i--;\n            }\n        }\n        if (stateRestoreOpts._createInSaved) {\n            stateButtons.push('createState');\n        }\n        if (states === undefined || states.length === 0) {\n            stateButtons.push('<span class=\"' + src.classes.emptyStates + '\">' +\n                dt.i18n('stateRestore.emptyStates', src.c.i18n.emptyStates) +\n                '</span>');\n        }\n        else {\n            for (var _i = 0, states_5 = states; _i < states_5.length; _i++) {\n                var state = states_5[_i];\n                var split = Object.assign([], stateRestoreOpts.splitSecondaries);\n                if (split.includes('updateState') && !stateRestoreOpts.save) {\n                    split.splice(split.indexOf('updateState'), 1);\n                }\n                if (split.includes('renameState') &&\n                    (!stateRestoreOpts.save || !stateRestoreOpts.rename)) {\n                    split.splice(split.indexOf('renameState'), 1);\n                }\n                if (split.includes('removeState') && !stateRestoreOpts.remove) {\n                    split.splice(split.indexOf('removeState'), 1);\n                }\n                if (split.length > 0 &&\n                    !split.includes('<h3>' + state.s.identifier + '</h3>')) {\n                    split.unshift('<h3>' + state.s.identifier + '</h3>');\n                }\n                stateButtons.push({\n                    _stateRestore: state,\n                    attr: {\n                        title: state.s.identifier\n                    },\n                    config: {\n                        split: split\n                    },\n                    extend: 'stateRestore',\n                    text: state.s.identifier\n                });\n            }\n        }\n        dt.button('SaveStateRestore:name').collectionRebuild(stateButtons);\n        // Need to disable the removeAllStates button if there are no states and it is present\n        var buttons = dt.buttons();\n        for (var _a = 0, buttons_2 = buttons; _a < buttons_2.length; _a++) {\n            var butt = buttons_2[_a];\n            if ($(butt.node).hasClass('dtsr-removeAllStates')) {\n                if (states.length === 0) {\n                    dt.button(butt.node).disable();\n                }\n                else {\n                    dt.button(butt.node).enable();\n                }\n            }\n        }\n    }\n    // Attach a listener to the document which listens for DataTables initialisation\n    // events so we can automatically initialise\n    $(document).on('preInit.dt.dtsr', function (e, settings) {\n        if (e.namespace !== 'dt') {\n            return;\n        }\n        if (settings.oInit.stateRestore ||\n            DataTable.defaults.stateRestore) {\n            if (!settings._stateRestore) {\n                _init(settings, null);\n            }\n        }\n    });\n\n})();\n\n\nreturn DataTable;\n}));\n\n\n/*! Bootstrap integration for DataTables' StateRestore\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net-bs5', 'datatables.net-staterestore'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net-bs5')(root, $);\n\t\t\t}\n\n\t\t\tif ( ! $.fn.dataTable.StateRestore ) {\n\t\t\t\trequire('datatables.net-staterestore')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n$.extend(true, DataTable.StateRestoreCollection.classes, {\n    checkBox: 'dtsr-check-box form-check-input',\n    checkLabel: 'dtsr-check-label form-check-label',\n    checkRow: 'dtsr-check-row form-check',\n    creationButton: 'dtsr-creation-button btn btn-secondary',\n    creationForm: 'dtsr-creation-form modal-body',\n    creationText: 'dtsr-creation-text modal-header',\n    creationTitle: 'dtsr-creation-title modal-title',\n    nameInput: 'dtsr-name-input form-control',\n    nameLabel: 'dtsr-name-label form-label'\n});\n$.extend(true, DataTable.StateRestore.classes, {\n    confirmationButton: 'dtsr-confirmation-button btn btn-secondary',\n    input: 'dtsr-input form-control'\n});\n\n\nreturn DataTable;\n}));\n\n\n"
  },
  {
    "path": "public/assets/DataTables/pdfmake-0.2.7/pdfmake.js",
    "content": "/*! pdfmake v0.2.7, @license MIT, @link http://pdfmake.org */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 9282:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = __webpack_require__(2136),\n    _require$codes = _require.codes,\n    ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,\n    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n    ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,\n    ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,\n    ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\n\nvar AssertionError = __webpack_require__(5961);\n\nvar _require2 = __webpack_require__(9539),\n    inspect = _require2.inspect;\n\nvar _require$types = (__webpack_require__(9539).types),\n    isPromise = _require$types.isPromise,\n    isRegExp = _require$types.isRegExp;\n\nvar objectAssign = Object.assign ? Object.assign : (__webpack_require__(8091).assign);\nvar objectIs = Object.is ? Object.is : __webpack_require__(609);\nvar errorCache = new Map();\nvar isDeepEqual;\nvar isDeepStrictEqual;\nvar parseExpressionAt;\nvar findNodeAround;\nvar decoder;\n\nfunction lazyLoadComparison() {\n  var comparison = __webpack_require__(9158);\n\n  isDeepEqual = comparison.isDeepEqual;\n  isDeepStrictEqual = comparison.isDeepStrictEqual;\n} // Escape control characters but not \\n and \\t to keep the line breaks and\n// indentation intact.\n// eslint-disable-next-line no-control-regex\n\n\nvar escapeSequencesRegExp = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/g;\nvar meta = (/* unused pure expression or super */ null && ([\"\\\\u0000\", \"\\\\u0001\", \"\\\\u0002\", \"\\\\u0003\", \"\\\\u0004\", \"\\\\u0005\", \"\\\\u0006\", \"\\\\u0007\", '\\\\b', '', '', \"\\\\u000b\", '\\\\f', '', \"\\\\u000e\", \"\\\\u000f\", \"\\\\u0010\", \"\\\\u0011\", \"\\\\u0012\", \"\\\\u0013\", \"\\\\u0014\", \"\\\\u0015\", \"\\\\u0016\", \"\\\\u0017\", \"\\\\u0018\", \"\\\\u0019\", \"\\\\u001a\", \"\\\\u001b\", \"\\\\u001c\", \"\\\\u001d\", \"\\\\u001e\", \"\\\\u001f\"]));\n\nvar escapeFn = function escapeFn(str) {\n  return meta[str.charCodeAt(0)];\n};\n\nvar warned = false; // The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\nvar NO_EXCEPTION_SENTINEL = {}; // All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction innerFail(obj) {\n  if (obj.message instanceof Error) throw obj.message;\n  throw new AssertionError(obj);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFn) {\n  var argsLen = arguments.length;\n  var internalMessage;\n\n  if (argsLen === 0) {\n    internalMessage = 'Failed';\n  } else if (argsLen === 1) {\n    message = actual;\n    actual = undefined;\n  } else {\n    if (warned === false) {\n      warned = true;\n      var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n      warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');\n    }\n\n    if (argsLen === 2) operator = '!=';\n  }\n\n  if (message instanceof Error) throw message;\n  var errArgs = {\n    actual: actual,\n    expected: expected,\n    operator: operator === undefined ? 'fail' : operator,\n    stackStartFn: stackStartFn || fail\n  };\n\n  if (message !== undefined) {\n    errArgs.message = message;\n  }\n\n  var err = new AssertionError(errArgs);\n\n  if (internalMessage) {\n    err.message = internalMessage;\n    err.generatedMessage = true;\n  }\n\n  throw err;\n}\n\nassert.fail = fail; // The AssertionError is defined in internal/error.\n\nassert.AssertionError = AssertionError;\n\nfunction innerOk(fn, argLen, value, message) {\n  if (!value) {\n    var generatedMessage = false;\n\n    if (argLen === 0) {\n      generatedMessage = true;\n      message = 'No value argument passed to `assert.ok()`';\n    } else if (message instanceof Error) {\n      throw message;\n    }\n\n    var err = new AssertionError({\n      actual: value,\n      expected: true,\n      message: message,\n      operator: '==',\n      stackStartFn: fn\n    });\n    err.generatedMessage = generatedMessage;\n    throw err;\n  }\n} // Pure assertion tests whether a value is truthy, as determined\n// by !!value.\n\n\nfunction ok() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  innerOk.apply(void 0, [ok, args.length].concat(args));\n}\n\nassert.ok = ok; // The equality assertion tests shallow, coercive equality with ==.\n\n/* eslint-disable no-restricted-properties */\n\nassert.equal = function equal(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  } // eslint-disable-next-line eqeqeq\n\n\n  if (actual != expected) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: '==',\n      stackStartFn: equal\n    });\n  }\n}; // The non-equality assertion tests for whether two objects are not\n// equal with !=.\n\n\nassert.notEqual = function notEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  } // eslint-disable-next-line eqeqeq\n\n\n  if (actual == expected) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: '!=',\n      stackStartFn: notEqual\n    });\n  }\n}; // The equivalence assertion tests a deep equality relation.\n\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n\n  if (isDeepEqual === undefined) lazyLoadComparison();\n\n  if (!isDeepEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'deepEqual',\n      stackStartFn: deepEqual\n    });\n  }\n}; // The non-equivalence assertion tests for any deep inequality.\n\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n\n  if (isDeepEqual === undefined) lazyLoadComparison();\n\n  if (isDeepEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'notDeepEqual',\n      stackStartFn: notDeepEqual\n    });\n  }\n};\n/* eslint-enable */\n\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n\n  if (isDeepEqual === undefined) lazyLoadComparison();\n\n  if (!isDeepStrictEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'deepStrictEqual',\n      stackStartFn: deepStrictEqual\n    });\n  }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\n\nfunction notDeepStrictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n\n  if (isDeepEqual === undefined) lazyLoadComparison();\n\n  if (isDeepStrictEqual(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'notDeepStrictEqual',\n      stackStartFn: notDeepStrictEqual\n    });\n  }\n}\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n\n  if (!objectIs(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'strictEqual',\n      stackStartFn: strictEqual\n    });\n  }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n  if (arguments.length < 2) {\n    throw new ERR_MISSING_ARGS('actual', 'expected');\n  }\n\n  if (objectIs(actual, expected)) {\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: 'notStrictEqual',\n      stackStartFn: notStrictEqual\n    });\n  }\n};\n\nvar Comparison = function Comparison(obj, keys, actual) {\n  var _this = this;\n\n  _classCallCheck(this, Comparison);\n\n  keys.forEach(function (key) {\n    if (key in obj) {\n      if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && obj[key].test(actual[key])) {\n        _this[key] = actual[key];\n      } else {\n        _this[key] = obj[key];\n      }\n    }\n  });\n};\n\nfunction compareExceptionKey(actual, expected, key, message, keys, fn) {\n  if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n    if (!message) {\n      // Create placeholder objects to create a nice output.\n      var a = new Comparison(actual, keys);\n      var b = new Comparison(expected, keys, actual);\n      var err = new AssertionError({\n        actual: a,\n        expected: b,\n        operator: 'deepStrictEqual',\n        stackStartFn: fn\n      });\n      err.actual = actual;\n      err.expected = expected;\n      err.operator = fn.name;\n      throw err;\n    }\n\n    innerFail({\n      actual: actual,\n      expected: expected,\n      message: message,\n      operator: fn.name,\n      stackStartFn: fn\n    });\n  }\n}\n\nfunction expectedException(actual, expected, msg, fn) {\n  if (typeof expected !== 'function') {\n    if (isRegExp(expected)) return expected.test(actual); // assert.doesNotThrow does not accept objects.\n\n    if (arguments.length === 2) {\n      throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);\n    } // Handle primitives properly.\n\n\n    if (_typeof(actual) !== 'object' || actual === null) {\n      var err = new AssertionError({\n        actual: actual,\n        expected: expected,\n        message: msg,\n        operator: 'deepStrictEqual',\n        stackStartFn: fn\n      });\n      err.operator = fn.name;\n      throw err;\n    }\n\n    var keys = Object.keys(expected); // Special handle errors to make sure the name and the message are compared\n    // as well.\n\n    if (expected instanceof Error) {\n      keys.push('name', 'message');\n    } else if (keys.length === 0) {\n      throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');\n    }\n\n    if (isDeepEqual === undefined) lazyLoadComparison();\n    keys.forEach(function (key) {\n      if (typeof actual[key] === 'string' && isRegExp(expected[key]) && expected[key].test(actual[key])) {\n        return;\n      }\n\n      compareExceptionKey(actual, expected, key, msg, keys, fn);\n    });\n    return true;\n  } // Guard instanceof against arrow functions as they don't have a prototype.\n\n\n  if (expected.prototype !== undefined && actual instanceof expected) {\n    return true;\n  }\n\n  if (Error.isPrototypeOf(expected)) {\n    return false;\n  }\n\n  return expected.call({}, actual) === true;\n}\n\nfunction getActual(fn) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);\n  }\n\n  try {\n    fn();\n  } catch (e) {\n    return e;\n  }\n\n  return NO_EXCEPTION_SENTINEL;\n}\n\nfunction checkIsPromise(obj) {\n  // Accept native ES6 promises and promises that are implemented in a similar\n  // way. Do not accept thenables that use a function as `obj` and that have no\n  // `catch` handler.\n  // TODO: thenables are checked up until they have the correct methods,\n  // but according to documentation, the `then` method should receive\n  // the `fulfill` and `reject` arguments as well or it may be never resolved.\n  return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\n\nfunction waitForActual(promiseFn) {\n  return Promise.resolve().then(function () {\n    var resultPromise;\n\n    if (typeof promiseFn === 'function') {\n      // Return a rejected promise if `promiseFn` throws synchronously.\n      resultPromise = promiseFn(); // Fail in case no promise is returned.\n\n      if (!checkIsPromise(resultPromise)) {\n        throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);\n      }\n    } else if (checkIsPromise(promiseFn)) {\n      resultPromise = promiseFn;\n    } else {\n      throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);\n    }\n\n    return Promise.resolve().then(function () {\n      return resultPromise;\n    }).then(function () {\n      return NO_EXCEPTION_SENTINEL;\n    }).catch(function (e) {\n      return e;\n    });\n  });\n}\n\nfunction expectsError(stackStartFn, actual, error, message) {\n  if (typeof error === 'string') {\n    if (arguments.length === 4) {\n      throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n    }\n\n    if (_typeof(actual) === 'object' && actual !== null) {\n      if (actual.message === error) {\n        throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error message \\\"\".concat(actual.message, \"\\\" is identical to the message.\"));\n      }\n    } else if (actual === error) {\n      throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error \\\"\".concat(actual, \"\\\" is identical to the message.\"));\n    }\n\n    message = error;\n    error = undefined;\n  } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n  }\n\n  if (actual === NO_EXCEPTION_SENTINEL) {\n    var details = '';\n\n    if (error && error.name) {\n      details += \" (\".concat(error.name, \")\");\n    }\n\n    details += message ? \": \".concat(message) : '.';\n    var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';\n    innerFail({\n      actual: undefined,\n      expected: error,\n      operator: stackStartFn.name,\n      message: \"Missing expected \".concat(fnType).concat(details),\n      stackStartFn: stackStartFn\n    });\n  }\n\n  if (error && !expectedException(actual, error, message, stackStartFn)) {\n    throw actual;\n  }\n}\n\nfunction expectsNoError(stackStartFn, actual, error, message) {\n  if (actual === NO_EXCEPTION_SENTINEL) return;\n\n  if (typeof error === 'string') {\n    message = error;\n    error = undefined;\n  }\n\n  if (!error || expectedException(actual, error)) {\n    var details = message ? \": \".concat(message) : '.';\n    var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';\n    innerFail({\n      actual: actual,\n      expected: error,\n      operator: stackStartFn.name,\n      message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + \"Actual message: \\\"\".concat(actual && actual.message, \"\\\"\"),\n      stackStartFn: stackStartFn\n    });\n  }\n\n  throw actual;\n}\n\nassert.throws = function throws(promiseFn) {\n  for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    args[_key2 - 1] = arguments[_key2];\n  }\n\n  expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n};\n\nassert.rejects = function rejects(promiseFn) {\n  for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n    args[_key3 - 1] = arguments[_key3];\n  }\n\n  return waitForActual(promiseFn).then(function (result) {\n    return expectsError.apply(void 0, [rejects, result].concat(args));\n  });\n};\n\nassert.doesNotThrow = function doesNotThrow(fn) {\n  for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n    args[_key4 - 1] = arguments[_key4];\n  }\n\n  expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n};\n\nassert.doesNotReject = function doesNotReject(fn) {\n  for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n    args[_key5 - 1] = arguments[_key5];\n  }\n\n  return waitForActual(fn).then(function (result) {\n    return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n  });\n};\n\nassert.ifError = function ifError(err) {\n  if (err !== null && err !== undefined) {\n    var message = 'ifError got unwanted exception: ';\n\n    if (_typeof(err) === 'object' && typeof err.message === 'string') {\n      if (err.message.length === 0 && err.constructor) {\n        message += err.constructor.name;\n      } else {\n        message += err.message;\n      }\n    } else {\n      message += inspect(err);\n    }\n\n    var newErr = new AssertionError({\n      actual: err,\n      expected: null,\n      operator: 'ifError',\n      message: message,\n      stackStartFn: ifError\n    }); // Make sure we actually have a stack trace!\n\n    var origStack = err.stack;\n\n    if (typeof origStack === 'string') {\n      // This will remove any duplicated frames from the error frames taken\n      // from within `ifError` and add the original error frames to the newly\n      // created ones.\n      var tmp2 = origStack.split('\\n');\n      tmp2.shift(); // Filter all frames existing in err.stack.\n\n      var tmp1 = newErr.stack.split('\\n');\n\n      for (var i = 0; i < tmp2.length; i++) {\n        // Find the first occurrence of the frame.\n        var pos = tmp1.indexOf(tmp2[i]);\n\n        if (pos !== -1) {\n          // Only keep new frames.\n          tmp1 = tmp1.slice(0, pos);\n          break;\n        }\n      }\n\n      newErr.stack = \"\".concat(tmp1.join('\\n'), \"\\n\").concat(tmp2.join('\\n'));\n    }\n\n    throw newErr;\n  }\n}; // Expose a strict only variant of assert\n\n\nfunction strict() {\n  for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n    args[_key6] = arguments[_key6];\n  }\n\n  innerOk.apply(void 0, [strict, args.length].concat(args));\n}\n\nassert.strict = objectAssign(strict, assert, {\n  equal: assert.strictEqual,\n  deepEqual: assert.deepStrictEqual,\n  notEqual: assert.notStrictEqual,\n  notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\n/***/ }),\n\n/***/ 5961:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n// Currently in sync with Node.js lib/internal/assert/assertion_error.js\n// https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c\n\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar _require = __webpack_require__(9539),\n    inspect = _require.inspect;\n\nvar _require2 = __webpack_require__(2136),\n    ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n\n\nfunction repeat(str, count) {\n  count = Math.floor(count);\n  if (str.length == 0 || count == 0) return '';\n  var maxCount = str.length * count;\n  count = Math.floor(Math.log(count) / Math.log(2));\n\n  while (count) {\n    str += str;\n    count--;\n  }\n\n  str += str.substring(0, maxCount - str.length);\n  return str;\n}\n\nvar blue = '';\nvar green = '';\nvar red = '';\nvar white = '';\nvar kReadableOperator = {\n  deepStrictEqual: 'Expected values to be strictly deep-equal:',\n  strictEqual: 'Expected values to be strictly equal:',\n  strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n  deepEqual: 'Expected values to be loosely deep-equal:',\n  equal: 'Expected values to be loosely equal:',\n  notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n  notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n  notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n  notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n  notEqual: 'Expected \"actual\" to be loosely unequal to:',\n  notIdentical: 'Values identical but not reference-equal:'\n}; // Comparing short primitives should just show === / !== instead of using the\n// diff.\n\nvar kMaxShortLength = 10;\n\nfunction copyError(source) {\n  var keys = Object.keys(source);\n  var target = Object.create(Object.getPrototypeOf(source));\n  keys.forEach(function (key) {\n    target[key] = source[key];\n  });\n  Object.defineProperty(target, 'message', {\n    value: source.message\n  });\n  return target;\n}\n\nfunction inspectValue(val) {\n  // The util.inspect default values could be changed. This makes sure the\n  // error messages contain the necessary information nevertheless.\n  return inspect(val, {\n    compact: false,\n    customInspect: false,\n    depth: 1000,\n    maxArrayLength: Infinity,\n    // Assert compares only enumerable properties (with a few exceptions).\n    showHidden: false,\n    // Having a long line as error is better than wrapping the line for\n    // comparison for now.\n    // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n    // have meta information about the inspected properties (i.e., know where\n    // in what line the property starts and ends).\n    breakLength: Infinity,\n    // Assert does not detect proxies currently.\n    showProxy: false,\n    sorted: true,\n    // Inspect getters as we also check them when comparing entries.\n    getters: true\n  });\n}\n\nfunction createErrDiff(actual, expected, operator) {\n  var other = '';\n  var res = '';\n  var lastPos = 0;\n  var end = '';\n  var skipped = false;\n  var actualInspected = inspectValue(actual);\n  var actualLines = actualInspected.split('\\n');\n  var expectedLines = inspectValue(expected).split('\\n');\n  var i = 0;\n  var indicator = ''; // In case both values are objects explicitly mark them as not reference equal\n  // for the `strictEqual` operator.\n\n  if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) {\n    operator = 'strictEqualObject';\n  } // If \"actual\" and \"expected\" fit on a single line and they are not strictly\n  // equal, check further special handling.\n\n\n  if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n    var inputLength = actualLines[0].length + expectedLines[0].length; // If the character length of \"actual\" and \"expected\" together is less than\n    // kMaxShortLength and if neither is an object and at least one of them is\n    // not `zero`, use the strict equal comparison to visualize the output.\n\n    if (inputLength <= kMaxShortLength) {\n      if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) {\n        // -0 === +0\n        return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n      }\n    } else if (operator !== 'strictEqualObject') {\n      // If the stderr is a tty and the input length is lower than the current\n      // columns per line, add a mismatch indicator below the output. If it is\n      // not a tty, use a default value of 80 characters.\n      var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n\n      if (inputLength < maxLength) {\n        while (actualLines[0][i] === expectedLines[0][i]) {\n          i++;\n        } // Ignore the first characters.\n\n\n        if (i > 2) {\n          // Add position indicator for the first mismatch in case it is a\n          // single line and the input length is less than the column length.\n          indicator = \"\\n  \".concat(repeat(' ', i), \"^\");\n          i = 0;\n        }\n      }\n    }\n  } // Remove all ending lines that match (this optimizes the output for\n  // readability by reducing the number of total changed lines).\n\n\n  var a = actualLines[actualLines.length - 1];\n  var b = expectedLines[expectedLines.length - 1];\n\n  while (a === b) {\n    if (i++ < 2) {\n      end = \"\\n  \".concat(a).concat(end);\n    } else {\n      other = a;\n    }\n\n    actualLines.pop();\n    expectedLines.pop();\n    if (actualLines.length === 0 || expectedLines.length === 0) break;\n    a = actualLines[actualLines.length - 1];\n    b = expectedLines[expectedLines.length - 1];\n  }\n\n  var maxLines = Math.max(actualLines.length, expectedLines.length); // Strict equal with identical objects that are not identical by reference.\n  // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() })\n\n  if (maxLines === 0) {\n    // We have to get the result again. The lines were all removed before.\n    var _actualLines = actualInspected.split('\\n'); // Only remove lines in case it makes sense to collapse those.\n    // TODO: Accept env to always show the full error.\n\n\n    if (_actualLines.length > 30) {\n      _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n\n      while (_actualLines.length > 27) {\n        _actualLines.pop();\n      }\n    }\n\n    return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join('\\n'), \"\\n\");\n  }\n\n  if (i > 3) {\n    end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n    skipped = true;\n  }\n\n  if (other !== '') {\n    end = \"\\n  \".concat(other).concat(end);\n    other = '';\n  }\n\n  var printedLines = 0;\n  var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n  var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n\n  for (i = 0; i < maxLines; i++) {\n    // Only extra expected lines exist\n    var cur = i - lastPos;\n\n    if (actualLines.length < i + 1) {\n      // If the last diverging line is more than one line above and the\n      // current line is at least line three, add some of the former lines and\n      // also add dots to indicate skipped entries.\n      if (cur > 1 && i > 2) {\n        if (cur > 4) {\n          res += \"\\n\".concat(blue, \"...\").concat(white);\n          skipped = true;\n        } else if (cur > 3) {\n          res += \"\\n  \".concat(expectedLines[i - 2]);\n          printedLines++;\n        }\n\n        res += \"\\n  \".concat(expectedLines[i - 1]);\n        printedLines++;\n      } // Mark the current line as the last diverging one.\n\n\n      lastPos = i; // Add the expected line to the cache.\n\n      other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n      printedLines++; // Only extra actual lines exist\n    } else if (expectedLines.length < i + 1) {\n      // If the last diverging line is more than one line above and the\n      // current line is at least line three, add some of the former lines and\n      // also add dots to indicate skipped entries.\n      if (cur > 1 && i > 2) {\n        if (cur > 4) {\n          res += \"\\n\".concat(blue, \"...\").concat(white);\n          skipped = true;\n        } else if (cur > 3) {\n          res += \"\\n  \".concat(actualLines[i - 2]);\n          printedLines++;\n        }\n\n        res += \"\\n  \".concat(actualLines[i - 1]);\n        printedLines++;\n      } // Mark the current line as the last diverging one.\n\n\n      lastPos = i; // Add the actual line to the result.\n\n      res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n      printedLines++; // Lines diverge\n    } else {\n      var expectedLine = expectedLines[i];\n      var actualLine = actualLines[i]; // If the lines diverge, specifically check for lines that only diverge by\n      // a trailing comma. In that case it is actually identical and we should\n      // mark it as such.\n\n      var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine); // If the expected line has a trailing comma but is otherwise identical,\n      // add a comma at the end of the actual line. Otherwise the output could\n      // look weird as in:\n      //\n      //   [\n      //     1         // No comma at the end!\n      // +   2\n      //   ]\n      //\n\n      if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) {\n        divergingLines = false;\n        actualLine += ',';\n      }\n\n      if (divergingLines) {\n        // If the last diverging line is more than one line above and the\n        // current line is at least line three, add some of the former lines and\n        // also add dots to indicate skipped entries.\n        if (cur > 1 && i > 2) {\n          if (cur > 4) {\n            res += \"\\n\".concat(blue, \"...\").concat(white);\n            skipped = true;\n          } else if (cur > 3) {\n            res += \"\\n  \".concat(actualLines[i - 2]);\n            printedLines++;\n          }\n\n          res += \"\\n  \".concat(actualLines[i - 1]);\n          printedLines++;\n        } // Mark the current line as the last diverging one.\n\n\n        lastPos = i; // Add the actual line to the result and cache the expected diverging\n        // line so consecutive diverging lines show up as +++--- and not +-+-+-.\n\n        res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n        other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n        printedLines += 2; // Lines are identical\n      } else {\n        // Add all cached information to the result before adding other things\n        // and reset the cache.\n        res += other;\n        other = ''; // If the last diverging line is exactly one line above or if it is the\n        // very first line, add the line to the result.\n\n        if (cur === 1 || i === 0) {\n          res += \"\\n  \".concat(actualLine);\n          printedLines++;\n        }\n      }\n    } // Inspected object to big (Show ~20 rows max)\n\n\n    if (printedLines > 20 && i < maxLines - 2) {\n      return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n    }\n  }\n\n  return \"\".concat(msg).concat(skipped ? skippedMsg : '', \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n}\n\nvar AssertionError =\n/*#__PURE__*/\nfunction (_Error) {\n  _inherits(AssertionError, _Error);\n\n  function AssertionError(options) {\n    var _this;\n\n    _classCallCheck(this, AssertionError);\n\n    if (_typeof(options) !== 'object' || options === null) {\n      throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);\n    }\n\n    var message = options.message,\n        operator = options.operator,\n        stackStartFn = options.stackStartFn;\n    var actual = options.actual,\n        expected = options.expected;\n    var limit = Error.stackTraceLimit;\n    Error.stackTraceLimit = 0;\n\n    if (message != null) {\n      _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, String(message)));\n    } else {\n      if (process.stderr && process.stderr.isTTY) {\n        // Reset on each call to make sure we handle dynamically set environment\n        // variables correct.\n        if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n          blue = \"\\x1B[34m\";\n          green = \"\\x1B[32m\";\n          white = \"\\x1B[39m\";\n          red = \"\\x1B[31m\";\n        } else {\n          blue = '';\n          green = '';\n          white = '';\n          red = '';\n        }\n      } // Prevent the error stack from being visible by duplicating the error\n      // in a very close way to the original in case both sides are actually\n      // instances of Error.\n\n\n      if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) {\n        actual = copyError(actual);\n        expected = copyError(expected);\n      }\n\n      if (operator === 'deepStrictEqual' || operator === 'strictEqual') {\n        _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, createErrDiff(actual, expected, operator)));\n      } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') {\n        // In case the objects are equal but the operator requires unequal, show\n        // the first object and say A equals B\n        var base = kReadableOperator[operator];\n        var res = inspectValue(actual).split('\\n'); // In case \"actual\" is an object, it should not be reference equal.\n\n        if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) {\n          base = kReadableOperator.notStrictEqualObject;\n        } // Only remove lines in case it makes sense to collapse those.\n        // TODO: Accept env to always show the full error.\n\n\n        if (res.length > 30) {\n          res[26] = \"\".concat(blue, \"...\").concat(white);\n\n          while (res.length > 27) {\n            res.pop();\n          }\n        } // Only print a single input.\n\n\n        if (res.length === 1) {\n          _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \" \").concat(res[0])));\n        } else {\n          _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \"\\n\\n\").concat(res.join('\\n'), \"\\n\")));\n        }\n      } else {\n        var _res = inspectValue(actual);\n\n        var other = '';\n        var knownOperators = kReadableOperator[operator];\n\n        if (operator === 'notDeepEqual' || operator === 'notEqual') {\n          _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n\n          if (_res.length > 1024) {\n            _res = \"\".concat(_res.slice(0, 1021), \"...\");\n          }\n        } else {\n          other = \"\".concat(inspectValue(expected));\n\n          if (_res.length > 512) {\n            _res = \"\".concat(_res.slice(0, 509), \"...\");\n          }\n\n          if (other.length > 512) {\n            other = \"\".concat(other.slice(0, 509), \"...\");\n          }\n\n          if (operator === 'deepEqual' || operator === 'equal') {\n            _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n          } else {\n            other = \" \".concat(operator, \" \").concat(other);\n          }\n        }\n\n        _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(_res).concat(other)));\n      }\n    }\n\n    Error.stackTraceLimit = limit;\n    _this.generatedMessage = !message;\n    Object.defineProperty(_assertThisInitialized(_this), 'name', {\n      value: 'AssertionError [ERR_ASSERTION]',\n      enumerable: false,\n      writable: true,\n      configurable: true\n    });\n    _this.code = 'ERR_ASSERTION';\n    _this.actual = actual;\n    _this.expected = expected;\n    _this.operator = operator;\n\n    if (Error.captureStackTrace) {\n      // eslint-disable-next-line no-restricted-syntax\n      Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n    } // Create error message including the error code in the name.\n\n\n    _this.stack; // Reset the name.\n\n    _this.name = 'AssertionError';\n    return _possibleConstructorReturn(_this);\n  }\n\n  _createClass(AssertionError, [{\n    key: \"toString\",\n    value: function toString() {\n      return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n    }\n  }, {\n    key: inspect.custom,\n    value: function value(recurseTimes, ctx) {\n      // This limits the `actual` and `expected` property default inspection to\n      // the minimum depth. Otherwise those values would be too verbose compared\n      // to the actual error message which contains a combined view of these two\n      // input values.\n      return inspect(this, _objectSpread({}, ctx, {\n        customInspect: false,\n        depth: 0\n      }));\n    }\n  }]);\n\n  return AssertionError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = AssertionError;\n\n/***/ }),\n\n/***/ 2136:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// Currently in sync with Node.js lib/internal/errors.js\n// https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f\n\n/* eslint node-core/documented-errors: \"error\" */\n\n/* eslint node-core/alphabetize-errors: \"error\" */\n\n/* eslint node-core/prefer-util-format-errors: \"error\" */\n // The whole point behind this internal module is to allow Node.js to no\n// longer be forced to treat every error message change as a semver-major\n// change. The NodeError classes here all expose a `code` property whose\n// value statically and permanently identifies the error. While the error\n// message may change, the code should not.\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar codes = {}; // Lazy loaded\n\nvar assert;\nvar util;\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inherits(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      var _this;\n\n      _classCallCheck(this, NodeError);\n\n      _this = _possibleConstructorReturn(this, _getPrototypeOf(NodeError).call(this, getMessage(arg1, arg2, arg3)));\n      _this.code = code;\n      return _this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_AMBIGUOUS_ARGUMENT', 'The \"%s\" argument is ambiguous. %s', TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  if (assert === undefined) assert = __webpack_require__(9282);\n  assert(typeof name === 'string', \"'name' must be a string\"); // determiner: 'must be' or 'must not be'\n\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } // TODO(BridgeAR): Improve the output by showing `null` and similar.\n\n\n  msg += \". Received type \".concat(_typeof(actual));\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_VALUE', function (name, value) {\n  var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid';\n  if (util === undefined) util = __webpack_require__(9539);\n  var inspected = util.inspect(value);\n\n  if (inspected.length > 128) {\n    inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n  }\n\n  return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n}, TypeError, RangeError);\ncreateErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) {\n  var type;\n\n  if (value && value.constructor && value.constructor.name) {\n    type = \"instance of \".concat(value.constructor.name);\n  } else {\n    type = \"type \".concat(_typeof(value));\n  }\n\n  return \"Expected \".concat(input, \" to be returned from the \\\"\").concat(name, \"\\\"\") + \" function but got \".concat(type, \".\");\n}, TypeError);\ncreateErrorType('ERR_MISSING_ARGS', function () {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  if (assert === undefined) assert = __webpack_require__(9282);\n  assert(args.length > 0, 'At least one arg needs to be specified');\n  var msg = 'The ';\n  var len = args.length;\n  args = args.map(function (a) {\n    return \"\\\"\".concat(a, \"\\\"\");\n  });\n\n  switch (len) {\n    case 1:\n      msg += \"\".concat(args[0], \" argument\");\n      break;\n\n    case 2:\n      msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n      break;\n\n    default:\n      msg += args.slice(0, len - 1).join(', ');\n      msg += \", and \".concat(args[len - 1], \" arguments\");\n      break;\n  }\n\n  return \"\".concat(msg, \" must be specified\");\n}, TypeError);\nmodule.exports.codes = codes;\n\n/***/ }),\n\n/***/ 9158:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// Currently in sync with Node.js lib/internal/util/comparisons.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar regexFlagsSupported = /a/g.flags !== undefined;\n\nvar arrayFromSet = function arrayFromSet(set) {\n  var array = [];\n  set.forEach(function (value) {\n    return array.push(value);\n  });\n  return array;\n};\n\nvar arrayFromMap = function arrayFromMap(map) {\n  var array = [];\n  map.forEach(function (value, key) {\n    return array.push([key, value]);\n  });\n  return array;\n};\n\nvar objectIs = Object.is ? Object.is : __webpack_require__(609);\nvar objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () {\n  return [];\n};\nvar numberIsNaN = Number.isNaN ? Number.isNaN : __webpack_require__(360);\n\nfunction uncurryThis(f) {\n  return f.call.bind(f);\n}\n\nvar hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);\nvar propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\nvar objectToString = uncurryThis(Object.prototype.toString);\n\nvar _require$types = (__webpack_require__(9539).types),\n    isAnyArrayBuffer = _require$types.isAnyArrayBuffer,\n    isArrayBufferView = _require$types.isArrayBufferView,\n    isDate = _require$types.isDate,\n    isMap = _require$types.isMap,\n    isRegExp = _require$types.isRegExp,\n    isSet = _require$types.isSet,\n    isNativeError = _require$types.isNativeError,\n    isBoxedPrimitive = _require$types.isBoxedPrimitive,\n    isNumberObject = _require$types.isNumberObject,\n    isStringObject = _require$types.isStringObject,\n    isBooleanObject = _require$types.isBooleanObject,\n    isBigIntObject = _require$types.isBigIntObject,\n    isSymbolObject = _require$types.isSymbolObject,\n    isFloat32Array = _require$types.isFloat32Array,\n    isFloat64Array = _require$types.isFloat64Array;\n\nfunction isNonIndex(key) {\n  if (key.length === 0 || key.length > 10) return true;\n\n  for (var i = 0; i < key.length; i++) {\n    var code = key.charCodeAt(i);\n    if (code < 48 || code > 57) return true;\n  } // The maximum size for an array is 2 ** 32 -1.\n\n\n  return key.length === 10 && key >= Math.pow(2, 32);\n}\n\nfunction getOwnNonIndexProperties(value) {\n  return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n} // Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n\n\nfunction compare(a, b) {\n  if (a === b) {\n    return 0;\n  }\n\n  var x = a.length;\n  var y = b.length;\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i];\n      y = b[i];\n      break;\n    }\n  }\n\n  if (x < y) {\n    return -1;\n  }\n\n  if (y < x) {\n    return 1;\n  }\n\n  return 0;\n}\n\nvar ONLY_ENUMERABLE = undefined;\nvar kStrict = true;\nvar kLoose = false;\nvar kNoIterator = 0;\nvar kIsArray = 1;\nvar kIsSet = 2;\nvar kIsMap = 3; // Check if they have the same source and flags\n\nfunction areSimilarRegExps(a, b) {\n  return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n}\n\nfunction areSimilarFloatArrays(a, b) {\n  if (a.byteLength !== b.byteLength) {\n    return false;\n  }\n\n  for (var offset = 0; offset < a.byteLength; offset++) {\n    if (a[offset] !== b[offset]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction areSimilarTypedArrays(a, b) {\n  if (a.byteLength !== b.byteLength) {\n    return false;\n  }\n\n  return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n}\n\nfunction areEqualArrayBuffers(buf1, buf2) {\n  return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n}\n\nfunction isEqualBoxedPrimitive(val1, val2) {\n  if (isNumberObject(val1)) {\n    return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n  }\n\n  if (isStringObject(val1)) {\n    return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n  }\n\n  if (isBooleanObject(val1)) {\n    return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n  }\n\n  if (isBigIntObject(val1)) {\n    return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n  }\n\n  return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n} // Notes: Type tags are historical [[Class]] properties that can be set by\n// FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS\n// and retrieved using Object.prototype.toString.call(obj) in JS\n// See https://tc39.github.io/ecma262/#sec-object.prototype.tostring\n// for a list of tags pre-defined in the spec.\n// There are some unspecified tags in the wild too (e.g. typed array tags).\n// Since tags can be altered, they only serve fast failures\n//\n// Typed arrays and buffers are checked by comparing the content in their\n// underlying ArrayBuffer. This optimization requires that it's\n// reasonable to interpret their underlying memory in the same way,\n// which is checked by comparing their type tags.\n// (e.g. a Uint8Array and a Uint16Array with the same memory content\n// could still be different because they will be interpreted differently).\n//\n// For strict comparison, objects should have\n// a) The same built-in type tags\n// b) The same prototypes.\n\n\nfunction innerDeepEqual(val1, val2, strict, memos) {\n  // All identical values are equivalent, as determined by ===.\n  if (val1 === val2) {\n    if (val1 !== 0) return true;\n    return strict ? objectIs(val1, val2) : true;\n  } // Check more closely if val1 and val2 are equal.\n\n\n  if (strict) {\n    if (_typeof(val1) !== 'object') {\n      return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2);\n    }\n\n    if (_typeof(val2) !== 'object' || val1 === null || val2 === null) {\n      return false;\n    }\n\n    if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n      return false;\n    }\n  } else {\n    if (val1 === null || _typeof(val1) !== 'object') {\n      if (val2 === null || _typeof(val2) !== 'object') {\n        // eslint-disable-next-line eqeqeq\n        return val1 == val2;\n      }\n\n      return false;\n    }\n\n    if (val2 === null || _typeof(val2) !== 'object') {\n      return false;\n    }\n  }\n\n  var val1Tag = objectToString(val1);\n  var val2Tag = objectToString(val2);\n\n  if (val1Tag !== val2Tag) {\n    return false;\n  }\n\n  if (Array.isArray(val1)) {\n    // Check for sparse arrays and general fast path\n    if (val1.length !== val2.length) {\n      return false;\n    }\n\n    var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n    var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n    if (keys1.length !== keys2.length) {\n      return false;\n    }\n\n    return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n  } // [browserify] This triggers on certain types in IE (Map/Set) so we don't\n  // wan't to early return out of the rest of the checks. However we can check\n  // if the second value is one of these values and the first isn't.\n\n\n  if (val1Tag === '[object Object]') {\n    // return keyCheck(val1, val2, strict, memos, kNoIterator);\n    if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n      return false;\n    }\n  }\n\n  if (isDate(val1)) {\n    if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n      return false;\n    }\n  } else if (isRegExp(val1)) {\n    if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n      return false;\n    }\n  } else if (isNativeError(val1) || val1 instanceof Error) {\n    // Do not compare the stack as it might differ even though the error itself\n    // is otherwise identical.\n    if (val1.message !== val2.message || val1.name !== val2.name) {\n      return false;\n    }\n  } else if (isArrayBufferView(val1)) {\n    if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n      if (!areSimilarFloatArrays(val1, val2)) {\n        return false;\n      }\n    } else if (!areSimilarTypedArrays(val1, val2)) {\n      return false;\n    } // Buffer.compare returns true, so val1.length === val2.length. If they both\n    // only contain numeric keys, we don't need to exam further than checking\n    // the symbols.\n\n\n    var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n\n    var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n    if (_keys.length !== _keys2.length) {\n      return false;\n    }\n\n    return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n  } else if (isSet(val1)) {\n    if (!isSet(val2) || val1.size !== val2.size) {\n      return false;\n    }\n\n    return keyCheck(val1, val2, strict, memos, kIsSet);\n  } else if (isMap(val1)) {\n    if (!isMap(val2) || val1.size !== val2.size) {\n      return false;\n    }\n\n    return keyCheck(val1, val2, strict, memos, kIsMap);\n  } else if (isAnyArrayBuffer(val1)) {\n    if (!areEqualArrayBuffers(val1, val2)) {\n      return false;\n    }\n  } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n    return false;\n  }\n\n  return keyCheck(val1, val2, strict, memos, kNoIterator);\n}\n\nfunction getEnumerables(val, keys) {\n  return keys.filter(function (k) {\n    return propertyIsEnumerable(val, k);\n  });\n}\n\nfunction keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n  // For all remaining Object pairs, including Array, objects and Maps,\n  // equivalence is determined by having:\n  // a) The same number of owned enumerable properties\n  // b) The same set of keys/indexes (although not necessarily the same order)\n  // c) Equivalent values for every corresponding key/index\n  // d) For Sets and Maps, equal contents\n  // Note: this accounts for both named and indexed properties on Arrays.\n  if (arguments.length === 5) {\n    aKeys = Object.keys(val1);\n    var bKeys = Object.keys(val2); // The pair must have the same number of owned properties.\n\n    if (aKeys.length !== bKeys.length) {\n      return false;\n    }\n  } // Cheap key test\n\n\n  var i = 0;\n\n  for (; i < aKeys.length; i++) {\n    if (!hasOwnProperty(val2, aKeys[i])) {\n      return false;\n    }\n  }\n\n  if (strict && arguments.length === 5) {\n    var symbolKeysA = objectGetOwnPropertySymbols(val1);\n\n    if (symbolKeysA.length !== 0) {\n      var count = 0;\n\n      for (i = 0; i < symbolKeysA.length; i++) {\n        var key = symbolKeysA[i];\n\n        if (propertyIsEnumerable(val1, key)) {\n          if (!propertyIsEnumerable(val2, key)) {\n            return false;\n          }\n\n          aKeys.push(key);\n          count++;\n        } else if (propertyIsEnumerable(val2, key)) {\n          return false;\n        }\n      }\n\n      var symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n      if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) {\n        return false;\n      }\n    } else {\n      var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n      if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n        return false;\n      }\n    }\n  }\n\n  if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n    return true;\n  } // Use memos to handle cycles.\n\n\n  if (memos === undefined) {\n    memos = {\n      val1: new Map(),\n      val2: new Map(),\n      position: 0\n    };\n  } else {\n    // We prevent up to two map.has(x) calls by directly retrieving the value\n    // and checking for undefined. The map can only contain numbers, so it is\n    // safe to check for undefined only.\n    var val2MemoA = memos.val1.get(val1);\n\n    if (val2MemoA !== undefined) {\n      var val2MemoB = memos.val2.get(val2);\n\n      if (val2MemoB !== undefined) {\n        return val2MemoA === val2MemoB;\n      }\n    }\n\n    memos.position++;\n  }\n\n  memos.val1.set(val1, memos.position);\n  memos.val2.set(val2, memos.position);\n  var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n  memos.val1.delete(val1);\n  memos.val2.delete(val2);\n  return areEq;\n}\n\nfunction setHasEqualElement(set, val1, strict, memo) {\n  // Go looking.\n  var setValues = arrayFromSet(set);\n\n  for (var i = 0; i < setValues.length; i++) {\n    var val2 = setValues[i];\n\n    if (innerDeepEqual(val1, val2, strict, memo)) {\n      // Remove the matching element to make sure we do not check that again.\n      set.delete(val2);\n      return true;\n    }\n  }\n\n  return false;\n} // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using\n// Sadly it is not possible to detect corresponding values properly in case the\n// type is a string, number, bigint or boolean. The reason is that those values\n// can match lots of different string values (e.g., 1n == '+00001').\n\n\nfunction findLooseMatchingPrimitives(prim) {\n  switch (_typeof(prim)) {\n    case 'undefined':\n      return null;\n\n    case 'object':\n      // Only pass in null as object!\n      return undefined;\n\n    case 'symbol':\n      return false;\n\n    case 'string':\n      prim = +prim;\n    // Loose equal entries exist only if the string is possible to convert to\n    // a regular number and not NaN.\n    // Fall through\n\n    case 'number':\n      if (numberIsNaN(prim)) {\n        return false;\n      }\n\n  }\n\n  return true;\n}\n\nfunction setMightHaveLoosePrim(a, b, prim) {\n  var altValue = findLooseMatchingPrimitives(prim);\n  if (altValue != null) return altValue;\n  return b.has(altValue) && !a.has(altValue);\n}\n\nfunction mapMightHaveLoosePrim(a, b, prim, item, memo) {\n  var altValue = findLooseMatchingPrimitives(prim);\n\n  if (altValue != null) {\n    return altValue;\n  }\n\n  var curB = b.get(altValue);\n\n  if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n    return false;\n  }\n\n  return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n}\n\nfunction setEquiv(a, b, strict, memo) {\n  // This is a lazily initiated Set of entries which have to be compared\n  // pairwise.\n  var set = null;\n  var aValues = arrayFromSet(a);\n\n  for (var i = 0; i < aValues.length; i++) {\n    var val = aValues[i]; // Note: Checking for the objects first improves the performance for object\n    // heavy sets but it is a minor slow down for primitives. As they are fast\n    // to check this improves the worst case scenario instead.\n\n    if (_typeof(val) === 'object' && val !== null) {\n      if (set === null) {\n        set = new Set();\n      } // If the specified value doesn't exist in the second set its an not null\n      // object (or non strict only: a not matching primitive) we'll need to go\n      // hunting for something thats deep-(strict-)equal to it. To make this\n      // O(n log n) complexity we have to copy these values in a new set first.\n\n\n      set.add(val);\n    } else if (!b.has(val)) {\n      if (strict) return false; // Fast path to detect missing string, symbol, undefined and null values.\n\n      if (!setMightHaveLoosePrim(a, b, val)) {\n        return false;\n      }\n\n      if (set === null) {\n        set = new Set();\n      }\n\n      set.add(val);\n    }\n  }\n\n  if (set !== null) {\n    var bValues = arrayFromSet(b);\n\n    for (var _i = 0; _i < bValues.length; _i++) {\n      var _val = bValues[_i]; // We have to check if a primitive value is already\n      // matching and only if it's not, go hunting for it.\n\n      if (_typeof(_val) === 'object' && _val !== null) {\n        if (!setHasEqualElement(set, _val, strict, memo)) return false;\n      } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n        return false;\n      }\n    }\n\n    return set.size === 0;\n  }\n\n  return true;\n}\n\nfunction mapHasEqualEntry(set, map, key1, item1, strict, memo) {\n  // To be able to handle cases like:\n  //   Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']])\n  // ... we need to consider *all* matching keys, not just the first we find.\n  var setValues = arrayFromSet(set);\n\n  for (var i = 0; i < setValues.length; i++) {\n    var key2 = setValues[i];\n\n    if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) {\n      set.delete(key2);\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction mapEquiv(a, b, strict, memo) {\n  var set = null;\n  var aEntries = arrayFromMap(a);\n\n  for (var i = 0; i < aEntries.length; i++) {\n    var _aEntries$i = _slicedToArray(aEntries[i], 2),\n        key = _aEntries$i[0],\n        item1 = _aEntries$i[1];\n\n    if (_typeof(key) === 'object' && key !== null) {\n      if (set === null) {\n        set = new Set();\n      }\n\n      set.add(key);\n    } else {\n      // By directly retrieving the value we prevent another b.has(key) check in\n      // almost all possible cases.\n      var item2 = b.get(key);\n\n      if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n        if (strict) return false; // Fast path to detect missing string, symbol, undefined and null\n        // keys.\n\n        if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false;\n\n        if (set === null) {\n          set = new Set();\n        }\n\n        set.add(key);\n      }\n    }\n  }\n\n  if (set !== null) {\n    var bEntries = arrayFromMap(b);\n\n    for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n      var _bEntries$_i = _slicedToArray(bEntries[_i2], 2),\n          key = _bEntries$_i[0],\n          item = _bEntries$_i[1];\n\n      if (_typeof(key) === 'object' && key !== null) {\n        if (!mapHasEqualEntry(set, a, key, item, strict, memo)) return false;\n      } else if (!strict && (!a.has(key) || !innerDeepEqual(a.get(key), item, false, memo)) && !mapHasEqualEntry(set, a, key, item, false, memo)) {\n        return false;\n      }\n    }\n\n    return set.size === 0;\n  }\n\n  return true;\n}\n\nfunction objEquiv(a, b, strict, keys, memos, iterationType) {\n  // Sets and maps don't have their entries accessible via normal object\n  // properties.\n  var i = 0;\n\n  if (iterationType === kIsSet) {\n    if (!setEquiv(a, b, strict, memos)) {\n      return false;\n    }\n  } else if (iterationType === kIsMap) {\n    if (!mapEquiv(a, b, strict, memos)) {\n      return false;\n    }\n  } else if (iterationType === kIsArray) {\n    for (; i < a.length; i++) {\n      if (hasOwnProperty(a, i)) {\n        if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n          return false;\n        }\n      } else if (hasOwnProperty(b, i)) {\n        return false;\n      } else {\n        // Array is sparse.\n        var keysA = Object.keys(a);\n\n        for (; i < keysA.length; i++) {\n          var key = keysA[i];\n\n          if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n            return false;\n          }\n        }\n\n        if (keysA.length !== Object.keys(b).length) {\n          return false;\n        }\n\n        return true;\n      }\n    }\n  } // The pair must have equivalent values for every corresponding key.\n  // Possibly expensive deep test:\n\n\n  for (i = 0; i < keys.length; i++) {\n    var _key = keys[i];\n\n    if (!innerDeepEqual(a[_key], b[_key], strict, memos)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction isDeepEqual(val1, val2) {\n  return innerDeepEqual(val1, val2, kLoose);\n}\n\nfunction isDeepStrictEqual(val1, val2) {\n  return innerDeepEqual(val1, val2, kStrict);\n}\n\nmodule.exports = {\n  isDeepEqual: isDeepEqual,\n  isDeepStrictEqual: isDeepStrictEqual\n};\n\n/***/ }),\n\n/***/ 2055:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\n// The following break classes are handled by the pair table\nexports.OP = 0; // Opening punctuation\nexports.CL = 1; // Closing punctuation\nexports.CP = 2; // Closing parenthesis\nexports.QU = 3; // Ambiguous quotation\nexports.GL = 4; // Glue\nexports.NS = 5; // Non-starters\nexports.EX = 6; // Exclamation/Interrogation\nexports.SY = 7; // Symbols allowing break after\nexports.IS = 8; // Infix separator\nexports.PR = 9; // Prefix\nexports.PO = 10; // Postfix\nexports.NU = 11; // Numeric\nexports.AL = 12; // Alphabetic\nexports.HL = 13; // Hebrew Letter\nexports.ID = 14; // Ideographic\nexports.IN = 15; // Inseparable characters\nexports.HY = 16; // Hyphen\nexports.BA = 17; // Break after\nexports.BB = 18; // Break before\nexports.B2 = 19; // Break on either side (but not pair)\nexports.ZW = 20; // Zero-width space\nexports.CM = 21; // Combining marks\nexports.WJ = 22; // Word joiner\nexports.H2 = 23; // Hangul LV\nexports.H3 = 24; // Hangul LVT\nexports.JL = 25; // Hangul L Jamo\nexports.JV = 26; // Hangul V Jamo\nexports.JT = 27; // Hangul T Jamo\nexports.RI = 28; // Regional Indicator\nexports.EB = 29; // Emoji Base\nexports.EM = 30; // Emoji Modifier\nexports.ZWJ = 31; // Zero Width Joiner\nexports.CB = 32; // Contingent break\n\n// The following break classes are not handled by the pair table\nexports.AI = 33; // Ambiguous (Alphabetic or Ideograph)\nexports.BK = 34; // Break (mandatory)\nexports.CJ = 35; // Conditional Japanese Starter\nexports.CR = 36; // Carriage return\nexports.LF = 37; // Line feed\nexports.NL = 38; // Next line\nexports.SA = 39; // South-East Asian\nexports.SG = 40; // Surrogates\nexports.SP = 41; // Space\nexports.XX = 42; // Unknown\n\n/***/ }),\n\n/***/ 8383:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\nvar CI_BRK, CP_BRK, DI_BRK, IN_BRK, PR_BRK;\nexports.DI_BRK = DI_BRK = 0; // Direct break opportunity\nexports.IN_BRK = IN_BRK = 1; // Indirect break opportunity\nexports.CI_BRK = CI_BRK = 2; // Indirect break opportunity for combining marks\nexports.CP_BRK = CP_BRK = 3; // Prohibited break for combining marks\nexports.PR_BRK = PR_BRK = 4; // Prohibited break\n\n// Based on example pair table from https://www.unicode.org/reports/tr14/tr14-37.html#Table2\n// - ZWJ special processing for LB8a of Revision 41\n// - CB manually added as per Rule LB20\n// - CL, CP, NS, SY, IS, PR, PO, HY, BA, B2 and RI manually adjusted as per LB22 of Revision 45\nexports.pairTable = [\n//OP   , CL    , CP    , QU    , GL    , NS    , EX    , SY    , IS    , PR    , PO    , NU    , AL    , HL    , ID    , IN    , HY    , BA    , BB    , B2    , ZW    , CM    , WJ    , H2    , H3    , JL    , JV    , JT    , RI    , EB    , EM    , ZWJ   , CB\n[PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK],\n// OP\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// CL\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// CP\n[PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK],\n// QU\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK],\n// GL\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// NS\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// EX\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// SY\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// IS\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK],\n// PR\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// PO\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// NU\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// AL\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// HL\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// ID\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// IN\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// HY\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// BA\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK],\n// BB\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// B2\n[DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK],\n// ZW\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// CM\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK],\n// WJ\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// H2\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// H3\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// JL\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// JV\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// JT\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// RI\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK],\n// EB\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// EM\n[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK],\n// ZWJ\n[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK] // CB\n];\n\n/***/ }),\n\n/***/ 5106:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(9601);\nexports.EncodeStream = __webpack_require__(9126);\nexports.DecodeStream = __webpack_require__(3030);\nexports.Array = __webpack_require__(1988);\nexports.LazyArray = __webpack_require__(6768);\nexports.Bitfield = __webpack_require__(3425);\nexports.Boolean = __webpack_require__(9024);\nexports.Buffer = __webpack_require__(5250);\nexports.Enum = __webpack_require__(3100);\nexports.Optional = __webpack_require__(9541);\nexports.Reserved = __webpack_require__(7468);\nexports.String = __webpack_require__(1466);\nexports.Struct = __webpack_require__(1219);\nexports.VersionedStruct = __webpack_require__(3585);\nvar utils = __webpack_require__(6610);\nvar NumberT = __webpack_require__(6462);\nvar Pointer = __webpack_require__(8011);\nObject.assign(exports, utils, NumberT, Pointer);\n\n/***/ }),\n\n/***/ 1988:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n__webpack_require__(1539);\n__webpack_require__(8309);\n__webpack_require__(1038);\n__webpack_require__(8783);\n__webpack_require__(4916);\n__webpack_require__(2526);\n__webpack_require__(1817);\n__webpack_require__(2165);\n__webpack_require__(6992);\n__webpack_require__(3948);\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nvar _require = __webpack_require__(6462),\n  NumberT = _require.Number;\nvar utils = __webpack_require__(6610);\nvar ArrayT = /*#__PURE__*/function () {\n  function ArrayT(type, length, lengthType) {\n    if (lengthType === void 0) {\n      lengthType = 'count';\n    }\n    this.type = type;\n    this.length = length;\n    this.lengthType = lengthType;\n  }\n  var _proto = ArrayT.prototype;\n  _proto.decode = function decode(stream, parent) {\n    var length;\n    var pos = stream.pos;\n    var res = [];\n    var ctx = parent;\n    if (this.length != null) {\n      length = utils.resolveLength(this.length, stream, parent);\n    }\n    if (this.length instanceof NumberT) {\n      // define hidden properties\n      Object.defineProperties(res, {\n        parent: {\n          value: parent\n        },\n        _startOffset: {\n          value: pos\n        },\n        _currentOffset: {\n          value: 0,\n          writable: true\n        },\n        _length: {\n          value: length\n        }\n      });\n      ctx = res;\n    }\n    if (length == null || this.lengthType === 'bytes') {\n      var target = length != null ? stream.pos + length : (parent != null ? parent._length : undefined) ? parent._startOffset + parent._length : stream.length;\n      while (stream.pos < target) {\n        res.push(this.type.decode(stream, ctx));\n      }\n    } else {\n      for (var i = 0, end = length; i < end; i++) {\n        res.push(this.type.decode(stream, ctx));\n      }\n    }\n    return res;\n  };\n  _proto.size = function size(array, ctx) {\n    if (!array) {\n      return this.type.size(null, ctx) * utils.resolveLength(this.length, null, ctx);\n    }\n    var size = 0;\n    if (this.length instanceof NumberT) {\n      size += this.length.size();\n      ctx = {\n        parent: ctx\n      };\n    }\n    for (var _iterator = _createForOfIteratorHelperLoose(array), _step; !(_step = _iterator()).done;) {\n      var item = _step.value;\n      size += this.type.size(item, ctx);\n    }\n    return size;\n  };\n  _proto.encode = function encode(stream, array, parent) {\n    var ctx = parent;\n    if (this.length instanceof NumberT) {\n      ctx = {\n        pointers: [],\n        startOffset: stream.pos,\n        parent: parent\n      };\n      ctx.pointerOffset = stream.pos + this.size(array, ctx);\n      this.length.encode(stream, array.length);\n    }\n    for (var _iterator2 = _createForOfIteratorHelperLoose(array), _step2; !(_step2 = _iterator2()).done;) {\n      var item = _step2.value;\n      this.type.encode(stream, item, ctx);\n    }\n    if (this.length instanceof NumberT) {\n      var i = 0;\n      while (i < ctx.pointers.length) {\n        var ptr = ctx.pointers[i++];\n        ptr.type.encode(stream, ptr.val);\n      }\n    }\n  };\n  return ArrayT;\n}();\nmodule.exports = ArrayT;\n\n/***/ }),\n\n/***/ 3425:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2087);\nvar Bitfield = /*#__PURE__*/function () {\n  function Bitfield(type, flags) {\n    if (flags === void 0) {\n      flags = [];\n    }\n    this.type = type;\n    this.flags = flags;\n  }\n  var _proto = Bitfield.prototype;\n  _proto.decode = function decode(stream) {\n    var val = this.type.decode(stream);\n    var res = {};\n    for (var i = 0; i < this.flags.length; i++) {\n      var flag = this.flags[i];\n      if (flag != null) {\n        res[flag] = !!(val & 1 << i);\n      }\n    }\n    return res;\n  };\n  _proto.size = function size() {\n    return this.type.size();\n  };\n  _proto.encode = function encode(stream, keys) {\n    var val = 0;\n    for (var i = 0; i < this.flags.length; i++) {\n      var flag = this.flags[i];\n      if (flag != null) {\n        if (keys[flag]) {\n          val |= 1 << i;\n        }\n      }\n    }\n    return this.type.encode(stream, val);\n  };\n  return Bitfield;\n}();\nmodule.exports = Bitfield;\n\n/***/ }),\n\n/***/ 9024:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar BooleanT = /*#__PURE__*/function () {\n  function BooleanT(type) {\n    this.type = type;\n  }\n  var _proto = BooleanT.prototype;\n  _proto.decode = function decode(stream, parent) {\n    return !!this.type.decode(stream, parent);\n  };\n  _proto.size = function size(val, parent) {\n    return this.type.size(val, parent);\n  };\n  _proto.encode = function encode(stream, val, parent) {\n    return this.type.encode(stream, +val, parent);\n  };\n  return BooleanT;\n}();\nmodule.exports = BooleanT;\n\n/***/ }),\n\n/***/ 5250:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(6610);\nvar _require = __webpack_require__(6462),\n  NumberT = _require.Number;\nvar BufferT = /*#__PURE__*/function () {\n  function BufferT(length) {\n    this.length = length;\n  }\n  var _proto = BufferT.prototype;\n  _proto.decode = function decode(stream, parent) {\n    var length = utils.resolveLength(this.length, stream, parent);\n    return stream.readBuffer(length);\n  };\n  _proto.size = function size(val, parent) {\n    if (!val) {\n      return utils.resolveLength(this.length, null, parent);\n    }\n    return val.length;\n  };\n  _proto.encode = function encode(stream, buf, parent) {\n    if (this.length instanceof NumberT) {\n      this.length.encode(stream, buf.length);\n    }\n    return stream.writeBuffer(buf);\n  };\n  return BufferT;\n}();\nmodule.exports = BufferT;\n\n/***/ }),\n\n/***/ 3030:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\n__webpack_require__(1539);\n__webpack_require__(9714);\n__webpack_require__(7042);\n__webpack_require__(4916);\n__webpack_require__(5306);\nvar iconv;\ntry {\n  iconv = __webpack_require__(4914);\n} catch (error) {}\nvar DecodeStream = /*#__PURE__*/function () {\n  function DecodeStream(buffer) {\n    this.buffer = buffer;\n    this.pos = 0;\n    this.length = this.buffer.length;\n  }\n  var _proto = DecodeStream.prototype;\n  _proto.readString = function readString(length, encoding) {\n    if (encoding === void 0) {\n      encoding = 'ascii';\n    }\n    switch (encoding) {\n      case 'utf16le':\n      case 'ucs2':\n      case 'utf8':\n      case 'ascii':\n        return this.buffer.toString(encoding, this.pos, this.pos += length);\n      case 'utf16be':\n        var buf = Buffer.from(this.readBuffer(length));\n\n        // swap the bytes\n        for (var i = 0, end = buf.length - 1; i < end; i += 2) {\n          var byte = buf[i];\n          buf[i] = buf[i + 1];\n          buf[i + 1] = byte;\n        }\n        return buf.toString('utf16le');\n      default:\n        buf = this.readBuffer(length);\n        if (iconv) {\n          try {\n            return iconv.decode(buf, encoding);\n          } catch (error1) {}\n        }\n        return buf;\n    }\n  };\n  _proto.readBuffer = function readBuffer(length) {\n    return this.buffer.slice(this.pos, this.pos += length);\n  };\n  _proto.readUInt24BE = function readUInt24BE() {\n    return (this.readUInt16BE() << 8) + this.readUInt8();\n  };\n  _proto.readUInt24LE = function readUInt24LE() {\n    return this.readUInt16LE() + (this.readUInt8() << 16);\n  };\n  _proto.readInt24BE = function readInt24BE() {\n    return (this.readInt16BE() << 8) + this.readUInt8();\n  };\n  _proto.readInt24LE = function readInt24LE() {\n    return this.readUInt16LE() + (this.readInt8() << 16);\n  };\n  return DecodeStream;\n}();\nDecodeStream.TYPES = {\n  UInt8: 1,\n  UInt16: 2,\n  UInt24: 3,\n  UInt32: 4,\n  Int8: 1,\n  Int16: 2,\n  Int24: 3,\n  Int32: 4,\n  Float: 4,\n  Double: 8\n};\nvar _loop = function _loop(key) {\n  if (key.slice(0, 4) === 'read') {\n    var bytes = DecodeStream.TYPES[key.replace(/read|[BL]E/g, '')];\n    DecodeStream.prototype[key] = function () {\n      var ret = this.buffer[key](this.pos);\n      this.pos += bytes;\n      return ret;\n    };\n  }\n};\nfor (var key in Buffer.prototype) {\n  _loop(key);\n}\nmodule.exports = DecodeStream;\n\n/***/ }),\n\n/***/ 9126:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\n__webpack_require__(7042);\n__webpack_require__(3290);\n__webpack_require__(4916);\n__webpack_require__(5306);\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nvar iconv;\nvar stream = __webpack_require__(2830);\nvar DecodeStream = __webpack_require__(3030);\ntry {\n  iconv = __webpack_require__(4914);\n} catch (error) {}\nvar EncodeStream = /*#__PURE__*/function (_stream$Readable) {\n  _inheritsLoose(EncodeStream, _stream$Readable);\n  function EncodeStream(bufferSize) {\n    var _this;\n    if (bufferSize === void 0) {\n      bufferSize = 65536;\n    }\n    _this = _stream$Readable.apply(this, arguments) || this;\n    _this.buffer = Buffer.alloc(bufferSize);\n    _this.bufferOffset = 0;\n    _this.pos = 0;\n    return _this;\n  }\n\n  // do nothing, required by node\n  var _proto = EncodeStream.prototype;\n  _proto._read = function _read() {};\n  _proto.ensure = function ensure(bytes) {\n    if (this.bufferOffset + bytes > this.buffer.length) {\n      return this.flush();\n    }\n  };\n  _proto.flush = function flush() {\n    if (this.bufferOffset > 0) {\n      this.push(Buffer.from(this.buffer.slice(0, this.bufferOffset)));\n      return this.bufferOffset = 0;\n    }\n  };\n  _proto.writeBuffer = function writeBuffer(buffer) {\n    this.flush();\n    this.push(buffer);\n    return this.pos += buffer.length;\n  };\n  _proto.writeString = function writeString(string, encoding) {\n    if (encoding === void 0) {\n      encoding = 'ascii';\n    }\n    switch (encoding) {\n      case 'utf16le':\n      case 'ucs2':\n      case 'utf8':\n      case 'ascii':\n        return this.writeBuffer(Buffer.from(string, encoding));\n      case 'utf16be':\n        var buf = Buffer.from(string, 'utf16le');\n\n        // swap the bytes\n        for (var i = 0, end = buf.length - 1; i < end; i += 2) {\n          var byte = buf[i];\n          buf[i] = buf[i + 1];\n          buf[i + 1] = byte;\n        }\n        return this.writeBuffer(buf);\n      default:\n        if (iconv) {\n          return this.writeBuffer(iconv.encode(string, encoding));\n        } else {\n          throw new Error('Install iconv-lite to enable additional string encodings.');\n        }\n    }\n  };\n  _proto.writeUInt24BE = function writeUInt24BE(val) {\n    this.ensure(3);\n    this.buffer[this.bufferOffset++] = val >>> 16 & 0xff;\n    this.buffer[this.bufferOffset++] = val >>> 8 & 0xff;\n    this.buffer[this.bufferOffset++] = val & 0xff;\n    return this.pos += 3;\n  };\n  _proto.writeUInt24LE = function writeUInt24LE(val) {\n    this.ensure(3);\n    this.buffer[this.bufferOffset++] = val & 0xff;\n    this.buffer[this.bufferOffset++] = val >>> 8 & 0xff;\n    this.buffer[this.bufferOffset++] = val >>> 16 & 0xff;\n    return this.pos += 3;\n  };\n  _proto.writeInt24BE = function writeInt24BE(val) {\n    if (val >= 0) {\n      return this.writeUInt24BE(val);\n    } else {\n      return this.writeUInt24BE(val + 0xffffff + 1);\n    }\n  };\n  _proto.writeInt24LE = function writeInt24LE(val) {\n    if (val >= 0) {\n      return this.writeUInt24LE(val);\n    } else {\n      return this.writeUInt24LE(val + 0xffffff + 1);\n    }\n  };\n  _proto.fill = function fill(val, length) {\n    if (length < this.buffer.length) {\n      this.ensure(length);\n      this.buffer.fill(val, this.bufferOffset, this.bufferOffset + length);\n      this.bufferOffset += length;\n      return this.pos += length;\n    } else {\n      var buf = Buffer.alloc(length);\n      buf.fill(val);\n      return this.writeBuffer(buf);\n    }\n  };\n  _proto.end = function end() {\n    this.flush();\n    return this.push(null);\n  };\n  return EncodeStream;\n}(stream.Readable);\nvar _loop = function _loop(key) {\n  if (key.slice(0, 5) === 'write') {\n    var bytes = +DecodeStream.TYPES[key.replace(/write|[BL]E/g, '')];\n    EncodeStream.prototype[key] = function (value) {\n      this.ensure(bytes);\n      this.buffer[key](value, this.bufferOffset);\n      this.bufferOffset += bytes;\n      return this.pos += bytes;\n    };\n  }\n};\nfor (var key in Buffer.prototype) {\n  _loop(key);\n}\nmodule.exports = EncodeStream;\n\n/***/ }),\n\n/***/ 3100:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar Enum = /*#__PURE__*/function () {\n  function Enum(type, options) {\n    if (options === void 0) {\n      options = [];\n    }\n    this.type = type;\n    this.options = options;\n  }\n  var _proto = Enum.prototype;\n  _proto.decode = function decode(stream) {\n    var index = this.type.decode(stream);\n    return this.options[index] || index;\n  };\n  _proto.size = function size() {\n    return this.type.size();\n  };\n  _proto.encode = function encode(stream, val) {\n    var index = this.options.indexOf(val);\n    if (index === -1) {\n      throw new Error(\"Unknown option in enum: \" + val);\n    }\n    return this.type.encode(stream, index);\n  };\n  return Enum;\n}();\nmodule.exports = Enum;\n\n/***/ }),\n\n/***/ 6768:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(1539);\n__webpack_require__(8674);\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nvar ArrayT = __webpack_require__(1988);\nvar _require = __webpack_require__(6462),\n  NumberT = _require.Number;\nvar utils = __webpack_require__(6610);\nvar _require2 = __webpack_require__(9539),\n  _inspect = _require2.inspect;\nvar LazyArrayT = /*#__PURE__*/function (_ArrayT) {\n  _inheritsLoose(LazyArrayT, _ArrayT);\n  function LazyArrayT() {\n    return _ArrayT.apply(this, arguments) || this;\n  }\n  var _proto = LazyArrayT.prototype;\n  _proto.decode = function decode(stream, parent) {\n    var pos = stream.pos;\n    var length = utils.resolveLength(this.length, stream, parent);\n    if (this.length instanceof NumberT) {\n      parent = {\n        parent: parent,\n        _startOffset: pos,\n        _currentOffset: 0,\n        _length: length\n      };\n    }\n    var res = new LazyArray(this.type, length, stream, parent);\n    stream.pos += length * this.type.size(null, parent);\n    return res;\n  };\n  _proto.size = function size(val, ctx) {\n    if (val instanceof LazyArray) {\n      val = val.toArray();\n    }\n    return _ArrayT.prototype.size.call(this, val, ctx);\n  };\n  _proto.encode = function encode(stream, val, ctx) {\n    if (val instanceof LazyArray) {\n      val = val.toArray();\n    }\n    return _ArrayT.prototype.encode.call(this, stream, val, ctx);\n  };\n  return LazyArrayT;\n}(ArrayT);\nvar LazyArray = /*#__PURE__*/function () {\n  function LazyArray(type, length, stream, ctx) {\n    this.type = type;\n    this.length = length;\n    this.stream = stream;\n    this.ctx = ctx;\n    this.base = this.stream.pos;\n    this.items = [];\n  }\n  var _proto2 = LazyArray.prototype;\n  _proto2.get = function get(index) {\n    if (index < 0 || index >= this.length) {\n      return undefined;\n    }\n    if (this.items[index] == null) {\n      var pos = this.stream.pos;\n      this.stream.pos = this.base + this.type.size(null, this.ctx) * index;\n      this.items[index] = this.type.decode(this.stream, this.ctx);\n      this.stream.pos = pos;\n    }\n    return this.items[index];\n  };\n  _proto2.toArray = function toArray() {\n    var result = [];\n    for (var i = 0, end = this.length; i < end; i++) {\n      result.push(this.get(i));\n    }\n    return result;\n  };\n  _proto2.inspect = function inspect() {\n    return _inspect(this.toArray());\n  };\n  return LazyArray;\n}();\nmodule.exports = LazyArrayT;\n\n/***/ }),\n\n/***/ 6462:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nvar DecodeStream = __webpack_require__(3030);\nvar NumberT = /*#__PURE__*/function () {\n  function NumberT(type, endian) {\n    if (endian === void 0) {\n      endian = 'BE';\n    }\n    this.type = type;\n    this.endian = endian;\n    this.fn = this.type;\n    if (this.type[this.type.length - 1] !== '8') {\n      this.fn += this.endian;\n    }\n  }\n  var _proto = NumberT.prototype;\n  _proto.size = function size() {\n    return DecodeStream.TYPES[this.type];\n  };\n  _proto.decode = function decode(stream) {\n    return stream[\"read\" + this.fn]();\n  };\n  _proto.encode = function encode(stream, val) {\n    return stream[\"write\" + this.fn](val);\n  };\n  return NumberT;\n}();\nexports.Number = NumberT;\nexports.uint8 = new NumberT('UInt8');\nexports.uint16be = exports.uint16 = new NumberT('UInt16', 'BE');\nexports.uint16le = new NumberT('UInt16', 'LE');\nexports.uint24be = exports.uint24 = new NumberT('UInt24', 'BE');\nexports.uint24le = new NumberT('UInt24', 'LE');\nexports.uint32be = exports.uint32 = new NumberT('UInt32', 'BE');\nexports.uint32le = new NumberT('UInt32', 'LE');\nexports.int8 = new NumberT('Int8');\nexports.int16be = exports.int16 = new NumberT('Int16', 'BE');\nexports.int16le = new NumberT('Int16', 'LE');\nexports.int24be = exports.int24 = new NumberT('Int24', 'BE');\nexports.int24le = new NumberT('Int24', 'LE');\nexports.int32be = exports.int32 = new NumberT('Int32', 'BE');\nexports.int32le = new NumberT('Int32', 'LE');\nexports.floatbe = exports.float = new NumberT('Float', 'BE');\nexports.floatle = new NumberT('Float', 'LE');\nexports.doublebe = exports.double = new NumberT('Double', 'BE');\nexports.doublele = new NumberT('Double', 'LE');\nvar Fixed = /*#__PURE__*/function (_NumberT) {\n  _inheritsLoose(Fixed, _NumberT);\n  function Fixed(size, endian, fracBits) {\n    var _this;\n    if (fracBits === void 0) {\n      fracBits = size >> 1;\n    }\n    _this = _NumberT.call(this, \"Int\" + size, endian) || this;\n    _this._point = 1 << fracBits;\n    return _this;\n  }\n  var _proto2 = Fixed.prototype;\n  _proto2.decode = function decode(stream) {\n    return _NumberT.prototype.decode.call(this, stream) / this._point;\n  };\n  _proto2.encode = function encode(stream, val) {\n    return _NumberT.prototype.encode.call(this, stream, val * this._point | 0);\n  };\n  return Fixed;\n}(NumberT);\nexports.Fixed = Fixed;\nexports.fixed16be = exports.fixed16 = new Fixed(16, 'BE');\nexports.fixed16le = new Fixed(16, 'LE');\nexports.fixed32be = exports.fixed32 = new Fixed(32, 'BE');\nexports.fixed32le = new Fixed(32, 'LE');\n\n/***/ }),\n\n/***/ 9541:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar Optional = /*#__PURE__*/function () {\n  function Optional(type, condition) {\n    if (condition === void 0) {\n      condition = true;\n    }\n    this.type = type;\n    this.condition = condition;\n  }\n  var _proto = Optional.prototype;\n  _proto.decode = function decode(stream, parent) {\n    var condition = this.condition;\n    if (typeof condition === 'function') {\n      condition = condition.call(parent, parent);\n    }\n    if (condition) {\n      return this.type.decode(stream, parent);\n    }\n  };\n  _proto.size = function size(val, parent) {\n    var condition = this.condition;\n    if (typeof condition === 'function') {\n      condition = condition.call(parent, parent);\n    }\n    if (condition) {\n      return this.type.size(val, parent);\n    } else {\n      return 0;\n    }\n  };\n  _proto.encode = function encode(stream, val, parent) {\n    var condition = this.condition;\n    if (typeof condition === 'function') {\n      condition = condition.call(parent, parent);\n    }\n    if (condition) {\n      return this.type.encode(stream, val, parent);\n    }\n  };\n  return Optional;\n}();\nmodule.exports = Optional;\n\n/***/ }),\n\n/***/ 8011:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(6610);\nvar Pointer = /*#__PURE__*/function () {\n  function Pointer(offsetType, type, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    this.offsetType = offsetType;\n    this.type = type;\n    this.options = options;\n    if (this.type === 'void') {\n      this.type = null;\n    }\n    if (this.options.type == null) {\n      this.options.type = 'local';\n    }\n    if (this.options.allowNull == null) {\n      this.options.allowNull = true;\n    }\n    if (this.options.nullValue == null) {\n      this.options.nullValue = 0;\n    }\n    if (this.options.lazy == null) {\n      this.options.lazy = false;\n    }\n    if (this.options.relativeTo) {\n      if (typeof this.options.relativeTo !== 'function') {\n        throw new Error('relativeTo option must be a function');\n      }\n      this.relativeToGetter = options.relativeTo;\n    }\n  }\n  var _proto = Pointer.prototype;\n  _proto.decode = function decode(stream, ctx) {\n    var _this = this;\n    var offset = this.offsetType.decode(stream, ctx);\n\n    // handle NULL pointers\n    if (offset === this.options.nullValue && this.options.allowNull) {\n      return null;\n    }\n    var relative;\n    switch (this.options.type) {\n      case 'local':\n        relative = ctx._startOffset;\n        break;\n      case 'immediate':\n        relative = stream.pos - this.offsetType.size();\n        break;\n      case 'parent':\n        relative = ctx.parent._startOffset;\n        break;\n      default:\n        var c = ctx;\n        while (c.parent) {\n          c = c.parent;\n        }\n        relative = c._startOffset || 0;\n    }\n    if (this.options.relativeTo) {\n      relative += this.relativeToGetter(ctx);\n    }\n    var ptr = offset + relative;\n    if (this.type != null) {\n      var val = null;\n      var decodeValue = function decodeValue() {\n        if (val != null) {\n          return val;\n        }\n        var pos = stream.pos;\n        stream.pos = ptr;\n        val = _this.type.decode(stream, ctx);\n        stream.pos = pos;\n        return val;\n      };\n\n      // If this is a lazy pointer, define a getter to decode only when needed.\n      // This obviously only works when the pointer is contained by a Struct.\n      if (this.options.lazy) {\n        return new utils.PropertyDescriptor({\n          get: decodeValue\n        });\n      }\n      return decodeValue();\n    } else {\n      return ptr;\n    }\n  };\n  _proto.size = function size(val, ctx) {\n    var parent = ctx;\n    switch (this.options.type) {\n      case 'local':\n      case 'immediate':\n        break;\n      case 'parent':\n        ctx = ctx.parent;\n        break;\n      default:\n        // global\n        while (ctx.parent) {\n          ctx = ctx.parent;\n        }\n    }\n    var type = this.type;\n    if (type == null) {\n      if (!(val instanceof VoidPointer)) {\n        throw new Error(\"Must be a VoidPointer\");\n      }\n      var _val = val;\n      type = _val.type;\n      val = val.value;\n    }\n    if (val && ctx) {\n      ctx.pointerSize += type.size(val, parent);\n    }\n    return this.offsetType.size();\n  };\n  _proto.encode = function encode(stream, val, ctx) {\n    var relative;\n    var parent = ctx;\n    if (val == null) {\n      this.offsetType.encode(stream, this.options.nullValue);\n      return;\n    }\n    switch (this.options.type) {\n      case 'local':\n        relative = ctx.startOffset;\n        break;\n      case 'immediate':\n        relative = stream.pos + this.offsetType.size(val, parent);\n        break;\n      case 'parent':\n        ctx = ctx.parent;\n        relative = ctx.startOffset;\n        break;\n      default:\n        // global\n        relative = 0;\n        while (ctx.parent) {\n          ctx = ctx.parent;\n        }\n    }\n    if (this.options.relativeTo) {\n      relative += this.relativeToGetter(parent.val);\n    }\n    this.offsetType.encode(stream, ctx.pointerOffset - relative);\n    var type = this.type;\n    if (type == null) {\n      if (!(val instanceof VoidPointer)) {\n        throw new Error(\"Must be a VoidPointer\");\n      }\n      var _val2 = val;\n      type = _val2.type;\n      val = val.value;\n    }\n    ctx.pointers.push({\n      type: type,\n      val: val,\n      parent: parent\n    });\n    return ctx.pointerOffset += type.size(val, parent);\n  };\n  return Pointer;\n}(); // A pointer whose type is determined at decode time\nvar VoidPointer = function VoidPointer(type, value) {\n  this.type = type;\n  this.value = value;\n};\nexports.Pointer = Pointer;\nexports.VoidPointer = VoidPointer;\n\n/***/ }),\n\n/***/ 7468:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(3290);\nvar utils = __webpack_require__(6610);\nvar Reserved = /*#__PURE__*/function () {\n  function Reserved(type, count) {\n    if (count === void 0) {\n      count = 1;\n    }\n    this.type = type;\n    this.count = count;\n  }\n  var _proto = Reserved.prototype;\n  _proto.decode = function decode(stream, parent) {\n    stream.pos += this.size(null, parent);\n    return undefined;\n  };\n  _proto.size = function size(data, parent) {\n    var count = utils.resolveLength(this.count, null, parent);\n    return this.type.size() * count;\n  };\n  _proto.encode = function encode(stream, val, parent) {\n    return stream.fill(0, this.size(val, parent));\n  };\n  return Reserved;\n}();\nmodule.exports = Reserved;\n\n/***/ }),\n\n/***/ 1466:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\nvar _require = __webpack_require__(6462),\n  NumberT = _require.Number;\nvar utils = __webpack_require__(6610);\nvar StringT = /*#__PURE__*/function () {\n  function StringT(length, encoding) {\n    if (encoding === void 0) {\n      encoding = 'ascii';\n    }\n    this.length = length;\n    this.encoding = encoding;\n  }\n  var _proto = StringT.prototype;\n  _proto.decode = function decode(stream, parent) {\n    var length, pos;\n    if (this.length != null) {\n      length = utils.resolveLength(this.length, stream, parent);\n    } else {\n      var buffer;\n      buffer = stream.buffer;\n      length = stream.length;\n      pos = stream.pos;\n      while (pos < length && buffer[pos] !== 0x00) {\n        ++pos;\n      }\n      length = pos - stream.pos;\n    }\n    var encoding = this.encoding;\n    if (typeof encoding === 'function') {\n      encoding = encoding.call(parent, parent) || 'ascii';\n    }\n    var string = stream.readString(length, encoding);\n    if (this.length == null && stream.pos < stream.length) {\n      stream.pos++;\n    }\n    return string;\n  };\n  _proto.size = function size(val, parent) {\n    // Use the defined value if no value was given\n    if (!val) {\n      return utils.resolveLength(this.length, null, parent);\n    }\n    var encoding = this.encoding;\n    if (typeof encoding === 'function') {\n      encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';\n    }\n    if (encoding === 'utf16be') {\n      encoding = 'utf16le';\n    }\n    var size = Buffer.byteLength(val, encoding);\n    if (this.length instanceof NumberT) {\n      size += this.length.size();\n    }\n    if (this.length == null) {\n      size++;\n    }\n    return size;\n  };\n  _proto.encode = function encode(stream, val, parent) {\n    var encoding = this.encoding;\n    if (typeof encoding === 'function') {\n      encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';\n    }\n    if (this.length instanceof NumberT) {\n      this.length.encode(stream, Buffer.byteLength(val, encoding));\n    }\n    stream.writeString(val, encoding);\n    if (this.length == null) {\n      return stream.writeUInt8(0x00);\n    }\n  };\n  return StringT;\n}();\nmodule.exports = StringT;\n\n/***/ }),\n\n/***/ 1219:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(6610);\nvar Struct = /*#__PURE__*/function () {\n  function Struct(fields) {\n    if (fields === void 0) {\n      fields = {};\n    }\n    this.fields = fields;\n  }\n  var _proto = Struct.prototype;\n  _proto.decode = function decode(stream, parent, length) {\n    if (length === void 0) {\n      length = 0;\n    }\n    var res = this._setup(stream, parent, length);\n    this._parseFields(stream, res, this.fields);\n    if (this.process != null) {\n      this.process.call(res, stream);\n    }\n    return res;\n  };\n  _proto._setup = function _setup(stream, parent, length) {\n    var res = {};\n\n    // define hidden properties\n    Object.defineProperties(res, {\n      parent: {\n        value: parent\n      },\n      _startOffset: {\n        value: stream.pos\n      },\n      _currentOffset: {\n        value: 0,\n        writable: true\n      },\n      _length: {\n        value: length\n      }\n    });\n    return res;\n  };\n  _proto._parseFields = function _parseFields(stream, res, fields) {\n    for (var key in fields) {\n      var val;\n      var type = fields[key];\n      if (typeof type === 'function') {\n        val = type.call(res, res);\n      } else {\n        val = type.decode(stream, res);\n      }\n      if (val !== undefined) {\n        if (val instanceof utils.PropertyDescriptor) {\n          Object.defineProperty(res, key, val);\n        } else {\n          res[key] = val;\n        }\n      }\n      res._currentOffset = stream.pos - res._startOffset;\n    }\n  };\n  _proto.size = function size(val, parent, includePointers) {\n    if (val == null) {\n      val = {};\n    }\n    if (includePointers == null) {\n      includePointers = true;\n    }\n    var ctx = {\n      parent: parent,\n      val: val,\n      pointerSize: 0\n    };\n    var size = 0;\n    for (var key in this.fields) {\n      var type = this.fields[key];\n      if (type.size != null) {\n        size += type.size(val[key], ctx);\n      }\n    }\n    if (includePointers) {\n      size += ctx.pointerSize;\n    }\n    return size;\n  };\n  _proto.encode = function encode(stream, val, parent) {\n    var type;\n    if (this.preEncode != null) {\n      this.preEncode.call(val, stream);\n    }\n    var ctx = {\n      pointers: [],\n      startOffset: stream.pos,\n      parent: parent,\n      val: val,\n      pointerSize: 0\n    };\n    ctx.pointerOffset = stream.pos + this.size(val, ctx, false);\n    for (var key in this.fields) {\n      type = this.fields[key];\n      if (type.encode != null) {\n        type.encode(stream, val[key], ctx);\n      }\n    }\n    var i = 0;\n    while (i < ctx.pointers.length) {\n      var ptr = ctx.pointers[i++];\n      ptr.type.encode(stream, ptr.val, ptr.parent);\n    }\n  };\n  return Struct;\n}();\nmodule.exports = Struct;\n\n/***/ }),\n\n/***/ 3585:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(1539);\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nvar Struct = __webpack_require__(1219);\nvar getPath = function getPath(object, pathArray) {\n  return pathArray.reduce(function (prevObj, key) {\n    return prevObj && prevObj[key];\n  }, object);\n};\nvar VersionedStruct = /*#__PURE__*/function (_Struct) {\n  _inheritsLoose(VersionedStruct, _Struct);\n  function VersionedStruct(type, versions) {\n    var _this;\n    if (versions === void 0) {\n      versions = {};\n    }\n    _this = _Struct.call(this) || this;\n    _this.type = type;\n    _this.versions = versions;\n    if (typeof type === 'string') {\n      _this.versionPath = type.split('.');\n    }\n    return _this;\n  }\n  var _proto = VersionedStruct.prototype;\n  _proto.decode = function decode(stream, parent, length) {\n    if (length === void 0) {\n      length = 0;\n    }\n    var res = this._setup(stream, parent, length);\n    if (typeof this.type === 'string') {\n      res.version = getPath(parent, this.versionPath);\n    } else {\n      res.version = this.type.decode(stream);\n    }\n    if (this.versions.header) {\n      this._parseFields(stream, res, this.versions.header);\n    }\n    var fields = this.versions[res.version];\n    if (fields == null) {\n      throw new Error(\"Unknown version \" + res.version);\n    }\n    if (fields instanceof VersionedStruct) {\n      return fields.decode(stream, parent);\n    }\n    this._parseFields(stream, res, fields);\n    if (this.process != null) {\n      this.process.call(res, stream);\n    }\n    return res;\n  };\n  _proto.size = function size(val, parent, includePointers) {\n    if (includePointers === void 0) {\n      includePointers = true;\n    }\n    var key, type;\n    if (!val) {\n      throw new Error('Not a fixed size');\n    }\n    var ctx = {\n      parent: parent,\n      val: val,\n      pointerSize: 0\n    };\n    var size = 0;\n    if (typeof this.type !== 'string') {\n      size += this.type.size(val.version, ctx);\n    }\n    if (this.versions.header) {\n      for (key in this.versions.header) {\n        type = this.versions.header[key];\n        if (type.size != null) {\n          size += type.size(val[key], ctx);\n        }\n      }\n    }\n    var fields = this.versions[val.version];\n    if (fields == null) {\n      throw new Error(\"Unknown version \" + val.version);\n    }\n    for (key in fields) {\n      type = fields[key];\n      if (type.size != null) {\n        size += type.size(val[key], ctx);\n      }\n    }\n    if (includePointers) {\n      size += ctx.pointerSize;\n    }\n    return size;\n  };\n  _proto.encode = function encode(stream, val, parent) {\n    var key, type;\n    if (this.preEncode != null) {\n      this.preEncode.call(val, stream);\n    }\n    var ctx = {\n      pointers: [],\n      startOffset: stream.pos,\n      parent: parent,\n      val: val,\n      pointerSize: 0\n    };\n    ctx.pointerOffset = stream.pos + this.size(val, ctx, false);\n    if (typeof this.type !== 'string') {\n      this.type.encode(stream, val.version);\n    }\n    if (this.versions.header) {\n      for (key in this.versions.header) {\n        type = this.versions.header[key];\n        if (type.encode != null) {\n          type.encode(stream, val[key], ctx);\n        }\n      }\n    }\n    var fields = this.versions[val.version];\n    for (key in fields) {\n      type = fields[key];\n      if (type.encode != null) {\n        type.encode(stream, val[key], ctx);\n      }\n    }\n    var i = 0;\n    while (i < ctx.pointers.length) {\n      var ptr = ctx.pointers[i++];\n      ptr.type.encode(stream, ptr.val, ptr.parent);\n    }\n  };\n  return VersionedStruct;\n}(Struct);\nmodule.exports = VersionedStruct;\n\n/***/ }),\n\n/***/ 6610:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _require = __webpack_require__(6462),\n  NumberT = _require.Number;\nexports.resolveLength = function (length, stream, parent) {\n  var res;\n  if (typeof length === 'number') {\n    res = length;\n  } else if (typeof length === 'function') {\n    res = length.call(parent, parent);\n  } else if (parent && typeof length === 'string') {\n    res = parent[length];\n  } else if (stream && length instanceof NumberT) {\n    res = length.decode(stream);\n  }\n  if (isNaN(res)) {\n    throw new Error('Not a fixed size');\n  }\n  return res;\n};\nvar PropertyDescriptor = function PropertyDescriptor(opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n  this.enumerable = true;\n  this.configurable = true;\n  for (var key in opts) {\n    var val = opts[key];\n    this[key] = val;\n  }\n};\nexports.PropertyDescriptor = PropertyDescriptor;\n\n/***/ }),\n\n/***/ 8823:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n\n\n__webpack_require__(2526);\n__webpack_require__(1817);\n__webpack_require__(1539);\n__webpack_require__(6992);\n__webpack_require__(2472);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(7803);\n__webpack_require__(6649);\n__webpack_require__(6078);\n__webpack_require__(3290);\n__webpack_require__(7042);\n__webpack_require__(2222);\n__webpack_require__(9714);\n__webpack_require__(3210);\n__webpack_require__(4916);\n__webpack_require__(5306);\n__webpack_require__(6699);\n__webpack_require__(2023);\n__webpack_require__(9653);\n__webpack_require__(3753);\n__webpack_require__(545);\n__webpack_require__(8309);\n__webpack_require__(3161);\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nvar base64 = __webpack_require__(9742);\nvar ieee754 = __webpack_require__(645);\nvar customInspectSymbol = typeof Symbol === 'function' && typeof Symbol['for'] === 'function' // eslint-disable-line dot-notation\n? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n: null;\nexports.Buffer = Buffer;\nexports.SlowBuffer = SlowBuffer;\nexports.INSPECT_MAX_BYTES = 50;\nvar K_MAX_LENGTH = 0x7fffffff;\nexports.kMaxLength = K_MAX_LENGTH;\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport();\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && typeof console.error === 'function') {\n  console.error('This browser lacks typed array (Uint8Array) support which is required by ' + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.');\n}\nfunction typedArraySupport() {\n  // Can typed array instances can be augmented?\n  try {\n    var arr = new Uint8Array(1);\n    var proto = {\n      foo: function foo() {\n        return 42;\n      }\n    };\n    Object.setPrototypeOf(proto, Uint8Array.prototype);\n    Object.setPrototypeOf(arr, proto);\n    return arr.foo() === 42;\n  } catch (e) {\n    return false;\n  }\n}\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function get() {\n    if (!Buffer.isBuffer(this)) return undefined;\n    return this.buffer;\n  }\n});\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function get() {\n    if (!Buffer.isBuffer(this)) return undefined;\n    return this.byteOffset;\n  }\n});\nfunction createBuffer(length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"');\n  }\n  // Return an augmented `Uint8Array` instance\n  var buf = new Uint8Array(length);\n  Object.setPrototypeOf(buf, Buffer.prototype);\n  return buf;\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer(arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError('The \"string\" argument must be of type string. Received type number');\n    }\n    return allocUnsafe(arg);\n  }\n  return from(arg, encodingOrOffset, length);\n}\nBuffer.poolSize = 8192; // not used by this implementation\n\nfunction from(value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset);\n  }\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value);\n  }\n  if (value == null) {\n    throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + typeof value);\n  }\n  if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) {\n    return fromArrayBuffer(value, encodingOrOffset, length);\n  }\n  if (typeof SharedArrayBuffer !== 'undefined' && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length);\n  }\n  if (typeof value === 'number') {\n    throw new TypeError('The \"value\" argument must not be of type number. Received type number');\n  }\n  var valueOf = value.valueOf && value.valueOf();\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length);\n  }\n  var b = fromObject(value);\n  if (b) return b;\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length);\n  }\n  throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + typeof value);\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length);\n};\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype);\nObject.setPrototypeOf(Buffer, Uint8Array);\nfunction assertSize(size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number');\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"');\n  }\n}\nfunction alloc(size, fill, encoding) {\n  assertSize(size);\n  if (size <= 0) {\n    return createBuffer(size);\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string' ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);\n  }\n  return createBuffer(size);\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding);\n};\nfunction allocUnsafe(size) {\n  assertSize(size);\n  return createBuffer(size < 0 ? 0 : checked(size) | 0);\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size);\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size);\n};\nfunction fromString(string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8';\n  }\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding);\n  }\n  var length = byteLength(string, encoding) | 0;\n  var buf = createBuffer(length);\n  var actual = buf.write(string, encoding);\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual);\n  }\n  return buf;\n}\nfunction fromArrayLike(array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0;\n  var buf = createBuffer(length);\n  for (var i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255;\n  }\n  return buf;\n}\nfunction fromArrayView(arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    var copy = new Uint8Array(arrayView);\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength);\n  }\n  return fromArrayLike(arrayView);\n}\nfunction fromArrayBuffer(array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds');\n  }\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds');\n  }\n  var buf;\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array);\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset);\n  } else {\n    buf = new Uint8Array(array, byteOffset, length);\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype);\n  return buf;\n}\nfunction fromObject(obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0;\n    var buf = createBuffer(len);\n    if (buf.length === 0) {\n      return buf;\n    }\n    obj.copy(buf, 0, 0, len);\n    return buf;\n  }\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0);\n    }\n    return fromArrayLike(obj);\n  }\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data);\n  }\n}\nfunction checked(length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes');\n  }\n  return length | 0;\n}\nfunction SlowBuffer(length) {\n  if (+length != length) {\n    // eslint-disable-line eqeqeq\n    length = 0;\n  }\n  return Buffer.alloc(+length);\n}\nBuffer.isBuffer = function isBuffer(b) {\n  return b != null && b._isBuffer === true && b !== Buffer.prototype; // so Buffer.isBuffer(Buffer.prototype) will be false\n};\n\nBuffer.compare = function compare(a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength);\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength);\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');\n  }\n  if (a === b) return 0;\n  var x = a.length;\n  var y = b.length;\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i];\n      y = b[i];\n      break;\n    }\n  }\n  if (x < y) return -1;\n  if (y < x) return 1;\n  return 0;\n};\nBuffer.isEncoding = function isEncoding(encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true;\n    default:\n      return false;\n  }\n};\nBuffer.concat = function concat(list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers');\n  }\n  if (list.length === 0) {\n    return Buffer.alloc(0);\n  }\n  var i;\n  if (length === undefined) {\n    length = 0;\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length;\n    }\n  }\n  var buffer = Buffer.allocUnsafe(length);\n  var pos = 0;\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i];\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);\n        buf.copy(buffer, pos);\n      } else {\n        Uint8Array.prototype.set.call(buffer, buf, pos);\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers');\n    } else {\n      buf.copy(buffer, pos);\n    }\n    pos += buf.length;\n  }\n  return buffer;\n};\nfunction byteLength(string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length;\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength;\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' + 'Received type ' + typeof string);\n  }\n  var len = string.length;\n  var mustMatch = arguments.length > 2 && arguments[2] === true;\n  if (!mustMatch && len === 0) return 0;\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false;\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len;\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length;\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2;\n      case 'hex':\n        return len >>> 1;\n      case 'base64':\n        return base64ToBytes(string).length;\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length; // assume utf8\n        }\n\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n}\nBuffer.byteLength = byteLength;\nfunction slowToString(encoding, start, end) {\n  var loweredCase = false;\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0;\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return '';\n  }\n  if (end === undefined || end > this.length) {\n    end = this.length;\n  }\n  if (end <= 0) {\n    return '';\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0;\n  start >>>= 0;\n  if (end <= start) {\n    return '';\n  }\n  if (!encoding) encoding = 'utf8';\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end);\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end);\n      case 'ascii':\n        return asciiSlice(this, start, end);\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end);\n      case 'base64':\n        return base64Slice(this, start, end);\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end);\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n        encoding = (encoding + '').toLowerCase();\n        loweredCase = true;\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true;\nfunction swap(b, n, m) {\n  var i = b[n];\n  b[n] = b[m];\n  b[m] = i;\n}\nBuffer.prototype.swap16 = function swap16() {\n  var len = this.length;\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits');\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1);\n  }\n  return this;\n};\nBuffer.prototype.swap32 = function swap32() {\n  var len = this.length;\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits');\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3);\n    swap(this, i + 1, i + 2);\n  }\n  return this;\n};\nBuffer.prototype.swap64 = function swap64() {\n  var len = this.length;\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits');\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7);\n    swap(this, i + 1, i + 6);\n    swap(this, i + 2, i + 5);\n    swap(this, i + 3, i + 4);\n  }\n  return this;\n};\nBuffer.prototype.toString = function toString() {\n  var length = this.length;\n  if (length === 0) return '';\n  if (arguments.length === 0) return utf8Slice(this, 0, length);\n  return slowToString.apply(this, arguments);\n};\nBuffer.prototype.toLocaleString = Buffer.prototype.toString;\nBuffer.prototype.equals = function equals(b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');\n  if (this === b) return true;\n  return Buffer.compare(this, b) === 0;\n};\nBuffer.prototype.inspect = function inspect() {\n  var str = '';\n  var max = exports.INSPECT_MAX_BYTES;\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim();\n  if (this.length > max) str += ' ... ';\n  return '<Buffer ' + str + '>';\n};\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect;\n}\nBuffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength);\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. ' + 'Received type ' + typeof target);\n  }\n  if (start === undefined) {\n    start = 0;\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0;\n  }\n  if (thisStart === undefined) {\n    thisStart = 0;\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length;\n  }\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index');\n  }\n  if (thisStart >= thisEnd && start >= end) {\n    return 0;\n  }\n  if (thisStart >= thisEnd) {\n    return -1;\n  }\n  if (start >= end) {\n    return 1;\n  }\n  start >>>= 0;\n  end >>>= 0;\n  thisStart >>>= 0;\n  thisEnd >>>= 0;\n  if (this === target) return 0;\n  var x = thisEnd - thisStart;\n  var y = end - start;\n  var len = Math.min(x, y);\n  var thisCopy = this.slice(thisStart, thisEnd);\n  var targetCopy = target.slice(start, end);\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i];\n      y = targetCopy[i];\n      break;\n    }\n  }\n  if (x < y) return -1;\n  if (y < x) return 1;\n  return 0;\n};\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1;\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset;\n    byteOffset = 0;\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff;\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000;\n  }\n  byteOffset = +byteOffset; // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : buffer.length - 1;\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1;else byteOffset = buffer.length - 1;\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0;else return -1;\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding);\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1;\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n  } else if (typeof val === 'number') {\n    val = val & 0xFF; // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n  }\n  throw new TypeError('val must be string, number or Buffer');\n}\nfunction arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1;\n  var arrLength = arr.length;\n  var valLength = val.length;\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase();\n    if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1;\n      }\n      indexSize = 2;\n      arrLength /= 2;\n      valLength /= 2;\n      byteOffset /= 2;\n    }\n  }\n  function read(buf, i) {\n    if (indexSize === 1) {\n      return buf[i];\n    } else {\n      return buf.readUInt16BE(i * indexSize);\n    }\n  }\n  var i;\n  if (dir) {\n    var foundIndex = -1;\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i;\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex;\n        foundIndex = -1;\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true;\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false;\n          break;\n        }\n      }\n      if (found) return i;\n    }\n  }\n  return -1;\n}\nBuffer.prototype.includes = function includes(val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1;\n};\nBuffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n};\nBuffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n};\nfunction hexWrite(buf, string, offset, length) {\n  offset = Number(offset) || 0;\n  var remaining = buf.length - offset;\n  if (!length) {\n    length = remaining;\n  } else {\n    length = Number(length);\n    if (length > remaining) {\n      length = remaining;\n    }\n  }\n  var strLen = string.length;\n  if (length > strLen / 2) {\n    length = strLen / 2;\n  }\n  var i;\n  for (i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16);\n    if (numberIsNaN(parsed)) return i;\n    buf[offset + i] = parsed;\n  }\n  return i;\n}\nfunction utf8Write(buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n}\nfunction asciiWrite(buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length);\n}\nfunction base64Write(buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length);\n}\nfunction ucs2Write(buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n}\nBuffer.prototype.write = function write(string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8';\n    length = this.length;\n    offset = 0;\n    // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset;\n    length = this.length;\n    offset = 0;\n    // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0;\n    if (isFinite(length)) {\n      length = length >>> 0;\n      if (encoding === undefined) encoding = 'utf8';\n    } else {\n      encoding = length;\n      length = undefined;\n    }\n  } else {\n    throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');\n  }\n  var remaining = this.length - offset;\n  if (length === undefined || length > remaining) length = remaining;\n  if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds');\n  }\n  if (!encoding) encoding = 'utf8';\n  var loweredCase = false;\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length);\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length);\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length);\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length);\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length);\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n};\nBuffer.prototype.toJSON = function toJSON() {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  };\n};\nfunction base64Slice(buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf);\n  } else {\n    return base64.fromByteArray(buf.slice(start, end));\n  }\n}\nfunction utf8Slice(buf, start, end) {\n  end = Math.min(buf.length, end);\n  var res = [];\n  var i = start;\n  while (i < end) {\n    var firstByte = buf[i];\n    var codePoint = null;\n    var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;\n    if (i + bytesPerSequence <= end) {\n      var secondByte = void 0,\n        thirdByte = void 0,\n        fourthByte = void 0,\n        tempCodePoint = void 0;\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte;\n          }\n          break;\n        case 2:\n          secondByte = buf[i + 1];\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint;\n            }\n          }\n          break;\n        case 3:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint;\n            }\n          }\n          break;\n        case 4:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n          fourthByte = buf[i + 3];\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint;\n            }\n          }\n      }\n    }\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD;\n      bytesPerSequence = 1;\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000;\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n      codePoint = 0xDC00 | codePoint & 0x3FF;\n    }\n    res.push(codePoint);\n    i += bytesPerSequence;\n  }\n  return decodeCodePointsArray(res);\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\nfunction decodeCodePointsArray(codePoints) {\n  var len = codePoints.length;\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = '';\n  var i = 0;\n  while (i < len) {\n    res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n  }\n  return res;\n}\nfunction asciiSlice(buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F);\n  }\n  return ret;\n}\nfunction latin1Slice(buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i]);\n  }\n  return ret;\n}\nfunction hexSlice(buf, start, end) {\n  var len = buf.length;\n  if (!start || start < 0) start = 0;\n  if (!end || end < 0 || end > len) end = len;\n  var out = '';\n  for (var i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]];\n  }\n  return out;\n}\nfunction utf16leSlice(buf, start, end) {\n  var bytes = buf.slice(start, end);\n  var res = '';\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (var i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n  }\n  return res;\n}\nBuffer.prototype.slice = function slice(start, end) {\n  var len = this.length;\n  start = ~~start;\n  end = end === undefined ? len : ~~end;\n  if (start < 0) {\n    start += len;\n    if (start < 0) start = 0;\n  } else if (start > len) {\n    start = len;\n  }\n  if (end < 0) {\n    end += len;\n    if (end < 0) end = 0;\n  } else if (end > len) {\n    end = len;\n  }\n  if (end < start) end = start;\n  var newBuf = this.subarray(start, end);\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype);\n  return newBuf;\n};\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset(offset, ext, length) {\n  if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');\n}\nBuffer.prototype.readUintLE = Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\n  offset = offset >>> 0;\n  byteLength = byteLength >>> 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n  return val;\n};\nBuffer.prototype.readUintBE = Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\n  offset = offset >>> 0;\n  byteLength = byteLength >>> 0;\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length);\n  }\n  var val = this[offset + --byteLength];\n  var mul = 1;\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul;\n  }\n  return val;\n};\nBuffer.prototype.readUint8 = Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  return this[offset];\n};\nBuffer.prototype.readUint16LE = Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return this[offset] | this[offset + 1] << 8;\n};\nBuffer.prototype.readUint16BE = Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return this[offset] << 8 | this[offset + 1];\n};\nBuffer.prototype.readUint32LE = Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;\n};\nBuffer.prototype.readUint32BE = Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n};\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) {\n  offset = offset >>> 0;\n  validateNumber(offset, 'offset');\n  var first = this[offset];\n  var last = this[offset + 7];\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8);\n  }\n  var lo = first + this[++offset] * Math.pow(2, 8) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 24);\n  var hi = this[++offset] + this[++offset] * Math.pow(2, 8) + this[++offset] * Math.pow(2, 16) + last * Math.pow(2, 24);\n  return BigInt(lo) + (BigInt(hi) << BigInt(32));\n});\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) {\n  offset = offset >>> 0;\n  validateNumber(offset, 'offset');\n  var first = this[offset];\n  var last = this[offset + 7];\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8);\n  }\n  var hi = first * Math.pow(2, 24) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + this[++offset];\n  var lo = this[++offset] * Math.pow(2, 24) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + last;\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo);\n});\nBuffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\n  offset = offset >>> 0;\n  byteLength = byteLength >>> 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n  mul *= 0x80;\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n  return val;\n};\nBuffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\n  offset = offset >>> 0;\n  byteLength = byteLength >>> 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var i = byteLength;\n  var mul = 1;\n  var val = this[offset + --i];\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul;\n  }\n  mul *= 0x80;\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n  return val;\n};\nBuffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  if (!(this[offset] & 0x80)) return this[offset];\n  return (0xff - this[offset] + 1) * -1;\n};\nBuffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset] | this[offset + 1] << 8;\n  return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\nBuffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset + 1] | this[offset] << 8;\n  return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\nBuffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n};\nBuffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n};\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) {\n  offset = offset >>> 0;\n  validateNumber(offset, 'offset');\n  var first = this[offset];\n  var last = this[offset + 7];\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8);\n  }\n  var val = this[offset + 4] + this[offset + 5] * Math.pow(2, 8) + this[offset + 6] * Math.pow(2, 16) + (last << 24); // Overflow\n\n  return (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * Math.pow(2, 8) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 24));\n});\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) {\n  offset = offset >>> 0;\n  validateNumber(offset, 'offset');\n  var first = this[offset];\n  var last = this[offset + 7];\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8);\n  }\n  var val = (first << 24) +\n  // Overflow\n  this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + this[++offset];\n  return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * Math.pow(2, 24) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + last);\n});\nBuffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return ieee754.read(this, offset, true, 23, 4);\n};\nBuffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return ieee754.read(this, offset, false, 23, 4);\n};\nBuffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return ieee754.read(this, offset, true, 52, 8);\n};\nBuffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n  offset = offset >>> 0;\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return ieee754.read(this, offset, false, 52, 8);\n};\nfunction checkInt(buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance');\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds');\n  if (offset + ext > buf.length) throw new RangeError('Index out of range');\n}\nBuffer.prototype.writeUintLE = Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  byteLength = byteLength >>> 0;\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n  var mul = 1;\n  var i = 0;\n  this[offset] = value & 0xFF;\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = value / mul & 0xFF;\n  }\n  return offset + byteLength;\n};\nBuffer.prototype.writeUintBE = Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  byteLength = byteLength >>> 0;\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n  var i = byteLength - 1;\n  var mul = 1;\n  this[offset + i] = value & 0xFF;\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = value / mul & 0xFF;\n  }\n  return offset + byteLength;\n};\nBuffer.prototype.writeUint8 = Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n  this[offset] = value & 0xff;\n  return offset + 1;\n};\nBuffer.prototype.writeUint16LE = Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n  this[offset] = value & 0xff;\n  this[offset + 1] = value >>> 8;\n  return offset + 2;\n};\nBuffer.prototype.writeUint16BE = Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n  this[offset] = value >>> 8;\n  this[offset + 1] = value & 0xff;\n  return offset + 2;\n};\nBuffer.prototype.writeUint32LE = Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n  this[offset + 3] = value >>> 24;\n  this[offset + 2] = value >>> 16;\n  this[offset + 1] = value >>> 8;\n  this[offset] = value & 0xff;\n  return offset + 4;\n};\nBuffer.prototype.writeUint32BE = Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n  this[offset] = value >>> 24;\n  this[offset + 1] = value >>> 16;\n  this[offset + 2] = value >>> 8;\n  this[offset + 3] = value & 0xff;\n  return offset + 4;\n};\nfunction wrtBigUInt64LE(buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7);\n  var lo = Number(value & BigInt(0xffffffff));\n  buf[offset++] = lo;\n  lo = lo >> 8;\n  buf[offset++] = lo;\n  lo = lo >> 8;\n  buf[offset++] = lo;\n  lo = lo >> 8;\n  buf[offset++] = lo;\n  var hi = Number(value >> BigInt(32) & BigInt(0xffffffff));\n  buf[offset++] = hi;\n  hi = hi >> 8;\n  buf[offset++] = hi;\n  hi = hi >> 8;\n  buf[offset++] = hi;\n  hi = hi >> 8;\n  buf[offset++] = hi;\n  return offset;\n}\nfunction wrtBigUInt64BE(buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7);\n  var lo = Number(value & BigInt(0xffffffff));\n  buf[offset + 7] = lo;\n  lo = lo >> 8;\n  buf[offset + 6] = lo;\n  lo = lo >> 8;\n  buf[offset + 5] = lo;\n  lo = lo >> 8;\n  buf[offset + 4] = lo;\n  var hi = Number(value >> BigInt(32) & BigInt(0xffffffff));\n  buf[offset + 3] = hi;\n  hi = hi >> 8;\n  buf[offset + 2] = hi;\n  hi = hi >> 8;\n  buf[offset + 1] = hi;\n  hi = hi >> 8;\n  buf[offset] = hi;\n  return offset + 8;\n}\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset) {\n  if (offset === void 0) {\n    offset = 0;\n  }\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'));\n});\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset) {\n  if (offset === void 0) {\n    offset = 0;\n  }\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'));\n});\nBuffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n  var i = 0;\n  var mul = 1;\n  var sub = 0;\n  this[offset] = value & 0xFF;\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1;\n    }\n    this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n  }\n  return offset + byteLength;\n};\nBuffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n  var i = byteLength - 1;\n  var mul = 1;\n  var sub = 0;\n  this[offset + i] = value & 0xFF;\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1;\n    }\n    this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n  }\n  return offset + byteLength;\n};\nBuffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n  if (value < 0) value = 0xff + value + 1;\n  this[offset] = value & 0xff;\n  return offset + 1;\n};\nBuffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n  this[offset] = value & 0xff;\n  this[offset + 1] = value >>> 8;\n  return offset + 2;\n};\nBuffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n  this[offset] = value >>> 8;\n  this[offset + 1] = value & 0xff;\n  return offset + 2;\n};\nBuffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n  this[offset] = value & 0xff;\n  this[offset + 1] = value >>> 8;\n  this[offset + 2] = value >>> 16;\n  this[offset + 3] = value >>> 24;\n  return offset + 4;\n};\nBuffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n  if (value < 0) value = 0xffffffff + value + 1;\n  this[offset] = value >>> 24;\n  this[offset + 1] = value >>> 16;\n  this[offset + 2] = value >>> 8;\n  this[offset + 3] = value & 0xff;\n  return offset + 4;\n};\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset) {\n  if (offset === void 0) {\n    offset = 0;\n  }\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'));\n});\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset) {\n  if (offset === void 0) {\n    offset = 0;\n  }\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'));\n});\nfunction checkIEEE754(buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range');\n  if (offset < 0) throw new RangeError('Index out of range');\n}\nfunction writeFloat(buf, value, offset, littleEndian, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4);\n  return offset + 4;\n}\nBuffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert);\n};\nBuffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert);\n};\nfunction writeDouble(buf, value, offset, littleEndian, noAssert) {\n  value = +value;\n  offset = offset >>> 0;\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8);\n  return offset + 8;\n}\nBuffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert);\n};\nBuffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert);\n};\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy(target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer');\n  if (!start) start = 0;\n  if (!end && end !== 0) end = this.length;\n  if (targetStart >= target.length) targetStart = target.length;\n  if (!targetStart) targetStart = 0;\n  if (end > 0 && end < start) end = start;\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0;\n  if (target.length === 0 || this.length === 0) return 0;\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds');\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range');\n  if (end < 0) throw new RangeError('sourceEnd out of bounds');\n\n  // Are we oob?\n  if (end > this.length) end = this.length;\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start;\n  }\n  var len = end - start;\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end);\n  } else {\n    Uint8Array.prototype.set.call(target, this.subarray(start, end), targetStart);\n  }\n  return len;\n};\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill(val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start;\n      start = 0;\n      end = this.length;\n    } else if (typeof end === 'string') {\n      encoding = end;\n      end = this.length;\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string');\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding);\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0);\n      if (encoding === 'utf8' && code < 128 || encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code;\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255;\n  } else if (typeof val === 'boolean') {\n    val = Number(val);\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index');\n  }\n  if (end <= start) {\n    return this;\n  }\n  start = start >>> 0;\n  end = end === undefined ? this.length : end >>> 0;\n  if (!val) val = 0;\n  var i;\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val;\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding);\n    var len = bytes.length;\n    if (len === 0) {\n      throw new TypeError('The value \"' + val + '\" is invalid for argument \"value\"');\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len];\n    }\n  }\n  return this;\n};\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nvar errors = {};\nfunction E(sym, getMessage, Base) {\n  errors[sym] = /*#__PURE__*/function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n    function NodeError() {\n      var _this;\n      _this = _Base.call(this) || this;\n      Object.defineProperty(_assertThisInitialized(_this), 'message', {\n        value: getMessage.apply(_assertThisInitialized(_this), arguments),\n        writable: true,\n        configurable: true\n      });\n\n      // Add the error code to the name to include it in the stack trace.\n      _this.name = _this.name + \" [\" + sym + \"]\";\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      _this.stack; // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete _this.name;\n      return _this;\n    }\n    var _proto = NodeError.prototype;\n    _proto.toString = function toString() {\n      return this.name + \" [\" + sym + \"]: \" + this.message;\n    };\n    _createClass(NodeError, [{\n      key: \"code\",\n      get: function get() {\n        return sym;\n      },\n      set: function set(value) {\n        Object.defineProperty(this, 'code', {\n          configurable: true,\n          enumerable: true,\n          value: value,\n          writable: true\n        });\n      }\n    }]);\n    return NodeError;\n  }(Base);\n}\nE('ERR_BUFFER_OUT_OF_BOUNDS', function (name) {\n  if (name) {\n    return name + \" is outside of buffer bounds\";\n  }\n  return 'Attempt to access memory outside buffer bounds';\n}, RangeError);\nE('ERR_INVALID_ARG_TYPE', function (name, actual) {\n  return \"The \\\"\" + name + \"\\\" argument must be of type number. Received type \" + typeof actual;\n}, TypeError);\nE('ERR_OUT_OF_RANGE', function (str, range, input) {\n  var msg = \"The value of \\\"\" + str + \"\\\" is out of range.\";\n  var received = input;\n  if (Number.isInteger(input) && Math.abs(input) > Math.pow(2, 32)) {\n    received = addNumericalSeparator(String(input));\n  } else if (typeof input === 'bigint') {\n    received = String(input);\n    if (input > Math.pow(BigInt(2), BigInt(32)) || input < -Math.pow(BigInt(2), BigInt(32))) {\n      received = addNumericalSeparator(received);\n    }\n    received += 'n';\n  }\n  msg += \" It must be \" + range + \". Received \" + received;\n  return msg;\n}, RangeError);\nfunction addNumericalSeparator(val) {\n  var res = '';\n  var i = val.length;\n  var start = val[0] === '-' ? 1 : 0;\n  for (; i >= start + 4; i -= 3) {\n    res = \"_\" + val.slice(i - 3, i) + res;\n  }\n  return \"\" + val.slice(0, i) + res;\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds(buf, offset, byteLength) {\n  validateNumber(offset, 'offset');\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1));\n  }\n}\nfunction checkIntBI(value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    var n = typeof min === 'bigint' ? 'n' : '';\n    var range;\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = \">= 0\" + n + \" and < 2\" + n + \" ** \" + (byteLength + 1) * 8 + n;\n      } else {\n        range = \">= -(2\" + n + \" ** \" + ((byteLength + 1) * 8 - 1) + n + \") and < 2 ** \" + (\"\" + ((byteLength + 1) * 8 - 1) + n);\n      }\n    } else {\n      range = \">= \" + min + n + \" and <= \" + max + n;\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value);\n  }\n  checkBounds(buf, offset, byteLength);\n}\nfunction validateNumber(value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value);\n  }\n}\nfunction boundsError(value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type);\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value);\n  }\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS();\n  }\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset', \">= \" + (type ? 1 : 0) + \" and <= \" + length, value);\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;\nfunction base64clean(str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0];\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '');\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return '';\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '=';\n  }\n  return str;\n}\nfunction utf8ToBytes(string, units) {\n  units = units || Infinity;\n  var codePoint;\n  var length = string.length;\n  var leadSurrogate = null;\n  var bytes = [];\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i);\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue;\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue;\n        }\n\n        // valid lead\n        leadSurrogate = codePoint;\n        continue;\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n        leadSurrogate = codePoint;\n        continue;\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n    }\n    leadSurrogate = null;\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break;\n      bytes.push(codePoint);\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break;\n      bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break;\n      bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break;\n      bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n    } else {\n      throw new Error('Invalid code point');\n    }\n  }\n  return bytes;\n}\nfunction asciiToBytes(str) {\n  var byteArray = [];\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF);\n  }\n  return byteArray;\n}\nfunction utf16leToBytes(str, units) {\n  var c, hi, lo;\n  var byteArray = [];\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break;\n    c = str.charCodeAt(i);\n    hi = c >> 8;\n    lo = c % 256;\n    byteArray.push(lo);\n    byteArray.push(hi);\n  }\n  return byteArray;\n}\nfunction base64ToBytes(str) {\n  return base64.toByteArray(base64clean(str));\n}\nfunction blitBuffer(src, dst, offset, length) {\n  var i;\n  for (i = 0; i < length; ++i) {\n    if (i + offset >= dst.length || i >= src.length) break;\n    dst[i + offset] = src[i];\n  }\n  return i;\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance(obj, type) {\n  return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;\n}\nfunction numberIsNaN(obj) {\n  // For IE11 support\n  return obj !== obj; // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = function () {\n  var alphabet = '0123456789abcdef';\n  var table = new Array(256);\n  for (var i = 0; i < 16; ++i) {\n    var i16 = i * 16;\n    for (var j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j];\n    }\n  }\n  return table;\n}();\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod(fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn;\n}\nfunction BufferBigIntNotDefined() {\n  throw new Error('BigInt not supported');\n}\n\n/***/ }),\n\n/***/ 477:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7803);\n__webpack_require__(1539);\n// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n\n/***/ }),\n\n/***/ 2094:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(477);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\nvar hasOwn = __webpack_require__(2597);\nvar classof = __webpack_require__(648);\nvar tryToString = __webpack_require__(6330);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar defineProperty = (__webpack_require__(3070).f);\nvar isPrototypeOf = __webpack_require__(7976);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar uid = __webpack_require__(9711);\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar TypeError = global.TypeError;\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = uid('TYPED_ARRAY_CONSTRUCTOR');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME, Constructor, Prototype;\nvar TypedArrayConstructorsList = {\n  Int8Array: 1,\n  Uint8Array: 1,\n  Uint8ClampedArray: 1,\n  Int16Array: 2,\n  Uint16Array: 2,\n  Int32Array: 4,\n  Uint32Array: 4,\n  Float32Array: 4,\n  Float64Array: 8\n};\nvar BigIntArrayConstructorsList = {\n  BigInt64Array: 8,\n  BigUint64Array: 8\n};\nvar isView = function isView(it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return klass === 'DataView' || hasOwn(TypedArrayConstructorsList, klass) || hasOwn(BigIntArrayConstructorsList, klass);\n};\nvar isTypedArray = function isTypedArray(it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return hasOwn(TypedArrayConstructorsList, klass) || hasOwn(BigIntArrayConstructorsList, klass);\n};\nvar aTypedArray = function aTypedArray(it) {\n  if (isTypedArray(it)) return it;\n  throw TypeError('Target is not a typed array');\n};\nvar aTypedArrayConstructor = function aTypedArrayConstructor(C) {\n  if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n  throw TypeError(tryToString(C) + ' is not a typed array constructor');\n};\nvar exportTypedArrayMethod = function exportTypedArrayMethod(KEY, property, forced) {\n  if (!DESCRIPTORS) return;\n  if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n    var TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n      delete TypedArrayConstructor.prototype[KEY];\n    } catch (error) {/* empty */}\n  }\n  if (!TypedArrayPrototype[KEY] || forced) {\n    redefine(TypedArrayPrototype, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n  }\n};\nvar exportTypedArrayStaticMethod = function exportTypedArrayStaticMethod(KEY, property, forced) {\n  var ARRAY, TypedArrayConstructor;\n  if (!DESCRIPTORS) return;\n  if (setPrototypeOf) {\n    if (forced) for (ARRAY in TypedArrayConstructorsList) {\n      TypedArrayConstructor = global[ARRAY];\n      if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n        delete TypedArrayConstructor[KEY];\n      } catch (error) {/* empty */}\n    }\n    if (!TypedArray[KEY] || forced) {\n      // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n      try {\n        return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n      } catch (error) {/* empty */}\n    } else return;\n  }\n  for (ARRAY in TypedArrayConstructorsList) {\n    TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n      redefine(TypedArrayConstructor, KEY, property);\n    }\n  }\n};\nfor (NAME in TypedArrayConstructorsList) {\n  Constructor = global[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR, Constructor);else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\nfor (NAME in BigIntArrayConstructorsList) {\n  Constructor = global[NAME];\n  Prototype = Constructor && Constructor.prototype;\n  if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR, Constructor);\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\n  // eslint-disable-next-line no-shadow -- safe\n  TypedArray = function TypedArray() {\n    throw TypeError('Incorrect invocation');\n  };\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n  }\n}\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n  TypedArrayPrototype = TypedArray.prototype;\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n  }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n  setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n  TYPED_ARRAY_TAG_REQIRED = true;\n  defineProperty(TypedArrayPrototype, TO_STRING_TAG, {\n    get: function get() {\n      return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n    }\n  });\n  for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) {\n      createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n    }\n  }\n}\nmodule.exports = {\n  NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n  TYPED_ARRAY_CONSTRUCTOR: TYPED_ARRAY_CONSTRUCTOR,\n  TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n  aTypedArray: aTypedArray,\n  aTypedArrayConstructor: aTypedArrayConstructor,\n  exportTypedArrayMethod: exportTypedArrayMethod,\n  exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n  isView: isView,\n  isTypedArray: isTypedArray,\n  TypedArray: TypedArray,\n  TypedArrayPrototype: TypedArrayPrototype\n};\n\n/***/ }),\n\n/***/ 2091:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(8309);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(477);\nvar FunctionName = __webpack_require__(6530);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefineAll = __webpack_require__(2248);\nvar fails = __webpack_require__(7293);\nvar anInstance = __webpack_require__(5787);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar toLength = __webpack_require__(7466);\nvar toIndex = __webpack_require__(7067);\nvar IEEE754 = __webpack_require__(1179);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar getOwnPropertyNames = (__webpack_require__(8006).f);\nvar defineProperty = (__webpack_require__(3070).f);\nvar arrayFill = __webpack_require__(1285);\nvar arraySlice = __webpack_require__(206);\nvar setToStringTag = __webpack_require__(8003);\nvar InternalStateModule = __webpack_require__(9909);\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE];\nvar $DataView = global[DATA_VIEW];\nvar DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar Array = global.Array;\nvar RangeError = global.RangeError;\nvar fill = uncurryThis(arrayFill);\nvar reverse = uncurryThis([].reverse);\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\nvar packInt8 = function packInt8(number) {\n  return [number & 0xFF];\n};\nvar packInt16 = function packInt16(number) {\n  return [number & 0xFF, number >> 8 & 0xFF];\n};\nvar packInt32 = function packInt32(number) {\n  return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\nvar unpackInt32 = function unpackInt32(buffer) {\n  return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\nvar packFloat32 = function packFloat32(number) {\n  return packIEEE754(number, 23, 4);\n};\nvar packFloat64 = function packFloat64(number) {\n  return packIEEE754(number, 52, 8);\n};\nvar addGetter = function addGetter(Constructor, key) {\n  defineProperty(Constructor[PROTOTYPE], key, {\n    get: function get() {\n      return getInternalState(this)[key];\n    }\n  });\n};\nvar get = function get(view, count, index, isLittleEndian) {\n  var intIndex = toIndex(index);\n  var store = getInternalState(view);\n  if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n  var bytes = getInternalState(store.buffer).bytes;\n  var start = intIndex + store.byteOffset;\n  var pack = arraySlice(bytes, start, start + count);\n  return isLittleEndian ? pack : reverse(pack);\n};\nvar set = function set(view, count, index, conversion, value, isLittleEndian) {\n  var intIndex = toIndex(index);\n  var store = getInternalState(view);\n  if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n  var bytes = getInternalState(store.buffer).bytes;\n  var start = intIndex + store.byteOffset;\n  var pack = conversion(+value);\n  for (var i = 0; i < count; i++) {\n    bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];\n  }\n};\nif (!NATIVE_ARRAY_BUFFER) {\n  $ArrayBuffer = function ArrayBuffer(length) {\n    anInstance(this, ArrayBufferPrototype);\n    var byteLength = toIndex(length);\n    setInternalState(this, {\n      bytes: fill(Array(byteLength), 0),\n      byteLength: byteLength\n    });\n    if (!DESCRIPTORS) this.byteLength = byteLength;\n  };\n  ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE];\n  $DataView = function DataView(buffer, byteOffset, byteLength) {\n    anInstance(this, DataViewPrototype);\n    anInstance(buffer, ArrayBufferPrototype);\n    var bufferLength = getInternalState(buffer).byteLength;\n    var offset = toIntegerOrInfinity(byteOffset);\n    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n    setInternalState(this, {\n      buffer: buffer,\n      byteLength: byteLength,\n      byteOffset: offset\n    });\n    if (!DESCRIPTORS) {\n      this.buffer = buffer;\n      this.byteLength = byteLength;\n      this.byteOffset = offset;\n    }\n  };\n  DataViewPrototype = $DataView[PROTOTYPE];\n  if (DESCRIPTORS) {\n    addGetter($ArrayBuffer, 'byteLength');\n    addGetter($DataView, 'buffer');\n    addGetter($DataView, 'byteLength');\n    addGetter($DataView, 'byteOffset');\n  }\n  redefineAll(DataViewPrototype, {\n    getInt8: function getInt8(byteOffset) {\n      return get(this, 1, byteOffset)[0] << 24 >> 24;\n    },\n    getUint8: function getUint8(byteOffset) {\n      return get(this, 1, byteOffset)[0];\n    },\n    getInt16: function getInt16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n    },\n    getUint16: function getUint16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n      return bytes[1] << 8 | bytes[0];\n    },\n    getInt32: function getInt32(byteOffset /* , littleEndian */) {\n      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));\n    },\n    getUint32: function getUint32(byteOffset /* , littleEndian */) {\n      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;\n    },\n    getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);\n    },\n    getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);\n    },\n    setInt8: function setInt8(byteOffset, value) {\n      set(this, 1, byteOffset, packInt8, value);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      set(this, 1, byteOffset, packInt8, value);\n    },\n    setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n      set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);\n    }\n  });\n} else {\n  var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME && NativeArrayBuffer.name !== ARRAY_BUFFER;\n  /* eslint-disable no-new -- required for testing */\n  if (!fails(function () {\n    NativeArrayBuffer(1);\n  }) || !fails(function () {\n    new NativeArrayBuffer(-1);\n  }) || fails(function () {\n    new NativeArrayBuffer();\n    new NativeArrayBuffer(1.5);\n    new NativeArrayBuffer(NaN);\n    return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;\n  })) {\n    /* eslint-enable no-new -- required for testing */\n    $ArrayBuffer = function ArrayBuffer(length) {\n      anInstance(this, ArrayBufferPrototype);\n      return new NativeArrayBuffer(toIndex(length));\n    };\n    $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype;\n    for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n      if (!((key = keys[j++]) in $ArrayBuffer)) {\n        createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n      }\n    }\n    ArrayBufferPrototype.constructor = $ArrayBuffer;\n  } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {\n    createNonEnumerableProperty(NativeArrayBuffer, 'name', ARRAY_BUFFER);\n  }\n\n  // WebKit bug - the same parent prototype for typed arrays and data view\n  if (setPrototypeOf && getPrototypeOf(DataViewPrototype) !== ObjectPrototype) {\n    setPrototypeOf(DataViewPrototype, ObjectPrototype);\n  }\n\n  // iOS Safari 7.x bug\n  var testView = new $DataView(new $ArrayBuffer(2));\n  var $setInt8 = uncurryThis(DataViewPrototype.setInt8);\n  testView.setInt8(0, 2147483648);\n  testView.setInt8(1, 2147483649);\n  if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll(DataViewPrototype, {\n    setInt8: function setInt8(byteOffset, value) {\n      $setInt8(this, byteOffset, value << 24 >> 24);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      $setInt8(this, byteOffset, value << 24 >> 24);\n    }\n  }, {\n    unsafe: true\n  });\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nmodule.exports = {\n  ArrayBuffer: $ArrayBuffer,\n  DataView: $DataView\n};\n\n/***/ }),\n\n/***/ 7803:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar arrayBufferModule = __webpack_require__(2091);\nvar setSpecies = __webpack_require__(6340);\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\n\n// `ArrayBuffer` constructor\n// https://tc39.es/ecma262/#sec-arraybuffer-constructor\n$({\n  global: true,\n  forced: NativeArrayBuffer !== ArrayBuffer\n}, {\n  ArrayBuffer: ArrayBuffer\n});\nsetSpecies(ARRAY_BUFFER);\n\n/***/ }),\n\n/***/ 194:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(7508), __webpack_require__(3440), __webpack_require__(3839), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var BlockCipher = C_lib.BlockCipher;\n    var C_algo = C.algo;\n\n    // Lookup tables\n    var SBOX = [];\n    var INV_SBOX = [];\n    var SUB_MIX_0 = [];\n    var SUB_MIX_1 = [];\n    var SUB_MIX_2 = [];\n    var SUB_MIX_3 = [];\n    var INV_SUB_MIX_0 = [];\n    var INV_SUB_MIX_1 = [];\n    var INV_SUB_MIX_2 = [];\n    var INV_SUB_MIX_3 = [];\n\n    // Compute lookup tables\n    (function () {\n      // Compute double table\n      var d = [];\n      for (var i = 0; i < 256; i++) {\n        if (i < 128) {\n          d[i] = i << 1;\n        } else {\n          d[i] = i << 1 ^ 0x11b;\n        }\n      }\n\n      // Walk GF(2^8)\n      var x = 0;\n      var xi = 0;\n      for (var i = 0; i < 256; i++) {\n        // Compute sbox\n        var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;\n        sx = sx >>> 8 ^ sx & 0xff ^ 0x63;\n        SBOX[x] = sx;\n        INV_SBOX[sx] = x;\n\n        // Compute multiplication\n        var x2 = d[x];\n        var x4 = d[x2];\n        var x8 = d[x4];\n\n        // Compute sub bytes, mix columns tables\n        var t = d[sx] * 0x101 ^ sx * 0x1010100;\n        SUB_MIX_0[x] = t << 24 | t >>> 8;\n        SUB_MIX_1[x] = t << 16 | t >>> 16;\n        SUB_MIX_2[x] = t << 8 | t >>> 24;\n        SUB_MIX_3[x] = t;\n\n        // Compute inv sub bytes, inv mix columns tables\n        var t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n        INV_SUB_MIX_0[sx] = t << 24 | t >>> 8;\n        INV_SUB_MIX_1[sx] = t << 16 | t >>> 16;\n        INV_SUB_MIX_2[sx] = t << 8 | t >>> 24;\n        INV_SUB_MIX_3[sx] = t;\n\n        // Compute next counter\n        if (!x) {\n          x = xi = 1;\n        } else {\n          x = x2 ^ d[d[d[x8 ^ x2]]];\n          xi ^= d[d[xi]];\n        }\n      }\n    })();\n\n    // Precomputed Rcon lookup\n    var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n    /**\n     * AES block cipher algorithm.\n     */\n    var AES = C_algo.AES = BlockCipher.extend({\n      _doReset: function _doReset() {\n        var t;\n\n        // Skip reset of nRounds has been set before and key did not change\n        if (this._nRounds && this._keyPriorReset === this._key) {\n          return;\n        }\n\n        // Shortcuts\n        var key = this._keyPriorReset = this._key;\n        var keyWords = key.words;\n        var keySize = key.sigBytes / 4;\n\n        // Compute number of rounds\n        var nRounds = this._nRounds = keySize + 6;\n\n        // Compute number of key schedule rows\n        var ksRows = (nRounds + 1) * 4;\n\n        // Compute key schedule\n        var keySchedule = this._keySchedule = [];\n        for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n          if (ksRow < keySize) {\n            keySchedule[ksRow] = keyWords[ksRow];\n          } else {\n            t = keySchedule[ksRow - 1];\n            if (!(ksRow % keySize)) {\n              // Rot word\n              t = t << 8 | t >>> 24;\n\n              // Sub word\n              t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 0xff] << 16 | SBOX[t >>> 8 & 0xff] << 8 | SBOX[t & 0xff];\n\n              // Mix Rcon\n              t ^= RCON[ksRow / keySize | 0] << 24;\n            } else if (keySize > 6 && ksRow % keySize == 4) {\n              // Sub word\n              t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 0xff] << 16 | SBOX[t >>> 8 & 0xff] << 8 | SBOX[t & 0xff];\n            }\n            keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n          }\n        }\n\n        // Compute inv key schedule\n        var invKeySchedule = this._invKeySchedule = [];\n        for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n          var ksRow = ksRows - invKsRow;\n          if (invKsRow % 4) {\n            var t = keySchedule[ksRow];\n          } else {\n            var t = keySchedule[ksRow - 4];\n          }\n          if (invKsRow < 4 || ksRow <= 4) {\n            invKeySchedule[invKsRow] = t;\n          } else {\n            invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[t >>> 16 & 0xff]] ^ INV_SUB_MIX_2[SBOX[t >>> 8 & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n          }\n        }\n      },\n      encryptBlock: function encryptBlock(M, offset) {\n        this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n      },\n      decryptBlock: function decryptBlock(M, offset) {\n        // Swap 2nd and 4th rows\n        var t = M[offset + 1];\n        M[offset + 1] = M[offset + 3];\n        M[offset + 3] = t;\n        this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n        // Inv swap 2nd and 4th rows\n        var t = M[offset + 1];\n        M[offset + 1] = M[offset + 3];\n        M[offset + 3] = t;\n      },\n      _doCryptBlock: function _doCryptBlock(M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n        // Shortcut\n        var nRounds = this._nRounds;\n\n        // Get input, add round key\n        var s0 = M[offset] ^ keySchedule[0];\n        var s1 = M[offset + 1] ^ keySchedule[1];\n        var s2 = M[offset + 2] ^ keySchedule[2];\n        var s3 = M[offset + 3] ^ keySchedule[3];\n\n        // Key schedule row counter\n        var ksRow = 4;\n\n        // Rounds\n        for (var round = 1; round < nRounds; round++) {\n          // Shift rows, sub bytes, mix columns, add round key\n          var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[s1 >>> 16 & 0xff] ^ SUB_MIX_2[s2 >>> 8 & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n          var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[s2 >>> 16 & 0xff] ^ SUB_MIX_2[s3 >>> 8 & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n          var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[s3 >>> 16 & 0xff] ^ SUB_MIX_2[s0 >>> 8 & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n          var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[s0 >>> 16 & 0xff] ^ SUB_MIX_2[s1 >>> 8 & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n          // Update state\n          s0 = t0;\n          s1 = t1;\n          s2 = t2;\n          s3 = t3;\n        }\n\n        // Shift rows, sub bytes, add round key\n        var t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 0xff] << 16 | SBOX[s2 >>> 8 & 0xff] << 8 | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n        var t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 0xff] << 16 | SBOX[s3 >>> 8 & 0xff] << 8 | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n        var t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 0xff] << 16 | SBOX[s0 >>> 8 & 0xff] << 8 | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n        var t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 0xff] << 16 | SBOX[s1 >>> 8 & 0xff] << 8 | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n        // Set output\n        M[offset] = t0;\n        M[offset + 1] = t1;\n        M[offset + 2] = t2;\n        M[offset + 3] = t3;\n      },\n      keySize: 256 / 32\n    });\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n     */\n    C.AES = BlockCipher._createHelper(AES);\n  })();\n  return CryptoJS.AES;\n});\n\n/***/ }),\n\n/***/ 1582:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n__webpack_require__(2222);\n__webpack_require__(1539);\n__webpack_require__(9714);\n__webpack_require__(561);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(3839));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * Cipher core components.\n   */\n  CryptoJS.lib.Cipher || function (undefined) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var Base = C_lib.Base;\n    var WordArray = C_lib.WordArray;\n    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n    var C_enc = C.enc;\n    var Utf8 = C_enc.Utf8;\n    var Base64 = C_enc.Base64;\n    var C_algo = C.algo;\n    var EvpKDF = C_algo.EvpKDF;\n\n    /**\n     * Abstract base cipher template.\n     *\n     * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n     * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n     * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n     * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n     */\n    var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {WordArray} iv The IV to use for this operation.\n       */\n      cfg: Base.extend(),\n      /**\n       * Creates this cipher in encryption mode.\n       *\n       * @param {WordArray} key The key.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @return {Cipher} A cipher instance.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n       */\n      createEncryptor: function createEncryptor(key, cfg) {\n        return this.create(this._ENC_XFORM_MODE, key, cfg);\n      },\n      /**\n       * Creates this cipher in decryption mode.\n       *\n       * @param {WordArray} key The key.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @return {Cipher} A cipher instance.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n       */\n      createDecryptor: function createDecryptor(key, cfg) {\n        return this.create(this._DEC_XFORM_MODE, key, cfg);\n      },\n      /**\n       * Initializes a newly created cipher.\n       *\n       * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n       * @param {WordArray} key The key.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @example\n       *\n       *     var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n       */\n      init: function init(xformMode, key, cfg) {\n        // Apply config defaults\n        this.cfg = this.cfg.extend(cfg);\n\n        // Store transform mode and key\n        this._xformMode = xformMode;\n        this._key = key;\n\n        // Set initial values\n        this.reset();\n      },\n      /**\n       * Resets this cipher to its initial state.\n       *\n       * @example\n       *\n       *     cipher.reset();\n       */\n      reset: function reset() {\n        // Reset data buffer\n        BufferedBlockAlgorithm.reset.call(this);\n\n        // Perform concrete-cipher logic\n        this._doReset();\n      },\n      /**\n       * Adds data to be encrypted or decrypted.\n       *\n       * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n       *\n       * @return {WordArray} The data after processing.\n       *\n       * @example\n       *\n       *     var encrypted = cipher.process('data');\n       *     var encrypted = cipher.process(wordArray);\n       */\n      process: function process(dataUpdate) {\n        // Append\n        this._append(dataUpdate);\n\n        // Process available blocks\n        return this._process();\n      },\n      /**\n       * Finalizes the encryption or decryption process.\n       * Note that the finalize operation is effectively a destructive, read-once operation.\n       *\n       * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n       *\n       * @return {WordArray} The data after final processing.\n       *\n       * @example\n       *\n       *     var encrypted = cipher.finalize();\n       *     var encrypted = cipher.finalize('data');\n       *     var encrypted = cipher.finalize(wordArray);\n       */\n      finalize: function finalize(dataUpdate) {\n        // Final data update\n        if (dataUpdate) {\n          this._append(dataUpdate);\n        }\n\n        // Perform concrete-cipher logic\n        var finalProcessedData = this._doFinalize();\n        return finalProcessedData;\n      },\n      keySize: 128 / 32,\n      ivSize: 128 / 32,\n      _ENC_XFORM_MODE: 1,\n      _DEC_XFORM_MODE: 2,\n      /**\n       * Creates shortcut functions to a cipher's object interface.\n       *\n       * @param {Cipher} cipher The cipher to create a helper for.\n       *\n       * @return {Object} An object with encrypt and decrypt shortcut functions.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n       */\n      _createHelper: function () {\n        function selectCipherStrategy(key) {\n          if (typeof key == 'string') {\n            return PasswordBasedCipher;\n          } else {\n            return SerializableCipher;\n          }\n        }\n        return function (cipher) {\n          return {\n            encrypt: function encrypt(message, key, cfg) {\n              return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n            },\n            decrypt: function decrypt(ciphertext, key, cfg) {\n              return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n            }\n          };\n        };\n      }()\n    });\n\n    /**\n     * Abstract base stream cipher template.\n     *\n     * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n     */\n    var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n      _doFinalize: function _doFinalize() {\n        // Process partial blocks\n        var finalProcessedBlocks = this._process(!!'flush');\n        return finalProcessedBlocks;\n      },\n      blockSize: 1\n    });\n\n    /**\n     * Mode namespace.\n     */\n    var C_mode = C.mode = {};\n\n    /**\n     * Abstract base block cipher mode template.\n     */\n    var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n      /**\n       * Creates this mode for encryption.\n       *\n       * @param {Cipher} cipher A block cipher instance.\n       * @param {Array} iv The IV words.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n       */\n      createEncryptor: function createEncryptor(cipher, iv) {\n        return this.Encryptor.create(cipher, iv);\n      },\n      /**\n       * Creates this mode for decryption.\n       *\n       * @param {Cipher} cipher A block cipher instance.\n       * @param {Array} iv The IV words.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n       */\n      createDecryptor: function createDecryptor(cipher, iv) {\n        return this.Decryptor.create(cipher, iv);\n      },\n      /**\n       * Initializes a newly created mode.\n       *\n       * @param {Cipher} cipher A block cipher instance.\n       * @param {Array} iv The IV words.\n       *\n       * @example\n       *\n       *     var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n       */\n      init: function init(cipher, iv) {\n        this._cipher = cipher;\n        this._iv = iv;\n      }\n    });\n\n    /**\n     * Cipher Block Chaining mode.\n     */\n    var CBC = C_mode.CBC = function () {\n      /**\n       * Abstract base CBC mode.\n       */\n      var CBC = BlockCipherMode.extend();\n\n      /**\n       * CBC encryptor.\n       */\n      CBC.Encryptor = CBC.extend({\n        /**\n         * Processes the data block at offset.\n         *\n         * @param {Array} words The data words to operate on.\n         * @param {number} offset The offset where the block starts.\n         *\n         * @example\n         *\n         *     mode.processBlock(data.words, offset);\n         */\n        processBlock: function processBlock(words, offset) {\n          // Shortcuts\n          var cipher = this._cipher;\n          var blockSize = cipher.blockSize;\n\n          // XOR and encrypt\n          xorBlock.call(this, words, offset, blockSize);\n          cipher.encryptBlock(words, offset);\n\n          // Remember this block to use with next block\n          this._prevBlock = words.slice(offset, offset + blockSize);\n        }\n      });\n\n      /**\n       * CBC decryptor.\n       */\n      CBC.Decryptor = CBC.extend({\n        /**\n         * Processes the data block at offset.\n         *\n         * @param {Array} words The data words to operate on.\n         * @param {number} offset The offset where the block starts.\n         *\n         * @example\n         *\n         *     mode.processBlock(data.words, offset);\n         */\n        processBlock: function processBlock(words, offset) {\n          // Shortcuts\n          var cipher = this._cipher;\n          var blockSize = cipher.blockSize;\n\n          // Remember this block to use with next block\n          var thisBlock = words.slice(offset, offset + blockSize);\n\n          // Decrypt and XOR\n          cipher.decryptBlock(words, offset);\n          xorBlock.call(this, words, offset, blockSize);\n\n          // This block becomes the previous block\n          this._prevBlock = thisBlock;\n        }\n      });\n      function xorBlock(words, offset, blockSize) {\n        var block;\n\n        // Shortcut\n        var iv = this._iv;\n\n        // Choose mixing block\n        if (iv) {\n          block = iv;\n\n          // Remove IV for subsequent blocks\n          this._iv = undefined;\n        } else {\n          block = this._prevBlock;\n        }\n\n        // XOR blocks\n        for (var i = 0; i < blockSize; i++) {\n          words[offset + i] ^= block[i];\n        }\n      }\n      return CBC;\n    }();\n\n    /**\n     * Padding namespace.\n     */\n    var C_pad = C.pad = {};\n\n    /**\n     * PKCS #5/7 padding strategy.\n     */\n    var Pkcs7 = C_pad.Pkcs7 = {\n      /**\n       * Pads data using the algorithm defined in PKCS #5/7.\n       *\n       * @param {WordArray} data The data to pad.\n       * @param {number} blockSize The multiple that the data should be padded to.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n       */\n      pad: function pad(data, blockSize) {\n        // Shortcut\n        var blockSizeBytes = blockSize * 4;\n\n        // Count padding bytes\n        var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n        // Create padding word\n        var paddingWord = nPaddingBytes << 24 | nPaddingBytes << 16 | nPaddingBytes << 8 | nPaddingBytes;\n\n        // Create padding\n        var paddingWords = [];\n        for (var i = 0; i < nPaddingBytes; i += 4) {\n          paddingWords.push(paddingWord);\n        }\n        var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n        // Add padding\n        data.concat(padding);\n      },\n      /**\n       * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n       *\n       * @param {WordArray} data The data to unpad.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     CryptoJS.pad.Pkcs7.unpad(wordArray);\n       */\n      unpad: function unpad(data) {\n        // Get number of padding bytes from last byte\n        var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n        // Remove padding\n        data.sigBytes -= nPaddingBytes;\n      }\n    };\n\n    /**\n     * Abstract base block cipher template.\n     *\n     * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n     */\n    var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {Mode} mode The block mode to use. Default: CBC\n       * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n       */\n      cfg: Cipher.cfg.extend({\n        mode: CBC,\n        padding: Pkcs7\n      }),\n      reset: function reset() {\n        var modeCreator;\n\n        // Reset cipher\n        Cipher.reset.call(this);\n\n        // Shortcuts\n        var cfg = this.cfg;\n        var iv = cfg.iv;\n        var mode = cfg.mode;\n\n        // Reset block mode\n        if (this._xformMode == this._ENC_XFORM_MODE) {\n          modeCreator = mode.createEncryptor;\n        } else /* if (this._xformMode == this._DEC_XFORM_MODE) */{\n            modeCreator = mode.createDecryptor;\n            // Keep at least one block in the buffer for unpadding\n            this._minBufferSize = 1;\n          }\n        if (this._mode && this._mode.__creator == modeCreator) {\n          this._mode.init(this, iv && iv.words);\n        } else {\n          this._mode = modeCreator.call(mode, this, iv && iv.words);\n          this._mode.__creator = modeCreator;\n        }\n      },\n      _doProcessBlock: function _doProcessBlock(words, offset) {\n        this._mode.processBlock(words, offset);\n      },\n      _doFinalize: function _doFinalize() {\n        var finalProcessedBlocks;\n\n        // Shortcut\n        var padding = this.cfg.padding;\n\n        // Finalize\n        if (this._xformMode == this._ENC_XFORM_MODE) {\n          // Pad data\n          padding.pad(this._data, this.blockSize);\n\n          // Process final blocks\n          finalProcessedBlocks = this._process(!!'flush');\n        } else /* if (this._xformMode == this._DEC_XFORM_MODE) */{\n            // Process final blocks\n            finalProcessedBlocks = this._process(!!'flush');\n\n            // Unpad data\n            padding.unpad(finalProcessedBlocks);\n          }\n        return finalProcessedBlocks;\n      },\n      blockSize: 128 / 32\n    });\n\n    /**\n     * A collection of cipher parameters.\n     *\n     * @property {WordArray} ciphertext The raw ciphertext.\n     * @property {WordArray} key The key to this ciphertext.\n     * @property {WordArray} iv The IV used in the ciphering operation.\n     * @property {WordArray} salt The salt used with a key derivation function.\n     * @property {Cipher} algorithm The cipher algorithm.\n     * @property {Mode} mode The block mode used in the ciphering operation.\n     * @property {Padding} padding The padding scheme used in the ciphering operation.\n     * @property {number} blockSize The block size of the cipher.\n     * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n     */\n    var CipherParams = C_lib.CipherParams = Base.extend({\n      /**\n       * Initializes a newly created cipher params object.\n       *\n       * @param {Object} cipherParams An object with any of the possible cipher parameters.\n       *\n       * @example\n       *\n       *     var cipherParams = CryptoJS.lib.CipherParams.create({\n       *         ciphertext: ciphertextWordArray,\n       *         key: keyWordArray,\n       *         iv: ivWordArray,\n       *         salt: saltWordArray,\n       *         algorithm: CryptoJS.algo.AES,\n       *         mode: CryptoJS.mode.CBC,\n       *         padding: CryptoJS.pad.PKCS7,\n       *         blockSize: 4,\n       *         formatter: CryptoJS.format.OpenSSL\n       *     });\n       */\n      init: function init(cipherParams) {\n        this.mixIn(cipherParams);\n      },\n      /**\n       * Converts this cipher params object to a string.\n       *\n       * @param {Format} formatter (Optional) The formatting strategy to use.\n       *\n       * @return {string} The stringified cipher params.\n       *\n       * @throws Error If neither the formatter nor the default formatter is set.\n       *\n       * @example\n       *\n       *     var string = cipherParams + '';\n       *     var string = cipherParams.toString();\n       *     var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n       */\n      toString: function toString(formatter) {\n        return (formatter || this.formatter).stringify(this);\n      }\n    });\n\n    /**\n     * Format namespace.\n     */\n    var C_format = C.format = {};\n\n    /**\n     * OpenSSL formatting strategy.\n     */\n    var OpenSSLFormatter = C_format.OpenSSL = {\n      /**\n       * Converts a cipher params object to an OpenSSL-compatible string.\n       *\n       * @param {CipherParams} cipherParams The cipher params object.\n       *\n       * @return {string} The OpenSSL-compatible string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n       */\n      stringify: function stringify(cipherParams) {\n        var wordArray;\n\n        // Shortcuts\n        var ciphertext = cipherParams.ciphertext;\n        var salt = cipherParams.salt;\n\n        // Format\n        if (salt) {\n          wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n        } else {\n          wordArray = ciphertext;\n        }\n        return wordArray.toString(Base64);\n      },\n      /**\n       * Converts an OpenSSL-compatible string to a cipher params object.\n       *\n       * @param {string} openSSLStr The OpenSSL-compatible string.\n       *\n       * @return {CipherParams} The cipher params object.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n       */\n      parse: function parse(openSSLStr) {\n        var salt;\n\n        // Parse base64\n        var ciphertext = Base64.parse(openSSLStr);\n\n        // Shortcut\n        var ciphertextWords = ciphertext.words;\n\n        // Test for salt\n        if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n          // Extract salt\n          salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n          // Remove salt from ciphertext\n          ciphertextWords.splice(0, 4);\n          ciphertext.sigBytes -= 16;\n        }\n        return CipherParams.create({\n          ciphertext: ciphertext,\n          salt: salt\n        });\n      }\n    };\n\n    /**\n     * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n     */\n    var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n       */\n      cfg: Base.extend({\n        format: OpenSSLFormatter\n      }),\n      /**\n       * Encrypts a message.\n       *\n       * @param {Cipher} cipher The cipher algorithm to use.\n       * @param {WordArray|string} message The message to encrypt.\n       * @param {WordArray} key The key.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @return {CipherParams} A cipher params object.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n       *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n       *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n       */\n      encrypt: function encrypt(cipher, message, key, cfg) {\n        // Apply config defaults\n        cfg = this.cfg.extend(cfg);\n\n        // Encrypt\n        var encryptor = cipher.createEncryptor(key, cfg);\n        var ciphertext = encryptor.finalize(message);\n\n        // Shortcut\n        var cipherCfg = encryptor.cfg;\n\n        // Create and return serializable cipher params\n        return CipherParams.create({\n          ciphertext: ciphertext,\n          key: key,\n          iv: cipherCfg.iv,\n          algorithm: cipher,\n          mode: cipherCfg.mode,\n          padding: cipherCfg.padding,\n          blockSize: cipher.blockSize,\n          formatter: cfg.format\n        });\n      },\n      /**\n       * Decrypts serialized ciphertext.\n       *\n       * @param {Cipher} cipher The cipher algorithm to use.\n       * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n       * @param {WordArray} key The key.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @return {WordArray} The plaintext.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n       *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n       */\n      decrypt: function decrypt(cipher, ciphertext, key, cfg) {\n        // Apply config defaults\n        cfg = this.cfg.extend(cfg);\n\n        // Convert string to CipherParams\n        ciphertext = this._parse(ciphertext, cfg.format);\n\n        // Decrypt\n        var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n        return plaintext;\n      },\n      /**\n       * Converts serialized ciphertext to CipherParams,\n       * else assumed CipherParams already and returns ciphertext unchanged.\n       *\n       * @param {CipherParams|string} ciphertext The ciphertext.\n       * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n       *\n       * @return {CipherParams} The unserialized ciphertext.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n       */\n      _parse: function _parse(ciphertext, format) {\n        if (typeof ciphertext == 'string') {\n          return format.parse(ciphertext, this);\n        } else {\n          return ciphertext;\n        }\n      }\n    });\n\n    /**\n     * Key derivation function namespace.\n     */\n    var C_kdf = C.kdf = {};\n\n    /**\n     * OpenSSL key derivation function.\n     */\n    var OpenSSLKdf = C_kdf.OpenSSL = {\n      /**\n       * Derives a key and IV from a password.\n       *\n       * @param {string} password The password to derive from.\n       * @param {number} keySize The size in words of the key to generate.\n       * @param {number} ivSize The size in words of the IV to generate.\n       * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n       *\n       * @return {CipherParams} A cipher params object with the key, IV, and salt.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n       *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n       */\n      execute: function execute(password, keySize, ivSize, salt) {\n        // Generate random salt\n        if (!salt) {\n          salt = WordArray.random(64 / 8);\n        }\n\n        // Derive key and IV\n        var key = EvpKDF.create({\n          keySize: keySize + ivSize\n        }).compute(password, salt);\n\n        // Separate key and IV\n        var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n        key.sigBytes = keySize * 4;\n\n        // Return params\n        return CipherParams.create({\n          key: key,\n          iv: iv,\n          salt: salt\n        });\n      }\n    };\n\n    /**\n     * A serializable cipher wrapper that derives the key from a password,\n     * and returns ciphertext as a serializable cipher params object.\n     */\n    var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n       */\n      cfg: SerializableCipher.cfg.extend({\n        kdf: OpenSSLKdf\n      }),\n      /**\n       * Encrypts a message using a password.\n       *\n       * @param {Cipher} cipher The cipher algorithm to use.\n       * @param {WordArray|string} message The message to encrypt.\n       * @param {string} password The password.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @return {CipherParams} A cipher params object.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n       *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n       */\n      encrypt: function encrypt(cipher, message, password, cfg) {\n        // Apply config defaults\n        cfg = this.cfg.extend(cfg);\n\n        // Derive key and other params\n        var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n        // Add IV to config\n        cfg.iv = derivedParams.iv;\n\n        // Encrypt\n        var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n        // Mix in derived params\n        ciphertext.mixIn(derivedParams);\n        return ciphertext;\n      },\n      /**\n       * Decrypts serialized ciphertext using a password.\n       *\n       * @param {Cipher} cipher The cipher algorithm to use.\n       * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n       * @param {string} password The password.\n       * @param {Object} cfg (Optional) The configuration options to use for this operation.\n       *\n       * @return {WordArray} The plaintext.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n       *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n       */\n      decrypt: function decrypt(cipher, ciphertext, password, cfg) {\n        // Apply config defaults\n        cfg = this.cfg.extend(cfg);\n\n        // Convert string to CipherParams\n        ciphertext = this._parse(ciphertext, cfg.format);\n\n        // Derive key and other params\n        var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n        // Add IV to config\n        cfg.iv = derivedParams.iv;\n\n        // Decrypt\n        var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n        return plaintext;\n      }\n    });\n  }();\n});\n\n/***/ }),\n\n/***/ 757:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(5743);\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(9135);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(9714);\n__webpack_require__(7042);\n__webpack_require__(9600);\n__webpack_require__(2222);\n__webpack_require__(561);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory();\n  } else {}\n})(void 0, function () {\n  /*globals window, global, require*/\n\n  /**\n   * CryptoJS core components.\n   */\n  var CryptoJS = CryptoJS || function (Math, undefined) {\n    var crypto;\n\n    // Native crypto from window (Browser)\n    if (typeof window !== 'undefined' && window.crypto) {\n      crypto = window.crypto;\n    }\n\n    // Native crypto in web worker (Browser)\n    if (typeof self !== 'undefined' && self.crypto) {\n      crypto = self.crypto;\n    }\n\n    // Native crypto from worker\n    if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n      crypto = globalThis.crypto;\n    }\n\n    // Native (experimental IE 11) crypto from window (Browser)\n    if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n      crypto = window.msCrypto;\n    }\n\n    // Native crypto from global (NodeJS)\n    if (!crypto && typeof __webpack_require__.g !== 'undefined' && __webpack_require__.g.crypto) {\n      crypto = __webpack_require__.g.crypto;\n    }\n\n    // Native crypto import via require (NodeJS)\n    if (!crypto && \"function\" === 'function') {\n      try {\n        crypto = __webpack_require__(2480);\n      } catch (err) {}\n    }\n\n    /*\n     * Cryptographically secure pseudorandom number generator\n     *\n     * As Math.random() is cryptographically not safe to use\n     */\n    var cryptoSecureRandomInt = function cryptoSecureRandomInt() {\n      if (crypto) {\n        // Use getRandomValues method (Browser)\n        if (typeof crypto.getRandomValues === 'function') {\n          try {\n            return crypto.getRandomValues(new Uint32Array(1))[0];\n          } catch (err) {}\n        }\n\n        // Use randomBytes method (NodeJS)\n        if (typeof crypto.randomBytes === 'function') {\n          try {\n            return crypto.randomBytes(4).readInt32LE();\n          } catch (err) {}\n        }\n      }\n      throw new Error('Native crypto module could not be used to get secure random number.');\n    };\n\n    /*\n     * Local polyfill of Object.create\n      */\n    var create = Object.create || function () {\n      function F() {}\n      return function (obj) {\n        var subtype;\n        F.prototype = obj;\n        subtype = new F();\n        F.prototype = null;\n        return subtype;\n      };\n    }();\n\n    /**\n     * CryptoJS namespace.\n     */\n    var C = {};\n\n    /**\n     * Library namespace.\n     */\n    var C_lib = C.lib = {};\n\n    /**\n     * Base object for prototypal inheritance.\n     */\n    var Base = C_lib.Base = function () {\n      return {\n        /**\n         * Creates a new object that inherits from this object.\n         *\n         * @param {Object} overrides Properties to copy into the new object.\n         *\n         * @return {Object} The new object.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var MyType = CryptoJS.lib.Base.extend({\n         *         field: 'value',\n         *\n         *         method: function () {\n         *         }\n         *     });\n         */\n        extend: function extend(overrides) {\n          // Spawn\n          var subtype = create(this);\n\n          // Augment\n          if (overrides) {\n            subtype.mixIn(overrides);\n          }\n\n          // Create default initializer\n          if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n            subtype.init = function () {\n              subtype.$super.init.apply(this, arguments);\n            };\n          }\n\n          // Initializer's prototype is the subtype object\n          subtype.init.prototype = subtype;\n\n          // Reference supertype\n          subtype.$super = this;\n          return subtype;\n        },\n        /**\n         * Extends this object and runs the init method.\n         * Arguments to create() will be passed to init().\n         *\n         * @return {Object} The new object.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var instance = MyType.create();\n         */\n        create: function create() {\n          var instance = this.extend();\n          instance.init.apply(instance, arguments);\n          return instance;\n        },\n        /**\n         * Initializes a newly created object.\n         * Override this method to add some logic when your objects are created.\n         *\n         * @example\n         *\n         *     var MyType = CryptoJS.lib.Base.extend({\n         *         init: function () {\n         *             // ...\n         *         }\n         *     });\n         */\n        init: function init() {},\n        /**\n         * Copies properties into this object.\n         *\n         * @param {Object} properties The properties to mix in.\n         *\n         * @example\n         *\n         *     MyType.mixIn({\n         *         field: 'value'\n         *     });\n         */\n        mixIn: function mixIn(properties) {\n          for (var propertyName in properties) {\n            if (properties.hasOwnProperty(propertyName)) {\n              this[propertyName] = properties[propertyName];\n            }\n          }\n\n          // IE won't copy toString using the loop above\n          if (properties.hasOwnProperty('toString')) {\n            this.toString = properties.toString;\n          }\n        },\n        /**\n         * Creates a copy of this object.\n         *\n         * @return {Object} The clone.\n         *\n         * @example\n         *\n         *     var clone = instance.clone();\n         */\n        clone: function clone() {\n          return this.init.prototype.extend(this);\n        }\n      };\n    }();\n\n    /**\n     * An array of 32-bit words.\n     *\n     * @property {Array} words The array of 32-bit words.\n     * @property {number} sigBytes The number of significant bytes in this word array.\n     */\n    var WordArray = C_lib.WordArray = Base.extend({\n      /**\n       * Initializes a newly created word array.\n       *\n       * @param {Array} words (Optional) An array of 32-bit words.\n       * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.lib.WordArray.create();\n       *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n       *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n       */\n      init: function init(words, sigBytes) {\n        words = this.words = words || [];\n        if (sigBytes != undefined) {\n          this.sigBytes = sigBytes;\n        } else {\n          this.sigBytes = words.length * 4;\n        }\n      },\n      /**\n       * Converts this word array to a string.\n       *\n       * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n       *\n       * @return {string} The stringified word array.\n       *\n       * @example\n       *\n       *     var string = wordArray + '';\n       *     var string = wordArray.toString();\n       *     var string = wordArray.toString(CryptoJS.enc.Utf8);\n       */\n      toString: function toString(encoder) {\n        return (encoder || Hex).stringify(this);\n      },\n      /**\n       * Concatenates a word array to this word array.\n       *\n       * @param {WordArray} wordArray The word array to append.\n       *\n       * @return {WordArray} This word array.\n       *\n       * @example\n       *\n       *     wordArray1.concat(wordArray2);\n       */\n      concat: function concat(wordArray) {\n        // Shortcuts\n        var thisWords = this.words;\n        var thatWords = wordArray.words;\n        var thisSigBytes = this.sigBytes;\n        var thatSigBytes = wordArray.sigBytes;\n\n        // Clamp excess bits\n        this.clamp();\n\n        // Concat\n        if (thisSigBytes % 4) {\n          // Copy one byte at a time\n          for (var i = 0; i < thatSigBytes; i++) {\n            var thatByte = thatWords[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n            thisWords[thisSigBytes + i >>> 2] |= thatByte << 24 - (thisSigBytes + i) % 4 * 8;\n          }\n        } else {\n          // Copy one word at a time\n          for (var j = 0; j < thatSigBytes; j += 4) {\n            thisWords[thisSigBytes + j >>> 2] = thatWords[j >>> 2];\n          }\n        }\n        this.sigBytes += thatSigBytes;\n\n        // Chainable\n        return this;\n      },\n      /**\n       * Removes insignificant bits.\n       *\n       * @example\n       *\n       *     wordArray.clamp();\n       */\n      clamp: function clamp() {\n        // Shortcuts\n        var words = this.words;\n        var sigBytes = this.sigBytes;\n\n        // Clamp\n        words[sigBytes >>> 2] &= 0xffffffff << 32 - sigBytes % 4 * 8;\n        words.length = Math.ceil(sigBytes / 4);\n      },\n      /**\n       * Creates a copy of this word array.\n       *\n       * @return {WordArray} The clone.\n       *\n       * @example\n       *\n       *     var clone = wordArray.clone();\n       */\n      clone: function clone() {\n        var clone = Base.clone.call(this);\n        clone.words = this.words.slice(0);\n        return clone;\n      },\n      /**\n       * Creates a word array filled with random bytes.\n       *\n       * @param {number} nBytes The number of random bytes to generate.\n       *\n       * @return {WordArray} The random word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.lib.WordArray.random(16);\n       */\n      random: function random(nBytes) {\n        var words = [];\n        for (var i = 0; i < nBytes; i += 4) {\n          words.push(cryptoSecureRandomInt());\n        }\n        return new WordArray.init(words, nBytes);\n      }\n    });\n\n    /**\n     * Encoder namespace.\n     */\n    var C_enc = C.enc = {};\n\n    /**\n     * Hex encoding strategy.\n     */\n    var Hex = C_enc.Hex = {\n      /**\n       * Converts a word array to a hex string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @return {string} The hex string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray) {\n        // Shortcuts\n        var words = wordArray.words;\n        var sigBytes = wordArray.sigBytes;\n\n        // Convert\n        var hexChars = [];\n        for (var i = 0; i < sigBytes; i++) {\n          var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n          hexChars.push((bite >>> 4).toString(16));\n          hexChars.push((bite & 0x0f).toString(16));\n        }\n        return hexChars.join('');\n      },\n      /**\n       * Converts a hex string to a word array.\n       *\n       * @param {string} hexStr The hex string.\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Hex.parse(hexString);\n       */\n      parse: function parse(hexStr) {\n        // Shortcut\n        var hexStrLength = hexStr.length;\n\n        // Convert\n        var words = [];\n        for (var i = 0; i < hexStrLength; i += 2) {\n          words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << 24 - i % 8 * 4;\n        }\n        return new WordArray.init(words, hexStrLength / 2);\n      }\n    };\n\n    /**\n     * Latin1 encoding strategy.\n     */\n    var Latin1 = C_enc.Latin1 = {\n      /**\n       * Converts a word array to a Latin1 string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @return {string} The Latin1 string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray) {\n        // Shortcuts\n        var words = wordArray.words;\n        var sigBytes = wordArray.sigBytes;\n\n        // Convert\n        var latin1Chars = [];\n        for (var i = 0; i < sigBytes; i++) {\n          var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n          latin1Chars.push(String.fromCharCode(bite));\n        }\n        return latin1Chars.join('');\n      },\n      /**\n       * Converts a Latin1 string to a word array.\n       *\n       * @param {string} latin1Str The Latin1 string.\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n       */\n      parse: function parse(latin1Str) {\n        // Shortcut\n        var latin1StrLength = latin1Str.length;\n\n        // Convert\n        var words = [];\n        for (var i = 0; i < latin1StrLength; i++) {\n          words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << 24 - i % 4 * 8;\n        }\n        return new WordArray.init(words, latin1StrLength);\n      }\n    };\n\n    /**\n     * UTF-8 encoding strategy.\n     */\n    var Utf8 = C_enc.Utf8 = {\n      /**\n       * Converts a word array to a UTF-8 string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @return {string} The UTF-8 string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray) {\n        try {\n          return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n        } catch (e) {\n          throw new Error('Malformed UTF-8 data');\n        }\n      },\n      /**\n       * Converts a UTF-8 string to a word array.\n       *\n       * @param {string} utf8Str The UTF-8 string.\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n       */\n      parse: function parse(utf8Str) {\n        return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n      }\n    };\n\n    /**\n     * Abstract buffered block algorithm template.\n     *\n     * The property blockSize must be implemented in a concrete subtype.\n     *\n     * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n     */\n    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n      /**\n       * Resets this block algorithm's data buffer to its initial state.\n       *\n       * @example\n       *\n       *     bufferedBlockAlgorithm.reset();\n       */\n      reset: function reset() {\n        // Initial values\n        this._data = new WordArray.init();\n        this._nDataBytes = 0;\n      },\n      /**\n       * Adds new data to this block algorithm's buffer.\n       *\n       * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n       *\n       * @example\n       *\n       *     bufferedBlockAlgorithm._append('data');\n       *     bufferedBlockAlgorithm._append(wordArray);\n       */\n      _append: function _append(data) {\n        // Convert string to WordArray, else assume WordArray already\n        if (typeof data == 'string') {\n          data = Utf8.parse(data);\n        }\n\n        // Append\n        this._data.concat(data);\n        this._nDataBytes += data.sigBytes;\n      },\n      /**\n       * Processes available data blocks.\n       *\n       * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n       *\n       * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n       *\n       * @return {WordArray} The processed data.\n       *\n       * @example\n       *\n       *     var processedData = bufferedBlockAlgorithm._process();\n       *     var processedData = bufferedBlockAlgorithm._process(!!'flush');\n       */\n      _process: function _process(doFlush) {\n        var processedWords;\n\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var dataSigBytes = data.sigBytes;\n        var blockSize = this.blockSize;\n        var blockSizeBytes = blockSize * 4;\n\n        // Count blocks ready\n        var nBlocksReady = dataSigBytes / blockSizeBytes;\n        if (doFlush) {\n          // Round up to include partial blocks\n          nBlocksReady = Math.ceil(nBlocksReady);\n        } else {\n          // Round down to include only full blocks,\n          // less the number of blocks that must remain in the buffer\n          nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n        }\n\n        // Count words ready\n        var nWordsReady = nBlocksReady * blockSize;\n\n        // Count bytes ready\n        var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n        // Process blocks\n        if (nWordsReady) {\n          for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n            // Perform concrete-algorithm logic\n            this._doProcessBlock(dataWords, offset);\n          }\n\n          // Remove processed words\n          processedWords = dataWords.splice(0, nWordsReady);\n          data.sigBytes -= nBytesReady;\n        }\n\n        // Return processed words\n        return new WordArray.init(processedWords, nBytesReady);\n      },\n      /**\n       * Creates a copy of this object.\n       *\n       * @return {Object} The clone.\n       *\n       * @example\n       *\n       *     var clone = bufferedBlockAlgorithm.clone();\n       */\n      clone: function clone() {\n        var clone = Base.clone.call(this);\n        clone._data = this._data.clone();\n        return clone;\n      },\n      _minBufferSize: 0\n    });\n\n    /**\n     * Abstract hasher template.\n     *\n     * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n     */\n    var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n      /**\n       * Configuration options.\n       */\n      cfg: Base.extend(),\n      /**\n       * Initializes a newly created hasher.\n       *\n       * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n       *\n       * @example\n       *\n       *     var hasher = CryptoJS.algo.SHA256.create();\n       */\n      init: function init(cfg) {\n        // Apply config defaults\n        this.cfg = this.cfg.extend(cfg);\n\n        // Set initial values\n        this.reset();\n      },\n      /**\n       * Resets this hasher to its initial state.\n       *\n       * @example\n       *\n       *     hasher.reset();\n       */\n      reset: function reset() {\n        // Reset data buffer\n        BufferedBlockAlgorithm.reset.call(this);\n\n        // Perform concrete-hasher logic\n        this._doReset();\n      },\n      /**\n       * Updates this hasher with a message.\n       *\n       * @param {WordArray|string} messageUpdate The message to append.\n       *\n       * @return {Hasher} This hasher.\n       *\n       * @example\n       *\n       *     hasher.update('message');\n       *     hasher.update(wordArray);\n       */\n      update: function update(messageUpdate) {\n        // Append\n        this._append(messageUpdate);\n\n        // Update the hash\n        this._process();\n\n        // Chainable\n        return this;\n      },\n      /**\n       * Finalizes the hash computation.\n       * Note that the finalize operation is effectively a destructive, read-once operation.\n       *\n       * @param {WordArray|string} messageUpdate (Optional) A final message update.\n       *\n       * @return {WordArray} The hash.\n       *\n       * @example\n       *\n       *     var hash = hasher.finalize();\n       *     var hash = hasher.finalize('message');\n       *     var hash = hasher.finalize(wordArray);\n       */\n      finalize: function finalize(messageUpdate) {\n        // Final message update\n        if (messageUpdate) {\n          this._append(messageUpdate);\n        }\n\n        // Perform concrete-hasher logic\n        var hash = this._doFinalize();\n        return hash;\n      },\n      blockSize: 512 / 32,\n      /**\n       * Creates a shortcut function to a hasher's object interface.\n       *\n       * @param {Hasher} hasher The hasher to create a helper for.\n       *\n       * @return {Function} The shortcut function.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n       */\n      _createHelper: function _createHelper(hasher) {\n        return function (message, cfg) {\n          return new hasher.init(cfg).finalize(message);\n        };\n      },\n      /**\n       * Creates a shortcut function to the HMAC's object interface.\n       *\n       * @param {Hasher} hasher The hasher to use in this HMAC helper.\n       *\n       * @return {Function} The shortcut function.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n       */\n      _createHmacHelper: function _createHmacHelper(hasher) {\n        return function (message, key) {\n          return new C_algo.HMAC.init(hasher, key).finalize(message);\n        };\n      }\n    });\n\n    /**\n     * Algorithm namespace.\n     */\n    var C_algo = C.algo = {};\n    return C;\n  }(Math);\n  return CryptoJS;\n});\n\n/***/ }),\n\n/***/ 7508:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(9600);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var C_enc = C.enc;\n\n    /**\n     * Base64 encoding strategy.\n     */\n    var Base64 = C_enc.Base64 = {\n      /**\n       * Converts a word array to a Base64 string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @return {string} The Base64 string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray) {\n        // Shortcuts\n        var words = wordArray.words;\n        var sigBytes = wordArray.sigBytes;\n        var map = this._map;\n\n        // Clamp excess bits\n        wordArray.clamp();\n\n        // Convert\n        var base64Chars = [];\n        for (var i = 0; i < sigBytes; i += 3) {\n          var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n          var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff;\n          var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff;\n          var triplet = byte1 << 16 | byte2 << 8 | byte3;\n          for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) {\n            base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f));\n          }\n        }\n\n        // Add padding\n        var paddingChar = map.charAt(64);\n        if (paddingChar) {\n          while (base64Chars.length % 4) {\n            base64Chars.push(paddingChar);\n          }\n        }\n        return base64Chars.join('');\n      },\n      /**\n       * Converts a Base64 string to a word array.\n       *\n       * @param {string} base64Str The Base64 string.\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Base64.parse(base64String);\n       */\n      parse: function parse(base64Str) {\n        // Shortcuts\n        var base64StrLength = base64Str.length;\n        var map = this._map;\n        var reverseMap = this._reverseMap;\n        if (!reverseMap) {\n          reverseMap = this._reverseMap = [];\n          for (var j = 0; j < map.length; j++) {\n            reverseMap[map.charCodeAt(j)] = j;\n          }\n        }\n\n        // Ignore padding\n        var paddingChar = map.charAt(64);\n        if (paddingChar) {\n          var paddingIndex = base64Str.indexOf(paddingChar);\n          if (paddingIndex !== -1) {\n            base64StrLength = paddingIndex;\n          }\n        }\n\n        // Convert\n        return parseLoop(base64Str, base64StrLength, reverseMap);\n      },\n      _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n    };\n    function parseLoop(base64Str, base64StrLength, reverseMap) {\n      var words = [];\n      var nBytes = 0;\n      for (var i = 0; i < base64StrLength; i++) {\n        if (i % 4) {\n          var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2;\n          var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2;\n          var bitsCombined = bits1 | bits2;\n          words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8;\n          nBytes++;\n        }\n      }\n      return WordArray.create(words, nBytes);\n    }\n  })();\n  return CryptoJS.enc.Base64;\n});\n\n/***/ }),\n\n/***/ 7590:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(9600);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var C_enc = C.enc;\n\n    /**\n     * Base64url encoding strategy.\n     */\n    var Base64url = C_enc.Base64url = {\n      /**\n       * Converts a word array to a Base64url string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @param {boolean} urlSafe Whether to use url safe\n       *\n       * @return {string} The Base64url string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray, urlSafe) {\n        if (urlSafe === void 0) {\n          urlSafe = true;\n        }\n        // Shortcuts\n        var words = wordArray.words;\n        var sigBytes = wordArray.sigBytes;\n        var map = urlSafe ? this._safe_map : this._map;\n\n        // Clamp excess bits\n        wordArray.clamp();\n\n        // Convert\n        var base64Chars = [];\n        for (var i = 0; i < sigBytes; i += 3) {\n          var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n          var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff;\n          var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff;\n          var triplet = byte1 << 16 | byte2 << 8 | byte3;\n          for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) {\n            base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f));\n          }\n        }\n\n        // Add padding\n        var paddingChar = map.charAt(64);\n        if (paddingChar) {\n          while (base64Chars.length % 4) {\n            base64Chars.push(paddingChar);\n          }\n        }\n        return base64Chars.join('');\n      },\n      /**\n       * Converts a Base64url string to a word array.\n       *\n       * @param {string} base64Str The Base64url string.\n       *\n       * @param {boolean} urlSafe Whether to use url safe\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n       */\n      parse: function parse(base64Str, urlSafe) {\n        if (urlSafe === void 0) {\n          urlSafe = true;\n        }\n        // Shortcuts\n        var base64StrLength = base64Str.length;\n        var map = urlSafe ? this._safe_map : this._map;\n        var reverseMap = this._reverseMap;\n        if (!reverseMap) {\n          reverseMap = this._reverseMap = [];\n          for (var j = 0; j < map.length; j++) {\n            reverseMap[map.charCodeAt(j)] = j;\n          }\n        }\n\n        // Ignore padding\n        var paddingChar = map.charAt(64);\n        if (paddingChar) {\n          var paddingIndex = base64Str.indexOf(paddingChar);\n          if (paddingIndex !== -1) {\n            base64StrLength = paddingIndex;\n          }\n        }\n\n        // Convert\n        return parseLoop(base64Str, base64StrLength, reverseMap);\n      },\n      _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n      _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'\n    };\n    function parseLoop(base64Str, base64StrLength, reverseMap) {\n      var words = [];\n      var nBytes = 0;\n      for (var i = 0; i < base64StrLength; i++) {\n        if (i % 4) {\n          var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2;\n          var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2;\n          var bitsCombined = bits1 | bits2;\n          words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8;\n          nBytes++;\n        }\n      }\n      return WordArray.create(words, nBytes);\n    }\n  })();\n  return CryptoJS.enc.Base64url;\n});\n\n/***/ }),\n\n/***/ 4978:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(9600);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var C_enc = C.enc;\n\n    /**\n     * UTF-16 BE encoding strategy.\n     */\n    var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n      /**\n       * Converts a word array to a UTF-16 BE string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @return {string} The UTF-16 BE string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray) {\n        // Shortcuts\n        var words = wordArray.words;\n        var sigBytes = wordArray.sigBytes;\n\n        // Convert\n        var utf16Chars = [];\n        for (var i = 0; i < sigBytes; i += 2) {\n          var codePoint = words[i >>> 2] >>> 16 - i % 4 * 8 & 0xffff;\n          utf16Chars.push(String.fromCharCode(codePoint));\n        }\n        return utf16Chars.join('');\n      },\n      /**\n       * Converts a UTF-16 BE string to a word array.\n       *\n       * @param {string} utf16Str The UTF-16 BE string.\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n       */\n      parse: function parse(utf16Str) {\n        // Shortcut\n        var utf16StrLength = utf16Str.length;\n\n        // Convert\n        var words = [];\n        for (var i = 0; i < utf16StrLength; i++) {\n          words[i >>> 1] |= utf16Str.charCodeAt(i) << 16 - i % 2 * 16;\n        }\n        return WordArray.create(words, utf16StrLength * 2);\n      }\n    };\n\n    /**\n     * UTF-16 LE encoding strategy.\n     */\n    C_enc.Utf16LE = {\n      /**\n       * Converts a word array to a UTF-16 LE string.\n       *\n       * @param {WordArray} wordArray The word array.\n       *\n       * @return {string} The UTF-16 LE string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n       */\n      stringify: function stringify(wordArray) {\n        // Shortcuts\n        var words = wordArray.words;\n        var sigBytes = wordArray.sigBytes;\n\n        // Convert\n        var utf16Chars = [];\n        for (var i = 0; i < sigBytes; i += 2) {\n          var codePoint = swapEndian(words[i >>> 2] >>> 16 - i % 4 * 8 & 0xffff);\n          utf16Chars.push(String.fromCharCode(codePoint));\n        }\n        return utf16Chars.join('');\n      },\n      /**\n       * Converts a UTF-16 LE string to a word array.\n       *\n       * @param {string} utf16Str The UTF-16 LE string.\n       *\n       * @return {WordArray} The word array.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n       */\n      parse: function parse(utf16Str) {\n        // Shortcut\n        var utf16StrLength = utf16Str.length;\n\n        // Convert\n        var words = [];\n        for (var i = 0; i < utf16StrLength; i++) {\n          words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << 16 - i % 2 * 16);\n        }\n        return WordArray.create(words, utf16StrLength * 2);\n      }\n    };\n    function swapEndian(word) {\n      return word << 8 & 0xff00ff00 | word >>> 8 & 0x00ff00ff;\n    }\n  })();\n  return CryptoJS.enc.Utf16;\n});\n\n/***/ }),\n\n/***/ 3839:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2222);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(9865), __webpack_require__(6727));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var Base = C_lib.Base;\n    var WordArray = C_lib.WordArray;\n    var C_algo = C.algo;\n    var MD5 = C_algo.MD5;\n\n    /**\n     * This key derivation function is meant to conform with EVP_BytesToKey.\n     * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n     */\n    var EvpKDF = C_algo.EvpKDF = Base.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n       * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n       * @property {number} iterations The number of iterations to perform. Default: 1\n       */\n      cfg: Base.extend({\n        keySize: 128 / 32,\n        hasher: MD5,\n        iterations: 1\n      }),\n      /**\n       * Initializes a newly created key derivation function.\n       *\n       * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n       *\n       * @example\n       *\n       *     var kdf = CryptoJS.algo.EvpKDF.create();\n       *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n       *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n       */\n      init: function init(cfg) {\n        this.cfg = this.cfg.extend(cfg);\n      },\n      /**\n       * Derives a key from a password.\n       *\n       * @param {WordArray|string} password The password.\n       * @param {WordArray|string} salt A salt.\n       *\n       * @return {WordArray} The derived key.\n       *\n       * @example\n       *\n       *     var key = kdf.compute(password, salt);\n       */\n      compute: function compute(password, salt) {\n        var block;\n\n        // Shortcut\n        var cfg = this.cfg;\n\n        // Init hasher\n        var hasher = cfg.hasher.create();\n\n        // Initial values\n        var derivedKey = WordArray.create();\n\n        // Shortcuts\n        var derivedKeyWords = derivedKey.words;\n        var keySize = cfg.keySize;\n        var iterations = cfg.iterations;\n\n        // Generate key\n        while (derivedKeyWords.length < keySize) {\n          if (block) {\n            hasher.update(block);\n          }\n          block = hasher.update(password).finalize(salt);\n          hasher.reset();\n\n          // Iterations\n          for (var i = 1; i < iterations; i++) {\n            block = hasher.finalize(block);\n            hasher.reset();\n          }\n          derivedKey.concat(block);\n        }\n        derivedKey.sigBytes = keySize * 4;\n        return derivedKey;\n      }\n    });\n\n    /**\n     * Derives a key from a password.\n     *\n     * @param {WordArray|string} password The password.\n     * @param {WordArray|string} salt A salt.\n     * @param {Object} cfg (Optional) The configuration options to use for this computation.\n     *\n     * @return {WordArray} The derived key.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var key = CryptoJS.EvpKDF(password, salt);\n     *     var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n     *     var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n     */\n    C.EvpKDF = function (password, salt, cfg) {\n      return EvpKDF.create(cfg).compute(password, salt);\n    };\n  })();\n  return CryptoJS.EvpKDF;\n});\n\n/***/ }),\n\n/***/ 8942:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(1539);\n__webpack_require__(9714);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function (undefined) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var CipherParams = C_lib.CipherParams;\n    var C_enc = C.enc;\n    var Hex = C_enc.Hex;\n    var C_format = C.format;\n    var HexFormatter = C_format.Hex = {\n      /**\n       * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n       *\n       * @param {CipherParams} cipherParams The cipher params object.\n       *\n       * @return {string} The hexadecimally encoded string.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n       */\n      stringify: function stringify(cipherParams) {\n        return cipherParams.ciphertext.toString(Hex);\n      },\n      /**\n       * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n       *\n       * @param {string} input The hexadecimally encoded string.\n       *\n       * @return {CipherParams} The cipher params object.\n       *\n       * @static\n       *\n       * @example\n       *\n       *     var cipherParams = CryptoJS.format.Hex.parse(hexString);\n       */\n      parse: function parse(input) {\n        var ciphertext = Hex.parse(input);\n        return CipherParams.create({\n          ciphertext: ciphertext\n        });\n      }\n    };\n  })();\n  return CryptoJS.format.Hex;\n});\n\n/***/ }),\n\n/***/ 6727:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2222);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var Base = C_lib.Base;\n    var C_enc = C.enc;\n    var Utf8 = C_enc.Utf8;\n    var C_algo = C.algo;\n\n    /**\n     * HMAC algorithm.\n     */\n    var HMAC = C_algo.HMAC = Base.extend({\n      /**\n       * Initializes a newly created HMAC.\n       *\n       * @param {Hasher} hasher The hash algorithm to use.\n       * @param {WordArray|string} key The secret key.\n       *\n       * @example\n       *\n       *     var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n       */\n      init: function init(hasher, key) {\n        // Init hasher\n        hasher = this._hasher = new hasher.init();\n\n        // Convert string to WordArray, else assume WordArray already\n        if (typeof key == 'string') {\n          key = Utf8.parse(key);\n        }\n\n        // Shortcuts\n        var hasherBlockSize = hasher.blockSize;\n        var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n        // Allow arbitrary length keys\n        if (key.sigBytes > hasherBlockSizeBytes) {\n          key = hasher.finalize(key);\n        }\n\n        // Clamp excess bits\n        key.clamp();\n\n        // Clone key for inner and outer pads\n        var oKey = this._oKey = key.clone();\n        var iKey = this._iKey = key.clone();\n\n        // Shortcuts\n        var oKeyWords = oKey.words;\n        var iKeyWords = iKey.words;\n\n        // XOR keys with pad constants\n        for (var i = 0; i < hasherBlockSize; i++) {\n          oKeyWords[i] ^= 0x5c5c5c5c;\n          iKeyWords[i] ^= 0x36363636;\n        }\n        oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n        // Set initial values\n        this.reset();\n      },\n      /**\n       * Resets this HMAC to its initial state.\n       *\n       * @example\n       *\n       *     hmacHasher.reset();\n       */\n      reset: function reset() {\n        // Shortcut\n        var hasher = this._hasher;\n\n        // Reset\n        hasher.reset();\n        hasher.update(this._iKey);\n      },\n      /**\n       * Updates this HMAC with a message.\n       *\n       * @param {WordArray|string} messageUpdate The message to append.\n       *\n       * @return {HMAC} This HMAC instance.\n       *\n       * @example\n       *\n       *     hmacHasher.update('message');\n       *     hmacHasher.update(wordArray);\n       */\n      update: function update(messageUpdate) {\n        this._hasher.update(messageUpdate);\n\n        // Chainable\n        return this;\n      },\n      /**\n       * Finalizes the HMAC computation.\n       * Note that the finalize operation is effectively a destructive, read-once operation.\n       *\n       * @param {WordArray|string} messageUpdate (Optional) A final message update.\n       *\n       * @return {WordArray} The HMAC.\n       *\n       * @example\n       *\n       *     var hmac = hmacHasher.finalize();\n       *     var hmac = hmacHasher.finalize('message');\n       *     var hmac = hmacHasher.finalize(wordArray);\n       */\n      finalize: function finalize(messageUpdate) {\n        // Shortcut\n        var hasher = this._hasher;\n\n        // Compute HMAC\n        var innerHash = hasher.finalize(messageUpdate);\n        hasher.reset();\n        var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n        return hmac;\n      }\n    });\n  })();\n});\n\n/***/ }),\n\n/***/ 5153:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(2601), __webpack_require__(1947), __webpack_require__(4978), __webpack_require__(7508), __webpack_require__(7590), __webpack_require__(3440), __webpack_require__(9865), __webpack_require__(8921), __webpack_require__(6876), __webpack_require__(7991), __webpack_require__(8122), __webpack_require__(8342), __webpack_require__(8714), __webpack_require__(6727), __webpack_require__(3486), __webpack_require__(3839), __webpack_require__(1582), __webpack_require__(702), __webpack_require__(2362), __webpack_require__(4412), __webpack_require__(5720), __webpack_require__(3518), __webpack_require__(6362), __webpack_require__(4431), __webpack_require__(8800), __webpack_require__(3992), __webpack_require__(649), __webpack_require__(8942), __webpack_require__(194), __webpack_require__(8437), __webpack_require__(4640), __webpack_require__(5323), __webpack_require__(4363));\n  } else {}\n})(void 0, function (CryptoJS) {\n  return CryptoJS;\n});\n\n/***/ }),\n\n/***/ 1947:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7803);\n__webpack_require__(1539);\n__webpack_require__(6992);\n__webpack_require__(2472);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(7145);\n__webpack_require__(9743);\n__webpack_require__(5109);\n__webpack_require__(8255);\n__webpack_require__(5125);\n__webpack_require__(9135);\n__webpack_require__(4197);\n__webpack_require__(6495);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Check if typed arrays are supported\n    if (typeof ArrayBuffer != 'function') {\n      return;\n    }\n\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n\n    // Reference original init\n    var superInit = WordArray.init;\n\n    // Augment WordArray.init to handle typed arrays\n    var subInit = WordArray.init = function (typedArray) {\n      // Convert buffers to uint8\n      if (typedArray instanceof ArrayBuffer) {\n        typedArray = new Uint8Array(typedArray);\n      }\n\n      // Convert other array views to uint8\n      if (typedArray instanceof Int8Array || typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray || typedArray instanceof Int16Array || typedArray instanceof Uint16Array || typedArray instanceof Int32Array || typedArray instanceof Uint32Array || typedArray instanceof Float32Array || typedArray instanceof Float64Array) {\n        typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n      }\n\n      // Handle Uint8Array\n      if (typedArray instanceof Uint8Array) {\n        // Shortcut\n        var typedArrayByteLength = typedArray.byteLength;\n\n        // Extract bytes\n        var words = [];\n        for (var i = 0; i < typedArrayByteLength; i++) {\n          words[i >>> 2] |= typedArray[i] << 24 - i % 4 * 8;\n        }\n\n        // Initialize this word array\n        superInit.call(this, words, typedArrayByteLength);\n      } else {\n        // Else call normal init\n        superInit.apply(this, arguments);\n      }\n    };\n    subInit.prototype = WordArray;\n  })();\n  return CryptoJS.lib.WordArray;\n});\n\n/***/ }),\n\n/***/ 3440:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function (Math) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var Hasher = C_lib.Hasher;\n    var C_algo = C.algo;\n\n    // Constants table\n    var T = [];\n\n    // Compute constants\n    (function () {\n      for (var i = 0; i < 64; i++) {\n        T[i] = Math.abs(Math.sin(i + 1)) * 0x100000000 | 0;\n      }\n    })();\n\n    /**\n     * MD5 hash algorithm.\n     */\n    var MD5 = C_algo.MD5 = Hasher.extend({\n      _doReset: function _doReset() {\n        this._hash = new WordArray.init([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476]);\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Swap endian\n        for (var i = 0; i < 16; i++) {\n          // Shortcuts\n          var offset_i = offset + i;\n          var M_offset_i = M[offset_i];\n          M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 0x00ff00ff | (M_offset_i << 24 | M_offset_i >>> 8) & 0xff00ff00;\n        }\n\n        // Shortcuts\n        var H = this._hash.words;\n        var M_offset_0 = M[offset + 0];\n        var M_offset_1 = M[offset + 1];\n        var M_offset_2 = M[offset + 2];\n        var M_offset_3 = M[offset + 3];\n        var M_offset_4 = M[offset + 4];\n        var M_offset_5 = M[offset + 5];\n        var M_offset_6 = M[offset + 6];\n        var M_offset_7 = M[offset + 7];\n        var M_offset_8 = M[offset + 8];\n        var M_offset_9 = M[offset + 9];\n        var M_offset_10 = M[offset + 10];\n        var M_offset_11 = M[offset + 11];\n        var M_offset_12 = M[offset + 12];\n        var M_offset_13 = M[offset + 13];\n        var M_offset_14 = M[offset + 14];\n        var M_offset_15 = M[offset + 15];\n\n        // Working varialbes\n        var a = H[0];\n        var b = H[1];\n        var c = H[2];\n        var d = H[3];\n\n        // Computation\n        a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n        d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n        c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n        b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n        a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n        d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n        c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n        b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n        a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n        d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n        c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n        b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n        a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n        d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n        c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n        b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n        a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n        d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n        c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n        b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n        a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n        d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n        c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n        b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n        a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n        d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n        c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n        b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n        a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n        d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n        c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n        b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n        a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n        d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n        c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n        b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n        a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n        d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n        c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n        b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n        a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n        d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n        c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n        b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n        a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n        d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n        c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n        b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n        a = II(a, b, c, d, M_offset_0, 6, T[48]);\n        d = II(d, a, b, c, M_offset_7, 10, T[49]);\n        c = II(c, d, a, b, M_offset_14, 15, T[50]);\n        b = II(b, c, d, a, M_offset_5, 21, T[51]);\n        a = II(a, b, c, d, M_offset_12, 6, T[52]);\n        d = II(d, a, b, c, M_offset_3, 10, T[53]);\n        c = II(c, d, a, b, M_offset_10, 15, T[54]);\n        b = II(b, c, d, a, M_offset_1, 21, T[55]);\n        a = II(a, b, c, d, M_offset_8, 6, T[56]);\n        d = II(d, a, b, c, M_offset_15, 10, T[57]);\n        c = II(c, d, a, b, M_offset_6, 15, T[58]);\n        b = II(b, c, d, a, M_offset_13, 21, T[59]);\n        a = II(a, b, c, d, M_offset_4, 6, T[60]);\n        d = II(d, a, b, c, M_offset_11, 10, T[61]);\n        c = II(c, d, a, b, M_offset_2, 15, T[62]);\n        b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n        // Intermediate hash value\n        H[0] = H[0] + a | 0;\n        H[1] = H[1] + b | 0;\n        H[2] = H[2] + c | 0;\n        H[3] = H[3] + d | 0;\n      },\n      _doFinalize: function _doFinalize() {\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var nBitsTotal = this._nDataBytes * 8;\n        var nBitsLeft = data.sigBytes * 8;\n\n        // Add padding\n        dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n        var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n        var nBitsTotalL = nBitsTotal;\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = (nBitsTotalH << 8 | nBitsTotalH >>> 24) & 0x00ff00ff | (nBitsTotalH << 24 | nBitsTotalH >>> 8) & 0xff00ff00;\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotalL << 8 | nBitsTotalL >>> 24) & 0x00ff00ff | (nBitsTotalL << 24 | nBitsTotalL >>> 8) & 0xff00ff00;\n        data.sigBytes = (dataWords.length + 1) * 4;\n\n        // Hash final blocks\n        this._process();\n\n        // Shortcuts\n        var hash = this._hash;\n        var H = hash.words;\n\n        // Swap endian\n        for (var i = 0; i < 4; i++) {\n          // Shortcut\n          var H_i = H[i];\n          H[i] = (H_i << 8 | H_i >>> 24) & 0x00ff00ff | (H_i << 24 | H_i >>> 8) & 0xff00ff00;\n        }\n\n        // Return final computed hash\n        return hash;\n      },\n      clone: function clone() {\n        var clone = Hasher.clone.call(this);\n        clone._hash = this._hash.clone();\n        return clone;\n      }\n    });\n    function FF(a, b, c, d, x, s, t) {\n      var n = a + (b & c | ~b & d) + x + t;\n      return (n << s | n >>> 32 - s) + b;\n    }\n    function GG(a, b, c, d, x, s, t) {\n      var n = a + (b & d | c & ~d) + x + t;\n      return (n << s | n >>> 32 - s) + b;\n    }\n    function HH(a, b, c, d, x, s, t) {\n      var n = a + (b ^ c ^ d) + x + t;\n      return (n << s | n >>> 32 - s) + b;\n    }\n    function II(a, b, c, d, x, s, t) {\n      var n = a + (c ^ (b | ~d)) + x + t;\n      return (n << s | n >>> 32 - s) + b;\n    }\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.MD5('message');\n     *     var hash = CryptoJS.MD5(wordArray);\n     */\n    C.MD5 = Hasher._createHelper(MD5);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacMD5(message, key);\n     */\n    C.HmacMD5 = Hasher._createHmacHelper(MD5);\n  })(Math);\n  return CryptoJS.MD5;\n});\n\n/***/ }),\n\n/***/ 702:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * Cipher Feedback block mode.\n   */\n  CryptoJS.mode.CFB = function () {\n    var CFB = CryptoJS.lib.BlockCipherMode.extend();\n    CFB.Encryptor = CFB.extend({\n      processBlock: function processBlock(words, offset) {\n        // Shortcuts\n        var cipher = this._cipher;\n        var blockSize = cipher.blockSize;\n        generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n        // Remember this block to use with next block\n        this._prevBlock = words.slice(offset, offset + blockSize);\n      }\n    });\n    CFB.Decryptor = CFB.extend({\n      processBlock: function processBlock(words, offset) {\n        // Shortcuts\n        var cipher = this._cipher;\n        var blockSize = cipher.blockSize;\n\n        // Remember this block to use with next block\n        var thisBlock = words.slice(offset, offset + blockSize);\n        generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n        // This block becomes the previous block\n        this._prevBlock = thisBlock;\n      }\n    });\n    function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n      var keystream;\n\n      // Shortcut\n      var iv = this._iv;\n\n      // Generate keystream\n      if (iv) {\n        keystream = iv.slice(0);\n\n        // Remove IV for subsequent blocks\n        this._iv = undefined;\n      } else {\n        keystream = this._prevBlock;\n      }\n      cipher.encryptBlock(keystream, 0);\n\n      // Encrypt\n      for (var i = 0; i < blockSize; i++) {\n        words[offset + i] ^= keystream[i];\n      }\n    }\n    return CFB;\n  }();\n  return CryptoJS.mode.CFB;\n});\n\n/***/ }),\n\n/***/ 4412:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /** @preserve\n   * Counter block mode compatible with  Dr Brian Gladman fileenc.c\n   * derived from CryptoJS.mode.CTR\n   * Jan Hruby jhruby.web@gmail.com\n   */\n  CryptoJS.mode.CTRGladman = function () {\n    var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n    function incWord(word) {\n      if ((word >> 24 & 0xff) === 0xff) {\n        //overflow\n        var b1 = word >> 16 & 0xff;\n        var b2 = word >> 8 & 0xff;\n        var b3 = word & 0xff;\n        if (b1 === 0xff)\n          // overflow b1\n          {\n            b1 = 0;\n            if (b2 === 0xff) {\n              b2 = 0;\n              if (b3 === 0xff) {\n                b3 = 0;\n              } else {\n                ++b3;\n              }\n            } else {\n              ++b2;\n            }\n          } else {\n          ++b1;\n        }\n        word = 0;\n        word += b1 << 16;\n        word += b2 << 8;\n        word += b3;\n      } else {\n        word += 0x01 << 24;\n      }\n      return word;\n    }\n    function incCounter(counter) {\n      if ((counter[0] = incWord(counter[0])) === 0) {\n        // encr_data in fileenc.c from  Dr Brian Gladman's counts only with DWORD j < 8\n        counter[1] = incWord(counter[1]);\n      }\n      return counter;\n    }\n    var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n      processBlock: function processBlock(words, offset) {\n        // Shortcuts\n        var cipher = this._cipher;\n        var blockSize = cipher.blockSize;\n        var iv = this._iv;\n        var counter = this._counter;\n\n        // Generate keystream\n        if (iv) {\n          counter = this._counter = iv.slice(0);\n\n          // Remove IV for subsequent blocks\n          this._iv = undefined;\n        }\n        incCounter(counter);\n        var keystream = counter.slice(0);\n        cipher.encryptBlock(keystream, 0);\n\n        // Encrypt\n        for (var i = 0; i < blockSize; i++) {\n          words[offset + i] ^= keystream[i];\n        }\n      }\n    });\n    CTRGladman.Decryptor = Encryptor;\n    return CTRGladman;\n  }();\n  return CryptoJS.mode.CTRGladman;\n});\n\n/***/ }),\n\n/***/ 2362:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * Counter block mode.\n   */\n  CryptoJS.mode.CTR = function () {\n    var CTR = CryptoJS.lib.BlockCipherMode.extend();\n    var Encryptor = CTR.Encryptor = CTR.extend({\n      processBlock: function processBlock(words, offset) {\n        // Shortcuts\n        var cipher = this._cipher;\n        var blockSize = cipher.blockSize;\n        var iv = this._iv;\n        var counter = this._counter;\n\n        // Generate keystream\n        if (iv) {\n          counter = this._counter = iv.slice(0);\n\n          // Remove IV for subsequent blocks\n          this._iv = undefined;\n        }\n        var keystream = counter.slice(0);\n        cipher.encryptBlock(keystream, 0);\n\n        // Increment counter\n        counter[blockSize - 1] = counter[blockSize - 1] + 1 | 0;\n\n        // Encrypt\n        for (var i = 0; i < blockSize; i++) {\n          words[offset + i] ^= keystream[i];\n        }\n      }\n    });\n    CTR.Decryptor = Encryptor;\n    return CTR;\n  }();\n  return CryptoJS.mode.CTR;\n});\n\n/***/ }),\n\n/***/ 3518:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * Electronic Codebook block mode.\n   */\n  CryptoJS.mode.ECB = function () {\n    var ECB = CryptoJS.lib.BlockCipherMode.extend();\n    ECB.Encryptor = ECB.extend({\n      processBlock: function processBlock(words, offset) {\n        this._cipher.encryptBlock(words, offset);\n      }\n    });\n    ECB.Decryptor = ECB.extend({\n      processBlock: function processBlock(words, offset) {\n        this._cipher.decryptBlock(words, offset);\n      }\n    });\n    return ECB;\n  }();\n  return CryptoJS.mode.ECB;\n});\n\n/***/ }),\n\n/***/ 5720:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * Output Feedback block mode.\n   */\n  CryptoJS.mode.OFB = function () {\n    var OFB = CryptoJS.lib.BlockCipherMode.extend();\n    var Encryptor = OFB.Encryptor = OFB.extend({\n      processBlock: function processBlock(words, offset) {\n        // Shortcuts\n        var cipher = this._cipher;\n        var blockSize = cipher.blockSize;\n        var iv = this._iv;\n        var keystream = this._keystream;\n\n        // Generate keystream\n        if (iv) {\n          keystream = this._keystream = iv.slice(0);\n\n          // Remove IV for subsequent blocks\n          this._iv = undefined;\n        }\n        cipher.encryptBlock(keystream, 0);\n\n        // Encrypt\n        for (var i = 0; i < blockSize; i++) {\n          words[offset + i] ^= keystream[i];\n        }\n      }\n    });\n    OFB.Decryptor = Encryptor;\n    return OFB;\n  }();\n  return CryptoJS.mode.OFB;\n});\n\n/***/ }),\n\n/***/ 6362:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * ANSI X.923 padding strategy.\n   */\n  CryptoJS.pad.AnsiX923 = {\n    pad: function pad(data, blockSize) {\n      // Shortcuts\n      var dataSigBytes = data.sigBytes;\n      var blockSizeBytes = blockSize * 4;\n\n      // Count padding bytes\n      var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n      // Compute last byte position\n      var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n      // Pad\n      data.clamp();\n      data.words[lastBytePos >>> 2] |= nPaddingBytes << 24 - lastBytePos % 4 * 8;\n      data.sigBytes += nPaddingBytes;\n    },\n    unpad: function unpad(data) {\n      // Get number of padding bytes from last byte\n      var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n      // Remove padding\n      data.sigBytes -= nPaddingBytes;\n    }\n  };\n  return CryptoJS.pad.Ansix923;\n});\n\n/***/ }),\n\n/***/ 4431:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2222);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * ISO 10126 padding strategy.\n   */\n  CryptoJS.pad.Iso10126 = {\n    pad: function pad(data, blockSize) {\n      // Shortcut\n      var blockSizeBytes = blockSize * 4;\n\n      // Count padding bytes\n      var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n      // Pad\n      data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n    },\n    unpad: function unpad(data) {\n      // Get number of padding bytes from last byte\n      var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 0xff;\n\n      // Remove padding\n      data.sigBytes -= nPaddingBytes;\n    }\n  };\n  return CryptoJS.pad.Iso10126;\n});\n\n/***/ }),\n\n/***/ 8800:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2222);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * ISO/IEC 9797-1 Padding Method 2.\n   */\n  CryptoJS.pad.Iso97971 = {\n    pad: function pad(data, blockSize) {\n      // Add 0x80 byte\n      data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n      // Zero pad the rest\n      CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n    },\n    unpad: function unpad(data) {\n      // Remove zero padding\n      CryptoJS.pad.ZeroPadding.unpad(data);\n\n      // Remove one more byte -- the 0x80 byte\n      data.sigBytes--;\n    }\n  };\n  return CryptoJS.pad.Iso97971;\n});\n\n/***/ }),\n\n/***/ 649:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * A noop padding strategy.\n   */\n  CryptoJS.pad.NoPadding = {\n    pad: function pad() {},\n    unpad: function unpad() {}\n  };\n  return CryptoJS.pad.NoPadding;\n});\n\n/***/ }),\n\n/***/ 3992:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /**\n   * Zero padding strategy.\n   */\n  CryptoJS.pad.ZeroPadding = {\n    pad: function pad(data, blockSize) {\n      // Shortcut\n      var blockSizeBytes = blockSize * 4;\n\n      // Pad\n      data.clamp();\n      data.sigBytes += blockSizeBytes - (data.sigBytes % blockSizeBytes || blockSizeBytes);\n    },\n    unpad: function unpad(data) {\n      // Shortcut\n      var dataWords = data.words;\n\n      // Unpad\n      var i = data.sigBytes - 1;\n      for (var i = data.sigBytes - 1; i >= 0; i--) {\n        if (dataWords[i >>> 2] >>> 24 - i % 4 * 8 & 0xff) {\n          data.sigBytes = i + 1;\n          break;\n        }\n      }\n    }\n  };\n  return CryptoJS.pad.ZeroPadding;\n});\n\n/***/ }),\n\n/***/ 3486:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2222);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(9865), __webpack_require__(6727));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var Base = C_lib.Base;\n    var WordArray = C_lib.WordArray;\n    var C_algo = C.algo;\n    var SHA1 = C_algo.SHA1;\n    var HMAC = C_algo.HMAC;\n\n    /**\n     * Password-Based Key Derivation Function 2 algorithm.\n     */\n    var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n       * @property {Hasher} hasher The hasher to use. Default: SHA1\n       * @property {number} iterations The number of iterations to perform. Default: 1\n       */\n      cfg: Base.extend({\n        keySize: 128 / 32,\n        hasher: SHA1,\n        iterations: 1\n      }),\n      /**\n       * Initializes a newly created key derivation function.\n       *\n       * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n       *\n       * @example\n       *\n       *     var kdf = CryptoJS.algo.PBKDF2.create();\n       *     var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n       *     var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n       */\n      init: function init(cfg) {\n        this.cfg = this.cfg.extend(cfg);\n      },\n      /**\n       * Computes the Password-Based Key Derivation Function 2.\n       *\n       * @param {WordArray|string} password The password.\n       * @param {WordArray|string} salt A salt.\n       *\n       * @return {WordArray} The derived key.\n       *\n       * @example\n       *\n       *     var key = kdf.compute(password, salt);\n       */\n      compute: function compute(password, salt) {\n        // Shortcut\n        var cfg = this.cfg;\n\n        // Init HMAC\n        var hmac = HMAC.create(cfg.hasher, password);\n\n        // Initial values\n        var derivedKey = WordArray.create();\n        var blockIndex = WordArray.create([0x00000001]);\n\n        // Shortcuts\n        var derivedKeyWords = derivedKey.words;\n        var blockIndexWords = blockIndex.words;\n        var keySize = cfg.keySize;\n        var iterations = cfg.iterations;\n\n        // Generate key\n        while (derivedKeyWords.length < keySize) {\n          var block = hmac.update(salt).finalize(blockIndex);\n          hmac.reset();\n\n          // Shortcuts\n          var blockWords = block.words;\n          var blockWordsLength = blockWords.length;\n\n          // Iterations\n          var intermediate = block;\n          for (var i = 1; i < iterations; i++) {\n            intermediate = hmac.finalize(intermediate);\n            hmac.reset();\n\n            // Shortcut\n            var intermediateWords = intermediate.words;\n\n            // XOR intermediate with block\n            for (var j = 0; j < blockWordsLength; j++) {\n              blockWords[j] ^= intermediateWords[j];\n            }\n          }\n          derivedKey.concat(block);\n          blockIndexWords[0]++;\n        }\n        derivedKey.sigBytes = keySize * 4;\n        return derivedKey;\n      }\n    });\n\n    /**\n     * Computes the Password-Based Key Derivation Function 2.\n     *\n     * @param {WordArray|string} password The password.\n     * @param {WordArray|string} salt A salt.\n     * @param {Object} cfg (Optional) The configuration options to use for this computation.\n     *\n     * @return {WordArray} The derived key.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var key = CryptoJS.PBKDF2(password, salt);\n     *     var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n     *     var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n     */\n    C.PBKDF2 = function (password, salt, cfg) {\n      return PBKDF2.create(cfg).compute(password, salt);\n    };\n  })();\n  return CryptoJS.PBKDF2;\n});\n\n/***/ }),\n\n/***/ 4363:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(7508), __webpack_require__(3440), __webpack_require__(3839), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var StreamCipher = C_lib.StreamCipher;\n    var C_algo = C.algo;\n\n    // Reusable objects\n    var S = [];\n    var C_ = [];\n    var G = [];\n\n    /**\n     * Rabbit stream cipher algorithm.\n     *\n     * This is a legacy version that neglected to convert the key to little-endian.\n     * This error doesn't affect the cipher's security,\n     * but it does affect its compatibility with other implementations.\n     */\n    var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n      _doReset: function _doReset() {\n        // Shortcuts\n        var K = this._key.words;\n        var iv = this.cfg.iv;\n\n        // Generate initial state values\n        var X = this._X = [K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16];\n\n        // Generate initial counter values\n        var C = this._C = [K[2] << 16 | K[2] >>> 16, K[0] & 0xffff0000 | K[1] & 0x0000ffff, K[3] << 16 | K[3] >>> 16, K[1] & 0xffff0000 | K[2] & 0x0000ffff, K[0] << 16 | K[0] >>> 16, K[2] & 0xffff0000 | K[3] & 0x0000ffff, K[1] << 16 | K[1] >>> 16, K[3] & 0xffff0000 | K[0] & 0x0000ffff];\n\n        // Carry bit\n        this._b = 0;\n\n        // Iterate the system four times\n        for (var i = 0; i < 4; i++) {\n          nextState.call(this);\n        }\n\n        // Modify the counters\n        for (var i = 0; i < 8; i++) {\n          C[i] ^= X[i + 4 & 7];\n        }\n\n        // IV setup\n        if (iv) {\n          // Shortcuts\n          var IV = iv.words;\n          var IV_0 = IV[0];\n          var IV_1 = IV[1];\n\n          // Generate four subvectors\n          var i0 = (IV_0 << 8 | IV_0 >>> 24) & 0x00ff00ff | (IV_0 << 24 | IV_0 >>> 8) & 0xff00ff00;\n          var i2 = (IV_1 << 8 | IV_1 >>> 24) & 0x00ff00ff | (IV_1 << 24 | IV_1 >>> 8) & 0xff00ff00;\n          var i1 = i0 >>> 16 | i2 & 0xffff0000;\n          var i3 = i2 << 16 | i0 & 0x0000ffff;\n\n          // Modify counter values\n          C[0] ^= i0;\n          C[1] ^= i1;\n          C[2] ^= i2;\n          C[3] ^= i3;\n          C[4] ^= i0;\n          C[5] ^= i1;\n          C[6] ^= i2;\n          C[7] ^= i3;\n\n          // Iterate the system four times\n          for (var i = 0; i < 4; i++) {\n            nextState.call(this);\n          }\n        }\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Shortcut\n        var X = this._X;\n\n        // Iterate the system\n        nextState.call(this);\n\n        // Generate four keystream words\n        S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16;\n        S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16;\n        S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16;\n        S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16;\n        for (var i = 0; i < 4; i++) {\n          // Swap endian\n          S[i] = (S[i] << 8 | S[i] >>> 24) & 0x00ff00ff | (S[i] << 24 | S[i] >>> 8) & 0xff00ff00;\n\n          // Encrypt\n          M[offset + i] ^= S[i];\n        }\n      },\n      blockSize: 128 / 32,\n      ivSize: 64 / 32\n    });\n    function nextState() {\n      // Shortcuts\n      var X = this._X;\n      var C = this._C;\n\n      // Save old counter values\n      for (var i = 0; i < 8; i++) {\n        C_[i] = C[i];\n      }\n\n      // Calculate new counter values\n      C[0] = C[0] + 0x4d34d34d + this._b | 0;\n      C[1] = C[1] + 0xd34d34d3 + (C[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0;\n      C[2] = C[2] + 0x34d34d34 + (C[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0;\n      C[3] = C[3] + 0x4d34d34d + (C[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0;\n      C[4] = C[4] + 0xd34d34d3 + (C[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0;\n      C[5] = C[5] + 0x34d34d34 + (C[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0;\n      C[6] = C[6] + 0x4d34d34d + (C[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0;\n      C[7] = C[7] + 0xd34d34d3 + (C[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0;\n      this._b = C[7] >>> 0 < C_[7] >>> 0 ? 1 : 0;\n\n      // Calculate the g-values\n      for (var i = 0; i < 8; i++) {\n        var gx = X[i] + C[i];\n\n        // Construct high and low argument for squaring\n        var ga = gx & 0xffff;\n        var gb = gx >>> 16;\n\n        // Calculate high and low result of squaring\n        var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb;\n        var gl = ((gx & 0xffff0000) * gx | 0) + ((gx & 0x0000ffff) * gx | 0);\n\n        // High XOR low\n        G[i] = gh ^ gl;\n      }\n\n      // Calculate new state values\n      X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0;\n      X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0;\n      X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0;\n      X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0;\n      X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0;\n      X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0;\n      X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0;\n      X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0;\n    }\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n     */\n    C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n  })();\n  return CryptoJS.RabbitLegacy;\n});\n\n/***/ }),\n\n/***/ 5323:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(7508), __webpack_require__(3440), __webpack_require__(3839), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var StreamCipher = C_lib.StreamCipher;\n    var C_algo = C.algo;\n\n    // Reusable objects\n    var S = [];\n    var C_ = [];\n    var G = [];\n\n    /**\n     * Rabbit stream cipher algorithm\n     */\n    var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n      _doReset: function _doReset() {\n        // Shortcuts\n        var K = this._key.words;\n        var iv = this.cfg.iv;\n\n        // Swap endian\n        for (var i = 0; i < 4; i++) {\n          K[i] = (K[i] << 8 | K[i] >>> 24) & 0x00ff00ff | (K[i] << 24 | K[i] >>> 8) & 0xff00ff00;\n        }\n\n        // Generate initial state values\n        var X = this._X = [K[0], K[3] << 16 | K[2] >>> 16, K[1], K[0] << 16 | K[3] >>> 16, K[2], K[1] << 16 | K[0] >>> 16, K[3], K[2] << 16 | K[1] >>> 16];\n\n        // Generate initial counter values\n        var C = this._C = [K[2] << 16 | K[2] >>> 16, K[0] & 0xffff0000 | K[1] & 0x0000ffff, K[3] << 16 | K[3] >>> 16, K[1] & 0xffff0000 | K[2] & 0x0000ffff, K[0] << 16 | K[0] >>> 16, K[2] & 0xffff0000 | K[3] & 0x0000ffff, K[1] << 16 | K[1] >>> 16, K[3] & 0xffff0000 | K[0] & 0x0000ffff];\n\n        // Carry bit\n        this._b = 0;\n\n        // Iterate the system four times\n        for (var i = 0; i < 4; i++) {\n          nextState.call(this);\n        }\n\n        // Modify the counters\n        for (var i = 0; i < 8; i++) {\n          C[i] ^= X[i + 4 & 7];\n        }\n\n        // IV setup\n        if (iv) {\n          // Shortcuts\n          var IV = iv.words;\n          var IV_0 = IV[0];\n          var IV_1 = IV[1];\n\n          // Generate four subvectors\n          var i0 = (IV_0 << 8 | IV_0 >>> 24) & 0x00ff00ff | (IV_0 << 24 | IV_0 >>> 8) & 0xff00ff00;\n          var i2 = (IV_1 << 8 | IV_1 >>> 24) & 0x00ff00ff | (IV_1 << 24 | IV_1 >>> 8) & 0xff00ff00;\n          var i1 = i0 >>> 16 | i2 & 0xffff0000;\n          var i3 = i2 << 16 | i0 & 0x0000ffff;\n\n          // Modify counter values\n          C[0] ^= i0;\n          C[1] ^= i1;\n          C[2] ^= i2;\n          C[3] ^= i3;\n          C[4] ^= i0;\n          C[5] ^= i1;\n          C[6] ^= i2;\n          C[7] ^= i3;\n\n          // Iterate the system four times\n          for (var i = 0; i < 4; i++) {\n            nextState.call(this);\n          }\n        }\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Shortcut\n        var X = this._X;\n\n        // Iterate the system\n        nextState.call(this);\n\n        // Generate four keystream words\n        S[0] = X[0] ^ X[5] >>> 16 ^ X[3] << 16;\n        S[1] = X[2] ^ X[7] >>> 16 ^ X[5] << 16;\n        S[2] = X[4] ^ X[1] >>> 16 ^ X[7] << 16;\n        S[3] = X[6] ^ X[3] >>> 16 ^ X[1] << 16;\n        for (var i = 0; i < 4; i++) {\n          // Swap endian\n          S[i] = (S[i] << 8 | S[i] >>> 24) & 0x00ff00ff | (S[i] << 24 | S[i] >>> 8) & 0xff00ff00;\n\n          // Encrypt\n          M[offset + i] ^= S[i];\n        }\n      },\n      blockSize: 128 / 32,\n      ivSize: 64 / 32\n    });\n    function nextState() {\n      // Shortcuts\n      var X = this._X;\n      var C = this._C;\n\n      // Save old counter values\n      for (var i = 0; i < 8; i++) {\n        C_[i] = C[i];\n      }\n\n      // Calculate new counter values\n      C[0] = C[0] + 0x4d34d34d + this._b | 0;\n      C[1] = C[1] + 0xd34d34d3 + (C[0] >>> 0 < C_[0] >>> 0 ? 1 : 0) | 0;\n      C[2] = C[2] + 0x34d34d34 + (C[1] >>> 0 < C_[1] >>> 0 ? 1 : 0) | 0;\n      C[3] = C[3] + 0x4d34d34d + (C[2] >>> 0 < C_[2] >>> 0 ? 1 : 0) | 0;\n      C[4] = C[4] + 0xd34d34d3 + (C[3] >>> 0 < C_[3] >>> 0 ? 1 : 0) | 0;\n      C[5] = C[5] + 0x34d34d34 + (C[4] >>> 0 < C_[4] >>> 0 ? 1 : 0) | 0;\n      C[6] = C[6] + 0x4d34d34d + (C[5] >>> 0 < C_[5] >>> 0 ? 1 : 0) | 0;\n      C[7] = C[7] + 0xd34d34d3 + (C[6] >>> 0 < C_[6] >>> 0 ? 1 : 0) | 0;\n      this._b = C[7] >>> 0 < C_[7] >>> 0 ? 1 : 0;\n\n      // Calculate the g-values\n      for (var i = 0; i < 8; i++) {\n        var gx = X[i] + C[i];\n\n        // Construct high and low argument for squaring\n        var ga = gx & 0xffff;\n        var gb = gx >>> 16;\n\n        // Calculate high and low result of squaring\n        var gh = ((ga * ga >>> 17) + ga * gb >>> 15) + gb * gb;\n        var gl = ((gx & 0xffff0000) * gx | 0) + ((gx & 0x0000ffff) * gx | 0);\n\n        // High XOR low\n        G[i] = gh ^ gl;\n      }\n\n      // Calculate new state values\n      X[0] = G[0] + (G[7] << 16 | G[7] >>> 16) + (G[6] << 16 | G[6] >>> 16) | 0;\n      X[1] = G[1] + (G[0] << 8 | G[0] >>> 24) + G[7] | 0;\n      X[2] = G[2] + (G[1] << 16 | G[1] >>> 16) + (G[0] << 16 | G[0] >>> 16) | 0;\n      X[3] = G[3] + (G[2] << 8 | G[2] >>> 24) + G[1] | 0;\n      X[4] = G[4] + (G[3] << 16 | G[3] >>> 16) + (G[2] << 16 | G[2] >>> 16) | 0;\n      X[5] = G[5] + (G[4] << 8 | G[4] >>> 24) + G[3] | 0;\n      X[6] = G[6] + (G[5] << 16 | G[5] >>> 16) + (G[4] << 16 | G[4] >>> 16) | 0;\n      X[7] = G[7] + (G[6] << 8 | G[6] >>> 24) + G[5] | 0;\n    }\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n     */\n    C.Rabbit = StreamCipher._createHelper(Rabbit);\n  })();\n  return CryptoJS.Rabbit;\n});\n\n/***/ }),\n\n/***/ 4640:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(1539);\n__webpack_require__(8674);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(7508), __webpack_require__(3440), __webpack_require__(3839), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var StreamCipher = C_lib.StreamCipher;\n    var C_algo = C.algo;\n\n    /**\n     * RC4 stream cipher algorithm.\n     */\n    var RC4 = C_algo.RC4 = StreamCipher.extend({\n      _doReset: function _doReset() {\n        // Shortcuts\n        var key = this._key;\n        var keyWords = key.words;\n        var keySigBytes = key.sigBytes;\n\n        // Init sbox\n        var S = this._S = [];\n        for (var i = 0; i < 256; i++) {\n          S[i] = i;\n        }\n\n        // Key setup\n        for (var i = 0, j = 0; i < 256; i++) {\n          var keyByteIndex = i % keySigBytes;\n          var keyByte = keyWords[keyByteIndex >>> 2] >>> 24 - keyByteIndex % 4 * 8 & 0xff;\n          j = (j + S[i] + keyByte) % 256;\n\n          // Swap\n          var t = S[i];\n          S[i] = S[j];\n          S[j] = t;\n        }\n\n        // Counters\n        this._i = this._j = 0;\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        M[offset] ^= generateKeystreamWord.call(this);\n      },\n      keySize: 256 / 32,\n      ivSize: 0\n    });\n    function generateKeystreamWord() {\n      // Shortcuts\n      var S = this._S;\n      var i = this._i;\n      var j = this._j;\n\n      // Generate keystream word\n      var keystreamWord = 0;\n      for (var n = 0; n < 4; n++) {\n        i = (i + 1) % 256;\n        j = (j + S[i]) % 256;\n\n        // Swap\n        var t = S[i];\n        S[i] = S[j];\n        S[j] = t;\n        keystreamWord |= S[(S[i] + S[j]) % 256] << 24 - n * 8;\n      }\n\n      // Update counters\n      this._i = i;\n      this._j = j;\n      return keystreamWord;\n    }\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n     */\n    C.RC4 = StreamCipher._createHelper(RC4);\n\n    /**\n     * Modified RC4 stream cipher algorithm.\n     */\n    var RC4Drop = C_algo.RC4Drop = RC4.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {number} drop The number of keystream words to drop. Default 192\n       */\n      cfg: RC4.cfg.extend({\n        drop: 192\n      }),\n      _doReset: function _doReset() {\n        RC4._doReset.call(this);\n\n        // Drop\n        for (var i = this.cfg.drop; i > 0; i--) {\n          generateKeystreamWord.call(this);\n        }\n      }\n    });\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n     */\n    C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n  })();\n  return CryptoJS.RC4;\n});\n\n/***/ }),\n\n/***/ 8714:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  /** @preserve\n  (c) 2012 by Cédric Mesnil. All rights reserved.\n  \tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n  \t    - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n      - 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.\n  \tTHIS 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.\n  */\n\n  (function (Math) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var Hasher = C_lib.Hasher;\n    var C_algo = C.algo;\n\n    // Constants table\n    var _zl = WordArray.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n    var _zr = WordArray.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n    var _sl = WordArray.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]);\n    var _sr = WordArray.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]);\n    var _hl = WordArray.create([0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n    var _hr = WordArray.create([0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n    /**\n     * RIPEMD160 hash algorithm.\n     */\n    var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n      _doReset: function _doReset() {\n        this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Swap endian\n        for (var i = 0; i < 16; i++) {\n          // Shortcuts\n          var offset_i = offset + i;\n          var M_offset_i = M[offset_i];\n\n          // Swap\n          M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 0x00ff00ff | (M_offset_i << 24 | M_offset_i >>> 8) & 0xff00ff00;\n        }\n        // Shortcut\n        var H = this._hash.words;\n        var hl = _hl.words;\n        var hr = _hr.words;\n        var zl = _zl.words;\n        var zr = _zr.words;\n        var sl = _sl.words;\n        var sr = _sr.words;\n\n        // Working variables\n        var al, bl, cl, dl, el;\n        var ar, br, cr, dr, er;\n        ar = al = H[0];\n        br = bl = H[1];\n        cr = cl = H[2];\n        dr = dl = H[3];\n        er = el = H[4];\n        // Computation\n        var t;\n        for (var i = 0; i < 80; i += 1) {\n          t = al + M[offset + zl[i]] | 0;\n          if (i < 16) {\n            t += f1(bl, cl, dl) + hl[0];\n          } else if (i < 32) {\n            t += f2(bl, cl, dl) + hl[1];\n          } else if (i < 48) {\n            t += f3(bl, cl, dl) + hl[2];\n          } else if (i < 64) {\n            t += f4(bl, cl, dl) + hl[3];\n          } else {\n            // if (i<80) {\n            t += f5(bl, cl, dl) + hl[4];\n          }\n          t = t | 0;\n          t = rotl(t, sl[i]);\n          t = t + el | 0;\n          al = el;\n          el = dl;\n          dl = rotl(cl, 10);\n          cl = bl;\n          bl = t;\n          t = ar + M[offset + zr[i]] | 0;\n          if (i < 16) {\n            t += f5(br, cr, dr) + hr[0];\n          } else if (i < 32) {\n            t += f4(br, cr, dr) + hr[1];\n          } else if (i < 48) {\n            t += f3(br, cr, dr) + hr[2];\n          } else if (i < 64) {\n            t += f2(br, cr, dr) + hr[3];\n          } else {\n            // if (i<80) {\n            t += f1(br, cr, dr) + hr[4];\n          }\n          t = t | 0;\n          t = rotl(t, sr[i]);\n          t = t + er | 0;\n          ar = er;\n          er = dr;\n          dr = rotl(cr, 10);\n          cr = br;\n          br = t;\n        }\n        // Intermediate hash value\n        t = H[1] + cl + dr | 0;\n        H[1] = H[2] + dl + er | 0;\n        H[2] = H[3] + el + ar | 0;\n        H[3] = H[4] + al + br | 0;\n        H[4] = H[0] + bl + cr | 0;\n        H[0] = t;\n      },\n      _doFinalize: function _doFinalize() {\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var nBitsTotal = this._nDataBytes * 8;\n        var nBitsLeft = data.sigBytes * 8;\n\n        // Add padding\n        dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotal << 8 | nBitsTotal >>> 24) & 0x00ff00ff | (nBitsTotal << 24 | nBitsTotal >>> 8) & 0xff00ff00;\n        data.sigBytes = (dataWords.length + 1) * 4;\n\n        // Hash final blocks\n        this._process();\n\n        // Shortcuts\n        var hash = this._hash;\n        var H = hash.words;\n\n        // Swap endian\n        for (var i = 0; i < 5; i++) {\n          // Shortcut\n          var H_i = H[i];\n\n          // Swap\n          H[i] = (H_i << 8 | H_i >>> 24) & 0x00ff00ff | (H_i << 24 | H_i >>> 8) & 0xff00ff00;\n        }\n\n        // Return final computed hash\n        return hash;\n      },\n      clone: function clone() {\n        var clone = Hasher.clone.call(this);\n        clone._hash = this._hash.clone();\n        return clone;\n      }\n    });\n    function f1(x, y, z) {\n      return x ^ y ^ z;\n    }\n    function f2(x, y, z) {\n      return x & y | ~x & z;\n    }\n    function f3(x, y, z) {\n      return (x | ~y) ^ z;\n    }\n    function f4(x, y, z) {\n      return x & z | y & ~z;\n    }\n    function f5(x, y, z) {\n      return x ^ (y | ~z);\n    }\n    function rotl(x, n) {\n      return x << n | x >>> 32 - n;\n    }\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.RIPEMD160('message');\n     *     var hash = CryptoJS.RIPEMD160(wordArray);\n     */\n    C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacRIPEMD160(message, key);\n     */\n    C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n  })(Math);\n  return CryptoJS.RIPEMD160;\n});\n\n/***/ }),\n\n/***/ 9865:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var Hasher = C_lib.Hasher;\n    var C_algo = C.algo;\n\n    // Reusable object\n    var W = [];\n\n    /**\n     * SHA-1 hash algorithm.\n     */\n    var SHA1 = C_algo.SHA1 = Hasher.extend({\n      _doReset: function _doReset() {\n        this._hash = new WordArray.init([0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]);\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Shortcut\n        var H = this._hash.words;\n\n        // Working variables\n        var a = H[0];\n        var b = H[1];\n        var c = H[2];\n        var d = H[3];\n        var e = H[4];\n\n        // Computation\n        for (var i = 0; i < 80; i++) {\n          if (i < 16) {\n            W[i] = M[offset + i] | 0;\n          } else {\n            var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n            W[i] = n << 1 | n >>> 31;\n          }\n          var t = (a << 5 | a >>> 27) + e + W[i];\n          if (i < 20) {\n            t += (b & c | ~b & d) + 0x5a827999;\n          } else if (i < 40) {\n            t += (b ^ c ^ d) + 0x6ed9eba1;\n          } else if (i < 60) {\n            t += (b & c | b & d | c & d) - 0x70e44324;\n          } else /* if (i < 80) */{\n              t += (b ^ c ^ d) - 0x359d3e2a;\n            }\n          e = d;\n          d = c;\n          c = b << 30 | b >>> 2;\n          b = a;\n          a = t;\n        }\n\n        // Intermediate hash value\n        H[0] = H[0] + a | 0;\n        H[1] = H[1] + b | 0;\n        H[2] = H[2] + c | 0;\n        H[3] = H[3] + d | 0;\n        H[4] = H[4] + e | 0;\n      },\n      _doFinalize: function _doFinalize() {\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var nBitsTotal = this._nDataBytes * 8;\n        var nBitsLeft = data.sigBytes * 8;\n\n        // Add padding\n        dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n        data.sigBytes = dataWords.length * 4;\n\n        // Hash final blocks\n        this._process();\n\n        // Return final computed hash\n        return this._hash;\n      },\n      clone: function clone() {\n        var clone = Hasher.clone.call(this);\n        clone._hash = this._hash.clone();\n        return clone;\n      }\n    });\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.SHA1('message');\n     *     var hash = CryptoJS.SHA1(wordArray);\n     */\n    C.SHA1 = Hasher._createHelper(SHA1);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacSHA1(message, key);\n     */\n    C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n  })();\n  return CryptoJS.SHA1;\n});\n\n/***/ }),\n\n/***/ 6876:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(8921));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var C_algo = C.algo;\n    var SHA256 = C_algo.SHA256;\n\n    /**\n     * SHA-224 hash algorithm.\n     */\n    var SHA224 = C_algo.SHA224 = SHA256.extend({\n      _doReset: function _doReset() {\n        this._hash = new WordArray.init([0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4]);\n      },\n      _doFinalize: function _doFinalize() {\n        var hash = SHA256._doFinalize.call(this);\n        hash.sigBytes -= 4;\n        return hash;\n      }\n    });\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.SHA224('message');\n     *     var hash = CryptoJS.SHA224(wordArray);\n     */\n    C.SHA224 = SHA256._createHelper(SHA224);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacSHA224(message, key);\n     */\n    C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n  })();\n  return CryptoJS.SHA224;\n});\n\n/***/ }),\n\n/***/ 8921:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function (Math) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var Hasher = C_lib.Hasher;\n    var C_algo = C.algo;\n\n    // Initialization and round constants tables\n    var H = [];\n    var K = [];\n\n    // Compute constants\n    (function () {\n      function isPrime(n) {\n        var sqrtN = Math.sqrt(n);\n        for (var factor = 2; factor <= sqrtN; factor++) {\n          if (!(n % factor)) {\n            return false;\n          }\n        }\n        return true;\n      }\n      function getFractionalBits(n) {\n        return (n - (n | 0)) * 0x100000000 | 0;\n      }\n      var n = 2;\n      var nPrime = 0;\n      while (nPrime < 64) {\n        if (isPrime(n)) {\n          if (nPrime < 8) {\n            H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n          }\n          K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n          nPrime++;\n        }\n        n++;\n      }\n    })();\n\n    // Reusable object\n    var W = [];\n\n    /**\n     * SHA-256 hash algorithm.\n     */\n    var SHA256 = C_algo.SHA256 = Hasher.extend({\n      _doReset: function _doReset() {\n        this._hash = new WordArray.init(H.slice(0));\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Shortcut\n        var H = this._hash.words;\n\n        // Working variables\n        var a = H[0];\n        var b = H[1];\n        var c = H[2];\n        var d = H[3];\n        var e = H[4];\n        var f = H[5];\n        var g = H[6];\n        var h = H[7];\n\n        // Computation\n        for (var i = 0; i < 64; i++) {\n          if (i < 16) {\n            W[i] = M[offset + i] | 0;\n          } else {\n            var gamma0x = W[i - 15];\n            var gamma0 = (gamma0x << 25 | gamma0x >>> 7) ^ (gamma0x << 14 | gamma0x >>> 18) ^ gamma0x >>> 3;\n            var gamma1x = W[i - 2];\n            var gamma1 = (gamma1x << 15 | gamma1x >>> 17) ^ (gamma1x << 13 | gamma1x >>> 19) ^ gamma1x >>> 10;\n            W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n          }\n          var ch = e & f ^ ~e & g;\n          var maj = a & b ^ a & c ^ b & c;\n          var sigma0 = (a << 30 | a >>> 2) ^ (a << 19 | a >>> 13) ^ (a << 10 | a >>> 22);\n          var sigma1 = (e << 26 | e >>> 6) ^ (e << 21 | e >>> 11) ^ (e << 7 | e >>> 25);\n          var t1 = h + sigma1 + ch + K[i] + W[i];\n          var t2 = sigma0 + maj;\n          h = g;\n          g = f;\n          f = e;\n          e = d + t1 | 0;\n          d = c;\n          c = b;\n          b = a;\n          a = t1 + t2 | 0;\n        }\n\n        // Intermediate hash value\n        H[0] = H[0] + a | 0;\n        H[1] = H[1] + b | 0;\n        H[2] = H[2] + c | 0;\n        H[3] = H[3] + d | 0;\n        H[4] = H[4] + e | 0;\n        H[5] = H[5] + f | 0;\n        H[6] = H[6] + g | 0;\n        H[7] = H[7] + h | 0;\n      },\n      _doFinalize: function _doFinalize() {\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var nBitsTotal = this._nDataBytes * 8;\n        var nBitsLeft = data.sigBytes * 8;\n\n        // Add padding\n        dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n        data.sigBytes = dataWords.length * 4;\n\n        // Hash final blocks\n        this._process();\n\n        // Return final computed hash\n        return this._hash;\n      },\n      clone: function clone() {\n        var clone = Hasher.clone.call(this);\n        clone._hash = this._hash.clone();\n        return clone;\n      }\n    });\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.SHA256('message');\n     *     var hash = CryptoJS.SHA256(wordArray);\n     */\n    C.SHA256 = Hasher._createHelper(SHA256);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacSHA256(message, key);\n     */\n    C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n  })(Math);\n  return CryptoJS.SHA256;\n});\n\n/***/ }),\n\n/***/ 8342:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(2601));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function (Math) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var Hasher = C_lib.Hasher;\n    var C_x64 = C.x64;\n    var X64Word = C_x64.Word;\n    var C_algo = C.algo;\n\n    // Constants tables\n    var RHO_OFFSETS = [];\n    var PI_INDEXES = [];\n    var ROUND_CONSTANTS = [];\n\n    // Compute Constants\n    (function () {\n      // Compute rho offset constants\n      var x = 1,\n        y = 0;\n      for (var t = 0; t < 24; t++) {\n        RHO_OFFSETS[x + 5 * y] = (t + 1) * (t + 2) / 2 % 64;\n        var newX = y % 5;\n        var newY = (2 * x + 3 * y) % 5;\n        x = newX;\n        y = newY;\n      }\n\n      // Compute pi index constants\n      for (var x = 0; x < 5; x++) {\n        for (var y = 0; y < 5; y++) {\n          PI_INDEXES[x + 5 * y] = y + (2 * x + 3 * y) % 5 * 5;\n        }\n      }\n\n      // Compute round constants\n      var LFSR = 0x01;\n      for (var i = 0; i < 24; i++) {\n        var roundConstantMsw = 0;\n        var roundConstantLsw = 0;\n        for (var j = 0; j < 7; j++) {\n          if (LFSR & 0x01) {\n            var bitPosition = (1 << j) - 1;\n            if (bitPosition < 32) {\n              roundConstantLsw ^= 1 << bitPosition;\n            } else /* if (bitPosition >= 32) */{\n                roundConstantMsw ^= 1 << bitPosition - 32;\n              }\n          }\n\n          // Compute next LFSR\n          if (LFSR & 0x80) {\n            // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n            LFSR = LFSR << 1 ^ 0x71;\n          } else {\n            LFSR <<= 1;\n          }\n        }\n        ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n      }\n    })();\n\n    // Reusable objects for temporary values\n    var T = [];\n    (function () {\n      for (var i = 0; i < 25; i++) {\n        T[i] = X64Word.create();\n      }\n    })();\n\n    /**\n     * SHA-3 hash algorithm.\n     */\n    var SHA3 = C_algo.SHA3 = Hasher.extend({\n      /**\n       * Configuration options.\n       *\n       * @property {number} outputLength\n       *   The desired number of bits in the output hash.\n       *   Only values permitted are: 224, 256, 384, 512.\n       *   Default: 512\n       */\n      cfg: Hasher.cfg.extend({\n        outputLength: 512\n      }),\n      _doReset: function _doReset() {\n        var state = this._state = [];\n        for (var i = 0; i < 25; i++) {\n          state[i] = new X64Word.init();\n        }\n        this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Shortcuts\n        var state = this._state;\n        var nBlockSizeLanes = this.blockSize / 2;\n\n        // Absorb\n        for (var i = 0; i < nBlockSizeLanes; i++) {\n          // Shortcuts\n          var M2i = M[offset + 2 * i];\n          var M2i1 = M[offset + 2 * i + 1];\n\n          // Swap endian\n          M2i = (M2i << 8 | M2i >>> 24) & 0x00ff00ff | (M2i << 24 | M2i >>> 8) & 0xff00ff00;\n          M2i1 = (M2i1 << 8 | M2i1 >>> 24) & 0x00ff00ff | (M2i1 << 24 | M2i1 >>> 8) & 0xff00ff00;\n\n          // Absorb message into state\n          var lane = state[i];\n          lane.high ^= M2i1;\n          lane.low ^= M2i;\n        }\n\n        // Rounds\n        for (var round = 0; round < 24; round++) {\n          // Theta\n          for (var x = 0; x < 5; x++) {\n            // Mix column lanes\n            var tMsw = 0,\n              tLsw = 0;\n            for (var y = 0; y < 5; y++) {\n              var lane = state[x + 5 * y];\n              tMsw ^= lane.high;\n              tLsw ^= lane.low;\n            }\n\n            // Temporary values\n            var Tx = T[x];\n            Tx.high = tMsw;\n            Tx.low = tLsw;\n          }\n          for (var x = 0; x < 5; x++) {\n            // Shortcuts\n            var Tx4 = T[(x + 4) % 5];\n            var Tx1 = T[(x + 1) % 5];\n            var Tx1Msw = Tx1.high;\n            var Tx1Lsw = Tx1.low;\n\n            // Mix surrounding columns\n            var tMsw = Tx4.high ^ (Tx1Msw << 1 | Tx1Lsw >>> 31);\n            var tLsw = Tx4.low ^ (Tx1Lsw << 1 | Tx1Msw >>> 31);\n            for (var y = 0; y < 5; y++) {\n              var lane = state[x + 5 * y];\n              lane.high ^= tMsw;\n              lane.low ^= tLsw;\n            }\n          }\n\n          // Rho Pi\n          for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n            var tMsw;\n            var tLsw;\n\n            // Shortcuts\n            var lane = state[laneIndex];\n            var laneMsw = lane.high;\n            var laneLsw = lane.low;\n            var rhoOffset = RHO_OFFSETS[laneIndex];\n\n            // Rotate lanes\n            if (rhoOffset < 32) {\n              tMsw = laneMsw << rhoOffset | laneLsw >>> 32 - rhoOffset;\n              tLsw = laneLsw << rhoOffset | laneMsw >>> 32 - rhoOffset;\n            } else /* if (rhoOffset >= 32) */{\n                tMsw = laneLsw << rhoOffset - 32 | laneMsw >>> 64 - rhoOffset;\n                tLsw = laneMsw << rhoOffset - 32 | laneLsw >>> 64 - rhoOffset;\n              }\n\n            // Transpose lanes\n            var TPiLane = T[PI_INDEXES[laneIndex]];\n            TPiLane.high = tMsw;\n            TPiLane.low = tLsw;\n          }\n\n          // Rho pi at x = y = 0\n          var T0 = T[0];\n          var state0 = state[0];\n          T0.high = state0.high;\n          T0.low = state0.low;\n\n          // Chi\n          for (var x = 0; x < 5; x++) {\n            for (var y = 0; y < 5; y++) {\n              // Shortcuts\n              var laneIndex = x + 5 * y;\n              var lane = state[laneIndex];\n              var TLane = T[laneIndex];\n              var Tx1Lane = T[(x + 1) % 5 + 5 * y];\n              var Tx2Lane = T[(x + 2) % 5 + 5 * y];\n\n              // Mix rows\n              lane.high = TLane.high ^ ~Tx1Lane.high & Tx2Lane.high;\n              lane.low = TLane.low ^ ~Tx1Lane.low & Tx2Lane.low;\n            }\n          }\n\n          // Iota\n          var lane = state[0];\n          var roundConstant = ROUND_CONSTANTS[round];\n          lane.high ^= roundConstant.high;\n          lane.low ^= roundConstant.low;\n        }\n      },\n      _doFinalize: function _doFinalize() {\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var nBitsTotal = this._nDataBytes * 8;\n        var nBitsLeft = data.sigBytes * 8;\n        var blockSizeBits = this.blockSize * 32;\n\n        // Add padding\n        dataWords[nBitsLeft >>> 5] |= 0x1 << 24 - nBitsLeft % 32;\n        dataWords[(Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits >>> 5) - 1] |= 0x80;\n        data.sigBytes = dataWords.length * 4;\n\n        // Hash final blocks\n        this._process();\n\n        // Shortcuts\n        var state = this._state;\n        var outputLengthBytes = this.cfg.outputLength / 8;\n        var outputLengthLanes = outputLengthBytes / 8;\n\n        // Squeeze\n        var hashWords = [];\n        for (var i = 0; i < outputLengthLanes; i++) {\n          // Shortcuts\n          var lane = state[i];\n          var laneMsw = lane.high;\n          var laneLsw = lane.low;\n\n          // Swap endian\n          laneMsw = (laneMsw << 8 | laneMsw >>> 24) & 0x00ff00ff | (laneMsw << 24 | laneMsw >>> 8) & 0xff00ff00;\n          laneLsw = (laneLsw << 8 | laneLsw >>> 24) & 0x00ff00ff | (laneLsw << 24 | laneLsw >>> 8) & 0xff00ff00;\n\n          // Squeeze state to retrieve hash\n          hashWords.push(laneLsw);\n          hashWords.push(laneMsw);\n        }\n\n        // Return final computed hash\n        return new WordArray.init(hashWords, outputLengthBytes);\n      },\n      clone: function clone() {\n        var clone = Hasher.clone.call(this);\n        var state = clone._state = this._state.slice(0);\n        for (var i = 0; i < 25; i++) {\n          state[i] = state[i].clone();\n        }\n        return clone;\n      }\n    });\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.SHA3('message');\n     *     var hash = CryptoJS.SHA3(wordArray);\n     */\n    C.SHA3 = Hasher._createHelper(SHA3);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacSHA3(message, key);\n     */\n    C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n  })(Math);\n  return CryptoJS.SHA3;\n});\n\n/***/ }),\n\n/***/ 8122:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(2601), __webpack_require__(7991));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_x64 = C.x64;\n    var X64Word = C_x64.Word;\n    var X64WordArray = C_x64.WordArray;\n    var C_algo = C.algo;\n    var SHA512 = C_algo.SHA512;\n\n    /**\n     * SHA-384 hash algorithm.\n     */\n    var SHA384 = C_algo.SHA384 = SHA512.extend({\n      _doReset: function _doReset() {\n        this._hash = new X64WordArray.init([new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)]);\n      },\n      _doFinalize: function _doFinalize() {\n        var hash = SHA512._doFinalize.call(this);\n        hash.sigBytes -= 16;\n        return hash;\n      }\n    });\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.SHA384('message');\n     *     var hash = CryptoJS.SHA384(wordArray);\n     */\n    C.SHA384 = SHA512._createHelper(SHA384);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacSHA384(message, key);\n     */\n    C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n  })();\n  return CryptoJS.SHA384;\n});\n\n/***/ }),\n\n/***/ 7991:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(2601));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var Hasher = C_lib.Hasher;\n    var C_x64 = C.x64;\n    var X64Word = C_x64.Word;\n    var X64WordArray = C_x64.WordArray;\n    var C_algo = C.algo;\n    function X64Word_create() {\n      return X64Word.create.apply(X64Word, arguments);\n    }\n\n    // Constants\n    var K = [X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)];\n\n    // Reusable objects\n    var W = [];\n    (function () {\n      for (var i = 0; i < 80; i++) {\n        W[i] = X64Word_create();\n      }\n    })();\n\n    /**\n     * SHA-512 hash algorithm.\n     */\n    var SHA512 = C_algo.SHA512 = Hasher.extend({\n      _doReset: function _doReset() {\n        this._hash = new X64WordArray.init([new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)]);\n      },\n      _doProcessBlock: function _doProcessBlock(M, offset) {\n        // Shortcuts\n        var H = this._hash.words;\n        var H0 = H[0];\n        var H1 = H[1];\n        var H2 = H[2];\n        var H3 = H[3];\n        var H4 = H[4];\n        var H5 = H[5];\n        var H6 = H[6];\n        var H7 = H[7];\n        var H0h = H0.high;\n        var H0l = H0.low;\n        var H1h = H1.high;\n        var H1l = H1.low;\n        var H2h = H2.high;\n        var H2l = H2.low;\n        var H3h = H3.high;\n        var H3l = H3.low;\n        var H4h = H4.high;\n        var H4l = H4.low;\n        var H5h = H5.high;\n        var H5l = H5.low;\n        var H6h = H6.high;\n        var H6l = H6.low;\n        var H7h = H7.high;\n        var H7l = H7.low;\n\n        // Working variables\n        var ah = H0h;\n        var al = H0l;\n        var bh = H1h;\n        var bl = H1l;\n        var ch = H2h;\n        var cl = H2l;\n        var dh = H3h;\n        var dl = H3l;\n        var eh = H4h;\n        var el = H4l;\n        var fh = H5h;\n        var fl = H5l;\n        var gh = H6h;\n        var gl = H6l;\n        var hh = H7h;\n        var hl = H7l;\n\n        // Rounds\n        for (var i = 0; i < 80; i++) {\n          var Wil;\n          var Wih;\n\n          // Shortcut\n          var Wi = W[i];\n\n          // Extend message\n          if (i < 16) {\n            Wih = Wi.high = M[offset + i * 2] | 0;\n            Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n          } else {\n            // Gamma0\n            var gamma0x = W[i - 15];\n            var gamma0xh = gamma0x.high;\n            var gamma0xl = gamma0x.low;\n            var gamma0h = (gamma0xh >>> 1 | gamma0xl << 31) ^ (gamma0xh >>> 8 | gamma0xl << 24) ^ gamma0xh >>> 7;\n            var gamma0l = (gamma0xl >>> 1 | gamma0xh << 31) ^ (gamma0xl >>> 8 | gamma0xh << 24) ^ (gamma0xl >>> 7 | gamma0xh << 25);\n\n            // Gamma1\n            var gamma1x = W[i - 2];\n            var gamma1xh = gamma1x.high;\n            var gamma1xl = gamma1x.low;\n            var gamma1h = (gamma1xh >>> 19 | gamma1xl << 13) ^ (gamma1xh << 3 | gamma1xl >>> 29) ^ gamma1xh >>> 6;\n            var gamma1l = (gamma1xl >>> 19 | gamma1xh << 13) ^ (gamma1xl << 3 | gamma1xh >>> 29) ^ (gamma1xl >>> 6 | gamma1xh << 26);\n\n            // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n            var Wi7 = W[i - 7];\n            var Wi7h = Wi7.high;\n            var Wi7l = Wi7.low;\n            var Wi16 = W[i - 16];\n            var Wi16h = Wi16.high;\n            var Wi16l = Wi16.low;\n            Wil = gamma0l + Wi7l;\n            Wih = gamma0h + Wi7h + (Wil >>> 0 < gamma0l >>> 0 ? 1 : 0);\n            Wil = Wil + gamma1l;\n            Wih = Wih + gamma1h + (Wil >>> 0 < gamma1l >>> 0 ? 1 : 0);\n            Wil = Wil + Wi16l;\n            Wih = Wih + Wi16h + (Wil >>> 0 < Wi16l >>> 0 ? 1 : 0);\n            Wi.high = Wih;\n            Wi.low = Wil;\n          }\n          var chh = eh & fh ^ ~eh & gh;\n          var chl = el & fl ^ ~el & gl;\n          var majh = ah & bh ^ ah & ch ^ bh & ch;\n          var majl = al & bl ^ al & cl ^ bl & cl;\n          var sigma0h = (ah >>> 28 | al << 4) ^ (ah << 30 | al >>> 2) ^ (ah << 25 | al >>> 7);\n          var sigma0l = (al >>> 28 | ah << 4) ^ (al << 30 | ah >>> 2) ^ (al << 25 | ah >>> 7);\n          var sigma1h = (eh >>> 14 | el << 18) ^ (eh >>> 18 | el << 14) ^ (eh << 23 | el >>> 9);\n          var sigma1l = (el >>> 14 | eh << 18) ^ (el >>> 18 | eh << 14) ^ (el << 23 | eh >>> 9);\n\n          // t1 = h + sigma1 + ch + K[i] + W[i]\n          var Ki = K[i];\n          var Kih = Ki.high;\n          var Kil = Ki.low;\n          var t1l = hl + sigma1l;\n          var t1h = hh + sigma1h + (t1l >>> 0 < hl >>> 0 ? 1 : 0);\n          var t1l = t1l + chl;\n          var t1h = t1h + chh + (t1l >>> 0 < chl >>> 0 ? 1 : 0);\n          var t1l = t1l + Kil;\n          var t1h = t1h + Kih + (t1l >>> 0 < Kil >>> 0 ? 1 : 0);\n          var t1l = t1l + Wil;\n          var t1h = t1h + Wih + (t1l >>> 0 < Wil >>> 0 ? 1 : 0);\n\n          // t2 = sigma0 + maj\n          var t2l = sigma0l + majl;\n          var t2h = sigma0h + majh + (t2l >>> 0 < sigma0l >>> 0 ? 1 : 0);\n\n          // Update working variables\n          hh = gh;\n          hl = gl;\n          gh = fh;\n          gl = fl;\n          fh = eh;\n          fl = el;\n          el = dl + t1l | 0;\n          eh = dh + t1h + (el >>> 0 < dl >>> 0 ? 1 : 0) | 0;\n          dh = ch;\n          dl = cl;\n          ch = bh;\n          cl = bl;\n          bh = ah;\n          bl = al;\n          al = t1l + t2l | 0;\n          ah = t1h + t2h + (al >>> 0 < t1l >>> 0 ? 1 : 0) | 0;\n        }\n\n        // Intermediate hash value\n        H0l = H0.low = H0l + al;\n        H0.high = H0h + ah + (H0l >>> 0 < al >>> 0 ? 1 : 0);\n        H1l = H1.low = H1l + bl;\n        H1.high = H1h + bh + (H1l >>> 0 < bl >>> 0 ? 1 : 0);\n        H2l = H2.low = H2l + cl;\n        H2.high = H2h + ch + (H2l >>> 0 < cl >>> 0 ? 1 : 0);\n        H3l = H3.low = H3l + dl;\n        H3.high = H3h + dh + (H3l >>> 0 < dl >>> 0 ? 1 : 0);\n        H4l = H4.low = H4l + el;\n        H4.high = H4h + eh + (H4l >>> 0 < el >>> 0 ? 1 : 0);\n        H5l = H5.low = H5l + fl;\n        H5.high = H5h + fh + (H5l >>> 0 < fl >>> 0 ? 1 : 0);\n        H6l = H6.low = H6l + gl;\n        H6.high = H6h + gh + (H6l >>> 0 < gl >>> 0 ? 1 : 0);\n        H7l = H7.low = H7l + hl;\n        H7.high = H7h + hh + (H7l >>> 0 < hl >>> 0 ? 1 : 0);\n      },\n      _doFinalize: function _doFinalize() {\n        // Shortcuts\n        var data = this._data;\n        var dataWords = data.words;\n        var nBitsTotal = this._nDataBytes * 8;\n        var nBitsLeft = data.sigBytes * 8;\n\n        // Add padding\n        dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n        dataWords[(nBitsLeft + 128 >>> 10 << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n        dataWords[(nBitsLeft + 128 >>> 10 << 5) + 31] = nBitsTotal;\n        data.sigBytes = dataWords.length * 4;\n\n        // Hash final blocks\n        this._process();\n\n        // Convert hash to 32-bit word array before returning\n        var hash = this._hash.toX32();\n\n        // Return final computed hash\n        return hash;\n      },\n      clone: function clone() {\n        var clone = Hasher.clone.call(this);\n        clone._hash = this._hash.clone();\n        return clone;\n      },\n      blockSize: 1024 / 32\n    });\n\n    /**\n     * Shortcut function to the hasher's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     *\n     * @return {WordArray} The hash.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hash = CryptoJS.SHA512('message');\n     *     var hash = CryptoJS.SHA512(wordArray);\n     */\n    C.SHA512 = Hasher._createHelper(SHA512);\n\n    /**\n     * Shortcut function to the HMAC's object interface.\n     *\n     * @param {WordArray|string} message The message to hash.\n     * @param {WordArray|string} key The secret key.\n     *\n     * @return {WordArray} The HMAC.\n     *\n     * @static\n     *\n     * @example\n     *\n     *     var hmac = CryptoJS.HmacSHA512(message, key);\n     */\n    C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n  })();\n  return CryptoJS.SHA512;\n});\n\n/***/ }),\n\n/***/ 8437:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory, undef) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757), __webpack_require__(7508), __webpack_require__(3440), __webpack_require__(3839), __webpack_require__(1582));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var BlockCipher = C_lib.BlockCipher;\n    var C_algo = C.algo;\n\n    // Permuted Choice 1 constants\n    var PC1 = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4];\n\n    // Permuted Choice 2 constants\n    var PC2 = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32];\n\n    // Cumulative bit shift constants\n    var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n    // SBOXes and round permutation constants\n    var SBOX_P = [{\n      0x0: 0x808200,\n      0x10000000: 0x8000,\n      0x20000000: 0x808002,\n      0x30000000: 0x2,\n      0x40000000: 0x200,\n      0x50000000: 0x808202,\n      0x60000000: 0x800202,\n      0x70000000: 0x800000,\n      0x80000000: 0x202,\n      0x90000000: 0x800200,\n      0xa0000000: 0x8200,\n      0xb0000000: 0x808000,\n      0xc0000000: 0x8002,\n      0xd0000000: 0x800002,\n      0xe0000000: 0x0,\n      0xf0000000: 0x8202,\n      0x8000000: 0x0,\n      0x18000000: 0x808202,\n      0x28000000: 0x8202,\n      0x38000000: 0x8000,\n      0x48000000: 0x808200,\n      0x58000000: 0x200,\n      0x68000000: 0x808002,\n      0x78000000: 0x2,\n      0x88000000: 0x800200,\n      0x98000000: 0x8200,\n      0xa8000000: 0x808000,\n      0xb8000000: 0x800202,\n      0xc8000000: 0x800002,\n      0xd8000000: 0x8002,\n      0xe8000000: 0x202,\n      0xf8000000: 0x800000,\n      0x1: 0x8000,\n      0x10000001: 0x2,\n      0x20000001: 0x808200,\n      0x30000001: 0x800000,\n      0x40000001: 0x808002,\n      0x50000001: 0x8200,\n      0x60000001: 0x200,\n      0x70000001: 0x800202,\n      0x80000001: 0x808202,\n      0x90000001: 0x808000,\n      0xa0000001: 0x800002,\n      0xb0000001: 0x8202,\n      0xc0000001: 0x202,\n      0xd0000001: 0x800200,\n      0xe0000001: 0x8002,\n      0xf0000001: 0x0,\n      0x8000001: 0x808202,\n      0x18000001: 0x808000,\n      0x28000001: 0x800000,\n      0x38000001: 0x200,\n      0x48000001: 0x8000,\n      0x58000001: 0x800002,\n      0x68000001: 0x2,\n      0x78000001: 0x8202,\n      0x88000001: 0x8002,\n      0x98000001: 0x800202,\n      0xa8000001: 0x202,\n      0xb8000001: 0x808200,\n      0xc8000001: 0x800200,\n      0xd8000001: 0x0,\n      0xe8000001: 0x8200,\n      0xf8000001: 0x808002\n    }, {\n      0x0: 0x40084010,\n      0x1000000: 0x4000,\n      0x2000000: 0x80000,\n      0x3000000: 0x40080010,\n      0x4000000: 0x40000010,\n      0x5000000: 0x40084000,\n      0x6000000: 0x40004000,\n      0x7000000: 0x10,\n      0x8000000: 0x84000,\n      0x9000000: 0x40004010,\n      0xa000000: 0x40000000,\n      0xb000000: 0x84010,\n      0xc000000: 0x80010,\n      0xd000000: 0x0,\n      0xe000000: 0x4010,\n      0xf000000: 0x40080000,\n      0x800000: 0x40004000,\n      0x1800000: 0x84010,\n      0x2800000: 0x10,\n      0x3800000: 0x40004010,\n      0x4800000: 0x40084010,\n      0x5800000: 0x40000000,\n      0x6800000: 0x80000,\n      0x7800000: 0x40080010,\n      0x8800000: 0x80010,\n      0x9800000: 0x0,\n      0xa800000: 0x4000,\n      0xb800000: 0x40080000,\n      0xc800000: 0x40000010,\n      0xd800000: 0x84000,\n      0xe800000: 0x40084000,\n      0xf800000: 0x4010,\n      0x10000000: 0x0,\n      0x11000000: 0x40080010,\n      0x12000000: 0x40004010,\n      0x13000000: 0x40084000,\n      0x14000000: 0x40080000,\n      0x15000000: 0x10,\n      0x16000000: 0x84010,\n      0x17000000: 0x4000,\n      0x18000000: 0x4010,\n      0x19000000: 0x80000,\n      0x1a000000: 0x80010,\n      0x1b000000: 0x40000010,\n      0x1c000000: 0x84000,\n      0x1d000000: 0x40004000,\n      0x1e000000: 0x40000000,\n      0x1f000000: 0x40084010,\n      0x10800000: 0x84010,\n      0x11800000: 0x80000,\n      0x12800000: 0x40080000,\n      0x13800000: 0x4000,\n      0x14800000: 0x40004000,\n      0x15800000: 0x40084010,\n      0x16800000: 0x10,\n      0x17800000: 0x40000000,\n      0x18800000: 0x40084000,\n      0x19800000: 0x40000010,\n      0x1a800000: 0x40004010,\n      0x1b800000: 0x80010,\n      0x1c800000: 0x0,\n      0x1d800000: 0x4010,\n      0x1e800000: 0x40080010,\n      0x1f800000: 0x84000\n    }, {\n      0x0: 0x104,\n      0x100000: 0x0,\n      0x200000: 0x4000100,\n      0x300000: 0x10104,\n      0x400000: 0x10004,\n      0x500000: 0x4000004,\n      0x600000: 0x4010104,\n      0x700000: 0x4010000,\n      0x800000: 0x4000000,\n      0x900000: 0x4010100,\n      0xa00000: 0x10100,\n      0xb00000: 0x4010004,\n      0xc00000: 0x4000104,\n      0xd00000: 0x10000,\n      0xe00000: 0x4,\n      0xf00000: 0x100,\n      0x80000: 0x4010100,\n      0x180000: 0x4010004,\n      0x280000: 0x0,\n      0x380000: 0x4000100,\n      0x480000: 0x4000004,\n      0x580000: 0x10000,\n      0x680000: 0x10004,\n      0x780000: 0x104,\n      0x880000: 0x4,\n      0x980000: 0x100,\n      0xa80000: 0x4010000,\n      0xb80000: 0x10104,\n      0xc80000: 0x10100,\n      0xd80000: 0x4000104,\n      0xe80000: 0x4010104,\n      0xf80000: 0x4000000,\n      0x1000000: 0x4010100,\n      0x1100000: 0x10004,\n      0x1200000: 0x10000,\n      0x1300000: 0x4000100,\n      0x1400000: 0x100,\n      0x1500000: 0x4010104,\n      0x1600000: 0x4000004,\n      0x1700000: 0x0,\n      0x1800000: 0x4000104,\n      0x1900000: 0x4000000,\n      0x1a00000: 0x4,\n      0x1b00000: 0x10100,\n      0x1c00000: 0x4010000,\n      0x1d00000: 0x104,\n      0x1e00000: 0x10104,\n      0x1f00000: 0x4010004,\n      0x1080000: 0x4000000,\n      0x1180000: 0x104,\n      0x1280000: 0x4010100,\n      0x1380000: 0x0,\n      0x1480000: 0x10004,\n      0x1580000: 0x4000100,\n      0x1680000: 0x100,\n      0x1780000: 0x4010004,\n      0x1880000: 0x10000,\n      0x1980000: 0x4010104,\n      0x1a80000: 0x10104,\n      0x1b80000: 0x4000004,\n      0x1c80000: 0x4000104,\n      0x1d80000: 0x4010000,\n      0x1e80000: 0x4,\n      0x1f80000: 0x10100\n    }, {\n      0x0: 0x80401000,\n      0x10000: 0x80001040,\n      0x20000: 0x401040,\n      0x30000: 0x80400000,\n      0x40000: 0x0,\n      0x50000: 0x401000,\n      0x60000: 0x80000040,\n      0x70000: 0x400040,\n      0x80000: 0x80000000,\n      0x90000: 0x400000,\n      0xa0000: 0x40,\n      0xb0000: 0x80001000,\n      0xc0000: 0x80400040,\n      0xd0000: 0x1040,\n      0xe0000: 0x1000,\n      0xf0000: 0x80401040,\n      0x8000: 0x80001040,\n      0x18000: 0x40,\n      0x28000: 0x80400040,\n      0x38000: 0x80001000,\n      0x48000: 0x401000,\n      0x58000: 0x80401040,\n      0x68000: 0x0,\n      0x78000: 0x80400000,\n      0x88000: 0x1000,\n      0x98000: 0x80401000,\n      0xa8000: 0x400000,\n      0xb8000: 0x1040,\n      0xc8000: 0x80000000,\n      0xd8000: 0x400040,\n      0xe8000: 0x401040,\n      0xf8000: 0x80000040,\n      0x100000: 0x400040,\n      0x110000: 0x401000,\n      0x120000: 0x80000040,\n      0x130000: 0x0,\n      0x140000: 0x1040,\n      0x150000: 0x80400040,\n      0x160000: 0x80401000,\n      0x170000: 0x80001040,\n      0x180000: 0x80401040,\n      0x190000: 0x80000000,\n      0x1a0000: 0x80400000,\n      0x1b0000: 0x401040,\n      0x1c0000: 0x80001000,\n      0x1d0000: 0x400000,\n      0x1e0000: 0x40,\n      0x1f0000: 0x1000,\n      0x108000: 0x80400000,\n      0x118000: 0x80401040,\n      0x128000: 0x0,\n      0x138000: 0x401000,\n      0x148000: 0x400040,\n      0x158000: 0x80000000,\n      0x168000: 0x80001040,\n      0x178000: 0x40,\n      0x188000: 0x80000040,\n      0x198000: 0x1000,\n      0x1a8000: 0x80001000,\n      0x1b8000: 0x80400040,\n      0x1c8000: 0x1040,\n      0x1d8000: 0x80401000,\n      0x1e8000: 0x400000,\n      0x1f8000: 0x401040\n    }, {\n      0x0: 0x80,\n      0x1000: 0x1040000,\n      0x2000: 0x40000,\n      0x3000: 0x20000000,\n      0x4000: 0x20040080,\n      0x5000: 0x1000080,\n      0x6000: 0x21000080,\n      0x7000: 0x40080,\n      0x8000: 0x1000000,\n      0x9000: 0x20040000,\n      0xa000: 0x20000080,\n      0xb000: 0x21040080,\n      0xc000: 0x21040000,\n      0xd000: 0x0,\n      0xe000: 0x1040080,\n      0xf000: 0x21000000,\n      0x800: 0x1040080,\n      0x1800: 0x21000080,\n      0x2800: 0x80,\n      0x3800: 0x1040000,\n      0x4800: 0x40000,\n      0x5800: 0x20040080,\n      0x6800: 0x21040000,\n      0x7800: 0x20000000,\n      0x8800: 0x20040000,\n      0x9800: 0x0,\n      0xa800: 0x21040080,\n      0xb800: 0x1000080,\n      0xc800: 0x20000080,\n      0xd800: 0x21000000,\n      0xe800: 0x1000000,\n      0xf800: 0x40080,\n      0x10000: 0x40000,\n      0x11000: 0x80,\n      0x12000: 0x20000000,\n      0x13000: 0x21000080,\n      0x14000: 0x1000080,\n      0x15000: 0x21040000,\n      0x16000: 0x20040080,\n      0x17000: 0x1000000,\n      0x18000: 0x21040080,\n      0x19000: 0x21000000,\n      0x1a000: 0x1040000,\n      0x1b000: 0x20040000,\n      0x1c000: 0x40080,\n      0x1d000: 0x20000080,\n      0x1e000: 0x0,\n      0x1f000: 0x1040080,\n      0x10800: 0x21000080,\n      0x11800: 0x1000000,\n      0x12800: 0x1040000,\n      0x13800: 0x20040080,\n      0x14800: 0x20000000,\n      0x15800: 0x1040080,\n      0x16800: 0x80,\n      0x17800: 0x21040000,\n      0x18800: 0x40080,\n      0x19800: 0x21040080,\n      0x1a800: 0x0,\n      0x1b800: 0x21000000,\n      0x1c800: 0x1000080,\n      0x1d800: 0x40000,\n      0x1e800: 0x20040000,\n      0x1f800: 0x20000080\n    }, {\n      0x0: 0x10000008,\n      0x100: 0x2000,\n      0x200: 0x10200000,\n      0x300: 0x10202008,\n      0x400: 0x10002000,\n      0x500: 0x200000,\n      0x600: 0x200008,\n      0x700: 0x10000000,\n      0x800: 0x0,\n      0x900: 0x10002008,\n      0xa00: 0x202000,\n      0xb00: 0x8,\n      0xc00: 0x10200008,\n      0xd00: 0x202008,\n      0xe00: 0x2008,\n      0xf00: 0x10202000,\n      0x80: 0x10200000,\n      0x180: 0x10202008,\n      0x280: 0x8,\n      0x380: 0x200000,\n      0x480: 0x202008,\n      0x580: 0x10000008,\n      0x680: 0x10002000,\n      0x780: 0x2008,\n      0x880: 0x200008,\n      0x980: 0x2000,\n      0xa80: 0x10002008,\n      0xb80: 0x10200008,\n      0xc80: 0x0,\n      0xd80: 0x10202000,\n      0xe80: 0x202000,\n      0xf80: 0x10000000,\n      0x1000: 0x10002000,\n      0x1100: 0x10200008,\n      0x1200: 0x10202008,\n      0x1300: 0x2008,\n      0x1400: 0x200000,\n      0x1500: 0x10000000,\n      0x1600: 0x10000008,\n      0x1700: 0x202000,\n      0x1800: 0x202008,\n      0x1900: 0x0,\n      0x1a00: 0x8,\n      0x1b00: 0x10200000,\n      0x1c00: 0x2000,\n      0x1d00: 0x10002008,\n      0x1e00: 0x10202000,\n      0x1f00: 0x200008,\n      0x1080: 0x8,\n      0x1180: 0x202000,\n      0x1280: 0x200000,\n      0x1380: 0x10000008,\n      0x1480: 0x10002000,\n      0x1580: 0x2008,\n      0x1680: 0x10202008,\n      0x1780: 0x10200000,\n      0x1880: 0x10202000,\n      0x1980: 0x10200008,\n      0x1a80: 0x2000,\n      0x1b80: 0x202008,\n      0x1c80: 0x200008,\n      0x1d80: 0x0,\n      0x1e80: 0x10000000,\n      0x1f80: 0x10002008\n    }, {\n      0x0: 0x100000,\n      0x10: 0x2000401,\n      0x20: 0x400,\n      0x30: 0x100401,\n      0x40: 0x2100401,\n      0x50: 0x0,\n      0x60: 0x1,\n      0x70: 0x2100001,\n      0x80: 0x2000400,\n      0x90: 0x100001,\n      0xa0: 0x2000001,\n      0xb0: 0x2100400,\n      0xc0: 0x2100000,\n      0xd0: 0x401,\n      0xe0: 0x100400,\n      0xf0: 0x2000000,\n      0x8: 0x2100001,\n      0x18: 0x0,\n      0x28: 0x2000401,\n      0x38: 0x2100400,\n      0x48: 0x100000,\n      0x58: 0x2000001,\n      0x68: 0x2000000,\n      0x78: 0x401,\n      0x88: 0x100401,\n      0x98: 0x2000400,\n      0xa8: 0x2100000,\n      0xb8: 0x100001,\n      0xc8: 0x400,\n      0xd8: 0x2100401,\n      0xe8: 0x1,\n      0xf8: 0x100400,\n      0x100: 0x2000000,\n      0x110: 0x100000,\n      0x120: 0x2000401,\n      0x130: 0x2100001,\n      0x140: 0x100001,\n      0x150: 0x2000400,\n      0x160: 0x2100400,\n      0x170: 0x100401,\n      0x180: 0x401,\n      0x190: 0x2100401,\n      0x1a0: 0x100400,\n      0x1b0: 0x1,\n      0x1c0: 0x0,\n      0x1d0: 0x2100000,\n      0x1e0: 0x2000001,\n      0x1f0: 0x400,\n      0x108: 0x100400,\n      0x118: 0x2000401,\n      0x128: 0x2100001,\n      0x138: 0x1,\n      0x148: 0x2000000,\n      0x158: 0x100000,\n      0x168: 0x401,\n      0x178: 0x2100400,\n      0x188: 0x2000001,\n      0x198: 0x2100000,\n      0x1a8: 0x0,\n      0x1b8: 0x2100401,\n      0x1c8: 0x100401,\n      0x1d8: 0x400,\n      0x1e8: 0x2000400,\n      0x1f8: 0x100001\n    }, {\n      0x0: 0x8000820,\n      0x1: 0x20000,\n      0x2: 0x8000000,\n      0x3: 0x20,\n      0x4: 0x20020,\n      0x5: 0x8020820,\n      0x6: 0x8020800,\n      0x7: 0x800,\n      0x8: 0x8020000,\n      0x9: 0x8000800,\n      0xa: 0x20800,\n      0xb: 0x8020020,\n      0xc: 0x820,\n      0xd: 0x0,\n      0xe: 0x8000020,\n      0xf: 0x20820,\n      0x80000000: 0x800,\n      0x80000001: 0x8020820,\n      0x80000002: 0x8000820,\n      0x80000003: 0x8000000,\n      0x80000004: 0x8020000,\n      0x80000005: 0x20800,\n      0x80000006: 0x20820,\n      0x80000007: 0x20,\n      0x80000008: 0x8000020,\n      0x80000009: 0x820,\n      0x8000000a: 0x20020,\n      0x8000000b: 0x8020800,\n      0x8000000c: 0x0,\n      0x8000000d: 0x8020020,\n      0x8000000e: 0x8000800,\n      0x8000000f: 0x20000,\n      0x10: 0x20820,\n      0x11: 0x8020800,\n      0x12: 0x20,\n      0x13: 0x800,\n      0x14: 0x8000800,\n      0x15: 0x8000020,\n      0x16: 0x8020020,\n      0x17: 0x20000,\n      0x18: 0x0,\n      0x19: 0x20020,\n      0x1a: 0x8020000,\n      0x1b: 0x8000820,\n      0x1c: 0x8020820,\n      0x1d: 0x20800,\n      0x1e: 0x820,\n      0x1f: 0x8000000,\n      0x80000010: 0x20000,\n      0x80000011: 0x800,\n      0x80000012: 0x8020020,\n      0x80000013: 0x20820,\n      0x80000014: 0x20,\n      0x80000015: 0x8020000,\n      0x80000016: 0x8000000,\n      0x80000017: 0x8000820,\n      0x80000018: 0x8020820,\n      0x80000019: 0x8000020,\n      0x8000001a: 0x8000800,\n      0x8000001b: 0x0,\n      0x8000001c: 0x20800,\n      0x8000001d: 0x820,\n      0x8000001e: 0x20020,\n      0x8000001f: 0x8020800\n    }];\n\n    // Masks that select the SBOX input\n    var SBOX_MASK = [0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f];\n\n    /**\n     * DES block cipher algorithm.\n     */\n    var DES = C_algo.DES = BlockCipher.extend({\n      _doReset: function _doReset() {\n        // Shortcuts\n        var key = this._key;\n        var keyWords = key.words;\n\n        // Select 56 bits according to PC1\n        var keyBits = [];\n        for (var i = 0; i < 56; i++) {\n          var keyBitPos = PC1[i] - 1;\n          keyBits[i] = keyWords[keyBitPos >>> 5] >>> 31 - keyBitPos % 32 & 1;\n        }\n\n        // Assemble 16 subkeys\n        var subKeys = this._subKeys = [];\n        for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n          // Create subkey\n          var subKey = subKeys[nSubKey] = [];\n\n          // Shortcut\n          var bitShift = BIT_SHIFTS[nSubKey];\n\n          // Select 48 bits according to PC2\n          for (var i = 0; i < 24; i++) {\n            // Select from the left 28 key bits\n            subKey[i / 6 | 0] |= keyBits[(PC2[i] - 1 + bitShift) % 28] << 31 - i % 6;\n\n            // Select from the right 28 key bits\n            subKey[4 + (i / 6 | 0)] |= keyBits[28 + (PC2[i + 24] - 1 + bitShift) % 28] << 31 - i % 6;\n          }\n\n          // Since each subkey is applied to an expanded 32-bit input,\n          // the subkey can be broken into 8 values scaled to 32-bits,\n          // which allows the key to be used without expansion\n          subKey[0] = subKey[0] << 1 | subKey[0] >>> 31;\n          for (var i = 1; i < 7; i++) {\n            subKey[i] = subKey[i] >>> (i - 1) * 4 + 3;\n          }\n          subKey[7] = subKey[7] << 5 | subKey[7] >>> 27;\n        }\n\n        // Compute inverse subkeys\n        var invSubKeys = this._invSubKeys = [];\n        for (var i = 0; i < 16; i++) {\n          invSubKeys[i] = subKeys[15 - i];\n        }\n      },\n      encryptBlock: function encryptBlock(M, offset) {\n        this._doCryptBlock(M, offset, this._subKeys);\n      },\n      decryptBlock: function decryptBlock(M, offset) {\n        this._doCryptBlock(M, offset, this._invSubKeys);\n      },\n      _doCryptBlock: function _doCryptBlock(M, offset, subKeys) {\n        // Get input\n        this._lBlock = M[offset];\n        this._rBlock = M[offset + 1];\n\n        // Initial permutation\n        exchangeLR.call(this, 4, 0x0f0f0f0f);\n        exchangeLR.call(this, 16, 0x0000ffff);\n        exchangeRL.call(this, 2, 0x33333333);\n        exchangeRL.call(this, 8, 0x00ff00ff);\n        exchangeLR.call(this, 1, 0x55555555);\n\n        // Rounds\n        for (var round = 0; round < 16; round++) {\n          // Shortcuts\n          var subKey = subKeys[round];\n          var lBlock = this._lBlock;\n          var rBlock = this._rBlock;\n\n          // Feistel function\n          var f = 0;\n          for (var i = 0; i < 8; i++) {\n            f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n          }\n          this._lBlock = rBlock;\n          this._rBlock = lBlock ^ f;\n        }\n\n        // Undo swap from last round\n        var t = this._lBlock;\n        this._lBlock = this._rBlock;\n        this._rBlock = t;\n\n        // Final permutation\n        exchangeLR.call(this, 1, 0x55555555);\n        exchangeRL.call(this, 8, 0x00ff00ff);\n        exchangeRL.call(this, 2, 0x33333333);\n        exchangeLR.call(this, 16, 0x0000ffff);\n        exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n        // Set output\n        M[offset] = this._lBlock;\n        M[offset + 1] = this._rBlock;\n      },\n      keySize: 64 / 32,\n      ivSize: 64 / 32,\n      blockSize: 64 / 32\n    });\n\n    // Swap bits across the left and right words\n    function exchangeLR(offset, mask) {\n      var t = (this._lBlock >>> offset ^ this._rBlock) & mask;\n      this._rBlock ^= t;\n      this._lBlock ^= t << offset;\n    }\n    function exchangeRL(offset, mask) {\n      var t = (this._rBlock >>> offset ^ this._lBlock) & mask;\n      this._lBlock ^= t;\n      this._rBlock ^= t << offset;\n    }\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n     */\n    C.DES = BlockCipher._createHelper(DES);\n\n    /**\n     * Triple-DES block cipher algorithm.\n     */\n    var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n      _doReset: function _doReset() {\n        // Shortcuts\n        var key = this._key;\n        var keyWords = key.words;\n        // Make sure the key length is valid (64, 128 or >= 192 bit)\n        if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n          throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n        }\n\n        // Extend the key according to the keying options defined in 3DES standard\n        var key1 = keyWords.slice(0, 2);\n        var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n        var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n        // Create DES instances\n        this._des1 = DES.createEncryptor(WordArray.create(key1));\n        this._des2 = DES.createEncryptor(WordArray.create(key2));\n        this._des3 = DES.createEncryptor(WordArray.create(key3));\n      },\n      encryptBlock: function encryptBlock(M, offset) {\n        this._des1.encryptBlock(M, offset);\n        this._des2.decryptBlock(M, offset);\n        this._des3.encryptBlock(M, offset);\n      },\n      decryptBlock: function decryptBlock(M, offset) {\n        this._des3.decryptBlock(M, offset);\n        this._des2.encryptBlock(M, offset);\n        this._des1.decryptBlock(M, offset);\n      },\n      keySize: 192 / 32,\n      ivSize: 64 / 32,\n      blockSize: 64 / 32\n    });\n\n    /**\n     * Shortcut functions to the cipher's object interface.\n     *\n     * @example\n     *\n     *     var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n     *     var plaintext  = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n     */\n    C.TripleDES = BlockCipher._createHelper(TripleDES);\n  })();\n  return CryptoJS.TripleDES;\n});\n\n/***/ }),\n\n/***/ 2601:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n;\n(function (root, factory) {\n  if (true) {\n    // CommonJS\n    module.exports = exports = factory(__webpack_require__(757));\n  } else {}\n})(void 0, function (CryptoJS) {\n  (function (undefined) {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var Base = C_lib.Base;\n    var X32WordArray = C_lib.WordArray;\n\n    /**\n     * x64 namespace.\n     */\n    var C_x64 = C.x64 = {};\n\n    /**\n     * A 64-bit word.\n     */\n    var X64Word = C_x64.Word = Base.extend({\n      /**\n       * Initializes a newly created 64-bit word.\n       *\n       * @param {number} high The high 32 bits.\n       * @param {number} low The low 32 bits.\n       *\n       * @example\n       *\n       *     var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n       */\n      init: function init(high, low) {\n        this.high = high;\n        this.low = low;\n      }\n\n      /**\n       * Bitwise NOTs this word.\n       *\n       * @return {X64Word} A new x64-Word object after negating.\n       *\n       * @example\n       *\n       *     var negated = x64Word.not();\n       */\n      // not: function () {\n      // var high = ~this.high;\n      // var low = ~this.low;\n\n      // return X64Word.create(high, low);\n      // },\n\n      /**\n       * Bitwise ANDs this word with the passed word.\n       *\n       * @param {X64Word} word The x64-Word to AND with this word.\n       *\n       * @return {X64Word} A new x64-Word object after ANDing.\n       *\n       * @example\n       *\n       *     var anded = x64Word.and(anotherX64Word);\n       */\n      // and: function (word) {\n      // var high = this.high & word.high;\n      // var low = this.low & word.low;\n\n      // return X64Word.create(high, low);\n      // },\n\n      /**\n       * Bitwise ORs this word with the passed word.\n       *\n       * @param {X64Word} word The x64-Word to OR with this word.\n       *\n       * @return {X64Word} A new x64-Word object after ORing.\n       *\n       * @example\n       *\n       *     var ored = x64Word.or(anotherX64Word);\n       */\n      // or: function (word) {\n      // var high = this.high | word.high;\n      // var low = this.low | word.low;\n\n      // return X64Word.create(high, low);\n      // },\n\n      /**\n       * Bitwise XORs this word with the passed word.\n       *\n       * @param {X64Word} word The x64-Word to XOR with this word.\n       *\n       * @return {X64Word} A new x64-Word object after XORing.\n       *\n       * @example\n       *\n       *     var xored = x64Word.xor(anotherX64Word);\n       */\n      // xor: function (word) {\n      // var high = this.high ^ word.high;\n      // var low = this.low ^ word.low;\n\n      // return X64Word.create(high, low);\n      // },\n\n      /**\n       * Shifts this word n bits to the left.\n       *\n       * @param {number} n The number of bits to shift.\n       *\n       * @return {X64Word} A new x64-Word object after shifting.\n       *\n       * @example\n       *\n       *     var shifted = x64Word.shiftL(25);\n       */\n      // shiftL: function (n) {\n      // if (n < 32) {\n      // var high = (this.high << n) | (this.low >>> (32 - n));\n      // var low = this.low << n;\n      // } else {\n      // var high = this.low << (n - 32);\n      // var low = 0;\n      // }\n\n      // return X64Word.create(high, low);\n      // },\n\n      /**\n       * Shifts this word n bits to the right.\n       *\n       * @param {number} n The number of bits to shift.\n       *\n       * @return {X64Word} A new x64-Word object after shifting.\n       *\n       * @example\n       *\n       *     var shifted = x64Word.shiftR(7);\n       */\n      // shiftR: function (n) {\n      // if (n < 32) {\n      // var low = (this.low >>> n) | (this.high << (32 - n));\n      // var high = this.high >>> n;\n      // } else {\n      // var low = this.high >>> (n - 32);\n      // var high = 0;\n      // }\n\n      // return X64Word.create(high, low);\n      // },\n\n      /**\n       * Rotates this word n bits to the left.\n       *\n       * @param {number} n The number of bits to rotate.\n       *\n       * @return {X64Word} A new x64-Word object after rotating.\n       *\n       * @example\n       *\n       *     var rotated = x64Word.rotL(25);\n       */\n      // rotL: function (n) {\n      // return this.shiftL(n).or(this.shiftR(64 - n));\n      // },\n\n      /**\n       * Rotates this word n bits to the right.\n       *\n       * @param {number} n The number of bits to rotate.\n       *\n       * @return {X64Word} A new x64-Word object after rotating.\n       *\n       * @example\n       *\n       *     var rotated = x64Word.rotR(7);\n       */\n      // rotR: function (n) {\n      // return this.shiftR(n).or(this.shiftL(64 - n));\n      // },\n\n      /**\n       * Adds this word with the passed word.\n       *\n       * @param {X64Word} word The x64-Word to add with this word.\n       *\n       * @return {X64Word} A new x64-Word object after adding.\n       *\n       * @example\n       *\n       *     var added = x64Word.add(anotherX64Word);\n       */\n      // add: function (word) {\n      // var low = (this.low + word.low) | 0;\n      // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n      // var high = (this.high + word.high + carry) | 0;\n\n      // return X64Word.create(high, low);\n      // }\n    });\n\n    /**\n     * An array of 64-bit words.\n     *\n     * @property {Array} words The array of CryptoJS.x64.Word objects.\n     * @property {number} sigBytes The number of significant bytes in this word array.\n     */\n    var X64WordArray = C_x64.WordArray = Base.extend({\n      /**\n       * Initializes a newly created word array.\n       *\n       * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n       * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n       *\n       * @example\n       *\n       *     var wordArray = CryptoJS.x64.WordArray.create();\n       *\n       *     var wordArray = CryptoJS.x64.WordArray.create([\n       *         CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n       *         CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n       *     ]);\n       *\n       *     var wordArray = CryptoJS.x64.WordArray.create([\n       *         CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n       *         CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n       *     ], 10);\n       */\n      init: function init(words, sigBytes) {\n        words = this.words = words || [];\n        if (sigBytes != undefined) {\n          this.sigBytes = sigBytes;\n        } else {\n          this.sigBytes = words.length * 8;\n        }\n      },\n      /**\n       * Converts this 64-bit word array to a 32-bit word array.\n       *\n       * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n       *\n       * @example\n       *\n       *     var x32WordArray = x64WordArray.toX32();\n       */\n      toX32: function toX32() {\n        // Shortcuts\n        var x64Words = this.words;\n        var x64WordsLength = x64Words.length;\n\n        // Convert\n        var x32Words = [];\n        for (var i = 0; i < x64WordsLength; i++) {\n          var x64Word = x64Words[i];\n          x32Words.push(x64Word.high);\n          x32Words.push(x64Word.low);\n        }\n        return X32WordArray.create(x32Words, this.sigBytes);\n      },\n      /**\n       * Creates a copy of this word array.\n       *\n       * @return {X64WordArray} The clone.\n       *\n       * @example\n       *\n       *     var clone = x64WordArray.clone();\n       */\n      clone: function clone() {\n        var clone = Base.clone.call(this);\n\n        // Clone \"words\" array\n        var words = clone.words = this.words.slice(0);\n\n        // Clone each X64Word object\n        var wordsLength = words.length;\n        for (var i = 0; i < wordsLength; i++) {\n          words[i] = words[i].clone();\n        }\n        return clone;\n      }\n    });\n  })();\n  return CryptoJS;\n});\n\n/***/ }),\n\n/***/ 9811:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(2443);\n__webpack_require__(3680);\n__webpack_require__(3706);\n__webpack_require__(2703);\n__webpack_require__(489);\n__webpack_require__(4747);\n__webpack_require__(8309);\n__webpack_require__(8674);\n__webpack_require__(1038);\n__webpack_require__(4916);\n__webpack_require__(4723);\n__webpack_require__(2165);\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(8783);\n__webpack_require__(3948);\n__webpack_require__(2526);\n__webpack_require__(1817);\n__webpack_require__(7042);\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = \"function\" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || \"@@iterator\", asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\", toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, \"\"); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: \"normal\", arg: fn.call(obj, arg) }; } catch (err) { return { type: \"throw\", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [\"next\", \"throw\", \"return\"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (\"throw\" !== record.type) { var result = record.arg, value = result.value; return value && \"object\" == typeof value && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke(\"next\", value, resolve, reject); }, function (err) { invoke(\"throw\", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke(\"throw\", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, \"_invoke\", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = \"suspendedStart\"; return function (method, arg) { if (\"executing\" === state) throw new Error(\"Generator is already running\"); if (\"completed\" === state) { if (\"throw\" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) { if (\"suspendedStart\" === state) throw state = \"completed\", context.arg; context.dispatchException(context.arg); } else \"return\" === context.method && context.abrupt(\"return\", context.arg); state = \"executing\"; var record = tryCatch(innerFn, self, context); if (\"normal\" === record.type) { if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, \"throw\" === methodName && delegate.iterator.return && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method) || \"return\" !== methodName && (context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a '\" + methodName + \"' method\")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = \"normal\", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: \"root\" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if (\"function\" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) { var ctor = \"function\" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, \"toString\", function () { return \"[object Generator]\"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if (\"throw\" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if (\"root\" === entry.tryLoc) return handle(\"end\"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, \"catchLoc\"), hasFinally = hasOwn.call(entry, \"finallyLoc\"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error(\"try statement without catch or finally\"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if (\"throw\" === record.type) throw record.arg; return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (\"throw\" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\nvar INITIAL_STATE = 1;\nvar FAIL_STATE = 0;\n/**\n * A StateMachine represents a deterministic finite automaton.\n * It can perform matches over a sequence of values, similar to a regular expression.\n */\nvar StateMachine = /*#__PURE__*/function () {\n  function StateMachine(dfa) {\n    this.stateTable = dfa.stateTable;\n    this.accepting = dfa.accepting;\n    this.tags = dfa.tags;\n  }\n  /**\n   * Returns an iterable object that yields pattern matches over the input sequence.\n   * Matches are of the form [startIndex, endIndex, tags].\n   */\n  var _proto = StateMachine.prototype;\n  _proto.match = function match(str) {\n    var _ref;\n    var self = this;\n    return _ref = {}, _ref[Symbol.iterator] = /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n      var state, startRun, lastAccepting, lastState, p, c;\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\n        while (1) {\n          switch (_context.prev = _context.next) {\n            case 0:\n              state = INITIAL_STATE;\n              startRun = null;\n              lastAccepting = null;\n              lastState = null;\n              p = 0;\n            case 5:\n              if (!(p < str.length)) {\n                _context.next = 21;\n                break;\n              }\n              c = str[p];\n              lastState = state;\n              state = self.stateTable[state][c];\n              if (!(state === FAIL_STATE)) {\n                _context.next = 15;\n                break;\n              }\n              if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) {\n                _context.next = 13;\n                break;\n              }\n              _context.next = 13;\n              return [startRun, lastAccepting, self.tags[lastState]];\n            case 13:\n              // reset the state as if we started over from the initial state\n\n              state = self.stateTable[INITIAL_STATE][c];\n              startRun = null;\n            case 15:\n              // start a run if not in the failure state\n\n              if (state !== FAIL_STATE && startRun == null) {\n                startRun = p;\n              } // if accepting, mark the potential match end\n\n              if (self.accepting[state]) {\n                lastAccepting = p;\n              } // reset the state to the initial state if we get into the failure state\n\n              if (state === FAIL_STATE) {\n                state = INITIAL_STATE;\n              }\n            case 18:\n              p++;\n              _context.next = 5;\n              break;\n            case 21:\n              if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) {\n                _context.next = 24;\n                break;\n              }\n              _context.next = 24;\n              return [startRun, lastAccepting, self.tags[state]];\n            case 24:\n            case \"end\":\n              return _context.stop();\n          }\n        }\n      }, _callee);\n    }), _ref;\n  }\n  /**\n   * For each match over the input sequence, action functions matching\n   * the tag definitions in the input pattern are called with the startIndex,\n   * endIndex, and sub-match sequence.\n   */;\n  _proto.apply = function apply(str, actions) {\n    for (var _iterator = _createForOfIteratorHelperLoose(this.match(str)), _step; !(_step = _iterator()).done;) {\n      var _step$value = _step.value,\n        start = _step$value[0],\n        end = _step$value[1],\n        tags = _step$value[2];\n      for (var _iterator2 = _createForOfIteratorHelperLoose(tags), _step2; !(_step2 = _iterator2()).done;) {\n        var tag = _step2.value;\n        if (typeof actions[tag] === 'function') {\n          actions[tag](start, end, str.slice(start, end + 1));\n        }\n      }\n    }\n  };\n  return StateMachine;\n}();\nmodule.exports = StateMachine;\n\n/***/ }),\n\n/***/ 8478:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\n__webpack_require__(1539);\n__webpack_require__(8674);\n__webpack_require__(7042);\n__webpack_require__(6699);\n/*\n * MIT LICENSE\n * Copyright (c) 2011 Devon Govett\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\n * software and associated documentation files (the \"Software\"), to deal in the Software\n * without restriction, including without limitation the rights to use, copy, modify, merge,\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n * to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nvar fs = __webpack_require__(3857);\nvar zlib = __webpack_require__(2635);\nmodule.exports = /*#__PURE__*/function () {\n  PNG.decode = function decode(path, fn) {\n    return fs.readFile(path, function (err, file) {\n      var png = new PNG(file);\n      return png.decode(function (pixels) {\n        return fn(pixels);\n      });\n    });\n  };\n  PNG.load = function load(path) {\n    var file = fs.readFileSync(path);\n    return new PNG(file);\n  };\n  function PNG(data) {\n    var i;\n    this.data = data;\n    this.pos = 8; // Skip the default header\n\n    this.palette = [];\n    this.imgData = [];\n    this.transparency = {};\n    this.text = {};\n    while (true) {\n      var chunkSize = this.readUInt32();\n      var section = '';\n      for (i = 0; i < 4; i++) {\n        section += String.fromCharCode(this.data[this.pos++]);\n      }\n      switch (section) {\n        case 'IHDR':\n          // we can grab  interesting values from here (like width, height, etc)\n          this.width = this.readUInt32();\n          this.height = this.readUInt32();\n          this.bits = this.data[this.pos++];\n          this.colorType = this.data[this.pos++];\n          this.compressionMethod = this.data[this.pos++];\n          this.filterMethod = this.data[this.pos++];\n          this.interlaceMethod = this.data[this.pos++];\n          break;\n        case 'PLTE':\n          this.palette = this.read(chunkSize);\n          break;\n        case 'IDAT':\n          for (i = 0; i < chunkSize; i++) {\n            this.imgData.push(this.data[this.pos++]);\n          }\n          break;\n        case 'tRNS':\n          // This chunk can only occur once and it must occur after the\n          // PLTE chunk and before the IDAT chunk.\n          this.transparency = {};\n          switch (this.colorType) {\n            case 3:\n              // Indexed color, RGB. Each byte in this chunk is an alpha for\n              // the palette index in the PLTE (\"palette\") chunk up until the\n              // last non-opaque entry. Set up an array, stretching over all\n              // palette entries which will be 0 (opaque) or 1 (transparent).\n              this.transparency.indexed = this.read(chunkSize);\n              var short = 255 - this.transparency.indexed.length;\n              if (short > 0) {\n                for (i = 0; i < short; i++) {\n                  this.transparency.indexed.push(255);\n                }\n              }\n              break;\n            case 0:\n              // Greyscale. Corresponding to entries in the PLTE chunk.\n              // Grey is two bytes, range 0 .. (2 ^ bit-depth) - 1\n              this.transparency.grayscale = this.read(chunkSize)[0];\n              break;\n            case 2:\n              // True color with proper alpha channel.\n              this.transparency.rgb = this.read(chunkSize);\n              break;\n          }\n          break;\n        case 'tEXt':\n          var text = this.read(chunkSize);\n          var index = text.indexOf(0);\n          var key = String.fromCharCode.apply(String, text.slice(0, index));\n          this.text[key] = String.fromCharCode.apply(String, text.slice(index + 1));\n          break;\n        case 'IEND':\n          // we've got everything we need!\n          switch (this.colorType) {\n            case 0:\n            case 3:\n            case 4:\n              this.colors = 1;\n              break;\n            case 2:\n            case 6:\n              this.colors = 3;\n              break;\n          }\n          this.hasAlphaChannel = [4, 6].includes(this.colorType);\n          var colors = this.colors + (this.hasAlphaChannel ? 1 : 0);\n          this.pixelBitlength = this.bits * colors;\n          switch (this.colors) {\n            case 1:\n              this.colorSpace = 'DeviceGray';\n              break;\n            case 3:\n              this.colorSpace = 'DeviceRGB';\n              break;\n          }\n          this.imgData = new Buffer(this.imgData);\n          return;\n          break;\n        default:\n          // unknown (or unimportant) section, skip it\n          this.pos += chunkSize;\n      }\n      this.pos += 4; // Skip the CRC\n\n      if (this.pos > this.data.length) {\n        throw new Error('Incomplete or corrupt PNG file');\n      }\n    }\n  }\n  var _proto = PNG.prototype;\n  _proto.read = function read(bytes) {\n    var result = new Array(bytes);\n    for (var i = 0; i < bytes; i++) {\n      result[i] = this.data[this.pos++];\n    }\n    return result;\n  };\n  _proto.readUInt32 = function readUInt32() {\n    var b1 = this.data[this.pos++] << 24;\n    var b2 = this.data[this.pos++] << 16;\n    var b3 = this.data[this.pos++] << 8;\n    var b4 = this.data[this.pos++];\n    return b1 | b2 | b3 | b4;\n  };\n  _proto.readUInt16 = function readUInt16() {\n    var b1 = this.data[this.pos++] << 8;\n    var b2 = this.data[this.pos++];\n    return b1 | b2;\n  };\n  _proto.decodePixels = function decodePixels(fn) {\n    var _this = this;\n    return zlib.inflate(this.imgData, function (err, data) {\n      if (err) {\n        throw err;\n      }\n      var width = _this.width,\n        height = _this.height;\n      var pixelBytes = _this.pixelBitlength / 8;\n      var pixels = new Buffer(width * height * pixelBytes);\n      var length = data.length;\n      var pos = 0;\n      function pass(x0, y0, dx, dy, singlePass) {\n        if (singlePass === void 0) {\n          singlePass = false;\n        }\n        var w = Math.ceil((width - x0) / dx);\n        var h = Math.ceil((height - y0) / dy);\n        var scanlineLength = pixelBytes * w;\n        var buffer = singlePass ? pixels : new Buffer(scanlineLength * h);\n        var row = 0;\n        var c = 0;\n        while (row < h && pos < length) {\n          var byte, col, i, left, upper;\n          switch (data[pos++]) {\n            case 0:\n              // None\n              for (i = 0; i < scanlineLength; i++) {\n                buffer[c++] = data[pos++];\n              }\n              break;\n            case 1:\n              // Sub\n              for (i = 0; i < scanlineLength; i++) {\n                byte = data[pos++];\n                left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n                buffer[c++] = (byte + left) % 256;\n              }\n              break;\n            case 2:\n              // Up\n              for (i = 0; i < scanlineLength; i++) {\n                byte = data[pos++];\n                col = (i - i % pixelBytes) / pixelBytes;\n                upper = row && buffer[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes];\n                buffer[c++] = (upper + byte) % 256;\n              }\n              break;\n            case 3:\n              // Average\n              for (i = 0; i < scanlineLength; i++) {\n                byte = data[pos++];\n                col = (i - i % pixelBytes) / pixelBytes;\n                left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n                upper = row && buffer[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes];\n                buffer[c++] = (byte + Math.floor((left + upper) / 2)) % 256;\n              }\n              break;\n            case 4:\n              // Paeth\n              for (i = 0; i < scanlineLength; i++) {\n                var paeth, upperLeft;\n                byte = data[pos++];\n                col = (i - i % pixelBytes) / pixelBytes;\n                left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n                if (row === 0) {\n                  upper = upperLeft = 0;\n                } else {\n                  upper = buffer[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes];\n                  upperLeft = col && buffer[(row - 1) * scanlineLength + (col - 1) * pixelBytes + i % pixelBytes];\n                }\n                var p = left + upper - upperLeft;\n                var pa = Math.abs(p - left);\n                var pb = Math.abs(p - upper);\n                var pc = Math.abs(p - upperLeft);\n                if (pa <= pb && pa <= pc) {\n                  paeth = left;\n                } else if (pb <= pc) {\n                  paeth = upper;\n                } else {\n                  paeth = upperLeft;\n                }\n                buffer[c++] = (byte + paeth) % 256;\n              }\n              break;\n            default:\n              throw new Error(\"Invalid filter algorithm: \" + data[pos - 1]);\n          }\n          if (!singlePass) {\n            var pixelsPos = ((y0 + row * dy) * width + x0) * pixelBytes;\n            var bufferPos = row * scanlineLength;\n            for (i = 0; i < w; i++) {\n              for (var j = 0; j < pixelBytes; j++) {\n                pixels[pixelsPos++] = buffer[bufferPos++];\n              }\n              pixelsPos += (dx - 1) * pixelBytes;\n            }\n          }\n          row++;\n        }\n      }\n      if (_this.interlaceMethod === 1) {\n        /*\n          1 6 4 6 2 6 4 6\n          7 7 7 7 7 7 7 7\n          5 6 5 6 5 6 5 6\n          7 7 7 7 7 7 7 7\n          3 6 4 6 3 6 4 6\n          7 7 7 7 7 7 7 7\n          5 6 5 6 5 6 5 6\n          7 7 7 7 7 7 7 7\n        */\n        pass(0, 0, 8, 8); // 1\n        pass(4, 0, 8, 8); // 2\n        pass(0, 4, 4, 8); // 3\n        pass(2, 0, 4, 4); // 4\n        pass(0, 2, 2, 4); // 5\n        pass(1, 0, 2, 2); // 6\n        pass(0, 1, 1, 2); // 7\n      } else {\n        pass(0, 0, 1, 1, true);\n      }\n      return fn(pixels);\n    });\n  };\n  _proto.decodePalette = function decodePalette() {\n    var palette = this.palette;\n    var length = palette.length;\n    var transparency = this.transparency.indexed || [];\n    var ret = new Buffer(transparency.length + length);\n    var pos = 0;\n    var c = 0;\n    for (var i = 0; i < length; i += 3) {\n      var left;\n      ret[pos++] = palette[i];\n      ret[pos++] = palette[i + 1];\n      ret[pos++] = palette[i + 2];\n      ret[pos++] = (left = transparency[c++]) != null ? left : 255;\n    }\n    return ret;\n  };\n  _proto.copyToImageData = function copyToImageData(imageData, pixels) {\n    var j, k;\n    var colors = this.colors;\n    var palette = null;\n    var alpha = this.hasAlphaChannel;\n    if (this.palette.length) {\n      palette = this._decodedPalette || (this._decodedPalette = this.decodePalette());\n      colors = 4;\n      alpha = true;\n    }\n    var data = imageData.data || imageData;\n    var length = data.length;\n    var input = palette || pixels;\n    var i = j = 0;\n    if (colors === 1) {\n      while (i < length) {\n        k = palette ? pixels[i / 4] * 4 : j;\n        var v = input[k++];\n        data[i++] = v;\n        data[i++] = v;\n        data[i++] = v;\n        data[i++] = alpha ? input[k++] : 255;\n        j = k;\n      }\n    } else {\n      while (i < length) {\n        k = palette ? pixels[i / 4] * 4 : j;\n        data[i++] = input[k++];\n        data[i++] = input[k++];\n        data[i++] = input[k++];\n        data[i++] = alpha ? input[k++] : 255;\n        j = k;\n      }\n    }\n  };\n  _proto.decode = function decode(fn) {\n    var _this2 = this;\n    var ret = new Buffer(this.width * this.height * 4);\n    return this.decodePixels(function (pixels) {\n      _this2.copyToImageData(ret, pixels);\n      return fn(ret);\n    });\n  };\n  return PNG;\n}();\n\n/***/ }),\n\n/***/ 7103:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n/* eslint-disable node/no-deprecated-api */\n\n\n\n__webpack_require__(8145);\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(2472);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(3290);\nvar buffer = __webpack_require__(8823);\nvar Buffer = buffer.Buffer;\nvar safer = {};\nvar key;\nfor (key in buffer) {\n  if (!buffer.hasOwnProperty(key)) continue;\n  if (key === 'SlowBuffer' || key === 'Buffer') continue;\n  safer[key] = buffer[key];\n}\nvar Safer = safer.Buffer = {};\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue;\n  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue;\n  Safer[key] = Buffer[key];\n}\nsafer.Buffer.prototype = Buffer.prototype;\nif (!Safer.from || Safer.from === Uint8Array.from) {\n  Safer.from = function (value, encodingOrOffset, length) {\n    if (typeof value === 'number') {\n      throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value);\n    }\n    if (value && typeof value.length === 'undefined') {\n      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value);\n    }\n    return Buffer(value, encodingOrOffset, length);\n  };\n}\nif (!Safer.alloc) {\n  Safer.alloc = function (size, fill, encoding) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size);\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"');\n    }\n    var buf = Buffer(size);\n    if (!fill || fill.length === 0) {\n      buf.fill(0);\n    } else if (typeof encoding === 'string') {\n      buf.fill(fill, encoding);\n    } else {\n      buf.fill(fill);\n    }\n    return buf;\n  };\n}\nif (!safer.kStringMaxLength) {\n  try {\n    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength;\n  } catch (e) {\n    // we can't determine kStringMaxLength in environments where process.binding\n    // is unsupported, so let's not set it\n  }\n}\nif (!safer.constants) {\n  safer.constants = {\n    MAX_LENGTH: safer.kMaxLength\n  };\n  if (safer.kStringMaxLength) {\n    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength;\n  }\n}\nmodule.exports = safer;\n\n/***/ }),\n\n/***/ 3361:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7941);\n__webpack_require__(2526);\n__webpack_require__(7327);\n__webpack_require__(1539);\n__webpack_require__(5003);\n__webpack_require__(4747);\n__webpack_require__(9337);\n__webpack_require__(7042);\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n  return keys;\n}\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n  return target;\n}\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\nvar _require = __webpack_require__(8823),\n  Buffer = _require.Buffer;\nvar _require2 = __webpack_require__(9862),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/\nfunction () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var entry = {\n        data: v,\n        next: this.head\n      };\n      if (this.length === 0) this.tail = entry;\n      this.head = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) {\n        ret += s + p.data;\n      }\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, i);\n        i += p.data.length;\n        p = p.next;\n      }\n      return ret;\n    } // Consumes a specified amount of bytes or characters from the buffered data.\n  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    } // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    } // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    } // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread({}, options, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();\n\n/***/ }),\n\n/***/ 5219:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __dirname = \"/\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = void 0;\n__webpack_require__(7941);\n__webpack_require__(2526);\n__webpack_require__(7327);\n__webpack_require__(1539);\n__webpack_require__(5003);\n__webpack_require__(4747);\n__webpack_require__(9337);\n__webpack_require__(489);\n__webpack_require__(2419);\n__webpack_require__(1817);\n__webpack_require__(2165);\n__webpack_require__(6992);\n__webpack_require__(8783);\n__webpack_require__(3948);\n__webpack_require__(1038);\n__webpack_require__(7042);\n__webpack_require__(8309);\n__webpack_require__(4916);\n__webpack_require__(2707);\n__webpack_require__(2222);\n__webpack_require__(9600);\n__webpack_require__(9714);\n__webpack_require__(5306);\n__webpack_require__(1249);\n__webpack_require__(9841);\n__webpack_require__(4953);\n__webpack_require__(6977);\n__webpack_require__(6699);\n__webpack_require__(5192);\n__webpack_require__(9653);\n__webpack_require__(3123);\n__webpack_require__(4723);\n__webpack_require__(8734);\n__webpack_require__(2472);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(7803);\n__webpack_require__(3290);\n__webpack_require__(9601);\n__webpack_require__(3210);\n__webpack_require__(9254);\n__webpack_require__(7397);\n__webpack_require__(8674);\nvar _stream = _interopRequireDefault(__webpack_require__(2830));\nvar _zlib = _interopRequireDefault(__webpack_require__(2635));\nvar _cryptoJs = _interopRequireDefault(__webpack_require__(5153));\nvar _fontkit = _interopRequireDefault(__webpack_require__(1917));\nvar _events = __webpack_require__(7187);\nvar _linebreak = _interopRequireDefault(__webpack_require__(7337));\nvar _pngJs = _interopRequireDefault(__webpack_require__(8478));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nvar fs = __webpack_require__(3857);\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n  return keys;\n}\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n  return target;\n}\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf(subClass, superClass);\n}\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n  return _setPrototypeOf(o, p);\n}\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n  try {\n    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n  return self;\n}\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n  return _assertThisInitialized(self);\n}\nfunction _createSuper(Derived) {\n  var hasNativeReflectConstruct = _isNativeReflectConstruct();\n  return function _createSuperInternal() {\n    var Super = _getPrototypeOf(Derived),\n      result;\n    if (hasNativeReflectConstruct) {\n      var NewTarget = _getPrototypeOf(this).constructor;\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n    return _possibleConstructorReturn(this, result);\n  };\n}\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\nfunction _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n  return _arr;\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n  return arr2;\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n  var it;\n  if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n    if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n      if (it) o = it;\n      var i = 0;\n      var F = function F() {};\n      return {\n        s: F,\n        n: function n() {\n          if (i >= o.length) return {\n            done: true\n          };\n          return {\n            done: false,\n            value: o[i++]\n          };\n        },\n        e: function e(_e2) {\n          throw _e2;\n        },\n        f: F\n      };\n    }\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n  var normalCompletion = true,\n    didErr = false,\n    err;\n  return {\n    s: function s() {\n      it = o[Symbol.iterator]();\n    },\n    n: function n() {\n      var step = it.next();\n      normalCompletion = step.done;\n      return step;\n    },\n    e: function e(_e3) {\n      didErr = true;\n      err = _e3;\n    },\n    f: function f() {\n      try {\n        if (!normalCompletion && it.return != null) it.return();\n      } finally {\n        if (didErr) throw err;\n      }\n    }\n  };\n}\n\n/*\nPDFAbstractReference - abstract class for PDF reference\n*/\nvar PDFAbstractReference = /*#__PURE__*/function () {\n  function PDFAbstractReference() {\n    _classCallCheck(this, PDFAbstractReference);\n  }\n  _createClass(PDFAbstractReference, [{\n    key: \"toString\",\n    value: function toString() {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }]);\n  return PDFAbstractReference;\n}();\nvar PDFTree = /*#__PURE__*/function () {\n  function PDFTree() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _classCallCheck(this, PDFTree);\n    this._items = {}; // disable /Limits output for this tree\n\n    this.limits = typeof options.limits === 'boolean' ? options.limits : true;\n  }\n  _createClass(PDFTree, [{\n    key: \"add\",\n    value: function add(key, val) {\n      return this._items[key] = val;\n    }\n  }, {\n    key: \"get\",\n    value: function get(key) {\n      return this._items[key];\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      var _this = this;\n\n      // Needs to be sorted by key\n      var sortedKeys = Object.keys(this._items).sort(function (a, b) {\n        return _this._compareKeys(a, b);\n      });\n      var out = ['<<'];\n      if (this.limits && sortedKeys.length > 1) {\n        var first = sortedKeys[0],\n          last = sortedKeys[sortedKeys.length - 1];\n        out.push(\"  /Limits \".concat(PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])));\n      }\n      out.push(\"  /\".concat(this._keysName(), \" [\"));\n      var _iterator = _createForOfIteratorHelper(sortedKeys),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var key = _step.value;\n          out.push(\"    \".concat(PDFObject.convert(this._dataForKey(key)), \" \").concat(PDFObject.convert(this._items[key])));\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      out.push(']');\n      out.push('>>');\n      return out.join('\\n');\n    }\n  }, {\n    key: \"_compareKeys\",\n    value: function _compareKeys() /*a, b*/\n    {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }, {\n    key: \"_keysName\",\n    value: function _keysName() {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }, {\n    key: \"_dataForKey\",\n    value: function _dataForKey() /*k*/\n    {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }]);\n  return PDFTree;\n}();\nvar pad = function pad(str, length) {\n  return (Array(length + 1).join('0') + str).slice(-length);\n};\nvar escapableRe = /[\\n\\r\\t\\b\\f()\\\\]/g;\nvar escapable = {\n  '\\n': '\\\\n',\n  '\\r': '\\\\r',\n  '\\t': '\\\\t',\n  '\\b': '\\\\b',\n  '\\f': '\\\\f',\n  '\\\\': '\\\\\\\\',\n  '(': '\\\\(',\n  ')': '\\\\)'\n}; // Convert little endian UTF-16 to big endian\n\nvar swapBytes = function swapBytes(buff) {\n  var l = buff.length;\n  if (l & 0x01) {\n    throw new Error('Buffer length must be even');\n  } else {\n    for (var i = 0, end = l - 1; i < end; i += 2) {\n      var a = buff[i];\n      buff[i] = buff[i + 1];\n      buff[i + 1] = a;\n    }\n  }\n  return buff;\n};\nvar PDFObject = /*#__PURE__*/function () {\n  function PDFObject() {\n    _classCallCheck(this, PDFObject);\n  }\n  _createClass(PDFObject, null, [{\n    key: \"convert\",\n    value: function convert(object) {\n      var encryptFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      // String literals are converted to the PDF name type\n      if (typeof object === 'string') {\n        return \"/\".concat(object); // String objects are converted to PDF strings (UTF-16)\n      } else if (object instanceof String) {\n        var string = object; // Detect if this is a unicode string\n\n        var isUnicode = false;\n        for (var i = 0, end = string.length; i < end; i++) {\n          if (string.charCodeAt(i) > 0x7f) {\n            isUnicode = true;\n            break;\n          }\n        } // If so, encode it as big endian UTF-16\n\n        var stringBuffer;\n        if (isUnicode) {\n          stringBuffer = swapBytes(Buffer.from(\"\\uFEFF\".concat(string), 'utf16le'));\n        } else {\n          stringBuffer = Buffer.from(string.valueOf(), 'ascii');\n        } // Encrypt the string when necessary\n\n        if (encryptFn) {\n          string = encryptFn(stringBuffer).toString('binary');\n        } else {\n          string = stringBuffer.toString('binary');\n        } // Escape characters as required by the spec\n\n        string = string.replace(escapableRe, function (c) {\n          return escapable[c];\n        });\n        return \"(\".concat(string, \")\"); // Buffers are converted to PDF hex strings\n      } else if (Buffer.isBuffer(object)) {\n        return \"<\".concat(object.toString('hex'), \">\");\n      } else if (object instanceof PDFAbstractReference || object instanceof PDFTree) {\n        return object.toString();\n      } else if (object instanceof Date) {\n        var _string = \"D:\".concat(pad(object.getUTCFullYear(), 4)) + pad(object.getUTCMonth() + 1, 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z'; // Encrypt the string when necessary\n\n        if (encryptFn) {\n          _string = encryptFn(Buffer.from(_string, 'ascii')).toString('binary'); // Escape characters as required by the spec\n\n          _string = _string.replace(escapableRe, function (c) {\n            return escapable[c];\n          });\n        }\n        return \"(\".concat(_string, \")\");\n      } else if (Array.isArray(object)) {\n        var items = object.map(function (e) {\n          return PDFObject.convert(e, encryptFn);\n        }).join(' ');\n        return \"[\".concat(items, \"]\");\n      } else if ({}.toString.call(object) === '[object Object]') {\n        var out = ['<<'];\n        for (var key in object) {\n          var val = object[key];\n          out.push(\"/\".concat(key, \" \").concat(PDFObject.convert(val, encryptFn)));\n        }\n        out.push('>>');\n        return out.join('\\n');\n      } else if (typeof object === 'number') {\n        return PDFObject.number(object);\n      } else {\n        return \"\".concat(object);\n      }\n    }\n  }, {\n    key: \"number\",\n    value: function number(n) {\n      if (n > -1e21 && n < 1e21) {\n        return Math.round(n * 1e6) / 1e6;\n      }\n      throw new Error(\"unsupported number: \".concat(n));\n    }\n  }]);\n  return PDFObject;\n}();\nvar PDFReference = /*#__PURE__*/function (_PDFAbstractReference) {\n  _inherits(PDFReference, _PDFAbstractReference);\n  var _super = _createSuper(PDFReference);\n  function PDFReference(document, id) {\n    var _this;\n    var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    _classCallCheck(this, PDFReference);\n    _this = _super.call(this);\n    _this.document = document;\n    _this.id = id;\n    _this.data = data;\n    _this.gen = 0;\n    _this.compress = _this.document.compress && !_this.data.Filter;\n    _this.uncompressedLength = 0;\n    _this.buffer = [];\n    return _this;\n  }\n  _createClass(PDFReference, [{\n    key: \"write\",\n    value: function write(chunk) {\n      if (!Buffer.isBuffer(chunk)) {\n        chunk = Buffer.from(chunk + '\\n', 'binary');\n      }\n      this.uncompressedLength += chunk.length;\n      if (this.data.Length == null) {\n        this.data.Length = 0;\n      }\n      this.buffer.push(chunk);\n      this.data.Length += chunk.length;\n      if (this.compress) {\n        return this.data.Filter = 'FlateDecode';\n      }\n    }\n  }, {\n    key: \"end\",\n    value: function end(chunk) {\n      if (chunk) {\n        this.write(chunk);\n      }\n      return this.finalize();\n    }\n  }, {\n    key: \"finalize\",\n    value: function finalize() {\n      this.offset = this.document._offset;\n      var encryptFn = this.document._security ? this.document._security.getEncryptFn(this.id, this.gen) : null;\n      if (this.buffer.length) {\n        this.buffer = Buffer.concat(this.buffer);\n        if (this.compress) {\n          this.buffer = _zlib.default.deflateSync(this.buffer);\n        }\n        if (encryptFn) {\n          this.buffer = encryptFn(this.buffer);\n        }\n        this.data.Length = this.buffer.length;\n      }\n      this.document._write(\"\".concat(this.id, \" \").concat(this.gen, \" obj\"));\n      this.document._write(PDFObject.convert(this.data, encryptFn));\n      if (this.buffer.length) {\n        this.document._write('stream');\n        this.document._write(this.buffer);\n        this.buffer = []; // free up memory\n\n        this.document._write('\\nendstream');\n      }\n      this.document._write('endobj');\n      this.document._refEnd(this);\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return \"\".concat(this.id, \" \").concat(this.gen, \" R\");\n    }\n  }]);\n  return PDFReference;\n}(PDFAbstractReference);\n\n/*\nPDFPage - represents a single page in the PDF document\nBy Devon Govett\n*/\nvar DEFAULT_MARGINS = {\n  top: 72,\n  left: 72,\n  bottom: 72,\n  right: 72\n};\nvar SIZES = {\n  '4A0': [4767.87, 6740.79],\n  '2A0': [3370.39, 4767.87],\n  A0: [2383.94, 3370.39],\n  A1: [1683.78, 2383.94],\n  A2: [1190.55, 1683.78],\n  A3: [841.89, 1190.55],\n  A4: [595.28, 841.89],\n  A5: [419.53, 595.28],\n  A6: [297.64, 419.53],\n  A7: [209.76, 297.64],\n  A8: [147.4, 209.76],\n  A9: [104.88, 147.4],\n  A10: [73.7, 104.88],\n  B0: [2834.65, 4008.19],\n  B1: [2004.09, 2834.65],\n  B2: [1417.32, 2004.09],\n  B3: [1000.63, 1417.32],\n  B4: [708.66, 1000.63],\n  B5: [498.9, 708.66],\n  B6: [354.33, 498.9],\n  B7: [249.45, 354.33],\n  B8: [175.75, 249.45],\n  B9: [124.72, 175.75],\n  B10: [87.87, 124.72],\n  C0: [2599.37, 3676.54],\n  C1: [1836.85, 2599.37],\n  C2: [1298.27, 1836.85],\n  C3: [918.43, 1298.27],\n  C4: [649.13, 918.43],\n  C5: [459.21, 649.13],\n  C6: [323.15, 459.21],\n  C7: [229.61, 323.15],\n  C8: [161.57, 229.61],\n  C9: [113.39, 161.57],\n  C10: [79.37, 113.39],\n  RA0: [2437.8, 3458.27],\n  RA1: [1729.13, 2437.8],\n  RA2: [1218.9, 1729.13],\n  RA3: [864.57, 1218.9],\n  RA4: [609.45, 864.57],\n  SRA0: [2551.18, 3628.35],\n  SRA1: [1814.17, 2551.18],\n  SRA2: [1275.59, 1814.17],\n  SRA3: [907.09, 1275.59],\n  SRA4: [637.8, 907.09],\n  EXECUTIVE: [521.86, 756.0],\n  FOLIO: [612.0, 936.0],\n  LEGAL: [612.0, 1008.0],\n  LETTER: [612.0, 792.0],\n  TABLOID: [792.0, 1224.0]\n};\nvar PDFPage = /*#__PURE__*/function () {\n  function PDFPage(document) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    _classCallCheck(this, PDFPage);\n    this.document = document;\n    this.size = options.size || 'letter';\n    this.layout = options.layout || 'portrait'; // process margins\n\n    if (typeof options.margin === 'number') {\n      this.margins = {\n        top: options.margin,\n        left: options.margin,\n        bottom: options.margin,\n        right: options.margin\n      }; // default to 1 inch margins\n    } else {\n      this.margins = options.margins || DEFAULT_MARGINS;\n    } // calculate page dimensions\n\n    var dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()];\n    this.width = dimensions[this.layout === 'portrait' ? 0 : 1];\n    this.height = dimensions[this.layout === 'portrait' ? 1 : 0];\n    this.content = this.document.ref(); // Initialize the Font, XObject, and ExtGState dictionaries\n\n    this.resources = this.document.ref({\n      ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']\n    }); // The page dictionary\n\n    this.dictionary = this.document.ref({\n      Type: 'Page',\n      Parent: this.document._root.data.Pages,\n      MediaBox: [0, 0, this.width, this.height],\n      Contents: this.content,\n      Resources: this.resources\n    });\n    this.markings = [];\n  } // Lazily create these objects\n\n  _createClass(PDFPage, [{\n    key: \"maxY\",\n    value: function maxY() {\n      return this.height - this.margins.bottom;\n    }\n  }, {\n    key: \"write\",\n    value: function write(chunk) {\n      return this.content.write(chunk);\n    }\n  }, {\n    key: \"end\",\n    value: function end() {\n      this.dictionary.end();\n      this.resources.end();\n      return this.content.end();\n    }\n  }, {\n    key: \"fonts\",\n    get: function get() {\n      var data = this.resources.data;\n      return data.Font != null ? data.Font : data.Font = {};\n    }\n  }, {\n    key: \"xobjects\",\n    get: function get() {\n      var data = this.resources.data;\n      return data.XObject != null ? data.XObject : data.XObject = {};\n    }\n  }, {\n    key: \"ext_gstates\",\n    get: function get() {\n      var data = this.resources.data;\n      return data.ExtGState != null ? data.ExtGState : data.ExtGState = {};\n    }\n  }, {\n    key: \"patterns\",\n    get: function get() {\n      var data = this.resources.data;\n      return data.Pattern != null ? data.Pattern : data.Pattern = {};\n    }\n  }, {\n    key: \"colorSpaces\",\n    get: function get() {\n      var data = this.resources.data;\n      return data.ColorSpace || (data.ColorSpace = {});\n    }\n  }, {\n    key: \"annotations\",\n    get: function get() {\n      var data = this.dictionary.data;\n      return data.Annots != null ? data.Annots : data.Annots = [];\n    }\n  }, {\n    key: \"structParentTreeKey\",\n    get: function get() {\n      var data = this.dictionary.data;\n      return data.StructParents != null ? data.StructParents : data.StructParents = this.document.createStructParentTreeNextKey();\n    }\n  }]);\n  return PDFPage;\n}();\nvar PDFNameTree = /*#__PURE__*/function (_PDFTree) {\n  _inherits(PDFNameTree, _PDFTree);\n  var _super = _createSuper(PDFNameTree);\n  function PDFNameTree() {\n    _classCallCheck(this, PDFNameTree);\n    return _super.apply(this, arguments);\n  }\n  _createClass(PDFNameTree, [{\n    key: \"_compareKeys\",\n    value: function _compareKeys(a, b) {\n      return a.localeCompare(b);\n    }\n  }, {\n    key: \"_keysName\",\n    value: function _keysName() {\n      return \"Names\";\n    }\n  }, {\n    key: \"_dataForKey\",\n    value: function _dataForKey(k) {\n      return new String(k);\n    }\n  }]);\n  return PDFNameTree;\n}(PDFTree);\n\n/**\n * Check if value is in a range group.\n * @param {number} value\n * @param {number[]} rangeGroup\n * @returns {boolean}\n */\nfunction inRange(value, rangeGroup) {\n  if (value < rangeGroup[0]) return false;\n  var startRange = 0;\n  var endRange = rangeGroup.length / 2;\n  while (startRange <= endRange) {\n    var middleRange = Math.floor((startRange + endRange) / 2); // actual array index\n\n    var arrayIndex = middleRange * 2; // Check if value is in range pointed by actual index\n\n    if (value >= rangeGroup[arrayIndex] && value <= rangeGroup[arrayIndex + 1]) {\n      return true;\n    }\n    if (value > rangeGroup[arrayIndex + 1]) {\n      // Search Right Side Of Array\n      startRange = middleRange + 1;\n    } else {\n      // Search Left Side Of Array\n      endRange = middleRange - 1;\n    }\n  }\n  return false;\n}\n\n/**\n * A.1 Unassigned code points in Unicode 3.2\n * @link https://tools.ietf.org/html/rfc3454#appendix-A.1\n */\n\nvar unassigned_code_points = [0x0221, 0x0221, 0x0234, 0x024f, 0x02ae, 0x02af, 0x02ef, 0x02ff, 0x0350, 0x035f, 0x0370, 0x0373, 0x0376, 0x0379, 0x037b, 0x037d, 0x037f, 0x0383, 0x038b, 0x038b, 0x038d, 0x038d, 0x03a2, 0x03a2, 0x03cf, 0x03cf, 0x03f7, 0x03ff, 0x0487, 0x0487, 0x04cf, 0x04cf, 0x04f6, 0x04f7, 0x04fa, 0x04ff, 0x0510, 0x0530, 0x0557, 0x0558, 0x0560, 0x0560, 0x0588, 0x0588, 0x058b, 0x0590, 0x05a2, 0x05a2, 0x05ba, 0x05ba, 0x05c5, 0x05cf, 0x05eb, 0x05ef, 0x05f5, 0x060b, 0x060d, 0x061a, 0x061c, 0x061e, 0x0620, 0x0620, 0x063b, 0x063f, 0x0656, 0x065f, 0x06ee, 0x06ef, 0x06ff, 0x06ff, 0x070e, 0x070e, 0x072d, 0x072f, 0x074b, 0x077f, 0x07b2, 0x0900, 0x0904, 0x0904, 0x093a, 0x093b, 0x094e, 0x094f, 0x0955, 0x0957, 0x0971, 0x0980, 0x0984, 0x0984, 0x098d, 0x098e, 0x0991, 0x0992, 0x09a9, 0x09a9, 0x09b1, 0x09b1, 0x09b3, 0x09b5, 0x09ba, 0x09bb, 0x09bd, 0x09bd, 0x09c5, 0x09c6, 0x09c9, 0x09ca, 0x09ce, 0x09d6, 0x09d8, 0x09db, 0x09de, 0x09de, 0x09e4, 0x09e5, 0x09fb, 0x0a01, 0x0a03, 0x0a04, 0x0a0b, 0x0a0e, 0x0a11, 0x0a12, 0x0a29, 0x0a29, 0x0a31, 0x0a31, 0x0a34, 0x0a34, 0x0a37, 0x0a37, 0x0a3a, 0x0a3b, 0x0a3d, 0x0a3d, 0x0a43, 0x0a46, 0x0a49, 0x0a4a, 0x0a4e, 0x0a58, 0x0a5d, 0x0a5d, 0x0a5f, 0x0a65, 0x0a75, 0x0a80, 0x0a84, 0x0a84, 0x0a8c, 0x0a8c, 0x0a8e, 0x0a8e, 0x0a92, 0x0a92, 0x0aa9, 0x0aa9, 0x0ab1, 0x0ab1, 0x0ab4, 0x0ab4, 0x0aba, 0x0abb, 0x0ac6, 0x0ac6, 0x0aca, 0x0aca, 0x0ace, 0x0acf, 0x0ad1, 0x0adf, 0x0ae1, 0x0ae5, 0x0af0, 0x0b00, 0x0b04, 0x0b04, 0x0b0d, 0x0b0e, 0x0b11, 0x0b12, 0x0b29, 0x0b29, 0x0b31, 0x0b31, 0x0b34, 0x0b35, 0x0b3a, 0x0b3b, 0x0b44, 0x0b46, 0x0b49, 0x0b4a, 0x0b4e, 0x0b55, 0x0b58, 0x0b5b, 0x0b5e, 0x0b5e, 0x0b62, 0x0b65, 0x0b71, 0x0b81, 0x0b84, 0x0b84, 0x0b8b, 0x0b8d, 0x0b91, 0x0b91, 0x0b96, 0x0b98, 0x0b9b, 0x0b9b, 0x0b9d, 0x0b9d, 0x0ba0, 0x0ba2, 0x0ba5, 0x0ba7, 0x0bab, 0x0bad, 0x0bb6, 0x0bb6, 0x0bba, 0x0bbd, 0x0bc3, 0x0bc5, 0x0bc9, 0x0bc9, 0x0bce, 0x0bd6, 0x0bd8, 0x0be6, 0x0bf3, 0x0c00, 0x0c04, 0x0c04, 0x0c0d, 0x0c0d, 0x0c11, 0x0c11, 0x0c29, 0x0c29, 0x0c34, 0x0c34, 0x0c3a, 0x0c3d, 0x0c45, 0x0c45, 0x0c49, 0x0c49, 0x0c4e, 0x0c54, 0x0c57, 0x0c5f, 0x0c62, 0x0c65, 0x0c70, 0x0c81, 0x0c84, 0x0c84, 0x0c8d, 0x0c8d, 0x0c91, 0x0c91, 0x0ca9, 0x0ca9, 0x0cb4, 0x0cb4, 0x0cba, 0x0cbd, 0x0cc5, 0x0cc5, 0x0cc9, 0x0cc9, 0x0cce, 0x0cd4, 0x0cd7, 0x0cdd, 0x0cdf, 0x0cdf, 0x0ce2, 0x0ce5, 0x0cf0, 0x0d01, 0x0d04, 0x0d04, 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d29, 0x0d29, 0x0d3a, 0x0d3d, 0x0d44, 0x0d45, 0x0d49, 0x0d49, 0x0d4e, 0x0d56, 0x0d58, 0x0d5f, 0x0d62, 0x0d65, 0x0d70, 0x0d81, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, 0x0dbc, 0x0dbc, 0x0dbe, 0x0dbf, 0x0dc7, 0x0dc9, 0x0dcb, 0x0dce, 0x0dd5, 0x0dd5, 0x0dd7, 0x0dd7, 0x0de0, 0x0df1, 0x0df5, 0x0e00, 0x0e3b, 0x0e3e, 0x0e5c, 0x0e80, 0x0e83, 0x0e83, 0x0e85, 0x0e86, 0x0e89, 0x0e89, 0x0e8b, 0x0e8c, 0x0e8e, 0x0e93, 0x0e98, 0x0e98, 0x0ea0, 0x0ea0, 0x0ea4, 0x0ea4, 0x0ea6, 0x0ea6, 0x0ea8, 0x0ea9, 0x0eac, 0x0eac, 0x0eba, 0x0eba, 0x0ebe, 0x0ebf, 0x0ec5, 0x0ec5, 0x0ec7, 0x0ec7, 0x0ece, 0x0ecf, 0x0eda, 0x0edb, 0x0ede, 0x0eff, 0x0f48, 0x0f48, 0x0f6b, 0x0f70, 0x0f8c, 0x0f8f, 0x0f98, 0x0f98, 0x0fbd, 0x0fbd, 0x0fcd, 0x0fce, 0x0fd0, 0x0fff, 0x1022, 0x1022, 0x1028, 0x1028, 0x102b, 0x102b, 0x1033, 0x1035, 0x103a, 0x103f, 0x105a, 0x109f, 0x10c6, 0x10cf, 0x10f9, 0x10fa, 0x10fc, 0x10ff, 0x115a, 0x115e, 0x11a3, 0x11a7, 0x11fa, 0x11ff, 0x1207, 0x1207, 0x1247, 0x1247, 0x1249, 0x1249, 0x124e, 0x124f, 0x1257, 0x1257, 0x1259, 0x1259, 0x125e, 0x125f, 0x1287, 0x1287, 0x1289, 0x1289, 0x128e, 0x128f, 0x12af, 0x12af, 0x12b1, 0x12b1, 0x12b6, 0x12b7, 0x12bf, 0x12bf, 0x12c1, 0x12c1, 0x12c6, 0x12c7, 0x12cf, 0x12cf, 0x12d7, 0x12d7, 0x12ef, 0x12ef, 0x130f, 0x130f, 0x1311, 0x1311, 0x1316, 0x1317, 0x131f, 0x131f, 0x1347, 0x1347, 0x135b, 0x1360, 0x137d, 0x139f, 0x13f5, 0x1400, 0x1677, 0x167f, 0x169d, 0x169f, 0x16f1, 0x16ff, 0x170d, 0x170d, 0x1715, 0x171f, 0x1737, 0x173f, 0x1754, 0x175f, 0x176d, 0x176d, 0x1771, 0x1771, 0x1774, 0x177f, 0x17dd, 0x17df, 0x17ea, 0x17ff, 0x180f, 0x180f, 0x181a, 0x181f, 0x1878, 0x187f, 0x18aa, 0x1dff, 0x1e9c, 0x1e9f, 0x1efa, 0x1eff, 0x1f16, 0x1f17, 0x1f1e, 0x1f1f, 0x1f46, 0x1f47, 0x1f4e, 0x1f4f, 0x1f58, 0x1f58, 0x1f5a, 0x1f5a, 0x1f5c, 0x1f5c, 0x1f5e, 0x1f5e, 0x1f7e, 0x1f7f, 0x1fb5, 0x1fb5, 0x1fc5, 0x1fc5, 0x1fd4, 0x1fd5, 0x1fdc, 0x1fdc, 0x1ff0, 0x1ff1, 0x1ff5, 0x1ff5, 0x1fff, 0x1fff, 0x2053, 0x2056, 0x2058, 0x205e, 0x2064, 0x2069, 0x2072, 0x2073, 0x208f, 0x209f, 0x20b2, 0x20cf, 0x20eb, 0x20ff, 0x213b, 0x213c, 0x214c, 0x2152, 0x2184, 0x218f, 0x23cf, 0x23ff, 0x2427, 0x243f, 0x244b, 0x245f, 0x24ff, 0x24ff, 0x2614, 0x2615, 0x2618, 0x2618, 0x267e, 0x267f, 0x268a, 0x2700, 0x2705, 0x2705, 0x270a, 0x270b, 0x2728, 0x2728, 0x274c, 0x274c, 0x274e, 0x274e, 0x2753, 0x2755, 0x2757, 0x2757, 0x275f, 0x2760, 0x2795, 0x2797, 0x27b0, 0x27b0, 0x27bf, 0x27cf, 0x27ec, 0x27ef, 0x2b00, 0x2e7f, 0x2e9a, 0x2e9a, 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, 0x2ffc, 0x2fff, 0x3040, 0x3040, 0x3097, 0x3098, 0x3100, 0x3104, 0x312d, 0x3130, 0x318f, 0x318f, 0x31b8, 0x31ef, 0x321d, 0x321f, 0x3244, 0x3250, 0x327c, 0x327e, 0x32cc, 0x32cf, 0x32ff, 0x32ff, 0x3377, 0x337a, 0x33de, 0x33df, 0x33ff, 0x33ff, 0x4db6, 0x4dff, 0x9fa6, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xabff, 0xd7a4, 0xd7ff, 0xfa2e, 0xfa2f, 0xfa6b, 0xfaff, 0xfb07, 0xfb12, 0xfb18, 0xfb1c, 0xfb37, 0xfb37, 0xfb3d, 0xfb3d, 0xfb3f, 0xfb3f, 0xfb42, 0xfb42, 0xfb45, 0xfb45, 0xfbb2, 0xfbd2, 0xfd40, 0xfd4f, 0xfd90, 0xfd91, 0xfdc8, 0xfdcf, 0xfdfd, 0xfdff, 0xfe10, 0xfe1f, 0xfe24, 0xfe2f, 0xfe47, 0xfe48, 0xfe53, 0xfe53, 0xfe67, 0xfe67, 0xfe6c, 0xfe6f, 0xfe75, 0xfe75, 0xfefd, 0xfefe, 0xff00, 0xff00, 0xffbf, 0xffc1, 0xffc8, 0xffc9, 0xffd0, 0xffd1, 0xffd8, 0xffd9, 0xffdd, 0xffdf, 0xffe7, 0xffe7, 0xffef, 0xfff8, 0x10000, 0x102ff, 0x1031f, 0x1031f, 0x10324, 0x1032f, 0x1034b, 0x103ff, 0x10426, 0x10427, 0x1044e, 0x1cfff, 0x1d0f6, 0x1d0ff, 0x1d127, 0x1d129, 0x1d1de, 0x1d3ff, 0x1d455, 0x1d455, 0x1d49d, 0x1d49d, 0x1d4a0, 0x1d4a1, 0x1d4a3, 0x1d4a4, 0x1d4a7, 0x1d4a8, 0x1d4ad, 0x1d4ad, 0x1d4ba, 0x1d4ba, 0x1d4bc, 0x1d4bc, 0x1d4c1, 0x1d4c1, 0x1d4c4, 0x1d4c4, 0x1d506, 0x1d506, 0x1d50b, 0x1d50c, 0x1d515, 0x1d515, 0x1d51d, 0x1d51d, 0x1d53a, 0x1d53a, 0x1d53f, 0x1d53f, 0x1d545, 0x1d545, 0x1d547, 0x1d549, 0x1d551, 0x1d551, 0x1d6a4, 0x1d6a7, 0x1d7ca, 0x1d7cd, 0x1d800, 0x1fffd, 0x2a6d7, 0x2f7ff, 0x2fa1e, 0x2fffd, 0x30000, 0x3fffd, 0x40000, 0x4fffd, 0x50000, 0x5fffd, 0x60000, 0x6fffd, 0x70000, 0x7fffd, 0x80000, 0x8fffd, 0x90000, 0x9fffd, 0xa0000, 0xafffd, 0xb0000, 0xbfffd, 0xc0000, 0xcfffd, 0xd0000, 0xdfffd, 0xe0000, 0xe0000, 0xe0002, 0xe001f, 0xe0080, 0xefffd]; // prettier-ignore-end\n\nvar isUnassignedCodePoint = function isUnassignedCodePoint(character) {\n  return inRange(character, unassigned_code_points);\n}; // prettier-ignore-start\n\n/**\n * B.1 Commonly mapped to nothing\n * @link https://tools.ietf.org/html/rfc3454#appendix-B.1\n */\n\nvar commonly_mapped_to_nothing = [0x00ad, 0x00ad, 0x034f, 0x034f, 0x1806, 0x1806, 0x180b, 0x180b, 0x180c, 0x180c, 0x180d, 0x180d, 0x200b, 0x200b, 0x200c, 0x200c, 0x200d, 0x200d, 0x2060, 0x2060, 0xfe00, 0xfe00, 0xfe01, 0xfe01, 0xfe02, 0xfe02, 0xfe03, 0xfe03, 0xfe04, 0xfe04, 0xfe05, 0xfe05, 0xfe06, 0xfe06, 0xfe07, 0xfe07, 0xfe08, 0xfe08, 0xfe09, 0xfe09, 0xfe0a, 0xfe0a, 0xfe0b, 0xfe0b, 0xfe0c, 0xfe0c, 0xfe0d, 0xfe0d, 0xfe0e, 0xfe0e, 0xfe0f, 0xfe0f, 0xfeff, 0xfeff]; // prettier-ignore-end\n\nvar isCommonlyMappedToNothing = function isCommonlyMappedToNothing(character) {\n  return inRange(character, commonly_mapped_to_nothing);\n}; // prettier-ignore-start\n\n/**\n * C.1.2 Non-ASCII space characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2\n */\n\nvar non_ASCII_space_characters = [0x00a0, 0x00a0\n/* NO-BREAK SPACE */, 0x1680, 0x1680\n/* OGHAM SPACE MARK */, 0x2000, 0x2000\n/* EN QUAD */, 0x2001, 0x2001\n/* EM QUAD */, 0x2002, 0x2002\n/* EN SPACE */, 0x2003, 0x2003\n/* EM SPACE */, 0x2004, 0x2004\n/* THREE-PER-EM SPACE */, 0x2005, 0x2005\n/* FOUR-PER-EM SPACE */, 0x2006, 0x2006\n/* SIX-PER-EM SPACE */, 0x2007, 0x2007\n/* FIGURE SPACE */, 0x2008, 0x2008\n/* PUNCTUATION SPACE */, 0x2009, 0x2009\n/* THIN SPACE */, 0x200a, 0x200a\n/* HAIR SPACE */, 0x200b, 0x200b\n/* ZERO WIDTH SPACE */, 0x202f, 0x202f\n/* NARROW NO-BREAK SPACE */, 0x205f, 0x205f\n/* MEDIUM MATHEMATICAL SPACE */, 0x3000, 0x3000\n/* IDEOGRAPHIC SPACE */]; // prettier-ignore-end\n\nvar isNonASCIISpaceCharacter = function isNonASCIISpaceCharacter(character) {\n  return inRange(character, non_ASCII_space_characters);\n}; // prettier-ignore-start\n\nvar non_ASCII_controls_characters = [\n/**\n * C.2.2 Non-ASCII control characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2\n */\n0x0080, 0x009f\n/* [CONTROL CHARACTERS] */, 0x06dd, 0x06dd\n/* ARABIC END OF AYAH */, 0x070f, 0x070f\n/* SYRIAC ABBREVIATION MARK */, 0x180e, 0x180e\n/* MONGOLIAN VOWEL SEPARATOR */, 0x200c, 0x200c\n/* ZERO WIDTH NON-JOINER */, 0x200d, 0x200d\n/* ZERO WIDTH JOINER */, 0x2028, 0x2028\n/* LINE SEPARATOR */, 0x2029, 0x2029\n/* PARAGRAPH SEPARATOR */, 0x2060, 0x2060\n/* WORD JOINER */, 0x2061, 0x2061\n/* FUNCTION APPLICATION */, 0x2062, 0x2062\n/* INVISIBLE TIMES */, 0x2063, 0x2063\n/* INVISIBLE SEPARATOR */, 0x206a, 0x206f\n/* [CONTROL CHARACTERS] */, 0xfeff, 0xfeff\n/* ZERO WIDTH NO-BREAK SPACE */, 0xfff9, 0xfffc\n/* [CONTROL CHARACTERS] */, 0x1d173, 0x1d17a\n/* [MUSICAL CONTROL CHARACTERS] */];\n\nvar non_character_codepoints = [\n/**\n * C.4 Non-character code points\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.4\n */\n0xfdd0, 0xfdef\n/* [NONCHARACTER CODE POINTS] */, 0xfffe, 0xffff\n/* [NONCHARACTER CODE POINTS] */, 0x1fffe, 0x1ffff\n/* [NONCHARACTER CODE POINTS] */, 0x2fffe, 0x2ffff\n/* [NONCHARACTER CODE POINTS] */, 0x3fffe, 0x3ffff\n/* [NONCHARACTER CODE POINTS] */, 0x4fffe, 0x4ffff\n/* [NONCHARACTER CODE POINTS] */, 0x5fffe, 0x5ffff\n/* [NONCHARACTER CODE POINTS] */, 0x6fffe, 0x6ffff\n/* [NONCHARACTER CODE POINTS] */, 0x7fffe, 0x7ffff\n/* [NONCHARACTER CODE POINTS] */, 0x8fffe, 0x8ffff\n/* [NONCHARACTER CODE POINTS] */, 0x9fffe, 0x9ffff\n/* [NONCHARACTER CODE POINTS] */, 0xafffe, 0xaffff\n/* [NONCHARACTER CODE POINTS] */, 0xbfffe, 0xbffff\n/* [NONCHARACTER CODE POINTS] */, 0xcfffe, 0xcffff\n/* [NONCHARACTER CODE POINTS] */, 0xdfffe, 0xdffff\n/* [NONCHARACTER CODE POINTS] */, 0xefffe, 0xeffff\n/* [NONCHARACTER CODE POINTS] */, 0x10fffe, 0x10ffff\n/* [NONCHARACTER CODE POINTS] */];\n/**\n * 2.3.  Prohibited Output\n */\n\nvar prohibited_characters = [\n/**\n * C.2.1 ASCII control characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1\n */\n0, 0x001f\n/* [CONTROL CHARACTERS] */, 0x007f, 0x007f\n/* DELETE */,\n/**\n * C.8 Change display properties or are deprecated\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.8\n */\n0x0340, 0x0340\n/* COMBINING GRAVE TONE MARK */, 0x0341, 0x0341\n/* COMBINING ACUTE TONE MARK */, 0x200e, 0x200e\n/* LEFT-TO-RIGHT MARK */, 0x200f, 0x200f\n/* RIGHT-TO-LEFT MARK */, 0x202a, 0x202a\n/* LEFT-TO-RIGHT EMBEDDING */, 0x202b, 0x202b\n/* RIGHT-TO-LEFT EMBEDDING */, 0x202c, 0x202c\n/* POP DIRECTIONAL FORMATTING */, 0x202d, 0x202d\n/* LEFT-TO-RIGHT OVERRIDE */, 0x202e, 0x202e\n/* RIGHT-TO-LEFT OVERRIDE */, 0x206a, 0x206a\n/* INHIBIT SYMMETRIC SWAPPING */, 0x206b, 0x206b\n/* ACTIVATE SYMMETRIC SWAPPING */, 0x206c, 0x206c\n/* INHIBIT ARABIC FORM SHAPING */, 0x206d, 0x206d\n/* ACTIVATE ARABIC FORM SHAPING */, 0x206e, 0x206e\n/* NATIONAL DIGIT SHAPES */, 0x206f, 0x206f\n/* NOMINAL DIGIT SHAPES */,\n/**\n * C.7 Inappropriate for canonical representation\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.7\n */\n0x2ff0, 0x2ffb\n/* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */,\n/**\n * C.5 Surrogate codes\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.5\n */\n0xd800, 0xdfff,\n/**\n * C.3 Private use\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\n */\n0xe000, 0xf8ff\n/* [PRIVATE USE, PLANE 0] */,\n/**\n * C.6 Inappropriate for plain text\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.6\n */\n0xfff9, 0xfff9\n/* INTERLINEAR ANNOTATION ANCHOR */, 0xfffa, 0xfffa\n/* INTERLINEAR ANNOTATION SEPARATOR */, 0xfffb, 0xfffb\n/* INTERLINEAR ANNOTATION TERMINATOR */, 0xfffc, 0xfffc\n/* OBJECT REPLACEMENT CHARACTER */, 0xfffd, 0xfffd\n/* REPLACEMENT CHARACTER */,\n/**\n * C.9 Tagging characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.9\n */\n0xe0001, 0xe0001\n/* LANGUAGE TAG */, 0xe0020, 0xe007f\n/* [TAGGING CHARACTERS] */,\n/**\n * C.3 Private use\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\n */\n0xf0000, 0xffffd\n/* [PRIVATE USE, PLANE 15] */, 0x100000, 0x10fffd\n/* [PRIVATE USE, PLANE 16] */]; // prettier-ignore-end\n\nvar isProhibitedCharacter = function isProhibitedCharacter(character) {\n  return inRange(character, non_ASCII_space_characters) || inRange(character, prohibited_characters) || inRange(character, non_ASCII_controls_characters) || inRange(character, non_character_codepoints);\n}; // prettier-ignore-start\n\n/**\n * D.1 Characters with bidirectional property \"R\" or \"AL\"\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.1\n */\n\nvar bidirectional_r_al = [0x05be, 0x05be, 0x05c0, 0x05c0, 0x05c3, 0x05c3, 0x05d0, 0x05ea, 0x05f0, 0x05f4, 0x061b, 0x061b, 0x061f, 0x061f, 0x0621, 0x063a, 0x0640, 0x064a, 0x066d, 0x066f, 0x0671, 0x06d5, 0x06dd, 0x06dd, 0x06e5, 0x06e6, 0x06fa, 0x06fe, 0x0700, 0x070d, 0x0710, 0x0710, 0x0712, 0x072c, 0x0780, 0x07a5, 0x07b1, 0x07b1, 0x200f, 0x200f, 0xfb1d, 0xfb1d, 0xfb1f, 0xfb28, 0xfb2a, 0xfb36, 0xfb38, 0xfb3c, 0xfb3e, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44, 0xfb46, 0xfbb1, 0xfbd3, 0xfd3d, 0xfd50, 0xfd8f, 0xfd92, 0xfdc7, 0xfdf0, 0xfdfc, 0xfe70, 0xfe74, 0xfe76, 0xfefc]; // prettier-ignore-end\n\nvar isBidirectionalRAL = function isBidirectionalRAL(character) {\n  return inRange(character, bidirectional_r_al);\n}; // prettier-ignore-start\n\n/**\n * D.2 Characters with bidirectional property \"L\"\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.2\n */\n\nvar bidirectional_l = [0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, 0x00b5, 0x00b5, 0x00ba, 0x00ba, 0x00c0, 0x00d6, 0x00d8, 0x00f6, 0x00f8, 0x0220, 0x0222, 0x0233, 0x0250, 0x02ad, 0x02b0, 0x02b8, 0x02bb, 0x02c1, 0x02d0, 0x02d1, 0x02e0, 0x02e4, 0x02ee, 0x02ee, 0x037a, 0x037a, 0x0386, 0x0386, 0x0388, 0x038a, 0x038c, 0x038c, 0x038e, 0x03a1, 0x03a3, 0x03ce, 0x03d0, 0x03f5, 0x0400, 0x0482, 0x048a, 0x04ce, 0x04d0, 0x04f5, 0x04f8, 0x04f9, 0x0500, 0x050f, 0x0531, 0x0556, 0x0559, 0x055f, 0x0561, 0x0587, 0x0589, 0x0589, 0x0903, 0x0903, 0x0905, 0x0939, 0x093d, 0x0940, 0x0949, 0x094c, 0x0950, 0x0950, 0x0958, 0x0961, 0x0964, 0x0970, 0x0982, 0x0983, 0x0985, 0x098c, 0x098f, 0x0990, 0x0993, 0x09a8, 0x09aa, 0x09b0, 0x09b2, 0x09b2, 0x09b6, 0x09b9, 0x09be, 0x09c0, 0x09c7, 0x09c8, 0x09cb, 0x09cc, 0x09d7, 0x09d7, 0x09dc, 0x09dd, 0x09df, 0x09e1, 0x09e6, 0x09f1, 0x09f4, 0x09fa, 0x0a05, 0x0a0a, 0x0a0f, 0x0a10, 0x0a13, 0x0a28, 0x0a2a, 0x0a30, 0x0a32, 0x0a33, 0x0a35, 0x0a36, 0x0a38, 0x0a39, 0x0a3e, 0x0a40, 0x0a59, 0x0a5c, 0x0a5e, 0x0a5e, 0x0a66, 0x0a6f, 0x0a72, 0x0a74, 0x0a83, 0x0a83, 0x0a85, 0x0a8b, 0x0a8d, 0x0a8d, 0x0a8f, 0x0a91, 0x0a93, 0x0aa8, 0x0aaa, 0x0ab0, 0x0ab2, 0x0ab3, 0x0ab5, 0x0ab9, 0x0abd, 0x0ac0, 0x0ac9, 0x0ac9, 0x0acb, 0x0acc, 0x0ad0, 0x0ad0, 0x0ae0, 0x0ae0, 0x0ae6, 0x0aef, 0x0b02, 0x0b03, 0x0b05, 0x0b0c, 0x0b0f, 0x0b10, 0x0b13, 0x0b28, 0x0b2a, 0x0b30, 0x0b32, 0x0b33, 0x0b36, 0x0b39, 0x0b3d, 0x0b3e, 0x0b40, 0x0b40, 0x0b47, 0x0b48, 0x0b4b, 0x0b4c, 0x0b57, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b61, 0x0b66, 0x0b70, 0x0b83, 0x0b83, 0x0b85, 0x0b8a, 0x0b8e, 0x0b90, 0x0b92, 0x0b95, 0x0b99, 0x0b9a, 0x0b9c, 0x0b9c, 0x0b9e, 0x0b9f, 0x0ba3, 0x0ba4, 0x0ba8, 0x0baa, 0x0bae, 0x0bb5, 0x0bb7, 0x0bb9, 0x0bbe, 0x0bbf, 0x0bc1, 0x0bc2, 0x0bc6, 0x0bc8, 0x0bca, 0x0bcc, 0x0bd7, 0x0bd7, 0x0be7, 0x0bf2, 0x0c01, 0x0c03, 0x0c05, 0x0c0c, 0x0c0e, 0x0c10, 0x0c12, 0x0c28, 0x0c2a, 0x0c33, 0x0c35, 0x0c39, 0x0c41, 0x0c44, 0x0c60, 0x0c61, 0x0c66, 0x0c6f, 0x0c82, 0x0c83, 0x0c85, 0x0c8c, 0x0c8e, 0x0c90, 0x0c92, 0x0ca8, 0x0caa, 0x0cb3, 0x0cb5, 0x0cb9, 0x0cbe, 0x0cbe, 0x0cc0, 0x0cc4, 0x0cc7, 0x0cc8, 0x0cca, 0x0ccb, 0x0cd5, 0x0cd6, 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0ce6, 0x0cef, 0x0d02, 0x0d03, 0x0d05, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d28, 0x0d2a, 0x0d39, 0x0d3e, 0x0d40, 0x0d46, 0x0d48, 0x0d4a, 0x0d4c, 0x0d57, 0x0d57, 0x0d60, 0x0d61, 0x0d66, 0x0d6f, 0x0d82, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, 0x0dbd, 0x0dbd, 0x0dc0, 0x0dc6, 0x0dcf, 0x0dd1, 0x0dd8, 0x0ddf, 0x0df2, 0x0df4, 0x0e01, 0x0e30, 0x0e32, 0x0e33, 0x0e40, 0x0e46, 0x0e4f, 0x0e5b, 0x0e81, 0x0e82, 0x0e84, 0x0e84, 0x0e87, 0x0e88, 0x0e8a, 0x0e8a, 0x0e8d, 0x0e8d, 0x0e94, 0x0e97, 0x0e99, 0x0e9f, 0x0ea1, 0x0ea3, 0x0ea5, 0x0ea5, 0x0ea7, 0x0ea7, 0x0eaa, 0x0eab, 0x0ead, 0x0eb0, 0x0eb2, 0x0eb3, 0x0ebd, 0x0ebd, 0x0ec0, 0x0ec4, 0x0ec6, 0x0ec6, 0x0ed0, 0x0ed9, 0x0edc, 0x0edd, 0x0f00, 0x0f17, 0x0f1a, 0x0f34, 0x0f36, 0x0f36, 0x0f38, 0x0f38, 0x0f3e, 0x0f47, 0x0f49, 0x0f6a, 0x0f7f, 0x0f7f, 0x0f85, 0x0f85, 0x0f88, 0x0f8b, 0x0fbe, 0x0fc5, 0x0fc7, 0x0fcc, 0x0fcf, 0x0fcf, 0x1000, 0x1021, 0x1023, 0x1027, 0x1029, 0x102a, 0x102c, 0x102c, 0x1031, 0x1031, 0x1038, 0x1038, 0x1040, 0x1057, 0x10a0, 0x10c5, 0x10d0, 0x10f8, 0x10fb, 0x10fb, 0x1100, 0x1159, 0x115f, 0x11a2, 0x11a8, 0x11f9, 0x1200, 0x1206, 0x1208, 0x1246, 0x1248, 0x1248, 0x124a, 0x124d, 0x1250, 0x1256, 0x1258, 0x1258, 0x125a, 0x125d, 0x1260, 0x1286, 0x1288, 0x1288, 0x128a, 0x128d, 0x1290, 0x12ae, 0x12b0, 0x12b0, 0x12b2, 0x12b5, 0x12b8, 0x12be, 0x12c0, 0x12c0, 0x12c2, 0x12c5, 0x12c8, 0x12ce, 0x12d0, 0x12d6, 0x12d8, 0x12ee, 0x12f0, 0x130e, 0x1310, 0x1310, 0x1312, 0x1315, 0x1318, 0x131e, 0x1320, 0x1346, 0x1348, 0x135a, 0x1361, 0x137c, 0x13a0, 0x13f4, 0x1401, 0x1676, 0x1681, 0x169a, 0x16a0, 0x16f0, 0x1700, 0x170c, 0x170e, 0x1711, 0x1720, 0x1731, 0x1735, 0x1736, 0x1740, 0x1751, 0x1760, 0x176c, 0x176e, 0x1770, 0x1780, 0x17b6, 0x17be, 0x17c5, 0x17c7, 0x17c8, 0x17d4, 0x17da, 0x17dc, 0x17dc, 0x17e0, 0x17e9, 0x1810, 0x1819, 0x1820, 0x1877, 0x1880, 0x18a8, 0x1e00, 0x1e9b, 0x1ea0, 0x1ef9, 0x1f00, 0x1f15, 0x1f18, 0x1f1d, 0x1f20, 0x1f45, 0x1f48, 0x1f4d, 0x1f50, 0x1f57, 0x1f59, 0x1f59, 0x1f5b, 0x1f5b, 0x1f5d, 0x1f5d, 0x1f5f, 0x1f7d, 0x1f80, 0x1fb4, 0x1fb6, 0x1fbc, 0x1fbe, 0x1fbe, 0x1fc2, 0x1fc4, 0x1fc6, 0x1fcc, 0x1fd0, 0x1fd3, 0x1fd6, 0x1fdb, 0x1fe0, 0x1fec, 0x1ff2, 0x1ff4, 0x1ff6, 0x1ffc, 0x200e, 0x200e, 0x2071, 0x2071, 0x207f, 0x207f, 0x2102, 0x2102, 0x2107, 0x2107, 0x210a, 0x2113, 0x2115, 0x2115, 0x2119, 0x211d, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, 0x212a, 0x212d, 0x212f, 0x2131, 0x2133, 0x2139, 0x213d, 0x213f, 0x2145, 0x2149, 0x2160, 0x2183, 0x2336, 0x237a, 0x2395, 0x2395, 0x249c, 0x24e9, 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303c, 0x3041, 0x3096, 0x309d, 0x309f, 0x30a1, 0x30fa, 0x30fc, 0x30ff, 0x3105, 0x312c, 0x3131, 0x318e, 0x3190, 0x31b7, 0x31f0, 0x321c, 0x3220, 0x3243, 0x3260, 0x327b, 0x327f, 0x32b0, 0x32c0, 0x32cb, 0x32d0, 0x32fe, 0x3300, 0x3376, 0x337b, 0x33dd, 0x33e0, 0x33fe, 0x3400, 0x4db5, 0x4e00, 0x9fa5, 0xa000, 0xa48c, 0xac00, 0xd7a3, 0xd800, 0xfa2d, 0xfa30, 0xfa6a, 0xfb00, 0xfb06, 0xfb13, 0xfb17, 0xff21, 0xff3a, 0xff41, 0xff5a, 0xff66, 0xffbe, 0xffc2, 0xffc7, 0xffca, 0xffcf, 0xffd2, 0xffd7, 0xffda, 0xffdc, 0x10300, 0x1031e, 0x10320, 0x10323, 0x10330, 0x1034a, 0x10400, 0x10425, 0x10428, 0x1044d, 0x1d000, 0x1d0f5, 0x1d100, 0x1d126, 0x1d12a, 0x1d166, 0x1d16a, 0x1d172, 0x1d183, 0x1d184, 0x1d18c, 0x1d1a9, 0x1d1ae, 0x1d1dd, 0x1d400, 0x1d454, 0x1d456, 0x1d49c, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4a9, 0x1d4ac, 0x1d4ae, 0x1d4b9, 0x1d4bb, 0x1d4bb, 0x1d4bd, 0x1d4c0, 0x1d4c2, 0x1d4c3, 0x1d4c5, 0x1d505, 0x1d507, 0x1d50a, 0x1d50d, 0x1d514, 0x1d516, 0x1d51c, 0x1d51e, 0x1d539, 0x1d53b, 0x1d53e, 0x1d540, 0x1d544, 0x1d546, 0x1d546, 0x1d54a, 0x1d550, 0x1d552, 0x1d6a3, 0x1d6a8, 0x1d7c9, 0x20000, 0x2a6d6, 0x2f800, 0x2fa1d, 0xf0000, 0xffffd, 0x100000, 0x10fffd]; // prettier-ignore-end\n\nvar isBidirectionalL = function isBidirectionalL(character) {\n  return inRange(character, bidirectional_l);\n};\n\n/**\n * non-ASCII space characters [StringPrep, C.1.2] that can be\n * mapped to SPACE (U+0020)\n */\n\nvar mapping2space = isNonASCIISpaceCharacter;\n/**\n * the \"commonly mapped to nothing\" characters [StringPrep, B.1]\n * that can be mapped to nothing.\n */\n\nvar mapping2nothing = isCommonlyMappedToNothing; // utils\n\nvar getCodePoint = function getCodePoint(character) {\n  return character.codePointAt(0);\n};\nvar first = function first(x) {\n  return x[0];\n};\nvar last = function last(x) {\n  return x[x.length - 1];\n};\n/**\n * Convert provided string into an array of Unicode Code Points.\n * Based on https://stackoverflow.com/a/21409165/1556249\n * and https://www.npmjs.com/package/code-point-at.\n * @param {string} input\n * @returns {number[]}\n */\n\nfunction toCodePoints(input) {\n  var codepoints = [];\n  var size = input.length;\n  for (var i = 0; i < size; i += 1) {\n    var before = input.charCodeAt(i);\n    if (before >= 0xd800 && before <= 0xdbff && size > i + 1) {\n      var next = input.charCodeAt(i + 1);\n      if (next >= 0xdc00 && next <= 0xdfff) {\n        codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);\n        i += 1;\n        continue;\n      }\n    }\n    codepoints.push(before);\n  }\n  return codepoints;\n}\n/**\n * SASLprep.\n * @param {string} input\n * @param {Object} opts\n * @param {boolean} opts.allowUnassigned\n * @returns {string}\n */\n\nfunction saslprep(input) {\n  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected string.');\n  }\n  if (input.length === 0) {\n    return '';\n  } // 1. Map\n\n  var mapped_input = toCodePoints(input) // 1.1 mapping to space\n  .map(function (character) {\n    return mapping2space(character) ? 0x20 : character;\n  }) // 1.2 mapping to nothing\n  .filter(function (character) {\n    return !mapping2nothing(character);\n  }); // 2. Normalize\n\n  var normalized_input = String.fromCodePoint.apply(null, mapped_input).normalize('NFKC');\n  var normalized_map = toCodePoints(normalized_input); // 3. Prohibit\n\n  var hasProhibited = normalized_map.some(isProhibitedCharacter);\n  if (hasProhibited) {\n    throw new Error('Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3');\n  } // Unassigned Code Points\n\n  if (opts.allowUnassigned !== true) {\n    var hasUnassigned = normalized_map.some(isUnassignedCodePoint);\n    if (hasUnassigned) {\n      throw new Error('Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5');\n    }\n  } // 4. check bidi\n\n  var hasBidiRAL = normalized_map.some(isBidirectionalRAL);\n  var hasBidiL = normalized_map.some(isBidirectionalL); // 4.1 If a string contains any RandALCat character, the string MUST NOT\n  // contain any LCat character.\n\n  if (hasBidiRAL && hasBidiL) {\n    throw new Error('String must not contain RandALCat and LCat at the same time,' + ' see https://tools.ietf.org/html/rfc3454#section-6');\n  }\n  /**\n   * 4.2 If a string contains any RandALCat character, a RandALCat\n   * character MUST be the first character of the string, and a\n   * RandALCat character MUST be the last character of the string.\n   */\n\n  var isFirstBidiRAL = isBidirectionalRAL(getCodePoint(first(normalized_input)));\n  var isLastBidiRAL = isBidirectionalRAL(getCodePoint(last(normalized_input)));\n  if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) {\n    throw new Error('Bidirectional RandALCat character must be the first and the last' + ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6');\n  }\n  return normalized_input;\n}\nvar PDFSecurity = /*#__PURE__*/function () {\n  _createClass(PDFSecurity, null, [{\n    key: \"generateFileID\",\n    value: function generateFileID() {\n      var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var infoStr = \"\".concat(info.CreationDate.getTime(), \"\\n\");\n      for (var key in info) {\n        // eslint-disable-next-line no-prototype-builtins\n        if (!info.hasOwnProperty(key)) {\n          continue;\n        }\n        infoStr += \"\".concat(key, \": \").concat(info[key].valueOf(), \"\\n\");\n      }\n      return wordArrayToBuffer(_cryptoJs.default.MD5(infoStr));\n    }\n  }, {\n    key: \"generateRandomWordArray\",\n    value: function generateRandomWordArray(bytes) {\n      return _cryptoJs.default.lib.WordArray.random(bytes);\n    }\n  }, {\n    key: \"create\",\n    value: function create(document) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      if (!options.ownerPassword && !options.userPassword) {\n        return null;\n      }\n      return new PDFSecurity(document, options);\n    }\n  }]);\n  function PDFSecurity(document) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    _classCallCheck(this, PDFSecurity);\n    if (!options.ownerPassword && !options.userPassword) {\n      throw new Error('None of owner password and user password is defined.');\n    }\n    this.document = document;\n    this._setupEncryption(options);\n  }\n  _createClass(PDFSecurity, [{\n    key: \"_setupEncryption\",\n    value: function _setupEncryption(options) {\n      switch (options.pdfVersion) {\n        case '1.4':\n        case '1.5':\n          this.version = 2;\n          break;\n        case '1.6':\n        case '1.7':\n          this.version = 4;\n          break;\n        case '1.7ext3':\n          this.version = 5;\n          break;\n        default:\n          this.version = 1;\n          break;\n      }\n      var encDict = {\n        Filter: 'Standard'\n      };\n      switch (this.version) {\n        case 1:\n        case 2:\n        case 4:\n          this._setupEncryptionV1V2V4(this.version, encDict, options);\n          break;\n        case 5:\n          this._setupEncryptionV5(encDict, options);\n          break;\n      }\n      this.dictionary = this.document.ref(encDict);\n    }\n  }, {\n    key: \"_setupEncryptionV1V2V4\",\n    value: function _setupEncryptionV1V2V4(v, encDict, options) {\n      var r, permissions;\n      switch (v) {\n        case 1:\n          r = 2;\n          this.keyBits = 40;\n          permissions = getPermissionsR2(options.permissions);\n          break;\n        case 2:\n          r = 3;\n          this.keyBits = 128;\n          permissions = getPermissionsR3(options.permissions);\n          break;\n        case 4:\n          r = 4;\n          this.keyBits = 128;\n          permissions = getPermissionsR3(options.permissions);\n          break;\n      }\n      var paddedUserPassword = processPasswordR2R3R4(options.userPassword);\n      var paddedOwnerPassword = options.ownerPassword ? processPasswordR2R3R4(options.ownerPassword) : paddedUserPassword;\n      var ownerPasswordEntry = getOwnerPasswordR2R3R4(r, this.keyBits, paddedUserPassword, paddedOwnerPassword);\n      this.encryptionKey = getEncryptionKeyR2R3R4(r, this.keyBits, this.document._id, paddedUserPassword, ownerPasswordEntry, permissions);\n      var userPasswordEntry;\n      if (r === 2) {\n        userPasswordEntry = getUserPasswordR2(this.encryptionKey);\n      } else {\n        userPasswordEntry = getUserPasswordR3R4(this.document._id, this.encryptionKey);\n      }\n      encDict.V = v;\n      if (v >= 2) {\n        encDict.Length = this.keyBits;\n      }\n      if (v === 4) {\n        encDict.CF = {\n          StdCF: {\n            AuthEvent: 'DocOpen',\n            CFM: 'AESV2',\n            Length: this.keyBits / 8\n          }\n        };\n        encDict.StmF = 'StdCF';\n        encDict.StrF = 'StdCF';\n      }\n      encDict.R = r;\n      encDict.O = wordArrayToBuffer(ownerPasswordEntry);\n      encDict.U = wordArrayToBuffer(userPasswordEntry);\n      encDict.P = permissions;\n    }\n  }, {\n    key: \"_setupEncryptionV5\",\n    value: function _setupEncryptionV5(encDict, options) {\n      this.keyBits = 256;\n      var permissions = getPermissionsR3(options.permissions);\n      var processedUserPassword = processPasswordR5(options.userPassword);\n      var processedOwnerPassword = options.ownerPassword ? processPasswordR5(options.ownerPassword) : processedUserPassword;\n      this.encryptionKey = getEncryptionKeyR5(PDFSecurity.generateRandomWordArray);\n      var userPasswordEntry = getUserPasswordR5(processedUserPassword, PDFSecurity.generateRandomWordArray);\n      var userKeySalt = _cryptoJs.default.lib.WordArray.create(userPasswordEntry.words.slice(10, 12), 8);\n      var userEncryptionKeyEntry = getUserEncryptionKeyR5(processedUserPassword, userKeySalt, this.encryptionKey);\n      var ownerPasswordEntry = getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, PDFSecurity.generateRandomWordArray);\n      var ownerKeySalt = _cryptoJs.default.lib.WordArray.create(ownerPasswordEntry.words.slice(10, 12), 8);\n      var ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, this.encryptionKey);\n      var permsEntry = getEncryptedPermissionsR5(permissions, this.encryptionKey, PDFSecurity.generateRandomWordArray);\n      encDict.V = 5;\n      encDict.Length = this.keyBits;\n      encDict.CF = {\n        StdCF: {\n          AuthEvent: 'DocOpen',\n          CFM: 'AESV3',\n          Length: this.keyBits / 8\n        }\n      };\n      encDict.StmF = 'StdCF';\n      encDict.StrF = 'StdCF';\n      encDict.R = 5;\n      encDict.O = wordArrayToBuffer(ownerPasswordEntry);\n      encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry);\n      encDict.U = wordArrayToBuffer(userPasswordEntry);\n      encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry);\n      encDict.P = permissions;\n      encDict.Perms = wordArrayToBuffer(permsEntry);\n    }\n  }, {\n    key: \"getEncryptFn\",\n    value: function getEncryptFn(obj, gen) {\n      var digest;\n      if (this.version < 5) {\n        digest = this.encryptionKey.clone().concat(_cryptoJs.default.lib.WordArray.create([(obj & 0xff) << 24 | (obj & 0xff00) << 8 | obj >> 8 & 0xff00 | gen & 0xff, (gen & 0xff00) << 16], 5));\n      }\n      if (this.version === 1 || this.version === 2) {\n        var _key = _cryptoJs.default.MD5(digest);\n        _key.sigBytes = Math.min(16, this.keyBits / 8 + 5);\n        return function (buffer) {\n          return wordArrayToBuffer(_cryptoJs.default.RC4.encrypt(_cryptoJs.default.lib.WordArray.create(buffer), _key).ciphertext);\n        };\n      }\n      var key;\n      if (this.version === 4) {\n        key = _cryptoJs.default.MD5(digest.concat(_cryptoJs.default.lib.WordArray.create([0x73416c54], 4)));\n      } else {\n        key = this.encryptionKey;\n      }\n      var iv = PDFSecurity.generateRandomWordArray(16);\n      var options = {\n        mode: _cryptoJs.default.mode.CBC,\n        padding: _cryptoJs.default.pad.Pkcs7,\n        iv: iv\n      };\n      return function (buffer) {\n        return wordArrayToBuffer(iv.clone().concat(_cryptoJs.default.AES.encrypt(_cryptoJs.default.lib.WordArray.create(buffer), key, options).ciphertext));\n      };\n    }\n  }, {\n    key: \"end\",\n    value: function end() {\n      this.dictionary.end();\n    }\n  }]);\n  return PDFSecurity;\n}();\nfunction getPermissionsR2() {\n  var permissionObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var permissions = 0xffffffc0 >> 0;\n  if (permissionObject.printing) {\n    permissions |= 4;\n  }\n  if (permissionObject.modifying) {\n    permissions |= 8;\n  }\n  if (permissionObject.copying) {\n    permissions |= 16;\n  }\n  if (permissionObject.annotating) {\n    permissions |= 32;\n  }\n  return permissions;\n}\nfunction getPermissionsR3() {\n  var permissionObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var permissions = 0xfffff0c0 >> 0;\n  if (permissionObject.printing === 'lowResolution') {\n    permissions |= 4;\n  }\n  if (permissionObject.printing === 'highResolution') {\n    permissions |= 2052;\n  }\n  if (permissionObject.modifying) {\n    permissions |= 8;\n  }\n  if (permissionObject.copying) {\n    permissions |= 16;\n  }\n  if (permissionObject.annotating) {\n    permissions |= 32;\n  }\n  if (permissionObject.fillingForms) {\n    permissions |= 256;\n  }\n  if (permissionObject.contentAccessibility) {\n    permissions |= 512;\n  }\n  if (permissionObject.documentAssembly) {\n    permissions |= 1024;\n  }\n  return permissions;\n}\nfunction getUserPasswordR2(encryptionKey) {\n  return _cryptoJs.default.RC4.encrypt(processPasswordR2R3R4(), encryptionKey).ciphertext;\n}\nfunction getUserPasswordR3R4(documentId, encryptionKey) {\n  var key = encryptionKey.clone();\n  var cipher = _cryptoJs.default.MD5(processPasswordR2R3R4().concat(_cryptoJs.default.lib.WordArray.create(documentId)));\n  for (var i = 0; i < 20; i++) {\n    var xorRound = Math.ceil(key.sigBytes / 4);\n    for (var j = 0; j < xorRound; j++) {\n      key.words[j] = encryptionKey.words[j] ^ (i | i << 8 | i << 16 | i << 24);\n    }\n    cipher = _cryptoJs.default.RC4.encrypt(cipher, key).ciphertext;\n  }\n  return cipher.concat(_cryptoJs.default.lib.WordArray.create(null, 16));\n}\nfunction getOwnerPasswordR2R3R4(r, keyBits, paddedUserPassword, paddedOwnerPassword) {\n  var digest = paddedOwnerPassword;\n  var round = r >= 3 ? 51 : 1;\n  for (var i = 0; i < round; i++) {\n    digest = _cryptoJs.default.MD5(digest);\n  }\n  var key = digest.clone();\n  key.sigBytes = keyBits / 8;\n  var cipher = paddedUserPassword;\n  round = r >= 3 ? 20 : 1;\n  for (var _i = 0; _i < round; _i++) {\n    var xorRound = Math.ceil(key.sigBytes / 4);\n    for (var j = 0; j < xorRound; j++) {\n      key.words[j] = digest.words[j] ^ (_i | _i << 8 | _i << 16 | _i << 24);\n    }\n    cipher = _cryptoJs.default.RC4.encrypt(cipher, key).ciphertext;\n  }\n  return cipher;\n}\nfunction getEncryptionKeyR2R3R4(r, keyBits, documentId, paddedUserPassword, ownerPasswordEntry, permissions) {\n  var key = paddedUserPassword.clone().concat(ownerPasswordEntry).concat(_cryptoJs.default.lib.WordArray.create([lsbFirstWord(permissions)], 4)).concat(_cryptoJs.default.lib.WordArray.create(documentId));\n  var round = r >= 3 ? 51 : 1;\n  for (var i = 0; i < round; i++) {\n    key = _cryptoJs.default.MD5(key);\n    key.sigBytes = keyBits / 8;\n  }\n  return key;\n}\nfunction getUserPasswordR5(processedUserPassword, generateRandomWordArray) {\n  var validationSalt = generateRandomWordArray(8);\n  var keySalt = generateRandomWordArray(8);\n  return _cryptoJs.default.SHA256(processedUserPassword.clone().concat(validationSalt)).concat(validationSalt).concat(keySalt);\n}\nfunction getUserEncryptionKeyR5(processedUserPassword, userKeySalt, encryptionKey) {\n  var key = _cryptoJs.default.SHA256(processedUserPassword.clone().concat(userKeySalt));\n  var options = {\n    mode: _cryptoJs.default.mode.CBC,\n    padding: _cryptoJs.default.pad.NoPadding,\n    iv: _cryptoJs.default.lib.WordArray.create(null, 16)\n  };\n  return _cryptoJs.default.AES.encrypt(encryptionKey, key, options).ciphertext;\n}\nfunction getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, generateRandomWordArray) {\n  var validationSalt = generateRandomWordArray(8);\n  var keySalt = generateRandomWordArray(8);\n  return _cryptoJs.default.SHA256(processedOwnerPassword.clone().concat(validationSalt).concat(userPasswordEntry)).concat(validationSalt).concat(keySalt);\n}\nfunction getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, encryptionKey) {\n  var key = _cryptoJs.default.SHA256(processedOwnerPassword.clone().concat(ownerKeySalt).concat(userPasswordEntry));\n  var options = {\n    mode: _cryptoJs.default.mode.CBC,\n    padding: _cryptoJs.default.pad.NoPadding,\n    iv: _cryptoJs.default.lib.WordArray.create(null, 16)\n  };\n  return _cryptoJs.default.AES.encrypt(encryptionKey, key, options).ciphertext;\n}\nfunction getEncryptionKeyR5(generateRandomWordArray) {\n  return generateRandomWordArray(32);\n}\nfunction getEncryptedPermissionsR5(permissions, encryptionKey, generateRandomWordArray) {\n  var cipher = _cryptoJs.default.lib.WordArray.create([lsbFirstWord(permissions), 0xffffffff, 0x54616462], 12).concat(generateRandomWordArray(4));\n  var options = {\n    mode: _cryptoJs.default.mode.ECB,\n    padding: _cryptoJs.default.pad.NoPadding\n  };\n  return _cryptoJs.default.AES.encrypt(cipher, encryptionKey, options).ciphertext;\n}\nfunction processPasswordR2R3R4() {\n  var password = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  var out = Buffer.alloc(32);\n  var length = password.length;\n  var index = 0;\n  while (index < length && index < 32) {\n    var code = password.charCodeAt(index);\n    if (code > 0xff) {\n      throw new Error('Password contains one or more invalid characters.');\n    }\n    out[index] = code;\n    index++;\n  }\n  while (index < 32) {\n    out[index] = PASSWORD_PADDING[index - length];\n    index++;\n  }\n  return _cryptoJs.default.lib.WordArray.create(out);\n}\nfunction processPasswordR5() {\n  var password = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  password = unescape(encodeURIComponent(saslprep(password)));\n  var length = Math.min(127, password.length);\n  var out = Buffer.alloc(length);\n  for (var i = 0; i < length; i++) {\n    out[i] = password.charCodeAt(i);\n  }\n  return _cryptoJs.default.lib.WordArray.create(out);\n}\nfunction lsbFirstWord(data) {\n  return (data & 0xff) << 24 | (data & 0xff00) << 8 | data >> 8 & 0xff00 | data >> 24 & 0xff;\n}\nfunction wordArrayToBuffer(wordArray) {\n  var byteArray = [];\n  for (var i = 0; i < wordArray.sigBytes; i++) {\n    byteArray.push(wordArray.words[Math.floor(i / 4)] >> 8 * (3 - i % 4) & 0xff);\n  }\n  return Buffer.from(byteArray);\n}\nvar PASSWORD_PADDING = [0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a];\nvar number = PDFObject.number;\nvar PDFGradient = /*#__PURE__*/function () {\n  function PDFGradient(doc) {\n    _classCallCheck(this, PDFGradient);\n    this.doc = doc;\n    this.stops = [];\n    this.embedded = false;\n    this.transform = [1, 0, 0, 1, 0, 0];\n  }\n  _createClass(PDFGradient, [{\n    key: \"stop\",\n    value: function stop(pos, color, opacity) {\n      if (opacity == null) {\n        opacity = 1;\n      }\n      color = this.doc._normalizeColor(color);\n      if (this.stops.length === 0) {\n        if (color.length === 3) {\n          this._colorSpace = 'DeviceRGB';\n        } else if (color.length === 4) {\n          this._colorSpace = 'DeviceCMYK';\n        } else if (color.length === 1) {\n          this._colorSpace = 'DeviceGray';\n        } else {\n          throw new Error('Unknown color space');\n        }\n      } else if (this._colorSpace === 'DeviceRGB' && color.length !== 3 || this._colorSpace === 'DeviceCMYK' && color.length !== 4 || this._colorSpace === 'DeviceGray' && color.length !== 1) {\n        throw new Error('All gradient stops must use the same color space');\n      }\n      opacity = Math.max(0, Math.min(1, opacity));\n      this.stops.push([pos, color, opacity]);\n      return this;\n    }\n  }, {\n    key: \"setTransform\",\n    value: function setTransform(m11, m12, m21, m22, dx, dy) {\n      this.transform = [m11, m12, m21, m22, dx, dy];\n      return this;\n    }\n  }, {\n    key: \"embed\",\n    value: function embed(m) {\n      var fn;\n      var stopsLength = this.stops.length;\n      if (stopsLength === 0) {\n        return;\n      }\n      this.embedded = true;\n      this.matrix = m; // if the last stop comes before 100%, add a copy at 100%\n\n      var last = this.stops[stopsLength - 1];\n      if (last[0] < 1) {\n        this.stops.push([1, last[1], last[2]]);\n      }\n      var bounds = [];\n      var encode = [];\n      var stops = [];\n      for (var i = 0; i < stopsLength - 1; i++) {\n        encode.push(0, 1);\n        if (i + 2 !== stopsLength) {\n          bounds.push(this.stops[i + 1][0]);\n        }\n        fn = this.doc.ref({\n          FunctionType: 2,\n          Domain: [0, 1],\n          C0: this.stops[i + 0][1],\n          C1: this.stops[i + 1][1],\n          N: 1\n        });\n        stops.push(fn);\n        fn.end();\n      } // if there are only two stops, we don't need a stitching function\n\n      if (stopsLength === 1) {\n        fn = stops[0];\n      } else {\n        fn = this.doc.ref({\n          FunctionType: 3,\n          // stitching function\n          Domain: [0, 1],\n          Functions: stops,\n          Bounds: bounds,\n          Encode: encode\n        });\n        fn.end();\n      }\n      this.id = \"Sh\".concat(++this.doc._gradCount);\n      var shader = this.shader(fn);\n      shader.end();\n      var pattern = this.doc.ref({\n        Type: 'Pattern',\n        PatternType: 2,\n        Shading: shader,\n        Matrix: this.matrix.map(number)\n      });\n      pattern.end();\n      if (this.stops.some(function (stop) {\n        return stop[2] < 1;\n      })) {\n        var grad = this.opacityGradient();\n        grad._colorSpace = 'DeviceGray';\n        var _iterator = _createForOfIteratorHelper(this.stops),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var stop = _step.value;\n            grad.stop(stop[0], [stop[2]]);\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n        grad = grad.embed(this.matrix);\n        var pageBBox = [0, 0, this.doc.page.width, this.doc.page.height];\n        var form = this.doc.ref({\n          Type: 'XObject',\n          Subtype: 'Form',\n          FormType: 1,\n          BBox: pageBBox,\n          Group: {\n            Type: 'Group',\n            S: 'Transparency',\n            CS: 'DeviceGray'\n          },\n          Resources: {\n            ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n            Pattern: {\n              Sh1: grad\n            }\n          }\n        });\n        form.write('/Pattern cs /Sh1 scn');\n        form.end(\"\".concat(pageBBox.join(' '), \" re f\"));\n        var gstate = this.doc.ref({\n          Type: 'ExtGState',\n          SMask: {\n            Type: 'Mask',\n            S: 'Luminosity',\n            G: form\n          }\n        });\n        gstate.end();\n        var opacityPattern = this.doc.ref({\n          Type: 'Pattern',\n          PatternType: 1,\n          PaintType: 1,\n          TilingType: 2,\n          BBox: pageBBox,\n          XStep: pageBBox[2],\n          YStep: pageBBox[3],\n          Resources: {\n            ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n            Pattern: {\n              Sh1: pattern\n            },\n            ExtGState: {\n              Gs1: gstate\n            }\n          }\n        });\n        opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn');\n        opacityPattern.end(\"\".concat(pageBBox.join(' '), \" re f\"));\n        this.doc.page.patterns[this.id] = opacityPattern;\n      } else {\n        this.doc.page.patterns[this.id] = pattern;\n      }\n      return pattern;\n    }\n  }, {\n    key: \"apply\",\n    value: function apply(stroke) {\n      // apply gradient transform to existing document ctm\n      var _this$doc$_ctm = _slicedToArray(this.doc._ctm, 6),\n        m0 = _this$doc$_ctm[0],\n        m1 = _this$doc$_ctm[1],\n        m2 = _this$doc$_ctm[2],\n        m3 = _this$doc$_ctm[3],\n        m4 = _this$doc$_ctm[4],\n        m5 = _this$doc$_ctm[5];\n      var _this$transform = _slicedToArray(this.transform, 6),\n        m11 = _this$transform[0],\n        m12 = _this$transform[1],\n        m21 = _this$transform[2],\n        m22 = _this$transform[3],\n        dx = _this$transform[4],\n        dy = _this$transform[5];\n      var m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5];\n      if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) {\n        this.embed(m);\n      }\n      this.doc._setColorSpace('Pattern', stroke);\n      var op = stroke ? 'SCN' : 'scn';\n      return this.doc.addContent(\"/\".concat(this.id, \" \").concat(op));\n    }\n  }]);\n  return PDFGradient;\n}();\nvar PDFLinearGradient = /*#__PURE__*/function (_PDFGradient) {\n  _inherits(PDFLinearGradient, _PDFGradient);\n  var _super = _createSuper(PDFLinearGradient);\n  function PDFLinearGradient(doc, x1, y1, x2, y2) {\n    var _this;\n    _classCallCheck(this, PDFLinearGradient);\n    _this = _super.call(this, doc);\n    _this.x1 = x1;\n    _this.y1 = y1;\n    _this.x2 = x2;\n    _this.y2 = y2;\n    return _this;\n  }\n  _createClass(PDFLinearGradient, [{\n    key: \"shader\",\n    value: function shader(fn) {\n      return this.doc.ref({\n        ShadingType: 2,\n        ColorSpace: this._colorSpace,\n        Coords: [this.x1, this.y1, this.x2, this.y2],\n        Function: fn,\n        Extend: [true, true]\n      });\n    }\n  }, {\n    key: \"opacityGradient\",\n    value: function opacityGradient() {\n      return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);\n    }\n  }]);\n  return PDFLinearGradient;\n}(PDFGradient);\nvar PDFRadialGradient = /*#__PURE__*/function (_PDFGradient2) {\n  _inherits(PDFRadialGradient, _PDFGradient2);\n  var _super2 = _createSuper(PDFRadialGradient);\n  function PDFRadialGradient(doc, x1, y1, r1, x2, y2, r2) {\n    var _this2;\n    _classCallCheck(this, PDFRadialGradient);\n    _this2 = _super2.call(this, doc);\n    _this2.doc = doc;\n    _this2.x1 = x1;\n    _this2.y1 = y1;\n    _this2.r1 = r1;\n    _this2.x2 = x2;\n    _this2.y2 = y2;\n    _this2.r2 = r2;\n    return _this2;\n  }\n  _createClass(PDFRadialGradient, [{\n    key: \"shader\",\n    value: function shader(fn) {\n      return this.doc.ref({\n        ShadingType: 3,\n        ColorSpace: this._colorSpace,\n        Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],\n        Function: fn,\n        Extend: [true, true]\n      });\n    }\n  }, {\n    key: \"opacityGradient\",\n    value: function opacityGradient() {\n      return new PDFRadialGradient(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2);\n    }\n  }]);\n  return PDFRadialGradient;\n}(PDFGradient);\nvar Gradient = {\n  PDFGradient: PDFGradient,\n  PDFLinearGradient: PDFLinearGradient,\n  PDFRadialGradient: PDFRadialGradient\n};\n\n/*\nPDF tiling pattern support. Uncolored only.\n */\nvar underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB'];\nvar PDFTilingPattern = /*#__PURE__*/function () {\n  function PDFTilingPattern(doc, bBox, xStep, yStep, stream) {\n    _classCallCheck(this, PDFTilingPattern);\n    this.doc = doc;\n    this.bBox = bBox;\n    this.xStep = xStep;\n    this.yStep = yStep;\n    this.stream = stream;\n  }\n  _createClass(PDFTilingPattern, [{\n    key: \"createPattern\",\n    value: function createPattern() {\n      // no resources needed for our current usage\n      // required entry\n      var resources = this.doc.ref();\n      resources.end(); // apply default transform matrix (flipped in the default doc._ctm)\n      // see document.js & gradient.js\n\n      var _this$doc$_ctm = _slicedToArray(this.doc._ctm, 6),\n        m0 = _this$doc$_ctm[0],\n        m1 = _this$doc$_ctm[1],\n        m2 = _this$doc$_ctm[2],\n        m3 = _this$doc$_ctm[3],\n        m4 = _this$doc$_ctm[4],\n        m5 = _this$doc$_ctm[5];\n      var m11 = 1,\n        m12 = 0,\n        m21 = 0,\n        m22 = 1,\n        dx = 0,\n        dy = 0;\n      var m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5];\n      var pattern = this.doc.ref({\n        Type: 'Pattern',\n        PatternType: 1,\n        // tiling\n        PaintType: 2,\n        // 1-colored, 2-uncolored\n        TilingType: 2,\n        // 2-no distortion\n        BBox: this.bBox,\n        XStep: this.xStep,\n        YStep: this.yStep,\n        Matrix: m.map(function (v) {\n          return +v.toFixed(5);\n        }),\n        Resources: resources\n      });\n      pattern.end(this.stream);\n      return pattern;\n    }\n  }, {\n    key: \"embedPatternColorSpaces\",\n    value: function embedPatternColorSpaces() {\n      var _this = this;\n\n      // map each pattern to an underlying color space\n      // and embed on each page\n      underlyingColorSpaces.forEach(function (csName) {\n        var csId = _this.getPatternColorSpaceId(csName);\n        if (_this.doc.page.colorSpaces[csId]) return;\n        var cs = _this.doc.ref(['Pattern', csName]);\n        cs.end();\n        _this.doc.page.colorSpaces[csId] = cs;\n      });\n    }\n  }, {\n    key: \"getPatternColorSpaceId\",\n    value: function getPatternColorSpaceId(underlyingColorspace) {\n      return \"CsP\".concat(underlyingColorspace);\n    }\n  }, {\n    key: \"embed\",\n    value: function embed() {\n      if (!this.id) {\n        this.doc._patternCount = this.doc._patternCount + 1;\n        this.id = 'P' + this.doc._patternCount;\n        this.pattern = this.createPattern();\n      } // patterns are embedded in each page\n\n      if (!this.doc.page.patterns[this.id]) {\n        this.doc.page.patterns[this.id] = this.pattern;\n      }\n    }\n  }, {\n    key: \"apply\",\n    value: function apply(stroke, patternColor) {\n      // do any embedding/creating that might be needed\n      this.embedPatternColorSpaces();\n      this.embed();\n      var normalizedColor = this.doc._normalizeColor(patternColor);\n      if (!normalizedColor) throw Error(\"invalid pattern color. (value: \".concat(patternColor, \")\")); // select one of the pattern color spaces\n\n      var csId = this.getPatternColorSpaceId(this.doc._getColorSpace(normalizedColor));\n      this.doc._setColorSpace(csId, stroke); // stroke/fill using the pattern and color (in the above underlying color space)\n\n      var op = stroke ? 'SCN' : 'scn';\n      return this.doc.addContent(\"\".concat(normalizedColor.join(' '), \" /\").concat(this.id, \" \").concat(op));\n    }\n  }]);\n  return PDFTilingPattern;\n}();\nvar pattern = {\n  PDFTilingPattern: PDFTilingPattern\n};\nvar PDFGradient$1 = Gradient.PDFGradient,\n  PDFLinearGradient$1 = Gradient.PDFLinearGradient,\n  PDFRadialGradient$1 = Gradient.PDFRadialGradient;\nvar PDFTilingPattern$1 = pattern.PDFTilingPattern;\nvar ColorMixin = {\n  initColor: function initColor() {\n    // The opacity dictionaries\n    this._opacityRegistry = {};\n    this._opacityCount = 0;\n    this._patternCount = 0;\n    return this._gradCount = 0;\n  },\n  _normalizeColor: function _normalizeColor(color) {\n    if (typeof color === 'string') {\n      if (color.charAt(0) === '#') {\n        if (color.length === 4) {\n          color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, '#$1$1$2$2$3$3');\n        }\n        var hex = parseInt(color.slice(1), 16);\n        color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff];\n      } else if (namedColors[color]) {\n        color = namedColors[color];\n      }\n    }\n    if (Array.isArray(color)) {\n      // RGB\n      if (color.length === 3) {\n        color = color.map(function (part) {\n          return part / 255;\n        }); // CMYK\n      } else if (color.length === 4) {\n        color = color.map(function (part) {\n          return part / 100;\n        });\n      }\n      return color;\n    }\n    return null;\n  },\n  _setColor: function _setColor(color, stroke) {\n    if (color instanceof PDFGradient$1) {\n      color.apply(stroke);\n      return true; // see if tiling pattern, decode & apply it it\n    } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern$1) {\n      color[0].apply(stroke, color[1]);\n      return true;\n    } // any other case should be a normal color and not a pattern\n\n    return this._setColorCore(color, stroke);\n  },\n  _setColorCore: function _setColorCore(color, stroke) {\n    color = this._normalizeColor(color);\n    if (!color) {\n      return false;\n    }\n    var op = stroke ? 'SCN' : 'scn';\n    var space = this._getColorSpace(color);\n    this._setColorSpace(space, stroke);\n    color = color.join(' ');\n    this.addContent(\"\".concat(color, \" \").concat(op));\n    return true;\n  },\n  _setColorSpace: function _setColorSpace(space, stroke) {\n    var op = stroke ? 'CS' : 'cs';\n    return this.addContent(\"/\".concat(space, \" \").concat(op));\n  },\n  _getColorSpace: function _getColorSpace(color) {\n    return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';\n  },\n  fillColor: function fillColor(color, opacity) {\n    var set = this._setColor(color, false);\n    if (set) {\n      this.fillOpacity(opacity);\n    } // save this for text wrapper, which needs to reset\n    // the fill color on new pages\n\n    this._fillColor = [color, opacity];\n    return this;\n  },\n  strokeColor: function strokeColor(color, opacity) {\n    var set = this._setColor(color, true);\n    if (set) {\n      this.strokeOpacity(opacity);\n    }\n    return this;\n  },\n  opacity: function opacity(_opacity) {\n    this._doOpacity(_opacity, _opacity);\n    return this;\n  },\n  fillOpacity: function fillOpacity(opacity) {\n    this._doOpacity(opacity, null);\n    return this;\n  },\n  strokeOpacity: function strokeOpacity(opacity) {\n    this._doOpacity(null, opacity);\n    return this;\n  },\n  _doOpacity: function _doOpacity(fillOpacity, strokeOpacity) {\n    var dictionary, name;\n    if (fillOpacity == null && strokeOpacity == null) {\n      return;\n    }\n    if (fillOpacity != null) {\n      fillOpacity = Math.max(0, Math.min(1, fillOpacity));\n    }\n    if (strokeOpacity != null) {\n      strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));\n    }\n    var key = \"\".concat(fillOpacity, \"_\").concat(strokeOpacity);\n    if (this._opacityRegistry[key]) {\n      var _this$_opacityRegistr = _slicedToArray(this._opacityRegistry[key], 2);\n      dictionary = _this$_opacityRegistr[0];\n      name = _this$_opacityRegistr[1];\n    } else {\n      dictionary = {\n        Type: 'ExtGState'\n      };\n      if (fillOpacity != null) {\n        dictionary.ca = fillOpacity;\n      }\n      if (strokeOpacity != null) {\n        dictionary.CA = strokeOpacity;\n      }\n      dictionary = this.ref(dictionary);\n      dictionary.end();\n      var id = ++this._opacityCount;\n      name = \"Gs\".concat(id);\n      this._opacityRegistry[key] = [dictionary, name];\n    }\n    this.page.ext_gstates[name] = dictionary;\n    return this.addContent(\"/\".concat(name, \" gs\"));\n  },\n  linearGradient: function linearGradient(x1, y1, x2, y2) {\n    return new PDFLinearGradient$1(this, x1, y1, x2, y2);\n  },\n  radialGradient: function radialGradient(x1, y1, r1, x2, y2, r2) {\n    return new PDFRadialGradient$1(this, x1, y1, r1, x2, y2, r2);\n  },\n  pattern: function pattern(bbox, xStep, yStep, stream) {\n    return new PDFTilingPattern$1(this, bbox, xStep, yStep, stream);\n  }\n};\nvar namedColors = {\n  aliceblue: [240, 248, 255],\n  antiquewhite: [250, 235, 215],\n  aqua: [0, 255, 255],\n  aquamarine: [127, 255, 212],\n  azure: [240, 255, 255],\n  beige: [245, 245, 220],\n  bisque: [255, 228, 196],\n  black: [0, 0, 0],\n  blanchedalmond: [255, 235, 205],\n  blue: [0, 0, 255],\n  blueviolet: [138, 43, 226],\n  brown: [165, 42, 42],\n  burlywood: [222, 184, 135],\n  cadetblue: [95, 158, 160],\n  chartreuse: [127, 255, 0],\n  chocolate: [210, 105, 30],\n  coral: [255, 127, 80],\n  cornflowerblue: [100, 149, 237],\n  cornsilk: [255, 248, 220],\n  crimson: [220, 20, 60],\n  cyan: [0, 255, 255],\n  darkblue: [0, 0, 139],\n  darkcyan: [0, 139, 139],\n  darkgoldenrod: [184, 134, 11],\n  darkgray: [169, 169, 169],\n  darkgreen: [0, 100, 0],\n  darkgrey: [169, 169, 169],\n  darkkhaki: [189, 183, 107],\n  darkmagenta: [139, 0, 139],\n  darkolivegreen: [85, 107, 47],\n  darkorange: [255, 140, 0],\n  darkorchid: [153, 50, 204],\n  darkred: [139, 0, 0],\n  darksalmon: [233, 150, 122],\n  darkseagreen: [143, 188, 143],\n  darkslateblue: [72, 61, 139],\n  darkslategray: [47, 79, 79],\n  darkslategrey: [47, 79, 79],\n  darkturquoise: [0, 206, 209],\n  darkviolet: [148, 0, 211],\n  deeppink: [255, 20, 147],\n  deepskyblue: [0, 191, 255],\n  dimgray: [105, 105, 105],\n  dimgrey: [105, 105, 105],\n  dodgerblue: [30, 144, 255],\n  firebrick: [178, 34, 34],\n  floralwhite: [255, 250, 240],\n  forestgreen: [34, 139, 34],\n  fuchsia: [255, 0, 255],\n  gainsboro: [220, 220, 220],\n  ghostwhite: [248, 248, 255],\n  gold: [255, 215, 0],\n  goldenrod: [218, 165, 32],\n  gray: [128, 128, 128],\n  grey: [128, 128, 128],\n  green: [0, 128, 0],\n  greenyellow: [173, 255, 47],\n  honeydew: [240, 255, 240],\n  hotpink: [255, 105, 180],\n  indianred: [205, 92, 92],\n  indigo: [75, 0, 130],\n  ivory: [255, 255, 240],\n  khaki: [240, 230, 140],\n  lavender: [230, 230, 250],\n  lavenderblush: [255, 240, 245],\n  lawngreen: [124, 252, 0],\n  lemonchiffon: [255, 250, 205],\n  lightblue: [173, 216, 230],\n  lightcoral: [240, 128, 128],\n  lightcyan: [224, 255, 255],\n  lightgoldenrodyellow: [250, 250, 210],\n  lightgray: [211, 211, 211],\n  lightgreen: [144, 238, 144],\n  lightgrey: [211, 211, 211],\n  lightpink: [255, 182, 193],\n  lightsalmon: [255, 160, 122],\n  lightseagreen: [32, 178, 170],\n  lightskyblue: [135, 206, 250],\n  lightslategray: [119, 136, 153],\n  lightslategrey: [119, 136, 153],\n  lightsteelblue: [176, 196, 222],\n  lightyellow: [255, 255, 224],\n  lime: [0, 255, 0],\n  limegreen: [50, 205, 50],\n  linen: [250, 240, 230],\n  magenta: [255, 0, 255],\n  maroon: [128, 0, 0],\n  mediumaquamarine: [102, 205, 170],\n  mediumblue: [0, 0, 205],\n  mediumorchid: [186, 85, 211],\n  mediumpurple: [147, 112, 219],\n  mediumseagreen: [60, 179, 113],\n  mediumslateblue: [123, 104, 238],\n  mediumspringgreen: [0, 250, 154],\n  mediumturquoise: [72, 209, 204],\n  mediumvioletred: [199, 21, 133],\n  midnightblue: [25, 25, 112],\n  mintcream: [245, 255, 250],\n  mistyrose: [255, 228, 225],\n  moccasin: [255, 228, 181],\n  navajowhite: [255, 222, 173],\n  navy: [0, 0, 128],\n  oldlace: [253, 245, 230],\n  olive: [128, 128, 0],\n  olivedrab: [107, 142, 35],\n  orange: [255, 165, 0],\n  orangered: [255, 69, 0],\n  orchid: [218, 112, 214],\n  palegoldenrod: [238, 232, 170],\n  palegreen: [152, 251, 152],\n  paleturquoise: [175, 238, 238],\n  palevioletred: [219, 112, 147],\n  papayawhip: [255, 239, 213],\n  peachpuff: [255, 218, 185],\n  peru: [205, 133, 63],\n  pink: [255, 192, 203],\n  plum: [221, 160, 221],\n  powderblue: [176, 224, 230],\n  purple: [128, 0, 128],\n  red: [255, 0, 0],\n  rosybrown: [188, 143, 143],\n  royalblue: [65, 105, 225],\n  saddlebrown: [139, 69, 19],\n  salmon: [250, 128, 114],\n  sandybrown: [244, 164, 96],\n  seagreen: [46, 139, 87],\n  seashell: [255, 245, 238],\n  sienna: [160, 82, 45],\n  silver: [192, 192, 192],\n  skyblue: [135, 206, 235],\n  slateblue: [106, 90, 205],\n  slategray: [112, 128, 144],\n  slategrey: [112, 128, 144],\n  snow: [255, 250, 250],\n  springgreen: [0, 255, 127],\n  steelblue: [70, 130, 180],\n  tan: [210, 180, 140],\n  teal: [0, 128, 128],\n  thistle: [216, 191, 216],\n  tomato: [255, 99, 71],\n  turquoise: [64, 224, 208],\n  violet: [238, 130, 238],\n  wheat: [245, 222, 179],\n  white: [255, 255, 255],\n  whitesmoke: [245, 245, 245],\n  yellow: [255, 255, 0],\n  yellowgreen: [154, 205, 50]\n};\nvar cx, cy, px, py, sx, sy;\ncx = cy = px = py = sx = sy = 0;\nvar parameters = {\n  A: 7,\n  a: 7,\n  C: 6,\n  c: 6,\n  H: 1,\n  h: 1,\n  L: 2,\n  l: 2,\n  M: 2,\n  m: 2,\n  Q: 4,\n  q: 4,\n  S: 4,\n  s: 4,\n  T: 2,\n  t: 2,\n  V: 1,\n  v: 1,\n  Z: 0,\n  z: 0\n};\nvar parse = function parse(path) {\n  var cmd;\n  var ret = [];\n  var args = [];\n  var curArg = '';\n  var foundDecimal = false;\n  var params = 0;\n  var _iterator = _createForOfIteratorHelper(path),\n    _step;\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var c = _step.value;\n      if (parameters[c] != null) {\n        params = parameters[c];\n        if (cmd) {\n          // save existing command\n          if (curArg.length > 0) {\n            args[args.length] = +curArg;\n          }\n          ret[ret.length] = {\n            cmd: cmd,\n            args: args\n          };\n          args = [];\n          curArg = '';\n          foundDecimal = false;\n        }\n        cmd = c;\n      } else if ([' ', ','].includes(c) || c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e' || c === '.' && foundDecimal) {\n        if (curArg.length === 0) {\n          continue;\n        }\n        if (args.length === params) {\n          // handle reused commands\n          ret[ret.length] = {\n            cmd: cmd,\n            args: args\n          };\n          args = [+curArg]; // handle assumed commands\n\n          if (cmd === 'M') {\n            cmd = 'L';\n          }\n          if (cmd === 'm') {\n            cmd = 'l';\n          }\n        } else {\n          args[args.length] = +curArg;\n        }\n        foundDecimal = c === '.'; // fix for negative numbers or repeated decimals with no delimeter between commands\n\n        curArg = ['-', '.'].includes(c) ? c : '';\n      } else {\n        curArg += c;\n        if (c === '.') {\n          foundDecimal = true;\n        }\n      }\n    } // add the last command\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n  if (curArg.length > 0) {\n    if (args.length === params) {\n      // handle reused commands\n      ret[ret.length] = {\n        cmd: cmd,\n        args: args\n      };\n      args = [+curArg]; // handle assumed commands\n\n      if (cmd === 'M') {\n        cmd = 'L';\n      }\n      if (cmd === 'm') {\n        cmd = 'l';\n      }\n    } else {\n      args[args.length] = +curArg;\n    }\n  }\n  ret[ret.length] = {\n    cmd: cmd,\n    args: args\n  };\n  return ret;\n};\nvar _apply = function apply(commands, doc) {\n  // current point, control point, and subpath starting point\n  cx = cy = px = py = sx = sy = 0; // run the commands\n\n  for (var i = 0; i < commands.length; i++) {\n    var c = commands[i];\n    if (typeof runners[c.cmd] === 'function') {\n      runners[c.cmd](doc, c.args);\n    }\n  }\n};\nvar runners = {\n  M: function M(doc, a) {\n    cx = a[0];\n    cy = a[1];\n    px = py = null;\n    sx = cx;\n    sy = cy;\n    return doc.moveTo(cx, cy);\n  },\n  m: function m(doc, a) {\n    cx += a[0];\n    cy += a[1];\n    px = py = null;\n    sx = cx;\n    sy = cy;\n    return doc.moveTo(cx, cy);\n  },\n  C: function C(doc, a) {\n    cx = a[4];\n    cy = a[5];\n    px = a[2];\n    py = a[3];\n    return doc.bezierCurveTo.apply(doc, _toConsumableArray(a));\n  },\n  c: function c(doc, a) {\n    doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy);\n    px = cx + a[2];\n    py = cy + a[3];\n    cx += a[4];\n    return cy += a[5];\n  },\n  S: function S(doc, a) {\n    if (px === null) {\n      px = cx;\n      py = cy;\n    }\n    doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);\n    px = a[0];\n    py = a[1];\n    cx = a[2];\n    return cy = a[3];\n  },\n  s: function s(doc, a) {\n    if (px === null) {\n      px = cx;\n      py = cy;\n    }\n    doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]);\n    px = cx + a[0];\n    py = cy + a[1];\n    cx += a[2];\n    return cy += a[3];\n  },\n  Q: function Q(doc, a) {\n    px = a[0];\n    py = a[1];\n    cx = a[2];\n    cy = a[3];\n    return doc.quadraticCurveTo(a[0], a[1], cx, cy);\n  },\n  q: function q(doc, a) {\n    doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);\n    px = cx + a[0];\n    py = cy + a[1];\n    cx += a[2];\n    return cy += a[3];\n  },\n  T: function T(doc, a) {\n    if (px === null) {\n      px = cx;\n      py = cy;\n    } else {\n      px = cx - (px - cx);\n      py = cy - (py - cy);\n    }\n    doc.quadraticCurveTo(px, py, a[0], a[1]);\n    px = cx - (px - cx);\n    py = cy - (py - cy);\n    cx = a[0];\n    return cy = a[1];\n  },\n  t: function t(doc, a) {\n    if (px === null) {\n      px = cx;\n      py = cy;\n    } else {\n      px = cx - (px - cx);\n      py = cy - (py - cy);\n    }\n    doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);\n    cx += a[0];\n    return cy += a[1];\n  },\n  A: function A(doc, a) {\n    solveArc(doc, cx, cy, a);\n    cx = a[5];\n    return cy = a[6];\n  },\n  a: function a(doc, _a) {\n    _a[5] += cx;\n    _a[6] += cy;\n    solveArc(doc, cx, cy, _a);\n    cx = _a[5];\n    return cy = _a[6];\n  },\n  L: function L(doc, a) {\n    cx = a[0];\n    cy = a[1];\n    px = py = null;\n    return doc.lineTo(cx, cy);\n  },\n  l: function l(doc, a) {\n    cx += a[0];\n    cy += a[1];\n    px = py = null;\n    return doc.lineTo(cx, cy);\n  },\n  H: function H(doc, a) {\n    cx = a[0];\n    px = py = null;\n    return doc.lineTo(cx, cy);\n  },\n  h: function h(doc, a) {\n    cx += a[0];\n    px = py = null;\n    return doc.lineTo(cx, cy);\n  },\n  V: function V(doc, a) {\n    cy = a[0];\n    px = py = null;\n    return doc.lineTo(cx, cy);\n  },\n  v: function v(doc, a) {\n    cy += a[0];\n    px = py = null;\n    return doc.lineTo(cx, cy);\n  },\n  Z: function Z(doc) {\n    doc.closePath();\n    cx = sx;\n    return cy = sy;\n  },\n  z: function z(doc) {\n    doc.closePath();\n    cx = sx;\n    return cy = sy;\n  }\n};\nvar solveArc = function solveArc(doc, x, y, coords) {\n  var _coords = _slicedToArray(coords, 7),\n    rx = _coords[0],\n    ry = _coords[1],\n    rot = _coords[2],\n    large = _coords[3],\n    sweep = _coords[4],\n    ex = _coords[5],\n    ey = _coords[6];\n  var segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);\n  var _iterator2 = _createForOfIteratorHelper(segs),\n    _step2;\n  try {\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n      var seg = _step2.value;\n      var bez = segmentToBezier.apply(void 0, _toConsumableArray(seg));\n      doc.bezierCurveTo.apply(doc, _toConsumableArray(bez));\n    }\n  } catch (err) {\n    _iterator2.e(err);\n  } finally {\n    _iterator2.f();\n  }\n}; // from Inkscape svgtopdf, thanks!\n\nvar arcToSegments = function arcToSegments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n  var th = rotateX * (Math.PI / 180);\n  var sin_th = Math.sin(th);\n  var cos_th = Math.cos(th);\n  rx = Math.abs(rx);\n  ry = Math.abs(ry);\n  px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n  py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n  var pl = px * px / (rx * rx) + py * py / (ry * ry);\n  if (pl > 1) {\n    pl = Math.sqrt(pl);\n    rx *= pl;\n    ry *= pl;\n  }\n  var a00 = cos_th / rx;\n  var a01 = sin_th / rx;\n  var a10 = -sin_th / ry;\n  var a11 = cos_th / ry;\n  var x0 = a00 * ox + a01 * oy;\n  var y0 = a10 * ox + a11 * oy;\n  var x1 = a00 * x + a01 * y;\n  var y1 = a10 * x + a11 * y;\n  var d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n  var sfactor_sq = 1 / d - 0.25;\n  if (sfactor_sq < 0) {\n    sfactor_sq = 0;\n  }\n  var sfactor = Math.sqrt(sfactor_sq);\n  if (sweep === large) {\n    sfactor = -sfactor;\n  }\n  var xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n  var yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n  var th0 = Math.atan2(y0 - yc, x0 - xc);\n  var th1 = Math.atan2(y1 - yc, x1 - xc);\n  var th_arc = th1 - th0;\n  if (th_arc < 0 && sweep === 1) {\n    th_arc += 2 * Math.PI;\n  } else if (th_arc > 0 && sweep === 0) {\n    th_arc -= 2 * Math.PI;\n  }\n  var segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));\n  var result = [];\n  for (var i = 0; i < segments; i++) {\n    var th2 = th0 + i * th_arc / segments;\n    var th3 = th0 + (i + 1) * th_arc / segments;\n    result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n  }\n  return result;\n};\nvar segmentToBezier = function segmentToBezier(cx, cy, th0, th1, rx, ry, sin_th, cos_th) {\n  var a00 = cos_th * rx;\n  var a01 = -sin_th * ry;\n  var a10 = sin_th * rx;\n  var a11 = cos_th * ry;\n  var th_half = 0.5 * (th1 - th0);\n  var t = 8 / 3 * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half);\n  var x1 = cx + Math.cos(th0) - t * Math.sin(th0);\n  var y1 = cy + Math.sin(th0) + t * Math.cos(th0);\n  var x3 = cx + Math.cos(th1);\n  var y3 = cy + Math.sin(th1);\n  var x2 = x3 + t * Math.sin(th1);\n  var y2 = y3 - t * Math.cos(th1);\n  return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];\n};\nvar SVGPath = /*#__PURE__*/function () {\n  function SVGPath() {\n    _classCallCheck(this, SVGPath);\n  }\n  _createClass(SVGPath, null, [{\n    key: \"apply\",\n    value: function apply(doc, path) {\n      var commands = parse(path);\n      _apply(commands, doc);\n    }\n  }]);\n  return SVGPath;\n}();\nvar number$1 = PDFObject.number; // This constant is used to approximate a symmetrical arc using a cubic\n// Bezier curve.\n\nvar KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);\nvar VectorMixin = {\n  initVector: function initVector() {\n    this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix\n\n    return this._ctmStack = [];\n  },\n  save: function save() {\n    this._ctmStack.push(this._ctm.slice()); // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time?\n\n    return this.addContent('q');\n  },\n  restore: function restore() {\n    this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];\n    return this.addContent('Q');\n  },\n  closePath: function closePath() {\n    return this.addContent('h');\n  },\n  lineWidth: function lineWidth(w) {\n    return this.addContent(\"\".concat(number$1(w), \" w\"));\n  },\n  _CAP_STYLES: {\n    BUTT: 0,\n    ROUND: 1,\n    SQUARE: 2\n  },\n  lineCap: function lineCap(c) {\n    if (typeof c === 'string') {\n      c = this._CAP_STYLES[c.toUpperCase()];\n    }\n    return this.addContent(\"\".concat(c, \" J\"));\n  },\n  _JOIN_STYLES: {\n    MITER: 0,\n    ROUND: 1,\n    BEVEL: 2\n  },\n  lineJoin: function lineJoin(j) {\n    if (typeof j === 'string') {\n      j = this._JOIN_STYLES[j.toUpperCase()];\n    }\n    return this.addContent(\"\".concat(j, \" j\"));\n  },\n  miterLimit: function miterLimit(m) {\n    return this.addContent(\"\".concat(number$1(m), \" M\"));\n  },\n  dash: function dash(length) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var originalLength = length;\n    if (!Array.isArray(length)) {\n      length = [length, options.space || length];\n    }\n    var valid = length.every(function (x) {\n      return Number.isFinite(x) && x > 0;\n    });\n    if (!valid) {\n      throw new Error(\"dash(\".concat(JSON.stringify(originalLength), \", \").concat(JSON.stringify(options), \") invalid, lengths must be numeric and greater than zero\"));\n    }\n    length = length.map(number$1).join(' ');\n    return this.addContent(\"[\".concat(length, \"] \").concat(number$1(options.phase || 0), \" d\"));\n  },\n  undash: function undash() {\n    return this.addContent('[] 0 d');\n  },\n  moveTo: function moveTo(x, y) {\n    return this.addContent(\"\".concat(number$1(x), \" \").concat(number$1(y), \" m\"));\n  },\n  lineTo: function lineTo(x, y) {\n    return this.addContent(\"\".concat(number$1(x), \" \").concat(number$1(y), \" l\"));\n  },\n  bezierCurveTo: function bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n    return this.addContent(\"\".concat(number$1(cp1x), \" \").concat(number$1(cp1y), \" \").concat(number$1(cp2x), \" \").concat(number$1(cp2y), \" \").concat(number$1(x), \" \").concat(number$1(y), \" c\"));\n  },\n  quadraticCurveTo: function quadraticCurveTo(cpx, cpy, x, y) {\n    return this.addContent(\"\".concat(number$1(cpx), \" \").concat(number$1(cpy), \" \").concat(number$1(x), \" \").concat(number$1(y), \" v\"));\n  },\n  rect: function rect(x, y, w, h) {\n    return this.addContent(\"\".concat(number$1(x), \" \").concat(number$1(y), \" \").concat(number$1(w), \" \").concat(number$1(h), \" re\"));\n  },\n  roundedRect: function roundedRect(x, y, w, h, r) {\n    if (r == null) {\n      r = 0;\n    }\n    r = Math.min(r, 0.5 * w, 0.5 * h); // amount to inset control points from corners (see `ellipse`)\n\n    var c = r * (1.0 - KAPPA);\n    this.moveTo(x + r, y);\n    this.lineTo(x + w - r, y);\n    this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r);\n    this.lineTo(x + w, y + h - r);\n    this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h);\n    this.lineTo(x + r, y + h);\n    this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r);\n    this.lineTo(x, y + r);\n    this.bezierCurveTo(x, y + c, x + c, y, x + r, y);\n    return this.closePath();\n  },\n  ellipse: function ellipse(x, y, r1, r2) {\n    // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084\n    if (r2 == null) {\n      r2 = r1;\n    }\n    x -= r1;\n    y -= r2;\n    var ox = r1 * KAPPA;\n    var oy = r2 * KAPPA;\n    var xe = x + r1 * 2;\n    var ye = y + r2 * 2;\n    var xm = x + r1;\n    var ym = y + r2;\n    this.moveTo(x, ym);\n    this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n    this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n    this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n    this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n    return this.closePath();\n  },\n  circle: function circle(x, y, radius) {\n    return this.ellipse(x, y, radius);\n  },\n  arc: function arc(x, y, radius, startAngle, endAngle, anticlockwise) {\n    if (anticlockwise == null) {\n      anticlockwise = false;\n    }\n    var TWO_PI = 2.0 * Math.PI;\n    var HALF_PI = 0.5 * Math.PI;\n    var deltaAng = endAngle - startAngle;\n    if (Math.abs(deltaAng) > TWO_PI) {\n      // draw only full circle if more than that is specified\n      deltaAng = TWO_PI;\n    } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) {\n      // necessary to flip direction of rendering\n      var dir = anticlockwise ? -1 : 1;\n      deltaAng = dir * TWO_PI + deltaAng;\n    }\n    var numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI);\n    var segAng = deltaAng / numSegs;\n    var handleLen = segAng / HALF_PI * KAPPA * radius;\n    var curAng = startAngle; // component distances between anchor point and control point\n\n    var deltaCx = -Math.sin(curAng) * handleLen;\n    var deltaCy = Math.cos(curAng) * handleLen; // anchor point\n\n    var ax = x + Math.cos(curAng) * radius;\n    var ay = y + Math.sin(curAng) * radius; // calculate and render segments\n\n    this.moveTo(ax, ay);\n    for (var segIdx = 0; segIdx < numSegs; segIdx++) {\n      // starting control point\n      var cp1x = ax + deltaCx;\n      var cp1y = ay + deltaCy; // step angle\n\n      curAng += segAng; // next anchor point\n\n      ax = x + Math.cos(curAng) * radius;\n      ay = y + Math.sin(curAng) * radius; // next control point delta\n\n      deltaCx = -Math.sin(curAng) * handleLen;\n      deltaCy = Math.cos(curAng) * handleLen; // ending control point\n\n      var cp2x = ax - deltaCx;\n      var cp2y = ay - deltaCy; // render segment\n\n      this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay);\n    }\n    return this;\n  },\n  polygon: function polygon() {\n    for (var _len = arguments.length, points = new Array(_len), _key = 0; _key < _len; _key++) {\n      points[_key] = arguments[_key];\n    }\n    this.moveTo.apply(this, _toConsumableArray(points.shift() || []));\n    for (var _i = 0, _points = points; _i < _points.length; _i++) {\n      var point = _points[_i];\n      this.lineTo.apply(this, _toConsumableArray(point || []));\n    }\n    return this.closePath();\n  },\n  path: function path(_path) {\n    SVGPath.apply(this, _path);\n    return this;\n  },\n  _windingRule: function _windingRule(rule) {\n    if (/even-?odd/.test(rule)) {\n      return '*';\n    }\n    return '';\n  },\n  fill: function fill(color, rule) {\n    if (/(even-?odd)|(non-?zero)/.test(color)) {\n      rule = color;\n      color = null;\n    }\n    if (color) {\n      this.fillColor(color);\n    }\n    return this.addContent(\"f\".concat(this._windingRule(rule)));\n  },\n  stroke: function stroke(color) {\n    if (color) {\n      this.strokeColor(color);\n    }\n    return this.addContent('S');\n  },\n  fillAndStroke: function fillAndStroke(fillColor, strokeColor, rule) {\n    if (strokeColor == null) {\n      strokeColor = fillColor;\n    }\n    var isFillRule = /(even-?odd)|(non-?zero)/;\n    if (isFillRule.test(fillColor)) {\n      rule = fillColor;\n      fillColor = null;\n    }\n    if (isFillRule.test(strokeColor)) {\n      rule = strokeColor;\n      strokeColor = fillColor;\n    }\n    if (fillColor) {\n      this.fillColor(fillColor);\n      this.strokeColor(strokeColor);\n    }\n    return this.addContent(\"B\".concat(this._windingRule(rule)));\n  },\n  clip: function clip(rule) {\n    return this.addContent(\"W\".concat(this._windingRule(rule), \" n\"));\n  },\n  transform: function transform(m11, m12, m21, m22, dx, dy) {\n    // keep track of the current transformation matrix\n    var m = this._ctm;\n    var _m = _slicedToArray(m, 6),\n      m0 = _m[0],\n      m1 = _m[1],\n      m2 = _m[2],\n      m3 = _m[3],\n      m4 = _m[4],\n      m5 = _m[5];\n    m[0] = m0 * m11 + m2 * m12;\n    m[1] = m1 * m11 + m3 * m12;\n    m[2] = m0 * m21 + m2 * m22;\n    m[3] = m1 * m21 + m3 * m22;\n    m[4] = m0 * dx + m2 * dy + m4;\n    m[5] = m1 * dx + m3 * dy + m5;\n    var values = [m11, m12, m21, m22, dx, dy].map(function (v) {\n      return number$1(v);\n    }).join(' ');\n    return this.addContent(\"\".concat(values, \" cm\"));\n  },\n  translate: function translate(x, y) {\n    return this.transform(1, 0, 0, 1, x, y);\n  },\n  rotate: function rotate(angle) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var y;\n    var rad = angle * Math.PI / 180;\n    var cos = Math.cos(rad);\n    var sin = Math.sin(rad);\n    var x = y = 0;\n    if (options.origin != null) {\n      var _options$origin = _slicedToArray(options.origin, 2);\n      x = _options$origin[0];\n      y = _options$origin[1];\n      var x1 = x * cos - y * sin;\n      var y1 = x * sin + y * cos;\n      x -= x1;\n      y -= y1;\n    }\n    return this.transform(cos, sin, -sin, cos, x, y);\n  },\n  scale: function scale(xFactor, yFactor) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var y;\n    if (yFactor == null) {\n      yFactor = xFactor;\n    }\n    if (typeof yFactor === 'object') {\n      options = yFactor;\n      yFactor = xFactor;\n    }\n    var x = y = 0;\n    if (options.origin != null) {\n      var _options$origin2 = _slicedToArray(options.origin, 2);\n      x = _options$origin2[0];\n      y = _options$origin2[1];\n      x -= xFactor * x;\n      y -= yFactor * y;\n    }\n    return this.transform(xFactor, 0, 0, yFactor, x, y);\n  }\n};\nvar WIN_ANSI_MAP = {\n  402: 131,\n  8211: 150,\n  8212: 151,\n  8216: 145,\n  8217: 146,\n  8218: 130,\n  8220: 147,\n  8221: 148,\n  8222: 132,\n  8224: 134,\n  8225: 135,\n  8226: 149,\n  8230: 133,\n  8364: 128,\n  8240: 137,\n  8249: 139,\n  8250: 155,\n  710: 136,\n  8482: 153,\n  338: 140,\n  339: 156,\n  732: 152,\n  352: 138,\n  353: 154,\n  376: 159,\n  381: 142,\n  382: 158\n};\nvar characters = \".notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n.notdef       .notdef        .notdef        .notdef\\n  \\nspace         exclam         quotedbl       numbersign\\ndollar        percent        ampersand      quotesingle\\nparenleft     parenright     asterisk       plus\\ncomma         hyphen         period         slash\\nzero          one            two            three\\nfour          five           six            seven\\neight         nine           colon          semicolon\\nless          equal          greater        question\\n  \\nat            A              B              C\\nD             E              F              G\\nH             I              J              K\\nL             M              N              O\\nP             Q              R              S\\nT             U              V              W\\nX             Y              Z              bracketleft\\nbackslash     bracketright   asciicircum    underscore\\n  \\ngrave         a              b              c\\nd             e              f              g\\nh             i              j              k\\nl             m              n              o\\np             q              r              s\\nt             u              v              w\\nx             y              z              braceleft\\nbar           braceright     asciitilde     .notdef\\n  \\nEuro          .notdef        quotesinglbase florin\\nquotedblbase  ellipsis       dagger         daggerdbl\\ncircumflex    perthousand    Scaron         guilsinglleft\\nOE            .notdef        Zcaron         .notdef\\n.notdef       quoteleft      quoteright     quotedblleft\\nquotedblright bullet         endash         emdash\\ntilde         trademark      scaron         guilsinglright\\noe            .notdef        zcaron         ydieresis\\n  \\nspace         exclamdown     cent           sterling\\ncurrency      yen            brokenbar      section\\ndieresis      copyright      ordfeminine    guillemotleft\\nlogicalnot    hyphen         registered     macron\\ndegree        plusminus      twosuperior    threesuperior\\nacute         mu             paragraph      periodcentered\\ncedilla       onesuperior    ordmasculine   guillemotright\\nonequarter    onehalf        threequarters  questiondown\\n  \\nAgrave        Aacute         Acircumflex    Atilde\\nAdieresis     Aring          AE             Ccedilla\\nEgrave        Eacute         Ecircumflex    Edieresis\\nIgrave        Iacute         Icircumflex    Idieresis\\nEth           Ntilde         Ograve         Oacute\\nOcircumflex   Otilde         Odieresis      multiply\\nOslash        Ugrave         Uacute         Ucircumflex\\nUdieresis     Yacute         Thorn          germandbls\\n  \\nagrave        aacute         acircumflex    atilde\\nadieresis     aring          ae             ccedilla\\negrave        eacute         ecircumflex    edieresis\\nigrave        iacute         icircumflex    idieresis\\neth           ntilde         ograve         oacute\\nocircumflex   otilde         odieresis      divide\\noslash        ugrave         uacute         ucircumflex\\nudieresis     yacute         thorn          ydieresis\".split(/\\s+/);\nvar AFMFont = /*#__PURE__*/function () {\n  _createClass(AFMFont, null, [{\n    key: \"open\",\n    value: function open(filename) {\n      return new AFMFont(fs.readFileSync(filename, 'utf8'));\n    }\n  }]);\n  function AFMFont(contents) {\n    _classCallCheck(this, AFMFont);\n    this.contents = contents;\n    this.attributes = {};\n    this.glyphWidths = {};\n    this.boundingBoxes = {};\n    this.kernPairs = {};\n    this.parse(); // todo: remove charWidths since appears to not be used\n\n    this.charWidths = new Array(256);\n    for (var char = 0; char <= 255; char++) {\n      this.charWidths[char] = this.glyphWidths[characters[char]];\n    }\n    this.bbox = this.attributes['FontBBox'].split(/\\s+/).map(function (e) {\n      return +e;\n    });\n    this.ascender = +(this.attributes['Ascender'] || 0);\n    this.descender = +(this.attributes['Descender'] || 0);\n    this.xHeight = +(this.attributes['XHeight'] || 0);\n    this.capHeight = +(this.attributes['CapHeight'] || 0);\n    this.lineGap = this.bbox[3] - this.bbox[1] - (this.ascender - this.descender);\n  }\n  _createClass(AFMFont, [{\n    key: \"parse\",\n    value: function parse() {\n      var section = '';\n      var _iterator = _createForOfIteratorHelper(this.contents.split('\\n')),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var line = _step.value;\n          var match;\n          var a;\n          if (match = line.match(/^Start(\\w+)/)) {\n            section = match[1];\n            continue;\n          } else if (match = line.match(/^End(\\w+)/)) {\n            section = '';\n            continue;\n          }\n          switch (section) {\n            case 'FontMetrics':\n              match = line.match(/(^\\w+)\\s+(.*)/);\n              var key = match[1];\n              var value = match[2];\n              if (a = this.attributes[key]) {\n                if (!Array.isArray(a)) {\n                  a = this.attributes[key] = [a];\n                }\n                a.push(value);\n              } else {\n                this.attributes[key] = value;\n              }\n              break;\n            case 'CharMetrics':\n              if (!/^CH?\\s/.test(line)) {\n                continue;\n              }\n              var name = line.match(/\\bN\\s+(\\.?\\w+)\\s*;/)[1];\n              this.glyphWidths[name] = +line.match(/\\bWX\\s+(\\d+)\\s*;/)[1];\n              break;\n            case 'KernPairs':\n              match = line.match(/^KPX\\s+(\\.?\\w+)\\s+(\\.?\\w+)\\s+(-?\\d+)/);\n              if (match) {\n                this.kernPairs[match[1] + '\\0' + match[2]] = parseInt(match[3]);\n              }\n              break;\n          }\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n  }, {\n    key: \"encodeText\",\n    value: function encodeText(text) {\n      var res = [];\n      for (var i = 0, len = text.length; i < len; i++) {\n        var char = text.charCodeAt(i);\n        char = WIN_ANSI_MAP[char] || char;\n        res.push(char.toString(16));\n      }\n      return res;\n    }\n  }, {\n    key: \"glyphsForString\",\n    value: function glyphsForString(string) {\n      var glyphs = [];\n      for (var i = 0, len = string.length; i < len; i++) {\n        var charCode = string.charCodeAt(i);\n        glyphs.push(this.characterToGlyph(charCode));\n      }\n      return glyphs;\n    }\n  }, {\n    key: \"characterToGlyph\",\n    value: function characterToGlyph(character) {\n      return characters[WIN_ANSI_MAP[character] || character] || '.notdef';\n    }\n  }, {\n    key: \"widthOfGlyph\",\n    value: function widthOfGlyph(glyph) {\n      return this.glyphWidths[glyph] || 0;\n    }\n  }, {\n    key: \"getKernPair\",\n    value: function getKernPair(left, right) {\n      return this.kernPairs[left + '\\0' + right] || 0;\n    }\n  }, {\n    key: \"advancesForGlyphs\",\n    value: function advancesForGlyphs(glyphs) {\n      var advances = [];\n      for (var index = 0; index < glyphs.length; index++) {\n        var left = glyphs[index];\n        var right = glyphs[index + 1];\n        advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right));\n      }\n      return advances;\n    }\n  }]);\n  return AFMFont;\n}();\nvar PDFFont = /*#__PURE__*/function () {\n  function PDFFont() {\n    _classCallCheck(this, PDFFont);\n  }\n  _createClass(PDFFont, [{\n    key: \"encode\",\n    value: function encode() {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }, {\n    key: \"widthOfString\",\n    value: function widthOfString() {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }, {\n    key: \"ref\",\n    value: function ref() {\n      return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref();\n    }\n  }, {\n    key: \"finalize\",\n    value: function finalize() {\n      if (this.embedded || this.dictionary == null) {\n        return;\n      }\n      this.embed();\n      return this.embedded = true;\n    }\n  }, {\n    key: \"embed\",\n    value: function embed() {\n      throw new Error('Must be implemented by subclasses');\n    }\n  }, {\n    key: \"lineHeight\",\n    value: function lineHeight(size, includeGap) {\n      if (includeGap == null) {\n        includeGap = false;\n      }\n      var gap = includeGap ? this.lineGap : 0;\n      return (this.ascender + gap - this.descender) / 1000 * size;\n    }\n  }]);\n  return PDFFont;\n}();\nvar STANDARD_FONTS = {\n  Courier: function Courier() {\n    return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8');\n  },\n  'Courier-Bold': function CourierBold() {\n    return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8');\n  },\n  'Courier-Oblique': function CourierOblique() {\n    return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8');\n  },\n  'Courier-BoldOblique': function CourierBoldOblique() {\n    return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8');\n  },\n  Helvetica: function Helvetica() {\n    return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8');\n  },\n  'Helvetica-Bold': function HelveticaBold() {\n    return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8');\n  },\n  'Helvetica-Oblique': function HelveticaOblique() {\n    return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8');\n  },\n  'Helvetica-BoldOblique': function HelveticaBoldOblique() {\n    return fs.readFileSync(__dirname + '/data/Helvetica-BoldOblique.afm', 'utf8');\n  },\n  'Times-Roman': function TimesRoman() {\n    return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8');\n  },\n  'Times-Bold': function TimesBold() {\n    return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8');\n  },\n  'Times-Italic': function TimesItalic() {\n    return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8');\n  },\n  'Times-BoldItalic': function TimesBoldItalic() {\n    return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8');\n  },\n  Symbol: function Symbol() {\n    return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8');\n  },\n  ZapfDingbats: function ZapfDingbats() {\n    return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8');\n  }\n};\nvar StandardFont = /*#__PURE__*/function (_PDFFont) {\n  _inherits(StandardFont, _PDFFont);\n  var _super = _createSuper(StandardFont);\n  function StandardFont(document, name, id) {\n    var _this;\n    _classCallCheck(this, StandardFont);\n    _this = _super.call(this);\n    _this.document = document;\n    _this.name = name;\n    _this.id = id;\n    _this.font = new AFMFont(STANDARD_FONTS[_this.name]());\n    var _this$font = _this.font;\n    _this.ascender = _this$font.ascender;\n    _this.descender = _this$font.descender;\n    _this.bbox = _this$font.bbox;\n    _this.lineGap = _this$font.lineGap;\n    _this.xHeight = _this$font.xHeight;\n    _this.capHeight = _this$font.capHeight;\n    return _this;\n  }\n  _createClass(StandardFont, [{\n    key: \"embed\",\n    value: function embed() {\n      this.dictionary.data = {\n        Type: 'Font',\n        BaseFont: this.name,\n        Subtype: 'Type1',\n        Encoding: 'WinAnsiEncoding'\n      };\n      return this.dictionary.end();\n    }\n  }, {\n    key: \"encode\",\n    value: function encode(text) {\n      var encoded = this.font.encodeText(text);\n      var glyphs = this.font.glyphsForString(\"\".concat(text));\n      var advances = this.font.advancesForGlyphs(glyphs);\n      var positions = [];\n      for (var i = 0; i < glyphs.length; i++) {\n        var glyph = glyphs[i];\n        positions.push({\n          xAdvance: advances[i],\n          yAdvance: 0,\n          xOffset: 0,\n          yOffset: 0,\n          advanceWidth: this.font.widthOfGlyph(glyph)\n        });\n      }\n      return [encoded, positions];\n    }\n  }, {\n    key: \"widthOfString\",\n    value: function widthOfString(string, size) {\n      var glyphs = this.font.glyphsForString(\"\".concat(string));\n      var advances = this.font.advancesForGlyphs(glyphs);\n      var width = 0;\n      var _iterator = _createForOfIteratorHelper(advances),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var advance = _step.value;\n          width += advance;\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      var scale = size / 1000;\n      return width * scale;\n    }\n  }], [{\n    key: \"isStandardFont\",\n    value: function isStandardFont(name) {\n      return name in STANDARD_FONTS;\n    }\n  }]);\n  return StandardFont;\n}(PDFFont);\nvar toHex = function toHex(num) {\n  return \"0000\".concat(num.toString(16)).slice(-4);\n};\nvar EmbeddedFont = /*#__PURE__*/function (_PDFFont) {\n  _inherits(EmbeddedFont, _PDFFont);\n  var _super = _createSuper(EmbeddedFont);\n  function EmbeddedFont(document, font, id) {\n    var _this;\n    _classCallCheck(this, EmbeddedFont);\n    _this = _super.call(this);\n    _this.document = document;\n    _this.font = font;\n    _this.id = id;\n    _this.subset = _this.font.createSubset();\n    _this.unicode = [[0]];\n    _this.widths = [_this.font.getGlyph(0).advanceWidth];\n    _this.name = _this.font.postscriptName;\n    _this.scale = 1000 / _this.font.unitsPerEm;\n    _this.ascender = _this.font.ascent * _this.scale;\n    _this.descender = _this.font.descent * _this.scale;\n    _this.xHeight = _this.font.xHeight * _this.scale;\n    _this.capHeight = _this.font.capHeight * _this.scale;\n    _this.lineGap = _this.font.lineGap * _this.scale;\n    _this.bbox = _this.font.bbox;\n    if (document.options.fontLayoutCache !== false) {\n      _this.layoutCache = Object.create(null);\n    }\n    return _this;\n  }\n  _createClass(EmbeddedFont, [{\n    key: \"layoutRun\",\n    value: function layoutRun(text, features) {\n      var run = this.font.layout(text, features); // Normalize position values\n\n      for (var i = 0; i < run.positions.length; i++) {\n        var position = run.positions[i];\n        for (var key in position) {\n          position[key] *= this.scale;\n        }\n        position.advanceWidth = run.glyphs[i].advanceWidth * this.scale;\n      }\n      return run;\n    }\n  }, {\n    key: \"layoutCached\",\n    value: function layoutCached(text) {\n      if (!this.layoutCache) {\n        return this.layoutRun(text);\n      }\n      var cached;\n      if (cached = this.layoutCache[text]) {\n        return cached;\n      }\n      var run = this.layoutRun(text);\n      this.layoutCache[text] = run;\n      return run;\n    }\n  }, {\n    key: \"layout\",\n    value: function layout(text, features, onlyWidth) {\n      // Skip the cache if any user defined features are applied\n      if (features) {\n        return this.layoutRun(text, features);\n      }\n      var glyphs = onlyWidth ? null : [];\n      var positions = onlyWidth ? null : [];\n      var advanceWidth = 0; // Split the string by words to increase cache efficiency.\n      // For this purpose, spaces and tabs are a good enough delimeter.\n\n      var last = 0;\n      var index = 0;\n      while (index <= text.length) {\n        var needle;\n        if (index === text.length && last < index || (needle = text.charAt(index), [' ', '\\t'].includes(needle))) {\n          var run = this.layoutCached(text.slice(last, ++index));\n          if (!onlyWidth) {\n            glyphs = glyphs.concat(run.glyphs);\n            positions = positions.concat(run.positions);\n          }\n          advanceWidth += run.advanceWidth;\n          last = index;\n        } else {\n          index++;\n        }\n      }\n      return {\n        glyphs: glyphs,\n        positions: positions,\n        advanceWidth: advanceWidth\n      };\n    }\n  }, {\n    key: \"encode\",\n    value: function encode(text, features) {\n      var _this$layout = this.layout(text, features),\n        glyphs = _this$layout.glyphs,\n        positions = _this$layout.positions;\n      var res = [];\n      for (var i = 0; i < glyphs.length; i++) {\n        var glyph = glyphs[i];\n        var gid = this.subset.includeGlyph(glyph.id);\n        res.push(\"0000\".concat(gid.toString(16)).slice(-4));\n        if (this.widths[gid] == null) {\n          this.widths[gid] = glyph.advanceWidth * this.scale;\n        }\n        if (this.unicode[gid] == null) {\n          this.unicode[gid] = glyph.codePoints;\n        }\n      }\n      return [res, positions];\n    }\n  }, {\n    key: \"widthOfString\",\n    value: function widthOfString(string, size, features) {\n      var width = this.layout(string, features, true).advanceWidth;\n      var scale = size / 1000;\n      return width * scale;\n    }\n  }, {\n    key: \"embed\",\n    value: function embed() {\n      var _this2 = this;\n      var isCFF = this.subset.cff != null;\n      var fontFile = this.document.ref();\n      if (isCFF) {\n        fontFile.data.Subtype = 'CIDFontType0C';\n      }\n      this.subset.encodeStream().on('data', function (data) {\n        return fontFile.write(data);\n      }).on('end', function () {\n        return fontFile.end();\n      });\n      var familyClass = ((this.font['OS/2'] != null ? this.font['OS/2'].sFamilyClass : undefined) || 0) >> 8;\n      var flags = 0;\n      if (this.font.post.isFixedPitch) {\n        flags |= 1 << 0;\n      }\n      if (1 <= familyClass && familyClass <= 7) {\n        flags |= 1 << 1;\n      }\n      flags |= 1 << 2; // assume the font uses non-latin characters\n\n      if (familyClass === 10) {\n        flags |= 1 << 3;\n      }\n      if (this.font.head.macStyle.italic) {\n        flags |= 1 << 6;\n      } // generate a tag (6 uppercase letters. 17 is the char code offset from '0' to 'A'. 73 will map to 'Z')\n\n      var tag = [1, 2, 3, 4, 5, 6].map(function (i) {\n        return String.fromCharCode((_this2.id.charCodeAt(i) || 73) + 17);\n      }).join('');\n      var name = tag + '+' + this.font.postscriptName;\n      var bbox = this.font.bbox;\n      var descriptor = this.document.ref({\n        Type: 'FontDescriptor',\n        FontName: name,\n        Flags: flags,\n        FontBBox: [bbox.minX * this.scale, bbox.minY * this.scale, bbox.maxX * this.scale, bbox.maxY * this.scale],\n        ItalicAngle: this.font.italicAngle,\n        Ascent: this.ascender,\n        Descent: this.descender,\n        CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,\n        XHeight: (this.font.xHeight || 0) * this.scale,\n        StemV: 0\n      }); // not sure how to calculate this\n\n      if (isCFF) {\n        descriptor.data.FontFile3 = fontFile;\n      } else {\n        descriptor.data.FontFile2 = fontFile;\n      }\n      descriptor.end();\n      var descendantFontData = {\n        Type: 'Font',\n        Subtype: 'CIDFontType0',\n        BaseFont: name,\n        CIDSystemInfo: {\n          Registry: new String('Adobe'),\n          Ordering: new String('Identity'),\n          Supplement: 0\n        },\n        FontDescriptor: descriptor,\n        W: [0, this.widths]\n      };\n      if (!isCFF) {\n        descendantFontData.Subtype = 'CIDFontType2';\n        descendantFontData.CIDToGIDMap = 'Identity';\n      }\n      var descendantFont = this.document.ref(descendantFontData);\n      descendantFont.end();\n      this.dictionary.data = {\n        Type: 'Font',\n        Subtype: 'Type0',\n        BaseFont: name,\n        Encoding: 'Identity-H',\n        DescendantFonts: [descendantFont],\n        ToUnicode: this.toUnicodeCmap()\n      };\n      return this.dictionary.end();\n    } // Maps the glyph ids encoded in the PDF back to unicode strings\n    // Because of ligature substitutions and the like, there may be one or more\n    // unicode characters represented by each glyph.\n  }, {\n    key: \"toUnicodeCmap\",\n    value: function toUnicodeCmap() {\n      var cmap = this.document.ref();\n      var entries = [];\n      var _iterator = _createForOfIteratorHelper(this.unicode),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var codePoints = _step.value;\n          var encoded = []; // encode codePoints to utf16\n\n          var _iterator2 = _createForOfIteratorHelper(codePoints),\n            _step2;\n          try {\n            for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n              var value = _step2.value;\n              if (value > 0xffff) {\n                value -= 0x10000;\n                encoded.push(toHex(value >>> 10 & 0x3ff | 0xd800));\n                value = 0xdc00 | value & 0x3ff;\n              }\n              encoded.push(toHex(value));\n            }\n          } catch (err) {\n            _iterator2.e(err);\n          } finally {\n            _iterator2.f();\n          }\n          entries.push(\"<\".concat(encoded.join(' '), \">\"));\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n      cmap.end(\"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n  /Registry (Adobe)\\n  /Ordering (UCS)\\n  /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000><ffff>\\nendcodespacerange\\n1 beginbfrange\\n<0000> <\".concat(toHex(entries.length - 1), \"> [\").concat(entries.join(' '), \"]\\nendbfrange\\nendcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\"));\n      return cmap;\n    }\n  }]);\n  return EmbeddedFont;\n}(PDFFont);\nvar PDFFontFactory = /*#__PURE__*/function () {\n  function PDFFontFactory() {\n    _classCallCheck(this, PDFFontFactory);\n  }\n  _createClass(PDFFontFactory, null, [{\n    key: \"open\",\n    value: function open(document, src, family, id) {\n      var font;\n      if (typeof src === 'string') {\n        if (StandardFont.isStandardFont(src)) {\n          return new StandardFont(document, src, id);\n        }\n        src = fs.readFileSync(src);\n      }\n      if (Buffer.isBuffer(src)) {\n        font = _fontkit.default.create(src, family);\n      } else if (src instanceof Uint8Array) {\n        font = _fontkit.default.create(Buffer.from(src), family);\n      } else if (src instanceof ArrayBuffer) {\n        font = _fontkit.default.create(Buffer.from(new Uint8Array(src)), family);\n      }\n      if (font == null) {\n        throw new Error('Not a supported font format or standard PDF font.');\n      }\n      return new EmbeddedFont(document, font, id);\n    }\n  }]);\n  return PDFFontFactory;\n}();\nvar FontsMixin = {\n  initFonts: function initFonts() {\n    var defaultFont = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Helvetica';\n    // Lookup table for embedded fonts\n    this._fontFamilies = {};\n    this._fontCount = 0; // Font state\n\n    this._fontSize = 12;\n    this._font = null;\n    this._registeredFonts = {}; // Set the default font\n\n    if (defaultFont) {\n      this.font(defaultFont);\n    }\n  },\n  font: function font(src, family, size) {\n    var cacheKey, font;\n    if (typeof family === 'number') {\n      size = family;\n      family = null;\n    } // check registered fonts if src is a string\n\n    if (typeof src === 'string' && this._registeredFonts[src]) {\n      cacheKey = src;\n      var _this$_registeredFont = this._registeredFonts[src];\n      src = _this$_registeredFont.src;\n      family = _this$_registeredFont.family;\n    } else {\n      cacheKey = family || src;\n      if (typeof cacheKey !== 'string') {\n        cacheKey = null;\n      }\n    }\n    if (size != null) {\n      this.fontSize(size);\n    } // fast path: check if the font is already in the PDF\n\n    if (font = this._fontFamilies[cacheKey]) {\n      this._font = font;\n      return this;\n    } // load the font\n\n    var id = \"F\".concat(++this._fontCount);\n    this._font = PDFFontFactory.open(this, src, family, id); // check for existing font familes with the same name already in the PDF\n    // useful if the font was passed as a buffer\n\n    if (font = this._fontFamilies[this._font.name]) {\n      this._font = font;\n      return this;\n    } // save the font for reuse later\n\n    if (cacheKey) {\n      this._fontFamilies[cacheKey] = this._font;\n    }\n    if (this._font.name) {\n      this._fontFamilies[this._font.name] = this._font;\n    }\n    return this;\n  },\n  fontSize: function fontSize(_fontSize) {\n    this._fontSize = _fontSize;\n    return this;\n  },\n  currentLineHeight: function currentLineHeight(includeGap) {\n    if (includeGap == null) {\n      includeGap = false;\n    }\n    return this._font.lineHeight(this._fontSize, includeGap);\n  },\n  registerFont: function registerFont(name, src, family) {\n    this._registeredFonts[name] = {\n      src: src,\n      family: family\n    };\n    return this;\n  }\n};\nvar LineWrapper = /*#__PURE__*/function (_EventEmitter) {\n  _inherits(LineWrapper, _EventEmitter);\n  var _super = _createSuper(LineWrapper);\n  function LineWrapper(document, options) {\n    var _this;\n    _classCallCheck(this, LineWrapper);\n    _this = _super.call(this);\n    _this.document = document;\n    _this.indent = options.indent || 0;\n    _this.characterSpacing = options.characterSpacing || 0;\n    _this.wordSpacing = options.wordSpacing === 0;\n    _this.columns = options.columns || 1;\n    _this.columnGap = options.columnGap != null ? options.columnGap : 18; // 1/4 inch\n\n    _this.lineWidth = (options.width - _this.columnGap * (_this.columns - 1)) / _this.columns;\n    _this.spaceLeft = _this.lineWidth;\n    _this.startX = _this.document.x;\n    _this.startY = _this.document.y;\n    _this.column = 1;\n    _this.ellipsis = options.ellipsis;\n    _this.continuedX = 0;\n    _this.features = options.features; // calculate the maximum Y position the text can appear at\n\n    if (options.height != null) {\n      _this.height = options.height;\n      _this.maxY = _this.startY + options.height;\n    } else {\n      _this.maxY = _this.document.page.maxY();\n    } // handle paragraph indents\n\n    _this.on('firstLine', function (options) {\n      // if this is the first line of the text segment, and\n      // we're continuing where we left off, indent that much\n      // otherwise use the user specified indent option\n      var indent = _this.continuedX || _this.indent;\n      _this.document.x += indent;\n      _this.lineWidth -= indent;\n      return _this.once('line', function () {\n        _this.document.x -= indent;\n        _this.lineWidth += indent;\n        if (options.continued && !_this.continuedX) {\n          _this.continuedX = _this.indent;\n        }\n        if (!options.continued) {\n          return _this.continuedX = 0;\n        }\n      });\n    }); // handle left aligning last lines of paragraphs\n\n    _this.on('lastLine', function (options) {\n      var align = options.align;\n      if (align === 'justify') {\n        options.align = 'left';\n      }\n      _this.lastLine = true;\n      return _this.once('line', function () {\n        _this.document.y += options.paragraphGap || 0;\n        options.align = align;\n        return _this.lastLine = false;\n      });\n    });\n    return _this;\n  }\n  _createClass(LineWrapper, [{\n    key: \"wordWidth\",\n    value: function wordWidth(word) {\n      return this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing;\n    }\n  }, {\n    key: \"eachWord\",\n    value: function eachWord(text, fn) {\n      // setup a unicode line breaker\n      var bk;\n      var breaker = new _linebreak.default(text);\n      var last = null;\n      var wordWidths = Object.create(null);\n      while (bk = breaker.nextBreak()) {\n        var shouldContinue;\n        var word = text.slice((last != null ? last.position : undefined) || 0, bk.position);\n        var w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word); // if the word is longer than the whole line, chop it up\n        // TODO: break by grapheme clusters, not JS string characters\n\n        if (w > this.lineWidth + this.continuedX) {\n          // make some fake break objects\n          var lbk = last;\n          var fbk = {};\n          while (word.length) {\n            // fit as much of the word as possible into the space we have\n            var l, mightGrow;\n            if (w > this.spaceLeft) {\n              // start our check at the end of our available space - this method is faster than a loop of each character and it resolves\n              // an issue with long loops when processing massive words, such as a huge number of spaces\n              l = Math.ceil(this.spaceLeft / (w / word.length));\n              w = this.wordWidth(word.slice(0, l));\n              mightGrow = w <= this.spaceLeft && l < word.length;\n            } else {\n              l = word.length;\n            }\n            var mustShrink = w > this.spaceLeft && l > 0; // shrink or grow word as necessary after our near-guess above\n\n            while (mustShrink || mightGrow) {\n              if (mustShrink) {\n                w = this.wordWidth(word.slice(0, --l));\n                mustShrink = w > this.spaceLeft && l > 0;\n              } else {\n                w = this.wordWidth(word.slice(0, ++l));\n                mustShrink = w > this.spaceLeft && l > 0;\n                mightGrow = w <= this.spaceLeft && l < word.length;\n              }\n            } // check for the edge case where a single character cannot fit into a line.\n\n            if (l === 0 && this.spaceLeft === this.lineWidth) {\n              l = 1;\n            } // send a required break unless this is the last piece and a linebreak is not specified\n\n            fbk.required = bk.required || l < word.length;\n            shouldContinue = fn(word.slice(0, l), w, fbk, lbk);\n            lbk = {\n              required: false\n            }; // get the remaining piece of the word\n\n            word = word.slice(l);\n            w = this.wordWidth(word);\n            if (shouldContinue === false) {\n              break;\n            }\n          }\n        } else {\n          // otherwise just emit the break as it was given to us\n          shouldContinue = fn(word, w, bk, last);\n        }\n        if (shouldContinue === false) {\n          break;\n        }\n        last = bk;\n      }\n    }\n  }, {\n    key: \"wrap\",\n    value: function wrap(text, options) {\n      var _this2 = this;\n\n      // override options from previous continued fragments\n      if (options.indent != null) {\n        this.indent = options.indent;\n      }\n      if (options.characterSpacing != null) {\n        this.characterSpacing = options.characterSpacing;\n      }\n      if (options.wordSpacing != null) {\n        this.wordSpacing = options.wordSpacing;\n      }\n      if (options.ellipsis != null) {\n        this.ellipsis = options.ellipsis;\n      } // make sure we're actually on the page\n      // and that the first line of is never by\n      // itself at the bottom of a page (orphans)\n\n      var nextY = this.document.y + this.document.currentLineHeight(true);\n      if (this.document.y > this.maxY || nextY > this.maxY) {\n        this.nextSection();\n      }\n      var buffer = '';\n      var textWidth = 0;\n      var wc = 0;\n      var lc = 0;\n      var y = this.document.y; // used to reset Y pos if options.continued (below)\n\n      var emitLine = function emitLine() {\n        options.textWidth = textWidth + _this2.wordSpacing * (wc - 1);\n        options.wordCount = wc;\n        options.lineWidth = _this2.lineWidth;\n        y = _this2.document.y;\n        _this2.emit('line', buffer, options, _this2);\n        return lc++;\n      };\n      this.emit('sectionStart', options, this);\n      this.eachWord(text, function (word, w, bk, last) {\n        if (last == null || last.required) {\n          _this2.emit('firstLine', options, _this2);\n          _this2.spaceLeft = _this2.lineWidth;\n        }\n        if (w <= _this2.spaceLeft) {\n          buffer += word;\n          textWidth += w;\n          wc++;\n        }\n        if (bk.required || w > _this2.spaceLeft) {\n          // if the user specified a max height and an ellipsis, and is about to pass the\n          // max height and max columns after the next line, append the ellipsis\n          var lh = _this2.document.currentLineHeight(true);\n          if (_this2.height != null && _this2.ellipsis && _this2.document.y + lh * 2 > _this2.maxY && _this2.column >= _this2.columns) {\n            if (_this2.ellipsis === true) {\n              _this2.ellipsis = '…';\n            } // map default ellipsis character\n\n            buffer = buffer.replace(/\\s+$/, '');\n            textWidth = _this2.wordWidth(buffer + _this2.ellipsis); // remove characters from the buffer until the ellipsis fits\n            // to avoid infinite loop need to stop while-loop if buffer is empty string\n\n            while (buffer && textWidth > _this2.lineWidth) {\n              buffer = buffer.slice(0, -1).replace(/\\s+$/, '');\n              textWidth = _this2.wordWidth(buffer + _this2.ellipsis);\n            } // need to add ellipsis only if there is enough space for it\n\n            if (textWidth <= _this2.lineWidth) {\n              buffer = buffer + _this2.ellipsis;\n            }\n            textWidth = _this2.wordWidth(buffer);\n          }\n          if (bk.required) {\n            if (w > _this2.spaceLeft) {\n              emitLine();\n              buffer = word;\n              textWidth = w;\n              wc = 1;\n            }\n            _this2.emit('lastLine', options, _this2);\n          }\n          emitLine(); // if we've reached the edge of the page,\n          // continue on a new page or column\n\n          if (_this2.document.y + lh > _this2.maxY) {\n            var shouldContinue = _this2.nextSection(); // stop if we reached the maximum height\n\n            if (!shouldContinue) {\n              wc = 0;\n              buffer = '';\n              return false;\n            }\n          } // reset the space left and buffer\n\n          if (bk.required) {\n            _this2.spaceLeft = _this2.lineWidth;\n            buffer = '';\n            textWidth = 0;\n            return wc = 0;\n          } else {\n            // reset the space left and buffer\n            _this2.spaceLeft = _this2.lineWidth - w;\n            buffer = word;\n            textWidth = w;\n            return wc = 1;\n          }\n        } else {\n          return _this2.spaceLeft -= w;\n        }\n      });\n      if (wc > 0) {\n        this.emit('lastLine', options, this);\n        emitLine();\n      }\n      this.emit('sectionEnd', options, this); // if the wrap is set to be continued, save the X position\n      // to start the first line of the next segment at, and reset\n      // the y position\n\n      if (options.continued === true) {\n        if (lc > 1) {\n          this.continuedX = 0;\n        }\n        this.continuedX += options.textWidth || 0;\n        return this.document.y = y;\n      } else {\n        return this.document.x = this.startX;\n      }\n    }\n  }, {\n    key: \"nextSection\",\n    value: function nextSection(options) {\n      this.emit('sectionEnd', options, this);\n      if (++this.column > this.columns) {\n        // if a max height was specified by the user, we're done.\n        // otherwise, the default is to make a new page at the bottom.\n        if (this.height != null) {\n          return false;\n        }\n        this.document.continueOnNewPage();\n        this.column = 1;\n        this.startY = this.document.page.margins.top;\n        this.maxY = this.document.page.maxY();\n        this.document.x = this.startX;\n        if (this.document._fillColor) {\n          var _this$document;\n          (_this$document = this.document).fillColor.apply(_this$document, _toConsumableArray(this.document._fillColor));\n        }\n        this.emit('pageBreak', options, this);\n      } else {\n        this.document.x += this.lineWidth + this.columnGap;\n        this.document.y = this.startY;\n        this.emit('columnBreak', options, this);\n      }\n      this.emit('sectionStart', options, this);\n      return true;\n    }\n  }]);\n  return LineWrapper;\n}(_events.EventEmitter);\nvar number$2 = PDFObject.number;\nvar TextMixin = {\n  initText: function initText() {\n    this._line = this._line.bind(this); // Current coordinates\n\n    this.x = 0;\n    this.y = 0;\n    return this._lineGap = 0;\n  },\n  lineGap: function lineGap(_lineGap) {\n    this._lineGap = _lineGap;\n    return this;\n  },\n  moveDown: function moveDown(lines) {\n    if (lines == null) {\n      lines = 1;\n    }\n    this.y += this.currentLineHeight(true) * lines + this._lineGap;\n    return this;\n  },\n  moveUp: function moveUp(lines) {\n    if (lines == null) {\n      lines = 1;\n    }\n    this.y -= this.currentLineHeight(true) * lines + this._lineGap;\n    return this;\n  },\n  _text: function _text(text, x, y, options, lineCallback) {\n    var _this = this;\n    options = this._initOptions(x, y, options); // Convert text to a string\n\n    text = text == null ? '' : \"\".concat(text); // if the wordSpacing option is specified, remove multiple consecutive spaces\n\n    if (options.wordSpacing) {\n      text = text.replace(/\\s{2,}/g, ' ');\n    }\n    var addStructure = function addStructure() {\n      if (options.structParent) {\n        options.structParent.add(_this.struct(options.structType || 'P', [_this.markStructureContent(options.structType || 'P')]));\n      }\n    }; // word wrapping\n\n    if (options.width) {\n      var wrapper = this._wrapper;\n      if (!wrapper) {\n        wrapper = new LineWrapper(this, options);\n        wrapper.on('line', lineCallback);\n        wrapper.on('firstLine', addStructure);\n      }\n      this._wrapper = options.continued ? wrapper : null;\n      this._textOptions = options.continued ? options : null;\n      wrapper.wrap(text, options); // render paragraphs as single lines\n    } else {\n      var _iterator = _createForOfIteratorHelper(text.split('\\n')),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var line = _step.value;\n          addStructure();\n          lineCallback(line, options);\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n    return this;\n  },\n  text: function text(_text2, x, y, options) {\n    return this._text(_text2, x, y, options, this._line);\n  },\n  widthOfString: function widthOfString(string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    return this._font.widthOfString(string, this._fontSize, options.features) + (options.characterSpacing || 0) * (string.length - 1);\n  },\n  heightOfString: function heightOfString(text, options) {\n    var _this2 = this;\n    var x = this.x,\n      y = this.y;\n    options = this._initOptions(options);\n    options.height = Infinity; // don't break pages\n\n    var lineGap = options.lineGap || this._lineGap || 0;\n    this._text(text, this.x, this.y, options, function () {\n      return _this2.y += _this2.currentLineHeight(true) + lineGap;\n    });\n    var height = this.y - y;\n    this.x = x;\n    this.y = y;\n    return height;\n  },\n  list: function list(_list, x, y, options, wrapper) {\n    var _this3 = this;\n    options = this._initOptions(x, y, options);\n    var listType = options.listType || 'bullet';\n    var unit = Math.round(this._font.ascender / 1000 * this._fontSize);\n    var midLine = unit / 2;\n    var r = options.bulletRadius || unit / 3;\n    var indent = options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2);\n    var itemIndent = options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2);\n    var level = 1;\n    var items = [];\n    var levels = [];\n    var numbers = [];\n    var flatten = function flatten(list) {\n      var n = 1;\n      for (var _i = 0; _i < list.length; _i++) {\n        var item = list[_i];\n        if (Array.isArray(item)) {\n          level++;\n          flatten(item);\n          level--;\n        } else {\n          items.push(item);\n          levels.push(level);\n          if (listType !== 'bullet') {\n            numbers.push(n++);\n          }\n        }\n      }\n    };\n    flatten(_list);\n    var label = function label(n) {\n      switch (listType) {\n        case 'numbered':\n          return \"\".concat(n, \".\");\n        case 'lettered':\n          var letter = String.fromCharCode((n - 1) % 26 + 65);\n          var times = Math.floor((n - 1) / 26 + 1);\n          var text = Array(times + 1).join(letter);\n          return \"\".concat(text, \".\");\n      }\n    };\n    wrapper = new LineWrapper(this, options);\n    wrapper.on('line', this._line);\n    level = 1;\n    var i = 0;\n    wrapper.on('firstLine', function () {\n      var item, itemType, labelType, bodyType;\n      if (options.structParent) {\n        if (options.structTypes) {\n          var _options$structTypes = _slicedToArray(options.structTypes, 3);\n          itemType = _options$structTypes[0];\n          labelType = _options$structTypes[1];\n          bodyType = _options$structTypes[2];\n        } else {\n          itemType = 'LI';\n          labelType = 'Lbl';\n          bodyType = 'LBody';\n        }\n      }\n      if (itemType) {\n        item = _this3.struct(itemType);\n        options.structParent.add(item);\n      } else if (options.structParent) {\n        item = options.structParent;\n      }\n      var l;\n      if ((l = levels[i++]) !== level) {\n        var diff = itemIndent * (l - level);\n        _this3.x += diff;\n        wrapper.lineWidth -= diff;\n        level = l;\n      }\n      if (item && (labelType || bodyType)) {\n        item.add(_this3.struct(labelType || bodyType, [_this3.markStructureContent(labelType || bodyType)]));\n      }\n      switch (listType) {\n        case 'bullet':\n          _this3.circle(_this3.x - indent + r, _this3.y + midLine, r);\n          _this3.fill();\n          break;\n        case 'numbered':\n        case 'lettered':\n          var text = label(numbers[i - 1]);\n          _this3._fragment(text, _this3.x - indent, _this3.y, options);\n          break;\n      }\n      if (item && labelType && bodyType) {\n        item.add(_this3.struct(bodyType, [_this3.markStructureContent(bodyType)]));\n      }\n      if (item && item !== options.structParent) {\n        item.end();\n      }\n    });\n    wrapper.on('sectionStart', function () {\n      var pos = indent + itemIndent * (level - 1);\n      _this3.x += pos;\n      return wrapper.lineWidth -= pos;\n    });\n    wrapper.on('sectionEnd', function () {\n      var pos = indent + itemIndent * (level - 1);\n      _this3.x -= pos;\n      return wrapper.lineWidth += pos;\n    });\n    wrapper.wrap(items.join('\\n'), options);\n    return this;\n  },\n  _initOptions: function _initOptions() {\n    var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var y = arguments.length > 1 ? arguments[1] : undefined;\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    if (typeof x === 'object') {\n      options = x;\n      x = null;\n    } // clone options object\n\n    var result = Object.assign({}, options); // extend options with previous values for continued text\n\n    if (this._textOptions) {\n      for (var key in this._textOptions) {\n        var val = this._textOptions[key];\n        if (key !== 'continued') {\n          if (result[key] === undefined) {\n            result[key] = val;\n          }\n        }\n      }\n    } // Update the current position\n\n    if (x != null) {\n      this.x = x;\n    }\n    if (y != null) {\n      this.y = y;\n    } // wrap to margins if no x or y position passed\n\n    if (result.lineBreak !== false) {\n      if (result.width == null) {\n        result.width = this.page.width - this.x - this.page.margins.right;\n      }\n      result.width = Math.max(result.width, 0);\n    }\n    if (!result.columns) {\n      result.columns = 0;\n    }\n    if (result.columnGap == null) {\n      result.columnGap = 18;\n    } // 1/4 inch\n\n    return result;\n  },\n  _line: function _line(text) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var wrapper = arguments.length > 2 ? arguments[2] : undefined;\n    this._fragment(text, this.x, this.y, options);\n    var lineGap = options.lineGap || this._lineGap || 0;\n    if (!wrapper) {\n      return this.x += this.widthOfString(text);\n    } else {\n      return this.y += this.currentLineHeight(true) + lineGap;\n    }\n  },\n  _fragment: function _fragment(text, x, y, options) {\n    var _this4 = this;\n    var dy, encoded, i, positions, textWidth, words;\n    text = \"\".concat(text).replace(/\\n/g, '');\n    if (text.length === 0) {\n      return;\n    } // handle options\n\n    var align = options.align || 'left';\n    var wordSpacing = options.wordSpacing || 0;\n    var characterSpacing = options.characterSpacing || 0; // text alignments\n\n    if (options.width) {\n      switch (align) {\n        case 'right':\n          textWidth = this.widthOfString(text.replace(/\\s+$/, ''), options);\n          x += options.lineWidth - textWidth;\n          break;\n        case 'center':\n          x += options.lineWidth / 2 - options.textWidth / 2;\n          break;\n        case 'justify':\n          // calculate the word spacing value\n          words = text.trim().split(/\\s+/);\n          textWidth = this.widthOfString(text.replace(/\\s+/g, ''), options);\n          var spaceWidth = this.widthOfString(' ') + characterSpacing;\n          wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth);\n          break;\n      }\n    } // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling\n\n    if (typeof options.baseline === 'number') {\n      dy = -options.baseline;\n    } else {\n      switch (options.baseline) {\n        case 'svg-middle':\n          dy = 0.5 * this._font.xHeight;\n          break;\n        case 'middle':\n        case 'svg-central':\n          dy = 0.5 * (this._font.descender + this._font.ascender);\n          break;\n        case 'bottom':\n        case 'ideographic':\n          dy = this._font.descender;\n          break;\n        case 'alphabetic':\n          dy = 0;\n          break;\n        case 'mathematical':\n          dy = 0.5 * this._font.ascender;\n          break;\n        case 'hanging':\n          dy = 0.8 * this._font.ascender;\n          break;\n        case 'top':\n          dy = this._font.ascender;\n          break;\n        default:\n          dy = this._font.ascender;\n      }\n      dy = dy / 1000 * this._fontSize;\n    } // calculate the actual rendered width of the string after word and character spacing\n\n    var renderedWidth = options.textWidth + wordSpacing * (options.wordCount - 1) + characterSpacing * (text.length - 1); // create link annotations if the link option is given\n\n    if (options.link != null) {\n      this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);\n    }\n    if (options.goTo != null) {\n      this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo);\n    }\n    if (options.destination != null) {\n      this.addNamedDestination(options.destination, 'XYZ', x, y, null);\n    } // create underline\n\n    if (options.underline) {\n      this.save();\n      if (!options.stroke) {\n        this.strokeColor.apply(this, _toConsumableArray(this._fillColor || []));\n      }\n      var lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\n      this.lineWidth(lineWidth);\n      var lineY = y + this.currentLineHeight() - lineWidth;\n      this.moveTo(x, lineY);\n      this.lineTo(x + renderedWidth, lineY);\n      this.stroke();\n      this.restore();\n    } // create strikethrough line\n\n    if (options.strike) {\n      this.save();\n      if (!options.stroke) {\n        this.strokeColor.apply(this, _toConsumableArray(this._fillColor || []));\n      }\n      var _lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\n      this.lineWidth(_lineWidth);\n      var _lineY = y + this.currentLineHeight() / 2;\n      this.moveTo(x, _lineY);\n      this.lineTo(x + renderedWidth, _lineY);\n      this.stroke();\n      this.restore();\n    }\n    this.save(); // oblique (angle in degrees or boolean)\n\n    if (options.oblique) {\n      var skew;\n      if (typeof options.oblique === 'number') {\n        skew = -Math.tan(options.oblique * Math.PI / 180);\n      } else {\n        skew = -0.25;\n      }\n      this.transform(1, 0, 0, 1, x, y);\n      this.transform(1, 0, skew, 1, -skew * dy, 0);\n      this.transform(1, 0, 0, 1, -x, -y);\n    } // flip coordinate system\n\n    this.transform(1, 0, 0, -1, 0, this.page.height);\n    y = this.page.height - y - dy; // add current font to page if necessary\n\n    if (this.page.fonts[this._font.id] == null) {\n      this.page.fonts[this._font.id] = this._font.ref();\n    } // begin the text object\n\n    this.addContent('BT'); // text position\n\n    this.addContent(\"1 0 0 1 \".concat(number$2(x), \" \").concat(number$2(y), \" Tm\")); // font and font size\n\n    this.addContent(\"/\".concat(this._font.id, \" \").concat(number$2(this._fontSize), \" Tf\")); // rendering mode\n\n    var mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;\n    if (mode) {\n      this.addContent(\"\".concat(mode, \" Tr\"));\n    } // Character spacing\n\n    if (characterSpacing) {\n      this.addContent(\"\".concat(number$2(characterSpacing), \" Tc\"));\n    } // Add the actual text\n    // If we have a word spacing value, we need to encode each word separately\n    // since the normal Tw operator only works on character code 32, which isn't\n    // used for embedded fonts.\n\n    if (wordSpacing) {\n      words = text.trim().split(/\\s+/);\n      wordSpacing += this.widthOfString(' ') + characterSpacing;\n      wordSpacing *= 1000 / this._fontSize;\n      encoded = [];\n      positions = [];\n      var _iterator2 = _createForOfIteratorHelper(words),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var word = _step2.value;\n          var _this$_font$encode = this._font.encode(word, options.features),\n            _this$_font$encode2 = _slicedToArray(_this$_font$encode, 2),\n            encodedWord = _this$_font$encode2[0],\n            positionsWord = _this$_font$encode2[1];\n          encoded = encoded.concat(encodedWord);\n          positions = positions.concat(positionsWord); // add the word spacing to the end of the word\n          // clone object because of cache\n\n          var space = {};\n          var object = positions[positions.length - 1];\n          for (var key in object) {\n            var val = object[key];\n            space[key] = val;\n          }\n          space.xAdvance += wordSpacing;\n          positions[positions.length - 1] = space;\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n    } else {\n      var _this$_font$encode3 = this._font.encode(text, options.features);\n      var _this$_font$encode4 = _slicedToArray(_this$_font$encode3, 2);\n      encoded = _this$_font$encode4[0];\n      positions = _this$_font$encode4[1];\n    }\n    var scale = this._fontSize / 1000;\n    var commands = [];\n    var last = 0;\n    var hadOffset = false; // Adds a segment of text to the TJ command buffer\n\n    var addSegment = function addSegment(cur) {\n      if (last < cur) {\n        var hex = encoded.slice(last, cur).join('');\n        var advance = positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth;\n        commands.push(\"<\".concat(hex, \"> \").concat(number$2(-advance)));\n      }\n      return last = cur;\n    }; // Flushes the current TJ commands to the output stream\n\n    var flush = function flush(i) {\n      addSegment(i);\n      if (commands.length > 0) {\n        _this4.addContent(\"[\".concat(commands.join(' '), \"] TJ\"));\n        return commands.length = 0;\n      }\n    };\n    for (i = 0; i < positions.length; i++) {\n      // If we have an x or y offset, we have to break out of the current TJ command\n      // so we can move the text position.\n      var pos = positions[i];\n      if (pos.xOffset || pos.yOffset) {\n        // Flush the current buffer\n        flush(i); // Move the text position and flush just the current character\n\n        this.addContent(\"1 0 0 1 \".concat(number$2(x + pos.xOffset * scale), \" \").concat(number$2(y + pos.yOffset * scale), \" Tm\"));\n        flush(i + 1);\n        hadOffset = true;\n      } else {\n        // If the last character had an offset, reset the text position\n        if (hadOffset) {\n          this.addContent(\"1 0 0 1 \".concat(number$2(x), \" \").concat(number$2(y), \" Tm\"));\n          hadOffset = false;\n        } // Group segments that don't have any advance adjustments\n\n        if (pos.xAdvance - pos.advanceWidth !== 0) {\n          addSegment(i + 1);\n        }\n      }\n      x += pos.xAdvance * scale;\n    } // Flush any remaining commands\n\n    flush(i); // end the text object\n\n    this.addContent('ET'); // restore flipped coordinate system\n\n    return this.restore();\n  }\n};\nvar MARKERS = [0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc8, 0xffc9, 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf];\nvar COLOR_SPACE_MAP = {\n  1: 'DeviceGray',\n  3: 'DeviceRGB',\n  4: 'DeviceCMYK'\n};\nvar JPEG = /*#__PURE__*/function () {\n  function JPEG(data, label) {\n    _classCallCheck(this, JPEG);\n    var marker;\n    this.data = data;\n    this.label = label;\n    if (this.data.readUInt16BE(0) !== 0xffd8) {\n      throw 'SOI not found in JPEG';\n    }\n    var pos = 2;\n    while (pos < this.data.length) {\n      marker = this.data.readUInt16BE(pos);\n      pos += 2;\n      if (MARKERS.includes(marker)) {\n        break;\n      }\n      pos += this.data.readUInt16BE(pos);\n    }\n    if (!MARKERS.includes(marker)) {\n      throw 'Invalid JPEG.';\n    }\n    pos += 2;\n    this.bits = this.data[pos++];\n    this.height = this.data.readUInt16BE(pos);\n    pos += 2;\n    this.width = this.data.readUInt16BE(pos);\n    pos += 2;\n    var channels = this.data[pos++];\n    this.colorSpace = COLOR_SPACE_MAP[channels];\n    this.obj = null;\n  }\n  _createClass(JPEG, [{\n    key: \"embed\",\n    value: function embed(document) {\n      if (this.obj) {\n        return;\n      }\n      this.obj = document.ref({\n        Type: 'XObject',\n        Subtype: 'Image',\n        BitsPerComponent: this.bits,\n        Width: this.width,\n        Height: this.height,\n        ColorSpace: this.colorSpace,\n        Filter: 'DCTDecode'\n      }); // add extra decode params for CMYK images. By swapping the\n      // min and max values from the default, we invert the colors. See\n      // section 4.8.4 of the spec.\n\n      if (this.colorSpace === 'DeviceCMYK') {\n        this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];\n      }\n      this.obj.end(this.data); // free memory\n\n      return this.data = null;\n    }\n  }]);\n  return JPEG;\n}();\nvar PNGImage = /*#__PURE__*/function () {\n  function PNGImage(data, label) {\n    _classCallCheck(this, PNGImage);\n    this.label = label;\n    this.image = new _pngJs.default(data);\n    this.width = this.image.width;\n    this.height = this.image.height;\n    this.imgData = this.image.imgData;\n    this.obj = null;\n  }\n  _createClass(PNGImage, [{\n    key: \"embed\",\n    value: function embed(document) {\n      var dataDecoded = false;\n      this.document = document;\n      if (this.obj) {\n        return;\n      }\n      var hasAlphaChannel = this.image.hasAlphaChannel;\n      var isInterlaced = this.image.interlaceMethod === 1;\n      this.obj = this.document.ref({\n        Type: 'XObject',\n        Subtype: 'Image',\n        BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits,\n        Width: this.width,\n        Height: this.height,\n        Filter: 'FlateDecode'\n      });\n      if (!hasAlphaChannel) {\n        var params = this.document.ref({\n          Predictor: isInterlaced ? 1 : 15,\n          Colors: this.image.colors,\n          BitsPerComponent: this.image.bits,\n          Columns: this.width\n        });\n        this.obj.data['DecodeParms'] = params;\n        params.end();\n      }\n      if (this.image.palette.length === 0) {\n        this.obj.data['ColorSpace'] = this.image.colorSpace;\n      } else {\n        // embed the color palette in the PDF as an object stream\n        var palette = this.document.ref();\n        palette.end(Buffer.from(this.image.palette)); // build the color space array for the image\n\n        this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', this.image.palette.length / 3 - 1, palette];\n      } // For PNG color types 0, 2 and 3, the transparency data is stored in\n      // a dedicated PNG chunk.\n\n      if (this.image.transparency.grayscale != null) {\n        // Use Color Key Masking (spec section 4.8.5)\n        // An array with N elements, where N is two times the number of color components.\n        var val = this.image.transparency.grayscale;\n        this.obj.data['Mask'] = [val, val];\n      } else if (this.image.transparency.rgb) {\n        // Use Color Key Masking (spec section 4.8.5)\n        // An array with N elements, where N is two times the number of color components.\n        var rgb = this.image.transparency.rgb;\n        var mask = [];\n        var _iterator = _createForOfIteratorHelper(rgb),\n          _step;\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var x = _step.value;\n            mask.push(x, x);\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n        this.obj.data['Mask'] = mask;\n      } else if (this.image.transparency.indexed) {\n        // Create a transparency SMask for the image based on the data\n        // in the PLTE and tRNS sections. See below for details on SMasks.\n        dataDecoded = true;\n        return this.loadIndexedAlphaChannel();\n      } else if (hasAlphaChannel) {\n        // For PNG color types 4 and 6, the transparency data is stored as a alpha\n        // channel mixed in with the main image data. Separate this data out into an\n        // SMask object and store it separately in the PDF.\n        dataDecoded = true;\n        return this.splitAlphaChannel();\n      }\n      if (isInterlaced && !dataDecoded) {\n        return this.decodeData();\n      }\n      this.finalize();\n    }\n  }, {\n    key: \"finalize\",\n    value: function finalize() {\n      if (this.alphaChannel) {\n        var sMask = this.document.ref({\n          Type: 'XObject',\n          Subtype: 'Image',\n          Height: this.height,\n          Width: this.width,\n          BitsPerComponent: 8,\n          Filter: 'FlateDecode',\n          ColorSpace: 'DeviceGray',\n          Decode: [0, 1]\n        });\n        sMask.end(this.alphaChannel);\n        this.obj.data['SMask'] = sMask;\n      } // add the actual image data\n\n      this.obj.end(this.imgData); // free memory\n\n      this.image = null;\n      return this.imgData = null;\n    }\n  }, {\n    key: \"splitAlphaChannel\",\n    value: function splitAlphaChannel() {\n      var _this = this;\n      return this.image.decodePixels(function (pixels) {\n        var a, p;\n        var colorCount = _this.image.colors;\n        var pixelCount = _this.width * _this.height;\n        var imgData = Buffer.alloc(pixelCount * colorCount);\n        var alphaChannel = Buffer.alloc(pixelCount);\n        var i = p = a = 0;\n        var len = pixels.length; // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first)\n\n        var skipByteCount = _this.image.bits === 16 ? 1 : 0;\n        while (i < len) {\n          for (var colorIndex = 0; colorIndex < colorCount; colorIndex++) {\n            imgData[p++] = pixels[i++];\n            i += skipByteCount;\n          }\n          alphaChannel[a++] = pixels[i++];\n          i += skipByteCount;\n        }\n        _this.imgData = _zlib.default.deflateSync(imgData);\n        _this.alphaChannel = _zlib.default.deflateSync(alphaChannel);\n        return _this.finalize();\n      });\n    }\n  }, {\n    key: \"loadIndexedAlphaChannel\",\n    value: function loadIndexedAlphaChannel() {\n      var _this2 = this;\n      var transparency = this.image.transparency.indexed;\n      return this.image.decodePixels(function (pixels) {\n        var alphaChannel = Buffer.alloc(_this2.width * _this2.height);\n        var i = 0;\n        for (var j = 0, end = pixels.length; j < end; j++) {\n          alphaChannel[i++] = transparency[pixels[j]];\n        }\n        _this2.alphaChannel = _zlib.default.deflateSync(alphaChannel);\n        return _this2.finalize();\n      });\n    }\n  }, {\n    key: \"decodeData\",\n    value: function decodeData() {\n      var _this3 = this;\n      this.image.decodePixels(function (pixels) {\n        _this3.imgData = _zlib.default.deflateSync(pixels);\n        _this3.finalize();\n      });\n    }\n  }]);\n  return PNGImage;\n}();\nvar PDFImage = /*#__PURE__*/function () {\n  function PDFImage() {\n    _classCallCheck(this, PDFImage);\n  }\n  _createClass(PDFImage, null, [{\n    key: \"open\",\n    value: function open(src, label) {\n      var data;\n      if (Buffer.isBuffer(src)) {\n        data = src;\n      } else if (src instanceof ArrayBuffer) {\n        data = Buffer.from(new Uint8Array(src));\n      } else {\n        var match;\n        if (match = /^data:.+;base64,(.*)$/.exec(src)) {\n          data = Buffer.from(match[1], 'base64');\n        } else {\n          data = fs.readFileSync(src);\n          if (!data) {\n            return;\n          }\n        }\n      }\n      if (data[0] === 0xff && data[1] === 0xd8) {\n        return new JPEG(data, label);\n      } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {\n        return new PNGImage(data, label);\n      } else {\n        throw new Error('Unknown image format.');\n      }\n    }\n  }]);\n  return PDFImage;\n}();\nvar ImagesMixin = {\n  initImages: function initImages() {\n    this._imageRegistry = {};\n    return this._imageCount = 0;\n  },\n  image: function image(src, x, y) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var bh, bp, bw, image, ip, left, left1;\n    if (typeof x === 'object') {\n      options = x;\n      x = null;\n    }\n    x = (left = x != null ? x : options.x) != null ? left : this.x;\n    y = (left1 = y != null ? y : options.y) != null ? left1 : this.y;\n    if (typeof src === 'string') {\n      image = this._imageRegistry[src];\n    }\n    if (!image) {\n      if (src.width && src.height) {\n        image = src;\n      } else {\n        image = this.openImage(src);\n      }\n    }\n    if (!image.obj) {\n      image.embed(this);\n    }\n    if (this.page.xobjects[image.label] == null) {\n      this.page.xobjects[image.label] = image.obj;\n    }\n    var w = options.width || image.width;\n    var h = options.height || image.height;\n    if (options.width && !options.height) {\n      var wp = w / image.width;\n      w = image.width * wp;\n      h = image.height * wp;\n    } else if (options.height && !options.width) {\n      var hp = h / image.height;\n      w = image.width * hp;\n      h = image.height * hp;\n    } else if (options.scale) {\n      w = image.width * options.scale;\n      h = image.height * options.scale;\n    } else if (options.fit) {\n      var _options$fit = _slicedToArray(options.fit, 2);\n      bw = _options$fit[0];\n      bh = _options$fit[1];\n      bp = bw / bh;\n      ip = image.width / image.height;\n      if (ip > bp) {\n        w = bw;\n        h = bw / ip;\n      } else {\n        h = bh;\n        w = bh * ip;\n      }\n    } else if (options.cover) {\n      var _options$cover = _slicedToArray(options.cover, 2);\n      bw = _options$cover[0];\n      bh = _options$cover[1];\n      bp = bw / bh;\n      ip = image.width / image.height;\n      if (ip > bp) {\n        h = bh;\n        w = bh * ip;\n      } else {\n        w = bw;\n        h = bw / ip;\n      }\n    }\n    if (options.fit || options.cover) {\n      if (options.align === 'center') {\n        x = x + bw / 2 - w / 2;\n      } else if (options.align === 'right') {\n        x = x + bw - w;\n      }\n      if (options.valign === 'center') {\n        y = y + bh / 2 - h / 2;\n      } else if (options.valign === 'bottom') {\n        y = y + bh - h;\n      }\n    } // create link annotations if the link option is given\n\n    if (options.link != null) {\n      this.link(x, y, w, h, options.link);\n    }\n    if (options.goTo != null) {\n      this.goTo(x, y, w, h, options.goTo);\n    }\n    if (options.destination != null) {\n      this.addNamedDestination(options.destination, 'XYZ', x, y, null);\n    } // Set the current y position to below the image if it is in the document flow\n\n    if (this.y === y) {\n      this.y += h;\n    }\n    this.save();\n    this.transform(w, 0, 0, -h, x, y + h);\n    this.addContent(\"/\".concat(image.label, \" Do\"));\n    this.restore();\n    return this;\n  },\n  openImage: function openImage(src) {\n    var image;\n    if (typeof src === 'string') {\n      image = this._imageRegistry[src];\n    }\n    if (!image) {\n      image = PDFImage.open(src, \"I\".concat(++this._imageCount));\n      if (typeof src === 'string') {\n        this._imageRegistry[src] = image;\n      }\n    }\n    return image;\n  }\n};\nvar AnnotationsMixin = {\n  annotate: function annotate(x, y, w, h, options) {\n    options.Type = 'Annot';\n    options.Rect = this._convertRect(x, y, w, h);\n    options.Border = [0, 0, 0];\n    if (options.Subtype === 'Link' && typeof options.F === 'undefined') {\n      options.F = 1 << 2; // Print Annotation Flag\n    }\n\n    if (options.Subtype !== 'Link') {\n      if (options.C == null) {\n        options.C = this._normalizeColor(options.color || [0, 0, 0]);\n      }\n    } // convert colors\n\n    delete options.color;\n    if (typeof options.Dest === 'string') {\n      options.Dest = new String(options.Dest);\n    } // Capitalize keys\n\n    for (var key in options) {\n      var val = options[key];\n      options[key[0].toUpperCase() + key.slice(1)] = val;\n    }\n    var ref = this.ref(options);\n    this.page.annotations.push(ref);\n    ref.end();\n    return this;\n  },\n  note: function note(x, y, w, h, contents) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    options.Subtype = 'Text';\n    options.Contents = new String(contents);\n    options.Name = 'Comment';\n    if (options.color == null) {\n      options.color = [243, 223, 92];\n    }\n    return this.annotate(x, y, w, h, options);\n  },\n  goTo: function goTo(x, y, w, h, name) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    options.Subtype = 'Link';\n    options.A = this.ref({\n      S: 'GoTo',\n      D: new String(name)\n    });\n    options.A.end();\n    return this.annotate(x, y, w, h, options);\n  },\n  link: function link(x, y, w, h, url) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    options.Subtype = 'Link';\n    if (typeof url === 'number') {\n      // Link to a page in the document (the page must already exist)\n      var pages = this._root.data.Pages.data;\n      if (url >= 0 && url < pages.Kids.length) {\n        options.A = this.ref({\n          S: 'GoTo',\n          D: [pages.Kids[url], 'XYZ', null, null, null]\n        });\n        options.A.end();\n      } else {\n        throw new Error(\"The document has no page \".concat(url));\n      }\n    } else {\n      // Link to an external url\n      options.A = this.ref({\n        S: 'URI',\n        URI: new String(url)\n      });\n      options.A.end();\n    }\n    return this.annotate(x, y, w, h, options);\n  },\n  _markup: function _markup(x, y, w, h) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    var _this$_convertRect = this._convertRect(x, y, w, h),\n      _this$_convertRect2 = _slicedToArray(_this$_convertRect, 4),\n      x1 = _this$_convertRect2[0],\n      y1 = _this$_convertRect2[1],\n      x2 = _this$_convertRect2[2],\n      y2 = _this$_convertRect2[3];\n    options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];\n    options.Contents = new String();\n    return this.annotate(x, y, w, h, options);\n  },\n  highlight: function highlight(x, y, w, h) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    options.Subtype = 'Highlight';\n    if (options.color == null) {\n      options.color = [241, 238, 148];\n    }\n    return this._markup(x, y, w, h, options);\n  },\n  underline: function underline(x, y, w, h) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    options.Subtype = 'Underline';\n    return this._markup(x, y, w, h, options);\n  },\n  strike: function strike(x, y, w, h) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    options.Subtype = 'StrikeOut';\n    return this._markup(x, y, w, h, options);\n  },\n  lineAnnotation: function lineAnnotation(x1, y1, x2, y2) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    options.Subtype = 'Line';\n    options.Contents = new String();\n    options.L = [x1, this.page.height - y1, x2, this.page.height - y2];\n    return this.annotate(x1, y1, x2, y2, options);\n  },\n  rectAnnotation: function rectAnnotation(x, y, w, h) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    options.Subtype = 'Square';\n    options.Contents = new String();\n    return this.annotate(x, y, w, h, options);\n  },\n  ellipseAnnotation: function ellipseAnnotation(x, y, w, h) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    options.Subtype = 'Circle';\n    options.Contents = new String();\n    return this.annotate(x, y, w, h, options);\n  },\n  textAnnotation: function textAnnotation(x, y, w, h, text) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    options.Subtype = 'FreeText';\n    options.Contents = new String(text);\n    options.DA = new String();\n    return this.annotate(x, y, w, h, options);\n  },\n  fileAnnotation: function fileAnnotation(x, y, w, h) {\n    var file = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    // create hidden file\n    var filespec = this.file(file.src, Object.assign({\n      hidden: true\n    }, file));\n    options.Subtype = 'FileAttachment';\n    options.FS = filespec; // add description from filespec unless description (Contents) has already been set\n\n    if (options.Contents) {\n      options.Contents = new String(options.Contents);\n    } else if (filespec.data.Desc) {\n      options.Contents = filespec.data.Desc;\n    }\n    return this.annotate(x, y, w, h, options);\n  },\n  _convertRect: function _convertRect(x1, y1, w, h) {\n    // flip y1 and y2\n    var y2 = y1;\n    y1 += h; // make x2\n\n    var x2 = x1 + w; // apply current transformation matrix to points\n\n    var _this$_ctm = _slicedToArray(this._ctm, 6),\n      m0 = _this$_ctm[0],\n      m1 = _this$_ctm[1],\n      m2 = _this$_ctm[2],\n      m3 = _this$_ctm[3],\n      m4 = _this$_ctm[4],\n      m5 = _this$_ctm[5];\n    x1 = m0 * x1 + m2 * y1 + m4;\n    y1 = m1 * x1 + m3 * y1 + m5;\n    x2 = m0 * x2 + m2 * y2 + m4;\n    y2 = m1 * x2 + m3 * y2 + m5;\n    return [x1, y1, x2, y2];\n  }\n};\nvar PDFOutline = /*#__PURE__*/function () {\n  function PDFOutline(document, parent, title, dest) {\n    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n      expanded: false\n    };\n    _classCallCheck(this, PDFOutline);\n    this.document = document;\n    this.options = options;\n    this.outlineData = {};\n    if (dest !== null) {\n      this.outlineData['Dest'] = [dest.dictionary, 'Fit'];\n    }\n    if (parent !== null) {\n      this.outlineData['Parent'] = parent;\n    }\n    if (title !== null) {\n      this.outlineData['Title'] = new String(title);\n    }\n    this.dictionary = this.document.ref(this.outlineData);\n    this.children = [];\n  }\n  _createClass(PDFOutline, [{\n    key: \"addItem\",\n    value: function addItem(title) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        expanded: false\n      };\n      var result = new PDFOutline(this.document, this.dictionary, title, this.document.page, options);\n      this.children.push(result);\n      return result;\n    }\n  }, {\n    key: \"endOutline\",\n    value: function endOutline() {\n      if (this.children.length > 0) {\n        if (this.options.expanded) {\n          this.outlineData.Count = this.children.length;\n        }\n        var first = this.children[0],\n          last = this.children[this.children.length - 1];\n        this.outlineData.First = first.dictionary;\n        this.outlineData.Last = last.dictionary;\n        for (var i = 0, len = this.children.length; i < len; i++) {\n          var child = this.children[i];\n          if (i > 0) {\n            child.outlineData.Prev = this.children[i - 1].dictionary;\n          }\n          if (i < this.children.length - 1) {\n            child.outlineData.Next = this.children[i + 1].dictionary;\n          }\n          child.endOutline();\n        }\n      }\n      return this.dictionary.end();\n    }\n  }]);\n  return PDFOutline;\n}();\nvar OutlineMixin = {\n  initOutline: function initOutline() {\n    return this.outline = new PDFOutline(this, null, null, null);\n  },\n  endOutline: function endOutline() {\n    this.outline.endOutline();\n    if (this.outline.children.length > 0) {\n      this._root.data.Outlines = this.outline.dictionary;\n      return this._root.data.PageMode = 'UseOutlines';\n    }\n  }\n};\n\n/*\nPDFStructureContent - a reference to a marked structure content\nBy Ben Schmidt\n*/\nvar PDFStructureContent = /*#__PURE__*/function () {\n  function PDFStructureContent(pageRef, mcid) {\n    _classCallCheck(this, PDFStructureContent);\n    this.refs = [{\n      pageRef: pageRef,\n      mcid: mcid\n    }];\n  }\n  _createClass(PDFStructureContent, [{\n    key: \"push\",\n    value: function push(structContent) {\n      var _this = this;\n      structContent.refs.forEach(function (ref) {\n        return _this.refs.push(ref);\n      });\n    }\n  }]);\n  return PDFStructureContent;\n}();\nvar PDFStructureElement = /*#__PURE__*/function () {\n  function PDFStructureElement(document, type) {\n    var _this = this;\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var children = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n    _classCallCheck(this, PDFStructureElement);\n    this.document = document;\n    this._attached = false;\n    this._ended = false;\n    this._flushed = false;\n    this.dictionary = document.ref({\n      // Type: \"StructElem\",\n      S: type\n    });\n    var data = this.dictionary.data;\n    if (Array.isArray(options) || this._isValidChild(options)) {\n      children = options;\n      options = {};\n    }\n    if (typeof options.title !== 'undefined') {\n      data.T = new String(options.title);\n    }\n    if (typeof options.lang !== 'undefined') {\n      data.Lang = new String(options.lang);\n    }\n    if (typeof options.alt !== 'undefined') {\n      data.Alt = new String(options.alt);\n    }\n    if (typeof options.expanded !== 'undefined') {\n      data.E = new String(options.expanded);\n    }\n    if (typeof options.actual !== 'undefined') {\n      data.ActualText = new String(options.actual);\n    }\n    this._children = [];\n    if (children) {\n      if (!Array.isArray(children)) {\n        children = [children];\n      }\n      children.forEach(function (child) {\n        return _this.add(child);\n      });\n      this.end();\n    }\n  }\n  _createClass(PDFStructureElement, [{\n    key: \"add\",\n    value: function add(child) {\n      if (this._ended) {\n        throw new Error(\"Cannot add child to already-ended structure element\");\n      }\n      if (!this._isValidChild(child)) {\n        throw new Error(\"Invalid structure element child\");\n      }\n      if (child instanceof PDFStructureElement) {\n        child.setParent(this.dictionary);\n        if (this._attached) {\n          child.setAttached();\n        }\n      }\n      if (child instanceof PDFStructureContent) {\n        this._addContentToParentTree(child);\n      }\n      if (typeof child === 'function' && this._attached) {\n        // _contentForClosure() adds the content to the parent tree\n        child = this._contentForClosure(child);\n      }\n      this._children.push(child);\n      return this;\n    }\n  }, {\n    key: \"_addContentToParentTree\",\n    value: function _addContentToParentTree(content) {\n      var _this2 = this;\n      content.refs.forEach(function (_ref) {\n        var pageRef = _ref.pageRef,\n          mcid = _ref.mcid;\n        var pageStructParents = _this2.document.getStructParentTree().get(pageRef.data.StructParents);\n        pageStructParents[mcid] = _this2.dictionary;\n      });\n    }\n  }, {\n    key: \"setParent\",\n    value: function setParent(parentRef) {\n      if (this.dictionary.data.P) {\n        throw new Error(\"Structure element added to more than one parent\");\n      }\n      this.dictionary.data.P = parentRef;\n      this._flush();\n    }\n  }, {\n    key: \"setAttached\",\n    value: function setAttached() {\n      var _this3 = this;\n      if (this._attached) {\n        return;\n      }\n      this._children.forEach(function (child, index) {\n        if (child instanceof PDFStructureElement) {\n          child.setAttached();\n        }\n        if (typeof child === 'function') {\n          _this3._children[index] = _this3._contentForClosure(child);\n        }\n      });\n      this._attached = true;\n      this._flush();\n    }\n  }, {\n    key: \"end\",\n    value: function end() {\n      if (this._ended) {\n        return;\n      }\n      this._children.filter(function (child) {\n        return child instanceof PDFStructureElement;\n      }).forEach(function (child) {\n        return child.end();\n      });\n      this._ended = true;\n      this._flush();\n    }\n  }, {\n    key: \"_isValidChild\",\n    value: function _isValidChild(child) {\n      return child instanceof PDFStructureElement || child instanceof PDFStructureContent || typeof child === 'function';\n    }\n  }, {\n    key: \"_contentForClosure\",\n    value: function _contentForClosure(closure) {\n      var content = this.document.markStructureContent(this.dictionary.data.S);\n      closure();\n      this.document.endMarkedContent();\n      this._addContentToParentTree(content);\n      return content;\n    }\n  }, {\n    key: \"_isFlushable\",\n    value: function _isFlushable() {\n      if (!this.dictionary.data.P || !this._ended) {\n        return false;\n      }\n      return this._children.every(function (child) {\n        if (typeof child === 'function') {\n          return false;\n        }\n        if (child instanceof PDFStructureElement) {\n          return child._isFlushable();\n        }\n        return true;\n      });\n    }\n  }, {\n    key: \"_flush\",\n    value: function _flush() {\n      var _this4 = this;\n      if (this._flushed || !this._isFlushable()) {\n        return;\n      }\n      this.dictionary.data.K = [];\n      this._children.forEach(function (child) {\n        return _this4._flushChild(child);\n      });\n      this.dictionary.end(); // free memory used by children; the dictionary itself may still be\n      // referenced by a parent structure element or root, but we can\n      // at least trim the tree here\n\n      this._children = [];\n      this.dictionary.data.K = null;\n      this._flushed = true;\n    }\n  }, {\n    key: \"_flushChild\",\n    value: function _flushChild(child) {\n      var _this5 = this;\n      if (child instanceof PDFStructureElement) {\n        this.dictionary.data.K.push(child.dictionary);\n      }\n      if (child instanceof PDFStructureContent) {\n        child.refs.forEach(function (_ref2) {\n          var pageRef = _ref2.pageRef,\n            mcid = _ref2.mcid;\n          if (!_this5.dictionary.data.Pg) {\n            _this5.dictionary.data.Pg = pageRef;\n          }\n          if (_this5.dictionary.data.Pg === pageRef) {\n            _this5.dictionary.data.K.push(mcid);\n          } else {\n            _this5.dictionary.data.K.push({\n              Type: \"MCR\",\n              Pg: pageRef,\n              MCID: mcid\n            });\n          }\n        });\n      }\n    }\n  }]);\n  return PDFStructureElement;\n}();\nvar PDFNumberTree = /*#__PURE__*/function (_PDFTree) {\n  _inherits(PDFNumberTree, _PDFTree);\n  var _super = _createSuper(PDFNumberTree);\n  function PDFNumberTree() {\n    _classCallCheck(this, PDFNumberTree);\n    return _super.apply(this, arguments);\n  }\n  _createClass(PDFNumberTree, [{\n    key: \"_compareKeys\",\n    value: function _compareKeys(a, b) {\n      return parseInt(a) - parseInt(b);\n    }\n  }, {\n    key: \"_keysName\",\n    value: function _keysName() {\n      return \"Nums\";\n    }\n  }, {\n    key: \"_dataForKey\",\n    value: function _dataForKey(k) {\n      return parseInt(k);\n    }\n  }]);\n  return PDFNumberTree;\n}(PDFTree);\nvar MarkingsMixin = {\n  initMarkings: function initMarkings(options) {\n    this.structChildren = [];\n    if (options.tagged) {\n      this.getMarkInfoDictionary().data.Marked = true;\n      this.getStructTreeRoot();\n    }\n  },\n  markContent: function markContent(tag) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    if (tag === 'Artifact' || options && options.mcid) {\n      var toClose = 0;\n      this.page.markings.forEach(function (marking) {\n        if (toClose || marking.structContent || marking.tag === 'Artifact') {\n          toClose++;\n        }\n      });\n      while (toClose--) {\n        this.endMarkedContent();\n      }\n    }\n    if (!options) {\n      this.page.markings.push({\n        tag: tag\n      });\n      this.addContent(\"/\".concat(tag, \" BMC\"));\n      return this;\n    }\n    this.page.markings.push({\n      tag: tag,\n      options: options\n    });\n    var dictionary = {};\n    if (typeof options.mcid !== 'undefined') {\n      dictionary.MCID = options.mcid;\n    }\n    if (tag === 'Artifact') {\n      if (typeof options.type === 'string') {\n        dictionary.Type = options.type;\n      }\n      if (Array.isArray(options.bbox)) {\n        dictionary.BBox = [options.bbox[0], this.page.height - options.bbox[3], options.bbox[2], this.page.height - options.bbox[1]];\n      }\n      if (Array.isArray(options.attached) && options.attached.every(function (val) {\n        return typeof val === 'string';\n      })) {\n        dictionary.Attached = options.attached;\n      }\n    }\n    if (tag === 'Span') {\n      if (options.lang) {\n        dictionary.Lang = new String(options.lang);\n      }\n      if (options.alt) {\n        dictionary.Alt = new String(options.alt);\n      }\n      if (options.expanded) {\n        dictionary.E = new String(options.expanded);\n      }\n      if (options.actual) {\n        dictionary.ActualText = new String(options.actual);\n      }\n    }\n    this.addContent(\"/\".concat(tag, \" \").concat(PDFObject.convert(dictionary), \" BDC\"));\n    return this;\n  },\n  markStructureContent: function markStructureContent(tag) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var pageStructParents = this.getStructParentTree().get(this.page.structParentTreeKey);\n    var mcid = pageStructParents.length;\n    pageStructParents.push(null);\n    this.markContent(tag, _objectSpread2(_objectSpread2({}, options), {}, {\n      mcid: mcid\n    }));\n    var structContent = new PDFStructureContent(this.page.dictionary, mcid);\n    this.page.markings.slice(-1)[0].structContent = structContent;\n    return structContent;\n  },\n  endMarkedContent: function endMarkedContent() {\n    this.page.markings.pop();\n    this.addContent('EMC');\n    return this;\n  },\n  struct: function struct(type) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var children = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n    return new PDFStructureElement(this, type, options, children);\n  },\n  addStructure: function addStructure(structElem) {\n    var structTreeRoot = this.getStructTreeRoot();\n    structElem.setParent(structTreeRoot);\n    structElem.setAttached();\n    this.structChildren.push(structElem);\n    if (!structTreeRoot.data.K) {\n      structTreeRoot.data.K = [];\n    }\n    structTreeRoot.data.K.push(structElem.dictionary);\n    return this;\n  },\n  initPageMarkings: function initPageMarkings(pageMarkings) {\n    var _this = this;\n    pageMarkings.forEach(function (marking) {\n      if (marking.structContent) {\n        var structContent = marking.structContent;\n        var newStructContent = _this.markStructureContent(marking.tag, marking.options);\n        structContent.push(newStructContent);\n        _this.page.markings.slice(-1)[0].structContent = structContent;\n      } else {\n        _this.markContent(marking.tag, marking.options);\n      }\n    });\n  },\n  endPageMarkings: function endPageMarkings(page) {\n    var pageMarkings = page.markings;\n    pageMarkings.forEach(function () {\n      return page.write('EMC');\n    });\n    page.markings = [];\n    return pageMarkings;\n  },\n  getMarkInfoDictionary: function getMarkInfoDictionary() {\n    if (!this._root.data.MarkInfo) {\n      this._root.data.MarkInfo = this.ref({});\n    }\n    return this._root.data.MarkInfo;\n  },\n  getStructTreeRoot: function getStructTreeRoot() {\n    if (!this._root.data.StructTreeRoot) {\n      this._root.data.StructTreeRoot = this.ref({\n        Type: 'StructTreeRoot',\n        ParentTree: new PDFNumberTree(),\n        ParentTreeNextKey: 0\n      });\n    }\n    return this._root.data.StructTreeRoot;\n  },\n  getStructParentTree: function getStructParentTree() {\n    return this.getStructTreeRoot().data.ParentTree;\n  },\n  createStructParentTreeNextKey: function createStructParentTreeNextKey() {\n    // initialise the MarkInfo dictionary\n    this.getMarkInfoDictionary();\n    var structTreeRoot = this.getStructTreeRoot();\n    var key = structTreeRoot.data.ParentTreeNextKey++;\n    structTreeRoot.data.ParentTree.add(key, []);\n    return key;\n  },\n  endMarkings: function endMarkings() {\n    var structTreeRoot = this._root.data.StructTreeRoot;\n    if (structTreeRoot) {\n      structTreeRoot.end();\n      this.structChildren.forEach(function (structElem) {\n        return structElem.end();\n      });\n    }\n    if (this._root.data.MarkInfo) {\n      this._root.data.MarkInfo.end();\n    }\n  }\n};\nvar FIELD_FLAGS = {\n  readOnly: 1,\n  required: 2,\n  noExport: 4,\n  multiline: 0x1000,\n  password: 0x2000,\n  toggleToOffButton: 0x4000,\n  radioButton: 0x8000,\n  pushButton: 0x10000,\n  combo: 0x20000,\n  edit: 0x40000,\n  sort: 0x80000,\n  multiSelect: 0x200000,\n  noSpell: 0x400000\n};\nvar FIELD_JUSTIFY = {\n  left: 0,\n  center: 1,\n  right: 2\n};\nvar VALUE_MAP = {\n  value: 'V',\n  defaultValue: 'DV'\n};\nvar FORMAT_SPECIAL = {\n  zip: '0',\n  zipPlus4: '1',\n  zip4: '1',\n  phone: '2',\n  ssn: '3'\n};\nvar FORMAT_DEFAULT = {\n  number: {\n    nDec: 0,\n    sepComma: false,\n    negStyle: 'MinusBlack',\n    currency: '',\n    currencyPrepend: true\n  },\n  percent: {\n    nDec: 0,\n    sepComma: false\n  }\n};\nvar AcroFormMixin = {\n  /**\n   * Must call if adding AcroForms to a document. Must also call font() before\n   * this method to set the default font.\n   */\n  initForm: function initForm() {\n    if (!this._font) {\n      throw new Error('Must set a font before calling initForm method');\n    }\n    this._acroform = {\n      fonts: {},\n      defaultFont: this._font.name\n    };\n    this._acroform.fonts[this._font.id] = this._font.ref();\n    var data = {\n      Fields: [],\n      NeedAppearances: true,\n      DA: new String(\"/\".concat(this._font.id, \" 0 Tf 0 g\")),\n      DR: {\n        Font: {}\n      }\n    };\n    data.DR.Font[this._font.id] = this._font.ref();\n    var AcroForm = this.ref(data);\n    this._root.data.AcroForm = AcroForm;\n    return this;\n  },\n  /**\n   * Called automatically by document.js\n   */\n  endAcroForm: function endAcroForm() {\n    var _this = this;\n    if (this._root.data.AcroForm) {\n      if (!Object.keys(this._acroform.fonts).length && !this._acroform.defaultFont) {\n        throw new Error('No fonts specified for PDF form');\n      }\n      var fontDict = this._root.data.AcroForm.data.DR.Font;\n      Object.keys(this._acroform.fonts).forEach(function (name) {\n        fontDict[name] = _this._acroform.fonts[name];\n      });\n      this._root.data.AcroForm.data.Fields.forEach(function (fieldRef) {\n        _this._endChild(fieldRef);\n      });\n      this._root.data.AcroForm.end();\n    }\n    return this;\n  },\n  _endChild: function _endChild(ref) {\n    var _this2 = this;\n    if (Array.isArray(ref.data.Kids)) {\n      ref.data.Kids.forEach(function (childRef) {\n        _this2._endChild(childRef);\n      });\n      ref.end();\n    }\n    return this;\n  },\n  /**\n   * Creates and adds a form field to the document. Form fields are intermediate\n   * nodes in a PDF form that are used to specify form name heirarchy and form\n   * value defaults.\n   * @param {string} name - field name (T attribute in field dictionary)\n   * @param {object} options  - other attributes to include in field dictionary\n   */\n  formField: function formField(name) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var fieldDict = this._fieldDict(name, null, options);\n    var fieldRef = this.ref(fieldDict);\n    this._addToParent(fieldRef);\n    return fieldRef;\n  },\n  /**\n   * Creates and adds a Form Annotation to the document. Form annotations are\n   * called Widget annotations internally within a PDF file.\n   * @param {string} name - form field name (T attribute of widget annotation\n   * dictionary)\n   * @param {number} x\n   * @param {number} y\n   * @param {number} w\n   * @param {number} h\n   * @param {object} options\n   */\n  formAnnotation: function formAnnotation(name, type, x, y, w, h) {\n    var options = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {};\n    var fieldDict = this._fieldDict(name, type, options);\n    fieldDict.Subtype = 'Widget';\n    if (fieldDict.F === undefined) {\n      fieldDict.F = 4; // print the annotation\n    } // Add Field annot to page, and get it's ref\n\n    this.annotate(x, y, w, h, fieldDict);\n    var annotRef = this.page.annotations[this.page.annotations.length - 1];\n    return this._addToParent(annotRef);\n  },\n  formText: function formText(name, x, y, w, h) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    return this.formAnnotation(name, 'text', x, y, w, h, options);\n  },\n  formPushButton: function formPushButton(name, x, y, w, h) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    return this.formAnnotation(name, 'pushButton', x, y, w, h, options);\n  },\n  formCombo: function formCombo(name, x, y, w, h) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    return this.formAnnotation(name, 'combo', x, y, w, h, options);\n  },\n  formList: function formList(name, x, y, w, h) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    return this.formAnnotation(name, 'list', x, y, w, h, options);\n  },\n  formRadioButton: function formRadioButton(name, x, y, w, h) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    return this.formAnnotation(name, 'radioButton', x, y, w, h, options);\n  },\n  formCheckbox: function formCheckbox(name, x, y, w, h) {\n    var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    return this.formAnnotation(name, 'checkbox', x, y, w, h, options);\n  },\n  _addToParent: function _addToParent(fieldRef) {\n    var parent = fieldRef.data.Parent;\n    if (parent) {\n      if (!parent.data.Kids) {\n        parent.data.Kids = [];\n      }\n      parent.data.Kids.push(fieldRef);\n    } else {\n      this._root.data.AcroForm.data.Fields.push(fieldRef);\n    }\n    return this;\n  },\n  _fieldDict: function _fieldDict(name, type) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    if (!this._acroform) {\n      throw new Error('Call document.initForms() method before adding form elements to document');\n    }\n    var opts = Object.assign({}, options);\n    if (type !== null) {\n      opts = this._resolveType(type, options);\n    }\n    opts = this._resolveFlags(opts);\n    opts = this._resolveJustify(opts);\n    opts = this._resolveFont(opts);\n    opts = this._resolveStrings(opts);\n    opts = this._resolveColors(opts);\n    opts = this._resolveFormat(opts);\n    opts.T = new String(name);\n    if (opts.parent) {\n      opts.Parent = opts.parent;\n      delete opts.parent;\n    }\n    return opts;\n  },\n  _resolveType: function _resolveType(type, opts) {\n    if (type === 'text') {\n      opts.FT = 'Tx';\n    } else if (type === 'pushButton') {\n      opts.FT = 'Btn';\n      opts.pushButton = true;\n    } else if (type === 'radioButton') {\n      opts.FT = 'Btn';\n      opts.radioButton = true;\n    } else if (type === 'checkbox') {\n      opts.FT = 'Btn';\n    } else if (type === 'combo') {\n      opts.FT = 'Ch';\n      opts.combo = true;\n    } else if (type === 'list') {\n      opts.FT = 'Ch';\n    } else {\n      throw new Error(\"Invalid form annotation type '\".concat(type, \"'\"));\n    }\n    return opts;\n  },\n  _resolveFormat: function _resolveFormat(opts) {\n    var f = opts.format;\n    if (f && f.type) {\n      var fnKeystroke;\n      var fnFormat;\n      var params = '';\n      if (FORMAT_SPECIAL[f.type] !== undefined) {\n        fnKeystroke = \"AFSpecial_Keystroke\";\n        fnFormat = \"AFSpecial_Format\";\n        params = FORMAT_SPECIAL[f.type];\n      } else {\n        var format = f.type.charAt(0).toUpperCase() + f.type.slice(1);\n        fnKeystroke = \"AF\".concat(format, \"_Keystroke\");\n        fnFormat = \"AF\".concat(format, \"_Format\");\n        if (f.type === 'date') {\n          fnKeystroke += 'Ex';\n          params = String(f.param);\n        } else if (f.type === 'time') {\n          params = String(f.param);\n        } else if (f.type === 'number') {\n          var p = Object.assign({}, FORMAT_DEFAULT.number, f);\n          params = String([String(p.nDec), p.sepComma ? '0' : '1', '\"' + p.negStyle + '\"', 'null', '\"' + p.currency + '\"', String(p.currencyPrepend)].join(','));\n        } else if (f.type === 'percent') {\n          var _p = Object.assign({}, FORMAT_DEFAULT.percent, f);\n          params = String([String(_p.nDec), _p.sepComma ? '0' : '1'].join(','));\n        }\n      }\n      opts.AA = opts.AA ? opts.AA : {};\n      opts.AA.K = {\n        S: 'JavaScript',\n        JS: new String(\"\".concat(fnKeystroke, \"(\").concat(params, \");\"))\n      };\n      opts.AA.F = {\n        S: 'JavaScript',\n        JS: new String(\"\".concat(fnFormat, \"(\").concat(params, \");\"))\n      };\n    }\n    delete opts.format;\n    return opts;\n  },\n  _resolveColors: function _resolveColors(opts) {\n    var color = this._normalizeColor(opts.backgroundColor);\n    if (color) {\n      if (!opts.MK) {\n        opts.MK = {};\n      }\n      opts.MK.BG = color;\n    }\n    color = this._normalizeColor(opts.borderColor);\n    if (color) {\n      if (!opts.MK) {\n        opts.MK = {};\n      }\n      opts.MK.BC = color;\n    }\n    delete opts.backgroundColor;\n    delete opts.borderColor;\n    return opts;\n  },\n  _resolveFlags: function _resolveFlags(options) {\n    var result = 0;\n    Object.keys(options).forEach(function (key) {\n      if (FIELD_FLAGS[key]) {\n        result |= FIELD_FLAGS[key];\n        delete options[key];\n      }\n    });\n    if (result !== 0) {\n      options.Ff = options.Ff ? options.Ff : 0;\n      options.Ff |= result;\n    }\n    return options;\n  },\n  _resolveJustify: function _resolveJustify(options) {\n    var result = 0;\n    if (options.align !== undefined) {\n      if (typeof FIELD_JUSTIFY[options.align] === 'number') {\n        result = FIELD_JUSTIFY[options.align];\n      }\n      delete options.align;\n    }\n    if (result !== 0) {\n      options.Q = result; // default\n    }\n\n    return options;\n  },\n  _resolveFont: function _resolveFont(options) {\n    // add current font to document-level AcroForm dict if necessary\n    if (this._acroform.fonts[this._font.id] === null) {\n      this._acroform.fonts[this._font.id] = this._font.ref();\n    } // add current font to field's resource dict (RD) if not the default acroform font\n\n    if (this._acroform.defaultFont !== this._font.name) {\n      options.DR = {\n        Font: {}\n      }; // Get the fontSize option. If not set use auto sizing\n\n      var fontSize = options.fontSize || 0;\n      options.DR.Font[this._font.id] = this._font.ref();\n      options.DA = new String(\"/\".concat(this._font.id, \" \").concat(fontSize, \" Tf 0 g\"));\n    }\n    return options;\n  },\n  _resolveStrings: function _resolveStrings(options) {\n    var select = [];\n    function appendChoices(a) {\n      if (Array.isArray(a)) {\n        for (var idx = 0; idx < a.length; idx++) {\n          if (typeof a[idx] === 'string') {\n            select.push(new String(a[idx]));\n          } else {\n            select.push(a[idx]);\n          }\n        }\n      }\n    }\n    appendChoices(options.Opt);\n    if (options.select) {\n      appendChoices(options.select);\n      delete options.select;\n    }\n    if (select.length) {\n      options.Opt = select;\n    }\n    Object.keys(VALUE_MAP).forEach(function (key) {\n      if (options[key] !== undefined) {\n        options[VALUE_MAP[key]] = options[key];\n        delete options[key];\n      }\n    });\n    ['V', 'DV'].forEach(function (key) {\n      if (typeof options[key] === 'string') {\n        options[key] = new String(options[key]);\n      }\n    });\n    if (options.MK && options.MK.CA) {\n      options.MK.CA = new String(options.MK.CA);\n    }\n    if (options.label) {\n      options.MK = options.MK ? options.MK : {};\n      options.MK.CA = new String(options.label);\n      delete options.label;\n    }\n    return options;\n  }\n};\nvar AttachmentsMixin = {\n  /**\n   * Embed contents of `src` in PDF\n   * @param {Buffer | ArrayBuffer | string} src input Buffer, ArrayBuffer, base64 encoded string or path to file\n   * @param {object} options\n   *  * options.name: filename to be shown in PDF, will use `src` if none set\n   *  * options.type: filetype to be shown in PDF\n   *  * options.description: description to be shown in PDF\n   *  * options.hidden: if true, do not add attachment to EmbeddedFiles dictionary. Useful for file attachment annotations\n   *  * options.creationDate: override creation date\n   *  * options.modifiedDate: override modified date\n   * @returns filespec reference\n   */\n  file: function file(src) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    options.name = options.name || src;\n    var refBody = {\n      Type: 'EmbeddedFile',\n      Params: {}\n    };\n    var data;\n    if (!src) {\n      throw new Error('No src specified');\n    }\n    if (Buffer.isBuffer(src)) {\n      data = src;\n    } else if (src instanceof ArrayBuffer) {\n      data = Buffer.from(new Uint8Array(src));\n    } else {\n      var match;\n      if (match = /^data:(.*);base64,(.*)$/.exec(src)) {\n        if (match[1]) {\n          refBody.Subtype = match[1].replace('/', '#2F');\n        }\n        data = Buffer.from(match[2], 'base64');\n      } else {\n        data = fs.readFileSync(src);\n        if (!data) {\n          throw new Error(\"Could not read contents of file at filepath \".concat(src));\n        } // update CreationDate and ModDate\n\n        var _fs$statSync = fs.statSync(src),\n          birthtime = _fs$statSync.birthtime,\n          ctime = _fs$statSync.ctime;\n        refBody.Params.CreationDate = birthtime;\n        refBody.Params.ModDate = ctime;\n      }\n    } // override creation date and modified date\n\n    if (options.creationDate instanceof Date) {\n      refBody.Params.CreationDate = options.creationDate;\n    }\n    if (options.modifiedDate instanceof Date) {\n      refBody.Params.ModDate = options.modifiedDate;\n    } // add optional subtype\n\n    if (options.type) {\n      refBody.Subtype = options.type.replace('/', '#2F');\n    } // add checksum and size information\n\n    var checksum = _cryptoJs.default.MD5(_cryptoJs.default.lib.WordArray.create(new Uint8Array(data)));\n    refBody.Params.CheckSum = new String(checksum);\n    refBody.Params.Size = data.byteLength; // save some space when embedding the same file again\n    // if a file with the same name and metadata exists, reuse its reference\n\n    var ref;\n    if (!this._fileRegistry) this._fileRegistry = {};\n    var file = this._fileRegistry[options.name];\n    if (file && isEqual(refBody, file)) {\n      ref = file.ref;\n    } else {\n      ref = this.ref(refBody);\n      ref.end(data);\n      this._fileRegistry[options.name] = _objectSpread2(_objectSpread2({}, refBody), {}, {\n        ref: ref\n      });\n    } // add filespec for embedded file\n\n    var fileSpecBody = {\n      Type: 'Filespec',\n      F: new String(options.name),\n      EF: {\n        F: ref\n      },\n      UF: new String(options.name)\n    };\n    if (options.description) {\n      fileSpecBody.Desc = new String(options.description);\n    }\n    var filespec = this.ref(fileSpecBody);\n    filespec.end();\n    if (!options.hidden) {\n      this.addNamedEmbeddedFile(options.name, filespec);\n    }\n    return filespec;\n  }\n};\n/** check two embedded file metadata objects for equality */\n\nfunction isEqual(a, b) {\n  return a.Subtype === b.Subtype && a.Params.CheckSum.toString() === b.Params.CheckSum.toString() && a.Params.Size === b.Params.Size && a.Params.CreationDate === b.Params.CreationDate && a.Params.ModDate === b.Params.ModDate;\n}\nvar PDFDocument = /*#__PURE__*/function (_stream$Readable) {\n  _inherits(PDFDocument, _stream$Readable);\n  var _super = _createSuper(PDFDocument);\n  function PDFDocument() {\n    var _this;\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _classCallCheck(this, PDFDocument);\n    _this = _super.call(this, options);\n    _this.options = options; // PDF version\n\n    switch (options.pdfVersion) {\n      case '1.4':\n        _this.version = 1.4;\n        break;\n      case '1.5':\n        _this.version = 1.5;\n        break;\n      case '1.6':\n        _this.version = 1.6;\n        break;\n      case '1.7':\n      case '1.7ext3':\n        _this.version = 1.7;\n        break;\n      default:\n        _this.version = 1.3;\n        break;\n    } // Whether streams should be compressed\n\n    _this.compress = _this.options.compress != null ? _this.options.compress : true;\n    _this._pageBuffer = [];\n    _this._pageBufferStart = 0; // The PDF object store\n\n    _this._offsets = [];\n    _this._waiting = 0;\n    _this._ended = false;\n    _this._offset = 0;\n    var Pages = _this.ref({\n      Type: 'Pages',\n      Count: 0,\n      Kids: []\n    });\n    var Names = _this.ref({\n      Dests: new PDFNameTree()\n    });\n    _this._root = _this.ref({\n      Type: 'Catalog',\n      Pages: Pages,\n      Names: Names\n    });\n    if (_this.options.lang) {\n      _this._root.data.Lang = new String(_this.options.lang);\n    } // The current page\n\n    _this.page = null; // Initialize mixins\n\n    _this.initColor();\n    _this.initVector();\n    _this.initFonts(options.font);\n    _this.initText();\n    _this.initImages();\n    _this.initOutline();\n    _this.initMarkings(options); // Initialize the metadata\n\n    _this.info = {\n      Producer: 'PDFKit',\n      Creator: 'PDFKit',\n      CreationDate: new Date()\n    };\n    if (_this.options.info) {\n      for (var key in _this.options.info) {\n        var val = _this.options.info[key];\n        _this.info[key] = val;\n      }\n    }\n    if (_this.options.displayTitle) {\n      _this._root.data.ViewerPreferences = _this.ref({\n        DisplayDocTitle: true\n      });\n    } // Generate file ID\n\n    _this._id = PDFSecurity.generateFileID(_this.info); // Initialize security settings\n\n    _this._security = PDFSecurity.create(_assertThisInitialized(_this), options); // Write the header\n    // PDF version\n\n    _this._write(\"%PDF-\".concat(_this.version)); // 4 binary chars, as recommended by the spec\n\n    _this._write('%\\xFF\\xFF\\xFF\\xFF'); // Add the first page\n\n    if (_this.options.autoFirstPage !== false) {\n      _this.addPage();\n    }\n    return _this;\n  }\n  _createClass(PDFDocument, [{\n    key: \"addPage\",\n    value: function addPage(options) {\n      if (options == null) {\n        options = this.options;\n      } // end the current page if needed\n\n      if (!this.options.bufferPages) {\n        this.flushPages();\n      } // create a page object\n\n      this.page = new PDFPage(this, options);\n      this._pageBuffer.push(this.page); // add the page to the object store\n\n      var pages = this._root.data.Pages.data;\n      pages.Kids.push(this.page.dictionary);\n      pages.Count++; // reset x and y coordinates\n\n      this.x = this.page.margins.left;\n      this.y = this.page.margins.top; // flip PDF coordinate system so that the origin is in\n      // the top left rather than the bottom left\n\n      this._ctm = [1, 0, 0, 1, 0, 0];\n      this.transform(1, 0, 0, -1, 0, this.page.height);\n      this.emit('pageAdded');\n      return this;\n    }\n  }, {\n    key: \"continueOnNewPage\",\n    value: function continueOnNewPage(options) {\n      var pageMarkings = this.endPageMarkings(this.page);\n      this.addPage(options);\n      this.initPageMarkings(pageMarkings);\n      return this;\n    }\n  }, {\n    key: \"bufferedPageRange\",\n    value: function bufferedPageRange() {\n      return {\n        start: this._pageBufferStart,\n        count: this._pageBuffer.length\n      };\n    }\n  }, {\n    key: \"switchToPage\",\n    value: function switchToPage(n) {\n      var page;\n      if (!(page = this._pageBuffer[n - this._pageBufferStart])) {\n        throw new Error(\"switchToPage(\".concat(n, \") out of bounds, current buffer covers pages \").concat(this._pageBufferStart, \" to \").concat(this._pageBufferStart + this._pageBuffer.length - 1));\n      }\n      return this.page = page;\n    }\n  }, {\n    key: \"flushPages\",\n    value: function flushPages() {\n      // this local variable exists so we're future-proof against\n      // reentrant calls to flushPages.\n      var pages = this._pageBuffer;\n      this._pageBuffer = [];\n      this._pageBufferStart += pages.length;\n      var _iterator = _createForOfIteratorHelper(pages),\n        _step;\n      try {\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\n          var page = _step.value;\n          this.endPageMarkings(page);\n          page.end();\n        }\n      } catch (err) {\n        _iterator.e(err);\n      } finally {\n        _iterator.f();\n      }\n    }\n  }, {\n    key: \"addNamedDestination\",\n    value: function addNamedDestination(name) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      if (args.length === 0) {\n        args = ['XYZ', null, null, null];\n      }\n      if (args[0] === 'XYZ' && args[2] !== null) {\n        args[2] = this.page.height - args[2];\n      }\n      args.unshift(this.page.dictionary);\n      this._root.data.Names.data.Dests.add(name, args);\n    }\n  }, {\n    key: \"addNamedEmbeddedFile\",\n    value: function addNamedEmbeddedFile(name, ref) {\n      if (!this._root.data.Names.data.EmbeddedFiles) {\n        // disabling /Limits for this tree fixes attachments not showing in Adobe Reader\n        this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({\n          limits: false\n        });\n      } // add filespec to EmbeddedFiles\n\n      this._root.data.Names.data.EmbeddedFiles.add(name, ref);\n    }\n  }, {\n    key: \"addNamedJavaScript\",\n    value: function addNamedJavaScript(name, js) {\n      if (!this._root.data.Names.data.JavaScript) {\n        this._root.data.Names.data.JavaScript = new PDFNameTree();\n      }\n      var data = {\n        JS: new String(js),\n        S: 'JavaScript'\n      };\n      this._root.data.Names.data.JavaScript.add(name, data);\n    }\n  }, {\n    key: \"ref\",\n    value: function ref(data) {\n      var ref = new PDFReference(this, this._offsets.length + 1, data);\n      this._offsets.push(null); // placeholder for this object's offset once it is finalized\n\n      this._waiting++;\n      return ref;\n    }\n  }, {\n    key: \"_read\",\n    value: function _read() {} // do nothing, but this method is required by node\n  }, {\n    key: \"_write\",\n    value: function _write(data) {\n      if (!Buffer.isBuffer(data)) {\n        data = Buffer.from(data + '\\n', 'binary');\n      }\n      this.push(data);\n      return this._offset += data.length;\n    }\n  }, {\n    key: \"addContent\",\n    value: function addContent(data) {\n      this.page.write(data);\n      return this;\n    }\n  }, {\n    key: \"_refEnd\",\n    value: function _refEnd(ref) {\n      this._offsets[ref.id - 1] = ref.offset;\n      if (--this._waiting === 0 && this._ended) {\n        this._finalize();\n        return this._ended = false;\n      }\n    }\n  }, {\n    key: \"write\",\n    value: function write(filename, fn) {\n      // print a deprecation warning with a stacktrace\n      var err = new Error(\"PDFDocument#write is deprecated, and will be removed in a future version of PDFKit. Please pipe the document into a Node stream.\");\n      console.warn(err.stack);\n      this.pipe(fs.createWriteStream(filename));\n      this.end();\n      return this.once('end', fn);\n    }\n  }, {\n    key: \"end\",\n    value: function end() {\n      this.flushPages();\n      this._info = this.ref();\n      for (var key in this.info) {\n        var val = this.info[key];\n        if (typeof val === 'string') {\n          val = new String(val);\n        }\n        var entry = this.ref(val);\n        entry.end();\n        this._info.data[key] = entry;\n      }\n      this._info.end();\n      for (var name in this._fontFamilies) {\n        var font = this._fontFamilies[name];\n        font.finalize();\n      }\n      this.endOutline();\n      this.endMarkings();\n      this._root.end();\n      this._root.data.Pages.end();\n      this._root.data.Names.end();\n      this.endAcroForm();\n      if (this._root.data.ViewerPreferences) {\n        this._root.data.ViewerPreferences.end();\n      }\n      if (this._security) {\n        this._security.end();\n      }\n      if (this._waiting === 0) {\n        return this._finalize();\n      } else {\n        return this._ended = true;\n      }\n    }\n  }, {\n    key: \"_finalize\",\n    value: function _finalize() {\n      // generate xref\n      var xRefOffset = this._offset;\n      this._write('xref');\n      this._write(\"0 \".concat(this._offsets.length + 1));\n      this._write('0000000000 65535 f ');\n      var _iterator2 = _createForOfIteratorHelper(this._offsets),\n        _step2;\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var offset = _step2.value;\n          offset = \"0000000000\".concat(offset).slice(-10);\n          this._write(offset + ' 00000 n ');\n        } // trailer\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n      var trailer = {\n        Size: this._offsets.length + 1,\n        Root: this._root,\n        Info: this._info,\n        ID: [this._id, this._id]\n      };\n      if (this._security) {\n        trailer.Encrypt = this._security.dictionary;\n      }\n      this._write('trailer');\n      this._write(PDFObject.convert(trailer));\n      this._write('startxref');\n      this._write(\"\".concat(xRefOffset));\n      this._write('%%EOF'); // end the stream\n\n      return this.push(null);\n    }\n  }, {\n    key: \"toString\",\n    value: function toString() {\n      return '[object PDFDocument]';\n    }\n  }]);\n  return PDFDocument;\n}(_stream.default.Readable);\nvar mixin = function mixin(methods) {\n  Object.assign(PDFDocument.prototype, methods);\n};\nmixin(ColorMixin);\nmixin(VectorMixin);\nmixin(FontsMixin);\nmixin(TextMixin);\nmixin(ImagesMixin);\nmixin(AnnotationsMixin);\nmixin(OutlineMixin);\nmixin(MarkingsMixin);\nmixin(AcroFormMixin);\nmixin(AttachmentsMixin);\nPDFDocument.LineWrapper = LineWrapper;\nvar _default = PDFDocument;\nexports[\"default\"] = _default;\n\n/***/ }),\n\n/***/ 4559:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(3290);\n/* eslint-disable node/no-deprecated-api */\nvar buffer = __webpack_require__(8823);\nvar Buffer = buffer.Buffer;\n\n// alternative to using Object.keys for old browsers\nfunction copyProps(src, dst) {\n  for (var key in src) {\n    dst[key] = src[key];\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer;\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports);\n  exports.Buffer = SafeBuffer;\n}\nfunction SafeBuffer(arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length);\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer);\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number');\n  }\n  return Buffer(arg, encodingOrOffset, length);\n};\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n  var buf = Buffer(size);\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding);\n    } else {\n      buf.fill(fill);\n    }\n  } else {\n    buf.fill(0);\n  }\n  return buf;\n};\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n  return Buffer(size);\n};\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n  return buffer.SlowBuffer(size);\n};\n\n/***/ }),\n\n/***/ 4781:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(7042);\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(2472);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(9135);\nvar inflate = __webpack_require__(311);\nvar _require = __webpack_require__(1753),\n  swap32LE = _require.swap32LE;\n\n// Shift size for getting the index-1 table offset.\nvar SHIFT_1 = 6 + 5;\n\n// Shift size for getting the index-2 table offset.\nvar SHIFT_2 = 5;\n\n// Difference between the two shift sizes,\n// for getting an index-1 offset from an index-2 offset. 6=11-5\nvar SHIFT_1_2 = SHIFT_1 - SHIFT_2;\n\n// Number of index-1 entries for the BMP. 32=0x20\n// This part of the index-1 table is omitted from the serialized form.\nvar OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1;\n\n// Number of entries in an index-2 block. 64=0x40\nvar INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2;\n\n// Mask for getting the lower bits for the in-index-2-block offset. */\nvar INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1;\n\n// Shift size for shifting left the index array values.\n// Increases possible data size with 16-bit index values at the cost\n// of compactability.\n// This requires data blocks to be aligned by DATA_GRANULARITY.\nvar INDEX_SHIFT = 2;\n\n// Number of entries in a data block. 32=0x20\nvar DATA_BLOCK_LENGTH = 1 << SHIFT_2;\n\n// Mask for getting the lower bits for the in-data-block offset.\nvar DATA_MASK = DATA_BLOCK_LENGTH - 1;\n\n// The part of the index-2 table for U+D800..U+DBFF stores values for\n// lead surrogate code _units_ not code _points_.\n// Values for lead surrogate code _points_ are indexed with this portion of the table.\n// Length=32=0x20=0x400>>SHIFT_2. (There are 1024=0x400 lead surrogates.)\nvar LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2;\nvar LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2;\n\n// Count the lengths of both BMP pieces. 2080=0x820\nvar INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH;\n\n// The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n// Length 32=0x20 for lead bytes C0..DF, regardless of SHIFT_2.\nvar UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;\nvar UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; // U+0800 is the first code point after 2-byte UTF-8\n\n// The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n// Variable length, for code points up to highStart, where the last single-value range starts.\n// Maximum length 512=0x200=0x100000>>SHIFT_1.\n// (For 0x100000 supplementary code points U+10000..U+10ffff.)\n//\n// The part of the index-2 table for supplementary code points starts\n// after this index-1 table.\n//\n// Both the index-1 table and the following part of the index-2 table\n// are omitted completely if there is only BMP data.\nvar INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;\n\n// The alignment size of a data block. Also the granularity for compaction.\nvar DATA_GRANULARITY = 1 << INDEX_SHIFT;\nvar UnicodeTrie = /*#__PURE__*/function () {\n  function UnicodeTrie(data) {\n    var isBuffer = typeof data.readUInt32BE === 'function' && typeof data.slice === 'function';\n    if (isBuffer || data instanceof Uint8Array) {\n      // read binary format\n      var uncompressedLength;\n      if (isBuffer) {\n        this.highStart = data.readUInt32LE(0);\n        this.errorValue = data.readUInt32LE(4);\n        uncompressedLength = data.readUInt32LE(8);\n        data = data.slice(12);\n      } else {\n        var view = new DataView(data.buffer);\n        this.highStart = view.getUint32(0, true);\n        this.errorValue = view.getUint32(4, true);\n        uncompressedLength = view.getUint32(8, true);\n        data = data.subarray(12);\n      }\n\n      // double inflate the actual trie data\n      data = inflate(data, new Uint8Array(uncompressedLength));\n      data = inflate(data, new Uint8Array(uncompressedLength));\n\n      // swap bytes from little-endian\n      swap32LE(data);\n      this.data = new Uint32Array(data.buffer);\n    } else {\n      // pre-parsed data\n      var _data = data;\n      this.data = _data.data;\n      this.highStart = _data.highStart;\n      this.errorValue = _data.errorValue;\n    }\n  }\n  var _proto = UnicodeTrie.prototype;\n  _proto.get = function get(codePoint) {\n    var index;\n    if (codePoint < 0 || codePoint > 0x10ffff) {\n      return this.errorValue;\n    }\n    if (codePoint < 0xd800 || codePoint > 0xdbff && codePoint <= 0xffff) {\n      // Ordinary BMP code point, excluding leading surrogates.\n      // BMP uses a single level lookup.  BMP index starts at offset 0 in the index.\n      // data is stored in the index array itself.\n      index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK);\n      return this.data[index];\n    }\n    if (codePoint <= 0xffff) {\n      // Lead Surrogate Code Point.  A Separate index section is stored for\n      // lead surrogate code units and code points.\n      //   The main index has the code unit data.\n      //   For this function, we need the code point data.\n      index = (this.data[LSCP_INDEX_2_OFFSET + (codePoint - 0xd800 >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK);\n      return this.data[index];\n    }\n    if (codePoint < this.highStart) {\n      // Supplemental code point, use two-level lookup.\n      index = this.data[INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> SHIFT_1)];\n      index = this.data[index + (codePoint >> SHIFT_2 & INDEX_2_MASK)];\n      index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK);\n      return this.data[index];\n    }\n    return this.data[this.data.length - DATA_GRANULARITY];\n  };\n  return UnicodeTrie;\n}();\nmodule.exports = UnicodeTrie;\n\n/***/ }),\n\n/***/ 1753:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(2472);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(9135);\nvar isBigEndian = new Uint8Array(new Uint32Array([0x12345678]).buffer)[0] === 0x12;\nvar swap = function swap(b, n, m) {\n  var i = b[n];\n  b[n] = b[m];\n  b[m] = i;\n};\nvar swap32 = function swap32(array) {\n  var len = array.length;\n  for (var i = 0; i < len; i += 4) {\n    swap(array, i, i + 3);\n    swap(array, i + 1, i + 2);\n  }\n};\nvar swap32LE = function swap32LE(array) {\n  if (isBigEndian) {\n    swap32(array);\n  }\n};\nmodule.exports = {\n  swap32LE: swap32LE\n};\n\n/***/ }),\n\n/***/ 8071:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar SVGtoPDF = __webpack_require__(8519);\nmodule.exports = SVGtoPDF;\n\n/***/ }),\n\n/***/ 8519:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* module decorator */ module = __webpack_require__.nmd(module);\n\n\n__webpack_require__(8309);\n__webpack_require__(7941);\n__webpack_require__(3210);\n__webpack_require__(4916);\n__webpack_require__(4723);\n__webpack_require__(3728);\n__webpack_require__(5306);\n__webpack_require__(7042);\n__webpack_require__(9653);\n__webpack_require__(3123);\n__webpack_require__(2222);\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(3948);\n__webpack_require__(9254);\n__webpack_require__(3290);\nvar SVGtoPDF = function SVGtoPDF(doc, svg, x, y, options) {\n  \"use strict\";\n\n  var NamedColors = {\n    aliceblue: [240, 248, 255],\n    antiquewhite: [250, 235, 215],\n    aqua: [0, 255, 255],\n    aquamarine: [127, 255, 212],\n    azure: [240, 255, 255],\n    beige: [245, 245, 220],\n    bisque: [255, 228, 196],\n    black: [0, 0, 0],\n    blanchedalmond: [255, 235, 205],\n    blue: [0, 0, 255],\n    blueviolet: [138, 43, 226],\n    brown: [165, 42, 42],\n    burlywood: [222, 184, 135],\n    cadetblue: [95, 158, 160],\n    chartreuse: [127, 255, 0],\n    chocolate: [210, 105, 30],\n    coral: [255, 127, 80],\n    cornflowerblue: [100, 149, 237],\n    cornsilk: [255, 248, 220],\n    crimson: [220, 20, 60],\n    cyan: [0, 255, 255],\n    darkblue: [0, 0, 139],\n    darkcyan: [0, 139, 139],\n    darkgoldenrod: [184, 134, 11],\n    darkgray: [169, 169, 169],\n    darkgrey: [169, 169, 169],\n    darkgreen: [0, 100, 0],\n    darkkhaki: [189, 183, 107],\n    darkmagenta: [139, 0, 139],\n    darkolivegreen: [85, 107, 47],\n    darkorange: [255, 140, 0],\n    darkorchid: [153, 50, 204],\n    darkred: [139, 0, 0],\n    darksalmon: [233, 150, 122],\n    darkseagreen: [143, 188, 143],\n    darkslateblue: [72, 61, 139],\n    darkslategray: [47, 79, 79],\n    darkslategrey: [47, 79, 79],\n    darkturquoise: [0, 206, 209],\n    darkviolet: [148, 0, 211],\n    deeppink: [255, 20, 147],\n    deepskyblue: [0, 191, 255],\n    dimgray: [105, 105, 105],\n    dimgrey: [105, 105, 105],\n    dodgerblue: [30, 144, 255],\n    firebrick: [178, 34, 34],\n    floralwhite: [255, 250, 240],\n    forestgreen: [34, 139, 34],\n    fuchsia: [255, 0, 255],\n    gainsboro: [220, 220, 220],\n    ghostwhite: [248, 248, 255],\n    gold: [255, 215, 0],\n    goldenrod: [218, 165, 32],\n    gray: [128, 128, 128],\n    grey: [128, 128, 128],\n    green: [0, 128, 0],\n    greenyellow: [173, 255, 47],\n    honeydew: [240, 255, 240],\n    hotpink: [255, 105, 180],\n    indianred: [205, 92, 92],\n    indigo: [75, 0, 130],\n    ivory: [255, 255, 240],\n    khaki: [240, 230, 140],\n    lavender: [230, 230, 250],\n    lavenderblush: [255, 240, 245],\n    lawngreen: [124, 252, 0],\n    lemonchiffon: [255, 250, 205],\n    lightblue: [173, 216, 230],\n    lightcoral: [240, 128, 128],\n    lightcyan: [224, 255, 255],\n    lightgoldenrodyellow: [250, 250, 210],\n    lightgray: [211, 211, 211],\n    lightgrey: [211, 211, 211],\n    lightgreen: [144, 238, 144],\n    lightpink: [255, 182, 193],\n    lightsalmon: [255, 160, 122],\n    lightseagreen: [32, 178, 170],\n    lightskyblue: [135, 206, 250],\n    lightslategray: [119, 136, 153],\n    lightslategrey: [119, 136, 153],\n    lightsteelblue: [176, 196, 222],\n    lightyellow: [255, 255, 224],\n    lime: [0, 255, 0],\n    limegreen: [50, 205, 50],\n    linen: [250, 240, 230],\n    magenta: [255, 0, 255],\n    maroon: [128, 0, 0],\n    mediumaquamarine: [102, 205, 170],\n    mediumblue: [0, 0, 205],\n    mediumorchid: [186, 85, 211],\n    mediumpurple: [147, 112, 219],\n    mediumseagreen: [60, 179, 113],\n    mediumslateblue: [123, 104, 238],\n    mediumspringgreen: [0, 250, 154],\n    mediumturquoise: [72, 209, 204],\n    mediumvioletred: [199, 21, 133],\n    midnightblue: [25, 25, 112],\n    mintcream: [245, 255, 250],\n    mistyrose: [255, 228, 225],\n    moccasin: [255, 228, 181],\n    navajowhite: [255, 222, 173],\n    navy: [0, 0, 128],\n    oldlace: [253, 245, 230],\n    olive: [128, 128, 0],\n    olivedrab: [107, 142, 35],\n    orange: [255, 165, 0],\n    orangered: [255, 69, 0],\n    orchid: [218, 112, 214],\n    palegoldenrod: [238, 232, 170],\n    palegreen: [152, 251, 152],\n    paleturquoise: [175, 238, 238],\n    palevioletred: [219, 112, 147],\n    papayawhip: [255, 239, 213],\n    peachpuff: [255, 218, 185],\n    peru: [205, 133, 63],\n    pink: [255, 192, 203],\n    plum: [221, 160, 221],\n    powderblue: [176, 224, 230],\n    purple: [128, 0, 128],\n    rebeccapurple: [102, 51, 153],\n    red: [255, 0, 0],\n    rosybrown: [188, 143, 143],\n    royalblue: [65, 105, 225],\n    saddlebrown: [139, 69, 19],\n    salmon: [250, 128, 114],\n    sandybrown: [244, 164, 96],\n    seagreen: [46, 139, 87],\n    seashell: [255, 245, 238],\n    sienna: [160, 82, 45],\n    silver: [192, 192, 192],\n    skyblue: [135, 206, 235],\n    slateblue: [106, 90, 205],\n    slategray: [112, 128, 144],\n    slategrey: [112, 128, 144],\n    snow: [255, 250, 250],\n    springgreen: [0, 255, 127],\n    steelblue: [70, 130, 180],\n    tan: [210, 180, 140],\n    teal: [0, 128, 128],\n    thistle: [216, 191, 216],\n    tomato: [255, 99, 71],\n    turquoise: [64, 224, 208],\n    violet: [238, 130, 238],\n    wheat: [245, 222, 179],\n    white: [255, 255, 255],\n    whitesmoke: [245, 245, 245],\n    yellow: [255, 255, 0]\n  };\n  var DefaultColors = {\n    black: [NamedColors.black, 1],\n    white: [NamedColors.white, 1],\n    transparent: [NamedColors.black, 0]\n  };\n  var Entities = {\n    quot: 34,\n    amp: 38,\n    lt: 60,\n    gt: 62,\n    apos: 39,\n    OElig: 338,\n    oelig: 339,\n    Scaron: 352,\n    scaron: 353,\n    Yuml: 376,\n    circ: 710,\n    tilde: 732,\n    ensp: 8194,\n    emsp: 8195,\n    thinsp: 8201,\n    zwnj: 8204,\n    zwj: 8205,\n    lrm: 8206,\n    rlm: 8207,\n    ndash: 8211,\n    mdash: 8212,\n    lsquo: 8216,\n    rsquo: 8217,\n    sbquo: 8218,\n    ldquo: 8220,\n    rdquo: 8221,\n    bdquo: 8222,\n    dagger: 8224,\n    Dagger: 8225,\n    permil: 8240,\n    lsaquo: 8249,\n    rsaquo: 8250,\n    euro: 8364,\n    nbsp: 160,\n    iexcl: 161,\n    cent: 162,\n    pound: 163,\n    curren: 164,\n    yen: 165,\n    brvbar: 166,\n    sect: 167,\n    uml: 168,\n    copy: 169,\n    ordf: 170,\n    laquo: 171,\n    not: 172,\n    shy: 173,\n    reg: 174,\n    macr: 175,\n    deg: 176,\n    plusmn: 177,\n    sup2: 178,\n    sup3: 179,\n    acute: 180,\n    micro: 181,\n    para: 182,\n    middot: 183,\n    cedil: 184,\n    sup1: 185,\n    ordm: 186,\n    raquo: 187,\n    frac14: 188,\n    frac12: 189,\n    frac34: 190,\n    iquest: 191,\n    Agrave: 192,\n    Aacute: 193,\n    Acirc: 194,\n    Atilde: 195,\n    Auml: 196,\n    Aring: 197,\n    AElig: 198,\n    Ccedil: 199,\n    Egrave: 200,\n    Eacute: 201,\n    Ecirc: 202,\n    Euml: 203,\n    Igrave: 204,\n    Iacute: 205,\n    Icirc: 206,\n    Iuml: 207,\n    ETH: 208,\n    Ntilde: 209,\n    Ograve: 210,\n    Oacute: 211,\n    Ocirc: 212,\n    Otilde: 213,\n    Ouml: 214,\n    times: 215,\n    Oslash: 216,\n    Ugrave: 217,\n    Uacute: 218,\n    Ucirc: 219,\n    Uuml: 220,\n    Yacute: 221,\n    THORN: 222,\n    szlig: 223,\n    agrave: 224,\n    aacute: 225,\n    acirc: 226,\n    atilde: 227,\n    auml: 228,\n    aring: 229,\n    aelig: 230,\n    ccedil: 231,\n    egrave: 232,\n    eacute: 233,\n    ecirc: 234,\n    euml: 235,\n    igrave: 236,\n    iacute: 237,\n    icirc: 238,\n    iuml: 239,\n    eth: 240,\n    ntilde: 241,\n    ograve: 242,\n    oacute: 243,\n    ocirc: 244,\n    otilde: 245,\n    ouml: 246,\n    divide: 247,\n    oslash: 248,\n    ugrave: 249,\n    uacute: 250,\n    ucirc: 251,\n    uuml: 252,\n    yacute: 253,\n    thorn: 254,\n    yuml: 255,\n    fnof: 402,\n    Alpha: 913,\n    Beta: 914,\n    Gamma: 915,\n    Delta: 916,\n    Epsilon: 917,\n    Zeta: 918,\n    Eta: 919,\n    Theta: 920,\n    Iota: 921,\n    Kappa: 922,\n    Lambda: 923,\n    Mu: 924,\n    Nu: 925,\n    Xi: 926,\n    Omicron: 927,\n    Pi: 928,\n    Rho: 929,\n    Sigma: 931,\n    Tau: 932,\n    Upsilon: 933,\n    Phi: 934,\n    Chi: 935,\n    Psi: 936,\n    Omega: 937,\n    alpha: 945,\n    beta: 946,\n    gamma: 947,\n    delta: 948,\n    epsilon: 949,\n    zeta: 950,\n    eta: 951,\n    theta: 952,\n    iota: 953,\n    kappa: 954,\n    lambda: 955,\n    mu: 956,\n    nu: 957,\n    xi: 958,\n    omicron: 959,\n    pi: 960,\n    rho: 961,\n    sigmaf: 962,\n    sigma: 963,\n    tau: 964,\n    upsilon: 965,\n    phi: 966,\n    chi: 967,\n    psi: 968,\n    omega: 969,\n    thetasym: 977,\n    upsih: 978,\n    piv: 982,\n    bull: 8226,\n    hellip: 8230,\n    prime: 8242,\n    Prime: 8243,\n    oline: 8254,\n    frasl: 8260,\n    weierp: 8472,\n    image: 8465,\n    real: 8476,\n    trade: 8482,\n    alefsym: 8501,\n    larr: 8592,\n    uarr: 8593,\n    rarr: 8594,\n    darr: 8595,\n    harr: 8596,\n    crarr: 8629,\n    lArr: 8656,\n    uArr: 8657,\n    rArr: 8658,\n    dArr: 8659,\n    hArr: 8660,\n    forall: 8704,\n    part: 8706,\n    exist: 8707,\n    empty: 8709,\n    nabla: 8711,\n    isin: 8712,\n    notin: 8713,\n    ni: 8715,\n    prod: 8719,\n    sum: 8721,\n    minus: 8722,\n    lowast: 8727,\n    radic: 8730,\n    prop: 8733,\n    infin: 8734,\n    ang: 8736,\n    and: 8743,\n    or: 8744,\n    cap: 8745,\n    cup: 8746,\n    int: 8747,\n    there4: 8756,\n    sim: 8764,\n    cong: 8773,\n    asymp: 8776,\n    ne: 8800,\n    equiv: 8801,\n    le: 8804,\n    ge: 8805,\n    sub: 8834,\n    sup: 8835,\n    nsub: 8836,\n    sube: 8838,\n    supe: 8839,\n    oplus: 8853,\n    otimes: 8855,\n    perp: 8869,\n    sdot: 8901,\n    lceil: 8968,\n    rceil: 8969,\n    lfloor: 8970,\n    rfloor: 8971,\n    lang: 9001,\n    rang: 9002,\n    loz: 9674,\n    spades: 9824,\n    clubs: 9827,\n    hearts: 9829,\n    diams: 9830\n  };\n  var PathArguments = {\n    A: 7,\n    a: 7,\n    C: 6,\n    c: 6,\n    H: 1,\n    h: 1,\n    L: 2,\n    l: 2,\n    M: 2,\n    m: 2,\n    Q: 4,\n    q: 4,\n    S: 4,\n    s: 4,\n    T: 2,\n    t: 2,\n    V: 1,\n    v: 1,\n    Z: 0,\n    z: 0\n  };\n  var PathFlags = {\n    A3: true,\n    A4: true,\n    a3: true,\n    a4: true\n  };\n  var Properties = {\n    'color': {\n      inherit: true,\n      initial: undefined\n    },\n    'visibility': {\n      inherit: true,\n      initial: 'visible',\n      values: {\n        'hidden': 'hidden',\n        'collapse': 'hidden',\n        'visible': 'visible'\n      }\n    },\n    'fill': {\n      inherit: true,\n      initial: DefaultColors.black\n    },\n    'stroke': {\n      inherit: true,\n      initial: 'none'\n    },\n    'stop-color': {\n      inherit: false,\n      initial: DefaultColors.black\n    },\n    'fill-opacity': {\n      inherit: true,\n      initial: 1\n    },\n    'stroke-opacity': {\n      inherit: true,\n      initial: 1\n    },\n    'stop-opacity': {\n      inherit: false,\n      initial: 1\n    },\n    'fill-rule': {\n      inherit: true,\n      initial: 'nonzero',\n      values: {\n        'nonzero': 'nonzero',\n        'evenodd': 'evenodd'\n      }\n    },\n    'clip-rule': {\n      inherit: true,\n      initial: 'nonzero',\n      values: {\n        'nonzero': 'nonzero',\n        'evenodd': 'evenodd'\n      }\n    },\n    'stroke-width': {\n      inherit: true,\n      initial: 1\n    },\n    'stroke-dasharray': {\n      inherit: true,\n      initial: []\n    },\n    'stroke-dashoffset': {\n      inherit: true,\n      initial: 0\n    },\n    'stroke-miterlimit': {\n      inherit: true,\n      initial: 4\n    },\n    'stroke-linejoin': {\n      inherit: true,\n      initial: 'miter',\n      values: {\n        'miter': 'miter',\n        'round': 'round',\n        'bevel': 'bevel'\n      }\n    },\n    'stroke-linecap': {\n      inherit: true,\n      initial: 'butt',\n      values: {\n        'butt': 'butt',\n        'round': 'round',\n        'square': 'square'\n      }\n    },\n    'font-size': {\n      inherit: true,\n      initial: 16,\n      values: {\n        'xx-small': 9,\n        'x-small': 10,\n        'small': 13,\n        'medium': 16,\n        'large': 18,\n        'x-large': 24,\n        'xx-large': 32\n      }\n    },\n    'font-family': {\n      inherit: true,\n      initial: 'sans-serif'\n    },\n    'font-weight': {\n      inherit: true,\n      initial: 'normal',\n      values: {\n        '600': 'bold',\n        '700': 'bold',\n        '800': 'bold',\n        '900': 'bold',\n        'bold': 'bold',\n        'bolder': 'bold',\n        '500': 'normal',\n        '400': 'normal',\n        '300': 'normal',\n        '200': 'normal',\n        '100': 'normal',\n        'normal': 'normal',\n        'lighter': 'normal'\n      }\n    },\n    'font-style': {\n      inherit: true,\n      initial: 'normal',\n      values: {\n        'italic': 'italic',\n        'oblique': 'italic',\n        'normal': 'normal'\n      }\n    },\n    'text-anchor': {\n      inherit: true,\n      initial: 'start',\n      values: {\n        'start': 'start',\n        'middle': 'middle',\n        'end': 'end'\n      }\n    },\n    'direction': {\n      inherit: true,\n      initial: 'ltr',\n      values: {\n        'ltr': 'ltr',\n        'rtl': 'rtl'\n      }\n    },\n    'dominant-baseline': {\n      inherit: true,\n      initial: 'baseline',\n      values: {\n        'auto': 'baseline',\n        'baseline': 'baseline',\n        'before-edge': 'before-edge',\n        'text-before-edge': 'before-edge',\n        'middle': 'middle',\n        'central': 'central',\n        'after-edge': 'after-edge',\n        'text-after-edge': 'after-edge',\n        'ideographic': 'ideographic',\n        'alphabetic': 'alphabetic',\n        'hanging': 'hanging',\n        'mathematical': 'mathematical'\n      }\n    },\n    'alignment-baseline': {\n      inherit: false,\n      initial: undefined,\n      values: {\n        'auto': 'baseline',\n        'baseline': 'baseline',\n        'before-edge': 'before-edge',\n        'text-before-edge': 'before-edge',\n        'middle': 'middle',\n        'central': 'central',\n        'after-edge': 'after-edge',\n        'text-after-edge': 'after-edge',\n        'ideographic': 'ideographic',\n        'alphabetic': 'alphabetic',\n        'hanging': 'hanging',\n        'mathematical': 'mathematical'\n      }\n    },\n    'baseline-shift': {\n      inherit: true,\n      initial: 'baseline',\n      values: {\n        'baseline': 'baseline',\n        'sub': 'sub',\n        'super': 'super'\n      }\n    },\n    'word-spacing': {\n      inherit: true,\n      initial: 0,\n      values: {\n        normal: 0\n      }\n    },\n    'letter-spacing': {\n      inherit: true,\n      initial: 0,\n      values: {\n        normal: 0\n      }\n    },\n    'text-decoration': {\n      inherit: false,\n      initial: 'none',\n      values: {\n        'none': 'none',\n        'underline': 'underline',\n        'overline': 'overline',\n        'line-through': 'line-through'\n      }\n    },\n    'xml:space': {\n      inherit: true,\n      initial: 'default',\n      css: 'white-space',\n      values: {\n        'preserve': 'preserve',\n        'default': 'default',\n        'pre': 'preserve',\n        'pre-line': 'preserve',\n        'pre-wrap': 'preserve',\n        'nowrap': 'default'\n      }\n    },\n    'marker-start': {\n      inherit: true,\n      initial: 'none'\n    },\n    'marker-mid': {\n      inherit: true,\n      initial: 'none'\n    },\n    'marker-end': {\n      inherit: true,\n      initial: 'none'\n    },\n    'opacity': {\n      inherit: false,\n      initial: 1\n    },\n    'transform': {\n      inherit: false,\n      initial: [1, 0, 0, 1, 0, 0]\n    },\n    'display': {\n      inherit: false,\n      initial: 'inline',\n      values: {\n        'none': 'none',\n        'inline': 'inline',\n        'block': 'inline'\n      }\n    },\n    'clip-path': {\n      inherit: false,\n      initial: 'none'\n    },\n    'mask': {\n      inherit: false,\n      initial: 'none'\n    },\n    'overflow': {\n      inherit: false,\n      initial: 'hidden',\n      values: {\n        'hidden': 'hidden',\n        'scroll': 'hidden',\n        'visible': 'visible'\n      }\n    }\n  };\n  function docBeginGroup(bbox) {\n    var group = new function PDFGroup() {}();\n    group.name = 'G' + (doc._groupCount = (doc._groupCount || 0) + 1);\n    group.resources = doc.ref();\n    group.xobj = doc.ref({\n      Type: 'XObject',\n      Subtype: 'Form',\n      FormType: 1,\n      BBox: bbox,\n      Group: {\n        S: 'Transparency',\n        CS: 'DeviceRGB',\n        I: true,\n        K: false\n      },\n      Resources: group.resources\n    });\n    group.xobj.write('');\n    group.savedMatrix = doc._ctm;\n    group.savedPage = doc.page;\n    groupStack.push(group);\n    doc._ctm = [1, 0, 0, 1, 0, 0];\n    doc.page = {\n      width: doc.page.width,\n      height: doc.page.height,\n      write: function write(data) {\n        group.xobj.write(data);\n      },\n      fonts: {},\n      xobjects: {},\n      ext_gstates: {},\n      patterns: {}\n    };\n    return group;\n  }\n  function docEndGroup(group) {\n    if (group !== groupStack.pop()) {\n      throw 'Group not matching';\n    }\n    if (Object.keys(doc.page.fonts).length) {\n      group.resources.data.Font = doc.page.fonts;\n    }\n    if (Object.keys(doc.page.xobjects).length) {\n      group.resources.data.XObject = doc.page.xobjects;\n    }\n    if (Object.keys(doc.page.ext_gstates).length) {\n      group.resources.data.ExtGState = doc.page.ext_gstates;\n    }\n    if (Object.keys(doc.page.patterns).length) {\n      group.resources.data.Pattern = doc.page.patterns;\n    }\n    group.resources.end();\n    group.xobj.end();\n    doc._ctm = group.savedMatrix;\n    doc.page = group.savedPage;\n  }\n  function docInsertGroup(group) {\n    doc.page.xobjects[group.name] = group.xobj;\n    doc.addContent('/' + group.name + ' Do');\n  }\n  function docApplyMask(group, clip) {\n    var name = 'M' + (doc._maskCount = (doc._maskCount || 0) + 1);\n    var gstate = doc.ref({\n      Type: 'ExtGState',\n      CA: 1,\n      ca: 1,\n      BM: 'Normal',\n      SMask: {\n        S: 'Luminosity',\n        G: group.xobj,\n        BC: clip ? [0, 0, 0] : [1, 1, 1]\n      }\n    });\n    gstate.end();\n    doc.page.ext_gstates[name] = gstate;\n    doc.addContent('/' + name + ' gs');\n  }\n  function docCreatePattern(group, dx, dy, matrix) {\n    var pattern = new function PDFPattern() {}();\n    pattern.group = group;\n    pattern.dx = dx;\n    pattern.dy = dy;\n    pattern.matrix = matrix || [1, 0, 0, 1, 0, 0];\n    return pattern;\n  }\n  function docUsePattern(pattern, stroke) {\n    var name = 'P' + (doc._patternCount = (doc._patternCount || 0) + 1);\n    var ref = doc.ref({\n      Type: 'Pattern',\n      PatternType: 1,\n      PaintType: 1,\n      TilingType: 2,\n      BBox: [0, 0, pattern.dx, pattern.dy],\n      XStep: pattern.dx,\n      YStep: pattern.dy,\n      Matrix: multiplyMatrix(doc._ctm, pattern.matrix),\n      Resources: {\n        ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n        XObject: function () {\n          var temp = {};\n          temp[pattern.group.name] = pattern.group.xobj;\n          return temp;\n        }()\n      }\n    });\n    ref.write('/' + pattern.group.name + ' Do');\n    ref.end();\n    doc.page.patterns[name] = ref;\n    if (stroke) {\n      doc.addContent('/Pattern CS');\n      doc.addContent('/' + name + ' SCN');\n    } else {\n      doc.addContent('/Pattern cs');\n      doc.addContent('/' + name + ' scn');\n    }\n  }\n  function docBeginText(font, size) {\n    if (!doc.page.fonts[font.id]) {\n      doc.page.fonts[font.id] = font.ref();\n    }\n    doc.addContent('BT').addContent('/' + font.id + ' ' + size + ' Tf');\n  }\n  function docSetTextMatrix(a, b, c, d, e, f) {\n    doc.addContent(validateNumber(a) + ' ' + validateNumber(b) + ' ' + validateNumber(-c) + ' ' + validateNumber(-d) + ' ' + validateNumber(e) + ' ' + validateNumber(f) + ' Tm');\n  }\n  function docSetTextMode(fill, stroke) {\n    var mode = fill && stroke ? 2 : stroke ? 1 : fill ? 0 : 3;\n    doc.addContent(mode + ' Tr');\n  }\n  function docWriteGlyph(glyph) {\n    doc.addContent('<' + glyph + '> Tj');\n  }\n  function docEndText() {\n    doc.addContent('ET');\n  }\n  function docFillColor(color) {\n    if (color[0].constructor.name === 'PDFPattern') {\n      doc.fillOpacity(color[1]);\n      docUsePattern(color[0], false);\n    } else {\n      doc.fillColor(color[0], color[1]);\n    }\n  }\n  function docStrokeColor(color) {\n    if (color[0].constructor.name === 'PDFPattern') {\n      doc.strokeOpacity(color[1]);\n      docUsePattern(color[0], true);\n    } else {\n      doc.strokeColor(color[0], color[1]);\n    }\n  }\n  function docInsertLink(x, y, w, h, url) {\n    var ref = doc.ref({\n      Type: 'Annot',\n      Subtype: 'Link',\n      Rect: [x, y, w, h],\n      Border: [0, 0, 0],\n      A: {\n        S: 'URI',\n        URI: new String(url)\n      }\n    });\n    ref.end();\n    links.push(ref);\n  }\n  function parseXml(xml) {\n    var SvgNode = function SvgNode(tag, type, value, error) {\n      this.error = error;\n      this.nodeName = tag;\n      this.nodeValue = value;\n      this.nodeType = type;\n      this.attributes = Object.create(null);\n      this.childNodes = [];\n      this.parentNode = null;\n      this.id = '';\n      this.textContent = '';\n      this.classList = [];\n    };\n    SvgNode.prototype.getAttribute = function (attr) {\n      return this.attributes[attr] != null ? this.attributes[attr] : null;\n    };\n    SvgNode.prototype.getElementById = function (id) {\n      var result = null;\n      (function recursive(node) {\n        if (result) {\n          return;\n        }\n        if (node.nodeType === 1) {\n          if (node.id === id) {\n            result = node;\n          }\n          for (var i = 0; i < node.childNodes.length; i++) {\n            recursive(node.childNodes[i]);\n          }\n        }\n      })(this);\n      return result;\n    };\n    SvgNode.prototype.getElementsByTagName = function (tag) {\n      var result = [];\n      (function recursive(node) {\n        if (node.nodeType === 1) {\n          if (node.nodeName === tag) {\n            result.push(node);\n          }\n          for (var i = 0; i < node.childNodes.length; i++) {\n            recursive(node.childNodes[i]);\n          }\n        }\n      })(this);\n      return result;\n    };\n    var parser = new StringParser(xml.trim()),\n      result,\n      child,\n      error = false;\n    var recursive = function recursive() {\n      var temp, child;\n      if (temp = parser.match(/^<([\\w:.-]+)\\s*/, true)) {\n        // Opening tag\n        var node = new SvgNode(temp[1], 1, null, error);\n        while (temp = parser.match(/^([\\w:.-]+)(?:\\s*=\\s*\"([^\"]*)\"|\\s*=\\s*'([^']*)')?\\s*/, true)) {\n          // Attribute\n          var attr = temp[1],\n            value = decodeEntities(temp[2] || temp[3] || '');\n          if (!node.attributes[attr]) {\n            node.attributes[attr] = value;\n            if (attr === 'id') {\n              node.id = value;\n            }\n            if (attr === 'class') {\n              node.classList = value.split(' ');\n            }\n          } else {\n            warningCallback('parseXml: duplicate attribute \"' + attr + '\"');\n            error = true;\n          }\n        }\n        if (parser.match(/^>/)) {\n          // End of opening tag\n          while (child = recursive()) {\n            node.childNodes.push(child);\n            child.parentNode = node;\n            node.textContent += child.nodeType === 3 || child.nodeType === 4 ? child.nodeValue : child.textContent;\n          }\n          if (temp = parser.match(/^<\\/([\\w:.-]+)\\s*>/, true)) {\n            // Closing tag\n            if (temp[1] === node.nodeName) {\n              return node;\n            } else {\n              warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & closing \"' + temp[1] + '\"');\n              error = true;\n              return node;\n            }\n          } else {\n            warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & not closing');\n            error = true;\n            return node;\n          }\n        } else if (parser.match(/^\\/>/)) {\n          // Self-closing tag\n          return node;\n        } else {\n          warningCallback('parseXml: tag could not be parsed \"' + node.nodeName + '\"');\n          error = true;\n        }\n      } else if (temp = parser.match(/^<!--[\\s\\S]*?-->/)) {\n        // Comment\n        return new SvgNode(null, 8, temp, error);\n      } else if (temp = parser.match(/^<\\?[\\s\\S]*?\\?>/)) {\n        // Processing instructions\n        return new SvgNode(null, 7, temp, error);\n      } else if (temp = parser.match(/^<!DOCTYPE\\s*([\\s\\S]*?)>/)) {\n        // Doctype\n        return new SvgNode(null, 10, temp, error);\n      } else if (temp = parser.match(/^<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/, true)) {\n        // Cdata node\n        return new SvgNode('#cdata-section', 4, temp[1], error);\n      } else if (temp = parser.match(/^([^<]+)/, true)) {\n        // Text node\n        return new SvgNode('#text', 3, decodeEntities(temp[1]), error);\n      }\n    };\n    while (child = recursive()) {\n      if (child.nodeType === 1 && !result) {\n        result = child;\n      } else if (child.nodeType === 1 || child.nodeType === 3 && child.nodeValue.trim() !== '') {\n        warningCallback('parseXml: data after document end has been discarded');\n      }\n    }\n    if (parser.matchAll()) {\n      warningCallback('parseXml: parsing error');\n    }\n    return result;\n  }\n  ;\n  function decodeEntities(str) {\n    return str.replace(/&(?:#([0-9]+)|#[xX]([0-9A-Fa-f]+)|([0-9A-Za-z]+));/g, function (mt, m0, m1, m2) {\n      if (m0) {\n        return String.fromCharCode(parseInt(m0, 10));\n      } else if (m1) {\n        return String.fromCharCode(parseInt(m1, 16));\n      } else if (m2 && Entities[m2]) {\n        return String.fromCharCode(Entities[m2]);\n      } else {\n        return mt;\n      }\n    });\n  }\n  function parseColor(raw) {\n    var temp, result;\n    raw = (raw || '').trim();\n    if (temp = NamedColors[raw]) {\n      result = [temp.slice(), 1];\n    } else if (temp = raw.match(/^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)$/i)) {\n      temp[1] = parseInt(temp[1]);\n      temp[2] = parseInt(temp[2]);\n      temp[3] = parseInt(temp[3]);\n      temp[4] = parseFloat(temp[4]);\n      if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256 && temp[4] <= 1) {\n        result = [temp.slice(1, 4), temp[4]];\n      }\n    } else if (temp = raw.match(/^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)$/i)) {\n      temp[1] = parseInt(temp[1]);\n      temp[2] = parseInt(temp[2]);\n      temp[3] = parseInt(temp[3]);\n      if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\n        result = [temp.slice(1, 4), 1];\n      }\n    } else if (temp = raw.match(/^rgb\\(\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*\\)$/i)) {\n      temp[1] = 2.55 * parseFloat(temp[1]);\n      temp[2] = 2.55 * parseFloat(temp[2]);\n      temp[3] = 2.55 * parseFloat(temp[3]);\n      if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\n        result = [temp.slice(1, 4), 1];\n      }\n    } else if (temp = raw.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i)) {\n      result = [[parseInt(temp[1], 16), parseInt(temp[2], 16), parseInt(temp[3], 16)], 1];\n    } else if (temp = raw.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i)) {\n      result = [[0x11 * parseInt(temp[1], 16), 0x11 * parseInt(temp[2], 16), 0x11 * parseInt(temp[3], 16)], 1];\n    }\n    return colorCallback ? colorCallback(result, raw) : result;\n  }\n  function opacityToColor(color, opacity, isMask) {\n    var newColor = color[0].slice(),\n      newOpacity = color[1] * opacity;\n    if (isMask) {\n      for (var i = 0; i < color.length; i++) {\n        newColor[i] *= newOpacity;\n      }\n      return [newColor, 1];\n    } else {\n      return [newColor, newOpacity];\n    }\n  }\n  function multiplyMatrix() {\n    function multiply(a, b) {\n      return [a[0] * b[0] + a[2] * b[1], a[1] * b[0] + a[3] * b[1], a[0] * b[2] + a[2] * b[3], a[1] * b[2] + a[3] * b[3], a[0] * b[4] + a[2] * b[5] + a[4], a[1] * b[4] + a[3] * b[5] + a[5]];\n    }\n    var result = arguments[0];\n    for (var i = 1; i < arguments.length; i++) {\n      result = multiply(result, arguments[i]);\n    }\n    return result;\n  }\n  function transformPoint(p, m) {\n    return [m[0] * p[0] + m[2] * p[1] + m[4], m[1] * p[0] + m[3] * p[1] + m[5]];\n  }\n  function getGlobalMatrix() {\n    var ctm = doc._ctm;\n    for (var i = groupStack.length - 1; i >= 0; i--) {\n      ctm = multiplyMatrix(groupStack[i].savedMatrix, ctm);\n    }\n    return ctm;\n  }\n  function getPageBBox() {\n    return new SvgShape().M(0, 0).L(doc.page.width, 0).L(doc.page.width, doc.page.height).L(0, doc.page.height).transform(inverseMatrix(getGlobalMatrix())).getBoundingBox();\n  }\n  function inverseMatrix(m) {\n    var dt = m[0] * m[3] - m[1] * m[2];\n    return [m[3] / dt, -m[1] / dt, -m[2] / dt, m[0] / dt, (m[2] * m[5] - m[3] * m[4]) / dt, (m[1] * m[4] - m[0] * m[5]) / dt];\n  }\n  function validateMatrix(m) {\n    var m0 = validateNumber(m[0]),\n      m1 = validateNumber(m[1]),\n      m2 = validateNumber(m[2]),\n      m3 = validateNumber(m[3]),\n      m4 = validateNumber(m[4]),\n      m5 = validateNumber(m[5]);\n    if (isNotEqual(m0 * m3 - m1 * m2, 0)) {\n      return [m0, m1, m2, m3, m4, m5];\n    }\n  }\n  function solveEquation(curve) {\n    var a = curve[2] || 0,\n      b = curve[1] || 0,\n      c = curve[0] || 0;\n    if (isEqual(a, 0) && isEqual(b, 0)) {\n      return [];\n    } else if (isEqual(a, 0)) {\n      return [-c / b];\n    } else {\n      var d = b * b - 4 * a * c;\n      if (isNotEqual(d, 0) && d > 0) {\n        return [(-b + Math.sqrt(d)) / (2 * a), (-b - Math.sqrt(d)) / (2 * a)];\n      } else if (isEqual(d, 0)) {\n        return [-b / (2 * a)];\n      } else {\n        return [];\n      }\n    }\n  }\n  function getCurveValue(t, curve) {\n    return (curve[0] || 0) + (curve[1] || 0) * t + (curve[2] || 0) * t * t + (curve[3] || 0) * t * t * t;\n  }\n  function isEqual(number, ref) {\n    return Math.abs(number - ref) < 1e-10;\n  }\n  function isNotEqual(number, ref) {\n    return Math.abs(number - ref) >= 1e-10;\n  }\n  function validateNumber(n) {\n    return n > -1e21 && n < 1e21 ? Math.round(n * 1e6) / 1e6 : 0;\n  }\n  function isArrayLike(v) {\n    return typeof v === 'object' && v !== null && typeof v.length === 'number';\n  }\n  function parseTranform(v) {\n    var parser = new StringParser((v || '').trim()),\n      result = [1, 0, 0, 1, 0, 0],\n      temp;\n    while (temp = parser.match(/^([A-Za-z]+)\\s*[(]([^(]+)[)]/, true)) {\n      var func = temp[1],\n        nums = [],\n        parser2 = new StringParser(temp[2].trim()),\n        temp2 = void 0;\n      while (temp2 = parser2.matchNumber()) {\n        nums.push(Number(temp2));\n        parser2.matchSeparator();\n      }\n      if (func === 'matrix' && nums.length === 6) {\n        result = multiplyMatrix(result, [nums[0], nums[1], nums[2], nums[3], nums[4], nums[5]]);\n      } else if (func === 'translate' && nums.length === 2) {\n        result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], nums[1]]);\n      } else if (func === 'translate' && nums.length === 1) {\n        result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], 0]);\n      } else if (func === 'scale' && nums.length === 2) {\n        result = multiplyMatrix(result, [nums[0], 0, 0, nums[1], 0, 0]);\n      } else if (func === 'scale' && nums.length === 1) {\n        result = multiplyMatrix(result, [nums[0], 0, 0, nums[0], 0, 0]);\n      } else if (func === 'rotate' && nums.length === 3) {\n        var a = nums[0] * Math.PI / 180;\n        result = multiplyMatrix(result, [1, 0, 0, 1, nums[1], nums[2]], [Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0], [1, 0, 0, 1, -nums[1], -nums[2]]);\n      } else if (func === 'rotate' && nums.length === 1) {\n        var _a = nums[0] * Math.PI / 180;\n        result = multiplyMatrix(result, [Math.cos(_a), Math.sin(_a), -Math.sin(_a), Math.cos(_a), 0, 0]);\n      } else if (func === 'skewX' && nums.length === 1) {\n        var _a2 = nums[0] * Math.PI / 180;\n        result = multiplyMatrix(result, [1, 0, Math.tan(_a2), 1, 0, 0]);\n      } else if (func === 'skewY' && nums.length === 1) {\n        var _a3 = nums[0] * Math.PI / 180;\n        result = multiplyMatrix(result, [1, Math.tan(_a3), 0, 1, 0, 0]);\n      } else {\n        return;\n      }\n      parser.matchSeparator();\n    }\n    if (parser.matchAll()) {\n      return;\n    }\n    return result;\n  }\n  function parseAspectRatio(aspectRatio, availWidth, availHeight, elemWidth, elemHeight, initAlign) {\n    var temp = (aspectRatio || '').trim().match(/^(none)$|^x(Min|Mid|Max)Y(Min|Mid|Max)(?:\\s+(meet|slice))?$/) || [],\n      ratioType = temp[1] || temp[4] || 'meet',\n      xAlign = temp[2] || 'Mid',\n      yAlign = temp[3] || 'Mid',\n      scaleX = availWidth / elemWidth,\n      scaleY = availHeight / elemHeight,\n      dx = {\n        'Min': 0,\n        'Mid': 0.5,\n        'Max': 1\n      }[xAlign] - (initAlign || 0),\n      dy = {\n        'Min': 0,\n        'Mid': 0.5,\n        'Max': 1\n      }[yAlign] - (initAlign || 0);\n    if (ratioType === 'slice') {\n      scaleY = scaleX = Math.max(scaleX, scaleY);\n    } else if (ratioType === 'meet') {\n      scaleY = scaleX = Math.min(scaleX, scaleY);\n    }\n    return [scaleX, 0, 0, scaleY, dx * (availWidth - elemWidth * scaleX), dy * (availHeight - elemHeight * scaleY)];\n  }\n  function parseStyleAttr(v) {\n    var result = Object.create(null);\n    v = (v || '').trim().split(/;/);\n    for (var i = 0; i < v.length; i++) {\n      var key = (v[i].split(':')[0] || '').trim(),\n        value = (v[i].split(':')[1] || '').trim();\n      if (key) {\n        result[key] = value;\n      }\n    }\n    if (result['marker']) {\n      if (!result['marker-start']) {\n        result['marker-start'] = result['marker'];\n      }\n      if (!result['marker-mid']) {\n        result['marker-mid'] = result['marker'];\n      }\n      if (!result['marker-end']) {\n        result['marker-end'] = result['marker'];\n      }\n    }\n    if (result['font']) {\n      var fontFamily = null,\n        fontSize = null,\n        fontStyle = \"normal\",\n        fontWeight = \"normal\",\n        fontVariant = \"normal\";\n      var parts = result['font'].split(/\\s+/);\n      for (var _i = 0; _i < parts.length; _i++) {\n        switch (parts[_i]) {\n          case \"normal\":\n            break;\n          case \"italic\":\n          case \"oblique\":\n            fontStyle = parts[_i];\n            break;\n          case \"small-caps\":\n            fontVariant = parts[_i];\n            break;\n          case \"bold\":\n          case \"bolder\":\n          case \"lighter\":\n          case \"100\":\n          case \"200\":\n          case \"300\":\n          case \"400\":\n          case \"500\":\n          case \"600\":\n          case \"700\":\n          case \"800\":\n          case \"900\":\n            fontWeight = parts[_i];\n            break;\n          default:\n            if (!fontSize) {\n              fontSize = parts[_i].split('/')[0];\n            } else {\n              if (!fontFamily) {\n                fontFamily = parts[_i];\n              } else {\n                fontFamily += ' ' + parts[_i];\n              }\n            }\n            break;\n        }\n      }\n      if (!result['font-style']) {\n        result['font-style'] = fontStyle;\n      }\n      if (!result['font-variant']) {\n        result['font-variant'] = fontVariant;\n      }\n      if (!result['font-weight']) {\n        result['font-weight'] = fontWeight;\n      }\n      if (!result['font-size']) {\n        result['font-size'] = fontSize;\n      }\n      if (!result['font-family']) {\n        result['font-family'] = fontFamily;\n      }\n    }\n    return result;\n  }\n  function parseSelector(v) {\n    var parts = v.split(/(?=[.#])/g),\n      ids = [],\n      classes = [],\n      tags = [],\n      temp;\n    for (var i = 0; i < parts.length; i++) {\n      if (temp = parts[i].match(/^[#]([_A-Za-z0-9-]+)$/)) {\n        ids.push(temp[1]);\n      } else if (temp = parts[i].match(/^[.]([_A-Za-z0-9-]+)$/)) {\n        classes.push(temp[1]);\n      } else if (temp = parts[i].match(/^([_A-Za-z0-9-]+)$/)) {\n        tags.push(temp[1]);\n      } else if (parts[i] !== '*') {\n        return;\n      }\n    }\n    return {\n      tags: tags,\n      ids: ids,\n      classes: classes,\n      specificity: ids.length * 10000 + classes.length * 100 + tags.length\n    };\n  }\n  function parseStyleSheet(v) {\n    var parser = new StringParser(v.trim()),\n      rules = [],\n      rule;\n    while (rule = parser.match(/^\\s*([^\\{\\}]*?)\\s*\\{([^\\{\\}]*?)\\}/, true)) {\n      var selectors = rule[1].split(/\\s*,\\s*/g),\n        css = parseStyleAttr(rule[2]);\n      for (var i = 0; i < selectors.length; i++) {\n        var selector = parseSelector(selectors[i]);\n        if (selector) {\n          rules.push({\n            selector: selector,\n            css: css\n          });\n        }\n      }\n    }\n    return rules;\n  }\n  function matchesSelector(elem, selector) {\n    if (elem.nodeType !== 1) {\n      return false;\n    }\n    for (var i = 0; i < selector.tags.length; i++) {\n      if (selector.tags[i] !== elem.nodeName) {\n        return false;\n      }\n    }\n    for (var _i2 = 0; _i2 < selector.ids.length; _i2++) {\n      if (selector.ids[_i2] !== elem.id) {\n        return false;\n      }\n    }\n    for (var _i3 = 0; _i3 < selector.classes.length; _i3++) {\n      if (elem.classList.indexOf(selector.classes[_i3]) === -1) {\n        return false;\n      }\n    }\n    return true;\n  }\n  function getStyle(elem) {\n    var result = Object.create(null);\n    var specificities = Object.create(null);\n    for (var i = 0; i < styleRules.length; i++) {\n      var rule = styleRules[i];\n      if (matchesSelector(elem, rule.selector)) {\n        for (var key in rule.css) {\n          if (!(specificities[key] > rule.selector.specificity)) {\n            result[key] = rule.css[key];\n            specificities[key] = rule.selector.specificity;\n          }\n        }\n      }\n    }\n    return result;\n  }\n  function combineArrays(array1, array2) {\n    return array1.concat(array2.slice(array1.length));\n  }\n  function getAscent(font, size) {\n    return Math.max(font.ascender, (font.bbox[3] || font.bbox.maxY) * (font.scale || 1)) * size / 1000;\n  }\n  function getDescent(font, size) {\n    return Math.min(font.descender, (font.bbox[1] || font.bbox.minY) * (font.scale || 1)) * size / 1000;\n  }\n  function getXHeight(font, size) {\n    return (font.xHeight || 0.5 * (font.ascender - font.descender)) * size / 1000;\n  }\n  function getBaseline(font, size, baseline, shift) {\n    var dy1, dy2;\n    switch (baseline) {\n      case 'middle':\n        dy1 = 0.5 * getXHeight(font, size);\n        break;\n      case 'central':\n        dy1 = 0.5 * (getDescent(font, size) + getAscent(font, size));\n        break;\n      case 'after-edge':\n      case 'text-after-edge':\n        dy1 = getDescent(font, size);\n        break;\n      case 'alphabetic':\n      case 'auto':\n      case 'baseline':\n        dy1 = 0;\n        break;\n      case 'mathematical':\n        dy1 = 0.5 * getAscent(font, size);\n        break;\n      case 'hanging':\n        dy1 = 0.8 * getAscent(font, size);\n        break;\n      case 'before-edge':\n      case 'text-before-edge':\n        dy1 = getAscent(font, size);\n        break;\n      default:\n        dy1 = 0;\n        break;\n    }\n    switch (shift) {\n      case 'baseline':\n        dy2 = 0;\n        break;\n      case 'super':\n        dy2 = 0.6 * size;\n        break;\n      case 'sub':\n        dy2 = -0.6 * size;\n        break;\n      default:\n        dy2 = shift;\n        break;\n    }\n    return dy1 - dy2;\n  }\n  function getTextPos(font, size, text) {\n    var encoded = font.encode('' + text),\n      hex = encoded[0],\n      pos = encoded[1],\n      data = [];\n    for (var i = 0; i < hex.length; i++) {\n      var unicode = font.unicode ? font.unicode[parseInt(hex[i], 16)] : [text.charCodeAt(i)];\n      data.push({\n        glyph: hex[i],\n        unicode: unicode,\n        width: pos[i].advanceWidth * size / 1000,\n        xOffset: pos[i].xOffset * size / 1000,\n        yOffset: pos[i].yOffset * size / 1000,\n        xAdvance: pos[i].xAdvance * size / 1000,\n        yAdvance: pos[i].yAdvance * size / 1000\n      });\n    }\n    return data;\n  }\n  function createSVGElement(obj, inherits) {\n    switch (obj.nodeName) {\n      case 'use':\n        return new SvgElemUse(obj, inherits);\n      case 'symbol':\n        return new SvgElemSymbol(obj, inherits);\n      case 'g':\n        return new SvgElemGroup(obj, inherits);\n      case 'a':\n        return new SvgElemLink(obj, inherits);\n      case 'svg':\n        return new SvgElemSvg(obj, inherits);\n      case 'image':\n        return new SVGElemImage(obj, inherits);\n      case 'rect':\n        return new SvgElemRect(obj, inherits);\n      case 'circle':\n        return new SvgElemCircle(obj, inherits);\n      case 'ellipse':\n        return new SvgElemEllipse(obj, inherits);\n      case 'line':\n        return new SvgElemLine(obj, inherits);\n      case 'polyline':\n        return new SvgElemPolyline(obj, inherits);\n      case 'polygon':\n        return new SvgElemPolygon(obj, inherits);\n      case 'path':\n        return new SvgElemPath(obj, inherits);\n      case 'text':\n        return new SvgElemText(obj, inherits);\n      case 'tspan':\n        return new SvgElemTspan(obj, inherits);\n      case 'textPath':\n        return new SvgElemTextPath(obj, inherits);\n      case '#text':\n      case '#cdata-section':\n        return new SvgElemTextNode(obj, inherits);\n      default:\n        return new SvgElem(obj, inherits);\n    }\n  }\n  var StringParser = function StringParser(str) {\n    this.match = function (exp, all) {\n      var temp = str.match(exp);\n      if (!temp || temp.index !== 0) {\n        return;\n      }\n      str = str.substring(temp[0].length);\n      return all ? temp : temp[0];\n    };\n    this.matchSeparator = function () {\n      return this.match(/^(?:\\s*,\\s*|\\s*|)/);\n    };\n    this.matchSpace = function () {\n      return this.match(/^(?:\\s*)/);\n    };\n    this.matchLengthUnit = function () {\n      return this.match(/^(?:px|pt|cm|mm|in|pc|em|ex|%|)/);\n    };\n    this.matchNumber = function () {\n      return this.match(/^(?:[-+]?(?:[0-9]+[.][0-9]+|[0-9]+[.]|[.][0-9]+|[0-9]+)(?:[eE][-+]?[0-9]+)?)/);\n    };\n    this.matchAll = function () {\n      return this.match(/^[\\s\\S]+/);\n    };\n  };\n  var BezierSegment = function BezierSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n    var divisions = 6 * precision;\n    var equationX = [p1x, -3 * p1x + 3 * c1x, 3 * p1x - 6 * c1x + 3 * c2x, -p1x + 3 * c1x - 3 * c2x + p2x];\n    var equationY = [p1y, -3 * p1y + 3 * c1y, 3 * p1y - 6 * c1y + 3 * c2y, -p1y + 3 * c1y - 3 * c2y + p2y];\n    var derivativeX = [-3 * p1x + 3 * c1x, 6 * p1x - 12 * c1x + 6 * c2x, -3 * p1x + 9 * c1x - 9 * c2x + 3 * p2x];\n    var derivativeY = [-3 * p1y + 3 * c1y, 6 * p1y - 12 * c1y + 6 * c2y, -3 * p1y + 9 * c1y - 9 * c2y + 3 * p2y];\n    var lengthMap = [0];\n    for (var i = 1; i <= divisions; i++) {\n      var t = (i - 0.5) / divisions;\n      var dx = getCurveValue(t, derivativeX) / divisions,\n        dy = getCurveValue(t, derivativeY) / divisions,\n        l = Math.sqrt(dx * dx + dy * dy);\n      lengthMap[i] = lengthMap[i - 1] + l;\n    }\n    this.totalLength = lengthMap[divisions];\n    this.startPoint = [p1x, p1y, isEqual(p1x, c1x) && isEqual(p1y, c1y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(c1y - p1y, c1x - p1x)];\n    this.endPoint = [p2x, p2y, isEqual(c2x, p2x) && isEqual(c2y, p2y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(p2y - c2y, p2x - c2x)];\n    this.getBoundingBox = function () {\n      var temp;\n      var minX = getCurveValue(0, equationX),\n        minY = getCurveValue(0, equationY),\n        maxX = getCurveValue(1, equationX),\n        maxY = getCurveValue(1, equationY);\n      if (minX > maxX) {\n        temp = maxX;\n        maxX = minX;\n        minX = temp;\n      }\n      if (minY > maxY) {\n        temp = maxY;\n        maxY = minY;\n        minY = temp;\n      }\n      var rootsX = solveEquation(derivativeX);\n      for (var _i4 = 0; _i4 < rootsX.length; _i4++) {\n        if (rootsX[_i4] >= 0 && rootsX[_i4] <= 1) {\n          var _x = getCurveValue(rootsX[_i4], equationX);\n          if (_x < minX) {\n            minX = _x;\n          }\n          if (_x > maxX) {\n            maxX = _x;\n          }\n        }\n      }\n      var rootsY = solveEquation(derivativeY);\n      for (var _i5 = 0; _i5 < rootsY.length; _i5++) {\n        if (rootsY[_i5] >= 0 && rootsY[_i5] <= 1) {\n          var _y = getCurveValue(rootsY[_i5], equationY);\n          if (_y < minY) {\n            minY = _y;\n          }\n          if (_y > maxY) {\n            maxY = _y;\n          }\n        }\n      }\n      return [minX, minY, maxX, maxY];\n    };\n    this.getPointAtLength = function (l) {\n      if (isEqual(l, 0)) {\n        return this.startPoint;\n      }\n      if (isEqual(l, this.totalLength)) {\n        return this.endPoint;\n      }\n      if (l < 0 || l > this.totalLength) {\n        return;\n      }\n      for (var _i6 = 1; _i6 <= divisions; _i6++) {\n        var l1 = lengthMap[_i6 - 1],\n          l2 = lengthMap[_i6];\n        if (l1 <= l && l <= l2) {\n          var _t = (_i6 - (l2 - l) / (l2 - l1)) / divisions,\n            _x2 = getCurveValue(_t, equationX),\n            _y2 = getCurveValue(_t, equationY),\n            _dx = getCurveValue(_t, derivativeX),\n            _dy = getCurveValue(_t, derivativeY);\n          return [_x2, _y2, Math.atan2(_dy, _dx)];\n        }\n      }\n    };\n  };\n  var LineSegment = function LineSegment(p1x, p1y, p2x, p2y) {\n    this.totalLength = Math.sqrt((p2x - p1x) * (p2x - p1x) + (p2y - p1y) * (p2y - p1y));\n    this.startPoint = [p1x, p1y, Math.atan2(p2y - p1y, p2x - p1x)];\n    this.endPoint = [p2x, p2y, Math.atan2(p2y - p1y, p2x - p1x)];\n    this.getBoundingBox = function () {\n      return [Math.min(this.startPoint[0], this.endPoint[0]), Math.min(this.startPoint[1], this.endPoint[1]), Math.max(this.startPoint[0], this.endPoint[0]), Math.max(this.startPoint[1], this.endPoint[1])];\n    };\n    this.getPointAtLength = function (l) {\n      if (l >= 0 && l <= this.totalLength) {\n        var r = l / this.totalLength || 0,\n          _x3 = this.startPoint[0] + r * (this.endPoint[0] - this.startPoint[0]),\n          _y3 = this.startPoint[1] + r * (this.endPoint[1] - this.startPoint[1]);\n        return [_x3, _y3, this.startPoint[2]];\n      }\n    };\n  };\n  var SvgShape = function SvgShape() {\n    this.pathCommands = [];\n    this.pathSegments = [];\n    this.startPoint = null;\n    this.endPoint = null;\n    this.totalLength = 0;\n    var startX = 0,\n      startY = 0,\n      currX = 0,\n      currY = 0,\n      lastCom,\n      lastCtrlX,\n      lastCtrlY;\n    this.move = function (x, y) {\n      startX = currX = x;\n      startY = currY = y;\n      return null;\n    };\n    this.line = function (x, y) {\n      var segment = new LineSegment(currX, currY, x, y);\n      currX = x;\n      currY = y;\n      return segment;\n    };\n    this.curve = function (c1x, c1y, c2x, c2y, x, y) {\n      var segment = new BezierSegment(currX, currY, c1x, c1y, c2x, c2y, x, y);\n      currX = x;\n      currY = y;\n      return segment;\n    };\n    this.close = function () {\n      var segment = new LineSegment(currX, currY, startX, startY);\n      currX = startX;\n      currY = startY;\n      return segment;\n    };\n    this.addCommand = function (data) {\n      this.pathCommands.push(data);\n      var segment = this[data[0]].apply(this, data.slice(3));\n      if (segment) {\n        segment.hasStart = data[1];\n        segment.hasEnd = data[2];\n        this.startPoint = this.startPoint || segment.startPoint;\n        this.endPoint = segment.endPoint;\n        this.pathSegments.push(segment);\n        this.totalLength += segment.totalLength;\n      }\n    };\n    this.M = function (x, y) {\n      this.addCommand(['move', true, true, x, y]);\n      lastCom = 'M';\n      return this;\n    };\n    this.m = function (x, y) {\n      return this.M(currX + x, currY + y);\n    };\n    this.Z = this.z = function () {\n      this.addCommand(['close', true, true]);\n      lastCom = 'Z';\n      return this;\n    };\n    this.L = function (x, y) {\n      this.addCommand(['line', true, true, x, y]);\n      lastCom = 'L';\n      return this;\n    };\n    this.l = function (x, y) {\n      return this.L(currX + x, currY + y);\n    };\n    this.H = function (x) {\n      return this.L(x, currY);\n    };\n    this.h = function (x) {\n      return this.L(currX + x, currY);\n    };\n    this.V = function (y) {\n      return this.L(currX, y);\n    };\n    this.v = function (y) {\n      return this.L(currX, currY + y);\n    };\n    this.C = function (c1x, c1y, c2x, c2y, x, y) {\n      this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\n      lastCom = 'C';\n      lastCtrlX = c2x;\n      lastCtrlY = c2y;\n      return this;\n    };\n    this.c = function (c1x, c1y, c2x, c2y, x, y) {\n      return this.C(currX + c1x, currY + c1y, currX + c2x, currY + c2y, currX + x, currY + y);\n    };\n    this.S = function (c1x, c1y, x, y) {\n      return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), c1x, c1y, x, y);\n    };\n    this.s = function (c1x, c1y, x, y) {\n      return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), currX + c1x, currY + c1y, currX + x, currY + y);\n    };\n    this.Q = function (cx, cy, x, y) {\n      var c1x = currX + 2 / 3 * (cx - currX),\n        c1y = currY + 2 / 3 * (cy - currY),\n        c2x = x + 2 / 3 * (cx - x),\n        c2y = y + 2 / 3 * (cy - y);\n      this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\n      lastCom = 'Q';\n      lastCtrlX = cx;\n      lastCtrlY = cy;\n      return this;\n    };\n    this.q = function (c1x, c1y, x, y) {\n      return this.Q(currX + c1x, currY + c1y, currX + x, currY + y);\n    };\n    this.T = function (x, y) {\n      return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), x, y);\n    };\n    this.t = function (x, y) {\n      return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), currX + x, currY + y);\n    };\n    this.A = function (rx, ry, fi, fa, fs, x, y) {\n      if (isEqual(rx, 0) || isEqual(ry, 0)) {\n        this.addCommand(['line', true, true, x, y]);\n      } else {\n        fi = fi * (Math.PI / 180);\n        rx = Math.abs(rx);\n        ry = Math.abs(ry);\n        fa = 1 * !!fa;\n        fs = 1 * !!fs;\n        var x1 = Math.cos(fi) * (currX - x) / 2 + Math.sin(fi) * (currY - y) / 2,\n          y1 = Math.cos(fi) * (currY - y) / 2 - Math.sin(fi) * (currX - x) / 2,\n          lambda = x1 * x1 / (rx * rx) + y1 * y1 / (ry * ry);\n        if (lambda > 1) {\n          rx *= Math.sqrt(lambda);\n          ry *= Math.sqrt(lambda);\n        }\n        var r = Math.sqrt(Math.max(0, rx * rx * ry * ry - rx * rx * y1 * y1 - ry * ry * x1 * x1) / (rx * rx * y1 * y1 + ry * ry * x1 * x1)),\n          x2 = (fa === fs ? -1 : 1) * r * rx * y1 / ry,\n          y2 = (fa === fs ? 1 : -1) * r * ry * x1 / rx;\n        var cx = Math.cos(fi) * x2 - Math.sin(fi) * y2 + (currX + x) / 2,\n          cy = Math.sin(fi) * x2 + Math.cos(fi) * y2 + (currY + y) / 2,\n          th1 = Math.atan2((y1 - y2) / ry, (x1 - x2) / rx),\n          th2 = Math.atan2((-y1 - y2) / ry, (-x1 - x2) / rx);\n        if (fs === 0 && th2 - th1 > 0) {\n          th2 -= 2 * Math.PI;\n        } else if (fs === 1 && th2 - th1 < 0) {\n          th2 += 2 * Math.PI;\n        }\n        var segms = Math.ceil(Math.abs(th2 - th1) / (Math.PI / precision));\n        for (var i = 0; i < segms; i++) {\n          var th3 = th1 + i * (th2 - th1) / segms,\n            th4 = th1 + (i + 1) * (th2 - th1) / segms,\n            t = 4 / 3 * Math.tan((th4 - th3) / 4);\n          var c1x = cx + Math.cos(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) - Math.sin(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\n            c1y = cy + Math.sin(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) + Math.cos(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\n            c2x = cx + Math.cos(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) - Math.sin(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\n            c2y = cy + Math.sin(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) + Math.cos(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\n            endX = cx + Math.cos(fi) * rx * Math.cos(th4) - Math.sin(fi) * ry * Math.sin(th4),\n            endY = cy + Math.sin(fi) * rx * Math.cos(th4) + Math.cos(fi) * ry * Math.sin(th4);\n          this.addCommand(['curve', i === 0, i === segms - 1, c1x, c1y, c2x, c2y, endX, endY]);\n        }\n      }\n      lastCom = 'A';\n      return this;\n    };\n    this.a = function (rx, ry, fi, fa, fs, x, y) {\n      return this.A(rx, ry, fi, fa, fs, currX + x, currY + y);\n    };\n    this.path = function (d) {\n      var command,\n        value,\n        temp,\n        parser = new StringParser((d || '').trim());\n      while (command = parser.match(/^[astvzqmhlcASTVZQMHLC]/)) {\n        parser.matchSeparator();\n        var values = [];\n        while (value = PathFlags[command + values.length] ? parser.match(/^[01]/) : parser.matchNumber()) {\n          parser.matchSeparator();\n          if (values.length === PathArguments[command]) {\n            this[command].apply(this, values);\n            values = [];\n            if (command === 'M') {\n              command = 'L';\n            } else if (command === 'm') {\n              command = 'l';\n            }\n          }\n          values.push(Number(value));\n        }\n        if (values.length === PathArguments[command]) {\n          this[command].apply(this, values);\n        } else {\n          warningCallback('SvgPath: command ' + command + ' with ' + values.length + ' numbers');\n          return;\n        }\n      }\n      if (temp = parser.matchAll()) {\n        warningCallback('SvgPath: unexpected string ' + temp);\n      }\n      return this;\n    };\n    this.getBoundingBox = function () {\n      var bbox = [Infinity, Infinity, -Infinity, -Infinity];\n      function addBounds(bbox1) {\n        if (bbox1[0] < bbox[0]) {\n          bbox[0] = bbox1[0];\n        }\n        if (bbox1[2] > bbox[2]) {\n          bbox[2] = bbox1[2];\n        }\n        if (bbox1[1] < bbox[1]) {\n          bbox[1] = bbox1[1];\n        }\n        if (bbox1[3] > bbox[3]) {\n          bbox[3] = bbox1[3];\n        }\n      }\n      for (var i = 0; i < this.pathSegments.length; i++) {\n        addBounds(this.pathSegments[i].getBoundingBox());\n      }\n      if (bbox[0] === Infinity) {\n        bbox[0] = 0;\n      }\n      if (bbox[1] === Infinity) {\n        bbox[1] = 0;\n      }\n      if (bbox[2] === -Infinity) {\n        bbox[2] = 0;\n      }\n      if (bbox[3] === -Infinity) {\n        bbox[3] = 0;\n      }\n      return bbox;\n    };\n    this.getPointAtLength = function (l) {\n      if (l >= 0 && l <= this.totalLength) {\n        var temp;\n        for (var i = 0; i < this.pathSegments.length; i++) {\n          if (temp = this.pathSegments[i].getPointAtLength(l)) {\n            return temp;\n          }\n          l -= this.pathSegments[i].totalLength;\n        }\n        return this.endPoint;\n      }\n    };\n    this.transform = function (m) {\n      this.pathSegments = [];\n      this.startPoint = null;\n      this.endPoint = null;\n      this.totalLength = 0;\n      for (var i = 0; i < this.pathCommands.length; i++) {\n        var data = this.pathCommands.shift();\n        for (var j = 3; j < data.length; j += 2) {\n          var p = transformPoint([data[j], data[j + 1]], m);\n          data[j] = p[0];\n          data[j + 1] = p[1];\n        }\n        this.addCommand(data);\n      }\n      return this;\n    };\n    this.mergeShape = function (shape) {\n      for (var i = 0; i < shape.pathCommands.length; i++) {\n        this.addCommand(shape.pathCommands[i].slice());\n      }\n      return this;\n    };\n    this.clone = function () {\n      return new SvgShape().mergeShape(this);\n    };\n    this.insertInDocument = function () {\n      for (var i = 0; i < this.pathCommands.length; i++) {\n        var command = this.pathCommands[i][0],\n          values = this.pathCommands[i].slice(3);\n        switch (command) {\n          case 'move':\n            doc.moveTo(values[0], values[1]);\n            break;\n          case 'line':\n            doc.lineTo(values[0], values[1]);\n            break;\n          case 'curve':\n            doc.bezierCurveTo(values[0], values[1], values[2], values[3], values[4], values[5]);\n            break;\n          case 'close':\n            doc.closePath();\n            break;\n        }\n      }\n    };\n    this.getSubPaths = function () {\n      var subPaths = [],\n        shape = new SvgShape();\n      for (var i = 0; i < this.pathCommands.length; i++) {\n        var data = this.pathCommands[i],\n          command = this.pathCommands[i][0];\n        if (command === 'move' && i !== 0) {\n          subPaths.push(shape);\n          shape = new SvgShape();\n        }\n        shape.addCommand(data);\n      }\n      subPaths.push(shape);\n      return subPaths;\n    };\n    this.getMarkers = function () {\n      var markers = [],\n        subPaths = this.getSubPaths();\n      for (var i = 0; i < subPaths.length; i++) {\n        var subPath = subPaths[i],\n          subPathMarkers = [];\n        for (var j = 0; j < subPath.pathSegments.length; j++) {\n          var segment = subPath.pathSegments[j];\n          if (isNotEqual(segment.totalLength, 0) || j === 0 || j === subPath.pathSegments.length - 1) {\n            if (segment.hasStart) {\n              var startMarker = segment.getPointAtLength(0),\n                prevEndMarker = subPathMarkers.pop();\n              if (prevEndMarker) {\n                startMarker[2] = 0.5 * (prevEndMarker[2] + startMarker[2]);\n              }\n              subPathMarkers.push(startMarker);\n            }\n            if (segment.hasEnd) {\n              var endMarker = segment.getPointAtLength(segment.totalLength);\n              subPathMarkers.push(endMarker);\n            }\n          }\n        }\n        markers = markers.concat(subPathMarkers);\n      }\n      return markers;\n    };\n  };\n  var SvgElem = function SvgElem(obj, inherits) {\n    var styleCache = Object.create(null);\n    var childrenCache = null;\n    this.name = obj.nodeName;\n    this.isOuterElement = obj === svg || !obj.parentNode;\n    this.inherits = inherits || (!this.isOuterElement ? createSVGElement(obj.parentNode, null) : null);\n    this.stack = this.inherits ? this.inherits.stack.concat(obj) : [obj];\n    this.style = parseStyleAttr(typeof obj.getAttribute === 'function' && obj.getAttribute('style'));\n    this.css = useCSS ? getComputedStyle(obj) : getStyle(obj);\n    this.allowedChildren = [];\n    this.attr = function (key) {\n      if (typeof obj.getAttribute === 'function') {\n        return obj.getAttribute(key);\n      }\n    };\n    this.resolveUrl = function (value) {\n      var temp = (value || '').match(/^\\s*(?:url\\(\"(.*)#(.*)\"\\)|url\\('(.*)#(.*)'\\)|url\\((.*)#(.*)\\)|(.*)#(.*))\\s*$/) || [];\n      var file = temp[1] || temp[3] || temp[5] || temp[7],\n        id = temp[2] || temp[4] || temp[6] || temp[8];\n      if (id) {\n        if (!file) {\n          var svgObj = svg.getElementById(id);\n          if (svgObj) {\n            if (this.stack.indexOf(svgObj) === -1) {\n              return svgObj;\n            } else {\n              warningCallback('SVGtoPDF: loop of circular references for id \"' + id + '\"');\n              return;\n            }\n          }\n        }\n        if (documentCallback) {\n          var svgs = documentCache[file];\n          if (!svgs) {\n            svgs = documentCallback(file);\n            if (!isArrayLike(svgs)) {\n              svgs = [svgs];\n            }\n            for (var i = 0; i < svgs.length; i++) {\n              if (typeof svgs[i] === 'string') {\n                svgs[i] = parseXml(svgs[i]);\n              }\n            }\n            documentCache[file] = svgs;\n          }\n          for (var _i7 = 0; _i7 < svgs.length; _i7++) {\n            var _svgObj = svgs[_i7].getElementById(id);\n            if (_svgObj) {\n              if (this.stack.indexOf(_svgObj) === -1) {\n                return _svgObj;\n              } else {\n                warningCallback('SVGtoPDF: loop of circular references for id \"' + file + '#' + id + '\"');\n                return;\n              }\n            }\n          }\n        }\n      }\n    };\n    this.computeUnits = function (value, unit, percent, isFontSize) {\n      if (unit === '%') {\n        return parseFloat(value) / 100 * (isFontSize || percent != null ? percent : this.getViewport());\n      } else if (unit === 'ex' || unit === 'em') {\n        return value * {\n          'em': 1,\n          'ex': 0.5\n        }[unit] * (isFontSize ? percent : this.get('font-size'));\n      } else {\n        return value * {\n          '': 1,\n          'px': 1,\n          'pt': 96 / 72,\n          'cm': 96 / 2.54,\n          'mm': 96 / 25.4,\n          'in': 96,\n          'pc': 96 / 6\n        }[unit];\n      }\n    };\n    this.computeLength = function (value, percent, initial, isFontSize) {\n      var parser = new StringParser((value || '').trim()),\n        temp1,\n        temp2;\n      if (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string' && !parser.matchAll()) {\n        return this.computeUnits(temp1, temp2, percent, isFontSize);\n      }\n      return initial;\n    };\n    this.computeLengthList = function (value, percent, strict) {\n      var parser = new StringParser((value || '').trim()),\n        result = [],\n        temp1,\n        temp2;\n      while (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string') {\n        result.push(this.computeUnits(temp1, temp2, percent));\n        parser.matchSeparator();\n      }\n      if (strict && parser.matchAll()) {\n        return;\n      }\n      return result;\n    };\n    this.getLength = function (key, percent, initial) {\n      return this.computeLength(this.attr(key), percent, initial);\n    };\n    this.getLengthList = function (key, percent) {\n      return this.computeLengthList(this.attr(key), percent);\n    };\n    this.getUrl = function (key) {\n      return this.resolveUrl(this.attr(key));\n    };\n    this.getNumberList = function (key) {\n      var parser = new StringParser((this.attr(key) || '').trim()),\n        result = [],\n        temp;\n      while (temp = parser.matchNumber()) {\n        result.push(Number(temp));\n        parser.matchSeparator();\n      }\n      result.error = parser.matchAll();\n      return result;\n    };\n    this.getViewbox = function (key, initial) {\n      var viewBox = this.getNumberList(key);\n      if (viewBox.length === 4 && viewBox[2] >= 0 && viewBox[3] >= 0) {\n        return viewBox;\n      }\n      return initial;\n    };\n    this.getPercent = function (key, initial) {\n      var value = this.attr(key);\n      var parser = new StringParser((value || '').trim()),\n        temp1,\n        temp2;\n      var number = parser.matchNumber();\n      if (!number) {\n        return initial;\n      }\n      if (parser.match('%')) {\n        number *= 0.01;\n      }\n      if (parser.matchAll()) {\n        return initial;\n      }\n      return Math.max(0, Math.min(1, number));\n    };\n    this.chooseValue = function (args) {\n      for (var i = 0; i < arguments.length; i++) {\n        if (arguments[i] != null && arguments[i] === arguments[i]) {\n          return arguments[i];\n        }\n      }\n      return arguments[arguments.length - 1];\n    };\n    this.get = function (key) {\n      if (styleCache[key] !== undefined) {\n        return styleCache[key];\n      }\n      var keyInfo = Properties[key] || {},\n        value,\n        result;\n      for (var i = 0; i < 3; i++) {\n        switch (i) {\n          case 0:\n            if (key !== 'transform') {\n              // the CSS transform behaves strangely\n              value = this.css[keyInfo.css || key];\n            }\n            break;\n          case 1:\n            value = this.style[key];\n            break;\n          case 2:\n            value = this.attr(key);\n            break;\n        }\n        if (value === 'inherit') {\n          result = this.inherits ? this.inherits.get(key) : keyInfo.initial;\n          if (result != null) {\n            return styleCache[key] = result;\n          }\n        }\n        if (keyInfo.values != null) {\n          result = keyInfo.values[value];\n          if (result != null) {\n            return styleCache[key] = result;\n          }\n        }\n        if (value != null) {\n          var parsed = void 0;\n          switch (key) {\n            case 'font-size':\n              result = this.computeLength(value, this.inherits ? this.inherits.get(key) : keyInfo.initial, undefined, true);\n              break;\n            case 'baseline-shift':\n              result = this.computeLength(value, this.get('font-size'));\n              break;\n            case 'font-family':\n              result = value || undefined;\n              break;\n            case 'opacity':\n            case 'stroke-opacity':\n            case 'fill-opacity':\n            case 'stop-opacity':\n              parsed = parseFloat(value);\n              if (!isNaN(parsed)) {\n                result = Math.max(0, Math.min(1, parsed));\n              }\n              break;\n            case 'transform':\n              result = parseTranform(value);\n              break;\n            case 'stroke-dasharray':\n              if (value === 'none') {\n                result = [];\n              } else if (parsed = this.computeLengthList(value, this.getViewport(), true)) {\n                var sum = 0,\n                  error = false;\n                for (var j = 0; j < parsed.length; j++) {\n                  if (parsed[j] < 0) {\n                    error = true;\n                  }\n                  sum += parsed[j];\n                }\n                if (!error) {\n                  if (parsed.length % 2 === 1) {\n                    parsed = parsed.concat(parsed);\n                  }\n                  result = sum === 0 ? [] : parsed;\n                }\n              }\n              break;\n            case 'color':\n              if (value === 'none' || value === 'transparent') {\n                result = 'none';\n              } else {\n                result = parseColor(value);\n              }\n              break;\n            case 'fill':\n            case 'stroke':\n              if (value === 'none' || value === 'transparent') {\n                result = 'none';\n              } else if (value === 'currentColor') {\n                result = this.get('color');\n              } else if (parsed = parseColor(value)) {\n                return parsed;\n              } else if (parsed = (value || '').split(' ')) {\n                var object = this.resolveUrl(parsed[0]),\n                  fallbackColor = parseColor(parsed[1]);\n                if (object == null) {\n                  result = fallbackColor;\n                } else if (object.nodeName === 'linearGradient' || object.nodeName === 'radialGradient') {\n                  result = new SvgElemGradient(object, null, fallbackColor);\n                } else if (object.nodeName === 'pattern') {\n                  result = new SvgElemPattern(object, null, fallbackColor);\n                } else {\n                  result = fallbackColor;\n                }\n              }\n              break;\n            case 'stop-color':\n              if (value === 'none' || value === 'transparent') {\n                result = 'none';\n              } else if (value === 'currentColor') {\n                result = this.get('color');\n              } else {\n                result = parseColor(value);\n              }\n              break;\n            case 'marker-start':\n            case 'marker-mid':\n            case 'marker-end':\n            case 'clip-path':\n            case 'mask':\n              if (value === 'none') {\n                result = 'none';\n              } else {\n                result = this.resolveUrl(value);\n              }\n              break;\n            case 'stroke-width':\n              parsed = this.computeLength(value, this.getViewport());\n              if (parsed != null && parsed >= 0) {\n                result = parsed;\n              }\n              break;\n            case 'stroke-miterlimit':\n              parsed = parseFloat(value);\n              if (parsed != null && parsed >= 1) {\n                result = parsed;\n              }\n              break;\n            case 'word-spacing':\n            case 'letter-spacing':\n              result = this.computeLength(value, this.getViewport());\n              break;\n            case 'stroke-dashoffset':\n              result = this.computeLength(value, this.getViewport());\n              if (result != null) {\n                if (result < 0) {\n                  // fix for crbug.com/660850\n                  var dasharray = this.get('stroke-dasharray');\n                  for (var _j = 0; _j < dasharray.length; _j++) {\n                    result += dasharray[_j];\n                  }\n                }\n              }\n              break;\n          }\n          if (result != null) {\n            return styleCache[key] = result;\n          }\n        }\n      }\n      return styleCache[key] = keyInfo.inherit && this.inherits ? this.inherits.get(key) : keyInfo.initial;\n    };\n    this.getChildren = function () {\n      if (childrenCache != null) {\n        return childrenCache;\n      }\n      var children = [];\n      for (var i = 0; i < obj.childNodes.length; i++) {\n        var child = obj.childNodes[i];\n        if (!child.error && this.allowedChildren.indexOf(child.nodeName) !== -1) {\n          children.push(createSVGElement(child, this));\n        }\n      }\n      return childrenCache = children;\n    };\n    this.getParentVWidth = function () {\n      return this.inherits ? this.inherits.getVWidth() : viewportWidth;\n    };\n    this.getParentVHeight = function () {\n      return this.inherits ? this.inherits.getVHeight() : viewportHeight;\n    };\n    this.getParentViewport = function () {\n      return Math.sqrt(0.5 * this.getParentVWidth() * this.getParentVWidth() + 0.5 * this.getParentVHeight() * this.getParentVHeight());\n    };\n    this.getVWidth = function () {\n      return this.getParentVWidth();\n    };\n    this.getVHeight = function () {\n      return this.getParentVHeight();\n    };\n    this.getViewport = function () {\n      return Math.sqrt(0.5 * this.getVWidth() * this.getVWidth() + 0.5 * this.getVHeight() * this.getVHeight());\n    };\n    this.getBoundingBox = function () {\n      var shape = this.getBoundingShape();\n      return shape.getBoundingBox();\n    };\n  };\n  var SvgElemStylable = function SvgElemStylable(obj, inherits) {\n    SvgElem.call(this, obj, inherits);\n    this.transform = function () {\n      doc.transform.apply(doc, this.getTransformation());\n    };\n    this.clip = function () {\n      if (this.get('clip-path') !== 'none') {\n        var clipPath = new SvgElemClipPath(this.get('clip-path'), null);\n        clipPath.useMask(this.getBoundingBox());\n        return true;\n      }\n    };\n    this.mask = function () {\n      if (this.get('mask') !== 'none') {\n        var mask = new SvgElemMask(this.get('mask'), null);\n        mask.useMask(this.getBoundingBox());\n        return true;\n      }\n    };\n    this.getFill = function (isClip, isMask) {\n      var opacity = this.get('opacity'),\n        fill = this.get('fill'),\n        fillOpacity = this.get('fill-opacity');\n      if (isClip) {\n        return DefaultColors.white;\n      }\n      if (fill !== 'none' && opacity && fillOpacity) {\n        if (fill instanceof SvgElemGradient || fill instanceof SvgElemPattern) {\n          return fill.getPaint(this.getBoundingBox(), fillOpacity * opacity, isClip, isMask);\n        }\n        return opacityToColor(fill, fillOpacity * opacity, isMask);\n      }\n    };\n    this.getStroke = function (isClip, isMask) {\n      var opacity = this.get('opacity'),\n        stroke = this.get('stroke'),\n        strokeOpacity = this.get('stroke-opacity');\n      if (isClip || isEqual(this.get('stroke-width'), 0)) {\n        return;\n      }\n      if (stroke !== 'none' && opacity && strokeOpacity) {\n        if (stroke instanceof SvgElemGradient || stroke instanceof SvgElemPattern) {\n          return stroke.getPaint(this.getBoundingBox(), strokeOpacity * opacity, isClip, isMask);\n        }\n        return opacityToColor(stroke, strokeOpacity * opacity, isMask);\n      }\n    };\n  };\n  var SvgElemHasChildren = function SvgElemHasChildren(obj, inherits) {\n    SvgElemStylable.call(this, obj, inherits);\n    this.allowedChildren = ['use', 'g', 'a', 'svg', 'image', 'rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon', 'path', 'text'];\n    this.getBoundingShape = function () {\n      var shape = new SvgShape(),\n        children = this.getChildren();\n      for (var i = 0; i < children.length; i++) {\n        if (children[i].get('display') !== 'none') {\n          if (typeof children[i].getBoundingShape === 'function') {\n            var childShape = children[i].getBoundingShape().clone();\n            if (typeof children[i].getTransformation === 'function') {\n              childShape.transform(children[i].getTransformation());\n            }\n            shape.mergeShape(childShape);\n          }\n        }\n      }\n      return shape;\n    };\n    this.drawChildren = function (isClip, isMask) {\n      var children = this.getChildren();\n      for (var i = 0; i < children.length; i++) {\n        if (children[i].get('display') !== 'none') {\n          if (typeof children[i].drawInDocument === 'function') {\n            children[i].drawInDocument(isClip, isMask);\n          }\n        }\n      }\n    };\n  };\n  var SvgElemContainer = function SvgElemContainer(obj, inherits) {\n    SvgElemHasChildren.call(this, obj, inherits);\n    this.drawContent = function (isClip, isMask) {\n      this.transform();\n      var clipped = this.clip(),\n        masked = this.mask(),\n        group;\n      if ((this.get('opacity') < 1 || clipped || masked) && !isClip) {\n        group = docBeginGroup(getPageBBox());\n      }\n      this.drawChildren(isClip, isMask);\n      if (group) {\n        docEndGroup(group);\n        doc.fillOpacity(this.get('opacity'));\n        docInsertGroup(group);\n      }\n    };\n  };\n  var SvgElemUse = function SvgElemUse(obj, inherits) {\n    SvgElemContainer.call(this, obj, inherits);\n    var x = this.getLength('x', this.getVWidth(), 0),\n      y = this.getLength('y', this.getVHeight(), 0),\n      child = this.getUrl('href') || this.getUrl('xlink:href');\n    if (child) {\n      child = createSVGElement(child, this);\n    }\n    this.getChildren = function () {\n      return child ? [child] : [];\n    };\n    this.drawInDocument = function (isClip, isMask) {\n      doc.save();\n      this.drawContent(isClip, isMask);\n      doc.restore();\n    };\n    this.getTransformation = function () {\n      return multiplyMatrix(this.get('transform'), [1, 0, 0, 1, x, y]);\n    };\n  };\n  var SvgElemSymbol = function SvgElemSymbol(obj, inherits) {\n    SvgElemContainer.call(this, obj, inherits);\n    var width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\n      height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight());\n    if (inherits instanceof SvgElemUse) {\n      width = inherits.getLength('width', inherits.getParentVWidth(), width);\n      height = inherits.getLength('height', inherits.getParentVHeight(), height);\n    }\n    var aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\n      viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\n    this.getVWidth = function () {\n      return viewBox[2];\n    };\n    this.getVHeight = function () {\n      return viewBox[3];\n    };\n    this.drawInDocument = function (isClip, isMask) {\n      doc.save();\n      this.drawContent(isClip, isMask);\n      doc.restore();\n    };\n    this.getTransformation = function () {\n      return multiplyMatrix(parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]), [1, 0, 0, 1, -viewBox[0], -viewBox[1]]);\n    };\n  };\n  var SvgElemGroup = function SvgElemGroup(obj, inherits) {\n    SvgElemContainer.call(this, obj, inherits);\n    this.drawInDocument = function (isClip, isMask) {\n      doc.save();\n      if (this.link && !isClip && !isMask) {\n        this.addLink();\n      }\n      this.drawContent(isClip, isMask);\n      doc.restore();\n    };\n    this.getTransformation = function () {\n      return this.get('transform');\n    };\n  };\n  var SvgElemLink = function SvgElemLink(obj, inherits) {\n    if (inherits && inherits.isText) {\n      SvgElemTspan.call(this, obj, inherits);\n      this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\n    } else {\n      SvgElemGroup.call(this, obj, inherits);\n    }\n    this.link = this.attr('href') || this.attr('xlink:href');\n    this.addLink = function () {\n      if (this.link.match(/^(?:[a-z][a-z0-9+.-]*:|\\/\\/)?/i) && this.getChildren().length) {\n        var bbox = this.getBoundingShape().transform(getGlobalMatrix()).getBoundingBox();\n        docInsertLink(bbox[0], bbox[1], bbox[2], bbox[3], this.link);\n      }\n    };\n  };\n  var SvgElemSvg = function SvgElemSvg(obj, inherits) {\n    SvgElemContainer.call(this, obj, inherits);\n    var width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\n      height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight()),\n      x = this.getLength('x', this.getParentVWidth(), 0),\n      y = this.getLength('y', this.getParentVHeight(), 0);\n    if (inherits instanceof SvgElemUse) {\n      width = inherits.getLength('width', inherits.getParentVWidth(), width);\n      height = inherits.getLength('height', inherits.getParentVHeight(), height);\n    }\n    var aspectRatio = this.attr('preserveAspectRatio'),\n      viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\n    if (this.isOuterElement && preserveAspectRatio) {\n      x = y = 0;\n      width = viewportWidth;\n      height = viewportHeight;\n      aspectRatio = preserveAspectRatio;\n    }\n    this.getVWidth = function () {\n      return viewBox[2];\n    };\n    this.getVHeight = function () {\n      return viewBox[3];\n    };\n    this.drawInDocument = function (isClip, isMask) {\n      doc.save();\n      if (this.get('overflow') === 'hidden') {\n        new SvgShape().M(x, y).L(x + width, y).L(x + width, y + height).L(x, y + height).Z().transform(this.get('transform')).insertInDocument();\n        doc.clip();\n      }\n      this.drawContent(isClip, isMask);\n      doc.restore();\n    };\n    this.getTransformation = function () {\n      return multiplyMatrix(this.get('transform'), [1, 0, 0, 1, x, y], parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]), [1, 0, 0, 1, -viewBox[0], -viewBox[1]]);\n    };\n  };\n  var SVGElemImage = function SVGElemImage(obj, inherits) {\n    SvgElemStylable.call(this, obj, inherits);\n    var link = imageCallback(this.attr('href') || this.attr('xlink:href') || ''),\n      x = this.getLength('x', this.getVWidth(), 0),\n      y = this.getLength('y', this.getVHeight(), 0),\n      width = this.getLength('width', this.getVWidth(), 'auto'),\n      height = this.getLength('height', this.getVHeight(), 'auto'),\n      image;\n    try {\n      image = doc.openImage(link);\n    } catch (e) {\n      warningCallback('SVGElemImage: failed to open image \"' + link + '\" in PDFKit');\n    }\n    if (image) {\n      if (width === 'auto' && height !== 'auto') {\n        width = height * image.width / image.height;\n      } else if (height === 'auto' && width !== 'auto') {\n        height = width * image.height / image.width;\n      } else if (width === 'auto' && height === 'auto') {\n        width = image.width;\n        height = image.height;\n      }\n    }\n    if (width === 'auto' || width < 0) {\n      width = 0;\n    }\n    if (height === 'auto' || height < 0) {\n      height = 0;\n    }\n    this.getTransformation = function () {\n      return this.get('transform');\n    };\n    this.getBoundingShape = function () {\n      return new SvgShape().M(x, y).L(x + width, y).M(x + width, y + height).L(x, y + height);\n    };\n    this.drawInDocument = function (isClip, isMask) {\n      if (this.get('visibility') === 'hidden' || !image) {\n        return;\n      }\n      doc.save();\n      this.transform();\n      if (this.get('overflow') === 'hidden') {\n        doc.rect(x, y, width, height).clip();\n      }\n      this.clip();\n      this.mask();\n      doc.translate(x, y);\n      doc.transform.apply(doc, parseAspectRatio(this.attr('preserveAspectRatio'), width, height, image ? image.width : width, image ? image.height : height));\n      if (!isClip) {\n        doc.fillOpacity(this.get('opacity'));\n        doc.image(image, 0, 0);\n      } else {\n        doc.rect(0, 0, image.width, image.height);\n        docFillColor(DefaultColors.white).fill();\n      }\n      doc.restore();\n    };\n  };\n  var SvgElemPattern = function SvgElemPattern(obj, inherits, fallback) {\n    SvgElemHasChildren.call(this, obj, inherits);\n    this.ref = function () {\n      var ref = this.getUrl('href') || this.getUrl('xlink:href');\n      if (ref && ref.nodeName === obj.nodeName) {\n        return new SvgElemPattern(ref, inherits, fallback);\n      }\n    }.call(this);\n    var _attr = this.attr;\n    this.attr = function (key) {\n      var attr = _attr.call(this, key);\n      if (attr != null || key === 'href' || key === 'xlink:href') {\n        return attr;\n      }\n      return this.ref ? this.ref.attr(key) : null;\n    };\n    var _getChildren = this.getChildren;\n    this.getChildren = function () {\n      var children = _getChildren.call(this);\n      if (children.length > 0) {\n        return children;\n      }\n      return this.ref ? this.ref.getChildren() : [];\n    };\n    this.getPaint = function (bBox, gOpacity, isClip, isMask) {\n      var bBoxUnitsPattern = this.attr('patternUnits') !== 'userSpaceOnUse',\n        bBoxUnitsContent = this.attr('patternContentUnits') === 'objectBoundingBox',\n        x = this.getLength('x', bBoxUnitsPattern ? 1 : this.getParentVWidth(), 0),\n        y = this.getLength('y', bBoxUnitsPattern ? 1 : this.getParentVHeight(), 0),\n        width = this.getLength('width', bBoxUnitsPattern ? 1 : this.getParentVWidth(), 0),\n        height = this.getLength('height', bBoxUnitsPattern ? 1 : this.getParentVHeight(), 0);\n      if (bBoxUnitsContent && !bBoxUnitsPattern) {\n        // Use the same units for pattern & pattern content\n        x = (x - bBox[0]) / (bBox[2] - bBox[0]) || 0;\n        y = (y - bBox[1]) / (bBox[3] - bBox[1]) || 0;\n        width = width / (bBox[2] - bBox[0]) || 0;\n        height = height / (bBox[3] - bBox[1]) || 0;\n      } else if (!bBoxUnitsContent && bBoxUnitsPattern) {\n        x = bBox[0] + x * (bBox[2] - bBox[0]);\n        y = bBox[1] + y * (bBox[3] - bBox[1]);\n        width = width * (bBox[2] - bBox[0]);\n        height = height * (bBox[3] - bBox[1]);\n      }\n      var viewBox = this.getViewbox('viewBox', [0, 0, width, height]),\n        aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\n        aspectRatioMatrix = multiplyMatrix(parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3], 0), [1, 0, 0, 1, -viewBox[0], -viewBox[1]]),\n        matrix = parseTranform(this.attr('patternTransform'));\n      if (bBoxUnitsContent) {\n        matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\n      }\n      matrix = multiplyMatrix(matrix, [1, 0, 0, 1, x, y]);\n      if ((matrix = validateMatrix(matrix)) && (aspectRatioMatrix = validateMatrix(aspectRatioMatrix)) && (width = validateNumber(width)) && (height = validateNumber(height))) {\n        var group = docBeginGroup([0, 0, width, height]);\n        doc.transform.apply(doc, aspectRatioMatrix);\n        this.drawChildren(isClip, isMask);\n        docEndGroup(group);\n        return [docCreatePattern(group, width, height, matrix), gOpacity];\n      } else {\n        return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\n      }\n    };\n    this.getVWidth = function () {\n      var bBoxUnitsPattern = this.attr('patternUnits') !== 'userSpaceOnUse',\n        width = this.getLength('width', bBoxUnitsPattern ? 1 : this.getParentVWidth(), 0);\n      return this.getViewbox('viewBox', [0, 0, width, 0])[2];\n    };\n    this.getVHeight = function () {\n      var bBoxUnitsPattern = this.attr('patternUnits') !== 'userSpaceOnUse',\n        height = this.getLength('height', bBoxUnitsPattern ? 1 : this.getParentVHeight(), 0);\n      return this.getViewbox('viewBox', [0, 0, 0, height])[3];\n    };\n  };\n  var SvgElemGradient = function SvgElemGradient(obj, inherits, fallback) {\n    SvgElem.call(this, obj, inherits);\n    this.allowedChildren = ['stop'];\n    this.ref = function () {\n      var ref = this.getUrl('href') || this.getUrl('xlink:href');\n      if (ref && ref.nodeName === obj.nodeName) {\n        return new SvgElemGradient(ref, inherits, fallback);\n      }\n    }.call(this);\n    var _attr = this.attr;\n    this.attr = function (key) {\n      var attr = _attr.call(this, key);\n      if (attr != null || key === 'href' || key === 'xlink:href') {\n        return attr;\n      }\n      return this.ref ? this.ref.attr(key) : null;\n    };\n    var _getChildren = this.getChildren;\n    this.getChildren = function () {\n      var children = _getChildren.call(this);\n      if (children.length > 0) {\n        return children;\n      }\n      return this.ref ? this.ref.getChildren() : [];\n    };\n    this.getPaint = function (bBox, gOpacity, isClip, isMask) {\n      var children = this.getChildren();\n      if (children.length === 0) {\n        return;\n      }\n      if (children.length === 1) {\n        var child = children[0],\n          stopColor = child.get('stop-color');\n        if (stopColor === 'none') {\n          return;\n        }\n        return opacityToColor(stopColor, child.get('stop-opacity') * gOpacity, isMask);\n      }\n      var bBoxUnits = this.attr('gradientUnits') !== 'userSpaceOnUse',\n        matrix = parseTranform(this.attr('gradientTransform')),\n        spread = this.attr('spreadMethod'),\n        grad,\n        x1,\n        x2,\n        y1,\n        y2,\n        r2,\n        nAfter = 0,\n        nBefore = 0,\n        nTotal = 1;\n      if (bBoxUnits) {\n        matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\n      }\n      if (matrix = validateMatrix(matrix)) {\n        if (this.name === 'linearGradient') {\n          x1 = this.getLength('x1', bBoxUnits ? 1 : this.getVWidth(), 0);\n          x2 = this.getLength('x2', bBoxUnits ? 1 : this.getVWidth(), bBoxUnits ? 1 : this.getVWidth());\n          y1 = this.getLength('y1', bBoxUnits ? 1 : this.getVHeight(), 0);\n          y2 = this.getLength('y2', bBoxUnits ? 1 : this.getVHeight(), 0);\n        } else {\n          x2 = this.getLength('cx', bBoxUnits ? 1 : this.getVWidth(), bBoxUnits ? 0.5 : 0.5 * this.getVWidth());\n          y2 = this.getLength('cy', bBoxUnits ? 1 : this.getVHeight(), bBoxUnits ? 0.5 : 0.5 * this.getVHeight());\n          r2 = this.getLength('r', bBoxUnits ? 1 : this.getViewport(), bBoxUnits ? 0.5 : 0.5 * this.getViewport());\n          x1 = this.getLength('fx', bBoxUnits ? 1 : this.getVWidth(), x2);\n          y1 = this.getLength('fy', bBoxUnits ? 1 : this.getVHeight(), y2);\n          if (r2 < 0) {\n            warningCallback('SvgElemGradient: negative r value');\n          }\n          var d = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)),\n            multiplier = 1;\n          if (d > r2) {\n            // according to specification\n            multiplier = r2 / d;\n            x1 = x2 + (x1 - x2) * multiplier;\n            y1 = y2 + (y1 - y2) * multiplier;\n          }\n          r2 = Math.max(r2, d * multiplier * (1 + 1e-6)); // fix for edge-case gradients see issue #84\n        }\n\n        if (spread === 'reflect' || spread === 'repeat') {\n          var inv = inverseMatrix(matrix),\n            corner1 = transformPoint([bBox[0], bBox[1]], inv),\n            corner2 = transformPoint([bBox[2], bBox[1]], inv),\n            corner3 = transformPoint([bBox[2], bBox[3]], inv),\n            corner4 = transformPoint([bBox[0], bBox[3]], inv);\n          if (this.name === 'linearGradient') {\n            // See file 'gradient-repeat-maths.png'\n            nAfter = Math.max((corner1[0] - x2) * (x2 - x1) + (corner1[1] - y2) * (y2 - y1), (corner2[0] - x2) * (x2 - x1) + (corner2[1] - y2) * (y2 - y1), (corner3[0] - x2) * (x2 - x1) + (corner3[1] - y2) * (y2 - y1), (corner4[0] - x2) * (x2 - x1) + (corner4[1] - y2) * (y2 - y1)) / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n            nBefore = Math.max((corner1[0] - x1) * (x1 - x2) + (corner1[1] - y1) * (y1 - y2), (corner2[0] - x1) * (x1 - x2) + (corner2[1] - y1) * (y1 - y2), (corner3[0] - x1) * (x1 - x2) + (corner3[1] - y1) * (y1 - y2), (corner4[0] - x1) * (x1 - x2) + (corner4[1] - y1) * (y1 - y2)) / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n          } else {\n            nAfter = Math.sqrt(Math.max(Math.pow(corner1[0] - x2, 2) + Math.pow(corner1[1] - y2, 2), Math.pow(corner2[0] - x2, 2) + Math.pow(corner2[1] - y2, 2), Math.pow(corner3[0] - x2, 2) + Math.pow(corner3[1] - y2, 2), Math.pow(corner4[0] - x2, 2) + Math.pow(corner4[1] - y2, 2))) / r2 - 1;\n          }\n          nAfter = Math.ceil(nAfter + 0.5); // Add a little more because the stroke can extend outside of the bounding box\n          nBefore = Math.ceil(nBefore + 0.5);\n          nTotal = nBefore + 1 + nAfter; // How many times the gradient needs to be repeated to fill the object bounding box\n        }\n\n        if (this.name === 'linearGradient') {\n          grad = doc.linearGradient(x1 - nBefore * (x2 - x1), y1 - nBefore * (y2 - y1), x2 + nAfter * (x2 - x1), y2 + nAfter * (y2 - y1));\n        } else {\n          grad = doc.radialGradient(x1, y1, 0, x2, y2, r2 + nAfter * r2);\n        }\n        for (var n = 0; n < nTotal; n++) {\n          var offset = 0,\n            inOrder = spread !== 'reflect' || (n - nBefore) % 2 === 0;\n          for (var i = 0; i < children.length; i++) {\n            var _child = children[inOrder ? i : children.length - 1 - i],\n              _stopColor = _child.get('stop-color');\n            if (_stopColor === 'none') {\n              _stopColor = DefaultColors.transparent;\n            }\n            _stopColor = opacityToColor(_stopColor, _child.get('stop-opacity') * gOpacity, isMask);\n            offset = Math.max(offset, inOrder ? _child.getPercent('offset', 0) : 1 - _child.getPercent('offset', 0));\n            if (i === 0 && _stopColor[0].length === 4) {\n              grad._colorSpace = 'DeviceCMYK';\n            } // Fix until PR #763 is merged into PDFKit\n            if (i === 0 && offset > 0) {\n              grad.stop((n + 0) / nTotal, _stopColor[0], _stopColor[1]);\n            }\n            grad.stop((n + offset) / (nAfter + nBefore + 1), _stopColor[0], _stopColor[1]);\n            if (i === children.length - 1 && offset < 1) {\n              grad.stop((n + 1) / nTotal, _stopColor[0], _stopColor[1]);\n            }\n          }\n        }\n        grad.setTransform.apply(grad, matrix);\n        return [grad, 1];\n      } else {\n        return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\n      }\n    };\n  };\n  var SvgElemBasicShape = function SvgElemBasicShape(obj, inherits) {\n    SvgElemStylable.call(this, obj, inherits);\n    this.dashScale = 1;\n    this.getBoundingShape = function () {\n      return this.shape;\n    };\n    this.getTransformation = function () {\n      return this.get('transform');\n    };\n    this.drawInDocument = function (isClip, isMask) {\n      if (this.get('visibility') === 'hidden' || !this.shape) {\n        return;\n      }\n      doc.save();\n      this.transform();\n      this.clip();\n      if (!isClip) {\n        var masked = this.mask(),\n          group;\n        if (masked) {\n          group = docBeginGroup(getPageBBox());\n        }\n        var subPaths = this.shape.getSubPaths(),\n          fill = this.getFill(isClip, isMask),\n          stroke = this.getStroke(isClip, isMask),\n          lineWidth = this.get('stroke-width'),\n          lineCap = this.get('stroke-linecap');\n        if (fill || stroke) {\n          if (fill) {\n            docFillColor(fill);\n          }\n          if (stroke) {\n            for (var j = 0; j < subPaths.length; j++) {\n              if (isEqual(subPaths[j].totalLength, 0)) {\n                if ((lineCap === 'square' || lineCap === 'round') && lineWidth > 0) {\n                  if (subPaths[j].startPoint && subPaths[j].startPoint.length > 1) {\n                    var _x4 = subPaths[j].startPoint[0],\n                      _y4 = subPaths[j].startPoint[1];\n                    docFillColor(stroke);\n                    if (lineCap === 'square') {\n                      doc.rect(_x4 - 0.5 * lineWidth, _y4 - 0.5 * lineWidth, lineWidth, lineWidth);\n                    } else if (lineCap === 'round') {\n                      doc.circle(_x4, _y4, 0.5 * lineWidth);\n                    }\n                    doc.fill();\n                  }\n                }\n              }\n            }\n            var dashArray = this.get('stroke-dasharray'),\n              dashOffset = this.get('stroke-dashoffset');\n            if (isNotEqual(this.dashScale, 1)) {\n              for (var _j2 = 0; _j2 < dashArray.length; _j2++) {\n                dashArray[_j2] *= this.dashScale;\n              }\n              dashOffset *= this.dashScale;\n            }\n            docStrokeColor(stroke);\n            doc.lineWidth(lineWidth).miterLimit(this.get('stroke-miterlimit')).lineJoin(this.get('stroke-linejoin')).lineCap(lineCap).dash(dashArray, {\n              phase: dashOffset\n            });\n          }\n          for (var _j3 = 0; _j3 < subPaths.length; _j3++) {\n            if (subPaths[_j3].totalLength > 0) {\n              subPaths[_j3].insertInDocument();\n            }\n          }\n          if (fill && stroke) {\n            doc.fillAndStroke(this.get('fill-rule'));\n          } else if (fill) {\n            doc.fill(this.get('fill-rule'));\n          } else if (stroke) {\n            doc.stroke();\n          }\n        }\n        var markerStart = this.get('marker-start'),\n          markerMid = this.get('marker-mid'),\n          markerEnd = this.get('marker-end');\n        if (markerStart !== 'none' || markerMid !== 'none' || markerEnd !== 'none') {\n          var markersPos = this.shape.getMarkers();\n          if (markerStart !== 'none') {\n            var marker = new SvgElemMarker(markerStart, null);\n            marker.drawMarker(false, isMask, markersPos[0], lineWidth);\n          }\n          if (markerMid !== 'none') {\n            for (var i = 1; i < markersPos.length - 1; i++) {\n              var _marker = new SvgElemMarker(markerMid, null);\n              _marker.drawMarker(false, isMask, markersPos[i], lineWidth);\n            }\n          }\n          if (markerEnd !== 'none') {\n            var _marker2 = new SvgElemMarker(markerEnd, null);\n            _marker2.drawMarker(false, isMask, markersPos[markersPos.length - 1], lineWidth);\n          }\n        }\n        if (group) {\n          docEndGroup(group);\n          docInsertGroup(group);\n        }\n      } else {\n        this.shape.insertInDocument();\n        docFillColor(DefaultColors.white);\n        doc.fill(this.get('clip-rule'));\n      }\n      doc.restore();\n    };\n  };\n  var SvgElemRect = function SvgElemRect(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    var x = this.getLength('x', this.getVWidth(), 0),\n      y = this.getLength('y', this.getVHeight(), 0),\n      w = this.getLength('width', this.getVWidth(), 0),\n      h = this.getLength('height', this.getVHeight(), 0),\n      rx = this.getLength('rx', this.getVWidth()),\n      ry = this.getLength('ry', this.getVHeight());\n    if (rx === undefined && ry === undefined) {\n      rx = ry = 0;\n    } else if (rx === undefined && ry !== undefined) {\n      rx = ry;\n    } else if (rx !== undefined && ry === undefined) {\n      ry = rx;\n    }\n    if (w > 0 && h > 0) {\n      if (rx && ry) {\n        rx = Math.min(rx, 0.5 * w);\n        ry = Math.min(ry, 0.5 * h);\n        this.shape = new SvgShape().M(x + rx, y).L(x + w - rx, y).A(rx, ry, 0, 0, 1, x + w, y + ry).L(x + w, y + h - ry).A(rx, ry, 0, 0, 1, x + w - rx, y + h).L(x + rx, y + h).A(rx, ry, 0, 0, 1, x, y + h - ry).L(x, y + ry).A(rx, ry, 0, 0, 1, x + rx, y).Z();\n      } else {\n        this.shape = new SvgShape().M(x, y).L(x + w, y).L(x + w, y + h).L(x, y + h).Z();\n      }\n    } else {\n      this.shape = new SvgShape();\n    }\n  };\n  var SvgElemCircle = function SvgElemCircle(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    var cx = this.getLength('cx', this.getVWidth(), 0),\n      cy = this.getLength('cy', this.getVHeight(), 0),\n      r = this.getLength('r', this.getViewport(), 0);\n    if (r > 0) {\n      this.shape = new SvgShape().M(cx + r, cy).A(r, r, 0, 0, 1, cx - r, cy).A(r, r, 0, 0, 1, cx + r, cy).Z();\n    } else {\n      this.shape = new SvgShape();\n    }\n  };\n  var SvgElemEllipse = function SvgElemEllipse(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    var cx = this.getLength('cx', this.getVWidth(), 0),\n      cy = this.getLength('cy', this.getVHeight(), 0),\n      rx = this.getLength('rx', this.getVWidth(), 0),\n      ry = this.getLength('ry', this.getVHeight(), 0);\n    if (rx > 0 && ry > 0) {\n      this.shape = new SvgShape().M(cx + rx, cy).A(rx, ry, 0, 0, 1, cx - rx, cy).A(rx, ry, 0, 0, 1, cx + rx, cy).Z();\n    } else {\n      this.shape = new SvgShape();\n    }\n  };\n  var SvgElemLine = function SvgElemLine(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    var x1 = this.getLength('x1', this.getVWidth(), 0),\n      y1 = this.getLength('y1', this.getVHeight(), 0),\n      x2 = this.getLength('x2', this.getVWidth(), 0),\n      y2 = this.getLength('y2', this.getVHeight(), 0);\n    this.shape = new SvgShape().M(x1, y1).L(x2, y2);\n  };\n  var SvgElemPolyline = function SvgElemPolyline(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    var points = this.getNumberList('points');\n    this.shape = new SvgShape();\n    for (var i = 0; i < points.length - 1; i += 2) {\n      if (i === 0) {\n        this.shape.M(points[i], points[i + 1]);\n      } else {\n        this.shape.L(points[i], points[i + 1]);\n      }\n    }\n    if (points.error) {\n      warningCallback('SvgElemPolygon: unexpected string ' + points.error);\n    }\n    if (points.length % 2 === 1) {\n      warningCallback('SvgElemPolyline: uneven number of coordinates');\n    }\n  };\n  var SvgElemPolygon = function SvgElemPolygon(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    var points = this.getNumberList('points');\n    this.shape = new SvgShape();\n    for (var i = 0; i < points.length - 1; i += 2) {\n      if (i === 0) {\n        this.shape.M(points[i], points[i + 1]);\n      } else {\n        this.shape.L(points[i], points[i + 1]);\n      }\n    }\n    this.shape.Z();\n    if (points.error) {\n      warningCallback('SvgElemPolygon: unexpected string ' + points.error);\n    }\n    if (points.length % 2 === 1) {\n      warningCallback('SvgElemPolygon: uneven number of coordinates');\n    }\n  };\n  var SvgElemPath = function SvgElemPath(obj, inherits) {\n    SvgElemBasicShape.call(this, obj, inherits);\n    this.shape = new SvgShape().path(this.attr('d'));\n    var pathLength = this.getLength('pathLength', this.getViewport());\n    this.pathLength = pathLength > 0 ? pathLength : undefined;\n    this.dashScale = this.pathLength !== undefined ? this.shape.totalLength / this.pathLength : 1;\n  };\n  var SvgElemMarker = function SvgElemMarker(obj, inherits) {\n    SvgElemHasChildren.call(this, obj, inherits);\n    var width = this.getLength('markerWidth', this.getParentVWidth(), 3),\n      height = this.getLength('markerHeight', this.getParentVHeight(), 3),\n      viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\n    this.getVWidth = function () {\n      return viewBox[2];\n    };\n    this.getVHeight = function () {\n      return viewBox[3];\n    };\n    this.drawMarker = function (isClip, isMask, posArray, strokeWidth) {\n      doc.save();\n      var orient = this.attr('orient'),\n        units = this.attr('markerUnits'),\n        rotate = orient === 'auto' ? posArray[2] : (parseFloat(orient) || 0) * Math.PI / 180,\n        scale = units === 'userSpaceOnUse' ? 1 : strokeWidth;\n      doc.transform(Math.cos(rotate) * scale, Math.sin(rotate) * scale, -Math.sin(rotate) * scale, Math.cos(rotate) * scale, posArray[0], posArray[1]);\n      var refX = this.getLength('refX', this.getVWidth(), 0),\n        refY = this.getLength('refY', this.getVHeight(), 0),\n        aspectRatioMatrix = parseAspectRatio(this.attr('preserveAspectRatio'), width, height, viewBox[2], viewBox[3], 0.5);\n      if (this.get('overflow') === 'hidden') {\n        doc.rect(aspectRatioMatrix[0] * (viewBox[0] + viewBox[2] / 2 - refX) - width / 2, aspectRatioMatrix[3] * (viewBox[1] + viewBox[3] / 2 - refY) - height / 2, width, height).clip();\n      }\n      doc.transform.apply(doc, aspectRatioMatrix);\n      doc.translate(-refX, -refY);\n      var group;\n      if (this.get('opacity') < 1 && !isClip) {\n        group = docBeginGroup(getPageBBox());\n      }\n      this.drawChildren(isClip, isMask);\n      if (group) {\n        docEndGroup(group);\n        doc.fillOpacity(this.get('opacity'));\n        docInsertGroup(group);\n      }\n      doc.restore();\n    };\n  };\n  var SvgElemClipPath = function SvgElemClipPath(obj, inherits) {\n    SvgElemHasChildren.call(this, obj, inherits);\n    this.useMask = function (bBox) {\n      var group = docBeginGroup(getPageBBox());\n      doc.save();\n      if (this.attr('clipPathUnits') === 'objectBoundingBox') {\n        doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\n      }\n      this.clip();\n      this.drawChildren(true, false);\n      doc.restore();\n      docEndGroup(group);\n      docApplyMask(group, true);\n    };\n  };\n  var SvgElemMask = function SvgElemMask(obj, inherits) {\n    SvgElemHasChildren.call(this, obj, inherits);\n    this.useMask = function (bBox) {\n      var group = docBeginGroup(getPageBBox());\n      doc.save();\n      var x, y, w, h;\n      if (this.attr('maskUnits') === 'userSpaceOnUse') {\n        x = this.getLength('x', this.getVWidth(), -0.1 * (bBox[2] - bBox[0]) + bBox[0]);\n        y = this.getLength('y', this.getVHeight(), -0.1 * (bBox[3] - bBox[1]) + bBox[1]);\n        w = this.getLength('width', this.getVWidth(), 1.2 * (bBox[2] - bBox[0]));\n        h = this.getLength('height', this.getVHeight(), 1.2 * (bBox[3] - bBox[1]));\n      } else {\n        x = this.getLength('x', this.getVWidth(), -0.1) * (bBox[2] - bBox[0]) + bBox[0];\n        y = this.getLength('y', this.getVHeight(), -0.1) * (bBox[3] - bBox[1]) + bBox[1];\n        w = this.getLength('width', this.getVWidth(), 1.2) * (bBox[2] - bBox[0]);\n        h = this.getLength('height', this.getVHeight(), 1.2) * (bBox[3] - bBox[1]);\n      }\n      doc.rect(x, y, w, h).clip();\n      if (this.attr('maskContentUnits') === 'objectBoundingBox') {\n        doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\n      }\n      this.clip();\n      this.drawChildren(false, true);\n      doc.restore();\n      docEndGroup(group);\n      docApplyMask(group, true);\n    };\n  };\n  var SvgElemTextContainer = function SvgElemTextContainer(obj, inherits) {\n    SvgElemStylable.call(this, obj, inherits);\n    this.allowedChildren = ['tspan', '#text', '#cdata-section', 'a'];\n    this.isText = true;\n    this.getBoundingShape = function () {\n      var shape = new SvgShape();\n      for (var i = 0; i < this._pos.length; i++) {\n        var pos = this._pos[i];\n        if (!pos.hidden) {\n          var dx0 = pos.ascent * Math.sin(pos.rotate),\n            dy0 = -pos.ascent * Math.cos(pos.rotate),\n            dx1 = pos.descent * Math.sin(pos.rotate),\n            dy1 = -pos.descent * Math.cos(pos.rotate),\n            dx2 = pos.width * Math.cos(pos.rotate),\n            dy2 = pos.width * Math.sin(pos.rotate);\n          shape.M(pos.x + dx0, pos.y + dy0).L(pos.x + dx0 + dx2, pos.y + dy0 + dy2).M(pos.x + dx1 + dx2, pos.y + dy1 + dy2).L(pos.x + dx1, pos.y + dy1);\n        }\n      }\n      return shape;\n    };\n    this.drawTextInDocument = function (isClip, isMask) {\n      if (this.link && !isClip && !isMask) {\n        this.addLink();\n      }\n      if (this.get('text-decoration') === 'underline') {\n        this.decorate(0.05 * this._font.size, -0.075 * this._font.size, isClip, isMask);\n      }\n      if (this.get('text-decoration') === 'overline') {\n        this.decorate(0.05 * this._font.size, getAscent(this._font.font, this._font.size) + 0.075 * this._font.size, isClip, isMask);\n      }\n      var fill = this.getFill(isClip, isMask),\n        stroke = this.getStroke(isClip, isMask),\n        strokeWidth = this.get('stroke-width');\n      if (this._font.fauxBold) {\n        if (!stroke) {\n          stroke = fill;\n          strokeWidth = this._font.size * 0.03;\n        } else {\n          strokeWidth += this._font.size * 0.03;\n        }\n      }\n      var children = this.getChildren();\n      for (var i = 0; i < children.length; i++) {\n        var childElem = children[i];\n        switch (childElem.name) {\n          case 'tspan':\n          case 'textPath':\n          case 'a':\n            if (childElem.get('display') !== 'none') {\n              childElem.drawTextInDocument(isClip, isMask);\n            }\n            break;\n          case '#text':\n          case '#cdata-section':\n            if (this.get('visibility') === 'hidden') {\n              continue;\n            }\n            if (fill || stroke || isClip) {\n              if (fill) {\n                docFillColor(fill);\n              }\n              if (stroke && strokeWidth) {\n                docStrokeColor(stroke);\n                doc.lineWidth(strokeWidth).miterLimit(this.get('stroke-miterlimit')).lineJoin(this.get('stroke-linejoin')).lineCap(this.get('stroke-linecap')).dash(this.get('stroke-dasharray'), {\n                  phase: this.get('stroke-dashoffset')\n                });\n              }\n              docBeginText(this._font.font, this._font.size);\n              docSetTextMode(!!fill, !!stroke);\n              for (var j = 0, pos = childElem._pos; j < pos.length; j++) {\n                if (!pos[j].hidden && isNotEqual(pos[j].width, 0)) {\n                  var cos = Math.cos(pos[j].rotate),\n                    sin = Math.sin(pos[j].rotate),\n                    skew = this._font.fauxItalic ? -0.25 : 0;\n                  docSetTextMatrix(cos * pos[j].scale, sin * pos[j].scale, cos * skew - sin, sin * skew + cos, pos[j].x, pos[j].y);\n                  docWriteGlyph(pos[j].glyph);\n                }\n              }\n              docEndText();\n            }\n            break;\n        }\n      }\n      if (this.get('text-decoration') === 'line-through') {\n        this.decorate(0.05 * this._font.size, 0.5 * (getAscent(this._font.font, this._font.size) + getDescent(this._font.font, this._font.size)), isClip, isMask);\n      }\n    };\n    this.decorate = function (lineWidth, linePosition, isClip, isMask) {\n      var fill = this.getFill(isClip, isMask),\n        stroke = this.getStroke(isClip, isMask);\n      if (fill) {\n        docFillColor(fill);\n      }\n      if (stroke) {\n        docStrokeColor(stroke);\n        doc.lineWidth(this.get('stroke-width')).miterLimit(this.get('stroke-miterlimit')).lineJoin(this.get('stroke-linejoin')).lineCap(this.get('stroke-linecap')).dash(this.get('stroke-dasharray'), {\n          phase: this.get('stroke-dashoffset')\n        });\n      }\n      for (var j = 0, pos = this._pos; j < pos.length; j++) {\n        if (!pos[j].hidden && isNotEqual(pos[j].width, 0)) {\n          var dx0 = (linePosition + lineWidth / 2) * Math.sin(pos[j].rotate),\n            dy0 = -(linePosition + lineWidth / 2) * Math.cos(pos[j].rotate),\n            dx1 = (linePosition - lineWidth / 2) * Math.sin(pos[j].rotate),\n            dy1 = -(linePosition - lineWidth / 2) * Math.cos(pos[j].rotate),\n            dx2 = pos[j].width * Math.cos(pos[j].rotate),\n            dy2 = pos[j].width * Math.sin(pos[j].rotate);\n          new SvgShape().M(pos[j].x + dx0, pos[j].y + dy0).L(pos[j].x + dx0 + dx2, pos[j].y + dy0 + dy2).L(pos[j].x + dx1 + dx2, pos[j].y + dy1 + dy2).L(pos[j].x + dx1, pos[j].y + dy1).Z().insertInDocument();\n          if (fill && stroke) {\n            doc.fillAndStroke();\n          } else if (fill) {\n            doc.fill();\n          } else if (stroke) {\n            doc.stroke();\n          }\n        }\n      }\n    };\n  };\n  var SvgElemTextNode = function SvgElemTextNode(obj, inherits) {\n    this.name = obj.nodeName;\n    this.textContent = obj.nodeValue;\n  };\n  var SvgElemTspan = function SvgElemTspan(obj, inherits) {\n    SvgElemTextContainer.call(this, obj, inherits);\n  };\n  var SvgElemTextPath = function SvgElemTextPath(obj, inherits) {\n    SvgElemTextContainer.call(this, obj, inherits);\n    var pathObject, pathLength, temp;\n    if ((temp = this.attr('path')) && temp.trim() !== '') {\n      var _pathLength = this.getLength('pathLength', this.getViewport());\n      this.pathObject = new SvgShape().path(temp);\n      this.pathLength = _pathLength > 0 ? _pathLength : this.pathObject.totalLength;\n      this.pathScale = this.pathObject.totalLength / this.pathLength;\n    } else if ((temp = this.getUrl('href') || this.getUrl('xlink:href')) && temp.nodeName === 'path') {\n      var pathElem = new SvgElemPath(temp, this);\n      this.pathObject = pathElem.shape.clone().transform(pathElem.get('transform'));\n      this.pathLength = this.chooseValue(pathElem.pathLength, this.pathObject.totalLength);\n      this.pathScale = this.pathObject.totalLength / this.pathLength;\n    }\n  };\n  var SvgElemText = function SvgElemText(obj, inherits) {\n    SvgElemTextContainer.call(this, obj, inherits);\n    this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\n    (function (textParentElem) {\n      var processedText = '',\n        remainingText = obj.textContent,\n        textPaths = [],\n        currentChunk = [],\n        currentAnchor,\n        currentDirection,\n        currentX = 0,\n        currentY = 0;\n      function doAnchoring() {\n        if (currentChunk.length) {\n          var last = currentChunk[currentChunk.length - 1];\n          var first = currentChunk[0];\n          var width = last.x + last.width - first.x;\n          var anchordx = {\n            'startltr': 0,\n            'middleltr': 0.5,\n            'endltr': 1,\n            'startrtl': 1,\n            'middlertl': 0.5,\n            'endrtl': 0\n          }[currentAnchor + currentDirection] * width || 0;\n          for (var i = 0; i < currentChunk.length; i++) {\n            currentChunk[i].x -= anchordx;\n          }\n        }\n        currentChunk = [];\n      }\n      function adjustLength(pos, length, spacingAndGlyphs) {\n        var firstChar = pos[0],\n          lastChar = pos[pos.length - 1],\n          startX = firstChar.x,\n          endX = lastChar.x + lastChar.width;\n        if (spacingAndGlyphs) {\n          var textScale = length / (endX - startX);\n          if (textScale > 0 && textScale < Infinity) {\n            for (var j = 0; j < pos.length; j++) {\n              pos[j].x = startX + textScale * (pos[j].x - startX);\n              pos[j].scale *= textScale;\n              pos[j].width *= textScale;\n            }\n          }\n        } else {\n          if (pos.length >= 2) {\n            var spaceDiff = (length - (endX - startX)) / (pos.length - 1);\n            for (var _j4 = 0; _j4 < pos.length; _j4++) {\n              pos[_j4].x += _j4 * spaceDiff;\n            }\n          }\n        }\n        currentX += length - (endX - startX);\n      }\n      function recursive(currentElem, parentElem) {\n        currentElem._x = combineArrays(currentElem.getLengthList('x', currentElem.getVWidth()), parentElem ? parentElem._x.slice(parentElem._pos.length) : []);\n        currentElem._y = combineArrays(currentElem.getLengthList('y', currentElem.getVHeight()), parentElem ? parentElem._y.slice(parentElem._pos.length) : []);\n        currentElem._dx = combineArrays(currentElem.getLengthList('dx', currentElem.getVWidth()), parentElem ? parentElem._dx.slice(parentElem._pos.length) : []);\n        currentElem._dy = combineArrays(currentElem.getLengthList('dy', currentElem.getVHeight()), parentElem ? parentElem._dy.slice(parentElem._pos.length) : []);\n        currentElem._rot = combineArrays(currentElem.getNumberList('rotate'), parentElem ? parentElem._rot.slice(parentElem._pos.length) : []);\n        currentElem._defRot = currentElem.chooseValue(currentElem._rot[currentElem._rot.length - 1], parentElem && parentElem._defRot, 0);\n        if (currentElem.name === 'textPath') {\n          currentElem._y = [];\n        }\n        var fontOptions = {\n            fauxItalic: false,\n            fauxBold: false\n          },\n          fontNameorLink = fontCallback(currentElem.get('font-family'), currentElem.get('font-weight') === 'bold', currentElem.get('font-style') === 'italic', fontOptions);\n        try {\n          doc.font(fontNameorLink);\n        } catch (e) {\n          warningCallback('SVGElemText: failed to open font \"' + fontNameorLink + '\" in PDFKit');\n        }\n        currentElem._pos = [];\n        currentElem._index = 0;\n        currentElem._font = {\n          font: doc._font,\n          size: currentElem.get('font-size'),\n          fauxItalic: fontOptions.fauxItalic,\n          fauxBold: fontOptions.fauxBold\n        };\n        var textLength = currentElem.getLength('textLength', currentElem.getVWidth(), undefined),\n          spacingAndGlyphs = currentElem.attr('lengthAdjust') === 'spacingAndGlyphs',\n          wordSpacing = currentElem.get('word-spacing'),\n          letterSpacing = currentElem.get('letter-spacing'),\n          textAnchor = currentElem.get('text-anchor'),\n          textDirection = currentElem.get('direction'),\n          baseline = getBaseline(currentElem._font.font, currentElem._font.size, currentElem.get('alignment-baseline') || currentElem.get('dominant-baseline'), currentElem.get('baseline-shift'));\n        if (currentElem.name === 'textPath') {\n          doAnchoring();\n          currentX = currentY = 0;\n        }\n        var children = currentElem.getChildren();\n        for (var i = 0; i < children.length; i++) {\n          var childElem = children[i];\n          switch (childElem.name) {\n            case 'tspan':\n            case 'textPath':\n            case 'a':\n              recursive(childElem, currentElem);\n              break;\n            case '#text':\n            case '#cdata-section':\n              var rawText = childElem.textContent,\n                renderedText = rawText,\n                words = void 0;\n              childElem._font = currentElem._font;\n              childElem._pos = [];\n              remainingText = remainingText.substring(rawText.length);\n              if (currentElem.get('xml:space') === 'preserve') {\n                renderedText = renderedText.replace(/[\\s]/g, ' ');\n              } else {\n                renderedText = renderedText.replace(/[\\s]+/g, ' ');\n                if (processedText.match(/[\\s]$|^$/)) {\n                  renderedText = renderedText.replace(/^[\\s]/, '');\n                }\n                if (remainingText.match(/^[\\s]*$/)) {\n                  renderedText = renderedText.replace(/[\\s]$/, '');\n                }\n              }\n              processedText += rawText;\n              if (wordSpacing === 0) {\n                words = [renderedText];\n              } else {\n                words = renderedText.split(/(\\s)/);\n              }\n              for (var w = 0; w < words.length; w++) {\n                var pos = getTextPos(currentElem._font.font, currentElem._font.size, words[w]);\n                for (var j = 0; j < pos.length; j++) {\n                  var index = currentElem._index,\n                    xAttr = currentElem._x[index],\n                    yAttr = currentElem._y[index],\n                    dxAttr = currentElem._dx[index],\n                    dyAttr = currentElem._dy[index],\n                    rotAttr = currentElem._rot[index],\n                    continuous = !(w === 0 && j === 0);\n                  if (xAttr !== undefined) {\n                    continuous = false;\n                    doAnchoring();\n                    currentX = xAttr;\n                  }\n                  if (yAttr !== undefined) {\n                    continuous = false;\n                    doAnchoring();\n                    currentY = yAttr;\n                  }\n                  if (dxAttr !== undefined) {\n                    continuous = false;\n                    currentX += dxAttr;\n                  }\n                  if (dyAttr !== undefined) {\n                    continuous = false;\n                    currentY += dyAttr;\n                  }\n                  if (rotAttr !== undefined || currentElem._defRot !== 0) {\n                    continuous = false;\n                  }\n                  var position = {\n                    glyph: pos[j].glyph,\n                    rotate: Math.PI / 180 * currentElem.chooseValue(rotAttr, currentElem._defRot),\n                    x: currentX + pos[j].xOffset,\n                    y: currentY + baseline + pos[j].yOffset,\n                    width: pos[j].width,\n                    ascent: getAscent(currentElem._font.font, currentElem._font.size),\n                    descent: getDescent(currentElem._font.font, currentElem._font.size),\n                    scale: 1,\n                    hidden: false,\n                    continuous: continuous\n                  };\n                  currentChunk.push(position);\n                  childElem._pos.push(position);\n                  currentElem._pos.push(position);\n                  currentElem._index += pos[j].unicode.length;\n                  if (currentChunk.length === 1) {\n                    currentAnchor = textAnchor;\n                    currentDirection = textDirection;\n                  }\n                  currentX += pos[j].xAdvance + letterSpacing;\n                  currentY += pos[j].yAdvance;\n                }\n                if (words[w] === ' ') {\n                  currentX += wordSpacing;\n                }\n              }\n              break;\n            default:\n              remainingText = remainingText.substring(childElem.textContent.length);\n          }\n        }\n        if (textLength && currentElem._pos.length) {\n          adjustLength(currentElem._pos, textLength, spacingAndGlyphs);\n        }\n        if (currentElem.name === 'textPath' || currentElem.name === 'text') {\n          doAnchoring();\n        }\n        if (currentElem.name === 'textPath') {\n          textPaths.push(currentElem);\n          var pathObject = currentElem.pathObject;\n          if (pathObject) {\n            currentX = pathObject.endPoint[0];\n            currentY = pathObject.endPoint[1];\n          }\n        }\n        if (parentElem) {\n          parentElem._pos = parentElem._pos.concat(currentElem._pos);\n          parentElem._index += currentElem._index;\n        }\n      }\n      function textOnPath(currentElem) {\n        var pathObject = currentElem.pathObject,\n          pathLength = currentElem.pathLength,\n          pathScale = currentElem.pathScale;\n        if (pathObject) {\n          var textOffset = currentElem.getLength('startOffset', pathLength, 0);\n          for (var j = 0; j < currentElem._pos.length; j++) {\n            var charMidX = textOffset + currentElem._pos[j].x + 0.5 * currentElem._pos[j].width;\n            if (charMidX > pathLength || charMidX < 0) {\n              currentElem._pos[j].hidden = true;\n            } else {\n              var pointOnPath = pathObject.getPointAtLength(charMidX * pathScale);\n              if (isNotEqual(pathScale, 1)) {\n                currentElem._pos[j].scale *= pathScale;\n                currentElem._pos[j].width *= pathScale;\n              }\n              currentElem._pos[j].x = pointOnPath[0] - 0.5 * currentElem._pos[j].width * Math.cos(pointOnPath[2]) - currentElem._pos[j].y * Math.sin(pointOnPath[2]);\n              currentElem._pos[j].y = pointOnPath[1] - 0.5 * currentElem._pos[j].width * Math.sin(pointOnPath[2]) + currentElem._pos[j].y * Math.cos(pointOnPath[2]);\n              currentElem._pos[j].rotate = pointOnPath[2] + currentElem._pos[j].rotate;\n              currentElem._pos[j].continuous = false;\n            }\n          }\n        } else {\n          for (var _j5 = 0; _j5 < currentElem._pos.length; _j5++) {\n            currentElem._pos[_j5].hidden = true;\n          }\n        }\n      }\n      recursive(textParentElem, null);\n      for (var i = 0; i < textPaths.length; i++) {\n        textOnPath(textPaths[i]);\n      }\n    })(this);\n    this.getTransformation = function () {\n      return this.get('transform');\n    };\n    this.drawInDocument = function (isClip, isMask) {\n      doc.save();\n      this.transform();\n      this.clip();\n      var masked = this.mask(),\n        group;\n      if (masked) {\n        group = docBeginGroup(getPageBBox());\n      }\n      this.drawTextInDocument(isClip, isMask);\n      if (group) {\n        docEndGroup(group);\n        docInsertGroup(group);\n      }\n      doc.restore();\n    };\n  };\n  options = options || {};\n  var pxToPt = options.assumePt ? 1 : 72 / 96,\n    // 1px = 72/96pt, but only if assumePt is false\n    viewportWidth = (options.width || doc.page.width) / pxToPt,\n    viewportHeight = (options.height || doc.page.height) / pxToPt,\n    preserveAspectRatio = options.preserveAspectRatio || null,\n    // default to null so that the attr can override if not passed\n    useCSS = options.useCSS && typeof SVGElement !== 'undefined' && svg instanceof SVGElement && typeof getComputedStyle === 'function',\n    warningCallback = options.warningCallback,\n    fontCallback = options.fontCallback,\n    imageCallback = options.imageCallback,\n    colorCallback = options.colorCallback,\n    documentCallback = options.documentCallback,\n    precision = Math.ceil(Math.max(1, options.precision)) || 3,\n    groupStack = [],\n    documentCache = {},\n    links = [],\n    styleRules = [];\n  if (typeof warningCallback !== 'function') {\n    warningCallback = function warningCallback(str) {\n      if (typeof console !== undefined && typeof console.warn === 'function') {\n        console.warn(str);\n      }\n    };\n  }\n  if (typeof fontCallback !== 'function') {\n    fontCallback = function fontCallback(family, bold, italic, fontOptions) {\n      // Check if the font is already registered in the document\n      if (bold && italic) {\n        if (doc._registeredFonts.hasOwnProperty(family + '-BoldItalic')) {\n          return family + '-BoldItalic';\n        } else if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\n          fontOptions.fauxBold = true;\n          return family + '-Italic';\n        } else if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\n          fontOptions.fauxItalic = true;\n          return family + '-Bold';\n        } else if (doc._registeredFonts.hasOwnProperty(family)) {\n          fontOptions.fauxBold = true;\n          fontOptions.fauxItalic = true;\n          return family;\n        }\n      }\n      if (bold && !italic) {\n        if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\n          return family + '-Bold';\n        } else if (doc._registeredFonts.hasOwnProperty(family)) {\n          fontOptions.fauxBold = true;\n          return family;\n        }\n      }\n      if (!bold && italic) {\n        if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\n          return family + '-Italic';\n        } else if (doc._registeredFonts.hasOwnProperty(family)) {\n          fontOptions.fauxItalic = true;\n          return family;\n        }\n      }\n      if (!bold && !italic) {\n        if (doc._registeredFonts.hasOwnProperty(family)) {\n          return family;\n        }\n      }\n      // Use standard fonts as fallback\n      if (family.match(/(?:^|,)\\s*serif\\s*$/)) {\n        if (bold && italic) {\n          return 'Times-BoldItalic';\n        }\n        if (bold && !italic) {\n          return 'Times-Bold';\n        }\n        if (!bold && italic) {\n          return 'Times-Italic';\n        }\n        if (!bold && !italic) {\n          return 'Times-Roman';\n        }\n      } else if (family.match(/(?:^|,)\\s*monospace\\s*$/)) {\n        if (bold && italic) {\n          return 'Courier-BoldOblique';\n        }\n        if (bold && !italic) {\n          return 'Courier-Bold';\n        }\n        if (!bold && italic) {\n          return 'Courier-Oblique';\n        }\n        if (!bold && !italic) {\n          return 'Courier';\n        }\n      } else if (family.match(/(?:^|,)\\s*sans-serif\\s*$/) || true) {\n        if (bold && italic) {\n          return 'Helvetica-BoldOblique';\n        }\n        if (bold && !italic) {\n          return 'Helvetica-Bold';\n        }\n        if (!bold && italic) {\n          return 'Helvetica-Oblique';\n        }\n        if (!bold && !italic) {\n          return 'Helvetica';\n        }\n      }\n    };\n  }\n  if (typeof imageCallback !== 'function') {\n    imageCallback = function imageCallback(link) {\n      return link.replace(/\\s+/g, '');\n    };\n  }\n  if (typeof colorCallback !== 'function') {\n    colorCallback = null;\n  } else {\n    for (var color in DefaultColors) {\n      var newColor = colorCallback(DefaultColors[color]);\n      DefaultColors[color][0] = newColor[0];\n      DefaultColors[color][1] = newColor[1];\n    }\n  }\n  if (typeof documentCallback !== 'function') {\n    documentCallback = null;\n  }\n  if (typeof svg === 'string') {\n    svg = parseXml(svg);\n  }\n  if (svg) {\n    var styles = svg.getElementsByTagName('style');\n    for (var i = 0; i < styles.length; i++) {\n      styleRules = styleRules.concat(parseStyleSheet(styles[i].textContent));\n    }\n    var elem = createSVGElement(svg, null);\n    if (typeof elem.drawInDocument === 'function') {\n      if (options.useCSS && !useCSS) {\n        warningCallback('SVGtoPDF: useCSS option can only be used for SVG *elements* in compatible browsers');\n      }\n      var savedFillColor = doc._fillColor;\n      doc.save().translate(x || 0, y || 0).scale(pxToPt);\n      elem.drawInDocument();\n      for (var _i8 = 0; _i8 < links.length; _i8++) {\n        doc.page.annotations.push(links[_i8]);\n      }\n      doc.restore();\n      doc._fillColor = savedFillColor;\n    } else {\n      warningCallback('SVGtoPDF: this element can\\'t be rendered directly: ' + svg.nodeName);\n    }\n  } else {\n    warningCallback('SVGtoPDF: the input does not look like a valid SVG');\n  }\n};\nif ( true && module && typeof module.exports !== 'undefined') {\n  module.exports = SVGtoPDF;\n}\n\n/***/ }),\n\n/***/ 9742:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(\n      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n    ))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n\n\n/***/ }),\n\n/***/ 4181:\n/***/ (function(module) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Bit reading helpers\n*/\n\nvar BROTLI_READ_SIZE = 4096;\nvar BROTLI_IBUF_SIZE =  (2 * BROTLI_READ_SIZE + 32);\nvar BROTLI_IBUF_MASK =  (2 * BROTLI_READ_SIZE - 1);\n\nvar kBitMask = new Uint32Array([\n  0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767,\n  65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215\n]);\n\n/* Input byte buffer, consist of a ringbuffer and a \"slack\" region where */\n/* bytes from the start of the ringbuffer are copied. */\nfunction BrotliBitReader(input) {\n  this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE);\n  this.input_ = input;    /* input callback */\n  \n  this.reset();\n}\n\nBrotliBitReader.READ_SIZE = BROTLI_READ_SIZE;\nBrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK;\n\nBrotliBitReader.prototype.reset = function() {\n  this.buf_ptr_ = 0;      /* next input will write here */\n  this.val_ = 0;          /* pre-fetched bits */\n  this.pos_ = 0;          /* byte position in stream */\n  this.bit_pos_ = 0;      /* current bit-reading position in val_ */\n  this.bit_end_pos_ = 0;  /* bit-reading end position from LSB of val_ */\n  this.eos_ = 0;          /* input stream is finished */\n  \n  this.readMoreInput();\n  for (var i = 0; i < 4; i++) {\n    this.val_ |= this.buf_[this.pos_] << (8 * i);\n    ++this.pos_;\n  }\n  \n  return this.bit_end_pos_ > 0;\n};\n\n/* Fills up the input ringbuffer by calling the input callback.\n\n   Does nothing if there are at least 32 bytes present after current position.\n\n   Returns 0 if either:\n    - the input callback returned an error, or\n    - there is no more input and the position is past the end of the stream.\n\n   After encountering the end of the input stream, 32 additional zero bytes are\n   copied to the ringbuffer, therefore it is safe to call this function after\n   every 32 bytes of input is read.\n*/\nBrotliBitReader.prototype.readMoreInput = function() {\n  if (this.bit_end_pos_ > 256) {\n    return;\n  } else if (this.eos_) {\n    if (this.bit_pos_ > this.bit_end_pos_)\n      throw new Error('Unexpected end of input ' + this.bit_pos_ + ' ' + this.bit_end_pos_);\n  } else {\n    var dst = this.buf_ptr_;\n    var bytes_read = this.input_.read(this.buf_, dst, BROTLI_READ_SIZE);\n    if (bytes_read < 0) {\n      throw new Error('Unexpected end of input');\n    }\n    \n    if (bytes_read < BROTLI_READ_SIZE) {\n      this.eos_ = 1;\n      /* Store 32 bytes of zero after the stream end. */\n      for (var p = 0; p < 32; p++)\n        this.buf_[dst + bytes_read + p] = 0;\n    }\n    \n    if (dst === 0) {\n      /* Copy the head of the ringbuffer to the slack region. */\n      for (var p = 0; p < 32; p++)\n        this.buf_[(BROTLI_READ_SIZE << 1) + p] = this.buf_[p];\n\n      this.buf_ptr_ = BROTLI_READ_SIZE;\n    } else {\n      this.buf_ptr_ = 0;\n    }\n    \n    this.bit_end_pos_ += bytes_read << 3;\n  }\n};\n\n/* Guarantees that there are at least 24 bits in the buffer. */\nBrotliBitReader.prototype.fillBitWindow = function() {    \n  while (this.bit_pos_ >= 8) {\n    this.val_ >>>= 8;\n    this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24;\n    ++this.pos_;\n    this.bit_pos_ = this.bit_pos_ - 8 >>> 0;\n    this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0;\n  }\n};\n\n/* Reads the specified number of bits from Read Buffer. */\nBrotliBitReader.prototype.readBits = function(n_bits) {\n  if (32 - this.bit_pos_ < n_bits) {\n    this.fillBitWindow();\n  }\n  \n  var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]);\n  this.bit_pos_ += n_bits;\n  return val;\n};\n\nmodule.exports = BrotliBitReader;\n\n\n/***/ }),\n\n/***/ 7080:\n/***/ (function(__unused_webpack_module, exports) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Lookup table to map the previous two bytes to a context id.\n\n   There are four different context modeling modes defined here:\n     CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,\n     CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,\n     CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,\n     CONTEXT_SIGNED: second-order context model tuned for signed integers.\n\n   The context id for the UTF8 context model is calculated as follows. If p1\n   and p2 are the previous two bytes, we calcualte the context as\n\n     context = kContextLookup[p1] | kContextLookup[p2 + 256].\n\n   If the previous two bytes are ASCII characters (i.e. < 128), this will be\n   equivalent to\n\n     context = 4 * context1(p1) + context2(p2),\n\n   where context1 is based on the previous byte in the following way:\n\n     0  : non-ASCII control\n     1  : \\t, \\n, \\r\n     2  : space\n     3  : other punctuation\n     4  : \" '\n     5  : %\n     6  : ( < [ {\n     7  : ) > ] }\n     8  : , ; :\n     9  : .\n     10 : =\n     11 : number\n     12 : upper-case vowel\n     13 : upper-case consonant\n     14 : lower-case vowel\n     15 : lower-case consonant\n\n   and context2 is based on the second last byte:\n\n     0 : control, space\n     1 : punctuation\n     2 : upper-case letter, number\n     3 : lower-case letter\n\n   If the last byte is ASCII, and the second last byte is not (in a valid UTF8\n   stream it will be a continuation byte, value between 128 and 191), the\n   context is the same as if the second last byte was an ASCII control or space.\n\n   If the last byte is a UTF8 lead byte (value >= 192), then the next byte will\n   be a continuation byte and the context id is 2 or 3 depending on the LSB of\n   the last byte and to a lesser extent on the second last byte if it is ASCII.\n\n   If the last byte is a UTF8 continuation byte, the second last byte can be:\n     - continuation byte: the next byte is probably ASCII or lead byte (assuming\n       4-byte UTF8 characters are rare) and the context id is 0 or 1.\n     - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1\n     - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3\n\n   The possible value combinations of the previous two bytes, the range of\n   context ids and the type of the next byte is summarized in the table below:\n\n   |--------\\-----------------------------------------------------------------|\n   |         \\                         Last byte                              |\n   | Second   \\---------------------------------------------------------------|\n   | last byte \\    ASCII            |   cont. byte        |   lead byte      |\n   |            \\   (0-127)          |   (128-191)         |   (192-)         |\n   |=============|===================|=====================|==================|\n   |  ASCII      | next: ASCII/lead  |  not valid          |  next: cont.     |\n   |  (0-127)    | context: 4 - 63   |                     |  context: 2 - 3  |\n   |-------------|-------------------|---------------------|------------------|\n   |  cont. byte | next: ASCII/lead  |  next: ASCII/lead   |  next: cont.     |\n   |  (128-191)  | context: 4 - 63   |  context: 0 - 1     |  context: 2 - 3  |\n   |-------------|-------------------|---------------------|------------------|\n   |  lead byte  | not valid         |  next: ASCII/lead   |  not valid       |\n   |  (192-207)  |                   |  context: 0 - 1     |                  |\n   |-------------|-------------------|---------------------|------------------|\n   |  lead byte  | not valid         |  next: cont.        |  not valid       |\n   |  (208-)     |                   |  context: 2 - 3     |                  |\n   |-------------|-------------------|---------------------|------------------|\n\n   The context id for the signed context mode is calculated as:\n\n     context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2].\n\n   For any context modeling modes, the context ids can be calculated by |-ing\n   together two lookups from one table using context model dependent offsets:\n\n     context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2].\n\n   where offset1 and offset2 are dependent on the context mode.\n*/\n\nvar CONTEXT_LSB6         = 0;\nvar CONTEXT_MSB6         = 1;\nvar CONTEXT_UTF8         = 2;\nvar CONTEXT_SIGNED       = 3;\n\n/* Common context lookup table for all context modes. */\nexports.lookup = new Uint8Array([\n  /* CONTEXT_UTF8, last byte. */\n  /* ASCII range. */\n   0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  4,  0,  0,  4,  0,  0,\n   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,\n   8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,\n  44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,\n  12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,\n  52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,\n  12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,\n  60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12,  0,\n  /* UTF8 continuation byte range. */\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  /* UTF8 lead byte range. */\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  /* CONTEXT_UTF8 second last byte. */\n  /* ASCII range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,\n  1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,\n  1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,\n  /* UTF8 continuation byte range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* UTF8 lead byte range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  /* CONTEXT_SIGNED, second last byte. */\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,\n  /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */\n   0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,\n  /* CONTEXT_LSB6, last byte. */\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n  /* CONTEXT_MSB6, last byte. */\n   0,  0,  0,  0,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,\n   4,  4,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,\n   8,  8,  8,  8,  9,  9,  9,  9, 10, 10, 10, 10, 11, 11, 11, 11,\n  12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,\n  16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,\n  20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,\n  24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,\n  28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,\n  32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,\n  36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,\n  40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,\n  44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,\n  48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,\n  52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,\n  56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,\n  60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,\n  /* CONTEXT_{M,L}SB6, second last byte, */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n]);\n\nexports.lookupOffsets = new Uint16Array([\n  /* CONTEXT_LSB6 */\n  1024, 1536,\n  /* CONTEXT_MSB6 */\n  1280, 1536,\n  /* CONTEXT_UTF8 */\n  0, 256,\n  /* CONTEXT_SIGNED */\n  768, 512,\n]);\n\n\n/***/ }),\n\n/***/ 6450:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar __webpack_unused_export__;\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n*/\n\nvar BrotliInput = (__webpack_require__(6154)/* .BrotliInput */ .g);\nvar BrotliOutput = (__webpack_require__(6154)/* .BrotliOutput */ .j);\nvar BrotliBitReader = __webpack_require__(4181);\nvar BrotliDictionary = __webpack_require__(5139);\nvar HuffmanCode = (__webpack_require__(966)/* .HuffmanCode */ .h);\nvar BrotliBuildHuffmanTable = (__webpack_require__(966)/* .BrotliBuildHuffmanTable */ .g);\nvar Context = __webpack_require__(7080);\nvar Prefix = __webpack_require__(8435);\nvar Transform = __webpack_require__(2973);\n\nvar kDefaultCodeLength = 8;\nvar kCodeLengthRepeatCode = 16;\nvar kNumLiteralCodes = 256;\nvar kNumInsertAndCopyCodes = 704;\nvar kNumBlockLengthCodes = 26;\nvar kLiteralContextBits = 6;\nvar kDistanceContextBits = 2;\n\nvar HUFFMAN_TABLE_BITS = 8;\nvar HUFFMAN_TABLE_MASK = 0xff;\n/* Maximum possible Huffman table size for an alphabet size of 704, max code\n * length 15 and root table bits 8. */\nvar HUFFMAN_MAX_TABLE_SIZE = 1080;\n\nvar CODE_LENGTH_CODES = 18;\nvar kCodeLengthCodeOrder = new Uint8Array([\n  1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n]);\n\nvar NUM_DISTANCE_SHORT_CODES = 16;\nvar kDistanceShortCodeIndexOffset = new Uint8Array([\n  3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2\n]);\n\nvar kDistanceShortCodeValueOffset = new Int8Array([\n  0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3\n]);\n\nvar kMaxHuffmanTableSize = new Uint16Array([\n  256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,\n  854, 886, 920, 952, 984, 1016, 1048, 1080\n]);\n\nfunction DecodeWindowBits(br) {\n  var n;\n  if (br.readBits(1) === 0) {\n    return 16;\n  }\n  \n  n = br.readBits(3);\n  if (n > 0) {\n    return 17 + n;\n  }\n  \n  n = br.readBits(3);\n  if (n > 0) {\n    return 8 + n;\n  }\n  \n  return 17;\n}\n\n/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */\nfunction DecodeVarLenUint8(br) {\n  if (br.readBits(1)) {\n    var nbits = br.readBits(3);\n    if (nbits === 0) {\n      return 1;\n    } else {\n      return br.readBits(nbits) + (1 << nbits);\n    }\n  }\n  return 0;\n}\n\nfunction MetaBlockLength() {\n  this.meta_block_length = 0;\n  this.input_end = 0;\n  this.is_uncompressed = 0;\n  this.is_metadata = false;\n}\n\nfunction DecodeMetaBlockLength(br) {\n  var out = new MetaBlockLength;  \n  var size_nibbles;\n  var size_bytes;\n  var i;\n  \n  out.input_end = br.readBits(1);\n  if (out.input_end && br.readBits(1)) {\n    return out;\n  }\n  \n  size_nibbles = br.readBits(2) + 4;\n  if (size_nibbles === 7) {\n    out.is_metadata = true;\n    \n    if (br.readBits(1) !== 0)\n      throw new Error('Invalid reserved bit');\n    \n    size_bytes = br.readBits(2);\n    if (size_bytes === 0)\n      return out;\n    \n    for (i = 0; i < size_bytes; i++) {\n      var next_byte = br.readBits(8);\n      if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0)\n        throw new Error('Invalid size byte');\n      \n      out.meta_block_length |= next_byte << (i * 8);\n    }\n  } else {\n    for (i = 0; i < size_nibbles; ++i) {\n      var next_nibble = br.readBits(4);\n      if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0)\n        throw new Error('Invalid size nibble');\n      \n      out.meta_block_length |= next_nibble << (i * 4);\n    }\n  }\n  \n  ++out.meta_block_length;\n  \n  if (!out.input_end && !out.is_metadata) {\n    out.is_uncompressed = br.readBits(1);\n  }\n  \n  return out;\n}\n\n/* Decodes the next Huffman code from bit-stream. */\nfunction ReadSymbol(table, index, br) {\n  var start_index = index;\n  \n  var nbits;\n  br.fillBitWindow();\n  index += (br.val_ >>> br.bit_pos_) & HUFFMAN_TABLE_MASK;\n  nbits = table[index].bits - HUFFMAN_TABLE_BITS;\n  if (nbits > 0) {\n    br.bit_pos_ += HUFFMAN_TABLE_BITS;\n    index += table[index].value;\n    index += (br.val_ >>> br.bit_pos_) & ((1 << nbits) - 1);\n  }\n  br.bit_pos_ += table[index].bits;\n  return table[index].value;\n}\n\nfunction ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) {\n  var symbol = 0;\n  var prev_code_len = kDefaultCodeLength;\n  var repeat = 0;\n  var repeat_code_len = 0;\n  var space = 32768;\n  \n  var table = [];\n  for (var i = 0; i < 32; i++)\n    table.push(new HuffmanCode(0, 0));\n  \n  BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES);\n\n  while (symbol < num_symbols && space > 0) {\n    var p = 0;\n    var code_len;\n    \n    br.readMoreInput();\n    br.fillBitWindow();\n    p += (br.val_ >>> br.bit_pos_) & 31;\n    br.bit_pos_ += table[p].bits;\n    code_len = table[p].value & 0xff;\n    if (code_len < kCodeLengthRepeatCode) {\n      repeat = 0;\n      code_lengths[symbol++] = code_len;\n      if (code_len !== 0) {\n        prev_code_len = code_len;\n        space -= 32768 >> code_len;\n      }\n    } else {\n      var extra_bits = code_len - 14;\n      var old_repeat;\n      var repeat_delta;\n      var new_len = 0;\n      if (code_len === kCodeLengthRepeatCode) {\n        new_len = prev_code_len;\n      }\n      if (repeat_code_len !== new_len) {\n        repeat = 0;\n        repeat_code_len = new_len;\n      }\n      old_repeat = repeat;\n      if (repeat > 0) {\n        repeat -= 2;\n        repeat <<= extra_bits;\n      }\n      repeat += br.readBits(extra_bits) + 3;\n      repeat_delta = repeat - old_repeat;\n      if (symbol + repeat_delta > num_symbols) {\n        throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols');\n      }\n      \n      for (var x = 0; x < repeat_delta; x++)\n        code_lengths[symbol + x] = repeat_code_len;\n      \n      symbol += repeat_delta;\n      \n      if (repeat_code_len !== 0) {\n        space -= repeat_delta << (15 - repeat_code_len);\n      }\n    }\n  }\n  if (space !== 0) {\n    throw new Error(\"[ReadHuffmanCodeLengths] space = \" + space);\n  }\n  \n  for (; symbol < num_symbols; symbol++)\n    code_lengths[symbol] = 0;\n}\n\nfunction ReadHuffmanCode(alphabet_size, tables, table, br) {\n  var table_size = 0;\n  var simple_code_or_skip;\n  var code_lengths = new Uint8Array(alphabet_size);\n  \n  br.readMoreInput();\n  \n  /* simple_code_or_skip is used as follows:\n     1 for simple code;\n     0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */\n  simple_code_or_skip = br.readBits(2);\n  if (simple_code_or_skip === 1) {\n    /* Read symbols, codes & code lengths directly. */\n    var i;\n    var max_bits_counter = alphabet_size - 1;\n    var max_bits = 0;\n    var symbols = new Int32Array(4);\n    var num_symbols = br.readBits(2) + 1;\n    while (max_bits_counter) {\n      max_bits_counter >>= 1;\n      ++max_bits;\n    }\n\n    for (i = 0; i < num_symbols; ++i) {\n      symbols[i] = br.readBits(max_bits) % alphabet_size;\n      code_lengths[symbols[i]] = 2;\n    }\n    code_lengths[symbols[0]] = 1;\n    switch (num_symbols) {\n      case 1:\n        break;\n      case 3:\n        if ((symbols[0] === symbols[1]) ||\n            (symbols[0] === symbols[2]) ||\n            (symbols[1] === symbols[2])) {\n          throw new Error('[ReadHuffmanCode] invalid symbols');\n        }\n        break;\n      case 2:\n        if (symbols[0] === symbols[1]) {\n          throw new Error('[ReadHuffmanCode] invalid symbols');\n        }\n        \n        code_lengths[symbols[1]] = 1;\n        break;\n      case 4:\n        if ((symbols[0] === symbols[1]) ||\n            (symbols[0] === symbols[2]) ||\n            (symbols[0] === symbols[3]) ||\n            (symbols[1] === symbols[2]) ||\n            (symbols[1] === symbols[3]) ||\n            (symbols[2] === symbols[3])) {\n          throw new Error('[ReadHuffmanCode] invalid symbols');\n        }\n        \n        if (br.readBits(1)) {\n          code_lengths[symbols[2]] = 3;\n          code_lengths[symbols[3]] = 3;\n        } else {\n          code_lengths[symbols[0]] = 2;\n        }\n        break;\n    }\n  } else {  /* Decode Huffman-coded code lengths. */\n    var i;\n    var code_length_code_lengths = new Uint8Array(CODE_LENGTH_CODES);\n    var space = 32;\n    var num_codes = 0;\n    /* Static Huffman code for the code length code lengths */\n    var huff = [\n      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), \n      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1),\n      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), \n      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5)\n    ];\n    for (i = simple_code_or_skip; i < CODE_LENGTH_CODES && space > 0; ++i) {\n      var code_len_idx = kCodeLengthCodeOrder[i];\n      var p = 0;\n      var v;\n      br.fillBitWindow();\n      p += (br.val_ >>> br.bit_pos_) & 15;\n      br.bit_pos_ += huff[p].bits;\n      v = huff[p].value;\n      code_length_code_lengths[code_len_idx] = v;\n      if (v !== 0) {\n        space -= (32 >> v);\n        ++num_codes;\n      }\n    }\n    \n    if (!(num_codes === 1 || space === 0))\n      throw new Error('[ReadHuffmanCode] invalid num_codes or space');\n    \n    ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br);\n  }\n  \n  table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size);\n  \n  if (table_size === 0) {\n    throw new Error(\"[ReadHuffmanCode] BuildHuffmanTable failed: \");\n  }\n  \n  return table_size;\n}\n\nfunction ReadBlockLength(table, index, br) {\n  var code;\n  var nbits;\n  code = ReadSymbol(table, index, br);\n  nbits = Prefix.kBlockLengthPrefixCode[code].nbits;\n  return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits);\n}\n\nfunction TranslateShortCodes(code, ringbuffer, index) {\n  var val;\n  if (code < NUM_DISTANCE_SHORT_CODES) {\n    index += kDistanceShortCodeIndexOffset[code];\n    index &= 3;\n    val = ringbuffer[index] + kDistanceShortCodeValueOffset[code];\n  } else {\n    val = code - NUM_DISTANCE_SHORT_CODES + 1;\n  }\n  return val;\n}\n\nfunction MoveToFront(v, index) {\n  var value = v[index];\n  var i = index;\n  for (; i; --i) v[i] = v[i - 1];\n  v[0] = value;\n}\n\nfunction InverseMoveToFrontTransform(v, v_len) {\n  var mtf = new Uint8Array(256);\n  var i;\n  for (i = 0; i < 256; ++i) {\n    mtf[i] = i;\n  }\n  for (i = 0; i < v_len; ++i) {\n    var index = v[i];\n    v[i] = mtf[index];\n    if (index) MoveToFront(mtf, index);\n  }\n}\n\n/* Contains a collection of huffman trees with the same alphabet size. */\nfunction HuffmanTreeGroup(alphabet_size, num_htrees) {\n  this.alphabet_size = alphabet_size;\n  this.num_htrees = num_htrees;\n  this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]);  \n  this.htrees = new Uint32Array(num_htrees);\n}\n\nHuffmanTreeGroup.prototype.decode = function(br) {\n  var i;\n  var table_size;\n  var next = 0;\n  for (i = 0; i < this.num_htrees; ++i) {\n    this.htrees[i] = next;\n    table_size = ReadHuffmanCode(this.alphabet_size, this.codes, next, br);\n    next += table_size;\n  }\n};\n\nfunction DecodeContextMap(context_map_size, br) {\n  var out = { num_htrees: null, context_map: null };\n  var use_rle_for_zeros;\n  var max_run_length_prefix = 0;\n  var table;\n  var i;\n  \n  br.readMoreInput();\n  var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1;\n\n  var context_map = out.context_map = new Uint8Array(context_map_size);\n  if (num_htrees <= 1) {\n    return out;\n  }\n\n  use_rle_for_zeros = br.readBits(1);\n  if (use_rle_for_zeros) {\n    max_run_length_prefix = br.readBits(4) + 1;\n  }\n  \n  table = [];\n  for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) {\n    table[i] = new HuffmanCode(0, 0);\n  }\n  \n  ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br);\n  \n  for (i = 0; i < context_map_size;) {\n    var code;\n\n    br.readMoreInput();\n    code = ReadSymbol(table, 0, br);\n    if (code === 0) {\n      context_map[i] = 0;\n      ++i;\n    } else if (code <= max_run_length_prefix) {\n      var reps = 1 + (1 << code) + br.readBits(code);\n      while (--reps) {\n        if (i >= context_map_size) {\n          throw new Error(\"[DecodeContextMap] i >= context_map_size\");\n        }\n        context_map[i] = 0;\n        ++i;\n      }\n    } else {\n      context_map[i] = code - max_run_length_prefix;\n      ++i;\n    }\n  }\n  if (br.readBits(1)) {\n    InverseMoveToFrontTransform(context_map, context_map_size);\n  }\n  \n  return out;\n}\n\nfunction DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) {\n  var ringbuffer = tree_type * 2;\n  var index = tree_type;\n  var type_code = ReadSymbol(trees, tree_type * HUFFMAN_MAX_TABLE_SIZE, br);\n  var block_type;\n  if (type_code === 0) {\n    block_type = ringbuffers[ringbuffer + (indexes[index] & 1)];\n  } else if (type_code === 1) {\n    block_type = ringbuffers[ringbuffer + ((indexes[index] - 1) & 1)] + 1;\n  } else {\n    block_type = type_code - 2;\n  }\n  if (block_type >= max_block_type) {\n    block_type -= max_block_type;\n  }\n  block_types[tree_type] = block_type;\n  ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type;\n  ++indexes[index];\n}\n\nfunction CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) {\n  var rb_size = ringbuffer_mask + 1;\n  var rb_pos = pos & ringbuffer_mask;\n  var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK;\n  var nbytes;\n\n  /* For short lengths copy byte-by-byte */\n  if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) {\n    while (len-- > 0) {\n      br.readMoreInput();\n      ringbuffer[rb_pos++] = br.readBits(8);\n      if (rb_pos === rb_size) {\n        output.write(ringbuffer, rb_size);\n        rb_pos = 0;\n      }\n    }\n    return;\n  }\n\n  if (br.bit_end_pos_ < 32) {\n    throw new Error('[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32');\n  }\n\n  /* Copy remaining 0-4 bytes from br.val_ to ringbuffer. */\n  while (br.bit_pos_ < 32) {\n    ringbuffer[rb_pos] = (br.val_ >>> br.bit_pos_);\n    br.bit_pos_ += 8;\n    ++rb_pos;\n    --len;\n  }\n\n  /* Copy remaining bytes from br.buf_ to ringbuffer. */\n  nbytes = (br.bit_end_pos_ - br.bit_pos_) >> 3;\n  if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) {\n    var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos;\n    for (var x = 0; x < tail; x++)\n      ringbuffer[rb_pos + x] = br.buf_[br_pos + x];\n    \n    nbytes -= tail;\n    rb_pos += tail;\n    len -= tail;\n    br_pos = 0;\n  }\n\n  for (var x = 0; x < nbytes; x++)\n    ringbuffer[rb_pos + x] = br.buf_[br_pos + x];\n  \n  rb_pos += nbytes;\n  len -= nbytes;\n\n  /* If we wrote past the logical end of the ringbuffer, copy the tail of the\n     ringbuffer to its beginning and flush the ringbuffer to the output. */\n  if (rb_pos >= rb_size) {\n    output.write(ringbuffer, rb_size);\n    rb_pos -= rb_size;    \n    for (var x = 0; x < rb_pos; x++)\n      ringbuffer[x] = ringbuffer[rb_size + x];\n  }\n\n  /* If we have more to copy than the remaining size of the ringbuffer, then we\n     first fill the ringbuffer from the input and then flush the ringbuffer to\n     the output */\n  while (rb_pos + len >= rb_size) {\n    nbytes = rb_size - rb_pos;\n    if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) {\n      throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');\n    }\n    output.write(ringbuffer, rb_size);\n    len -= nbytes;\n    rb_pos = 0;\n  }\n\n  /* Copy straight from the input onto the ringbuffer. The ringbuffer will be\n     flushed to the output at a later time. */\n  if (br.input_.read(ringbuffer, rb_pos, len) < len) {\n    throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');\n  }\n\n  /* Restore the state of the bit reader. */\n  br.reset();\n}\n\n/* Advances the bit reader position to the next byte boundary and verifies\n   that any skipped bits are set to zero. */\nfunction JumpToByteBoundary(br) {\n  var new_bit_pos = (br.bit_pos_ + 7) & ~7;\n  var pad_bits = br.readBits(new_bit_pos - br.bit_pos_);\n  return pad_bits == 0;\n}\n\nfunction BrotliDecompressedSize(buffer) {\n  var input = new BrotliInput(buffer);\n  var br = new BrotliBitReader(input);\n  DecodeWindowBits(br);\n  var out = DecodeMetaBlockLength(br);\n  return out.meta_block_length;\n}\n\n__webpack_unused_export__ = BrotliDecompressedSize;\n\nfunction BrotliDecompressBuffer(buffer, output_size) {\n  var input = new BrotliInput(buffer);\n  \n  if (output_size == null) {\n    output_size = BrotliDecompressedSize(buffer);\n  }\n  \n  var output_buffer = new Uint8Array(output_size);\n  var output = new BrotliOutput(output_buffer);\n  \n  BrotliDecompress(input, output);\n  \n  if (output.pos < output.buffer.length) {\n    output.buffer = output.buffer.subarray(0, output.pos);\n  }\n  \n  return output.buffer;\n}\n\nexports.BrotliDecompressBuffer = BrotliDecompressBuffer;\n\nfunction BrotliDecompress(input, output) {\n  var i;\n  var pos = 0;\n  var input_end = 0;\n  var window_bits = 0;\n  var max_backward_distance;\n  var max_distance = 0;\n  var ringbuffer_size;\n  var ringbuffer_mask;\n  var ringbuffer;\n  var ringbuffer_end;\n  /* This ring buffer holds a few past copy distances that will be used by */\n  /* some special distance codes. */\n  var dist_rb = [ 16, 15, 11, 4 ];\n  var dist_rb_idx = 0;\n  /* The previous 2 bytes used for context. */\n  var prev_byte1 = 0;\n  var prev_byte2 = 0;\n  var hgroup = [new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0)];\n  var block_type_trees;\n  var block_len_trees;\n  var br;\n\n  /* We need the slack region for the following reasons:\n       - always doing two 8-byte copies for fast backward copying\n       - transforms\n       - flushing the input ringbuffer when decoding uncompressed blocks */\n  var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE;\n\n  br = new BrotliBitReader(input);\n\n  /* Decode window size. */\n  window_bits = DecodeWindowBits(br);\n  max_backward_distance = (1 << window_bits) - 16;\n\n  ringbuffer_size = 1 << window_bits;\n  ringbuffer_mask = ringbuffer_size - 1;\n  ringbuffer = new Uint8Array(ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength);\n  ringbuffer_end = ringbuffer_size;\n\n  block_type_trees = [];\n  block_len_trees = [];\n  for (var x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++) {\n    block_type_trees[x] = new HuffmanCode(0, 0);\n    block_len_trees[x] = new HuffmanCode(0, 0);\n  }\n\n  while (!input_end) {\n    var meta_block_remaining_len = 0;\n    var is_uncompressed;\n    var block_length = [ 1 << 28, 1 << 28, 1 << 28 ];\n    var block_type = [ 0 ];\n    var num_block_types = [ 1, 1, 1 ];\n    var block_type_rb = [ 0, 1, 0, 1, 0, 1 ];\n    var block_type_rb_index = [ 0 ];\n    var distance_postfix_bits;\n    var num_direct_distance_codes;\n    var distance_postfix_mask;\n    var num_distance_codes;\n    var context_map = null;\n    var context_modes = null;\n    var num_literal_htrees;\n    var dist_context_map = null;\n    var num_dist_htrees;\n    var context_offset = 0;\n    var context_map_slice = null;\n    var literal_htree_index = 0;\n    var dist_context_offset = 0;\n    var dist_context_map_slice = null;\n    var dist_htree_index = 0;\n    var context_lookup_offset1 = 0;\n    var context_lookup_offset2 = 0;\n    var context_mode;\n    var htree_command;\n\n    for (i = 0; i < 3; ++i) {\n      hgroup[i].codes = null;\n      hgroup[i].htrees = null;\n    }\n\n    br.readMoreInput();\n    \n    var _out = DecodeMetaBlockLength(br);\n    meta_block_remaining_len = _out.meta_block_length;\n    if (pos + meta_block_remaining_len > output.buffer.length) {\n      /* We need to grow the output buffer to fit the additional data. */\n      var tmp = new Uint8Array( pos + meta_block_remaining_len );\n      tmp.set( output.buffer );\n      output.buffer = tmp;\n    }    \n    input_end = _out.input_end;\n    is_uncompressed = _out.is_uncompressed;\n    \n    if (_out.is_metadata) {\n      JumpToByteBoundary(br);\n      \n      for (; meta_block_remaining_len > 0; --meta_block_remaining_len) {\n        br.readMoreInput();\n        /* Read one byte and ignore it. */\n        br.readBits(8);\n      }\n      \n      continue;\n    }\n    \n    if (meta_block_remaining_len === 0) {\n      continue;\n    }\n    \n    if (is_uncompressed) {\n      br.bit_pos_ = (br.bit_pos_ + 7) & ~7;\n      CopyUncompressedBlockToOutput(output, meta_block_remaining_len, pos,\n                                    ringbuffer, ringbuffer_mask, br);\n      pos += meta_block_remaining_len;\n      continue;\n    }\n    \n    for (i = 0; i < 3; ++i) {\n      num_block_types[i] = DecodeVarLenUint8(br) + 1;\n      if (num_block_types[i] >= 2) {\n        ReadHuffmanCode(num_block_types[i] + 2, block_type_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n        ReadHuffmanCode(kNumBlockLengthCodes, block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n        block_length[i] = ReadBlockLength(block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n        block_type_rb_index[i] = 1;\n      }\n    }\n    \n    br.readMoreInput();\n    \n    distance_postfix_bits = br.readBits(2);\n    num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits);\n    distance_postfix_mask = (1 << distance_postfix_bits) - 1;\n    num_distance_codes = (num_direct_distance_codes + (48 << distance_postfix_bits));\n    context_modes = new Uint8Array(num_block_types[0]);\n\n    for (i = 0; i < num_block_types[0]; ++i) {\n       br.readMoreInput();\n       context_modes[i] = (br.readBits(2) << 1);\n    }\n    \n    var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br);\n    num_literal_htrees = _o1.num_htrees;\n    context_map = _o1.context_map;\n    \n    var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br);\n    num_dist_htrees = _o2.num_htrees;\n    dist_context_map = _o2.context_map;\n    \n    hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees);\n    hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]);\n    hgroup[2] = new HuffmanTreeGroup(num_distance_codes, num_dist_htrees);\n\n    for (i = 0; i < 3; ++i) {\n      hgroup[i].decode(br);\n    }\n\n    context_map_slice = 0;\n    dist_context_map_slice = 0;\n    context_mode = context_modes[block_type[0]];\n    context_lookup_offset1 = Context.lookupOffsets[context_mode];\n    context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];\n    htree_command = hgroup[1].htrees[0];\n\n    while (meta_block_remaining_len > 0) {\n      var cmd_code;\n      var range_idx;\n      var insert_code;\n      var copy_code;\n      var insert_length;\n      var copy_length;\n      var distance_code;\n      var distance;\n      var context;\n      var j;\n      var copy_dst;\n\n      br.readMoreInput();\n      \n      if (block_length[1] === 0) {\n        DecodeBlockType(num_block_types[1],\n                        block_type_trees, 1, block_type, block_type_rb,\n                        block_type_rb_index, br);\n        block_length[1] = ReadBlockLength(block_len_trees, HUFFMAN_MAX_TABLE_SIZE, br);\n        htree_command = hgroup[1].htrees[block_type[1]];\n      }\n      --block_length[1];\n      cmd_code = ReadSymbol(hgroup[1].codes, htree_command, br);\n      range_idx = cmd_code >> 6;\n      if (range_idx >= 2) {\n        range_idx -= 2;\n        distance_code = -1;\n      } else {\n        distance_code = 0;\n      }\n      insert_code = Prefix.kInsertRangeLut[range_idx] + ((cmd_code >> 3) & 7);\n      copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7);\n      insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset +\n          br.readBits(Prefix.kInsertLengthPrefixCode[insert_code].nbits);\n      copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset +\n          br.readBits(Prefix.kCopyLengthPrefixCode[copy_code].nbits);\n      prev_byte1 = ringbuffer[pos-1 & ringbuffer_mask];\n      prev_byte2 = ringbuffer[pos-2 & ringbuffer_mask];\n      for (j = 0; j < insert_length; ++j) {\n        br.readMoreInput();\n\n        if (block_length[0] === 0) {\n          DecodeBlockType(num_block_types[0],\n                          block_type_trees, 0, block_type, block_type_rb,\n                          block_type_rb_index, br);\n          block_length[0] = ReadBlockLength(block_len_trees, 0, br);\n          context_offset = block_type[0] << kLiteralContextBits;\n          context_map_slice = context_offset;\n          context_mode = context_modes[block_type[0]];\n          context_lookup_offset1 = Context.lookupOffsets[context_mode];\n          context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];\n        }\n        context = (Context.lookup[context_lookup_offset1 + prev_byte1] |\n                   Context.lookup[context_lookup_offset2 + prev_byte2]);\n        literal_htree_index = context_map[context_map_slice + context];\n        --block_length[0];\n        prev_byte2 = prev_byte1;\n        prev_byte1 = ReadSymbol(hgroup[0].codes, hgroup[0].htrees[literal_htree_index], br);\n        ringbuffer[pos & ringbuffer_mask] = prev_byte1;\n        if ((pos & ringbuffer_mask) === ringbuffer_mask) {\n          output.write(ringbuffer, ringbuffer_size);\n        }\n        ++pos;\n      }\n      meta_block_remaining_len -= insert_length;\n      if (meta_block_remaining_len <= 0) break;\n\n      if (distance_code < 0) {\n        var context;\n        \n        br.readMoreInput();\n        if (block_length[2] === 0) {\n          DecodeBlockType(num_block_types[2],\n                          block_type_trees, 2, block_type, block_type_rb,\n                          block_type_rb_index, br);\n          block_length[2] = ReadBlockLength(block_len_trees, 2 * HUFFMAN_MAX_TABLE_SIZE, br);\n          dist_context_offset = block_type[2] << kDistanceContextBits;\n          dist_context_map_slice = dist_context_offset;\n        }\n        --block_length[2];\n        context = (copy_length > 4 ? 3 : copy_length - 2) & 0xff;\n        dist_htree_index = dist_context_map[dist_context_map_slice + context];\n        distance_code = ReadSymbol(hgroup[2].codes, hgroup[2].htrees[dist_htree_index], br);\n        if (distance_code >= num_direct_distance_codes) {\n          var nbits;\n          var postfix;\n          var offset;\n          distance_code -= num_direct_distance_codes;\n          postfix = distance_code & distance_postfix_mask;\n          distance_code >>= distance_postfix_bits;\n          nbits = (distance_code >> 1) + 1;\n          offset = ((2 + (distance_code & 1)) << nbits) - 4;\n          distance_code = num_direct_distance_codes +\n              ((offset + br.readBits(nbits)) <<\n               distance_postfix_bits) + postfix;\n        }\n      }\n\n      /* Convert the distance code to the actual distance by possibly looking */\n      /* up past distnaces from the ringbuffer. */\n      distance = TranslateShortCodes(distance_code, dist_rb, dist_rb_idx);\n      if (distance < 0) {\n        throw new Error('[BrotliDecompress] invalid distance');\n      }\n\n      if (pos < max_backward_distance &&\n          max_distance !== max_backward_distance) {\n        max_distance = pos;\n      } else {\n        max_distance = max_backward_distance;\n      }\n\n      copy_dst = pos & ringbuffer_mask;\n\n      if (distance > max_distance) {\n        if (copy_length >= BrotliDictionary.minDictionaryWordLength &&\n            copy_length <= BrotliDictionary.maxDictionaryWordLength) {\n          var offset = BrotliDictionary.offsetsByLength[copy_length];\n          var word_id = distance - max_distance - 1;\n          var shift = BrotliDictionary.sizeBitsByLength[copy_length];\n          var mask = (1 << shift) - 1;\n          var word_idx = word_id & mask;\n          var transform_idx = word_id >> shift;\n          offset += word_idx * copy_length;\n          if (transform_idx < Transform.kNumTransforms) {\n            var len = Transform.transformDictionaryWord(ringbuffer, copy_dst, offset, copy_length, transform_idx);\n            copy_dst += len;\n            pos += len;\n            meta_block_remaining_len -= len;\n            if (copy_dst >= ringbuffer_end) {\n              output.write(ringbuffer, ringbuffer_size);\n              \n              for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++)\n                ringbuffer[_x] = ringbuffer[ringbuffer_end + _x];\n            }\n          } else {\n            throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n              \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n          }\n        } else {\n          throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n            \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n        }\n      } else {\n        if (distance_code > 0) {\n          dist_rb[dist_rb_idx & 3] = distance;\n          ++dist_rb_idx;\n        }\n\n        if (copy_length > meta_block_remaining_len) {\n          throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n            \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n        }\n\n        for (j = 0; j < copy_length; ++j) {\n          ringbuffer[pos & ringbuffer_mask] = ringbuffer[(pos - distance) & ringbuffer_mask];\n          if ((pos & ringbuffer_mask) === ringbuffer_mask) {\n            output.write(ringbuffer, ringbuffer_size);\n          }\n          ++pos;\n          --meta_block_remaining_len;\n        }\n      }\n\n      /* When we get here, we must have inserted at least one literal and */\n      /* made a copy of at least length two, therefore accessing the last 2 */\n      /* bytes is valid. */\n      prev_byte1 = ringbuffer[(pos - 1) & ringbuffer_mask];\n      prev_byte2 = ringbuffer[(pos - 2) & ringbuffer_mask];\n    }\n\n    /* Protect pos from overflow, wrap it around at every GB of input data */\n    pos &= 0x3fffffff;\n  }\n\n  output.write(ringbuffer, pos & ringbuffer_mask);\n}\n\n__webpack_unused_export__ = BrotliDecompress;\n\nBrotliDictionary.init();\n\n\n/***/ }),\n\n/***/ 5340:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar base64 = __webpack_require__(9742);\n\n/**\n * The normal dictionary-data.js is quite large, which makes it \n * unsuitable for browser usage. In order to make it smaller, \n * we read dictionary.bin, which is a compressed version of\n * the dictionary, and on initial load, Brotli decompresses \n * it's own dictionary. 😜\n */\nexports.init = function() {\n  var BrotliDecompressBuffer = (__webpack_require__(6450).BrotliDecompressBuffer);\n  var compressed = base64.toByteArray(__webpack_require__(2722));\n  return BrotliDecompressBuffer(compressed);\n};\n\n\n/***/ }),\n\n/***/ 2722:\n/***/ (function(module) {\n\nmodule.exports=\"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\";\n\n\n/***/ }),\n\n/***/ 5139:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Collection of static dictionary words.\n*/\n\nvar data = __webpack_require__(5340);\nexports.init = function() {\n  exports.dictionary = data.init();\n};\n\nexports.offsetsByLength = new Uint32Array([\n     0,     0,     0,     0,     0,  4096,  9216, 21504, 35840, 44032,\n 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536,\n 115968, 118528, 119872, 121280, 122016,\n]);\n\nexports.sizeBitsByLength = new Uint8Array([\n  0,  0,  0,  0, 10, 10, 11, 11, 10, 10,\n 10, 10, 10,  9,  9,  8,  7,  7,  8,  7,\n  7,  6,  6,  5,  5,\n]);\n\nexports.minDictionaryWordLength = 4;\nexports.maxDictionaryWordLength = 24;\n\n\n/***/ }),\n\n/***/ 966:\n/***/ (function(__unused_webpack_module, exports) {\n\nfunction HuffmanCode(bits, value) {\n  this.bits = bits;   /* number of bits used for this symbol */\n  this.value = value; /* symbol value or table offset */\n}\n\nexports.h = HuffmanCode;\n\nvar MAX_LENGTH = 15;\n\n/* Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the\n   bit-wise reversal of the len least significant bits of key. */\nfunction GetNextKey(key, len) {\n  var step = 1 << (len - 1);\n  while (key & step) {\n    step >>= 1;\n  }\n  return (key & (step - 1)) + step;\n}\n\n/* Stores code in table[0], table[step], table[2*step], ..., table[end] */\n/* Assumes that end is an integer multiple of step */\nfunction ReplicateValue(table, i, step, end, code) {\n  do {\n    end -= step;\n    table[i + end] = new HuffmanCode(code.bits, code.value);\n  } while (end > 0);\n}\n\n/* Returns the table width of the next 2nd level table. count is the histogram\n   of bit lengths for the remaining symbols, len is the code length of the next\n   processed symbol */\nfunction NextTableBitSize(count, len, root_bits) {\n  var left = 1 << (len - root_bits);\n  while (len < MAX_LENGTH) {\n    left -= count[len];\n    if (left <= 0) break;\n    ++len;\n    left <<= 1;\n  }\n  return len - root_bits;\n}\n\nexports.g = function(root_table, table, root_bits, code_lengths, code_lengths_size) {\n  var start_table = table;\n  var code;            /* current table entry */\n  var len;             /* current code length */\n  var symbol;          /* symbol index in original or sorted table */\n  var key;             /* reversed prefix code */\n  var step;            /* step size to replicate values in current table */\n  var low;             /* low bits for current root entry */\n  var mask;            /* mask for low bits */\n  var table_bits;      /* key length of current table */\n  var table_size;      /* size of current table */\n  var total_size;      /* sum of root table size and 2nd level table sizes */\n  var sorted;          /* symbols sorted by code length */\n  var count = new Int32Array(MAX_LENGTH + 1);  /* number of codes of each length */\n  var offset = new Int32Array(MAX_LENGTH + 1);  /* offsets in sorted table for each length */\n\n  sorted = new Int32Array(code_lengths_size);\n\n  /* build histogram of code lengths */\n  for (symbol = 0; symbol < code_lengths_size; symbol++) {\n    count[code_lengths[symbol]]++;\n  }\n\n  /* generate offsets into sorted symbol table by code length */\n  offset[1] = 0;\n  for (len = 1; len < MAX_LENGTH; len++) {\n    offset[len + 1] = offset[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (symbol = 0; symbol < code_lengths_size; symbol++) {\n    if (code_lengths[symbol] !== 0) {\n      sorted[offset[code_lengths[symbol]]++] = symbol;\n    }\n  }\n  \n  table_bits = root_bits;\n  table_size = 1 << table_bits;\n  total_size = table_size;\n\n  /* special case code with only one value */\n  if (offset[MAX_LENGTH] === 1) {\n    for (key = 0; key < total_size; ++key) {\n      root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff);\n    }\n    \n    return total_size;\n  }\n\n  /* fill in root table */\n  key = 0;\n  symbol = 0;\n  for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) {\n    for (; count[len] > 0; --count[len]) {\n      code = new HuffmanCode(len & 0xff, sorted[symbol++] & 0xffff);\n      ReplicateValue(root_table, table + key, step, table_size, code);\n      key = GetNextKey(key, len);\n    }\n  }\n\n  /* fill in 2nd level tables and add pointers to root table */\n  mask = total_size - 1;\n  low = -1;\n  for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) {\n    for (; count[len] > 0; --count[len]) {\n      if ((key & mask) !== low) {\n        table += table_size;\n        table_bits = NextTableBitSize(count, len, root_bits);\n        table_size = 1 << table_bits;\n        total_size += table_size;\n        low = key & mask;\n        root_table[start_table + low] = new HuffmanCode((table_bits + root_bits) & 0xff, ((table - start_table) - low) & 0xffff);\n      }\n      code = new HuffmanCode((len - root_bits) & 0xff, sorted[symbol++] & 0xffff);\n      ReplicateValue(root_table, table + (key >> root_bits), step, table_size, code);\n      key = GetNextKey(key, len);\n    }\n  }\n  \n  return total_size;\n}\n\n\n/***/ }),\n\n/***/ 8435:\n/***/ (function(__unused_webpack_module, exports) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Lookup tables to map prefix codes to value ranges. This is used during\n   decoding of the block lengths, literal insertion lengths and copy lengths.\n*/\n\n/* Represents the range of values belonging to a prefix code: */\n/* [offset, offset + 2^nbits) */\nfunction PrefixCodeRange(offset, nbits) {\n  this.offset = offset;\n  this.nbits = nbits;\n}\n\nexports.kBlockLengthPrefixCode = [\n  new PrefixCodeRange(1, 2), new PrefixCodeRange(5, 2), new PrefixCodeRange(9, 2), new PrefixCodeRange(13, 2),\n  new PrefixCodeRange(17, 3), new PrefixCodeRange(25, 3), new PrefixCodeRange(33, 3), new PrefixCodeRange(41, 3),\n  new PrefixCodeRange(49, 4), new PrefixCodeRange(65, 4), new PrefixCodeRange(81, 4), new PrefixCodeRange(97, 4),\n  new PrefixCodeRange(113, 5), new PrefixCodeRange(145, 5), new PrefixCodeRange(177, 5), new PrefixCodeRange(209, 5),\n  new PrefixCodeRange(241, 6), new PrefixCodeRange(305, 6), new PrefixCodeRange(369, 7), new PrefixCodeRange(497, 8),\n  new PrefixCodeRange(753, 9), new PrefixCodeRange(1265, 10), new PrefixCodeRange(2289, 11), new PrefixCodeRange(4337, 12),\n  new PrefixCodeRange(8433, 13), new PrefixCodeRange(16625, 24)\n];\n\nexports.kInsertLengthPrefixCode = [\n  new PrefixCodeRange(0, 0), new PrefixCodeRange(1, 0), new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0),\n  new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), new PrefixCodeRange(6, 1), new PrefixCodeRange(8, 1),\n  new PrefixCodeRange(10, 2), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 3), new PrefixCodeRange(26, 3),\n  new PrefixCodeRange(34, 4), new PrefixCodeRange(50, 4), new PrefixCodeRange(66, 5), new PrefixCodeRange(98, 5),\n  new PrefixCodeRange(130, 6), new PrefixCodeRange(194, 7), new PrefixCodeRange(322, 8), new PrefixCodeRange(578, 9),\n  new PrefixCodeRange(1090, 10), new PrefixCodeRange(2114, 12), new PrefixCodeRange(6210, 14), new PrefixCodeRange(22594, 24),\n];\n\nexports.kCopyLengthPrefixCode = [\n  new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0),\n  new PrefixCodeRange(6, 0), new PrefixCodeRange(7, 0), new PrefixCodeRange(8, 0), new PrefixCodeRange(9, 0),\n  new PrefixCodeRange(10, 1), new PrefixCodeRange(12, 1), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 2),\n  new PrefixCodeRange(22, 3), new PrefixCodeRange(30, 3), new PrefixCodeRange(38, 4), new PrefixCodeRange(54, 4),\n  new PrefixCodeRange(70, 5), new PrefixCodeRange(102, 5), new PrefixCodeRange(134, 6), new PrefixCodeRange(198, 7),\n  new PrefixCodeRange(326, 8), new PrefixCodeRange(582, 9), new PrefixCodeRange(1094, 10), new PrefixCodeRange(2118, 24),\n];\n\nexports.kInsertRangeLut = [\n  0, 0, 8, 8, 0, 16, 8, 16, 16,\n];\n\nexports.kCopyRangeLut = [\n  0, 8, 0, 8, 16, 0, 16, 8, 16,\n];\n\n\n/***/ }),\n\n/***/ 6154:\n/***/ (function(__unused_webpack_module, exports) {\n\nfunction BrotliInput(buffer) {\n  this.buffer = buffer;\n  this.pos = 0;\n}\n\nBrotliInput.prototype.read = function(buf, i, count) {\n  if (this.pos + count > this.buffer.length) {\n    count = this.buffer.length - this.pos;\n  }\n  \n  for (var p = 0; p < count; p++)\n    buf[i + p] = this.buffer[this.pos + p];\n  \n  this.pos += count;\n  return count;\n}\n\nexports.g = BrotliInput;\n\nfunction BrotliOutput(buf) {\n  this.buffer = buf;\n  this.pos = 0;\n}\n\nBrotliOutput.prototype.write = function(buf, count) {\n  if (this.pos + count > this.buffer.length)\n    throw new Error('Output buffer is not large enough');\n  \n  this.buffer.set(buf.subarray(0, count), this.pos);\n  this.pos += count;\n  return count;\n};\n\nexports.j = BrotliOutput;\n\n\n/***/ }),\n\n/***/ 2973:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Transformations on dictionary words.\n*/\n\nvar BrotliDictionary = __webpack_require__(5139);\n\nvar kIdentity       = 0;\nvar kOmitLast1      = 1;\nvar kOmitLast2      = 2;\nvar kOmitLast3      = 3;\nvar kOmitLast4      = 4;\nvar kOmitLast5      = 5;\nvar kOmitLast6      = 6;\nvar kOmitLast7      = 7;\nvar kOmitLast8      = 8;\nvar kOmitLast9      = 9;\nvar kUppercaseFirst = 10;\nvar kUppercaseAll   = 11;\nvar kOmitFirst1     = 12;\nvar kOmitFirst2     = 13;\nvar kOmitFirst3     = 14;\nvar kOmitFirst4     = 15;\nvar kOmitFirst5     = 16;\nvar kOmitFirst6     = 17;\nvar kOmitFirst7     = 18;\nvar kOmitFirst8     = 19;\nvar kOmitFirst9     = 20;\n\nfunction Transform(prefix, transform, suffix) {\n  this.prefix = new Uint8Array(prefix.length);\n  this.transform = transform;\n  this.suffix = new Uint8Array(suffix.length);\n  \n  for (var i = 0; i < prefix.length; i++)\n    this.prefix[i] = prefix.charCodeAt(i);\n  \n  for (var i = 0; i < suffix.length; i++)\n    this.suffix[i] = suffix.charCodeAt(i);\n}\n\nvar kTransforms = [\n     new Transform(         \"\", kIdentity,       \"\"           ),\n     new Transform(         \"\", kIdentity,       \" \"          ),\n     new Transform(        \" \", kIdentity,       \" \"          ),\n     new Transform(         \"\", kOmitFirst1,     \"\"           ),\n     new Transform(         \"\", kUppercaseFirst, \" \"          ),\n     new Transform(         \"\", kIdentity,       \" the \"      ),\n     new Transform(        \" \", kIdentity,       \"\"           ),\n     new Transform(       \"s \", kIdentity,       \" \"          ),\n     new Transform(         \"\", kIdentity,       \" of \"       ),\n     new Transform(         \"\", kUppercaseFirst, \"\"           ),\n     new Transform(         \"\", kIdentity,       \" and \"      ),\n     new Transform(         \"\", kOmitFirst2,     \"\"           ),\n     new Transform(         \"\", kOmitLast1,      \"\"           ),\n     new Transform(       \", \", kIdentity,       \" \"          ),\n     new Transform(         \"\", kIdentity,       \", \"         ),\n     new Transform(        \" \", kUppercaseFirst, \" \"          ),\n     new Transform(         \"\", kIdentity,       \" in \"       ),\n     new Transform(         \"\", kIdentity,       \" to \"       ),\n     new Transform(       \"e \", kIdentity,       \" \"          ),\n     new Transform(         \"\", kIdentity,       \"\\\"\"         ),\n     new Transform(         \"\", kIdentity,       \".\"          ),\n     new Transform(         \"\", kIdentity,       \"\\\">\"        ),\n     new Transform(         \"\", kIdentity,       \"\\n\"         ),\n     new Transform(         \"\", kOmitLast3,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \"]\"          ),\n     new Transform(         \"\", kIdentity,       \" for \"      ),\n     new Transform(         \"\", kOmitFirst3,     \"\"           ),\n     new Transform(         \"\", kOmitLast2,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \" a \"        ),\n     new Transform(         \"\", kIdentity,       \" that \"     ),\n     new Transform(        \" \", kUppercaseFirst, \"\"           ),\n     new Transform(         \"\", kIdentity,       \". \"         ),\n     new Transform(        \".\", kIdentity,       \"\"           ),\n     new Transform(        \" \", kIdentity,       \", \"         ),\n     new Transform(         \"\", kOmitFirst4,     \"\"           ),\n     new Transform(         \"\", kIdentity,       \" with \"     ),\n     new Transform(         \"\", kIdentity,       \"'\"          ),\n     new Transform(         \"\", kIdentity,       \" from \"     ),\n     new Transform(         \"\", kIdentity,       \" by \"       ),\n     new Transform(         \"\", kOmitFirst5,     \"\"           ),\n     new Transform(         \"\", kOmitFirst6,     \"\"           ),\n     new Transform(    \" the \", kIdentity,       \"\"           ),\n     new Transform(         \"\", kOmitLast4,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \". The \"     ),\n     new Transform(         \"\", kUppercaseAll,   \"\"           ),\n     new Transform(         \"\", kIdentity,       \" on \"       ),\n     new Transform(         \"\", kIdentity,       \" as \"       ),\n     new Transform(         \"\", kIdentity,       \" is \"       ),\n     new Transform(         \"\", kOmitLast7,      \"\"           ),\n     new Transform(         \"\", kOmitLast1,      \"ing \"       ),\n     new Transform(         \"\", kIdentity,       \"\\n\\t\"       ),\n     new Transform(         \"\", kIdentity,       \":\"          ),\n     new Transform(        \" \", kIdentity,       \". \"         ),\n     new Transform(         \"\", kIdentity,       \"ed \"        ),\n     new Transform(         \"\", kOmitFirst9,     \"\"           ),\n     new Transform(         \"\", kOmitFirst7,     \"\"           ),\n     new Transform(         \"\", kOmitLast6,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \"(\"          ),\n     new Transform(         \"\", kUppercaseFirst, \", \"         ),\n     new Transform(         \"\", kOmitLast8,      \"\"           ),\n     new Transform(         \"\", kIdentity,       \" at \"       ),\n     new Transform(         \"\", kIdentity,       \"ly \"        ),\n     new Transform(    \" the \", kIdentity,       \" of \"       ),\n     new Transform(         \"\", kOmitLast5,      \"\"           ),\n     new Transform(         \"\", kOmitLast9,      \"\"           ),\n     new Transform(        \" \", kUppercaseFirst, \", \"         ),\n     new Transform(         \"\", kUppercaseFirst, \"\\\"\"         ),\n     new Transform(        \".\", kIdentity,       \"(\"          ),\n     new Transform(         \"\", kUppercaseAll,   \" \"          ),\n     new Transform(         \"\", kUppercaseFirst, \"\\\">\"        ),\n     new Transform(         \"\", kIdentity,       \"=\\\"\"        ),\n     new Transform(        \" \", kIdentity,       \".\"          ),\n     new Transform(    \".com/\", kIdentity,       \"\"           ),\n     new Transform(    \" the \", kIdentity,       \" of the \"   ),\n     new Transform(         \"\", kUppercaseFirst, \"'\"          ),\n     new Transform(         \"\", kIdentity,       \". This \"    ),\n     new Transform(         \"\", kIdentity,       \",\"          ),\n     new Transform(        \".\", kIdentity,       \" \"          ),\n     new Transform(         \"\", kUppercaseFirst, \"(\"          ),\n     new Transform(         \"\", kUppercaseFirst, \".\"          ),\n     new Transform(         \"\", kIdentity,       \" not \"      ),\n     new Transform(        \" \", kIdentity,       \"=\\\"\"        ),\n     new Transform(         \"\", kIdentity,       \"er \"        ),\n     new Transform(        \" \", kUppercaseAll,   \" \"          ),\n     new Transform(         \"\", kIdentity,       \"al \"        ),\n     new Transform(        \" \", kUppercaseAll,   \"\"           ),\n     new Transform(         \"\", kIdentity,       \"='\"         ),\n     new Transform(         \"\", kUppercaseAll,   \"\\\"\"         ),\n     new Transform(         \"\", kUppercaseFirst, \". \"         ),\n     new Transform(        \" \", kIdentity,       \"(\"          ),\n     new Transform(         \"\", kIdentity,       \"ful \"       ),\n     new Transform(        \" \", kUppercaseFirst, \". \"         ),\n     new Transform(         \"\", kIdentity,       \"ive \"       ),\n     new Transform(         \"\", kIdentity,       \"less \"      ),\n     new Transform(         \"\", kUppercaseAll,   \"'\"          ),\n     new Transform(         \"\", kIdentity,       \"est \"       ),\n     new Transform(        \" \", kUppercaseFirst, \".\"          ),\n     new Transform(         \"\", kUppercaseAll,   \"\\\">\"        ),\n     new Transform(        \" \", kIdentity,       \"='\"         ),\n     new Transform(         \"\", kUppercaseFirst, \",\"          ),\n     new Transform(         \"\", kIdentity,       \"ize \"       ),\n     new Transform(         \"\", kUppercaseAll,   \".\"          ),\n     new Transform( \"\\xc2\\xa0\", kIdentity,       \"\"           ),\n     new Transform(        \" \", kIdentity,       \",\"          ),\n     new Transform(         \"\", kUppercaseFirst, \"=\\\"\"        ),\n     new Transform(         \"\", kUppercaseAll,   \"=\\\"\"        ),\n     new Transform(         \"\", kIdentity,       \"ous \"       ),\n     new Transform(         \"\", kUppercaseAll,   \", \"         ),\n     new Transform(         \"\", kUppercaseFirst, \"='\"         ),\n     new Transform(        \" \", kUppercaseFirst, \",\"          ),\n     new Transform(        \" \", kUppercaseAll,   \"=\\\"\"        ),\n     new Transform(        \" \", kUppercaseAll,   \", \"         ),\n     new Transform(         \"\", kUppercaseAll,   \",\"          ),\n     new Transform(         \"\", kUppercaseAll,   \"(\"          ),\n     new Transform(         \"\", kUppercaseAll,   \". \"         ),\n     new Transform(        \" \", kUppercaseAll,   \".\"          ),\n     new Transform(         \"\", kUppercaseAll,   \"='\"         ),\n     new Transform(        \" \", kUppercaseAll,   \". \"         ),\n     new Transform(        \" \", kUppercaseFirst, \"=\\\"\"        ),\n     new Transform(        \" \", kUppercaseAll,   \"='\"         ),\n     new Transform(        \" \", kUppercaseFirst, \"='\"         )\n];\n\nexports.kTransforms = kTransforms;\nexports.kNumTransforms = kTransforms.length;\n\nfunction ToUpperCase(p, i) {\n  if (p[i] < 0xc0) {\n    if (p[i] >= 97 && p[i] <= 122) {\n      p[i] ^= 32;\n    }\n    return 1;\n  }\n  \n  /* An overly simplified uppercasing model for utf-8. */\n  if (p[i] < 0xe0) {\n    p[i + 1] ^= 32;\n    return 2;\n  }\n  \n  /* An arbitrary transform for three byte characters. */\n  p[i + 2] ^= 5;\n  return 3;\n}\n\nexports.transformDictionaryWord = function(dst, idx, word, len, transform) {\n  var prefix = kTransforms[transform].prefix;\n  var suffix = kTransforms[transform].suffix;\n  var t = kTransforms[transform].transform;\n  var skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1);\n  var i = 0;\n  var start_idx = idx;\n  var uppercase;\n  \n  if (skip > len) {\n    skip = len;\n  }\n  \n  var prefix_pos = 0;\n  while (prefix_pos < prefix.length) {\n    dst[idx++] = prefix[prefix_pos++];\n  }\n  \n  word += skip;\n  len -= skip;\n  \n  if (t <= kOmitLast9) {\n    len -= t;\n  }\n  \n  for (i = 0; i < len; i++) {\n    dst[idx++] = BrotliDictionary.dictionary[word + i];\n  }\n  \n  uppercase = idx - len;\n  \n  if (t === kUppercaseFirst) {\n    ToUpperCase(dst, uppercase);\n  } else if (t === kUppercaseAll) {\n    while (len > 0) {\n      var step = ToUpperCase(dst, uppercase);\n      uppercase += step;\n      len -= step;\n    }\n  }\n  \n  var suffix_pos = 0;\n  while (suffix_pos < suffix.length) {\n    dst[idx++] = suffix[suffix_pos++];\n  }\n  \n  return idx - start_idx;\n}\n\n\n/***/ }),\n\n/***/ 7709:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(6450).BrotliDecompressBuffer;\n\n\n/***/ }),\n\n/***/ 4505:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n/* provided dependency */ var process = __webpack_require__(4155);\n\n/* eslint camelcase: \"off\" */\n\nvar assert = __webpack_require__(9282);\n\nvar Zstream = __webpack_require__(2292);\nvar zlib_deflate = __webpack_require__(405);\nvar zlib_inflate = __webpack_require__(7948);\nvar constants = __webpack_require__(1619);\n\nfor (var key in constants) {\n  exports[key] = constants[key];\n}\n\n// zlib modes\nexports.NONE = 0;\nexports.DEFLATE = 1;\nexports.INFLATE = 2;\nexports.GZIP = 3;\nexports.GUNZIP = 4;\nexports.DEFLATERAW = 5;\nexports.INFLATERAW = 6;\nexports.UNZIP = 7;\n\nvar GZIP_HEADER_ID1 = 0x1f;\nvar GZIP_HEADER_ID2 = 0x8b;\n\n/**\n * Emulate Node's zlib C++ layer for use by the JS layer in index.js\n */\nfunction Zlib(mode) {\n  if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) {\n    throw new TypeError('Bad argument');\n  }\n\n  this.dictionary = null;\n  this.err = 0;\n  this.flush = 0;\n  this.init_done = false;\n  this.level = 0;\n  this.memLevel = 0;\n  this.mode = mode;\n  this.strategy = 0;\n  this.windowBits = 0;\n  this.write_in_progress = false;\n  this.pending_close = false;\n  this.gzip_id_bytes_read = 0;\n}\n\nZlib.prototype.close = function () {\n  if (this.write_in_progress) {\n    this.pending_close = true;\n    return;\n  }\n\n  this.pending_close = false;\n\n  assert(this.init_done, 'close before init');\n  assert(this.mode <= exports.UNZIP);\n\n  if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {\n    zlib_deflate.deflateEnd(this.strm);\n  } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) {\n    zlib_inflate.inflateEnd(this.strm);\n  }\n\n  this.mode = exports.NONE;\n\n  this.dictionary = null;\n};\n\nZlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) {\n  return this._write(true, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) {\n  return this._write(false, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) {\n  assert.equal(arguments.length, 8);\n\n  assert(this.init_done, 'write before init');\n  assert(this.mode !== exports.NONE, 'already finalized');\n  assert.equal(false, this.write_in_progress, 'write already in progress');\n  assert.equal(false, this.pending_close, 'close is pending');\n\n  this.write_in_progress = true;\n\n  assert.equal(false, flush === undefined, 'must provide flush value');\n\n  this.write_in_progress = true;\n\n  if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) {\n    throw new Error('Invalid flush value');\n  }\n\n  if (input == null) {\n    input = Buffer.alloc(0);\n    in_len = 0;\n    in_off = 0;\n  }\n\n  this.strm.avail_in = in_len;\n  this.strm.input = input;\n  this.strm.next_in = in_off;\n  this.strm.avail_out = out_len;\n  this.strm.output = out;\n  this.strm.next_out = out_off;\n  this.flush = flush;\n\n  if (!async) {\n    // sync version\n    this._process();\n\n    if (this._checkError()) {\n      return this._afterSync();\n    }\n    return;\n  }\n\n  // async version\n  var self = this;\n  process.nextTick(function () {\n    self._process();\n    self._after();\n  });\n\n  return this;\n};\n\nZlib.prototype._afterSync = function () {\n  var avail_out = this.strm.avail_out;\n  var avail_in = this.strm.avail_in;\n\n  this.write_in_progress = false;\n\n  return [avail_in, avail_out];\n};\n\nZlib.prototype._process = function () {\n  var next_expected_header_byte = null;\n\n  // If the avail_out is left at 0, then it means that it ran out\n  // of room.  If there was avail_out left over, then it means\n  // that all of the input was consumed.\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.GZIP:\n    case exports.DEFLATERAW:\n      this.err = zlib_deflate.deflate(this.strm, this.flush);\n      break;\n    case exports.UNZIP:\n      if (this.strm.avail_in > 0) {\n        next_expected_header_byte = this.strm.next_in;\n      }\n\n      switch (this.gzip_id_bytes_read) {\n        case 0:\n          if (next_expected_header_byte === null) {\n            break;\n          }\n\n          if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) {\n            this.gzip_id_bytes_read = 1;\n            next_expected_header_byte++;\n\n            if (this.strm.avail_in === 1) {\n              // The only available byte was already read.\n              break;\n            }\n          } else {\n            this.mode = exports.INFLATE;\n            break;\n          }\n\n        // fallthrough\n        case 1:\n          if (next_expected_header_byte === null) {\n            break;\n          }\n\n          if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) {\n            this.gzip_id_bytes_read = 2;\n            this.mode = exports.GUNZIP;\n          } else {\n            // There is no actual difference between INFLATE and INFLATERAW\n            // (after initialization).\n            this.mode = exports.INFLATE;\n          }\n\n          break;\n        default:\n          throw new Error('invalid number of gzip magic number bytes read');\n      }\n\n    // fallthrough\n    case exports.INFLATE:\n    case exports.GUNZIP:\n    case exports.INFLATERAW:\n      this.err = zlib_inflate.inflate(this.strm, this.flush\n\n      // If data was encoded with dictionary\n      );if (this.err === exports.Z_NEED_DICT && this.dictionary) {\n        // Load it\n        this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary);\n        if (this.err === exports.Z_OK) {\n          // And try to decode again\n          this.err = zlib_inflate.inflate(this.strm, this.flush);\n        } else if (this.err === exports.Z_DATA_ERROR) {\n          // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR.\n          // Make it possible for After() to tell a bad dictionary from bad\n          // input.\n          this.err = exports.Z_NEED_DICT;\n        }\n      }\n      while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) {\n        // Bytes remain in input buffer. Perhaps this is another compressed\n        // member in the same archive, or just trailing garbage.\n        // Trailing zero bytes are okay, though, since they are frequently\n        // used for padding.\n\n        this.reset();\n        this.err = zlib_inflate.inflate(this.strm, this.flush);\n      }\n      break;\n    default:\n      throw new Error('Unknown mode ' + this.mode);\n  }\n};\n\nZlib.prototype._checkError = function () {\n  // Acceptable error states depend on the type of zlib stream.\n  switch (this.err) {\n    case exports.Z_OK:\n    case exports.Z_BUF_ERROR:\n      if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) {\n        this._error('unexpected end of file');\n        return false;\n      }\n      break;\n    case exports.Z_STREAM_END:\n      // normal statuses, not fatal\n      break;\n    case exports.Z_NEED_DICT:\n      if (this.dictionary == null) {\n        this._error('Missing dictionary');\n      } else {\n        this._error('Bad dictionary');\n      }\n      return false;\n    default:\n      // something else.\n      this._error('Zlib error');\n      return false;\n  }\n\n  return true;\n};\n\nZlib.prototype._after = function () {\n  if (!this._checkError()) {\n    return;\n  }\n\n  var avail_out = this.strm.avail_out;\n  var avail_in = this.strm.avail_in;\n\n  this.write_in_progress = false;\n\n  // call the write() cb\n  this.callback(avail_in, avail_out);\n\n  if (this.pending_close) {\n    this.close();\n  }\n};\n\nZlib.prototype._error = function (message) {\n  if (this.strm.msg) {\n    message = this.strm.msg;\n  }\n  this.onerror(message, this.err\n\n  // no hope of rescue.\n  );this.write_in_progress = false;\n  if (this.pending_close) {\n    this.close();\n  }\n};\n\nZlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) {\n  assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])');\n\n  assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits');\n  assert(level >= -1 && level <= 9, 'invalid compression level');\n\n  assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel');\n\n  assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy');\n\n  this._init(level, windowBits, memLevel, strategy, dictionary);\n  this._setDictionary();\n};\n\nZlib.prototype.params = function () {\n  throw new Error('deflateParams Not supported');\n};\n\nZlib.prototype.reset = function () {\n  this._reset();\n  this._setDictionary();\n};\n\nZlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) {\n  this.level = level;\n  this.windowBits = windowBits;\n  this.memLevel = memLevel;\n  this.strategy = strategy;\n\n  this.flush = exports.Z_NO_FLUSH;\n\n  this.err = exports.Z_OK;\n\n  if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) {\n    this.windowBits += 16;\n  }\n\n  if (this.mode === exports.UNZIP) {\n    this.windowBits += 32;\n  }\n\n  if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) {\n    this.windowBits = -1 * this.windowBits;\n  }\n\n  this.strm = new Zstream();\n\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.GZIP:\n    case exports.DEFLATERAW:\n      this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy);\n      break;\n    case exports.INFLATE:\n    case exports.GUNZIP:\n    case exports.INFLATERAW:\n    case exports.UNZIP:\n      this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits);\n      break;\n    default:\n      throw new Error('Unknown mode ' + this.mode);\n  }\n\n  if (this.err !== exports.Z_OK) {\n    this._error('Init error');\n  }\n\n  this.dictionary = dictionary;\n\n  this.write_in_progress = false;\n  this.init_done = true;\n};\n\nZlib.prototype._setDictionary = function () {\n  if (this.dictionary == null) {\n    return;\n  }\n\n  this.err = exports.Z_OK;\n\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.DEFLATERAW:\n      this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary);\n      break;\n    default:\n      break;\n  }\n\n  if (this.err !== exports.Z_OK) {\n    this._error('Failed to set dictionary');\n  }\n};\n\nZlib.prototype._reset = function () {\n  this.err = exports.Z_OK;\n\n  switch (this.mode) {\n    case exports.DEFLATE:\n    case exports.DEFLATERAW:\n    case exports.GZIP:\n      this.err = zlib_deflate.deflateReset(this.strm);\n      break;\n    case exports.INFLATE:\n    case exports.INFLATERAW:\n    case exports.GUNZIP:\n      this.err = zlib_inflate.inflateReset(this.strm);\n      break;\n    default:\n      break;\n  }\n\n  if (this.err !== exports.Z_OK) {\n    this._error('Failed to reset stream');\n  }\n};\n\nexports.Zlib = Zlib;\n\n/***/ }),\n\n/***/ 2635:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n\n\nvar Buffer = (__webpack_require__(8823).Buffer);\nvar Transform = (__webpack_require__(2830).Transform);\nvar binding = __webpack_require__(4505);\nvar util = __webpack_require__(9539);\nvar assert = (__webpack_require__(9282).ok);\nvar kMaxLength = (__webpack_require__(8823).kMaxLength);\nvar kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes';\n\n// zlib doesn't provide these, so kludge them in following the same\n// const naming scheme zlib uses.\nbinding.Z_MIN_WINDOWBITS = 8;\nbinding.Z_MAX_WINDOWBITS = 15;\nbinding.Z_DEFAULT_WINDOWBITS = 15;\n\n// fewer than 64 bytes per chunk is stupid.\n// technically it could work with as few as 8, but even 64 bytes\n// is absurdly low.  Usually a MB or more is best.\nbinding.Z_MIN_CHUNK = 64;\nbinding.Z_MAX_CHUNK = Infinity;\nbinding.Z_DEFAULT_CHUNK = 16 * 1024;\n\nbinding.Z_MIN_MEMLEVEL = 1;\nbinding.Z_MAX_MEMLEVEL = 9;\nbinding.Z_DEFAULT_MEMLEVEL = 8;\n\nbinding.Z_MIN_LEVEL = -1;\nbinding.Z_MAX_LEVEL = 9;\nbinding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;\n\n// expose all the zlib constants\nvar bkeys = Object.keys(binding);\nfor (var bk = 0; bk < bkeys.length; bk++) {\n  var bkey = bkeys[bk];\n  if (bkey.match(/^Z/)) {\n    Object.defineProperty(exports, bkey, {\n      enumerable: true, value: binding[bkey], writable: false\n    });\n  }\n}\n\n// translation table for return codes.\nvar codes = {\n  Z_OK: binding.Z_OK,\n  Z_STREAM_END: binding.Z_STREAM_END,\n  Z_NEED_DICT: binding.Z_NEED_DICT,\n  Z_ERRNO: binding.Z_ERRNO,\n  Z_STREAM_ERROR: binding.Z_STREAM_ERROR,\n  Z_DATA_ERROR: binding.Z_DATA_ERROR,\n  Z_MEM_ERROR: binding.Z_MEM_ERROR,\n  Z_BUF_ERROR: binding.Z_BUF_ERROR,\n  Z_VERSION_ERROR: binding.Z_VERSION_ERROR\n};\n\nvar ckeys = Object.keys(codes);\nfor (var ck = 0; ck < ckeys.length; ck++) {\n  var ckey = ckeys[ck];\n  codes[codes[ckey]] = ckey;\n}\n\nObject.defineProperty(exports, \"codes\", ({\n  enumerable: true, value: Object.freeze(codes), writable: false\n}));\n\nexports.Deflate = Deflate;\nexports.Inflate = Inflate;\nexports.Gzip = Gzip;\nexports.Gunzip = Gunzip;\nexports.DeflateRaw = DeflateRaw;\nexports.InflateRaw = InflateRaw;\nexports.Unzip = Unzip;\n\nexports.createDeflate = function (o) {\n  return new Deflate(o);\n};\n\nexports.createInflate = function (o) {\n  return new Inflate(o);\n};\n\nexports.createDeflateRaw = function (o) {\n  return new DeflateRaw(o);\n};\n\nexports.createInflateRaw = function (o) {\n  return new InflateRaw(o);\n};\n\nexports.createGzip = function (o) {\n  return new Gzip(o);\n};\n\nexports.createGunzip = function (o) {\n  return new Gunzip(o);\n};\n\nexports.createUnzip = function (o) {\n  return new Unzip(o);\n};\n\n// Convenience methods.\n// compress/decompress a string or buffer in one step.\nexports.deflate = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Deflate(opts), buffer, callback);\n};\n\nexports.deflateSync = function (buffer, opts) {\n  return zlibBufferSync(new Deflate(opts), buffer);\n};\n\nexports.gzip = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Gzip(opts), buffer, callback);\n};\n\nexports.gzipSync = function (buffer, opts) {\n  return zlibBufferSync(new Gzip(opts), buffer);\n};\n\nexports.deflateRaw = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new DeflateRaw(opts), buffer, callback);\n};\n\nexports.deflateRawSync = function (buffer, opts) {\n  return zlibBufferSync(new DeflateRaw(opts), buffer);\n};\n\nexports.unzip = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Unzip(opts), buffer, callback);\n};\n\nexports.unzipSync = function (buffer, opts) {\n  return zlibBufferSync(new Unzip(opts), buffer);\n};\n\nexports.inflate = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Inflate(opts), buffer, callback);\n};\n\nexports.inflateSync = function (buffer, opts) {\n  return zlibBufferSync(new Inflate(opts), buffer);\n};\n\nexports.gunzip = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new Gunzip(opts), buffer, callback);\n};\n\nexports.gunzipSync = function (buffer, opts) {\n  return zlibBufferSync(new Gunzip(opts), buffer);\n};\n\nexports.inflateRaw = function (buffer, opts, callback) {\n  if (typeof opts === 'function') {\n    callback = opts;\n    opts = {};\n  }\n  return zlibBuffer(new InflateRaw(opts), buffer, callback);\n};\n\nexports.inflateRawSync = function (buffer, opts) {\n  return zlibBufferSync(new InflateRaw(opts), buffer);\n};\n\nfunction zlibBuffer(engine, buffer, callback) {\n  var buffers = [];\n  var nread = 0;\n\n  engine.on('error', onError);\n  engine.on('end', onEnd);\n\n  engine.end(buffer);\n  flow();\n\n  function flow() {\n    var chunk;\n    while (null !== (chunk = engine.read())) {\n      buffers.push(chunk);\n      nread += chunk.length;\n    }\n    engine.once('readable', flow);\n  }\n\n  function onError(err) {\n    engine.removeListener('end', onEnd);\n    engine.removeListener('readable', flow);\n    callback(err);\n  }\n\n  function onEnd() {\n    var buf;\n    var err = null;\n\n    if (nread >= kMaxLength) {\n      err = new RangeError(kRangeErrorMessage);\n    } else {\n      buf = Buffer.concat(buffers, nread);\n    }\n\n    buffers = [];\n    engine.close();\n    callback(err, buf);\n  }\n}\n\nfunction zlibBufferSync(engine, buffer) {\n  if (typeof buffer === 'string') buffer = Buffer.from(buffer);\n\n  if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer');\n\n  var flushFlag = engine._finishFlushFlag;\n\n  return engine._processChunk(buffer, flushFlag);\n}\n\n// generic zlib\n// minimal 2-byte header\nfunction Deflate(opts) {\n  if (!(this instanceof Deflate)) return new Deflate(opts);\n  Zlib.call(this, opts, binding.DEFLATE);\n}\n\nfunction Inflate(opts) {\n  if (!(this instanceof Inflate)) return new Inflate(opts);\n  Zlib.call(this, opts, binding.INFLATE);\n}\n\n// gzip - bigger header, same deflate compression\nfunction Gzip(opts) {\n  if (!(this instanceof Gzip)) return new Gzip(opts);\n  Zlib.call(this, opts, binding.GZIP);\n}\n\nfunction Gunzip(opts) {\n  if (!(this instanceof Gunzip)) return new Gunzip(opts);\n  Zlib.call(this, opts, binding.GUNZIP);\n}\n\n// raw - no header\nfunction DeflateRaw(opts) {\n  if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);\n  Zlib.call(this, opts, binding.DEFLATERAW);\n}\n\nfunction InflateRaw(opts) {\n  if (!(this instanceof InflateRaw)) return new InflateRaw(opts);\n  Zlib.call(this, opts, binding.INFLATERAW);\n}\n\n// auto-detect header.\nfunction Unzip(opts) {\n  if (!(this instanceof Unzip)) return new Unzip(opts);\n  Zlib.call(this, opts, binding.UNZIP);\n}\n\nfunction isValidFlushFlag(flag) {\n  return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK;\n}\n\n// the Zlib class they all inherit from\n// This thing manages the queue of requests, and returns\n// true or false if there is anything in the queue when\n// you call the .write() method.\n\nfunction Zlib(opts, mode) {\n  var _this = this;\n\n  this._opts = opts = opts || {};\n  this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;\n\n  Transform.call(this, opts);\n\n  if (opts.flush && !isValidFlushFlag(opts.flush)) {\n    throw new Error('Invalid flush flag: ' + opts.flush);\n  }\n  if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) {\n    throw new Error('Invalid flush flag: ' + opts.finishFlush);\n  }\n\n  this._flushFlag = opts.flush || binding.Z_NO_FLUSH;\n  this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH;\n\n  if (opts.chunkSize) {\n    if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) {\n      throw new Error('Invalid chunk size: ' + opts.chunkSize);\n    }\n  }\n\n  if (opts.windowBits) {\n    if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) {\n      throw new Error('Invalid windowBits: ' + opts.windowBits);\n    }\n  }\n\n  if (opts.level) {\n    if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) {\n      throw new Error('Invalid compression level: ' + opts.level);\n    }\n  }\n\n  if (opts.memLevel) {\n    if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) {\n      throw new Error('Invalid memLevel: ' + opts.memLevel);\n    }\n  }\n\n  if (opts.strategy) {\n    if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) {\n      throw new Error('Invalid strategy: ' + opts.strategy);\n    }\n  }\n\n  if (opts.dictionary) {\n    if (!Buffer.isBuffer(opts.dictionary)) {\n      throw new Error('Invalid dictionary: it should be a Buffer instance');\n    }\n  }\n\n  this._handle = new binding.Zlib(mode);\n\n  var self = this;\n  this._hadError = false;\n  this._handle.onerror = function (message, errno) {\n    // there is no way to cleanly recover.\n    // continuing only obscures problems.\n    _close(self);\n    self._hadError = true;\n\n    var error = new Error(message);\n    error.errno = errno;\n    error.code = exports.codes[errno];\n    self.emit('error', error);\n  };\n\n  var level = exports.Z_DEFAULT_COMPRESSION;\n  if (typeof opts.level === 'number') level = opts.level;\n\n  var strategy = exports.Z_DEFAULT_STRATEGY;\n  if (typeof opts.strategy === 'number') strategy = opts.strategy;\n\n  this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary);\n\n  this._buffer = Buffer.allocUnsafe(this._chunkSize);\n  this._offset = 0;\n  this._level = level;\n  this._strategy = strategy;\n\n  this.once('end', this.close);\n\n  Object.defineProperty(this, '_closed', {\n    get: function () {\n      return !_this._handle;\n    },\n    configurable: true,\n    enumerable: true\n  });\n}\n\nutil.inherits(Zlib, Transform);\n\nZlib.prototype.params = function (level, strategy, callback) {\n  if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) {\n    throw new RangeError('Invalid compression level: ' + level);\n  }\n  if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) {\n    throw new TypeError('Invalid strategy: ' + strategy);\n  }\n\n  if (this._level !== level || this._strategy !== strategy) {\n    var self = this;\n    this.flush(binding.Z_SYNC_FLUSH, function () {\n      assert(self._handle, 'zlib binding closed');\n      self._handle.params(level, strategy);\n      if (!self._hadError) {\n        self._level = level;\n        self._strategy = strategy;\n        if (callback) callback();\n      }\n    });\n  } else {\n    process.nextTick(callback);\n  }\n};\n\nZlib.prototype.reset = function () {\n  assert(this._handle, 'zlib binding closed');\n  return this._handle.reset();\n};\n\n// This is the _flush function called by the transform class,\n// internally, when the last chunk has been written.\nZlib.prototype._flush = function (callback) {\n  this._transform(Buffer.alloc(0), '', callback);\n};\n\nZlib.prototype.flush = function (kind, callback) {\n  var _this2 = this;\n\n  var ws = this._writableState;\n\n  if (typeof kind === 'function' || kind === undefined && !callback) {\n    callback = kind;\n    kind = binding.Z_FULL_FLUSH;\n  }\n\n  if (ws.ended) {\n    if (callback) process.nextTick(callback);\n  } else if (ws.ending) {\n    if (callback) this.once('end', callback);\n  } else if (ws.needDrain) {\n    if (callback) {\n      this.once('drain', function () {\n        return _this2.flush(kind, callback);\n      });\n    }\n  } else {\n    this._flushFlag = kind;\n    this.write(Buffer.alloc(0), '', callback);\n  }\n};\n\nZlib.prototype.close = function (callback) {\n  _close(this, callback);\n  process.nextTick(emitCloseNT, this);\n};\n\nfunction _close(engine, callback) {\n  if (callback) process.nextTick(callback);\n\n  // Caller may invoke .close after a zlib error (which will null _handle).\n  if (!engine._handle) return;\n\n  engine._handle.close();\n  engine._handle = null;\n}\n\nfunction emitCloseNT(self) {\n  self.emit('close');\n}\n\nZlib.prototype._transform = function (chunk, encoding, cb) {\n  var flushFlag;\n  var ws = this._writableState;\n  var ending = ws.ending || ws.ended;\n  var last = ending && (!chunk || ws.length === chunk.length);\n\n  if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input'));\n\n  if (!this._handle) return cb(new Error('zlib binding closed'));\n\n  // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag\n  // (or whatever flag was provided using opts.finishFlush).\n  // If it's explicitly flushing at some other time, then we use\n  // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression\n  // goodness.\n  if (last) flushFlag = this._finishFlushFlag;else {\n    flushFlag = this._flushFlag;\n    // once we've flushed the last of the queue, stop flushing and\n    // go back to the normal behavior.\n    if (chunk.length >= ws.length) {\n      this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;\n    }\n  }\n\n  this._processChunk(chunk, flushFlag, cb);\n};\n\nZlib.prototype._processChunk = function (chunk, flushFlag, cb) {\n  var availInBefore = chunk && chunk.length;\n  var availOutBefore = this._chunkSize - this._offset;\n  var inOff = 0;\n\n  var self = this;\n\n  var async = typeof cb === 'function';\n\n  if (!async) {\n    var buffers = [];\n    var nread = 0;\n\n    var error;\n    this.on('error', function (er) {\n      error = er;\n    });\n\n    assert(this._handle, 'zlib binding closed');\n    do {\n      var res = this._handle.writeSync(flushFlag, chunk, // in\n      inOff, // in_off\n      availInBefore, // in_len\n      this._buffer, // out\n      this._offset, //out_off\n      availOutBefore); // out_len\n    } while (!this._hadError && callback(res[0], res[1]));\n\n    if (this._hadError) {\n      throw error;\n    }\n\n    if (nread >= kMaxLength) {\n      _close(this);\n      throw new RangeError(kRangeErrorMessage);\n    }\n\n    var buf = Buffer.concat(buffers, nread);\n    _close(this);\n\n    return buf;\n  }\n\n  assert(this._handle, 'zlib binding closed');\n  var req = this._handle.write(flushFlag, chunk, // in\n  inOff, // in_off\n  availInBefore, // in_len\n  this._buffer, // out\n  this._offset, //out_off\n  availOutBefore); // out_len\n\n  req.buffer = chunk;\n  req.callback = callback;\n\n  function callback(availInAfter, availOutAfter) {\n    // When the callback is used in an async write, the callback's\n    // context is the `req` object that was created. The req object\n    // is === this._handle, and that's why it's important to null\n    // out the values after they are done being used. `this._handle`\n    // can stay in memory longer than the callback and buffer are needed.\n    if (this) {\n      this.buffer = null;\n      this.callback = null;\n    }\n\n    if (self._hadError) return;\n\n    var have = availOutBefore - availOutAfter;\n    assert(have >= 0, 'have should not go down');\n\n    if (have > 0) {\n      var out = self._buffer.slice(self._offset, self._offset + have);\n      self._offset += have;\n      // serve some output to the consumer.\n      if (async) {\n        self.push(out);\n      } else {\n        buffers.push(out);\n        nread += out.length;\n      }\n    }\n\n    // exhausted the output buffer, or used all the input create a new one.\n    if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n      availOutBefore = self._chunkSize;\n      self._offset = 0;\n      self._buffer = Buffer.allocUnsafe(self._chunkSize);\n    }\n\n    if (availOutAfter === 0) {\n      // Not actually done.  Need to reprocess.\n      // Also, update the availInBefore to the availInAfter value,\n      // so that if we have to hit it a third (fourth, etc.) time,\n      // it'll have the correct byte counts.\n      inOff += availInBefore - availInAfter;\n      availInBefore = availInAfter;\n\n      if (!async) return true;\n\n      var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize);\n      newReq.callback = callback; // this same function\n      newReq.buffer = chunk;\n      return;\n    }\n\n    if (!async) return false;\n\n    // finished with the chunk.\n    cb();\n  }\n};\n\nutil.inherits(Deflate, Zlib);\nutil.inherits(Inflate, Zlib);\nutil.inherits(Gzip, Zlib);\nutil.inherits(Gunzip, Zlib);\nutil.inherits(DeflateRaw, Zlib);\nutil.inherits(InflateRaw, Zlib);\nutil.inherits(Unzip, Zlib);\n\n/***/ }),\n\n/***/ 1924:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n\n\n/***/ }),\n\n/***/ 5559:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n\n\n/***/ }),\n\n/***/ 6313:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\nvar clone = (function() {\n'use strict';\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n *    circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n *    a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n *    (optional - defaults to parent prototype).\n*/\nfunction clone(parent, circular, depth, prototype) {\n  var filter;\n  if (typeof circular === 'object') {\n    depth = circular.depth;\n    prototype = circular.prototype;\n    filter = circular.filter;\n    circular = circular.circular\n  }\n  // maintain two arrays for circular references, where corresponding parents\n  // and children have the same index\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n\n  // recurse this function so we don't reset allParents and allChildren\n  function _clone(parent, depth) {\n    // cloning null always returns null\n    if (parent === null)\n      return null;\n\n    if (depth == 0)\n      return parent;\n\n    var child;\n    var proto;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (clone.__isArray(parent)) {\n      child = [];\n    } else if (clone.__isRegExp(parent)) {\n      child = new RegExp(parent.source, __getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (clone.__isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      if (Buffer.allocUnsafe) {\n        // Node.js >= 4.5.0\n        child = Buffer.allocUnsafe(parent.length);\n      } else {\n        // Older Node.js versions\n        child = new Buffer(parent.length);\n      }\n      parent.copy(child);\n      return child;\n    } else {\n      if (typeof prototype == 'undefined') {\n        proto = Object.getPrototypeOf(parent);\n        child = Object.create(proto);\n      }\n      else {\n        child = Object.create(prototype);\n        proto = prototype;\n      }\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    for (var i in parent) {\n      var attrs;\n      if (proto) {\n        attrs = Object.getOwnPropertyDescriptor(proto, i);\n      }\n\n      if (attrs && attrs.set == null) {\n        continue;\n      }\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n  return Object.prototype.toString.call(o);\n};\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Date]';\n};\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Array]';\n};\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n};\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n  var flags = '';\n  if (re.global) flags += 'g';\n  if (re.ignoreCase) flags += 'i';\n  if (re.multiline) flags += 'm';\n  return flags;\n};\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif ( true && module.exports) {\n  module.exports = clone;\n}\n\n\n/***/ }),\n\n/***/ 4667:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n__webpack_require__(2479);\nvar path = __webpack_require__(857);\n\nmodule.exports = path.Object.values;\n\n\n/***/ }),\n\n/***/ 7633:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n__webpack_require__(9170);\n__webpack_require__(6992);\n__webpack_require__(1539);\n__webpack_require__(8674);\n__webpack_require__(7922);\n__webpack_require__(4668);\n__webpack_require__(7727);\n__webpack_require__(8783);\nvar path = __webpack_require__(857);\n\nmodule.exports = path.Promise;\n\n\n/***/ }),\n\n/***/ 3867:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar parent = __webpack_require__(1150);\n__webpack_require__(8628);\n// TODO: Remove from `core-js@4`\n__webpack_require__(7314);\n__webpack_require__(7479);\n__webpack_require__(6290);\n\nmodule.exports = parent;\n\n\n/***/ }),\n\n/***/ 9662:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\nvar tryToString = __webpack_require__(6330);\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n  if (isCallable(argument)) return argument;\n  throw TypeError(tryToString(argument) + ' is not a function');\n};\n\n\n/***/ }),\n\n/***/ 9483:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isConstructor = __webpack_require__(4411);\nvar tryToString = __webpack_require__(6330);\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n  if (isConstructor(argument)) return argument;\n  throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n\n\n/***/ }),\n\n/***/ 6077:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n  if (typeof argument == 'object' || isCallable(argument)) return argument;\n  throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n\n\n/***/ }),\n\n/***/ 1223:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\nvar create = __webpack_require__(30);\nvar definePropertyModule = __webpack_require__(3070);\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n  definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n    configurable: true,\n    value: create(null)\n  });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n\n\n/***/ }),\n\n/***/ 1530:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar charAt = (__webpack_require__(8710).charAt);\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? charAt(S, index).length : 1);\n};\n\n\n/***/ }),\n\n/***/ 5787:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isPrototypeOf = __webpack_require__(7976);\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n  if (isPrototypeOf(Prototype, it)) return it;\n  throw TypeError('Incorrect invocation');\n};\n\n\n/***/ }),\n\n/***/ 9670:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n  if (isObject(argument)) return argument;\n  throw TypeError(String(argument) + ' is not an object');\n};\n\n\n/***/ }),\n\n/***/ 1048:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toObject = __webpack_require__(7908);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar lengthOfArrayLike = __webpack_require__(6244);\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n// eslint-disable-next-line es/no-array-prototype-copywithin -- safe\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n  var O = toObject(this);\n  var len = lengthOfArrayLike(O);\n  var to = toAbsoluteIndex(target, len);\n  var from = toAbsoluteIndex(start, len);\n  var end = arguments.length > 2 ? arguments[2] : undefined;\n  var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n  var inc = 1;\n  if (from < to && to < from + count) {\n    inc = -1;\n    from += count - 1;\n    to += count - 1;\n  }\n  while (count-- > 0) {\n    if (from in O) O[to] = O[from];\n    else delete O[to];\n    to += inc;\n    from += inc;\n  } return O;\n};\n\n\n/***/ }),\n\n/***/ 1285:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toObject = __webpack_require__(7908);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar lengthOfArrayLike = __webpack_require__(6244);\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n  var O = toObject(this);\n  var length = lengthOfArrayLike(O);\n  var argumentsLength = arguments.length;\n  var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n  var end = argumentsLength > 2 ? arguments[2] : undefined;\n  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n  while (endPos > index) O[index++] = value;\n  return O;\n};\n\n\n/***/ }),\n\n/***/ 8533:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $forEach = (__webpack_require__(2092).forEach);\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n\n\n/***/ }),\n\n/***/ 7745:\n/***/ (function(module) {\n\nmodule.exports = function (Constructor, list) {\n  var index = 0;\n  var length = list.length;\n  var result = new Constructor(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 8457:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar bind = __webpack_require__(9974);\nvar call = __webpack_require__(6916);\nvar toObject = __webpack_require__(7908);\nvar callWithSafeIterationClosing = __webpack_require__(3411);\nvar isArrayIteratorMethod = __webpack_require__(7659);\nvar isConstructor = __webpack_require__(4411);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar createProperty = __webpack_require__(6135);\nvar getIterator = __webpack_require__(8554);\nvar getIteratorMethod = __webpack_require__(1246);\n\nvar Array = global.Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n  var O = toObject(arrayLike);\n  var IS_CONSTRUCTOR = isConstructor(this);\n  var argumentsLength = arguments.length;\n  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n  var mapping = mapfn !== undefined;\n  if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n  var iteratorMethod = getIteratorMethod(O);\n  var index = 0;\n  var length, result, step, iterator, next, value;\n  // if the target is not iterable or it's an array with the default iterator - use a simple case\n  if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n    iterator = getIterator(O, iteratorMethod);\n    next = iterator.next;\n    result = IS_CONSTRUCTOR ? new this() : [];\n    for (;!(step = call(next, iterator)).done; index++) {\n      value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n      createProperty(result, index, value);\n    }\n  } else {\n    length = lengthOfArrayLike(O);\n    result = IS_CONSTRUCTOR ? new this(length) : Array(length);\n    for (;length > index; index++) {\n      value = mapping ? mapfn(O[index], index) : O[index];\n      createProperty(result, index, value);\n    }\n  }\n  result.length = index;\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 1318:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toIndexedObject = __webpack_require__(5656);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar lengthOfArrayLike = __webpack_require__(6244);\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = lengthOfArrayLike(O);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ 2092:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar bind = __webpack_require__(9974);\nvar uncurryThis = __webpack_require__(1702);\nvar IndexedObject = __webpack_require__(8361);\nvar toObject = __webpack_require__(7908);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar arraySpeciesCreate = __webpack_require__(5417);\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var IS_FILTER_REJECT = TYPE == 7;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  return function ($this, callbackfn, that, specificCreate) {\n    var O = toObject($this);\n    var self = IndexedObject(O);\n    var boundFunction = bind(callbackfn, that);\n    var length = lengthOfArrayLike(self);\n    var index = 0;\n    var create = specificCreate || arraySpeciesCreate;\n    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n    var value, result;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      value = self[index];\n      result = boundFunction(value, index, O);\n      if (TYPE) {\n        if (IS_MAP) target[index] = result; // map\n        else if (result) switch (TYPE) {\n          case 3: return true;              // some\n          case 5: return value;             // find\n          case 6: return index;             // findIndex\n          case 2: push(target, value);      // filter\n        } else switch (TYPE) {\n          case 4: return false;             // every\n          case 7: push(target, value);      // filterReject\n        }\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.forEach` method\n  // https://tc39.es/ecma262/#sec-array.prototype.foreach\n  forEach: createMethod(0),\n  // `Array.prototype.map` method\n  // https://tc39.es/ecma262/#sec-array.prototype.map\n  map: createMethod(1),\n  // `Array.prototype.filter` method\n  // https://tc39.es/ecma262/#sec-array.prototype.filter\n  filter: createMethod(2),\n  // `Array.prototype.some` method\n  // https://tc39.es/ecma262/#sec-array.prototype.some\n  some: createMethod(3),\n  // `Array.prototype.every` method\n  // https://tc39.es/ecma262/#sec-array.prototype.every\n  every: createMethod(4),\n  // `Array.prototype.find` method\n  // https://tc39.es/ecma262/#sec-array.prototype.find\n  find: createMethod(5),\n  // `Array.prototype.findIndex` method\n  // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n  findIndex: createMethod(6),\n  // `Array.prototype.filterReject` method\n  // https://github.com/tc39/proposal-array-filtering\n  filterReject: createMethod(7)\n};\n\n\n/***/ }),\n\n/***/ 6583:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n/* eslint-disable es/no-array-prototype-lastindexof -- safe */\nvar apply = __webpack_require__(2104);\nvar toIndexedObject = __webpack_require__(5656);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar min = Math.min;\nvar $lastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$lastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n  // convert -0 to +0\n  if (NEGATIVE_ZERO) return apply($lastIndexOf, this, arguments) || 0;\n  var O = toIndexedObject(this);\n  var length = lengthOfArrayLike(O);\n  var index = length - 1;\n  if (arguments.length > 1) index = min(index, toIntegerOrInfinity(arguments[1]));\n  if (index < 0) index = length + index;\n  for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n  return -1;\n} : $lastIndexOf;\n\n\n/***/ }),\n\n/***/ 1194:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar V8_VERSION = __webpack_require__(7392);\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n  // We can't use this feature detection in V8 since it causes\n  // deoptimization and serious performance degradation\n  // https://github.com/zloirock/core-js/issues/677\n  return V8_VERSION >= 51 || !fails(function () {\n    var array = [];\n    var constructor = array.constructor = {};\n    constructor[SPECIES] = function () {\n      return { foo: 1 };\n    };\n    return array[METHOD_NAME](Boolean).foo !== 1;\n  });\n};\n\n\n/***/ }),\n\n/***/ 9341:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = function (METHOD_NAME, argument) {\n  var method = [][METHOD_NAME];\n  return !!method && fails(function () {\n    // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n    method.call(null, argument || function () { throw 1; }, 1);\n  });\n};\n\n\n/***/ }),\n\n/***/ 3671:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar aCallable = __webpack_require__(9662);\nvar toObject = __webpack_require__(7908);\nvar IndexedObject = __webpack_require__(8361);\nvar lengthOfArrayLike = __webpack_require__(6244);\n\nvar TypeError = global.TypeError;\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n  return function (that, callbackfn, argumentsLength, memo) {\n    aCallable(callbackfn);\n    var O = toObject(that);\n    var self = IndexedObject(O);\n    var length = lengthOfArrayLike(O);\n    var index = IS_RIGHT ? length - 1 : 0;\n    var i = IS_RIGHT ? -1 : 1;\n    if (argumentsLength < 2) while (true) {\n      if (index in self) {\n        memo = self[index];\n        index += i;\n        break;\n      }\n      index += i;\n      if (IS_RIGHT ? index < 0 : length <= index) {\n        throw TypeError('Reduce of empty array with no initial value');\n      }\n    }\n    for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n      memo = callbackfn(memo, self[index], index, O);\n    }\n    return memo;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.reduce` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduce\n  left: createMethod(false),\n  // `Array.prototype.reduceRight` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n  right: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ 206:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\nmodule.exports = uncurryThis([].slice);\n\n\n/***/ }),\n\n/***/ 4362:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar arraySlice = __webpack_require__(206);\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n  var length = array.length;\n  var middle = floor(length / 2);\n  return length < 8 ? insertionSort(array, comparefn) : merge(\n    array,\n    mergeSort(arraySlice(array, 0, middle), comparefn),\n    mergeSort(arraySlice(array, middle), comparefn),\n    comparefn\n  );\n};\n\nvar insertionSort = function (array, comparefn) {\n  var length = array.length;\n  var i = 1;\n  var element, j;\n\n  while (i < length) {\n    j = i;\n    element = array[i];\n    while (j && comparefn(array[j - 1], element) > 0) {\n      array[j] = array[--j];\n    }\n    if (j !== i++) array[j] = element;\n  } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n  var llength = left.length;\n  var rlength = right.length;\n  var lindex = 0;\n  var rindex = 0;\n\n  while (lindex < llength || rindex < rlength) {\n    array[lindex + rindex] = (lindex < llength && rindex < rlength)\n      ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n      : lindex < llength ? left[lindex++] : right[rindex++];\n  } return array;\n};\n\nmodule.exports = mergeSort;\n\n\n/***/ }),\n\n/***/ 7475:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isArray = __webpack_require__(3157);\nvar isConstructor = __webpack_require__(4411);\nvar isObject = __webpack_require__(111);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n  var C;\n  if (isArray(originalArray)) {\n    C = originalArray.constructor;\n    // cross-realm fallback\n    if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n    else if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n\n\n/***/ }),\n\n/***/ 5417:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar arraySpeciesConstructor = __webpack_require__(7475);\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n  return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n\n\n/***/ }),\n\n/***/ 3411:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar iteratorClose = __webpack_require__(9212);\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n  try {\n    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n  } catch (error) {\n    iteratorClose(iterator, 'throw', error);\n  }\n};\n\n\n/***/ }),\n\n/***/ 7072:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var called = 0;\n  var iteratorWithReturn = {\n    next: function () {\n      return { done: !!called++ };\n    },\n    'return': function () {\n      SAFE_CLOSING = true;\n    }\n  };\n  iteratorWithReturn[ITERATOR] = function () {\n    return this;\n  };\n  // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n  Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n  if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n  var ITERATION_SUPPORT = false;\n  try {\n    var object = {};\n    object[ITERATOR] = function () {\n      return {\n        next: function () {\n          return { done: ITERATION_SUPPORT = true };\n        }\n      };\n    };\n    exec(object);\n  } catch (error) { /* empty */ }\n  return ITERATION_SUPPORT;\n};\n\n\n/***/ }),\n\n/***/ 4326:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n  return stringSlice(toString(it), 8, -1);\n};\n\n\n/***/ }),\n\n/***/ 648:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar isCallable = __webpack_require__(614);\nvar classofRaw = __webpack_require__(4326);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n\n\n/***/ }),\n\n/***/ 7741:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar arraySlice = __webpack_require__(206);\n\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar join = uncurryThis([].join);\n\nvar TEST = (function (arg) { return String(Error(arg).stack); })('zxcasd');\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\nvar IS_FIREFOX_OR_SAFARI_STACK = /@[^\\n]*\\n/.test(TEST) && !/zxcasd/.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n  if (typeof stack != 'string') return stack;\n  if (IS_V8_OR_CHAKRA_STACK) {\n    while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n  } else if (IS_FIREFOX_OR_SAFARI_STACK) {\n    return join(arraySlice(split(stack, '\\n'), dropEntries), '\\n');\n  } return stack;\n};\n\n\n/***/ }),\n\n/***/ 5631:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar defineProperty = (__webpack_require__(3070).f);\nvar create = __webpack_require__(30);\nvar redefineAll = __webpack_require__(2248);\nvar bind = __webpack_require__(9974);\nvar anInstance = __webpack_require__(5787);\nvar iterate = __webpack_require__(408);\nvar defineIterator = __webpack_require__(654);\nvar setSpecies = __webpack_require__(6340);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar fastKey = (__webpack_require__(2423).fastKey);\nvar InternalStateModule = __webpack_require__(9909);\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var Constructor = wrapper(function (that, iterable) {\n      anInstance(that, Prototype);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        index: create(null),\n        first: undefined,\n        last: undefined,\n        size: 0\n      });\n      if (!DESCRIPTORS) that.size = 0;\n      if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n    });\n\n    var Prototype = Constructor.prototype;\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var entry = getEntry(that, key);\n      var previous, index;\n      // change existing entry\n      if (entry) {\n        entry.value = value;\n      // create new entry\n      } else {\n        state.last = entry = {\n          index: index = fastKey(key, true),\n          key: key,\n          value: value,\n          previous: previous = state.last,\n          next: undefined,\n          removed: false\n        };\n        if (!state.first) state.first = entry;\n        if (previous) previous.next = entry;\n        if (DESCRIPTORS) state.size++;\n        else that.size++;\n        // add to index\n        if (index !== 'F') state.index[index] = entry;\n      } return that;\n    };\n\n    var getEntry = function (that, key) {\n      var state = getInternalState(that);\n      // fast case\n      var index = fastKey(key);\n      var entry;\n      if (index !== 'F') return state.index[index];\n      // frozen object case\n      for (entry = state.first; entry; entry = entry.next) {\n        if (entry.key == key) return entry;\n      }\n    };\n\n    redefineAll(Prototype, {\n      // `{ Map, Set }.prototype.clear()` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.clear\n      // https://tc39.es/ecma262/#sec-set.prototype.clear\n      clear: function clear() {\n        var that = this;\n        var state = getInternalState(that);\n        var data = state.index;\n        var entry = state.first;\n        while (entry) {\n          entry.removed = true;\n          if (entry.previous) entry.previous = entry.previous.next = undefined;\n          delete data[entry.index];\n          entry = entry.next;\n        }\n        state.first = state.last = undefined;\n        if (DESCRIPTORS) state.size = 0;\n        else that.size = 0;\n      },\n      // `{ Map, Set }.prototype.delete(key)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.delete\n      // https://tc39.es/ecma262/#sec-set.prototype.delete\n      'delete': function (key) {\n        var that = this;\n        var state = getInternalState(that);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.next;\n          var prev = entry.previous;\n          delete state.index[entry.index];\n          entry.removed = true;\n          if (prev) prev.next = next;\n          if (next) next.previous = prev;\n          if (state.first == entry) state.first = next;\n          if (state.last == entry) state.last = prev;\n          if (DESCRIPTORS) state.size--;\n          else that.size--;\n        } return !!entry;\n      },\n      // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.foreach\n      // https://tc39.es/ecma262/#sec-set.prototype.foreach\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        var state = getInternalState(this);\n        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n        var entry;\n        while (entry = entry ? entry.next : state.first) {\n          boundFunction(entry.value, entry.key, this);\n          // revert to the last existing entry\n          while (entry && entry.removed) entry = entry.previous;\n        }\n      },\n      // `{ Map, Set}.prototype.has(key)` methods\n      // https://tc39.es/ecma262/#sec-map.prototype.has\n      // https://tc39.es/ecma262/#sec-set.prototype.has\n      has: function has(key) {\n        return !!getEntry(this, key);\n      }\n    });\n\n    redefineAll(Prototype, IS_MAP ? {\n      // `Map.prototype.get(key)` method\n      // https://tc39.es/ecma262/#sec-map.prototype.get\n      get: function get(key) {\n        var entry = getEntry(this, key);\n        return entry && entry.value;\n      },\n      // `Map.prototype.set(key, value)` method\n      // https://tc39.es/ecma262/#sec-map.prototype.set\n      set: function set(key, value) {\n        return define(this, key === 0 ? 0 : key, value);\n      }\n    } : {\n      // `Set.prototype.add(value)` method\n      // https://tc39.es/ecma262/#sec-set.prototype.add\n      add: function add(value) {\n        return define(this, value = value === 0 ? 0 : value, value);\n      }\n    });\n    if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n      get: function () {\n        return getInternalState(this).size;\n      }\n    });\n    return Constructor;\n  },\n  setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n    // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n    // https://tc39.es/ecma262/#sec-map.prototype.entries\n    // https://tc39.es/ecma262/#sec-map.prototype.keys\n    // https://tc39.es/ecma262/#sec-map.prototype.values\n    // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n    // https://tc39.es/ecma262/#sec-set.prototype.entries\n    // https://tc39.es/ecma262/#sec-set.prototype.keys\n    // https://tc39.es/ecma262/#sec-set.prototype.values\n    // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n    defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n      setInternalState(this, {\n        type: ITERATOR_NAME,\n        target: iterated,\n        state: getInternalCollectionState(iterated),\n        kind: kind,\n        last: undefined\n      });\n    }, function () {\n      var state = getInternalIteratorState(this);\n      var kind = state.kind;\n      var entry = state.last;\n      // revert to the last existing entry\n      while (entry && entry.removed) entry = entry.previous;\n      // get next entry\n      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n        // or finish the iteration\n        state.target = undefined;\n        return { value: undefined, done: true };\n      }\n      // return step by kind\n      if (kind == 'keys') return { value: entry.key, done: false };\n      if (kind == 'values') return { value: entry.value, done: false };\n      return { value: [entry.key, entry.value], done: false };\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // `{ Map, Set }.prototype[@@species]` accessors\n    // https://tc39.es/ecma262/#sec-get-map-@@species\n    // https://tc39.es/ecma262/#sec-get-set-@@species\n    setSpecies(CONSTRUCTOR_NAME);\n  }\n};\n\n\n/***/ }),\n\n/***/ 7710:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar isForced = __webpack_require__(4705);\nvar redefine = __webpack_require__(1320);\nvar InternalMetadataModule = __webpack_require__(2423);\nvar iterate = __webpack_require__(408);\nvar anInstance = __webpack_require__(5787);\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\nvar fails = __webpack_require__(7293);\nvar checkCorrectnessOfIteration = __webpack_require__(7072);\nvar setToStringTag = __webpack_require__(8003);\nvar inheritIfRequired = __webpack_require__(9587);\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n  var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n  var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var NativeConstructor = global[CONSTRUCTOR_NAME];\n  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n  var Constructor = NativeConstructor;\n  var exported = {};\n\n  var fixMethod = function (KEY) {\n    var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n    redefine(NativePrototype, KEY,\n      KEY == 'add' ? function add(value) {\n        uncurriedNativeMethod(this, value === 0 ? 0 : value);\n        return this;\n      } : KEY == 'delete' ? function (key) {\n        return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n      } : KEY == 'get' ? function get(key) {\n        return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n      } : KEY == 'has' ? function has(key) {\n        return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n      } : function set(key, value) {\n        uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n        return this;\n      }\n    );\n  };\n\n  var REPLACE = isForced(\n    CONSTRUCTOR_NAME,\n    !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n      new NativeConstructor().entries().next();\n    }))\n  );\n\n  if (REPLACE) {\n    // create collection constructor\n    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n    InternalMetadataModule.enable();\n  } else if (isForced(CONSTRUCTOR_NAME, true)) {\n    var instance = new Constructor();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    // eslint-disable-next-line no-new -- required for testing\n    var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new NativeConstructor();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n\n    if (!ACCEPT_ITERABLES) {\n      Constructor = wrapper(function (dummy, iterable) {\n        anInstance(dummy, NativePrototype);\n        var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n        if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n        return that;\n      });\n      Constructor.prototype = NativePrototype;\n      NativePrototype.constructor = Constructor;\n    }\n\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n    // weak collections should not contains .clear method\n    if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n  }\n\n  exported[CONSTRUCTOR_NAME] = Constructor;\n  $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n  setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n  return Constructor;\n};\n\n\n/***/ }),\n\n/***/ 9920:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar hasOwn = __webpack_require__(2597);\nvar ownKeys = __webpack_require__(3887);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar definePropertyModule = __webpack_require__(3070);\n\nmodule.exports = function (target, source) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n  }\n};\n\n\n/***/ }),\n\n/***/ 4964:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n  var regexp = /./;\n  try {\n    '/./'[METHOD_NAME](regexp);\n  } catch (error1) {\n    try {\n      regexp[MATCH] = false;\n      return '/./'[METHOD_NAME](regexp);\n    } catch (error2) { /* empty */ }\n  } return false;\n};\n\n\n/***/ }),\n\n/***/ 8544:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n\n\n/***/ }),\n\n/***/ 4230:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar toString = __webpack_require__(1340);\n\nvar quot = /\"/g;\nvar replace = uncurryThis(''.replace);\n\n// `CreateHTML` abstract operation\n// https://tc39.es/ecma262/#sec-createhtml\nmodule.exports = function (string, tag, attribute, value) {\n  var S = toString(requireObjectCoercible(string));\n  var p1 = '<' + tag;\n  if (attribute !== '') p1 += ' ' + attribute + '=\"' + replace(toString(value), quot, '&quot;') + '\"';\n  return p1 + '>' + S + '</' + tag + '>';\n};\n\n\n/***/ }),\n\n/***/ 4994:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar IteratorPrototype = (__webpack_require__(3383).IteratorPrototype);\nvar create = __webpack_require__(30);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar setToStringTag = __webpack_require__(8003);\nvar Iterators = __webpack_require__(7497);\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\n\n\n/***/ }),\n\n/***/ 8880:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar definePropertyModule = __webpack_require__(3070);\nvar createPropertyDescriptor = __webpack_require__(9114);\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n\n\n/***/ }),\n\n/***/ 9114:\n/***/ (function(module) {\n\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\n\n/***/ }),\n\n/***/ 6135:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toPropertyKey = __webpack_require__(4948);\nvar definePropertyModule = __webpack_require__(3070);\nvar createPropertyDescriptor = __webpack_require__(9114);\n\nmodule.exports = function (object, key, value) {\n  var propertyKey = toPropertyKey(key);\n  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n  else object[propertyKey] = value;\n};\n\n\n/***/ }),\n\n/***/ 8709:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar anObject = __webpack_require__(9670);\nvar ordinaryToPrimitive = __webpack_require__(2140);\n\nvar TypeError = global.TypeError;\n\n// `Date.prototype[@@toPrimitive](hint)` method implementation\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nmodule.exports = function (hint) {\n  anObject(this);\n  if (hint === 'string' || hint === 'default') hint = 'string';\n  else if (hint !== 'number') throw TypeError('Incorrect hint');\n  return ordinaryToPrimitive(this, hint);\n};\n\n\n/***/ }),\n\n/***/ 654:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar call = __webpack_require__(6916);\nvar IS_PURE = __webpack_require__(1913);\nvar FunctionName = __webpack_require__(6530);\nvar isCallable = __webpack_require__(614);\nvar createIteratorConstructor = __webpack_require__(4994);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar setToStringTag = __webpack_require__(8003);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar Iterators = __webpack_require__(7497);\nvar IteratorsCore = __webpack_require__(3383);\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n  createIteratorConstructor(IteratorConstructor, NAME, next);\n\n  var getIterationMethod = function (KIND) {\n    if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n    switch (KIND) {\n      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n    } return function () { return new IteratorConstructor(this); };\n  };\n\n  var TO_STRING_TAG = NAME + ' Iterator';\n  var INCORRECT_VALUES_NAME = false;\n  var IterablePrototype = Iterable.prototype;\n  var nativeIterator = IterablePrototype[ITERATOR]\n    || IterablePrototype['@@iterator']\n    || DEFAULT && IterablePrototype[DEFAULT];\n  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n  var CurrentIteratorPrototype, methods, KEY;\n\n  // fix native\n  if (anyNativeIterator) {\n    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n    if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n          redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n        }\n      }\n      // Set @@toStringTag to native iterators\n      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n    }\n  }\n\n  // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n  if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n      createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n    } else {\n      INCORRECT_VALUES_NAME = true;\n      defaultIterator = function values() { return call(nativeIterator, this); };\n    }\n  }\n\n  // export additional methods\n  if (DEFAULT) {\n    methods = {\n      values: getIterationMethod(VALUES),\n      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n      entries: getIterationMethod(ENTRIES)\n    };\n    if (FORCED) for (KEY in methods) {\n      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n        redefine(IterablePrototype, KEY, methods[KEY]);\n      }\n    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n  }\n  Iterators[NAME] = defaultIterator;\n\n  return methods;\n};\n\n\n/***/ }),\n\n/***/ 7235:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar path = __webpack_require__(857);\nvar hasOwn = __webpack_require__(2597);\nvar wrappedWellKnownSymbolModule = __webpack_require__(6061);\nvar defineProperty = (__webpack_require__(3070).f);\n\nmodule.exports = function (NAME) {\n  var Symbol = path.Symbol || (path.Symbol = {});\n  if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n    value: wrappedWellKnownSymbolModule.f(NAME)\n  });\n};\n\n\n/***/ }),\n\n/***/ 9781:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n\n\n/***/ }),\n\n/***/ 317:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n\n/***/ 8324:\n/***/ (function(module) {\n\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n  CSSRuleList: 0,\n  CSSStyleDeclaration: 0,\n  CSSValueList: 0,\n  ClientRectList: 0,\n  DOMRectList: 0,\n  DOMStringList: 0,\n  DOMTokenList: 1,\n  DataTransferItemList: 0,\n  FileList: 0,\n  HTMLAllCollection: 0,\n  HTMLCollection: 0,\n  HTMLFormElement: 0,\n  HTMLSelectElement: 0,\n  MediaList: 0,\n  MimeTypeArray: 0,\n  NamedNodeMap: 0,\n  NodeList: 1,\n  PaintRequestList: 0,\n  Plugin: 0,\n  PluginArray: 0,\n  SVGLengthList: 0,\n  SVGNumberList: 0,\n  SVGPathSegList: 0,\n  SVGPointList: 0,\n  SVGStringList: 0,\n  SVGTransformList: 0,\n  SourceBufferList: 0,\n  StyleSheetList: 0,\n  TextTrackCueList: 0,\n  TextTrackList: 0,\n  TouchList: 0\n};\n\n\n/***/ }),\n\n/***/ 8509:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = __webpack_require__(317);\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n\n\n/***/ }),\n\n/***/ 8886:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar userAgent = __webpack_require__(8113);\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n\n\n/***/ }),\n\n/***/ 7871:\n/***/ (function(module) {\n\nmodule.exports = typeof window == 'object';\n\n\n/***/ }),\n\n/***/ 256:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar UA = __webpack_require__(8113);\n\nmodule.exports = /MSIE|Trident/.test(UA);\n\n\n/***/ }),\n\n/***/ 1528:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar userAgent = __webpack_require__(8113);\nvar global = __webpack_require__(7854);\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n\n\n/***/ }),\n\n/***/ 6833:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar userAgent = __webpack_require__(8113);\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n\n\n/***/ }),\n\n/***/ 5268:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(4326);\nvar global = __webpack_require__(7854);\n\nmodule.exports = classof(global.process) == 'process';\n\n\n/***/ }),\n\n/***/ 1036:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar userAgent = __webpack_require__(8113);\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n\n\n/***/ }),\n\n/***/ 8113:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n\n\n/***/ }),\n\n/***/ 7392:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar userAgent = __webpack_require__(8113);\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n  // but their correct versions are not interesting for us\n  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = +match[1];\n  }\n}\n\nmodule.exports = version;\n\n\n/***/ }),\n\n/***/ 8008:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar userAgent = __webpack_require__(8113);\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n\n\n/***/ }),\n\n/***/ 748:\n/***/ (function(module) {\n\n// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n\n\n/***/ }),\n\n/***/ 2914:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar createPropertyDescriptor = __webpack_require__(9114);\n\nmodule.exports = !fails(function () {\n  var error = Error('a');\n  if (!('stack' in error)) return true;\n  // eslint-disable-next-line es/no-object-defineproperty -- safe\n  Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n  return error.stack !== 7;\n});\n\n\n/***/ }),\n\n/***/ 2109:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar getOwnPropertyDescriptor = (__webpack_require__(1236).f);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar setGlobal = __webpack_require__(3505);\nvar copyConstructorProperties = __webpack_require__(9920);\nvar isForced = __webpack_require__(4705);\n\n/*\n  options.target      - name of the target object\n  options.global      - target is the global object\n  options.stat        - export as static methods of target\n  options.proto       - export as prototype methods of target\n  options.real        - real prototype method for the `pure` version\n  options.forced      - export even if the native feature is available\n  options.bind        - bind methods to the target, required for the `pure` version\n  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe      - use the simple assignment of property instead of delete + defineProperty\n  options.sham        - add a flag to not completely full polyfills\n  options.enumerable  - export as enumerable property\n  options.noTargetGet - prevent calling a getter on target\n  options.name        - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = global;\n  } else if (STATIC) {\n    target = global[TARGET] || setGlobal(TARGET, {});\n  } else {\n    target = (global[TARGET] || {}).prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.noTargetGet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty == typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    // extend global\n    redefine(target, key, sourceProperty, options);\n  }\n};\n\n\n/***/ }),\n\n/***/ 7293:\n/***/ (function(module) {\n\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n\n\n/***/ }),\n\n/***/ 7007:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n// TODO: Remove from `core-js@4` since it's moved to entry points\n__webpack_require__(4916);\nvar uncurryThis = __webpack_require__(1702);\nvar redefine = __webpack_require__(1320);\nvar regexpExec = __webpack_require__(2261);\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n  var SYMBOL = wellKnownSymbol(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n\n    if (KEY === 'split') {\n      // We can't use real regex here since it causes deoptimization\n      // and serious performance degradation in V8\n      // https://github.com/zloirock/core-js/issues/306\n      re = {};\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n      re.flags = '';\n      re[SYMBOL] = /./[SYMBOL];\n    }\n\n    re.exec = function () { execCalled = true; return null; };\n\n    re[SYMBOL]('');\n    return !execCalled;\n  });\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    FORCED\n  ) {\n    var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);\n    var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n      var uncurriedNativeMethod = uncurryThis(nativeMethod);\n      var $exec = regexp.exec;\n      if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n        if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n          // The native String method already delegates to @@method (this\n          // polyfilled function), leasing to infinite recursion.\n          // We avoid it by directly calling the native @@method method.\n          return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };\n        }\n        return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };\n      }\n      return { done: false };\n    });\n\n    redefine(String.prototype, KEY, methods[0]);\n    redefine(RegExpPrototype, SYMBOL, methods[1]);\n  }\n\n  if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n\n\n/***/ }),\n\n/***/ 6677:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n  return Object.isExtensible(Object.preventExtensions({}));\n});\n\n\n/***/ }),\n\n/***/ 2104:\n/***/ (function(module) {\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () {\n  return call.apply(apply, arguments);\n});\n\n\n/***/ }),\n\n/***/ 9974:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar aCallable = __webpack_require__(9662);\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n  aCallable(fn);\n  return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n\n\n/***/ }),\n\n/***/ 7065:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar aCallable = __webpack_require__(9662);\nvar isObject = __webpack_require__(111);\nvar hasOwn = __webpack_require__(2597);\nvar arraySlice = __webpack_require__(206);\n\nvar Function = global.Function;\nvar concat = uncurryThis([].concat);\nvar join = uncurryThis([].join);\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n  if (!hasOwn(factories, argsLength)) {\n    for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n    factories[argsLength] = Function('C,a', 'return new C(' + join(list, ',') + ')');\n  } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n  var F = aCallable(this);\n  var Prototype = F.prototype;\n  var partArgs = arraySlice(arguments, 1);\n  var boundFunction = function bound(/* args... */) {\n    var args = concat(partArgs, arraySlice(arguments));\n    return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);\n  };\n  if (isObject(Prototype)) boundFunction.prototype = Prototype;\n  return boundFunction;\n};\n\n\n/***/ }),\n\n/***/ 6916:\n/***/ (function(module) {\n\nvar call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n  return call.apply(call, arguments);\n};\n\n\n/***/ }),\n\n/***/ 6530:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar hasOwn = __webpack_require__(2597);\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n  EXISTS: EXISTS,\n  PROPER: PROPER,\n  CONFIGURABLE: CONFIGURABLE\n};\n\n\n/***/ }),\n\n/***/ 1702:\n/***/ (function(module) {\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\n\nmodule.exports = bind ? function (fn) {\n  return fn && callBind(call, fn);\n} : function (fn) {\n  return fn && function () {\n    return call.apply(fn, arguments);\n  };\n};\n\n\n/***/ }),\n\n/***/ 5005:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\n\nvar aFunction = function (argument) {\n  return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n\n\n/***/ }),\n\n/***/ 1246:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(648);\nvar getMethod = __webpack_require__(8173);\nvar Iterators = __webpack_require__(7497);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (it != undefined) return getMethod(it, ITERATOR)\n    || getMethod(it, '@@iterator')\n    || Iterators[classof(it)];\n};\n\n\n/***/ }),\n\n/***/ 8554:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar aCallable = __webpack_require__(9662);\nvar anObject = __webpack_require__(9670);\nvar tryToString = __webpack_require__(6330);\nvar getIteratorMethod = __webpack_require__(1246);\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n  throw TypeError(tryToString(argument) + ' is not iterable');\n};\n\n\n/***/ }),\n\n/***/ 8173:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar aCallable = __webpack_require__(9662);\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n  var func = V[P];\n  return func == null ? undefined : aCallable(func);\n};\n\n\n/***/ }),\n\n/***/ 647:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar toObject = __webpack_require__(7908);\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n  var tailPos = position + matched.length;\n  var m = captures.length;\n  var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n  if (namedCaptures !== undefined) {\n    namedCaptures = toObject(namedCaptures);\n    symbols = SUBSTITUTION_SYMBOLS;\n  }\n  return replace(replacement, symbols, function (match, ch) {\n    var capture;\n    switch (charAt(ch, 0)) {\n      case '$': return '$';\n      case '&': return matched;\n      case '`': return stringSlice(str, 0, position);\n      case \"'\": return stringSlice(str, tailPos);\n      case '<':\n        capture = namedCaptures[stringSlice(ch, 1, -1)];\n        break;\n      default: // \\d\\d?\n        var n = +ch;\n        if (n === 0) return match;\n        if (n > m) {\n          var f = floor(n / 10);\n          if (f === 0) return match;\n          if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n          return match;\n        }\n        capture = captures[n - 1];\n    }\n    return capture === undefined ? '' : capture;\n  });\n};\n\n\n/***/ }),\n\n/***/ 7854:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n\n\n/***/ }),\n\n/***/ 2597:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar toObject = __webpack_require__(7908);\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n  return hasOwnProperty(toObject(it), key);\n};\n\n\n/***/ }),\n\n/***/ 3501:\n/***/ (function(module) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 842:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nmodule.exports = function (a, b) {\n  var console = global.console;\n  if (console && console.error) {\n    arguments.length == 1 ? console.error(a) : console.error(a, b);\n  }\n};\n\n\n/***/ }),\n\n/***/ 490:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n\n\n/***/ }),\n\n/***/ 4664:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar fails = __webpack_require__(7293);\nvar createElement = __webpack_require__(317);\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ 1179:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nvar global = __webpack_require__(7854);\n\nvar Array = global.Array;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n  var buffer = Array(bytes);\n  var exponentLength = bytes * 8 - mantissaLength - 1;\n  var eMax = (1 << exponentLength) - 1;\n  var eBias = eMax >> 1;\n  var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n  var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n  var index = 0;\n  var exponent, mantissa, c;\n  number = abs(number);\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (number != number || number === Infinity) {\n    // eslint-disable-next-line no-self-compare -- NaN check\n    mantissa = number != number ? 1 : 0;\n    exponent = eMax;\n  } else {\n    exponent = floor(log(number) / LN2);\n    if (number * (c = pow(2, -exponent)) < 1) {\n      exponent--;\n      c *= 2;\n    }\n    if (exponent + eBias >= 1) {\n      number += rt / c;\n    } else {\n      number += rt * pow(2, 1 - eBias);\n    }\n    if (number * c >= 2) {\n      exponent++;\n      c /= 2;\n    }\n    if (exponent + eBias >= eMax) {\n      mantissa = 0;\n      exponent = eMax;\n    } else if (exponent + eBias >= 1) {\n      mantissa = (number * c - 1) * pow(2, mantissaLength);\n      exponent = exponent + eBias;\n    } else {\n      mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n      exponent = 0;\n    }\n  }\n  for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);\n  exponent = exponent << mantissaLength | mantissa;\n  exponentLength += mantissaLength;\n  for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);\n  buffer[--index] |= sign * 128;\n  return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n  var bytes = buffer.length;\n  var exponentLength = bytes * 8 - mantissaLength - 1;\n  var eMax = (1 << exponentLength) - 1;\n  var eBias = eMax >> 1;\n  var nBits = exponentLength - 7;\n  var index = bytes - 1;\n  var sign = buffer[index--];\n  var exponent = sign & 127;\n  var mantissa;\n  sign >>= 7;\n  for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);\n  mantissa = exponent & (1 << -nBits) - 1;\n  exponent >>= -nBits;\n  nBits += mantissaLength;\n  for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);\n  if (exponent === 0) {\n    exponent = 1 - eBias;\n  } else if (exponent === eMax) {\n    return mantissa ? NaN : sign ? -Infinity : Infinity;\n  } else {\n    mantissa = mantissa + pow(2, mantissaLength);\n    exponent = exponent - eBias;\n  } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n  pack: pack,\n  unpack: unpack\n};\n\n\n/***/ }),\n\n/***/ 8361:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar fails = __webpack_require__(7293);\nvar classof = __webpack_require__(4326);\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n\n\n/***/ }),\n\n/***/ 9587:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\nvar setPrototypeOf = __webpack_require__(7674);\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n  var NewTarget, NewTargetPrototype;\n  if (\n    // it can work only with native `setPrototypeOf`\n    setPrototypeOf &&\n    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n    isCallable(NewTarget = dummy.constructor) &&\n    NewTarget !== Wrapper &&\n    isObject(NewTargetPrototype = NewTarget.prototype) &&\n    NewTargetPrototype !== Wrapper.prototype\n  ) setPrototypeOf($this, NewTargetPrototype);\n  return $this;\n};\n\n\n/***/ }),\n\n/***/ 2788:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar isCallable = __webpack_require__(614);\nvar store = __webpack_require__(5465);\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n  store.inspectSource = function (it) {\n    return functionToString(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n\n\n/***/ }),\n\n/***/ 8340:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n  if (isObject(options) && 'cause' in options) {\n    createNonEnumerableProperty(O, 'cause', options.cause);\n  }\n};\n\n\n/***/ }),\n\n/***/ 2423:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar uncurryThis = __webpack_require__(1702);\nvar hiddenKeys = __webpack_require__(3501);\nvar isObject = __webpack_require__(111);\nvar hasOwn = __webpack_require__(2597);\nvar defineProperty = (__webpack_require__(3070).f);\nvar getOwnPropertyNamesModule = __webpack_require__(8006);\nvar getOwnPropertyNamesExternalModule = __webpack_require__(1156);\nvar uid = __webpack_require__(9711);\nvar FREEZING = __webpack_require__(6677);\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\n\nvar setMetadata = function (it) {\n  defineProperty(it, METADATA, { value: {\n    objectID: 'O' + id++, // object ID\n    weakData: {}          // weak collections IDs\n  } });\n};\n\nvar fastKey = function (it, create) {\n  // return a primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!hasOwn(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMetadata(it);\n  // return object ID\n  } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n  if (!hasOwn(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMetadata(it);\n  // return the store of weak collections IDs\n  } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n  return it;\n};\n\nvar enable = function () {\n  meta.enable = function () { /* empty */ };\n  REQUIRED = true;\n  var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n  var splice = uncurryThis([].splice);\n  var test = {};\n  test[METADATA] = 1;\n\n  // prevent exposing of metadata key\n  if (getOwnPropertyNames(test).length) {\n    getOwnPropertyNamesModule.f = function (it) {\n      var result = getOwnPropertyNames(it);\n      for (var i = 0, length = result.length; i < length; i++) {\n        if (result[i] === METADATA) {\n          splice(result, i, 1);\n          break;\n        }\n      } return result;\n    };\n\n    $({ target: 'Object', stat: true, forced: true }, {\n      getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n    });\n  }\n};\n\nvar meta = module.exports = {\n  enable: enable,\n  fastKey: fastKey,\n  getWeakData: getWeakData,\n  onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n\n\n/***/ }),\n\n/***/ 9909:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar NATIVE_WEAK_MAP = __webpack_require__(8536);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar isObject = __webpack_require__(111);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar hasOwn = __webpack_require__(2597);\nvar shared = __webpack_require__(5465);\nvar sharedKey = __webpack_require__(6200);\nvar hiddenKeys = __webpack_require__(3501);\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n  var store = shared.state || (shared.state = new WeakMap());\n  var wmget = uncurryThis(store.get);\n  var wmhas = uncurryThis(store.has);\n  var wmset = uncurryThis(store.set);\n  set = function (it, metadata) {\n    if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    wmset(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return hasOwn(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return hasOwn(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n\n\n/***/ }),\n\n/***/ 7659:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\nvar Iterators = __webpack_require__(7497);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n\n\n/***/ }),\n\n/***/ 3157:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(4326);\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n  return classof(argument) == 'Array';\n};\n\n\n/***/ }),\n\n/***/ 614:\n/***/ (function(module) {\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n  return typeof argument == 'function';\n};\n\n\n/***/ }),\n\n/***/ 4411:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar fails = __webpack_require__(7293);\nvar isCallable = __webpack_require__(614);\nvar classof = __webpack_require__(648);\nvar getBuiltIn = __webpack_require__(5005);\nvar inspectSource = __webpack_require__(2788);\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function (argument) {\n  if (!isCallable(argument)) return false;\n  try {\n    construct(noop, empty, argument);\n    return true;\n  } catch (error) {\n    return false;\n  }\n};\n\nvar isConstructorLegacy = function (argument) {\n  if (!isCallable(argument)) return false;\n  switch (classof(argument)) {\n    case 'AsyncFunction':\n    case 'GeneratorFunction':\n    case 'AsyncGeneratorFunction': return false;\n    // we can't check .prototype since constructors produced by .bind haven't it\n  } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n  var called;\n  return isConstructorModern(isConstructorModern.call)\n    || !isConstructorModern(Object)\n    || !isConstructorModern(function () { called = true; })\n    || called;\n}) ? isConstructorLegacy : isConstructorModern;\n\n\n/***/ }),\n\n/***/ 4705:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar isCallable = __webpack_require__(614);\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : isCallable(detection) ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n\n\n/***/ }),\n\n/***/ 5988:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\n\nvar floor = Math.floor;\n\n// `IsIntegralNumber` abstract operation\n// https://tc39.es/ecma262/#sec-isintegralnumber\n// eslint-disable-next-line es/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n\n\n/***/ }),\n\n/***/ 111:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isCallable = __webpack_require__(614);\n\nmodule.exports = function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it);\n};\n\n\n/***/ }),\n\n/***/ 1913:\n/***/ (function(module) {\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ 7850:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar classof = __webpack_require__(4326);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n\n\n/***/ }),\n\n/***/ 2190:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar getBuiltIn = __webpack_require__(5005);\nvar isCallable = __webpack_require__(614);\nvar isPrototypeOf = __webpack_require__(7976);\nvar USE_SYMBOL_AS_UID = __webpack_require__(3307);\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  var $Symbol = getBuiltIn('Symbol');\n  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n\n\n/***/ }),\n\n/***/ 408:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar bind = __webpack_require__(9974);\nvar call = __webpack_require__(6916);\nvar anObject = __webpack_require__(9670);\nvar tryToString = __webpack_require__(6330);\nvar isArrayIteratorMethod = __webpack_require__(7659);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar isPrototypeOf = __webpack_require__(7976);\nvar getIterator = __webpack_require__(8554);\nvar getIteratorMethod = __webpack_require__(1246);\nvar iteratorClose = __webpack_require__(9212);\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n  var that = options && options.that;\n  var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n  var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n  var INTERRUPTED = !!(options && options.INTERRUPTED);\n  var fn = bind(unboundFunction, that);\n  var iterator, iterFn, index, length, result, next, step;\n\n  var stop = function (condition) {\n    if (iterator) iteratorClose(iterator, 'normal', condition);\n    return new Result(true, condition);\n  };\n\n  var callFn = function (value) {\n    if (AS_ENTRIES) {\n      anObject(value);\n      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n    } return INTERRUPTED ? fn(value, stop) : fn(value);\n  };\n\n  if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n        result = callFn(iterable[index]);\n        if (result && isPrototypeOf(ResultPrototype, result)) return result;\n      } return new Result(false);\n    }\n    iterator = getIterator(iterable, iterFn);\n  }\n\n  next = iterator.next;\n  while (!(step = call(next, iterator)).done) {\n    try {\n      result = callFn(step.value);\n    } catch (error) {\n      iteratorClose(iterator, 'throw', error);\n    }\n    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n  } return new Result(false);\n};\n\n\n/***/ }),\n\n/***/ 9212:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar call = __webpack_require__(6916);\nvar anObject = __webpack_require__(9670);\nvar getMethod = __webpack_require__(8173);\n\nmodule.exports = function (iterator, kind, value) {\n  var innerResult, innerError;\n  anObject(iterator);\n  try {\n    innerResult = getMethod(iterator, 'return');\n    if (!innerResult) {\n      if (kind === 'throw') throw value;\n      return value;\n    }\n    innerResult = call(innerResult, iterator);\n  } catch (error) {\n    innerError = true;\n    innerResult = error;\n  }\n  if (kind === 'throw') throw value;\n  if (innerError) throw innerResult;\n  anObject(innerResult);\n  return value;\n};\n\n\n/***/ }),\n\n/***/ 3383:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fails = __webpack_require__(7293);\nvar isCallable = __webpack_require__(614);\nvar create = __webpack_require__(30);\nvar getPrototypeOf = __webpack_require__(9518);\nvar redefine = __webpack_require__(1320);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar IS_PURE = __webpack_require__(1913);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n  var test = {};\n  // FF44- legacy iterators case\n  return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n  redefine(IteratorPrototype, ITERATOR, function () {\n    return this;\n  });\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n\n\n/***/ }),\n\n/***/ 7497:\n/***/ (function(module) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 6244:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toLength = __webpack_require__(7466);\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n  return toLength(obj.length);\n};\n\n\n/***/ }),\n\n/***/ 5948:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar bind = __webpack_require__(9974);\nvar getOwnPropertyDescriptor = (__webpack_require__(1236).f);\nvar macrotask = (__webpack_require__(261).set);\nvar IS_IOS = __webpack_require__(6833);\nvar IS_IOS_PEBBLE = __webpack_require__(1528);\nvar IS_WEBOS_WEBKIT = __webpack_require__(1036);\nvar IS_NODE = __webpack_require__(5268);\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n  flush = function () {\n    var parent, fn;\n    if (IS_NODE && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (error) {\n        if (head) notify();\n        else last = undefined;\n        throw error;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n  // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n  if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n    toggle = true;\n    node = document.createTextNode('');\n    new MutationObserver(flush).observe(node, { characterData: true });\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    promise = Promise.resolve(undefined);\n    // workaround of WebKit ~ iOS Safari 10.1 bug\n    promise.constructor = Promise;\n    then = bind(promise.then, promise);\n    notify = function () {\n      then(flush);\n    };\n  // Node.js without promises\n  } else if (IS_NODE) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    // strange IE + webpack dev server bug - use .bind(global)\n    macrotask = bind(macrotask, global);\n    notify = function () {\n      macrotask(flush);\n    };\n  }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n  var task = { fn: fn, next: undefined };\n  if (last) last.next = task;\n  if (!head) {\n    head = task;\n    notify();\n  } last = task;\n};\n\n\n/***/ }),\n\n/***/ 3366:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nmodule.exports = global.Promise;\n\n\n/***/ }),\n\n/***/ 133:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = __webpack_require__(7392);\nvar fails = __webpack_require__(7293);\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol();\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n  return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n\n\n/***/ }),\n\n/***/ 8536:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\nvar inspectSource = __webpack_require__(2788);\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n\n\n/***/ }),\n\n/***/ 8523:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar aCallable = __webpack_require__(9662);\n\nvar PromiseCapability = function (C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aCallable(resolve);\n  this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n\n\n/***/ }),\n\n/***/ 6277:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toString = __webpack_require__(1340);\n\nmodule.exports = function (argument, $default) {\n  return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n\n\n/***/ }),\n\n/***/ 3929:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isRegExp = __webpack_require__(7850);\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it) {\n  if (isRegExp(it)) {\n    throw TypeError(\"The method doesn't accept regular expressions\");\n  } return it;\n};\n\n\n/***/ }),\n\n/***/ 7023:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nvar globalIsFinite = global.isFinite;\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n// eslint-disable-next-line es/no-number-isfinite -- safe\nmodule.exports = Number.isFinite || function isFinite(it) {\n  return typeof it == 'number' && globalIsFinite(it);\n};\n\n\n/***/ }),\n\n/***/ 1574:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar uncurryThis = __webpack_require__(1702);\nvar call = __webpack_require__(6916);\nvar fails = __webpack_require__(7293);\nvar objectKeys = __webpack_require__(1956);\nvar getOwnPropertySymbolsModule = __webpack_require__(5181);\nvar propertyIsEnumerableModule = __webpack_require__(5296);\nvar toObject = __webpack_require__(7908);\nvar IndexedObject = __webpack_require__(8361);\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n  // should have correct order of operations (Edge bug)\n  if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n    enumerable: true,\n    get: function () {\n      defineProperty(this, 'b', {\n        value: 3,\n        enumerable: false\n      });\n    }\n  }), { b: 2 })).b !== 1) return true;\n  // should work with symbols and should have deterministic property order (V8 bug)\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line es/no-symbol -- safe\n  var symbol = Symbol();\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n  return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n  var T = toObject(target);\n  var argumentsLength = arguments.length;\n  var index = 1;\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  var propertyIsEnumerable = propertyIsEnumerableModule.f;\n  while (argumentsLength > index) {\n    var S = IndexedObject(arguments[index++]);\n    var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n\n\n/***/ }),\n\n/***/ 30:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = __webpack_require__(9670);\nvar defineProperties = __webpack_require__(6048);\nvar enumBugKeys = __webpack_require__(748);\nvar hiddenKeys = __webpack_require__(3501);\nvar html = __webpack_require__(490);\nvar documentCreateElement = __webpack_require__(317);\nvar sharedKey = __webpack_require__(6200);\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  activeXDocument = null; // avoid memory leak\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    activeXDocument = new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = typeof document != 'undefined'\n    ? document.domain && activeXDocument\n      ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n      : NullProtoObjectViaIFrame()\n    : NullProtoObjectViaActiveX(activeXDocument); // WSH\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : defineProperties(result, Properties);\n};\n\n\n/***/ }),\n\n/***/ 6048:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar definePropertyModule = __webpack_require__(3070);\nvar anObject = __webpack_require__(9670);\nvar toIndexedObject = __webpack_require__(5656);\nvar objectKeys = __webpack_require__(1956);\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var props = toIndexedObject(Properties);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n  return O;\n};\n\n\n/***/ }),\n\n/***/ 3070:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar IE8_DOM_DEFINE = __webpack_require__(4664);\nvar anObject = __webpack_require__(9670);\nvar toPropertyKey = __webpack_require__(4948);\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return $defineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n\n\n/***/ }),\n\n/***/ 1236:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar call = __webpack_require__(6916);\nvar propertyIsEnumerableModule = __webpack_require__(5296);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar toIndexedObject = __webpack_require__(5656);\nvar toPropertyKey = __webpack_require__(4948);\nvar hasOwn = __webpack_require__(2597);\nvar IE8_DOM_DEFINE = __webpack_require__(4664);\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPropertyKey(P);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n\n\n/***/ }),\n\n/***/ 1156:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = __webpack_require__(4326);\nvar toIndexedObject = __webpack_require__(5656);\nvar $getOwnPropertyNames = (__webpack_require__(8006).f);\nvar arraySlice = __webpack_require__(206);\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return $getOwnPropertyNames(it);\n  } catch (error) {\n    return arraySlice(windowNames);\n  }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && classof(it) == 'Window'\n    ? getWindowNames(it)\n    : $getOwnPropertyNames(toIndexedObject(it));\n};\n\n\n/***/ }),\n\n/***/ 8006:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(6324);\nvar enumBugKeys = __webpack_require__(748);\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n\n\n/***/ }),\n\n/***/ 5181:\n/***/ (function(__unused_webpack_module, exports) {\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ 9518:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar hasOwn = __webpack_require__(2597);\nvar isCallable = __webpack_require__(614);\nvar toObject = __webpack_require__(7908);\nvar sharedKey = __webpack_require__(6200);\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(8544);\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n  var object = toObject(O);\n  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n  var constructor = object.constructor;\n  if (isCallable(constructor) && object instanceof constructor) {\n    return constructor.prototype;\n  } return object instanceof Object ? ObjectPrototype : null;\n};\n\n\n/***/ }),\n\n/***/ 7976:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n\n\n/***/ }),\n\n/***/ 6324:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar hasOwn = __webpack_require__(2597);\nvar toIndexedObject = __webpack_require__(5656);\nvar indexOf = (__webpack_require__(1318).indexOf);\nvar hiddenKeys = __webpack_require__(3501);\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n    ~indexOf(result, key) || push(result, key);\n  }\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 1956:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(6324);\nvar enumBugKeys = __webpack_require__(748);\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n\n\n/***/ }),\n\n/***/ 5296:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ 7674:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable no-proto -- safe */\nvar uncurryThis = __webpack_require__(1702);\nvar anObject = __webpack_require__(9670);\nvar aPossiblePrototype = __webpack_require__(6077);\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n    setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n    setter(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    anObject(O);\n    aPossiblePrototype(proto);\n    if (CORRECT_SETTER) setter(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n\n\n/***/ }),\n\n/***/ 4699:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar uncurryThis = __webpack_require__(1702);\nvar objectKeys = __webpack_require__(1956);\nvar toIndexedObject = __webpack_require__(5656);\nvar $propertyIsEnumerable = (__webpack_require__(5296).f);\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n  return function (it) {\n    var O = toIndexedObject(it);\n    var keys = objectKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) {\n      key = keys[i++];\n      if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n        push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n      }\n    }\n    return result;\n  };\n};\n\nmodule.exports = {\n  // `Object.entries` method\n  // https://tc39.es/ecma262/#sec-object.entries\n  entries: createMethod(true),\n  // `Object.values` method\n  // https://tc39.es/ecma262/#sec-object.values\n  values: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ 288:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar classof = __webpack_require__(648);\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n  return '[object ' + classof(this) + ']';\n};\n\n\n/***/ }),\n\n/***/ 2140:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n  var fn, val;\n  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n\n/***/ 3887:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\nvar uncurryThis = __webpack_require__(1702);\nvar getOwnPropertyNamesModule = __webpack_require__(8006);\nvar getOwnPropertySymbolsModule = __webpack_require__(5181);\nvar anObject = __webpack_require__(9670);\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n\n\n/***/ }),\n\n/***/ 857:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nmodule.exports = global;\n\n\n/***/ }),\n\n/***/ 2534:\n/***/ (function(module) {\n\nmodule.exports = function (exec) {\n  try {\n    return { error: false, value: exec() };\n  } catch (error) {\n    return { error: true, value: error };\n  }\n};\n\n\n/***/ }),\n\n/***/ 9478:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar isObject = __webpack_require__(111);\nvar newPromiseCapability = __webpack_require__(8523);\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n\n\n/***/ }),\n\n/***/ 2248:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar redefine = __webpack_require__(1320);\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) redefine(target, key, src[key], options);\n  return target;\n};\n\n\n/***/ }),\n\n/***/ 1320:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isCallable = __webpack_require__(614);\nvar hasOwn = __webpack_require__(2597);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar setGlobal = __webpack_require__(3505);\nvar inspectSource = __webpack_require__(2788);\nvar InternalStateModule = __webpack_require__(9909);\nvar CONFIGURABLE_FUNCTION_NAME = (__webpack_require__(6530).CONFIGURABLE);\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n  var unsafe = options ? !!options.unsafe : false;\n  var simple = options ? !!options.enumerable : false;\n  var noTargetGet = options ? !!options.noTargetGet : false;\n  var name = options && options.name !== undefined ? options.name : key;\n  var state;\n  if (isCallable(value)) {\n    if (String(name).slice(0, 7) === 'Symbol(') {\n      name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n    }\n    if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n      createNonEnumerableProperty(value, 'name', name);\n    }\n    state = enforceInternalState(value);\n    if (!state.source) {\n      state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n    }\n  }\n  if (O === global) {\n    if (simple) O[key] = value;\n    else setGlobal(key, value);\n    return;\n  } else if (!unsafe) {\n    delete O[key];\n  } else if (!noTargetGet && O[key]) {\n    simple = true;\n  }\n  if (simple) O[key] = value;\n  else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n  return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n\n\n/***/ }),\n\n/***/ 7651:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar anObject = __webpack_require__(9670);\nvar isCallable = __webpack_require__(614);\nvar classof = __webpack_require__(4326);\nvar regexpExec = __webpack_require__(2261);\n\nvar TypeError = global.TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (isCallable(exec)) {\n    var result = call(exec, R, S);\n    if (result !== null) anObject(result);\n    return result;\n  }\n  if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n  throw TypeError('RegExp#exec called on incompatible receiver');\n};\n\n\n/***/ }),\n\n/***/ 2261:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = __webpack_require__(6916);\nvar uncurryThis = __webpack_require__(1702);\nvar toString = __webpack_require__(1340);\nvar regexpFlags = __webpack_require__(7066);\nvar stickyHelpers = __webpack_require__(2999);\nvar shared = __webpack_require__(2309);\nvar create = __webpack_require__(30);\nvar getInternalState = (__webpack_require__(9909).get);\nvar UNSUPPORTED_DOT_ALL = __webpack_require__(9441);\nvar UNSUPPORTED_NCG = __webpack_require__(7168);\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/;\n  var re2 = /b*/g;\n  call(nativeExec, re1, 'a');\n  call(nativeExec, re2, 'a');\n  return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n  // eslint-disable-next-line max-statements -- TODO\n  patchedExec = function exec(string) {\n    var re = this;\n    var state = getInternalState(re);\n    var str = toString(string);\n    var raw = state.raw;\n    var result, reCopy, lastIndex, match, i, object, group;\n\n    if (raw) {\n      raw.lastIndex = re.lastIndex;\n      result = call(patchedExec, raw, str);\n      re.lastIndex = raw.lastIndex;\n      return result;\n    }\n\n    var groups = state.groups;\n    var sticky = UNSUPPORTED_Y && re.sticky;\n    var flags = call(regexpFlags, re);\n    var source = re.source;\n    var charsAdded = 0;\n    var strCopy = str;\n\n    if (sticky) {\n      flags = replace(flags, 'y', '');\n      if (indexOf(flags, 'g') === -1) {\n        flags += 'g';\n      }\n\n      strCopy = stringSlice(str, re.lastIndex);\n      // Support anchored sticky behavior.\n      if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n        source = '(?: ' + source + ')';\n        strCopy = ' ' + strCopy;\n        charsAdded++;\n      }\n      // ^(? + rx + ) is needed, in combination with some str slicing, to\n      // simulate the 'y' flag.\n      reCopy = new RegExp('^(?:' + source + ')', flags);\n    }\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n    match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n    if (sticky) {\n      if (match) {\n        match.input = stringSlice(match.input, charsAdded);\n        match[0] = stringSlice(match[0], charsAdded);\n        match.index = re.lastIndex;\n        re.lastIndex += match[0].length;\n      } else re.lastIndex = 0;\n    } else if (UPDATES_LAST_INDEX_WRONG && match) {\n      re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      call(nativeReplace, match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    if (match && groups) {\n      match.groups = object = create(null);\n      for (i = 0; i < groups.length; i++) {\n        group = groups[i];\n        object[group[0]] = match[group[1]];\n      }\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n\n\n/***/ }),\n\n/***/ 7066:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar anObject = __webpack_require__(9670);\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.dotAll) result += 's';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 2999:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar global = __webpack_require__(7854);\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nexports.UNSUPPORTED_Y = fails(function () {\n  var re = $RegExp('a', 'y');\n  re.lastIndex = 2;\n  return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n  var re = $RegExp('^r', 'gy');\n  re.lastIndex = 2;\n  return re.exec('str') != null;\n});\n\n\n/***/ }),\n\n/***/ 9441:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar global = __webpack_require__(7854);\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n  var re = $RegExp('.', 's');\n  return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n\n\n/***/ }),\n\n/***/ 7168:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar global = __webpack_require__(7854);\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n  var re = $RegExp('(?<a>b)', 'g');\n  return re.exec('b').groups.a !== 'b' ||\n    'b'.replace(re, '$<a>c') !== 'bc';\n});\n\n\n/***/ }),\n\n/***/ 4488:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n  return it;\n};\n\n\n/***/ }),\n\n/***/ 3505:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n  try {\n    defineProperty(global, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n\n\n/***/ }),\n\n/***/ 6340:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar getBuiltIn = __webpack_require__(5005);\nvar definePropertyModule = __webpack_require__(3070);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar DESCRIPTORS = __webpack_require__(9781);\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n  var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n  var defineProperty = definePropertyModule.f;\n\n  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n    defineProperty(Constructor, SPECIES, {\n      configurable: true,\n      get: function () { return this; }\n    });\n  }\n};\n\n\n/***/ }),\n\n/***/ 8003:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar defineProperty = (__webpack_require__(3070).f);\nvar hasOwn = __webpack_require__(2597);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n  if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n    defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n  }\n};\n\n\n/***/ }),\n\n/***/ 6200:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar shared = __webpack_require__(2309);\nvar uid = __webpack_require__(9711);\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ 5465:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar setGlobal = __webpack_require__(3505);\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n\n\n/***/ }),\n\n/***/ 2309:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar IS_PURE = __webpack_require__(1913);\nvar store = __webpack_require__(5465);\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.19.0',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n\n/***/ 6707:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar aConstructor = __webpack_require__(9483);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n\n\n/***/ }),\n\n/***/ 3429:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\n// check the existence of a method, lowercase\n// of a tag and escaping quotes in arguments\nmodule.exports = function (METHOD_NAME) {\n  return fails(function () {\n    var test = ''[METHOD_NAME]('\"');\n    return test !== test.toLowerCase() || test.split('\"').length > 3;\n  });\n};\n\n\n/***/ }),\n\n/***/ 8710:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar toString = __webpack_require__(1340);\nvar requireObjectCoercible = __webpack_require__(4488);\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n  return function ($this, pos) {\n    var S = toString(requireObjectCoercible($this));\n    var position = toIntegerOrInfinity(pos);\n    var size = S.length;\n    var first, second;\n    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n    first = charCodeAt(S, position);\n    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n      || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n        ? CONVERT_TO_STRING\n          ? charAt(S, position)\n          : first\n        : CONVERT_TO_STRING\n          ? stringSlice(S, position, position + 2)\n          : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.codePointAt` method\n  // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n  codeAt: createMethod(false),\n  // `String.prototype.at` method\n  // https://github.com/mathiasbynens/String.prototype.at\n  charAt: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ 8415:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar toString = __webpack_require__(1340);\nvar requireObjectCoercible = __webpack_require__(4488);\n\nvar RangeError = global.RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n  var str = toString(requireObjectCoercible(this));\n  var result = '';\n  var n = toIntegerOrInfinity(count);\n  if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 6091:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar PROPER_FUNCTION_NAME = (__webpack_require__(6530).PROPER);\nvar fails = __webpack_require__(7293);\nvar whitespaces = __webpack_require__(1361);\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n  return fails(function () {\n    return !!whitespaces[METHOD_NAME]()\n      || non[METHOD_NAME]() !== non\n      || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n  });\n};\n\n\n/***/ }),\n\n/***/ 3111:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar toString = __webpack_require__(1340);\nvar whitespaces = __webpack_require__(1361);\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n  return function ($this) {\n    var string = toString(requireObjectCoercible($this));\n    if (TYPE & 1) string = replace(string, ltrim, '');\n    if (TYPE & 2) string = replace(string, rtrim, '');\n    return string;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.{ trimLeft, trimStart }` methods\n  // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n  start: createMethod(1),\n  // `String.prototype.{ trimRight, trimEnd }` methods\n  // https://tc39.es/ecma262/#sec-string.prototype.trimend\n  end: createMethod(2),\n  // `String.prototype.trim` method\n  // https://tc39.es/ecma262/#sec-string.prototype.trim\n  trim: createMethod(3)\n};\n\n\n/***/ }),\n\n/***/ 261:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar apply = __webpack_require__(2104);\nvar bind = __webpack_require__(9974);\nvar isCallable = __webpack_require__(614);\nvar hasOwn = __webpack_require__(2597);\nvar fails = __webpack_require__(7293);\nvar html = __webpack_require__(490);\nvar arraySlice = __webpack_require__(206);\nvar createElement = __webpack_require__(317);\nvar IS_IOS = __webpack_require__(6833);\nvar IS_NODE = __webpack_require__(5268);\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n  // Deno throws a ReferenceError on `location` access without `--location` flag\n  location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n  if (hasOwn(queue, id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\n\nvar runner = function (id) {\n  return function () {\n    run(id);\n  };\n};\n\nvar listener = function (event) {\n  run(event.data);\n};\n\nvar post = function (id) {\n  // old engines have not location.origin\n  global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n  set = function setImmediate(fn) {\n    var args = arraySlice(arguments, 1);\n    queue[++counter] = function () {\n      apply(isCallable(fn) ? fn : Function(fn), undefined, args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clear = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (IS_NODE) {\n    defer = function (id) {\n      process.nextTick(runner(id));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(runner(id));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  // except iOS - https://github.com/zloirock/core-js/issues/624\n  } else if (MessageChannel && !IS_IOS) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = bind(port.postMessage, port);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (\n    global.addEventListener &&\n    isCallable(global.postMessage) &&\n    !global.importScripts &&\n    location && location.protocol !== 'file:' &&\n    !fails(post)\n  ) {\n    defer = post;\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in createElement('script')) {\n    defer = function (id) {\n      html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(runner(id), 0);\n    };\n  }\n}\n\nmodule.exports = {\n  set: set,\n  clear: clear\n};\n\n\n/***/ }),\n\n/***/ 863:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n\n\n/***/ }),\n\n/***/ 1400:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toIntegerOrInfinity = __webpack_require__(9303);\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toIntegerOrInfinity(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n\n\n/***/ }),\n\n/***/ 7067:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar toLength = __webpack_require__(7466);\n\nvar RangeError = global.RangeError;\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n  if (it === undefined) return 0;\n  var number = toIntegerOrInfinity(it);\n  var length = toLength(number);\n  if (number !== length) throw RangeError('Wrong length or index');\n  return length;\n};\n\n\n/***/ }),\n\n/***/ 5656:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = __webpack_require__(8361);\nvar requireObjectCoercible = __webpack_require__(4488);\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n\n\n/***/ }),\n\n/***/ 9303:\n/***/ (function(module) {\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n  var number = +argument;\n  // eslint-disable-next-line no-self-compare -- safe\n  return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n\n\n/***/ }),\n\n/***/ 7466:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toIntegerOrInfinity = __webpack_require__(9303);\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ 7908:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar requireObjectCoercible = __webpack_require__(4488);\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n\n\n/***/ }),\n\n/***/ 4590:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar toPositiveInteger = __webpack_require__(3002);\n\nvar RangeError = global.RangeError;\n\nmodule.exports = function (it, BYTES) {\n  var offset = toPositiveInteger(it);\n  if (offset % BYTES) throw RangeError('Wrong offset');\n  return offset;\n};\n\n\n/***/ }),\n\n/***/ 3002:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar toIntegerOrInfinity = __webpack_require__(9303);\n\nvar RangeError = global.RangeError;\n\nmodule.exports = function (it) {\n  var result = toIntegerOrInfinity(it);\n  if (result < 0) throw RangeError(\"The argument can't be less than 0\");\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 7593:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar isObject = __webpack_require__(111);\nvar isSymbol = __webpack_require__(2190);\nvar getMethod = __webpack_require__(8173);\nvar ordinaryToPrimitive = __webpack_require__(2140);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n  if (!isObject(input) || isSymbol(input)) return input;\n  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n  var result;\n  if (exoticToPrim) {\n    if (pref === undefined) pref = 'default';\n    result = call(exoticToPrim, input, pref);\n    if (!isObject(result) || isSymbol(result)) return result;\n    throw TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n\n\n/***/ }),\n\n/***/ 4948:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toPrimitive = __webpack_require__(7593);\nvar isSymbol = __webpack_require__(2190);\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n  var key = toPrimitive(argument, 'string');\n  return isSymbol(key) ? key : key + '';\n};\n\n\n/***/ }),\n\n/***/ 1694:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n\n\n/***/ }),\n\n/***/ 1340:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar classof = __webpack_require__(648);\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n  return String(argument);\n};\n\n\n/***/ }),\n\n/***/ 6330:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n  try {\n    return String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n\n\n/***/ }),\n\n/***/ 9843:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = __webpack_require__(3832);\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar ArrayBufferModule = __webpack_require__(2091);\nvar anInstance = __webpack_require__(5787);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar isIntegralNumber = __webpack_require__(5988);\nvar toLength = __webpack_require__(7466);\nvar toIndex = __webpack_require__(7067);\nvar toOffset = __webpack_require__(4590);\nvar toPropertyKey = __webpack_require__(4948);\nvar hasOwn = __webpack_require__(2597);\nvar classof = __webpack_require__(648);\nvar isObject = __webpack_require__(111);\nvar isSymbol = __webpack_require__(2190);\nvar create = __webpack_require__(30);\nvar isPrototypeOf = __webpack_require__(7976);\nvar setPrototypeOf = __webpack_require__(7674);\nvar getOwnPropertyNames = (__webpack_require__(8006).f);\nvar typedArrayFrom = __webpack_require__(7321);\nvar forEach = (__webpack_require__(2092).forEach);\nvar setSpecies = __webpack_require__(6340);\nvar definePropertyModule = __webpack_require__(3070);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar InternalStateModule = __webpack_require__(9909);\nvar inheritIfRequired = __webpack_require__(9587);\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar round = Math.round;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar ArrayBufferPrototype = ArrayBuffer.prototype;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n  aTypedArrayConstructor(C);\n  var index = 0;\n  var length = list.length;\n  var result = new C(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n};\n\nvar addGetter = function (it, key) {\n  nativeDefineProperty(it, key, { get: function () {\n    return getInternalState(this)[key];\n  } });\n};\n\nvar isArrayBuffer = function (it) {\n  var klass;\n  return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n  return isTypedArray(target)\n    && !isSymbol(key)\n    && key in target\n    && isIntegralNumber(+key)\n    && key >= 0;\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n  key = toPropertyKey(key);\n  return isTypedArrayIndex(target, key)\n    ? createPropertyDescriptor(2, target[key])\n    : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n  key = toPropertyKey(key);\n  if (isTypedArrayIndex(target, key)\n    && isObject(descriptor)\n    && hasOwn(descriptor, 'value')\n    && !hasOwn(descriptor, 'get')\n    && !hasOwn(descriptor, 'set')\n    // TODO: add validation descriptor w/o calling accessors\n    && !descriptor.configurable\n    && (!hasOwn(descriptor, 'writable') || descriptor.writable)\n    && (!hasOwn(descriptor, 'enumerable') || descriptor.enumerable)\n  ) {\n    target[key] = descriptor.value;\n    return target;\n  } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n  if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n    getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n    definePropertyModule.f = wrappedDefineProperty;\n    addGetter(TypedArrayPrototype, 'buffer');\n    addGetter(TypedArrayPrototype, 'byteOffset');\n    addGetter(TypedArrayPrototype, 'byteLength');\n    addGetter(TypedArrayPrototype, 'length');\n  }\n\n  $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n    getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n    defineProperty: wrappedDefineProperty\n  });\n\n  module.exports = function (TYPE, wrapper, CLAMPED) {\n    var BYTES = TYPE.match(/\\d+$/)[0] / 8;\n    var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n    var GETTER = 'get' + TYPE;\n    var SETTER = 'set' + TYPE;\n    var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n    var TypedArrayConstructor = NativeTypedArrayConstructor;\n    var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n    var exported = {};\n\n    var getter = function (that, index) {\n      var data = getInternalState(that);\n      return data.view[GETTER](index * BYTES + data.byteOffset, true);\n    };\n\n    var setter = function (that, index, value) {\n      var data = getInternalState(that);\n      if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n      data.view[SETTER](index * BYTES + data.byteOffset, value, true);\n    };\n\n    var addElement = function (that, index) {\n      nativeDefineProperty(that, index, {\n        get: function () {\n          return getter(this, index);\n        },\n        set: function (value) {\n          return setter(this, index, value);\n        },\n        enumerable: true\n      });\n    };\n\n    if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n      TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n        anInstance(that, TypedArrayConstructorPrototype);\n        var index = 0;\n        var byteOffset = 0;\n        var buffer, byteLength, length;\n        if (!isObject(data)) {\n          length = toIndex(data);\n          byteLength = length * BYTES;\n          buffer = new ArrayBuffer(byteLength);\n        } else if (isArrayBuffer(data)) {\n          buffer = data;\n          byteOffset = toOffset(offset, BYTES);\n          var $len = data.byteLength;\n          if ($length === undefined) {\n            if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n            byteLength = $len - byteOffset;\n            if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n          } else {\n            byteLength = toLength($length) * BYTES;\n            if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n          }\n          length = byteLength / BYTES;\n        } else if (isTypedArray(data)) {\n          return fromList(TypedArrayConstructor, data);\n        } else {\n          return call(typedArrayFrom, TypedArrayConstructor, data);\n        }\n        setInternalState(that, {\n          buffer: buffer,\n          byteOffset: byteOffset,\n          byteLength: byteLength,\n          length: length,\n          view: new DataView(buffer)\n        });\n        while (index < length) addElement(that, index++);\n      });\n\n      if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n      TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n    } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n      TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n        anInstance(dummy, TypedArrayConstructorPrototype);\n        return inheritIfRequired(function () {\n          if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n          if (isArrayBuffer(data)) return $length !== undefined\n            ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n            : typedArrayOffset !== undefined\n              ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n              : new NativeTypedArrayConstructor(data);\n          if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n          return call(typedArrayFrom, TypedArrayConstructor, data);\n        }(), dummy, TypedArrayConstructor);\n      });\n\n      if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n      forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n        if (!(key in TypedArrayConstructor)) {\n          createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n        }\n      });\n      TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n    }\n\n    if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n    }\n\n    createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_CONSTRUCTOR, TypedArrayConstructor);\n\n    if (TYPED_ARRAY_TAG) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n    }\n\n    exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n    $({\n      global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS\n    }, exported);\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n      createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n    }\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n    }\n\n    setSpecies(CONSTRUCTOR_NAME);\n  };\n} else module.exports = function () { /* empty */ };\n\n\n/***/ }),\n\n/***/ 3832:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable no-new -- required for testing */\nvar global = __webpack_require__(7854);\nvar fails = __webpack_require__(7293);\nvar checkCorrectnessOfIteration = __webpack_require__(7072);\nvar NATIVE_ARRAY_BUFFER_VIEWS = (__webpack_require__(2094).NATIVE_ARRAY_BUFFER_VIEWS);\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n  Int8Array(1);\n}) || !fails(function () {\n  new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n  new Int8Array();\n  new Int8Array(null);\n  new Int8Array(1.5);\n  new Int8Array(iterable);\n}, true) || fails(function () {\n  // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n  return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n\n\n/***/ }),\n\n/***/ 3074:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar arrayFromConstructorAndList = __webpack_require__(7745);\nvar typedArraySpeciesConstructor = __webpack_require__(6304);\n\nmodule.exports = function (instance, list) {\n  return arrayFromConstructorAndList(typedArraySpeciesConstructor(instance), list);\n};\n\n\n/***/ }),\n\n/***/ 7321:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar bind = __webpack_require__(9974);\nvar call = __webpack_require__(6916);\nvar aConstructor = __webpack_require__(9483);\nvar toObject = __webpack_require__(7908);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar getIterator = __webpack_require__(8554);\nvar getIteratorMethod = __webpack_require__(1246);\nvar isArrayIteratorMethod = __webpack_require__(7659);\nvar aTypedArrayConstructor = (__webpack_require__(2094).aTypedArrayConstructor);\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n  var C = aConstructor(this);\n  var O = toObject(source);\n  var argumentsLength = arguments.length;\n  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n  var mapping = mapfn !== undefined;\n  var iteratorMethod = getIteratorMethod(O);\n  var i, length, result, step, iterator, next;\n  if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) {\n    iterator = getIterator(O, iteratorMethod);\n    next = iterator.next;\n    O = [];\n    while (!(step = call(next, iterator)).done) {\n      O.push(step.value);\n    }\n  }\n  if (mapping && argumentsLength > 2) {\n    mapfn = bind(mapfn, arguments[2]);\n  }\n  length = lengthOfArrayLike(O);\n  result = new (aTypedArrayConstructor(C))(length);\n  for (i = 0; length > i; i++) {\n    result[i] = mapping ? mapfn(O[i], i) : O[i];\n  }\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 6304:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar speciesConstructor = __webpack_require__(6707);\n\nvar TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\n\n// a part of `TypedArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#typedarray-species-create\nmodule.exports = function (originalArray) {\n  return aTypedArrayConstructor(speciesConstructor(originalArray, originalArray[TYPED_ARRAY_CONSTRUCTOR]));\n};\n\n\n/***/ }),\n\n/***/ 9711:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar uncurryThis = __webpack_require__(1702);\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n\n\n/***/ }),\n\n/***/ 3307:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = __webpack_require__(133);\n\nmodule.exports = NATIVE_SYMBOL\n  && !Symbol.sham\n  && typeof Symbol.iterator == 'symbol';\n\n\n/***/ }),\n\n/***/ 6061:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nexports.f = wellKnownSymbol;\n\n\n/***/ }),\n\n/***/ 5112:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar shared = __webpack_require__(2309);\nvar hasOwn = __webpack_require__(2597);\nvar uid = __webpack_require__(9711);\nvar NATIVE_SYMBOL = __webpack_require__(133);\nvar USE_SYMBOL_AS_UID = __webpack_require__(3307);\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n    var description = 'Symbol.' + name;\n    if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n      WellKnownSymbolsStore[name] = Symbol[name];\n    } else if (USE_SYMBOL_AS_UID && symbolFor) {\n      WellKnownSymbolsStore[name] = symbolFor(description);\n    } else {\n      WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n    }\n  } return WellKnownSymbolsStore[name];\n};\n\n\n/***/ }),\n\n/***/ 1361:\n/***/ (function(module) {\n\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n  '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\n\n/***/ }),\n\n/***/ 9170:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar isPrototypeOf = __webpack_require__(7976);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar copyConstructorProperties = __webpack_require__(9920);\nvar create = __webpack_require__(30);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar clearErrorStack = __webpack_require__(7741);\nvar installErrorCause = __webpack_require__(8340);\nvar iterate = __webpack_require__(408);\nvar normalizeStringArgument = __webpack_require__(6277);\nvar ERROR_STACK_INSTALLABLE = __webpack_require__(2914);\n\nvar Error = global.Error;\nvar push = [].push;\n\nvar $AggregateError = function AggregateError(errors, message /* , options */) {\n  var that = isPrototypeOf(AggregateErrorPrototype, this) ? this : create(AggregateErrorPrototype);\n  var options = arguments.length > 2 ? arguments[2] : undefined;\n  if (setPrototypeOf) {\n    that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));\n  }\n  createNonEnumerableProperty(that, 'message', normalizeStringArgument(message, ''));\n  if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));\n  installErrorCause(that, options);\n  var errorsArray = [];\n  iterate(errors, push, { that: errorsArray });\n  createNonEnumerableProperty(that, 'errors', errorsArray);\n  return that;\n};\n\nif (setPrototypeOf) setPrototypeOf($AggregateError, Error);\nelse copyConstructorProperties($AggregateError, Error);\n\nvar AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, {\n  constructor: createPropertyDescriptor(1, $AggregateError),\n  message: createPropertyDescriptor(1, ''),\n  name: createPropertyDescriptor(1, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true }, {\n  AggregateError: $AggregateError\n});\n\n\n/***/ }),\n\n/***/ 2222:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar fails = __webpack_require__(7293);\nvar isArray = __webpack_require__(3157);\nvar isObject = __webpack_require__(111);\nvar toObject = __webpack_require__(7908);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar createProperty = __webpack_require__(6135);\nvar arraySpeciesCreate = __webpack_require__(5417);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar V8_VERSION = __webpack_require__(7392);\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\nvar TypeError = global.TypeError;\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n  var array = [];\n  array[IS_CONCAT_SPREADABLE] = false;\n  return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n  if (!isObject(O)) return false;\n  var spreadable = O[IS_CONCAT_SPREADABLE];\n  return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  concat: function concat(arg) {\n    var O = toObject(this);\n    var A = arraySpeciesCreate(O, 0);\n    var n = 0;\n    var i, k, length, len, E;\n    for (i = -1, length = arguments.length; i < length; i++) {\n      E = i === -1 ? O : arguments[i];\n      if (isConcatSpreadable(E)) {\n        len = lengthOfArrayLike(E);\n        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n      } else {\n        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        createProperty(A, n++, E);\n      }\n    }\n    A.length = n;\n    return A;\n  }\n});\n\n\n/***/ }),\n\n/***/ 545:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar copyWithin = __webpack_require__(1048);\nvar addToUnscopables = __webpack_require__(1223);\n\n// `Array.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n$({ target: 'Array', proto: true }, {\n  copyWithin: copyWithin\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('copyWithin');\n\n\n/***/ }),\n\n/***/ 3290:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar fill = __webpack_require__(1285);\nvar addToUnscopables = __webpack_require__(1223);\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n  fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n\n\n/***/ }),\n\n/***/ 7327:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $filter = (__webpack_require__(2092).filter);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  filter: function filter(callbackfn /* , thisArg */) {\n    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n\n/***/ }),\n\n/***/ 1038:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar from = __webpack_require__(8457);\nvar checkCorrectnessOfIteration = __webpack_require__(7072);\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n  // eslint-disable-next-line es/no-array-from -- required for testing\n  Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n  from: from\n});\n\n\n/***/ }),\n\n/***/ 6699:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $includes = (__webpack_require__(1318).includes);\nvar addToUnscopables = __webpack_require__(1223);\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n\n\n/***/ }),\n\n/***/ 6992:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toIndexedObject = __webpack_require__(5656);\nvar addToUnscopables = __webpack_require__(1223);\nvar Iterators = __webpack_require__(7497);\nvar InternalStateModule = __webpack_require__(9909);\nvar defineIterator = __webpack_require__(654);\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return { value: undefined, done: true };\n  }\n  if (kind == 'keys') return { value: index, done: false };\n  if (kind == 'values') return { value: target[index], done: false };\n  return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n\n/***/ 9600:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar uncurryThis = __webpack_require__(1702);\nvar IndexedObject = __webpack_require__(8361);\nvar toIndexedObject = __webpack_require__(5656);\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar un$Join = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n  join: function join(separator) {\n    return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator);\n  }\n});\n\n\n/***/ }),\n\n/***/ 1249:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $map = (__webpack_require__(2092).map);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  map: function map(callbackfn /* , thisArg */) {\n    return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n\n/***/ }),\n\n/***/ 7042:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar isArray = __webpack_require__(3157);\nvar isConstructor = __webpack_require__(4411);\nvar isObject = __webpack_require__(111);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar toIndexedObject = __webpack_require__(5656);\nvar createProperty = __webpack_require__(6135);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\nvar un$Slice = __webpack_require__(206);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  slice: function slice(start, end) {\n    var O = toIndexedObject(this);\n    var length = lengthOfArrayLike(O);\n    var k = toAbsoluteIndex(start, length);\n    var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n    // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n    var Constructor, result, n;\n    if (isArray(O)) {\n      Constructor = O.constructor;\n      // cross-realm fallback\n      if (isConstructor(Constructor) && (Constructor === Array || isArray(Constructor.prototype))) {\n        Constructor = undefined;\n      } else if (isObject(Constructor)) {\n        Constructor = Constructor[SPECIES];\n        if (Constructor === null) Constructor = undefined;\n      }\n      if (Constructor === Array || Constructor === undefined) {\n        return un$Slice(O, k, fin);\n      }\n    }\n    result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n    for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n    result.length = n;\n    return result;\n  }\n});\n\n\n/***/ }),\n\n/***/ 2707:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar uncurryThis = __webpack_require__(1702);\nvar aCallable = __webpack_require__(9662);\nvar toObject = __webpack_require__(7908);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar toString = __webpack_require__(1340);\nvar fails = __webpack_require__(7293);\nvar internalSort = __webpack_require__(4362);\nvar arrayMethodIsStrict = __webpack_require__(9341);\nvar FF = __webpack_require__(8886);\nvar IE_OR_EDGE = __webpack_require__(256);\nvar V8 = __webpack_require__(7392);\nvar WEBKIT = __webpack_require__(8008);\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n  test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n  test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n  // feature detection can be too slow, so check engines versions\n  if (V8) return V8 < 70;\n  if (FF && FF > 3) return;\n  if (IE_OR_EDGE) return true;\n  if (WEBKIT) return WEBKIT < 603;\n\n  var result = '';\n  var code, chr, value, index;\n\n  // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n  for (code = 65; code < 76; code++) {\n    chr = String.fromCharCode(code);\n\n    switch (code) {\n      case 66: case 69: case 70: case 72: value = 3; break;\n      case 68: case 71: value = 4; break;\n      default: value = 2;\n    }\n\n    for (index = 0; index < 47; index++) {\n      test.push({ k: chr + index, v: value });\n    }\n  }\n\n  test.sort(function (a, b) { return b.v - a.v; });\n\n  for (index = 0; index < test.length; index++) {\n    chr = test[index].k.charAt(0);\n    if (result.charAt(result.length - 1) !== chr) result += chr;\n  }\n\n  return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n  return function (x, y) {\n    if (y === undefined) return -1;\n    if (x === undefined) return 1;\n    if (comparefn !== undefined) return +comparefn(x, y) || 0;\n    return toString(x) > toString(y) ? 1 : -1;\n  };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  sort: function sort(comparefn) {\n    if (comparefn !== undefined) aCallable(comparefn);\n\n    var array = toObject(this);\n\n    if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n    var items = [];\n    var arrayLength = lengthOfArrayLike(array);\n    var itemsLength, index;\n\n    for (index = 0; index < arrayLength; index++) {\n      if (index in array) push(items, array[index]);\n    }\n\n    internalSort(items, getSortCompare(comparefn));\n\n    itemsLength = items.length;\n    index = 0;\n\n    while (index < itemsLength) array[index] = items[index++];\n    while (index < arrayLength) delete array[index++];\n\n    return array;\n  }\n});\n\n\n/***/ }),\n\n/***/ 561:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar toObject = __webpack_require__(7908);\nvar arraySpeciesCreate = __webpack_require__(5417);\nvar createProperty = __webpack_require__(6135);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar TypeError = global.TypeError;\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  splice: function splice(start, deleteCount /* , ...items */) {\n    var O = toObject(this);\n    var len = lengthOfArrayLike(O);\n    var actualStart = toAbsoluteIndex(start, len);\n    var argumentsLength = arguments.length;\n    var insertCount, actualDeleteCount, A, k, from, to;\n    if (argumentsLength === 0) {\n      insertCount = actualDeleteCount = 0;\n    } else if (argumentsLength === 1) {\n      insertCount = 0;\n      actualDeleteCount = len - actualStart;\n    } else {\n      insertCount = argumentsLength - 2;\n      actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n    }\n    if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n      throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n    }\n    A = arraySpeciesCreate(O, actualDeleteCount);\n    for (k = 0; k < actualDeleteCount; k++) {\n      from = actualStart + k;\n      if (from in O) createProperty(A, k, O[from]);\n    }\n    A.length = actualDeleteCount;\n    if (insertCount < actualDeleteCount) {\n      for (k = actualStart; k < len - actualDeleteCount; k++) {\n        from = k + actualDeleteCount;\n        to = k + insertCount;\n        if (from in O) O[to] = O[from];\n        else delete O[to];\n      }\n      for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n    } else if (insertCount > actualDeleteCount) {\n      for (k = len - actualDeleteCount; k > actualStart; k--) {\n        from = k + actualDeleteCount - 1;\n        to = k + insertCount - 1;\n        if (from in O) O[to] = O[from];\n        else delete O[to];\n      }\n    }\n    for (k = 0; k < insertCount; k++) {\n      O[k + actualStart] = arguments[k + 2];\n    }\n    O.length = len - actualDeleteCount + insertCount;\n    return A;\n  }\n});\n\n\n/***/ }),\n\n/***/ 6078:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar hasOwn = __webpack_require__(2597);\nvar redefine = __webpack_require__(1320);\nvar dateToPrimitive = __webpack_require__(8709);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar DatePrototype = Date.prototype;\n\n// `Date.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nif (!hasOwn(DatePrototype, TO_PRIMITIVE)) {\n  redefine(DatePrototype, TO_PRIMITIVE, dateToPrimitive);\n}\n\n\n/***/ }),\n\n/***/ 8309:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar FUNCTION_NAME_EXISTS = (__webpack_require__(6530).EXISTS);\nvar uncurryThis = __webpack_require__(1702);\nvar defineProperty = (__webpack_require__(3070).f);\n\nvar FunctionPrototype = Function.prototype;\nvar functionToString = uncurryThis(FunctionPrototype.toString);\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar regExpExec = uncurryThis(nameRE.exec);\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {\n  defineProperty(FunctionPrototype, NAME, {\n    configurable: true,\n    get: function () {\n      try {\n        return regExpExec(nameRE, functionToString(this))[1];\n      } catch (error) {\n        return '';\n      }\n    }\n  });\n}\n\n\n/***/ }),\n\n/***/ 5837:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\n\n// `globalThis` object\n// https://tc39.es/ecma262/#sec-globalthis\n$({ global: true }, {\n  globalThis: global\n});\n\n\n/***/ }),\n\n/***/ 3706:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar setToStringTag = __webpack_require__(8003);\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n/***/ }),\n\n/***/ 1532:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar collection = __webpack_require__(7710);\nvar collectionStrong = __webpack_require__(5631);\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n  return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n\n\n/***/ }),\n\n/***/ 2703:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar setToStringTag = __webpack_require__(8003);\n\n// Math[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n\n\n/***/ }),\n\n/***/ 9653:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar isForced = __webpack_require__(4705);\nvar redefine = __webpack_require__(1320);\nvar hasOwn = __webpack_require__(2597);\nvar inheritIfRequired = __webpack_require__(9587);\nvar isPrototypeOf = __webpack_require__(7976);\nvar isSymbol = __webpack_require__(2190);\nvar toPrimitive = __webpack_require__(7593);\nvar fails = __webpack_require__(7293);\nvar getOwnPropertyNames = (__webpack_require__(8006).f);\nvar getOwnPropertyDescriptor = (__webpack_require__(1236).f);\nvar defineProperty = (__webpack_require__(3070).f);\nvar thisNumberValue = __webpack_require__(863);\nvar trim = (__webpack_require__(3111).trim);\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\nvar TypeError = global.TypeError;\nvar arraySlice = uncurryThis(''.slice);\nvar charCodeAt = uncurryThis(''.charCodeAt);\n\n// `ToNumeric` abstract operation\n// https://tc39.es/ecma262/#sec-tonumeric\nvar toNumeric = function (value) {\n  var primValue = toPrimitive(value, 'number');\n  return typeof primValue == 'bigint' ? primValue : toNumber(primValue);\n};\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n  var it = toPrimitive(argument, 'number');\n  var first, third, radix, maxCode, digits, length, index, code;\n  if (isSymbol(it)) throw TypeError('Cannot convert a Symbol value to a number');\n  if (typeof it == 'string' && it.length > 2) {\n    it = trim(it);\n    first = charCodeAt(it, 0);\n    if (first === 43 || first === 45) {\n      third = charCodeAt(it, 2);\n      if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n    } else if (first === 48) {\n      switch (charCodeAt(it, 1)) {\n        case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n        case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n        default: return +it;\n      }\n      digits = arraySlice(it, 2);\n      length = digits.length;\n      for (index = 0; index < length; index++) {\n        code = charCodeAt(digits, index);\n        // parseInt parses a string to a first unavailable symbol\n        // but ToNumber should return NaN if a string contains unavailable symbols\n        if (code < 48 || code > maxCode) return NaN;\n      } return parseInt(digits, radix);\n    }\n  } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n  var NumberWrapper = function Number(value) {\n    var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));\n    var dummy = this;\n    // check on 1..constructor(foo) case\n    return isPrototypeOf(NumberPrototype, dummy) && fails(function () { thisNumberValue(dummy); })\n      ? inheritIfRequired(Object(n), dummy, NumberWrapper) : n;\n  };\n  for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n    // ES3:\n    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n    // ES2015 (in case, if modules with ES2015 Number statics required before):\n    'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +\n    // ESNext\n    'fromString,range'\n  ).split(','), j = 0, key; keys.length > j; j++) {\n    if (hasOwn(NativeNumber, key = keys[j]) && !hasOwn(NumberWrapper, key)) {\n      defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n    }\n  }\n  NumberWrapper.prototype = NumberPrototype;\n  NumberPrototype.constructor = NumberWrapper;\n  redefine(global, NUMBER, NumberWrapper);\n}\n\n\n/***/ }),\n\n/***/ 3299:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\n\n// `Number.EPSILON` constant\n// https://tc39.es/ecma262/#sec-number.epsilon\n$({ target: 'Number', stat: true }, {\n  EPSILON: Math.pow(2, -52)\n});\n\n\n/***/ }),\n\n/***/ 5192:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar numberIsFinite = __webpack_require__(7023);\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n$({ target: 'Number', stat: true }, { isFinite: numberIsFinite });\n\n\n/***/ }),\n\n/***/ 3161:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar isIntegralNumber = __webpack_require__(5988);\n\n// `Number.isInteger` method\n// https://tc39.es/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n  isInteger: isIntegralNumber\n});\n\n\n/***/ }),\n\n/***/ 6977:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar thisNumberValue = __webpack_require__(863);\nvar $repeat = __webpack_require__(8415);\nvar fails = __webpack_require__(7293);\n\nvar RangeError = global.RangeError;\nvar String = global.String;\nvar floor = Math.floor;\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar un$ToFixed = uncurryThis(1.0.toFixed);\n\nvar pow = function (x, n, acc) {\n  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n  var n = 0;\n  var x2 = x;\n  while (x2 >= 4096) {\n    n += 12;\n    x2 /= 4096;\n  }\n  while (x2 >= 2) {\n    n += 1;\n    x2 /= 2;\n  } return n;\n};\n\nvar multiply = function (data, n, c) {\n  var index = -1;\n  var c2 = c;\n  while (++index < 6) {\n    c2 += n * data[index];\n    data[index] = c2 % 1e7;\n    c2 = floor(c2 / 1e7);\n  }\n};\n\nvar divide = function (data, n) {\n  var index = 6;\n  var c = 0;\n  while (--index >= 0) {\n    c += data[index];\n    data[index] = floor(c / n);\n    c = (c % n) * 1e7;\n  }\n};\n\nvar dataToString = function (data) {\n  var index = 6;\n  var s = '';\n  while (--index >= 0) {\n    if (s !== '' || index === 0 || data[index] !== 0) {\n      var t = String(data[index]);\n      s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\n    }\n  } return s;\n};\n\nvar FORCED = fails(function () {\n  return un$ToFixed(0.00008, 3) !== '0.000' ||\n    un$ToFixed(0.9, 0) !== '1' ||\n    un$ToFixed(1.255, 2) !== '1.25' ||\n    un$ToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\n}) || !fails(function () {\n  // V8 ~ Android 4.3-\n  un$ToFixed({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n  toFixed: function toFixed(fractionDigits) {\n    var number = thisNumberValue(this);\n    var fractDigits = toIntegerOrInfinity(fractionDigits);\n    var data = [0, 0, 0, 0, 0, 0];\n    var sign = '';\n    var result = '0';\n    var e, z, j, k;\n\n    if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (number != number) return 'NaN';\n    if (number <= -1e21 || number >= 1e21) return String(number);\n    if (number < 0) {\n      sign = '-';\n      number = -number;\n    }\n    if (number > 1e-21) {\n      e = log(number * pow(2, 69, 1)) - 69;\n      z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n      z *= 0x10000000000000;\n      e = 52 - e;\n      if (e > 0) {\n        multiply(data, 0, z);\n        j = fractDigits;\n        while (j >= 7) {\n          multiply(data, 1e7, 0);\n          j -= 7;\n        }\n        multiply(data, pow(10, j, 1), 0);\n        j = e - 1;\n        while (j >= 23) {\n          divide(data, 1 << 23);\n          j -= 23;\n        }\n        divide(data, 1 << j);\n        multiply(data, 1, 1);\n        divide(data, 2);\n        result = dataToString(data);\n      } else {\n        multiply(data, 0, z);\n        multiply(data, 1 << -e, 0);\n        result = dataToString(data) + repeat('0', fractDigits);\n      }\n    }\n    if (fractDigits > 0) {\n      k = result.length;\n      result = sign + (k <= fractDigits\n        ? '0.' + repeat('0', fractDigits - k) + result\n        : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\n    } else {\n      result = sign + result;\n    } return result;\n  }\n});\n\n\n/***/ }),\n\n/***/ 9601:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar assign = __webpack_require__(1574);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n  assign: assign\n});\n\n\n/***/ }),\n\n/***/ 3371:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar FREEZING = __webpack_require__(6677);\nvar fails = __webpack_require__(7293);\nvar isObject = __webpack_require__(111);\nvar onFreeze = (__webpack_require__(2423).onFreeze);\n\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar $freeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); });\n\n// `Object.freeze` method\n// https://tc39.es/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n  freeze: function freeze(it) {\n    return $freeze && isObject(it) ? $freeze(onFreeze(it)) : it;\n  }\n});\n\n\n/***/ }),\n\n/***/ 5003:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar fails = __webpack_require__(7293);\nvar toIndexedObject = __webpack_require__(5656);\nvar nativeGetOwnPropertyDescriptor = (__webpack_require__(1236).f);\nvar DESCRIPTORS = __webpack_require__(9781);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n    return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n  }\n});\n\n\n/***/ }),\n\n/***/ 9337:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar ownKeys = __webpack_require__(3887);\nvar toIndexedObject = __webpack_require__(5656);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar createProperty = __webpack_require__(6135);\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIndexedObject(object);\n    var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var index = 0;\n    var key, descriptor;\n    while (keys.length > index) {\n      descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n      if (descriptor !== undefined) createProperty(result, key, descriptor);\n    }\n    return result;\n  }\n});\n\n\n/***/ }),\n\n/***/ 489:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar fails = __webpack_require__(7293);\nvar toObject = __webpack_require__(7908);\nvar nativeGetPrototypeOf = __webpack_require__(9518);\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(8544);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n  getPrototypeOf: function getPrototypeOf(it) {\n    return nativeGetPrototypeOf(toObject(it));\n  }\n});\n\n\n\n/***/ }),\n\n/***/ 7941:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar toObject = __webpack_require__(7908);\nvar nativeKeys = __webpack_require__(1956);\nvar fails = __webpack_require__(7293);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n  keys: function keys(it) {\n    return nativeKeys(toObject(it));\n  }\n});\n\n\n/***/ }),\n\n/***/ 1539:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar redefine = __webpack_require__(1320);\nvar toString = __webpack_require__(288);\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n  redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ 2479:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar $values = (__webpack_require__(4699).values);\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n  values: function values(O) {\n    return $values(O);\n  }\n});\n\n\n/***/ }),\n\n/***/ 7922:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar call = __webpack_require__(6916);\nvar aCallable = __webpack_require__(9662);\nvar newPromiseCapabilityModule = __webpack_require__(8523);\nvar perform = __webpack_require__(2534);\nvar iterate = __webpack_require__(408);\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true }, {\n  allSettled: function allSettled(iterable) {\n    var C = this;\n    var capability = newPromiseCapabilityModule.f(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var promiseResolve = aCallable(C.resolve);\n      var values = [];\n      var counter = 0;\n      var remaining = 1;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyCalled = false;\n        remaining++;\n        call(promiseResolve, C, promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = { status: 'fulfilled', value: value };\n          --remaining || resolve(values);\n        }, function (error) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = { status: 'rejected', reason: error };\n          --remaining || resolve(values);\n        });\n      });\n      --remaining || resolve(values);\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n\n\n/***/ }),\n\n/***/ 4668:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar aCallable = __webpack_require__(9662);\nvar getBuiltIn = __webpack_require__(5005);\nvar call = __webpack_require__(6916);\nvar newPromiseCapabilityModule = __webpack_require__(8523);\nvar perform = __webpack_require__(2534);\nvar iterate = __webpack_require__(408);\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://tc39.es/ecma262/#sec-promise.any\n$({ target: 'Promise', stat: true }, {\n  any: function any(iterable) {\n    var C = this;\n    var AggregateError = getBuiltIn('AggregateError');\n    var capability = newPromiseCapabilityModule.f(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var promiseResolve = aCallable(C.resolve);\n      var errors = [];\n      var counter = 0;\n      var remaining = 1;\n      var alreadyResolved = false;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyRejected = false;\n        remaining++;\n        call(promiseResolve, C, promise).then(function (value) {\n          if (alreadyRejected || alreadyResolved) return;\n          alreadyResolved = true;\n          resolve(value);\n        }, function (error) {\n          if (alreadyRejected || alreadyResolved) return;\n          alreadyRejected = true;\n          errors[index] = error;\n          --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n        });\n      });\n      --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n\n\n/***/ }),\n\n/***/ 7727:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar IS_PURE = __webpack_require__(1913);\nvar NativePromise = __webpack_require__(3366);\nvar fails = __webpack_require__(7293);\nvar getBuiltIn = __webpack_require__(5005);\nvar isCallable = __webpack_require__(614);\nvar speciesConstructor = __webpack_require__(6707);\nvar promiseResolve = __webpack_require__(9478);\nvar redefine = __webpack_require__(1320);\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n  NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n  'finally': function (onFinally) {\n    var C = speciesConstructor(this, getBuiltIn('Promise'));\n    var isFunction = isCallable(onFinally);\n    return this.then(\n      isFunction ? function (x) {\n        return promiseResolve(C, onFinally()).then(function () { return x; });\n      } : onFinally,\n      isFunction ? function (e) {\n        return promiseResolve(C, onFinally()).then(function () { throw e; });\n      } : onFinally\n    );\n  }\n});\n\n// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromise)) {\n  var method = getBuiltIn('Promise').prototype['finally'];\n  if (NativePromise.prototype['finally'] !== method) {\n    redefine(NativePromise.prototype, 'finally', method, { unsafe: true });\n  }\n}\n\n\n/***/ }),\n\n/***/ 8674:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar IS_PURE = __webpack_require__(1913);\nvar global = __webpack_require__(7854);\nvar getBuiltIn = __webpack_require__(5005);\nvar call = __webpack_require__(6916);\nvar NativePromise = __webpack_require__(3366);\nvar redefine = __webpack_require__(1320);\nvar redefineAll = __webpack_require__(2248);\nvar setPrototypeOf = __webpack_require__(7674);\nvar setToStringTag = __webpack_require__(8003);\nvar setSpecies = __webpack_require__(6340);\nvar aCallable = __webpack_require__(9662);\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\nvar anInstance = __webpack_require__(5787);\nvar inspectSource = __webpack_require__(2788);\nvar iterate = __webpack_require__(408);\nvar checkCorrectnessOfIteration = __webpack_require__(7072);\nvar speciesConstructor = __webpack_require__(6707);\nvar task = (__webpack_require__(261).set);\nvar microtask = __webpack_require__(5948);\nvar promiseResolve = __webpack_require__(9478);\nvar hostReportErrors = __webpack_require__(842);\nvar newPromiseCapabilityModule = __webpack_require__(8523);\nvar perform = __webpack_require__(2534);\nvar InternalStateModule = __webpack_require__(9909);\nvar isForced = __webpack_require__(4705);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar IS_BROWSER = __webpack_require__(7871);\nvar IS_NODE = __webpack_require__(5268);\nvar V8_VERSION = __webpack_require__(7392);\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n  var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n  var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n  // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n  // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n  // We can't detect it synchronously, so just check versions\n  if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n  // We need Promise#finally in the pure version for preventing prototype pollution\n  if (IS_PURE && !PromisePrototype['finally']) return true;\n  // We can't use @@species feature detection in V8 since it causes\n  // deoptimization and performance degradation\n  // https://github.com/zloirock/core-js/issues/679\n  if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n  // Detect correctness of subclassing with @@species support\n  var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n  var FakePromise = function (exec) {\n    exec(function () { /* empty */ }, function () { /* empty */ });\n  };\n  var constructor = promise.constructor = {};\n  constructor[SPECIES] = FakePromise;\n  SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n  if (!SUBCLASSING) return true;\n  // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n  return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n  PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar notify = function (state, isReject) {\n  if (state.notified) return;\n  state.notified = true;\n  var chain = state.reactions;\n  microtask(function () {\n    var value = state.value;\n    var ok = state.state == FULFILLED;\n    var index = 0;\n    // variable length - can't use forEach\n    while (chain.length > index) {\n      var reaction = chain[index++];\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n            state.rejection = HANDLED;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // can throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            call(then, result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (error) {\n        if (domain && !exited) domain.exit();\n        reject(error);\n      }\n    }\n    state.reactions = [];\n    state.notified = false;\n    if (isReject && !state.rejection) onUnhandled(state);\n  });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n  var event, handler;\n  if (DISPATCH_EVENT) {\n    event = document.createEvent('Event');\n    event.promise = promise;\n    event.reason = reason;\n    event.initEvent(name, false, true);\n    global.dispatchEvent(event);\n  } else event = { promise: promise, reason: reason };\n  if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n  else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n  call(task, global, function () {\n    var promise = state.facade;\n    var value = state.value;\n    var IS_UNHANDLED = isUnhandled(state);\n    var result;\n    if (IS_UNHANDLED) {\n      result = perform(function () {\n        if (IS_NODE) {\n          process.emit('unhandledRejection', value, promise);\n        } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n      if (result.error) throw result.value;\n    }\n  });\n};\n\nvar isUnhandled = function (state) {\n  return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n  call(task, global, function () {\n    var promise = state.facade;\n    if (IS_NODE) {\n      process.emit('rejectionHandled', promise);\n    } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n  });\n};\n\nvar bind = function (fn, state, unwrap) {\n  return function (value) {\n    fn(state, value, unwrap);\n  };\n};\n\nvar internalReject = function (state, value, unwrap) {\n  if (state.done) return;\n  state.done = true;\n  if (unwrap) state = unwrap;\n  state.value = value;\n  state.state = REJECTED;\n  notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n  if (state.done) return;\n  state.done = true;\n  if (unwrap) state = unwrap;\n  try {\n    if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n    var then = isThenable(value);\n    if (then) {\n      microtask(function () {\n        var wrapper = { done: false };\n        try {\n          call(then, value,\n            bind(internalResolve, wrapper, state),\n            bind(internalReject, wrapper, state)\n          );\n        } catch (error) {\n          internalReject(wrapper, error, state);\n        }\n      });\n    } else {\n      state.value = value;\n      state.state = FULFILLED;\n      notify(state, false);\n    }\n  } catch (error) {\n    internalReject({ done: false }, error, state);\n  }\n};\n\n// constructor polyfill\nif (FORCED) {\n  // 25.4.3.1 Promise(executor)\n  PromiseConstructor = function Promise(executor) {\n    anInstance(this, PromisePrototype);\n    aCallable(executor);\n    call(Internal, this);\n    var state = getInternalState(this);\n    try {\n      executor(bind(internalResolve, state), bind(internalReject, state));\n    } catch (error) {\n      internalReject(state, error);\n    }\n  };\n  PromisePrototype = PromiseConstructor.prototype;\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  Internal = function Promise(executor) {\n    setInternalState(this, {\n      type: PROMISE,\n      done: false,\n      notified: false,\n      parent: false,\n      reactions: [],\n      rejection: false,\n      state: PENDING,\n      value: undefined\n    });\n  };\n  Internal.prototype = redefineAll(PromisePrototype, {\n    // `Promise.prototype.then` method\n    // https://tc39.es/ecma262/#sec-promise.prototype.then\n    then: function then(onFulfilled, onRejected) {\n      var state = getInternalPromiseState(this);\n      var reactions = state.reactions;\n      var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n      reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n      reaction.fail = isCallable(onRejected) && onRejected;\n      reaction.domain = IS_NODE ? process.domain : undefined;\n      state.parent = true;\n      reactions[reactions.length] = reaction;\n      if (state.state != PENDING) notify(state, false);\n      return reaction.promise;\n    },\n    // `Promise.prototype.catch` method\n    // https://tc39.es/ecma262/#sec-promise.prototype.catch\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    var state = getInternalState(promise);\n    this.promise = promise;\n    this.resolve = bind(internalResolve, state);\n    this.reject = bind(internalReject, state);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === PromiseConstructor || C === PromiseWrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n\n  if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) {\n    nativeThen = NativePromisePrototype.then;\n\n    if (!SUBCLASSING) {\n      // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n      redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n        var that = this;\n        return new PromiseConstructor(function (resolve, reject) {\n          call(nativeThen, that, resolve, reject);\n        }).then(onFulfilled, onRejected);\n      // https://github.com/zloirock/core-js/issues/640\n      }, { unsafe: true });\n\n      // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n      redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true });\n    }\n\n    // make `.constructor === Promise` work for native promise-based APIs\n    try {\n      delete NativePromisePrototype.constructor;\n    } catch (error) { /* empty */ }\n\n    // make `instanceof Promise` work for native promise-based APIs\n    if (setPrototypeOf) {\n      setPrototypeOf(NativePromisePrototype, PromisePrototype);\n    }\n  }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n  Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n  // `Promise.reject` method\n  // https://tc39.es/ecma262/#sec-promise.reject\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    call(capability.reject, undefined, r);\n    return capability.promise;\n  }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n  // `Promise.resolve` method\n  // https://tc39.es/ecma262/#sec-promise.resolve\n  resolve: function resolve(x) {\n    return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n  }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n  // `Promise.all` method\n  // https://tc39.es/ecma262/#sec-promise.all\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var $promiseResolve = aCallable(C.resolve);\n      var values = [];\n      var counter = 0;\n      var remaining = 1;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyCalled = false;\n        remaining++;\n        call($promiseResolve, C, promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  },\n  // `Promise.race` method\n  // https://tc39.es/ecma262/#sec-promise.race\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      var $promiseResolve = aCallable(C.resolve);\n      iterate(iterable, function (promise) {\n        call($promiseResolve, C, promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n\n\n/***/ }),\n\n/***/ 2419:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar getBuiltIn = __webpack_require__(5005);\nvar apply = __webpack_require__(2104);\nvar bind = __webpack_require__(7065);\nvar aConstructor = __webpack_require__(9483);\nvar anObject = __webpack_require__(9670);\nvar isObject = __webpack_require__(111);\nvar create = __webpack_require__(30);\nvar fails = __webpack_require__(7293);\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\nvar ObjectPrototype = Object.prototype;\nvar push = [].push;\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n  function F() { /* empty */ }\n  return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\n\nvar ARGS_BUG = !fails(function () {\n  nativeConstruct(function () { /* empty */ });\n});\n\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n  construct: function construct(Target, args /* , newTarget */) {\n    aConstructor(Target);\n    anObject(args);\n    var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);\n    if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n    if (Target == newTarget) {\n      // w/o altered newTarget, optimization for 0-4 arguments\n      switch (args.length) {\n        case 0: return new Target();\n        case 1: return new Target(args[0]);\n        case 2: return new Target(args[0], args[1]);\n        case 3: return new Target(args[0], args[1], args[2]);\n        case 4: return new Target(args[0], args[1], args[2], args[3]);\n      }\n      // w/o altered newTarget, lot of arguments case\n      var $args = [null];\n      apply(push, $args, args);\n      return new (apply(bind, Target, $args))();\n    }\n    // with altered newTarget, not support built-in constructors\n    var proto = newTarget.prototype;\n    var instance = create(isObject(proto) ? proto : ObjectPrototype);\n    var result = apply(Target, instance, args);\n    return isObject(result) ? result : instance;\n  }\n});\n\n\n/***/ }),\n\n/***/ 4916:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar exec = __webpack_require__(2261);\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n  exec: exec\n});\n\n\n/***/ }),\n\n/***/ 2087:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar objectDefinePropertyModule = __webpack_require__(3070);\nvar regExpFlags = __webpack_require__(7066);\nvar fails = __webpack_require__(7293);\n\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n  // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n  return Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call({ dotAll: true, sticky: true }) !== 'sy';\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) objectDefinePropertyModule.f(RegExpPrototype, 'flags', {\n  configurable: true,\n  get: regExpFlags\n});\n\n\n/***/ }),\n\n/***/ 9714:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar uncurryThis = __webpack_require__(1702);\nvar PROPER_FUNCTION_NAME = (__webpack_require__(6530).PROPER);\nvar redefine = __webpack_require__(1320);\nvar anObject = __webpack_require__(9670);\nvar isPrototypeOf = __webpack_require__(7976);\nvar $toString = __webpack_require__(1340);\nvar fails = __webpack_require__(7293);\nvar regExpFlags = __webpack_require__(7066);\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar n$ToString = RegExpPrototype[TO_STRING];\nvar getFlags = uncurryThis(regExpFlags);\n\nvar NOT_GENERIC = fails(function () { return n$ToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = PROPER_FUNCTION_NAME && n$ToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n  redefine(RegExp.prototype, TO_STRING, function toString() {\n    var R = anObject(this);\n    var p = $toString(R.source);\n    var rf = R.flags;\n    var f = $toString(rf === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype) ? getFlags(R) : rf);\n    return '/' + p + '/' + f;\n  }, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ 189:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar collection = __webpack_require__(7710);\nvar collectionStrong = __webpack_require__(5631);\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n  return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n\n\n/***/ }),\n\n/***/ 9841:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar codeAt = (__webpack_require__(8710).codeAt);\n\n// `String.prototype.codePointAt` method\n// https://tc39.es/ecma262/#sec-string.prototype.codepointat\n$({ target: 'String', proto: true }, {\n  codePointAt: function codePointAt(pos) {\n    return codeAt(this, pos);\n  }\n});\n\n\n/***/ }),\n\n/***/ 4953:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar toAbsoluteIndex = __webpack_require__(1400);\n\nvar RangeError = global.RangeError;\nvar fromCharCode = String.fromCharCode;\n// eslint-disable-next-line es/no-string-fromcodepoint -- required for testing\nvar $fromCodePoint = String.fromCodePoint;\nvar join = uncurryThis([].join);\n\n// length should be 1, old FF problem\nvar INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length != 1;\n\n// `String.fromCodePoint` method\n// https://tc39.es/ecma262/#sec-string.fromcodepoint\n$({ target: 'String', stat: true, forced: INCORRECT_LENGTH }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  fromCodePoint: function fromCodePoint(x) {\n    var elements = [];\n    var length = arguments.length;\n    var i = 0;\n    var code;\n    while (length > i) {\n      code = +arguments[i++];\n      if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw RangeError(code + ' is not a valid code point');\n      elements[i] = code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00);\n    } return join(elements, '');\n  }\n});\n\n\n/***/ }),\n\n/***/ 2023:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar uncurryThis = __webpack_require__(1702);\nvar notARegExp = __webpack_require__(3929);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar toString = __webpack_require__(1340);\nvar correctIsRegExpLogic = __webpack_require__(4964);\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~stringIndexOf(\n      toString(requireObjectCoercible(this)),\n      toString(notARegExp(searchString)),\n      arguments.length > 1 ? arguments[1] : undefined\n    );\n  }\n});\n\n\n/***/ }),\n\n/***/ 8734:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar createHTML = __webpack_require__(4230);\nvar forcedStringHTMLMethod = __webpack_require__(3429);\n\n// `String.prototype.italics` method\n// https://tc39.es/ecma262/#sec-string.prototype.italics\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('italics') }, {\n  italics: function italics() {\n    return createHTML(this, 'i', '', '');\n  }\n});\n\n\n/***/ }),\n\n/***/ 8783:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar charAt = (__webpack_require__(8710).charAt);\nvar toString = __webpack_require__(1340);\nvar InternalStateModule = __webpack_require__(9909);\nvar defineIterator = __webpack_require__(654);\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n  setInternalState(this, {\n    type: STRING_ITERATOR,\n    string: toString(iterated),\n    index: 0\n  });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n  var state = getInternalState(this);\n  var string = state.string;\n  var index = state.index;\n  var point;\n  if (index >= string.length) return { value: undefined, done: true };\n  point = charAt(string, index);\n  state.index += point.length;\n  return { value: point, done: false };\n});\n\n\n/***/ }),\n\n/***/ 9254:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar createHTML = __webpack_require__(4230);\nvar forcedStringHTMLMethod = __webpack_require__(3429);\n\n// `String.prototype.link` method\n// https://tc39.es/ecma262/#sec-string.prototype.link\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {\n  link: function link(url) {\n    return createHTML(this, 'a', 'href', url);\n  }\n});\n\n\n/***/ }),\n\n/***/ 6373:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n/* eslint-disable es/no-string-prototype-matchall -- safe */\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar call = __webpack_require__(6916);\nvar uncurryThis = __webpack_require__(1702);\nvar createIteratorConstructor = __webpack_require__(4994);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar toLength = __webpack_require__(7466);\nvar toString = __webpack_require__(1340);\nvar anObject = __webpack_require__(9670);\nvar classof = __webpack_require__(4326);\nvar isPrototypeOf = __webpack_require__(7976);\nvar isRegExp = __webpack_require__(7850);\nvar regExpFlags = __webpack_require__(7066);\nvar getMethod = __webpack_require__(8173);\nvar redefine = __webpack_require__(1320);\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar speciesConstructor = __webpack_require__(6707);\nvar advanceStringIndex = __webpack_require__(1530);\nvar regExpExec = __webpack_require__(7651);\nvar InternalStateModule = __webpack_require__(9909);\nvar IS_PURE = __webpack_require__(1913);\n\nvar MATCH_ALL = wellKnownSymbol('matchAll');\nvar REGEXP_STRING = 'RegExp String';\nvar REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(REGEXP_STRING_ITERATOR);\nvar RegExpPrototype = RegExp.prototype;\nvar TypeError = global.TypeError;\nvar getFlags = uncurryThis(regExpFlags);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar un$MatchAll = uncurryThis(''.matchAll);\n\nvar WORKS_WITH_NON_GLOBAL_REGEX = !!un$MatchAll && !fails(function () {\n  un$MatchAll('a', /./);\n});\n\nvar $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) {\n  setInternalState(this, {\n    type: REGEXP_STRING_ITERATOR,\n    regexp: regexp,\n    string: string,\n    global: $global,\n    unicode: fullUnicode,\n    done: false\n  });\n}, REGEXP_STRING, function next() {\n  var state = getInternalState(this);\n  if (state.done) return { value: undefined, done: true };\n  var R = state.regexp;\n  var S = state.string;\n  var match = regExpExec(R, S);\n  if (match === null) return { value: undefined, done: state.done = true };\n  if (state.global) {\n    if (toString(match[0]) === '') R.lastIndex = advanceStringIndex(S, toLength(R.lastIndex), state.unicode);\n    return { value: match, done: false };\n  }\n  state.done = true;\n  return { value: match, done: false };\n});\n\nvar $matchAll = function (string) {\n  var R = anObject(this);\n  var S = toString(string);\n  var C, flagsValue, flags, matcher, $global, fullUnicode;\n  C = speciesConstructor(R, RegExp);\n  flagsValue = R.flags;\n  if (flagsValue === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype)) {\n    flagsValue = getFlags(R);\n  }\n  flags = flagsValue === undefined ? '' : toString(flagsValue);\n  matcher = new C(C === RegExp ? R.source : R, flags);\n  $global = !!~stringIndexOf(flags, 'g');\n  fullUnicode = !!~stringIndexOf(flags, 'u');\n  matcher.lastIndex = toLength(R.lastIndex);\n  return new $RegExpStringIterator(matcher, S, $global, fullUnicode);\n};\n\n// `String.prototype.matchAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.matchall\n$({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, {\n  matchAll: function matchAll(regexp) {\n    var O = requireObjectCoercible(this);\n    var flags, S, matcher, rx;\n    if (regexp != null) {\n      if (isRegExp(regexp)) {\n        flags = toString(requireObjectCoercible('flags' in RegExpPrototype\n          ? regexp.flags\n          : getFlags(regexp)\n        ));\n        if (!~stringIndexOf(flags, 'g')) throw TypeError('`.matchAll` does not allow non-global regexes');\n      }\n      if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);\n      matcher = getMethod(regexp, MATCH_ALL);\n      if (matcher === undefined && IS_PURE && classof(regexp) == 'RegExp') matcher = $matchAll;\n      if (matcher) return call(matcher, regexp, O);\n    } else if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);\n    S = toString(O);\n    rx = new RegExp(regexp, 'g');\n    return IS_PURE ? call($matchAll, rx, S) : rx[MATCH_ALL](S);\n  }\n});\n\nIS_PURE || MATCH_ALL in RegExpPrototype || redefine(RegExpPrototype, MATCH_ALL, $matchAll);\n\n\n/***/ }),\n\n/***/ 4723:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar call = __webpack_require__(6916);\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar anObject = __webpack_require__(9670);\nvar toLength = __webpack_require__(7466);\nvar toString = __webpack_require__(1340);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar getMethod = __webpack_require__(8173);\nvar advanceStringIndex = __webpack_require__(1530);\nvar regExpExec = __webpack_require__(7651);\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n  return [\n    // `String.prototype.match` method\n    // https://tc39.es/ecma262/#sec-string.prototype.match\n    function match(regexp) {\n      var O = requireObjectCoercible(this);\n      var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);\n      return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n    },\n    // `RegExp.prototype[@@match]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n    function (string) {\n      var rx = anObject(this);\n      var S = toString(string);\n      var res = maybeCallNative(nativeMatch, rx, S);\n\n      if (res.done) return res.value;\n\n      if (!rx.global) return regExpExec(rx, S);\n\n      var fullUnicode = rx.unicode;\n      rx.lastIndex = 0;\n      var A = [];\n      var n = 0;\n      var result;\n      while ((result = regExpExec(rx, S)) !== null) {\n        var matchStr = toString(result[0]);\n        A[n] = matchStr;\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n        n++;\n      }\n      return n === 0 ? null : A;\n    }\n  ];\n});\n\n\n/***/ }),\n\n/***/ 2481:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar repeat = __webpack_require__(8415);\n\n// `String.prototype.repeat` method\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\n$({ target: 'String', proto: true }, {\n  repeat: repeat\n});\n\n\n/***/ }),\n\n/***/ 5306:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar apply = __webpack_require__(2104);\nvar call = __webpack_require__(6916);\nvar uncurryThis = __webpack_require__(1702);\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar fails = __webpack_require__(7293);\nvar anObject = __webpack_require__(9670);\nvar isCallable = __webpack_require__(614);\nvar toIntegerOrInfinity = __webpack_require__(9303);\nvar toLength = __webpack_require__(7466);\nvar toString = __webpack_require__(1340);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar advanceStringIndex = __webpack_require__(1530);\nvar getMethod = __webpack_require__(8173);\nvar getSubstitution = __webpack_require__(647);\nvar regExpExec = __webpack_require__(7651);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n  // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n  return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n  if (/./[REPLACE]) {\n    return /./[REPLACE]('a', '$0') === '';\n  }\n  return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n  return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n  var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.es/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = requireObjectCoercible(this);\n      var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);\n      return replacer\n        ? call(replacer, searchValue, O, replaceValue)\n        : call(nativeReplace, toString(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n    function (string, replaceValue) {\n      var rx = anObject(this);\n      var S = toString(string);\n\n      if (\n        typeof replaceValue == 'string' &&\n        stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n        stringIndexOf(replaceValue, '$<') === -1\n      ) {\n        var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n        if (res.done) return res.value;\n      }\n\n      var functionalReplace = isCallable(replaceValue);\n      if (!functionalReplace) replaceValue = toString(replaceValue);\n\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n\n        push(results, result);\n        if (!global) break;\n\n        var matchStr = toString(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n\n        var matched = toString(result[0]);\n        var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = concat([matched], captures, position, S);\n          if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n          var replacement = toString(apply(replaceValue, undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + stringSlice(S, nextSourcePosition);\n    }\n  ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n\n\n/***/ }),\n\n/***/ 3123:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar apply = __webpack_require__(2104);\nvar call = __webpack_require__(6916);\nvar uncurryThis = __webpack_require__(1702);\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar isRegExp = __webpack_require__(7850);\nvar anObject = __webpack_require__(9670);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar speciesConstructor = __webpack_require__(6707);\nvar advanceStringIndex = __webpack_require__(1530);\nvar toLength = __webpack_require__(7466);\nvar toString = __webpack_require__(1340);\nvar getMethod = __webpack_require__(8173);\nvar arraySlice = __webpack_require__(206);\nvar callRegExpExec = __webpack_require__(7651);\nvar regexpExec = __webpack_require__(2261);\nvar stickyHelpers = __webpack_require__(2999);\nvar fails = __webpack_require__(7293);\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n  // eslint-disable-next-line regexp/no-empty-group -- required for testing\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n  var internalSplit;\n  if (\n    'abbc'.split(/(b)*/)[1] == 'c' ||\n    // eslint-disable-next-line regexp/no-empty-group -- required for testing\n    'test'.split(/(?:)/, -1).length != 4 ||\n    'ab'.split(/(?:ab)*/).length != 2 ||\n    '.'.split(/(.?)(.?)/).length != 4 ||\n    // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n    '.'.split(/()()/).length > 1 ||\n    ''.split(/.?/).length\n  ) {\n    // based on es5-shim implementation, need to rework it\n    internalSplit = function (separator, limit) {\n      var string = toString(requireObjectCoercible(this));\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (separator === undefined) return [string];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) {\n        return call(nativeSplit, string, separator, lim);\n      }\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var match, lastIndex, lastLength;\n      while (match = call(regexpExec, separatorCopy, string)) {\n        lastIndex = separatorCopy.lastIndex;\n        if (lastIndex > lastLastIndex) {\n          push(output, stringSlice(string, lastLastIndex, match.index));\n          if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\n          lastLength = match[0].length;\n          lastLastIndex = lastIndex;\n          if (output.length >= lim) break;\n        }\n        if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string.length) {\n        if (lastLength || !exec(separatorCopy, '')) push(output, '');\n      } else push(output, stringSlice(string, lastLastIndex));\n      return output.length > lim ? arraySlice(output, 0, lim) : output;\n    };\n  // Chakra, V8\n  } else if ('0'.split(undefined, 0).length) {\n    internalSplit = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n    };\n  } else internalSplit = nativeSplit;\n\n  return [\n    // `String.prototype.split` method\n    // https://tc39.es/ecma262/#sec-string.prototype.split\n    function split(separator, limit) {\n      var O = requireObjectCoercible(this);\n      var splitter = separator == undefined ? undefined : getMethod(separator, SPLIT);\n      return splitter\n        ? call(splitter, separator, O, limit)\n        : call(internalSplit, toString(O), separator, limit);\n    },\n    // `RegExp.prototype[@@split]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n    //\n    // NOTE: This cannot be properly polyfilled in engines that don't support\n    // the 'y' flag.\n    function (string, limit) {\n      var rx = anObject(this);\n      var S = toString(string);\n      var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n      if (res.done) return res.value;\n\n      var C = speciesConstructor(rx, RegExp);\n\n      var unicodeMatching = rx.unicode;\n      var flags = (rx.ignoreCase ? 'i' : '') +\n                  (rx.multiline ? 'm' : '') +\n                  (rx.unicode ? 'u' : '') +\n                  (UNSUPPORTED_Y ? 'g' : 'y');\n\n      // ^(? + rx + ) is needed, in combination with some S slicing, to\n      // simulate the 'y' flag.\n      var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n      var p = 0;\n      var q = 0;\n      var A = [];\n      while (q < S.length) {\n        splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n        var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n        var e;\n        if (\n          z === null ||\n          (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n        ) {\n          q = advanceStringIndex(S, q, unicodeMatching);\n        } else {\n          push(A, stringSlice(S, p, q));\n          if (A.length === lim) return A;\n          for (var i = 1; i <= z.length - 1; i++) {\n            push(A, z[i]);\n            if (A.length === lim) return A;\n          }\n          q = p = e;\n        }\n      }\n      push(A, stringSlice(S, p));\n      return A;\n    }\n  ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n\n\n/***/ }),\n\n/***/ 7397:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar createHTML = __webpack_require__(4230);\nvar forcedStringHTMLMethod = __webpack_require__(3429);\n\n// `String.prototype.strike` method\n// https://tc39.es/ecma262/#sec-string.prototype.strike\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('strike') }, {\n  strike: function strike() {\n    return createHTML(this, 'strike', '', '');\n  }\n});\n\n\n/***/ }),\n\n/***/ 3210:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $trim = (__webpack_require__(3111).trim);\nvar forcedStringTrimMethod = __webpack_require__(6091);\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n  trim: function trim() {\n    return $trim(this);\n  }\n});\n\n\n/***/ }),\n\n/***/ 2443:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar defineWellKnownSymbol = __webpack_require__(7235);\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n\n\n/***/ }),\n\n/***/ 1817:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n\nvar $ = __webpack_require__(2109);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar hasOwn = __webpack_require__(2597);\nvar isCallable = __webpack_require__(614);\nvar isPrototypeOf = __webpack_require__(7976);\nvar toString = __webpack_require__(1340);\nvar defineProperty = (__webpack_require__(3070).f);\nvar copyConstructorProperties = __webpack_require__(9920);\n\nvar NativeSymbol = global.Symbol;\nvar SymbolPrototype = NativeSymbol && NativeSymbol.prototype;\n\nif (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||\n  // Safari 12 bug\n  NativeSymbol().description !== undefined\n)) {\n  var EmptyStringDescriptionStore = {};\n  // wrap Symbol constructor for correct work with undefined description\n  var SymbolWrapper = function Symbol() {\n    var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);\n    var result = isPrototypeOf(SymbolPrototype, this)\n      ? new NativeSymbol(description)\n      // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n      : description === undefined ? NativeSymbol() : NativeSymbol(description);\n    if (description === '') EmptyStringDescriptionStore[result] = true;\n    return result;\n  };\n\n  copyConstructorProperties(SymbolWrapper, NativeSymbol);\n  SymbolWrapper.prototype = SymbolPrototype;\n  SymbolPrototype.constructor = SymbolWrapper;\n\n  var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';\n  var symbolToString = uncurryThis(SymbolPrototype.toString);\n  var symbolValueOf = uncurryThis(SymbolPrototype.valueOf);\n  var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n  var replace = uncurryThis(''.replace);\n  var stringSlice = uncurryThis(''.slice);\n\n  defineProperty(SymbolPrototype, 'description', {\n    configurable: true,\n    get: function description() {\n      var symbol = symbolValueOf(this);\n      var string = symbolToString(symbol);\n      if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';\n      var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');\n      return desc === '' ? undefined : desc;\n    }\n  });\n\n  $({ global: true, forced: true }, {\n    Symbol: SymbolWrapper\n  });\n}\n\n\n/***/ }),\n\n/***/ 2165:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar defineWellKnownSymbol = __webpack_require__(7235);\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n\n\n/***/ }),\n\n/***/ 2526:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar getBuiltIn = __webpack_require__(5005);\nvar apply = __webpack_require__(2104);\nvar call = __webpack_require__(6916);\nvar uncurryThis = __webpack_require__(1702);\nvar IS_PURE = __webpack_require__(1913);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar NATIVE_SYMBOL = __webpack_require__(133);\nvar fails = __webpack_require__(7293);\nvar hasOwn = __webpack_require__(2597);\nvar isArray = __webpack_require__(3157);\nvar isCallable = __webpack_require__(614);\nvar isObject = __webpack_require__(111);\nvar isPrototypeOf = __webpack_require__(7976);\nvar isSymbol = __webpack_require__(2190);\nvar anObject = __webpack_require__(9670);\nvar toObject = __webpack_require__(7908);\nvar toIndexedObject = __webpack_require__(5656);\nvar toPropertyKey = __webpack_require__(4948);\nvar $toString = __webpack_require__(1340);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar nativeObjectCreate = __webpack_require__(30);\nvar objectKeys = __webpack_require__(1956);\nvar getOwnPropertyNamesModule = __webpack_require__(8006);\nvar getOwnPropertyNamesExternal = __webpack_require__(1156);\nvar getOwnPropertySymbolsModule = __webpack_require__(5181);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar definePropertyModule = __webpack_require__(3070);\nvar propertyIsEnumerableModule = __webpack_require__(5296);\nvar arraySlice = __webpack_require__(206);\nvar redefine = __webpack_require__(1320);\nvar shared = __webpack_require__(2309);\nvar sharedKey = __webpack_require__(6200);\nvar hiddenKeys = __webpack_require__(3501);\nvar uid = __webpack_require__(9711);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar wrappedWellKnownSymbolModule = __webpack_require__(6061);\nvar defineWellKnownSymbol = __webpack_require__(7235);\nvar setToStringTag = __webpack_require__(8003);\nvar InternalStateModule = __webpack_require__(9909);\nvar $forEach = (__webpack_require__(2092).forEach);\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n  return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n    get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (O, P, Attributes) {\n  var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n  if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n  nativeDefineProperty(O, P, Attributes);\n  if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n    nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n  }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n  var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n  setInternalState(symbol, {\n    type: SYMBOL,\n    tag: tag,\n    description: description\n  });\n  if (!DESCRIPTORS) symbol.description = description;\n  return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n  if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n  anObject(O);\n  var key = toPropertyKey(P);\n  anObject(Attributes);\n  if (hasOwn(AllSymbols, key)) {\n    if (!Attributes.enumerable) {\n      if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n      O[HIDDEN][key] = true;\n    } else {\n      if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n      Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n    } return setSymbolDescriptor(O, key, Attributes);\n  } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n  anObject(O);\n  var properties = toIndexedObject(Properties);\n  var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n  $forEach(keys, function (key) {\n    if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n  });\n  return O;\n};\n\nvar $create = function create(O, Properties) {\n  return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n  var P = toPropertyKey(V);\n  var enumerable = call(nativePropertyIsEnumerable, this, P);\n  if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n  return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n    ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n  var it = toIndexedObject(O);\n  var key = toPropertyKey(P);\n  if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n  var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n  if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n    descriptor.enumerable = true;\n  }\n  return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n  var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n  });\n  return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n  var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n  var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n      push(result, AllSymbols[key]);\n    }\n  });\n  return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n  $Symbol = function Symbol() {\n    if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');\n    var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n    var tag = uid(description);\n    var setter = function (value) {\n      if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n      if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n    };\n    if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n    return wrap(tag, description);\n  };\n\n  SymbolPrototype = $Symbol[PROTOTYPE];\n\n  redefine(SymbolPrototype, 'toString', function toString() {\n    return getInternalState(this).tag;\n  });\n\n  redefine($Symbol, 'withoutSetter', function (description) {\n    return wrap(uid(description), description);\n  });\n\n  propertyIsEnumerableModule.f = $propertyIsEnumerable;\n  definePropertyModule.f = $defineProperty;\n  getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n  getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n  getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n  wrappedWellKnownSymbolModule.f = function (name) {\n    return wrap(wellKnownSymbol(name), name);\n  };\n\n  if (DESCRIPTORS) {\n    // https://github.com/tc39/proposal-Symbol-description\n    nativeDefineProperty(SymbolPrototype, 'description', {\n      configurable: true,\n      get: function description() {\n        return getInternalState(this).description;\n      }\n    });\n    if (!IS_PURE) {\n      redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n    }\n  }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n  Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n  defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Symbol.for` method\n  // https://tc39.es/ecma262/#sec-symbol.for\n  'for': function (key) {\n    var string = $toString(key);\n    if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n    var symbol = $Symbol(string);\n    StringToSymbolRegistry[string] = symbol;\n    SymbolToStringRegistry[symbol] = string;\n    return symbol;\n  },\n  // `Symbol.keyFor` method\n  // https://tc39.es/ecma262/#sec-symbol.keyfor\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n    if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n  },\n  useSetter: function () { USE_SETTER = true; },\n  useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n  // `Object.create` method\n  // https://tc39.es/ecma262/#sec-object.create\n  create: $create,\n  // `Object.defineProperty` method\n  // https://tc39.es/ecma262/#sec-object.defineproperty\n  defineProperty: $defineProperty,\n  // `Object.defineProperties` method\n  // https://tc39.es/ecma262/#sec-object.defineproperties\n  defineProperties: $defineProperties,\n  // `Object.getOwnPropertyDescriptor` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Object.getOwnPropertyNames` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertynames\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // `Object.getOwnPropertySymbols` method\n  // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return getOwnPropertySymbolsModule.f(toObject(it));\n  }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n  var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n    var symbol = $Symbol();\n    // MS Edge converts symbol values to JSON as {}\n    return $stringify([symbol]) != '[null]'\n      // WebKit converts symbol values to JSON as null\n      || $stringify({ a: symbol }) != '{}'\n      // V8 throws on boxed symbols\n      || $stringify(Object(symbol)) != '{}';\n  });\n\n  $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n    // eslint-disable-next-line no-unused-vars -- required for `.length`\n    stringify: function stringify(it, replacer, space) {\n      var args = arraySlice(arguments);\n      var $replacer = replacer;\n      if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n      if (!isArray(replacer)) replacer = function (key, value) {\n        if (isCallable($replacer)) value = call($replacer, this, key, value);\n        if (!isSymbol(value)) return value;\n      };\n      args[1] = replacer;\n      return apply($stringify, null, args);\n    }\n  });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!SymbolPrototype[TO_PRIMITIVE]) {\n  var valueOf = SymbolPrototype.valueOf;\n  // eslint-disable-next-line no-unused-vars -- required for .length\n  redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n    // TODO: improve hint logic\n    return call(valueOf, this);\n  });\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n\n\n/***/ }),\n\n/***/ 6649:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar defineWellKnownSymbol = __webpack_require__(7235);\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n\n\n/***/ }),\n\n/***/ 3680:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar defineWellKnownSymbol = __webpack_require__(7235);\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n\n\n/***/ }),\n\n/***/ 2990:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar uncurryThis = __webpack_require__(1702);\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $ArrayCopyWithin = __webpack_require__(1048);\n\nvar u$ArrayCopyWithin = uncurryThis($ArrayCopyWithin);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin\nexportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {\n  return u$ArrayCopyWithin(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 8927:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $every = (__webpack_require__(2092).every);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.every` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every\nexportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {\n  return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 3105:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar call = __webpack_require__(6916);\nvar $fill = __webpack_require__(1285);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n  var length = arguments.length;\n  return call(\n    $fill,\n    aTypedArray(this),\n    value,\n    length > 1 ? arguments[1] : undefined,\n    length > 2 ? arguments[2] : undefined\n  );\n});\n\n\n/***/ }),\n\n/***/ 5035:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $filter = (__webpack_require__(2092).filter);\nvar fromSpeciesAndList = __webpack_require__(3074);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.filter` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter\nexportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {\n  var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  return fromSpeciesAndList(this, list);\n});\n\n\n/***/ }),\n\n/***/ 7174:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $findIndex = (__webpack_require__(2092).findIndex);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex\nexportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {\n  return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 4345:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $find = (__webpack_require__(2092).find);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.find` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find\nexportTypedArrayMethod('find', function find(predicate /* , thisArg */) {\n  return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 4197:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Float32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float32', function (init) {\n  return function Float32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 6495:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Float64Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float64', function (init) {\n  return function Float64Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 2846:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $forEach = (__webpack_require__(2092).forEach);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach\nexportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {\n  $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 8145:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = __webpack_require__(3832);\nvar exportTypedArrayStaticMethod = (__webpack_require__(2094).exportTypedArrayStaticMethod);\nvar typedArrayFrom = __webpack_require__(7321);\n\n// `%TypedArray%.from` method\n// https://tc39.es/ecma262/#sec-%typedarray%.from\nexportTypedArrayStaticMethod('from', typedArrayFrom, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS);\n\n\n/***/ }),\n\n/***/ 4731:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $includes = (__webpack_require__(1318).includes);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.includes` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes\nexportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {\n  return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 7209:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $indexOf = (__webpack_require__(1318).indexOf);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof\nexportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {\n  return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 5109:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Int16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int16', function (init) {\n  return function Int16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 5125:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Int32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int32', function (init) {\n  return function Int32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 7145:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Int8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int8', function (init) {\n  return function Int8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 6319:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar PROPER_FUNCTION_NAME = (__webpack_require__(6530).PROPER);\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar ArrayIterators = __webpack_require__(6992);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar Uint8Array = global.Uint8Array;\nvar arrayValues = uncurryThis(ArrayIterators.values);\nvar arrayKeys = uncurryThis(ArrayIterators.keys);\nvar arrayEntries = uncurryThis(ArrayIterators.entries);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar nativeTypedArrayIterator = Uint8Array && Uint8Array.prototype[ITERATOR];\n\nvar PROPER_ARRAY_VALUES_NAME = !!nativeTypedArrayIterator && nativeTypedArrayIterator.name === 'values';\n\nvar typedArrayValues = function values() {\n  return arrayValues(aTypedArray(this));\n};\n\n// `%TypedArray%.prototype.entries` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\nexportTypedArrayMethod('entries', function entries() {\n  return arrayEntries(aTypedArray(this));\n});\n// `%TypedArray%.prototype.keys` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys\nexportTypedArrayMethod('keys', function keys() {\n  return arrayKeys(aTypedArray(this));\n});\n// `%TypedArray%.prototype.values` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\nexportTypedArrayMethod('values', typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME);\n// `%TypedArray%.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator\nexportTypedArrayMethod(ITERATOR, typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME);\n\n\n/***/ }),\n\n/***/ 8867:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar uncurryThis = __webpack_require__(1702);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $join = uncurryThis([].join);\n\n// `%TypedArray%.prototype.join` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join\nexportTypedArrayMethod('join', function join(separator) {\n  return $join(aTypedArray(this), separator);\n});\n\n\n/***/ }),\n\n/***/ 7789:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar apply = __webpack_require__(2104);\nvar $lastIndexOf = __webpack_require__(6583);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof\nexportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {\n  var length = arguments.length;\n  return apply($lastIndexOf, aTypedArray(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]);\n});\n\n\n/***/ }),\n\n/***/ 3739:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $map = (__webpack_require__(2092).map);\nvar typedArraySpeciesConstructor = __webpack_require__(6304);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.map` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map\nexportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {\n  return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {\n    return new (typedArraySpeciesConstructor(O))(length);\n  });\n});\n\n\n/***/ }),\n\n/***/ 4483:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $reduceRight = (__webpack_require__(3671).right);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRicht` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n  var length = arguments.length;\n  return $reduceRight(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 9368:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $reduce = (__webpack_require__(3671).left);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce\nexportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {\n  var length = arguments.length;\n  return $reduce(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 2056:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar floor = Math.floor;\n\n// `%TypedArray%.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse\nexportTypedArrayMethod('reverse', function reverse() {\n  var that = this;\n  var length = aTypedArray(that).length;\n  var middle = floor(length / 2);\n  var index = 0;\n  var value;\n  while (index < middle) {\n    value = that[index];\n    that[index++] = that[--length];\n    that[length] = value;\n  } return that;\n});\n\n\n/***/ }),\n\n/***/ 3462:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar lengthOfArrayLike = __webpack_require__(6244);\nvar toOffset = __webpack_require__(4590);\nvar toObject = __webpack_require__(7908);\nvar fails = __webpack_require__(7293);\n\nvar RangeError = global.RangeError;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n  // eslint-disable-next-line es/no-typed-arrays -- required for testing\n  new Int8Array(1).set({});\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n  aTypedArray(this);\n  var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n  var length = this.length;\n  var src = toObject(arrayLike);\n  var len = lengthOfArrayLike(src);\n  var index = 0;\n  if (len + offset > length) throw RangeError('Wrong length');\n  while (index < len) this[offset + index] = src[index++];\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 678:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar typedArraySpeciesConstructor = __webpack_require__(6304);\nvar fails = __webpack_require__(7293);\nvar arraySlice = __webpack_require__(206);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n  // eslint-disable-next-line es/no-typed-arrays -- required for testing\n  new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n  var list = arraySlice(aTypedArray(this), start, end);\n  var C = typedArraySpeciesConstructor(this);\n  var index = 0;\n  var length = list.length;\n  var result = new C(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 7462:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar $some = (__webpack_require__(2092).some);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.some` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some\nexportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {\n  return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 3824:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\nvar fails = __webpack_require__(7293);\nvar aCallable = __webpack_require__(9662);\nvar internalSort = __webpack_require__(4362);\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar FF = __webpack_require__(8886);\nvar IE_OR_EDGE = __webpack_require__(256);\nvar V8 = __webpack_require__(7392);\nvar WEBKIT = __webpack_require__(8008);\n\nvar Array = global.Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar Uint16Array = global.Uint16Array;\nvar un$Sort = Uint16Array && uncurryThis(Uint16Array.prototype.sort);\n\n// WebKit\nvar ACCEPT_INCORRECT_ARGUMENTS = !!un$Sort && !(fails(function () {\n  un$Sort(new Uint16Array(2), null);\n}) && fails(function () {\n  un$Sort(new Uint16Array(2), {});\n}));\n\nvar STABLE_SORT = !!un$Sort && !fails(function () {\n  // feature detection can be too slow, so check engines versions\n  if (V8) return V8 < 74;\n  if (FF) return FF < 67;\n  if (IE_OR_EDGE) return true;\n  if (WEBKIT) return WEBKIT < 602;\n\n  var array = new Uint16Array(516);\n  var expected = Array(516);\n  var index, mod;\n\n  for (index = 0; index < 516; index++) {\n    mod = index % 4;\n    array[index] = 515 - index;\n    expected[index] = index - 2 * mod + 3;\n  }\n\n  un$Sort(array, function (a, b) {\n    return (a / 4 | 0) - (b / 4 | 0);\n  });\n\n  for (index = 0; index < 516; index++) {\n    if (array[index] !== expected[index]) return true;\n  }\n});\n\nvar getSortCompare = function (comparefn) {\n  return function (x, y) {\n    if (comparefn !== undefined) return +comparefn(x, y) || 0;\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (y !== y) return -1;\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (x !== x) return 1;\n    if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;\n    return x > y;\n  };\n};\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n  if (comparefn !== undefined) aCallable(comparefn);\n  if (STABLE_SORT) return un$Sort(this, comparefn);\n\n  return internalSort(aTypedArray(this), getSortCompare(comparefn));\n}, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);\n\n\n/***/ }),\n\n/***/ 5021:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar toLength = __webpack_require__(7466);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar typedArraySpeciesConstructor = __webpack_require__(6304);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.subarray` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray\nexportTypedArrayMethod('subarray', function subarray(begin, end) {\n  var O = aTypedArray(this);\n  var length = O.length;\n  var beginIndex = toAbsoluteIndex(begin, length);\n  var C = typedArraySpeciesConstructor(O);\n  return new C(\n    O.buffer,\n    O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,\n    toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)\n  );\n});\n\n\n/***/ }),\n\n/***/ 2974:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar apply = __webpack_require__(2104);\nvar ArrayBufferViewCore = __webpack_require__(2094);\nvar fails = __webpack_require__(7293);\nvar arraySlice = __webpack_require__(206);\n\nvar Int8Array = global.Int8Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $toLocaleString = [].toLocaleString;\n\n// iOS Safari 6.x fails here\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\n  $toLocaleString.call(new Int8Array(1));\n});\n\nvar FORCED = fails(function () {\n  return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\n}) || !fails(function () {\n  Int8Array.prototype.toLocaleString.call([1, 2]);\n});\n\n// `%TypedArray%.prototype.toLocaleString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\n  return apply(\n    $toLocaleString,\n    TO_LOCALE_STRING_BUG ? arraySlice(aTypedArray(this)) : aTypedArray(this),\n    arraySlice(arguments)\n  );\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 5016:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar exportTypedArrayMethod = (__webpack_require__(2094).exportTypedArrayMethod);\nvar fails = __webpack_require__(7293);\nvar global = __webpack_require__(7854);\nvar uncurryThis = __webpack_require__(1702);\n\nvar Uint8Array = global.Uint8Array;\nvar Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};\nvar arrayToString = [].toString;\nvar join = uncurryThis([].join);\n\nif (fails(function () { arrayToString.call({}); })) {\n  arrayToString = function toString() {\n    return join(this);\n  };\n}\n\nvar IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;\n\n// `%TypedArray%.prototype.toString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring\nexportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);\n\n\n/***/ }),\n\n/***/ 8255:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Uint16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint16', function (init) {\n  return function Uint16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 9135:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Uint32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint32', function (init) {\n  return function Uint32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 2472:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n  return function Uint8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 9743:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Uint8ClampedArray` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n  return function Uint8ClampedArray(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n}, true);\n\n\n/***/ }),\n\n/***/ 8628:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n// TODO: Remove from `core-js@4`\n__webpack_require__(9170);\n\n\n/***/ }),\n\n/***/ 5743:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n// TODO: Remove from `core-js@4`\n__webpack_require__(5837);\n\n\n/***/ }),\n\n/***/ 7314:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n// TODO: Remove from `core-js@4`\n__webpack_require__(7922);\n\n\n/***/ }),\n\n/***/ 6290:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n// TODO: Remove from `core-js@4`\n__webpack_require__(4668);\n\n\n/***/ }),\n\n/***/ 7479:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar newPromiseCapabilityModule = __webpack_require__(8523);\nvar perform = __webpack_require__(2534);\n\n// `Promise.try` method\n// https://github.com/tc39/proposal-promise-try\n$({ target: 'Promise', stat: true }, {\n  'try': function (callbackfn) {\n    var promiseCapability = newPromiseCapabilityModule.f(this);\n    var result = perform(callbackfn);\n    (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);\n    return promiseCapability.promise;\n  }\n});\n\n\n/***/ }),\n\n/***/ 3728:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n// TODO: Remove from `core-js@4`\n__webpack_require__(6373);\n\n\n/***/ }),\n\n/***/ 4747:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar DOMIterables = __webpack_require__(8324);\nvar DOMTokenListPrototype = __webpack_require__(8509);\nvar forEach = __webpack_require__(8533);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\nvar handlePrototype = function (CollectionPrototype) {\n  // some Chrome versions have non-configurable methods on DOMTokenList\n  if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n    createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n  } catch (error) {\n    CollectionPrototype.forEach = forEach;\n  }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  if (DOMIterables[COLLECTION_NAME]) {\n    handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n  }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n\n\n/***/ }),\n\n/***/ 3948:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar DOMIterables = __webpack_require__(8324);\nvar DOMTokenListPrototype = __webpack_require__(8509);\nvar ArrayIteratorMethods = __webpack_require__(6992);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n  if (CollectionPrototype) {\n    // some Chrome versions have non-configurable methods on DOMTokenList\n    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n    } catch (error) {\n      CollectionPrototype[ITERATOR] = ArrayValues;\n    }\n    if (!CollectionPrototype[TO_STRING_TAG]) {\n      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n    }\n    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n      // some Chrome versions have non-configurable methods on DOMTokenList\n      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n      } catch (error) {\n        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n      }\n    }\n  }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n\n\n/***/ }),\n\n/***/ 3753:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar call = __webpack_require__(6916);\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\n$({ target: 'URL', proto: true, enumerable: true }, {\n  toJSON: function toJSON() {\n    return call(URL.prototype.toString, this);\n  }\n});\n\n\n/***/ }),\n\n/***/ 1150:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar parent = __webpack_require__(7633);\n__webpack_require__(3948);\n\nmodule.exports = parent;\n\n\n/***/ }),\n\n/***/ 251:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar objectKeys = __webpack_require__(2215);\nvar isArguments = __webpack_require__(2584);\nvar is = __webpack_require__(609);\nvar isRegex = __webpack_require__(8420);\nvar flags = __webpack_require__(2847);\nvar isDate = __webpack_require__(8923);\n\nvar getTime = Date.prototype.getTime;\n\nfunction deepEqual(actual, expected, options) {\n  var opts = options || {};\n\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (opts.strict ? is(actual, expected) : actual === expected) {\n    return true;\n  }\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n  if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n    return opts.strict ? is(actual, expected) : actual == expected;\n  }\n\n  /*\n   * 7.4. For all other Object pairs, including Array objects, equivalence is\n   * determined by having the same number of owned properties (as verified\n   * with Object.prototype.hasOwnProperty.call), the same set of keys\n   * (although not necessarily the same order), equivalent values for every\n   * corresponding key, and an identical 'prototype' property. Note: this\n   * accounts for both named and indexed properties on Arrays.\n   */\n  // eslint-disable-next-line no-use-before-define\n  return objEquiv(actual, expected, opts);\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer(x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n    return false;\n  }\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') {\n    return false;\n  }\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  /* eslint max-statements: [2, 50] */\n  var i, key;\n  if (typeof a !== typeof b) { return false; }\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }\n\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) { return false; }\n\n  if (isArguments(a) !== isArguments(b)) { return false; }\n\n  var aIsRegex = isRegex(a);\n  var bIsRegex = isRegex(b);\n  if (aIsRegex !== bIsRegex) { return false; }\n  if (aIsRegex || bIsRegex) {\n    return a.source === b.source && flags(a) === flags(b);\n  }\n\n  if (isDate(a) && isDate(b)) {\n    return getTime.call(a) === getTime.call(b);\n  }\n\n  var aIsBuffer = isBuffer(a);\n  var bIsBuffer = isBuffer(b);\n  if (aIsBuffer !== bIsBuffer) { return false; }\n  if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n    if (a.length !== b.length) { return false; }\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) { return false; }\n    }\n    return true;\n  }\n\n  if (typeof a !== typeof b) { return false; }\n\n  try {\n    var ka = objectKeys(a);\n    var kb = objectKeys(b);\n  } catch (e) { // happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates hasOwnProperty)\n  if (ka.length !== kb.length) { return false; }\n\n  // the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  // ~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i]) { return false; }\n  }\n  // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) { return false; }\n  }\n\n  return true;\n}\n\nmodule.exports = deepEqual;\n\n\n/***/ }),\n\n/***/ 4289:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar hasPropertyDescriptors = __webpack_require__(1044)();\n\nvar supportsDescriptors = origDefineProperty && hasPropertyDescriptors;\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value; // eslint-disable-line no-param-reassign\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n\n\n/***/ }),\n\n/***/ 8091:\n/***/ (function(module) {\n\n\"use strict\";\n/**\n * Code refactored from Mozilla Developer Network:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\n\n\n\nfunction assign(target, firstSource) {\n  if (target === undefined || target === null) {\n    throw new TypeError('Cannot convert first argument to object');\n  }\n\n  var to = Object(target);\n  for (var i = 1; i < arguments.length; i++) {\n    var nextSource = arguments[i];\n    if (nextSource === undefined || nextSource === null) {\n      continue;\n    }\n\n    var keysArray = Object.keys(Object(nextSource));\n    for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n      var nextKey = keysArray[nextIndex];\n      var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n      if (desc !== undefined && desc.enumerable) {\n        to[nextKey] = nextSource[nextKey];\n      }\n    }\n  }\n  return to;\n}\n\nfunction polyfill() {\n  if (!Object.assign) {\n    Object.defineProperty(Object, 'assign', {\n      enumerable: false,\n      configurable: true,\n      writable: true,\n      value: assign\n    });\n  }\n}\n\nmodule.exports = {\n  assign: assign,\n  polyfill: polyfill\n};\n\n\n/***/ }),\n\n/***/ 7187:\n/***/ (function(module) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n\n\n/***/ }),\n\n/***/ 2536:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar ___EXPOSE_LOADER_IMPORT___ = __webpack_require__(4275);\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = __webpack_require__(7672);\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"pdfMake\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"pdfMake\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n\n\n/***/ }),\n\n/***/ 7672:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// eslint-disable-next-line func-names\nmodule.exports = function () {\n  if (typeof globalThis === \"object\") {\n    return globalThis;\n  }\n\n  var g;\n\n  try {\n    // This works if eval is allowed (see CSP)\n    // eslint-disable-next-line no-new-func\n    g = this || new Function(\"return this\")();\n  } catch (e) {\n    // This works if the window reference is available\n    if (typeof window === \"object\") {\n      return window;\n    } // This works if the self reference is available\n\n\n    if (typeof self === \"object\") {\n      return self;\n    } // This works if the global reference is available\n\n\n    if (typeof __webpack_require__.g !== \"undefined\") {\n      return __webpack_require__.g;\n    }\n  }\n\n  return g;\n}();\n\n/***/ }),\n\n/***/ 4029:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isCallable = __webpack_require__(5320);\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n    for (var i = 0, len = array.length; i < len; i++) {\n        if (hasOwnProperty.call(array, i)) {\n            if (receiver == null) {\n                iterator(array[i], i, array);\n            } else {\n                iterator.call(receiver, array[i], i, array);\n            }\n        }\n    }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n    for (var i = 0, len = string.length; i < len; i++) {\n        // no such thing as a sparse string.\n        if (receiver == null) {\n            iterator(string.charAt(i), i, string);\n        } else {\n            iterator.call(receiver, string.charAt(i), i, string);\n        }\n    }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n    for (var k in object) {\n        if (hasOwnProperty.call(object, k)) {\n            if (receiver == null) {\n                iterator(object[k], k, object);\n            } else {\n                iterator.call(receiver, object[k], k, object);\n            }\n        }\n    }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n    if (!isCallable(iterator)) {\n        throw new TypeError('iterator must be a function');\n    }\n\n    var receiver;\n    if (arguments.length >= 3) {\n        receiver = thisArg;\n    }\n\n    if (toStr.call(list) === '[object Array]') {\n        forEachArray(list, iterator, receiver);\n    } else if (typeof list === 'string') {\n        forEachString(list, iterator, receiver);\n    } else {\n        forEachObject(list, iterator, receiver);\n    }\n};\n\nmodule.exports = forEach;\n\n\n/***/ }),\n\n/***/ 7648:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slice.call(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                args.concat(slice.call(arguments))\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        } else {\n            return target.apply(\n                that,\n                args.concat(slice.call(arguments))\n            );\n        }\n    };\n\n    var boundLength = Math.max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs.push('$' + i);\n    }\n\n    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n\n\n/***/ }),\n\n/***/ 8612:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n\n\n/***/ }),\n\n/***/ 5972:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar functionsHaveNames = function functionsHaveNames() {\n\treturn typeof function f() {}.name === 'string';\n};\n\nvar gOPD = Object.getOwnPropertyDescriptor;\nif (gOPD) {\n\ttry {\n\t\tgOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\tgOPD = null;\n\t}\n}\n\nfunctionsHaveNames.functionsHaveConfigurableNames = function functionsHaveConfigurableNames() {\n\tif (!functionsHaveNames() || !gOPD) {\n\t\treturn false;\n\t}\n\tvar desc = gOPD(function () {}, 'name');\n\treturn !!desc && !!desc.configurable;\n};\n\nvar $bind = Function.prototype.bind;\n\nfunctionsHaveNames.boundFunctionsHaveNames = function boundFunctionsHaveNames() {\n\treturn functionsHaveNames() && typeof $bind === 'function' && function f() {}.bind().name !== '';\n};\n\nmodule.exports = functionsHaveNames;\n\n\n/***/ }),\n\n/***/ 210:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\n\n/***/ }),\n\n/***/ 7296:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n\n\n/***/ }),\n\n/***/ 1044:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n\n\n/***/ }),\n\n/***/ 1405:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n\n\n/***/ }),\n\n/***/ 5419:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n\n\n/***/ }),\n\n/***/ 6410:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n\n\n/***/ }),\n\n/***/ 7642:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n\n\n/***/ }),\n\n/***/ 688:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n    GB18030_CODE = -2,\n    SEQ_START  = -10,\n    NODE_START = -1000,\n    UNASSIGNED_NODE = new Array(0x100),\n    DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n    UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n    this.encodingName = codecOptions.encodingName;\n    if (!codecOptions)\n        throw new Error(\"DBCS codec is called without the data.\")\n    if (!codecOptions.table)\n        throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n    // Load tables.\n    var mappingTable = codecOptions.table();\n\n\n    // Decode tables: MBCS -> Unicode.\n\n    // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n    // Trie root is decodeTables[0].\n    // Values: >=  0 -> unicode character code. can be > 0xFFFF\n    //         == UNASSIGNED -> unknown/unassigned sequence.\n    //         == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n    //         <= NODE_START -> index of the next node in our trie to process next byte.\n    //         <= SEQ_START  -> index of the start of a character code sequence, in decodeTableSeq.\n    this.decodeTables = [];\n    this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n    // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n    this.decodeTableSeq = [];\n\n    // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n    for (var i = 0; i < mappingTable.length; i++)\n        this._addDecodeChunk(mappingTable[i]);\n\n    // Load & create GB18030 tables when needed.\n    if (typeof codecOptions.gb18030 === 'function') {\n        this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n        // Add GB18030 common decode nodes.\n        var commonThirdByteNodeIdx = this.decodeTables.length;\n        this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n        var commonFourthByteNodeIdx = this.decodeTables.length;\n        this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n        // Fill out the tree\n        var firstByteNode = this.decodeTables[0];\n        for (var i = 0x81; i <= 0xFE; i++) {\n            var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]];\n            for (var j = 0x30; j <= 0x39; j++) {\n                if (secondByteNode[j] === UNASSIGNED) {\n                    secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;\n                } else if (secondByteNode[j] > NODE_START) {\n                    throw new Error(\"gb18030 decode tables conflict at byte 2\");\n                }\n\n                var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];\n                for (var k = 0x81; k <= 0xFE; k++) {\n                    if (thirdByteNode[k] === UNASSIGNED) {\n                        thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;\n                    } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {\n                        continue;\n                    } else if (thirdByteNode[k] > NODE_START) {\n                        throw new Error(\"gb18030 decode tables conflict at byte 3\");\n                    }\n\n                    var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];\n                    for (var l = 0x30; l <= 0x39; l++) {\n                        if (fourthByteNode[l] === UNASSIGNED)\n                            fourthByteNode[l] = GB18030_CODE;\n                    }\n                }\n            }\n        }\n    }\n\n    this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n    \n    // Encode tables: Unicode -> DBCS.\n\n    // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n    // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n    // Values: >=  0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n    //         == UNASSIGNED -> no conversion found. Output a default char.\n    //         <= SEQ_START  -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n    this.encodeTable = [];\n    \n    // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n    // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n    // means end of sequence (needed when one sequence is a strict subsequence of another).\n    // Objects are kept separately from encodeTable to increase performance.\n    this.encodeTableSeq = [];\n\n    // Some chars can be decoded, but need not be encoded.\n    var skipEncodeChars = {};\n    if (codecOptions.encodeSkipVals)\n        for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n            var val = codecOptions.encodeSkipVals[i];\n            if (typeof val === 'number')\n                skipEncodeChars[val] = true;\n            else\n                for (var j = val.from; j <= val.to; j++)\n                    skipEncodeChars[j] = true;\n        }\n        \n    // Use decode trie to recursively fill out encode tables.\n    this._fillEncodeTable(0, 0, skipEncodeChars);\n\n    // Add more encoding pairs when needed.\n    if (codecOptions.encodeAdd) {\n        for (var uChar in codecOptions.encodeAdd)\n            if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n                this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n    }\n\n    this.defCharSB  = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n    var bytes = [];\n    for (; addr > 0; addr >>>= 8)\n        bytes.push(addr & 0xFF);\n    if (bytes.length == 0)\n        bytes.push(0);\n\n    var node = this.decodeTables[0];\n    for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n        var val = node[bytes[i]];\n\n        if (val == UNASSIGNED) { // Create new node.\n            node[bytes[i]] = NODE_START - this.decodeTables.length;\n            this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n        }\n        else if (val <= NODE_START) { // Existing node.\n            node = this.decodeTables[NODE_START - val];\n        }\n        else\n            throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n    }\n    return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n    // First element of chunk is the hex mbcs code where we start.\n    var curAddr = parseInt(chunk[0], 16);\n\n    // Choose the decoding node where we'll write our chars.\n    var writeTable = this._getDecodeTrieNode(curAddr);\n    curAddr = curAddr & 0xFF;\n\n    // Write all other elements of the chunk to the table.\n    for (var k = 1; k < chunk.length; k++) {\n        var part = chunk[k];\n        if (typeof part === \"string\") { // String, write as-is.\n            for (var l = 0; l < part.length;) {\n                var code = part.charCodeAt(l++);\n                if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n                    var codeTrail = part.charCodeAt(l++);\n                    if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n                        writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n                    else\n                        throw new Error(\"Incorrect surrogate pair in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n                }\n                else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n                    var len = 0xFFF - code + 2;\n                    var seq = [];\n                    for (var m = 0; m < len; m++)\n                        seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n                    writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n                    this.decodeTableSeq.push(seq);\n                }\n                else\n                    writeTable[curAddr++] = code; // Basic char\n            }\n        } \n        else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n            var charCode = writeTable[curAddr - 1] + 1;\n            for (var l = 0; l < part; l++)\n                writeTable[curAddr++] = charCode++;\n        }\n        else\n            throw new Error(\"Incorrect type '\" + typeof part + \"' given in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n    }\n    if (curAddr > 0xFF)\n        throw new Error(\"Incorrect chunk in \"  + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n    var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n    if (this.encodeTable[high] === undefined)\n        this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n    return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n    if (bucket[low] <= SEQ_START)\n        this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n    else if (bucket[low] == UNASSIGNED)\n        bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n    \n    // Get the root of character tree according to first character of the sequence.\n    var uCode = seq[0];\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n\n    var node;\n    if (bucket[low] <= SEQ_START) {\n        // There's already a sequence with  - use it.\n        node = this.encodeTableSeq[SEQ_START-bucket[low]];\n    }\n    else {\n        // There was no sequence object - allocate a new one.\n        node = {};\n        if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n        bucket[low] = SEQ_START - this.encodeTableSeq.length;\n        this.encodeTableSeq.push(node);\n    }\n\n    // Traverse the character tree, allocating new nodes as needed.\n    for (var j = 1; j < seq.length-1; j++) {\n        var oldVal = node[uCode];\n        if (typeof oldVal === 'object')\n            node = oldVal;\n        else {\n            node = node[uCode] = {}\n            if (oldVal !== undefined)\n                node[DEF_CHAR] = oldVal\n        }\n    }\n\n    // Set the leaf to given dbcsCode.\n    uCode = seq[seq.length-1];\n    node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n    var node = this.decodeTables[nodeIdx];\n    var hasValues = false;\n    var subNodeEmpty = {};\n    for (var i = 0; i < 0x100; i++) {\n        var uCode = node[i];\n        var mbCode = prefix + i;\n        if (skipEncodeChars[mbCode])\n            continue;\n\n        if (uCode >= 0) {\n            this._setEncodeChar(uCode, mbCode);\n            hasValues = true;\n        } else if (uCode <= NODE_START) {\n            var subNodeIdx = NODE_START - uCode;\n            if (!subNodeEmpty[subNodeIdx]) {  // Skip empty subtrees (they are too large in gb18030).\n                var newPrefix = (mbCode << 8) >>> 0;  // NOTE: '>>> 0' keeps 32-bit num positive.\n                if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars))\n                    hasValues = true;\n                else\n                    subNodeEmpty[subNodeIdx] = true;\n            }\n        } else if (uCode <= SEQ_START) {\n            this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n            hasValues = true;\n        }\n    }\n    return hasValues;\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n    // Encoder state\n    this.leadSurrogate = -1;\n    this.seqObj = undefined;\n    \n    // Static data\n    this.encodeTable = codec.encodeTable;\n    this.encodeTableSeq = codec.encodeTableSeq;\n    this.defaultCharSingleByte = codec.defCharSB;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n    var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n        leadSurrogate = this.leadSurrogate,\n        seqObj = this.seqObj, nextChar = -1,\n        i = 0, j = 0;\n\n    while (true) {\n        // 0. Get next character.\n        if (nextChar === -1) {\n            if (i == str.length) break;\n            var uCode = str.charCodeAt(i++);\n        }\n        else {\n            var uCode = nextChar;\n            nextChar = -1;    \n        }\n\n        // 1. Handle surrogates.\n        if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n            if (uCode < 0xDC00) { // We've got lead surrogate.\n                if (leadSurrogate === -1) {\n                    leadSurrogate = uCode;\n                    continue;\n                } else {\n                    leadSurrogate = uCode;\n                    // Double lead surrogate found.\n                    uCode = UNASSIGNED;\n                }\n            } else { // We've got trail surrogate.\n                if (leadSurrogate !== -1) {\n                    uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n                    leadSurrogate = -1;\n                } else {\n                    // Incomplete surrogate pair - only trail surrogate found.\n                    uCode = UNASSIGNED;\n                }\n                \n            }\n        }\n        else if (leadSurrogate !== -1) {\n            // Incomplete surrogate pair - only lead surrogate found.\n            nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n            leadSurrogate = -1;\n        }\n\n        // 2. Convert uCode character.\n        var dbcsCode = UNASSIGNED;\n        if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n            var resCode = seqObj[uCode];\n            if (typeof resCode === 'object') { // Sequence continues.\n                seqObj = resCode;\n                continue;\n\n            } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n                dbcsCode = resCode;\n\n            } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n                // Try default character for this sequence\n                resCode = seqObj[DEF_CHAR];\n                if (resCode !== undefined) {\n                    dbcsCode = resCode; // Found. Write it.\n                    nextChar = uCode; // Current character will be written too in the next iteration.\n\n                } else {\n                    // TODO: What if we have no default? (resCode == undefined)\n                    // Then, we should write first char of the sequence as-is and try the rest recursively.\n                    // Didn't do it for now because no encoding has this situation yet.\n                    // Currently, just skip the sequence and write current char.\n                }\n            }\n            seqObj = undefined;\n        }\n        else if (uCode >= 0) {  // Regular character\n            var subtable = this.encodeTable[uCode >> 8];\n            if (subtable !== undefined)\n                dbcsCode = subtable[uCode & 0xFF];\n            \n            if (dbcsCode <= SEQ_START) { // Sequence start\n                seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n                continue;\n            }\n\n            if (dbcsCode == UNASSIGNED && this.gb18030) {\n                // Use GB18030 algorithm to find character(s) to write.\n                var idx = findIdx(this.gb18030.uChars, uCode);\n                if (idx != -1) {\n                    var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n                    newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n                    newBuf[j++] = 0x30 + dbcsCode;\n                    continue;\n                }\n            }\n        }\n\n        // 3. Write dbcsCode character.\n        if (dbcsCode === UNASSIGNED)\n            dbcsCode = this.defaultCharSingleByte;\n        \n        if (dbcsCode < 0x100) {\n            newBuf[j++] = dbcsCode;\n        }\n        else if (dbcsCode < 0x10000) {\n            newBuf[j++] = dbcsCode >> 8;   // high byte\n            newBuf[j++] = dbcsCode & 0xFF; // low byte\n        }\n        else if (dbcsCode < 0x1000000) {\n            newBuf[j++] = dbcsCode >> 16;\n            newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n            newBuf[j++] = dbcsCode & 0xFF;\n        } else {\n            newBuf[j++] = dbcsCode >>> 24;\n            newBuf[j++] = (dbcsCode >>> 16) & 0xFF;\n            newBuf[j++] = (dbcsCode >>> 8) & 0xFF;\n            newBuf[j++] = dbcsCode & 0xFF;\n        }\n    }\n\n    this.seqObj = seqObj;\n    this.leadSurrogate = leadSurrogate;\n    return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n    if (this.leadSurrogate === -1 && this.seqObj === undefined)\n        return; // All clean. Most often case.\n\n    var newBuf = Buffer.alloc(10), j = 0;\n\n    if (this.seqObj) { // We're in the sequence.\n        var dbcsCode = this.seqObj[DEF_CHAR];\n        if (dbcsCode !== undefined) { // Write beginning of the sequence.\n            if (dbcsCode < 0x100) {\n                newBuf[j++] = dbcsCode;\n            }\n            else {\n                newBuf[j++] = dbcsCode >> 8;   // high byte\n                newBuf[j++] = dbcsCode & 0xFF; // low byte\n            }\n        } else {\n            // See todo above.\n        }\n        this.seqObj = undefined;\n    }\n\n    if (this.leadSurrogate !== -1) {\n        // Incomplete surrogate pair - only lead surrogate found.\n        newBuf[j++] = this.defaultCharSingleByte;\n        this.leadSurrogate = -1;\n    }\n    \n    return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n    // Decoder state\n    this.nodeIdx = 0;\n    this.prevBytes = [];\n\n    // Static data\n    this.decodeTables = codec.decodeTables;\n    this.decodeTableSeq = codec.decodeTableSeq;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n    var newBuf = Buffer.alloc(buf.length*2),\n        nodeIdx = this.nodeIdx, \n        prevBytes = this.prevBytes, prevOffset = this.prevBytes.length,\n        seqStart = -this.prevBytes.length, // idx of the start of current parsed sequence.\n        uCode;\n\n    for (var i = 0, j = 0; i < buf.length; i++) {\n        var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset];\n\n        // Lookup in current trie node.\n        var uCode = this.decodeTables[nodeIdx][curByte];\n\n        if (uCode >= 0) { \n            // Normal character, just use it.\n        }\n        else if (uCode === UNASSIGNED) { // Unknown char.\n            // TODO: Callback with seq.\n            uCode = this.defaultCharUnicode.charCodeAt(0);\n            i = seqStart; // Skip one byte ('i' will be incremented by the for loop) and try to parse again.\n        }\n        else if (uCode === GB18030_CODE) {\n            if (i >= 3) {\n                var ptr = (buf[i-3]-0x81)*12600 + (buf[i-2]-0x30)*1260 + (buf[i-1]-0x81)*10 + (curByte-0x30);\n            } else {\n                var ptr = (prevBytes[i-3+prevOffset]-0x81)*12600 + \n                          (((i-2 >= 0) ? buf[i-2] : prevBytes[i-2+prevOffset])-0x30)*1260 + \n                          (((i-1 >= 0) ? buf[i-1] : prevBytes[i-1+prevOffset])-0x81)*10 + \n                          (curByte-0x30);\n            }\n            var idx = findIdx(this.gb18030.gbChars, ptr);\n            uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n        }\n        else if (uCode <= NODE_START) { // Go to next trie node.\n            nodeIdx = NODE_START - uCode;\n            continue;\n        }\n        else if (uCode <= SEQ_START) { // Output a sequence of chars.\n            var seq = this.decodeTableSeq[SEQ_START - uCode];\n            for (var k = 0; k < seq.length - 1; k++) {\n                uCode = seq[k];\n                newBuf[j++] = uCode & 0xFF;\n                newBuf[j++] = uCode >> 8;\n            }\n            uCode = seq[seq.length-1];\n        }\n        else\n            throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n        // Write the character to buffer, handling higher planes using surrogate pair.\n        if (uCode >= 0x10000) { \n            uCode -= 0x10000;\n            var uCodeLead = 0xD800 | (uCode >> 10);\n            newBuf[j++] = uCodeLead & 0xFF;\n            newBuf[j++] = uCodeLead >> 8;\n\n            uCode = 0xDC00 | (uCode & 0x3FF);\n        }\n        newBuf[j++] = uCode & 0xFF;\n        newBuf[j++] = uCode >> 8;\n\n        // Reset trie node.\n        nodeIdx = 0; seqStart = i+1;\n    }\n\n    this.nodeIdx = nodeIdx;\n    this.prevBytes = (seqStart >= 0)\n        ? Array.prototype.slice.call(buf, seqStart)\n        : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));\n\n    return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n    var ret = '';\n\n    // Try to parse all remaining chars.\n    while (this.prevBytes.length > 0) {\n        // Skip 1 character in the buffer.\n        ret += this.defaultCharUnicode;\n        var bytesArr = this.prevBytes.slice(1);\n\n        // Parse remaining as usual.\n        this.prevBytes = [];\n        this.nodeIdx = 0;\n        if (bytesArr.length > 0)\n            ret += this.write(bytesArr);\n    }\n\n    this.prevBytes = [];\n    this.nodeIdx = 0;\n    return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n    if (table[0] > val)\n        return -1;\n\n    var l = 0, r = table.length;\n    while (l < r-1) { // always table[l] <= val < table[r]\n        var mid = l + ((r-l+1) >> 1);\n        if (table[mid] <= val)\n            l = mid;\n        else\n            r = mid;\n    }\n    return l;\n}\n\n\n\n/***/ }),\n\n/***/ 5990:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n    \n    // == Japanese/ShiftJIS ====================================================\n    // All japanese encodings are based on JIS X set of standards:\n    // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.\n    // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n    //              Has several variations in 1978, 1983, 1990 and 1997.\n    // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n    // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n    //              2 planes, first is superset of 0208, second - revised 0212.\n    //              Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n    // Byte encodings are:\n    //  * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n    //               encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n    //               Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n    //  * EUC-JP:    Up to 3 bytes per character. Used mostly on *nixes.\n    //               0x00-0x7F       - lower part of 0201\n    //               0x8E, 0xA1-0xDF - upper part of 0201\n    //               (0xA1-0xFE)x2   - 0208 plane (94x94).\n    //               0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n    //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n    //               Used as-is in ISO2022 family.\n    //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n    //                0201-1976 Roman, 0208-1978, 0208-1983.\n    //  * ISO2022-JP-1: Adds esc seq for 0212-1990.\n    //  * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n    //  * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n    //  * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n    //\n    // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n    //\n    // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n    'shiftjis': {\n        type: '_dbcs',\n        table: function() { return __webpack_require__(7014) },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n        encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n    },\n    'csshiftjis': 'shiftjis',\n    'mskanji': 'shiftjis',\n    'sjis': 'shiftjis',\n    'windows31j': 'shiftjis',\n    'ms31j': 'shiftjis',\n    'xsjis': 'shiftjis',\n    'windows932': 'shiftjis',\n    'ms932': 'shiftjis',\n    '932': 'shiftjis',\n    'cp932': 'shiftjis',\n\n    'eucjp': {\n        type: '_dbcs',\n        table: function() { return __webpack_require__(5633) },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n    },\n\n    // TODO: KDDI extension to Shift_JIS\n    // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n    // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n    // == Chinese/GBK ==========================================================\n    // http://en.wikipedia.org/wiki/GBK\n    // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n    // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n    'gb2312': 'cp936',\n    'gb231280': 'cp936',\n    'gb23121980': 'cp936',\n    'csgb2312': 'cp936',\n    'csiso58gb231280': 'cp936',\n    'euccn': 'cp936',\n\n    // Microsoft's CP936 is a subset and approximation of GBK.\n    'windows936': 'cp936',\n    'ms936': 'cp936',\n    '936': 'cp936',\n    'cp936': {\n        type: '_dbcs',\n        table: function() { return __webpack_require__(3336) },\n    },\n\n    // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n    'gbk': {\n        type: '_dbcs',\n        table: function() { return (__webpack_require__(3336).concat)(__webpack_require__(4346)) },\n    },\n    'xgbk': 'gbk',\n    'isoir58': 'gbk',\n\n    // GB18030 is an algorithmic extension of GBK.\n    // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n    // http://icu-project.org/docs/papers/gb18030.html\n    // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n    // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n    'gb18030': {\n        type: '_dbcs',\n        table: function() { return (__webpack_require__(3336).concat)(__webpack_require__(4346)) },\n        gb18030: function() { return __webpack_require__(6258) },\n        encodeSkipVals: [0x80],\n        encodeAdd: {'€': 0xA2E3},\n    },\n\n    'chinese': 'gb18030',\n\n\n    // == Korean ===============================================================\n    // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n    'windows949': 'cp949',\n    'ms949': 'cp949',\n    '949': 'cp949',\n    'cp949': {\n        type: '_dbcs',\n        table: function() { return __webpack_require__(7348) },\n    },\n\n    'cseuckr': 'cp949',\n    'csksc56011987': 'cp949',\n    'euckr': 'cp949',\n    'isoir149': 'cp949',\n    'korean': 'cp949',\n    'ksc56011987': 'cp949',\n    'ksc56011989': 'cp949',\n    'ksc5601': 'cp949',\n\n\n    // == Big5/Taiwan/Hong Kong ================================================\n    // There are lots of tables for Big5 and cp950. Please see the following links for history:\n    // http://moztw.org/docs/big5/  http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n    // Variations, in roughly number of defined chars:\n    //  * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n    //  * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n    //  * Big5-2003 (Taiwan standard) almost superset of cp950.\n    //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n    //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n    //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n    //    Plus, it has 4 combining sequences.\n    //    Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n    //    because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n    //    Implementations are not consistent within browsers; sometimes labeled as just big5.\n    //    MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n    //    Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n    //    In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n    //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n    //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n    // \n    // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n    // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n    'windows950': 'cp950',\n    'ms950': 'cp950',\n    '950': 'cp950',\n    'cp950': {\n        type: '_dbcs',\n        table: function() { return __webpack_require__(4284) },\n    },\n\n    // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n    'big5': 'big5hkscs',\n    'big5hkscs': {\n        type: '_dbcs',\n        table: function() { return (__webpack_require__(4284).concat)(__webpack_require__(3480)) },\n        encodeSkipVals: [\n            // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of\n            // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.\n            // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.\n            0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe,\n            0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca,\n            0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62,\n            0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef,\n            0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed,\n\n            // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345\n            0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce,\n        ],\n    },\n\n    'cnbig5': 'big5hkscs',\n    'csbig5': 'big5hkscs',\n    'xxbig5': 'big5hkscs',\n};\n\n\n/***/ }),\n\n/***/ 6934:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n    __webpack_require__(1025),\n    __webpack_require__(7688),\n    __webpack_require__(1279),\n    __webpack_require__(758),\n    __webpack_require__(9068),\n    __webpack_require__(3769),\n    __webpack_require__(7018),\n    __webpack_require__(688),\n    __webpack_require__(5990),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it.\nfor (var i = 0; i < modules.length; i++) {\n    var module = modules[i];\n    for (var enc in module)\n        if (Object.prototype.hasOwnProperty.call(module, enc))\n            exports[enc] = module[enc];\n}\n\n\n/***/ }),\n\n/***/ 1025:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n    // Encodings\n    utf8:   { type: \"_internal\", bomAware: true},\n    cesu8:  { type: \"_internal\", bomAware: true},\n    unicode11utf8: \"utf8\",\n\n    ucs2:   { type: \"_internal\", bomAware: true},\n    utf16le: \"ucs2\",\n\n    binary: { type: \"_internal\" },\n    base64: { type: \"_internal\" },\n    hex:    { type: \"_internal\" },\n\n    // Codec.\n    _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n    this.enc = codecOptions.encodingName;\n    this.bomAware = codecOptions.bomAware;\n\n    if (this.enc === \"base64\")\n        this.encoder = InternalEncoderBase64;\n    else if (this.enc === \"cesu8\") {\n        this.enc = \"utf8\"; // Use utf8 for decoding.\n        this.encoder = InternalEncoderCesu8;\n\n        // Add decoder for versions of Node not supporting CESU-8\n        if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') {\n            this.decoder = InternalDecoderCesu8;\n            this.defaultCharUnicode = iconv.defaultCharUnicode;\n        }\n    }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = (__webpack_require__(2553)/* .StringDecoder */ .s);\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n    StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n    this.decoder = new StringDecoder(codec.enc);\n}\n\nInternalDecoder.prototype.write = function(buf) {\n    if (!Buffer.isBuffer(buf)) {\n        buf = Buffer.from(buf);\n    }\n\n    return this.decoder.write(buf);\n}\n\nInternalDecoder.prototype.end = function() {\n    return this.decoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n    this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n    return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n    this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n    str = this.prevStr + str;\n    var completeQuads = str.length - (str.length % 4);\n    this.prevStr = str.slice(completeQuads);\n    str = str.slice(0, completeQuads);\n\n    return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n    return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n    for (var i = 0; i < str.length; i++) {\n        var charCode = str.charCodeAt(i);\n        // Naive implementation, but it works because CESU-8 is especially easy\n        // to convert from UTF-16 (which all JS strings are encoded in).\n        if (charCode < 0x80)\n            buf[bufIdx++] = charCode;\n        else if (charCode < 0x800) {\n            buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n        else { // charCode will always be < 0x10000 in javascript.\n            buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n            buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n    }\n    return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n    this.acc = 0;\n    this.contBytes = 0;\n    this.accBytes = 0;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n    var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n        res = '';\n    for (var i = 0; i < buf.length; i++) {\n        var curByte = buf[i];\n        if ((curByte & 0xC0) !== 0x80) { // Leading byte\n            if (contBytes > 0) { // Previous code is invalid\n                res += this.defaultCharUnicode;\n                contBytes = 0;\n            }\n\n            if (curByte < 0x80) { // Single-byte code\n                res += String.fromCharCode(curByte);\n            } else if (curByte < 0xE0) { // Two-byte code\n                acc = curByte & 0x1F;\n                contBytes = 1; accBytes = 1;\n            } else if (curByte < 0xF0) { // Three-byte code\n                acc = curByte & 0x0F;\n                contBytes = 2; accBytes = 1;\n            } else { // Four or more are not supported for CESU-8.\n                res += this.defaultCharUnicode;\n            }\n        } else { // Continuation byte\n            if (contBytes > 0) { // We're waiting for it.\n                acc = (acc << 6) | (curByte & 0x3f);\n                contBytes--; accBytes++;\n                if (contBytes === 0) {\n                    // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n                    if (accBytes === 2 && acc < 0x80 && acc > 0)\n                        res += this.defaultCharUnicode;\n                    else if (accBytes === 3 && acc < 0x800)\n                        res += this.defaultCharUnicode;\n                    else\n                        // Actually add character.\n                        res += String.fromCharCode(acc);\n                }\n            } else { // Unexpected continuation byte\n                res += this.defaultCharUnicode;\n            }\n        }\n    }\n    this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n    return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n    var res = 0;\n    if (this.contBytes > 0)\n        res += this.defaultCharUnicode;\n    return res;\n}\n\n\n/***/ }),\n\n/***/ 9068:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n    if (!codecOptions)\n        throw new Error(\"SBCS codec is called without the data.\")\n    \n    // Prepare char buffer for decoding.\n    if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n        throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n    \n    if (codecOptions.chars.length === 128) {\n        var asciiString = \"\";\n        for (var i = 0; i < 128; i++)\n            asciiString += String.fromCharCode(i);\n        codecOptions.chars = asciiString + codecOptions.chars;\n    }\n\n    this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n    \n    // Encoding buffer.\n    var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n    for (var i = 0; i < codecOptions.chars.length; i++)\n        encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n    this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n    this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length);\n    for (var i = 0; i < str.length; i++)\n        buf[i] = this.encodeBuf[str.charCodeAt(i)];\n    \n    return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n    this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n    // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n    var decodeBuf = this.decodeBuf;\n    var newBuf = Buffer.alloc(buf.length*2);\n    var idx1 = 0, idx2 = 0;\n    for (var i = 0; i < buf.length; i++) {\n        idx1 = buf[i]*2; idx2 = i*2;\n        newBuf[idx2] = decodeBuf[idx1];\n        newBuf[idx2+1] = decodeBuf[idx1+1];\n    }\n    return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n\n\n/***/ }),\n\n/***/ 7018:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n  \"437\": \"cp437\",\n  \"737\": \"cp737\",\n  \"775\": \"cp775\",\n  \"850\": \"cp850\",\n  \"852\": \"cp852\",\n  \"855\": \"cp855\",\n  \"856\": \"cp856\",\n  \"857\": \"cp857\",\n  \"858\": \"cp858\",\n  \"860\": \"cp860\",\n  \"861\": \"cp861\",\n  \"862\": \"cp862\",\n  \"863\": \"cp863\",\n  \"864\": \"cp864\",\n  \"865\": \"cp865\",\n  \"866\": \"cp866\",\n  \"869\": \"cp869\",\n  \"874\": \"windows874\",\n  \"922\": \"cp922\",\n  \"1046\": \"cp1046\",\n  \"1124\": \"cp1124\",\n  \"1125\": \"cp1125\",\n  \"1129\": \"cp1129\",\n  \"1133\": \"cp1133\",\n  \"1161\": \"cp1161\",\n  \"1162\": \"cp1162\",\n  \"1163\": \"cp1163\",\n  \"1250\": \"windows1250\",\n  \"1251\": \"windows1251\",\n  \"1252\": \"windows1252\",\n  \"1253\": \"windows1253\",\n  \"1254\": \"windows1254\",\n  \"1255\": \"windows1255\",\n  \"1256\": \"windows1256\",\n  \"1257\": \"windows1257\",\n  \"1258\": \"windows1258\",\n  \"28591\": \"iso88591\",\n  \"28592\": \"iso88592\",\n  \"28593\": \"iso88593\",\n  \"28594\": \"iso88594\",\n  \"28595\": \"iso88595\",\n  \"28596\": \"iso88596\",\n  \"28597\": \"iso88597\",\n  \"28598\": \"iso88598\",\n  \"28599\": \"iso88599\",\n  \"28600\": \"iso885910\",\n  \"28601\": \"iso885911\",\n  \"28603\": \"iso885913\",\n  \"28604\": \"iso885914\",\n  \"28605\": \"iso885915\",\n  \"28606\": \"iso885916\",\n  \"windows874\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"win874\": \"windows874\",\n  \"cp874\": \"windows874\",\n  \"windows1250\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n  },\n  \"win1250\": \"windows1250\",\n  \"cp1250\": \"windows1250\",\n  \"windows1251\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"win1251\": \"windows1251\",\n  \"cp1251\": \"windows1251\",\n  \"windows1252\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"win1252\": \"windows1252\",\n  \"cp1252\": \"windows1252\",\n  \"windows1253\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n  },\n  \"win1253\": \"windows1253\",\n  \"cp1253\": \"windows1253\",\n  \"windows1254\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n  },\n  \"win1254\": \"windows1254\",\n  \"cp1254\": \"windows1254\",\n  \"windows1255\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n  },\n  \"win1255\": \"windows1255\",\n  \"cp1255\": \"windows1255\",\n  \"windows1256\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے\"\n  },\n  \"win1256\": \"windows1256\",\n  \"cp1256\": \"windows1256\",\n  \"windows1257\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\"\n  },\n  \"win1257\": \"windows1257\",\n  \"cp1257\": \"windows1257\",\n  \"windows1258\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"win1258\": \"windows1258\",\n  \"cp1258\": \"windows1258\",\n  \"iso88591\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"cp28591\": \"iso88591\",\n  \"iso88592\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n  },\n  \"cp28592\": \"iso88592\",\n  \"iso88593\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" Ħ˘£¤�Ĥ§¨İŞĞĴ­�Ż°ħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙\"\n  },\n  \"cp28593\": \"iso88593\",\n  \"iso88594\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ĄĸŖ¤ĨĻ§¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩļˇ¸šēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖ×ØŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙\"\n  },\n  \"cp28594\": \"iso88594\",\n  \"iso88595\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ\"\n  },\n  \"cp28595\": \"iso88595\",\n  \"iso88596\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������\"\n  },\n  \"cp28596\": \"iso88596\",\n  \"iso88597\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n  },\n  \"cp28597\": \"iso88597\",\n  \"iso88598\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n  },\n  \"cp28598\": \"iso88598\",\n  \"iso88599\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n  },\n  \"cp28599\": \"iso88599\",\n  \"iso885910\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ĄĒĢĪĨĶ§ĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ\"\n  },\n  \"cp28600\": \"iso885910\",\n  \"iso885911\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"cp28601\": \"iso885911\",\n  \"iso885913\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’\"\n  },\n  \"cp28603\": \"iso885913\",\n  \"iso885914\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ\"\n  },\n  \"cp28604\": \"iso885914\",\n  \"iso885915\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"cp28605\": \"iso885915\",\n  \"iso885916\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ĄąŁ€„Š§š©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ\"\n  },\n  \"cp28606\": \"iso885916\",\n  \"cp437\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm437\": \"cp437\",\n  \"csibm437\": \"cp437\",\n  \"cp737\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm737\": \"cp737\",\n  \"csibm737\": \"cp737\",\n  \"cp775\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ \"\n  },\n  \"ibm775\": \"cp775\",\n  \"csibm775\": \"cp775\",\n  \"cp850\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñÑªº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýÝ¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm850\": \"cp850\",\n  \"csibm850\": \"cp850\",\n  \"cp852\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘę¬źČş«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ \"\n  },\n  \"ibm852\": \"cp852\",\n  \"csibm852\": \"cp852\",\n  \"cp855\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ \"\n  },\n  \"ibm855\": \"cp855\",\n  \"csibm855\": \"cp855\",\n  \"cp856\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm856\": \"cp856\",\n  \"csibm856\": \"cp856\",\n  \"cp857\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞğ¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm857\": \"cp857\",\n  \"csibm857\": \"cp857\",\n  \"cp858\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñÑªº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýÝ¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n  },\n  \"ibm858\": \"cp858\",\n  \"csibm858\": \"cp858\",\n  \"cp860\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñÑªº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm860\": \"cp860\",\n  \"csibm860\": \"cp860\",\n  \"cp861\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm861\": \"cp861\",\n  \"csibm861\": \"cp861\",\n  \"cp862\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm862\": \"cp862\",\n  \"csibm862\": \"cp862\",\n  \"cp863\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm863\": \"cp863\",\n  \"csibm863\": \"cp863\",\n  \"cp864\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�\"\n  },\n  \"ibm864\": \"cp864\",\n  \"csibm864\": \"cp864\",\n  \"cp865\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñÑªº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n  },\n  \"ibm865\": \"cp865\",\n  \"csibm865\": \"cp865\",\n  \"cp866\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ \"\n  },\n  \"ibm866\": \"cp866\",\n  \"csibm866\": \"cp866\",\n  \"cp869\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ \"\n  },\n  \"ibm869\": \"cp869\",\n  \"csibm869\": \"cp869\",\n  \"cp922\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖ×ØÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ\"\n  },\n  \"ibm922\": \"cp922\",\n  \"csibm922\": \"cp922\",\n  \"cp1046\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ﺈ×÷ﹱ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�\"\n  },\n  \"ibm1046\": \"cp1046\",\n  \"csibm1046\": \"cp1046\",\n  \"cp1124\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ\"\n  },\n  \"ibm1124\": \"cp1124\",\n  \"csibm1124\": \"cp1124\",\n  \"cp1125\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ \"\n  },\n  \"ibm1125\": \"cp1125\",\n  \"csibm1125\": \"cp1125\",\n  \"cp1129\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"ibm1129\": \"cp1129\",\n  \"csibm1129\": \"cp1129\",\n  \"cp1133\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�\"\n  },\n  \"ibm1133\": \"cp1133\",\n  \"csibm1133\": \"cp1133\",\n  \"cp1161\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ \"\n  },\n  \"ibm1161\": \"cp1161\",\n  \"csibm1161\": \"cp1161\",\n  \"cp1162\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"€…‘’“”•–— กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  },\n  \"ibm1162\": \"cp1162\",\n  \"csibm1162\": \"cp1162\",\n  \"cp1163\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n  },\n  \"ibm1163\": \"cp1163\",\n  \"csibm1163\": \"cp1163\",\n  \"maccroatian\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ\"\n  },\n  \"maccyrillic\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n  },\n  \"macgreek\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"Ä¹²É³ÖÜ΅àâä΄¨çéèêë£™îï•½‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\"\n  },\n  \"maciceland\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macroman\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macromania\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macthai\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู﻿​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����\"\n  },\n  \"macturkish\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"macukraine\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n  },\n  \"koi8r\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8u\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8ru\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"koi8t\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n  },\n  \"armscii8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�\"\n  },\n  \"rk1048\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"tcvn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000ÚỤ\\u0003ỪỬỮ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010ỨỰỲỶỸÝỴ\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ\"\n  },\n  \"georgianacademy\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"georgianps\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n  },\n  \"pt154\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n  },\n  \"viscii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001Ẳ\\u0003\\u0004ẴẪ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013Ỷ\\u0015\\u0016\\u0017\\u0018Ỹ\\u001a\\u001b\\u001c\\u001dỴ\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ\"\n  },\n  \"iso646cn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"iso646jp\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"hproman8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \" ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�\"\n  },\n  \"macintosh\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n  },\n  \"ascii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"��������������������������������������������������������������������������������������������������������������������������������\"\n  },\n  \"tis620\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n  }\n}\n\n/***/ }),\n\n/***/ 3769:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n    // Not supported by iconv, not sure why.\n    \"10029\": \"maccenteuro\",\n    \"maccenteuro\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"ÄĀāÉĄÖÜáąČäčĆćéŹźĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņŃ¬√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\"\n    },\n\n    \"808\": \"cp808\",\n    \"ibm808\": \"cp808\",\n    \"cp808\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ \"\n    },\n\n    \"mik\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n    },\n\n    \"cp720\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\\x80\\x81éâ\\x84à\\x86çêëèïî\\x8d\\x8e\\x8f\\x90\\u0651\\u0652ô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡\\u064b\\u064c\\u064d\\u064e\\u064f\\u0650≈°∙·√ⁿ²■\\u00a0\"\n    },\n\n    // Aliases of generated encodings.\n    \"ascii8bit\": \"ascii\",\n    \"usascii\": \"ascii\",\n    \"ansix34\": \"ascii\",\n    \"ansix341968\": \"ascii\",\n    \"ansix341986\": \"ascii\",\n    \"csascii\": \"ascii\",\n    \"cp367\": \"ascii\",\n    \"ibm367\": \"ascii\",\n    \"isoir6\": \"ascii\",\n    \"iso646us\": \"ascii\",\n    \"iso646irv\": \"ascii\",\n    \"us\": \"ascii\",\n\n    \"latin1\": \"iso88591\",\n    \"latin2\": \"iso88592\",\n    \"latin3\": \"iso88593\",\n    \"latin4\": \"iso88594\",\n    \"latin5\": \"iso88599\",\n    \"latin6\": \"iso885910\",\n    \"latin7\": \"iso885913\",\n    \"latin8\": \"iso885914\",\n    \"latin9\": \"iso885915\",\n    \"latin10\": \"iso885916\",\n\n    \"csisolatin1\": \"iso88591\",\n    \"csisolatin2\": \"iso88592\",\n    \"csisolatin3\": \"iso88593\",\n    \"csisolatin4\": \"iso88594\",\n    \"csisolatincyrillic\": \"iso88595\",\n    \"csisolatinarabic\": \"iso88596\",\n    \"csisolatingreek\" : \"iso88597\",\n    \"csisolatinhebrew\": \"iso88598\",\n    \"csisolatin5\": \"iso88599\",\n    \"csisolatin6\": \"iso885910\",\n\n    \"l1\": \"iso88591\",\n    \"l2\": \"iso88592\",\n    \"l3\": \"iso88593\",\n    \"l4\": \"iso88594\",\n    \"l5\": \"iso88599\",\n    \"l6\": \"iso885910\",\n    \"l7\": \"iso885913\",\n    \"l8\": \"iso885914\",\n    \"l9\": \"iso885915\",\n    \"l10\": \"iso885916\",\n\n    \"isoir14\": \"iso646jp\",\n    \"isoir57\": \"iso646cn\",\n    \"isoir100\": \"iso88591\",\n    \"isoir101\": \"iso88592\",\n    \"isoir109\": \"iso88593\",\n    \"isoir110\": \"iso88594\",\n    \"isoir144\": \"iso88595\",\n    \"isoir127\": \"iso88596\",\n    \"isoir126\": \"iso88597\",\n    \"isoir138\": \"iso88598\",\n    \"isoir148\": \"iso88599\",\n    \"isoir157\": \"iso885910\",\n    \"isoir166\": \"tis620\",\n    \"isoir179\": \"iso885913\",\n    \"isoir199\": \"iso885914\",\n    \"isoir203\": \"iso885915\",\n    \"isoir226\": \"iso885916\",\n\n    \"cp819\": \"iso88591\",\n    \"ibm819\": \"iso88591\",\n\n    \"cyrillic\": \"iso88595\",\n\n    \"arabic\": \"iso88596\",\n    \"arabic8\": \"iso88596\",\n    \"ecma114\": \"iso88596\",\n    \"asmo708\": \"iso88596\",\n\n    \"greek\" : \"iso88597\",\n    \"greek8\" : \"iso88597\",\n    \"ecma118\" : \"iso88597\",\n    \"elot928\" : \"iso88597\",\n\n    \"hebrew\": \"iso88598\",\n    \"hebrew8\": \"iso88598\",\n\n    \"turkish\": \"iso88599\",\n    \"turkish8\": \"iso88599\",\n\n    \"thai\": \"iso885911\",\n    \"thai8\": \"iso885911\",\n\n    \"celtic\": \"iso885914\",\n    \"celtic8\": \"iso885914\",\n    \"isoceltic\": \"iso885914\",\n\n    \"tis6200\": \"tis620\",\n    \"tis62025291\": \"tis620\",\n    \"tis62025330\": \"tis620\",\n\n    \"10000\": \"macroman\",\n    \"10006\": \"macgreek\",\n    \"10007\": \"maccyrillic\",\n    \"10079\": \"maciceland\",\n    \"10081\": \"macturkish\",\n\n    \"cspc8codepage437\": \"cp437\",\n    \"cspc775baltic\": \"cp775\",\n    \"cspc850multilingual\": \"cp850\",\n    \"cspcp852\": \"cp852\",\n    \"cspc862latinhebrew\": \"cp862\",\n    \"cpgr\": \"cp869\",\n\n    \"msee\": \"cp1250\",\n    \"mscyrl\": \"cp1251\",\n    \"msansi\": \"cp1252\",\n    \"msgreek\": \"cp1253\",\n    \"msturk\": \"cp1254\",\n    \"mshebr\": \"cp1255\",\n    \"msarab\": \"cp1256\",\n    \"winbaltrim\": \"cp1257\",\n\n    \"cp20866\": \"koi8r\",\n    \"20866\": \"koi8r\",\n    \"ibm878\": \"koi8r\",\n    \"cskoi8r\": \"koi8r\",\n\n    \"cp21866\": \"koi8u\",\n    \"21866\": \"koi8u\",\n    \"ibm1168\": \"koi8u\",\n\n    \"strk10482002\": \"rk1048\",\n\n    \"tcvn5712\": \"tcvn\",\n    \"tcvn57121\": \"tcvn\",\n\n    \"gb198880\": \"iso646cn\",\n    \"cn\": \"iso646cn\",\n\n    \"csiso14jisc6220ro\": \"iso646jp\",\n    \"jisc62201969ro\": \"iso646jp\",\n    \"jp\": \"iso646jp\",\n\n    \"cshproman8\": \"hproman8\",\n    \"r8\": \"hproman8\",\n    \"roman8\": \"hproman8\",\n    \"xroman8\": \"hproman8\",\n    \"ibm1051\": \"hproman8\",\n\n    \"mac\": \"macintosh\",\n    \"csmacintosh\": \"macintosh\",\n};\n\n\n\n/***/ }),\n\n/***/ 1279:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n    var buf = Buffer.from(str, 'ucs2');\n    for (var i = 0; i < buf.length; i += 2) {\n        var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n    }\n    return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n    this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n    if (buf.length == 0)\n        return '';\n\n    var buf2 = Buffer.alloc(buf.length + 1),\n        i = 0, j = 0;\n\n    if (this.overflowByte !== -1) {\n        buf2[0] = buf[0];\n        buf2[1] = this.overflowByte;\n        i = 1; j = 2;\n    }\n\n    for (; i < buf.length-1; i += 2, j+= 2) {\n        buf2[j] = buf[i+1];\n        buf2[j+1] = buf[i];\n    }\n\n    this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n    return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n    this.overflowByte = -1;\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n    options = options || {};\n    if (options.addBOM === undefined)\n        options.addBOM = true;\n    this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n    return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n    this.decoder = null;\n    this.initialBufs = [];\n    this.initialBufsLen = 0;\n\n    this.options = options || {};\n    this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n    if (!this.decoder) {\n        // Codec is not chosen yet. Accumulate initial bytes.\n        this.initialBufs.push(buf);\n        this.initialBufsLen += buf.length;\n        \n        if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below)\n            return '';\n\n        // We have enough bytes -> detect endianness.\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n    if (!this.decoder) {\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        var trail = this.decoder.end();\n        if (trail)\n            resStr += trail;\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n    return this.decoder.end();\n}\n\nfunction detectEncoding(bufs, defaultEncoding) {\n    var b = [];\n    var charsProcessed = 0;\n    var asciiCharsLE = 0, asciiCharsBE = 0; // Number of ASCII chars when decoded as LE or BE.\n\n    outer_loop:\n    for (var i = 0; i < bufs.length; i++) {\n        var buf = bufs[i];\n        for (var j = 0; j < buf.length; j++) {\n            b.push(buf[j]);\n            if (b.length === 2) {\n                if (charsProcessed === 0) {\n                    // Check BOM first.\n                    if (b[0] === 0xFF && b[1] === 0xFE) return 'utf-16le';\n                    if (b[0] === 0xFE && b[1] === 0xFF) return 'utf-16be';\n                }\n\n                if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;\n                if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;\n\n                b.length = 0;\n                charsProcessed++;\n\n                if (charsProcessed >= 100) {\n                    break outer_loop;\n                }\n            }\n        }\n    }\n\n    // Make decisions.\n    // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n    // So, we count ASCII as if it was LE or BE, and decide from that.\n    if (asciiCharsBE > asciiCharsLE) return 'utf-16be';\n    if (asciiCharsBE < asciiCharsLE) return 'utf-16le';\n\n    // Couldn't decide (likely all zeros or not enough data).\n    return defaultEncoding || 'utf-16le';\n}\n\n\n\n\n/***/ }),\n\n/***/ 7688:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// == UTF32-LE/BE codec. ==========================================================\n\nexports._utf32 = Utf32Codec;\n\nfunction Utf32Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n    this.bomAware = true;\n    this.isLE = codecOptions.isLE;\n}\n\nexports.utf32le = { type: '_utf32', isLE: true };\nexports.utf32be = { type: '_utf32', isLE: false };\n\n// Aliases\nexports.ucs4le = 'utf32le';\nexports.ucs4be = 'utf32be';\n\nUtf32Codec.prototype.encoder = Utf32Encoder;\nUtf32Codec.prototype.decoder = Utf32Decoder;\n\n// -- Encoding\n\nfunction Utf32Encoder(options, codec) {\n    this.isLE = codec.isLE;\n    this.highSurrogate = 0;\n}\n\nUtf32Encoder.prototype.write = function(str) {\n    var src = Buffer.from(str, 'ucs2');\n    var dst = Buffer.alloc(src.length * 2);\n    var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;\n    var offset = 0;\n\n    for (var i = 0; i < src.length; i += 2) {\n        var code = src.readUInt16LE(i);\n        var isHighSurrogate = (0xD800 <= code && code < 0xDC00);\n        var isLowSurrogate = (0xDC00 <= code && code < 0xE000);\n\n        if (this.highSurrogate) {\n            if (isHighSurrogate || !isLowSurrogate) {\n                // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low\n                // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character\n                // (technically wrong, but expected by some applications, like Windows file names).\n                write32.call(dst, this.highSurrogate, offset);\n                offset += 4;\n            }\n            else {\n                // Create 32-bit value from high and low surrogates;\n                var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000;\n\n                write32.call(dst, codepoint, offset);\n                offset += 4;\n                this.highSurrogate = 0;\n\n                continue;\n            }\n        }\n\n        if (isHighSurrogate)\n            this.highSurrogate = code;\n        else {\n            // Even if the current character is a low surrogate, with no previous high surrogate, we'll\n            // encode it as a semi-invalid stand-alone character for the same reasons expressed above for\n            // unpaired high surrogates.\n            write32.call(dst, code, offset);\n            offset += 4;\n            this.highSurrogate = 0;\n        }\n    }\n\n    if (offset < dst.length)\n        dst = dst.slice(0, offset);\n\n    return dst;\n};\n\nUtf32Encoder.prototype.end = function() {\n    // Treat any leftover high surrogate as a semi-valid independent character.\n    if (!this.highSurrogate)\n        return;\n\n    var buf = Buffer.alloc(4);\n\n    if (this.isLE)\n        buf.writeUInt32LE(this.highSurrogate, 0);\n    else\n        buf.writeUInt32BE(this.highSurrogate, 0);\n\n    this.highSurrogate = 0;\n\n    return buf;\n};\n\n// -- Decoding\n\nfunction Utf32Decoder(options, codec) {\n    this.isLE = codec.isLE;\n    this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);\n    this.overflow = [];\n}\n\nUtf32Decoder.prototype.write = function(src) {\n    if (src.length === 0)\n        return '';\n\n    var i = 0;\n    var codepoint = 0;\n    var dst = Buffer.alloc(src.length + 4);\n    var offset = 0;\n    var isLE = this.isLE;\n    var overflow = this.overflow;\n    var badChar = this.badChar;\n\n    if (overflow.length > 0) {\n        for (; i < src.length && overflow.length < 4; i++)\n            overflow.push(src[i]);\n        \n        if (overflow.length === 4) {\n            // NOTE: codepoint is a signed int32 and can be negative.\n            // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer).\n            if (isLE) {\n                codepoint = overflow[i] | (overflow[i+1] << 8) | (overflow[i+2] << 16) | (overflow[i+3] << 24);\n            } else {\n                codepoint = overflow[i+3] | (overflow[i+2] << 8) | (overflow[i+1] << 16) | (overflow[i] << 24);\n            }\n            overflow.length = 0;\n\n            offset = _writeCodepoint(dst, offset, codepoint, badChar);\n        }\n    }\n\n    // Main loop. Should be as optimized as possible.\n    for (; i < src.length - 3; i += 4) {\n        // NOTE: codepoint is a signed int32 and can be negative.\n        if (isLE) {\n            codepoint = src[i] | (src[i+1] << 8) | (src[i+2] << 16) | (src[i+3] << 24);\n        } else {\n            codepoint = src[i+3] | (src[i+2] << 8) | (src[i+1] << 16) | (src[i] << 24);\n        }\n        offset = _writeCodepoint(dst, offset, codepoint, badChar);\n    }\n\n    // Keep overflowing bytes.\n    for (; i < src.length; i++) {\n        overflow.push(src[i]);\n    }\n\n    return dst.slice(0, offset).toString('ucs2');\n};\n\nfunction _writeCodepoint(dst, offset, codepoint, badChar) {\n    // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations.\n    if (codepoint < 0 || codepoint > 0x10FFFF) {\n        // Not a valid Unicode codepoint\n        codepoint = badChar;\n    } \n\n    // Ephemeral Planes: Write high surrogate.\n    if (codepoint >= 0x10000) {\n        codepoint -= 0x10000;\n\n        var high = 0xD800 | (codepoint >> 10);\n        dst[offset++] = high & 0xff;\n        dst[offset++] = high >> 8;\n\n        // Low surrogate is written below.\n        var codepoint = 0xDC00 | (codepoint & 0x3FF);\n    }\n\n    // Write BMP char or low surrogate.\n    dst[offset++] = codepoint & 0xff;\n    dst[offset++] = codepoint >> 8;\n\n    return offset;\n};\n\nUtf32Decoder.prototype.end = function() {\n    this.overflow.length = 0;\n};\n\n// == UTF-32 Auto codec =============================================================\n// Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic.\n// Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32\n// Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'});\n\n// Encoder prepends BOM (which can be overridden with (addBOM: false}).\n\nexports.utf32 = Utf32AutoCodec;\nexports.ucs4 = 'utf32';\n\nfunction Utf32AutoCodec(options, iconv) {\n    this.iconv = iconv;\n}\n\nUtf32AutoCodec.prototype.encoder = Utf32AutoEncoder;\nUtf32AutoCodec.prototype.decoder = Utf32AutoDecoder;\n\n// -- Encoding\n\nfunction Utf32AutoEncoder(options, codec) {\n    options = options || {};\n\n    if (options.addBOM === undefined)\n        options.addBOM = true;\n\n    this.encoder = codec.iconv.getEncoder(options.defaultEncoding || 'utf-32le', options);\n}\n\nUtf32AutoEncoder.prototype.write = function(str) {\n    return this.encoder.write(str);\n};\n\nUtf32AutoEncoder.prototype.end = function() {\n    return this.encoder.end();\n};\n\n// -- Decoding\n\nfunction Utf32AutoDecoder(options, codec) {\n    this.decoder = null;\n    this.initialBufs = [];\n    this.initialBufsLen = 0;\n    this.options = options || {};\n    this.iconv = codec.iconv;\n}\n\nUtf32AutoDecoder.prototype.write = function(buf) {\n    if (!this.decoder) { \n        // Codec is not chosen yet. Accumulate initial bytes.\n        this.initialBufs.push(buf);\n        this.initialBufsLen += buf.length;\n\n        if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below)\n            return '';\n\n        // We have enough bytes -> detect endianness.\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.write(buf);\n};\n\nUtf32AutoDecoder.prototype.end = function() {\n    if (!this.decoder) {\n        var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var resStr = '';\n        for (var i = 0; i < this.initialBufs.length; i++)\n            resStr += this.decoder.write(this.initialBufs[i]);\n\n        var trail = this.decoder.end();\n        if (trail)\n            resStr += trail;\n\n        this.initialBufs.length = this.initialBufsLen = 0;\n        return resStr;\n    }\n\n    return this.decoder.end();\n};\n\nfunction detectEncoding(bufs, defaultEncoding) {\n    var b = [];\n    var charsProcessed = 0;\n    var invalidLE = 0, invalidBE = 0;   // Number of invalid chars when decoded as LE or BE.\n    var bmpCharsLE = 0, bmpCharsBE = 0; // Number of BMP chars when decoded as LE or BE.\n\n    outer_loop:\n    for (var i = 0; i < bufs.length; i++) {\n        var buf = bufs[i];\n        for (var j = 0; j < buf.length; j++) {\n            b.push(buf[j]);\n            if (b.length === 4) {\n                if (charsProcessed === 0) {\n                    // Check BOM first.\n                    if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) {\n                        return 'utf-32le';\n                    }\n                    if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) {\n                        return 'utf-32be';\n                    }\n                }\n\n                if (b[0] !== 0 || b[1] > 0x10) invalidBE++;\n                if (b[3] !== 0 || b[2] > 0x10) invalidLE++;\n\n                if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;\n                if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;\n\n                b.length = 0;\n                charsProcessed++;\n\n                if (charsProcessed >= 100) {\n                    break outer_loop;\n                }\n            }\n        }\n    }\n\n    // Make decisions.\n    if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE)  return 'utf-32be';\n    if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE)  return 'utf-32le';\n\n    // Couldn't decide (likely all zeros or not enough data).\n    return defaultEncoding || 'utf-32le';\n}\n\n\n/***/ }),\n\n/***/ 758:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n    this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n    // Naive implementation.\n    // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n    return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n        return \"+\" + (chunk === '+' ? '' : \n            this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n            + \"-\";\n    }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n    base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n    minusChar = '-'.charCodeAt(0),\n    andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '+'\n            if (buf[i] == plusChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64Chars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n                    res += \"+\";\n                } else {\n                    var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\");\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus is absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\");\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n//  * Base64 part is started by \"&\" instead of \"+\"\n//  * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n//  * In Base64, \",\" is used instead of \"/\"\n//  * Base64 must not be used to represent direct characters.\n//  * No implicit shift back from Base64 (should always end with '-')\n//  * String must end in non-shifted position.\n//  * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = Buffer.alloc(6);\n    this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n    var inBase64 = this.inBase64,\n        base64Accum = this.base64Accum,\n        base64AccumIdx = this.base64AccumIdx,\n        buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n    for (var i = 0; i < str.length; i++) {\n        var uChar = str.charCodeAt(i);\n        if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n            if (inBase64) {\n                if (base64AccumIdx > 0) {\n                    bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n                    base64AccumIdx = 0;\n                }\n\n                buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n                inBase64 = false;\n            }\n\n            if (!inBase64) {\n                buf[bufIdx++] = uChar; // Write direct character\n\n                if (uChar === andChar)  // Ampersand -> '&-'\n                    buf[bufIdx++] = minusChar;\n            }\n\n        } else { // Non-direct character\n            if (!inBase64) {\n                buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n                inBase64 = true;\n            }\n            if (inBase64) {\n                base64Accum[base64AccumIdx++] = uChar >> 8;\n                base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n                if (base64AccumIdx == base64Accum.length) {\n                    bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n                    base64AccumIdx = 0;\n                }\n            }\n        }\n    }\n\n    this.inBase64 = inBase64;\n    this.base64AccumIdx = base64AccumIdx;\n\n    return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n    var buf = Buffer.alloc(10), bufIdx = 0;\n    if (this.inBase64) {\n        if (this.base64AccumIdx > 0) {\n            bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n            this.base64AccumIdx = 0;\n        }\n\n        buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n        this.inBase64 = false;\n    }\n\n    return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n    // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '&'\n            if (buf[i] == andChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n                    res += \"&\";\n                } else {\n                    var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\").replace(/,/g, '/');\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus may be absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\").replace(/,/g, '/');\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n\n\n/***/ }),\n\n/***/ 5395:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n    this.encoder = encoder;\n    this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n    if (this.addBOM) {\n        str = BOMChar + str;\n        this.addBOM = false;\n    }\n\n    return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n    this.decoder = decoder;\n    this.pass = false;\n    this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n    var res = this.decoder.write(buf);\n    if (this.pass || !res)\n        return res;\n\n    if (res[0] === BOMChar) {\n        res = res.slice(1);\n        if (typeof this.options.stripBOM === 'function')\n            this.options.stripBOM();\n    }\n\n    this.pass = true;\n    return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n    return this.decoder.end();\n}\n\n\n\n/***/ }),\n\n/***/ 4914:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\nvar bomHandling = __webpack_require__(5395),\n    iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '�';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n    str = \"\" + (str || \"\"); // Ensure string.\n\n    var encoder = iconv.getEncoder(encoding, options);\n\n    var res = encoder.write(str);\n    var trail = encoder.end();\n    \n    return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n    if (typeof buf === 'string') {\n        if (!iconv.skipDecodeWarning) {\n            console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n            iconv.skipDecodeWarning = true;\n        }\n\n        buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n    }\n\n    var decoder = iconv.getDecoder(encoding, options);\n\n    var res = decoder.write(buf);\n    var trail = decoder.end();\n\n    return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n    try {\n        iconv.getCodec(enc);\n        return true;\n    } catch (e) {\n        return false;\n    }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n    if (!iconv.encodings)\n        iconv.encodings = __webpack_require__(6934); // Lazy load all encoding definitions.\n    \n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    var enc = iconv._canonicalizeEncoding(encoding);\n\n    // Traverse iconv.encodings to find actual codec.\n    var codecOptions = {};\n    while (true) {\n        var codec = iconv._codecDataCache[enc];\n        if (codec)\n            return codec;\n\n        var codecDef = iconv.encodings[enc];\n\n        switch (typeof codecDef) {\n            case \"string\": // Direct alias to other encoding.\n                enc = codecDef;\n                break;\n\n            case \"object\": // Alias with options. Can be layered.\n                for (var key in codecDef)\n                    codecOptions[key] = codecDef[key];\n\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n                \n                enc = codecDef.type;\n                break;\n\n            case \"function\": // Codec itself.\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n\n                // The codec function must load all tables and return object with .encoder and .decoder methods.\n                // It'll be called only once (for each different options object).\n                codec = new codecDef(codecOptions, iconv);\n\n                iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n                return codec;\n\n            default:\n                throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n        }\n    }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        encoder = new codec.encoder(options, codec);\n\n    if (codec.bomAware && options && options.addBOM)\n        encoder = new bomHandling.PrependBOM(encoder, options);\n\n    return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        decoder = new codec.decoder(options, codec);\n\n    if (codec.bomAware && !(options && options.stripBOM === false))\n        decoder = new bomHandling.StripBOM(decoder, options);\n\n    return decoder;\n}\n\n// Streaming API\n// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add\n// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default.\n// If you would like to enable it explicitly, please add the following code to your app:\n// > iconv.enableStreamingAPI(require('stream'));\niconv.enableStreamingAPI = function enableStreamingAPI(stream_module) {\n    if (iconv.supportsStreams)\n        return;\n\n    // Dependency-inject stream module to create IconvLite stream classes.\n    var streams = __webpack_require__(8044)(stream_module);\n\n    // Not public API yet, but expose the stream classes.\n    iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;\n    iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;\n\n    // Streaming API.\n    iconv.encodeStream = function encodeStream(encoding, options) {\n        return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n    }\n\n    iconv.decodeStream = function decodeStream(encoding, options) {\n        return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n    }\n\n    iconv.supportsStreams = true;\n}\n\n// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments).\nvar stream_module;\ntry {\n    stream_module = __webpack_require__(5832);\n} catch (e) {}\n\nif (stream_module && stream_module.Transform) {\n    iconv.enableStreamingAPI(stream_module);\n\n} else {\n    // In rare cases where 'stream' module is not available by default, throw a helpful exception.\n    iconv.encodeStream = iconv.decodeStream = function() {\n        throw new Error(\"iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.\");\n    };\n}\n\nif (false) {}\n\n\n/***/ }),\n\n/***/ 8044:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Buffer = (__webpack_require__(7103).Buffer);\n\n// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments), \n// we opt to dependency-inject it instead of creating a hard dependency.\nmodule.exports = function(stream_module) {\n    var Transform = stream_module.Transform;\n\n    // == Encoder stream =======================================================\n\n    function IconvLiteEncoderStream(conv, options) {\n        this.conv = conv;\n        options = options || {};\n        options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n        Transform.call(this, options);\n    }\n\n    IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n        constructor: { value: IconvLiteEncoderStream }\n    });\n\n    IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n        if (typeof chunk != 'string')\n            return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n        try {\n            var res = this.conv.write(chunk);\n            if (res && res.length) this.push(res);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteEncoderStream.prototype._flush = function(done) {\n        try {\n            var res = this.conv.end();\n            if (res && res.length) this.push(res);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteEncoderStream.prototype.collect = function(cb) {\n        var chunks = [];\n        this.on('error', cb);\n        this.on('data', function(chunk) { chunks.push(chunk); });\n        this.on('end', function() {\n            cb(null, Buffer.concat(chunks));\n        });\n        return this;\n    }\n\n\n    // == Decoder stream =======================================================\n\n    function IconvLiteDecoderStream(conv, options) {\n        this.conv = conv;\n        options = options || {};\n        options.encoding = this.encoding = 'utf8'; // We output strings.\n        Transform.call(this, options);\n    }\n\n    IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n        constructor: { value: IconvLiteDecoderStream }\n    });\n\n    IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n        if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array))\n            return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n        try {\n            var res = this.conv.write(chunk);\n            if (res && res.length) this.push(res, this.encoding);\n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteDecoderStream.prototype._flush = function(done) {\n        try {\n            var res = this.conv.end();\n            if (res && res.length) this.push(res, this.encoding);                \n            done();\n        }\n        catch (e) {\n            done(e);\n        }\n    }\n\n    IconvLiteDecoderStream.prototype.collect = function(cb) {\n        var res = '';\n        this.on('error', cb);\n        this.on('data', function(chunk) { res += chunk; });\n        this.on('end', function() {\n            cb(null, res);\n        });\n        return this;\n    }\n\n    return {\n        IconvLiteEncoderStream: IconvLiteEncoderStream,\n        IconvLiteDecoderStream: IconvLiteDecoderStream,\n    };\n};\n\n\n/***/ }),\n\n/***/ 645:\n/***/ (function(__unused_webpack_module, exports) {\n\n/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n\n/***/ }),\n\n/***/ 5717:\n/***/ (function(module) {\n\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n\n\n/***/ }),\n\n/***/ 2584:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar hasToStringTag = __webpack_require__(6410)();\nvar callBound = __webpack_require__(1924);\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n\n\n/***/ }),\n\n/***/ 5320:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n\n\n/***/ }),\n\n/***/ 8923:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n\n\n/***/ }),\n\n/***/ 8662:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = __webpack_require__(6410)();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n\n\n/***/ }),\n\n/***/ 8611:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n\treturn value !== value;\n};\n\n\n/***/ }),\n\n/***/ 360:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(8611);\nvar getPolyfill = __webpack_require__(9415);\nvar shim = __webpack_require__(6743);\n\nvar polyfill = callBind(getPolyfill(), Number);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n\n\n/***/ }),\n\n/***/ 9415:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar implementation = __webpack_require__(8611);\n\nmodule.exports = function getPolyfill() {\n\tif (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n\t\treturn Number.isNaN;\n\t}\n\treturn implementation;\n};\n\n\n/***/ }),\n\n/***/ 6743:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar define = __webpack_require__(4289);\nvar getPolyfill = __webpack_require__(9415);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function shimNumberIsNaN() {\n\tvar polyfill = getPolyfill();\n\tdefine(Number, { isNaN: polyfill }, {\n\t\tisNaN: function testIsNaN() {\n\t\t\treturn Number.isNaN !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n\n\n/***/ }),\n\n/***/ 8420:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n\n\n/***/ }),\n\n/***/ 5692:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar forEach = __webpack_require__(4029);\nvar availableTypedArrays = __webpack_require__(3083);\nvar callBound = __webpack_require__(1924);\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = __webpack_require__(6410)();\nvar gOPD = __webpack_require__(7296);\n\nvar g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n\n\n/***/ }),\n\n/***/ 4244:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n\n\n/***/ }),\n\n/***/ 609:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(4244);\nvar getPolyfill = __webpack_require__(5624);\nvar shim = __webpack_require__(2281);\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n\n\n/***/ }),\n\n/***/ 5624:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar implementation = __webpack_require__(4244);\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n\n\n/***/ }),\n\n/***/ 2281:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar getPolyfill = __webpack_require__(5624);\nvar define = __webpack_require__(4289);\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n\n\n/***/ }),\n\n/***/ 8987:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n\n\n/***/ }),\n\n/***/ 2215:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n\n\n/***/ }),\n\n/***/ 1414:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n\n\n/***/ }),\n\n/***/ 4236:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n\n\n/***/ }),\n\n/***/ 6069:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n\n\n/***/ }),\n\n/***/ 1619:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n\n\n/***/ }),\n\n/***/ 2869:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n\n\n/***/ }),\n\n/***/ 405:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils   = __webpack_require__(4236);\nvar trees   = __webpack_require__(342);\nvar adler32 = __webpack_require__(6069);\nvar crc32   = __webpack_require__(2869);\nvar msg     = __webpack_require__(8898);\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH      = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\nvar Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\n//var Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\n//var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\n//var Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED            = 1;\nvar Z_HUFFMAN_ONLY        = 2;\nvar Z_RLE                 = 3;\nvar Z_FIXED               = 4;\nvar Z_DEFAULT_STRATEGY    = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES       = 30;\n/* number of distance codes */\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE     = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n  var s = strm.state;\n\n  //_tr_flush_bits(s);\n  var len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n//  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;      /* max hash chain length */\n  var scan = s.strstart; /* current string */\n  var match;                       /* matched string */\n  var len;                           /* length of current match */\n  var best_len = s.prev_length;              /* best match length so far */\n  var nice_match = s.nice_match;             /* stop if match long enough */\n  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1  = _win[scan + best_len - 1];\n  var scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    var curr = s.strstart + s.lookahead;\n//    var init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n  var hash_head;        /* head of the hash chain */\n  var bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n  var hash_head;          /* head of hash chain */\n  var bflush;              /* set if current block must be flushed */\n\n  var max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n  var bflush;            /* set if current block must be flushed */\n  var prev;              /* byte at distance one to match */\n  var scan, strend;      /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n  var bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  trees._tr_init(s);\n  return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  var s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      var level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n\n\n/***/ }),\n\n/***/ 4264:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30;       /* got a data error -- remain here until reset */\nvar TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n  var _in;                    /* local strm.input */\n  var last;                   /* have enough input while in < last */\n  var _out;                   /* local strm.output */\n  var beg;                    /* inflate()'s initial strm.output */\n  var end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  var dmax;                   /* maximum distance from zlib header */\n//#endif\n  var wsize;                  /* window size or zero if not using window */\n  var whave;                  /* valid bytes in the window */\n  var wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  var s_window;               /* allocated sliding window, if wsize != 0 */\n  var hold;                   /* local strm.hold */\n  var bits;                   /* local strm.bits */\n  var lcode;                  /* local strm.lencode */\n  var dcode;                  /* local strm.distcode */\n  var lmask;                  /* mask for first level of length codes */\n  var dmask;                  /* mask for first level of distance codes */\n  var here;                   /* retrieved table entry */\n  var op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  var len;                    /* match length, unused bytes */\n  var dist;                   /* match distance */\n  var from;                   /* where to copy match from */\n  var from_source;\n\n\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n\n\n/***/ }),\n\n/***/ 7948:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils         = __webpack_require__(4236);\nvar adler32       = __webpack_require__(6069);\nvar crc32         = __webpack_require__(2869);\nvar inflate_fast  = __webpack_require__(4264);\nvar inflate_table = __webpack_require__(9241);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\nvar Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\nvar Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar    HEAD = 1;       /* i: waiting for magic header */\nvar    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nvar    TIME = 3;       /* i: waiting for modification time (gzip) */\nvar    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nvar    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nvar    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nvar    NAME = 7;       /* i: waiting for end of file name (gzip) */\nvar    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nvar    HCRC = 9;       /* i: waiting for header crc (gzip) */\nvar    DICTID = 10;    /* i: waiting for dictionary check value */\nvar    DICT = 11;      /* waiting for inflateSetDictionary() call */\nvar        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nvar        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nvar        STORED = 14;    /* i: waiting for stored size (length and complement) */\nvar        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nvar        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nvar        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nvar        LENLENS = 18;   /* i: waiting for code length code lengths */\nvar        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nvar            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nvar            LEN = 21;       /* i: waiting for length/lit/eob code */\nvar            LENEXT = 22;    /* i: waiting for length extra bits */\nvar            DIST = 23;      /* i: waiting for distance code */\nvar            DISTEXT = 24;   /* i: waiting for distance extra bits */\nvar            MATCH = 25;     /* o: waiting for output space to copy string */\nvar            LIT = 26;       /* o: waiting for output space to write literal */\nvar    CHECK = 27;     /* i: waiting for 32-bit check value */\nvar    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nvar    DONE = 29;      /* finished check, done -- remain here until reset */\nvar    BAD = 30;       /* got a data error -- remain here until reset */\nvar    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nvar    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n  this.work = new utils.Buf16(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new utils.Buf8(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output;          // input/output buffers\n  var next;                   /* next input INDEX */\n  var put;                    /* next output INDEX */\n  var have, left;             /* available input and output */\n  var hold;                   /* bit buffer */\n  var bits;                   /* bits in bit buffer */\n  var _in, _out;              /* save starting available input and output */\n  var copy;                   /* number of stored or match bytes to copy */\n  var from;                   /* where to copy match bytes from */\n  var from_source;\n  var here = 0;               /* current decoding table entry */\n  var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n  var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  var len;                    /* length to copy for repeats, bits to drop */\n  var ret;                    /* return code */\n  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */\n  var opts;\n\n  var n; // temporary var for NEED_BITS\n\n  var order = /* permutation of code lengths */\n    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n        state.dmax = 1 << len;\n        //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Array(state.head.extra_len);\n              }\n              utils.arraySet(\n                state.head.extra,\n                input,\n                next,\n                // extra field is limited to 65536 bytes\n                // - no need for additional size check\n                copy,\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          utils.arraySet(output, input, next, copy, put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       stored end\\n\"));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inflate_fast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  var state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var state;\n  var dictid;\n  var ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n\n\n/***/ }),\n\n/***/ 9241:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = __webpack_require__(4236);\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n  var bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  var len = 0;               /* a code's length in bits */\n  var sym = 0;               /* index of code symbols */\n  var min = 0, max = 0;          /* minimum and maximum code lengths */\n  var root = 0;              /* number of index bits for root table */\n  var curr = 0;              /* number of index bits for current table */\n  var drop = 0;              /* code bits to drop for sub-table */\n  var left = 0;                   /* number of prefix codes available */\n  var used = 0;              /* code entries in table used */\n  var huff = 0;              /* Huffman code */\n  var incr;              /* for incrementing code, index */\n  var fill;              /* index for replicating entries */\n  var low;               /* low bits for current root entry */\n  var mask;              /* mask for low root bits */\n  var next;             /* next available space in table */\n  var base = null;     /* base value table to use */\n  var base_index = 0;\n//  var shoextra;    /* extra bits table to use */\n  var end;                    /* use base and extra for symbol > end */\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  var extra = null;\n  var extra_index = 0;\n\n  var here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n\n\n/***/ }),\n\n/***/ 8898:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n\n/***/ }),\n\n/***/ 342:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = __webpack_require__(4236);\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\nvar Z_FIXED               = 4;\n//var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY              = 0;\nvar Z_TEXT                = 1;\n//var Z_ASCII             = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES    = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH    = 3;\nvar MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES       = 30;\n/* number of distance codes */\n\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK   = 256;\n/* end of block literal code */\n\nvar REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits =   /* extra bits for each length code */\n  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits =   /* extra bits for each distance code */\n  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits =  /* extra bits for each bit length code */\n  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n  var res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nfunction gen_bitlen(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree            = desc.dyn_tree;\n  var max_code        = desc.max_code;\n  var stree           = desc.stat_desc.static_tree;\n  var has_stree       = desc.stat_desc.has_stree;\n  var extra           = desc.stat_desc.extra_bits;\n  var base            = desc.stat_desc.extra_base;\n  var max_length      = desc.stat_desc.max_length;\n  var h;              /* heap index */\n  var n, m;           /* iterate over the tree elements */\n  var bits;           /* bit length */\n  var xbits;          /* extra bits */\n  var f;              /* frequency */\n  var overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  var code = 0;              /* running code value */\n  var bits;                  /* bit index */\n  var n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    var len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n  var n;        /* iterates over tree elements */\n  var bits;     /* bit counter */\n  var length;   /* length value */\n  var code;     /* code value */\n  var dist;     /* distance index */\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n  var n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n  var _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;           /* distance of matched string */\n  var lc;             /* match length or unmatched char (if dist == 0) */\n  var lx = 0;         /* running index in l_buf */\n  var code;           /* the code to send */\n  var extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree     = desc.dyn_tree;\n  var stree    = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems    = desc.stat_desc.elems;\n  var n, m;          /* iterate over heap elements */\n  var max_code = -1; /* largest code with non zero frequency */\n  var node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n  var max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  var max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init  = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block  = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n\n\n/***/ }),\n\n/***/ 2292:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n\n\n/***/ }),\n\n/***/ 4155:\n/***/ (function(module) {\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ }),\n\n/***/ 3697:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar functionsHaveConfigurableNames = (__webpack_require__(5972).functionsHaveConfigurableNames)();\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.hasIndices) {\n\t\tresult += 'd';\n\t}\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n\nif (functionsHaveConfigurableNames && Object.defineProperty) {\n\tObject.defineProperty(module.exports, \"name\", ({ value: 'get flags' }));\n}\n\n\n/***/ }),\n\n/***/ 2847:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(getPolyfill());\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n\n\n/***/ }),\n\n/***/ 1721:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = (__webpack_require__(4289).supportsDescriptors);\nvar $gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function getPolyfill() {\n\tif (supportsDescriptors && (/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (\n\t\t\tdescriptor\n\t\t\t&& typeof descriptor.get === 'function'\n\t\t\t&& typeof RegExp.prototype.dotAll === 'boolean'\n\t\t\t&& typeof RegExp.prototype.hasIndices === 'boolean'\n\t\t) {\n\t\t\t/* eslint getter-return: 0 */\n\t\t\tvar calls = '';\n\t\t\tvar o = {};\n\t\t\tObject.defineProperty(o, 'hasIndices', {\n\t\t\t\tget: function () {\n\t\t\t\t\tcalls += 'd';\n\t\t\t\t}\n\t\t\t});\n\t\t\tObject.defineProperty(o, 'sticky', {\n\t\t\t\tget: function () {\n\t\t\t\t\tcalls += 'y';\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (calls === 'dy') {\n\t\t\t\treturn descriptor.get;\n\t\t\t}\n\t\t}\n\t}\n\treturn implementation;\n};\n\n\n/***/ }),\n\n/***/ 2753:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar supportsDescriptors = (__webpack_require__(4289).supportsDescriptors);\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n\n\n/***/ }),\n\n/***/ 6099:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n;(function (sax) { // wrapper for non-node envs\n  sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }\n  sax.SAXParser = SAXParser\n  sax.SAXStream = SAXStream\n  sax.createStream = createStream\n\n  // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n  // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n  // since that's the earliest that a buffer overrun could occur.  This way, checks are\n  // as rare as required, but as often as necessary to ensure never crossing this bound.\n  // Furthermore, buffers are only tested at most once per write(), so passing a very\n  // large string into write() might have undesirable effects, but this is manageable by\n  // the caller, so it is assumed to be safe.  Thus, a call to write() may, in the extreme\n  // edge case, result in creating at most one complete copy of the string passed in.\n  // Set to Infinity to have unlimited buffers.\n  sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n  var buffers = [\n    'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',\n    'procInstName', 'procInstBody', 'entity', 'attribName',\n    'attribValue', 'cdata', 'script'\n  ]\n\n  sax.EVENTS = [\n    'text',\n    'processinginstruction',\n    'sgmldeclaration',\n    'doctype',\n    'comment',\n    'opentagstart',\n    'attribute',\n    'opentag',\n    'closetag',\n    'opencdata',\n    'cdata',\n    'closecdata',\n    'error',\n    'end',\n    'ready',\n    'script',\n    'opennamespace',\n    'closenamespace'\n  ]\n\n  function SAXParser (strict, opt) {\n    if (!(this instanceof SAXParser)) {\n      return new SAXParser(strict, opt)\n    }\n\n    var parser = this\n    clearBuffers(parser)\n    parser.q = parser.c = ''\n    parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n    parser.opt = opt || {}\n    parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n    parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n    parser.tags = []\n    parser.closed = parser.closedRoot = parser.sawRoot = false\n    parser.tag = parser.error = null\n    parser.strict = !!strict\n    parser.noscript = !!(strict || parser.opt.noscript)\n    parser.state = S.BEGIN\n    parser.strictEntities = parser.opt.strictEntities\n    parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)\n    parser.attribList = []\n\n    // namespaces form a prototype chain.\n    // it always points at the current tag,\n    // which protos to its parent tag.\n    if (parser.opt.xmlns) {\n      parser.ns = Object.create(rootNS)\n    }\n\n    // mostly just for error reporting\n    parser.trackPosition = parser.opt.position !== false\n    if (parser.trackPosition) {\n      parser.position = parser.line = parser.column = 0\n    }\n    emit(parser, 'onready')\n  }\n\n  if (!Object.create) {\n    Object.create = function (o) {\n      function F () {}\n      F.prototype = o\n      var newf = new F()\n      return newf\n    }\n  }\n\n  if (!Object.keys) {\n    Object.keys = function (o) {\n      var a = []\n      for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n      return a\n    }\n  }\n\n  function checkBufferLength (parser) {\n    var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n    var maxActual = 0\n    for (var i = 0, l = buffers.length; i < l; i++) {\n      var len = parser[buffers[i]].length\n      if (len > maxAllowed) {\n        // Text/cdata nodes can get big, and since they're buffered,\n        // we can get here under normal conditions.\n        // Avoid issues by emitting the text node now,\n        // so at least it won't get any bigger.\n        switch (buffers[i]) {\n          case 'textNode':\n            closeText(parser)\n            break\n\n          case 'cdata':\n            emitNode(parser, 'oncdata', parser.cdata)\n            parser.cdata = ''\n            break\n\n          case 'script':\n            emitNode(parser, 'onscript', parser.script)\n            parser.script = ''\n            break\n\n          default:\n            error(parser, 'Max buffer length exceeded: ' + buffers[i])\n        }\n      }\n      maxActual = Math.max(maxActual, len)\n    }\n    // schedule the next check for the earliest possible buffer overrun.\n    var m = sax.MAX_BUFFER_LENGTH - maxActual\n    parser.bufferCheckPosition = m + parser.position\n  }\n\n  function clearBuffers (parser) {\n    for (var i = 0, l = buffers.length; i < l; i++) {\n      parser[buffers[i]] = ''\n    }\n  }\n\n  function flushBuffers (parser) {\n    closeText(parser)\n    if (parser.cdata !== '') {\n      emitNode(parser, 'oncdata', parser.cdata)\n      parser.cdata = ''\n    }\n    if (parser.script !== '') {\n      emitNode(parser, 'onscript', parser.script)\n      parser.script = ''\n    }\n  }\n\n  SAXParser.prototype = {\n    end: function () { end(this) },\n    write: write,\n    resume: function () { this.error = null; return this },\n    close: function () { return this.write(null) },\n    flush: function () { flushBuffers(this) }\n  }\n\n  var Stream\n  try {\n    Stream = (__webpack_require__(2830).Stream)\n  } catch (ex) {\n    Stream = function () {}\n  }\n\n  var streamWraps = sax.EVENTS.filter(function (ev) {\n    return ev !== 'error' && ev !== 'end'\n  })\n\n  function createStream (strict, opt) {\n    return new SAXStream(strict, opt)\n  }\n\n  function SAXStream (strict, opt) {\n    if (!(this instanceof SAXStream)) {\n      return new SAXStream(strict, opt)\n    }\n\n    Stream.apply(this)\n\n    this._parser = new SAXParser(strict, opt)\n    this.writable = true\n    this.readable = true\n\n    var me = this\n\n    this._parser.onend = function () {\n      me.emit('end')\n    }\n\n    this._parser.onerror = function (er) {\n      me.emit('error', er)\n\n      // if didn't throw, then means error was handled.\n      // go ahead and clear error, so we can write again.\n      me._parser.error = null\n    }\n\n    this._decoder = null\n\n    streamWraps.forEach(function (ev) {\n      Object.defineProperty(me, 'on' + ev, {\n        get: function () {\n          return me._parser['on' + ev]\n        },\n        set: function (h) {\n          if (!h) {\n            me.removeAllListeners(ev)\n            me._parser['on' + ev] = h\n            return h\n          }\n          me.on(ev, h)\n        },\n        enumerable: true,\n        configurable: false\n      })\n    })\n  }\n\n  SAXStream.prototype = Object.create(Stream.prototype, {\n    constructor: {\n      value: SAXStream\n    }\n  })\n\n  SAXStream.prototype.write = function (data) {\n    if (typeof Buffer === 'function' &&\n      typeof Buffer.isBuffer === 'function' &&\n      Buffer.isBuffer(data)) {\n      if (!this._decoder) {\n        var SD = (__webpack_require__(2553)/* .StringDecoder */ .s)\n        this._decoder = new SD('utf8')\n      }\n      data = this._decoder.write(data)\n    }\n\n    this._parser.write(data.toString())\n    this.emit('data', data)\n    return true\n  }\n\n  SAXStream.prototype.end = function (chunk) {\n    if (chunk && chunk.length) {\n      this.write(chunk)\n    }\n    this._parser.end()\n    return true\n  }\n\n  SAXStream.prototype.on = function (ev, handler) {\n    var me = this\n    if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n      me._parser['on' + ev] = function () {\n        var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)\n        args.splice(0, 0, ev)\n        me.emit.apply(me, args)\n      }\n    }\n\n    return Stream.prototype.on.call(me, ev, handler)\n  }\n\n  // this really needs to be replaced with character classes.\n  // XML allows all manner of ridiculous numbers and digits.\n  var CDATA = '[CDATA['\n  var DOCTYPE = 'DOCTYPE'\n  var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n  var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n  var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n  // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n  // This implementation works on strings, a single character at a time\n  // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n  // without a significant breaking change to either this  parser, or the\n  // JavaScript language.  Implementation of an emoji-capable xml parser\n  // is left as an exercise for the reader.\n  var nameStart = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n  var nameBody = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n  var entityStart = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n  var entityBody = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n  function isWhitespace (c) {\n    return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n  }\n\n  function isQuote (c) {\n    return c === '\"' || c === '\\''\n  }\n\n  function isAttribEnd (c) {\n    return c === '>' || isWhitespace(c)\n  }\n\n  function isMatch (regex, c) {\n    return regex.test(c)\n  }\n\n  function notMatch (regex, c) {\n    return !isMatch(regex, c)\n  }\n\n  var S = 0\n  sax.STATE = {\n    BEGIN: S++, // leading byte order mark or whitespace\n    BEGIN_WHITESPACE: S++, // leading whitespace\n    TEXT: S++, // general stuff\n    TEXT_ENTITY: S++, // &amp and such.\n    OPEN_WAKA: S++, // <\n    SGML_DECL: S++, // <!BLARG\n    SGML_DECL_QUOTED: S++, // <!BLARG foo \"bar\n    DOCTYPE: S++, // <!DOCTYPE\n    DOCTYPE_QUOTED: S++, // <!DOCTYPE \"//blah\n    DOCTYPE_DTD: S++, // <!DOCTYPE \"//blah\" [ ...\n    DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \"//blah\" [ \"foo\n    COMMENT_STARTING: S++, // <!-\n    COMMENT: S++, // <!--\n    COMMENT_ENDING: S++, // <!-- blah -\n    COMMENT_ENDED: S++, // <!-- blah --\n    CDATA: S++, // <![CDATA[ something\n    CDATA_ENDING: S++, // ]\n    CDATA_ENDING_2: S++, // ]]\n    PROC_INST: S++, // <?hi\n    PROC_INST_BODY: S++, // <?hi there\n    PROC_INST_ENDING: S++, // <?hi \"there\" ?\n    OPEN_TAG: S++, // <strong\n    OPEN_TAG_SLASH: S++, // <strong /\n    ATTRIB: S++, // <a\n    ATTRIB_NAME: S++, // <a foo\n    ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\n    ATTRIB_VALUE: S++, // <a foo=\n    ATTRIB_VALUE_QUOTED: S++, // <a foo=\"bar\n    ATTRIB_VALUE_CLOSED: S++, // <a foo=\"bar\"\n    ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\n    ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\"&quot;\"\n    ATTRIB_VALUE_ENTITY_U: S++, // <foo bar=&quot\n    CLOSE_TAG: S++, // </a\n    CLOSE_TAG_SAW_WHITE: S++, // </a   >\n    SCRIPT: S++, // <script> ...\n    SCRIPT_ENDING: S++ // <script> ... <\n  }\n\n  sax.XML_ENTITIES = {\n    'amp': '&',\n    'gt': '>',\n    'lt': '<',\n    'quot': '\"',\n    'apos': \"'\"\n  }\n\n  sax.ENTITIES = {\n    'amp': '&',\n    'gt': '>',\n    'lt': '<',\n    'quot': '\"',\n    'apos': \"'\",\n    'AElig': 198,\n    'Aacute': 193,\n    'Acirc': 194,\n    'Agrave': 192,\n    'Aring': 197,\n    'Atilde': 195,\n    'Auml': 196,\n    'Ccedil': 199,\n    'ETH': 208,\n    'Eacute': 201,\n    'Ecirc': 202,\n    'Egrave': 200,\n    'Euml': 203,\n    'Iacute': 205,\n    'Icirc': 206,\n    'Igrave': 204,\n    'Iuml': 207,\n    'Ntilde': 209,\n    'Oacute': 211,\n    'Ocirc': 212,\n    'Ograve': 210,\n    'Oslash': 216,\n    'Otilde': 213,\n    'Ouml': 214,\n    'THORN': 222,\n    'Uacute': 218,\n    'Ucirc': 219,\n    'Ugrave': 217,\n    'Uuml': 220,\n    'Yacute': 221,\n    'aacute': 225,\n    'acirc': 226,\n    'aelig': 230,\n    'agrave': 224,\n    'aring': 229,\n    'atilde': 227,\n    'auml': 228,\n    'ccedil': 231,\n    'eacute': 233,\n    'ecirc': 234,\n    'egrave': 232,\n    'eth': 240,\n    'euml': 235,\n    'iacute': 237,\n    'icirc': 238,\n    'igrave': 236,\n    'iuml': 239,\n    'ntilde': 241,\n    'oacute': 243,\n    'ocirc': 244,\n    'ograve': 242,\n    'oslash': 248,\n    'otilde': 245,\n    'ouml': 246,\n    'szlig': 223,\n    'thorn': 254,\n    'uacute': 250,\n    'ucirc': 251,\n    'ugrave': 249,\n    'uuml': 252,\n    'yacute': 253,\n    'yuml': 255,\n    'copy': 169,\n    'reg': 174,\n    'nbsp': 160,\n    'iexcl': 161,\n    'cent': 162,\n    'pound': 163,\n    'curren': 164,\n    'yen': 165,\n    'brvbar': 166,\n    'sect': 167,\n    'uml': 168,\n    'ordf': 170,\n    'laquo': 171,\n    'not': 172,\n    'shy': 173,\n    'macr': 175,\n    'deg': 176,\n    'plusmn': 177,\n    'sup1': 185,\n    'sup2': 178,\n    'sup3': 179,\n    'acute': 180,\n    'micro': 181,\n    'para': 182,\n    'middot': 183,\n    'cedil': 184,\n    'ordm': 186,\n    'raquo': 187,\n    'frac14': 188,\n    'frac12': 189,\n    'frac34': 190,\n    'iquest': 191,\n    'times': 215,\n    'divide': 247,\n    'OElig': 338,\n    'oelig': 339,\n    'Scaron': 352,\n    'scaron': 353,\n    'Yuml': 376,\n    'fnof': 402,\n    'circ': 710,\n    'tilde': 732,\n    'Alpha': 913,\n    'Beta': 914,\n    'Gamma': 915,\n    'Delta': 916,\n    'Epsilon': 917,\n    'Zeta': 918,\n    'Eta': 919,\n    'Theta': 920,\n    'Iota': 921,\n    'Kappa': 922,\n    'Lambda': 923,\n    'Mu': 924,\n    'Nu': 925,\n    'Xi': 926,\n    'Omicron': 927,\n    'Pi': 928,\n    'Rho': 929,\n    'Sigma': 931,\n    'Tau': 932,\n    'Upsilon': 933,\n    'Phi': 934,\n    'Chi': 935,\n    'Psi': 936,\n    'Omega': 937,\n    'alpha': 945,\n    'beta': 946,\n    'gamma': 947,\n    'delta': 948,\n    'epsilon': 949,\n    'zeta': 950,\n    'eta': 951,\n    'theta': 952,\n    'iota': 953,\n    'kappa': 954,\n    'lambda': 955,\n    'mu': 956,\n    'nu': 957,\n    'xi': 958,\n    'omicron': 959,\n    'pi': 960,\n    'rho': 961,\n    'sigmaf': 962,\n    'sigma': 963,\n    'tau': 964,\n    'upsilon': 965,\n    'phi': 966,\n    'chi': 967,\n    'psi': 968,\n    'omega': 969,\n    'thetasym': 977,\n    'upsih': 978,\n    'piv': 982,\n    'ensp': 8194,\n    'emsp': 8195,\n    'thinsp': 8201,\n    'zwnj': 8204,\n    'zwj': 8205,\n    'lrm': 8206,\n    'rlm': 8207,\n    'ndash': 8211,\n    'mdash': 8212,\n    'lsquo': 8216,\n    'rsquo': 8217,\n    'sbquo': 8218,\n    'ldquo': 8220,\n    'rdquo': 8221,\n    'bdquo': 8222,\n    'dagger': 8224,\n    'Dagger': 8225,\n    'bull': 8226,\n    'hellip': 8230,\n    'permil': 8240,\n    'prime': 8242,\n    'Prime': 8243,\n    'lsaquo': 8249,\n    'rsaquo': 8250,\n    'oline': 8254,\n    'frasl': 8260,\n    'euro': 8364,\n    'image': 8465,\n    'weierp': 8472,\n    'real': 8476,\n    'trade': 8482,\n    'alefsym': 8501,\n    'larr': 8592,\n    'uarr': 8593,\n    'rarr': 8594,\n    'darr': 8595,\n    'harr': 8596,\n    'crarr': 8629,\n    'lArr': 8656,\n    'uArr': 8657,\n    'rArr': 8658,\n    'dArr': 8659,\n    'hArr': 8660,\n    'forall': 8704,\n    'part': 8706,\n    'exist': 8707,\n    'empty': 8709,\n    'nabla': 8711,\n    'isin': 8712,\n    'notin': 8713,\n    'ni': 8715,\n    'prod': 8719,\n    'sum': 8721,\n    'minus': 8722,\n    'lowast': 8727,\n    'radic': 8730,\n    'prop': 8733,\n    'infin': 8734,\n    'ang': 8736,\n    'and': 8743,\n    'or': 8744,\n    'cap': 8745,\n    'cup': 8746,\n    'int': 8747,\n    'there4': 8756,\n    'sim': 8764,\n    'cong': 8773,\n    'asymp': 8776,\n    'ne': 8800,\n    'equiv': 8801,\n    'le': 8804,\n    'ge': 8805,\n    'sub': 8834,\n    'sup': 8835,\n    'nsub': 8836,\n    'sube': 8838,\n    'supe': 8839,\n    'oplus': 8853,\n    'otimes': 8855,\n    'perp': 8869,\n    'sdot': 8901,\n    'lceil': 8968,\n    'rceil': 8969,\n    'lfloor': 8970,\n    'rfloor': 8971,\n    'lang': 9001,\n    'rang': 9002,\n    'loz': 9674,\n    'spades': 9824,\n    'clubs': 9827,\n    'hearts': 9829,\n    'diams': 9830\n  }\n\n  Object.keys(sax.ENTITIES).forEach(function (key) {\n    var e = sax.ENTITIES[key]\n    var s = typeof e === 'number' ? String.fromCharCode(e) : e\n    sax.ENTITIES[key] = s\n  })\n\n  for (var s in sax.STATE) {\n    sax.STATE[sax.STATE[s]] = s\n  }\n\n  // shorthand\n  S = sax.STATE\n\n  function emit (parser, event, data) {\n    parser[event] && parser[event](data)\n  }\n\n  function emitNode (parser, nodeType, data) {\n    if (parser.textNode) closeText(parser)\n    emit(parser, nodeType, data)\n  }\n\n  function closeText (parser) {\n    parser.textNode = textopts(parser.opt, parser.textNode)\n    if (parser.textNode) emit(parser, 'ontext', parser.textNode)\n    parser.textNode = ''\n  }\n\n  function textopts (opt, text) {\n    if (opt.trim) text = text.trim()\n    if (opt.normalize) text = text.replace(/\\s+/g, ' ')\n    return text\n  }\n\n  function error (parser, er) {\n    closeText(parser)\n    if (parser.trackPosition) {\n      er += '\\nLine: ' + parser.line +\n        '\\nColumn: ' + parser.column +\n        '\\nChar: ' + parser.c\n    }\n    er = new Error(er)\n    parser.error = er\n    emit(parser, 'onerror', er)\n    return parser\n  }\n\n  function end (parser) {\n    if (parser.sawRoot && !parser.closedRoot) strictFail(parser, 'Unclosed root tag')\n    if ((parser.state !== S.BEGIN) &&\n      (parser.state !== S.BEGIN_WHITESPACE) &&\n      (parser.state !== S.TEXT)) {\n      error(parser, 'Unexpected end')\n    }\n    closeText(parser)\n    parser.c = ''\n    parser.closed = true\n    emit(parser, 'onend')\n    SAXParser.call(parser, parser.strict, parser.opt)\n    return parser\n  }\n\n  function strictFail (parser, message) {\n    if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {\n      throw new Error('bad call to strictFail')\n    }\n    if (parser.strict) {\n      error(parser, message)\n    }\n  }\n\n  function newTag (parser) {\n    if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()\n    var parent = parser.tags[parser.tags.length - 1] || parser\n    var tag = parser.tag = { name: parser.tagName, attributes: {} }\n\n    // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n    if (parser.opt.xmlns) {\n      tag.ns = parent.ns\n    }\n    parser.attribList.length = 0\n    emitNode(parser, 'onopentagstart', tag)\n  }\n\n  function qname (name, attribute) {\n    var i = name.indexOf(':')\n    var qualName = i < 0 ? [ '', name ] : name.split(':')\n    var prefix = qualName[0]\n    var local = qualName[1]\n\n    // <x \"xmlns\"=\"http://foo\">\n    if (attribute && name === 'xmlns') {\n      prefix = 'xmlns'\n      local = ''\n    }\n\n    return { prefix: prefix, local: local }\n  }\n\n  function attrib (parser) {\n    if (!parser.strict) {\n      parser.attribName = parser.attribName[parser.looseCase]()\n    }\n\n    if (parser.attribList.indexOf(parser.attribName) !== -1 ||\n      parser.tag.attributes.hasOwnProperty(parser.attribName)) {\n      parser.attribName = parser.attribValue = ''\n      return\n    }\n\n    if (parser.opt.xmlns) {\n      var qn = qname(parser.attribName, true)\n      var prefix = qn.prefix\n      var local = qn.local\n\n      if (prefix === 'xmlns') {\n        // namespace binding attribute. push the binding into scope\n        if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {\n          strictFail(parser,\n            'xml: prefix must be bound to ' + XML_NAMESPACE + '\\n' +\n            'Actual: ' + parser.attribValue)\n        } else if (local === 'xmlns' && parser.attribValue !== XMLNS_NAMESPACE) {\n          strictFail(parser,\n            'xmlns: prefix must be bound to ' + XMLNS_NAMESPACE + '\\n' +\n            'Actual: ' + parser.attribValue)\n        } else {\n          var tag = parser.tag\n          var parent = parser.tags[parser.tags.length - 1] || parser\n          if (tag.ns === parent.ns) {\n            tag.ns = Object.create(parent.ns)\n          }\n          tag.ns[local] = parser.attribValue\n        }\n      }\n\n      // defer onattribute events until all attributes have been seen\n      // so any new bindings can take effect. preserve attribute order\n      // so deferred events can be emitted in document order\n      parser.attribList.push([parser.attribName, parser.attribValue])\n    } else {\n      // in non-xmlns mode, we can emit the event right away\n      parser.tag.attributes[parser.attribName] = parser.attribValue\n      emitNode(parser, 'onattribute', {\n        name: parser.attribName,\n        value: parser.attribValue\n      })\n    }\n\n    parser.attribName = parser.attribValue = ''\n  }\n\n  function openTag (parser, selfClosing) {\n    if (parser.opt.xmlns) {\n      // emit namespace binding events\n      var tag = parser.tag\n\n      // add namespace info to tag\n      var qn = qname(parser.tagName)\n      tag.prefix = qn.prefix\n      tag.local = qn.local\n      tag.uri = tag.ns[qn.prefix] || ''\n\n      if (tag.prefix && !tag.uri) {\n        strictFail(parser, 'Unbound namespace prefix: ' +\n          JSON.stringify(parser.tagName))\n        tag.uri = qn.prefix\n      }\n\n      var parent = parser.tags[parser.tags.length - 1] || parser\n      if (tag.ns && parent.ns !== tag.ns) {\n        Object.keys(tag.ns).forEach(function (p) {\n          emitNode(parser, 'onopennamespace', {\n            prefix: p,\n            uri: tag.ns[p]\n          })\n        })\n      }\n\n      // handle deferred onattribute events\n      // Note: do not apply default ns to attributes:\n      //   http://www.w3.org/TR/REC-xml-names/#defaulting\n      for (var i = 0, l = parser.attribList.length; i < l; i++) {\n        var nv = parser.attribList[i]\n        var name = nv[0]\n        var value = nv[1]\n        var qualName = qname(name, true)\n        var prefix = qualName.prefix\n        var local = qualName.local\n        var uri = prefix === '' ? '' : (tag.ns[prefix] || '')\n        var a = {\n          name: name,\n          value: value,\n          prefix: prefix,\n          local: local,\n          uri: uri\n        }\n\n        // if there's any attributes with an undefined namespace,\n        // then fail on them now.\n        if (prefix && prefix !== 'xmlns' && !uri) {\n          strictFail(parser, 'Unbound namespace prefix: ' +\n            JSON.stringify(prefix))\n          a.uri = prefix\n        }\n        parser.tag.attributes[name] = a\n        emitNode(parser, 'onattribute', a)\n      }\n      parser.attribList.length = 0\n    }\n\n    parser.tag.isSelfClosing = !!selfClosing\n\n    // process the tag\n    parser.sawRoot = true\n    parser.tags.push(parser.tag)\n    emitNode(parser, 'onopentag', parser.tag)\n    if (!selfClosing) {\n      // special case for <script> in non-strict mode.\n      if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {\n        parser.state = S.SCRIPT\n      } else {\n        parser.state = S.TEXT\n      }\n      parser.tag = null\n      parser.tagName = ''\n    }\n    parser.attribName = parser.attribValue = ''\n    parser.attribList.length = 0\n  }\n\n  function closeTag (parser) {\n    if (!parser.tagName) {\n      strictFail(parser, 'Weird empty close tag.')\n      parser.textNode += '</>'\n      parser.state = S.TEXT\n      return\n    }\n\n    if (parser.script) {\n      if (parser.tagName !== 'script') {\n        parser.script += '</' + parser.tagName + '>'\n        parser.tagName = ''\n        parser.state = S.SCRIPT\n        return\n      }\n      emitNode(parser, 'onscript', parser.script)\n      parser.script = ''\n    }\n\n    // first make sure that the closing tag actually exists.\n    // <a><b></c></b></a> will close everything, otherwise.\n    var t = parser.tags.length\n    var tagName = parser.tagName\n    if (!parser.strict) {\n      tagName = tagName[parser.looseCase]()\n    }\n    var closeTo = tagName\n    while (t--) {\n      var close = parser.tags[t]\n      if (close.name !== closeTo) {\n        // fail the first time in strict mode\n        strictFail(parser, 'Unexpected close tag')\n      } else {\n        break\n      }\n    }\n\n    // didn't find it.  we already failed for strict, so just abort.\n    if (t < 0) {\n      strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)\n      parser.textNode += '</' + parser.tagName + '>'\n      parser.state = S.TEXT\n      return\n    }\n    parser.tagName = tagName\n    var s = parser.tags.length\n    while (s-- > t) {\n      var tag = parser.tag = parser.tags.pop()\n      parser.tagName = parser.tag.name\n      emitNode(parser, 'onclosetag', parser.tagName)\n\n      var x = {}\n      for (var i in tag.ns) {\n        x[i] = tag.ns[i]\n      }\n\n      var parent = parser.tags[parser.tags.length - 1] || parser\n      if (parser.opt.xmlns && tag.ns !== parent.ns) {\n        // remove namespace bindings introduced by tag\n        Object.keys(tag.ns).forEach(function (p) {\n          var n = tag.ns[p]\n          emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })\n        })\n      }\n    }\n    if (t === 0) parser.closedRoot = true\n    parser.tagName = parser.attribValue = parser.attribName = ''\n    parser.attribList.length = 0\n    parser.state = S.TEXT\n  }\n\n  function parseEntity (parser) {\n    var entity = parser.entity\n    var entityLC = entity.toLowerCase()\n    var num\n    var numStr = ''\n\n    if (parser.ENTITIES[entity]) {\n      return parser.ENTITIES[entity]\n    }\n    if (parser.ENTITIES[entityLC]) {\n      return parser.ENTITIES[entityLC]\n    }\n    entity = entityLC\n    if (entity.charAt(0) === '#') {\n      if (entity.charAt(1) === 'x') {\n        entity = entity.slice(2)\n        num = parseInt(entity, 16)\n        numStr = num.toString(16)\n      } else {\n        entity = entity.slice(1)\n        num = parseInt(entity, 10)\n        numStr = num.toString(10)\n      }\n    }\n    entity = entity.replace(/^0+/, '')\n    if (isNaN(num) || numStr.toLowerCase() !== entity) {\n      strictFail(parser, 'Invalid character entity')\n      return '&' + parser.entity + ';'\n    }\n\n    return String.fromCodePoint(num)\n  }\n\n  function beginWhiteSpace (parser, c) {\n    if (c === '<') {\n      parser.state = S.OPEN_WAKA\n      parser.startTagPosition = parser.position\n    } else if (!isWhitespace(c)) {\n      // have to process this as a text node.\n      // weird, but happens.\n      strictFail(parser, 'Non-whitespace before first tag.')\n      parser.textNode = c\n      parser.state = S.TEXT\n    }\n  }\n\n  function charAt (chunk, i) {\n    var result = ''\n    if (i < chunk.length) {\n      result = chunk.charAt(i)\n    }\n    return result\n  }\n\n  function write (chunk) {\n    var parser = this\n    if (this.error) {\n      throw this.error\n    }\n    if (parser.closed) {\n      return error(parser,\n        'Cannot write after close. Assign an onready handler.')\n    }\n    if (chunk === null) {\n      return end(parser)\n    }\n    if (typeof chunk === 'object') {\n      chunk = chunk.toString()\n    }\n    var i = 0\n    var c = ''\n    while (true) {\n      c = charAt(chunk, i++)\n      parser.c = c\n\n      if (!c) {\n        break\n      }\n\n      if (parser.trackPosition) {\n        parser.position++\n        if (c === '\\n') {\n          parser.line++\n          parser.column = 0\n        } else {\n          parser.column++\n        }\n      }\n\n      switch (parser.state) {\n        case S.BEGIN:\n          parser.state = S.BEGIN_WHITESPACE\n          if (c === '\\uFEFF') {\n            continue\n          }\n          beginWhiteSpace(parser, c)\n          continue\n\n        case S.BEGIN_WHITESPACE:\n          beginWhiteSpace(parser, c)\n          continue\n\n        case S.TEXT:\n          if (parser.sawRoot && !parser.closedRoot) {\n            var starti = i - 1\n            while (c && c !== '<' && c !== '&') {\n              c = charAt(chunk, i++)\n              if (c && parser.trackPosition) {\n                parser.position++\n                if (c === '\\n') {\n                  parser.line++\n                  parser.column = 0\n                } else {\n                  parser.column++\n                }\n              }\n            }\n            parser.textNode += chunk.substring(starti, i - 1)\n          }\n          if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {\n            parser.state = S.OPEN_WAKA\n            parser.startTagPosition = parser.position\n          } else {\n            if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {\n              strictFail(parser, 'Text data outside of root node.')\n            }\n            if (c === '&') {\n              parser.state = S.TEXT_ENTITY\n            } else {\n              parser.textNode += c\n            }\n          }\n          continue\n\n        case S.SCRIPT:\n          // only non-strict\n          if (c === '<') {\n            parser.state = S.SCRIPT_ENDING\n          } else {\n            parser.script += c\n          }\n          continue\n\n        case S.SCRIPT_ENDING:\n          if (c === '/') {\n            parser.state = S.CLOSE_TAG\n          } else {\n            parser.script += '<' + c\n            parser.state = S.SCRIPT\n          }\n          continue\n\n        case S.OPEN_WAKA:\n          // either a /, ?, !, or text is coming next.\n          if (c === '!') {\n            parser.state = S.SGML_DECL\n            parser.sgmlDecl = ''\n          } else if (isWhitespace(c)) {\n            // wait for it...\n          } else if (isMatch(nameStart, c)) {\n            parser.state = S.OPEN_TAG\n            parser.tagName = c\n          } else if (c === '/') {\n            parser.state = S.CLOSE_TAG\n            parser.tagName = ''\n          } else if (c === '?') {\n            parser.state = S.PROC_INST\n            parser.procInstName = parser.procInstBody = ''\n          } else {\n            strictFail(parser, 'Unencoded <')\n            // if there was some whitespace, then add that in.\n            if (parser.startTagPosition + 1 < parser.position) {\n              var pad = parser.position - parser.startTagPosition\n              c = new Array(pad).join(' ') + c\n            }\n            parser.textNode += '<' + c\n            parser.state = S.TEXT\n          }\n          continue\n\n        case S.SGML_DECL:\n          if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n            emitNode(parser, 'onopencdata')\n            parser.state = S.CDATA\n            parser.sgmlDecl = ''\n            parser.cdata = ''\n          } else if (parser.sgmlDecl + c === '--') {\n            parser.state = S.COMMENT\n            parser.comment = ''\n            parser.sgmlDecl = ''\n          } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n            parser.state = S.DOCTYPE\n            if (parser.doctype || parser.sawRoot) {\n              strictFail(parser,\n                'Inappropriately located doctype declaration')\n            }\n            parser.doctype = ''\n            parser.sgmlDecl = ''\n          } else if (c === '>') {\n            emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)\n            parser.sgmlDecl = ''\n            parser.state = S.TEXT\n          } else if (isQuote(c)) {\n            parser.state = S.SGML_DECL_QUOTED\n            parser.sgmlDecl += c\n          } else {\n            parser.sgmlDecl += c\n          }\n          continue\n\n        case S.SGML_DECL_QUOTED:\n          if (c === parser.q) {\n            parser.state = S.SGML_DECL\n            parser.q = ''\n          }\n          parser.sgmlDecl += c\n          continue\n\n        case S.DOCTYPE:\n          if (c === '>') {\n            parser.state = S.TEXT\n            emitNode(parser, 'ondoctype', parser.doctype)\n            parser.doctype = true // just remember that we saw it.\n          } else {\n            parser.doctype += c\n            if (c === '[') {\n              parser.state = S.DOCTYPE_DTD\n            } else if (isQuote(c)) {\n              parser.state = S.DOCTYPE_QUOTED\n              parser.q = c\n            }\n          }\n          continue\n\n        case S.DOCTYPE_QUOTED:\n          parser.doctype += c\n          if (c === parser.q) {\n            parser.q = ''\n            parser.state = S.DOCTYPE\n          }\n          continue\n\n        case S.DOCTYPE_DTD:\n          parser.doctype += c\n          if (c === ']') {\n            parser.state = S.DOCTYPE\n          } else if (isQuote(c)) {\n            parser.state = S.DOCTYPE_DTD_QUOTED\n            parser.q = c\n          }\n          continue\n\n        case S.DOCTYPE_DTD_QUOTED:\n          parser.doctype += c\n          if (c === parser.q) {\n            parser.state = S.DOCTYPE_DTD\n            parser.q = ''\n          }\n          continue\n\n        case S.COMMENT:\n          if (c === '-') {\n            parser.state = S.COMMENT_ENDING\n          } else {\n            parser.comment += c\n          }\n          continue\n\n        case S.COMMENT_ENDING:\n          if (c === '-') {\n            parser.state = S.COMMENT_ENDED\n            parser.comment = textopts(parser.opt, parser.comment)\n            if (parser.comment) {\n              emitNode(parser, 'oncomment', parser.comment)\n            }\n            parser.comment = ''\n          } else {\n            parser.comment += '-' + c\n            parser.state = S.COMMENT\n          }\n          continue\n\n        case S.COMMENT_ENDED:\n          if (c !== '>') {\n            strictFail(parser, 'Malformed comment')\n            // allow <!-- blah -- bloo --> in non-strict mode,\n            // which is a comment of \" blah -- bloo \"\n            parser.comment += '--' + c\n            parser.state = S.COMMENT\n          } else {\n            parser.state = S.TEXT\n          }\n          continue\n\n        case S.CDATA:\n          if (c === ']') {\n            parser.state = S.CDATA_ENDING\n          } else {\n            parser.cdata += c\n          }\n          continue\n\n        case S.CDATA_ENDING:\n          if (c === ']') {\n            parser.state = S.CDATA_ENDING_2\n          } else {\n            parser.cdata += ']' + c\n            parser.state = S.CDATA\n          }\n          continue\n\n        case S.CDATA_ENDING_2:\n          if (c === '>') {\n            if (parser.cdata) {\n              emitNode(parser, 'oncdata', parser.cdata)\n            }\n            emitNode(parser, 'onclosecdata')\n            parser.cdata = ''\n            parser.state = S.TEXT\n          } else if (c === ']') {\n            parser.cdata += ']'\n          } else {\n            parser.cdata += ']]' + c\n            parser.state = S.CDATA\n          }\n          continue\n\n        case S.PROC_INST:\n          if (c === '?') {\n            parser.state = S.PROC_INST_ENDING\n          } else if (isWhitespace(c)) {\n            parser.state = S.PROC_INST_BODY\n          } else {\n            parser.procInstName += c\n          }\n          continue\n\n        case S.PROC_INST_BODY:\n          if (!parser.procInstBody && isWhitespace(c)) {\n            continue\n          } else if (c === '?') {\n            parser.state = S.PROC_INST_ENDING\n          } else {\n            parser.procInstBody += c\n          }\n          continue\n\n        case S.PROC_INST_ENDING:\n          if (c === '>') {\n            emitNode(parser, 'onprocessinginstruction', {\n              name: parser.procInstName,\n              body: parser.procInstBody\n            })\n            parser.procInstName = parser.procInstBody = ''\n            parser.state = S.TEXT\n          } else {\n            parser.procInstBody += '?' + c\n            parser.state = S.PROC_INST_BODY\n          }\n          continue\n\n        case S.OPEN_TAG:\n          if (isMatch(nameBody, c)) {\n            parser.tagName += c\n          } else {\n            newTag(parser)\n            if (c === '>') {\n              openTag(parser)\n            } else if (c === '/') {\n              parser.state = S.OPEN_TAG_SLASH\n            } else {\n              if (!isWhitespace(c)) {\n                strictFail(parser, 'Invalid character in tag name')\n              }\n              parser.state = S.ATTRIB\n            }\n          }\n          continue\n\n        case S.OPEN_TAG_SLASH:\n          if (c === '>') {\n            openTag(parser, true)\n            closeTag(parser)\n          } else {\n            strictFail(parser, 'Forward-slash in opening tag not followed by >')\n            parser.state = S.ATTRIB\n          }\n          continue\n\n        case S.ATTRIB:\n          // haven't read the attribute name yet.\n          if (isWhitespace(c)) {\n            continue\n          } else if (c === '>') {\n            openTag(parser)\n          } else if (c === '/') {\n            parser.state = S.OPEN_TAG_SLASH\n          } else if (isMatch(nameStart, c)) {\n            parser.attribName = c\n            parser.attribValue = ''\n            parser.state = S.ATTRIB_NAME\n          } else {\n            strictFail(parser, 'Invalid attribute name')\n          }\n          continue\n\n        case S.ATTRIB_NAME:\n          if (c === '=') {\n            parser.state = S.ATTRIB_VALUE\n          } else if (c === '>') {\n            strictFail(parser, 'Attribute without value')\n            parser.attribValue = parser.attribName\n            attrib(parser)\n            openTag(parser)\n          } else if (isWhitespace(c)) {\n            parser.state = S.ATTRIB_NAME_SAW_WHITE\n          } else if (isMatch(nameBody, c)) {\n            parser.attribName += c\n          } else {\n            strictFail(parser, 'Invalid attribute name')\n          }\n          continue\n\n        case S.ATTRIB_NAME_SAW_WHITE:\n          if (c === '=') {\n            parser.state = S.ATTRIB_VALUE\n          } else if (isWhitespace(c)) {\n            continue\n          } else {\n            strictFail(parser, 'Attribute without value')\n            parser.tag.attributes[parser.attribName] = ''\n            parser.attribValue = ''\n            emitNode(parser, 'onattribute', {\n              name: parser.attribName,\n              value: ''\n            })\n            parser.attribName = ''\n            if (c === '>') {\n              openTag(parser)\n            } else if (isMatch(nameStart, c)) {\n              parser.attribName = c\n              parser.state = S.ATTRIB_NAME\n            } else {\n              strictFail(parser, 'Invalid attribute name')\n              parser.state = S.ATTRIB\n            }\n          }\n          continue\n\n        case S.ATTRIB_VALUE:\n          if (isWhitespace(c)) {\n            continue\n          } else if (isQuote(c)) {\n            parser.q = c\n            parser.state = S.ATTRIB_VALUE_QUOTED\n          } else {\n            strictFail(parser, 'Unquoted attribute value')\n            parser.state = S.ATTRIB_VALUE_UNQUOTED\n            parser.attribValue = c\n          }\n          continue\n\n        case S.ATTRIB_VALUE_QUOTED:\n          if (c !== parser.q) {\n            if (c === '&') {\n              parser.state = S.ATTRIB_VALUE_ENTITY_Q\n            } else {\n              parser.attribValue += c\n            }\n            continue\n          }\n          attrib(parser)\n          parser.q = ''\n          parser.state = S.ATTRIB_VALUE_CLOSED\n          continue\n\n        case S.ATTRIB_VALUE_CLOSED:\n          if (isWhitespace(c)) {\n            parser.state = S.ATTRIB\n          } else if (c === '>') {\n            openTag(parser)\n          } else if (c === '/') {\n            parser.state = S.OPEN_TAG_SLASH\n          } else if (isMatch(nameStart, c)) {\n            strictFail(parser, 'No whitespace between attributes')\n            parser.attribName = c\n            parser.attribValue = ''\n            parser.state = S.ATTRIB_NAME\n          } else {\n            strictFail(parser, 'Invalid attribute name')\n          }\n          continue\n\n        case S.ATTRIB_VALUE_UNQUOTED:\n          if (!isAttribEnd(c)) {\n            if (c === '&') {\n              parser.state = S.ATTRIB_VALUE_ENTITY_U\n            } else {\n              parser.attribValue += c\n            }\n            continue\n          }\n          attrib(parser)\n          if (c === '>') {\n            openTag(parser)\n          } else {\n            parser.state = S.ATTRIB\n          }\n          continue\n\n        case S.CLOSE_TAG:\n          if (!parser.tagName) {\n            if (isWhitespace(c)) {\n              continue\n            } else if (notMatch(nameStart, c)) {\n              if (parser.script) {\n                parser.script += '</' + c\n                parser.state = S.SCRIPT\n              } else {\n                strictFail(parser, 'Invalid tagname in closing tag.')\n              }\n            } else {\n              parser.tagName = c\n            }\n          } else if (c === '>') {\n            closeTag(parser)\n          } else if (isMatch(nameBody, c)) {\n            parser.tagName += c\n          } else if (parser.script) {\n            parser.script += '</' + parser.tagName\n            parser.tagName = ''\n            parser.state = S.SCRIPT\n          } else {\n            if (!isWhitespace(c)) {\n              strictFail(parser, 'Invalid tagname in closing tag')\n            }\n            parser.state = S.CLOSE_TAG_SAW_WHITE\n          }\n          continue\n\n        case S.CLOSE_TAG_SAW_WHITE:\n          if (isWhitespace(c)) {\n            continue\n          }\n          if (c === '>') {\n            closeTag(parser)\n          } else {\n            strictFail(parser, 'Invalid characters in closing tag')\n          }\n          continue\n\n        case S.TEXT_ENTITY:\n        case S.ATTRIB_VALUE_ENTITY_Q:\n        case S.ATTRIB_VALUE_ENTITY_U:\n          var returnState\n          var buffer\n          switch (parser.state) {\n            case S.TEXT_ENTITY:\n              returnState = S.TEXT\n              buffer = 'textNode'\n              break\n\n            case S.ATTRIB_VALUE_ENTITY_Q:\n              returnState = S.ATTRIB_VALUE_QUOTED\n              buffer = 'attribValue'\n              break\n\n            case S.ATTRIB_VALUE_ENTITY_U:\n              returnState = S.ATTRIB_VALUE_UNQUOTED\n              buffer = 'attribValue'\n              break\n          }\n\n          if (c === ';') {\n            parser[buffer] += parseEntity(parser)\n            parser.entity = ''\n            parser.state = returnState\n          } else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) {\n            parser.entity += c\n          } else {\n            strictFail(parser, 'Invalid character in entity name')\n            parser[buffer] += '&' + parser.entity + c\n            parser.entity = ''\n            parser.state = returnState\n          }\n\n          continue\n\n        default:\n          throw new Error(parser, 'Unknown state: ' + parser.state)\n      }\n    } // while\n\n    if (parser.position >= parser.bufferCheckPosition) {\n      checkBufferLength(parser)\n    }\n    return parser\n  }\n\n  /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n  /* istanbul ignore next */\n  if (!String.fromCodePoint) {\n    (function () {\n      var stringFromCharCode = String.fromCharCode\n      var floor = Math.floor\n      var fromCodePoint = function () {\n        var MAX_SIZE = 0x4000\n        var codeUnits = []\n        var highSurrogate\n        var lowSurrogate\n        var index = -1\n        var length = arguments.length\n        if (!length) {\n          return ''\n        }\n        var result = ''\n        while (++index < length) {\n          var codePoint = Number(arguments[index])\n          if (\n            !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n            codePoint < 0 || // not a valid Unicode code point\n            codePoint > 0x10FFFF || // not a valid Unicode code point\n            floor(codePoint) !== codePoint // not an integer\n          ) {\n            throw RangeError('Invalid code point: ' + codePoint)\n          }\n          if (codePoint <= 0xFFFF) { // BMP code point\n            codeUnits.push(codePoint)\n          } else { // Astral code point; split in surrogate halves\n            // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n            codePoint -= 0x10000\n            highSurrogate = (codePoint >> 10) + 0xD800\n            lowSurrogate = (codePoint % 0x400) + 0xDC00\n            codeUnits.push(highSurrogate, lowSurrogate)\n          }\n          if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n            result += stringFromCharCode.apply(null, codeUnits)\n            codeUnits.length = 0\n          }\n        }\n        return result\n      }\n      /* istanbul ignore next */\n      if (Object.defineProperty) {\n        Object.defineProperty(String, 'fromCodePoint', {\n          value: fromCodePoint,\n          configurable: true,\n          writable: true\n        })\n      } else {\n        String.fromCodePoint = fromCodePoint\n      }\n    }())\n  }\n})( false ? 0 : exports)\n\n\n/***/ }),\n\n/***/ 2830:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = (__webpack_require__(7187).EventEmitter);\nvar inherits = __webpack_require__(5717);\n\ninherits(Stream, EE);\nStream.Readable = __webpack_require__(6577);\nStream.Writable = __webpack_require__(323);\nStream.Duplex = __webpack_require__(8656);\nStream.Transform = __webpack_require__(4473);\nStream.PassThrough = __webpack_require__(2366);\nStream.finished = __webpack_require__(1086)\nStream.pipeline = __webpack_require__(6472)\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\n  }\n\n  dest.on('drain', ondrain);\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend);\n    source.on('close', onclose);\n  }\n\n  var didOnEnd = false;\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    dest.end();\n  }\n\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    if (typeof dest.destroy === 'function') dest.destroy();\n  }\n\n  // don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup();\n    if (EE.listenerCount(this, 'error') === 0) {\n      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('error', onerror);\n\n  // remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata);\n    dest.removeListener('drain', ondrain);\n\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n\n  dest.on('close', cleanup);\n\n  dest.emit('pipe', source);\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest;\n};\n\n\n/***/ }),\n\n/***/ 8106:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.q = codes;\n\n\n/***/ }),\n\n/***/ 8656:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n\n  for (var key in obj) {\n    keys.push(key);\n  }\n\n  return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = __webpack_require__(6577);\n\nvar Writable = __webpack_require__(323);\n\n__webpack_require__(5717)(Duplex, Readable);\n\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  this.allowHalfOpen = true;\n\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n}); // the no-half-open enforcer\n\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return; // no more data can be written.\n  // But allow more writes to happen in this tick.\n\n  process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\n/***/ }),\n\n/***/ 2366:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n\nmodule.exports = PassThrough;\n\nvar Transform = __webpack_require__(4473);\n\n__webpack_require__(5717)(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};\n\n/***/ }),\n\n/***/ 6577:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = (__webpack_require__(7187).EventEmitter);\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = __webpack_require__(3194);\n/*</replacement>*/\n\n\nvar Buffer = (__webpack_require__(8823).Buffer);\n\nvar OurUint8Array = __webpack_require__.g.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = __webpack_require__(964);\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = __webpack_require__(3361);\n\nvar destroyImpl = __webpack_require__(1029);\n\nvar _require = __webpack_require__(94),\n    getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = (__webpack_require__(8106)/* .codes */ .q),\n    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n    ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\n__webpack_require__(5717)(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || __webpack_require__(8656);\n  options = options || {}; // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n\n  this.sync = true; // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n  this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n  this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n  this.destroyed = false; // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n\n  this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n  this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = (__webpack_require__(2553)/* .StringDecoder */ .s);\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || __webpack_require__(8656);\n  if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5\n\n  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n      } else if (state.destroyed) {\n        return false;\n      } else {\n        state.reading = false;\n\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\n  } // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n\n\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    state.awaitDrain = 0;\n    stream.emit('data', chunk);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n\n  return er;\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = (__webpack_require__(2553)/* .StringDecoder */ .s);\n  var decoder = new StringDecoder(enc);\n  this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n  this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n  var p = this._readableState.buffer.head;\n  var content = '';\n\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n\n  this._readableState.buffer.clear();\n\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n\n  return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n; // Don't have enough\n\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n\n  return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n\n  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  } // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n  // if we need a readable event, then we need to do some reading.\n\n\n  var doRead = state.needReadable;\n  debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  } // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n\n\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n    if (state.length === 0) state.needReadable = true; // call internal read method\n\n    this._read(state.highWaterMark);\n\n    state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n\n  state.ended = true;\n\n  if (state.sync) {\n    // if we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call\n    emitReadable(stream);\n  } else {\n    // emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false;\n\n    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\n  }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  debug('emitReadable', state.needReadable, state.emittedReadable);\n  state.needReadable = false;\n\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    process.nextTick(emitReadable_, stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n  if (!state.destroyed && (state.length || state.ended)) {\n    stream.emit('readable');\n    state.emittedReadable = false;\n  } // The stream needs another readable event if\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n\n\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n  flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var len = state.length;\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length) // didn't get any data, stop spinning.\n      break;\n  }\n\n  state.readingMore = false;\n} // abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  } // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n\n\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n\n  function cleanup() {\n    debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true; // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  src.on('data', ondata);\n\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n\n    if (ret === false) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n\n      src.pause();\n    }\n  } // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n\n\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n  } // Make sure our error handler is attached before userland ones.\n\n\n  prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n\n  dest.once('close', onclose);\n\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  } // tell the dest that it's being piped to\n\n\n  dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  }; // if we're not piping anywhere, then do nothing.\n\n  if (state.pipesCount === 0) return this; // just one destination.  most common case.\n\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes; // got a match.\n\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  } // slow case. multiple pipe destinations.\n\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, {\n        hasUnpiped: false\n      });\n    }\n\n    return this;\n  } // try to find the right one.\n\n\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n  var state = this._readableState;\n\n  if (ev === 'data') {\n    // update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n    if (state.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.flowing = false;\n      state.emittedReadable = false;\n      debug('on readable', state.length, state.reading);\n\n      if (state.length) {\n        emitReadable(this);\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this);\n      }\n    }\n  }\n\n  return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n  var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n\n  return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n\n  return res;\n};\n\nfunction updateReadableListening(self) {\n  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n\n  if (state.resumeScheduled && !state.paused) {\n    // flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true; // crude way to check if we should resume\n  } else if (self.listenerCount('data') > 0) {\n    self.resume();\n  }\n}\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n\n  if (!state.flowing) {\n    debug('resume'); // we flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume()\n\n    state.flowing = !state.readableListening;\n    resume(this, state);\n  }\n\n  state.paused = false;\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  debug('resume', state.reading);\n\n  if (!state.reading) {\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n\n  if (this._readableState.flowing !== false) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n\n  this._readableState.paused = true;\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n\n  while (state.flowing && stream.read() !== null) {\n    ;\n  }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  }); // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  } // proxy certain important events.\n\n\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  } // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n\n\n  this._read = function (n) {\n    debug('wrapped _read', n);\n\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = __webpack_require__(828);\n    }\n\n    return createReadableStreamAsyncIterator(this);\n  };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = state.buffer.consume(n, state.decoder);\n  }\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n  debug('endReadable', state.endEmitted);\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n\n    if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well\n      var wState = stream._writableState;\n\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\n\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = __webpack_require__(1265);\n    }\n\n    return from(Readable, iterable, opts);\n  };\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n\n  return -1;\n}\n\n/***/ }),\n\n/***/ 4473:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n\nmodule.exports = Transform;\n\nvar _require$codes = (__webpack_require__(8106)/* .codes */ .q),\n    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n    ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n    ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = __webpack_require__(8656);\n\n__webpack_require__(5717)(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  }; // start out asking for a readable event once data is transformed.\n\n  this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  } // When the writable side finishes, then flush out anything remaining.\n\n\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\n}\n\n/***/ }),\n\n/***/ 323:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n  deprecate: __webpack_require__(4927)\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = __webpack_require__(3194);\n/*</replacement>*/\n\n\nvar Buffer = (__webpack_require__(8823).Buffer);\n\nvar OurUint8Array = __webpack_require__.g.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = __webpack_require__(1029);\n\nvar _require = __webpack_require__(94),\n    getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = (__webpack_require__(8106)/* .codes */ .q),\n    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n    ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n    ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n    ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n    ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n    ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\n__webpack_require__(5717)(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || __webpack_require__(8656);\n  options = options || {}; // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n\n  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n  this.finalCalled = false; // drain event flag.\n\n  this.needDrain = false; // at the start of calling end()\n\n  this.ending = false; // when end() has been called, and returned\n\n  this.ended = false; // when 'finish' is emitted\n\n  this.finished = false; // has it been destroyed\n\n  this.destroyed = false; // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode; // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n\n  this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n\n  this.length = 0; // a flag to see when we're in the middle of a write.\n\n  this.writing = false; // when true all writes will be buffered until .uncork() call\n\n  this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n\n  this.sync = true; // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n\n  this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n  this.writecb = null; // the amount that is being written when _write is called.\n\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n\n  this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n\n  this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n  this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n  this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n  this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n  this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || __webpack_require__(8656); // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5\n\n  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n\n  return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er); // this can emit finish, and it will always happen\n    // after error\n\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er); // this can emit finish, but finish must\n    // always follow error\n\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  } // ignore unnecessary end() calls.\n\n\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\n\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n\n  if (need) {\n    prefinish(stream, state);\n\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n\n      if (state.autoDestroy) {\n        // In case of duplex streams we need a way to detect\n        // if the readable side is ready for autoDestroy as well\n        var rState = stream._readableState;\n\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  } // reuse the free corkReq.\n\n\n  state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\n};\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = __webpack_require__(1086);\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\n\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n\n  if (resolve !== null) {\n    var data = iter[kStream].read(); // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\n\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n\n  next: function next() {\n    var _this = this;\n\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    } // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n\n\n    var lastPromise = this[kLastPromise];\n    var promise;\n\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n\n      promise = new Promise(this[kHandlePromise]);\n    }\n\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n\n      iterator[kError] = err;\n      return;\n    }\n\n    var resolve = iterator[kLastResolve];\n\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;\n\n/***/ }),\n\n/***/ 1029:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(4155);\n // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\n    }\n\n    return this;\n  } // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n\n  return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};\n\n/***/ }),\n\n/***/ 1086:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n\nvar ERR_STREAM_PREMATURE_CLOSE = (__webpack_require__(8106)/* .codes.ERR_STREAM_PREMATURE_CLOSE */ .q.ERR_STREAM_PREMATURE_CLOSE);\n\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    callback.apply(this, args);\n  };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n\n  var writableEnded = stream._writableState && stream._writableState.finished;\n\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n\n  var onclose = function onclose() {\n    var err;\n\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\n    stream.removeListener('complete', onfinish);\n    stream.removeListener('abort', onclose);\n    stream.removeListener('request', onrequest);\n    if (stream.req) stream.req.removeListener('finish', onfinish);\n    stream.removeListener('end', onlegacyfinish);\n    stream.removeListener('close', onlegacyfinish);\n    stream.removeListener('finish', onfinish);\n    stream.removeListener('end', onend);\n    stream.removeListener('error', onerror);\n    stream.removeListener('close', onclose);\n  };\n}\n\nmodule.exports = eos;\n\n/***/ }),\n\n/***/ 1265:\n/***/ (function(module) {\n\nmodule.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\n};\n\n\n/***/ }),\n\n/***/ 6472:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n\nvar eos;\n\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\n\nvar _require$codes = (__webpack_require__(8106)/* .codes */ .q),\n    ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n    ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\n\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = __webpack_require__(1086);\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true; // request.destroy just do .end - .abort is what we want\n\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\n\nfunction call(fn) {\n  fn();\n}\n\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\n\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;\n\n/***/ }),\n\n/***/ 94:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar ERR_INVALID_OPT_VALUE = (__webpack_require__(8106)/* .codes.ERR_INVALID_OPT_VALUE */ .q.ERR_INVALID_OPT_VALUE);\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n\n    return Math.floor(hwm);\n  } // Default value\n\n\n  return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};\n\n/***/ }),\n\n/***/ 3194:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(7187).EventEmitter;\n\n\n/***/ }),\n\n/***/ 2984:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(a,b){if(true)!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (b),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else {}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof __webpack_require__.g&&__webpack_require__.g.global===__webpack_require__.g?__webpack_require__.g:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:(typeof HTMLAnchorElement !== \"undefined\" && \"download\" in HTMLAnchorElement.prototype)&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g, true&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map\n\n/***/ }),\n\n/***/ 2553:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\n/*<replacement>*/\n\nvar Buffer = (__webpack_require__(4559).Buffer);\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.s = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}\n\n/***/ }),\n\n/***/ 311:\n/***/ (function(module) {\n\nvar TINF_OK = 0;\nvar TINF_DATA_ERROR = -3;\n\nfunction Tree() {\n  this.table = new Uint16Array(16);   /* table of code length counts */\n  this.trans = new Uint16Array(288);  /* code -> symbol translation table */\n}\n\nfunction Data(source, dest) {\n  this.source = source;\n  this.sourceIndex = 0;\n  this.tag = 0;\n  this.bitcount = 0;\n  \n  this.dest = dest;\n  this.destLen = 0;\n  \n  this.ltree = new Tree();  /* dynamic length/symbol tree */\n  this.dtree = new Tree();  /* dynamic distance tree */\n}\n\n/* --------------------------------------------------- *\n * -- uninitialized global data (static structures) -- *\n * --------------------------------------------------- */\n\nvar sltree = new Tree();\nvar sdtree = new Tree();\n\n/* extra bits and base tables for length codes */\nvar length_bits = new Uint8Array(30);\nvar length_base = new Uint16Array(30);\n\n/* extra bits and base tables for distance codes */\nvar dist_bits = new Uint8Array(30);\nvar dist_base = new Uint16Array(30);\n\n/* special ordering of code length codes */\nvar clcidx = new Uint8Array([\n  16, 17, 18, 0, 8, 7, 9, 6,\n  10, 5, 11, 4, 12, 3, 13, 2,\n  14, 1, 15\n]);\n\n/* used by tinf_decode_trees, avoids allocations every call */\nvar code_tree = new Tree();\nvar lengths = new Uint8Array(288 + 32);\n\n/* ----------------------- *\n * -- utility functions -- *\n * ----------------------- */\n\n/* build extra bits and base tables */\nfunction tinf_build_bits_base(bits, base, delta, first) {\n  var i, sum;\n\n  /* build bits table */\n  for (i = 0; i < delta; ++i) bits[i] = 0;\n  for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0;\n\n  /* build base table */\n  for (sum = first, i = 0; i < 30; ++i) {\n    base[i] = sum;\n    sum += 1 << bits[i];\n  }\n}\n\n/* build the fixed huffman trees */\nfunction tinf_build_fixed_trees(lt, dt) {\n  var i;\n\n  /* build fixed length tree */\n  for (i = 0; i < 7; ++i) lt.table[i] = 0;\n\n  lt.table[7] = 24;\n  lt.table[8] = 152;\n  lt.table[9] = 112;\n\n  for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i;\n  for (i = 0; i < 144; ++i) lt.trans[24 + i] = i;\n  for (i = 0; i < 8; ++i) lt.trans[24 + 144 + i] = 280 + i;\n  for (i = 0; i < 112; ++i) lt.trans[24 + 144 + 8 + i] = 144 + i;\n\n  /* build fixed distance tree */\n  for (i = 0; i < 5; ++i) dt.table[i] = 0;\n\n  dt.table[5] = 32;\n\n  for (i = 0; i < 32; ++i) dt.trans[i] = i;\n}\n\n/* given an array of code lengths, build a tree */\nvar offs = new Uint16Array(16);\n\nfunction tinf_build_tree(t, lengths, off, num) {\n  var i, sum;\n\n  /* clear code length count table */\n  for (i = 0; i < 16; ++i) t.table[i] = 0;\n\n  /* scan symbol lengths, and sum code length counts */\n  for (i = 0; i < num; ++i) t.table[lengths[off + i]]++;\n\n  t.table[0] = 0;\n\n  /* compute offset table for distribution sort */\n  for (sum = 0, i = 0; i < 16; ++i) {\n    offs[i] = sum;\n    sum += t.table[i];\n  }\n\n  /* create code->symbol translation table (symbols sorted by code) */\n  for (i = 0; i < num; ++i) {\n    if (lengths[off + i]) t.trans[offs[lengths[off + i]]++] = i;\n  }\n}\n\n/* ---------------------- *\n * -- decode functions -- *\n * ---------------------- */\n\n/* get one bit from source stream */\nfunction tinf_getbit(d) {\n  /* check if tag is empty */\n  if (!d.bitcount--) {\n    /* load next tag */\n    d.tag = d.source[d.sourceIndex++];\n    d.bitcount = 7;\n  }\n\n  /* shift bit out of tag */\n  var bit = d.tag & 1;\n  d.tag >>>= 1;\n\n  return bit;\n}\n\n/* read a num bit value from a stream and add base */\nfunction tinf_read_bits(d, num, base) {\n  if (!num)\n    return base;\n\n  while (d.bitcount < 24) {\n    d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n    d.bitcount += 8;\n  }\n\n  var val = d.tag & (0xffff >>> (16 - num));\n  d.tag >>>= num;\n  d.bitcount -= num;\n  return val + base;\n}\n\n/* given a data stream and a tree, decode a symbol */\nfunction tinf_decode_symbol(d, t) {\n  while (d.bitcount < 24) {\n    d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n    d.bitcount += 8;\n  }\n  \n  var sum = 0, cur = 0, len = 0;\n  var tag = d.tag;\n\n  /* get more bits while code value is above sum */\n  do {\n    cur = 2 * cur + (tag & 1);\n    tag >>>= 1;\n    ++len;\n\n    sum += t.table[len];\n    cur -= t.table[len];\n  } while (cur >= 0);\n  \n  d.tag = tag;\n  d.bitcount -= len;\n\n  return t.trans[sum + cur];\n}\n\n/* given a data stream, decode dynamic trees from it */\nfunction tinf_decode_trees(d, lt, dt) {\n  var hlit, hdist, hclen;\n  var i, num, length;\n\n  /* get 5 bits HLIT (257-286) */\n  hlit = tinf_read_bits(d, 5, 257);\n\n  /* get 5 bits HDIST (1-32) */\n  hdist = tinf_read_bits(d, 5, 1);\n\n  /* get 4 bits HCLEN (4-19) */\n  hclen = tinf_read_bits(d, 4, 4);\n\n  for (i = 0; i < 19; ++i) lengths[i] = 0;\n\n  /* read code lengths for code length alphabet */\n  for (i = 0; i < hclen; ++i) {\n    /* get 3 bits code length (0-7) */\n    var clen = tinf_read_bits(d, 3, 0);\n    lengths[clcidx[i]] = clen;\n  }\n\n  /* build code length tree */\n  tinf_build_tree(code_tree, lengths, 0, 19);\n\n  /* decode code lengths for the dynamic trees */\n  for (num = 0; num < hlit + hdist;) {\n    var sym = tinf_decode_symbol(d, code_tree);\n\n    switch (sym) {\n      case 16:\n        /* copy previous code length 3-6 times (read 2 bits) */\n        var prev = lengths[num - 1];\n        for (length = tinf_read_bits(d, 2, 3); length; --length) {\n          lengths[num++] = prev;\n        }\n        break;\n      case 17:\n        /* repeat code length 0 for 3-10 times (read 3 bits) */\n        for (length = tinf_read_bits(d, 3, 3); length; --length) {\n          lengths[num++] = 0;\n        }\n        break;\n      case 18:\n        /* repeat code length 0 for 11-138 times (read 7 bits) */\n        for (length = tinf_read_bits(d, 7, 11); length; --length) {\n          lengths[num++] = 0;\n        }\n        break;\n      default:\n        /* values 0-15 represent the actual code lengths */\n        lengths[num++] = sym;\n        break;\n    }\n  }\n\n  /* build dynamic trees */\n  tinf_build_tree(lt, lengths, 0, hlit);\n  tinf_build_tree(dt, lengths, hlit, hdist);\n}\n\n/* ----------------------------- *\n * -- block inflate functions -- *\n * ----------------------------- */\n\n/* given a stream and two trees, inflate a block of data */\nfunction tinf_inflate_block_data(d, lt, dt) {\n  while (1) {\n    var sym = tinf_decode_symbol(d, lt);\n\n    /* check for end of block */\n    if (sym === 256) {\n      return TINF_OK;\n    }\n\n    if (sym < 256) {\n      d.dest[d.destLen++] = sym;\n    } else {\n      var length, dist, offs;\n      var i;\n\n      sym -= 257;\n\n      /* possibly get more bits from length code */\n      length = tinf_read_bits(d, length_bits[sym], length_base[sym]);\n\n      dist = tinf_decode_symbol(d, dt);\n\n      /* possibly get more bits from distance code */\n      offs = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);\n\n      /* copy match */\n      for (i = offs; i < offs + length; ++i) {\n        d.dest[d.destLen++] = d.dest[i];\n      }\n    }\n  }\n}\n\n/* inflate an uncompressed block of data */\nfunction tinf_inflate_uncompressed_block(d) {\n  var length, invlength;\n  var i;\n  \n  /* unread from bitbuffer */\n  while (d.bitcount > 8) {\n    d.sourceIndex--;\n    d.bitcount -= 8;\n  }\n\n  /* get length */\n  length = d.source[d.sourceIndex + 1];\n  length = 256 * length + d.source[d.sourceIndex];\n\n  /* get one's complement of length */\n  invlength = d.source[d.sourceIndex + 3];\n  invlength = 256 * invlength + d.source[d.sourceIndex + 2];\n\n  /* check length */\n  if (length !== (~invlength & 0x0000ffff))\n    return TINF_DATA_ERROR;\n\n  d.sourceIndex += 4;\n\n  /* copy block */\n  for (i = length; i; --i)\n    d.dest[d.destLen++] = d.source[d.sourceIndex++];\n\n  /* make sure we start next block on a byte boundary */\n  d.bitcount = 0;\n\n  return TINF_OK;\n}\n\n/* inflate stream from source to dest */\nfunction tinf_uncompress(source, dest) {\n  var d = new Data(source, dest);\n  var bfinal, btype, res;\n\n  do {\n    /* read final block flag */\n    bfinal = tinf_getbit(d);\n\n    /* read block type (2 bits) */\n    btype = tinf_read_bits(d, 2, 0);\n\n    /* decompress block */\n    switch (btype) {\n      case 0:\n        /* decompress uncompressed block */\n        res = tinf_inflate_uncompressed_block(d);\n        break;\n      case 1:\n        /* decompress block with fixed huffman trees */\n        res = tinf_inflate_block_data(d, sltree, sdtree);\n        break;\n      case 2:\n        /* decompress block with dynamic huffman trees */\n        tinf_decode_trees(d, d.ltree, d.dtree);\n        res = tinf_inflate_block_data(d, d.ltree, d.dtree);\n        break;\n      default:\n        res = TINF_DATA_ERROR;\n    }\n\n    if (res !== TINF_OK)\n      throw new Error('Data error');\n\n  } while (!bfinal);\n\n  if (d.destLen < d.dest.length) {\n    if (typeof d.dest.slice === 'function')\n      return d.dest.slice(0, d.destLen);\n    else\n      return d.dest.subarray(0, d.destLen);\n  }\n  \n  return d.dest;\n}\n\n/* -------------------- *\n * -- initialization -- *\n * -------------------- */\n\n/* build fixed huffman trees */\ntinf_build_fixed_trees(sltree, sdtree);\n\n/* build extra bits and base tables */\ntinf_build_bits_base(length_bits, length_base, 4, 3);\ntinf_build_bits_base(dist_bits, dist_base, 2, 1);\n\n/* fix a special case */\nlength_bits[28] = 0;\nlength_base[28] = 258;\n\nmodule.exports = tinf_uncompress;\n\n\n/***/ }),\n\n/***/ 1917:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\n__webpack_require__(2526);\n__webpack_require__(1817);\n__webpack_require__(2165);\n__webpack_require__(6649);\n__webpack_require__(6078);\n__webpack_require__(1539);\n__webpack_require__(4747);\n__webpack_require__(7941);\n__webpack_require__(7042);\n__webpack_require__(6992);\n__webpack_require__(1532);\n__webpack_require__(8783);\n__webpack_require__(3948);\n__webpack_require__(2222);\n__webpack_require__(9653);\n__webpack_require__(1249);\n__webpack_require__(2087);\n__webpack_require__(8309);\n__webpack_require__(9601);\n__webpack_require__(4953);\n__webpack_require__(8674);\n__webpack_require__(5003);\n__webpack_require__(189);\n__webpack_require__(561);\n__webpack_require__(2481);\n__webpack_require__(2707);\n__webpack_require__(4916);\n__webpack_require__(4723);\n__webpack_require__(1038);\n__webpack_require__(9600);\n__webpack_require__(3371);\n__webpack_require__(3290);\n__webpack_require__(3299);\n__webpack_require__(8255);\n__webpack_require__(2990);\n__webpack_require__(8927);\n__webpack_require__(3105);\n__webpack_require__(5035);\n__webpack_require__(4345);\n__webpack_require__(7174);\n__webpack_require__(2846);\n__webpack_require__(4731);\n__webpack_require__(7209);\n__webpack_require__(6319);\n__webpack_require__(8867);\n__webpack_require__(7789);\n__webpack_require__(3739);\n__webpack_require__(9368);\n__webpack_require__(4483);\n__webpack_require__(2056);\n__webpack_require__(3462);\n__webpack_require__(678);\n__webpack_require__(7462);\n__webpack_require__(3824);\n__webpack_require__(5021);\n__webpack_require__(2974);\n__webpack_require__(5016);\n__webpack_require__(5109);\n__webpack_require__(9714);\n__webpack_require__(3210);\nvar _;\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\nfunction _interopDefault(ex) {\n  return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\nvar r = _interopDefault(__webpack_require__(5106));\nvar utils = __webpack_require__(6610);\nvar isEqual = _interopDefault(__webpack_require__(251));\nvar unicode = _interopDefault(__webpack_require__(3631));\nvar UnicodeTrie = _interopDefault(__webpack_require__(4781));\nvar StateMachine = _interopDefault(__webpack_require__(9811));\nvar cloneDeep = _interopDefault(__webpack_require__(6313));\nvar inflate = _interopDefault(__webpack_require__(311));\nvar brotli = _interopDefault(__webpack_require__(7709));\nvar fs = __webpack_require__(3857);\nvar fontkit = {};\nfontkit.logErrors = false;\nvar formats = [];\nfontkit.registerFormat = function (format) {\n  formats.push(format);\n};\nfontkit.openSync = function (filename, postscriptName) {\n  var buffer = fs.readFileSync(filename);\n  return fontkit.create(buffer, postscriptName);\n};\nfontkit.open = function (filename, postscriptName, callback) {\n  if (typeof postscriptName === 'function') {\n    callback = postscriptName;\n    postscriptName = null;\n  }\n  fs.readFile(filename, function (err, buffer) {\n    if (err) {\n      return callback(err);\n    }\n    try {\n      var font = fontkit.create(buffer, postscriptName);\n    } catch (e) {\n      return callback(e);\n    }\n    return callback(null, font);\n  });\n  return;\n};\nfontkit.create = function (buffer, postscriptName) {\n  for (var i = 0; i < formats.length; i++) {\n    var format = formats[i];\n    if (format.probe(buffer)) {\n      var font = new format(new r.DecodeStream(buffer));\n      if (postscriptName) {\n        return font.getFont(postscriptName);\n      }\n      return font;\n    }\n  }\n  throw new Error('Unknown font format');\n};\nfontkit.defaultLanguage = 'en';\nfontkit.setDefaultLanguage = function (lang) {\n  if (lang === void 0) {\n    lang = 'en';\n  }\n  fontkit.defaultLanguage = lang;\n};\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n  var desc = {};\n  Object.keys(descriptor).forEach(function (key) {\n    desc[key] = descriptor[key];\n  });\n  desc.enumerable = !!desc.enumerable;\n  desc.configurable = !!desc.configurable;\n  if ('value' in desc || desc.initializer) {\n    desc.writable = true;\n  }\n  desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n    return decorator(target, property, desc) || desc;\n  }, desc);\n  if (context && desc.initializer !== void 0) {\n    desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n    desc.initializer = undefined;\n  }\n  if (desc.initializer === void 0) {\n    Object.defineProperty(target, property, desc);\n    desc = null;\n  }\n  return desc;\n}\n\n/**\n * This decorator caches the results of a getter or method such that\n * the results are lazily computed once, and then cached.\n * @private\n */\nfunction cache(target, key, descriptor) {\n  if (descriptor.get) {\n    var get = descriptor.get;\n    descriptor.get = function () {\n      var value = get.call(this);\n      Object.defineProperty(this, key, {\n        value: value\n      });\n      return value;\n    };\n  } else if (typeof descriptor.value === 'function') {\n    var fn = descriptor.value;\n    return {\n      get: function get() {\n        var cache = new Map();\n        function memoized() {\n          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n            args[_key] = arguments[_key];\n          }\n          var key = args.length > 0 ? args[0] : 'value';\n          if (cache.has(key)) {\n            return cache.get(key);\n          }\n          var result = fn.apply(this, args);\n          cache.set(key, result);\n          return result;\n        }\n        Object.defineProperty(this, key, {\n          value: memoized\n        });\n        return memoized;\n      }\n    };\n  }\n}\nvar SubHeader = new r.Struct({\n  firstCode: r.uint16,\n  entryCount: r.uint16,\n  idDelta: r.int16,\n  idRangeOffset: r.uint16\n});\nvar CmapGroup = new r.Struct({\n  startCharCode: r.uint32,\n  endCharCode: r.uint32,\n  glyphID: r.uint32\n});\nvar UnicodeValueRange = new r.Struct({\n  startUnicodeValue: r.uint24,\n  additionalCount: r.uint8\n});\nvar UVSMapping = new r.Struct({\n  unicodeValue: r.uint24,\n  glyphID: r.uint16\n});\nvar DefaultUVS = new r.Array(UnicodeValueRange, r.uint32);\nvar NonDefaultUVS = new r.Array(UVSMapping, r.uint32);\nvar VarSelectorRecord = new r.Struct({\n  varSelector: r.uint24,\n  defaultUVS: new r.Pointer(r.uint32, DefaultUVS, {\n    type: 'parent'\n  }),\n  nonDefaultUVS: new r.Pointer(r.uint32, NonDefaultUVS, {\n    type: 'parent'\n  })\n});\nvar CmapSubtable = new r.VersionedStruct(r.uint16, {\n  0: {\n    // Byte encoding\n    length: r.uint16,\n    // Total table length in bytes (set to 262 for format 0)\n    language: r.uint16,\n    // Language code for this encoding subtable, or zero if language-independent\n    codeMap: new r.LazyArray(r.uint8, 256)\n  },\n  2: {\n    // High-byte mapping (CJK)\n    length: r.uint16,\n    language: r.uint16,\n    subHeaderKeys: new r.Array(r.uint16, 256),\n    subHeaderCount: function subHeaderCount(t) {\n      return Math.max.apply(Math, t.subHeaderKeys);\n    },\n    subHeaders: new r.LazyArray(SubHeader, 'subHeaderCount'),\n    glyphIndexArray: new r.LazyArray(r.uint16, 'subHeaderCount')\n  },\n  4: {\n    // Segment mapping to delta values\n    length: r.uint16,\n    // Total table length in bytes\n    language: r.uint16,\n    // Language code\n    segCountX2: r.uint16,\n    segCount: function segCount(t) {\n      return t.segCountX2 >> 1;\n    },\n    searchRange: r.uint16,\n    entrySelector: r.uint16,\n    rangeShift: r.uint16,\n    endCode: new r.LazyArray(r.uint16, 'segCount'),\n    reservedPad: new r.Reserved(r.uint16),\n    // This value should be zero\n    startCode: new r.LazyArray(r.uint16, 'segCount'),\n    idDelta: new r.LazyArray(r.int16, 'segCount'),\n    idRangeOffset: new r.LazyArray(r.uint16, 'segCount'),\n    glyphIndexArray: new r.LazyArray(r.uint16, function (t) {\n      return (t.length - t._currentOffset) / 2;\n    })\n  },\n  6: {\n    // Trimmed table\n    length: r.uint16,\n    language: r.uint16,\n    firstCode: r.uint16,\n    entryCount: r.uint16,\n    glyphIndices: new r.LazyArray(r.uint16, 'entryCount')\n  },\n  8: {\n    // mixed 16-bit and 32-bit coverage\n    reserved: new r.Reserved(r.uint16),\n    length: r.uint32,\n    language: r.uint16,\n    is32: new r.LazyArray(r.uint8, 8192),\n    nGroups: r.uint32,\n    groups: new r.LazyArray(CmapGroup, 'nGroups')\n  },\n  10: {\n    // Trimmed Array\n    reserved: new r.Reserved(r.uint16),\n    length: r.uint32,\n    language: r.uint32,\n    firstCode: r.uint32,\n    entryCount: r.uint32,\n    glyphIndices: new r.LazyArray(r.uint16, 'numChars')\n  },\n  12: {\n    // Segmented coverage\n    reserved: new r.Reserved(r.uint16),\n    length: r.uint32,\n    language: r.uint32,\n    nGroups: r.uint32,\n    groups: new r.LazyArray(CmapGroup, 'nGroups')\n  },\n  13: {\n    // Many-to-one range mappings (same as 12 except for group.startGlyphID)\n    reserved: new r.Reserved(r.uint16),\n    length: r.uint32,\n    language: r.uint32,\n    nGroups: r.uint32,\n    groups: new r.LazyArray(CmapGroup, 'nGroups')\n  },\n  14: {\n    // Unicode Variation Sequences\n    length: r.uint32,\n    numRecords: r.uint32,\n    varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords')\n  }\n});\nvar CmapEntry = new r.Struct({\n  platformID: r.uint16,\n  // Platform identifier\n  encodingID: r.uint16,\n  // Platform-specific encoding identifier\n  table: new r.Pointer(r.uint32, CmapSubtable, {\n    type: 'parent',\n    lazy: true\n  })\n}); // character to glyph mapping\n\nvar cmap = new r.Struct({\n  version: r.uint16,\n  numSubtables: r.uint16,\n  tables: new r.Array(CmapEntry, 'numSubtables')\n});\nvar head = new r.Struct({\n  version: r.int32,\n  // 0x00010000 (version 1.0)\n  revision: r.int32,\n  // set by font manufacturer\n  checkSumAdjustment: r.uint32,\n  magicNumber: r.uint32,\n  // set to 0x5F0F3CF5\n  flags: r.uint16,\n  unitsPerEm: r.uint16,\n  // range from 64 to 16384\n  created: new r.Array(r.int32, 2),\n  modified: new r.Array(r.int32, 2),\n  xMin: r.int16,\n  // for all glyph bounding boxes\n  yMin: r.int16,\n  // for all glyph bounding boxes\n  xMax: r.int16,\n  // for all glyph bounding boxes\n  yMax: r.int16,\n  // for all glyph bounding boxes\n  macStyle: new r.Bitfield(r.uint16, ['bold', 'italic', 'underline', 'outline', 'shadow', 'condensed', 'extended']),\n  lowestRecPPEM: r.uint16,\n  // smallest readable size in pixels\n  fontDirectionHint: r.int16,\n  indexToLocFormat: r.int16,\n  // 0 for short offsets, 1 for long\n  glyphDataFormat: r.int16 // 0 for current format\n});\n\nvar hhea = new r.Struct({\n  version: r.int32,\n  ascent: r.int16,\n  // Distance from baseline of highest ascender\n  descent: r.int16,\n  // Distance from baseline of lowest descender\n  lineGap: r.int16,\n  // Typographic line gap\n  advanceWidthMax: r.uint16,\n  // Maximum advance width value in 'hmtx' table\n  minLeftSideBearing: r.int16,\n  // Maximum advance width value in 'hmtx' table\n  minRightSideBearing: r.int16,\n  // Minimum right sidebearing value\n  xMaxExtent: r.int16,\n  caretSlopeRise: r.int16,\n  // Used to calculate the slope of the cursor (rise/run); 1 for vertical\n  caretSlopeRun: r.int16,\n  // 0 for vertical\n  caretOffset: r.int16,\n  // Set to 0 for non-slanted fonts\n  reserved: new r.Reserved(r.int16, 4),\n  metricDataFormat: r.int16,\n  // 0 for current format\n  numberOfMetrics: r.uint16 // Number of advance widths in 'hmtx' table\n});\n\nvar HmtxEntry = new r.Struct({\n  advance: r.uint16,\n  bearing: r.int16\n});\nvar hmtx = new r.Struct({\n  metrics: new r.LazyArray(HmtxEntry, function (t) {\n    return t.parent.hhea.numberOfMetrics;\n  }),\n  bearings: new r.LazyArray(r.int16, function (t) {\n    return t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics;\n  })\n});\nvar maxp = new r.Struct({\n  version: r.int32,\n  numGlyphs: r.uint16,\n  // The number of glyphs in the font\n  maxPoints: r.uint16,\n  // Maximum points in a non-composite glyph\n  maxContours: r.uint16,\n  // Maximum contours in a non-composite glyph\n  maxComponentPoints: r.uint16,\n  // Maximum points in a composite glyph\n  maxComponentContours: r.uint16,\n  // Maximum contours in a composite glyph\n  maxZones: r.uint16,\n  // 1 if instructions do not use the twilight zone, 2 otherwise\n  maxTwilightPoints: r.uint16,\n  // Maximum points used in Z0\n  maxStorage: r.uint16,\n  // Number of Storage Area locations\n  maxFunctionDefs: r.uint16,\n  // Number of FDEFs\n  maxInstructionDefs: r.uint16,\n  // Number of IDEFs\n  maxStackElements: r.uint16,\n  // Maximum stack depth\n  maxSizeOfInstructions: r.uint16,\n  // Maximum byte count for glyph instructions\n  maxComponentElements: r.uint16,\n  // Maximum number of components referenced at “top level” for any composite glyph\n  maxComponentDepth: r.uint16 // Maximum levels of recursion; 1 for simple components\n});\n\n/**\n * Gets an encoding name from platform, encoding, and language ids.\n * Returned encoding names can be used in iconv-lite to decode text.\n */\nfunction getEncoding(platformID, encodingID, languageID) {\n  if (languageID === void 0) {\n    languageID = 0;\n  }\n  if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) {\n    return MAC_LANGUAGE_ENCODINGS[languageID];\n  }\n  return ENCODINGS[platformID][encodingID];\n} // Map of platform ids to encoding ids.\n\nvar ENCODINGS = [\n// unicode\n['utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be'],\n// macintosh\n// Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/\n// 0\tRoman                 17\tMalayalam\n// 1\tJapanese\t            18\tSinhalese\n// 2\tTraditional Chinese\t  19\tBurmese\n// 3\tKorean\t              20\tKhmer\n// 4\tArabic\t              21\tThai\n// 5\tHebrew\t              22\tLaotian\n// 6\tGreek\t                23\tGeorgian\n// 7\tRussian\t              24\tArmenian\n// 8\tRSymbol\t              25\tSimplified Chinese\n// 9\tDevanagari\t          26\tTibetan\n// 10\tGurmukhi\t            27\tMongolian\n// 11\tGujarati\t            28\tGeez\n// 12\tOriya\t                29\tSlavic\n// 13\tBengali\t              30\tVietnamese\n// 14\tTamil\t                31\tSindhi\n// 15\tTelugu\t              32\t(Uninterpreted)\n// 16\tKannada\n['macroman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8', 'macgreek', 'maccyrillic', 'symbol', 'Devanagari', 'Gurmukhi', 'Gujarati', 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese', 'Burmese', 'Khmer', 'macthai', 'Laotian', 'Georgian', 'Armenian', 'gb-2312-80', 'Tibetan', 'Mongolian', 'Geez', 'maccenteuro', 'Vietnamese', 'Sindhi'],\n// ISO (deprecated)\n['ascii'],\n// windows\n// Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx\n['symbol', 'utf16be', 'shift-jis', 'gb18030', 'big5', 'wansung', 'johab', null, null, null, 'utf16be']]; // Overrides for Mac scripts by language id.\n// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt\n\nvar MAC_LANGUAGE_ENCODINGS = {\n  15: 'maciceland',\n  17: 'macturkish',\n  18: 'maccroatian',\n  24: 'maccenteuro',\n  25: 'maccenteuro',\n  26: 'maccenteuro',\n  27: 'maccenteuro',\n  28: 'maccenteuro',\n  30: 'maciceland',\n  37: 'macromania',\n  38: 'maccenteuro',\n  39: 'maccenteuro',\n  40: 'maccenteuro',\n  143: 'macinuit',\n  // Unsupported by iconv-lite\n  146: 'macgaelic' // Unsupported by iconv-lite\n}; // Map of platform ids to BCP-47 language codes.\n\nvar LANGUAGES = [\n// unicode\n[], {\n  // macintosh\n  0: 'en',\n  30: 'fo',\n  60: 'ks',\n  90: 'rw',\n  1: 'fr',\n  31: 'fa',\n  61: 'ku',\n  91: 'rn',\n  2: 'de',\n  32: 'ru',\n  62: 'sd',\n  92: 'ny',\n  3: 'it',\n  33: 'zh',\n  63: 'bo',\n  93: 'mg',\n  4: 'nl',\n  34: 'nl-BE',\n  64: 'ne',\n  94: 'eo',\n  5: 'sv',\n  35: 'ga',\n  65: 'sa',\n  128: 'cy',\n  6: 'es',\n  36: 'sq',\n  66: 'mr',\n  129: 'eu',\n  7: 'da',\n  37: 'ro',\n  67: 'bn',\n  130: 'ca',\n  8: 'pt',\n  38: 'cz',\n  68: 'as',\n  131: 'la',\n  9: 'no',\n  39: 'sk',\n  69: 'gu',\n  132: 'qu',\n  10: 'he',\n  40: 'si',\n  70: 'pa',\n  133: 'gn',\n  11: 'ja',\n  41: 'yi',\n  71: 'or',\n  134: 'ay',\n  12: 'ar',\n  42: 'sr',\n  72: 'ml',\n  135: 'tt',\n  13: 'fi',\n  43: 'mk',\n  73: 'kn',\n  136: 'ug',\n  14: 'el',\n  44: 'bg',\n  74: 'ta',\n  137: 'dz',\n  15: 'is',\n  45: 'uk',\n  75: 'te',\n  138: 'jv',\n  16: 'mt',\n  46: 'be',\n  76: 'si',\n  139: 'su',\n  17: 'tr',\n  47: 'uz',\n  77: 'my',\n  140: 'gl',\n  18: 'hr',\n  48: 'kk',\n  78: 'km',\n  141: 'af',\n  19: 'zh-Hant',\n  49: 'az-Cyrl',\n  79: 'lo',\n  142: 'br',\n  20: 'ur',\n  50: 'az-Arab',\n  80: 'vi',\n  143: 'iu',\n  21: 'hi',\n  51: 'hy',\n  81: 'id',\n  144: 'gd',\n  22: 'th',\n  52: 'ka',\n  82: 'tl',\n  145: 'gv',\n  23: 'ko',\n  53: 'mo',\n  83: 'ms',\n  146: 'ga',\n  24: 'lt',\n  54: 'ky',\n  84: 'ms-Arab',\n  147: 'to',\n  25: 'pl',\n  55: 'tg',\n  85: 'am',\n  148: 'el-polyton',\n  26: 'hu',\n  56: 'tk',\n  86: 'ti',\n  149: 'kl',\n  27: 'es',\n  57: 'mn-CN',\n  87: 'om',\n  150: 'az',\n  28: 'lv',\n  58: 'mn',\n  88: 'so',\n  151: 'nn',\n  29: 'se',\n  59: 'ps',\n  89: 'sw'\n},\n// ISO (deprecated)\n[], {\n  // windows                                        \n  0x0436: 'af',\n  0x4009: 'en-IN',\n  0x0487: 'rw',\n  0x0432: 'tn',\n  0x041C: 'sq',\n  0x1809: 'en-IE',\n  0x0441: 'sw',\n  0x045B: 'si',\n  0x0484: 'gsw',\n  0x2009: 'en-JM',\n  0x0457: 'kok',\n  0x041B: 'sk',\n  0x045E: 'am',\n  0x4409: 'en-MY',\n  0x0412: 'ko',\n  0x0424: 'sl',\n  0x1401: 'ar-DZ',\n  0x1409: 'en-NZ',\n  0x0440: 'ky',\n  0x2C0A: 'es-AR',\n  0x3C01: 'ar-BH',\n  0x3409: 'en-PH',\n  0x0454: 'lo',\n  0x400A: 'es-BO',\n  0x0C01: 'ar',\n  0x4809: 'en-SG',\n  0x0426: 'lv',\n  0x340A: 'es-CL',\n  0x0801: 'ar-IQ',\n  0x1C09: 'en-ZA',\n  0x0427: 'lt',\n  0x240A: 'es-CO',\n  0x2C01: 'ar-JO',\n  0x2C09: 'en-TT',\n  0x082E: 'dsb',\n  0x140A: 'es-CR',\n  0x3401: 'ar-KW',\n  0x0809: 'en-GB',\n  0x046E: 'lb',\n  0x1C0A: 'es-DO',\n  0x3001: 'ar-LB',\n  0x0409: 'en',\n  0x042F: 'mk',\n  0x300A: 'es-EC',\n  0x1001: 'ar-LY',\n  0x3009: 'en-ZW',\n  0x083E: 'ms-BN',\n  0x440A: 'es-SV',\n  0x1801: 'ary',\n  0x0425: 'et',\n  0x043E: 'ms',\n  0x100A: 'es-GT',\n  0x2001: 'ar-OM',\n  0x0438: 'fo',\n  0x044C: 'ml',\n  0x480A: 'es-HN',\n  0x4001: 'ar-QA',\n  0x0464: 'fil',\n  0x043A: 'mt',\n  0x080A: 'es-MX',\n  0x0401: 'ar-SA',\n  0x040B: 'fi',\n  0x0481: 'mi',\n  0x4C0A: 'es-NI',\n  0x2801: 'ar-SY',\n  0x080C: 'fr-BE',\n  0x047A: 'arn',\n  0x180A: 'es-PA',\n  0x1C01: 'aeb',\n  0x0C0C: 'fr-CA',\n  0x044E: 'mr',\n  0x3C0A: 'es-PY',\n  0x3801: 'ar-AE',\n  0x040C: 'fr',\n  0x047C: 'moh',\n  0x280A: 'es-PE',\n  0x2401: 'ar-YE',\n  0x140C: 'fr-LU',\n  0x0450: 'mn',\n  0x500A: 'es-PR',\n  0x042B: 'hy',\n  0x180C: 'fr-MC',\n  0x0850: 'mn-CN',\n  0x0C0A: 'es',\n  0x044D: 'as',\n  0x100C: 'fr-CH',\n  0x0461: 'ne',\n  0x040A: 'es',\n  0x082C: 'az-Cyrl',\n  0x0462: 'fy',\n  0x0414: 'nb',\n  0x540A: 'es-US',\n  0x042C: 'az',\n  0x0456: 'gl',\n  0x0814: 'nn',\n  0x380A: 'es-UY',\n  0x046D: 'ba',\n  0x0437: 'ka',\n  0x0482: 'oc',\n  0x200A: 'es-VE',\n  0x042D: 'eu',\n  0x0C07: 'de-AT',\n  0x0448: 'or',\n  0x081D: 'sv-FI',\n  0x0423: 'be',\n  0x0407: 'de',\n  0x0463: 'ps',\n  0x041D: 'sv',\n  0x0845: 'bn',\n  0x1407: 'de-LI',\n  0x0415: 'pl',\n  0x045A: 'syr',\n  0x0445: 'bn-IN',\n  0x1007: 'de-LU',\n  0x0416: 'pt',\n  0x0428: 'tg',\n  0x201A: 'bs-Cyrl',\n  0x0807: 'de-CH',\n  0x0816: 'pt-PT',\n  0x085F: 'tzm',\n  0x141A: 'bs',\n  0x0408: 'el',\n  0x0446: 'pa',\n  0x0449: 'ta',\n  0x047E: 'br',\n  0x046F: 'kl',\n  0x046B: 'qu-BO',\n  0x0444: 'tt',\n  0x0402: 'bg',\n  0x0447: 'gu',\n  0x086B: 'qu-EC',\n  0x044A: 'te',\n  0x0403: 'ca',\n  0x0468: 'ha',\n  0x0C6B: 'qu',\n  0x041E: 'th',\n  0x0C04: 'zh-HK',\n  0x040D: 'he',\n  0x0418: 'ro',\n  0x0451: 'bo',\n  0x1404: 'zh-MO',\n  0x0439: 'hi',\n  0x0417: 'rm',\n  0x041F: 'tr',\n  0x0804: 'zh',\n  0x040E: 'hu',\n  0x0419: 'ru',\n  0x0442: 'tk',\n  0x1004: 'zh-SG',\n  0x040F: 'is',\n  0x243B: 'smn',\n  0x0480: 'ug',\n  0x0404: 'zh-TW',\n  0x0470: 'ig',\n  0x103B: 'smj-NO',\n  0x0422: 'uk',\n  0x0483: 'co',\n  0x0421: 'id',\n  0x143B: 'smj',\n  0x042E: 'hsb',\n  0x041A: 'hr',\n  0x045D: 'iu',\n  0x0C3B: 'se-FI',\n  0x0420: 'ur',\n  0x101A: 'hr-BA',\n  0x085D: 'iu-Latn',\n  0x043B: 'se',\n  0x0843: 'uz-Cyrl',\n  0x0405: 'cs',\n  0x083C: 'ga',\n  0x083B: 'se-SE',\n  0x0443: 'uz',\n  0x0406: 'da',\n  0x0434: 'xh',\n  0x203B: 'sms',\n  0x042A: 'vi',\n  0x048C: 'prs',\n  0x0435: 'zu',\n  0x183B: 'sma-NO',\n  0x0452: 'cy',\n  0x0465: 'dv',\n  0x0410: 'it',\n  0x1C3B: 'sms',\n  0x0488: 'wo',\n  0x0813: 'nl-BE',\n  0x0810: 'it-CH',\n  0x044F: 'sa',\n  0x0485: 'sah',\n  0x0413: 'nl',\n  0x0411: 'ja',\n  0x1C1A: 'sr-Cyrl-BA',\n  0x0478: 'ii',\n  0x0C09: 'en-AU',\n  0x044B: 'kn',\n  0x0C1A: 'sr',\n  0x046A: 'yo',\n  0x2809: 'en-BZ',\n  0x043F: 'kk',\n  0x181A: 'sr-Latn-BA',\n  0x1009: 'en-CA',\n  0x0453: 'km',\n  0x081A: 'sr-Latn',\n  0x2409: 'en-029',\n  0x0486: 'quc',\n  0x046C: 'nso'\n}];\nvar NameRecord = new r.Struct({\n  platformID: r.uint16,\n  encodingID: r.uint16,\n  languageID: r.uint16,\n  nameID: r.uint16,\n  length: r.uint16,\n  string: new r.Pointer(r.uint16, new r.String('length', function (t) {\n    return getEncoding(t.platformID, t.encodingID, t.languageID);\n  }), {\n    type: 'parent',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.parent.stringOffset;\n    },\n    allowNull: false\n  })\n});\nvar LangTagRecord = new r.Struct({\n  length: r.uint16,\n  tag: new r.Pointer(r.uint16, new r.String('length', 'utf16be'), {\n    type: 'parent',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.stringOffset;\n    }\n  })\n});\nvar NameTable = new r.VersionedStruct(r.uint16, {\n  0: {\n    count: r.uint16,\n    stringOffset: r.uint16,\n    records: new r.Array(NameRecord, 'count')\n  },\n  1: {\n    count: r.uint16,\n    stringOffset: r.uint16,\n    records: new r.Array(NameRecord, 'count'),\n    langTagCount: r.uint16,\n    langTags: new r.Array(LangTagRecord, 'langTagCount')\n  }\n});\nvar NAMES = ['copyright', 'fontFamily', 'fontSubfamily', 'uniqueSubfamily', 'fullName', 'version', 'postscriptName',\n// Note: A font may have only one PostScript name and that name must be ASCII.\n'trademark', 'manufacturer', 'designer', 'description', 'vendorURL', 'designerURL', 'license', 'licenseURL', null,\n// reserved\n'preferredFamily', 'preferredSubfamily', 'compatibleFull', 'sampleText', 'postscriptCIDFontName', 'wwsFamilyName', 'wwsSubfamilyName'];\nNameTable.process = function (stream) {\n  var records = {};\n  for (var _iterator = _createForOfIteratorHelperLoose(this.records), _step; !(_step = _iterator()).done;) {\n    var record = _step.value;\n    // find out what language this is for\n    var language = LANGUAGES[record.platformID][record.languageID];\n    if (language == null && this.langTags != null && record.languageID >= 0x8000) {\n      language = this.langTags[record.languageID - 0x8000].tag;\n    }\n    if (language == null) {\n      language = record.platformID + '-' + record.languageID;\n    } // if the nameID is >= 256, it is a font feature record (AAT)\n\n    var key = record.nameID >= 256 ? 'fontFeatures' : NAMES[record.nameID] || record.nameID;\n    if (records[key] == null) {\n      records[key] = {};\n    }\n    var obj = records[key];\n    if (record.nameID >= 256) {\n      obj = obj[record.nameID] || (obj[record.nameID] = {});\n    }\n    if (typeof record.string === 'string' || typeof obj[language] !== 'string') {\n      obj[language] = record.string;\n    }\n  }\n  this.records = records;\n};\nNameTable.preEncode = function () {\n  if (Array.isArray(this.records)) return;\n  this.version = 0;\n  var records = [];\n  for (var key in this.records) {\n    var val = this.records[key];\n    if (key === 'fontFeatures') continue;\n    records.push({\n      platformID: 3,\n      encodingID: 1,\n      languageID: 0x409,\n      nameID: NAMES.indexOf(key),\n      length: Buffer.byteLength(val.en, 'utf16le'),\n      string: val.en\n    });\n    if (key === 'postscriptName') {\n      records.push({\n        platformID: 1,\n        encodingID: 0,\n        languageID: 0,\n        nameID: NAMES.indexOf(key),\n        length: val.en.length,\n        string: val.en\n      });\n    }\n  }\n  this.records = records;\n  this.count = records.length;\n  this.stringOffset = NameTable.size(this, null, false);\n};\nvar OS2 = new r.VersionedStruct(r.uint16, {\n  header: {\n    xAvgCharWidth: r.int16,\n    // average weighted advance width of lower case letters and space\n    usWeightClass: r.uint16,\n    // visual weight of stroke in glyphs\n    usWidthClass: r.uint16,\n    // relative change from the normal aspect ratio (width to height ratio)\n    fsType: new r.Bitfield(r.uint16, [\n    // Indicates font embedding licensing rights\n    null, 'noEmbedding', 'viewOnly', 'editable', null, null, null, null, 'noSubsetting', 'bitmapOnly']),\n    ySubscriptXSize: r.int16,\n    // recommended horizontal size in pixels for subscripts\n    ySubscriptYSize: r.int16,\n    // recommended vertical size in pixels for subscripts\n    ySubscriptXOffset: r.int16,\n    // recommended horizontal offset for subscripts\n    ySubscriptYOffset: r.int16,\n    // recommended vertical offset form the baseline for subscripts\n    ySuperscriptXSize: r.int16,\n    // recommended horizontal size in pixels for superscripts\n    ySuperscriptYSize: r.int16,\n    // recommended vertical size in pixels for superscripts\n    ySuperscriptXOffset: r.int16,\n    // recommended horizontal offset for superscripts\n    ySuperscriptYOffset: r.int16,\n    // recommended vertical offset from the baseline for superscripts\n    yStrikeoutSize: r.int16,\n    // width of the strikeout stroke\n    yStrikeoutPosition: r.int16,\n    // position of the strikeout stroke relative to the baseline\n    sFamilyClass: r.int16,\n    // classification of font-family design\n    panose: new r.Array(r.uint8, 10),\n    // describe the visual characteristics of a given typeface\n    ulCharRange: new r.Array(r.uint32, 4),\n    vendorID: new r.String(4),\n    // four character identifier for the font vendor\n    fsSelection: new r.Bitfield(r.uint16, [\n    // bit field containing information about the font\n    'italic', 'underscore', 'negative', 'outlined', 'strikeout', 'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique']),\n    usFirstCharIndex: r.uint16,\n    // The minimum Unicode index in this font\n    usLastCharIndex: r.uint16 // The maximum Unicode index in this font\n  },\n\n  // The Apple version of this table ends here, but the Microsoft one continues on...\n  0: {},\n  1: {\n    typoAscender: r.int16,\n    typoDescender: r.int16,\n    typoLineGap: r.int16,\n    winAscent: r.uint16,\n    winDescent: r.uint16,\n    codePageRange: new r.Array(r.uint32, 2)\n  },\n  2: {\n    // these should be common with version 1 somehow\n    typoAscender: r.int16,\n    typoDescender: r.int16,\n    typoLineGap: r.int16,\n    winAscent: r.uint16,\n    winDescent: r.uint16,\n    codePageRange: new r.Array(r.uint32, 2),\n    xHeight: r.int16,\n    capHeight: r.int16,\n    defaultChar: r.uint16,\n    breakChar: r.uint16,\n    maxContent: r.uint16\n  },\n  5: {\n    typoAscender: r.int16,\n    typoDescender: r.int16,\n    typoLineGap: r.int16,\n    winAscent: r.uint16,\n    winDescent: r.uint16,\n    codePageRange: new r.Array(r.uint32, 2),\n    xHeight: r.int16,\n    capHeight: r.int16,\n    defaultChar: r.uint16,\n    breakChar: r.uint16,\n    maxContent: r.uint16,\n    usLowerOpticalPointSize: r.uint16,\n    usUpperOpticalPointSize: r.uint16\n  }\n});\nvar versions = OS2.versions;\nversions[3] = versions[4] = versions[2];\nvar post = new r.VersionedStruct(r.fixed32, {\n  header: {\n    // these fields exist at the top of all versions\n    italicAngle: r.fixed32,\n    // Italic angle in counter-clockwise degrees from the vertical.\n    underlinePosition: r.int16,\n    // Suggested distance of the top of the underline from the baseline\n    underlineThickness: r.int16,\n    // Suggested values for the underline thickness\n    isFixedPitch: r.uint32,\n    // Whether the font is monospaced\n    minMemType42: r.uint32,\n    // Minimum memory usage when a TrueType font is downloaded as a Type 42 font\n    maxMemType42: r.uint32,\n    // Maximum memory usage when a TrueType font is downloaded as a Type 42 font\n    minMemType1: r.uint32,\n    // Minimum memory usage when a TrueType font is downloaded as a Type 1 font\n    maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font\n  },\n\n  1: {},\n  // version 1 has no additional fields\n  2: {\n    numberOfGlyphs: r.uint16,\n    glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'),\n    names: new r.Array(new r.String(r.uint8))\n  },\n  2.5: {\n    numberOfGlyphs: r.uint16,\n    offsets: new r.Array(r.uint8, 'numberOfGlyphs')\n  },\n  3: {},\n  // version 3 has no additional fields\n  4: {\n    map: new r.Array(r.uint32, function (t) {\n      return t.parent.maxp.numGlyphs;\n    })\n  }\n});\nvar cvt = new r.Struct({\n  controlValues: new r.Array(r.int16)\n});\n\n// These instructions are known as the font program. The main use of this table\n// is for the definition of functions that are used in many different glyph programs.\n\nvar fpgm = new r.Struct({\n  instructions: new r.Array(r.uint8)\n});\nvar loca = new r.VersionedStruct('head.indexToLocFormat', {\n  0: {\n    offsets: new r.Array(r.uint16)\n  },\n  1: {\n    offsets: new r.Array(r.uint32)\n  }\n});\nloca.process = function () {\n  if (this.version === 0) {\n    for (var i = 0; i < this.offsets.length; i++) {\n      this.offsets[i] <<= 1;\n    }\n  }\n};\nloca.preEncode = function () {\n  if (this.version === 0) {\n    for (var i = 0; i < this.offsets.length; i++) {\n      this.offsets[i] >>>= 1;\n    }\n  }\n};\nvar prep = new r.Struct({\n  controlValueProgram: new r.Array(r.uint8)\n});\nvar glyf = new r.Array(new r.Buffer());\nvar CFFIndex = /*#__PURE__*/function () {\n  function CFFIndex(type) {\n    this.type = type;\n  }\n  var _proto = CFFIndex.prototype;\n  _proto.getCFFVersion = function getCFFVersion(ctx) {\n    while (ctx && !ctx.hdrSize) {\n      ctx = ctx.parent;\n    }\n    return ctx ? ctx.version : -1;\n  };\n  _proto.decode = function decode(stream, parent) {\n    var version = this.getCFFVersion(parent);\n    var count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE();\n    if (count === 0) {\n      return [];\n    }\n    var offSize = stream.readUInt8();\n    var offsetType;\n    if (offSize === 1) {\n      offsetType = r.uint8;\n    } else if (offSize === 2) {\n      offsetType = r.uint16;\n    } else if (offSize === 3) {\n      offsetType = r.uint24;\n    } else if (offSize === 4) {\n      offsetType = r.uint32;\n    } else {\n      throw new Error(\"Bad offset size in CFFIndex: \".concat(offSize, \" \").concat(stream.pos));\n    }\n    var ret = [];\n    var startPos = stream.pos + (count + 1) * offSize - 1;\n    var start = offsetType.decode(stream);\n    for (var i = 0; i < count; i++) {\n      var end = offsetType.decode(stream);\n      if (this.type != null) {\n        var pos = stream.pos;\n        stream.pos = startPos + start;\n        parent.length = end - start;\n        ret.push(this.type.decode(stream, parent));\n        stream.pos = pos;\n      } else {\n        ret.push({\n          offset: startPos + start,\n          length: end - start\n        });\n      }\n      start = end;\n    }\n    stream.pos = startPos + start;\n    return ret;\n  };\n  _proto.size = function size(arr, parent) {\n    var size = 2;\n    if (arr.length === 0) {\n      return size;\n    }\n    var type = this.type || new r.Buffer(); // find maximum offset to detminine offset type\n\n    var offset = 1;\n    for (var i = 0; i < arr.length; i++) {\n      var item = arr[i];\n      offset += type.size(item, parent);\n    }\n    var offsetType;\n    if (offset <= 0xff) {\n      offsetType = r.uint8;\n    } else if (offset <= 0xffff) {\n      offsetType = r.uint16;\n    } else if (offset <= 0xffffff) {\n      offsetType = r.uint24;\n    } else if (offset <= 0xffffffff) {\n      offsetType = r.uint32;\n    } else {\n      throw new Error(\"Bad offset in CFFIndex\");\n    }\n    size += 1 + offsetType.size() * (arr.length + 1);\n    size += offset - 1;\n    return size;\n  };\n  _proto.encode = function encode(stream, arr, parent) {\n    stream.writeUInt16BE(arr.length);\n    if (arr.length === 0) {\n      return;\n    }\n    var type = this.type || new r.Buffer(); // find maximum offset to detminine offset type\n\n    var sizes = [];\n    var offset = 1;\n    for (var _iterator2 = _createForOfIteratorHelperLoose(arr), _step2; !(_step2 = _iterator2()).done;) {\n      var item = _step2.value;\n      var s = type.size(item, parent);\n      sizes.push(s);\n      offset += s;\n    }\n    var offsetType;\n    if (offset <= 0xff) {\n      offsetType = r.uint8;\n    } else if (offset <= 0xffff) {\n      offsetType = r.uint16;\n    } else if (offset <= 0xffffff) {\n      offsetType = r.uint24;\n    } else if (offset <= 0xffffffff) {\n      offsetType = r.uint32;\n    } else {\n      throw new Error(\"Bad offset in CFFIndex\");\n    } // write offset size\n\n    stream.writeUInt8(offsetType.size()); // write elements\n\n    offset = 1;\n    offsetType.encode(stream, offset);\n    for (var _i22 = 0, _sizes = sizes; _i22 < _sizes.length; _i22++) {\n      var size = _sizes[_i22];\n      offset += size;\n      offsetType.encode(stream, offset);\n    }\n    for (var _iterator3 = _createForOfIteratorHelperLoose(arr), _step3; !(_step3 = _iterator3()).done;) {\n      var _item = _step3.value;\n      type.encode(stream, _item, parent);\n    }\n    return;\n  };\n  return CFFIndex;\n}();\nvar FLOAT_EOF = 0xf;\nvar FLOAT_LOOKUP = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'E', 'E-', null, '-'];\nvar FLOAT_ENCODE_LOOKUP = {\n  '.': 10,\n  'E': 11,\n  'E-': 12,\n  '-': 14\n};\nvar CFFOperand = /*#__PURE__*/function () {\n  function CFFOperand() {}\n  CFFOperand.decode = function decode(stream, value) {\n    if (32 <= value && value <= 246) {\n      return value - 139;\n    }\n    if (247 <= value && value <= 250) {\n      return (value - 247) * 256 + stream.readUInt8() + 108;\n    }\n    if (251 <= value && value <= 254) {\n      return -(value - 251) * 256 - stream.readUInt8() - 108;\n    }\n    if (value === 28) {\n      return stream.readInt16BE();\n    }\n    if (value === 29) {\n      return stream.readInt32BE();\n    }\n    if (value === 30) {\n      var str = '';\n      while (true) {\n        var b = stream.readUInt8();\n        var n1 = b >> 4;\n        if (n1 === FLOAT_EOF) {\n          break;\n        }\n        str += FLOAT_LOOKUP[n1];\n        var n2 = b & 15;\n        if (n2 === FLOAT_EOF) {\n          break;\n        }\n        str += FLOAT_LOOKUP[n2];\n      }\n      return parseFloat(str);\n    }\n    return null;\n  };\n  CFFOperand.size = function size(value) {\n    // if the value needs to be forced to the largest size (32 bit)\n    // e.g. for unknown pointers, set to 32768\n    if (value.forceLarge) {\n      value = 32768;\n    }\n    if ((value | 0) !== value) {\n      // floating point\n      var str = '' + value;\n      return 1 + Math.ceil((str.length + 1) / 2);\n    } else if (-107 <= value && value <= 107) {\n      return 1;\n    } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) {\n      return 2;\n    } else if (-32768 <= value && value <= 32767) {\n      return 3;\n    } else {\n      return 5;\n    }\n  };\n  CFFOperand.encode = function encode(stream, value) {\n    // if the value needs to be forced to the largest size (32 bit)\n    // e.g. for unknown pointers, save the old value and set to 32768\n    var val = Number(value);\n    if (value.forceLarge) {\n      stream.writeUInt8(29);\n      return stream.writeInt32BE(val);\n    } else if ((val | 0) !== val) {\n      // floating point\n      stream.writeUInt8(30);\n      var str = '' + val;\n      for (var i = 0; i < str.length; i += 2) {\n        var c1 = str[i];\n        var n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1;\n        if (i === str.length - 1) {\n          var n2 = FLOAT_EOF;\n        } else {\n          var c2 = str[i + 1];\n          var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2;\n        }\n        stream.writeUInt8(n1 << 4 | n2 & 15);\n      }\n      if (n2 !== FLOAT_EOF) {\n        return stream.writeUInt8(FLOAT_EOF << 4);\n      }\n    } else if (-107 <= val && val <= 107) {\n      return stream.writeUInt8(val + 139);\n    } else if (108 <= val && val <= 1131) {\n      val -= 108;\n      stream.writeUInt8((val >> 8) + 247);\n      return stream.writeUInt8(val & 0xff);\n    } else if (-1131 <= val && val <= -108) {\n      val = -val - 108;\n      stream.writeUInt8((val >> 8) + 251);\n      return stream.writeUInt8(val & 0xff);\n    } else if (-32768 <= val && val <= 32767) {\n      stream.writeUInt8(28);\n      return stream.writeInt16BE(val);\n    } else {\n      stream.writeUInt8(29);\n      return stream.writeInt32BE(val);\n    }\n  };\n  return CFFOperand;\n}();\nvar CFFDict = /*#__PURE__*/function () {\n  function CFFDict(ops) {\n    if (ops === void 0) {\n      ops = [];\n    }\n    this.ops = ops;\n    this.fields = {};\n    for (var _iterator4 = _createForOfIteratorHelperLoose(ops), _step4; !(_step4 = _iterator4()).done;) {\n      var field = _step4.value;\n      var key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0];\n      this.fields[key] = field;\n    }\n  }\n  var _proto2 = CFFDict.prototype;\n  _proto2.decodeOperands = function decodeOperands(type, stream, ret, operands) {\n    var _this = this;\n    if (Array.isArray(type)) {\n      return operands.map(function (op, i) {\n        return _this.decodeOperands(type[i], stream, ret, [op]);\n      });\n    } else if (type.decode != null) {\n      return type.decode(stream, ret, operands);\n    } else {\n      switch (type) {\n        case 'number':\n        case 'offset':\n        case 'sid':\n          return operands[0];\n        case 'boolean':\n          return !!operands[0];\n        default:\n          return operands;\n      }\n    }\n  };\n  _proto2.encodeOperands = function encodeOperands(type, stream, ctx, operands) {\n    var _this2 = this;\n    if (Array.isArray(type)) {\n      return operands.map(function (op, i) {\n        return _this2.encodeOperands(type[i], stream, ctx, op)[0];\n      });\n    } else if (type.encode != null) {\n      return type.encode(stream, operands, ctx);\n    } else if (typeof operands === 'number') {\n      return [operands];\n    } else if (typeof operands === 'boolean') {\n      return [+operands];\n    } else if (Array.isArray(operands)) {\n      return operands;\n    } else {\n      return [operands];\n    }\n  };\n  _proto2.decode = function decode(stream, parent) {\n    var end = stream.pos + parent.length;\n    var ret = {};\n    var operands = []; // define hidden properties\n\n    Object.defineProperties(ret, {\n      parent: {\n        value: parent\n      },\n      _startOffset: {\n        value: stream.pos\n      }\n    }); // fill in defaults\n\n    for (var key in this.fields) {\n      var field = this.fields[key];\n      ret[field[1]] = field[3];\n    }\n    while (stream.pos < end) {\n      var b = stream.readUInt8();\n      if (b < 28) {\n        if (b === 12) {\n          b = b << 8 | stream.readUInt8();\n        }\n        var _field = this.fields[b];\n        if (!_field) {\n          throw new Error(\"Unknown operator \".concat(b));\n        }\n        var val = this.decodeOperands(_field[2], stream, ret, operands);\n        if (val != null) {\n          if (val instanceof utils.PropertyDescriptor) {\n            Object.defineProperty(ret, _field[1], val);\n          } else {\n            ret[_field[1]] = val;\n          }\n        }\n        operands = [];\n      } else {\n        operands.push(CFFOperand.decode(stream, b));\n      }\n    }\n    return ret;\n  };\n  _proto2.size = function size(dict, parent, includePointers) {\n    if (includePointers === void 0) {\n      includePointers = true;\n    }\n    var ctx = {\n      parent: parent,\n      val: dict,\n      pointerSize: 0,\n      startOffset: parent.startOffset || 0\n    };\n    var len = 0;\n    for (var k in this.fields) {\n      var field = this.fields[k];\n      var val = dict[field[1]];\n      if (val == null || isEqual(val, field[3])) {\n        continue;\n      }\n      var operands = this.encodeOperands(field[2], null, ctx, val);\n      for (var _iterator5 = _createForOfIteratorHelperLoose(operands), _step5; !(_step5 = _iterator5()).done;) {\n        var op = _step5.value;\n        len += CFFOperand.size(op);\n      }\n      var key = Array.isArray(field[0]) ? field[0] : [field[0]];\n      len += key.length;\n    }\n    if (includePointers) {\n      len += ctx.pointerSize;\n    }\n    return len;\n  };\n  _proto2.encode = function encode(stream, dict, parent) {\n    var ctx = {\n      pointers: [],\n      startOffset: stream.pos,\n      parent: parent,\n      val: dict,\n      pointerSize: 0\n    };\n    ctx.pointerOffset = stream.pos + this.size(dict, ctx, false);\n    for (var _iterator6 = _createForOfIteratorHelperLoose(this.ops), _step6; !(_step6 = _iterator6()).done;) {\n      var field = _step6.value;\n      var val = dict[field[1]];\n      if (val == null || isEqual(val, field[3])) {\n        continue;\n      }\n      var operands = this.encodeOperands(field[2], stream, ctx, val);\n      for (var _iterator7 = _createForOfIteratorHelperLoose(operands), _step7; !(_step7 = _iterator7()).done;) {\n        var op = _step7.value;\n        CFFOperand.encode(stream, op);\n      }\n      var key = Array.isArray(field[0]) ? field[0] : [field[0]];\n      for (var _iterator8 = _createForOfIteratorHelperLoose(key), _step8; !(_step8 = _iterator8()).done;) {\n        var _op = _step8.value;\n        stream.writeUInt8(_op);\n      }\n    }\n    var i = 0;\n    while (i < ctx.pointers.length) {\n      var ptr = ctx.pointers[i++];\n      ptr.type.encode(stream, ptr.val, ptr.parent);\n    }\n    return;\n  };\n  return CFFDict;\n}();\nvar CFFPointer = /*#__PURE__*/function (_r$Pointer) {\n  _inheritsLoose(CFFPointer, _r$Pointer);\n  function CFFPointer(type, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    if (options.type == null) {\n      options.type = 'global';\n    }\n    return _r$Pointer.call(this, null, type, options) || this;\n  }\n  var _proto3 = CFFPointer.prototype;\n  _proto3.decode = function decode(stream, parent, operands) {\n    this.offsetType = {\n      decode: function decode() {\n        return operands[0];\n      }\n    };\n    return _r$Pointer.prototype.decode.call(this, stream, parent, operands);\n  };\n  _proto3.encode = function encode(stream, value, ctx) {\n    if (!stream) {\n      // compute the size (so ctx.pointerSize is correct)\n      this.offsetType = {\n        size: function size() {\n          return 0;\n        }\n      };\n      this.size(value, ctx);\n      return [new Ptr(0)];\n    }\n    var ptr = null;\n    this.offsetType = {\n      encode: function encode(stream, val) {\n        return ptr = val;\n      }\n    };\n    _r$Pointer.prototype.encode.call(this, stream, value, ctx);\n    return [new Ptr(ptr)];\n  };\n  return CFFPointer;\n}(r.Pointer);\nvar Ptr = /*#__PURE__*/function () {\n  function Ptr(val) {\n    this.val = val;\n    this.forceLarge = true;\n  }\n  var _proto4 = Ptr.prototype;\n  _proto4.valueOf = function valueOf() {\n    return this.val;\n  };\n  return Ptr;\n}();\nvar CFFBlendOp = /*#__PURE__*/function () {\n  function CFFBlendOp() {}\n  CFFBlendOp.decode = function decode(stream, parent, operands) {\n    var numBlends = operands.pop(); // TODO: actually blend. For now just consume the deltas\n    // since we don't use any of the values anyway.\n\n    while (operands.length > numBlends) {\n      operands.pop();\n    }\n  };\n  return CFFBlendOp;\n}();\nvar CFFPrivateDict = new CFFDict([\n// key       name                    type                                          default\n[6, 'BlueValues', 'delta', null], [7, 'OtherBlues', 'delta', null], [8, 'FamilyBlues', 'delta', null], [9, 'FamilyOtherBlues', 'delta', null], [[12, 9], 'BlueScale', 'number', 0.039625], [[12, 10], 'BlueShift', 'number', 7], [[12, 11], 'BlueFuzz', 'number', 1], [10, 'StdHW', 'number', null], [11, 'StdVW', 'number', null], [[12, 12], 'StemSnapH', 'delta', null], [[12, 13], 'StemSnapV', 'delta', null], [[12, 14], 'ForceBold', 'boolean', false], [[12, 17], 'LanguageGroup', 'number', 0], [[12, 18], 'ExpansionFactor', 'number', 0.06], [[12, 19], 'initialRandomSeed', 'number', 0], [20, 'defaultWidthX', 'number', 0], [21, 'nominalWidthX', 'number', 0], [22, 'vsindex', 'number', 0], [23, 'blend', CFFBlendOp, null], [19, 'Subrs', new CFFPointer(new CFFIndex(), {\n  type: 'local'\n}), null]]);\n\n// Automatically generated from Appendix A of the CFF specification; do\n// not edit. Length should be 391.\nvar standardStrings = [\".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\", \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\", \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\", \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\", \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\", \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\", \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\", \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\", \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\", \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\", \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\", \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\", \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\", \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\", \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\", \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\", \"ydieresis\", \"zcaron\", \"exclamsmall\", \"Hungarumlautsmall\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\", \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\", \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\", \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\", \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\", \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\", \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\", \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\", \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\", \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\", \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\", \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\", \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\", \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\", \"Black\", \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"];\nvar StandardEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', 'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls'];\nvar ExpertEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior', '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '', '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];\nvar ISOAdobeCharset = ['.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron'];\nvar ExpertCharset = ['.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];\nvar ExpertSubsetCharset = ['.notdef', 'space', 'dollaroldstyle', 'dollarsuperior', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted', 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter', 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior'];\n\n// Scripts and Languages #\n//########################\n\nvar LangSysTable = new r.Struct({\n  reserved: new r.Reserved(r.uint16),\n  reqFeatureIndex: r.uint16,\n  featureCount: r.uint16,\n  featureIndexes: new r.Array(r.uint16, 'featureCount')\n});\nvar LangSysRecord = new r.Struct({\n  tag: new r.String(4),\n  langSys: new r.Pointer(r.uint16, LangSysTable, {\n    type: 'parent'\n  })\n});\nvar Script = new r.Struct({\n  defaultLangSys: new r.Pointer(r.uint16, LangSysTable),\n  count: r.uint16,\n  langSysRecords: new r.Array(LangSysRecord, 'count')\n});\nvar ScriptRecord = new r.Struct({\n  tag: new r.String(4),\n  script: new r.Pointer(r.uint16, Script, {\n    type: 'parent'\n  })\n});\nvar ScriptList = new r.Array(ScriptRecord, r.uint16); //#######################\n// Features and Lookups #\n//#######################\n\nvar Feature = new r.Struct({\n  featureParams: r.uint16,\n  // pointer\n  lookupCount: r.uint16,\n  lookupListIndexes: new r.Array(r.uint16, 'lookupCount')\n});\nvar FeatureRecord = new r.Struct({\n  tag: new r.String(4),\n  feature: new r.Pointer(r.uint16, Feature, {\n    type: 'parent'\n  })\n});\nvar FeatureList = new r.Array(FeatureRecord, r.uint16);\nvar LookupFlags = new r.Struct({\n  markAttachmentType: r.uint8,\n  flags: new r.Bitfield(r.uint8, ['rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures', 'ignoreMarks', 'useMarkFilteringSet'])\n});\nfunction LookupList(SubTable) {\n  var Lookup = new r.Struct({\n    lookupType: r.uint16,\n    flags: LookupFlags,\n    subTableCount: r.uint16,\n    subTables: new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'),\n    markFilteringSet: new r.Optional(r.uint16, function (t) {\n      return t.flags.flags.useMarkFilteringSet;\n    })\n  });\n  return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16);\n} //#################\n// Coverage Table #\n//#################\n\nvar RangeRecord = new r.Struct({\n  start: r.uint16,\n  end: r.uint16,\n  startCoverageIndex: r.uint16\n});\nvar Coverage = new r.VersionedStruct(r.uint16, {\n  1: {\n    glyphCount: r.uint16,\n    glyphs: new r.Array(r.uint16, 'glyphCount')\n  },\n  2: {\n    rangeCount: r.uint16,\n    rangeRecords: new r.Array(RangeRecord, 'rangeCount')\n  }\n}); //#########################\n// Class Definition Table #\n//#########################\n\nvar ClassRangeRecord = new r.Struct({\n  start: r.uint16,\n  end: r.uint16,\n  class: r.uint16\n});\nvar ClassDef = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Class array\n    startGlyph: r.uint16,\n    glyphCount: r.uint16,\n    classValueArray: new r.Array(r.uint16, 'glyphCount')\n  },\n  2: {\n    // Class ranges\n    classRangeCount: r.uint16,\n    classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount')\n  }\n}); //###############\n// Device Table #\n//###############\n\nvar Device = new r.Struct({\n  a: r.uint16,\n  // startSize for hinting Device, outerIndex for VariationIndex\n  b: r.uint16,\n  // endSize for Device, innerIndex for VariationIndex\n  deltaFormat: r.uint16\n}); //#############################################\n// Contextual Substitution/Positioning Tables #\n//#############################################\n\nvar LookupRecord = new r.Struct({\n  sequenceIndex: r.uint16,\n  lookupListIndex: r.uint16\n});\nvar Rule = new r.Struct({\n  glyphCount: r.uint16,\n  lookupCount: r.uint16,\n  input: new r.Array(r.uint16, function (t) {\n    return t.glyphCount - 1;\n  }),\n  lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16);\nvar ClassRule = new r.Struct({\n  glyphCount: r.uint16,\n  lookupCount: r.uint16,\n  classes: new r.Array(r.uint16, function (t) {\n    return t.glyphCount - 1;\n  }),\n  lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16);\nvar Context = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Simple context\n    coverage: new r.Pointer(r.uint16, Coverage),\n    ruleSetCount: r.uint16,\n    ruleSets: new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount')\n  },\n  2: {\n    // Class-based context\n    coverage: new r.Pointer(r.uint16, Coverage),\n    classDef: new r.Pointer(r.uint16, ClassDef),\n    classSetCnt: r.uint16,\n    classSet: new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt')\n  },\n  3: {\n    glyphCount: r.uint16,\n    lookupCount: r.uint16,\n    coverages: new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'),\n    lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n  }\n}); //######################################################\n// Chaining Contextual Substitution/Positioning Tables #\n//######################################################\n\nvar ChainRule = new r.Struct({\n  backtrackGlyphCount: r.uint16,\n  backtrack: new r.Array(r.uint16, 'backtrackGlyphCount'),\n  inputGlyphCount: r.uint16,\n  input: new r.Array(r.uint16, function (t) {\n    return t.inputGlyphCount - 1;\n  }),\n  lookaheadGlyphCount: r.uint16,\n  lookahead: new r.Array(r.uint16, 'lookaheadGlyphCount'),\n  lookupCount: r.uint16,\n  lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16);\nvar ChainingContext = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Simple context glyph substitution\n    coverage: new r.Pointer(r.uint16, Coverage),\n    chainCount: r.uint16,\n    chainRuleSets: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n  },\n  2: {\n    // Class-based chaining context\n    coverage: new r.Pointer(r.uint16, Coverage),\n    backtrackClassDef: new r.Pointer(r.uint16, ClassDef),\n    inputClassDef: new r.Pointer(r.uint16, ClassDef),\n    lookaheadClassDef: new r.Pointer(r.uint16, ClassDef),\n    chainCount: r.uint16,\n    chainClassSet: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n  },\n  3: {\n    // Coverage-based chaining context\n    backtrackGlyphCount: r.uint16,\n    backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n    inputGlyphCount: r.uint16,\n    inputCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'),\n    lookaheadGlyphCount: r.uint16,\n    lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n    lookupCount: r.uint16,\n    lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n  }\n});\n\n/*******************\n * Variation Store *\n *******************/\n\nvar F2DOT14 = new r.Fixed(16, 'BE', 14);\nvar RegionAxisCoordinates = new r.Struct({\n  startCoord: F2DOT14,\n  peakCoord: F2DOT14,\n  endCoord: F2DOT14\n});\nvar VariationRegionList = new r.Struct({\n  axisCount: r.uint16,\n  regionCount: r.uint16,\n  variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount')\n});\nvar DeltaSet = new r.Struct({\n  shortDeltas: new r.Array(r.int16, function (t) {\n    return t.parent.shortDeltaCount;\n  }),\n  regionDeltas: new r.Array(r.int8, function (t) {\n    return t.parent.regionIndexCount - t.parent.shortDeltaCount;\n  }),\n  deltas: function deltas(t) {\n    return t.shortDeltas.concat(t.regionDeltas);\n  }\n});\nvar ItemVariationData = new r.Struct({\n  itemCount: r.uint16,\n  shortDeltaCount: r.uint16,\n  regionIndexCount: r.uint16,\n  regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),\n  deltaSets: new r.Array(DeltaSet, 'itemCount')\n});\nvar ItemVariationStore = new r.Struct({\n  format: r.uint16,\n  variationRegionList: new r.Pointer(r.uint32, VariationRegionList),\n  variationDataCount: r.uint16,\n  itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')\n});\n/**********************\n * Feature Variations *\n **********************/\n\nvar ConditionTable = new r.VersionedStruct(r.uint16, {\n  1: (_ = {\n    axisIndex: r.uint16\n  }, _[\"axisIndex\"] = r.uint16, _.filterRangeMinValue = F2DOT14, _.filterRangeMaxValue = F2DOT14, _)\n});\nvar ConditionSet = new r.Struct({\n  conditionCount: r.uint16,\n  conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')\n});\nvar FeatureTableSubstitutionRecord = new r.Struct({\n  featureIndex: r.uint16,\n  alternateFeatureTable: new r.Pointer(r.uint32, Feature, {\n    type: 'parent'\n  })\n});\nvar FeatureTableSubstitution = new r.Struct({\n  version: r.fixed32,\n  substitutionCount: r.uint16,\n  substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount')\n});\nvar FeatureVariationRecord = new r.Struct({\n  conditionSet: new r.Pointer(r.uint32, ConditionSet, {\n    type: 'parent'\n  }),\n  featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, {\n    type: 'parent'\n  })\n});\nvar FeatureVariations = new r.Struct({\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  featureVariationRecordCount: r.uint32,\n  featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount')\n});\n\n// otherwise delegates to the provided type.\nvar PredefinedOp = /*#__PURE__*/function () {\n  function PredefinedOp(predefinedOps, type) {\n    this.predefinedOps = predefinedOps;\n    this.type = type;\n  }\n  var _proto5 = PredefinedOp.prototype;\n  _proto5.decode = function decode(stream, parent, operands) {\n    if (this.predefinedOps[operands[0]]) {\n      return this.predefinedOps[operands[0]];\n    }\n    return this.type.decode(stream, parent, operands);\n  };\n  _proto5.size = function size(value, ctx) {\n    return this.type.size(value, ctx);\n  };\n  _proto5.encode = function encode(stream, value, ctx) {\n    var index = this.predefinedOps.indexOf(value);\n    if (index !== -1) {\n      return index;\n    }\n    return this.type.encode(stream, value, ctx);\n  };\n  return PredefinedOp;\n}();\nvar CFFEncodingVersion = /*#__PURE__*/function (_r$Number) {\n  _inheritsLoose(CFFEncodingVersion, _r$Number);\n  function CFFEncodingVersion() {\n    return _r$Number.call(this, 'UInt8') || this;\n  }\n  var _proto6 = CFFEncodingVersion.prototype;\n  _proto6.decode = function decode(stream) {\n    return r.uint8.decode(stream) & 0x7f;\n  };\n  return CFFEncodingVersion;\n}(r.Number);\nvar Range1 = new r.Struct({\n  first: r.uint16,\n  nLeft: r.uint8\n});\nvar Range2 = new r.Struct({\n  first: r.uint16,\n  nLeft: r.uint16\n});\nvar CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), {\n  0: {\n    nCodes: r.uint8,\n    codes: new r.Array(r.uint8, 'nCodes')\n  },\n  1: {\n    nRanges: r.uint8,\n    ranges: new r.Array(Range1, 'nRanges')\n  } // TODO: supplement?\n});\n\nvar CFFEncoding = new PredefinedOp([StandardEncoding, ExpertEncoding], new CFFPointer(CFFCustomEncoding, {\n  lazy: true\n})); // Decodes an array of ranges until the total\n// length is equal to the provided length.\nvar RangeArray = /*#__PURE__*/function (_r$Array) {\n  _inheritsLoose(RangeArray, _r$Array);\n  function RangeArray() {\n    return _r$Array.apply(this, arguments) || this;\n  }\n  var _proto7 = RangeArray.prototype;\n  _proto7.decode = function decode(stream, parent) {\n    var length = utils.resolveLength(this.length, stream, parent);\n    var count = 0;\n    var res = [];\n    while (count < length) {\n      var range = this.type.decode(stream, parent);\n      range.offset = count;\n      count += range.nLeft + 1;\n      res.push(range);\n    }\n    return res;\n  };\n  return RangeArray;\n}(r.Array);\nvar CFFCustomCharset = new r.VersionedStruct(r.uint8, {\n  0: {\n    glyphs: new r.Array(r.uint16, function (t) {\n      return t.parent.CharStrings.length - 1;\n    })\n  },\n  1: {\n    ranges: new RangeArray(Range1, function (t) {\n      return t.parent.CharStrings.length - 1;\n    })\n  },\n  2: {\n    ranges: new RangeArray(Range2, function (t) {\n      return t.parent.CharStrings.length - 1;\n    })\n  }\n});\nvar CFFCharset = new PredefinedOp([ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset], new CFFPointer(CFFCustomCharset, {\n  lazy: true\n}));\nvar FDRange3 = new r.Struct({\n  first: r.uint16,\n  fd: r.uint8\n});\nvar FDRange4 = new r.Struct({\n  first: r.uint32,\n  fd: r.uint16\n});\nvar FDSelect = new r.VersionedStruct(r.uint8, {\n  0: {\n    fds: new r.Array(r.uint8, function (t) {\n      return t.parent.CharStrings.length;\n    })\n  },\n  3: {\n    nRanges: r.uint16,\n    ranges: new r.Array(FDRange3, 'nRanges'),\n    sentinel: r.uint16\n  },\n  4: {\n    nRanges: r.uint32,\n    ranges: new r.Array(FDRange4, 'nRanges'),\n    sentinel: r.uint32\n  }\n});\nvar ptr = new CFFPointer(CFFPrivateDict);\nvar CFFPrivateOp = /*#__PURE__*/function () {\n  function CFFPrivateOp() {}\n  var _proto8 = CFFPrivateOp.prototype;\n  _proto8.decode = function decode(stream, parent, operands) {\n    parent.length = operands[0];\n    return ptr.decode(stream, parent, [operands[1]]);\n  };\n  _proto8.size = function size(dict, ctx) {\n    return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]];\n  };\n  _proto8.encode = function encode(stream, dict, ctx) {\n    return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]];\n  };\n  return CFFPrivateOp;\n}();\nvar FontDict = new CFFDict([\n// key       name                   type(s)                                 default\n[18, 'Private', new CFFPrivateOp(), null], [[12, 38], 'FontName', 'sid', null], [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [[12, 5], 'PaintType', 'number', 0]]);\nvar CFFTopDict = new CFFDict([\n// key       name                   type(s)                                 default\n[[12, 30], 'ROS', ['sid', 'sid', 'number'], null], [0, 'version', 'sid', null], [1, 'Notice', 'sid', null], [[12, 0], 'Copyright', 'sid', null], [2, 'FullName', 'sid', null], [3, 'FamilyName', 'sid', null], [4, 'Weight', 'sid', null], [[12, 1], 'isFixedPitch', 'boolean', false], [[12, 2], 'ItalicAngle', 'number', 0], [[12, 3], 'UnderlinePosition', 'number', -100], [[12, 4], 'UnderlineThickness', 'number', 50], [[12, 5], 'PaintType', 'number', 0], [[12, 6], 'CharstringType', 'number', 2], [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [13, 'UniqueID', 'number', null], [5, 'FontBBox', 'array', [0, 0, 0, 0]], [[12, 8], 'StrokeWidth', 'number', 0], [14, 'XUID', 'array', null], [15, 'charset', CFFCharset, ISOAdobeCharset], [16, 'Encoding', CFFEncoding, StandardEncoding], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [18, 'Private', new CFFPrivateOp(), null], [[12, 20], 'SyntheticBase', 'number', null], [[12, 21], 'PostScript', 'sid', null], [[12, 22], 'BaseFontName', 'sid', null], [[12, 23], 'BaseFontBlend', 'delta', null],\n// CID font specific\n[[12, 31], 'CIDFontVersion', 'number', 0], [[12, 32], 'CIDFontRevision', 'number', 0], [[12, 33], 'CIDFontType', 'number', 0], [[12, 34], 'CIDCount', 'number', 8720], [[12, 35], 'UIDBase', 'number', null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [[12, 38], 'FontName', 'sid', null]]);\nvar VariationStore = new r.Struct({\n  length: r.uint16,\n  itemVariationStore: ItemVariationStore\n});\nvar CFF2TopDict = new CFFDict([[[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [24, 'vstore', new CFFPointer(VariationStore), null], [25, 'maxstack', 'number', 193]]);\nvar CFFTop = new r.VersionedStruct(r.fixed16, {\n  1: {\n    hdrSize: r.uint8,\n    offSize: r.uint8,\n    nameIndex: new CFFIndex(new r.String('length')),\n    topDictIndex: new CFFIndex(CFFTopDict),\n    stringIndex: new CFFIndex(new r.String('length')),\n    globalSubrIndex: new CFFIndex()\n  },\n  2: {\n    hdrSize: r.uint8,\n    length: r.uint16,\n    topDict: CFF2TopDict,\n    globalSubrIndex: new CFFIndex()\n  }\n});\nvar CFFFont = /*#__PURE__*/function () {\n  function CFFFont(stream) {\n    this.stream = stream;\n    this.decode();\n  }\n  CFFFont.decode = function decode(stream) {\n    return new CFFFont(stream);\n  };\n  var _proto9 = CFFFont.prototype;\n  _proto9.decode = function decode() {\n    var start = this.stream.pos;\n    var top = CFFTop.decode(this.stream);\n    for (var key in top) {\n      var val = top[key];\n      this[key] = val;\n    }\n    if (this.version < 2) {\n      if (this.topDictIndex.length !== 1) {\n        throw new Error(\"Only a single font is allowed in CFF\");\n      }\n      this.topDict = this.topDictIndex[0];\n    }\n    this.isCIDFont = this.topDict.ROS != null;\n    return this;\n  };\n  _proto9.string = function string(sid) {\n    if (this.version >= 2) {\n      return null;\n    }\n    if (sid < standardStrings.length) {\n      return standardStrings[sid];\n    }\n    return this.stringIndex[sid - standardStrings.length];\n  };\n  _proto9.getCharString = function getCharString(glyph) {\n    this.stream.pos = this.topDict.CharStrings[glyph].offset;\n    return this.stream.readBuffer(this.topDict.CharStrings[glyph].length);\n  };\n  _proto9.getGlyphName = function getGlyphName(gid) {\n    // CFF2 glyph names are in the post table.\n    if (this.version >= 2) {\n      return null;\n    } // CID-keyed fonts don't have glyph names\n\n    if (this.isCIDFont) {\n      return null;\n    }\n    var charset = this.topDict.charset;\n    if (Array.isArray(charset)) {\n      return charset[gid];\n    }\n    if (gid === 0) {\n      return '.notdef';\n    }\n    gid -= 1;\n    switch (charset.version) {\n      case 0:\n        return this.string(charset.glyphs[gid]);\n      case 1:\n      case 2:\n        for (var i = 0; i < charset.ranges.length; i++) {\n          var range = charset.ranges[i];\n          if (range.offset <= gid && gid <= range.offset + range.nLeft) {\n            return this.string(range.first + (gid - range.offset));\n          }\n        }\n        break;\n    }\n    return null;\n  };\n  _proto9.fdForGlyph = function fdForGlyph(gid) {\n    if (!this.topDict.FDSelect) {\n      return null;\n    }\n    switch (this.topDict.FDSelect.version) {\n      case 0:\n        return this.topDict.FDSelect.fds[gid];\n      case 3:\n      case 4:\n        var ranges = this.topDict.FDSelect.ranges;\n        var low = 0;\n        var high = ranges.length - 1;\n        while (low <= high) {\n          var mid = low + high >> 1;\n          if (gid < ranges[mid].first) {\n            high = mid - 1;\n          } else if (mid < high && gid >= ranges[mid + 1].first) {\n            low = mid + 1;\n          } else {\n            return ranges[mid].fd;\n          }\n        }\n      default:\n        throw new Error(\"Unknown FDSelect version: \".concat(this.topDict.FDSelect.version));\n    }\n  };\n  _proto9.privateDictForGlyph = function privateDictForGlyph(gid) {\n    if (this.topDict.FDSelect) {\n      var fd = this.fdForGlyph(gid);\n      if (this.topDict.FDArray[fd]) {\n        return this.topDict.FDArray[fd].Private;\n      }\n      return null;\n    }\n    if (this.version < 2) {\n      return this.topDict.Private;\n    }\n    return this.topDict.FDArray[0].Private;\n  };\n  _createClass(CFFFont, [{\n    key: \"postscriptName\",\n    get: function get() {\n      if (this.version < 2) {\n        return this.nameIndex[0];\n      }\n      return null;\n    }\n  }, {\n    key: \"fullName\",\n    get: function get() {\n      return this.string(this.topDict.FullName);\n    }\n  }, {\n    key: \"familyName\",\n    get: function get() {\n      return this.string(this.topDict.FamilyName);\n    }\n  }]);\n  return CFFFont;\n}();\nvar VerticalOrigin = new r.Struct({\n  glyphIndex: r.uint16,\n  vertOriginY: r.int16\n});\nvar VORG = new r.Struct({\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  defaultVertOriginY: r.int16,\n  numVertOriginYMetrics: r.uint16,\n  metrics: new r.Array(VerticalOrigin, 'numVertOriginYMetrics')\n});\nvar BigMetrics = new r.Struct({\n  height: r.uint8,\n  width: r.uint8,\n  horiBearingX: r.int8,\n  horiBearingY: r.int8,\n  horiAdvance: r.uint8,\n  vertBearingX: r.int8,\n  vertBearingY: r.int8,\n  vertAdvance: r.uint8\n});\nvar SmallMetrics = new r.Struct({\n  height: r.uint8,\n  width: r.uint8,\n  bearingX: r.int8,\n  bearingY: r.int8,\n  advance: r.uint8\n});\nvar EBDTComponent = new r.Struct({\n  glyph: r.uint16,\n  xOffset: r.int8,\n  yOffset: r.int8\n});\nvar ByteAligned = function ByteAligned() {};\nvar BitAligned = function BitAligned() {};\nvar glyph = new r.VersionedStruct('version', {\n  1: {\n    metrics: SmallMetrics,\n    data: ByteAligned\n  },\n  2: {\n    metrics: SmallMetrics,\n    data: BitAligned\n  },\n  // format 3 is deprecated\n  // format 4 is not supported by Microsoft\n  5: {\n    data: BitAligned\n  },\n  6: {\n    metrics: BigMetrics,\n    data: ByteAligned\n  },\n  7: {\n    metrics: BigMetrics,\n    data: BitAligned\n  },\n  8: {\n    metrics: SmallMetrics,\n    pad: new r.Reserved(r.uint8),\n    numComponents: r.uint16,\n    components: new r.Array(EBDTComponent, 'numComponents')\n  },\n  9: {\n    metrics: BigMetrics,\n    pad: new r.Reserved(r.uint8),\n    numComponents: r.uint16,\n    components: new r.Array(EBDTComponent, 'numComponents')\n  },\n  17: {\n    metrics: SmallMetrics,\n    dataLen: r.uint32,\n    data: new r.Buffer('dataLen')\n  },\n  18: {\n    metrics: BigMetrics,\n    dataLen: r.uint32,\n    data: new r.Buffer('dataLen')\n  },\n  19: {\n    dataLen: r.uint32,\n    data: new r.Buffer('dataLen')\n  }\n});\nvar SBitLineMetrics = new r.Struct({\n  ascender: r.int8,\n  descender: r.int8,\n  widthMax: r.uint8,\n  caretSlopeNumerator: r.int8,\n  caretSlopeDenominator: r.int8,\n  caretOffset: r.int8,\n  minOriginSB: r.int8,\n  minAdvanceSB: r.int8,\n  maxBeforeBL: r.int8,\n  minAfterBL: r.int8,\n  pad: new r.Reserved(r.int8, 2)\n});\nvar CodeOffsetPair = new r.Struct({\n  glyphCode: r.uint16,\n  offset: r.uint16\n});\nvar IndexSubtable = new r.VersionedStruct(r.uint16, {\n  header: {\n    imageFormat: r.uint16,\n    imageDataOffset: r.uint32\n  },\n  1: {\n    offsetArray: new r.Array(r.uint32, function (t) {\n      return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1;\n    })\n  },\n  2: {\n    imageSize: r.uint32,\n    bigMetrics: BigMetrics\n  },\n  3: {\n    offsetArray: new r.Array(r.uint16, function (t) {\n      return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1;\n    })\n  },\n  4: {\n    numGlyphs: r.uint32,\n    glyphArray: new r.Array(CodeOffsetPair, function (t) {\n      return t.numGlyphs + 1;\n    })\n  },\n  5: {\n    imageSize: r.uint32,\n    bigMetrics: BigMetrics,\n    numGlyphs: r.uint32,\n    glyphCodeArray: new r.Array(r.uint16, 'numGlyphs')\n  }\n});\nvar IndexSubtableArray = new r.Struct({\n  firstGlyphIndex: r.uint16,\n  lastGlyphIndex: r.uint16,\n  subtable: new r.Pointer(r.uint32, IndexSubtable)\n});\nvar BitmapSizeTable = new r.Struct({\n  indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), {\n    type: 'parent'\n  }),\n  indexTablesSize: r.uint32,\n  numberOfIndexSubTables: r.uint32,\n  colorRef: r.uint32,\n  hori: SBitLineMetrics,\n  vert: SBitLineMetrics,\n  startGlyphIndex: r.uint16,\n  endGlyphIndex: r.uint16,\n  ppemX: r.uint8,\n  ppemY: r.uint8,\n  bitDepth: r.uint8,\n  flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical'])\n});\nvar EBLC = new r.Struct({\n  version: r.uint32,\n  // 0x00020000\n  numSizes: r.uint32,\n  sizes: new r.Array(BitmapSizeTable, 'numSizes')\n});\nvar ImageTable = new r.Struct({\n  ppem: r.uint16,\n  resolution: r.uint16,\n  imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), function (t) {\n    return t.parent.parent.maxp.numGlyphs + 1;\n  })\n}); // This is the Apple sbix table, used by the \"Apple Color Emoji\" font.\n// It includes several image tables with images for each bitmap glyph\n// of several different sizes.\n\nvar sbix = new r.Struct({\n  version: r.uint16,\n  flags: new r.Bitfield(r.uint16, ['renderOutlines']),\n  numImgTables: r.uint32,\n  imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables')\n});\nvar LayerRecord = new r.Struct({\n  gid: r.uint16,\n  // Glyph ID of layer glyph (must be in z-order from bottom to top).\n  paletteIndex: r.uint16 // Index value to use in the appropriate palette. This value must\n}); // be less than numPaletteEntries in the CPAL table, except for\n// the special case noted below. Each palette entry is 16 bits.\n// A palette index of 0xFFFF is a special case indicating that\n// the text foreground color should be used.\n\nvar BaseGlyphRecord = new r.Struct({\n  gid: r.uint16,\n  // Glyph ID of reference glyph. This glyph is for reference only\n  // and is not rendered for color.\n  firstLayerIndex: r.uint16,\n  // Index (from beginning of the Layer Records) to the layer record.\n  // There will be numLayers consecutive entries for this base glyph.\n  numLayers: r.uint16\n});\nvar COLR = new r.Struct({\n  version: r.uint16,\n  numBaseGlyphRecords: r.uint16,\n  baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')),\n  layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), {\n    lazy: true\n  }),\n  numLayerRecords: r.uint16\n});\nvar ColorRecord = new r.Struct({\n  blue: r.uint8,\n  green: r.uint8,\n  red: r.uint8,\n  alpha: r.uint8\n});\nvar CPAL = new r.VersionedStruct(r.uint16, {\n  header: {\n    numPaletteEntries: r.uint16,\n    numPalettes: r.uint16,\n    numColorRecords: r.uint16,\n    colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')),\n    colorRecordIndices: new r.Array(r.uint16, 'numPalettes')\n  },\n  0: {},\n  1: {\n    offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')),\n    offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')),\n    offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries'))\n  }\n});\nvar BaseCoord = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Design units only\n    coordinate: r.int16 // X or Y value, in design units\n  },\n\n  2: {\n    // Design units plus contour point\n    coordinate: r.int16,\n    // X or Y value, in design units\n    referenceGlyph: r.uint16,\n    // GlyphID of control glyph\n    baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph\n  },\n\n  3: {\n    // Design units plus Device table\n    coordinate: r.int16,\n    // X or Y value, in design units\n    deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value\n  }\n});\n\nvar BaseValues = new r.Struct({\n  defaultIndex: r.uint16,\n  // Index of default baseline for this script-same index in the BaseTagList\n  baseCoordCount: r.uint16,\n  baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCoordCount')\n});\nvar FeatMinMaxRecord = new r.Struct({\n  tag: new r.String(4),\n  // 4-byte feature identification tag-must match FeatureTag in FeatureList\n  minCoord: new r.Pointer(r.uint16, BaseCoord, {\n    type: 'parent'\n  }),\n  // May be NULL\n  maxCoord: new r.Pointer(r.uint16, BaseCoord, {\n    type: 'parent'\n  }) // May be NULL\n});\n\nvar MinMax = new r.Struct({\n  minCoord: new r.Pointer(r.uint16, BaseCoord),\n  // May be NULL\n  maxCoord: new r.Pointer(r.uint16, BaseCoord),\n  // May be NULL\n  featMinMaxCount: r.uint16,\n  // May be 0\n  featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order\n});\n\nvar BaseLangSysRecord = new r.Struct({\n  tag: new r.String(4),\n  // 4-byte language system identification tag\n  minMax: new r.Pointer(r.uint16, MinMax, {\n    type: 'parent'\n  })\n});\nvar BaseScript = new r.Struct({\n  baseValues: new r.Pointer(r.uint16, BaseValues),\n  // May be NULL\n  defaultMinMax: new r.Pointer(r.uint16, MinMax),\n  // May be NULL\n  baseLangSysCount: r.uint16,\n  // May be 0\n  baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag\n});\n\nvar BaseScriptRecord = new r.Struct({\n  tag: new r.String(4),\n  // 4-byte script identification tag\n  script: new r.Pointer(r.uint16, BaseScript, {\n    type: 'parent'\n  })\n});\nvar BaseScriptList = new r.Array(BaseScriptRecord, r.uint16); // Array of 4-byte baseline identification tags-must be in alphabetical order\n\nvar BaseTagList = new r.Array(new r.String(4), r.uint16);\nvar Axis = new r.Struct({\n  baseTagList: new r.Pointer(r.uint16, BaseTagList),\n  // May be NULL\n  baseScriptList: new r.Pointer(r.uint16, BaseScriptList)\n});\nvar BASE = new r.VersionedStruct(r.uint32, {\n  header: {\n    horizAxis: new r.Pointer(r.uint16, Axis),\n    // May be NULL\n    vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL\n  },\n\n  0x00010000: {},\n  0x00010001: {\n    itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n  }\n});\nvar AttachPoint = new r.Array(r.uint16, r.uint16);\nvar AttachList = new r.Struct({\n  coverage: new r.Pointer(r.uint16, Coverage),\n  glyphCount: r.uint16,\n  attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount')\n});\nvar CaretValue = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Design units only\n    coordinate: r.int16\n  },\n  2: {\n    // Contour point\n    caretValuePoint: r.uint16\n  },\n  3: {\n    // Design units plus Device table\n    coordinate: r.int16,\n    deviceTable: new r.Pointer(r.uint16, Device)\n  }\n});\nvar LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);\nvar LigCaretList = new r.Struct({\n  coverage: new r.Pointer(r.uint16, Coverage),\n  ligGlyphCount: r.uint16,\n  ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount')\n});\nvar MarkGlyphSetsDef = new r.Struct({\n  markSetTableFormat: r.uint16,\n  markSetCount: r.uint16,\n  coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount')\n});\nvar GDEF = new r.VersionedStruct(r.uint32, {\n  header: {\n    glyphClassDef: new r.Pointer(r.uint16, ClassDef),\n    attachList: new r.Pointer(r.uint16, AttachList),\n    ligCaretList: new r.Pointer(r.uint16, LigCaretList),\n    markAttachClassDef: new r.Pointer(r.uint16, ClassDef)\n  },\n  0x00010000: {},\n  0x00010002: {\n    markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef)\n  },\n  0x00010003: {\n    markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef),\n    itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n  }\n});\nvar ValueFormat = new r.Bitfield(r.uint16, ['xPlacement', 'yPlacement', 'xAdvance', 'yAdvance', 'xPlaDevice', 'yPlaDevice', 'xAdvDevice', 'yAdvDevice']);\nvar types = {\n  xPlacement: r.int16,\n  yPlacement: r.int16,\n  xAdvance: r.int16,\n  yAdvance: r.int16,\n  xPlaDevice: new r.Pointer(r.uint16, Device, {\n    type: 'global',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.rel;\n    }\n  }),\n  yPlaDevice: new r.Pointer(r.uint16, Device, {\n    type: 'global',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.rel;\n    }\n  }),\n  xAdvDevice: new r.Pointer(r.uint16, Device, {\n    type: 'global',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.rel;\n    }\n  }),\n  yAdvDevice: new r.Pointer(r.uint16, Device, {\n    type: 'global',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.rel;\n    }\n  })\n};\nvar ValueRecord = /*#__PURE__*/function () {\n  function ValueRecord(key) {\n    if (key === void 0) {\n      key = 'valueFormat';\n    }\n    this.key = key;\n  }\n  var _proto10 = ValueRecord.prototype;\n  _proto10.buildStruct = function buildStruct(parent) {\n    var struct = parent;\n    while (!struct[this.key] && struct.parent) {\n      struct = struct.parent;\n    }\n    if (!struct[this.key]) return;\n    var fields = {};\n    fields.rel = function () {\n      return struct._startOffset;\n    };\n    var format = struct[this.key];\n    for (var key in format) {\n      if (format[key]) {\n        fields[key] = types[key];\n      }\n    }\n    return new r.Struct(fields);\n  };\n  _proto10.size = function size(val, ctx) {\n    return this.buildStruct(ctx).size(val, ctx);\n  };\n  _proto10.decode = function decode(stream, parent) {\n    var res = this.buildStruct(parent).decode(stream, parent);\n    delete res.rel;\n    return res;\n  };\n  return ValueRecord;\n}();\nvar PairValueRecord = new r.Struct({\n  secondGlyph: r.uint16,\n  value1: new ValueRecord('valueFormat1'),\n  value2: new ValueRecord('valueFormat2')\n});\nvar PairSet = new r.Array(PairValueRecord, r.uint16);\nvar Class2Record = new r.Struct({\n  value1: new ValueRecord('valueFormat1'),\n  value2: new ValueRecord('valueFormat2')\n});\nvar Anchor = new r.VersionedStruct(r.uint16, {\n  1: {\n    // Design units only\n    xCoordinate: r.int16,\n    yCoordinate: r.int16\n  },\n  2: {\n    // Design units plus contour point\n    xCoordinate: r.int16,\n    yCoordinate: r.int16,\n    anchorPoint: r.uint16\n  },\n  3: {\n    // Design units plus Device tables\n    xCoordinate: r.int16,\n    yCoordinate: r.int16,\n    xDeviceTable: new r.Pointer(r.uint16, Device),\n    yDeviceTable: new r.Pointer(r.uint16, Device)\n  }\n});\nvar EntryExitRecord = new r.Struct({\n  entryAnchor: new r.Pointer(r.uint16, Anchor, {\n    type: 'parent'\n  }),\n  exitAnchor: new r.Pointer(r.uint16, Anchor, {\n    type: 'parent'\n  })\n});\nvar MarkRecord = new r.Struct({\n  class: r.uint16,\n  markAnchor: new r.Pointer(r.uint16, Anchor, {\n    type: 'parent'\n  })\n});\nvar MarkArray = new r.Array(MarkRecord, r.uint16);\nvar BaseRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) {\n  return t.parent.classCount;\n});\nvar BaseArray = new r.Array(BaseRecord, r.uint16);\nvar ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) {\n  return t.parent.parent.classCount;\n});\nvar LigatureAttach = new r.Array(ComponentRecord, r.uint16);\nvar LigatureArray = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16);\nvar GPOSLookup = new r.VersionedStruct('lookupType', {\n  1: new r.VersionedStruct(r.uint16, {\n    // Single Adjustment\n    1: {\n      // Single positioning value\n      coverage: new r.Pointer(r.uint16, Coverage),\n      valueFormat: ValueFormat,\n      value: new ValueRecord()\n    },\n    2: {\n      coverage: new r.Pointer(r.uint16, Coverage),\n      valueFormat: ValueFormat,\n      valueCount: r.uint16,\n      values: new r.LazyArray(new ValueRecord(), 'valueCount')\n    }\n  }),\n  2: new r.VersionedStruct(r.uint16, {\n    // Pair Adjustment Positioning\n    1: {\n      // Adjustments for glyph pairs\n      coverage: new r.Pointer(r.uint16, Coverage),\n      valueFormat1: ValueFormat,\n      valueFormat2: ValueFormat,\n      pairSetCount: r.uint16,\n      pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount')\n    },\n    2: {\n      // Class pair adjustment\n      coverage: new r.Pointer(r.uint16, Coverage),\n      valueFormat1: ValueFormat,\n      valueFormat2: ValueFormat,\n      classDef1: new r.Pointer(r.uint16, ClassDef),\n      classDef2: new r.Pointer(r.uint16, ClassDef),\n      class1Count: r.uint16,\n      class2Count: r.uint16,\n      classRecords: new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count')\n    }\n  }),\n  3: {\n    // Cursive Attachment Positioning\n    format: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    entryExitCount: r.uint16,\n    entryExitRecords: new r.Array(EntryExitRecord, 'entryExitCount')\n  },\n  4: {\n    // MarkToBase Attachment Positioning\n    format: r.uint16,\n    markCoverage: new r.Pointer(r.uint16, Coverage),\n    baseCoverage: new r.Pointer(r.uint16, Coverage),\n    classCount: r.uint16,\n    markArray: new r.Pointer(r.uint16, MarkArray),\n    baseArray: new r.Pointer(r.uint16, BaseArray)\n  },\n  5: {\n    // MarkToLigature Attachment Positioning\n    format: r.uint16,\n    markCoverage: new r.Pointer(r.uint16, Coverage),\n    ligatureCoverage: new r.Pointer(r.uint16, Coverage),\n    classCount: r.uint16,\n    markArray: new r.Pointer(r.uint16, MarkArray),\n    ligatureArray: new r.Pointer(r.uint16, LigatureArray)\n  },\n  6: {\n    // MarkToMark Attachment Positioning\n    format: r.uint16,\n    mark1Coverage: new r.Pointer(r.uint16, Coverage),\n    mark2Coverage: new r.Pointer(r.uint16, Coverage),\n    classCount: r.uint16,\n    mark1Array: new r.Pointer(r.uint16, MarkArray),\n    mark2Array: new r.Pointer(r.uint16, BaseArray)\n  },\n  7: Context,\n  // Contextual positioning\n  8: ChainingContext,\n  // Chaining contextual positioning\n  9: {\n    // Extension Positioning\n    posFormat: r.uint16,\n    lookupType: r.uint16,\n    // cannot also be 9\n    extension: new r.Pointer(r.uint32, GPOSLookup)\n  }\n}); // Fix circular reference\n\nGPOSLookup.versions[9].extension.type = GPOSLookup;\nvar GPOS = new r.VersionedStruct(r.uint32, {\n  header: {\n    scriptList: new r.Pointer(r.uint16, ScriptList),\n    featureList: new r.Pointer(r.uint16, FeatureList),\n    lookupList: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n  },\n  0x00010000: {},\n  0x00010001: {\n    featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n  }\n}); // export GPOSLookup for JSTF table\n\nvar Sequence = new r.Array(r.uint16, r.uint16);\nvar AlternateSet = Sequence;\nvar Ligature = new r.Struct({\n  glyph: r.uint16,\n  compCount: r.uint16,\n  components: new r.Array(r.uint16, function (t) {\n    return t.compCount - 1;\n  })\n});\nvar LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16);\nvar GSUBLookup = new r.VersionedStruct('lookupType', {\n  1: new r.VersionedStruct(r.uint16, {\n    // Single Substitution\n    1: {\n      coverage: new r.Pointer(r.uint16, Coverage),\n      deltaGlyphID: r.int16\n    },\n    2: {\n      coverage: new r.Pointer(r.uint16, Coverage),\n      glyphCount: r.uint16,\n      substitute: new r.LazyArray(r.uint16, 'glyphCount')\n    }\n  }),\n  2: {\n    // Multiple Substitution\n    substFormat: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    count: r.uint16,\n    sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count')\n  },\n  3: {\n    // Alternate Substitution\n    substFormat: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    count: r.uint16,\n    alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count')\n  },\n  4: {\n    // Ligature Substitution\n    substFormat: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    count: r.uint16,\n    ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count')\n  },\n  5: Context,\n  // Contextual Substitution\n  6: ChainingContext,\n  // Chaining Contextual Substitution\n  7: {\n    // Extension Substitution\n    substFormat: r.uint16,\n    lookupType: r.uint16,\n    // cannot also be 7\n    extension: new r.Pointer(r.uint32, GSUBLookup)\n  },\n  8: {\n    // Reverse Chaining Contextual Single Substitution\n    substFormat: r.uint16,\n    coverage: new r.Pointer(r.uint16, Coverage),\n    backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n    lookaheadGlyphCount: r.uint16,\n    lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n    glyphCount: r.uint16,\n    substitutes: new r.Array(r.uint16, 'glyphCount')\n  }\n}); // Fix circular reference\n\nGSUBLookup.versions[7].extension.type = GSUBLookup;\nvar GSUB = new r.VersionedStruct(r.uint32, {\n  header: {\n    scriptList: new r.Pointer(r.uint16, ScriptList),\n    featureList: new r.Pointer(r.uint16, FeatureList),\n    lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup))\n  },\n  0x00010000: {},\n  0x00010001: {\n    featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n  }\n});\nvar JstfGSUBModList = new r.Array(r.uint16, r.uint16);\nvar JstfPriority = new r.Struct({\n  shrinkageEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n  shrinkageJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)),\n  extensionEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n  extensionJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n});\nvar JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16);\nvar JstfLangSysRecord = new r.Struct({\n  tag: new r.String(4),\n  jstfLangSys: new r.Pointer(r.uint16, JstfLangSys)\n});\nvar JstfScript = new r.Struct({\n  extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)),\n  // array of glyphs to extend line length\n  defaultLangSys: new r.Pointer(r.uint16, JstfLangSys),\n  langSysCount: r.uint16,\n  langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount')\n});\nvar JstfScriptRecord = new r.Struct({\n  tag: new r.String(4),\n  script: new r.Pointer(r.uint16, JstfScript, {\n    type: 'parent'\n  })\n});\nvar JSTF = new r.Struct({\n  version: r.uint32,\n  // should be 0x00010000\n  scriptCount: r.uint16,\n  scriptList: new r.Array(JstfScriptRecord, 'scriptCount')\n});\nvar VariableSizeNumber = /*#__PURE__*/function () {\n  function VariableSizeNumber(size) {\n    this._size = size;\n  }\n  var _proto11 = VariableSizeNumber.prototype;\n  _proto11.decode = function decode(stream, parent) {\n    switch (this.size(0, parent)) {\n      case 1:\n        return stream.readUInt8();\n      case 2:\n        return stream.readUInt16BE();\n      case 3:\n        return stream.readUInt24BE();\n      case 4:\n        return stream.readUInt32BE();\n    }\n  };\n  _proto11.size = function size(val, parent) {\n    return utils.resolveLength(this._size, null, parent);\n  };\n  return VariableSizeNumber;\n}();\nvar MapDataEntry = new r.Struct({\n  entry: new VariableSizeNumber(function (t) {\n    return ((t.parent.entryFormat & 0x0030) >> 4) + 1;\n  }),\n  outerIndex: function outerIndex(t) {\n    return t.entry >> (t.parent.entryFormat & 0x000F) + 1;\n  },\n  innerIndex: function innerIndex(t) {\n    return t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1;\n  }\n});\nvar DeltaSetIndexMap = new r.Struct({\n  entryFormat: r.uint16,\n  mapCount: r.uint16,\n  mapData: new r.Array(MapDataEntry, 'mapCount')\n});\nvar HVAR = new r.Struct({\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),\n  advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n  LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n  RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap)\n});\nvar Signature = new r.Struct({\n  format: r.uint32,\n  length: r.uint32,\n  offset: r.uint32\n});\nvar SignatureBlock = new r.Struct({\n  reserved: new r.Reserved(r.uint16, 2),\n  cbSignature: r.uint32,\n  // Length (in bytes) of the PKCS#7 packet in pbSignature\n  signature: new r.Buffer('cbSignature')\n});\nvar DSIG = new r.Struct({\n  ulVersion: r.uint32,\n  // Version number of the DSIG table (0x00000001)\n  usNumSigs: r.uint16,\n  // Number of signatures in the table\n  usFlag: r.uint16,\n  // Permission flags\n  signatures: new r.Array(Signature, 'usNumSigs'),\n  signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs')\n});\nvar GaspRange = new r.Struct({\n  rangeMaxPPEM: r.uint16,\n  // Upper limit of range, in ppem\n  rangeGaspBehavior: new r.Bitfield(r.uint16, [\n  // Flags describing desired rasterizer behavior\n  'grayscale', 'gridfit', 'symmetricSmoothing', 'symmetricGridfit' // only in version 1, for ClearType\n  ])\n});\n\nvar gasp = new r.Struct({\n  version: r.uint16,\n  // set to 0\n  numRanges: r.uint16,\n  gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem\n});\n\nvar DeviceRecord = new r.Struct({\n  pixelSize: r.uint8,\n  maximumWidth: r.uint8,\n  widths: new r.Array(r.uint8, function (t) {\n    return t.parent.parent.maxp.numGlyphs;\n  })\n}); // The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes\n\nvar hdmx = new r.Struct({\n  version: r.uint16,\n  numRecords: r.int16,\n  sizeDeviceRecord: r.int32,\n  records: new r.Array(DeviceRecord, 'numRecords')\n});\nvar KernPair = new r.Struct({\n  left: r.uint16,\n  right: r.uint16,\n  value: r.int16\n});\nvar ClassTable = new r.Struct({\n  firstGlyph: r.uint16,\n  nGlyphs: r.uint16,\n  offsets: new r.Array(r.uint16, 'nGlyphs'),\n  max: function max(t) {\n    return t.offsets.length && Math.max.apply(Math, t.offsets);\n  }\n});\nvar Kern2Array = new r.Struct({\n  off: function off(t) {\n    return t._startOffset - t.parent.parent._startOffset;\n  },\n  len: function len(t) {\n    return ((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2);\n  },\n  values: new r.LazyArray(r.int16, 'len')\n});\nvar KernSubtable = new r.VersionedStruct('format', {\n  0: {\n    nPairs: r.uint16,\n    searchRange: r.uint16,\n    entrySelector: r.uint16,\n    rangeShift: r.uint16,\n    pairs: new r.Array(KernPair, 'nPairs')\n  },\n  2: {\n    rowWidth: r.uint16,\n    leftTable: new r.Pointer(r.uint16, ClassTable, {\n      type: 'parent'\n    }),\n    rightTable: new r.Pointer(r.uint16, ClassTable, {\n      type: 'parent'\n    }),\n    array: new r.Pointer(r.uint16, Kern2Array, {\n      type: 'parent'\n    })\n  },\n  3: {\n    glyphCount: r.uint16,\n    kernValueCount: r.uint8,\n    leftClassCount: r.uint8,\n    rightClassCount: r.uint8,\n    flags: r.uint8,\n    kernValue: new r.Array(r.int16, 'kernValueCount'),\n    leftClass: new r.Array(r.uint8, 'glyphCount'),\n    rightClass: new r.Array(r.uint8, 'glyphCount'),\n    kernIndex: new r.Array(r.uint8, function (t) {\n      return t.leftClassCount * t.rightClassCount;\n    })\n  }\n});\nvar KernTable = new r.VersionedStruct('version', {\n  0: {\n    // Microsoft uses this format\n    subVersion: r.uint16,\n    // Microsoft has an extra sub-table version number\n    length: r.uint16,\n    // Length of the subtable, in bytes\n    format: r.uint8,\n    // Format of subtable\n    coverage: new r.Bitfield(r.uint8, ['horizontal',\n    // 1 if table has horizontal data, 0 if vertical\n    'minimum',\n    // If set to 1, the table has minimum values. If set to 0, the table has kerning values.\n    'crossStream',\n    // If set to 1, kerning is perpendicular to the flow of the text\n    'override' // If set to 1 the value in this table replaces the accumulated value\n    ]),\n\n    subtable: KernSubtable,\n    padding: new r.Reserved(r.uint8, function (t) {\n      return t.length - t._currentOffset;\n    })\n  },\n  1: {\n    // Apple uses this format\n    length: r.uint32,\n    coverage: new r.Bitfield(r.uint8, [null, null, null, null, null, 'variation',\n    // Set if table has variation kerning values\n    'crossStream',\n    // Set if table has cross-stream kerning values\n    'vertical' // Set if table has vertical kerning values\n    ]),\n\n    format: r.uint8,\n    tupleIndex: r.uint16,\n    subtable: KernSubtable,\n    padding: new r.Reserved(r.uint8, function (t) {\n      return t.length - t._currentOffset;\n    })\n  }\n});\nvar kern = new r.VersionedStruct(r.uint16, {\n  0: {\n    // Microsoft Version\n    nTables: r.uint16,\n    tables: new r.Array(KernTable, 'nTables')\n  },\n  1: {\n    // Apple Version\n    reserved: new r.Reserved(r.uint16),\n    // the other half of the version number\n    nTables: r.uint32,\n    tables: new r.Array(KernTable, 'nTables')\n  }\n});\n\n// Records the ppem for each glyph at which the scaling becomes linear again,\n// despite instructions effecting the advance width\n\nvar LTSH = new r.Struct({\n  version: r.uint16,\n  numGlyphs: r.uint16,\n  yPels: new r.Array(r.uint8, 'numGlyphs')\n});\n\n// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines\n\nvar PCLT = new r.Struct({\n  version: r.uint16,\n  fontNumber: r.uint32,\n  pitch: r.uint16,\n  xHeight: r.uint16,\n  style: r.uint16,\n  typeFamily: r.uint16,\n  capHeight: r.uint16,\n  symbolSet: r.uint16,\n  typeface: new r.String(16),\n  characterComplement: new r.String(8),\n  fileName: new r.String(6),\n  strokeWeight: new r.String(1),\n  widthType: new r.String(1),\n  serifStyle: r.uint8,\n  reserved: new r.Reserved(r.uint8)\n});\n\n// sizes. This is needed in order to match font metrics on Windows.\n\nvar Ratio = new r.Struct({\n  bCharSet: r.uint8,\n  // Character set\n  xRatio: r.uint8,\n  // Value to use for x-Ratio\n  yStartRatio: r.uint8,\n  // Starting y-Ratio value\n  yEndRatio: r.uint8 // Ending y-Ratio value\n});\n\nvar vTable = new r.Struct({\n  yPelHeight: r.uint16,\n  // yPelHeight to which values apply\n  yMax: r.int16,\n  // Maximum value (in pels) for this yPelHeight\n  yMin: r.int16 // Minimum value (in pels) for this yPelHeight\n});\n\nvar VdmxGroup = new r.Struct({\n  recs: r.uint16,\n  // Number of height records in this group\n  startsz: r.uint8,\n  // Starting yPelHeight\n  endsz: r.uint8,\n  // Ending yPelHeight\n  entries: new r.Array(vTable, 'recs') // The VDMX records\n});\n\nvar VDMX = new r.Struct({\n  version: r.uint16,\n  // Version number (0 or 1)\n  numRecs: r.uint16,\n  // Number of VDMX groups present\n  numRatios: r.uint16,\n  // Number of aspect ratio groupings\n  ratioRanges: new r.Array(Ratio, 'numRatios'),\n  // Ratio ranges\n  offsets: new r.Array(r.uint16, 'numRatios'),\n  // Offset to the VDMX group for this ratio range\n  groups: new r.Array(VdmxGroup, 'numRecs') // The actual VDMX groupings\n});\n\nvar vhea = new r.Struct({\n  version: r.uint16,\n  // Version number of the Vertical Header Table\n  ascent: r.int16,\n  // The vertical typographic ascender for this font\n  descent: r.int16,\n  // The vertical typographic descender for this font\n  lineGap: r.int16,\n  // The vertical typographic line gap for this font\n  advanceHeightMax: r.int16,\n  // The maximum advance height measurement found in the font\n  minTopSideBearing: r.int16,\n  // The minimum top side bearing measurement found in the font\n  minBottomSideBearing: r.int16,\n  // The minimum bottom side bearing measurement found in the font\n  yMaxExtent: r.int16,\n  caretSlopeRise: r.int16,\n  // Caret slope (rise/run)\n  caretSlopeRun: r.int16,\n  caretOffset: r.int16,\n  // Set value equal to 0 for nonslanted fonts\n  reserved: new r.Reserved(r.int16, 4),\n  metricDataFormat: r.int16,\n  // Set to 0\n  numberOfMetrics: r.uint16 // Number of advance heights in the Vertical Metrics table\n});\n\nvar VmtxEntry = new r.Struct({\n  advance: r.uint16,\n  // The advance height of the glyph\n  bearing: r.int16 // The top sidebearing of the glyph\n}); // Vertical Metrics Table\n\nvar vmtx = new r.Struct({\n  metrics: new r.LazyArray(VmtxEntry, function (t) {\n    return t.parent.vhea.numberOfMetrics;\n  }),\n  bearings: new r.LazyArray(r.int16, function (t) {\n    return t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics;\n  })\n});\nvar shortFrac = new r.Fixed(16, 'BE', 14);\nvar Correspondence = new r.Struct({\n  fromCoord: shortFrac,\n  toCoord: shortFrac\n});\nvar Segment = new r.Struct({\n  pairCount: r.uint16,\n  correspondence: new r.Array(Correspondence, 'pairCount')\n});\nvar avar = new r.Struct({\n  version: r.fixed32,\n  axisCount: r.uint32,\n  segment: new r.Array(Segment, 'axisCount')\n});\nvar UnboundedArrayAccessor = /*#__PURE__*/function () {\n  function UnboundedArrayAccessor(type, stream, parent) {\n    this.type = type;\n    this.stream = stream;\n    this.parent = parent;\n    this.base = this.stream.pos;\n    this._items = [];\n  }\n  var _proto12 = UnboundedArrayAccessor.prototype;\n  _proto12.getItem = function getItem(index) {\n    if (this._items[index] == null) {\n      var pos = this.stream.pos;\n      this.stream.pos = this.base + this.type.size(null, this.parent) * index;\n      this._items[index] = this.type.decode(this.stream, this.parent);\n      this.stream.pos = pos;\n    }\n    return this._items[index];\n  };\n  _proto12.inspect = function inspect() {\n    return \"[UnboundedArray \".concat(this.type.constructor.name, \"]\");\n  };\n  return UnboundedArrayAccessor;\n}();\nvar UnboundedArray = /*#__PURE__*/function (_r$Array2) {\n  _inheritsLoose(UnboundedArray, _r$Array2);\n  function UnboundedArray(type) {\n    return _r$Array2.call(this, type, 0) || this;\n  }\n  var _proto13 = UnboundedArray.prototype;\n  _proto13.decode = function decode(stream, parent) {\n    return new UnboundedArrayAccessor(this.type, stream, parent);\n  };\n  return UnboundedArray;\n}(r.Array);\nvar LookupTable = function LookupTable(ValueType) {\n  if (ValueType === void 0) {\n    ValueType = r.uint16;\n  }\n  // Helper class that makes internal structures invisible to pointers\n  var Shadow = /*#__PURE__*/function () {\n    function Shadow(type) {\n      this.type = type;\n    }\n    var _proto14 = Shadow.prototype;\n    _proto14.decode = function decode(stream, ctx) {\n      ctx = ctx.parent.parent;\n      return this.type.decode(stream, ctx);\n    };\n    _proto14.size = function size(val, ctx) {\n      ctx = ctx.parent.parent;\n      return this.type.size(val, ctx);\n    };\n    _proto14.encode = function encode(stream, val, ctx) {\n      ctx = ctx.parent.parent;\n      return this.type.encode(stream, val, ctx);\n    };\n    return Shadow;\n  }();\n  ValueType = new Shadow(ValueType);\n  var BinarySearchHeader = new r.Struct({\n    unitSize: r.uint16,\n    nUnits: r.uint16,\n    searchRange: r.uint16,\n    entrySelector: r.uint16,\n    rangeShift: r.uint16\n  });\n  var LookupSegmentSingle = new r.Struct({\n    lastGlyph: r.uint16,\n    firstGlyph: r.uint16,\n    value: ValueType\n  });\n  var LookupSegmentArray = new r.Struct({\n    lastGlyph: r.uint16,\n    firstGlyph: r.uint16,\n    values: new r.Pointer(r.uint16, new r.Array(ValueType, function (t) {\n      return t.lastGlyph - t.firstGlyph + 1;\n    }), {\n      type: 'parent'\n    })\n  });\n  var LookupSingle = new r.Struct({\n    glyph: r.uint16,\n    value: ValueType\n  });\n  return new r.VersionedStruct(r.uint16, {\n    0: {\n      values: new UnboundedArray(ValueType) // length == number of glyphs maybe?\n    },\n\n    2: {\n      binarySearchHeader: BinarySearchHeader,\n      segments: new r.Array(LookupSegmentSingle, function (t) {\n        return t.binarySearchHeader.nUnits;\n      })\n    },\n    4: {\n      binarySearchHeader: BinarySearchHeader,\n      segments: new r.Array(LookupSegmentArray, function (t) {\n        return t.binarySearchHeader.nUnits;\n      })\n    },\n    6: {\n      binarySearchHeader: BinarySearchHeader,\n      segments: new r.Array(LookupSingle, function (t) {\n        return t.binarySearchHeader.nUnits;\n      })\n    },\n    8: {\n      firstGlyph: r.uint16,\n      count: r.uint16,\n      values: new r.Array(ValueType, 'count')\n    }\n  });\n};\nfunction StateTable(entryData, lookupType) {\n  if (entryData === void 0) {\n    entryData = {};\n  }\n  if (lookupType === void 0) {\n    lookupType = r.uint16;\n  }\n  var entry = Object.assign({\n    newState: r.uint16,\n    flags: r.uint16\n  }, entryData);\n  var Entry = new r.Struct(entry);\n  var StateArray = new UnboundedArray(new r.Array(r.uint16, function (t) {\n    return t.nClasses;\n  }));\n  var StateHeader = new r.Struct({\n    nClasses: r.uint32,\n    classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)),\n    stateArray: new r.Pointer(r.uint32, StateArray),\n    entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry))\n  });\n  return StateHeader;\n} // This is the old version of the StateTable structure\n\nfunction StateTable1(entryData, lookupType) {\n  if (entryData === void 0) {\n    entryData = {};\n  }\n  if (lookupType === void 0) {\n    lookupType = r.uint16;\n  }\n  var ClassLookupTable = new r.Struct({\n    version: function version() {\n      return 8;\n    },\n    // simulate LookupTable\n    firstGlyph: r.uint16,\n    values: new r.Array(r.uint8, r.uint16)\n  });\n  var entry = Object.assign({\n    newStateOffset: r.uint16,\n    // convert offset to stateArray index\n    newState: function newState(t) {\n      return (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses;\n    },\n    flags: r.uint16\n  }, entryData);\n  var Entry = new r.Struct(entry);\n  var StateArray = new UnboundedArray(new r.Array(r.uint8, function (t) {\n    return t.nClasses;\n  }));\n  var StateHeader1 = new r.Struct({\n    nClasses: r.uint16,\n    classTable: new r.Pointer(r.uint16, ClassLookupTable),\n    stateArray: new r.Pointer(r.uint16, StateArray),\n    entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry))\n  });\n  return StateHeader1;\n}\nvar BslnSubtable = new r.VersionedStruct('format', {\n  0: {\n    // Distance-based, no mapping\n    deltas: new r.Array(r.int16, 32)\n  },\n  1: {\n    // Distance-based, with mapping\n    deltas: new r.Array(r.int16, 32),\n    mappingData: new LookupTable(r.uint16)\n  },\n  2: {\n    // Control point-based, no mapping\n    standardGlyph: r.uint16,\n    controlPoints: new r.Array(r.uint16, 32)\n  },\n  3: {\n    // Control point-based, with mapping\n    standardGlyph: r.uint16,\n    controlPoints: new r.Array(r.uint16, 32),\n    mappingData: new LookupTable(r.uint16)\n  }\n});\nvar bsln = new r.Struct({\n  version: r.fixed32,\n  format: r.uint16,\n  defaultBaseline: r.uint16,\n  subtable: BslnSubtable\n});\nvar Setting = new r.Struct({\n  setting: r.uint16,\n  nameIndex: r.int16,\n  name: function name(t) {\n    return t.parent.parent.parent.name.records.fontFeatures[t.nameIndex];\n  }\n});\nvar FeatureName = new r.Struct({\n  feature: r.uint16,\n  nSettings: r.uint16,\n  settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), {\n    type: 'parent'\n  }),\n  featureFlags: new r.Bitfield(r.uint8, [null, null, null, null, null, null, 'hasDefault', 'exclusive']),\n  defaultSetting: r.uint8,\n  nameIndex: r.int16,\n  name: function name(t) {\n    return t.parent.parent.name.records.fontFeatures[t.nameIndex];\n  }\n});\nvar feat = new r.Struct({\n  version: r.fixed32,\n  featureNameCount: r.uint16,\n  reserved1: new r.Reserved(r.uint16),\n  reserved2: new r.Reserved(r.uint32),\n  featureNames: new r.Array(FeatureName, 'featureNameCount')\n});\nvar Axis$1 = new r.Struct({\n  axisTag: new r.String(4),\n  minValue: r.fixed32,\n  defaultValue: r.fixed32,\n  maxValue: r.fixed32,\n  flags: r.uint16,\n  nameID: r.uint16,\n  name: function name(t) {\n    return t.parent.parent.name.records.fontFeatures[t.nameID];\n  }\n});\nvar Instance = new r.Struct({\n  nameID: r.uint16,\n  name: function name(t) {\n    return t.parent.parent.name.records.fontFeatures[t.nameID];\n  },\n  flags: r.uint16,\n  coord: new r.Array(r.fixed32, function (t) {\n    return t.parent.axisCount;\n  }),\n  postscriptNameID: new r.Optional(r.uint16, function (t) {\n    return t.parent.instanceSize - t._currentOffset > 0;\n  })\n});\nvar fvar = new r.Struct({\n  version: r.fixed32,\n  offsetToData: r.uint16,\n  countSizePairs: r.uint16,\n  axisCount: r.uint16,\n  axisSize: r.uint16,\n  instanceCount: r.uint16,\n  instanceSize: r.uint16,\n  axis: new r.Array(Axis$1, 'axisCount'),\n  instance: new r.Array(Instance, 'instanceCount')\n});\nvar shortFrac$1 = new r.Fixed(16, 'BE', 14);\nvar Offset = /*#__PURE__*/function () {\n  function Offset() {}\n  Offset.decode = function decode(stream, parent) {\n    // In short format, offsets are multiplied by 2.\n    // This doesn't seem to be documented by Apple, but it\n    // is implemented this way in Freetype.\n    return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2;\n  };\n  return Offset;\n}();\nvar gvar = new r.Struct({\n  version: r.uint16,\n  reserved: new r.Reserved(r.uint16),\n  axisCount: r.uint16,\n  globalCoordCount: r.uint16,\n  globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac$1, 'axisCount'), 'globalCoordCount')),\n  glyphCount: r.uint16,\n  flags: r.uint16,\n  offsetToData: r.uint32,\n  offsets: new r.Array(new r.Pointer(Offset, 'void', {\n    relativeTo: function relativeTo(ctx) {\n      return ctx.offsetToData;\n    },\n    allowNull: false\n  }), function (t) {\n    return t.glyphCount + 1;\n  })\n});\nvar ClassTable$1 = new r.Struct({\n  length: r.uint16,\n  coverage: r.uint16,\n  subFeatureFlags: r.uint32,\n  stateTable: new StateTable1()\n});\nvar WidthDeltaRecord = new r.Struct({\n  justClass: r.uint32,\n  beforeGrowLimit: r.fixed32,\n  beforeShrinkLimit: r.fixed32,\n  afterGrowLimit: r.fixed32,\n  afterShrinkLimit: r.fixed32,\n  growFlags: r.uint16,\n  shrinkFlags: r.uint16\n});\nvar WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32);\nvar ActionData = new r.VersionedStruct('actionType', {\n  0: {\n    // Decomposition action\n    lowerLimit: r.fixed32,\n    upperLimit: r.fixed32,\n    order: r.uint16,\n    glyphs: new r.Array(r.uint16, r.uint16)\n  },\n  1: {\n    // Unconditional add glyph action\n    addGlyph: r.uint16\n  },\n  2: {\n    // Conditional add glyph action\n    substThreshold: r.fixed32,\n    addGlyph: r.uint16,\n    substGlyph: r.uint16\n  },\n  3: {},\n  // Stretch glyph action (no data, not supported by CoreText)\n  4: {\n    // Ductile glyph action (not supported by CoreText)\n    variationAxis: r.uint32,\n    minimumLimit: r.fixed32,\n    noStretchValue: r.fixed32,\n    maximumLimit: r.fixed32\n  },\n  5: {\n    // Repeated add glyph action\n    flags: r.uint16,\n    glyph: r.uint16\n  }\n});\nvar Action = new r.Struct({\n  actionClass: r.uint16,\n  actionType: r.uint16,\n  actionLength: r.uint32,\n  actionData: ActionData,\n  padding: new r.Reserved(r.uint8, function (t) {\n    return t.actionLength - t._currentOffset;\n  })\n});\nvar PostcompensationAction = new r.Array(Action, r.uint32);\nvar PostCompensationTable = new r.Struct({\n  lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction))\n});\nvar JustificationTable = new r.Struct({\n  classTable: new r.Pointer(r.uint16, ClassTable$1, {\n    type: 'parent'\n  }),\n  wdcOffset: r.uint16,\n  postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, {\n    type: 'parent'\n  }),\n  widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, {\n    type: 'parent',\n    relativeTo: function relativeTo(ctx) {\n      return ctx.wdcOffset;\n    }\n  }))\n});\nvar just = new r.Struct({\n  version: r.uint32,\n  format: r.uint16,\n  horizontal: new r.Pointer(r.uint16, JustificationTable),\n  vertical: new r.Pointer(r.uint16, JustificationTable)\n});\nvar LigatureData = {\n  action: r.uint16\n};\nvar ContextualData = {\n  markIndex: r.uint16,\n  currentIndex: r.uint16\n};\nvar InsertionData = {\n  currentInsertIndex: r.uint16,\n  markedInsertIndex: r.uint16\n};\nvar SubstitutionTable = new r.Struct({\n  items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable()))\n});\nvar SubtableData = new r.VersionedStruct('type', {\n  0: {\n    // Indic Rearrangement Subtable\n    stateTable: new StateTable()\n  },\n  1: {\n    // Contextual Glyph Substitution Subtable\n    stateTable: new StateTable(ContextualData),\n    substitutionTable: new r.Pointer(r.uint32, SubstitutionTable)\n  },\n  2: {\n    // Ligature subtable\n    stateTable: new StateTable(LigatureData),\n    ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)),\n    components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)),\n    ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n  },\n  4: {\n    // Non-contextual Glyph Substitution Subtable\n    lookupTable: new LookupTable()\n  },\n  5: {\n    // Glyph Insertion Subtable\n    stateTable: new StateTable(InsertionData),\n    insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n  }\n});\nvar Subtable = new r.Struct({\n  length: r.uint32,\n  coverage: r.uint24,\n  type: r.uint8,\n  subFeatureFlags: r.uint32,\n  table: SubtableData,\n  padding: new r.Reserved(r.uint8, function (t) {\n    return t.length - t._currentOffset;\n  })\n});\nvar FeatureEntry = new r.Struct({\n  featureType: r.uint16,\n  featureSetting: r.uint16,\n  enableFlags: r.uint32,\n  disableFlags: r.uint32\n});\nvar MorxChain = new r.Struct({\n  defaultFlags: r.uint32,\n  chainLength: r.uint32,\n  nFeatureEntries: r.uint32,\n  nSubtables: r.uint32,\n  features: new r.Array(FeatureEntry, 'nFeatureEntries'),\n  subtables: new r.Array(Subtable, 'nSubtables')\n});\nvar morx = new r.Struct({\n  version: r.uint16,\n  unused: new r.Reserved(r.uint16),\n  nChains: r.uint32,\n  chains: new r.Array(MorxChain, 'nChains')\n});\nvar OpticalBounds = new r.Struct({\n  left: r.int16,\n  top: r.int16,\n  right: r.int16,\n  bottom: r.int16\n});\nvar opbd = new r.Struct({\n  version: r.fixed32,\n  format: r.uint16,\n  lookupTable: new LookupTable(OpticalBounds)\n});\nvar tables = {};\ntables.cmap = cmap;\ntables.head = head;\ntables.hhea = hhea;\ntables.hmtx = hmtx;\ntables.maxp = maxp;\ntables.name = NameTable;\ntables['OS/2'] = OS2;\ntables.post = post; // TrueType Outlines\ntables.fpgm = fpgm;\ntables.loca = loca;\ntables.prep = prep;\ntables['cvt '] = cvt;\ntables.glyf = glyf; // PostScript Outlines\ntables['CFF '] = CFFFont;\ntables['CFF2'] = CFFFont;\ntables.VORG = VORG; // Bitmap Glyphs\ntables.EBLC = EBLC;\ntables.CBLC = tables.EBLC;\ntables.sbix = sbix;\ntables.COLR = COLR;\ntables.CPAL = CPAL; // Advanced OpenType Tables\ntables.BASE = BASE;\ntables.GDEF = GDEF;\ntables.GPOS = GPOS;\ntables.GSUB = GSUB;\ntables.JSTF = JSTF; // OpenType variations tables\ntables.HVAR = HVAR; // Other OpenType Tables\ntables.DSIG = DSIG;\ntables.gasp = gasp;\ntables.hdmx = hdmx;\ntables.kern = kern;\ntables.LTSH = LTSH;\ntables.PCLT = PCLT;\ntables.VDMX = VDMX;\ntables.vhea = vhea;\ntables.vmtx = vmtx; // Apple Advanced Typography Tables\ntables.avar = avar;\ntables.bsln = bsln;\ntables.feat = feat;\ntables.fvar = fvar;\ntables.gvar = gvar;\ntables.just = just;\ntables.morx = morx;\ntables.opbd = opbd;\nvar TableEntry = new r.Struct({\n  tag: new r.String(4),\n  checkSum: r.uint32,\n  offset: new r.Pointer(r.uint32, 'void', {\n    type: 'global'\n  }),\n  length: r.uint32\n});\nvar Directory = new r.Struct({\n  tag: new r.String(4),\n  numTables: r.uint16,\n  searchRange: r.uint16,\n  entrySelector: r.uint16,\n  rangeShift: r.uint16,\n  tables: new r.Array(TableEntry, 'numTables')\n});\nDirectory.process = function () {\n  var tables = {};\n  for (var _iterator9 = _createForOfIteratorHelperLoose(this.tables), _step9; !(_step9 = _iterator9()).done;) {\n    var table = _step9.value;\n    tables[table.tag] = table;\n  }\n  this.tables = tables;\n};\nDirectory.preEncode = function (stream) {\n  var tables$1 = [];\n  for (var tag in this.tables) {\n    var table = this.tables[tag];\n    if (table) {\n      tables$1.push({\n        tag: tag,\n        checkSum: 0,\n        offset: new r.VoidPointer(tables[tag], table),\n        length: tables[tag].size(table)\n      });\n    }\n  }\n  this.tag = 'true';\n  this.numTables = tables$1.length;\n  this.tables = tables$1;\n  var maxExponentFor2 = Math.floor(Math.log(this.numTables) / Math.LN2);\n  var maxPowerOf2 = Math.pow(2, maxExponentFor2);\n  this.searchRange = maxPowerOf2 * 16;\n  this.entrySelector = Math.log(maxPowerOf2) / Math.LN2;\n  this.rangeShift = this.numTables * 16 - this.searchRange;\n};\nfunction binarySearch(arr, cmp) {\n  var min = 0;\n  var max = arr.length - 1;\n  while (min <= max) {\n    var mid = min + max >> 1;\n    var res = cmp(arr[mid]);\n    if (res < 0) {\n      max = mid - 1;\n    } else if (res > 0) {\n      min = mid + 1;\n    } else {\n      return mid;\n    }\n  }\n  return -1;\n}\nfunction range(index, end) {\n  var range = [];\n  while (index < end) {\n    range.push(index++);\n  }\n  return range;\n}\nvar _class;\ntry {\n  var iconv = __webpack_require__(4914);\n} catch (err) {}\nvar CmapProcessor = (_class = /*#__PURE__*/function () {\n  function CmapProcessor(cmapTable) {\n    // Attempt to find a Unicode cmap first\n    this.encoding = null;\n    this.cmap = this.findSubtable(cmapTable, [\n    // 32-bit subtables\n    [3, 10], [0, 6], [0, 4],\n    // 16-bit subtables\n    [3, 1], [0, 3], [0, 2], [0, 1], [0, 0]]); // If not unicode cmap was found, and iconv-lite is installed,\n    // take the first table with a supported encoding.\n\n    if (!this.cmap && iconv) {\n      for (var _iterator10 = _createForOfIteratorHelperLoose(cmapTable.tables), _step10; !(_step10 = _iterator10()).done;) {\n        var cmap = _step10.value;\n        var encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1);\n        if (iconv.encodingExists(encoding)) {\n          this.cmap = cmap.table;\n          this.encoding = encoding;\n        }\n      }\n    }\n    if (!this.cmap) {\n      throw new Error(\"Could not find a supported cmap table\");\n    }\n    this.uvs = this.findSubtable(cmapTable, [[0, 5]]);\n    if (this.uvs && this.uvs.version !== 14) {\n      this.uvs = null;\n    }\n  }\n  var _proto15 = CmapProcessor.prototype;\n  _proto15.findSubtable = function findSubtable(cmapTable, pairs) {\n    for (var _iterator11 = _createForOfIteratorHelperLoose(pairs), _step11; !(_step11 = _iterator11()).done;) {\n      var _step11$value = _step11.value,\n        platformID = _step11$value[0],\n        encodingID = _step11$value[1];\n      for (var _iterator12 = _createForOfIteratorHelperLoose(cmapTable.tables), _step12; !(_step12 = _iterator12()).done;) {\n        var cmap = _step12.value;\n        if (cmap.platformID === platformID && cmap.encodingID === encodingID) {\n          return cmap.table;\n        }\n      }\n    }\n    return null;\n  };\n  _proto15.lookup = function lookup(codepoint, variationSelector) {\n    // If there is no Unicode cmap in this font, we need to re-encode\n    // the codepoint in the encoding that the cmap supports.\n    if (this.encoding) {\n      var buf = iconv.encode(String.fromCodePoint(codepoint), this.encoding);\n      codepoint = 0;\n      for (var i = 0; i < buf.length; i++) {\n        codepoint = codepoint << 8 | buf[i];\n      } // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided.\n    } else if (variationSelector) {\n      var gid = this.getVariationSelector(codepoint, variationSelector);\n      if (gid) {\n        return gid;\n      }\n    }\n    var cmap = this.cmap;\n    switch (cmap.version) {\n      case 0:\n        return cmap.codeMap.get(codepoint) || 0;\n      case 4:\n        {\n          var min = 0;\n          var max = cmap.segCount - 1;\n          while (min <= max) {\n            var mid = min + max >> 1;\n            if (codepoint < cmap.startCode.get(mid)) {\n              max = mid - 1;\n            } else if (codepoint > cmap.endCode.get(mid)) {\n              min = mid + 1;\n            } else {\n              var rangeOffset = cmap.idRangeOffset.get(mid);\n              var _gid = void 0;\n              if (rangeOffset === 0) {\n                _gid = codepoint + cmap.idDelta.get(mid);\n              } else {\n                var index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid);\n                _gid = cmap.glyphIndexArray.get(index) || 0;\n                if (_gid !== 0) {\n                  _gid += cmap.idDelta.get(mid);\n                }\n              }\n              return _gid & 0xffff;\n            }\n          }\n          return 0;\n        }\n      case 8:\n        throw new Error('TODO: cmap format 8');\n      case 6:\n      case 10:\n        return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0;\n      case 12:\n      case 13:\n        {\n          var _min = 0;\n          var _max = cmap.nGroups - 1;\n          while (_min <= _max) {\n            var _mid = _min + _max >> 1;\n            var group = cmap.groups.get(_mid);\n            if (codepoint < group.startCharCode) {\n              _max = _mid - 1;\n            } else if (codepoint > group.endCharCode) {\n              _min = _mid + 1;\n            } else {\n              if (cmap.version === 12) {\n                return group.glyphID + (codepoint - group.startCharCode);\n              } else {\n                return group.glyphID;\n              }\n            }\n          }\n          return 0;\n        }\n      case 14:\n        throw new Error('TODO: cmap format 14');\n      default:\n        throw new Error(\"Unknown cmap format \".concat(cmap.version));\n    }\n  };\n  _proto15.getVariationSelector = function getVariationSelector(codepoint, variationSelector) {\n    if (!this.uvs) {\n      return 0;\n    }\n    var selectors = this.uvs.varSelectors.toArray();\n    var i = binarySearch(selectors, function (x) {\n      return variationSelector - x.varSelector;\n    });\n    var sel = selectors[i];\n    if (i !== -1 && sel.defaultUVS) {\n      i = binarySearch(sel.defaultUVS, function (x) {\n        return codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0;\n      });\n    }\n    if (i !== -1 && sel.nonDefaultUVS) {\n      i = binarySearch(sel.nonDefaultUVS, function (x) {\n        return codepoint - x.unicodeValue;\n      });\n      if (i !== -1) {\n        return sel.nonDefaultUVS[i].glyphID;\n      }\n    }\n    return 0;\n  };\n  _proto15.getCharacterSet = function getCharacterSet() {\n    var cmap = this.cmap;\n    switch (cmap.version) {\n      case 0:\n        return range(0, cmap.codeMap.length);\n      case 4:\n        {\n          var res = [];\n          var endCodes = cmap.endCode.toArray();\n          for (var i = 0; i < endCodes.length; i++) {\n            var tail = endCodes[i] + 1;\n            var start = cmap.startCode.get(i);\n            res.push.apply(res, range(start, tail));\n          }\n          return res;\n        }\n      case 8:\n        throw new Error('TODO: cmap format 8');\n      case 6:\n      case 10:\n        return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length);\n      case 12:\n      case 13:\n        {\n          var _res = [];\n          for (var _iterator13 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step13; !(_step13 = _iterator13()).done;) {\n            var group = _step13.value;\n            _res.push.apply(_res, range(group.startCharCode, group.endCharCode + 1));\n          }\n          return _res;\n        }\n      case 14:\n        throw new Error('TODO: cmap format 14');\n      default:\n        throw new Error(\"Unknown cmap format \".concat(cmap.version));\n    }\n  };\n  _proto15.codePointsForGlyph = function codePointsForGlyph(gid) {\n    var cmap = this.cmap;\n    switch (cmap.version) {\n      case 0:\n        {\n          var res = [];\n          for (var i = 0; i < 256; i++) {\n            if (cmap.codeMap.get(i) === gid) {\n              res.push(i);\n            }\n          }\n          return res;\n        }\n      case 4:\n        {\n          var _res2 = [];\n          for (var _i = 0; _i < cmap.segCount; _i++) {\n            var end = cmap.endCode.get(_i);\n            var start = cmap.startCode.get(_i);\n            var rangeOffset = cmap.idRangeOffset.get(_i);\n            var delta = cmap.idDelta.get(_i);\n            for (var c = start; c <= end; c++) {\n              var g = 0;\n              if (rangeOffset === 0) {\n                g = c + delta;\n              } else {\n                var index = rangeOffset / 2 + (c - start) - (cmap.segCount - _i);\n                g = cmap.glyphIndexArray.get(index) || 0;\n                if (g !== 0) {\n                  g += delta;\n                }\n              }\n              if (g === gid) {\n                _res2.push(c);\n              }\n            }\n          }\n          return _res2;\n        }\n      case 12:\n        {\n          var _res3 = [];\n          for (var _iterator14 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step14; !(_step14 = _iterator14()).done;) {\n            var group = _step14.value;\n            if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) {\n              _res3.push(group.startCharCode + (gid - group.glyphID));\n            }\n          }\n          return _res3;\n        }\n      case 13:\n        {\n          var _res4 = [];\n          for (var _iterator15 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step15; !(_step15 = _iterator15()).done;) {\n            var _group = _step15.value;\n            if (gid === _group.glyphID) {\n              _res4.push.apply(_res4, range(_group.startCharCode, _group.endCharCode + 1));\n            }\n          }\n          return _res4;\n        }\n      default:\n        throw new Error(\"Unknown cmap format \".concat(cmap.version));\n    }\n  };\n  return CmapProcessor;\n}(), (_applyDecoratedDescriptor(_class.prototype, \"getCharacterSet\", [cache], Object.getOwnPropertyDescriptor(_class.prototype, \"getCharacterSet\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"codePointsForGlyph\", [cache], Object.getOwnPropertyDescriptor(_class.prototype, \"codePointsForGlyph\"), _class.prototype)), _class);\nvar KernProcessor = /*#__PURE__*/function () {\n  function KernProcessor(font) {\n    this.kern = font.kern;\n  }\n  var _proto16 = KernProcessor.prototype;\n  _proto16.process = function process(glyphs, positions) {\n    for (var glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) {\n      var left = glyphs[glyphIndex].id;\n      var right = glyphs[glyphIndex + 1].id;\n      positions[glyphIndex].xAdvance += this.getKerning(left, right);\n    }\n  };\n  _proto16.getKerning = function getKerning(left, right) {\n    var res = 0;\n    for (var _iterator16 = _createForOfIteratorHelperLoose(this.kern.tables), _step16; !(_step16 = _iterator16()).done;) {\n      var table = _step16.value;\n      if (table.coverage.crossStream) {\n        continue;\n      }\n      switch (table.version) {\n        case 0:\n          if (!table.coverage.horizontal) {\n            continue;\n          }\n          break;\n        case 1:\n          if (table.coverage.vertical || table.coverage.variation) {\n            continue;\n          }\n          break;\n        default:\n          throw new Error(\"Unsupported kerning table version \".concat(table.version));\n      }\n      var val = 0;\n      var s = table.subtable;\n      switch (table.format) {\n        case 0:\n          var pairIdx = binarySearch(s.pairs, function (pair) {\n            return left - pair.left || right - pair.right;\n          });\n          if (pairIdx >= 0) {\n            val = s.pairs[pairIdx].value;\n          }\n          break;\n        case 2:\n          var leftOffset = 0,\n            rightOffset = 0;\n          if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) {\n            leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph];\n          } else {\n            leftOffset = s.array.off;\n          }\n          if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) {\n            rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph];\n          }\n          var index = (leftOffset + rightOffset - s.array.off) / 2;\n          val = s.array.values.get(index);\n          break;\n        case 3:\n          if (left >= s.glyphCount || right >= s.glyphCount) {\n            return 0;\n          }\n          val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]];\n          break;\n        default:\n          throw new Error(\"Unsupported kerning sub-table format \".concat(table.format));\n      } // Microsoft supports the override flag, which resets the result\n      // Otherwise, the sum of the results from all subtables is returned\n\n      if (table.coverage.override) {\n        res = val;\n      } else {\n        res += val;\n      }\n    }\n    return res;\n  };\n  return KernProcessor;\n}();\n/**\n * This class is used when GPOS does not define 'mark' or 'mkmk' features\n * for positioning marks relative to base glyphs. It uses the unicode\n * combining class property to position marks.\n *\n * Based on code from Harfbuzz, thanks!\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc\n */\nvar UnicodeLayoutEngine = /*#__PURE__*/function () {\n  function UnicodeLayoutEngine(font) {\n    this.font = font;\n  }\n  var _proto17 = UnicodeLayoutEngine.prototype;\n  _proto17.positionGlyphs = function positionGlyphs(glyphs, positions) {\n    // find each base + mark cluster, and position the marks relative to the base\n    var clusterStart = 0;\n    var clusterEnd = 0;\n    for (var index = 0; index < glyphs.length; index++) {\n      var glyph = glyphs[index];\n      if (glyph.isMark) {\n        // TODO: handle ligatures\n        clusterEnd = index;\n      } else {\n        if (clusterStart !== clusterEnd) {\n          this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n        }\n        clusterStart = clusterEnd = index;\n      }\n    }\n    if (clusterStart !== clusterEnd) {\n      this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n    }\n    return positions;\n  };\n  _proto17.positionCluster = function positionCluster(glyphs, positions, clusterStart, clusterEnd) {\n    var base = glyphs[clusterStart];\n    var baseBox = base.cbox.copy(); // adjust bounding box for ligature glyphs\n\n    if (base.codePoints.length > 1) {\n      // LTR. TODO: RTL support.\n      baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length;\n    }\n    var xOffset = -positions[clusterStart].xAdvance;\n    var yOffset = 0;\n    var yGap = this.font.unitsPerEm / 16; // position each of the mark glyphs relative to the base glyph\n\n    for (var index = clusterStart + 1; index <= clusterEnd; index++) {\n      var mark = glyphs[index];\n      var markBox = mark.cbox;\n      var position = positions[index];\n      var combiningClass = this.getCombiningClass(mark.codePoints[0]);\n      if (combiningClass !== 'Not_Reordered') {\n        position.xOffset = position.yOffset = 0; // x positioning\n\n        switch (combiningClass) {\n          case 'Double_Above':\n          case 'Double_Below':\n            // LTR. TODO: RTL support.\n            position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX;\n            break;\n          case 'Attached_Below_Left':\n          case 'Below_Left':\n          case 'Above_Left':\n            // left align\n            position.xOffset += baseBox.minX - markBox.minX;\n            break;\n          case 'Attached_Above_Right':\n          case 'Below_Right':\n          case 'Above_Right':\n            // right align\n            position.xOffset += baseBox.maxX - markBox.width - markBox.minX;\n            break;\n          default:\n            // Attached_Below, Attached_Above, Below, Above, other\n            // center align\n            position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX;\n        } // y positioning\n\n        switch (combiningClass) {\n          case 'Double_Below':\n          case 'Below_Left':\n          case 'Below':\n          case 'Below_Right':\n          case 'Attached_Below_Left':\n          case 'Attached_Below':\n            // add a small gap between the glyphs if they are not attached\n            if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') {\n              baseBox.minY += yGap;\n            }\n            position.yOffset = -baseBox.minY - markBox.maxY;\n            baseBox.minY += markBox.height;\n            break;\n          case 'Double_Above':\n          case 'Above_Left':\n          case 'Above':\n          case 'Above_Right':\n          case 'Attached_Above':\n          case 'Attached_Above_Right':\n            // add a small gap between the glyphs if they are not attached\n            if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') {\n              baseBox.maxY += yGap;\n            }\n            position.yOffset = baseBox.maxY - markBox.minY;\n            baseBox.maxY += markBox.height;\n            break;\n        }\n        position.xAdvance = position.yAdvance = 0;\n        position.xOffset += xOffset;\n        position.yOffset += yOffset;\n      } else {\n        xOffset -= position.xAdvance;\n        yOffset -= position.yAdvance;\n      }\n    }\n    return;\n  };\n  _proto17.getCombiningClass = function getCombiningClass(codePoint) {\n    var combiningClass = unicode.getCombiningClass(codePoint); // Thai / Lao need some per-character work\n\n    if ((codePoint & ~0xff) === 0x0e00) {\n      if (combiningClass === 'Not_Reordered') {\n        switch (codePoint) {\n          case 0x0e31:\n          case 0x0e34:\n          case 0x0e35:\n          case 0x0e36:\n          case 0x0e37:\n          case 0x0e47:\n          case 0x0e4c:\n          case 0x0e3d:\n          case 0x0e4e:\n            return 'Above_Right';\n          case 0x0eb1:\n          case 0x0eb4:\n          case 0x0eb5:\n          case 0x0eb6:\n          case 0x0eb7:\n          case 0x0ebb:\n          case 0x0ecc:\n          case 0x0ecd:\n            return 'Above';\n          case 0x0ebc:\n            return 'Below';\n        }\n      } else if (codePoint === 0x0e3a) {\n        // virama\n        return 'Below_Right';\n      }\n    }\n    switch (combiningClass) {\n      // Hebrew\n      case 'CCC10': // sheva\n\n      case 'CCC11': // hataf segol\n\n      case 'CCC12': // hataf patah\n\n      case 'CCC13': // hataf qamats\n\n      case 'CCC14': // hiriq\n\n      case 'CCC15': // tsere\n\n      case 'CCC16': // segol\n\n      case 'CCC17': // patah\n\n      case 'CCC18': // qamats\n\n      case 'CCC20': // qubuts\n\n      case 'CCC22':\n        // meteg\n        return 'Below';\n      case 'CCC23':\n        // rafe\n        return 'Attached_Above';\n      case 'CCC24':\n        // shin dot\n        return 'Above_Right';\n      case 'CCC25': // sin dot\n\n      case 'CCC19':\n        // holam\n        return 'Above_Left';\n      case 'CCC26':\n        // point varika\n        return 'Above';\n      case 'CCC21':\n        // dagesh\n        break;\n      // Arabic and Syriac\n\n      case 'CCC27': // fathatan\n\n      case 'CCC28': // dammatan\n\n      case 'CCC30': // fatha\n\n      case 'CCC31': // damma\n\n      case 'CCC33': // shadda\n\n      case 'CCC34': // sukun\n\n      case 'CCC35': // superscript alef\n\n      case 'CCC36':\n        // superscript alaph\n        return 'Above';\n      case 'CCC29': // kasratan\n\n      case 'CCC32':\n        // kasra\n        return 'Below';\n      // Thai\n\n      case 'CCC103':\n        // sara u / sara uu\n        return 'Below_Right';\n      case 'CCC107':\n        // mai\n        return 'Above_Right';\n      // Lao\n\n      case 'CCC118':\n        // sign u / sign uu\n        return 'Below';\n      case 'CCC122':\n        // mai\n        return 'Above';\n      // Tibetan\n\n      case 'CCC129': // sign aa\n\n      case 'CCC132':\n        // sign u\n        return 'Below';\n      case 'CCC130':\n        // sign i\n        return 'Above';\n    }\n    return combiningClass;\n  };\n  return UnicodeLayoutEngine;\n}();\n/**\n * Represents a glyph bounding box\n */\nvar BBox = /*#__PURE__*/function () {\n  function BBox(minX, minY, maxX, maxY) {\n    if (minX === void 0) {\n      minX = Infinity;\n    }\n    if (minY === void 0) {\n      minY = Infinity;\n    }\n    if (maxX === void 0) {\n      maxX = -Infinity;\n    }\n    if (maxY === void 0) {\n      maxY = -Infinity;\n    }\n    /**\n     * The minimum X position in the bounding box\n     * @type {number}\n     */\n    this.minX = minX;\n    /**\n     * The minimum Y position in the bounding box\n     * @type {number}\n     */\n\n    this.minY = minY;\n    /**\n     * The maxmimum X position in the bounding box\n     * @type {number}\n     */\n\n    this.maxX = maxX;\n    /**\n     * The maxmimum Y position in the bounding box\n     * @type {number}\n     */\n\n    this.maxY = maxY;\n  }\n  /**\n   * The width of the bounding box\n   * @type {number}\n   */\n  var _proto18 = BBox.prototype;\n  _proto18.addPoint = function addPoint(x, y) {\n    if (Math.abs(x) !== Infinity) {\n      if (x < this.minX) {\n        this.minX = x;\n      }\n      if (x > this.maxX) {\n        this.maxX = x;\n      }\n    }\n    if (Math.abs(y) !== Infinity) {\n      if (y < this.minY) {\n        this.minY = y;\n      }\n      if (y > this.maxY) {\n        this.maxY = y;\n      }\n    }\n  };\n  _proto18.copy = function copy() {\n    return new BBox(this.minX, this.minY, this.maxX, this.maxY);\n  };\n  _createClass(BBox, [{\n    key: \"width\",\n    get: function get() {\n      return this.maxX - this.minX;\n    }\n    /**\n     * The height of the bounding box\n     * @type {number}\n     */\n  }, {\n    key: \"height\",\n    get: function get() {\n      return this.maxY - this.minY;\n    }\n  }]);\n  return BBox;\n}(); // Data from http://www.microsoft.com/typography/otspec/scripttags.htm\n// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt.\nvar UNICODE_SCRIPTS = {\n  Caucasian_Albanian: 'aghb',\n  Arabic: 'arab',\n  Imperial_Aramaic: 'armi',\n  Armenian: 'armn',\n  Avestan: 'avst',\n  Balinese: 'bali',\n  Bamum: 'bamu',\n  Bassa_Vah: 'bass',\n  Batak: 'batk',\n  Bengali: ['bng2', 'beng'],\n  Bopomofo: 'bopo',\n  Brahmi: 'brah',\n  Braille: 'brai',\n  Buginese: 'bugi',\n  Buhid: 'buhd',\n  Chakma: 'cakm',\n  Canadian_Aboriginal: 'cans',\n  Carian: 'cari',\n  Cham: 'cham',\n  Cherokee: 'cher',\n  Coptic: 'copt',\n  Cypriot: 'cprt',\n  Cyrillic: 'cyrl',\n  Devanagari: ['dev2', 'deva'],\n  Deseret: 'dsrt',\n  Duployan: 'dupl',\n  Egyptian_Hieroglyphs: 'egyp',\n  Elbasan: 'elba',\n  Ethiopic: 'ethi',\n  Georgian: 'geor',\n  Glagolitic: 'glag',\n  Gothic: 'goth',\n  Grantha: 'gran',\n  Greek: 'grek',\n  Gujarati: ['gjr2', 'gujr'],\n  Gurmukhi: ['gur2', 'guru'],\n  Hangul: 'hang',\n  Han: 'hani',\n  Hanunoo: 'hano',\n  Hebrew: 'hebr',\n  Hiragana: 'hira',\n  Pahawh_Hmong: 'hmng',\n  Katakana_Or_Hiragana: 'hrkt',\n  Old_Italic: 'ital',\n  Javanese: 'java',\n  Kayah_Li: 'kali',\n  Katakana: 'kana',\n  Kharoshthi: 'khar',\n  Khmer: 'khmr',\n  Khojki: 'khoj',\n  Kannada: ['knd2', 'knda'],\n  Kaithi: 'kthi',\n  Tai_Tham: 'lana',\n  Lao: 'lao ',\n  Latin: 'latn',\n  Lepcha: 'lepc',\n  Limbu: 'limb',\n  Linear_A: 'lina',\n  Linear_B: 'linb',\n  Lisu: 'lisu',\n  Lycian: 'lyci',\n  Lydian: 'lydi',\n  Mahajani: 'mahj',\n  Mandaic: 'mand',\n  Manichaean: 'mani',\n  Mende_Kikakui: 'mend',\n  Meroitic_Cursive: 'merc',\n  Meroitic_Hieroglyphs: 'mero',\n  Malayalam: ['mlm2', 'mlym'],\n  Modi: 'modi',\n  Mongolian: 'mong',\n  Mro: 'mroo',\n  Meetei_Mayek: 'mtei',\n  Myanmar: ['mym2', 'mymr'],\n  Old_North_Arabian: 'narb',\n  Nabataean: 'nbat',\n  Nko: 'nko ',\n  Ogham: 'ogam',\n  Ol_Chiki: 'olck',\n  Old_Turkic: 'orkh',\n  Oriya: ['ory2', 'orya'],\n  Osmanya: 'osma',\n  Palmyrene: 'palm',\n  Pau_Cin_Hau: 'pauc',\n  Old_Permic: 'perm',\n  Phags_Pa: 'phag',\n  Inscriptional_Pahlavi: 'phli',\n  Psalter_Pahlavi: 'phlp',\n  Phoenician: 'phnx',\n  Miao: 'plrd',\n  Inscriptional_Parthian: 'prti',\n  Rejang: 'rjng',\n  Runic: 'runr',\n  Samaritan: 'samr',\n  Old_South_Arabian: 'sarb',\n  Saurashtra: 'saur',\n  Shavian: 'shaw',\n  Sharada: 'shrd',\n  Siddham: 'sidd',\n  Khudawadi: 'sind',\n  Sinhala: 'sinh',\n  Sora_Sompeng: 'sora',\n  Sundanese: 'sund',\n  Syloti_Nagri: 'sylo',\n  Syriac: 'syrc',\n  Tagbanwa: 'tagb',\n  Takri: 'takr',\n  Tai_Le: 'tale',\n  New_Tai_Lue: 'talu',\n  Tamil: ['tml2', 'taml'],\n  Tai_Viet: 'tavt',\n  Telugu: ['tel2', 'telu'],\n  Tifinagh: 'tfng',\n  Tagalog: 'tglg',\n  Thaana: 'thaa',\n  Thai: 'thai',\n  Tibetan: 'tibt',\n  Tirhuta: 'tirh',\n  Ugaritic: 'ugar',\n  Vai: 'vai ',\n  Warang_Citi: 'wara',\n  Old_Persian: 'xpeo',\n  Cuneiform: 'xsux',\n  Yi: 'yi  ',\n  Inherited: 'zinh',\n  Common: 'zyyy',\n  Unknown: 'zzzz'\n};\nvar OPENTYPE_SCRIPTS = {};\nfor (var script in UNICODE_SCRIPTS) {\n  var tag = UNICODE_SCRIPTS[script];\n  if (Array.isArray(tag)) {\n    for (var _iterator17 = _createForOfIteratorHelperLoose(tag), _step17; !(_step17 = _iterator17()).done;) {\n      var t = _step17.value;\n      OPENTYPE_SCRIPTS[t] = script;\n    }\n  } else {\n    OPENTYPE_SCRIPTS[tag] = script;\n  }\n}\nfunction fromOpenType(tag) {\n  return OPENTYPE_SCRIPTS[tag];\n}\nfunction forString(string) {\n  var len = string.length;\n  var idx = 0;\n  while (idx < len) {\n    var code = string.charCodeAt(idx++); // Check if this is a high surrogate\n\n    if (0xd800 <= code && code <= 0xdbff && idx < len) {\n      var next = string.charCodeAt(idx); // Check if this is a low surrogate\n\n      if (0xdc00 <= next && next <= 0xdfff) {\n        idx++;\n        code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000;\n      }\n    }\n    var _script = unicode.getScript(code);\n    if (_script !== 'Common' && _script !== 'Inherited' && _script !== 'Unknown') {\n      return UNICODE_SCRIPTS[_script];\n    }\n  }\n  return UNICODE_SCRIPTS.Unknown;\n}\nfunction forCodePoints(codePoints) {\n  for (var i = 0; i < codePoints.length; i++) {\n    var codePoint = codePoints[i];\n    var _script2 = unicode.getScript(codePoint);\n    if (_script2 !== 'Common' && _script2 !== 'Inherited' && _script2 !== 'Unknown') {\n      return UNICODE_SCRIPTS[_script2];\n    }\n  }\n  return UNICODE_SCRIPTS.Unknown;\n} // The scripts in this map are written from right to left\n\nvar RTL = {\n  arab: true,\n  // Arabic\n  hebr: true,\n  // Hebrew\n  syrc: true,\n  // Syriac\n  thaa: true,\n  // Thaana\n  cprt: true,\n  // Cypriot Syllabary\n  khar: true,\n  // Kharosthi\n  phnx: true,\n  // Phoenician\n  'nko ': true,\n  // N'Ko\n  lydi: true,\n  // Lydian\n  avst: true,\n  // Avestan\n  armi: true,\n  // Imperial Aramaic\n  phli: true,\n  // Inscriptional Pahlavi\n  prti: true,\n  // Inscriptional Parthian\n  sarb: true,\n  // Old South Arabian\n  orkh: true,\n  // Old Turkic, Orkhon Runic\n  samr: true,\n  // Samaritan\n  mand: true,\n  // Mandaic, Mandaean\n  merc: true,\n  // Meroitic Cursive\n  mero: true,\n  // Meroitic Hieroglyphs\n  // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm)\n  mani: true,\n  // Manichaean\n  mend: true,\n  // Mende Kikakui\n  nbat: true,\n  // Nabataean\n  narb: true,\n  // Old North Arabian\n  palm: true,\n  // Palmyrene\n  phlp: true // Psalter Pahlavi\n};\n\nfunction direction(script) {\n  if (RTL[script]) {\n    return 'rtl';\n  }\n  return 'ltr';\n}\n\n/**\n * Represents a run of Glyph and GlyphPosition objects.\n * Returned by the font layout method.\n */\nvar GlyphRun = /*#__PURE__*/function () {\n  function GlyphRun(glyphs, features, script, language, direction$1) {\n    /**\n     * An array of Glyph objects in the run\n     * @type {Glyph[]}\n     */\n    this.glyphs = glyphs;\n    /**\n     * An array of GlyphPosition objects for each glyph in the run\n     * @type {GlyphPosition[]}\n     */\n\n    this.positions = null;\n    /**\n     * The script that was requested for shaping. This was either passed in or detected automatically.\n     * @type {string}\n     */\n\n    this.script = script;\n    /**\n     * The language requested for shaping, as passed in. If `null`, the default language for the\n     * script was used.\n     * @type {string}\n     */\n\n    this.language = language || null;\n    /**\n     * The direction requested for shaping, as passed in (either ltr or rtl).\n     * If `null`, the default direction of the script is used.\n     * @type {string}\n     */\n\n    this.direction = direction$1 || direction(script);\n    /**\n     * The features requested during shaping. This is a combination of user\n     * specified features and features chosen by the shaper.\n     * @type {object}\n     */\n\n    this.features = {}; // Convert features to an object\n\n    if (Array.isArray(features)) {\n      for (var _iterator18 = _createForOfIteratorHelperLoose(features), _step18; !(_step18 = _iterator18()).done;) {\n        var tag = _step18.value;\n        this.features[tag] = true;\n      }\n    } else if (typeof features === 'object') {\n      this.features = features;\n    }\n  }\n  /**\n   * The total advance width of the run.\n   * @type {number}\n   */\n  _createClass(GlyphRun, [{\n    key: \"advanceWidth\",\n    get: function get() {\n      var width = 0;\n      for (var _iterator19 = _createForOfIteratorHelperLoose(this.positions), _step19; !(_step19 = _iterator19()).done;) {\n        var position = _step19.value;\n        width += position.xAdvance;\n      }\n      return width;\n    }\n    /**\n     * The total advance height of the run.\n     * @type {number}\n     */\n  }, {\n    key: \"advanceHeight\",\n    get: function get() {\n      var height = 0;\n      for (var _iterator20 = _createForOfIteratorHelperLoose(this.positions), _step20; !(_step20 = _iterator20()).done;) {\n        var position = _step20.value;\n        height += position.yAdvance;\n      }\n      return height;\n    }\n    /**\n     * The bounding box containing all glyphs in the run.\n     * @type {BBox}\n     */\n  }, {\n    key: \"bbox\",\n    get: function get() {\n      var bbox = new BBox();\n      var x = 0;\n      var y = 0;\n      for (var index = 0; index < this.glyphs.length; index++) {\n        var glyph = this.glyphs[index];\n        var p = this.positions[index];\n        var b = glyph.bbox;\n        bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset);\n        bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset);\n        x += p.xAdvance;\n        y += p.yAdvance;\n      }\n      return bbox;\n    }\n  }]);\n  return GlyphRun;\n}();\n/**\n * Represents positioning information for a glyph in a GlyphRun.\n */\nvar GlyphPosition = function GlyphPosition(xAdvance, yAdvance, xOffset, yOffset) {\n  if (xAdvance === void 0) {\n    xAdvance = 0;\n  }\n  if (yAdvance === void 0) {\n    yAdvance = 0;\n  }\n  if (xOffset === void 0) {\n    xOffset = 0;\n  }\n  if (yOffset === void 0) {\n    yOffset = 0;\n  }\n  /**\n   * The amount to move the virtual pen in the X direction after rendering this glyph.\n   * @type {number}\n   */\n  this.xAdvance = xAdvance;\n  /**\n   * The amount to move the virtual pen in the Y direction after rendering this glyph.\n   * @type {number}\n   */\n\n  this.yAdvance = yAdvance;\n  /**\n   * The offset from the pen position in the X direction at which to render this glyph.\n   * @type {number}\n   */\n\n  this.xOffset = xOffset;\n  /**\n   * The offset from the pen position in the Y direction at which to render this glyph.\n   * @type {number}\n   */\n\n  this.yOffset = yOffset;\n}; // see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html\n// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac\nvar features = {\n  allTypographicFeatures: {\n    code: 0,\n    exclusive: false,\n    allTypeFeatures: 0\n  },\n  ligatures: {\n    code: 1,\n    exclusive: false,\n    requiredLigatures: 0,\n    commonLigatures: 2,\n    rareLigatures: 4,\n    // logos: 6\n    rebusPictures: 8,\n    diphthongLigatures: 10,\n    squaredLigatures: 12,\n    abbrevSquaredLigatures: 14,\n    symbolLigatures: 16,\n    contextualLigatures: 18,\n    historicalLigatures: 20\n  },\n  cursiveConnection: {\n    code: 2,\n    exclusive: true,\n    unconnected: 0,\n    partiallyConnected: 1,\n    cursive: 2\n  },\n  letterCase: {\n    code: 3,\n    exclusive: true\n  },\n  // upperAndLowerCase: 0          # deprecated\n  // allCaps: 1                    # deprecated\n  // allLowerCase: 2               # deprecated\n  // smallCaps: 3                  # deprecated\n  // initialCaps: 4                # deprecated\n  // initialCapsAndSmallCaps: 5    # deprecated\n  verticalSubstitution: {\n    code: 4,\n    exclusive: false,\n    substituteVerticalForms: 0\n  },\n  linguisticRearrangement: {\n    code: 5,\n    exclusive: false,\n    linguisticRearrangement: 0\n  },\n  numberSpacing: {\n    code: 6,\n    exclusive: true,\n    monospacedNumbers: 0,\n    proportionalNumbers: 1,\n    thirdWidthNumbers: 2,\n    quarterWidthNumbers: 3\n  },\n  smartSwash: {\n    code: 8,\n    exclusive: false,\n    wordInitialSwashes: 0,\n    wordFinalSwashes: 2,\n    // lineInitialSwashes: 4\n    // lineFinalSwashes: 6\n    nonFinalSwashes: 8\n  },\n  diacritics: {\n    code: 9,\n    exclusive: true,\n    showDiacritics: 0,\n    hideDiacritics: 1,\n    decomposeDiacritics: 2\n  },\n  verticalPosition: {\n    code: 10,\n    exclusive: true,\n    normalPosition: 0,\n    superiors: 1,\n    inferiors: 2,\n    ordinals: 3,\n    scientificInferiors: 4\n  },\n  fractions: {\n    code: 11,\n    exclusive: true,\n    noFractions: 0,\n    verticalFractions: 1,\n    diagonalFractions: 2\n  },\n  overlappingCharacters: {\n    code: 13,\n    exclusive: false,\n    preventOverlap: 0\n  },\n  typographicExtras: {\n    code: 14,\n    exclusive: false,\n    // hyphensToEmDash: 0\n    // hyphenToEnDash: 2\n    slashedZero: 4\n  },\n  // formInterrobang: 6\n  // smartQuotes: 8\n  // periodsToEllipsis: 10\n  mathematicalExtras: {\n    code: 15,\n    exclusive: false,\n    // hyphenToMinus: 0\n    // asteristoMultiply: 2\n    // slashToDivide: 4\n    // inequalityLigatures: 6\n    // exponents: 8\n    mathematicalGreek: 10\n  },\n  ornamentSets: {\n    code: 16,\n    exclusive: true,\n    noOrnaments: 0,\n    dingbats: 1,\n    piCharacters: 2,\n    fleurons: 3,\n    decorativeBorders: 4,\n    internationalSymbols: 5,\n    mathSymbols: 6\n  },\n  characterAlternatives: {\n    code: 17,\n    exclusive: true,\n    noAlternates: 0\n  },\n  // user defined options\n  designComplexity: {\n    code: 18,\n    exclusive: true,\n    designLevel1: 0,\n    designLevel2: 1,\n    designLevel3: 2,\n    designLevel4: 3,\n    designLevel5: 4\n  },\n  styleOptions: {\n    code: 19,\n    exclusive: true,\n    noStyleOptions: 0,\n    displayText: 1,\n    engravedText: 2,\n    illuminatedCaps: 3,\n    titlingCaps: 4,\n    tallCaps: 5\n  },\n  characterShape: {\n    code: 20,\n    exclusive: true,\n    traditionalCharacters: 0,\n    simplifiedCharacters: 1,\n    JIS1978Characters: 2,\n    JIS1983Characters: 3,\n    JIS1990Characters: 4,\n    traditionalAltOne: 5,\n    traditionalAltTwo: 6,\n    traditionalAltThree: 7,\n    traditionalAltFour: 8,\n    traditionalAltFive: 9,\n    expertCharacters: 10,\n    JIS2004Characters: 11,\n    hojoCharacters: 12,\n    NLCCharacters: 13,\n    traditionalNamesCharacters: 14\n  },\n  numberCase: {\n    code: 21,\n    exclusive: true,\n    lowerCaseNumbers: 0,\n    upperCaseNumbers: 1\n  },\n  textSpacing: {\n    code: 22,\n    exclusive: true,\n    proportionalText: 0,\n    monospacedText: 1,\n    halfWidthText: 2,\n    thirdWidthText: 3,\n    quarterWidthText: 4,\n    altProportionalText: 5,\n    altHalfWidthText: 6\n  },\n  transliteration: {\n    code: 23,\n    exclusive: true,\n    noTransliteration: 0\n  },\n  // hanjaToHangul: 1\n  // hiraganaToKatakana: 2\n  // katakanaToHiragana: 3\n  // kanaToRomanization: 4\n  // romanizationToHiragana: 5\n  // romanizationToKatakana: 6\n  // hanjaToHangulAltOne: 7\n  // hanjaToHangulAltTwo: 8\n  // hanjaToHangulAltThree: 9\n  annotation: {\n    code: 24,\n    exclusive: true,\n    noAnnotation: 0,\n    boxAnnotation: 1,\n    roundedBoxAnnotation: 2,\n    circleAnnotation: 3,\n    invertedCircleAnnotation: 4,\n    parenthesisAnnotation: 5,\n    periodAnnotation: 6,\n    romanNumeralAnnotation: 7,\n    diamondAnnotation: 8,\n    invertedBoxAnnotation: 9,\n    invertedRoundedBoxAnnotation: 10\n  },\n  kanaSpacing: {\n    code: 25,\n    exclusive: true,\n    fullWidthKana: 0,\n    proportionalKana: 1\n  },\n  ideographicSpacing: {\n    code: 26,\n    exclusive: true,\n    fullWidthIdeographs: 0,\n    proportionalIdeographs: 1,\n    halfWidthIdeographs: 2\n  },\n  unicodeDecomposition: {\n    code: 27,\n    exclusive: false,\n    canonicalComposition: 0,\n    compatibilityComposition: 2,\n    transcodingComposition: 4\n  },\n  rubyKana: {\n    code: 28,\n    exclusive: false,\n    // noRubyKana: 0     # deprecated - use rubyKanaOff instead\n    // rubyKana: 1     # deprecated - use rubyKanaOn instead\n    rubyKana: 2\n  },\n  CJKSymbolAlternatives: {\n    code: 29,\n    exclusive: true,\n    noCJKSymbolAlternatives: 0,\n    CJKSymbolAltOne: 1,\n    CJKSymbolAltTwo: 2,\n    CJKSymbolAltThree: 3,\n    CJKSymbolAltFour: 4,\n    CJKSymbolAltFive: 5\n  },\n  ideographicAlternatives: {\n    code: 30,\n    exclusive: true,\n    noIdeographicAlternatives: 0,\n    ideographicAltOne: 1,\n    ideographicAltTwo: 2,\n    ideographicAltThree: 3,\n    ideographicAltFour: 4,\n    ideographicAltFive: 5\n  },\n  CJKVerticalRomanPlacement: {\n    code: 31,\n    exclusive: true,\n    CJKVerticalRomanCentered: 0,\n    CJKVerticalRomanHBaseline: 1\n  },\n  italicCJKRoman: {\n    code: 32,\n    exclusive: false,\n    // noCJKItalicRoman: 0     # deprecated - use CJKItalicRomanOff instead\n    // CJKItalicRoman: 1     # deprecated - use CJKItalicRomanOn instead\n    CJKItalicRoman: 2\n  },\n  caseSensitiveLayout: {\n    code: 33,\n    exclusive: false,\n    caseSensitiveLayout: 0,\n    caseSensitiveSpacing: 2\n  },\n  alternateKana: {\n    code: 34,\n    exclusive: false,\n    alternateHorizKana: 0,\n    alternateVertKana: 2\n  },\n  stylisticAlternatives: {\n    code: 35,\n    exclusive: false,\n    noStylisticAlternates: 0,\n    stylisticAltOne: 2,\n    stylisticAltTwo: 4,\n    stylisticAltThree: 6,\n    stylisticAltFour: 8,\n    stylisticAltFive: 10,\n    stylisticAltSix: 12,\n    stylisticAltSeven: 14,\n    stylisticAltEight: 16,\n    stylisticAltNine: 18,\n    stylisticAltTen: 20,\n    stylisticAltEleven: 22,\n    stylisticAltTwelve: 24,\n    stylisticAltThirteen: 26,\n    stylisticAltFourteen: 28,\n    stylisticAltFifteen: 30,\n    stylisticAltSixteen: 32,\n    stylisticAltSeventeen: 34,\n    stylisticAltEighteen: 36,\n    stylisticAltNineteen: 38,\n    stylisticAltTwenty: 40\n  },\n  contextualAlternates: {\n    code: 36,\n    exclusive: false,\n    contextualAlternates: 0,\n    swashAlternates: 2,\n    contextualSwashAlternates: 4\n  },\n  lowerCase: {\n    code: 37,\n    exclusive: true,\n    defaultLowerCase: 0,\n    lowerCaseSmallCaps: 1,\n    lowerCasePetiteCaps: 2\n  },\n  upperCase: {\n    code: 38,\n    exclusive: true,\n    defaultUpperCase: 0,\n    upperCaseSmallCaps: 1,\n    upperCasePetiteCaps: 2\n  },\n  languageTag: {\n    // indices into ltag table\n    code: 39,\n    exclusive: true\n  },\n  CJKRomanSpacing: {\n    code: 103,\n    exclusive: true,\n    halfWidthCJKRoman: 0,\n    proportionalCJKRoman: 1,\n    defaultCJKRoman: 2,\n    fullWidthCJKRoman: 3\n  }\n};\nvar feature = function feature(name, selector) {\n  return [features[name].code, features[name][selector]];\n};\nvar OTMapping = {\n  rlig: feature('ligatures', 'requiredLigatures'),\n  clig: feature('ligatures', 'contextualLigatures'),\n  dlig: feature('ligatures', 'rareLigatures'),\n  hlig: feature('ligatures', 'historicalLigatures'),\n  liga: feature('ligatures', 'commonLigatures'),\n  hist: feature('ligatures', 'historicalLigatures'),\n  // ??\n  smcp: feature('lowerCase', 'lowerCaseSmallCaps'),\n  pcap: feature('lowerCase', 'lowerCasePetiteCaps'),\n  frac: feature('fractions', 'diagonalFractions'),\n  dnom: feature('fractions', 'diagonalFractions'),\n  // ??\n  numr: feature('fractions', 'diagonalFractions'),\n  // ??\n  afrc: feature('fractions', 'verticalFractions'),\n  // aalt\n  // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset?\n  // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum?\n  // unic, vatu, vhal, vjmo, vpal, vrt2\n  // dist -> trak table?\n  // kern, vkrn -> kern table\n  // lfbd + opbd + rtbd -> opbd table?\n  // mark, mkmk -> acnt table?\n  // locl -> languageTag + ltag table\n  case: feature('caseSensitiveLayout', 'caseSensitiveLayout'),\n  // also caseSensitiveSpacing\n  ccmp: feature('unicodeDecomposition', 'canonicalComposition'),\n  // compatibilityComposition?\n  cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n  // guess..., probably not given below\n  valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n  swsh: feature('contextualAlternates', 'swashAlternates'),\n  cswh: feature('contextualAlternates', 'contextualSwashAlternates'),\n  curs: feature('cursiveConnection', 'cursive'),\n  // ??\n  c2pc: feature('upperCase', 'upperCasePetiteCaps'),\n  c2sc: feature('upperCase', 'upperCaseSmallCaps'),\n  init: feature('smartSwash', 'wordInitialSwashes'),\n  // ??\n  fin2: feature('smartSwash', 'wordFinalSwashes'),\n  // ??\n  medi: feature('smartSwash', 'nonFinalSwashes'),\n  // ??\n  med2: feature('smartSwash', 'nonFinalSwashes'),\n  // ??\n  fin3: feature('smartSwash', 'wordFinalSwashes'),\n  // ??\n  fina: feature('smartSwash', 'wordFinalSwashes'),\n  // ??\n  pkna: feature('kanaSpacing', 'proportionalKana'),\n  half: feature('textSpacing', 'halfWidthText'),\n  // also HalfWidthCJKRoman, HalfWidthIdeographs?\n  halt: feature('textSpacing', 'altHalfWidthText'),\n  hkna: feature('alternateKana', 'alternateHorizKana'),\n  vkna: feature('alternateKana', 'alternateVertKana'),\n  // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated\n  ital: feature('italicCJKRoman', 'CJKItalicRoman'),\n  lnum: feature('numberCase', 'upperCaseNumbers'),\n  onum: feature('numberCase', 'lowerCaseNumbers'),\n  mgrk: feature('mathematicalExtras', 'mathematicalGreek'),\n  // nalt: not enough info. what type of annotation?\n  // ornm: ditto, which ornament style?\n  calt: feature('contextualAlternates', 'contextualAlternates'),\n  // or more?\n  vrt2: feature('verticalSubstitution', 'substituteVerticalForms'),\n  // oh... below?\n  vert: feature('verticalSubstitution', 'substituteVerticalForms'),\n  tnum: feature('numberSpacing', 'monospacedNumbers'),\n  pnum: feature('numberSpacing', 'proportionalNumbers'),\n  sups: feature('verticalPosition', 'superiors'),\n  subs: feature('verticalPosition', 'inferiors'),\n  ordn: feature('verticalPosition', 'ordinals'),\n  pwid: feature('textSpacing', 'proportionalText'),\n  hwid: feature('textSpacing', 'halfWidthText'),\n  qwid: feature('textSpacing', 'quarterWidthText'),\n  // also QuarterWidthNumbers?\n  twid: feature('textSpacing', 'thirdWidthText'),\n  // also ThirdWidthNumbers?\n  fwid: feature('textSpacing', 'proportionalText'),\n  //??\n  palt: feature('textSpacing', 'altProportionalText'),\n  trad: feature('characterShape', 'traditionalCharacters'),\n  smpl: feature('characterShape', 'simplifiedCharacters'),\n  jp78: feature('characterShape', 'JIS1978Characters'),\n  jp83: feature('characterShape', 'JIS1983Characters'),\n  jp90: feature('characterShape', 'JIS1990Characters'),\n  jp04: feature('characterShape', 'JIS2004Characters'),\n  expt: feature('characterShape', 'expertCharacters'),\n  hojo: feature('characterShape', 'hojoCharacters'),\n  nlck: feature('characterShape', 'NLCCharacters'),\n  tnam: feature('characterShape', 'traditionalNamesCharacters'),\n  ruby: feature('rubyKana', 'rubyKana'),\n  titl: feature('styleOptions', 'titlingCaps'),\n  zero: feature('typographicExtras', 'slashedZero'),\n  ss01: feature('stylisticAlternatives', 'stylisticAltOne'),\n  ss02: feature('stylisticAlternatives', 'stylisticAltTwo'),\n  ss03: feature('stylisticAlternatives', 'stylisticAltThree'),\n  ss04: feature('stylisticAlternatives', 'stylisticAltFour'),\n  ss05: feature('stylisticAlternatives', 'stylisticAltFive'),\n  ss06: feature('stylisticAlternatives', 'stylisticAltSix'),\n  ss07: feature('stylisticAlternatives', 'stylisticAltSeven'),\n  ss08: feature('stylisticAlternatives', 'stylisticAltEight'),\n  ss09: feature('stylisticAlternatives', 'stylisticAltNine'),\n  ss10: feature('stylisticAlternatives', 'stylisticAltTen'),\n  ss11: feature('stylisticAlternatives', 'stylisticAltEleven'),\n  ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'),\n  ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'),\n  ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'),\n  ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'),\n  ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'),\n  ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'),\n  ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'),\n  ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'),\n  ss20: feature('stylisticAlternatives', 'stylisticAltTwenty')\n}; // salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose\n// Add cv01-cv99 features\n\nfor (var i = 1; i <= 99; i++) {\n  OTMapping[\"cv\".concat(\"00\".concat(i).slice(-2))] = [features.characterAlternatives.code, i];\n} // create inverse mapping\n\nvar AATMapping = {};\nfor (var ot in OTMapping) {\n  var aat = OTMapping[ot];\n  if (AATMapping[aat[0]] == null) {\n    AATMapping[aat[0]] = {};\n  }\n  AATMapping[aat[0]][aat[1]] = ot;\n} // Maps an array of OpenType features to AAT features\n// in the form of {featureType:{featureSetting:true}}\n\nfunction mapOTToAAT(features) {\n  var res = {};\n  for (var k in features) {\n    var r = void 0;\n    if (r = OTMapping[k]) {\n      if (res[r[0]] == null) {\n        res[r[0]] = {};\n      }\n      res[r[0]][r[1]] = features[k];\n    }\n  }\n  return res;\n} // Maps strings in a [featureType, featureSetting]\n// to their equivalent number codes\n\nfunction mapFeatureStrings(f) {\n  var type = f[0],\n    setting = f[1];\n  if (isNaN(type)) {\n    var typeCode = features[type] && features[type].code;\n  } else {\n    var typeCode = type;\n  }\n  if (isNaN(setting)) {\n    var settingCode = features[type] && features[type][setting];\n  } else {\n    var settingCode = setting;\n  }\n  return [typeCode, settingCode];\n} // Maps AAT features to an array of OpenType features\n// Supports both arrays in the form of [[featureType, featureSetting]]\n// and objects in the form of {featureType:{featureSetting:true}}\n// featureTypes and featureSettings can be either strings or number codes\n\nfunction mapAATToOT(features) {\n  var res = {};\n  if (Array.isArray(features)) {\n    for (var k = 0; k < features.length; k++) {\n      var r = void 0;\n      var f = mapFeatureStrings(features[k]);\n      if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) {\n        res[r] = true;\n      }\n    }\n  } else if (typeof features === 'object') {\n    for (var type in features) {\n      var _feature = features[type];\n      for (var setting in _feature) {\n        var _r = void 0;\n        var _f = mapFeatureStrings([type, setting]);\n        if (_feature[setting] && (_r = AATMapping[_f[0]] && AATMapping[_f[0]][_f[1]])) {\n          res[_r] = true;\n        }\n      }\n    }\n  }\n  return Object.keys(res);\n}\nvar _class$1;\nvar AATLookupTable = (_class$1 = /*#__PURE__*/function () {\n  function AATLookupTable(table) {\n    this.table = table;\n  }\n  var _proto19 = AATLookupTable.prototype;\n  _proto19.lookup = function lookup(glyph) {\n    switch (this.table.version) {\n      case 0:\n        // simple array format\n        return this.table.values.getItem(glyph);\n      case 2: // segment format\n\n      case 4:\n        {\n          var min = 0;\n          var max = this.table.binarySearchHeader.nUnits - 1;\n          while (min <= max) {\n            var mid = min + max >> 1;\n            var seg = this.table.segments[mid]; // special end of search value\n\n            if (seg.firstGlyph === 0xffff) {\n              return null;\n            }\n            if (glyph < seg.firstGlyph) {\n              max = mid - 1;\n            } else if (glyph > seg.lastGlyph) {\n              min = mid + 1;\n            } else {\n              if (this.table.version === 2) {\n                return seg.value;\n              } else {\n                return seg.values[glyph - seg.firstGlyph];\n              }\n            }\n          }\n          return null;\n        }\n      case 6:\n        {\n          // lookup single\n          var _min = 0;\n          var _max = this.table.binarySearchHeader.nUnits - 1;\n          while (_min <= _max) {\n            var mid = _min + _max >> 1;\n            var seg = this.table.segments[mid]; // special end of search value\n\n            if (seg.glyph === 0xffff) {\n              return null;\n            }\n            if (glyph < seg.glyph) {\n              _max = mid - 1;\n            } else if (glyph > seg.glyph) {\n              _min = mid + 1;\n            } else {\n              return seg.value;\n            }\n          }\n          return null;\n        }\n      case 8:\n        // lookup trimmed\n        return this.table.values[glyph - this.table.firstGlyph];\n      default:\n        throw new Error(\"Unknown lookup table format: \".concat(this.table.version));\n    }\n  };\n  _proto19.glyphsForValue = function glyphsForValue(classValue) {\n    var res = [];\n    switch (this.table.version) {\n      case 2: // segment format\n\n      case 4:\n        {\n          for (var _iterator21 = _createForOfIteratorHelperLoose(this.table.segments), _step21; !(_step21 = _iterator21()).done;) {\n            var segment = _step21.value;\n            if (this.table.version === 2 && segment.value === classValue) {\n              res.push.apply(res, range(segment.firstGlyph, segment.lastGlyph + 1));\n            } else {\n              for (var index = 0; index < segment.values.length; index++) {\n                if (segment.values[index] === classValue) {\n                  res.push(segment.firstGlyph + index);\n                }\n              }\n            }\n          }\n          break;\n        }\n      case 6:\n        {\n          // lookup single\n          for (var _iterator22 = _createForOfIteratorHelperLoose(this.table.segments), _step22; !(_step22 = _iterator22()).done;) {\n            var _segment = _step22.value;\n            if (_segment.value === classValue) {\n              res.push(_segment.glyph);\n            }\n          }\n          break;\n        }\n      case 8:\n        {\n          // lookup trimmed\n          for (var i = 0; i < this.table.values.length; i++) {\n            if (this.table.values[i] === classValue) {\n              res.push(this.table.firstGlyph + i);\n            }\n          }\n          break;\n        }\n      default:\n        throw new Error(\"Unknown lookup table format: \".concat(this.table.version));\n    }\n    return res;\n  };\n  return AATLookupTable;\n}(), _applyDecoratedDescriptor(_class$1.prototype, \"glyphsForValue\", [cache], Object.getOwnPropertyDescriptor(_class$1.prototype, \"glyphsForValue\"), _class$1.prototype), _class$1);\nvar START_OF_TEXT_STATE = 0;\nvar END_OF_TEXT_CLASS = 0;\nvar OUT_OF_BOUNDS_CLASS = 1;\nvar DELETED_GLYPH_CLASS = 2;\nvar DONT_ADVANCE = 0x4000;\nvar AATStateMachine = /*#__PURE__*/function () {\n  function AATStateMachine(stateTable) {\n    this.stateTable = stateTable;\n    this.lookupTable = new AATLookupTable(stateTable.classTable);\n  }\n  var _proto20 = AATStateMachine.prototype;\n  _proto20.process = function process(glyphs, reverse, processEntry) {\n    var currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think?\n\n    var index = reverse ? glyphs.length - 1 : 0;\n    var dir = reverse ? -1 : 1;\n    while (dir === 1 && index <= glyphs.length || dir === -1 && index >= -1) {\n      var glyph = null;\n      var classCode = OUT_OF_BOUNDS_CLASS;\n      var shouldAdvance = true;\n      if (index === glyphs.length || index === -1) {\n        classCode = END_OF_TEXT_CLASS;\n      } else {\n        glyph = glyphs[index];\n        if (glyph.id === 0xffff) {\n          // deleted glyph\n          classCode = DELETED_GLYPH_CLASS;\n        } else {\n          classCode = this.lookupTable.lookup(glyph.id);\n          if (classCode == null) {\n            classCode = OUT_OF_BOUNDS_CLASS;\n          }\n        }\n      }\n      var row = this.stateTable.stateArray.getItem(currentState);\n      var entryIndex = row[classCode];\n      var entry = this.stateTable.entryTable.getItem(entryIndex);\n      if (classCode !== END_OF_TEXT_CLASS && classCode !== DELETED_GLYPH_CLASS) {\n        processEntry(glyph, entry, index);\n        shouldAdvance = !(entry.flags & DONT_ADVANCE);\n      }\n      currentState = entry.newState;\n      if (shouldAdvance) {\n        index += dir;\n      }\n    }\n    return glyphs;\n  }\n  /**\n   * Performs a depth-first traversal of the glyph strings\n   * represented by the state machine.\n   */;\n  _proto20.traverse = function traverse(opts, state, visited) {\n    if (state === void 0) {\n      state = 0;\n    }\n    if (visited === void 0) {\n      visited = new Set();\n    }\n    if (visited.has(state)) {\n      return;\n    }\n    visited.add(state);\n    var _this$stateTable = this.stateTable,\n      nClasses = _this$stateTable.nClasses,\n      stateArray = _this$stateTable.stateArray,\n      entryTable = _this$stateTable.entryTable;\n    var row = stateArray.getItem(state); // Skip predefined classes\n\n    for (var classCode = 4; classCode < nClasses; classCode++) {\n      var entryIndex = row[classCode];\n      var entry = entryTable.getItem(entryIndex); // Try all glyphs in the class\n\n      for (var _iterator23 = _createForOfIteratorHelperLoose(this.lookupTable.glyphsForValue(classCode)), _step23; !(_step23 = _iterator23()).done;) {\n        var glyph = _step23.value;\n        if (opts.enter) {\n          opts.enter(glyph, entry);\n        }\n        if (entry.newState !== 0) {\n          this.traverse(opts, entry.newState, visited);\n        }\n        if (opts.exit) {\n          opts.exit(glyph, entry);\n        }\n      }\n    }\n  };\n  return AATStateMachine;\n}();\nvar _class$2;\nvar MARK_FIRST = 0x8000;\nvar MARK_LAST = 0x2000;\nvar VERB = 0x000F; // contextual substitution and glyph insertion flag\n\nvar SET_MARK = 0x8000; // ligature entry flags\n\nvar SET_COMPONENT = 0x8000;\nvar PERFORM_ACTION = 0x2000; // ligature action masks\n\nvar LAST_MASK = 0x80000000;\nvar STORE_MASK = 0x40000000;\nvar OFFSET_MASK = 0x3FFFFFFF;\nvar REVERSE_DIRECTION = 0x400000;\nvar CURRENT_INSERT_BEFORE = 0x0800;\nvar MARKED_INSERT_BEFORE = 0x0400;\nvar CURRENT_INSERT_COUNT = 0x03E0;\nvar MARKED_INSERT_COUNT = 0x001F;\nvar AATMorxProcessor = (_class$2 = /*#__PURE__*/function () {\n  function AATMorxProcessor(font) {\n    this.processIndicRearragement = this.processIndicRearragement.bind(this);\n    this.processContextualSubstitution = this.processContextualSubstitution.bind(this);\n    this.processLigature = this.processLigature.bind(this);\n    this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this);\n    this.processGlyphInsertion = this.processGlyphInsertion.bind(this);\n    this.font = font;\n    this.morx = font.morx;\n    this.inputCache = null;\n  } // Processes an array of glyphs and applies the specified features\n  // Features should be in the form of {featureType:{featureSetting:boolean}}\n  var _proto21 = AATMorxProcessor.prototype;\n  _proto21.process = function process(glyphs, features) {\n    if (features === void 0) {\n      features = {};\n    }\n    for (var _iterator24 = _createForOfIteratorHelperLoose(this.morx.chains), _step24; !(_step24 = _iterator24()).done;) {\n      var chain = _step24.value;\n      var flags = chain.defaultFlags; // enable/disable the requested features\n\n      for (var _iterator25 = _createForOfIteratorHelperLoose(chain.features), _step25; !(_step25 = _iterator25()).done;) {\n        var feature = _step25.value;\n        var f = void 0;\n        if (f = features[feature.featureType]) {\n          if (f[feature.featureSetting]) {\n            flags &= feature.disableFlags;\n            flags |= feature.enableFlags;\n          } else if (f[feature.featureSetting] === false) {\n            flags |= ~feature.disableFlags;\n            flags &= ~feature.enableFlags;\n          }\n        }\n      }\n      for (var _iterator26 = _createForOfIteratorHelperLoose(chain.subtables), _step26; !(_step26 = _iterator26()).done;) {\n        var subtable = _step26.value;\n        if (subtable.subFeatureFlags & flags) {\n          this.processSubtable(subtable, glyphs);\n        }\n      }\n    } // remove deleted glyphs\n\n    var index = glyphs.length - 1;\n    while (index >= 0) {\n      if (glyphs[index].id === 0xffff) {\n        glyphs.splice(index, 1);\n      }\n      index--;\n    }\n    return glyphs;\n  };\n  _proto21.processSubtable = function processSubtable(subtable, glyphs) {\n    this.subtable = subtable;\n    this.glyphs = glyphs;\n    if (this.subtable.type === 4) {\n      this.processNoncontextualSubstitutions(this.subtable, this.glyphs);\n      return;\n    }\n    this.ligatureStack = [];\n    this.markedGlyph = null;\n    this.firstGlyph = null;\n    this.lastGlyph = null;\n    this.markedIndex = null;\n    var stateMachine = this.getStateMachine(subtable);\n    var process = this.getProcessor();\n    var reverse = !!(this.subtable.coverage & REVERSE_DIRECTION);\n    return stateMachine.process(this.glyphs, reverse, process);\n  };\n  _proto21.getStateMachine = function getStateMachine(subtable) {\n    return new AATStateMachine(subtable.table.stateTable);\n  };\n  _proto21.getProcessor = function getProcessor() {\n    switch (this.subtable.type) {\n      case 0:\n        return this.processIndicRearragement;\n      case 1:\n        return this.processContextualSubstitution;\n      case 2:\n        return this.processLigature;\n      case 4:\n        return this.processNoncontextualSubstitutions;\n      case 5:\n        return this.processGlyphInsertion;\n      default:\n        throw new Error(\"Invalid morx subtable type: \".concat(this.subtable.type));\n    }\n  };\n  _proto21.processIndicRearragement = function processIndicRearragement(glyph, entry, index) {\n    if (entry.flags & MARK_FIRST) {\n      this.firstGlyph = index;\n    }\n    if (entry.flags & MARK_LAST) {\n      this.lastGlyph = index;\n    }\n    reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph);\n  };\n  _proto21.processContextualSubstitution = function processContextualSubstitution(glyph, entry, index) {\n    var subsitutions = this.subtable.table.substitutionTable.items;\n    if (entry.markIndex !== 0xffff) {\n      var lookup = subsitutions.getItem(entry.markIndex);\n      var lookupTable = new AATLookupTable(lookup);\n      glyph = this.glyphs[this.markedGlyph];\n      var gid = lookupTable.lookup(glyph.id);\n      if (gid) {\n        this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints);\n      }\n    }\n    if (entry.currentIndex !== 0xffff) {\n      var _lookup = subsitutions.getItem(entry.currentIndex);\n      var _lookupTable = new AATLookupTable(_lookup);\n      glyph = this.glyphs[index];\n      var gid = _lookupTable.lookup(glyph.id);\n      if (gid) {\n        this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n      }\n    }\n    if (entry.flags & SET_MARK) {\n      this.markedGlyph = index;\n    }\n  };\n  _proto21.processLigature = function processLigature(glyph, entry, index) {\n    if (entry.flags & SET_COMPONENT) {\n      this.ligatureStack.push(index);\n    }\n    if (entry.flags & PERFORM_ACTION) {\n      var _this$ligatureStack;\n      var actions = this.subtable.table.ligatureActions;\n      var components = this.subtable.table.components;\n      var ligatureList = this.subtable.table.ligatureList;\n      var actionIndex = entry.action;\n      var last = false;\n      var ligatureIndex = 0;\n      var codePoints = [];\n      var ligatureGlyphs = [];\n      while (!last) {\n        var _codePoints;\n        var componentGlyph = this.ligatureStack.pop();\n        (_codePoints = codePoints).unshift.apply(_codePoints, this.glyphs[componentGlyph].codePoints);\n        var action = actions.getItem(actionIndex++);\n        last = !!(action & LAST_MASK);\n        var store = !!(action & STORE_MASK);\n        var offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits\n\n        offset += this.glyphs[componentGlyph].id;\n        var component = components.getItem(offset);\n        ligatureIndex += component;\n        if (last || store) {\n          var ligatureEntry = ligatureList.getItem(ligatureIndex);\n          this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints);\n          ligatureGlyphs.push(componentGlyph);\n          ligatureIndex = 0;\n          codePoints = [];\n        } else {\n          this.glyphs[componentGlyph] = this.font.getGlyph(0xffff);\n        }\n      } // Put ligature glyph indexes back on the stack\n\n      (_this$ligatureStack = this.ligatureStack).push.apply(_this$ligatureStack, ligatureGlyphs);\n    }\n  };\n  _proto21.processNoncontextualSubstitutions = function processNoncontextualSubstitutions(subtable, glyphs, index) {\n    var lookupTable = new AATLookupTable(subtable.table.lookupTable);\n    for (index = 0; index < glyphs.length; index++) {\n      var glyph = glyphs[index];\n      if (glyph.id !== 0xffff) {\n        var gid = lookupTable.lookup(glyph.id);\n        if (gid) {\n          // 0 means do nothing\n          glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n        }\n      }\n    }\n  };\n  _proto21._insertGlyphs = function _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) {\n    var _this$glyphs;\n    var insertions = [];\n    while (count--) {\n      var gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++);\n      insertions.push(this.font.getGlyph(gid));\n    }\n    if (!isBefore) {\n      glyphIndex++;\n    }\n    (_this$glyphs = this.glyphs).splice.apply(_this$glyphs, [glyphIndex, 0].concat(insertions));\n  };\n  _proto21.processGlyphInsertion = function processGlyphInsertion(glyph, entry, index) {\n    if (entry.flags & SET_MARK) {\n      this.markedIndex = index;\n    }\n    if (entry.markedInsertIndex !== 0xffff) {\n      var count = (entry.flags & MARKED_INSERT_COUNT) >>> 5;\n      var isBefore = !!(entry.flags & MARKED_INSERT_BEFORE);\n      this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore);\n    }\n    if (entry.currentInsertIndex !== 0xffff) {\n      var _count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5;\n      var _isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE);\n      this._insertGlyphs(index, entry.currentInsertIndex, _count, _isBefore);\n    }\n  };\n  _proto21.getSupportedFeatures = function getSupportedFeatures() {\n    var features = [];\n    for (var _iterator27 = _createForOfIteratorHelperLoose(this.morx.chains), _step27; !(_step27 = _iterator27()).done;) {\n      var chain = _step27.value;\n      for (var _iterator28 = _createForOfIteratorHelperLoose(chain.features), _step28; !(_step28 = _iterator28()).done;) {\n        var feature = _step28.value;\n        features.push([feature.featureType, feature.featureSetting]);\n      }\n    }\n    return features;\n  };\n  _proto21.generateInputs = function generateInputs(gid) {\n    if (!this.inputCache) {\n      this.generateInputCache();\n    }\n    return this.inputCache[gid] || [];\n  };\n  _proto21.generateInputCache = function generateInputCache() {\n    this.inputCache = {};\n    for (var _iterator29 = _createForOfIteratorHelperLoose(this.morx.chains), _step29; !(_step29 = _iterator29()).done;) {\n      var chain = _step29.value;\n      var flags = chain.defaultFlags;\n      for (var _iterator30 = _createForOfIteratorHelperLoose(chain.subtables), _step30; !(_step30 = _iterator30()).done;) {\n        var subtable = _step30.value;\n        if (subtable.subFeatureFlags & flags) {\n          this.generateInputsForSubtable(subtable);\n        }\n      }\n    }\n  };\n  _proto21.generateInputsForSubtable = function generateInputsForSubtable(subtable) {\n    var _this3 = this;\n    // Currently, only supporting ligature subtables.\n    if (subtable.type !== 2) {\n      return;\n    }\n    var reverse = !!(subtable.coverage & REVERSE_DIRECTION);\n    if (reverse) {\n      throw new Error('Reverse subtable, not supported.');\n    }\n    this.subtable = subtable;\n    this.ligatureStack = [];\n    var stateMachine = this.getStateMachine(subtable);\n    var process = this.getProcessor();\n    var input = [];\n    var stack = [];\n    this.glyphs = [];\n    stateMachine.traverse({\n      enter: function enter(glyph, entry) {\n        var glyphs = _this3.glyphs;\n        stack.push({\n          glyphs: glyphs.slice(),\n          ligatureStack: _this3.ligatureStack.slice()\n        }); // Add glyph to input and glyphs to process.\n\n        var g = _this3.font.getGlyph(glyph);\n        input.push(g);\n        glyphs.push(input[input.length - 1]); // Process ligature substitution\n\n        process(glyphs[glyphs.length - 1], entry, glyphs.length - 1); // Add input to result if only one matching (non-deleted) glyph remains.\n\n        var count = 0;\n        var found = 0;\n        for (var i = 0; i < glyphs.length && count <= 1; i++) {\n          if (glyphs[i].id !== 0xffff) {\n            count++;\n            found = glyphs[i].id;\n          }\n        }\n        if (count === 1) {\n          var result = input.map(function (g) {\n            return g.id;\n          });\n          var _cache = _this3.inputCache[found];\n          if (_cache) {\n            _cache.push(result);\n          } else {\n            _this3.inputCache[found] = [result];\n          }\n        }\n      },\n      exit: function exit() {\n        var _stack$pop = stack.pop();\n        _this3.glyphs = _stack$pop.glyphs;\n        _this3.ligatureStack = _stack$pop.ligatureStack;\n        input.pop();\n      }\n    });\n  };\n  return AATMorxProcessor;\n}(), _applyDecoratedDescriptor(_class$2.prototype, \"getStateMachine\", [cache], Object.getOwnPropertyDescriptor(_class$2.prototype, \"getStateMachine\"), _class$2.prototype), _class$2);\n// reverse the glyphs inside those ranges if specified\n// ranges are in [offset, length] format\n\nfunction swap(glyphs, rangeA, rangeB, reverseA, reverseB) {\n  if (reverseA === void 0) {\n    reverseA = false;\n  }\n  if (reverseB === void 0) {\n    reverseB = false;\n  }\n  var end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]);\n  if (reverseB) {\n    end.reverse();\n  }\n  var start = glyphs.splice.apply(glyphs, [rangeA[0], rangeA[1]].concat(end));\n  if (reverseA) {\n    start.reverse();\n  }\n  glyphs.splice.apply(glyphs, [rangeB[0] - (rangeA[1] - 1), 0].concat(start));\n  return glyphs;\n}\nfunction reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) {\n  switch (verb) {\n    case 0:\n      // no change\n      return glyphs;\n    case 1:\n      // Ax => xA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]);\n    case 2:\n      // xD => Dx\n      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]);\n    case 3:\n      // AxD => DxA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]);\n    case 4:\n      // ABx => xAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]);\n    case 5:\n      // ABx => xBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false);\n    case 6:\n      // xCD => CDx\n      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]);\n    case 7:\n      // xCD => DCx\n      return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true);\n    case 8:\n      // AxCD => CDxA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]);\n    case 9:\n      // AxCD => DCxA\n      return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true);\n    case 10:\n      // ABxD => DxAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]);\n    case 11:\n      // ABxD => DxBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false);\n    case 12:\n      // ABxCD => CDxAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]);\n    case 13:\n      // ABxCD => CDxBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false);\n    case 14:\n      // ABxCD => DCxAB\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true);\n    case 15:\n      // ABxCD => DCxBA\n      return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true);\n    default:\n      throw new Error(\"Unknown verb: \".concat(verb));\n  }\n}\nvar AATLayoutEngine = /*#__PURE__*/function () {\n  function AATLayoutEngine(font) {\n    this.font = font;\n    this.morxProcessor = new AATMorxProcessor(font);\n    this.fallbackPosition = false;\n  }\n  var _proto22 = AATLayoutEngine.prototype;\n  _proto22.substitute = function substitute(glyphRun) {\n    // AAT expects the glyphs to be in visual order prior to morx processing,\n    // so reverse the glyphs if the script is right-to-left.\n    if (glyphRun.direction === 'rtl') {\n      glyphRun.glyphs.reverse();\n    }\n    this.morxProcessor.process(glyphRun.glyphs, mapOTToAAT(glyphRun.features));\n  };\n  _proto22.getAvailableFeatures = function getAvailableFeatures(script, language) {\n    return mapAATToOT(this.morxProcessor.getSupportedFeatures());\n  };\n  _proto22.stringsForGlyph = function stringsForGlyph(gid) {\n    var glyphStrings = this.morxProcessor.generateInputs(gid);\n    var result = new Set();\n    for (var _iterator31 = _createForOfIteratorHelperLoose(glyphStrings), _step31; !(_step31 = _iterator31()).done;) {\n      var glyphs = _step31.value;\n      this._addStrings(glyphs, 0, result, '');\n    }\n    return result;\n  };\n  _proto22._addStrings = function _addStrings(glyphs, index, strings, string) {\n    var codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]);\n    for (var _iterator32 = _createForOfIteratorHelperLoose(codePoints), _step32; !(_step32 = _iterator32()).done;) {\n      var codePoint = _step32.value;\n      var s = string + String.fromCodePoint(codePoint);\n      if (index < glyphs.length - 1) {\n        this._addStrings(glyphs, index + 1, strings, s);\n      } else {\n        strings.add(s);\n      }\n    }\n  };\n  return AATLayoutEngine;\n}();\n/**\n * ShapingPlans are used by the OpenType shapers to store which\n * features should by applied, and in what order to apply them.\n * The features are applied in groups called stages. A feature\n * can be applied globally to all glyphs, or locally to only\n * specific glyphs.\n *\n * @private\n */\nvar ShapingPlan = /*#__PURE__*/function () {\n  function ShapingPlan(font, script, direction) {\n    this.font = font;\n    this.script = script;\n    this.direction = direction;\n    this.stages = [];\n    this.globalFeatures = {};\n    this.allFeatures = {};\n  }\n  /**\n   * Adds the given features to the last stage.\n   * Ignores features that have already been applied.\n   */\n  var _proto23 = ShapingPlan.prototype;\n  _proto23._addFeatures = function _addFeatures(features, global) {\n    var stageIndex = this.stages.length - 1;\n    var stage = this.stages[stageIndex];\n    for (var _iterator33 = _createForOfIteratorHelperLoose(features), _step33; !(_step33 = _iterator33()).done;) {\n      var feature = _step33.value;\n      if (this.allFeatures[feature] == null) {\n        stage.push(feature);\n        this.allFeatures[feature] = stageIndex;\n        if (global) {\n          this.globalFeatures[feature] = true;\n        }\n      }\n    }\n  }\n  /**\n   * Add features to the last stage\n   */;\n  _proto23.add = function add(arg, global) {\n    if (global === void 0) {\n      global = true;\n    }\n    if (this.stages.length === 0) {\n      this.stages.push([]);\n    }\n    if (typeof arg === 'string') {\n      arg = [arg];\n    }\n    if (Array.isArray(arg)) {\n      this._addFeatures(arg, global);\n    } else if (typeof arg === 'object') {\n      this._addFeatures(arg.global || [], true);\n      this._addFeatures(arg.local || [], false);\n    } else {\n      throw new Error(\"Unsupported argument to ShapingPlan#add\");\n    }\n  }\n  /**\n   * Add a new stage\n   */;\n  _proto23.addStage = function addStage(arg, global) {\n    if (typeof arg === 'function') {\n      this.stages.push(arg, []);\n    } else {\n      this.stages.push([]);\n      this.add(arg, global);\n    }\n  };\n  _proto23.setFeatureOverrides = function setFeatureOverrides(features) {\n    if (Array.isArray(features)) {\n      this.add(features);\n    } else if (typeof features === 'object') {\n      for (var tag in features) {\n        if (features[tag]) {\n          this.add(tag);\n        } else if (this.allFeatures[tag] != null) {\n          var stage = this.stages[this.allFeatures[tag]];\n          stage.splice(stage.indexOf(tag), 1);\n          delete this.allFeatures[tag];\n          delete this.globalFeatures[tag];\n        }\n      }\n    }\n  }\n  /**\n   * Assigns the global features to the given glyphs\n   */;\n  _proto23.assignGlobalFeatures = function assignGlobalFeatures(glyphs) {\n    for (var _iterator34 = _createForOfIteratorHelperLoose(glyphs), _step34; !(_step34 = _iterator34()).done;) {\n      var glyph = _step34.value;\n      for (var feature in this.globalFeatures) {\n        glyph.features[feature] = true;\n      }\n    }\n  }\n  /**\n   * Executes the planned stages using the given OTProcessor\n   */;\n  _proto23.process = function process(processor, glyphs, positions) {\n    for (var _iterator35 = _createForOfIteratorHelperLoose(this.stages), _step35; !(_step35 = _iterator35()).done;) {\n      var stage = _step35.value;\n      if (typeof stage === 'function') {\n        if (!positions) {\n          stage(this.font, glyphs, this);\n        }\n      } else if (stage.length > 0) {\n        processor.applyFeatures(stage, glyphs, positions);\n      }\n    }\n  };\n  return ShapingPlan;\n}();\nvar VARIATION_FEATURES = ['rvrn'];\nvar COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk'];\nvar FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom'];\nvar HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern'];\nvar DIRECTIONAL_FEATURES = {\n  ltr: ['ltra', 'ltrm'],\n  rtl: ['rtla', 'rtlm']\n};\nvar DefaultShaper = /*#__PURE__*/function () {\n  function DefaultShaper() {}\n  DefaultShaper.plan = function plan(_plan, glyphs, features) {\n    // Plan the features we want to apply\n    this.planPreprocessing(_plan);\n    this.planFeatures(_plan);\n    this.planPostprocessing(_plan, features); // Assign the global features to all the glyphs\n\n    _plan.assignGlobalFeatures(glyphs); // Assign local features to glyphs\n\n    this.assignFeatures(_plan, glyphs);\n  };\n  DefaultShaper.planPreprocessing = function planPreprocessing(plan) {\n    plan.add({\n      global: [].concat(VARIATION_FEATURES, DIRECTIONAL_FEATURES[plan.direction]),\n      local: FRACTIONAL_FEATURES\n    });\n  };\n  DefaultShaper.planFeatures = function planFeatures(plan) {// Do nothing by default. Let subclasses override this.\n  };\n  DefaultShaper.planPostprocessing = function planPostprocessing(plan, userFeatures) {\n    plan.add([].concat(COMMON_FEATURES, HORIZONTAL_FEATURES));\n    plan.setFeatureOverrides(userFeatures);\n  };\n  DefaultShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    // Enable contextual fractions\n    for (var i = 0; i < glyphs.length; i++) {\n      var glyph = glyphs[i];\n      if (glyph.codePoints[0] === 0x2044) {\n        // fraction slash\n        var start = i;\n        var end = i + 1; // Apply numerator\n\n        while (start > 0 && unicode.isDigit(glyphs[start - 1].codePoints[0])) {\n          glyphs[start - 1].features.numr = true;\n          glyphs[start - 1].features.frac = true;\n          start--;\n        } // Apply denominator\n\n        while (end < glyphs.length && unicode.isDigit(glyphs[end].codePoints[0])) {\n          glyphs[end].features.dnom = true;\n          glyphs[end].features.frac = true;\n          end++;\n        } // Apply fraction slash\n\n        glyph.features.frac = true;\n        i = end - 1;\n      }\n    }\n  };\n  return DefaultShaper;\n}();\n_defineProperty(DefaultShaper, \"zeroMarkWidths\", 'AFTER_GPOS');\nvar trie = new UnicodeTrie(Buffer(\"APABAAAAAAAAOAAAAf0BAv7tmi1MxDAUx7vtvjhAgcDgkEgEAnmXEBIMCYaEcygEiqBQ4FAkCE4ikUgMiiBJSAgSiUQSDMn9L9eSl6bddddug9t7yS/trevre+3r27pcNxZiG+yCfdCVv/9LeQxOwRm4AJegD27ALbgD9+ABPJF+z+BN/h7yDj5k/VOWX6SdmU5+wLWknggxDxaS8u0qiiX4uiz9XamQ3wzDMAzDMAzDMAzDVI/h959V/v7BMAzDMAzDMLlyNTNiMSdewVxbiA44B4/guz1qW58VYlMI0WsJ0W+N6kXw0spvPtdwhtkwnGM6uLaV4Xyzg3v3PM9DPfQ/sOg4xPWjipy31P8LTqbU304c/cLCUmWJLNB2Uz2U1KTeRKNmKHVMfbJC+/0loTZRH/W5cvEvBJPMbREkWt3FD1NcqXZBSpuE2Ad0PBehPtNrPtIEdYP+hiRt/V1jIiE69X4NT/uVZI3PUHE9bm5M7ePGdZWy951v7Nn6j8v1WWKP3mt6ttnsigx6VN7Vc0VomSSGqW2mGNP1muZPl7LfjNUaKNFtDGVf2fvE9O7VlBS5j333c5p/eeoOqcs1R/hIqDWLJ7TTlksirVT1SI7l8k4Yp+g3jafGcrU1RM6l9th80XOpnlN97bDNY4i4s61B0Si/ipa0uHMl6zqEjlFfCZm/TM8KmzQDjmuTAQ==\",\"base64\"));\nvar FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init'];\nvar ShapingClasses = {\n  Non_Joining: 0,\n  Left_Joining: 1,\n  Right_Joining: 2,\n  Dual_Joining: 3,\n  Join_Causing: 3,\n  ALAPH: 4,\n  'DALATH RISH': 5,\n  Transparent: 6\n};\nvar ISOL = 'isol';\nvar FINA = 'fina';\nvar FIN2 = 'fin2';\nvar FIN3 = 'fin3';\nvar MEDI = 'medi';\nvar MED2 = 'med2';\nvar INIT = 'init';\nvar NONE = null; // Each entry is [prevAction, curAction, nextState]\n\nvar STATE_TABLE = [\n//   Non_Joining,        Left_Joining,       Right_Joining,     Dual_Joining,           ALAPH,            DALATH RISH\n// State 0: prev was U,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 6]],\n// State 1: prev was R or ISOL/ALAPH,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN2, 5], [NONE, ISOL, 6]],\n// State 2: prev was D/L in ISOL form,  willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [INIT, FINA, 1], [INIT, FINA, 3], [INIT, FINA, 4], [INIT, FINA, 6]],\n// State 3: prev was D in FINA form,  willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [MEDI, FINA, 1], [MEDI, FINA, 3], [MEDI, FINA, 4], [MEDI, FINA, 6]],\n// State 4: prev was FINA ALAPH,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [MED2, ISOL, 1], [MED2, ISOL, 2], [MED2, FIN2, 5], [MED2, ISOL, 6]],\n// State 5: prev was FIN2/FIN3 ALAPH,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [ISOL, ISOL, 1], [ISOL, ISOL, 2], [ISOL, FIN2, 5], [ISOL, ISOL, 6]],\n// State 6: prev was DALATH/RISH,  not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN3, 5], [NONE, ISOL, 6]]];\n/**\n * This is a shaper for Arabic, and other cursive scripts.\n * It uses data from ArabicShaping.txt in the Unicode database,\n * compiled to a UnicodeTrie by generate-data.coffee.\n *\n * The shaping state machine was ported from Harfbuzz.\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc\n */\nvar ArabicShaper = /*#__PURE__*/function (_DefaultShaper) {\n  _inheritsLoose(ArabicShaper, _DefaultShaper);\n  function ArabicShaper() {\n    return _DefaultShaper.apply(this, arguments) || this;\n  }\n  ArabicShaper.planFeatures = function planFeatures(plan) {\n    plan.add(['ccmp', 'locl']);\n    for (var i = 0; i < FEATURES.length; i++) {\n      var feature = FEATURES[i];\n      plan.addStage(feature, false);\n    }\n    plan.addStage('mset');\n  };\n  ArabicShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    _DefaultShaper.assignFeatures.call(this, plan, glyphs);\n    var prev = -1;\n    var state = 0;\n    var actions = []; // Apply the state machine to map glyphs to features\n\n    for (var i = 0; i < glyphs.length; i++) {\n      var curAction = void 0,\n        prevAction = void 0;\n      var glyph = glyphs[i];\n      var type = getShapingClass(glyph.codePoints[0]);\n      if (type === ShapingClasses.Transparent) {\n        actions[i] = NONE;\n        continue;\n      }\n      var _STATE_TABLE$state$ty = STATE_TABLE[state][type];\n      prevAction = _STATE_TABLE$state$ty[0];\n      curAction = _STATE_TABLE$state$ty[1];\n      state = _STATE_TABLE$state$ty[2];\n      if (prevAction !== NONE && prev !== -1) {\n        actions[prev] = prevAction;\n      }\n      actions[i] = curAction;\n      prev = i;\n    } // Apply the chosen features to their respective glyphs\n\n    for (var index = 0; index < glyphs.length; index++) {\n      var feature = void 0;\n      var glyph = glyphs[index];\n      if (feature = actions[index]) {\n        glyph.features[feature] = true;\n      }\n    }\n  };\n  return ArabicShaper;\n}(DefaultShaper);\nfunction getShapingClass(codePoint) {\n  var res = trie.get(codePoint);\n  if (res) {\n    return res - 1;\n  }\n  var category = unicode.getCategory(codePoint);\n  if (category === 'Mn' || category === 'Me' || category === 'Cf') {\n    return ShapingClasses.Transparent;\n  }\n  return ShapingClasses.Non_Joining;\n}\nvar GlyphIterator = /*#__PURE__*/function () {\n  function GlyphIterator(glyphs, options) {\n    this.glyphs = glyphs;\n    this.reset(options);\n  }\n  var _proto24 = GlyphIterator.prototype;\n  _proto24.reset = function reset(options, index) {\n    if (options === void 0) {\n      options = {};\n    }\n    if (index === void 0) {\n      index = 0;\n    }\n    this.options = options;\n    this.flags = options.flags || {};\n    this.markAttachmentType = options.markAttachmentType || 0;\n    this.index = index;\n  };\n  _proto24.shouldIgnore = function shouldIgnore(glyph) {\n    return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType;\n  };\n  _proto24.move = function move(dir) {\n    this.index += dir;\n    while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) {\n      this.index += dir;\n    }\n    if (0 > this.index || this.index >= this.glyphs.length) {\n      return null;\n    }\n    return this.glyphs[this.index];\n  };\n  _proto24.next = function next() {\n    return this.move(+1);\n  };\n  _proto24.prev = function prev() {\n    return this.move(-1);\n  };\n  _proto24.peek = function peek(count) {\n    if (count === void 0) {\n      count = 1;\n    }\n    var idx = this.index;\n    var res = this.increment(count);\n    this.index = idx;\n    return res;\n  };\n  _proto24.peekIndex = function peekIndex(count) {\n    if (count === void 0) {\n      count = 1;\n    }\n    var idx = this.index;\n    this.increment(count);\n    var res = this.index;\n    this.index = idx;\n    return res;\n  };\n  _proto24.increment = function increment(count) {\n    if (count === void 0) {\n      count = 1;\n    }\n    var dir = count < 0 ? -1 : 1;\n    count = Math.abs(count);\n    while (count--) {\n      this.move(dir);\n    }\n    return this.glyphs[this.index];\n  };\n  _createClass(GlyphIterator, [{\n    key: \"cur\",\n    get: function get() {\n      return this.glyphs[this.index] || null;\n    }\n  }]);\n  return GlyphIterator;\n}();\nvar DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn'];\nvar OTProcessor = /*#__PURE__*/function () {\n  function OTProcessor(font, table) {\n    this.font = font;\n    this.table = table;\n    this.script = null;\n    this.scriptTag = null;\n    this.language = null;\n    this.languageTag = null;\n    this.features = {};\n    this.lookups = {}; // Setup variation substitutions\n\n    this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1; // initialize to default script + language\n\n    this.selectScript(); // current context (set by applyFeatures)\n\n    this.glyphs = [];\n    this.positions = []; // only used by GPOS\n\n    this.ligatureID = 1;\n    this.currentFeature = null;\n  }\n  var _proto25 = OTProcessor.prototype;\n  _proto25.findScript = function findScript(script) {\n    if (this.table.scriptList == null) {\n      return null;\n    }\n    if (!Array.isArray(script)) {\n      script = [script];\n    }\n    for (var _iterator36 = _createForOfIteratorHelperLoose(script), _step36; !(_step36 = _iterator36()).done;) {\n      var s = _step36.value;\n      for (var _iterator37 = _createForOfIteratorHelperLoose(this.table.scriptList), _step37; !(_step37 = _iterator37()).done;) {\n        var entry = _step37.value;\n        if (entry.tag === s) {\n          return entry;\n        }\n      }\n    }\n    return null;\n  };\n  _proto25.selectScript = function selectScript(script, language, direction$1) {\n    var changed = false;\n    var entry;\n    if (!this.script || script !== this.scriptTag) {\n      entry = this.findScript(script);\n      if (!entry) {\n        entry = this.findScript(DEFAULT_SCRIPTS);\n      }\n      if (!entry) {\n        return this.scriptTag;\n      }\n      this.scriptTag = entry.tag;\n      this.script = entry.script;\n      this.language = null;\n      this.languageTag = null;\n      changed = true;\n    }\n    if (!direction$1 || direction$1 !== this.direction) {\n      this.direction = direction$1 || direction(script);\n    }\n    if (language && language.length < 4) {\n      language += ' '.repeat(4 - language.length);\n    }\n    if (!language || language !== this.languageTag) {\n      this.language = null;\n      for (var _iterator38 = _createForOfIteratorHelperLoose(this.script.langSysRecords), _step38; !(_step38 = _iterator38()).done;) {\n        var lang = _step38.value;\n        if (lang.tag === language) {\n          this.language = lang.langSys;\n          this.languageTag = lang.tag;\n          break;\n        }\n      }\n      if (!this.language) {\n        this.language = this.script.defaultLangSys;\n        this.languageTag = null;\n      }\n      changed = true;\n    } // Build a feature lookup table\n\n    if (changed) {\n      this.features = {};\n      if (this.language) {\n        for (var _iterator39 = _createForOfIteratorHelperLoose(this.language.featureIndexes), _step39; !(_step39 = _iterator39()).done;) {\n          var featureIndex = _step39.value;\n          var record = this.table.featureList[featureIndex];\n          var substituteFeature = this.substituteFeatureForVariations(featureIndex);\n          this.features[record.tag] = substituteFeature || record.feature;\n        }\n      }\n    }\n    return this.scriptTag;\n  };\n  _proto25.lookupsForFeatures = function lookupsForFeatures(userFeatures, exclude) {\n    if (userFeatures === void 0) {\n      userFeatures = [];\n    }\n    var lookups = [];\n    for (var _iterator40 = _createForOfIteratorHelperLoose(userFeatures), _step40; !(_step40 = _iterator40()).done;) {\n      var tag = _step40.value;\n      var feature = this.features[tag];\n      if (!feature) {\n        continue;\n      }\n      for (var _iterator41 = _createForOfIteratorHelperLoose(feature.lookupListIndexes), _step41; !(_step41 = _iterator41()).done;) {\n        var lookupIndex = _step41.value;\n        if (exclude && exclude.indexOf(lookupIndex) !== -1) {\n          continue;\n        }\n        lookups.push({\n          feature: tag,\n          index: lookupIndex,\n          lookup: this.table.lookupList.get(lookupIndex)\n        });\n      }\n    }\n    lookups.sort(function (a, b) {\n      return a.index - b.index;\n    });\n    return lookups;\n  };\n  _proto25.substituteFeatureForVariations = function substituteFeatureForVariations(featureIndex) {\n    if (this.variationsIndex === -1) {\n      return null;\n    }\n    var record = this.table.featureVariations.featureVariationRecords[this.variationsIndex];\n    var substitutions = record.featureTableSubstitution.substitutions;\n    for (var _iterator42 = _createForOfIteratorHelperLoose(substitutions), _step42; !(_step42 = _iterator42()).done;) {\n      var substitution = _step42.value;\n      if (substitution.featureIndex === featureIndex) {\n        return substitution.alternateFeatureTable;\n      }\n    }\n    return null;\n  };\n  _proto25.findVariationsIndex = function findVariationsIndex(coords) {\n    var variations = this.table.featureVariations;\n    if (!variations) {\n      return -1;\n    }\n    var records = variations.featureVariationRecords;\n    for (var i = 0; i < records.length; i++) {\n      var conditions = records[i].conditionSet.conditionTable;\n      if (this.variationConditionsMatch(conditions, coords)) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  _proto25.variationConditionsMatch = function variationConditionsMatch(conditions, coords) {\n    return conditions.every(function (condition) {\n      var coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0;\n      return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue;\n    });\n  };\n  _proto25.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) {\n    var lookups = this.lookupsForFeatures(userFeatures);\n    this.applyLookups(lookups, glyphs, advances);\n  };\n  _proto25.applyLookups = function applyLookups(lookups, glyphs, positions) {\n    this.glyphs = glyphs;\n    this.positions = positions;\n    this.glyphIterator = new GlyphIterator(glyphs);\n    for (var _iterator43 = _createForOfIteratorHelperLoose(lookups), _step43; !(_step43 = _iterator43()).done;) {\n      var _step43$value = _step43.value,\n        feature = _step43$value.feature,\n        lookup = _step43$value.lookup;\n      this.currentFeature = feature;\n      this.glyphIterator.reset(lookup.flags);\n      while (this.glyphIterator.index < glyphs.length) {\n        if (!(feature in this.glyphIterator.cur.features)) {\n          this.glyphIterator.next();\n          continue;\n        }\n        for (var _iterator44 = _createForOfIteratorHelperLoose(lookup.subTables), _step44; !(_step44 = _iterator44()).done;) {\n          var table = _step44.value;\n          var res = this.applyLookup(lookup.lookupType, table);\n          if (res) {\n            break;\n          }\n        }\n        this.glyphIterator.next();\n      }\n    }\n  };\n  _proto25.applyLookup = function applyLookup(lookup, table) {\n    throw new Error(\"applyLookup must be implemented by subclasses\");\n  };\n  _proto25.applyLookupList = function applyLookupList(lookupRecords) {\n    var options = this.glyphIterator.options;\n    var glyphIndex = this.glyphIterator.index;\n    for (var _iterator45 = _createForOfIteratorHelperLoose(lookupRecords), _step45; !(_step45 = _iterator45()).done;) {\n      var lookupRecord = _step45.value;\n      // Reset flags and find glyph index for this lookup record\n      this.glyphIterator.reset(options, glyphIndex);\n      this.glyphIterator.increment(lookupRecord.sequenceIndex); // Get the lookup and setup flags for subtables\n\n      var lookup = this.table.lookupList.get(lookupRecord.lookupListIndex);\n      this.glyphIterator.reset(lookup.flags, this.glyphIterator.index); // Apply lookup subtables until one matches\n\n      for (var _iterator46 = _createForOfIteratorHelperLoose(lookup.subTables), _step46; !(_step46 = _iterator46()).done;) {\n        var table = _step46.value;\n        if (this.applyLookup(lookup.lookupType, table)) {\n          break;\n        }\n      }\n    }\n    this.glyphIterator.reset(options, glyphIndex);\n    return true;\n  };\n  _proto25.coverageIndex = function coverageIndex(coverage, glyph) {\n    if (glyph == null) {\n      glyph = this.glyphIterator.cur.id;\n    }\n    switch (coverage.version) {\n      case 1:\n        return coverage.glyphs.indexOf(glyph);\n      case 2:\n        for (var _iterator47 = _createForOfIteratorHelperLoose(coverage.rangeRecords), _step47; !(_step47 = _iterator47()).done;) {\n          var range = _step47.value;\n          if (range.start <= glyph && glyph <= range.end) {\n            return range.startCoverageIndex + glyph - range.start;\n          }\n        }\n        break;\n    }\n    return -1;\n  };\n  _proto25.match = function match(sequenceIndex, sequence, fn, matched) {\n    var pos = this.glyphIterator.index;\n    var glyph = this.glyphIterator.increment(sequenceIndex);\n    var idx = 0;\n    while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) {\n      if (matched) {\n        matched.push(this.glyphIterator.index);\n      }\n      idx++;\n      glyph = this.glyphIterator.next();\n    }\n    this.glyphIterator.index = pos;\n    if (idx < sequence.length) {\n      return false;\n    }\n    return matched || true;\n  };\n  _proto25.sequenceMatches = function sequenceMatches(sequenceIndex, sequence) {\n    return this.match(sequenceIndex, sequence, function (component, glyph) {\n      return component === glyph.id;\n    });\n  };\n  _proto25.sequenceMatchIndices = function sequenceMatchIndices(sequenceIndex, sequence) {\n    var _this4 = this;\n    return this.match(sequenceIndex, sequence, function (component, glyph) {\n      // If the current feature doesn't apply to this glyph,\n      if (!(_this4.currentFeature in glyph.features)) {\n        return false;\n      }\n      return component === glyph.id;\n    }, []);\n  };\n  _proto25.coverageSequenceMatches = function coverageSequenceMatches(sequenceIndex, sequence) {\n    var _this5 = this;\n    return this.match(sequenceIndex, sequence, function (coverage, glyph) {\n      return _this5.coverageIndex(coverage, glyph.id) >= 0;\n    });\n  };\n  _proto25.getClassID = function getClassID(glyph, classDef) {\n    switch (classDef.version) {\n      case 1:\n        // Class array\n        var i = glyph - classDef.startGlyph;\n        if (i >= 0 && i < classDef.classValueArray.length) {\n          return classDef.classValueArray[i];\n        }\n        break;\n      case 2:\n        for (var _iterator48 = _createForOfIteratorHelperLoose(classDef.classRangeRecord), _step48; !(_step48 = _iterator48()).done;) {\n          var range = _step48.value;\n          if (range.start <= glyph && glyph <= range.end) {\n            return range.class;\n          }\n        }\n        break;\n    }\n    return 0;\n  };\n  _proto25.classSequenceMatches = function classSequenceMatches(sequenceIndex, sequence, classDef) {\n    var _this6 = this;\n    return this.match(sequenceIndex, sequence, function (classID, glyph) {\n      return classID === _this6.getClassID(glyph.id, classDef);\n    });\n  };\n  _proto25.applyContext = function applyContext(table) {\n    switch (table.version) {\n      case 1:\n        var index = this.coverageIndex(table.coverage);\n        if (index === -1) {\n          return false;\n        }\n        var set = table.ruleSets[index];\n        for (var _iterator49 = _createForOfIteratorHelperLoose(set), _step49; !(_step49 = _iterator49()).done;) {\n          var rule = _step49.value;\n          if (this.sequenceMatches(1, rule.input)) {\n            return this.applyLookupList(rule.lookupRecords);\n          }\n        }\n        break;\n      case 2:\n        if (this.coverageIndex(table.coverage) === -1) {\n          return false;\n        }\n        index = this.getClassID(this.glyphIterator.cur.id, table.classDef);\n        if (index === -1) {\n          return false;\n        }\n        set = table.classSet[index];\n        for (var _iterator50 = _createForOfIteratorHelperLoose(set), _step50; !(_step50 = _iterator50()).done;) {\n          var _rule = _step50.value;\n          if (this.classSequenceMatches(1, _rule.classes, table.classDef)) {\n            return this.applyLookupList(_rule.lookupRecords);\n          }\n        }\n        break;\n      case 3:\n        if (this.coverageSequenceMatches(0, table.coverages)) {\n          return this.applyLookupList(table.lookupRecords);\n        }\n        break;\n    }\n    return false;\n  };\n  _proto25.applyChainingContext = function applyChainingContext(table) {\n    switch (table.version) {\n      case 1:\n        var index = this.coverageIndex(table.coverage);\n        if (index === -1) {\n          return false;\n        }\n        var set = table.chainRuleSets[index];\n        for (var _iterator51 = _createForOfIteratorHelperLoose(set), _step51; !(_step51 = _iterator51()).done;) {\n          var rule = _step51.value;\n          if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) {\n            return this.applyLookupList(rule.lookupRecords);\n          }\n        }\n        break;\n      case 2:\n        if (this.coverageIndex(table.coverage) === -1) {\n          return false;\n        }\n        index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef);\n        var rules = table.chainClassSet[index];\n        if (!rules) {\n          return false;\n        }\n        for (var _iterator52 = _createForOfIteratorHelperLoose(rules), _step52; !(_step52 = _iterator52()).done;) {\n          var _rule2 = _step52.value;\n          if (this.classSequenceMatches(-_rule2.backtrack.length, _rule2.backtrack, table.backtrackClassDef) && this.classSequenceMatches(1, _rule2.input, table.inputClassDef) && this.classSequenceMatches(1 + _rule2.input.length, _rule2.lookahead, table.lookaheadClassDef)) {\n            return this.applyLookupList(_rule2.lookupRecords);\n          }\n        }\n        break;\n      case 3:\n        if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) {\n          return this.applyLookupList(table.lookupRecords);\n        }\n        break;\n    }\n    return false;\n  };\n  return OTProcessor;\n}();\nvar GlyphInfo = /*#__PURE__*/function () {\n  function GlyphInfo(font, id, codePoints, features) {\n    if (codePoints === void 0) {\n      codePoints = [];\n    }\n    this._font = font;\n    this.codePoints = codePoints;\n    this.id = id;\n    this.features = {};\n    if (Array.isArray(features)) {\n      for (var i = 0; i < features.length; i++) {\n        var feature = features[i];\n        this.features[feature] = true;\n      }\n    } else if (typeof features === 'object') {\n      Object.assign(this.features, features);\n    }\n    this.ligatureID = null;\n    this.ligatureComponent = null;\n    this.isLigated = false;\n    this.cursiveAttachment = null;\n    this.markAttachment = null;\n    this.shaperInfo = null;\n    this.substituted = false;\n    this.isMultiplied = false;\n  }\n  var _proto26 = GlyphInfo.prototype;\n  _proto26.copy = function copy() {\n    return new GlyphInfo(this._font, this.id, this.codePoints, this.features);\n  };\n  _createClass(GlyphInfo, [{\n    key: \"id\",\n    get: function get() {\n      return this._id;\n    },\n    set: function set(id) {\n      this._id = id;\n      this.substituted = true;\n      var GDEF = this._font.GDEF;\n      if (GDEF && GDEF.glyphClassDef) {\n        // TODO: clean this up\n        var classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef);\n        this.isBase = classID === 1;\n        this.isLigature = classID === 2;\n        this.isMark = classID === 3;\n        this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0;\n      } else {\n        this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\n        this.isBase = !this.isMark;\n        this.isLigature = this.codePoints.length > 1;\n        this.markAttachmentType = 0;\n      }\n    }\n  }]);\n  return GlyphInfo;\n}();\n/**\n * This is a shaper for the Hangul script, used by the Korean language.\n * It does the following:\n *   - decompose if unsupported by the font:\n *     <LV>   -> <L,V>\n *     <LVT>  -> <L,V,T>\n *     <LV,T> -> <L,V,T>\n *\n *   - compose if supported by the font:\n *     <L,V>   -> <LV>\n *     <L,V,T> -> <LVT>\n *     <LV,T>  -> <LVT>\n *\n *   - reorder tone marks (S is any valid syllable):\n *     <S, M> -> <M, S>\n *\n *   - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.\n *\n * This logic is based on the following documents:\n *   - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm\n *   - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf\n */\nvar HangulShaper = /*#__PURE__*/function (_DefaultShaper2) {\n  _inheritsLoose(HangulShaper, _DefaultShaper2);\n  function HangulShaper() {\n    return _DefaultShaper2.apply(this, arguments) || this;\n  }\n  HangulShaper.planFeatures = function planFeatures(plan) {\n    plan.add(['ljmo', 'vjmo', 'tjmo'], false);\n  };\n  HangulShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    var state = 0;\n    var i = 0;\n    while (i < glyphs.length) {\n      var action = void 0;\n      var glyph = glyphs[i];\n      var code = glyph.codePoints[0];\n      var type = getType(code);\n      var _STATE_TABLE$1$state$ = STATE_TABLE$1[state][type];\n      action = _STATE_TABLE$1$state$[0];\n      state = _STATE_TABLE$1$state$[1];\n      switch (action) {\n        case DECOMPOSE:\n          // Decompose the composed syllable if it is not supported by the font.\n          if (!plan.font.hasGlyphForCodePoint(code)) {\n            i = decompose(glyphs, i, plan.font);\n          }\n          break;\n        case COMPOSE:\n          // Found a decomposed syllable. Try to compose if supported by the font.\n          i = compose(glyphs, i, plan.font);\n          break;\n        case TONE_MARK:\n          // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable.\n          reorderToneMark(glyphs, i, plan.font);\n          break;\n        case INVALID:\n          // Tone mark has no valid syllable to attach to, so insert a dotted circle\n          i = insertDottedCircle(glyphs, i, plan.font);\n          break;\n      }\n      i++;\n    }\n  };\n  return HangulShaper;\n}(DefaultShaper);\n_defineProperty(HangulShaper, \"zeroMarkWidths\", 'NONE');\nvar HANGUL_BASE = 0xac00;\nvar HANGUL_END = 0xd7a4;\nvar HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1;\nvar L_BASE = 0x1100; // lead\n\nvar V_BASE = 0x1161; // vowel\n\nvar T_BASE = 0x11a7; // trail\n\nvar L_COUNT = 19;\nvar V_COUNT = 21;\nvar T_COUNT = 28;\nvar L_END = L_BASE + L_COUNT - 1;\nvar V_END = V_BASE + V_COUNT - 1;\nvar T_END = T_BASE + T_COUNT - 1;\nvar DOTTED_CIRCLE = 0x25cc;\nvar isL = function isL(code) {\n  return 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c;\n};\nvar isV = function isV(code) {\n  return 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6;\n};\nvar isT = function isT(code) {\n  return 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb;\n};\nvar isTone = function isTone(code) {\n  return 0x302e <= code && code <= 0x302f;\n};\nvar isLVT = function isLVT(code) {\n  return HANGUL_BASE <= code && code <= HANGUL_END;\n};\nvar isLV = function isLV(code) {\n  return code - HANGUL_BASE < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0;\n};\nvar isCombiningL = function isCombiningL(code) {\n  return L_BASE <= code && code <= L_END;\n};\nvar isCombiningV = function isCombiningV(code) {\n  return V_BASE <= code && code <= V_END;\n};\nvar isCombiningT = function isCombiningT(code) {\n  return 1 <= code && code <= T_END;\n}; // Character categories\n\nvar X = 0; // Other character\n\nvar L = 1; // Leading consonant\n\nvar V = 2; // Medial vowel\n\nvar T = 3; // Trailing consonant\n\nvar LV = 4; // Composed <LV> syllable\n\nvar LVT = 5; // Composed <LVT> syllable\n\nvar M = 6; // Tone mark\n// This function classifies a character using the above categories.\n\nfunction getType(code) {\n  if (isL(code)) {\n    return L;\n  }\n  if (isV(code)) {\n    return V;\n  }\n  if (isT(code)) {\n    return T;\n  }\n  if (isLV(code)) {\n    return LV;\n  }\n  if (isLVT(code)) {\n    return LVT;\n  }\n  if (isTone(code)) {\n    return M;\n  }\n  return X;\n} // State machine actions\n\nvar NO_ACTION = 0;\nvar DECOMPOSE = 1;\nvar COMPOSE = 2;\nvar TONE_MARK = 4;\nvar INVALID = 5; // Build a state machine that accepts valid syllables, and applies actions along the way.\n// The logic this is implementing is documented at the top of the file.\n\nvar STATE_TABLE$1 = [\n//       X                 L                 V                T                  LV                LVT               M\n// State 0: start state\n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]],\n// State 1: <L>\n[[NO_ACTION, 0], [NO_ACTION, 1], [COMPOSE, 2], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]],\n// State 2: <L,V> or <LV>\n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [COMPOSE, 3], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]],\n// State 3: <L,V,T> or <LVT>\n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]]];\nfunction getGlyph(font, code, features) {\n  return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features);\n}\nfunction decompose(glyphs, i, font) {\n  var glyph = glyphs[i];\n  var code = glyph.codePoints[0];\n  var s = code - HANGUL_BASE;\n  var t = T_BASE + s % T_COUNT;\n  s = s / T_COUNT | 0;\n  var l = L_BASE + s / V_COUNT | 0;\n  var v = V_BASE + s % V_COUNT; // Don't decompose if all of the components are not available\n\n  if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== T_BASE && !font.hasGlyphForCodePoint(t)) {\n    return i;\n  } // Replace the current glyph with decomposed L, V, and T glyphs,\n  // and apply the proper OpenType features to each component.\n\n  var ljmo = getGlyph(font, l, glyph.features);\n  ljmo.features.ljmo = true;\n  var vjmo = getGlyph(font, v, glyph.features);\n  vjmo.features.vjmo = true;\n  var insert = [ljmo, vjmo];\n  if (t > T_BASE) {\n    var tjmo = getGlyph(font, t, glyph.features);\n    tjmo.features.tjmo = true;\n    insert.push(tjmo);\n  }\n  glyphs.splice.apply(glyphs, [i, 1].concat(insert));\n  return i + insert.length - 1;\n}\nfunction compose(glyphs, i, font) {\n  var glyph = glyphs[i];\n  var code = glyphs[i].codePoints[0];\n  var type = getType(code);\n  var prev = glyphs[i - 1].codePoints[0];\n  var prevType = getType(prev); // Figure out what type of syllable we're dealing with\n\n  var lv, ljmo, vjmo, tjmo;\n  if (prevType === LV && type === T) {\n    // <LV,T>\n    lv = prev;\n    tjmo = glyph;\n  } else {\n    if (type === V) {\n      // <L,V>\n      ljmo = glyphs[i - 1];\n      vjmo = glyph;\n    } else {\n      // <L,V,T>\n      ljmo = glyphs[i - 2];\n      vjmo = glyphs[i - 1];\n      tjmo = glyph;\n    }\n    var l = ljmo.codePoints[0];\n    var v = vjmo.codePoints[0]; // Make sure L and V are combining characters\n\n    if (isCombiningL(l) && isCombiningV(v)) {\n      lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT;\n    }\n  }\n  var t = tjmo && tjmo.codePoints[0] || T_BASE;\n  if (lv != null && (t === T_BASE || isCombiningT(t))) {\n    var s = lv + (t - T_BASE); // Replace with a composed glyph if supported by the font,\n    // otherwise apply the proper OpenType features to each component.\n\n    if (font.hasGlyphForCodePoint(s)) {\n      var del = prevType === V ? 3 : 2;\n      glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features));\n      return i - del + 1;\n    }\n  } // Didn't compose (either a non-combining component or unsupported by font).\n\n  if (ljmo) {\n    ljmo.features.ljmo = true;\n  }\n  if (vjmo) {\n    vjmo.features.vjmo = true;\n  }\n  if (tjmo) {\n    tjmo.features.tjmo = true;\n  }\n  if (prevType === LV) {\n    // Sequence was originally <L,V>, which got combined earlier.\n    // Either the T was non-combining, or the LVT glyph wasn't supported.\n    // Decompose the glyph again and apply OT features.\n    decompose(glyphs, i - 1, font);\n    return i + 1;\n  }\n  return i;\n}\nfunction getLength(code) {\n  switch (getType(code)) {\n    case LV:\n    case LVT:\n      return 1;\n    case V:\n      return 2;\n    case T:\n      return 3;\n  }\n}\nfunction reorderToneMark(glyphs, i, font) {\n  var glyph = glyphs[i];\n  var code = glyphs[i].codePoints[0]; // Move tone mark to the beginning of the previous syllable, unless it is zero width\n\n  if (font.glyphForCodePoint(code).advanceWidth === 0) {\n    return;\n  }\n  var prev = glyphs[i - 1].codePoints[0];\n  var len = getLength(prev);\n  glyphs.splice(i, 1);\n  return glyphs.splice(i - len, 0, glyph);\n}\nfunction insertDottedCircle(glyphs, i, font) {\n  var glyph = glyphs[i];\n  var code = glyphs[i].codePoints[0];\n  if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) {\n    var dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features); // If the tone mark is zero width, insert the dotted circle before, otherwise after\n\n    var idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1;\n    glyphs.splice(idx, 0, dottedCircle);\n    i++;\n  }\n  return i;\n}\nvar stateTable = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 14, 15, 16, 17], [0, 0, 0, 18, 19, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 28, 29, 30, 31, 32, 33, 0, 34, 0, 0, 35, 36, 0, 0, 37, 0], [0, 0, 0, 38, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 39, 0, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 12, 43, 0, 0, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0], [0, 0, 0, 45, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 55, 56, 57, 58, 0, 59, 0, 0, 60, 61, 0, 0, 62, 0], [0, 0, 0, 4, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 63, 64, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 63, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 0, 2, 16, 0], [0, 0, 0, 18, 65, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 0, 0], [0, 0, 0, 69, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 73, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 75, 0, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 25, 79, 0, 0, 0, 0], [0, 0, 0, 18, 19, 20, 74, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 81, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 87, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 18, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 89, 90, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 89, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 0, 0], [0, 0, 0, 94, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 96, 0, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 35, 100, 0, 0, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 102, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 28, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 110, 111, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 110, 0, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 0, 0], [0, 0, 0, 0, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 0, 0, 115, 116, 117, 118, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 39, 0, 122, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 124, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0], [0, 39, 0, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 47, 47, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 128, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 129, 130, 131, 132, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 135, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 136, 0, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 60, 140, 0, 0, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0], [0, 0, 0, 142, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 148, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 150, 151, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 150, 0, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 157, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 3, 4, 5, 159, 160, 8, 161, 0, 162, 0, 11, 12, 163, 0, 75, 16, 0], [0, 0, 0, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0], [0, 124, 64, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 124, 0, 0], [0, 0, 0, 0, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 172, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 75, 0, 176, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 178, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0], [0, 75, 0, 0, 0, 175, 179, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 180, 180, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 83, 83, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 182, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 183, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 191, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0], [0, 178, 90, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 178, 0, 0], [0, 0, 0, 0, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 198, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 96, 0, 202, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 204, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0], [0, 96, 0, 0, 0, 201, 205, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 206, 206, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 104, 104, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 208, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 209, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 217, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0], [0, 204, 111, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 204, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 223, 0, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 119, 225, 0, 0, 0, 0], [0, 0, 0, 115, 116, 117, 222, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 115, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 226, 64, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 226, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 39, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 44, 44, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 229, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 39, 0, 122, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 231, 231, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 130, 131, 132, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 131, 131, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 234, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 235, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 0, 0, 240, 241, 242, 243, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 136, 0, 247, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 249, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0], [0, 136, 0, 0, 0, 246, 250, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 251, 251, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 144, 144, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 253, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 254, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 262, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0], [0, 249, 151, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 249, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 158, 225, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 222, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 155, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 43, 266, 266, 8, 161, 0, 24, 0, 0, 12, 267, 0, 0, 0, 0], [0, 75, 0, 176, 43, 268, 268, 269, 161, 0, 24, 0, 0, 0, 267, 0, 75, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0], [0, 273, 274, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 273, 0, 0], [0, 0, 0, 40, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 121, 275, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 279, 0, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 173, 281, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 278, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 169, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 282, 90, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 282, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 80, 80, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 285, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 75, 0, 176, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 287, 287, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 185, 185, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 290, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 291, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 192, 281, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 278, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 189, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 76, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 175, 296, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 299, 0, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 199, 301, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 298, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 195, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 302, 111, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 302, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 96, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 101, 101, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 305, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 96, 0, 202, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 307, 307, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 211, 211, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 310, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 311, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 218, 301, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 298, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 215, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 97, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 201, 316, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 320, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 223, 0, 323, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 0, 0, 121, 324, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 325, 318, 326, 327, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 64, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 121, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0], [0, 0, 0, 0, 0, 329, 329, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 237, 237, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 332, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 333, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 337, 0, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 244, 339, 0, 0, 0, 0], [0, 0, 0, 240, 241, 242, 336, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 240, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 340, 151, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 340, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 136, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 141, 141, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 343, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 136, 0, 247, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 345, 345, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 256, 256, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 348, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 349, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 263, 339, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 336, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 260, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 137, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 246, 354, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 355, 90, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 355, 0, 0], [0, 0, 0, 0, 0, 356, 356, 269, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 357, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 366, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 40, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 372, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 279, 0, 375, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 0, 0, 175, 376, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 377, 370, 378, 379, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 90, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 175, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0], [0, 0, 0, 0, 0, 381, 381, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 293, 293, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 384, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 385, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 76, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 390, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 299, 0, 393, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 0, 0, 201, 394, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 395, 388, 396, 397, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 111, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 201, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0], [0, 0, 0, 0, 0, 399, 399, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 313, 313, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 402, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 403, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 97, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 407, 0, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 321, 409, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 406, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 0, 0, 317, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 410, 64, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 410, 0, 0], [0, 223, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 323, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 328, 409, 0, 0, 0, 0], [0, 0, 0, 325, 318, 326, 406, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 325, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0], [0, 0, 0, 0, 0, 411, 411, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 413, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 417, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 337, 0, 420, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 0, 0, 246, 421, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 422, 415, 423, 424, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 151, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 246, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0], [0, 0, 0, 0, 0, 426, 426, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 351, 351, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 429, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 430, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 137, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 434, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 180, 180, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 359, 359, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 437, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 438, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 443, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 367, 225, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 445, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 364, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 448, 0, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 373, 450, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 447, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 0, 0, 369, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 451, 90, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 451, 0, 0], [0, 279, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 375, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 380, 450, 0, 0, 0, 0], [0, 0, 0, 377, 370, 378, 447, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 377, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0], [0, 0, 0, 0, 0, 452, 452, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 454, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 457, 0, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 391, 459, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 456, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 0, 0, 387, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 460, 111, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 460, 0, 0], [0, 299, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 393, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 398, 459, 0, 0, 0, 0], [0, 0, 0, 395, 388, 396, 456, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 395, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0], [0, 0, 0, 0, 0, 461, 461, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 463, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 467, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 407, 0, 470, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 0, 0, 121, 471, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 472, 465, 473, 474, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0], [0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 479, 0, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 418, 481, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 478, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 0, 0, 414, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 482, 151, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 482, 0, 0], [0, 337, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 420, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 425, 481, 0, 0, 0, 0], [0, 0, 0, 422, 415, 423, 478, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 422, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0], [0, 0, 0, 0, 0, 483, 483, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 485, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 435, 225, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 445, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 432, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 486, 486, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 440, 440, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 489, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 490, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 497, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 0, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 0, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 502, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 448, 0, 505, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 0, 0, 175, 506, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 507, 500, 508, 509, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0], [0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 515, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 457, 0, 518, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 0, 0, 201, 519, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 520, 513, 521, 522, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0], [0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 527, 0, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 468, 529, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 526, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 0, 0, 464, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 530, 64, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 530, 0, 0], [0, 407, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 470, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 475, 529, 0, 0, 0, 0], [0, 0, 0, 472, 465, 473, 526, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 472, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0], [0, 0, 0, 0, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 534, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 479, 0, 537, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 0, 0, 246, 538, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 539, 532, 540, 541, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0], [0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0], [0, 0, 0, 0, 0, 544, 544, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 492, 492, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 547, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 548, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 274, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 368, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 553, 0, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 503, 555, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 552, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 0, 0, 499, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 556, 90, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 556, 0, 0], [0, 448, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 505, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 510, 555, 0, 0, 0, 0], [0, 0, 0, 507, 500, 508, 552, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 507, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 559, 0, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 516, 561, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 558, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 0, 0, 512, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 562, 111, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 562, 0, 0], [0, 457, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 518, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 523, 561, 0, 0, 0, 0], [0, 0, 0, 520, 513, 521, 558, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 520, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0], [0, 0, 0, 0, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 565, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 527, 0, 567, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 0, 0, 121, 568, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 569, 66, 570, 571, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 575, 0, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 535, 577, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 574, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 0, 0, 531, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 578, 151, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 578, 0, 0], [0, 479, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 537, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 542, 577, 0, 0, 0, 0], [0, 0, 0, 539, 532, 540, 574, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 539, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0], [0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0], [0, 0, 0, 0, 0, 579, 579, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 581, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 584, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 553, 0, 586, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 0, 0, 175, 587, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 588, 91, 589, 590, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 0, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0], [0, 0, 0, 592, 112, 593, 594, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 559, 0, 596, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 0, 0, 201, 597, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 598, 112, 599, 600, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 566, 165, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 67, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 0, 0, 563, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 527, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 567, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 572, 165, 0, 0, 0, 0], [0, 0, 0, 569, 66, 570, 67, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 569, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 605, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 575, 0, 607, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 0, 0, 246, 608, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 609, 152, 610, 611, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0], [0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 585, 194, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 92, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 0, 0, 582, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 553, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 586, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 591, 194, 0, 0, 0, 0], [0, 0, 0, 588, 91, 589, 92, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 588, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 595, 220, 0, 0, 0, 0], [0, 0, 0, 592, 112, 593, 113, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 0, 0, 592, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 559, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 596, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 601, 220, 0, 0, 0, 0], [0, 0, 0, 598, 112, 599, 113, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 598, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 606, 265, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 153, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 0, 0, 603, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 575, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 607, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 612, 265, 0, 0, 0, 0], [0, 0, 0, 609, 152, 610, 153, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 609, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0]];\nvar accepting = [false, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, false, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, false, false, true, false, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, false, false, true, true, false, false, true, true, true, false, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, false, false, false, false, false, false, false, true, true, false, false, true, true, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, false, true, true, false, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, false, true, true, true, true, true, false, true, true, false, true, true, true];\nvar tags = [[], [\"broken_cluster\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"symbol_cluster\"], [], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [], [\"broken_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [], [\"consonant_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [], [\"vowel_syllable\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [\"standalone_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"standalone_cluster\"]];\nvar indicMachine = {\n  stateTable: stateTable,\n  accepting: accepting,\n  tags: tags\n};\nvar categories = [\"O\", \"IND\", \"S\", \"GB\", \"B\", \"FM\", \"CGJ\", \"VMAbv\", \"VMPst\", \"VAbv\", \"VPst\", \"CMBlw\", \"VPre\", \"VBlw\", \"H\", \"VMBlw\", \"CMAbv\", \"MBlw\", \"CS\", \"R\", \"SUB\", \"MPst\", \"MPre\", \"FAbv\", \"FPst\", \"FBlw\", \"null\", \"SMAbv\", \"SMBlw\", \"VMPre\", \"ZWNJ\", \"ZWJ\", \"WJ\", \"M\", \"VS\", \"N\", \"HN\", \"MAbv\"];\nvar decompositions = {\n  \"2507\": [2503, 2494],\n  \"2508\": [2503, 2519],\n  \"2888\": [2887, 2902],\n  \"2891\": [2887, 2878],\n  \"2892\": [2887, 2903],\n  \"3018\": [3014, 3006],\n  \"3019\": [3015, 3006],\n  \"3020\": [3014, 3031],\n  \"3144\": [3142, 3158],\n  \"3264\": [3263, 3285],\n  \"3271\": [3270, 3285],\n  \"3272\": [3270, 3286],\n  \"3274\": [3270, 3266],\n  \"3275\": [3270, 3266, 3285],\n  \"3402\": [3398, 3390],\n  \"3403\": [3399, 3390],\n  \"3404\": [3398, 3415],\n  \"3546\": [3545, 3530],\n  \"3548\": [3545, 3535],\n  \"3549\": [3545, 3535, 3530],\n  \"3550\": [3545, 3551],\n  \"3635\": [3661, 3634],\n  \"3763\": [3789, 3762],\n  \"3955\": [3953, 3954],\n  \"3957\": [3953, 3956],\n  \"3958\": [4018, 3968],\n  \"3959\": [4018, 3953, 3968],\n  \"3960\": [4019, 3968],\n  \"3961\": [4019, 3953, 3968],\n  \"3969\": [3953, 3968],\n  \"6971\": [6970, 6965],\n  \"6973\": [6972, 6965],\n  \"6976\": [6974, 6965],\n  \"6977\": [6975, 6965],\n  \"6979\": [6978, 6965],\n  \"69934\": [69937, 69927],\n  \"69935\": [69938, 69927],\n  \"70475\": [70471, 70462],\n  \"70476\": [70471, 70487],\n  \"70843\": [70841, 70842],\n  \"70844\": [70841, 70832],\n  \"70846\": [70841, 70845],\n  \"71098\": [71096, 71087],\n  \"71099\": [71097, 71087]\n};\nvar stateTable$1 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [2, 2, 3, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 2, 0, 0, 24, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 27, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 39, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 49, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 53, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0]];\nvar accepting$1 = [false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true];\nvar tags$1 = [[], [\"broken_cluster\"], [\"independent_cluster\"], [\"symbol_cluster\"], [\"standard_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"numeral_cluster\"], [\"broken_cluster\"], [\"independent_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"virama_terminated_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"numeral_cluster\"], [\"number_joiner_terminated_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"numeral_cluster\"]];\nvar useData = {\n  categories: categories,\n  decompositions: decompositions,\n  stateTable: stateTable$1,\n  accepting: accepting$1,\n  tags: tags$1\n};\n\n// Cateories used in the OpenType spec:\n// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx\nvar CATEGORIES = {\n  X: 1 << 0,\n  C: 1 << 1,\n  V: 1 << 2,\n  N: 1 << 3,\n  H: 1 << 4,\n  ZWNJ: 1 << 5,\n  ZWJ: 1 << 6,\n  M: 1 << 7,\n  SM: 1 << 8,\n  VD: 1 << 9,\n  A: 1 << 10,\n  Placeholder: 1 << 11,\n  Dotted_Circle: 1 << 12,\n  RS: 1 << 13,\n  // Register Shifter, used in Khmer OT spec.\n  Coeng: 1 << 14,\n  // Khmer-style Virama.\n  Repha: 1 << 15,\n  // Atomically-encoded logical or visual repha.\n  Ra: 1 << 16,\n  CM: 1 << 17,\n  // Consonant-Medial.\n  Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD).\n}; // Visual positions in a syllable from left to right.\n\nvar POSITIONS = {\n  Start: 1 << 0,\n  Ra_To_Become_Reph: 1 << 1,\n  Pre_M: 1 << 2,\n  Pre_C: 1 << 3,\n  Base_C: 1 << 4,\n  After_Main: 1 << 5,\n  Above_C: 1 << 6,\n  Before_Sub: 1 << 7,\n  Below_C: 1 << 8,\n  After_Sub: 1 << 9,\n  Before_Post: 1 << 10,\n  Post_C: 1 << 11,\n  After_Post: 1 << 12,\n  Final_C: 1 << 13,\n  SMVD: 1 << 14,\n  End: 1 << 15\n};\nvar CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle;\nvar JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ;\nvar HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng;\nvar INDIC_CONFIGS = {\n  Default: {\n    hasOldSpec: false,\n    virama: 0,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Devanagari: {\n    hasOldSpec: true,\n    virama: 0x094D,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Bengali: {\n    hasOldSpec: true,\n    virama: 0x09CD,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Sub,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Gurmukhi: {\n    hasOldSpec: true,\n    virama: 0x0A4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Sub,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Gujarati: {\n    hasOldSpec: true,\n    virama: 0x0ACD,\n    basePos: 'Last',\n    rephPos: POSITIONS.Before_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Oriya: {\n    hasOldSpec: true,\n    virama: 0x0B4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Main,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Tamil: {\n    hasOldSpec: true,\n    virama: 0x0BCD,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Pre_And_Post'\n  },\n  Telugu: {\n    hasOldSpec: true,\n    virama: 0x0C4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Post,\n    rephMode: 'Explicit',\n    blwfMode: 'Post_Only'\n  },\n  Kannada: {\n    hasOldSpec: true,\n    virama: 0x0CCD,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Post,\n    rephMode: 'Implicit',\n    blwfMode: 'Post_Only'\n  },\n  Malayalam: {\n    hasOldSpec: true,\n    virama: 0x0D4D,\n    basePos: 'Last',\n    rephPos: POSITIONS.After_Main,\n    rephMode: 'Log_Repha',\n    blwfMode: 'Pre_And_Post'\n  },\n  // Handled by UniversalShaper\n  // Sinhala: {\n  //   hasOldSpec: false,\n  //   virama: 0x0DCA,\n  //   basePos: 'Last_Sinhala',\n  //   rephPos: POSITIONS.After_Main,\n  //   rephMode: 'Explicit',\n  //   blwfMode: 'Pre_And_Post'\n  // },\n  Khmer: {\n    hasOldSpec: false,\n    virama: 0x17D2,\n    basePos: 'First',\n    rephPos: POSITIONS.Ra_To_Become_Reph,\n    rephMode: 'Vis_Repha',\n    blwfMode: 'Pre_And_Post'\n  }\n}; // Additional decompositions that aren't in Unicode\n\nvar INDIC_DECOMPOSITIONS = {\n  // Khmer\n  0x17BE: [0x17C1, 0x17BE],\n  0x17BF: [0x17C1, 0x17BF],\n  0x17C0: [0x17C1, 0x17C0],\n  0x17C4: [0x17C1, 0x17C4],\n  0x17C5: [0x17C1, 0x17C5]\n};\nvar decompositions$1 = useData.decompositions;\nvar trie$1 = new UnicodeTrie(Buffer(\"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\",\"base64\"));\nvar stateMachine = new StateMachine(indicMachine);\n/**\n * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc.\n * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc\n */\nvar IndicShaper = /*#__PURE__*/function (_DefaultShaper3) {\n  _inheritsLoose(IndicShaper, _DefaultShaper3);\n  function IndicShaper() {\n    return _DefaultShaper3.apply(this, arguments) || this;\n  }\n  IndicShaper.planFeatures = function planFeatures(plan) {\n    plan.addStage(setupSyllables);\n    plan.addStage(['locl', 'ccmp']);\n    plan.addStage(initialReordering);\n    plan.addStage('nukt');\n    plan.addStage('akhn');\n    plan.addStage('rphf', false);\n    plan.addStage('rkrf');\n    plan.addStage('pref', false);\n    plan.addStage('blwf', false);\n    plan.addStage('abvf', false);\n    plan.addStage('half', false);\n    plan.addStage('pstf', false);\n    plan.addStage('vatu');\n    plan.addStage('cjct');\n    plan.addStage('cfar', false);\n    plan.addStage(finalReordering);\n    plan.addStage({\n      local: ['init'],\n      global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig']\n    }); // Setup the indic config for the selected script\n\n    plan.unicodeScript = fromOpenType(plan.script);\n    plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default;\n    plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2'; // TODO: turn off kern (Khmer) and liga features.\n  };\n  IndicShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    var _loop = function _loop(i) {\n      var codepoint = glyphs[i].codePoints[0];\n      var d = INDIC_DECOMPOSITIONS[codepoint] || decompositions$1[codepoint];\n      if (d) {\n        var decomposed = d.map(function (c) {\n          var g = plan.font.glyphForCodePoint(c);\n          return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n        });\n        glyphs.splice.apply(glyphs, [i, 1].concat(decomposed));\n      }\n    };\n\n    // Decompose split matras\n    // TODO: do this in a more general unicode normalizer\n    for (var i = glyphs.length - 1; i >= 0; i--) {\n      _loop(i);\n    }\n  };\n  return IndicShaper;\n}(DefaultShaper);\n_defineProperty(IndicShaper, \"zeroMarkWidths\", 'NONE');\nfunction indicCategory(glyph) {\n  return trie$1.get(glyph.codePoints[0]) >> 8;\n}\nfunction indicPosition(glyph) {\n  return 1 << (trie$1.get(glyph.codePoints[0]) & 0xff);\n}\nvar IndicInfo = function IndicInfo(category, position, syllableType, syllable) {\n  this.category = category;\n  this.position = position;\n  this.syllableType = syllableType;\n  this.syllable = syllable;\n};\nfunction setupSyllables(font, glyphs) {\n  var syllable = 0;\n  var last = 0;\n  for (var _iterator53 = _createForOfIteratorHelperLoose(stateMachine.match(glyphs.map(indicCategory))), _step53; !(_step53 = _iterator53()).done;) {\n    var _step53$value = _step53.value,\n      start = _step53$value[0],\n      end = _step53$value[1],\n      tags = _step53$value[2];\n    if (start > last) {\n      ++syllable;\n      for (var i = last; i < start; i++) {\n        glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n      }\n    }\n    ++syllable; // Create shaper info\n\n    for (var _i = start; _i <= end; _i++) {\n      glyphs[_i].shaperInfo = new IndicInfo(1 << indicCategory(glyphs[_i]), indicPosition(glyphs[_i]), tags[0], syllable);\n    }\n    last = end + 1;\n  }\n  if (last < glyphs.length) {\n    ++syllable;\n    for (var _i2 = last; _i2 < glyphs.length; _i2++) {\n      glyphs[_i2].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n    }\n  }\n}\nfunction isConsonant(glyph) {\n  return glyph.shaperInfo.category & CONSONANT_FLAGS;\n}\nfunction isJoiner(glyph) {\n  return glyph.shaperInfo.category & JOINER_FLAGS;\n}\nfunction isHalantOrCoeng(glyph) {\n  return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS;\n}\nfunction wouldSubstitute(glyphs, feature) {\n  for (var _iterator54 = _createForOfIteratorHelperLoose(glyphs), _step54; !(_step54 = _iterator54()).done;) {\n    var _glyph$features;\n    var glyph = _step54.value;\n    glyph.features = (_glyph$features = {}, _glyph$features[feature] = true, _glyph$features);\n  }\n  var GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;\n  GSUB.applyFeatures([feature], glyphs);\n  return glyphs.length === 1;\n}\nfunction consonantPosition(font, consonant, virama) {\n  var glyphs = [virama, consonant, virama];\n  if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) {\n    return POSITIONS.Below_C;\n  } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) {\n    return POSITIONS.Post_C;\n  } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) {\n    return POSITIONS.Post_C;\n  }\n  return POSITIONS.Base_C;\n}\nfunction initialReordering(font, glyphs, plan) {\n  var indicConfig = plan.indicConfig;\n  var features = font._layoutEngine.engine.GSUBProcessor.features;\n  var dottedCircle = font.glyphForCodePoint(0x25cc).id;\n  var virama = font.glyphForCodePoint(indicConfig.virama).id;\n  if (virama) {\n    var info = new GlyphInfo(font, virama, [indicConfig.virama]);\n    for (var i = 0; i < glyphs.length; i++) {\n      if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n        glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info);\n      }\n    }\n  }\n  for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n    var _glyphs$start$shaperI = glyphs[start].shaperInfo,\n      category = _glyphs$start$shaperI.category,\n      syllableType = _glyphs$start$shaperI.syllableType;\n    if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') {\n      continue;\n    }\n    if (syllableType === 'broken_cluster' && dottedCircle) {\n      var g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n      g.shaperInfo = new IndicInfo(1 << indicCategory(g), indicPosition(g), glyphs[start].shaperInfo.syllableType, glyphs[start].shaperInfo.syllable); // Insert after possible Repha.\n\n      var _i3 = start;\n      while (_i3 < end && glyphs[_i3].shaperInfo.category === CATEGORIES.Repha) {\n        _i3++;\n      }\n      glyphs.splice(_i3++, 0, g);\n      end++;\n    } // 1. Find base consonant:\n    //\n    // The shaping engine finds the base consonant of the syllable, using the\n    // following algorithm: starting from the end of the syllable, move backwards\n    // until a consonant is found that does not have a below-base or post-base\n    // form (post-base forms have to follow below-base forms), or that is not a\n    // pre-base reordering Ra, or arrive at the first consonant. The consonant\n    // stopped at will be the base.\n\n    var base = end;\n    var limit = start;\n    var hasReph = false; // If the syllable starts with Ra + Halant (in a script that has Reph)\n    // and has more than one consonant, Ra is excluded from candidates for\n    // base consonants.\n\n    if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph && features.rphf && start + 3 <= end && (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2]) || indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)) {\n      // See if it matches the 'rphf' feature.\n      var _g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()];\n      if (wouldSubstitute(_g.slice(0, 2), 'rphf') || indicConfig.rephMode === 'Explicit' && wouldSubstitute(_g, 'rphf')) {\n        limit += 2;\n        while (limit < end && isJoiner(glyphs[limit])) {\n          limit++;\n        }\n        base = start;\n        hasReph = true;\n      }\n    } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) {\n      limit++;\n      while (limit < end && isJoiner(glyphs[limit])) {\n        limit++;\n      }\n      base = start;\n      hasReph = true;\n    }\n    switch (indicConfig.basePos) {\n      case 'Last':\n        {\n          // starting from the end of the syllable, move backwards\n          var _i4 = end;\n          var seenBelow = false;\n          do {\n            var _info = glyphs[--_i4].shaperInfo; // until a consonant is found\n\n            if (isConsonant(glyphs[_i4])) {\n              // that does not have a below-base or post-base form\n              // (post-base forms have to follow below-base forms),\n              if (_info.position !== POSITIONS.Below_C && (_info.position !== POSITIONS.Post_C || seenBelow)) {\n                base = _i4;\n                break;\n              } // or that is not a pre-base reordering Ra,\n              //\n              // IMPLEMENTATION NOTES:\n              //\n              // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped\n              // by the logic above already.\n              //\n              // or arrive at the first consonant. The consonant stopped at will\n              // be the base.\n\n              if (_info.position === POSITIONS.Below_C) {\n                seenBelow = true;\n              }\n              base = _i4;\n            } else if (start < _i4 && _info.category === CATEGORIES.ZWJ && glyphs[_i4 - 1].shaperInfo.category === CATEGORIES.H) {\n              // A ZWJ after a Halant stops the base search, and requests an explicit\n              // half form.\n              // A ZWJ before a Halant, requests a subjoined form instead, and hence\n              // search continues.  This is particularly important for Bengali\n              // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya.\n              break;\n            }\n          } while (_i4 > limit);\n          break;\n        }\n      case 'First':\n        {\n          // The first consonant is always the base.\n          base = start; // Mark all subsequent consonants as below.\n\n          for (var _i5 = base + 1; _i5 < end; _i5++) {\n            if (isConsonant(glyphs[_i5])) {\n              glyphs[_i5].shaperInfo.position = POSITIONS.Below_C;\n            }\n          }\n        }\n    } // If the syllable starts with Ra + Halant (in a script that has Reph)\n    // and has more than one consonant, Ra is excluded from candidates for\n    // base consonants.\n    //\n    //  Only do this for unforced Reph. (ie. not for Ra,H,ZWJ)\n\n    if (hasReph && base === start && limit - base <= 2) {\n      hasReph = false;\n    } // 2. Decompose and reorder Matras:\n    //\n    // Each matra and any syllable modifier sign in the cluster are moved to the\n    // appropriate position relative to the consonant(s) in the cluster. The\n    // shaping engine decomposes two- or three-part matras into their constituent\n    // parts before any repositioning. Matra characters are classified by which\n    // consonant in a conjunct they have affinity for and are reordered to the\n    // following positions:\n    //\n    //   o Before first half form in the syllable\n    //   o After subjoined consonants\n    //   o After post-form consonant\n    //   o After main consonant (for above marks)\n    //\n    // IMPLEMENTATION NOTES:\n    //\n    // The normalize() routine has already decomposed matras for us, so we don't\n    // need to worry about that.\n    // 3.  Reorder marks to canonical order:\n    //\n    // Adjacent nukta and halant or nukta and vedic sign are always repositioned\n    // if necessary, so that the nukta is first.\n    //\n    // IMPLEMENTATION NOTES:\n    //\n    // We don't need to do this: the normalize() routine already did this for us.\n    // Reorder characters\n\n    for (var _i6 = start; _i6 < base; _i6++) {\n      var _info2 = glyphs[_i6].shaperInfo;\n      _info2.position = Math.min(POSITIONS.Pre_C, _info2.position);\n    }\n    if (base < end) {\n      glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n    } // Mark final consonants.  A final consonant is one appearing after a matra,\n    // like in Khmer.\n\n    for (var _i7 = base + 1; _i7 < end; _i7++) {\n      if (glyphs[_i7].shaperInfo.category === CATEGORIES.M) {\n        for (var j = _i7 + 1; j < end; j++) {\n          if (isConsonant(glyphs[j])) {\n            glyphs[j].shaperInfo.position = POSITIONS.Final_C;\n            break;\n          }\n        }\n        break;\n      }\n    } // Handle beginning Ra\n\n    if (hasReph) {\n      glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph;\n    } // For old-style Indic script tags, move the first post-base Halant after\n    // last consonant.\n    //\n    // Reports suggest that in some scripts Uniscribe does this only if there\n    // is *not* a Halant after last consonant already (eg. Kannada), while it\n    // does it unconditionally in other scripts (eg. Malayalam).  We don't\n    // currently know about other scripts, so we single out Malayalam for now.\n    //\n    // Kannada test case:\n    // U+0C9A,U+0CCD,U+0C9A,U+0CCD\n    // With some versions of Lohit Kannada.\n    // https://bugs.freedesktop.org/show_bug.cgi?id=59118\n    //\n    // Malayalam test case:\n    // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D\n    // With lohit-ttf-20121122/Lohit-Malayalam.ttf\n\n    if (plan.isOldSpec) {\n      var disallowDoubleHalants = plan.unicodeScript !== 'Malayalam';\n      for (var _i8 = base + 1; _i8 < end; _i8++) {\n        if (glyphs[_i8].shaperInfo.category === CATEGORIES.H) {\n          var _j = void 0;\n          for (_j = end - 1; _j > _i8; _j--) {\n            if (isConsonant(glyphs[_j]) || disallowDoubleHalants && glyphs[_j].shaperInfo.category === CATEGORIES.H) {\n              break;\n            }\n          }\n          if (glyphs[_j].shaperInfo.category !== CATEGORIES.H && _j > _i8) {\n            // Move Halant to after last consonant.\n            var t = glyphs[_i8];\n            glyphs.splice.apply(glyphs, [_i8, 0].concat(glyphs.splice(_i8 + 1, _j - _i8)));\n            glyphs[_j] = t;\n          }\n          break;\n        }\n      }\n    } // Attach misc marks to previous char to move with them.\n\n    var lastPos = POSITIONS.Start;\n    for (var _i9 = start; _i9 < end; _i9++) {\n      var _info3 = glyphs[_i9].shaperInfo;\n      if (_info3.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & _info3.category)) {\n        _info3.position = lastPos;\n        if (_info3.category === CATEGORIES.H && _info3.position === POSITIONS.Pre_M) {\n          // Uniscribe doesn't move the Halant with Left Matra.\n          // TEST: U+092B,U+093F,U+094DE\n          // We follow.  This is important for the Sinhala\n          // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA\n          // where U+0DD9 is a left matra and U+0DCA is the virama.\n          // We don't want to move the virama with the left matra.\n          // TEST: U+0D9A,U+0DDA\n          for (var _j2 = _i9; _j2 > start; _j2--) {\n            if (glyphs[_j2 - 1].shaperInfo.position !== POSITIONS.Pre_M) {\n              _info3.position = glyphs[_j2 - 1].shaperInfo.position;\n              break;\n            }\n          }\n        }\n      } else if (_info3.position !== POSITIONS.SMVD) {\n        lastPos = _info3.position;\n      }\n    } // For post-base consonants let them own anything before them\n    // since the last consonant or matra.\n\n    var last = base;\n    for (var _i10 = base + 1; _i10 < end; _i10++) {\n      if (isConsonant(glyphs[_i10])) {\n        for (var _j3 = last + 1; _j3 < _i10; _j3++) {\n          if (glyphs[_j3].shaperInfo.position < POSITIONS.SMVD) {\n            glyphs[_j3].shaperInfo.position = glyphs[_i10].shaperInfo.position;\n          }\n        }\n        last = _i10;\n      } else if (glyphs[_i10].shaperInfo.category === CATEGORIES.M) {\n        last = _i10;\n      }\n    }\n    var arr = glyphs.slice(start, end);\n    arr.sort(function (a, b) {\n      return a.shaperInfo.position - b.shaperInfo.position;\n    });\n    glyphs.splice.apply(glyphs, [start, arr.length].concat(arr)); // Find base again\n\n    for (var _i11 = start; _i11 < end; _i11++) {\n      if (glyphs[_i11].shaperInfo.position === POSITIONS.Base_C) {\n        base = _i11;\n        break;\n      }\n    } // Setup features now\n    // Reph\n\n    for (var _i12 = start; _i12 < end && glyphs[_i12].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; _i12++) {\n      glyphs[_i12].features.rphf = true;\n    } // Pre-base\n\n    var blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post';\n    for (var _i13 = start; _i13 < base; _i13++) {\n      glyphs[_i13].features.half = true;\n      if (blwf) {\n        glyphs[_i13].features.blwf = true;\n      }\n    } // Post-base\n\n    for (var _i14 = base + 1; _i14 < end; _i14++) {\n      glyphs[_i14].features.abvf = true;\n      glyphs[_i14].features.pstf = true;\n      glyphs[_i14].features.blwf = true;\n    }\n    if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') {\n      // Old-spec eye-lash Ra needs special handling.  From the\n      // spec:\n      //\n      // \"The feature 'below-base form' is applied to consonants\n      // having below-base forms and following the base consonant.\n      // The exception is vattu, which may appear below half forms\n      // as well as below the base glyph. The feature 'below-base\n      // form' will be applied to all such occurrences of Ra as well.\"\n      //\n      // Test case: U+0924,U+094D,U+0930,U+094d,U+0915\n      // with Sanskrit 2003 font.\n      //\n      // However, note that Ra,Halant,ZWJ is the correct way to\n      // request eyelash form of Ra, so we wouldbn't inhibit it\n      // in that sequence.\n      //\n      // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915\n      for (var _i15 = start; _i15 + 1 < base; _i15++) {\n        if (glyphs[_i15].shaperInfo.category === CATEGORIES.Ra && glyphs[_i15 + 1].shaperInfo.category === CATEGORIES.H && (_i15 + 1 === base || glyphs[_i15 + 2].shaperInfo.category === CATEGORIES.ZWJ)) {\n          glyphs[_i15].features.blwf = true;\n          glyphs[_i15 + 1].features.blwf = true;\n        }\n      }\n    }\n    var prefLen = 2;\n    if (features.pref && base + prefLen < end) {\n      // Find a Halant,Ra sequence and mark it for pre-base reordering processing.\n      for (var _i16 = base + 1; _i16 + prefLen - 1 < end; _i16++) {\n        var _g2 = [glyphs[_i16].copy(), glyphs[_i16 + 1].copy()];\n        if (wouldSubstitute(_g2, 'pref')) {\n          for (var _j4 = 0; _j4 < prefLen; _j4++) {\n            glyphs[_i16++].features.pref = true;\n          } // Mark the subsequent stuff with 'cfar'.  Used in Khmer.\n          // Read the feature spec.\n          // This allows distinguishing the following cases with MS Khmer fonts:\n          // U+1784,U+17D2,U+179A,U+17D2,U+1782\n          // U+1784,U+17D2,U+1782,U+17D2,U+179A\n\n          if (features.cfar) {\n            for (; _i16 < end; _i16++) {\n              glyphs[_i16].features.cfar = true;\n            }\n          }\n          break;\n        }\n      }\n    } // Apply ZWJ/ZWNJ effects\n\n    for (var _i17 = start + 1; _i17 < end; _i17++) {\n      if (isJoiner(glyphs[_i17])) {\n        var nonJoiner = glyphs[_i17].shaperInfo.category === CATEGORIES.ZWNJ;\n        var _j5 = _i17;\n        do {\n          _j5--; // ZWJ/ZWNJ should disable CJCT.  They do that by simply\n          // being there, since we don't skip them for the CJCT\n          // feature (ie. F_MANUAL_ZWJ)\n          // A ZWNJ disables HALF.\n\n          if (nonJoiner) {\n            delete glyphs[_j5].features.half;\n          }\n        } while (_j5 > start && !isConsonant(glyphs[_j5]));\n      }\n    }\n  }\n}\nfunction finalReordering(font, glyphs, plan) {\n  var indicConfig = plan.indicConfig;\n  var features = font._layoutEngine.engine.GSUBProcessor.features;\n  for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n    // 4. Final reordering:\n    //\n    // After the localized forms and basic shaping forms GSUB features have been\n    // applied (see below), the shaping engine performs some final glyph\n    // reordering before applying all the remaining font features to the entire\n    // cluster.\n    var tryPref = !!features.pref; // Find base again\n\n    var base = start;\n    for (; base < end; base++) {\n      if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) {\n        if (tryPref && base + 1 < end) {\n          for (var i = base + 1; i < end; i++) {\n            if (glyphs[i].features.pref) {\n              if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) {\n                // Ok, this was a 'pref' candidate but didn't form any.\n                // Base is around here...\n                base = i;\n                while (base < end && isHalantOrCoeng(glyphs[base])) {\n                  base++;\n                }\n                glyphs[base].shaperInfo.position = POSITIONS.BASE_C;\n                tryPref = false;\n              }\n              break;\n            }\n          }\n        } // For Malayalam, skip over unformed below- (but NOT post-) forms.\n\n        if (plan.unicodeScript === 'Malayalam') {\n          for (var _i18 = base + 1; _i18 < end; _i18++) {\n            while (_i18 < end && isJoiner(glyphs[_i18])) {\n              _i18++;\n            }\n            if (_i18 === end || !isHalantOrCoeng(glyphs[_i18])) {\n              break;\n            }\n            _i18++; // Skip halant.\n\n            while (_i18 < end && isJoiner(glyphs[_i18])) {\n              _i18++;\n            }\n            if (_i18 < end && isConsonant(glyphs[_i18]) && glyphs[_i18].shaperInfo.position === POSITIONS.Below_C) {\n              base = _i18;\n              glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n            }\n          }\n        }\n        if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) {\n          base--;\n        }\n        break;\n      }\n    }\n    if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) {\n      base--;\n    }\n    if (base < end) {\n      while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) {\n        base--;\n      }\n    } // o Reorder matras:\n    //\n    // If a pre-base matra character had been reordered before applying basic\n    // features, the glyph can be moved closer to the main consonant based on\n    // whether half-forms had been formed. Actual position for the matra is\n    // defined as “after last standalone halant glyph, after initial matra\n    // position and before the main consonant”. If ZWJ or ZWNJ follow this\n    // halant, position is moved after it.\n    //\n\n    if (start + 1 < end && start < base) {\n      // Otherwise there can't be any pre-base matra characters.\n      // If we lost track of base, alas, position before last thingy.\n      var newPos = base === end ? base - 2 : base - 1; // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n      // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n      // We want to position matra after them.\n\n      if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n        while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n          newPos--;\n        } // If we found no Halant we are done.\n        // Otherwise only proceed if the Halant does\n        // not belong to the Matra itself!\n\n        if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n          // If ZWJ or ZWNJ follow this halant, position is moved after it.\n          if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) {\n            newPos++;\n          }\n        } else {\n          newPos = start; // No move.\n        }\n      }\n\n      if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n        // Now go see if there's actually any matras...\n        for (var _i19 = newPos; _i19 > start; _i19--) {\n          if (glyphs[_i19 - 1].shaperInfo.position === POSITIONS.Pre_M) {\n            var oldPos = _i19 - 1;\n            if (oldPos < base && base <= newPos) {\n              // Shouldn't actually happen.\n              base--;\n            }\n            var tmp = glyphs[oldPos];\n            glyphs.splice.apply(glyphs, [oldPos, 0].concat(glyphs.splice(oldPos + 1, newPos - oldPos)));\n            glyphs[newPos] = tmp;\n            newPos--;\n          }\n        }\n      }\n    } // o Reorder reph:\n    //\n    // Reph’s original position is always at the beginning of the syllable,\n    // (i.e. it is not reordered at the character reordering stage). However,\n    // it will be reordered according to the basic-forms shaping results.\n    // Possible positions for reph, depending on the script, are; after main,\n    // before post-base consonant forms, and after post-base consonant forms.\n    // Two cases:\n    //\n    // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then\n    //   we should only move it if the sequence ligated to the repha form.\n    //\n    // - If repha is encoded separately and in the logical position, we should only\n    //   move it if it did NOT ligate.  If it ligated, it's probably the font trying\n    //   to make it work without the reordering.\n\n    if (start + 1 < end && glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph && glyphs[start].shaperInfo.category === CATEGORIES.Repha !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)) {\n      var newRephPos = void 0;\n      var rephPos = indicConfig.rephPos;\n      var found = false; // 1. If reph should be positioned after post-base consonant forms,\n      //    proceed to step 5.\n\n      if (rephPos !== POSITIONS.After_Post) {\n        //  2. If the reph repositioning class is not after post-base: target\n        //     position is after the first explicit halant glyph between the\n        //     first post-reph consonant and last main consonant. If ZWJ or ZWNJ\n        //     are following this halant, position is moved after it. If such\n        //     position is found, this is the target position. Otherwise,\n        //     proceed to the next step.\n        //\n        //     Note: in old-implementation fonts, where classifications were\n        //     fixed in shaping engine, there was no case where reph position\n        //     will be found on this step.\n        newRephPos = start + 1;\n        while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n          newRephPos++;\n        }\n        if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n          // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n          if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n            newRephPos++;\n          }\n          found = true;\n        } // 3. If reph should be repositioned after the main consonant: find the\n        //    first consonant not ligated with main, or find the first\n        //    consonant that is not a potential pre-base reordering Ra.\n\n        if (!found && rephPos === POSITIONS.After_Main) {\n          newRephPos = base;\n          while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) {\n            newRephPos++;\n          }\n          found = newRephPos < end;\n        } // 4. If reph should be positioned before post-base consonant, find\n        //    first post-base classified consonant not ligated with main. If no\n        //    consonant is found, the target position should be before the\n        //    first matra, syllable modifier sign or vedic sign.\n        //\n        // This is our take on what step 4 is trying to say (and failing, BADLY).\n\n        if (!found && rephPos === POSITIONS.After_Sub) {\n          newRephPos = base;\n          while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) {\n            newRephPos++;\n          }\n          found = newRephPos < end;\n        }\n      } //  5. If no consonant is found in steps 3 or 4, move reph to a position\n      //     immediately before the first post-base matra, syllable modifier\n      //     sign or vedic sign that has a reordering class after the intended\n      //     reph position. For example, if the reordering position for reph\n      //     is post-main, it will skip above-base matras that also have a\n      //     post-main position.\n\n      if (!found) {\n        // Copied from step 2.\n        newRephPos = start + 1;\n        while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n          newRephPos++;\n        }\n        if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n          // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n          if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n            newRephPos++;\n          }\n          found = true;\n        }\n      } // 6. Otherwise, reorder reph to the end of the syllable.\n\n      if (!found) {\n        newRephPos = end - 1;\n        while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) {\n          newRephPos--;\n        } // If the Reph is to be ending up after a Matra,Halant sequence,\n        // position it before that Halant so it can interact with the Matra.\n        // However, if it's a plain Consonant,Halant we shouldn't do that.\n        // Uniscribe doesn't do this.\n        // TEST: U+0930,U+094D,U+0915,U+094B,U+094D\n\n        if (isHalantOrCoeng(glyphs[newRephPos])) {\n          for (var _i20 = base + 1; _i20 < newRephPos; _i20++) {\n            if (glyphs[_i20].shaperInfo.category === CATEGORIES.M) {\n              newRephPos--;\n            }\n          }\n        }\n      }\n      var reph = glyphs[start];\n      glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, newRephPos - start)));\n      glyphs[newRephPos] = reph;\n      if (start < base && base <= newRephPos) {\n        base--;\n      }\n    } // o Reorder pre-base reordering consonants:\n    //\n    // If a pre-base reordering consonant is found, reorder it according to\n    // the following rules:\n\n    if (tryPref && base + 1 < end) {\n      for (var _i21 = base + 1; _i21 < end; _i21++) {\n        if (glyphs[_i21].features.pref) {\n          // 1. Only reorder a glyph produced by substitution during application\n          //    of the <pref> feature. (Note that a font may shape a Ra consonant with\n          //    the feature generally but block it in certain contexts.)\n          // Note: We just check that something got substituted.  We don't check that\n          // the <pref> feature actually did it...\n          //\n          // Reorder pref only if it ligated.\n          if (glyphs[_i21].isLigated && !glyphs[_i21].isMultiplied) {\n            // 2. Try to find a target position the same way as for pre-base matra.\n            //    If it is found, reorder pre-base consonant glyph.\n            //\n            // 3. If position is not found, reorder immediately before main\n            //    consonant.\n            var _newPos = base; // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n            // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n            // We want to position matra after them.\n\n            if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n              while (_newPos > start && !(glyphs[_newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n                _newPos--;\n              } // In Khmer coeng model, a H,Ra can go *after* matras.  If it goes after a\n              // split matra, it should be reordered to *before* the left part of such matra.\n\n              if (_newPos > start && glyphs[_newPos - 1].shaperInfo.category === CATEGORIES.M) {\n                var _oldPos2 = _i21;\n                for (var j = base + 1; j < _oldPos2; j++) {\n                  if (glyphs[j].shaperInfo.category === CATEGORIES.M) {\n                    _newPos--;\n                    break;\n                  }\n                }\n              }\n            }\n            if (_newPos > start && isHalantOrCoeng(glyphs[_newPos - 1])) {\n              // -> If ZWJ or ZWNJ follow this halant, position is moved after it.\n              if (_newPos < end && isJoiner(glyphs[_newPos])) {\n                _newPos++;\n              }\n            }\n            var _oldPos = _i21;\n            var _tmp = glyphs[_oldPos];\n            glyphs.splice.apply(glyphs, [_newPos + 1, 0].concat(glyphs.splice(_newPos, _oldPos - _newPos)));\n            glyphs[_newPos] = _tmp;\n            if (_newPos <= base && base < _oldPos) {\n              base++;\n            }\n          }\n          break;\n        }\n      }\n    } // Apply 'init' to the Left Matra if it's a word start.\n\n    if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(unicode.getCategory(glyphs[start - 1].codePoints[0])))) {\n      glyphs[start].features.init = true;\n    }\n  }\n}\nfunction nextSyllable(glyphs, start) {\n  if (start >= glyphs.length) return start;\n  var syllable = glyphs[start].shaperInfo.syllable;\n  while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {}\n  return start;\n}\nvar categories$1 = useData.categories,\n  decompositions$2 = useData.decompositions;\nvar trie$2 = new UnicodeTrie(Buffer(\"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\",\"base64\"));\nvar stateMachine$1 = new StateMachine(useData);\n/**\n * This shaper is an implementation of the Universal Shaping Engine, which\n * uses Unicode data to shape a number of scripts without a dedicated shaping engine.\n * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm.\n */\nvar UniversalShaper = /*#__PURE__*/function (_DefaultShaper4) {\n  _inheritsLoose(UniversalShaper, _DefaultShaper4);\n  function UniversalShaper() {\n    return _DefaultShaper4.apply(this, arguments) || this;\n  }\n  UniversalShaper.planFeatures = function planFeatures(plan) {\n    plan.addStage(setupSyllables$1); // Default glyph pre-processing group\n\n    plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']); // Reordering group\n\n    plan.addStage(clearSubstitutionFlags);\n    plan.addStage(['rphf'], false);\n    plan.addStage(recordRphf);\n    plan.addStage(clearSubstitutionFlags);\n    plan.addStage(['pref']);\n    plan.addStage(recordPref); // Orthographic unit shaping group\n\n    plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']);\n    plan.addStage(reorder); // Topographical features\n    // Scripts that need this are handled by the Arabic shaper, not implemented here for now.\n    // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false);\n    // Standard topographic presentation and positional feature application\n\n    plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']);\n  };\n  UniversalShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n    var _loop = function _loop(i) {\n      var codepoint = glyphs[i].codePoints[0];\n      if (decompositions$2[codepoint]) {\n        var decomposed = decompositions$2[codepoint].map(function (c) {\n          var g = plan.font.glyphForCodePoint(c);\n          return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n        });\n        glyphs.splice.apply(glyphs, [i, 1].concat(decomposed));\n      }\n    };\n\n    // Decompose split vowels\n    // TODO: do this in a more general unicode normalizer\n    for (var i = glyphs.length - 1; i >= 0; i--) {\n      _loop(i);\n    }\n  };\n  return UniversalShaper;\n}(DefaultShaper);\n_defineProperty(UniversalShaper, \"zeroMarkWidths\", 'BEFORE_GPOS');\nfunction useCategory(glyph) {\n  return trie$2.get(glyph.codePoints[0]);\n}\nvar USEInfo = function USEInfo(category, syllableType, syllable) {\n  this.category = category;\n  this.syllableType = syllableType;\n  this.syllable = syllable;\n};\nfunction setupSyllables$1(font, glyphs) {\n  var syllable = 0;\n  for (var _iterator55 = _createForOfIteratorHelperLoose(stateMachine$1.match(glyphs.map(useCategory))), _step55; !(_step55 = _iterator55()).done;) {\n    var _step55$value = _step55.value,\n      start = _step55$value[0],\n      end = _step55$value[1],\n      tags = _step55$value[2];\n    ++syllable; // Create shaper info\n\n    for (var i = start; i <= end; i++) {\n      glyphs[i].shaperInfo = new USEInfo(categories$1[useCategory(glyphs[i])], tags[0], syllable);\n    } // Assign rphf feature\n\n    var limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start);\n    for (var _i = start; _i < start + limit; _i++) {\n      glyphs[_i].features.rphf = true;\n    }\n  }\n}\nfunction clearSubstitutionFlags(font, glyphs) {\n  for (var _iterator56 = _createForOfIteratorHelperLoose(glyphs), _step56; !(_step56 = _iterator56()).done;) {\n    var glyph = _step56.value;\n    glyph.substituted = false;\n  }\n}\nfunction recordRphf(font, glyphs) {\n  for (var _iterator57 = _createForOfIteratorHelperLoose(glyphs), _step57; !(_step57 = _iterator57()).done;) {\n    var glyph = _step57.value;\n    if (glyph.substituted && glyph.features.rphf) {\n      // Mark a substituted repha.\n      glyph.shaperInfo.category = 'R';\n    }\n  }\n}\nfunction recordPref(font, glyphs) {\n  for (var _iterator58 = _createForOfIteratorHelperLoose(glyphs), _step58; !(_step58 = _iterator58()).done;) {\n    var glyph = _step58.value;\n    if (glyph.substituted) {\n      // Mark a substituted pref as VPre, as they behave the same way.\n      glyph.shaperInfo.category = 'VPre';\n    }\n  }\n}\nfunction reorder(font, glyphs) {\n  var dottedCircle = font.glyphForCodePoint(0x25cc).id;\n  for (var start = 0, end = nextSyllable$1(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable$1(glyphs, start)) {\n    var i = void 0,\n      j = void 0;\n    var info = glyphs[start].shaperInfo;\n    var type = info.syllableType; // Only a few syllable types need reordering.\n\n    if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') {\n      continue;\n    } // Insert a dotted circle glyph in broken clusters.\n\n    if (type === 'broken_cluster' && dottedCircle) {\n      var g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n      g.shaperInfo = info; // Insert after possible Repha.\n\n      for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++) {}\n      glyphs.splice(++i, 0, g);\n      end++;\n    } // Move things forward.\n\n    if (info.category === 'R' && end - start > 1) {\n      // Got a repha. Reorder it to after first base, before first halant.\n      for (i = start + 1; i < end; i++) {\n        info = glyphs[i].shaperInfo;\n        if (isBase(info) || isHalant(glyphs[i])) {\n          // If we hit a halant, move before it; otherwise it's a base: move to it's\n          // place, and shift things in between backward.\n          if (isHalant(glyphs[i])) {\n            i--;\n          }\n          glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, i - start), [glyphs[i]]));\n          break;\n        }\n      }\n    } // Move things back.\n\n    for (i = start, j = end; i < end; i++) {\n      info = glyphs[i].shaperInfo;\n      if (isBase(info) || isHalant(glyphs[i])) {\n        // If we hit a halant, move after it; otherwise it's a base: move to it's\n        // place, and shift things in between backward.\n        j = isHalant(glyphs[i]) ? i + 1 : i;\n      } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) {\n        glyphs.splice.apply(glyphs, [j, 1, glyphs[i]].concat(glyphs.splice(j, i - j)));\n      }\n    }\n  }\n}\nfunction nextSyllable$1(glyphs, start) {\n  if (start >= glyphs.length) return start;\n  var syllable = glyphs[start].shaperInfo.syllable;\n  while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {}\n  return start;\n}\nfunction isHalant(glyph) {\n  return glyph.shaperInfo.category === 'H' && !glyph.isLigated;\n}\nfunction isBase(info) {\n  return info.category === 'B' || info.category === 'GB';\n}\nvar SHAPERS = {\n  arab: ArabicShaper,\n  // Arabic\n  mong: ArabicShaper,\n  // Mongolian\n  syrc: ArabicShaper,\n  // Syriac\n  'nko ': ArabicShaper,\n  // N'Ko\n  phag: ArabicShaper,\n  // Phags Pa\n  mand: ArabicShaper,\n  // Mandaic\n  mani: ArabicShaper,\n  // Manichaean\n  phlp: ArabicShaper,\n  // Psalter Pahlavi\n  hang: HangulShaper,\n  // Hangul\n  bng2: IndicShaper,\n  // Bengali\n  beng: IndicShaper,\n  // Bengali\n  dev2: IndicShaper,\n  // Devanagari\n  deva: IndicShaper,\n  // Devanagari\n  gjr2: IndicShaper,\n  // Gujarati\n  gujr: IndicShaper,\n  // Gujarati\n  guru: IndicShaper,\n  // Gurmukhi\n  gur2: IndicShaper,\n  // Gurmukhi\n  knda: IndicShaper,\n  // Kannada\n  knd2: IndicShaper,\n  // Kannada\n  mlm2: IndicShaper,\n  // Malayalam\n  mlym: IndicShaper,\n  // Malayalam\n  ory2: IndicShaper,\n  // Oriya\n  orya: IndicShaper,\n  // Oriya\n  taml: IndicShaper,\n  // Tamil\n  tml2: IndicShaper,\n  // Tamil\n  telu: IndicShaper,\n  // Telugu\n  tel2: IndicShaper,\n  // Telugu\n  khmr: IndicShaper,\n  // Khmer\n  bali: UniversalShaper,\n  // Balinese\n  batk: UniversalShaper,\n  // Batak\n  brah: UniversalShaper,\n  // Brahmi\n  bugi: UniversalShaper,\n  // Buginese\n  buhd: UniversalShaper,\n  // Buhid\n  cakm: UniversalShaper,\n  // Chakma\n  cham: UniversalShaper,\n  // Cham\n  dupl: UniversalShaper,\n  // Duployan\n  egyp: UniversalShaper,\n  // Egyptian Hieroglyphs\n  gran: UniversalShaper,\n  // Grantha\n  hano: UniversalShaper,\n  // Hanunoo\n  java: UniversalShaper,\n  // Javanese\n  kthi: UniversalShaper,\n  // Kaithi\n  kali: UniversalShaper,\n  // Kayah Li\n  khar: UniversalShaper,\n  // Kharoshthi\n  khoj: UniversalShaper,\n  // Khojki\n  sind: UniversalShaper,\n  // Khudawadi\n  lepc: UniversalShaper,\n  // Lepcha\n  limb: UniversalShaper,\n  // Limbu\n  mahj: UniversalShaper,\n  // Mahajani\n  // mand: UniversalShaper, // Mandaic\n  // mani: UniversalShaper, // Manichaean\n  mtei: UniversalShaper,\n  // Meitei Mayek\n  modi: UniversalShaper,\n  // Modi\n  // mong: UniversalShaper, // Mongolian\n  // 'nko ': UniversalShaper, // N’Ko\n  hmng: UniversalShaper,\n  // Pahawh Hmong\n  // phag: UniversalShaper, // Phags-pa\n  // phlp: UniversalShaper, // Psalter Pahlavi\n  rjng: UniversalShaper,\n  // Rejang\n  saur: UniversalShaper,\n  // Saurashtra\n  shrd: UniversalShaper,\n  // Sharada\n  sidd: UniversalShaper,\n  // Siddham\n  sinh: UniversalShaper,\n  // Sinhala\n  sund: UniversalShaper,\n  // Sundanese\n  sylo: UniversalShaper,\n  // Syloti Nagri\n  tglg: UniversalShaper,\n  // Tagalog\n  tagb: UniversalShaper,\n  // Tagbanwa\n  tale: UniversalShaper,\n  // Tai Le\n  lana: UniversalShaper,\n  // Tai Tham\n  tavt: UniversalShaper,\n  // Tai Viet\n  takr: UniversalShaper,\n  // Takri\n  tibt: UniversalShaper,\n  // Tibetan\n  tfng: UniversalShaper,\n  // Tifinagh\n  tirh: UniversalShaper,\n  // Tirhuta\n  latn: DefaultShaper,\n  // Latin\n  DFLT: DefaultShaper // Default\n};\n\nfunction choose(script) {\n  if (!Array.isArray(script)) {\n    script = [script];\n  }\n  for (var _iterator59 = _createForOfIteratorHelperLoose(script), _step59; !(_step59 = _iterator59()).done;) {\n    var s = _step59.value;\n    var shaper = SHAPERS[s];\n    if (shaper) {\n      return shaper;\n    }\n  }\n  return DefaultShaper;\n}\nvar GSUBProcessor = /*#__PURE__*/function (_OTProcessor) {\n  _inheritsLoose(GSUBProcessor, _OTProcessor);\n  function GSUBProcessor() {\n    return _OTProcessor.apply(this, arguments) || this;\n  }\n  var _proto27 = GSUBProcessor.prototype;\n  _proto27.applyLookup = function applyLookup(lookupType, table) {\n    var _this7 = this;\n    switch (lookupType) {\n      case 1:\n        {\n          // Single Substitution\n          var index = this.coverageIndex(table.coverage);\n          if (index === -1) {\n            return false;\n          }\n          var glyph = this.glyphIterator.cur;\n          switch (table.version) {\n            case 1:\n              glyph.id = glyph.id + table.deltaGlyphID & 0xffff;\n              break;\n            case 2:\n              glyph.id = table.substitute.get(index);\n              break;\n          }\n          return true;\n        }\n      case 2:\n        {\n          // Multiple Substitution\n          var _index = this.coverageIndex(table.coverage);\n          if (_index !== -1) {\n            var _this$glyphs2;\n            var sequence = table.sequences.get(_index);\n            if (sequence.length === 0) {\n              // If the sequence length is zero, delete the glyph.\n              // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it.\n              this.glyphs.splice(this.glyphIterator.index, 1);\n              return true;\n            }\n            this.glyphIterator.cur.id = sequence[0];\n            this.glyphIterator.cur.ligatureComponent = 0;\n            var features = this.glyphIterator.cur.features;\n            var curGlyph = this.glyphIterator.cur;\n            var replacement = sequence.slice(1).map(function (gid, i) {\n              var glyph = new GlyphInfo(_this7.font, gid, undefined, features);\n              glyph.shaperInfo = curGlyph.shaperInfo;\n              glyph.isLigated = curGlyph.isLigated;\n              glyph.ligatureComponent = i + 1;\n              glyph.substituted = true;\n              glyph.isMultiplied = true;\n              return glyph;\n            });\n            (_this$glyphs2 = this.glyphs).splice.apply(_this$glyphs2, [this.glyphIterator.index + 1, 0].concat(replacement));\n            return true;\n          }\n          return false;\n        }\n      case 3:\n        {\n          // Alternate Substitution\n          var _index2 = this.coverageIndex(table.coverage);\n          if (_index2 !== -1) {\n            var USER_INDEX = 0; // TODO\n\n            this.glyphIterator.cur.id = table.alternateSet.get(_index2)[USER_INDEX];\n            return true;\n          }\n          return false;\n        }\n      case 4:\n        {\n          // Ligature Substitution\n          var _index3 = this.coverageIndex(table.coverage);\n          if (_index3 === -1) {\n            return false;\n          }\n          for (var _iterator60 = _createForOfIteratorHelperLoose(table.ligatureSets.get(_index3)), _step60; !(_step60 = _iterator60()).done;) {\n            var ligature = _step60.value;\n            var matched = this.sequenceMatchIndices(1, ligature.components);\n            if (!matched) {\n              continue;\n            }\n            var _curGlyph = this.glyphIterator.cur; // Concatenate all of the characters the new ligature will represent\n\n            var characters = _curGlyph.codePoints.slice();\n            for (var _iterator61 = _createForOfIteratorHelperLoose(matched), _step61; !(_step61 = _iterator61()).done;) {\n              var _characters;\n              var _index4 = _step61.value;\n              (_characters = characters).push.apply(_characters, this.glyphs[_index4].codePoints);\n            } // Create the replacement ligature glyph\n\n            var ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, _curGlyph.features);\n            ligatureGlyph.shaperInfo = _curGlyph.shaperInfo;\n            ligatureGlyph.isLigated = true;\n            ligatureGlyph.substituted = true; // From Harfbuzz:\n            // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave\n            //   the ligature to keep its old ligature id.  This will allow it to attach to\n            //   a base ligature in GPOS.  Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,\n            //   and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a\n            //   ligature id and component value of 2.  Then if SHADDA,FATHA form a ligature\n            //   later, we don't want them to lose their ligature id/component, otherwise\n            //   GPOS will fail to correctly position the mark ligature on top of the\n            //   LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343\n            //\n            // - If a ligature is formed of components that some of which are also ligatures\n            //   themselves, and those ligature components had marks attached to *their*\n            //   components, we have to attach the marks to the new ligature component\n            //   positions!  Now *that*'s tricky!  And these marks may be following the\n            //   last component of the whole sequence, so we should loop forward looking\n            //   for them and update them.\n            //\n            //   Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a\n            //   'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature\n            //   id and component == 1.  Now, during 'liga', the LAM and the LAM-HEH ligature\n            //   form a LAM-LAM-HEH ligature.  We need to reassign the SHADDA and FATHA to\n            //   the new ligature with a component value of 2.\n            //\n            //   This in fact happened to a font...  See https://bugzilla.gnome.org/show_bug.cgi?id=437633\n\n            var isMarkLigature = _curGlyph.isMark;\n            for (var i = 0; i < matched.length && isMarkLigature; i++) {\n              isMarkLigature = this.glyphs[matched[i]].isMark;\n            }\n            ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++;\n            var lastLigID = _curGlyph.ligatureID;\n            var lastNumComps = _curGlyph.codePoints.length;\n            var curComps = lastNumComps;\n            var idx = this.glyphIterator.index + 1; // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence.\n            // This allows GPOS to attach marks to the correct ligature components.\n\n            for (var _iterator62 = _createForOfIteratorHelperLoose(matched), _step62; !(_step62 = _iterator62()).done;) {\n              var matchIndex = _step62.value;\n              // Don't assign new ligature components for mark ligatures (see above)\n              if (isMarkLigature) {\n                idx = matchIndex;\n              } else {\n                while (idx < matchIndex) {\n                  var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps);\n                  this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID;\n                  this.glyphs[idx].ligatureComponent = ligatureComponent;\n                  idx++;\n                }\n              }\n              lastLigID = this.glyphs[idx].ligatureID;\n              lastNumComps = this.glyphs[idx].codePoints.length;\n              curComps += lastNumComps;\n              idx++; // skip base glyph\n            } // Adjust ligature components for any marks following\n\n            if (lastLigID && !isMarkLigature) {\n              for (var _i = idx; _i < this.glyphs.length; _i++) {\n                if (this.glyphs[_i].ligatureID === lastLigID) {\n                  var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[_i].ligatureComponent || 1, lastNumComps);\n                  this.glyphs[_i].ligatureComponent = ligatureComponent;\n                } else {\n                  break;\n                }\n              }\n            } // Delete the matched glyphs, and replace the current glyph with the ligature glyph\n\n            for (var _i2 = matched.length - 1; _i2 >= 0; _i2--) {\n              this.glyphs.splice(matched[_i2], 1);\n            }\n            this.glyphs[this.glyphIterator.index] = ligatureGlyph;\n            return true;\n          }\n          return false;\n        }\n      case 5:\n        // Contextual Substitution\n        return this.applyContext(table);\n      case 6:\n        // Chaining Contextual Substitution\n        return this.applyChainingContext(table);\n      case 7:\n        // Extension Substitution\n        return this.applyLookup(table.lookupType, table.extension);\n      default:\n        throw new Error(\"GSUB lookupType \".concat(lookupType, \" is not supported\"));\n    }\n  };\n  return GSUBProcessor;\n}(OTProcessor);\nvar GPOSProcessor = /*#__PURE__*/function (_OTProcessor2) {\n  _inheritsLoose(GPOSProcessor, _OTProcessor2);\n  function GPOSProcessor() {\n    return _OTProcessor2.apply(this, arguments) || this;\n  }\n  var _proto28 = GPOSProcessor.prototype;\n  _proto28.applyPositionValue = function applyPositionValue(sequenceIndex, value) {\n    var position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)];\n    if (value.xAdvance != null) {\n      position.xAdvance += value.xAdvance;\n    }\n    if (value.yAdvance != null) {\n      position.yAdvance += value.yAdvance;\n    }\n    if (value.xPlacement != null) {\n      position.xOffset += value.xPlacement;\n    }\n    if (value.yPlacement != null) {\n      position.yOffset += value.yPlacement;\n    } // Adjustments for font variations\n\n    var variationProcessor = this.font._variationProcessor;\n    var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n    if (variationProcessor && variationStore) {\n      if (value.xPlaDevice) {\n        position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b);\n      }\n      if (value.yPlaDevice) {\n        position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b);\n      }\n      if (value.xAdvDevice) {\n        position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b);\n      }\n      if (value.yAdvDevice) {\n        position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b);\n      }\n    } // TODO: device tables\n  };\n  _proto28.applyLookup = function applyLookup(lookupType, table) {\n    switch (lookupType) {\n      case 1:\n        {\n          // Single positioning value\n          var index = this.coverageIndex(table.coverage);\n          if (index === -1) {\n            return false;\n          }\n          switch (table.version) {\n            case 1:\n              this.applyPositionValue(0, table.value);\n              break;\n            case 2:\n              this.applyPositionValue(0, table.values.get(index));\n              break;\n          }\n          return true;\n        }\n      case 2:\n        {\n          // Pair Adjustment Positioning\n          var nextGlyph = this.glyphIterator.peek();\n          if (!nextGlyph) {\n            return false;\n          }\n          var _index = this.coverageIndex(table.coverage);\n          if (_index === -1) {\n            return false;\n          }\n          switch (table.version) {\n            case 1:\n              // Adjustments for glyph pairs\n              var set = table.pairSets.get(_index);\n              for (var _iterator63 = _createForOfIteratorHelperLoose(set), _step63; !(_step63 = _iterator63()).done;) {\n                var _pair = _step63.value;\n                if (_pair.secondGlyph === nextGlyph.id) {\n                  this.applyPositionValue(0, _pair.value1);\n                  this.applyPositionValue(1, _pair.value2);\n                  return true;\n                }\n              }\n              return false;\n            case 2:\n              // Class pair adjustment\n              var class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1);\n              var class2 = this.getClassID(nextGlyph.id, table.classDef2);\n              if (class1 === -1 || class2 === -1) {\n                return false;\n              }\n              var pair = table.classRecords.get(class1).get(class2);\n              this.applyPositionValue(0, pair.value1);\n              this.applyPositionValue(1, pair.value2);\n              return true;\n          }\n        }\n      case 3:\n        {\n          // Cursive Attachment Positioning\n          var nextIndex = this.glyphIterator.peekIndex();\n          var _nextGlyph = this.glyphs[nextIndex];\n          if (!_nextGlyph) {\n            return false;\n          }\n          var curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)];\n          if (!curRecord || !curRecord.exitAnchor) {\n            return false;\n          }\n          var nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, _nextGlyph.id)];\n          if (!nextRecord || !nextRecord.entryAnchor) {\n            return false;\n          }\n          var entry = this.getAnchor(nextRecord.entryAnchor);\n          var exit = this.getAnchor(curRecord.exitAnchor);\n          var cur = this.positions[this.glyphIterator.index];\n          var next = this.positions[nextIndex];\n          switch (this.direction) {\n            case 'ltr':\n              cur.xAdvance = exit.x + cur.xOffset;\n              var d = entry.x + next.xOffset;\n              next.xAdvance -= d;\n              next.xOffset -= d;\n              break;\n            case 'rtl':\n              d = exit.x + cur.xOffset;\n              cur.xAdvance -= d;\n              cur.xOffset -= d;\n              next.xAdvance = entry.x + next.xOffset;\n              break;\n          }\n          if (this.glyphIterator.flags.rightToLeft) {\n            this.glyphIterator.cur.cursiveAttachment = nextIndex;\n            cur.yOffset = entry.y - exit.y;\n          } else {\n            _nextGlyph.cursiveAttachment = this.glyphIterator.index;\n            cur.yOffset = exit.y - entry.y;\n          }\n          return true;\n        }\n      case 4:\n        {\n          // Mark to base positioning\n          var markIndex = this.coverageIndex(table.markCoverage);\n          if (markIndex === -1) {\n            return false;\n          } // search backward for a base glyph\n\n          var baseGlyphIndex = this.glyphIterator.index;\n          while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0)) {}\n          if (baseGlyphIndex < 0) {\n            return false;\n          }\n          var baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id);\n          if (baseIndex === -1) {\n            return false;\n          }\n          var markRecord = table.markArray[markIndex];\n          var baseAnchor = table.baseArray[baseIndex][markRecord.class];\n          this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n          return true;\n        }\n      case 5:\n        {\n          // Mark to ligature positioning\n          var _markIndex = this.coverageIndex(table.markCoverage);\n          if (_markIndex === -1) {\n            return false;\n          } // search backward for a base glyph\n\n          var _baseGlyphIndex = this.glyphIterator.index;\n          while (--_baseGlyphIndex >= 0 && this.glyphs[_baseGlyphIndex].isMark) {}\n          if (_baseGlyphIndex < 0) {\n            return false;\n          }\n          var ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[_baseGlyphIndex].id);\n          if (ligIndex === -1) {\n            return false;\n          }\n          var ligAttach = table.ligatureArray[ligIndex];\n          var markGlyph = this.glyphIterator.cur;\n          var ligGlyph = this.glyphs[_baseGlyphIndex];\n          var compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && markGlyph.ligatureComponent > 0 ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 : ligGlyph.codePoints.length - 1;\n          var _markRecord = table.markArray[_markIndex];\n          var _baseAnchor = ligAttach[compIndex][_markRecord.class];\n          this.applyAnchor(_markRecord, _baseAnchor, _baseGlyphIndex);\n          return true;\n        }\n      case 6:\n        {\n          // Mark to mark positioning\n          var mark1Index = this.coverageIndex(table.mark1Coverage);\n          if (mark1Index === -1) {\n            return false;\n          } // get the previous mark to attach to\n\n          var prevIndex = this.glyphIterator.peekIndex(-1);\n          var prev = this.glyphs[prevIndex];\n          if (!prev || !prev.isMark) {\n            return false;\n          }\n          var _cur = this.glyphIterator.cur; // The following logic was borrowed from Harfbuzz\n\n          var good = false;\n          if (_cur.ligatureID === prev.ligatureID) {\n            if (!_cur.ligatureID) {\n              // Marks belonging to the same base\n              good = true;\n            } else if (_cur.ligatureComponent === prev.ligatureComponent) {\n              // Marks belonging to the same ligature component\n              good = true;\n            }\n          } else {\n            // If ligature ids don't match, it may be the case that one of the marks\n            // itself is a ligature, in which case match.\n            if (_cur.ligatureID && !_cur.ligatureComponent || prev.ligatureID && !prev.ligatureComponent) {\n              good = true;\n            }\n          }\n          if (!good) {\n            return false;\n          }\n          var mark2Index = this.coverageIndex(table.mark2Coverage, prev.id);\n          if (mark2Index === -1) {\n            return false;\n          }\n          var _markRecord2 = table.mark1Array[mark1Index];\n          var _baseAnchor2 = table.mark2Array[mark2Index][_markRecord2.class];\n          this.applyAnchor(_markRecord2, _baseAnchor2, prevIndex);\n          return true;\n        }\n      case 7:\n        // Contextual positioning\n        return this.applyContext(table);\n      case 8:\n        // Chaining contextual positioning\n        return this.applyChainingContext(table);\n      case 9:\n        // Extension positioning\n        return this.applyLookup(table.lookupType, table.extension);\n      default:\n        throw new Error(\"Unsupported GPOS table: \".concat(lookupType));\n    }\n  };\n  _proto28.applyAnchor = function applyAnchor(markRecord, baseAnchor, baseGlyphIndex) {\n    var baseCoords = this.getAnchor(baseAnchor);\n    var markCoords = this.getAnchor(markRecord.markAnchor);\n    var basePos = this.positions[baseGlyphIndex];\n    var markPos = this.positions[this.glyphIterator.index];\n    markPos.xOffset = baseCoords.x - markCoords.x;\n    markPos.yOffset = baseCoords.y - markCoords.y;\n    this.glyphIterator.cur.markAttachment = baseGlyphIndex;\n  };\n  _proto28.getAnchor = function getAnchor(anchor) {\n    // TODO: contour point, device tables\n    var x = anchor.xCoordinate;\n    var y = anchor.yCoordinate; // Adjustments for font variations\n\n    var variationProcessor = this.font._variationProcessor;\n    var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n    if (variationProcessor && variationStore) {\n      if (anchor.xDeviceTable) {\n        x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b);\n      }\n      if (anchor.yDeviceTable) {\n        y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b);\n      }\n    }\n    return {\n      x: x,\n      y: y\n    };\n  };\n  _proto28.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) {\n    _OTProcessor2.prototype.applyFeatures.call(this, userFeatures, glyphs, advances);\n    for (var i = 0; i < this.glyphs.length; i++) {\n      this.fixCursiveAttachment(i);\n    }\n    this.fixMarkAttachment();\n  };\n  _proto28.fixCursiveAttachment = function fixCursiveAttachment(i) {\n    var glyph = this.glyphs[i];\n    if (glyph.cursiveAttachment != null) {\n      var j = glyph.cursiveAttachment;\n      glyph.cursiveAttachment = null;\n      this.fixCursiveAttachment(j);\n      this.positions[i].yOffset += this.positions[j].yOffset;\n    }\n  };\n  _proto28.fixMarkAttachment = function fixMarkAttachment() {\n    for (var i = 0; i < this.glyphs.length; i++) {\n      var glyph = this.glyphs[i];\n      if (glyph.markAttachment != null) {\n        var j = glyph.markAttachment;\n        this.positions[i].xOffset += this.positions[j].xOffset;\n        this.positions[i].yOffset += this.positions[j].yOffset;\n        if (this.direction === 'ltr') {\n          for (var k = j; k < i; k++) {\n            this.positions[i].xOffset -= this.positions[k].xAdvance;\n            this.positions[i].yOffset -= this.positions[k].yAdvance;\n          }\n        } else {\n          for (var _k = j + 1; _k < i + 1; _k++) {\n            this.positions[i].xOffset += this.positions[_k].xAdvance;\n            this.positions[i].yOffset += this.positions[_k].yAdvance;\n          }\n        }\n      }\n    }\n  };\n  return GPOSProcessor;\n}(OTProcessor);\nvar OTLayoutEngine = /*#__PURE__*/function () {\n  function OTLayoutEngine(font) {\n    this.font = font;\n    this.glyphInfos = null;\n    this.plan = null;\n    this.GSUBProcessor = null;\n    this.GPOSProcessor = null;\n    this.fallbackPosition = true;\n    if (font.GSUB) {\n      this.GSUBProcessor = new GSUBProcessor(font, font.GSUB);\n    }\n    if (font.GPOS) {\n      this.GPOSProcessor = new GPOSProcessor(font, font.GPOS);\n    }\n  }\n  var _proto29 = OTLayoutEngine.prototype;\n  _proto29.setup = function setup(glyphRun) {\n    var _this8 = this;\n    // Map glyphs to GlyphInfo objects so data can be passed between\n    // GSUB and GPOS without mutating the real (shared) Glyph objects.\n    this.glyphInfos = glyphRun.glyphs.map(function (glyph) {\n      return new GlyphInfo(_this8.font, glyph.id, [].concat(glyph.codePoints));\n    }); // Select a script based on what is available in GSUB/GPOS.\n\n    var script = null;\n    if (this.GPOSProcessor) {\n      script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n    }\n    if (this.GSUBProcessor) {\n      script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n    } // Choose a shaper based on the script, and setup a shaping plan.\n    // This determines which features to apply to which glyphs.\n\n    this.shaper = choose(script);\n    this.plan = new ShapingPlan(this.font, script, glyphRun.direction);\n    this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features); // Assign chosen features to output glyph run\n\n    for (var key in this.plan.allFeatures) {\n      glyphRun.features[key] = true;\n    }\n  };\n  _proto29.substitute = function substitute(glyphRun) {\n    var _this9 = this;\n    if (this.GSUBProcessor) {\n      this.plan.process(this.GSUBProcessor, this.glyphInfos); // Map glyph infos back to normal Glyph objects\n\n      glyphRun.glyphs = this.glyphInfos.map(function (glyphInfo) {\n        return _this9.font.getGlyph(glyphInfo.id, glyphInfo.codePoints);\n      });\n    }\n  };\n  _proto29.position = function position(glyphRun) {\n    if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') {\n      this.zeroMarkAdvances(glyphRun.positions);\n    }\n    if (this.GPOSProcessor) {\n      this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions);\n    }\n    if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') {\n      this.zeroMarkAdvances(glyphRun.positions);\n    } // Reverse the glyphs and positions if the script is right-to-left\n\n    if (glyphRun.direction === 'rtl') {\n      glyphRun.glyphs.reverse();\n      glyphRun.positions.reverse();\n    }\n    return this.GPOSProcessor && this.GPOSProcessor.features;\n  };\n  _proto29.zeroMarkAdvances = function zeroMarkAdvances(positions) {\n    for (var i = 0; i < this.glyphInfos.length; i++) {\n      if (this.glyphInfos[i].isMark) {\n        positions[i].xAdvance = 0;\n        positions[i].yAdvance = 0;\n      }\n    }\n  };\n  _proto29.cleanup = function cleanup() {\n    this.glyphInfos = null;\n    this.plan = null;\n    this.shaper = null;\n  };\n  _proto29.getAvailableFeatures = function getAvailableFeatures(script, language) {\n    var features = [];\n    if (this.GSUBProcessor) {\n      this.GSUBProcessor.selectScript(script, language);\n      features.push.apply(features, Object.keys(this.GSUBProcessor.features));\n    }\n    if (this.GPOSProcessor) {\n      this.GPOSProcessor.selectScript(script, language);\n      features.push.apply(features, Object.keys(this.GPOSProcessor.features));\n    }\n    return features;\n  };\n  return OTLayoutEngine;\n}();\nvar LayoutEngine = /*#__PURE__*/function () {\n  function LayoutEngine(font) {\n    this.font = font;\n    this.unicodeLayoutEngine = null;\n    this.kernProcessor = null; // Choose an advanced layout engine. We try the AAT morx table first since more\n    // scripts are currently supported because the shaping logic is built into the font.\n\n    if (this.font.morx) {\n      this.engine = new AATLayoutEngine(this.font);\n    } else if (this.font.GSUB || this.font.GPOS) {\n      this.engine = new OTLayoutEngine(this.font);\n    }\n  }\n  var _proto30 = LayoutEngine.prototype;\n  _proto30.layout = function layout(string, features, script, language, direction) {\n    // Make the features parameter optional\n    if (typeof features === 'string') {\n      direction = language;\n      language = script;\n      script = features;\n      features = [];\n    } // Map string to glyphs if needed\n\n    if (typeof string === 'string') {\n      // Attempt to detect the script from the string if not provided.\n      if (script == null) {\n        script = forString(string);\n      }\n      var glyphs = this.font.glyphsForString(string);\n    } else {\n      // Attempt to detect the script from the glyph code points if not provided.\n      if (script == null) {\n        var codePoints = [];\n        for (var _iterator64 = _createForOfIteratorHelperLoose(string), _step64; !(_step64 = _iterator64()).done;) {\n          var glyph = _step64.value;\n          codePoints.push.apply(codePoints, glyph.codePoints);\n        }\n        script = forCodePoints(codePoints);\n      }\n      var glyphs = string;\n    }\n    var glyphRun = new GlyphRun(glyphs, features, script, language, direction); // Return early if there are no glyphs\n\n    if (glyphs.length === 0) {\n      glyphRun.positions = [];\n      return glyphRun;\n    } // Setup the advanced layout engine\n\n    if (this.engine && this.engine.setup) {\n      this.engine.setup(glyphRun);\n    } // Substitute and position the glyphs\n\n    this.substitute(glyphRun);\n    this.position(glyphRun);\n    this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions); // Let the layout engine clean up any state it might have\n\n    if (this.engine && this.engine.cleanup) {\n      this.engine.cleanup();\n    }\n    return glyphRun;\n  };\n  _proto30.substitute = function substitute(glyphRun) {\n    // Call the advanced layout engine to make substitutions\n    if (this.engine && this.engine.substitute) {\n      this.engine.substitute(glyphRun);\n    }\n  };\n  _proto30.position = function position(glyphRun) {\n    // Get initial glyph positions\n    glyphRun.positions = glyphRun.glyphs.map(function (glyph) {\n      return new GlyphPosition(glyph.advanceWidth);\n    });\n    var positioned = null; // Call the advanced layout engine. Returns the features applied.\n\n    if (this.engine && this.engine.position) {\n      positioned = this.engine.position(glyphRun);\n    } // if there is no GPOS table, use unicode properties to position marks.\n\n    if (!positioned && (!this.engine || this.engine.fallbackPosition)) {\n      if (!this.unicodeLayoutEngine) {\n        this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font);\n      }\n      this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions);\n    } // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table\n\n    if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) {\n      if (!this.kernProcessor) {\n        this.kernProcessor = new KernProcessor(this.font);\n      }\n      this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions);\n      glyphRun.features.kern = true;\n    }\n  };\n  _proto30.hideDefaultIgnorables = function hideDefaultIgnorables(glyphs, positions) {\n    var space = this.font.glyphForCodePoint(0x20);\n    for (var i = 0; i < glyphs.length; i++) {\n      if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) {\n        glyphs[i] = space;\n        positions[i].xAdvance = 0;\n        positions[i].yAdvance = 0;\n      }\n    }\n  };\n  _proto30.isDefaultIgnorable = function isDefaultIgnorable(ch) {\n    // From DerivedCoreProperties.txt in the Unicode database,\n    // minus U+115F, U+1160, U+3164 and U+FFA0, which is what\n    // Harfbuzz and Uniscribe do.\n    var plane = ch >> 16;\n    if (plane === 0) {\n      // BMP\n      switch (ch >> 8) {\n        case 0x00:\n          return ch === 0x00AD;\n        case 0x03:\n          return ch === 0x034F;\n        case 0x06:\n          return ch === 0x061C;\n        case 0x17:\n          return 0x17B4 <= ch && ch <= 0x17B5;\n        case 0x18:\n          return 0x180B <= ch && ch <= 0x180E;\n        case 0x20:\n          return 0x200B <= ch && ch <= 0x200F || 0x202A <= ch && ch <= 0x202E || 0x2060 <= ch && ch <= 0x206F;\n        case 0xFE:\n          return 0xFE00 <= ch && ch <= 0xFE0F || ch === 0xFEFF;\n        case 0xFF:\n          return 0xFFF0 <= ch && ch <= 0xFFF8;\n        default:\n          return false;\n      }\n    } else {\n      // Other planes\n      switch (plane) {\n        case 0x01:\n          return 0x1BCA0 <= ch && ch <= 0x1BCA3 || 0x1D173 <= ch && ch <= 0x1D17A;\n        case 0x0E:\n          return 0xE0000 <= ch && ch <= 0xE0FFF;\n        default:\n          return false;\n      }\n    }\n  };\n  _proto30.getAvailableFeatures = function getAvailableFeatures(script, language) {\n    var features = [];\n    if (this.engine) {\n      features.push.apply(features, this.engine.getAvailableFeatures(script, language));\n    }\n    if (this.font.kern && features.indexOf('kern') === -1) {\n      features.push('kern');\n    }\n    return features;\n  };\n  _proto30.stringsForGlyph = function stringsForGlyph(gid) {\n    var result = new Set();\n    var codePoints = this.font._cmapProcessor.codePointsForGlyph(gid);\n    for (var _iterator65 = _createForOfIteratorHelperLoose(codePoints), _step65; !(_step65 = _iterator65()).done;) {\n      var codePoint = _step65.value;\n      result.add(String.fromCodePoint(codePoint));\n    }\n    if (this.engine && this.engine.stringsForGlyph) {\n      for (var _iterator66 = _createForOfIteratorHelperLoose(this.engine.stringsForGlyph(gid)), _step66; !(_step66 = _iterator66()).done;) {\n        var string = _step66.value;\n        result.add(string);\n      }\n    }\n    return Array.from(result);\n  };\n  return LayoutEngine;\n}();\nvar SVG_COMMANDS = {\n  moveTo: 'M',\n  lineTo: 'L',\n  quadraticCurveTo: 'Q',\n  bezierCurveTo: 'C',\n  closePath: 'Z'\n};\n/**\n * Path objects are returned by glyphs and represent the actual\n * vector outlines for each glyph in the font. Paths can be converted\n * to SVG path data strings, or to functions that can be applied to\n * render the path to a graphics context.\n */\nvar Path = /*#__PURE__*/function () {\n  function Path() {\n    this.commands = [];\n    this._bbox = null;\n    this._cbox = null;\n  }\n  /**\n   * Compiles the path to a JavaScript function that can be applied with\n   * a graphics context in order to render the path.\n   * @return {string}\n   */\n  var _proto31 = Path.prototype;\n  _proto31.toFunction = function toFunction() {\n    var _this10 = this;\n    return function (ctx) {\n      _this10.commands.forEach(function (c) {\n        return ctx[c.command].apply(ctx, c.args);\n      });\n    };\n  }\n  /**\n   * Converts the path to an SVG path data string\n   * @return {string}\n   */;\n  _proto31.toSVG = function toSVG() {\n    var cmds = this.commands.map(function (c) {\n      var args = c.args.map(function (arg) {\n        return Math.round(arg * 100) / 100;\n      });\n      return \"\".concat(SVG_COMMANDS[c.command]).concat(args.join(' '));\n    });\n    return cmds.join('');\n  }\n  /**\n   * Gets the \"control box\" of a path.\n   * This is like the bounding box, but it includes all points including\n   * control points of bezier segments and is much faster to compute than\n   * the real bounding box.\n   * @type {BBox}\n   */;\n  /**\n   * Applies a mapping function to each point in the path.\n   * @param {function} fn\n   * @return {Path}\n   */\n  _proto31.mapPoints = function mapPoints(fn) {\n    var path = new Path();\n    for (var _iterator67 = _createForOfIteratorHelperLoose(this.commands), _step67; !(_step67 = _iterator67()).done;) {\n      var c = _step67.value;\n      var args = [];\n      for (var i = 0; i < c.args.length; i += 2) {\n        var _fn = fn(c.args[i], c.args[i + 1]),\n          x = _fn[0],\n          y = _fn[1];\n        args.push(x, y);\n      }\n      path[c.command].apply(path, args);\n    }\n    return path;\n  }\n  /**\n   * Transforms the path by the given matrix.\n   */;\n  _proto31.transform = function transform(m0, m1, m2, m3, m4, m5) {\n    return this.mapPoints(function (x, y) {\n      x = m0 * x + m2 * y + m4;\n      y = m1 * x + m3 * y + m5;\n      return [x, y];\n    });\n  }\n  /**\n   * Translates the path by the given offset.\n   */;\n  _proto31.translate = function translate(x, y) {\n    return this.transform(1, 0, 0, 1, x, y);\n  }\n  /**\n   * Rotates the path by the given angle (in radians).\n   */;\n  _proto31.rotate = function rotate(angle) {\n    var cos = Math.cos(angle);\n    var sin = Math.sin(angle);\n    return this.transform(cos, sin, -sin, cos, 0, 0);\n  }\n  /**\n   * Scales the path.\n   */;\n  _proto31.scale = function scale(scaleX, scaleY) {\n    if (scaleY === void 0) {\n      scaleY = scaleX;\n    }\n    return this.transform(scaleX, 0, 0, scaleY, 0, 0);\n  };\n  _createClass(Path, [{\n    key: \"cbox\",\n    get: function get() {\n      if (!this._cbox) {\n        var cbox = new BBox();\n        for (var _iterator68 = _createForOfIteratorHelperLoose(this.commands), _step68; !(_step68 = _iterator68()).done;) {\n          var command = _step68.value;\n          for (var i = 0; i < command.args.length; i += 2) {\n            cbox.addPoint(command.args[i], command.args[i + 1]);\n          }\n        }\n        this._cbox = Object.freeze(cbox);\n      }\n      return this._cbox;\n    }\n    /**\n     * Gets the exact bounding box of the path by evaluating curve segments.\n     * Slower to compute than the control box, but more accurate.\n     * @type {BBox}\n     */\n  }, {\n    key: \"bbox\",\n    get: function get() {\n      if (this._bbox) {\n        return this._bbox;\n      }\n      var bbox = new BBox();\n      var cx = 0,\n        cy = 0;\n      var f = function f(t) {\n        return Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i];\n      };\n      for (var _iterator69 = _createForOfIteratorHelperLoose(this.commands), _step69; !(_step69 = _iterator69()).done;) {\n        var c = _step69.value;\n        switch (c.command) {\n          case 'moveTo':\n          case 'lineTo':\n            var _c$args = c.args,\n              x = _c$args[0],\n              y = _c$args[1];\n            bbox.addPoint(x, y);\n            cx = x;\n            cy = y;\n            break;\n          case 'quadraticCurveTo':\n          case 'bezierCurveTo':\n            if (c.command === 'quadraticCurveTo') {\n              // http://fontforge.org/bezier.html\n              var _c$args2 = c.args,\n                qp1x = _c$args2[0],\n                qp1y = _c$args2[1],\n                p3x = _c$args2[2],\n                p3y = _c$args2[3];\n              var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0)\n\n              var cp1y = cy + 2 / 3 * (qp1y - cy);\n              var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2)\n\n              var cp2y = p3y + 2 / 3 * (qp1y - p3y);\n            } else {\n              var _c$args3 = c.args,\n                cp1x = _c$args3[0],\n                cp1y = _c$args3[1],\n                cp2x = _c$args3[2],\n                cp2y = _c$args3[3],\n                p3x = _c$args3[4],\n                p3y = _c$args3[5];\n            } // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n\n            bbox.addPoint(p3x, p3y);\n            var p0 = [cx, cy];\n            var p1 = [cp1x, cp1y];\n            var p2 = [cp2x, cp2y];\n            var p3 = [p3x, p3y];\n            for (var i = 0; i <= 1; i++) {\n              var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n              var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n              c = 3 * p1[i] - 3 * p0[i];\n              if (a === 0) {\n                if (b === 0) {\n                  continue;\n                }\n                var t = -c / b;\n                if (0 < t && t < 1) {\n                  if (i === 0) {\n                    bbox.addPoint(f(t), bbox.maxY);\n                  } else if (i === 1) {\n                    bbox.addPoint(bbox.maxX, f(t));\n                  }\n                }\n                continue;\n              }\n              var b2ac = Math.pow(b, 2) - 4 * c * a;\n              if (b2ac < 0) {\n                continue;\n              }\n              var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n              if (0 < t1 && t1 < 1) {\n                if (i === 0) {\n                  bbox.addPoint(f(t1), bbox.maxY);\n                } else if (i === 1) {\n                  bbox.addPoint(bbox.maxX, f(t1));\n                }\n              }\n              var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n              if (0 < t2 && t2 < 1) {\n                if (i === 0) {\n                  bbox.addPoint(f(t2), bbox.maxY);\n                } else if (i === 1) {\n                  bbox.addPoint(bbox.maxX, f(t2));\n                }\n              }\n            }\n            cx = p3x;\n            cy = p3y;\n            break;\n        }\n      }\n      return this._bbox = Object.freeze(bbox);\n    }\n  }]);\n  return Path;\n}();\nvar _loop = function _loop(command) {\n  Path.prototype[command] = function () {\n    this._bbox = this._cbox = null;\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    this.commands.push({\n      command: command,\n      args: args\n    });\n    return this;\n  };\n};\nfor (var _i23 = 0, _arr = ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath']; _i23 < _arr.length; _i23++) {\n  var command = _arr[_i23];\n  _loop(command);\n}\nvar StandardNames = ['.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth', 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior', 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla', 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'];\nvar _class$3;\n/**\n * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and\n * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context.\n *\n * You do not create glyph objects directly. They are created by various methods on the font object.\n * There are several subclasses of the base Glyph class internally that may be returned depending\n * on the font format, but they all inherit from this class.\n */\n\nvar Glyph = (_class$3 = /*#__PURE__*/function () {\n  function Glyph(id, codePoints, font) {\n    /**\n     * The glyph id in the font\n     * @type {number}\n     */\n    this.id = id;\n    /**\n     * An array of unicode code points that are represented by this glyph.\n     * There can be multiple code points in the case of ligatures and other glyphs\n     * that represent multiple visual characters.\n     * @type {number[]}\n     */\n\n    this.codePoints = codePoints;\n    this._font = font; // TODO: get this info from GDEF if available\n\n    this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\n    this.isLigature = this.codePoints.length > 1;\n  }\n  var _proto32 = Glyph.prototype;\n  _proto32._getPath = function _getPath() {\n    return new Path();\n  };\n  _proto32._getCBox = function _getCBox() {\n    return this.path.cbox;\n  };\n  _proto32._getBBox = function _getBBox() {\n    return this.path.bbox;\n  };\n  _proto32._getTableMetrics = function _getTableMetrics(table) {\n    if (this.id < table.metrics.length) {\n      return table.metrics.get(this.id);\n    }\n    var metric = table.metrics.get(table.metrics.length - 1);\n    var res = {\n      advance: metric ? metric.advance : 0,\n      bearing: table.bearings.get(this.id - table.metrics.length) || 0\n    };\n    return res;\n  };\n  _proto32._getMetrics = function _getMetrics(cbox) {\n    if (this._metrics) {\n      return this._metrics;\n    }\n    var _this$_getTableMetric = this._getTableMetrics(this._font.hmtx),\n      advanceWidth = _this$_getTableMetric.advance,\n      leftBearing = _this$_getTableMetric.bearing; // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea\n\n    if (this._font.vmtx) {\n      var _this$_getTableMetric2 = this._getTableMetrics(this._font.vmtx),\n        advanceHeight = _this$_getTableMetric2.advance,\n        topBearing = _this$_getTableMetric2.bearing;\n    } else {\n      var os2;\n      if (typeof cbox === 'undefined' || cbox === null) {\n        cbox = this.cbox;\n      }\n      if ((os2 = this._font['OS/2']) && os2.version > 0) {\n        var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender);\n        var topBearing = os2.typoAscender - cbox.maxY;\n      } else {\n        var hhea = this._font.hhea;\n        var advanceHeight = Math.abs(hhea.ascent - hhea.descent);\n        var topBearing = hhea.ascent - cbox.maxY;\n      }\n    }\n    if (this._font._variationProcessor && this._font.HVAR) {\n      advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR);\n    }\n    return this._metrics = {\n      advanceWidth: advanceWidth,\n      advanceHeight: advanceHeight,\n      leftBearing: leftBearing,\n      topBearing: topBearing\n    };\n  }\n  /**\n   * The glyph’s control box.\n   * This is often the same as the bounding box, but is faster to compute.\n   * Because of the way bezier curves are defined, some of the control points\n   * can be outside of the bounding box. Where `bbox` takes this into account,\n   * `cbox` does not. Thus, cbox is less accurate, but faster to compute.\n   * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2)\n   * for a more detailed description.\n   *\n   * @type {BBox}\n   */;\n  /**\n   * Returns a path scaled to the given font size.\n   * @param {number} size\n   * @return {Path}\n   */\n  _proto32.getScaledPath = function getScaledPath(size) {\n    var scale = 1 / this._font.unitsPerEm * size;\n    return this.path.scale(scale);\n  }\n  /**\n   * The glyph's advance width.\n   * @type {number}\n   */;\n  _proto32._getName = function _getName() {\n    var post = this._font.post;\n    if (!post) {\n      return null;\n    }\n    switch (post.version) {\n      case 1:\n        return StandardNames[this.id];\n      case 2:\n        var id = post.glyphNameIndex[this.id];\n        if (id < StandardNames.length) {\n          return StandardNames[id];\n        }\n        return post.names[id - StandardNames.length];\n      case 2.5:\n        return StandardNames[this.id + post.offsets[this.id]];\n      case 4:\n        return String.fromCharCode(post.map[this.id]);\n    }\n  }\n  /**\n   * The glyph's name\n   * @type {string}\n   */;\n  /**\n   * Renders the glyph to the given graphics context, at the specified font size.\n   * @param {CanvasRenderingContext2d} ctx\n   * @param {number} size\n   */\n  _proto32.render = function render(ctx, size) {\n    ctx.save();\n    var scale = 1 / this._font.head.unitsPerEm * size;\n    ctx.scale(scale, scale);\n    var fn = this.path.toFunction();\n    fn(ctx);\n    ctx.fill();\n    ctx.restore();\n  };\n  _createClass(Glyph, [{\n    key: \"cbox\",\n    get: function get() {\n      return this._getCBox();\n    }\n    /**\n     * The glyph’s bounding box, i.e. the rectangle that encloses the\n     * glyph outline as tightly as possible.\n     * @type {BBox}\n     */\n  }, {\n    key: \"bbox\",\n    get: function get() {\n      return this._getBBox();\n    }\n    /**\n     * A vector Path object representing the glyph outline.\n     * @type {Path}\n     */\n  }, {\n    key: \"path\",\n    get: function get() {\n      // Cache the path so we only decode it once\n      // Decoding is actually performed by subclasses\n      return this._getPath();\n    }\n  }, {\n    key: \"advanceWidth\",\n    get: function get() {\n      return this._getMetrics().advanceWidth;\n    }\n    /**\n     * The glyph's advance height.\n     * @type {number}\n     */\n  }, {\n    key: \"advanceHeight\",\n    get: function get() {\n      return this._getMetrics().advanceHeight;\n    }\n  }, {\n    key: \"ligatureCaretPositions\",\n    get: function get() {}\n  }, {\n    key: \"name\",\n    get: function get() {\n      return this._getName();\n    }\n  }]);\n  return Glyph;\n}(), (_applyDecoratedDescriptor(_class$3.prototype, \"cbox\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"cbox\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"bbox\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"bbox\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"path\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"path\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"advanceWidth\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"advanceWidth\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"advanceHeight\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"advanceHeight\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"name\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"name\"), _class$3.prototype)), _class$3);\nvar GlyfHeader = new r.Struct({\n  numberOfContours: r.int16,\n  // if negative, this is a composite glyph\n  xMin: r.int16,\n  yMin: r.int16,\n  xMax: r.int16,\n  yMax: r.int16\n}); // Flags for simple glyphs\n\nvar ON_CURVE = 1 << 0;\nvar X_SHORT_VECTOR = 1 << 1;\nvar Y_SHORT_VECTOR = 1 << 2;\nvar REPEAT = 1 << 3;\nvar SAME_X = 1 << 4;\nvar SAME_Y = 1 << 5; // Flags for composite glyphs\n\nvar ARG_1_AND_2_ARE_WORDS = 1 << 0;\nvar WE_HAVE_A_SCALE = 1 << 3;\nvar MORE_COMPONENTS = 1 << 5;\nvar WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\nvar WE_HAVE_A_TWO_BY_TWO = 1 << 7;\nvar WE_HAVE_INSTRUCTIONS = 1 << 8;\nvar Point = /*#__PURE__*/function () {\n  function Point(onCurve, endContour, x, y) {\n    if (x === void 0) {\n      x = 0;\n    }\n    if (y === void 0) {\n      y = 0;\n    }\n    this.onCurve = onCurve;\n    this.endContour = endContour;\n    this.x = x;\n    this.y = y;\n  }\n  var _proto33 = Point.prototype;\n  _proto33.copy = function copy() {\n    return new Point(this.onCurve, this.endContour, this.x, this.y);\n  };\n  return Point;\n}(); // Represents a component in a composite glyph\nvar Component = function Component(glyphID, dx, dy) {\n  this.glyphID = glyphID;\n  this.dx = dx;\n  this.dy = dy;\n  this.pos = 0;\n  this.scaleX = this.scaleY = 1;\n  this.scale01 = this.scale10 = 0;\n};\n/**\n * Represents a TrueType glyph.\n */\nvar TTFGlyph = /*#__PURE__*/function (_Glyph) {\n  _inheritsLoose(TTFGlyph, _Glyph);\n  function TTFGlyph() {\n    return _Glyph.apply(this, arguments) || this;\n  }\n  var _proto34 = TTFGlyph.prototype;\n  // Parses just the glyph header and returns the bounding box\n  _proto34._getCBox = function _getCBox(internal) {\n    // We need to decode the glyph if variation processing is requested,\n    // so it's easier just to recompute the path's cbox after decoding.\n    if (this._font._variationProcessor && !internal) {\n      return this.path.cbox;\n    }\n    var stream = this._font._getTableStream('glyf');\n    stream.pos += this._font.loca.offsets[this.id];\n    var glyph = GlyfHeader.decode(stream);\n    var cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax);\n    return Object.freeze(cbox);\n  } // Parses a single glyph coordinate\n  ;\n  _proto34._parseGlyphCoord = function _parseGlyphCoord(stream, prev, short, same) {\n    if (short) {\n      var val = stream.readUInt8();\n      if (!same) {\n        val = -val;\n      }\n      val += prev;\n    } else {\n      if (same) {\n        var val = prev;\n      } else {\n        var val = prev + stream.readInt16BE();\n      }\n    }\n    return val;\n  } // Decodes the glyph data into points for simple glyphs,\n  // or components for composite glyphs\n  ;\n  _proto34._decode = function _decode() {\n    var glyfPos = this._font.loca.offsets[this.id];\n    var nextPos = this._font.loca.offsets[this.id + 1]; // Nothing to do if there is no data for this glyph\n\n    if (glyfPos === nextPos) {\n      return null;\n    }\n    var stream = this._font._getTableStream('glyf');\n    stream.pos += glyfPos;\n    var startPos = stream.pos;\n    var glyph = GlyfHeader.decode(stream);\n    if (glyph.numberOfContours > 0) {\n      this._decodeSimple(glyph, stream);\n    } else if (glyph.numberOfContours < 0) {\n      this._decodeComposite(glyph, stream, startPos);\n    }\n    return glyph;\n  };\n  _proto34._decodeSimple = function _decodeSimple(glyph, stream) {\n    // this is a simple glyph\n    glyph.points = [];\n    var endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream);\n    glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream);\n    var flags = [];\n    var numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1;\n    while (flags.length < numCoords) {\n      var flag = stream.readUInt8();\n      flags.push(flag); // check for repeat flag\n\n      if (flag & REPEAT) {\n        var count = stream.readUInt8();\n        for (var j = 0; j < count; j++) {\n          flags.push(flag);\n        }\n      }\n    }\n    for (var i = 0; i < flags.length; i++) {\n      var flag = flags[i];\n      var point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0);\n      glyph.points.push(point);\n    }\n    var px = 0;\n    for (var i = 0; i < flags.length; i++) {\n      var flag = flags[i];\n      glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X);\n    }\n    var py = 0;\n    for (var i = 0; i < flags.length; i++) {\n      var flag = flags[i];\n      glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y);\n    }\n    if (this._font._variationProcessor) {\n      var points = glyph.points.slice();\n      points.push.apply(points, this._getPhantomPoints(glyph));\n      this._font._variationProcessor.transformPoints(this.id, points);\n      glyph.phantomPoints = points.slice(-4);\n    }\n    return;\n  };\n  _proto34._decodeComposite = function _decodeComposite(glyph, stream, offset) {\n    if (offset === void 0) {\n      offset = 0;\n    }\n    // this is a composite glyph\n    glyph.components = [];\n    var haveInstructions = false;\n    var flags = MORE_COMPONENTS;\n    while (flags & MORE_COMPONENTS) {\n      flags = stream.readUInt16BE();\n      var gPos = stream.pos - offset;\n      var glyphID = stream.readUInt16BE();\n      if (!haveInstructions) {\n        haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0;\n      }\n      if (flags & ARG_1_AND_2_ARE_WORDS) {\n        var dx = stream.readInt16BE();\n        var dy = stream.readInt16BE();\n      } else {\n        var dx = stream.readInt8();\n        var dy = stream.readInt8();\n      }\n      var component = new Component(glyphID, dx, dy);\n      component.pos = gPos;\n      if (flags & WE_HAVE_A_SCALE) {\n        // fixed number with 14 bits of fraction\n        component.scaleX = component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n      } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n        component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n        component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n      } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\n        component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n        component.scale01 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n        component.scale10 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n        component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n      }\n      glyph.components.push(component);\n    }\n    if (this._font._variationProcessor) {\n      var points = [];\n      for (var j = 0; j < glyph.components.length; j++) {\n        var component = glyph.components[j];\n        points.push(new Point(true, true, component.dx, component.dy));\n      }\n      points.push.apply(points, this._getPhantomPoints(glyph));\n      this._font._variationProcessor.transformPoints(this.id, points);\n      glyph.phantomPoints = points.splice(-4, 4);\n      for (var i = 0; i < points.length; i++) {\n        var point = points[i];\n        glyph.components[i].dx = point.x;\n        glyph.components[i].dy = point.y;\n      }\n    }\n    return haveInstructions;\n  };\n  _proto34._getPhantomPoints = function _getPhantomPoints(glyph) {\n    var cbox = this._getCBox(true);\n    if (this._metrics == null) {\n      this._metrics = Glyph.prototype._getMetrics.call(this, cbox);\n    }\n    var _this$_metrics = this._metrics,\n      advanceWidth = _this$_metrics.advanceWidth,\n      advanceHeight = _this$_metrics.advanceHeight,\n      leftBearing = _this$_metrics.leftBearing,\n      topBearing = _this$_metrics.topBearing;\n    return [new Point(false, true, glyph.xMin - leftBearing, 0), new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0), new Point(false, true, 0, glyph.yMax + topBearing), new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight)];\n  } // Decodes font data, resolves composite glyphs, and returns an array of contours\n  ;\n  _proto34._getContours = function _getContours() {\n    var glyph = this._decode();\n    if (!glyph) {\n      return [];\n    }\n    var points = [];\n    if (glyph.numberOfContours < 0) {\n      // resolve composite glyphs\n      for (var _iterator70 = _createForOfIteratorHelperLoose(glyph.components), _step70; !(_step70 = _iterator70()).done;) {\n        var component = _step70.value;\n        var _contours = this._font.getGlyph(component.glyphID)._getContours();\n        for (var i = 0; i < _contours.length; i++) {\n          var contour = _contours[i];\n          for (var j = 0; j < contour.length; j++) {\n            var _point = contour[j];\n            var x = _point.x * component.scaleX + _point.y * component.scale01 + component.dx;\n            var y = _point.y * component.scaleY + _point.x * component.scale10 + component.dy;\n            points.push(new Point(_point.onCurve, _point.endContour, x, y));\n          }\n        }\n      }\n    } else {\n      points = glyph.points || [];\n    } // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table\n\n    if (glyph.phantomPoints && !this._font.directory.tables.HVAR) {\n      this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x;\n      this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y;\n      this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x;\n      this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax;\n    }\n    var contours = [];\n    var cur = [];\n    for (var k = 0; k < points.length; k++) {\n      var point = points[k];\n      cur.push(point);\n      if (point.endContour) {\n        contours.push(cur);\n        cur = [];\n      }\n    }\n    return contours;\n  };\n  _proto34._getMetrics = function _getMetrics() {\n    if (this._metrics) {\n      return this._metrics;\n    }\n    var cbox = this._getCBox(true);\n    _Glyph.prototype._getMetrics.call(this, cbox);\n    if (this._font._variationProcessor && !this._font.HVAR) {\n      // No HVAR table, decode the glyph. This triggers recomputation of metrics.\n      this.path;\n    }\n    return this._metrics;\n  } // Converts contours to a Path object that can be rendered\n  ;\n  _proto34._getPath = function _getPath() {\n    var contours = this._getContours();\n    var path = new Path();\n    for (var i = 0; i < contours.length; i++) {\n      var contour = contours[i];\n      var firstPt = contour[0];\n      var lastPt = contour[contour.length - 1];\n      var start = 0;\n      if (firstPt.onCurve) {\n        // The first point will be consumed by the moveTo command, so skip in the loop\n        var curvePt = null;\n        start = 1;\n      } else {\n        if (lastPt.onCurve) {\n          // Start at the last point if the first point is off curve and the last point is on curve\n          firstPt = lastPt;\n        } else {\n          // Start at the middle if both the first and last points are off curve\n          firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2);\n        }\n        var curvePt = firstPt;\n      }\n      path.moveTo(firstPt.x, firstPt.y);\n      for (var j = start; j < contour.length; j++) {\n        var pt = contour[j];\n        var prevPt = j === 0 ? firstPt : contour[j - 1];\n        if (prevPt.onCurve && pt.onCurve) {\n          path.lineTo(pt.x, pt.y);\n        } else if (prevPt.onCurve && !pt.onCurve) {\n          var curvePt = pt;\n        } else if (!prevPt.onCurve && !pt.onCurve) {\n          var midX = (prevPt.x + pt.x) / 2;\n          var midY = (prevPt.y + pt.y) / 2;\n          path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY);\n          var curvePt = pt;\n        } else if (!prevPt.onCurve && pt.onCurve) {\n          path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y);\n          var curvePt = null;\n        } else {\n          throw new Error(\"Unknown TTF path state\");\n        }\n      } // Connect the first and last points\n\n      if (curvePt) {\n        path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y);\n      }\n      path.closePath();\n    }\n    return path;\n  };\n  return TTFGlyph;\n}(Glyph);\n/**\n * Represents an OpenType PostScript glyph, in the Compact Font Format.\n */\nvar CFFGlyph = /*#__PURE__*/function (_Glyph2) {\n  _inheritsLoose(CFFGlyph, _Glyph2);\n  function CFFGlyph() {\n    return _Glyph2.apply(this, arguments) || this;\n  }\n  var _proto35 = CFFGlyph.prototype;\n  _proto35._getName = function _getName() {\n    if (this._font.CFF2) {\n      return _Glyph2.prototype._getName.call(this);\n    }\n    return this._font['CFF '].getGlyphName(this.id);\n  };\n  _proto35.bias = function bias(s) {\n    if (s.length < 1240) {\n      return 107;\n    } else if (s.length < 33900) {\n      return 1131;\n    } else {\n      return 32768;\n    }\n  };\n  _proto35._getPath = function _getPath() {\n    var cff = this._font.CFF2 || this._font['CFF '];\n    var stream = cff.stream;\n    var str = cff.topDict.CharStrings[this.id];\n    var end = str.offset + str.length;\n    stream.pos = str.offset;\n    var path = new Path();\n    var stack = [];\n    var trans = [];\n    var width = null;\n    var nStems = 0;\n    var x = 0,\n      y = 0;\n    var usedGsubrs;\n    var usedSubrs;\n    var open = false;\n    this._usedGsubrs = usedGsubrs = {};\n    this._usedSubrs = usedSubrs = {};\n    var gsubrs = cff.globalSubrIndex || [];\n    var gsubrsBias = this.bias(gsubrs);\n    var privateDict = cff.privateDictForGlyph(this.id) || {};\n    var subrs = privateDict.Subrs || [];\n    var subrsBias = this.bias(subrs);\n    var vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore;\n    var vsindex = privateDict.vsindex;\n    var variationProcessor = this._font._variationProcessor;\n    function checkWidth() {\n      if (width == null) {\n        width = stack.shift() + privateDict.nominalWidthX;\n      }\n    }\n    function parseStems() {\n      if (stack.length % 2 !== 0) {\n        checkWidth();\n      }\n      nStems += stack.length >> 1;\n      return stack.length = 0;\n    }\n    function moveTo(x, y) {\n      if (open) {\n        path.closePath();\n      }\n      path.moveTo(x, y);\n      open = true;\n    }\n    var parse = function parse() {\n      while (stream.pos < end) {\n        var op = stream.readUInt8();\n        if (op < 32) {\n          switch (op) {\n            case 1: // hstem\n\n            case 3: // vstem\n\n            case 18: // hstemhm\n\n            case 23:\n              // vstemhm\n              parseStems();\n              break;\n            case 4:\n              // vmoveto\n              if (stack.length > 1) {\n                checkWidth();\n              }\n              y += stack.shift();\n              moveTo(x, y);\n              break;\n            case 5:\n              // rlineto\n              while (stack.length >= 2) {\n                x += stack.shift();\n                y += stack.shift();\n                path.lineTo(x, y);\n              }\n              break;\n            case 6: // hlineto\n\n            case 7:\n              // vlineto\n              var phase = op === 6;\n              while (stack.length >= 1) {\n                if (phase) {\n                  x += stack.shift();\n                } else {\n                  y += stack.shift();\n                }\n                path.lineTo(x, y);\n                phase = !phase;\n              }\n              break;\n            case 8:\n              // rrcurveto\n              while (stack.length > 0) {\n                var c1x = x + stack.shift();\n                var c1y = y + stack.shift();\n                var c2x = c1x + stack.shift();\n                var c2y = c1y + stack.shift();\n                x = c2x + stack.shift();\n                y = c2y + stack.shift();\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              break;\n            case 10:\n              // callsubr\n              var index = stack.pop() + subrsBias;\n              var subr = subrs[index];\n              if (subr) {\n                usedSubrs[index] = true;\n                var p = stream.pos;\n                var e = end;\n                stream.pos = subr.offset;\n                end = subr.offset + subr.length;\n                parse();\n                stream.pos = p;\n                end = e;\n              }\n              break;\n            case 11:\n              // return\n              if (cff.version >= 2) {\n                break;\n              }\n              return;\n            case 14:\n              // endchar\n              if (cff.version >= 2) {\n                break;\n              }\n              if (stack.length > 0) {\n                checkWidth();\n              }\n              if (open) {\n                path.closePath();\n                open = false;\n              }\n              break;\n            case 15:\n              {\n                // vsindex\n                if (cff.version < 2) {\n                  throw new Error('vsindex operator not supported in CFF v1');\n                }\n                vsindex = stack.pop();\n                break;\n              }\n            case 16:\n              {\n                // blend\n                if (cff.version < 2) {\n                  throw new Error('blend operator not supported in CFF v1');\n                }\n                if (!variationProcessor) {\n                  throw new Error('blend operator in non-variation font');\n                }\n                var blendVector = variationProcessor.getBlendVector(vstore, vsindex);\n                var numBlends = stack.pop();\n                var numOperands = numBlends * blendVector.length;\n                var delta = stack.length - numOperands;\n                var base = delta - numBlends;\n                for (var i = 0; i < numBlends; i++) {\n                  var sum = stack[base + i];\n                  for (var j = 0; j < blendVector.length; j++) {\n                    sum += blendVector[j] * stack[delta++];\n                  }\n                  stack[base + i] = sum;\n                }\n                while (numOperands--) {\n                  stack.pop();\n                }\n                break;\n              }\n            case 19: // hintmask\n\n            case 20:\n              // cntrmask\n              parseStems();\n              stream.pos += nStems + 7 >> 3;\n              break;\n            case 21:\n              // rmoveto\n              if (stack.length > 2) {\n                checkWidth();\n              }\n              x += stack.shift();\n              y += stack.shift();\n              moveTo(x, y);\n              break;\n            case 22:\n              // hmoveto\n              if (stack.length > 1) {\n                checkWidth();\n              }\n              x += stack.shift();\n              moveTo(x, y);\n              break;\n            case 24:\n              // rcurveline\n              while (stack.length >= 8) {\n                var c1x = x + stack.shift();\n                var c1y = y + stack.shift();\n                var c2x = c1x + stack.shift();\n                var c2y = c1y + stack.shift();\n                x = c2x + stack.shift();\n                y = c2y + stack.shift();\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              x += stack.shift();\n              y += stack.shift();\n              path.lineTo(x, y);\n              break;\n            case 25:\n              // rlinecurve\n              while (stack.length >= 8) {\n                x += stack.shift();\n                y += stack.shift();\n                path.lineTo(x, y);\n              }\n              var c1x = x + stack.shift();\n              var c1y = y + stack.shift();\n              var c2x = c1x + stack.shift();\n              var c2y = c1y + stack.shift();\n              x = c2x + stack.shift();\n              y = c2y + stack.shift();\n              path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              break;\n            case 26:\n              // vvcurveto\n              if (stack.length % 2) {\n                x += stack.shift();\n              }\n              while (stack.length >= 4) {\n                c1x = x;\n                c1y = y + stack.shift();\n                c2x = c1x + stack.shift();\n                c2y = c1y + stack.shift();\n                x = c2x;\n                y = c2y + stack.shift();\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              break;\n            case 27:\n              // hhcurveto\n              if (stack.length % 2) {\n                y += stack.shift();\n              }\n              while (stack.length >= 4) {\n                c1x = x + stack.shift();\n                c1y = y;\n                c2x = c1x + stack.shift();\n                c2y = c1y + stack.shift();\n                x = c2x + stack.shift();\n                y = c2y;\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n              }\n              break;\n            case 28:\n              // shortint\n              stack.push(stream.readInt16BE());\n              break;\n            case 29:\n              // callgsubr\n              index = stack.pop() + gsubrsBias;\n              subr = gsubrs[index];\n              if (subr) {\n                usedGsubrs[index] = true;\n                var p = stream.pos;\n                var e = end;\n                stream.pos = subr.offset;\n                end = subr.offset + subr.length;\n                parse();\n                stream.pos = p;\n                end = e;\n              }\n              break;\n            case 30: // vhcurveto\n\n            case 31:\n              // hvcurveto\n              phase = op === 31;\n              while (stack.length >= 4) {\n                if (phase) {\n                  c1x = x + stack.shift();\n                  c1y = y;\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  y = c2y + stack.shift();\n                  x = c2x + (stack.length === 1 ? stack.shift() : 0);\n                } else {\n                  c1x = x;\n                  c1y = y + stack.shift();\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  x = c2x + stack.shift();\n                  y = c2y + (stack.length === 1 ? stack.shift() : 0);\n                }\n                path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n                phase = !phase;\n              }\n              break;\n            case 12:\n              op = stream.readUInt8();\n              switch (op) {\n                case 3:\n                  // and\n                  var a = stack.pop();\n                  var b = stack.pop();\n                  stack.push(a && b ? 1 : 0);\n                  break;\n                case 4:\n                  // or\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a || b ? 1 : 0);\n                  break;\n                case 5:\n                  // not\n                  a = stack.pop();\n                  stack.push(a ? 0 : 1);\n                  break;\n                case 9:\n                  // abs\n                  a = stack.pop();\n                  stack.push(Math.abs(a));\n                  break;\n                case 10:\n                  // add\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a + b);\n                  break;\n                case 11:\n                  // sub\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a - b);\n                  break;\n                case 12:\n                  // div\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a / b);\n                  break;\n                case 14:\n                  // neg\n                  a = stack.pop();\n                  stack.push(-a);\n                  break;\n                case 15:\n                  // eq\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a === b ? 1 : 0);\n                  break;\n                case 18:\n                  // drop\n                  stack.pop();\n                  break;\n                case 20:\n                  // put\n                  var val = stack.pop();\n                  var idx = stack.pop();\n                  trans[idx] = val;\n                  break;\n                case 21:\n                  // get\n                  idx = stack.pop();\n                  stack.push(trans[idx] || 0);\n                  break;\n                case 22:\n                  // ifelse\n                  var s1 = stack.pop();\n                  var s2 = stack.pop();\n                  var v1 = stack.pop();\n                  var v2 = stack.pop();\n                  stack.push(v1 <= v2 ? s1 : s2);\n                  break;\n                case 23:\n                  // random\n                  stack.push(Math.random());\n                  break;\n                case 24:\n                  // mul\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(a * b);\n                  break;\n                case 26:\n                  // sqrt\n                  a = stack.pop();\n                  stack.push(Math.sqrt(a));\n                  break;\n                case 27:\n                  // dup\n                  a = stack.pop();\n                  stack.push(a, a);\n                  break;\n                case 28:\n                  // exch\n                  a = stack.pop();\n                  b = stack.pop();\n                  stack.push(b, a);\n                  break;\n                case 29:\n                  // index\n                  idx = stack.pop();\n                  if (idx < 0) {\n                    idx = 0;\n                  } else if (idx > stack.length - 1) {\n                    idx = stack.length - 1;\n                  }\n                  stack.push(stack[idx]);\n                  break;\n                case 30:\n                  // roll\n                  var n = stack.pop();\n                  var _j = stack.pop();\n                  if (_j >= 0) {\n                    while (_j > 0) {\n                      var t = stack[n - 1];\n                      for (var _i = n - 2; _i >= 0; _i--) {\n                        stack[_i + 1] = stack[_i];\n                      }\n                      stack[0] = t;\n                      _j--;\n                    }\n                  } else {\n                    while (_j < 0) {\n                      var t = stack[0];\n                      for (var _i2 = 0; _i2 <= n; _i2++) {\n                        stack[_i2] = stack[_i2 + 1];\n                      }\n                      stack[n - 1] = t;\n                      _j++;\n                    }\n                  }\n                  break;\n                case 34:\n                  // hflex\n                  c1x = x + stack.shift();\n                  c1y = y;\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  var c3x = c2x + stack.shift();\n                  var c3y = c2y;\n                  var c4x = c3x + stack.shift();\n                  var c4y = c3y;\n                  var c5x = c4x + stack.shift();\n                  var c5y = c4y;\n                  var c6x = c5x + stack.shift();\n                  var c6y = c5y;\n                  x = c6x;\n                  y = c6y;\n                  path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n                  path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n                  break;\n                case 35:\n                  // flex\n                  var pts = [];\n                  for (var _i3 = 0; _i3 <= 5; _i3++) {\n                    x += stack.shift();\n                    y += stack.shift();\n                    pts.push(x, y);\n                  }\n                  path.bezierCurveTo.apply(path, pts.slice(0, 6));\n                  path.bezierCurveTo.apply(path, pts.slice(6));\n                  stack.shift(); // fd\n\n                  break;\n                case 36:\n                  // hflex1\n                  c1x = x + stack.shift();\n                  c1y = y + stack.shift();\n                  c2x = c1x + stack.shift();\n                  c2y = c1y + stack.shift();\n                  c3x = c2x + stack.shift();\n                  c3y = c2y;\n                  c4x = c3x + stack.shift();\n                  c4y = c3y;\n                  c5x = c4x + stack.shift();\n                  c5y = c4y + stack.shift();\n                  c6x = c5x + stack.shift();\n                  c6y = c5y;\n                  x = c6x;\n                  y = c6y;\n                  path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n                  path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n                  break;\n                case 37:\n                  // flex1\n                  var startx = x;\n                  var starty = y;\n                  pts = [];\n                  for (var _i4 = 0; _i4 <= 4; _i4++) {\n                    x += stack.shift();\n                    y += stack.shift();\n                    pts.push(x, y);\n                  }\n                  if (Math.abs(x - startx) > Math.abs(y - starty)) {\n                    // horizontal\n                    x += stack.shift();\n                    y = starty;\n                  } else {\n                    x = startx;\n                    y += stack.shift();\n                  }\n                  pts.push(x, y);\n                  path.bezierCurveTo.apply(path, pts.slice(0, 6));\n                  path.bezierCurveTo.apply(path, pts.slice(6));\n                  break;\n                default:\n                  throw new Error(\"Unknown op: 12 \".concat(op));\n              }\n              break;\n            default:\n              throw new Error(\"Unknown op: \".concat(op));\n          }\n        } else if (op < 247) {\n          stack.push(op - 139);\n        } else if (op < 251) {\n          var b1 = stream.readUInt8();\n          stack.push((op - 247) * 256 + b1 + 108);\n        } else if (op < 255) {\n          var b1 = stream.readUInt8();\n          stack.push(-(op - 251) * 256 - b1 - 108);\n        } else {\n          stack.push(stream.readInt32BE() / 65536);\n        }\n      }\n    };\n    parse();\n    if (open) {\n      path.closePath();\n    }\n    return path;\n  };\n  return CFFGlyph;\n}(Glyph);\nvar SBIXImage = new r.Struct({\n  originX: r.uint16,\n  originY: r.uint16,\n  type: new r.String(4),\n  data: new r.Buffer(function (t) {\n    return t.parent.buflen - t._currentOffset;\n  })\n});\n/**\n * Represents a color (e.g. emoji) glyph in Apple's SBIX format.\n */\nvar SBIXGlyph = /*#__PURE__*/function (_TTFGlyph) {\n  _inheritsLoose(SBIXGlyph, _TTFGlyph);\n  function SBIXGlyph() {\n    return _TTFGlyph.apply(this, arguments) || this;\n  }\n  var _proto36 = SBIXGlyph.prototype;\n  /**\n   * Returns an object representing a glyph image at the given point size.\n   * The object has a data property with a Buffer containing the actual image data,\n   * along with the image type, and origin.\n   *\n   * @param {number} size\n   * @return {object}\n   */\n  _proto36.getImageForSize = function getImageForSize(size) {\n    for (var i = 0; i < this._font.sbix.imageTables.length; i++) {\n      var table = this._font.sbix.imageTables[i];\n      if (table.ppem >= size) {\n        break;\n      }\n    }\n    var offsets = table.imageOffsets;\n    var start = offsets[this.id];\n    var end = offsets[this.id + 1];\n    if (start === end) {\n      return null;\n    }\n    this._font.stream.pos = start;\n    return SBIXImage.decode(this._font.stream, {\n      buflen: end - start\n    });\n  };\n  _proto36.render = function render(ctx, size) {\n    var img = this.getImageForSize(size);\n    if (img != null) {\n      var scale = size / this._font.unitsPerEm;\n      ctx.image(img.data, {\n        height: size,\n        x: img.originX,\n        y: (this.bbox.minY - img.originY) * scale\n      });\n    }\n    if (this._font.sbix.flags.renderOutlines) {\n      _TTFGlyph.prototype.render.call(this, ctx, size);\n    }\n  };\n  return SBIXGlyph;\n}(TTFGlyph);\nvar COLRLayer = function COLRLayer(glyph, color) {\n  this.glyph = glyph;\n  this.color = color;\n};\n/**\n * Represents a color (e.g. emoji) glyph in Microsoft's COLR format.\n * Each glyph in this format contain a list of colored layers, each\n * of which  is another vector glyph.\n */\nvar COLRGlyph = /*#__PURE__*/function (_Glyph3) {\n  _inheritsLoose(COLRGlyph, _Glyph3);\n  function COLRGlyph() {\n    return _Glyph3.apply(this, arguments) || this;\n  }\n  var _proto37 = COLRGlyph.prototype;\n  _proto37._getBBox = function _getBBox() {\n    var bbox = new BBox();\n    for (var i = 0; i < this.layers.length; i++) {\n      var layer = this.layers[i];\n      var b = layer.glyph.bbox;\n      bbox.addPoint(b.minX, b.minY);\n      bbox.addPoint(b.maxX, b.maxY);\n    }\n    return bbox;\n  }\n  /**\n   * Returns an array of objects containing the glyph and color for\n   * each layer in the composite color glyph.\n   * @type {object[]}\n   */;\n  _proto37.render = function render(ctx, size) {\n    for (var _iterator71 = _createForOfIteratorHelperLoose(this.layers), _step71; !(_step71 = _iterator71()).done;) {\n      var _step71$value = _step71.value,\n        glyph = _step71$value.glyph,\n        color = _step71$value.color;\n      ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100);\n      glyph.render(ctx, size);\n    }\n    return;\n  };\n  _createClass(COLRGlyph, [{\n    key: \"layers\",\n    get: function get() {\n      var cpal = this._font.CPAL;\n      var colr = this._font.COLR;\n      var low = 0;\n      var high = colr.baseGlyphRecord.length - 1;\n      while (low <= high) {\n        var mid = low + high >> 1;\n        var rec = colr.baseGlyphRecord[mid];\n        if (this.id < rec.gid) {\n          high = mid - 1;\n        } else if (this.id > rec.gid) {\n          low = mid + 1;\n        } else {\n          var baseLayer = rec;\n          break;\n        }\n      } // if base glyph not found in COLR table,\n      // default to normal glyph from glyf or CFF\n\n      if (baseLayer == null) {\n        var g = this._font._getBaseGlyph(this.id);\n        var color = {\n          red: 0,\n          green: 0,\n          blue: 0,\n          alpha: 255\n        };\n        return [new COLRLayer(g, color)];\n      } // otherwise, return an array of all the layers\n\n      var layers = [];\n      for (var i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) {\n        var rec = colr.layerRecords[i];\n        var color = cpal.colorRecords[rec.paletteIndex];\n        var g = this._font._getBaseGlyph(rec.gid);\n        layers.push(new COLRLayer(g, color));\n      }\n      return layers;\n    }\n  }]);\n  return COLRGlyph;\n}(Glyph);\nvar TUPLES_SHARE_POINT_NUMBERS = 0x8000;\nvar TUPLE_COUNT_MASK = 0x0fff;\nvar EMBEDDED_TUPLE_COORD = 0x8000;\nvar INTERMEDIATE_TUPLE = 0x4000;\nvar PRIVATE_POINT_NUMBERS = 0x2000;\nvar TUPLE_INDEX_MASK = 0x0fff;\nvar POINTS_ARE_WORDS = 0x80;\nvar POINT_RUN_COUNT_MASK = 0x7f;\nvar DELTAS_ARE_ZERO = 0x80;\nvar DELTAS_ARE_WORDS = 0x40;\nvar DELTA_RUN_COUNT_MASK = 0x3f;\n/**\n * This class is transforms TrueType glyphs according to the data from\n * the Apple Advanced Typography variation tables (fvar, gvar, and avar).\n * These tables allow infinite adjustments to glyph weight, width, slant,\n * and optical size without the designer needing to specify every exact style.\n *\n * Apple's documentation for these tables is not great, so thanks to the\n * Freetype project for figuring much of this out.\n *\n * @private\n */\nvar GlyphVariationProcessor = /*#__PURE__*/function () {\n  function GlyphVariationProcessor(font, coords) {\n    this.font = font;\n    this.normalizedCoords = this.normalizeCoords(coords);\n    this.blendVectors = new Map();\n  }\n  var _proto38 = GlyphVariationProcessor.prototype;\n  _proto38.normalizeCoords = function normalizeCoords(coords) {\n    // the default mapping is linear along each axis, in two segments:\n    // from the minValue to defaultValue, and from defaultValue to maxValue.\n    var normalized = [];\n    for (var i = 0; i < this.font.fvar.axis.length; i++) {\n      var axis = this.font.fvar.axis[i];\n      if (coords[i] < axis.defaultValue) {\n        normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\n      } else {\n        normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\n      }\n    } // if there is an avar table, the normalized value is calculated\n    // by interpolating between the two nearest mapped values.\n\n    if (this.font.avar) {\n      for (var i = 0; i < this.font.avar.segment.length; i++) {\n        var segment = this.font.avar.segment[i];\n        for (var j = 0; j < segment.correspondence.length; j++) {\n          var pair = segment.correspondence[j];\n          if (j >= 1 && normalized[i] < pair.fromCoord) {\n            var prev = segment.correspondence[j - 1];\n            normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) / (pair.fromCoord - prev.fromCoord + Number.EPSILON) + prev.toCoord;\n            break;\n          }\n        }\n      }\n    }\n    return normalized;\n  };\n  _proto38.transformPoints = function transformPoints(gid, glyphPoints) {\n    if (!this.font.fvar || !this.font.gvar) {\n      return;\n    }\n    var gvar = this.font.gvar;\n    if (gid >= gvar.glyphCount) {\n      return;\n    }\n    var offset = gvar.offsets[gid];\n    if (offset === gvar.offsets[gid + 1]) {\n      return;\n    } // Read the gvar data for this glyph\n\n    var stream = this.font.stream;\n    stream.pos = offset;\n    if (stream.pos >= stream.length) {\n      return;\n    }\n    var tupleCount = stream.readUInt16BE();\n    var offsetToData = offset + stream.readUInt16BE();\n    if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) {\n      var here = stream.pos;\n      stream.pos = offsetToData;\n      var sharedPoints = this.decodePoints();\n      offsetToData = stream.pos;\n      stream.pos = here;\n    }\n    var origPoints = glyphPoints.map(function (pt) {\n      return pt.copy();\n    });\n    tupleCount &= TUPLE_COUNT_MASK;\n    for (var i = 0; i < tupleCount; i++) {\n      var tupleDataSize = stream.readUInt16BE();\n      var tupleIndex = stream.readUInt16BE();\n      if (tupleIndex & EMBEDDED_TUPLE_COORD) {\n        var tupleCoords = [];\n        for (var a = 0; a < gvar.axisCount; a++) {\n          tupleCoords.push(stream.readInt16BE() / 16384);\n        }\n      } else {\n        if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) {\n          throw new Error('Invalid gvar table');\n        }\n        var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK];\n      }\n      if (tupleIndex & INTERMEDIATE_TUPLE) {\n        var startCoords = [];\n        for (var _a = 0; _a < gvar.axisCount; _a++) {\n          startCoords.push(stream.readInt16BE() / 16384);\n        }\n        var endCoords = [];\n        for (var _a2 = 0; _a2 < gvar.axisCount; _a2++) {\n          endCoords.push(stream.readInt16BE() / 16384);\n        }\n      } // Get the factor at which to apply this tuple\n\n      var factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords);\n      if (factor === 0) {\n        offsetToData += tupleDataSize;\n        continue;\n      }\n      var here = stream.pos;\n      stream.pos = offsetToData;\n      if (tupleIndex & PRIVATE_POINT_NUMBERS) {\n        var points = this.decodePoints();\n      } else {\n        var points = sharedPoints;\n      } // points.length = 0 means there are deltas for all points\n\n      var nPoints = points.length === 0 ? glyphPoints.length : points.length;\n      var xDeltas = this.decodeDeltas(nPoints);\n      var yDeltas = this.decodeDeltas(nPoints);\n      if (points.length === 0) {\n        // all points\n        for (var _i = 0; _i < glyphPoints.length; _i++) {\n          var point = glyphPoints[_i];\n          point.x += Math.round(xDeltas[_i] * factor);\n          point.y += Math.round(yDeltas[_i] * factor);\n        }\n      } else {\n        var outPoints = origPoints.map(function (pt) {\n          return pt.copy();\n        });\n        var hasDelta = glyphPoints.map(function () {\n          return false;\n        });\n        for (var _i2 = 0; _i2 < points.length; _i2++) {\n          var idx = points[_i2];\n          if (idx < glyphPoints.length) {\n            var _point = outPoints[idx];\n            hasDelta[idx] = true;\n            _point.x += Math.round(xDeltas[_i2] * factor);\n            _point.y += Math.round(yDeltas[_i2] * factor);\n          }\n        }\n        this.interpolateMissingDeltas(outPoints, origPoints, hasDelta);\n        for (var _i3 = 0; _i3 < glyphPoints.length; _i3++) {\n          var deltaX = outPoints[_i3].x - origPoints[_i3].x;\n          var deltaY = outPoints[_i3].y - origPoints[_i3].y;\n          glyphPoints[_i3].x += deltaX;\n          glyphPoints[_i3].y += deltaY;\n        }\n      }\n      offsetToData += tupleDataSize;\n      stream.pos = here;\n    }\n  };\n  _proto38.decodePoints = function decodePoints() {\n    var stream = this.font.stream;\n    var count = stream.readUInt8();\n    if (count & POINTS_ARE_WORDS) {\n      count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8();\n    }\n    var points = new Uint16Array(count);\n    var i = 0;\n    var point = 0;\n    while (i < count) {\n      var run = stream.readUInt8();\n      var runCount = (run & POINT_RUN_COUNT_MASK) + 1;\n      var fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8;\n      for (var j = 0; j < runCount && i < count; j++) {\n        point += fn.call(stream);\n        points[i++] = point;\n      }\n    }\n    return points;\n  };\n  _proto38.decodeDeltas = function decodeDeltas(count) {\n    var stream = this.font.stream;\n    var i = 0;\n    var deltas = new Int16Array(count);\n    while (i < count) {\n      var run = stream.readUInt8();\n      var runCount = (run & DELTA_RUN_COUNT_MASK) + 1;\n      if (run & DELTAS_ARE_ZERO) {\n        i += runCount;\n      } else {\n        var fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8;\n        for (var j = 0; j < runCount && i < count; j++) {\n          deltas[i++] = fn.call(stream);\n        }\n      }\n    }\n    return deltas;\n  };\n  _proto38.tupleFactor = function tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) {\n    var normalized = this.normalizedCoords;\n    var gvar = this.font.gvar;\n    var factor = 1;\n    for (var i = 0; i < gvar.axisCount; i++) {\n      if (tupleCoords[i] === 0) {\n        continue;\n      }\n      if (normalized[i] === 0) {\n        return 0;\n      }\n      if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) {\n        if (normalized[i] < Math.min(0, tupleCoords[i]) || normalized[i] > Math.max(0, tupleCoords[i])) {\n          return 0;\n        }\n        factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON);\n      } else {\n        if (normalized[i] < startCoords[i] || normalized[i] > endCoords[i]) {\n          return 0;\n        } else if (normalized[i] < tupleCoords[i]) {\n          factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON);\n        } else {\n          factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON);\n        }\n      }\n    }\n    return factor;\n  } // Interpolates points without delta values.\n  // Needed for the Ø and Q glyphs in Skia.\n  // Algorithm from Freetype.\n  ;\n  _proto38.interpolateMissingDeltas = function interpolateMissingDeltas(points, inPoints, hasDelta) {\n    if (points.length === 0) {\n      return;\n    }\n    var point = 0;\n    while (point < points.length) {\n      var firstPoint = point; // find the end point of the contour\n\n      var endPoint = point;\n      var pt = points[endPoint];\n      while (!pt.endContour) {\n        pt = points[++endPoint];\n      } // find the first point that has a delta\n\n      while (point <= endPoint && !hasDelta[point]) {\n        point++;\n      }\n      if (point > endPoint) {\n        continue;\n      }\n      var firstDelta = point;\n      var curDelta = point;\n      point++;\n      while (point <= endPoint) {\n        // find the next point with a delta, and interpolate intermediate points\n        if (hasDelta[point]) {\n          this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points);\n          curDelta = point;\n        }\n        point++;\n      } // shift contour if we only have a single delta\n\n      if (curDelta === firstDelta) {\n        this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points);\n      } else {\n        // otherwise, handle the remaining points at the end and beginning of the contour\n        this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points);\n        if (firstDelta > 0) {\n          this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points);\n        }\n      }\n      point = endPoint + 1;\n    }\n  };\n  _proto38.deltaInterpolate = function deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) {\n    if (p1 > p2) {\n      return;\n    }\n    var iterable = ['x', 'y'];\n    for (var i = 0; i < iterable.length; i++) {\n      var k = iterable[i];\n      if (inPoints[ref1][k] > inPoints[ref2][k]) {\n        var p = ref1;\n        ref1 = ref2;\n        ref2 = p;\n      }\n      var in1 = inPoints[ref1][k];\n      var in2 = inPoints[ref2][k];\n      var out1 = outPoints[ref1][k];\n      var out2 = outPoints[ref2][k]; // If the reference points have the same coordinate but different\n      // delta, inferred delta is zero.  Otherwise interpolate.\n\n      if (in1 !== in2 || out1 === out2) {\n        var scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\n        for (var _p = p1; _p <= p2; _p++) {\n          var out = inPoints[_p][k];\n          if (out <= in1) {\n            out += out1 - in1;\n          } else if (out >= in2) {\n            out += out2 - in2;\n          } else {\n            out = out1 + (out - in1) * scale;\n          }\n          outPoints[_p][k] = out;\n        }\n      }\n    }\n  };\n  _proto38.deltaShift = function deltaShift(p1, p2, ref, inPoints, outPoints) {\n    var deltaX = outPoints[ref].x - inPoints[ref].x;\n    var deltaY = outPoints[ref].y - inPoints[ref].y;\n    if (deltaX === 0 && deltaY === 0) {\n      return;\n    }\n    for (var p = p1; p <= p2; p++) {\n      if (p !== ref) {\n        outPoints[p].x += deltaX;\n        outPoints[p].y += deltaY;\n      }\n    }\n  };\n  _proto38.getAdvanceAdjustment = function getAdvanceAdjustment(gid, table) {\n    var outerIndex, innerIndex;\n    if (table.advanceWidthMapping) {\n      var idx = gid;\n      if (idx >= table.advanceWidthMapping.mapCount) {\n        idx = table.advanceWidthMapping.mapCount - 1;\n      }\n      var entryFormat = table.advanceWidthMapping.entryFormat;\n      var _table$advanceWidthMa = table.advanceWidthMapping.mapData[idx];\n      outerIndex = _table$advanceWidthMa.outerIndex;\n      innerIndex = _table$advanceWidthMa.innerIndex;\n    } else {\n      outerIndex = 0;\n      innerIndex = gid;\n    }\n    return this.getDelta(table.itemVariationStore, outerIndex, innerIndex);\n  } // See pseudo code from `Font Variations Overview'\n  // in the OpenType specification.\n  ;\n  _proto38.getDelta = function getDelta(itemStore, outerIndex, innerIndex) {\n    if (outerIndex >= itemStore.itemVariationData.length) {\n      return 0;\n    }\n    var varData = itemStore.itemVariationData[outerIndex];\n    if (innerIndex >= varData.deltaSets.length) {\n      return 0;\n    }\n    var deltaSet = varData.deltaSets[innerIndex];\n    var blendVector = this.getBlendVector(itemStore, outerIndex);\n    var netAdjustment = 0;\n    for (var master = 0; master < varData.regionIndexCount; master++) {\n      netAdjustment += deltaSet.deltas[master] * blendVector[master];\n    }\n    return netAdjustment;\n  };\n  _proto38.getBlendVector = function getBlendVector(itemStore, outerIndex) {\n    var varData = itemStore.itemVariationData[outerIndex];\n    if (this.blendVectors.has(varData)) {\n      return this.blendVectors.get(varData);\n    }\n    var normalizedCoords = this.normalizedCoords;\n    var blendVector = []; // outer loop steps through master designs to be blended\n\n    for (var master = 0; master < varData.regionIndexCount; master++) {\n      var scalar = 1;\n      var regionIndex = varData.regionIndexes[master];\n      var axes = itemStore.variationRegionList.variationRegions[regionIndex]; // inner loop steps through axes in this region\n\n      for (var j = 0; j < axes.length; j++) {\n        var axis = axes[j];\n        var axisScalar = void 0; // compute the scalar contribution of this axis\n        // ignore invalid ranges\n\n        if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\n          axisScalar = 1;\n        } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\n          axisScalar = 1; // peak of 0 means ignore this axis\n        } else if (axis.peakCoord === 0) {\n          axisScalar = 1; // ignore this region if coords are out of range\n        } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\n          axisScalar = 0; // calculate a proportional factor\n        } else {\n          if (normalizedCoords[j] === axis.peakCoord) {\n            axisScalar = 1;\n          } else if (normalizedCoords[j] < axis.peakCoord) {\n            axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) / (axis.peakCoord - axis.startCoord + Number.EPSILON);\n          } else {\n            axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON);\n          }\n        } // take product of all the axis scalars\n\n        scalar *= axisScalar;\n      }\n      blendVector[master] = scalar;\n    }\n    this.blendVectors.set(varData, blendVector);\n    return blendVector;\n  };\n  return GlyphVariationProcessor;\n}();\nvar resolved = Promise.resolve();\nvar Subset = /*#__PURE__*/function () {\n  function Subset(font) {\n    this.font = font;\n    this.glyphs = [];\n    this.mapping = {}; // always include the missing glyph\n\n    this.includeGlyph(0);\n  }\n  var _proto39 = Subset.prototype;\n  _proto39.includeGlyph = function includeGlyph(glyph) {\n    if (typeof glyph === 'object') {\n      glyph = glyph.id;\n    }\n    if (this.mapping[glyph] == null) {\n      this.glyphs.push(glyph);\n      this.mapping[glyph] = this.glyphs.length - 1;\n    }\n    return this.mapping[glyph];\n  };\n  _proto39.encodeStream = function encodeStream() {\n    var _this11 = this;\n    var s = new r.EncodeStream();\n    resolved.then(function () {\n      _this11.encode(s);\n      return s.end();\n    });\n    return s;\n  };\n  return Subset;\n}();\nvar ON_CURVE$1 = 1 << 0;\nvar X_SHORT_VECTOR$1 = 1 << 1;\nvar Y_SHORT_VECTOR$1 = 1 << 2;\nvar REPEAT$1 = 1 << 3;\nvar SAME_X$1 = 1 << 4;\nvar SAME_Y$1 = 1 << 5;\nvar Point$1 = /*#__PURE__*/function () {\n  function Point$1() {}\n  Point$1.size = function size(val) {\n    return val >= 0 && val <= 255 ? 1 : 2;\n  };\n  Point$1.encode = function encode(stream, value) {\n    if (value >= 0 && value <= 255) {\n      stream.writeUInt8(value);\n    } else {\n      stream.writeInt16BE(value);\n    }\n  };\n  return Point$1;\n}();\nvar Glyf = new r.Struct({\n  numberOfContours: r.int16,\n  // if negative, this is a composite glyph\n  xMin: r.int16,\n  yMin: r.int16,\n  xMax: r.int16,\n  yMax: r.int16,\n  endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'),\n  instructions: new r.Array(r.uint8, r.uint16),\n  flags: new r.Array(r.uint8, 0),\n  xPoints: new r.Array(Point$1, 0),\n  yPoints: new r.Array(Point$1, 0)\n});\n/**\n * Encodes TrueType glyph outlines\n */\nvar TTFGlyphEncoder = /*#__PURE__*/function () {\n  function TTFGlyphEncoder() {}\n  var _proto40 = TTFGlyphEncoder.prototype;\n  _proto40.encodeSimple = function encodeSimple(path, instructions) {\n    if (instructions === void 0) {\n      instructions = [];\n    }\n    var endPtsOfContours = [];\n    var xPoints = [];\n    var yPoints = [];\n    var flags = [];\n    var same = 0;\n    var lastX = 0,\n      lastY = 0,\n      lastFlag = 0;\n    var pointCount = 0;\n    for (var i = 0; i < path.commands.length; i++) {\n      var c = path.commands[i];\n      for (var j = 0; j < c.args.length; j += 2) {\n        var x = c.args[j];\n        var y = c.args[j + 1];\n        var flag = 0; // If the ending point of a quadratic curve is the midpoint\n        // between the control point and the control point of the next\n        // quadratic curve, we can omit the ending point.\n\n        if (c.command === 'quadraticCurveTo' && j === 2) {\n          var next = path.commands[i + 1];\n          if (next && next.command === 'quadraticCurveTo') {\n            var midX = (lastX + next.args[0]) / 2;\n            var midY = (lastY + next.args[1]) / 2;\n            if (x === midX && y === midY) {\n              continue;\n            }\n          }\n        } // All points except control points are on curve.\n\n        if (!(c.command === 'quadraticCurveTo' && j === 0)) {\n          flag |= ON_CURVE$1;\n        }\n        flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR$1, SAME_X$1);\n        flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR$1, SAME_Y$1);\n        if (flag === lastFlag && same < 255) {\n          flags[flags.length - 1] |= REPEAT$1;\n          same++;\n        } else {\n          if (same > 0) {\n            flags.push(same);\n            same = 0;\n          }\n          flags.push(flag);\n          lastFlag = flag;\n        }\n        lastX = x;\n        lastY = y;\n        pointCount++;\n      }\n      if (c.command === 'closePath') {\n        endPtsOfContours.push(pointCount - 1);\n      }\n    } // Close the path if the last command didn't already\n\n    if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') {\n      endPtsOfContours.push(pointCount - 1);\n    }\n    var bbox = path.bbox;\n    var glyf = {\n      numberOfContours: endPtsOfContours.length,\n      xMin: bbox.minX,\n      yMin: bbox.minY,\n      xMax: bbox.maxX,\n      yMax: bbox.maxY,\n      endPtsOfContours: endPtsOfContours,\n      instructions: instructions,\n      flags: flags,\n      xPoints: xPoints,\n      yPoints: yPoints\n    };\n    var size = Glyf.size(glyf);\n    var tail = 4 - size % 4;\n    var stream = new r.EncodeStream(size + tail);\n    Glyf.encode(stream, glyf); // Align to 4-byte length\n\n    if (tail !== 0) {\n      stream.fill(0, tail);\n    }\n    return stream.buffer;\n  };\n  _proto40._encodePoint = function _encodePoint(value, last, points, flag, shortFlag, sameFlag) {\n    var diff = value - last;\n    if (value === last) {\n      flag |= sameFlag;\n    } else {\n      if (-255 <= diff && diff <= 255) {\n        flag |= shortFlag;\n        if (diff < 0) {\n          diff = -diff;\n        } else {\n          flag |= sameFlag;\n        }\n      }\n      points.push(diff);\n    }\n    return flag;\n  };\n  return TTFGlyphEncoder;\n}();\nvar TTFSubset = /*#__PURE__*/function (_Subset) {\n  _inheritsLoose(TTFSubset, _Subset);\n  function TTFSubset(font) {\n    var _this12;\n    _this12 = _Subset.call(this, font) || this;\n    _this12.glyphEncoder = new TTFGlyphEncoder();\n    return _this12;\n  }\n  var _proto41 = TTFSubset.prototype;\n  _proto41._addGlyph = function _addGlyph(gid) {\n    var glyph = this.font.getGlyph(gid);\n    var glyf = glyph._decode(); // get the offset to the glyph from the loca table\n\n    var curOffset = this.font.loca.offsets[gid];\n    var nextOffset = this.font.loca.offsets[gid + 1];\n    var stream = this.font._getTableStream('glyf');\n    stream.pos += curOffset;\n    var buffer = stream.readBuffer(nextOffset - curOffset); // if it is a compound glyph, include its components\n\n    if (glyf && glyf.numberOfContours < 0) {\n      buffer = Buffer.from(buffer);\n      for (var _iterator72 = _createForOfIteratorHelperLoose(glyf.components), _step72; !(_step72 = _iterator72()).done;) {\n        var component = _step72.value;\n        gid = this.includeGlyph(component.glyphID);\n        buffer.writeUInt16BE(gid, component.pos);\n      }\n    } else if (glyf && this.font._variationProcessor) {\n      // If this is a TrueType variation glyph, re-encode the path\n      buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions);\n    }\n    this.glyf.push(buffer);\n    this.loca.offsets.push(this.offset);\n    this.hmtx.metrics.push({\n      advance: glyph.advanceWidth,\n      bearing: glyph._getMetrics().leftBearing\n    });\n    this.offset += buffer.length;\n    return this.glyf.length - 1;\n  };\n  _proto41.encode = function encode(stream) {\n    // tables required by PDF spec:\n    //   head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm\n    //\n    // additional tables required for standalone fonts:\n    //   name, cmap, OS/2, post\n    this.glyf = [];\n    this.offset = 0;\n    this.loca = {\n      offsets: [],\n      version: this.font.loca.version\n    };\n    this.hmtx = {\n      metrics: [],\n      bearings: []\n    }; // include all the glyphs\n    // not using a for loop because we need to support adding more\n    // glyphs to the array as we go, and CoffeeScript caches the length.\n\n    var i = 0;\n    while (i < this.glyphs.length) {\n      this._addGlyph(this.glyphs[i++]);\n    }\n    var maxp = cloneDeep(this.font.maxp);\n    maxp.numGlyphs = this.glyf.length;\n    this.loca.offsets.push(this.offset);\n    var head = cloneDeep(this.font.head);\n    head.indexToLocFormat = this.loca.version;\n    var hhea = cloneDeep(this.font.hhea);\n    hhea.numberOfMetrics = this.hmtx.metrics.length; // map = []\n    // for index in [0...256]\n    //     if index < @numGlyphs\n    //         map[index] = index\n    //     else\n    //         map[index] = 0\n    //\n    // cmapTable =\n    //     version: 0\n    //     length: 262\n    //     language: 0\n    //     codeMap: map\n    //\n    // cmap =\n    //     version: 0\n    //     numSubtables: 1\n    //     tables: [\n    //         platformID: 1\n    //         encodingID: 0\n    //         table: cmapTable\n    //     ]\n    // TODO: subset prep, cvt, fpgm?\n\n    Directory.encode(stream, {\n      tables: {\n        head: head,\n        hhea: hhea,\n        loca: this.loca,\n        maxp: maxp,\n        'cvt ': this.font['cvt '],\n        prep: this.font.prep,\n        glyf: this.glyf,\n        hmtx: this.hmtx,\n        fpgm: this.font.fpgm // name: clone @font.name\n        // 'OS/2': clone @font['OS/2']\n        // post: clone @font.post\n        // cmap: cmap\n      }\n    });\n  };\n  return TTFSubset;\n}(Subset);\nvar CFFSubset = /*#__PURE__*/function (_Subset2) {\n  _inheritsLoose(CFFSubset, _Subset2);\n  function CFFSubset(font) {\n    var _this13;\n    _this13 = _Subset2.call(this, font) || this;\n    _this13.cff = _this13.font['CFF '];\n    if (!_this13.cff) {\n      throw new Error('Not a CFF Font');\n    }\n    return _this13;\n  }\n  var _proto42 = CFFSubset.prototype;\n  _proto42.subsetCharstrings = function subsetCharstrings() {\n    this.charstrings = [];\n    var gsubrs = {};\n    for (var _iterator73 = _createForOfIteratorHelperLoose(this.glyphs), _step73; !(_step73 = _iterator73()).done;) {\n      var gid = _step73.value;\n      this.charstrings.push(this.cff.getCharString(gid));\n      var glyph = this.font.getGlyph(gid);\n      var path = glyph.path; // this causes the glyph to be parsed\n\n      for (var subr in glyph._usedGsubrs) {\n        gsubrs[subr] = true;\n      }\n    }\n    this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs);\n  };\n  _proto42.subsetSubrs = function subsetSubrs(subrs, used) {\n    var res = [];\n    for (var i = 0; i < subrs.length; i++) {\n      var subr = subrs[i];\n      if (used[i]) {\n        this.cff.stream.pos = subr.offset;\n        res.push(this.cff.stream.readBuffer(subr.length));\n      } else {\n        res.push(Buffer.from([11])); // return\n      }\n    }\n\n    return res;\n  };\n  _proto42.subsetFontdict = function subsetFontdict(topDict) {\n    topDict.FDArray = [];\n    topDict.FDSelect = {\n      version: 0,\n      fds: []\n    };\n    var used_fds = {};\n    var used_subrs = [];\n    var fd_select = {};\n    for (var _iterator74 = _createForOfIteratorHelperLoose(this.glyphs), _step74; !(_step74 = _iterator74()).done;) {\n      var gid = _step74.value;\n      var fd = this.cff.fdForGlyph(gid);\n      if (fd == null) {\n        continue;\n      }\n      if (!used_fds[fd]) {\n        topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd]));\n        used_subrs.push({});\n        fd_select[fd] = topDict.FDArray.length - 1;\n      }\n      used_fds[fd] = true;\n      topDict.FDSelect.fds.push(fd_select[fd]);\n      var glyph = this.font.getGlyph(gid);\n      var path = glyph.path; // this causes the glyph to be parsed\n\n      for (var subr in glyph._usedSubrs) {\n        used_subrs[fd_select[fd]][subr] = true;\n      }\n    }\n    for (var i = 0; i < topDict.FDArray.length; i++) {\n      var dict = topDict.FDArray[i];\n      delete dict.FontName;\n      if (dict.Private && dict.Private.Subrs) {\n        dict.Private = Object.assign({}, dict.Private);\n        dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]);\n      }\n    }\n    return;\n  };\n  _proto42.createCIDFontdict = function createCIDFontdict(topDict) {\n    var used_subrs = {};\n    for (var _iterator75 = _createForOfIteratorHelperLoose(this.glyphs), _step75; !(_step75 = _iterator75()).done;) {\n      var gid = _step75.value;\n      var glyph = this.font.getGlyph(gid);\n      var path = glyph.path; // this causes the glyph to be parsed\n\n      for (var subr in glyph._usedSubrs) {\n        used_subrs[subr] = true;\n      }\n    }\n    var privateDict = Object.assign({}, this.cff.topDict.Private);\n    if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) {\n      privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs);\n    }\n    topDict.FDArray = [{\n      Private: privateDict\n    }];\n    return topDict.FDSelect = {\n      version: 3,\n      nRanges: 1,\n      ranges: [{\n        first: 0,\n        fd: 0\n      }],\n      sentinel: this.charstrings.length\n    };\n  };\n  _proto42.addString = function addString(string) {\n    if (!string) {\n      return null;\n    }\n    if (!this.strings) {\n      this.strings = [];\n    }\n    this.strings.push(string);\n    return standardStrings.length + this.strings.length - 1;\n  };\n  _proto42.encode = function encode(stream) {\n    this.subsetCharstrings();\n    var charset = {\n      version: this.charstrings.length > 255 ? 2 : 1,\n      ranges: [{\n        first: 1,\n        nLeft: this.charstrings.length - 2\n      }]\n    };\n    var topDict = Object.assign({}, this.cff.topDict);\n    topDict.Private = null;\n    topDict.charset = charset;\n    topDict.Encoding = null;\n    topDict.CharStrings = this.charstrings;\n    for (var _i24 = 0, _arr2 = ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName']; _i24 < _arr2.length; _i24++) {\n      var key = _arr2[_i24];\n      topDict[key] = this.addString(this.cff.string(topDict[key]));\n    }\n    topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0];\n    topDict.CIDCount = this.charstrings.length;\n    if (this.cff.isCIDFont) {\n      this.subsetFontdict(topDict);\n    } else {\n      this.createCIDFontdict(topDict);\n    }\n    var top = {\n      version: 1,\n      hdrSize: this.cff.hdrSize,\n      offSize: 4,\n      header: this.cff.header,\n      nameIndex: [this.cff.postscriptName],\n      topDictIndex: [topDict],\n      stringIndex: this.strings,\n      globalSubrIndex: this.gsubrs\n    };\n    CFFTop.encode(stream, top);\n  };\n  return CFFSubset;\n}(Subset);\nvar _class$4;\n/**\n * This is the base class for all SFNT-based font formats in fontkit.\n * It supports TrueType, and PostScript glyphs, and several color glyph formats.\n */\n\nvar TTFFont = (_class$4 = /*#__PURE__*/function () {\n  TTFFont.probe = function probe(buffer) {\n    var format = buffer.toString('ascii', 0, 4);\n    return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0);\n  };\n  function TTFFont(stream, variationCoords) {\n    if (variationCoords === void 0) {\n      variationCoords = null;\n    }\n    this.defaultLanguage = null;\n    this.stream = stream;\n    this.variationCoords = variationCoords;\n    this._directoryPos = this.stream.pos;\n    this._tables = {};\n    this._glyphs = {};\n    this._decodeDirectory(); // define properties for each table to lazily parse\n\n    for (var tag in this.directory.tables) {\n      var table = this.directory.tables[tag];\n      if (tables[tag] && table.length > 0) {\n        Object.defineProperty(this, tag, {\n          get: this._getTable.bind(this, table)\n        });\n      }\n    }\n  }\n  var _proto43 = TTFFont.prototype;\n  _proto43.setDefaultLanguage = function setDefaultLanguage(lang) {\n    if (lang === void 0) {\n      lang = null;\n    }\n    this.defaultLanguage = lang;\n  };\n  _proto43._getTable = function _getTable(table) {\n    if (!(table.tag in this._tables)) {\n      try {\n        this._tables[table.tag] = this._decodeTable(table);\n      } catch (e) {\n        if (fontkit.logErrors) {\n          console.error(\"Error decoding table \".concat(table.tag));\n          console.error(e.stack);\n        }\n      }\n    }\n    return this._tables[table.tag];\n  };\n  _proto43._getTableStream = function _getTableStream(tag) {\n    var table = this.directory.tables[tag];\n    if (table) {\n      this.stream.pos = table.offset;\n      return this.stream;\n    }\n    return null;\n  };\n  _proto43._decodeDirectory = function _decodeDirectory() {\n    return this.directory = Directory.decode(this.stream, {\n      _startOffset: 0\n    });\n  };\n  _proto43._decodeTable = function _decodeTable(table) {\n    var pos = this.stream.pos;\n    var stream = this._getTableStream(table.tag);\n    var result = tables[table.tag].decode(stream, this, table.length);\n    this.stream.pos = pos;\n    return result;\n  }\n  /**\n   * Gets a string from the font's `name` table\n   * `lang` is a BCP-47 language code.\n   * @return {string}\n   */;\n  _proto43.getName = function getName(key, lang) {\n    if (lang === void 0) {\n      lang = this.defaultLanguage || fontkit.defaultLanguage;\n    }\n    var record = this.name && this.name.records[key];\n    if (record) {\n      // Attempt to retrieve the entry, depending on which translation is available:\n      return record[lang] || record[this.defaultLanguage] || record[fontkit.defaultLanguage] || record['en'] || record[Object.keys(record)[0]] // Seriously, ANY language would be fine\n      || null;\n    }\n    return null;\n  }\n  /**\n   * The unique PostScript name for this font, e.g. \"Helvetica-Bold\"\n   * @type {string}\n   */;\n  /**\n   * Returns whether there is glyph in the font for the given unicode code point.\n   *\n   * @param {number} codePoint\n   * @return {boolean}\n   */\n  _proto43.hasGlyphForCodePoint = function hasGlyphForCodePoint(codePoint) {\n    return !!this._cmapProcessor.lookup(codePoint);\n  }\n  /**\n   * Maps a single unicode code point to a Glyph object.\n   * Does not perform any advanced substitutions (there is no context to do so).\n   *\n   * @param {number} codePoint\n   * @return {Glyph}\n   */;\n  _proto43.glyphForCodePoint = function glyphForCodePoint(codePoint) {\n    return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]);\n  }\n  /**\n   * Returns an array of Glyph objects for the given string.\n   * This is only a one-to-one mapping from characters to glyphs.\n   * For most uses, you should use font.layout (described below), which\n   * provides a much more advanced mapping supporting AAT and OpenType shaping.\n   *\n   * @param {string} string\n   * @return {Glyph[]}\n   */;\n  _proto43.glyphsForString = function glyphsForString(string) {\n    var glyphs = [];\n    var len = string.length;\n    var idx = 0;\n    var last = -1;\n    var state = -1;\n    while (idx <= len) {\n      var code = 0;\n      var nextState = 0;\n      if (idx < len) {\n        // Decode the next codepoint from UTF 16\n        code = string.charCodeAt(idx++);\n        if (0xd800 <= code && code <= 0xdbff && idx < len) {\n          var next = string.charCodeAt(idx);\n          if (0xdc00 <= next && next <= 0xdfff) {\n            idx++;\n            code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000;\n          }\n        } // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise.\n\n        nextState = 0xfe00 <= code && code <= 0xfe0f || 0xe0100 <= code && code <= 0xe01ef ? 1 : 0;\n      } else {\n        idx++;\n      }\n      if (state === 0 && nextState === 1) {\n        // Variation selector following normal codepoint.\n        glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code]));\n      } else if (state === 0 && nextState === 0) {\n        // Normal codepoint following normal codepoint.\n        glyphs.push(this.glyphForCodePoint(last));\n      }\n      last = code;\n      state = nextState;\n    }\n    return glyphs;\n  };\n  /**\n   * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string.\n   *\n   * @param {string} string\n   * @param {string[]} [userFeatures]\n   * @param {string} [script]\n   * @param {string} [language]\n   * @param {string} [direction]\n   * @return {GlyphRun}\n   */\n  _proto43.layout = function layout(string, userFeatures, script, language, direction) {\n    return this._layoutEngine.layout(string, userFeatures, script, language, direction);\n  }\n  /**\n   * Returns an array of strings that map to the given glyph id.\n   * @param {number} gid - glyph id\n   */;\n  _proto43.stringsForGlyph = function stringsForGlyph(gid) {\n    return this._layoutEngine.stringsForGlyph(gid);\n  }\n  /**\n   * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm)\n   * (or mapped AAT tags) supported by the font.\n   * The features parameter is an array of OpenType feature tags to be applied in addition to the default set.\n   * If this is an AAT font, the OpenType feature tags are mapped to AAT features.\n   *\n   * @type {string[]}\n   */;\n  _proto43.getAvailableFeatures = function getAvailableFeatures(script, language) {\n    return this._layoutEngine.getAvailableFeatures(script, language);\n  };\n  _proto43._getBaseGlyph = function _getBaseGlyph(glyph, characters) {\n    if (characters === void 0) {\n      characters = [];\n    }\n    if (!this._glyphs[glyph]) {\n      if (this.directory.tables.glyf) {\n        this._glyphs[glyph] = new TTFGlyph(glyph, characters, this);\n      } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) {\n        this._glyphs[glyph] = new CFFGlyph(glyph, characters, this);\n      }\n    }\n    return this._glyphs[glyph] || null;\n  }\n  /**\n   * Returns a glyph object for the given glyph id.\n   * You can pass the array of code points this glyph represents for\n   * your use later, and it will be stored in the glyph object.\n   *\n   * @param {number} glyph\n   * @param {number[]} characters\n   * @return {Glyph}\n   */;\n  _proto43.getGlyph = function getGlyph(glyph, characters) {\n    if (characters === void 0) {\n      characters = [];\n    }\n    if (!this._glyphs[glyph]) {\n      if (this.directory.tables.sbix) {\n        this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this);\n      } else if (this.directory.tables.COLR && this.directory.tables.CPAL) {\n        this._glyphs[glyph] = new COLRGlyph(glyph, characters, this);\n      } else {\n        this._getBaseGlyph(glyph, characters);\n      }\n    }\n    return this._glyphs[glyph] || null;\n  }\n  /**\n   * Returns a Subset for this font.\n   * @return {Subset}\n   */;\n  _proto43.createSubset = function createSubset() {\n    if (this.directory.tables['CFF ']) {\n      return new CFFSubset(this);\n    }\n    return new TTFSubset(this);\n  }\n  /**\n   * Returns an object describing the available variation axes\n   * that this font supports. Keys are setting tags, and values\n   * contain the axis name, range, and default value.\n   *\n   * @type {object}\n   */;\n  /**\n   * Returns a new font with the given variation settings applied.\n   * Settings can either be an instance name, or an object containing\n   * variation tags as specified by the `variationAxes` property.\n   *\n   * @param {object} settings\n   * @return {TTFFont}\n   */\n  _proto43.getVariation = function getVariation(settings) {\n    if (!(this.directory.tables.fvar && (this.directory.tables.gvar && this.directory.tables.glyf || this.directory.tables.CFF2))) {\n      throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.');\n    }\n    if (typeof settings === 'string') {\n      settings = this.namedVariations[settings];\n    }\n    if (typeof settings !== 'object') {\n      throw new Error('Variation settings must be either a variation name or settings object.');\n    } // normalize the coordinates\n\n    var coords = this.fvar.axis.map(function (axis, i) {\n      var axisTag = axis.axisTag.trim();\n      if (axisTag in settings) {\n        return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag]));\n      } else {\n        return axis.defaultValue;\n      }\n    });\n    var stream = new r.DecodeStream(this.stream.buffer);\n    stream.pos = this._directoryPos;\n    var font = new TTFFont(stream, coords);\n    font._tables = this._tables;\n    return font;\n  };\n  // Standardized format plugin API\n  _proto43.getFont = function getFont(name) {\n    return this.getVariation(name);\n  };\n  _createClass(TTFFont, [{\n    key: \"postscriptName\",\n    get: function get() {\n      return this.getName('postscriptName');\n    }\n    /**\n     * The font's full name, e.g. \"Helvetica Bold\"\n     * @type {string}\n     */\n  }, {\n    key: \"fullName\",\n    get: function get() {\n      return this.getName('fullName');\n    }\n    /**\n     * The font's family name, e.g. \"Helvetica\"\n     * @type {string}\n     */\n  }, {\n    key: \"familyName\",\n    get: function get() {\n      return this.getName('fontFamily');\n    }\n    /**\n     * The font's sub-family, e.g. \"Bold\".\n     * @type {string}\n     */\n  }, {\n    key: \"subfamilyName\",\n    get: function get() {\n      return this.getName('fontSubfamily');\n    }\n    /**\n     * The font's copyright information\n     * @type {string}\n     */\n  }, {\n    key: \"copyright\",\n    get: function get() {\n      return this.getName('copyright');\n    }\n    /**\n     * The font's version number\n     * @type {string}\n     */\n  }, {\n    key: \"version\",\n    get: function get() {\n      return this.getName('version');\n    }\n    /**\n     * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography))\n     * @type {number}\n     */\n  }, {\n    key: \"ascent\",\n    get: function get() {\n      return this.hhea.ascent;\n    }\n    /**\n     * The font’s [descender](https://en.wikipedia.org/wiki/Descender)\n     * @type {number}\n     */\n  }, {\n    key: \"descent\",\n    get: function get() {\n      return this.hhea.descent;\n    }\n    /**\n     * The amount of space that should be included between lines\n     * @type {number}\n     */\n  }, {\n    key: \"lineGap\",\n    get: function get() {\n      return this.hhea.lineGap;\n    }\n    /**\n     * The offset from the normal underline position that should be used\n     * @type {number}\n     */\n  }, {\n    key: \"underlinePosition\",\n    get: function get() {\n      return this.post.underlinePosition;\n    }\n    /**\n     * The weight of the underline that should be used\n     * @type {number}\n     */\n  }, {\n    key: \"underlineThickness\",\n    get: function get() {\n      return this.post.underlineThickness;\n    }\n    /**\n     * If this is an italic font, the angle the cursor should be drawn at to match the font design\n     * @type {number}\n     */\n  }, {\n    key: \"italicAngle\",\n    get: function get() {\n      return this.post.italicAngle;\n    }\n    /**\n     * The height of capital letters above the baseline.\n     * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details.\n     * @type {number}\n     */\n  }, {\n    key: \"capHeight\",\n    get: function get() {\n      var os2 = this['OS/2'];\n      return os2 ? os2.capHeight : this.ascent;\n    }\n    /**\n     * The height of lower case letters in the font.\n     * See [here](https://en.wikipedia.org/wiki/X-height) for more details.\n     * @type {number}\n     */\n  }, {\n    key: \"xHeight\",\n    get: function get() {\n      var os2 = this['OS/2'];\n      return os2 ? os2.xHeight : 0;\n    }\n    /**\n     * The number of glyphs in the font.\n     * @type {number}\n     */\n  }, {\n    key: \"numGlyphs\",\n    get: function get() {\n      return this.maxp.numGlyphs;\n    }\n    /**\n     * The size of the font’s internal coordinate grid\n     * @type {number}\n     */\n  }, {\n    key: \"unitsPerEm\",\n    get: function get() {\n      return this.head.unitsPerEm;\n    }\n    /**\n     * The font’s bounding box, i.e. the box that encloses all glyphs in the font.\n     * @type {BBox}\n     */\n  }, {\n    key: \"bbox\",\n    get: function get() {\n      return Object.freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax));\n    }\n  }, {\n    key: \"_cmapProcessor\",\n    get: function get() {\n      return new CmapProcessor(this.cmap);\n    }\n    /**\n     * An array of all of the unicode code points supported by the font.\n     * @type {number[]}\n     */\n  }, {\n    key: \"characterSet\",\n    get: function get() {\n      return this._cmapProcessor.getCharacterSet();\n    }\n  }, {\n    key: \"_layoutEngine\",\n    get: function get() {\n      return new LayoutEngine(this);\n    }\n  }, {\n    key: \"availableFeatures\",\n    get: function get() {\n      return this._layoutEngine.getAvailableFeatures();\n    }\n  }, {\n    key: \"variationAxes\",\n    get: function get() {\n      var res = {};\n      if (!this.fvar) {\n        return res;\n      }\n      for (var _iterator76 = _createForOfIteratorHelperLoose(this.fvar.axis), _step76; !(_step76 = _iterator76()).done;) {\n        var axis = _step76.value;\n        res[axis.axisTag.trim()] = {\n          name: axis.name.en,\n          min: axis.minValue,\n          default: axis.defaultValue,\n          max: axis.maxValue\n        };\n      }\n      return res;\n    }\n    /**\n     * Returns an object describing the named variation instances\n     * that the font designer has specified. Keys are variation names\n     * and values are the variation settings for this instance.\n     *\n     * @type {object}\n     */\n  }, {\n    key: \"namedVariations\",\n    get: function get() {\n      var res = {};\n      if (!this.fvar) {\n        return res;\n      }\n      for (var _iterator77 = _createForOfIteratorHelperLoose(this.fvar.instance), _step77; !(_step77 = _iterator77()).done;) {\n        var instance = _step77.value;\n        var settings = {};\n        for (var i = 0; i < this.fvar.axis.length; i++) {\n          var axis = this.fvar.axis[i];\n          settings[axis.axisTag.trim()] = instance.coord[i];\n        }\n        res[instance.name.en] = settings;\n      }\n      return res;\n    }\n  }, {\n    key: \"_variationProcessor\",\n    get: function get() {\n      if (!this.fvar) {\n        return null;\n      }\n      var variationCoords = this.variationCoords; // Ignore if no variation coords and not CFF2\n\n      if (!variationCoords && !this.CFF2) {\n        return null;\n      }\n      if (!variationCoords) {\n        variationCoords = this.fvar.axis.map(function (axis) {\n          return axis.defaultValue;\n        });\n      }\n      return new GlyphVariationProcessor(this, variationCoords);\n    }\n  }]);\n  return TTFFont;\n}(), (_applyDecoratedDescriptor(_class$4.prototype, \"bbox\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"bbox\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_cmapProcessor\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_cmapProcessor\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"characterSet\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"characterSet\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_layoutEngine\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_layoutEngine\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"variationAxes\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"variationAxes\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"namedVariations\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"namedVariations\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_variationProcessor\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_variationProcessor\"), _class$4.prototype)), _class$4);\nvar WOFFDirectoryEntry = new r.Struct({\n  tag: new r.String(4),\n  offset: new r.Pointer(r.uint32, 'void', {\n    type: 'global'\n  }),\n  compLength: r.uint32,\n  length: r.uint32,\n  origChecksum: r.uint32\n});\nvar WOFFDirectory = new r.Struct({\n  tag: new r.String(4),\n  // should be 'wOFF'\n  flavor: r.uint32,\n  length: r.uint32,\n  numTables: r.uint16,\n  reserved: new r.Reserved(r.uint16),\n  totalSfntSize: r.uint32,\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  metaOffset: r.uint32,\n  metaLength: r.uint32,\n  metaOrigLength: r.uint32,\n  privOffset: r.uint32,\n  privLength: r.uint32,\n  tables: new r.Array(WOFFDirectoryEntry, 'numTables')\n});\nWOFFDirectory.process = function () {\n  var tables = {};\n  for (var _iterator78 = _createForOfIteratorHelperLoose(this.tables), _step78; !(_step78 = _iterator78()).done;) {\n    var table = _step78.value;\n    tables[table.tag] = table;\n  }\n  this.tables = tables;\n};\nvar WOFFFont = /*#__PURE__*/function (_TTFFont) {\n  _inheritsLoose(WOFFFont, _TTFFont);\n  function WOFFFont() {\n    return _TTFFont.apply(this, arguments) || this;\n  }\n  WOFFFont.probe = function probe(buffer) {\n    return buffer.toString('ascii', 0, 4) === 'wOFF';\n  };\n  var _proto44 = WOFFFont.prototype;\n  _proto44._decodeDirectory = function _decodeDirectory() {\n    this.directory = WOFFDirectory.decode(this.stream, {\n      _startOffset: 0\n    });\n  };\n  _proto44._getTableStream = function _getTableStream(tag) {\n    var table = this.directory.tables[tag];\n    if (table) {\n      this.stream.pos = table.offset;\n      if (table.compLength < table.length) {\n        this.stream.pos += 2; // skip deflate header\n\n        var outBuffer = Buffer.alloc(table.length);\n        var buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer);\n        return new r.DecodeStream(buf);\n      } else {\n        return this.stream;\n      }\n    }\n    return null;\n  };\n  return WOFFFont;\n}(TTFFont);\n/**\n * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently.\n */\nvar WOFF2Glyph = /*#__PURE__*/function (_TTFGlyph2) {\n  _inheritsLoose(WOFF2Glyph, _TTFGlyph2);\n  function WOFF2Glyph() {\n    return _TTFGlyph2.apply(this, arguments) || this;\n  }\n  var _proto45 = WOFF2Glyph.prototype;\n  _proto45._decode = function _decode() {\n    // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data.\n    return this._font._transformedGlyphs[this.id];\n  };\n  _proto45._getCBox = function _getCBox() {\n    return this.path.bbox;\n  };\n  return WOFF2Glyph;\n}(TTFGlyph);\nvar Base128 = {\n  decode: function decode(stream) {\n    var result = 0;\n    var iterable = [0, 1, 2, 3, 4];\n    for (var j = 0; j < iterable.length; j++) {\n      var code = stream.readUInt8(); // If any of the top seven bits are set then we're about to overflow.\n\n      if (result & 0xe0000000) {\n        throw new Error('Overflow');\n      }\n      result = result << 7 | code & 0x7f;\n      if ((code & 0x80) === 0) {\n        return result;\n      }\n    }\n    throw new Error('Bad base 128 number');\n  }\n};\nvar knownTags = ['cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ', 'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp', 'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF', 'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL', 'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc', 'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx', 'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill'];\nvar WOFF2DirectoryEntry = new r.Struct({\n  flags: r.uint8,\n  customTag: new r.Optional(new r.String(4), function (t) {\n    return (t.flags & 0x3f) === 0x3f;\n  }),\n  tag: function tag(t) {\n    return t.customTag || knownTags[t.flags & 0x3f];\n  },\n  // || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); },\n  length: Base128,\n  transformVersion: function transformVersion(t) {\n    return t.flags >>> 6 & 0x03;\n  },\n  transformed: function transformed(t) {\n    return t.tag === 'glyf' || t.tag === 'loca' ? t.transformVersion === 0 : t.transformVersion !== 0;\n  },\n  transformLength: new r.Optional(Base128, function (t) {\n    return t.transformed;\n  })\n});\nvar WOFF2Directory = new r.Struct({\n  tag: new r.String(4),\n  // should be 'wOF2'\n  flavor: r.uint32,\n  length: r.uint32,\n  numTables: r.uint16,\n  reserved: new r.Reserved(r.uint16),\n  totalSfntSize: r.uint32,\n  totalCompressedSize: r.uint32,\n  majorVersion: r.uint16,\n  minorVersion: r.uint16,\n  metaOffset: r.uint32,\n  metaLength: r.uint32,\n  metaOrigLength: r.uint32,\n  privOffset: r.uint32,\n  privLength: r.uint32,\n  tables: new r.Array(WOFF2DirectoryEntry, 'numTables')\n});\nWOFF2Directory.process = function () {\n  var tables = {};\n  for (var i = 0; i < this.tables.length; i++) {\n    var table = this.tables[i];\n    tables[table.tag] = table;\n  }\n  return this.tables = tables;\n};\n\n/**\n * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2\n * See spec here: http://www.w3.org/TR/WOFF2/\n */\nvar WOFF2Font = /*#__PURE__*/function (_TTFFont2) {\n  _inheritsLoose(WOFF2Font, _TTFFont2);\n  function WOFF2Font() {\n    return _TTFFont2.apply(this, arguments) || this;\n  }\n  WOFF2Font.probe = function probe(buffer) {\n    return buffer.toString('ascii', 0, 4) === 'wOF2';\n  };\n  var _proto46 = WOFF2Font.prototype;\n  _proto46._decodeDirectory = function _decodeDirectory() {\n    this.directory = WOFF2Directory.decode(this.stream);\n    this._dataPos = this.stream.pos;\n  };\n  _proto46._decompress = function _decompress() {\n    // decompress data and setup table offsets if we haven't already\n    if (!this._decompressed) {\n      this.stream.pos = this._dataPos;\n      var buffer = this.stream.readBuffer(this.directory.totalCompressedSize);\n      var decompressedSize = 0;\n      for (var tag in this.directory.tables) {\n        var entry = this.directory.tables[tag];\n        entry.offset = decompressedSize;\n        decompressedSize += entry.transformLength != null ? entry.transformLength : entry.length;\n      }\n      var decompressed = brotli(buffer, decompressedSize);\n      if (!decompressed) {\n        throw new Error('Error decoding compressed data in WOFF2');\n      }\n      this.stream = new r.DecodeStream(Buffer.from(decompressed));\n      this._decompressed = true;\n    }\n  };\n  _proto46._decodeTable = function _decodeTable(table) {\n    this._decompress();\n    return _TTFFont2.prototype._decodeTable.call(this, table);\n  } // Override this method to get a glyph and return our\n  // custom subclass if there is a glyf table.\n  ;\n  _proto46._getBaseGlyph = function _getBaseGlyph(glyph, characters) {\n    if (characters === void 0) {\n      characters = [];\n    }\n    if (!this._glyphs[glyph]) {\n      if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) {\n        if (!this._transformedGlyphs) {\n          this._transformGlyfTable();\n        }\n        return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this);\n      } else {\n        return _TTFFont2.prototype._getBaseGlyph.call(this, glyph, characters);\n      }\n    }\n  };\n  _proto46._transformGlyfTable = function _transformGlyfTable() {\n    this._decompress();\n    this.stream.pos = this.directory.tables.glyf.offset;\n    var table = GlyfTable.decode(this.stream);\n    var glyphs = [];\n    for (var index = 0; index < table.numGlyphs; index++) {\n      var glyph = {};\n      var nContours = table.nContours.readInt16BE();\n      glyph.numberOfContours = nContours;\n      if (nContours > 0) {\n        // simple glyph\n        var nPoints = [];\n        var totalPoints = 0;\n        for (var i = 0; i < nContours; i++) {\n          var _r = read255UInt16(table.nPoints);\n          totalPoints += _r;\n          nPoints.push(totalPoints);\n        }\n        glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints);\n        for (var _i = 0; _i < nContours; _i++) {\n          glyph.points[nPoints[_i] - 1].endContour = true;\n        }\n        var instructionSize = read255UInt16(table.glyphs);\n      } else if (nContours < 0) {\n        // composite glyph\n        var haveInstructions = TTFGlyph.prototype._decodeComposite.call({\n          _font: this\n        }, glyph, table.composites);\n        if (haveInstructions) {\n          var instructionSize = read255UInt16(table.glyphs);\n        }\n      }\n      glyphs.push(glyph);\n    }\n    this._transformedGlyphs = glyphs;\n  };\n  return WOFF2Font;\n}(TTFFont); // Special class that accepts a length and returns a sub-stream for that data\nvar Substream = /*#__PURE__*/function () {\n  function Substream(length) {\n    this.length = length;\n    this._buf = new r.Buffer(length);\n  }\n  var _proto47 = Substream.prototype;\n  _proto47.decode = function decode(stream, parent) {\n    return new r.DecodeStream(this._buf.decode(stream, parent));\n  };\n  return Substream;\n}(); // This struct represents the entire glyf table\nvar GlyfTable = new r.Struct({\n  version: r.uint32,\n  numGlyphs: r.uint16,\n  indexFormat: r.uint16,\n  nContourStreamSize: r.uint32,\n  nPointsStreamSize: r.uint32,\n  flagStreamSize: r.uint32,\n  glyphStreamSize: r.uint32,\n  compositeStreamSize: r.uint32,\n  bboxStreamSize: r.uint32,\n  instructionStreamSize: r.uint32,\n  nContours: new Substream('nContourStreamSize'),\n  nPoints: new Substream('nPointsStreamSize'),\n  flags: new Substream('flagStreamSize'),\n  glyphs: new Substream('glyphStreamSize'),\n  composites: new Substream('compositeStreamSize'),\n  bboxes: new Substream('bboxStreamSize'),\n  instructions: new Substream('instructionStreamSize')\n});\nvar WORD_CODE = 253;\nvar ONE_MORE_BYTE_CODE2 = 254;\nvar ONE_MORE_BYTE_CODE1 = 255;\nvar LOWEST_U_CODE = 253;\nfunction read255UInt16(stream) {\n  var code = stream.readUInt8();\n  if (code === WORD_CODE) {\n    return stream.readUInt16BE();\n  }\n  if (code === ONE_MORE_BYTE_CODE1) {\n    return stream.readUInt8() + LOWEST_U_CODE;\n  }\n  if (code === ONE_MORE_BYTE_CODE2) {\n    return stream.readUInt8() + LOWEST_U_CODE * 2;\n  }\n  return code;\n}\nfunction withSign(flag, baseval) {\n  return flag & 1 ? baseval : -baseval;\n}\nfunction decodeTriplet(flags, glyphs, nPoints) {\n  var y;\n  var x = y = 0;\n  var res = [];\n  for (var i = 0; i < nPoints; i++) {\n    var dx = 0,\n      dy = 0;\n    var flag = flags.readUInt8();\n    var onCurve = !(flag >> 7);\n    flag &= 0x7f;\n    if (flag < 10) {\n      dx = 0;\n      dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8());\n    } else if (flag < 20) {\n      dx = withSign(flag, ((flag - 10 & 14) << 7) + glyphs.readUInt8());\n      dy = 0;\n    } else if (flag < 84) {\n      var b0 = flag - 20;\n      var b1 = glyphs.readUInt8();\n      dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4));\n      dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f));\n    } else if (flag < 120) {\n      var b0 = flag - 84;\n      dx = withSign(flag, 1 + (b0 / 12 << 8) + glyphs.readUInt8());\n      dy = withSign(flag >> 1, 1 + (b0 % 12 >> 2 << 8) + glyphs.readUInt8());\n    } else if (flag < 124) {\n      var b1 = glyphs.readUInt8();\n      var b2 = glyphs.readUInt8();\n      dx = withSign(flag, (b1 << 4) + (b2 >> 4));\n      dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8());\n    } else {\n      dx = withSign(flag, glyphs.readUInt16BE());\n      dy = withSign(flag >> 1, glyphs.readUInt16BE());\n    }\n    x += dx;\n    y += dy;\n    res.push(new Point(onCurve, false, x, y));\n  }\n  return res;\n}\nvar TTCHeader = new r.VersionedStruct(r.uint32, {\n  0x00010000: {\n    numFonts: r.uint32,\n    offsets: new r.Array(r.uint32, 'numFonts')\n  },\n  0x00020000: {\n    numFonts: r.uint32,\n    offsets: new r.Array(r.uint32, 'numFonts'),\n    dsigTag: r.uint32,\n    dsigLength: r.uint32,\n    dsigOffset: r.uint32\n  }\n});\nvar TrueTypeCollection = /*#__PURE__*/function () {\n  TrueTypeCollection.probe = function probe(buffer) {\n    return buffer.toString('ascii', 0, 4) === 'ttcf';\n  };\n  function TrueTypeCollection(stream) {\n    this.stream = stream;\n    if (stream.readString(4) !== 'ttcf') {\n      throw new Error('Not a TrueType collection');\n    }\n    this.header = TTCHeader.decode(stream);\n  }\n  var _proto48 = TrueTypeCollection.prototype;\n  _proto48.getFont = function getFont(name) {\n    for (var _iterator79 = _createForOfIteratorHelperLoose(this.header.offsets), _step79; !(_step79 = _iterator79()).done;) {\n      var offset = _step79.value;\n      var stream = new r.DecodeStream(this.stream.buffer);\n      stream.pos = offset;\n      var font = new TTFFont(stream);\n      if (font.postscriptName === name) {\n        return font;\n      }\n    }\n    return null;\n  };\n  _createClass(TrueTypeCollection, [{\n    key: \"fonts\",\n    get: function get() {\n      var fonts = [];\n      for (var _iterator80 = _createForOfIteratorHelperLoose(this.header.offsets), _step80; !(_step80 = _iterator80()).done;) {\n        var offset = _step80.value;\n        var stream = new r.DecodeStream(this.stream.buffer);\n        stream.pos = offset;\n        fonts.push(new TTFFont(stream));\n      }\n      return fonts;\n    }\n  }]);\n  return TrueTypeCollection;\n}();\nvar DFontName = new r.String(r.uint8);\nvar DFontData = new r.Struct({\n  len: r.uint32,\n  buf: new r.Buffer('len')\n});\nvar Ref = new r.Struct({\n  id: r.uint16,\n  nameOffset: r.int16,\n  attr: r.uint8,\n  dataOffset: r.uint24,\n  handle: r.uint32\n});\nvar Type = new r.Struct({\n  name: new r.String(4),\n  maxTypeIndex: r.uint16,\n  refList: new r.Pointer(r.uint16, new r.Array(Ref, function (t) {\n    return t.maxTypeIndex + 1;\n  }), {\n    type: 'parent'\n  })\n});\nvar TypeList = new r.Struct({\n  length: r.uint16,\n  types: new r.Array(Type, function (t) {\n    return t.length + 1;\n  })\n});\nvar DFontMap = new r.Struct({\n  reserved: new r.Reserved(r.uint8, 24),\n  typeList: new r.Pointer(r.uint16, TypeList),\n  nameListOffset: new r.Pointer(r.uint16, 'void')\n});\nvar DFontHeader = new r.Struct({\n  dataOffset: r.uint32,\n  map: new r.Pointer(r.uint32, DFontMap),\n  dataLength: r.uint32,\n  mapLength: r.uint32\n});\nvar DFont = /*#__PURE__*/function () {\n  DFont.probe = function probe(buffer) {\n    var stream = new r.DecodeStream(buffer);\n    try {\n      var header = DFontHeader.decode(stream);\n    } catch (e) {\n      return false;\n    }\n    for (var _iterator81 = _createForOfIteratorHelperLoose(header.map.typeList.types), _step81; !(_step81 = _iterator81()).done;) {\n      var type = _step81.value;\n      if (type.name === 'sfnt') {\n        return true;\n      }\n    }\n    return false;\n  };\n  function DFont(stream) {\n    this.stream = stream;\n    this.header = DFontHeader.decode(this.stream);\n    for (var _iterator82 = _createForOfIteratorHelperLoose(this.header.map.typeList.types), _step82; !(_step82 = _iterator82()).done;) {\n      var type = _step82.value;\n      for (var _iterator83 = _createForOfIteratorHelperLoose(type.refList), _step83; !(_step83 = _iterator83()).done;) {\n        var ref = _step83.value;\n        if (ref.nameOffset >= 0) {\n          this.stream.pos = ref.nameOffset + this.header.map.nameListOffset;\n          ref.name = DFontName.decode(this.stream);\n        } else {\n          ref.name = null;\n        }\n      }\n      if (type.name === 'sfnt') {\n        this.sfnt = type;\n      }\n    }\n  }\n  var _proto49 = DFont.prototype;\n  _proto49.getFont = function getFont(name) {\n    if (!this.sfnt) {\n      return null;\n    }\n    for (var _iterator84 = _createForOfIteratorHelperLoose(this.sfnt.refList), _step84; !(_step84 = _iterator84()).done;) {\n      var ref = _step84.value;\n      var pos = this.header.dataOffset + ref.dataOffset + 4;\n      var stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n      var font = new TTFFont(stream);\n      if (font.postscriptName === name) {\n        return font;\n      }\n    }\n    return null;\n  };\n  _createClass(DFont, [{\n    key: \"fonts\",\n    get: function get() {\n      var fonts = [];\n      for (var _iterator85 = _createForOfIteratorHelperLoose(this.sfnt.refList), _step85; !(_step85 = _iterator85()).done;) {\n        var ref = _step85.value;\n        var pos = this.header.dataOffset + ref.dataOffset + 4;\n        var stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n        fonts.push(new TTFFont(stream));\n      }\n      return fonts;\n    }\n  }]);\n  return DFont;\n}();\nfontkit.registerFormat(TTFFont);\nfontkit.registerFormat(WOFFFont);\nfontkit.registerFormat(WOFF2Font);\nfontkit.registerFormat(TrueTypeCollection);\nfontkit.registerFormat(DFont);\nmodule.exports = fontkit;\n\n/***/ }),\n\n/***/ 7337:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UnicodeTrie = __webpack_require__(4781);\n\nvar base64 = __webpack_require__(9742);\nvar _require = __webpack_require__(2055),\n  BK = _require.BK,\n  CR = _require.CR,\n  LF = _require.LF,\n  NL = _require.NL,\n  SG = _require.SG,\n  WJ = _require.WJ,\n  SP = _require.SP,\n  ZWJ = _require.ZWJ,\n  BA = _require.BA,\n  HY = _require.HY,\n  NS = _require.NS,\n  AI = _require.AI,\n  AL = _require.AL,\n  CJ = _require.CJ,\n  HL = _require.HL,\n  RI = _require.RI,\n  SA = _require.SA,\n  XX = _require.XX;\nvar _require2 = __webpack_require__(8383),\n  DI_BRK = _require2.DI_BRK,\n  IN_BRK = _require2.IN_BRK,\n  CI_BRK = _require2.CI_BRK,\n  CP_BRK = _require2.CP_BRK,\n  PR_BRK = _require2.PR_BRK,\n  pairTable = _require2.pairTable;\nvar data = base64.toByteArray(\"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\");\nvar classTrie = new UnicodeTrie(data);\nvar mapClass = function mapClass(c) {\n  switch (c) {\n    case AI:\n      return AL;\n    case SA:\n    case SG:\n    case XX:\n      return AL;\n    case CJ:\n      return NS;\n    default:\n      return c;\n  }\n};\nvar mapFirst = function mapFirst(c) {\n  switch (c) {\n    case LF:\n    case NL:\n      return BK;\n    case SP:\n      return WJ;\n    default:\n      return c;\n  }\n};\nvar Break = function Break(position, required) {\n  if (required === void 0) {\n    required = false;\n  }\n  this.position = position;\n  this.required = required;\n};\nvar LineBreaker = /*#__PURE__*/function () {\n  function LineBreaker(string) {\n    this.string = string;\n    this.pos = 0;\n    this.lastPos = 0;\n    this.curClass = null;\n    this.nextClass = null;\n    this.LB8a = false;\n    this.LB21a = false;\n    this.LB30a = 0;\n  }\n  var _proto = LineBreaker.prototype;\n  _proto.nextCodePoint = function nextCodePoint() {\n    var code = this.string.charCodeAt(this.pos++);\n    var next = this.string.charCodeAt(this.pos);\n\n    // If a surrogate pair\n    if (0xd800 <= code && code <= 0xdbff && 0xdc00 <= next && next <= 0xdfff) {\n      this.pos++;\n      return (code - 0xd800) * 0x400 + (next - 0xdc00) + 0x10000;\n    }\n    return code;\n  };\n  _proto.nextCharClass = function nextCharClass() {\n    return mapClass(classTrie.get(this.nextCodePoint()));\n  };\n  _proto.getSimpleBreak = function getSimpleBreak() {\n    // handle classes not handled by the pair table\n    switch (this.nextClass) {\n      case SP:\n        return false;\n      case BK:\n      case LF:\n      case NL:\n        this.curClass = BK;\n        return false;\n      case CR:\n        this.curClass = CR;\n        return false;\n    }\n    return null;\n  };\n  _proto.getPairTableBreak = function getPairTableBreak(lastClass) {\n    // if not handled already, use the pair table\n    var shouldBreak = false;\n    switch (pairTable[this.curClass][this.nextClass]) {\n      case DI_BRK:\n        // Direct break\n        shouldBreak = true;\n        break;\n      case IN_BRK:\n        // possible indirect break\n        shouldBreak = lastClass === SP;\n        break;\n      case CI_BRK:\n        shouldBreak = lastClass === SP;\n        if (!shouldBreak) {\n          shouldBreak = false;\n          return shouldBreak;\n        }\n        break;\n      case CP_BRK:\n        // prohibited for combining marks\n        if (lastClass !== SP) {\n          return shouldBreak;\n        }\n        break;\n      case PR_BRK:\n        break;\n    }\n    if (this.LB8a) {\n      shouldBreak = false;\n    }\n\n    // Rule LB21a\n    if (this.LB21a && (this.curClass === HY || this.curClass === BA)) {\n      shouldBreak = false;\n      this.LB21a = false;\n    } else {\n      this.LB21a = this.curClass === HL;\n    }\n\n    // Rule LB30a\n    if (this.curClass === RI) {\n      this.LB30a++;\n      if (this.LB30a == 2 && this.nextClass === RI) {\n        shouldBreak = true;\n        this.LB30a = 0;\n      }\n    } else {\n      this.LB30a = 0;\n    }\n    this.curClass = this.nextClass;\n    return shouldBreak;\n  };\n  _proto.nextBreak = function nextBreak() {\n    // get the first char if we're at the beginning of the string\n    if (this.curClass == null) {\n      var firstClass = this.nextCharClass();\n      this.curClass = mapFirst(firstClass);\n      this.nextClass = firstClass;\n      this.LB8a = firstClass === ZWJ;\n      this.LB30a = 0;\n    }\n    while (this.pos < this.string.length) {\n      this.lastPos = this.pos;\n      var lastClass = this.nextClass;\n      this.nextClass = this.nextCharClass();\n\n      // explicit newline\n      if (this.curClass === BK || this.curClass === CR && this.nextClass !== LF) {\n        this.curClass = mapFirst(mapClass(this.nextClass));\n        return new Break(this.lastPos, true);\n      }\n      var shouldBreak = this.getSimpleBreak();\n      if (shouldBreak === null) {\n        shouldBreak = this.getPairTableBreak(lastClass);\n      }\n\n      // Rule LB8a\n      this.LB8a = this.nextClass === ZWJ;\n      if (shouldBreak) {\n        return new Break(this.lastPos);\n      }\n    }\n    if (this.lastPos < this.string.length) {\n      this.lastPos = this.string.length;\n      return new Break(this.string.length);\n    }\n    return null;\n  };\n  return LineBreaker;\n}();\nmodule.exports = LineBreaker;\n\n/***/ }),\n\n/***/ 4927:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!__webpack_require__.g.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = __webpack_require__.g.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n\n\n/***/ }),\n\n/***/ 384:\n/***/ (function(module) {\n\nmodule.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n\n/***/ }),\n\n/***/ 5955:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n\n\nvar isArgumentsObject = __webpack_require__(2584);\nvar isGeneratorFunction = __webpack_require__(8662);\nvar whichTypedArray = __webpack_require__(6430);\nvar isTypedArray = __webpack_require__(5692);\n\nfunction uncurryThis(f) {\n  return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n  var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n  var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n  if (typeof value !== 'object') {\n    return false;\n  }\n  try {\n    prototypeValueOf(value);\n    return true;\n  } catch(e) {\n    return false;\n  }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n    return ArrayBuffer.isView(value);\n  }\n\n  return (\n    isTypedArray(value) ||\n    isDataView(value)\n  );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n  return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n  return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n  return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n  return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n  return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n  return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n  return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n  return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n  return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n  return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n  return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n  return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n  typeof Map !== 'undefined' &&\n  isMapToString(new Map())\n);\n\nfunction isMap(value) {\n  if (typeof Map === 'undefined') {\n    return false;\n  }\n\n  return isMapToString.working\n    ? isMapToString(value)\n    : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n  return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n  typeof Set !== 'undefined' &&\n  isSetToString(new Set())\n);\nfunction isSet(value) {\n  if (typeof Set === 'undefined') {\n    return false;\n  }\n\n  return isSetToString.working\n    ? isSetToString(value)\n    : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n  return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n  typeof WeakMap !== 'undefined' &&\n  isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n  if (typeof WeakMap === 'undefined') {\n    return false;\n  }\n\n  return isWeakMapToString.working\n    ? isWeakMapToString(value)\n    : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n  return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n  typeof WeakSet !== 'undefined' &&\n  isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n  return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n  return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n  if (typeof ArrayBuffer === 'undefined') {\n    return false;\n  }\n\n  return isArrayBufferToString.working\n    ? isArrayBufferToString(value)\n    : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n  return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  typeof DataView !== 'undefined' &&\n  isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n  if (typeof DataView === 'undefined') {\n    return false;\n  }\n\n  return isDataViewToString.working\n    ? isDataViewToString(value)\n    : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n  return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n  if (typeof SharedArrayBufferCopy === 'undefined') {\n    return false;\n  }\n\n  if (typeof isSharedArrayBufferToString.working === 'undefined') {\n    isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n  }\n\n  return isSharedArrayBufferToString.working\n    ? isSharedArrayBufferToString(value)\n    : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n  return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n  return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n  return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n  return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n  return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n  return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n  return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n  return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n  return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n  return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n  return (\n    isNumberObject(value) ||\n    isStringObject(value) ||\n    isBooleanObject(value) ||\n    isBigIntObject(value) ||\n    isSymbolObject(value)\n  );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n  return typeof Uint8Array !== 'undefined' && (\n    isArrayBuffer(value) ||\n    isSharedArrayBuffer(value)\n  );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n  Object.defineProperty(exports, method, {\n    enumerable: false,\n    value: function() {\n      throw new Error(method + ' is not supported in userland');\n    }\n  });\n});\n\n\n/***/ }),\n\n/***/ 9539:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/* provided dependency */ var process = __webpack_require__(4155);\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n  function getOwnPropertyDescriptors(obj) {\n    var keys = Object.keys(obj);\n    var descriptors = {};\n    for (var i = 0; i < keys.length; i++) {\n      descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n    }\n    return descriptors;\n  };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  if (typeof process !== 'undefined' && process.noDeprecation === true) {\n    return fn;\n  }\n\n  // Allow for deprecating things in the process of starting up.\n  if (typeof process === 'undefined') {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n  var debugEnv = process.env.NODE_DEBUG;\n  debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n    .replace(/\\*/g, '.*')\n    .replace(/,/g, '$|^')\n    .toUpperCase();\n  debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (debugEnvRegex.test(set)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').slice(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.slice(1, -1);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = __webpack_require__(5955);\n\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = __webpack_require__(384);\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = __webpack_require__(5717);\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n  if (typeof original !== 'function')\n    throw new TypeError('The \"original\" argument must be of type Function');\n\n  if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n    var fn = original[kCustomPromisifiedSymbol];\n    if (typeof fn !== 'function') {\n      throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n    }\n    Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n      value: fn, enumerable: false, writable: false, configurable: true\n    });\n    return fn;\n  }\n\n  function fn() {\n    var promiseResolve, promiseReject;\n    var promise = new Promise(function (resolve, reject) {\n      promiseResolve = resolve;\n      promiseReject = reject;\n    });\n\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n    args.push(function (err, value) {\n      if (err) {\n        promiseReject(err);\n      } else {\n        promiseResolve(value);\n      }\n    });\n\n    try {\n      original.apply(this, args);\n    } catch (err) {\n      promiseReject(err);\n    }\n\n    return promise;\n  }\n\n  Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n  if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n    value: fn, enumerable: false, writable: false, configurable: true\n  });\n  return Object.defineProperties(\n    fn,\n    getOwnPropertyDescriptors(original)\n  );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n  // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n  // Because `null` is a special error value in callbacks which means \"no error\n  // occurred\", we error-wrap so the callback consumer can distinguish between\n  // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n  if (!reason) {\n    var newReason = new Error('Promise was rejected with a falsy value');\n    newReason.reason = reason;\n    reason = newReason;\n  }\n  return cb(reason);\n}\n\nfunction callbackify(original) {\n  if (typeof original !== 'function') {\n    throw new TypeError('The \"original\" argument must be of type Function');\n  }\n\n  // We DO NOT return the promise as it gives the user a false sense that\n  // the promise is actually somehow related to the callback's execution\n  // and that the callback throwing will reject the promise.\n  function callbackified() {\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n\n    var maybeCb = args.pop();\n    if (typeof maybeCb !== 'function') {\n      throw new TypeError('The last argument must be of type Function');\n    }\n    var self = this;\n    var cb = function() {\n      return maybeCb.apply(self, arguments);\n    };\n    // In true node style we process the callback on `nextTick` with all the\n    // implications (stack, `uncaughtException`, `async_hooks`)\n    original.apply(this, args)\n      .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n            function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n  }\n\n  Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n  Object.defineProperties(callbackified,\n                          getOwnPropertyDescriptors(original));\n  return callbackified;\n}\nexports.callbackify = callbackify;\n\n\n/***/ }),\n\n/***/ 6430:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar forEach = __webpack_require__(4029);\nvar availableTypedArrays = __webpack_require__(3083);\nvar callBound = __webpack_require__(1924);\nvar gOPD = __webpack_require__(7296);\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = __webpack_require__(6410)();\n\nvar g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof g[typedArray] === 'function') {\n\t\t\tvar arr = new g[typedArray]();\n\t\t\tif (Symbol.toStringTag in arr) {\n\t\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t\t}\n\t\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t\t}\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = __webpack_require__(5692);\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n\n\n/***/ }),\n\n/***/ 6513:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// This file is just added for convenience so this repository can be\n// directly checked out into a project's deps folder\nmodule.exports = __webpack_require__(5011);\n\n\n/***/ }),\n\n/***/ 5011:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n(function () {\n  var sax;\n\n  if (\n     true &&\n    module.exports &&\n    !__webpack_require__.g.xmldocAssumeBrowser\n  ) {\n    // We're being used in a Node-like environment\n    sax = __webpack_require__(6099);\n  } else {\n    // assume it's attached to the Window object in a browser\n    sax = this.sax;\n\n    if (!sax) {\n      // no sax for you!\n      throw new Error(\n        \"Expected sax to be defined. Make sure you're including sax.js before this file.\",\n      );\n    }\n  }\n\n  /*\n   * XmlElement is our basic building block. Everything is an XmlElement; even XmlDocument\n   * behaves like an XmlElement by inheriting its attributes and functions.\n   */\n\n  function XmlElement(tag) {\n    // Capture the parser object off of the XmlDocument delegate\n    var parser = delegates[delegates.length - 1].parser;\n\n    this.name = tag.name;\n    this.attr = tag.attributes;\n    this.val = \"\";\n    this.children = [];\n    this.firstChild = null;\n    this.lastChild = null;\n\n    // Assign parse information\n    this.line = parser.line;\n    this.column = parser.column;\n    this.position = parser.position;\n    this.startTagPosition = parser.startTagPosition;\n  }\n\n  // Private methods\n\n  XmlElement.prototype._addChild = function (child) {\n    // add to our children array\n    this.children.push(child);\n\n    // update first/last pointers\n    if (!this.firstChild) this.firstChild = child;\n    this.lastChild = child;\n  };\n\n  // SaxParser handlers\n\n  XmlElement.prototype._opentag = function (tag) {\n    var child = new XmlElement(tag);\n\n    this._addChild(child);\n\n    delegates.unshift(child);\n  };\n\n  XmlElement.prototype._closetag = function () {\n    delegates.shift();\n  };\n\n  XmlElement.prototype._text = function (text) {\n    if (typeof this.children === \"undefined\") return;\n\n    this.val += text;\n\n    this._addChild(new XmlTextNode(text));\n  };\n\n  XmlElement.prototype._cdata = function (cdata) {\n    this.val += cdata;\n\n    this._addChild(new XmlCDataNode(cdata));\n  };\n\n  XmlElement.prototype._comment = function (comment) {\n    if (typeof this.children === \"undefined\") return;\n\n    this._addChild(new XmlCommentNode(comment));\n  };\n\n  XmlElement.prototype._error = function (err) {\n    throw err;\n  };\n\n  // Useful functions\n\n  XmlElement.prototype.eachChild = function (iterator, context) {\n    for (var i = 0, l = this.children.length; i < l; i++)\n      if (this.children[i].type === \"element\")\n        if (\n          iterator.call(context, this.children[i], i, this.children) === false\n        )\n          return;\n  };\n\n  XmlElement.prototype.childNamed = function (name) {\n    for (var i = 0, l = this.children.length; i < l; i++) {\n      var child = this.children[i];\n      if (child.name === name) return child;\n    }\n    return undefined;\n  };\n\n  XmlElement.prototype.childrenNamed = function (name) {\n    var matches = [];\n\n    for (var i = 0, l = this.children.length; i < l; i++)\n      if (this.children[i].name === name) matches.push(this.children[i]);\n\n    return matches;\n  };\n\n  XmlElement.prototype.childWithAttribute = function (name, value) {\n    for (var i = 0, l = this.children.length; i < l; i++) {\n      var child = this.children[i];\n      if (\n        child.type === \"element\" &&\n        ((value && child.attr[name] === value) || (!value && child.attr[name]))\n      )\n        return child;\n    }\n    return undefined;\n  };\n  \n  XmlElement.prototype.descendantsNamed = function (name) {\n     var matches = [];\n\n     for (var i = 0, l = this.children.length; i < l; i++) {\n       var child = this.children[i];\n       if (child.type === \"element\") {\n         if (child.name === name) matches.push(child);\n         matches = matches.concat(child.descendantsNamed(name));\n       }\n     }\n\n     return matches;\n   };\n\n  XmlElement.prototype.descendantWithPath = function (path) {\n    var descendant = this;\n    var components = path.split(\".\");\n\n    for (var i = 0, l = components.length; i < l; i++)\n      if (descendant && descendant.type === \"element\")\n        descendant = descendant.childNamed(components[i]);\n      else return undefined;\n\n    return descendant;\n  };\n\n  XmlElement.prototype.valueWithPath = function (path) {\n    var components = path.split(\"@\");\n    var descendant = this.descendantWithPath(components[0]);\n    if (descendant)\n      return components.length > 1\n        ? descendant.attr[components[1]]\n        : descendant.val;\n    else return undefined;\n  };\n\n  // String formatting (for debugging)\n\n  XmlElement.prototype.toString = function (options) {\n    return this.toStringWithIndent(\"\", options);\n  };\n\n  XmlElement.prototype.toStringWithIndent = function (indent, options) {\n    var s = indent + \"<\" + this.name;\n    var linebreak = options && options.compressed ? \"\" : \"\\n\";\n    var preserveWhitespace = options && options.preserveWhitespace;\n\n    for (var name in this.attr)\n      if (Object.prototype.hasOwnProperty.call(this.attr, name))\n        s += \" \" + name + '=\"' + escapeXML(this.attr[name]) + '\"';\n\n    if (this.children.length === 1 && this.children[0].type !== \"element\") {\n      s += \">\" + this.children[0].toString(options) + \"</\" + this.name + \">\";\n    } else if (this.children.length) {\n      s += \">\" + linebreak;\n\n      var childIndent = indent + (options && options.compressed ? \"\" : \"  \");\n\n      for (var i = 0, l = this.children.length; i < l; i++) {\n        s +=\n          this.children[i].toStringWithIndent(childIndent, options) + linebreak;\n      }\n\n      s += indent + \"</\" + this.name + \">\";\n    } else if (options && options.html) {\n      var whiteList = [\n        \"area\",\n        \"base\",\n        \"br\",\n        \"col\",\n        \"embed\",\n        \"frame\",\n        \"hr\",\n        \"img\",\n        \"input\",\n        \"keygen\",\n        \"link\",\n        \"menuitem\",\n        \"meta\",\n        \"param\",\n        \"source\",\n        \"track\",\n        \"wbr\",\n      ];\n      if (whiteList.indexOf(this.name) !== -1) s += \"/>\";\n      else s += \"></\" + this.name + \">\";\n    } else {\n      s += \"/>\";\n    }\n\n    return s;\n  };\n\n  // Alternative XML nodes\n\n  function XmlTextNode(text) {\n    this.text = text;\n  }\n\n  XmlTextNode.prototype.toString = function (options) {\n    return formatText(escapeXML(this.text), options);\n  };\n\n  XmlTextNode.prototype.toStringWithIndent = function (indent, options) {\n    return indent + this.toString(options);\n  };\n\n  function XmlCDataNode(cdata) {\n    this.cdata = cdata;\n  }\n\n  XmlCDataNode.prototype.toString = function (options) {\n    return \"<![CDATA[\" + formatText(this.cdata, options) + \"]]>\";\n  };\n\n  XmlCDataNode.prototype.toStringWithIndent = function (indent, options) {\n    return indent + this.toString(options);\n  };\n\n  function XmlCommentNode(comment) {\n    this.comment = comment;\n  }\n\n  XmlCommentNode.prototype.toString = function (options) {\n    return \"<!--\" + formatText(escapeXML(this.comment), options) + \"-->\";\n  };\n\n  XmlCommentNode.prototype.toStringWithIndent = function (indent, options) {\n    return indent + this.toString(options);\n  };\n\n  // Node type tag\n\n  XmlElement.prototype.type = \"element\";\n  XmlTextNode.prototype.type = \"text\";\n  XmlCDataNode.prototype.type = \"cdata\";\n  XmlCommentNode.prototype.type = \"comment\";\n\n  /*\n   * XmlDocument is the class we expose to the user; it uses the sax parser to create a hierarchy\n   * of XmlElements.\n   */\n\n  function XmlDocument(xml) {\n    xml && (xml = xml.toString().trim());\n\n    if (!xml) throw new Error(\"No XML to parse!\");\n\n    // Stores doctype (if defined)\n    this.doctype = \"\";\n\n    // Expose the parser to the other delegates while the parser is running\n    this.parser = sax.parser(true); // strict\n    addParserEvents(this.parser);\n\n    // We'll use the file-scoped \"delegates\" var to remember what elements we're currently\n    // parsing; they will push and pop off the stack as we get deeper into the XML hierarchy.\n    // It's safe to use a global because JS is single-threaded.\n    delegates = [this];\n\n    this.parser.write(xml);\n\n    // Remove the parser as it is no longer needed and should not be exposed to clients\n    delete this.parser;\n  }\n\n  // make XmlDocument inherit XmlElement's methods\n  extend(XmlDocument.prototype, XmlElement.prototype);\n\n  XmlDocument.prototype._opentag = function (tag) {\n    if (typeof this.children === \"undefined\")\n      // the first tag we encounter should be the root - we'll \"become\" the root XmlElement\n      XmlElement.call(this, tag);\n    // all other tags will be the root element's children\n    else XmlElement.prototype._opentag.apply(this, arguments);\n  };\n\n  XmlDocument.prototype._doctype = function (doctype) {\n    this.doctype += doctype;\n  };\n\n  // file-scoped global stack of delegates\n  var delegates = null;\n\n  /*\n   * Helper functions\n   */\n\n  function addParserEvents(parser) {\n    parser.onopentag = parser_opentag;\n    parser.onclosetag = parser_closetag;\n    parser.ontext = parser_text;\n    parser.oncdata = parser_cdata;\n    parser.oncomment = parser_comment;\n    parser.ondoctype = parser_doctype;\n    parser.onerror = parser_error;\n  }\n\n  // create these closures and cache them by keeping them file-scoped\n  function parser_opentag() {\n    delegates[0] && delegates[0]._opentag.apply(delegates[0], arguments);\n  }\n  function parser_closetag() {\n    delegates[0] && delegates[0]._closetag.apply(delegates[0], arguments);\n  }\n  function parser_text() {\n    delegates[0] && delegates[0]._text.apply(delegates[0], arguments);\n  }\n  function parser_cdata() {\n    delegates[0] && delegates[0]._cdata.apply(delegates[0], arguments);\n  }\n  function parser_comment() {\n    delegates[0] && delegates[0]._comment.apply(delegates[0], arguments);\n  }\n  function parser_doctype() {\n    delegates[0] && delegates[0]._doctype.apply(delegates[0], arguments);\n  }\n  function parser_error() {\n    delegates[0] && delegates[0]._error.apply(delegates[0], arguments);\n  }\n\n  // a relatively standard extend method\n  function extend(destination, source) {\n    for (var prop in source)\n      if (source.hasOwnProperty(prop)) destination[prop] = source[prop];\n  }\n\n  // escapes XML entities like \"<\", \"&\", etc.\n  function escapeXML(value) {\n    return value\n      .toString()\n      .replace(/&/g, \"&amp;\")\n      .replace(/</g, \"&lt;\")\n      .replace(/>/g, \"&gt;\")\n      .replace(/'/g, \"&apos;\")\n      .replace(/\"/g, \"&quot;\");\n  }\n\n  // formats some text for debugging given a few options\n  function formatText(text, options) {\n    var finalText = text;\n\n    if (options && options.trimmed && text.length > 25) {\n      finalText = finalText.substring(0, 25).trim() + \"…\";\n    }\n\n    if (!(options && options.preserveWhitespace)) {\n      finalText = finalText.trim();\n    }\n\n    return finalText;\n  }\n\n  // Are we being used in a Node-like environment?\n  if (\n     true &&\n    module.exports &&\n    !__webpack_require__.g.xmldocAssumeBrowser\n  ) {\n    module.exports.XmlDocument = XmlDocument;\n    module.exports.XmlElement = XmlElement;\n    module.exports.XmlTextNode = XmlTextNode;\n    module.exports.XmlCDataNode = XmlCDataNode;\n    module.exports.XmlCommentNode = XmlCommentNode;\n  } else {\n    this.XmlDocument = XmlDocument;\n    this.XmlElement = XmlElement;\n    this.XmlTextNode = XmlTextNode;\n    this.XmlCDataNode = XmlCDataNode;\n    this.XmlCommentNode = XmlCommentNode;\n  }\n})();\n\n\n/***/ }),\n\n/***/ 6255:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Internet Explorer polyfills\nif (typeof window !== 'undefined' && !window.Promise) {\n\t__webpack_require__(3867);\n}\n__webpack_require__(4667);\n\nvar fetchUrl = function (url, headers) {\n\treturn new Promise(function (resolve, reject) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', url, true);\n\t\tfor (var headerName in headers) {\n\t\t\txhr.setRequestHeader(headerName, headers[headerName]);\n\t\t}\n\t\txhr.responseType = 'arraybuffer';\n\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState !== 4) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar ok = xhr.status >= 200 && xhr.status < 300;\n\t\t\tif (!ok) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\treject(new TypeError('Failed to fetch (url: \"' + url + '\")'));\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t};\n\n\t\txhr.onload = function () {\n\t\t\tvar ok = xhr.status >= 200 && xhr.status < 300;\n\t\t\tif (ok) {\n\t\t\t\tresolve(xhr.response);\n\t\t\t}\n\t\t};\n\n\t\txhr.onerror = function () {\n\t\t\tsetTimeout(function () {\n\t\t\t\treject(new TypeError('Network request failed (url: \"' + url + '\")'));\n\t\t\t}, 0);\n\t\t};\n\n\t\txhr.ontimeout = function () {\n\t\t\tsetTimeout(function () {\n\t\t\t\treject(new TypeError('Network request failed (url: \"' + url + '\")'));\n\t\t\t}, 0);\n\t\t};\n\n\t\txhr.send();\n\t});\n};\n\nfunction URLBrowserResolver(fs) {\n\tthis.fs = fs;\n\tthis.resolving = {};\n}\n\nURLBrowserResolver.prototype.resolve = function (url, headers) {\n\tif (!this.resolving[url]) {\n\t\tvar _this = this;\n\t\tthis.resolving[url] = new Promise(function (resolve, reject) {\n\t\t\tif (url.toLowerCase().indexOf('https://') === 0 || url.toLowerCase().indexOf('http://') === 0) {\n\t\t\t\tif (_this.fs.existsSync(url)) {\n\t\t\t\t\t// url was downloaded earlier\n\t\t\t\t\tresolve();\n\t\t\t\t} else {\n\t\t\t\t\tfetchUrl(url, headers).then(function (buffer) {\n\t\t\t\t\t\t_this.fs.writeFileSync(url, buffer);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}, function (result) {\n\t\t\t\t\t\treject(result);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// cannot be resolved\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\t}\n\n\treturn this.resolving[url];\n}\n\nURLBrowserResolver.prototype.resolved = function () {\n\tvar _this = this;\n\treturn new Promise(function (resolve, reject) {\n\t\tPromise.all(Object.values(_this.resolving)).then(function () {\n\t\t\tresolve();\n\t\t}, function (result) {\n\t\t\treject(result);\n\t\t});\n\t});\n}\n\nmodule.exports = URLBrowserResolver;\n\n\n/***/ }),\n\n/***/ 4275:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\nvar isFunction = (__webpack_require__(6225).isFunction);\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar isNull = (__webpack_require__(6225).isNull);\nvar FileSaver = __webpack_require__(2984);\nvar saveAs = FileSaver.saveAs;\n\nvar defaultClientFonts = {\n\tRoboto: {\n\t\tnormal: 'Roboto-Regular.ttf',\n\t\tbold: 'Roboto-Medium.ttf',\n\t\titalics: 'Roboto-Italic.ttf',\n\t\tbolditalics: 'Roboto-MediumItalic.ttf'\n\t}\n};\n\nfunction Document(docDefinition, tableLayouts, fonts, vfs) {\n\tthis.docDefinition = docDefinition;\n\tthis.tableLayouts = tableLayouts || null;\n\tthis.fonts = fonts || defaultClientFonts;\n\tthis.vfs = vfs;\n}\n\nfunction canCreatePdf() {\n\t// Ensure the browser provides the level of support needed\n\ttry {\n\t\tvar arr = new Uint8Array(1)\n\t\tvar proto = { foo: function () { return 42 } }\n\t\tObject.setPrototypeOf(proto, Uint8Array.prototype)\n\t\tObject.setPrototypeOf(arr, proto)\n\t\treturn arr.foo() === 42\n\t} catch (e) {\n\t\treturn false\n\t}\n}\n\nDocument.prototype._createDoc = function (options, cb) {\n\tvar getExtendedUrl = function (url) {\n\t\tif (typeof url === 'object') {\n\t\t\treturn { url: url.url, headers: url.headers };\n\t\t}\n\n\t\treturn { url: url, headers: {} };\n\t};\n\n\toptions = options || {};\n\tif (this.tableLayouts) {\n\t\toptions.tableLayouts = this.tableLayouts;\n\t}\n\n\tvar PdfPrinter = __webpack_require__(8617);\n\n\tvar printer = new PdfPrinter(this.fonts);\n\t(__webpack_require__(3857).bindFS)(this.vfs); // bind virtual file system to file system\n\n\tif (!isFunction(cb)) {\n\t\tvar doc = printer.createPdfKitDocument(this.docDefinition, options);\n\n\t\treturn doc;\n\t}\n\n\tvar URLBrowserResolver = __webpack_require__(6255);\n\tvar urlResolver = new URLBrowserResolver(__webpack_require__(3857));\n\n\tfor (var font in this.fonts) {\n\t\tif (this.fonts.hasOwnProperty(font)) {\n\t\t\tif (this.fonts[font].normal) {\n\t\t\t\tif (Array.isArray(this.fonts[font].normal)) { // TrueType Collection\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].normal[0]);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].normal[0] = url.url;\n\t\t\t\t} else {\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].normal);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].normal = url.url;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.fonts[font].bold) {\n\t\t\t\tif (Array.isArray(this.fonts[font].bold)) { // TrueType Collection\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bold[0]);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].bold[0] = url.url;\n\t\t\t\t} else {\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bold);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].bold = url.url;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.fonts[font].italics) {\n\t\t\t\tif (Array.isArray(this.fonts[font].italics)) { // TrueType Collection\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].italics[0]);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].italics[0] = url.url;\n\t\t\t\t} else {\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].italics);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].italics = url.url;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.fonts[font].bolditalics) {\n\t\t\t\tif (Array.isArray(this.fonts[font].bolditalics)) { // TrueType Collection\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bolditalics[0]);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].bolditalics[0] = url.url;\n\t\t\t\t} else {\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bolditalics);\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\t\tthis.fonts[font].bolditalics = url.url;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.docDefinition.images) {\n\t\tfor (var image in this.docDefinition.images) {\n\t\t\tif (this.docDefinition.images.hasOwnProperty(image)) {\n\t\t\t\tvar url = getExtendedUrl(this.docDefinition.images[image]);\n\t\t\t\turlResolver.resolve(url.url, url.headers);\n\t\t\t\tthis.docDefinition.images[image] = url.url;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar _this = this;\n\n\turlResolver.resolved().then(function () {\n\t\tvar doc = printer.createPdfKitDocument(_this.docDefinition, options);\n\n\t\tcb(doc);\n\t}, function (result) {\n\t\tthrow result;\n\t});\n};\n\nDocument.prototype._flushDoc = function (doc, callback) {\n\tvar chunks = [];\n\tvar result;\n\n\tdoc.on('readable', function () {\n\t\tvar chunk;\n\t\twhile ((chunk = doc.read(9007199254740991)) !== null) {\n\t\t\tchunks.push(chunk);\n\t\t}\n\t});\n\tdoc.on('end', function () {\n\t\tresult = Buffer.concat(chunks);\n\t\tcallback(result, doc._pdfMakePages);\n\t});\n\tdoc.end();\n};\n\nDocument.prototype._getPages = function (options, cb) {\n\tif (!cb) {\n\t\tthrow '_getPages is an async method and needs a callback argument';\n\t}\n\tvar _this = this;\n\n\tthis._createDoc(options, function (doc) {\n\t\t_this._flushDoc(doc, function (ignoreBuffer, pages) {\n\t\t\tcb(pages);\n\t\t});\n\t});\n};\n\nDocument.prototype._bufferToBlob = function (buffer) {\n\tvar blob;\n\ttry {\n\t\tblob = new Blob([buffer], { type: 'application/pdf' });\n\t} catch (e) {\n\t\t// Old browser which can't handle it without making it an byte array (ie10)\n\t\tif (e.name === 'InvalidStateError') {\n\t\t\tvar byteArray = new Uint8Array(buffer);\n\t\t\tblob = new Blob([byteArray.buffer], { type: 'application/pdf' });\n\t\t}\n\t}\n\n\tif (!blob) {\n\t\tthrow 'Could not generate blob';\n\t}\n\n\treturn blob;\n};\n\nDocument.prototype._openWindow = function () {\n\t// we have to open the window immediately and store the reference\n\t// otherwise popup blockers will stop us\n\tvar win = window.open('', '_blank');\n\tif (win === null) {\n\t\tthrow 'Open PDF in new window blocked by browser';\n\t}\n\n\treturn win;\n};\n\nDocument.prototype._openPdf = function (options, win) {\n\tif (!win) {\n\t\twin = this._openWindow();\n\t}\n\ttry {\n\t\tthis.getBlob(function (result) {\n\t\t\tvar urlCreator = window.URL || window.webkitURL;\n\t\t\tvar pdfUrl = urlCreator.createObjectURL(result);\n\t\t\twin.location.href = pdfUrl;\n\n\t\t\t/* temporarily disabled\n\t\t\tif (win !== window) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tif (isNull(win.window)) { // is closed by AdBlock\n\t\t\t\t\t\twindow.location.href = pdfUrl; // open in actual window\n\t\t\t\t\t}\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t\t*/\n\t\t}, options);\n\t} catch (e) {\n\t\twin.close();\n\t\tthrow e;\n\t}\n};\n\nDocument.prototype.open = function (options, win) {\n\toptions = options || {};\n\toptions.autoPrint = false;\n\twin = win || null;\n\n\tthis._openPdf(options, win);\n};\n\n\nDocument.prototype.print = function (options, win) {\n\toptions = options || {};\n\toptions.autoPrint = true;\n\twin = win || null;\n\n\tthis._openPdf(options, win);\n};\n\n/**\n * download(defaultFileName = 'file.pdf', cb = null, options = {})\n * or\n * download(cb, options = {})\n */\nDocument.prototype.download = function (defaultFileName, cb, options) {\n\tif (isFunction(defaultFileName)) {\n\t\tif (!isUndefined(cb)) {\n\t\t\toptions = cb;\n\t\t}\n\t\tcb = defaultFileName;\n\t\tdefaultFileName = null;\n\t}\n\n\tdefaultFileName = defaultFileName || 'file.pdf';\n\tthis.getBlob(function (result) {\n\t\tsaveAs(result, defaultFileName);\n\n\t\tif (isFunction(cb)) {\n\t\t\tcb();\n\t\t}\n\t}, options);\n};\n\nDocument.prototype.getBase64 = function (cb, options) {\n\tif (!cb) {\n\t\tthrow 'getBase64 is an async method and needs a callback argument';\n\t}\n\tthis.getBuffer(function (buffer) {\n\t\tcb(buffer.toString('base64'));\n\t}, options);\n};\n\nDocument.prototype.getDataUrl = function (cb, options) {\n\tif (!cb) {\n\t\tthrow 'getDataUrl is an async method and needs a callback argument';\n\t}\n\tthis.getBuffer(function (buffer) {\n\t\tcb('data:application/pdf;base64,' + buffer.toString('base64'));\n\t}, options);\n};\n\nDocument.prototype.getBlob = function (cb, options) {\n\tif (!cb) {\n\t\tthrow 'getBlob is an async method and needs a callback argument';\n\t}\n\tvar that = this;\n\tthis.getBuffer(function (result) {\n\t\tvar blob = that._bufferToBlob(result);\n\t\tcb(blob);\n\t}, options);\n};\n\nDocument.prototype.getBuffer = function (cb, options) {\n\tif (!cb) {\n\t\tthrow 'getBuffer is an async method and needs a callback argument';\n\t}\n\n\tvar _this = this;\n\n\tthis._createDoc(options, function (doc) {\n\t\t_this._flushDoc(doc, function (buffer) {\n\t\t\tcb(buffer);\n\t\t});\n\t});\n};\n\nDocument.prototype.getStream = function (options, cb) {\n\tif (!isFunction(cb)) {\n\t\tvar doc = this._createDoc(options);\n\t\treturn doc;\n\t}\n\n\tthis._createDoc(options, function (doc) {\n\t\tcb(doc);\n\t});\n};\n\nmodule.exports = {\n\tcreatePdf: function (docDefinition, tableLayouts, fonts, vfs) {\n\t\tif (!canCreatePdf()) {\n\t\t\tthrow 'Your browser does not provide the level of support needed';\n\t\t}\n\t\treturn new Document(\n\t\t\tdocDefinition,\n\t\t\ttableLayouts || __webpack_require__.g.pdfMake.tableLayouts,\n\t\t\tfonts || __webpack_require__.g.pdfMake.fonts,\n\t\t\tvfs || __webpack_require__.g.pdfMake.vfs\n\t\t);\n\t}\n};\n\n\n/***/ }),\n\n/***/ 3857:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\nvar __dirname = \"/\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\nfunction VirtualFileSystem() {\n\tthis.fileSystem = {};\n\tthis.dataSystem = {};\n}\n\nVirtualFileSystem.prototype.existsSync = function (filename) {\n\tfilename = fixFilename(filename);\n\treturn typeof this.fileSystem[filename] !== 'undefined'\n\t\t|| typeof this.dataSystem[filename] !== 'undefined';\n}\n\nVirtualFileSystem.prototype.readFileSync = function (filename, options) {\n\tfilename = fixFilename(filename);\n\n\tvar dataContent = this.dataSystem[filename];\n\tif (typeof dataContent === 'string' && options === 'utf8') {\n\t\treturn dataContent;\n\t}\n\n\tif (dataContent) {\n\t\treturn new Buffer(dataContent, typeof dataContent === 'string' ? 'base64' : undefined);\n\t}\n\n\tvar content = this.fileSystem[filename];\n\tif (content) {\n\t\treturn content;\n\t}\n\n\tthrow 'File \\'' + filename + '\\' not found in virtual file system';\n};\n\nVirtualFileSystem.prototype.writeFileSync = function (filename, content) {\n\tthis.fileSystem[fixFilename(filename)] = content;\n};\n\nVirtualFileSystem.prototype.bindFS = function (data) {\n\tthis.dataSystem = data || {};\n};\n\n\nfunction fixFilename(filename) {\n\tif (filename.indexOf(__dirname) === 0) {\n\t\tfilename = filename.substring(__dirname.length);\n\t}\n\n\tif (filename.indexOf('/') === 0) {\n\t\tfilename = filename.substring(1);\n\t}\n\n\treturn filename;\n}\n\nmodule.exports = new VirtualFileSystem();\n\n\n/***/ }),\n\n/***/ 4498:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isString = (__webpack_require__(6225).isString);\n\nfunction buildColumnWidths(columns, availableWidth) {\n\tvar autoColumns = [],\n\t\tautoMin = 0, autoMax = 0,\n\t\tstarColumns = [],\n\t\tstarMaxMin = 0,\n\t\tstarMaxMax = 0,\n\t\tfixedColumns = [],\n\t\tinitial_availableWidth = availableWidth;\n\n\tcolumns.forEach(function (column) {\n\t\tif (isAutoColumn(column)) {\n\t\t\tautoColumns.push(column);\n\t\t\tautoMin += column._minWidth;\n\t\t\tautoMax += column._maxWidth;\n\t\t} else if (isStarColumn(column)) {\n\t\t\tstarColumns.push(column);\n\t\t\tstarMaxMin = Math.max(starMaxMin, column._minWidth);\n\t\t\tstarMaxMax = Math.max(starMaxMax, column._maxWidth);\n\t\t} else {\n\t\t\tfixedColumns.push(column);\n\t\t}\n\t});\n\n\tfixedColumns.forEach(function (col) {\n\t\t// width specified as %\n\t\tif (isString(col.width) && /\\d+%/.test(col.width)) {\n\t\t\tcol.width = parseFloat(col.width) * initial_availableWidth / 100;\n\t\t}\n\t\tif (col.width < (col._minWidth) && col.elasticWidth) {\n\t\t\tcol._calcWidth = col._minWidth;\n\t\t} else {\n\t\t\tcol._calcWidth = col.width;\n\t\t}\n\n\t\tavailableWidth -= col._calcWidth;\n\t});\n\n\t// http://www.freesoft.org/CIE/RFC/1942/18.htm\n\t// http://www.w3.org/TR/CSS2/tables.html#width-layout\n\t// http://dev.w3.org/csswg/css3-tables-algorithms/Overview.src.htm\n\tvar minW = autoMin + starMaxMin * starColumns.length;\n\tvar maxW = autoMax + starMaxMax * starColumns.length;\n\tif (minW >= availableWidth) {\n\t\t// case 1 - there's no way to fit all columns within available width\n\t\t// that's actually pretty bad situation with PDF as we have no horizontal scroll\n\t\t// no easy workaround (unless we decide, in the future, to split single words)\n\t\t// currently we simply use minWidths for all columns\n\t\tautoColumns.forEach(function (col) {\n\t\t\tcol._calcWidth = col._minWidth;\n\t\t});\n\n\t\tstarColumns.forEach(function (col) {\n\t\t\tcol._calcWidth = starMaxMin; // starMaxMin already contains padding\n\t\t});\n\t} else {\n\t\tif (maxW < availableWidth) {\n\t\t\t// case 2 - we can fit rest of the table within available space\n\t\t\tautoColumns.forEach(function (col) {\n\t\t\t\tcol._calcWidth = col._maxWidth;\n\t\t\t\tavailableWidth -= col._calcWidth;\n\t\t\t});\n\t\t} else {\n\t\t\t// maxW is too large, but minW fits within available width\n\t\t\tvar W = availableWidth - minW;\n\t\t\tvar D = maxW - minW;\n\n\t\t\tautoColumns.forEach(function (col) {\n\t\t\t\tvar d = col._maxWidth - col._minWidth;\n\t\t\t\tcol._calcWidth = col._minWidth + d * W / D;\n\t\t\t\tavailableWidth -= col._calcWidth;\n\t\t\t});\n\t\t}\n\n\t\tif (starColumns.length > 0) {\n\t\t\tvar starSize = availableWidth / starColumns.length;\n\n\t\t\tstarColumns.forEach(function (col) {\n\t\t\t\tcol._calcWidth = starSize;\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction isAutoColumn(column) {\n\treturn column.width === 'auto';\n}\n\nfunction isStarColumn(column) {\n\treturn column.width === null || column.width === undefined || column.width === '*' || column.width === 'star';\n}\n\n//TODO: refactor and reuse in measureTable\nfunction measureMinMax(columns) {\n\tvar result = { min: 0, max: 0 };\n\n\tvar maxStar = { min: 0, max: 0 };\n\tvar starCount = 0;\n\n\tfor (var i = 0, l = columns.length; i < l; i++) {\n\t\tvar c = columns[i];\n\n\t\tif (isStarColumn(c)) {\n\t\t\tmaxStar.min = Math.max(maxStar.min, c._minWidth);\n\t\t\tmaxStar.max = Math.max(maxStar.max, c._maxWidth);\n\t\t\tstarCount++;\n\t\t} else if (isAutoColumn(c)) {\n\t\t\tresult.min += c._minWidth;\n\t\t\tresult.max += c._maxWidth;\n\t\t} else {\n\t\t\tresult.min += ((c.width !== undefined && c.width) || c._minWidth);\n\t\t\tresult.max += ((c.width !== undefined && c.width) || c._maxWidth);\n\t\t}\n\t}\n\n\tif (starCount) {\n\t\tresult.min += starCount * maxStar.min;\n\t\tresult.max += starCount * maxStar.max;\n\t}\n\n\treturn result;\n}\n\n/**\n * Calculates column widths\n * @private\n */\nmodule.exports = {\n\tbuildColumnWidths: buildColumnWidths,\n\tmeasureMinMax: measureMinMax,\n\tisAutoColumn: isAutoColumn,\n\tisStarColumn: isStarColumn\n};\n\n\n/***/ }),\n\n/***/ 1728:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\n\n\n\nvar TextTools = __webpack_require__(1350);\nvar StyleContextStack = __webpack_require__(7597);\nvar ColumnCalculator = __webpack_require__(4498);\nvar isString = (__webpack_require__(6225).isString);\nvar isNumber = (__webpack_require__(6225).isNumber);\nvar isObject = (__webpack_require__(6225).isObject);\nvar isArray = (__webpack_require__(6225).isArray);\nvar fontStringify = (__webpack_require__(6225).fontStringify);\nvar getNodeId = (__webpack_require__(6225).getNodeId);\nvar pack = (__webpack_require__(6225).pack);\nvar qrEncoder = __webpack_require__(145);\n\n/**\n * @private\n */\nfunction DocMeasure(fontProvider, styleDictionary, defaultStyle, imageMeasure, svgMeasure, tableLayouts, images) {\n\tthis.textTools = new TextTools(fontProvider);\n\tthis.styleStack = new StyleContextStack(styleDictionary, defaultStyle);\n\tthis.imageMeasure = imageMeasure;\n\tthis.svgMeasure = svgMeasure;\n\tthis.tableLayouts = tableLayouts;\n\tthis.images = images;\n\tthis.autoImageIndex = 1;\n}\n\n/**\n * Measures all nodes and sets min/max-width properties required for the second\n * layout-pass.\n * @param  {Object} docStructure document-definition-object\n * @return {Object}              document-measurement-object\n */\nDocMeasure.prototype.measureDocument = function (docStructure) {\n\treturn this.measureNode(docStructure);\n};\n\nDocMeasure.prototype.measureNode = function (node) {\n\n\tvar self = this;\n\n\treturn this.styleStack.auto(node, function () {\n\t\t// TODO: refactor + rethink whether this is the proper way to handle margins\n\t\tnode._margin = getNodeMargin(node);\n\n\t\tif (node.columns) {\n\t\t\treturn extendMargins(self.measureColumns(node));\n\t\t} else if (node.stack) {\n\t\t\treturn extendMargins(self.measureVerticalContainer(node));\n\t\t} else if (node.ul) {\n\t\t\treturn extendMargins(self.measureUnorderedList(node));\n\t\t} else if (node.ol) {\n\t\t\treturn extendMargins(self.measureOrderedList(node));\n\t\t} else if (node.table) {\n\t\t\treturn extendMargins(self.measureTable(node));\n\t\t} else if (node.text !== undefined) {\n\t\t\treturn extendMargins(self.measureLeaf(node));\n\t\t} else if (node.toc) {\n\t\t\treturn extendMargins(self.measureToc(node));\n\t\t} else if (node.image) {\n\t\t\treturn extendMargins(self.measureImage(node));\n\t\t} else if (node.svg) {\n\t\t\treturn extendMargins(self.measureSVG(node));\n\t\t} else if (node.canvas) {\n\t\t\treturn extendMargins(self.measureCanvas(node));\n\t\t} else if (node.qr) {\n\t\t\treturn extendMargins(self.measureQr(node));\n\t\t} else {\n\t\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\n\t\t}\n\t});\n\n\tfunction extendMargins(node) {\n\t\tvar margin = node._margin;\n\n\t\tif (margin) {\n\t\t\tnode._minWidth += margin[0] + margin[2];\n\t\t\tnode._maxWidth += margin[0] + margin[2];\n\t\t}\n\n\t\treturn node;\n\t}\n\n\tfunction getNodeMargin() {\n\n\t\tfunction processSingleMargins(node, currentMargin) {\n\t\t\tif (node.marginLeft || node.marginTop || node.marginRight || node.marginBottom) {\n\t\t\t\treturn [\n\t\t\t\t\tnode.marginLeft || currentMargin[0] || 0,\n\t\t\t\t\tnode.marginTop || currentMargin[1] || 0,\n\t\t\t\t\tnode.marginRight || currentMargin[2] || 0,\n\t\t\t\t\tnode.marginBottom || currentMargin[3] || 0\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn currentMargin;\n\t\t}\n\n\t\tfunction flattenStyleArray(styleArray) {\n\t\t\tvar flattenedStyles = {};\n\t\t\tfor (var i = styleArray.length - 1; i >= 0; i--) {\n\t\t\t\tvar styleName = styleArray[i];\n\t\t\t\tvar style = self.styleStack.styleDictionary[styleName];\n\t\t\t\tfor (var key in style) {\n\t\t\t\t\tif (style.hasOwnProperty(key)) {\n\t\t\t\t\t\tflattenedStyles[key] = style[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn flattenedStyles;\n\t\t}\n\n\t\tfunction convertMargin(margin) {\n\t\t\tif (isNumber(margin)) {\n\t\t\t\tmargin = [margin, margin, margin, margin];\n\t\t\t} else if (isArray(margin)) {\n\t\t\t\tif (margin.length === 2) {\n\t\t\t\t\tmargin = [margin[0], margin[1], margin[0], margin[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn margin;\n\t\t}\n\n\t\tvar margin = [undefined, undefined, undefined, undefined];\n\n\t\tif (node.style) {\n\t\t\tvar styleArray = isArray(node.style) ? node.style : [node.style];\n\t\t\tvar flattenedStyleArray = flattenStyleArray(styleArray);\n\n\t\t\tif (flattenedStyleArray) {\n\t\t\t\tmargin = processSingleMargins(flattenedStyleArray, margin);\n\t\t\t}\n\n\t\t\tif (flattenedStyleArray.margin) {\n\t\t\t\tmargin = convertMargin(flattenedStyleArray.margin);\n\t\t\t}\n\t\t}\n\n\t\tmargin = processSingleMargins(node, margin);\n\n\t\tif (node.margin) {\n\t\t\tmargin = convertMargin(node.margin);\n\t\t}\n\n\t\tif (margin[0] === undefined && margin[1] === undefined && margin[2] === undefined && margin[3] === undefined) {\n\t\t\treturn null;\n\t\t} else {\n\t\t\treturn margin;\n\t\t}\n\t}\n};\n\nDocMeasure.prototype.convertIfBase64Image = function (node) {\n\tif (/^data:image\\/(jpeg|jpg|png);base64,/.test(node.image)) {\n\t\tvar label = '$$pdfmake$$' + this.autoImageIndex++;\n\t\tthis.images[label] = node.image;\n\t\tnode.image = label;\n\t}\n};\n\nDocMeasure.prototype.measureImageWithDimensions = function (node, dimensions) {\n\tif (node.fit) {\n\t\tvar factor = (dimensions.width / dimensions.height > node.fit[0] / node.fit[1]) ? node.fit[0] / dimensions.width : node.fit[1] / dimensions.height;\n\t\tnode._width = node._minWidth = node._maxWidth = dimensions.width * factor;\n\t\tnode._height = dimensions.height * factor;\n\t} else {\n\t\tnode._width = node._minWidth = node._maxWidth = node.width || dimensions.width;\n\t\tnode._height = node.height || (dimensions.height * node._width / dimensions.width);\n\n\t\tif (isNumber(node.maxWidth) && node.maxWidth < node._width) {\n\t\t\tnode._width = node._minWidth = node._maxWidth = node.maxWidth;\n\t\t\tnode._height = node._width * dimensions.height / dimensions.width;\n\t\t}\n\n\t\tif (isNumber(node.maxHeight) && node.maxHeight < node._height) {\n\t\t\tnode._height = node.maxHeight;\n\t\t\tnode._width = node._minWidth = node._maxWidth = node._height * dimensions.width / dimensions.height;\n\t\t}\n\n\t\tif (isNumber(node.minWidth) && node.minWidth > node._width) {\n\t\t\tnode._width = node._minWidth = node._maxWidth = node.minWidth;\n\t\t\tnode._height = node._width * dimensions.height / dimensions.width;\n\t\t}\n\n\t\tif (isNumber(node.minHeight) && node.minHeight > node._height) {\n\t\t\tnode._height = node.minHeight;\n\t\t\tnode._width = node._minWidth = node._maxWidth = node._height * dimensions.width / dimensions.height;\n\t\t}\n\t}\n\n\tnode._alignment = this.styleStack.getProperty('alignment');\n};\n\nDocMeasure.prototype.measureImage = function (node) {\n\tif (this.images) {\n\t\tthis.convertIfBase64Image(node);\n\t}\n\n\tvar dimensions = this.imageMeasure.measureImage(node.image);\n\n\tthis.measureImageWithDimensions(node, dimensions);\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureSVG = function (node) {\n\n\tvar dimensions = this.svgMeasure.measureSVG(node.svg);\n\n\tthis.measureImageWithDimensions(node, dimensions);\n\n\tnode.font = this.styleStack.getProperty('font');\n\n\t// scale SVG based on final dimension\n\tnode.svg = this.svgMeasure.writeDimensions(node.svg, {\n\t\twidth: node._width,\n\t\theight: node._height\n\t});\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureLeaf = function (node) {\n\n\tif (node._textRef && node._textRef._textNodeRef.text) {\n\t\tnode.text = node._textRef._textNodeRef.text;\n\t}\n\n\t// Make sure style properties of the node itself are considered when building inlines.\n\t// We could also just pass [node] to buildInlines, but that fails for bullet points.\n\tvar styleStack = this.styleStack.clone();\n\tstyleStack.push(node);\n\n\tvar data = this.textTools.buildInlines(node.text, styleStack);\n\n\tnode._inlines = data.items;\n\tnode._minWidth = data.minWidth;\n\tnode._maxWidth = data.maxWidth;\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureToc = function (node) {\n\tif (node.toc.title) {\n\t\tnode.toc.title = this.measureNode(node.toc.title);\n\t}\n\n\tif (node.toc._items.length > 0) {\n\t\tvar body = [];\n\t\tvar textStyle = node.toc.textStyle || {};\n\t\tvar numberStyle = node.toc.numberStyle || textStyle;\n\t\tvar textMargin = node.toc.textMargin || [0, 0, 0, 0];\n\t\tfor (var i = 0, l = node.toc._items.length; i < l; i++) {\n\t\t\tvar item = node.toc._items[i];\n\t\t\tvar lineStyle = item._textNodeRef.tocStyle || textStyle;\n\t\t\tvar lineMargin = item._textNodeRef.tocMargin || textMargin;\n\t\t\tvar lineNumberStyle = item._textNodeRef.tocNumberStyle || numberStyle;\n\t\t\tvar destination = getNodeId(item._nodeRef);\n\t\t\tbody.push([\n\t\t\t\t{ text: item._textNodeRef.text, linkToDestination: destination, alignment: 'left', style: lineStyle, margin: lineMargin },\n\t\t\t\t{ text: '00000', linkToDestination: destination, alignment: 'right', _tocItemRef: item._nodeRef, style: lineNumberStyle, margin: [0, lineMargin[1], 0, lineMargin[3]] }\n\t\t\t]);\n\t\t}\n\n\n\t\tnode.toc._table = {\n\t\t\ttable: {\n\t\t\t\tdontBreakRows: true,\n\t\t\t\twidths: ['*', 'auto'],\n\t\t\t\tbody: body\n\t\t\t},\n\t\t\tlayout: 'noBorders'\n\t\t};\n\n\t\tnode.toc._table = this.measureNode(node.toc._table);\n\t}\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureVerticalContainer = function (node) {\n\tvar items = node.stack;\n\n\tnode._minWidth = 0;\n\tnode._maxWidth = 0;\n\n\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\titems[i] = this.measureNode(items[i]);\n\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth);\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);\n\t}\n\n\treturn node;\n};\n\nDocMeasure.prototype.gapSizeForList = function () {\n\treturn this.textTools.sizeOfString('9. ', this.styleStack);\n};\n\nDocMeasure.prototype.buildUnorderedMarker = function (styleStack, gapSize, type) {\n\tfunction buildDisc(gapSize, color) {\n\t\t// TODO: ascender-based calculations\n\t\tvar radius = gapSize.fontSize / 6;\n\t\treturn {\n\t\t\tcanvas: [{\n\t\t\t\tx: radius,\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3,\n\t\t\t\tr1: radius,\n\t\t\t\tr2: radius,\n\t\t\t\ttype: 'ellipse',\n\t\t\t\tcolor: color\n\t\t\t}]\n\t\t};\n\t}\n\n\tfunction buildSquare(gapSize, color) {\n\t\t// TODO: ascender-based calculations\n\t\tvar size = gapSize.fontSize / 3;\n\t\treturn {\n\t\t\tcanvas: [{\n\t\t\t\tx: 0,\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - (gapSize.fontSize / 3) - (size / 2),\n\t\t\t\th: size,\n\t\t\t\tw: size,\n\t\t\t\ttype: 'rect',\n\t\t\t\tcolor: color\n\t\t\t}]\n\t\t};\n\t}\n\n\tfunction buildCircle(gapSize, color) {\n\t\t// TODO: ascender-based calculations\n\t\tvar radius = gapSize.fontSize / 6;\n\t\treturn {\n\t\t\tcanvas: [{\n\t\t\t\tx: radius,\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3,\n\t\t\t\tr1: radius,\n\t\t\t\tr2: radius,\n\t\t\t\ttype: 'ellipse',\n\t\t\t\tlineColor: color\n\t\t\t}]\n\t\t};\n\t}\n\n\tvar marker;\n\tvar color = styleStack.getProperty('markerColor') || styleStack.getProperty('color') || 'black';\n\n\tswitch (type) {\n\t\tcase 'circle':\n\t\t\tmarker = buildCircle(gapSize, color);\n\t\t\tbreak;\n\n\t\tcase 'square':\n\t\t\tmarker = buildSquare(gapSize, color);\n\t\t\tbreak;\n\n\t\tcase 'none':\n\t\t\tmarker = {};\n\t\t\tbreak;\n\n\t\tcase 'disc':\n\t\tdefault:\n\t\t\tmarker = buildDisc(gapSize, color);\n\t\t\tbreak;\n\t}\n\n\tmarker._minWidth = marker._maxWidth = gapSize.width;\n\tmarker._minHeight = marker._maxHeight = gapSize.height;\n\n\treturn marker;\n};\n\nDocMeasure.prototype.buildOrderedMarker = function (counter, styleStack, type, separator) {\n\tfunction prepareAlpha(counter) {\n\t\tfunction toAlpha(num) {\n\t\t\treturn (num >= 26 ? toAlpha((num / 26 >> 0) - 1) : '') + 'abcdefghijklmnopqrstuvwxyz'[num % 26 >> 0];\n\t\t}\n\n\t\tif (counter < 1) {\n\t\t\treturn counter.toString();\n\t\t}\n\n\t\treturn toAlpha(counter - 1);\n\t}\n\n\tfunction prepareRoman(counter) {\n\t\tif (counter < 1 || counter > 4999) {\n\t\t\treturn counter.toString();\n\t\t}\n\t\tvar num = counter;\n\t\tvar lookup = { M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1 }, roman = '', i;\n\t\tfor (i in lookup) {\n\t\t\twhile (num >= lookup[i]) {\n\t\t\t\troman += i;\n\t\t\t\tnum -= lookup[i];\n\t\t\t}\n\t\t}\n\t\treturn roman;\n\t}\n\n\tfunction prepareDecimal(counter) {\n\t\treturn counter.toString();\n\t}\n\n\tvar counterText;\n\tswitch (type) {\n\t\tcase 'none':\n\t\t\tcounterText = null;\n\t\t\tbreak;\n\n\t\tcase 'upper-alpha':\n\t\t\tcounterText = prepareAlpha(counter).toUpperCase();\n\t\t\tbreak;\n\n\t\tcase 'lower-alpha':\n\t\t\tcounterText = prepareAlpha(counter);\n\t\t\tbreak;\n\n\t\tcase 'upper-roman':\n\t\t\tcounterText = prepareRoman(counter);\n\t\t\tbreak;\n\n\t\tcase 'lower-roman':\n\t\t\tcounterText = prepareRoman(counter).toLowerCase();\n\t\t\tbreak;\n\n\t\tcase 'decimal':\n\t\tdefault:\n\t\t\tcounterText = prepareDecimal(counter);\n\t\t\tbreak;\n\t}\n\n\tif (counterText === null) {\n\t\treturn {};\n\t}\n\n\tif (separator) {\n\t\tif (isArray(separator)) {\n\t\t\tif (separator[0]) {\n\t\t\t\tcounterText = separator[0] + counterText;\n\t\t\t}\n\n\t\t\tif (separator[1]) {\n\t\t\t\tcounterText += separator[1];\n\t\t\t}\n\t\t\tcounterText += ' ';\n\t\t} else {\n\t\t\tcounterText += separator + ' ';\n\t\t}\n\t}\n\n\tvar textArray = { text: counterText };\n\tvar markerColor = styleStack.getProperty('markerColor');\n\tif (markerColor) {\n\t\ttextArray.color = markerColor;\n\t}\n\n\treturn { _inlines: this.textTools.buildInlines(textArray, styleStack).items };\n};\n\nDocMeasure.prototype.measureUnorderedList = function (node) {\n\tvar style = this.styleStack.clone();\n\tvar items = node.ul;\n\tnode.type = node.type || 'disc';\n\tnode._gapSize = this.gapSizeForList();\n\tnode._minWidth = 0;\n\tnode._maxWidth = 0;\n\n\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\tvar item = items[i] = this.measureNode(items[i]);\n\n\t\tif (!item.ol && !item.ul) {\n\t\t\titem.listMarker = this.buildUnorderedMarker(style, node._gapSize, item.listType || node.type);\n\t\t}\n\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth + node._gapSize.width);\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth + node._gapSize.width);\n\t}\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureOrderedList = function (node) {\n\tvar style = this.styleStack.clone();\n\tvar items = node.ol;\n\tnode.type = node.type || 'decimal';\n\tnode.separator = node.separator || '.';\n\tnode.reversed = node.reversed || false;\n\tif (!isNumber(node.start)) {\n\t\tnode.start = node.reversed ? items.length : 1;\n\t}\n\tnode._gapSize = this.gapSizeForList();\n\tnode._minWidth = 0;\n\tnode._maxWidth = 0;\n\n\tvar counter = node.start;\n\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\tvar item = items[i] = this.measureNode(items[i]);\n\n\t\tif (!item.ol && !item.ul) {\n\t\t\tvar counterValue = isNumber(item.counter) ? item.counter : counter;\n\t\t\titem.listMarker = this.buildOrderedMarker(counterValue, style, item.listType || node.type, node.separator);\n\t\t\tif (item.listMarker._inlines) {\n\t\t\t\tnode._gapSize.width = Math.max(node._gapSize.width, item.listMarker._inlines[0].width);\n\t\t\t}\n\t\t}  // TODO: else - nested lists numbering\n\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth);\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);\n\n\t\tif (node.reversed) {\n\t\t\tcounter--;\n\t\t} else {\n\t\t\tcounter++;\n\t\t}\n\t}\n\n\tnode._minWidth += node._gapSize.width;\n\tnode._maxWidth += node._gapSize.width;\n\n\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\tvar item = items[i];\n\t\tif (!item.ol && !item.ul) {\n\t\t\titem.listMarker._minWidth = item.listMarker._maxWidth = node._gapSize.width;\n\t\t}\n\t}\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureColumns = function (node) {\n\tvar columns = node.columns;\n\tnode._gap = this.styleStack.getProperty('columnGap') || 0;\n\n\tfor (var i = 0, l = columns.length; i < l; i++) {\n\t\tcolumns[i] = this.measureNode(columns[i]);\n\t}\n\n\tvar measures = ColumnCalculator.measureMinMax(columns);\n\n\tvar numGaps = (columns.length > 0) ? (columns.length - 1) : 0;\n\tnode._minWidth = measures.min + node._gap * numGaps;\n\tnode._maxWidth = measures.max + node._gap * numGaps;\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureTable = function (node) {\n\textendTableWidths(node);\n\tnode._layout = getLayout(this.tableLayouts);\n\tnode._offsets = getOffsets(node._layout);\n\n\tvar colSpans = [];\n\tvar col, row, cols, rows;\n\n\tfor (col = 0, cols = node.table.body[0].length; col < cols; col++) {\n\t\tvar c = node.table.widths[col];\n\t\tc._minWidth = 0;\n\t\tc._maxWidth = 0;\n\n\t\tfor (row = 0, rows = node.table.body.length; row < rows; row++) {\n\t\t\tvar rowData = node.table.body[row];\n\t\t\tvar data = rowData[col];\n\t\t\tif (data === undefined) {\n\t\t\t\tconsole.error('Malformed table row ', rowData, 'in node ', node);\n\t\t\t\tthrow 'Malformed table row, a cell is undefined.';\n\t\t\t}\n\t\t\tif (data === null) { // transform to object\n\t\t\t\tdata = '';\n\t\t\t}\n\n\t\t\tif (!data._span) {\n\t\t\t\tdata = rowData[col] = this.styleStack.auto(data, measureCb(this, data));\n\n\t\t\t\tif (data.colSpan && data.colSpan > 1) {\n\t\t\t\t\tmarkSpans(rowData, col, data.colSpan);\n\t\t\t\t\tcolSpans.push({ col: col, span: data.colSpan, minWidth: data._minWidth, maxWidth: data._maxWidth });\n\t\t\t\t} else {\n\t\t\t\t\tc._minWidth = Math.max(c._minWidth, data._minWidth);\n\t\t\t\t\tc._maxWidth = Math.max(c._maxWidth, data._maxWidth);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (data.rowSpan && data.rowSpan > 1) {\n\t\t\t\tmarkVSpans(node.table, row, col, data.rowSpan);\n\t\t\t}\n\t\t}\n\t}\n\n\textendWidthsForColSpans();\n\n\tvar measures = ColumnCalculator.measureMinMax(node.table.widths);\n\n\tnode._minWidth = measures.min + node._offsets.total;\n\tnode._maxWidth = measures.max + node._offsets.total;\n\n\treturn node;\n\n\tfunction measureCb(_this, data) {\n\t\treturn function () {\n\t\t\tif (isObject(data)) {\n\t\t\t\tdata.fillColor = _this.styleStack.getProperty('fillColor');\n\t\t\t\tdata.fillOpacity = _this.styleStack.getProperty('fillOpacity');\n\t\t\t}\n\t\t\treturn _this.measureNode(data);\n\t\t};\n\t}\n\n\tfunction getLayout(tableLayouts) {\n\t\tvar layout = node.layout;\n\n\t\tif (isString(layout)) {\n\t\t\tlayout = tableLayouts[layout];\n\t\t}\n\n\t\tvar defaultLayout = {\n\t\t\thLineWidth: function (i, node) {\n\t\t\t\treturn 1;\n\t\t\t},\n\t\t\tvLineWidth: function (i, node) {\n\t\t\t\treturn 1;\n\t\t\t},\n\t\t\thLineColor: function (i, node) {\n\t\t\t\treturn 'black';\n\t\t\t},\n\t\t\tvLineColor: function (i, node) {\n\t\t\t\treturn 'black';\n\t\t\t},\n\t\t\thLineStyle: function (i, node) {\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tvLineStyle: function (i, node) {\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tpaddingLeft: function (i, node) {\n\t\t\t\treturn 4;\n\t\t\t},\n\t\t\tpaddingRight: function (i, node) {\n\t\t\t\treturn 4;\n\t\t\t},\n\t\t\tpaddingTop: function (i, node) {\n\t\t\t\treturn 2;\n\t\t\t},\n\t\t\tpaddingBottom: function (i, node) {\n\t\t\t\treturn 2;\n\t\t\t},\n\t\t\tfillColor: function (i, node) {\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tfillOpacity: function (i, node) {\n\t\t\t\treturn 1;\n\t\t\t},\n\t\t\tdefaultBorder: true\n\t\t};\n\n\t\treturn pack(defaultLayout, layout);\n\t}\n\n\tfunction getOffsets(layout) {\n\t\tvar offsets = [];\n\t\tvar totalOffset = 0;\n\t\tvar prevRightPadding = 0;\n\n\t\tfor (var i = 0, l = node.table.widths.length; i < l; i++) {\n\t\t\tvar lOffset = prevRightPadding + layout.vLineWidth(i, node) + layout.paddingLeft(i, node);\n\t\t\toffsets.push(lOffset);\n\t\t\ttotalOffset += lOffset;\n\t\t\tprevRightPadding = layout.paddingRight(i, node);\n\t\t}\n\n\t\ttotalOffset += prevRightPadding + layout.vLineWidth(node.table.widths.length, node);\n\n\t\treturn {\n\t\t\ttotal: totalOffset,\n\t\t\toffsets: offsets\n\t\t};\n\t}\n\n\tfunction extendWidthsForColSpans() {\n\t\tvar q, j;\n\n\t\tfor (var i = 0, l = colSpans.length; i < l; i++) {\n\t\t\tvar span = colSpans[i];\n\n\t\t\tvar currentMinMax = getMinMax(span.col, span.span, node._offsets);\n\t\t\tvar minDifference = span.minWidth - currentMinMax.minWidth;\n\t\t\tvar maxDifference = span.maxWidth - currentMinMax.maxWidth;\n\n\t\t\tif (minDifference > 0) {\n\t\t\t\tq = minDifference / span.span;\n\n\t\t\t\tfor (j = 0; j < span.span; j++) {\n\t\t\t\t\tnode.table.widths[span.col + j]._minWidth += q;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (maxDifference > 0) {\n\t\t\t\tq = maxDifference / span.span;\n\n\t\t\t\tfor (j = 0; j < span.span; j++) {\n\t\t\t\t\tnode.table.widths[span.col + j]._maxWidth += q;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction getMinMax(col, span, offsets) {\n\t\tvar result = { minWidth: 0, maxWidth: 0 };\n\n\t\tfor (var i = 0; i < span; i++) {\n\t\t\tresult.minWidth += node.table.widths[col + i]._minWidth + (i ? offsets.offsets[col + i] : 0);\n\t\t\tresult.maxWidth += node.table.widths[col + i]._maxWidth + (i ? offsets.offsets[col + i] : 0);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction markSpans(rowData, col, span) {\n\t\tfor (var i = 1; i < span; i++) {\n\t\t\trowData[col + i] = {\n\t\t\t\t_span: true,\n\t\t\t\t_minWidth: 0,\n\t\t\t\t_maxWidth: 0,\n\t\t\t\trowSpan: rowData[col].rowSpan\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction markVSpans(table, row, col, span) {\n\t\tfor (var i = 1; i < span; i++) {\n\t\t\ttable.body[row + i][col] = {\n\t\t\t\t_span: true,\n\t\t\t\t_minWidth: 0,\n\t\t\t\t_maxWidth: 0,\n\t\t\t\tfillColor: table.body[row][col].fillColor,\n\t\t\t\tfillOpacity: table.body[row][col].fillOpacity\n\t\t\t};\n\t\t}\n\t}\n\n\tfunction extendTableWidths(node) {\n\t\tif (!node.table.widths) {\n\t\t\tnode.table.widths = 'auto';\n\t\t}\n\n\t\tif (isString(node.table.widths)) {\n\t\t\tnode.table.widths = [node.table.widths];\n\n\t\t\twhile (node.table.widths.length < node.table.body[0].length) {\n\t\t\t\tnode.table.widths.push(node.table.widths[node.table.widths.length - 1]);\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = node.table.widths.length; i < l; i++) {\n\t\t\tvar w = node.table.widths[i];\n\t\t\tif (isNumber(w) || isString(w)) {\n\t\t\t\tnode.table.widths[i] = { width: w };\n\t\t\t}\n\t\t}\n\t}\n};\n\nDocMeasure.prototype.measureCanvas = function (node) {\n\tvar w = 0, h = 0;\n\n\tfor (var i = 0, l = node.canvas.length; i < l; i++) {\n\t\tvar vector = node.canvas[i];\n\n\t\tswitch (vector.type) {\n\t\t\tcase 'ellipse':\n\t\t\t\tw = Math.max(w, vector.x + vector.r1);\n\t\t\t\th = Math.max(h, vector.y + vector.r2);\n\t\t\t\tbreak;\n\t\t\tcase 'rect':\n\t\t\t\tw = Math.max(w, vector.x + vector.w);\n\t\t\t\th = Math.max(h, vector.y + vector.h);\n\t\t\t\tbreak;\n\t\t\tcase 'line':\n\t\t\t\tw = Math.max(w, vector.x1, vector.x2);\n\t\t\t\th = Math.max(h, vector.y1, vector.y2);\n\t\t\t\tbreak;\n\t\t\tcase 'polyline':\n\t\t\t\tfor (var i2 = 0, l2 = vector.points.length; i2 < l2; i2++) {\n\t\t\t\t\tw = Math.max(w, vector.points[i2].x);\n\t\t\t\t\th = Math.max(h, vector.points[i2].y);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tnode._minWidth = node._maxWidth = w;\n\tnode._minHeight = node._maxHeight = h;\n\tnode._alignment = this.styleStack.getProperty('alignment');\n\n\treturn node;\n};\n\nDocMeasure.prototype.measureQr = function (node) {\n\tnode = qrEncoder.measure(node);\n\tnode._alignment = this.styleStack.getProperty('alignment');\n\treturn node;\n};\n\nmodule.exports = DocMeasure;\n\n\n/***/ }),\n\n/***/ 4889:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\nvar isString = (__webpack_require__(6225).isString);\nvar isNumber = (__webpack_require__(6225).isNumber);\nvar isBoolean = (__webpack_require__(6225).isBoolean);\nvar isArray = (__webpack_require__(6225).isArray);\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar fontStringify = (__webpack_require__(6225).fontStringify);\n\nfunction DocPreprocessor() {\n\n}\n\nDocPreprocessor.prototype.preprocessDocument = function (docStructure) {\n\tthis.parentNode = null;\n\tthis.tocs = [];\n\tthis.nodeReferences = [];\n\treturn this.preprocessNode(docStructure);\n};\n\nDocPreprocessor.prototype.preprocessNode = function (node) {\n\t// expand shortcuts and casting values\n\tif (isArray(node)) {\n\t\tnode = { stack: node };\n\t} else if (isString(node)) {\n\t\tnode = { text: node };\n\t} else if (isNumber(node) || isBoolean(node)) {\n\t\tnode = { text: node.toString() };\n\t} else if (node === undefined || node === null) {\n\t\tnode = { text: '' };\n\t} else if (Object.keys(node).length === 0) { // empty object\n\t\tnode = { text: '' };\n\t} else if ('text' in node && (node.text === undefined || node.text === null)) {\n\t\tnode.text = '';\n\t}\n\n\tif (node.columns) {\n\t\treturn this.preprocessColumns(node);\n\t} else if (node.stack) {\n\t\treturn this.preprocessVerticalContainer(node);\n\t} else if (node.ul) {\n\t\treturn this.preprocessList(node);\n\t} else if (node.ol) {\n\t\treturn this.preprocessList(node);\n\t} else if (node.table) {\n\t\treturn this.preprocessTable(node);\n\t} else if (node.text !== undefined) {\n\t\treturn this.preprocessText(node);\n\t} else if (node.toc) {\n\t\treturn this.preprocessToc(node);\n\t} else if (node.image) {\n\t\treturn this.preprocessImage(node);\n\t} else if (node.svg) {\n\t\treturn this.preprocessSVG(node);\n\t} else if (node.canvas) {\n\t\treturn this.preprocessCanvas(node);\n\t} else if (node.qr) {\n\t\treturn this.preprocessQr(node);\n\t} else if (node.pageReference || node.textReference) {\n\t\treturn this.preprocessText(node);\n\t} else {\n\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\n\t}\n};\n\nDocPreprocessor.prototype.preprocessColumns = function (node) {\n\tvar columns = node.columns;\n\n\tfor (var i = 0, l = columns.length; i < l; i++) {\n\t\tcolumns[i] = this.preprocessNode(columns[i]);\n\t}\n\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessVerticalContainer = function (node) {\n\tvar items = node.stack;\n\n\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\titems[i] = this.preprocessNode(items[i]);\n\t}\n\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessList = function (node) {\n\tvar items = node.ul || node.ol;\n\n\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\titems[i] = this.preprocessNode(items[i]);\n\t}\n\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessTable = function (node) {\n\tvar col, row, cols, rows;\n\n\tfor (col = 0, cols = node.table.body[0].length; col < cols; col++) {\n\t\tfor (row = 0, rows = node.table.body.length; row < rows; row++) {\n\t\t\tvar rowData = node.table.body[row];\n\t\t\tvar data = rowData[col];\n\t\t\tif (data !== undefined) {\n\t\t\t\tif (data === null) { // transform to object\n\t\t\t\t\tdata = '';\n\t\t\t\t}\n\t\t\t\tif (!data._span) {\n\t\t\t\t\trowData[col] = this.preprocessNode(data);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessText = function (node) {\n\tif (node.tocItem) {\n\t\tif (!isArray(node.tocItem)) {\n\t\t\tnode.tocItem = [node.tocItem];\n\t\t}\n\n\t\tfor (var i = 0, l = node.tocItem.length; i < l; i++) {\n\t\t\tif (!isString(node.tocItem[i])) {\n\t\t\t\tnode.tocItem[i] = '_default_';\n\t\t\t}\n\n\t\t\tvar tocItemId = node.tocItem[i];\n\n\t\t\tif (!this.tocs[tocItemId]) {\n\t\t\t\tthis.tocs[tocItemId] = { toc: { _items: [], _pseudo: true } };\n\t\t\t}\n\n\t\t\tif (!node.id) {\n\t\t\t\tnode.id = 'toc-' + tocItemId + '-' + this.tocs[tocItemId].toc._items.length;\n\t\t\t}\n\n\t\t\tvar tocItemRef = {\n\t\t\t\t_nodeRef: this._getNodeForNodeRef(node),\n\t\t\t\t_textNodeRef: node\n\t\t\t};\n\t\t\tthis.tocs[tocItemId].toc._items.push(tocItemRef);\n\t\t}\n\t}\n\n\tif (node.id) {\n\t\tif (this.nodeReferences[node.id]) {\n\t\t\tif (!this.nodeReferences[node.id]._pseudo) {\n\t\t\t\tthrow \"Node id '\" + node.id + \"' already exists\";\n\t\t\t}\n\n\t\t\tthis.nodeReferences[node.id]._nodeRef = this._getNodeForNodeRef(node);\n\t\t\tthis.nodeReferences[node.id]._textNodeRef = node;\n\t\t\tthis.nodeReferences[node.id]._pseudo = false;\n\t\t} else {\n\t\t\tthis.nodeReferences[node.id] = {\n\t\t\t\t_nodeRef: this._getNodeForNodeRef(node),\n\t\t\t\t_textNodeRef: node\n\t\t\t};\n\t\t}\n\t}\n\n\tif (node.pageReference) {\n\t\tif (!this.nodeReferences[node.pageReference]) {\n\t\t\tthis.nodeReferences[node.pageReference] = {\n\t\t\t\t_nodeRef: {},\n\t\t\t\t_textNodeRef: {},\n\t\t\t\t_pseudo: true\n\t\t\t};\n\t\t}\n\t\tnode.text = '00000';\n\t\tnode.linkToDestination = node.pageReference;\n\t\tnode._pageRef = this.nodeReferences[node.pageReference];\n\t}\n\n\tif (node.textReference) {\n\t\tif (!this.nodeReferences[node.textReference]) {\n\t\t\tthis.nodeReferences[node.textReference] = { _nodeRef: {}, _pseudo: true };\n\t\t}\n\n\t\tnode.text = '';\n\t\tnode.linkToDestination = node.textReference;\n\t\tnode._textRef = this.nodeReferences[node.textReference];\n\t}\n\n\tif (node.text && node.text.text) {\n\t\tnode.text = [this.preprocessNode(node.text)];\n\t} else if (isArray(node.text)) {\n\t\tvar isSetParentNode = false;\n\t\tif (this.parentNode === null) {\n\t\t\tthis.parentNode = node;\n\t\t\tisSetParentNode = true;\n\t\t}\n\n\t\tfor (var i = 0, l = node.text.length; i < l; i++) {\n\t\t\tnode.text[i] = this.preprocessNode(node.text[i]);\n\t\t}\n\n\t\tif (isSetParentNode) {\n\t\t\tthis.parentNode = null;\n\t\t}\n\t}\n\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessToc = function (node) {\n\tif (!node.toc.id) {\n\t\tnode.toc.id = '_default_';\n\t}\n\n\tnode.toc.title = node.toc.title ? this.preprocessNode(node.toc.title) : null;\n\tnode.toc._items = [];\n\n\tif (this.tocs[node.toc.id]) {\n\t\tif (!this.tocs[node.toc.id].toc._pseudo) {\n\t\t\tthrow \"TOC '\" + node.toc.id + \"' already exists\";\n\t\t}\n\n\t\tnode.toc._items = this.tocs[node.toc.id].toc._items;\n\t}\n\n\tthis.tocs[node.toc.id] = node;\n\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessImage = function (node) {\n\tif (!isUndefined(node.image.type) && !isUndefined(node.image.data) && (node.image.type === 'Buffer') && isArray(node.image.data)) {\n\t\tnode.image = Buffer.from(node.image.data);\n\t}\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessSVG = function (node) {\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessCanvas = function (node) {\n\treturn node;\n};\n\nDocPreprocessor.prototype.preprocessQr = function (node) {\n\treturn node;\n};\n\nDocPreprocessor.prototype._getNodeForNodeRef = function (node) {\n\tif (this.parentNode) {\n\t\treturn this.parentNode;\n\t}\n\n\treturn node;\n}\n\nmodule.exports = DocPreprocessor;\n\n\n/***/ }),\n\n/***/ 3858:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar TraversalTracker = __webpack_require__(8537);\nvar isString = (__webpack_require__(6225).isString);\n\n/**\n * Creates an instance of DocumentContext - a store for current x, y positions and available width/height.\n * It facilitates column divisions and vertical sync\n */\nfunction DocumentContext(pageSize, pageMargins) {\n\tthis.pages = [];\n\n\tthis.pageMargins = pageMargins;\n\n\tthis.x = pageMargins.left;\n\tthis.availableWidth = pageSize.width - pageMargins.left - pageMargins.right;\n\tthis.availableHeight = 0;\n\tthis.page = -1;\n\n\tthis.snapshots = [];\n\n\tthis.endingCell = null;\n\n\tthis.tracker = new TraversalTracker();\n\n\tthis.backgroundLength = [];\n\n\tthis.addPage(pageSize);\n}\n\nDocumentContext.prototype.beginColumnGroup = function () {\n\tthis.snapshots.push({\n\t\tx: this.x,\n\t\ty: this.y,\n\t\tavailableHeight: this.availableHeight,\n\t\tavailableWidth: this.availableWidth,\n\t\tpage: this.page,\n\t\tbottomMost: {\n\t\t\tx: this.x,\n\t\t\ty: this.y,\n\t\t\tavailableHeight: this.availableHeight,\n\t\t\tavailableWidth: this.availableWidth,\n\t\t\tpage: this.page\n\t\t},\n\t\tendingCell: this.endingCell,\n\t\tlastColumnWidth: this.lastColumnWidth\n\t});\n\n\tthis.lastColumnWidth = 0;\n};\n\nDocumentContext.prototype.beginColumn = function (width, offset, endingCell) {\n\tvar saved = this.snapshots[this.snapshots.length - 1];\n\n\tthis.calculateBottomMost(saved);\n\n\tthis.endingCell = endingCell;\n\tthis.page = saved.page;\n\tthis.x = this.x + this.lastColumnWidth + (offset || 0);\n\tthis.y = saved.y;\n\tthis.availableWidth = width;\t//saved.availableWidth - offset;\n\tthis.availableHeight = saved.availableHeight;\n\n\tthis.lastColumnWidth = width;\n};\n\nDocumentContext.prototype.calculateBottomMost = function (destContext) {\n\tif (this.endingCell) {\n\t\tthis.saveContextInEndingCell(this.endingCell);\n\t\tthis.endingCell = null;\n\t} else {\n\t\tdestContext.bottomMost = bottomMostContext(this, destContext.bottomMost);\n\t}\n};\n\nDocumentContext.prototype.markEnding = function (endingCell) {\n\tthis.page = endingCell._columnEndingContext.page;\n\tthis.x = endingCell._columnEndingContext.x;\n\tthis.y = endingCell._columnEndingContext.y;\n\tthis.availableWidth = endingCell._columnEndingContext.availableWidth;\n\tthis.availableHeight = endingCell._columnEndingContext.availableHeight;\n\tthis.lastColumnWidth = endingCell._columnEndingContext.lastColumnWidth;\n};\n\nDocumentContext.prototype.saveContextInEndingCell = function (endingCell) {\n\tendingCell._columnEndingContext = {\n\t\tpage: this.page,\n\t\tx: this.x,\n\t\ty: this.y,\n\t\tavailableHeight: this.availableHeight,\n\t\tavailableWidth: this.availableWidth,\n\t\tlastColumnWidth: this.lastColumnWidth\n\t};\n};\n\nDocumentContext.prototype.completeColumnGroup = function (height) {\n\tvar saved = this.snapshots.pop();\n\n\tthis.calculateBottomMost(saved);\n\n\tthis.endingCell = null;\n\tthis.x = saved.x;\n\n\tvar y = saved.bottomMost.y;\n\tif (height) {\n\t\tif (saved.page === saved.bottomMost.page) {\n\t\t\tif ((saved.y + height) > y) {\n\t\t\t\ty = saved.y + height;\n\t\t\t}\n\t\t} else {\n\t\t\ty += height;\n\t\t}\n\t}\n\n\tthis.y = y;\n\tthis.page = saved.bottomMost.page;\n\tthis.availableWidth = saved.availableWidth;\n\tthis.availableHeight = saved.bottomMost.availableHeight;\n\tif (height) {\n\t\tthis.availableHeight -= (y - saved.bottomMost.y);\n\t}\n\tthis.lastColumnWidth = saved.lastColumnWidth;\n};\n\nDocumentContext.prototype.addMargin = function (left, right) {\n\tthis.x += left;\n\tthis.availableWidth -= left + (right || 0);\n};\n\nDocumentContext.prototype.moveDown = function (offset) {\n\tthis.y += offset;\n\tthis.availableHeight -= offset;\n\n\treturn this.availableHeight > 0;\n};\n\nDocumentContext.prototype.initializePage = function () {\n\tthis.y = this.pageMargins.top;\n\tthis.availableHeight = this.getCurrentPage().pageSize.height - this.pageMargins.top - this.pageMargins.bottom;\n\tthis.pageSnapshot().availableWidth = this.getCurrentPage().pageSize.width - this.pageMargins.left - this.pageMargins.right;\n};\n\nDocumentContext.prototype.pageSnapshot = function () {\n\tif (this.snapshots[0]) {\n\t\treturn this.snapshots[0];\n\t} else {\n\t\treturn this;\n\t}\n};\n\nDocumentContext.prototype.moveTo = function (x, y) {\n\tif (x !== undefined && x !== null) {\n\t\tthis.x = x;\n\t\tthis.availableWidth = this.getCurrentPage().pageSize.width - this.x - this.pageMargins.right;\n\t}\n\tif (y !== undefined && y !== null) {\n\t\tthis.y = y;\n\t\tthis.availableHeight = this.getCurrentPage().pageSize.height - this.y - this.pageMargins.bottom;\n\t}\n};\n\nDocumentContext.prototype.moveToRelative = function (x, y) {\n\tif (x !== undefined && x !== null) {\n\t\tthis.x = this.x + x;\n\t}\n\tif (y !== undefined && y !== null) {\n\t\tthis.y = this.y + y;\n\t}\n};\n\nDocumentContext.prototype.beginDetachedBlock = function () {\n\tthis.snapshots.push({\n\t\tx: this.x,\n\t\ty: this.y,\n\t\tavailableHeight: this.availableHeight,\n\t\tavailableWidth: this.availableWidth,\n\t\tpage: this.page,\n\t\tendingCell: this.endingCell,\n\t\tlastColumnWidth: this.lastColumnWidth\n\t});\n};\n\nDocumentContext.prototype.endDetachedBlock = function () {\n\tvar saved = this.snapshots.pop();\n\n\tthis.x = saved.x;\n\tthis.y = saved.y;\n\tthis.availableWidth = saved.availableWidth;\n\tthis.availableHeight = saved.availableHeight;\n\tthis.page = saved.page;\n\tthis.endingCell = saved.endingCell;\n\tthis.lastColumnWidth = saved.lastColumnWidth;\n};\n\nfunction pageOrientation(pageOrientationString, currentPageOrientation) {\n\tif (pageOrientationString === undefined) {\n\t\treturn currentPageOrientation;\n\t} else if (isString(pageOrientationString) && (pageOrientationString.toLowerCase() === 'landscape')) {\n\t\treturn 'landscape';\n\t} else {\n\t\treturn 'portrait';\n\t}\n}\n\nvar getPageSize = function (currentPage, newPageOrientation) {\n\n\tnewPageOrientation = pageOrientation(newPageOrientation, currentPage.pageSize.orientation);\n\n\tif (newPageOrientation !== currentPage.pageSize.orientation) {\n\t\treturn {\n\t\t\torientation: newPageOrientation,\n\t\t\twidth: currentPage.pageSize.height,\n\t\t\theight: currentPage.pageSize.width\n\t\t};\n\t} else {\n\t\treturn {\n\t\t\torientation: currentPage.pageSize.orientation,\n\t\t\twidth: currentPage.pageSize.width,\n\t\t\theight: currentPage.pageSize.height\n\t\t};\n\t}\n\n};\n\n\nDocumentContext.prototype.moveToNextPage = function (pageOrientation) {\n\tvar nextPageIndex = this.page + 1;\n\n\tvar prevPage = this.page;\n\tvar prevY = this.y;\n\n\tvar createNewPage = nextPageIndex >= this.pages.length;\n\tif (createNewPage) {\n\t\tvar currentAvailableWidth = this.availableWidth;\n\t\tvar currentPageOrientation = this.getCurrentPage().pageSize.orientation;\n\n\t\tvar pageSize = getPageSize(this.getCurrentPage(), pageOrientation);\n\t\tthis.addPage(pageSize);\n\n\t\tif (currentPageOrientation === pageSize.orientation) {\n\t\t\tthis.availableWidth = currentAvailableWidth;\n\t\t}\n\t} else {\n\t\tthis.page = nextPageIndex;\n\t\tthis.initializePage();\n\t}\n\n\treturn {\n\t\tnewPageCreated: createNewPage,\n\t\tprevPage: prevPage,\n\t\tprevY: prevY,\n\t\ty: this.y\n\t};\n};\n\n\nDocumentContext.prototype.addPage = function (pageSize) {\n\tvar page = { items: [], pageSize: pageSize };\n\tthis.pages.push(page);\n\tthis.backgroundLength.push(0);\n\tthis.page = this.pages.length - 1;\n\tthis.initializePage();\n\n\tthis.tracker.emit('pageAdded');\n\n\treturn page;\n};\n\nDocumentContext.prototype.getCurrentPage = function () {\n\tif (this.page < 0 || this.page >= this.pages.length) {\n\t\treturn null;\n\t}\n\n\treturn this.pages[this.page];\n};\n\nDocumentContext.prototype.getCurrentPosition = function () {\n\tvar pageSize = this.getCurrentPage().pageSize;\n\tvar innerHeight = pageSize.height - this.pageMargins.top - this.pageMargins.bottom;\n\tvar innerWidth = pageSize.width - this.pageMargins.left - this.pageMargins.right;\n\n\treturn {\n\t\tpageNumber: this.page + 1,\n\t\tpageOrientation: pageSize.orientation,\n\t\tpageInnerHeight: innerHeight,\n\t\tpageInnerWidth: innerWidth,\n\t\tleft: this.x,\n\t\ttop: this.y,\n\t\tverticalRatio: ((this.y - this.pageMargins.top) / innerHeight),\n\t\thorizontalRatio: ((this.x - this.pageMargins.left) / innerWidth)\n\t};\n};\n\nfunction bottomMostContext(c1, c2) {\n\tvar r;\n\n\tif (c1.page > c2.page) {\n\t\tr = c1;\n\t} else if (c2.page > c1.page) {\n\t\tr = c2;\n\t} else {\n\t\tr = (c1.y > c2.y) ? c1 : c2;\n\t}\n\n\treturn {\n\t\tpage: r.page,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tavailableHeight: r.availableHeight,\n\t\tavailableWidth: r.availableWidth\n\t};\n}\n\nmodule.exports = DocumentContext;\n\n\n/***/ }),\n\n/***/ 1196:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Line = __webpack_require__(4775);\nvar isNumber = (__webpack_require__(6225).isNumber);\nvar pack = (__webpack_require__(6225).pack);\nvar offsetVector = (__webpack_require__(6225).offsetVector);\nvar DocumentContext = __webpack_require__(3858);\n\n/**\n * Creates an instance of ElementWriter - a line/vector writer, which adds\n * elements to current page and sets their positions based on the context\n */\nfunction ElementWriter(context, tracker) {\n\tthis.context = context;\n\tthis.contextStack = [];\n\tthis.tracker = tracker;\n}\n\nfunction addPageItem(page, item, index) {\n\tif (index === null || index === undefined || index < 0 || index > page.items.length) {\n\t\tpage.items.push(item);\n\t} else {\n\t\tpage.items.splice(index, 0, item);\n\t}\n}\n\nElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) {\n\tvar height = line.getHeight();\n\tvar context = this.context;\n\tvar page = context.getCurrentPage(),\n\t\tposition = this.getCurrentPositionOnPage();\n\n\tif (context.availableHeight < height || !page) {\n\t\treturn false;\n\t}\n\n\tline.x = context.x + (line.x || 0);\n\tline.y = context.y + (line.y || 0);\n\n\tthis.alignLine(line);\n\n\taddPageItem(page, {\n\t\ttype: 'line',\n\t\titem: line\n\t}, index);\n\tthis.tracker.emit('lineAdded', line);\n\n\tif (!dontUpdateContextPosition) {\n\t\tcontext.moveDown(height);\n\t}\n\n\treturn position;\n};\n\nElementWriter.prototype.alignLine = function (line) {\n\tvar width = this.context.availableWidth;\n\tvar lineWidth = line.getWidth();\n\n\tvar alignment = line.inlines && line.inlines.length > 0 && line.inlines[0].alignment;\n\n\tvar offset = 0;\n\tswitch (alignment) {\n\t\tcase 'right':\n\t\t\toffset = width - lineWidth;\n\t\t\tbreak;\n\t\tcase 'center':\n\t\t\toffset = (width - lineWidth) / 2;\n\t\t\tbreak;\n\t}\n\n\tif (offset) {\n\t\tline.x = (line.x || 0) + offset;\n\t}\n\n\tif (alignment === 'justify' &&\n\t\t!line.newLineForced &&\n\t\t!line.lastLineInParagraph &&\n\t\tline.inlines.length > 1) {\n\t\tvar additionalSpacing = (width - lineWidth) / (line.inlines.length - 1);\n\n\t\tfor (var i = 1, l = line.inlines.length; i < l; i++) {\n\t\t\toffset = i * additionalSpacing;\n\n\t\t\tline.inlines[i].x += offset;\n\t\t\tline.inlines[i].justifyShift = additionalSpacing;\n\t\t}\n\t}\n};\n\nElementWriter.prototype.addImage = function (image, index, type) {\n\tvar context = this.context;\n\tvar page = context.getCurrentPage(),\n\t\tposition = this.getCurrentPositionOnPage();\n\n\tif (!page || (image.absolutePosition === undefined && context.availableHeight < image._height && page.items.length > 0)) {\n\t\treturn false;\n\t}\n\n\tif (image._x === undefined) {\n\t\timage._x = image.x || 0;\n\t}\n\n\timage.x = context.x + image._x;\n\timage.y = context.y;\n\n\tthis.alignImage(image);\n\n\taddPageItem(page, {\n\t\ttype: type || 'image',\n\t\titem: image\n\t}, index);\n\n\tcontext.moveDown(image._height);\n\n\treturn position;\n};\n\nElementWriter.prototype.addSVG = function (image, index) {\n\treturn this.addImage(image, index, 'svg')\n};\n\nElementWriter.prototype.addQr = function (qr, index) {\n\tvar context = this.context;\n\tvar page = context.getCurrentPage(),\n\t\tposition = this.getCurrentPositionOnPage();\n\n\tif (!page || (qr.absolutePosition === undefined && context.availableHeight < qr._height)) {\n\t\treturn false;\n\t}\n\n\tif (qr._x === undefined) {\n\t\tqr._x = qr.x || 0;\n\t}\n\n\tqr.x = context.x + qr._x;\n\tqr.y = context.y;\n\n\tthis.alignImage(qr);\n\n\tfor (var i = 0, l = qr._canvas.length; i < l; i++) {\n\t\tvar vector = qr._canvas[i];\n\t\tvector.x += qr.x;\n\t\tvector.y += qr.y;\n\t\tthis.addVector(vector, true, true, index);\n\t}\n\n\tcontext.moveDown(qr._height);\n\n\treturn position;\n};\n\nElementWriter.prototype.alignImage = function (image) {\n\tvar width = this.context.availableWidth;\n\tvar imageWidth = image._minWidth;\n\tvar offset = 0;\n\tswitch (image._alignment) {\n\t\tcase 'right':\n\t\t\toffset = width - imageWidth;\n\t\t\tbreak;\n\t\tcase 'center':\n\t\t\toffset = (width - imageWidth) / 2;\n\t\t\tbreak;\n\t}\n\n\tif (offset) {\n\t\timage.x = (image.x || 0) + offset;\n\t}\n};\n\nElementWriter.prototype.alignCanvas = function (node) {\n\tvar width = this.context.availableWidth;\n\tvar canvasWidth = node._minWidth;\n\tvar offset = 0;\n\tswitch (node._alignment) {\n\t\tcase 'right':\n\t\t\toffset = width - canvasWidth;\n\t\t\tbreak;\n\t\tcase 'center':\n\t\t\toffset = (width - canvasWidth) / 2;\n\t\t\tbreak;\n\t}\n\tif (offset) {\n\t\tnode.canvas.forEach(function (vector) {\n\t\t\toffsetVector(vector, offset, 0);\n\t\t});\n\t}\n};\n\nElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {\n\tvar context = this.context;\n\tvar page = context.getCurrentPage(),\n\t\tposition = this.getCurrentPositionOnPage();\n\n\tif (page) {\n\t\toffsetVector(vector, ignoreContextX ? 0 : context.x, ignoreContextY ? 0 : context.y);\n\t\taddPageItem(page, {\n\t\t\ttype: 'vector',\n\t\t\titem: vector\n\t\t}, index);\n\t\treturn position;\n\t}\n};\n\nElementWriter.prototype.beginClip = function (width, height) {\n\tvar ctx = this.context;\n\tvar page = ctx.getCurrentPage();\n\tpage.items.push({\n\t\ttype: 'beginClip',\n\t\titem: { x: ctx.x, y: ctx.y, width: width, height: height }\n\t});\n\treturn true;\n};\n\nElementWriter.prototype.endClip = function () {\n\tvar ctx = this.context;\n\tvar page = ctx.getCurrentPage();\n\tpage.items.push({\n\t\ttype: 'endClip'\n\t});\n\treturn true;\n};\n\nfunction cloneLine(line) {\n\tvar result = new Line(line.maxWidth);\n\n\tfor (var key in line) {\n\t\tif (line.hasOwnProperty(key)) {\n\t\t\tresult[key] = line[key];\n\t\t}\n\t}\n\n\treturn result;\n}\n\nElementWriter.prototype.addFragment = function (block, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {\n\tvar ctx = this.context;\n\tvar page = ctx.getCurrentPage();\n\n\tif (!useBlockXOffset && block.height > ctx.availableHeight) {\n\t\treturn false;\n\t}\n\n\tblock.items.forEach(function (item) {\n\t\tswitch (item.type) {\n\t\t\tcase 'line':\n\t\t\t\tvar l = cloneLine(item.item);\n\n\t\t\t\tif (l._node) {\n\t\t\t\t\tl._node.positions[0].pageNumber = ctx.page + 1;\n\t\t\t\t}\n\t\t\t\tl.x = (l.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);\n\t\t\t\tl.y = (l.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);\n\n\t\t\t\tpage.items.push({\n\t\t\t\t\ttype: 'line',\n\t\t\t\t\titem: l\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'vector':\n\t\t\t\tvar v = pack(item.item);\n\n\t\t\t\toffsetVector(v, useBlockXOffset ? (block.xOffset || 0) : ctx.x, useBlockYOffset ? (block.yOffset || 0) : ctx.y);\n\t\t\t\tpage.items.push({\n\t\t\t\t\ttype: 'vector',\n\t\t\t\t\titem: v\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'image':\n\t\t\tcase 'svg':\n\t\t\t\tvar img = pack(item.item);\n\n\t\t\t\timg.x = (img.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);\n\t\t\t\timg.y = (img.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);\n\n\t\t\t\tpage.items.push({\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\titem: img\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif (!dontUpdateContextPosition) {\n\t\tctx.moveDown(block.height);\n\t}\n\n\treturn true;\n};\n\n/**\n * Pushes the provided context onto the stack or creates a new one\n *\n * pushContext(context) - pushes the provided context and makes it current\n * pushContext(width, height) - creates and pushes a new context with the specified width and height\n * pushContext() - creates a new context for unbreakable blocks (with current availableWidth and full-page-height)\n */\nElementWriter.prototype.pushContext = function (contextOrWidth, height) {\n\tif (contextOrWidth === undefined) {\n\t\theight = this.context.getCurrentPage().height - this.context.pageMargins.top - this.context.pageMargins.bottom;\n\t\tcontextOrWidth = this.context.availableWidth;\n\t}\n\n\tif (isNumber(contextOrWidth)) {\n\t\tcontextOrWidth = new DocumentContext({ width: contextOrWidth, height: height }, { left: 0, right: 0, top: 0, bottom: 0 });\n\t}\n\n\tthis.contextStack.push(this.context);\n\tthis.context = contextOrWidth;\n};\n\nElementWriter.prototype.popContext = function () {\n\tthis.context = this.contextStack.pop();\n};\n\nElementWriter.prototype.getCurrentPositionOnPage = function () {\n\treturn (this.contextStack[0] || this.context).getCurrentPosition();\n};\n\n\nmodule.exports = ElementWriter;\n\n\n/***/ }),\n\n/***/ 2249:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isArray = (__webpack_require__(6225).isArray);\n\nfunction typeName(bold, italics) {\n\tvar type = 'normal';\n\tif (bold && italics) {\n\t\ttype = 'bolditalics';\n\t} else if (bold) {\n\t\ttype = 'bold';\n\t} else if (italics) {\n\t\ttype = 'italics';\n\t}\n\treturn type;\n}\n\nfunction FontProvider(fontDescriptors, pdfKitDoc) {\n\tthis.fonts = {};\n\tthis.pdfKitDoc = pdfKitDoc;\n\tthis.fontCache = {};\n\n\tfor (var font in fontDescriptors) {\n\t\tif (fontDescriptors.hasOwnProperty(font)) {\n\t\t\tvar fontDef = fontDescriptors[font];\n\n\t\t\tthis.fonts[font] = {\n\t\t\t\tnormal: fontDef.normal,\n\t\t\t\tbold: fontDef.bold,\n\t\t\t\titalics: fontDef.italics,\n\t\t\t\tbolditalics: fontDef.bolditalics\n\t\t\t};\n\t\t}\n\t}\n}\n\nFontProvider.prototype.getFontType = function (bold, italics) {\n\treturn typeName(bold, italics);\n}\n\nFontProvider.prototype.getFontFile = function (familyName, bold, italics) {\n\tvar type = this.getFontType(bold, italics);\n\tif (!this.fonts[familyName] || !this.fonts[familyName][type]) {\n\t\treturn null;\n\t}\n\n\treturn this.fonts[familyName][type];\n}\n\nFontProvider.prototype.provideFont = function (familyName, bold, italics) {\n\tvar type = this.getFontType(bold, italics);\n\tif (this.getFontFile(familyName, bold, italics) === null) {\n\t\tthrow new Error('Font \\'' + familyName + '\\' in style \\'' + type + '\\' is not defined in the font section of the document definition.');\n\t}\n\n\tthis.fontCache[familyName] = this.fontCache[familyName] || {};\n\n\tif (!this.fontCache[familyName][type]) {\n\t\tvar def = this.fonts[familyName][type];\n\t\tif (!isArray(def)) {\n\t\t\tdef = [def];\n\t\t}\n\t\tthis.fontCache[familyName][type] = this.pdfKitDoc.font.apply(this.pdfKitDoc, def)._font;\n\t}\n\n\treturn this.fontCache[familyName][type];\n};\n\nmodule.exports = FontProvider;\n\n\n/***/ }),\n\n/***/ 6225:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nfunction isString(variable) {\n\treturn typeof variable === 'string' || variable instanceof String;\n}\n\nfunction isNumber(variable) {\n\treturn typeof variable === 'number' || variable instanceof Number;\n}\n\nfunction isBoolean(variable) {\n\treturn typeof variable === 'boolean';\n}\n\nfunction isArray(variable) {\n\treturn Array.isArray(variable);\n}\n\nfunction isFunction(variable) {\n\treturn typeof variable === 'function';\n}\n\nfunction isObject(variable) {\n\treturn variable !== null && typeof variable === 'object';\n}\n\nfunction isNull(variable) {\n\treturn variable === null;\n}\n\nfunction isUndefined(variable) {\n\treturn variable === undefined;\n}\n\nfunction pack() {\n\tvar result = {};\n\n\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\tvar obj = arguments[i];\n\n\t\tif (obj) {\n\t\t\tfor (var key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tresult[key] = obj[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction offsetVector(vector, x, y) {\n\tswitch (vector.type) {\n\t\tcase 'ellipse':\n\t\tcase 'rect':\n\t\t\tvector.x += x;\n\t\t\tvector.y += y;\n\t\t\tbreak;\n\t\tcase 'line':\n\t\t\tvector.x1 += x;\n\t\t\tvector.x2 += x;\n\t\t\tvector.y1 += y;\n\t\t\tvector.y2 += y;\n\t\t\tbreak;\n\t\tcase 'polyline':\n\t\t\tfor (var i = 0, l = vector.points.length; i < l; i++) {\n\t\t\t\tvector.points[i].x += x;\n\t\t\t\tvector.points[i].y += y;\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nfunction fontStringify(key, val) {\n\tif (key === 'font') {\n\t\treturn 'font';\n\t}\n\treturn val;\n}\n\nfunction getNodeId(node) {\n\tif (node.id) {\n\t\treturn node.id;\n\t}\n\n\tif (isArray(node.text)) {\n\t\tfor (var i = 0, l = node.text.length; i < l; i++) {\n\t\t\tvar n = node.text[i];\n\t\t\tvar nodeId = getNodeId(n);\n\t\t\tif (nodeId) {\n\t\t\t\treturn nodeId;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction isPattern(color) {\n\treturn isArray(color) && color.length === 2;\n}\n\n// converts from a [<pattern name>, <color>] as used by pdfmake\n// into [<pattern object>, <color>] as used by pdfkit\n// (the pattern has to be registered in the doc definition of course)\nfunction getPattern(color, patterns) {\n\treturn [patterns[color[0]], color[1]];\n}\n\nmodule.exports = {\n\tisString: isString,\n\tisNumber: isNumber,\n\tisBoolean: isBoolean,\n\tisArray: isArray,\n\tisFunction: isFunction,\n\tisObject: isObject,\n\tisNull: isNull,\n\tisUndefined: isUndefined,\n\tpack: pack,\n\tfontStringify: fontStringify,\n\toffsetVector: offsetVector,\n\tgetNodeId: getNodeId,\n\tisPattern: isPattern,\n\tgetPattern: getPattern\n};\n\n\n/***/ }),\n\n/***/ 3090:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/* provided dependency */ var Buffer = __webpack_require__(8823)[\"Buffer\"];\n\n\nvar fs = __webpack_require__(3857);\n\nfunction ImageMeasure(pdfKitDoc, imageDictionary) {\n\tthis.pdfKitDoc = pdfKitDoc;\n\tthis.imageDictionary = imageDictionary || {};\n}\n\nImageMeasure.prototype.measureImage = function (src) {\n\tvar image;\n\tvar that = this;\n\n\tif (!this.pdfKitDoc._imageRegistry[src]) {\n\t\ttry {\n\t\t\timage = this.pdfKitDoc.openImage(realImageSrc(src));\n\t\t\tif (!image) {\n\t\t\t\tthrow 'No image';\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow 'Invalid image: ' + error.toString() + '\\nImages dictionary should contain dataURL entries (or local file paths in node.js)';\n\t\t}\n\t\timage.embed(this.pdfKitDoc);\n\t\tthis.pdfKitDoc._imageRegistry[src] = image;\n\t} else {\n\t\timage = this.pdfKitDoc._imageRegistry[src];\n\t}\n\n\treturn { width: image.width, height: image.height };\n\n\tfunction realImageSrc(src) {\n\t\tvar img = that.imageDictionary[src];\n\n\t\tif (!img) {\n\t\t\treturn src;\n\t\t}\n\n\t\tif (fs.existsSync(img)) {\n\t\t\treturn fs.readFileSync(img);\n\t\t}\n\n\t\tvar index = img.indexOf('base64,');\n\t\tif (index < 0) {\n\t\t\treturn that.imageDictionary[src];\n\t\t}\n\n\t\treturn Buffer.from(img.substring(index + 7), 'base64');\n\t}\n};\n\nmodule.exports = ImageMeasure;\n\n\n/***/ }),\n\n/***/ 2678:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar TraversalTracker = __webpack_require__(8537);\nvar DocPreprocessor = __webpack_require__(4889);\nvar DocMeasure = __webpack_require__(1728);\nvar DocumentContext = __webpack_require__(3858);\nvar PageElementWriter = __webpack_require__(2912);\nvar ColumnCalculator = __webpack_require__(4498);\nvar TableProcessor = __webpack_require__(9342);\nvar Line = __webpack_require__(4775);\nvar isString = (__webpack_require__(6225).isString);\nvar isArray = (__webpack_require__(6225).isArray);\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar isNull = (__webpack_require__(6225).isNull);\nvar pack = (__webpack_require__(6225).pack);\nvar offsetVector = (__webpack_require__(6225).offsetVector);\nvar fontStringify = (__webpack_require__(6225).fontStringify);\nvar getNodeId = (__webpack_require__(6225).getNodeId);\nvar isFunction = (__webpack_require__(6225).isFunction);\nvar TextTools = __webpack_require__(1350);\nvar StyleContextStack = __webpack_require__(7597);\nvar isNumber = (__webpack_require__(6225).isNumber);\n\nfunction addAll(target, otherArray) {\n\totherArray.forEach(function (item) {\n\t\ttarget.push(item);\n\t});\n}\n\n/**\n * Creates an instance of LayoutBuilder - layout engine which turns document-definition-object\n * into a set of pages, lines, inlines and vectors ready to be rendered into a PDF\n *\n * @param {Object} pageSize - an object defining page width and height\n * @param {Object} pageMargins - an object defining top, left, right and bottom margins\n */\nfunction LayoutBuilder(pageSize, pageMargins, imageMeasure, svgMeasure) {\n\tthis.pageSize = pageSize;\n\tthis.pageMargins = pageMargins;\n\tthis.tracker = new TraversalTracker();\n\tthis.imageMeasure = imageMeasure;\n\tthis.svgMeasure = svgMeasure;\n\tthis.tableLayouts = {};\n}\n\nLayoutBuilder.prototype.registerTableLayouts = function (tableLayouts) {\n\tthis.tableLayouts = pack(this.tableLayouts, tableLayouts);\n};\n\n/**\n * Executes layout engine on document-definition-object and creates an array of pages\n * containing positioned Blocks, Lines and inlines\n *\n * @param {Object} docStructure document-definition-object\n * @param {Object} fontProvider font provider\n * @param {Object} styleDictionary dictionary with style definitions\n * @param {Object} defaultStyle default style definition\n * @return {Array} an array of pages\n */\nLayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {\n\n\tfunction addPageBreaksIfNecessary(linearNodeList, pages) {\n\n\t\tif (!isFunction(pageBreakBeforeFct)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlinearNodeList = linearNodeList.filter(function (node) {\n\t\t\treturn node.positions.length > 0;\n\t\t});\n\n\t\tlinearNodeList.forEach(function (node) {\n\t\t\tvar nodeInfo = {};\n\t\t\t[\n\t\t\t\t'id', 'text', 'ul', 'ol', 'table', 'image', 'qr', 'canvas', 'svg', 'columns',\n\t\t\t\t'headlineLevel', 'style', 'pageBreak', 'pageOrientation',\n\t\t\t\t'width', 'height'\n\t\t\t].forEach(function (key) {\n\t\t\t\tif (node[key] !== undefined) {\n\t\t\t\t\tnodeInfo[key] = node[key];\n\t\t\t\t}\n\t\t\t});\n\t\t\tnodeInfo.startPosition = node.positions[0];\n\t\t\tnodeInfo.pageNumbers = Array.from(new Set(node.positions.map(function (node) { return node.pageNumber; })));\n\t\t\tnodeInfo.pages = pages.length;\n\t\t\tnodeInfo.stack = isArray(node.stack);\n\n\t\t\tnode.nodeInfo = nodeInfo;\n\t\t});\n\n\t\tfor (var index = 0; index < linearNodeList.length; index++) {\n\t\t\tvar node = linearNodeList[index];\n\t\t\tif (node.pageBreak !== 'before' && !node.pageBreakCalculated) {\n\t\t\t\tnode.pageBreakCalculated = true;\n\t\t\t\tvar pageNumber = node.nodeInfo.pageNumbers[0];\n\t\t\t\tvar followingNodesOnPage = [];\n\t\t\t\tvar nodesOnNextPage = [];\n\t\t\t\tvar previousNodesOnPage = [];\n\t\t\t\tif (pageBreakBeforeFct.length > 1) {\n\t\t\t\t\tfor (var ii = index + 1, l = linearNodeList.length; ii < l; ii++) {\n\t\t\t\t\t\tif (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {\n\t\t\t\t\t\t\tfollowingNodesOnPage.push(linearNodeList[ii].nodeInfo);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (pageBreakBeforeFct.length > 2 && linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber + 1) > -1) {\n\t\t\t\t\t\t\tnodesOnNextPage.push(linearNodeList[ii].nodeInfo);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pageBreakBeforeFct.length > 3) {\n\t\t\t\t\tfor (var ii = 0; ii < index; ii++) {\n\t\t\t\t\t\tif (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {\n\t\t\t\t\t\t\tpreviousNodesOnPage.push(linearNodeList[ii].nodeInfo);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pageBreakBeforeFct(node.nodeInfo, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage)) {\n\t\t\t\t\tnode.pageBreak = 'before';\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tthis.docPreprocessor = new DocPreprocessor();\n\tthis.docMeasure = new DocMeasure(fontProvider, styleDictionary, defaultStyle, this.imageMeasure, this.svgMeasure, this.tableLayouts, images);\n\n\n\tfunction resetXYs(result) {\n\t\tresult.linearNodeList.forEach(function (node) {\n\t\t\tnode.resetXY();\n\t\t});\n\t}\n\n\tvar result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);\n\twhile (addPageBreaksIfNecessary(result.linearNodeList, result.pages)) {\n\t\tresetXYs(result);\n\t\tresult = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);\n\t}\n\n\treturn result.pages;\n};\n\nLayoutBuilder.prototype.tryLayoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {\n\n\tthis.linearNodeList = [];\n\tdocStructure = this.docPreprocessor.preprocessDocument(docStructure);\n\tdocStructure = this.docMeasure.measureDocument(docStructure);\n\n\tthis.writer = new PageElementWriter(\n\t\tnew DocumentContext(this.pageSize, this.pageMargins), this.tracker);\n\n\tvar _this = this;\n\tthis.writer.context().tracker.startTracking('pageAdded', function () {\n\t\t_this.addBackground(background);\n\t});\n\n\tthis.addBackground(background);\n\tthis.processNode(docStructure);\n\tthis.addHeadersAndFooters(header, footer);\n\tif (watermark != null) {\n\t\tthis.addWatermark(watermark, fontProvider, defaultStyle);\n\t}\n\n\treturn { pages: this.writer.context().pages, linearNodeList: this.linearNodeList };\n};\n\n\nLayoutBuilder.prototype.addBackground = function (background) {\n\tvar backgroundGetter = isFunction(background) ? background : function () {\n\t\treturn background;\n\t};\n\n\tvar context = this.writer.context();\n\tvar pageSize = context.getCurrentPage().pageSize;\n\n\tvar pageBackground = backgroundGetter(context.page + 1, pageSize);\n\n\tif (pageBackground) {\n\t\tthis.writer.beginUnbreakableBlock(pageSize.width, pageSize.height);\n\t\tpageBackground = this.docPreprocessor.preprocessDocument(pageBackground);\n\t\tthis.processNode(this.docMeasure.measureDocument(pageBackground));\n\t\tthis.writer.commitUnbreakableBlock(0, 0);\n\t\tcontext.backgroundLength[context.page] += pageBackground.positions.length;\n\t}\n};\n\nLayoutBuilder.prototype.addStaticRepeatable = function (headerOrFooter, sizeFunction) {\n\tthis.addDynamicRepeatable(function () {\n\t\treturn JSON.parse(JSON.stringify(headerOrFooter)); // copy to new object\n\t}, sizeFunction);\n};\n\nLayoutBuilder.prototype.addDynamicRepeatable = function (nodeGetter, sizeFunction) {\n\tvar pages = this.writer.context().pages;\n\n\tfor (var pageIndex = 0, l = pages.length; pageIndex < l; pageIndex++) {\n\t\tthis.writer.context().page = pageIndex;\n\n\t\tvar node = nodeGetter(pageIndex + 1, l, this.writer.context().pages[pageIndex].pageSize);\n\n\t\tif (node) {\n\t\t\tvar sizes = sizeFunction(this.writer.context().getCurrentPage().pageSize, this.pageMargins);\n\t\t\tthis.writer.beginUnbreakableBlock(sizes.width, sizes.height);\n\t\t\tnode = this.docPreprocessor.preprocessDocument(node);\n\t\t\tthis.processNode(this.docMeasure.measureDocument(node));\n\t\t\tthis.writer.commitUnbreakableBlock(sizes.x, sizes.y);\n\t\t}\n\t}\n};\n\nLayoutBuilder.prototype.addHeadersAndFooters = function (header, footer) {\n\tvar headerSizeFct = function (pageSize, pageMargins) {\n\t\treturn {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: pageSize.width,\n\t\t\theight: pageMargins.top\n\t\t};\n\t};\n\n\tvar footerSizeFct = function (pageSize, pageMargins) {\n\t\treturn {\n\t\t\tx: 0,\n\t\t\ty: pageSize.height - pageMargins.bottom,\n\t\t\twidth: pageSize.width,\n\t\t\theight: pageMargins.bottom\n\t\t};\n\t};\n\n\tif (isFunction(header)) {\n\t\tthis.addDynamicRepeatable(header, headerSizeFct);\n\t} else if (header) {\n\t\tthis.addStaticRepeatable(header, headerSizeFct);\n\t}\n\n\tif (isFunction(footer)) {\n\t\tthis.addDynamicRepeatable(footer, footerSizeFct);\n\t} else if (footer) {\n\t\tthis.addStaticRepeatable(footer, footerSizeFct);\n\t}\n};\n\nLayoutBuilder.prototype.addWatermark = function (watermark, fontProvider, defaultStyle) {\n\tif (isString(watermark)) {\n\t\twatermark = { 'text': watermark };\n\t}\n\n\tif (!watermark.text) { // empty watermark text\n\t\treturn;\n\t}\n\n\twatermark.font = watermark.font || defaultStyle.font || 'Roboto';\n\twatermark.fontSize = watermark.fontSize || 'auto';\n\twatermark.color = watermark.color || 'black';\n\twatermark.opacity = isNumber(watermark.opacity) ? watermark.opacity : 0.6;\n\twatermark.bold = watermark.bold || false;\n\twatermark.italics = watermark.italics || false;\n\twatermark.angle = !isUndefined(watermark.angle) && !isNull(watermark.angle) ? watermark.angle : null;\n\n\tif (watermark.angle === null) {\n\t\twatermark.angle = Math.atan2(this.pageSize.height, this.pageSize.width) * -180 / Math.PI;\n\t}\n\n\tif (watermark.fontSize === 'auto') {\n\t\twatermark.fontSize = getWatermarkFontSize(this.pageSize, watermark, fontProvider);\n\t}\n\n\tvar watermarkObject = {\n\t\ttext: watermark.text,\n\t\tfont: fontProvider.provideFont(watermark.font, watermark.bold, watermark.italics),\n\t\tfontSize: watermark.fontSize,\n\t\tcolor: watermark.color,\n\t\topacity: watermark.opacity,\n\t\tangle: watermark.angle\n\t};\n\n\twatermarkObject._size = getWatermarkSize(watermark, fontProvider);\n\n\tvar pages = this.writer.context().pages;\n\tfor (var i = 0, l = pages.length; i < l; i++) {\n\t\tpages[i].watermark = watermarkObject;\n\t}\n\n\tfunction getWatermarkSize(watermark, fontProvider) {\n\t\tvar textTools = new TextTools(fontProvider);\n\t\tvar styleContextStack = new StyleContextStack(null, { font: watermark.font, bold: watermark.bold, italics: watermark.italics });\n\n\t\tstyleContextStack.push({\n\t\t\tfontSize: watermark.fontSize\n\t\t});\n\n\t\tvar size = textTools.sizeOfString(watermark.text, styleContextStack);\n\t\tvar rotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);\n\n\t\treturn { size: size, rotatedSize: rotatedSize };\n\t}\n\n\tfunction getWatermarkFontSize(pageSize, watermark, fontProvider) {\n\t\tvar textTools = new TextTools(fontProvider);\n\t\tvar styleContextStack = new StyleContextStack(null, { font: watermark.font, bold: watermark.bold, italics: watermark.italics });\n\t\tvar rotatedSize;\n\n\t\t/**\n\t\t * Binary search the best font size.\n\t\t * Initial bounds [0, 1000]\n\t\t * Break when range < 1\n\t\t */\n\t\tvar a = 0;\n\t\tvar b = 1000;\n\t\tvar c = (a + b) / 2;\n\t\twhile (Math.abs(a - b) > 1) {\n\t\t\tstyleContextStack.push({\n\t\t\t\tfontSize: c\n\t\t\t});\n\t\t\trotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);\n\t\t\tif (rotatedSize.width > pageSize.width) {\n\t\t\t\tb = c;\n\t\t\t\tc = (a + b) / 2;\n\t\t\t} else if (rotatedSize.width < pageSize.width) {\n\t\t\t\tif (rotatedSize.height > pageSize.height) {\n\t\t\t\t\tb = c;\n\t\t\t\t\tc = (a + b) / 2;\n\t\t\t\t} else {\n\t\t\t\t\ta = c;\n\t\t\t\t\tc = (a + b) / 2;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstyleContextStack.pop();\n\t\t}\n\t\t/*\n\t\t End binary search\n\t\t */\n\t\treturn c;\n\t}\n};\n\nfunction decorateNode(node) {\n\tvar x = node.x, y = node.y;\n\tnode.positions = [];\n\n\tif (isArray(node.canvas)) {\n\t\tnode.canvas.forEach(function (vector) {\n\t\t\tvar x = vector.x, y = vector.y, x1 = vector.x1, y1 = vector.y1, x2 = vector.x2, y2 = vector.y2;\n\t\t\tvector.resetXY = function () {\n\t\t\t\tvector.x = x;\n\t\t\t\tvector.y = y;\n\t\t\t\tvector.x1 = x1;\n\t\t\t\tvector.y1 = y1;\n\t\t\t\tvector.x2 = x2;\n\t\t\t\tvector.y2 = y2;\n\t\t\t};\n\t\t});\n\t}\n\n\tnode.resetXY = function () {\n\t\tnode.x = x;\n\t\tnode.y = y;\n\t\tif (isArray(node.canvas)) {\n\t\t\tnode.canvas.forEach(function (vector) {\n\t\t\t\tvector.resetXY();\n\t\t\t});\n\t\t}\n\t};\n}\n\nLayoutBuilder.prototype.processNode = function (node) {\n\tvar self = this;\n\n\tthis.linearNodeList.push(node);\n\tdecorateNode(node);\n\n\tapplyMargins(function () {\n\t\tvar unbreakable = node.unbreakable;\n\t\tif (unbreakable) {\n\t\t\tself.writer.beginUnbreakableBlock();\n\t\t}\n\n\t\tvar absPosition = node.absolutePosition;\n\t\tif (absPosition) {\n\t\t\tself.writer.context().beginDetachedBlock();\n\t\t\tself.writer.context().moveTo(absPosition.x || 0, absPosition.y || 0);\n\t\t}\n\n\t\tvar relPosition = node.relativePosition;\n\t\tif (relPosition) {\n\t\t\tself.writer.context().beginDetachedBlock();\n\t\t\tself.writer.context().moveToRelative(relPosition.x || 0, relPosition.y || 0);\n\t\t}\n\n\t\tif (node.stack) {\n\t\t\tself.processVerticalContainer(node);\n\t\t} else if (node.columns) {\n\t\t\tself.processColumns(node);\n\t\t} else if (node.ul) {\n\t\t\tself.processList(false, node);\n\t\t} else if (node.ol) {\n\t\t\tself.processList(true, node);\n\t\t} else if (node.table) {\n\t\t\tself.processTable(node);\n\t\t} else if (node.text !== undefined) {\n\t\t\tself.processLeaf(node);\n\t\t} else if (node.toc) {\n\t\t\tself.processToc(node);\n\t\t} else if (node.image) {\n\t\t\tself.processImage(node);\n\t\t} else if (node.svg) {\n\t\t\tself.processSVG(node);\n\t\t} else if (node.canvas) {\n\t\t\tself.processCanvas(node);\n\t\t} else if (node.qr) {\n\t\t\tself.processQr(node);\n\t\t} else if (!node._span) {\n\t\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\n\t\t}\n\n\t\tif (absPosition || relPosition) {\n\t\t\tself.writer.context().endDetachedBlock();\n\t\t}\n\n\t\tif (unbreakable) {\n\t\t\tself.writer.commitUnbreakableBlock();\n\t\t}\n\t});\n\n\tfunction applyMargins(callback) {\n\t\tvar margin = node._margin;\n\n\t\tif (node.pageBreak === 'before') {\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t} else if (node.pageBreak === 'beforeOdd') {\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\tif ((self.writer.context().page + 1) % 2 === 1) {\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\t}\n\t\t} else if (node.pageBreak === 'beforeEven') {\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\tif ((self.writer.context().page + 1) % 2 === 0) {\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\t}\n\t\t}\n\n\t\tif (margin) {\n\t\t\tself.writer.context().moveDown(margin[1]);\n\t\t\tself.writer.context().addMargin(margin[0], margin[2]);\n\t\t}\n\n\t\tcallback();\n\n\t\tif (margin) {\n\t\t\tself.writer.context().addMargin(-margin[0], -margin[2]);\n\t\t\tself.writer.context().moveDown(margin[3]);\n\t\t}\n\n\t\tif (node.pageBreak === 'after') {\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t} else if (node.pageBreak === 'afterOdd') {\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\tif ((self.writer.context().page + 1) % 2 === 1) {\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\t}\n\t\t} else if (node.pageBreak === 'afterEven') {\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\tif ((self.writer.context().page + 1) % 2 === 0) {\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\n\t\t\t}\n\t\t}\n\t}\n};\n\n// vertical container\nLayoutBuilder.prototype.processVerticalContainer = function (node) {\n\tvar self = this;\n\tnode.stack.forEach(function (item) {\n\t\tself.processNode(item);\n\t\taddAll(node.positions, item.positions);\n\n\t\t//TODO: paragraph gap\n\t});\n};\n\n// columns\nLayoutBuilder.prototype.processColumns = function (columnNode) {\n\tvar columns = columnNode.columns;\n\tvar availableWidth = this.writer.context().availableWidth;\n\tvar gaps = gapArray(columnNode._gap);\n\n\tif (gaps) {\n\t\tavailableWidth -= (gaps.length - 1) * columnNode._gap;\n\t}\n\n\tColumnCalculator.buildColumnWidths(columns, availableWidth);\n\tvar result = this.processRow(columns, columns, gaps);\n\taddAll(columnNode.positions, result.positions);\n\n\n\tfunction gapArray(gap) {\n\t\tif (!gap) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar gaps = [];\n\t\tgaps.push(0);\n\n\t\tfor (var i = columns.length - 1; i > 0; i--) {\n\t\t\tgaps.push(gap);\n\t\t}\n\n\t\treturn gaps;\n\t}\n};\n\nLayoutBuilder.prototype.processRow = function (columns, widths, gaps, tableBody, tableRow, height) {\n\tvar self = this;\n\tvar pageBreaks = [], positions = [];\n\n\tthis.tracker.auto('pageChanged', storePageBreakData, function () {\n\t\twidths = widths || columns;\n\n\t\tself.writer.context().beginColumnGroup();\n\n\t\tfor (var i = 0, l = columns.length; i < l; i++) {\n\t\t\tvar column = columns[i];\n\t\t\tvar width = widths[i]._calcWidth;\n\t\t\tvar leftOffset = colLeftOffset(i);\n\n\t\t\tif (column.colSpan && column.colSpan > 1) {\n\t\t\t\tfor (var j = 1; j < column.colSpan; j++) {\n\t\t\t\t\twidth += widths[++i]._calcWidth + gaps[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.writer.context().beginColumn(width, leftOffset, getEndingCell(column, i));\n\t\t\tif (!column._span) {\n\t\t\t\tself.processNode(column);\n\t\t\t\taddAll(positions, column.positions);\n\t\t\t} else if (column._columnEndingContext) {\n\t\t\t\t// row-span ending\n\t\t\t\tself.writer.context().markEnding(column);\n\t\t\t}\n\t\t}\n\n\t\tself.writer.context().completeColumnGroup(height);\n\t});\n\n\treturn { pageBreaks: pageBreaks, positions: positions };\n\n\tfunction storePageBreakData(data) {\n\t\tvar pageDesc;\n\n\t\tfor (var i = 0, l = pageBreaks.length; i < l; i++) {\n\t\t\tvar desc = pageBreaks[i];\n\t\t\tif (desc.prevPage === data.prevPage) {\n\t\t\t\tpageDesc = desc;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!pageDesc) {\n\t\t\tpageDesc = data;\n\t\t\tpageBreaks.push(pageDesc);\n\t\t}\n\t\tpageDesc.prevY = Math.max(pageDesc.prevY, data.prevY);\n\t\tpageDesc.y = Math.min(pageDesc.y, data.y);\n\t}\n\n\tfunction colLeftOffset(i) {\n\t\tif (gaps && gaps.length > i) {\n\t\t\treturn gaps[i];\n\t\t}\n\t\treturn 0;\n\t}\n\n\tfunction getEndingCell(column, columnIndex) {\n\t\tif (column.rowSpan && column.rowSpan > 1) {\n\t\t\tvar endingRow = tableRow + column.rowSpan - 1;\n\t\t\tif (endingRow >= tableBody.length) {\n\t\t\t\tthrow 'Row span for column ' + columnIndex + ' (with indexes starting from 0) exceeded row count';\n\t\t\t}\n\t\t\treturn tableBody[endingRow][columnIndex];\n\t\t}\n\n\t\treturn null;\n\t}\n};\n\n// lists\nLayoutBuilder.prototype.processList = function (orderedList, node) {\n\tvar self = this,\n\t\titems = orderedList ? node.ol : node.ul,\n\t\tgapSize = node._gapSize;\n\n\tthis.writer.context().addMargin(gapSize.width);\n\n\tvar nextMarker;\n\tthis.tracker.auto('lineAdded', addMarkerToFirstLeaf, function () {\n\t\titems.forEach(function (item) {\n\t\t\tnextMarker = item.listMarker;\n\t\t\tself.processNode(item);\n\t\t\taddAll(node.positions, item.positions);\n\t\t});\n\t});\n\n\tthis.writer.context().addMargin(-gapSize.width);\n\n\tfunction addMarkerToFirstLeaf(line) {\n\t\t// I'm not very happy with the way list processing is implemented\n\t\t// (both code and algorithm should be rethinked)\n\t\tif (nextMarker) {\n\t\t\tvar marker = nextMarker;\n\t\t\tnextMarker = null;\n\n\t\t\tif (marker.canvas) {\n\t\t\t\tvar vector = marker.canvas[0];\n\n\t\t\t\toffsetVector(vector, -marker._minWidth, 0);\n\t\t\t\tself.writer.addVector(vector);\n\t\t\t} else if (marker._inlines) {\n\t\t\t\tvar markerLine = new Line(self.pageSize.width);\n\t\t\t\tmarkerLine.addInline(marker._inlines[0]);\n\t\t\t\tmarkerLine.x = -marker._minWidth;\n\t\t\t\tmarkerLine.y = line.getAscenderHeight() - markerLine.getAscenderHeight();\n\t\t\t\tself.writer.addLine(markerLine, true);\n\t\t\t}\n\t\t}\n\t}\n};\n\n// tables\nLayoutBuilder.prototype.processTable = function (tableNode) {\n\tvar processor = new TableProcessor(tableNode);\n\n\tprocessor.beginTable(this.writer);\n\n\tvar rowHeights = tableNode.table.heights;\n\tfor (var i = 0, l = tableNode.table.body.length; i < l; i++) {\n\t\tprocessor.beginRow(i, this.writer);\n\n\t\tvar height;\n\t\tif (isFunction(rowHeights)) {\n\t\t\theight = rowHeights(i);\n\t\t} else if (isArray(rowHeights)) {\n\t\t\theight = rowHeights[i];\n\t\t} else {\n\t\t\theight = rowHeights;\n\t\t}\n\n\t\tif (height === 'auto') {\n\t\t\theight = undefined;\n\t\t}\n\n\t\tvar result = this.processRow(tableNode.table.body[i], tableNode.table.widths, tableNode._offsets.offsets, tableNode.table.body, i, height);\n\t\taddAll(tableNode.positions, result.positions);\n\n\t\tprocessor.endRow(i, this.writer, result.pageBreaks);\n\t}\n\n\tprocessor.endTable(this.writer);\n};\n\n// leafs (texts)\nLayoutBuilder.prototype.processLeaf = function (node) {\n\tvar line = this.buildNextLine(node);\n\tif (line && (node.tocItem || node.id)) {\n\t\tline._node = node;\n\t}\n\tvar currentHeight = (line) ? line.getHeight() : 0;\n\tvar maxHeight = node.maxHeight || -1;\n\n\tif (line) {\n\t\tvar nodeId = getNodeId(node);\n\t\tif (nodeId) {\n\t\t\tline.id = nodeId;\n\t\t}\n\t}\n\n\tif (node._tocItemRef) {\n\t\tline._pageNodeRef = node._tocItemRef;\n\t}\n\n\tif (node._pageRef) {\n\t\tline._pageNodeRef = node._pageRef._nodeRef;\n\t}\n\n\tif (line && line.inlines && isArray(line.inlines)) {\n\t\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\n\t\t\tif (line.inlines[i]._tocItemRef) {\n\t\t\t\tline.inlines[i]._pageNodeRef = line.inlines[i]._tocItemRef;\n\t\t\t}\n\n\t\t\tif (line.inlines[i]._pageRef) {\n\t\t\t\tline.inlines[i]._pageNodeRef = line.inlines[i]._pageRef._nodeRef;\n\t\t\t}\n\t\t}\n\t}\n\n\twhile (line && (maxHeight === -1 || currentHeight < maxHeight)) {\n\t\tvar positions = this.writer.addLine(line);\n\t\tnode.positions.push(positions);\n\t\tline = this.buildNextLine(node);\n\t\tif (line) {\n\t\t\tcurrentHeight += line.getHeight();\n\t\t}\n\t}\n};\n\nLayoutBuilder.prototype.processToc = function (node) {\n\tif (node.toc.title) {\n\t\tthis.processNode(node.toc.title);\n\t}\n\tif (node.toc._table) {\n\t\tthis.processNode(node.toc._table);\n\t}\n};\n\nLayoutBuilder.prototype.buildNextLine = function (textNode) {\n\n\tfunction cloneInline(inline) {\n\t\tvar newInline = inline.constructor();\n\t\tfor (var key in inline) {\n\t\t\tnewInline[key] = inline[key];\n\t\t}\n\t\treturn newInline;\n\t}\n\n\tif (!textNode._inlines || textNode._inlines.length === 0) {\n\t\treturn null;\n\t}\n\n\tvar line = new Line(this.writer.context().availableWidth);\n\tvar textTools = new TextTools(null);\n\n\tvar isForceContinue = false;\n\twhile (textNode._inlines && textNode._inlines.length > 0 &&\n\t\t(line.hasEnoughSpaceForInline(textNode._inlines[0], textNode._inlines.slice(1)) || isForceContinue)) {\n\t\tvar isHardWrap = false;\n\t\tvar inline = textNode._inlines.shift();\n\t\tisForceContinue = false;\n\n\t\tif (!inline.noWrap && inline.text.length > 1 && inline.width > line.getAvailableWidth()) {\n\t\t\tvar widthPerChar = inline.width / inline.text.length;\n\t\t\tvar maxChars = Math.floor(line.getAvailableWidth() / widthPerChar);\n\t\t\tif (maxChars < 1) {\n\t\t\t\tmaxChars = 1;\n\t\t\t}\n\t\t\tif (maxChars < inline.text.length) {\n\t\t\t\tvar newInline = cloneInline(inline);\n\n\t\t\t\tnewInline.text = inline.text.substr(maxChars);\n\t\t\t\tinline.text = inline.text.substr(0, maxChars);\n\n\t\t\t\tnewInline.width = textTools.widthOfString(newInline.text, newInline.font, newInline.fontSize, newInline.characterSpacing, newInline.fontFeatures);\n\t\t\t\tinline.width = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures);\n\n\t\t\t\ttextNode._inlines.unshift(newInline);\n\t\t\t\tisHardWrap = true;\n\t\t\t}\n\t\t}\n\n\t\tline.addInline(inline);\n\n\t\tisForceContinue = inline.noNewLine && !isHardWrap;\n\t}\n\n\tline.lastLineInParagraph = textNode._inlines.length === 0;\n\n\treturn line;\n};\n\n// images\nLayoutBuilder.prototype.processImage = function (node) {\n\tvar position = this.writer.addImage(node);\n\tnode.positions.push(position);\n};\n\nLayoutBuilder.prototype.processSVG = function (node) {\n\tvar position = this.writer.addSVG(node);\n\tnode.positions.push(position);\n};\n\nLayoutBuilder.prototype.processCanvas = function (node) {\n\tvar height = node._minHeight;\n\n\tif (node.absolutePosition === undefined && this.writer.context().availableHeight < height) {\n\t\t// TODO: support for canvas larger than a page\n\t\t// TODO: support for other overflow methods\n\n\t\tthis.writer.moveToNextPage();\n\t}\n\n\tthis.writer.alignCanvas(node);\n\n\tnode.canvas.forEach(function (vector) {\n\t\tvar position = this.writer.addVector(vector);\n\t\tnode.positions.push(position);\n\t}, this);\n\n\tthis.writer.context().moveDown(height);\n};\n\nLayoutBuilder.prototype.processQr = function (node) {\n\tvar position = this.writer.addQr(node);\n\tnode.positions.push(position);\n};\n\nmodule.exports = LayoutBuilder;\n\n\n/***/ }),\n\n/***/ 4775:\n/***/ (function(module) {\n\n\"use strict\";\n\n\n/**\n * Creates an instance of Line\n *\n * @constructor\n * @this {Line}\n * @param {Number} Maximum width this line can have\n */\nfunction Line(maxWidth) {\n\tthis.maxWidth = maxWidth;\n\tthis.leadingCut = 0;\n\tthis.trailingCut = 0;\n\tthis.inlineWidths = 0;\n\tthis.inlines = [];\n}\n\nLine.prototype.getAscenderHeight = function () {\n\tvar y = 0;\n\n\tthis.inlines.forEach(function (inline) {\n\t\ty = Math.max(y, inline.font.ascender / 1000 * inline.fontSize);\n\t});\n\treturn y;\n};\n\nLine.prototype.hasEnoughSpaceForInline = function (inline, nextInlines) {\n\tnextInlines = nextInlines || [];\n\n\tif (this.inlines.length === 0) {\n\t\treturn true;\n\t}\n\tif (this.newLineForced) {\n\t\treturn false;\n\t}\n\n\tvar inlineWidth = inline.width;\n\tvar inlineTrailingCut = inline.trailingCut || 0;\n\tif (inline.noNewLine) {\n\t\tfor (var i = 0, l = nextInlines.length; i < l; i++) {\n\t\t\tvar nextInline = nextInlines[i];\n\t\t\tinlineWidth += nextInline.width;\n\t\t\tinlineTrailingCut += nextInline.trailingCut || 0;\n\t\t\tif (!nextInline.noNewLine) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (this.inlineWidths + inlineWidth - this.leadingCut - inlineTrailingCut) <= this.maxWidth;\n};\n\nLine.prototype.addInline = function (inline) {\n\tif (this.inlines.length === 0) {\n\t\tthis.leadingCut = inline.leadingCut || 0;\n\t}\n\tthis.trailingCut = inline.trailingCut || 0;\n\n\tinline.x = this.inlineWidths - this.leadingCut;\n\n\tthis.inlines.push(inline);\n\tthis.inlineWidths += inline.width;\n\n\tif (inline.lineEnd) {\n\t\tthis.newLineForced = true;\n\t}\n};\n\nLine.prototype.getWidth = function () {\n\treturn this.inlineWidths - this.leadingCut - this.trailingCut;\n};\n\nLine.prototype.getAvailableWidth = function () {\n\treturn this.maxWidth - this.getWidth();\n};\n\n/**\n * Returns line height\n * @return {Number}\n */\nLine.prototype.getHeight = function () {\n\tvar max = 0;\n\n\tthis.inlines.forEach(function (item) {\n\t\tmax = Math.max(max, item.height || 0);\n\t});\n\n\treturn max;\n};\n\nmodule.exports = Line;\n\n\n/***/ }),\n\n/***/ 2912:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar ElementWriter = __webpack_require__(1196);\n\n/**\n * Creates an instance of PageElementWriter - an extended ElementWriter\n * which can handle:\n * - page-breaks (it adds new pages when there's not enough space left),\n * - repeatable fragments (like table-headers, which are repeated everytime\n *                         a page-break occurs)\n * - transactions (used for unbreakable-blocks when we want to make sure\n *                 whole block will be rendered on the same page)\n */\nfunction PageElementWriter(context, tracker) {\n\tthis.transactionLevel = 0;\n\tthis.repeatables = [];\n\tthis.tracker = tracker;\n\tthis.writer = new ElementWriter(context, tracker);\n}\n\nfunction fitOnPage(self, addFct) {\n\tvar position = addFct(self);\n\tif (!position) {\n\t\tself.moveToNextPage();\n\t\tposition = addFct(self);\n\t}\n\treturn position;\n}\n\nPageElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) {\n\treturn fitOnPage(this, function (self) {\n\t\treturn self.writer.addLine(line, dontUpdateContextPosition, index);\n\t});\n};\n\nPageElementWriter.prototype.addImage = function (image, index) {\n\treturn fitOnPage(this, function (self) {\n\t\treturn self.writer.addImage(image, index);\n\t});\n};\n\nPageElementWriter.prototype.addSVG = function (image, index) {\n\treturn fitOnPage(this, function (self) {\n\t\treturn self.writer.addSVG(image, index);\n\t});\n};\n\nPageElementWriter.prototype.addQr = function (qr, index) {\n\treturn fitOnPage(this, function (self) {\n\t\treturn self.writer.addQr(qr, index);\n\t});\n};\n\nPageElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {\n\treturn this.writer.addVector(vector, ignoreContextX, ignoreContextY, index);\n};\n\nPageElementWriter.prototype.beginClip = function (width, height) {\n\treturn this.writer.beginClip(width, height);\n};\n\nPageElementWriter.prototype.endClip = function () {\n\treturn this.writer.endClip();\n};\n\nPageElementWriter.prototype.alignCanvas = function (node) {\n\tthis.writer.alignCanvas(node);\n};\n\nPageElementWriter.prototype.addFragment = function (fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {\n\tif (!this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition)) {\n\t\tthis.moveToNextPage();\n\t\tthis.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition);\n\t}\n};\n\nPageElementWriter.prototype.moveToNextPage = function (pageOrientation) {\n\n\tvar nextPage = this.writer.context.moveToNextPage(pageOrientation);\n\n\t// moveToNextPage is called multiple times for table, because is called for each column\n\t// and repeatables are inserted only in the first time. If columns are used, is needed\n\t// call for table in first column and then for table in the second column (is other repeatables).\n\tthis.repeatables.forEach(function (rep) {\n\t\tif (isUndefined(rep.insertedOnPages[this.writer.context.page])) {\n\t\t\trep.insertedOnPages[this.writer.context.page] = true;\n\t\t\tthis.writer.addFragment(rep, true);\n\t\t} else {\n\t\t\tthis.writer.context.moveDown(rep.height);\n\t\t}\n\t}, this);\n\n\tthis.writer.tracker.emit('pageChanged', {\n\t\tprevPage: nextPage.prevPage,\n\t\tprevY: nextPage.prevY,\n\t\ty: this.writer.context.y\n\t});\n};\n\nPageElementWriter.prototype.beginUnbreakableBlock = function (width, height) {\n\tif (this.transactionLevel++ === 0) {\n\t\tthis.originalX = this.writer.context.x;\n\t\tthis.writer.pushContext(width, height);\n\t}\n};\n\nPageElementWriter.prototype.commitUnbreakableBlock = function (forcedX, forcedY) {\n\tif (--this.transactionLevel === 0) {\n\t\tvar unbreakableContext = this.writer.context;\n\t\tthis.writer.popContext();\n\n\t\tvar nbPages = unbreakableContext.pages.length;\n\t\tif (nbPages > 0) {\n\t\t\t// no support for multi-page unbreakableBlocks\n\t\t\tvar fragment = unbreakableContext.pages[0];\n\t\t\tfragment.xOffset = forcedX;\n\t\t\tfragment.yOffset = forcedY;\n\n\t\t\t//TODO: vectors can influence height in some situations\n\t\t\tif (nbPages > 1) {\n\t\t\t\t// on out-of-context blocs (headers, footers, background) height should be the whole DocumentContext height\n\t\t\t\tif (forcedX !== undefined || forcedY !== undefined) {\n\t\t\t\t\tfragment.height = unbreakableContext.getCurrentPage().pageSize.height - unbreakableContext.pageMargins.top - unbreakableContext.pageMargins.bottom;\n\t\t\t\t} else {\n\t\t\t\t\tfragment.height = this.writer.context.getCurrentPage().pageSize.height - this.writer.context.pageMargins.top - this.writer.context.pageMargins.bottom;\n\t\t\t\t\tfor (var i = 0, l = this.repeatables.length; i < l; i++) {\n\t\t\t\t\t\tfragment.height -= this.repeatables[i].height;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfragment.height = unbreakableContext.y;\n\t\t\t}\n\n\t\t\tif (forcedX !== undefined || forcedY !== undefined) {\n\t\t\t\tthis.writer.addFragment(fragment, true, true, true);\n\t\t\t} else {\n\t\t\t\tthis.addFragment(fragment);\n\t\t\t}\n\t\t}\n\t}\n};\n\nPageElementWriter.prototype.currentBlockToRepeatable = function () {\n\tvar unbreakableContext = this.writer.context;\n\tvar rep = { items: [] };\n\n\tunbreakableContext.pages[0].items.forEach(function (item) {\n\t\trep.items.push(item);\n\t});\n\n\trep.xOffset = this.originalX;\n\n\t//TODO: vectors can influence height in some situations\n\trep.height = unbreakableContext.y;\n\n\trep.insertedOnPages = [];\n\n\treturn rep;\n};\n\nPageElementWriter.prototype.pushToRepeatables = function (rep) {\n\tthis.repeatables.push(rep);\n};\n\nPageElementWriter.prototype.popFromRepeatables = function () {\n\tthis.repeatables.pop();\n};\n\nPageElementWriter.prototype.context = function () {\n\treturn this.writer.context;\n};\n\nmodule.exports = PageElementWriter;\n\n\n/***/ }),\n\n/***/ 6079:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _interopDefault(ex) {\n\treturn (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex;\n}\n\nvar PdfKit = _interopDefault(__webpack_require__(5219));\n\nfunction getEngineInstance() {\n\treturn PdfKit;\n}\n\nfunction createPdfDocument(options) {\n\toptions = options || {};\n\treturn new PdfKit(options);\n}\n\nmodule.exports = {\n\tgetEngineInstance: getEngineInstance,\n\tcreatePdfDocument: createPdfDocument\n};\n\n\n/***/ }),\n\n/***/ 8617:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\n\n\nvar PdfKitEngine = __webpack_require__(6079);\nvar FontProvider = __webpack_require__(2249);\nvar LayoutBuilder = __webpack_require__(2678);\nvar sizes = __webpack_require__(4762);\nvar ImageMeasure = __webpack_require__(3090);\nvar SVGMeasure = __webpack_require__(7601);\nvar textDecorator = __webpack_require__(3497);\nvar TextTools = __webpack_require__(1350);\nvar isFunction = (__webpack_require__(6225).isFunction);\nvar isString = (__webpack_require__(6225).isString);\nvar isNumber = (__webpack_require__(6225).isNumber);\nvar isBoolean = (__webpack_require__(6225).isBoolean);\nvar isArray = (__webpack_require__(6225).isArray);\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar isPattern = (__webpack_require__(6225).isPattern);\nvar getPattern = (__webpack_require__(6225).getPattern);\nvar SVGtoPDF = __webpack_require__(8071);\n\nvar findFont = function (fonts, requiredFonts, defaultFont) {\n\tfor (var i = 0; i < requiredFonts.length; i++) {\n\t\tvar requiredFont = requiredFonts[i].toLowerCase();\n\n\t\tfor (var font in fonts) {\n\t\t\tif (font.toLowerCase() === requiredFont) {\n\t\t\t\treturn font;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn defaultFont;\n};\n\n////////////////////////////////////////\n// PdfPrinter\n\n/**\n * @class Creates an instance of a PdfPrinter which turns document definition into a pdf\n *\n * @param {Object} fontDescriptors font definition dictionary\n *\n * @example\n * var fontDescriptors = {\n *\tRoboto: {\n *\t\tnormal: 'fonts/Roboto-Regular.ttf',\n *\t\tbold: 'fonts/Roboto-Medium.ttf',\n *\t\titalics: 'fonts/Roboto-Italic.ttf',\n *\t\tbolditalics: 'fonts/Roboto-MediumItalic.ttf'\n *\t}\n * };\n *\n * var printer = new PdfPrinter(fontDescriptors);\n */\nfunction PdfPrinter(fontDescriptors) {\n\tthis.fontDescriptors = fontDescriptors;\n}\n\n/**\n * Executes layout engine for the specified document and renders it into a pdfkit document\n * ready to be saved.\n *\n * @param {Object} docDefinition document definition\n * @param {Object} docDefinition.content an array describing the pdf structure (for more information take a look at the examples in the /examples folder)\n * @param {Object} [docDefinition.defaultStyle] default (implicit) style definition\n * @param {Object} [docDefinition.styles] dictionary defining all styles which can be used in the document\n * @param {Object} [docDefinition.pageSize] page size (pdfkit units, A4 dimensions by default)\n * @param {Number} docDefinition.pageSize.width width\n * @param {Number} docDefinition.pageSize.height height\n * @param {Object} [docDefinition.pageMargins] page margins (pdfkit units)\n * @param {Number} docDefinition.maxPagesNumber maximum number of pages to render\n *\n * @example\n *\n * var docDefinition = {\n * \tinfo: {\n *\t\ttitle: 'awesome Document',\n *\t\tauthor: 'john doe',\n *\t\tsubject: 'subject of document',\n *\t\tkeywords: 'keywords for document',\n * \t},\n *\tcontent: [\n *\t\t'First paragraph',\n *\t\t'Second paragraph, this time a little bit longer',\n *\t\t{ text: 'Third paragraph, slightly bigger font size', fontSize: 20 },\n *\t\t{ text: 'Another paragraph using a named style', style: 'header' },\n *\t\t{ text: ['playing with ', 'inlines' ] },\n *\t\t{ text: ['and ', { text: 'restyling ', bold: true }, 'them'] },\n *\t],\n *\tstyles: {\n *\t\theader: { fontSize: 30, bold: true }\n *\t},\n *\tpatterns: {\n *\t\tstripe45d: {\n *\t\t\tboundingBox: [1, 1, 4, 4],\n *\t\t\txStep: 3,\n *\t\t\tyStep: 3,\n *\t\t\tpattern: '1 w 0 1 m 4 5 l s 2 0 m 5 3 l s'\n *\t\t}\n *\t}\n * };\n *\n * var pdfKitDoc = printer.createPdfKitDocument(docDefinition);\n *\n * pdfKitDoc.pipe(fs.createWriteStream('sample.pdf'));\n * pdfKitDoc.end();\n *\n * @return {Object} a pdfKit document object which can be saved or encode to data-url\n */\nPdfPrinter.prototype.createPdfKitDocument = function (docDefinition, options) {\n\toptions = options || {};\n\n\tdocDefinition.version = docDefinition.version || '1.3';\n\tdocDefinition.compress = isBoolean(docDefinition.compress) ? docDefinition.compress : true;\n\tdocDefinition.images = docDefinition.images || {};\n\tdocDefinition.pageMargins = ((docDefinition.pageMargins !== undefined) && (docDefinition.pageMargins !== null)) ? docDefinition.pageMargins : 40;\n\n\tvar pageSize = fixPageSize(docDefinition.pageSize, docDefinition.pageOrientation);\n\n\tvar pdfOptions = {\n\t\tsize: [pageSize.width, pageSize.height],\n\t\tpdfVersion: docDefinition.version,\n\t\tcompress: docDefinition.compress,\n\t\tuserPassword: docDefinition.userPassword,\n\t\townerPassword: docDefinition.ownerPassword,\n\t\tpermissions: docDefinition.permissions,\n\t\tfontLayoutCache: isBoolean(options.fontLayoutCache) ? options.fontLayoutCache : true,\n\t\tbufferPages: options.bufferPages || false,\n\t\tautoFirstPage: false,\n\t\tinfo: createMetadata(docDefinition),\n\t\tfont: null\n\t};\n\n\tthis.pdfKitDoc = PdfKitEngine.createPdfDocument(pdfOptions);\n\n\tthis.fontProvider = new FontProvider(this.fontDescriptors, this.pdfKitDoc);\n\n\tvar builder = new LayoutBuilder(pageSize, fixPageMargins(docDefinition.pageMargins), new ImageMeasure(this.pdfKitDoc, docDefinition.images), new SVGMeasure());\n\n\tregisterDefaultTableLayouts(builder);\n\tif (options.tableLayouts) {\n\t\tbuilder.registerTableLayouts(options.tableLayouts);\n\t}\n\n\tvar pages = builder.layoutDocument(docDefinition.content, this.fontProvider, docDefinition.styles || {}, docDefinition.defaultStyle || {\n\t\tfontSize: 12,\n\t\tfont: 'Roboto'\n\t}, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.images, docDefinition.watermark, docDefinition.pageBreakBefore);\n\tvar maxNumberPages = docDefinition.maxPagesNumber || -1;\n\tif (isNumber(maxNumberPages) && maxNumberPages > -1) {\n\t\tpages = pages.slice(0, maxNumberPages);\n\t}\n\n\t// if pageSize.height is set to Infinity, calculate the actual height of the page that\n\t// was laid out using the height of each of the items in the page.\n\tif (pageSize.height === Infinity) {\n\t\tvar pageHeight = calculatePageHeight(pages, docDefinition.pageMargins);\n\t\tthis.pdfKitDoc.options.size = [pageSize.width, pageHeight];\n\t}\n\n\tvar patterns = createPatterns(docDefinition.patterns || {}, this.pdfKitDoc);\n\n\trenderPages(pages, this.fontProvider, this.pdfKitDoc, patterns, options.progressCallback);\n\n\tif (options.autoPrint) {\n\t\tvar printActionRef = this.pdfKitDoc.ref({\n\t\t\tType: 'Action',\n\t\t\tS: 'Named',\n\t\t\tN: 'Print'\n\t\t});\n\t\tthis.pdfKitDoc._root.data.OpenAction = printActionRef;\n\t\tprintActionRef.end();\n\t}\n\treturn this.pdfKitDoc;\n};\n\nfunction createMetadata(docDefinition) {\n\t// PDF standard has these properties reserved: Title, Author, Subject, Keywords,\n\t// Creator, Producer, CreationDate, ModDate, Trapped.\n\t// To keep the pdfmake api consistent, the info field are defined lowercase.\n\t// Custom properties don't contain a space.\n\tfunction standardizePropertyKey(key) {\n\t\tvar standardProperties = ['Title', 'Author', 'Subject', 'Keywords',\n\t\t\t'Creator', 'Producer', 'CreationDate', 'ModDate', 'Trapped'];\n\t\tvar standardizedKey = key.charAt(0).toUpperCase() + key.slice(1);\n\t\tif (standardProperties.indexOf(standardizedKey) !== -1) {\n\t\t\treturn standardizedKey;\n\t\t}\n\n\t\treturn key.replace(/\\s+/g, '');\n\t}\n\n\tvar info = {\n\t\tProducer: 'pdfmake',\n\t\tCreator: 'pdfmake'\n\t};\n\n\tif (docDefinition.info) {\n\t\tfor (var key in docDefinition.info) {\n\t\t\tvar value = docDefinition.info[key];\n\t\t\tif (value) {\n\t\t\t\tkey = standardizePropertyKey(key);\n\t\t\t\tinfo[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn info;\n}\n\nfunction calculatePageHeight(pages, margins) {\n\tfunction getItemHeight(item) {\n\t\tif (isFunction(item.item.getHeight)) {\n\t\t\treturn item.item.getHeight();\n\t\t} else if (item.item._height) {\n\t\t\treturn item.item._height;\n\t\t} else if (item.type === 'vector') {\n\t\t\tif (typeof item.item.y1 !== 'undefined') {\n\t\t\t\treturn item.item.y1 > item.item.y2 ? item.item.y1 : item.item.y2;\n\t\t\t} else {\n\t\t\t\treturn item.item.h;\n\t\t\t}\n\t\t} else {\n\t\t\t// TODO: add support for next item types\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tfunction getBottomPosition(item) {\n\t\tvar top = item.item.y || 0;\n\t\tvar height = getItemHeight(item);\n\t\treturn top + height;\n\t}\n\n\tvar fixedMargins = fixPageMargins(margins || 40);\n\tvar height = fixedMargins.top;\n\n\tpages.forEach(function (page) {\n\t\tpage.items.forEach(function (item) {\n\t\t\tvar bottomPosition = getBottomPosition(item);\n\t\t\tif (bottomPosition > height) {\n\t\t\t\theight = bottomPosition;\n\t\t\t}\n\t\t});\n\t});\n\n\theight += fixedMargins.bottom;\n\n\treturn height;\n}\n\nfunction fixPageSize(pageSize, pageOrientation) {\n\tfunction isNeedSwapPageSizes(pageOrientation) {\n\t\tif (isString(pageOrientation)) {\n\t\t\tpageOrientation = pageOrientation.toLowerCase();\n\t\t\treturn ((pageOrientation === 'portrait') && (size.width > size.height)) ||\n\t\t\t\t((pageOrientation === 'landscape') && (size.width < size.height));\n\t\t}\n\t\treturn false;\n\t}\n\n\t// if pageSize.height is set to auto, set the height to infinity so there are no page breaks.\n\tif (pageSize && pageSize.height === 'auto') {\n\t\tpageSize.height = Infinity;\n\t}\n\n\tvar size = pageSize2widthAndHeight(pageSize || 'A4');\n\tif (isNeedSwapPageSizes(pageOrientation)) { // swap page sizes\n\t\tsize = { width: size.height, height: size.width };\n\t}\n\tsize.orientation = size.width > size.height ? 'landscape' : 'portrait';\n\treturn size;\n}\n\nfunction fixPageMargins(margin) {\n\tif (isNumber(margin)) {\n\t\tmargin = { left: margin, right: margin, top: margin, bottom: margin };\n\t} else if (isArray(margin)) {\n\t\tif (margin.length === 2) {\n\t\t\tmargin = { left: margin[0], top: margin[1], right: margin[0], bottom: margin[1] };\n\t\t} else if (margin.length === 4) {\n\t\t\tmargin = { left: margin[0], top: margin[1], right: margin[2], bottom: margin[3] };\n\t\t} else {\n\t\t\tthrow 'Invalid pageMargins definition';\n\t\t}\n\t}\n\n\treturn margin;\n}\n\nfunction registerDefaultTableLayouts(layoutBuilder) {\n\tlayoutBuilder.registerTableLayouts({\n\t\tnoBorders: {\n\t\t\thLineWidth: function (i) {\n\t\t\t\treturn 0;\n\t\t\t},\n\t\t\tvLineWidth: function (i) {\n\t\t\t\treturn 0;\n\t\t\t},\n\t\t\tpaddingLeft: function (i) {\n\t\t\t\treturn i && 4 || 0;\n\t\t\t},\n\t\t\tpaddingRight: function (i, node) {\n\t\t\t\treturn (i < node.table.widths.length - 1) ? 4 : 0;\n\t\t\t}\n\t\t},\n\t\theaderLineOnly: {\n\t\t\thLineWidth: function (i, node) {\n\t\t\t\tif (i === 0 || i === node.table.body.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn (i === node.table.headerRows) ? 2 : 0;\n\t\t\t},\n\t\t\tvLineWidth: function (i) {\n\t\t\t\treturn 0;\n\t\t\t},\n\t\t\tpaddingLeft: function (i) {\n\t\t\t\treturn i === 0 ? 0 : 8;\n\t\t\t},\n\t\t\tpaddingRight: function (i, node) {\n\t\t\t\treturn (i === node.table.widths.length - 1) ? 0 : 8;\n\t\t\t}\n\t\t},\n\t\tlightHorizontalLines: {\n\t\t\thLineWidth: function (i, node) {\n\t\t\t\tif (i === 0 || i === node.table.body.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn (i === node.table.headerRows) ? 2 : 1;\n\t\t\t},\n\t\t\tvLineWidth: function (i) {\n\t\t\t\treturn 0;\n\t\t\t},\n\t\t\thLineColor: function (i) {\n\t\t\t\treturn i === 1 ? 'black' : '#aaa';\n\t\t\t},\n\t\t\tpaddingLeft: function (i) {\n\t\t\t\treturn i === 0 ? 0 : 8;\n\t\t\t},\n\t\t\tpaddingRight: function (i, node) {\n\t\t\t\treturn (i === node.table.widths.length - 1) ? 0 : 8;\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction pageSize2widthAndHeight(pageSize) {\n\tif (isString(pageSize)) {\n\t\tvar size = sizes[pageSize.toUpperCase()];\n\t\tif (!size) {\n\t\t\tthrow 'Page size ' + pageSize + ' not recognized';\n\t\t}\n\t\treturn { width: size[0], height: size[1] };\n\t}\n\n\treturn pageSize;\n}\n\nfunction updatePageOrientationInOptions(currentPage, pdfKitDoc) {\n\tvar previousPageOrientation = pdfKitDoc.options.size[0] > pdfKitDoc.options.size[1] ? 'landscape' : 'portrait';\n\n\tif (currentPage.pageSize.orientation !== previousPageOrientation) {\n\t\tvar width = pdfKitDoc.options.size[0];\n\t\tvar height = pdfKitDoc.options.size[1];\n\t\tpdfKitDoc.options.size = [height, width];\n\t}\n}\n\nfunction renderPages(pages, fontProvider, pdfKitDoc, patterns, progressCallback) {\n\tpdfKitDoc._pdfMakePages = pages;\n\tpdfKitDoc.addPage();\n\n\tvar totalItems = 0;\n\tif (progressCallback) {\n\t\tpages.forEach(function (page) {\n\t\t\ttotalItems += page.items.length;\n\t\t});\n\t}\n\n\tvar renderedItems = 0;\n\tprogressCallback = progressCallback || function () {\n\t};\n\n\tfor (var i = 0; i < pages.length; i++) {\n\t\tif (i > 0) {\n\t\t\tupdatePageOrientationInOptions(pages[i], pdfKitDoc);\n\t\t\tpdfKitDoc.addPage(pdfKitDoc.options);\n\t\t}\n\n\t\tvar page = pages[i];\n\t\tfor (var ii = 0, il = page.items.length; ii < il; ii++) {\n\t\t\tvar item = page.items[ii];\n\t\t\tswitch (item.type) {\n\t\t\t\tcase 'vector':\n\t\t\t\t\trenderVector(item.item, patterns, pdfKitDoc);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'line':\n\t\t\t\t\trenderLine(item.item, item.item.x, item.item.y, patterns, pdfKitDoc);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'image':\n\t\t\t\t\trenderImage(item.item, item.item.x, item.item.y, pdfKitDoc);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'svg':\n\t\t\t\t\trenderSVG(item.item, item.item.x, item.item.y, pdfKitDoc, fontProvider);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'beginClip':\n\t\t\t\t\tbeginClip(item.item, pdfKitDoc);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'endClip':\n\t\t\t\t\tendClip(pdfKitDoc);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\trenderedItems++;\n\t\t\tprogressCallback(renderedItems / totalItems);\n\t\t}\n\t\tif (page.watermark) {\n\t\t\trenderWatermark(page, pdfKitDoc);\n\t\t}\n\t}\n}\n\n/**\n * Shift the \"y\" height of the text baseline up or down (superscript or subscript,\n * respectively). The exact shift can / should be changed according to standard\n * conventions.\n *\n * @param {number} y\n * @param {any} inline\n */\nfunction offsetText(y, inline) {\n\tvar newY = y;\n\tif (inline.sup) {\n\t\tnewY -= inline.fontSize * 0.75;\n\t}\n\tif (inline.sub) {\n\t\tnewY += inline.fontSize * 0.35;\n\t}\n\treturn newY;\n}\n\nfunction renderLine(line, x, y, patterns, pdfKitDoc) {\n\tfunction preparePageNodeRefLine(_pageNodeRef, inline) {\n\t\tvar newWidth;\n\t\tvar diffWidth;\n\t\tvar textTools = new TextTools(null);\n\n\t\tif (isUndefined(_pageNodeRef.positions)) {\n\t\t\tthrow 'Page reference id not found';\n\t\t}\n\n\t\tvar pageNumber = _pageNodeRef.positions[0].pageNumber.toString();\n\n\t\tinline.text = pageNumber;\n\t\tnewWidth = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures);\n\t\tdiffWidth = inline.width - newWidth;\n\t\tinline.width = newWidth;\n\n\t\tswitch (inline.alignment) {\n\t\t\tcase 'right':\n\t\t\t\tinline.x += diffWidth;\n\t\t\t\tbreak;\n\t\t\tcase 'center':\n\t\t\t\tinline.x += diffWidth / 2;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (line._pageNodeRef) {\n\t\tpreparePageNodeRefLine(line._pageNodeRef, line.inlines[0]);\n\t}\n\n\tx = x || 0;\n\ty = y || 0;\n\n\tvar lineHeight = line.getHeight();\n\tvar ascenderHeight = line.getAscenderHeight();\n\tvar descent = lineHeight - ascenderHeight;\n\n\ttextDecorator.drawBackground(line, x, y, patterns, pdfKitDoc);\n\n\t//TODO: line.optimizeInlines();\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\n\t\tvar inline = line.inlines[i];\n\t\tvar shiftToBaseline = lineHeight - ((inline.font.ascender / 1000) * inline.fontSize) - descent;\n\n\t\tif (inline._pageNodeRef) {\n\t\t\tpreparePageNodeRefLine(inline._pageNodeRef, inline);\n\t\t}\n\n\t\tvar options = {\n\t\t\tlineBreak: false,\n\t\t\ttextWidth: inline.width,\n\t\t\tcharacterSpacing: inline.characterSpacing,\n\t\t\twordCount: 1,\n\t\t\tlink: inline.link\n\t\t};\n\n\t\tif (inline.linkToDestination) {\n\t\t\toptions.goTo = inline.linkToDestination;\n\t\t}\n\n\t\tif (line.id && i === 0) {\n\t\t\toptions.destination = line.id;\n\t\t}\n\n\t\tif (inline.fontFeatures) {\n\t\t\toptions.features = inline.fontFeatures;\n\t\t}\n\n\t\tvar opacity = isNumber(inline.opacity) ? inline.opacity : 1;\n\t\tpdfKitDoc.opacity(opacity);\n\t\tpdfKitDoc.fill(inline.color || 'black');\n\n\t\tpdfKitDoc._font = inline.font;\n\t\tpdfKitDoc.fontSize(inline.fontSize);\n\n\t\tvar shiftedY = offsetText(y + shiftToBaseline, inline);\n\t\tpdfKitDoc.text(inline.text, x + inline.x, shiftedY, options);\n\n\t\tif (inline.linkToPage) {\n\t\t\tvar _ref = pdfKitDoc.ref({ Type: 'Action', S: 'GoTo', D: [inline.linkToPage, 0, 0] }).end();\n\t\t\tpdfKitDoc.annotate(x + inline.x, shiftedY, inline.width, inline.height, {\n\t\t\t\tSubtype: 'Link',\n\t\t\t\tDest: [inline.linkToPage - 1, 'XYZ', null, null, null]\n\t\t\t});\n\t\t}\n\n\t}\n\t// Decorations won't draw correctly for superscript\n\ttextDecorator.drawDecorations(line, x, y, pdfKitDoc);\n}\n\nfunction renderWatermark(page, pdfKitDoc) {\n\tvar watermark = page.watermark;\n\n\tpdfKitDoc.fill(watermark.color);\n\tpdfKitDoc.opacity(watermark.opacity);\n\n\tpdfKitDoc.save();\n\n\tpdfKitDoc.rotate(watermark.angle, { origin: [pdfKitDoc.page.width / 2, pdfKitDoc.page.height / 2] });\n\n\tvar x = pdfKitDoc.page.width / 2 - watermark._size.size.width / 2;\n\tvar y = pdfKitDoc.page.height / 2 - watermark._size.size.height / 2;\n\n\tpdfKitDoc._font = watermark.font;\n\tpdfKitDoc.fontSize(watermark.fontSize);\n\tpdfKitDoc.text(watermark.text, x, y, { lineBreak: false });\n\n\tpdfKitDoc.restore();\n}\n\nfunction renderVector(vector, patterns, pdfKitDoc) {\n\t//TODO: pdf optimization (there's no need to write all properties everytime)\n\tpdfKitDoc.lineWidth(vector.lineWidth || 1);\n\tif (vector.dash) {\n\t\tpdfKitDoc.dash(vector.dash.length, { space: vector.dash.space || vector.dash.length, phase: vector.dash.phase || 0 });\n\t} else {\n\t\tpdfKitDoc.undash();\n\t}\n\tpdfKitDoc.lineJoin(vector.lineJoin || 'miter');\n\tpdfKitDoc.lineCap(vector.lineCap || 'butt');\n\n\t//TODO: clipping\n\n\tvar gradient = null;\n\n\tswitch (vector.type) {\n\t\tcase 'ellipse':\n\t\t\tpdfKitDoc.ellipse(vector.x, vector.y, vector.r1, vector.r2);\n\n\t\t\tif (vector.linearGradient) {\n\t\t\t\tgradient = pdfKitDoc.linearGradient(vector.x - vector.r1, vector.y, vector.x + vector.r1, vector.y);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'rect':\n\t\t\tif (vector.r) {\n\t\t\t\tpdfKitDoc.roundedRect(vector.x, vector.y, vector.w, vector.h, vector.r);\n\t\t\t} else {\n\t\t\t\tpdfKitDoc.rect(vector.x, vector.y, vector.w, vector.h);\n\t\t\t}\n\n\t\t\tif (vector.linearGradient) {\n\t\t\t\tgradient = pdfKitDoc.linearGradient(vector.x, vector.y, vector.x + vector.w, vector.y);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'line':\n\t\t\tpdfKitDoc.moveTo(vector.x1, vector.y1);\n\t\t\tpdfKitDoc.lineTo(vector.x2, vector.y2);\n\t\t\tbreak;\n\t\tcase 'polyline':\n\t\t\tif (vector.points.length === 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tpdfKitDoc.moveTo(vector.points[0].x, vector.points[0].y);\n\t\t\tfor (var i = 1, l = vector.points.length; i < l; i++) {\n\t\t\t\tpdfKitDoc.lineTo(vector.points[i].x, vector.points[i].y);\n\t\t\t}\n\n\t\t\tif (vector.points.length > 1) {\n\t\t\t\tvar p1 = vector.points[0];\n\t\t\t\tvar pn = vector.points[vector.points.length - 1];\n\n\t\t\t\tif (vector.closePath || p1.x === pn.x && p1.y === pn.y) {\n\t\t\t\t\tpdfKitDoc.closePath();\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'path':\n\t\t\tpdfKitDoc.path(vector.d);\n\t\t\tbreak;\n\t}\n\n\tif (vector.linearGradient && gradient) {\n\t\tvar step = 1 / (vector.linearGradient.length - 1);\n\n\t\tfor (var i = 0; i < vector.linearGradient.length; i++) {\n\t\t\tgradient.stop(i * step, vector.linearGradient[i]);\n\t\t}\n\n\t\tvector.color = gradient;\n\t}\n\n\tif (isPattern(vector.color)) {\n\t\tvector.color = getPattern(vector.color, patterns);\n\t}\n\n\tvar fillOpacity = isNumber(vector.fillOpacity) ? vector.fillOpacity : 1;\n\tvar strokeOpacity = isNumber(vector.strokeOpacity) ? vector.strokeOpacity : 1;\n\n\tif (vector.color && vector.lineColor) {\n\t\tpdfKitDoc.fillColor(vector.color, fillOpacity);\n\t\tpdfKitDoc.strokeColor(vector.lineColor, strokeOpacity);\n\t\tpdfKitDoc.fillAndStroke();\n\t} else if (vector.color) {\n\t\tpdfKitDoc.fillColor(vector.color, fillOpacity);\n\t\tpdfKitDoc.fill();\n\t} else {\n\t\tpdfKitDoc.strokeColor(vector.lineColor || 'black', strokeOpacity);\n\t\tpdfKitDoc.stroke();\n\t}\n}\n\nfunction renderImage(image, x, y, pdfKitDoc) {\n\tvar opacity = isNumber(image.opacity) ? image.opacity : 1;\n\tpdfKitDoc.opacity(opacity);\n\tif (image.cover) {\n\t\tvar align = image.cover.align || 'center';\n\t\tvar valign = image.cover.valign || 'center';\n\t\tvar width = image.cover.width ? image.cover.width : image.width;\n\t\tvar height = image.cover.height ? image.cover.height : image.height;\n\t\tpdfKitDoc.save();\n\t\tpdfKitDoc.rect(image.x, image.y, width, height).clip();\n\t\tpdfKitDoc.image(image.image, image.x, image.y, { cover: [width, height], align: align, valign: valign });\n\t\tpdfKitDoc.restore();\n\t} else {\n\t\tpdfKitDoc.image(image.image, image.x, image.y, { width: image._width, height: image._height });\n\t}\n\tif (image.link) {\n\t\tpdfKitDoc.link(image.x, image.y, image._width, image._height, image.link);\n\t}\n\tif (image.linkToPage) {\n\t\tpdfKitDoc.ref({ Type: 'Action', S: 'GoTo', D: [image.linkToPage, 0, 0] }).end();\n\t\tpdfKitDoc.annotate(image.x, image.y, image._width, image._height, { Subtype: 'Link', Dest: [image.linkToPage - 1, 'XYZ', null, null, null] });\n\t}\n\tif (image.linkToDestination) {\n\t\tpdfKitDoc.goTo(image.x, image.y, image._width, image._height, image.linkToDestination);\n\t}\n}\n\nfunction renderSVG(svg, x, y, pdfKitDoc, fontProvider) {\n\tvar options = Object.assign({ width: svg._width, height: svg._height, assumePt: true }, svg.options);\n\toptions.fontCallback = function (family, bold, italic) {\n\t\tvar fontsFamily = family.split(',').map(function (f) { return f.trim().replace(/('|\")/g, ''); });\n\t\tvar font = findFont(fontProvider.fonts, fontsFamily, svg.font || 'Roboto');\n\n\t\tvar fontFile = fontProvider.getFontFile(font, bold, italic);\n\t\tif (fontFile === null) {\n\t\t\tvar type = fontProvider.getFontType(bold, italic);\n\t\t\tthrow new Error('Font \\'' + font + '\\' in style \\'' + type + '\\' is not defined in the font section of the document definition.');\n\t\t}\n\n\t\treturn fontFile;\n\t};\n\n\tSVGtoPDF(pdfKitDoc, svg.svg, svg.x, svg.y, options);\n}\n\nfunction beginClip(rect, pdfKitDoc) {\n\tpdfKitDoc.save();\n\tpdfKitDoc.addContent('' + rect.x + ' ' + rect.y + ' ' + rect.width + ' ' + rect.height + ' re');\n\tpdfKitDoc.clip();\n}\n\nfunction endClip(pdfKitDoc) {\n\tpdfKitDoc.restore();\n}\n\nfunction createPatterns(patternDefinitions, pdfKitDoc) {\n\tvar patterns = {};\n\tObject.keys(patternDefinitions).forEach(function (p) {\n\t\tvar pattern = patternDefinitions[p];\n\t\tpatterns[p] = pdfKitDoc.pattern(pattern.boundingBox, pattern.xStep, pattern.yStep, pattern.pattern, pattern.colored);\n\t});\n\treturn patterns;\n}\n\nmodule.exports = PdfPrinter;\n\n\n/***/ }),\n\n/***/ 145:\n/***/ (function(module) {\n\n\"use strict\";\n/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\n/*eslint no-redeclare: \"off\"*/\n\n\n/* qr.js -- QR code generator in Javascript (revision 2011-01-19)\n * Written by Kang Seonghoon <public+qrjs@mearie.org>.\n *\n * This source code is in the public domain; if your jurisdiction does not\n * recognize the public domain the terms of Creative Commons CC0 license\n * apply. In the other words, you can always do what you want.\n */\n\n\n// per-version information (cf. JIS X 0510:2004 pp. 30--36, 71)\n//\n// [0]: the degree of generator polynomial by ECC levels\n// [1]: # of code blocks by ECC levels\n// [2]: left-top positions of alignment patterns\n//\n// the number in this table (in particular, [0]) does not exactly match with\n// the numbers in the specficiation. see augumenteccs below for the reason.\nvar VERSIONS = [\n\tnull,\n\t[[10, 7, 17, 13], [1, 1, 1, 1], []],\n\t[[16, 10, 28, 22], [1, 1, 1, 1], [4, 16]],\n\t[[26, 15, 22, 18], [1, 1, 2, 2], [4, 20]],\n\t[[18, 20, 16, 26], [2, 1, 4, 2], [4, 24]],\n\t[[24, 26, 22, 18], [2, 1, 4, 4], [4, 28]],\n\t[[16, 18, 28, 24], [4, 2, 4, 4], [4, 32]],\n\t[[18, 20, 26, 18], [4, 2, 5, 6], [4, 20, 36]],\n\t[[22, 24, 26, 22], [4, 2, 6, 6], [4, 22, 40]],\n\t[[22, 30, 24, 20], [5, 2, 8, 8], [4, 24, 44]],\n\t[[26, 18, 28, 24], [5, 4, 8, 8], [4, 26, 48]],\n\t[[30, 20, 24, 28], [5, 4, 11, 8], [4, 28, 52]],\n\t[[22, 24, 28, 26], [8, 4, 11, 10], [4, 30, 56]],\n\t[[22, 26, 22, 24], [9, 4, 16, 12], [4, 32, 60]],\n\t[[24, 30, 24, 20], [9, 4, 16, 16], [4, 24, 44, 64]],\n\t[[24, 22, 24, 30], [10, 6, 18, 12], [4, 24, 46, 68]],\n\t[[28, 24, 30, 24], [10, 6, 16, 17], [4, 24, 48, 72]],\n\t[[28, 28, 28, 28], [11, 6, 19, 16], [4, 28, 52, 76]],\n\t[[26, 30, 28, 28], [13, 6, 21, 18], [4, 28, 54, 80]],\n\t[[26, 28, 26, 26], [14, 7, 25, 21], [4, 28, 56, 84]],\n\t[[26, 28, 28, 30], [16, 8, 25, 20], [4, 32, 60, 88]],\n\t[[26, 28, 30, 28], [17, 8, 25, 23], [4, 26, 48, 70, 92]],\n\t[[28, 28, 24, 30], [17, 9, 34, 23], [4, 24, 48, 72, 96]],\n\t[[28, 30, 30, 30], [18, 9, 30, 25], [4, 28, 52, 76, 100]],\n\t[[28, 30, 30, 30], [20, 10, 32, 27], [4, 26, 52, 78, 104]],\n\t[[28, 26, 30, 30], [21, 12, 35, 29], [4, 30, 56, 82, 108]],\n\t[[28, 28, 30, 28], [23, 12, 37, 34], [4, 28, 56, 84, 112]],\n\t[[28, 30, 30, 30], [25, 12, 40, 34], [4, 32, 60, 88, 116]],\n\t[[28, 30, 30, 30], [26, 13, 42, 35], [4, 24, 48, 72, 96, 120]],\n\t[[28, 30, 30, 30], [28, 14, 45, 38], [4, 28, 52, 76, 100, 124]],\n\t[[28, 30, 30, 30], [29, 15, 48, 40], [4, 24, 50, 76, 102, 128]],\n\t[[28, 30, 30, 30], [31, 16, 51, 43], [4, 28, 54, 80, 106, 132]],\n\t[[28, 30, 30, 30], [33, 17, 54, 45], [4, 32, 58, 84, 110, 136]],\n\t[[28, 30, 30, 30], [35, 18, 57, 48], [4, 28, 56, 84, 112, 140]],\n\t[[28, 30, 30, 30], [37, 19, 60, 51], [4, 32, 60, 88, 116, 144]],\n\t[[28, 30, 30, 30], [38, 19, 63, 53], [4, 28, 52, 76, 100, 124, 148]],\n\t[[28, 30, 30, 30], [40, 20, 66, 56], [4, 22, 48, 74, 100, 126, 152]],\n\t[[28, 30, 30, 30], [43, 21, 70, 59], [4, 26, 52, 78, 104, 130, 156]],\n\t[[28, 30, 30, 30], [45, 22, 74, 62], [4, 30, 56, 82, 108, 134, 160]],\n\t[[28, 30, 30, 30], [47, 24, 77, 65], [4, 24, 52, 80, 108, 136, 164]],\n\t[[28, 30, 30, 30], [49, 25, 81, 68], [4, 28, 56, 84, 112, 140, 168]]];\n\n// mode constants (cf. Table 2 in JIS X 0510:2004 p. 16)\nvar MODE_TERMINATOR = 0;\nvar MODE_NUMERIC = 1, MODE_ALPHANUMERIC = 2, MODE_OCTET = 4, MODE_KANJI = 8;\n\n// validation regexps\nvar NUMERIC_REGEXP = /^\\d*$/;\nvar ALPHANUMERIC_REGEXP = /^[A-Za-z0-9 $%*+\\-./:]*$/;\nvar ALPHANUMERIC_OUT_REGEXP = /^[A-Z0-9 $%*+\\-./:]*$/;\n\n// ECC levels (cf. Table 22 in JIS X 0510:2004 p. 45)\nvar ECCLEVEL_L = 1, ECCLEVEL_M = 0, ECCLEVEL_Q = 3, ECCLEVEL_H = 2;\n\n// GF(2^8)-to-integer mapping with a reducing polynomial x^8+x^4+x^3+x^2+1\n// invariant: GF256_MAP[GF256_INVMAP[i]] == i for all i in [1,256)\nvar GF256_MAP = [], GF256_INVMAP = [-1];\nfor (var i = 0, v = 1; i < 255; ++i) {\n\tGF256_MAP.push(v);\n\tGF256_INVMAP[v] = i;\n\tv = (v * 2) ^ (v >= 128 ? 0x11d : 0);\n}\n\n// generator polynomials up to degree 30\n// (should match with polynomials in JIS X 0510:2004 Appendix A)\n//\n// generator polynomial of degree K is product of (x-\\alpha^0), (x-\\alpha^1),\n// ..., (x-\\alpha^(K-1)). by convention, we omit the K-th coefficient (always 1)\n// from the result; also other coefficients are written in terms of the exponent\n// to \\alpha to avoid the redundant calculation. (see also calculateecc below.)\nvar GF256_GENPOLY = [[]];\nfor (var i = 0; i < 30; ++i) {\n\tvar prevpoly = GF256_GENPOLY[i], poly = [];\n\tfor (var j = 0; j <= i; ++j) {\n\t\tvar a = (j < i ? GF256_MAP[prevpoly[j]] : 0);\n\t\tvar b = GF256_MAP[(i + (prevpoly[j - 1] || 0)) % 255];\n\t\tpoly.push(GF256_INVMAP[a ^ b]);\n\t}\n\tGF256_GENPOLY.push(poly);\n}\n\n// alphanumeric character mapping (cf. Table 5 in JIS X 0510:2004 p. 19)\nvar ALPHANUMERIC_MAP = {};\nfor (var i = 0; i < 45; ++i) {\n\tALPHANUMERIC_MAP['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'.charAt(i)] = i;\n}\n\n// mask functions in terms of row # and column #\n// (cf. Table 20 in JIS X 0510:2004 p. 42)\n/*jshint unused: false */\nvar MASKFUNCS = [\n\tfunction (i, j) {\n\t\treturn (i + j) % 2 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn i % 2 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn j % 3 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn (i + j) % 3 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn (((i / 2) | 0) + ((j / 3) | 0)) % 2 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn (i * j) % 2 + (i * j) % 3 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn ((i * j) % 2 + (i * j) % 3) % 2 === 0;\n\t},\n\tfunction (i, j) {\n\t\treturn ((i + j) % 2 + (i * j) % 3) % 2 === 0;\n\t}];\n\n// returns true when the version information has to be embeded.\nvar needsverinfo = function (ver) {\n\treturn ver > 6;\n};\n\n// returns the size of entire QR code for given version.\nvar getsizebyver = function (ver) {\n\treturn 4 * ver + 17;\n};\n\n// returns the number of bits available for code words in this version.\nvar nfullbits = function (ver) {\n\t/*\n\t * |<--------------- n --------------->|\n\t * |        |<----- n-17 ---->|        |\n\t * +-------+                ///+-------+ ----\n\t * |       |                ///|       |    ^\n\t * |  9x9  |       @@@@@    ///|  9x8  |    |\n\t * |       | # # # @5x5@ # # # |       |    |\n\t * +-------+       @@@@@       +-------+    |\n\t *       #                               ---|\n\t *                                        ^ |\n\t *       #                                |\n\t *     @@@@@       @@@@@       @@@@@      | n\n\t *     @5x5@       @5x5@       @5x5@   n-17\n\t *     @@@@@       @@@@@       @@@@@      | |\n\t *       #                                | |\n\t * //////                                 v |\n\t * //////#                               ---|\n\t * +-------+       @@@@@       @@@@@        |\n\t * |       |       @5x5@       @5x5@        |\n\t * |  8x9  |       @@@@@       @@@@@        |\n\t * |       |                                v\n\t * +-------+                             ----\n\t *\n\t * when the entire code has n^2 modules and there are m^2-3 alignment\n\t * patterns, we have:\n\t * - 225 (= 9x9 + 9x8 + 8x9) modules for finder patterns and\n\t *   format information;\n\t * - 2n-34 (= 2(n-17)) modules for timing patterns;\n\t * - 36 (= 3x6 + 6x3) modules for version information, if any;\n\t * - 25m^2-75 (= (m^2-3)(5x5)) modules for alignment patterns\n\t *   if any, but 10m-20 (= 2(m-2)x5) of them overlaps with\n\t *   timing patterns.\n\t */\n\tvar v = VERSIONS[ver];\n\tvar nbits = 16 * ver * ver + 128 * ver + 64; // finder, timing and format info.\n\tif (needsverinfo(ver))\n\t\tnbits -= 36; // version information\n\tif (v[2].length) { // alignment patterns\n\t\tnbits -= 25 * v[2].length * v[2].length - 10 * v[2].length - 55;\n\t}\n\treturn nbits;\n};\n\n// returns the number of bits available for data portions (i.e. excludes ECC\n// bits but includes mode and length bits) in this version and ECC level.\nvar ndatabits = function (ver, ecclevel) {\n\tvar nbits = nfullbits(ver) & ~7; // no sub-octet code words\n\tvar v = VERSIONS[ver];\n\tnbits -= 8 * v[0][ecclevel] * v[1][ecclevel]; // ecc bits\n\treturn nbits;\n};\n\n// returns the number of bits required for the length of data.\n// (cf. Table 3 in JIS X 0510:2004 p. 16)\nvar ndatalenbits = function (ver, mode) {\n\tswitch (mode) {\n\t\tcase MODE_NUMERIC:\n\t\t\treturn (ver < 10 ? 10 : ver < 27 ? 12 : 14);\n\t\tcase MODE_ALPHANUMERIC:\n\t\t\treturn (ver < 10 ? 9 : ver < 27 ? 11 : 13);\n\t\tcase MODE_OCTET:\n\t\t\treturn (ver < 10 ? 8 : 16);\n\t\tcase MODE_KANJI:\n\t\t\treturn (ver < 10 ? 8 : ver < 27 ? 10 : 12);\n\t}\n};\n\n// returns the maximum length of data possible in given configuration.\nvar getmaxdatalen = function (ver, mode, ecclevel) {\n\tvar nbits = ndatabits(ver, ecclevel) - 4 - ndatalenbits(ver, mode); // 4 for mode bits\n\tswitch (mode) {\n\t\tcase MODE_NUMERIC:\n\t\t\treturn ((nbits / 10) | 0) * 3 + (nbits % 10 < 4 ? 0 : nbits % 10 < 7 ? 1 : 2);\n\t\tcase MODE_ALPHANUMERIC:\n\t\t\treturn ((nbits / 11) | 0) * 2 + (nbits % 11 < 6 ? 0 : 1);\n\t\tcase MODE_OCTET:\n\t\t\treturn (nbits / 8) | 0;\n\t\tcase MODE_KANJI:\n\t\t\treturn (nbits / 13) | 0;\n\t}\n};\n\n// checks if the given data can be encoded in given mode, and returns\n// the converted data for the further processing if possible. otherwise\n// returns null.\n//\n// this function does not check the length of data; it is a duty of\n// encode function below (as it depends on the version and ECC level too).\nvar validatedata = function (mode, data) {\n\tswitch (mode) {\n\t\tcase MODE_NUMERIC:\n\t\t\tif (!data.match(NUMERIC_REGEXP))\n\t\t\t\treturn null;\n\t\t\treturn data;\n\n\t\tcase MODE_ALPHANUMERIC:\n\t\t\tif (!data.match(ALPHANUMERIC_REGEXP))\n\t\t\t\treturn null;\n\t\t\treturn data.toUpperCase();\n\n\t\tcase MODE_OCTET:\n\t\t\tif (typeof data === 'string') { // encode as utf-8 string\n\t\t\t\tvar newdata = [];\n\t\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\t\tvar ch = data.charCodeAt(i);\n\t\t\t\t\tif (ch < 0x80) {\n\t\t\t\t\t\tnewdata.push(ch);\n\t\t\t\t\t} else if (ch < 0x800) {\n\t\t\t\t\t\tnewdata.push(0xc0 | (ch >> 6),\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\n\t\t\t\t\t} else if (ch < 0x10000) {\n\t\t\t\t\t\tnewdata.push(0xe0 | (ch >> 12),\n\t\t\t\t\t\t\t0x80 | ((ch >> 6) & 0x3f),\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewdata.push(0xf0 | (ch >> 18),\n\t\t\t\t\t\t\t0x80 | ((ch >> 12) & 0x3f),\n\t\t\t\t\t\t\t0x80 | ((ch >> 6) & 0x3f),\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn newdata;\n\t\t\t} else {\n\t\t\t\treturn data;\n\t\t\t}\n\t}\n};\n\n// returns the code words (sans ECC bits) for given data and configurations.\n// requires data to be preprocessed by validatedata. no length check is\n// performed, and everything has to be checked before calling this function.\nvar encode = function (ver, mode, data, maxbuflen) {\n\tvar buf = [];\n\tvar bits = 0, remaining = 8;\n\tvar datalen = data.length;\n\n\t// this function is intentionally no-op when n=0.\n\tvar pack = function (x, n) {\n\t\tif (n >= remaining) {\n\t\t\tbuf.push(bits | (x >> (n -= remaining)));\n\t\t\twhile (n >= 8)\n\t\t\t\tbuf.push((x >> (n -= 8)) & 255);\n\t\t\tbits = 0;\n\t\t\tremaining = 8;\n\t\t}\n\t\tif (n > 0)\n\t\t\tbits |= (x & ((1 << n) - 1)) << (remaining -= n);\n\t};\n\n\tvar nlenbits = ndatalenbits(ver, mode);\n\tpack(mode, 4);\n\tpack(datalen, nlenbits);\n\n\tswitch (mode) {\n\t\tcase MODE_NUMERIC:\n\t\t\tfor (var i = 2; i < datalen; i += 3) {\n\t\t\t\tpack(parseInt(data.substring(i - 2, i + 1), 10), 10);\n\t\t\t}\n\t\t\tpack(parseInt(data.substring(i - 2), 10), [0, 4, 7][datalen % 3]);\n\t\t\tbreak;\n\n\t\tcase MODE_ALPHANUMERIC:\n\t\t\tfor (var i = 1; i < datalen; i += 2) {\n\t\t\t\tpack(ALPHANUMERIC_MAP[data.charAt(i - 1)] * 45 +\n\t\t\t\t\tALPHANUMERIC_MAP[data.charAt(i)], 11);\n\t\t\t}\n\t\t\tif (datalen % 2 == 1) {\n\t\t\t\tpack(ALPHANUMERIC_MAP[data.charAt(i - 1)], 6);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase MODE_OCTET:\n\t\t\tfor (var i = 0; i < datalen; ++i) {\n\t\t\t\tpack(data[i], 8);\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\t// final bits. it is possible that adding terminator causes the buffer\n\t// to overflow, but then the buffer truncated to the maximum size will\n\t// be valid as the truncated terminator mode bits and padding is\n\t// identical in appearance (cf. JIS X 0510:2004 sec 8.4.8).\n\tpack(MODE_TERMINATOR, 4);\n\tif (remaining < 8)\n\t\tbuf.push(bits);\n\n\t// the padding to fill up the remaining space. we should not add any\n\t// words when the overflow already occurred.\n\twhile (buf.length + 1 < maxbuflen)\n\t\tbuf.push(0xec, 0x11);\n\tif (buf.length < maxbuflen)\n\t\tbuf.push(0xec);\n\treturn buf;\n};\n\n// calculates ECC code words for given code words and generator polynomial.\n//\n// this is quite similar to CRC calculation as both Reed-Solomon and CRC use\n// the certain kind of cyclic codes, which is effectively the division of\n// zero-augumented polynomial by the generator polynomial. the only difference\n// is that Reed-Solomon uses GF(2^8), instead of CRC's GF(2), and Reed-Solomon\n// uses the different generator polynomial than CRC's.\nvar calculateecc = function (poly, genpoly) {\n\tvar modulus = poly.slice(0);\n\tvar polylen = poly.length, genpolylen = genpoly.length;\n\tfor (var i = 0; i < genpolylen; ++i)\n\t\tmodulus.push(0);\n\tfor (var i = 0; i < polylen; ) {\n\t\tvar quotient = GF256_INVMAP[modulus[i++]];\n\t\tif (quotient >= 0) {\n\t\t\tfor (var j = 0; j < genpolylen; ++j) {\n\t\t\t\tmodulus[i + j] ^= GF256_MAP[(quotient + genpoly[j]) % 255];\n\t\t\t}\n\t\t}\n\t}\n\treturn modulus.slice(polylen);\n};\n\n// auguments ECC code words to given code words. the resulting words are\n// ready to be encoded in the matrix.\n//\n// the much of actual augumenting procedure follows JIS X 0510:2004 sec 8.7.\n// the code is simplified using the fact that the size of each code & ECC\n// blocks is almost same; for example, when we have 4 blocks and 46 data words\n// the number of code words in those blocks are 11, 11, 12, 12 respectively.\nvar augumenteccs = function (poly, nblocks, genpoly) {\n\tvar subsizes = [];\n\tvar subsize = (poly.length / nblocks) | 0, subsize0 = 0;\n\tvar pivot = nblocks - poly.length % nblocks;\n\tfor (var i = 0; i < pivot; ++i) {\n\t\tsubsizes.push(subsize0);\n\t\tsubsize0 += subsize;\n\t}\n\tfor (var i = pivot; i < nblocks; ++i) {\n\t\tsubsizes.push(subsize0);\n\t\tsubsize0 += subsize + 1;\n\t}\n\tsubsizes.push(subsize0);\n\n\tvar eccs = [];\n\tfor (var i = 0; i < nblocks; ++i) {\n\t\teccs.push(calculateecc(poly.slice(subsizes[i], subsizes[i + 1]), genpoly));\n\t}\n\n\tvar result = [];\n\tvar nitemsperblock = (poly.length / nblocks) | 0;\n\tfor (var i = 0; i < nitemsperblock; ++i) {\n\t\tfor (var j = 0; j < nblocks; ++j) {\n\t\t\tresult.push(poly[subsizes[j] + i]);\n\t\t}\n\t}\n\tfor (var j = pivot; j < nblocks; ++j) {\n\t\tresult.push(poly[subsizes[j + 1] - 1]);\n\t}\n\tfor (var i = 0; i < genpoly.length; ++i) {\n\t\tfor (var j = 0; j < nblocks; ++j) {\n\t\t\tresult.push(eccs[j][i]);\n\t\t}\n\t}\n\treturn result;\n};\n\n// auguments BCH(p+q,q) code to the polynomial over GF(2), given the proper\n// genpoly. the both input and output are in binary numbers, and unlike\n// calculateecc genpoly should include the 1 bit for the highest degree.\n//\n// actual polynomials used for this procedure are as follows:\n// - p=10, q=5, genpoly=x^10+x^8+x^5+x^4+x^2+x+1 (JIS X 0510:2004 Appendix C)\n// - p=18, q=6, genpoly=x^12+x^11+x^10+x^9+x^8+x^5+x^2+1 (ibid. Appendix D)\nvar augumentbch = function (poly, p, genpoly, q) {\n\tvar modulus = poly << q;\n\tfor (var i = p - 1; i >= 0; --i) {\n\t\tif ((modulus >> (q + i)) & 1)\n\t\t\tmodulus ^= genpoly << i;\n\t}\n\treturn (poly << q) | modulus;\n};\n\n// creates the base matrix for given version. it returns two matrices, one of\n// them is the actual one and the another represents the \"reserved\" portion\n// (e.g. finder and timing patterns) of the matrix.\n//\n// some entries in the matrix may be undefined, rather than 0 or 1. this is\n// intentional (no initialization needed!), and putdata below will fill\n// the remaining ones.\nvar makebasematrix = function (ver) {\n\tvar v = VERSIONS[ver], n = getsizebyver(ver);\n\tvar matrix = [], reserved = [];\n\tfor (var i = 0; i < n; ++i) {\n\t\tmatrix.push([]);\n\t\treserved.push([]);\n\t}\n\n\tvar blit = function (y, x, h, w, bits) {\n\t\tfor (var i = 0; i < h; ++i) {\n\t\t\tfor (var j = 0; j < w; ++j) {\n\t\t\t\tmatrix[y + i][x + j] = (bits[i] >> j) & 1;\n\t\t\t\treserved[y + i][x + j] = 1;\n\t\t\t}\n\t\t}\n\t};\n\n\t// finder patterns and a part of timing patterns\n\t// will also mark the format information area (not yet written) as reserved.\n\tblit(0, 0, 9, 9, [0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x17f, 0x00, 0x40]);\n\tblit(n - 8, 0, 8, 9, [0x100, 0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x7f]);\n\tblit(0, n - 8, 9, 8, [0xfe, 0x82, 0xba, 0xba, 0xba, 0x82, 0xfe, 0x00, 0x00]);\n\n\t// the rest of timing patterns\n\tfor (var i = 9; i < n - 8; ++i) {\n\t\tmatrix[6][i] = matrix[i][6] = ~i & 1;\n\t\treserved[6][i] = reserved[i][6] = 1;\n\t}\n\n\t// alignment patterns\n\tvar aligns = v[2], m = aligns.length;\n\tfor (var i = 0; i < m; ++i) {\n\t\tvar minj = (i === 0 || i === m - 1 ? 1 : 0), maxj = (i === 0 ? m - 1 : m);\n\t\tfor (var j = minj; j < maxj; ++j) {\n\t\t\tblit(aligns[i], aligns[j], 5, 5, [0x1f, 0x11, 0x15, 0x11, 0x1f]);\n\t\t}\n\t}\n\n\t// version information\n\tif (needsverinfo(ver)) {\n\t\tvar code = augumentbch(ver, 6, 0x1f25, 12);\n\t\tvar k = 0;\n\t\tfor (var i = 0; i < 6; ++i) {\n\t\t\tfor (var j = 0; j < 3; ++j) {\n\t\t\t\tmatrix[i][(n - 11) + j] = matrix[(n - 11) + j][i] = (code >> k++) & 1;\n\t\t\t\treserved[i][(n - 11) + j] = reserved[(n - 11) + j][i] = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {matrix: matrix, reserved: reserved};\n};\n\n// fills the data portion (i.e. unmarked in reserved) of the matrix with given\n// code words. the size of code words should be no more than available bits,\n// and remaining bits are padded to 0 (cf. JIS X 0510:2004 sec 8.7.3).\nvar putdata = function (matrix, reserved, buf) {\n\tvar n = matrix.length;\n\tvar k = 0, dir = -1;\n\tfor (var i = n - 1; i >= 0; i -= 2) {\n\t\tif (i == 6)\n\t\t\t--i; // skip the entire timing pattern column\n\t\tvar jj = (dir < 0 ? n - 1 : 0);\n\t\tfor (var j = 0; j < n; ++j) {\n\t\t\tfor (var ii = i; ii > i - 2; --ii) {\n\t\t\t\tif (!reserved[jj][ii]) {\n\t\t\t\t\t// may overflow, but (undefined >> x)\n\t\t\t\t\t// is 0 so it will auto-pad to zero.\n\t\t\t\t\tmatrix[jj][ii] = (buf[k >> 3] >> (~k & 7)) & 1;\n\t\t\t\t\t++k;\n\t\t\t\t}\n\t\t\t}\n\t\t\tjj += dir;\n\t\t}\n\t\tdir = -dir;\n\t}\n\treturn matrix;\n};\n\n// XOR-masks the data portion of the matrix. repeating the call with the same\n// arguments will revert the prior call (convenient in the matrix evaluation).\nvar maskdata = function (matrix, reserved, mask) {\n\tvar maskf = MASKFUNCS[mask];\n\tvar n = matrix.length;\n\tfor (var i = 0; i < n; ++i) {\n\t\tfor (var j = 0; j < n; ++j) {\n\t\t\tif (!reserved[i][j])\n\t\t\t\tmatrix[i][j] ^= maskf(i, j);\n\t\t}\n\t}\n\treturn matrix;\n};\n\n// puts the format information.\nvar putformatinfo = function (matrix, reserved, ecclevel, mask) {\n\tvar n = matrix.length;\n\tvar code = augumentbch((ecclevel << 3) | mask, 5, 0x537, 10) ^ 0x5412;\n\tfor (var i = 0; i < 15; ++i) {\n\t\tvar r = [0, 1, 2, 3, 4, 5, 7, 8, n - 7, n - 6, n - 5, n - 4, n - 3, n - 2, n - 1][i];\n\t\tvar c = [n - 1, n - 2, n - 3, n - 4, n - 5, n - 6, n - 7, n - 8, 7, 5, 4, 3, 2, 1, 0][i];\n\t\tmatrix[r][8] = matrix[8][c] = (code >> i) & 1;\n\t\t// we don't have to mark those bits reserved; always done\n\t\t// in makebasematrix above.\n\t}\n\treturn matrix;\n};\n\n// evaluates the resulting matrix and returns the score (lower is better).\n// (cf. JIS X 0510:2004 sec 8.8.2)\n//\n// the evaluation procedure tries to avoid the problematic patterns naturally\n// occuring from the original matrix. for example, it penaltizes the patterns\n// which just look like the finder pattern which will confuse the decoder.\n// we choose the mask which results in the lowest score among 8 possible ones.\n//\n// note: zxing seems to use the same procedure and in many cases its choice\n// agrees to ours, but sometimes it does not. practically it doesn't matter.\nvar evaluatematrix = function (matrix) {\n\t// N1+(k-5) points for each consecutive row of k same-colored modules,\n\t// where k >= 5. no overlapping row counts.\n\tvar PENALTY_CONSECUTIVE = 3;\n\t// N2 points for each 2x2 block of same-colored modules.\n\t// overlapping block does count.\n\tvar PENALTY_TWOBYTWO = 3;\n\t// N3 points for each pattern with >4W:1B:1W:3B:1W:1B or\n\t// 1B:1W:3B:1W:1B:>4W, or their multiples (e.g. highly unlikely,\n\t// but 13W:3B:3W:9B:3W:3B counts).\n\tvar PENALTY_FINDERLIKE = 40;\n\t// N4*k points for every (5*k)% deviation from 50% black density.\n\t// i.e. k=1 for 55~60% and 40~45%, k=2 for 60~65% and 35~40%, etc.\n\tvar PENALTY_DENSITY = 10;\n\n\tvar evaluategroup = function (groups) { // assumes [W,B,W,B,W,...,B,W]\n\t\tvar score = 0;\n\t\tfor (var i = 0; i < groups.length; ++i) {\n\t\t\tif (groups[i] >= 5)\n\t\t\t\tscore += PENALTY_CONSECUTIVE + (groups[i] - 5);\n\t\t}\n\t\tfor (var i = 5; i < groups.length; i += 2) {\n\t\t\tvar p = groups[i];\n\t\t\tif (groups[i - 1] == p && groups[i - 2] == 3 * p && groups[i - 3] == p &&\n\t\t\t\tgroups[i - 4] == p && (groups[i - 5] >= 4 * p || groups[i + 1] >= 4 * p)) {\n\t\t\t\t// this part differs from zxing...\n\t\t\t\tscore += PENALTY_FINDERLIKE;\n\t\t\t}\n\t\t}\n\t\treturn score;\n\t};\n\n\tvar n = matrix.length;\n\tvar score = 0, nblacks = 0;\n\tfor (var i = 0; i < n; ++i) {\n\t\tvar row = matrix[i];\n\t\tvar groups;\n\n\t\t// evaluate the current row\n\t\tgroups = [0]; // the first empty group of white\n\t\tfor (var j = 0; j < n; ) {\n\t\t\tvar k;\n\t\t\tfor (k = 0; j < n && row[j]; ++k)\n\t\t\t\t++j;\n\t\t\tgroups.push(k);\n\t\t\tfor (k = 0; j < n && !row[j]; ++k)\n\t\t\t\t++j;\n\t\t\tgroups.push(k);\n\t\t}\n\t\tscore += evaluategroup(groups);\n\n\t\t// evaluate the current column\n\t\tgroups = [0];\n\t\tfor (var j = 0; j < n; ) {\n\t\t\tvar k;\n\t\t\tfor (k = 0; j < n && matrix[j][i]; ++k)\n\t\t\t\t++j;\n\t\t\tgroups.push(k);\n\t\t\tfor (k = 0; j < n && !matrix[j][i]; ++k)\n\t\t\t\t++j;\n\t\t\tgroups.push(k);\n\t\t}\n\t\tscore += evaluategroup(groups);\n\n\t\t// check the 2x2 box and calculate the density\n\t\tvar nextrow = matrix[i + 1] || [];\n\t\tnblacks += row[0];\n\t\tfor (var j = 1; j < n; ++j) {\n\t\t\tvar p = row[j];\n\t\t\tnblacks += p;\n\t\t\t// at least comparison with next row should be strict...\n\t\t\tif (row[j - 1] == p && nextrow[j] === p && nextrow[j - 1] === p) {\n\t\t\t\tscore += PENALTY_TWOBYTWO;\n\t\t\t}\n\t\t}\n\t}\n\n\tscore += PENALTY_DENSITY * ((Math.abs(nblacks / n / n - 0.5) / 0.05) | 0);\n\treturn score;\n};\n\n// returns the fully encoded QR code matrix which contains given data.\n// it also chooses the best mask automatically when mask is -1.\nvar generate = function (data, ver, mode, ecclevel, mask) {\n\tvar v = VERSIONS[ver];\n\tvar buf = encode(ver, mode, data, ndatabits(ver, ecclevel) >> 3);\n\tbuf = augumenteccs(buf, v[1][ecclevel], GF256_GENPOLY[v[0][ecclevel]]);\n\n\tvar result = makebasematrix(ver);\n\tvar matrix = result.matrix, reserved = result.reserved;\n\tputdata(matrix, reserved, buf);\n\n\tif (mask < 0) {\n\t\t// find the best mask\n\t\tmaskdata(matrix, reserved, 0);\n\t\tputformatinfo(matrix, reserved, ecclevel, 0);\n\t\tvar bestmask = 0, bestscore = evaluatematrix(matrix);\n\t\tmaskdata(matrix, reserved, 0);\n\t\tfor (mask = 1; mask < 8; ++mask) {\n\t\t\tmaskdata(matrix, reserved, mask);\n\t\t\tputformatinfo(matrix, reserved, ecclevel, mask);\n\t\t\tvar score = evaluatematrix(matrix);\n\t\t\tif (bestscore > score) {\n\t\t\t\tbestscore = score;\n\t\t\t\tbestmask = mask;\n\t\t\t}\n\t\t\tmaskdata(matrix, reserved, mask);\n\t\t}\n\t\tmask = bestmask;\n\t}\n\n\tmaskdata(matrix, reserved, mask);\n\tputformatinfo(matrix, reserved, ecclevel, mask);\n\treturn matrix;\n};\n\n// the public interface is trivial; the options available are as follows:\n//\n// - version: an integer in [1,40]. when omitted (or -1) the smallest possible\n//   version is chosen.\n// - mode: one of 'numeric', 'alphanumeric', 'octet'. when omitted the smallest\n//   possible mode is chosen.\n// - eccLevel: one of 'L', 'M', 'Q', 'H'. defaults to 'L'.\n// - mask: an integer in [0,7]. when omitted (or -1) the best mask is chosen.\n//\n\nfunction generateFrame(data, options) {\n\tvar MODES = {'numeric': MODE_NUMERIC, 'alphanumeric': MODE_ALPHANUMERIC,\n\t\t'octet': MODE_OCTET};\n\tvar ECCLEVELS = {'L': ECCLEVEL_L, 'M': ECCLEVEL_M, 'Q': ECCLEVEL_Q,\n\t\t'H': ECCLEVEL_H};\n\n\toptions = options || {};\n\tvar ver = options.version || -1;\n\tvar ecclevel = ECCLEVELS[(options.eccLevel || 'L').toUpperCase()];\n\tvar mode = options.mode ? MODES[options.mode.toLowerCase()] : -1;\n\tvar mask = 'mask' in options ? options.mask : -1;\n\n\tif (mode < 0) {\n\t\tif (typeof data === 'string') {\n\t\t\tif (data.match(NUMERIC_REGEXP)) {\n\t\t\t\tmode = MODE_NUMERIC;\n\t\t\t} else if (data.match(ALPHANUMERIC_OUT_REGEXP)) {\n\t\t\t\t// while encode supports case-insensitive encoding, we restrict the data to be uppercased when auto-selecting the mode.\n\t\t\t\tmode = MODE_ALPHANUMERIC;\n\t\t\t} else {\n\t\t\t\tmode = MODE_OCTET;\n\t\t\t}\n\t\t} else {\n\t\t\tmode = MODE_OCTET;\n\t\t}\n\t} else if (!(mode == MODE_NUMERIC || mode == MODE_ALPHANUMERIC ||\n\t\tmode == MODE_OCTET)) {\n\t\tthrow 'invalid or unsupported mode';\n\t}\n\n\tdata = validatedata(mode, data);\n\tif (data === null)\n\t\tthrow 'invalid data format';\n\n\tif (ecclevel < 0 || ecclevel > 3)\n\t\tthrow 'invalid ECC level';\n\n\tif (ver < 0) {\n\t\tfor (ver = 1; ver <= 40; ++ver) {\n\t\t\tif (data.length <= getmaxdatalen(ver, mode, ecclevel))\n\t\t\t\tbreak;\n\t\t}\n\t\tif (ver > 40)\n\t\t\tthrow 'too large data for the Qr format';\n\t} else if (ver < 1 || ver > 40) {\n\t\tthrow 'invalid Qr version! should be between 1 and 40';\n\t}\n\n\tif (mask != -1 && (mask < 0 || mask > 8))\n\t\tthrow 'invalid mask';\n\t//console.log('version:', ver, 'mode:', mode, 'ECC:', ecclevel, 'mask:', mask )\n\treturn generate(data, ver, mode, ecclevel, mask);\n}\n\n\n// options\n// - modulesize: a number. this is a size of each modules in pixels, and\n//   defaults to 5px.\n// - margin: a number. this is a size of margin in *modules*, and defaults to\n//   4 (white modules). the specficiation mandates the margin no less than 4\n//   modules, so it is better not to alter this value unless you know what\n//   you're doing.\nfunction buildCanvas(data, options) {\n\n\tvar canvas = [];\n\tvar background = options.background || '#fff';\n\tvar foreground = options.foreground || '#000';\n\t//var margin = options.margin || 4;\n\tvar matrix = generateFrame(data, options);\n\tvar n = matrix.length;\n\tvar modSize = Math.floor(options.fit ? options.fit / n : 5);\n\tvar size = n * modSize;\n\n\tcanvas.push({\n\t\ttype: 'rect',\n\t\tx: 0, y: 0, w: size, h: size, lineWidth: 0, color: background\n\t});\n\n\tfor (var i = 0; i < n; ++i) {\n\t\tfor (var j = 0; j < n; ++j) {\n\t\t\tif (matrix[i][j]) {\n\t\t\t\tcanvas.push({\n\t\t\t\t\ttype: 'rect',\n\t\t\t\t\tx: modSize * j,\n\t\t\t\t\ty: modSize * i,\n\t\t\t\t\tw: modSize,\n\t\t\t\t\th: modSize,\n\t\t\t\t\tlineWidth: 0,\n\t\t\t\t\tcolor: foreground\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tcanvas: canvas,\n\t\tsize: size\n\t};\n\n}\n\nfunction measure(node) {\n\tvar cd = buildCanvas(node.qr, node);\n\tnode._canvas = cd.canvas;\n\tnode._width = node._height = node._minWidth = node._maxWidth = node._minHeight = node._maxHeight = cd.size;\n\treturn node;\n}\n\nmodule.exports = {\n\tmeasure: measure\n};\n\n/***/ }),\n\n/***/ 4762:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nmodule.exports = {\n\t'4A0': [4767.87, 6740.79],\n\t'2A0': [3370.39, 4767.87],\n\tA0: [2383.94, 3370.39],\n\tA1: [1683.78, 2383.94],\n\tA2: [1190.55, 1683.78],\n\tA3: [841.89, 1190.55],\n\tA4: [595.28, 841.89],\n\tA5: [419.53, 595.28],\n\tA6: [297.64, 419.53],\n\tA7: [209.76, 297.64],\n\tA8: [147.40, 209.76],\n\tA9: [104.88, 147.40],\n\tA10: [73.70, 104.88],\n\tB0: [2834.65, 4008.19],\n\tB1: [2004.09, 2834.65],\n\tB2: [1417.32, 2004.09],\n\tB3: [1000.63, 1417.32],\n\tB4: [708.66, 1000.63],\n\tB5: [498.90, 708.66],\n\tB6: [354.33, 498.90],\n\tB7: [249.45, 354.33],\n\tB8: [175.75, 249.45],\n\tB9: [124.72, 175.75],\n\tB10: [87.87, 124.72],\n\tC0: [2599.37, 3676.54],\n\tC1: [1836.85, 2599.37],\n\tC2: [1298.27, 1836.85],\n\tC3: [918.43, 1298.27],\n\tC4: [649.13, 918.43],\n\tC5: [459.21, 649.13],\n\tC6: [323.15, 459.21],\n\tC7: [229.61, 323.15],\n\tC8: [161.57, 229.61],\n\tC9: [113.39, 161.57],\n\tC10: [79.37, 113.39],\n\tRA0: [2437.80, 3458.27],\n\tRA1: [1729.13, 2437.80],\n\tRA2: [1218.90, 1729.13],\n\tRA3: [864.57, 1218.90],\n\tRA4: [609.45, 864.57],\n\tSRA0: [2551.18, 3628.35],\n\tSRA1: [1814.17, 2551.18],\n\tSRA2: [1275.59, 1814.17],\n\tSRA3: [907.09, 1275.59],\n\tSRA4: [637.80, 907.09],\n\tEXECUTIVE: [521.86, 756.00],\n\tFOLIO: [612.00, 936.00],\n\tLEGAL: [612.00, 1008.00],\n\tLETTER: [612.00, 792.00],\n\tTABLOID: [792.00, 1224.00]\n};\n\n\n/***/ }),\n\n/***/ 7597:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isString = (__webpack_require__(6225).isString);\nvar isArray = (__webpack_require__(6225).isArray);\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar isNull = (__webpack_require__(6225).isNull);\n\n/**\n * Creates an instance of StyleContextStack used for style inheritance and style overrides\n *\n * @constructor\n * @this {StyleContextStack}\n * @param {Object} named styles dictionary\n * @param {Object} optional default style definition\n */\nfunction StyleContextStack(styleDictionary, defaultStyle) {\n\tthis.defaultStyle = defaultStyle || {};\n\tthis.styleDictionary = styleDictionary;\n\tthis.styleOverrides = [];\n}\n\n/**\n * Creates cloned version of current stack\n * @return {StyleContextStack} current stack snapshot\n */\nStyleContextStack.prototype.clone = function () {\n\tvar stack = new StyleContextStack(this.styleDictionary, this.defaultStyle);\n\n\tthis.styleOverrides.forEach(function (item) {\n\t\tstack.styleOverrides.push(item);\n\t});\n\n\treturn stack;\n};\n\n/**\n * Pushes style-name or style-overrides-object onto the stack for future evaluation\n *\n * @param {String|Object} styleNameOrOverride style-name (referring to styleDictionary) or\n *                                            a new dictionary defining overriding properties\n */\nStyleContextStack.prototype.push = function (styleNameOrOverride) {\n\tthis.styleOverrides.push(styleNameOrOverride);\n};\n\n/**\n * Removes last style-name or style-overrides-object from the stack\n *\n * @param {Number} howMany - optional number of elements to be popped (if not specified,\n *                           one element will be removed from the stack)\n */\nStyleContextStack.prototype.pop = function (howMany) {\n\thowMany = howMany || 1;\n\n\twhile (howMany-- > 0) {\n\t\tthis.styleOverrides.pop();\n\t}\n};\n\n/**\n * Creates a set of named styles or/and a style-overrides-object based on the item,\n * pushes those elements onto the stack for future evaluation and returns the number\n * of elements pushed, so they can be easily poped then.\n *\n * @param {Object} item - an object with optional style property and/or style overrides\n * @return the number of items pushed onto the stack\n */\nStyleContextStack.prototype.autopush = function (item) {\n\tif (isString(item)) {\n\t\treturn 0;\n\t}\n\n\tvar styleNames = [];\n\n\tif (item.style) {\n\t\tif (isArray(item.style)) {\n\t\t\tstyleNames = item.style;\n\t\t} else {\n\t\t\tstyleNames = [item.style];\n\t\t}\n\t}\n\n\tfor (var i = 0, l = styleNames.length; i < l; i++) {\n\t\tthis.push(styleNames[i]);\n\t}\n\n\tvar styleProperties = [\n\t\t'font',\n\t\t'fontSize',\n\t\t'fontFeatures',\n\t\t'bold',\n\t\t'italics',\n\t\t'alignment',\n\t\t'color',\n\t\t'columnGap',\n\t\t'fillColor',\n\t\t'fillOpacity',\n\t\t'decoration',\n\t\t'decorationStyle',\n\t\t'decorationColor',\n\t\t'background',\n\t\t'lineHeight',\n\t\t'characterSpacing',\n\t\t'noWrap',\n\t\t'markerColor',\n\t\t'leadingIndent',\n\t\t'sup',\n\t\t'sub'\n\t\t//'tableCellPadding'\n\t\t// 'cellBorder',\n\t\t// 'headerCellBorder',\n\t\t// 'oddRowCellBorder',\n\t\t// 'evenRowCellBorder',\n\t\t// 'tableBorder'\n\t];\n\tvar styleOverrideObject = {};\n\tvar pushStyleOverrideObject = false;\n\n\tstyleProperties.forEach(function (key) {\n\t\tif (!isUndefined(item[key]) && !isNull(item[key])) {\n\t\t\tstyleOverrideObject[key] = item[key];\n\t\t\tpushStyleOverrideObject = true;\n\t\t}\n\t});\n\n\tif (pushStyleOverrideObject) {\n\t\tthis.push(styleOverrideObject);\n\t}\n\n\treturn styleNames.length + (pushStyleOverrideObject ? 1 : 0);\n};\n\n/**\n * Automatically pushes elements onto the stack, using autopush based on item,\n * executes callback and then pops elements back. Returns value returned by callback\n *\n * @param  {Object}   item - an object with optional style property and/or style overrides\n * @param  {Function} function to be called between autopush and pop\n * @return {Object} value returned by callback\n */\nStyleContextStack.prototype.auto = function (item, callback) {\n\tvar pushedItems = this.autopush(item);\n\tvar result = callback();\n\n\tif (pushedItems > 0) {\n\t\tthis.pop(pushedItems);\n\t}\n\n\treturn result;\n};\n\n/**\n * Evaluates stack and returns value of a named property\n *\n * @param {String} property - property name\n * @return property value or null if not found\n */\nStyleContextStack.prototype.getProperty = function (property) {\n\tif (this.styleOverrides) {\n\t\tfor (var i = this.styleOverrides.length - 1; i >= 0; i--) {\n\t\t\tvar item = this.styleOverrides[i];\n\n\t\t\tif (isString(item)) {\n\t\t\t\t// named-style-override\n\t\t\t\tvar style = this.styleDictionary[item];\n\t\t\t\tif (style && !isUndefined(style[property]) && !isNull(style[property])) {\n\t\t\t\t\treturn style[property];\n\t\t\t\t}\n\t\t\t} else if (!isUndefined(item[property]) && !isNull(item[property])) {\n\t\t\t\t// style-overrides-object\n\t\t\t\treturn item[property];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this.defaultStyle && this.defaultStyle[property];\n};\n\nmodule.exports = StyleContextStack;\n\n\n/***/ }),\n\n/***/ 7601:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar xmldoc = __webpack_require__(6513);\n\n/** Strip unit postfix, parse number, but return undefined instead of NaN for bad input */\nfunction stripUnits(textVal) {\n\tvar n = parseFloat(textVal);\n\tif (typeof n !== 'number' || isNaN(n)) {\n\t\treturn undefined;\n\t}\n\treturn n;\n}\n\n/** Make sure it's valid XML and the root tage is <svg/>, returns xmldoc DOM */\nfunction parseSVG(svgString) {\n\tvar doc;\n\n\ttry {\n\t\tdoc = new xmldoc.XmlDocument(svgString);\n\t} catch (err) {\n\t\tthrow new Error('SVGMeasure: ' + err);\n\t}\n\n\tif (doc.name !== \"svg\") {\n\t\tthrow new Error('SVGMeasure: expected <svg> document');\n\t}\n\n\treturn doc;\n}\n\nfunction SVGMeasure() {\n}\n\nSVGMeasure.prototype.measureSVG = function (svgString) {\n\n\tvar doc = parseSVG(svgString);\n\n\tvar docWidth = stripUnits(doc.attr.width);\n\tvar docHeight = stripUnits(doc.attr.height);\n\n\tif ((docWidth == undefined || docHeight == undefined) && typeof doc.attr.viewBox == 'string') {\n\t\tvar viewBoxParts = doc.attr.viewBox.split(/[,\\s]+/);\n\t\tif (viewBoxParts.length !== 4) {\n\t\t\tthrow new Error(\"Unexpected svg viewbox format, should have 4 entries but found: '\" + doc.attr.viewBox + \"'\");\n\t\t}\n\t\tif (docWidth == undefined) {\n\t\t\tdocWidth = stripUnits(viewBoxParts[2]);\n\t\t}\n\t\tif (docHeight == undefined) {\n\t\t\tdocHeight = stripUnits(viewBoxParts[3]);\n\t\t}\n\t}\n\n\treturn {\n\t\twidth: docWidth,\n\t\theight: docHeight\n\t};\n};\n\nSVGMeasure.prototype.writeDimensions = function (svgString, dimensions) {\n\n\tvar doc = parseSVG(svgString);\n\n\tdoc.attr.width = \"\" + dimensions.width;\n\tdoc.attr.height = \"\" + dimensions.height;\n\n\treturn doc.toString();\n};\n\nmodule.exports = SVGMeasure;\n\n\n/***/ }),\n\n/***/ 9342:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar ColumnCalculator = __webpack_require__(4498);\nvar isFunction = (__webpack_require__(6225).isFunction);\nvar isNumber = (__webpack_require__(6225).isNumber);\n\nfunction TableProcessor(tableNode) {\n\tthis.tableNode = tableNode;\n}\n\nTableProcessor.prototype.beginTable = function (writer) {\n\tvar tableNode;\n\tvar availableWidth;\n\tvar self = this;\n\n\ttableNode = this.tableNode;\n\tthis.offsets = tableNode._offsets;\n\tthis.layout = tableNode._layout;\n\n\tavailableWidth = writer.context().availableWidth - this.offsets.total;\n\tColumnCalculator.buildColumnWidths(tableNode.table.widths, availableWidth);\n\n\tthis.tableWidth = tableNode._offsets.total + getTableInnerContentWidth();\n\tthis.rowSpanData = prepareRowSpanData();\n\tthis.cleanUpRepeatables = false;\n\n\tthis.headerRows = tableNode.table.headerRows || 0;\n\tthis.rowsWithoutPageBreak = this.headerRows + (tableNode.table.keepWithHeaderRows || 0);\n\tthis.dontBreakRows = tableNode.table.dontBreakRows || false;\n\n\tif (this.rowsWithoutPageBreak) {\n\t\twriter.beginUnbreakableBlock();\n\t}\n\n\t// update the border properties of all cells before drawing any lines\n\tprepareCellBorders(this.tableNode.table.body);\n\n\tthis.drawHorizontalLine(0, writer);\n\n\tfunction getTableInnerContentWidth() {\n\t\tvar width = 0;\n\n\t\ttableNode.table.widths.forEach(function (w) {\n\t\t\twidth += w._calcWidth;\n\t\t});\n\n\t\treturn width;\n\t}\n\n\tfunction prepareRowSpanData() {\n\t\tvar rsd = [];\n\t\tvar x = 0;\n\t\tvar lastWidth = 0;\n\n\t\trsd.push({ left: 0, rowSpan: 0 });\n\n\t\tfor (var i = 0, l = self.tableNode.table.body[0].length; i < l; i++) {\n\t\t\tvar paddings = self.layout.paddingLeft(i, self.tableNode) + self.layout.paddingRight(i, self.tableNode);\n\t\t\tvar lBorder = self.layout.vLineWidth(i, self.tableNode);\n\t\t\tlastWidth = paddings + lBorder + self.tableNode.table.widths[i]._calcWidth;\n\t\t\trsd[rsd.length - 1].width = lastWidth;\n\t\t\tx += lastWidth;\n\t\t\trsd.push({ left: x, rowSpan: 0, width: 0 });\n\t\t}\n\n\t\treturn rsd;\n\t}\n\n\t// Iterate through all cells. If the current cell is the start of a\n\t// rowSpan/colSpan, update the border property of the cells on its\n\t// bottom/right accordingly. This is needed since each iteration of the\n\t// line-drawing loops draws lines for a single cell, not for an entire\n\t// rowSpan/colSpan.\n\tfunction prepareCellBorders(body) {\n\t\tfor (var rowIndex = 0; rowIndex < body.length; rowIndex++) {\n\t\t\tvar row = body[rowIndex];\n\n\t\t\tfor (var colIndex = 0; colIndex < row.length; colIndex++) {\n\t\t\t\tvar cell = row[colIndex];\n\n\t\t\t\tif (cell.border) {\n\t\t\t\t\tvar rowSpan = cell.rowSpan || 1;\n\t\t\t\t\tvar colSpan = cell.colSpan || 1;\n\n\t\t\t\t\tfor (var rowOffset = 0; rowOffset < rowSpan; rowOffset++) {\n\t\t\t\t\t\t// set left border\n\t\t\t\t\t\tif (cell.border[0] !== undefined && rowOffset > 0) {\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowOffset, colIndex, 0, cell.border[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// set right border\n\t\t\t\t\t\tif (cell.border[2] !== undefined) {\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowOffset, colIndex + colSpan - 1, 2, cell.border[2]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (var colOffset = 0; colOffset < colSpan; colOffset++) {\n\t\t\t\t\t\t// set top border\n\t\t\t\t\t\tif (cell.border[1] !== undefined && colOffset > 0) {\n\t\t\t\t\t\t\tsetBorder(rowIndex, colIndex + colOffset, 1, cell.border[1]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// set bottom border\n\t\t\t\t\t\tif (cell.border[3] !== undefined) {\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowSpan - 1, colIndex + colOffset, 3, cell.border[3]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// helper function to set the border for a given cell\n\t\tfunction setBorder(rowIndex, colIndex, borderIndex, borderValue) {\n\t\t\tvar cell = body[rowIndex][colIndex];\n\t\t\tcell.border = cell.border || {};\n\t\t\tcell.border[borderIndex] = borderValue;\n\t\t}\n\t}\n};\n\nTableProcessor.prototype.onRowBreak = function (rowIndex, writer) {\n\tvar self = this;\n\treturn function () {\n\t\tvar offset = self.rowPaddingTop + (!self.headerRows ? self.topLineWidth : 0);\n\t\twriter.context().availableHeight -= self.reservedAtBottom;\n\t\twriter.context().moveDown(offset);\n\t};\n};\n\nTableProcessor.prototype.beginRow = function (rowIndex, writer) {\n\tthis.topLineWidth = this.layout.hLineWidth(rowIndex, this.tableNode);\n\tthis.rowPaddingTop = this.layout.paddingTop(rowIndex, this.tableNode);\n\tthis.bottomLineWidth = this.layout.hLineWidth(rowIndex + 1, this.tableNode);\n\tthis.rowPaddingBottom = this.layout.paddingBottom(rowIndex, this.tableNode);\n\n\tthis.rowCallback = this.onRowBreak(rowIndex, writer);\n\twriter.tracker.startTracking('pageChanged', this.rowCallback);\n\tif (this.dontBreakRows) {\n\t\twriter.beginUnbreakableBlock();\n\t}\n\tthis.rowTopY = writer.context().y;\n\tthis.reservedAtBottom = this.bottomLineWidth + this.rowPaddingBottom;\n\n\twriter.context().availableHeight -= this.reservedAtBottom;\n\n\twriter.context().moveDown(this.rowPaddingTop);\n};\n\nTableProcessor.prototype.drawHorizontalLine = function (lineIndex, writer, overrideY) {\n\tvar lineWidth = this.layout.hLineWidth(lineIndex, this.tableNode);\n\tif (lineWidth) {\n\t\tvar style = this.layout.hLineStyle(lineIndex, this.tableNode);\n\t\tvar dash;\n\t\tif (style && style.dash) {\n\t\t\tdash = style.dash;\n\t\t}\n\n\t\tvar offset = lineWidth / 2;\n\t\tvar currentLine = null;\n\t\tvar body = this.tableNode.table.body;\n\t\tvar cellAbove;\n\t\tvar currentCell;\n\t\tvar rowCellAbove;\n\n\t\tfor (var i = 0, l = this.rowSpanData.length; i < l; i++) {\n\t\t\tvar data = this.rowSpanData[i];\n\t\t\tvar shouldDrawLine = !data.rowSpan;\n\t\t\tvar borderColor = null;\n\n\t\t\t// draw only if the current cell requires a top border or the cell in the\n\t\t\t// row above requires a bottom border\n\t\t\tif (shouldDrawLine && i < l - 1) {\n\t\t\t\tvar topBorder = false, bottomBorder = false, rowBottomBorder = false;\n\n\t\t\t\t// the cell in the row above\n\t\t\t\tif (lineIndex > 0) {\n\t\t\t\t\tcellAbove = body[lineIndex - 1][i];\n\t\t\t\t\tbottomBorder = cellAbove.border ? cellAbove.border[3] : this.layout.defaultBorder;\n\t\t\t\t\tif (bottomBorder && cellAbove.borderColor) {\n\t\t\t\t\t\tborderColor = cellAbove.borderColor[3];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// the current cell\n\t\t\t\tif (lineIndex < body.length) {\n\t\t\t\t\tcurrentCell = body[lineIndex][i];\n\t\t\t\t\ttopBorder = currentCell.border ? currentCell.border[1] : this.layout.defaultBorder;\n\t\t\t\t\tif (topBorder && borderColor == null && currentCell.borderColor) {\n\t\t\t\t\t\tborderColor = currentCell.borderColor[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tshouldDrawLine = topBorder || bottomBorder;\n\t\t\t}\n\n\t\t\tif (cellAbove && cellAbove._rowSpanCurrentOffset) {\n\t\t\t\trowCellAbove = body[lineIndex - 1 - cellAbove._rowSpanCurrentOffset][i];\n\t\t\t\trowBottomBorder = rowCellAbove && rowCellAbove.border ? rowCellAbove.border[3] : this.layout.defaultBorder;\n\t\t\t\tif (rowBottomBorder && rowCellAbove && rowCellAbove.borderColor) {\n\t\t\t\t\tborderColor = rowCellAbove.borderColor[3];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (borderColor == null) {\n\t\t\t\tborderColor = isFunction(this.layout.hLineColor) ? this.layout.hLineColor(lineIndex, this.tableNode, i) : this.layout.hLineColor;\n\t\t\t}\n\n\t\t\tif (!currentLine && shouldDrawLine) {\n\t\t\t\tcurrentLine = { left: data.left, width: 0 };\n\t\t\t}\n\n\t\t\tif (shouldDrawLine) {\n\t\t\t\tvar colSpanIndex = 0;\n\t\t\t\tif (rowCellAbove && rowCellAbove.colSpan && rowBottomBorder) {\n\t\t\t\t\twhile (rowCellAbove.colSpan > colSpanIndex) {\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\n\t\t\t\t\t}\n\t\t\t\t\ti += colSpanIndex - 1;\n\t\t\t\t} else if (cellAbove && cellAbove.colSpan && bottomBorder) {\n\t\t\t\t\twhile (cellAbove.colSpan > colSpanIndex) {\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\n\t\t\t\t\t}\n\t\t\t\t\ti += colSpanIndex - 1;\n\t\t\t\t} else if (currentCell && currentCell.colSpan && topBorder) {\n\t\t\t\t\twhile (currentCell.colSpan > colSpanIndex) {\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\n\t\t\t\t\t}\n\t\t\t\t\ti += colSpanIndex - 1;\n\t\t\t\t} else {\n\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i].width || 0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar y = (overrideY || 0) + offset;\n\n\n\t\t\tif (shouldDrawLine) {\n\t\t\t\tif (currentLine && currentLine.width) {\n\t\t\t\t\twriter.addVector({\n\t\t\t\t\t\ttype: 'line',\n\t\t\t\t\t\tx1: currentLine.left,\n\t\t\t\t\t\tx2: currentLine.left + currentLine.width,\n\t\t\t\t\t\ty1: y,\n\t\t\t\t\t\ty2: y,\n\t\t\t\t\t\tlineWidth: lineWidth,\n\t\t\t\t\t\tdash: dash,\n\t\t\t\t\t\tlineColor: borderColor\n\t\t\t\t\t}, false, overrideY);\n\t\t\t\t\tcurrentLine = null;\n\t\t\t\t\tborderColor = null;\n\t\t\t\t\tcellAbove = null;\n\t\t\t\t\tcurrentCell = null;\n\t\t\t\t\trowCellAbove = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twriter.context().moveDown(lineWidth);\n\t}\n};\n\nTableProcessor.prototype.drawVerticalLine = function (x, y0, y1, vLineColIndex, writer, vLineRowIndex, beforeVLineColIndex) {\n\tvar width = this.layout.vLineWidth(vLineColIndex, this.tableNode);\n\tif (width === 0) {\n\t\treturn;\n\t}\n\tvar style = this.layout.vLineStyle(vLineColIndex, this.tableNode);\n\tvar dash;\n\tif (style && style.dash) {\n\t\tdash = style.dash;\n\t}\n\n\tvar body = this.tableNode.table.body;\n\tvar cellBefore;\n\tvar currentCell;\n\tvar borderColor;\n\n\t// the cell in the col before\n\tif (vLineColIndex > 0) {\n\t\tcellBefore = body[vLineRowIndex][beforeVLineColIndex];\n\t\tif (cellBefore && cellBefore.borderColor) {\n\t\t\tif (cellBefore.border ? cellBefore.border[2] : this.layout.defaultBorder) {\n\t\t\t\tborderColor = cellBefore.borderColor[2];\n\t\t\t}\n\t\t}\n\t}\n\n\t// the current cell\n\tif (borderColor == null && vLineColIndex < body.length) {\n\t\tcurrentCell = body[vLineRowIndex][vLineColIndex];\n\t\tif (currentCell && currentCell.borderColor) {\n\t\t\tif (currentCell.border ? currentCell.border[0] : this.layout.defaultBorder) {\n\t\t\t\tborderColor = currentCell.borderColor[0];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (borderColor == null && cellBefore && cellBefore._rowSpanCurrentOffset) {\n\t\tvar rowCellBeforeAbove = body[vLineRowIndex - cellBefore._rowSpanCurrentOffset][beforeVLineColIndex];\n\t\tif (rowCellBeforeAbove.borderColor) {\n\t\t\tif (rowCellBeforeAbove.border ? rowCellBeforeAbove.border[2] : this.layout.defaultBorder) {\n\t\t\t\tborderColor = rowCellBeforeAbove.borderColor[2];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (borderColor == null && currentCell && currentCell._rowSpanCurrentOffset) {\n\t\tvar rowCurrentCellAbove = body[vLineRowIndex - currentCell._rowSpanCurrentOffset][vLineColIndex];\n\t\tif (rowCurrentCellAbove.borderColor) {\n\t\t\tif (rowCurrentCellAbove.border ? rowCurrentCellAbove.border[2] : this.layout.defaultBorder) {\n\t\t\t\tborderColor = rowCurrentCellAbove.borderColor[2];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (borderColor == null) {\n\t\tborderColor = isFunction(this.layout.vLineColor) ? this.layout.vLineColor(vLineColIndex, this.tableNode, vLineRowIndex) : this.layout.vLineColor;\n\t}\n\twriter.addVector({\n\t\ttype: 'line',\n\t\tx1: x + width / 2,\n\t\tx2: x + width / 2,\n\t\ty1: y0,\n\t\ty2: y1,\n\t\tlineWidth: width,\n\t\tdash: dash,\n\t\tlineColor: borderColor\n\t}, false, true);\n\tcellBefore = null;\n\tcurrentCell = null;\n\tborderColor = null;\n};\n\nTableProcessor.prototype.endTable = function (writer) {\n\tif (this.cleanUpRepeatables) {\n\t\twriter.popFromRepeatables();\n\t}\n};\n\nTableProcessor.prototype.endRow = function (rowIndex, writer, pageBreaks) {\n\tvar l, i;\n\tvar self = this;\n\twriter.tracker.stopTracking('pageChanged', this.rowCallback);\n\twriter.context().moveDown(this.layout.paddingBottom(rowIndex, this.tableNode));\n\twriter.context().availableHeight += this.reservedAtBottom;\n\n\tvar endingPage = writer.context().page;\n\tvar endingY = writer.context().y;\n\n\tvar xs = getLineXs();\n\n\tvar ys = [];\n\n\tvar hasBreaks = pageBreaks && pageBreaks.length > 0;\n\tvar body = this.tableNode.table.body;\n\n\tys.push({\n\t\ty0: this.rowTopY,\n\t\tpage: hasBreaks ? pageBreaks[0].prevPage : endingPage\n\t});\n\n\tif (hasBreaks) {\n\t\tfor (i = 0, l = pageBreaks.length; i < l; i++) {\n\t\t\tvar pageBreak = pageBreaks[i];\n\t\t\tys[ys.length - 1].y1 = pageBreak.prevY;\n\n\t\t\tys.push({ y0: pageBreak.y, page: pageBreak.prevPage + 1 });\n\t\t}\n\t}\n\n\tys[ys.length - 1].y1 = endingY;\n\n\tvar skipOrphanePadding = (ys[0].y1 - ys[0].y0 === this.rowPaddingTop);\n\tfor (var yi = (skipOrphanePadding ? 1 : 0), yl = ys.length; yi < yl; yi++) {\n\t\tvar willBreak = yi < ys.length - 1;\n\t\tvar rowBreakWithoutHeader = (yi > 0 && !this.headerRows);\n\t\tvar hzLineOffset = rowBreakWithoutHeader ? 0 : this.topLineWidth;\n\t\tvar y1 = ys[yi].y0;\n\t\tvar y2 = ys[yi].y1;\n\n\t\tif (willBreak) {\n\t\t\ty2 = y2 + this.rowPaddingBottom;\n\t\t}\n\n\t\tif (writer.context().page != ys[yi].page) {\n\t\t\twriter.context().page = ys[yi].page;\n\n\t\t\t//TODO: buggy, availableHeight should be updated on every pageChanged event\n\t\t\t// TableProcessor should be pageChanged listener, instead of processRow\n\t\t\tthis.reservedAtBottom = 0;\n\t\t}\n\n\t\tfor (i = 0, l = xs.length; i < l; i++) {\n\t\t\tvar leftCellBorder = false;\n\t\t\tvar rightCellBorder = false;\n\t\t\tvar colIndex = xs[i].index;\n\n\t\t\t// current cell\n\t\t\tif (colIndex < body[rowIndex].length) {\n\t\t\t\tvar cell = body[rowIndex][colIndex];\n\t\t\t\tleftCellBorder = cell.border ? cell.border[0] : this.layout.defaultBorder;\n\t\t\t\trightCellBorder = cell.border ? cell.border[2] : this.layout.defaultBorder;\n\t\t\t}\n\n\t\t\t// before cell\n\t\t\tif (colIndex > 0 && !leftCellBorder) {\n\t\t\t\tvar cell = body[rowIndex][colIndex - 1];\n\t\t\t\tleftCellBorder = cell.border ? cell.border[2] : this.layout.defaultBorder;\n\t\t\t}\n\n\t\t\t// after cell\n\t\t\tif (colIndex + 1 < body[rowIndex].length && !rightCellBorder) {\n\t\t\t\tvar cell = body[rowIndex][colIndex + 1];\n\t\t\t\trightCellBorder = cell.border ? cell.border[0] : this.layout.defaultBorder;\n\t\t\t}\n\n\t\t\tif (leftCellBorder) {\n\t\t\t\tthis.drawVerticalLine(xs[i].x, y1 - hzLineOffset, y2 + this.bottomLineWidth, xs[i].index, writer, rowIndex, xs[i - 1] ? xs[i - 1].index : null);\n\t\t\t}\n\n\t\t\tif (i < l - 1) {\n\t\t\t\tvar fillColor = body[rowIndex][colIndex].fillColor;\n\t\t\t\tvar fillOpacity = body[rowIndex][colIndex].fillOpacity;\n\t\t\t\tif (!fillColor) {\n\t\t\t\t\tfillColor = isFunction(this.layout.fillColor) ? this.layout.fillColor(rowIndex, this.tableNode, colIndex) : this.layout.fillColor;\n\t\t\t\t}\n\t\t\t\tif (!isNumber(fillOpacity)) {\n\t\t\t\t\tfillOpacity = isFunction(this.layout.fillOpacity) ? this.layout.fillOpacity(rowIndex, this.tableNode, colIndex) : this.layout.fillOpacity;\n\t\t\t\t}\n\t\t\t\tvar overlayPattern = body[rowIndex][colIndex].overlayPattern;\n\t\t\t\tvar overlayOpacity = body[rowIndex][colIndex].overlayOpacity;\n\t\t\t\tif (fillColor || overlayPattern) {\n\t\t\t\t\tvar widthLeftBorder = leftCellBorder ? this.layout.vLineWidth(colIndex, this.tableNode) : 0;\n\t\t\t\t\tvar widthRightBorder;\n\t\t\t\t\tif ((colIndex === 0 || colIndex + 1 == body[rowIndex].length) && !rightCellBorder) {\n\t\t\t\t\t\twidthRightBorder = this.layout.vLineWidth(colIndex + 1, this.tableNode);\n\t\t\t\t\t} else if (rightCellBorder) {\n\t\t\t\t\t\twidthRightBorder = this.layout.vLineWidth(colIndex + 1, this.tableNode) / 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\twidthRightBorder = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar x1f = this.dontBreakRows ? xs[i].x + widthLeftBorder : xs[i].x + (widthLeftBorder / 2);\n\t\t\t\t\tvar y1f = this.dontBreakRows ? y1 : y1 - (hzLineOffset / 2);\n\t\t\t\t\tvar x2f = xs[i + 1].x + widthRightBorder;\n\t\t\t\t\tvar y2f = this.dontBreakRows ? y2 + this.bottomLineWidth : y2 + (this.bottomLineWidth / 2);\n\t\t\t\t\tvar bgWidth = x2f - x1f;\n\t\t\t\t\tvar bgHeight = y2f - y1f;\n\t\t\t\t\tif (fillColor) {\n\t\t\t\t\t\twriter.addVector({\n\t\t\t\t\t\t\ttype: 'rect',\n\t\t\t\t\t\t\tx: x1f,\n\t\t\t\t\t\t\ty: y1f,\n\t\t\t\t\t\t\tw: bgWidth,\n\t\t\t\t\t\t\th: bgHeight,\n\t\t\t\t\t\t\tlineWidth: 0,\n\t\t\t\t\t\t\tcolor: fillColor,\n\t\t\t\t\t\t\tfillOpacity: fillOpacity\n\t\t\t\t\t\t}, false, true, writer.context().backgroundLength[writer.context().page]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (overlayPattern) {\n\t\t\t\t\t\twriter.addVector({\n\t\t\t\t\t\t\ttype: 'rect',\n\t\t\t\t\t\t\tx: x1f,\n\t\t\t\t\t\t\ty: y1f,\n\t\t\t\t\t\t\tw: bgWidth,\n\t\t\t\t\t\t\th: bgHeight,\n\t\t\t\t\t\t\tlineWidth: 0,\n\t\t\t\t\t\t\tcolor: overlayPattern,\n\t\t\t\t\t\t\tfillOpacity: overlayOpacity\n\t\t\t\t\t\t}, false, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (willBreak && this.layout.hLineWhenBroken !== false) {\n\t\t\tthis.drawHorizontalLine(rowIndex + 1, writer, y2);\n\t\t}\n\t\tif (rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) {\n\t\t\tthis.drawHorizontalLine(rowIndex, writer, y1);\n\t\t}\n\t}\n\n\twriter.context().page = endingPage;\n\twriter.context().y = endingY;\n\n\tvar row = this.tableNode.table.body[rowIndex];\n\tfor (i = 0, l = row.length; i < l; i++) {\n\t\tif (row[i].rowSpan) {\n\t\t\tthis.rowSpanData[i].rowSpan = row[i].rowSpan;\n\n\t\t\t// fix colSpans\n\t\t\tif (row[i].colSpan && row[i].colSpan > 1) {\n\t\t\t\tfor (var j = 1; j < row[i].rowSpan; j++) {\n\t\t\t\t\tthis.tableNode.table.body[rowIndex + j][i]._colSpan = row[i].colSpan;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// fix rowSpans\n\t\t\tif (row[i].rowSpan && row[i].rowSpan > 1) {\n\t\t\t\tfor (var j = 1; j < row[i].rowSpan; j++) {\n\t\t\t\t\tthis.tableNode.table.body[rowIndex + j][i]._rowSpanCurrentOffset = j;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.rowSpanData[i].rowSpan > 0) {\n\t\t\tthis.rowSpanData[i].rowSpan--;\n\t\t}\n\t}\n\n\tthis.drawHorizontalLine(rowIndex + 1, writer);\n\n\tif (this.headerRows && rowIndex === this.headerRows - 1) {\n\t\tthis.headerRepeatable = writer.currentBlockToRepeatable();\n\t}\n\n\tif (this.dontBreakRows) {\n\t\twriter.tracker.auto('pageChanged',\n\t\t\tfunction () {\n\t\t\t\tif (!self.headerRows && self.layout.hLineWhenBroken !== false) {\n\t\t\t\t\tself.drawHorizontalLine(rowIndex, writer);\n\t\t\t\t}\n\t\t\t},\n\t\t\tfunction () {\n\t\t\t\twriter.commitUnbreakableBlock();\n\t\t\t}\n\t\t);\n\t}\n\n\tif (this.headerRepeatable && (rowIndex === (this.rowsWithoutPageBreak - 1) || rowIndex === this.tableNode.table.body.length - 1)) {\n\t\twriter.commitUnbreakableBlock();\n\t\twriter.pushToRepeatables(this.headerRepeatable);\n\t\tthis.cleanUpRepeatables = true;\n\t\tthis.headerRepeatable = null;\n\t}\n\n\tfunction getLineXs() {\n\t\tvar result = [];\n\t\tvar cols = 0;\n\n\t\tfor (var i = 0, l = self.tableNode.table.body[rowIndex].length; i < l; i++) {\n\t\t\tif (!cols) {\n\t\t\t\tresult.push({ x: self.rowSpanData[i].left, index: i });\n\n\t\t\t\tvar item = self.tableNode.table.body[rowIndex][i];\n\t\t\t\tcols = (item._colSpan || item.colSpan || 0);\n\t\t\t}\n\t\t\tif (cols > 0) {\n\t\t\t\tcols--;\n\t\t\t}\n\t\t}\n\n\t\tresult.push({ x: self.rowSpanData[self.rowSpanData.length - 1].left, index: self.rowSpanData.length - 1 });\n\n\t\treturn result;\n\t}\n};\n\nmodule.exports = TableProcessor;\n\n\n/***/ }),\n\n/***/ 3497:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isArray = (__webpack_require__(6225).isArray);\nvar isPattern = (__webpack_require__(6225).isPattern);\nvar getPattern = (__webpack_require__(6225).getPattern);\n\nfunction groupDecorations(line) {\n\tvar groups = [], currentGroup = null;\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\n\t\tvar inline = line.inlines[i];\n\t\tvar decoration = inline.decoration;\n\t\tif (!decoration) {\n\t\t\tcurrentGroup = null;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isArray(decoration)) {\n\t\t\tdecoration = [decoration];\n\t\t}\n\t\tvar color = inline.decorationColor || inline.color || 'black';\n\t\tvar style = inline.decorationStyle || 'solid';\n\t\tfor (var ii = 0, ll = decoration.length; ii < ll; ii++) {\n\t\t\tvar decorationItem = decoration[ii];\n\t\t\tif (!currentGroup || decorationItem !== currentGroup.decoration ||\n\t\t\t\tstyle !== currentGroup.decorationStyle || color !== currentGroup.decorationColor) {\n\n\t\t\t\tcurrentGroup = {\n\t\t\t\t\tline: line,\n\t\t\t\t\tdecoration: decorationItem,\n\t\t\t\t\tdecorationColor: color,\n\t\t\t\t\tdecorationStyle: style,\n\t\t\t\t\tinlines: [inline]\n\t\t\t\t};\n\t\t\t\tgroups.push(currentGroup);\n\t\t\t} else {\n\t\t\t\tcurrentGroup.inlines.push(inline);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn groups;\n}\n\nfunction drawDecoration(group, x, y, pdfKitDoc) {\n\tfunction maxInline() {\n\t\tvar max = 0;\n\t\tfor (var i = 0, l = group.inlines.length; i < l; i++) {\n\t\t\tvar inline = group.inlines[i];\n\t\t\tmax = inline.fontSize > max ? i : max;\n\t\t}\n\t\treturn group.inlines[max];\n\t}\n\tfunction width() {\n\t\tvar sum = 0;\n\t\tfor (var i = 0, l = group.inlines.length; i < l; i++) {\n\t\t\tvar justifyShift = (group.inlines[i].justifyShift || 0);\n\t\t\tsum += group.inlines[i].width + justifyShift;\n\t\t}\n\t\treturn sum;\n\t}\n\tvar firstInline = group.inlines[0],\n\t\tbiggerInline = maxInline(),\n\t\ttotalWidth = width(),\n\t\tlineAscent = group.line.getAscenderHeight(),\n\t\tascent = biggerInline.font.ascender / 1000 * biggerInline.fontSize,\n\t\theight = biggerInline.height,\n\t\tdescent = height - ascent;\n\n\tvar lw = 0.5 + Math.floor(Math.max(biggerInline.fontSize - 8, 0) / 2) * 0.12;\n\n\tswitch (group.decoration) {\n\t\tcase 'underline':\n\t\t\ty += lineAscent + descent * 0.45;\n\t\t\tbreak;\n\t\tcase 'overline':\n\t\t\ty += lineAscent - (ascent * 0.85);\n\t\t\tbreak;\n\t\tcase 'lineThrough':\n\t\t\ty += lineAscent - (ascent * 0.25);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow 'Unkown decoration : ' + group.decoration;\n\t}\n\tpdfKitDoc.save();\n\n\tif (group.decorationStyle === 'double') {\n\t\tvar gap = Math.max(0.5, lw * 2);\n\t\tpdfKitDoc.fillColor(group.decorationColor)\n\t\t\t.rect(x + firstInline.x, y - lw / 2, totalWidth, lw / 2).fill()\n\t\t\t.rect(x + firstInline.x, y + gap - lw / 2, totalWidth, lw / 2).fill();\n\t} else if (group.decorationStyle === 'dashed') {\n\t\tvar nbDashes = Math.ceil(totalWidth / (3.96 + 2.84));\n\t\tvar rdx = x + firstInline.x;\n\t\tpdfKitDoc.rect(rdx, y, totalWidth, lw).clip();\n\t\tpdfKitDoc.fillColor(group.decorationColor);\n\t\tfor (var i = 0; i < nbDashes; i++) {\n\t\t\tpdfKitDoc.rect(rdx, y - lw / 2, 3.96, lw).fill();\n\t\t\trdx += 3.96 + 2.84;\n\t\t}\n\t} else if (group.decorationStyle === 'dotted') {\n\t\tvar nbDots = Math.ceil(totalWidth / (lw * 3));\n\t\tvar rx = x + firstInline.x;\n\t\tpdfKitDoc.rect(rx, y, totalWidth, lw).clip();\n\t\tpdfKitDoc.fillColor(group.decorationColor);\n\t\tfor (var ii = 0; ii < nbDots; ii++) {\n\t\t\tpdfKitDoc.rect(rx, y - lw / 2, lw, lw).fill();\n\t\t\trx += (lw * 3);\n\t\t}\n\t} else if (group.decorationStyle === 'wavy') {\n\t\tvar sh = 0.7, sv = 1;\n\t\tvar nbWaves = Math.ceil(totalWidth / (sh * 2)) + 1;\n\t\tvar rwx = x + firstInline.x - 1;\n\t\tpdfKitDoc.rect(x + firstInline.x, y - sv, totalWidth, y + sv).clip();\n\t\tpdfKitDoc.lineWidth(0.24);\n\t\tpdfKitDoc.moveTo(rwx, y);\n\t\tfor (var iii = 0; iii < nbWaves; iii++) {\n\t\t\tpdfKitDoc.bezierCurveTo(rwx + sh, y - sv, rwx + sh * 2, y - sv, rwx + sh * 3, y)\n\t\t\t\t.bezierCurveTo(rwx + sh * 4, y + sv, rwx + sh * 5, y + sv, rwx + sh * 6, y);\n\t\t\trwx += sh * 6;\n\t\t}\n\t\tpdfKitDoc.stroke(group.decorationColor);\n\t} else {\n\t\tpdfKitDoc.fillColor(group.decorationColor)\n\t\t\t.rect(x + firstInline.x, y - lw / 2, totalWidth, lw)\n\t\t\t.fill();\n\t}\n\tpdfKitDoc.restore();\n}\n\nfunction drawDecorations(line, x, y, pdfKitDoc) {\n\tvar groups = groupDecorations(line);\n\tfor (var i = 0, l = groups.length; i < l; i++) {\n\t\tdrawDecoration(groups[i], x, y, pdfKitDoc);\n\t}\n}\n\nfunction drawBackground(line, x, y, patterns, pdfKitDoc) {\n\tvar height = line.getHeight();\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\n\t\tvar inline = line.inlines[i];\n\t\tif (!inline.background) {\n\t\t\tcontinue;\n\t\t}\n\t\tvar color = inline.background;\n\t\tif (isPattern(inline.background)) {\n\t\t\tcolor = getPattern(inline.background, patterns);\n\t\t}\n\t\tvar justifyShift = (inline.justifyShift || 0);\n\t\tpdfKitDoc.fillColor(color)\n\t\t\t.rect(x + inline.x - justifyShift, y, inline.width + justifyShift, height)\n\t\t\t.fill();\n\t}\n}\n\nmodule.exports = {\n\tdrawBackground: drawBackground,\n\tdrawDecorations: drawDecorations\n};\n\n\n/***/ }),\n\n/***/ 1350:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isString = (__webpack_require__(6225).isString);\nvar isNumber = (__webpack_require__(6225).isNumber);\nvar isObject = (__webpack_require__(6225).isObject);\nvar isArray = (__webpack_require__(6225).isArray);\nvar isUndefined = (__webpack_require__(6225).isUndefined);\nvar LineBreaker = __webpack_require__(7337);\n\nvar LEADING = /^(\\s)+/g;\nvar TRAILING = /(\\s)+$/g;\n\n/**\n * Creates an instance of TextTools - text measurement utility\n *\n * @constructor\n * @param {FontProvider} fontProvider\n */\nfunction TextTools(fontProvider) {\n\tthis.fontProvider = fontProvider;\n}\n\n/**\n * Converts an array of strings (or inline-definition-objects) into a collection\n * of inlines and calculated minWidth/maxWidth.\n * and their min/max widths\n * @param  {Object} textArray - an array of inline-definition-objects (or strings)\n * @param  {Object} styleContextStack current style stack\n * @return {Object}                   collection of inlines, minWidth, maxWidth\n */\nTextTools.prototype.buildInlines = function (textArray, styleContextStack) {\n\tvar measured = measure(this.fontProvider, textArray, styleContextStack);\n\n\tvar minWidth = 0,\n\t\tmaxWidth = 0,\n\t\tcurrentLineWidth;\n\n\tmeasured.forEach(function (inline) {\n\t\tminWidth = Math.max(minWidth, inline.width - inline.leadingCut - inline.trailingCut);\n\n\t\tif (!currentLineWidth) {\n\t\t\tcurrentLineWidth = { width: 0, leadingCut: inline.leadingCut, trailingCut: 0 };\n\t\t}\n\n\t\tcurrentLineWidth.width += inline.width;\n\t\tcurrentLineWidth.trailingCut = inline.trailingCut;\n\n\t\tmaxWidth = Math.max(maxWidth, getTrimmedWidth(currentLineWidth));\n\n\t\tif (inline.lineEnd) {\n\t\t\tcurrentLineWidth = null;\n\t\t}\n\t});\n\n\tif (getStyleProperty({}, styleContextStack, 'noWrap', false)) {\n\t\tminWidth = maxWidth;\n\t}\n\n\treturn {\n\t\titems: measured,\n\t\tminWidth: minWidth,\n\t\tmaxWidth: maxWidth\n\t};\n\n\tfunction getTrimmedWidth(item) {\n\t\treturn Math.max(0, item.width - item.leadingCut - item.trailingCut);\n\t}\n};\n\n/**\n * Returns size of the specified string (without breaking it) using the current style\n * @param  {String} text              text to be measured\n * @param  {Object} styleContextStack current style stack\n * @return {Object}                   size of the specified string\n */\nTextTools.prototype.sizeOfString = function (text, styleContextStack) {\n\ttext = text ? text.toString().replace(/\\t/g, '    ') : '';\n\n\t//TODO: refactor - extract from measure\n\tvar fontName = getStyleProperty({}, styleContextStack, 'font', 'Roboto');\n\tvar fontSize = getStyleProperty({}, styleContextStack, 'fontSize', 12);\n\tvar fontFeatures = getStyleProperty({}, styleContextStack, 'fontFeatures', null);\n\tvar bold = getStyleProperty({}, styleContextStack, 'bold', false);\n\tvar italics = getStyleProperty({}, styleContextStack, 'italics', false);\n\tvar lineHeight = getStyleProperty({}, styleContextStack, 'lineHeight', 1);\n\tvar characterSpacing = getStyleProperty({}, styleContextStack, 'characterSpacing', 0);\n\n\tvar font = this.fontProvider.provideFont(fontName, bold, italics);\n\n\treturn {\n\t\twidth: widthOfString(text, font, fontSize, characterSpacing, fontFeatures),\n\t\theight: font.lineHeight(fontSize) * lineHeight,\n\t\tfontSize: fontSize,\n\t\tlineHeight: lineHeight,\n\t\tascender: font.ascender / 1000 * fontSize,\n\t\tdescender: font.descender / 1000 * fontSize\n\t};\n};\n\n/**\n * Returns size of the specified rotated string (without breaking it) using the current style\n *\n * @param  {string} text text to be measured\n * @param  {number} angle\n * @param  {object} styleContextStack current style stack\n * @returns {object} size of the specified string\n */\nTextTools.prototype.sizeOfRotatedText = function (text, angle, styleContextStack) {\n\tvar angleRad = angle * Math.PI / -180;\n\tvar size = this.sizeOfString(text, styleContextStack);\n\treturn {\n\t\twidth: Math.abs(size.height * Math.sin(angleRad)) + Math.abs(size.width * Math.cos(angleRad)),\n\t\theight: Math.abs(size.width * Math.sin(angleRad)) + Math.abs(size.height * Math.cos(angleRad))\n\t};\n}\n\nTextTools.prototype.widthOfString = function (text, font, fontSize, characterSpacing, fontFeatures) {\n\treturn widthOfString(text, font, fontSize, characterSpacing, fontFeatures);\n};\n\nfunction splitWords(text, noWrap) {\n\tvar results = [];\n\ttext = text.replace(/\\t/g, '    ');\n\n\tif (noWrap) {\n\t\tresults.push({ text: text });\n\t\treturn results;\n\t}\n\n\tvar breaker = new LineBreaker(text);\n\tvar last = 0;\n\tvar bk;\n\n\twhile (bk = breaker.nextBreak()) {\n\t\tvar word = text.slice(last, bk.position);\n\n\t\tif (bk.required || word.match(/\\r?\\n$|\\r$/)) { // new line\n\t\t\tword = word.replace(/\\r?\\n$|\\r$/, '');\n\t\t\tresults.push({ text: word, lineEnd: true });\n\t\t} else {\n\t\t\tresults.push({ text: word });\n\t\t}\n\n\t\tlast = bk.position;\n\t}\n\n\treturn results;\n}\n\nfunction copyStyle(source, destination) {\n\tdestination = destination || {};\n\tsource = source || {}; //TODO: default style\n\n\tfor (var key in source) {\n\t\tif (key != 'text' && source.hasOwnProperty(key)) {\n\t\t\tdestination[key] = source[key];\n\t\t}\n\t}\n\n\treturn destination;\n}\n\nfunction normalizeTextArray(array, styleContextStack) {\n\tfunction flatten(array) {\n\t\treturn array.reduce(function (prev, cur) {\n\t\t\tvar current = isArray(cur.text) ? flatten(cur.text) : cur;\n\t\t\tvar more = [].concat(current).some(Array.isArray);\n\t\t\treturn prev.concat(more ? flatten(current) : current);\n\t\t}, []);\n\t}\n\n\tfunction getOneWord(index, words, noWrap) {\n\t\tif (isUndefined(words[index])) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (words[index].lineEnd) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar word = words[index].text;\n\n\t\tif (noWrap) {\n\t\t\tvar tmpWords = splitWords(normalizeString(word), false);\n\t\t\tif (isUndefined(tmpWords[tmpWords.length - 1])) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tword = tmpWords[tmpWords.length - 1].text;\n\t\t}\n\n\t\treturn word;\n\t}\n\n\tvar results = [];\n\n\tif (!isArray(array)) {\n\t\tarray = [array];\n\t}\n\n\tarray = flatten(array);\n\n\tvar lastWord = null;\n\tfor (var i = 0, l = array.length; i < l; i++) {\n\t\tvar item = array[i];\n\t\tvar style = null;\n\t\tvar words;\n\n\t\tvar noWrap = getStyleProperty(item || {}, styleContextStack, 'noWrap', false);\n\t\tif (isObject(item)) {\n\t\t\tif (item._textRef && item._textRef._textNodeRef.text) {\n\t\t\t\titem.text = item._textRef._textNodeRef.text;\n\t\t\t}\n\t\t\twords = splitWords(normalizeString(item.text), noWrap);\n\t\t\tstyle = copyStyle(item);\n\t\t} else {\n\t\t\twords = splitWords(normalizeString(item), noWrap);\n\t\t}\n\n\t\tif (lastWord && words.length) {\n\t\t\tvar firstWord = getOneWord(0, words, noWrap);\n\n\t\t\tvar wrapWords = splitWords(normalizeString(lastWord + firstWord), false);\n\t\t\tif (wrapWords.length === 1) {\n\t\t\t\tresults[results.length - 1].noNewLine = true;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i2 = 0, l2 = words.length; i2 < l2; i2++) {\n\t\t\tvar result = {\n\t\t\t\ttext: words[i2].text\n\t\t\t};\n\n\t\t\tif (words[i2].lineEnd) {\n\t\t\t\tresult.lineEnd = true;\n\t\t\t}\n\n\t\t\tcopyStyle(style, result);\n\n\t\t\tresults.push(result);\n\t\t}\n\n\t\tlastWord = null;\n\t\tif (i + 1 < l) {\n\t\t\tlastWord = getOneWord(words.length - 1, words, noWrap);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction normalizeString(value) {\n\tif (value === undefined || value === null) {\n\t\treturn '';\n\t} else if (isNumber(value)) {\n\t\treturn value.toString();\n\t} else if (isString(value)) {\n\t\treturn value;\n\t} else {\n\t\treturn value.toString();\n\t}\n}\n\nfunction getStyleProperty(item, styleContextStack, property, defaultValue) {\n\tvar value;\n\n\tif (item[property] !== undefined && item[property] !== null) {\n\t\t// item defines this property\n\t\treturn item[property];\n\t}\n\n\tif (!styleContextStack) {\n\t\treturn defaultValue;\n\t}\n\n\tstyleContextStack.auto(item, function () {\n\t\tvalue = styleContextStack.getProperty(property);\n\t});\n\n\tif (value !== null && value !== undefined) {\n\t\treturn value;\n\t} else {\n\t\treturn defaultValue;\n\t}\n}\n\nfunction measure(fontProvider, textArray, styleContextStack) {\n\tvar normalized = normalizeTextArray(textArray, styleContextStack);\n\n\tif (normalized.length) {\n\t\tvar leadingIndent = getStyleProperty(normalized[0], styleContextStack, 'leadingIndent', 0);\n\n\t\tif (leadingIndent) {\n\t\t\tnormalized[0].leadingCut = -leadingIndent;\n\t\t\tnormalized[0].leadingIndent = leadingIndent;\n\t\t}\n\t}\n\n\tnormalized.forEach(function (item) {\n\t\tvar fontName = getStyleProperty(item, styleContextStack, 'font', 'Roboto');\n\t\tvar fontSize = getStyleProperty(item, styleContextStack, 'fontSize', 12);\n\t\tvar fontFeatures = getStyleProperty(item, styleContextStack, 'fontFeatures', null);\n\t\tvar bold = getStyleProperty(item, styleContextStack, 'bold', false);\n\t\tvar italics = getStyleProperty(item, styleContextStack, 'italics', false);\n\t\tvar color = getStyleProperty(item, styleContextStack, 'color', 'black');\n\t\tvar decoration = getStyleProperty(item, styleContextStack, 'decoration', null);\n\t\tvar decorationColor = getStyleProperty(item, styleContextStack, 'decorationColor', null);\n\t\tvar decorationStyle = getStyleProperty(item, styleContextStack, 'decorationStyle', null);\n\t\tvar background = getStyleProperty(item, styleContextStack, 'background', null);\n\t\tvar lineHeight = getStyleProperty(item, styleContextStack, 'lineHeight', 1);\n\t\tvar characterSpacing = getStyleProperty(item, styleContextStack, 'characterSpacing', 0);\n\t\tvar link = getStyleProperty(item, styleContextStack, 'link', null);\n\t\tvar linkToPage = getStyleProperty(item, styleContextStack, 'linkToPage', null);\n\t\tvar linkToDestination = getStyleProperty(item, styleContextStack, 'linkToDestination', null);\n\t\tvar noWrap = getStyleProperty(item, styleContextStack, 'noWrap', null);\n\t\tvar preserveLeadingSpaces = getStyleProperty(item, styleContextStack, 'preserveLeadingSpaces', false);\n\t\tvar preserveTrailingSpaces = getStyleProperty(item, styleContextStack, 'preserveTrailingSpaces', false);\n\t\tvar opacity = getStyleProperty(item, styleContextStack, 'opacity', 1);\n\t\tvar sup = getStyleProperty(item, styleContextStack, 'sup', false);\n\t\tvar sub = getStyleProperty(item, styleContextStack, 'sub', false);\n\n\t\tif ((sup || sub) && item.fontSize === undefined) {\n\t\t\t// font size reduction taken from here: https://en.wikipedia.org/wiki/Subscript_and_superscript#Desktop_publishing\n\t\t\tfontSize *= 0.58\n\t\t}\n\n\t\tvar font = fontProvider.provideFont(fontName, bold, italics);\n\n\t\titem.width = widthOfString(item.text, font, fontSize, characterSpacing, fontFeatures);\n\t\titem.height = font.lineHeight(fontSize) * lineHeight;\n\n\t\tif (!item.leadingCut) {\n\t\t\titem.leadingCut = 0;\n\t\t}\n\n\t\tvar leadingSpaces;\n\t\tif (!preserveLeadingSpaces && (leadingSpaces = item.text.match(LEADING))) {\n\t\t\titem.leadingCut += widthOfString(leadingSpaces[0], font, fontSize, characterSpacing, fontFeatures);\n\t\t}\n\n\t\tvar trailingSpaces;\n\t\tif (!preserveTrailingSpaces && (trailingSpaces = item.text.match(TRAILING))) {\n\t\t\titem.trailingCut = widthOfString(trailingSpaces[0], font, fontSize, characterSpacing, fontFeatures);\n\t\t} else {\n\t\t\titem.trailingCut = 0;\n\t\t}\n\n\t\titem.alignment = getStyleProperty(item, styleContextStack, 'alignment', 'left');\n\t\titem.font = font;\n\t\titem.fontSize = fontSize;\n\t\titem.fontFeatures = fontFeatures;\n\t\titem.characterSpacing = characterSpacing;\n\t\titem.color = color;\n\t\titem.decoration = decoration;\n\t\titem.decorationColor = decorationColor;\n\t\titem.decorationStyle = decorationStyle;\n\t\titem.background = background;\n\t\titem.link = link;\n\t\titem.linkToPage = linkToPage;\n\t\titem.linkToDestination = linkToDestination;\n\t\titem.noWrap = noWrap;\n\t\titem.opacity = opacity;\n\t\titem.sup = sup;\n\t\titem.sub = sub;\n\t});\n\n\treturn normalized;\n}\n\nfunction widthOfString(text, font, fontSize, characterSpacing, fontFeatures) {\n\treturn font.widthOfString(text, fontSize, fontFeatures) + ((characterSpacing || 0) * (text.length - 1));\n}\n\nmodule.exports = TextTools;\n\n\n/***/ }),\n\n/***/ 8537:\n/***/ (function(module) {\n\n\"use strict\";\n\n\nfunction TraversalTracker() {\n\tthis.events = {};\n}\n\nTraversalTracker.prototype.startTracking = function (event, callback) {\n\tvar callbacks = this.events[event] || (this.events[event] = []);\n\n\tif (callbacks.indexOf(callback) < 0) {\n\t\tcallbacks.push(callback);\n\t}\n};\n\nTraversalTracker.prototype.stopTracking = function (event, callback) {\n\tvar callbacks = this.events[event];\n\n\tif (!callbacks) {\n\t\treturn;\n\t}\n\n\tvar index = callbacks.indexOf(callback);\n\tif (index >= 0) {\n\t\tcallbacks.splice(index, 1);\n\t}\n};\n\nTraversalTracker.prototype.emit = function (event) {\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\tvar callbacks = this.events[event];\n\n\tif (!callbacks) {\n\t\treturn;\n\t}\n\n\tcallbacks.forEach(function (callback) {\n\t\tcallback.apply(this, args);\n\t});\n};\n\nTraversalTracker.prototype.auto = function (event, callback, innerFunction) {\n\tthis.startTracking(event, callback);\n\tinnerFunction();\n\tthis.stopTracking(event, callback);\n};\n\nmodule.exports = TraversalTracker;\n\n\n/***/ }),\n\n/***/ 2480:\n/***/ (function() {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 5832:\n/***/ (function() {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 9862:\n/***/ (function() {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 964:\n/***/ (function() {\n\n/* (ignored) */\n\n/***/ }),\n\n/***/ 3083:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n\n\n/***/ }),\n\n/***/ 3631:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar $c5L0i$base64js = __webpack_require__(9742);\nvar $c5L0i$unicodetrie = __webpack_require__(4781);\n\nfunction $parcel$interopDefault(a) {\n  return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n  Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"getCategory\", () => $43d7963e56408b24$export$410364bbb673ddbc);\n$parcel$export(module.exports, \"getCombiningClass\", () => $43d7963e56408b24$export$c03b919c6651ed55);\n$parcel$export(module.exports, \"getScript\", () => $43d7963e56408b24$export$941569448d136665);\n$parcel$export(module.exports, \"getEastAsianWidth\", () => $43d7963e56408b24$export$92f6187db8ca6d26);\n$parcel$export(module.exports, \"getNumericValue\", () => $43d7963e56408b24$export$7d1258ebb7625a0d);\n$parcel$export(module.exports, \"isAlphabetic\", () => $43d7963e56408b24$export$52c8ea63abd07594);\n$parcel$export(module.exports, \"isDigit\", () => $43d7963e56408b24$export$727d9dbc4fbb948f);\n$parcel$export(module.exports, \"isPunctuation\", () => $43d7963e56408b24$export$a5b49f4dc6a07d2c);\n$parcel$export(module.exports, \"isLowerCase\", () => $43d7963e56408b24$export$7b6804e8df61fcf5);\n$parcel$export(module.exports, \"isUpperCase\", () => $43d7963e56408b24$export$aebd617640818cda);\n$parcel$export(module.exports, \"isTitleCase\", () => $43d7963e56408b24$export$de8b4ee23b2cf823);\n$parcel$export(module.exports, \"isWhiteSpace\", () => $43d7963e56408b24$export$3c52dd84024ae72c);\n$parcel$export(module.exports, \"isBaseForm\", () => $43d7963e56408b24$export$a11bdcffe109e74b);\n$parcel$export(module.exports, \"isMark\", () => $43d7963e56408b24$export$e33ad6871e762338);\n$parcel$export(module.exports, \"default\", () => $43d7963e56408b24$export$2e2bcd8739ae039);\n\n\nvar $29668e65f2091c2c$exports = {};\n$29668e65f2091c2c$exports = JSON.parse('{\"categories\":[\"Cc\",\"Zs\",\"Po\",\"Sc\",\"Ps\",\"Pe\",\"Sm\",\"Pd\",\"Nd\",\"Lu\",\"Sk\",\"Pc\",\"Ll\",\"So\",\"Lo\",\"Pi\",\"Cf\",\"No\",\"Pf\",\"Lt\",\"Lm\",\"Mn\",\"Me\",\"Mc\",\"Nl\",\"Zl\",\"Zp\",\"Cs\",\"Co\"],\"combiningClasses\":[\"Not_Reordered\",\"Above\",\"Above_Right\",\"Below\",\"Attached_Above_Right\",\"Attached_Below\",\"Overlay\",\"Iota_Subscript\",\"Double_Below\",\"Double_Above\",\"Below_Right\",\"Above_Left\",\"CCC10\",\"CCC11\",\"CCC12\",\"CCC13\",\"CCC14\",\"CCC15\",\"CCC16\",\"CCC17\",\"CCC18\",\"CCC19\",\"CCC20\",\"CCC21\",\"CCC22\",\"CCC23\",\"CCC24\",\"CCC25\",\"CCC30\",\"CCC31\",\"CCC32\",\"CCC27\",\"CCC28\",\"CCC29\",\"CCC33\",\"CCC34\",\"CCC35\",\"CCC36\",\"Nukta\",\"Virama\",\"CCC84\",\"CCC91\",\"CCC103\",\"CCC107\",\"CCC118\",\"CCC122\",\"CCC129\",\"CCC130\",\"CCC132\",\"Attached_Above\",\"Below_Left\",\"Left\",\"Kana_Voicing\",\"CCC26\",\"Right\"],\"scripts\":[\"Common\",\"Latin\",\"Bopomofo\",\"Inherited\",\"Greek\",\"Coptic\",\"Cyrillic\",\"Armenian\",\"Hebrew\",\"Arabic\",\"Syriac\",\"Thaana\",\"Nko\",\"Samaritan\",\"Mandaic\",\"Devanagari\",\"Bengali\",\"Gurmukhi\",\"Gujarati\",\"Oriya\",\"Tamil\",\"Telugu\",\"Kannada\",\"Malayalam\",\"Sinhala\",\"Thai\",\"Lao\",\"Tibetan\",\"Myanmar\",\"Georgian\",\"Hangul\",\"Ethiopic\",\"Cherokee\",\"Canadian_Aboriginal\",\"Ogham\",\"Runic\",\"Tagalog\",\"Hanunoo\",\"Buhid\",\"Tagbanwa\",\"Khmer\",\"Mongolian\",\"Limbu\",\"Tai_Le\",\"New_Tai_Lue\",\"Buginese\",\"Tai_Tham\",\"Balinese\",\"Sundanese\",\"Batak\",\"Lepcha\",\"Ol_Chiki\",\"Braille\",\"Glagolitic\",\"Tifinagh\",\"Han\",\"Hiragana\",\"Katakana\",\"Yi\",\"Lisu\",\"Vai\",\"Bamum\",\"Syloti_Nagri\",\"Phags_Pa\",\"Saurashtra\",\"Kayah_Li\",\"Rejang\",\"Javanese\",\"Cham\",\"Tai_Viet\",\"Meetei_Mayek\",\"null\",\"Linear_B\",\"Lycian\",\"Carian\",\"Old_Italic\",\"Gothic\",\"Old_Permic\",\"Ugaritic\",\"Old_Persian\",\"Deseret\",\"Shavian\",\"Osmanya\",\"Osage\",\"Elbasan\",\"Caucasian_Albanian\",\"Linear_A\",\"Cypriot\",\"Imperial_Aramaic\",\"Palmyrene\",\"Nabataean\",\"Hatran\",\"Phoenician\",\"Lydian\",\"Meroitic_Hieroglyphs\",\"Meroitic_Cursive\",\"Kharoshthi\",\"Old_South_Arabian\",\"Old_North_Arabian\",\"Manichaean\",\"Avestan\",\"Inscriptional_Parthian\",\"Inscriptional_Pahlavi\",\"Psalter_Pahlavi\",\"Old_Turkic\",\"Old_Hungarian\",\"Hanifi_Rohingya\",\"Old_Sogdian\",\"Sogdian\",\"Elymaic\",\"Brahmi\",\"Kaithi\",\"Sora_Sompeng\",\"Chakma\",\"Mahajani\",\"Sharada\",\"Khojki\",\"Multani\",\"Khudawadi\",\"Grantha\",\"Newa\",\"Tirhuta\",\"Siddham\",\"Modi\",\"Takri\",\"Ahom\",\"Dogra\",\"Warang_Citi\",\"Nandinagari\",\"Zanabazar_Square\",\"Soyombo\",\"Pau_Cin_Hau\",\"Bhaiksuki\",\"Marchen\",\"Masaram_Gondi\",\"Gunjala_Gondi\",\"Makasar\",\"Cuneiform\",\"Egyptian_Hieroglyphs\",\"Anatolian_Hieroglyphs\",\"Mro\",\"Bassa_Vah\",\"Pahawh_Hmong\",\"Medefaidrin\",\"Miao\",\"Tangut\",\"Nushu\",\"Duployan\",\"SignWriting\",\"Nyiakeng_Puachue_Hmong\",\"Wancho\",\"Mende_Kikakui\",\"Adlam\"],\"eaw\":[\"N\",\"Na\",\"A\",\"W\",\"H\",\"F\"]}');\n\n\nconst $43d7963e56408b24$var$trie = new (0, ($parcel$interopDefault($c5L0i$unicodetrie)))((0, ($parcel$interopDefault($c5L0i$base64js))).toByteArray(\"AAARAAAAAADwfAEAZXl5ONRt+/5bPVFZimRfKoTQJNm37CGE7Iw0j3UsTWKsoyI7kwyyTiEUzSD7NiEzhWYijH0wMVkHE4Mx49fzfo+3nuP4/fdZjvv+XNd5n/d9nef1WZvmKhTxiZndzDQBSEYQqxqKwnsKvGQucFh+6t6cJ792ePQBZv5S9yXSwkyjf/P4T7mTNnIAv1dOVhMlR9lflbUL9JeJguqsjvG9NTj/wLb566VAURnLo2vvRi89S3gW/33ihh2eXpDn40BIW7REl/7coRKIhAFlAiOtbLDTt6mMb4GzMF1gNnvX/sBxtbsAIjfztCNcQjcNDtLThRvuXu5M5g/CBjaLBE4lJm4qy/oZD97+IJryApcXfgWYlkvWbhfXgujOJKVu8B+ozqTLbxyJ5kNiR75CxDqfBM9eOlDMmGeoZ0iQbbS5VUplIwI+ZNXEKQVJxlwqjhOY7w3XwPesbLK5JZE+Tt4X8q8km0dzInsPPzbscrjBMVjF5mOHSeRdJVgKUjLTHiHqXSPkep8N/zFk8167KLp75f6RndkvzdfB6Uz3MmqvRArzdCbs1/iRZjYPLLF3U8Qs+H+Rb8iK51a6NIV2V9+07uJsTGFWpPz8J++7iRu2B6eAKlK/kujrLthwaD/7a6J5w90TusnH1JMAc+gNrql4aspOUG/RrsxUKmPzhHgP4Bleru+6Vfc/MBjgXVx7who94nPn7MPFrnwQP7g0k0Dq0h2GSKO6fTZ8nLodN1SiOUj/5EL/Xo1DBvRm0wmrh3x6phcJ20/9CuMr5h8WPqXMSasLoLHoufTmE7mzYrs6B0dY7KjuCogKqsvxnxAwXWvd9Puc9PnE8DOHT2INHxRlIyVHrqZahtfV2E/A2PDdtA3ewlRHMtFIBKO/T4IozWTQZ+mb+gdKuk/ZHrqloucKdsOSJmlWTSntWjcxVMjUmroXLM10I6TwDLnBq4LP69TxgVeyGsd8yHvhF8ydPlrNRSNs9EP7WmeuSE7Lu10JbOuQcJw/63sDp68wB9iwP5AO+mBpV0R5VDDeyQUFCel1G+4KHBgEVFS0YK+m2sXLWLuGTlkVAd97WwKKdacjWElRCuDRauf33l/yVcDF6sVPKeTes99FC1NpNWcpieGSV/IbO8PCTy5pbUR1U8lxzf4T+y6fZMxOz3LshkQLeeDSd0WmUrQgajmbktrxsb2AZ0ACw2Vgni+gV/m+KvCRWLg08Clx7uhql+v9XySGcjjOHlsp8vBw/e8HS7dtiqF6T/XcSXuaMW66GF1g4q9YyBadHqy3Y5jin1c7yZos6BBr6dsomSHxiUHanYtcYQwnMMZhRhOnaYJeyJzaRuukyCUh48+e/BUvk/aEfDp8ag+jD64BHxNnQ5v/E7WRk7eLjGV13I3oqy45YNONi/1op1oDr7rPjkhPsTXgUpQtGDPlIs55KhQaic9kSGs/UrZ2QKQOflB8MTEQxRF9pullToWO7Eplan6mcMRFnUu2441yxi23x+KqKlr7RWWsi9ZXMWlr8vfP3llk1m2PRj0yudccxBuoa7VfIgRmnFPGX6Pm1WIfMm/Rm4n/xTn8IGqA0GWuqgu48pEUO0U9nN+ZdIvFpPb7VDPphIfRZxznlHeVFebkd9l+raXy9BpTMcIUIvBfgHEb6ndGo8VUkxpief14KjzFOcaANfgvFpvyY8lE8lE4raHizLpluPzMks1hx/e1Hok5yV0p7qQH7GaYeMzzZTFvRpv6k6iaJ4yNqzBvN8J7B430h2wFm1IBPcqbou33G7/NWPgopl4Mllla6e24L3TOTVNkza2zv3QKuDWTeDpClCEYgTQ+5vEBSQZs/rMF50+sm4jofTgWLqgX1x3TkrDEVaRqfY/xZizFZ3Y8/DFEFD31VSfBQ5raEB6nHnZh6ddehtclQJ8fBrldyIh99LNnV32HzKEej04hk6SYjdauCa4aYW0ru/QxvQRGzLKOAQszf3ixJypTW3WWL6BLSF2EMCMIw7OUvWBC6A/gDc2D1jvBapMCc7ztx6jYczwTKsRLL6dMNXb83HS8kdD0pTMMj161zbVHkU0mhSHo9SlBDDXdN6hDvRGizmohtIyR3ot8tF5iUG4GLNcXeGvBudSFrHu+bVZb9jirNVG+rQPI51A7Hu8/b0UeaIaZ4UgDO68PkYx3PE2HWpKapJ764Kxt5TFYpywMy4DLQqVRy11I7SOLhxUFmqiEK52NaijWArIfCg6qG8q5eSiwRCJb1R7GDJG74TrYgx/lVq7w9++Kh929xSJEaoSse5fUOQg9nMAnIZv+7fwVRcNv3gOHI46Vb5jYUC66PYHO6lS+TOmvEQjuYmx4RkffYGxqZIp/DPWNHAixbRBc+XKE3JEOgs4jIwu/dSAwhydruOGF39co91aTs85JJ3Z/LpXoF43hUwJsb/M1Chzdn8HX8vLXnqWUKvRhNLpfAF4PTFqva1sBQG0J+59HyYfmQ3oa4/sxZdapVLlo/fooxSXi/dOEQWIWq8E0FkttEyTFXR2aNMPINMIzZwCNEheYTVltsdaLkMyKoEUluPNAYCM2IG3br0DLy0fVNWKHtbSKbBjfiw7Lu06gQFalC7RC9BwRMSpLYDUo9pDtDfzwUiPJKLJ2LGcSphWBadOI/iJjNqUHV7ucG8yC6+iNM9QYElqBR7ECFXrcTgWQ3eG/tCWacT9bxIkfmxPmi3vOd36KxihAJA73vWNJ+Y9oapXNscVSVqS5g15xOWND/WuUCcA9YAAg6WFbjHamrblZ5c0L6Zx1X58ZittGcfDKU697QRSqW/g+RofNRyvrWMrBn44cPvkRe2HdTu/Cq01C5/riWPHZyXPKHuSDDdW8c1XPgd6ogvLh20qEIu8c19sqr4ufyHrwh37ZN5MkvY1dsGmEz9pUBTxWrvvhNyODyX2Q1k/fbX/T/vbHNcBrmjgDtvBdtZrVtiIg5iXQuzO/DEMvRX8Mi1zymSlt92BGILeKItjoShJXE/H7xwnf0Iewb8BFieJ9MflEBCQYEDm8eZniiEPfGoaYiiEdhQxHQNr2AuRdmbL9mcl18Kumh+HEZLp6z+j35ML9zTbUwahUZCyQQOgQrGfdfQtaR/OYJ/9dYXb2TWZFMijfCA8Nov4sa5FFDUe1T68h4q08WDE7JbbDiej4utRMR9ontevxlXv6LuJTXt1YEv8bDzEt683PuSsIN0afvu0rcBu9AbXZbkOG3K3AhtqQ28N23lXm7S3Yn6KXmAhBhz+GeorJJ4XxO/b3vZk2LXp42+QvsVxGSNVpfSctIFMTR1bD9t70i6sfNF3WKz/uKDEDCpzzztwhL45lsw89H2IpWN10sXHRlhDse9KCdpP5qNNpU84cTY+aiqswqR8XZ9ea0KbVRwRuOGQU3csAtV2fSbnq47U6es6rKlWLWhg3s/B9C9g+oTyp6RtIldR51OOkP5/6nSy6itUVPcMNOp4M/hDdKOz3uK6srbdxOrc2cJgr1Sg02oBxxSky6V7JaG+ziNwlfqnjnvh2/uq1lKfbp+qpwq/D/5OI5gkFl5CejKGxfc2YVJfGqc4E0x5e9PHK2ukbHNI7/RZV6LNe65apbTGjoCaQls0txPPbmQbCQn+/upCoXRZy9yzorWJvZ0KWcbXlBxU/d5I4ERUTxMuVWhSMmF677LNN7NnLwsmKawXkCgbrpcluOl0WChR1qhtSrxGXHu251dEItYhYX3snvn1gS2uXuzdTxCJjZtjsip0iT2sDC0qMS7Bk9su2NyXjFK5/f5ZoWwofg3DtTyjaFqspnOOTSh8xK/CKUFS57guVEkw9xoQuRCwwEO9Lu9z2vYxSa9NFV8DvSxv2C4WYLYF8Nrc4DzWkzNsk81JJOlZ/LYJrGCoj4MmZpnf3AXmzxT4rtl9jsqljEyedz468SGKdBiQzyz/qWKEhFg45ZczlZZ3KGL3l6sn+3TTa3zMVMhPa1obGp/z+fvY0QXTrJTf1XAT3EtQdUfYYlmWZyvPZ/6rWwU7UOQei7pVE0osgN94Iy+T1+omE6z4Rh2O20FjgBeK2y1mcoFiMDOJvuZPn5Moy9fmFH3wyfKvn4+TwfLvt/lHTTVnvrtoUWRBiQXhiNM8nE6ZoWeux/Z0b2unRcdUzdDpmL7CAgd1ToRXwgmHTZOgiGtVT+xr1QH9ObebRTT4NzL+XSpLuuWp62GqQvJVTPoZOeJCb6gIwd9XHMftQ+Kc08IKKdKQANSJ1a2gve3JdRhO0+tNiYzWAZfd7isoeBu67W7xuK8WX7nhJURld98Inb0t/dWOSau/kDvV4DJo/cImw9AO2Gvq0F2n0M7yIZKL8amMbjYld+qFls7hq8Acvq97K2PrCaomuUiesu7qNanGupEl6J/iem8lyr/NMnsTr6o41PO0yhQh3hPFN0wJP7S830je9iTBLzUNgYH+gUZpROo3rN2qgCI+6GewpX8w8CH+ro6QrWiStqmcMzVa3vEel+3/dDxMp0rDv1Q6wTMS3K64zTT6RWzK1y643im25Ja7X2ePCV2mTswd/4jshZPo4bLnerqIosq/hy2bKUAmVn9n4oun1+a0DIZ56UhVwmZHdUNpLa8gmPvxS1eNvCF1T0wo1wKPdCJi0qOrWz7oYRTzgTtkzEzZn308XSLwUog4OWGKJzCn/3FfF9iA32dZHSv30pRCM3KBY9WZoRhtdK/ChHk6DEQBsfV6tN2o1Cn0mLtPBfnkS+qy1L2xfFe9TQPtDE1Be44RTl82E9hPT2rS2+93LFbzhQQO3C/hD2jRFH3BWWbasAfuMhRJFcTri73eE835y016s22DjoFJ862WvLj69fu2TgSF3RHia9D5DSitlQAXYCnbdqjPkR287Lh6dCHDapos+eFDvcZPP2edPmTFxznJE/EBLoQQ0Qmn9EkZOyJmHxMbvKYb8o21ZHmv5YLqgsEPk9gWZwYQY9wLqGXuax/8QlV5qDaPbq9pLPT1yp+zOWKmraEy1OUJI7zdEcEmvBpbdwLrDCgEb2xX8S/nxZgjK4bRi+pbOmbh8bEeoPvU/L9ndx9kntlDALbdAvp0O8ZC3zSUnFg4cePsw7jxewWvL7HRSBLUn6J7vTH9uld5N76JFPgBCdXGF221oEJk++XfRwXplLSyrVO7HFWBEs99nTazKveW3HpbD4dH/YmdAl+lwbSt8BQWyTG7jAsACI7bPPUU9hI9XUHWqQOuezHzUjnx5Qqs6T1qNHfTTHleDtmqK7flA9a0gz2nycIpz1FHBuWxKNtUeTdqP29Fb3tv+tl5JyBqXoR+vCsdzZwZUhf6Lu8bvkB9yQP4x7GGegB0ym0Lpl03Q7e+C0cDsm9GSDepCDji7nUslLyYyluPfvLyKaDSX4xpR+nVYQjQQn5F8KbY1gbIVLiK1J3mW90zTyR1bqApX2BlWh7KG8LAY9/S9nWC0XXh9pZZo6xuir12T43rkaGfQssbQyIslA7uJnSHOV22NhlNtUo0czxPAsXhh8tIQYaTM4l/yAlZlydTcXhlG22Gs/n3BxKBd/3ZjYwg3NaUurVXhNB+afVnFfNr9TbC9ksNdvwpNfeHanyJ8M6GrIVfLlYAPv0ILe4dn0Z+BJSbJkN7eZY/c6+6ttDYcIDeUKIDXqUSE42Xdh5nRbuaObozjht0HJ5H1e+em+NJi/+8kQlyjCbJpPckwThZeIF9/u7lrVIKNeJLCN/TpPAeXxvd31/CUDWHK9MuP1V1TJgngzi4V0qzS3SW3Qy5UiGHqg02wQa5tsEl9s/X9nNMosgLlUgZSfCBj1DiypLfhr9/r0nR0XY2tmhDOcUS4E7cqa4EJBhzqvpbZa35Q5Iz5EqmhYiOGDAYk606Tv74+KGfPjKVuP15rIzgW0I7/niOu9el/sn2bRye0gV+GrePDRDMHjwO1lEdeXH8N+UTO3IoN18kpI3tPxz+fY+n2MGMSGFHAx/83tKeJOl+2i+f1O9v6FfEDBbqrw+lpM8Anav7zHNr7hE78nXUtPNodMbCnITWA7Ma/IHlZ50F9hWge/wzOvSbtqFVFtkS8Of2nssjZwbSFdU+VO8z6tCEc9UA9ACxT5zIUeSrkBB/v1krOpm7bVMrGxEKfI6LcnpB4D8bvn2hDKGqKrJaVAJuDaBEY3F7eXyqnFWlOoFV/8ZLspZiZd7orXLhd4mhHQgbuKbHjJWUzrnm0Dxw/LJLzXCkh7slMxKo8uxZIWZfdKHlfI7uj3LP6ARAuWdF7ZmZ7daOKqKGbz5LxOggTgS39oEioYmrqkCeUDvbxkBYKeHhcLmMN8dMF01ZMb32IpL/cH8R7VHQSI5I0YfL14g9d7P/6cjB1JXXxbozEDbsrPdmL8ph7QW10jio+v7YsqHKQ6xrBbOVtxU0/nFfzUGZwIBLwyUvg49ii+54nv9FyECBpURnQK4Ox6N7lw5fsjdd5l/2SwBcAHMJoyjO1Pifye2dagaOwCVMqdJWAo77pvBe0zdJcTWu5fdzPNfV2p1pc7/JKQ8zhKkwsOELUDhXygPJ5oR8Vpk2lsCen3D3QOQp2zdrSZHjVBstDF/wWO98rrkQ6/7zt/Drip7OHIug1lomNdmRaHRrjmqeodn22sesQQPgzimPOMqC60a5+i/UYh51uZm+ijWkkaI2xjrBO2558DZNZMiuDQlaVAvBy2wLn/bR3FrNzfnO/9oDztYqxZrr7JMIhqmrochbqmQnKowxW29bpqTaJu7kW1VotC72QkYX8OoDDdMDwV1kJRk3mufgJBzf+iwFRJ7XWQwO5ujVglgFgHtycWiMLx5N+6XU+TulLabWjOzoao03fniUW0xvIJNPbk7CQlFZd/RCOPvgQbLjh5ITE8NVJeKt3HGr6JTnFdIzcVOlEtwqbIIX0IM7saC+4N5047MTJ9+Wn11EhyEPIlwsHE5utCeXRjQzlrR+R1Cf/qDzcNbqLXdk3J7gQ39VUrrEkS/VMWjjg+t2oYrqB0tUZClcUF6+LBC3EQ7KnGIwm/qjZX4GKPtjTX1zQKV6nPAb2t/Rza5IqKRf8i2DFEhV/YSifX0YwsiF6TQnp48Gr65TFq0zUe6LGjiY7fq0LSGKL1VnC6ESI2yxvt3XqBx53B3gSlGFeJcPbUbonW1E9E9m4NfuwPh+t5QjRxX34lvBPVxwQd7aeTd+r9dw5CiP1pt8wMZoMdni7GapYdo6KPgeQKcmlFfq4UYhvV0IBgeiR3RnTMBaqDqpZrTRyLdsp4l0IXZTdErfH0sN3dqBG5vRIx3VgCYcHmmkqJ8Hyu3s9K9uBD1d8cZUEx3qYcF5vsqeRpF1GOg8emeWM2OmBlWPdZ6qAXwm3nENFyh+kvXk132PfWAlN0kb7yh4fz2T7VWUY/hEXX5DvxGABC03XRpyOG8t/u3Gh5tZdpsSV9AWaxJN7zwhVglgII1gV28tUViyqn4UMdIh5t+Ea2zo7PO48oba0TwQbiSZOH4YhD578kPF3reuaP7LujPMsjHmaDuId9XEaZBCJhbXJbRg5VCk3KJpryH/+8S3wdhR47pdFcmpZG2p0Bpjp/VbvalgIZMllYX5L31aMPdt1J7r/7wbixt0Mnz2ZvNGTARHPVD+2O1D8SGpWXlVnP2ekgon55YiinADDynyaXtZDXueVqbuTi8z8cHHK325pgqM+mWZwzHeEreMvhZopAScXM14SJHpGwZyRljMlDvcMm9FZ/1e9+r/puOnpXOtc9Iu2fmgBfEP9cGW1Fzb1rGlfJ08pACtq1ZW18bf2cevebzVeHbaA50G9qoUp39JWdPHbYkPCRXjt4gzlq3Cxge28Mky8MoS/+On72kc+ZI2xBtgJytpAQHQ1zrEddMIVyR5urX6yBNu8v5lKC8eLdGKTJtbgIZ3ZyTzSfWmx9f+cvcJe8yM39K/djkp2aUTE/9m2Lj5jg7b8vdRAer7DO3SyLNHs1CAm5x5iAdh2yGJYivArZbCBNY88Tw+w+C1Tbt7wK3zl2rzTHo/D8/gb3c3mYrnEIEipYqPUcdWjnTsSw471O3EUN7Gtg4NOAs9PJrxm03VuZKa5xwXAYCjt7Gs01Km6T2DhOYUMoFcCSu7Hk1p3yP1eG+M3v3Q5luAze6WwBnZIYO0TCucPWK+UJ36KoJ8Y+vpavhLO8g5ed704IjlQdfemrMu//EvPYXTQSGIPPfiagJS9nMqP5IvkxN9pvuJz7h8carPXTKMq8jnTeL0STan6dnLTAqwIswcIwWDR2KwbGddAVN8SYWRB7kfBfBRkSXzvHlIF8D6jo64kUzYk5o/n8oLjKqat0rdXvQ86MkwQGMnnlcasqPPT2+mVtUGb32KuH6cyZQenrRG11TArcAl27+nvOMBDe++EKHf4YdyGf7mznzOz33cFFGEcv329p4qG2hoaQ8ULiMyVz6ENcxhoqGnFIdupcn7GICQWuw3yO3W8S33mzCcMYJ8ywc7U7rmaQf/W5K63Gr4bVTpXOyOp4tbaPyIaatBNpXqlmQUTSZXjxPr19+73PSaT+QnI35YsWn6WpfJjRtK8vlJZoTSgjaRU39AGCkWOZtifJrnefCrqwTKDFmuWUCukEsYcRrMzCoit28wYpP7kSVjMD8WJYQiNc2blMjuqYegmf6SsfC1jqz8XzghMlOX+gn/MKZmgljszrmehEa4V98VreJDxYvHr3j7IeJB9/sBZV41BWT/AZAjuC5XorlIPnZgBAniBEhanp0/0+qZmEWDpu8ige1hUPIyTo6T6gDEcFhWSoduNh8YSu65KgMOGBw7VlNYzNIgwHtq9KP2yyTVysqX5v12sf7D+vQUdR2dRDvCV40rIInXSLWT/yrC6ExOQxBJwIDbeZcl3z1yR5Rj3l8IGpxspapnvBL+fwupA3b6fkFceID9wgiM1ILB0cHVdvo/R4xg8yqKXT8efl0GnGX1/27FUYeUW2L/GNRGGWVGp3i91oaJkb4rybENHre9a2P5viz/yqk8ngWUUS+Kv+fu+9BLFnfLiLXOFcIeBJLhnayCiuDRSqcx0Qu68gVsGYc6EHD500Fkt+gpDj6gvr884n8wZ5o6q7xtL5wA0beXQnffWYkZrs2NGIRgQbsc5NB302SVx+R4ROvmgZaR8wBcji128BMfJ9kcvJ4DC+bQ57kRmv5yxgU4ngZfn0/JNZ8JBwxjTqS+s9kjJFG1unGUGLwMiIuXUD9EFhNIJuyCEAmVZSIGKH4G6v1gRR1LyzQKH2ZqiI1DnHMoDEZspbDjTeaFIAbSvjSq3A+n46y9hhVM8wIpnARSXyzmOD96d9UXvFroSPgGw1dq2vdEqDq9fJN1EbL2WulNmHkFDvxSO9ZT/RX/Bw2gA/BrF90XrJACereVfbV/YXaKfp77Nmx5NjEIUlxojsy7iN7nBHSZigfsbFyVOX1ZTeCCxvqnRSExP4lk5ZeYlRu9caaa743TWNdchRIhEWwadsBIe245C8clpaZ4zrPsk+OwXzxWCvRRumyNSLW5KWaSJyJU95cwheK76gr7228spZ3hmTtLyrfM2QRFqZFMR8/Q6yWfVgwTdfX2Ry4w3+eAO/5VT5nFb5NlzXPvBEAWrNZ6Q3jbH0RF4vcbp+fDngf/ywpoyNQtjrfvcq93AVb1RDWRghvyqgI2BkMr1rwYi8gizZ0G9GmPpMeqPerAQ0dJbzx+KAFM4IBq6iSLpZHUroeyfd9o5o+4fR2EtsZBoJORQEA4SW0CmeXSnblx2e9QkCHIodyqV6+g5ETEpZsLqnd/Na60EKPX/tQpPEcO+COIBPcQdszDzSiHGyQFPly/7KciUh1u+mFfxTCHGv9nn2WqndGgeGjQ/kr02qmTBX7Hc1qiEvgiSz1Tz/sy7Es29wvn6FrDGPP7asXlhOaiHxOctPvTptFA1kHFUk8bME7SsTSnGbFbUrssxrq70LhoSh5OwvQna+w84XdXhZb2sloJ4ZsCg3j+PrjJL08/JBi5zGd6ud/ZxhmcGKLOXPcNunQq5ESW92iJvfsuRrNYtawWwSmNhPYoFj2QqWNF0ffLpGt/ad24RJ8vkb5sXkpyKXmvFG5Vcdzf/44k3PBL/ojJ52+kWGzOArnyp5f969oV3J2c4Li27Nkova9VwRNVKqN0V+gV+mTHitgkXV30aWd3A1RSildEleiNPA+5cp+3+T7X+xfHiRZXQ1s4FA9TxIcnveQs9JSZ5r5qNmgqlW4zMtZ6rYNvgmyVcywKtu8ZxnSbS5vXlBV+NXdIfi3+xzrnJ0TkFL+Un8v1PWOC2PPFCjVPq7qTH7mOpzOYj/b4h0ceT+eHgr97Jqhb1ziVfeANzfN8bFUhPKBi7hJBCukQnB0aGjFTYLJPXL26lQ2b80xrOD5cFWgA8hz3St0e69kwNnD3+nX3gy12FjrjO+ddRvvvfyV3SWbXcxqNHfmsb9u1TV+wHTb9B07/L2sB8WUHJ9eeNomDyysEWZ0deqEhH/oWI2oiEh526gvAK1Nx2kIhNvkYR+tPYHEa9j+nd1VBpQP1uzSjIDO+fDDB7uy029rRjDC5Sk6aKczyz1D5uA9Lu+Rrrapl8JXNL3VRllNQH2K1ZFxOpX8LprttfqQ56MbPM0IttUheXWD/mROOeFqGUbL+kUOVlXLTFX/525g4faLEFO4qWWdmOXMNvVjpIVTWt650HfQjX9oT3Dg5Au6+v1/Ci78La6ZOngYCFPT1AUwxQuZ0yt5xKdNXLaDTISMTeCj16XTryhM36K2mfGRIgot71voWs8tTpL/f1rvcwv3LSDf+/G8THCT7NpfHWcW+lsF/ol8q9Bi6MezNTqp0rpp/kJRiVfNrX/w27cRRTu8RIIqtUblBMkxy4jwAVqCjUJkiPBj2cAoVloG8B2/N5deLdMhDb7xs5nhd3dubJhuj8WbaFRyu1L678DHhhA+rMimNo4C1kGpp0tD/qnCfCFHejpf0LJX43OTr578PY0tnIIrlWyNYyuR/ie6j2xNb1OV6u0dOX/1Dtcd7+ya9W+rY2LmnyQMtk8SMLTon8RAdwOaN2tNg5zVnDKlmVeOxPV2vhHIo9QEPV7jc3f+zVDquiNg1OaHX3cZXJDRY5MJpo+VanAcmqp4oasYLG+wrXUL5vJU0kqk2hGEskhP+Jjigrz1l6QnEwp6n8PMVeJp70Ii6ppeaK9GhF6fJE00ceLyxv08tKiPat4QdxZFgSbQknnEiCLD8Qc1rjazVKM3r3gXnnMeONgdz/yFV1q+haaN+wnF3Fn4uYCI9XsKOuVwDD0LsCO/f0gj5cmxCFcr7sclIcefWjvore+3aSU474cyqDVxH7w1RX3CHsaqsMRX17ZLgjsDXws3kLm2XJdM3Ku383UXqaHqsywzPhx7NFir0Fqjym/w6cxD2U9ypa3dx7Z12w/fi3Jps8sqJ8f8Ah8aZAvkHXvIRyrsxK7rrFaNNdNvjI8+3Emri195DCNa858anj2Qdny6Czshkn4N2+1m+k5S8sunX3Ja7I+JutRzg1mc2e9Yc0Zv9PZn1SwhxIdU9sXwZRTd/J5FoUm0e+PYREeHg3oc2YYzGf2xfJxXExt4pT3RfDRHvMXLUmoXOy63xv5pLuhOEax0dRgSywZ/GH+YBXFgCeTU0hZ8SPEFsn8punp1Kurd1KgXxUZ+la3R5+4ePGR4ZF5UQtOa83+Vj8zh80dfzbhxWCeoJnQ4dkZJM4drzknZOOKx2n3WrvJnzFIS8p0xeic+M3ZRVXIp10tV2DyYKwRxLzulPwzHcLlYTxl4PF7v8l106Azr+6wBFejbq/3P72C/0j78cepY9990/d4eAurn2lqdGKLU8FffnMw7cY7pVeXJRMU73Oxwi2g2vh/+4gX8dvbjfojn/eLVhhYl8GthwCQ50KcZq4z2JeW5eeOnJWFQEnVxDoG459TaC4zXybECEoJ0V5q1tXrQbDMtUxeTV6Pdt1/zJuc7TJoV/9YZFWxUtCf6Ou3Vd/vR/vG0138hJQrHkNeoep5dLe+6umcSquKvMaFpm3EZHDBOvCi0XYyIFHMgX7Cqp3JVXlxJFwQfHSaIUEbI2u1lBVUdlNw4Qa9UsLPEK94Qiln3pyKxQVCeNlx8yd7EegVNQBkFLabKvnietYVB4IPZ1fSor82arbgYec8aSdFMaIluYTYuNx32SxfrjKUdPGq+UNp5YpydoEG3xVLixtmHO9zXxKAnHnPuH2fPGrjx0GcuCDEU+yXUtXh6nfUL+cykws1gJ5vkfYFaFBr9PdCXvVf35OJQxzUMmWjv0W6uGJK11uAGDqSpOwCf6rouSIjPVgw57cJCOQ4b9tkI/Y5WNon9Swe72aZryKo8d+HyHBEdWJKrkary0LIGczA4Irq353Wc0Zga3om7UQiAGCvIl8GGyaqz5zH+1gMP5phWUCpKtttWIyicz09vXg76GxkmiGSMQ06Z9X8BUwqOtauDbPIf4rpK/yYoeAHxJ9soXS9VDe1Aw+awOOxaN8foLrif0TXBvQ55dtRtulRq9emFDBxlQcqKCaD8NeTSE7FOHvcjf/+oKbbtRqz9gbofoc2EzQ3pL6W5JdfJzAWmOk8oeoECe90lVMruwl/ltM015P/zIPazqvdvFmLNVHMIZrwiQ2tIKtGh6PDVH+85ew3caqVt2BsDv5rOcu3G9srQWd7NmgtzCRUXLYknYRSwtH9oUtkqyN3CfP20xQ1faXQl4MEmjQehWR6GmGnkdpYNQYeIG408yAX7uCZmYUic9juOfb+Re28+OVOB+scYK4DaPcBe+5wmji9gymtkMpKo4UKqCz7yxzuN8VIlx9yNozpRJpNaWHtaZVEqP45n2JemTlYBSmNIK1FuSYAUQ1yBLnKxevrjayd+h2i8PjdB3YY6b0nr3JuOXGpPMyh4V2dslpR3DFEvgpsBLqhqLDOWP4yEvIL6f21PpA7/8B\"));\nconst $43d7963e56408b24$var$log2 = Math.log2 || ((n)=>Math.log(n) / Math.LN2);\nconst $43d7963e56408b24$var$bits = (n)=>$43d7963e56408b24$var$log2(n) + 1 | 0;\n// compute the number of bits stored for each field\nconst $43d7963e56408b24$var$CATEGORY_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).categories.length - 1);\nconst $43d7963e56408b24$var$COMBINING_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).combiningClasses.length - 1);\nconst $43d7963e56408b24$var$SCRIPT_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).scripts.length - 1);\nconst $43d7963e56408b24$var$EAW_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).eaw.length - 1);\nconst $43d7963e56408b24$var$NUMBER_BITS = 10;\n// compute shift and mask values for each field\nconst $43d7963e56408b24$var$CATEGORY_SHIFT = $43d7963e56408b24$var$COMBINING_BITS + $43d7963e56408b24$var$SCRIPT_BITS + $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS;\nconst $43d7963e56408b24$var$COMBINING_SHIFT = $43d7963e56408b24$var$SCRIPT_BITS + $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS;\nconst $43d7963e56408b24$var$SCRIPT_SHIFT = $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS;\nconst $43d7963e56408b24$var$EAW_SHIFT = $43d7963e56408b24$var$NUMBER_BITS;\nconst $43d7963e56408b24$var$CATEGORY_MASK = (1 << $43d7963e56408b24$var$CATEGORY_BITS) - 1;\nconst $43d7963e56408b24$var$COMBINING_MASK = (1 << $43d7963e56408b24$var$COMBINING_BITS) - 1;\nconst $43d7963e56408b24$var$SCRIPT_MASK = (1 << $43d7963e56408b24$var$SCRIPT_BITS) - 1;\nconst $43d7963e56408b24$var$EAW_MASK = (1 << $43d7963e56408b24$var$EAW_BITS) - 1;\nconst $43d7963e56408b24$var$NUMBER_MASK = (1 << $43d7963e56408b24$var$NUMBER_BITS) - 1;\nfunction $43d7963e56408b24$export$410364bbb673ddbc(codePoint) {\n    const val = $43d7963e56408b24$var$trie.get(codePoint);\n    return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).categories[val >> $43d7963e56408b24$var$CATEGORY_SHIFT & $43d7963e56408b24$var$CATEGORY_MASK];\n}\nfunction $43d7963e56408b24$export$c03b919c6651ed55(codePoint) {\n    const val = $43d7963e56408b24$var$trie.get(codePoint);\n    return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).combiningClasses[val >> $43d7963e56408b24$var$COMBINING_SHIFT & $43d7963e56408b24$var$COMBINING_MASK];\n}\nfunction $43d7963e56408b24$export$941569448d136665(codePoint) {\n    const val = $43d7963e56408b24$var$trie.get(codePoint);\n    return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).scripts[val >> $43d7963e56408b24$var$SCRIPT_SHIFT & $43d7963e56408b24$var$SCRIPT_MASK];\n}\nfunction $43d7963e56408b24$export$92f6187db8ca6d26(codePoint) {\n    const val = $43d7963e56408b24$var$trie.get(codePoint);\n    return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).eaw[val >> $43d7963e56408b24$var$EAW_SHIFT & $43d7963e56408b24$var$EAW_MASK];\n}\nfunction $43d7963e56408b24$export$7d1258ebb7625a0d(codePoint) {\n    let val = $43d7963e56408b24$var$trie.get(codePoint);\n    let num = val & $43d7963e56408b24$var$NUMBER_MASK;\n    if (num === 0) return null;\n    else if (num <= 50) return num - 1;\n    else if (num < 0x1e0) {\n        const numerator = (num >> 4) - 12;\n        const denominator = (num & 0xf) + 1;\n        return numerator / denominator;\n    } else if (num < 0x300) {\n        val = (num >> 5) - 14;\n        let exp = (num & 0x1f) + 2;\n        while(exp > 0){\n            val *= 10;\n            exp--;\n        }\n        return val;\n    } else {\n        val = (num >> 2) - 0xbf;\n        let exp = (num & 3) + 1;\n        while(exp > 0){\n            val *= 60;\n            exp--;\n        }\n        return val;\n    }\n}\nfunction $43d7963e56408b24$export$52c8ea63abd07594(codePoint) {\n    const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n    return category === \"Lu\" || category === \"Ll\" || category === \"Lt\" || category === \"Lm\" || category === \"Lo\" || category === \"Nl\";\n}\nfunction $43d7963e56408b24$export$727d9dbc4fbb948f(codePoint) {\n    return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === \"Nd\";\n}\nfunction $43d7963e56408b24$export$a5b49f4dc6a07d2c(codePoint) {\n    const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n    return category === \"Pc\" || category === \"Pd\" || category === \"Pe\" || category === \"Pf\" || category === \"Pi\" || category === \"Po\" || category === \"Ps\";\n}\nfunction $43d7963e56408b24$export$7b6804e8df61fcf5(codePoint) {\n    return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === \"Ll\";\n}\nfunction $43d7963e56408b24$export$aebd617640818cda(codePoint) {\n    return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === \"Lu\";\n}\nfunction $43d7963e56408b24$export$de8b4ee23b2cf823(codePoint) {\n    return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === \"Lt\";\n}\nfunction $43d7963e56408b24$export$3c52dd84024ae72c(codePoint) {\n    const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n    return category === \"Zs\" || category === \"Zl\" || category === \"Zp\";\n}\nfunction $43d7963e56408b24$export$a11bdcffe109e74b(codePoint) {\n    const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n    return category === \"Nd\" || category === \"No\" || category === \"Nl\" || category === \"Lu\" || category === \"Ll\" || category === \"Lt\" || category === \"Lm\" || category === \"Lo\" || category === \"Me\" || category === \"Mc\";\n}\nfunction $43d7963e56408b24$export$e33ad6871e762338(codePoint) {\n    const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint);\n    return category === \"Mn\" || category === \"Me\" || category === \"Mc\";\n}\nvar // Backwards compatibility.\n$43d7963e56408b24$export$2e2bcd8739ae039 = {\n    getCategory: $43d7963e56408b24$export$410364bbb673ddbc,\n    getCombiningClass: $43d7963e56408b24$export$c03b919c6651ed55,\n    getScript: $43d7963e56408b24$export$941569448d136665,\n    getEastAsianWidth: $43d7963e56408b24$export$92f6187db8ca6d26,\n    getNumericValue: $43d7963e56408b24$export$7d1258ebb7625a0d,\n    isAlphabetic: $43d7963e56408b24$export$52c8ea63abd07594,\n    isDigit: $43d7963e56408b24$export$727d9dbc4fbb948f,\n    isPunctuation: $43d7963e56408b24$export$a5b49f4dc6a07d2c,\n    isLowerCase: $43d7963e56408b24$export$7b6804e8df61fcf5,\n    isUpperCase: $43d7963e56408b24$export$aebd617640818cda,\n    isTitleCase: $43d7963e56408b24$export$de8b4ee23b2cf823,\n    isWhiteSpace: $43d7963e56408b24$export$3c52dd84024ae72c,\n    isBaseForm: $43d7963e56408b24$export$a11bdcffe109e74b,\n    isMark: $43d7963e56408b24$export$e33ad6871e762338\n};\n\n\n//# sourceMappingURL=main.cjs.map\n\n\n/***/ }),\n\n/***/ 3480:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"8740\",\"䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻\"],[\"8767\",\"綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬\"],[\"87a1\",\"𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋\"],[\"8840\",\"㇀\",4,\"𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ\"],[\"88a1\",\"ǜü࿿ê̄ế࿿ê̌ềêɡ⏚⏛\"],[\"8940\",\"𪎩𡅅\"],[\"8943\",\"攊\"],[\"8946\",\"丽滝鵎釟\"],[\"894c\",\"𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮\"],[\"89a1\",\"琑糼緍楆竉刧\"],[\"89ab\",\"醌碸酞肼\"],[\"89b0\",\"贋胶𠧧\"],[\"89b5\",\"肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁\"],[\"89c1\",\"溚舾甙\"],[\"89c5\",\"䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅\"],[\"8a40\",\"𧶄唥\"],[\"8a43\",\"𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓\"],[\"8a64\",\"𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕\"],[\"8a76\",\"䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯\"],[\"8aa1\",\"𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱\"],[\"8aac\",\"䠋𠆩㿺塳𢶍\"],[\"8ab2\",\"𤗈𠓼𦂗𠽌𠶖啹䂻䎺\"],[\"8abb\",\"䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃\"],[\"8ac9\",\"𪘁𠸉𢫏𢳉\"],[\"8ace\",\"𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻\"],[\"8adf\",\"𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌\"],[\"8af6\",\"𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭\"],[\"8b40\",\"𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹\"],[\"8b55\",\"𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑\"],[\"8ba1\",\"𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁\"],[\"8bde\",\"𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢\"],[\"8c40\",\"倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋\"],[\"8ca1\",\"𣏹椙橃𣱣泿\"],[\"8ca7\",\"爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚\"],[\"8cc9\",\"顨杫䉶圽\"],[\"8cce\",\"藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶\"],[\"8ce6\",\"峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻\"],[\"8d40\",\"𠮟\"],[\"8d42\",\"𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱\"],[\"8da1\",\"㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘\"],[\"8e40\",\"𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎\"],[\"8ea1\",\"繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛\"],[\"8f40\",\"蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖\"],[\"8fa1\",\"𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起\"],[\"9040\",\"趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛\"],[\"90a1\",\"𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜\"],[\"9140\",\"𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈\"],[\"91a1\",\"鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨\"],[\"9240\",\"𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘\"],[\"92a1\",\"働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃\"],[\"9340\",\"媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍\"],[\"93a1\",\"摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋\"],[\"9440\",\"銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻\"],[\"94a1\",\"㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡\"],[\"9540\",\"𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂\"],[\"95a1\",\"衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰\"],[\"9640\",\"桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸\"],[\"96a1\",\"𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉\"],[\"9740\",\"愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫\"],[\"97a1\",\"𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎\"],[\"9840\",\"𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦\"],[\"98a1\",\"咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃\"],[\"9940\",\"䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚\"],[\"99a1\",\"䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿\"],[\"9a40\",\"鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺\"],[\"9aa1\",\"黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪\"],[\"9b40\",\"𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌\"],[\"9b62\",\"𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎\"],[\"9ba1\",\"椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊\"],[\"9c40\",\"嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶\"],[\"9ca1\",\"㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏\"],[\"9d40\",\"𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁\"],[\"9da1\",\"辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢\"],[\"9e40\",\"𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺\"],[\"9ea1\",\"鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭\"],[\"9ead\",\"𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹\"],[\"9ec5\",\"㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲\"],[\"9ef5\",\"噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼\"],[\"9f40\",\"籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱\"],[\"9f4f\",\"凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰\"],[\"9fa1\",\"椬叚鰊鴂䰻陁榀傦畆𡝭駚剳\"],[\"9fae\",\"酙隁酜\"],[\"9fb2\",\"酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽\"],[\"9fc1\",\"𤤙盖鮝个𠳔莾衂\"],[\"9fc9\",\"届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳\"],[\"9fdb\",\"歒酼龥鮗頮颴骺麨麄煺笔\"],[\"9fe7\",\"毺蠘罸\"],[\"9feb\",\"嘠𪙊蹷齓\"],[\"9ff0\",\"跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇\"],[\"a040\",\"𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷\"],[\"a055\",\"𡠻𦸅\"],[\"a058\",\"詾𢔛\"],[\"a05b\",\"惽癧髗鵄鍮鮏蟵\"],[\"a063\",\"蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽\"],[\"a073\",\"坟慯抦戹拎㩜懢厪𣏵捤栂㗒\"],[\"a0a1\",\"嵗𨯂迚𨸹\"],[\"a0a6\",\"僙𡵆礆匲阸𠼻䁥\"],[\"a0ae\",\"矾\"],[\"a0b0\",\"糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦\"],[\"a0d4\",\"覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷\"],[\"a0e2\",\"罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫\"],[\"a3c0\",\"␀\",31,\"␡\"],[\"c6a1\",\"①\",9,\"⑴\",9,\"ⅰ\",9,\"丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー［］✽ぁ\",23],[\"c740\",\"す\",58,\"ァアィイ\"],[\"c7a1\",\"ゥ\",81,\"А\",5,\"ЁЖ\",4],[\"c840\",\"Л\",26,\"ёж\",25,\"⇧↸↹㇏𠃌乚𠂊刂䒑\"],[\"c8a1\",\"龰冈龱𧘇\"],[\"c8cd\",\"￢￤＇＂㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣\"],[\"c8f5\",\"ʃɐɛɔɵœøŋʊɪ\"],[\"f9fe\",\"￭\"],[\"fa40\",\"𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸\"],[\"faa1\",\"鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍\"],[\"fb40\",\"𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙\"],[\"fba1\",\"𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂\"],[\"fc40\",\"廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷\"],[\"fca1\",\"𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝\"],[\"fd40\",\"𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀\"],[\"fda1\",\"𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎\"],[\"fe40\",\"鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌\"],[\"fea1\",\"𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔\"]]');\n\n/***/ }),\n\n/***/ 3336:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",127,\"€\"],[\"8140\",\"丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪\",5,\"乲乴\",9,\"乿\",6,\"亇亊\"],[\"8180\",\"亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂\",6,\"伋伌伒\",4,\"伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾\",4,\"佄佅佇\",5,\"佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢\"],[\"8240\",\"侤侫侭侰\",4,\"侶\",8,\"俀俁係俆俇俈俉俋俌俍俒\",4,\"俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿\",11],[\"8280\",\"個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯\",10,\"倻倽倿偀偁偂偄偅偆偉偊偋偍偐\",4,\"偖偗偘偙偛偝\",7,\"偦\",5,\"偭\",8,\"偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎\",20,\"傤傦傪傫傭\",4,\"傳\",6,\"傼\"],[\"8340\",\"傽\",17,\"僐\",5,\"僗僘僙僛\",10,\"僨僩僪僫僯僰僱僲僴僶\",4,\"僼\",9,\"儈\"],[\"8380\",\"儉儊儌\",5,\"儓\",13,\"儢\",28,\"兂兇兊兌兎兏児兒兓兗兘兙兛兝\",4,\"兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦\",4,\"冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒\",5],[\"8440\",\"凘凙凚凜凞凟凢凣凥\",5,\"凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄\",5,\"剋剎剏剒剓剕剗剘\"],[\"8480\",\"剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳\",9,\"剾劀劃\",4,\"劉\",6,\"劑劒劔\",6,\"劜劤劥劦劧劮劯劰労\",9,\"勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務\",5,\"勠勡勢勣勥\",10,\"勱\",7,\"勻勼勽匁匂匃匄匇匉匊匋匌匎\"],[\"8540\",\"匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯\",9,\"匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏\"],[\"8580\",\"厐\",4,\"厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯\",6,\"厷厸厹厺厼厽厾叀參\",4,\"収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝\",4,\"呣呥呧呩\",7,\"呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡\"],[\"8640\",\"咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠\",4,\"哫哬哯哰哱哴\",5,\"哻哾唀唂唃唄唅唈唊\",4,\"唒唓唕\",5,\"唜唝唞唟唡唥唦\"],[\"8680\",\"唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋\",4,\"啑啒啓啔啗\",4,\"啝啞啟啠啢啣啨啩啫啯\",5,\"啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠\",6,\"喨\",8,\"喲喴営喸喺喼喿\",4,\"嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗\",4,\"嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸\",4,\"嗿嘂嘃嘄嘅\"],[\"8740\",\"嘆嘇嘊嘋嘍嘐\",7,\"嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀\",11,\"噏\",4,\"噕噖噚噛噝\",4],[\"8780\",\"噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽\",7,\"嚇\",6,\"嚐嚑嚒嚔\",14,\"嚤\",10,\"嚰\",6,\"嚸嚹嚺嚻嚽\",12,\"囋\",8,\"囕囖囘囙囜団囥\",5,\"囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國\",6],[\"8840\",\"園\",9,\"圝圞圠圡圢圤圥圦圧圫圱圲圴\",4,\"圼圽圿坁坃坄坅坆坈坉坋坒\",4,\"坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀\"],[\"8880\",\"垁垇垈垉垊垍\",4,\"垔\",6,\"垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹\",8,\"埄\",6,\"埌埍埐埑埓埖埗埛埜埞埡埢埣埥\",7,\"埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥\",4,\"堫\",4,\"報堲堳場堶\",7],[\"8940\",\"堾\",5,\"塅\",6,\"塎塏塐塒塓塕塖塗塙\",4,\"塟\",5,\"塦\",4,\"塭\",16,\"塿墂墄墆墇墈墊墋墌\"],[\"8980\",\"墍\",4,\"墔\",4,\"墛墜墝墠\",7,\"墪\",17,\"墽墾墿壀壂壃壄壆\",10,\"壒壓壔壖\",13,\"壥\",5,\"壭壯壱売壴壵壷壸壺\",7,\"夃夅夆夈\",4,\"夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻\"],[\"8a40\",\"夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛\",4,\"奡奣奤奦\",12,\"奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦\"],[\"8a80\",\"妧妬妭妰妱妳\",5,\"妺妼妽妿\",6,\"姇姈姉姌姍姎姏姕姖姙姛姞\",4,\"姤姦姧姩姪姫姭\",11,\"姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪\",6,\"娳娵娷\",4,\"娽娾娿婁\",4,\"婇婈婋\",9,\"婖婗婘婙婛\",5],[\"8b40\",\"婡婣婤婥婦婨婩婫\",8,\"婸婹婻婼婽婾媀\",17,\"媓\",6,\"媜\",13,\"媫媬\"],[\"8b80\",\"媭\",4,\"媴媶媷媹\",4,\"媿嫀嫃\",5,\"嫊嫋嫍\",4,\"嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬\",4,\"嫲\",22,\"嬊\",11,\"嬘\",25,\"嬳嬵嬶嬸\",7,\"孁\",6],[\"8c40\",\"孈\",7,\"孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏\"],[\"8c80\",\"寑寔\",8,\"寠寢寣實寧審\",4,\"寯寱\",6,\"寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧\",6,\"屰屲\",6,\"屻屼屽屾岀岃\",4,\"岉岊岋岎岏岒岓岕岝\",4,\"岤\",4],[\"8d40\",\"岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅\",5,\"峌\",5,\"峓\",5,\"峚\",6,\"峢峣峧峩峫峬峮峯峱\",9,\"峼\",4],[\"8d80\",\"崁崄崅崈\",5,\"崏\",4,\"崕崗崘崙崚崜崝崟\",4,\"崥崨崪崫崬崯\",4,\"崵\",7,\"崿\",7,\"嵈嵉嵍\",10,\"嵙嵚嵜嵞\",10,\"嵪嵭嵮嵰嵱嵲嵳嵵\",12,\"嶃\",21,\"嶚嶛嶜嶞嶟嶠\"],[\"8e40\",\"嶡\",21,\"嶸\",12,\"巆\",6,\"巎\",12,\"巜巟巠巣巤巪巬巭\"],[\"8e80\",\"巰巵巶巸\",4,\"巿帀帄帇帉帊帋帍帎帒帓帗帞\",7,\"帨\",4,\"帯帰帲\",4,\"帹帺帾帿幀幁幃幆\",5,\"幍\",6,\"幖\",4,\"幜幝幟幠幣\",14,\"幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨\",4,\"庮\",4,\"庴庺庻庼庽庿\",6],[\"8f40\",\"廆廇廈廋\",5,\"廔廕廗廘廙廚廜\",11,\"廩廫\",8,\"廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤\"],[\"8f80\",\"弨弫弬弮弰弲\",6,\"弻弽弾弿彁\",14,\"彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢\",5,\"復徫徬徯\",5,\"徶徸徹徺徻徾\",4,\"忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇\"],[\"9040\",\"怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰\",4,\"怶\",4,\"怽怾恀恄\",6,\"恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀\"],[\"9080\",\"悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽\",7,\"惇惈惉惌\",4,\"惒惓惔惖惗惙惛惞惡\",4,\"惪惱惲惵惷惸惻\",4,\"愂愃愄愅愇愊愋愌愐\",4,\"愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬\",18,\"慀\",6],[\"9140\",\"慇慉態慍慏慐慒慓慔慖\",6,\"慞慟慠慡慣慤慥慦慩\",6,\"慱慲慳慴慶慸\",18,\"憌憍憏\",4,\"憕\"],[\"9180\",\"憖\",6,\"憞\",8,\"憪憫憭\",9,\"憸\",5,\"憿懀懁懃\",4,\"應懌\",4,\"懓懕\",16,\"懧\",13,\"懶\",8,\"戀\",5,\"戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸\",4,\"扂扄扅扆扊\"],[\"9240\",\"扏扐払扖扗扙扚扜\",6,\"扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋\",5,\"抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁\"],[\"9280\",\"拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳\",5,\"挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖\",7,\"捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙\",6,\"採掤掦掫掯掱掲掵掶掹掻掽掿揀\"],[\"9340\",\"揁揂揃揅揇揈揊揋揌揑揓揔揕揗\",6,\"揟揢揤\",4,\"揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆\",4,\"損搎搑搒搕\",5,\"搝搟搢搣搤\"],[\"9380\",\"搥搧搨搩搫搮\",5,\"搵\",4,\"搻搼搾摀摂摃摉摋\",6,\"摓摕摖摗摙\",4,\"摟\",7,\"摨摪摫摬摮\",9,\"摻\",6,\"撃撆撈\",8,\"撓撔撗撘撚撛撜撝撟\",4,\"撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆\",6,\"擏擑擓擔擕擖擙據\"],[\"9440\",\"擛擜擝擟擠擡擣擥擧\",24,\"攁\",7,\"攊\",7,\"攓\",4,\"攙\",8],[\"9480\",\"攢攣攤攦\",4,\"攬攭攰攱攲攳攷攺攼攽敀\",4,\"敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數\",14,\"斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱\",7,\"斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘\",7,\"旡旣旤旪旫\"],[\"9540\",\"旲旳旴旵旸旹旻\",4,\"昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷\",4,\"昽昿晀時晄\",6,\"晍晎晐晑晘\"],[\"9580\",\"晙晛晜晝晞晠晢晣晥晧晩\",4,\"晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘\",4,\"暞\",8,\"暩\",4,\"暯\",4,\"暵暶暷暸暺暻暼暽暿\",25,\"曚曞\",7,\"曧曨曪\",5,\"曱曵曶書曺曻曽朁朂會\"],[\"9640\",\"朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠\",5,\"朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗\",4,\"杝杢杣杤杦杧杫杬杮東杴杶\"],[\"9680\",\"杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹\",7,\"柂柅\",9,\"柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵\",7,\"柾栁栂栃栄栆栍栐栒栔栕栘\",4,\"栞栟栠栢\",6,\"栫\",6,\"栴栵栶栺栻栿桇桋桍桏桒桖\",5],[\"9740\",\"桜桝桞桟桪桬\",7,\"桵桸\",8,\"梂梄梇\",7,\"梐梑梒梔梕梖梘\",9,\"梣梤梥梩梪梫梬梮梱梲梴梶梷梸\"],[\"9780\",\"梹\",6,\"棁棃\",5,\"棊棌棎棏棐棑棓棔棖棗棙棛\",4,\"棡棢棤\",9,\"棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆\",4,\"椌椏椑椓\",11,\"椡椢椣椥\",7,\"椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃\",16,\"楕楖楘楙楛楜楟\"],[\"9840\",\"楡楢楤楥楧楨楩楪楬業楯楰楲\",4,\"楺楻楽楾楿榁榃榅榊榋榌榎\",5,\"榖榗榙榚榝\",9,\"榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽\"],[\"9880\",\"榾榿槀槂\",7,\"構槍槏槑槒槓槕\",5,\"槜槝槞槡\",11,\"槮槯槰槱槳\",9,\"槾樀\",9,\"樋\",11,\"標\",5,\"樠樢\",5,\"権樫樬樭樮樰樲樳樴樶\",6,\"樿\",4,\"橅橆橈\",7,\"橑\",6,\"橚\"],[\"9940\",\"橜\",4,\"橢橣橤橦\",10,\"橲\",6,\"橺橻橽橾橿檁檂檃檅\",8,\"檏檒\",4,\"檘\",7,\"檡\",5],[\"9980\",\"檧檨檪檭\",114,\"欥欦欨\",6],[\"9a40\",\"欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍\",11,\"歚\",7,\"歨歩歫\",13,\"歺歽歾歿殀殅殈\"],[\"9a80\",\"殌殎殏殐殑殔殕殗殘殙殜\",4,\"殢\",7,\"殫\",7,\"殶殸\",6,\"毀毃毄毆\",4,\"毌毎毐毑毘毚毜\",4,\"毢\",7,\"毬毭毮毰毱毲毴毶毷毸毺毻毼毾\",6,\"氈\",4,\"氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋\",4,\"汑汒汓汖汘\"],[\"9b40\",\"汙汚汢汣汥汦汧汫\",4,\"汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘\"],[\"9b80\",\"泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟\",5,\"洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽\",4,\"涃涄涆涇涊涋涍涏涐涒涖\",4,\"涜涢涥涬涭涰涱涳涴涶涷涹\",5,\"淁淂淃淈淉淊\"],[\"9c40\",\"淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽\",7,\"渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵\"],[\"9c80\",\"渶渷渹渻\",7,\"湅\",7,\"湏湐湑湒湕湗湙湚湜湝湞湠\",10,\"湬湭湯\",14,\"満溁溂溄溇溈溊\",4,\"溑\",6,\"溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪\",5],[\"9d40\",\"滰滱滲滳滵滶滷滸滺\",7,\"漃漄漅漇漈漊\",4,\"漐漑漒漖\",9,\"漡漢漣漥漦漧漨漬漮漰漲漴漵漷\",6,\"漿潀潁潂\"],[\"9d80\",\"潃潄潅潈潉潊潌潎\",9,\"潙潚潛潝潟潠潡潣潤潥潧\",5,\"潯潰潱潳潵潶潷潹潻潽\",6,\"澅澆澇澊澋澏\",12,\"澝澞澟澠澢\",4,\"澨\",10,\"澴澵澷澸澺\",5,\"濁濃\",5,\"濊\",6,\"濓\",10,\"濟濢濣濤濥\"],[\"9e40\",\"濦\",7,\"濰\",32,\"瀒\",7,\"瀜\",6,\"瀤\",6],[\"9e80\",\"瀫\",9,\"瀶瀷瀸瀺\",17,\"灍灎灐\",13,\"灟\",11,\"灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞\",12,\"炰炲炴炵炶為炾炿烄烅烆烇烉烋\",12,\"烚\"],[\"9f40\",\"烜烝烞烠烡烢烣烥烪烮烰\",6,\"烸烺烻烼烾\",10,\"焋\",4,\"焑焒焔焗焛\",10,\"焧\",7,\"焲焳焴\"],[\"9f80\",\"焵焷\",13,\"煆煇煈煉煋煍煏\",12,\"煝煟\",4,\"煥煩\",4,\"煯煰煱煴煵煶煷煹煻煼煾\",5,\"熅\",4,\"熋熌熍熎熐熑熒熓熕熖熗熚\",4,\"熡\",6,\"熩熪熫熭\",5,\"熴熶熷熸熺\",8,\"燄\",9,\"燏\",4],[\"a040\",\"燖\",9,\"燡燢燣燤燦燨\",5,\"燯\",9,\"燺\",11,\"爇\",19],[\"a080\",\"爛爜爞\",9,\"爩爫爭爮爯爲爳爴爺爼爾牀\",6,\"牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅\",4,\"犌犎犐犑犓\",11,\"犠\",11,\"犮犱犲犳犵犺\",6,\"狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛\"],[\"a1a1\",\"　、。·ˉˇ¨〃々—～‖…‘’“”〔〕〈\",7,\"〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃＄¤￠￡‰§№☆★○●◎◇◆□■△▲※→←↑↓〓\"],[\"a2a1\",\"ⅰ\",9],[\"a2b1\",\"⒈\",19,\"⑴\",19,\"①\",9],[\"a2e5\",\"㈠\",9],[\"a2f1\",\"Ⅰ\",11],[\"a3a1\",\"！＂＃￥％\",88,\"￣\"],[\"a4a1\",\"ぁ\",82],[\"a5a1\",\"ァ\",85],[\"a6a1\",\"Α\",16,\"Σ\",6],[\"a6c1\",\"α\",16,\"σ\",6],[\"a6e0\",\"︵︶︹︺︿﹀︽︾﹁﹂﹃﹄\"],[\"a6ee\",\"︻︼︷︸︱\"],[\"a6f4\",\"︳︴\"],[\"a7a1\",\"А\",5,\"ЁЖ\",25],[\"a7d1\",\"а\",5,\"ёж\",25],[\"a840\",\"ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═\",35,\"▁\",6],[\"a880\",\"█\",7,\"▓▔▕▼▽◢◣◤◥☉⊕〒〝〞\"],[\"a8a1\",\"āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ\"],[\"a8bd\",\"ńň\"],[\"a8c0\",\"ɡ\"],[\"a8c5\",\"ㄅ\",36],[\"a940\",\"〡\",8,\"㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰￢￤\"],[\"a959\",\"℡㈱\"],[\"a95c\",\"‐\"],[\"a960\",\"ー゛゜ヽヾ〆ゝゞ﹉\",9,\"﹔﹕﹖﹗﹙\",8],[\"a980\",\"﹢\",4,\"﹨﹩﹪﹫\"],[\"a996\",\"〇\"],[\"a9a4\",\"─\",75],[\"aa40\",\"狜狝狟狢\",5,\"狪狫狵狶狹狽狾狿猀猂猄\",5,\"猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀\",8],[\"aa80\",\"獉獊獋獌獎獏獑獓獔獕獖獘\",7,\"獡\",10,\"獮獰獱\"],[\"ab40\",\"獲\",11,\"獿\",4,\"玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣\",5,\"玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃\",4],[\"ab80\",\"珋珌珎珒\",6,\"珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳\",4],[\"ac40\",\"珸\",10,\"琄琇琈琋琌琍琎琑\",8,\"琜\",5,\"琣琤琧琩琫琭琯琱琲琷\",4,\"琽琾琿瑀瑂\",11],[\"ac80\",\"瑎\",6,\"瑖瑘瑝瑠\",12,\"瑮瑯瑱\",4,\"瑸瑹瑺\"],[\"ad40\",\"瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑\",10,\"璝璟\",7,\"璪\",15,\"璻\",12],[\"ad80\",\"瓈\",9,\"瓓\",8,\"瓝瓟瓡瓥瓧\",6,\"瓰瓱瓲\"],[\"ae40\",\"瓳瓵瓸\",6,\"甀甁甂甃甅\",7,\"甎甐甒甔甕甖甗甛甝甞甠\",4,\"甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘\"],[\"ae80\",\"畝\",7,\"畧畨畩畫\",6,\"畳畵當畷畺\",4,\"疀疁疂疄疅疇\"],[\"af40\",\"疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦\",4,\"疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇\"],[\"af80\",\"瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄\"],[\"b040\",\"癅\",6,\"癎\",5,\"癕癗\",4,\"癝癟癠癡癢癤\",6,\"癬癭癮癰\",7,\"癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛\"],[\"b080\",\"皜\",7,\"皥\",8,\"皯皰皳皵\",9,\"盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥\"],[\"b140\",\"盄盇盉盋盌盓盕盙盚盜盝盞盠\",4,\"盦\",7,\"盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎\",10,\"眛眜眝眞眡眣眤眥眧眪眫\"],[\"b180\",\"眬眮眰\",4,\"眹眻眽眾眿睂睄睅睆睈\",7,\"睒\",7,\"睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳\"],[\"b240\",\"睝睞睟睠睤睧睩睪睭\",11,\"睺睻睼瞁瞂瞃瞆\",5,\"瞏瞐瞓\",11,\"瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶\",4],[\"b280\",\"瞼瞾矀\",12,\"矎\",8,\"矘矙矚矝\",4,\"矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖\"],[\"b340\",\"矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃\",5,\"砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚\"],[\"b380\",\"硛硜硞\",11,\"硯\",7,\"硸硹硺硻硽\",6,\"场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚\"],[\"b440\",\"碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨\",7,\"碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚\",9],[\"b480\",\"磤磥磦磧磩磪磫磭\",4,\"磳磵磶磸磹磻\",5,\"礂礃礄礆\",6,\"础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮\"],[\"b540\",\"礍\",5,\"礔\",9,\"礟\",4,\"礥\",14,\"礵\",4,\"礽礿祂祃祄祅祇祊\",8,\"祔祕祘祙祡祣\"],[\"b580\",\"祤祦祩祪祫祬祮祰\",6,\"祹祻\",4,\"禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠\"],[\"b640\",\"禓\",6,\"禛\",11,\"禨\",10,\"禴\",4,\"禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙\",5,\"秠秡秢秥秨秪\"],[\"b680\",\"秬秮秱\",6,\"秹秺秼秾秿稁稄稅稇稈稉稊稌稏\",4,\"稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二\"],[\"b740\",\"稝稟稡稢稤\",14,\"稴稵稶稸稺稾穀\",5,\"穇\",9,\"穒\",4,\"穘\",16],[\"b780\",\"穩\",6,\"穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服\"],[\"b840\",\"窣窤窧窩窪窫窮\",4,\"窴\",10,\"竀\",10,\"竌\",9,\"竗竘竚竛竜竝竡竢竤竧\",5,\"竮竰竱竲竳\"],[\"b880\",\"竴\",4,\"竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹\"],[\"b940\",\"笯笰笲笴笵笶笷笹笻笽笿\",5,\"筆筈筊筍筎筓筕筗筙筜筞筟筡筣\",10,\"筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆\",6,\"箎箏\"],[\"b980\",\"箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹\",7,\"篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈\"],[\"ba40\",\"篅篈築篊篋篍篎篏篐篒篔\",4,\"篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲\",4,\"篸篹篺篻篽篿\",7,\"簈簉簊簍簎簐\",5,\"簗簘簙\"],[\"ba80\",\"簚\",4,\"簠\",5,\"簨簩簫\",12,\"簹\",5,\"籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖\"],[\"bb40\",\"籃\",9,\"籎\",36,\"籵\",5,\"籾\",9],[\"bb80\",\"粈粊\",6,\"粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴\",4,\"粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕\"],[\"bc40\",\"粿糀糂糃糄糆糉糋糎\",6,\"糘糚糛糝糞糡\",6,\"糩\",5,\"糰\",7,\"糹糺糼\",13,\"紋\",5],[\"bc80\",\"紑\",14,\"紡紣紤紥紦紨紩紪紬紭紮細\",6,\"肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件\"],[\"bd40\",\"紷\",54,\"絯\",7],[\"bd80\",\"絸\",32,\"健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸\"],[\"be40\",\"継\",12,\"綧\",6,\"綯\",42],[\"be80\",\"線\",32,\"尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻\"],[\"bf40\",\"緻\",62],[\"bf80\",\"縺縼\",4,\"繂\",4,\"繈\",21,\"俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀\"],[\"c040\",\"繞\",35,\"纃\",23,\"纜纝纞\"],[\"c080\",\"纮纴纻纼绖绤绬绹缊缐缞缷缹缻\",6,\"罃罆\",9,\"罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐\"],[\"c140\",\"罖罙罛罜罝罞罠罣\",4,\"罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂\",7,\"羋羍羏\",4,\"羕\",4,\"羛羜羠羢羣羥羦羨\",6,\"羱\"],[\"c180\",\"羳\",4,\"羺羻羾翀翂翃翄翆翇翈翉翋翍翏\",4,\"翖翗翙\",5,\"翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿\"],[\"c240\",\"翤翧翨翪翫翬翭翯翲翴\",6,\"翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫\",5,\"耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗\"],[\"c280\",\"聙聛\",13,\"聫\",5,\"聲\",11,\"隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫\"],[\"c340\",\"聾肁肂肅肈肊肍\",5,\"肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇\",4,\"胏\",6,\"胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋\"],[\"c380\",\"脌脕脗脙脛脜脝脟\",12,\"脭脮脰脳脴脵脷脹\",4,\"脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸\"],[\"c440\",\"腀\",5,\"腇腉腍腎腏腒腖腗腘腛\",4,\"腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃\",4,\"膉膋膌膍膎膐膒\",5,\"膙膚膞\",4,\"膤膥\"],[\"c480\",\"膧膩膫\",7,\"膴\",5,\"膼膽膾膿臄臅臇臈臉臋臍\",6,\"摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁\"],[\"c540\",\"臔\",14,\"臤臥臦臨臩臫臮\",4,\"臵\",5,\"臽臿舃與\",4,\"舎舏舑舓舕\",5,\"舝舠舤舥舦舧舩舮舲舺舼舽舿\"],[\"c580\",\"艀艁艂艃艅艆艈艊艌艍艎艐\",7,\"艙艛艜艝艞艠\",7,\"艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗\"],[\"c640\",\"艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸\"],[\"c680\",\"苺苼\",4,\"茊茋茍茐茒茓茖茘茙茝\",9,\"茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐\"],[\"c740\",\"茾茿荁荂荄荅荈荊\",4,\"荓荕\",4,\"荝荢荰\",6,\"荹荺荾\",6,\"莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡\",6,\"莬莭莮\"],[\"c780\",\"莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠\"],[\"c840\",\"菮華菳\",4,\"菺菻菼菾菿萀萂萅萇萈萉萊萐萒\",5,\"萙萚萛萞\",5,\"萩\",7,\"萲\",5,\"萹萺萻萾\",7,\"葇葈葉\"],[\"c880\",\"葊\",6,\"葒\",4,\"葘葝葞葟葠葢葤\",4,\"葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁\"],[\"c940\",\"葽\",4,\"蒃蒄蒅蒆蒊蒍蒏\",7,\"蒘蒚蒛蒝蒞蒟蒠蒢\",12,\"蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗\"],[\"c980\",\"蓘\",4,\"蓞蓡蓢蓤蓧\",4,\"蓭蓮蓯蓱\",10,\"蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳\"],[\"ca40\",\"蔃\",8,\"蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢\",8,\"蔭\",9,\"蔾\",4,\"蕄蕅蕆蕇蕋\",10],[\"ca80\",\"蕗蕘蕚蕛蕜蕝蕟\",4,\"蕥蕦蕧蕩\",8,\"蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱\"],[\"cb40\",\"薂薃薆薈\",6,\"薐\",10,\"薝\",6,\"薥薦薧薩薫薬薭薱\",5,\"薸薺\",6,\"藂\",6,\"藊\",4,\"藑藒\"],[\"cb80\",\"藔藖\",5,\"藝\",6,\"藥藦藧藨藪\",14,\"恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔\"],[\"cc40\",\"藹藺藼藽藾蘀\",4,\"蘆\",10,\"蘒蘓蘔蘕蘗\",15,\"蘨蘪\",13,\"蘹蘺蘻蘽蘾蘿虀\"],[\"cc80\",\"虁\",11,\"虒虓處\",4,\"虛虜虝號虠虡虣\",7,\"獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃\"],[\"cd40\",\"虭虯虰虲\",6,\"蚃\",6,\"蚎\",4,\"蚔蚖\",5,\"蚞\",4,\"蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻\",4,\"蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜\"],[\"cd80\",\"蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威\"],[\"ce40\",\"蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀\",6,\"蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚\",5,\"蝡蝢蝦\",7,\"蝯蝱蝲蝳蝵\"],[\"ce80\",\"蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎\",4,\"螔螕螖螘\",6,\"螠\",4,\"巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺\"],[\"cf40\",\"螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁\",4,\"蟇蟈蟉蟌\",4,\"蟔\",6,\"蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯\",9],[\"cf80\",\"蟺蟻蟼蟽蟿蠀蠁蠂蠄\",5,\"蠋\",7,\"蠔蠗蠘蠙蠚蠜\",4,\"蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓\"],[\"d040\",\"蠤\",13,\"蠳\",5,\"蠺蠻蠽蠾蠿衁衂衃衆\",5,\"衎\",5,\"衕衖衘衚\",6,\"衦衧衪衭衯衱衳衴衵衶衸衹衺\"],[\"d080\",\"衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗\",4,\"袝\",4,\"袣袥\",5,\"小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄\"],[\"d140\",\"袬袮袯袰袲\",4,\"袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚\",4,\"裠裡裦裧裩\",6,\"裲裵裶裷裺裻製裿褀褁褃\",5],[\"d180\",\"褉褋\",4,\"褑褔\",4,\"褜\",4,\"褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶\"],[\"d240\",\"褸\",8,\"襂襃襅\",24,\"襠\",5,\"襧\",19,\"襼\"],[\"d280\",\"襽襾覀覂覄覅覇\",26,\"摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐\"],[\"d340\",\"覢\",30,\"觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴\",6],[\"d380\",\"觻\",4,\"訁\",5,\"計\",21,\"印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉\"],[\"d440\",\"訞\",31,\"訿\",8,\"詉\",21],[\"d480\",\"詟\",25,\"詺\",6,\"浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧\"],[\"d540\",\"誁\",7,\"誋\",7,\"誔\",46],[\"d580\",\"諃\",32,\"铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政\"],[\"d640\",\"諤\",34,\"謈\",27],[\"d680\",\"謤謥謧\",30,\"帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑\"],[\"d740\",\"譆\",31,\"譧\",4,\"譭\",25],[\"d780\",\"讇\",24,\"讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座\"],[\"d840\",\"谸\",8,\"豂豃豄豅豈豊豋豍\",7,\"豖豗豘豙豛\",5,\"豣\",6,\"豬\",6,\"豴豵豶豷豻\",6,\"貃貄貆貇\"],[\"d880\",\"貈貋貍\",6,\"貕貖貗貙\",20,\"亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝\"],[\"d940\",\"貮\",62],[\"d980\",\"賭\",32,\"佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼\"],[\"da40\",\"贎\",14,\"贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸\",8,\"趂趃趆趇趈趉趌\",4,\"趒趓趕\",9,\"趠趡\"],[\"da80\",\"趢趤\",12,\"趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺\"],[\"db40\",\"跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾\",6,\"踆踇踈踋踍踎踐踑踒踓踕\",7,\"踠踡踤\",4,\"踫踭踰踲踳踴踶踷踸踻踼踾\"],[\"db80\",\"踿蹃蹅蹆蹌\",4,\"蹓\",5,\"蹚\",11,\"蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝\"],[\"dc40\",\"蹳蹵蹷\",4,\"蹽蹾躀躂躃躄躆躈\",6,\"躑躒躓躕\",6,\"躝躟\",11,\"躭躮躰躱躳\",6,\"躻\",7],[\"dc80\",\"軃\",10,\"軏\",21,\"堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥\"],[\"dd40\",\"軥\",62],[\"dd80\",\"輤\",32,\"荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺\"],[\"de40\",\"轅\",32,\"轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆\"],[\"de80\",\"迉\",4,\"迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖\"],[\"df40\",\"這逜連逤逥逧\",5,\"逰\",4,\"逷逹逺逽逿遀遃遅遆遈\",4,\"過達違遖遙遚遜\",5,\"遤遦遧適遪遫遬遯\",4,\"遶\",6,\"遾邁\"],[\"df80\",\"還邅邆邇邉邊邌\",4,\"邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼\"],[\"e040\",\"郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅\",19,\"鄚鄛鄜\"],[\"e080\",\"鄝鄟鄠鄡鄤\",10,\"鄰鄲\",6,\"鄺\",8,\"酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼\"],[\"e140\",\"酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀\",4,\"醆醈醊醎醏醓\",6,\"醜\",5,\"醤\",5,\"醫醬醰醱醲醳醶醷醸醹醻\"],[\"e180\",\"醼\",10,\"釈釋釐釒\",9,\"針\",8,\"帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺\"],[\"e240\",\"釦\",62],[\"e280\",\"鈥\",32,\"狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧\",5,\"饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂\"],[\"e340\",\"鉆\",45,\"鉵\",16],[\"e380\",\"銆\",7,\"銏\",24,\"恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾\"],[\"e440\",\"銨\",5,\"銯\",24,\"鋉\",31],[\"e480\",\"鋩\",32,\"洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑\"],[\"e540\",\"錊\",51,\"錿\",10],[\"e580\",\"鍊\",31,\"鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣\"],[\"e640\",\"鍬\",34,\"鎐\",27],[\"e680\",\"鎬\",29,\"鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩\"],[\"e740\",\"鏎\",7,\"鏗\",54],[\"e780\",\"鐎\",32,\"纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡\",6,\"缪缫缬缭缯\",4,\"缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬\"],[\"e840\",\"鐯\",14,\"鐿\",43,\"鑬鑭鑮鑯\"],[\"e880\",\"鑰\",20,\"钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹\"],[\"e940\",\"锧锳锽镃镈镋镕镚镠镮镴镵長\",7,\"門\",42],[\"e980\",\"閫\",32,\"椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋\"],[\"ea40\",\"闌\",27,\"闬闿阇阓阘阛阞阠阣\",6,\"阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗\"],[\"ea80\",\"陘陙陚陜陝陞陠陣陥陦陫陭\",4,\"陳陸\",12,\"隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰\"],[\"eb40\",\"隌階隑隒隓隕隖隚際隝\",9,\"隨\",7,\"隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖\",9,\"雡\",6,\"雫\"],[\"eb80\",\"雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗\",4,\"霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻\"],[\"ec40\",\"霡\",8,\"霫霬霮霯霱霳\",4,\"霺霻霼霽霿\",18,\"靔靕靗靘靚靜靝靟靣靤靦靧靨靪\",7],[\"ec80\",\"靲靵靷\",4,\"靽\",7,\"鞆\",4,\"鞌鞎鞏鞐鞓鞕鞖鞗鞙\",4,\"臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐\"],[\"ed40\",\"鞞鞟鞡鞢鞤\",6,\"鞬鞮鞰鞱鞳鞵\",46],[\"ed80\",\"韤韥韨韮\",4,\"韴韷\",23,\"怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨\"],[\"ee40\",\"頏\",62],[\"ee80\",\"顎\",32,\"睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶\",4,\"钼钽钿铄铈\",6,\"铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪\"],[\"ef40\",\"顯\",5,\"颋颎颒颕颙颣風\",37,\"飏飐飔飖飗飛飜飝飠\",4],[\"ef80\",\"飥飦飩\",30,\"铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒\",4,\"锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤\",8,\"镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔\"],[\"f040\",\"餈\",4,\"餎餏餑\",28,\"餯\",26],[\"f080\",\"饊\",9,\"饖\",12,\"饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨\",4,\"鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦\",6,\"鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙\"],[\"f140\",\"馌馎馚\",10,\"馦馧馩\",47],[\"f180\",\"駙\",32,\"瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃\"],[\"f240\",\"駺\",62],[\"f280\",\"騹\",32,\"颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒\"],[\"f340\",\"驚\",17,\"驲骃骉骍骎骔骕骙骦骩\",6,\"骲骳骴骵骹骻骽骾骿髃髄髆\",4,\"髍髎髏髐髒體髕髖髗髙髚髛髜\"],[\"f380\",\"髝髞髠髢髣髤髥髧髨髩髪髬髮髰\",8,\"髺髼\",6,\"鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋\"],[\"f440\",\"鬇鬉\",5,\"鬐鬑鬒鬔\",10,\"鬠鬡鬢鬤\",10,\"鬰鬱鬳\",7,\"鬽鬾鬿魀魆魊魋魌魎魐魒魓魕\",5],[\"f480\",\"魛\",32,\"簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤\"],[\"f540\",\"魼\",62],[\"f580\",\"鮻\",32,\"酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜\"],[\"f640\",\"鯜\",62],[\"f680\",\"鰛\",32,\"觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅\",5,\"龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞\",5,\"鲥\",4,\"鲫鲭鲮鲰\",7,\"鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋\"],[\"f740\",\"鰼\",62],[\"f780\",\"鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾\",4,\"鳈鳉鳑鳒鳚鳛鳠鳡鳌\",4,\"鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄\"],[\"f840\",\"鳣\",62],[\"f880\",\"鴢\",32],[\"f940\",\"鵃\",62],[\"f980\",\"鶂\",32],[\"fa40\",\"鶣\",62],[\"fa80\",\"鷢\",32],[\"fb40\",\"鸃\",27,\"鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴\",9,\"麀\"],[\"fb80\",\"麁麃麄麅麆麉麊麌\",5,\"麔\",8,\"麞麠\",5,\"麧麨麩麪\"],[\"fc40\",\"麫\",8,\"麵麶麷麹麺麼麿\",4,\"黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰\",8,\"黺黽黿\",6],[\"fc80\",\"鼆\",4,\"鼌鼏鼑鼒鼔鼕鼖鼘鼚\",5,\"鼡鼣\",8,\"鼭鼮鼰鼱\"],[\"fd40\",\"鼲\",4,\"鼸鼺鼼鼿\",4,\"齅\",10,\"齒\",38],[\"fd80\",\"齹\",5,\"龁龂龍\",11,\"龜龝龞龡\",4,\"郎凉秊裏隣\"],[\"fe40\",\"兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩\"]]');\n\n/***/ }),\n\n/***/ 7348:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",127],[\"8141\",\"갂갃갅갆갋\",4,\"갘갞갟갡갢갣갥\",6,\"갮갲갳갴\"],[\"8161\",\"갵갶갷갺갻갽갾갿걁\",9,\"걌걎\",5,\"걕\"],[\"8181\",\"걖걗걙걚걛걝\",18,\"걲걳걵걶걹걻\",4,\"겂겇겈겍겎겏겑겒겓겕\",6,\"겞겢\",5,\"겫겭겮겱\",6,\"겺겾겿곀곂곃곅곆곇곉곊곋곍\",7,\"곖곘\",7,\"곢곣곥곦곩곫곭곮곲곴곷\",4,\"곾곿괁괂괃괅괇\",4,\"괎괐괒괓\"],[\"8241\",\"괔괕괖괗괙괚괛괝괞괟괡\",7,\"괪괫괮\",5],[\"8261\",\"괶괷괹괺괻괽\",6,\"굆굈굊\",5,\"굑굒굓굕굖굗\"],[\"8281\",\"굙\",7,\"굢굤\",7,\"굮굯굱굲굷굸굹굺굾궀궃\",4,\"궊궋궍궎궏궑\",10,\"궞\",5,\"궥\",17,\"궸\",7,\"귂귃귅귆귇귉\",6,\"귒귔\",7,\"귝귞귟귡귢귣귥\",18],[\"8341\",\"귺귻귽귾긂\",5,\"긊긌긎\",5,\"긕\",7],[\"8361\",\"긝\",18,\"긲긳긵긶긹긻긼\"],[\"8381\",\"긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗\",4,\"깞깢깣깤깦깧깪깫깭깮깯깱\",6,\"깺깾\",5,\"꺆\",5,\"꺍\",46,\"꺿껁껂껃껅\",6,\"껎껒\",5,\"껚껛껝\",8],[\"8441\",\"껦껧껩껪껬껮\",5,\"껵껶껷껹껺껻껽\",8],[\"8461\",\"꼆꼉꼊꼋꼌꼎꼏꼑\",18],[\"8481\",\"꼤\",7,\"꼮꼯꼱꼳꼵\",6,\"꼾꽀꽄꽅꽆꽇꽊\",5,\"꽑\",10,\"꽞\",5,\"꽦\",18,\"꽺\",5,\"꾁꾂꾃꾅꾆꾇꾉\",6,\"꾒꾓꾔꾖\",5,\"꾝\",26,\"꾺꾻꾽꾾\"],[\"8541\",\"꾿꿁\",5,\"꿊꿌꿏\",4,\"꿕\",6,\"꿝\",4],[\"8561\",\"꿢\",5,\"꿪\",5,\"꿲꿳꿵꿶꿷꿹\",6,\"뀂뀃\"],[\"8581\",\"뀅\",6,\"뀍뀎뀏뀑뀒뀓뀕\",6,\"뀞\",9,\"뀩\",26,\"끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞\",29,\"끾끿낁낂낃낅\",6,\"낎낐낒\",5,\"낛낝낞낣낤\"],[\"8641\",\"낥낦낧낪낰낲낶낷낹낺낻낽\",6,\"냆냊\",5,\"냒\"],[\"8661\",\"냓냕냖냗냙\",6,\"냡냢냣냤냦\",10],[\"8681\",\"냱\",22,\"넊넍넎넏넑넔넕넖넗넚넞\",4,\"넦넧넩넪넫넭\",6,\"넶넺\",5,\"녂녃녅녆녇녉\",6,\"녒녓녖녗녙녚녛녝녞녟녡\",22,\"녺녻녽녾녿놁놃\",4,\"놊놌놎놏놐놑놕놖놗놙놚놛놝\"],[\"8741\",\"놞\",9,\"놩\",15],[\"8761\",\"놹\",18,\"뇍뇎뇏뇑뇒뇓뇕\"],[\"8781\",\"뇖\",5,\"뇞뇠\",7,\"뇪뇫뇭뇮뇯뇱\",7,\"뇺뇼뇾\",5,\"눆눇눉눊눍\",6,\"눖눘눚\",5,\"눡\",18,\"눵\",6,\"눽\",26,\"뉙뉚뉛뉝뉞뉟뉡\",6,\"뉪\",4],[\"8841\",\"뉯\",4,\"뉶\",5,\"뉽\",6,\"늆늇늈늊\",4],[\"8861\",\"늏늒늓늕늖늗늛\",4,\"늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷\"],[\"8881\",\"늸\",15,\"닊닋닍닎닏닑닓\",4,\"닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉\",6,\"댒댖\",5,\"댝\",54,\"덗덙덚덝덠덡덢덣\"],[\"8941\",\"덦덨덪덬덭덯덲덳덵덶덷덹\",6,\"뎂뎆\",5,\"뎍\"],[\"8961\",\"뎎뎏뎑뎒뎓뎕\",10,\"뎢\",5,\"뎩뎪뎫뎭\"],[\"8981\",\"뎮\",21,\"돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩\",18,\"돽\",18,\"됑\",6,\"됙됚됛됝됞됟됡\",6,\"됪됬\",7,\"됵\",15],[\"8a41\",\"둅\",10,\"둒둓둕둖둗둙\",6,\"둢둤둦\"],[\"8a61\",\"둧\",4,\"둭\",18,\"뒁뒂\"],[\"8a81\",\"뒃\",4,\"뒉\",19,\"뒞\",5,\"뒥뒦뒧뒩뒪뒫뒭\",7,\"뒶뒸뒺\",5,\"듁듂듃듅듆듇듉\",6,\"듑듒듓듔듖\",5,\"듞듟듡듢듥듧\",4,\"듮듰듲\",5,\"듹\",26,\"딖딗딙딚딝\"],[\"8b41\",\"딞\",5,\"딦딫\",4,\"딲딳딵딶딷딹\",6,\"땂땆\"],[\"8b61\",\"땇땈땉땊땎땏땑땒땓땕\",6,\"땞땢\",8],[\"8b81\",\"땫\",52,\"떢떣떥떦떧떩떬떭떮떯떲떶\",4,\"떾떿뗁뗂뗃뗅\",6,\"뗎뗒\",5,\"뗙\",18,\"뗭\",18],[\"8c41\",\"똀\",15,\"똒똓똕똖똗똙\",4],[\"8c61\",\"똞\",6,\"똦\",5,\"똭\",6,\"똵\",5],[\"8c81\",\"똻\",12,\"뙉\",26,\"뙥뙦뙧뙩\",50,\"뚞뚟뚡뚢뚣뚥\",5,\"뚭뚮뚯뚰뚲\",16],[\"8d41\",\"뛃\",16,\"뛕\",8],[\"8d61\",\"뛞\",17,\"뛱뛲뛳뛵뛶뛷뛹뛺\"],[\"8d81\",\"뛻\",4,\"뜂뜃뜄뜆\",33,\"뜪뜫뜭뜮뜱\",6,\"뜺뜼\",7,\"띅띆띇띉띊띋띍\",6,\"띖\",9,\"띡띢띣띥띦띧띩\",6,\"띲띴띶\",5,\"띾띿랁랂랃랅\",6,\"랎랓랔랕랚랛랝랞\"],[\"8e41\",\"랟랡\",6,\"랪랮\",5,\"랶랷랹\",8],[\"8e61\",\"럂\",4,\"럈럊\",19],[\"8e81\",\"럞\",13,\"럮럯럱럲럳럵\",6,\"럾렂\",4,\"렊렋렍렎렏렑\",6,\"렚렜렞\",5,\"렦렧렩렪렫렭\",6,\"렶렺\",5,\"롁롂롃롅\",11,\"롒롔\",7,\"롞롟롡롢롣롥\",6,\"롮롰롲\",5,\"롹롺롻롽\",7],[\"8f41\",\"뢅\",7,\"뢎\",17],[\"8f61\",\"뢠\",7,\"뢩\",6,\"뢱뢲뢳뢵뢶뢷뢹\",4],[\"8f81\",\"뢾뢿룂룄룆\",5,\"룍룎룏룑룒룓룕\",7,\"룞룠룢\",5,\"룪룫룭룮룯룱\",6,\"룺룼룾\",5,\"뤅\",18,\"뤙\",6,\"뤡\",26,\"뤾뤿륁륂륃륅\",6,\"륍륎륐륒\",5],[\"9041\",\"륚륛륝륞륟륡\",6,\"륪륬륮\",5,\"륶륷륹륺륻륽\"],[\"9061\",\"륾\",5,\"릆릈릋릌릏\",15],[\"9081\",\"릟\",12,\"릮릯릱릲릳릵\",6,\"릾맀맂\",5,\"맊맋맍맓\",4,\"맚맜맟맠맢맦맧맩맪맫맭\",6,\"맶맻\",4,\"먂\",5,\"먉\",11,\"먖\",33,\"먺먻먽먾먿멁멃멄멅멆\"],[\"9141\",\"멇멊멌멏멐멑멒멖멗멙멚멛멝\",6,\"멦멪\",5],[\"9161\",\"멲멳멵멶멷멹\",9,\"몆몈몉몊몋몍\",5],[\"9181\",\"몓\",20,\"몪몭몮몯몱몳\",4,\"몺몼몾\",5,\"뫅뫆뫇뫉\",14,\"뫚\",33,\"뫽뫾뫿묁묂묃묅\",7,\"묎묐묒\",5,\"묙묚묛묝묞묟묡\",6],[\"9241\",\"묨묪묬\",7,\"묷묹묺묿\",4,\"뭆뭈뭊뭋뭌뭎뭑뭒\"],[\"9261\",\"뭓뭕뭖뭗뭙\",7,\"뭢뭤\",7,\"뭭\",4],[\"9281\",\"뭲\",21,\"뮉뮊뮋뮍뮎뮏뮑\",18,\"뮥뮦뮧뮩뮪뮫뮭\",6,\"뮵뮶뮸\",7,\"믁믂믃믅믆믇믉\",6,\"믑믒믔\",35,\"믺믻믽믾밁\"],[\"9341\",\"밃\",4,\"밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵\"],[\"9361\",\"밶밷밹\",6,\"뱂뱆뱇뱈뱊뱋뱎뱏뱑\",8],[\"9381\",\"뱚뱛뱜뱞\",37,\"벆벇벉벊벍벏\",4,\"벖벘벛\",4,\"벢벣벥벦벩\",6,\"벲벶\",5,\"벾벿볁볂볃볅\",7,\"볎볒볓볔볖볗볙볚볛볝\",22,\"볷볹볺볻볽\"],[\"9441\",\"볾\",5,\"봆봈봊\",5,\"봑봒봓봕\",8],[\"9461\",\"봞\",5,\"봥\",6,\"봭\",12],[\"9481\",\"봺\",5,\"뵁\",6,\"뵊뵋뵍뵎뵏뵑\",6,\"뵚\",9,\"뵥뵦뵧뵩\",22,\"붂붃붅붆붋\",4,\"붒붔붖붗붘붛붝\",6,\"붥\",10,\"붱\",6,\"붹\",24],[\"9541\",\"뷒뷓뷖뷗뷙뷚뷛뷝\",11,\"뷪\",5,\"뷱\"],[\"9561\",\"뷲뷳뷵뷶뷷뷹\",6,\"븁븂븄븆\",5,\"븎븏븑븒븓\"],[\"9581\",\"븕\",6,\"븞븠\",35,\"빆빇빉빊빋빍빏\",4,\"빖빘빜빝빞빟빢빣빥빦빧빩빫\",4,\"빲빶\",4,\"빾빿뺁뺂뺃뺅\",6,\"뺎뺒\",5,\"뺚\",13,\"뺩\",14],[\"9641\",\"뺸\",23,\"뻒뻓\"],[\"9661\",\"뻕뻖뻙\",6,\"뻡뻢뻦\",5,\"뻭\",8],[\"9681\",\"뻶\",10,\"뼂\",5,\"뼊\",13,\"뼚뼞\",33,\"뽂뽃뽅뽆뽇뽉\",6,\"뽒뽓뽔뽖\",44],[\"9741\",\"뾃\",16,\"뾕\",8],[\"9761\",\"뾞\",17,\"뾱\",7],[\"9781\",\"뾹\",11,\"뿆\",5,\"뿎뿏뿑뿒뿓뿕\",6,\"뿝뿞뿠뿢\",89,\"쀽쀾쀿\"],[\"9841\",\"쁀\",16,\"쁒\",5,\"쁙쁚쁛\"],[\"9861\",\"쁝쁞쁟쁡\",6,\"쁪\",15],[\"9881\",\"쁺\",21,\"삒삓삕삖삗삙\",6,\"삢삤삦\",5,\"삮삱삲삷\",4,\"삾샂샃샄샆샇샊샋샍샎샏샑\",6,\"샚샞\",5,\"샦샧샩샪샫샭\",6,\"샶샸샺\",5,\"섁섂섃섅섆섇섉\",6,\"섑섒섓섔섖\",5,\"섡섢섥섨섩섪섫섮\"],[\"9941\",\"섲섳섴섵섷섺섻섽섾섿셁\",6,\"셊셎\",5,\"셖셗\"],[\"9961\",\"셙셚셛셝\",6,\"셦셪\",5,\"셱셲셳셵셶셷셹셺셻\"],[\"9981\",\"셼\",8,\"솆\",5,\"솏솑솒솓솕솗\",4,\"솞솠솢솣솤솦솧솪솫솭솮솯솱\",11,\"솾\",5,\"쇅쇆쇇쇉쇊쇋쇍\",6,\"쇕쇖쇙\",6,\"쇡쇢쇣쇥쇦쇧쇩\",6,\"쇲쇴\",7,\"쇾쇿숁숂숃숅\",6,\"숎숐숒\",5,\"숚숛숝숞숡숢숣\"],[\"9a41\",\"숤숥숦숧숪숬숮숰숳숵\",16],[\"9a61\",\"쉆쉇쉉\",6,\"쉒쉓쉕쉖쉗쉙\",6,\"쉡쉢쉣쉤쉦\"],[\"9a81\",\"쉧\",4,\"쉮쉯쉱쉲쉳쉵\",6,\"쉾슀슂\",5,\"슊\",5,\"슑\",6,\"슙슚슜슞\",5,\"슦슧슩슪슫슮\",5,\"슶슸슺\",33,\"싞싟싡싢싥\",5,\"싮싰싲싳싴싵싷싺싽싾싿쌁\",6,\"쌊쌋쌎쌏\"],[\"9b41\",\"쌐쌑쌒쌖쌗쌙쌚쌛쌝\",6,\"쌦쌧쌪\",8],[\"9b61\",\"쌳\",17,\"썆\",7],[\"9b81\",\"썎\",25,\"썪썫썭썮썯썱썳\",4,\"썺썻썾\",5,\"쎅쎆쎇쎉쎊쎋쎍\",50,\"쏁\",22,\"쏚\"],[\"9c41\",\"쏛쏝쏞쏡쏣\",4,\"쏪쏫쏬쏮\",5,\"쏶쏷쏹\",5],[\"9c61\",\"쏿\",8,\"쐉\",6,\"쐑\",9],[\"9c81\",\"쐛\",8,\"쐥\",6,\"쐭쐮쐯쐱쐲쐳쐵\",6,\"쐾\",9,\"쑉\",26,\"쑦쑧쑩쑪쑫쑭\",6,\"쑶쑷쑸쑺\",5,\"쒁\",18,\"쒕\",6,\"쒝\",12],[\"9d41\",\"쒪\",13,\"쒹쒺쒻쒽\",8],[\"9d61\",\"쓆\",25],[\"9d81\",\"쓠\",8,\"쓪\",5,\"쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂\",9,\"씍씎씏씑씒씓씕\",6,\"씝\",10,\"씪씫씭씮씯씱\",6,\"씺씼씾\",5,\"앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩\",6,\"앲앶\",5,\"앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔\"],[\"9e41\",\"얖얙얚얛얝얞얟얡\",7,\"얪\",9,\"얶\"],[\"9e61\",\"얷얺얿\",4,\"엋엍엏엒엓엕엖엗엙\",6,\"엢엤엦엧\"],[\"9e81\",\"엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑\",6,\"옚옝\",6,\"옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉\",6,\"왒왖\",5,\"왞왟왡\",10,\"왭왮왰왲\",5,\"왺왻왽왾왿욁\",6,\"욊욌욎\",5,\"욖욗욙욚욛욝\",6,\"욦\"],[\"9f41\",\"욨욪\",5,\"욲욳욵욶욷욻\",4,\"웂웄웆\",5,\"웎\"],[\"9f61\",\"웏웑웒웓웕\",6,\"웞웟웢\",5,\"웪웫웭웮웯웱웲\"],[\"9f81\",\"웳\",4,\"웺웻웼웾\",5,\"윆윇윉윊윋윍\",6,\"윖윘윚\",5,\"윢윣윥윦윧윩\",6,\"윲윴윶윸윹윺윻윾윿읁읂읃읅\",4,\"읋읎읐읙읚읛읝읞읟읡\",6,\"읩읪읬\",7,\"읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛\",4,\"잢잧\",4,\"잮잯잱잲잳잵잶잷\"],[\"a041\",\"잸잹잺잻잾쟂\",5,\"쟊쟋쟍쟏쟑\",6,\"쟙쟚쟛쟜\"],[\"a061\",\"쟞\",5,\"쟥쟦쟧쟩쟪쟫쟭\",13],[\"a081\",\"쟻\",4,\"젂젃젅젆젇젉젋\",4,\"젒젔젗\",4,\"젞젟젡젢젣젥\",6,\"젮젰젲\",5,\"젹젺젻젽젾젿졁\",6,\"졊졋졎\",5,\"졕\",26,\"졲졳졵졶졷졹졻\",4,\"좂좄좈좉좊좎\",5,\"좕\",7,\"좞좠좢좣좤\"],[\"a141\",\"좥좦좧좩\",18,\"좾좿죀죁\"],[\"a161\",\"죂죃죅죆죇죉죊죋죍\",6,\"죖죘죚\",5,\"죢죣죥\"],[\"a181\",\"죦\",14,\"죶\",5,\"죾죿줁줂줃줇\",4,\"줎　、。·‥…¨〃­―∥＼∼‘’“”〔〕〈\",9,\"±×÷≠≤≥∞∴°′″℃Å￠￡￥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨￢\"],[\"a241\",\"줐줒\",5,\"줙\",18],[\"a261\",\"줭\",6,\"줵\",18],[\"a281\",\"쥈\",7,\"쥒쥓쥕쥖쥗쥙\",6,\"쥢쥤\",7,\"쥭쥮쥯⇒⇔∀∃´～ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®\"],[\"a341\",\"쥱쥲쥳쥵\",6,\"쥽\",10,\"즊즋즍즎즏\"],[\"a361\",\"즑\",6,\"즚즜즞\",16],[\"a381\",\"즯\",16,\"짂짃짅짆짉짋\",4,\"짒짔짗짘짛！\",58,\"￦］\",32,\"￣\"],[\"a441\",\"짞짟짡짣짥짦짨짩짪짫짮짲\",5,\"짺짻짽짾짿쨁쨂쨃쨄\"],[\"a461\",\"쨅쨆쨇쨊쨎\",5,\"쨕쨖쨗쨙\",12],[\"a481\",\"쨦쨧쨨쨪\",28,\"ㄱ\",93],[\"a541\",\"쩇\",4,\"쩎쩏쩑쩒쩓쩕\",6,\"쩞쩢\",5,\"쩩쩪\"],[\"a561\",\"쩫\",17,\"쩾\",5,\"쪅쪆\"],[\"a581\",\"쪇\",16,\"쪙\",14,\"ⅰ\",9],[\"a5b0\",\"Ⅰ\",9],[\"a5c1\",\"Α\",16,\"Σ\",6],[\"a5e1\",\"α\",16,\"σ\",6],[\"a641\",\"쪨\",19,\"쪾쪿쫁쫂쫃쫅\"],[\"a661\",\"쫆\",5,\"쫎쫐쫒쫔쫕쫖쫗쫚\",5,\"쫡\",6],[\"a681\",\"쫨쫩쫪쫫쫭\",6,\"쫵\",18,\"쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃\",7],[\"a741\",\"쬋\",4,\"쬑쬒쬓쬕쬖쬗쬙\",6,\"쬢\",7],[\"a761\",\"쬪\",22,\"쭂쭃쭄\"],[\"a781\",\"쭅쭆쭇쭊쭋쭍쭎쭏쭑\",6,\"쭚쭛쭜쭞\",5,\"쭥\",7,\"㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙\",9,\"㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰\",9,\"㎀\",4,\"㎺\",5,\"㎐\",4,\"Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆\"],[\"a841\",\"쭭\",10,\"쭺\",14],[\"a861\",\"쮉\",18,\"쮝\",6],[\"a881\",\"쮤\",19,\"쮹\",11,\"ÆÐªĦ\"],[\"a8a6\",\"Ĳ\"],[\"a8a8\",\"ĿŁØŒºÞŦŊ\"],[\"a8b1\",\"㉠\",27,\"ⓐ\",25,\"①\",14,\"½⅓⅔¼¾⅛⅜⅝⅞\"],[\"a941\",\"쯅\",14,\"쯕\",10],[\"a961\",\"쯠쯡쯢쯣쯥쯦쯨쯪\",18],[\"a981\",\"쯽\",14,\"찎찏찑찒찓찕\",6,\"찞찟찠찣찤æđðħıĳĸŀłøœßþŧŋŉ㈀\",27,\"⒜\",25,\"⑴\",14,\"¹²³⁴ⁿ₁₂₃₄\"],[\"aa41\",\"찥찦찪찫찭찯찱\",6,\"찺찿\",4,\"챆챇챉챊챋챍챎\"],[\"aa61\",\"챏\",4,\"챖챚\",5,\"챡챢챣챥챧챩\",6,\"챱챲\"],[\"aa81\",\"챳챴챶\",29,\"ぁ\",82],[\"ab41\",\"첔첕첖첗첚첛첝첞첟첡\",6,\"첪첮\",5,\"첶첷첹\"],[\"ab61\",\"첺첻첽\",6,\"쳆쳈쳊\",5,\"쳑쳒쳓쳕\",5],[\"ab81\",\"쳛\",8,\"쳥\",6,\"쳭쳮쳯쳱\",12,\"ァ\",85],[\"ac41\",\"쳾쳿촀촂\",5,\"촊촋촍촎촏촑\",6,\"촚촜촞촟촠\"],[\"ac61\",\"촡촢촣촥촦촧촩촪촫촭\",11,\"촺\",4],[\"ac81\",\"촿\",28,\"쵝쵞쵟А\",5,\"ЁЖ\",25],[\"acd1\",\"а\",5,\"ёж\",25],[\"ad41\",\"쵡쵢쵣쵥\",6,\"쵮쵰쵲\",5,\"쵹\",7],[\"ad61\",\"춁\",6,\"춉\",10,\"춖춗춙춚춛춝춞춟\"],[\"ad81\",\"춠춡춢춣춦춨춪\",5,\"춱\",18,\"췅\"],[\"ae41\",\"췆\",5,\"췍췎췏췑\",16],[\"ae61\",\"췢\",5,\"췩췪췫췭췮췯췱\",6,\"췺췼췾\",4],[\"ae81\",\"츃츅츆츇츉츊츋츍\",6,\"츕츖츗츘츚\",5,\"츢츣츥츦츧츩츪츫\"],[\"af41\",\"츬츭츮츯츲츴츶\",19],[\"af61\",\"칊\",13,\"칚칛칝칞칢\",5,\"칪칬\"],[\"af81\",\"칮\",5,\"칶칷칹칺칻칽\",6,\"캆캈캊\",5,\"캒캓캕캖캗캙\"],[\"b041\",\"캚\",5,\"캢캦\",5,\"캮\",12],[\"b061\",\"캻\",5,\"컂\",19],[\"b081\",\"컖\",13,\"컦컧컩컪컭\",6,\"컶컺\",5,\"가각간갇갈갉갊감\",7,\"같\",4,\"갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆\"],[\"b141\",\"켂켃켅켆켇켉\",6,\"켒켔켖\",5,\"켝켞켟켡켢켣\"],[\"b161\",\"켥\",6,\"켮켲\",5,\"켹\",11],[\"b181\",\"콅\",14,\"콖콗콙콚콛콝\",6,\"콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸\"],[\"b241\",\"콭콮콯콲콳콵콶콷콹\",6,\"쾁쾂쾃쾄쾆\",5,\"쾍\"],[\"b261\",\"쾎\",18,\"쾢\",5,\"쾩\"],[\"b281\",\"쾪\",5,\"쾱\",18,\"쿅\",6,\"깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙\"],[\"b341\",\"쿌\",19,\"쿢쿣쿥쿦쿧쿩\"],[\"b361\",\"쿪\",5,\"쿲쿴쿶\",5,\"쿽쿾쿿퀁퀂퀃퀅\",5],[\"b381\",\"퀋\",5,\"퀒\",5,\"퀙\",19,\"끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫\",4,\"낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝\"],[\"b441\",\"퀮\",5,\"퀶퀷퀹퀺퀻퀽\",6,\"큆큈큊\",5],[\"b461\",\"큑큒큓큕큖큗큙\",6,\"큡\",10,\"큮큯\"],[\"b481\",\"큱큲큳큵\",6,\"큾큿킀킂\",18,\"뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫\",4,\"닳담답닷\",4,\"닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥\"],[\"b541\",\"킕\",14,\"킦킧킩킪킫킭\",5],[\"b561\",\"킳킶킸킺\",5,\"탂탃탅탆탇탊\",5,\"탒탖\",4],[\"b581\",\"탛탞탟탡탢탣탥\",6,\"탮탲\",5,\"탹\",11,\"덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸\"],[\"b641\",\"턅\",7,\"턎\",17],[\"b661\",\"턠\",15,\"턲턳턵턶턷턹턻턼턽턾\"],[\"b681\",\"턿텂텆\",5,\"텎텏텑텒텓텕\",6,\"텞텠텢\",5,\"텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗\"],[\"b741\",\"텮\",13,\"텽\",6,\"톅톆톇톉톊\"],[\"b761\",\"톋\",20,\"톢톣톥톦톧\"],[\"b781\",\"톩\",6,\"톲톴톶톷톸톹톻톽톾톿퇁\",14,\"래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩\"],[\"b841\",\"퇐\",7,\"퇙\",17],[\"b861\",\"퇫\",8,\"퇵퇶퇷퇹\",13],[\"b881\",\"툈툊\",5,\"툑\",24,\"륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많\",4,\"맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼\"],[\"b941\",\"툪툫툮툯툱툲툳툵\",6,\"툾퉀퉂\",5,\"퉉퉊퉋퉌\"],[\"b961\",\"퉍\",14,\"퉝\",6,\"퉥퉦퉧퉨\"],[\"b981\",\"퉩\",22,\"튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바\",4,\"받\",4,\"밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗\"],[\"ba41\",\"튍튎튏튒튓튔튖\",5,\"튝튞튟튡튢튣튥\",6,\"튭\"],[\"ba61\",\"튮튯튰튲\",5,\"튺튻튽튾틁틃\",4,\"틊틌\",5],[\"ba81\",\"틒틓틕틖틗틙틚틛틝\",6,\"틦\",9,\"틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤\"],[\"bb41\",\"틻\",4,\"팂팄팆\",5,\"팏팑팒팓팕팗\",4,\"팞팢팣\"],[\"bb61\",\"팤팦팧팪팫팭팮팯팱\",6,\"팺팾\",5,\"퍆퍇퍈퍉\"],[\"bb81\",\"퍊\",31,\"빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤\"],[\"bc41\",\"퍪\",17,\"퍾퍿펁펂펃펅펆펇\"],[\"bc61\",\"펈펉펊펋펎펒\",5,\"펚펛펝펞펟펡\",6,\"펪펬펮\"],[\"bc81\",\"펯\",4,\"펵펶펷펹펺펻펽\",6,\"폆폇폊\",5,\"폑\",5,\"샥샨샬샴샵샷샹섀섄섈섐섕서\",4,\"섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭\"],[\"bd41\",\"폗폙\",7,\"폢폤\",7,\"폮폯폱폲폳폵폶폷\"],[\"bd61\",\"폸폹폺폻폾퐀퐂\",5,\"퐉\",13],[\"bd81\",\"퐗\",5,\"퐞\",25,\"숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰\"],[\"be41\",\"퐸\",7,\"푁푂푃푅\",14],[\"be61\",\"푔\",7,\"푝푞푟푡푢푣푥\",7,\"푮푰푱푲\"],[\"be81\",\"푳\",4,\"푺푻푽푾풁풃\",4,\"풊풌풎\",5,\"풕\",8,\"쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄\",6,\"엌엎\"],[\"bf41\",\"풞\",10,\"풪\",14],[\"bf61\",\"풹\",18,\"퓍퓎퓏퓑퓒퓓퓕\"],[\"bf81\",\"퓖\",5,\"퓝퓞퓠\",7,\"퓩퓪퓫퓭퓮퓯퓱\",6,\"퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염\",5,\"옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨\"],[\"c041\",\"퓾\",5,\"픅픆픇픉픊픋픍\",6,\"픖픘\",5],[\"c061\",\"픞\",25],[\"c081\",\"픸픹픺픻픾픿핁핂핃핅\",6,\"핎핐핒\",5,\"핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응\",7,\"읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊\"],[\"c141\",\"핤핦핧핪핬핮\",5,\"핶핷핹핺핻핽\",6,\"햆햊햋\"],[\"c161\",\"햌햍햎햏햑\",19,\"햦햧\"],[\"c181\",\"햨\",31,\"점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓\"],[\"c241\",\"헊헋헍헎헏헑헓\",4,\"헚헜헞\",5,\"헦헧헩헪헫헭헮\"],[\"c261\",\"헯\",4,\"헶헸헺\",5,\"혂혃혅혆혇혉\",6,\"혒\"],[\"c281\",\"혖\",5,\"혝혞혟혡혢혣혥\",7,\"혮\",9,\"혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻\"],[\"c341\",\"혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝\",4],[\"c361\",\"홢\",4,\"홨홪\",5,\"홲홳홵\",11],[\"c381\",\"횁횂횄횆\",5,\"횎횏횑횒횓횕\",7,\"횞횠횢\",5,\"횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층\"],[\"c441\",\"횫횭횮횯횱\",7,\"횺횼\",7,\"훆훇훉훊훋\"],[\"c461\",\"훍훎훏훐훒훓훕훖훘훚\",5,\"훡훢훣훥훦훧훩\",4],[\"c481\",\"훮훯훱훲훳훴훶\",5,\"훾훿휁휂휃휅\",11,\"휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼\"],[\"c541\",\"휕휖휗휚휛휝휞휟휡\",6,\"휪휬휮\",5,\"휶휷휹\"],[\"c561\",\"휺휻휽\",6,\"흅흆흈흊\",5,\"흒흓흕흚\",4],[\"c581\",\"흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵\",6,\"흾흿힀힂\",5,\"힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜\"],[\"c641\",\"힍힎힏힑\",6,\"힚힜힞\",5],[\"c6a1\",\"퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁\"],[\"c7a1\",\"퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠\"],[\"c8a1\",\"혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝\"],[\"caa1\",\"伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕\"],[\"cba1\",\"匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢\"],[\"cca1\",\"瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械\"],[\"cda1\",\"棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜\"],[\"cea1\",\"科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾\"],[\"cfa1\",\"區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴\"],[\"d0a1\",\"鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣\"],[\"d1a1\",\"朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩\",5,\"那樂\",4,\"諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉\"],[\"d2a1\",\"納臘蠟衲囊娘廊\",4,\"乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧\",5,\"駑魯\",10,\"濃籠聾膿農惱牢磊腦賂雷尿壘\",7,\"嫩訥杻紐勒\",5,\"能菱陵尼泥匿溺多茶\"],[\"d3a1\",\"丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃\"],[\"d4a1\",\"棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅\"],[\"d5a1\",\"蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣\"],[\"d6a1\",\"煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼\"],[\"d7a1\",\"遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬\"],[\"d8a1\",\"立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅\"],[\"d9a1\",\"蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文\"],[\"daa1\",\"汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑\"],[\"dba1\",\"發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖\"],[\"dca1\",\"碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦\"],[\"dda1\",\"孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥\"],[\"dea1\",\"脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索\"],[\"dfa1\",\"傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署\"],[\"e0a1\",\"胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬\"],[\"e1a1\",\"聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁\"],[\"e2a1\",\"戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧\"],[\"e3a1\",\"嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁\"],[\"e4a1\",\"沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額\"],[\"e5a1\",\"櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬\"],[\"e6a1\",\"旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒\"],[\"e7a1\",\"簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳\"],[\"e8a1\",\"烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療\"],[\"e9a1\",\"窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓\"],[\"eaa1\",\"運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜\"],[\"eba1\",\"濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼\"],[\"eca1\",\"議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄\"],[\"eda1\",\"立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長\"],[\"eea1\",\"障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱\"],[\"efa1\",\"煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖\"],[\"f0a1\",\"靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫\"],[\"f1a1\",\"踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只\"],[\"f2a1\",\"咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯\"],[\"f3a1\",\"鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策\"],[\"f4a1\",\"責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢\"],[\"f5a1\",\"椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃\"],[\"f6a1\",\"贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託\"],[\"f7a1\",\"鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑\"],[\"f8a1\",\"阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃\"],[\"f9a1\",\"品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航\"],[\"faa1\",\"行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型\"],[\"fba1\",\"形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵\"],[\"fca1\",\"禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆\"],[\"fda1\",\"爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰\"]]');\n\n/***/ }),\n\n/***/ 4284:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",127],[\"a140\",\"　，、。．‧；：？！︰…‥﹐﹑﹒·﹔﹕﹖﹗｜–︱—︳╴︴﹏（）︵︶｛｝︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚\"],[\"a1a1\",\"﹛﹜﹝﹞‘’“”〝〞‵′＃＆＊※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯￣＿ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡＋－×÷±√＜＞＝≦≧≠∞≒≡﹢\",4,\"～∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣／\"],[\"a240\",\"＼∕﹨＄￥〒￠￡％＠℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁\",7,\"▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭\"],[\"a2a1\",\"╮╰╯═╞╪╡◢◣◥◤╱╲╳０\",9,\"Ⅰ\",9,\"〡\",8,\"十卄卅Ａ\",25,\"ａ\",21],[\"a340\",\"ｗｘｙｚΑ\",16,\"Σ\",6,\"α\",16,\"σ\",6,\"ㄅ\",10],[\"a3a1\",\"ㄐ\",25,\"˙ˉˊˇˋ\"],[\"a3e1\",\"€\"],[\"a440\",\"一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才\"],[\"a4a1\",\"丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙\"],[\"a540\",\"世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外\"],[\"a5a1\",\"央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全\"],[\"a640\",\"共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年\"],[\"a6a1\",\"式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣\"],[\"a740\",\"作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍\"],[\"a7a1\",\"均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠\"],[\"a840\",\"杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒\"],[\"a8a1\",\"芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵\"],[\"a940\",\"咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居\"],[\"a9a1\",\"屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊\"],[\"aa40\",\"昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠\"],[\"aaa1\",\"炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附\"],[\"ab40\",\"陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品\"],[\"aba1\",\"哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷\"],[\"ac40\",\"拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗\"],[\"aca1\",\"活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄\"],[\"ad40\",\"耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥\"],[\"ada1\",\"迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪\"],[\"ae40\",\"哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙\"],[\"aea1\",\"恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓\"],[\"af40\",\"浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷\"],[\"afa1\",\"砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃\"],[\"b040\",\"虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡\"],[\"b0a1\",\"陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀\"],[\"b140\",\"娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽\"],[\"b1a1\",\"情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺\"],[\"b240\",\"毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶\"],[\"b2a1\",\"瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼\"],[\"b340\",\"莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途\"],[\"b3a1\",\"部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠\"],[\"b440\",\"婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍\"],[\"b4a1\",\"插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋\"],[\"b540\",\"溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘\"],[\"b5a1\",\"窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁\"],[\"b640\",\"詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑\"],[\"b6a1\",\"間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼\"],[\"b740\",\"媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業\"],[\"b7a1\",\"楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督\"],[\"b840\",\"睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫\"],[\"b8a1\",\"腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊\"],[\"b940\",\"辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴\"],[\"b9a1\",\"飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇\"],[\"ba40\",\"愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢\"],[\"baa1\",\"滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬\"],[\"bb40\",\"罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤\"],[\"bba1\",\"說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜\"],[\"bc40\",\"劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂\"],[\"bca1\",\"慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃\"],[\"bd40\",\"瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯\"],[\"bda1\",\"翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞\"],[\"be40\",\"輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉\"],[\"bea1\",\"鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡\"],[\"bf40\",\"濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊\"],[\"bfa1\",\"縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚\"],[\"c040\",\"錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇\"],[\"c0a1\",\"嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬\"],[\"c140\",\"瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪\"],[\"c1a1\",\"薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁\"],[\"c240\",\"駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘\"],[\"c2a1\",\"癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦\"],[\"c340\",\"鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸\"],[\"c3a1\",\"獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類\"],[\"c440\",\"願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼\"],[\"c4a1\",\"纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴\"],[\"c540\",\"護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬\"],[\"c5a1\",\"禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒\"],[\"c640\",\"讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲\"],[\"c940\",\"乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕\"],[\"c9a1\",\"氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋\"],[\"ca40\",\"汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘\"],[\"caa1\",\"吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇\"],[\"cb40\",\"杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓\"],[\"cba1\",\"芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢\"],[\"cc40\",\"坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋\"],[\"cca1\",\"怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲\"],[\"cd40\",\"泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺\"],[\"cda1\",\"矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏\"],[\"ce40\",\"哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛\"],[\"cea1\",\"峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺\"],[\"cf40\",\"柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂\"],[\"cfa1\",\"洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀\"],[\"d040\",\"穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪\"],[\"d0a1\",\"苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱\"],[\"d140\",\"唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧\"],[\"d1a1\",\"恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤\"],[\"d240\",\"毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸\"],[\"d2a1\",\"牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐\"],[\"d340\",\"笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢\"],[\"d3a1\",\"荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐\"],[\"d440\",\"酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅\"],[\"d4a1\",\"唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏\"],[\"d540\",\"崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟\"],[\"d5a1\",\"捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉\"],[\"d640\",\"淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏\"],[\"d6a1\",\"痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟\"],[\"d740\",\"耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷\"],[\"d7a1\",\"蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪\"],[\"d840\",\"釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷\"],[\"d8a1\",\"堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔\"],[\"d940\",\"惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒\"],[\"d9a1\",\"晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞\"],[\"da40\",\"湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖\"],[\"daa1\",\"琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥\"],[\"db40\",\"罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳\"],[\"dba1\",\"菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺\"],[\"dc40\",\"軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈\"],[\"dca1\",\"隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆\"],[\"dd40\",\"媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤\"],[\"dda1\",\"搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼\"],[\"de40\",\"毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓\"],[\"dea1\",\"煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓\"],[\"df40\",\"稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯\"],[\"dfa1\",\"腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤\"],[\"e040\",\"觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿\"],[\"e0a1\",\"遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠\"],[\"e140\",\"凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠\"],[\"e1a1\",\"寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉\"],[\"e240\",\"榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊\"],[\"e2a1\",\"漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓\"],[\"e340\",\"禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞\"],[\"e3a1\",\"耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻\"],[\"e440\",\"裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍\"],[\"e4a1\",\"銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘\"],[\"e540\",\"噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉\"],[\"e5a1\",\"憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒\"],[\"e640\",\"澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙\"],[\"e6a1\",\"獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟\"],[\"e740\",\"膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢\"],[\"e7a1\",\"蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧\"],[\"e840\",\"踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓\"],[\"e8a1\",\"銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮\"],[\"e940\",\"噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺\"],[\"e9a1\",\"憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸\"],[\"ea40\",\"澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙\"],[\"eaa1\",\"瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘\"],[\"eb40\",\"蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠\"],[\"eba1\",\"諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌\"],[\"ec40\",\"錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕\"],[\"eca1\",\"魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎\"],[\"ed40\",\"檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶\"],[\"eda1\",\"瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞\"],[\"ee40\",\"蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞\"],[\"eea1\",\"謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜\"],[\"ef40\",\"鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰\"],[\"efa1\",\"鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶\"],[\"f040\",\"璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒\"],[\"f0a1\",\"臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧\"],[\"f140\",\"蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪\"],[\"f1a1\",\"鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰\"],[\"f240\",\"徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛\"],[\"f2a1\",\"礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕\"],[\"f340\",\"譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦\"],[\"f3a1\",\"鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲\"],[\"f440\",\"嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩\"],[\"f4a1\",\"禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿\"],[\"f540\",\"鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛\"],[\"f5a1\",\"鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥\"],[\"f640\",\"蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺\"],[\"f6a1\",\"騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚\"],[\"f740\",\"糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊\"],[\"f7a1\",\"驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾\"],[\"f840\",\"讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏\"],[\"f8a1\",\"齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚\"],[\"f940\",\"纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊\"],[\"f9a1\",\"龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓\"]]');\n\n/***/ }),\n\n/***/ 5633:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",127],[\"8ea1\",\"｡\",62],[\"a1a1\",\"　、。，．・：；？！゛゜´｀¨＾￣＿ヽヾゝゞ〃仝々〆〇ー―‐／＼～∥｜…‥‘’“”（）〔〕［］｛｝〈\",9,\"＋－±×÷＝≠＜＞≦≧∞∴♂♀°′″℃￥＄￠￡％＃＆＊＠§☆★○●◎◇\"],[\"a2a1\",\"◆□■△▲▽▼※〒→←↑↓〓\"],[\"a2ba\",\"∈∋⊆⊇⊂⊃∪∩\"],[\"a2ca\",\"∧∨￢⇒⇔∀∃\"],[\"a2dc\",\"∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬\"],[\"a2f2\",\"Å‰♯♭♪†‡¶\"],[\"a2fe\",\"◯\"],[\"a3b0\",\"０\",9],[\"a3c1\",\"Ａ\",25],[\"a3e1\",\"ａ\",25],[\"a4a1\",\"ぁ\",82],[\"a5a1\",\"ァ\",85],[\"a6a1\",\"Α\",16,\"Σ\",6],[\"a6c1\",\"α\",16,\"σ\",6],[\"a7a1\",\"А\",5,\"ЁЖ\",25],[\"a7d1\",\"а\",5,\"ёж\",25],[\"a8a1\",\"─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂\"],[\"ada1\",\"①\",19,\"Ⅰ\",9],[\"adc0\",\"㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡\"],[\"addf\",\"㍻〝〟№㏍℡㊤\",4,\"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪\"],[\"b0a1\",\"亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭\"],[\"b1a1\",\"院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応\"],[\"b2a1\",\"押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改\"],[\"b3a1\",\"魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱\"],[\"b4a1\",\"粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄\"],[\"b5a1\",\"機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京\"],[\"b6a1\",\"供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈\"],[\"b7a1\",\"掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲\"],[\"b8a1\",\"検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向\"],[\"b9a1\",\"后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込\"],[\"baa1\",\"此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷\"],[\"bba1\",\"察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時\"],[\"bca1\",\"次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周\"],[\"bda1\",\"宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償\"],[\"bea1\",\"勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾\"],[\"bfa1\",\"拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾\"],[\"c0a1\",\"澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線\"],[\"c1a1\",\"繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎\"],[\"c2a1\",\"臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只\"],[\"c3a1\",\"叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵\"],[\"c4a1\",\"帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓\"],[\"c5a1\",\"邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到\"],[\"c6a1\",\"董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入\"],[\"c7a1\",\"如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦\"],[\"c8a1\",\"函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美\"],[\"c9a1\",\"鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服\"],[\"caa1\",\"福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋\"],[\"cba1\",\"法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満\"],[\"cca1\",\"漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒\"],[\"cda1\",\"諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃\"],[\"cea1\",\"痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯\"],[\"cfa1\",\"蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕\"],[\"d0a1\",\"弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲\"],[\"d1a1\",\"僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨\"],[\"d2a1\",\"辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨\"],[\"d3a1\",\"咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉\"],[\"d4a1\",\"圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩\"],[\"d5a1\",\"奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓\"],[\"d6a1\",\"屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏\"],[\"d7a1\",\"廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚\"],[\"d8a1\",\"悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛\"],[\"d9a1\",\"戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼\"],[\"daa1\",\"據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼\"],[\"dba1\",\"曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍\"],[\"dca1\",\"棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣\"],[\"dda1\",\"檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾\"],[\"dea1\",\"沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌\"],[\"dfa1\",\"漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼\"],[\"e0a1\",\"燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱\"],[\"e1a1\",\"瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰\"],[\"e2a1\",\"癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬\"],[\"e3a1\",\"磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐\"],[\"e4a1\",\"筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆\"],[\"e5a1\",\"紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺\"],[\"e6a1\",\"罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋\"],[\"e7a1\",\"隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙\"],[\"e8a1\",\"茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈\"],[\"e9a1\",\"蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙\"],[\"eaa1\",\"蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞\"],[\"eba1\",\"襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫\"],[\"eca1\",\"譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊\"],[\"eda1\",\"蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸\"],[\"eea1\",\"遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮\"],[\"efa1\",\"錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞\"],[\"f0a1\",\"陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰\"],[\"f1a1\",\"顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷\"],[\"f2a1\",\"髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈\"],[\"f3a1\",\"鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠\"],[\"f4a1\",\"堯槇遙瑤凜熙\"],[\"f9a1\",\"纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德\"],[\"faa1\",\"忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱\"],[\"fba1\",\"犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚\"],[\"fca1\",\"釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑\"],[\"fcf1\",\"ⅰ\",9,\"￢￤＇＂\"],[\"8fa2af\",\"˘ˇ¸˙˝¯˛˚～΄΅\"],[\"8fa2c2\",\"¡¦¿\"],[\"8fa2eb\",\"ºª©®™¤№\"],[\"8fa6e1\",\"ΆΈΉΊΪ\"],[\"8fa6e7\",\"Ό\"],[\"8fa6e9\",\"ΎΫ\"],[\"8fa6ec\",\"Ώ\"],[\"8fa6f1\",\"άέήίϊΐόςύϋΰώ\"],[\"8fa7c2\",\"Ђ\",10,\"ЎЏ\"],[\"8fa7f2\",\"ђ\",10,\"ўџ\"],[\"8fa9a1\",\"ÆĐ\"],[\"8fa9a4\",\"Ħ\"],[\"8fa9a6\",\"Ĳ\"],[\"8fa9a8\",\"ŁĿ\"],[\"8fa9ab\",\"ŊØŒ\"],[\"8fa9af\",\"ŦÞ\"],[\"8fa9c1\",\"æđðħıĳĸłŀŉŋøœßŧþ\"],[\"8faaa1\",\"ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ\"],[\"8faaba\",\"ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ\"],[\"8faba1\",\"áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ\"],[\"8fabbd\",\"ġĥíìïîǐ\"],[\"8fabc5\",\"īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż\"],[\"8fb0a1\",\"丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄\"],[\"8fb1a1\",\"侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐\"],[\"8fb2a1\",\"傒傓傔傖傛傜傞\",4,\"傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂\"],[\"8fb3a1\",\"凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋\"],[\"8fb4a1\",\"匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿\"],[\"8fb5a1\",\"咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒\"],[\"8fb6a1\",\"嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍\",5,\"嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤\",4,\"囱囫园\"],[\"8fb7a1\",\"囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭\",4,\"坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡\"],[\"8fb8a1\",\"堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭\"],[\"8fb9a1\",\"奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿\"],[\"8fbaa1\",\"嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖\",4,\"寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩\"],[\"8fbba1\",\"屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤\"],[\"8fbca1\",\"巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪\",4,\"幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧\"],[\"8fbda1\",\"彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐\",4,\"忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷\"],[\"8fbea1\",\"悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐\",4,\"愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥\"],[\"8fbfa1\",\"懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵\"],[\"8fc0a1\",\"捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿\"],[\"8fc1a1\",\"擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝\"],[\"8fc2a1\",\"昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝\"],[\"8fc3a1\",\"杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮\",4,\"桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏\"],[\"8fc4a1\",\"棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲\"],[\"8fc5a1\",\"樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽\"],[\"8fc6a1\",\"歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖\"],[\"8fc7a1\",\"泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞\"],[\"8fc8a1\",\"湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊\"],[\"8fc9a1\",\"濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔\",4,\"炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃\",4,\"焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠\"],[\"8fcaa1\",\"煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻\"],[\"8fcba1\",\"狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽\"],[\"8fcca1\",\"珿琀琁琄琇琊琑琚琛琤琦琨\",9,\"琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆\"],[\"8fcda1\",\"甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹\",5,\"疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹\"],[\"8fcea1\",\"瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢\",6,\"皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢\"],[\"8fcfa1\",\"睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳\"],[\"8fd0a1\",\"碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞\"],[\"8fd1a1\",\"秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰\"],[\"8fd2a1\",\"笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙\",5],[\"8fd3a1\",\"籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝\"],[\"8fd4a1\",\"綞綦綧綪綳綶綷綹緂\",4,\"緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭\"],[\"8fd5a1\",\"罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮\"],[\"8fd6a1\",\"胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆\"],[\"8fd7a1\",\"艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸\"],[\"8fd8a1\",\"荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓\"],[\"8fd9a1\",\"蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏\",4,\"蕖蕙蕜\",6,\"蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼\"],[\"8fdaa1\",\"藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠\",4,\"虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣\"],[\"8fdba1\",\"蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃\",6,\"螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵\"],[\"8fdca1\",\"蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊\",4,\"裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺\"],[\"8fdda1\",\"襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔\",4,\"觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳\"],[\"8fdea1\",\"誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂\",4,\"譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆\"],[\"8fdfa1\",\"貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢\"],[\"8fe0a1\",\"踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁\"],[\"8fe1a1\",\"轃轇轏轑\",4,\"轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃\"],[\"8fe2a1\",\"郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿\"],[\"8fe3a1\",\"釂釃釅釓釔釗釙釚釞釤釥釩釪釬\",5,\"釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵\",4,\"鉻鉼鉽鉿銈銉銊銍銎銒銗\"],[\"8fe4a1\",\"銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿\",4,\"鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶\"],[\"8fe5a1\",\"鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉\",4,\"鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹\"],[\"8fe6a1\",\"镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂\"],[\"8fe7a1\",\"霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦\"],[\"8fe8a1\",\"頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱\",4,\"餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵\"],[\"8fe9a1\",\"馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿\",4],[\"8feaa1\",\"鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪\",4,\"魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸\"],[\"8feba1\",\"鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦\",4,\"鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻\"],[\"8feca1\",\"鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵\"],[\"8feda1\",\"黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃\",4,\"齓齕齖齗齘齚齝齞齨齩齭\",4,\"齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥\"]]');\n\n/***/ }),\n\n/***/ 6258:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('{\"uChars\":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],\"gbChars\":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}');\n\n/***/ }),\n\n/***/ 4346:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"a140\",\"\",62],[\"a180\",\"\",32],[\"a240\",\"\",62],[\"a280\",\"\",32],[\"a2ab\",\"\",5],[\"a2e3\",\"€\"],[\"a2ef\",\"\"],[\"a2fd\",\"\"],[\"a340\",\"\",62],[\"a380\",\"\",31,\"　\"],[\"a440\",\"\",62],[\"a480\",\"\",32],[\"a4f4\",\"\",10],[\"a540\",\"\",62],[\"a580\",\"\",32],[\"a5f7\",\"\",7],[\"a640\",\"\",62],[\"a680\",\"\",32],[\"a6b9\",\"\",7],[\"a6d9\",\"\",6],[\"a6ec\",\"\"],[\"a6f3\",\"\"],[\"a6f6\",\"\",8],[\"a740\",\"\",62],[\"a780\",\"\",32],[\"a7c2\",\"\",14],[\"a7f2\",\"\",12],[\"a896\",\"\",10],[\"a8bc\",\"ḿ\"],[\"a8bf\",\"ǹ\"],[\"a8c1\",\"\"],[\"a8ea\",\"\",20],[\"a958\",\"\"],[\"a95b\",\"\"],[\"a95d\",\"\"],[\"a989\",\"〾⿰\",11],[\"a997\",\"\",12],[\"a9f0\",\"\",14],[\"aaa1\",\"\",93],[\"aba1\",\"\",93],[\"aca1\",\"\",93],[\"ada1\",\"\",93],[\"aea1\",\"\",93],[\"afa1\",\"\",93],[\"d7fa\",\"\",4],[\"f8a1\",\"\",93],[\"f9a1\",\"\",93],[\"faa1\",\"\",93],[\"fba1\",\"\",93],[\"fca1\",\"\",93],[\"fda1\",\"\",93],[\"fe50\",\"⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌\"],[\"fe80\",\"䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓\",6,\"䶮\",93],[\"8135f437\",\"\"]]');\n\n/***/ }),\n\n/***/ 7014:\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = JSON.parse('[[\"0\",\"\\\\u0000\",128],[\"a1\",\"｡\",62],[\"8140\",\"　、。，．・：；？！゛゜´｀¨＾￣＿ヽヾゝゞ〃仝々〆〇ー―‐／＼～∥｜…‥‘’“”（）〔〕［］｛｝〈\",9,\"＋－±×\"],[\"8180\",\"÷＝≠＜＞≦≧∞∴♂♀°′″℃￥＄￠￡％＃＆＊＠§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓\"],[\"81b8\",\"∈∋⊆⊇⊂⊃∪∩\"],[\"81c8\",\"∧∨￢⇒⇔∀∃\"],[\"81da\",\"∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬\"],[\"81f0\",\"Å‰♯♭♪†‡¶\"],[\"81fc\",\"◯\"],[\"824f\",\"０\",9],[\"8260\",\"Ａ\",25],[\"8281\",\"ａ\",25],[\"829f\",\"ぁ\",82],[\"8340\",\"ァ\",62],[\"8380\",\"ム\",22],[\"839f\",\"Α\",16,\"Σ\",6],[\"83bf\",\"α\",16,\"σ\",6],[\"8440\",\"А\",5,\"ЁЖ\",25],[\"8470\",\"а\",5,\"ёж\",7],[\"8480\",\"о\",17],[\"849f\",\"─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂\"],[\"8740\",\"①\",19,\"Ⅰ\",9],[\"875f\",\"㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡\"],[\"877e\",\"㍻\"],[\"8780\",\"〝〟№㏍℡㊤\",4,\"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪\"],[\"889f\",\"亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭\"],[\"8940\",\"院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円\"],[\"8980\",\"園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改\"],[\"8a40\",\"魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫\"],[\"8a80\",\"橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄\"],[\"8b40\",\"機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救\"],[\"8b80\",\"朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈\"],[\"8c40\",\"掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨\"],[\"8c80\",\"劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向\"],[\"8d40\",\"后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降\"],[\"8d80\",\"項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷\"],[\"8e40\",\"察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止\"],[\"8e80\",\"死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周\"],[\"8f40\",\"宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳\"],[\"8f80\",\"準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾\"],[\"9040\",\"拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨\"],[\"9080\",\"逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線\"],[\"9140\",\"繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻\"],[\"9180\",\"操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只\"],[\"9240\",\"叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄\"],[\"9280\",\"逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓\"],[\"9340\",\"邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬\"],[\"9380\",\"凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入\"],[\"9440\",\"如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅\"],[\"9480\",\"楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美\"],[\"9540\",\"鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷\"],[\"9580\",\"斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋\"],[\"9640\",\"法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆\"],[\"9680\",\"摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒\"],[\"9740\",\"諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲\"],[\"9780\",\"沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯\"],[\"9840\",\"蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕\"],[\"989f\",\"弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲\"],[\"9940\",\"僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭\"],[\"9980\",\"凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨\"],[\"9a40\",\"咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸\"],[\"9a80\",\"噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩\"],[\"9b40\",\"奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀\"],[\"9b80\",\"它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏\"],[\"9c40\",\"廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠\"],[\"9c80\",\"怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛\"],[\"9d40\",\"戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫\"],[\"9d80\",\"捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼\"],[\"9e40\",\"曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎\"],[\"9e80\",\"梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣\"],[\"9f40\",\"檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯\"],[\"9f80\",\"麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌\"],[\"e040\",\"漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝\"],[\"e080\",\"烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱\"],[\"e140\",\"瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿\"],[\"e180\",\"痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬\"],[\"e240\",\"磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰\"],[\"e280\",\"窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆\"],[\"e340\",\"紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷\"],[\"e380\",\"縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋\"],[\"e440\",\"隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤\"],[\"e480\",\"艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈\"],[\"e540\",\"蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬\"],[\"e580\",\"蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞\"],[\"e640\",\"襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧\"],[\"e680\",\"諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊\"],[\"e740\",\"蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜\"],[\"e780\",\"轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮\"],[\"e840\",\"錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙\"],[\"e880\",\"閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰\"],[\"e940\",\"顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃\"],[\"e980\",\"騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈\"],[\"ea40\",\"鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯\"],[\"ea80\",\"黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙\"],[\"ed40\",\"纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏\"],[\"ed80\",\"塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱\"],[\"ee40\",\"犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙\"],[\"ee80\",\"蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑\"],[\"eeef\",\"ⅰ\",9,\"￢￤＇＂\"],[\"f040\",\"\",62],[\"f080\",\"\",124],[\"f140\",\"\",62],[\"f180\",\"\",124],[\"f240\",\"\",62],[\"f280\",\"\",124],[\"f340\",\"\",62],[\"f380\",\"\",124],[\"f440\",\"\",62],[\"f480\",\"\",124],[\"f540\",\"\",62],[\"f580\",\"\",124],[\"f640\",\"\",62],[\"f680\",\"\",124],[\"f740\",\"\",62],[\"f780\",\"\",124],[\"f840\",\"\",62],[\"f880\",\"\",124],[\"f940\",\"\"],[\"fa40\",\"ⅰ\",9,\"Ⅰ\",9,\"￢￤＇＂㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊\"],[\"fa80\",\"兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯\"],[\"fb40\",\"涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神\"],[\"fb80\",\"祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙\"],[\"fc40\",\"髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑\"]]');\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/global */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/node module decorator */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.nmd = function(module) {\n/******/ \t\t\tmodule.paths = [];\n/******/ \t\t\tif (!module.children) module.children = [];\n/******/ \t\t\treturn module;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(2536);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=pdfmake.js.map"
  },
  {
    "path": "public/assets/DataTables/pdfmake-0.2.7/vfs_fonts.js",
    "content": "this.pdfMake = this.pdfMake || {}; this.pdfMake.vfs = {\n  \"Roboto-Italic.ttf\": \"AAEAAAARAQAABAAQR0RFRqWLoiAAAdT4AAACWEdQT1PInCKzAAHXUAAAZfhHU1VChRYO9AACPUgAABX2T1MvMpeDsUwAAAGYAAAAYGNtYXDOyFo6AAAWdAAABoJjdnQgO/gmfQAAL1AAAAD+ZnBnbagFhDIAABz4AAAPhmdhc3AACAAZAAHU7AAAAAxnbHlmJ9ZJigAAOpAAAZd6aGVhZAakHScAAAEcAAAANmhoZWEMnBKaAAABVAAAACRobXR4O9/cTQAAAfgAABR8bG9jYY3Y7xYAADBQAAAKQG1heHAIzxDGAAABeAAAACBuYW1lOSJt4gAB0gwAAALAcG9zdP9hAGQAAdTMAAAAIHByZXB5WM7TAAAsgAAAAs4AAQAAAAMBSDPLHDFfDzz1ABsIAAAAAADE8BEuAAAAAN8Gv2v6N/3VCUMIcwACAAkAAgAAAAAAAAABAAAHbP4MAAAJA/o3/mwJQwgAAbMAAAAAAAAAAAAAAAAFHwABAAAFHwCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAAQAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA5YAZAAAAAAAAAAAAfcAAAH3AAACAABEAnwAyQTHAFIEXABJBa8AugTUADkBWwCsAqgAbQK0/5ADWABrBGcATAGH/48CJQAaAgwANAM0/5AEXABqBFwA+gRcABgEXAA1BFwABQRcAHIEXABtBFwAnQRcAEAEXACUAesAKQGu/5sD8gBCBEIAcAQPADsDqwClBvgAQQUQ/68E1gA7BQ0AcAUYADsEaQA7BEoAOwVJAHQFiQA7AhwASQRIAAcE3gA7BC4AOwbGADsFiQA7BVcAcwTlADsFVwBrBMgAOwScACkEoQCpBQgAYwTxAKUG4gDDBN3/1ASpAKgEpv/sAg8AAAMwAMACD/97Az4ATwOA/4ECZgDQBDkAMQRcAB8EEABGBGAARwQdAEUCswB1BFwAAwRGACAB4wAvAdv/EwPvACAB4wAvBs4AHgRJACAEbQBGBFz/1wRpAEYCoQAgBAEALgKKAEMERwBbA8IAbgXVAIAD2v/FA6z/qgPa/+4CoAA3AeUAIgKg/40FRwBpAeX/8QQ/AFAEg//zBYkAEgQUAEMB3f/4BML/2gM/ANoGGQBeA3kAwwOuAFYETACBBhoAXQOPAPgC5gDoBCYAJgLiAF0C4gBvAm8A1QRm/+YDzAB4AgcApQHt/8gC4gDgA4gAvwOtABEFuQC6Bg8AtQYTAJ4Drf/RB0H/gwQkACgFVwAgBJYAOQSdAB8GjgATBI0AXARvAEQEZgA6BHn/4ASjAEYFcAA2AewALwRSAC4ELgAjAhkAJAVgADUEZgAlB2YAVQcMAEcB7QA0BV0AUgKl/0cFVQBmBHAAQwVlAGMEzQBbAfX/CQQYAD8DpwEYA3MBKAOZAPgDUQEHAeMBDgKZAQECGv+uA6kA3gLlAMMCSP/pAAD9agAA/eoAAP0LAAD99AAA/NsAAPy6Af4BIwPtAPQCEQClBFEARAV5/7IFSABnBRf/xARvAAwFiQBEBG//2wWPAFYFXgCFBSkACgRjAEgEmf/xA+QAhQRmAEUEMAApBAUAigRmACUEawB1AoQAhARN/7gDzgBABKAAYARm/90ELQBKBGUASAQMAIcEPABoBXgAQAVvAE4GZABnBH4AUgQiAGcGGABoBdIAogU8AHMIUP/NCGMARAZRALQFiABCBO4ANgXW/4wHC/+rBJwAJQWJAEQFf//LBOEAlAX+AFsFrQBBBVAAywdNAEIHhABCBeMAigbAAEQE3gA2BTwAdgb6AEkE8f/pBEsARwRwADEDQgAuBK//jQXy/6cD8QAgBHsAMAQyADAEfP/IBcEAMQR6ADAEewAwA7sAYAWhAEkEmgAwBDkAeQZHADAGbAAlBNEAVgYQADEENwAxBC0AMgZWADEEQv+/BEYAIAQtAE4Glf/DBq8AMARwACAEewAwBtMAbgX9AE8ENgAvBvUASgXLAC0Erv+6BCb/ogbWAFsF3gBPBp4AJgW1ACoIwABJB5UALwQE/80Dvf/JBUgAZwRpAEME5ACtA+UAhQVIAGcEZgBDBssAdAX1AFIG0wBuBf0ATwUKAGkEJwBMBNgAQAAA/OcAAP0KAAD+FgAA/jsAAPo3AAD6TgXlAEQE0QAwBDYALwT0ADsEZ//XBEIANQN2ACUEwABEA+cAJQdx/6sGOv+nBXkARASeADAE4wA2BFwALgZaALwFWgB2BdsAOwS+ADAHkwA7BYgAJQf8AEIGvwAlBcEAawSvAFwE+//UBBT/xQb2AKwFNABXBZoAywR9AHkFRgDKBEkAlAVGABwGAACIBJoABATjADYEOQAuBdr/ywTT/8gFhwBEBGYAJQXtADsE0AAwByEAOwYYADEFXQBSBIQAPASE//0Env/5A5n/6QUQ/9QEKf/FBNEALgZiADEGsABIBiYArQUEAGgEKQCwA+kAoAeG/+AGRP/aB74APAZvACME0QBlA/4ATQWCAJsE+gB9BTwAaAXe/8sE1//IAwkA8wP/AAAH9AAAA/8AAAf0AAACrgAAAgQAAAFcAAAEZgAAAikAAAGfAAABAgAAANUAAAAAAAACLQAaAi0AGgUiAKYGGQCYA4r/XgGOALABjgCJAYz/lwGOANICyAC4AtAAlQKt/5QESAB3BG3/9gKeAKEDsQA4BTsAOAF0AFIHbwCWAlUAXQJVAAQDh//wAuIAjwLiAGQC4gCKAuIAkALiAKIC4gB7AuIAqgNHAH4C4v/cAuIALQLi/6sC4v+8AuL/sgLi/9gC4v/eAuL/8ALi/8kC4v/4BIP/8wYlAAoGXwA5CD8AOwW+AAkF/AAfBFwAUQWtAEMEAwBKBFIACwUf//IFJv/lBbsAzAOxAEsH+wA1BNsA6wTxAH8GAQC2BqwAkgalAJAGQwC+BG0ATQVkACQEi/+tBHAAqwSgAEEH+wBLAf3/FQRfADMEQgBwA/z/0wQZABgD6QBCAkQAdwJ8AHEB9f/kBNcAdQRNAFkEaAB1BqAAdQagAHUEyAB1BmgAKAAAAAAH9f+rCDUAXALY/+oC2ABsAtgAHAPxAGkD8QAnA/EAcAPwAEsD8QBKA/H/9wPxABcD8f/9A/EAvQPxAEYEA//dBAsAdQQz/7cF5gCUBEYAeQRbAEIEBwBuBAAAEgQpAB0EmABGBDsAHgSYAEwEvQAeBdQAHgOZAB4ENAAeA7L/9gHaACsEvgAeBIgATAOvAB4EAAASBBQABgOFABkDkwAeBEb/sASYAEwERv+wA27/0wSqAB4D0v/WBT4AUgTwAH0EzQAOBUkAbQRaAEgHCv/DBxgAHgVKAG4EqQAeBDkAIAT9/4kF3f+vBB8AEgTGACAELQAfBJz/xAQAAFoFAQAeBEgAVgYgAB4GeQAeBPYAUQXNACAELgAgBFoAIAZFAB4EZP/gA/P/+gYY/68EVwAfBOMAHwUPAGoFlwBQBEcAdQSE/7cGMQBtBEgAVQRIAB4FmAAuBKYAQAQfABIEnABGBBQAAAPGAB8H5AAeBIf/3gLY//sC2P/xAtgAFwLYAB0C2AAvAtgACALYADcDewCTAqABCwPIAB4EGv+ZBJ8ASAUjAEQE/QBEA/UAJgUVAEQD8AAmBF0AHgRaAEgEMAAeBGP/pgHvAPwDiQESAAD9KgPSANMD1gAiA/AAzgPXAM0DkwAeA4QBEgODARMC4gCPAuIAZALiAIoC4gCQAuIAogLiAHsC4gCqBVgAgAWDAIEFaABEBbMAgwW2AIMDuAC8BF8AOQQ3/4EEqv/TBEn/1QQOACsDiQEUAYb/vgZxAEwElgA+Ae3/DwRm/6wEZv/jBGb/uARmACwEZgBWBGYAJARmAGYEZgAbBGYAQARmAQ0CAP8JAf//CQH2AC8B9v94AfYALwQwAB4E2gBkBAEAYgRcAB8EEwBEBHAAQwRpACMEfABCBGv/1wR5AEIEHQBGBFwANQRO/78DaACpBLEALAOZ/+kGCv+aA9oAHgSY//QEvQAeBL0AHgH3AAACJQAaBTYALwU2AC8EZAA+BKEAqQKK//QFEP+vBRD/rwUQ/68FEP+vBRD/rwUQ/68FEP+vBQ0AcARpADsEaQA7BGkAOwRpADsCHABJAhwASQIcAEkCHABJBYkAOwVXAHMFVwBzBVcAcwVXAHMFVwBzBQgAYwUIAGMFCABjBQgAYwSpAKgEOQAxBDkAMQQ5ADEEOQAxBDkAMQQ5ADEEOQAxBBAARgQdAEUEHQBFBB0ARQQdAEUB7AAvAewALwHsAC8B7AAvBEkAIARtAEYEbQBGBG0ARgRtAEYEbQBGBEcAWwRHAFsERwBbBEcAWwOs/6oDrP+qBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBQ0AcAQQAEYFDQBwBBAARgUNAHAEEABGBQ0AcAQQAEYFGAA7BPYARwRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUFSQB0BFwAAwVJAHQEXAADBUkAdARcAAMFSQB0BFwAAwWJADsERgAgAhwASQHsABECHABJAewALgIcAEkB7AAvAhz/iwHj/20CHABJBmQASQO+AC8ESAAHAfX/CQTeADsD7wAgBC4AOwHjAC8ELgA7AeP/ogQuADsCeQAvBC4AOwK/AC8FiQA7BEkAIAWJADsESQAgBYkAOwRJACAESQAgBVcAcwRtAEYFVwBzBG0ARgVXAHMEbQBGBMgAOwKhACAEyAA7AqH/nwTIADsCoQAgBJwAKQQBAC4EnAApBAEALgScACkEAQAuBJwAKQQBAC4EnAApBAEALgShAKkCigBDBKEAqQKKAEMEoQCpArIAQwUIAGMERwBbBQgAYwRHAFsFCABjBEcAWwUIAGMERwBbBQgAYwRHAFsFCABjBEcAWwbiAMMF1QCABKkAqAOs/6oEqQCoBKb/7APa/+4Epv/sA9r/7gSm/+wD2v/uB0H/gwaOABMFVwAgBGYAOgRd/68EXf+vBAcAbgRj/6YEY/+mBGP/pgRj/6YEY/+mBGP/pgRj/6YEWgBIA8gAHgPIAB4DyAAeA8gAHgHaACsB2gArAdoAKwHaACsEvQAeBJgATASYAEwEmABMBJgATASYAEwEWwBCBFsAQgRbAEIEWwBCBAsAdQRj/6YEY/+mBGP/pgRaAEgEWgBIBFoASARaAEgEXQAeA8gAHgPIAB4DyAAeA8gAHgPIAB4EiABMBIgATASIAEwEiABMBL4AHgHaAA4B2gArAdoAKwHk/4IB2gArA7L/9gQ0AB4DmQAeA5kAHgOZAB4DmQAeBL0AHgS9AB4EvQAeBJgATASYAEwEmABMBCkAHQQpAB0EKQAdBAAAEgQAABIEAAASBAAAEgQHAG4EBwBuBAcAbgRbAEIEWwBCBFsAQgRbAEIEWwBCBFsAQgXmAJQECwB1BAsAdQQD/90EA//dBAP/3QUQ/68EzQADBe0AEQKAABcFawBrBQ3/7QU9AB4ChAAgBRD/rwTWADsEaQA7BKb/7AWJADsCHABJBN4AOwbGADsFiQA7BVcAcwTlADsEoQCpBKkAqATd/9QCHABJBKkAqARjAEgEMAApBGYAJQKEAIQEPABoBFIALgRtAEYEZv/mA8IAbgRO/78ChABlBDwAaARtAEYEPABoBmQAZwRpADsEUQBEBJwAKQIcAEkCHABJBEgABwT9AEQE3gA7BOEAlAUQ/68E1gA7BFEARARpADsFiQBEBsYAOwWJADsFVwBzBYkARATlADsFDQBwBKEAqQTd/9QEOQAxBB0ARQR7ADAEbQBGBFz/1wQQAEYDrP+qA9r/xQQdAEUDQgAuBAEALgHjAC8B7AAvAdv/EwQyADADrP+qBuIAwwXVAIAG4gDDBdUAgAbiAMMF1QCABKkAqAOs/6oBWwCsAnwAyQQAAEQB9f8JAY4AiQbGADsGzgAeBRD/rwQ5ADEEaQA7BYkARAQdAEUEewAwBV4AhQVvAE4E5ACtA+UAhQgZAEYJAwBzBJwAJQPxACAFDQBwBBAARgSpAKgD5ACFAhwASQcL/6sF8v+nAhwASQUQ/68EOQAxBRD/rwQ5ADEHQf+DBo4AEwRpADsEHQBFBV0AUgQYAD8EGAA/Bwv/qwXy/6cEnAAlA/EAIAWJAEQEewAwBYkARAR7ADAFVwBzBG0ARgVIAGcEaQBDBUgAZwRpAEMFPAB2BC0AMgThAJQDrP+qBOEAlAOs/6oE4QCUA6z/qgVQAMsEOQB5BsAARAYQADEEYABHBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQIcAEkB7AAvAhwADQHj//AFVwBzBG0ARgVXAHMEbQBGBVcAcwRtAEYFVwBzBG0ARgVXAHMEbQBGBVcAcwRtAEYFVwBzBG0ARgVVAGYEcABDBVUAZgRwAEMFVQBmBHAAQwVVAGYEcABDBVUAZgRwAEMFCABjBEcAWwUIAGMERwBbBWUAYwTNAFsFZQBjBM0AWwVlAGMEzQBbBWUAYwTNAFsFZQBjBM0AWwSpAKgDrP+qBKkAqAOs/6oEqQCoA6z/qgR+AAAEoQCpA7sAYAVQAMsEOQB5BFEARANCAC4GAACIBJoABARGACAE3gAsBN4ALARRABEDQv/nBREAWAQJADoEqQCoA+QAXgTd/9QD2v/FBDAAKQRK/9cGGQCYBFwAGARcADUEXAAFBFwAcgRwAIEEhABUBHAAlASEAH4FSQB0BFwAAwWJADsESQAgBRD/rwQ5ADEEaQA7BB0ARQIc/+AB7P+NBVcAcwRtAEYEyAA7AqEAIAUIAGMERwBbBIb/sQTWADsEXAAfBRgAOwRgAEcFGAA7BGAARwWJADsERgAgBN4AOwPvACAE3gA7A+8AIAQuADsB4//wBsYAOwbOAB4FiQA7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AAD//wAr/+0FcQSNBCYB8wAAAAcB8gHaAAD///+aAAAGAAYABiYChAAAAQcAdQKXAAAAC7YGGQ8BAU1WACs0AP////T/xgSjBh4GJgKGAAABBwB1AYIAHgALtgMwEQEBW1YAKzQA//8AEv38A+sEngYmAekAAAAHAcoA4v6e//8AlAAABikGHgYmAeUAAAEHAEQBpQAeAAu2BBgKAQFrVgArNAD//wCUAAAGKQYeBiYB5QAAAQcAdQIxAB4AC7YEFgoBAWtWACs0AP//AJQAAAYpBeYGJgHlAAABBwBqAXEAHgANtwUEHwoBAYRWACs0NAD//wB1AAAEZQYeBiYB4wAAAAcARACwAB7///+v/k4EiwWwBiYAJQAAAQcApAFmAAAAC7YDDgUBATlWACs0AP//ADH+TgPHBFAGJgBFAAABBwCkALQAAAALtgI7MQAATVYAKzQA//8AO/5YBLEFsAYmACkAAAEHAKQBJwAKAAu2BBACAABDVgArNAD//wBF/k4D2gRRBiYASQAAAQcApAD+AAAAC7YBLAAAAE1WACs0AP///6b+TgPjBI0GJgJDAAAABwCkAQsAAP//AB7+VgPwBI0GJgI4AAAABwCkANcACP////D+qgGfBDoGJgCNAAABBwCtAzYACgAOtAEHAgEBuP9/sFYAKzQAAAAAAA8AugADAAEECQAAAF4AAAADAAEECQABAAwAXgADAAEECQACAAwAagADAAEECQADABoAdgADAAEECQAEABoAdgADAAEECQAFACYAkAADAAEECQAGABoAtgADAAEECQAHAEAA0AADAAEECQAIAAwBEAADAAEECQAJACYBHAADAAEECQALABQBQgADAAEECQAMABQBQgADAAEECQANAFwBVgADAAEECQAOAFQBsgADAAEECQAZAAwAXgBDAG8AcAB5AHIAaQBnAGgAdAAgADIAMAAxADEAIABHAG8AbwBnAGwAZQAgAEkAbgBjAC4AIABBAGwAbAAgAFIAaQBnAGgAdABzACAAUgBlAHMAZQByAHYAZQBkAC4AUgBvAGIAbwB0AG8ASQB0AGEAbABpAGMAUgBvAGIAbwB0AG8AIABJAHQAYQBsAGkAYwBWAGUAcgBzAGkAbwBuACAAMwAuADAAMAA1ADsAIAAyADAAMgAyAFIAbwBiAG8AdABvAC0ASQB0AGEAbABp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As//8wLR//MC0//zAuH/8wLj//MC5f/zAuf/8wMJ//MDC//zAw3/8wM+//MDm//zA6j/8wPO//MD0f/zA/7/8wQB//MEHP/zBB7/8wQg//MEW//zBF3/8wRf//MEYf/zBGP/8wRl//MEZ//zBGn/8wRr//MEbf/zBG//8wRx//MEsP/zBMn/8wBAAEf/7ABI/+wASf/sAEv/7ABV/+wAlP/sAJn/7AC7/+wAyP/sAMn/7AD3/+wBA//sAR7/7AEi/+wBQv/sAWD/7AFh/+wBa//sArL/7AKz/+wCtP/sArX/7AK2/+wCzv/sAtD/7ALS/+wC1P/sAtb/7ALY/+wC2v/sAtz/7ALe/+wC4P/sAuL/7ALk/+wC5v/sAuj/7AOv/+wD1f/sA9n/7APc/+wD9//sA/3/7AQC/+wEEP/sBBL/7AQT/+wEH//sBC7/7ARI/+wESv/sBEz/7ARO/+wEUP/sBFL/7ARU/+wEVv/sBGr/7ARs/+wEbv/sBHL/7ASt/+wEuv/sBLz/7ABAACf/5gAr/+YAM//mADX/5gCD/+YAk//mAJj/5gCz/+YAuP/CAMQAEADT/+YBCP/mARf/5gEb/+YBHf/mAR//5gEh/+YBQf/mAWr/5gJV/+YCVv/mAlj/5gJZ/+YCl//mAqH/5gKi/+YCo//mAqT/5gKl/+YCzf/mAs//5gLR/+YC0//mAuH/5gLj/+YC5f/mAuf/5gMJ/+YDC//mAw3/5gM+/+YDm//mA6j/5gPO/+YD0f/mA/7/5gQB/+YEHP/mBB7/5gQg/+YEW//mBF3/5gRf/+YEYf/mBGP/5gRl/+YEZ//mBGn/5gRr/+YEbf/mBG//5gRx/+YEsP/mBMn/5gBHABAAAAASAAAAR//nAEj/5wBJ/+cAS//nAFX/5wCU/+cAmf/nALv/5wDEAA8AyP/nAMn/5wD3/+cBA//nAR7/5wEi/+cBQv/nAWD/5wFh/+cBa//nAYYAAAGKAAABjgAAAY8AAAKy/+cCs//nArT/5wK1/+cCtv/nAs7/5wLQ/+cC0v/nAtT/5wLW/+cC2P/nAtr/5wLc/+cC3v/nAuD/5wLi/+cC5P/nAub/5wLo/+cDr//nA9X/5wPZ/+cD3P/nA/f/5wP9/+cEAv/nBBD/5wQS/+cEE//nBB//5wQu/+cESP/nBEr/5wRM/+cETv/nBFD/5wRS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/+sC4P/rAuL/6wLk/+sC5v/rAuj/6wL2/vgDCv/rAwz/6wMO/+sDHwAUAyEAFAMjABQDJv/qAyj/6gMq/+oDLP/qAy7/6gMw/+oDNP/oA0P/wANE/8ADRf/AA0b/wANH/8ADSP/AA0n/wANe/8ADX//AA2D/wAOX/1YDn/9WA6//6wOz/+oDtf/rA7f/6AO6/+oDu//rA7z/6gPD/vgDx/9WA9IAFAPU/94D1f/rA9f/6wPZ/+sD2v/oA9z/6wPj/+gD6//oA/P/VgP0/94D9//rA/z/6AP9/+sEAv/rBAT/6AQJ/1YECv/eBAv/VgQM/94EEP/rBBL/6wQT/+sEHf/rBB//6wQh/+sEJf/oBCf/6AQp/+gELv/rBC//VgQw/94EMf9WBDL/3gQz/1YENP/eBDX/VgQ2/94EN/9WBDj/3gQ5/1YEOv/eBDv/VgQ8/94EPf9WBD7/3gQ//1YEQP/eBEH/VgRC/94EQ/9WBET/3gRF/1YERv/eBEj/6wRK/+sETP/rBE7/6wRQ/+sEUv/rBFT/6wRW/+sEXP/rBF7/6wRg/+sEYv/rBGT/6wRm/+sEaP/rBGr/6wRs/+sEbv/rBHD/6wRy/+sEdP/qBHb/6gR4/+oEev/qBHz/6gR+/+oEgP/qBIL/6ASE/+gEhv/oBIgAFASq/1YEq//eBK3/6wSx/+sEtf/qBLr/6wS8/+sE0AAUBNT/6ATW/+gE3P/ABOP/wAT7/8AAAgCgAAQABAAAAAYABgABAAsADAACABMAEwAEACUAKgAFACwALQALAC8ANgANADgAOAAVADoAPwAWAEUARgAcAEkASgAeAEwATAAgAE8ATwAhAFEAVAAiAFYAVgAmAFgAWAAnAFoAXQAoAF8AXwAsAIoAigAtAJYAlgAuAJ0AnQAvALEAtQAwALcAuQA1ALsAuwA4AL0AvgA5AMAAwQA7AMMAxQA9AMcAzgBAANIA0gBIANQA3gBJAOAA7wBUAPEA8QBkAPYA+ABlAPsA/ABoAP4BAABqAQMBBQBtAQoBCgBwAQ0BDQBxARgBGgByASIBIgB1AS4BMAB2ATMBNQB5ATcBNwB8ATkBOQB9ATsBOwB+AUMBRAB/AVQBVACBAVYBVgCCAVgBWACDAVwBXgCEAYQBhQCHAYcBiQCJAegB6ACMAeoB6wCNAe0B7QCPAfAB8ACQAfsB/QCRAkACQACUAkMCQwCVAlUCVQCWAlcCWACXAosCjACZAo4CjgCbApACpQCcAqoCsQCyArMCtgC6ArsCwAC+AsUCzQDEAs8CzwDNAtEC0QDOAtMC0wDPAtUC1QDQAtcC4ADRAukC6wDbAu0C7QDeAu8C7wDfAvEC8QDgAvMC8wDhAvgC+ADiAvoC+gDjAvwC/ADkAv4C/gDlAwADAADmAwIDDgDnAxADEAD0AxIDEgD1AxQDFAD2Ax8DHwD3AyEDIQD4AyMDIwD5AzEDMQD6AzMDNgD7AzgDOAD/AzoDOgEAA0ADSQEBA1QDWAELA14DYAEQA2UDZQETA3cDegEUA34DgAEYA4kDiQEbA5cDnAEcA58DrgEiA7EDsQEyA7UDtQEzA7cDtwE0A7sDuwE1A74DvwE2A8EDwgE4A8QDygE6A8wDzgFBA9AD1QFEA9cD2AFKA9oD3QFMA+MD5AFQA+YD5gFSA+gD6AFTA+oD7QFUA/AD9QFYA/cD9wFeA/sD/AFfBAEEAQFhBAMEDAFiBA8EEAFsBBIEFQFuBBwEHQFyBCEEIQF0BCMEKQF1BC8EVwF8BFkEWQGlBFsEaAGmBHAEcAG0BIEEhgG1BIgEiAG7BIwEjQG8BJAEkAG+BJIEkwG/BJUElQHBBJcElwHCBKgErAHDBK4ErgHIBLAEsQHJBLMEswHLBLcEuQHMBLsEuwHPBL0EvwHQBMEEwQHTBMMEwwHUBMUEywHVBM0EzQHcBNAE0AHdBNME1wHeBNkE2QHjBNsE3AHkBOAE4AHmBOME4wHnBO4E7gHoBPsE+wHpBQIFAgHqBQYFBgHrAAIAmgAGAAYAAAALAAsAAQAQABAAAgASABIAAwAlACkABAAsADQACQA4AD4AEgBFAEcAGQBJAEkAHABMAEwAHQBRAFQAHgBWAFYAIgBaAFoAIwBcAF4AJACKAIoAJwCWAJYAKACxALQAKQC9AL0ALQDBAMEALgDHAMcALwDUANUAMADXANcAMgDaANoAMwDcAN4ANADgAOYANwDsAOwAPgDuAO4APwD3APcAQAD8APwAQQD+AP8AQgEEAQUARAEKAQoARgENAQ0ARwEYARoASAEuATAASwEzATUATgE3ATcAUQE5ATkAUgE7ATsAUwFDAUQAVAFUAVQAVgFWAVYAVwFYAVgAWAFcAV4AWQGEAYoAXAGOAY8AYwHoAegAZQHtAe0AZgHwAfEAZwH7Af0AaQIPAg8AbAIeAiAAbQJAAkAAcAJDAkMAcQJVAlUAcgJXAlgAcwKLAowAdQKOAo4AdwKQArYAeAK7AsAAnwLFAtUApQLXAuAAtgLpAusAwALtAu0AwwLvAu8AxALxAvEAxQLzAvMAxgL2AvYAxwL4AvgAyAL6AvoAyQL8AvwAygL+Av4AywMAAwAAzAMCAw4AzQMQAxAA2gMSAxIA2wMUAxQA3AMfAx8A3QMhAyEA3gMjAyMA3wMlAyUA4AMnAycA4QMpAykA4gMrAysA4wMtAy0A5AMvAy8A5QMxAzEA5gMzAzsA5wNAA0kA8ANUA1gA+gNeA2AA/wNlA2UBAgN2A3oBAwN+A4ABCAOJA4kBCwOXA5wBDAOfA64BEgOxA7EBIgO1A7UBIwO3A7cBJAO7A7sBJQO+A78BJgPBA8oBKAPMA84BMgPQA9UBNQPXA90BOwPjA+QBQgPmA+YBRAPoA+gBRQPqA+0BRgPwA/UBSgP3A/cBUAP7A/wBUQQBBAwBUwQPBBABXwQSBBUBYQQcBB0BZQQhBCEBZwQjBCkBaAQvBFcBbwRZBFkBmARbBGgBmQRwBHABpwRzBHMBqAR1BHUBqQSBBIYBqgSIBIgBsASMBI0BsQSQBJABswSSBJMBtASVBJUBtgSXBJcBtwSoBKwBuASuBK4BvQSwBLEBvgSzBLMBwAS3BLkBwQS7BLsBxAS9BL8BxQTBBMEByATDBMMByQTFBMsBygTNBM0B0QTQBNAB0gTSBNcB0wTZBNwB2QTgBOAB3QTjBOMB3gTpBOkB3wTuBO4B4AT5BPkB4QT7BPsB4gUCBQIB4wUGBQYB5AACAXQABgAGAA8ACwALAA8AEAAQABoAEgASABoAJQAlAAIAJgAmACQAJwAnABAAKAAoAAEAKQApAAQALgAuAAgALwAvAA0AMAAwABcAMwAzAAEANAA0ACUAOAA4ABIAOQA5AAgAOgA6ABwAOwA7ABgAPAA8ABEAPQA9AAwAPgA+ABkARQBFAAMARgBGAA4ARwBHABMASQBJAAUATABMAAkAUQBSAAkAUwBTAAYAVABUAA4AVgBWABsAWgBaAAcAXABcABUAXQBdAAcAXgBeAB8AigCKAA4AlgCWAAEAsQCxABYAsgCyAAIAswCzAAEAtAC0AAIAvQC9AAcAwQDBAAkAxwDHAA4A1ADVACAA2gDaABEA3gDeACEA5ADkACAA5gDmACAA7ADsACIA7gDuABUA9wD3AA4A/AD8ACMA/gD+ACMA/wD/AA4BBAEFACMBCgEKACMBDQENAAIBGAEYAAYBGQEZABwBGgEaAAcBLgEuAA4BLwEvABYBMAEwACIBMwEzABEBNAE0ABUBNQE1AA0BNwE3AA0BOQE5AA0BQwFDABEBRAFEABUBWAFYAAEBXAFcACIBXQFdABEBXgFeABUBhAGFAA8BhgGGABoBhwGJAA8BigGKABoBjgGPABoB6AHoAB0B7QHtAAoB8AHwAB4B8QHxABQB+wH7AAsB/AH8AAoB/QH9AAsCDwIPABQCHgIgABQCQAJAAAoCQwJDAAsCVQJVABACVwJYAAECiwKMAAECjgKOABICkAKWAAIClwKXABACmAKbAAQCoQKlAAECpgKpAAgCqgKqAAwCqwKxAAMCsgKyABMCswK2AAUCuwK7AAkCvALAAAYCxQLGAAcCxwLHAAICyALIAAMCyQLJAAICygLKAAMCywLLAAICzALMAAMCzQLNABACzgLOABMCzwLPABAC0ALQABMC0QLRABAC0gLSABMC0wLTABAC1ALUABMC1QLVAAEC1wLXAAQC2ALYAAUC2QLZAAQC2gLaAAUC2wLbAAQC3ALcAAUC3QLdAAQC3gLeAAUC3wLfAAQC4ALgAAUC6gLqAAkC9gL2AAgC+AL4AA0C+gL6ABcC/AL8ABcC/gL+ABcDAAMAABcDAwMDAAkDBQMFAAkDBwMIAAkDCQMJAAEDCgMKAAYDCwMLAAEDDAMMAAYDDQMNAAEDDgMOAAYDEAMQABsDEgMSABsDFAMUABsDHwMfABIDIQMhABIDIwMjABIDJQMlAAgDJwMnAAgDKQMpAAgDKwMrAAgDLQMtAAgDLwMvAAgDMQMxABgDMwMzAAwDNAM0AAcDNQM1AAwDNgM2ABkDNwM3AB8DOAM4ABkDOQM5AB8DOgM6ABkDOwM7AB8DQANBAAoDQgNCAB0DQwNJAAsDVANYAAoDXgNgAAsDZQNlAAoDdgN2ABQDdwN6AB4DfgOAAAoDiQOJAB0DlwOXAAIDmAOYAAQDmwObAAEDnAOcAAwDnwOfAAIDoAOgACQDoQOhAAQDogOiABkDpQOlAA0DqAOoAAEDqQOpACUDqgOqABIDqwOr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AAIAAQAAAAAAAAAeACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbABsAAAAPAA8AGAAPAA8ADwAYAAAAAAAAABgAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAZACQAAAAOABUAHAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAACgAFAAoAAAAAAAAAAAAAAAAAFQAFAAAAAAAVAAAAAAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAVAAUAEgAZABUAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAAAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAgAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAgACAAIACwALAAsACwAMAAYABgAGAAYABgAGAAYAAQABAAEAAQABAAAAAAAAAAAAAwAHAAcABwAHAAcACAAIAAgACAAJAAkABAAGAAQABgAEAAYAAgABAAIAAQACAAEAAgABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAIAAQACAAEAAgABAAIAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAMAAgAHAAIABwACAAcAAAAAAAAAAAAAAAAAFAARABQAEQAUABEAFAARABQAEQANAAAADQAAAA0AAAALAAgACwAIAAsACAALAAgACwAIAAsACAAWAAAADAAJAAwAFwAdABcAHQAXAB0AAAAAAAIAAAAAAAAAAAAKAAoACgAKAAoACgAKAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAA4ADgAOAA4AEgAKAAoACgAFAAUABQAFAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAHAAcABwAHAAAABUAAAAOAA4ADgAOAA4ADgAkABIAEgAAAAAAAAAEAAAAAAAAAAIADAAAAAAABAAAAAAAFwAAAAAAAAAAAAAAAgAAAAAADAAQAAAADAABAAAAAwAAAAgAAAAHAAAACQAAAAAACAAHAAgAAAAAAAAAAAAAAAAAIwAAAAAAHwAEAAAAAAAAAAAAAAAAAAIAAAAAAAIADQAQAAYAAQADAAcAAwABAAkAEwABAAMAEQAAAAAAAAADAAkAFgAAABYAAAAWAAAADAAJAA8ADwAAAAAADwAAAAMABAAGAAAAAAABAAMAAAAAABoACQABAAIAAAAAAAIAAQAMAAkAAAAQABMAAAAEAAYABAAGAAAAAAAAAAEAAAABAAEAEAATAAAAAAAAAAMAAAADAAIABwACAAEAAgAHAAAAAAAfAAkAHwAJAB8ACQAgACIAAAADAAEABAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAEAAYAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAAIABwACAAcAAgAHAAIABwACAAcAAgAHAAIABwACAAEAAgABAAIAAQACAAcAAgABAAsACAALAAgAAAAIAAAACAAAAAgAAAAIAAAACAAMAAkADAAJAAwACQAAAA0AAAAgACIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAABsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMABAAGAAAAAQAAAAAAAgAHAAAAAAAAAAgAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwACAAAAAAAAAAAAFAARAA0AAAALABoACQAaAAkAFgAAABcAHQAAAAoAAAAAAAAABQASAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAA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BOgB/QH+Af8E7QIAAgAE7gTvAgECAgIDAgoE/AT9AgsCDAINAg4CDwIQBQAFAQUDBQYFDwISAhMCFAIVAhYCFwIYAhkCGgIbAgQCBQIGAgcCCAIJAksCHQIeAh8CIAUJAiECIwIkAiUCJwIpAocDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQOTA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MFEAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgUTA4cDiAOKA4kDiwOMA40DjgOPA5ADkQOSA5QDlQOWBREFEgTcBN0E3gTfBOkE7ATqBOsE8ATxBPIE4AThBOIE+wT+BP8FAgUEBQUCEQUHBPME9AT1BPYE9wT4BPkE+gUUBRUFFgUXBQgFCgULAigFDQIqBQ4FDAImAhwCIgUcBR0AAgcAAPoB9wKCAeEB4AHfAd4B3QHcAdsB2gHZAdgCQwJCAkECQAI4AfYB9QH0AfMB8gHxAfAB7wHuAe0B7AHrAeoB6QHoAecB5gHlAeQB4wHiAfgB+QKEAoYChQKHAoMCiAJiAfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAhACEQUPAhICEwIUAhUCFgIXAhgCGQIaAhsCSwIdAh4CHwIgBQkCIQIjAiQCJQImAicCKAIpAisCLAIuAi0DQANBA0IDQwNEA0UDRgNHA0gDSQNKA0sDTANNA04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwN0BRADdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YFEwOHA4gDigOJA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWBREFEgTcBN0E3gTfBOAE4QTiBOME5ATlBOYE5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUE9gT3BPgCDwT5BPoE+wT8BP0E/gT/BQAFAQUCBQMFBAUFBQYFBwUUBRUFFgUXBQgFCgULBQ0CKgUOBQwCHAIiBRwFHQABAAEBewABAAEASwABAAEAuwABAAEANgABAAEAEwABAAIDGQMaAAIG5AbYAAIG5gbYAAEG7gABBvAAAQbyAAIAAQAUAB0AAAABAAIALwBPAAEAAwBJAEsCegACAAAAAQbeAAEABgLLAswC3QLeA2ADaQABAAYATQBOAvID3wPhBFoAAgADAZQBlAAAAdUB1wABAi8CNQAEAAIAAgCoAKwAAQEkAScAAQABAAwAJwAoACsAMwA1AEYARwBIAEsAUwBUAFUAAgACABQAHQAAAmUCbgAKAAIABgBNAE0ABgBOAE4ABALyAvIABQPfA98AAwPhA+EAAgRaBFoAAQACAAQAFAAdAAACdgJ2AAoCgQKBAAsEngSlAAwAAgAGABoAGgAAABwAHAABAloCXwACAmMCYwAIAmUCbgAJAnUCdQATAAEAFAAaABwCWgJbAlwCXQJeAl8CYwJ1AnYCgQSeBJ8EoAShBKIEowSkBKUAAQXeAAEF4AABBeIAAQXkAAEF5gABBegAAQXqAAEF7AABBe4AAQXwAAEF8gABBfQAAQX2AAEF+AABBfoAAgX8BgIAAgYCBggAAgYIBg4AAgYOBhQAAgYUBhoAAgYaBiAAAgYgBiYAAgYmBiwAAgYsBjIAAgYyBjgAAgY4Bj4AAwY+BkQGSgADBkgGTgZUAAMGUgZYBl4AAwZcBmIGaAADBmYGbAZyAAMGcAZ2BnwAAwZ6BoAGhgADBoQGigaQAAQGjgaUBpoGoAAEBpwGogaoBq4ABQaqBrAGtga8BsIABQa8BsIGyAbOBtQABQbOBtQG2gbgBuYABQbgBuYG7AbyBvgABQbyBvgG/gcEBwoABQcEBwoHEAcWBxwABQcWBxwHIgcoBy4ABQcoBy4HNAc6B0AABQc6B0AHRgdMB1IABgdMB1IHWAdeB2QHagAGB2IHaAduB3QHegeAAAYHeAd+B4QHigeQB5YABgeOB5QHmgegB6YHrAAGB6QHqgewB7YHvAfCAAYHugfAB8YHzAfSB9gABgfQB9YH3AfiB+gH7gAHCC4H5gfsB/IH+Af+CAQABwgmB/oIAAgGCAwIEggYAAEA6wAKAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgCFAIYAhwCJAIoAiwCNAJAAkgCUALsAvAC9AL4AvwDAAMEAwgDDAMQAxQDGAMcAyADJAMoAywDMAM0AzgDqAOsA7ADtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD/AQABAQECAQMBBAEFAQYBBwEwATQBNgE4AToBPAFCAUQBRgFKAU0BWgKNAo8CqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLIAsoCzALOAtAC0gLUAtYC2ALaAtwC3gLgAuIC5ALmAugC6gLsAu4C8ALyAvUC9wL5AvsC/QL/AwEDAwMFAwcDCgMMAw4DEAMSAxQDFgMYAxoDHAMeAyADIgMkAyYDKAMqAywDLgMwAzIDNAM3AzkDOwM9Az8DrwOwA7EDsgO0A7UDtgO3A7gDuQO6A7sDvAO9A9QD1QPWA9cD2APZA9oD2wPcA90D3gPfA+AD4QPiA+MD5QPnA+kD6wQABAIEBAQSBBkEHwQlBI8EkASUBJgFGQUbAAEA+gAIAAoAFAAVABYAFwAYABkAGgAbABwAHQAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4AZQBnAIEAgwCEAIwAjwCRAJMAsQCyALMAtAC1ALYAtwC4ALkAugDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgA6QEvATMBNQE3ATkBOwFBAUMBRQFJAUsBTAFYAVkBpwGtAbIBtQKLAowCjgKQApECkgKTApQClQKWApcCmAKZApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkCqgLHAskCywLNAs8C0QLTAtUC1wLZAtsC3QLfAuEC4wLlAucC6QLrAu0C7wLxAvMC9AL2AvgC+gL8Av4DAAMCAwQDBgMJAwsDDQMPAxEDEwMVAxcDGQMbAx0DHwMhAyMDJQMnAykDKwMtAy8DMQMzAzUDNgM4AzoDPAM+A5cDmAOZA5oDmwOcA50DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgO+A78DwAPBA8IDwwPEA8UDxgPHA8gDyQPKA8sDzAPNA84DzwPQA9ED0gPTA+QD5gPoA+oD/wQBBAMEGAQeBCQEjgSTBJcFGAUaAcwAAgBNAc0AAgBQAc4AAwBKAE0BzwADAEoAUAABAAEASgHLAAIASgHRAAIAWAHQAAIAWAABAAMASgBXAJUAAAABAAEAAQABAAAAAwS3AAIArQLNAAIAqQS9AAIArQTKAAIAqQS4AAIArQLOAAIAqQSnAAIAqQS+AAIArQRaAAIArQTLAAIAqQM8AAIAqQM+AAIAqQM9AAIAqQM/AAIAqQS2AAIAqQS7AAIBygS5AAIArQSmAAIAqQLnAAIBygPxAAIAqQTFAAIArQMfAAIBygTQAAIArQTVAAIArQTTAAIAqgM2AAIAqQTZAAIArQS8AAIBygS6AAIArQPyAAIAqQTGAAIArQMgAAIBygTRAAIArQTWAAIArQTUAAIAqgM3AAIAqQTaAAIArQS/AAIAqQL4AAIBygTBAAIArQL6AAIAqQL8AAIBygTDAAIArQMVAAIAqQMbAAIBygTOAAIArQPmAAIAqQTXAAIArQPkAAIAqATAAAIAqQL5AAIBygTCAAIArQL7AAIAqQL9AAIBygTEAAIArQMWAAIAqQMcAAIBygTPAAIArQPnAAIAqQTYAAIArQPlAAIAqAMPAAIAqQMRAAIBygTMAAIArQSyAAIArAMQAAIAqQMSAAIBygTNAAIArQSzAAIArAMCAAIAqQMEAAIBygTHAAIArQSoAAIAqAKgAAIAqgKqAAIAqQSBAAIArQPqAAIAqASDAAIAqwSFAAIAqgMDAAIAqQMFAAIBygTIAAIArQSpAAIAqAK7AAIAqgLFAAIAqQSCAAIArQPrAAIAqASEAAIAqwSGAAIAqgK4AAIAqQK3AAIAqARYAAIAqwLsAAIAqgSvAAIArARpAAIAqQRxAAIArQRrAAIAqARtAAIAqwRvAAIAqgRqAAIAqQRyAAIArQRsAAIAqARuAAIAqwRwAAIAqgR3AAIAqQR/AAIArQR5AAIAqAR7AAIAqwR9AAIAqgR4AAIAqQSAAAIArQR6AAIAqAR8AAIAqwR+AAIAqgKRAAIAqQQvAAIArQKQAAIAqAQxAAIAqwKTAAIAqgSqAAIArAKZAAIAqQRHAAIArQKYAAIAqARJAAIAqwRLAAIAqgSsAAIArAKdAAIAqQRZAAIArQKcAAIAqARXAAIAqwLrAAIAqgSuAAIArAKsAAIAqQQwAAIArQKrAAIAqAQyAAIAqwKuAAIAqgSrAAIArAK0AAIAqQRIAAIArQKzAAIAqARKAAIAqwRMAAIAqgStAAIArAK9AAIAqQRcAAIArQK8AAIAqAReAAIAqwK/AAIAqgSxAAIArALCAAIAqQR0AAIArQLBAAIAqAR2AAIAqwMmAAIAqgS1AAIArAKiAAIAqQRbAAIArQKhAAIAqARdAAIAqwKkAAIAqgSwAAIArAKnAAIAqQRzAAIArQKmAAIAqAR1AAIAqwMlAAIAqgS0AAIArATJAAMAqgCpBNIAAwCqAKkAAgARACUAKQAAACsALQAFAC8ANAAIADYAOwAOAD0APgAUAEUASQAWAEsATQAbAE8AVAAeAFYAWwAkAF0AXgAqAIEAgQAsAIMAgwAtAIYAhgAuAIkAiQAvAI0AjQAwAJgAmwAxANAA0AA1AAA=\",\n  \"Roboto-Medium.ttf\": \"AAEAAAARAQAABAAQR0RFRqWLoiAAAb9IAAACWEdQT1Pk1zcKAAHBoAAAZixHU1VChRYO9AACJ8wAABX2T1MvMpfnsYsAAAGYAAAAYGNtYXDOyFo6AAAWdAAABoJjdnQgO/gmfQAAL1AAAAD+ZnBnbagFhDIAABz4AAAPhmdhc3AACAAZAAG/PAAAAAxnbHlmoVpeAgAAOpAAAYGiaGVhZAatHSkAAAEcAAAANmhoZWEK9grYAAABVAAAACRobXR4JpFVzgAAAfgAABR8bG9jYSpiho0AADBQAAAKQG1heHAIzxDGAAABeAAAACBuYW1lQlx1PgABvDQAAALmcG9zdP9tAGQAAb8cAAAAIHByZXB5WM7TAAAsgAAAAs4AAQAAAAMBSOm9QH9fDzz1ABkIAAAAAADE8BEuAAAAAN8Gv236Jv3VCWEIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJbvom/j4JYQABAAAAAAAAAAAAAAAAAAAFHwABAAAFHwCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAQAAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA4wAZAAAAAAAAAAAAf0AAAH9AAACHgCMAo4AYATTAFYEjABkBeQAZAUhAFUBVwBSAsUAgQLMACcDjAAcBHEAQgHKACICuABQAjkAhgMfAAEEjABoBIwAqgSMAFIEjABOBIwANwSMAH8EjABzBIwARASMAGcEjABdAhwAfwHrADMEEgA+BIAAjwQoAH4D5AA7By0AWwVOABEFDQCUBTkAZgU5AJQEhQCUBGgAlAVzAGsFrQCUAkQApQRyAC8FDgCUBFIAlAb/AJQFrQCUBYMAZQUbAJQFgwBgBQkAlATYAEsE4AAtBTwAgAUqABEHCwAvBQ0AJgTjAAgE0wBQAiwAhQNVABICLAALA24ANgOVAAICkAA4BFAAVgR/AH0ELQBOBIIAUARJAFEC0wArBIkAUgRyAHoCCgB8AgL/qwQsAH0CCgCMBvgAfAR0AHoEigBOBH8AfQSHAFAC1AB9BB4ASQKqAAoEcwB3A/gAFgXwACMEBgAfA+sADAQGAFECqwA4Af0ArwKrABwFTQB1Ah8AhQSCAGcEtQBfBZ4AXARAAA0B+ACJBPkAXAOSAGMGSQBaA5AAjgPjAFcEawB/BkoAWQPaAJ0DDwCBBEoAXAL1AD0C9QA3ApQAbwTBAJMD6gBJAkQAkAITAGwC9QCCA6cAeQPjAF4FygBfBiIAUwZcAGYD5QBGB37//ARCAEwFgQBpBM8AlQTrAIoGwgBIBKQAaASRAEMEhgBOBJEAgQTsAFAFsAAfAhcAkASaAI0EZAAgAlIAIAWXAJAEhgB9B7AAZQc+AFkCBwCJBY0AVQLQ/94FkQBbBJ0ATQWjAIAE5gB3AiX/rgQ5AFcD3gCQA6oAbgPaAJ0DfgB1AgoAgQKqAHgCTAApA84AdwMoAEsCcwCJAAD8kwAA/WIAAPx0AAD9OgAA/AgAAP0eAmsAzQQ7AG4CRACQBHQAmQXCABoFegBcBTUAIASMAGoFrgCZBIwARwX5AEwFsQBGBVkAbASEAFYEyACXBA0AHgSGAFEEZQBiBA8AWQSGAH0EpwB2AqUAowRoABUEGgBnBPwAMASGAIAEMwBQBI4AUAQqADwEXQB/BdEARgXMAFIGlABlBLQAeASH/+EGeQArBf0AJAVTAGcIgQAtCIwAmQZRAC0FpQCPBQcAkAX9ACYHqQAVBNsASQWmAJIFqAAsBQsAMgZfAE4F+ACOBYUAkQeaAJUH+gCVBiEAFQbwAJkFAgCQBUgAYwdiAKEE6AAXBIAAWgSLAI8DWwCDBPIAJwaHACAEFwBOBJIAhARsAI8ElAAgBgIAjwSRAIQEkgCEA/oAIwXUAFMEzwCEBGUAYAaNAIQG8QB9BSEAIAZvAI8EaQCPBDkAUAaCAJIEcAAuBHL/1wQ5AFIG1gAdBuQAhASG/+gEkgCEB1gAiAZqAHIEaP/hBygAmAYCAIYFFgAaBGMACwdLAKwGPQCaBuUAfgXdAIEJKgClB+4AkAQgACgD9QAyBXoAYASIAE0FGAAQBA0AHgV6AGAEhgBOB1QAiAZWAHUHWACIBmoAcgUQAGcERwBdBPsAcAAA/HAAAPx1AAD9gQAA/aYAAPomAAD6UQYgAJIFEwCEBGj/4QUQAJQEhgB9BGsAjwOjAH0E6gCZBCQAfQgjABUG4AAgBckAmQT7AI8FLgCRBKwAjQaUADQFoAA8BiAAlAUHAIQH3QCUBa0AfQhJAJcG7wB9BjcAZwUEAGAFOQAmBEEAHwcoACkFbwAnBfIAkQTcAGAFcACBBHQAdQWFAIkGGwAKBMT/ywUgAJEEeACNBh8ALAUUACAFrQCZBIYAfQYqAJQFEQCEB3UAlAZ0AI8FjQBVBKMAWwSkAF0EwwAsA6oAJAVpACYEcQAfBPkATwbzAGgG2wBfBlEAPQUoAC8EgwBKBEgAcwe8AEIGpAA/B/UAlAaeAHQFBgBcBC8AVQWoACEFHQBEBU4AfQZGACwFOwAgAxsAZAQUAAAIKQAABBQAAAgpAAACuQAAAgoAAAFcAAAEfwAAAjAAAAGiAAABAAAAANEAAAAAAAACtwBQArcAUAUjAJwGKgB7A5oACAG/AGUBugA3Ac4ANQGjAEsDCwBtAxMAQwMAADUEWwA/BJoAXQLMAIoD/QCNBaoAjQHPAF4HrgBQAnQAbAJpAFUDmQArAvUATAL1ADYC9QBQAvUATgL1ADcC9QBLAvUARwNcAGcC9QBMAvUAggL1AD0C9QA3AvUANgL1AFAC9QBOAvUANwL1AEsC9QBHBLUAYgZuACMGvwCZCJUAlAY7ACMGmwB9BIwAXAXqACMELQAqBJsAJAViAE8FfgArBeQAbgPjAEUIKQCQBQgAbwUUAJYGNwBcBt4AVgbQAF4GrABcBJMAYQWKAKYE3gA/BIAAnASdADsIUgBhAjL/pwSRAGUEgACPBBIAPQQoAH0EDgAlAlEAnAKOAGQB6QBHBRkAKwStABoEvQArBygAKwcoACsFDwArBrcASQAAAAAIMABZCDUAXAL1AD0C9QCCAvUATAQdAE8EHQBXBB0AOAQdAF8EHQBmBB0AMwQdAD0EHQBDBB0AmAQdAFgEKwBBBD4ABgRcABMGCQAnBHkACASIAGkEPwAlBDcAPwRkAHUEvQBNBGsAdgS9AE4E3AB2BgUAdgO3AHYEXgB2A9YAJgH+AIYE3QB2BKcAVgPIAHYENwA/BGgAOgOlAAoDvAB2BHkACAS9AE4EeQAIA50ARgTZAHYEHgBEBaYATwVYAE8E4ABeBZIAIwSAAE8HVgAkB1gAdgWZACUE2AB2BHIAdgVeACcGRQAbBEYAQwTiAHYEXQB2BMsAJARMAB8FYgB2BI0AQwaEAHYHDgB2BWEACQYWAHYEZwB2BIAAPQaPAHYEhABCBCgACwajABsEoAB2BQ0AdgV0ACEF+ABOBFYABgTEABMGlwAjBI0AQwSNAHYGAAAOBM4ATQRHAEMEvQBOBGgAOgP0AEUILQB2BPQAKAL1ADcC9QA2AvUAUAL1AE4C9QA3AvUASwL1AEcDtgCNAq4AmAPgAHYEOgAMBLYAVgVBAJkFKACZBDAAgQU1AJkEKACBBHoAdgSAAE8EYAB2BJoACAH+AJADoQB1AAD8ngP3AHoD+v9RBAsAeQP6AHkDvAB2A50AdQOdAHUC9QBMAvUANgL1AFAC9QBOAvUANwL1AEsC9QBHBXMAaQWeAGkFfwCZBdkAaQXaAGkEKACWBIIAawRYAA8EuwA0BGsAZwQuAEIDoQB2AboAYgaYAE4ErwBuAgz/pwSMADgEjABoBIwALASMAGIEjABfBIwANASMAGwEjABZBIwAZwSMAOYCJv+uAiX/rgIXAJACF//6AhcAkARgAHYE5gBgBDAAOQSIAH0EPgBPBJUATgSRAE4EnQBJBJIAfQSaAE4ESQBRBIkAUARZADQDrQBhBQwAXwPEAAUGRv/sBAcAdgS9AE4FDgA0BNwAdgH9AAACuABQBVcAFwVXABcEkP/1BOAALQKq/+sFTgARBU4AEQVOABEFTgARBU4AEQVOABEFTgARBTkAZgSFAJQEhQCUBIUAlASFAJQCRP/LAkQApQJE/8oCRP++Ba0AlAWDAGUFgwBlBYMAZQWDAGUFgwBlBTwAgAU8AIAFPACABTwAgATjAAgEUABWBFAAVgRQAFYEUABWBFAAVgRQAFYEUABWBC0ATgRJAFEESQBRBEkAUQRJAFECF/+1AhcAkAIX/7MCF/+oBHQAegSKAE4EigBOBIoATgSKAE4EigBOBHMAdwRzAHcEcwB3BHMAdwPrAAwD6wAMBU4AEQRQAFYFTgARBFAAVgVOABEEUABWBTkAZgQtAE4FOQBmBC0ATgU5AGYELQBOBTkAZgQtAE4FOQCUBRgAUASFAJQESQBRBIUAlARJAFEEhQCUBEkAUQSFAJQESQBRBIUAlARJAFEFcwBrBIkAUgVzAGsEiQBSBXMAawSJAFIFcwBrBIkAUgWtAJQEcgB6AkT/tAIX/50CRP/RAhf/uwJE/90CF//GAkQAGAIK//8CRACfBrUApQQLAHwEcgAvAiX/rgUOAJQELAB9BFIAlAIKAIwEUgCUAgoAWQRSAJQCoACMBFIAlALmAIwFrQCUBHQAegWtAJQEdAB6Ba0AlAR0AHoEdP+jBYMAZQSKAE4FgwBlBIoATgWDAGUEigBOBQkAlALUAH0FCQCUAtQAUgUJAJQC1AA3BNgASwQeAEkE2ABLBB4ASQTYAEsEHgBJBNgASwQeAEkE2ABLBB4ASQTgAC0CqgAKBOAALQKqAAoE4AAtAtIACgU8AIAEcwB3BTwAgARzAHcFPACABHMAdwU8AIAEcwB3BTwAgARzAHcFPACABHMAdwcLAC8F8AAjBOMACAPrAAwE4wAIBNMAUAQGAFEE0wBQBAYAUQTTAFAEBgBRB37//AbCAEgFgQBpBIYATgR6/6UEev+lBD8AJQSaAAgEmgAIBJoACASaAAgEmgAIBJoACASaAAgEgABPA+AAdgPgAHYD4AB2A+AAdgH+/6kB/gCGAf7/pwH+/5wE3AB2BL0ATgS9AE4EvQBOBL0ATgS9AE4EiABpBIgAaQSIAGkEiABpBD4ABgSaAAgEmgAIBJoACASAAE8EgABPBIAATwSAAE8EegBhA+AAdgPgAHYD4AB2A+AAdgPgAHYEpwBWBKcAVgSnAFYEpwBWBN0AdgH+/5EB/v+vAf7/ugH+ABcB/gB9A9YAJgReAHYDtwB2A7cAdgO3AHYDtwB2BNwAdgTcAHYE3AB2BL0ATgS9AE4EvQBOBGQAdQRkAHUEZAB1BDcAPwQ3AD8ENwA/BDcAPwQ/ACUEPwAlBD8AJQSIAGkEiABpBIgAaQSIAGkEiABpBIgAaQYJACcEPgAGBD4ABgQrAEEEKwBBBCsAQQVOABEE6f9CBhH/SgKo/04Fl/+0BUf/QQVt/8ICpf+FBU4AEQUNAJQEhQCUBNMAUAWtAJQCRAClBQ4AlAb/AJQFrQCUBYMAZQUbAJQE4AAtBOMACAUNACYCRP++BOMACASEAFYEZQBiBIYAfQKlAKMEXQB/BJoAjQSKAE4EwQCTA/gAFgRZADQCpf/DBF0AfwSKAE4EXQB/BpQAZQSFAJQEdACZBNgASwJEAKUCRP++BHIALwUoAJkFDgCUBQsAMgVOABEFDQCUBHQAmQSFAJQFpgCSBv8AlAWtAJQFgwBlBa4AmQUbAJQFOQBmBOAALQUNACYEUABWBEkAUQSSAIQEigBOBH8AfQQtAE4D6wAMBAYAHwRJAFEDWwCDBB4ASQIKAHwCF/+oAgL/qwRsAI8D6wAMBwsALwXwACMHCwAv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FgoBAWtWACs0AP//ACcAAAXlBesGJgHlAAABBwBqATsAHgANtwUEHwoBAYRWACs0NAD//wAGAAAEOAYeBiYB4wAAAAcARACKAB7//wAR/lcFPwWwBiYAJQAAAQcApAGAAAMAC7YDDgUBATlWACs0AP//AFb+XAP5BE4GJgBFAAABBwCkALQACAALtgI7MQAATVYAKzQA//8AlP5eBE0FsAYmACkAAAEHAKQBQgAKAAu2BBACAABDVgArNAD//wBR/lQECgROBiYASQAAAQcApAEFAAAAC7YBLAAAAE1WACs0AP//AAj+VASRBI0GJgJDAAAABwCkASIAAP//AHb+XAO2BI0GJgI4AAAABwCkAPEACP//AHj+oQGLBDoGJgCNAAABBwCtA1oACgAOtAEHAgEBuP9/sFYAKzQAAAAAABEA0gADAAEECQAAAF4AAAADAAEECQABABoAXgADAAEECQACAA4AeAADAAEECQADABoAXgADAAEECQAEABoAXgADAAEECQAFACYAhgADAAEECQAGABoArAADAAEECQAHAEAAxgADAAEECQAIAAwBBgADAAEECQAJACYBEgADAAEECQALABQBOAADAAEECQAMABQBOAADAAEECQANAFwBTAADAAEECQAOAFQBqAADAAEECQAQAAwB/AADAAEECQARAAwCCAADAAEECQAZAAwB/ABDAG8AcAB5AHIAaQBnAGgAdAAgADIAMAAxADEAIABHAG8AbwBnAGwAZQAgAEkAbgBjAC4AIABBAGwAbAAgAFIAaQBnAGgAdABzACAAUgBlAHMAZQByAHYAZQBkAC4AUgBvAGIAbwB0AG8AIABNAGUAZABpAHUAbQBSAGUAZwB1AGwAYQByAFYAZQByAHMAaQBvAG4AIAAzAC4AMAAwADUAOwAgADIAMAAyADIAUgBvAGIAbwB0AG8ALQBNAGUAZABpAHUAbQBSAG8AYgBvAHQAbwAgAGkAcwAgAGEAIAB0AHIAYQBkAGUAbQBhAHIAawAgAG8AZgAgAEcAbwBvAGcAbABlAC4ARwBvAG8AZwBsAGUAQwBoAHIAaQBzAHQAaQBhAG4AIABSAG8AYgBlAHIAdABzAG8AbgBHAG8AbwBnAGwAZQAuAGMAbwBtAEwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAQQBwAGEAYwBoAGUAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMgAuADAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcABhAGMAaABlAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBMAEkAQwBFAE4AUwBFAC0AMgAuADAAUgBvAGIAbwB0AG8ATQBlAGQAaQB1AG0AAAADAAAAAAAA/2oAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgAIAAj//wAPAAEAAgAOAAAAAAAAAigAAgBZACUAPgABAEQAXgABAGoAagABAHAAcAABAHUAdQABAIEAgQABAIMAgwABAIYAhgABAIkAiQABAIsAlgABAJgAnwABAKEAowABAKUApgABAKgArQADALEAsQABALoAuwABAL8AvwABAMEAwQABAMMAxAABAMcAxwABAMsAywABAM0AzgABANAA0QABANMA0wABANoA3gABAOEA4QABAOUA5QABAOcA6QABAOsA+wABAP0A/QABAP8BAQABAQMBAwABAQgBCQABARYBGgABARwBHAABASABIgABASQBJwADASoBKwABATMBNAABATYBNgABATsBPAABAUEBRAABAUcBSAABAUsBTQABAVEBUQABAVQBWAABAV0BXgABAWIBYgABAWQBZAABAWgBaAABAWoBbAABAW4BbgABAXABcAABAcsB0QACAeIB9gABAfoB+gABAgMCAwABAgUCBQABAgwCDgABAhACEQABAhMCEwABAhcCFwABAhkCGwABAiECIQABAiYCKAABAioCKgABAjgCOAABAjsCOwABAj0CPQABAkACQwABAm8CcwABAoMCiAABAosC8wABAvYDtQABA7cDtwABA7kDwwABA8UDzgABA9AD6wABA+8D7wABA/ED+AABA/oD/AABA/8EAwABBAUEkAABBJMElAABBJYElwABBJkEnAABBKYFAgABBQQFDgABBREFHgABAAEAAwAAABAAAAAWAAAAIAABAAEArQACAAEAqACsAAAAAgACAKgArAAAASQBJwAFAAEAAAAeABAACgACAC4ANgACY3BzcAA6a2VybgBAAARERkxUADhjeXJsADhncmVrADhsYXRuADgAAQAAAAEAIgACAAgAAgAuBBAAAAABAAAAAAABAAEADgAAAAEPAgAFACQASAAA//8AAgAAAAEAAUuMAAQAAAHsE9wRBBEEF7QQ5hdaEVQRkhJkEXZH7hKkEqQVxBG2EqQSpBJkEsYgkBlQH8YRpBHMFwAY3hHiFO4SghIsEUAp5BEiJsIRXhFeEw4SLBGEGHgSRhH4EQoSRhU0EiwSZBnGHwAXWhJkF1olxCfEIwodmBDsEkYRLD54EV438iTSKMYSEhDyEPhBYhD+FHYUChpIOeQtpjRCLFgSpDDqPBYXACFeEqQSpBV6EqQSpBKkMpQa0hKkE7IeOhx0GBYj7B0GEUoiNBEKEzQ2GERgEiwUsCsaG1wS6BIsG+YTXhaqFEAS6BdaEw4RpBJGE4gSLB8AEUoXABEKFcQVxBXEEqQXABEKEqQSpBJkEUoXABEKEQQvSBEEEQQRBBEcFg4WXBEWETYREBEWERARaBEQEZISZBJkEmQSZB/GF1oXWhdaF1oXWhdaF1oRkhF2EXYRdhF2EqQSpBKkEqQSpBJkEmQSZBJkEmQY3hKCEoISghKCEoISghKCEUARQBFAEUARXhMOEw4TDhMOEw4SRhJGF1oSghdaEoIXWhKCEZIRkhGSEZISZBF2EUARdhFAEXYRQBF2EUARdhFAEqQRXhKkEqQSpBKkEqQVxBG2EbYRthG2EqQRXhKkEV4SpBFeEV4SZBMOEmQTDhJkEw4RhBGEEYQfxh/GH8YRzBjeEkYY3hHiEeIR4hEWERYRHBEQERAREBEQERAREBEQERYRFhEWERYRFhEQERAREBEWETYRNhE2ETYRFhEWERYRHBdaEXYSpBKkEmQY3hdaEVQRdhHiEqQSpBXEEqQSpBJkEsYfxhjeFwASpBjeEV4TDhJGEw4Rdh8AEqQSpBXEFcQVehdaEVQfABF2EqQSpBJkEsYRkh/GFwASghFAEw4SLBJGEQoRQBFKEkYRzBHMEcwY3hJGEQQRBBEEEqQRXhdaEoIRdhFAEaQSRhGSGN4SRhKkFwARChKkF1oSghdaEoIRdhFAEUARQBcAEQoSZBMOEw4SLBV6EkYVehJGFXoSRhdaEoIXWhKCF1oSghdaEoIXWhKCF1oSghdaEoIXWhKCF1oSghdaEoIXWhKCF1oSghF2EUARdhFAEXYRQBF2EUARdhFAEXYRQBF2EUARdhFAEqQSpBJkEw4SZBMOEmQTDhJkEw4SZBMOEmQTDhJkEw4TDhje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BGX/8wRn//MEaf/zBGv/8wRt//MEb//zBHH/8wSw//MEyf/zAEAAR//sAEj/7ABJ/+wAS//sAFX/7ACU/+wAmf/sALv/7ADI/+wAyf/sAPf/7AED/+wBHv/sASL/7AFC/+wBYP/sAWH/7AFr/+wCsv/sArP/7AK0/+wCtf/sArb/7ALO/+wC0P/sAtL/7ALU/+wC1v/sAtj/7ALa/+wC3P/sAt7/7ALg/+wC4v/sAuT/7ALm/+wC6P/sA6//7APV/+wD2f/sA9z/7AP3/+wD/f/sBAL/7AQQ/+wEEv/sBBP/7AQf/+wELv/sBEj/7ARK/+wETP/sBE7/7ARQ/+wEUv/sBFT/7ARW/+wEav/sBGz/7ARu/+wEcv/sBK3/7AS6/+wEvP/sAEAAJ//mACv/5gAz/+YANf/mAIP/5gCT/+YAmP/mALP/5gC4/8IAxAAQANP/5gEI/+YBF//mARv/5gEd/+YBH//mASH/5gFB/+YBav/mAlX/5gJW/+YCWP/mAln/5gKX/+YCof/mAqL/5gKj/+YCpP/mAqX/5gLN/+YCz//mAtH/5gLT/+YC4f/mAuP/5gLl/+YC5//mAwn/5gML/+YDDf/mAz7/5gOb/+YDqP/mA87/5gPR/+YD/v/mBAH/5gQc/+YEHv/mBCD/5gRb/+YEXf/mBF//5gRh/+YEY//mBGX/5gRn/+YEaf/mBGv/5gRt/+YEb//mBHH/5gSw/+YEyf/mAEcAEAAEABIABABH/+cASP/nAEn/5wBL/+cAVf/nAJT/5wCZ/+cAu//nAMQADwDI/+cAyf/nAPf/5wED/+cBHv/nASL/5wFC/+cBYP/nAWH/5wFr/+cBhgAEAYoABAGOAAQBjwAEArL/5wKz/+cCtP/nArX/5wK2/+cCzv/nAtD/5wLS/+cC1P/nAtb/5wLY/+cC2v/nAtz/5wLe/+cC4P/nAuL/5wLk/+cC5v/nAuj/5wOv/+cD1f/nA9n/5wPc/+cD9//nA/3/5wQC/+cEEP/nBBL/5wQT/+cEH//nBC7/5wRI/+cESv/nBEz/5wRO/+cEUP/nBFL/5wRU/+cEVv/nBGr/5wRs/+cEbv/nBHL/5wSt/+cEuv/nBLz/5wBNAAYAEAALABAADQAUAEEAEgBH/+gASP/oAEn/6ABL/+gAVf/oAGEAEwCU/+gAmf/oALv/6ADI/+gAyf/oAPf/6AED/+gBHv/oASL/6AFC/+gBYP/oAWH/6AFr/+gBhAAQAYUAEAGHABABiAAQAYkAEAKy/+gCs//oArT/6AK1/+gCtv/oAs7/6ALQ/+gC0v/oAtT/6ALW/+gC2P/oAtr/6ALc/+gC3v/oAuD/6ALi/+gC5P/oAub/6ALo/+gDr//oA9X/6APZ/+gD3P/oA+wAEAPtABAD8AAQA/f/6AP9/+gEAv/oBBD/6AQS/+gEE//oBB//6AQu/+gESP/oBEr/6ARM/+gETv/oBFD/6ARS/+gEVP/oBFb/6ARq/+gEbP/oBG7/6ARy/+gErf/oBLr/6AS8/+gATwBHAAEASAABAEkAAQBLAAEAVQABAJQAAQCZAAEAuwABAMgAAQDJAAEA7QArAPIAFAD2/+MA9wABAPn/8AD8/+YA/v/1AQMAAQEEABQBHgABASIAAQE6/9MBQgABAUj/8AFK/98BUQAUAWAAAQFhAAEBawABAW3/4wFwABQCsgABArMAAQK0AAECtQABArYAAQLOAAEC0AABAtIAAQLUAAEC1gABAtgAAQLaAAEC3AABAt4AAQLgAAEC4gABAuQAAQLmAAEC6AABA68AAQPVAAED2QABA9wAAQP3AAED/QABBAIAAQQQAAEEEgABBBMAAQQfAAEEK//wBC4AAQRIAAEESgABBEwAAQROAAEEUAABBFIAAQRUAAEEVgABBGoAAQRsAAEEbgABBHIAAQSL//AErQABBLoAAQS8AAEAUwA4/74AUf/1AFL/9QBU//UAWv/vAF3/7wC9/+8Awf/1ANL/vgDW/74A5v/JAOz/9QDw//UA8f/1APP/9QD0//UA9f/1APb/3wD4//UA+v/1APv/9QD+//UBAP/1AQX/9QEJ/+0BGv/vASD/6wEr//UBNv/1ATn/vgE6/98BPP/1AT7/9QFF/74BTP/pAVP/9QFV//UBV//1AVz/9QFj//UBbf/gArv/9QLF/+8Cxv/vAwP/9QMF//UDB//1Awj/9QMf/74DIf++AyP/vgM0/+8Dsf/1A7f/7wPS/74D1v/1A9j/9QPa/+8D3f/1A+L/9QPj/+8D6//vA/L/9QP4//UD/P/vBAT/7wQZ//UEG//1BCX/7wQn/+8EKf/vBC3/9QSC/+8EhP/vBIb/7wSI/74Ejf/1BKn/9QTG//UEyP/1BND/vgTU/+8E1v/vAGgAOP8zADr/yAA8//AAPf+sAFH/7wBS/+8AVP/vAMH/7wDS/zMA1P/1ANb/MwDa//AA3f/1AN7/6wDh/+YA5v/CAOz/7wDw/+8A8f/vAPP/7wD0/+8A9f/vAPb/zgD4/+8A+v/vAPv/7wD+/+8BAP/vAQX/7wEZ/8gBK//vATP/8AE2/+8BOf8zATr/zQE8/+8BPv/vAUP/8AFF/zMBR//mAUn/5gFM/98BUP/1AVP/7wFV/+8BV//vAVz/7wFd//ABYv/QAWT/6wFm//UBbP+fAW3/0AFv//UCqv+sArv/7wMD/+8DBf/vAwf/7wMI/+8DH/8zAyH/MwMj/zMDM/+sAzX/rAOc/6wDq/+sA6z/8AOu/6wDsf/vA8b/6wPS/zMD0//wA9b/7wPY/+8D3f/vA+L/7wPq/6wD8v/vA/j/7wP7/8gEA/+sBAb/8AQU//AEGf/vBBv/7wQk/+sEJv/rBCj/6wQq/+YELf/vBIH/rASD/6wEhf+sBIj/MwSK/+YEjf/vBJf/rASp/+8Exv/vBMj/7wTQ/zME0//IBNX/yABoAEf/tABI/7QASf+0AEv/tABMABQATwAUAFAAFABT/3oAVf+0AFf/ZABbAAsAlP+0AJn/tAC7/7QAyP+0AMn/tAD3/7QBA/+0ARj/egEe/7QBIv+0AUL/tAFg/7QBYf+0AWv/tAHR/2QCsv+0ArP/tAK0/7QCtf+0Arb/tAK8/3oCvf96Ar7/egK//3oCwP96As7/tALQ/7QC0v+0AtT/tALW/7QC2P+0Atr/tALc/7QC3v+0AuD/tALi/7QC5P+0Aub/tALo/7QDCv96Awz/egMO/3oDFv9kAxj/ZAMa/2QDHP9kAx7/ZAOv/7QDtf96A7v/egPV/7QD1/96A9n/tAPc/7QD3v9kA/f/tAP9/7QEAv+0BBD/tAQS/7QEE/+0BB3/egQf/7QEIf96BC7/tARI/7QESv+0BEz/tARO/7QEUP+0BFL/tARU/7QEVv+0BFz/egRe/3oEYP96BGL/egRk/3oEZv96BGj/egRq/7QEbP+0BG7/tARw/3oEcv+0BK3/tASx/3oEuv+0BLz/tAS+ABQEwAAUBMIAFATP/2QAagA4/+YAOv/nADz/8gA9/+cAUf/xAFL/8QBU//EAXP/xAMH/8QDS/+YA1v/mANr/8gDe/+4A4f/oAOb/5gDs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ASL/3AEr/+EBNv/hATz/4QE+/+EBQv/cAVP/4QFV/+EBV//hAVz/4QFg/9wBYf/cAWv/3AKy/9wCs//cArT/3AK1/9wCtv/cArv/4QK8/9YCvf/WAr7/1gK//9YCwP/WAsH/3QLC/90Cw//dAsT/3QLF/+ECxv/hAs7/3ALQ/9wC0v/cAtT/3ALW/9wC2P/cAtr/3ALc/9wC3v/cAuD/3ALi/9wC5P/cAub/3ALo/9wDA//hAwX/4QMH/+EDCP/hAwr/1gMM/9YDDv/WAyb/3QMo/90DKv/dAyz/3QMu/90DMP/dAzT/4QOv/9wDsf/hA7P/3QO1/9YDt//hA7r/3QO7/9YDvP/dA9X/3APW/+ED1//WA9j/4QPZ/9wD2v/hA9z/3APd/+ED4v/hA+P/4QPr/+ED8v/hA/f/3AP4/+ED/P/hA/3/3AQC/9wEBP/hBBD/3AQS/9wEE//cBBn/4QQb/+EEHf/WBB//3AQh/9YEJf/hBCf/4QQp/+EELf/hBC7/3ARI/9wESv/cBEz/3ARO/9wEUP/cBFL/3ARU/9wEVv/cBFz/1gRe/9YEYP/WBGL/1gRk/9YEZv/WBGj/1gRq/9wEbP/cBG7/3ARw/9YEcv/cBHT/3QR2/90EeP/dBHr/3QR8/90Efv/dBID/3QSC/+EEhP/hBIb/4QSN/+EEqf/hBK3/3ASx/9YEtf/dBLr/3AS8/9wExv/hBMj/4QTU/+EE1v/hAL8ABgAMAAsADABH/+gASP/oAEn/6ABKAAwAS//oAFP/6gBV/+gAWgALAF0ACwCU/+gAmf/oALv/6AC9AAsAvv/0AMT/1wDGAAsAyP/oAMn/6ADKAAwA9//oAQP/6AEY/+oBGgALAR7/6AEi/+gBQv/oAWD/6AFh/+gBa//oAYQADAGFAAwBhwAMAYgADAGJAAwB4wANAeYADQHoAA4B6f/1Aev/7AHt/+0B9f/sAfv/vwH8/+0B/f+/AgQADgIF/+0CCAAOAiAADgIh/+0CIgANAiQADgIq/+0CQf/uAkP/vwKy/+gCs//oArT/6AK1/+gCtv/oArz/6gK9/+oCvv/qAr//6gLA/+oCxQALAsYACwLO/+gC0P/oAtL/6ALU/+gC1v/oAtj/6ALa/+gC3P/oAt7/6ALg/+gC4v/oAuT/6ALm/+gC6P/oAwr/6gMM/+oDDv/qAzQACwND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/8ADSf/AA17/wANf/8ADYP/AA5f/TgOf/04Dr//rA7P/6gO1/+sDt//oA7r/6gO7/+sDvP/qA8P/DQPH/04D0gAUA9T/3gPV/+sD1//rA9n/6wPa/+gD3P/rA+P/6APr/+gD8/9OA/T/3gP3/+sD/P/oA/3/6wQC/+sEBP/oBAn/TgQK/94EC/9OBAz/3gQQ/+sEEv/rBBP/6wQd/+sEH//rBCH/6wQl/+gEJ//oBCn/6AQu/+sEL/9OBDD/3gQx/04EMv/eBDP/TgQ0/94ENf9OBDb/3gQ3/04EOP/eBDn/TgQ6/94EO/9OBDz/3gQ9/04EPv/eBD//TgRA/94EQf9OBEL/3gRD/04ERP/eBEX/TgRG/94ESP/rBEr/6wRM/+sETv/rBFD/6wRS/+sEVP/rBFb/6wRc/+sEXv/rBGD/6wRi/+sEZP/rBGb/6wRo/+sEav/rBGz/6wRu/+sEcP/rBHL/6wR0/+oEdv/qBHj/6gR6/+oEfP/qBH7/6gSA/+oEgv/oBIT/6ASG/+gEiAAUBKr/TgSr/94Erf/rBLH/6wS1/+oEuv/rBLz/6wTQABQE1P/oBNb/6ATc/8AE4//ABPv/wAACAKAABAAEAAAABgAGAAEACwAMAAIAEwATAAQAJQAqAAUALAAtAAsALwA2AA0AOAA4ABUAOgA/ABYARQBGABwASQBKAB4ATABMACAATwBPACEAUQBUACIAVgBWACYAWABYACcAWgBdACgAXwBfACwAigCKAC0AlgCWAC4AnQCdAC8AsQC1ADAAtwC5ADUAuwC7ADgAvQC+ADkAwADBADsAwwDFAD0AxwDOAEAA0gDSAEgA1ADeAEkA4ADvAFQA8QDxAGQA9gD4AGUA+wD8AGgA/gEAAGoBAwEFAG0BCgEKAHABDQENAHEBGAEaAHIBIgEiAHUBLgEwAHYBMwE1AHkBNwE3AHwBOQE5AH0BOwE7AH4BQwFEAH8BVAFUAIEBVgFWAIIBWAFYAIMBXAFeAIQBhAGFAIcBhwGJAIkB6AHoAIwB6gHrAI0B7QHtAI8B8AHwAJAB+wH9AJECQAJAAJQCQwJDAJUCVQJVAJYCVwJYAJcCiwKMAJkCjgKOAJsCkAKlAJwCqgKxALICswK2ALoCuwLAAL4CxQLNAMQCzwLPAM0C0QLRAM4C0wLTAM8C1QLVANAC1wLgANEC6QLrANsC7QLtAN4C7wLvAN8C8QLxAOAC8wLzAOEC+AL4AOIC+gL6AOMC/AL8AOQC/gL+AOUDAAMAAOYDAgMOAOcDEAMQAPQDEgMSAPUDFAMUAPYDHwMfAPcDIQMhAPgDIwMjAPkDMQMxAPoDMwM2APsDOAM4AP8DOgM6AQADQANJAQEDVANYAQsDXgNgARADZQNlARMDdwN6ARQDfgOAARgDiQOJARsDlwOcARwDnwOuASIDsQOxATIDtQO1ATMDtwO3ATQDuwO7ATUDvgO/ATYDwQPCATgDxAPKAToDzAPOAUED0APVAUQD1wPYAUoD2gPdAUwD4wPkAVAD5gPmAVID6APoAVMD6gPtAVQD8AP1AVgD9wP3AV4D+wP8AV8EAQQBAWEEAwQMAWIEDwQQAWwEEgQVAW4EHAQdAXIEIQQhAXQEIwQpAXUELwRXAXwEWQRZAaUEWwRoAaYEcARwAbQEgQSGAbUEiASIAbsEjASNAbwEkASQAb4EkgSTAb8ElQSVAcEElwSXAcIEqASsAcMErgSuAcgEsASxAckEswSzAcsEtwS5AcwEuwS7Ac8EvQS/AdAEwQTBAdMEwwTDAdQExQTLAdUEzQTNAdwE0ATQAd0E0wTXAd4E2QTZAeME2wTcAeQE4ATgAeYE4wTjAecE7gTuAegE+wT7AekFAgUCAeoFBgUGAesAAgCaAAYABgAAAAsACwABABAAEAACABIAEgADACUAKQAEACwANAAJADgAPgASAEUARwAZAEkASQAcAEwATAAdAFEAVAAeAFYAVgAiAFoAWgAjAFwAXgAkAIoAigAnAJYAlgAoALEAtAApAL0AvQAtAMEAwQAuAMcAxwAvANQA1QAwANcA1wAyANoA2gAzANwA3gA0AOAA5gA3AOwA7AA+AO4A7gA/APcA9wBAAPwA/ABBAP4A/wBCAQQBBQBEAQoBCgBGAQ0BDQBHARgBGgBIAS4BMABLATMBNQBOATcBNwBRATkBOQBSATsBOwBTAUMBRABUAVQBVABWAVYBVgBXAVgBWABYAVwBXgBZAYQBigBcAY4BjwBjAegB6ABlAe0B7QBmAfAB8QBnAfsB/QBpAg8CDwBsAh4CIABtAkACQABwAkMCQwBxAlUCVQByAlcCWABzAosCjAB1Ao4CjgB3ApACtgB4ArsCwACfAsUC1QClAtcC4AC2AukC6wDA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASABkAJAAAAA4AFQAcAAAABQAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAKAAUACgAAAAAAAAAAAAAAAAAVAAUAAAAAABUAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAABUABQASABkAFQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAAACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAAAAAAAAAAABAAEAAQABAAEAAQABAACAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgACAAIAAgALAAsACwALAAwABgAGAAYABgAGAAYABgABAAEAAQABAAEAAAAAAAAAAAADAAcABwAHAAcABwAIAAgACAAIAAkACQAEAAYABAAGAAQABgACAAEAAgABAAIAAQACAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAgABAAIAAQACAAEAAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAMAAwACAAcAAgAHAAIABwAAAAAAAAAAAAAAAAAUABEAFAARABQAEQAUABEAFAARAA0AAAANAAAADQAAAAsACAALAAgACwAIAAsACAALAAgACwAIABYAAAAMAAkADAAXAB0AFwAdABcAHQAAAAAAAgAAAAAAAAAAAAoACgAKAAoACgAKAAoABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUADgAOAA4ADgAS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AiQCJQInAikChwNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA5MDXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwUQA3UDdgN3A3gDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGBRMDhwOIA4oDiQOLA4wDjQOOA48DkAORA5IDlAOVA5YFEQUSBNwE3QTeBN8E6QTsBOoE6wTwBPEE8gTgBOEE4gT7BP4E/wUCBQQFBQIRBQcE8wT0BPUE9gT3BPgE+QT6BRQFFQUWBRcFCAUKBQsCKAUNAioFDgUMAiYCHAIiBRwFHQACBwAA+gH3AoIB4QHgAd8B3gHdAdwB2wHaAdkB2AJDAkICQQJAAjgB9gH1AfQB8wHyAfEB8AHvAe4B7QHsAesB6gHpAegB5wHmAeUB5AHjAeIB+AH5AoQChgKFAocCgwKIAmIB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CEAIRBQ8CEgITAhQCFQIWAhcCGAIZAhoCGwJLAh0CHgIfAiAFCQIhAiMCJAIlAiYCJwIoAikCKwIsAi4CLQNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QFEAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgUTA4cDiAOKA4kDiwOMA40DjgOPA5ADkQOSA5MDlAOVA5YFEQUSBNwE3QTeBN8E4AThBOIE4wTkBOUE5gTnBOgE6QTqBOsE7ATtBO4E7wTwBPEE8gTzBPQE9QT2BPcE+AIPBPkE+gT7BPwE/QT+BP8FAAUBBQIFAwUEBQUFBgUHBRQFFQUWBRcFCAUKBQsFDQIqBQ4FDAIcAiIFHAUdAAEAAQF7AAEAAQBLAAEAAQC7AAEAAQA2AAEAAQATAAEAAgMZAxoAAgbkBtgAAgbmBtgAAQbuAAEG8AABBvIAAgABABQAHQAAAAEAAgAvAE8AAQADAEkASwJ6AAIAAAABBt4AAQAGAssCzALdAt4DYANpAAEABgBNAE4C8gPfA+EEWgACAAMBlAGUAAAB1QHXAAECLwI1AAQAAgACAKgArAABASQBJwABAAEADAAnACgAKwAzADUARgBHAEgASwBTAFQAVQACAAIAFAAdAAACZQJuAAoAAgAGAE0ATQAGAE4ATgAEAvIC8gAFA98D3wADA+ED4QACBFoEWgABAAIABAAUAB0AAAJ2AnYACgKBAoEACwSeBKUADAACAAYAGgAaAAAAHAAcAAECWgJfAAICYwJjAAgCZQJuAAkCdQJ1ABMAAQAUABoAHAJaAlsCXAJdAl4CXwJjAnUCdgKBBJ4EnwSgBKEEogSjBKQEpQABBd4AAQXgAAEF4gABBeQAAQXmAAEF6AABBeoAAQXsAAEF7gABBfAAAQXyAAEF9AABBfYAAQX4AAEF+gACBfwGAgACBgIGCAACBggGDgACBg4GFAACBhQGGgACBhoGIAACBiAGJgACBiYGLAACBiwGMgACBjIGOAACBjgGPgADBj4GRAZKAAMGSAZOBlQAAwZSBlgGXgADBlwGYgZoAAMGZgZsBnIAAwZwBnYGfAADBnoGgAaGAAMGhAaKBpAABAaOBpQGmgagAAQGnAaiBqgGrgAFBqoGsAa2BrwGwgAFBrwGwgbIBs4G1AAFBs4G1AbaBuAG5gAFBuAG5gbsBvIG+AAFBvIG+Ab+BwQHCgAFBwQHCgcQBxYHHAAFBxYHHAciBygHLgAFBygHLgc0BzoHQAAFBzoHQAdGB0wHUgAGB0wHUgdYB14HZAdqAAYHYgdoB24HdAd6B4AABgd4B34HhAeKB5AHlgAGB44HlAeaB6AHpgesAAYHpAeqB7AHtge8B8IABge6B8AHxgfMB9IH2AAGB9AH1gfcB+IH6AfuAAcILgfmB+wH8gf4B/4IBAAHCCYH+ggACAYIDAgSCBgAAQDrAAoARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAIUAhgCHAIkAigCLAI0AkACSAJQAuwC8AL0AvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkAygDLAMwAzQDOAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEHATABNAE2ATgBOgE8AUIBRAFGAUoBTQFaAo0CjwKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAsgCygLMAs4C0ALSAtQC1gLYAtoC3ALeAuAC4gLkAuYC6ALqAuwC7gLwAvIC9QL3AvkC+wL9Av8DAQMDAwUDBwMKAwwDDgMQAxIDFAMWAxgDGgMcAx4DIAMiAyQDJgMoAyoDLAMuAzADMgM0AzcDOQM7Az0DPwOvA7ADsQOyA7QDtQO2A7cDuAO5A7oDuwO8A70D1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPlA+cD6QPrBAAEAgQEBBIEGQQfBCUEjwSQBJQEmAUZBRsAAQD6AAgACgAUABUAFgAXABgAGQAaABsAHAAdACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAgQCDAIQAjACPAJEAkwCxALIAswC0ALUAtgC3ALgAuQC6ANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAS8BMwE1ATcBOQE7AUEBQwFFAUkBSwFMAVgBWQGnAa0BsgG1AosCjAKOApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAscCyQLLAs0CzwLRAtMC1QLXAtkC2wLdAt8C4QLjAuUC5wLpAusC7QLvAvEC8wL0AvYC+AL6AvwC/gMAAwIDBAMGAwkDCwMNAw8DEQMTAxUDFwMZAxsDHQMfAyEDIwMlAycDKQMrAy0DLwMxAzMDNQM2AzgDOgM8Az4DlwOYA5kDmgObA5wDnQOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD5APmA+gD6gP/BAEEAwQYBB4EJASOBJMElwUYBRoBzAACAE0BzQACAFABzgADAEoATQHPAAMASgBQAAEAAQBKAcsAAgBKAdEAAgBYAdAAAgBYAAEAAwBKAFcAlQAAAAEAAQABAAEAAAADBLcAAgCtAs0AAgCpBL0AAgCtBMoAAgCpBLgAAgCtAs4AAgCpBKcAAgCpBL4AAgCtBFoAAgCtBMsAAgCpAzwAAgCpAz4AAgCpAz0AAgCpAz8AAgCpBLYAAgCpBLsAAgHKBLkAAgCtBKYAAgCpAucAAgHKA/EAAgCpBMUAAgCtAx8AAgHKBNAAAgCtBNUAAgCtBNMAAgCqAzYAAgCpBNkAAgCtBLwAAgHKBLoAAgCtA/IAAgCpBMYAAgCtAyAAAgHKBNEAAgCtBNYAAgCtBNQAAgCqAzcAAgCpBNoAAgCtBL8AAgCpAvgAAgHKBMEAAgCtAvoAAgCpAvwAAgHKBMMAAgCtAxUAAgCpAxsAAgHKBM4AAgCtA+YAAgCpBNcAAgCtA+QAAgCoBMAAAgCpAvkAAgHKBMIAAgCtAvsAAgCpAv0AAgHKBMQAAgCtAxYAAgCpAxwAAgHKBM8AAgCtA+cAAgCpBNgAAgCtA+UAAgCoAw8AAgCpAxEAAgHKBMwAAgCtBLIAAgCsAxAAAgCpAxIAAgHKBM0AAgCtBLMAAgCsAwIAAgCpAwQAAgHKBMcAAgCtBKgAAgCoAqAAAgCqAqoAAgCpBIEAAgCtA+oAAgCoBIMAAgCrBIUAAgCqAwMAAgCpAwUAAgHKBMgAAgCtBKkAAgCoArsAAgCqAsUAAgCpBIIAAgCtA+sAAgCoBIQAAgCrBIYAAgCqArgAAgCpArcAAgCoBFgAAgCrAuwAAgCqBK8AAgCsBGkAAgCpBHEAAgCtBGsAAgCoBG0AAgCrBG8AAgCqBGoAAgCpBHIAAgCtBGwAAgCoBG4AAgCrBHAAAgCqBHcAAgCpBH8AAgCtBHkAAgCoBHsAAgCrBH0AAgCqBHgAAgCpBIAAAgCtBHoAAgCoBHwAAgCrBH4AAgCqApEAAgCpBC8AAgCtApAAAgCoBDEAAgCrApMAAgCqBKoAAgCsApkAAgCpBEcAAgCtApgAAgCoBEkAAgCrBEsAAgCqBKwAAgCsAp0AAgCpBFkAAgCtApwAAgCoBFcAAgCrAusAAgCqBK4AAgCsAqwAAgCpBDAAAgCtAqsAAgCoBDIAAgCrAq4AAgCqBKsAAgCsArQAAgCpBEgAAgCtArMAAgCoBEoAAgCrBEwAAgCqBK0AAgCsAr0AAgCpBFwAAgCtArwAAgCoBF4AAgCrAr8AAgCqBLEAAgCsAsIAAgCpBHQAAgCtAsEAAgCoBHYAAgCrAyYAAgCqBLUAAgCsAqIAAgCpBFsAAgCtAqEAAgCoBF0AAgCrAqQAAgCqBLAAAgCsAqcAAgCpBHMAAgCtAqYAAgCoBHUAAgCrAyUAAgCqBLQAAgCsBMkAAwCqAKkE0gADAKoAqQACABEAJQApAAAAKwAtAAUALwA0AAgANgA7AA4APQA+ABQARQBJABYASwBNABsATwBUAB4AVgBbACQAXQBeACoAgQCBACwAgwCDAC0AhgCGAC4AiQCJAC8AjQCNADAAmACbADEA0ADQADUAAA==\",\n  \"Roboto-MediumItalic.ttf\": \"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BGoAWwRqAAkF0gA7BKkAMgQmAA4EnAA0BEYABwPWAB4H7wAJBM7/2gLe//UC3v/zAt4ACwLeABYC3gAlAt4ABQLeADQDmQCRApoBCAPCAAkEGv+HBJIAOwUZACsFAAArBBAAFAUNACsECQAUBFcACQReADkEPwAJBHb/mgHvAOgDhQEEAAD9JwPZANwD2wAWA+wA3APcANsDnwAJA4EBBAOBAQUC6ACJAugAZgLoAH4C6ACJAugAmALoAHgC6ACnBUoAbAVzAGsFVQArBawAbgWuAG0ECQCrBF8AHAQ3/4EEl//RBEn/2AQOADEDhQEFAa3/uAZmADsEiwBFAfz/AARz/6kEc//ZBHP/yQRzABMEcwBMBHMAIgRzAFcEcwAxBHMANwRzAPgCH/8EAh//BAIRACMCEf98AhEAIwQ/AAkEwQBMBBAAVgRmABAEHgA2BHIANwRuAC0EegAyBG//yAR3ADYEKAA6BGYALgQ4/58DmwCrBOYAJAOn/+8GFf9+A+gACQSZ/9sE5wAiBLYACQH4AAACowBABS8AIAUvACAEbgArBLoAnQKW/+UFJf+jBSX/owUl/6MFJf+jBSX/owUl/6MFJf+jBREAXwRjACYEYwAmBGMAJgRjACYCMgA3AjIANwIyADcCMgA3BYEAJgVZAGIFWQBiBVkAYgVZAGIFWQBiBRQAWAUUAFgFFABYBRQAWAS9AKEELwAcBC8AHAQvABwELwAcBC8AHAQvABwELwAcBA0ANwQoADoEKAA6BCgAOgQoADoCBwAjAgcAIwIHACMCBwAjBFIADQRnADgEZwA4BGcAOARnADgEZwA4BFEASgRRAEoEUQBKBFEASgPN/7wDzf+8BSX/owQvABwFJf+jBC8AHAUl/6MELwAcBREAXwQNADcFEQBfBA0ANwURAF8EDQA3BREAXwQNADcFEQAmBPUAOARjACYEKAA6BGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoFSQBmBGb/+QVJAGYEZv/5BUkAZgRm//kFSQBmBGb/+QWBACYEUAANAjIANwIHABMCMgA3AgcAIwIyADcCBwAjAjL/jgH6/3UCMgA3BoIANwPsACAETwAEAhX/BATnACYEDAARBDEAJgH6ACAEMQAmAfr/pgQxACYCkAAgBDEAJgLWACAFgQAmBFIADQWBACYEUgANBYEAJgRSAA0EUgANBVkAYgRnADgFWQBiBGcAOAVZAGIEZwA4BOIAJgK+ABEE4gAmAr7/nwTiACYCvgARBLQAJgP/ABsEtAAmA/8AGwS0ACYD/wAbBLQAJgP/ABsEtAAmA/8AGwS6AJ0ClgA/BLoAnQKWAD8EugCdAr4APwUUAFgEUQBKBRQAWARRAEoFFABYBFEASgUUAFgEUQBKBRQAWARRAEoFFABYBFEASgbVALUFwgB5BL0AoQPN/7wEvQChBK7/5QPo/+YErv/lA+j/5gSu/+UD6P/mB0X/jQaOAA4FVwAWBGMAKgRX/5YEV/+WBB4AYwR2/5oEdv+aBHb/mgR2/5oEdv+aBHb/mgR2/5oEXgA5A8IACQPCAAkDwgAJA8IACQHvABoB7wAaAe8AGgHvABoEtgAJBJkAOwSZADsEmQA7BJkAOwSZADsEZgA4BGYAOARmADgEZgA4BB4AbAR2/5oEdv+aBHb/mgReADkEXgA5BF4AOQReADkEVwAJA8IACQPCAAkDwgAJA8IACQPCAAkEgwA/BIMAPwSDAD8EgwA/BLcACQHvAA4B7wAaAe8AGgH5/5cB7wAaA7n/8wQ8AAkDmwAJA5sACQObAAkDmwAJBLYACQS2AAkEtgAJBJkAOwSZADsEmQA7BEMACQRDAAkEQwAJBBYADwQWAA8EFgAPBBYADwQeAGMEHgBjBB4AYwRmADgEZgA4BGYAOARmADgEZgA4BGYAOAXaAIsEHgBsBB4AbAQL/9YEC//WBAv/1gUl/6MEx/+6BeX/wgKW/8YFbQAmBSH/uAVEAB4CkAAJBSX/owTmACYEYwAmBK7/5QWBACYCMgA3BOcAJgbJACYFgQAmBVkAYgT0ACYEugCdBL0AoQTm/8ACMgA3BL0AoQRhADsEQwAoBGMAEQKQAGYEPABXBHcAIQRnADgEnf/eA9oAZAQ4/58CkABEBDwAVwRnADgEPABXBmEAUgRjACYEUgArBLQAJgIyADcCMgA3BE8ABAUAACsE5wAmBOQAmQUl/6ME5gAmBFIAKwRjACYFegAlBskAJgWBACYFWQBiBYIAKwT0ACYFEQBfBLoAnQTm/8AELwAcBCgAOgRvABcEZwA4BF3/yAQNADcDzf+8A+j/ugQoADoDQQAWA/8AGwH6ACACBwAjAfL/AgRKACIDzf+8BtUAtQXCAHkG1QC1BcIAeQbVALUFwgB5BL0AoQPN/7wBTACRAnoAnQQbADMCFf8EAa0AjQbJACYGwwAPBSX/owQvABwEYwAmBXoAJQQoADoEbwAXBYUAdgWfAD8E8QCoA+4AdQg0ADgJJgBiBLYAHwP4ABcFEQBfBA0ANwS9AKED7QB1AjIANwdu/6QGVf+wAjIANwUl/6MELwAcBSX/owQvABwHRf+NBo4ADgRjACYEKAA6BWIASwQZADQEGQA0B27/pAZV/7AEtgAfA/gAFwV6ACUEbwAXBXoAJQRvABcFWQBiBGcAOAVQAGEEZQA0BVAAYQRlADQFIABIBBkAIATkAJkDzf+8BOQAmQPN/7wE5ACZA83/vAVaAMQEQwBtBsUALAZIACMEXwA4BSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoEYwAmBCgAOgIyADcCBwAjAjL//wH6/+MFWQBiBGcAOAVZAGIEZwA4BVkAYgRnADgFWQBiBGcAOAVZAGIEZwA4BVkAYgRnADgFWQBiBGcAOAVmAFwEegA0BWYAXAR6ADQFZgBcBHoANAVmAFwEegA0BWYAXAR6ADQFFABYBFEASgUUAFgEUQBKBXcAWATAAEoFdwBYBMAASgV3AFgEwABKBXcAWATAAEoFdwBYBMAASgS9AKEDzf+8BL0AoQPN/7wEvQChA83/vAR9//QEugCdA9sAVAVaAMQEQwBtBFIAKwNBABYF7ABVBKD/8gRQAA0E2wAkBNsAJARSAAADQf/HBRQAPwQkACgEvQChA+0AUgTm/8AD6P+6BEMAKARG/8IGBAB8BGkADQRpACYEaQANBGkAWAR9AHEEkQBLBH0AjASRAHMFSQBmBGb/+QWBACYEUgANBSX/owQvABwEYwAmBCgAOgIy/88CB/+ABVkAYgRnADgE4gAmAr4ADAUUAFgEUQBKBMj/hQTmACYEXQAQBREAJgRfADgFEQAmBF8AOAWBACYEUAANBOcAJgQMABEE5wAmBAwAEQQxACYB+v/jBskAJgbDAA8FgQAm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AGQAaQB1AG0AIABJAHQAYQBsAGkAYwBWAGUAcgBzAGkAbwBuACAAMwAuADAAMAA1ADsAIAAyADAAMgAyAFIAbwBiAG8AdABvAC0ATQBlAGQAaQB1AG0ASQB0AGEAbABpAGMAUgBvAGIAbwB0AG8AIABpAHMAIABhACAAdAByAGEAZABlAG0AYQByAGsAIABvAGYAIABHAG8AbwBnAGwAZQAuAEcAbwBvAGcAbABlAEMAaAByAGkAcwB0AGkAYQBuACAAUgBvAGIAZQByAHQAcwBvAG4ARwBvAG8AZwBsAGUALgBjAG8AbQBMAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAEEAcABhAGMAaABlACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADIALgAwAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBhAHAAYQBjAGgAZQAuAG8AcgBnAC8AbABpAGMAZQBuAHMAZQBzAC8ATABJAEMARQBOAFMARQAtADIALgAwAFIAbwBiAG8AdABvAE0AZQBkAGkAdQBtACAASQB0AGEAbABpAGMAAAADAAD/9AAA/2oAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgAIAAj//wAPAAEAAgAOAAAAAAAAAigAAgBZACUAPgABAEQAXgABAGoAagABAHAAcAABAHUAdQABAIEAgQABAIMAgwABAIYAhgABAIkAiQABAIsAlgABAJgAnwABAKEAowABAKUApgABAKgArQADALEAsQABALoAuwABAL8AvwABAMEAwQABAMMAxAABAMcAxwABAMsAywABAM0AzgABANAA0QABANMA0wABANoA3gABAOEA4QABAOUA5QABAOcA6QABAOsA+wABAP0A/QABAP8BAQABAQMBAwABAQgBCQABARYBGgABARwBHAABASABIgABASQBJwADASoBKwABATMBNAABATYBNgABATsBPAABAUEBRAABAUcBSAABAUsBTQABAVEBUQABAVQBWAABAV0BXgABAWIBYgABAWQBZAABAWgBaAABAWoBbAABAW4BbgABAXABcAABAcsB0QACAeIB9gABAfoB+gABAgMCAwABAgUCBQABAgwCDgABAhACEQABAhMCEwABAhcCFwABAhkCGwABAiECIQABAiYCKAAB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/+gEX//oBGH/6ARj/+gEZf/oBGf/6ARp/+gEa//oBG3/6ARv/+gEcf/oBIH/3wSD/98Ehf/fBIj/4ASK/+EEi//gBJf/3wSqABAEsP/oBMn/6ATQ/+AE0//gBNX/4AC6AEf/3ABI/9wASf/cAEv/3ABR/+EAUv/hAFP/1gBU/+EAVf/cAFn/3QBa/+EAXf/hAJT/3ACZ/9wAm//dALv/3AC9/+EAvv/1AL//5gDB/+EAwv/rAMP/6QDF//AAxv/nAMj/3ADJ/9wAyv/jAMv/3QDM/84Azf/UAM7/2wDs/+EA8P/hAPH/4QDz/+EA9P/hAPX/4QD3/9wA+P/hAPr/4QD7/+EA/v/hAQD/4QED/9wBBf/hARj/1gEa/+EBHv/cASL/3AEr/+EBNv/hATz/4QE+/+EBQv/cAVP/4QFV/+EBV//hAVz/4QFg/9wBYf/cAWv/3AKy/9wCs//cArT/3AK1/9wCtv/cArv/4QK8/9YCvf/WAr7/1gK//9YCwP/WAsH/3QLC/90Cw//dAsT/3QLF/+ECxv/hAs7/3ALQ/9wC0v/cAtT/3ALW/9wC2P/cAtr/3ALc/9wC3v/cAuD/3ALi/9wC5P/cAub/3ALo/9wDA//hAwX/4QMH/+EDCP/hAwr/1gMM/9YDDv/WAyb/3QMo/90DKv/dAyz/3QMu/90DMP/dAzT/4QOv/9wDsf/hA7P/3QO1/9YDt//hA7r/3QO7/9YDvP/dA9X/3APW/+ED1//WA9j/4QPZ/9wD2v/hA9z/3APd/+ED4v/hA+P/4QPr/+ED8v/hA/f/3AP4/+ED/P/hA/3/3AQC/9wEBP/hBBD/3AQS/9wEE//cBBn/4QQb/+EEHf/WBB//3AQh/9YEJf/hBCf/4QQp/+EELf/hBC7/3ARI/9wESv/cBEz/3ARO/9wEUP/cBFL/3ARU/9wEVv/cBFz/1gRe/9YEYP/WBGL/1gRk/9YEZv/WBGj/1gRq/9wEbP/cBG7/3ARw/9YEcv/cBHT/3QR2/90EeP/dBHr/3QR8/90Efv/dBID/3QSC/+EEhP/hBIb/4QSN/+EEqf/hBK3/3ASx/9YEtf/dBLr/3AS8/9wExv/hBMj/4QTU/+EE1v/hAL8ABgAMAAsADABH/+gASP/oAEn/6ABKAAwAS//oAFP/6gBV/+gAWgALAF0ACwCU/+gAmf/oALv/6AC9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/8AB/f/AAkP/wAKQ/04Ckf9OApL/TgKT/04ClP9OApX/TgKW/04Cq//eAqz/3gKt/94Crv/eAq//3gKw/94Csf/eArL/6wKz/+sCtP/rArX/6wK2/+sCvP/rAr3/6wK+/+sCv//rAsD/6wLB/+oCwv/qAsP/6gLE/+oCxf/oAsb/6ALH/04CyP/eAsn/TgLK/94Cy/9OAsz/3gLO/+sC0P/rAtL/6wLU/+sC1v/rAtj/6wLa/+sC3P/rAt7/6wLg/+sC4v/rAuT/6wLm/+sC6P/rAvb/DQMK/+sDDP/rAw7/6wMfABQDIQAUAyMAFAMm/+oDKP/qAyr/6gMs/+oDLv/qAzD/6gM0/+gDQ//AA0T/wANF/8ADRv/AA0f/wANI/8ADSf/AA17/wANf/8ADYP/AA5f/TgOf/04Dr//rA7P/6gO1/+sDt//oA7r/6gO7/+sDvP/qA8P/DQPH/04D0gAUA9T/3gPV/+sD1//rA9n/6wPa/+gD3P/rA+P/6APr/+gD8/9OA/T/3gP3/+sD/P/oA/3/6wQC/+sEBP/oBAn/TgQK/94EC/9OBAz/3gQQ/+sEEv/rBBP/6wQd/+sEH//rBCH/6wQl/+gEJ//oBCn/6AQu/+sEL/9OBDD/3gQx/04EMv/eBDP/TgQ0/94ENf9OBDb/3gQ3/04EOP/eBDn/TgQ6/94EO/9OBDz/3gQ9/04EPv/eBD//TgRA/94EQf9OBEL/3gRD/04ERP/eBEX/TgRG/94ESP/rBEr/6wRM/+sETv/rBFD/6wRS/+sEVP/rBFb/6wRc/+sEXv/rBGD/6wRi/+sEZP/rBGb/6wRo/+sEav/rBGz/6wRu/+sEcP/rBHL/6wR0/+oEdv/qBHj/6gR6/+oEfP/qBH7/6gSA/+oEgv/oBIT/6ASG/+gEiAAUBKr/TgSr/94Erf/rBLH/6wS1/+oEuv/rBLz/6wTQABQE1P/oBNb/6ATc/8AE4//ABPv/wAACAKAABAAEAAAABgAGAAEACwAMAAIAEwATAAQAJQAqAAUALAAtAAsALwA2AA0AOAA4ABUAOgA/ABYARQBGABwASQBKAB4ATABMACAATwBPACEAUQBUACIAVgBWACYAWABYACcAWgBdACgAXwBfACwAigCKAC0AlgCWAC4AnQCdAC8AsQC1ADAAtwC5ADUAuwC7ADgAvQC+ADkAwADBADsAwwDFAD0AxwDOAEAA0gDSAEgA1ADeAEkA4ADvAFQA8QDxAGQA9gD4AGUA+wD8AGgA/gEAAGoBAwEFAG0BCgEKAHABDQENAHEBGAEaAHIBIgEiAHUBLgEwAHYBMwE1AHkBNwE3AHwBOQE5AH0BOwE7AH4BQwFEAH8BVAFUAIEBVgFWAIIBWAFYAIMBXAFeAIQBhAGFAIcBhwGJAIkB6AHoAIwB6gHrAI0B7QHtAI8B8AHwAJAB+wH9AJECQAJAAJQCQwJDAJUCVQJVAJYCVwJYAJcCiwKMAJkCjgKOAJsCkAKlAJwCqgKxALICswK2ALoCuwLAAL4CxQLNAMQCzwLPAM0C0QLRAM4C0wLTAM8C1QLVANAC1wLgANEC6QLrANsC7QLtAN4C7wLvAN8C8QLxAOAC8wLzAOEC+AL4AOIC+gL6AOMC/AL8AOQC/gL+AOUDAAMAAOYDAgMOAOcDEAMQAPQDEgMSAPUDFAMUAPYDHwMfAPcDIQMhAPgDIwMjAPkDMQMxAPoDMwM2APsDOAM4AP8DOgM6AQADQANJAQEDVANYAQsDXgNgARADZQNlARMDdwN6ARQDfgOAARgDiQOJARsDlwOcARwDnwOuASIDsQOxATIDtQO1ATMDtwO3ATQDuwO7ATUDvgO/ATYDwQPCATgDxAPKAToDzAPOAUED0APVAUQD1wPYAUoD2gPdAUwD4wPkAVAD5gPmAVID6APoAVMD6gPtAVQD8AP1AVgD9wP3AV4D+wP8AV8EAQQBAWEEAwQMAWIEDwQQAWwEEgQVAW4EHAQdAXIEIQQhAXQEIwQpAXUELwRXAXwEWQRZAaUEWwRoAaYEcARwAbQEgQSGAbUEiASIAbsEjASNAbwEkASQAb4EkgSTAb8ElQSVAcEElwSXAcIEqASsAcMErgSuAcgEsASxAckEswSzAcsEtwS5AcwEuwS7Ac8EvQS/AdAEwQTBAdMEwwTDAdQExQTLAdUEzQTNAdwE0ATQAd0E0wTXAd4E2QTZAeME2wTcAeQE4ATgAeYE4wTjAecE7gTuAegE+wT7AekFAgUCAeoFBgUGAesAAgCaAAYABgAAAAsACwABABAAEAACABIAEgADACUAKQAEACwANAAJADgAPgASAEUARwAZAEkASQAcAEwATAAdAFEAVAAeAFYAVgAiAFoAWgAjAFwAXgAkAIoAigAnAJYAlgAoALEAtAApAL0AvQAtAMEAwQAuAMcAxwAvANQA1QAwANcA1wAyANoA2gAzANwA3gA0AOAA5gA3AOwA7AA+AO4A7gA/APcA9wBAAPwA/ABBAP4A/wBCAQQBBQBEAQoBCgBGAQ0BDQBHARgBGgBIAS4BMABLATMBNQBOATcBNwBRATkBOQBSATsBOwBTAUMBRABUAVQBVABWAVYBVgBXAVgBWABYAVwBXgBZAYQBigBcAY4BjwBjAegB6ABlAe0B7QBmAfAB8QBnAfsB/QBpAg8CDwBsAh4CIABtAkACQABwAkMCQwBxAlUCVQByAlcCWABzAosCjAB1Ao4CjgB3ApACtgB4ArsCwACfAsUC1QClAtcC4AC2AukC6wDAAu0C7QDDAu8C7wDEAvEC8QDFAvMC8wDGAvYC9gDHAvgC+ADIAvoC+gDJAvwC/ADKAv4C/gDLAwADAADMAwIDDgDNAxADEADaAxIDEgDbAxQDFADcAx8DHwDdAyEDIQDeAyMDIwDfAyUDJQDgAycDJwDhAykDKQDiAysDKwDjAy0DLQDkAy8DLwDlAzEDMQDmAzMDOwDnA0ADSQDwA1QDWAD6A14DYAD/A2UDZQECA3YDegEDA34DgAEIA4kDiQELA5cDnAEMA58DrgESA7EDsQEiA7UDtQEjA7cDtwEkA7sDuwElA74DvwEmA8EDygEoA8wDzgEyA9AD1QE1A9cD3QE7A+MD5AFCA+YD5gFEA+gD6AFFA+oD7QFGA/AD9QFKA/cD9wFQA/sD/AFRBAEEDAFTBA8EEAFfBBIEFQFhBBwEHQFlBCEEIQFnBCMEKQFoBC8EVwFvBFkEWQGYBFsEaAGZBHAEcAGnBHMEcwGoBHUEdQGpBIEEhgGqBIgEiAGwBIwEjQGxBJAEkAGzBJIEkwG0BJUElQG2BJcElwG3BKgErAG4BK4ErgG9BLAEsQG+BLMEswHABLcEuQHBBLsEuwHEBL0EvwHFBMEEwQHIBMMEwwHJBMUEywHKBM0EzQHRBNAE0AHSBNIE1wHTBNkE3AHZBOAE4AHdBOME4wHeBOkE6QHfBO4E7gHgBPkE+QHhBPsE+wHiBQIFAgHjBQYFBgHkAAIBdAAGAAYADwALAAsADwAQABAAGgASABIAGgAlACUAAgAmACYAJAAnACcAEAAoACgAAQApACkABAAuAC4ACAAv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AAAABAAAAAAAAAAAAAAAAAAAAAAAAAACAAcAGgAJAAIAAAACAAEAAgAAAAIAAQAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAABAAEwAAAAMAAAAAAA0AAAAAAAMAAAADAAAAAAACAAEAEAATAA0AAAAgACIAAAAAAAAAAAAAAAAAAAAeACEAAAADAAAAAwAAAAMAAAAAAAAAAAADABAAEwAAAAEAAQAAAAAAAAAAAB4AAAAAAAAAAgABAAAAAAAAAB4AIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAGwAAAA8ADwAYAA8ADwAPABgAAAAAAAAAGAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASABkAJAAAAA4AFQAcAAAABQAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAKAAUACgAAAAAAAAAAAAAAAAAVAAUAAAAAABUAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAABUABQASABkAFQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAAACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAAAAAAAAAAABAAEAAQABAAEAAQABAACAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgACAAIAAgALAAsACwALAAwABgAGAAYABgAGAAYABgABAAEAAQABAAEAAAAAAAAAAAADAAcABwAHAAcABwAIAAgACAAIAAkACQAEAAYABAAGAAQABgACAAEAAgABAAIAAQACAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAgABAAIAAQACAAEAAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAMAAwACAAcAAgAHAAIABwAAAAAAAAAAAAAAAAAUABEAFAARABQAEQAUABEAFAARAA0AAAANAAAADQAAAAsACAALAAgACwAIAAsACAALAAgACwAIABYAAAAMAAkADAAXAB0AFwAdABcAHQAAAAAAAgAAAAAAAAAAAAoACgAKAAoACgAKAAoABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUADgAOAA4ADgASAAoACgAKAAUABQAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAcABwAHAAcAAAAFQAAAA4ADgAOAA4ADgAOACQAEgASAAAAAAAAAAQAAAAAAAAAAgAMAAAAAAAEAAAAAAAXAAAAAAAAAAAAAAACAAAAAAAMABAAAAAMAAEAAAADAAAACAAAAAcAAAAJAAAAAAAIAAcACAAAAAAAAAAAAAAAAAAjAAAAAAAfAAQAAAAAAAAAAAAAAAAAAgAAAAAAAgANABAABgABAAMABwADAAEACQATAAEAAwARAAAAAAAAAAMACQAWAAAAFgAAABYAAAAMAAkADwAPAAAAAAAPAAAAAwAEAAYAAAAAAAEAAwAAAAAAGgAJAAEAAgAAAAAAAgABAAwACQAAABAAEwAAAAQABgAEAAYAAAAAAAAAAQAAAAEAAQAQABMAAAAAAAAAAwAAAAMAAgAHAAIAAQACAAcAAAAAAB8ACQAfAAkAHwAJACAAIgAAAAMAAQAEAAYABAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAgAHAAIABwACAAcAAgAHAAIABwACAAcAAgAHAAIAAQACAAEAAgABAAIABwACAAEACwAIAAsACAAAAAgAAAAIAAAACAAAAAgAAAAIAAwACQAMAAkADAAJAAAADQAAACAAIgAAAAMAAAAA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BjIGOgX8BoYHVAXABnIGQgYCB2QGCAZKBpIGDgccBcQFyAYUByoFzAXQBdQGUgZaBhoGngc4BdgGfAZiBiAHRgYmBmoGqgYsBdwF4AXkBegGtgbCBs4G2gbmBewAAgcCAOsCggJDAkICQQJAAjgB9gH1AfQB8wHyAfEB8AHvAe4B7QHsAesB6gHpAegB5wHmAeUB5AHjAeICdAKEA0EChgKFA0AB8wKDAogCYgTjBOQB+gH7BOUE5gTnAfwE6AH9Af4B/wTtAgACAATuBO8CAQICAgMCCgT8BP0CCwIMAg0CDgIPAhAFAAUBBQMFBgUPAhICEwIUAhUCFgIXAhgCGQIaAhsCBAIFAgYCBwIIAgkCSwIdAh4CHwIgBQkCIQIjAiQCJQInAikChwNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA5MDXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwUQA3UDdgN3A3gDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGBRMDhwOIA4oDiQOLA4wDjQOOA48DkAORA5IDlAOVA5YFEQUSBNwE3QTeBN8E6QTsBOoE6wTwBPEE8gTgBOEE4gT7BP4E/wUCBQQFBQIRBQcE8wT0BPUE9gT3BPgE+QT6BRQFFQUWBRcFCAUKBQsCKAUNAioFDgUMAiYCHAIiBRwFHQACBwAA+gH3AoIB4QHgAd8B3gHdAdwB2wHaAdkB2AJDAkICQQJAAjgB9gH1AfQB8wHyAfEB8AHvAe4B7QHsAesB6gHpAegB5wHmAeUB5AHjAeIB+AH5AoQChgKFAocCgwKIAmIB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CEAIRBQ8CEgITAhQCFQIWAhcCGAIZAhoCGwJLAh0CHgIfAiAFCQIhAiMCJAIlAiYCJwIoAikCKwIsAi4CLQNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QFEAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgUTA4cDiAOKA4kDiwOMA40DjgOPA5ADkQOSA5MDlAOVA5YFEQUSBNwE3QTeBN8E4AThBOIE4wTkBOUE5gTnBOgE6QTqBOsE7ATtBO4E7wTwBPEE8gTzBPQE9QT2BPcE+AIPBPkE+gT7BPwE/QT+BP8FAAUBBQIFAwUEBQUFBgUHBRQFFQUWBRcFCAUKBQsFDQIqBQ4FDAIcAiIFHAUdAAEAAQF7AAEAAQBLAAEAAQC7AAEAAQA2AAEAAQATAAEAAgMZAxoAAgbkBtgAAgbmBtgAAQbuAAEG8AABBvIAAgABABQAHQAAAAEAAgAvAE8AAQADAEkASwJ6AAIAAAABBt4AAQAGAssCzALdAt4DYANpAAEABgBNAE4C8gPfA+EEWgACAAMBlAGUAAAB1QHXAAECLwI1AAQAAgACAKgArAABASQBJwABAAEADAAnACgAKwAzADUARgBHAEgASwBTAFQAVQACAAIAFAAdAAACZQJuAAoAAgAGAE0ATQAGAE4ATgAEAvIC8gAFA98D3wADA+ED4QACBFoEWgABAAIABAAUAB0AAAJ2AnYACgKBAoEACwSeBKUADAACAAYAGgAaAAAAHAAcAAECWgJfAAICYwJjAAgCZQJuAAkCdQJ1ABMAAQAUABoAHAJaAlsCXAJdAl4CXwJjAnUCdgKBBJ4EnwSgBKEEogSjBKQEpQABBd4AAQXgAAEF4gABBeQAAQXmAAEF6AABBeoAAQXsAAEF7gABBfAAAQXyAAEF9AABBfYAAQX4AAEF+gACBfwGAgACBgIGCAACBggGDgACBg4GFAACBhQGGgACBhoGIAACBiAGJgACBiYGLAACBiwGMgACBjIGOAACBjgGPgADBj4GRAZKAAMGSAZOBlQAAwZSBlgGXgADBlwGYgZoAAMGZgZsBnIAAwZwBnYGfAADBnoGgAaGAAMGhAaKBpAABAaOBpQGmgagAAQGnAaiBqgGrgAFBqoGsAa2BrwGwgAFBrwGwgbIBs4G1AAFBs4G1AbaBuAG5gAFBuAG5gbsBvIG+AAFBvIG+Ab+BwQHCgAFBwQHCgcQBxYHHAAFBxYHHAciBygHLgAFBygHLgc0BzoHQAAFBzoHQAdGB0wHUgAGB0wHUgdYB14HZAdqAAYHYgdoB24HdAd6B4AABgd4B34HhAeKB5AHlgAGB44HlAeaB6AHpgesAAYHpAeqB7AHtge8B8IABge6B8AHxgfMB9IH2AAGB9AH1gfcB+IH6AfuAAcILgfmB+wH8gf4B/4IBAAHCCYH+ggACAYIDAgSCBgAAQDrAAoARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAIUAhgCHAIkAigCLAI0AkACSAJQAuwC8AL0AvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkAygDLAMwAzQDOAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEHATABNAE2ATgBOgE8AUIBRAFGAUoBTQFaAo0CjwKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAsgCygLMAs4C0ALSAtQC1gLYAtoC3ALeAuAC4gLkAuYC6ALqAuwC7gLwAvIC9QL3AvkC+wL9Av8DAQMDAwUDBwMKAwwDDgMQAxIDFAMWAxgDGgMcAx4DIAMiAyQDJgMoAyoDLAMuAzADMgM0AzcDOQM7Az0DPwOvA7ADsQOyA7QDtQO2A7cDuAO5A7oDuwO8A70D1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPlA+cD6QPrBAAEAgQEBBIEGQQfBCUEjwSQBJQEmAUZBRsAAQD6AAgACgAUABUAFgAXABgAGQAaABsAHAAdACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAgQCDAIQAjACPAJEAkwCxALIAswC0ALUAtgC3ALgAuQC6ANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAS8BMwE1ATcBOQE7AUEBQwFFAUkBSwFMAVgBWQGnAa0BsgG1AosCjAKOApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAscCyQLLAs0CzwLRAtMC1QLXAtkC2wLdAt8C4QLjAuUC5wLpAusC7QLvAvEC8wL0AvYC+AL6AvwC/gMAAwIDBAMGAwkDCwMNAw8DEQMTAxUDFwMZAxsDHQMfAyEDIwMlAycDKQMrAy0DLwMxAzMDNQM2AzgDOgM8Az4DlwOYA5kDmgObA5wDnQOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD5APmA+gD6gP/BAEEAwQYBB4EJASOBJMElwUYBRoBzAACAE0BzQACAFABzgADAEoATQHPAAMASgBQAAEAAQBKAcsAAgBKAdEAAgBYAdAAAgBYAAEAAwBKAFcAlQAAAAEAAQABAAEAAAADBLcAAgCtAs0AAgCpBL0AAgCtBMoAAgCpBLgAAgCtAs4AAgCpBKcAAgCpBL4AAgCtBFoAAgCtBMsAAgCpAzwAAgCpAz4AAgCpAz0AAgCpAz8AAgCpBLYAAgCpBLsAAgHKBLkAAgCtBKYAAgCpAucAAgHKA/EAAgCpBMUAAgCtAx8AAgHKBNAAAgCtBNUAAgCtBNMAAgCqAzYAAgCpBNkAAgCtBLwAAgHKBLoAAgCtA/IAAgCpBMYAAgCtAyAAAgHKBNEAAgCtBNYAAgCtBNQAAgCqAzcAAgCpBNoAAgCtBL8AAgCpAvgAAgHKBMEAAgCtAvoAAgCpAvwAAgHKBMMAAgCtAxUAAgCpAxsAAgHKBM4AAgCtA+YAAgCpBNcAAgCtA+QAAgCoBMAAAgCpAvkAAgHKBMIAAgCtAvsAAgCpAv0AAgHKBMQAAgCtAxYAAgCpAxwAAgHKBM8AAgCtA+cAAgCpBNgAAgCtA+UAAgCoAw8AAgCpAxEAAgHKBMwAAgCtBLIAAgCsAxAAAgCpAxIAAgHKBM0AAgCtBLMAAgCsAwIAAgCpAwQAAgHKBMcAAgCtBKgAAgCoAqAAAgCqAqoAAgCpBIEAAgCtA+oAAgCoBIMAAgCrBIUAAgCqAwMAAgCpAwUAAgHKBMgAAgCtBKkAAgCoArsAAgCqAsUAAgCpBIIAAgCtA+sAAgCoBIQAAgCrBIYAAgCqArgAAgCpArcAAgCoBFgAAgCrAuwAAgCqBK8AAgCsBGkAAgCpBHEAAgCtBGsAAgCoBG0AAgCrBG8AAgCqBGoAAgCpBHIAAgCtBGwAAgCoBG4AAgCrBHAAAgCqBHcAAgCpBH8AAgCtBHkAAgCoBHsAAgCrBH0AAgCqBHgAAgCpBIAAAgCtBHoAAgCoBHwAAgCrBH4AAgCqApEAAgCpBC8AAgCtApAAAgCoBDEAAgCrApMAAgCqBKoAAgCsApkAAgCpBEcAAgCtApgAAgCoBEkAAgCrBEsAAgCqBKwAAgCsAp0AAgCpBFkAAgCtApwAAgCoBFcAAgCrAusAAgCqBK4AAgCsAqwAAgCpBDAAAgCtAqsAAgCoBDIAAgCrAq4AAgCqBKsAAgCsArQAAgCpBEgAAgCtArMAAgCoBEoAAgCrBEwAAgCqBK0AAgCsAr0AAgCpBFwAAgCtArwAAgCoBF4AAgCrAr8AAgCqBLEAAgCsAsIAAgCpBHQAAgCtAsEAAgCoBHYAAgCrAyYAAgCqBLUAAgCsAqIAAgCpBFsAAgCtAqEAAgCoBF0AAgCrAqQAAgCqBLAAAgCsAqcAAgCpBHMAAgCtAqYAAgCoBHUAAgCrAyUAAgCqBLQAAgCsBMkAAwCqAKkE0gADAKoAqQACABEAJQApAAAAKwAtAAUALwA0AAgANgA7AA4APQA+ABQARQBJABYASwBNABsATwBUAB4AVgBbACQAXQBeACoAgQCBACwAgwCDAC0AhgCGAC4AiQCJAC8AjQCNADAAmACbADEA0ADQADUAAA==\",\n  \"Roboto-Regular.ttf\": \"AAEAAAARAQAABAAQR0RFRqWLoiAAAb8IAAACWEdQT1PInCKzAAHBYAAAZfhHU1VChRYO9AACJ1gAABX2T1MvMpeDsYsAAAGYAAAAYGNtYXDOyFo6AAAWdAAABoJjdnQgO/gmfQAAL1AAAAD+ZnBnbagFhDIAABz4AAAPhmdhc3AACAAZAAG+/AAAAAxnbHlmnLrJSwAAOpAAAYGgaGVhZAZzHSoAAAEcAAAANmhoZWEKugrAAAABVAAAACRobXR45eWbKgAAAfgAABR8bG9jYQ+pa9gAADBQAAAKQG1heHAIzxDGAAABeAAAACBuYW1lOEJpvQABvDAAAAKqcG9zdP9tAGQAAb7cAAAAIHByZXB5WM7TAAAsgAAAAs4AAQAAAAMBSPgkVmdfDzz1ABsIAAAAAADE8BEuAAAAAN8Gv276Gv3VCTEIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJSvoa/koJMQABAAAAAAAAAAAAAAAAAAAFHwABAAAFHwCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAQAAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA4wAZAAAAAAAAAAAAfwAAAH8AAACEAChApAAiQTtAHcEfwBuBdwAaQT6AGYBZgBoAr0AhgLJACcDcgAcBIoATgGTAB0CNgAmAhwAkANNABMEfwBzBH8AqwR/AF4EfwBfBH8ANQR/AJoEfwCFBH8ATgR/AHEEfwBkAfAAhQGxACkEEQBIBGQAmAQvAIcDyABLBy8AbQU4AB0E/ACpBTUAeAVAAKkEjACpBGwAqQVzAHoFtQCpAi0AtwRqADUFBQCpBE8AqQb8AKkFtQCpBYEAdwUMAKkFgQBuBO4AqQTAAFEExgAyBTAAjAUYAB0HGQA9BQQAOgTOAA8EywBXAh8AkwNJACkCHwAKA1gAQAOcAAQCeQA5BFoAbQR+AIwEMABdBIMAXwQ+AF0CyAA9BH4AYQRoAI0B8gCOAer/vgQOAI0B8gCcBwQAiwRrAI0EkABcBH4AjASMAF8CtgCNBCEAXwKeAAkEaQCJA+AAIQYDACsD+AAqA8kAFgP4AFkCtQBAAfQAsAK1ABQFcQCDAfQAiwRhAGkEpwBbBbUAaQQ0AA8B7ACUBOgAWwNZAGUGSQBcA5QAkwPBAGUEbgB/BkoAWwOrAI8C/QCDBEcAYQLvAEIC7wA/AoIAewSJAJsD6gBEAhcAlAH8AHQC7wB7A6QAewPAAGcF3ABVBjUAUAY5AHADygBEB3r/8QRFAFkFgQB3BLoApwTCAIwGwgBPBLEAfgSSAEcEiQBcBJwAlQTIAF8FmwAeAfsAnAR0AJsETwAjAioAIwWLAKIEiQCSB6EAaQdEAGEB/AChBYcAXgK6/+MFfwBmBJMAXAWQAIwE8wCJAgT/tAQ4AGMDxACqA44AjgOrAI8DawCCAfIAjgKuAHkCKwAyA8YAewL8AF8CWgB/AAD8pwAA/W4AAPyKAAD9XQAA/CcAAP04Ag4AuAQMAHICFwCUBHMAsgWkACAFcgBnBT8AMgSSAHgFtQCyBJIARgW7AE4FiQBaBVIAcgSGAGQEvQChBAMALwSJAGEEUQBkBCUAbQSJAJIEjwB7ApgAwwRvACYD7ABmBMUAKQSJAJIETgBlBIgAYQQsAFEEXgCQBaMAWAWaAGAGlwB6BKIAegRD/9oGSABLBgAAKwVlAHsIkgAyCKUAsgaDAD4FtACwBQsAowYEADMHQwAbBMAAUAW1ALIFqgAwBQgATQYtAFQF2gCvBXoAlweHALAHwACwBhIAEQbrALIFBQCjBWUAlAcnALcFGABaBG0AYgSTAJ4DXACbBNQALgYhABYEEABYBJ4AnQRTAJ0EoAAsBe8AngSdAJ0EngCdA9kAKAXOAGQEvgCdBFoAaAZ5AJ0GnwCSBPcAHgY2AJ4EWACeBE4AZAaIAJ4EZAAvBGj/5wROAGcGyQAnBuQAnQSJ//0EngCdBwkAnAYsAIEEV//bBywAuAX5AJoE0wAoBEcADwcMAMoGDAC9BtIAkwXiAJcJBQC3B9EAnAQkAFAD2wBMBXIAZwSMAFwFCwAWBAQALwVyAGcEiQBcBwEAnAYkAH4HCQCcBiwAgQUyAHYESABkBP4AdAAA/GYAAPxwAAD9ZQAA/aQAAPoaAAD6KwYJALIE7QCdBFf/2wUbAKkEigCMBGQAogORAJIE2wCyBAYAkgeiABsGYQAWBZoAsgS4AJ0FCgCkBH4AmwaMAEUFhAA/Bf8AqQTZAJ0HzwCpBbQAkggxALAG9ACSBe8AcQTUAG4FGAA6BCoAKgctADQFXQAfBbwAlwSWAGgFcACXBGsAhAVwAIkGMAA/BL7/3QUKAKQEWgCbBf4AMATvACwFswCyBIkAkgYSAKkE7ACdB08AqQY+AJ4FhwBeBKgAaASoAGoEuAA5A6sAOgUuADoEQAAqBPcAVwaVAFoG5QBkBlcANgUsADEESgBTBAgAeQfCAEUGdgA/B/sAqgaiAJAE9wB2BB4AZgWuACQFIQBGBWUAlwYCADAE8wAsAyEAcAQUAAAIKQAABBQAAAgpAAACuQAAAgoAAAFcAAAEfwAAAjAAAAGiAAABAAAAANEAAAAAAAACNAAmAjQAJgVAAKIGPwCQA6YADQGaAGEBmgAwAZgAJAGaAE8C1ABpAtwAPALCACQEagBGBJAAVwKzAIsDxACUBVoAlAF/AFIHqgBEAmcAbAJnAFoDowA8Au8AUQLvADYC7wBcAu8AVgLvADsC7wBPAu8ASgNhAHoC7wBRAu8AewLvAEIC7wA/Au8ANgLvAFwC7wBWAu8AOwLvAE8C7wBKBKcAWwZWAB8GkQCnCHYAqQXrAB8GKwCMBH8AXwXaAB8EIwArBHQAIQVIAF0FTwAfBegAewPOAGgIOgCiBQEAaAUYAJgGJgBUBtcAZQbPAGQGagBaBJAAagWPAKkErwBGBJMAqATFAD8IOgBjAg3/rwSCAGUEZACYBBEAPQQvAIQECAAsAkwAtQKQAG8CBABdBPMAPQRvACAEiwA9BtQAPQbUAD0E7gA9BpsAXwAAAAAINABbCDUAXALvAEIC7wB7Au8AUQQQAFYEEABhBBAAQgQPAHIEEACBBBAAMQQQAE8EEABPBBAAmQQQAGMEIwBIBCsADgRUACcGFQAxBGgAFAR9AHUEJwApBCAARARKAIoEvABaBF0AiwS8AGAE4wCLBgIAiwO1AIsEVQCLA88ALAHpAJgE5ACLBKwAZAPMAIsEIABEBDQAMQOhAA4DrwCLBGgAFAS8AGAEaAAUA4kAPgTPAIsD8ABABWcAYQUXAGEE8wB2BXMAJwR8AGEHQgAoB1AAiwV0ACkEzgCLBFoAiwUlAC4GCwAfBEAASATsAIsETgCMBMEAKAQgACMFKQCLBGoAPQZRAIsGrACLBR0ACQXxAIsETwCLBHwASwZ3AIsEhwBQBBIACwZIAB8EeQCMBQoAjAU3ACQFwwBgBF8ADgSoACcGYgAnBGoAPQRqAIsFxAACBMsAXgRAAEgEvABgBDQAMQPkAEMIIgCLBKsAKALvAD8C7wA2Au8AXALvAFYC7wA7Au8ATwLvAEoDlwCPArUAnwPmAIsEOgAfBMQAZAVMALIFJACyBBQAkwU9ALIEDwCTBIAAiwR8AGEEUQCLBIYAFAH+AJ8DpQCCAAD8owPwAG8D9P9dBA8AaQP1AGkDrwCLA6AAggOfAIIC7wBRAu8ANgLvAFwC7wBWAu8AOwLvAE8C7wBKBYIAfgWvAH4FkwCyBeAAfgXjAH4D1QCgBIIAgwRYAA8EzwA+BGsAZQQuAEoDpQCEAZIAaAakAGAEugCCAfz/tgR/ADsEfwBzBH8AIgR/AHYEfwB2BH8ANgR/AH4EfwBeBH8AcQR/APQCBv+0AgT/tAH7AJwB+//5AfsAnARRAIsFAAB4BCEAOwR+AIwEMwBdBJMAWwSMAFsEnwBaBI4AjAScAFsEPgBdBH4AYQRwAFoDeQBXBNYAaAO1AAEGOgAJA/kAiwS8AGAE4wAwBOMAiwH8AAACNgAmBV4AJQVeACUEhgABBMYAMgKe//QFOAAdBTgAHQU4AB0FOAAdBTgAHQU4AB0FOAAdBTUAeASMAKkEjACpBIwAqQSMAKkCLf/fAi0AsQIt/+oCLf/VBbUAqQWBAHcFgQB3BYEAdwWBAHcFgQB3BTAAjAUwAIwFMACMBTAAjATOAA8EWgBtBFoAbQRaAG0EWgBtBFoAbQRaAG0EWgBtBDAAXQQ+AF0EPgBdBD4AXQQ+AF0B+//EAfsAlgH7/88B+/+6BGsAjQSQAFwEkABcBJAAXASQAFwEkABcBGkAiQRpAIkEaQCJBGkAiQPJABYDyQAWBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBTUAeAQwAF0FNQB4BDAAXQU1AHgEMABdBTUAeAQwAF0FQACpBRkAXwSMAKkEPgBdBIwAqQQ+AF0EjACpBD4AXQSMAKkEPgBdBIwAqQQ+AF0FcwB6BH4AYQVzAHoEfgBhBXMAegR+AGEFcwB6BH4AYQW1AKkEaACNAi3/tgH7/5sCLf/NAfv/sgIt/+wB+//RAi0AFwHy//oCLQCqBpcAtwPcAI4EagA1AgT/tAUFAKkEDgCNBE8AogHyAJMETwCpAfIAVgRPAKkCiACcBE8AqQLOAJwFtQCpBGsAjQW1AKkEawCNBbUAqQRrAI0Ea/+7BYEAdwSQAFwFgQB3BJAAXAWBAHcEkABcBO4AqQK2AI0E7gCpArYAUwTuAKkCtgBkBMAAUQQhAF8EwABRBCEAXwTAAFEEIQBfBMAAUQQhAF8EwABRBCEAXwTGADICngAJBMYAMgKeAAkExgAyAsYACQUwAIwEaQCJBTAAjARpAIkFMACMBGkAiQUwAIwEaQCJBTAAjARpAIkFMACMBGkAiQcZAD0GAwArBM4ADwPJABYEzgAPBMsAVwP4AFkEywBXA/gAWQTLAFcD+ABZB3r/8QbCAE8FgQB3BIkAXASA/70EgP+9BCcAKQSGABQEhgAUBIYAFASGABQEhgAUBIYAFASGABQEfABhA+YAiwPmAIsD5gCLA+YAiwHp/7wB6QCOAen/xwHp/7IE4wCLBLwAYAS8AGAEvABgBLwAYAS8AGAEfQB1BH0AdQR9AHUEfQB1BCsADgSGABQEhgAUBIYAFAR8AGEEfABhBHwAYQR8AGEEgACLA+YAiwPmAIsD5gCLA+YAiwPmAIsErABkBKwAZASsAGQErABkBOQAiwHp/5MB6f+qAen/yQHpAAUB6QCHA88ALARVAIsDtQCDA7UAiwO1AIsDtQCLBOMAiwTjAIsE4wCLBLwAYAS8AGAEvABgBEoAigRKAIoESgCKBCAARAQgAEQEIABEBCAARAQnACkEJwApBCcAKQR9AHUEfQB1BH0AdQR9AHUEfQB1BH0AdQYVADEEKwAOBCsADgQjAEgEIwBIBCMASAU4AB0E8P+MBhn/mgKR/6AFlf/6BTL/dgVm//wCmP+bBTgAHQT8AKkEjACpBMsAVwW1AKkCLQC3BQUAqQb8AKkFtQCpBYEAdwUMAKkExgAyBM4ADwUEADoCLf/VBM4ADwSGAGQEUQBkBIkAkgKYAMMEXgCQBHQAmwSQAFwEiQCbA+AAIQRwAFoCmP/kBF4AkASQAFwEXgCQBpcAegSMAKkEcwCyBMAAUQItALcCLf/VBGoANQUkALIFBQCpBQgATQU4AB0E/ACpBHMAsgSMAKkFtQCyBvwAqQW1AKkFgQB3BbUAsgUMAKkFNQB4BMYAMgUEADoEWgBtBD4AXQSeAJ0EkABcBH4AjAQwAF0DyQAWA/gAKgQ+AF0DXACbBCEAXwHyAI4B+/+6Aer/vgRTAJ0DyQAWBxkAPQYDACsHGQA9BgMAKwcZAD0GAwArBM4ADwPJABYBZgBoApAAiQQgAKECBP+0AZoAMAb8AKkHBACLBTgAHQRaAG0EjACpBbUAsgQ+AF0EngCdBYkAWgWaAGAFCwAWBAT/+whZAFwJSgB3BMAAUAQQAFgFNQB4BDAAXQTOAA8EAwAvAi0AtwdDABsGIQAWAi0AtwU4AB0EWgBtBTgAHQRaAG0Hev/xBsIATwSMAKkEPgBdBYcAXgQ4AGMEOABjB0MAGwYhABYEwABQBBAAWAW1ALIEngCdBbUAsgSeAJ0FgQB3BJAAXAVyAGcEjABcBXIAZwSMAFwFZQCUBE4AZAUIAE0DyQAWBQgATQPJABYFCABNA8kAFgV6AJcEWgBoBusAsgY2AJ4EgwBfBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBTgAHQRa/8kFOAAdBFoAbQU4AB0EWgBtBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBIwAqQQ+AF0EjACpBD4AXQSMAKkEPgBdBIwAqQQ+AF0EjP/uBD7/uASMAKkEPgBdBIwAqQQ+AF0EjACpBD4AXQItALcB+wCcAi0ApAHyAIYFgQB3BJAAXAWBAHcEkABcBYEAdwSQAFwFgQBGBJD/wgWBAHcEkABcBYEAdwSQAFwFgQB3BJAAXAV/AGYEkwBcBX8AZgSTAFwFfwBmBJMAXAV/AGYEkwBcBX8AZgSTAFwFMACMBGkAiQUwAIwEaQCJBZAAjATzAIkFkACMBPMAiQWQAIwE8wCJBZAAjATzAIkFkACMBPMAiQTOAA8DyQAWBM4ADwPJABYEzgAPA8kAFgShAF8ExgAyA9kAKAV6AJcEWgBoBHMAsgNcAJsGMAA/BL7/3QRoAI0FBf/UBQX/1ARzAAMDXP/9BTgACwQo/9MEzgAPBAMALwUEADoD+AAqBFEAZARsABIGPwCQBH8AXgR/AF8EfwA1BH8AmgSTAJkEpwCFBJMAZASnAIcFcwB6BH4AYQW1AKkEawCNBTgAHQRaADoEjABfBD4AKQIt/wsB+/7wBYEAdwSQADME7gBWArb/jAUwAIwEaQArBKf/OAT8AKkEfgCMBUAAqQSDAF8FQACpBIMAXwW1AKkEaACNBQUAqQQOAI0FBQCpBA4AjQRPAKkB8gCGBvwAqQcEAIsFtQCp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GRwfkhGaEcIWzBiqEdgUuhJ4EiIRNimwEVQmjhFUEVQTBBIiEXoYRBI8Ee4RChI8FQASIhJaGZIezBcmEloXJiWQJ5Ai1h1kEOwSPBEiPkQRVDe+JJ4okhIIEPIQ+EEuEP4UQhPWGhQ5sC1yNA4sJBKaMLY74hbMISoSmhKaFUYSmhKaEpoyYBqeEpoTfh4GHEAX4iO4HNIRQCIAEQoTVDXkRCwSIhR8KuYbKBLeEiIbshMqFnYUDBLeFyYTBBGaEjwTVBIiHswRQBbMEQoVkBWQFZASmhbMEQoSmhKaEloRQBbMEQoRBC8UEQQRBBEEERwV2hYoERYRLBEQERYREBFeERARiBJaEloSWhJaH5IXJhcmFyYXJhcmFyYXJhGIEWwRbBFsEWwSmhKaEpoSmhKaEloSWhJaEloSWhiqEngSeBJ4EngSeBJ4EngRNhE2ETYRNhFUEwQTBBMEEwQTBBI8EjwXJhJ4FyYSeBcmEngRiBGIEYgRiBJaEWwRNhFsETYRbBE2EWwRNhFsETYSmhFUEpoSmhKaEpoSmhWQEawRrBGsEawSmhFUEpoRVBKaEVQRVBJaEwQSWhMEEloTBBF6EXoReh+SH5IfkhHCGKoSPBiqEdgR2BHYERYRFhEcERAREBEQERAREBEQERARFhEWERYRFhEWERAREBEQERYRLBEsESwRLBEWERYRFhEcFyYRbBKaEpoSWhiqFyYRShFsEdgSmhKaFZASmhKaEloSvB+SGKoWzBKaGKoRVBMEEjwTBBFsHswSmhKaFZAVkBVGFyYRSh7MEWwSmhKaEloSvBGIH5IWzBJ4ETYTBBIiEjwRChE2EUASPBHCEcIRwhiqEjwRBBEEEQQSmhFUFyYSeBFsETYRmhI8EYgYqhI8EpoWzBEKEpoXJhJ4FyYSeBFsETYRNhE2FswRChJaEwQTBBIiFUYSPBVGEjwVRhI8FyYSeBcmEngXJhJ4FyYSeBcmEngXJhJ4FyYSeBcmEngXJhJ4FyYSeBcmEngXJhJ4EWwRNhFsETYRbBE2EWwRNhFsETYRbBE2EWwRNhFsETYSmhKaEloTBBJaEwQSWhMEEloTBBJaEwQSWhMEEloTBBMEGKoSPBiqEjwYqhI8H5IezBFAEVQTfh7MFZAYqhKaEVQXJhJ4EWwSmhJaEwQRehFKEiISWhJaEpoRVBWQFZARrBKa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/+wCtP/sArX/7AK2/+wCzv/sAtD/7ALS/+wC1P/sAtb/7ALY/+wC2v/sAtz/7ALe/+wC4P/sAuL/7ALk/+wC5v/sAuj/7AOv/+wD1f/sA9n/7APc/+wD9//sA/3/7AQC/+wEEP/sBBL/7AQT/+wEH//sBC7/7ARI/+wESv/sBEz/7ARO/+wEUP/sBFL/7ARU/+wEVv/sBGr/7ARs/+wEbv/sBHL/7ASt/+wEuv/sBLz/7ABAACf/5gAr/+YAM//mADX/5gCD/+YAk//mAJj/5gCz/+YAuP/CAMQAEADT/+YBCP/mARf/5gEb/+YBHf/mAR//5gEh/+YBQf/mAWr/5gJV/+YCVv/mAlj/5gJZ/+YCl//mAqH/5gKi/+YCo//mAqT/5gKl/+YCzf/mAs//5gLR/+YC0//mAuH/5gLj/+YC5f/mAuf/5gMJ/+YDC//mAw3/5gM+/+YDm//mA6j/5gPO/+YD0f/mA/7/5gQB/+YEHP/mBB7/5gQg/+YEW//mBF3/5gRf/+YEYf/mBGP/5gRl/+YEZ//mBGn/5gRr/+YEbf/mBG//5gRx/+YEsP/mBMn/5gBHABAAAAASAAAAR//nAEj/5wBJ/+cAS//nAFX/5wCU/+cAmf/nALv/5wDEAA8AyP/nAMn/5wD3/+cBA//nAR7/5wEi/+cBQv/nAWD/5wFh/+cBa//nAYYAAAGKAAABjgAAAY8AAAKy/+cCs//nArT/5wK1/+cCtv/nAs7/5wLQ/+cC0v/nAtT/5wLW/+cC2P/nAtr/5wLc/+cC3v/nAuD/5wLi/+cC5P/nAub/5wLo/+cDr//nA9X/5wPZ/+cD3P/nA/f/5wP9/+cEAv/nBBD/5wQS/+cEE//nBB//5wQu/+cESP/nBEr/5wRM/+cETv/nBFD/5wRS/+cEVP/nBFb/5wRq/+cEbP/nBG7/5wRy/+cErf/nBLr/5wS8/+cATQAGABAACwAQAA0AFABBABIAR//oAEj/6ABJ/+gAS//oAFX/6ABhABMAlP/oAJn/6AC7/+gAyP/oAMn/6AD3/+gBA//oAR7/6AEi/+gBQv/oAWD/6AFh/+gBa//oAYQAEAGFABABhwAQAYgAEAGJABACsv/oArP/6AK0/+gCtf/oArb/6ALO/+gC0P/oAtL/6ALU/+gC1v/oAtj/6ALa/+gC3P/oAt7/6ALg/+gC4v/o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A9z/sAPjAAsD6wALA+wADQPtAA0D8AANA/T/8AP3/7AD/AALA/3/sAQC/7AEBAALBAr/8AQM//AEEP+wBBL/sAQT/7AEHf/WBB//sAQh/9YEJQALBCcACwQpAAsELv+wBDD/8AQy//AENP/wBDb/8AQ4//AEOv/wBDz/8AQ+//AEQP/wBEL/8ARE//AERv/wBEj/sARK/7AETP+wBE7/sARQ/7AEUv+wBFT/sARW/7AEXP/WBF7/1gRg/9YEYv/WBGT/1gRm/9YEaP/WBGr/sARs/7AEbv+wBHD/1gRy/7AEggALBIQACwSGAAsEq//wBK3/sASx/9YEuv+wBLz/sATUAAsE1gALBNz/vwTg/+0E4QANBOP/vwTvAA0E8gANBPv/vwUC/+0FBf/tBQYADgUK/+0FCwANAOcAEP8WABL/FgAl/1YALv74ADgAFABF/94AR//rAEj/6wBJ/+sAS//rAFP/6wBV/+sAVv/mAFn/6gBa/+gAXf/oAJT/6wCZ/+sAm//qALL/VgC0/1YAu//rAL3/6ADI/+sAyf/rAMv/6gDSABQA1gAUAPf/6wED/+sBDf9WARj/6wEa/+gBHv/rASL/6wE5ABQBQv/rAUUAFAFg/+sBYf/rAWv/6wGG/xYBiv8WAY7/FgGP/xYB+//AAf3/wAJD/8ACkP9WApH/VgKS/1YCk/9WApT/VgKV/1YClv9WAqv/3gKs/94Crf/eAq7/3gKv/94CsP/eArH/3gKy/+sCs//rArT/6wK1/+sCtv/rArz/6wK9/+sCvv/rAr//6wLA/+sCwf/qAsL/6gLD/+oCxP/qAsX/6ALG/+gCx/9WAsj/3gLJ/1YCyv/eAsv/VgLM/94Czv/rAtD/6wLS/+sC1P/rAtb/6wLY/+sC2v/rAtz/6wLe/+sC4P/rAuL/6wLk/+sC5v/rAuj/6wL2/vgDCv/rAwz/6wMO/+sDHwAUAyEAFAMjABQDJv/qAyj/6gMq/+oDLP/qAy7/6gMw/+oDNP/oA0P/wANE/8ADRf/AA0b/wANH/8ADSP/AA0n/wANe/8ADX//AA2D/wAOX/1YDn/9WA6//6wOz/+oDtf/rA7f/6AO6/+oDu//rA7z/6gPD/vgDx/9WA9IAFAPU/94D1f/rA9f/6wPZ/+sD2v/oA9z/6wPj/+gD6//oA/P/VgP0/94D9//rA/z/6AP9/+sEAv/rBAT/6AQJ/1YECv/eBAv/VgQM/94EEP/rBBL/6wQT/+sEHf/rBB//6wQh/+sEJf/oBCf/6AQp/+gELv/rBC//VgQw/94EMf9WBDL/3gQz/1YENP/eBDX/VgQ2/94EN/9WBDj/3gQ5/1YEOv/eBDv/VgQ8/94EPf9WBD7/3gQ//1YEQP/eBEH/VgRC/94EQ/9WBET/3gRF/1YERv/eBEj/6wRK/+sETP/rBE7/6wRQ/+sEUv/rBFT/6wRW/+sEXP/rBF7/6wRg/+sEYv/rBGT/6wRm/+sEaP/rBGr/6wRs/+sEbv/rBHD/6wRy/+sEdP/qBHb/6gR4/+oEev/qBHz/6gR+/+oEgP/qBIL/6ASE/+gEhv/oBIgAFASq/1YEq//eBK3/6wSx/+sEtf/qBLr/6wS8/+sE0AAUBNT/6ATW/+gE3P/ABOP/wAT7/8AAAgCgAAQABAAAAAYABgABAAsADAACABMAEwAEACUAKgAFACwALQALAC8ANgANADgAOAAVADoAPwAWAEUARgAcAEkASgAeAEwATAAgAE8ATwAhAFEAVAAiAFYAVgAmAFgAWAAnAFoAXQAoAF8AXwAsAIoAigAtAJYAlgAuAJ0AnQAvALEAtQAwALcAuQA1ALsAuwA4AL0AvgA5AMAAwQA7AMMAxQA9AMcAzgBAANIA0gBIANQA3gBJAOAA7wBUAPEA8QBkAPYA+ABlAPsA/ABoAP4BAABqAQMBBQBtAQoBCgBwAQ0BDQBxARgBGgByASIBIgB1AS4BMAB2ATMBNQB5ATcBNwB8ATkBOQB9ATsBOwB+AUMBRAB/AVQBVACBAVYBVgCCAVgBWACDAVwBXgCEAYQBhQCHAYcBiQCJAegB6ACMAeoB6wCNAe0B7QCPAfAB8ACQAfsB/QCRAkACQACUAkMCQwCVAlUCVQCWAlcCWACXAosCjACZAo4CjgCbApACpQCcAqoCsQCyArMCtgC6ArsCwAC+AsUCzQDEAs8CzwDNAtEC0QDOAtMC0wDPAtUC1QDQAtcC4ADRAukC6wDbAu0C7QDeAu8C7wDfAvEC8QDgAvMC8wDhAvgC+ADiAvoC+gDjAvwC/ADkAv4C/gDlAwADAADmAwIDDgDnAxADEAD0AxIDEgD1AxQDFAD2Ax8DHwD3AyEDIQD4AyMDIwD5AzEDMQD6AzMDNgD7AzgDOAD/AzoDOgEAA0ADSQEBA1QDWAELA14DYAEQA2UDZQETA3cDegEUA34DgAEYA4kDiQEbA5cDnAEcA58DrgEiA7EDsQEyA7UDtQEzA7cDtwE0A7sDuwE1A74DvwE2A8EDwgE4A8QDygE6A8wDzgFBA9AD1QFEA9cD2AFKA9oD3QFMA+MD5AFQA+YD5gFSA+gD6AFTA+oD7QFUA/AD9QFYA/cD9wFeA/sD/AFfBAEEAQFhBAMEDAFiBA8EEAFsBBIEFQFuBBwEHQFyBCEEIQF0BCMEKQF1BC8EVwF8BFkEWQGlBFsEaAGmBHAEcAG0BIEEhgG1BIgEiAG7BIwEjQG8BJAEkAG+BJIEkwG/BJUElQHBBJcElwHCBKgErAHDBK4ErgHIBLAEsQHJBLMEswHLBLcEuQHMBLsEuwHPBL0EvwHQBMEEwQHTBMMEwwHUBMUEywHVBM0EzQHcBNAE0AHdBNME1wHeBNkE2QHjBNsE3AHkBOAE4AHmBOME4wHnBO4E7gHoBPsE+wHpBQIFAgHqBQYFBgHrAAIAmgAGAAYAAAALAAsAAQAQABAAAgASABIAAwAlACkABAAsADQACQA4AD4AEgBFAEcAGQBJAEkAHABMAEwAHQBRAFQAHgBWAFYAIgBaAFoAIwBcAF4AJACKAIoAJwCWAJYAKACxALQAKQC9AL0ALQDBAMEALgDHAMcALwDUANUAMADXANcAMgDaANoAMwDcAN4ANADgAOYANwDsAOwAPgDuAO4APwD3APcAQAD8APwAQQD+AP8AQgEEAQUARAEKAQoARgENAQ0ARwEYARoASAEuATAASwEzATUATgE3ATcAUQE5ATkAUgE7ATsAUwFDAUQAVAFUAVQAVgFWAVYAVwFYAVgAWAFcAV4AWQGEAYoAXAGOAY8AYwHoAegAZQHtAe0AZgHwAfEAZwH7Af0AaQIPAg8AbAIeAiAAbQJAAkAAcAJDAkMAcQJVAlUAcgJXAlgAcwKLAowAdQKOAo4AdwKQArYAeAK7AsAAnwLFAtUApQLXAuAAtgLpAusAwALtAu0AwwLvAu8AxALxAvEAxQLzAvMAxgL2AvYAxwL4AvgAyAL6AvoAyQL8AvwAygL+Av4AywMAAwAAzAMCAw4AzQMQAxAA2gMSAxIA2wMUAxQA3AMfAx8A3QMhAyEA3gMjAyMA3wMlAyUA4AMnAycA4QMp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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAgAAAAAAAAACAAAAAAAjAAAAAAAAAAAAAgAAAAIAAAAUAA0ACwAaABYAEAAMABcAAAAAAAAAAAAAAAAABgAAAAEAAQABAAAAAQAAAAAAAAAAAAAAAwADAAcAAwABAAAAEQAAAAgACQAAABMACQAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgABAAAAAAAAAAIAAQAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAIABAAAAAAAAAAAAAAAAAABAAAACQAAAAAAAAADAAAAAAAAAAAAAAAAAAEAAQAAAAgAAAAAAAAAAAAAAAAADQACAB4AAAANAAAAAAAAABAAAAAAAB4AHwAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAATAAAAAwADACEAAwADAAMAAAABAAMAIgADAAMAAAAAAAMAAAADAAAAAAABACEAAwAAAAAAAgAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAgAHABoACQACAAAAAgABAAIAAAACAAEAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAQABMAAAADAAAAAAANAAAAAAADAAAAAwAAAAAAAgABABAAEwANAAAAIAAiAAAAAAAAAAAAAAAAAAAAHgAhAAAAAwAAAAMAAAADAAAAAAAAAAAAAwAQABMAAAABAAEAAAAAAAAAAAAeAAAAAAAAAAIAAQAAAAAAAAAeACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbABsAAAAPAA8AGAAPAA8ADwAYAAAAAAAAABgAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAZACQAAAAOABUAHAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAACgAFAAoAAAAAAAAAAAAAAAAAFQAFAAAAAAAVAAAAAAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAVAAUAEgAZABUAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAAAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAgAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAgACAAIACwALAAsACwAMAAYABgAGAAYABgAGAAYAAQABAAEAAQABAAAAAAAAAAAAAwAHAAcABwAHAAcACAAIAAgACAAJAAkABAAGAAQABgAEAAYAAgABAAIAAQACAAEAAgABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAIAAQACAAEAAgABAAIAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAMAAgAHAAIABwACAAcAAAAAAAAAAAAAAAAAFAARABQAEQAUABEAFAARABQAEQANAAAADQAAAA0AAAALAAgACwAIAAsACAALAAgACwAIAAsACAAWAAAADAAJAAwAFwAdABcAHQAXAB0AAAAAAAIAAAAAAAAAAAAKAAoACgAKAAoACgAKAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAA4ADgAOAA4AEgAKAAoACgAFAAUABQAFAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAHAAcABwAHAAAABUAAAAOAA4ADgAOAA4ADgAkABIAEgAAAAAAAAAE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\"\n};"
  },
  {
    "path": "public/assets/apexcharts/apexcharts.amd.js",
    "content": "/*! For license information please see apexcharts.amd.js.LICENSE.txt */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.ApexCharts=e():t.ApexCharts=e()}(self,(()=>(()=>{var t={922:t=>{\"use strict\";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var i=function(t,e){var i,a,r,s=t[1]||\"\",n=t[3];if(!n)return s;if(e&&\"function\"==typeof btoa){var o=(i=n,a=btoa(unescape(encodeURIComponent(JSON.stringify(i)))),r=\"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(a),\"/*# \".concat(r,\" */\")),l=n.sources.map((function(t){return\"/*# sourceURL=\".concat(n.sourceRoot||\"\").concat(t,\" */\")}));return[s].concat(l).concat([o]).join(\"\\n\")}return[s].join(\"\\n\")}(e,t);return e[2]?\"@media \".concat(e[2],\" {\").concat(i,\"}\"):i})).join(\"\")},e.i=function(t,i){\"string\"==typeof t&&(t=[[null,t,\"\"]]);for(var a=0;a<t.length;a++){var r=[].concat(t[a]);i&&(r[2]?r[2]=\"\".concat(i,\" and \").concat(r[2]):r[2]=i),e.push(r)}},e}},372:function(){function t(e){return t=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},t(e)}(function(){function e(t){t.remember(\"_draggable\",this),this.el=t}e.prototype.init=function(t,e){var i=this;this.constraint=t,this.value=e,this.el.on(\"mousedown.drag\",(function(t){i.start(t)})),this.el.on(\"touchstart.drag\",(function(t){i.start(t)}))},e.prototype.transformPoint=function(t,e){var i=(t=t||window.event).changedTouches&&t.changedTouches[0]||t;return this.p.x=i.clientX-(e||0),this.p.y=i.clientY,this.p.matrixTransform(this.m)},e.prototype.getBBox=function(){var t=this.el.bbox();return this.el instanceof SVG.Nested&&(t=this.el.rbox()),(this.el instanceof SVG.G||this.el instanceof SVG.Use||this.el instanceof SVG.Nested)&&(t.x=this.el.x(),t.y=this.el.y()),t},e.prototype.start=function(t){if(\"click\"!=t.type&&\"mousedown\"!=t.type&&\"mousemove\"!=t.type||1==(t.which||t.buttons)){var e=this;if(this.el.fire(\"beforedrag\",{event:t,handler:this}),!this.el.event().defaultPrevented){t.preventDefault(),t.stopPropagation(),this.parent=this.parent||this.el.parent(SVG.Nested)||this.el.parent(SVG.Doc),this.p=this.parent.node.createSVGPoint(),this.m=this.el.node.getScreenCTM().inverse();var i,a=this.getBBox();if(this.el instanceof SVG.Text)switch(i=this.el.node.getComputedTextLength(),this.el.attr(\"text-anchor\")){case\"middle\":i/=2;break;case\"start\":i=0}this.startPoints={point:this.transformPoint(t,i),box:a,transform:this.el.transform()},SVG.on(window,\"mousemove.drag\",(function(t){e.drag(t)})),SVG.on(window,\"touchmove.drag\",(function(t){e.drag(t)})),SVG.on(window,\"mouseup.drag\",(function(t){e.end(t)})),SVG.on(window,\"touchend.drag\",(function(t){e.end(t)})),this.el.fire(\"dragstart\",{event:t,p:this.startPoints.point,m:this.m,handler:this})}}},e.prototype.drag=function(e){var i=this.getBBox(),a=this.transformPoint(e),r=this.startPoints.box.x+a.x-this.startPoints.point.x,s=this.startPoints.box.y+a.y-this.startPoints.point.y,n=this.constraint,o=a.x-this.startPoints.point.x,l=a.y-this.startPoints.point.y;if(this.el.fire(\"dragmove\",{event:e,p:a,m:this.m,handler:this}),this.el.event().defaultPrevented)return a;if(\"function\"==typeof n){var c=n.call(this.el,r,s,this.m);\"boolean\"==typeof c&&(c={x:c,y:c}),!0===c.x?this.el.x(r):!1!==c.x&&this.el.x(c.x),!0===c.y?this.el.y(s):!1!==c.y&&this.el.y(c.y)}else\"object\"==t(n)&&(null!=n.minX&&r<n.minX?o=(r=n.minX)-this.startPoints.box.x:null!=n.maxX&&r>n.maxX-i.width&&(o=(r=n.maxX-i.width)-this.startPoints.box.x),null!=n.minY&&s<n.minY?l=(s=n.minY)-this.startPoints.box.y:null!=n.maxY&&s>n.maxY-i.height&&(l=(s=n.maxY-i.height)-this.startPoints.box.y),null!=n.snapToGrid&&(r-=r%n.snapToGrid,s-=s%n.snapToGrid,o-=o%n.snapToGrid,l-=l%n.snapToGrid),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:o,y:l},!0):this.el.move(r,s));return a},e.prototype.end=function(t){var e=this.drag(t);this.el.fire(\"dragend\",{event:t,p:e,m:this.m,handler:this}),SVG.off(window,\"mousemove.drag\"),SVG.off(window,\"touchmove.drag\"),SVG.off(window,\"mouseup.drag\"),SVG.off(window,\"touchend.drag\")},SVG.extend(SVG.Element,{draggable:function(i,a){\"function\"!=typeof i&&\"object\"!=t(i)||(a=i,i=!0);var r=this.remember(\"_draggable\")||new e(this);return(i=void 0===i||i)?r.init(a||{},i):(this.off(\"mousedown.drag\"),this.off(\"touchstart.drag\")),this}})}).call(this)},872:function(){(function(){SVG.Filter=SVG.invent({create:\"filter\",inherit:SVG.Parent,extend:{source:\"SourceGraphic\",sourceAlpha:\"SourceAlpha\",background:\"BackgroundImage\",backgroundAlpha:\"BackgroundAlpha\",fill:\"FillPaint\",stroke:\"StrokePaint\",autoSetIn:!0,put:function(t,e){return this.add(t,e),!t.attr(\"in\")&&this.autoSetIn&&t.attr(\"in\",this.source),t.attr(\"result\")||t.attr(\"result\",t),t},blend:function(t,e,i){return this.put(new SVG.BlendEffect(t,e,i))},colorMatrix:function(t,e){return this.put(new SVG.ColorMatrixEffect(t,e))},convolveMatrix:function(t){return this.put(new SVG.ConvolveMatrixEffect(t))},componentTransfer:function(t){return this.put(new SVG.ComponentTransferEffect(t))},composite:function(t,e,i){return this.put(new SVG.CompositeEffect(t,e,i))},flood:function(t,e){return this.put(new SVG.FloodEffect(t,e))},offset:function(t,e){return this.put(new SVG.OffsetEffect(t,e))},image:function(t){return this.put(new SVG.ImageEffect(t))},merge:function(){var t=[void 0];for(var e in arguments)t.push(arguments[e]);return this.put(new(SVG.MergeEffect.bind.apply(SVG.MergeEffect,t)))},gaussianBlur:function(t,e){return this.put(new SVG.GaussianBlurEffect(t,e))},morphology:function(t,e){return this.put(new SVG.MorphologyEffect(t,e))},diffuseLighting:function(t,e,i){return this.put(new SVG.DiffuseLightingEffect(t,e,i))},displacementMap:function(t,e,i,a,r){return this.put(new SVG.DisplacementMapEffect(t,e,i,a,r))},specularLighting:function(t,e,i,a){return this.put(new SVG.SpecularLightingEffect(t,e,i,a))},tile:function(){return this.put(new SVG.TileEffect)},turbulence:function(t,e,i,a,r){return this.put(new SVG.TurbulenceEffect(t,e,i,a,r))},toString:function(){return\"url(#\"+this.attr(\"id\")+\")\"}}}),SVG.extend(SVG.Defs,{filter:function(t){var e=this.put(new SVG.Filter);return\"function\"==typeof t&&t.call(e,e),e}}),SVG.extend(SVG.Container,{filter:function(t){return this.defs().filter(t)}}),SVG.extend(SVG.Element,SVG.G,SVG.Nested,{filter:function(t){return this.filterer=t instanceof SVG.Element?t:this.doc().filter(t),this.doc()&&this.filterer.doc()!==this.doc()&&this.doc().defs().add(this.filterer),this.attr(\"filter\",this.filterer),this.filterer},unfilter:function(t){return this.filterer&&!0===t&&this.filterer.remove(),delete this.filterer,this.attr(\"filter\",null)}}),SVG.Effect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result=\"'+this.attr(\"in\")+'\"]').get(0)||this.attr(\"in\"):this.attr(\"in\",t)},result:function(t){return null==t?this.attr(\"result\"):this.attr(\"result\",t)},toString:function(){return this.result()}}}),SVG.ParentEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Parent,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result=\"'+this.attr(\"in\")+'\"]').get(0)||this.attr(\"in\"):this.attr(\"in\",t)},result:function(t){return null==t?this.attr(\"result\"):this.attr(\"result\",t)},toString:function(){return this.result()}}});var t={blend:function(t,e){return this.parent()&&this.parent().blend(this,t,e)},colorMatrix:function(t,e){return this.parent()&&this.parent().colorMatrix(t,e).in(this)},convolveMatrix:function(t){return this.parent()&&this.parent().convolveMatrix(t).in(this)},componentTransfer:function(t){return this.parent()&&this.parent().componentTransfer(t).in(this)},composite:function(t,e){return this.parent()&&this.parent().composite(this,t,e)},flood:function(t,e){return this.parent()&&this.parent().flood(t,e)},offset:function(t,e){return this.parent()&&this.parent().offset(t,e).in(this)},image:function(t){return this.parent()&&this.parent().image(t)},merge:function(){return this.parent()&&this.parent().merge.apply(this.parent(),[this].concat(arguments))},gaussianBlur:function(t,e){return this.parent()&&this.parent().gaussianBlur(t,e).in(this)},morphology:function(t,e){return this.parent()&&this.parent().morphology(t,e).in(this)},diffuseLighting:function(t,e,i){return this.parent()&&this.parent().diffuseLighting(t,e,i).in(this)},displacementMap:function(t,e,i,a){return this.parent()&&this.parent().displacementMap(this,t,e,i,a)},specularLighting:function(t,e,i,a){return this.parent()&&this.parent().specularLighting(t,e,i,a).in(this)},tile:function(){return this.parent()&&this.parent().tile().in(this)},turbulence:function(t,e,i,a,r){return this.parent()&&this.parent().turbulence(t,e,i,a,r).in(this)}};SVG.extend(SVG.Effect,t),SVG.extend(SVG.ParentEffect,t),SVG.ChildEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){this.attr(\"in\",t)}}});var e={blend:function(t,e,i){this.attr({in:t,in2:e,mode:i||\"normal\"})},colorMatrix:function(t,e){\"matrix\"==t&&(e=r(e)),this.attr({type:t,values:void 0===e?null:e})},convolveMatrix:function(t){t=r(t),this.attr({order:Math.sqrt(t.split(\" \").length),kernelMatrix:t})},composite:function(t,e,i){this.attr({in:t,in2:e,operator:i})},flood:function(t,e){this.attr(\"flood-color\",t),null!=e&&this.attr(\"flood-opacity\",e)},offset:function(t,e){this.attr({dx:t,dy:e})},image:function(t){this.attr(\"href\",t,SVG.xlink)},displacementMap:function(t,e,i,a,r){this.attr({in:t,in2:e,scale:i,xChannelSelector:a,yChannelSelector:r})},gaussianBlur:function(t,e){null!=t||null!=e?this.attr(\"stdDeviation\",function(t){if(!Array.isArray(t))return t;for(var e=0,i=t.length,a=[];e<i;e++)a.push(t[e]);return a.join(\" \")}(Array.prototype.slice.call(arguments))):this.attr(\"stdDeviation\",\"0 0\")},morphology:function(t,e){this.attr({operator:t,radius:e})},tile:function(){},turbulence:function(t,e,i,a,r){this.attr({numOctaves:e,seed:i,stitchTiles:a,baseFrequency:t,type:r})}},i={merge:function(){var t;if(arguments[0]instanceof SVG.Set){var e=this;arguments[0].each((function(t){this instanceof SVG.MergeNode?e.put(this):(this instanceof SVG.Effect||this instanceof SVG.ParentEffect)&&e.put(new SVG.MergeNode(this))}))}else{t=Array.isArray(arguments[0])?arguments[0]:arguments;for(var i=0;i<t.length;i++)t[i]instanceof SVG.MergeNode?this.put(t[i]):this.put(new SVG.MergeNode(t[i]))}},componentTransfer:function(t){if(this.rgb=new SVG.Set,[\"r\",\"g\",\"b\",\"a\"].forEach(function(t){this[t]=new(SVG[\"Func\"+t.toUpperCase()])(\"identity\"),this.rgb.add(this[t]),this.node.appendChild(this[t].node)}.bind(this)),t)for(var e in t.rgb&&([\"r\",\"g\",\"b\"].forEach(function(e){this[e].attr(t.rgb)}.bind(this)),delete t.rgb),t)this[e].attr(t[e])},diffuseLighting:function(t,e,i){this.attr({surfaceScale:t,diffuseConstant:e,kernelUnitLength:i})},specularLighting:function(t,e,i,a){this.attr({surfaceScale:t,diffuseConstant:e,specularExponent:i,kernelUnitLength:a})}},a={distantLight:function(t,e){this.attr({azimuth:t,elevation:e})},pointLight:function(t,e,i){this.attr({x:t,y:e,z:i})},spotLight:function(t,e,i,a,r,s){this.attr({x:t,y:e,z:i,pointsAtX:a,pointsAtY:r,pointsAtZ:s})},mergeNode:function(t){this.attr(\"in\",t)}};function r(t){return Array.isArray(t)&&(t=new SVG.Array(t)),t.toString().replace(/^\\s+/,\"\").replace(/\\s+$/,\"\").replace(/\\s+/g,\" \")}function s(){var t=function(){};for(var e in\"function\"==typeof arguments[arguments.length-1]&&(t=arguments[arguments.length-1],Array.prototype.splice.call(arguments,arguments.length-1,1)),arguments)for(var i in arguments[e])t(arguments[e][i],i,arguments[e])}[\"r\",\"g\",\"b\",\"a\"].forEach((function(t){a[\"Func\"+t.toUpperCase()]=function(t){switch(this.attr(\"type\",t),t){case\"table\":this.attr(\"tableValues\",arguments[1]);break;case\"linear\":this.attr(\"slope\",arguments[1]),this.attr(\"intercept\",arguments[2]);break;case\"gamma\":this.attr(\"amplitude\",arguments[1]),this.attr(\"exponent\",arguments[2]),this.attr(\"offset\",arguments[2])}}})),s(e,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i+\"Effect\"]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\"fe\"+i)),t.apply(this,arguments),this.result(this.attr(\"id\")+\"Out\")},inherit:SVG.Effect,extend:{}})})),s(i,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i+\"Effect\"]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\"fe\"+i)),t.apply(this,arguments),this.result(this.attr(\"id\")+\"Out\")},inherit:SVG.ParentEffect,extend:{}})})),s(a,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\"fe\"+i)),t.apply(this,arguments)},inherit:SVG.ChildEffect,extend:{}})})),SVG.extend(SVG.MergeEffect,{in:function(t){return t instanceof SVG.MergeNode?this.add(t,0):this.add(new SVG.MergeNode(t),0),this}}),SVG.extend(SVG.CompositeEffect,SVG.BlendEffect,SVG.DisplacementMapEffect,{in2:function(t){return null==t?this.parent()&&this.parent().select('[result=\"'+this.attr(\"in2\")+'\"]').get(0)||this.attr(\"in2\"):this.attr(\"in2\",t)}}),SVG.filter={sepiatone:[.343,.669,.119,0,0,.249,.626,.13,0,0,.172,.334,.111,0,0,0,0,0,1,0]}}).call(this)},25:()=>{!function(){\"use strict\";function t(t,r,s,n,o,l,c){for(var h=t.slice(r,s||c),d=n.slice(o,l||c),u=0,g={pos:[0,0],start:[0,0]},f={pos:[0,0],start:[0,0]};h[u]=e.call(g,h[u]),d[u]=e.call(f,d[u]),h[u][0]!=d[u][0]||\"M\"==h[u][0]||\"A\"==h[u][0]&&(h[u][4]!=d[u][4]||h[u][5]!=d[u][5])?(Array.prototype.splice.apply(h,[u,1].concat(a.call(g,h[u]))),Array.prototype.splice.apply(d,[u,1].concat(a.call(f,d[u])))):(h[u]=i.call(g,h[u]),d[u]=i.call(f,d[u])),++u!=h.length||u!=d.length;)u==h.length&&h.push([\"C\",g.pos[0],g.pos[1],g.pos[0],g.pos[1],g.pos[0],g.pos[1]]),u==d.length&&d.push([\"C\",f.pos[0],f.pos[1],f.pos[0],f.pos[1],f.pos[0],f.pos[1]]);return{start:h,dest:d}}function e(t){switch(t[0]){case\"z\":case\"Z\":t[0]=\"L\",t[1]=this.start[0],t[2]=this.start[1];break;case\"H\":t[0]=\"L\",t[2]=this.pos[1];break;case\"V\":t[0]=\"L\",t[2]=t[1],t[1]=this.pos[0];break;case\"T\":t[0]=\"Q\",t[3]=t[1],t[4]=t[2],t[1]=this.reflection[1],t[2]=this.reflection[0];break;case\"S\":t[0]=\"C\",t[6]=t[4],t[5]=t[3],t[4]=t[2],t[3]=t[1],t[2]=this.reflection[1],t[1]=this.reflection[0]}return t}function i(t){var e=t.length;return this.pos=[t[e-2],t[e-1]],-1!=\"SCQT\".indexOf(t[0])&&(this.reflection=[2*this.pos[0]-t[e-4],2*this.pos[1]-t[e-3]]),t}function a(t){var e=[t];switch(t[0]){case\"M\":return this.pos=this.start=[t[1],t[2]],e;case\"L\":t[5]=t[3]=t[1],t[6]=t[4]=t[2],t[1]=this.pos[0],t[2]=this.pos[1];break;case\"Q\":t[6]=t[4],t[5]=t[3],t[4]=1*t[4]/3+2*t[2]/3,t[3]=1*t[3]/3+2*t[1]/3,t[2]=1*this.pos[1]/3+2*t[2]/3,t[1]=1*this.pos[0]/3+2*t[1]/3;break;case\"A\":e=function(t,e){var i,a,r,s,n,o,l,c,h,d,u,g,f,p,x,b,v,m,y,w,k,A,S,C,P,L,O=Math.abs(e[1]),T=Math.abs(e[2]),I=e[3]%360,E=e[4],M=e[5],X=e[6],z=e[7],Y=new SVG.Point(t),R=new SVG.Point(X,z),D=[];if(0===O||0===T||Y.x===R.x&&Y.y===R.y)return[[\"C\",Y.x,Y.y,R.x,R.y,R.x,R.y]];for((a=(i=new SVG.Point((Y.x-R.x)/2,(Y.y-R.y)/2).transform((new SVG.Matrix).rotate(I))).x*i.x/(O*O)+i.y*i.y/(T*T))>1&&(O*=a=Math.sqrt(a),T*=a),r=(new SVG.Matrix).rotate(I).scale(1/O,1/T).rotate(-I),Y=Y.transform(r),o=(s=[(R=R.transform(r)).x-Y.x,R.y-Y.y])[0]*s[0]+s[1]*s[1],n=Math.sqrt(o),s[0]/=n,s[1]/=n,l=o<4?Math.sqrt(1-o/4):0,E===M&&(l*=-1),c=new SVG.Point((R.x+Y.x)/2+l*-s[1],(R.y+Y.y)/2+l*s[0]),h=new SVG.Point(Y.x-c.x,Y.y-c.y),d=new SVG.Point(R.x-c.x,R.y-c.y),u=Math.acos(h.x/Math.sqrt(h.x*h.x+h.y*h.y)),h.y<0&&(u*=-1),g=Math.acos(d.x/Math.sqrt(d.x*d.x+d.y*d.y)),d.y<0&&(g*=-1),M&&u>g&&(g+=2*Math.PI),!M&&u<g&&(g-=2*Math.PI),b=[],v=u,f=(g-u)/(p=Math.ceil(2*Math.abs(u-g)/Math.PI)),x=4*Math.tan(f/4)/3,k=0;k<=p;k++)y=Math.cos(v),m=Math.sin(v),w=new SVG.Point(c.x+y,c.y+m),b[k]=[new SVG.Point(w.x+x*m,w.y-x*y),w,new SVG.Point(w.x-x*m,w.y+x*y)],v+=f;for(b[0][0]=b[0][1].clone(),b[b.length-1][2]=b[b.length-1][1].clone(),r=(new SVG.Matrix).rotate(I).scale(O,T).rotate(-I),k=0,A=b.length;k<A;k++)b[k][0]=b[k][0].transform(r),b[k][1]=b[k][1].transform(r),b[k][2]=b[k][2].transform(r);for(k=1,A=b.length;k<A;k++)S=(w=b[k-1][2]).x,C=w.y,P=(w=b[k][0]).x,L=w.y,X=(w=b[k][1]).x,z=w.y,D.push([\"C\",S,C,P,L,X,z]);return D}(this.pos,t),t=e[0]}return t[0]=\"C\",this.pos=[t[5],t[6]],this.reflection=[2*t[5]-t[3],2*t[6]-t[4]],e}function r(t,e){if(!1===e)return!1;for(var i=e,a=t.length;i<a;++i)if(\"M\"==t[i][0])return i;return!1}SVG.extend(SVG.PathArray,{morph:function(e){for(var i=this.value,a=this.parse(e),s=0,n=0,o=!1,l=!1;!1!==s||!1!==n;){var c;o=r(i,!1!==s&&s+1),l=r(a,!1!==n&&n+1),!1===s&&(s=0==(c=new SVG.PathArray(h.start).bbox()).height||0==c.width?i.push(i[0])-1:i.push([\"M\",c.x+c.width/2,c.y+c.height/2])-1),!1===n&&(n=0==(c=new SVG.PathArray(h.dest).bbox()).height||0==c.width?a.push(a[0])-1:a.push([\"M\",c.x+c.width/2,c.y+c.height/2])-1);var h=t(i,s,o,a,n,l);i=i.slice(0,s).concat(h.start,!1===o?[]:i.slice(o)),a=a.slice(0,n).concat(h.dest,!1===l?[]:a.slice(l)),s=!1!==o&&s+h.start.length,n=!1!==l&&n+h.dest.length}return this.value=i,this.destination=new SVG.PathArray,this.destination.value=a,this}})}()},882:()=>{!function(){\"use strict\";(function(){function t(t){t.remember(\"_resizeHandler\",this),this.el=t,this.parameters={},this.lastUpdateCall=null,this.p=t.doc().node.createSVGPoint()}t.prototype.transformPoint=function(t,e,i){return this.p.x=t-(this.offset.x-window.pageXOffset),this.p.y=e-(this.offset.y-window.pageYOffset),this.p.matrixTransform(i||this.m)},t.prototype._extractPosition=function(t){return{x:null!=t.clientX?t.clientX:t.touches[0].clientX,y:null!=t.clientY?t.clientY:t.touches[0].clientY}},t.prototype.init=function(t){var e=this;if(this.stop(),\"stop\"!==t){for(var i in this.options={},this.el.resize.defaults)this.options[i]=this.el.resize.defaults[i],void 0!==t[i]&&(this.options[i]=t[i]);this.el.on(\"lt.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"rt.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"rb.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"lb.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"t.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"r.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"b.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"l.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"rot.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"point.resize\",(function(t){e.resize(t||window.event)})),this.update()}},t.prototype.stop=function(){return this.el.off(\"lt.resize\"),this.el.off(\"rt.resize\"),this.el.off(\"rb.resize\"),this.el.off(\"lb.resize\"),this.el.off(\"t.resize\"),this.el.off(\"r.resize\"),this.el.off(\"b.resize\"),this.el.off(\"l.resize\"),this.el.off(\"rot.resize\"),this.el.off(\"point.resize\"),this},t.prototype.resize=function(t){var e=this;this.m=this.el.node.getScreenCTM().inverse(),this.offset={x:window.pageXOffset,y:window.pageYOffset};var i=this._extractPosition(t.detail.event);if(this.parameters={type:this.el.type,p:this.transformPoint(i.x,i.y),x:t.detail.x,y:t.detail.y,box:this.el.bbox(),rotation:this.el.transform().rotation},\"text\"===this.el.type&&(this.parameters.fontSize=this.el.attr()[\"font-size\"]),void 0!==t.detail.i){var a=this.el.array().valueOf();this.parameters.i=t.detail.i,this.parameters.pointCoords=[a[t.detail.i][0],a[t.detail.i][1]]}switch(t.type){case\"lt\":this.calc=function(t,e){var i=this.snapToGrid(t,e);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height-i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y+i[1]).size(this.parameters.box.width-i[0],this.parameters.box.height-i[1])}};break;case\"rt\":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height-i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).size(this.parameters.box.width+i[0],this.parameters.box.height-i[1])}};break;case\"rb\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height+i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+i[0],this.parameters.box.height+i[1])}};break;case\"lb\":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height+i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).size(this.parameters.box.width-i[0],this.parameters.box.height+i[1])}};break;case\"t\":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.height-i[1]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).height(this.parameters.box.height-i[1])}};break;case\"r\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+i[0])}};break;case\"b\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.height+i[1]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+i[1])}};break;case\"l\":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).width(this.parameters.box.width-i[0])}};break;case\"rot\":this.calc=function(t,e){var i=t+this.parameters.p.x,a=e+this.parameters.p.y,r=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),s=Math.atan2(a-this.parameters.box.y-this.parameters.box.height/2,i-this.parameters.box.x-this.parameters.box.width/2),n=this.parameters.rotation+180*(s-r)/Math.PI+this.options.snapToAngle/2;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(n-n%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case\"point\":this.calc=function(t,e){var i=this.snapToGrid(t,e,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),a=this.el.array().valueOf();a[this.parameters.i][0]=this.parameters.pointCoords[0]+i[0],a[this.parameters.i][1]=this.parameters.pointCoords[1]+i[1],this.el.plot(a)}}this.el.fire(\"resizestart\",{dx:this.parameters.x,dy:this.parameters.y,event:t}),SVG.on(window,\"touchmove.resize\",(function(t){e.update(t||window.event)})),SVG.on(window,\"touchend.resize\",(function(){e.done()})),SVG.on(window,\"mousemove.resize\",(function(t){e.update(t||window.event)})),SVG.on(window,\"mouseup.resize\",(function(){e.done()}))},t.prototype.update=function(t){if(t){var e=this._extractPosition(t),i=this.transformPoint(e.x,e.y),a=i.x-this.parameters.p.x,r=i.y-this.parameters.p.y;this.lastUpdateCall=[a,r],this.calc(a,r),this.el.fire(\"resizing\",{dx:a,dy:r,event:t})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},t.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,\"mousemove.resize\"),SVG.off(window,\"mouseup.resize\"),SVG.off(window,\"touchmove.resize\"),SVG.off(window,\"touchend.resize\"),this.el.fire(\"resizedone\")},t.prototype.snapToGrid=function(t,e,i,a){var r;return void 0!==a?r=[(i+t)%this.options.snapToGrid,(a+e)%this.options.snapToGrid]:(i=null==i?3:i,r=[(this.parameters.box.x+t+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+e+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),t<0&&(r[0]-=this.options.snapToGrid),e<0&&(r[1]-=this.options.snapToGrid),t-=Math.abs(r[0])<this.options.snapToGrid/2?r[0]:r[0]-(t<0?-this.options.snapToGrid:this.options.snapToGrid),e-=Math.abs(r[1])<this.options.snapToGrid/2?r[1]:r[1]-(e<0?-this.options.snapToGrid:this.options.snapToGrid),this.constraintToBox(t,e,i,a)},t.prototype.constraintToBox=function(t,e,i,a){var r,s,n=this.options.constraint||{};return void 0!==a?(r=i,s=a):(r=this.parameters.box.x+(1&i?0:this.parameters.box.width),s=this.parameters.box.y+(2&i?0:this.parameters.box.height)),void 0!==n.minX&&r+t<n.minX&&(t=n.minX-r),void 0!==n.maxX&&r+t>n.maxX&&(t=n.maxX-r),void 0!==n.minY&&s+e<n.minY&&(e=n.minY-s),void 0!==n.maxY&&s+e>n.maxY&&(e=n.maxY-s),[t,e]},t.prototype.checkAspectRatio=function(t,e){if(!this.options.saveAspectRatio)return t;var i=t.slice(),a=this.parameters.box.width/this.parameters.box.height,r=this.parameters.box.width+t[0],s=this.parameters.box.height-t[1],n=r/s;return n<a?(i[1]=r/a-this.parameters.box.height,e&&(i[1]=-i[1])):n>a&&(i[0]=this.parameters.box.width-s*a,e&&(i[0]=-i[0])),i},SVG.extend(SVG.Element,{resize:function(e){return(this.remember(\"_resizeHandler\")||new t(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}()},769:()=>{function t(e){return t=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},t(e)}!function(){\"use strict\";function e(t){this.el=t,t.remember(\"_selectHandler\",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1},this.pointsList={lt:[0,0],rt:[\"width\",0],rb:[\"width\",\"height\"],lb:[0,\"height\"],t:[\"width\",0],r:[\"width\",\"height\"],b:[\"width\",\"height\"],l:[0,\"height\"]},this.pointCoord=function(t,e,i){var a=\"string\"!=typeof t?t:e[t];return i?a/2:a},this.pointCoords=function(t,e){var i=this.pointsList[t];return{x:this.pointCoord(i[0],e,\"t\"===t||\"b\"===t),y:this.pointCoord(i[1],e,\"r\"===t||\"l\"===t)}}}e.prototype.init=function(t,e){var i=this.el.bbox();this.options={};var a=this.el.selectize.defaults.points;for(var r in this.el.selectize.defaults)this.options[r]=this.el.selectize.defaults[r],void 0!==e[r]&&(this.options[r]=e[r]);var s=[\"points\",\"pointsExclude\"];for(var r in s){var n=this.options[s[r]];\"string\"==typeof n?n=n.length>0?n.split(/\\s*,\\s*/i):[]:\"boolean\"==typeof n&&\"points\"===s[r]&&(n=n?a:[]),this.options[s[r]]=n}this.options.points=[a,this.options.points].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)>-1}))})),this.options.points=[this.options.points,this.options.pointsExclude].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)<0}))})),this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&-1!==[\"line\",\"polyline\",\"polygon\"].indexOf(this.el.type)?this.selectPoints(t):this.selectRect(t),this.observe(),this.cleanup()},e.prototype.selectPoints=function(t){return this.pointSelection.isSelected=t,this.pointSelection.set||(this.pointSelection.set=this.parent.set(),this.drawPoints()),this},e.prototype.getPointArray=function(){var t=this.el.bbox();return this.el.array().valueOf().map((function(e){return[e[0]-t.x,e[1]-t.y]}))},e.prototype.drawPoints=function(){for(var t=this,e=this.getPointArray(),i=0,a=e.length;i<a;++i){var r=function(e){return function(i){(i=i||window.event).preventDefault?i.preventDefault():i.returnValue=!1,i.stopPropagation();var a=i.pageX||i.touches[0].pageX,r=i.pageY||i.touches[0].pageY;t.el.fire(\"point\",{x:a,y:r,i:e,event:i})}}(i),s=this.drawPoint(e[i][0],e[i][1]).addClass(this.options.classPoints).addClass(this.options.classPoints+\"_point\").on(\"touchstart\",r).on(\"mousedown\",r);this.pointSelection.set.add(s)}},e.prototype.drawPoint=function(t,e){var i=this.options.pointType;switch(i){case\"circle\":return this.drawCircle(t,e);case\"rect\":return this.drawRect(t,e);default:if(\"function\"==typeof i)return i.call(this,t,e);throw new Error(\"Unknown \"+i+\" point type!\")}},e.prototype.drawCircle=function(t,e){return this.nested.circle(this.options.pointSize).center(t,e)},e.prototype.drawRect=function(t,e){return this.nested.rect(this.options.pointSize,this.options.pointSize).center(t,e)},e.prototype.updatePointSelection=function(){var t=this.getPointArray();this.pointSelection.set.each((function(e){this.cx()===t[e][0]&&this.cy()===t[e][1]||this.center(t[e][0],t[e][1])}))},e.prototype.updateRectSelection=function(){var t=this,e=this.el.bbox();if(this.rectSelection.set.get(0).attr({width:e.width,height:e.height}),this.options.points.length&&this.options.points.map((function(i,a){var r=t.pointCoords(i,e);t.rectSelection.set.get(a+1).center(r.x,r.y)})),this.options.rotationPoint){var i=this.rectSelection.set.length();this.rectSelection.set.get(i-1).center(e.width/2,20)}},e.prototype.selectRect=function(t){var e=this,i=this.el.bbox();function a(t){return function(i){(i=i||window.event).preventDefault?i.preventDefault():i.returnValue=!1,i.stopPropagation();var a=i.pageX||i.touches[0].pageX,r=i.pageY||i.touches[0].pageY;e.el.fire(t,{x:a,y:r,event:i})}}if(this.rectSelection.isSelected=t,this.rectSelection.set=this.rectSelection.set||this.parent.set(),this.rectSelection.set.get(0)||this.rectSelection.set.add(this.nested.rect(i.width,i.height).addClass(this.options.classRect)),this.options.points.length&&this.rectSelection.set.length()<2&&(this.options.points.map((function(t,r){var s=e.pointCoords(t,i),n=e.drawPoint(s.x,s.y).attr(\"class\",e.options.classPoints+\"_\"+t).on(\"mousedown\",a(t)).on(\"touchstart\",a(t));e.rectSelection.set.add(n)})),this.rectSelection.set.each((function(){this.addClass(e.options.classPoints)}))),this.options.rotationPoint&&(this.options.points&&!this.rectSelection.set.get(9)||!this.options.points&&!this.rectSelection.set.get(1))){var r=function(t){(t=t||window.event).preventDefault?t.preventDefault():t.returnValue=!1,t.stopPropagation();var i=t.pageX||t.touches[0].pageX,a=t.pageY||t.touches[0].pageY;e.el.fire(\"rot\",{x:i,y:a,event:t})},s=this.drawPoint(i.width/2,20).attr(\"class\",this.options.classPoints+\"_rot\").on(\"touchstart\",r).on(\"mousedown\",r);this.rectSelection.set.add(s)}},e.prototype.handler=function(){var t=this.el.bbox();this.nested.matrix(new SVG.Matrix(this.el).translate(t.x,t.y)),this.rectSelection.isSelected&&this.updateRectSelection(),this.pointSelection.isSelected&&this.updatePointSelection()},e.prototype.observe=function(){var t=this;if(MutationObserver)if(this.rectSelection.isSelected||this.pointSelection.isSelected)this.observerInst=this.observerInst||new MutationObserver((function(){t.handler()})),this.observerInst.observe(this.el.node,{attributes:!0});else try{this.observerInst.disconnect(),delete this.observerInst}catch(t){}else this.el.off(\"DOMAttrModified.select\"),(this.rectSelection.isSelected||this.pointSelection.isSelected)&&this.el.on(\"DOMAttrModified.select\",(function(){t.handler()}))},e.prototype.cleanup=function(){!this.rectSelection.isSelected&&this.rectSelection.set&&(this.rectSelection.set.each((function(){this.remove()})),this.rectSelection.set.clear(),delete this.rectSelection.set),!this.pointSelection.isSelected&&this.pointSelection.set&&(this.pointSelection.set.each((function(){this.remove()})),this.pointSelection.set.clear(),delete this.pointSelection.set),this.pointSelection.isSelected||this.rectSelection.isSelected||(this.nested.remove(),delete this.nested)},SVG.extend(SVG.Element,{selectize:function(i,a){return\"object\"===t(i)&&(a=i,i=!0),(this.remember(\"_selectHandler\")||new e(this)).init(void 0===i||i,a||{}),this}}),SVG.Element.prototype.selectize.defaults={points:[\"lt\",\"rt\",\"rb\",\"lb\",\"t\",\"r\",\"b\",\"l\"],pointsExclude:[],classRect:\"svg_select_boundingRect\",classPoints:\"svg_select_points\",pointSize:7,rotationPoint:!0,deepSelect:!1,pointType:\"circle\"}}()},600:()=>{window.TreemapSquared={},function(){\"use strict\";window.TreemapSquared.generate=function(){function t(e,i,a,r){this.xoffset=e,this.yoffset=i,this.height=r,this.width=a,this.shortestEdge=function(){return Math.min(this.height,this.width)},this.getCoordinates=function(t){var e,i=[],a=this.xoffset,r=this.yoffset,n=s(t)/this.height,o=s(t)/this.width;if(this.width>=this.height)for(e=0;e<t.length;e++)i.push([a,r,a+n,r+t[e]/n]),r+=t[e]/n;else for(e=0;e<t.length;e++)i.push([a,r,a+t[e]/o,r+o]),a+=t[e]/o;return i},this.cutArea=function(e){var i;if(this.width>=this.height){var a=e/this.height,r=this.width-a;i=new t(this.xoffset+a,this.yoffset,r,this.height)}else{var s=e/this.width,n=this.height-s;i=new t(this.xoffset,this.yoffset+s,this.width,n)}return i}}function e(e,a,r,n,o){n=void 0===n?0:n,o=void 0===o?0:o;var l=i(function(t,e){var i,a=[],r=e/s(t);for(i=0;i<t.length;i++)a[i]=t[i]*r;return a}(e,a*r),[],new t(n,o,a,r),[]);return function(t){var e,i,a=[];for(e=0;e<t.length;e++)for(i=0;i<t[e].length;i++)a.push(t[e][i]);return a}(l)}function i(t,e,r,n){var o,l,c;if(0!==t.length)return o=r.shortestEdge(),function(t,e,i){var r;return 0===t.length||((r=t.slice()).push(e),a(t,i)>=a(r,i))}(e,l=t[0],o)?(e.push(l),i(t.slice(1),e,r,n)):(c=r.cutArea(s(e),n),n.push(r.getCoordinates(e)),i(t,[],c,n)),n;n.push(r.getCoordinates(e))}function a(t,e){var i=Math.min.apply(Math,t),a=Math.max.apply(Math,t),r=s(t);return Math.max(Math.pow(e,2)*a/Math.pow(r,2),Math.pow(r,2)/(Math.pow(e,2)*i))}function r(t){return t&&t.constructor===Array}function s(t){var e,i=0;for(e=0;e<t.length;e++)i+=t[e];return i}function n(t){var e,i=0;if(r(t[0]))for(e=0;e<t.length;e++)i+=n(t[e]);else i=s(t);return i}return function t(i,a,s,o,l){o=void 0===o?0:o,l=void 0===l?0:l;var c,h,d=[],u=[];if(r(i[0])){for(h=0;h<i.length;h++)d[h]=n(i[h]);for(c=e(d,a,s,o,l),h=0;h<i.length;h++)u.push(t(i[h],c[h][2]-c[h][0],c[h][3]-c[h][1],c[h][0],c[h][1]))}else u=e(i,a,s,o,l);return u}}()}()},482:function(t,e,i){var a,r;function s(t){return s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},s(t)}r=\"undefined\"!=typeof window?window:this,a=function(){return function(t,e){var i=(void 0!==this?this:t).SVG=function(t){if(i.supported)return t=new i.Doc(t),i.parser.draw||i.prepare(),t};if(i.ns=\"http://www.w3.org/2000/svg\",i.xmlns=\"http://www.w3.org/2000/xmlns/\",i.xlink=\"http://www.w3.org/1999/xlink\",i.svgjs=\"http://svgjs.dev\",i.supported=!0,!i.supported)return!1;i.did=1e3,i.eid=function(t){return\"Svgjs\"+d(t)+i.did++},i.create=function(t){var i=e.createElementNS(this.ns,t);return i.setAttribute(\"id\",this.eid(t)),i},i.extend=function(){var t,e;e=(t=[].slice.call(arguments)).pop();for(var a=t.length-1;a>=0;a--)if(t[a])for(var r in e)t[a].prototype[r]=e[r];i.Set&&i.Set.inherit&&i.Set.inherit()},i.invent=function(t){var e=\"function\"==typeof t.create?t.create:function(){this.constructor.call(this,i.create(t.create))};return t.inherit&&(e.prototype=new t.inherit),t.extend&&i.extend(e,t.extend),t.construct&&i.extend(t.parent||i.Container,t.construct),e},i.adopt=function(e){return e?e.instance?e.instance:((a=\"svg\"==e.nodeName?e.parentNode instanceof t.SVGElement?new i.Nested:new i.Doc:\"linearGradient\"==e.nodeName?new i.Gradient(\"linear\"):\"radialGradient\"==e.nodeName?new i.Gradient(\"radial\"):i[d(e.nodeName)]?new(i[d(e.nodeName)]):new i.Element(e)).type=e.nodeName,a.node=e,e.instance=a,a instanceof i.Doc&&a.namespace().defs(),a.setData(JSON.parse(e.getAttribute(\"svgjs:data\"))||{}),a):null;var a},i.prepare=function(){var t=e.getElementsByTagName(\"body\")[0],a=(t?new i.Doc(t):i.adopt(e.documentElement).nested()).size(2,0);i.parser={body:t||e.documentElement,draw:a.style(\"opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden\").node,poly:a.polyline().node,path:a.path().node,native:i.create(\"svg\")}},i.parser={native:i.create(\"svg\")},e.addEventListener(\"DOMContentLoaded\",(function(){i.parser.draw||i.prepare()}),!1),i.regex={numberAndUnit:/^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,rgb:/rgb\\((\\d+),(\\d+),(\\d+)\\)/,reference:/#([a-z0-9\\-_]+)/i,transforms:/\\)\\s*,?\\s*/,whitespace:/\\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\\s+)?$/,isNumber:/^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,isPercent:/^-?[\\d\\.]+%$/,isImage:/\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i,delimiter:/[\\s,]+/,hyphen:/([^e])\\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\\d?\\.\\d+(?:e[+-]?\\d+)?)((?:\\.\\d+(?:e[+-]?\\d+)?)+))+/gi,dots:/\\./g},i.utils={map:function(t,e){for(var i=t.length,a=[],r=0;r<i;r++)a.push(e(t[r]));return a},filter:function(t,e){for(var i=t.length,a=[],r=0;r<i;r++)e(t[r])&&a.push(t[r]);return a},filterSVGElements:function(e){return this.filter(e,(function(e){return e instanceof t.SVGElement}))}},i.defaults={attrs:{\"fill-opacity\":1,\"stroke-opacity\":1,\"stroke-width\":0,\"stroke-linejoin\":\"miter\",\"stroke-linecap\":\"butt\",fill:\"#000000\",stroke:\"#000000\",opacity:1,x:0,y:0,cx:0,cy:0,width:0,height:0,r:0,rx:0,ry:0,offset:0,\"stop-opacity\":1,\"stop-color\":\"#000000\",\"font-size\":16,\"font-family\":\"Helvetica, Arial, sans-serif\",\"text-anchor\":\"start\"}},i.Color=function(t){var e,a;this.r=0,this.g=0,this.b=0,t&&(\"string\"==typeof t?i.regex.isRgb.test(t)?(e=i.regex.rgb.exec(t.replace(i.regex.whitespace,\"\")),this.r=parseInt(e[1]),this.g=parseInt(e[2]),this.b=parseInt(e[3])):i.regex.isHex.test(t)&&(e=i.regex.hex.exec(4==(a=t).length?[\"#\",a.substring(1,2),a.substring(1,2),a.substring(2,3),a.substring(2,3),a.substring(3,4),a.substring(3,4)].join(\"\"):a),this.r=parseInt(e[1],16),this.g=parseInt(e[2],16),this.b=parseInt(e[3],16)):\"object\"===s(t)&&(this.r=t.r,this.g=t.g,this.b=t.b))},i.extend(i.Color,{toString:function(){return this.toHex()},toHex:function(){return\"#\"+u(this.r)+u(this.g)+u(this.b)},toRgb:function(){return\"rgb(\"+[this.r,this.g,this.b].join()+\")\"},brightness:function(){return this.r/255*.3+this.g/255*.59+this.b/255*.11},morph:function(t){return this.destination=new i.Color(t),this},at:function(t){return this.destination?(t=t<0?0:t>1?1:t,new i.Color({r:~~(this.r+(this.destination.r-this.r)*t),g:~~(this.g+(this.destination.g-this.g)*t),b:~~(this.b+(this.destination.b-this.b)*t)})):this}}),i.Color.test=function(t){return t+=\"\",i.regex.isHex.test(t)||i.regex.isRgb.test(t)},i.Color.isRgb=function(t){return t&&\"number\"==typeof t.r&&\"number\"==typeof t.g&&\"number\"==typeof t.b},i.Color.isColor=function(t){return i.Color.isRgb(t)||i.Color.test(t)},i.Array=function(t,e){0==(t=(t||[]).valueOf()).length&&e&&(t=e.valueOf()),this.value=this.parse(t)},i.extend(i.Array,{toString:function(){return this.value.join(\" \")},valueOf:function(){return this.value},parse:function(t){return t=t.valueOf(),Array.isArray(t)?t:this.split(t)}}),i.PointArray=function(t,e){i.Array.call(this,t,e||[[0,0]])},i.PointArray.prototype=new i.Array,i.PointArray.prototype.constructor=i.PointArray;for(var a={M:function(t,e,i){return e.x=i.x=t[0],e.y=i.y=t[1],[\"M\",e.x,e.y]},L:function(t,e){return e.x=t[0],e.y=t[1],[\"L\",t[0],t[1]]},H:function(t,e){return e.x=t[0],[\"H\",t[0]]},V:function(t,e){return e.y=t[0],[\"V\",t[0]]},C:function(t,e){return e.x=t[4],e.y=t[5],[\"C\",t[0],t[1],t[2],t[3],t[4],t[5]]},Q:function(t,e){return e.x=t[2],e.y=t[3],[\"Q\",t[0],t[1],t[2],t[3]]},Z:function(t,e,i){return e.x=i.x,e.y=i.y,[\"Z\"]}},r=\"mlhvqtcsaz\".split(\"\"),n=0,o=r.length;n<o;++n)a[r[n]]=function(t){return function(e,i,r){if(\"H\"==t)e[0]=e[0]+i.x;else if(\"V\"==t)e[0]=e[0]+i.y;else if(\"A\"==t)e[5]=e[5]+i.x,e[6]=e[6]+i.y;else for(var s=0,n=e.length;s<n;++s)e[s]=e[s]+(s%2?i.y:i.x);if(a&&\"function\"==typeof a[t])return a[t](e,i,r)}}(r[n].toUpperCase());i.PathArray=function(t,e){i.Array.call(this,t,e||[[\"M\",0,0]])},i.PathArray.prototype=new i.Array,i.PathArray.prototype.constructor=i.PathArray,i.extend(i.PathArray,{toString:function(){return function(t){for(var e=0,i=t.length,a=\"\";e<i;e++)a+=t[e][0],null!=t[e][1]&&(a+=t[e][1],null!=t[e][2]&&(a+=\" \",a+=t[e][2],null!=t[e][3]&&(a+=\" \",a+=t[e][3],a+=\" \",a+=t[e][4],null!=t[e][5]&&(a+=\" \",a+=t[e][5],a+=\" \",a+=t[e][6],null!=t[e][7]&&(a+=\" \",a+=t[e][7])))));return a+\" \"}(this.value)},move:function(t,e){var i=this.bbox();return i.x,i.y,this},at:function(t){if(!this.destination)return this;for(var e=this.value,a=this.destination.value,r=[],s=new i.PathArray,n=0,o=e.length;n<o;n++){r[n]=[e[n][0]];for(var l=1,c=e[n].length;l<c;l++)r[n][l]=e[n][l]+(a[n][l]-e[n][l])*t;\"A\"===r[n][0]&&(r[n][4]=+(0!=r[n][4]),r[n][5]=+(0!=r[n][5]))}return s.value=r,s},parse:function(t){if(t instanceof i.PathArray)return t.valueOf();var e,r={M:2,L:2,H:1,V:1,C:6,S:4,Q:4,T:2,A:7,Z:0};t=\"string\"==typeof t?t.replace(i.regex.numbersWithDots,c).replace(i.regex.pathLetters,\" $& \").replace(i.regex.hyphen,\"$1 -\").trim().split(i.regex.delimiter):t.reduce((function(t,e){return[].concat.call(t,e)}),[]);var s=[],n=new i.Point,o=new i.Point,l=0,h=t.length;do{i.regex.isPathLetter.test(t[l])?(e=t[l],++l):\"M\"==e?e=\"L\":\"m\"==e&&(e=\"l\"),s.push(a[e].call(null,t.slice(l,l+=r[e.toUpperCase()]).map(parseFloat),n,o))}while(h>l);return s},bbox:function(){return i.parser.draw||i.prepare(),i.parser.path.setAttribute(\"d\",this.toString()),i.parser.path.getBBox()}}),i.Number=i.invent({create:function(t,e){this.value=0,this.unit=e||\"\",\"number\"==typeof t?this.value=isNaN(t)?0:isFinite(t)?t:t<0?-34e37:34e37:\"string\"==typeof t?(e=t.match(i.regex.numberAndUnit))&&(this.value=parseFloat(e[1]),\"%\"==e[5]?this.value/=100:\"s\"==e[5]&&(this.value*=1e3),this.unit=e[5]):t instanceof i.Number&&(this.value=t.valueOf(),this.unit=t.unit)},extend:{toString:function(){return(\"%\"==this.unit?~~(1e8*this.value)/1e6:\"s\"==this.unit?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(t){return t=new i.Number(t),new i.Number(this+t,this.unit||t.unit)},minus:function(t){return t=new i.Number(t),new i.Number(this-t,this.unit||t.unit)},times:function(t){return t=new i.Number(t),new i.Number(this*t,this.unit||t.unit)},divide:function(t){return t=new i.Number(t),new i.Number(this/t,this.unit||t.unit)},to:function(t){var e=new i.Number(this);return\"string\"==typeof t&&(e.unit=t),e},morph:function(t){return this.destination=new i.Number(t),t.relative&&(this.destination.value+=this.value),this},at:function(t){return this.destination?new i.Number(this.destination).minus(this).times(t).plus(this):this}}}),i.Element=i.invent({create:function(t){this._stroke=i.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=t)&&(this.type=t.nodeName,this.node.instance=this,this._stroke=t.getAttribute(\"stroke\")||this._stroke)},extend:{x:function(t){return this.attr(\"x\",t)},y:function(t){return this.attr(\"y\",t)},cx:function(t){return null==t?this.x()+this.width()/2:this.x(t-this.width()/2)},cy:function(t){return null==t?this.y()+this.height()/2:this.y(t-this.height()/2)},move:function(t,e){return this.x(t).y(e)},center:function(t,e){return this.cx(t).cy(e)},width:function(t){return this.attr(\"width\",t)},height:function(t){return this.attr(\"height\",t)},size:function(t,e){var a=g(this,t,e);return this.width(new i.Number(a.width)).height(new i.Number(a.height))},clone:function(t){this.writeDataToDom();var e=x(this.node.cloneNode(!0));return t?t.add(e):this.after(e),e},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(t){return this.after(t).remove(),t},addTo:function(t){return t.put(this)},putIn:function(t){return t.add(this)},id:function(t){return this.attr(\"id\",t)},show:function(){return this.style(\"display\",\"\")},hide:function(){return this.style(\"display\",\"none\")},visible:function(){return\"none\"!=this.style(\"display\")},toString:function(){return this.attr(\"id\")},classes:function(){var t=this.attr(\"class\");return null==t?[]:t.trim().split(i.regex.delimiter)},hasClass:function(t){return-1!=this.classes().indexOf(t)},addClass:function(t){if(!this.hasClass(t)){var e=this.classes();e.push(t),this.attr(\"class\",e.join(\" \"))}return this},removeClass:function(t){return this.hasClass(t)&&this.attr(\"class\",this.classes().filter((function(e){return e!=t})).join(\" \")),this},toggleClass:function(t){return this.hasClass(t)?this.removeClass(t):this.addClass(t)},reference:function(t){return i.get(this.attr(t))},parent:function(e){var a=this;if(!a.node.parentNode)return null;if(a=i.adopt(a.node.parentNode),!e)return a;for(;a&&a.node instanceof t.SVGElement;){if(\"string\"==typeof e?a.matches(e):a instanceof e)return a;if(!a.node.parentNode||\"#document\"==a.node.parentNode.nodeName)return null;a=i.adopt(a.node.parentNode)}},doc:function(){return this instanceof i.Doc?this:this.parent(i.Doc)},parents:function(t){var e=[],i=this;do{if(!(i=i.parent(t))||!i.node)break;e.push(i)}while(i.parent);return e},matches:function(t){return function(t,e){return(t.matches||t.matchesSelector||t.msMatchesSelector||t.mozMatchesSelector||t.webkitMatchesSelector||t.oMatchesSelector).call(t,e)}(this.node,t)},native:function(){return this.node},svg:function(t){var a=e.createElement(\"svg\");if(!(t&&this instanceof i.Parent))return a.appendChild(t=e.createElement(\"svg\")),this.writeDataToDom(),t.appendChild(this.node.cloneNode(!0)),a.innerHTML.replace(/^<svg>/,\"\").replace(/<\\/svg>$/,\"\");a.innerHTML=\"<svg>\"+t.replace(/\\n/,\"\").replace(/<([\\w:-]+)([^<]+?)\\/>/g,\"<$1$2></$1>\")+\"</svg>\";for(var r=0,s=a.firstChild.childNodes.length;r<s;r++)this.node.appendChild(a.firstChild.firstChild);return this},writeDataToDom:function(){return(this.each||this.lines)&&(this.each?this:this.lines()).each((function(){this.writeDataToDom()})),this.node.removeAttribute(\"svgjs:data\"),Object.keys(this.dom).length&&this.node.setAttribute(\"svgjs:data\",JSON.stringify(this.dom)),this},setData:function(t){return this.dom=t,this},is:function(t){return function(t,e){return t instanceof e}(this,t)}}}),i.easing={\"-\":function(t){return t},\"<>\":function(t){return-Math.cos(t*Math.PI)/2+.5},\">\":function(t){return Math.sin(t*Math.PI/2)},\"<\":function(t){return 1-Math.cos(t*Math.PI/2)}},i.morph=function(t){return function(e,a){return new i.MorphObj(e,a).at(t)}},i.Situation=i.invent({create:function(t){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new i.Number(t.duration).valueOf(),this.delay=new i.Number(t.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=t.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),i.FX=i.invent({create:function(t){this._target=t,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(t,e,a){\"object\"===s(t)&&(e=t.ease,a=t.delay,t=t.duration);var r=new i.Situation({duration:t||1e3,delay:a||0,ease:i.easing[e||\"-\"]||e});return this.queue(r),this},target:function(t){return t&&t instanceof i.Element?(this._target=t,this):this._target},timeToAbsPos:function(t){return(t-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(t){return this.situation.duration/this._speed*t+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=t.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){t.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(t){return(\"function\"==typeof t||t instanceof i.Situation)&&this.situations.push(t),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof i.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var t,e=this.situation;if(e.init)return this;for(var a in e.animations){t=this.target()[a](),Array.isArray(t)||(t=[t]),Array.isArray(e.animations[a])||(e.animations[a]=[e.animations[a]]);for(var r=t.length;r--;)e.animations[a][r]instanceof i.Number&&(t[r]=new i.Number(t[r])),e.animations[a][r]=t[r].morph(e.animations[a][r])}for(var a in e.attrs)e.attrs[a]=new i.MorphObj(this.target().attr(a),e.attrs[a]);for(var a in e.styles)e.styles[a]=new i.MorphObj(this.target().style(a),e.styles[a]);return e.initialTransformation=this.target().matrixify(),e.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(t,e){var i=this.active;return this.active=!1,e&&this.clearQueue(),t&&this.situation&&(!i&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},after:function(t){var e=this.last();return this.target().on(\"finished.fx\",(function i(a){a.detail.situation==e&&(t.call(this,e),this.off(\"finished.fx\",i))})),this._callStart()},during:function(t){var e=this.last(),a=function(a){a.detail.situation==e&&t.call(this,a.detail.pos,i.morph(a.detail.pos),a.detail.eased,e)};return this.target().off(\"during.fx\",a).on(\"during.fx\",a),this.after((function(){this.off(\"during.fx\",a)})),this._callStart()},afterAll:function(t){var e=function e(i){t.call(this),this.off(\"allfinished.fx\",e)};return this.target().off(\"allfinished.fx\",e).on(\"allfinished.fx\",e),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(t,e,i){return this.last()[i||\"animations\"][t]=e,this._callStart()},step:function(t){var e,i,a;t||(this.absPos=this.timeToAbsPos(+new Date)),!1!==this.situation.loops?(e=Math.max(this.absPos,0),i=Math.floor(e),!0===this.situation.loops||i<this.situation.loops?(this.pos=e-i,a=this.situation.loop,this.situation.loop=i):(this.absPos=this.situation.loops,this.pos=1,a=this.situation.loop-1,this.situation.loop=this.situation.loops),this.situation.reversing&&(this.situation.reversed=this.situation.reversed!=Boolean((this.situation.loop-a)%2))):(this.absPos=Math.min(this.absPos,1),this.pos=this.absPos),this.pos<0&&(this.pos=0),this.situation.reversed&&(this.pos=1-this.pos);var r=this.situation.ease(this.pos);for(var s in this.situation.once)s>this.lastPos&&s<=r&&(this.situation.once[s].call(this.target(),this.pos,r),delete this.situation.once[s]);return this.active&&this.target().fire(\"during\",{pos:this.pos,eased:r,fx:this,situation:this.situation}),this.situation?(this.eachAt(),1==this.pos&&!this.situation.reversed||this.situation.reversed&&0==this.pos?(this.stopAnimFrame(),this.target().fire(\"finished\",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire(\"allfinished\"),this.situations.length||(this.target().off(\".fx\"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=r,this):this},eachAt:function(){var t,e=this,a=this.target(),r=this.situation;for(var s in r.animations)t=[].concat(r.animations[s]).map((function(t){return\"string\"!=typeof t&&t.at?t.at(r.ease(e.pos),e.pos):t})),a[s].apply(a,t);for(var s in r.attrs)t=[s].concat(r.attrs[s]).map((function(t){return\"string\"!=typeof t&&t.at?t.at(r.ease(e.pos),e.pos):t})),a.attr.apply(a,t);for(var s in r.styles)t=[s].concat(r.styles[s]).map((function(t){return\"string\"!=typeof t&&t.at?t.at(r.ease(e.pos),e.pos):t})),a.style.apply(a,t);if(r.transforms.length){t=r.initialTransformation,s=0;for(var n=r.transforms.length;s<n;s++){var o=r.transforms[s];o instanceof i.Matrix?t=o.relative?t.multiply((new i.Matrix).morph(o).at(r.ease(this.pos))):t.morph(o).at(r.ease(this.pos)):(o.relative||o.undo(t.extract()),t=t.multiply(o.at(r.ease(this.pos))))}a.matrix(t)}return this},once:function(t,e,i){var a=this.last();return i||(t=a.ease(t)),a.once[t]=e,this},_callStart:function(){return setTimeout(function(){this.start()}.bind(this),0),this}},parent:i.Element,construct:{animate:function(t,e,a){return(this.fx||(this.fx=new i.FX(this))).animate(t,e,a)},delay:function(t){return(this.fx||(this.fx=new i.FX(this))).delay(t)},stop:function(t,e){return this.fx&&this.fx.stop(t,e),this},finish:function(){return this.fx&&this.fx.finish(),this}}}),i.MorphObj=i.invent({create:function(t,e){return i.Color.isColor(e)?new i.Color(t).morph(e):i.regex.delimiter.test(t)?i.regex.pathLetters.test(t)?new i.PathArray(t).morph(e):new i.Array(t).morph(e):i.regex.numberAndUnit.test(e)?new i.Number(t).morph(e):(this.value=t,void(this.destination=e))},extend:{at:function(t,e){return e<1?this.value:this.destination},valueOf:function(){return this.value}}}),i.extend(i.FX,{attr:function(t,e,i){if(\"object\"===s(t))for(var a in t)this.attr(a,t[a]);else this.add(t,e,\"attrs\");return this},plot:function(t,e,i,a){return 4==arguments.length?this.plot([t,e,i,a]):this.add(\"plot\",new(this.target().morphArray)(t))}}),i.Box=i.invent({create:function(t,e,a,r){if(!(\"object\"!==s(t)||t instanceof i.Element))return i.Box.call(this,null!=t.left?t.left:t.x,null!=t.top?t.top:t.y,t.width,t.height);var n;4==arguments.length&&(this.x=t,this.y=e,this.width=a,this.height=r),null==(n=this).x&&(n.x=0,n.y=0,n.width=0,n.height=0),n.w=n.width,n.h=n.height,n.x2=n.x+n.width,n.y2=n.y+n.height,n.cx=n.x+n.width/2,n.cy=n.y+n.height/2}}),i.BBox=i.invent({create:function(t){if(i.Box.apply(this,[].slice.call(arguments)),t instanceof i.Element){var a;try{if(!e.documentElement.contains){for(var r=t.node;r.parentNode;)r=r.parentNode;if(r!=e)throw new Error(\"Element not in the dom\")}a=t.node.getBBox()}catch(e){if(t instanceof i.Shape){i.parser.draw||i.prepare();var s=t.clone(i.parser.draw.instance).show();s&&s.node&&\"function\"==typeof s.node.getBBox&&(a=s.node.getBBox()),s&&\"function\"==typeof s.remove&&s.remove()}else a={x:t.node.clientLeft,y:t.node.clientTop,width:t.node.clientWidth,height:t.node.clientHeight}}i.Box.call(this,a)}},inherit:i.Box,parent:i.Element,construct:{bbox:function(){return new i.BBox(this)}}}),i.BBox.prototype.constructor=i.BBox,i.Matrix=i.invent({create:function(t){var e=p([1,0,0,1,0,0]);t=null===t?e:t instanceof i.Element?t.matrixify():\"string\"==typeof t?p(t.split(i.regex.delimiter).map(parseFloat)):6==arguments.length?p([].slice.call(arguments)):Array.isArray(t)?p(t):t&&\"object\"===s(t)?t:e;for(var a=v.length-1;a>=0;--a)this[v[a]]=null!=t[v[a]]?t[v[a]]:e[v[a]]},extend:{extract:function(){var t=f(this,0,1),e=(f(this,1,0),180/Math.PI*Math.atan2(t.y,t.x)-90);return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(e*Math.PI/180)+this.f*Math.sin(e*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(e*Math.PI/180)+this.e*Math.sin(-e*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),rotation:e,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new i.Matrix(this)}},clone:function(){return new i.Matrix(this)},morph:function(t){return this.destination=new i.Matrix(t),this},multiply:function(t){return new i.Matrix(this.native().multiply(function(t){return t instanceof i.Matrix||(t=new i.Matrix(t)),t}(t).native()))},inverse:function(){return new i.Matrix(this.native().inverse())},translate:function(t,e){return new i.Matrix(this.native().translate(t||0,e||0))},native:function(){for(var t=i.parser.native.createSVGMatrix(),e=v.length-1;e>=0;e--)t[v[e]]=this[v[e]];return t},toString:function(){return\"matrix(\"+b(this.a)+\",\"+b(this.b)+\",\"+b(this.c)+\",\"+b(this.d)+\",\"+b(this.e)+\",\"+b(this.f)+\")\"}},parent:i.Element,construct:{ctm:function(){return new i.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof i.Nested){var t=this.rect(1,1),e=t.node.getScreenCTM();return t.remove(),new i.Matrix(e)}return new i.Matrix(this.node.getScreenCTM())}}}),i.Point=i.invent({create:function(t,e){var i;i=Array.isArray(t)?{x:t[0],y:t[1]}:\"object\"===s(t)?{x:t.x,y:t.y}:null!=t?{x:t,y:null!=e?e:t}:{x:0,y:0},this.x=i.x,this.y=i.y},extend:{clone:function(){return new i.Point(this)},morph:function(t,e){return this.destination=new i.Point(t,e),this}}}),i.extend(i.Element,{point:function(t,e){return new i.Point(t,e).transform(this.screenCTM().inverse())}}),i.extend(i.Element,{attr:function(t,e,a){if(null==t){for(t={},a=(e=this.node.attributes).length-1;a>=0;a--)t[e[a].nodeName]=i.regex.isNumber.test(e[a].nodeValue)?parseFloat(e[a].nodeValue):e[a].nodeValue;return t}if(\"object\"===s(t))for(var r in t)this.attr(r,t[r]);else if(null===e)this.node.removeAttribute(t);else{if(null==e)return null==(e=this.node.getAttribute(t))?i.defaults.attrs[t]:i.regex.isNumber.test(e)?parseFloat(e):e;\"stroke-width\"==t?this.attr(\"stroke\",parseFloat(e)>0?this._stroke:null):\"stroke\"==t&&(this._stroke=e),\"fill\"!=t&&\"stroke\"!=t||(i.regex.isImage.test(e)&&(e=this.doc().defs().image(e,0,0)),e instanceof i.Image&&(e=this.doc().defs().pattern(0,0,(function(){this.add(e)})))),\"number\"==typeof e?e=new i.Number(e):i.Color.isColor(e)?e=new i.Color(e):Array.isArray(e)&&(e=new i.Array(e)),\"leading\"==t?this.leading&&this.leading(e):\"string\"==typeof a?this.node.setAttributeNS(a,t,e.toString()):this.node.setAttribute(t,e.toString()),!this.rebuild||\"font-size\"!=t&&\"x\"!=t||this.rebuild(t,e)}return this}}),i.extend(i.Element,{transform:function(t,e){var a;return\"object\"!==s(t)?(a=new i.Matrix(this).extract(),\"string\"==typeof t?a[t]:a):(a=new i.Matrix(this),e=!!e||!!t.relative,null!=t.a&&(a=e?a.multiply(new i.Matrix(t)):new i.Matrix(t)),this.attr(\"transform\",a))}}),i.extend(i.Element,{untransform:function(){return this.attr(\"transform\",null)},matrixify:function(){return(this.attr(\"transform\")||\"\").split(i.regex.transforms).slice(0,-1).map((function(t){var e=t.trim().split(\"(\");return[e[0],e[1].split(i.regex.delimiter).map((function(t){return parseFloat(t)}))]})).reduce((function(t,e){return\"matrix\"==e[0]?t.multiply(p(e[1])):t[e[0]].apply(t,e[1])}),new i.Matrix)},toParent:function(t){if(this==t)return this;var e=this.screenCTM(),i=t.screenCTM().inverse();return this.addTo(t).untransform().transform(i.multiply(e)),this},toDoc:function(){return this.toParent(this.doc())}}),i.Transformation=i.invent({create:function(t,e){if(arguments.length>1&&\"boolean\"!=typeof e)return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(t))for(var i=0,a=this.arguments.length;i<a;++i)this[this.arguments[i]]=t[i];else if(t&&\"object\"===s(t))for(i=0,a=this.arguments.length;i<a;++i)this[this.arguments[i]]=t[this.arguments[i]];this.inversed=!1,!0===e&&(this.inversed=!0)}}),i.Translate=i.invent({parent:i.Matrix,inherit:i.Transformation,create:function(t,e){this.constructor.apply(this,[].slice.call(arguments))},extend:{arguments:[\"transformedX\",\"transformedY\"],method:\"translate\"}}),i.extend(i.Element,{style:function(t,e){if(0==arguments.length)return this.node.style.cssText||\"\";if(arguments.length<2)if(\"object\"===s(t))for(var a in t)this.style(a,t[a]);else{if(!i.regex.isCss.test(t))return this.node.style[h(t)];for(t=t.split(/\\s*;\\s*/).filter((function(t){return!!t})).map((function(t){return t.split(/\\s*:\\s*/)}));e=t.pop();)this.style(e[0],e[1])}else this.node.style[h(t)]=null===e||i.regex.isBlank.test(e)?\"\":e;return this}}),i.Parent=i.invent({create:function(t){this.constructor.call(this,t)},inherit:i.Element,extend:{children:function(){return i.utils.map(i.utils.filterSVGElements(this.node.childNodes),(function(t){return i.adopt(t)}))},add:function(t,e){return null==e?this.node.appendChild(t.node):t.node!=this.node.childNodes[e]&&this.node.insertBefore(t.node,this.node.childNodes[e]),this},put:function(t,e){return this.add(t,e),t},has:function(t){return this.index(t)>=0},index:function(t){return[].slice.call(this.node.childNodes).indexOf(t.node)},get:function(t){return i.adopt(this.node.childNodes[t])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(t,e){for(var a=this.children(),r=0,s=a.length;r<s;r++)a[r]instanceof i.Element&&t.apply(a[r],[r,a]),e&&a[r]instanceof i.Container&&a[r].each(t,e);return this},removeElement:function(t){return this.node.removeChild(t.node),this},clear:function(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return delete this._defs,this},defs:function(){return this.doc().defs()}}}),i.extend(i.Parent,{ungroup:function(t,e){return 0===e||this instanceof i.Defs||this.node==i.parser.draw||(t=t||(this instanceof i.Doc?this:this.parent(i.Parent)),e=e||1/0,this.each((function(){return this instanceof i.Defs?this:this instanceof i.Parent?this.ungroup(t,e-1):this.toParent(t)})),this.node.firstChild||this.remove()),this},flatten:function(t,e){return this.ungroup(t,e)}}),i.Container=i.invent({create:function(t){this.constructor.call(this,t)},inherit:i.Parent}),i.ViewBox=i.invent({parent:i.Container,construct:{}}),[\"click\",\"dblclick\",\"mousedown\",\"mouseup\",\"mouseover\",\"mouseout\",\"mousemove\",\"touchstart\",\"touchmove\",\"touchleave\",\"touchend\",\"touchcancel\"].forEach((function(t){i.Element.prototype[t]=function(e){return i.on(this.node,t,e),this}})),i.listeners=[],i.handlerMap=[],i.listenerId=0,i.on=function(t,e,a,r,s){var n=a.bind(r||t.instance||t),o=(i.handlerMap.indexOf(t)+1||i.handlerMap.push(t))-1,l=e.split(\".\")[0],c=e.split(\".\")[1]||\"*\";i.listeners[o]=i.listeners[o]||{},i.listeners[o][l]=i.listeners[o][l]||{},i.listeners[o][l][c]=i.listeners[o][l][c]||{},a._svgjsListenerId||(a._svgjsListenerId=++i.listenerId),i.listeners[o][l][c][a._svgjsListenerId]=n,t.addEventListener(l,n,s||{passive:!0})},i.off=function(t,e,a){var r=i.handlerMap.indexOf(t),s=e&&e.split(\".\")[0],n=e&&e.split(\".\")[1],o=\"\";if(-1!=r)if(a){if(\"function\"==typeof a&&(a=a._svgjsListenerId),!a)return;i.listeners[r][s]&&i.listeners[r][s][n||\"*\"]&&(t.removeEventListener(s,i.listeners[r][s][n||\"*\"][a],!1),delete i.listeners[r][s][n||\"*\"][a])}else if(n&&s){if(i.listeners[r][s]&&i.listeners[r][s][n]){for(var l in i.listeners[r][s][n])i.off(t,[s,n].join(\".\"),l);delete i.listeners[r][s][n]}}else if(n)for(var c in i.listeners[r])for(var o in i.listeners[r][c])n===o&&i.off(t,[c,n].join(\".\"));else if(s){if(i.listeners[r][s]){for(var o in i.listeners[r][s])i.off(t,[s,o].join(\".\"));delete i.listeners[r][s]}}else{for(var c in i.listeners[r])i.off(t,c);delete i.listeners[r],delete i.handlerMap[r]}},i.extend(i.Element,{on:function(t,e,a,r){return i.on(this.node,t,e,a,r),this},off:function(t,e){return i.off(this.node,t,e),this},fire:function(e,a){return e instanceof t.Event?this.node.dispatchEvent(e):this.node.dispatchEvent(e=new i.CustomEvent(e,{detail:a,cancelable:!0})),this._event=e,this},event:function(){return this._event}}),i.Defs=i.invent({create:\"defs\",inherit:i.Container}),i.G=i.invent({create:\"g\",inherit:i.Container,extend:{x:function(t){return null==t?this.transform(\"x\"):this.transform({x:t-this.x()},!0)}},construct:{group:function(){return this.put(new i.G)}}}),i.Doc=i.invent({create:function(t){t&&(\"svg\"==(t=\"string\"==typeof t?e.getElementById(t):t).nodeName?this.constructor.call(this,t):(this.constructor.call(this,i.create(\"svg\")),t.appendChild(this.node),this.size(\"100%\",\"100%\")),this.namespace().defs())},inherit:i.Container,extend:{namespace:function(){return this.attr({xmlns:i.ns,version:\"1.1\"}).attr(\"xmlns:xlink\",i.xlink,i.xmlns).attr(\"xmlns:svgjs\",i.svgjs,i.xmlns)},defs:function(){var t;return this._defs||((t=this.node.getElementsByTagName(\"defs\")[0])?this._defs=i.adopt(t):this._defs=new i.Defs,this.node.appendChild(this._defs.node)),this._defs},parent:function(){return this.node.parentNode&&\"#document\"!=this.node.parentNode.nodeName?this.node.parentNode:null},remove:function(){return this.parent()&&this.parent().removeChild(this.node),this},clear:function(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return delete this._defs,i.parser.draw&&!i.parser.draw.parentNode&&this.node.appendChild(i.parser.draw),this},clone:function(t){this.writeDataToDom();var e=this.node,i=x(e.cloneNode(!0));return t?(t.node||t).appendChild(i.node):e.parentNode.insertBefore(i.node,e.nextSibling),i}}}),i.extend(i.Element,{}),i.Gradient=i.invent({create:function(t){this.constructor.call(this,i.create(t+\"Gradient\")),this.type=t},inherit:i.Container,extend:{at:function(t,e,a){return this.put(new i.Stop).update(t,e,a)},update:function(t){return this.clear(),\"function\"==typeof t&&t.call(this,this),this},fill:function(){return\"url(#\"+this.id()+\")\"},toString:function(){return this.fill()},attr:function(t,e,a){return\"transform\"==t&&(t=\"gradientTransform\"),i.Container.prototype.attr.call(this,t,e,a)}},construct:{gradient:function(t,e){return this.defs().gradient(t,e)}}}),i.extend(i.Gradient,i.FX,{from:function(t,e){return\"radial\"==(this._target||this).type?this.attr({fx:new i.Number(t),fy:new i.Number(e)}):this.attr({x1:new i.Number(t),y1:new i.Number(e)})},to:function(t,e){return\"radial\"==(this._target||this).type?this.attr({cx:new i.Number(t),cy:new i.Number(e)}):this.attr({x2:new i.Number(t),y2:new i.Number(e)})}}),i.extend(i.Defs,{gradient:function(t,e){return this.put(new i.Gradient(t)).update(e)}}),i.Stop=i.invent({create:\"stop\",inherit:i.Element,extend:{update:function(t){return(\"number\"==typeof t||t instanceof i.Number)&&(t={offset:arguments[0],color:arguments[1],opacity:arguments[2]}),null!=t.opacity&&this.attr(\"stop-opacity\",t.opacity),null!=t.color&&this.attr(\"stop-color\",t.color),null!=t.offset&&this.attr(\"offset\",new i.Number(t.offset)),this}}}),i.Pattern=i.invent({create:\"pattern\",inherit:i.Container,extend:{fill:function(){return\"url(#\"+this.id()+\")\"},update:function(t){return this.clear(),\"function\"==typeof t&&t.call(this,this),this},toString:function(){return this.fill()},attr:function(t,e,a){return\"transform\"==t&&(t=\"patternTransform\"),i.Container.prototype.attr.call(this,t,e,a)}},construct:{pattern:function(t,e,i){return this.defs().pattern(t,e,i)}}}),i.extend(i.Defs,{pattern:function(t,e,a){return this.put(new i.Pattern).update(a).attr({x:0,y:0,width:t,height:e,patternUnits:\"userSpaceOnUse\"})}}),i.Shape=i.invent({create:function(t){this.constructor.call(this,t)},inherit:i.Element}),i.Symbol=i.invent({create:\"symbol\",inherit:i.Container,construct:{symbol:function(){return this.put(new i.Symbol)}}}),i.Use=i.invent({create:\"use\",inherit:i.Shape,extend:{element:function(t,e){return this.attr(\"href\",(e||\"\")+\"#\"+t,i.xlink)}},construct:{use:function(t,e){return this.put(new i.Use).element(t,e)}}}),i.Rect=i.invent({create:\"rect\",inherit:i.Shape,construct:{rect:function(t,e){return this.put(new i.Rect).size(t,e)}}}),i.Circle=i.invent({create:\"circle\",inherit:i.Shape,construct:{circle:function(t){return this.put(new i.Circle).rx(new i.Number(t).divide(2)).move(0,0)}}}),i.extend(i.Circle,i.FX,{rx:function(t){return this.attr(\"r\",t)},ry:function(t){return this.rx(t)}}),i.Ellipse=i.invent({create:\"ellipse\",inherit:i.Shape,construct:{ellipse:function(t,e){return this.put(new i.Ellipse).size(t,e).move(0,0)}}}),i.extend(i.Ellipse,i.Rect,i.FX,{rx:function(t){return this.attr(\"rx\",t)},ry:function(t){return this.attr(\"ry\",t)}}),i.extend(i.Circle,i.Ellipse,{x:function(t){return null==t?this.cx()-this.rx():this.cx(t+this.rx())},y:function(t){return null==t?this.cy()-this.ry():this.cy(t+this.ry())},cx:function(t){return null==t?this.attr(\"cx\"):this.attr(\"cx\",t)},cy:function(t){return null==t?this.attr(\"cy\"):this.attr(\"cy\",t)},width:function(t){return null==t?2*this.rx():this.rx(new i.Number(t).divide(2))},height:function(t){return null==t?2*this.ry():this.ry(new i.Number(t).divide(2))},size:function(t,e){var a=g(this,t,e);return this.rx(new i.Number(a.width).divide(2)).ry(new i.Number(a.height).divide(2))}}),i.Line=i.invent({create:\"line\",inherit:i.Shape,extend:{array:function(){return new i.PointArray([[this.attr(\"x1\"),this.attr(\"y1\")],[this.attr(\"x2\"),this.attr(\"y2\")]])},plot:function(t,e,a,r){return null==t?this.array():(t=void 0!==e?{x1:t,y1:e,x2:a,y2:r}:new i.PointArray(t).toLine(),this.attr(t))},move:function(t,e){return this.attr(this.array().move(t,e).toLine())},size:function(t,e){var i=g(this,t,e);return this.attr(this.array().size(i.width,i.height).toLine())}},construct:{line:function(t,e,a,r){return i.Line.prototype.plot.apply(this.put(new i.Line),null!=t?[t,e,a,r]:[0,0,0,0])}}}),i.Polyline=i.invent({create:\"polyline\",inherit:i.Shape,construct:{polyline:function(t){return this.put(new i.Polyline).plot(t||new i.PointArray)}}}),i.Polygon=i.invent({create:\"polygon\",inherit:i.Shape,construct:{polygon:function(t){return this.put(new i.Polygon).plot(t||new i.PointArray)}}}),i.extend(i.Polyline,i.Polygon,{array:function(){return this._array||(this._array=new i.PointArray(this.attr(\"points\")))},plot:function(t){return null==t?this.array():this.clear().attr(\"points\",\"string\"==typeof t?t:this._array=new i.PointArray(t))},clear:function(){return delete this._array,this},move:function(t,e){return this.attr(\"points\",this.array().move(t,e))},size:function(t,e){var i=g(this,t,e);return this.attr(\"points\",this.array().size(i.width,i.height))}}),i.extend(i.Line,i.Polyline,i.Polygon,{morphArray:i.PointArray,x:function(t){return null==t?this.bbox().x:this.move(t,this.bbox().y)},y:function(t){return null==t?this.bbox().y:this.move(this.bbox().x,t)},width:function(t){var e=this.bbox();return null==t?e.width:this.size(t,e.height)},height:function(t){var e=this.bbox();return null==t?e.height:this.size(e.width,t)}}),i.Path=i.invent({create:\"path\",inherit:i.Shape,extend:{morphArray:i.PathArray,array:function(){return this._array||(this._array=new i.PathArray(this.attr(\"d\")))},plot:function(t){return null==t?this.array():this.clear().attr(\"d\",\"string\"==typeof t?t:this._array=new i.PathArray(t))},clear:function(){return delete this._array,this}},construct:{path:function(t){return this.put(new i.Path).plot(t||new i.PathArray)}}}),i.Image=i.invent({create:\"image\",inherit:i.Shape,extend:{load:function(e){if(!e)return this;var a=this,r=new t.Image;return i.on(r,\"load\",(function(){i.off(r);var t=a.parent(i.Pattern);null!==t&&(0==a.width()&&0==a.height()&&a.size(r.width,r.height),t&&0==t.width()&&0==t.height()&&t.size(a.width(),a.height()),\"function\"==typeof a._loaded&&a._loaded.call(a,{width:r.width,height:r.height,ratio:r.width/r.height,url:e}))})),i.on(r,\"error\",(function(t){i.off(r),\"function\"==typeof a._error&&a._error.call(a,t)})),this.attr(\"href\",r.src=this.src=e,i.xlink)},loaded:function(t){return this._loaded=t,this},error:function(t){return this._error=t,this}},construct:{image:function(t,e,a){return this.put(new i.Image).load(t).size(e||0,a||e||0)}}}),i.Text=i.invent({create:function(){this.constructor.call(this,i.create(\"text\")),this.dom.leading=new i.Number(1.3),this._rebuild=!0,this._build=!1,this.attr(\"font-family\",i.defaults.attrs[\"font-family\"])},inherit:i.Shape,extend:{x:function(t){return null==t?this.attr(\"x\"):this.attr(\"x\",t)},text:function(t){if(void 0===t){t=\"\";for(var e=this.node.childNodes,a=0,r=e.length;a<r;++a)0!=a&&3!=e[a].nodeType&&1==i.adopt(e[a]).dom.newLined&&(t+=\"\\n\"),t+=e[a].textContent;return t}if(this.clear().build(!0),\"function\"==typeof t)t.call(this,this);else{a=0;for(var s=(t=t.split(\"\\n\")).length;a<s;a++)this.tspan(t[a]).newLine()}return this.build(!1).rebuild()},size:function(t){return this.attr(\"font-size\",t).rebuild()},leading:function(t){return null==t?this.dom.leading:(this.dom.leading=new i.Number(t),this.rebuild())},lines:function(){var t=(this.textPath&&this.textPath()||this).node,e=i.utils.map(i.utils.filterSVGElements(t.childNodes),(function(t){return i.adopt(t)}));return new i.Set(e)},rebuild:function(t){if(\"boolean\"==typeof t&&(this._rebuild=t),this._rebuild){var e=this,a=0,r=this.dom.leading*new i.Number(this.attr(\"font-size\"));this.lines().each((function(){this.dom.newLined&&(e.textPath()||this.attr(\"x\",e.attr(\"x\")),\"\\n\"==this.text()?a+=r:(this.attr(\"dy\",r+a),a=0))})),this.fire(\"rebuild\")}return this},build:function(t){return this._build=!!t,this},setData:function(t){return this.dom=t,this.dom.leading=new i.Number(t.leading||1.3),this}},construct:{text:function(t){return this.put(new i.Text).text(t)},plain:function(t){return this.put(new i.Text).plain(t)}}}),i.Tspan=i.invent({create:\"tspan\",inherit:i.Shape,extend:{text:function(t){return null==t?this.node.textContent+(this.dom.newLined?\"\\n\":\"\"):(\"function\"==typeof t?t.call(this,this):this.plain(t),this)},dx:function(t){return this.attr(\"dx\",t)},dy:function(t){return this.attr(\"dy\",t)},newLine:function(){var t=this.parent(i.Text);return this.dom.newLined=!0,this.dy(t.dom.leading*t.attr(\"font-size\")).attr(\"x\",t.x())}}}),i.extend(i.Text,i.Tspan,{plain:function(t){return!1===this._build&&this.clear(),this.node.appendChild(e.createTextNode(t)),this},tspan:function(t){var e=(this.textPath&&this.textPath()||this).node,a=new i.Tspan;return!1===this._build&&this.clear(),e.appendChild(a.node),a.text(t)},clear:function(){for(var t=(this.textPath&&this.textPath()||this).node;t.hasChildNodes();)t.removeChild(t.lastChild);return this},length:function(){return this.node.getComputedTextLength()}}),i.TextPath=i.invent({create:\"textPath\",inherit:i.Parent,parent:i.Text,construct:{morphArray:i.PathArray,array:function(){var t=this.track();return t?t.array():null},plot:function(t){var e=this.track(),i=null;return e&&(i=e.plot(t)),null==t?i:this},track:function(){var t=this.textPath();if(t)return t.reference(\"href\")},textPath:function(){if(this.node.firstChild&&\"textPath\"==this.node.firstChild.nodeName)return i.adopt(this.node.firstChild)}}}),i.Nested=i.invent({create:function(){this.constructor.call(this,i.create(\"svg\")),this.style(\"overflow\",\"visible\")},inherit:i.Container,construct:{nested:function(){return this.put(new i.Nested)}}});var l={stroke:[\"color\",\"width\",\"opacity\",\"linecap\",\"linejoin\",\"miterlimit\",\"dasharray\",\"dashoffset\"],fill:[\"color\",\"opacity\",\"rule\"],prefix:function(t,e){return\"color\"==e?t:t+\"-\"+e}};function c(t,e,a,r){return a+r.replace(i.regex.dots,\" .\")}function h(t){return t.toLowerCase().replace(/-(.)/g,(function(t,e){return e.toUpperCase()}))}function d(t){return t.charAt(0).toUpperCase()+t.slice(1)}function u(t){var e=t.toString(16);return 1==e.length?\"0\"+e:e}function g(t,e,i){if(null==e||null==i){var a=t.bbox();null==e?e=a.width/a.height*i:null==i&&(i=a.height/a.width*e)}return{width:e,height:i}}function f(t,e,i){return{x:e*t.a+i*t.c+0,y:e*t.b+i*t.d+0}}function p(t){return{a:t[0],b:t[1],c:t[2],d:t[3],e:t[4],f:t[5]}}function x(e){for(var a=e.childNodes.length-1;a>=0;a--)e.childNodes[a]instanceof t.SVGElement&&x(e.childNodes[a]);return i.adopt(e).id(i.eid(e.nodeName))}function b(t){return Math.abs(t)>1e-37?t:0}[\"fill\",\"stroke\"].forEach((function(t){var e={};e[t]=function(e){if(void 0===e)return this;if(\"string\"==typeof e||i.Color.isRgb(e)||e&&\"function\"==typeof e.fill)this.attr(t,e);else for(var a=l[t].length-1;a>=0;a--)null!=e[l[t][a]]&&this.attr(l.prefix(t,l[t][a]),e[l[t][a]]);return this},i.extend(i.Element,i.FX,e)})),i.extend(i.Element,i.FX,{translate:function(t,e){return this.transform({x:t,y:e})},matrix:function(t){return this.attr(\"transform\",new i.Matrix(6==arguments.length?[].slice.call(arguments):t))},opacity:function(t){return this.attr(\"opacity\",t)},dx:function(t){return this.x(new i.Number(t).plus(this instanceof i.FX?0:this.x()),!0)},dy:function(t){return this.y(new i.Number(t).plus(this instanceof i.FX?0:this.y()),!0)}}),i.extend(i.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(t){return this.node.getPointAtLength(t)}}),i.Set=i.invent({create:function(t){Array.isArray(t)?this.members=t:this.clear()},extend:{add:function(){for(var t=[].slice.call(arguments),e=0,i=t.length;e<i;e++)this.members.push(t[e]);return this},remove:function(t){var e=this.index(t);return e>-1&&this.members.splice(e,1),this},each:function(t){for(var e=0,i=this.members.length;e<i;e++)t.apply(this.members[e],[e,this.members]);return this},clear:function(){return this.members=[],this},length:function(){return this.members.length},has:function(t){return this.index(t)>=0},index:function(t){return this.members.indexOf(t)},get:function(t){return this.members[t]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members}},construct:{set:function(t){return new i.Set(t)}}}),i.FX.Set=i.invent({create:function(t){this.set=t}}),i.Set.inherit=function(){var t=[];for(var e in i.Shape.prototype)\"function\"==typeof i.Shape.prototype[e]&&\"function\"!=typeof i.Set.prototype[e]&&t.push(e);for(var e in t.forEach((function(t){i.Set.prototype[t]=function(){for(var e=0,a=this.members.length;e<a;e++)this.members[e]&&\"function\"==typeof this.members[e][t]&&this.members[e][t].apply(this.members[e],arguments);return\"animate\"==t?this.fx||(this.fx=new i.FX.Set(this)):this}})),t=[],i.FX.prototype)\"function\"==typeof i.FX.prototype[e]&&\"function\"!=typeof i.FX.Set.prototype[e]&&t.push(e);t.forEach((function(t){i.FX.Set.prototype[t]=function(){for(var e=0,i=this.set.members.length;e<i;e++)this.set.members[e].fx[t].apply(this.set.members[e].fx,arguments);return this}}))},i.extend(i.Element,{}),i.extend(i.Element,{remember:function(t,e){if(\"object\"===s(arguments[0]))for(var i in t)this.remember(i,t[i]);else{if(1==arguments.length)return this.memory()[t];this.memory()[t]=e}return this},forget:function(){if(0==arguments.length)this._memory={};else for(var t=arguments.length-1;t>=0;t--)delete this.memory()[arguments[t]];return this},memory:function(){return this._memory||(this._memory={})}}),i.get=function(t){var a=e.getElementById(function(t){var e=(t||\"\").toString().match(i.regex.reference);if(e)return e[1]}(t)||t);return i.adopt(a)},i.select=function(t,a){return new i.Set(i.utils.map((a||e).querySelectorAll(t),(function(t){return i.adopt(t)})))},i.extend(i.Parent,{select:function(t){return i.select(t,this.node)}});var v=\"abcdef\".split(\"\");if(\"function\"!=typeof t.CustomEvent){var m=function(t,i){i=i||{bubbles:!1,cancelable:!1,detail:void 0};var a=e.createEvent(\"CustomEvent\");return a.initCustomEvent(t,i.bubbles,i.cancelable,i.detail),a};m.prototype=t.Event.prototype,i.CustomEvent=m}else i.CustomEvent=t.CustomEvent;return i}(r,r.document)}.call(e,i,e,t),void 0===a||(t.exports=a)},539:(t,e,i)=>{(e=i(922)(!1)).push([t.id,'@keyframes opaque {\\n  0% {\\n      opacity: 0\\n  }\\n\\n  to {\\n      opacity: 1\\n  }\\n}\\n\\n@keyframes resizeanim {\\n  0%,to {\\n      opacity: 0\\n  }\\n}\\n\\n.apexcharts-canvas {\\n  position: relative;\\n  user-select: none\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar {\\n  -webkit-appearance: none;\\n  width: 6px\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\\n  border-radius: 4px;\\n  background-color: rgba(0,0,0,.5);\\n  box-shadow: 0 0 1px rgba(255,255,255,.5);\\n  -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5)\\n}\\n\\n.apexcharts-inner {\\n  position: relative\\n}\\n\\n.apexcharts-text tspan {\\n  font-family: inherit\\n}\\n\\n.legend-mouseover-inactive {\\n  transition: .15s ease all;\\n  opacity: .2\\n}\\n\\n.apexcharts-legend-text {\\n  padding-left: 15px;\\n  margin-left: -15px;\\n}\\n\\n.apexcharts-series-collapsed {\\n  opacity: 0\\n}\\n\\n.apexcharts-tooltip {\\n  border-radius: 5px;\\n  box-shadow: 2px 2px 6px -4px #999;\\n  cursor: default;\\n  font-size: 14px;\\n  left: 62px;\\n  opacity: 0;\\n  pointer-events: none;\\n  position: absolute;\\n  top: 20px;\\n  display: flex;\\n  flex-direction: column;\\n  overflow: hidden;\\n  white-space: nowrap;\\n  z-index: 12;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-tooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light {\\n  border: 1px solid #e3e3e3;\\n  background: rgba(255,255,255,.96)\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-dark {\\n  color: #fff;\\n  background: rgba(30,30,30,.8)\\n}\\n\\n.apexcharts-tooltip * {\\n  font-family: inherit\\n}\\n\\n.apexcharts-tooltip-title {\\n  padding: 6px;\\n  font-size: 15px;\\n  margin-bottom: 4px\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {\\n  background: #eceff1;\\n  border-bottom: 1px solid #ddd\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\\n  background: rgba(0,0,0,.7);\\n  border-bottom: 1px solid #333\\n}\\n\\n.apexcharts-tooltip-text-goals-value,.apexcharts-tooltip-text-y-value,.apexcharts-tooltip-text-z-value {\\n  display: inline-block;\\n  margin-left: 5px;\\n  font-weight: 600\\n}\\n\\n.apexcharts-tooltip-text-goals-label:empty,.apexcharts-tooltip-text-goals-value:empty,.apexcharts-tooltip-text-y-label:empty,.apexcharts-tooltip-text-y-value:empty,.apexcharts-tooltip-text-z-value:empty,.apexcharts-tooltip-title:empty {\\n  display: none\\n}\\n\\n.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-tooltip-goals-group,.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\\n  display: flex\\n}\\n\\n.apexcharts-tooltip-text-goals-label:not(:empty),.apexcharts-tooltip-text-goals-value:not(:empty) {\\n  margin-top: -6px\\n}\\n\\n.apexcharts-tooltip-marker {\\n  width: 12px;\\n  height: 12px;\\n  position: relative;\\n  top: 0;\\n  margin-right: 10px;\\n  border-radius: 50%\\n}\\n\\n.apexcharts-tooltip-series-group {\\n  padding: 0 10px;\\n  display: none;\\n  text-align: left;\\n  justify-content: left;\\n  align-items: center\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\\n  opacity: 1\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active,.apexcharts-tooltip-series-group:last-child {\\n  padding-bottom: 4px\\n}\\n\\n.apexcharts-tooltip-series-group-hidden {\\n  opacity: 0;\\n  height: 0;\\n  line-height: 0;\\n  padding: 0!important\\n}\\n\\n.apexcharts-tooltip-y-group {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-custom-tooltip,.apexcharts-tooltip-box {\\n  padding: 4px 8px\\n}\\n\\n.apexcharts-tooltip-boxPlot {\\n  display: flex;\\n  flex-direction: column-reverse\\n}\\n\\n.apexcharts-tooltip-box>div {\\n  margin: 4px 0\\n}\\n\\n.apexcharts-tooltip-box span.value {\\n  font-weight: 700\\n}\\n\\n.apexcharts-tooltip-rangebar {\\n  padding: 5px 8px\\n}\\n\\n.apexcharts-tooltip-rangebar .category {\\n  font-weight: 600;\\n  color: #777\\n}\\n\\n.apexcharts-tooltip-rangebar .series-name {\\n  font-weight: 700;\\n  display: block;\\n  margin-bottom: 5px\\n}\\n\\n.apexcharts-xaxistooltip,.apexcharts-yaxistooltip {\\n  opacity: 0;\\n  pointer-events: none;\\n  color: #373d3f;\\n  font-size: 13px;\\n  text-align: center;\\n  border-radius: 2px;\\n  position: absolute;\\n  z-index: 10;\\n  background: #eceff1;\\n  border: 1px solid #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip {\\n  padding: 9px 10px;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-theme-dark {\\n  background: rgba(0,0,0,.7);\\n  border: 1px solid rgba(0,0,0,.5);\\n  color: #fff\\n}\\n\\n.apexcharts-xaxistooltip:after,.apexcharts-xaxistooltip:before {\\n  left: 50%;\\n  border: solid transparent;\\n  content: \" \";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n.apexcharts-xaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-left: -6px\\n}\\n\\n.apexcharts-xaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 7px;\\n  margin-left: -7px\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after,.apexcharts-xaxistooltip-bottom:before {\\n  bottom: 100%\\n}\\n\\n.apexcharts-xaxistooltip-top:after,.apexcharts-xaxistooltip-top:before {\\n  top: 100%\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after {\\n  border-bottom-color: #eceff1\\n}\\n\\n.apexcharts-xaxistooltip-bottom:before {\\n  border-bottom-color: #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {\\n  border-bottom-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-xaxistooltip-top:after {\\n  border-top-color: #eceff1\\n}\\n\\n.apexcharts-xaxistooltip-top:before {\\n  border-top-color: #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {\\n  border-top-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-yaxistooltip {\\n  padding: 4px 10px\\n}\\n\\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\\n  background: rgba(0,0,0,.7);\\n  border: 1px solid rgba(0,0,0,.5);\\n  color: #fff\\n}\\n\\n.apexcharts-yaxistooltip:after,.apexcharts-yaxistooltip:before {\\n  top: 50%;\\n  border: solid transparent;\\n  content: \" \";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n.apexcharts-yaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-top: -6px\\n}\\n\\n.apexcharts-yaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 7px;\\n  margin-top: -7px\\n}\\n\\n.apexcharts-yaxistooltip-left:after,.apexcharts-yaxistooltip-left:before {\\n  left: 100%\\n}\\n\\n.apexcharts-yaxistooltip-right:after,.apexcharts-yaxistooltip-right:before {\\n  right: 100%\\n}\\n\\n.apexcharts-yaxistooltip-left:after {\\n  border-left-color: #eceff1\\n}\\n\\n.apexcharts-yaxistooltip-left:before {\\n  border-left-color: #90a4ae\\n}\\n\\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {\\n  border-left-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-yaxistooltip-right:after {\\n  border-right-color: #eceff1\\n}\\n\\n.apexcharts-yaxistooltip-right:before {\\n  border-right-color: #90a4ae\\n}\\n\\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {\\n  border-right-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-yaxistooltip.apexcharts-active {\\n  opacity: 1\\n}\\n\\n.apexcharts-yaxistooltip-hidden {\\n  display: none\\n}\\n\\n.apexcharts-xcrosshairs,.apexcharts-ycrosshairs {\\n  pointer-events: none;\\n  opacity: 0;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xcrosshairs.apexcharts-active,.apexcharts-ycrosshairs.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-ycrosshairs-hidden {\\n  opacity: 0\\n}\\n\\n.apexcharts-selection-rect {\\n  cursor: move\\n}\\n\\n.svg_select_boundingRect,.svg_select_points_rot {\\n  pointer-events: none;\\n  opacity: 0;\\n  visibility: hidden\\n}\\n\\n.apexcharts-selection-rect+g .svg_select_boundingRect,.apexcharts-selection-rect+g .svg_select_points_rot {\\n  opacity: 0;\\n  visibility: hidden\\n}\\n\\n.apexcharts-selection-rect+g .svg_select_points_l,.apexcharts-selection-rect+g .svg_select_points_r {\\n  cursor: ew-resize;\\n  opacity: 1;\\n  visibility: visible\\n}\\n\\n.svg_select_points {\\n  fill: #efefef;\\n  stroke: #333;\\n  rx: 2\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-zoom {\\n  cursor: crosshair\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\\n  cursor: move\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-pan-icon,.apexcharts-reset-icon,.apexcharts-selection-icon,.apexcharts-toolbar-custom-icon,.apexcharts-zoom-icon,.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {\\n  cursor: pointer;\\n  width: 20px;\\n  height: 20px;\\n  line-height: 24px;\\n  color: #6e8192;\\n  text-align: center\\n}\\n\\n.apexcharts-menu-icon svg,.apexcharts-reset-icon svg,.apexcharts-zoom-icon svg,.apexcharts-zoomin-icon svg,.apexcharts-zoomout-icon svg {\\n  fill: #6e8192\\n}\\n\\n.apexcharts-selection-icon svg {\\n  fill: #444;\\n  transform: scale(.76)\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-icon svg,.apexcharts-theme-dark .apexcharts-pan-icon svg,.apexcharts-theme-dark .apexcharts-reset-icon svg,.apexcharts-theme-dark .apexcharts-selection-icon svg,.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg,.apexcharts-theme-dark .apexcharts-zoom-icon svg,.apexcharts-theme-dark .apexcharts-zoomin-icon svg,.apexcharts-theme-dark .apexcharts-zoomout-icon svg {\\n  fill: #f3f4f5\\n}\\n\\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg {\\n  fill: #008ffb\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-icon:hover svg,.apexcharts-theme-light .apexcharts-reset-icon:hover svg,.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg {\\n  fill: #333\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-selection-icon {\\n  position: relative\\n}\\n\\n.apexcharts-reset-icon {\\n  margin-left: 5px\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-reset-icon,.apexcharts-zoom-icon {\\n  transform: scale(.85)\\n}\\n\\n.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {\\n  transform: scale(.7)\\n}\\n\\n.apexcharts-zoomout-icon {\\n  margin-right: 3px\\n}\\n\\n.apexcharts-pan-icon {\\n  transform: scale(.62);\\n  position: relative;\\n  left: 1px;\\n  top: 0\\n}\\n\\n.apexcharts-pan-icon svg {\\n  fill: #fff;\\n  stroke: #6e8192;\\n  stroke-width: 2\\n}\\n\\n.apexcharts-pan-icon.apexcharts-selected svg {\\n  stroke: #008ffb\\n}\\n\\n.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {\\n  stroke: #333\\n}\\n\\n.apexcharts-toolbar {\\n  position: absolute;\\n  z-index: 11;\\n  max-width: 176px;\\n  text-align: right;\\n  border-radius: 3px;\\n  padding: 0 6px 2px;\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center\\n}\\n\\n.apexcharts-menu {\\n  background: #fff;\\n  position: absolute;\\n  top: 100%;\\n  border: 1px solid #ddd;\\n  border-radius: 3px;\\n  padding: 3px;\\n  right: 10px;\\n  opacity: 0;\\n  min-width: 110px;\\n  transition: .15s ease all;\\n  pointer-events: none\\n}\\n\\n.apexcharts-menu.apexcharts-menu-open {\\n  opacity: 1;\\n  pointer-events: all;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-menu-item {\\n  padding: 6px 7px;\\n  font-size: 12px;\\n  cursor: pointer\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-item:hover {\\n  background: #eee\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu {\\n  background: rgba(0,0,0,.7);\\n  color: #fff\\n}\\n\\n@media screen and (min-width:768px) {\\n  .apexcharts-canvas:hover .apexcharts-toolbar {\\n      opacity: 1\\n  }\\n}\\n\\n.apexcharts-canvas .apexcharts-element-hidden,.apexcharts-datalabel.apexcharts-element-hidden,.apexcharts-hide .apexcharts-series-points {\\n  opacity: 0\\n}\\n\\n.apexcharts-hidden-element-shown {\\n  opacity: 1;\\n  transition: 0.25s ease all;\\n}\\n.apexcharts-datalabel,.apexcharts-datalabel-label,.apexcharts-datalabel-value,.apexcharts-datalabels,.apexcharts-pie-label {\\n  cursor: default;\\n  pointer-events: none\\n}\\n\\n.apexcharts-pie-label-delay {\\n  opacity: 0;\\n  animation-name: opaque;\\n  animation-duration: .3s;\\n  animation-fill-mode: forwards;\\n  animation-timing-function: ease\\n}\\n\\n.apexcharts-annotation-rect,.apexcharts-area-series .apexcharts-area,.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-gridline,.apexcharts-line,.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-point-annotation-label,.apexcharts-radar-series path,.apexcharts-radar-series polygon,.apexcharts-toolbar svg,.apexcharts-tooltip .apexcharts-marker,.apexcharts-xaxis-annotation-label,.apexcharts-yaxis-annotation-label,.apexcharts-zoom-rect {\\n  pointer-events: none\\n}\\n\\n.apexcharts-marker {\\n  transition: .15s ease all\\n}\\n\\n.resize-triggers {\\n  animation: 1ms resizeanim;\\n  visibility: hidden;\\n  opacity: 0;\\n  height: 100%;\\n  width: 100%;\\n  overflow: hidden\\n}\\n\\n.contract-trigger:before,.resize-triggers,.resize-triggers>div {\\n  content: \" \";\\n  display: block;\\n  position: absolute;\\n  top: 0;\\n  left: 0\\n}\\n\\n.resize-triggers>div {\\n  height: 100%;\\n  width: 100%;\\n  background: #eee;\\n  overflow: auto\\n}\\n\\n.contract-trigger:before {\\n  overflow: hidden;\\n  width: 200%;\\n  height: 200%\\n}\\n',\"\"]),t.exports=e},274:(t,e,i)=>{var a=i(379),r=i(539);\"string\"==typeof(r=r.__esModule?r.default:r)&&(r=[[t.id,r,\"\"]]);var s=(a(t.id,r,{insert:\"head\",singleton:!1}),r.locals?r.locals:{});t.exports=s},379:(t,e,i)=>{\"use strict\";var a,r=function(){var t={};return function(e){if(void 0===t[e]){var i=document.querySelector(e);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(t){i=null}t[e]=i}return t[e]}}(),s={};function n(t,e,i){for(var a=0;a<e.length;a++){var r={css:e[a][1],media:e[a][2],sourceMap:e[a][3]};s[t][a]?s[t][a](r):s[t].push(f(r,i))}}function o(t){var e=document.createElement(\"style\"),a=t.attributes||{};if(void 0===a.nonce){var s=i.nc;s&&(a.nonce=s)}if(Object.keys(a).forEach((function(t){e.setAttribute(t,a[t])})),\"function\"==typeof t.insert)t.insert(e);else{var n=r(t.insert||\"head\");if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");n.appendChild(e)}return e}var l,c=(l=[],function(t,e){return l[t]=e,l.filter(Boolean).join(\"\\n\")});function h(t,e,i,a){var r=i?\"\":a.css;if(t.styleSheet)t.styleSheet.cssText=c(e,r);else{var s=document.createTextNode(r),n=t.childNodes;n[e]&&t.removeChild(n[e]),n.length?t.insertBefore(s,n[e]):t.appendChild(s)}}function d(t,e,i){var a=i.css,r=i.media,s=i.sourceMap;if(r?t.setAttribute(\"media\",r):t.removeAttribute(\"media\"),s&&btoa&&(a+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s)))),\" */\")),t.styleSheet)t.styleSheet.cssText=a;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(a))}}var u=null,g=0;function f(t,e){var i,a,r;if(e.singleton){var s=g++;i=u||(u=o(e)),a=h.bind(null,i,s,!1),r=h.bind(null,i,s,!0)}else i=o(e),a=d.bind(null,i,e),r=function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(i)};return a(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;a(t=e)}else r()}}t.exports=function(t,e,i){return(i=i||{}).singleton||\"boolean\"==typeof i.singleton||(i.singleton=(void 0===a&&(a=Boolean(window&&document&&document.all&&!window.atob)),a)),t=i.base?t+i.base:t,e=e||[],s[t]||(s[t]=[]),n(t,e,i),function(e){if(e=e||[],\"[object Array]\"===Object.prototype.toString.call(e)){s[t]||(s[t]=[]),n(t,e,i);for(var a=e.length;a<s[t].length;a++)s[t][a]();s[t].length=e.length,0===s[t].length&&delete s[t]}}}},149:t=>{t.exports='<svg fill=\"#000000\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\"></path><path d=\"M0 0h24v24H0z\" fill=\"none\"></path></svg>'},355:t=>{t.exports='<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"></path><path d=\"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z\"></path></svg>'},686:t=>{t.exports='<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"></path><path d=\"M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"></path></svg>'},798:t=>{t.exports='<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\" viewBox=\"0 0 24 24\"><defs><path d=\"M0 0h24v24H0z\" id=\"a\"></path></defs><clipPath id=\"b\"><use overflow=\"visible\" xlink:href=\"#a\"></use></clipPath><path clip-path=\"url(#b)\" d=\"M23 5.5V20c0 2.2-1.8 4-4 4h-7.3c-1.08 0-2.1-.43-2.85-1.19L1 14.83s1.26-1.23 1.3-1.25c.22-.19.49-.29.79-.29.22 0 .42.06.6.16.04.01 4.31 2.46 4.31 2.46V4c0-.83.67-1.5 1.5-1.5S11 3.17 11 4v7h1V1.5c0-.83.67-1.5 1.5-1.5S15 .67 15 1.5V11h1V2.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V11h1V5.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5z\"></path></svg>'},323:t=>{t.exports='<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"></path><path d=\"M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"></path></svg>'},618:t=>{t.exports='<svg fill=\"#6E8192\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0h24v24H0z\" fill=\"none\"></path><path d=\"M3 5h2V3c-1.1 0-2 .9-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2c0-1.1-.9-2-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2z\"></path></svg>'},688:t=>{t.exports='<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#000000\" viewBox=\"0 0 24 24\"><path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"></path><path d=\"M0 0h24v24H0V0z\" fill=\"none\"></path><path d=\"M12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z\"></path></svg>'}},e={};function i(a){var r=e[a];if(void 0!==r)return r.exports;var s=e[a]={id:a,exports:{}};return t[a].call(s.exports,s,s.exports,i),s.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var a in e)i.o(e,a)&&!i.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},i.nc=void 0;var a={};return(()=>{\"use strict\";function t(e){return t=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},t(e)}function e(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}i.r(a),i.d(a,{default:()=>Xa});const r=function(){function i(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,i)}var a,r,s;return a=i,s=[{key:\"bind\",value:function(t,e){return function(){return t.apply(e,arguments)}}},{key:\"isObject\",value:function(e){return e&&\"object\"===t(e)&&!Array.isArray(e)&&null!=e}},{key:\"is\",value:function(t,e){return Object.prototype.toString.call(e)===\"[object \"+t+\"]\"}},{key:\"listToArray\",value:function(t){var e,i=[];for(e=0;e<t.length;e++)i[e]=t[e];return i}},{key:\"extend\",value:function(t,e){var i=this;\"function\"!=typeof Object.assign&&(Object.assign=function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var a=arguments[i];if(null!=a)for(var r in a)a.hasOwnProperty(r)&&(e[r]=a[r])}return e});var a=Object.assign({},t);return this.isObject(t)&&this.isObject(e)&&Object.keys(e).forEach((function(r){i.isObject(e[r])&&r in t?a[r]=i.extend(t[r],e[r]):Object.assign(a,function(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}({},r,e[r]))})),a}},{key:\"extendArray\",value:function(t,e){var a=[];return t.map((function(t){a.push(i.extend(e,t))})),a}},{key:\"monthMod\",value:function(t){return t%12}},{key:\"clone\",value:function(e){if(i.is(\"Array\",e)){for(var a=[],r=0;r<e.length;r++)a[r]=this.clone(e[r]);return a}if(i.is(\"Null\",e))return null;if(i.is(\"Date\",e))return e;if(\"object\"===t(e)){var s={};for(var n in e)e.hasOwnProperty(n)&&(s[n]=this.clone(e[n]));return s}return e}},{key:\"log10\",value:function(t){return Math.log(t)/Math.LN10}},{key:\"roundToBase10\",value:function(t){return Math.pow(10,Math.floor(Math.log10(t)))}},{key:\"roundToBase\",value:function(t,e){return Math.pow(e,Math.floor(Math.log(t)/Math.log(e)))}},{key:\"parseNumber\",value:function(t){return null===t?t:parseFloat(t)}},{key:\"randomId\",value:function(){return(Math.random()+1).toString(36).substring(4)}},{key:\"noExponents\",value:function(t){var e=String(t).split(/[eE]/);if(1===e.length)return e[0];var i=\"\",a=t<0?\"-\":\"\",r=e[0].replace(\".\",\"\"),s=Number(e[1])+1;if(s<0){for(i=a+\"0.\";s++;)i+=\"0\";return i+r.replace(/^-/,\"\")}for(s-=r.length;s--;)i+=\"0\";return r+i}},{key:\"getDimensions\",value:function(t){var e=getComputedStyle(t,null),i=t.clientHeight,a=t.clientWidth;return i-=parseFloat(e.paddingTop)+parseFloat(e.paddingBottom),[a-=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight),i]}},{key:\"getBoundingClientRect\",value:function(t){var e=t.getBoundingClientRect();return{top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:t.clientWidth,height:t.clientHeight,x:e.left,y:e.top}}},{key:\"getLargestStringFromArr\",value:function(t){return t.reduce((function(t,e){return Array.isArray(e)&&(e=e.reduce((function(t,e){return t.length>e.length?t:e}))),t.length>e.length?t:e}),0)}},{key:\"hexToRgba\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"#999999\",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.6;\"#\"!==t.substring(0,1)&&(t=\"#999999\");var i=t.replace(\"#\",\"\");i=i.match(new RegExp(\"(.{\"+i.length/3+\"})\",\"g\"));for(var a=0;a<i.length;a++)i[a]=parseInt(1===i[a].length?i[a]+i[a]:i[a],16);return void 0!==e&&i.push(e),\"rgba(\"+i.join(\",\")+\")\"}},{key:\"getOpacityFromRGBA\",value:function(t){return parseFloat(t.replace(/^.*,(.+)\\)/,\"$1\"))}},{key:\"rgb2hex\",value:function(t){return(t=t.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i))&&4===t.length?\"#\"+(\"0\"+parseInt(t[1],10).toString(16)).slice(-2)+(\"0\"+parseInt(t[2],10).toString(16)).slice(-2)+(\"0\"+parseInt(t[3],10).toString(16)).slice(-2):\"\"}},{key:\"isColorHex\",value:function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)/i.test(t)}},{key:\"getPolygonPos\",value:function(t,e){for(var i=[],a=2*Math.PI/e,r=0;r<e;r++){var s={};s.x=t*Math.sin(r*a),s.y=-t*Math.cos(r*a),i.push(s)}return i}},{key:\"polarToCartesian\",value:function(t,e,i,a){var r=(a-90)*Math.PI/180;return{x:t+i*Math.cos(r),y:e+i*Math.sin(r)}}},{key:\"escapeString\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"x\",i=t.toString().slice();return i.replace(/[` ~!@#$%^&*()|+\\=?;:'\",.<>{}[\\]\\\\/]/gi,e)}},{key:\"negToZero\",value:function(t){return t<0?0:t}},{key:\"moveIndexInArray\",value:function(t,e,i){if(i>=t.length)for(var a=i-t.length+1;a--;)t.push(void 0);return t.splice(i,0,t.splice(e,1)[0]),t}},{key:\"extractNumber\",value:function(t){return parseFloat(t.replace(/[^\\d.]*/g,\"\"))}},{key:\"findAncestor\",value:function(t,e){for(;(t=t.parentElement)&&!t.classList.contains(e););return t}},{key:\"setELstyles\",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t.style.key=e[i])}},{key:\"isNumber\",value:function(t){return!isNaN(t)&&parseFloat(Number(t))===t&&!isNaN(parseInt(t,10))}},{key:\"isFloat\",value:function(t){return Number(t)===t&&t%1!=0}},{key:\"isSafari\",value:function(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}},{key:\"isFirefox\",value:function(){return navigator.userAgent.toLowerCase().indexOf(\"firefox\")>-1}},{key:\"isIE11\",value:function(){if(-1!==window.navigator.userAgent.indexOf(\"MSIE\")||window.navigator.appVersion.indexOf(\"Trident/\")>-1)return!0}},{key:\"isIE\",value:function(){var t=window.navigator.userAgent,e=t.indexOf(\"MSIE \");if(e>0)return parseInt(t.substring(e+5,t.indexOf(\".\",e)),10);if(t.indexOf(\"Trident/\")>0){var i=t.indexOf(\"rv:\");return parseInt(t.substring(i+3,t.indexOf(\".\",i)),10)}var a=t.indexOf(\"Edge/\");return a>0&&parseInt(t.substring(a+5,t.indexOf(\".\",a)),10)}}],(r=[{key:\"shadeRGBColor\",value:function(t,e){var i=e.split(\",\"),a=t<0?0:255,r=t<0?-1*t:t,s=parseInt(i[0].slice(4),10),n=parseInt(i[1],10),o=parseInt(i[2],10);return\"rgb(\"+(Math.round((a-s)*r)+s)+\",\"+(Math.round((a-n)*r)+n)+\",\"+(Math.round((a-o)*r)+o)+\")\"}},{key:\"shadeHexColor\",value:function(t,e){var i=parseInt(e.slice(1),16),a=t<0?0:255,r=t<0?-1*t:t,s=i>>16,n=i>>8&255,o=255&i;return\"#\"+(16777216+65536*(Math.round((a-s)*r)+s)+256*(Math.round((a-n)*r)+n)+(Math.round((a-o)*r)+o)).toString(16).slice(1)}},{key:\"shadeColor\",value:function(t,e){return i.isColorHex(e)?this.shadeHexColor(t,e):this.shadeRGBColor(t,e)}}])&&e(a.prototype,r),s&&e(a,s),i}();function s(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var n=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.setEasingFunctions()}var e,i;return e=t,(i=[{key:\"setEasingFunctions\",value:function(){var t;if(!this.w.globals.easing){switch(this.w.config.chart.animations.easing){case\"linear\":t=\"-\";break;case\"easein\":t=\"<\";break;case\"easeout\":t=\">\";break;case\"easeinout\":default:t=\"<>\";break;case\"swing\":t=function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1};break;case\"bounce\":t=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375};break;case\"elastic\":t=function(t){return t===!!t?t:Math.pow(2,-10*t)*Math.sin((t-.075)*(2*Math.PI)/.3)+1}}this.w.globals.easing=t}}},{key:\"animateLine\",value:function(t,e,i,a){t.attr(e).animate(a).attr(i)}},{key:\"animateMarker\",value:function(t,e,i,a,r,s){e||(e=0),t.attr({r:e,width:e,height:e}).animate(a,r).attr({r:i,width:i.width,height:i.height}).afterAll((function(){s()}))}},{key:\"animateCircle\",value:function(t,e,i,a,r){t.attr({r:e.r,cx:e.cx,cy:e.cy}).animate(a,r).attr({r:i.r,cx:i.cx,cy:i.cy})}},{key:\"animateRect\",value:function(t,e,i,a,r){t.attr(e).animate(a).attr(i).afterAll((function(){return r()}))}},{key:\"animatePathsGradually\",value:function(t){var e=t.el,i=t.realIndex,a=t.j,r=t.fill,s=t.pathFrom,n=t.pathTo,o=t.speed,l=t.delay,c=this.w,h=0;c.config.chart.animations.animateGradually.enabled&&(h=c.config.chart.animations.animateGradually.delay),c.config.chart.animations.dynamicAnimation.enabled&&c.globals.dataChanged&&\"bar\"!==c.config.chart.type&&(h=0),this.morphSVG(e,i,a,\"line\"!==c.config.chart.type||c.globals.comboCharts?r:\"stroke\",s,n,o,l*h)}},{key:\"showDelayedElements\",value:function(){this.w.globals.delayedElements.forEach((function(t){var e=t.el;e.classList.remove(\"apexcharts-element-hidden\"),e.classList.add(\"apexcharts-hidden-element-shown\")}))}},{key:\"animationCompleted\",value:function(t){var e=this.w;e.globals.animationEnded||(e.globals.animationEnded=!0,this.showDelayedElements(),\"function\"==typeof e.config.chart.events.animationEnd&&e.config.chart.events.animationEnd(this.ctx,{el:t,w:e}))}},{key:\"morphSVG\",value:function(t,e,i,a,s,n,o,l){var c=this,h=this.w;s||(s=t.attr(\"pathFrom\")),n||(n=t.attr(\"pathTo\"));var d=function(t){return\"radar\"===h.config.chart.type&&(o=1),\"M 0 \".concat(h.globals.gridHeight)};(!s||s.indexOf(\"undefined\")>-1||s.indexOf(\"NaN\")>-1)&&(s=d()),(!n||n.indexOf(\"undefined\")>-1||n.indexOf(\"NaN\")>-1)&&(n=d()),h.globals.shouldAnimate||(o=1),t.plot(s).animate(1,h.globals.easing,l).plot(s).animate(o,h.globals.easing,l).plot(n).afterAll((function(){r.isNumber(i)?i===h.globals.series[h.globals.maxValsInArrayIndex].length-2&&h.globals.shouldAnimate&&c.animationCompleted(t):\"none\"!==a&&h.globals.shouldAnimate&&(!h.globals.comboCharts&&e===h.globals.series.length-1||h.globals.comboCharts)&&c.animationCompleted(t),c.showDelayedElements()}))}}])&&s(e.prototype,i),t}();function o(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const l=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,i=[{key:\"getDefaultFilter\",value:function(t,e){var i=this.w;t.unfilter(!0),(new window.SVG.Filter).size(\"120%\",\"180%\",\"-5%\",\"-40%\"),\"none\"!==i.config.states.normal.filter?this.applyFilter(t,e,i.config.states.normal.filter.type,i.config.states.normal.filter.value):i.config.chart.dropShadow.enabled&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:\"addNormalFilter\",value:function(t,e){var i=this.w;i.config.chart.dropShadow.enabled&&!t.node.classList.contains(\"apexcharts-marker\")&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:\"addLightenFilter\",value:function(t,e,i){var a=this,r=this.w,s=i.intensity;t.unfilter(!0),new window.SVG.Filter,t.filter((function(t){var i=r.config.chart.dropShadow;(i.enabled?a.addShadow(t,e,i):t).componentTransfer({rgb:{type:\"linear\",slope:1.5,intercept:s}})})),t.filterer.node.setAttribute(\"filterUnits\",\"userSpaceOnUse\"),this._scaleFilterSize(t.filterer.node)}},{key:\"addDarkenFilter\",value:function(t,e,i){var a=this,r=this.w,s=i.intensity;t.unfilter(!0),new window.SVG.Filter,t.filter((function(t){var i=r.config.chart.dropShadow;(i.enabled?a.addShadow(t,e,i):t).componentTransfer({rgb:{type:\"linear\",slope:s}})})),t.filterer.node.setAttribute(\"filterUnits\",\"userSpaceOnUse\"),this._scaleFilterSize(t.filterer.node)}},{key:\"applyFilter\",value:function(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.5;switch(i){case\"none\":this.addNormalFilter(t,e);break;case\"lighten\":this.addLightenFilter(t,e,{intensity:a});break;case\"darken\":this.addDarkenFilter(t,e,{intensity:a})}}},{key:\"addShadow\",value:function(t,e,i){var a=i.blur,r=i.top,s=i.left,n=i.color,o=i.opacity,l=t.flood(Array.isArray(n)?n[e]:n,o).composite(t.sourceAlpha,\"in\").offset(s,r).gaussianBlur(a).merge(t.source);return t.blend(t.source,l)}},{key:\"dropShadow\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=e.top,s=e.left,n=e.blur,o=e.color,l=e.opacity,c=e.noUserSpaceOnUse,h=this.w;return t.unfilter(!0),r.isIE()&&\"radialBar\"===h.config.chart.type||(o=Array.isArray(o)?o[i]:o,t.filter((function(t){var e;e=r.isSafari()||r.isFirefox()||r.isIE()?t.flood(o,l).composite(t.sourceAlpha,\"in\").offset(s,a).gaussianBlur(n):t.flood(o,l).composite(t.sourceAlpha,\"in\").offset(s,a).gaussianBlur(n).merge(t.source),t.blend(t.source,e)})),c||t.filterer.node.setAttribute(\"filterUnits\",\"userSpaceOnUse\"),this._scaleFilterSize(t.filterer.node)),t}},{key:\"setSelectionFilter\",value:function(t,e,i){var a=this.w;if(void 0!==a.globals.selectedDataPoints[e]&&a.globals.selectedDataPoints[e].indexOf(i)>-1){t.node.setAttribute(\"selected\",!0);var r=a.config.states.active.filter;\"none\"!==r&&this.applyFilter(t,e,r.type,r.value)}}},{key:\"_scaleFilterSize\",value:function(t){!function(e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}({width:\"200%\",height:\"200%\",x:\"-50%\",y:\"-50%\"})}}],i&&o(e.prototype,i),t}();function c(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function h(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?c(Object(i),!0).forEach((function(e){d(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):c(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function d(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function u(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const g=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i,a;return e=t,i=[{key:\"roundPathCorners\",value:function(t,e){function i(t,e,i){var r=e.x-t.x,s=e.y-t.y,n=Math.sqrt(r*r+s*s);return a(t,e,Math.min(1,i/n))}function a(t,e,i){return{x:t.x+(e.x-t.x)*i,y:t.y+(e.y-t.y)*i}}function r(t,e){t.length>2&&(t[t.length-2]=e.x,t[t.length-1]=e.y)}function s(t){return{x:parseFloat(t[t.length-2]),y:parseFloat(t[t.length-1])}}t.indexOf(\"NaN\")>-1&&(t=\"\");var n=t.split(/[,\\s]/).reduce((function(t,e){var i=e.match(\"([a-zA-Z])(.+)\");return i?(t.push(i[1]),t.push(i[2])):t.push(e),t}),[]).reduce((function(t,e){return parseFloat(e)==e&&t.length?t[t.length-1].push(e):t.push([e]),t}),[]),o=[];if(n.length>1){var l=s(n[0]),c=null;\"Z\"==n[n.length-1][0]&&n[0].length>2&&(c=[\"L\",l.x,l.y],n[n.length-1]=c),o.push(n[0]);for(var h=1;h<n.length;h++){var d=o[o.length-1],u=n[h],g=u==c?n[1]:n[h+1];if(g&&d&&d.length>2&&\"L\"==u[0]&&g.length>2&&\"L\"==g[0]){var f,p,x=s(d),b=s(u),v=s(g);f=i(b,x,e),p=i(b,v,e),r(u,f),u.origPoint=b,o.push(u);var m=a(f,b,.5),y=a(b,p,.5),w=[\"C\",m.x,m.y,y.x,y.y,p.x,p.y];w.origPoint=b,o.push(w)}else o.push(u)}if(c){var k=s(o[o.length-1]);o.push([\"Z\"]),r(o[0],k)}}else o=n;return o.reduce((function(t,e){return t+e.join(\" \")+\" \"}),\"\")}},{key:\"drawLine\",value:function(t,e,i,a){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:\"#a8a8a8\",s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,n=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:\"butt\";return this.w.globals.dom.Paper.line().attr({x1:t,y1:e,x2:i,y2:a,stroke:r,\"stroke-dasharray\":s,\"stroke-width\":n,\"stroke-linecap\":o})}},{key:\"drawRect\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"#fefefe\",n=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,l=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,c=arguments.length>9&&void 0!==arguments[9]?arguments[9]:0,h=this.w.globals.dom.Paper.rect();return h.attr({x:t,y:e,width:i>0?i:0,height:a>0?a:0,rx:r,ry:r,opacity:n,\"stroke-width\":null!==o?o:0,stroke:null!==l?l:\"none\",\"stroke-dasharray\":c}),h.node.setAttribute(\"fill\",s),h}},{key:\"drawPolygon\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"#e1e1e1\",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"none\";return this.w.globals.dom.Paper.polygon(t).attr({fill:a,stroke:e,\"stroke-width\":i})}},{key:\"drawCircle\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;t<0&&(t=0);var i=this.w.globals.dom.Paper.circle(2*t);return null!==e&&i.attr(e),i}},{key:\"drawPath\",value:function(t){var e=t.d,i=void 0===e?\"\":e,a=t.stroke,r=void 0===a?\"#a8a8a8\":a,s=t.strokeWidth,n=void 0===s?1:s,o=t.fill,l=t.fillOpacity,c=void 0===l?1:l,h=t.strokeOpacity,d=void 0===h?1:h,u=t.classes,g=t.strokeLinecap,f=void 0===g?null:g,p=t.strokeDashArray,x=void 0===p?0:p,b=this.w;return null===f&&(f=b.config.stroke.lineCap),(i.indexOf(\"undefined\")>-1||i.indexOf(\"NaN\")>-1)&&(i=\"M 0 \".concat(b.globals.gridHeight)),b.globals.dom.Paper.path(i).attr({fill:o,\"fill-opacity\":c,stroke:r,\"stroke-opacity\":d,\"stroke-linecap\":f,\"stroke-width\":n,\"stroke-dasharray\":x,class:u})}},{key:\"group\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w.globals.dom.Paper.group();return null!==t&&e.attr(t),e}},{key:\"move\",value:function(t,e){return[\"M\",t,e].join(\" \")}},{key:\"line\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=null;return null===i?a=[\" L\",t,e].join(\" \"):\"H\"===i?a=[\" H\",t].join(\" \"):\"V\"===i&&(a=[\" V\",e].join(\" \")),a}},{key:\"curve\",value:function(t,e,i,a,r,s){return[\"C\",t,e,i,a,r,s].join(\" \")}},{key:\"quadraticCurve\",value:function(t,e,i,a){return[\"Q\",t,e,i,a].join(\" \")}},{key:\"arc\",value:function(t,e,i,a,r,s,n){var o=\"A\";return arguments.length>7&&void 0!==arguments[7]&&arguments[7]&&(o=\"a\"),[o,t,e,i,a,r,s,n].join(\" \")}},{key:\"renderPaths\",value:function(t){var e,i=t.j,a=t.realIndex,r=t.pathFrom,s=t.pathTo,o=t.stroke,c=t.strokeWidth,d=t.strokeLinecap,u=t.fill,g=t.animationDelay,f=t.initialSpeed,p=t.dataChangeSpeed,x=t.className,b=t.shouldClipToGrid,v=void 0===b||b,m=t.bindEventsOnPaths,y=void 0===m||m,w=t.drawShadow,k=void 0===w||w,A=this.w,S=new l(this.ctx),C=new n(this.ctx),P=this.w.config.chart.animations.enabled,L=P&&this.w.config.chart.animations.dynamicAnimation.enabled,O=!!(P&&!A.globals.resized||L&&A.globals.dataChanged&&A.globals.shouldAnimate);O?e=r:(e=s,A.globals.animationEnded=!0);var T,I=A.config.stroke.dashArray;T=Array.isArray(I)?I[a]:A.config.stroke.dashArray;var E=this.drawPath({d:e,stroke:o,strokeWidth:c,fill:u,fillOpacity:1,classes:x,strokeLinecap:d,strokeDashArray:T});if(E.attr(\"index\",a),v&&E.attr({\"clip-path\":\"url(#gridRectMask\".concat(A.globals.cuid,\")\")}),\"none\"!==A.config.states.normal.filter.type)S.getDefaultFilter(E,a);else if(A.config.chart.dropShadow.enabled&&k&&(!A.config.chart.dropShadow.enabledOnSeries||A.config.chart.dropShadow.enabledOnSeries&&-1!==A.config.chart.dropShadow.enabledOnSeries.indexOf(a))){var M=A.config.chart.dropShadow;S.dropShadow(E,M,a)}y&&(E.node.addEventListener(\"mouseenter\",this.pathMouseEnter.bind(this,E)),E.node.addEventListener(\"mouseleave\",this.pathMouseLeave.bind(this,E)),E.node.addEventListener(\"mousedown\",this.pathMouseDown.bind(this,E))),E.attr({pathTo:s,pathFrom:r});var X={el:E,j:i,realIndex:a,pathFrom:r,pathTo:s,fill:u,strokeWidth:c,delay:g};return!P||A.globals.resized||A.globals.dataChanged?!A.globals.resized&&A.globals.dataChanged||C.showDelayedElements():C.animatePathsGradually(h(h({},X),{},{speed:f})),A.globals.dataChanged&&L&&O&&C.animatePathsGradually(h(h({},X),{},{speed:p})),E}},{key:\"drawPattern\",value:function(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"#a8a8a8\",r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;return this.w.globals.dom.Paper.pattern(e,i,(function(s){\"horizontalLines\"===t?s.line(0,0,i,0).stroke({color:a,width:r+1}):\"verticalLines\"===t?s.line(0,0,0,e).stroke({color:a,width:r+1}):\"slantedLines\"===t?s.line(0,0,e,i).stroke({color:a,width:r}):\"squares\"===t?s.rect(e,i).fill(\"none\").stroke({color:a,width:r}):\"circles\"===t&&s.circle(e).fill(\"none\").stroke({color:a,width:r})}))}},{key:\"drawGradient\",value:function(t,e,i,a,s){var n,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,c=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,h=arguments.length>8&&void 0!==arguments[8]?arguments[8]:0,d=this.w;e.length<9&&0===e.indexOf(\"#\")&&(e=r.hexToRgba(e,a)),i.length<9&&0===i.indexOf(\"#\")&&(i=r.hexToRgba(i,s));var u=0,g=1,f=1,p=null;null!==l&&(u=void 0!==l[0]?l[0]/100:0,g=void 0!==l[1]?l[1]/100:1,f=void 0!==l[2]?l[2]/100:1,p=void 0!==l[3]?l[3]/100:null);var x=!(\"donut\"!==d.config.chart.type&&\"pie\"!==d.config.chart.type&&\"polarArea\"!==d.config.chart.type&&\"bubble\"!==d.config.chart.type);if(n=null===c||0===c.length?d.globals.dom.Paper.gradient(x?\"radial\":\"linear\",(function(t){t.at(u,e,a),t.at(g,i,s),t.at(f,i,s),null!==p&&t.at(p,e,a)})):d.globals.dom.Paper.gradient(x?\"radial\":\"linear\",(function(t){(Array.isArray(c[h])?c[h]:c).forEach((function(e){t.at(e.offset/100,e.color,e.opacity)}))})),x){var b=d.globals.gridWidth/2,v=d.globals.gridHeight/2;\"bubble\"!==d.config.chart.type?n.attr({gradientUnits:\"userSpaceOnUse\",cx:b,cy:v,r:o}):n.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else\"vertical\"===t?n.from(0,0).to(0,1):\"diagonal\"===t?n.from(0,0).to(1,1):\"horizontal\"===t?n.from(0,1).to(1,1):\"diagonal2\"===t&&n.from(1,0).to(0,1);return n}},{key:\"getTextBasedOnMaxWidth\",value:function(t){var e=t.text,i=t.maxWidth,a=t.fontSize,r=t.fontFamily,s=this.getTextRects(e,a,r),n=s.width/e.length,o=Math.floor(i/n);return i<s.width?e.slice(0,o-3)+\"...\":e}},{key:\"drawText\",value:function(t){var e=this,i=t.x,a=t.y,r=t.text,s=t.textAnchor,n=t.fontSize,o=t.fontFamily,l=t.fontWeight,c=t.foreColor,d=t.opacity,u=t.maxWidth,g=t.cssClass,f=void 0===g?\"\":g,p=t.isPlainText,x=void 0===p||p,b=this.w;void 0===r&&(r=\"\");var v=r;s||(s=\"start\"),c&&c.length||(c=b.config.chart.foreColor),o=o||b.config.chart.fontFamily,l=l||\"regular\";var m,y={maxWidth:u,fontSize:n=n||\"11px\",fontFamily:o};return Array.isArray(r)?m=b.globals.dom.Paper.text((function(t){for(var i=0;i<r.length;i++)v=r[i],u&&(v=e.getTextBasedOnMaxWidth(h({text:r[i]},y))),0===i?t.tspan(v):t.tspan(v).newLine()})):(u&&(v=this.getTextBasedOnMaxWidth(h({text:r},y))),m=x?b.globals.dom.Paper.plain(r):b.globals.dom.Paper.text((function(t){return t.tspan(v)}))),m.attr({x:i,y:a,\"text-anchor\":s,\"dominant-baseline\":\"auto\",\"font-size\":n,\"font-family\":o,\"font-weight\":l,fill:c,class:\"apexcharts-text \"+f}),m.node.style.fontFamily=o,m.node.style.opacity=d,m}},{key:\"drawMarker\",value:function(t,e,i){t=t||0;var a=i.pSize||0,s=null;if(\"square\"===i.shape||\"rect\"===i.shape){var n=void 0===i.pRadius?a/2:i.pRadius;null!==e&&a||(a=0,n=0);var o=1.2*a+n,l=this.drawRect(o,o,o,o,n);l.attr({x:t-o/2,y:e-o/2,cx:t,cy:e,class:i.class?i.class:\"\",fill:i.pointFillColor,\"fill-opacity\":i.pointFillOpacity?i.pointFillOpacity:1,stroke:i.pointStrokeColor,\"stroke-width\":i.pointStrokeWidth?i.pointStrokeWidth:0,\"stroke-opacity\":i.pointStrokeOpacity?i.pointStrokeOpacity:1}),s=l}else\"circle\"!==i.shape&&i.shape||(r.isNumber(e)||(a=0,e=0),s=this.drawCircle(a,{cx:t,cy:e,class:i.class?i.class:\"\",stroke:i.pointStrokeColor,fill:i.pointFillColor,\"fill-opacity\":i.pointFillOpacity?i.pointFillOpacity:1,\"stroke-width\":i.pointStrokeWidth?i.pointStrokeWidth:0,\"stroke-opacity\":i.pointStrokeOpacity?i.pointStrokeOpacity:1}));return s}},{key:\"pathMouseEnter\",value:function(t,e){var i=this.w,a=new l(this.ctx),r=parseInt(t.node.getAttribute(\"index\"),10),s=parseInt(t.node.getAttribute(\"j\"),10);if(\"function\"==typeof i.config.chart.events.dataPointMouseEnter&&i.config.chart.events.dataPointMouseEnter(e,this.ctx,{seriesIndex:r,dataPointIndex:s,w:i}),this.ctx.events.fireEvent(\"dataPointMouseEnter\",[e,this.ctx,{seriesIndex:r,dataPointIndex:s,w:i}]),(\"none\"===i.config.states.active.filter.type||\"true\"!==t.node.getAttribute(\"selected\"))&&\"none\"!==i.config.states.hover.filter.type&&!i.globals.isTouchDevice){var n=i.config.states.hover.filter;a.applyFilter(t,r,n.type,n.value)}}},{key:\"pathMouseLeave\",value:function(t,e){var i=this.w,a=new l(this.ctx),r=parseInt(t.node.getAttribute(\"index\"),10),s=parseInt(t.node.getAttribute(\"j\"),10);\"function\"==typeof i.config.chart.events.dataPointMouseLeave&&i.config.chart.events.dataPointMouseLeave(e,this.ctx,{seriesIndex:r,dataPointIndex:s,w:i}),this.ctx.events.fireEvent(\"dataPointMouseLeave\",[e,this.ctx,{seriesIndex:r,dataPointIndex:s,w:i}]),\"none\"!==i.config.states.active.filter.type&&\"true\"===t.node.getAttribute(\"selected\")||\"none\"!==i.config.states.hover.filter.type&&a.getDefaultFilter(t,r)}},{key:\"pathMouseDown\",value:function(t,e){var i=this.w,a=new l(this.ctx),r=parseInt(t.node.getAttribute(\"index\"),10),s=parseInt(t.node.getAttribute(\"j\"),10),n=\"false\";if(\"true\"===t.node.getAttribute(\"selected\")){if(t.node.setAttribute(\"selected\",\"false\"),i.globals.selectedDataPoints[r].indexOf(s)>-1){var o=i.globals.selectedDataPoints[r].indexOf(s);i.globals.selectedDataPoints[r].splice(o,1)}}else{if(!i.config.states.active.allowMultipleDataPointsSelection&&i.globals.selectedDataPoints.length>0){i.globals.selectedDataPoints=[];var c=i.globals.dom.Paper.select(\".apexcharts-series path\").members,h=i.globals.dom.Paper.select(\".apexcharts-series circle, .apexcharts-series rect\").members,d=function(t){Array.prototype.forEach.call(t,(function(t){t.node.setAttribute(\"selected\",\"false\"),a.getDefaultFilter(t,r)}))};d(c),d(h)}t.node.setAttribute(\"selected\",\"true\"),n=\"true\",void 0===i.globals.selectedDataPoints[r]&&(i.globals.selectedDataPoints[r]=[]),i.globals.selectedDataPoints[r].push(s)}if(\"true\"===n){var u=i.config.states.active.filter;if(\"none\"!==u)a.applyFilter(t,r,u.type,u.value);else if(\"none\"!==i.config.states.hover.filter&&!i.globals.isTouchDevice){var g=i.config.states.hover.filter;a.applyFilter(t,r,g.type,g.value)}}else\"none\"!==i.config.states.active.filter.type&&(\"none\"===i.config.states.hover.filter.type||i.globals.isTouchDevice?a.getDefaultFilter(t,r):(g=i.config.states.hover.filter,a.applyFilter(t,r,g.type,g.value)));\"function\"==typeof i.config.chart.events.dataPointSelection&&i.config.chart.events.dataPointSelection(e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:r,dataPointIndex:s,w:i}),e&&this.ctx.events.fireEvent(\"dataPointSelection\",[e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:r,dataPointIndex:s,w:i}])}},{key:\"rotateAroundCenter\",value:function(t){var e={};return t&&\"function\"==typeof t.getBBox&&(e=t.getBBox()),{x:e.x+e.width/2,y:e.y+e.height/2}}},{key:\"getTextRects\",value:function(t,e,i,a){var r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=this.w,n=this.drawText({x:-200,y:-200,text:t,textAnchor:\"start\",fontSize:e,fontFamily:i,foreColor:\"#fff\",opacity:0});a&&n.attr(\"transform\",a),s.globals.dom.Paper.add(n);var o=n.bbox();return r||(o=n.node.getBoundingClientRect()),n.remove(),{width:o.width,height:o.height}}},{key:\"placeTextWithEllipsis\",value:function(t,e,i){if(\"function\"==typeof t.getComputedTextLength&&(t.textContent=e,e.length>0&&t.getComputedTextLength()>=i/1.1)){for(var a=e.length-3;a>0;a-=3)if(t.getSubStringLength(0,a)<=i/1.1)return void(t.textContent=e.substring(0,a)+\"...\");t.textContent=\".\"}}}],a=[{key:\"setAttrs\",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}}],i&&u(e.prototype,i),a&&u(e,a),t}();function f(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const p=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i,a;return e=t,i=[{key:\"getStackedSeriesTotals\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=this.w,i=[];if(0===e.globals.series.length)return i;for(var a=0;a<e.globals.series[e.globals.maxValsInArrayIndex].length;a++){for(var r=0,s=0;s<e.globals.series.length;s++)void 0!==e.globals.series[s][a]&&-1===t.indexOf(s)&&(r+=e.globals.series[s][a]);i.push(r)}return i}},{key:\"getSeriesTotalByIndex\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null===t?this.w.config.series.reduce((function(t,e){return t+e}),0):this.w.globals.series[t].reduce((function(t,e){return t+e}),0)}},{key:\"isSeriesNull\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return 0===(null===t?this.w.config.series.filter((function(t){return null!==t})):this.w.config.series[t].data.filter((function(t){return null!==t}))).length}},{key:\"seriesHaveSameValues\",value:function(t){return this.w.globals.series[t].every((function(t,e,i){return t===i[0]}))}},{key:\"getCategoryLabels\",value:function(t){var e=this.w,i=t.slice();return e.config.xaxis.convertedCatToNumeric&&(i=t.map((function(t,i){return e.config.xaxis.labels.formatter(t-e.globals.minX+1)}))),i}},{key:\"getLargestSeries\",value:function(){var t=this.w;t.globals.maxValsInArrayIndex=t.globals.series.map((function(t){return t.length})).indexOf(Math.max.apply(Math,t.globals.series.map((function(t){return t.length}))))}},{key:\"getLargestMarkerSize\",value:function(){var t=this.w,e=0;return t.globals.markers.size.forEach((function(t){e=Math.max(e,t)})),t.config.markers.discrete&&t.config.markers.discrete.length&&t.config.markers.discrete.forEach((function(t){e=Math.max(e,t.size)})),e>0&&(e+=t.config.markers.hover.sizeOffset+1),t.globals.markers.largestSize=e,e}},{key:\"getSeriesTotals\",value:function(){var t=this.w;t.globals.seriesTotals=t.globals.series.map((function(t,e){var i=0;if(Array.isArray(t))for(var a=0;a<t.length;a++)i+=t[a];else i+=t;return i}))}},{key:\"getSeriesTotalsXRange\",value:function(t,e){var i=this.w;return i.globals.series.map((function(a,r){for(var s=0,n=0;n<a.length;n++)i.globals.seriesX[r][n]>t&&i.globals.seriesX[r][n]<e&&(s+=a[n]);return s}))}},{key:\"getPercentSeries\",value:function(){var t=this.w;t.globals.seriesPercent=t.globals.series.map((function(e,i){var a=[];if(Array.isArray(e))for(var r=0;r<e.length;r++){var s=t.globals.stackedSeriesTotals[r],n=0;s&&(n=100*e[r]/s),a.push(n)}else{var o=100*e/t.globals.seriesTotals.reduce((function(t,e){return t+e}),0);a.push(o)}return a}))}},{key:\"getCalculatedRatios\",value:function(){var t,e,i,a,r=this.w.globals,s=[],n=0,o=[],l=.1,c=0;if(r.yRange=[],r.isMultipleYAxis)for(var h=0;h<r.minYArr.length;h++)r.yRange.push(Math.abs(r.minYArr[h]-r.maxYArr[h])),o.push(0);else r.yRange.push(Math.abs(r.minY-r.maxY));r.xRange=Math.abs(r.maxX-r.minX),r.zRange=Math.abs(r.maxZ-r.minZ);for(var d=0;d<r.yRange.length;d++)s.push(r.yRange[d]/r.gridHeight);if(e=r.xRange/r.gridWidth,i=Math.abs(r.initialMaxX-r.initialMinX)/r.gridWidth,t=r.yRange/r.gridWidth,a=r.xRange/r.gridHeight,(n=r.zRange/r.gridHeight*16)||(n=1),r.minY!==Number.MIN_VALUE&&0!==Math.abs(r.minY)&&(r.hasNegs=!0),r.isMultipleYAxis){o=[];for(var u=0;u<s.length;u++)o.push(-r.minYArr[u]/s[u])}else o.push(-r.minY/s[0]),r.minY!==Number.MIN_VALUE&&0!==Math.abs(r.minY)&&(l=-r.minY/t,c=r.minX/e);return{yRatio:s,invertedYRatio:t,zRatio:n,xRatio:e,initialXRatio:i,invertedXRatio:a,baseLineInvertedY:l,baseLineY:o,baseLineX:c}}},{key:\"getLogSeries\",value:function(t){var e=this,i=this.w;return i.globals.seriesLog=t.map((function(t,a){return i.config.yaxis[a]&&i.config.yaxis[a].logarithmic?t.map((function(t){return null===t?null:e.getLogVal(i.config.yaxis[a].logBase,t,a)})):t})),i.globals.invalidLogScale?t:i.globals.seriesLog}},{key:\"getBaseLog\",value:function(t,e){return Math.log(e)/Math.log(t)}},{key:\"getLogVal\",value:function(t,e,i){if(0===e)return 0;var a=this.w,r=0===a.globals.minYArr[i]?-1:this.getBaseLog(t,a.globals.minYArr[i]),s=(0===a.globals.maxYArr[i]?0:this.getBaseLog(t,a.globals.maxYArr[i]))-r;return e<1?e/s:(this.getBaseLog(t,e)-r)/s}},{key:\"getLogYRatios\",value:function(t){var e=this,i=this.w,a=this.w.globals;return a.yLogRatio=t.slice(),a.logYRange=a.yRange.map((function(t,r){if(i.config.yaxis[r]&&e.w.config.yaxis[r].logarithmic){var s,n=-Number.MAX_VALUE,o=Number.MIN_VALUE;return a.seriesLog.forEach((function(t,e){t.forEach((function(t){i.config.yaxis[e]&&i.config.yaxis[e].logarithmic&&(n=Math.max(t,n),o=Math.min(t,o))}))})),s=Math.pow(a.yRange[r],Math.abs(o-n)/a.yRange[r]),a.yLogRatio[r]=s/a.gridHeight,s}})),a.invalidLogScale?t.slice():a.yLogRatio}}],a=[{key:\"checkComboSeries\",value:function(t){var e=!1,i=0,a=0;return t.length&&void 0!==t[0].type&&t.forEach((function(t){\"bar\"!==t.type&&\"column\"!==t.type&&\"candlestick\"!==t.type&&\"boxPlot\"!==t.type||i++,void 0!==t.type&&a++})),a>0&&(e=!0),{comboBarCount:i,comboCharts:e}}},{key:\"extendArrayProps\",value:function(t,e,i){return e.yaxis&&(e=t.extendYAxis(e,i)),e.annotations&&(e.annotations.yaxis&&(e=t.extendYAxisAnnotations(e)),e.annotations.xaxis&&(e=t.extendXAxisAnnotations(e)),e.annotations.points&&(e=t.extendPointAnnotations(e))),e}}],i&&f(e.prototype,i),a&&f(e,a),t}();function x(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var b=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.annoCtx=e}var e,i;return e=t,i=[{key:\"setOrientations\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w;if(\"vertical\"===t.label.orientation){var a=null!==e?e:0,r=i.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='\".concat(a,\"']\"));if(null!==r){var s=r.getBoundingClientRect();r.setAttribute(\"x\",parseFloat(r.getAttribute(\"x\"))-s.height+4),\"top\"===t.label.position?r.setAttribute(\"y\",parseFloat(r.getAttribute(\"y\"))+s.width):r.setAttribute(\"y\",parseFloat(r.getAttribute(\"y\"))-s.width);var n=this.annoCtx.graphics.rotateAroundCenter(r),o=n.x,l=n.y;r.setAttribute(\"transform\",\"rotate(-90 \".concat(o,\" \").concat(l,\")\"))}}}},{key:\"addBackgroundToAnno\",value:function(t,e){var i=this.w;if(!t||void 0===e.label.text||void 0!==e.label.text&&!String(e.label.text).trim())return null;var a=i.globals.dom.baseEl.querySelector(\".apexcharts-grid\").getBoundingClientRect(),r=t.getBoundingClientRect(),s=e.label.style.padding.left,n=e.label.style.padding.right,o=e.label.style.padding.top,l=e.label.style.padding.bottom;\"vertical\"===e.label.orientation&&(o=e.label.style.padding.left,l=e.label.style.padding.right,s=e.label.style.padding.top,n=e.label.style.padding.bottom);var c=r.left-a.left-s,h=r.top-a.top-o,d=this.annoCtx.graphics.drawRect(c-i.globals.barPadForNumericAxis,h,r.width+s+n,r.height+o+l,e.label.borderRadius,e.label.style.background,1,e.label.borderWidth,e.label.borderColor,0);return e.id&&d.node.classList.add(e.id),d}},{key:\"annotationsBackground\",value:function(){var t=this,e=this.w,i=function(i,a,r){var s=e.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(r,\"-annotations .apexcharts-\").concat(r,\"-annotation-label[rel='\").concat(a,\"']\"));if(s){var n=s.parentNode,o=t.addBackgroundToAnno(s,i);o&&(n.insertBefore(o.node,s),i.label.mouseEnter&&o.node.addEventListener(\"mouseenter\",i.label.mouseEnter.bind(t,i)),i.label.mouseLeave&&o.node.addEventListener(\"mouseleave\",i.label.mouseLeave.bind(t,i)),i.label.click&&o.node.addEventListener(\"click\",i.label.click.bind(t,i)))}};e.config.annotations.xaxis.map((function(t,e){i(t,e,\"xaxis\")})),e.config.annotations.yaxis.map((function(t,e){i(t,e,\"yaxis\")})),e.config.annotations.points.map((function(t,e){i(t,e,\"point\")}))}},{key:\"getY1Y2\",value:function(t,e){var i,a=\"y1\"===t?e.y:e.y2,r=this.w;if(this.annoCtx.invertAxis){var s=r.globals.labels.indexOf(a);r.config.xaxis.convertedCatToNumeric&&(s=r.globals.categoryLabels.indexOf(a));var n=r.globals.dom.baseEl.querySelector(\".apexcharts-yaxis-texts-g text:nth-child(\"+(s+1)+\")\");n&&(i=parseFloat(n.getAttribute(\"y\")))}else{var o;o=r.config.yaxis[e.yAxisIndex].logarithmic?(a=new p(this.annoCtx.ctx).getLogVal(a,e.yAxisIndex))/r.globals.yLogRatio[e.yAxisIndex]:(a-r.globals.minYArr[e.yAxisIndex])/(r.globals.yRange[e.yAxisIndex]/r.globals.gridHeight),i=r.globals.gridHeight-o,!e.marker||void 0!==e.y&&null!==e.y||(i=0),r.config.yaxis[e.yAxisIndex]&&r.config.yaxis[e.yAxisIndex].reversed&&(i=o)}return\"string\"==typeof a&&a.indexOf(\"px\")>-1&&(i=parseFloat(a)),i}},{key:\"getX1X2\",value:function(t,e){var i=this.w,a=this.annoCtx.invertAxis?i.globals.minY:i.globals.minX,r=this.annoCtx.invertAxis?i.globals.maxY:i.globals.maxX,s=this.annoCtx.invertAxis?i.globals.yRange[0]:i.globals.xRange,n=(e.x-a)/(s/i.globals.gridWidth);this.annoCtx.inversedReversedAxis&&(n=(r-e.x)/(s/i.globals.gridWidth)),\"category\"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||i.globals.dataFormatXNumeric||(n=this.getStringX(e.x));var o=(e.x2-a)/(s/i.globals.gridWidth);return this.annoCtx.inversedReversedAxis&&(o=(r-e.x2)/(s/i.globals.gridWidth)),\"category\"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||i.globals.dataFormatXNumeric||(o=this.getStringX(e.x2)),void 0!==e.x&&null!==e.x||!e.marker||(n=i.globals.gridWidth),\"x1\"===t&&\"string\"==typeof e.x&&e.x.indexOf(\"px\")>-1&&(n=parseFloat(e.x)),\"x2\"===t&&\"string\"==typeof e.x2&&e.x2.indexOf(\"px\")>-1&&(o=parseFloat(e.x2)),\"x1\"===t?n:o}},{key:\"getStringX\",value:function(t){var e=this.w,i=t;e.config.xaxis.convertedCatToNumeric&&e.globals.categoryLabels.length&&(t=e.globals.categoryLabels.indexOf(t)+1);var a=e.globals.labels.indexOf(t),r=e.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-texts-g text:nth-child(\"+(a+1)+\")\");return r&&(i=parseFloat(r.getAttribute(\"x\"))),i}}],i&&x(e.prototype,i),t}();function v(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var m=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.annoCtx=e,this.invertAxis=this.annoCtx.invertAxis,this.helpers=new b(this.annoCtx)}var e,i;return e=t,(i=[{key:\"addXaxisAnnotation\",value:function(t,e,i){var a,s=this.w,n=this.helpers.getX1X2(\"x1\",t),o=t.label.text,l=t.strokeDashArray;if(r.isNumber(n)){if(null===t.x2||void 0===t.x2){var c=this.annoCtx.graphics.drawLine(n+t.offsetX,0+t.offsetY,n+t.offsetX,s.globals.gridHeight+t.offsetY,t.borderColor,l,t.borderWidth);e.appendChild(c.node),t.id&&c.node.classList.add(t.id)}else{if((a=this.helpers.getX1X2(\"x2\",t))<n){var h=n;n=a,a=h}var d=this.annoCtx.graphics.drawRect(n+t.offsetX,0+t.offsetY,a-n,s.globals.gridHeight+t.offsetY,0,t.fillColor,t.opacity,1,t.borderColor,l);d.node.classList.add(\"apexcharts-annotation-rect\"),d.attr(\"clip-path\",\"url(#gridRectMask\".concat(s.globals.cuid,\")\")),e.appendChild(d.node),t.id&&d.node.classList.add(t.id)}var u=this.annoCtx.graphics.getTextRects(o,parseFloat(t.label.style.fontSize)),g=\"top\"===t.label.position?4:\"center\"===t.label.position?s.globals.gridHeight/2+(\"vertical\"===t.label.orientation?u.width/2:0):s.globals.gridHeight,f=this.annoCtx.graphics.drawText({x:n+t.label.offsetX,y:g+t.label.offsetY-(\"vertical\"===t.label.orientation?\"top\"===t.label.position?u.width/2-12:-u.width/2:0),text:o,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\"apexcharts-xaxis-annotation-label \".concat(t.label.style.cssClass,\" \").concat(t.id?t.id:\"\")});f.attr({rel:i}),e.appendChild(f.node),this.annoCtx.helpers.setOrientations(t,i)}}},{key:\"drawXAxisAnnotations\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\"apexcharts-xaxis-annotations\"});return e.config.annotations.xaxis.map((function(e,a){t.addXaxisAnnotation(e,i.node,a)})),i}}])&&v(e.prototype,i),t}();function y(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var w=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.annoCtx=e,this.helpers=new b(this.annoCtx)}var e,i;return e=t,(i=[{key:\"addYaxisAnnotation\",value:function(t,e,i){var a,r=this.w,s=t.strokeDashArray,n=this.helpers.getY1Y2(\"y1\",t),o=t.label.text;if(null===t.y2||void 0===t.y2){var l=this.annoCtx.graphics.drawLine(0+t.offsetX,n+t.offsetY,this._getYAxisAnnotationWidth(t),n+t.offsetY,t.borderColor,s,t.borderWidth);e.appendChild(l.node),t.id&&l.node.classList.add(t.id)}else{if((a=this.helpers.getY1Y2(\"y2\",t))>n){var c=n;n=a,a=c}var h=this.annoCtx.graphics.drawRect(0+t.offsetX,a+t.offsetY,this._getYAxisAnnotationWidth(t),n-a,0,t.fillColor,t.opacity,1,t.borderColor,s);h.node.classList.add(\"apexcharts-annotation-rect\"),h.attr(\"clip-path\",\"url(#gridRectMask\".concat(r.globals.cuid,\")\")),e.appendChild(h.node),t.id&&h.node.classList.add(t.id)}var d=\"right\"===t.label.position?r.globals.gridWidth:\"center\"===t.label.position?r.globals.gridWidth/2:0,u=this.annoCtx.graphics.drawText({x:d+t.label.offsetX,y:(null!=a?a:n)+t.label.offsetY-3,text:o,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\"apexcharts-yaxis-annotation-label \".concat(t.label.style.cssClass,\" \").concat(t.id?t.id:\"\")});u.attr({rel:i}),e.appendChild(u.node)}},{key:\"_getYAxisAnnotationWidth\",value:function(t){var e=this.w;return e.globals.gridWidth,(t.width.indexOf(\"%\")>-1?e.globals.gridWidth*parseInt(t.width,10)/100:parseInt(t.width,10))+t.offsetX}},{key:\"drawYAxisAnnotations\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\"apexcharts-yaxis-annotations\"});return e.config.annotations.yaxis.map((function(e,a){t.addYaxisAnnotation(e,i.node,a)})),i}}])&&y(e.prototype,i),t}();function k(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var A=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.annoCtx=e,this.helpers=new b(this.annoCtx)}var e,i;return e=t,(i=[{key:\"addPointAnnotation\",value:function(t,e,i){this.w;var a=this.helpers.getX1X2(\"x1\",t),s=this.helpers.getY1Y2(\"y1\",t);if(r.isNumber(a)){var n={pSize:t.marker.size,pointStrokeWidth:t.marker.strokeWidth,pointFillColor:t.marker.fillColor,pointStrokeColor:t.marker.strokeColor,shape:t.marker.shape,pRadius:t.marker.radius,class:\"apexcharts-point-annotation-marker \".concat(t.marker.cssClass,\" \").concat(t.id?t.id:\"\")},o=this.annoCtx.graphics.drawMarker(a+t.marker.offsetX,s+t.marker.offsetY,n);e.appendChild(o.node);var l=t.label.text?t.label.text:\"\",c=this.annoCtx.graphics.drawText({x:a+t.label.offsetX,y:s+t.label.offsetY-t.marker.size-parseFloat(t.label.style.fontSize)/1.6,text:l,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\"apexcharts-point-annotation-label \".concat(t.label.style.cssClass,\" \").concat(t.id?t.id:\"\")});if(c.attr({rel:i}),e.appendChild(c.node),t.customSVG.SVG){var h=this.annoCtx.graphics.group({class:\"apexcharts-point-annotations-custom-svg \"+t.customSVG.cssClass});h.attr({transform:\"translate(\".concat(a+t.customSVG.offsetX,\", \").concat(s+t.customSVG.offsetY,\")\")}),h.node.innerHTML=t.customSVG.SVG,e.appendChild(h.node)}if(t.image.path){var d=t.image.width?t.image.width:20,u=t.image.height?t.image.height:20;o=this.annoCtx.addImage({x:a+t.image.offsetX-d/2,y:s+t.image.offsetY-u/2,width:d,height:u,path:t.image.path,appendTo:\".apexcharts-point-annotations\"})}t.mouseEnter&&o.node.addEventListener(\"mouseenter\",t.mouseEnter.bind(this,t)),t.mouseLeave&&o.node.addEventListener(\"mouseleave\",t.mouseLeave.bind(this,t)),t.click&&o.node.addEventListener(\"click\",t.click.bind(this,t))}}},{key:\"drawPointAnnotations\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\"apexcharts-point-annotations\"});return e.config.annotations.points.map((function(e,a){t.addPointAnnotation(e,i.node,a)})),i}}])&&k(e.prototype,i),t}();const S=JSON.parse('{\"name\":\"en\",\"options\":{\"months\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"shortMonths\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"days\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"shortDays\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"toolbar\":{\"exportToSVG\":\"Download SVG\",\"exportToPNG\":\"Download PNG\",\"exportToCSV\":\"Download CSV\",\"menu\":\"Menu\",\"selection\":\"Selection\",\"selectionZoom\":\"Selection Zoom\",\"zoomIn\":\"Zoom In\",\"zoomOut\":\"Zoom Out\",\"pan\":\"Panning\",\"reset\":\"Reset Zoom\"}}}');function C(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var P=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.yAxis={show:!0,showAlways:!1,showForNullSeries:!0,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,logBase:10,tickAmount:void 0,forceNiceScale:!1,max:void 0,min:void 0,floating:!1,decimalsInFloat:void 0,labels:{show:!0,minWidth:0,maxWidth:160,offsetX:0,offsetY:0,align:void 0,rotate:0,padding:20,style:{colors:[],fontSize:\"11px\",fontWeight:400,fontFamily:void 0,cssClass:\"\"},formatter:void 0},axisBorder:{show:!1,color:\"#e0e0e0\",width:1,offsetX:0,offsetY:0},axisTicks:{show:!1,color:\"#e0e0e0\",width:6,offsetX:0,offsetY:0},title:{text:void 0,rotate:-90,offsetY:0,offsetX:0,style:{color:void 0,fontSize:\"11px\",fontWeight:900,fontFamily:void 0,cssClass:\"\"}},tooltip:{enabled:!1,offsetX:0},crosshairs:{show:!0,position:\"front\",stroke:{color:\"#b6b6b6\",width:1,dashArray:0}}},this.pointAnnotation={id:void 0,x:0,y:null,yAxisIndex:0,seriesIndex:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,marker:{size:4,fillColor:\"#fff\",strokeWidth:2,strokeColor:\"#333\",shape:\"circle\",offsetX:0,offsetY:0,radius:2,cssClass:\"\"},label:{borderColor:\"#c2c2c2\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\"middle\",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:\"#fff\",color:void 0,fontSize:\"11px\",fontFamily:void 0,fontWeight:400,cssClass:\"\",padding:{left:5,right:5,top:2,bottom:2}}},customSVG:{SVG:void 0,cssClass:void 0,offsetX:0,offsetY:0},image:{path:void 0,width:20,height:20,offsetX:0,offsetY:0}},this.yAxisAnnotation={id:void 0,y:0,y2:null,strokeDashArray:1,fillColor:\"#c2c2c2\",borderColor:\"#c2c2c2\",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,width:\"100%\",yAxisIndex:0,label:{borderColor:\"#c2c2c2\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\"end\",position:\"right\",offsetX:0,offsetY:-3,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:\"#fff\",color:void 0,fontSize:\"11px\",fontFamily:void 0,fontWeight:400,cssClass:\"\",padding:{left:5,right:5,top:2,bottom:2}}}},this.xAxisAnnotation={id:void 0,x:0,x2:null,strokeDashArray:1,fillColor:\"#c2c2c2\",borderColor:\"#c2c2c2\",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,label:{borderColor:\"#c2c2c2\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\"middle\",orientation:\"vertical\",position:\"top\",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:\"#fff\",color:void 0,fontSize:\"11px\",fontFamily:void 0,fontWeight:400,cssClass:\"\",padding:{left:5,right:5,top:2,bottom:2}}}},this.text={x:0,y:0,text:\"\",textAnchor:\"start\",foreColor:void 0,fontSize:\"13px\",fontFamily:void 0,fontWeight:400,appendTo:\".apexcharts-annotations\",backgroundColor:\"transparent\",borderColor:\"#c2c2c2\",borderRadius:0,borderWidth:0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2}}var e,i;return e=t,(i=[{key:\"init\",value:function(){return{annotations:{yaxis:[this.yAxisAnnotation],xaxis:[this.xAxisAnnotation],points:[this.pointAnnotation],texts:[],images:[],shapes:[]},chart:{animations:{enabled:!0,easing:\"easeinout\",speed:800,animateGradually:{delay:150,enabled:!0},dynamicAnimation:{enabled:!0,speed:350}},background:\"transparent\",locales:[S],defaultLocale:\"en\",dropShadow:{enabled:!1,enabledOnSeries:void 0,top:2,left:2,blur:4,color:\"#000\",opacity:.35},events:{animationEnd:void 0,beforeMount:void 0,mounted:void 0,updated:void 0,click:void 0,mouseMove:void 0,mouseLeave:void 0,xAxisLabelClick:void 0,legendClick:void 0,markerClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,beforeResetZoom:void 0,zoomed:void 0,scrolled:void 0,brushScrolled:void 0},foreColor:\"#373d3f\",fontFamily:\"Helvetica, Arial, sans-serif\",height:\"auto\",parentHeightOffset:15,redrawOnParentResize:!0,redrawOnWindowResize:!0,id:void 0,group:void 0,offsetX:0,offsetY:0,selection:{enabled:!1,type:\"x\",fill:{color:\"#24292e\",opacity:.1},stroke:{width:1,color:\"#24292e\",opacity:.4,dashArray:3},xaxis:{min:void 0,max:void 0},yaxis:{min:void 0,max:void 0}},sparkline:{enabled:!1},brush:{enabled:!1,autoScaleYaxis:!0,target:void 0},stacked:!1,stackType:\"normal\",toolbar:{show:!0,offsetX:0,offsetY:0,tools:{download:!0,selection:!0,zoom:!0,zoomin:!0,zoomout:!0,pan:!0,reset:!0,customIcons:[]},export:{csv:{filename:void 0,columnDelimiter:\",\",headerCategory:\"category\",headerValue:\"value\",dateFormatter:function(t){return new Date(t).toDateString()}},png:{filename:void 0},svg:{filename:void 0}},autoSelected:\"zoom\"},type:\"line\",width:\"100%\",zoom:{enabled:!0,type:\"x\",autoScaleYaxis:!1,zoomedArea:{fill:{color:\"#90CAF9\",opacity:.4},stroke:{color:\"#0D47A1\",opacity:.4,width:1}}}},plotOptions:{area:{fillTo:\"origin\"},bar:{horizontal:!1,columnWidth:\"70%\",barHeight:\"70%\",distributed:!1,borderRadius:0,borderRadiusApplication:\"around\",borderRadiusWhenStacked:\"last\",rangeBarOverlap:!0,rangeBarGroupRows:!1,hideZeroBarsWhenGrouped:!1,isDumbbell:!1,dumbbellColors:void 0,isFunnel:!1,isFunnel3d:!0,colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1,backgroundBarRadius:0},dataLabels:{position:\"top\",maxItems:100,hideOverflowingLabels:!0,orientation:\"horizontal\",total:{enabled:!1,formatter:void 0,offsetX:0,offsetY:0,style:{color:\"#373d3f\",fontSize:\"12px\",fontFamily:void 0,fontWeight:600}}}},bubble:{zScaling:!0,minBubbleRadius:void 0,maxBubbleRadius:void 0},candlestick:{colors:{upward:\"#00B746\",downward:\"#EF403C\"},wick:{useFillColor:!0}},boxPlot:{colors:{upper:\"#00E396\",lower:\"#008FFB\"}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,reverseNegativeShade:!1,distributed:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},treemap:{enableShades:!0,shadeIntensity:.5,distributed:!1,reverseNegativeShade:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},radialBar:{inverseOrder:!1,startAngle:0,endAngle:360,offsetX:0,offsetY:0,hollow:{margin:5,size:\"50%\",background:\"transparent\",image:void 0,imageWidth:150,imageHeight:150,imageOffsetX:0,imageOffsetY:0,imageClipped:!0,position:\"front\",dropShadow:{enabled:!1,top:0,left:0,blur:3,color:\"#000\",opacity:.5}},track:{show:!0,startAngle:void 0,endAngle:void 0,background:\"#f2f2f2\",strokeWidth:\"97%\",opacity:1,margin:5,dropShadow:{enabled:!1,top:0,left:0,blur:3,color:\"#000\",opacity:.5}},dataLabels:{show:!0,name:{show:!0,fontSize:\"16px\",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:0,formatter:function(t){return t}},value:{show:!0,fontSize:\"14px\",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:16,formatter:function(t){return t+\"%\"}},total:{show:!1,label:\"Total\",fontSize:\"16px\",fontWeight:600,fontFamily:void 0,color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce((function(t,e){return t+e}),0)/t.globals.series.length+\"%\"}}}},pie:{customScale:1,offsetX:0,offsetY:0,startAngle:0,endAngle:360,expandOnClick:!0,dataLabels:{offset:0,minAngleToShowLabel:10},donut:{size:\"65%\",background:\"transparent\",labels:{show:!1,name:{show:!0,fontSize:\"16px\",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:-10,formatter:function(t){return t}},value:{show:!0,fontSize:\"20px\",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:10,formatter:function(t){return t}},total:{show:!1,showAlways:!1,label:\"Total\",fontSize:\"16px\",fontWeight:400,fontFamily:void 0,color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce((function(t,e){return t+e}),0)}}}}},polarArea:{rings:{strokeWidth:1,strokeColor:\"#e8e8e8\"},spokes:{strokeWidth:1,connectorColors:\"#e8e8e8\"}},radar:{size:void 0,offsetX:0,offsetY:0,polygons:{strokeWidth:1,strokeColors:\"#e8e8e8\",connectorColors:\"#e8e8e8\",fill:{colors:void 0}}}},colors:void 0,dataLabels:{enabled:!0,enabledOnSeries:void 0,formatter:function(t){return null!==t?t:\"\"},textAnchor:\"middle\",distributed:!1,offsetX:0,offsetY:0,style:{fontSize:\"12px\",fontFamily:void 0,fontWeight:600,colors:void 0},background:{enabled:!0,foreColor:\"#fff\",borderRadius:2,padding:4,opacity:.9,borderWidth:1,borderColor:\"#fff\",dropShadow:{enabled:!1,top:1,left:1,blur:1,color:\"#000\",opacity:.45}},dropShadow:{enabled:!1,top:1,left:1,blur:1,color:\"#000\",opacity:.45}},fill:{type:\"solid\",colors:void 0,opacity:.85,gradient:{shade:\"dark\",type:\"horizontal\",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},image:{src:[],width:void 0,height:void 0},pattern:{style:\"squares\",width:6,height:6,strokeWidth:2}},forecastDataPoints:{count:0,fillOpacity:.5,strokeWidth:void 0,dashArray:4},grid:{show:!0,borderColor:\"#e0e0e0\",strokeDashArray:0,position:\"back\",xaxis:{lines:{show:!1}},yaxis:{lines:{show:!0}},row:{colors:void 0,opacity:.5},column:{colors:void 0,opacity:.5},padding:{top:0,right:10,bottom:0,left:12}},labels:[],legend:{show:!0,showForSingleSeries:!1,showForNullSeries:!0,showForZeroSeries:!0,floating:!1,position:\"bottom\",horizontalAlign:\"center\",inverseOrder:!1,fontSize:\"12px\",fontFamily:void 0,fontWeight:400,width:void 0,height:void 0,formatter:void 0,tooltipHoverFormatter:void 0,offsetX:-20,offsetY:4,customLegendItems:[],labels:{colors:void 0,useSeriesColors:!1},markers:{width:12,height:12,strokeWidth:0,fillColors:void 0,strokeColor:\"#fff\",radius:12,customHTML:void 0,offsetX:0,offsetY:0,onClick:void 0},itemMargin:{horizontal:5,vertical:2},onItemClick:{toggleDataSeries:!0},onItemHover:{highlightDataSeries:!0}},markers:{discrete:[],size:0,colors:void 0,strokeColors:\"#fff\",strokeWidth:2,strokeOpacity:.9,strokeDashArray:0,fillOpacity:1,shape:\"circle\",width:8,height:8,radius:2,offsetX:0,offsetY:0,onClick:void 0,onDblClick:void 0,showNullDataPoints:!0,hover:{size:void 0,sizeOffset:3}},noData:{text:void 0,align:\"center\",verticalAlign:\"middle\",offsetX:0,offsetY:0,style:{color:void 0,fontSize:\"14px\",fontFamily:void 0}},responsive:[],series:void 0,states:{normal:{filter:{type:\"none\",value:0}},hover:{filter:{type:\"lighten\",value:.1}},active:{allowMultipleDataPointsSelection:!1,filter:{type:\"darken\",value:.5}}},title:{text:void 0,align:\"left\",margin:5,offsetX:0,offsetY:0,floating:!1,style:{fontSize:\"14px\",fontWeight:900,fontFamily:void 0,color:void 0}},subtitle:{text:void 0,align:\"left\",margin:5,offsetX:0,offsetY:30,floating:!1,style:{fontSize:\"12px\",fontWeight:400,fontFamily:void 0,color:void 0}},stroke:{show:!0,curve:\"smooth\",lineCap:\"butt\",width:2,colors:void 0,dashArray:0,fill:{type:\"solid\",colors:void 0,opacity:.85,gradient:{shade:\"dark\",type:\"horizontal\",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]}}},tooltip:{enabled:!0,enabledOnSeries:void 0,shared:!0,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:\"light\",cssClass:\"\",style:{fontSize:\"12px\",fontFamily:void 0},onDatasetHover:{highlightDataSeries:!1},x:{show:!0,format:\"dd MMM\",formatter:void 0},y:{formatter:void 0,title:{formatter:function(t){return t?t+\": \":\"\"}}},z:{formatter:void 0,title:\"Size: \"},marker:{show:!0,fillColors:void 0},items:{display:\"flex\"},fixed:{enabled:!1,position:\"topRight\",offsetX:0,offsetY:0}},xaxis:{type:\"category\",categories:[],convertedCatToNumeric:!1,offsetX:0,offsetY:0,overwriteCategories:void 0,labels:{show:!0,rotate:-45,rotateAlways:!1,hideOverlappingLabels:!0,trim:!1,minHeight:void 0,maxHeight:120,showDuplicates:!0,style:{colors:[],fontSize:\"12px\",fontWeight:400,fontFamily:void 0,cssClass:\"\"},offsetX:0,offsetY:0,format:void 0,formatter:void 0,datetimeUTC:!0,datetimeFormatter:{year:\"yyyy\",month:\"MMM 'yy\",day:\"dd MMM\",hour:\"HH:mm\",minute:\"HH:mm:ss\",second:\"HH:mm:ss\"}},group:{groups:[],style:{colors:[],fontSize:\"12px\",fontWeight:400,fontFamily:void 0,cssClass:\"\"}},axisBorder:{show:!0,color:\"#e0e0e0\",width:\"100%\",height:1,offsetX:0,offsetY:0},axisTicks:{show:!0,color:\"#e0e0e0\",height:6,offsetX:0,offsetY:0},tickAmount:void 0,tickPlacement:\"on\",min:void 0,max:void 0,range:void 0,floating:!1,decimalsInFloat:void 0,position:\"bottom\",title:{text:void 0,offsetX:0,offsetY:0,style:{color:void 0,fontSize:\"12px\",fontWeight:900,fontFamily:void 0,cssClass:\"\"}},crosshairs:{show:!0,width:1,position:\"back\",opacity:.9,stroke:{color:\"#b6b6b6\",width:1,dashArray:3},fill:{type:\"solid\",color:\"#B1B9C4\",gradient:{colorFrom:\"#D8E3F0\",colorTo:\"#BED1E6\",stops:[0,100],opacityFrom:.4,opacityTo:.5}},dropShadow:{enabled:!1,left:0,top:0,blur:1,opacity:.4}},tooltip:{enabled:!0,offsetY:0,formatter:void 0,style:{fontSize:\"12px\",fontFamily:void 0}}},yaxis:this.yAxis,theme:{mode:\"light\",palette:\"palette1\",monochrome:{enabled:!1,color:\"#008FFB\",shadeTo:\"light\",shadeIntensity:.65}}}}}])&&C(e.prototype,i),t}();function L(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var O=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.graphics=new g(this.ctx),this.w.globals.isBarHorizontal&&(this.invertAxis=!0),this.helpers=new b(this),this.xAxisAnnotations=new m(this),this.yAxisAnnotations=new w(this),this.pointsAnnotations=new A(this),this.w.globals.isBarHorizontal&&this.w.config.yaxis[0].reversed&&(this.inversedReversedAxis=!0),this.xDivision=this.w.globals.gridWidth/this.w.globals.dataPoints}var e,i;return e=t,(i=[{key:\"drawAxesAnnotations\",value:function(){var t=this.w;if(t.globals.axisCharts){for(var e=this.yAxisAnnotations.drawYAxisAnnotations(),i=this.xAxisAnnotations.drawXAxisAnnotations(),a=this.pointsAnnotations.drawPointAnnotations(),r=t.config.chart.animations.enabled,s=[e,i,a],n=[i.node,e.node,a.node],o=0;o<3;o++)t.globals.dom.elGraphical.add(s[o]),!r||t.globals.resized||t.globals.dataChanged||\"scatter\"!==t.config.chart.type&&\"bubble\"!==t.config.chart.type&&t.globals.dataPoints>1&&n[o].classList.add(\"apexcharts-element-hidden\"),t.globals.delayedElements.push({el:n[o],index:0});this.helpers.annotationsBackground()}}},{key:\"drawImageAnnos\",value:function(){var t=this;this.w.config.annotations.images.map((function(e,i){t.addImage(e,i)}))}},{key:\"drawTextAnnos\",value:function(){var t=this;this.w.config.annotations.texts.map((function(e,i){t.addText(e,i)}))}},{key:\"addXaxisAnnotation\",value:function(t,e,i){this.xAxisAnnotations.addXaxisAnnotation(t,e,i)}},{key:\"addYaxisAnnotation\",value:function(t,e,i){this.yAxisAnnotations.addYaxisAnnotation(t,e,i)}},{key:\"addPointAnnotation\",value:function(t,e,i){this.pointsAnnotations.addPointAnnotation(t,e,i)}},{key:\"addText\",value:function(t,e){var i=t.x,a=t.y,r=t.text,s=t.textAnchor,n=t.foreColor,o=t.fontSize,l=t.fontFamily,c=t.fontWeight,h=t.cssClass,d=t.backgroundColor,u=t.borderWidth,g=t.strokeDashArray,f=t.borderRadius,p=t.borderColor,x=t.appendTo,b=void 0===x?\".apexcharts-annotations\":x,v=t.paddingLeft,m=void 0===v?4:v,y=t.paddingRight,w=void 0===y?4:y,k=t.paddingBottom,A=void 0===k?2:k,S=t.paddingTop,C=void 0===S?2:S,P=this.w,L=this.graphics.drawText({x:i,y:a,text:r,textAnchor:s||\"start\",fontSize:o||\"12px\",fontWeight:c||\"regular\",fontFamily:l||P.config.chart.fontFamily,foreColor:n||P.config.chart.foreColor,cssClass:h}),O=P.globals.dom.baseEl.querySelector(b);O&&O.appendChild(L.node);var T=L.bbox();if(r){var I=this.graphics.drawRect(T.x-m,T.y-C,T.width+m+w,T.height+A+C,f,d||\"transparent\",1,u,p,g);O.insertBefore(I.node,L.node)}}},{key:\"addImage\",value:function(t,e){var i=this.w,a=t.path,r=t.x,s=void 0===r?0:r,n=t.y,o=void 0===n?0:n,l=t.width,c=void 0===l?20:l,h=t.height,d=void 0===h?20:h,u=t.appendTo,g=void 0===u?\".apexcharts-annotations\":u,f=i.globals.dom.Paper.image(a);f.size(c,d).move(s,o);var p=i.globals.dom.baseEl.querySelector(g);return p&&p.appendChild(f.node),f}},{key:\"addXaxisAnnotationExternal\",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\"xaxis\",contextMethod:i.addXaxisAnnotation}),i}},{key:\"addYaxisAnnotationExternal\",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\"yaxis\",contextMethod:i.addYaxisAnnotation}),i}},{key:\"addPointAnnotationExternal\",value:function(t,e,i){return void 0===this.invertAxis&&(this.invertAxis=i.w.globals.isBarHorizontal),this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\"point\",contextMethod:i.addPointAnnotation}),i}},{key:\"addAnnotationExternal\",value:function(t){var e=t.params,i=t.pushToMemory,a=t.context,s=t.type,n=t.contextMethod,o=a,l=o.w,c=l.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(s,\"-annotations\")),h=c.childNodes.length+1,d=new P,u=Object.assign({},\"xaxis\"===s?d.xAxisAnnotation:\"yaxis\"===s?d.yAxisAnnotation:d.pointAnnotation),g=r.extend(u,e);switch(s){case\"xaxis\":this.addXaxisAnnotation(g,c,h);break;case\"yaxis\":this.addYaxisAnnotation(g,c,h);break;case\"point\":this.addPointAnnotation(g,c,h)}var f=l.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(s,\"-annotations .apexcharts-\").concat(s,\"-annotation-label[rel='\").concat(h,\"']\")),p=this.helpers.addBackgroundToAnno(f,g);return p&&c.insertBefore(p.node,f),i&&l.globals.memory.methodsToExec.push({context:o,id:g.id?g.id:r.randomId(),method:n,label:\"addAnnotation\",params:e}),a}},{key:\"clearAnnotations\",value:function(t){var e=t.w,i=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations\");e.globals.memory.methodsToExec.map((function(t,i){\"addText\"!==t.label&&\"addAnnotation\"!==t.label||e.globals.memory.methodsToExec.splice(i,1)})),i=r.listToArray(i),Array.prototype.forEach.call(i,(function(t){for(;t.firstChild;)t.removeChild(t.firstChild)}))}},{key:\"removeAnnotation\",value:function(t,e){var i=t.w,a=i.globals.dom.baseEl.querySelectorAll(\".\".concat(e));a&&(i.globals.memory.methodsToExec.map((function(t,a){t.id===e&&i.globals.memory.methodsToExec.splice(a,1)})),Array.prototype.forEach.call(a,(function(t){t.parentElement.removeChild(t)})))}}])&&L(e.prototype,i),t}();function T(t){return function(t){if(Array.isArray(t))return I(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||function(t,e){if(t){if(\"string\"==typeof t)return I(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?I(t,e):void 0}}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function I(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}function E(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const M=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.months31=[1,3,5,7,8,10,12],this.months30=[2,4,6,9,11],this.daysCntOfYear=[0,31,59,90,120,151,181,212,243,273,304,334]}var e,i;return e=t,(i=[{key:\"isValidDate\",value:function(t){return!isNaN(this.parseDate(t))}},{key:\"getTimeStamp\",value:function(t){return Date.parse(t)?this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(t).toISOString().substr(0,25)).getTime():new Date(t).getTime():t}},{key:\"getDate\",value:function(t){return this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(t).toUTCString()):new Date(t)}},{key:\"parseDate\",value:function(t){var e=Date.parse(t);if(!isNaN(e))return this.getTimeStamp(t);var i=Date.parse(t.replace(/-/g,\"/\").replace(/[a-z]+/gi,\" \"));return this.getTimeStamp(i)}},{key:\"parseDateWithTimezone\",value:function(t){return Date.parse(t.replace(/-/g,\"/\").replace(/[a-z]+/gi,\" \"))}},{key:\"formatDate\",value:function(t,e){var i=this.w.globals.locale,a=this.w.config.xaxis.labels.datetimeUTC,r=[\"\\0\"].concat(T(i.months)),s=[\"\u0001\"].concat(T(i.shortMonths)),n=[\"\u0002\"].concat(T(i.days)),o=[\"\u0003\"].concat(T(i.shortDays));function l(t,e){var i=t+\"\";for(e=e||2;i.length<e;)i=\"0\"+i;return i}var c=a?t.getUTCFullYear():t.getFullYear();e=(e=(e=e.replace(/(^|[^\\\\])yyyy+/g,\"$1\"+c)).replace(/(^|[^\\\\])yy/g,\"$1\"+c.toString().substr(2,2))).replace(/(^|[^\\\\])y/g,\"$1\"+c);var h=(a?t.getUTCMonth():t.getMonth())+1;e=(e=(e=(e=e.replace(/(^|[^\\\\])MMMM+/g,\"$1\"+r[0])).replace(/(^|[^\\\\])MMM/g,\"$1\"+s[0])).replace(/(^|[^\\\\])MM/g,\"$1\"+l(h))).replace(/(^|[^\\\\])M/g,\"$1\"+h);var d=a?t.getUTCDate():t.getDate();e=(e=(e=(e=e.replace(/(^|[^\\\\])dddd+/g,\"$1\"+n[0])).replace(/(^|[^\\\\])ddd/g,\"$1\"+o[0])).replace(/(^|[^\\\\])dd/g,\"$1\"+l(d))).replace(/(^|[^\\\\])d/g,\"$1\"+d);var u=a?t.getUTCHours():t.getHours(),g=u>12?u-12:0===u?12:u;e=(e=(e=(e=e.replace(/(^|[^\\\\])HH+/g,\"$1\"+l(u))).replace(/(^|[^\\\\])H/g,\"$1\"+u)).replace(/(^|[^\\\\])hh+/g,\"$1\"+l(g))).replace(/(^|[^\\\\])h/g,\"$1\"+g);var f=a?t.getUTCMinutes():t.getMinutes();e=(e=e.replace(/(^|[^\\\\])mm+/g,\"$1\"+l(f))).replace(/(^|[^\\\\])m/g,\"$1\"+f);var p=a?t.getUTCSeconds():t.getSeconds();e=(e=e.replace(/(^|[^\\\\])ss+/g,\"$1\"+l(p))).replace(/(^|[^\\\\])s/g,\"$1\"+p);var x=a?t.getUTCMilliseconds():t.getMilliseconds();e=e.replace(/(^|[^\\\\])fff+/g,\"$1\"+l(x,3)),x=Math.round(x/10),e=e.replace(/(^|[^\\\\])ff/g,\"$1\"+l(x)),x=Math.round(x/10);var b=u<12?\"AM\":\"PM\";e=(e=(e=e.replace(/(^|[^\\\\])f/g,\"$1\"+x)).replace(/(^|[^\\\\])TT+/g,\"$1\"+b)).replace(/(^|[^\\\\])T/g,\"$1\"+b.charAt(0));var v=b.toLowerCase();e=(e=e.replace(/(^|[^\\\\])tt+/g,\"$1\"+v)).replace(/(^|[^\\\\])t/g,\"$1\"+v.charAt(0));var m=-t.getTimezoneOffset(),y=a||!m?\"Z\":m>0?\"+\":\"-\";if(!a){var w=(m=Math.abs(m))%60;y+=l(Math.floor(m/60))+\":\"+l(w)}e=e.replace(/(^|[^\\\\])K/g,\"$1\"+y);var k=(a?t.getUTCDay():t.getDay())+1;return(e=(e=(e=(e=e.replace(new RegExp(n[0],\"g\"),n[k])).replace(new RegExp(o[0],\"g\"),o[k])).replace(new RegExp(r[0],\"g\"),r[h])).replace(new RegExp(s[0],\"g\"),s[h])).replace(/\\\\(.)/g,\"$1\")}},{key:\"getTimeUnitsfromTimestamp\",value:function(t,e,i){var a=this.w;void 0!==a.config.xaxis.min&&(t=a.config.xaxis.min),void 0!==a.config.xaxis.max&&(e=a.config.xaxis.max);var r=this.getDate(t),s=this.getDate(e),n=this.formatDate(r,\"yyyy MM dd HH mm ss fff\").split(\" \"),o=this.formatDate(s,\"yyyy MM dd HH mm ss fff\").split(\" \");return{minMillisecond:parseInt(n[6],10),maxMillisecond:parseInt(o[6],10),minSecond:parseInt(n[5],10),maxSecond:parseInt(o[5],10),minMinute:parseInt(n[4],10),maxMinute:parseInt(o[4],10),minHour:parseInt(n[3],10),maxHour:parseInt(o[3],10),minDate:parseInt(n[2],10),maxDate:parseInt(o[2],10),minMonth:parseInt(n[1],10)-1,maxMonth:parseInt(o[1],10)-1,minYear:parseInt(n[0],10),maxYear:parseInt(o[0],10)}}},{key:\"isLeapYear\",value:function(t){return t%4==0&&t%100!=0||t%400==0}},{key:\"calculcateLastDaysOfMonth\",value:function(t,e,i){return this.determineDaysOfMonths(t,e)-i}},{key:\"determineDaysOfYear\",value:function(t){var e=365;return this.isLeapYear(t)&&(e=366),e}},{key:\"determineRemainingDaysOfYear\",value:function(t,e,i){var a=this.daysCntOfYear[e]+i;return e>1&&this.isLeapYear()&&a++,a}},{key:\"determineDaysOfMonths\",value:function(t,e){var i=30;switch(t=r.monthMod(t),!0){case this.months30.indexOf(t)>-1:2===t&&(i=this.isLeapYear(e)?29:28);break;case this.months31.indexOf(t)>-1:default:i=31}return i}}])&&E(e.prototype,i),t}();function X(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const z=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.tooltipKeyFormat=\"dd MMM\"}var e,i;return e=t,(i=[{key:\"xLabelFormat\",value:function(t,e,i,a){var r=this.w;if(\"datetime\"===r.config.xaxis.type&&void 0===r.config.xaxis.labels.formatter&&void 0===r.config.tooltip.x.formatter){var s=new M(this.ctx);return s.formatDate(s.getDate(e),r.config.tooltip.x.format)}return t(e,i,a)}},{key:\"defaultGeneralFormatter\",value:function(t){return Array.isArray(t)?t.map((function(t){return t})):t}},{key:\"defaultYFormatter\",value:function(t,e,i){var a=this.w;return r.isNumber(t)&&(t=0!==a.globals.yValueDecimal?t.toFixed(void 0!==e.decimalsInFloat?e.decimalsInFloat:a.globals.yValueDecimal):a.globals.maxYArr[i]-a.globals.minYArr[i]<5?t.toFixed(1):t.toFixed(0)),t}},{key:\"setLabelFormatters\",value:function(){var t=this,e=this.w;return e.globals.xaxisTooltipFormatter=function(e){return t.defaultGeneralFormatter(e)},e.globals.ttKeyFormatter=function(e){return t.defaultGeneralFormatter(e)},e.globals.ttZFormatter=function(t){return t},e.globals.legendFormatter=function(e){return t.defaultGeneralFormatter(e)},void 0!==e.config.xaxis.labels.formatter?e.globals.xLabelFormatter=e.config.xaxis.labels.formatter:e.globals.xLabelFormatter=function(t){if(r.isNumber(t)){if(!e.config.xaxis.convertedCatToNumeric&&\"numeric\"===e.config.xaxis.type){if(r.isNumber(e.config.xaxis.decimalsInFloat))return t.toFixed(e.config.xaxis.decimalsInFloat);var i=e.globals.maxX-e.globals.minX;return i>0&&i<100?t.toFixed(1):t.toFixed(0)}return e.globals.isBarHorizontal&&e.globals.maxY-e.globals.minYArr<4?t.toFixed(1):t.toFixed(0)}return t},\"function\"==typeof e.config.tooltip.x.formatter?e.globals.ttKeyFormatter=e.config.tooltip.x.formatter:e.globals.ttKeyFormatter=e.globals.xLabelFormatter,\"function\"==typeof e.config.xaxis.tooltip.formatter&&(e.globals.xaxisTooltipFormatter=e.config.xaxis.tooltip.formatter),(Array.isArray(e.config.tooltip.y)||void 0!==e.config.tooltip.y.formatter)&&(e.globals.ttVal=e.config.tooltip.y),void 0!==e.config.tooltip.z.formatter&&(e.globals.ttZFormatter=e.config.tooltip.z.formatter),void 0!==e.config.legend.formatter&&(e.globals.legendFormatter=e.config.legend.formatter),e.config.yaxis.forEach((function(i,a){void 0!==i.labels.formatter?e.globals.yLabelFormatters[a]=i.labels.formatter:e.globals.yLabelFormatters[a]=function(r){return e.globals.xyCharts?Array.isArray(r)?r.map((function(e){return t.defaultYFormatter(e,i,a)})):t.defaultYFormatter(r,i,a):r}})),e.globals}},{key:\"heatmapLabelFormatters\",value:function(){var t=this.w;if(\"heatmap\"===t.config.chart.type){t.globals.yAxisScale[0].result=t.globals.seriesNames.slice();var e=t.globals.seriesNames.reduce((function(t,e){return t.length>e.length?t:e}),0);t.globals.yAxisScale[0].niceMax=e,t.globals.yAxisScale[0].niceMin=e}}}])&&X(e.prototype,i),t}();function Y(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function R(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?Y(Object(i),!0).forEach((function(e){D(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Y(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function D(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function F(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var H=function(t){var e,i=t.isTimeline,a=t.ctx,r=t.seriesIndex,s=t.dataPointIndex,n=t.y1,o=t.y2,l=t.w,c=l.globals.seriesRangeStart[r][s],h=l.globals.seriesRangeEnd[r][s],d=l.globals.labels[s],u=l.config.series[r].name?l.config.series[r].name:\"\",g=l.globals.ttKeyFormatter,f=l.config.tooltip.y.title.formatter,p={w:l,seriesIndex:r,dataPointIndex:s,start:c,end:h};\"function\"==typeof f&&(u=f(u,p)),null!==(e=l.config.series[r].data[s])&&void 0!==e&&e.x&&(d=l.config.series[r].data[s].x),i||\"datetime\"===l.config.xaxis.type&&(d=new z(a).xLabelFormat(l.globals.ttKeyFormatter,d,d,{i:void 0,dateFormatter:new M(a).formatDate,w:l})),\"function\"==typeof g&&(d=g(d,p)),Number.isFinite(n)&&Number.isFinite(o)&&(c=n,h=o);var x=\"\",b=\"\",v=l.globals.colors[r];if(void 0===l.config.tooltip.x.formatter)if(\"datetime\"===l.config.xaxis.type){var m=new M(a);x=m.formatDate(m.getDate(c),l.config.tooltip.x.format),b=m.formatDate(m.getDate(h),l.config.tooltip.x.format)}else x=c,b=h;else x=l.config.tooltip.x.formatter(c),b=l.config.tooltip.x.formatter(h);return{start:c,end:h,startVal:x,endVal:b,ylabel:d,color:v,seriesName:u}},N=function(t){var e=t.color,i=t.seriesName,a=t.ylabel,r=t.start,s=t.end,n=t.seriesIndex,o=t.dataPointIndex,l=t.ctx.tooltip.tooltipLabels.getFormatters(n);r=l.yLbFormatter(r),s=l.yLbFormatter(s);var c=l.yLbFormatter(t.w.globals.series[n][o]),h='<span class=\"value start-value\">\\n  '.concat(r,'\\n  </span> <span class=\"separator\">-</span> <span class=\"value end-value\">\\n  ').concat(s,\"\\n  </span>\");return'<div class=\"apexcharts-tooltip-rangebar\"><div> <span class=\"series-name\" style=\"color: '+e+'\">'+(i||\"\")+'</span></div><div> <span class=\"category\">'+a+\": </span> \"+(t.w.globals.comboCharts?\"rangeArea\"===t.w.config.series[n].type||\"rangeBar\"===t.w.config.series[n].type?h:\"<span>\".concat(c,\"</span>\"):h)+\" </div></div>\"},W=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.opts=e}var e,i;return e=t,(i=[{key:\"hideYAxis\",value:function(){this.opts.yaxis[0].show=!1,this.opts.yaxis[0].title.text=\"\",this.opts.yaxis[0].axisBorder.show=!1,this.opts.yaxis[0].axisTicks.show=!1,this.opts.yaxis[0].floating=!0}},{key:\"line\",value:function(){return{chart:{animations:{easing:\"swing\"}},dataLabels:{enabled:!1},stroke:{width:5,curve:\"straight\"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}},{key:\"sparkline\",value:function(t){return this.hideYAxis(),r.extend(t,{grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}})}},{key:\"bar\",value:function(){return{chart:{stacked:!1,animations:{easing:\"swing\"}},plotOptions:{bar:{dataLabels:{position:\"center\"}}},dataLabels:{style:{colors:[\"#fff\"]},background:{enabled:!1}},stroke:{width:0,lineCap:\"round\"},fill:{opacity:.85},legend:{markers:{shape:\"square\",radius:2,size:8}},tooltip:{shared:!1,intersect:!0},xaxis:{tooltip:{enabled:!1},tickPlacement:\"between\",crosshairs:{width:\"barWidth\",position:\"back\",fill:{type:\"gradient\"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:\"funnel\",value:function(){return this.hideYAxis(),R(R({},this.bar()),{},{chart:{animations:{easing:\"linear\",speed:800,animateGradually:{enabled:!1}}},plotOptions:{bar:{horizontal:!0,borderRadiusApplication:\"around\",borderRadius:0,dataLabels:{position:\"center\"}}},grid:{show:!1,padding:{left:0,right:0}},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}}})}},{key:\"candlestick\",value:function(){var t=this;return{stroke:{width:1,colors:[\"#333\"]},fill:{opacity:1},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(e){var i=e.seriesIndex,a=e.dataPointIndex,r=e.w;return t._getBoxTooltip(r,i,a,[\"Open\",\"High\",\"\",\"Low\",\"Close\"],\"candlestick\")}},states:{active:{filter:{type:\"none\"}}},xaxis:{crosshairs:{width:1}}}}},{key:\"boxPlot\",value:function(){var t=this;return{chart:{animations:{dynamicAnimation:{enabled:!1}}},stroke:{width:1,colors:[\"#24292e\"]},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(e){var i=e.seriesIndex,a=e.dataPointIndex,r=e.w;return t._getBoxTooltip(r,i,a,[\"Minimum\",\"Q1\",\"Median\",\"Q3\",\"Maximum\"],\"boxPlot\")}},markers:{size:5,strokeWidth:1,strokeColors:\"#111\"},xaxis:{crosshairs:{width:1}}}}},{key:\"rangeBar\",value:function(){return{chart:{animations:{animateGradually:!1}},stroke:{width:0,lineCap:\"square\"},plotOptions:{bar:{borderRadius:0,dataLabels:{position:\"center\"}}},dataLabels:{enabled:!1,formatter:function(t,e){e.ctx;var i=e.seriesIndex,a=e.dataPointIndex,r=e.w,s=function(){var t=r.globals.seriesRangeStart[i][a];return r.globals.seriesRangeEnd[i][a]-t};return r.globals.comboCharts?\"rangeBar\"===r.config.series[i].type||\"rangeArea\"===r.config.series[i].type?s():t:s()},background:{enabled:!1},style:{colors:[\"#fff\"]}},markers:{size:10},tooltip:{shared:!1,followCursor:!0,custom:function(t){return t.w.config.plotOptions&&t.w.config.plotOptions.bar&&t.w.config.plotOptions.bar.horizontal?function(t){var e=H(R(R({},t),{},{isTimeline:!0})),i=e.color,a=e.seriesName,r=e.ylabel,s=e.startVal,n=e.endVal;return N(R(R({},t),{},{color:i,seriesName:a,ylabel:r,start:s,end:n}))}(t):function(t){var e=H(t),i=e.color,a=e.seriesName,r=e.ylabel,s=e.start,n=e.end;return N(R(R({},t),{},{color:i,seriesName:a,ylabel:r,start:s,end:n}))}(t)}},xaxis:{tickPlacement:\"between\",tooltip:{enabled:!1},crosshairs:{stroke:{width:0}}}}}},{key:\"dumbbell\",value:function(t){var e,i;return null!==(e=t.plotOptions.bar)&&void 0!==e&&e.barHeight||(t.plotOptions.bar.barHeight=2),null!==(i=t.plotOptions.bar)&&void 0!==i&&i.columnWidth||(t.plotOptions.bar.columnWidth=2),t}},{key:\"area\",value:function(){return{stroke:{width:4,fill:{type:\"solid\",gradient:{inverseColors:!1,shade:\"light\",type:\"vertical\",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}}},fill:{type:\"gradient\",gradient:{inverseColors:!1,shade:\"light\",type:\"vertical\",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}},markers:{size:0,hover:{sizeOffset:6}},tooltip:{followCursor:!1}}}},{key:\"rangeArea\",value:function(){return{stroke:{curve:\"straight\",width:0},fill:{type:\"solid\",opacity:.6},markers:{size:0},states:{hover:{filter:{type:\"none\"}},active:{filter:{type:\"none\"}}},tooltip:{intersect:!1,shared:!0,followCursor:!0,custom:function(t){return function(t){var e=H(t),i=e.color,a=e.seriesName,r=e.ylabel,s=e.start,n=e.end;return N(R(R({},t),{},{color:i,seriesName:a,ylabel:r,start:s,end:n}))}(t)}}}}},{key:\"brush\",value:function(t){return r.extend(t,{chart:{toolbar:{autoSelected:\"selection\",show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1},stroke:{width:1},tooltip:{enabled:!1},xaxis:{tooltip:{enabled:!1}}})}},{key:\"stacked100\",value:function(t){t.dataLabels=t.dataLabels||{},t.dataLabels.formatter=t.dataLabels.formatter||void 0;var e=t.dataLabels.formatter;return t.yaxis.forEach((function(e,i){t.yaxis[i].min=0,t.yaxis[i].max=100})),\"bar\"===t.chart.type&&(t.dataLabels.formatter=e||function(t){return\"number\"==typeof t&&t?t.toFixed(0)+\"%\":t}),t}},{key:\"stackedBars\",value:function(){var t=this.bar();return R(R({},t),{},{plotOptions:R(R({},t.plotOptions),{},{bar:R(R({},t.plotOptions.bar),{},{borderRadiusApplication:\"end\",borderRadiusWhenStacked:\"last\"})})})}},{key:\"convertCatToNumeric\",value:function(t){return t.xaxis.convertedCatToNumeric=!0,t}},{key:\"convertCatToNumericXaxis\",value:function(t,e,i){t.xaxis.type=\"numeric\",t.xaxis.labels=t.xaxis.labels||{},t.xaxis.labels.formatter=t.xaxis.labels.formatter||function(t){return r.isNumber(t)?Math.floor(t):t};var a=t.xaxis.labels.formatter,s=t.xaxis.categories&&t.xaxis.categories.length?t.xaxis.categories:t.labels;return i&&i.length&&(s=i.map((function(t){return Array.isArray(t)?t:String(t)}))),s&&s.length&&(t.xaxis.labels.formatter=function(t){return r.isNumber(t)?a(s[Math.floor(t)-1]):a(t)}),t.xaxis.categories=[],t.labels=[],t.xaxis.tickAmount=t.xaxis.tickAmount||\"dataPoints\",t}},{key:\"bubble\",value:function(){return{dataLabels:{style:{colors:[\"#fff\"]}},tooltip:{shared:!1,intersect:!0},xaxis:{crosshairs:{width:0}},fill:{type:\"solid\",gradient:{shade:\"light\",inverse:!0,shadeIntensity:.55,opacityFrom:.4,opacityTo:.8}}}}},{key:\"scatter\",value:function(){return{dataLabels:{enabled:!1},tooltip:{shared:!1,intersect:!0},markers:{size:6,strokeWidth:1,hover:{sizeOffset:2}}}}},{key:\"heatmap\",value:function(){return{chart:{stacked:!1},fill:{opacity:1},dataLabels:{style:{colors:[\"#fff\"]}},stroke:{colors:[\"#fff\"]},tooltip:{followCursor:!0,marker:{show:!1},x:{show:!1}},legend:{position:\"top\",markers:{shape:\"square\",size:10,offsetY:2}},grid:{padding:{right:20}}}}},{key:\"treemap\",value:function(){return{chart:{zoom:{enabled:!1}},dataLabels:{style:{fontSize:14,fontWeight:600,colors:[\"#fff\"]}},stroke:{show:!0,width:2,colors:[\"#fff\"]},legend:{show:!1},fill:{gradient:{stops:[0,100]}},tooltip:{followCursor:!0,x:{show:!1}},grid:{padding:{left:0,right:0}},xaxis:{crosshairs:{show:!1},tooltip:{enabled:!1}}}}},{key:\"pie\",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(t){return t.toFixed(1)+\"%\"},style:{colors:[\"#fff\"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:[\"#fff\"]},fill:{opacity:1,gradient:{shade:\"light\",stops:[0,100]}},tooltip:{theme:\"dark\",fillSeriesColor:!0},legend:{position:\"right\"}}}},{key:\"donut\",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+\"%\"},style:{colors:[\"#fff\"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:[\"#fff\"]},fill:{opacity:1,gradient:{shade:\"light\",shadeIntensity:.35,stops:[80,100],opacityFrom:1,opacityTo:1}},tooltip:{theme:\"dark\",fillSeriesColor:!0},legend:{position:\"right\"}}}},{key:\"polarArea\",value:function(){return this.opts.yaxis[0].tickAmount=this.opts.yaxis[0].tickAmount?this.opts.yaxis[0].tickAmount:6,{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+\"%\"},enabled:!1},stroke:{show:!0,width:2},fill:{opacity:.7},tooltip:{theme:\"dark\",fillSeriesColor:!0},legend:{position:\"right\"}}}},{key:\"radar\",value:function(){return this.opts.yaxis[0].labels.offsetY=this.opts.yaxis[0].labels.offsetY?this.opts.yaxis[0].labels.offsetY:6,{dataLabels:{enabled:!1,style:{fontSize:\"11px\"}},stroke:{width:2},markers:{size:3,strokeWidth:1,strokeOpacity:1},fill:{opacity:.2},tooltip:{shared:!1,intersect:!0,followCursor:!0},grid:{show:!1},xaxis:{labels:{formatter:function(t){return t},style:{colors:[\"#a8a8a8\"],fontSize:\"11px\"}},tooltip:{enabled:!1},crosshairs:{show:!1}}}}},{key:\"radialBar\",value:function(){return{chart:{animations:{dynamicAnimation:{enabled:!0,speed:800}},toolbar:{show:!1}},fill:{gradient:{shade:\"dark\",shadeIntensity:.4,inverseColors:!1,type:\"diagonal2\",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},legend:{show:!1,position:\"right\"},tooltip:{enabled:!1,fillSeriesColor:!0}}}},{key:\"_getBoxTooltip\",value:function(t,e,i,a,r){var s=t.globals.seriesCandleO[e][i],n=t.globals.seriesCandleH[e][i],o=t.globals.seriesCandleM[e][i],l=t.globals.seriesCandleL[e][i],c=t.globals.seriesCandleC[e][i];return t.config.series[e].type&&t.config.series[e].type!==r?'<div class=\"apexcharts-custom-tooltip\">\\n          '.concat(t.config.series[e].name?t.config.series[e].name:\"series-\"+(e+1),\": <strong>\").concat(t.globals.series[e][i],\"</strong>\\n        </div>\"):'<div class=\"apexcharts-tooltip-box apexcharts-tooltip-'.concat(t.config.chart.type,'\">')+\"<div>\".concat(a[0],': <span class=\"value\">')+s+\"</span></div>\"+\"<div>\".concat(a[1],': <span class=\"value\">')+n+\"</span></div>\"+(o?\"<div>\".concat(a[2],': <span class=\"value\">')+o+\"</span></div>\":\"\")+\"<div>\".concat(a[3],': <span class=\"value\">')+l+\"</span></div>\"+\"<div>\".concat(a[4],': <span class=\"value\">')+c+\"</span></div></div>\"}}])&&F(e.prototype,i),t}();function j(t){return j=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},j(t)}function B(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var G=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.opts=e}var e,i;return e=t,(i=[{key:\"init\",value:function(t){var e=t.responsiveOverride,i=this.opts,a=new P,s=new W(i);this.chartType=i.chart.type,i=this.extendYAxis(i),i=this.extendAnnotations(i);var n=a.init(),o={};if(i&&\"object\"===j(i)){var l,c,h,d,u,g,f,p,x={};x=-1!==[\"line\",\"area\",\"bar\",\"candlestick\",\"boxPlot\",\"rangeBar\",\"rangeArea\",\"bubble\",\"scatter\",\"heatmap\",\"treemap\",\"pie\",\"polarArea\",\"donut\",\"radar\",\"radialBar\"].indexOf(i.chart.type)?s[i.chart.type]():s.line(),null!==(l=i.plotOptions)&&void 0!==l&&null!==(c=l.bar)&&void 0!==c&&c.isFunnel&&(x=s.funnel()),i.chart.stacked&&\"bar\"===i.chart.type&&(x=s.stackedBars()),null!==(h=i.chart.brush)&&void 0!==h&&h.enabled&&(x=s.brush(x)),i.chart.stacked&&\"100%\"===i.chart.stackType&&(i=s.stacked100(i)),null!==(d=i.plotOptions)&&void 0!==d&&null!==(u=d.bar)&&void 0!==u&&u.isDumbbell&&(i=s.dumbbell(i)),this.checkForDarkTheme(window.Apex),this.checkForDarkTheme(i),i.xaxis=i.xaxis||window.Apex.xaxis||{},e||(i.xaxis.convertedCatToNumeric=!1),(null!==(g=(i=this.checkForCatToNumericXAxis(this.chartType,x,i)).chart.sparkline)&&void 0!==g&&g.enabled||null!==(f=window.Apex.chart)&&void 0!==f&&null!==(p=f.sparkline)&&void 0!==p&&p.enabled)&&(x=s.sparkline(x)),o=r.extend(n,x)}var b=r.extend(o,window.Apex);return n=r.extend(b,i),this.handleUserInputErrors(n)}},{key:\"checkForCatToNumericXAxis\",value:function(t,e,i){var a,r,s=new W(i),n=(\"bar\"===t||\"boxPlot\"===t)&&(null===(a=i.plotOptions)||void 0===a||null===(r=a.bar)||void 0===r?void 0:r.horizontal),o=\"pie\"===t||\"polarArea\"===t||\"donut\"===t||\"radar\"===t||\"radialBar\"===t||\"heatmap\"===t,l=\"datetime\"!==i.xaxis.type&&\"numeric\"!==i.xaxis.type,c=i.xaxis.tickPlacement?i.xaxis.tickPlacement:e.xaxis&&e.xaxis.tickPlacement;return n||o||!l||\"between\"===c||(i=s.convertCatToNumeric(i)),i}},{key:\"extendYAxis\",value:function(t,e){var i=new P;(void 0===t.yaxis||!t.yaxis||Array.isArray(t.yaxis)&&0===t.yaxis.length)&&(t.yaxis={}),t.yaxis.constructor!==Array&&window.Apex.yaxis&&window.Apex.yaxis.constructor!==Array&&(t.yaxis=r.extend(t.yaxis,window.Apex.yaxis)),t.yaxis.constructor!==Array?t.yaxis=[r.extend(i.yAxis,t.yaxis)]:t.yaxis=r.extendArray(t.yaxis,i.yAxis);var a=!1;t.yaxis.forEach((function(t){t.logarithmic&&(a=!0)}));var s=t.series;return e&&!s&&(s=e.config.series),a&&s.length!==t.yaxis.length&&s.length&&(t.yaxis=s.map((function(e,a){if(e.name||(s[a].name=\"series-\".concat(a+1)),t.yaxis[a])return t.yaxis[a].seriesName=s[a].name,t.yaxis[a];var n=r.extend(i.yAxis,t.yaxis[0]);return n.show=!1,n}))),a&&s.length>1&&s.length!==t.yaxis.length&&console.warn(\"A multi-series logarithmic chart should have equal number of series and y-axes. Please make sure to equalize both.\"),t}},{key:\"extendAnnotations\",value:function(t){return void 0===t.annotations&&(t.annotations={},t.annotations.yaxis=[],t.annotations.xaxis=[],t.annotations.points=[]),t=this.extendYAxisAnnotations(t),t=this.extendXAxisAnnotations(t),this.extendPointAnnotations(t)}},{key:\"extendYAxisAnnotations\",value:function(t){var e=new P;return t.annotations.yaxis=r.extendArray(void 0!==t.annotations.yaxis?t.annotations.yaxis:[],e.yAxisAnnotation),t}},{key:\"extendXAxisAnnotations\",value:function(t){var e=new P;return t.annotations.xaxis=r.extendArray(void 0!==t.annotations.xaxis?t.annotations.xaxis:[],e.xAxisAnnotation),t}},{key:\"extendPointAnnotations\",value:function(t){var e=new P;return t.annotations.points=r.extendArray(void 0!==t.annotations.points?t.annotations.points:[],e.pointAnnotation),t}},{key:\"checkForDarkTheme\",value:function(t){t.theme&&\"dark\"===t.theme.mode&&(t.tooltip||(t.tooltip={}),\"light\"!==t.tooltip.theme&&(t.tooltip.theme=\"dark\"),t.chart.foreColor||(t.chart.foreColor=\"#f6f7f8\"),t.chart.background||(t.chart.background=\"#424242\"),t.theme.palette||(t.theme.palette=\"palette4\"))}},{key:\"handleUserInputErrors\",value:function(t){var e=t;if(e.tooltip.shared&&e.tooltip.intersect)throw new Error(\"tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.\");if(\"bar\"===e.chart.type&&e.plotOptions.bar.horizontal){if(e.yaxis.length>1)throw new Error(\"Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false\");e.yaxis[0].reversed&&(e.yaxis[0].opposite=!0),e.xaxis.tooltip.enabled=!1,e.yaxis[0].tooltip.enabled=!1,e.chart.zoom.enabled=!1}return\"bar\"!==e.chart.type&&\"rangeBar\"!==e.chart.type||e.tooltip.shared&&\"barWidth\"===e.xaxis.crosshairs.width&&e.series.length>1&&(e.xaxis.crosshairs.width=\"tickWidth\"),\"candlestick\"!==e.chart.type&&\"boxPlot\"!==e.chart.type||e.yaxis[0].reversed&&(console.warn(\"Reversed y-axis in \".concat(e.chart.type,\" chart is not supported.\")),e.yaxis[0].reversed=!1),e}}])&&B(e.prototype,i),t}();function V(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var _=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}var e,i;return e=t,(i=[{key:\"initGlobalVars\",value:function(t){t.series=[],t.seriesCandleO=[],t.seriesCandleH=[],t.seriesCandleM=[],t.seriesCandleL=[],t.seriesCandleC=[],t.seriesRangeStart=[],t.seriesRangeEnd=[],t.seriesRange=[],t.seriesPercent=[],t.seriesGoals=[],t.seriesX=[],t.seriesZ=[],t.seriesNames=[],t.seriesTotals=[],t.seriesLog=[],t.seriesColors=[],t.stackedSeriesTotals=[],t.seriesXvalues=[],t.seriesYvalues=[],t.labels=[],t.hasXaxisGroups=!1,t.groups=[],t.hasSeriesGroups=!1,t.seriesGroups=[],t.categoryLabels=[],t.timescaleLabels=[],t.noLabelsProvided=!1,t.resizeTimer=null,t.selectionResizeTimer=null,t.delayedElements=[],t.pointsArray=[],t.dataLabelsRects=[],t.isXNumeric=!1,t.skipLastTimelinelabel=!1,t.skipFirstTimelinelabel=!1,t.isDataXYZ=!1,t.isMultiLineX=!1,t.isMultipleYAxis=!1,t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE,t.minYArr=[],t.maxYArr=[],t.maxX=-Number.MAX_VALUE,t.minX=Number.MAX_VALUE,t.initialMaxX=-Number.MAX_VALUE,t.initialMinX=Number.MAX_VALUE,t.maxDate=0,t.minDate=Number.MAX_VALUE,t.minZ=Number.MAX_VALUE,t.maxZ=-Number.MAX_VALUE,t.minXDiff=Number.MAX_VALUE,t.yAxisScale=[],t.xAxisScale=null,t.xAxisTicksPositions=[],t.yLabelsCoords=[],t.yTitleCoords=[],t.barPadForNumericAxis=0,t.padHorizontal=0,t.xRange=0,t.yRange=[],t.zRange=0,t.dataPoints=0,t.xTickAmount=0}},{key:\"globalVars\",value:function(t){return{chartID:null,cuid:null,events:{beforeMount:[],mounted:[],updated:[],clicked:[],selection:[],dataPointSelection:[],zoomed:[],scrolled:[]},colors:[],clientX:null,clientY:null,fill:{colors:[]},stroke:{colors:[]},dataLabels:{style:{colors:[]}},radarPolygons:{fill:{colors:[]}},markers:{colors:[],size:t.markers.size,largestSize:0},animationEnded:!1,isTouchDevice:\"ontouchstart\"in window||navigator.msMaxTouchPoints,isDirty:!1,isExecCalled:!1,initialConfig:null,initialSeries:[],lastXAxis:[],lastYAxis:[],columnSeries:null,labels:[],timescaleLabels:[],noLabelsProvided:!1,allSeriesCollapsed:!1,collapsedSeries:[],collapsedSeriesIndices:[],ancillaryCollapsedSeries:[],ancillaryCollapsedSeriesIndices:[],risingSeries:[],dataFormatXNumeric:!1,capturedSeriesIndex:-1,capturedDataPointIndex:-1,selectedDataPoints:[],goldenPadding:35,invalidLogScale:!1,ignoreYAxisIndexes:[],yAxisSameScaleIndices:[],maxValsInArrayIndex:0,radialSize:0,selection:void 0,zoomEnabled:\"zoom\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.zoom&&t.chart.zoom.enabled,panEnabled:\"pan\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.pan,selectionEnabled:\"selection\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.selection,yaxis:null,mousedown:!1,lastClientPosition:{},visibleXRange:void 0,yValueDecimal:0,total:0,SVGNS:\"http://www.w3.org/2000/svg\",svgWidth:0,svgHeight:0,noData:!1,locale:{},dom:{},memory:{methodsToExec:[]},shouldAnimate:!0,skipLastTimelinelabel:!1,skipFirstTimelinelabel:!1,delayedElements:[],axisCharts:!0,isDataXYZ:!1,resized:!1,resizeTimer:null,comboCharts:!1,dataChanged:!1,previousPaths:[],allSeriesHasEqualX:!0,pointsArray:[],dataLabelsRects:[],lastDrawnDataLabelsIndexes:[],hasNullValues:!1,easing:null,zoomed:!1,gridWidth:0,gridHeight:0,rotateXLabels:!1,defaultLabels:!1,xLabelFormatter:void 0,yLabelFormatters:[],xaxisTooltipFormatter:void 0,ttKeyFormatter:void 0,ttVal:void 0,ttZFormatter:void 0,LINE_HEIGHT_RATIO:1.618,xAxisLabelsHeight:0,xAxisGroupLabelsHeight:0,xAxisLabelsWidth:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null}}},{key:\"init\",value:function(t){var e=this.globalVars(t);return this.initGlobalVars(e),e.initialConfig=r.extend({},t),e.initialSeries=r.clone(t.series),e.lastXAxis=r.clone(e.initialConfig.xaxis),e.lastYAxis=r.clone(e.initialConfig.yaxis),e}}])&&V(e.prototype,i),t}();function U(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var q=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.opts=e}var e,i;return e=t,(i=[{key:\"init\",value:function(){var t=new G(this.opts).init({responsiveOverride:!1});return{config:t,globals:(new _).init(t)}}}])&&U(e.prototype,i),t}();function Z(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function $(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?Z(Object(i),!0).forEach((function(e){J(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Z(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function J(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function Q(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const K=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.opts=null,this.seriesIndex=0}var e,i;return e=t,(i=[{key:\"clippedImgArea\",value:function(t){var e=this.w,i=e.config,a=parseInt(e.globals.gridWidth,10),r=parseInt(e.globals.gridHeight,10),s=a>r?a:r,n=t.image,o=0,l=0;void 0===t.width&&void 0===t.height?void 0!==i.fill.image.width&&void 0!==i.fill.image.height?(o=i.fill.image.width+1,l=i.fill.image.height):(o=s+1,l=s):(o=t.width,l=t.height);var c=document.createElementNS(e.globals.SVGNS,\"pattern\");g.setAttrs(c,{id:t.patternID,patternUnits:t.patternUnits?t.patternUnits:\"userSpaceOnUse\",width:o+\"px\",height:l+\"px\"});var h=document.createElementNS(e.globals.SVGNS,\"image\");c.appendChild(h),h.setAttributeNS(window.SVG.xlink,\"href\",n),g.setAttrs(h,{x:0,y:0,preserveAspectRatio:\"none\",width:o+\"px\",height:l+\"px\"}),h.style.opacity=t.opacity,e.globals.dom.elDefs.node.appendChild(c)}},{key:\"getSeriesIndex\",value:function(t){var e=this.w,i=e.config.chart.type;return(\"bar\"===i||\"rangeBar\"===i)&&e.config.plotOptions.bar.distributed||\"heatmap\"===i||\"treemap\"===i?this.seriesIndex=t.seriesNumber:this.seriesIndex=t.seriesNumber%e.globals.series.length,this.seriesIndex}},{key:\"fillPath\",value:function(t){var e=this.w;this.opts=t;var i,a,s,n=this.w.config;this.seriesIndex=this.getSeriesIndex(t);var o=this.getFillColors()[this.seriesIndex];void 0!==e.globals.seriesColors[this.seriesIndex]&&(o=e.globals.seriesColors[this.seriesIndex]),\"function\"==typeof o&&(o=o({seriesIndex:this.seriesIndex,dataPointIndex:t.dataPointIndex,value:t.value,w:e}));var l=t.fillType?t.fillType:this.getFillType(this.seriesIndex),c=Array.isArray(n.fill.opacity)?n.fill.opacity[this.seriesIndex]:n.fill.opacity;t.color&&(o=t.color);var h=o;if(-1===o.indexOf(\"rgb\")?o.length<9&&(h=r.hexToRgba(o,c)):o.indexOf(\"rgba\")>-1&&(c=r.getOpacityFromRGBA(o)),t.opacity&&(c=t.opacity),\"pattern\"===l&&(a=this.handlePatternFill({fillConfig:t.fillConfig,patternFill:a,fillColor:o,fillOpacity:c,defaultColor:h})),\"gradient\"===l&&(s=this.handleGradientFill({fillConfig:t.fillConfig,fillColor:o,fillOpacity:c,i:this.seriesIndex})),\"image\"===l){var d=n.fill.image.src,u=t.patternID?t.patternID:\"\";this.clippedImgArea({opacity:c,image:Array.isArray(d)?t.seriesNumber<d.length?d[t.seriesNumber]:d[0]:d,width:t.width?t.width:void 0,height:t.height?t.height:void 0,patternUnits:t.patternUnits,patternID:\"pattern\".concat(e.globals.cuid).concat(t.seriesNumber+1).concat(u)}),i=\"url(#pattern\".concat(e.globals.cuid).concat(t.seriesNumber+1).concat(u,\")\")}else i=\"gradient\"===l?s:\"pattern\"===l?a:h;return t.solid&&(i=h),i}},{key:\"getFillType\",value:function(t){var e=this.w;return Array.isArray(e.config.fill.type)?e.config.fill.type[t]:e.config.fill.type}},{key:\"getFillColors\",value:function(){var t=this.w,e=t.config,i=this.opts,a=[];return t.globals.comboCharts?\"line\"===t.config.series[this.seriesIndex].type?Array.isArray(t.globals.stroke.colors)?a=t.globals.stroke.colors:a.push(t.globals.stroke.colors):Array.isArray(t.globals.fill.colors)?a=t.globals.fill.colors:a.push(t.globals.fill.colors):\"line\"===e.chart.type?Array.isArray(t.globals.stroke.colors)?a=t.globals.stroke.colors:a.push(t.globals.stroke.colors):Array.isArray(t.globals.fill.colors)?a=t.globals.fill.colors:a.push(t.globals.fill.colors),void 0!==i.fillColors&&(a=[],Array.isArray(i.fillColors)?a=i.fillColors.slice():a.push(i.fillColors)),a}},{key:\"handlePatternFill\",value:function(t){var e=t.fillConfig,i=(t.patternFill,t.fillColor),a=t.fillOpacity,r=t.defaultColor,s=this.w.config.fill;e&&(s=e);var n=this.opts,o=new g(this.ctx),l=Array.isArray(s.pattern.strokeWidth)?s.pattern.strokeWidth[this.seriesIndex]:s.pattern.strokeWidth,c=i;return Array.isArray(s.pattern.style)?void 0!==s.pattern.style[n.seriesNumber]?o.drawPattern(s.pattern.style[n.seriesNumber],s.pattern.width,s.pattern.height,c,l,a):r:o.drawPattern(s.pattern.style,s.pattern.width,s.pattern.height,c,l,a)}},{key:\"handleGradientFill\",value:function(t){var e=t.fillColor,i=t.fillOpacity,a=t.fillConfig,s=t.i,n=this.w.config.fill;a&&(n=$($({},n),a));var o,l=this.opts,c=new g(this.ctx),h=new r,d=n.gradient.type,u=e,f=void 0===n.gradient.opacityFrom?i:Array.isArray(n.gradient.opacityFrom)?n.gradient.opacityFrom[s]:n.gradient.opacityFrom;u.indexOf(\"rgba\")>-1&&(f=r.getOpacityFromRGBA(u));var p=void 0===n.gradient.opacityTo?i:Array.isArray(n.gradient.opacityTo)?n.gradient.opacityTo[s]:n.gradient.opacityTo;if(void 0===n.gradient.gradientToColors||0===n.gradient.gradientToColors.length)o=\"dark\"===n.gradient.shade?h.shadeColor(-1*parseFloat(n.gradient.shadeIntensity),e.indexOf(\"rgb\")>-1?r.rgb2hex(e):e):h.shadeColor(parseFloat(n.gradient.shadeIntensity),e.indexOf(\"rgb\")>-1?r.rgb2hex(e):e);else if(n.gradient.gradientToColors[l.seriesNumber]){var x=n.gradient.gradientToColors[l.seriesNumber];o=x,x.indexOf(\"rgba\")>-1&&(p=r.getOpacityFromRGBA(x))}else o=e;if(n.gradient.gradientFrom&&(u=n.gradient.gradientFrom),n.gradient.gradientTo&&(o=n.gradient.gradientTo),n.gradient.inverseColors){var b=u;u=o,o=b}return u.indexOf(\"rgb\")>-1&&(u=r.rgb2hex(u)),o.indexOf(\"rgb\")>-1&&(o=r.rgb2hex(o)),c.drawGradient(d,u,o,f,p,l.size,n.gradient.stops,n.gradient.colorStops,s)}}])&&Q(e.prototype,i),t}();function tt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var et=function(){function t(e,i){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,i=[{key:\"setGlobalMarkerSize\",value:function(){var t=this.w;if(t.globals.markers.size=Array.isArray(t.config.markers.size)?t.config.markers.size:[t.config.markers.size],t.globals.markers.size.length>0){if(t.globals.markers.size.length<t.globals.series.length+1)for(var e=0;e<=t.globals.series.length;e++)void 0===t.globals.markers.size[e]&&t.globals.markers.size.push(t.globals.markers.size[0])}else t.globals.markers.size=t.config.series.map((function(e){return t.config.markers.size}))}},{key:\"plotChartMarkers\",value:function(t,e,i,a){var s,n=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=this.w,c=e,h=t,d=null,u=new g(this.ctx),f=o.config.markers.discrete&&o.config.markers.discrete.length;if((o.globals.markers.size[e]>0||n||f)&&(d=u.group({class:n||f?\"\":\"apexcharts-series-markers\"})).attr(\"clip-path\",\"url(#gridRectMarkerMask\".concat(o.globals.cuid,\")\")),Array.isArray(h.x))for(var p=0;p<h.x.length;p++){var x=i;1===i&&0===p&&(x=0),1===i&&1===p&&(x=1);var b=\"apexcharts-marker\";if(\"line\"!==o.config.chart.type&&\"area\"!==o.config.chart.type||o.globals.comboCharts||o.config.tooltip.intersect||(b+=\" no-pointer-events\"),(Array.isArray(o.config.markers.size)?o.globals.markers.size[e]>0:o.config.markers.size>0)||n||f){r.isNumber(h.y[p])?b+=\" w\".concat(r.randomId()):b=\"apexcharts-nullpoint\";var v=this.getMarkerConfig({cssClass:b,seriesIndex:e,dataPointIndex:x});o.config.series[c].data[x]&&(o.config.series[c].data[x].fillColor&&(v.pointFillColor=o.config.series[c].data[x].fillColor),o.config.series[c].data[x].strokeColor&&(v.pointStrokeColor=o.config.series[c].data[x].strokeColor)),a&&(v.pSize=a),(h.x[p]<0||h.x[p]>o.globals.gridWidth||h.y[p]<0||h.y[p]>o.globals.gridHeight)&&(v.pSize=0),(s=u.drawMarker(h.x[p],h.y[p],v)).attr(\"rel\",x),s.attr(\"j\",x),s.attr(\"index\",e),s.node.setAttribute(\"default-marker-size\",v.pSize),new l(this.ctx).setSelectionFilter(s,e,x),this.addEvents(s),d&&d.add(s)}else void 0===o.globals.pointsArray[e]&&(o.globals.pointsArray[e]=[]),o.globals.pointsArray[e].push([h.x[p],h.y[p]])}return d}},{key:\"getMarkerConfig\",value:function(t){var e=t.cssClass,i=t.seriesIndex,a=t.dataPointIndex,r=void 0===a?null:a,s=t.finishRadius,n=void 0===s?null:s,o=this.w,l=this.getMarkerStyle(i),c=o.globals.markers.size[i],h=o.config.markers;return null!==r&&h.discrete.length&&h.discrete.map((function(t){t.seriesIndex===i&&t.dataPointIndex===r&&(l.pointStrokeColor=t.strokeColor,l.pointFillColor=t.fillColor,c=t.size,l.pointShape=t.shape)})),{pSize:null===n?c:n,pRadius:h.radius,width:Array.isArray(h.width)?h.width[i]:h.width,height:Array.isArray(h.height)?h.height[i]:h.height,pointStrokeWidth:Array.isArray(h.strokeWidth)?h.strokeWidth[i]:h.strokeWidth,pointStrokeColor:l.pointStrokeColor,pointFillColor:l.pointFillColor,shape:l.pointShape||(Array.isArray(h.shape)?h.shape[i]:h.shape),class:e,pointStrokeOpacity:Array.isArray(h.strokeOpacity)?h.strokeOpacity[i]:h.strokeOpacity,pointStrokeDashArray:Array.isArray(h.strokeDashArray)?h.strokeDashArray[i]:h.strokeDashArray,pointFillOpacity:Array.isArray(h.fillOpacity)?h.fillOpacity[i]:h.fillOpacity,seriesIndex:i}}},{key:\"addEvents\",value:function(t){var e=this.w,i=new g(this.ctx);t.node.addEventListener(\"mouseenter\",i.pathMouseEnter.bind(this.ctx,t)),t.node.addEventListener(\"mouseleave\",i.pathMouseLeave.bind(this.ctx,t)),t.node.addEventListener(\"mousedown\",i.pathMouseDown.bind(this.ctx,t)),t.node.addEventListener(\"click\",e.config.markers.onClick),t.node.addEventListener(\"dblclick\",e.config.markers.onDblClick),t.node.addEventListener(\"touchstart\",i.pathMouseDown.bind(this.ctx,t),{passive:!0})}},{key:\"getMarkerStyle\",value:function(t){var e=this.w,i=e.globals.markers.colors,a=e.config.markers.strokeColor||e.config.markers.strokeColors;return{pointStrokeColor:Array.isArray(a)?a[t]:a,pointFillColor:Array.isArray(i)?i[t]:i}}}],i&&tt(e.prototype,i),t}();function it(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var at=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled}var e,i;return e=t,(i=[{key:\"draw\",value:function(t,e,i){var a=this.w,r=new g(this.ctx),s=i.realIndex,n=i.pointsPos,o=i.zRatio,l=i.elParent,c=r.group({class:\"apexcharts-series-markers apexcharts-series-\".concat(a.config.chart.type)});if(c.attr(\"clip-path\",\"url(#gridRectMarkerMask\".concat(a.globals.cuid,\")\")),Array.isArray(n.x))for(var h=0;h<n.x.length;h++){var d=e+1,u=!0;0===e&&0===h&&(d=0),0===e&&1===h&&(d=1);var f=0,p=a.globals.markers.size[s];if(o!==1/0){var x=a.config.plotOptions.bubble;p=a.globals.seriesZ[s][d],x.zScaling&&(p/=o),x.minBubbleRadius&&p<x.minBubbleRadius&&(p=x.minBubbleRadius),x.maxBubbleRadius&&p>x.maxBubbleRadius&&(p=x.maxBubbleRadius)}a.config.chart.animations.enabled||(f=p);var b=n.x[h],v=n.y[h];if(f=f||0,null!==v&&void 0!==a.globals.series[s][d]||(u=!1),u){var m=this.drawPoint(b,v,f,p,s,d,e);c.add(m)}l.add(c)}}},{key:\"drawPoint\",value:function(t,e,i,a,r,s,o){var c=this.w,h=r,d=new n(this.ctx),u=new l(this.ctx),f=new K(this.ctx),p=new et(this.ctx),x=new g(this.ctx),b=p.getMarkerConfig({cssClass:\"apexcharts-marker\",seriesIndex:h,dataPointIndex:s,finishRadius:\"bubble\"===c.config.chart.type||c.globals.comboCharts&&c.config.series[r]&&\"bubble\"===c.config.series[r].type?a:null});a=b.pSize;var v,m=f.fillPath({seriesNumber:r,dataPointIndex:s,color:b.pointFillColor,patternUnits:\"objectBoundingBox\",value:c.globals.series[r][o]});if(\"circle\"===b.shape?v=x.drawCircle(i):\"square\"!==b.shape&&\"rect\"!==b.shape||(v=x.drawRect(0,0,b.width-b.pointStrokeWidth/2,b.height-b.pointStrokeWidth/2,b.pRadius)),c.config.series[h].data[s]&&c.config.series[h].data[s].fillColor&&(m=c.config.series[h].data[s].fillColor),v.attr({x:t-b.width/2-b.pointStrokeWidth/2,y:e-b.height/2-b.pointStrokeWidth/2,cx:t,cy:e,fill:m,\"fill-opacity\":b.pointFillOpacity,stroke:b.pointStrokeColor,r:a,\"stroke-width\":b.pointStrokeWidth,\"stroke-dasharray\":b.pointStrokeDashArray,\"stroke-opacity\":b.pointStrokeOpacity}),c.config.chart.dropShadow.enabled){var y=c.config.chart.dropShadow;u.dropShadow(v,y,r)}if(!this.initialAnim||c.globals.dataChanged||c.globals.resized)c.globals.animationEnded=!0;else{var w=c.config.chart.animations.speed;d.animateMarker(v,0,\"circle\"===b.shape?a:{width:b.width,height:b.height},w,c.globals.easing,(function(){window.setTimeout((function(){d.animationCompleted(v)}),100)}))}if(c.globals.dataChanged&&\"circle\"===b.shape)if(this.dynamicAnim){var k,A,S,C,P=c.config.chart.animations.dynamicAnimation.speed;null!=(C=c.globals.previousPaths[r]&&c.globals.previousPaths[r][o])&&(k=C.x,A=C.y,S=void 0!==C.r?C.r:a);for(var L=0;L<c.globals.collapsedSeries.length;L++)c.globals.collapsedSeries[L].index===r&&(P=1,a=0);0===t&&0===e&&(a=0),d.animateCircle(v,{cx:k,cy:A,r:S},{cx:t,cy:e,r:a},P,c.globals.easing)}else v.attr({r:a});return v.attr({rel:s,j:s,index:r,\"default-marker-size\":a}),u.setSelectionFilter(v,r,s),p.addEvents(v),v.node.classList.add(\"apexcharts-marker\"),v}},{key:\"centerTextInBubble\",value:function(t){var e=this.w;return{y:t+=parseInt(e.config.dataLabels.style.fontSize,10)/4}}}])&&it(e.prototype,i),t}();function rt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const st=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,(i=[{key:\"dataLabelsCorrection\",value:function(t,e,i,a,r,s,n){var o=this.w,l=!1,c=new g(this.ctx).getTextRects(i,n),h=c.width,d=c.height;e<0&&(e=0),e>o.globals.gridHeight+d&&(e=o.globals.gridHeight+d/2),void 0===o.globals.dataLabelsRects[a]&&(o.globals.dataLabelsRects[a]=[]),o.globals.dataLabelsRects[a].push({x:t,y:e,width:h,height:d});var u=o.globals.dataLabelsRects[a].length-2,f=void 0!==o.globals.lastDrawnDataLabelsIndexes[a]?o.globals.lastDrawnDataLabelsIndexes[a][o.globals.lastDrawnDataLabelsIndexes[a].length-1]:0;if(void 0!==o.globals.dataLabelsRects[a][u]){var p=o.globals.dataLabelsRects[a][f];(t>p.x+p.width+2||e>p.y+p.height+2||t+h<p.x)&&(l=!0)}return(0===r||s)&&(l=!0),{x:t,y:e,textRects:c,drawnextLabel:l}}},{key:\"drawDataLabel\",value:function(t){var e=this,i=t.type,a=t.pos,r=t.i,s=t.j,n=t.isRangeStart,o=t.strokeWidth,l=void 0===o?2:o,c=this.w,h=new g(this.ctx),d=c.config.dataLabels,u=0,f=0,p=s,x=null;if(!d.enabled||!Array.isArray(a.x))return x;x=h.group({class:\"apexcharts-data-labels\"});for(var b=0;b<a.x.length;b++)if(u=a.x[b]+d.offsetX,f=a.y[b]+d.offsetY+l,!isNaN(u)){1===s&&0===b&&(p=0),1===s&&1===b&&(p=1);var v=c.globals.series[r][p];\"rangeArea\"===i&&(v=n?c.globals.seriesRangeStart[r][p]:c.globals.seriesRangeEnd[r][p]);var m=\"\",y=function(t){return c.config.dataLabels.formatter(t,{ctx:e.ctx,seriesIndex:r,dataPointIndex:p,w:c})};\"bubble\"===c.config.chart.type?(m=y(v=c.globals.seriesZ[r][p]),f=a.y[b],f=new at(this.ctx).centerTextInBubble(f,r,p).y):void 0!==v&&(m=y(v)),this.plotDataLabelsText({x:u,y:f,text:m,i:r,j:p,parent:x,offsetCorrection:!0,dataLabelsConfig:c.config.dataLabels})}return x}},{key:\"plotDataLabelsText\",value:function(t){var e=this.w,i=new g(this.ctx),a=t.x,r=t.y,s=t.i,n=t.j,o=t.text,c=t.textAnchor,h=t.fontSize,d=t.parent,u=t.dataLabelsConfig,f=t.color,p=t.alwaysDrawDataLabel,x=t.offsetCorrection;if(!(Array.isArray(e.config.dataLabels.enabledOnSeries)&&e.config.dataLabels.enabledOnSeries.indexOf(s)<0)){var b={x:a,y:r,drawnextLabel:!0,textRects:null};x&&(b=this.dataLabelsCorrection(a,r,o,s,n,p,parseInt(u.style.fontSize,10))),e.globals.zoomed||(a=b.x,r=b.y),b.textRects&&(a<-10-b.textRects.width||a>e.globals.gridWidth+b.textRects.width+10)&&(o=\"\");var v=e.globals.dataLabels.style.colors[s];((\"bar\"===e.config.chart.type||\"rangeBar\"===e.config.chart.type)&&e.config.plotOptions.bar.distributed||e.config.dataLabels.distributed)&&(v=e.globals.dataLabels.style.colors[n]),\"function\"==typeof v&&(v=v({series:e.globals.series,seriesIndex:s,dataPointIndex:n,w:e})),f&&(v=f);var m=u.offsetX,y=u.offsetY;if(\"bar\"!==e.config.chart.type&&\"rangeBar\"!==e.config.chart.type||(m=0,y=0),b.drawnextLabel){var w=i.drawText({width:100,height:parseInt(u.style.fontSize,10),x:a+m,y:r+y,foreColor:v,textAnchor:c||u.textAnchor,text:o,fontSize:h||u.style.fontSize,fontFamily:u.style.fontFamily,fontWeight:u.style.fontWeight||\"normal\"});if(w.attr({class:\"apexcharts-datalabel\",cx:a,cy:r}),u.dropShadow.enabled){var k=u.dropShadow;new l(this.ctx).dropShadow(w,k)}d.add(w),void 0===e.globals.lastDrawnDataLabelsIndexes[s]&&(e.globals.lastDrawnDataLabelsIndexes[s]=[]),e.globals.lastDrawnDataLabelsIndexes[s].push(n)}}}},{key:\"addBackgroundToDataLabel\",value:function(t,e){var i=this.w,a=i.config.dataLabels.background,r=a.padding,s=a.padding/2,n=e.width,o=e.height,c=new g(this.ctx).drawRect(e.x-r,e.y-s/2,n+2*r,o+s,a.borderRadius,\"transparent\"===i.config.chart.background?\"#fff\":i.config.chart.background,a.opacity,a.borderWidth,a.borderColor);return a.dropShadow.enabled&&new l(this.ctx).dropShadow(c,a.dropShadow),c}},{key:\"dataLabelsBackground\",value:function(){var t=this.w;if(\"bubble\"!==t.config.chart.type)for(var e=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-datalabels text\"),i=0;i<e.length;i++){var a=e[i],r=a.getBBox(),s=null;if(r.width&&r.height&&(s=this.addBackgroundToDataLabel(a,r)),s){a.parentNode.insertBefore(s.node,a);var n=a.getAttribute(\"fill\");!t.config.chart.animations.enabled||t.globals.resized||t.globals.dataChanged?s.attr({fill:n}):s.animate().attr({fill:n}),a.setAttribute(\"fill\",t.config.dataLabels.background.foreColor)}}}},{key:\"bringForward\",value:function(){for(var t=this.w,e=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-datalabels\"),i=t.globals.dom.baseEl.querySelector(\".apexcharts-plot-series:last-child\"),a=0;a<e.length;a++)i&&i.insertBefore(e[a],i.nextSibling)}}])&&rt(e.prototype,i),t}();function nt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var ot=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.legendInactiveClass=\"legend-mouseover-inactive\"}var e,i;return e=t,i=[{key:\"getAllSeriesEls\",value:function(){return this.w.globals.dom.baseEl.getElementsByClassName(\"apexcharts-series\")}},{key:\"getSeriesByName\",value:function(t){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-inner .apexcharts-series[seriesName='\".concat(r.escapeString(t),\"']\"))}},{key:\"isSeriesHidden\",value:function(t){var e=this.getSeriesByName(t),i=parseInt(e.getAttribute(\"data:realIndex\"),10);return{isHidden:e.classList.contains(\"apexcharts-series-collapsed\"),realIndex:i}}},{key:\"addCollapsedClassToSeries\",value:function(t,e){var i=this.w;function a(i){for(var a=0;a<i.length;a++)i[a].index===e&&t.node.classList.add(\"apexcharts-series-collapsed\")}a(i.globals.collapsedSeries),a(i.globals.ancillaryCollapsedSeries)}},{key:\"toggleSeries\",value:function(t){var e=this.isSeriesHidden(t);return this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,e.isHidden),e.isHidden}},{key:\"showSeries\",value:function(t){var e=this.isSeriesHidden(t);e.isHidden&&this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,!0)}},{key:\"hideSeries\",value:function(t){var e=this.isSeriesHidden(t);e.isHidden||this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,!1)}},{key:\"resetSeries\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=this.w,s=r.clone(a.globals.initialSeries);a.globals.previousPaths=[],i?(a.globals.collapsedSeries=[],a.globals.ancillaryCollapsedSeries=[],a.globals.collapsedSeriesIndices=[],a.globals.ancillaryCollapsedSeriesIndices=[]):s=this.emptyCollapsedSeries(s),a.config.series=s,t&&(e&&(a.globals.zoomed=!1,this.ctx.updateHelpers.revertDefaultAxisMinMax()),this.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled))}},{key:\"emptyCollapsedSeries\",value:function(t){for(var e=this.w,i=0;i<t.length;i++)e.globals.collapsedSeriesIndices.indexOf(i)>-1&&(t[i].data=[]);return t}},{key:\"toggleSeriesOnHover\",value:function(t,e){var i=this.w;e||(e=t.target);var a=i.globals.dom.baseEl.querySelectorAll(\".apexcharts-series, .apexcharts-datalabels\");if(\"mousemove\"===t.type){var r=parseInt(e.getAttribute(\"rel\"),10)-1,s=null,n=null;i.globals.axisCharts||\"radialBar\"===i.config.chart.type?i.globals.axisCharts?(s=i.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(r,\"']\")),n=i.globals.dom.baseEl.querySelector(\".apexcharts-datalabels[data\\\\:realIndex='\".concat(r,\"']\"))):s=i.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(r+1,\"']\")):s=i.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(r+1,\"'] path\"));for(var o=0;o<a.length;o++)a[o].classList.add(this.legendInactiveClass);null!==s&&(i.globals.axisCharts||s.parentNode.classList.remove(this.legendInactiveClass),s.classList.remove(this.legendInactiveClass),null!==n&&n.classList.remove(this.legendInactiveClass))}else if(\"mouseout\"===t.type)for(var l=0;l<a.length;l++)a[l].classList.remove(this.legendInactiveClass)}},{key:\"highlightRangeInSeries\",value:function(t,e){var i=this,a=this.w,r=a.globals.dom.baseEl.getElementsByClassName(\"apexcharts-heatmap-rect\"),s=function(t){for(var e=0;e<r.length;e++)r[e].classList[t](i.legendInactiveClass)};if(\"mousemove\"===t.type){var n=parseInt(e.getAttribute(\"rel\"),10)-1;s(\"add\"),function(t){for(var e=0;e<r.length;e++){var a=parseInt(r[e].getAttribute(\"val\"),10);a>=t.from&&a<=t.to&&r[e].classList.remove(i.legendInactiveClass)}}(a.config.plotOptions.heatmap.colorScale.ranges[n])}else\"mouseout\"===t.type&&s(\"remove\")}},{key:\"getActiveConfigSeriesIndex\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"asc\",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=this.w,a=0;if(i.config.series.length>1)for(var r=i.config.series.map((function(t,a){return t.data&&t.data.length>0&&-1===i.globals.collapsedSeriesIndices.indexOf(a)&&(!i.globals.comboCharts||0===e.length||e.length&&e.indexOf(i.config.series[a].type)>-1)?a:-1})),s=\"asc\"===t?0:r.length-1;\"asc\"===t?s<r.length:s>=0;\"asc\"===t?s++:s--)if(-1!==r[s]){a=r[s];break}return a}},{key:\"getBarSeriesIndices\",value:function(){return this.w.globals.comboCharts?this.w.config.series.map((function(t,e){return\"bar\"===t.type||\"column\"===t.type?e:-1})).filter((function(t){return-1!==t})):this.w.config.series.map((function(t,e){return e}))}},{key:\"getPreviousPaths\",value:function(){var t=this.w;function e(e,i,a){for(var r=e[i].childNodes,s={type:a,paths:[],realIndex:e[i].getAttribute(\"data:realIndex\")},n=0;n<r.length;n++)if(r[n].hasAttribute(\"pathTo\")){var o=r[n].getAttribute(\"pathTo\");s.paths.push({d:o})}t.globals.previousPaths.push(s)}t.globals.previousPaths=[],[\"line\",\"area\",\"bar\",\"rangebar\",\"rangeArea\",\"candlestick\",\"radar\"].forEach((function(i){for(var a,r=(a=i,t.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(a,\"-series .apexcharts-series\"))),s=0;s<r.length;s++)e(r,s,i)})),this.handlePrevBubbleScatterPaths(\"bubble\"),this.handlePrevBubbleScatterPaths(\"scatter\");var i=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t.config.chart.type,\" .apexcharts-series\"));if(i.length>0)for(var a=function(e){for(var i=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t.config.chart.type,\" .apexcharts-series[data\\\\:realIndex='\").concat(e,\"'] rect\")),a=[],r=function(t){var e=function(e){return i[t].getAttribute(e)},r={x:parseFloat(e(\"x\")),y:parseFloat(e(\"y\")),width:parseFloat(e(\"width\")),height:parseFloat(e(\"height\"))};a.push({rect:r,color:i[t].getAttribute(\"color\")})},s=0;s<i.length;s++)r(s);t.globals.previousPaths.push(a)},r=0;r<i.length;r++)a(r);t.globals.axisCharts||(t.globals.previousPaths=t.globals.series)}},{key:\"handlePrevBubbleScatterPaths\",value:function(t){var e=this.w,i=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t,\"-series .apexcharts-series\"));if(i.length>0)for(var a=0;a<i.length;a++){for(var r=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t,\"-series .apexcharts-series[data\\\\:realIndex='\").concat(a,\"'] circle\")),s=[],n=0;n<r.length;n++)s.push({x:r[n].getAttribute(\"cx\"),y:r[n].getAttribute(\"cy\"),r:r[n].getAttribute(\"r\")});e.globals.previousPaths.push(s)}}},{key:\"clearPreviousPaths\",value:function(){var t=this.w;t.globals.previousPaths=[],t.globals.allSeriesCollapsed=!1}},{key:\"handleNoData\",value:function(){var t=this.w,e=t.config.noData,i=new g(this.ctx),a=t.globals.svgWidth/2,r=t.globals.svgHeight/2,s=\"middle\";if(t.globals.noData=!0,t.globals.animationEnded=!0,\"left\"===e.align?(a=10,s=\"start\"):\"right\"===e.align&&(a=t.globals.svgWidth-10,s=\"end\"),\"top\"===e.verticalAlign?r=50:\"bottom\"===e.verticalAlign&&(r=t.globals.svgHeight-50),a+=e.offsetX,r=r+parseInt(e.style.fontSize,10)+2+e.offsetY,void 0!==e.text&&\"\"!==e.text){var n=i.drawText({x:a,y:r,text:e.text,textAnchor:s,fontSize:e.style.fontSize,fontFamily:e.style.fontFamily,foreColor:e.style.color,opacity:1,class:\"apexcharts-text-nodata\"});t.globals.dom.Paper.add(n)}}},{key:\"setNullSeriesToZeroValues\",value:function(t){for(var e=this.w,i=0;i<t.length;i++)if(0===t[i].length)for(var a=0;a<t[e.globals.maxValsInArrayIndex].length;a++)t[i].push(0);return t}},{key:\"hasAllSeriesEqualX\",value:function(){for(var t=!0,e=this.w,i=this.filteredSeriesX(),a=0;a<i.length-1;a++)if(i[a][0]!==i[a+1][0]){t=!1;break}return e.globals.allSeriesHasEqualX=t,t}},{key:\"filteredSeriesX\",value:function(){return this.w.globals.seriesX.map((function(t){return t.length>0?t:[]}))}}],i&&nt(e.prototype,i),t}();function lt(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}function ct(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var ht=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[],this.seriesGoals=[],this.coreUtils=new p(this.ctx)}var e,i;return e=t,i=[{key:\"isMultiFormat\",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:\"isFormatXY\",value:function(){var t=this.w.config.series.slice(),e=new ot(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&null!==t[this.activeSeriesIndex].data[0]&&void 0!==t[this.activeSeriesIndex].data[0].x&&null!==t[this.activeSeriesIndex].data[0])return!0}},{key:\"isFormat2DArray\",value:function(){var t=this.w.config.series.slice(),e=new ot(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&void 0!==t[this.activeSeriesIndex].data[0]&&null!==t[this.activeSeriesIndex].data[0]&&t[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:\"handleFormat2DArray\",value:function(t,e){for(var i=this.w.config,a=this.w.globals,s=\"boxPlot\"===i.chart.type||\"boxPlot\"===i.series[e].type,n=0;n<t[e].data.length;n++)if(void 0!==t[e].data[n][1]&&(Array.isArray(t[e].data[n][1])&&4===t[e].data[n][1].length&&!s?this.twoDSeries.push(r.parseNumber(t[e].data[n][1][3])):t[e].data[n].length>=5?this.twoDSeries.push(r.parseNumber(t[e].data[n][4])):this.twoDSeries.push(r.parseNumber(t[e].data[n][1])),a.dataFormatXNumeric=!0),\"datetime\"===i.xaxis.type){var o=new Date(t[e].data[n][0]);o=new Date(o).getTime(),this.twoDSeriesX.push(o)}else this.twoDSeriesX.push(t[e].data[n][0]);for(var l=0;l<t[e].data.length;l++)void 0!==t[e].data[l][2]&&(this.threeDSeries.push(t[e].data[l][2]),a.isDataXYZ=!0)}},{key:\"handleFormatXY\",value:function(t,e){var i=this.w.config,a=this.w.globals,s=new M(this.ctx),n=e;a.collapsedSeriesIndices.indexOf(e)>-1&&(n=this.activeSeriesIndex);for(var o=0;o<t[e].data.length;o++)void 0!==t[e].data[o].y&&(Array.isArray(t[e].data[o].y)?this.twoDSeries.push(r.parseNumber(t[e].data[o].y[t[e].data[o].y.length-1])):this.twoDSeries.push(r.parseNumber(t[e].data[o].y))),void 0!==t[e].data[o].goals&&Array.isArray(t[e].data[o].goals)?(void 0===this.seriesGoals[e]&&(this.seriesGoals[e]=[]),this.seriesGoals[e].push(t[e].data[o].goals)):(void 0===this.seriesGoals[e]&&(this.seriesGoals[e]=[]),this.seriesGoals[e].push(null));for(var l=0;l<t[n].data.length;l++){var c=\"string\"==typeof t[n].data[l].x,h=Array.isArray(t[n].data[l].x),d=!h&&!!s.isValidDate(t[n].data[l].x.toString());if(c||d)if(c||i.xaxis.convertedCatToNumeric){var u=a.isBarHorizontal&&a.isRangeData;\"datetime\"!==i.xaxis.type||u?(this.fallbackToCategory=!0,this.twoDSeriesX.push(t[n].data[l].x)):this.twoDSeriesX.push(s.parseDate(t[n].data[l].x))}else\"datetime\"===i.xaxis.type?this.twoDSeriesX.push(s.parseDate(t[n].data[l].x.toString())):(a.dataFormatXNumeric=!0,a.isXNumeric=!0,this.twoDSeriesX.push(parseFloat(t[n].data[l].x)));else h?(this.fallbackToCategory=!0,this.twoDSeriesX.push(t[n].data[l].x)):(a.isXNumeric=!0,a.dataFormatXNumeric=!0,this.twoDSeriesX.push(t[n].data[l].x))}if(t[e].data[0]&&void 0!==t[e].data[0].z){for(var g=0;g<t[e].data.length;g++)this.threeDSeries.push(t[e].data[g].z);a.isDataXYZ=!0}}},{key:\"handleRangeData\",value:function(t,e){var i=this.w.globals,a={};return this.isFormat2DArray()?a=this.handleRangeDataFormat(\"array\",t,e):this.isFormatXY()&&(a=this.handleRangeDataFormat(\"xy\",t,e)),i.seriesRangeStart.push(a.start),i.seriesRangeEnd.push(a.end),i.seriesRange.push(a.rangeUniques),i.seriesRange.forEach((function(t,e){t&&t.forEach((function(t,e){t.y.forEach((function(e,i){for(var a=0;a<t.y.length;a++)if(i!==a){var r=e.y1,s=e.y2,n=t.y[a].y1;r<=t.y[a].y2&&n<=s&&(t.overlaps.indexOf(e.rangeName)<0&&t.overlaps.push(e.rangeName),t.overlaps.indexOf(t.y[a].rangeName)<0&&t.overlaps.push(t.y[a].rangeName))}}))}))})),a}},{key:\"handleCandleStickBoxData\",value:function(t,e){var i=this.w.globals,a={};return this.isFormat2DArray()?a=this.handleCandleStickBoxDataFormat(\"array\",t,e):this.isFormatXY()&&(a=this.handleCandleStickBoxDataFormat(\"xy\",t,e)),i.seriesCandleO[e]=a.o,i.seriesCandleH[e]=a.h,i.seriesCandleM[e]=a.m,i.seriesCandleL[e]=a.l,i.seriesCandleC[e]=a.c,a}},{key:\"handleRangeDataFormat\",value:function(t,e,i){var a=[],s=[],n=e[i].data.filter((function(t,e,i){return e===i.findIndex((function(e){return e.x===t.x}))})).map((function(t,e){return{x:t.x,overlaps:[],y:[]}}));if(\"array\"===t)for(var o=0;o<e[i].data.length;o++)Array.isArray(e[i].data[o])?(a.push(e[i].data[o][1][0]),s.push(e[i].data[o][1][1])):(a.push(e[i].data[o]),s.push(e[i].data[o]));else if(\"xy\"===t)for(var l=function(t){var o=Array.isArray(e[i].data[t].y),l=r.randomId(),c=e[i].data[t].x,h={y1:o?e[i].data[t].y[0]:e[i].data[t].y,y2:o?e[i].data[t].y[1]:e[i].data[t].y,rangeName:l};e[i].data[t].rangeName=l;var d=n.findIndex((function(t){return t.x===c}));n[d].y.push(h),a.push(h.y1),s.push(h.y2)},c=0;c<e[i].data.length;c++)l(c);return{start:a,end:s,rangeUniques:n}}},{key:\"handleCandleStickBoxDataFormat\",value:function(t,e,i){var a=this.w,r=\"boxPlot\"===a.config.chart.type||\"boxPlot\"===a.config.series[i].type,s=[],n=[],o=[],l=[],c=[];if(\"array\"===t)if(r&&6===e[i].data[0].length||!r&&5===e[i].data[0].length)for(var h=0;h<e[i].data.length;h++)s.push(e[i].data[h][1]),n.push(e[i].data[h][2]),r?(o.push(e[i].data[h][3]),l.push(e[i].data[h][4]),c.push(e[i].data[h][5])):(l.push(e[i].data[h][3]),c.push(e[i].data[h][4]));else for(var d=0;d<e[i].data.length;d++)Array.isArray(e[i].data[d][1])&&(s.push(e[i].data[d][1][0]),n.push(e[i].data[d][1][1]),r?(o.push(e[i].data[d][1][2]),l.push(e[i].data[d][1][3]),c.push(e[i].data[d][1][4])):(l.push(e[i].data[d][1][2]),c.push(e[i].data[d][1][3])));else if(\"xy\"===t)for(var u=0;u<e[i].data.length;u++)Array.isArray(e[i].data[u].y)&&(s.push(e[i].data[u].y[0]),n.push(e[i].data[u].y[1]),r?(o.push(e[i].data[u].y[2]),l.push(e[i].data[u].y[3]),c.push(e[i].data[u].y[4])):(l.push(e[i].data[u].y[2]),c.push(e[i].data[u].y[3])));return{o:s,h:n,m:o,l,c}}},{key:\"parseDataAxisCharts\",value:function(t){var e,i,a=this,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.ctx,n=this.w.config,o=this.w.globals,l=new M(s),c=n.labels.length>0?n.labels.slice():n.xaxis.categories.slice();if(o.isRangeBar=\"rangeBar\"===n.chart.type&&o.isBarHorizontal,o.hasXaxisGroups=\"category\"===n.xaxis.type&&n.xaxis.group.groups.length>0,o.hasXaxisGroups&&(o.groups=n.xaxis.group.groups),o.hasSeriesGroups=null===(e=t[0])||void 0===e?void 0:e.group,o.hasSeriesGroups){var h=[],d=function(t){if(Array.isArray(t))return lt(t)}(i=new Set(t.map((function(t){return t.group}))))||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(i)||function(t,e){if(t){if(\"string\"==typeof t)return lt(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?lt(t,e):void 0}}(i)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}();t.forEach((function(t,e){var i=d.indexOf(t.group);h[i]||(h[i]=[]),h[i].push(t.name)})),o.seriesGroups=h}for(var u=function(){for(var t=0;t<c.length;t++)if(\"string\"==typeof c[t]){if(!l.isValidDate(c[t]))throw new Error(\"You have provided invalid Date format. Please provide a valid JavaScript Date\");a.twoDSeriesX.push(l.parseDate(c[t]))}else a.twoDSeriesX.push(c[t])},g=0;g<t.length;g++){if(this.twoDSeries=[],this.twoDSeriesX=[],this.threeDSeries=[],void 0===t[g].data)return void console.error(\"It is a possibility that you may have not included 'data' property in series.\");if(\"rangeBar\"!==n.chart.type&&\"rangeArea\"!==n.chart.type&&\"rangeBar\"!==t[g].type&&\"rangeArea\"!==t[g].type||(o.isRangeData=!0,o.isComboCharts?\"rangeBar\"!==t[g].type&&\"rangeArea\"!==t[g].type||this.handleRangeData(t,g):\"rangeBar\"!==n.chart.type&&\"rangeArea\"!==n.chart.type||this.handleRangeData(t,g)),this.isMultiFormat())this.isFormat2DArray()?this.handleFormat2DArray(t,g):this.isFormatXY()&&this.handleFormatXY(t,g),\"candlestick\"!==n.chart.type&&\"candlestick\"!==t[g].type&&\"boxPlot\"!==n.chart.type&&\"boxPlot\"!==t[g].type||this.handleCandleStickBoxData(t,g),o.series.push(this.twoDSeries),o.labels.push(this.twoDSeriesX),o.seriesX.push(this.twoDSeriesX),o.seriesGoals=this.seriesGoals,g!==this.activeSeriesIndex||this.fallbackToCategory||(o.isXNumeric=!0);else{\"datetime\"===n.xaxis.type?(o.isXNumeric=!0,u(),o.seriesX.push(this.twoDSeriesX)):\"numeric\"===n.xaxis.type&&(o.isXNumeric=!0,c.length>0&&(this.twoDSeriesX=c,o.seriesX.push(this.twoDSeriesX))),o.labels.push(this.twoDSeriesX);var f=t[g].data.map((function(t){return r.parseNumber(t)}));o.series.push(f)}o.seriesZ.push(this.threeDSeries),void 0!==t[g].name?o.seriesNames.push(t[g].name):o.seriesNames.push(\"series-\"+parseInt(g+1,10)),void 0!==t[g].color?o.seriesColors.push(t[g].color):o.seriesColors.push(void 0)}return this.w}},{key:\"parseDataNonAxisCharts\",value:function(t){var e=this.w.globals,i=this.w.config;e.series=t.slice(),e.seriesNames=i.labels.slice();for(var a=0;a<e.series.length;a++)void 0===e.seriesNames[a]&&e.seriesNames.push(\"series-\"+(a+1));return this.w}},{key:\"handleExternalLabelsData\",value:function(t){var e=this.w.config,i=this.w.globals;e.xaxis.categories.length>0?i.labels=e.xaxis.categories:e.labels.length>0?i.labels=e.labels.slice():this.fallbackToCategory?(i.labels=i.labels[0],i.seriesRange.length&&(i.seriesRange.map((function(t){t.forEach((function(t){i.labels.indexOf(t.x)<0&&t.x&&i.labels.push(t.x)}))})),i.labels=Array.from(new Set(i.labels.map(JSON.stringify)),JSON.parse)),e.xaxis.convertedCatToNumeric&&(new W(e).convertCatToNumericXaxis(e,this.ctx,i.seriesX[0]),this._generateExternalLabels(t))):this._generateExternalLabels(t)}},{key:\"_generateExternalLabels\",value:function(t){var e=this.w.globals,i=this.w.config,a=[];if(e.axisCharts){if(e.series.length>0)if(this.isFormatXY())for(var r=i.series.map((function(t,e){return t.data.filter((function(t,e,i){return i.findIndex((function(e){return e.x===t.x}))===e}))})),s=r.reduce((function(t,e,i,a){return a[t].length>e.length?t:i}),0),n=0;n<r[s].length;n++)a.push(n+1);else for(var o=0;o<e.series[e.maxValsInArrayIndex].length;o++)a.push(o+1);e.seriesX=[];for(var l=0;l<t.length;l++)e.seriesX.push(a);e.isXNumeric=!0}if(0===a.length){a=e.axisCharts?[]:e.series.map((function(t,e){return e+1}));for(var c=0;c<t.length;c++)e.seriesX.push(a)}e.labels=a,i.xaxis.convertedCatToNumeric&&(e.categoryLabels=a.map((function(t){return i.xaxis.labels.formatter(t)}))),e.noLabelsProvided=!0}},{key:\"parseData\",value:function(t){var e=this.w,i=e.config,a=e.globals;if(this.excludeCollapsedSeriesInYAxis(),this.fallbackToCategory=!1,this.ctx.core.resetGlobals(),this.ctx.core.isMultipleY(),a.axisCharts?(this.parseDataAxisCharts(t),this.coreUtils.getLargestSeries()):this.parseDataNonAxisCharts(t),i.chart.stacked){var r=new ot(this.ctx);a.series=r.setNullSeriesToZeroValues(a.series)}this.coreUtils.getSeriesTotals(),a.axisCharts&&(a.stackedSeriesTotals=this.coreUtils.getStackedSeriesTotals()),this.coreUtils.getPercentSeries(),a.dataFormatXNumeric||a.isXNumeric&&(\"numeric\"!==i.xaxis.type||0!==i.labels.length||0!==i.xaxis.categories.length)||this.handleExternalLabelsData(t);for(var s=this.coreUtils.getCategoryLabels(a.labels),n=0;n<s.length;n++)if(Array.isArray(s[n])){a.isMultiLineX=!0;break}}},{key:\"excludeCollapsedSeriesInYAxis\",value:function(){var t=this,e=this.w;e.globals.ignoreYAxisIndexes=e.globals.collapsedSeries.map((function(i,a){if(t.w.globals.isMultipleYAxis&&!e.config.chart.stacked)return i.index}))}}],i&&ct(e.prototype,i),t}();function dt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var ut=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,i=[{key:\"getLabel\",value:function(t,e,i,a){var r,s,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"12px\",l=!(arguments.length>6&&void 0!==arguments[6])||arguments[6],c=this.w,h=void 0===t[a]?\"\":t[a],d=h,u=c.globals.xLabelFormatter,f=c.config.xaxis.labels.formatter,p=!1,x=new z(this.ctx),b=h;l&&(d=x.xLabelFormat(u,h,b,{i:a,dateFormatter:new M(this.ctx).formatDate,w:c}),void 0!==f&&(d=f(h,t[a],{i:a,dateFormatter:new M(this.ctx).formatDate,w:c}))),e.length>0?(r=e[a].unit,s=null,e.forEach((function(t){\"month\"===t.unit?s=\"year\":\"day\"===t.unit?s=\"month\":\"hour\"===t.unit?s=\"day\":\"minute\"===t.unit&&(s=\"hour\")})),p=s===r,i=e[a].position,d=e[a].value):\"datetime\"===c.config.xaxis.type&&void 0===f&&(d=\"\"),void 0===d&&(d=\"\"),d=Array.isArray(d)?d:d.toString();var v,m=new g(this.ctx);v=c.globals.rotateXLabels&&l?m.getTextRects(d,parseInt(o,10),null,\"rotate(\".concat(c.config.xaxis.labels.rotate,\" 0 0)\"),!1):m.getTextRects(d,parseInt(o,10));var y=!c.config.xaxis.labels.showDuplicates&&this.ctx.timeScale;return!Array.isArray(d)&&(0===d.indexOf(\"NaN\")||0===d.toLowerCase().indexOf(\"invalid\")||d.toLowerCase().indexOf(\"infinity\")>=0||n.indexOf(d)>=0&&y)&&(d=\"\"),{x:i,text:d,textRect:v,isBold:p}}},{key:\"checkLabelBasedOnTickamount\",value:function(t,e,i){var a=this.w,r=a.config.xaxis.tickAmount;return\"dataPoints\"===r&&(r=Math.round(a.globals.gridWidth/120)),r>i||t%Math.round(i/(r+1))==0||(e.text=\"\"),e}},{key:\"checkForOverflowingLabels\",value:function(t,e,i,a,r){var s=this.w;if(0===t&&s.globals.skipFirstTimelinelabel&&(e.text=\"\"),t===i-1&&s.globals.skipLastTimelinelabel&&(e.text=\"\"),s.config.xaxis.labels.hideOverlappingLabels&&a.length>0){var n=r[r.length-1];e.x<n.textRect.width/(s.globals.rotateXLabels?Math.abs(s.config.xaxis.labels.rotate)/12:1.01)+n.x&&(e.text=\"\")}return e}},{key:\"checkForReversedLabels\",value:function(t,e){var i=this.w;return i.config.yaxis[t]&&i.config.yaxis[t].reversed&&e.reverse(),e}},{key:\"isYAxisHidden\",value:function(t){var e=this.w,i=new p(this.ctx);return!e.config.yaxis[t].show||!e.config.yaxis[t].showForNullSeries&&i.isSeriesNull(t)&&-1===e.globals.collapsedSeriesIndices.indexOf(t)}},{key:\"getYAxisForeColor\",value:function(t,e){var i=this.w;return Array.isArray(t)&&i.globals.yAxisScale[e]&&this.ctx.theme.pushExtraColors(t,i.globals.yAxisScale[e].result.length,!1),t}},{key:\"drawYAxisTicks\",value:function(t,e,i,a,r,s,n){var o=this.w,l=new g(this.ctx),c=o.globals.translateY;if(a.show&&e>0){!0===o.config.yaxis[r].opposite&&(t+=a.width);for(var h=e;h>=0;h--){var d=c+e/10+o.config.yaxis[r].labels.offsetY-1;o.globals.isBarHorizontal&&(d=s*h),\"heatmap\"===o.config.chart.type&&(d+=s/2);var u=l.drawLine(t+i.offsetX-a.width+a.offsetX,d+a.offsetY,t+i.offsetX+a.offsetX,d+a.offsetY,a.color);n.add(u),c+=s}}}}],i&&dt(e.prototype,i),t}();function gt(t){return function(t){if(Array.isArray(t))return ft(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||function(t,e){if(t){if(\"string\"==typeof t)return ft(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?ft(t,e):void 0}}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function ft(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}function pt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const xt=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,(i=[{key:\"scaleSvgNode\",value:function(t,e){var i=parseFloat(t.getAttributeNS(null,\"width\")),a=parseFloat(t.getAttributeNS(null,\"height\"));t.setAttributeNS(null,\"width\",i*e),t.setAttributeNS(null,\"height\",a*e),t.setAttributeNS(null,\"viewBox\",\"0 0 \"+i+\" \"+a)}},{key:\"fixSvgStringForIe11\",value:function(t){if(!r.isIE11())return t.replace(/&nbsp;/g,\"&#160;\");var e=0,i=t.replace(/xmlns=\"http:\\/\\/www.w3.org\\/2000\\/svg\"/g,(function(t){return 2==++e?'xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:svgjs=\"http://svgjs.dev\"':t}));return(i=i.replace(/xmlns:NS\\d+=\"\"/g,\"\")).replace(/NS\\d+:(\\w+:\\w+=\")/g,\"$1\")}},{key:\"getSvgString\",value:function(t){null==t&&(t=1);var e=this.w.globals.dom.Paper.svg();if(1!==t){var i=this.w.globals.dom.Paper.node.cloneNode(!0);this.scaleSvgNode(i,t),e=(new XMLSerializer).serializeToString(i)}return this.fixSvgStringForIe11(e)}},{key:\"cleanup\",value:function(){var t=this.w,e=t.globals.dom.baseEl.getElementsByClassName(\"apexcharts-xcrosshairs\"),i=t.globals.dom.baseEl.getElementsByClassName(\"apexcharts-ycrosshairs\"),a=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-zoom-rect, .apexcharts-selection-rect\");Array.prototype.forEach.call(a,(function(t){t.setAttribute(\"width\",0)})),e&&e[0]&&(e[0].setAttribute(\"x\",-500),e[0].setAttribute(\"x1\",-500),e[0].setAttribute(\"x2\",-500)),i&&i[0]&&(i[0].setAttribute(\"y\",-100),i[0].setAttribute(\"y1\",-100),i[0].setAttribute(\"y2\",-100))}},{key:\"svgUrl\",value:function(){this.cleanup();var t=this.getSvgString(),e=new Blob([t],{type:\"image/svg+xml;charset=utf-8\"});return URL.createObjectURL(e)}},{key:\"dataURI\",value:function(t){var e=this;return new Promise((function(i){var a=e.w,s=t?t.scale||t.width/a.globals.svgWidth:1;e.cleanup();var n=document.createElement(\"canvas\");n.width=a.globals.svgWidth*s,n.height=parseInt(a.globals.dom.elWrap.style.height,10)*s;var o=\"transparent\"===a.config.chart.background?\"#fff\":a.config.chart.background,l=n.getContext(\"2d\");l.fillStyle=o,l.fillRect(0,0,n.width*s,n.height*s);var c=e.getSvgString(s);if(window.canvg&&r.isIE11()){var h=window.canvg.Canvg.fromString(l,c,{ignoreClear:!0,ignoreDimensions:!0});h.start();var d=n.msToBlob();h.stop(),i({blob:d})}else{var u=\"data:image/svg+xml,\"+encodeURIComponent(c),g=new Image;g.crossOrigin=\"anonymous\",g.onload=function(){if(l.drawImage(g,0,0),n.msToBlob){var t=n.msToBlob();i({blob:t})}else{var e=n.toDataURL(\"image/png\");i({imgURI:e})}},g.src=u}}))}},{key:\"exportToSVG\",value:function(){this.triggerDownload(this.svgUrl(),this.w.config.chart.toolbar.export.svg.filename,\".svg\")}},{key:\"exportToPng\",value:function(){var t=this;this.dataURI().then((function(e){var i=e.imgURI,a=e.blob;a?navigator.msSaveOrOpenBlob(a,t.w.globals.chartID+\".png\"):t.triggerDownload(i,t.w.config.chart.toolbar.export.png.filename,\".png\")}))}},{key:\"exportToCSV\",value:function(t){var e=this,i=t.series,a=t.fileName,s=t.columnDelimiter,n=void 0===s?\",\":s,o=t.lineDelimiter,l=void 0===o?\"\\n\":o,c=this.w;i||(i=c.config.series);var h=[],d=[],u=\"\",g=c.globals.series.map((function(t,e){return-1===c.globals.collapsedSeriesIndices.indexOf(e)?t:[]})),f=Math.max.apply(Math,gt(i.map((function(t){return t.data?t.data.length:0})))),p=new ht(this.ctx),x=new ut(this.ctx),b=function(t){var i=\"\";if(c.globals.axisCharts){if(\"category\"===c.config.xaxis.type||c.config.xaxis.convertedCatToNumeric)if(c.globals.isBarHorizontal){var a=c.globals.yLabelFormatters[0],s=new ot(e.ctx).getActiveConfigSeriesIndex();i=a(c.globals.labels[t],{seriesIndex:s,dataPointIndex:t,w:c})}else i=x.getLabel(c.globals.labels,c.globals.timescaleLabels,0,t).text;\"datetime\"===c.config.xaxis.type&&(c.config.xaxis.categories.length?i=c.config.xaxis.categories[t]:c.config.labels.length&&(i=c.config.labels[t]))}else i=c.config.labels[t];return Array.isArray(i)&&(i=i.join(\" \")),r.isNumber(i)?i:i.split(n).join(\"\")};h.push(c.config.chart.toolbar.export.csv.headerCategory),\"boxPlot\"===c.config.chart.type?(h.push(\"minimum\"),h.push(\"q1\"),h.push(\"median\"),h.push(\"q3\"),h.push(\"maximum\")):\"candlestick\"===c.config.chart.type?(h.push(\"open\"),h.push(\"high\"),h.push(\"low\"),h.push(\"close\")):\"rangeBar\"===c.config.chart.type?(h.push(\"minimum\"),h.push(\"maximum\")):i.map((function(t,e){var i=t.name?t.name:\"series-\".concat(e);c.globals.axisCharts&&h.push(i.split(n).join(\"\")?i.split(n).join(\"\"):\"series-\".concat(e))})),c.globals.axisCharts||(h.push(c.config.chart.toolbar.export.csv.headerValue),d.push(h.join(n))),i.map((function(t,e){c.globals.axisCharts?function(t,e){if(h.length&&0===e&&d.push(h.join(n)),t.data){t.data=t.data.length&&t.data||gt(Array(f)).map((function(){return\"\"}));for(var a=0;a<t.data.length;a++){h=[];var s=b(a);if(s||(p.isFormatXY()?s=i[e].data[a].x:p.isFormat2DArray()&&(s=i[e].data[a]?i[e].data[a][0]:\"\")),0===e){h.push((l=s,\"datetime\"===c.config.xaxis.type&&String(l).length>=10?c.config.chart.toolbar.export.csv.dateFormatter(s):r.isNumber(s)?s:s.split(n).join(\"\")));for(var o=0;o<c.globals.series.length;o++)p.isFormatXY()?h.push(i[o].data[a].y):h.push(g[o][a])}(\"candlestick\"===c.config.chart.type||t.type&&\"candlestick\"===t.type)&&(h.pop(),h.push(c.globals.seriesCandleO[e][a]),h.push(c.globals.seriesCandleH[e][a]),h.push(c.globals.seriesCandleL[e][a]),h.push(c.globals.seriesCandleC[e][a])),(\"boxPlot\"===c.config.chart.type||t.type&&\"boxPlot\"===t.type)&&(h.pop(),h.push(c.globals.seriesCandleO[e][a]),h.push(c.globals.seriesCandleH[e][a]),h.push(c.globals.seriesCandleM[e][a]),h.push(c.globals.seriesCandleL[e][a]),h.push(c.globals.seriesCandleC[e][a])),\"rangeBar\"===c.config.chart.type&&(h.pop(),h.push(c.globals.seriesRangeStart[e][a]),h.push(c.globals.seriesRangeEnd[e][a])),h.length&&d.push(h.join(n))}}var l}(t,e):((h=[]).push(c.globals.labels[e].split(n).join(\"\")),h.push(g[e]),d.push(h.join(n)))})),u+=d.join(l),this.triggerDownload(\"data:text/csv; charset=utf-8,\"+encodeURIComponent(\"\\ufeff\"+u),a||c.config.chart.toolbar.export.csv.filename,\".csv\")}},{key:\"triggerDownload\",value:function(t,e,i){var a=document.createElement(\"a\");a.href=t,a.download=(e||this.w.globals.chartID)+i,document.body.appendChild(a),a.click(),document.body.removeChild(a)}}])&&pt(e.prototype,i),t}();function bt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var vt=function(){function t(e,i){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.elgrid=i,this.w=e.w;var a=this.w;this.axesUtils=new ut(e),this.xaxisLabels=a.globals.labels.slice(),a.globals.timescaleLabels.length>0&&!a.globals.isBarHorizontal&&(this.xaxisLabels=a.globals.timescaleLabels.slice()),a.config.xaxis.overwriteCategories&&(this.xaxisLabels=a.config.xaxis.overwriteCategories),this.drawnLabels=[],this.drawnLabelsRects=[],\"top\"===a.config.xaxis.position?this.offY=0:this.offY=a.globals.gridHeight+1,this.offY=this.offY+a.config.xaxis.axisBorder.offsetY,this.isCategoryBarHorizontal=\"bar\"===a.config.chart.type&&a.config.plotOptions.bar.horizontal,this.xaxisFontSize=a.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=a.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=a.config.xaxis.labels.style.colors,this.xaxisBorderWidth=a.config.xaxis.axisBorder.width,this.isCategoryBarHorizontal&&(this.xaxisBorderWidth=a.config.yaxis[0].axisBorder.width.toString()),this.xaxisBorderWidth.indexOf(\"%\")>-1?this.xaxisBorderWidth=a.globals.gridWidth*parseInt(this.xaxisBorderWidth,10)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth,10),this.xaxisBorderHeight=a.config.xaxis.axisBorder.height,this.yaxis=a.config.yaxis[0]}var e,i;return e=t,i=[{key:\"drawXaxis\",value:function(){var t=this.w,e=new g(this.ctx),i=e.group({class:\"apexcharts-xaxis\",transform:\"translate(\".concat(t.config.xaxis.offsetX,\", \").concat(t.config.xaxis.offsetY,\")\")}),a=e.group({class:\"apexcharts-xaxis-texts-g\",transform:\"translate(\".concat(t.globals.translateXAxisX,\", \").concat(t.globals.translateXAxisY,\")\")});i.add(a);for(var r=[],s=0;s<this.xaxisLabels.length;s++)r.push(this.xaxisLabels[s]);if(this.drawXAxisLabelAndGroup(!0,e,a,r,t.globals.isXNumeric,(function(t,e){return e})),t.globals.hasXaxisGroups){var n=t.globals.groups;r=[];for(var o=0;o<n.length;o++)r.push(n[o].title);var l={};t.config.xaxis.group.style&&(l.xaxisFontSize=t.config.xaxis.group.style.fontSize,l.xaxisFontFamily=t.config.xaxis.group.style.fontFamily,l.xaxisForeColors=t.config.xaxis.group.style.colors,l.fontWeight=t.config.xaxis.group.style.fontWeight,l.cssClass=t.config.xaxis.group.style.cssClass),this.drawXAxisLabelAndGroup(!1,e,a,r,!1,(function(t,e){return n[t].cols*e}),l)}if(void 0!==t.config.xaxis.title.text){var c=e.group({class:\"apexcharts-xaxis-title\"}),h=e.drawText({x:t.globals.gridWidth/2+t.config.xaxis.title.offsetX,y:this.offY+parseFloat(this.xaxisFontSize)+(\"bottom\"===t.config.xaxis.position?t.globals.xAxisLabelsHeight:-t.globals.xAxisLabelsHeight-10)+t.config.xaxis.title.offsetY,text:t.config.xaxis.title.text,textAnchor:\"middle\",fontSize:t.config.xaxis.title.style.fontSize,fontFamily:t.config.xaxis.title.style.fontFamily,fontWeight:t.config.xaxis.title.style.fontWeight,foreColor:t.config.xaxis.title.style.color,cssClass:\"apexcharts-xaxis-title-text \"+t.config.xaxis.title.style.cssClass});c.add(h),i.add(c)}if(t.config.xaxis.axisBorder.show){var d=t.globals.barPadForNumericAxis,u=e.drawLine(t.globals.padHorizontal+t.config.xaxis.axisBorder.offsetX-d,this.offY,this.xaxisBorderWidth+d,this.offY,t.config.xaxis.axisBorder.color,0,this.xaxisBorderHeight);this.elgrid&&this.elgrid.elGridBorders&&t.config.grid.show?this.elgrid.elGridBorders.add(u):i.add(u)}return i}},{key:\"drawXAxisLabelAndGroup\",value:function(t,e,i,a,r,s){var n,o=this,l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},c=[],h=[],d=this.w,u=l.xaxisFontSize||this.xaxisFontSize,g=l.xaxisFontFamily||this.xaxisFontFamily,f=l.xaxisForeColors||this.xaxisForeColors,p=l.fontWeight||d.config.xaxis.labels.style.fontWeight,x=l.cssClass||d.config.xaxis.labels.style.cssClass,b=d.globals.padHorizontal,v=a.length,m=\"category\"===d.config.xaxis.type?d.globals.dataPoints:v;if(0===m&&v>m&&(m=v),r){var y=m>1?m-1:m;n=d.globals.gridWidth/y,b=b+s(0,n)/2+d.config.xaxis.labels.offsetX}else n=d.globals.gridWidth/m,b=b+s(0,n)+d.config.xaxis.labels.offsetX;for(var w=function(r){var l=b-s(r,n)/2+d.config.xaxis.labels.offsetX;0===r&&1===v&&n/2===b&&1===m&&(l=d.globals.gridWidth/2);var y=o.axesUtils.getLabel(a,d.globals.timescaleLabels,l,r,c,u,t),w=28;if(d.globals.rotateXLabels&&t&&(w=22),d.config.xaxis.title.text&&\"top\"===d.config.xaxis.position&&(w+=parseFloat(d.config.xaxis.title.style.fontSize)+2),t||(w=w+parseFloat(u)+(d.globals.xAxisLabelsHeight-d.globals.xAxisGroupLabelsHeight)+(d.globals.rotateXLabels?10:0)),y=void 0!==d.config.xaxis.tickAmount&&\"dataPoints\"!==d.config.xaxis.tickAmount&&\"datetime\"!==d.config.xaxis.type?o.axesUtils.checkLabelBasedOnTickamount(r,y,v):o.axesUtils.checkForOverflowingLabels(r,y,v,c,h),d.config.xaxis.labels.show){var k=e.drawText({x:y.x,y:o.offY+d.config.xaxis.labels.offsetY+w-(\"top\"===d.config.xaxis.position?d.globals.xAxisHeight+d.config.xaxis.axisTicks.height-2:0),text:y.text,textAnchor:\"middle\",fontWeight:y.isBold?600:p,fontSize:u,fontFamily:g,foreColor:Array.isArray(f)?t&&d.config.xaxis.convertedCatToNumeric?f[d.globals.minX+r-1]:f[r]:f,isPlainText:!1,cssClass:(t?\"apexcharts-xaxis-label \":\"apexcharts-xaxis-group-label \")+x});if(i.add(k),k.on(\"click\",(function(t){if(\"function\"==typeof d.config.chart.events.xAxisLabelClick){var e=Object.assign({},d,{labelIndex:r});d.config.chart.events.xAxisLabelClick(t,o.ctx,e)}})),t){var A=document.createElementNS(d.globals.SVGNS,\"title\");A.textContent=Array.isArray(y.text)?y.text.join(\" \"):y.text,k.node.appendChild(A),\"\"!==y.text&&(c.push(y.text),h.push(y))}}r<v-1&&(b+=s(r+1,n))},k=0;k<=v-1;k++)w(k)}},{key:\"drawXaxisInversed\",value:function(t){var e,i,a=this,r=this.w,s=new g(this.ctx),n=r.config.yaxis[0].opposite?r.globals.translateYAxisX[t]:0,o=s.group({class:\"apexcharts-yaxis apexcharts-xaxis-inversed\",rel:t}),l=s.group({class:\"apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g\",transform:\"translate(\"+n+\", 0)\"});o.add(l);var c=[];if(r.config.yaxis[t].show)for(var h=0;h<this.xaxisLabels.length;h++)c.push(this.xaxisLabels[h]);e=r.globals.gridHeight/c.length,i=-e/2.2;var d=r.globals.yLabelFormatters[0],u=r.config.yaxis[0].labels;if(u.show)for(var f=function(n){var o=void 0===c[n]?\"\":c[n];o=d(o,{seriesIndex:t,dataPointIndex:n,w:r});var h=a.axesUtils.getYAxisForeColor(u.style.colors,t),g=0;Array.isArray(o)&&(g=o.length/2*parseInt(u.style.fontSize,10));var f=u.offsetX-15,p=\"end\";a.yaxis.opposite&&(p=\"start\"),\"left\"===r.config.yaxis[0].labels.align?(f=u.offsetX,p=\"start\"):\"center\"===r.config.yaxis[0].labels.align?(f=u.offsetX,p=\"middle\"):\"right\"===r.config.yaxis[0].labels.align&&(p=\"end\");var x=s.drawText({x:f,y:i+e+u.offsetY-g,text:o,textAnchor:p,foreColor:Array.isArray(h)?h[n]:h,fontSize:u.style.fontSize,fontFamily:u.style.fontFamily,fontWeight:u.style.fontWeight,isPlainText:!1,cssClass:\"apexcharts-yaxis-label \"+u.style.cssClass,maxWidth:u.maxWidth});l.add(x),x.on(\"click\",(function(t){if(\"function\"==typeof r.config.chart.events.xAxisLabelClick){var e=Object.assign({},r,{labelIndex:n});r.config.chart.events.xAxisLabelClick(t,a.ctx,e)}}));var b=document.createElementNS(r.globals.SVGNS,\"title\");if(b.textContent=Array.isArray(o)?o.join(\" \"):o,x.node.appendChild(b),0!==r.config.yaxis[t].labels.rotate){var v=s.rotateAroundCenter(x.node);x.node.setAttribute(\"transform\",\"rotate(\".concat(r.config.yaxis[t].labels.rotate,\" 0 \").concat(v.y,\")\"))}i+=e},p=0;p<=c.length-1;p++)f(p);if(void 0!==r.config.yaxis[0].title.text){var x=s.group({class:\"apexcharts-yaxis-title apexcharts-xaxis-title-inversed\",transform:\"translate(\"+n+\", 0)\"}),b=s.drawText({x:r.config.yaxis[0].title.offsetX,y:r.globals.gridHeight/2+r.config.yaxis[0].title.offsetY,text:r.config.yaxis[0].title.text,textAnchor:\"middle\",foreColor:r.config.yaxis[0].title.style.color,fontSize:r.config.yaxis[0].title.style.fontSize,fontWeight:r.config.yaxis[0].title.style.fontWeight,fontFamily:r.config.yaxis[0].title.style.fontFamily,cssClass:\"apexcharts-yaxis-title-text \"+r.config.yaxis[0].title.style.cssClass});x.add(b),o.add(x)}var v=0;this.isCategoryBarHorizontal&&r.config.yaxis[0].opposite&&(v=r.globals.gridWidth);var m=r.config.xaxis.axisBorder;if(m.show){var y=s.drawLine(r.globals.padHorizontal+m.offsetX+v,1+m.offsetY,r.globals.padHorizontal+m.offsetX+v,r.globals.gridHeight+m.offsetY,m.color,0);this.elgrid&&this.elgrid.elGridBorders&&r.config.grid.show?this.elgrid.elGridBorders.add(y):o.add(y)}return r.config.yaxis[0].axisTicks.show&&this.axesUtils.drawYAxisTicks(v,c.length,r.config.yaxis[0].axisBorder,r.config.yaxis[0].axisTicks,0,e,o),o}},{key:\"drawXaxisTicks\",value:function(t,e,i){var a=this.w,r=t;if(!(t<0||t-2>a.globals.gridWidth)){var s=this.offY+a.config.xaxis.axisTicks.offsetY;if(e=e+s+a.config.xaxis.axisTicks.height,\"top\"===a.config.xaxis.position&&(e=s-a.config.xaxis.axisTicks.height),a.config.xaxis.axisTicks.show){var n=new g(this.ctx).drawLine(t+a.config.xaxis.axisTicks.offsetX,s+a.config.xaxis.offsetY,r+a.config.xaxis.axisTicks.offsetX,e+a.config.xaxis.offsetY,a.config.xaxis.axisTicks.color);i.add(n),n.node.classList.add(\"apexcharts-xaxis-tick\")}}}},{key:\"getXAxisTicksPositions\",value:function(){var t=this.w,e=[],i=this.xaxisLabels.length,a=t.globals.padHorizontal;if(t.globals.timescaleLabels.length>0)for(var r=0;r<i;r++)a=this.xaxisLabels[r].position,e.push(a);else for(var s=i,n=0;n<s;n++){var o=s;t.globals.isXNumeric&&\"bar\"!==t.config.chart.type&&(o-=1),a+=t.globals.gridWidth/o,e.push(a)}return e}},{key:\"xAxisLabelCorrections\",value:function(){var t=this.w,e=new g(this.ctx),i=t.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-texts-g\"),a=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-xaxis-texts-g text:not(.apexcharts-xaxis-group-label)\"),r=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis-inversed text\"),s=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-xaxis-inversed-texts-g text tspan\");if(t.globals.rotateXLabels||t.config.xaxis.labels.rotateAlways)for(var n=0;n<a.length;n++){var o=e.rotateAroundCenter(a[n]);o.y=o.y-1,o.x=o.x+1,a[n].setAttribute(\"transform\",\"rotate(\".concat(t.config.xaxis.labels.rotate,\" \").concat(o.x,\" \").concat(o.y,\")\")),a[n].setAttribute(\"text-anchor\",\"end\"),i.setAttribute(\"transform\",\"translate(0, \".concat(-10,\")\"));var l=a[n].childNodes;t.config.xaxis.labels.trim&&Array.prototype.forEach.call(l,(function(i){e.placeTextWithEllipsis(i,i.textContent,t.globals.xAxisLabelsHeight-(\"bottom\"===t.config.legend.position?20:10))}))}else!function(){for(var i=t.globals.gridWidth/(t.globals.labels.length+1),r=0;r<a.length;r++){var s=a[r].childNodes;t.config.xaxis.labels.trim&&\"datetime\"!==t.config.xaxis.type&&Array.prototype.forEach.call(s,(function(t){e.placeTextWithEllipsis(t,t.textContent,i)}))}}();if(r.length>0){var c=r[r.length-1].getBBox(),h=r[0].getBBox();c.x<-20&&r[r.length-1].parentNode.removeChild(r[r.length-1]),h.x+h.width>t.globals.gridWidth&&!t.globals.isBarHorizontal&&r[0].parentNode.removeChild(r[0]);for(var d=0;d<s.length;d++)e.placeTextWithEllipsis(s[d],s[d].textContent,t.config.yaxis[0].labels.maxWidth-(t.config.yaxis[0].title.text?2*parseFloat(t.config.yaxis[0].title.style.fontSize):0)-15)}}}],i&&bt(e.prototype,i),t}();function mt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const yt=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.xaxisLabels=i.globals.labels.slice(),this.axesUtils=new ut(e),this.isRangeBar=i.globals.seriesRange.length,i.globals.timescaleLabels.length>0&&(this.xaxisLabels=i.globals.timescaleLabels.slice())}var e,i;return e=t,i=[{key:\"drawGridArea\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w,i=new g(this.ctx);null===t&&(t=i.group({class:\"apexcharts-grid\"}));var a=i.drawLine(e.globals.padHorizontal,1,e.globals.padHorizontal,e.globals.gridHeight,\"transparent\"),r=i.drawLine(e.globals.padHorizontal,e.globals.gridHeight,e.globals.gridWidth,e.globals.gridHeight,\"transparent\");return t.add(r),t.add(a),t}},{key:\"drawGrid\",value:function(){var t=null;return this.w.globals.axisCharts&&(t=this.renderGrid(),this.drawGridArea(t.el)),t}},{key:\"createGridMask\",value:function(){var t=this.w,e=t.globals,i=new g(this.ctx),a=Array.isArray(t.config.stroke.width)?0:t.config.stroke.width;if(Array.isArray(t.config.stroke.width)){var r=0;t.config.stroke.width.forEach((function(t){r=Math.max(r,t)})),a=r}e.dom.elGridRectMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elGridRectMask.setAttribute(\"id\",\"gridRectMask\".concat(e.cuid)),e.dom.elGridRectMarkerMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elGridRectMarkerMask.setAttribute(\"id\",\"gridRectMarkerMask\".concat(e.cuid)),e.dom.elForecastMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elForecastMask.setAttribute(\"id\",\"forecastMask\".concat(e.cuid)),e.dom.elNonForecastMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elNonForecastMask.setAttribute(\"id\",\"nonForecastMask\".concat(e.cuid));var s=t.config.chart.type,n=0,o=0;(\"bar\"===s||\"rangeBar\"===s||\"candlestick\"===s||\"boxPlot\"===s||t.globals.comboBarCount>0)&&t.globals.isXNumeric&&!t.globals.isBarHorizontal&&(n=t.config.grid.padding.left,o=t.config.grid.padding.right,e.barPadForNumericAxis>n&&(n=e.barPadForNumericAxis,o=e.barPadForNumericAxis)),e.dom.elGridRect=i.drawRect(-a/2-n-2,-a/2,e.gridWidth+a+o+n+4,e.gridHeight+a,0,\"#fff\");var l=t.globals.markers.largestSize+1;e.dom.elGridRectMarker=i.drawRect(2*-l,2*-l,e.gridWidth+4*l,e.gridHeight+4*l,0,\"#fff\"),e.dom.elGridRectMask.appendChild(e.dom.elGridRect.node),e.dom.elGridRectMarkerMask.appendChild(e.dom.elGridRectMarker.node);var c=e.dom.baseEl.querySelector(\"defs\");c.appendChild(e.dom.elGridRectMask),c.appendChild(e.dom.elForecastMask),c.appendChild(e.dom.elNonForecastMask),c.appendChild(e.dom.elGridRectMarkerMask)}},{key:\"_drawGridLines\",value:function(t){var e=t.i,i=t.x1,a=t.y1,r=t.x2,s=t.y2,n=t.xCount,o=t.parent,l=this.w;if(!(0===e&&l.globals.skipFirstTimelinelabel||e===n-1&&l.globals.skipLastTimelinelabel&&!l.config.xaxis.labels.formatter||\"radar\"===l.config.chart.type)){l.config.grid.xaxis.lines.show&&this._drawGridLine({i:e,x1:i,y1:a,x2:r,y2:s,xCount:n,parent:o});var c=0;if(l.globals.hasXaxisGroups&&\"between\"===l.config.xaxis.tickPlacement){var h=l.globals.groups;if(h){for(var d=0,u=0;d<e&&u<h.length;u++)d+=h[u].cols;d===e&&(c=.6*l.globals.xAxisLabelsHeight)}}new vt(this.ctx).drawXaxisTicks(i,c,l.globals.dom.elGraphical)}}},{key:\"_drawGridLine\",value:function(t){var e=t.i,i=t.x1,a=t.y1,r=t.x2,s=t.y2,n=t.xCount,o=t.parent,l=this.w,c=!1,h=o.node.classList.contains(\"apexcharts-gridlines-horizontal\"),d=l.config.grid.strokeDashArray,u=l.globals.barPadForNumericAxis;(0===a&&0===s||0===i&&0===r)&&(c=!0),a===l.globals.gridHeight&&s===l.globals.gridHeight&&(c=!0),!l.globals.isBarHorizontal||0!==e&&e!==n-1||(c=!0);var f=new g(this).drawLine(i-(h?u:0),a,r+(h?u:0),s,l.config.grid.borderColor,d);f.node.classList.add(\"apexcharts-gridline\"),c&&l.config.grid.show?this.elGridBorders.add(f):o.add(f)}},{key:\"_drawGridBandRect\",value:function(t){var e=t.c,i=t.x1,a=t.y1,r=t.x2,s=t.y2,n=t.type,o=this.w,l=new g(this.ctx),c=o.globals.barPadForNumericAxis;if(\"column\"!==n||\"datetime\"!==o.config.xaxis.type){var h=o.config.grid[n].colors[e],d=l.drawRect(i-(\"row\"===n?c:0),a,r+(\"row\"===n?2*c:0),s,0,h,o.config.grid[n].opacity);this.elg.add(d),d.attr(\"clip-path\",\"url(#gridRectMask\".concat(o.globals.cuid,\")\")),d.node.classList.add(\"apexcharts-grid-\".concat(n))}}},{key:\"_drawXYLines\",value:function(t){var e=this,i=t.xCount,a=t.tickAmount,r=this.w;if(r.config.grid.xaxis.lines.show||r.config.xaxis.axisTicks.show){var s,n=r.globals.padHorizontal,o=r.globals.gridHeight;r.globals.timescaleLabels.length?function(t){for(var a=t.xC,r=t.x1,s=t.y1,n=t.x2,o=t.y2,l=0;l<a;l++)r=e.xaxisLabels[l].position,n=e.xaxisLabels[l].position,e._drawGridLines({i:l,x1:r,y1:s,x2:n,y2:o,xCount:i,parent:e.elgridLinesV})}({xC:i,x1:n,y1:0,x2:s,y2:o}):(r.globals.isXNumeric&&(i=r.globals.xAxisScale.result.length),function(t){for(var a=t.xC,s=t.x1,n=t.y1,o=t.x2,l=t.y2,c=0;c<a+(r.globals.isXNumeric?0:1);c++)0===c&&1===a&&1===r.globals.dataPoints&&(o=s=r.globals.gridWidth/2),e._drawGridLines({i:c,x1:s,y1:n,x2:o,y2:l,xCount:i,parent:e.elgridLinesV}),o=s+=r.globals.gridWidth/(r.globals.isXNumeric?a-1:a)}({xC:i,x1:n,y1:0,x2:s,y2:o}))}if(r.config.grid.yaxis.lines.show){var l=0,c=0,h=r.globals.gridWidth,d=a+1;this.isRangeBar&&(d=r.globals.labels.length);for(var u=0;u<d+(this.isRangeBar?1:0);u++)this._drawGridLine({i:u,xCount:d+(this.isRangeBar?1:0),x1:0,y1:l,x2:h,y2:c,parent:this.elgridLinesH}),c=l+=r.globals.gridHeight/(this.isRangeBar?d:a)}}},{key:\"_drawInvertedXYLines\",value:function(t){var e=t.xCount,i=this.w;if(i.config.grid.xaxis.lines.show||i.config.xaxis.axisTicks.show)for(var a,r=i.globals.padHorizontal,s=i.globals.gridHeight,n=0;n<e+1;n++)i.config.grid.xaxis.lines.show&&this._drawGridLine({i:n,xCount:e+1,x1:r,y1:0,x2:a,y2:s,parent:this.elgridLinesV}),new vt(this.ctx).drawXaxisTicks(r,0,i.globals.dom.elGraphical),a=r=r+i.globals.gridWidth/e+.3;if(i.config.grid.yaxis.lines.show)for(var o=0,l=0,c=i.globals.gridWidth,h=0;h<i.globals.dataPoints+1;h++)this._drawGridLine({i:h,xCount:i.globals.dataPoints+1,x1:0,y1:o,x2:c,y2:l,parent:this.elgridLinesH}),l=o+=i.globals.gridHeight/i.globals.dataPoints}},{key:\"renderGrid\",value:function(){var t=this.w,e=new g(this.ctx);this.elg=e.group({class:\"apexcharts-grid\"}),this.elgridLinesH=e.group({class:\"apexcharts-gridlines-horizontal\"}),this.elgridLinesV=e.group({class:\"apexcharts-gridlines-vertical\"}),this.elGridBorders=e.group({class:\"apexcharts-grid-borders\"}),this.elg.add(this.elgridLinesH),this.elg.add(this.elgridLinesV),t.config.grid.show||(this.elgridLinesV.hide(),this.elgridLinesH.hide(),this.elGridBorders.hide());for(var i,a=t.globals.yAxisScale.length?t.globals.yAxisScale[0].result.length-1:5,r=0;r<t.globals.series.length&&(void 0!==t.globals.yAxisScale[r]&&(a=t.globals.yAxisScale[r].result.length-1),!(a>2));r++);return!t.globals.isBarHorizontal||this.isRangeBar?(i=this.xaxisLabels.length,this.isRangeBar&&t.globals.isBarHorizontal&&(i--,a=t.globals.labels.length,t.config.xaxis.tickAmount&&t.config.xaxis.labels.formatter&&(i=t.config.xaxis.tickAmount)),this._drawXYLines({xCount:i,tickAmount:a})):(i=a,a=t.globals.xTickAmount,this._drawInvertedXYLines({xCount:i,tickAmount:a})),this.drawGridBands(i,a),{el:this.elg,elGridBorders:this.elGridBorders,xAxisTickWidth:t.globals.gridWidth/i}}},{key:\"drawGridBands\",value:function(t,e){var i=this.w;if(void 0!==i.config.grid.row.colors&&i.config.grid.row.colors.length>0)for(var a=0,r=i.globals.gridHeight/e,s=i.globals.gridWidth,n=0,o=0;n<e;n++,o++)o>=i.config.grid.row.colors.length&&(o=0),this._drawGridBandRect({c:o,x1:0,y1:a,x2:s,y2:r,type:\"row\"}),a+=i.globals.gridHeight/e;if(void 0!==i.config.grid.column.colors&&i.config.grid.column.colors.length>0)for(var l=i.globals.isBarHorizontal||\"category\"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric?t:t-1,c=i.globals.padHorizontal,h=i.globals.padHorizontal+i.globals.gridWidth/l,d=i.globals.gridHeight,u=0,g=0;u<t;u++,g++)g>=i.config.grid.column.colors.length&&(g=0),this._drawGridBandRect({c:g,x1:c,y1:0,x2:h,y2:d,type:\"column\"}),c+=i.globals.gridWidth/l}}],i&&mt(e.prototype,i),t}();function wt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var kt=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,i=[{key:\"niceScale\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4?arguments[4]:void 0,n=this.w,o=Math.abs(e-t);if(\"dataPoints\"===(i=this._adjustTicksForSmallRange(i,a,o))&&(i=n.globals.dataPoints-1),t===Number.MIN_VALUE&&0===e||!r.isNumber(t)&&!r.isNumber(e)||t===Number.MIN_VALUE&&e===-Number.MAX_VALUE)return t=0,e=i,this.linearScale(t,e,i);t>e?(console.warn(\"axis.min cannot be greater than axis.max\"),e=t+.1):t===e&&(t=0===t?0:t-.5,e=0===e?2:e+.5);var l=[];o<1&&s&&(\"candlestick\"===n.config.chart.type||\"candlestick\"===n.config.series[a].type||\"boxPlot\"===n.config.chart.type||\"boxPlot\"===n.config.series[a].type||n.globals.isRangeData)&&(e*=1.01);var c=i+1;c<2?c=2:c>2&&(c-=2);var h=o/c,d=Math.floor(r.log10(h)),u=Math.pow(10,d),g=Math.round(h/u);g<1&&(g=1);var f=g*u,p=f*Math.floor(t/f),x=f*Math.ceil(e/f),b=p;if(s&&o>2){for(;l.push(b),!((b+=f)>x););return{result:l,niceMin:l[0],niceMax:l[l.length-1]}}var v=t;(l=[]).push(v);for(var m=Math.abs(e-t)/i,y=0;y<=i;y++)v+=m,l.push(v);return l[l.length-2]>=e&&l.pop(),{result:l,niceMin:l[0],niceMax:l[l.length-1]}}},{key:\"linearScale\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,a=arguments.length>3?arguments[3]:void 0,r=Math.abs(e-t);\"dataPoints\"===(i=this._adjustTicksForSmallRange(i,a,r))&&(i=this.w.globals.dataPoints-1);var s=r/i;i===Number.MAX_VALUE&&(i=10,s=1);for(var n=[],o=t;i>=0;)n.push(o),o+=s,i-=1;return{result:n,niceMin:n[0],niceMax:n[n.length-1]}}},{key:\"logarithmicScaleNice\",value:function(t,e,i){e<=0&&(e=Math.max(t,i)),t<=0&&(t=Math.min(e,i));for(var a=[],r=Math.ceil(Math.log(e)/Math.log(i)+1),s=Math.floor(Math.log(t)/Math.log(i));s<r;s++)a.push(Math.pow(i,s));return{result:a,niceMin:a[0],niceMax:a[a.length-1]}}},{key:\"logarithmicScale\",value:function(t,e,i){e<=0&&(e=Math.max(t,i)),t<=0&&(t=Math.min(e,i));for(var a=[],r=Math.log(e)/Math.log(i),s=Math.log(t)/Math.log(i),n=r-s,o=Math.round(n),l=n/o,c=0,h=s;c<o;c++,h+=l)a.push(Math.pow(i,h));return a.push(Math.pow(i,r)),{result:a,niceMin:t,niceMax:e}}},{key:\"_adjustTicksForSmallRange\",value:function(t,e,i){var a=t;if(void 0!==e&&this.w.config.yaxis[e].labels.formatter&&void 0===this.w.config.yaxis[e].tickAmount){var s=Number(this.w.config.yaxis[e].labels.formatter(1));r.isNumber(s)&&0===this.w.globals.yValueDecimal&&(a=Math.ceil(i))}return a<t?a:t}},{key:\"setYScaleForIndex\",value:function(t,e,i){var a=this.w.globals,s=this.w.config,n=a.isBarHorizontal?s.xaxis:s.yaxis[t];void 0===a.yAxisScale[t]&&(a.yAxisScale[t]=[]);var o=Math.abs(i-e);if(n.logarithmic&&o<=5&&(a.invalidLogScale=!0),n.logarithmic&&o>5)a.allSeriesCollapsed=!1,a.yAxisScale[t]=this.logarithmicScale(e,i,n.logBase),a.yAxisScale[t]=n.forceNiceScale?this.logarithmicScaleNice(e,i,n.logBase):this.logarithmicScale(e,i,n.logBase);else if(i!==-Number.MAX_VALUE&&r.isNumber(i))if(a.allSeriesCollapsed=!1,void 0===n.min&&void 0===n.max||n.forceNiceScale){var l=void 0===s.yaxis[t].max&&void 0===s.yaxis[t].min||s.yaxis[t].forceNiceScale;a.yAxisScale[t]=this.niceScale(e,i,n.tickAmount?n.tickAmount:o<5&&o>1?o+1:5,t,l)}else a.yAxisScale[t]=this.linearScale(e,i,n.tickAmount,t);else a.yAxisScale[t]=this.linearScale(0,5,5)}},{key:\"setXScale\",value:function(t,e){var i=this.w,a=i.globals,s=i.config.xaxis,n=Math.abs(e-t);return e!==-Number.MAX_VALUE&&r.isNumber(e)?a.xAxisScale=this.linearScale(t,e,s.tickAmount?s.tickAmount:n<5&&n>1?n+1:5,0):a.xAxisScale=this.linearScale(0,5,5),a.xAxisScale}},{key:\"setMultipleYScales\",value:function(){var t=this,e=this.w.globals,i=this.w.config,a=e.minYArr.concat([]),r=e.maxYArr.concat([]),s=[];i.yaxis.forEach((function(e,n){var o=n;i.series.forEach((function(t,i){t.name===e.seriesName&&(o=i,n!==i?s.push({index:i,similarIndex:n,alreadyExists:!0}):s.push({index:i}))}));var l=a[o],c=r[o];t.setYScaleForIndex(n,l,c)})),this.sameScaleInMultipleAxes(a,r,s)}},{key:\"sameScaleInMultipleAxes\",value:function(t,e,i){var a=this,r=this.w.config,s=this.w.globals,n=[];i.forEach((function(t){t.alreadyExists&&(void 0===n[t.index]&&(n[t.index]=[]),n[t.index].push(t.index),n[t.index].push(t.similarIndex))})),s.yAxisSameScaleIndices=n,n.forEach((function(t,e){n.forEach((function(i,a){var r,s;e!==a&&(r=t,s=i,r.filter((function(t){return-1!==s.indexOf(t)}))).length>0&&(n[e]=n[e].concat(n[a]))}))}));var o=n.map((function(t){return t.filter((function(e,i){return t.indexOf(e)===i}))})).map((function(t){return t.sort()}));n=n.filter((function(t){return!!t}));var l=o.slice(),c=l.map((function(t){return JSON.stringify(t)}));l=l.filter((function(t,e){return c.indexOf(JSON.stringify(t))===e}));var h=[],d=[];t.forEach((function(t,i){l.forEach((function(a,r){a.indexOf(i)>-1&&(void 0===h[r]&&(h[r]=[],d[r]=[]),h[r].push({key:i,value:t}),d[r].push({key:i,value:e[i]}))}))}));var u=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,Number.MIN_VALUE),g=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,-Number.MAX_VALUE);h.forEach((function(t,e){t.forEach((function(t,i){u[e]=Math.min(t.value,u[e])}))})),d.forEach((function(t,e){t.forEach((function(t,i){g[e]=Math.max(t.value,g[e])}))})),t.forEach((function(t,e){d.forEach((function(t,i){var n=u[i],o=g[i];r.chart.stacked&&(o=0,t.forEach((function(t,e){t.value!==-Number.MAX_VALUE&&(o+=t.value),n!==Number.MIN_VALUE&&(n+=h[i][e].value)}))),t.forEach((function(i,l){t[l].key===e&&(void 0!==r.yaxis[e].min&&(n=\"function\"==typeof r.yaxis[e].min?r.yaxis[e].min(s.minY):r.yaxis[e].min),void 0!==r.yaxis[e].max&&(o=\"function\"==typeof r.yaxis[e].max?r.yaxis[e].max(s.maxY):r.yaxis[e].max),a.setYScaleForIndex(e,n,o))}))}))}))}},{key:\"autoScaleY\",value:function(t,e,i){t||(t=this);var a=t.w;if(a.globals.isMultipleYAxis||a.globals.collapsedSeries.length)return console.warn(\"autoScaleYaxis is not supported in a multi-yaxis chart.\"),e;var r=a.globals.seriesX[0],s=a.config.chart.stacked;return e.forEach((function(t,n){for(var o=0,l=0;l<r.length;l++)if(r[l]>=i.xaxis.min){o=l;break}var c,h,d=a.globals.minYArr[n],u=a.globals.maxYArr[n],g=a.globals.stackedSeriesTotals;a.globals.series.forEach((function(n,l){var f=n[o];s?(f=g[o],c=h=f,g.forEach((function(t,e){r[e]<=i.xaxis.max&&r[e]>=i.xaxis.min&&(t>h&&null!==t&&(h=t),n[e]<c&&null!==n[e]&&(c=n[e]))}))):(c=h=f,n.forEach((function(t,e){if(r[e]<=i.xaxis.max&&r[e]>=i.xaxis.min){var s=t,n=t;a.globals.series.forEach((function(i,a){null!==t&&(s=Math.min(i[e],s),n=Math.max(i[e],n))})),n>h&&null!==n&&(h=n),s<c&&null!==s&&(c=s)}}))),void 0===c&&void 0===h&&(c=d,h=u),h*=h<0?.9:1.1,0==(c*=c<0?1.1:.9)&&0===h&&(c=-1,h=1),h<0&&h<u&&(h=u),c<0&&c>d&&(c=d),e.length>1?(e[l].min=void 0===t.min?c:t.min,e[l].max=void 0===t.max?h:t.max):(e[0].min=void 0===t.min?c:t.min,e[0].max=void 0===t.max?h:t.max)}))})),e}}],i&&wt(e.prototype,i),t}();function At(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}function St(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const Ct=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.scales=new kt(e)}var e,i;return e=t,i=[{key:\"init\",value:function(){this.setYRange(),this.setXRange(),this.setZRange()}},{key:\"getMinYMaxY\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-Number.MAX_VALUE,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.w.config,n=this.w.globals,o=-Number.MAX_VALUE,l=Number.MIN_VALUE;null===a&&(a=t+1);var c=n.series,h=c,d=c;\"candlestick\"===s.chart.type?(h=n.seriesCandleL,d=n.seriesCandleH):\"boxPlot\"===s.chart.type?(h=n.seriesCandleO,d=n.seriesCandleC):n.isRangeData&&(h=n.seriesRangeStart,d=n.seriesRangeEnd);for(var u=t;u<a;u++){n.dataPoints=Math.max(n.dataPoints,c[u].length),n.categoryLabels.length&&(n.dataPoints=n.categoryLabels.filter((function(t){return void 0!==t})).length),n.labels.length&&(n.dataPoints=Math.max(n.dataPoints,n.labels.length));for(var g=0;g<n.series[u].length;g++){var f=c[u][g];null!==f&&r.isNumber(f)?(void 0!==d[u][g]&&(o=Math.max(o,d[u][g]),e=Math.min(e,d[u][g])),void 0!==h[u][g]&&(e=Math.min(e,h[u][g]),i=Math.max(i,h[u][g])),\"candlestick\"!==this.w.config.chart.type&&\"boxPlot\"!==this.w.config.chart.type&&\"rangeArea\"===this.w.config.chart.type&&\"rangeBar\"===this.w.config.chart.type||(\"candlestick\"!==this.w.config.chart.type&&\"boxPlot\"!==this.w.config.chart.type||void 0!==n.seriesCandleC[u][g]&&(o=Math.max(o,n.seriesCandleO[u][g]),o=Math.max(o,n.seriesCandleH[u][g]),o=Math.max(o,n.seriesCandleL[u][g]),o=Math.max(o,n.seriesCandleC[u][g]),\"boxPlot\"===this.w.config.chart.type&&(o=Math.max(o,n.seriesCandleM[u][g]))),!s.series[u].type||\"candlestick\"===s.series[u].type&&\"boxPlot\"===s.series[u].type&&\"rangeArea\"===s.series[u].type&&\"rangeBar\"===s.series[u].type||(o=Math.max(o,n.series[u][g]),e=Math.min(e,n.series[u][g])),i=o),n.seriesGoals[u]&&n.seriesGoals[u][g]&&Array.isArray(n.seriesGoals[u][g])&&n.seriesGoals[u][g].forEach((function(t){l!==Number.MIN_VALUE&&(l=Math.min(l,t.value),e=l),o=Math.max(o,t.value),i=o})),r.isFloat(f)&&(f=r.noExponents(f),n.yValueDecimal=Math.max(n.yValueDecimal,f.toString().split(\".\")[1].length)),l>h[u][g]&&h[u][g]<0&&(l=h[u][g])):n.hasNullValues=!0}}return\"rangeBar\"===s.chart.type&&n.seriesRangeStart.length&&n.isBarHorizontal&&(l=e),\"bar\"===s.chart.type&&(l<0&&o<0&&(o=0),l===Number.MIN_VALUE&&(l=0)),{minY:l,maxY:o,lowestY:e,highestY:i}}},{key:\"setYRange\",value:function(){var t=this.w.globals,e=this.w.config;t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE;var i=Number.MAX_VALUE;if(t.isMultipleYAxis)for(var a=0;a<t.series.length;a++){var r=this.getMinYMaxY(a,i,null,a+1);t.minYArr.push(r.minY),t.maxYArr.push(r.maxY),i=r.lowestY}var s=this.getMinYMaxY(0,i,null,t.series.length);if(t.minY=s.minY,t.maxY=s.maxY,i=s.lowestY,e.chart.stacked&&this._setStackedMinMax(),(\"line\"===e.chart.type||\"area\"===e.chart.type||\"candlestick\"===e.chart.type||\"boxPlot\"===e.chart.type||\"rangeBar\"===e.chart.type&&!t.isBarHorizontal)&&t.minY===Number.MIN_VALUE&&i!==-Number.MAX_VALUE&&i!==t.maxY){var n=t.maxY-i;(i>=0&&i<=10||void 0!==e.yaxis[0].min||void 0!==e.yaxis[0].max)&&(n=0),t.minY=i-5*n/100,i>0&&t.minY<0&&(t.minY=0),t.maxY=t.maxY+5*n/100}return e.yaxis.forEach((function(e,i){void 0!==e.max&&(\"number\"==typeof e.max?t.maxYArr[i]=e.max:\"function\"==typeof e.max&&(t.maxYArr[i]=e.max(t.isMultipleYAxis?t.maxYArr[i]:t.maxY)),t.maxY=t.maxYArr[i]),void 0!==e.min&&(\"number\"==typeof e.min?t.minYArr[i]=e.min:\"function\"==typeof e.min&&(t.minYArr[i]=e.min(t.isMultipleYAxis?t.minYArr[i]===Number.MIN_VALUE?0:t.minYArr[i]:t.minY)),t.minY=t.minYArr[i])})),t.isBarHorizontal&&[\"min\",\"max\"].forEach((function(i){void 0!==e.xaxis[i]&&\"number\"==typeof e.xaxis[i]&&(\"min\"===i?t.minY=e.xaxis[i]:t.maxY=e.xaxis[i])})),t.isMultipleYAxis?(this.scales.setMultipleYScales(),t.minY=i,t.yAxisScale.forEach((function(e,i){t.minYArr[i]=e.niceMin,t.maxYArr[i]=e.niceMax}))):(this.scales.setYScaleForIndex(0,t.minY,t.maxY),t.minY=t.yAxisScale[0].niceMin,t.maxY=t.yAxisScale[0].niceMax,t.minYArr[0]=t.yAxisScale[0].niceMin,t.maxYArr[0]=t.yAxisScale[0].niceMax),{minY:t.minY,maxY:t.maxY,minYArr:t.minYArr,maxYArr:t.maxYArr,yAxisScale:t.yAxisScale}}},{key:\"setXRange\",value:function(){var t=this.w.globals,e=this.w.config,i=\"numeric\"===e.xaxis.type||\"datetime\"===e.xaxis.type||\"category\"===e.xaxis.type&&!t.noLabelsProvided||t.noLabelsProvided||t.isXNumeric;if(t.isXNumeric&&function(){for(var e=0;e<t.series.length;e++)if(t.labels[e])for(var i=0;i<t.labels[e].length;i++)null!==t.labels[e][i]&&r.isNumber(t.labels[e][i])&&(t.maxX=Math.max(t.maxX,t.labels[e][i]),t.initialMaxX=Math.max(t.maxX,t.labels[e][i]),t.minX=Math.min(t.minX,t.labels[e][i]),t.initialMinX=Math.min(t.minX,t.labels[e][i]))}(),t.noLabelsProvided&&0===e.xaxis.categories.length&&(t.maxX=t.labels[t.labels.length-1],t.initialMaxX=t.labels[t.labels.length-1],t.minX=1,t.initialMinX=1),t.isXNumeric||t.noLabelsProvided||t.dataFormatXNumeric){var a;if(void 0===e.xaxis.tickAmount?(a=Math.round(t.svgWidth/150),\"numeric\"===e.xaxis.type&&t.dataPoints<30&&(a=t.dataPoints-1),a>t.dataPoints&&0!==t.dataPoints&&(a=t.dataPoints-1)):\"dataPoints\"===e.xaxis.tickAmount?(t.series.length>1&&(a=t.series[t.maxValsInArrayIndex].length-1),t.isXNumeric&&(a=t.maxX-t.minX-1)):a=e.xaxis.tickAmount,t.xTickAmount=a,void 0!==e.xaxis.max&&\"number\"==typeof e.xaxis.max&&(t.maxX=e.xaxis.max),void 0!==e.xaxis.min&&\"number\"==typeof e.xaxis.min&&(t.minX=e.xaxis.min),void 0!==e.xaxis.range&&(t.minX=t.maxX-e.xaxis.range),t.minX!==Number.MAX_VALUE&&t.maxX!==-Number.MAX_VALUE)if(e.xaxis.convertedCatToNumeric&&!t.dataFormatXNumeric){for(var s=[],n=t.minX-1;n<t.maxX;n++)s.push(n+1);t.xAxisScale={result:s,niceMin:s[0],niceMax:s[s.length-1]}}else t.xAxisScale=this.scales.setXScale(t.minX,t.maxX);else t.xAxisScale=this.scales.linearScale(1,a,a),t.noLabelsProvided&&t.labels.length>0&&(t.xAxisScale=this.scales.linearScale(1,t.labels.length,a-1),t.seriesX=t.labels.slice());i&&(t.labels=t.xAxisScale.result.slice())}return t.isBarHorizontal&&t.labels.length&&(t.xTickAmount=t.labels.length),this._handleSingleDataPoint(),this._getMinXDiff(),{minX:t.minX,maxX:t.maxX}}},{key:\"setZRange\",value:function(){var t=this.w.globals;if(t.isDataXYZ)for(var e=0;e<t.series.length;e++)if(void 0!==t.seriesZ[e])for(var i=0;i<t.seriesZ[e].length;i++)null!==t.seriesZ[e][i]&&r.isNumber(t.seriesZ[e][i])&&(t.maxZ=Math.max(t.maxZ,t.seriesZ[e][i]),t.minZ=Math.min(t.minZ,t.seriesZ[e][i]))}},{key:\"_handleSingleDataPoint\",value:function(){var t=this.w.globals,e=this.w.config;if(t.minX===t.maxX){var i=new M(this.ctx);if(\"datetime\"===e.xaxis.type){var a=i.getDate(t.minX);e.xaxis.labels.datetimeUTC?a.setUTCDate(a.getUTCDate()-2):a.setDate(a.getDate()-2),t.minX=new Date(a).getTime();var r=i.getDate(t.maxX);e.xaxis.labels.datetimeUTC?r.setUTCDate(r.getUTCDate()+2):r.setDate(r.getDate()+2),t.maxX=new Date(r).getTime()}else(\"numeric\"===e.xaxis.type||\"category\"===e.xaxis.type&&!t.noLabelsProvided)&&(t.minX=t.minX-2,t.initialMinX=t.minX,t.maxX=t.maxX+2,t.initialMaxX=t.maxX)}}},{key:\"_getMinXDiff\",value:function(){var t=this.w.globals;t.isXNumeric&&t.seriesX.forEach((function(e,i){1===e.length&&e.push(t.seriesX[t.maxValsInArrayIndex][t.seriesX[t.maxValsInArrayIndex].length-1]);var a=e.slice();a.sort((function(t,e){return t-e})),a.forEach((function(e,i){if(i>0){var r=e-a[i-1];r>0&&(t.minXDiff=Math.min(r,t.minXDiff))}})),1!==t.dataPoints&&t.minXDiff!==Number.MAX_VALUE||(t.minXDiff=.5)}))}},{key:\"_setStackedMinMax\",value:function(){var t=this,e=this.w.globals;if(e.series.length){var i=e.seriesGroups;i.length||(i=[this.w.config.series.map((function(t){return t.name}))]);var a={},s={};i.forEach((function(i){a[i]=[],s[i]=[],t.w.config.series.map((function(t,e){return i.indexOf(t.name)>-1?e:null})).filter((function(t){return null!==t})).forEach((function(t){for(var n=0;n<e.series[e.maxValsInArrayIndex].length;n++)void 0===a[i][n]&&(a[i][n]=0,s[i][n]=0),null!==e.series[t][n]&&r.isNumber(e.series[t][n])&&(e.series[t][n]>0?a[i][n]+=parseFloat(e.series[t][n])+1e-4:s[i][n]+=parseFloat(e.series[t][n]))}))})),Object.entries(a).forEach((function(t){var i,r,n=(i=t,r=1,function(t){if(Array.isArray(t))return t}(i)||function(t,e){var i=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null!=i){var a,r,s=[],n=!0,o=!1;try{for(i=i.call(t);!(n=(a=i.next()).done)&&(s.push(a.value),!e||s.length!==e);n=!0);}catch(t){o=!0,r=t}finally{try{n||null==i.return||i.return()}finally{if(o)throw r}}return s}}(i,r)||function(t,e){if(t){if(\"string\"==typeof t)return At(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?At(t,e):void 0}}(i,r)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}())[0];a[n].forEach((function(t,i){e.maxY=Math.max(e.maxY,a[n][i]),e.minY=Math.min(e.minY,s[n][i])}))}))}}}],i&&St(e.prototype,i),t}();function Pt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Lt=function(){function t(e,i){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.elgrid=i,this.w=e.w;var a=this.w;this.xaxisFontSize=a.config.xaxis.labels.style.fontSize,this.axisFontFamily=a.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=a.config.xaxis.labels.style.colors,this.isCategoryBarHorizontal=\"bar\"===a.config.chart.type&&a.config.plotOptions.bar.horizontal,this.xAxisoffX=0,\"bottom\"===a.config.xaxis.position&&(this.xAxisoffX=a.globals.gridHeight),this.drawnLabels=[],this.axesUtils=new ut(e)}var e,i;return e=t,(i=[{key:\"drawYaxis\",value:function(t){var e=this,i=this.w,a=new g(this.ctx),r=i.config.yaxis[t].labels.style,s=r.fontSize,n=r.fontFamily,o=r.fontWeight,l=a.group({class:\"apexcharts-yaxis\",rel:t,transform:\"translate(\"+i.globals.translateYAxisX[t]+\", 0)\"});if(this.axesUtils.isYAxisHidden(t))return l;var c=a.group({class:\"apexcharts-yaxis-texts-g\"});l.add(c);var h=i.globals.yAxisScale[t].result.length-1,d=i.globals.gridHeight/h,u=i.globals.translateY,f=i.globals.yLabelFormatters[t],p=i.globals.yAxisScale[t].result.slice();p=this.axesUtils.checkForReversedLabels(t,p);var x=\"\";if(i.config.yaxis[t].labels.show)for(var b=function(l){var g=p[l];g=f(g,l,i);var b=i.config.yaxis[t].labels.padding;i.config.yaxis[t].opposite&&0!==i.config.yaxis.length&&(b*=-1);var v=\"end\";i.config.yaxis[t].opposite&&(v=\"start\"),\"left\"===i.config.yaxis[t].labels.align?v=\"start\":\"center\"===i.config.yaxis[t].labels.align?v=\"middle\":\"right\"===i.config.yaxis[t].labels.align&&(v=\"end\");var m=e.axesUtils.getYAxisForeColor(r.colors,t),y=a.drawText({x:b,y:u+h/10+i.config.yaxis[t].labels.offsetY+1,text:g,textAnchor:v,fontSize:s,fontFamily:n,fontWeight:o,maxWidth:i.config.yaxis[t].labels.maxWidth,foreColor:Array.isArray(m)?m[l]:m,isPlainText:!1,cssClass:\"apexcharts-yaxis-label \"+r.cssClass});l===h&&(x=y),c.add(y);var w=document.createElementNS(i.globals.SVGNS,\"title\");if(w.textContent=Array.isArray(g)?g.join(\" \"):g,y.node.appendChild(w),0!==i.config.yaxis[t].labels.rotate){var k=a.rotateAroundCenter(x.node),A=a.rotateAroundCenter(y.node);y.node.setAttribute(\"transform\",\"rotate(\".concat(i.config.yaxis[t].labels.rotate,\" \").concat(k.x,\" \").concat(A.y,\")\"))}u+=d},v=h;v>=0;v--)b(v);if(void 0!==i.config.yaxis[t].title.text){var m=a.group({class:\"apexcharts-yaxis-title\"}),y=0;i.config.yaxis[t].opposite&&(y=i.globals.translateYAxisX[t]);var w=a.drawText({x:y,y:i.globals.gridHeight/2+i.globals.translateY+i.config.yaxis[t].title.offsetY,text:i.config.yaxis[t].title.text,textAnchor:\"end\",foreColor:i.config.yaxis[t].title.style.color,fontSize:i.config.yaxis[t].title.style.fontSize,fontWeight:i.config.yaxis[t].title.style.fontWeight,fontFamily:i.config.yaxis[t].title.style.fontFamily,cssClass:\"apexcharts-yaxis-title-text \"+i.config.yaxis[t].title.style.cssClass});m.add(w),l.add(m)}var k=i.config.yaxis[t].axisBorder,A=31+k.offsetX;if(i.config.yaxis[t].opposite&&(A=-31-k.offsetX),k.show){var S=a.drawLine(A,i.globals.translateY+k.offsetY-2,A,i.globals.gridHeight+i.globals.translateY+k.offsetY+2,k.color,0,k.width);l.add(S)}return i.config.yaxis[t].axisTicks.show&&this.axesUtils.drawYAxisTicks(A,h,k,i.config.yaxis[t].axisTicks,t,d,l),l}},{key:\"drawYaxisInversed\",value:function(t){var e=this.w,i=new g(this.ctx),a=i.group({class:\"apexcharts-xaxis apexcharts-yaxis-inversed\"}),r=i.group({class:\"apexcharts-xaxis-texts-g\",transform:\"translate(\".concat(e.globals.translateXAxisX,\", \").concat(e.globals.translateXAxisY,\")\")});a.add(r);var s=e.globals.yAxisScale[t].result.length-1,n=e.globals.gridWidth/s+.1,o=n+e.config.xaxis.labels.offsetX,l=e.globals.xLabelFormatter,c=e.globals.yAxisScale[t].result.slice(),h=e.globals.timescaleLabels;h.length>0&&(this.xaxisLabels=h.slice(),s=(c=h.slice()).length),c=this.axesUtils.checkForReversedLabels(t,c);var d=h.length;if(e.config.xaxis.labels.show)for(var u=d?0:s;d?u<d:u>=0;d?u++:u--){var f=c[u];f=l(f,u,e);var p=e.globals.gridWidth+e.globals.padHorizontal-(o-n+e.config.xaxis.labels.offsetX);if(h.length){var x=this.axesUtils.getLabel(c,h,p,u,this.drawnLabels,this.xaxisFontSize);p=x.x,f=x.text,this.drawnLabels.push(x.text),0===u&&e.globals.skipFirstTimelinelabel&&(f=\"\"),u===c.length-1&&e.globals.skipLastTimelinelabel&&(f=\"\")}var b=i.drawText({x:p,y:this.xAxisoffX+e.config.xaxis.labels.offsetY+30-(\"top\"===e.config.xaxis.position?e.globals.xAxisHeight+e.config.xaxis.axisTicks.height-2:0),text:f,textAnchor:\"middle\",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[t]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,fontWeight:e.config.xaxis.labels.style.fontWeight,isPlainText:!1,cssClass:\"apexcharts-xaxis-label \"+e.config.xaxis.labels.style.cssClass});r.add(b),b.tspan(f);var v=document.createElementNS(e.globals.SVGNS,\"title\");v.textContent=f,b.node.appendChild(v),o+=n}return this.inversedYAxisTitleText(a),this.inversedYAxisBorder(a),a}},{key:\"inversedYAxisBorder\",value:function(t){var e=this.w,i=new g(this.ctx),a=e.config.xaxis.axisBorder;if(a.show){var r=0;\"bar\"===e.config.chart.type&&e.globals.isXNumeric&&(r-=15);var s=i.drawLine(e.globals.padHorizontal+r+a.offsetX,this.xAxisoffX,e.globals.gridWidth,this.xAxisoffX,a.color,0,a.height);this.elgrid&&this.elgrid.elGridBorders&&e.config.grid.show?this.elgrid.elGridBorders.add(s):t.add(s)}}},{key:\"inversedYAxisTitleText\",value:function(t){var e=this.w,i=new g(this.ctx);if(void 0!==e.config.xaxis.title.text){var a=i.group({class:\"apexcharts-xaxis-title apexcharts-yaxis-title-inversed\"}),r=i.drawText({x:e.globals.gridWidth/2+e.config.xaxis.title.offsetX,y:this.xAxisoffX+parseFloat(this.xaxisFontSize)+parseFloat(e.config.xaxis.title.style.fontSize)+e.config.xaxis.title.offsetY+20,text:e.config.xaxis.title.text,textAnchor:\"middle\",fontSize:e.config.xaxis.title.style.fontSize,fontFamily:e.config.xaxis.title.style.fontFamily,fontWeight:e.config.xaxis.title.style.fontWeight,foreColor:e.config.xaxis.title.style.color,cssClass:\"apexcharts-xaxis-title-text \"+e.config.xaxis.title.style.cssClass});a.add(r),t.add(a)}}},{key:\"yAxisTitleRotate\",value:function(t,e){var i=this.w,a=new g(this.ctx),r={width:0,height:0},s={width:0,height:0},n=i.globals.dom.baseEl.querySelector(\" .apexcharts-yaxis[rel='\".concat(t,\"'] .apexcharts-yaxis-texts-g\"));null!==n&&(r=n.getBoundingClientRect());var o=i.globals.dom.baseEl.querySelector(\".apexcharts-yaxis[rel='\".concat(t,\"'] .apexcharts-yaxis-title text\"));if(null!==o&&(s=o.getBoundingClientRect()),null!==o){var l=this.xPaddingForYAxisTitle(t,r,s,e);o.setAttribute(\"x\",l.xPos-(e?10:0))}if(null!==o){var c=a.rotateAroundCenter(o);o.setAttribute(\"transform\",\"rotate(\".concat(e?-1*i.config.yaxis[t].title.rotate:i.config.yaxis[t].title.rotate,\" \").concat(c.x,\" \").concat(c.y,\")\"))}}},{key:\"xPaddingForYAxisTitle\",value:function(t,e,i,a){var r=this.w,s=0,n=0,o=10;return void 0===r.config.yaxis[t].title.text||t<0?{xPos:n,padd:0}:(a?(n=e.width+r.config.yaxis[t].title.offsetX+i.width/2+o/2,0===(s+=1)&&(n-=o/2)):(n=-1*e.width+r.config.yaxis[t].title.offsetX+o/2+i.width/2,r.globals.isBarHorizontal&&(o=25,n=-1*e.width-r.config.yaxis[t].title.offsetX-o)),{xPos:n,padd:o})}},{key:\"setYAxisXPosition\",value:function(t,e){var i=this.w,a=0,r=0,s=18,n=1;i.config.yaxis.length>1&&(this.multipleYs=!0),i.config.yaxis.map((function(o,l){var c=i.globals.ignoreYAxisIndexes.indexOf(l)>-1||!o.show||o.floating||0===t[l].width,h=t[l].width+e[l].width;o.opposite?i.globals.isBarHorizontal?(r=i.globals.gridWidth+i.globals.translateX-1,i.globals.translateYAxisX[l]=r-o.labels.offsetX):(r=i.globals.gridWidth+i.globals.translateX+n,c||(n=n+h+20),i.globals.translateYAxisX[l]=r-o.labels.offsetX+20):(a=i.globals.translateX-s,c||(s=s+h+20),i.globals.translateYAxisX[l]=a+o.labels.offsetX)}))}},{key:\"setYAxisTextAlignments\",value:function(){var t=this.w,e=t.globals.dom.baseEl.getElementsByClassName(\"apexcharts-yaxis\");(e=r.listToArray(e)).forEach((function(e,i){var a=t.config.yaxis[i];if(a&&!a.floating&&void 0!==a.labels.align){var s=t.globals.dom.baseEl.querySelector(\".apexcharts-yaxis[rel='\".concat(i,\"'] .apexcharts-yaxis-texts-g\")),n=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis[rel='\".concat(i,\"'] .apexcharts-yaxis-label\"));n=r.listToArray(n);var o=s.getBoundingClientRect();\"left\"===a.labels.align?(n.forEach((function(t,e){t.setAttribute(\"text-anchor\",\"start\")})),a.opposite||s.setAttribute(\"transform\",\"translate(-\".concat(o.width,\", 0)\"))):\"center\"===a.labels.align?(n.forEach((function(t,e){t.setAttribute(\"text-anchor\",\"middle\")})),s.setAttribute(\"transform\",\"translate(\".concat(o.width/2*(a.opposite?1:-1),\", 0)\"))):\"right\"===a.labels.align&&(n.forEach((function(t,e){t.setAttribute(\"text-anchor\",\"end\")})),a.opposite&&s.setAttribute(\"transform\",\"translate(\".concat(o.width,\", 0)\")))}}))}}])&&Pt(e.prototype,i),t}();function Ot(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Tt=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.documentEvent=r.bind(this.documentEvent,this)}var e,i;return e=t,(i=[{key:\"addEventListener\",value:function(t,e){var i=this.w;i.globals.events.hasOwnProperty(t)?i.globals.events[t].push(e):i.globals.events[t]=[e]}},{key:\"removeEventListener\",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){var a=i.globals.events[t].indexOf(e);-1!==a&&i.globals.events[t].splice(a,1)}}},{key:\"fireEvent\",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){e&&e.length||(e=[]);for(var a=i.globals.events[t],r=a.length,s=0;s<r;s++)a[s].apply(null,e)}}},{key:\"setupEventHandlers\",value:function(){var t=this,e=this.w,i=this.ctx,a=e.globals.dom.baseEl.querySelector(e.globals.chartClass);this.ctx.eventList.forEach((function(t){a.addEventListener(t,(function(t){var a=Object.assign({},e,{seriesIndex:e.globals.capturedSeriesIndex,dataPointIndex:e.globals.capturedDataPointIndex});\"mousemove\"===t.type||\"touchmove\"===t.type?\"function\"==typeof e.config.chart.events.mouseMove&&e.config.chart.events.mouseMove(t,i,a):\"mouseleave\"===t.type||\"touchleave\"===t.type?\"function\"==typeof e.config.chart.events.mouseLeave&&e.config.chart.events.mouseLeave(t,i,a):(\"mouseup\"===t.type&&1===t.which||\"touchend\"===t.type)&&(\"function\"==typeof e.config.chart.events.click&&e.config.chart.events.click(t,i,a),i.ctx.events.fireEvent(\"click\",[t,i,a]))}),{capture:!1,passive:!0})})),this.ctx.eventList.forEach((function(i){e.globals.dom.baseEl.addEventListener(i,t.documentEvent,{passive:!0})})),this.ctx.core.setupBrushHandler()}},{key:\"documentEvent\",value:function(t){var e=this.w,i=t.target.className;if(\"click\"===t.type){var a=e.globals.dom.baseEl.querySelector(\".apexcharts-menu\");a&&a.classList.contains(\"apexcharts-menu-open\")&&\"apexcharts-menu-icon\"!==i&&a.classList.remove(\"apexcharts-menu-open\")}e.globals.clientX=\"touchmove\"===t.type?t.touches[0].clientX:t.clientX,e.globals.clientY=\"touchmove\"===t.type?t.touches[0].clientY:t.clientY}}])&&Ot(e.prototype,i),t}();function It(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Et=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,(i=[{key:\"setCurrentLocaleValues\",value:function(t){var e=this.w.config.chart.locales;window.Apex.chart&&window.Apex.chart.locales&&window.Apex.chart.locales.length>0&&(e=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=e.filter((function(e){return e.name===t}))[0];if(!i)throw new Error(\"Wrong locale name provided. Please make sure you set the correct locale name in options\");var a=r.extend(S,i);this.w.globals.locale=a.options}}])&&It(e.prototype,i),t}();function Mt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Xt=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,(i=[{key:\"drawAxis\",value:function(t,e){var i,a,r=this,s=this.w.globals,n=this.w.config,o=new vt(this.ctx,e),l=new Lt(this.ctx,e);s.axisCharts&&\"radar\"!==t&&(s.isBarHorizontal?(a=l.drawYaxisInversed(0),i=o.drawXaxisInversed(0),s.dom.elGraphical.add(i),s.dom.elGraphical.add(a)):(i=o.drawXaxis(),s.dom.elGraphical.add(i),n.yaxis.map((function(t,e){if(-1===s.ignoreYAxisIndexes.indexOf(e)&&(a=l.drawYaxis(e),s.dom.Paper.add(a),\"back\"===r.w.config.grid.position)){var i=s.dom.Paper.children()[1];i.remove(),s.dom.Paper.add(i)}}))))}}])&&Mt(e.prototype,i),t}();function zt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const Yt=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,(i=[{key:\"drawXCrosshairs\",value:function(){var t=this.w,e=new g(this.ctx),i=new l(this.ctx),a=t.config.xaxis.crosshairs.fill.gradient,s=t.config.xaxis.crosshairs.dropShadow,n=t.config.xaxis.crosshairs.fill.type,o=a.colorFrom,c=a.colorTo,h=a.opacityFrom,d=a.opacityTo,u=a.stops,f=s.enabled,p=s.left,x=s.top,b=s.blur,v=s.color,m=s.opacity,y=t.config.xaxis.crosshairs.fill.color;if(t.config.xaxis.crosshairs.show){\"gradient\"===n&&(y=e.drawGradient(\"vertical\",o,c,h,d,null,u,null));var w=e.drawRect();1===t.config.xaxis.crosshairs.width&&(w=e.drawLine());var k=t.globals.gridHeight;(!r.isNumber(k)||k<0)&&(k=0);var A=t.config.xaxis.crosshairs.width;(!r.isNumber(A)||A<0)&&(A=0),w.attr({class:\"apexcharts-xcrosshairs\",x:0,y:0,y2:k,width:A,height:k,fill:y,filter:\"none\",\"fill-opacity\":t.config.xaxis.crosshairs.opacity,stroke:t.config.xaxis.crosshairs.stroke.color,\"stroke-width\":t.config.xaxis.crosshairs.stroke.width,\"stroke-dasharray\":t.config.xaxis.crosshairs.stroke.dashArray}),f&&(w=i.dropShadow(w,{left:p,top:x,blur:b,color:v,opacity:m})),t.globals.dom.elGraphical.add(w)}}},{key:\"drawYCrosshairs\",value:function(){var t=this.w,e=new g(this.ctx),i=t.config.yaxis[0].crosshairs,a=t.globals.barPadForNumericAxis;if(t.config.yaxis[0].crosshairs.show){var r=e.drawLine(-a,0,t.globals.gridWidth+a,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);r.attr({class:\"apexcharts-ycrosshairs\"}),t.globals.dom.elGraphical.add(r)}var s=e.drawLine(-a,0,t.globals.gridWidth+a,0,i.stroke.color,0,0);s.attr({class:\"apexcharts-ycrosshairs-hidden\"}),t.globals.dom.elGraphical.add(s)}}])&&zt(e.prototype,i),t}();function Rt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Dt=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,i=[{key:\"checkResponsiveConfig\",value:function(t){var e=this,i=this.w,a=i.config;if(0!==a.responsive.length){var s=a.responsive.slice();s.sort((function(t,e){return t.breakpoint>e.breakpoint?1:e.breakpoint>t.breakpoint?-1:0})).reverse();var n=new G({}),o=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=s[0].breakpoint,o=window.innerWidth>0?window.innerWidth:screen.width;if(o>a){var l=p.extendArrayProps(n,i.globals.initialConfig,i);t=r.extend(l,t),t=r.extend(i.config,t),e.overrideResponsiveOptions(t)}else for(var c=0;c<s.length;c++)o<s[c].breakpoint&&(t=p.extendArrayProps(n,s[c].options,i),t=r.extend(i.config,t),e.overrideResponsiveOptions(t))};if(t){var l=p.extendArrayProps(n,t,i);l=r.extend(i.config,l),o(l=r.extend(l,t))}else o({})}}},{key:\"overrideResponsiveOptions\",value:function(t){var e=new G(t).init({responsiveOverride:!0});this.w.config=e}}],i&&Rt(e.prototype,i),t}();function Ft(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Ht=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.colors=[],this.w=e.w;var i=this.w;this.isColorFn=!1,this.isHeatmapDistributed=\"treemap\"===i.config.chart.type&&i.config.plotOptions.treemap.distributed||\"heatmap\"===i.config.chart.type&&i.config.plotOptions.heatmap.distributed,this.isBarDistributed=i.config.plotOptions.bar.distributed&&(\"bar\"===i.config.chart.type||\"rangeBar\"===i.config.chart.type)}var e,i;return e=t,i=[{key:\"init\",value:function(){this.setDefaultColors()}},{key:\"setDefaultColors\",value:function(){var t,e=this,i=this.w,a=new r;if(i.globals.dom.elWrap.classList.add(\"apexcharts-theme-\".concat(i.config.theme.mode)),void 0===i.config.colors||0===(null===(t=i.config.colors)||void 0===t?void 0:t.length)?i.globals.colors=this.predefined():(i.globals.colors=i.config.colors,Array.isArray(i.config.colors)&&i.config.colors.length>0&&\"function\"==typeof i.config.colors[0]&&(i.globals.colors=i.config.series.map((function(t,a){var r=i.config.colors[a];return r||(r=i.config.colors[0]),\"function\"==typeof r?(e.isColorFn=!0,r({value:i.globals.axisCharts?i.globals.series[a][0]?i.globals.series[a][0]:0:i.globals.series[a],seriesIndex:a,dataPointIndex:a,w:i})):r})))),i.globals.seriesColors.map((function(t,e){t&&(i.globals.colors[e]=t)})),i.config.theme.monochrome.enabled){var s=[],n=i.globals.series.length;(this.isBarDistributed||this.isHeatmapDistributed)&&(n=i.globals.series[0].length*i.globals.series.length);for(var o=i.config.theme.monochrome.color,l=1/(n/i.config.theme.monochrome.shadeIntensity),c=i.config.theme.monochrome.shadeTo,h=0,d=0;d<n;d++){var u=void 0;\"dark\"===c?(u=a.shadeColor(-1*h,o),h+=l):(u=a.shadeColor(h,o),h+=l),s.push(u)}i.globals.colors=s.slice()}var g=i.globals.colors.slice();this.pushExtraColors(i.globals.colors),[\"fill\",\"stroke\"].forEach((function(t){void 0===i.config[t].colors?i.globals[t].colors=e.isColorFn?i.config.colors:g:i.globals[t].colors=i.config[t].colors.slice(),e.pushExtraColors(i.globals[t].colors)})),void 0===i.config.dataLabels.style.colors?i.globals.dataLabels.style.colors=g:i.globals.dataLabels.style.colors=i.config.dataLabels.style.colors.slice(),this.pushExtraColors(i.globals.dataLabels.style.colors,50),void 0===i.config.plotOptions.radar.polygons.fill.colors?i.globals.radarPolygons.fill.colors=[\"dark\"===i.config.theme.mode?\"#424242\":\"none\"]:i.globals.radarPolygons.fill.colors=i.config.plotOptions.radar.polygons.fill.colors.slice(),this.pushExtraColors(i.globals.radarPolygons.fill.colors,20),void 0===i.config.markers.colors?i.globals.markers.colors=g:i.globals.markers.colors=i.config.markers.colors.slice(),this.pushExtraColors(i.globals.markers.colors)}},{key:\"pushExtraColors\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,r=e||a.globals.series.length;if(null===i&&(i=this.isBarDistributed||this.isHeatmapDistributed||\"heatmap\"===a.config.chart.type&&a.config.plotOptions.heatmap.colorScale.inverse),i&&a.globals.series.length&&(r=a.globals.series[a.globals.maxValsInArrayIndex].length*a.globals.series.length),t.length<r)for(var s=r-t.length,n=0;n<s;n++)t.push(t[n])}},{key:\"updateThemeOptions\",value:function(t){t.chart=t.chart||{},t.tooltip=t.tooltip||{};var e=t.theme.mode||\"light\",i=t.theme.palette?t.theme.palette:\"dark\"===e?\"palette4\":\"palette1\",a=t.chart.foreColor?t.chart.foreColor:\"dark\"===e?\"#f6f7f8\":\"#373d3f\";return t.tooltip.theme=e,t.chart.foreColor=a,t.theme.palette=i,t}},{key:\"predefined\",value:function(){switch(this.w.config.theme.palette){case\"palette1\":default:this.colors=[\"#008FFB\",\"#00E396\",\"#FEB019\",\"#FF4560\",\"#775DD0\"];break;case\"palette2\":this.colors=[\"#3f51b5\",\"#03a9f4\",\"#4caf50\",\"#f9ce1d\",\"#FF9800\"];break;case\"palette3\":this.colors=[\"#33b2df\",\"#546E7A\",\"#d4526e\",\"#13d8aa\",\"#A5978B\"];break;case\"palette4\":this.colors=[\"#4ecdc4\",\"#c7f464\",\"#81D4FA\",\"#fd6a6a\",\"#546E7A\"];break;case\"palette5\":this.colors=[\"#2b908f\",\"#f9a3a4\",\"#90ee7e\",\"#fa4443\",\"#69d2e7\"];break;case\"palette6\":this.colors=[\"#449DD1\",\"#F86624\",\"#EA3546\",\"#662E9B\",\"#C5D86D\"];break;case\"palette7\":this.colors=[\"#D7263D\",\"#1B998B\",\"#2E294E\",\"#F46036\",\"#E2C044\"];break;case\"palette8\":this.colors=[\"#662E9B\",\"#F86624\",\"#F9C80E\",\"#EA3546\",\"#43BCCD\"];break;case\"palette9\":this.colors=[\"#5C4742\",\"#A5978B\",\"#8D5B4C\",\"#5A2A27\",\"#C4BBAF\"];break;case\"palette10\":this.colors=[\"#A300D6\",\"#7D02EB\",\"#5653FE\",\"#2983FF\",\"#00B1F2\"]}return this.colors}}],i&&Ft(e.prototype,i),t}();function Nt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Wt=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,(i=[{key:\"draw\",value:function(){this.drawTitleSubtitle(\"title\"),this.drawTitleSubtitle(\"subtitle\")}},{key:\"drawTitleSubtitle\",value:function(t){var e=this.w,i=\"title\"===t?e.config.title:e.config.subtitle,a=e.globals.svgWidth/2,r=i.offsetY,s=\"middle\";if(\"left\"===i.align?(a=10,s=\"start\"):\"right\"===i.align&&(a=e.globals.svgWidth-10,s=\"end\"),a+=i.offsetX,r=r+parseInt(i.style.fontSize,10)+i.margin/2,void 0!==i.text){var n=new g(this.ctx).drawText({x:a,y:r,text:i.text,textAnchor:s,fontSize:i.style.fontSize,fontFamily:i.style.fontFamily,fontWeight:i.style.fontWeight,foreColor:i.style.color,opacity:1});n.node.setAttribute(\"class\",\"apexcharts-\".concat(t,\"-text\")),e.globals.dom.Paper.add(n)}}}])&&Nt(e.prototype,i),t}();function jt(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}function Bt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Gt=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.dCtx=e}var e,i;return e=t,(i=[{key:\"getTitleSubtitleCoords\",value:function(t){var e=this.w,i=0,a=0,r=\"title\"===t?e.config.title.floating:e.config.subtitle.floating,s=e.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(t,\"-text\"));if(null!==s&&!r){var n=s.getBoundingClientRect();i=n.width,a=e.globals.axisCharts?n.height+5:n.height}return{width:i,height:a}}},{key:\"getLegendsRect\",value:function(){var t=this.w,e=t.globals.dom.elLegendWrap;t.config.legend.height||\"top\"!==t.config.legend.position&&\"bottom\"!==t.config.legend.position||(e.style.maxHeight=t.globals.svgHeight/2+\"px\");var i=Object.assign({},r.getBoundingClientRect(e));return null!==e&&!t.config.legend.floating&&t.config.legend.show?this.dCtx.lgRect={x:i.x,y:i.y,height:i.height,width:0===i.height?0:i.width}:this.dCtx.lgRect={x:0,y:0,height:0,width:0},\"left\"!==t.config.legend.position&&\"right\"!==t.config.legend.position||1.5*this.dCtx.lgRect.width>t.globals.svgWidth&&(this.dCtx.lgRect.width=t.globals.svgWidth/1.5),this.dCtx.lgRect}},{key:\"getLargestStringFromMultiArr\",value:function(t,e){var i=t;if(this.w.globals.isMultiLineX){var a=e.map((function(t,e){return Array.isArray(t)?t.length:1})),r=Math.max.apply(Math,function(t){return function(t){if(Array.isArray(t))return jt(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||function(t,e){if(t){if(\"string\"==typeof t)return jt(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?jt(t,e):void 0}}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}(a));i=e[a.indexOf(r)]}return i}}])&&Bt(e.prototype,i),t}();function Vt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var _t=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.dCtx=e}var e,i;return e=t,(i=[{key:\"getxAxisLabelsCoords\",value:function(){var t,e=this.w,i=e.globals.labels.slice();if(e.config.xaxis.convertedCatToNumeric&&0===i.length&&(i=e.globals.categoryLabels),e.globals.timescaleLabels.length>0){var a=this.getxAxisTimeScaleLabelsCoords();t={width:a.width,height:a.height},e.globals.rotateXLabels=!1}else{this.dCtx.lgWidthForSideLegends=\"left\"!==e.config.legend.position&&\"right\"!==e.config.legend.position||e.config.legend.floating?0:this.dCtx.lgRect.width;var s=e.globals.xLabelFormatter,n=r.getLargestStringFromArr(i),o=this.dCtx.dimHelpers.getLargestStringFromMultiArr(n,i);e.globals.isBarHorizontal&&(o=n=e.globals.yAxisScale[0].result.reduce((function(t,e){return t.length>e.length?t:e}),0));var l=new z(this.dCtx.ctx),c=n;n=l.xLabelFormat(s,n,c,{i:void 0,dateFormatter:new M(this.dCtx.ctx).formatDate,w:e}),o=l.xLabelFormat(s,o,c,{i:void 0,dateFormatter:new M(this.dCtx.ctx).formatDate,w:e}),(e.config.xaxis.convertedCatToNumeric&&void 0===n||\"\"===String(n).trim())&&(o=n=\"1\");var h=new g(this.dCtx.ctx),d=h.getTextRects(n,e.config.xaxis.labels.style.fontSize),u=d;if(n!==o&&(u=h.getTextRects(o,e.config.xaxis.labels.style.fontSize)),(t={width:d.width>=u.width?d.width:u.width,height:d.height>=u.height?d.height:u.height}).width*i.length>e.globals.svgWidth-this.dCtx.lgWidthForSideLegends-this.dCtx.yAxisWidth-this.dCtx.gridPad.left-this.dCtx.gridPad.right&&0!==e.config.xaxis.labels.rotate||e.config.xaxis.labels.rotateAlways){if(!e.globals.isBarHorizontal){e.globals.rotateXLabels=!0;var f=function(t){return h.getTextRects(t,e.config.xaxis.labels.style.fontSize,e.config.xaxis.labels.style.fontFamily,\"rotate(\".concat(e.config.xaxis.labels.rotate,\" 0 0)\"),!1)};d=f(n),n!==o&&(u=f(o)),t.height=(d.height>u.height?d.height:u.height)/1.5,t.width=d.width>u.width?d.width:u.width}}else e.globals.rotateXLabels=!1}return e.config.xaxis.labels.show||(t={width:0,height:0}),{width:t.width,height:t.height}}},{key:\"getxAxisGroupLabelsCoords\",value:function(){var t,e=this.w;if(!e.globals.hasXaxisGroups)return{width:0,height:0};var i,a=(null===(t=e.config.xaxis.group.style)||void 0===t?void 0:t.fontSize)||e.config.xaxis.labels.style.fontSize,s=e.globals.groups.map((function(t){return t.title})),n=r.getLargestStringFromArr(s),o=this.dCtx.dimHelpers.getLargestStringFromMultiArr(n,s),l=new g(this.dCtx.ctx),c=l.getTextRects(n,a),h=c;return n!==o&&(h=l.getTextRects(o,a)),i={width:c.width>=h.width?c.width:h.width,height:c.height>=h.height?c.height:h.height},e.config.xaxis.labels.show||(i={width:0,height:0}),{width:i.width,height:i.height}}},{key:\"getxAxisTitleCoords\",value:function(){var t=this.w,e=0,i=0;if(void 0!==t.config.xaxis.title.text){var a=new g(this.dCtx.ctx).getTextRects(t.config.xaxis.title.text,t.config.xaxis.title.style.fontSize);e=a.width,i=a.height}return{width:e,height:i}}},{key:\"getxAxisTimeScaleLabelsCoords\",value:function(){var t,e=this.w;this.dCtx.timescaleLabels=e.globals.timescaleLabels.slice();var i=this.dCtx.timescaleLabels.map((function(t){return t.value})),a=i.reduce((function(t,e){return void 0===t?(console.error(\"You have possibly supplied invalid Date format. Please supply a valid JavaScript Date\"),0):t.length>e.length?t:e}),0);return 1.05*(t=new g(this.dCtx.ctx).getTextRects(a,e.config.xaxis.labels.style.fontSize)).width*i.length>e.globals.gridWidth&&0!==e.config.xaxis.labels.rotate&&(e.globals.overlappingXLabels=!0),t}},{key:\"additionalPaddingXLabels\",value:function(t){var e=this,i=this.w,a=i.globals,r=i.config,s=r.xaxis.type,n=t.width;a.skipLastTimelinelabel=!1,a.skipFirstTimelinelabel=!1;var o=i.config.yaxis[0].opposite&&i.globals.isBarHorizontal;r.yaxis.forEach((function(t,l){o?(e.dCtx.gridPad.left<n&&(e.dCtx.xPadLeft=n/2+1),e.dCtx.xPadRight=n/2+1):function(t,o){r.yaxis.length>1&&function(t){return-1!==a.collapsedSeriesIndices.indexOf(t)}(o)||function(t){if(e.dCtx.timescaleLabels&&e.dCtx.timescaleLabels.length){var o=e.dCtx.timescaleLabels[0],l=e.dCtx.timescaleLabels[e.dCtx.timescaleLabels.length-1].position+n/1.75-e.dCtx.yAxisWidthRight,c=o.position-n/1.75+e.dCtx.yAxisWidthLeft,h=\"right\"===i.config.legend.position&&e.dCtx.lgRect.width>0?e.dCtx.lgRect.width:0;l>a.svgWidth-a.translateX-h&&(a.skipLastTimelinelabel=!0),c<-(t.show&&!t.floating||\"bar\"!==r.chart.type&&\"candlestick\"!==r.chart.type&&\"rangeBar\"!==r.chart.type&&\"boxPlot\"!==r.chart.type?10:n/1.75)&&(a.skipFirstTimelinelabel=!0)}else\"datetime\"===s?e.dCtx.gridPad.right<n&&!a.rotateXLabels&&(a.skipLastTimelinelabel=!0):\"datetime\"!==s&&e.dCtx.gridPad.right<n/2-e.dCtx.yAxisWidthRight&&!a.rotateXLabels&&!i.config.xaxis.labels.trim&&(\"between\"!==i.config.xaxis.tickPlacement||i.globals.isBarHorizontal)&&(e.dCtx.xPadRight=n/2+1)}(t)}(t,l)}))}}])&&Vt(e.prototype,i),t}();function Ut(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var qt=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.dCtx=e}var e,i;return e=t,(i=[{key:\"getyAxisLabelsCoords\",value:function(){var t=this,e=this.w,i=[],a=10,s=new ut(this.dCtx.ctx);return e.config.yaxis.map((function(n,o){var l=e.globals.yAxisScale[o],c=0;if(!s.isYAxisHidden(o)&&n.labels.show&&void 0!==n.labels.minWidth&&(c=n.labels.minWidth),!s.isYAxisHidden(o)&&n.labels.show&&l.result.length){var h=e.globals.yLabelFormatters[o],d=l.niceMin===Number.MIN_VALUE?0:l.niceMin,u=String(d).length>String(l.niceMax).length?d:l.niceMax,f=h(u,{seriesIndex:o,dataPointIndex:-1,w:e}),p=f;if(void 0!==f&&0!==f.length||(f=u),e.globals.isBarHorizontal){a=0;var x=e.globals.labels.slice();f=h(f=r.getLargestStringFromArr(x),{seriesIndex:o,dataPointIndex:-1,w:e}),p=t.dCtx.dimHelpers.getLargestStringFromMultiArr(f,x)}var b=new g(t.dCtx.ctx),v=\"rotate(\".concat(n.labels.rotate,\" 0 0)\"),m=b.getTextRects(f,n.labels.style.fontSize,n.labels.style.fontFamily,v,!1),y=m;f!==p&&(y=b.getTextRects(p,n.labels.style.fontSize,n.labels.style.fontFamily,v,!1)),i.push({width:(c>y.width||c>m.width?c:y.width>m.width?y.width:m.width)+a,height:y.height>m.height?y.height:m.height})}else i.push({width:0,height:0})})),i}},{key:\"getyAxisTitleCoords\",value:function(){var t=this,e=this.w,i=[];return e.config.yaxis.map((function(e,a){if(e.show&&void 0!==e.title.text){var r=new g(t.dCtx.ctx),s=\"rotate(\".concat(e.title.rotate,\" 0 0)\"),n=r.getTextRects(e.title.text,e.title.style.fontSize,e.title.style.fontFamily,s,!1);i.push({width:n.width,height:n.height})}else i.push({width:0,height:0})})),i}},{key:\"getTotalYAxisWidth\",value:function(){var t=this.w,e=0,i=0,a=0,r=t.globals.yAxisScale.length>1?10:0,s=new ut(this.dCtx.ctx),n=function(n,o){var l=t.config.yaxis[o].floating,c=0;n.width>0&&!l?(c=n.width+r,function(e){return t.globals.ignoreYAxisIndexes.indexOf(e)>-1}(o)&&(c=c-n.width-r)):c=l||s.isYAxisHidden(o)?0:5,t.config.yaxis[o].opposite?a+=c:i+=c,e+=c};return t.globals.yLabelsCoords.map((function(t,e){n(t,e)})),t.globals.yTitleCoords.map((function(t,e){n(t,e)})),t.globals.isBarHorizontal&&!t.config.yaxis[0].floating&&(e=t.globals.yLabelsCoords[0].width+t.globals.yTitleCoords[0].width+15),this.dCtx.yAxisWidthLeft=i,this.dCtx.yAxisWidthRight=a,e}}])&&Ut(e.prototype,i),t}();function Zt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var $t=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.dCtx=e}var e,i;return e=t,(i=[{key:\"gridPadForColumnsInNumericAxis\",value:function(t){var e=this.w;if(e.globals.noData||e.globals.allSeriesCollapsed)return 0;var i=function(t){return\"bar\"===t||\"rangeBar\"===t||\"candlestick\"===t||\"boxPlot\"===t},a=e.config.chart.type,r=0,s=i(a)?e.config.series.length:1;if(e.globals.comboBarCount>0&&(s=e.globals.comboBarCount),e.globals.collapsedSeries.forEach((function(t){i(t.type)&&(s-=1)})),e.config.chart.stacked&&(s=1),(i(a)||e.globals.comboBarCount>0)&&e.globals.isXNumeric&&!e.globals.isBarHorizontal&&s>0){var n,o,l=Math.abs(e.globals.initialMaxX-e.globals.initialMinX);l<=3&&(l=e.globals.dataPoints),n=l/t,e.globals.minXDiff&&e.globals.minXDiff/n>0&&(o=e.globals.minXDiff/n),o>t/2&&(o/=2),(r=o/s*parseInt(e.config.plotOptions.bar.columnWidth,10)/100)<1&&(r=1),r=r/(s>1?1:1.5)+5,e.globals.barPadForNumericAxis=r}return r}},{key:\"gridPadFortitleSubtitle\",value:function(){var t=this,e=this.w,i=e.globals,a=this.dCtx.isSparkline||!e.globals.axisCharts?0:10;[\"title\",\"subtitle\"].forEach((function(i){void 0!==e.config[i].text?a+=e.config[i].margin:a+=t.dCtx.isSparkline||!e.globals.axisCharts?0:5})),!e.config.legend.show||\"bottom\"!==e.config.legend.position||e.config.legend.floating||e.globals.axisCharts||(a+=10);var r=this.dCtx.dimHelpers.getTitleSubtitleCoords(\"title\"),s=this.dCtx.dimHelpers.getTitleSubtitleCoords(\"subtitle\");i.gridHeight=i.gridHeight-r.height-s.height-a,i.translateY=i.translateY+r.height+s.height+a}},{key:\"setGridXPosForDualYAxis\",value:function(t,e){var i=this.w,a=new ut(this.dCtx.ctx);i.config.yaxis.map((function(r,s){-1!==i.globals.ignoreYAxisIndexes.indexOf(s)||r.floating||a.isYAxisHidden(s)||(r.opposite&&(i.globals.translateX=i.globals.translateX-(e[s].width+t[s].width)-parseInt(i.config.yaxis[s].labels.style.fontSize,10)/1.2-12),i.globals.translateX<2&&(i.globals.translateX=2))}))}}])&&Zt(e.prototype,i),t}();function Jt(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}function Qt(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Kt=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.lgRect={},this.yAxisWidth=0,this.yAxisWidthLeft=0,this.yAxisWidthRight=0,this.xAxisHeight=0,this.isSparkline=this.w.config.chart.sparkline.enabled,this.dimHelpers=new Gt(this),this.dimYAxis=new qt(this),this.dimXAxis=new _t(this),this.dimGrid=new $t(this),this.lgWidthForSideLegends=0,this.gridPad=this.w.config.grid.padding,this.xPadRight=0,this.xPadLeft=0}var e,i;return e=t,(i=[{key:\"plotCoords\",value:function(){var t=this,e=this.w,i=e.globals;this.lgRect=this.dimHelpers.getLegendsRect(),this.isSparkline&&(e.config.markers.discrete.length>0||e.config.markers.size>0)&&Object.entries(this.gridPad).forEach((function(e){var i,a,r=(a=2,function(t){if(Array.isArray(t))return t}(i=e)||function(t,e){var i=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null!=i){var a,r,s=[],n=!0,o=!1;try{for(i=i.call(t);!(n=(a=i.next()).done)&&(s.push(a.value),!e||s.length!==e);n=!0);}catch(t){o=!0,r=t}finally{try{n||null==i.return||i.return()}finally{if(o)throw r}}return s}}(i,a)||function(t,e){if(t){if(\"string\"==typeof t)return Jt(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?Jt(t,e):void 0}}(i,a)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),s=r[0],n=r[1];t.gridPad[s]=Math.max(n,t.w.globals.markers.largestSize/1.5)})),i.axisCharts?this.setDimensionsForAxisCharts():this.setDimensionsForNonAxisCharts(),this.dimGrid.gridPadFortitleSubtitle(),i.gridHeight=i.gridHeight-this.gridPad.top-this.gridPad.bottom,i.gridWidth=i.gridWidth-this.gridPad.left-this.gridPad.right-this.xPadRight-this.xPadLeft;var a=this.dimGrid.gridPadForColumnsInNumericAxis(i.gridWidth);i.gridWidth=i.gridWidth-2*a,i.translateX=i.translateX+this.gridPad.left+this.xPadLeft+(a>0?a+4:0),i.translateY=i.translateY+this.gridPad.top}},{key:\"setDimensionsForAxisCharts\",value:function(){var t=this,e=this.w,i=e.globals,a=this.dimYAxis.getyAxisLabelsCoords(),r=this.dimYAxis.getyAxisTitleCoords();e.globals.yLabelsCoords=[],e.globals.yTitleCoords=[],e.config.yaxis.map((function(t,i){e.globals.yLabelsCoords.push({width:a[i].width,index:i}),e.globals.yTitleCoords.push({width:r[i].width,index:i})})),this.yAxisWidth=this.dimYAxis.getTotalYAxisWidth();var s=this.dimXAxis.getxAxisLabelsCoords(),n=this.dimXAxis.getxAxisGroupLabelsCoords(),o=this.dimXAxis.getxAxisTitleCoords();this.conditionalChecksForAxisCoords(s,o,n),i.translateXAxisY=e.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=e.globals.rotateXLabels&&e.globals.isXNumeric&&e.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,e.globals.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(e.config.xaxis.labels.style.fontSize,10)/1.5*-1),i.translateXAxisY=i.translateXAxisY+e.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+e.config.xaxis.labels.offsetX;var l=this.yAxisWidth,c=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight-o.height,i.xAxisGroupLabelsHeight=i.xAxisLabelsHeight-s.height,i.xAxisLabelsWidth=this.xAxisWidth,i.xAxisHeight=this.xAxisHeight;var h=10;(\"radar\"===e.config.chart.type||this.isSparkline)&&(l=0,c=i.goldenPadding),this.isSparkline&&(this.lgRect={height:0,width:0}),(this.isSparkline||\"treemap\"===e.config.chart.type)&&(l=0,c=0,h=0),this.isSparkline||this.dimXAxis.additionalPaddingXLabels(s);var d=function(){i.translateX=l,i.gridHeight=i.svgHeight-t.lgRect.height-c-(t.isSparkline||\"treemap\"===e.config.chart.type?0:e.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-l};switch(\"top\"===e.config.xaxis.position&&(h=i.xAxisHeight-e.config.xaxis.axisTicks.height-5),e.config.legend.position){case\"bottom\":i.translateY=h,d();break;case\"top\":i.translateY=this.lgRect.height+h,d();break;case\"left\":i.translateY=h,i.translateX=this.lgRect.width+l,i.gridHeight=i.svgHeight-c-12,i.gridWidth=i.svgWidth-this.lgRect.width-l;break;case\"right\":i.translateY=h,i.translateX=l,i.gridHeight=i.svgHeight-c-12,i.gridWidth=i.svgWidth-this.lgRect.width-l-5;break;default:throw new Error(\"Legend position not supported\")}this.dimGrid.setGridXPosForDualYAxis(r,a),new Lt(this.ctx).setYAxisXPosition(a,r)}},{key:\"setDimensionsForNonAxisCharts\",value:function(){var t=this.w,e=t.globals,i=t.config,a=0;t.config.legend.show&&!t.config.legend.floating&&(a=20);var r=\"pie\"===i.chart.type||\"polarArea\"===i.chart.type||\"donut\"===i.chart.type?\"pie\":\"radialBar\",s=i.plotOptions[r].offsetY,n=i.plotOptions[r].offsetX;if(!i.legend.show||i.legend.floating)return e.gridHeight=e.svgHeight-i.grid.padding.left+i.grid.padding.right,e.gridWidth=e.gridHeight,e.translateY=s,void(e.translateX=n+(e.svgWidth-e.gridWidth)/2);switch(i.legend.position){case\"bottom\":e.gridHeight=e.svgHeight-this.lgRect.height-e.goldenPadding,e.gridWidth=e.svgWidth,e.translateY=s-10,e.translateX=n+(e.svgWidth-e.gridWidth)/2;break;case\"top\":e.gridHeight=e.svgHeight-this.lgRect.height-e.goldenPadding,e.gridWidth=e.svgWidth,e.translateY=this.lgRect.height+s+10,e.translateX=n+(e.svgWidth-e.gridWidth)/2;break;case\"left\":e.gridWidth=e.svgWidth-this.lgRect.width-a,e.gridHeight=\"auto\"!==i.chart.height?e.svgHeight:e.gridWidth,e.translateY=s,e.translateX=n+this.lgRect.width+a;break;case\"right\":e.gridWidth=e.svgWidth-this.lgRect.width-a-5,e.gridHeight=\"auto\"!==i.chart.height?e.svgHeight:e.gridWidth,e.translateY=s,e.translateX=n+10;break;default:throw new Error(\"Legend position not supported\")}}},{key:\"conditionalChecksForAxisCoords\",value:function(t,e,i){var a=this.w,r=a.globals.hasXaxisGroups?2:1,s=i.height+t.height+e.height,n=a.globals.isMultiLineX?1.2:a.globals.LINE_HEIGHT_RATIO,o=a.globals.rotateXLabels?22:10,l=a.globals.rotateXLabels&&\"bottom\"===a.config.legend.position?10:0;this.xAxisHeight=s*n+r*o+l,this.xAxisWidth=t.width,this.xAxisHeight-e.height>a.config.xaxis.labels.maxHeight&&(this.xAxisHeight=a.config.xaxis.labels.maxHeight),a.config.xaxis.labels.minHeight&&this.xAxisHeight<a.config.xaxis.labels.minHeight&&(this.xAxisHeight=a.config.xaxis.labels.minHeight),a.config.xaxis.floating&&(this.xAxisHeight=0);var c=0,h=0;a.config.yaxis.forEach((function(t){c+=t.labels.minWidth,h+=t.labels.maxWidth})),this.yAxisWidth<c&&(this.yAxisWidth=c),this.yAxisWidth>h&&(this.yAxisWidth=h)}}])&&Qt(e.prototype,i),t}();function te(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var ee=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.lgCtx=e}var e,i;return e=t,(i=[{key:\"getLegendStyles\",value:function(){var t=document.createElement(\"style\");t.setAttribute(\"type\",\"text/css\");var e=document.createTextNode(\"\\t\\n    \\t\\n      .apexcharts-legend {\\t\\n        display: flex;\\t\\n        overflow: auto;\\t\\n        padding: 0 10px;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom, .apexcharts-legend.apx-legend-position-top {\\t\\n        flex-wrap: wrap\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\t\\n        flex-direction: column;\\t\\n        bottom: 0;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-left, .apexcharts-legend.apx-legend-position-top.apexcharts-align-left, .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\t\\n        justify-content: flex-start;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-center, .apexcharts-legend.apx-legend-position-top.apexcharts-align-center {\\t\\n        justify-content: center;  \\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-right, .apexcharts-legend.apx-legend-position-top.apexcharts-align-right {\\t\\n        justify-content: flex-end;\\t\\n      }\\t\\n      .apexcharts-legend-series {\\t\\n        cursor: pointer;\\t\\n        line-height: normal;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom .apexcharts-legend-series, .apexcharts-legend.apx-legend-position-top .apexcharts-legend-series{\\t\\n        display: flex;\\t\\n        align-items: center;\\t\\n      }\\t\\n      .apexcharts-legend-text {\\t\\n        position: relative;\\t\\n        font-size: 14px;\\t\\n      }\\t\\n      .apexcharts-legend-text *, .apexcharts-legend-marker * {\\t\\n        pointer-events: none;\\t\\n      }\\t\\n      .apexcharts-legend-marker {\\t\\n        position: relative;\\t\\n        display: inline-block;\\t\\n        cursor: pointer;\\t\\n        margin-right: 3px;\\t\\n        border-style: solid;\\n      }\\t\\n      \\t\\n      .apexcharts-legend.apexcharts-align-right .apexcharts-legend-series, .apexcharts-legend.apexcharts-align-left .apexcharts-legend-series{\\t\\n        display: inline-block;\\t\\n      }\\t\\n      .apexcharts-legend-series.apexcharts-no-click {\\t\\n        cursor: auto;\\t\\n      }\\t\\n      .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\\t\\n        display: none !important;\\t\\n      }\\t\\n      .apexcharts-inactive-legend {\\t\\n        opacity: 0.45;\\t\\n      }\");return t.appendChild(e),t}},{key:\"getLegendBBox\",value:function(){var t=this.w.globals.dom.baseEl.querySelector(\".apexcharts-legend\").getBoundingClientRect(),e=t.width;return{clwh:t.height,clww:e}}},{key:\"appendToForeignObject\",value:function(){this.w.globals.dom.elLegendForeign.appendChild(this.getLegendStyles())}},{key:\"toggleDataSeries\",value:function(t,e){var i=this,a=this.w;if(a.globals.axisCharts||\"radialBar\"===a.config.chart.type){a.globals.resized=!0;var r=null,s=null;a.globals.risingSeries=[],a.globals.axisCharts?(r=a.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(t,\"']\")),s=parseInt(r.getAttribute(\"data:realIndex\"),10)):(r=a.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(t+1,\"']\")),s=parseInt(r.getAttribute(\"rel\"),10)-1),e?[{cs:a.globals.collapsedSeries,csi:a.globals.collapsedSeriesIndices},{cs:a.globals.ancillaryCollapsedSeries,csi:a.globals.ancillaryCollapsedSeriesIndices}].forEach((function(t){i.riseCollapsedSeries(t.cs,t.csi,s)})):this.hideSeries({seriesEl:r,realIndex:s})}else{var n=a.globals.dom.Paper.select(\" .apexcharts-series[rel='\".concat(t+1,\"'] path\")),o=a.config.chart.type;if(\"pie\"===o||\"polarArea\"===o||\"donut\"===o){var l=a.config.plotOptions.pie.donut.labels;new g(this.lgCtx.ctx).pathMouseDown(n.members[0],null),this.lgCtx.ctx.pie.printDataLabelsInner(n.members[0].node,l)}n.fire(\"click\")}}},{key:\"hideSeries\",value:function(t){var e=t.seriesEl,i=t.realIndex,a=this.w,s=r.clone(a.config.series);if(a.globals.axisCharts){var n=!1;if(a.config.yaxis[i]&&a.config.yaxis[i].show&&a.config.yaxis[i].showAlways&&(n=!0,a.globals.ancillaryCollapsedSeriesIndices.indexOf(i)<0&&(a.globals.ancillaryCollapsedSeries.push({index:i,data:s[i].data.slice(),type:e.parentNode.className.baseVal.split(\"-\")[1]}),a.globals.ancillaryCollapsedSeriesIndices.push(i))),!n){a.globals.collapsedSeries.push({index:i,data:s[i].data.slice(),type:e.parentNode.className.baseVal.split(\"-\")[1]}),a.globals.collapsedSeriesIndices.push(i);var o=a.globals.risingSeries.indexOf(i);a.globals.risingSeries.splice(o,1)}}else a.globals.collapsedSeries.push({index:i,data:s[i]}),a.globals.collapsedSeriesIndices.push(i);for(var l=e.childNodes,c=0;c<l.length;c++)l[c].classList.contains(\"apexcharts-series-markers-wrap\")&&(l[c].classList.contains(\"apexcharts-hide\")?l[c].classList.remove(\"apexcharts-hide\"):l[c].classList.add(\"apexcharts-hide\"));a.globals.allSeriesCollapsed=a.globals.collapsedSeries.length===a.config.series.length,s=this._getSeriesBasedOnCollapsedState(s),this.lgCtx.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled)}},{key:\"riseCollapsedSeries\",value:function(t,e,i){var a=this.w,s=r.clone(a.config.series);if(t.length>0){for(var n=0;n<t.length;n++)t[n].index===i&&(a.globals.axisCharts?(s[i].data=t[n].data.slice(),t.splice(n,1),e.splice(n,1),a.globals.risingSeries.push(i)):(s[i]=t[n].data,t.splice(n,1),e.splice(n,1),a.globals.risingSeries.push(i)));s=this._getSeriesBasedOnCollapsedState(s),this.lgCtx.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled)}}},{key:\"_getSeriesBasedOnCollapsedState\",value:function(t){var e=this.w;return e.globals.axisCharts?t.forEach((function(i,a){e.globals.collapsedSeriesIndices.indexOf(a)>-1&&(t[a].data=[])})):t.forEach((function(i,a){e.globals.collapsedSeriesIndices.indexOf(a)>-1&&(t[a]=0)})),t}}])&&te(e.prototype,i),t}();function ie(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const ae=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.onLegendClick=this.onLegendClick.bind(this),this.onLegendHovered=this.onLegendHovered.bind(this),this.isBarsDistributed=\"bar\"===this.w.config.chart.type&&this.w.config.plotOptions.bar.distributed&&1===this.w.config.series.length,this.legendHelpers=new ee(this)}var e,i;return e=t,(i=[{key:\"init\",value:function(){var t=this.w,e=t.globals,i=t.config;if((i.legend.showForSingleSeries&&1===e.series.length||this.isBarsDistributed||e.series.length>1||!e.axisCharts)&&i.legend.show){for(;e.dom.elLegendWrap.firstChild;)e.dom.elLegendWrap.removeChild(e.dom.elLegendWrap.firstChild);this.drawLegends(),r.isIE11()?document.getElementsByTagName(\"head\")[0].appendChild(this.legendHelpers.getLegendStyles()):this.legendHelpers.appendToForeignObject(),\"bottom\"===i.legend.position||\"top\"===i.legend.position?this.legendAlignHorizontal():\"right\"!==i.legend.position&&\"left\"!==i.legend.position||this.legendAlignVertical()}}},{key:\"drawLegends\",value:function(){var t=this,e=this.w,i=e.config.legend.fontFamily,a=e.globals.seriesNames,s=e.globals.colors.slice();if(\"heatmap\"===e.config.chart.type){var n=e.config.plotOptions.heatmap.colorScale.ranges;a=n.map((function(t){return t.name?t.name:t.from+\" - \"+t.to})),s=n.map((function(t){return t.color}))}else this.isBarsDistributed&&(a=e.globals.labels.slice());e.config.legend.customLegendItems.length&&(a=e.config.legend.customLegendItems);for(var o=e.globals.legendFormatter,l=e.config.legend.inverseOrder,c=l?a.length-1:0;l?c>=0:c<=a.length-1;l?c--:c++){var h=o(a[c],{seriesIndex:c,w:e}),d=!1,u=!1;if(e.globals.collapsedSeries.length>0)for(var f=0;f<e.globals.collapsedSeries.length;f++)e.globals.collapsedSeries[f].index===c&&(d=!0);if(e.globals.ancillaryCollapsedSeriesIndices.length>0)for(var x=0;x<e.globals.ancillaryCollapsedSeriesIndices.length;x++)e.globals.ancillaryCollapsedSeriesIndices[x]===c&&(u=!0);var b=document.createElement(\"span\");b.classList.add(\"apexcharts-legend-marker\");var v=e.config.legend.markers.offsetX,m=e.config.legend.markers.offsetY,y=e.config.legend.markers.height,w=e.config.legend.markers.width,k=e.config.legend.markers.strokeWidth,A=e.config.legend.markers.strokeColor,S=e.config.legend.markers.radius,C=b.style;C.background=s[c],C.color=s[c],C.setProperty(\"background\",s[c],\"important\"),e.config.legend.markers.fillColors&&e.config.legend.markers.fillColors[c]&&(C.background=e.config.legend.markers.fillColors[c]),void 0!==e.globals.seriesColors[c]&&(C.background=e.globals.seriesColors[c],C.color=e.globals.seriesColors[c]),C.height=Array.isArray(y)?parseFloat(y[c])+\"px\":parseFloat(y)+\"px\",C.width=Array.isArray(w)?parseFloat(w[c])+\"px\":parseFloat(w)+\"px\",C.left=(Array.isArray(v)?parseFloat(v[c]):parseFloat(v))+\"px\",C.top=(Array.isArray(m)?parseFloat(m[c]):parseFloat(m))+\"px\",C.borderWidth=Array.isArray(k)?k[c]:k,C.borderColor=Array.isArray(A)?A[c]:A,C.borderRadius=Array.isArray(S)?parseFloat(S[c])+\"px\":parseFloat(S)+\"px\",e.config.legend.markers.customHTML&&(Array.isArray(e.config.legend.markers.customHTML)?e.config.legend.markers.customHTML[c]&&(b.innerHTML=e.config.legend.markers.customHTML[c]()):b.innerHTML=e.config.legend.markers.customHTML()),g.setAttrs(b,{rel:c+1,\"data:collapsed\":d||u}),(d||u)&&b.classList.add(\"apexcharts-inactive-legend\");var P=document.createElement(\"div\"),L=document.createElement(\"span\");L.classList.add(\"apexcharts-legend-text\"),L.innerHTML=Array.isArray(h)?h.join(\" \"):h;var O=e.config.legend.labels.useSeriesColors?e.globals.colors[c]:e.config.legend.labels.colors;O||(O=e.config.chart.foreColor),L.style.color=O,L.style.fontSize=parseFloat(e.config.legend.fontSize)+\"px\",L.style.fontWeight=e.config.legend.fontWeight,L.style.fontFamily=i||e.config.chart.fontFamily,g.setAttrs(L,{rel:c+1,i:c,\"data:default-text\":encodeURIComponent(h),\"data:collapsed\":d||u}),P.appendChild(b),P.appendChild(L);var T=new p(this.ctx);e.config.legend.showForZeroSeries||0===T.getSeriesTotalByIndex(c)&&T.seriesHaveSameValues(c)&&!T.isSeriesNull(c)&&-1===e.globals.collapsedSeriesIndices.indexOf(c)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(c)&&P.classList.add(\"apexcharts-hidden-zero-series\"),e.config.legend.showForNullSeries||T.isSeriesNull(c)&&-1===e.globals.collapsedSeriesIndices.indexOf(c)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(c)&&P.classList.add(\"apexcharts-hidden-null-series\"),e.globals.dom.elLegendWrap.appendChild(P),e.globals.dom.elLegendWrap.classList.add(\"apexcharts-align-\".concat(e.config.legend.horizontalAlign)),e.globals.dom.elLegendWrap.classList.add(\"apx-legend-position-\"+e.config.legend.position),P.classList.add(\"apexcharts-legend-series\"),P.style.margin=\"\".concat(e.config.legend.itemMargin.vertical,\"px \").concat(e.config.legend.itemMargin.horizontal,\"px\"),e.globals.dom.elLegendWrap.style.width=e.config.legend.width?e.config.legend.width+\"px\":\"\",e.globals.dom.elLegendWrap.style.height=e.config.legend.height?e.config.legend.height+\"px\":\"\",g.setAttrs(P,{rel:c+1,seriesName:r.escapeString(a[c]),\"data:collapsed\":d||u}),(d||u)&&P.classList.add(\"apexcharts-inactive-legend\"),e.config.legend.onItemClick.toggleDataSeries||P.classList.add(\"apexcharts-no-click\")}e.globals.dom.elWrap.addEventListener(\"click\",t.onLegendClick,!0),e.config.legend.onItemHover.highlightDataSeries&&0===e.config.legend.customLegendItems.length&&(e.globals.dom.elWrap.addEventListener(\"mousemove\",t.onLegendHovered,!0),e.globals.dom.elWrap.addEventListener(\"mouseout\",t.onLegendHovered,!0))}},{key:\"setLegendWrapXY\",value:function(t,e){var i=this.w,a=i.globals.dom.elLegendWrap,r=a.getBoundingClientRect(),s=0,n=0;if(\"bottom\"===i.config.legend.position)n+=i.globals.svgHeight-r.height/2;else if(\"top\"===i.config.legend.position){var o=new Kt(this.ctx),l=o.dimHelpers.getTitleSubtitleCoords(\"title\").height,c=o.dimHelpers.getTitleSubtitleCoords(\"subtitle\").height;n=n+(l>0?l-10:0)+(c>0?c-10:0)}a.style.position=\"absolute\",s=s+t+i.config.legend.offsetX,n=n+e+i.config.legend.offsetY,a.style.left=s+\"px\",a.style.top=n+\"px\",\"bottom\"===i.config.legend.position?(a.style.top=\"auto\",a.style.bottom=5-i.config.legend.offsetY+\"px\"):\"right\"===i.config.legend.position&&(a.style.left=\"auto\",a.style.right=25+i.config.legend.offsetX+\"px\"),[\"width\",\"height\"].forEach((function(t){a.style[t]&&(a.style[t]=parseInt(i.config.legend[t],10)+\"px\")}))}},{key:\"legendAlignHorizontal\",value:function(){var t=this.w;t.globals.dom.elLegendWrap.style.right=0;var e=this.legendHelpers.getLegendBBox(),i=new Kt(this.ctx),a=i.dimHelpers.getTitleSubtitleCoords(\"title\"),r=i.dimHelpers.getTitleSubtitleCoords(\"subtitle\"),s=0;\"bottom\"===t.config.legend.position?s=-e.clwh/1.8:\"top\"===t.config.legend.position&&(s=a.height+r.height+t.config.title.margin+t.config.subtitle.margin-10),this.setLegendWrapXY(20,s)}},{key:\"legendAlignVertical\",value:function(){var t=this.w,e=this.legendHelpers.getLegendBBox(),i=0;\"left\"===t.config.legend.position&&(i=20),\"right\"===t.config.legend.position&&(i=t.globals.svgWidth-e.clww-10),this.setLegendWrapXY(i,20)}},{key:\"onLegendHovered\",value:function(t){var e=this.w,i=t.target.classList.contains(\"apexcharts-legend-text\")||t.target.classList.contains(\"apexcharts-legend-marker\");if(\"heatmap\"===e.config.chart.type||this.isBarsDistributed){if(i){var a=parseInt(t.target.getAttribute(\"rel\"),10)-1;this.ctx.events.fireEvent(\"legendHover\",[this.ctx,a,this.w]),new ot(this.ctx).highlightRangeInSeries(t,t.target)}}else!t.target.classList.contains(\"apexcharts-inactive-legend\")&&i&&new ot(this.ctx).toggleSeriesOnHover(t,t.target)}},{key:\"onLegendClick\",value:function(t){var e=this.w;if(!e.config.legend.customLegendItems.length&&(t.target.classList.contains(\"apexcharts-legend-text\")||t.target.classList.contains(\"apexcharts-legend-marker\"))){var i=parseInt(t.target.getAttribute(\"rel\"),10)-1,a=\"true\"===t.target.getAttribute(\"data:collapsed\"),r=this.w.config.chart.events.legendClick;\"function\"==typeof r&&r(this.ctx,i,this.w),this.ctx.events.fireEvent(\"legendClick\",[this.ctx,i,this.w]);var s=this.w.config.legend.markers.onClick;\"function\"==typeof s&&t.target.classList.contains(\"apexcharts-legend-marker\")&&(s(this.ctx,i,this.w),this.ctx.events.fireEvent(\"legendMarkerClick\",[this.ctx,i,this.w])),\"treemap\"!==e.config.chart.type&&\"heatmap\"!==e.config.chart.type&&!this.isBarsDistributed&&e.config.legend.onItemClick.toggleDataSeries&&this.legendHelpers.toggleDataSeries(i,a)}}}])&&ie(e.prototype,i),t}();var re=i(798),se=i.n(re),ne=i(688),oe=i.n(ne),le=i(149),ce=i.n(le),he=i(323),de=i.n(he),ue=i(686),ge=i.n(ue),fe=i(618),pe=i.n(fe),xe=i(355),be=i.n(xe);function ve(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var me=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.ev=this.w.config.chart.events,this.selectedClass=\"apexcharts-selected\",this.localeValues=this.w.globals.locale.toolbar,this.minX=i.globals.minX,this.maxX=i.globals.maxX}var e,i;return e=t,(i=[{key:\"createToolbar\",value:function(){var t=this,e=this.w,i=function(){return document.createElement(\"div\")},a=i();if(a.setAttribute(\"class\",\"apexcharts-toolbar\"),a.style.top=e.config.chart.toolbar.offsetY+\"px\",a.style.right=3-e.config.chart.toolbar.offsetX+\"px\",e.globals.dom.elWrap.appendChild(a),this.elZoom=i(),this.elZoomIn=i(),this.elZoomOut=i(),this.elPan=i(),this.elSelection=i(),this.elZoomReset=i(),this.elMenuIcon=i(),this.elMenu=i(),this.elCustomIcons=[],this.t=e.config.chart.toolbar.tools,Array.isArray(this.t.customIcons))for(var s=0;s<this.t.customIcons.length;s++)this.elCustomIcons.push(i());var n=[],o=function(i,a,r){var s=i.toLowerCase();t.t[s]&&e.config.chart.zoom.enabled&&n.push({el:a,icon:\"string\"==typeof t.t[s]?t.t[s]:r,title:t.localeValues[i],class:\"apexcharts-\".concat(s,\"-icon\")})};o(\"zoomIn\",this.elZoomIn,de()),o(\"zoomOut\",this.elZoomOut,ge());var l=function(i){t.t[i]&&e.config.chart[i].enabled&&n.push({el:\"zoom\"===i?t.elZoom:t.elSelection,icon:\"string\"==typeof t.t[i]?t.t[i]:\"zoom\"===i?oe():pe(),title:t.localeValues[\"zoom\"===i?\"selectionZoom\":\"selection\"],class:e.globals.isTouchDevice?\"apexcharts-element-hidden\":\"apexcharts-\".concat(i,\"-icon\")})};l(\"zoom\"),l(\"selection\"),this.t.pan&&e.config.chart.zoom.enabled&&n.push({el:this.elPan,icon:\"string\"==typeof this.t.pan?this.t.pan:se(),title:this.localeValues.pan,class:e.globals.isTouchDevice?\"apexcharts-element-hidden\":\"apexcharts-pan-icon\"}),o(\"reset\",this.elZoomReset,ce()),this.t.download&&n.push({el:this.elMenuIcon,icon:\"string\"==typeof this.t.download?this.t.download:be(),title:this.localeValues.menu,class:\"apexcharts-menu-icon\"});for(var c=0;c<this.elCustomIcons.length;c++)n.push({el:this.elCustomIcons[c],icon:this.t.customIcons[c].icon,title:this.t.customIcons[c].title,index:this.t.customIcons[c].index,class:\"apexcharts-toolbar-custom-icon \"+this.t.customIcons[c].class});n.forEach((function(t,e){t.index&&r.moveIndexInArray(n,e,t.index)}));for(var h=0;h<n.length;h++)g.setAttrs(n[h].el,{class:n[h].class,title:n[h].title}),n[h].el.innerHTML=n[h].icon,a.appendChild(n[h].el);this._createHamburgerMenu(a),e.globals.zoomEnabled?this.elZoom.classList.add(this.selectedClass):e.globals.panEnabled?this.elPan.classList.add(this.selectedClass):e.globals.selectionEnabled&&this.elSelection.classList.add(this.selectedClass),this.addToolbarEventListeners()}},{key:\"_createHamburgerMenu\",value:function(t){this.elMenuItems=[],t.appendChild(this.elMenu),g.setAttrs(this.elMenu,{class:\"apexcharts-menu\"});var e=[{name:\"exportSVG\",title:this.localeValues.exportToSVG},{name:\"exportPNG\",title:this.localeValues.exportToPNG},{name:\"exportCSV\",title:this.localeValues.exportToCSV}];this.w.globals.allSeriesHasEqualX||e.splice(2,1);for(var i=0;i<e.length;i++)this.elMenuItems.push(document.createElement(\"div\")),this.elMenuItems[i].innerHTML=e[i].title,g.setAttrs(this.elMenuItems[i],{class:\"apexcharts-menu-item \".concat(e[i].name),title:e[i].title}),this.elMenu.appendChild(this.elMenuItems[i])}},{key:\"addToolbarEventListeners\",value:function(){var t=this;this.elZoomReset.addEventListener(\"click\",this.handleZoomReset.bind(this)),this.elSelection.addEventListener(\"click\",this.toggleZoomSelection.bind(this,\"selection\")),this.elZoom.addEventListener(\"click\",this.toggleZoomSelection.bind(this,\"zoom\")),this.elZoomIn.addEventListener(\"click\",this.handleZoomIn.bind(this)),this.elZoomOut.addEventListener(\"click\",this.handleZoomOut.bind(this)),this.elPan.addEventListener(\"click\",this.togglePanning.bind(this)),this.elMenuIcon.addEventListener(\"click\",this.toggleMenu.bind(this)),this.elMenuItems.forEach((function(e){e.classList.contains(\"exportSVG\")?e.addEventListener(\"click\",t.handleDownload.bind(t,\"svg\")):e.classList.contains(\"exportPNG\")?e.addEventListener(\"click\",t.handleDownload.bind(t,\"png\")):e.classList.contains(\"exportCSV\")&&e.addEventListener(\"click\",t.handleDownload.bind(t,\"csv\"))}));for(var e=0;e<this.t.customIcons.length;e++)this.elCustomIcons[e].addEventListener(\"click\",this.t.customIcons[e].click.bind(this,this.ctx,this.ctx.w))}},{key:\"toggleZoomSelection\",value:function(t){this.ctx.getSyncedCharts().forEach((function(e){e.ctx.toolbar.toggleOtherControls();var i=\"selection\"===t?e.ctx.toolbar.elSelection:e.ctx.toolbar.elZoom,a=\"selection\"===t?\"selectionEnabled\":\"zoomEnabled\";e.w.globals[a]=!e.w.globals[a],i.classList.contains(e.ctx.toolbar.selectedClass)?i.classList.remove(e.ctx.toolbar.selectedClass):i.classList.add(e.ctx.toolbar.selectedClass)}))}},{key:\"getToolbarIconsReference\",value:function(){var t=this.w;this.elZoom||(this.elZoom=t.globals.dom.baseEl.querySelector(\".apexcharts-zoom-icon\")),this.elPan||(this.elPan=t.globals.dom.baseEl.querySelector(\".apexcharts-pan-icon\")),this.elSelection||(this.elSelection=t.globals.dom.baseEl.querySelector(\".apexcharts-selection-icon\"))}},{key:\"enableZoomPanFromToolbar\",value:function(t){this.toggleOtherControls(),\"pan\"===t?this.w.globals.panEnabled=!0:this.w.globals.zoomEnabled=!0;var e=\"pan\"===t?this.elPan:this.elZoom,i=\"pan\"===t?this.elZoom:this.elPan;e&&e.classList.add(this.selectedClass),i&&i.classList.remove(this.selectedClass)}},{key:\"togglePanning\",value:function(){this.ctx.getSyncedCharts().forEach((function(t){t.ctx.toolbar.toggleOtherControls(),t.w.globals.panEnabled=!t.w.globals.panEnabled,t.ctx.toolbar.elPan.classList.contains(t.ctx.toolbar.selectedClass)?t.ctx.toolbar.elPan.classList.remove(t.ctx.toolbar.selectedClass):t.ctx.toolbar.elPan.classList.add(t.ctx.toolbar.selectedClass)}))}},{key:\"toggleOtherControls\",value:function(){var t=this,e=this.w;e.globals.panEnabled=!1,e.globals.zoomEnabled=!1,e.globals.selectionEnabled=!1,this.getToolbarIconsReference(),[this.elPan,this.elSelection,this.elZoom].forEach((function(e){e&&e.classList.remove(t.selectedClass)}))}},{key:\"handleZoomIn\",value:function(){var t=this.w;t.globals.isRangeBar&&(this.minX=t.globals.minY,this.maxX=t.globals.maxY);var e=(this.minX+this.maxX)/2,i=(this.minX+e)/2,a=(this.maxX+e)/2,r=this._getNewMinXMaxX(i,a);t.globals.disableZoomIn||this.zoomUpdateOptions(r.minX,r.maxX)}},{key:\"handleZoomOut\",value:function(){var t=this.w;if(t.globals.isRangeBar&&(this.minX=t.globals.minY,this.maxX=t.globals.maxY),!(\"datetime\"===t.config.xaxis.type&&new Date(this.minX).getUTCFullYear()<1e3)){var e=(this.minX+this.maxX)/2,i=this.minX-(e-this.minX),a=this.maxX-(e-this.maxX),r=this._getNewMinXMaxX(i,a);t.globals.disableZoomOut||this.zoomUpdateOptions(r.minX,r.maxX)}}},{key:\"_getNewMinXMaxX\",value:function(t,e){var i=this.w.config.xaxis.convertedCatToNumeric;return{minX:i?Math.floor(t):t,maxX:i?Math.floor(e):e}}},{key:\"zoomUpdateOptions\",value:function(t,e){var i=this.w;if(void 0!==t||void 0!==e){if(!(i.config.xaxis.convertedCatToNumeric&&(t<1&&(t=1,e=i.globals.dataPoints),e-t<2))){var a={min:t,max:e},s=this.getBeforeZoomRange(a);s&&(a=s.xaxis);var n={xaxis:a},o=r.clone(i.globals.initialConfig.yaxis);i.config.chart.zoom.autoScaleYaxis&&(o=new kt(this.ctx).autoScaleY(this.ctx,o,{xaxis:a})),i.config.chart.group||(n.yaxis=o),this.w.globals.zoomed=!0,this.ctx.updateHelpers._updateOptions(n,!1,this.w.config.chart.animations.dynamicAnimation.enabled),this.zoomCallback(a,o)}}else this.handleZoomReset()}},{key:\"zoomCallback\",value:function(t,e){\"function\"==typeof this.ev.zoomed&&this.ev.zoomed(this.ctx,{xaxis:t,yaxis:e})}},{key:\"getBeforeZoomRange\",value:function(t,e){var i=null;return\"function\"==typeof this.ev.beforeZoom&&(i=this.ev.beforeZoom(this,{xaxis:t,yaxis:e})),i}},{key:\"toggleMenu\",value:function(){var t=this;window.setTimeout((function(){t.elMenu.classList.contains(\"apexcharts-menu-open\")?t.elMenu.classList.remove(\"apexcharts-menu-open\"):t.elMenu.classList.add(\"apexcharts-menu-open\")}),0)}},{key:\"handleDownload\",value:function(t){var e=this.w,i=new xt(this.ctx);switch(t){case\"svg\":i.exportToSVG(this.ctx);break;case\"png\":i.exportToPng(this.ctx);break;case\"csv\":i.exportToCSV({series:e.config.series,columnDelimiter:e.config.chart.toolbar.export.csv.columnDelimiter})}}},{key:\"handleZoomReset\",value:function(t){this.ctx.getSyncedCharts().forEach((function(t){var e=t.w;if(e.globals.lastXAxis.min=void 0,e.globals.lastXAxis.max=void 0,t.updateHelpers.revertDefaultAxisMinMax(),\"function\"==typeof e.config.chart.events.beforeResetZoom){var i=e.config.chart.events.beforeResetZoom(t,e);i&&t.updateHelpers.revertDefaultAxisMinMax(i)}\"function\"==typeof e.config.chart.events.zoomed&&t.ctx.toolbar.zoomCallback({min:e.config.xaxis.min,max:e.config.xaxis.max}),e.globals.zoomed=!1;var a=t.ctx.series.emptyCollapsedSeries(r.clone(e.globals.initialSeries));t.updateHelpers._updateSeries(a,e.config.chart.animations.dynamicAnimation.enabled)}))}},{key:\"destroy\",value:function(){this.elZoom=null,this.elZoomIn=null,this.elZoomOut=null,this.elPan=null,this.elSelection=null,this.elZoomReset=null,this.elMenuIcon=null}}])&&ve(e.prototype,i),t}();function ye(t){return ye=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},ye(t)}function we(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}function ke(t,e){return ke=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},ke(t,e)}function Ae(t){return Ae=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},Ae(t)}var Se=function(t){!function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&ke(t,e)}(o,t);var e,i,a,s,n=(a=o,s=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=Ae(a);if(s){var i=Ae(this).constructor;t=Reflect.construct(e,arguments,i)}else t=e.apply(this,arguments);return function(t,e){if(e&&(\"object\"===ye(e)||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}(this,t)});function o(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,o),(e=n.call(this,t)).ctx=t,e.w=t.w,e.dragged=!1,e.graphics=new g(e.ctx),e.eventList=[\"mousedown\",\"mouseleave\",\"mousemove\",\"touchstart\",\"touchmove\",\"mouseup\",\"touchend\"],e.clientX=0,e.clientY=0,e.startX=0,e.endX=0,e.dragX=0,e.startY=0,e.endY=0,e.dragY=0,e.moveDirection=\"none\",e}return e=o,(i=[{key:\"init\",value:function(t){var e=this,i=t.xyRatios,a=this.w,r=this;this.xyRatios=i,this.zoomRect=this.graphics.drawRect(0,0,0,0),this.selectionRect=this.graphics.drawRect(0,0,0,0),this.gridRect=a.globals.dom.baseEl.querySelector(\".apexcharts-grid\"),this.zoomRect.node.classList.add(\"apexcharts-zoom-rect\"),this.selectionRect.node.classList.add(\"apexcharts-selection-rect\"),a.globals.dom.elGraphical.add(this.zoomRect),a.globals.dom.elGraphical.add(this.selectionRect),\"x\"===a.config.chart.selection.type?this.slDraggableRect=this.selectionRect.draggable({minX:0,minY:0,maxX:a.globals.gridWidth,maxY:a.globals.gridHeight}).on(\"dragmove\",this.selectionDragging.bind(this,\"dragging\")):\"y\"===a.config.chart.selection.type?this.slDraggableRect=this.selectionRect.draggable({minX:0,maxX:a.globals.gridWidth}).on(\"dragmove\",this.selectionDragging.bind(this,\"dragging\")):this.slDraggableRect=this.selectionRect.draggable().on(\"dragmove\",this.selectionDragging.bind(this,\"dragging\")),this.preselectedSelection(),this.hoverArea=a.globals.dom.baseEl.querySelector(\"\".concat(a.globals.chartClass,\" .apexcharts-svg\")),this.hoverArea.classList.add(\"apexcharts-zoomable\"),this.eventList.forEach((function(t){e.hoverArea.addEventListener(t,r.svgMouseEvents.bind(r,i),{capture:!1,passive:!0})}))}},{key:\"destroy\",value:function(){this.slDraggableRect&&(this.slDraggableRect.draggable(!1),this.slDraggableRect.off(),this.selectionRect.off()),this.selectionRect=null,this.zoomRect=null,this.gridRect=null}},{key:\"svgMouseEvents\",value:function(t,e){var i=this.w,a=this,r=this.ctx.toolbar,s=i.globals.zoomEnabled?i.config.chart.zoom.type:i.config.chart.selection.type,n=i.config.chart.toolbar.autoSelected;if(e.shiftKey?(this.shiftWasPressed=!0,r.enableZoomPanFromToolbar(\"pan\"===n?\"zoom\":\"pan\")):this.shiftWasPressed&&(r.enableZoomPanFromToolbar(n),this.shiftWasPressed=!1),e.target){var o,l=e.target.classList;if(e.target.parentNode&&null!==e.target.parentNode&&(o=e.target.parentNode.classList),!(l.contains(\"apexcharts-selection-rect\")||l.contains(\"apexcharts-legend-marker\")||l.contains(\"apexcharts-legend-text\")||o&&o.contains(\"apexcharts-toolbar\"))){if(a.clientX=\"touchmove\"===e.type||\"touchstart\"===e.type?e.touches[0].clientX:\"touchend\"===e.type?e.changedTouches[0].clientX:e.clientX,a.clientY=\"touchmove\"===e.type||\"touchstart\"===e.type?e.touches[0].clientY:\"touchend\"===e.type?e.changedTouches[0].clientY:e.clientY,\"mousedown\"===e.type&&1===e.which){var c=a.gridRect.getBoundingClientRect();a.startX=a.clientX-c.left,a.startY=a.clientY-c.top,a.dragged=!1,a.w.globals.mousedown=!0}if((\"mousemove\"===e.type&&1===e.which||\"touchmove\"===e.type)&&(a.dragged=!0,i.globals.panEnabled?(i.globals.selection=null,a.w.globals.mousedown&&a.panDragging({context:a,zoomtype:s,xyRatios:t})):(a.w.globals.mousedown&&i.globals.zoomEnabled||a.w.globals.mousedown&&i.globals.selectionEnabled)&&(a.selection=a.selectionDrawing({context:a,zoomtype:s}))),\"mouseup\"===e.type||\"touchend\"===e.type||\"mouseleave\"===e.type){var h=a.gridRect.getBoundingClientRect();a.w.globals.mousedown&&(a.endX=a.clientX-h.left,a.endY=a.clientY-h.top,a.dragX=Math.abs(a.endX-a.startX),a.dragY=Math.abs(a.endY-a.startY),(i.globals.zoomEnabled||i.globals.selectionEnabled)&&a.selectionDrawn({context:a,zoomtype:s}),i.globals.panEnabled&&i.config.xaxis.convertedCatToNumeric&&a.delayedPanScrolled()),i.globals.zoomEnabled&&a.hideSelectionRect(this.selectionRect),a.dragged=!1,a.w.globals.mousedown=!1}this.makeSelectionRectDraggable()}}}},{key:\"makeSelectionRectDraggable\",value:function(){var t=this.w;if(this.selectionRect){var e=this.selectionRect.node.getBoundingClientRect();e.width>0&&e.height>0&&this.slDraggableRect.selectize({points:\"l, r\",pointSize:8,pointType:\"rect\"}).resize({constraint:{minX:0,minY:0,maxX:t.globals.gridWidth,maxY:t.globals.gridHeight}}).on(\"resizing\",this.selectionDragging.bind(this,\"resizing\"))}}},{key:\"preselectedSelection\",value:function(){var t=this.w,e=this.xyRatios;if(!t.globals.zoomEnabled)if(void 0!==t.globals.selection&&null!==t.globals.selection)this.drawSelectionRect(t.globals.selection);else if(void 0!==t.config.chart.selection.xaxis.min&&void 0!==t.config.chart.selection.xaxis.max){var i=(t.config.chart.selection.xaxis.min-t.globals.minX)/e.xRatio,a={x:i,y:0,width:t.globals.gridWidth-(t.globals.maxX-t.config.chart.selection.xaxis.max)/e.xRatio-i,height:t.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(a),this.makeSelectionRectDraggable(),\"function\"==typeof t.config.chart.events.selection&&t.config.chart.events.selection(this.ctx,{xaxis:{min:t.config.chart.selection.xaxis.min,max:t.config.chart.selection.xaxis.max},yaxis:{}})}}},{key:\"drawSelectionRect\",value:function(t){var e=t.x,i=t.y,a=t.width,r=t.height,s=t.translateX,n=void 0===s?0:s,o=t.translateY,l=void 0===o?0:o,c=this.w,h=this.zoomRect,d=this.selectionRect;if(this.dragged||null!==c.globals.selection){var u={transform:\"translate(\"+n+\", \"+l+\")\"};c.globals.zoomEnabled&&this.dragged&&(a<0&&(a=1),h.attr({x:e,y:i,width:a,height:r,fill:c.config.chart.zoom.zoomedArea.fill.color,\"fill-opacity\":c.config.chart.zoom.zoomedArea.fill.opacity,stroke:c.config.chart.zoom.zoomedArea.stroke.color,\"stroke-width\":c.config.chart.zoom.zoomedArea.stroke.width,\"stroke-opacity\":c.config.chart.zoom.zoomedArea.stroke.opacity}),g.setAttrs(h.node,u)),c.globals.selectionEnabled&&(d.attr({x:e,y:i,width:a>0?a:0,height:r>0?r:0,fill:c.config.chart.selection.fill.color,\"fill-opacity\":c.config.chart.selection.fill.opacity,stroke:c.config.chart.selection.stroke.color,\"stroke-width\":c.config.chart.selection.stroke.width,\"stroke-dasharray\":c.config.chart.selection.stroke.dashArray,\"stroke-opacity\":c.config.chart.selection.stroke.opacity}),g.setAttrs(d.node,u))}}},{key:\"hideSelectionRect\",value:function(t){t&&t.attr({x:0,y:0,width:0,height:0})}},{key:\"selectionDrawing\",value:function(t){var e,i=t.context,a=t.zoomtype,r=this.w,s=i,n=this.gridRect.getBoundingClientRect(),o=s.startX-1,l=s.startY,c=!1,h=!1,d=s.clientX-n.left-o,u=s.clientY-n.top-l;return Math.abs(d+o)>r.globals.gridWidth?d=r.globals.gridWidth-o:s.clientX-n.left<0&&(d=o),o>s.clientX-n.left&&(c=!0,d=Math.abs(d)),l>s.clientY-n.top&&(h=!0,u=Math.abs(u)),e=\"x\"===a?{x:c?o-d:o,y:0,width:d,height:r.globals.gridHeight}:\"y\"===a?{x:0,y:h?l-u:l,width:r.globals.gridWidth,height:u}:{x:c?o-d:o,y:h?l-u:l,width:d,height:u},s.drawSelectionRect(e),s.selectionDragging(\"resizing\"),e}},{key:\"selectionDragging\",value:function(t,e){var i=this,a=this.w,r=this.xyRatios,s=this.selectionRect,n=0;\"resizing\"===t&&(n=30);var o=function(t){return parseFloat(s.node.getAttribute(t))},l={x:o(\"x\"),y:o(\"y\"),width:o(\"width\"),height:o(\"height\")};a.globals.selection=l,\"function\"==typeof a.config.chart.events.selection&&a.globals.selectionEnabled&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout((function(){var t=i.gridRect.getBoundingClientRect(),e=s.node.getBoundingClientRect(),n={xaxis:{min:a.globals.xAxisScale.niceMin+(e.left-t.left)*r.xRatio,max:a.globals.xAxisScale.niceMin+(e.right-t.left)*r.xRatio},yaxis:{min:a.globals.yAxisScale[0].niceMin+(t.bottom-e.bottom)*r.yRatio[0],max:a.globals.yAxisScale[0].niceMax-(e.top-t.top)*r.yRatio[0]}};a.config.chart.events.selection(i.ctx,n),a.config.chart.brush.enabled&&void 0!==a.config.chart.events.brushScrolled&&a.config.chart.events.brushScrolled(i.ctx,n)}),n))}},{key:\"selectionDrawn\",value:function(t){var e=t.context,i=t.zoomtype,a=this.w,s=e,n=this.xyRatios,o=this.ctx.toolbar;if(s.startX>s.endX){var l=s.startX;s.startX=s.endX,s.endX=l}if(s.startY>s.endY){var c=s.startY;s.startY=s.endY,s.endY=c}var h=void 0,d=void 0;a.globals.isRangeBar?(h=a.globals.yAxisScale[0].niceMin+s.startX*n.invertedYRatio,d=a.globals.yAxisScale[0].niceMin+s.endX*n.invertedYRatio):(h=a.globals.xAxisScale.niceMin+s.startX*n.xRatio,d=a.globals.xAxisScale.niceMin+s.endX*n.xRatio);var u=[],g=[];if(a.config.yaxis.forEach((function(t,e){u.push(a.globals.yAxisScale[e].niceMax-n.yRatio[e]*s.startY),g.push(a.globals.yAxisScale[e].niceMax-n.yRatio[e]*s.endY)})),s.dragged&&(s.dragX>10||s.dragY>10)&&h!==d)if(a.globals.zoomEnabled){var f=r.clone(a.globals.initialConfig.yaxis),p=r.clone(a.globals.initialConfig.xaxis);if(a.globals.zoomed=!0,a.config.xaxis.convertedCatToNumeric&&(h=Math.floor(h),d=Math.floor(d),h<1&&(h=1,d=a.globals.dataPoints),d-h<2&&(d=h+1)),\"xy\"!==i&&\"x\"!==i||(p={min:h,max:d}),\"xy\"!==i&&\"y\"!==i||f.forEach((function(t,e){f[e].min=g[e],f[e].max=u[e]})),a.config.chart.zoom.autoScaleYaxis){var x=new kt(s.ctx);f=x.autoScaleY(s.ctx,f,{xaxis:p})}if(o){var b=o.getBeforeZoomRange(p,f);b&&(p=b.xaxis?b.xaxis:p,f=b.yaxis?b.yaxis:f)}var v={xaxis:p};a.config.chart.group||(v.yaxis=f),s.ctx.updateHelpers._updateOptions(v,!1,s.w.config.chart.animations.dynamicAnimation.enabled),\"function\"==typeof a.config.chart.events.zoomed&&o.zoomCallback(p,f)}else if(a.globals.selectionEnabled){var m,y=null;m={min:h,max:d},\"xy\"!==i&&\"y\"!==i||(y=r.clone(a.config.yaxis)).forEach((function(t,e){y[e].min=g[e],y[e].max=u[e]})),a.globals.selection=s.selection,\"function\"==typeof a.config.chart.events.selection&&a.config.chart.events.selection(s.ctx,{xaxis:m,yaxis:y})}}},{key:\"panDragging\",value:function(t){var e=t.context,i=this.w,a=e;if(void 0!==i.globals.lastClientPosition.x){var r=i.globals.lastClientPosition.x-a.clientX,s=i.globals.lastClientPosition.y-a.clientY;Math.abs(r)>Math.abs(s)&&r>0?this.moveDirection=\"left\":Math.abs(r)>Math.abs(s)&&r<0?this.moveDirection=\"right\":Math.abs(s)>Math.abs(r)&&s>0?this.moveDirection=\"up\":Math.abs(s)>Math.abs(r)&&s<0&&(this.moveDirection=\"down\")}i.globals.lastClientPosition={x:a.clientX,y:a.clientY};var n=i.globals.isRangeBar?i.globals.minY:i.globals.minX,o=i.globals.isRangeBar?i.globals.maxY:i.globals.maxX;i.config.xaxis.convertedCatToNumeric||a.panScrolled(n,o)}},{key:\"delayedPanScrolled\",value:function(){var t=this.w,e=t.globals.minX,i=t.globals.maxX,a=(t.globals.maxX-t.globals.minX)/2;\"left\"===this.moveDirection?(e=t.globals.minX+a,i=t.globals.maxX+a):\"right\"===this.moveDirection&&(e=t.globals.minX-a,i=t.globals.maxX-a),e=Math.floor(e),i=Math.floor(i),this.updateScrolledChart({xaxis:{min:e,max:i}},e,i)}},{key:\"panScrolled\",value:function(t,e){var i=this.w,a=this.xyRatios,s=r.clone(i.globals.initialConfig.yaxis),n=a.xRatio,o=i.globals.minX,l=i.globals.maxX;i.globals.isRangeBar&&(n=a.invertedYRatio,o=i.globals.minY,l=i.globals.maxY),\"left\"===this.moveDirection?(t=o+i.globals.gridWidth/15*n,e=l+i.globals.gridWidth/15*n):\"right\"===this.moveDirection&&(t=o-i.globals.gridWidth/15*n,e=l-i.globals.gridWidth/15*n),i.globals.isRangeBar||(t<i.globals.initialMinX||e>i.globals.initialMaxX)&&(t=o,e=l);var c={min:t,max:e};i.config.chart.zoom.autoScaleYaxis&&(s=new kt(this.ctx).autoScaleY(this.ctx,s,{xaxis:c}));var h={xaxis:{min:t,max:e}};i.config.chart.group||(h.yaxis=s),this.updateScrolledChart(h,t,e)}},{key:\"updateScrolledChart\",value:function(t,e,i){var a=this.w;this.ctx.updateHelpers._updateOptions(t,!1,!1),\"function\"==typeof a.config.chart.events.scrolled&&a.config.chart.events.scrolled(this.ctx,{xaxis:{min:e,max:i}})}}])&&we(e.prototype,i),o}(me);function Ce(t){return function(t){if(Array.isArray(t))return Pe(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||function(t,e){if(t){if(\"string\"==typeof t)return Pe(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?Pe(t,e):void 0}}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function Pe(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}function Le(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Oe=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx}var e,i;return e=t,(i=[{key:\"getNearestValues\",value:function(t){var e=t.hoverArea,i=t.elGrid,a=t.clientX,s=t.clientY,n=this.w,o=i.getBoundingClientRect(),l=o.width,c=o.height,h=l/(n.globals.dataPoints-1),d=c/n.globals.dataPoints,u=this.hasBars();!n.globals.comboCharts&&!u||n.config.xaxis.convertedCatToNumeric||(h=l/n.globals.dataPoints);var g=a-o.left-n.globals.barPadForNumericAxis,f=s-o.top;g<0||f<0||g>l||f>c?(e.classList.remove(\"hovering-zoom\"),e.classList.remove(\"hovering-pan\")):n.globals.zoomEnabled?(e.classList.remove(\"hovering-pan\"),e.classList.add(\"hovering-zoom\")):n.globals.panEnabled&&(e.classList.remove(\"hovering-zoom\"),e.classList.add(\"hovering-pan\"));var p=Math.round(g/h),x=Math.floor(f/d);u&&!n.config.xaxis.convertedCatToNumeric&&(p=Math.ceil(g/h),p-=1);var b=null,v=null,m=[],y=[];if(n.globals.seriesXvalues.forEach((function(t){m.push([t[0]+1e-6].concat(t))})),n.globals.seriesYvalues.forEach((function(t){y.push([t[0]+1e-6].concat(t))})),m=m.map((function(t){return t.filter((function(t){return r.isNumber(t)}))})),y=y.map((function(t){return t.filter((function(t){return r.isNumber(t)}))})),n.globals.isXNumeric){var w=this.ttCtx.getElGrid().getBoundingClientRect(),k=g*(w.width/l),A=f*(w.height/c);b=(v=this.closestInMultiArray(k,A,m,y)).index,p=v.j,null!==b&&(m=n.globals.seriesXvalues[b],p=(v=this.closestInArray(k,m)).index)}return n.globals.capturedSeriesIndex=null===b?-1:b,(!p||p<1)&&(p=0),n.globals.isBarHorizontal?n.globals.capturedDataPointIndex=x:n.globals.capturedDataPointIndex=p,{capturedSeries:b,j:n.globals.isBarHorizontal?x:p,hoverX:g,hoverY:f}}},{key:\"closestInMultiArray\",value:function(t,e,i,a){var r=this.w,s=0,n=null,o=-1;r.globals.series.length>1?s=this.getFirstActiveXArray(i):n=0;var l=i[s][0],c=Math.abs(t-l);if(i.forEach((function(e){e.forEach((function(e,i){var a=Math.abs(t-e);a<c&&(c=a,o=i)}))})),-1!==o){var h=a[s][o],d=Math.abs(e-h);n=s,a.forEach((function(t,i){var a=Math.abs(e-t[o]);a<d&&(d=a,n=i)}))}return{index:n,j:o}}},{key:\"getFirstActiveXArray\",value:function(t){for(var e=this.w,i=0,a=t.map((function(t,e){return t.length>0?e:-1})),r=0;r<a.length;r++)if(-1!==a[r]&&-1===e.globals.collapsedSeriesIndices.indexOf(r)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(r)){i=a[r];break}return i}},{key:\"closestInArray\",value:function(t,e){for(var i=e[0],a=null,r=Math.abs(t-i),s=0;s<e.length;s++){var n=Math.abs(t-e[s]);n<r&&(r=n,a=s)}return{index:a}}},{key:\"isXoverlap\",value:function(t){var e=[],i=this.w.globals.seriesX.filter((function(t){return void 0!==t[0]}));if(i.length>0)for(var a=0;a<i.length-1;a++)void 0!==i[a][t]&&void 0!==i[a+1][t]&&i[a][t]!==i[a+1][t]&&e.push(\"unEqual\");return 0===e.length}},{key:\"isInitialSeriesSameLen\",value:function(){for(var t=!0,e=this.w.globals.initialSeries,i=0;i<e.length-1;i++)if(e[i].data.length!==e[i+1].data.length){t=!1;break}return t}},{key:\"getBarsHeight\",value:function(t){return Ce(t).reduce((function(t,e){return t+e.getBBox().height}),0)}},{key:\"getElMarkers\",value:function(t){return\"number\"==typeof t?this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series[data\\\\:realIndex='\".concat(t,\"'] .apexcharts-series-markers-wrap > *\")):this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series-markers-wrap > *\")}},{key:\"getAllMarkers\",value:function(){var t=this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series-markers-wrap\");(t=Ce(t)).sort((function(t,e){var i=Number(t.getAttribute(\"data:realIndex\")),a=Number(e.getAttribute(\"data:realIndex\"));return a<i?1:a>i?-1:0}));var e=[];return t.forEach((function(t){e.push(t.querySelector(\".apexcharts-marker\"))})),e}},{key:\"hasMarkers\",value:function(t){return this.getElMarkers(t).length>0}},{key:\"getElBars\",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-bar-series,  .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-rangebar-series\")}},{key:\"hasBars\",value:function(){return this.getElBars().length>0}},{key:\"getHoverMarkerSize\",value:function(t){var e=this.w,i=e.config.markers.hover.size;return void 0===i&&(i=e.globals.markers.size[t]+e.config.markers.hover.sizeOffset),i}},{key:\"toggleAllTooltipSeriesGroups\",value:function(t){var e=this.w,i=this.ttCtx;0===i.allTooltipSeriesGroups.length&&(i.allTooltipSeriesGroups=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-tooltip-series-group\"));for(var a=i.allTooltipSeriesGroups,r=0;r<a.length;r++)\"enable\"===t?(a[r].classList.add(\"apexcharts-active\"),a[r].style.display=e.config.tooltip.items.display):(a[r].classList.remove(\"apexcharts-active\"),a[r].style.display=\"none\")}}])&&Le(e.prototype,i),t}();function Te(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function Ie(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?Te(Object(i),!0).forEach((function(e){Ee(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Te(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function Ee(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function Me(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Xe=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.ctx=e.ctx,this.ttCtx=e,this.tooltipUtil=new Oe(e)}var e,i;return e=t,(i=[{key:\"drawSeriesTexts\",value:function(t){var e=t.shared,i=void 0===e||e,a=t.ttItems,r=t.i,s=void 0===r?0:r,n=t.j,o=void 0===n?null:n,l=t.y1,c=t.y2,h=t.e,d=this.w;void 0!==d.config.tooltip.custom?this.handleCustomTooltip({i:s,j:o,y1:l,y2:c,w:d}):this.toggleActiveInactiveSeries(i);var u=this.getValuesToPrint({i:s,j:o});this.printLabels({i:s,j:o,values:u,ttItems:a,shared:i,e:h});var g=this.ttCtx.getElTooltip();this.ttCtx.tooltipRect.ttWidth=g.getBoundingClientRect().width,this.ttCtx.tooltipRect.ttHeight=g.getBoundingClientRect().height}},{key:\"printLabels\",value:function(t){var e,i=this,a=t.i,r=t.j,s=t.values,n=t.ttItems,o=t.shared,l=t.e,c=this.w,h=[],d=function(t){return c.globals.seriesGoals[t]&&c.globals.seriesGoals[t][r]&&Array.isArray(c.globals.seriesGoals[t][r])},u=s.xVal,g=s.zVal,f=s.xAxisTTVal,p=\"\",x=c.globals.colors[a];null!==r&&c.config.plotOptions.bar.distributed&&(x=c.globals.colors[r]);for(var b=function(t,s){var b=i.getFormatters(a);p=i.getSeriesName({fn:b.yLbTitleFormatter,index:a,seriesIndex:a,j:r}),\"treemap\"===c.config.chart.type&&(p=b.yLbTitleFormatter(String(c.config.series[a].data[r].x),{series:c.globals.series,seriesIndex:a,dataPointIndex:r,w:c}));var v=c.config.tooltip.inverseOrder?s:t;if(c.globals.axisCharts){var m=function(t){var e,i,a,s;return c.globals.isRangeData?b.yLbFormatter(null===(e=c.globals.seriesRangeStart)||void 0===e||null===(i=e[t])||void 0===i?void 0:i[r],{series:c.globals.seriesRangeStart,seriesIndex:t,dataPointIndex:r,w:c})+\" - \"+b.yLbFormatter(null===(a=c.globals.seriesRangeEnd)||void 0===a||null===(s=a[t])||void 0===s?void 0:s[r],{series:c.globals.seriesRangeEnd,seriesIndex:t,dataPointIndex:r,w:c}):b.yLbFormatter(c.globals.series[t][r],{series:c.globals.series,seriesIndex:t,dataPointIndex:r,w:c})};if(o)b=i.getFormatters(v),p=i.getSeriesName({fn:b.yLbTitleFormatter,index:v,seriesIndex:a,j:r}),x=c.globals.colors[v],e=m(v),d(v)&&(h=c.globals.seriesGoals[v][r].map((function(t){return{attrs:t,val:b.yLbFormatter(t.value,{seriesIndex:v,dataPointIndex:r,w:c})}})));else{var y,w=null==l||null===(y=l.target)||void 0===y?void 0:y.getAttribute(\"fill\");w&&(x=-1!==w.indexOf(\"url\")?document.querySelector(w.substr(4).slice(0,-1)).childNodes[0].getAttribute(\"stroke\"):w),e=m(a),d(a)&&Array.isArray(c.globals.seriesGoals[a][r])&&(h=c.globals.seriesGoals[a][r].map((function(t){return{attrs:t,val:b.yLbFormatter(t.value,{seriesIndex:a,dataPointIndex:r,w:c})}})))}}null===r&&(e=b.yLbFormatter(c.globals.series[a],Ie(Ie({},c),{},{seriesIndex:a,dataPointIndex:a}))),i.DOMHandling({i:a,t:v,j:r,ttItems:n,values:{val:e,goalVals:h,xVal:u,xAxisTTVal:f,zVal:g},seriesName:p,shared:o,pColor:x})},v=0,m=c.globals.series.length-1;v<c.globals.series.length;v++,m--)b(v,m)}},{key:\"getFormatters\",value:function(t){var e,i=this.w,a=i.globals.yLabelFormatters[t];return void 0!==i.globals.ttVal?Array.isArray(i.globals.ttVal)?(a=i.globals.ttVal[t]&&i.globals.ttVal[t].formatter,e=i.globals.ttVal[t]&&i.globals.ttVal[t].title&&i.globals.ttVal[t].title.formatter):(a=i.globals.ttVal.formatter,\"function\"==typeof i.globals.ttVal.title.formatter&&(e=i.globals.ttVal.title.formatter)):e=i.config.tooltip.y.title.formatter,\"function\"!=typeof a&&(a=i.globals.yLabelFormatters[0]?i.globals.yLabelFormatters[0]:function(t){return t}),\"function\"!=typeof e&&(e=function(t){return t}),{yLbFormatter:a,yLbTitleFormatter:e}}},{key:\"getSeriesName\",value:function(t){var e=t.fn,i=t.index,a=t.seriesIndex,r=t.j,s=this.w;return e(String(s.globals.seriesNames[i]),{series:s.globals.series,seriesIndex:a,dataPointIndex:r,w:s})}},{key:\"DOMHandling\",value:function(t){t.i;var e=t.t,i=t.j,a=t.ttItems,r=t.values,s=t.seriesName,n=t.shared,o=t.pColor,l=this.w,c=this.ttCtx,h=r.val,d=r.goalVals,u=r.xVal,g=r.xAxisTTVal,f=r.zVal,p=null;p=a[e].children,l.config.tooltip.fillSeriesColor&&(a[e].style.backgroundColor=o,p[0].style.display=\"none\"),c.showTooltipTitle&&(null===c.tooltipTitle&&(c.tooltipTitle=l.globals.dom.baseEl.querySelector(\".apexcharts-tooltip-title\")),c.tooltipTitle.innerHTML=u),c.isXAxisTooltipEnabled&&(c.xaxisTooltipText.innerHTML=\"\"!==g?g:u);var x=a[e].querySelector(\".apexcharts-tooltip-text-y-label\");x&&(x.innerHTML=s||\"\");var b=a[e].querySelector(\".apexcharts-tooltip-text-y-value\");b&&(b.innerHTML=void 0!==h?h:\"\"),p[0]&&p[0].classList.contains(\"apexcharts-tooltip-marker\")&&(l.config.tooltip.marker.fillColors&&Array.isArray(l.config.tooltip.marker.fillColors)&&(o=l.config.tooltip.marker.fillColors[e]),p[0].style.backgroundColor=o),l.config.tooltip.marker.show||(p[0].style.display=\"none\");var v=a[e].querySelector(\".apexcharts-tooltip-text-goals-label\"),m=a[e].querySelector(\".apexcharts-tooltip-text-goals-value\");if(d.length&&l.globals.seriesGoals[e]){var y=function(){var t=\"<div >\",e=\"<div>\";d.forEach((function(i,a){t+=' <div style=\"display: flex\"><span class=\"apexcharts-tooltip-marker\" style=\"background-color: '.concat(i.attrs.strokeColor,'; height: 3px; border-radius: 0; top: 5px;\"></span> ').concat(i.attrs.name,\"</div>\"),e+=\"<div>\".concat(i.val,\"</div>\")})),v.innerHTML=t+\"</div>\",m.innerHTML=e+\"</div>\"};n?l.globals.seriesGoals[e][i]&&Array.isArray(l.globals.seriesGoals[e][i])?y():(v.innerHTML=\"\",m.innerHTML=\"\"):y()}else v.innerHTML=\"\",m.innerHTML=\"\";null!==f&&(a[e].querySelector(\".apexcharts-tooltip-text-z-label\").innerHTML=l.config.tooltip.z.title,a[e].querySelector(\".apexcharts-tooltip-text-z-value\").innerHTML=void 0!==f?f:\"\"),n&&p[0]&&(null==h||l.globals.ancillaryCollapsedSeriesIndices.indexOf(e)>-1||l.globals.collapsedSeriesIndices.indexOf(e)>-1?p[0].parentNode.style.display=\"none\":p[0].parentNode.style.display=l.config.tooltip.items.display)}},{key:\"toggleActiveInactiveSeries\",value:function(t){var e=this.w;if(t)this.tooltipUtil.toggleAllTooltipSeriesGroups(\"enable\");else{this.tooltipUtil.toggleAllTooltipSeriesGroups(\"disable\");var i=e.globals.dom.baseEl.querySelector(\".apexcharts-tooltip-series-group\");i&&(i.classList.add(\"apexcharts-active\"),i.style.display=e.config.tooltip.items.display)}}},{key:\"getValuesToPrint\",value:function(t){var e=t.i,i=t.j,a=this.w,r=this.ctx.series.filteredSeriesX(),s=\"\",n=\"\",o=null,l=null,c={series:a.globals.series,seriesIndex:e,dataPointIndex:i,w:a},h=a.globals.ttZFormatter;null===i?l=a.globals.series[e]:a.globals.isXNumeric&&\"treemap\"!==a.config.chart.type?(s=r[e][i],0===r[e].length&&(s=r[this.tooltipUtil.getFirstActiveXArray(r)][i])):s=void 0!==a.globals.labels[i]?a.globals.labels[i]:\"\";var d=s;return s=a.globals.isXNumeric&&\"datetime\"===a.config.xaxis.type?new z(this.ctx).xLabelFormat(a.globals.ttKeyFormatter,d,d,{i:void 0,dateFormatter:new M(this.ctx).formatDate,w:this.w}):a.globals.isBarHorizontal?a.globals.yLabelFormatters[0](d,c):a.globals.xLabelFormatter(d,c),void 0!==a.config.tooltip.x.formatter&&(s=a.globals.ttKeyFormatter(d,c)),a.globals.seriesZ.length>0&&a.globals.seriesZ[e].length>0&&(o=h(a.globals.seriesZ[e][i],a)),n=\"function\"==typeof a.config.xaxis.tooltip.formatter?a.globals.xaxisTooltipFormatter(d,c):s,{val:Array.isArray(l)?l.join(\" \"):l,xVal:Array.isArray(s)?s.join(\" \"):s,xAxisTTVal:Array.isArray(n)?n.join(\" \"):n,zVal:o}}},{key:\"handleCustomTooltip\",value:function(t){var e=t.i,i=t.j,a=t.y1,r=t.y2,s=t.w,n=this.ttCtx.getElTooltip(),o=s.config.tooltip.custom;Array.isArray(o)&&o[e]&&(o=o[e]),n.innerHTML=o({ctx:this.ctx,series:s.globals.series,seriesIndex:e,dataPointIndex:i,y1:a,y2:r,w:s})}}])&&Me(e.prototype,i),t}();function ze(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Ye=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ttCtx=e,this.ctx=e.ctx,this.w=e.w}var e,i;return e=t,i=[{key:\"moveXCrosshairs\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.ttCtx,a=this.w,r=i.getElXCrosshairs(),s=t-i.xcrosshairsWidth/2,n=a.globals.labels.slice().length;if(null!==e&&(s=a.globals.gridWidth/n*e),null===r||a.globals.isBarHorizontal||(r.setAttribute(\"x\",s),r.setAttribute(\"x1\",s),r.setAttribute(\"x2\",s),r.setAttribute(\"y2\",a.globals.gridHeight),r.classList.add(\"apexcharts-active\")),s<0&&(s=0),s>a.globals.gridWidth&&(s=a.globals.gridWidth),i.isXAxisTooltipEnabled){var o=s;\"tickWidth\"!==a.config.xaxis.crosshairs.width&&\"barWidth\"!==a.config.xaxis.crosshairs.width||(o=s+i.xcrosshairsWidth/2),this.moveXAxisTooltip(o)}}},{key:\"moveYCrosshairs\",value:function(t){var e=this.ttCtx;null!==e.ycrosshairs&&g.setAttrs(e.ycrosshairs,{y1:t,y2:t}),null!==e.ycrosshairsHidden&&g.setAttrs(e.ycrosshairsHidden,{y1:t,y2:t})}},{key:\"moveXAxisTooltip\",value:function(t){var e=this.w,i=this.ttCtx;if(null!==i.xaxisTooltip&&0!==i.xcrosshairsWidth){i.xaxisTooltip.classList.add(\"apexcharts-active\");var a,r=i.xaxisOffY+e.config.xaxis.tooltip.offsetY+e.globals.translateY+1+e.config.xaxis.offsetY;t-=i.xaxisTooltip.getBoundingClientRect().width/2,isNaN(t)||(t+=e.globals.translateX,a=new g(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=a.width+\"px\",i.xaxisTooltip.style.left=t+\"px\",i.xaxisTooltip.style.top=r+\"px\")}}},{key:\"moveYAxisTooltip\",value:function(t){var e=this.w,i=this.ttCtx;null===i.yaxisTTEls&&(i.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\"));var a=parseInt(i.ycrosshairsHidden.getAttribute(\"y1\"),10),r=e.globals.translateY+a,s=i.yaxisTTEls[t].getBoundingClientRect().height,n=e.globals.translateYAxisX[t]-2;e.config.yaxis[t].opposite&&(n-=26),r-=s/2,-1===e.globals.ignoreYAxisIndexes.indexOf(t)?(i.yaxisTTEls[t].classList.add(\"apexcharts-active\"),i.yaxisTTEls[t].style.top=r+\"px\",i.yaxisTTEls[t].style.left=n+e.config.yaxis[t].tooltip.offsetX+\"px\"):i.yaxisTTEls[t].classList.remove(\"apexcharts-active\")}},{key:\"moveTooltip\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,r=this.ttCtx,s=r.getElTooltip(),n=r.tooltipRect,o=null!==i?parseFloat(i):1,l=parseFloat(t)+o+5,c=parseFloat(e)+o/2;if(l>a.globals.gridWidth/2&&(l=l-n.ttWidth-o-10),l>a.globals.gridWidth-n.ttWidth-10&&(l=a.globals.gridWidth-n.ttWidth),l<-20&&(l=-20),a.config.tooltip.followCursor){var h=r.getElGrid().getBoundingClientRect();(l=r.e.clientX-h.left)>a.globals.gridWidth/2&&(l-=r.tooltipRect.ttWidth),(c=r.e.clientY+a.globals.translateY-h.top)>a.globals.gridHeight/2&&(c-=r.tooltipRect.ttHeight)}else a.globals.isBarHorizontal||n.ttHeight/2+c>a.globals.gridHeight&&(c=a.globals.gridHeight-n.ttHeight+a.globals.translateY);isNaN(l)||(l+=a.globals.translateX,s.style.left=l+\"px\",s.style.top=c+\"px\")}},{key:\"moveMarkers\",value:function(t,e){var i=this.w,a=this.ttCtx;if(i.globals.markers.size[t]>0)for(var r=i.globals.dom.baseEl.querySelectorAll(\" .apexcharts-series[data\\\\:realIndex='\".concat(t,\"'] .apexcharts-marker\")),s=0;s<r.length;s++)parseInt(r[s].getAttribute(\"rel\"),10)===e&&(a.marker.resetPointsSize(),a.marker.enlargeCurrentPoint(e,r[s]));else a.marker.resetPointsSize(),this.moveDynamicPointOnHover(e,t)}},{key:\"moveDynamicPointOnHover\",value:function(t,e){var i,a,r=this.w,s=this.ttCtx,n=r.globals.pointsArray,o=s.tooltipUtil.getHoverMarkerSize(e),l=r.config.series[e].type;if(!l||\"column\"!==l&&\"candlestick\"!==l&&\"boxPlot\"!==l){i=n[e][t][0],a=n[e][t][1]?n[e][t][1]:0;var c=r.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(e,\"'] .apexcharts-series-markers circle\"));c&&a<r.globals.gridHeight&&a>0&&(c.setAttribute(\"r\",o),c.setAttribute(\"cx\",i),c.setAttribute(\"cy\",a)),this.moveXCrosshairs(i),s.fixedTooltip||this.moveTooltip(i,a,o)}}},{key:\"moveDynamicPointsOnHover\",value:function(t){var e,i=this.ttCtx,a=i.w,r=0,s=0,n=a.globals.pointsArray;e=new ot(this.ctx).getActiveConfigSeriesIndex(\"asc\",[\"line\",\"area\",\"scatter\",\"bubble\"]);var o=i.tooltipUtil.getHoverMarkerSize(e);n[e]&&(r=n[e][t][0],s=n[e][t][1]);var l=i.tooltipUtil.getAllMarkers();if(null!==l)for(var c=0;c<a.globals.series.length;c++){var h=n[c];if(a.globals.comboCharts&&void 0===h&&l.splice(c,0,null),h&&h.length){var d=n[c][t][1],u=void 0;if(l[c].setAttribute(\"cx\",r),\"rangeArea\"===a.config.chart.type&&!a.globals.comboCharts){var g=t+a.globals.series[c].length;u=n[c][g][1],d-=Math.abs(d-u)/2}null!==d&&!isNaN(d)&&d<a.globals.gridHeight+o&&d+o>0?(l[c]&&l[c].setAttribute(\"r\",o),l[c]&&l[c].setAttribute(\"cy\",d)):l[c]&&l[c].setAttribute(\"r\",0)}}this.moveXCrosshairs(r),i.fixedTooltip||this.moveTooltip(r,s||a.globals.gridHeight,o)}},{key:\"moveStickyTooltipOverBars\",value:function(t,e){var i=this.w,a=this.ttCtx,r=i.globals.columnSeries?i.globals.columnSeries.length:i.globals.series.length,s=r>=2&&r%2==0?Math.floor(r/2):Math.floor(r/2)+1;i.globals.isBarHorizontal&&(s=new ot(this.ctx).getActiveConfigSeriesIndex(\"desc\")+1);var n=i.globals.dom.baseEl.querySelector(\".apexcharts-bar-series .apexcharts-series[rel='\".concat(s,\"'] path[j='\").concat(t,\"'], .apexcharts-candlestick-series .apexcharts-series[rel='\").concat(s,\"'] path[j='\").concat(t,\"'], .apexcharts-boxPlot-series .apexcharts-series[rel='\").concat(s,\"'] path[j='\").concat(t,\"'], .apexcharts-rangebar-series .apexcharts-series[rel='\").concat(s,\"'] path[j='\").concat(t,\"']\"));n||\"number\"!=typeof e||(n=i.globals.dom.baseEl.querySelector(\".apexcharts-bar-series .apexcharts-series[data\\\\:realIndex='\".concat(e,\"'] path[j='\").concat(t,\"'],\\n        .apexcharts-candlestick-series .apexcharts-series[data\\\\:realIndex='\").concat(e,\"'] path[j='\").concat(t,\"'],\\n        .apexcharts-boxPlot-series .apexcharts-series[data\\\\:realIndex='\").concat(e,\"'] path[j='\").concat(t,\"'],\\n        .apexcharts-rangebar-series .apexcharts-series[data\\\\:realIndex='\").concat(e,\"'] path[j='\").concat(t,\"']\")));var o=n?parseFloat(n.getAttribute(\"cx\")):0,l=n?parseFloat(n.getAttribute(\"cy\")):0,c=n?parseFloat(n.getAttribute(\"barWidth\")):0,h=a.getElGrid().getBoundingClientRect(),d=n&&(n.classList.contains(\"apexcharts-candlestick-area\")||n.classList.contains(\"apexcharts-boxPlot-area\"));i.globals.isXNumeric?(n&&!d&&(o-=r%2!=0?c/2:0),n&&d&&i.globals.comboCharts&&(o-=c/2)):i.globals.isBarHorizontal||(o=a.xAxisTicksPositions[t-1]+a.dataPointsDividedWidth/2,isNaN(o)&&(o=a.xAxisTicksPositions[t]-a.dataPointsDividedWidth/2)),i.globals.isBarHorizontal?l-=a.tooltipRect.ttHeight:i.config.tooltip.followCursor?l=a.e.clientY-h.top-a.tooltipRect.ttHeight/2:l+a.tooltipRect.ttHeight+15>i.globals.gridHeight&&(l=i.globals.gridHeight),i.globals.isBarHorizontal||this.moveXCrosshairs(o),a.fixedTooltip||this.moveTooltip(o,l||i.globals.gridHeight)}}],i&&ze(e.prototype,i),t}();function Re(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}function De(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Fe=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx,this.tooltipPosition=new Ye(e)}var e,i;return e=t,i=[{key:\"drawDynamicPoints\",value:function(){var t,e=this.w,i=new g(this.ctx),a=new et(this.ctx),r=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-series\");r=function(t){if(Array.isArray(t))return Re(t)}(t=r)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||function(t,e){if(t){if(\"string\"==typeof t)return Re(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?Re(t,e):void 0}}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}(),e.config.chart.stacked&&r.sort((function(t,e){return parseFloat(t.getAttribute(\"data:realIndex\"))-parseFloat(e.getAttribute(\"data:realIndex\"))}));for(var s=0;s<r.length;s++){var n=r[s].querySelector(\".apexcharts-series-markers-wrap\");if(null!==n){var o=void 0,l=\"apexcharts-marker w\".concat((Math.random()+1).toString(36).substring(4));\"line\"!==e.config.chart.type&&\"area\"!==e.config.chart.type||e.globals.comboCharts||e.config.tooltip.intersect||(l+=\" no-pointer-events\");var c=a.getMarkerConfig({cssClass:l,seriesIndex:Number(n.getAttribute(\"data:realIndex\"))});(o=i.drawMarker(0,0,c)).node.setAttribute(\"default-marker-size\",0);var h=document.createElementNS(e.globals.SVGNS,\"g\");h.classList.add(\"apexcharts-series-markers\"),h.appendChild(o.node),n.appendChild(h)}}}},{key:\"enlargeCurrentPoint\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=this.w;\"bubble\"!==r.config.chart.type&&this.newPointSize(t,e);var s=e.getAttribute(\"cx\"),n=e.getAttribute(\"cy\");if(null!==i&&null!==a&&(s=i,n=a),this.tooltipPosition.moveXCrosshairs(s),!this.fixedTooltip){if(\"radar\"===r.config.chart.type){var o=this.ttCtx.getElGrid().getBoundingClientRect();s=this.ttCtx.e.clientX-o.left}this.tooltipPosition.moveTooltip(s,n,r.config.markers.hover.size)}}},{key:\"enlargePoints\",value:function(t){for(var e=this.w,i=this,a=this.ttCtx,r=t,s=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"),n=e.config.markers.hover.size,o=0;o<s.length;o++){var l=s[o].getAttribute(\"rel\"),c=s[o].getAttribute(\"index\");if(void 0===n&&(n=e.globals.markers.size[c]+e.config.markers.hover.sizeOffset),r===parseInt(l,10)){i.newPointSize(r,s[o]);var h=s[o].getAttribute(\"cx\"),d=s[o].getAttribute(\"cy\");i.tooltipPosition.moveXCrosshairs(h),a.fixedTooltip||i.tooltipPosition.moveTooltip(h,d,n)}else i.oldPointSize(s[o])}}},{key:\"newPointSize\",value:function(t,e){var i=this.w,a=i.config.markers.hover.size,r=0===t?e.parentNode.firstChild:e.parentNode.lastChild;if(\"0\"!==r.getAttribute(\"default-marker-size\")){var s=parseInt(r.getAttribute(\"index\"),10);void 0===a&&(a=i.globals.markers.size[s]+i.config.markers.hover.sizeOffset),a<0&&(a=0),r.setAttribute(\"r\",a)}}},{key:\"oldPointSize\",value:function(t){var e=parseFloat(t.getAttribute(\"default-marker-size\"));t.setAttribute(\"r\",e)}},{key:\"resetPointsSize\",value:function(){for(var t=this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"),e=0;e<t.length;e++){var i=parseFloat(t[e].getAttribute(\"default-marker-size\"));r.isNumber(i)&&i>=0?t[e].setAttribute(\"r\",i):t[e].setAttribute(\"r\",0)}}}],i&&De(e.prototype,i),t}();function He(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const Ne=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w;var i=this.w;this.ttCtx=e,this.isVerticalGroupedRangeBar=!i.globals.isBarHorizontal&&\"rangeBar\"===i.config.chart.type&&i.config.plotOptions.bar.rangeBarGroupRows}var e,i;return e=t,(i=[{key:\"getAttr\",value:function(t,e){return parseFloat(t.target.getAttribute(e))}},{key:\"handleHeatTreeTooltip\",value:function(t){var e=t.e,i=t.opt,a=t.x,r=t.y,s=t.type,n=this.ttCtx,o=this.w;if(e.target.classList.contains(\"apexcharts-\".concat(s,\"-rect\"))){var l=this.getAttr(e,\"i\"),c=this.getAttr(e,\"j\"),h=this.getAttr(e,\"cx\"),d=this.getAttr(e,\"cy\"),u=this.getAttr(e,\"width\"),g=this.getAttr(e,\"height\");if(n.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:l,j:c,shared:!1,e}),o.globals.capturedSeriesIndex=l,o.globals.capturedDataPointIndex=c,a=h+n.tooltipRect.ttWidth/2+u,r=d+n.tooltipRect.ttHeight/2-g/2,n.tooltipPosition.moveXCrosshairs(h+u/2),a>o.globals.gridWidth/2&&(a=h-n.tooltipRect.ttWidth/2+u),n.w.config.tooltip.followCursor){var f=o.globals.dom.elWrap.getBoundingClientRect();a=o.globals.clientX-f.left-(a>o.globals.gridWidth/2?n.tooltipRect.ttWidth:0),r=o.globals.clientY-f.top-(r>o.globals.gridHeight/2?n.tooltipRect.ttHeight:0)}}return{x:a,y:r}}},{key:\"handleMarkerTooltip\",value:function(t){var e,i,a=t.e,s=t.opt,n=t.x,o=t.y,l=this.w,c=this.ttCtx;if(a.target.classList.contains(\"apexcharts-marker\")){var h=parseInt(s.paths.getAttribute(\"cx\"),10),d=parseInt(s.paths.getAttribute(\"cy\"),10),u=parseFloat(s.paths.getAttribute(\"val\"));if(i=parseInt(s.paths.getAttribute(\"rel\"),10),e=parseInt(s.paths.parentNode.parentNode.parentNode.getAttribute(\"rel\"),10)-1,c.intersect){var g=r.findAncestor(s.paths,\"apexcharts-series\");g&&(e=parseInt(g.getAttribute(\"data:realIndex\"),10))}if(c.tooltipLabels.drawSeriesTexts({ttItems:s.ttItems,i:e,j:i,shared:!c.showOnIntersect&&l.config.tooltip.shared,e:a}),\"mouseup\"===a.type&&c.markerClick(a,e,i),l.globals.capturedSeriesIndex=e,l.globals.capturedDataPointIndex=i,n=h,o=d+l.globals.translateY-1.4*c.tooltipRect.ttHeight,c.w.config.tooltip.followCursor){var f=c.getElGrid().getBoundingClientRect();o=c.e.clientY+l.globals.translateY-f.top}u<0&&(o=d),c.marker.enlargeCurrentPoint(i,s.paths,n,o)}return{x:n,y:o}}},{key:\"handleBarTooltip\",value:function(t){var e,i,a=t.e,r=t.opt,s=this.w,n=this.ttCtx,o=n.getElTooltip(),l=0,c=0,h=0,d=this.getBarTooltipXY({e:a,opt:r});e=d.i;var u=d.barHeight,g=d.j;s.globals.capturedSeriesIndex=e,s.globals.capturedDataPointIndex=g,s.globals.isBarHorizontal&&n.tooltipUtil.hasBars()||!s.config.tooltip.shared?(c=d.x,h=d.y,i=Array.isArray(s.config.stroke.width)?s.config.stroke.width[e]:s.config.stroke.width,l=c):s.globals.comboCharts||s.config.tooltip.shared||(l/=2),isNaN(h)&&(h=s.globals.svgHeight-n.tooltipRect.ttHeight);var f=parseInt(r.paths.parentNode.getAttribute(\"data:realIndex\"),10),p=s.globals.isMultipleYAxis?s.config.yaxis[f]&&s.config.yaxis[f].reversed:s.config.yaxis[0].reversed;if(c+n.tooltipRect.ttWidth>s.globals.gridWidth&&!p?c-=n.tooltipRect.ttWidth:c<0&&(c=0),n.w.config.tooltip.followCursor){var x=n.getElGrid().getBoundingClientRect();h=n.e.clientY-x.top}null===n.tooltip&&(n.tooltip=s.globals.dom.baseEl.querySelector(\".apexcharts-tooltip\")),s.config.tooltip.shared||(s.globals.comboBarCount>0?n.tooltipPosition.moveXCrosshairs(l+i/2):n.tooltipPosition.moveXCrosshairs(l)),!n.fixedTooltip&&(!s.config.tooltip.shared||s.globals.isBarHorizontal&&n.tooltipUtil.hasBars())&&(p&&(c-=n.tooltipRect.ttWidth)<0&&(c=0),!p||s.globals.isBarHorizontal&&n.tooltipUtil.hasBars()||(h=h+u-2*(s.globals.series[e][g]<0?u:0)),h=h+s.globals.translateY-n.tooltipRect.ttHeight/2,o.style.left=c+s.globals.translateX+\"px\",o.style.top=h+\"px\")}},{key:\"getBarTooltipXY\",value:function(t){var e=this,i=t.e,a=t.opt,r=this.w,s=null,n=this.ttCtx,o=0,l=0,c=0,h=0,d=0,u=i.target.classList;if(u.contains(\"apexcharts-bar-area\")||u.contains(\"apexcharts-candlestick-area\")||u.contains(\"apexcharts-boxPlot-area\")||u.contains(\"apexcharts-rangebar-area\")){var g=i.target,f=g.getBoundingClientRect(),p=a.elGrid.getBoundingClientRect(),x=f.height;d=f.height;var b=f.width,v=parseInt(g.getAttribute(\"cx\"),10),m=parseInt(g.getAttribute(\"cy\"),10);h=parseFloat(g.getAttribute(\"barWidth\"));var y=\"touchmove\"===i.type?i.touches[0].clientX:i.clientX;s=parseInt(g.getAttribute(\"j\"),10),o=parseInt(g.parentNode.getAttribute(\"rel\"),10)-1;var w=g.getAttribute(\"data-range-y1\"),k=g.getAttribute(\"data-range-y2\");r.globals.comboCharts&&(o=parseInt(g.parentNode.getAttribute(\"data:realIndex\"),10));var A=function(t){return r.globals.isXNumeric?v-b/2:e.isVerticalGroupedRangeBar?v+b/2:v-n.dataPointsDividedWidth+b/2},S=function(){return m-n.dataPointsDividedHeight+x/2-n.tooltipRect.ttHeight/2};n.tooltipLabels.drawSeriesTexts({ttItems:a.ttItems,i:o,j:s,y1:w?parseInt(w,10):null,y2:k?parseInt(k,10):null,shared:!n.showOnIntersect&&r.config.tooltip.shared,e:i}),r.config.tooltip.followCursor?r.globals.isBarHorizontal?(l=y-p.left+15,c=S()):(l=A(),c=i.clientY-p.top-n.tooltipRect.ttHeight/2-15):r.globals.isBarHorizontal?((l=v)<n.xyRatios.baseLineInvertedY&&(l=v-n.tooltipRect.ttWidth),c=S()):(l=A(),c=m)}return{x:l,y:c,barHeight:d,barWidth:h,i:o,j:s}}}])&&He(e.prototype,i),t}();function We(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const je=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.ttCtx=e}var e,i;return e=t,(i=[{key:\"drawXaxisTooltip\",value:function(){var t=this.w,e=this.ttCtx,i=\"bottom\"===t.config.xaxis.position;e.xaxisOffY=i?t.globals.gridHeight+1:-t.globals.xAxisHeight-t.config.xaxis.axisTicks.height+3;var a=i?\"apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom\":\"apexcharts-xaxistooltip apexcharts-xaxistooltip-top\",r=t.globals.dom.elWrap;e.isXAxisTooltipEnabled&&null===t.globals.dom.baseEl.querySelector(\".apexcharts-xaxistooltip\")&&(e.xaxisTooltip=document.createElement(\"div\"),e.xaxisTooltip.setAttribute(\"class\",a+\" apexcharts-theme-\"+t.config.tooltip.theme),r.appendChild(e.xaxisTooltip),e.xaxisTooltipText=document.createElement(\"div\"),e.xaxisTooltipText.classList.add(\"apexcharts-xaxistooltip-text\"),e.xaxisTooltipText.style.fontFamily=t.config.xaxis.tooltip.style.fontFamily||t.config.chart.fontFamily,e.xaxisTooltipText.style.fontSize=t.config.xaxis.tooltip.style.fontSize,e.xaxisTooltip.appendChild(e.xaxisTooltipText))}},{key:\"drawYaxisTooltip\",value:function(){for(var t=this.w,e=this.ttCtx,i=function(i){var a=t.config.yaxis[i].opposite||t.config.yaxis[i].crosshairs.opposite;e.yaxisOffX=a?t.globals.gridWidth+1:1;var r=\"apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i,a?\" apexcharts-yaxistooltip-right\":\" apexcharts-yaxistooltip-left\");t.globals.yAxisSameScaleIndices.map((function(e,a){e.map((function(e,a){a===i&&(r+=t.config.yaxis[a].show?\" \":\" apexcharts-yaxistooltip-hidden\")}))}));var s=t.globals.dom.elWrap;null===t.globals.dom.baseEl.querySelector(\".apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i))&&(e.yaxisTooltip=document.createElement(\"div\"),e.yaxisTooltip.setAttribute(\"class\",r+\" apexcharts-theme-\"+t.config.tooltip.theme),s.appendChild(e.yaxisTooltip),0===i&&(e.yaxisTooltipText=[]),e.yaxisTooltipText[i]=document.createElement(\"div\"),e.yaxisTooltipText[i].classList.add(\"apexcharts-yaxistooltip-text\"),e.yaxisTooltip.appendChild(e.yaxisTooltipText[i]))},a=0;a<t.config.yaxis.length;a++)i(a)}},{key:\"setXCrosshairWidth\",value:function(){var t=this.w,e=this.ttCtx,i=e.getElXCrosshairs();if(e.xcrosshairsWidth=parseInt(t.config.xaxis.crosshairs.width,10),t.globals.comboCharts){var a=t.globals.dom.baseEl.querySelector(\".apexcharts-bar-area\");if(null!==a&&\"barWidth\"===t.config.xaxis.crosshairs.width){var r=parseFloat(a.getAttribute(\"barWidth\"));e.xcrosshairsWidth=r}else if(\"tickWidth\"===t.config.xaxis.crosshairs.width){var s=t.globals.labels.length;e.xcrosshairsWidth=t.globals.gridWidth/s}}else if(\"tickWidth\"===t.config.xaxis.crosshairs.width){var n=t.globals.labels.length;e.xcrosshairsWidth=t.globals.gridWidth/n}else if(\"barWidth\"===t.config.xaxis.crosshairs.width){var o=t.globals.dom.baseEl.querySelector(\".apexcharts-bar-area\");if(null!==o){var l=parseFloat(o.getAttribute(\"barWidth\"));e.xcrosshairsWidth=l}else e.xcrosshairsWidth=1}t.globals.isBarHorizontal&&(e.xcrosshairsWidth=0),null!==i&&e.xcrosshairsWidth>0&&i.setAttribute(\"width\",e.xcrosshairsWidth)}},{key:\"handleYCrosshair\",value:function(){var t=this.w,e=this.ttCtx;e.ycrosshairs=t.globals.dom.baseEl.querySelector(\".apexcharts-ycrosshairs\"),e.ycrosshairsHidden=t.globals.dom.baseEl.querySelector(\".apexcharts-ycrosshairs-hidden\")}},{key:\"drawYaxisTooltipText\",value:function(t,e,i){var a=this.ttCtx,r=this.w,s=r.globals.yLabelFormatters[t];if(a.yaxisTooltips[t]){var n=a.getElGrid().getBoundingClientRect(),o=(e-n.top)*i.yRatio[t],l=r.globals.maxYArr[t]-r.globals.minYArr[t],c=r.globals.minYArr[t]+(l-o);a.tooltipPosition.moveYCrosshairs(e-n.top),a.yaxisTooltipText[t].innerHTML=s(c),a.tooltipPosition.moveYAxisTooltip(t)}}}])&&We(e.prototype,i),t}();function Be(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function Ge(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?Be(Object(i),!0).forEach((function(e){Ve(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Be(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function Ve(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function _e(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Ue=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.tConfig=i.config.tooltip,this.tooltipUtil=new Oe(this),this.tooltipLabels=new Xe(this),this.tooltipPosition=new Ye(this),this.marker=new Fe(this),this.intersect=new Ne(this),this.axesTooltip=new je(this),this.showOnIntersect=this.tConfig.intersect,this.showTooltipTitle=this.tConfig.x.show,this.fixedTooltip=this.tConfig.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarShared=!i.globals.isBarHorizontal&&this.tConfig.shared,this.lastHoverTime=Date.now()}var e,i;return e=t,i=[{key:\"getElTooltip\",value:function(t){return t||(t=this),t.w.globals.dom.baseEl?t.w.globals.dom.baseEl.querySelector(\".apexcharts-tooltip\"):null}},{key:\"getElXCrosshairs\",value:function(){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-xcrosshairs\")}},{key:\"getElGrid\",value:function(){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-grid\")}},{key:\"drawTooltip\",value:function(t){var e=this.w;this.xyRatios=t,this.isXAxisTooltipEnabled=e.config.xaxis.tooltip.enabled&&e.globals.axisCharts,this.yaxisTooltips=e.config.yaxis.map((function(t,i){return!!(t.show&&t.tooltip.enabled&&e.globals.axisCharts)})),this.allTooltipSeriesGroups=[],e.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement(\"div\");if(i.classList.add(\"apexcharts-tooltip\"),e.config.tooltip.cssClass&&i.classList.add(e.config.tooltip.cssClass),i.classList.add(\"apexcharts-theme-\".concat(this.tConfig.theme)),e.globals.dom.elWrap.appendChild(i),e.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var a=new vt(this.ctx);this.xAxisTicksPositions=a.getXAxisTicksPositions()}if(!e.globals.comboCharts&&!this.tConfig.intersect&&\"rangeBar\"!==e.config.chart.type||this.tConfig.shared||(this.showOnIntersect=!0),0!==e.config.markers.size&&0!==e.globals.markers.largestSize||this.marker.drawDynamicPoints(this),e.globals.collapsedSeries.length!==e.globals.series.length){this.dataPointsDividedHeight=e.globals.gridHeight/e.globals.dataPoints,this.dataPointsDividedWidth=e.globals.gridWidth/e.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement(\"div\"),this.tooltipTitle.classList.add(\"apexcharts-tooltip-title\"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||e.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var r=e.globals.series.length;(e.globals.xyCharts||e.globals.comboCharts)&&this.tConfig.shared&&(r=this.showOnIntersect?1:e.globals.series.length),this.legendLabels=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-legend-text\"),this.ttItems=this.createTTElements(r),this.addSVGEvents()}}},{key:\"createTTElements\",value:function(t){for(var e=this,i=this.w,a=[],r=this.getElTooltip(),s=function(s){var n=document.createElement(\"div\");n.classList.add(\"apexcharts-tooltip-series-group\"),n.style.order=i.config.tooltip.inverseOrder?t-s:s+1,e.tConfig.shared&&e.tConfig.enabledOnSeries&&Array.isArray(e.tConfig.enabledOnSeries)&&e.tConfig.enabledOnSeries.indexOf(s)<0&&n.classList.add(\"apexcharts-tooltip-series-group-hidden\");var o=document.createElement(\"span\");o.classList.add(\"apexcharts-tooltip-marker\"),o.style.backgroundColor=i.globals.colors[s],n.appendChild(o);var l=document.createElement(\"div\");l.classList.add(\"apexcharts-tooltip-text\"),l.style.fontFamily=e.tConfig.style.fontFamily||i.config.chart.fontFamily,l.style.fontSize=e.tConfig.style.fontSize,[\"y\",\"goals\",\"z\"].forEach((function(t){var e=document.createElement(\"div\");e.classList.add(\"apexcharts-tooltip-\".concat(t,\"-group\"));var i=document.createElement(\"span\");i.classList.add(\"apexcharts-tooltip-text-\".concat(t,\"-label\")),e.appendChild(i);var a=document.createElement(\"span\");a.classList.add(\"apexcharts-tooltip-text-\".concat(t,\"-value\")),e.appendChild(a),l.appendChild(e)})),n.appendChild(l),r.appendChild(n),a.push(n)},n=0;n<t;n++)s(n);return a}},{key:\"addSVGEvents\",value:function(){var t=this.w,e=t.config.chart.type,i=this.getElTooltip(),a=!(\"bar\"!==e&&\"candlestick\"!==e&&\"boxPlot\"!==e&&\"rangeBar\"!==e),r=\"area\"===e||\"line\"===e||\"scatter\"===e||\"bubble\"===e||\"radar\"===e,s=t.globals.dom.Paper.node,n=this.getElGrid();n&&(this.seriesBound=n.getBoundingClientRect());var o,l=[],c=[],h={hoverArea:s,elGrid:n,tooltipEl:i,tooltipY:l,tooltipX:c,ttItems:this.ttItems};if(t.globals.axisCharts&&(r?o=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series[data\\\\:longestSeries='true'] .apexcharts-marker\"):a?o=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-boxPlot-area, .apexcharts-series .apexcharts-rangebar-area\"):\"heatmap\"!==e&&\"treemap\"!==e||(o=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series .apexcharts-heatmap, .apexcharts-series .apexcharts-treemap\")),o&&o.length))for(var d=0;d<o.length;d++)l.push(o[d].getAttribute(\"cy\")),c.push(o[d].getAttribute(\"cx\"));if(t.globals.xyCharts&&!this.showOnIntersect||t.globals.comboCharts&&!this.showOnIntersect||a&&this.tooltipUtil.hasBars()&&this.tConfig.shared)this.addPathsEventListeners([s],h);else if(a&&!t.globals.comboCharts||r&&this.showOnIntersect)this.addDatapointEventsListeners(h);else if(!t.globals.axisCharts||\"heatmap\"===e||\"treemap\"===e){var u=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series\");this.addPathsEventListeners(u,h)}if(this.showOnIntersect){var g=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-line-series .apexcharts-marker, .apexcharts-area-series .apexcharts-marker\");g.length>0&&this.addPathsEventListeners(g,h),this.tooltipUtil.hasBars()&&!this.tConfig.shared&&this.addDatapointEventsListeners(h)}}},{key:\"drawFixedTooltipRect\",value:function(){var t=this.w,e=this.getElTooltip(),i=e.getBoundingClientRect(),a=i.width+10,r=i.height+10,s=this.tConfig.fixed.offsetX,n=this.tConfig.fixed.offsetY,o=this.tConfig.fixed.position.toLowerCase();return o.indexOf(\"right\")>-1&&(s=s+t.globals.svgWidth-a+10),o.indexOf(\"bottom\")>-1&&(n=n+t.globals.svgHeight-r-10),e.style.left=s+\"px\",e.style.top=n+\"px\",{x:s,y:n,ttWidth:a,ttHeight:r}}},{key:\"addDatapointEventsListeners\",value:function(t){var e=this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area\");this.addPathsEventListeners(e,t)}},{key:\"addPathsEventListeners\",value:function(t,e){for(var i=this,a=function(a){var r={paths:t[a],tooltipEl:e.tooltipEl,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:e.ttItems};[\"mousemove\",\"mouseup\",\"touchmove\",\"mouseout\",\"touchend\"].map((function(e){return t[a].addEventListener(e,i.onSeriesHover.bind(i,r),{capture:!1,passive:!0})}))},r=0;r<t.length;r++)a(r)}},{key:\"onSeriesHover\",value:function(t,e){var i=this,a=Date.now()-this.lastHoverTime;a>=100?this.seriesHover(t,e):(clearTimeout(this.seriesHoverTimeout),this.seriesHoverTimeout=setTimeout((function(){i.seriesHover(t,e)}),100-a))}},{key:\"seriesHover\",value:function(t,e){var i=this;this.lastHoverTime=Date.now();var a=[],r=this.w;r.config.chart.group&&(a=this.ctx.getGroupedCharts()),r.globals.axisCharts&&(r.globals.minX===-1/0&&r.globals.maxX===1/0||0===r.globals.dataPoints)||(a.length?a.forEach((function(a){var r=i.getElTooltip(a),s={paths:t.paths,tooltipEl:r,tooltipY:t.tooltipY,tooltipX:t.tooltipX,elGrid:t.elGrid,hoverArea:t.hoverArea,ttItems:a.w.globals.tooltip.ttItems};a.w.globals.minX===i.w.globals.minX&&a.w.globals.maxX===i.w.globals.maxX&&a.w.globals.tooltip.seriesHoverByContext({chartCtx:a,ttCtx:a.w.globals.tooltip,opt:s,e})})):this.seriesHoverByContext({chartCtx:this.ctx,ttCtx:this.w.globals.tooltip,opt:t,e}))}},{key:\"seriesHoverByContext\",value:function(t){var e=t.chartCtx,i=t.ttCtx,a=t.opt,r=t.e,s=e.w,n=this.getElTooltip();n&&(i.tooltipRect={x:0,y:0,ttWidth:n.getBoundingClientRect().width,ttHeight:n.getBoundingClientRect().height},i.e=r,!i.tooltipUtil.hasBars()||s.globals.comboCharts||i.isBarShared||this.tConfig.onDatasetHover.highlightDataSeries&&new ot(e).toggleSeriesOnHover(r,r.target.parentNode),i.fixedTooltip&&i.drawFixedTooltipRect(),s.globals.axisCharts?i.axisChartsTooltips({e:r,opt:a,tooltipRect:i.tooltipRect}):i.nonAxisChartsTooltips({e:r,opt:a,tooltipRect:i.tooltipRect}))}},{key:\"axisChartsTooltips\",value:function(t){var e,i,a=t.e,r=t.opt,s=this.w,n=r.elGrid.getBoundingClientRect(),o=\"touchmove\"===a.type?a.touches[0].clientX:a.clientX,l=\"touchmove\"===a.type?a.touches[0].clientY:a.clientY;if(this.clientY=l,this.clientX=o,s.globals.capturedSeriesIndex=-1,s.globals.capturedDataPointIndex=-1,l<n.top||l>n.top+n.height)this.handleMouseOut(r);else{if(Array.isArray(this.tConfig.enabledOnSeries)&&!s.config.tooltip.shared){var c=parseInt(r.paths.getAttribute(\"index\"),10);if(this.tConfig.enabledOnSeries.indexOf(c)<0)return void this.handleMouseOut(r)}var h=this.getElTooltip(),d=this.getElXCrosshairs(),u=s.globals.xyCharts||\"bar\"===s.config.chart.type&&!s.globals.isBarHorizontal&&this.tooltipUtil.hasBars()&&this.tConfig.shared||s.globals.comboCharts&&this.tooltipUtil.hasBars();if(\"mousemove\"===a.type||\"touchmove\"===a.type||\"mouseup\"===a.type){if(s.globals.collapsedSeries.length+s.globals.ancillaryCollapsedSeries.length===s.globals.series.length)return;null!==d&&d.classList.add(\"apexcharts-active\");var g=this.yaxisTooltips.filter((function(t){return!0===t}));if(null!==this.ycrosshairs&&g.length&&this.ycrosshairs.classList.add(\"apexcharts-active\"),u&&!this.showOnIntersect)this.handleStickyTooltip(a,o,l,r);else if(\"heatmap\"===s.config.chart.type||\"treemap\"===s.config.chart.type){var f=this.intersect.handleHeatTreeTooltip({e:a,opt:r,x:e,y:i,type:s.config.chart.type});e=f.x,i=f.y,h.style.left=e+\"px\",h.style.top=i+\"px\"}else this.tooltipUtil.hasBars()&&this.intersect.handleBarTooltip({e:a,opt:r}),this.tooltipUtil.hasMarkers()&&this.intersect.handleMarkerTooltip({e:a,opt:r,x:e,y:i});if(this.yaxisTooltips.length)for(var p=0;p<s.config.yaxis.length;p++)this.axesTooltip.drawYaxisTooltipText(p,l,this.xyRatios);r.tooltipEl.classList.add(\"apexcharts-active\")}else\"mouseout\"!==a.type&&\"touchend\"!==a.type||this.handleMouseOut(r)}}},{key:\"nonAxisChartsTooltips\",value:function(t){var e=t.e,i=t.opt,a=t.tooltipRect,r=this.w,s=i.paths.getAttribute(\"rel\"),n=this.getElTooltip(),o=r.globals.dom.elWrap.getBoundingClientRect();if(\"mousemove\"===e.type||\"touchmove\"===e.type){n.classList.add(\"apexcharts-active\"),this.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:parseInt(s,10)-1,shared:!1});var l=r.globals.clientX-o.left-a.ttWidth/2,c=r.globals.clientY-o.top-a.ttHeight-10;if(n.style.left=l+\"px\",n.style.top=c+\"px\",r.config.legend.tooltipHoverFormatter){var h=s-1,d=(0,r.config.legend.tooltipHoverFormatter)(this.legendLabels[h].getAttribute(\"data:default-text\"),{seriesIndex:h,dataPointIndex:h,w:r});this.legendLabels[h].innerHTML=d}}else\"mouseout\"!==e.type&&\"touchend\"!==e.type||(n.classList.remove(\"apexcharts-active\"),r.config.legend.tooltipHoverFormatter&&this.legendLabels.forEach((function(t){var e=t.getAttribute(\"data:default-text\");t.innerHTML=decodeURIComponent(e)})))}},{key:\"handleStickyTooltip\",value:function(t,e,i,a){var r=this.w,s=this.tooltipUtil.getNearestValues({context:this,hoverArea:a.hoverArea,elGrid:a.elGrid,clientX:e,clientY:i}),n=s.j,o=s.capturedSeries;r.globals.collapsedSeriesIndices.includes(o)&&(o=null);var l=a.elGrid.getBoundingClientRect();if(s.hoverX<0||s.hoverX>l.width)this.handleMouseOut(a);else if(null!==o)this.handleStickyCapturedSeries(t,o,a,n);else if(this.tooltipUtil.isXoverlap(n)||r.globals.isBarHorizontal){var c=r.globals.series.findIndex((function(t,e){return!r.globals.collapsedSeriesIndices.includes(e)}));this.create(t,this,c,n,a.ttItems)}}},{key:\"handleStickyCapturedSeries\",value:function(t,e,i,a){var r=this.w;if(this.tConfig.shared||null!==r.globals.series[e][a]){if(void 0!==r.globals.series[e][a])this.tConfig.shared&&this.tooltipUtil.isXoverlap(a)&&this.tooltipUtil.isInitialSeriesSameLen()?this.create(t,this,e,a,i.ttItems):this.create(t,this,e,a,i.ttItems,!1);else if(this.tooltipUtil.isXoverlap(a)){var s=r.globals.series.findIndex((function(t,e){return!r.globals.collapsedSeriesIndices.includes(e)}));this.create(t,this,s,a,i.ttItems)}}else this.handleMouseOut(i)}},{key:\"deactivateHoverFilter\",value:function(){for(var t=this.w,e=new g(this.ctx),i=t.globals.dom.Paper.select(\".apexcharts-bar-area\"),a=0;a<i.length;a++)e.pathMouseLeave(i[a])}},{key:\"handleMouseOut\",value:function(t){var e=this.w,i=this.getElXCrosshairs();if(t.tooltipEl.classList.remove(\"apexcharts-active\"),this.deactivateHoverFilter(),\"bubble\"!==e.config.chart.type&&this.marker.resetPointsSize(),null!==i&&i.classList.remove(\"apexcharts-active\"),null!==this.ycrosshairs&&this.ycrosshairs.classList.remove(\"apexcharts-active\"),this.isXAxisTooltipEnabled&&this.xaxisTooltip.classList.remove(\"apexcharts-active\"),this.yaxisTooltips.length){null===this.yaxisTTEls&&(this.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\"));for(var a=0;a<this.yaxisTTEls.length;a++)this.yaxisTTEls[a].classList.remove(\"apexcharts-active\")}e.config.legend.tooltipHoverFormatter&&this.legendLabels.forEach((function(t){var e=t.getAttribute(\"data:default-text\");t.innerHTML=decodeURIComponent(e)}))}},{key:\"markerClick\",value:function(t,e,i){var a=this.w;\"function\"==typeof a.config.chart.events.markerClick&&a.config.chart.events.markerClick(t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:a}),this.ctx.events.fireEvent(\"markerClick\",[t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:a}])}},{key:\"create\",value:function(t,e,i,a,r){var s,n,o,l,c,h,d,u,f,p,x,b,v,m,y,w,k=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,A=this.w,S=e;\"mouseup\"===t.type&&this.markerClick(t,i,a),null===k&&(k=this.tConfig.shared);var C=this.tooltipUtil.hasMarkers(i),P=this.tooltipUtil.getElBars();if(A.config.legend.tooltipHoverFormatter){var L=A.config.legend.tooltipHoverFormatter,O=Array.from(this.legendLabels);O.forEach((function(t){var e=t.getAttribute(\"data:default-text\");t.innerHTML=decodeURIComponent(e)}));for(var T=0;T<O.length;T++){var I=O[T],E=parseInt(I.getAttribute(\"i\"),10),M=decodeURIComponent(I.getAttribute(\"data:default-text\")),X=L(M,{seriesIndex:k?E:i,dataPointIndex:a,w:A});if(k)I.innerHTML=A.globals.collapsedSeriesIndices.indexOf(E)<0?X:M;else if(I.innerHTML=E===i?X:M,i===E)break}}var z=Ge(Ge({ttItems:r,i,j:a},void 0!==(null===(s=A.globals.seriesRange)||void 0===s||null===(n=s[i])||void 0===n||null===(o=n[a])||void 0===o||null===(l=o.y[0])||void 0===l?void 0:l.y1)&&{y1:null===(c=A.globals.seriesRange)||void 0===c||null===(h=c[i])||void 0===h||null===(d=h[a])||void 0===d||null===(u=d.y[0])||void 0===u?void 0:u.y1}),void 0!==(null===(f=A.globals.seriesRange)||void 0===f||null===(p=f[i])||void 0===p||null===(x=p[a])||void 0===x||null===(b=x.y[0])||void 0===b?void 0:b.y2)&&{y2:null===(v=A.globals.seriesRange)||void 0===v||null===(m=v[i])||void 0===m||null===(y=m[a])||void 0===y||null===(w=y.y[0])||void 0===w?void 0:w.y2});if(k){if(S.tooltipLabels.drawSeriesTexts(Ge(Ge({},z),{},{shared:!this.showOnIntersect&&this.tConfig.shared})),C)A.globals.markers.largestSize>0?S.marker.enlargePoints(a):S.tooltipPosition.moveDynamicPointsOnHover(a);else if(this.tooltipUtil.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(P),this.barSeriesHeight>0)){var Y=new g(this.ctx),R=A.globals.dom.Paper.select(\".apexcharts-bar-area[j='\".concat(a,\"']\"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(a,i);for(var D=0;D<R.length;D++)Y.pathMouseEnter(R[D])}}else S.tooltipLabels.drawSeriesTexts(Ge({shared:!1},z)),this.tooltipUtil.hasBars()&&S.tooltipPosition.moveStickyTooltipOverBars(a,i),C&&S.tooltipPosition.moveMarkers(i,a)}}],i&&_e(e.prototype,i),t}();function qe(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function Ze(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?qe(Object(i),!0).forEach((function(e){$e(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):qe(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function $e(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function Je(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Qe=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.barCtx=e,this.totalFormatter=this.w.config.plotOptions.bar.dataLabels.total.formatter,this.totalFormatter||(this.totalFormatter=this.w.config.dataLabels.formatter)}var e,i;return e=t,(i=[{key:\"handleBarDataLabels\",value:function(t){var e=t.x,i=t.y,a=t.y1,r=t.y2,s=t.i,n=t.j,o=t.realIndex,l=t.groupIndex,c=t.series,h=t.barHeight,d=t.barWidth,u=t.barXPosition,f=t.barYPosition,p=t.visibleSeries,x=t.renderedPath,b=this.w,v=new g(this.barCtx.ctx),m=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[o]:this.barCtx.strokeWidth,y=e+parseFloat(d*p),w=i+parseFloat(h*p);b.globals.isXNumeric&&!b.globals.isBarHorizontal&&(y=e+parseFloat(d*(p+1)),w=i+parseFloat(h*(p+1))-m);var k,A,S=null,C=e,P=i,L=b.config.dataLabels,O=this.barCtx.barOptions.dataLabels,T=this.barCtx.barOptions.dataLabels.total;void 0!==f&&this.barCtx.isRangeBar&&(w=f,P=f),void 0!==u&&this.barCtx.isVerticalGroupedRangeBar&&(y=u,C=u);var I=L.offsetX,E=L.offsetY,M={width:0,height:0};if(b.config.dataLabels.enabled){var X=this.barCtx.series[s][n];M=v.getTextRects(b.globals.yLabelFormatters[0](X),parseFloat(L.style.fontSize))}var z={x:e,y:i,i:s,j:n,realIndex:o,groupIndex:l||-1,renderedPath:x,bcx:y,bcy:w,barHeight:h,barWidth:d,textRects:M,strokeWidth:m,dataLabelsX:C,dataLabelsY:P,dataLabelsConfig:L,barDataLabelsConfig:O,barTotalDataLabelsConfig:T,offX:I,offY:E};return A=this.barCtx.isHorizontal?this.calculateBarsDataLabelsPosition(z):this.calculateColumnsDataLabelsPosition(z),x.attr({cy:A.bcy,cx:A.bcx,j:n,val:c[s][n],barHeight:h,barWidth:d}),k=this.drawCalculatedDataLabels({x:A.dataLabelsX,y:A.dataLabelsY,val:this.barCtx.isRangeBar?[a,r]:c[s][n],i:o,j:n,barWidth:d,barHeight:h,textRects:M,dataLabelsConfig:L}),b.config.chart.stacked&&T.enabled&&(S=this.drawTotalDataLabels({x:A.totalDataLabelsX,y:A.totalDataLabelsY,realIndex:o,textAnchor:A.totalDataLabelsAnchor,val:this.getStackedTotalDataLabel({realIndex:o,j:n}),dataLabelsConfig:L,barTotalDataLabelsConfig:T})),{dataLabels:k,totalDataLabels:S}}},{key:\"getStackedTotalDataLabel\",value:function(t){var e=t.realIndex,i=t.j,a=this.w,r=this.barCtx.stackedSeriesTotals[i];return this.totalFormatter&&(r=this.totalFormatter(r,Ze(Ze({},a),{},{seriesIndex:e,dataPointIndex:i,w:a}))),r}},{key:\"calculateColumnsDataLabelsPosition\",value:function(t){var e,i,a=this.w,r=t.i,s=t.j,n=t.realIndex,o=t.groupIndex,l=t.y,c=t.bcx,h=t.barWidth,d=t.barHeight,u=t.textRects,f=t.dataLabelsX,p=t.dataLabelsY,x=t.dataLabelsConfig,b=t.barDataLabelsConfig,v=t.barTotalDataLabelsConfig,m=t.strokeWidth,y=t.offX,w=t.offY;d=Math.abs(d);var k=\"vertical\"===a.config.plotOptions.bar.dataLabels.orientation;c=c-m/2+(-1!==o?o*h:0);var A=a.globals.gridWidth/a.globals.dataPoints;this.barCtx.isVerticalGroupedRangeBar?f+=h/2:f=a.globals.isXNumeric?c-h/2+y:c-A+h/2+y,k&&(f=f+u.height/2-m/2-2);var S=this.barCtx.series[r][s]<0,C=l;switch(this.barCtx.isReversed&&(C=l-d+(S?2*d:0),l-=d),b.position){case\"center\":p=k?S?C+d/2+w:C+d/2-w:S?C-d/2+u.height/2+w:C+d/2+u.height/2-w;break;case\"bottom\":p=k?S?C+d+w:C+d-w:S?C-d+u.height+m+w:C+d-u.height/2+m-w;break;case\"top\":p=k?S?C+w:C-w:S?C-u.height/2-w:C+u.height+w}if(this.barCtx.lastActiveBarSerieIndex===n&&v.enabled){var P=new g(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:n,j:s}),x.fontSize);e=S?C-P.height/2-w-v.offsetY+18:C+P.height+w+v.offsetY-18,i=f+v.offsetX}return a.config.chart.stacked||(p<0?p=0+m:p+u.height/3>a.globals.gridHeight&&(p=a.globals.gridHeight-m)),{bcx:c,bcy:l,dataLabelsX:f,dataLabelsY:p,totalDataLabelsX:i,totalDataLabelsY:e,totalDataLabelsAnchor:\"middle\"}}},{key:\"calculateBarsDataLabelsPosition\",value:function(t){var e=this.w,i=t.x,a=t.i,r=t.j,s=t.realIndex,n=t.groupIndex,o=t.bcy,l=t.barHeight,c=t.barWidth,h=t.textRects,d=t.dataLabelsX,u=t.strokeWidth,f=t.dataLabelsConfig,p=t.barDataLabelsConfig,x=t.barTotalDataLabelsConfig,b=t.offX,v=t.offY,m=e.globals.gridHeight/e.globals.dataPoints;c=Math.abs(c);var y,w,k=(o+=-1!==n?n*l:0)-(this.barCtx.isRangeBar?0:m)+l/2+h.height/2+v-3,A=\"start\",S=this.barCtx.series[a][r]<0,C=i;switch(this.barCtx.isReversed&&(C=i+c-(S?2*c:0),i=e.globals.gridWidth-c),p.position){case\"center\":d=S?C+c/2-b:Math.max(h.width/2,C-c/2)+b;break;case\"bottom\":d=S?C+c-u-Math.round(h.width/2)-b:C-c+u+Math.round(h.width/2)+b;break;case\"top\":d=S?C-u+Math.round(h.width/2)-b:C-u-Math.round(h.width/2)+b}if(this.barCtx.lastActiveBarSerieIndex===s&&x.enabled){var P=new g(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:s,j:r}),f.fontSize);S?(y=C-u+Math.round(P.width/2)-b-x.offsetX-15,A=\"end\"):y=C-u-Math.round(P.width/2)+b+x.offsetX+15,w=k+x.offsetY}return e.config.chart.stacked||(d<0?d=d+h.width+u:d+h.width/2>e.globals.gridWidth&&(d=e.globals.gridWidth-h.width-u)),{bcx:i,bcy:o,dataLabelsX:d,dataLabelsY:k,totalDataLabelsX:y,totalDataLabelsY:w,totalDataLabelsAnchor:A}}},{key:\"drawCalculatedDataLabels\",value:function(t){var e=t.x,i=t.y,a=t.val,r=t.i,s=t.j,n=t.textRects,o=t.barHeight,l=t.barWidth,c=t.dataLabelsConfig,h=this.w,d=\"rotate(0)\";\"vertical\"===h.config.plotOptions.bar.dataLabels.orientation&&(d=\"rotate(-90, \".concat(e,\", \").concat(i,\")\"));var u=new st(this.barCtx.ctx),f=new g(this.barCtx.ctx),p=c.formatter,x=null,b=h.globals.collapsedSeriesIndices.indexOf(r)>-1;if(c.enabled&&!b){x=f.group({class:\"apexcharts-data-labels\",transform:d});var v=\"\";void 0!==a&&(v=p(a,Ze(Ze({},h),{},{seriesIndex:r,dataPointIndex:s,w:h}))),!a&&h.config.plotOptions.bar.hideZeroBarsWhenGrouped&&(v=\"\");var m=h.globals.series[r][s]<0,y=h.config.plotOptions.bar.dataLabels.position;\"vertical\"===h.config.plotOptions.bar.dataLabels.orientation&&(\"top\"===y&&(c.textAnchor=m?\"end\":\"start\"),\"center\"===y&&(c.textAnchor=\"middle\"),\"bottom\"===y&&(c.textAnchor=m?\"end\":\"start\")),this.barCtx.isRangeBar&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels&&l<f.getTextRects(v,parseFloat(c.style.fontSize)).width&&(v=\"\"),h.config.chart.stacked&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels&&(this.barCtx.isHorizontal?n.width/1.6>Math.abs(l)&&(v=\"\"):n.height/1.6>Math.abs(o)&&(v=\"\"));var w=Ze({},c);this.barCtx.isHorizontal&&a<0&&(\"start\"===c.textAnchor?w.textAnchor=\"end\":\"end\"===c.textAnchor&&(w.textAnchor=\"start\")),u.plotDataLabelsText({x:e,y:i,text:v,i:r,j:s,parent:x,dataLabelsConfig:w,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return x}},{key:\"drawTotalDataLabels\",value:function(t){var e,i=t.x,a=t.y,r=t.val,s=t.realIndex,n=t.textAnchor,o=t.barTotalDataLabelsConfig,l=new g(this.barCtx.ctx);return o.enabled&&void 0!==i&&void 0!==a&&this.barCtx.lastActiveBarSerieIndex===s&&(e=l.drawText({x:i,y:a,foreColor:o.style.color,text:r,textAnchor:n,fontFamily:o.style.fontFamily,fontSize:o.style.fontSize,fontWeight:o.style.fontWeight})),e}}])&&Je(e.prototype,i),t}();function Ke(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function ti(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?Ke(Object(i),!0).forEach((function(e){ei(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Ke(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function ei(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function ii(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var ai=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.barCtx=e}var e,i;return e=t,i=[{key:\"initVariables\",value:function(t){var e=this.w;this.barCtx.series=t,this.barCtx.totalItems=0,this.barCtx.seriesLen=0,this.barCtx.visibleI=-1,this.barCtx.visibleItems=1;for(var i=0;i<t.length;i++)if(t[i].length>0&&(this.barCtx.seriesLen=this.barCtx.seriesLen+1,this.barCtx.totalItems+=t[i].length),e.globals.isXNumeric)for(var a=0;a<t[i].length;a++)e.globals.seriesX[i][a]>e.globals.minX&&e.globals.seriesX[i][a]<e.globals.maxX&&this.barCtx.visibleItems++;else this.barCtx.visibleItems=e.globals.dataPoints;0===this.barCtx.seriesLen&&(this.barCtx.seriesLen=1),this.barCtx.zeroSerieses=[],e.globals.comboCharts||this.checkZeroSeries({series:t})}},{key:\"initialPositions\",value:function(){var t,e,i,a,r,s,n,o,l=this.w,c=l.globals.dataPoints;this.barCtx.isRangeBar&&(c=l.globals.labels.length);var h=this.barCtx.seriesLen;if(l.config.plotOptions.bar.rangeBarGroupRows&&(h=1),this.barCtx.isHorizontal)r=(i=l.globals.gridHeight/c)/h,l.globals.isXNumeric&&(r=(i=l.globals.gridHeight/this.barCtx.totalItems)/this.barCtx.seriesLen),r=r*parseInt(this.barCtx.barOptions.barHeight,10)/100,-1===String(this.barCtx.barOptions.barHeight).indexOf(\"%\")&&(r=parseInt(this.barCtx.barOptions.barHeight,10)),o=this.barCtx.baseLineInvertedY+l.globals.padHorizontal+(this.barCtx.isReversed?l.globals.gridWidth:0)-(this.barCtx.isReversed?2*this.barCtx.baseLineInvertedY:0),this.barCtx.isFunnel&&(o=l.globals.gridWidth/2),e=(i-r*this.barCtx.seriesLen)/2;else{if(a=l.globals.gridWidth/this.barCtx.visibleItems,l.config.xaxis.convertedCatToNumeric&&(a=l.globals.gridWidth/l.globals.dataPoints),s=a/h*parseInt(this.barCtx.barOptions.columnWidth,10)/100,l.globals.isXNumeric){var d=this.barCtx.xRatio;l.config.xaxis.convertedCatToNumeric&&(d=this.barCtx.initialXRatio),l.globals.minXDiff&&.5!==l.globals.minXDiff&&l.globals.minXDiff/d>0&&(a=l.globals.minXDiff/d),(s=a/h*parseInt(this.barCtx.barOptions.columnWidth,10)/100)<1&&(s=1)}-1===String(this.barCtx.barOptions.columnWidth).indexOf(\"%\")&&(s=parseInt(this.barCtx.barOptions.columnWidth,10)),n=l.globals.gridHeight-this.barCtx.baseLineY[this.barCtx.yaxisIndex]-(this.barCtx.isReversed?l.globals.gridHeight:0)+(this.barCtx.isReversed?2*this.barCtx.baseLineY[this.barCtx.yaxisIndex]:0),t=l.globals.padHorizontal+(a-s*this.barCtx.seriesLen)/2}return{x:t,y:e,yDivision:i,xDivision:a,barHeight:r,barWidth:s,zeroH:n,zeroW:o}}},{key:\"initializeStackedPrevVars\",value:function(t){var e=t.w;e.globals.hasSeriesGroups?e.globals.seriesGroups.forEach((function(e){t[e]||(t[e]={}),t[e].prevY=[],t[e].prevX=[],t[e].prevYF=[],t[e].prevXF=[],t[e].prevYVal=[],t[e].prevXVal=[]})):(t.prevY=[],t.prevX=[],t.prevYF=[],t.prevXF=[],t.prevYVal=[],t.prevXVal=[])}},{key:\"initializeStackedXYVars\",value:function(t){var e=t.w;e.globals.hasSeriesGroups?e.globals.seriesGroups.forEach((function(e){t[e]||(t[e]={}),t[e].xArrj=[],t[e].xArrjF=[],t[e].xArrjVal=[],t[e].yArrj=[],t[e].yArrjF=[],t[e].yArrjVal=[]})):(t.xArrj=[],t.xArrjF=[],t.xArrjVal=[],t.yArrj=[],t.yArrjF=[],t.yArrjVal=[])}},{key:\"getPathFillColor\",value:function(t,e,i,a){var r,s,n,o,l=this.w,c=new K(this.barCtx.ctx),h=null,d=this.barCtx.barOptions.distributed?i:e;return this.barCtx.barOptions.colors.ranges.length>0&&this.barCtx.barOptions.colors.ranges.map((function(a){t[e][i]>=a.from&&t[e][i]<=a.to&&(h=a.color)})),l.config.series[e].data[i]&&l.config.series[e].data[i].fillColor&&(h=l.config.series[e].data[i].fillColor),c.fillPath({seriesNumber:this.barCtx.barOptions.distributed?d:a,dataPointIndex:i,color:h,value:t[e][i],fillConfig:null===(r=l.config.series[e].data[i])||void 0===r?void 0:r.fill,fillType:null!==(s=l.config.series[e].data[i])&&void 0!==s&&null!==(n=s.fill)&&void 0!==n&&n.type?null===(o=l.config.series[e].data[i])||void 0===o?void 0:o.fill.type:l.config.fill.type})}},{key:\"getStrokeWidth\",value:function(t,e,i){var a=0,r=this.w;return this.barCtx.series[t][e]?this.barCtx.isNullValue=!1:this.barCtx.isNullValue=!0,r.config.stroke.show&&(this.barCtx.isNullValue||(a=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[i]:this.barCtx.strokeWidth)),a}},{key:\"shouldApplyRadius\",value:function(t){var e=this.w,i=!1;return e.config.plotOptions.bar.borderRadius>0&&(e.config.chart.stacked&&\"last\"===e.config.plotOptions.bar.borderRadiusWhenStacked?this.barCtx.lastActiveBarSerieIndex===t&&(i=!0):i=!0),i}},{key:\"barBackground\",value:function(t){var e=t.j,i=t.i,a=t.x1,r=t.x2,s=t.y1,n=t.y2,o=t.elSeries,l=this.w,c=new g(this.barCtx.ctx),h=new ot(this.barCtx.ctx).getActiveConfigSeriesIndex();if(this.barCtx.barOptions.colors.backgroundBarColors.length>0&&h===i){e>=this.barCtx.barOptions.colors.backgroundBarColors.length&&(e%=this.barCtx.barOptions.colors.backgroundBarColors.length);var d=this.barCtx.barOptions.colors.backgroundBarColors[e],u=c.drawRect(void 0!==a?a:0,void 0!==s?s:0,void 0!==r?r:l.globals.gridWidth,void 0!==n?n:l.globals.gridHeight,this.barCtx.barOptions.colors.backgroundBarRadius,d,this.barCtx.barOptions.colors.backgroundBarOpacity);o.add(u),u.node.classList.add(\"apexcharts-backgroundBar\")}}},{key:\"getColumnPaths\",value:function(t){var e,i=t.barWidth,a=t.barXPosition,r=t.y1,s=t.y2,n=t.strokeWidth,o=t.seriesGroup,l=t.realIndex,c=t.i,h=t.j,d=t.w,u=new g(this.barCtx.ctx);(n=Array.isArray(n)?n[l]:n)||(n=0);var f=i,p=a;null!==(e=d.config.series[l].data[h])&&void 0!==e&&e.columnWidthOffset&&(p=a-d.config.series[l].data[h].columnWidthOffset/2,f=i+d.config.series[l].data[h].columnWidthOffset);var x=p,b=p+f;r+=.001,s+=.001;var v=u.move(x,r),m=u.move(x,r),y=u.line(b-n,r);if(d.globals.previousPaths.length>0&&(m=this.barCtx.getPreviousPath(l,h,!1)),v=v+u.line(x,s)+u.line(b-n,s)+u.line(b-n,r)+(\"around\"===d.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\"),m=m+u.line(x,r)+y+y+y+y+y+u.line(x,r)+(\"around\"===d.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\"),this.shouldApplyRadius(l)&&(v=u.roundPathCorners(v,d.config.plotOptions.bar.borderRadius)),d.config.chart.stacked){var w=this.barCtx;d.globals.hasSeriesGroups&&o&&(w=this.barCtx[o]),w.yArrj.push(s),w.yArrjF.push(Math.abs(r-s)),w.yArrjVal.push(this.barCtx.series[c][h])}return{pathTo:v,pathFrom:m}}},{key:\"getBarpaths\",value:function(t){var e,i=t.barYPosition,a=t.barHeight,r=t.x1,s=t.x2,n=t.strokeWidth,o=t.seriesGroup,l=t.realIndex,c=t.i,h=t.j,d=t.w,u=new g(this.barCtx.ctx);(n=Array.isArray(n)?n[l]:n)||(n=0);var f=i,p=a;null!==(e=d.config.series[l].data[h])&&void 0!==e&&e.barHeightOffset&&(f=i-d.config.series[l].data[h].barHeightOffset/2,p=a+d.config.series[l].data[h].barHeightOffset);var x=f,b=f+p;r+=.001,s+=.001;var v=u.move(r,x),m=u.move(r,x);d.globals.previousPaths.length>0&&(m=this.barCtx.getPreviousPath(l,h,!1));var y=u.line(r,b-n);if(v=v+u.line(s,x)+u.line(s,b-n)+y+(\"around\"===d.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\"),m=m+u.line(r,x)+y+y+y+y+y+u.line(r,x)+(\"around\"===d.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\"),this.shouldApplyRadius(l)&&(v=u.roundPathCorners(v,d.config.plotOptions.bar.borderRadius)),d.config.chart.stacked){var w=this.barCtx;d.globals.hasSeriesGroups&&o&&(w=this.barCtx[o]),w.xArrj.push(s),w.xArrjF.push(Math.abs(r-s)),w.xArrjVal.push(this.barCtx.series[c][h])}return{pathTo:v,pathFrom:m}}},{key:\"checkZeroSeries\",value:function(t){for(var e=t.series,i=this.w,a=0;a<e.length;a++){for(var r=0,s=0;s<e[i.globals.maxValsInArrayIndex].length;s++)r+=e[a][s];0===r&&this.barCtx.zeroSerieses.push(a)}}},{key:\"getXForValue\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&!arguments[2]?null:e;return null!=t&&(i=e+t/this.barCtx.invertedYRatio-2*(this.barCtx.isReversed?t/this.barCtx.invertedYRatio:0)),i}},{key:\"getYForValue\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&!arguments[2]?null:e;return null!=t&&(i=e-t/this.barCtx.yRatio[this.barCtx.yaxisIndex]+2*(this.barCtx.isReversed?t/this.barCtx.yRatio[this.barCtx.yaxisIndex]:0)),i}},{key:\"getGoalValues\",value:function(t,e,i,a,r){var s=this,n=this.w,o=[],l=function(a,r){var n;o.push((ei(n={},t,\"x\"===t?s.getXForValue(a,e,!1):s.getYForValue(a,i,!1)),ei(n,\"attrs\",r),n))};if(n.globals.seriesGoals[a]&&n.globals.seriesGoals[a][r]&&Array.isArray(n.globals.seriesGoals[a][r])&&n.globals.seriesGoals[a][r].forEach((function(t){l(t.value,t)})),this.barCtx.barOptions.isDumbbell&&n.globals.seriesRange.length){var c=this.barCtx.barOptions.dumbbellColors?this.barCtx.barOptions.dumbbellColors:n.globals.colors,h={strokeHeight:\"x\"===t?0:n.globals.markers.size[a],strokeWidth:\"x\"===t?n.globals.markers.size[a]:0,strokeDashArray:0,strokeLineCap:\"round\",strokeColor:Array.isArray(c[a])?c[a][0]:c[a]};l(n.globals.seriesRangeStart[a][r],h),l(n.globals.seriesRangeEnd[a][r],ti(ti({},h),{},{strokeColor:Array.isArray(c[a])?c[a][1]:c[a]}))}return o}},{key:\"drawGoalLine\",value:function(t){var e=t.barXPosition,i=t.barYPosition,a=t.goalX,r=t.goalY,s=t.barWidth,n=t.barHeight,o=new g(this.barCtx.ctx),l=o.group({className:\"apexcharts-bar-goals-groups\"});l.node.classList.add(\"apexcharts-element-hidden\"),this.barCtx.w.globals.delayedElements.push({el:l.node}),l.attr(\"clip-path\",\"url(#gridRectMarkerMask\".concat(this.barCtx.w.globals.cuid,\")\"));var c=null;return this.barCtx.isHorizontal?Array.isArray(a)&&a.forEach((function(t){var e=void 0!==t.attrs.strokeHeight?t.attrs.strokeHeight:n/2,a=i+e+n/2;c=o.drawLine(t.x,a-2*e,t.x,a,t.attrs.strokeColor?t.attrs.strokeColor:void 0,t.attrs.strokeDashArray,t.attrs.strokeWidth?t.attrs.strokeWidth:2,t.attrs.strokeLineCap),l.add(c)})):Array.isArray(r)&&r.forEach((function(t){var i=void 0!==t.attrs.strokeWidth?t.attrs.strokeWidth:s/2,a=e+i+s/2;c=o.drawLine(a-2*i,t.y,a,t.y,t.attrs.strokeColor?t.attrs.strokeColor:void 0,t.attrs.strokeDashArray,t.attrs.strokeHeight?t.attrs.strokeHeight:2,t.attrs.strokeLineCap),l.add(c)})),l}},{key:\"drawBarShadow\",value:function(t){var e=t.prevPaths,i=t.currPaths,a=t.color,s=this.w,n=e.x,o=e.x1,l=e.barYPosition,c=i.x,h=i.x1,d=i.barYPosition,u=l+i.barHeight,f=new g(this.barCtx.ctx),p=new r,x=f.move(o,u)+f.line(n,u)+f.line(c,d)+f.line(h,d)+f.line(o,u)+(\"around\"===s.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\");return f.drawPath({d:x,fill:p.shadeColor(.5,r.rgb2hex(a)),stroke:\"none\",strokeWidth:0,fillOpacity:1,classes:\"apexcharts-bar-shadows\"})}}],i&&ii(e.prototype,i),t}();function ri(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function si(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?ri(Object(i),!0).forEach((function(e){ni(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):ri(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function ni(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function oi(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const li=function(){function t(e,i){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w;var a=this.w;this.barOptions=a.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=a.config.stroke.width,this.isNullValue=!1,this.isRangeBar=a.globals.seriesRange.length&&this.isHorizontal,this.isVerticalGroupedRangeBar=!a.globals.isBarHorizontal&&a.globals.seriesRange.length&&a.config.plotOptions.bar.rangeBarGroupRows,this.isFunnel=this.barOptions.isFunnel,this.xyRatios=i,null!==this.xyRatios&&(this.xRatio=i.xRatio,this.initialXRatio=i.initialXRatio,this.yRatio=i.yRatio,this.invertedXRatio=i.invertedXRatio,this.invertedYRatio=i.invertedYRatio,this.baseLineY=i.baseLineY,this.baseLineInvertedY=i.baseLineInvertedY),this.yaxisIndex=0,this.seriesLen=0,this.pathArr=[];var r=new ot(this.ctx);this.lastActiveBarSerieIndex=r.getActiveConfigSeriesIndex(\"desc\",[\"bar\",\"column\"]);var s=r.getBarSeriesIndices(),n=new p(this.ctx);this.stackedSeriesTotals=n.getStackedSeriesTotals(this.w.config.series.map((function(t,e){return-1===s.indexOf(e)?e:-1})).filter((function(t){return-1!==t}))),this.barHelpers=new ai(this)}var e,i;return e=t,(i=[{key:\"draw\",value:function(t,e){var i=this.w,a=new g(this.ctx),s=new p(this.ctx,i);t=s.getLogSeries(t),this.series=t,this.yRatio=s.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t);var n=a.group({class:\"apexcharts-bar-series apexcharts-plot-series\"});i.config.dataLabels.enabled&&this.totalItems>this.barOptions.dataLabels.maxItems&&console.warn(\"WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.\");for(var o=0,l=0;o<t.length;o++,l++){var c,h,d,u,f=void 0,x=void 0,b=[],v=[],m=i.globals.comboCharts?e[o]:o,y=a.group({class:\"apexcharts-series\",rel:o+1,seriesName:r.escapeString(i.globals.seriesNames[m]),\"data:realIndex\":m});this.ctx.series.addCollapsedClassToSeries(y,m),t[o].length>0&&(this.visibleI=this.visibleI+1);var w=0,k=0;this.yRatio.length>1&&(this.yaxisIndex=m),this.isReversed=i.config.yaxis[this.yaxisIndex]&&i.config.yaxis[this.yaxisIndex].reversed;var A=this.barHelpers.initialPositions();x=A.y,w=A.barHeight,h=A.yDivision,u=A.zeroW,f=A.x,k=A.barWidth,c=A.xDivision,d=A.zeroH,this.horizontal||v.push(f+k/2);var S=a.group({class:\"apexcharts-datalabels\",\"data:realIndex\":m});i.globals.delayedElements.push({el:S.node}),S.node.classList.add(\"apexcharts-element-hidden\");var C=a.group({class:\"apexcharts-bar-goals-markers\",style:\"pointer-events: none\"}),P=a.group({class:\"apexcharts-bar-shadows\",style:\"pointer-events: none\"});i.globals.delayedElements.push({el:P.node}),P.node.classList.add(\"apexcharts-element-hidden\");for(var L=0;L<i.globals.dataPoints;L++){var O=this.barHelpers.getStrokeWidth(o,L,m),T=null,I={indexes:{i:o,j:L,realIndex:m,bc:l},x:f,y:x,strokeWidth:O,elSeries:y};this.isHorizontal?(T=this.drawBarPaths(si(si({},I),{},{barHeight:w,zeroW:u,yDivision:h})),k=this.series[o][L]/this.invertedYRatio):(T=this.drawColumnPaths(si(si({},I),{},{xDivision:c,barWidth:k,zeroH:d})),w=this.series[o][L]/this.yRatio[this.yaxisIndex]);var E=this.barHelpers.getPathFillColor(t,o,L,m);if(this.isFunnel&&this.barOptions.isFunnel3d&&this.pathArr.length&&L>0){var M=this.barHelpers.drawBarShadow({color:\"string\"==typeof E&&-1===(null==E?void 0:E.indexOf(\"url\"))?E:r.hexToRgba(i.globals.colors[o]),prevPaths:this.pathArr[this.pathArr.length-1],currPaths:T});M&&P.add(M)}this.pathArr.push(T);var X=this.barHelpers.drawGoalLine({barXPosition:T.barXPosition,barYPosition:T.barYPosition,goalX:T.goalX,goalY:T.goalY,barHeight:w,barWidth:k});X&&C.add(X),x=T.y,f=T.x,L>0&&v.push(f+k/2),b.push(x),this.renderSeries({realIndex:m,pathFill:E,j:L,i:o,pathFrom:T.pathFrom,pathTo:T.pathTo,strokeWidth:O,elSeries:y,x:f,y:x,series:t,barHeight:T.barHeight?T.barHeight:w,barWidth:T.barWidth?T.barWidth:k,elDataLabelsWrap:S,elGoalsMarkers:C,elBarShadows:P,visibleSeries:this.visibleI,type:\"bar\"})}i.globals.seriesXvalues[m]=v,i.globals.seriesYvalues[m]=b,n.add(y)}return n}},{key:\"renderSeries\",value:function(t){var e=t.realIndex,i=t.pathFill,a=t.lineFill,r=t.j,s=t.i,n=t.groupIndex,o=t.pathFrom,c=t.pathTo,h=t.strokeWidth,d=t.elSeries,u=t.x,f=t.y,p=t.y1,x=t.y2,b=t.series,v=t.barHeight,m=t.barWidth,y=t.barXPosition,w=t.barYPosition,k=t.elDataLabelsWrap,A=t.elGoalsMarkers,S=t.elBarShadows,C=t.visibleSeries,P=t.type,L=this.w,O=new g(this.ctx);a||(a=this.barOptions.distributed?L.globals.stroke.colors[r]:L.globals.stroke.colors[e]),L.config.series[s].data[r]&&L.config.series[s].data[r].strokeColor&&(a=L.config.series[s].data[r].strokeColor),this.isNullValue&&(i=\"none\");var T=r/L.config.chart.animations.animateGradually.delay*(L.config.chart.animations.speed/L.globals.dataPoints)/2.4,I=O.renderPaths({i:s,j:r,realIndex:e,pathFrom:o,pathTo:c,stroke:a,strokeWidth:h,strokeLineCap:L.config.stroke.lineCap,fill:i,animationDelay:T,initialSpeed:L.config.chart.animations.speed,dataChangeSpeed:L.config.chart.animations.dynamicAnimation.speed,className:\"apexcharts-\".concat(P,\"-area\")});I.attr(\"clip-path\",\"url(#gridRectMask\".concat(L.globals.cuid,\")\"));var E=L.config.forecastDataPoints;E.count>0&&r>=L.globals.dataPoints-E.count&&(I.node.setAttribute(\"stroke-dasharray\",E.dashArray),I.node.setAttribute(\"stroke-width\",E.strokeWidth),I.node.setAttribute(\"fill-opacity\",E.fillOpacity)),void 0!==p&&void 0!==x&&(I.attr(\"data-range-y1\",p),I.attr(\"data-range-y2\",x)),new l(this.ctx).setSelectionFilter(I,e,r),d.add(I);var M=new Qe(this).handleBarDataLabels({x:u,y:f,y1:p,y2:x,i:s,j:r,series:b,realIndex:e,groupIndex:n,barHeight:v,barWidth:m,barXPosition:y,barYPosition:w,renderedPath:I,visibleSeries:C});return null!==M.dataLabels&&k.add(M.dataLabels),M.totalDataLabels&&k.add(M.totalDataLabels),d.add(k),A&&d.add(A),S&&d.add(S),d}},{key:\"drawBarPaths\",value:function(t){var e,i=t.indexes,a=t.barHeight,r=t.strokeWidth,s=t.zeroW,n=t.x,o=t.y,l=t.yDivision,c=t.elSeries,h=this.w,d=i.i,u=i.j;if(h.globals.isXNumeric)e=(o=(h.globals.seriesX[d][u]-h.globals.minX)/this.invertedXRatio-a)+a*this.visibleI;else if(h.config.plotOptions.bar.hideZeroBarsWhenGrouped){var g=0,f=0;h.globals.seriesPercent.forEach((function(t,e){t[u]&&g++,e<d&&0===t[u]&&f++})),g>0&&(a=this.seriesLen*a/g),e=o+a*this.visibleI,e-=a*f}else e=o+a*this.visibleI;this.isFunnel&&(s-=(this.barHelpers.getXForValue(this.series[d][u],s)-s)/2),n=this.barHelpers.getXForValue(this.series[d][u],s);var p=this.barHelpers.getBarpaths({barYPosition:e,barHeight:a,x1:s,x2:n,strokeWidth:r,series:this.series,realIndex:i.realIndex,i:d,j:u,w:h});return h.globals.isXNumeric||(o+=l),this.barHelpers.barBackground({j:u,i:d,y1:e-a*this.visibleI,y2:a*this.seriesLen,elSeries:c}),{pathTo:p.pathTo,pathFrom:p.pathFrom,x1:s,x:n,y:o,goalX:this.barHelpers.getGoalValues(\"x\",s,null,d,u),barYPosition:e,barHeight:a}}},{key:\"drawColumnPaths\",value:function(t){var e,i=t.indexes,a=t.x,r=t.y,s=t.xDivision,n=t.barWidth,o=t.zeroH,l=t.strokeWidth,c=t.elSeries,h=this.w,d=i.realIndex,u=i.i,g=i.j,f=i.bc;if(h.globals.isXNumeric){var p=d;h.globals.seriesX[d].length||(p=h.globals.maxValsInArrayIndex),h.globals.seriesX[p][g]&&(a=(h.globals.seriesX[p][g]-h.globals.minX)/this.xRatio-n*this.seriesLen/2),e=a+n*this.visibleI}else if(h.config.plotOptions.bar.hideZeroBarsWhenGrouped){var x=0,b=0;h.globals.seriesPercent.forEach((function(t,e){t[g]&&x++,e<u&&0===t[g]&&b++})),x>0&&(n=this.seriesLen*n/x),e=a+n*this.visibleI,e-=n*b}else e=a+n*this.visibleI;r=this.barHelpers.getYForValue(this.series[u][g],o);var v=this.barHelpers.getColumnPaths({barXPosition:e,barWidth:n,y1:o,y2:r,strokeWidth:l,series:this.series,realIndex:i.realIndex,i:u,j:g,w:h});return h.globals.isXNumeric||(a+=s),this.barHelpers.barBackground({bc:f,j:g,i:u,x1:e-l/2-n*this.visibleI,x2:n*this.seriesLen+l/2,elSeries:c}),{pathTo:v.pathTo,pathFrom:v.pathFrom,x:a,y:r,goalY:this.barHelpers.getGoalValues(\"y\",null,o,u,g),barXPosition:e,barWidth:n}}},{key:\"getPreviousPath\",value:function(t,e){for(var i,a=this.w,r=0;r<a.globals.previousPaths.length;r++){var s=a.globals.previousPaths[r];s.paths&&s.paths.length>0&&parseInt(s.realIndex,10)===parseInt(t,10)&&void 0!==a.globals.previousPaths[r].paths[e]&&(i=a.globals.previousPaths[r].paths[e].d)}return i}}])&&oi(e.prototype,i),t}();function ci(t){return ci=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},ci(t)}function hi(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function di(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?hi(Object(i),!0).forEach((function(e){ui(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):hi(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function ui(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function gi(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}function fi(t,e){return fi=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},fi(t,e)}function pi(t){return pi=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},pi(t)}const xi=function(t){!function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&fi(t,e)}(o,t);var e,i,a,s,n=(a=o,s=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=pi(a);if(s){var i=pi(this).constructor;t=Reflect.construct(e,arguments,i)}else t=e.apply(this,arguments);return function(t,e){if(e&&(\"object\"===ci(e)||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}(this,t)});function o(){return function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,o),n.apply(this,arguments)}return e=o,(i=[{key:\"draw\",value:function(t,e){var i=this,a=this.w;this.graphics=new g(this.ctx),this.bar=new li(this.ctx,this.xyRatios);var s=new p(this.ctx,a);t=s.getLogSeries(t),this.yRatio=s.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t),\"100%\"===a.config.chart.stackType&&(t=a.globals.seriesPercent.slice()),this.series=t,this.barHelpers.initializeStackedPrevVars(this);for(var n=this.graphics.group({class:\"apexcharts-bar-series apexcharts-plot-series\"}),o=0,l=0,c=function(s,c){var h=void 0,d=void 0,u=void 0,g=void 0,f=-1;i.groupCtx=i,a.globals.seriesGroups.forEach((function(t,e){t.indexOf(a.config.series[s].name)>-1&&(f=e)})),-1!==f&&(i.groupCtx=i[a.globals.seriesGroups[f]]);var p=[],x=[],b=a.globals.comboCharts?e[s]:s;i.yRatio.length>1&&(i.yaxisIndex=b),i.isReversed=a.config.yaxis[i.yaxisIndex]&&a.config.yaxis[i.yaxisIndex].reversed;var v=i.graphics.group({class:\"apexcharts-series\",seriesName:r.escapeString(a.globals.seriesNames[b]),rel:s+1,\"data:realIndex\":b});i.ctx.series.addCollapsedClassToSeries(v,b);var m=i.graphics.group({class:\"apexcharts-datalabels\",\"data:realIndex\":b}),y=i.graphics.group({class:\"apexcharts-bar-goals-markers\",style:\"pointer-events: none\"}),w=0,k=0,A=i.initialPositions(o,l,h,d,u,g);l=A.y,w=A.barHeight,d=A.yDivision,g=A.zeroW,o=A.x,k=A.barWidth,h=A.xDivision,u=A.zeroH,i.barHelpers.initializeStackedXYVars(i),1===i.groupCtx.prevY.length&&i.groupCtx.prevY[0].every((function(t){return isNaN(t)}))&&(i.groupCtx.prevY[0]=i.groupCtx.prevY[0].map((function(t){return u})),i.groupCtx.prevYF[0]=i.groupCtx.prevYF[0].map((function(t){return 0})));for(var S=0;S<a.globals.dataPoints;S++){var C=i.barHelpers.getStrokeWidth(s,S,b),P={indexes:{i:s,j:S,realIndex:b,bc:c},strokeWidth:C,x:o,y:l,elSeries:v,groupIndex:f,seriesGroup:a.globals.seriesGroups[f]},L=null;i.isHorizontal?(L=i.drawStackedBarPaths(di(di({},P),{},{zeroW:g,barHeight:w,yDivision:d})),k=i.series[s][S]/i.invertedYRatio):(L=i.drawStackedColumnPaths(di(di({},P),{},{xDivision:h,barWidth:k,zeroH:u})),w=i.series[s][S]/i.yRatio[i.yaxisIndex]);var O=i.barHelpers.drawGoalLine({barXPosition:L.barXPosition,barYPosition:L.barYPosition,goalX:L.goalX,goalY:L.goalY,barHeight:w,barWidth:k});O&&y.add(O),l=L.y,o=L.x,p.push(o),x.push(l);var T=i.barHelpers.getPathFillColor(t,s,S,b);v=i.renderSeries({realIndex:b,pathFill:T,j:S,i:s,groupIndex:f,pathFrom:L.pathFrom,pathTo:L.pathTo,strokeWidth:C,elSeries:v,x:o,y:l,series:t,barHeight:w,barWidth:k,elDataLabelsWrap:m,elGoalsMarkers:y,type:\"bar\",visibleSeries:0})}a.globals.seriesXvalues[b]=p,a.globals.seriesYvalues[b]=x,i.groupCtx.prevY.push(i.groupCtx.yArrj),i.groupCtx.prevYF.push(i.groupCtx.yArrjF),i.groupCtx.prevYVal.push(i.groupCtx.yArrjVal),i.groupCtx.prevX.push(i.groupCtx.xArrj),i.groupCtx.prevXF.push(i.groupCtx.xArrjF),i.groupCtx.prevXVal.push(i.groupCtx.xArrjVal),n.add(v)},h=0,d=0;h<t.length;h++,d++)c(h,d);return n}},{key:\"initialPositions\",value:function(t,e,i,a,r,s){var n,o,l,c,h=this.w;return this.isHorizontal?(l=(l=a=h.globals.gridHeight/h.globals.dataPoints)*parseInt(h.config.plotOptions.bar.barHeight,10)/100,-1===String(h.config.plotOptions.bar.barHeight).indexOf(\"%\")&&(l=parseInt(h.config.plotOptions.bar.barHeight,10)),s=this.baseLineInvertedY+h.globals.padHorizontal+(this.isReversed?h.globals.gridWidth:0)-(this.isReversed?2*this.baseLineInvertedY:0),e=(a-l)/2):(c=i=h.globals.gridWidth/h.globals.dataPoints,c=h.globals.isXNumeric&&h.globals.dataPoints>1?(i=h.globals.minXDiff/this.xRatio)*parseInt(this.barOptions.columnWidth,10)/100:c*parseInt(h.config.plotOptions.bar.columnWidth,10)/100,-1===String(h.config.plotOptions.bar.columnWidth).indexOf(\"%\")&&(c=parseInt(h.config.plotOptions.bar.columnWidth,10)),r=h.globals.gridHeight-this.baseLineY[this.yaxisIndex]-(this.isReversed?h.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),t=h.globals.padHorizontal+(i-c)/2),{x:t,y:e,yDivision:a,xDivision:i,barHeight:null!==(n=h.globals.seriesGroups)&&void 0!==n&&n.length?l/h.globals.seriesGroups.length:l,barWidth:null!==(o=h.globals.seriesGroups)&&void 0!==o&&o.length?c/h.globals.seriesGroups.length:c,zeroH:r,zeroW:s}}},{key:\"drawStackedBarPaths\",value:function(t){for(var e,i=t.indexes,a=t.barHeight,r=t.strokeWidth,s=t.zeroW,n=t.x,o=t.y,l=t.groupIndex,c=t.seriesGroup,h=t.yDivision,d=t.elSeries,u=this.w,g=o+(-1!==l?l*a:0),f=i.i,p=i.j,x=0,b=0;b<this.groupCtx.prevXF.length;b++)x+=this.groupCtx.prevXF[b][p];var v=f;if(c&&(v=c.indexOf(u.config.series[f].name)),v>0){var m=s;this.groupCtx.prevXVal[v-1][p]<0?m=this.series[f][p]>=0?this.groupCtx.prevX[v-1][p]+x-2*(this.isReversed?x:0):this.groupCtx.prevX[v-1][p]:this.groupCtx.prevXVal[v-1][p]>=0&&(m=this.series[f][p]>=0?this.groupCtx.prevX[v-1][p]:this.groupCtx.prevX[v-1][p]-x+2*(this.isReversed?x:0)),e=m}else e=s;n=null===this.series[f][p]?e:e+this.series[f][p]/this.invertedYRatio-2*(this.isReversed?this.series[f][p]/this.invertedYRatio:0);var y=this.barHelpers.getBarpaths({barYPosition:g,barHeight:a,x1:e,x2:n,strokeWidth:r,series:this.series,realIndex:i.realIndex,seriesGroup:c,i:f,j:p,w:u});return this.barHelpers.barBackground({j:p,i:f,y1:g,y2:a,elSeries:d}),o+=h,{pathTo:y.pathTo,pathFrom:y.pathFrom,goalX:this.barHelpers.getGoalValues(\"x\",s,null,f,p),barYPosition:g,x:n,y:o}}},{key:\"drawStackedColumnPaths\",value:function(t){var e=t.indexes,i=t.x,a=t.y,r=t.xDivision,s=t.barWidth,n=t.zeroH,o=t.groupIndex,l=t.seriesGroup,c=t.elSeries,h=this.w,d=e.i,u=e.j,g=e.bc;if(h.globals.isXNumeric){var f=h.globals.seriesX[d][u];f||(f=0),i=(f-h.globals.minX)/this.xRatio-s/2,h.globals.seriesGroups.length&&(i=(f-h.globals.minX)/this.xRatio-s/2*h.globals.seriesGroups.length)}for(var p,x=i+(-1!==o?o*s:0),b=0,v=0;v<this.groupCtx.prevYF.length;v++)b+=isNaN(this.groupCtx.prevYF[v][u])?0:this.groupCtx.prevYF[v][u];var m=d;if(l&&(m=l.indexOf(h.config.series[d].name)),m>0&&!h.globals.isXNumeric||m>0&&h.globals.isXNumeric&&h.globals.seriesX[d-1][u]===h.globals.seriesX[d][u]){var y,w,k,A=Math.min(this.yRatio.length+1,d+1);if(void 0!==this.groupCtx.prevY[m-1]&&this.groupCtx.prevY[m-1].length)for(var S=1;S<A;S++){var C;if(!isNaN(null===(C=this.groupCtx.prevY[m-S])||void 0===C?void 0:C[u])){k=this.groupCtx.prevY[m-S][u];break}}for(var P=1;P<A;P++){var L,O;if((null===(L=this.groupCtx.prevYVal[m-P])||void 0===L?void 0:L[u])<0){w=this.series[d][u]>=0?k-b+2*(this.isReversed?b:0):k;break}if((null===(O=this.groupCtx.prevYVal[m-P])||void 0===O?void 0:O[u])>=0){w=this.series[d][u]>=0?k:k+b-2*(this.isReversed?b:0);break}}void 0===w&&(w=h.globals.gridHeight),p=null!==(y=this.groupCtx.prevYF[0])&&void 0!==y&&y.every((function(t){return 0===t}))&&this.groupCtx.prevYF.slice(1,m).every((function(t){return t.every((function(t){return isNaN(t)}))}))?n:w}else p=n;a=this.series[d][u]?p-this.series[d][u]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[d][u]/this.yRatio[this.yaxisIndex]:0):p;var T=this.barHelpers.getColumnPaths({barXPosition:x,barWidth:s,y1:p,y2:a,yRatio:this.yRatio[this.yaxisIndex],strokeWidth:this.strokeWidth,series:this.series,seriesGroup:l,realIndex:e.realIndex,i:d,j:u,w:h});return this.barHelpers.barBackground({bc:g,j:u,i:d,x1:x,x2:s,elSeries:c}),i+=r,{pathTo:T.pathTo,pathFrom:T.pathFrom,goalY:this.barHelpers.getGoalValues(\"y\",null,n,d,u),barXPosition:x,x:h.globals.isXNumeric?i-r:i,y:a}}}])&&gi(e.prototype,i),o}(li);function bi(t){return bi=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},bi(t)}function vi(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function mi(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?vi(Object(i),!0).forEach((function(e){yi(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):vi(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function yi(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function wi(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}function ki(t,e){return ki=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},ki(t,e)}function Ai(t){return Ai=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},Ai(t)}const Si=function(t){!function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&ki(t,e)}(o,t);var e,i,a,s,n=(a=o,s=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=Ai(a);if(s){var i=Ai(this).constructor;t=Reflect.construct(e,arguments,i)}else t=e.apply(this,arguments);return function(t,e){if(e&&(\"object\"===bi(e)||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}(this,t)});function o(){return function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,o),n.apply(this,arguments)}return e=o,(i=[{key:\"draw\",value:function(t,e,i){var a=this,s=this.w,n=new g(this.ctx),o=s.globals.comboCharts?e:s.config.chart.type,l=new K(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick,this.boxOptions=this.w.config.plotOptions.boxPlot,this.isHorizontal=s.config.plotOptions.bar.horizontal;var c=new p(this.ctx,s);t=c.getLogSeries(t),this.series=t,this.yRatio=c.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t);for(var h=n.group({class:\"apexcharts-\".concat(o,\"-series apexcharts-plot-series\")}),d=function(e){a.isBoxPlot=\"boxPlot\"===s.config.chart.type||\"boxPlot\"===s.config.series[e].type;var o,c,d,u,g,f,p=void 0,x=void 0,b=[],v=[],m=s.globals.comboCharts?i[e]:e,y=n.group({class:\"apexcharts-series\",seriesName:r.escapeString(s.globals.seriesNames[m]),rel:e+1,\"data:realIndex\":m});a.ctx.series.addCollapsedClassToSeries(y,m),t[e].length>0&&(a.visibleI=a.visibleI+1),a.yRatio.length>1&&(a.yaxisIndex=m);var w=a.barHelpers.initialPositions();x=w.y,g=w.barHeight,c=w.yDivision,u=w.zeroW,p=w.x,f=w.barWidth,o=w.xDivision,d=w.zeroH,v.push(p+f/2);for(var k=n.group({class:\"apexcharts-datalabels\",\"data:realIndex\":m}),A=function(i){var r=a.barHelpers.getStrokeWidth(e,i,m),n=null,h={indexes:{i:e,j:i,realIndex:m},x:p,y:x,strokeWidth:r,elSeries:y};n=a.isHorizontal?a.drawHorizontalBoxPaths(mi(mi({},h),{},{yDivision:c,barHeight:g,zeroW:u})):a.drawVerticalBoxPaths(mi(mi({},h),{},{xDivision:o,barWidth:f,zeroH:d})),x=n.y,p=n.x,i>0&&v.push(p+f/2),b.push(x),n.pathTo.forEach((function(o,c){var h=!a.isBoxPlot&&a.candlestickOptions.wick.useFillColor?n.color[c]:s.globals.stroke.colors[e],d=l.fillPath({seriesNumber:m,dataPointIndex:i,color:n.color[c],value:t[e][i]});a.renderSeries({realIndex:m,pathFill:d,lineFill:h,j:i,i:e,pathFrom:n.pathFrom,pathTo:o,strokeWidth:r,elSeries:y,x:p,y:x,series:t,barHeight:g,barWidth:f,elDataLabelsWrap:k,visibleSeries:a.visibleI,type:s.config.chart.type})}))},S=0;S<s.globals.dataPoints;S++)A(S);s.globals.seriesXvalues[m]=v,s.globals.seriesYvalues[m]=b,h.add(y)},u=0;u<t.length;u++)d(u);return h}},{key:\"drawVerticalBoxPaths\",value:function(t){var e=t.indexes,i=t.x,a=(t.y,t.xDivision),r=t.barWidth,s=t.zeroH,n=t.strokeWidth,o=this.w,l=new g(this.ctx),c=e.i,h=e.j,d=!0,u=o.config.plotOptions.candlestick.colors.upward,f=o.config.plotOptions.candlestick.colors.downward,p=\"\";this.isBoxPlot&&(p=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var x=this.yRatio[this.yaxisIndex],b=e.realIndex,v=this.getOHLCValue(b,h),m=s,y=s;v.o>v.c&&(d=!1);var w=Math.min(v.o,v.c),k=Math.max(v.o,v.c),A=v.m;o.globals.isXNumeric&&(i=(o.globals.seriesX[b][h]-o.globals.minX)/this.xRatio-r/2);var S=i+r*this.visibleI;void 0===this.series[c][h]||null===this.series[c][h]?(w=s,k=s):(w=s-w/x,k=s-k/x,m=s-v.h/x,y=s-v.l/x,A=s-v.m/x);var C=l.move(S,s),P=l.move(S+r/2,w);return o.globals.previousPaths.length>0&&(P=this.getPreviousPath(b,h,!0)),C=this.isBoxPlot?[l.move(S,w)+l.line(S+r/2,w)+l.line(S+r/2,m)+l.line(S+r/4,m)+l.line(S+r-r/4,m)+l.line(S+r/2,m)+l.line(S+r/2,w)+l.line(S+r,w)+l.line(S+r,A)+l.line(S,A)+l.line(S,w+n/2),l.move(S,A)+l.line(S+r,A)+l.line(S+r,k)+l.line(S+r/2,k)+l.line(S+r/2,y)+l.line(S+r-r/4,y)+l.line(S+r/4,y)+l.line(S+r/2,y)+l.line(S+r/2,k)+l.line(S,k)+l.line(S,A)+\"z\"]:[l.move(S,k)+l.line(S+r/2,k)+l.line(S+r/2,m)+l.line(S+r/2,k)+l.line(S+r,k)+l.line(S+r,w)+l.line(S+r/2,w)+l.line(S+r/2,y)+l.line(S+r/2,w)+l.line(S,w)+l.line(S,k-n/2)],P+=l.move(S,w),o.globals.isXNumeric||(i+=a),{pathTo:C,pathFrom:P,x:i,y:k,barXPosition:S,color:this.isBoxPlot?p:d?[u]:[f]}}},{key:\"drawHorizontalBoxPaths\",value:function(t){var e=t.indexes,i=(t.x,t.y),a=t.yDivision,r=t.barHeight,s=t.zeroW,n=t.strokeWidth,o=this.w,l=new g(this.ctx),c=e.i,h=e.j,d=this.boxOptions.colors.lower;this.isBoxPlot&&(d=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var u=this.invertedYRatio,f=e.realIndex,p=this.getOHLCValue(f,h),x=s,b=s,v=Math.min(p.o,p.c),m=Math.max(p.o,p.c),y=p.m;o.globals.isXNumeric&&(i=(o.globals.seriesX[f][h]-o.globals.minX)/this.invertedXRatio-r/2);var w=i+r*this.visibleI;void 0===this.series[c][h]||null===this.series[c][h]?(v=s,m=s):(v=s+v/u,m=s+m/u,x=s+p.h/u,b=s+p.l/u,y=s+p.m/u);var k=l.move(s,w),A=l.move(v,w+r/2);return o.globals.previousPaths.length>0&&(A=this.getPreviousPath(f,h,!0)),k=[l.move(v,w)+l.line(v,w+r/2)+l.line(x,w+r/2)+l.line(x,w+r/2-r/4)+l.line(x,w+r/2+r/4)+l.line(x,w+r/2)+l.line(v,w+r/2)+l.line(v,w+r)+l.line(y,w+r)+l.line(y,w)+l.line(v+n/2,w),l.move(y,w)+l.line(y,w+r)+l.line(m,w+r)+l.line(m,w+r/2)+l.line(b,w+r/2)+l.line(b,w+r-r/4)+l.line(b,w+r/4)+l.line(b,w+r/2)+l.line(m,w+r/2)+l.line(m,w)+l.line(y,w)+\"z\"],A+=l.move(v,w),o.globals.isXNumeric||(i+=a),{pathTo:k,pathFrom:A,x:m,y:i,barYPosition:w,color:d}}},{key:\"getOHLCValue\",value:function(t,e){var i=this.w;return{o:this.isBoxPlot?i.globals.seriesCandleH[t][e]:i.globals.seriesCandleO[t][e],h:this.isBoxPlot?i.globals.seriesCandleO[t][e]:i.globals.seriesCandleH[t][e],m:i.globals.seriesCandleM[t][e],l:this.isBoxPlot?i.globals.seriesCandleC[t][e]:i.globals.seriesCandleL[t][e],c:this.isBoxPlot?i.globals.seriesCandleL[t][e]:i.globals.seriesCandleC[t][e]}}}])&&wi(e.prototype,i),o}(li);function Ci(t){return function(t){if(Array.isArray(t))return Pi(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||function(t,e){if(t){if(\"string\"==typeof t)return Pi(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?Pi(t,e):void 0}}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function Pi(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}function Li(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Oi=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,(i=[{key:\"checkColorRange\",value:function(){var t=this.w,e=!1,i=t.config.plotOptions[t.config.chart.type];return i.colorScale.ranges.length>0&&i.colorScale.ranges.map((function(t,i){t.from<=0&&(e=!0)})),e}},{key:\"getShadeColor\",value:function(t,e,i,a){var s=this.w,n=1,o=s.config.plotOptions[t].shadeIntensity,l=this.determineColor(t,e,i);s.globals.hasNegs||a?n=s.config.plotOptions[t].reverseNegativeShade?l.percent<0?l.percent/100*(1.25*o):(1-l.percent/100)*(1.25*o):l.percent<=0?1-(1+l.percent/100)*o:(1-l.percent/100)*o:(n=1-l.percent/100,\"treemap\"===t&&(n=(1-l.percent/100)*(1.25*o)));var c=l.color,h=new r;return s.config.plotOptions[t].enableShades&&(c=\"dark\"===this.w.config.theme.mode?r.hexToRgba(h.shadeColor(-1*n,l.color),s.config.fill.opacity):r.hexToRgba(h.shadeColor(n,l.color),s.config.fill.opacity)),{color:c,colorProps:l}}},{key:\"determineColor\",value:function(t,e,i){var a=this.w,r=a.globals.series[e][i],s=a.config.plotOptions[t],n=s.colorScale.inverse?i:e;s.distributed&&\"treemap\"===a.config.chart.type&&(n=i);var o=a.globals.colors[n],l=null,c=Math.min.apply(Math,Ci(a.globals.series[e])),h=Math.max.apply(Math,Ci(a.globals.series[e]));s.distributed||\"heatmap\"!==t||(c=a.globals.minY,h=a.globals.maxY),void 0!==s.colorScale.min&&(c=s.colorScale.min<a.globals.minY?s.colorScale.min:a.globals.minY,h=s.colorScale.max>a.globals.maxY?s.colorScale.max:a.globals.maxY);var d=Math.abs(h)+Math.abs(c),u=100*r/(0===d?d-1e-6:d);return s.colorScale.ranges.length>0&&s.colorScale.ranges.map((function(t,e){if(r>=t.from&&r<=t.to){o=t.color,l=t.foreColor?t.foreColor:null,c=t.from,h=t.to;var i=Math.abs(h)+Math.abs(c);u=100*r/(0===i?i-1e-6:i)}})),{color:o,foreColor:l,percent:u}}},{key:\"calculateDataLabels\",value:function(t){var e=t.text,i=t.x,a=t.y,r=t.i,s=t.j,n=t.colorProps,o=t.fontSize,l=this.w.config.dataLabels,c=new g(this.ctx),h=new st(this.ctx),d=null;if(l.enabled){d=c.group({class:\"apexcharts-data-labels\"});var u=l.offsetX,f=l.offsetY,p=i+u,x=a+parseFloat(l.style.fontSize)/3+f;h.plotDataLabelsText({x:p,y:x,text:e,i:r,j:s,color:n.foreColor,parent:d,fontSize:o,dataLabelsConfig:l})}return d}},{key:\"addListeners\",value:function(t){var e=new g(this.ctx);t.node.addEventListener(\"mouseenter\",e.pathMouseEnter.bind(this,t)),t.node.addEventListener(\"mouseleave\",e.pathMouseLeave.bind(this,t)),t.node.addEventListener(\"mousedown\",e.pathMouseDown.bind(this,t))}}])&&Li(e.prototype,i),t}();function Ti(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Ii=function(){function t(e,i){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.xRatio=i.xRatio,this.yRatio=i.yRatio,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.helpers=new Oi(e),this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.show?this.w.config.stroke.width:0}var e,i;return e=t,(i=[{key:\"draw\",value:function(t){var e=this.w,i=new g(this.ctx),a=i.group({class:\"apexcharts-heatmap\"});a.attr(\"clip-path\",\"url(#gridRectMask\".concat(e.globals.cuid,\")\"));var s=e.globals.gridWidth/e.globals.dataPoints,n=e.globals.gridHeight/e.globals.series.length,o=0,c=!1;this.negRange=this.helpers.checkColorRange();var h=t.slice();e.config.yaxis[0].reversed&&(c=!0,h.reverse());for(var d=c?0:h.length-1;c?d<h.length:d>=0;c?d++:d--){var u=i.group({class:\"apexcharts-series apexcharts-heatmap-series\",seriesName:r.escapeString(e.globals.seriesNames[d]),rel:d+1,\"data:realIndex\":d});if(this.ctx.series.addCollapsedClassToSeries(u,d),e.config.chart.dropShadow.enabled){var f=e.config.chart.dropShadow;new l(this.ctx).dropShadow(u,f,d)}for(var p=0,x=e.config.plotOptions.heatmap.shadeIntensity,b=0;b<h[d].length;b++){var v=this.helpers.getShadeColor(e.config.chart.type,d,b,this.negRange),m=v.color,y=v.colorProps;\"image\"===e.config.fill.type&&(m=new K(this.ctx).fillPath({seriesNumber:d,dataPointIndex:b,opacity:e.globals.hasNegs?y.percent<0?1-(1+y.percent/100):x+y.percent/100:y.percent/100,patternID:r.randomId(),width:e.config.fill.image.width?e.config.fill.image.width:s,height:e.config.fill.image.height?e.config.fill.image.height:n}));var w=this.rectRadius,k=i.drawRect(p,o,s,n,w);if(k.attr({cx:p,cy:o}),k.node.classList.add(\"apexcharts-heatmap-rect\"),u.add(k),k.attr({fill:m,i:d,index:d,j:b,val:h[d][b],\"stroke-width\":this.strokeWidth,stroke:e.config.plotOptions.heatmap.useFillColorAsStroke?m:e.globals.stroke.colors[0],color:m}),this.helpers.addListeners(k),e.config.chart.animations.enabled&&!e.globals.dataChanged){var A=1;e.globals.resized||(A=e.config.chart.animations.speed),this.animateHeatMap(k,p,o,s,n,A)}if(e.globals.dataChanged){var S=1;if(this.dynamicAnim.enabled&&e.globals.shouldAnimate){S=this.dynamicAnim.speed;var C=e.globals.previousPaths[d]&&e.globals.previousPaths[d][b]&&e.globals.previousPaths[d][b].color;C||(C=\"rgba(255, 255, 255, 0)\"),this.animateHeatColor(k,r.isColorHex(C)?C:r.rgb2hex(C),r.isColorHex(m)?m:r.rgb2hex(m),S)}}var P=(0,e.config.dataLabels.formatter)(e.globals.series[d][b],{value:e.globals.series[d][b],seriesIndex:d,dataPointIndex:b,w:e}),L=this.helpers.calculateDataLabels({text:P,x:p+s/2,y:o+n/2,i:d,j:b,colorProps:y,series:h});null!==L&&u.add(L),p+=s}o+=n,a.add(u)}var O=e.globals.yAxisScale[0].result.slice();e.config.yaxis[0].reversed?O.unshift(\"\"):O.push(\"\"),e.globals.yAxisScale[0].result=O;var T=e.globals.gridHeight/e.globals.series.length;return e.config.yaxis[0].labels.offsetY=-T/2,a}},{key:\"animateHeatMap\",value:function(t,e,i,a,r,s){var o=new n(this.ctx);o.animateRect(t,{x:e+a/2,y:i+r/2,width:0,height:0},{x:e,y:i,width:a,height:r},s,(function(){o.animationCompleted(t)}))}},{key:\"animateHeatColor\",value:function(t,e,i,a){t.attr({fill:e}).animate(a).attr({fill:i})}}])&&Ti(e.prototype,i),t}();function Ei(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Mi=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,(i=[{key:\"drawYAxisTexts\",value:function(t,e,i,a){var r=this.w,s=r.config.yaxis[0],n=r.globals.yLabelFormatters[0];return new g(this.ctx).drawText({x:t+s.labels.offsetX,y:e+s.labels.offsetY,text:n(a,i),textAnchor:\"middle\",fontSize:s.labels.style.fontSize,fontFamily:s.labels.style.fontFamily,foreColor:Array.isArray(s.labels.style.colors)?s.labels.style.colors[i]:s.labels.style.colors})}}])&&Ei(e.prototype,i),t}();function Xi(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const zi=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animBeginArr=[0],this.animDur=0,this.donutDataLabels=this.w.config.plotOptions.pie.donut.labels,this.lineColorArr=void 0!==i.globals.stroke.colors?i.globals.stroke.colors:i.globals.colors,this.defaultSize=Math.min(i.globals.gridWidth,i.globals.gridHeight),this.centerY=this.defaultSize/2,this.centerX=i.globals.gridWidth/2,\"radialBar\"===i.config.chart.type?this.fullAngle=360:this.fullAngle=Math.abs(i.config.plotOptions.pie.endAngle-i.config.plotOptions.pie.startAngle),this.initialAngle=i.config.plotOptions.pie.startAngle%this.fullAngle,i.globals.radialSize=this.defaultSize/2.05-i.config.stroke.width-(i.config.chart.sparkline.enabled?0:i.config.chart.dropShadow.blur),this.donutSize=i.globals.radialSize*parseInt(i.config.plotOptions.pie.donut.size,10)/100,this.maxY=0,this.sliceLabels=[],this.sliceSizes=[],this.prevSectorAngleArr=[]}var e,i;return e=t,(i=[{key:\"draw\",value:function(t){var e=this,i=this.w,a=new g(this.ctx);if(this.ret=a.group({class:\"apexcharts-pie\"}),i.globals.noData)return this.ret;for(var s=0,n=0;n<t.length;n++)s+=r.negToZero(t[n]);var o=[],l=a.group();0===s&&(s=1e-5),t.forEach((function(t){e.maxY=Math.max(e.maxY,t)})),i.config.yaxis[0].max&&(this.maxY=i.config.yaxis[0].max),\"back\"===i.config.grid.position&&\"polarArea\"===this.chartType&&this.drawPolarElements(this.ret);for(var c=0;c<t.length;c++){var h=this.fullAngle*r.negToZero(t[c])/s;o.push(h),\"polarArea\"===this.chartType?(o[c]=this.fullAngle/t.length,this.sliceSizes.push(i.globals.radialSize*t[c]/this.maxY)):this.sliceSizes.push(i.globals.radialSize)}if(i.globals.dataChanged){for(var d,u=0,f=0;f<i.globals.previousPaths.length;f++)u+=r.negToZero(i.globals.previousPaths[f]);for(var p=0;p<i.globals.previousPaths.length;p++)d=this.fullAngle*r.negToZero(i.globals.previousPaths[p])/u,this.prevSectorAngleArr.push(d)}this.donutSize<0&&(this.donutSize=0);var x=i.config.plotOptions.pie.customScale,b=i.globals.gridWidth/2,v=i.globals.gridHeight/2,m=b-i.globals.gridWidth/2*x,y=v-i.globals.gridHeight/2*x;if(\"donut\"===this.chartType){var w=a.drawCircle(this.donutSize);w.attr({cx:this.centerX,cy:this.centerY,fill:i.config.plotOptions.pie.donut.background?i.config.plotOptions.pie.donut.background:\"transparent\"}),l.add(w)}var k=this.drawArcs(o,t);if(this.sliceLabels.forEach((function(t){k.add(t)})),l.attr({transform:\"translate(\".concat(m,\", \").concat(y,\") scale(\").concat(x,\")\")}),l.add(k),this.ret.add(l),this.donutDataLabels.show){var A=this.renderInnerDataLabels(this.donutDataLabels,{hollowSize:this.donutSize,centerX:this.centerX,centerY:this.centerY,opacity:this.donutDataLabels.show,translateX:m,translateY:y});this.ret.add(A)}return\"front\"===i.config.grid.position&&\"polarArea\"===this.chartType&&this.drawPolarElements(this.ret),this.ret}},{key:\"drawArcs\",value:function(t,e){var i=this.w,a=new l(this.ctx),s=new g(this.ctx),n=new K(this.ctx),o=s.group({class:\"apexcharts-slices\"}),c=this.initialAngle,h=this.initialAngle,d=this.initialAngle,u=this.initialAngle;this.strokeWidth=i.config.stroke.show?i.config.stroke.width:0;for(var f=0;f<t.length;f++){var p=s.group({class:\"apexcharts-series apexcharts-pie-series\",seriesName:r.escapeString(i.globals.seriesNames[f]),rel:f+1,\"data:realIndex\":f});o.add(p),h=u,d=(c=d)+t[f],u=h+this.prevSectorAngleArr[f];var x=d<c?this.fullAngle+d-c:d-c,b=n.fillPath({seriesNumber:f,size:this.sliceSizes[f],value:e[f]}),v=this.getChangedPath(h,u),m=s.drawPath({d:v,stroke:Array.isArray(this.lineColorArr)?this.lineColorArr[f]:this.lineColorArr,strokeWidth:0,fill:b,fillOpacity:i.config.fill.opacity,classes:\"apexcharts-pie-area apexcharts-\".concat(this.chartType.toLowerCase(),\"-slice-\").concat(f)});if(m.attr({index:0,j:f}),a.setSelectionFilter(m,0,f),i.config.chart.dropShadow.enabled){var y=i.config.chart.dropShadow;a.dropShadow(m,y,f)}this.addListeners(m,this.donutDataLabels),g.setAttrs(m.node,{\"data:angle\":x,\"data:startAngle\":c,\"data:strokeWidth\":this.strokeWidth,\"data:value\":e[f]});var w={x:0,y:0};\"pie\"===this.chartType||\"polarArea\"===this.chartType?w=r.polarToCartesian(this.centerX,this.centerY,i.globals.radialSize/1.25+i.config.plotOptions.pie.dataLabels.offset,(c+x/2)%this.fullAngle):\"donut\"===this.chartType&&(w=r.polarToCartesian(this.centerX,this.centerY,(i.globals.radialSize+this.donutSize)/2+i.config.plotOptions.pie.dataLabels.offset,(c+x/2)%this.fullAngle)),p.add(m);var k=0;if(!this.initialAnim||i.globals.resized||i.globals.dataChanged?this.animBeginArr.push(0):(0==(k=x/this.fullAngle*i.config.chart.animations.speed)&&(k=1),this.animDur=k+this.animDur,this.animBeginArr.push(this.animDur)),this.dynamicAnim&&i.globals.dataChanged?this.animatePaths(m,{size:this.sliceSizes[f],endAngle:d,startAngle:c,prevStartAngle:h,prevEndAngle:u,animateStartingPos:!0,i:f,animBeginArr:this.animBeginArr,shouldSetPrevPaths:!0,dur:i.config.chart.animations.dynamicAnimation.speed}):this.animatePaths(m,{size:this.sliceSizes[f],endAngle:d,startAngle:c,i:f,totalItems:t.length-1,animBeginArr:this.animBeginArr,dur:k}),i.config.plotOptions.pie.expandOnClick&&\"polarArea\"!==this.chartType&&m.click(this.pieClicked.bind(this,f)),void 0!==i.globals.selectedDataPoints[0]&&i.globals.selectedDataPoints[0].indexOf(f)>-1&&this.pieClicked(f),i.config.dataLabels.enabled){var A=w.x,S=w.y,C=100*x/this.fullAngle+\"%\";if(0!==x&&i.config.plotOptions.pie.dataLabels.minAngleToShowLabel<t[f]){var P=i.config.dataLabels.formatter;void 0!==P&&(C=P(i.globals.seriesPercent[f][0],{seriesIndex:f,w:i}));var L=i.globals.dataLabels.style.colors[f],O=s.group({class:\"apexcharts-datalabels\"}),T=s.drawText({x:A,y:S,text:C,textAnchor:\"middle\",fontSize:i.config.dataLabels.style.fontSize,fontFamily:i.config.dataLabels.style.fontFamily,fontWeight:i.config.dataLabels.style.fontWeight,foreColor:L});if(O.add(T),i.config.dataLabels.dropShadow.enabled){var I=i.config.dataLabels.dropShadow;a.dropShadow(T,I)}T.node.classList.add(\"apexcharts-pie-label\"),i.config.chart.animations.animate&&!1===i.globals.resized&&(T.node.classList.add(\"apexcharts-pie-label-delay\"),T.node.style.animationDelay=i.config.chart.animations.speed/940+\"s\"),this.sliceLabels.push(O)}}}return o}},{key:\"addListeners\",value:function(t,e){var i=new g(this.ctx);t.node.addEventListener(\"mouseenter\",i.pathMouseEnter.bind(this,t)),t.node.addEventListener(\"mouseleave\",i.pathMouseLeave.bind(this,t)),t.node.addEventListener(\"mouseleave\",this.revertDataLabelsInner.bind(this,t.node,e)),t.node.addEventListener(\"mousedown\",i.pathMouseDown.bind(this,t)),this.donutDataLabels.total.showAlways||(t.node.addEventListener(\"mouseenter\",this.printDataLabelsInner.bind(this,t.node,e)),t.node.addEventListener(\"mousedown\",this.printDataLabelsInner.bind(this,t.node,e)))}},{key:\"animatePaths\",value:function(t,e){var i=this.w,a=e.endAngle<e.startAngle?this.fullAngle+e.endAngle-e.startAngle:e.endAngle-e.startAngle,r=a,s=e.startAngle,n=e.startAngle;void 0!==e.prevStartAngle&&void 0!==e.prevEndAngle&&(s=e.prevEndAngle,r=e.prevEndAngle<e.prevStartAngle?this.fullAngle+e.prevEndAngle-e.prevStartAngle:e.prevEndAngle-e.prevStartAngle),e.i===i.config.series.length-1&&(a+n>this.fullAngle?e.endAngle=e.endAngle-(a+n):a+n<this.fullAngle&&(e.endAngle=e.endAngle+(this.fullAngle-(a+n)))),a===this.fullAngle&&(a=this.fullAngle-.01),this.animateArc(t,s,n,a,r,e)}},{key:\"animateArc\",value:function(t,e,i,a,r,s){var o,l=this,c=this.w,h=new n(this.ctx),d=s.size;(isNaN(e)||isNaN(r))&&(e=i,r=a,s.dur=0);var u=a,g=i,f=e<i?this.fullAngle+e-i:e-i;c.globals.dataChanged&&s.shouldSetPrevPaths&&s.prevEndAngle&&(o=l.getPiePath({me:l,startAngle:s.prevStartAngle,angle:s.prevEndAngle<s.prevStartAngle?this.fullAngle+s.prevEndAngle-s.prevStartAngle:s.prevEndAngle-s.prevStartAngle,size:d}),t.attr({d:o})),0!==s.dur?t.animate(s.dur,c.globals.easing,s.animBeginArr[s.i]).afterAll((function(){\"pie\"!==l.chartType&&\"donut\"!==l.chartType&&\"polarArea\"!==l.chartType||this.animate(c.config.chart.animations.dynamicAnimation.speed).attr({\"stroke-width\":l.strokeWidth}),s.i===c.config.series.length-1&&h.animationCompleted(t)})).during((function(n){u=f+(a-f)*n,s.animateStartingPos&&(u=r+(a-r)*n,g=e-r+(i-(e-r))*n),o=l.getPiePath({me:l,startAngle:g,angle:u,size:d}),t.node.setAttribute(\"data:pathOrig\",o),t.attr({d:o})})):(o=l.getPiePath({me:l,startAngle:g,angle:a,size:d}),s.isTrack||(c.globals.animationEnded=!0),t.node.setAttribute(\"data:pathOrig\",o),t.attr({d:o,\"stroke-width\":l.strokeWidth}))}},{key:\"pieClicked\",value:function(t){var e,i=this.w,a=this,r=a.sliceSizes[t]+(i.config.plotOptions.pie.expandOnClick?4:0),s=i.globals.dom.Paper.select(\".apexcharts-\".concat(a.chartType.toLowerCase(),\"-slice-\").concat(t)).members[0];if(\"true\"!==s.attr(\"data:pieClicked\")){var n=i.globals.dom.baseEl.getElementsByClassName(\"apexcharts-pie-area\");Array.prototype.forEach.call(n,(function(t){t.setAttribute(\"data:pieClicked\",\"false\");var e=t.getAttribute(\"data:pathOrig\");e&&t.setAttribute(\"d\",e)})),s.attr(\"data:pieClicked\",\"true\");var o=parseInt(s.attr(\"data:startAngle\"),10),l=parseInt(s.attr(\"data:angle\"),10);e=a.getPiePath({me:a,startAngle:o,angle:l,size:r}),360!==l&&s.plot(e)}else{s.attr({\"data:pieClicked\":\"false\"}),this.revertDataLabelsInner(s.node,this.donutDataLabels);var c=s.attr(\"data:pathOrig\");s.attr({d:c})}}},{key:\"getChangedPath\",value:function(t,e){var i=\"\";return this.dynamicAnim&&this.w.globals.dataChanged&&(i=this.getPiePath({me:this,startAngle:t,angle:e-t,size:this.size})),i}},{key:\"getPiePath\",value:function(t){var e=t.me,i=t.startAngle,a=t.angle,s=t.size,n=i,o=Math.PI*(n-90)/180,l=a+i;Math.ceil(l)>=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle&&(l=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle-.01),Math.ceil(l)>this.fullAngle&&(l-=this.fullAngle);var c=Math.PI*(l-90)/180,h=e.centerX+s*Math.cos(o),d=e.centerY+s*Math.sin(o),u=e.centerX+s*Math.cos(c),g=e.centerY+s*Math.sin(c),f=r.polarToCartesian(e.centerX,e.centerY,e.donutSize,l),p=r.polarToCartesian(e.centerX,e.centerY,e.donutSize,n),x=a>180?1:0,b=[\"M\",h,d,\"A\",s,s,0,x,1,u,g];return\"donut\"===e.chartType?[].concat(b,[\"L\",f.x,f.y,\"A\",e.donutSize,e.donutSize,0,x,0,p.x,p.y,\"L\",h,d,\"z\"]).join(\" \"):\"pie\"===e.chartType||\"polarArea\"===e.chartType?[].concat(b,[\"L\",e.centerX,e.centerY,\"L\",h,d]).join(\" \"):[].concat(b).join(\" \")}},{key:\"drawPolarElements\",value:function(t){var e=this.w,i=new kt(this.ctx),a=new g(this.ctx),r=new Mi(this.ctx),s=a.group(),n=a.group(),o=i.niceScale(0,Math.ceil(this.maxY),e.config.yaxis[0].tickAmount,0,!0),l=o.result.reverse(),c=o.result.length;this.maxY=o.niceMax;for(var h=e.globals.radialSize,d=h/(c-1),u=0;u<c-1;u++){var f=a.drawCircle(h);if(f.attr({cx:this.centerX,cy:this.centerY,fill:\"none\",\"stroke-width\":e.config.plotOptions.polarArea.rings.strokeWidth,stroke:e.config.plotOptions.polarArea.rings.strokeColor}),e.config.yaxis[0].show){var p=r.drawYAxisTexts(this.centerX,this.centerY-h+parseInt(e.config.yaxis[0].labels.style.fontSize,10)/2,u,l[u]);n.add(p)}s.add(f),h-=d}this.drawSpokes(t),t.add(s),t.add(n)}},{key:\"renderInnerDataLabels\",value:function(t,e){var i=this.w,a=new g(this.ctx),r=a.group({class:\"apexcharts-datalabels-group\",transform:\"translate(\".concat(e.translateX?e.translateX:0,\", \").concat(e.translateY?e.translateY:0,\") scale(\").concat(i.config.plotOptions.pie.customScale,\")\")}),s=t.total.show;r.node.style.opacity=e.opacity;var n,o,l=e.centerX,c=e.centerY;n=void 0===t.name.color?i.globals.colors[0]:t.name.color;var h=t.name.fontSize,d=t.name.fontFamily,u=t.name.fontWeight;o=void 0===t.value.color?i.config.chart.foreColor:t.value.color;var f=t.value.formatter,p=\"\",x=\"\";if(s?(n=t.total.color,h=t.total.fontSize,d=t.total.fontFamily,u=t.total.fontWeight,x=t.total.label,p=t.total.formatter(i)):1===i.globals.series.length&&(p=f(i.globals.series[0],i),x=i.globals.seriesNames[0]),x&&(x=t.name.formatter(x,t.total.show,i)),t.name.show){var b=a.drawText({x:l,y:c+parseFloat(t.name.offsetY),text:x,textAnchor:\"middle\",foreColor:n,fontSize:h,fontWeight:u,fontFamily:d});b.node.classList.add(\"apexcharts-datalabel-label\"),r.add(b)}if(t.value.show){var v=t.name.show?parseFloat(t.value.offsetY)+16:t.value.offsetY,m=a.drawText({x:l,y:c+v,text:p,textAnchor:\"middle\",foreColor:o,fontWeight:t.value.fontWeight,fontSize:t.value.fontSize,fontFamily:t.value.fontFamily});m.node.classList.add(\"apexcharts-datalabel-value\"),r.add(m)}return r}},{key:\"printInnerLabels\",value:function(t,e,i,a){var r,s=this.w;a?r=void 0===t.name.color?s.globals.colors[parseInt(a.parentNode.getAttribute(\"rel\"),10)-1]:t.name.color:s.globals.series.length>1&&t.total.show&&(r=t.total.color);var n=s.globals.dom.baseEl.querySelector(\".apexcharts-datalabel-label\"),o=s.globals.dom.baseEl.querySelector(\".apexcharts-datalabel-value\");i=(0,t.value.formatter)(i,s),a||\"function\"!=typeof t.total.formatter||(i=t.total.formatter(s));var l=e===t.total.label;e=t.name.formatter(e,l,s),null!==n&&(n.textContent=e),null!==o&&(o.textContent=i),null!==n&&(n.style.fill=r)}},{key:\"printDataLabelsInner\",value:function(t,e){var i=this.w,a=t.getAttribute(\"data:value\"),r=i.globals.seriesNames[parseInt(t.parentNode.getAttribute(\"rel\"),10)-1];i.globals.series.length>1&&this.printInnerLabels(e,r,a,t);var s=i.globals.dom.baseEl.querySelector(\".apexcharts-datalabels-group\");null!==s&&(s.style.opacity=1)}},{key:\"drawSpokes\",value:function(t){var e=this,i=this.w,a=new g(this.ctx),s=i.config.plotOptions.polarArea.spokes;if(0!==s.strokeWidth){for(var n=[],o=360/i.globals.series.length,l=0;l<i.globals.series.length;l++)n.push(r.polarToCartesian(this.centerX,this.centerY,i.globals.radialSize,i.config.plotOptions.pie.startAngle+o*l));n.forEach((function(i,r){var n=a.drawLine(i.x,i.y,e.centerX,e.centerY,Array.isArray(s.connectorColors)?s.connectorColors[r]:s.connectorColors);t.add(n)}))}}},{key:\"revertDataLabelsInner\",value:function(t,e,i){var a=this,r=this.w,s=r.globals.dom.baseEl.querySelector(\".apexcharts-datalabels-group\"),n=!1,o=r.globals.dom.baseEl.getElementsByClassName(\"apexcharts-pie-area\"),l=function(t){var i=t.makeSliceOut,r=t.printLabel;Array.prototype.forEach.call(o,(function(t){\"true\"===t.getAttribute(\"data:pieClicked\")&&(i&&(n=!0),r&&a.printDataLabelsInner(t,e))}))};if(l({makeSliceOut:!0,printLabel:!1}),e.total.show&&r.globals.series.length>1)n&&!e.total.showAlways?l({makeSliceOut:!1,printLabel:!0}):this.printInnerLabels(e,e.total.label,e.total.formatter(r));else if(l({makeSliceOut:!1,printLabel:!0}),!n)if(r.globals.selectedDataPoints.length&&r.globals.series.length>1)if(r.globals.selectedDataPoints[0].length>0){var c=r.globals.selectedDataPoints[0],h=r.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(this.chartType.toLowerCase(),\"-slice-\").concat(c));this.printDataLabelsInner(h,e)}else s&&r.globals.selectedDataPoints.length&&0===r.globals.selectedDataPoints[0].length&&(s.style.opacity=0);else s&&r.globals.series.length>1&&(s.style.opacity=0)}}])&&Xi(e.prototype,i),t}();function Yi(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function Ri(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?Yi(Object(i),!0).forEach((function(e){Di(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):Yi(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function Di(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function Fi(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const Hi=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animDur=0;var i=this.w;this.graphics=new g(this.ctx),this.lineColorArr=void 0!==i.globals.stroke.colors?i.globals.stroke.colors:i.globals.colors,this.defaultSize=i.globals.svgHeight<i.globals.svgWidth?i.globals.gridHeight+1.5*i.globals.goldenPadding:i.globals.gridWidth,this.isLog=i.config.yaxis[0].logarithmic,this.coreUtils=new p(this.ctx),this.maxValue=this.isLog?this.coreUtils.getLogVal(i.globals.maxY,0):i.globals.maxY,this.minValue=this.isLog?this.coreUtils.getLogVal(this.w.globals.minY,0):i.globals.minY,this.polygons=i.config.plotOptions.radar.polygons,this.strokeWidth=i.config.stroke.show?i.config.stroke.width:0,this.size=this.defaultSize/2.1-this.strokeWidth-i.config.chart.dropShadow.blur,i.config.xaxis.labels.show&&(this.size=this.size-i.globals.xAxisLabelsWidth/1.75),void 0!==i.config.plotOptions.radar.size&&(this.size=i.config.plotOptions.radar.size),this.dataRadiusOfPercent=[],this.dataRadius=[],this.angleArr=[],this.yaxisLabelsTextsPos=[]}var e,i;return e=t,i=[{key:\"draw\",value:function(t){var e=this,i=this.w,a=new K(this.ctx),s=[],n=new st(this.ctx);t.length&&(this.dataPointsLen=t[i.globals.maxValsInArrayIndex].length),this.disAngle=2*Math.PI/this.dataPointsLen;var o=i.globals.gridWidth/2,c=i.globals.gridHeight/2,h=o+i.config.plotOptions.radar.offsetX,d=c+i.config.plotOptions.radar.offsetY,u=this.graphics.group({class:\"apexcharts-radar-series apexcharts-plot-series\",transform:\"translate(\".concat(h||0,\", \").concat(d||0,\")\")}),g=[],f=null,p=null;if(this.yaxisLabels=this.graphics.group({class:\"apexcharts-yaxis\"}),t.forEach((function(t,o){var c=t.length===i.globals.dataPoints,h=e.graphics.group().attr({class:\"apexcharts-series\",\"data:longestSeries\":c,seriesName:r.escapeString(i.globals.seriesNames[o]),rel:o+1,\"data:realIndex\":o});e.dataRadiusOfPercent[o]=[],e.dataRadius[o]=[],e.angleArr[o]=[],t.forEach((function(t,i){var a=Math.abs(e.maxValue-e.minValue);t+=Math.abs(e.minValue),e.isLog&&(t=e.coreUtils.getLogVal(t,0)),e.dataRadiusOfPercent[o][i]=t/a,e.dataRadius[o][i]=e.dataRadiusOfPercent[o][i]*e.size,e.angleArr[o][i]=i*e.disAngle})),g=e.getDataPointsPos(e.dataRadius[o],e.angleArr[o]);var d=e.createPaths(g,{x:0,y:0});f=e.graphics.group({class:\"apexcharts-series-markers-wrap apexcharts-element-hidden\"}),p=e.graphics.group({class:\"apexcharts-datalabels\",\"data:realIndex\":o}),i.globals.delayedElements.push({el:f.node,index:o});var u={i:o,realIndex:o,animationDelay:o,initialSpeed:i.config.chart.animations.speed,dataChangeSpeed:i.config.chart.animations.dynamicAnimation.speed,className:\"apexcharts-radar\",shouldClipToGrid:!1,bindEventsOnPaths:!1,stroke:i.globals.stroke.colors[o],strokeLineCap:i.config.stroke.lineCap},x=null;i.globals.previousPaths.length>0&&(x=e.getPreviousPath(o));for(var b=0;b<d.linePathsTo.length;b++){var v=e.graphics.renderPaths(Ri(Ri({},u),{},{pathFrom:null===x?d.linePathsFrom[b]:x,pathTo:d.linePathsTo[b],strokeWidth:Array.isArray(e.strokeWidth)?e.strokeWidth[o]:e.strokeWidth,fill:\"none\",drawShadow:!1}));h.add(v);var m=a.fillPath({seriesNumber:o}),y=e.graphics.renderPaths(Ri(Ri({},u),{},{pathFrom:null===x?d.areaPathsFrom[b]:x,pathTo:d.areaPathsTo[b],strokeWidth:0,fill:m,drawShadow:!1}));if(i.config.chart.dropShadow.enabled){var w=new l(e.ctx),k=i.config.chart.dropShadow;w.dropShadow(y,Object.assign({},k,{noUserSpaceOnUse:!0}),o)}h.add(y)}t.forEach((function(t,a){var r=new et(e.ctx).getMarkerConfig({cssClass:\"apexcharts-marker\",seriesIndex:o,dataPointIndex:a}),s=e.graphics.drawMarker(g[a].x,g[a].y,r);s.attr(\"rel\",a),s.attr(\"j\",a),s.attr(\"index\",o),s.node.setAttribute(\"default-marker-size\",r.pSize);var l=e.graphics.group({class:\"apexcharts-series-markers\"});l&&l.add(s),f.add(l),h.add(f);var c=i.config.dataLabels;if(c.enabled){var d=c.formatter(i.globals.series[o][a],{seriesIndex:o,dataPointIndex:a,w:i});n.plotDataLabelsText({x:g[a].x,y:g[a].y,text:d,textAnchor:\"middle\",i:o,j:o,parent:p,offsetCorrection:!1,dataLabelsConfig:Ri({},c)})}h.add(p)})),s.push(h)})),this.drawPolygons({parent:u}),i.config.xaxis.labels.show){var x=this.drawXAxisTexts();u.add(x)}return s.forEach((function(t){u.add(t)})),u.add(this.yaxisLabels),u}},{key:\"drawPolygons\",value:function(t){for(var e=this,i=this.w,a=t.parent,s=new Mi(this.ctx),n=i.globals.yAxisScale[0].result.reverse(),o=n.length,l=[],c=this.size/(o-1),h=0;h<o;h++)l[h]=c*h;l.reverse();var d=[],u=[];l.forEach((function(t,i){var a=r.getPolygonPos(t,e.dataPointsLen),s=\"\";a.forEach((function(t,a){if(0===i){var r=e.graphics.drawLine(t.x,t.y,0,0,Array.isArray(e.polygons.connectorColors)?e.polygons.connectorColors[a]:e.polygons.connectorColors);u.push(r)}0===a&&e.yaxisLabelsTextsPos.push({x:t.x,y:t.y}),s+=t.x+\",\"+t.y+\" \"})),d.push(s)})),d.forEach((function(t,r){var s=e.polygons.strokeColors,n=e.polygons.strokeWidth,o=e.graphics.drawPolygon(t,Array.isArray(s)?s[r]:s,Array.isArray(n)?n[r]:n,i.globals.radarPolygons.fill.colors[r]);a.add(o)})),u.forEach((function(t){a.add(t)})),i.config.yaxis[0].show&&this.yaxisLabelsTextsPos.forEach((function(t,i){var a=s.drawYAxisTexts(t.x,t.y,i,n[i]);e.yaxisLabels.add(a)}))}},{key:\"drawXAxisTexts\",value:function(){var t=this,e=this.w,i=e.config.xaxis.labels,a=this.graphics.group({class:\"apexcharts-xaxis\"}),s=r.getPolygonPos(this.size,this.dataPointsLen);return e.globals.labels.forEach((function(r,n){var o=e.config.xaxis.labels.formatter,l=new st(t.ctx);if(s[n]){var c=t.getTextPos(s[n],t.size),h=o(r,{seriesIndex:-1,dataPointIndex:n,w:e});l.plotDataLabelsText({x:c.newX,y:c.newY,text:h,textAnchor:c.textAnchor,i:n,j:n,parent:a,color:Array.isArray(i.style.colors)&&i.style.colors[n]?i.style.colors[n]:\"#a8a8a8\",dataLabelsConfig:Ri({textAnchor:c.textAnchor,dropShadow:{enabled:!1}},i),offsetCorrection:!1})}})),a}},{key:\"createPaths\",value:function(t,e){var i=this,a=[],r=[],s=[],n=[];if(t.length){r=[this.graphics.move(e.x,e.y)],n=[this.graphics.move(e.x,e.y)];var o=this.graphics.move(t[0].x,t[0].y),l=this.graphics.move(t[0].x,t[0].y);t.forEach((function(e,a){o+=i.graphics.line(e.x,e.y),l+=i.graphics.line(e.x,e.y),a===t.length-1&&(o+=\"Z\",l+=\"Z\")})),a.push(o),s.push(l)}return{linePathsFrom:r,linePathsTo:a,areaPathsFrom:n,areaPathsTo:s}}},{key:\"getTextPos\",value:function(t,e){var i=\"middle\",a=t.x,r=t.y;return Math.abs(t.x)>=10?t.x>0?(i=\"start\",a+=10):t.x<0&&(i=\"end\",a-=10):i=\"middle\",Math.abs(t.y)>=e-10&&(t.y<0?r-=10:t.y>0&&(r+=10)),{textAnchor:i,newX:a,newY:r}}},{key:\"getPreviousPath\",value:function(t){for(var e=this.w,i=null,a=0;a<e.globals.previousPaths.length;a++){var r=e.globals.previousPaths[a];r.paths.length>0&&parseInt(r.realIndex,10)===parseInt(t,10)&&void 0!==e.globals.previousPaths[a].paths[0]&&(i=e.globals.previousPaths[a].paths[0].d)}return i}},{key:\"getDataPointsPos\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.dataPointsLen;t=t||[],e=e||[];for(var a=[],r=0;r<i;r++){var s={};s.x=t[r]*Math.sin(e[r]),s.y=-t[r]*Math.cos(e[r]),a.push(s)}return a}}],i&&Fi(e.prototype,i),t}();function Ni(t){return Ni=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},Ni(t)}function Wi(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}function ji(t,e){return ji=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},ji(t,e)}function Bi(t){return Bi=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},Bi(t)}const Gi=function(t){!function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&ji(t,e)}(o,t);var e,i,a,s,n=(a=o,s=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=Bi(a);if(s){var i=Bi(this).constructor;t=Reflect.construct(e,arguments,i)}else t=e.apply(this,arguments);return function(t,e){if(e&&(\"object\"===Ni(e)||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}(this,t)});function o(t){var e;!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,o),(e=n.call(this,t)).ctx=t,e.w=t.w,e.animBeginArr=[0],e.animDur=0;var i=e.w;return e.startAngle=i.config.plotOptions.radialBar.startAngle,e.endAngle=i.config.plotOptions.radialBar.endAngle,e.totalAngle=Math.abs(i.config.plotOptions.radialBar.endAngle-i.config.plotOptions.radialBar.startAngle),e.trackStartAngle=i.config.plotOptions.radialBar.track.startAngle,e.trackEndAngle=i.config.plotOptions.radialBar.track.endAngle,e.donutDataLabels=e.w.config.plotOptions.radialBar.dataLabels,e.radialDataLabels=e.donutDataLabels,e.trackStartAngle||(e.trackStartAngle=e.startAngle),e.trackEndAngle||(e.trackEndAngle=e.endAngle),360===e.endAngle&&(e.endAngle=359.99),e.margin=parseInt(i.config.plotOptions.radialBar.track.margin,10),e}return e=o,(i=[{key:\"draw\",value:function(t){var e=this.w,i=new g(this.ctx),a=i.group({class:\"apexcharts-radialbar\"});if(e.globals.noData)return a;var r=i.group(),s=this.defaultSize/2,n=e.globals.gridWidth/2,o=this.defaultSize/2.05;e.config.chart.sparkline.enabled||(o=o-e.config.stroke.width-e.config.chart.dropShadow.blur);var l=e.globals.fill.colors;if(e.config.plotOptions.radialBar.track.show){var c=this.drawTracks({size:o,centerX:n,centerY:s,colorArr:l,series:t});r.add(c)}var h=this.drawArcs({size:o,centerX:n,centerY:s,colorArr:l,series:t}),d=360;e.config.plotOptions.radialBar.startAngle<0&&(d=this.totalAngle);var u=(360-d)/360;if(e.globals.radialSize=o-o*u,this.radialDataLabels.value.show){var f=Math.max(this.radialDataLabels.value.offsetY,this.radialDataLabels.name.offsetY);e.globals.radialSize+=f*u}return r.add(h.g),\"front\"===e.config.plotOptions.radialBar.hollow.position&&(h.g.add(h.elHollow),h.dataLabels&&h.g.add(h.dataLabels)),a.add(r),a}},{key:\"drawTracks\",value:function(t){var e=this.w,i=new g(this.ctx),a=i.group({class:\"apexcharts-tracks\"}),r=new l(this.ctx),s=new K(this.ctx),n=this.getStrokeWidth(t);t.size=t.size-n/2;for(var o=0;o<t.series.length;o++){var c=i.group({class:\"apexcharts-radialbar-track apexcharts-track\"});a.add(c),c.attr({rel:o+1}),t.size=t.size-n-this.margin;var h=e.config.plotOptions.radialBar.track,d=s.fillPath({seriesNumber:0,size:t.size,fillColors:Array.isArray(h.background)?h.background[o]:h.background,solid:!0}),u=this.trackStartAngle,f=this.trackEndAngle;Math.abs(f)+Math.abs(u)>=360&&(f=360-Math.abs(this.startAngle)-.1);var p=i.drawPath({d:\"\",stroke:d,strokeWidth:n*parseInt(h.strokeWidth,10)/100,fill:\"none\",strokeOpacity:h.opacity,classes:\"apexcharts-radialbar-area\"});if(h.dropShadow.enabled){var x=h.dropShadow;r.dropShadow(p,x)}c.add(p),p.attr(\"id\",\"apexcharts-radialbarTrack-\"+o),this.animatePaths(p,{centerX:t.centerX,centerY:t.centerY,endAngle:f,startAngle:u,size:t.size,i:o,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:e.globals.easing})}return a}},{key:\"drawArcs\",value:function(t){var e=this.w,i=new g(this.ctx),a=new K(this.ctx),s=new l(this.ctx),n=i.group(),o=this.getStrokeWidth(t);t.size=t.size-o/2;var c=e.config.plotOptions.radialBar.hollow.background,h=t.size-o*t.series.length-this.margin*t.series.length-o*parseInt(e.config.plotOptions.radialBar.track.strokeWidth,10)/100/2,d=h-e.config.plotOptions.radialBar.hollow.margin;void 0!==e.config.plotOptions.radialBar.hollow.image&&(c=this.drawHollowImage(t,n,h,c));var u=this.drawHollow({size:d,centerX:t.centerX,centerY:t.centerY,fill:c||\"transparent\"});if(e.config.plotOptions.radialBar.hollow.dropShadow.enabled){var f=e.config.plotOptions.radialBar.hollow.dropShadow;s.dropShadow(u,f)}var p=1;!this.radialDataLabels.total.show&&e.globals.series.length>1&&(p=0);var x=null;this.radialDataLabels.show&&(x=this.renderInnerDataLabels(this.radialDataLabels,{hollowSize:h,centerX:t.centerX,centerY:t.centerY,opacity:p})),\"back\"===e.config.plotOptions.radialBar.hollow.position&&(n.add(u),x&&n.add(x));var b=!1;e.config.plotOptions.radialBar.inverseOrder&&(b=!0);for(var v=b?t.series.length-1:0;b?v>=0:v<t.series.length;b?v--:v++){var m=i.group({class:\"apexcharts-series apexcharts-radial-series\",seriesName:r.escapeString(e.globals.seriesNames[v])});n.add(m),m.attr({rel:v+1,\"data:realIndex\":v}),this.ctx.series.addCollapsedClassToSeries(m,v),t.size=t.size-o-this.margin;var y=a.fillPath({seriesNumber:v,size:t.size,value:t.series[v]}),w=this.startAngle,k=void 0,A=r.negToZero(t.series[v]>100?100:t.series[v])/100,S=Math.round(this.totalAngle*A)+this.startAngle,C=void 0;e.globals.dataChanged&&(k=this.startAngle,C=Math.round(this.totalAngle*r.negToZero(e.globals.previousPaths[v])/100)+k),Math.abs(S)+Math.abs(w)>=360&&(S-=.01),Math.abs(C)+Math.abs(k)>=360&&(C-=.01);var P=S-w,L=Array.isArray(e.config.stroke.dashArray)?e.config.stroke.dashArray[v]:e.config.stroke.dashArray,O=i.drawPath({d:\"\",stroke:y,strokeWidth:o,fill:\"none\",fillOpacity:e.config.fill.opacity,classes:\"apexcharts-radialbar-area apexcharts-radialbar-slice-\"+v,strokeDashArray:L});if(g.setAttrs(O.node,{\"data:angle\":P,\"data:value\":t.series[v]}),e.config.chart.dropShadow.enabled){var T=e.config.chart.dropShadow;s.dropShadow(O,T,v)}s.setSelectionFilter(O,0,v),this.addListeners(O,this.radialDataLabels),m.add(O),O.attr({index:0,j:v});var I=0;!this.initialAnim||e.globals.resized||e.globals.dataChanged||(I=e.config.chart.animations.speed),e.globals.dataChanged&&(I=e.config.chart.animations.dynamicAnimation.speed),this.animDur=I/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur),this.animatePaths(O,{centerX:t.centerX,centerY:t.centerY,endAngle:S,startAngle:w,prevEndAngle:C,prevStartAngle:k,size:t.size,i:v,totalItems:2,animBeginArr:this.animBeginArr,dur:I,shouldSetPrevPaths:!0,easing:e.globals.easing})}return{g:n,elHollow:u,dataLabels:x}}},{key:\"drawHollow\",value:function(t){var e=new g(this.ctx).drawCircle(2*t.size);return e.attr({class:\"apexcharts-radialbar-hollow\",cx:t.centerX,cy:t.centerY,r:t.size,fill:t.fill}),e}},{key:\"drawHollowImage\",value:function(t,e,i,a){var s=this.w,n=new K(this.ctx),o=r.randomId(),l=s.config.plotOptions.radialBar.hollow.image;if(s.config.plotOptions.radialBar.hollow.imageClipped)n.clippedImgArea({width:i,height:i,image:l,patternID:\"pattern\".concat(s.globals.cuid).concat(o)}),a=\"url(#pattern\".concat(s.globals.cuid).concat(o,\")\");else{var c=s.config.plotOptions.radialBar.hollow.imageWidth,h=s.config.plotOptions.radialBar.hollow.imageHeight;if(void 0===c&&void 0===h){var d=s.globals.dom.Paper.image(l).loaded((function(e){this.move(t.centerX-e.width/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-e.height/2+s.config.plotOptions.radialBar.hollow.imageOffsetY)}));e.add(d)}else{var u=s.globals.dom.Paper.image(l).loaded((function(e){this.move(t.centerX-c/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-h/2+s.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(c,h)}));e.add(u)}}return a}},{key:\"getStrokeWidth\",value:function(t){var e=this.w;return t.size*(100-parseInt(e.config.plotOptions.radialBar.hollow.size,10))/100/(t.series.length+1)-this.margin}}])&&Wi(e.prototype,i),o}(zi);function Vi(t){return Vi=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},Vi(t)}function _i(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function Ui(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?_i(Object(i),!0).forEach((function(e){qi(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):_i(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function qi(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function Zi(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}function $i(t,e){return $i=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},$i(t,e)}function Ji(t){return Ji=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},Ji(t)}const Qi=function(t){!function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&$i(t,e)}(o,t);var e,i,a,s,n=(a=o,s=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=Ji(a);if(s){var i=Ji(this).constructor;t=Reflect.construct(e,arguments,i)}else t=e.apply(this,arguments);return function(t,e){if(e&&(\"object\"===Vi(e)||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}(this,t)});function o(){return function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,o),n.apply(this,arguments)}return e=o,(i=[{key:\"draw\",value:function(t,e){var i=this.w,a=new g(this.ctx);this.rangeBarOptions=this.w.config.plotOptions.rangeBar,this.series=t,this.seriesRangeStart=i.globals.seriesRangeStart,this.seriesRangeEnd=i.globals.seriesRangeEnd,this.barHelpers.initVariables(t);for(var s=a.group({class:\"apexcharts-rangebar-series apexcharts-plot-series\"}),n=0;n<t.length;n++){var o,l,c,h,d=void 0,u=void 0,f=i.globals.comboCharts?e[n]:n,p=a.group({class:\"apexcharts-series\",seriesName:r.escapeString(i.globals.seriesNames[f]),rel:n+1,\"data:realIndex\":f});this.ctx.series.addCollapsedClassToSeries(p,f),t[n].length>0&&(this.visibleI=this.visibleI+1);var x=0,b=0;this.yRatio.length>1&&(this.yaxisIndex=f);var v=this.barHelpers.initialPositions();u=v.y,h=v.zeroW,d=v.x,b=v.barWidth,x=v.barHeight,o=v.xDivision,l=v.yDivision,c=v.zeroH;for(var m=a.group({class:\"apexcharts-datalabels\",\"data:realIndex\":f}),y=a.group({class:\"apexcharts-rangebar-goals-markers\",style:\"pointer-events: none\"}),w=0;w<i.globals.dataPoints;w++){var k,A=this.barHelpers.getStrokeWidth(n,w,f),S=this.seriesRangeStart[n][w],C=this.seriesRangeEnd[n][w],P=null,L=null,O=null,T={x:d,y:u,strokeWidth:A,elSeries:p},I=this.seriesLen;if(i.config.plotOptions.bar.rangeBarGroupRows&&(I=1),void 0===i.config.series[n].data[w])break;if(this.isHorizontal){O=u+x*this.visibleI;var E=(l-x*I)/2;if(i.config.series[n].data[w].x){var M=this.detectOverlappingBars({i:n,j:w,barYPosition:O,srty:E,barHeight:x,yDivision:l,initPositions:v});x=M.barHeight,O=M.barYPosition}b=(P=this.drawRangeBarPaths(Ui({indexes:{i:n,j:w,realIndex:f},barHeight:x,barYPosition:O,zeroW:h,yDivision:l,y1:S,y2:C},T))).barWidth}else{i.globals.isXNumeric&&(d=(i.globals.seriesX[n][w]-i.globals.minX)/this.xRatio-b/2),L=d+b*this.visibleI;var X=(o-b*I)/2;if(i.config.series[n].data[w].x){var z=this.detectOverlappingBars({i:n,j:w,barXPosition:L,srtx:X,barWidth:b,xDivision:o,initPositions:v});b=z.barWidth,L=z.barXPosition}x=(P=this.drawRangeColumnPaths(Ui({indexes:{i:n,j:w,realIndex:f},barWidth:b,barXPosition:L,zeroH:c,xDivision:o},T))).barHeight}var Y=this.barHelpers.drawGoalLine({barXPosition:P.barXPosition,barYPosition:O,goalX:P.goalX,goalY:P.goalY,barHeight:x,barWidth:b});Y&&y.add(Y),u=P.y,d=P.x;var R=this.barHelpers.getPathFillColor(t,n,w,f),D=i.globals.stroke.colors[f];this.renderSeries((qi(k={realIndex:f,pathFill:R,lineFill:D,j:w,i:n,x:d,y:u,y1:S,y2:C,pathFrom:P.pathFrom,pathTo:P.pathTo,strokeWidth:A,elSeries:p,series:t,barHeight:x,barWidth:b,barXPosition:L,barYPosition:O},\"barWidth\",b),qi(k,\"elDataLabelsWrap\",m),qi(k,\"elGoalsMarkers\",y),qi(k,\"visibleSeries\",this.visibleI),qi(k,\"type\",\"rangebar\"),k))}s.add(p)}return s}},{key:\"detectOverlappingBars\",value:function(t){var e=t.i,i=t.j,a=t.barYPosition,r=t.barXPosition,s=t.srty,n=t.srtx,o=t.barHeight,l=t.barWidth,c=t.yDivision,h=t.xDivision,d=t.initPositions,u=this.w,g=[],f=u.config.series[e].data[i].rangeName,p=u.config.series[e].data[i].x,x=Array.isArray(p)?p.join(\" \"):p,b=u.globals.labels.map((function(t){return Array.isArray(t)?t.join(\" \"):t})).indexOf(x),v=u.globals.seriesRange[e].findIndex((function(t){return t.x===x&&t.overlaps.length>0}));return this.isHorizontal?(a=u.config.plotOptions.bar.rangeBarGroupRows?s+c*b:s+o*this.visibleI+c*b,v>-1&&!u.config.plotOptions.bar.rangeBarOverlap&&(g=u.globals.seriesRange[e][v].overlaps).indexOf(f)>-1&&(a=(o=d.barHeight/g.length)*this.visibleI+c*(100-parseInt(this.barOptions.barHeight,10))/100/2+o*(this.visibleI+g.indexOf(f))+c*b)):(b>-1&&(r=u.config.plotOptions.bar.rangeBarGroupRows?n+h*b:n+l*this.visibleI+h*b),v>-1&&!u.config.plotOptions.bar.rangeBarOverlap&&(g=u.globals.seriesRange[e][v].overlaps).indexOf(f)>-1&&(r=(l=d.barWidth/g.length)*this.visibleI+h*(100-parseInt(this.barOptions.barWidth,10))/100/2+l*(this.visibleI+g.indexOf(f))+h*b)),{barYPosition:a,barXPosition:r,barHeight:o,barWidth:l}}},{key:\"drawRangeColumnPaths\",value:function(t){var e=t.indexes,i=t.x,a=t.xDivision,r=t.barWidth,s=t.barXPosition,n=t.zeroH,o=this.w,l=e.i,c=e.j,h=this.yRatio[this.yaxisIndex],d=e.realIndex,u=this.getRangeValue(d,c),g=Math.min(u.start,u.end),f=Math.max(u.start,u.end);void 0===this.series[l][c]||null===this.series[l][c]?g=n:(g=n-g/h,f=n-f/h);var p=Math.abs(f-g),x=this.barHelpers.getColumnPaths({barXPosition:s,barWidth:r,y1:g,y2:f,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,realIndex:e.realIndex,i:d,j:c,w:o});return o.globals.isXNumeric||(i+=a),{pathTo:x.pathTo,pathFrom:x.pathFrom,barHeight:p,x:i,y:f,goalY:this.barHelpers.getGoalValues(\"y\",null,n,l,c),barXPosition:s}}},{key:\"drawRangeBarPaths\",value:function(t){var e=t.indexes,i=t.y,a=t.y1,r=t.y2,s=t.yDivision,n=t.barHeight,o=t.barYPosition,l=t.zeroW,c=this.w,h=l+a/this.invertedYRatio,d=l+r/this.invertedYRatio,u=Math.abs(d-h),g=this.barHelpers.getBarpaths({barYPosition:o,barHeight:n,x1:h,x2:d,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,i:e.realIndex,realIndex:e.realIndex,j:e.j,w:c});return c.globals.isXNumeric||(i+=s),{pathTo:g.pathTo,pathFrom:g.pathFrom,barWidth:u,x:d,goalX:this.barHelpers.getGoalValues(\"x\",l,null,e.realIndex,e.j),y:i}}},{key:\"getRangeValue\",value:function(t,e){var i=this.w;return{start:i.globals.seriesRangeStart[t][e],end:i.globals.seriesRangeEnd[t][e]}}}])&&Zi(e.prototype,i),o}(li);function Ki(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var ta=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.w=e.w,this.lineCtx=e}var e,i;return e=t,(i=[{key:\"sameValueSeriesFix\",value:function(t,e){var i=this.w;if((\"gradient\"===i.config.fill.type||\"gradient\"===i.config.fill.type[t])&&new p(this.lineCtx.ctx,i).seriesHaveSameValues(t)){var a=e[t].slice();a[a.length-1]=a[a.length-1]+1e-6,e[t]=a}return e}},{key:\"calculatePoints\",value:function(t){var e=t.series,i=t.realIndex,a=t.x,s=t.y,n=t.i,o=t.j,l=t.prevY,c=this.w,h=[],d=[];if(0===o){var u=this.lineCtx.categoryAxisCorrection+c.config.markers.offsetX;c.globals.isXNumeric&&(u=(c.globals.seriesX[i][0]-c.globals.minX)/this.lineCtx.xRatio+c.config.markers.offsetX),h.push(u),d.push(r.isNumber(e[n][0])?l+c.config.markers.offsetY:null),h.push(a+c.config.markers.offsetX),d.push(r.isNumber(e[n][o+1])?s+c.config.markers.offsetY:null)}else h.push(a+c.config.markers.offsetX),d.push(r.isNumber(e[n][o+1])?s+c.config.markers.offsetY:null);return{x:h,y:d}}},{key:\"checkPreviousPaths\",value:function(t){for(var e=t.pathFromLine,i=t.pathFromArea,a=t.realIndex,r=this.w,s=0;s<r.globals.previousPaths.length;s++){var n=r.globals.previousPaths[s];(\"line\"===n.type||\"area\"===n.type)&&n.paths.length>0&&parseInt(n.realIndex,10)===parseInt(a,10)&&(\"line\"===n.type?(this.lineCtx.appendPathFrom=!1,e=r.globals.previousPaths[s].paths[0].d):\"area\"===n.type&&(this.lineCtx.appendPathFrom=!1,i=r.globals.previousPaths[s].paths[0].d,r.config.stroke.show&&r.globals.previousPaths[s].paths[1]&&(e=r.globals.previousPaths[s].paths[1].d)))}return{pathFromLine:e,pathFromArea:i}}},{key:\"determineFirstPrevY\",value:function(t){var e,i=t.i,a=t.series,r=t.prevY,s=t.lineYPosition,n=this.w;if(void 0!==(null===(e=a[i])||void 0===e?void 0:e[0]))r=(s=n.config.chart.stacked&&i>0?this.lineCtx.prevSeriesY[i-1][0]:this.lineCtx.zeroY)-a[i][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]+2*(this.lineCtx.isReversed?a[i][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]:0);else if(n.config.chart.stacked&&i>0&&void 0===a[i][0])for(var o=i-1;o>=0;o--)if(null!==a[o][0]&&void 0!==a[o][0]){r=s=this.lineCtx.prevSeriesY[o][0];break}return{prevY:r,lineYPosition:s}}}])&&Ki(e.prototype,i),t}();function ea(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function ia(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?ea(Object(i),!0).forEach((function(e){aa(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):ea(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function aa(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function ra(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const sa=function(){function t(e,i,a){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.xyRatios=i,this.pointsChart=!(\"bubble\"!==this.w.config.chart.type&&\"scatter\"!==this.w.config.chart.type)||a,this.scatter=new at(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.lineHelpers=new ta(this),this.markers=new et(this.ctx),this.prevSeriesY=[],this.categoryAxisCorrection=0,this.yaxisIndex=0}var e,i;return e=t,(i=[{key:\"draw\",value:function(t,e,i,a){var r=this.w,s=new g(this.ctx),n=r.globals.comboCharts?e:r.config.chart.type,o=s.group({class:\"apexcharts-\".concat(n,\"-series apexcharts-plot-series\")}),l=new p(this.ctx,r);this.yRatio=this.xyRatios.yRatio,this.zRatio=this.xyRatios.zRatio,this.xRatio=this.xyRatios.xRatio,this.baseLineY=this.xyRatios.baseLineY,t=l.getLogSeries(t),this.yRatio=l.getLogYRatios(this.yRatio);for(var c=[],h=0;h<t.length;h++){t=this.lineHelpers.sameValueSeriesFix(h,t);var d=r.globals.comboCharts?i[h]:h;this._initSerieVariables(t,h,d);var u=[],f=[],x=r.globals.padHorizontal+this.categoryAxisCorrection;this.ctx.series.addCollapsedClassToSeries(this.elSeries,d),r.globals.isXNumeric&&r.globals.seriesX.length>0&&(x=(r.globals.seriesX[d][0]-r.globals.minX)/this.xRatio),f.push(x);var b,v=x,m=void 0,y=v,w=this.zeroY,k=this.zeroY;w=this.lineHelpers.determineFirstPrevY({i:h,series:t,prevY:w,lineYPosition:0}).prevY,u.push(w),b=w,\"rangeArea\"===n&&(m=k=this.lineHelpers.determineFirstPrevY({i:h,series:a,prevY:k,lineYPosition:0}).prevY);var A={type:n,series:t,realIndex:d,i:h,x,y:1,pX:v,pY:b,pathsFrom:this._calculatePathsFrom({type:n,series:t,i:h,realIndex:d,prevX:y,prevY:w,prevY2:k}),linePaths:[],areaPaths:[],seriesIndex:i,lineYPosition:0,xArrj:f,yArrj:u,seriesRangeEnd:a},S=this._iterateOverDataPoints(ia(ia({},A),{},{iterations:\"rangeArea\"===n?t[h].length-1:void 0,isRangeStart:!0}));if(\"rangeArea\"===n){var C=this._calculatePathsFrom({series:a,i:h,realIndex:d,prevX:y,prevY:k}),P=this._iterateOverDataPoints(ia(ia({},A),{},{series:a,pY:m,pathsFrom:C,iterations:a[h].length-1,isRangeStart:!1}));S.linePaths[0]=P.linePath+S.linePath,S.pathFromLine=P.pathFromLine+S.pathFromLine}this._handlePaths({type:n,realIndex:d,i:h,paths:S}),this.elSeries.add(this.elPointsMain),this.elSeries.add(this.elDataLabelsWrap),c.push(this.elSeries)}if(r.config.chart.stacked)for(var L=c.length;L>0;L--)o.add(c[L-1]);else for(var O=0;O<c.length;O++)o.add(c[O]);return o}},{key:\"_initSerieVariables\",value:function(t,e,i){var a=this.w,s=new g(this.ctx);this.xDivision=a.globals.gridWidth/(a.globals.dataPoints-(\"on\"===a.config.xaxis.tickPlacement?1:0)),this.strokeWidth=Array.isArray(a.config.stroke.width)?a.config.stroke.width[i]:a.config.stroke.width,this.yRatio.length>1&&(this.yaxisIndex=i),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed,this.zeroY=a.globals.gridHeight-this.baseLineY[this.yaxisIndex]-(this.isReversed?a.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),this.areaBottomY=this.zeroY,(this.zeroY>a.globals.gridHeight||\"end\"===a.config.plotOptions.area.fillTo)&&(this.areaBottomY=a.globals.gridHeight),this.categoryAxisCorrection=this.xDivision/2,this.elSeries=s.group({class:\"apexcharts-series\",seriesName:r.escapeString(a.globals.seriesNames[i])}),this.elPointsMain=s.group({class:\"apexcharts-series-markers-wrap\",\"data:realIndex\":i}),this.elDataLabelsWrap=s.group({class:\"apexcharts-datalabels\",\"data:realIndex\":i});var n=t[e].length===a.globals.dataPoints;this.elSeries.attr({\"data:longestSeries\":n,rel:e+1,\"data:realIndex\":i}),this.appendPathFrom=!0}},{key:\"_calculatePathsFrom\",value:function(t){var e,i,a,r,s=t.type,n=t.series,o=t.i,l=t.realIndex,c=t.prevX,h=t.prevY,d=t.prevY2,u=this.w,f=new g(this.ctx);if(null===n[o][0]){for(var p=0;p<n[o].length;p++)if(null!==n[o][p]){c=this.xDivision*p,h=this.zeroY-n[o][p]/this.yRatio[this.yaxisIndex],e=f.move(c,h),i=f.move(c,this.areaBottomY);break}}else e=f.move(c,h),\"rangeArea\"===s&&(e=f.move(c,d)+f.line(c,h)),i=f.move(c,this.areaBottomY)+f.line(c,h);if(a=f.move(-1,this.zeroY)+f.line(-1,this.zeroY),r=f.move(-1,this.zeroY)+f.line(-1,this.zeroY),u.globals.previousPaths.length>0){var x=this.lineHelpers.checkPreviousPaths({pathFromLine:a,pathFromArea:r,realIndex:l});a=x.pathFromLine,r=x.pathFromArea}return{prevX:c,prevY:h,linePath:e,areaPath:i,pathFromLine:a,pathFromArea:r}}},{key:\"_handlePaths\",value:function(t){var e=t.type,i=t.realIndex,a=t.i,r=t.paths,s=this.w,n=new g(this.ctx),o=new K(this.ctx);this.prevSeriesY.push(r.yArrj),s.globals.seriesXvalues[i]=r.xArrj,s.globals.seriesYvalues[i]=r.yArrj;var l=s.config.forecastDataPoints;if(l.count>0&&\"rangeArea\"!==e){var c=s.globals.seriesXvalues[i][s.globals.seriesXvalues[i].length-l.count-1],h=n.drawRect(c,0,s.globals.gridWidth,s.globals.gridHeight,0);s.globals.dom.elForecastMask.appendChild(h.node);var d=n.drawRect(0,0,c,s.globals.gridHeight,0);s.globals.dom.elNonForecastMask.appendChild(d.node)}this.pointsChart||s.globals.delayedElements.push({el:this.elPointsMain.node,index:i});var u={i:a,realIndex:i,animationDelay:a,initialSpeed:s.config.chart.animations.speed,dataChangeSpeed:s.config.chart.animations.dynamicAnimation.speed,className:\"apexcharts-\".concat(e)};if(\"area\"===e)for(var f=o.fillPath({seriesNumber:i}),p=0;p<r.areaPaths.length;p++){var x=n.renderPaths(ia(ia({},u),{},{pathFrom:r.pathFromArea,pathTo:r.areaPaths[p],stroke:\"none\",strokeWidth:0,strokeLineCap:null,fill:f}));this.elSeries.add(x)}if(s.config.stroke.show&&!this.pointsChart){var b=null;if(\"line\"===e)b=o.fillPath({seriesNumber:i,i:a});else if(\"solid\"===s.config.stroke.fill.type)b=s.globals.stroke.colors[i];else{var v=s.config.fill;s.config.fill=s.config.stroke.fill,b=o.fillPath({seriesNumber:i,i:a}),s.config.fill=v}for(var m=0;m<r.linePaths.length;m++){var y=b;\"rangeArea\"===e&&(y=o.fillPath({seriesNumber:i}));var w=ia(ia({},u),{},{pathFrom:r.pathFromLine,pathTo:r.linePaths[m],stroke:b,strokeWidth:this.strokeWidth,strokeLineCap:s.config.stroke.lineCap,fill:\"rangeArea\"===e?y:\"none\"}),k=n.renderPaths(w);if(this.elSeries.add(k),k.attr(\"fill-rule\",\"evenodd\"),l.count>0&&\"rangeArea\"!==e){var A=n.renderPaths(w);A.node.setAttribute(\"stroke-dasharray\",l.dashArray),l.strokeWidth&&A.node.setAttribute(\"stroke-width\",l.strokeWidth),this.elSeries.add(A),A.attr(\"clip-path\",\"url(#forecastMask\".concat(s.globals.cuid,\")\")),k.attr(\"clip-path\",\"url(#nonForecastMask\".concat(s.globals.cuid,\")\"))}}}}},{key:\"_iterateOverDataPoints\",value:function(t){var e=t.type,i=t.series,a=t.iterations,s=t.realIndex,n=t.i,o=t.x,l=t.y,c=t.pX,h=t.pY,d=t.pathsFrom,u=t.linePaths,f=t.areaPaths,p=t.seriesIndex,x=t.lineYPosition,b=t.xArrj,v=t.yArrj,m=t.isRangeStart,y=t.seriesRangeEnd,w=this.w,k=new g(this.ctx),A=this.yRatio,S=d.prevY,C=d.linePath,P=d.areaPath,L=d.pathFromLine,O=d.pathFromArea,T=r.isNumber(w.globals.minYArr[s])?w.globals.minYArr[s]:w.globals.minY;a||(a=w.globals.dataPoints>1?w.globals.dataPoints-1:w.globals.dataPoints);for(var I=l,E=0;E<a;E++){var M=void 0===i[n][E+1]||null===i[n][E+1];if(w.globals.isXNumeric){var X=w.globals.seriesX[s][E+1];void 0===w.globals.seriesX[s][E+1]&&(X=w.globals.seriesX[s][a-1]),o=(X-w.globals.minX)/this.xRatio}else o+=this.xDivision;x=w.config.chart.stacked&&n>0&&w.globals.collapsedSeries.length<w.config.series.length-1?this.prevSeriesY[function(t){for(var e=t,i=0;i<w.globals.series.length;i++)if(w.globals.collapsedSeriesIndices.indexOf(t)>-1){e--;break}return e>=0?e:0}(n-1)][E+1]:this.zeroY,M?l=x-T/A[this.yaxisIndex]+2*(this.isReversed?T/A[this.yaxisIndex]:0):(l=x-i[n][E+1]/A[this.yaxisIndex]+2*(this.isReversed?i[n][E+1]/A[this.yaxisIndex]:0),\"rangeArea\"===e&&(I=x-y[n][E+1]/A[this.yaxisIndex]+2*(this.isReversed?y[n][E+1]/A[this.yaxisIndex]:0))),b.push(o),v.push(l);var z=this.lineHelpers.calculatePoints({series:i,x:o,y:l,realIndex:s,i:n,j:E,prevY:S}),Y=this._createPaths({type:e,series:i,i:n,realIndex:s,j:E,x:o,y:l,y2:I,pX:c,pY:h,linePath:C,areaPath:P,linePaths:u,areaPaths:f,seriesIndex:p,isRangeStart:m});f=Y.areaPaths,u=Y.linePaths,c=Y.pX,h=Y.pY,P=Y.areaPath,C=Y.linePath,this.appendPathFrom&&(L+=k.line(o,this.zeroY),O+=k.line(o,this.zeroY)),this.handleNullDataPoints(i,z,n,E,s),this._handleMarkersAndLabels({type:e,pointsPos:z,i:n,j:E,realIndex:s,isRangeStart:m})}return{yArrj:v,xArrj:b,pathFromArea:O,areaPaths:f,pathFromLine:L,linePaths:u,linePath:C,areaPath:P}}},{key:\"_handleMarkersAndLabels\",value:function(t){var e=t.type,i=t.pointsPos,a=t.isRangeStart,r=t.i,s=t.j,n=t.realIndex,o=this.w,l=new st(this.ctx);if(this.pointsChart)this.scatter.draw(this.elSeries,s,{realIndex:n,pointsPos:i,zRatio:this.zRatio,elParent:this.elPointsMain});else{o.globals.series[r].length>1&&this.elPointsMain.node.classList.add(\"apexcharts-element-hidden\");var c=this.markers.plotChartMarkers(i,n,s+1);null!==c&&this.elPointsMain.add(c)}var h=l.drawDataLabel({type:e,isRangeStart:a,pos:i,i:n,j:s+1});null!==h&&this.elDataLabelsWrap.add(h)}},{key:\"_createPaths\",value:function(t){var e=t.type,i=t.series,a=t.i,r=t.realIndex,s=t.j,n=t.x,o=t.y,l=t.y2,c=t.pX,h=t.pY,d=t.linePath,u=t.areaPath,f=t.linePaths,p=t.areaPaths,x=t.seriesIndex,b=t.isRangeStart,v=this.w,m=new g(this.ctx),y=v.config.stroke.curve,w=this.areaBottomY;if(Array.isArray(v.config.stroke.curve)&&(y=Array.isArray(x)?v.config.stroke.curve[x[a]]:v.config.stroke.curve[a]),\"smooth\"===y){var k=.35*(n-c);v.globals.hasNullValues?(null!==i[a][s]&&(null!==i[a][s+1]?(d=m.move(c,h)+m.curve(c+k,h,n-k,o,n+1,o),u=m.move(c+1,h)+m.curve(c+k,h,n-k,o,n+1,o)+m.line(n,w)+m.line(c,w)+\"z\"):(d=m.move(c,h),u=m.move(c,h)+\"z\")),f.push(d),p.push(u)):(d+=m.curve(c+k,h,n-k,o,n,o),u+=m.curve(c+k,h,n-k,o,n,o)),c=n,h=o,s===i[a].length-2&&(u=u+m.curve(c,h,n,o,n,w)+m.move(n,o)+\"z\",\"rangeArea\"===e&&b?d=d+m.curve(c,h,n,o,n,l)+m.move(n,l)+\"z\":v.globals.hasNullValues||(f.push(d),p.push(u)))}else{if(null===i[a][s+1]){d+=m.move(n,o);var A=v.globals.isXNumeric?(v.globals.seriesX[r][s]-v.globals.minX)/this.xRatio:n-this.xDivision;u=u+m.line(A,w)+m.move(n,o)+\"z\"}null===i[a][s]&&(d+=m.move(n,o),u+=m.move(n,w)),\"stepline\"===y?(d=d+m.line(n,null,\"H\")+m.line(null,o,\"V\"),u=u+m.line(n,null,\"H\")+m.line(null,o,\"V\")):\"straight\"===y&&(d+=m.line(n,o),u+=m.line(n,o)),s===i[a].length-2&&(u=u+m.line(n,w)+m.move(n,o)+\"z\",\"rangeArea\"===e&&b?d=d+m.line(n,l)+m.move(n,l)+\"z\":(f.push(d),p.push(u)))}return{linePaths:f,areaPaths:p,pX:c,pY:h,linePath:d,areaPath:u}}},{key:\"handleNullDataPoints\",value:function(t,e,i,a,r){var s=this.w;if(null===t[i][a]&&s.config.markers.showNullDataPoints||1===t[i].length){var n=this.markers.plotChartMarkers(e,r,a+1,this.strokeWidth-s.config.markers.strokeWidth/2,!0);null!==n&&this.elPointsMain.add(n)}}}])&&ra(e.prototype,i),t}();function na(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}i(600);var oa=function(){function t(e,i){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.strokeWidth=this.w.config.stroke.width,this.helpers=new Oi(e),this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.labels=[]}var e,i;return e=t,(i=[{key:\"draw\",value:function(t){var e=this,i=this.w,a=new g(this.ctx),s=new K(this.ctx),n=a.group({class:\"apexcharts-treemap\"});if(i.globals.noData)return n;var o=[];return t.forEach((function(t){var e=t.map((function(t){return Math.abs(t)}));o.push(e)})),this.negRange=this.helpers.checkColorRange(),i.config.series.forEach((function(t,i){t.data.forEach((function(t){Array.isArray(e.labels[i])||(e.labels[i]=[]),e.labels[i].push(t.x)}))})),window.TreemapSquared.generate(o,i.globals.gridWidth,i.globals.gridHeight).forEach((function(o,c){var h=a.group({class:\"apexcharts-series apexcharts-treemap-series\",seriesName:r.escapeString(i.globals.seriesNames[c]),rel:c+1,\"data:realIndex\":c});if(i.config.chart.dropShadow.enabled){var d=i.config.chart.dropShadow;new l(e.ctx).dropShadow(n,d,c)}var u=a.group({class:\"apexcharts-data-labels\"});o.forEach((function(r,n){var o=r[0],l=r[1],d=r[2],u=r[3],g=a.drawRect(o,l,d-o,u-l,0,\"#fff\",1,e.strokeWidth,i.config.plotOptions.treemap.useFillColorAsStroke?p:i.globals.stroke.colors[c]);g.attr({cx:o,cy:l,index:c,i:c,j:n,width:d-o,height:u-l});var f=e.helpers.getShadeColor(i.config.chart.type,c,n,e.negRange),p=f.color;void 0!==i.config.series[c].data[n]&&i.config.series[c].data[n].fillColor&&(p=i.config.series[c].data[n].fillColor);var x=s.fillPath({color:p,seriesNumber:c,dataPointIndex:n});g.node.classList.add(\"apexcharts-treemap-rect\"),g.attr({fill:x}),e.helpers.addListeners(g);var b={x:o+(d-o)/2,y:l+(u-l)/2,width:0,height:0},v={x:o,y:l,width:d-o,height:u-l};if(i.config.chart.animations.enabled&&!i.globals.dataChanged){var m=1;i.globals.resized||(m=i.config.chart.animations.speed),e.animateTreemap(g,b,v,m)}if(i.globals.dataChanged){var y=1;e.dynamicAnim.enabled&&i.globals.shouldAnimate&&(y=e.dynamicAnim.speed,i.globals.previousPaths[c]&&i.globals.previousPaths[c][n]&&i.globals.previousPaths[c][n].rect&&(b=i.globals.previousPaths[c][n].rect),e.animateTreemap(g,b,v,y))}var w=e.getFontSize(r),k=i.config.dataLabels.formatter(e.labels[c][n],{value:i.globals.series[c][n],seriesIndex:c,dataPointIndex:n,w:i}),A=e.helpers.calculateDataLabels({text:k,x:(o+d)/2,y:(l+u)/2+e.strokeWidth/2+w/3,i:c,j:n,colorProps:f,fontSize:w,series:t});i.config.dataLabels.enabled&&A&&e.rotateToFitLabel(A,w,k,o,l,d,u),h.add(g),null!==A&&h.add(A)})),h.add(u),n.add(h)})),n}},{key:\"getFontSize\",value:function(t){var e,i,a=this.w,r=function t(e){var i,a=0;if(Array.isArray(e[0]))for(i=0;i<e.length;i++)a+=t(e[i]);else for(i=0;i<e.length;i++)a+=e[i].length;return a}(this.labels)/function t(e){var i,a=0;if(Array.isArray(e[0]))for(i=0;i<e.length;i++)a+=t(e[i]);else for(i=0;i<e.length;i++)a+=1;return a}(this.labels);return e=(t[2]-t[0])*(t[3]-t[1]),i=Math.pow(e,.5),Math.min(i/r,parseInt(a.config.dataLabels.style.fontSize,10))}},{key:\"rotateToFitLabel\",value:function(t,e,i,a,r,s,n){var o=new g(this.ctx),l=o.getTextRects(i,e);if(l.width+this.w.config.stroke.width+5>s-a&&l.width<=n-r){var c=o.rotateAroundCenter(t.node);t.node.setAttribute(\"transform\",\"rotate(-90 \".concat(c.x,\" \").concat(c.y,\")\"))}}},{key:\"animateTreemap\",value:function(t,e,i,a){var r=new n(this.ctx);r.animateRect(t,{x:e.x,y:e.y,width:e.width,height:e.height},{x:i.x,y:i.y,width:i.width,height:i.height},a,(function(){r.animationCompleted(t)}))}}])&&na(e.prototype,i),t}();function la(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function ca(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?la(Object(i),!0).forEach((function(e){ha(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):la(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function ha(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function da(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}const ua=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w,this.timeScaleArray=[],this.utc=this.w.config.xaxis.labels.datetimeUTC}var e,i;return e=t,(i=[{key:\"calculateTimeScaleTicks\",value:function(t,e){var i=this,a=this.w;if(a.globals.allSeriesCollapsed)return a.globals.labels=[],a.globals.timescaleLabels=[],[];var r=new M(this.ctx),s=(e-t)/864e5;this.determineInterval(s),a.globals.disableZoomIn=!1,a.globals.disableZoomOut=!1,s<.00011574074074074075?a.globals.disableZoomIn=!0:s>5e4&&(a.globals.disableZoomOut=!0);var n=r.getTimeUnitsfromTimestamp(t,e,this.utc),o=a.globals.gridWidth/s,l=o/24,c=l/60,h=c/60,d=Math.floor(24*s),u=Math.floor(1440*s),g=Math.floor(86400*s),f=Math.floor(s),p=Math.floor(s/30),x=Math.floor(s/365),b={minMillisecond:n.minMillisecond,minSecond:n.minSecond,minMinute:n.minMinute,minHour:n.minHour,minDate:n.minDate,minMonth:n.minMonth,minYear:n.minYear},v={firstVal:b,currentMillisecond:b.minMillisecond,currentSecond:b.minSecond,currentMinute:b.minMinute,currentHour:b.minHour,currentMonthDate:b.minDate,currentDate:b.minDate,currentMonth:b.minMonth,currentYear:b.minYear,daysWidthOnXAxis:o,hoursWidthOnXAxis:l,minutesWidthOnXAxis:c,secondsWidthOnXAxis:h,numberOfSeconds:g,numberOfMinutes:u,numberOfHours:d,numberOfDays:f,numberOfMonths:p,numberOfYears:x};switch(this.tickInterval){case\"years\":this.generateYearScale(v);break;case\"months\":case\"half_year\":this.generateMonthScale(v);break;case\"months_days\":case\"months_fortnight\":case\"days\":case\"week_days\":this.generateDayScale(v);break;case\"hours\":this.generateHourScale(v);break;case\"minutes_fives\":case\"minutes\":this.generateMinuteScale(v);break;case\"seconds_tens\":case\"seconds_fives\":case\"seconds\":this.generateSecondScale(v)}var m=this.timeScaleArray.map((function(t){var e={position:t.position,unit:t.unit,year:t.year,day:t.day?t.day:1,hour:t.hour?t.hour:0,month:t.month+1};return\"month\"===t.unit?ca(ca({},e),{},{day:1,value:t.value+1}):\"day\"===t.unit||\"hour\"===t.unit?ca(ca({},e),{},{value:t.value}):\"minute\"===t.unit?ca(ca({},e),{},{value:t.value,minute:t.value}):\"second\"===t.unit?ca(ca({},e),{},{value:t.value,minute:t.minute,second:t.second}):t}));return m.filter((function(t){var e=1,r=Math.ceil(a.globals.gridWidth/120),s=t.value;void 0!==a.config.xaxis.tickAmount&&(r=a.config.xaxis.tickAmount),m.length>r&&(e=Math.floor(m.length/r));var n=!1,o=!1;switch(i.tickInterval){case\"years\":\"year\"===t.unit&&(n=!0);break;case\"half_year\":e=7,\"year\"===t.unit&&(n=!0);break;case\"months\":e=1,\"year\"===t.unit&&(n=!0);break;case\"months_fortnight\":e=15,\"year\"!==t.unit&&\"month\"!==t.unit||(n=!0),30===s&&(o=!0);break;case\"months_days\":e=10,\"month\"===t.unit&&(n=!0),30===s&&(o=!0);break;case\"week_days\":e=8,\"month\"===t.unit&&(n=!0);break;case\"days\":e=1,\"month\"===t.unit&&(n=!0);break;case\"hours\":\"day\"===t.unit&&(n=!0);break;case\"minutes_fives\":case\"seconds_fives\":s%5!=0&&(o=!0);break;case\"seconds_tens\":s%10!=0&&(o=!0)}if(\"hours\"===i.tickInterval||\"minutes_fives\"===i.tickInterval||\"seconds_tens\"===i.tickInterval||\"seconds_fives\"===i.tickInterval){if(!o)return!0}else if((s%e==0||n)&&!o)return!0}))}},{key:\"recalcDimensionsBasedOnFormat\",value:function(t,e){var i=this.w,a=this.formatDates(t),r=this.removeOverlappingTS(a);i.globals.timescaleLabels=r.slice(),new Kt(this.ctx).plotCoords()}},{key:\"determineInterval\",value:function(t){var e=24*t,i=60*e;switch(!0){case t/365>5:this.tickInterval=\"years\";break;case t>800:this.tickInterval=\"half_year\";break;case t>180:this.tickInterval=\"months\";break;case t>90:this.tickInterval=\"months_fortnight\";break;case t>60:this.tickInterval=\"months_days\";break;case t>30:this.tickInterval=\"week_days\";break;case t>2:this.tickInterval=\"days\";break;case e>2.4:this.tickInterval=\"hours\";break;case i>15:this.tickInterval=\"minutes_fives\";break;case i>5:this.tickInterval=\"minutes\";break;case i>1:this.tickInterval=\"seconds_tens\";break;case 60*i>20:this.tickInterval=\"seconds_fives\";break;default:this.tickInterval=\"seconds\"}}},{key:\"generateYearScale\",value:function(t){var e=t.firstVal,i=t.currentMonth,a=t.currentYear,s=t.daysWidthOnXAxis,n=t.numberOfYears,o=e.minYear,l=0,c=new M(this.ctx),h=\"year\";if(e.minDate>1||e.minMonth>0){var d=c.determineRemainingDaysOfYear(e.minYear,e.minMonth,e.minDate);l=(c.determineDaysOfYear(e.minYear)-d+1)*s,o=e.minYear+1,this.timeScaleArray.push({position:l,value:o,unit:h,year:o,month:r.monthMod(i+1)})}else 1===e.minDate&&0===e.minMonth&&this.timeScaleArray.push({position:l,value:o,unit:h,year:a,month:r.monthMod(i+1)});for(var u=o,g=l,f=0;f<n;f++)u++,g=c.determineDaysOfYear(u-1)*s+g,this.timeScaleArray.push({position:g,value:u,unit:h,year:u,month:1})}},{key:\"generateMonthScale\",value:function(t){var e=t.firstVal,i=t.currentMonthDate,a=t.currentMonth,s=t.currentYear,n=t.daysWidthOnXAxis,o=t.numberOfMonths,l=a,c=0,h=new M(this.ctx),d=\"month\",u=0;if(e.minDate>1){c=(h.determineDaysOfMonths(a+1,e.minYear)-i+1)*n,l=r.monthMod(a+1);var g=s+u,f=r.monthMod(l),p=l;0===l&&(d=\"year\",p=g,f=1,g+=u+=1),this.timeScaleArray.push({position:c,value:p,unit:d,year:g,month:f})}else this.timeScaleArray.push({position:c,value:l,unit:d,year:s,month:r.monthMod(a)});for(var x=l+1,b=c,v=0,m=1;v<o;v++,m++){0===(x=r.monthMod(x))?(d=\"year\",u+=1):d=\"month\";var y=this._getYear(s,x,u);b=h.determineDaysOfMonths(x,y)*n+b;var w=0===x?y:x;this.timeScaleArray.push({position:b,value:w,unit:d,year:y,month:0===x?1:x}),x++}}},{key:\"generateDayScale\",value:function(t){var e=t.firstVal,i=t.currentMonth,a=t.currentYear,s=t.hoursWidthOnXAxis,n=t.numberOfDays,o=new M(this.ctx),l=\"day\",c=e.minDate+1,h=c,d=function(t,e,i){return t>o.determineDaysOfMonths(e+1,i)?(h=1,l=\"month\",g=e+=1,e):e},u=(24-e.minHour)*s,g=c,f=d(h,i,a);0===e.minHour&&1===e.minDate?(u=0,g=r.monthMod(e.minMonth),l=\"month\",h=e.minDate,n++):1!==e.minDate&&0===e.minHour&&0===e.minMinute&&(u=0,c=e.minDate,g=c,f=d(h=c,i,a)),this.timeScaleArray.push({position:u,value:g,unit:l,year:this._getYear(a,f,0),month:r.monthMod(f),day:h});for(var p=u,x=0;x<n;x++){l=\"day\",f=d(h+=1,f,this._getYear(a,f,0));var b=this._getYear(a,f,0);p=24*s+p;var v=1===h?r.monthMod(f):h;this.timeScaleArray.push({position:p,value:v,unit:l,year:b,month:r.monthMod(f),day:v})}}},{key:\"generateHourScale\",value:function(t){var e=t.firstVal,i=t.currentDate,a=t.currentMonth,s=t.currentYear,n=t.minutesWidthOnXAxis,o=t.numberOfHours,l=new M(this.ctx),c=\"hour\",h=function(t,e){return t>l.determineDaysOfMonths(e+1,s)&&(x=1,e+=1),{month:e,date:x}},d=function(t,e){return t>l.determineDaysOfMonths(e+1,s)?e+=1:e},u=60-(e.minMinute+e.minSecond/60),g=u*n,f=e.minHour+1,p=f+1;60===u&&(g=0,p=(f=e.minHour)+1);var x=i,b=d(x,a);this.timeScaleArray.push({position:g,value:f,unit:c,day:x,hour:p,year:s,month:r.monthMod(b)});for(var v=g,m=0;m<o;m++){c=\"hour\",p>=24&&(p=0,c=\"day\",b=h(x+=1,b).month,b=d(x,b));var y=this._getYear(s,b,0);v=60*n+v;var w=0===p?x:p;this.timeScaleArray.push({position:v,value:w,unit:c,hour:p,day:x,year:y,month:r.monthMod(b)}),p++}}},{key:\"generateMinuteScale\",value:function(t){for(var e=t.currentMillisecond,i=t.currentSecond,a=t.currentMinute,s=t.currentHour,n=t.currentDate,o=t.currentMonth,l=t.currentYear,c=t.minutesWidthOnXAxis,h=t.secondsWidthOnXAxis,d=t.numberOfMinutes,u=a+1,g=n,f=o,p=l,x=s,b=(60-i-e/1e3)*h,v=0;v<d;v++)u>=60&&(u=0,24===(x+=1)&&(x=0)),this.timeScaleArray.push({position:b,value:u,unit:\"minute\",hour:x,minute:u,day:g,year:this._getYear(p,f,0),month:r.monthMod(f)}),b+=c,u++}},{key:\"generateSecondScale\",value:function(t){for(var e=t.currentMillisecond,i=t.currentSecond,a=t.currentMinute,s=t.currentHour,n=t.currentDate,o=t.currentMonth,l=t.currentYear,c=t.secondsWidthOnXAxis,h=t.numberOfSeconds,d=i+1,u=a,g=n,f=o,p=l,x=s,b=(1e3-e)/1e3*c,v=0;v<h;v++)d>=60&&(d=0,++u>=60&&(u=0,24==++x&&(x=0))),this.timeScaleArray.push({position:b,value:d,unit:\"second\",hour:x,minute:u,second:d,day:g,year:this._getYear(p,f,0),month:r.monthMod(f)}),b+=c,d++}},{key:\"createRawDateString\",value:function(t,e){var i=t.year;return 0===t.month&&(t.month=1),i+=\"-\"+(\"0\"+t.month.toString()).slice(-2),\"day\"===t.unit?i+=\"day\"===t.unit?\"-\"+(\"0\"+e).slice(-2):\"-01\":i+=\"-\"+(\"0\"+(t.day?t.day:\"1\")).slice(-2),\"hour\"===t.unit?i+=\"hour\"===t.unit?\"T\"+(\"0\"+e).slice(-2):\"T00\":i+=\"T\"+(\"0\"+(t.hour?t.hour:\"0\")).slice(-2),\"minute\"===t.unit?i+=\":\"+(\"0\"+e).slice(-2):i+=\":\"+(t.minute?(\"0\"+t.minute).slice(-2):\"00\"),\"second\"===t.unit?i+=\":\"+(\"0\"+e).slice(-2):i+=\":00\",this.utc&&(i+=\".000Z\"),i}},{key:\"formatDates\",value:function(t){var e=this,i=this.w;return t.map((function(t){var a=t.value.toString(),r=new M(e.ctx),s=e.createRawDateString(t,a),n=r.getDate(r.parseDate(s));if(e.utc||(n=r.getDate(r.parseDateWithTimezone(s))),void 0===i.config.xaxis.labels.format){var o=\"dd MMM\",l=i.config.xaxis.labels.datetimeFormatter;\"year\"===t.unit&&(o=l.year),\"month\"===t.unit&&(o=l.month),\"day\"===t.unit&&(o=l.day),\"hour\"===t.unit&&(o=l.hour),\"minute\"===t.unit&&(o=l.minute),\"second\"===t.unit&&(o=l.second),a=r.formatDate(n,o)}else a=r.formatDate(n,i.config.xaxis.labels.format);return{dateString:s,position:t.position,value:a,unit:t.unit,year:t.year,month:t.month}}))}},{key:\"removeOverlappingTS\",value:function(t){var e,i=this,a=new g(this.ctx),r=!1;t.length>0&&t[0].value&&t.every((function(e){return e.value.length===t[0].value.length}))&&(r=!0,e=a.getTextRects(t[0].value).width);var s=0,n=t.map((function(n,o){if(o>0&&i.w.config.xaxis.labels.hideOverlappingLabels){var l=r?e:a.getTextRects(t[s].value).width,c=t[s].position;return n.position>c+l+10?(s=o,n):null}return n}));return n.filter((function(t){return null!==t}))}},{key:\"_getYear\",value:function(t,e,i){return t+Math.floor(e/12)+i}}])&&da(e.prototype,i),t}();function ga(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function fa(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?ga(Object(i),!0).forEach((function(e){pa(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):ga(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function pa(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function xa(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}function ba(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var va=function(){function t(e,i){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=i,this.w=i.w,this.el=e}var e,i;return e=t,(i=[{key:\"setupElements\",value:function(){var t=this.w.globals,e=this.w.config,i=e.chart.type;t.axisCharts=[\"line\",\"area\",\"bar\",\"rangeBar\",\"rangeArea\",\"candlestick\",\"boxPlot\",\"scatter\",\"bubble\",\"radar\",\"heatmap\",\"treemap\"].indexOf(i)>-1,t.xyCharts=[\"line\",\"area\",\"bar\",\"rangeBar\",\"rangeArea\",\"candlestick\",\"boxPlot\",\"scatter\",\"bubble\"].indexOf(i)>-1,t.isBarHorizontal=(\"bar\"===e.chart.type||\"rangeBar\"===e.chart.type||\"boxPlot\"===e.chart.type)&&e.plotOptions.bar.horizontal,t.chartClass=\".apexcharts\"+t.chartID,t.dom.baseEl=this.el,t.dom.elWrap=document.createElement(\"div\"),g.setAttrs(t.dom.elWrap,{id:t.chartClass.substring(1),class:\"apexcharts-canvas \"+t.chartClass.substring(1)}),this.el.appendChild(t.dom.elWrap),t.dom.Paper=new window.SVG.Doc(t.dom.elWrap),t.dom.Paper.attr({class:\"apexcharts-svg\",\"xmlns:data\":\"ApexChartsNS\",transform:\"translate(\".concat(e.chart.offsetX,\", \").concat(e.chart.offsetY,\")\")}),t.dom.Paper.node.style.background=e.chart.background,this.setSVGDimensions(),t.dom.elLegendForeign=document.createElementNS(t.SVGNS,\"foreignObject\"),g.setAttrs(t.dom.elLegendForeign,{x:0,y:0,width:t.svgWidth,height:t.svgHeight}),t.dom.elLegendWrap=document.createElement(\"div\"),t.dom.elLegendWrap.classList.add(\"apexcharts-legend\"),t.dom.elLegendWrap.setAttribute(\"xmlns\",\"http://www.w3.org/1999/xhtml\"),t.dom.elLegendForeign.appendChild(t.dom.elLegendWrap),t.dom.Paper.node.appendChild(t.dom.elLegendForeign),t.dom.elGraphical=t.dom.Paper.group().attr({class:\"apexcharts-inner apexcharts-graphical\"}),t.dom.elDefs=t.dom.Paper.defs(),t.dom.Paper.add(t.dom.elGraphical),t.dom.elGraphical.add(t.dom.elDefs)}},{key:\"plotChartType\",value:function(t,e){var i=this.w,a=i.config,r=i.globals,s={series:[],i:[]},n={series:[],i:[]},o={series:[],i:[]},l={series:[],i:[]},c={series:[],i:[]},h={series:[],i:[]},d={series:[],i:[]},u={series:[],i:[]},g={series:[],seriesRangeEnd:[],i:[]};r.series.map((function(e,f){var p=0;void 0!==t[f].type?(\"column\"===t[f].type||\"bar\"===t[f].type?(r.series.length>1&&a.plotOptions.bar.horizontal&&console.warn(\"Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`\"),c.series.push(e),c.i.push(f),p++,i.globals.columnSeries=c.series):\"area\"===t[f].type?(n.series.push(e),n.i.push(f),p++):\"line\"===t[f].type?(s.series.push(e),s.i.push(f),p++):\"scatter\"===t[f].type?(o.series.push(e),o.i.push(f)):\"bubble\"===t[f].type?(l.series.push(e),l.i.push(f),p++):\"candlestick\"===t[f].type?(h.series.push(e),h.i.push(f),p++):\"boxPlot\"===t[f].type?(d.series.push(e),d.i.push(f),p++):\"rangeBar\"===t[f].type?(u.series.push(e),u.i.push(f),p++):\"rangeArea\"===t[f].type?(g.series.push(r.seriesRangeStart[f]),g.seriesRangeEnd.push(r.seriesRangeEnd[f]),g.i.push(f),p++):console.warn(\"You have specified an unrecognized chart type. Available types for this property are line/area/column/bar/scatter/bubble/candlestick/boxPlot/rangeBar/rangeArea\"),p>1&&(r.comboCharts=!0)):(s.series.push(e),s.i.push(f))}));var f=new sa(this.ctx,e),p=new Si(this.ctx,e);this.ctx.pie=new zi(this.ctx);var x=new Gi(this.ctx);this.ctx.rangeBar=new Qi(this.ctx,e);var b=new Hi(this.ctx),v=[];if(r.comboCharts){if(n.series.length>0&&v.push(f.draw(n.series,\"area\",n.i)),c.series.length>0)if(i.config.chart.stacked){var m=new xi(this.ctx,e);v.push(m.draw(c.series,c.i))}else this.ctx.bar=new li(this.ctx,e),v.push(this.ctx.bar.draw(c.series,c.i));if(g.series.length>0&&v.push(f.draw(g.series,\"rangeArea\",g.i,g.seriesRangeEnd)),s.series.length>0&&v.push(f.draw(s.series,\"line\",s.i)),h.series.length>0&&v.push(p.draw(h.series,\"candlestick\",h.i)),d.series.length>0&&v.push(p.draw(d.series,\"boxPlot\",d.i)),u.series.length>0&&v.push(this.ctx.rangeBar.draw(u.series,u.i)),o.series.length>0){var y=new sa(this.ctx,e,!0);v.push(y.draw(o.series,\"scatter\",o.i))}if(l.series.length>0){var w=new sa(this.ctx,e,!0);v.push(w.draw(l.series,\"bubble\",l.i))}}else switch(a.chart.type){case\"line\":v=f.draw(r.series,\"line\");break;case\"area\":v=f.draw(r.series,\"area\");break;case\"bar\":a.chart.stacked?v=new xi(this.ctx,e).draw(r.series):(this.ctx.bar=new li(this.ctx,e),v=this.ctx.bar.draw(r.series));break;case\"candlestick\":v=new Si(this.ctx,e).draw(r.series,\"candlestick\");break;case\"boxPlot\":v=new Si(this.ctx,e).draw(r.series,a.chart.type);break;case\"rangeBar\":v=this.ctx.rangeBar.draw(r.series);break;case\"rangeArea\":v=f.draw(r.seriesRangeStart,\"rangeArea\",void 0,r.seriesRangeEnd);break;case\"heatmap\":v=new Ii(this.ctx,e).draw(r.series);break;case\"treemap\":v=new oa(this.ctx,e).draw(r.series);break;case\"pie\":case\"donut\":case\"polarArea\":v=this.ctx.pie.draw(r.series);break;case\"radialBar\":v=x.draw(r.series);break;case\"radar\":v=b.draw(r.series);break;default:v=f.draw(r.series)}return v}},{key:\"setSVGDimensions\",value:function(){var t=this.w.globals,e=this.w.config;t.svgWidth=e.chart.width,t.svgHeight=e.chart.height;var i=r.getDimensions(this.el),a=e.chart.width.toString().split(/[0-9]+/g).pop();\"%\"===a?r.isNumber(i[0])&&(0===i[0].width&&(i=r.getDimensions(this.el.parentNode)),t.svgWidth=i[0]*parseInt(e.chart.width,10)/100):\"px\"!==a&&\"\"!==a||(t.svgWidth=parseInt(e.chart.width,10));var s=e.chart.height.toString().split(/[0-9]+/g).pop();if(\"auto\"!==t.svgHeight&&\"\"!==t.svgHeight)if(\"%\"===s){var n=r.getDimensions(this.el.parentNode);t.svgHeight=n[1]*parseInt(e.chart.height,10)/100}else t.svgHeight=parseInt(e.chart.height,10);else t.axisCharts?t.svgHeight=t.svgWidth/1.61:t.svgHeight=t.svgWidth/1.2;if(t.svgWidth<0&&(t.svgWidth=0),t.svgHeight<0&&(t.svgHeight=0),g.setAttrs(t.dom.Paper.node,{width:t.svgWidth,height:t.svgHeight}),\"%\"!==s){var o=e.chart.sparkline.enabled?0:t.axisCharts?e.chart.parentHeightOffset:0;t.dom.Paper.node.parentNode.parentNode.style.minHeight=t.svgHeight+o+\"px\"}t.dom.elWrap.style.width=t.svgWidth+\"px\",t.dom.elWrap.style.height=t.svgHeight+\"px\"}},{key:\"shiftGraphPosition\",value:function(){var t=this.w.globals,e=t.translateY,i={transform:\"translate(\"+t.translateX+\", \"+e+\")\"};g.setAttrs(t.dom.elGraphical.node,i)}},{key:\"resizeNonAxisCharts\",value:function(){var t=this.w,e=t.globals,i=0,a=t.config.chart.sparkline.enabled?1:15;a+=t.config.grid.padding.bottom,\"top\"!==t.config.legend.position&&\"bottom\"!==t.config.legend.position||!t.config.legend.show||t.config.legend.floating||(i=new ae(this.ctx).legendHelpers.getLegendBBox().clwh+10);var s=t.globals.dom.baseEl.querySelector(\".apexcharts-radialbar, .apexcharts-pie\"),n=2.05*t.globals.radialSize;if(s&&!t.config.chart.sparkline.enabled&&0!==t.config.plotOptions.radialBar.startAngle){var o=r.getBoundingClientRect(s);n=o.bottom;var l=o.bottom-o.top;n=Math.max(2.05*t.globals.radialSize,l)}var c=n+e.translateY+i+a;e.dom.elLegendForeign&&e.dom.elLegendForeign.setAttribute(\"height\",c),t.config.chart.height&&String(t.config.chart.height).indexOf(\"%\")>0||(e.dom.elWrap.style.height=c+\"px\",g.setAttrs(e.dom.Paper.node,{height:c}),e.dom.Paper.node.parentNode.parentNode.style.minHeight=c+\"px\")}},{key:\"coreCalculations\",value:function(){new Ct(this.ctx).init()}},{key:\"resetGlobals\",value:function(){var t=this,e=function(){return t.w.config.series.map((function(t){return[]}))},i=new _,a=this.w.globals;i.initGlobalVars(a),a.seriesXvalues=e(),a.seriesYvalues=e()}},{key:\"isMultipleY\",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.globals.isMultipleYAxis=!0,!0}},{key:\"xySettings\",value:function(){var t=null,e=this.w;if(e.globals.axisCharts){if(\"back\"===e.config.xaxis.crosshairs.position&&new Yt(this.ctx).drawXCrosshairs(),\"back\"===e.config.yaxis[0].crosshairs.position&&new Yt(this.ctx).drawYCrosshairs(),\"datetime\"===e.config.xaxis.type&&void 0===e.config.xaxis.labels.formatter){this.ctx.timeScale=new ua(this.ctx);var i=[];isFinite(e.globals.minX)&&isFinite(e.globals.maxX)&&!e.globals.isBarHorizontal?i=this.ctx.timeScale.calculateTimeScaleTicks(e.globals.minX,e.globals.maxX):e.globals.isBarHorizontal&&(i=this.ctx.timeScale.calculateTimeScaleTicks(e.globals.minY,e.globals.maxY)),this.ctx.timeScale.recalcDimensionsBasedOnFormat(i)}t=new p(this.ctx).getCalculatedRatios()}return t}},{key:\"updateSourceChart\",value:function(t){this.ctx.w.globals.selection=void 0,this.ctx.updateHelpers._updateOptions({chart:{selection:{xaxis:{min:t.w.globals.minX,max:t.w.globals.maxX}}}},!1,!1)}},{key:\"setupBrushHandler\",value:function(){var t=this,e=this.w;if(e.config.chart.brush.enabled&&\"function\"!=typeof e.config.chart.events.selection){var i=e.config.chart.brush.targets||[e.config.chart.brush.target];i.forEach((function(e){var i=ApexCharts.getChartByID(e);i.w.globals.brushSource=t.ctx,\"function\"!=typeof i.w.config.chart.events.zoomed&&(i.w.config.chart.events.zoomed=function(){t.updateSourceChart(i)}),\"function\"!=typeof i.w.config.chart.events.scrolled&&(i.w.config.chart.events.scrolled=function(){t.updateSourceChart(i)})})),e.config.chart.events.selection=function(t,a){i.forEach((function(t){var i=ApexCharts.getChartByID(t),s=r.clone(e.config.yaxis);if(e.config.chart.brush.autoScaleYaxis&&1===i.w.globals.series.length){var n=new kt(i);s=n.autoScaleY(i,s,a)}var o=i.w.config.yaxis.reduce((function(t,e,a){return[].concat(function(t){if(Array.isArray(t))return xa(t)}(r=t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(r)||function(t,e){if(t){if(\"string\"==typeof t)return xa(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?xa(t,e):void 0}}(r)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}(),[fa(fa({},i.w.config.yaxis[a]),{},{min:s[0].min,max:s[0].max})]);var r}),[]);i.ctx.updateHelpers._updateOptions({xaxis:{min:a.xaxis.min,max:a.xaxis.max},yaxis:o},!1,!1,!1,!1)}))}}}}])&&ba(e.prototype,i),t}();function ma(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function ya(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?ma(Object(i),!0).forEach((function(e){wa(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):ma(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function wa(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function ka(t){return ka=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},ka(t)}function Aa(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Sa=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,i=[{key:\"_updateOptions\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],n=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return new Promise((function(o){var l=[e.ctx];s&&(l=e.ctx.getSyncedCharts()),e.ctx.w.globals.isExecCalled&&(l=[e.ctx],e.ctx.w.globals.isExecCalled=!1),l.forEach((function(s,c){var h=s.w;if(h.globals.shouldAnimate=a,i||(h.globals.resized=!0,h.globals.dataChanged=!0,a&&s.series.getPreviousPaths()),t&&\"object\"===ka(t)&&(s.config=new G(t),t=p.extendArrayProps(s.config,t,h),s.w.globals.chartID!==e.ctx.w.globals.chartID&&delete t.series,h.config=r.extend(h.config,t),n&&(h.globals.lastXAxis=t.xaxis?r.clone(t.xaxis):[],h.globals.lastYAxis=t.yaxis?r.clone(t.yaxis):[],h.globals.initialConfig=r.extend({},h.config),h.globals.initialSeries=r.clone(h.config.series),t.series))){for(var d=0;d<h.globals.collapsedSeriesIndices.length;d++){var u=h.config.series[h.globals.collapsedSeriesIndices[d]];h.globals.collapsedSeries[d].data=h.globals.axisCharts?u.data.slice():u}for(var g=0;g<h.globals.ancillaryCollapsedSeriesIndices.length;g++){var f=h.config.series[h.globals.ancillaryCollapsedSeriesIndices[g]];h.globals.ancillaryCollapsedSeries[g].data=h.globals.axisCharts?f.data.slice():f}s.series.emptyCollapsedSeries(h.config.series)}return s.update(t).then((function(){c===l.length-1&&o(s)}))}))}))}},{key:\"_updateSeries\",value:function(t,e){var i=this,a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return new Promise((function(s){var n,o=i.w;return o.globals.shouldAnimate=e,o.globals.dataChanged=!0,e&&i.ctx.series.getPreviousPaths(),o.globals.axisCharts?(0===(n=t.map((function(t,e){return i._extendSeries(t,e)}))).length&&(n=[{data:[]}]),o.config.series=n):o.config.series=t.slice(),a&&(o.globals.initialConfig.series=r.clone(o.config.series),o.globals.initialSeries=r.clone(o.config.series)),i.ctx.update().then((function(){s(i.ctx)}))}))}},{key:\"_extendSeries\",value:function(t,e){var i=this.w,a=i.config.series[e];return ya(ya({},i.config.series[e]),{},{name:t.name?t.name:a&&a.name,color:t.color?t.color:a&&a.color,type:t.type?t.type:a&&a.type,data:t.data?t.data:a&&a.data})}},{key:\"toggleDataPointSelection\",value:function(t,e){var i=this.w,a=null,r=\".apexcharts-series[data\\\\:realIndex='\".concat(t,\"']\");return i.globals.axisCharts?a=i.globals.dom.Paper.select(\"\".concat(r,\" path[j='\").concat(e,\"'], \").concat(r,\" circle[j='\").concat(e,\"'], \").concat(r,\" rect[j='\").concat(e,\"']\")).members[0]:void 0===e&&(a=i.globals.dom.Paper.select(\"\".concat(r,\" path[j='\").concat(t,\"']\")).members[0],\"pie\"!==i.config.chart.type&&\"polarArea\"!==i.config.chart.type&&\"donut\"!==i.config.chart.type||this.ctx.pie.pieClicked(t)),a?(new g(this.ctx).pathMouseDown(a,null),a.node?a.node:null):(console.warn(\"toggleDataPointSelection: Element not found\"),null)}},{key:\"forceXAxisUpdate\",value:function(t){var e=this.w;if([\"min\",\"max\"].forEach((function(i){void 0!==t.xaxis[i]&&(e.config.xaxis[i]=t.xaxis[i],e.globals.lastXAxis[i]=t.xaxis[i])})),t.xaxis.categories&&t.xaxis.categories.length&&(e.config.xaxis.categories=t.xaxis.categories),e.config.xaxis.convertedCatToNumeric){var i=new W(t);t=i.convertCatToNumericXaxis(t,this.ctx)}return t}},{key:\"forceYAxisUpdate\",value:function(t){return t.chart&&t.chart.stacked&&\"100%\"===t.chart.stackType&&(Array.isArray(t.yaxis)?t.yaxis.forEach((function(e,i){t.yaxis[i].min=0,t.yaxis[i].max=100})):(t.yaxis.min=0,t.yaxis.max=100)),t}},{key:\"revertDefaultAxisMinMax\",value:function(t){var e=this,i=this.w,a=i.globals.lastXAxis,r=i.globals.lastYAxis;t&&t.xaxis&&(a=t.xaxis),t&&t.yaxis&&(r=t.yaxis),i.config.xaxis.min=a.min,i.config.xaxis.max=a.max;i.config.yaxis.map((function(t,a){i.globals.zoomed||void 0!==r[a]?function(t){void 0!==r[t]&&(i.config.yaxis[t].min=r[t].min,i.config.yaxis[t].max=r[t].max)}(a):void 0!==e.ctx.opts.yaxis[a]&&(t.min=e.ctx.opts.yaxis[a].min,t.max=e.ctx.opts.yaxis[a].max)}))}}],i&&Aa(e.prototype,i),t}();function Ca(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}i(482),i(872),i(25),i(372),i(769),i(882),void 0===window.Apex&&(window.Apex={});var Pa=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,(i=[{key:\"initModules\",value:function(){this.ctx.publicMethods=[\"updateOptions\",\"updateSeries\",\"appendData\",\"appendSeries\",\"toggleSeries\",\"showSeries\",\"hideSeries\",\"setLocale\",\"resetSeries\",\"zoomX\",\"toggleDataPointSelection\",\"dataURI\",\"exportToCSV\",\"addXaxisAnnotation\",\"addYaxisAnnotation\",\"addPointAnnotation\",\"clearAnnotations\",\"removeAnnotation\",\"paper\",\"destroy\"],this.ctx.eventList=[\"click\",\"mousedown\",\"mousemove\",\"mouseleave\",\"touchstart\",\"touchmove\",\"touchleave\",\"mouseup\",\"touchend\"],this.ctx.animations=new n(this.ctx),this.ctx.axes=new Xt(this.ctx),this.ctx.core=new va(this.ctx.el,this.ctx),this.ctx.config=new G({}),this.ctx.data=new ht(this.ctx),this.ctx.grid=new yt(this.ctx),this.ctx.graphics=new g(this.ctx),this.ctx.coreUtils=new p(this.ctx),this.ctx.crosshairs=new Yt(this.ctx),this.ctx.events=new Tt(this.ctx),this.ctx.exports=new xt(this.ctx),this.ctx.localization=new Et(this.ctx),this.ctx.options=new P,this.ctx.responsive=new Dt(this.ctx),this.ctx.series=new ot(this.ctx),this.ctx.theme=new Ht(this.ctx),this.ctx.formatters=new z(this.ctx),this.ctx.titleSubtitle=new Wt(this.ctx),this.ctx.legend=new ae(this.ctx),this.ctx.toolbar=new me(this.ctx),this.ctx.tooltip=new Ue(this.ctx),this.ctx.dimensions=new Kt(this.ctx),this.ctx.updateHelpers=new Sa(this.ctx),this.ctx.zoomPanSelection=new Se(this.ctx),this.ctx.w.globals.tooltip=new Ue(this.ctx)}}])&&Ca(e.prototype,i),t}();function La(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Oa=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.ctx=e,this.w=e.w}var e,i;return e=t,(i=[{key:\"clear\",value:function(t){var e=t.isUpdating;this.ctx.zoomPanSelection&&this.ctx.zoomPanSelection.destroy(),this.ctx.toolbar&&this.ctx.toolbar.destroy(),this.ctx.animations=null,this.ctx.axes=null,this.ctx.annotations=null,this.ctx.core=null,this.ctx.data=null,this.ctx.grid=null,this.ctx.series=null,this.ctx.responsive=null,this.ctx.theme=null,this.ctx.formatters=null,this.ctx.titleSubtitle=null,this.ctx.legend=null,this.ctx.dimensions=null,this.ctx.options=null,this.ctx.crosshairs=null,this.ctx.zoomPanSelection=null,this.ctx.updateHelpers=null,this.ctx.toolbar=null,this.ctx.localization=null,this.ctx.w.globals.tooltip=null,this.clearDomElements({isUpdating:e})}},{key:\"killSVG\",value:function(t){t.each((function(t,e){this.removeClass(\"*\"),this.off(),this.stop()}),!0),t.ungroup(),t.clear()}},{key:\"clearDomElements\",value:function(t){var e=this,i=t.isUpdating,a=this.w.globals.dom.Paper.node;a.parentNode&&a.parentNode.parentNode&&!i&&(a.parentNode.parentNode.style.minHeight=\"unset\");var r=this.w.globals.dom.baseEl;r&&this.ctx.eventList.forEach((function(t){r.removeEventListener(t,e.ctx.events.documentEvent)}));var s=this.w.globals.dom;if(null!==this.ctx.el)for(;this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild);this.killSVG(s.Paper),s.Paper.remove(),s.elWrap=null,s.elGraphical=null,s.elLegendWrap=null,s.elLegendForeign=null,s.baseEl=null,s.elGridRect=null,s.elGridRectMask=null,s.elGridRectMarkerMask=null,s.elForecastMask=null,s.elNonForecastMask=null,s.elDefs=null}}])&&La(e.prototype,i),t}(),Ta=new WeakMap,Ia=i(274),Ea=i.n(Ia);function Ma(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}var Xa=function(){function t(e,i){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.opts=i,this.ctx=this,this.w=new q(i).init(),this.el=e,this.w.globals.cuid=r.randomId(),this.w.globals.chartID=this.w.config.chart.id?r.escapeString(this.w.config.chart.id):this.w.globals.cuid,new Pa(this).initModules(),this.create=r.bind(this.create,this),this.windowResizeHandler=this._windowResizeHandler.bind(this),this.parentResizeHandler=this._parentResizeCallback.bind(this)}var e,i,a;return e=t,i=[{key:\"render\",value:function(){var t=this;return new Promise((function(e,i){if(null!==t.el){void 0===Apex._chartInstances&&(Apex._chartInstances=[]),t.w.config.chart.id&&Apex._chartInstances.push({id:t.w.globals.chartID,group:t.w.config.chart.group,chart:t}),t.setLocale(t.w.config.chart.defaultLocale);var a=t.w.config.chart.events.beforeMount;if(\"function\"==typeof a&&a(t,t.w),t.events.fireEvent(\"beforeMount\",[t,t.w]),window.addEventListener(\"resize\",t.windowResizeHandler),function(t,e){var i=!1;if(t.nodeType!==Node.DOCUMENT_FRAGMENT_NODE){var a=t.getBoundingClientRect();\"none\"!==t.style.display&&0!==a.width||(i=!0)}var r=new ResizeObserver((function(a){i&&e.call(t,a),i=!0}));t.nodeType===Node.DOCUMENT_FRAGMENT_NODE?Array.from(t.children).forEach((function(t){return r.observe(t)})):r.observe(t),Ta.set(e,r)}(t.el.parentNode,t.parentResizeHandler),!t.css){var s=t.el.getRootNode&&t.el.getRootNode(),n=r.is(\"ShadowRoot\",s),o=t.el.ownerDocument,l=o.getElementById(\"apexcharts-css\");!n&&l||(t.css=document.createElement(\"style\"),t.css.id=\"apexcharts-css\",t.css.textContent=Ea(),n?s.prepend(t.css):o.head.appendChild(t.css))}var c=t.create(t.w.config.series,{});if(!c)return e(t);t.mount(c).then((function(){\"function\"==typeof t.w.config.chart.events.mounted&&t.w.config.chart.events.mounted(t,t.w),t.events.fireEvent(\"mounted\",[t,t.w]),e(c)})).catch((function(t){i(t)}))}else i(new Error(\"Element not found\"))}))}},{key:\"create\",value:function(t,e){var i=this.w;new Pa(this).initModules();var a=this.w.globals;if(a.noData=!1,a.animationEnded=!1,this.responsive.checkResponsiveConfig(e),i.config.xaxis.convertedCatToNumeric&&new W(i.config).convertCatToNumericXaxis(i.config,this.ctx),null===this.el)return a.animationEnded=!0,null;if(this.core.setupElements(),\"treemap\"===i.config.chart.type&&(i.config.grid.show=!1,i.config.yaxis[0].show=!1),0===a.svgWidth)return a.animationEnded=!0,null;var r=p.checkComboSeries(t);a.comboCharts=r.comboCharts,a.comboBarCount=r.comboBarCount;var s=t.every((function(t){return t.data&&0===t.data.length}));(0===t.length||s)&&this.series.handleNoData(),this.events.setupEventHandlers(),this.data.parseData(t),this.theme.init(),new et(this).setGlobalMarkerSize(),this.formatters.setLabelFormatters(),this.titleSubtitle.draw(),a.noData&&a.collapsedSeries.length!==a.series.length&&!i.config.legend.showForSingleSeries||this.legend.init(),this.series.hasAllSeriesEqualX(),a.axisCharts&&(this.core.coreCalculations(),\"category\"!==i.config.xaxis.type&&this.formatters.setLabelFormatters(),this.ctx.toolbar.minX=i.globals.minX,this.ctx.toolbar.maxX=i.globals.maxX),this.formatters.heatmapLabelFormatters(),new p(this).getLargestMarkerSize(),this.dimensions.plotCoords();var n=this.core.xySettings();this.grid.createGridMask();var o=this.core.plotChartType(t,n),l=new st(this);return l.bringForward(),i.config.dataLabels.background.enabled&&l.dataLabelsBackground(),this.core.shiftGraphPosition(),{elGraph:o,xyRatios:n,dimensions:{plot:{left:i.globals.translateX,top:i.globals.translateY,width:i.globals.gridWidth,height:i.globals.gridHeight}}}}},{key:\"mount\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=this,a=i.w;return new Promise((function(r,s){if(null===i.el)return s(new Error(\"Not enough data to display or target element not found\"));(null===e||a.globals.allSeriesCollapsed)&&i.series.handleNoData(),i.grid=new yt(i);var n=i.grid.drawGrid();if(i.annotations=new O(i),i.annotations.drawImageAnnos(),i.annotations.drawTextAnnos(),\"back\"===a.config.grid.position&&n&&a.globals.dom.elGraphical.add(n.el),Array.isArray(e.elGraph))for(var o=0;o<e.elGraph.length;o++)a.globals.dom.elGraphical.add(e.elGraph[o]);else a.globals.dom.elGraphical.add(e.elGraph);\"front\"===a.config.grid.position&&n&&a.globals.dom.elGraphical.add(n.el),n&&n.elGridBorders&&n.elGridBorders.node&&a.globals.dom.elGraphical.add(n.elGridBorders),\"front\"===a.config.xaxis.crosshairs.position&&i.crosshairs.drawXCrosshairs(),\"front\"===a.config.yaxis[0].crosshairs.position&&i.crosshairs.drawYCrosshairs(),\"treemap\"!==a.config.chart.type&&i.axes.drawAxis(a.config.chart.type,n);var l=new vt(t.ctx,n),c=new Lt(t.ctx,n);if(null!==n&&(l.xAxisLabelCorrections(n.xAxisTickWidth),c.setYAxisTextAlignments(),a.config.yaxis.map((function(t,e){-1===a.globals.ignoreYAxisIndexes.indexOf(e)&&c.yAxisTitleRotate(e,t.opposite)}))),i.annotations.drawAxesAnnotations(),!a.globals.noData){if(a.config.tooltip.enabled&&!a.globals.noData&&i.w.globals.tooltip.drawTooltip(e.xyRatios),a.globals.axisCharts&&(a.globals.isXNumeric||a.config.xaxis.convertedCatToNumeric||a.globals.isRangeBar))(a.config.chart.zoom.enabled||a.config.chart.selection&&a.config.chart.selection.enabled||a.config.chart.pan&&a.config.chart.pan.enabled)&&i.zoomPanSelection.init({xyRatios:e.xyRatios});else{var h=a.config.chart.toolbar.tools;[\"zoom\",\"zoomin\",\"zoomout\",\"selection\",\"pan\",\"reset\"].forEach((function(t){h[t]=!1}))}a.config.chart.toolbar.show&&!a.globals.allSeriesCollapsed&&i.toolbar.createToolbar()}a.globals.memory.methodsToExec.length>0&&a.globals.memory.methodsToExec.forEach((function(t){t.method(t.params,!1,t.context)})),a.globals.axisCharts||a.globals.noData||i.core.resizeNonAxisCharts(),r(i)}))}},{key:\"destroy\",value:function(){var t,e;window.removeEventListener(\"resize\",this.windowResizeHandler),this.el.parentNode,t=this.parentResizeHandler,(e=Ta.get(t))&&(e.disconnect(),Ta.delete(t));var i=this.w.config.chart.id;i&&Apex._chartInstances.forEach((function(t,e){t.id===r.escapeString(i)&&Apex._chartInstances.splice(e,1)})),new Oa(this.ctx).clear({isUpdating:!1})}},{key:\"updateOptions\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],n=this.w;return n.globals.selection=void 0,t.series&&(this.series.resetSeries(!1,!0,!1),t.series.length&&t.series[0].data&&(t.series=t.series.map((function(t,i){return e.updateHelpers._extendSeries(t,i)}))),this.updateHelpers.revertDefaultAxisMinMax()),t.xaxis&&(t=this.updateHelpers.forceXAxisUpdate(t)),t.yaxis&&(t=this.updateHelpers.forceYAxisUpdate(t)),n.globals.collapsedSeriesIndices.length>0&&this.series.clearPreviousPaths(),t.theme&&(t=this.theme.updateThemeOptions(t)),this.updateHelpers._updateOptions(t,i,a,r,s)}},{key:\"updateSeries\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(t,e,i)}},{key:\"appendSeries\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=this.w.config.series.slice();return a.push(t),this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(a,e,i)}},{key:\"appendData\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var a=i.w.config.series.slice(),s=0;s<a.length;s++)if(null!==t[s]&&void 0!==t[s])for(var n=0;n<t[s].data.length;n++)a[s].data.push(t[s].data[n]);return i.w.config.series=a,e&&(i.w.globals.initialSeries=r.clone(i.w.config.series)),this.update()}},{key:\"update\",value:function(t){var e=this;return new Promise((function(i,a){new Oa(e.ctx).clear({isUpdating:!0});var r=e.create(e.w.config.series,t);if(!r)return i(e);e.mount(r).then((function(){\"function\"==typeof e.w.config.chart.events.updated&&e.w.config.chart.events.updated(e,e.w),e.events.fireEvent(\"updated\",[e,e.w]),e.w.globals.isDirty=!0,i(e)})).catch((function(t){a(t)}))}))}},{key:\"getSyncedCharts\",value:function(){var t=this.getGroupedCharts(),e=[this];return t.length&&(e=[],t.forEach((function(t){e.push(t)}))),e}},{key:\"getGroupedCharts\",value:function(){var t=this;return Apex._chartInstances.filter((function(t){if(t.group)return!0})).map((function(e){return t.w.config.chart.group===e.group?e.chart:t}))}},{key:\"toggleSeries\",value:function(t){return this.series.toggleSeries(t)}},{key:\"highlightSeriesOnLegendHover\",value:function(t,e){return this.series.toggleSeriesOnHover(t,e)}},{key:\"showSeries\",value:function(t){this.series.showSeries(t)}},{key:\"hideSeries\",value:function(t){this.series.hideSeries(t)}},{key:\"resetSeries\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.series.resetSeries(t,e)}},{key:\"addEventListener\",value:function(t,e){this.events.addEventListener(t,e)}},{key:\"removeEventListener\",value:function(t,e){this.events.removeEventListener(t,e)}},{key:\"addXaxisAnnotation\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addXaxisAnnotationExternal(t,e,a)}},{key:\"addYaxisAnnotation\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addYaxisAnnotationExternal(t,e,a)}},{key:\"addPointAnnotation\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addPointAnnotationExternal(t,e,a)}},{key:\"clearAnnotations\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,e=this;t&&(e=t),e.annotations.clearAnnotations(e)}},{key:\"removeAnnotation\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,i=this;e&&(i=e),i.annotations.removeAnnotation(i,t)}},{key:\"getChartArea\",value:function(){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-inner\")}},{key:\"getSeriesTotalXRange\",value:function(t,e){return this.coreUtils.getSeriesTotalsXRange(t,e)}},{key:\"getHighestValueInSeries\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new Ct(this.ctx).getMinYMaxY(t).highestY}},{key:\"getLowestValueInSeries\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new Ct(this.ctx).getMinYMaxY(t).lowestY}},{key:\"getSeriesTotal\",value:function(){return this.w.globals.seriesTotals}},{key:\"toggleDataPointSelection\",value:function(t,e){return this.updateHelpers.toggleDataPointSelection(t,e)}},{key:\"zoomX\",value:function(t,e){this.ctx.toolbar.zoomUpdateOptions(t,e)}},{key:\"setLocale\",value:function(t){this.localization.setCurrentLocaleValues(t)}},{key:\"dataURI\",value:function(t){return new xt(this.ctx).dataURI(t)}},{key:\"exportToCSV\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new xt(this.ctx).exportToCSV(t)}},{key:\"paper\",value:function(){return this.w.globals.dom.Paper}},{key:\"_parentResizeCallback\",value:function(){this.w.globals.animationEnded&&this.w.config.chart.redrawOnParentResize&&this._windowResize()}},{key:\"_windowResize\",value:function(){var t=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout((function(){t.w.globals.resized=!0,t.w.globals.dataChanged=!1,t.ctx.update()}),150)}},{key:\"_windowResizeHandler\",value:function(){var t=this.w.config.chart.redrawOnWindowResize;\"function\"==typeof t&&(t=t()),t&&this._windowResize()}}],a=[{key:\"getChartByID\",value:function(t){var e=r.escapeString(t),i=Apex._chartInstances.filter((function(t){return t.id===e}))[0];return i&&i.chart}},{key:\"initOnLoad\",value:function(){for(var e=document.querySelectorAll(\"[data-apexcharts]\"),i=0;i<e.length;i++)new t(e[i],JSON.parse(e[i].getAttribute(\"data-options\"))).render()}},{key:\"exec\",value:function(t,e){var i=this.getChartByID(t);if(i){i.w.globals.isExecCalled=!0;var a=null;if(-1!==i.publicMethods.indexOf(e)){for(var r=arguments.length,s=new Array(r>2?r-2:0),n=2;n<r;n++)s[n-2]=arguments[n];a=i[e].apply(i,s)}return a}}},{key:\"merge\",value:function(t,e){return r.extend(t,e)}}],i&&Ma(e.prototype,i),a&&Ma(e,a),t}()})(),a})()));"
  },
  {
    "path": "public/assets/apexcharts/apexcharts.amd.js.LICENSE.txt",
    "content": "/*!\n* svg.js - A lightweight library for manipulating and animating SVG.\n* @version 2.6.6\n* https://svgdotjs.github.io/\n*/\n\n/*!\n* svg.select.js - An extension of svg.js which allows to select elements with mouse\n* @version 3.0.1\n* https://github.com/svgdotjs/svg.select.js\n*\n* @copyright Ulrich-Matthias Schäfer\n* @license MIT\n*/\n\n/*! svg.draggable.js - v2.2.2 - 2019-01-08\n* https://github.com/svgdotjs/svg.draggable.js\n* Copyright (c) 2019 Wout Fierens; Licensed MIT */\n"
  },
  {
    "path": "public/assets/apexcharts/apexcharts.common.js",
    "content": "/*!\n * ApexCharts v3.41.0\n * (c) 2018-2023 ApexCharts\n * Released under the MIT License.\n */\n\"use strict\";function t(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function e(e){for(var i=1;i<arguments.length;i++){var a=null!=arguments[i]?arguments[i]:{};i%2?t(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):t(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}function a(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function s(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}function r(t,e,i){return e&&s(t.prototype,e),i&&s(t,i),t}function o(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function n(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&h(t,e)}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function h(t,e){return h=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},h(t,e)}function c(t,e){if(e&&(\"object\"==typeof e||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}function d(t){var e=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,a=l(t);if(e){var s=l(this).constructor;i=Reflect.construct(a,arguments,s)}else i=a.apply(this,arguments);return c(this,i)}}function g(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var i=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null==i)return;var a,s,r=[],o=!0,n=!1;try{for(i=i.call(t);!(o=(a=i.next()).done)&&(r.push(a.value),!e||r.length!==e);o=!0);}catch(t){n=!0,s=t}finally{try{o||null==i.return||i.return()}finally{if(n)throw s}}return r}(t,e)||p(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function u(t){return function(t){if(Array.isArray(t))return f(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||p(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function p(t,e){if(t){if(\"string\"==typeof t)return f(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?f(t,e):void 0}}function f(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}var x=function(){function t(){a(this,t)}return r(t,[{key:\"shadeRGBColor\",value:function(t,e){var i=e.split(\",\"),a=t<0?0:255,s=t<0?-1*t:t,r=parseInt(i[0].slice(4),10),o=parseInt(i[1],10),n=parseInt(i[2],10);return\"rgb(\"+(Math.round((a-r)*s)+r)+\",\"+(Math.round((a-o)*s)+o)+\",\"+(Math.round((a-n)*s)+n)+\")\"}},{key:\"shadeHexColor\",value:function(t,e){var i=parseInt(e.slice(1),16),a=t<0?0:255,s=t<0?-1*t:t,r=i>>16,o=i>>8&255,n=255&i;return\"#\"+(16777216+65536*(Math.round((a-r)*s)+r)+256*(Math.round((a-o)*s)+o)+(Math.round((a-n)*s)+n)).toString(16).slice(1)}},{key:\"shadeColor\",value:function(e,i){return t.isColorHex(i)?this.shadeHexColor(e,i):this.shadeRGBColor(e,i)}}],[{key:\"bind\",value:function(t,e){return function(){return t.apply(e,arguments)}}},{key:\"isObject\",value:function(t){return t&&\"object\"===i(t)&&!Array.isArray(t)&&null!=t}},{key:\"is\",value:function(t,e){return Object.prototype.toString.call(e)===\"[object \"+t+\"]\"}},{key:\"listToArray\",value:function(t){var e,i=[];for(e=0;e<t.length;e++)i[e]=t[e];return i}},{key:\"extend\",value:function(t,e){var i=this;\"function\"!=typeof Object.assign&&(Object.assign=function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var a=arguments[i];if(null!=a)for(var s in a)a.hasOwnProperty(s)&&(e[s]=a[s])}return e});var a=Object.assign({},t);return this.isObject(t)&&this.isObject(e)&&Object.keys(e).forEach((function(s){i.isObject(e[s])&&s in t?a[s]=i.extend(t[s],e[s]):Object.assign(a,o({},s,e[s]))})),a}},{key:\"extendArray\",value:function(e,i){var a=[];return e.map((function(e){a.push(t.extend(i,e))})),e=a}},{key:\"monthMod\",value:function(t){return t%12}},{key:\"clone\",value:function(e){if(t.is(\"Array\",e)){for(var a=[],s=0;s<e.length;s++)a[s]=this.clone(e[s]);return a}if(t.is(\"Null\",e))return null;if(t.is(\"Date\",e))return e;if(\"object\"===i(e)){var r={};for(var o in e)e.hasOwnProperty(o)&&(r[o]=this.clone(e[o]));return r}return e}},{key:\"log10\",value:function(t){return Math.log(t)/Math.LN10}},{key:\"roundToBase10\",value:function(t){return Math.pow(10,Math.floor(Math.log10(t)))}},{key:\"roundToBase\",value:function(t,e){return Math.pow(e,Math.floor(Math.log(t)/Math.log(e)))}},{key:\"parseNumber\",value:function(t){return null===t?t:parseFloat(t)}},{key:\"randomId\",value:function(){return(Math.random()+1).toString(36).substring(4)}},{key:\"noExponents\",value:function(t){var e=String(t).split(/[eE]/);if(1===e.length)return e[0];var i=\"\",a=t<0?\"-\":\"\",s=e[0].replace(\".\",\"\"),r=Number(e[1])+1;if(r<0){for(i=a+\"0.\";r++;)i+=\"0\";return i+s.replace(/^-/,\"\")}for(r-=s.length;r--;)i+=\"0\";return s+i}},{key:\"getDimensions\",value:function(t){var e=getComputedStyle(t,null),i=t.clientHeight,a=t.clientWidth;return i-=parseFloat(e.paddingTop)+parseFloat(e.paddingBottom),[a-=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight),i]}},{key:\"getBoundingClientRect\",value:function(t){var e=t.getBoundingClientRect();return{top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:t.clientWidth,height:t.clientHeight,x:e.left,y:e.top}}},{key:\"getLargestStringFromArr\",value:function(t){return t.reduce((function(t,e){return Array.isArray(e)&&(e=e.reduce((function(t,e){return t.length>e.length?t:e}))),t.length>e.length?t:e}),0)}},{key:\"hexToRgba\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"#999999\",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.6;\"#\"!==t.substring(0,1)&&(t=\"#999999\");var i=t.replace(\"#\",\"\");i=i.match(new RegExp(\"(.{\"+i.length/3+\"})\",\"g\"));for(var a=0;a<i.length;a++)i[a]=parseInt(1===i[a].length?i[a]+i[a]:i[a],16);return void 0!==e&&i.push(e),\"rgba(\"+i.join(\",\")+\")\"}},{key:\"getOpacityFromRGBA\",value:function(t){return parseFloat(t.replace(/^.*,(.+)\\)/,\"$1\"))}},{key:\"rgb2hex\",value:function(t){return(t=t.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i))&&4===t.length?\"#\"+(\"0\"+parseInt(t[1],10).toString(16)).slice(-2)+(\"0\"+parseInt(t[2],10).toString(16)).slice(-2)+(\"0\"+parseInt(t[3],10).toString(16)).slice(-2):\"\"}},{key:\"isColorHex\",value:function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)/i.test(t)}},{key:\"getPolygonPos\",value:function(t,e){for(var i=[],a=2*Math.PI/e,s=0;s<e;s++){var r={};r.x=t*Math.sin(s*a),r.y=-t*Math.cos(s*a),i.push(r)}return i}},{key:\"polarToCartesian\",value:function(t,e,i,a){var s=(a-90)*Math.PI/180;return{x:t+i*Math.cos(s),y:e+i*Math.sin(s)}}},{key:\"escapeString\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"x\",i=t.toString().slice();return i=i.replace(/[` ~!@#$%^&*()|+\\=?;:'\",.<>{}[\\]\\\\/]/gi,e)}},{key:\"negToZero\",value:function(t){return t<0?0:t}},{key:\"moveIndexInArray\",value:function(t,e,i){if(i>=t.length)for(var a=i-t.length+1;a--;)t.push(void 0);return t.splice(i,0,t.splice(e,1)[0]),t}},{key:\"extractNumber\",value:function(t){return parseFloat(t.replace(/[^\\d.]*/g,\"\"))}},{key:\"findAncestor\",value:function(t,e){for(;(t=t.parentElement)&&!t.classList.contains(e););return t}},{key:\"setELstyles\",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t.style.key=e[i])}},{key:\"isNumber\",value:function(t){return!isNaN(t)&&parseFloat(Number(t))===t&&!isNaN(parseInt(t,10))}},{key:\"isFloat\",value:function(t){return Number(t)===t&&t%1!=0}},{key:\"isSafari\",value:function(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}},{key:\"isFirefox\",value:function(){return navigator.userAgent.toLowerCase().indexOf(\"firefox\")>-1}},{key:\"isIE11\",value:function(){if(-1!==window.navigator.userAgent.indexOf(\"MSIE\")||window.navigator.appVersion.indexOf(\"Trident/\")>-1)return!0}},{key:\"isIE\",value:function(){var t=window.navigator.userAgent,e=t.indexOf(\"MSIE \");if(e>0)return parseInt(t.substring(e+5,t.indexOf(\".\",e)),10);if(t.indexOf(\"Trident/\")>0){var i=t.indexOf(\"rv:\");return parseInt(t.substring(i+3,t.indexOf(\".\",i)),10)}var a=t.indexOf(\"Edge/\");return a>0&&parseInt(t.substring(a+5,t.indexOf(\".\",a)),10)}}]),t}(),b=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.setEasingFunctions()}return r(t,[{key:\"setEasingFunctions\",value:function(){var t;if(!this.w.globals.easing){switch(this.w.config.chart.animations.easing){case\"linear\":t=\"-\";break;case\"easein\":t=\"<\";break;case\"easeout\":t=\">\";break;case\"easeinout\":default:t=\"<>\";break;case\"swing\":t=function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1};break;case\"bounce\":t=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375};break;case\"elastic\":t=function(t){return t===!!t?t:Math.pow(2,-10*t)*Math.sin((t-.075)*(2*Math.PI)/.3)+1}}this.w.globals.easing=t}}},{key:\"animateLine\",value:function(t,e,i,a){t.attr(e).animate(a).attr(i)}},{key:\"animateMarker\",value:function(t,e,i,a,s,r){e||(e=0),t.attr({r:e,width:e,height:e}).animate(a,s).attr({r:i,width:i.width,height:i.height}).afterAll((function(){r()}))}},{key:\"animateCircle\",value:function(t,e,i,a,s){t.attr({r:e.r,cx:e.cx,cy:e.cy}).animate(a,s).attr({r:i.r,cx:i.cx,cy:i.cy})}},{key:\"animateRect\",value:function(t,e,i,a,s){t.attr(e).animate(a).attr(i).afterAll((function(){return s()}))}},{key:\"animatePathsGradually\",value:function(t){var e=t.el,i=t.realIndex,a=t.j,s=t.fill,r=t.pathFrom,o=t.pathTo,n=t.speed,l=t.delay,h=this.w,c=0;h.config.chart.animations.animateGradually.enabled&&(c=h.config.chart.animations.animateGradually.delay),h.config.chart.animations.dynamicAnimation.enabled&&h.globals.dataChanged&&\"bar\"!==h.config.chart.type&&(c=0),this.morphSVG(e,i,a,\"line\"!==h.config.chart.type||h.globals.comboCharts?s:\"stroke\",r,o,n,l*c)}},{key:\"showDelayedElements\",value:function(){this.w.globals.delayedElements.forEach((function(t){var e=t.el;e.classList.remove(\"apexcharts-element-hidden\"),e.classList.add(\"apexcharts-hidden-element-shown\")}))}},{key:\"animationCompleted\",value:function(t){var e=this.w;e.globals.animationEnded||(e.globals.animationEnded=!0,this.showDelayedElements(),\"function\"==typeof e.config.chart.events.animationEnd&&e.config.chart.events.animationEnd(this.ctx,{el:t,w:e}))}},{key:\"morphSVG\",value:function(t,e,i,a,s,r,o,n){var l=this,h=this.w;s||(s=t.attr(\"pathFrom\")),r||(r=t.attr(\"pathTo\"));var c=function(t){return\"radar\"===h.config.chart.type&&(o=1),\"M 0 \".concat(h.globals.gridHeight)};(!s||s.indexOf(\"undefined\")>-1||s.indexOf(\"NaN\")>-1)&&(s=c()),(!r||r.indexOf(\"undefined\")>-1||r.indexOf(\"NaN\")>-1)&&(r=c()),h.globals.shouldAnimate||(o=1),t.plot(s).animate(1,h.globals.easing,n).plot(s).animate(o,h.globals.easing,n).plot(r).afterAll((function(){x.isNumber(i)?i===h.globals.series[h.globals.maxValsInArrayIndex].length-2&&h.globals.shouldAnimate&&l.animationCompleted(t):\"none\"!==a&&h.globals.shouldAnimate&&(!h.globals.comboCharts&&e===h.globals.series.length-1||h.globals.comboCharts)&&l.animationCompleted(t),l.showDelayedElements()}))}}]),t}(),v=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"getDefaultFilter\",value:function(t,e){var i=this.w;t.unfilter(!0),(new window.SVG.Filter).size(\"120%\",\"180%\",\"-5%\",\"-40%\"),\"none\"!==i.config.states.normal.filter?this.applyFilter(t,e,i.config.states.normal.filter.type,i.config.states.normal.filter.value):i.config.chart.dropShadow.enabled&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:\"addNormalFilter\",value:function(t,e){var i=this.w;i.config.chart.dropShadow.enabled&&!t.node.classList.contains(\"apexcharts-marker\")&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:\"addLightenFilter\",value:function(t,e,i){var a=this,s=this.w,r=i.intensity;t.unfilter(!0);new window.SVG.Filter;t.filter((function(t){var i=s.config.chart.dropShadow;(i.enabled?a.addShadow(t,e,i):t).componentTransfer({rgb:{type:\"linear\",slope:1.5,intercept:r}})})),t.filterer.node.setAttribute(\"filterUnits\",\"userSpaceOnUse\"),this._scaleFilterSize(t.filterer.node)}},{key:\"addDarkenFilter\",value:function(t,e,i){var a=this,s=this.w,r=i.intensity;t.unfilter(!0);new window.SVG.Filter;t.filter((function(t){var i=s.config.chart.dropShadow;(i.enabled?a.addShadow(t,e,i):t).componentTransfer({rgb:{type:\"linear\",slope:r}})})),t.filterer.node.setAttribute(\"filterUnits\",\"userSpaceOnUse\"),this._scaleFilterSize(t.filterer.node)}},{key:\"applyFilter\",value:function(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.5;switch(i){case\"none\":this.addNormalFilter(t,e);break;case\"lighten\":this.addLightenFilter(t,e,{intensity:a});break;case\"darken\":this.addDarkenFilter(t,e,{intensity:a})}}},{key:\"addShadow\",value:function(t,e,i){var a=i.blur,s=i.top,r=i.left,o=i.color,n=i.opacity,l=t.flood(Array.isArray(o)?o[e]:o,n).composite(t.sourceAlpha,\"in\").offset(r,s).gaussianBlur(a).merge(t.source);return t.blend(t.source,l)}},{key:\"dropShadow\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=e.top,s=e.left,r=e.blur,o=e.color,n=e.opacity,l=e.noUserSpaceOnUse,h=this.w;return t.unfilter(!0),x.isIE()&&\"radialBar\"===h.config.chart.type||(o=Array.isArray(o)?o[i]:o,t.filter((function(t){var e=null;e=x.isSafari()||x.isFirefox()||x.isIE()?t.flood(o,n).composite(t.sourceAlpha,\"in\").offset(s,a).gaussianBlur(r):t.flood(o,n).composite(t.sourceAlpha,\"in\").offset(s,a).gaussianBlur(r).merge(t.source),t.blend(t.source,e)})),l||t.filterer.node.setAttribute(\"filterUnits\",\"userSpaceOnUse\"),this._scaleFilterSize(t.filterer.node)),t}},{key:\"setSelectionFilter\",value:function(t,e,i){var a=this.w;if(void 0!==a.globals.selectedDataPoints[e]&&a.globals.selectedDataPoints[e].indexOf(i)>-1){t.node.setAttribute(\"selected\",!0);var s=a.config.states.active.filter;\"none\"!==s&&this.applyFilter(t,e,s.type,s.value)}}},{key:\"_scaleFilterSize\",value:function(t){!function(e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}({width:\"200%\",height:\"200%\",x:\"-50%\",y:\"-50%\"})}}]),t}(),m=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"roundPathCorners\",value:function(t,e){function i(t,e,i){var s=e.x-t.x,r=e.y-t.y,o=Math.sqrt(s*s+r*r);return a(t,e,Math.min(1,i/o))}function a(t,e,i){return{x:t.x+(e.x-t.x)*i,y:t.y+(e.y-t.y)*i}}function s(t,e){t.length>2&&(t[t.length-2]=e.x,t[t.length-1]=e.y)}function r(t){return{x:parseFloat(t[t.length-2]),y:parseFloat(t[t.length-1])}}t.indexOf(\"NaN\")>-1&&(t=\"\");var o=t.split(/[,\\s]/).reduce((function(t,e){var i=e.match(\"([a-zA-Z])(.+)\");return i?(t.push(i[1]),t.push(i[2])):t.push(e),t}),[]).reduce((function(t,e){return parseFloat(e)==e&&t.length?t[t.length-1].push(e):t.push([e]),t}),[]),n=[];if(o.length>1){var l=r(o[0]),h=null;\"Z\"==o[o.length-1][0]&&o[0].length>2&&(h=[\"L\",l.x,l.y],o[o.length-1]=h),n.push(o[0]);for(var c=1;c<o.length;c++){var d=n[n.length-1],g=o[c],u=g==h?o[1]:o[c+1];if(u&&d&&d.length>2&&\"L\"==g[0]&&u.length>2&&\"L\"==u[0]){var p,f,x=r(d),b=r(g),v=r(u);p=i(b,x,e),f=i(b,v,e),s(g,p),g.origPoint=b,n.push(g);var m=a(p,b,.5),y=a(b,f,.5),w=[\"C\",m.x,m.y,y.x,y.y,f.x,f.y];w.origPoint=b,n.push(w)}else n.push(g)}if(h){var k=r(n[n.length-1]);n.push([\"Z\"]),s(n[0],k)}}else n=o;return n.reduce((function(t,e){return t+e.join(\" \")+\" \"}),\"\")}},{key:\"drawLine\",value:function(t,e,i,a){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:\"#a8a8a8\",r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,n=arguments.length>7&&void 0!==arguments[7]?arguments[7]:\"butt\";return this.w.globals.dom.Paper.line().attr({x1:t,y1:e,x2:i,y2:a,stroke:s,\"stroke-dasharray\":r,\"stroke-width\":o,\"stroke-linecap\":n})}},{key:\"drawRect\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"#fefefe\",o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,n=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,l=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,h=arguments.length>9&&void 0!==arguments[9]?arguments[9]:0,c=this.w.globals.dom.Paper.rect();return c.attr({x:t,y:e,width:i>0?i:0,height:a>0?a:0,rx:s,ry:s,opacity:o,\"stroke-width\":null!==n?n:0,stroke:null!==l?l:\"none\",\"stroke-dasharray\":h}),c.node.setAttribute(\"fill\",r),c}},{key:\"drawPolygon\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"#e1e1e1\",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"none\";return this.w.globals.dom.Paper.polygon(t).attr({fill:a,stroke:e,\"stroke-width\":i})}},{key:\"drawCircle\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;t<0&&(t=0);var i=this.w.globals.dom.Paper.circle(2*t);return null!==e&&i.attr(e),i}},{key:\"drawPath\",value:function(t){var e=t.d,i=void 0===e?\"\":e,a=t.stroke,s=void 0===a?\"#a8a8a8\":a,r=t.strokeWidth,o=void 0===r?1:r,n=t.fill,l=t.fillOpacity,h=void 0===l?1:l,c=t.strokeOpacity,d=void 0===c?1:c,g=t.classes,u=t.strokeLinecap,p=void 0===u?null:u,f=t.strokeDashArray,x=void 0===f?0:f,b=this.w;return null===p&&(p=b.config.stroke.lineCap),(i.indexOf(\"undefined\")>-1||i.indexOf(\"NaN\")>-1)&&(i=\"M 0 \".concat(b.globals.gridHeight)),b.globals.dom.Paper.path(i).attr({fill:n,\"fill-opacity\":h,stroke:s,\"stroke-opacity\":d,\"stroke-linecap\":p,\"stroke-width\":o,\"stroke-dasharray\":x,class:g})}},{key:\"group\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w.globals.dom.Paper.group();return null!==t&&e.attr(t),e}},{key:\"move\",value:function(t,e){var i=[\"M\",t,e].join(\" \");return i}},{key:\"line\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=null;return null===i?a=[\" L\",t,e].join(\" \"):\"H\"===i?a=[\" H\",t].join(\" \"):\"V\"===i&&(a=[\" V\",e].join(\" \")),a}},{key:\"curve\",value:function(t,e,i,a,s,r){var o=[\"C\",t,e,i,a,s,r].join(\" \");return o}},{key:\"quadraticCurve\",value:function(t,e,i,a){return[\"Q\",t,e,i,a].join(\" \")}},{key:\"arc\",value:function(t,e,i,a,s,r,o){var n=\"A\";arguments.length>7&&void 0!==arguments[7]&&arguments[7]&&(n=\"a\");var l=[n,t,e,i,a,s,r,o].join(\" \");return l}},{key:\"renderPaths\",value:function(t){var i,a=t.j,s=t.realIndex,r=t.pathFrom,o=t.pathTo,n=t.stroke,l=t.strokeWidth,h=t.strokeLinecap,c=t.fill,d=t.animationDelay,g=t.initialSpeed,u=t.dataChangeSpeed,p=t.className,f=t.shouldClipToGrid,x=void 0===f||f,m=t.bindEventsOnPaths,y=void 0===m||m,w=t.drawShadow,k=void 0===w||w,A=this.w,S=new v(this.ctx),C=new b(this.ctx),L=this.w.config.chart.animations.enabled,P=L&&this.w.config.chart.animations.dynamicAnimation.enabled,I=!!(L&&!A.globals.resized||P&&A.globals.dataChanged&&A.globals.shouldAnimate);I?i=r:(i=o,A.globals.animationEnded=!0);var T=A.config.stroke.dashArray,M=0;M=Array.isArray(T)?T[s]:A.config.stroke.dashArray;var X=this.drawPath({d:i,stroke:n,strokeWidth:l,fill:c,fillOpacity:1,classes:p,strokeLinecap:h,strokeDashArray:M});if(X.attr(\"index\",s),x&&X.attr({\"clip-path\":\"url(#gridRectMask\".concat(A.globals.cuid,\")\")}),\"none\"!==A.config.states.normal.filter.type)S.getDefaultFilter(X,s);else if(A.config.chart.dropShadow.enabled&&k&&(!A.config.chart.dropShadow.enabledOnSeries||A.config.chart.dropShadow.enabledOnSeries&&-1!==A.config.chart.dropShadow.enabledOnSeries.indexOf(s))){var z=A.config.chart.dropShadow;S.dropShadow(X,z,s)}y&&(X.node.addEventListener(\"mouseenter\",this.pathMouseEnter.bind(this,X)),X.node.addEventListener(\"mouseleave\",this.pathMouseLeave.bind(this,X)),X.node.addEventListener(\"mousedown\",this.pathMouseDown.bind(this,X))),X.attr({pathTo:o,pathFrom:r});var E={el:X,j:a,realIndex:s,pathFrom:r,pathTo:o,fill:c,strokeWidth:l,delay:d};return!L||A.globals.resized||A.globals.dataChanged?!A.globals.resized&&A.globals.dataChanged||C.showDelayedElements():C.animatePathsGradually(e(e({},E),{},{speed:g})),A.globals.dataChanged&&P&&I&&C.animatePathsGradually(e(e({},E),{},{speed:u})),X}},{key:\"drawPattern\",value:function(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"#a8a8a8\",s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;return this.w.globals.dom.Paper.pattern(e,i,(function(r){\"horizontalLines\"===t?r.line(0,0,i,0).stroke({color:a,width:s+1}):\"verticalLines\"===t?r.line(0,0,0,e).stroke({color:a,width:s+1}):\"slantedLines\"===t?r.line(0,0,e,i).stroke({color:a,width:s}):\"squares\"===t?r.rect(e,i).fill(\"none\").stroke({color:a,width:s}):\"circles\"===t&&r.circle(e).fill(\"none\").stroke({color:a,width:s})}))}},{key:\"drawGradient\",value:function(t,e,i,a,s){var r,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,n=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,h=arguments.length>8&&void 0!==arguments[8]?arguments[8]:0,c=this.w;e.length<9&&0===e.indexOf(\"#\")&&(e=x.hexToRgba(e,a)),i.length<9&&0===i.indexOf(\"#\")&&(i=x.hexToRgba(i,s));var d=0,g=1,u=1,p=null;null!==n&&(d=void 0!==n[0]?n[0]/100:0,g=void 0!==n[1]?n[1]/100:1,u=void 0!==n[2]?n[2]/100:1,p=void 0!==n[3]?n[3]/100:null);var f=!(\"donut\"!==c.config.chart.type&&\"pie\"!==c.config.chart.type&&\"polarArea\"!==c.config.chart.type&&\"bubble\"!==c.config.chart.type);if(r=null===l||0===l.length?c.globals.dom.Paper.gradient(f?\"radial\":\"linear\",(function(t){t.at(d,e,a),t.at(g,i,s),t.at(u,i,s),null!==p&&t.at(p,e,a)})):c.globals.dom.Paper.gradient(f?\"radial\":\"linear\",(function(t){(Array.isArray(l[h])?l[h]:l).forEach((function(e){t.at(e.offset/100,e.color,e.opacity)}))})),f){var b=c.globals.gridWidth/2,v=c.globals.gridHeight/2;\"bubble\"!==c.config.chart.type?r.attr({gradientUnits:\"userSpaceOnUse\",cx:b,cy:v,r:o}):r.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else\"vertical\"===t?r.from(0,0).to(0,1):\"diagonal\"===t?r.from(0,0).to(1,1):\"horizontal\"===t?r.from(0,1).to(1,1):\"diagonal2\"===t&&r.from(1,0).to(0,1);return r}},{key:\"getTextBasedOnMaxWidth\",value:function(t){var e=t.text,i=t.maxWidth,a=t.fontSize,s=t.fontFamily,r=this.getTextRects(e,a,s),o=r.width/e.length,n=Math.floor(i/o);return i<r.width?e.slice(0,n-3)+\"...\":e}},{key:\"drawText\",value:function(t){var i=this,a=t.x,s=t.y,r=t.text,o=t.textAnchor,n=t.fontSize,l=t.fontFamily,h=t.fontWeight,c=t.foreColor,d=t.opacity,g=t.maxWidth,u=t.cssClass,p=void 0===u?\"\":u,f=t.isPlainText,x=void 0===f||f,b=this.w;void 0===r&&(r=\"\");var v=r;o||(o=\"start\"),c&&c.length||(c=b.config.chart.foreColor),l=l||b.config.chart.fontFamily,h=h||\"regular\";var m,y={maxWidth:g,fontSize:n=n||\"11px\",fontFamily:l};return Array.isArray(r)?m=b.globals.dom.Paper.text((function(t){for(var a=0;a<r.length;a++)v=r[a],g&&(v=i.getTextBasedOnMaxWidth(e({text:r[a]},y))),0===a?t.tspan(v):t.tspan(v).newLine()})):(g&&(v=this.getTextBasedOnMaxWidth(e({text:r},y))),m=x?b.globals.dom.Paper.plain(r):b.globals.dom.Paper.text((function(t){return t.tspan(v)}))),m.attr({x:a,y:s,\"text-anchor\":o,\"dominant-baseline\":\"auto\",\"font-size\":n,\"font-family\":l,\"font-weight\":h,fill:c,class:\"apexcharts-text \"+p}),m.node.style.fontFamily=l,m.node.style.opacity=d,m}},{key:\"drawMarker\",value:function(t,e,i){t=t||0;var a=i.pSize||0,s=null;if(\"square\"===i.shape||\"rect\"===i.shape){var r=void 0===i.pRadius?a/2:i.pRadius;null!==e&&a||(a=0,r=0);var o=1.2*a+r,n=this.drawRect(o,o,o,o,r);n.attr({x:t-o/2,y:e-o/2,cx:t,cy:e,class:i.class?i.class:\"\",fill:i.pointFillColor,\"fill-opacity\":i.pointFillOpacity?i.pointFillOpacity:1,stroke:i.pointStrokeColor,\"stroke-width\":i.pointStrokeWidth?i.pointStrokeWidth:0,\"stroke-opacity\":i.pointStrokeOpacity?i.pointStrokeOpacity:1}),s=n}else\"circle\"!==i.shape&&i.shape||(x.isNumber(e)||(a=0,e=0),s=this.drawCircle(a,{cx:t,cy:e,class:i.class?i.class:\"\",stroke:i.pointStrokeColor,fill:i.pointFillColor,\"fill-opacity\":i.pointFillOpacity?i.pointFillOpacity:1,\"stroke-width\":i.pointStrokeWidth?i.pointStrokeWidth:0,\"stroke-opacity\":i.pointStrokeOpacity?i.pointStrokeOpacity:1}));return s}},{key:\"pathMouseEnter\",value:function(t,e){var i=this.w,a=new v(this.ctx),s=parseInt(t.node.getAttribute(\"index\"),10),r=parseInt(t.node.getAttribute(\"j\"),10);if(\"function\"==typeof i.config.chart.events.dataPointMouseEnter&&i.config.chart.events.dataPointMouseEnter(e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}),this.ctx.events.fireEvent(\"dataPointMouseEnter\",[e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}]),(\"none\"===i.config.states.active.filter.type||\"true\"!==t.node.getAttribute(\"selected\"))&&\"none\"!==i.config.states.hover.filter.type&&!i.globals.isTouchDevice){var o=i.config.states.hover.filter;a.applyFilter(t,s,o.type,o.value)}}},{key:\"pathMouseLeave\",value:function(t,e){var i=this.w,a=new v(this.ctx),s=parseInt(t.node.getAttribute(\"index\"),10),r=parseInt(t.node.getAttribute(\"j\"),10);\"function\"==typeof i.config.chart.events.dataPointMouseLeave&&i.config.chart.events.dataPointMouseLeave(e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}),this.ctx.events.fireEvent(\"dataPointMouseLeave\",[e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}]),\"none\"!==i.config.states.active.filter.type&&\"true\"===t.node.getAttribute(\"selected\")||\"none\"!==i.config.states.hover.filter.type&&a.getDefaultFilter(t,s)}},{key:\"pathMouseDown\",value:function(t,e){var i=this.w,a=new v(this.ctx),s=parseInt(t.node.getAttribute(\"index\"),10),r=parseInt(t.node.getAttribute(\"j\"),10),o=\"false\";if(\"true\"===t.node.getAttribute(\"selected\")){if(t.node.setAttribute(\"selected\",\"false\"),i.globals.selectedDataPoints[s].indexOf(r)>-1){var n=i.globals.selectedDataPoints[s].indexOf(r);i.globals.selectedDataPoints[s].splice(n,1)}}else{if(!i.config.states.active.allowMultipleDataPointsSelection&&i.globals.selectedDataPoints.length>0){i.globals.selectedDataPoints=[];var l=i.globals.dom.Paper.select(\".apexcharts-series path\").members,h=i.globals.dom.Paper.select(\".apexcharts-series circle, .apexcharts-series rect\").members,c=function(t){Array.prototype.forEach.call(t,(function(t){t.node.setAttribute(\"selected\",\"false\"),a.getDefaultFilter(t,s)}))};c(l),c(h)}t.node.setAttribute(\"selected\",\"true\"),o=\"true\",void 0===i.globals.selectedDataPoints[s]&&(i.globals.selectedDataPoints[s]=[]),i.globals.selectedDataPoints[s].push(r)}if(\"true\"===o){var d=i.config.states.active.filter;if(\"none\"!==d)a.applyFilter(t,s,d.type,d.value);else if(\"none\"!==i.config.states.hover.filter&&!i.globals.isTouchDevice){var g=i.config.states.hover.filter;a.applyFilter(t,s,g.type,g.value)}}else if(\"none\"!==i.config.states.active.filter.type)if(\"none\"===i.config.states.hover.filter.type||i.globals.isTouchDevice)a.getDefaultFilter(t,s);else{g=i.config.states.hover.filter;a.applyFilter(t,s,g.type,g.value)}\"function\"==typeof i.config.chart.events.dataPointSelection&&i.config.chart.events.dataPointSelection(e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}),e&&this.ctx.events.fireEvent(\"dataPointSelection\",[e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}])}},{key:\"rotateAroundCenter\",value:function(t){var e={};return t&&\"function\"==typeof t.getBBox&&(e=t.getBBox()),{x:e.x+e.width/2,y:e.y+e.height/2}}},{key:\"getTextRects\",value:function(t,e,i,a){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=this.w,o=this.drawText({x:-200,y:-200,text:t,textAnchor:\"start\",fontSize:e,fontFamily:i,foreColor:\"#fff\",opacity:0});a&&o.attr(\"transform\",a),r.globals.dom.Paper.add(o);var n=o.bbox();return s||(n=o.node.getBoundingClientRect()),o.remove(),{width:n.width,height:n.height}}},{key:\"placeTextWithEllipsis\",value:function(t,e,i){if(\"function\"==typeof t.getComputedTextLength&&(t.textContent=e,e.length>0&&t.getComputedTextLength()>=i/1.1)){for(var a=e.length-3;a>0;a-=3)if(t.getSubStringLength(0,a)<=i/1.1)return void(t.textContent=e.substring(0,a)+\"...\");t.textContent=\".\"}}}],[{key:\"setAttrs\",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}}]),t}(),y=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"getStackedSeriesTotals\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=this.w,i=[];if(0===e.globals.series.length)return i;for(var a=0;a<e.globals.series[e.globals.maxValsInArrayIndex].length;a++){for(var s=0,r=0;r<e.globals.series.length;r++)void 0!==e.globals.series[r][a]&&-1===t.indexOf(r)&&(s+=e.globals.series[r][a]);i.push(s)}return i}},{key:\"getSeriesTotalByIndex\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null===t?this.w.config.series.reduce((function(t,e){return t+e}),0):this.w.globals.series[t].reduce((function(t,e){return t+e}),0)}},{key:\"isSeriesNull\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return 0===(null===t?this.w.config.series.filter((function(t){return null!==t})):this.w.config.series[t].data.filter((function(t){return null!==t}))).length}},{key:\"seriesHaveSameValues\",value:function(t){return this.w.globals.series[t].every((function(t,e,i){return t===i[0]}))}},{key:\"getCategoryLabels\",value:function(t){var e=this.w,i=t.slice();return e.config.xaxis.convertedCatToNumeric&&(i=t.map((function(t,i){return e.config.xaxis.labels.formatter(t-e.globals.minX+1)}))),i}},{key:\"getLargestSeries\",value:function(){var t=this.w;t.globals.maxValsInArrayIndex=t.globals.series.map((function(t){return t.length})).indexOf(Math.max.apply(Math,t.globals.series.map((function(t){return t.length}))))}},{key:\"getLargestMarkerSize\",value:function(){var t=this.w,e=0;return t.globals.markers.size.forEach((function(t){e=Math.max(e,t)})),t.config.markers.discrete&&t.config.markers.discrete.length&&t.config.markers.discrete.forEach((function(t){e=Math.max(e,t.size)})),e>0&&(e+=t.config.markers.hover.sizeOffset+1),t.globals.markers.largestSize=e,e}},{key:\"getSeriesTotals\",value:function(){var t=this.w;t.globals.seriesTotals=t.globals.series.map((function(t,e){var i=0;if(Array.isArray(t))for(var a=0;a<t.length;a++)i+=t[a];else i+=t;return i}))}},{key:\"getSeriesTotalsXRange\",value:function(t,e){var i=this.w;return i.globals.series.map((function(a,s){for(var r=0,o=0;o<a.length;o++)i.globals.seriesX[s][o]>t&&i.globals.seriesX[s][o]<e&&(r+=a[o]);return r}))}},{key:\"getPercentSeries\",value:function(){var t=this.w;t.globals.seriesPercent=t.globals.series.map((function(e,i){var a=[];if(Array.isArray(e))for(var s=0;s<e.length;s++){var r=t.globals.stackedSeriesTotals[s],o=0;r&&(o=100*e[s]/r),a.push(o)}else{var n=100*e/t.globals.seriesTotals.reduce((function(t,e){return t+e}),0);a.push(n)}return a}))}},{key:\"getCalculatedRatios\",value:function(){var t,e,i,a,s=this.w.globals,r=[],o=0,n=[],l=.1,h=0;if(s.yRange=[],s.isMultipleYAxis)for(var c=0;c<s.minYArr.length;c++)s.yRange.push(Math.abs(s.minYArr[c]-s.maxYArr[c])),n.push(0);else s.yRange.push(Math.abs(s.minY-s.maxY));s.xRange=Math.abs(s.maxX-s.minX),s.zRange=Math.abs(s.maxZ-s.minZ);for(var d=0;d<s.yRange.length;d++)r.push(s.yRange[d]/s.gridHeight);if(e=s.xRange/s.gridWidth,i=Math.abs(s.initialMaxX-s.initialMinX)/s.gridWidth,t=s.yRange/s.gridWidth,a=s.xRange/s.gridHeight,(o=s.zRange/s.gridHeight*16)||(o=1),s.minY!==Number.MIN_VALUE&&0!==Math.abs(s.minY)&&(s.hasNegs=!0),s.isMultipleYAxis){n=[];for(var g=0;g<r.length;g++)n.push(-s.minYArr[g]/r[g])}else n.push(-s.minY/r[0]),s.minY!==Number.MIN_VALUE&&0!==Math.abs(s.minY)&&(l=-s.minY/t,h=s.minX/e);return{yRatio:r,invertedYRatio:t,zRatio:o,xRatio:e,initialXRatio:i,invertedXRatio:a,baseLineInvertedY:l,baseLineY:n,baseLineX:h}}},{key:\"getLogSeries\",value:function(t){var e=this,i=this.w;return i.globals.seriesLog=t.map((function(t,a){return i.config.yaxis[a]&&i.config.yaxis[a].logarithmic?t.map((function(t){return null===t?null:e.getLogVal(i.config.yaxis[a].logBase,t,a)})):t})),i.globals.invalidLogScale?t:i.globals.seriesLog}},{key:\"getBaseLog\",value:function(t,e){return Math.log(e)/Math.log(t)}},{key:\"getLogVal\",value:function(t,e,i){if(0===e)return 0;var a=this.w,s=0===a.globals.minYArr[i]?-1:this.getBaseLog(t,a.globals.minYArr[i]),r=(0===a.globals.maxYArr[i]?0:this.getBaseLog(t,a.globals.maxYArr[i]))-s;return e<1?e/r:(this.getBaseLog(t,e)-s)/r}},{key:\"getLogYRatios\",value:function(t){var e=this,i=this.w,a=this.w.globals;return a.yLogRatio=t.slice(),a.logYRange=a.yRange.map((function(t,s){if(i.config.yaxis[s]&&e.w.config.yaxis[s].logarithmic){var r,o=-Number.MAX_VALUE,n=Number.MIN_VALUE;return a.seriesLog.forEach((function(t,e){t.forEach((function(t){i.config.yaxis[e]&&i.config.yaxis[e].logarithmic&&(o=Math.max(t,o),n=Math.min(t,n))}))})),r=Math.pow(a.yRange[s],Math.abs(n-o)/a.yRange[s]),a.yLogRatio[s]=r/a.gridHeight,r}})),a.invalidLogScale?t.slice():a.yLogRatio}}],[{key:\"checkComboSeries\",value:function(t){var e=!1,i=0,a=0;return t.length&&void 0!==t[0].type&&t.forEach((function(t){\"bar\"!==t.type&&\"column\"!==t.type&&\"candlestick\"!==t.type&&\"boxPlot\"!==t.type||i++,void 0!==t.type&&a++})),a>0&&(e=!0),{comboBarCount:i,comboCharts:e}}},{key:\"extendArrayProps\",value:function(t,e,i){return e.yaxis&&(e=t.extendYAxis(e,i)),e.annotations&&(e.annotations.yaxis&&(e=t.extendYAxisAnnotations(e)),e.annotations.xaxis&&(e=t.extendXAxisAnnotations(e)),e.annotations.points&&(e=t.extendPointAnnotations(e))),e}}]),t}(),w=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e}return r(t,[{key:\"setOrientations\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w;if(\"vertical\"===t.label.orientation){var a=null!==e?e:0,s=i.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='\".concat(a,\"']\"));if(null!==s){var r=s.getBoundingClientRect();s.setAttribute(\"x\",parseFloat(s.getAttribute(\"x\"))-r.height+4),\"top\"===t.label.position?s.setAttribute(\"y\",parseFloat(s.getAttribute(\"y\"))+r.width):s.setAttribute(\"y\",parseFloat(s.getAttribute(\"y\"))-r.width);var o=this.annoCtx.graphics.rotateAroundCenter(s),n=o.x,l=o.y;s.setAttribute(\"transform\",\"rotate(-90 \".concat(n,\" \").concat(l,\")\"))}}}},{key:\"addBackgroundToAnno\",value:function(t,e){var i=this.w;if(!t||void 0===e.label.text||void 0!==e.label.text&&!String(e.label.text).trim())return null;var a=i.globals.dom.baseEl.querySelector(\".apexcharts-grid\").getBoundingClientRect(),s=t.getBoundingClientRect(),r=e.label.style.padding.left,o=e.label.style.padding.right,n=e.label.style.padding.top,l=e.label.style.padding.bottom;\"vertical\"===e.label.orientation&&(n=e.label.style.padding.left,l=e.label.style.padding.right,r=e.label.style.padding.top,o=e.label.style.padding.bottom);var h=s.left-a.left-r,c=s.top-a.top-n,d=this.annoCtx.graphics.drawRect(h-i.globals.barPadForNumericAxis,c,s.width+r+o,s.height+n+l,e.label.borderRadius,e.label.style.background,1,e.label.borderWidth,e.label.borderColor,0);return e.id&&d.node.classList.add(e.id),d}},{key:\"annotationsBackground\",value:function(){var t=this,e=this.w,i=function(i,a,s){var r=e.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(s,\"-annotations .apexcharts-\").concat(s,\"-annotation-label[rel='\").concat(a,\"']\"));if(r){var o=r.parentNode,n=t.addBackgroundToAnno(r,i);n&&(o.insertBefore(n.node,r),i.label.mouseEnter&&n.node.addEventListener(\"mouseenter\",i.label.mouseEnter.bind(t,i)),i.label.mouseLeave&&n.node.addEventListener(\"mouseleave\",i.label.mouseLeave.bind(t,i)),i.label.click&&n.node.addEventListener(\"click\",i.label.click.bind(t,i)))}};e.config.annotations.xaxis.map((function(t,e){i(t,e,\"xaxis\")})),e.config.annotations.yaxis.map((function(t,e){i(t,e,\"yaxis\")})),e.config.annotations.points.map((function(t,e){i(t,e,\"point\")}))}},{key:\"getY1Y2\",value:function(t,e){var i,a=\"y1\"===t?e.y:e.y2,s=this.w;if(this.annoCtx.invertAxis){var r=s.globals.labels.indexOf(a);s.config.xaxis.convertedCatToNumeric&&(r=s.globals.categoryLabels.indexOf(a));var o=s.globals.dom.baseEl.querySelector(\".apexcharts-yaxis-texts-g text:nth-child(\"+(r+1)+\")\");o&&(i=parseFloat(o.getAttribute(\"y\")))}else{var n;if(s.config.yaxis[e.yAxisIndex].logarithmic)n=(a=new y(this.annoCtx.ctx).getLogVal(a,e.yAxisIndex))/s.globals.yLogRatio[e.yAxisIndex];else n=(a-s.globals.minYArr[e.yAxisIndex])/(s.globals.yRange[e.yAxisIndex]/s.globals.gridHeight);i=s.globals.gridHeight-n,!e.marker||void 0!==e.y&&null!==e.y||(i=0),s.config.yaxis[e.yAxisIndex]&&s.config.yaxis[e.yAxisIndex].reversed&&(i=n)}return\"string\"==typeof a&&a.indexOf(\"px\")>-1&&(i=parseFloat(a)),i}},{key:\"getX1X2\",value:function(t,e){var i=this.w,a=this.annoCtx.invertAxis?i.globals.minY:i.globals.minX,s=this.annoCtx.invertAxis?i.globals.maxY:i.globals.maxX,r=this.annoCtx.invertAxis?i.globals.yRange[0]:i.globals.xRange,o=(e.x-a)/(r/i.globals.gridWidth);this.annoCtx.inversedReversedAxis&&(o=(s-e.x)/(r/i.globals.gridWidth)),\"category\"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||i.globals.dataFormatXNumeric||(o=this.getStringX(e.x));var n=(e.x2-a)/(r/i.globals.gridWidth);return this.annoCtx.inversedReversedAxis&&(n=(s-e.x2)/(r/i.globals.gridWidth)),\"category\"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||i.globals.dataFormatXNumeric||(n=this.getStringX(e.x2)),void 0!==e.x&&null!==e.x||!e.marker||(o=i.globals.gridWidth),\"x1\"===t&&\"string\"==typeof e.x&&e.x.indexOf(\"px\")>-1&&(o=parseFloat(e.x)),\"x2\"===t&&\"string\"==typeof e.x2&&e.x2.indexOf(\"px\")>-1&&(n=parseFloat(e.x2)),\"x1\"===t?o:n}},{key:\"getStringX\",value:function(t){var e=this.w,i=t;e.config.xaxis.convertedCatToNumeric&&e.globals.categoryLabels.length&&(t=e.globals.categoryLabels.indexOf(t)+1);var a=e.globals.labels.indexOf(t),s=e.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-texts-g text:nth-child(\"+(a+1)+\")\");return s&&(i=parseFloat(s.getAttribute(\"x\"))),i}}]),t}(),k=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e,this.invertAxis=this.annoCtx.invertAxis,this.helpers=new w(this.annoCtx)}return r(t,[{key:\"addXaxisAnnotation\",value:function(t,e,i){var a,s=this.w,r=this.helpers.getX1X2(\"x1\",t),o=t.label.text,n=t.strokeDashArray;if(x.isNumber(r)){if(null===t.x2||void 0===t.x2){var l=this.annoCtx.graphics.drawLine(r+t.offsetX,0+t.offsetY,r+t.offsetX,s.globals.gridHeight+t.offsetY,t.borderColor,n,t.borderWidth);e.appendChild(l.node),t.id&&l.node.classList.add(t.id)}else{if((a=this.helpers.getX1X2(\"x2\",t))<r){var h=r;r=a,a=h}var c=this.annoCtx.graphics.drawRect(r+t.offsetX,0+t.offsetY,a-r,s.globals.gridHeight+t.offsetY,0,t.fillColor,t.opacity,1,t.borderColor,n);c.node.classList.add(\"apexcharts-annotation-rect\"),c.attr(\"clip-path\",\"url(#gridRectMask\".concat(s.globals.cuid,\")\")),e.appendChild(c.node),t.id&&c.node.classList.add(t.id)}var d=this.annoCtx.graphics.getTextRects(o,parseFloat(t.label.style.fontSize)),g=\"top\"===t.label.position?4:\"center\"===t.label.position?s.globals.gridHeight/2+(\"vertical\"===t.label.orientation?d.width/2:0):s.globals.gridHeight,u=this.annoCtx.graphics.drawText({x:r+t.label.offsetX,y:g+t.label.offsetY-(\"vertical\"===t.label.orientation?\"top\"===t.label.position?d.width/2-12:-d.width/2:0),text:o,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\"apexcharts-xaxis-annotation-label \".concat(t.label.style.cssClass,\" \").concat(t.id?t.id:\"\")});u.attr({rel:i}),e.appendChild(u.node),this.annoCtx.helpers.setOrientations(t,i)}}},{key:\"drawXAxisAnnotations\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\"apexcharts-xaxis-annotations\"});return e.config.annotations.xaxis.map((function(e,a){t.addXaxisAnnotation(e,i.node,a)})),i}}]),t}(),A=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e,this.helpers=new w(this.annoCtx)}return r(t,[{key:\"addYaxisAnnotation\",value:function(t,e,i){var a,s=this.w,r=t.strokeDashArray,o=this.helpers.getY1Y2(\"y1\",t),n=t.label.text;if(null===t.y2||void 0===t.y2){var l=this.annoCtx.graphics.drawLine(0+t.offsetX,o+t.offsetY,this._getYAxisAnnotationWidth(t),o+t.offsetY,t.borderColor,r,t.borderWidth);e.appendChild(l.node),t.id&&l.node.classList.add(t.id)}else{if((a=this.helpers.getY1Y2(\"y2\",t))>o){var h=o;o=a,a=h}var c=this.annoCtx.graphics.drawRect(0+t.offsetX,a+t.offsetY,this._getYAxisAnnotationWidth(t),o-a,0,t.fillColor,t.opacity,1,t.borderColor,r);c.node.classList.add(\"apexcharts-annotation-rect\"),c.attr(\"clip-path\",\"url(#gridRectMask\".concat(s.globals.cuid,\")\")),e.appendChild(c.node),t.id&&c.node.classList.add(t.id)}var d=\"right\"===t.label.position?s.globals.gridWidth:\"center\"===t.label.position?s.globals.gridWidth/2:0,g=this.annoCtx.graphics.drawText({x:d+t.label.offsetX,y:(null!=a?a:o)+t.label.offsetY-3,text:n,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\"apexcharts-yaxis-annotation-label \".concat(t.label.style.cssClass,\" \").concat(t.id?t.id:\"\")});g.attr({rel:i}),e.appendChild(g.node)}},{key:\"_getYAxisAnnotationWidth\",value:function(t){var e=this.w;e.globals.gridWidth;return(t.width.indexOf(\"%\")>-1?e.globals.gridWidth*parseInt(t.width,10)/100:parseInt(t.width,10))+t.offsetX}},{key:\"drawYAxisAnnotations\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\"apexcharts-yaxis-annotations\"});return e.config.annotations.yaxis.map((function(e,a){t.addYaxisAnnotation(e,i.node,a)})),i}}]),t}(),S=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e,this.helpers=new w(this.annoCtx)}return r(t,[{key:\"addPointAnnotation\",value:function(t,e,i){this.w;var a=this.helpers.getX1X2(\"x1\",t),s=this.helpers.getY1Y2(\"y1\",t);if(x.isNumber(a)){var r={pSize:t.marker.size,pointStrokeWidth:t.marker.strokeWidth,pointFillColor:t.marker.fillColor,pointStrokeColor:t.marker.strokeColor,shape:t.marker.shape,pRadius:t.marker.radius,class:\"apexcharts-point-annotation-marker \".concat(t.marker.cssClass,\" \").concat(t.id?t.id:\"\")},o=this.annoCtx.graphics.drawMarker(a+t.marker.offsetX,s+t.marker.offsetY,r);e.appendChild(o.node);var n=t.label.text?t.label.text:\"\",l=this.annoCtx.graphics.drawText({x:a+t.label.offsetX,y:s+t.label.offsetY-t.marker.size-parseFloat(t.label.style.fontSize)/1.6,text:n,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\"apexcharts-point-annotation-label \".concat(t.label.style.cssClass,\" \").concat(t.id?t.id:\"\")});if(l.attr({rel:i}),e.appendChild(l.node),t.customSVG.SVG){var h=this.annoCtx.graphics.group({class:\"apexcharts-point-annotations-custom-svg \"+t.customSVG.cssClass});h.attr({transform:\"translate(\".concat(a+t.customSVG.offsetX,\", \").concat(s+t.customSVG.offsetY,\")\")}),h.node.innerHTML=t.customSVG.SVG,e.appendChild(h.node)}if(t.image.path){var c=t.image.width?t.image.width:20,d=t.image.height?t.image.height:20;o=this.annoCtx.addImage({x:a+t.image.offsetX-c/2,y:s+t.image.offsetY-d/2,width:c,height:d,path:t.image.path,appendTo:\".apexcharts-point-annotations\"})}t.mouseEnter&&o.node.addEventListener(\"mouseenter\",t.mouseEnter.bind(this,t)),t.mouseLeave&&o.node.addEventListener(\"mouseleave\",t.mouseLeave.bind(this,t)),t.click&&o.node.addEventListener(\"click\",t.click.bind(this,t))}}},{key:\"drawPointAnnotations\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\"apexcharts-point-annotations\"});return e.config.annotations.points.map((function(e,a){t.addPointAnnotation(e,i.node,a)})),i}}]),t}();var C={name:\"en\",options:{months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],toolbar:{exportToSVG:\"Download SVG\",exportToPNG:\"Download PNG\",exportToCSV:\"Download CSV\",menu:\"Menu\",selection:\"Selection\",selectionZoom:\"Selection Zoom\",zoomIn:\"Zoom In\",zoomOut:\"Zoom Out\",pan:\"Panning\",reset:\"Reset Zoom\"}}},L=function(){function t(){a(this,t),this.yAxis={show:!0,showAlways:!1,showForNullSeries:!0,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,logBase:10,tickAmount:void 0,forceNiceScale:!1,max:void 0,min:void 0,floating:!1,decimalsInFloat:void 0,labels:{show:!0,minWidth:0,maxWidth:160,offsetX:0,offsetY:0,align:void 0,rotate:0,padding:20,style:{colors:[],fontSize:\"11px\",fontWeight:400,fontFamily:void 0,cssClass:\"\"},formatter:void 0},axisBorder:{show:!1,color:\"#e0e0e0\",width:1,offsetX:0,offsetY:0},axisTicks:{show:!1,color:\"#e0e0e0\",width:6,offsetX:0,offsetY:0},title:{text:void 0,rotate:-90,offsetY:0,offsetX:0,style:{color:void 0,fontSize:\"11px\",fontWeight:900,fontFamily:void 0,cssClass:\"\"}},tooltip:{enabled:!1,offsetX:0},crosshairs:{show:!0,position:\"front\",stroke:{color:\"#b6b6b6\",width:1,dashArray:0}}},this.pointAnnotation={id:void 0,x:0,y:null,yAxisIndex:0,seriesIndex:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,marker:{size:4,fillColor:\"#fff\",strokeWidth:2,strokeColor:\"#333\",shape:\"circle\",offsetX:0,offsetY:0,radius:2,cssClass:\"\"},label:{borderColor:\"#c2c2c2\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\"middle\",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:\"#fff\",color:void 0,fontSize:\"11px\",fontFamily:void 0,fontWeight:400,cssClass:\"\",padding:{left:5,right:5,top:2,bottom:2}}},customSVG:{SVG:void 0,cssClass:void 0,offsetX:0,offsetY:0},image:{path:void 0,width:20,height:20,offsetX:0,offsetY:0}},this.yAxisAnnotation={id:void 0,y:0,y2:null,strokeDashArray:1,fillColor:\"#c2c2c2\",borderColor:\"#c2c2c2\",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,width:\"100%\",yAxisIndex:0,label:{borderColor:\"#c2c2c2\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\"end\",position:\"right\",offsetX:0,offsetY:-3,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:\"#fff\",color:void 0,fontSize:\"11px\",fontFamily:void 0,fontWeight:400,cssClass:\"\",padding:{left:5,right:5,top:2,bottom:2}}}},this.xAxisAnnotation={id:void 0,x:0,x2:null,strokeDashArray:1,fillColor:\"#c2c2c2\",borderColor:\"#c2c2c2\",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,label:{borderColor:\"#c2c2c2\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\"middle\",orientation:\"vertical\",position:\"top\",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:\"#fff\",color:void 0,fontSize:\"11px\",fontFamily:void 0,fontWeight:400,cssClass:\"\",padding:{left:5,right:5,top:2,bottom:2}}}},this.text={x:0,y:0,text:\"\",textAnchor:\"start\",foreColor:void 0,fontSize:\"13px\",fontFamily:void 0,fontWeight:400,appendTo:\".apexcharts-annotations\",backgroundColor:\"transparent\",borderColor:\"#c2c2c2\",borderRadius:0,borderWidth:0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2}}return r(t,[{key:\"init\",value:function(){return{annotations:{yaxis:[this.yAxisAnnotation],xaxis:[this.xAxisAnnotation],points:[this.pointAnnotation],texts:[],images:[],shapes:[]},chart:{animations:{enabled:!0,easing:\"easeinout\",speed:800,animateGradually:{delay:150,enabled:!0},dynamicAnimation:{enabled:!0,speed:350}},background:\"transparent\",locales:[C],defaultLocale:\"en\",dropShadow:{enabled:!1,enabledOnSeries:void 0,top:2,left:2,blur:4,color:\"#000\",opacity:.35},events:{animationEnd:void 0,beforeMount:void 0,mounted:void 0,updated:void 0,click:void 0,mouseMove:void 0,mouseLeave:void 0,xAxisLabelClick:void 0,legendClick:void 0,markerClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,beforeResetZoom:void 0,zoomed:void 0,scrolled:void 0,brushScrolled:void 0},foreColor:\"#373d3f\",fontFamily:\"Helvetica, Arial, sans-serif\",height:\"auto\",parentHeightOffset:15,redrawOnParentResize:!0,redrawOnWindowResize:!0,id:void 0,group:void 0,offsetX:0,offsetY:0,selection:{enabled:!1,type:\"x\",fill:{color:\"#24292e\",opacity:.1},stroke:{width:1,color:\"#24292e\",opacity:.4,dashArray:3},xaxis:{min:void 0,max:void 0},yaxis:{min:void 0,max:void 0}},sparkline:{enabled:!1},brush:{enabled:!1,autoScaleYaxis:!0,target:void 0},stacked:!1,stackType:\"normal\",toolbar:{show:!0,offsetX:0,offsetY:0,tools:{download:!0,selection:!0,zoom:!0,zoomin:!0,zoomout:!0,pan:!0,reset:!0,customIcons:[]},export:{csv:{filename:void 0,columnDelimiter:\",\",headerCategory:\"category\",headerValue:\"value\",dateFormatter:function(t){return new Date(t).toDateString()}},png:{filename:void 0},svg:{filename:void 0}},autoSelected:\"zoom\"},type:\"line\",width:\"100%\",zoom:{enabled:!0,type:\"x\",autoScaleYaxis:!1,zoomedArea:{fill:{color:\"#90CAF9\",opacity:.4},stroke:{color:\"#0D47A1\",opacity:.4,width:1}}}},plotOptions:{area:{fillTo:\"origin\"},bar:{horizontal:!1,columnWidth:\"70%\",barHeight:\"70%\",distributed:!1,borderRadius:0,borderRadiusApplication:\"around\",borderRadiusWhenStacked:\"last\",rangeBarOverlap:!0,rangeBarGroupRows:!1,hideZeroBarsWhenGrouped:!1,isDumbbell:!1,dumbbellColors:void 0,isFunnel:!1,isFunnel3d:!0,colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1,backgroundBarRadius:0},dataLabels:{position:\"top\",maxItems:100,hideOverflowingLabels:!0,orientation:\"horizontal\",total:{enabled:!1,formatter:void 0,offsetX:0,offsetY:0,style:{color:\"#373d3f\",fontSize:\"12px\",fontFamily:void 0,fontWeight:600}}}},bubble:{zScaling:!0,minBubbleRadius:void 0,maxBubbleRadius:void 0},candlestick:{colors:{upward:\"#00B746\",downward:\"#EF403C\"},wick:{useFillColor:!0}},boxPlot:{colors:{upper:\"#00E396\",lower:\"#008FFB\"}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,reverseNegativeShade:!1,distributed:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},treemap:{enableShades:!0,shadeIntensity:.5,distributed:!1,reverseNegativeShade:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},radialBar:{inverseOrder:!1,startAngle:0,endAngle:360,offsetX:0,offsetY:0,hollow:{margin:5,size:\"50%\",background:\"transparent\",image:void 0,imageWidth:150,imageHeight:150,imageOffsetX:0,imageOffsetY:0,imageClipped:!0,position:\"front\",dropShadow:{enabled:!1,top:0,left:0,blur:3,color:\"#000\",opacity:.5}},track:{show:!0,startAngle:void 0,endAngle:void 0,background:\"#f2f2f2\",strokeWidth:\"97%\",opacity:1,margin:5,dropShadow:{enabled:!1,top:0,left:0,blur:3,color:\"#000\",opacity:.5}},dataLabels:{show:!0,name:{show:!0,fontSize:\"16px\",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:0,formatter:function(t){return t}},value:{show:!0,fontSize:\"14px\",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:16,formatter:function(t){return t+\"%\"}},total:{show:!1,label:\"Total\",fontSize:\"16px\",fontWeight:600,fontFamily:void 0,color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce((function(t,e){return t+e}),0)/t.globals.series.length+\"%\"}}}},pie:{customScale:1,offsetX:0,offsetY:0,startAngle:0,endAngle:360,expandOnClick:!0,dataLabels:{offset:0,minAngleToShowLabel:10},donut:{size:\"65%\",background:\"transparent\",labels:{show:!1,name:{show:!0,fontSize:\"16px\",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:-10,formatter:function(t){return t}},value:{show:!0,fontSize:\"20px\",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:10,formatter:function(t){return t}},total:{show:!1,showAlways:!1,label:\"Total\",fontSize:\"16px\",fontWeight:400,fontFamily:void 0,color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce((function(t,e){return t+e}),0)}}}}},polarArea:{rings:{strokeWidth:1,strokeColor:\"#e8e8e8\"},spokes:{strokeWidth:1,connectorColors:\"#e8e8e8\"}},radar:{size:void 0,offsetX:0,offsetY:0,polygons:{strokeWidth:1,strokeColors:\"#e8e8e8\",connectorColors:\"#e8e8e8\",fill:{colors:void 0}}}},colors:void 0,dataLabels:{enabled:!0,enabledOnSeries:void 0,formatter:function(t){return null!==t?t:\"\"},textAnchor:\"middle\",distributed:!1,offsetX:0,offsetY:0,style:{fontSize:\"12px\",fontFamily:void 0,fontWeight:600,colors:void 0},background:{enabled:!0,foreColor:\"#fff\",borderRadius:2,padding:4,opacity:.9,borderWidth:1,borderColor:\"#fff\",dropShadow:{enabled:!1,top:1,left:1,blur:1,color:\"#000\",opacity:.45}},dropShadow:{enabled:!1,top:1,left:1,blur:1,color:\"#000\",opacity:.45}},fill:{type:\"solid\",colors:void 0,opacity:.85,gradient:{shade:\"dark\",type:\"horizontal\",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},image:{src:[],width:void 0,height:void 0},pattern:{style:\"squares\",width:6,height:6,strokeWidth:2}},forecastDataPoints:{count:0,fillOpacity:.5,strokeWidth:void 0,dashArray:4},grid:{show:!0,borderColor:\"#e0e0e0\",strokeDashArray:0,position:\"back\",xaxis:{lines:{show:!1}},yaxis:{lines:{show:!0}},row:{colors:void 0,opacity:.5},column:{colors:void 0,opacity:.5},padding:{top:0,right:10,bottom:0,left:12}},labels:[],legend:{show:!0,showForSingleSeries:!1,showForNullSeries:!0,showForZeroSeries:!0,floating:!1,position:\"bottom\",horizontalAlign:\"center\",inverseOrder:!1,fontSize:\"12px\",fontFamily:void 0,fontWeight:400,width:void 0,height:void 0,formatter:void 0,tooltipHoverFormatter:void 0,offsetX:-20,offsetY:4,customLegendItems:[],labels:{colors:void 0,useSeriesColors:!1},markers:{width:12,height:12,strokeWidth:0,fillColors:void 0,strokeColor:\"#fff\",radius:12,customHTML:void 0,offsetX:0,offsetY:0,onClick:void 0},itemMargin:{horizontal:5,vertical:2},onItemClick:{toggleDataSeries:!0},onItemHover:{highlightDataSeries:!0}},markers:{discrete:[],size:0,colors:void 0,strokeColors:\"#fff\",strokeWidth:2,strokeOpacity:.9,strokeDashArray:0,fillOpacity:1,shape:\"circle\",width:8,height:8,radius:2,offsetX:0,offsetY:0,onClick:void 0,onDblClick:void 0,showNullDataPoints:!0,hover:{size:void 0,sizeOffset:3}},noData:{text:void 0,align:\"center\",verticalAlign:\"middle\",offsetX:0,offsetY:0,style:{color:void 0,fontSize:\"14px\",fontFamily:void 0}},responsive:[],series:void 0,states:{normal:{filter:{type:\"none\",value:0}},hover:{filter:{type:\"lighten\",value:.1}},active:{allowMultipleDataPointsSelection:!1,filter:{type:\"darken\",value:.5}}},title:{text:void 0,align:\"left\",margin:5,offsetX:0,offsetY:0,floating:!1,style:{fontSize:\"14px\",fontWeight:900,fontFamily:void 0,color:void 0}},subtitle:{text:void 0,align:\"left\",margin:5,offsetX:0,offsetY:30,floating:!1,style:{fontSize:\"12px\",fontWeight:400,fontFamily:void 0,color:void 0}},stroke:{show:!0,curve:\"smooth\",lineCap:\"butt\",width:2,colors:void 0,dashArray:0,fill:{type:\"solid\",colors:void 0,opacity:.85,gradient:{shade:\"dark\",type:\"horizontal\",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]}}},tooltip:{enabled:!0,enabledOnSeries:void 0,shared:!0,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:\"light\",cssClass:\"\",style:{fontSize:\"12px\",fontFamily:void 0},onDatasetHover:{highlightDataSeries:!1},x:{show:!0,format:\"dd MMM\",formatter:void 0},y:{formatter:void 0,title:{formatter:function(t){return t?t+\": \":\"\"}}},z:{formatter:void 0,title:\"Size: \"},marker:{show:!0,fillColors:void 0},items:{display:\"flex\"},fixed:{enabled:!1,position:\"topRight\",offsetX:0,offsetY:0}},xaxis:{type:\"category\",categories:[],convertedCatToNumeric:!1,offsetX:0,offsetY:0,overwriteCategories:void 0,labels:{show:!0,rotate:-45,rotateAlways:!1,hideOverlappingLabels:!0,trim:!1,minHeight:void 0,maxHeight:120,showDuplicates:!0,style:{colors:[],fontSize:\"12px\",fontWeight:400,fontFamily:void 0,cssClass:\"\"},offsetX:0,offsetY:0,format:void 0,formatter:void 0,datetimeUTC:!0,datetimeFormatter:{year:\"yyyy\",month:\"MMM 'yy\",day:\"dd MMM\",hour:\"HH:mm\",minute:\"HH:mm:ss\",second:\"HH:mm:ss\"}},group:{groups:[],style:{colors:[],fontSize:\"12px\",fontWeight:400,fontFamily:void 0,cssClass:\"\"}},axisBorder:{show:!0,color:\"#e0e0e0\",width:\"100%\",height:1,offsetX:0,offsetY:0},axisTicks:{show:!0,color:\"#e0e0e0\",height:6,offsetX:0,offsetY:0},tickAmount:void 0,tickPlacement:\"on\",min:void 0,max:void 0,range:void 0,floating:!1,decimalsInFloat:void 0,position:\"bottom\",title:{text:void 0,offsetX:0,offsetY:0,style:{color:void 0,fontSize:\"12px\",fontWeight:900,fontFamily:void 0,cssClass:\"\"}},crosshairs:{show:!0,width:1,position:\"back\",opacity:.9,stroke:{color:\"#b6b6b6\",width:1,dashArray:3},fill:{type:\"solid\",color:\"#B1B9C4\",gradient:{colorFrom:\"#D8E3F0\",colorTo:\"#BED1E6\",stops:[0,100],opacityFrom:.4,opacityTo:.5}},dropShadow:{enabled:!1,left:0,top:0,blur:1,opacity:.4}},tooltip:{enabled:!0,offsetY:0,formatter:void 0,style:{fontSize:\"12px\",fontFamily:void 0}}},yaxis:this.yAxis,theme:{mode:\"light\",palette:\"palette1\",monochrome:{enabled:!1,color:\"#008FFB\",shadeTo:\"light\",shadeIntensity:.65}}}}}]),t}(),P=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.graphics=new m(this.ctx),this.w.globals.isBarHorizontal&&(this.invertAxis=!0),this.helpers=new w(this),this.xAxisAnnotations=new k(this),this.yAxisAnnotations=new A(this),this.pointsAnnotations=new S(this),this.w.globals.isBarHorizontal&&this.w.config.yaxis[0].reversed&&(this.inversedReversedAxis=!0),this.xDivision=this.w.globals.gridWidth/this.w.globals.dataPoints}return r(t,[{key:\"drawAxesAnnotations\",value:function(){var t=this.w;if(t.globals.axisCharts){for(var e=this.yAxisAnnotations.drawYAxisAnnotations(),i=this.xAxisAnnotations.drawXAxisAnnotations(),a=this.pointsAnnotations.drawPointAnnotations(),s=t.config.chart.animations.enabled,r=[e,i,a],o=[i.node,e.node,a.node],n=0;n<3;n++)t.globals.dom.elGraphical.add(r[n]),!s||t.globals.resized||t.globals.dataChanged||\"scatter\"!==t.config.chart.type&&\"bubble\"!==t.config.chart.type&&t.globals.dataPoints>1&&o[n].classList.add(\"apexcharts-element-hidden\"),t.globals.delayedElements.push({el:o[n],index:0});this.helpers.annotationsBackground()}}},{key:\"drawImageAnnos\",value:function(){var t=this;this.w.config.annotations.images.map((function(e,i){t.addImage(e,i)}))}},{key:\"drawTextAnnos\",value:function(){var t=this;this.w.config.annotations.texts.map((function(e,i){t.addText(e,i)}))}},{key:\"addXaxisAnnotation\",value:function(t,e,i){this.xAxisAnnotations.addXaxisAnnotation(t,e,i)}},{key:\"addYaxisAnnotation\",value:function(t,e,i){this.yAxisAnnotations.addYaxisAnnotation(t,e,i)}},{key:\"addPointAnnotation\",value:function(t,e,i){this.pointsAnnotations.addPointAnnotation(t,e,i)}},{key:\"addText\",value:function(t,e){var i=t.x,a=t.y,s=t.text,r=t.textAnchor,o=t.foreColor,n=t.fontSize,l=t.fontFamily,h=t.fontWeight,c=t.cssClass,d=t.backgroundColor,g=t.borderWidth,u=t.strokeDashArray,p=t.borderRadius,f=t.borderColor,x=t.appendTo,b=void 0===x?\".apexcharts-annotations\":x,v=t.paddingLeft,m=void 0===v?4:v,y=t.paddingRight,w=void 0===y?4:y,k=t.paddingBottom,A=void 0===k?2:k,S=t.paddingTop,C=void 0===S?2:S,L=this.w,P=this.graphics.drawText({x:i,y:a,text:s,textAnchor:r||\"start\",fontSize:n||\"12px\",fontWeight:h||\"regular\",fontFamily:l||L.config.chart.fontFamily,foreColor:o||L.config.chart.foreColor,cssClass:c}),I=L.globals.dom.baseEl.querySelector(b);I&&I.appendChild(P.node);var T=P.bbox();if(s){var M=this.graphics.drawRect(T.x-m,T.y-C,T.width+m+w,T.height+A+C,p,d||\"transparent\",1,g,f,u);I.insertBefore(M.node,P.node)}}},{key:\"addImage\",value:function(t,e){var i=this.w,a=t.path,s=t.x,r=void 0===s?0:s,o=t.y,n=void 0===o?0:o,l=t.width,h=void 0===l?20:l,c=t.height,d=void 0===c?20:c,g=t.appendTo,u=void 0===g?\".apexcharts-annotations\":g,p=i.globals.dom.Paper.image(a);p.size(h,d).move(r,n);var f=i.globals.dom.baseEl.querySelector(u);return f&&f.appendChild(p.node),p}},{key:\"addXaxisAnnotationExternal\",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\"xaxis\",contextMethod:i.addXaxisAnnotation}),i}},{key:\"addYaxisAnnotationExternal\",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\"yaxis\",contextMethod:i.addYaxisAnnotation}),i}},{key:\"addPointAnnotationExternal\",value:function(t,e,i){return void 0===this.invertAxis&&(this.invertAxis=i.w.globals.isBarHorizontal),this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\"point\",contextMethod:i.addPointAnnotation}),i}},{key:\"addAnnotationExternal\",value:function(t){var e=t.params,i=t.pushToMemory,a=t.context,s=t.type,r=t.contextMethod,o=a,n=o.w,l=n.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(s,\"-annotations\")),h=l.childNodes.length+1,c=new L,d=Object.assign({},\"xaxis\"===s?c.xAxisAnnotation:\"yaxis\"===s?c.yAxisAnnotation:c.pointAnnotation),g=x.extend(d,e);switch(s){case\"xaxis\":this.addXaxisAnnotation(g,l,h);break;case\"yaxis\":this.addYaxisAnnotation(g,l,h);break;case\"point\":this.addPointAnnotation(g,l,h)}var u=n.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(s,\"-annotations .apexcharts-\").concat(s,\"-annotation-label[rel='\").concat(h,\"']\")),p=this.helpers.addBackgroundToAnno(u,g);return p&&l.insertBefore(p.node,u),i&&n.globals.memory.methodsToExec.push({context:o,id:g.id?g.id:x.randomId(),method:r,label:\"addAnnotation\",params:e}),a}},{key:\"clearAnnotations\",value:function(t){var e=t.w,i=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations\");e.globals.memory.methodsToExec.map((function(t,i){\"addText\"!==t.label&&\"addAnnotation\"!==t.label||e.globals.memory.methodsToExec.splice(i,1)})),i=x.listToArray(i),Array.prototype.forEach.call(i,(function(t){for(;t.firstChild;)t.removeChild(t.firstChild)}))}},{key:\"removeAnnotation\",value:function(t,e){var i=t.w,a=i.globals.dom.baseEl.querySelectorAll(\".\".concat(e));a&&(i.globals.memory.methodsToExec.map((function(t,a){t.id===e&&i.globals.memory.methodsToExec.splice(a,1)})),Array.prototype.forEach.call(a,(function(t){t.parentElement.removeChild(t)})))}}]),t}(),I=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.months31=[1,3,5,7,8,10,12],this.months30=[2,4,6,9,11],this.daysCntOfYear=[0,31,59,90,120,151,181,212,243,273,304,334]}return r(t,[{key:\"isValidDate\",value:function(t){return!isNaN(this.parseDate(t))}},{key:\"getTimeStamp\",value:function(t){return Date.parse(t)?this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(t).toISOString().substr(0,25)).getTime():new Date(t).getTime():t}},{key:\"getDate\",value:function(t){return this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(t).toUTCString()):new Date(t)}},{key:\"parseDate\",value:function(t){var e=Date.parse(t);if(!isNaN(e))return this.getTimeStamp(t);var i=Date.parse(t.replace(/-/g,\"/\").replace(/[a-z]+/gi,\" \"));return i=this.getTimeStamp(i)}},{key:\"parseDateWithTimezone\",value:function(t){return Date.parse(t.replace(/-/g,\"/\").replace(/[a-z]+/gi,\" \"))}},{key:\"formatDate\",value:function(t,e){var i=this.w.globals.locale,a=this.w.config.xaxis.labels.datetimeUTC,s=[\"\\0\"].concat(u(i.months)),r=[\"\\x01\"].concat(u(i.shortMonths)),o=[\"\\x02\"].concat(u(i.days)),n=[\"\\x03\"].concat(u(i.shortDays));function l(t,e){var i=t+\"\";for(e=e||2;i.length<e;)i=\"0\"+i;return i}var h=a?t.getUTCFullYear():t.getFullYear();e=(e=(e=e.replace(/(^|[^\\\\])yyyy+/g,\"$1\"+h)).replace(/(^|[^\\\\])yy/g,\"$1\"+h.toString().substr(2,2))).replace(/(^|[^\\\\])y/g,\"$1\"+h);var c=(a?t.getUTCMonth():t.getMonth())+1;e=(e=(e=(e=e.replace(/(^|[^\\\\])MMMM+/g,\"$1\"+s[0])).replace(/(^|[^\\\\])MMM/g,\"$1\"+r[0])).replace(/(^|[^\\\\])MM/g,\"$1\"+l(c))).replace(/(^|[^\\\\])M/g,\"$1\"+c);var d=a?t.getUTCDate():t.getDate();e=(e=(e=(e=e.replace(/(^|[^\\\\])dddd+/g,\"$1\"+o[0])).replace(/(^|[^\\\\])ddd/g,\"$1\"+n[0])).replace(/(^|[^\\\\])dd/g,\"$1\"+l(d))).replace(/(^|[^\\\\])d/g,\"$1\"+d);var g=a?t.getUTCHours():t.getHours(),p=g>12?g-12:0===g?12:g;e=(e=(e=(e=e.replace(/(^|[^\\\\])HH+/g,\"$1\"+l(g))).replace(/(^|[^\\\\])H/g,\"$1\"+g)).replace(/(^|[^\\\\])hh+/g,\"$1\"+l(p))).replace(/(^|[^\\\\])h/g,\"$1\"+p);var f=a?t.getUTCMinutes():t.getMinutes();e=(e=e.replace(/(^|[^\\\\])mm+/g,\"$1\"+l(f))).replace(/(^|[^\\\\])m/g,\"$1\"+f);var x=a?t.getUTCSeconds():t.getSeconds();e=(e=e.replace(/(^|[^\\\\])ss+/g,\"$1\"+l(x))).replace(/(^|[^\\\\])s/g,\"$1\"+x);var b=a?t.getUTCMilliseconds():t.getMilliseconds();e=e.replace(/(^|[^\\\\])fff+/g,\"$1\"+l(b,3)),b=Math.round(b/10),e=e.replace(/(^|[^\\\\])ff/g,\"$1\"+l(b)),b=Math.round(b/10);var v=g<12?\"AM\":\"PM\";e=(e=(e=e.replace(/(^|[^\\\\])f/g,\"$1\"+b)).replace(/(^|[^\\\\])TT+/g,\"$1\"+v)).replace(/(^|[^\\\\])T/g,\"$1\"+v.charAt(0));var m=v.toLowerCase();e=(e=e.replace(/(^|[^\\\\])tt+/g,\"$1\"+m)).replace(/(^|[^\\\\])t/g,\"$1\"+m.charAt(0));var y=-t.getTimezoneOffset(),w=a||!y?\"Z\":y>0?\"+\":\"-\";if(!a){var k=(y=Math.abs(y))%60;w+=l(Math.floor(y/60))+\":\"+l(k)}e=e.replace(/(^|[^\\\\])K/g,\"$1\"+w);var A=(a?t.getUTCDay():t.getDay())+1;return e=(e=(e=(e=(e=e.replace(new RegExp(o[0],\"g\"),o[A])).replace(new RegExp(n[0],\"g\"),n[A])).replace(new RegExp(s[0],\"g\"),s[c])).replace(new RegExp(r[0],\"g\"),r[c])).replace(/\\\\(.)/g,\"$1\")}},{key:\"getTimeUnitsfromTimestamp\",value:function(t,e,i){var a=this.w;void 0!==a.config.xaxis.min&&(t=a.config.xaxis.min),void 0!==a.config.xaxis.max&&(e=a.config.xaxis.max);var s=this.getDate(t),r=this.getDate(e),o=this.formatDate(s,\"yyyy MM dd HH mm ss fff\").split(\" \"),n=this.formatDate(r,\"yyyy MM dd HH mm ss fff\").split(\" \");return{minMillisecond:parseInt(o[6],10),maxMillisecond:parseInt(n[6],10),minSecond:parseInt(o[5],10),maxSecond:parseInt(n[5],10),minMinute:parseInt(o[4],10),maxMinute:parseInt(n[4],10),minHour:parseInt(o[3],10),maxHour:parseInt(n[3],10),minDate:parseInt(o[2],10),maxDate:parseInt(n[2],10),minMonth:parseInt(o[1],10)-1,maxMonth:parseInt(n[1],10)-1,minYear:parseInt(o[0],10),maxYear:parseInt(n[0],10)}}},{key:\"isLeapYear\",value:function(t){return t%4==0&&t%100!=0||t%400==0}},{key:\"calculcateLastDaysOfMonth\",value:function(t,e,i){return this.determineDaysOfMonths(t,e)-i}},{key:\"determineDaysOfYear\",value:function(t){var e=365;return this.isLeapYear(t)&&(e=366),e}},{key:\"determineRemainingDaysOfYear\",value:function(t,e,i){var a=this.daysCntOfYear[e]+i;return e>1&&this.isLeapYear()&&a++,a}},{key:\"determineDaysOfMonths\",value:function(t,e){var i=30;switch(t=x.monthMod(t),!0){case this.months30.indexOf(t)>-1:2===t&&(i=this.isLeapYear(e)?29:28);break;case this.months31.indexOf(t)>-1:default:i=31}return i}}]),t}(),T=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.tooltipKeyFormat=\"dd MMM\"}return r(t,[{key:\"xLabelFormat\",value:function(t,e,i,a){var s=this.w;if(\"datetime\"===s.config.xaxis.type&&void 0===s.config.xaxis.labels.formatter&&void 0===s.config.tooltip.x.formatter){var r=new I(this.ctx);return r.formatDate(r.getDate(e),s.config.tooltip.x.format)}return t(e,i,a)}},{key:\"defaultGeneralFormatter\",value:function(t){return Array.isArray(t)?t.map((function(t){return t})):t}},{key:\"defaultYFormatter\",value:function(t,e,i){var a=this.w;return x.isNumber(t)&&(t=0!==a.globals.yValueDecimal?t.toFixed(void 0!==e.decimalsInFloat?e.decimalsInFloat:a.globals.yValueDecimal):a.globals.maxYArr[i]-a.globals.minYArr[i]<5?t.toFixed(1):t.toFixed(0)),t}},{key:\"setLabelFormatters\",value:function(){var t=this,e=this.w;return e.globals.xaxisTooltipFormatter=function(e){return t.defaultGeneralFormatter(e)},e.globals.ttKeyFormatter=function(e){return t.defaultGeneralFormatter(e)},e.globals.ttZFormatter=function(t){return t},e.globals.legendFormatter=function(e){return t.defaultGeneralFormatter(e)},void 0!==e.config.xaxis.labels.formatter?e.globals.xLabelFormatter=e.config.xaxis.labels.formatter:e.globals.xLabelFormatter=function(t){if(x.isNumber(t)){if(!e.config.xaxis.convertedCatToNumeric&&\"numeric\"===e.config.xaxis.type){if(x.isNumber(e.config.xaxis.decimalsInFloat))return t.toFixed(e.config.xaxis.decimalsInFloat);var i=e.globals.maxX-e.globals.minX;return i>0&&i<100?t.toFixed(1):t.toFixed(0)}if(e.globals.isBarHorizontal)if(e.globals.maxY-e.globals.minYArr<4)return t.toFixed(1);return t.toFixed(0)}return t},\"function\"==typeof e.config.tooltip.x.formatter?e.globals.ttKeyFormatter=e.config.tooltip.x.formatter:e.globals.ttKeyFormatter=e.globals.xLabelFormatter,\"function\"==typeof e.config.xaxis.tooltip.formatter&&(e.globals.xaxisTooltipFormatter=e.config.xaxis.tooltip.formatter),(Array.isArray(e.config.tooltip.y)||void 0!==e.config.tooltip.y.formatter)&&(e.globals.ttVal=e.config.tooltip.y),void 0!==e.config.tooltip.z.formatter&&(e.globals.ttZFormatter=e.config.tooltip.z.formatter),void 0!==e.config.legend.formatter&&(e.globals.legendFormatter=e.config.legend.formatter),e.config.yaxis.forEach((function(i,a){void 0!==i.labels.formatter?e.globals.yLabelFormatters[a]=i.labels.formatter:e.globals.yLabelFormatters[a]=function(s){return e.globals.xyCharts?Array.isArray(s)?s.map((function(e){return t.defaultYFormatter(e,i,a)})):t.defaultYFormatter(s,i,a):s}})),e.globals}},{key:\"heatmapLabelFormatters\",value:function(){var t=this.w;if(\"heatmap\"===t.config.chart.type){t.globals.yAxisScale[0].result=t.globals.seriesNames.slice();var e=t.globals.seriesNames.reduce((function(t,e){return t.length>e.length?t:e}),0);t.globals.yAxisScale[0].niceMax=e,t.globals.yAxisScale[0].niceMin=e}}}]),t}(),M=function(t){var e,i=t.isTimeline,a=t.ctx,s=t.seriesIndex,r=t.dataPointIndex,o=t.y1,n=t.y2,l=t.w,h=l.globals.seriesRangeStart[s][r],c=l.globals.seriesRangeEnd[s][r],d=l.globals.labels[r],g=l.config.series[s].name?l.config.series[s].name:\"\",u=l.globals.ttKeyFormatter,p=l.config.tooltip.y.title.formatter,f={w:l,seriesIndex:s,dataPointIndex:r,start:h,end:c};(\"function\"==typeof p&&(g=p(g,f)),null!==(e=l.config.series[s].data[r])&&void 0!==e&&e.x&&(d=l.config.series[s].data[r].x),i)||\"datetime\"===l.config.xaxis.type&&(d=new T(a).xLabelFormat(l.globals.ttKeyFormatter,d,d,{i:void 0,dateFormatter:new I(a).formatDate,w:l}));\"function\"==typeof u&&(d=u(d,f)),Number.isFinite(o)&&Number.isFinite(n)&&(h=o,c=n);var x=\"\",b=\"\",v=l.globals.colors[s];if(void 0===l.config.tooltip.x.formatter)if(\"datetime\"===l.config.xaxis.type){var m=new I(a);x=m.formatDate(m.getDate(h),l.config.tooltip.x.format),b=m.formatDate(m.getDate(c),l.config.tooltip.x.format)}else x=h,b=c;else x=l.config.tooltip.x.formatter(h),b=l.config.tooltip.x.formatter(c);return{start:h,end:c,startVal:x,endVal:b,ylabel:d,color:v,seriesName:g}},X=function(t){var e=t.color,i=t.seriesName,a=t.ylabel,s=t.start,r=t.end,o=t.seriesIndex,n=t.dataPointIndex,l=t.ctx.tooltip.tooltipLabels.getFormatters(o);s=l.yLbFormatter(s),r=l.yLbFormatter(r);var h=l.yLbFormatter(t.w.globals.series[o][n]),c='<span class=\"value start-value\">\\n  '.concat(s,'\\n  </span> <span class=\"separator\">-</span> <span class=\"value end-value\">\\n  ').concat(r,\"\\n  </span>\");return'<div class=\"apexcharts-tooltip-rangebar\"><div> <span class=\"series-name\" style=\"color: '+e+'\">'+(i||\"\")+'</span></div><div> <span class=\"category\">'+a+\": </span> \"+(t.w.globals.comboCharts?\"rangeArea\"===t.w.config.series[o].type||\"rangeBar\"===t.w.config.series[o].type?c:\"<span>\".concat(h,\"</span>\"):c)+\" </div></div>\"},z=function(){function t(e){a(this,t),this.opts=e}return r(t,[{key:\"hideYAxis\",value:function(){this.opts.yaxis[0].show=!1,this.opts.yaxis[0].title.text=\"\",this.opts.yaxis[0].axisBorder.show=!1,this.opts.yaxis[0].axisTicks.show=!1,this.opts.yaxis[0].floating=!0}},{key:\"line\",value:function(){return{chart:{animations:{easing:\"swing\"}},dataLabels:{enabled:!1},stroke:{width:5,curve:\"straight\"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}},{key:\"sparkline\",value:function(t){this.hideYAxis();return x.extend(t,{grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}})}},{key:\"bar\",value:function(){return{chart:{stacked:!1,animations:{easing:\"swing\"}},plotOptions:{bar:{dataLabels:{position:\"center\"}}},dataLabels:{style:{colors:[\"#fff\"]},background:{enabled:!1}},stroke:{width:0,lineCap:\"round\"},fill:{opacity:.85},legend:{markers:{shape:\"square\",radius:2,size:8}},tooltip:{shared:!1,intersect:!0},xaxis:{tooltip:{enabled:!1},tickPlacement:\"between\",crosshairs:{width:\"barWidth\",position:\"back\",fill:{type:\"gradient\"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:\"funnel\",value:function(){return this.hideYAxis(),e(e({},this.bar()),{},{chart:{animations:{easing:\"linear\",speed:800,animateGradually:{enabled:!1}}},plotOptions:{bar:{horizontal:!0,borderRadiusApplication:\"around\",borderRadius:0,dataLabels:{position:\"center\"}}},grid:{show:!1,padding:{left:0,right:0}},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}}})}},{key:\"candlestick\",value:function(){var t=this;return{stroke:{width:1,colors:[\"#333\"]},fill:{opacity:1},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(e){var i=e.seriesIndex,a=e.dataPointIndex,s=e.w;return t._getBoxTooltip(s,i,a,[\"Open\",\"High\",\"\",\"Low\",\"Close\"],\"candlestick\")}},states:{active:{filter:{type:\"none\"}}},xaxis:{crosshairs:{width:1}}}}},{key:\"boxPlot\",value:function(){var t=this;return{chart:{animations:{dynamicAnimation:{enabled:!1}}},stroke:{width:1,colors:[\"#24292e\"]},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(e){var i=e.seriesIndex,a=e.dataPointIndex,s=e.w;return t._getBoxTooltip(s,i,a,[\"Minimum\",\"Q1\",\"Median\",\"Q3\",\"Maximum\"],\"boxPlot\")}},markers:{size:5,strokeWidth:1,strokeColors:\"#111\"},xaxis:{crosshairs:{width:1}}}}},{key:\"rangeBar\",value:function(){return{chart:{animations:{animateGradually:!1}},stroke:{width:0,lineCap:\"square\"},plotOptions:{bar:{borderRadius:0,dataLabels:{position:\"center\"}}},dataLabels:{enabled:!1,formatter:function(t,e){e.ctx;var i=e.seriesIndex,a=e.dataPointIndex,s=e.w,r=function(){var t=s.globals.seriesRangeStart[i][a];return s.globals.seriesRangeEnd[i][a]-t};return s.globals.comboCharts?\"rangeBar\"===s.config.series[i].type||\"rangeArea\"===s.config.series[i].type?r():t:r()},background:{enabled:!1},style:{colors:[\"#fff\"]}},markers:{size:10},tooltip:{shared:!1,followCursor:!0,custom:function(t){return t.w.config.plotOptions&&t.w.config.plotOptions.bar&&t.w.config.plotOptions.bar.horizontal?function(t){var i=M(e(e({},t),{},{isTimeline:!0})),a=i.color,s=i.seriesName,r=i.ylabel,o=i.startVal,n=i.endVal;return X(e(e({},t),{},{color:a,seriesName:s,ylabel:r,start:o,end:n}))}(t):function(t){var i=M(t),a=i.color,s=i.seriesName,r=i.ylabel,o=i.start,n=i.end;return X(e(e({},t),{},{color:a,seriesName:s,ylabel:r,start:o,end:n}))}(t)}},xaxis:{tickPlacement:\"between\",tooltip:{enabled:!1},crosshairs:{stroke:{width:0}}}}}},{key:\"dumbbell\",value:function(t){var e,i;return null!==(e=t.plotOptions.bar)&&void 0!==e&&e.barHeight||(t.plotOptions.bar.barHeight=2),null!==(i=t.plotOptions.bar)&&void 0!==i&&i.columnWidth||(t.plotOptions.bar.columnWidth=2),t}},{key:\"area\",value:function(){return{stroke:{width:4,fill:{type:\"solid\",gradient:{inverseColors:!1,shade:\"light\",type:\"vertical\",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}}},fill:{type:\"gradient\",gradient:{inverseColors:!1,shade:\"light\",type:\"vertical\",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}},markers:{size:0,hover:{sizeOffset:6}},tooltip:{followCursor:!1}}}},{key:\"rangeArea\",value:function(){return{stroke:{curve:\"straight\",width:0},fill:{type:\"solid\",opacity:.6},markers:{size:0},states:{hover:{filter:{type:\"none\"}},active:{filter:{type:\"none\"}}},tooltip:{intersect:!1,shared:!0,followCursor:!0,custom:function(t){return function(t){var i=M(t),a=i.color,s=i.seriesName,r=i.ylabel,o=i.start,n=i.end;return X(e(e({},t),{},{color:a,seriesName:s,ylabel:r,start:o,end:n}))}(t)}}}}},{key:\"brush\",value:function(t){return x.extend(t,{chart:{toolbar:{autoSelected:\"selection\",show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1},stroke:{width:1},tooltip:{enabled:!1},xaxis:{tooltip:{enabled:!1}}})}},{key:\"stacked100\",value:function(t){t.dataLabels=t.dataLabels||{},t.dataLabels.formatter=t.dataLabels.formatter||void 0;var e=t.dataLabels.formatter;return t.yaxis.forEach((function(e,i){t.yaxis[i].min=0,t.yaxis[i].max=100})),\"bar\"===t.chart.type&&(t.dataLabels.formatter=e||function(t){return\"number\"==typeof t&&t?t.toFixed(0)+\"%\":t}),t}},{key:\"stackedBars\",value:function(){var t=this.bar();return e(e({},t),{},{plotOptions:e(e({},t.plotOptions),{},{bar:e(e({},t.plotOptions.bar),{},{borderRadiusApplication:\"end\",borderRadiusWhenStacked:\"last\"})})})}},{key:\"convertCatToNumeric\",value:function(t){return t.xaxis.convertedCatToNumeric=!0,t}},{key:\"convertCatToNumericXaxis\",value:function(t,e,i){t.xaxis.type=\"numeric\",t.xaxis.labels=t.xaxis.labels||{},t.xaxis.labels.formatter=t.xaxis.labels.formatter||function(t){return x.isNumber(t)?Math.floor(t):t};var a=t.xaxis.labels.formatter,s=t.xaxis.categories&&t.xaxis.categories.length?t.xaxis.categories:t.labels;return i&&i.length&&(s=i.map((function(t){return Array.isArray(t)?t:String(t)}))),s&&s.length&&(t.xaxis.labels.formatter=function(t){return x.isNumber(t)?a(s[Math.floor(t)-1]):a(t)}),t.xaxis.categories=[],t.labels=[],t.xaxis.tickAmount=t.xaxis.tickAmount||\"dataPoints\",t}},{key:\"bubble\",value:function(){return{dataLabels:{style:{colors:[\"#fff\"]}},tooltip:{shared:!1,intersect:!0},xaxis:{crosshairs:{width:0}},fill:{type:\"solid\",gradient:{shade:\"light\",inverse:!0,shadeIntensity:.55,opacityFrom:.4,opacityTo:.8}}}}},{key:\"scatter\",value:function(){return{dataLabels:{enabled:!1},tooltip:{shared:!1,intersect:!0},markers:{size:6,strokeWidth:1,hover:{sizeOffset:2}}}}},{key:\"heatmap\",value:function(){return{chart:{stacked:!1},fill:{opacity:1},dataLabels:{style:{colors:[\"#fff\"]}},stroke:{colors:[\"#fff\"]},tooltip:{followCursor:!0,marker:{show:!1},x:{show:!1}},legend:{position:\"top\",markers:{shape:\"square\",size:10,offsetY:2}},grid:{padding:{right:20}}}}},{key:\"treemap\",value:function(){return{chart:{zoom:{enabled:!1}},dataLabels:{style:{fontSize:14,fontWeight:600,colors:[\"#fff\"]}},stroke:{show:!0,width:2,colors:[\"#fff\"]},legend:{show:!1},fill:{gradient:{stops:[0,100]}},tooltip:{followCursor:!0,x:{show:!1}},grid:{padding:{left:0,right:0}},xaxis:{crosshairs:{show:!1},tooltip:{enabled:!1}}}}},{key:\"pie\",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(t){return t.toFixed(1)+\"%\"},style:{colors:[\"#fff\"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:[\"#fff\"]},fill:{opacity:1,gradient:{shade:\"light\",stops:[0,100]}},tooltip:{theme:\"dark\",fillSeriesColor:!0},legend:{position:\"right\"}}}},{key:\"donut\",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+\"%\"},style:{colors:[\"#fff\"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:[\"#fff\"]},fill:{opacity:1,gradient:{shade:\"light\",shadeIntensity:.35,stops:[80,100],opacityFrom:1,opacityTo:1}},tooltip:{theme:\"dark\",fillSeriesColor:!0},legend:{position:\"right\"}}}},{key:\"polarArea\",value:function(){return this.opts.yaxis[0].tickAmount=this.opts.yaxis[0].tickAmount?this.opts.yaxis[0].tickAmount:6,{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+\"%\"},enabled:!1},stroke:{show:!0,width:2},fill:{opacity:.7},tooltip:{theme:\"dark\",fillSeriesColor:!0},legend:{position:\"right\"}}}},{key:\"radar\",value:function(){return this.opts.yaxis[0].labels.offsetY=this.opts.yaxis[0].labels.offsetY?this.opts.yaxis[0].labels.offsetY:6,{dataLabels:{enabled:!1,style:{fontSize:\"11px\"}},stroke:{width:2},markers:{size:3,strokeWidth:1,strokeOpacity:1},fill:{opacity:.2},tooltip:{shared:!1,intersect:!0,followCursor:!0},grid:{show:!1},xaxis:{labels:{formatter:function(t){return t},style:{colors:[\"#a8a8a8\"],fontSize:\"11px\"}},tooltip:{enabled:!1},crosshairs:{show:!1}}}}},{key:\"radialBar\",value:function(){return{chart:{animations:{dynamicAnimation:{enabled:!0,speed:800}},toolbar:{show:!1}},fill:{gradient:{shade:\"dark\",shadeIntensity:.4,inverseColors:!1,type:\"diagonal2\",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},legend:{show:!1,position:\"right\"},tooltip:{enabled:!1,fillSeriesColor:!0}}}},{key:\"_getBoxTooltip\",value:function(t,e,i,a,s){var r=t.globals.seriesCandleO[e][i],o=t.globals.seriesCandleH[e][i],n=t.globals.seriesCandleM[e][i],l=t.globals.seriesCandleL[e][i],h=t.globals.seriesCandleC[e][i];return t.config.series[e].type&&t.config.series[e].type!==s?'<div class=\"apexcharts-custom-tooltip\">\\n          '.concat(t.config.series[e].name?t.config.series[e].name:\"series-\"+(e+1),\": <strong>\").concat(t.globals.series[e][i],\"</strong>\\n        </div>\"):'<div class=\"apexcharts-tooltip-box apexcharts-tooltip-'.concat(t.config.chart.type,'\">')+\"<div>\".concat(a[0],': <span class=\"value\">')+r+\"</span></div>\"+\"<div>\".concat(a[1],': <span class=\"value\">')+o+\"</span></div>\"+(n?\"<div>\".concat(a[2],': <span class=\"value\">')+n+\"</span></div>\":\"\")+\"<div>\".concat(a[3],': <span class=\"value\">')+l+\"</span></div>\"+\"<div>\".concat(a[4],': <span class=\"value\">')+h+\"</span></div></div>\"}}]),t}(),E=function(){function t(e){a(this,t),this.opts=e}return r(t,[{key:\"init\",value:function(t){var e=t.responsiveOverride,a=this.opts,s=new L,r=new z(a);this.chartType=a.chart.type,a=this.extendYAxis(a),a=this.extendAnnotations(a);var o=s.init(),n={};if(a&&\"object\"===i(a)){var l,h,c,d,g,u,p,f,b={};b=-1!==[\"line\",\"area\",\"bar\",\"candlestick\",\"boxPlot\",\"rangeBar\",\"rangeArea\",\"bubble\",\"scatter\",\"heatmap\",\"treemap\",\"pie\",\"polarArea\",\"donut\",\"radar\",\"radialBar\"].indexOf(a.chart.type)?r[a.chart.type]():r.line(),null!==(l=a.plotOptions)&&void 0!==l&&null!==(h=l.bar)&&void 0!==h&&h.isFunnel&&(b=r.funnel()),a.chart.stacked&&\"bar\"===a.chart.type&&(b=r.stackedBars()),null!==(c=a.chart.brush)&&void 0!==c&&c.enabled&&(b=r.brush(b)),a.chart.stacked&&\"100%\"===a.chart.stackType&&(a=r.stacked100(a)),null!==(d=a.plotOptions)&&void 0!==d&&null!==(g=d.bar)&&void 0!==g&&g.isDumbbell&&(a=r.dumbbell(a)),this.checkForDarkTheme(window.Apex),this.checkForDarkTheme(a),a.xaxis=a.xaxis||window.Apex.xaxis||{},e||(a.xaxis.convertedCatToNumeric=!1),(null!==(u=(a=this.checkForCatToNumericXAxis(this.chartType,b,a)).chart.sparkline)&&void 0!==u&&u.enabled||null!==(p=window.Apex.chart)&&void 0!==p&&null!==(f=p.sparkline)&&void 0!==f&&f.enabled)&&(b=r.sparkline(b)),n=x.extend(o,b)}var v=x.extend(n,window.Apex);return o=x.extend(v,a),o=this.handleUserInputErrors(o)}},{key:\"checkForCatToNumericXAxis\",value:function(t,e,i){var a,s,r=new z(i),o=(\"bar\"===t||\"boxPlot\"===t)&&(null===(a=i.plotOptions)||void 0===a||null===(s=a.bar)||void 0===s?void 0:s.horizontal),n=\"pie\"===t||\"polarArea\"===t||\"donut\"===t||\"radar\"===t||\"radialBar\"===t||\"heatmap\"===t,l=\"datetime\"!==i.xaxis.type&&\"numeric\"!==i.xaxis.type,h=i.xaxis.tickPlacement?i.xaxis.tickPlacement:e.xaxis&&e.xaxis.tickPlacement;return o||n||!l||\"between\"===h||(i=r.convertCatToNumeric(i)),i}},{key:\"extendYAxis\",value:function(t,e){var i=new L;(void 0===t.yaxis||!t.yaxis||Array.isArray(t.yaxis)&&0===t.yaxis.length)&&(t.yaxis={}),t.yaxis.constructor!==Array&&window.Apex.yaxis&&window.Apex.yaxis.constructor!==Array&&(t.yaxis=x.extend(t.yaxis,window.Apex.yaxis)),t.yaxis.constructor!==Array?t.yaxis=[x.extend(i.yAxis,t.yaxis)]:t.yaxis=x.extendArray(t.yaxis,i.yAxis);var a=!1;t.yaxis.forEach((function(t){t.logarithmic&&(a=!0)}));var s=t.series;return e&&!s&&(s=e.config.series),a&&s.length!==t.yaxis.length&&s.length&&(t.yaxis=s.map((function(e,a){if(e.name||(s[a].name=\"series-\".concat(a+1)),t.yaxis[a])return t.yaxis[a].seriesName=s[a].name,t.yaxis[a];var r=x.extend(i.yAxis,t.yaxis[0]);return r.show=!1,r}))),a&&s.length>1&&s.length!==t.yaxis.length&&console.warn(\"A multi-series logarithmic chart should have equal number of series and y-axes. Please make sure to equalize both.\"),t}},{key:\"extendAnnotations\",value:function(t){return void 0===t.annotations&&(t.annotations={},t.annotations.yaxis=[],t.annotations.xaxis=[],t.annotations.points=[]),t=this.extendYAxisAnnotations(t),t=this.extendXAxisAnnotations(t),t=this.extendPointAnnotations(t)}},{key:\"extendYAxisAnnotations\",value:function(t){var e=new L;return t.annotations.yaxis=x.extendArray(void 0!==t.annotations.yaxis?t.annotations.yaxis:[],e.yAxisAnnotation),t}},{key:\"extendXAxisAnnotations\",value:function(t){var e=new L;return t.annotations.xaxis=x.extendArray(void 0!==t.annotations.xaxis?t.annotations.xaxis:[],e.xAxisAnnotation),t}},{key:\"extendPointAnnotations\",value:function(t){var e=new L;return t.annotations.points=x.extendArray(void 0!==t.annotations.points?t.annotations.points:[],e.pointAnnotation),t}},{key:\"checkForDarkTheme\",value:function(t){t.theme&&\"dark\"===t.theme.mode&&(t.tooltip||(t.tooltip={}),\"light\"!==t.tooltip.theme&&(t.tooltip.theme=\"dark\"),t.chart.foreColor||(t.chart.foreColor=\"#f6f7f8\"),t.chart.background||(t.chart.background=\"#424242\"),t.theme.palette||(t.theme.palette=\"palette4\"))}},{key:\"handleUserInputErrors\",value:function(t){var e=t;if(e.tooltip.shared&&e.tooltip.intersect)throw new Error(\"tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.\");if(\"bar\"===e.chart.type&&e.plotOptions.bar.horizontal){if(e.yaxis.length>1)throw new Error(\"Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false\");e.yaxis[0].reversed&&(e.yaxis[0].opposite=!0),e.xaxis.tooltip.enabled=!1,e.yaxis[0].tooltip.enabled=!1,e.chart.zoom.enabled=!1}return\"bar\"!==e.chart.type&&\"rangeBar\"!==e.chart.type||e.tooltip.shared&&\"barWidth\"===e.xaxis.crosshairs.width&&e.series.length>1&&(e.xaxis.crosshairs.width=\"tickWidth\"),\"candlestick\"!==e.chart.type&&\"boxPlot\"!==e.chart.type||e.yaxis[0].reversed&&(console.warn(\"Reversed y-axis in \".concat(e.chart.type,\" chart is not supported.\")),e.yaxis[0].reversed=!1),e}}]),t}(),Y=function(){function t(){a(this,t)}return r(t,[{key:\"initGlobalVars\",value:function(t){t.series=[],t.seriesCandleO=[],t.seriesCandleH=[],t.seriesCandleM=[],t.seriesCandleL=[],t.seriesCandleC=[],t.seriesRangeStart=[],t.seriesRangeEnd=[],t.seriesRange=[],t.seriesPercent=[],t.seriesGoals=[],t.seriesX=[],t.seriesZ=[],t.seriesNames=[],t.seriesTotals=[],t.seriesLog=[],t.seriesColors=[],t.stackedSeriesTotals=[],t.seriesXvalues=[],t.seriesYvalues=[],t.labels=[],t.hasXaxisGroups=!1,t.groups=[],t.hasSeriesGroups=!1,t.seriesGroups=[],t.categoryLabels=[],t.timescaleLabels=[],t.noLabelsProvided=!1,t.resizeTimer=null,t.selectionResizeTimer=null,t.delayedElements=[],t.pointsArray=[],t.dataLabelsRects=[],t.isXNumeric=!1,t.skipLastTimelinelabel=!1,t.skipFirstTimelinelabel=!1,t.isDataXYZ=!1,t.isMultiLineX=!1,t.isMultipleYAxis=!1,t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE,t.minYArr=[],t.maxYArr=[],t.maxX=-Number.MAX_VALUE,t.minX=Number.MAX_VALUE,t.initialMaxX=-Number.MAX_VALUE,t.initialMinX=Number.MAX_VALUE,t.maxDate=0,t.minDate=Number.MAX_VALUE,t.minZ=Number.MAX_VALUE,t.maxZ=-Number.MAX_VALUE,t.minXDiff=Number.MAX_VALUE,t.yAxisScale=[],t.xAxisScale=null,t.xAxisTicksPositions=[],t.yLabelsCoords=[],t.yTitleCoords=[],t.barPadForNumericAxis=0,t.padHorizontal=0,t.xRange=0,t.yRange=[],t.zRange=0,t.dataPoints=0,t.xTickAmount=0}},{key:\"globalVars\",value:function(t){return{chartID:null,cuid:null,events:{beforeMount:[],mounted:[],updated:[],clicked:[],selection:[],dataPointSelection:[],zoomed:[],scrolled:[]},colors:[],clientX:null,clientY:null,fill:{colors:[]},stroke:{colors:[]},dataLabels:{style:{colors:[]}},radarPolygons:{fill:{colors:[]}},markers:{colors:[],size:t.markers.size,largestSize:0},animationEnded:!1,isTouchDevice:\"ontouchstart\"in window||navigator.msMaxTouchPoints,isDirty:!1,isExecCalled:!1,initialConfig:null,initialSeries:[],lastXAxis:[],lastYAxis:[],columnSeries:null,labels:[],timescaleLabels:[],noLabelsProvided:!1,allSeriesCollapsed:!1,collapsedSeries:[],collapsedSeriesIndices:[],ancillaryCollapsedSeries:[],ancillaryCollapsedSeriesIndices:[],risingSeries:[],dataFormatXNumeric:!1,capturedSeriesIndex:-1,capturedDataPointIndex:-1,selectedDataPoints:[],goldenPadding:35,invalidLogScale:!1,ignoreYAxisIndexes:[],yAxisSameScaleIndices:[],maxValsInArrayIndex:0,radialSize:0,selection:void 0,zoomEnabled:\"zoom\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.zoom&&t.chart.zoom.enabled,panEnabled:\"pan\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.pan,selectionEnabled:\"selection\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.selection,yaxis:null,mousedown:!1,lastClientPosition:{},visibleXRange:void 0,yValueDecimal:0,total:0,SVGNS:\"http://www.w3.org/2000/svg\",svgWidth:0,svgHeight:0,noData:!1,locale:{},dom:{},memory:{methodsToExec:[]},shouldAnimate:!0,skipLastTimelinelabel:!1,skipFirstTimelinelabel:!1,delayedElements:[],axisCharts:!0,isDataXYZ:!1,resized:!1,resizeTimer:null,comboCharts:!1,dataChanged:!1,previousPaths:[],allSeriesHasEqualX:!0,pointsArray:[],dataLabelsRects:[],lastDrawnDataLabelsIndexes:[],hasNullValues:!1,easing:null,zoomed:!1,gridWidth:0,gridHeight:0,rotateXLabels:!1,defaultLabels:!1,xLabelFormatter:void 0,yLabelFormatters:[],xaxisTooltipFormatter:void 0,ttKeyFormatter:void 0,ttVal:void 0,ttZFormatter:void 0,LINE_HEIGHT_RATIO:1.618,xAxisLabelsHeight:0,xAxisGroupLabelsHeight:0,xAxisLabelsWidth:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null}}},{key:\"init\",value:function(t){var e=this.globalVars(t);return this.initGlobalVars(e),e.initialConfig=x.extend({},t),e.initialSeries=x.clone(t.series),e.lastXAxis=x.clone(e.initialConfig.xaxis),e.lastYAxis=x.clone(e.initialConfig.yaxis),e}}]),t}(),F=function(){function t(e){a(this,t),this.opts=e}return r(t,[{key:\"init\",value:function(){var t=new E(this.opts).init({responsiveOverride:!1});return{config:t,globals:(new Y).init(t)}}}]),t}(),R=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.opts=null,this.seriesIndex=0}return r(t,[{key:\"clippedImgArea\",value:function(t){var e=this.w,i=e.config,a=parseInt(e.globals.gridWidth,10),s=parseInt(e.globals.gridHeight,10),r=a>s?a:s,o=t.image,n=0,l=0;void 0===t.width&&void 0===t.height?void 0!==i.fill.image.width&&void 0!==i.fill.image.height?(n=i.fill.image.width+1,l=i.fill.image.height):(n=r+1,l=r):(n=t.width,l=t.height);var h=document.createElementNS(e.globals.SVGNS,\"pattern\");m.setAttrs(h,{id:t.patternID,patternUnits:t.patternUnits?t.patternUnits:\"userSpaceOnUse\",width:n+\"px\",height:l+\"px\"});var c=document.createElementNS(e.globals.SVGNS,\"image\");h.appendChild(c),c.setAttributeNS(window.SVG.xlink,\"href\",o),m.setAttrs(c,{x:0,y:0,preserveAspectRatio:\"none\",width:n+\"px\",height:l+\"px\"}),c.style.opacity=t.opacity,e.globals.dom.elDefs.node.appendChild(h)}},{key:\"getSeriesIndex\",value:function(t){var e=this.w,i=e.config.chart.type;return(\"bar\"===i||\"rangeBar\"===i)&&e.config.plotOptions.bar.distributed||\"heatmap\"===i||\"treemap\"===i?this.seriesIndex=t.seriesNumber:this.seriesIndex=t.seriesNumber%e.globals.series.length,this.seriesIndex}},{key:\"fillPath\",value:function(t){var e=this.w;this.opts=t;var i,a,s,r=this.w.config;this.seriesIndex=this.getSeriesIndex(t);var o=this.getFillColors()[this.seriesIndex];void 0!==e.globals.seriesColors[this.seriesIndex]&&(o=e.globals.seriesColors[this.seriesIndex]),\"function\"==typeof o&&(o=o({seriesIndex:this.seriesIndex,dataPointIndex:t.dataPointIndex,value:t.value,w:e}));var n=t.fillType?t.fillType:this.getFillType(this.seriesIndex),l=Array.isArray(r.fill.opacity)?r.fill.opacity[this.seriesIndex]:r.fill.opacity;t.color&&(o=t.color);var h=o;if(-1===o.indexOf(\"rgb\")?o.length<9&&(h=x.hexToRgba(o,l)):o.indexOf(\"rgba\")>-1&&(l=x.getOpacityFromRGBA(o)),t.opacity&&(l=t.opacity),\"pattern\"===n&&(a=this.handlePatternFill({fillConfig:t.fillConfig,patternFill:a,fillColor:o,fillOpacity:l,defaultColor:h})),\"gradient\"===n&&(s=this.handleGradientFill({fillConfig:t.fillConfig,fillColor:o,fillOpacity:l,i:this.seriesIndex})),\"image\"===n){var c=r.fill.image.src,d=t.patternID?t.patternID:\"\";this.clippedImgArea({opacity:l,image:Array.isArray(c)?t.seriesNumber<c.length?c[t.seriesNumber]:c[0]:c,width:t.width?t.width:void 0,height:t.height?t.height:void 0,patternUnits:t.patternUnits,patternID:\"pattern\".concat(e.globals.cuid).concat(t.seriesNumber+1).concat(d)}),i=\"url(#pattern\".concat(e.globals.cuid).concat(t.seriesNumber+1).concat(d,\")\")}else i=\"gradient\"===n?s:\"pattern\"===n?a:h;return t.solid&&(i=h),i}},{key:\"getFillType\",value:function(t){var e=this.w;return Array.isArray(e.config.fill.type)?e.config.fill.type[t]:e.config.fill.type}},{key:\"getFillColors\",value:function(){var t=this.w,e=t.config,i=this.opts,a=[];return t.globals.comboCharts?\"line\"===t.config.series[this.seriesIndex].type?Array.isArray(t.globals.stroke.colors)?a=t.globals.stroke.colors:a.push(t.globals.stroke.colors):Array.isArray(t.globals.fill.colors)?a=t.globals.fill.colors:a.push(t.globals.fill.colors):\"line\"===e.chart.type?Array.isArray(t.globals.stroke.colors)?a=t.globals.stroke.colors:a.push(t.globals.stroke.colors):Array.isArray(t.globals.fill.colors)?a=t.globals.fill.colors:a.push(t.globals.fill.colors),void 0!==i.fillColors&&(a=[],Array.isArray(i.fillColors)?a=i.fillColors.slice():a.push(i.fillColors)),a}},{key:\"handlePatternFill\",value:function(t){var e=t.fillConfig,i=t.patternFill,a=t.fillColor,s=t.fillOpacity,r=t.defaultColor,o=this.w.config.fill;e&&(o=e);var n=this.opts,l=new m(this.ctx),h=Array.isArray(o.pattern.strokeWidth)?o.pattern.strokeWidth[this.seriesIndex]:o.pattern.strokeWidth,c=a;Array.isArray(o.pattern.style)?i=void 0!==o.pattern.style[n.seriesNumber]?l.drawPattern(o.pattern.style[n.seriesNumber],o.pattern.width,o.pattern.height,c,h,s):r:i=l.drawPattern(o.pattern.style,o.pattern.width,o.pattern.height,c,h,s);return i}},{key:\"handleGradientFill\",value:function(t){var i=t.fillColor,a=t.fillOpacity,s=t.fillConfig,r=t.i,o=this.w.config.fill;s&&(o=e(e({},o),s));var n,l=this.opts,h=new m(this.ctx),c=new x,d=o.gradient.type,g=i,u=void 0===o.gradient.opacityFrom?a:Array.isArray(o.gradient.opacityFrom)?o.gradient.opacityFrom[r]:o.gradient.opacityFrom;g.indexOf(\"rgba\")>-1&&(u=x.getOpacityFromRGBA(g));var p=void 0===o.gradient.opacityTo?a:Array.isArray(o.gradient.opacityTo)?o.gradient.opacityTo[r]:o.gradient.opacityTo;if(void 0===o.gradient.gradientToColors||0===o.gradient.gradientToColors.length)n=\"dark\"===o.gradient.shade?c.shadeColor(-1*parseFloat(o.gradient.shadeIntensity),i.indexOf(\"rgb\")>-1?x.rgb2hex(i):i):c.shadeColor(parseFloat(o.gradient.shadeIntensity),i.indexOf(\"rgb\")>-1?x.rgb2hex(i):i);else if(o.gradient.gradientToColors[l.seriesNumber]){var f=o.gradient.gradientToColors[l.seriesNumber];n=f,f.indexOf(\"rgba\")>-1&&(p=x.getOpacityFromRGBA(f))}else n=i;if(o.gradient.gradientFrom&&(g=o.gradient.gradientFrom),o.gradient.gradientTo&&(n=o.gradient.gradientTo),o.gradient.inverseColors){var b=g;g=n,n=b}return g.indexOf(\"rgb\")>-1&&(g=x.rgb2hex(g)),n.indexOf(\"rgb\")>-1&&(n=x.rgb2hex(n)),h.drawGradient(d,g,n,u,p,l.size,o.gradient.stops,o.gradient.colorStops,r)}}]),t}(),H=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"setGlobalMarkerSize\",value:function(){var t=this.w;if(t.globals.markers.size=Array.isArray(t.config.markers.size)?t.config.markers.size:[t.config.markers.size],t.globals.markers.size.length>0){if(t.globals.markers.size.length<t.globals.series.length+1)for(var e=0;e<=t.globals.series.length;e++)void 0===t.globals.markers.size[e]&&t.globals.markers.size.push(t.globals.markers.size[0])}else t.globals.markers.size=t.config.series.map((function(e){return t.config.markers.size}))}},{key:\"plotChartMarkers\",value:function(t,e,i,a){var s,r=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=this.w,n=e,l=t,h=null,c=new m(this.ctx),d=o.config.markers.discrete&&o.config.markers.discrete.length;if((o.globals.markers.size[e]>0||r||d)&&(h=c.group({class:r||d?\"\":\"apexcharts-series-markers\"})).attr(\"clip-path\",\"url(#gridRectMarkerMask\".concat(o.globals.cuid,\")\")),Array.isArray(l.x))for(var g=0;g<l.x.length;g++){var u=i;1===i&&0===g&&(u=0),1===i&&1===g&&(u=1);var p=\"apexcharts-marker\";if(\"line\"!==o.config.chart.type&&\"area\"!==o.config.chart.type||o.globals.comboCharts||o.config.tooltip.intersect||(p+=\" no-pointer-events\"),(Array.isArray(o.config.markers.size)?o.globals.markers.size[e]>0:o.config.markers.size>0)||r||d){x.isNumber(l.y[g])?p+=\" w\".concat(x.randomId()):p=\"apexcharts-nullpoint\";var f=this.getMarkerConfig({cssClass:p,seriesIndex:e,dataPointIndex:u});o.config.series[n].data[u]&&(o.config.series[n].data[u].fillColor&&(f.pointFillColor=o.config.series[n].data[u].fillColor),o.config.series[n].data[u].strokeColor&&(f.pointStrokeColor=o.config.series[n].data[u].strokeColor)),a&&(f.pSize=a),(l.x[g]<0||l.x[g]>o.globals.gridWidth||l.y[g]<0||l.y[g]>o.globals.gridHeight)&&(f.pSize=0),(s=c.drawMarker(l.x[g],l.y[g],f)).attr(\"rel\",u),s.attr(\"j\",u),s.attr(\"index\",e),s.node.setAttribute(\"default-marker-size\",f.pSize),new v(this.ctx).setSelectionFilter(s,e,u),this.addEvents(s),h&&h.add(s)}else void 0===o.globals.pointsArray[e]&&(o.globals.pointsArray[e]=[]),o.globals.pointsArray[e].push([l.x[g],l.y[g]])}return h}},{key:\"getMarkerConfig\",value:function(t){var e=t.cssClass,i=t.seriesIndex,a=t.dataPointIndex,s=void 0===a?null:a,r=t.finishRadius,o=void 0===r?null:r,n=this.w,l=this.getMarkerStyle(i),h=n.globals.markers.size[i],c=n.config.markers;return null!==s&&c.discrete.length&&c.discrete.map((function(t){t.seriesIndex===i&&t.dataPointIndex===s&&(l.pointStrokeColor=t.strokeColor,l.pointFillColor=t.fillColor,h=t.size,l.pointShape=t.shape)})),{pSize:null===o?h:o,pRadius:c.radius,width:Array.isArray(c.width)?c.width[i]:c.width,height:Array.isArray(c.height)?c.height[i]:c.height,pointStrokeWidth:Array.isArray(c.strokeWidth)?c.strokeWidth[i]:c.strokeWidth,pointStrokeColor:l.pointStrokeColor,pointFillColor:l.pointFillColor,shape:l.pointShape||(Array.isArray(c.shape)?c.shape[i]:c.shape),class:e,pointStrokeOpacity:Array.isArray(c.strokeOpacity)?c.strokeOpacity[i]:c.strokeOpacity,pointStrokeDashArray:Array.isArray(c.strokeDashArray)?c.strokeDashArray[i]:c.strokeDashArray,pointFillOpacity:Array.isArray(c.fillOpacity)?c.fillOpacity[i]:c.fillOpacity,seriesIndex:i}}},{key:\"addEvents\",value:function(t){var e=this.w,i=new m(this.ctx);t.node.addEventListener(\"mouseenter\",i.pathMouseEnter.bind(this.ctx,t)),t.node.addEventListener(\"mouseleave\",i.pathMouseLeave.bind(this.ctx,t)),t.node.addEventListener(\"mousedown\",i.pathMouseDown.bind(this.ctx,t)),t.node.addEventListener(\"click\",e.config.markers.onClick),t.node.addEventListener(\"dblclick\",e.config.markers.onDblClick),t.node.addEventListener(\"touchstart\",i.pathMouseDown.bind(this.ctx,t),{passive:!0})}},{key:\"getMarkerStyle\",value:function(t){var e=this.w,i=e.globals.markers.colors,a=e.config.markers.strokeColor||e.config.markers.strokeColors;return{pointStrokeColor:Array.isArray(a)?a[t]:a,pointFillColor:Array.isArray(i)?i[t]:i}}}]),t}(),D=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled}return r(t,[{key:\"draw\",value:function(t,e,i){var a=this.w,s=new m(this.ctx),r=i.realIndex,o=i.pointsPos,n=i.zRatio,l=i.elParent,h=s.group({class:\"apexcharts-series-markers apexcharts-series-\".concat(a.config.chart.type)});if(h.attr(\"clip-path\",\"url(#gridRectMarkerMask\".concat(a.globals.cuid,\")\")),Array.isArray(o.x))for(var c=0;c<o.x.length;c++){var d=e+1,g=!0;0===e&&0===c&&(d=0),0===e&&1===c&&(d=1);var u=0,p=a.globals.markers.size[r];if(n!==1/0){var f=a.config.plotOptions.bubble;p=a.globals.seriesZ[r][d],f.zScaling&&(p/=n),f.minBubbleRadius&&p<f.minBubbleRadius&&(p=f.minBubbleRadius),f.maxBubbleRadius&&p>f.maxBubbleRadius&&(p=f.maxBubbleRadius)}a.config.chart.animations.enabled||(u=p);var x=o.x[c],b=o.y[c];if(u=u||0,null!==b&&void 0!==a.globals.series[r][d]||(g=!1),g){var v=this.drawPoint(x,b,u,p,r,d,e);h.add(v)}l.add(h)}}},{key:\"drawPoint\",value:function(t,e,i,a,s,r,o){var n=this.w,l=s,h=new b(this.ctx),c=new v(this.ctx),d=new R(this.ctx),g=new H(this.ctx),u=new m(this.ctx),p=g.getMarkerConfig({cssClass:\"apexcharts-marker\",seriesIndex:l,dataPointIndex:r,finishRadius:\"bubble\"===n.config.chart.type||n.globals.comboCharts&&n.config.series[s]&&\"bubble\"===n.config.series[s].type?a:null});a=p.pSize;var f,x=d.fillPath({seriesNumber:s,dataPointIndex:r,color:p.pointFillColor,patternUnits:\"objectBoundingBox\",value:n.globals.series[s][o]});if(\"circle\"===p.shape?f=u.drawCircle(i):\"square\"!==p.shape&&\"rect\"!==p.shape||(f=u.drawRect(0,0,p.width-p.pointStrokeWidth/2,p.height-p.pointStrokeWidth/2,p.pRadius)),n.config.series[l].data[r]&&n.config.series[l].data[r].fillColor&&(x=n.config.series[l].data[r].fillColor),f.attr({x:t-p.width/2-p.pointStrokeWidth/2,y:e-p.height/2-p.pointStrokeWidth/2,cx:t,cy:e,fill:x,\"fill-opacity\":p.pointFillOpacity,stroke:p.pointStrokeColor,r:a,\"stroke-width\":p.pointStrokeWidth,\"stroke-dasharray\":p.pointStrokeDashArray,\"stroke-opacity\":p.pointStrokeOpacity}),n.config.chart.dropShadow.enabled){var y=n.config.chart.dropShadow;c.dropShadow(f,y,s)}if(!this.initialAnim||n.globals.dataChanged||n.globals.resized)n.globals.animationEnded=!0;else{var w=n.config.chart.animations.speed;h.animateMarker(f,0,\"circle\"===p.shape?a:{width:p.width,height:p.height},w,n.globals.easing,(function(){window.setTimeout((function(){h.animationCompleted(f)}),100)}))}if(n.globals.dataChanged&&\"circle\"===p.shape)if(this.dynamicAnim){var k,A,S,C,L=n.config.chart.animations.dynamicAnimation.speed;null!=(C=n.globals.previousPaths[s]&&n.globals.previousPaths[s][o])&&(k=C.x,A=C.y,S=void 0!==C.r?C.r:a);for(var P=0;P<n.globals.collapsedSeries.length;P++)n.globals.collapsedSeries[P].index===s&&(L=1,a=0);0===t&&0===e&&(a=0),h.animateCircle(f,{cx:k,cy:A,r:S},{cx:t,cy:e,r:a},L,n.globals.easing)}else f.attr({r:a});return f.attr({rel:r,j:r,index:s,\"default-marker-size\":a}),c.setSelectionFilter(f,s,r),g.addEvents(f),f.node.classList.add(\"apexcharts-marker\"),f}},{key:\"centerTextInBubble\",value:function(t){var e=this.w;return{y:t+=parseInt(e.config.dataLabels.style.fontSize,10)/4}}}]),t}(),O=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"dataLabelsCorrection\",value:function(t,e,i,a,s,r,o){var n=this.w,l=!1,h=new m(this.ctx).getTextRects(i,o),c=h.width,d=h.height;e<0&&(e=0),e>n.globals.gridHeight+d&&(e=n.globals.gridHeight+d/2),void 0===n.globals.dataLabelsRects[a]&&(n.globals.dataLabelsRects[a]=[]),n.globals.dataLabelsRects[a].push({x:t,y:e,width:c,height:d});var g=n.globals.dataLabelsRects[a].length-2,u=void 0!==n.globals.lastDrawnDataLabelsIndexes[a]?n.globals.lastDrawnDataLabelsIndexes[a][n.globals.lastDrawnDataLabelsIndexes[a].length-1]:0;if(void 0!==n.globals.dataLabelsRects[a][g]){var p=n.globals.dataLabelsRects[a][u];(t>p.x+p.width+2||e>p.y+p.height+2||t+c<p.x)&&(l=!0)}return(0===s||r)&&(l=!0),{x:t,y:e,textRects:h,drawnextLabel:l}}},{key:\"drawDataLabel\",value:function(t){var e=this,i=t.type,a=t.pos,s=t.i,r=t.j,o=t.isRangeStart,n=t.strokeWidth,l=void 0===n?2:n,h=this.w,c=new m(this.ctx),d=h.config.dataLabels,g=0,u=0,p=r,f=null;if(!d.enabled||!Array.isArray(a.x))return f;f=c.group({class:\"apexcharts-data-labels\"});for(var x=0;x<a.x.length;x++)if(g=a.x[x]+d.offsetX,u=a.y[x]+d.offsetY+l,!isNaN(g)){1===r&&0===x&&(p=0),1===r&&1===x&&(p=1);var b=h.globals.series[s][p];\"rangeArea\"===i&&(b=o?h.globals.seriesRangeStart[s][p]:h.globals.seriesRangeEnd[s][p]);var v=\"\",y=function(t){return h.config.dataLabels.formatter(t,{ctx:e.ctx,seriesIndex:s,dataPointIndex:p,w:h})};if(\"bubble\"===h.config.chart.type)v=y(b=h.globals.seriesZ[s][p]),u=a.y[x],u=new D(this.ctx).centerTextInBubble(u,s,p).y;else void 0!==b&&(v=y(b));this.plotDataLabelsText({x:g,y:u,text:v,i:s,j:p,parent:f,offsetCorrection:!0,dataLabelsConfig:h.config.dataLabels})}return f}},{key:\"plotDataLabelsText\",value:function(t){var e=this.w,i=new m(this.ctx),a=t.x,s=t.y,r=t.i,o=t.j,n=t.text,l=t.textAnchor,h=t.fontSize,c=t.parent,d=t.dataLabelsConfig,g=t.color,u=t.alwaysDrawDataLabel,p=t.offsetCorrection;if(!(Array.isArray(e.config.dataLabels.enabledOnSeries)&&e.config.dataLabels.enabledOnSeries.indexOf(r)<0)){var f={x:a,y:s,drawnextLabel:!0,textRects:null};p&&(f=this.dataLabelsCorrection(a,s,n,r,o,u,parseInt(d.style.fontSize,10))),e.globals.zoomed||(a=f.x,s=f.y),f.textRects&&(a<-10-f.textRects.width||a>e.globals.gridWidth+f.textRects.width+10)&&(n=\"\");var x=e.globals.dataLabels.style.colors[r];((\"bar\"===e.config.chart.type||\"rangeBar\"===e.config.chart.type)&&e.config.plotOptions.bar.distributed||e.config.dataLabels.distributed)&&(x=e.globals.dataLabels.style.colors[o]),\"function\"==typeof x&&(x=x({series:e.globals.series,seriesIndex:r,dataPointIndex:o,w:e})),g&&(x=g);var b=d.offsetX,y=d.offsetY;if(\"bar\"!==e.config.chart.type&&\"rangeBar\"!==e.config.chart.type||(b=0,y=0),f.drawnextLabel){var w=i.drawText({width:100,height:parseInt(d.style.fontSize,10),x:a+b,y:s+y,foreColor:x,textAnchor:l||d.textAnchor,text:n,fontSize:h||d.style.fontSize,fontFamily:d.style.fontFamily,fontWeight:d.style.fontWeight||\"normal\"});if(w.attr({class:\"apexcharts-datalabel\",cx:a,cy:s}),d.dropShadow.enabled){var k=d.dropShadow;new v(this.ctx).dropShadow(w,k)}c.add(w),void 0===e.globals.lastDrawnDataLabelsIndexes[r]&&(e.globals.lastDrawnDataLabelsIndexes[r]=[]),e.globals.lastDrawnDataLabelsIndexes[r].push(o)}}}},{key:\"addBackgroundToDataLabel\",value:function(t,e){var i=this.w,a=i.config.dataLabels.background,s=a.padding,r=a.padding/2,o=e.width,n=e.height,l=new m(this.ctx).drawRect(e.x-s,e.y-r/2,o+2*s,n+r,a.borderRadius,\"transparent\"===i.config.chart.background?\"#fff\":i.config.chart.background,a.opacity,a.borderWidth,a.borderColor);a.dropShadow.enabled&&new v(this.ctx).dropShadow(l,a.dropShadow);return l}},{key:\"dataLabelsBackground\",value:function(){var t=this.w;if(\"bubble\"!==t.config.chart.type)for(var e=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-datalabels text\"),i=0;i<e.length;i++){var a=e[i],s=a.getBBox(),r=null;if(s.width&&s.height&&(r=this.addBackgroundToDataLabel(a,s)),r){a.parentNode.insertBefore(r.node,a);var o=a.getAttribute(\"fill\");t.config.chart.animations.enabled&&!t.globals.resized&&!t.globals.dataChanged?r.animate().attr({fill:o}):r.attr({fill:o}),a.setAttribute(\"fill\",t.config.dataLabels.background.foreColor)}}}},{key:\"bringForward\",value:function(){for(var t=this.w,e=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-datalabels\"),i=t.globals.dom.baseEl.querySelector(\".apexcharts-plot-series:last-child\"),a=0;a<e.length;a++)i&&i.insertBefore(e[a],i.nextSibling)}}]),t}(),N=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.legendInactiveClass=\"legend-mouseover-inactive\"}return r(t,[{key:\"getAllSeriesEls\",value:function(){return this.w.globals.dom.baseEl.getElementsByClassName(\"apexcharts-series\")}},{key:\"getSeriesByName\",value:function(t){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-inner .apexcharts-series[seriesName='\".concat(x.escapeString(t),\"']\"))}},{key:\"isSeriesHidden\",value:function(t){var e=this.getSeriesByName(t),i=parseInt(e.getAttribute(\"data:realIndex\"),10);return{isHidden:e.classList.contains(\"apexcharts-series-collapsed\"),realIndex:i}}},{key:\"addCollapsedClassToSeries\",value:function(t,e){var i=this.w;function a(i){for(var a=0;a<i.length;a++)i[a].index===e&&t.node.classList.add(\"apexcharts-series-collapsed\")}a(i.globals.collapsedSeries),a(i.globals.ancillaryCollapsedSeries)}},{key:\"toggleSeries\",value:function(t){var e=this.isSeriesHidden(t);return this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,e.isHidden),e.isHidden}},{key:\"showSeries\",value:function(t){var e=this.isSeriesHidden(t);e.isHidden&&this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,!0)}},{key:\"hideSeries\",value:function(t){var e=this.isSeriesHidden(t);e.isHidden||this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,!1)}},{key:\"resetSeries\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=this.w,s=x.clone(a.globals.initialSeries);a.globals.previousPaths=[],i?(a.globals.collapsedSeries=[],a.globals.ancillaryCollapsedSeries=[],a.globals.collapsedSeriesIndices=[],a.globals.ancillaryCollapsedSeriesIndices=[]):s=this.emptyCollapsedSeries(s),a.config.series=s,t&&(e&&(a.globals.zoomed=!1,this.ctx.updateHelpers.revertDefaultAxisMinMax()),this.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled))}},{key:\"emptyCollapsedSeries\",value:function(t){for(var e=this.w,i=0;i<t.length;i++)e.globals.collapsedSeriesIndices.indexOf(i)>-1&&(t[i].data=[]);return t}},{key:\"toggleSeriesOnHover\",value:function(t,e){var i=this.w;e||(e=t.target);var a=i.globals.dom.baseEl.querySelectorAll(\".apexcharts-series, .apexcharts-datalabels\");if(\"mousemove\"===t.type){var s=parseInt(e.getAttribute(\"rel\"),10)-1,r=null,o=null;i.globals.axisCharts||\"radialBar\"===i.config.chart.type?i.globals.axisCharts?(r=i.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(s,\"']\")),o=i.globals.dom.baseEl.querySelector(\".apexcharts-datalabels[data\\\\:realIndex='\".concat(s,\"']\"))):r=i.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(s+1,\"']\")):r=i.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(s+1,\"'] path\"));for(var n=0;n<a.length;n++)a[n].classList.add(this.legendInactiveClass);null!==r&&(i.globals.axisCharts||r.parentNode.classList.remove(this.legendInactiveClass),r.classList.remove(this.legendInactiveClass),null!==o&&o.classList.remove(this.legendInactiveClass))}else if(\"mouseout\"===t.type)for(var l=0;l<a.length;l++)a[l].classList.remove(this.legendInactiveClass)}},{key:\"highlightRangeInSeries\",value:function(t,e){var i=this,a=this.w,s=a.globals.dom.baseEl.getElementsByClassName(\"apexcharts-heatmap-rect\"),r=function(t){for(var e=0;e<s.length;e++)s[e].classList[t](i.legendInactiveClass)};if(\"mousemove\"===t.type){var o=parseInt(e.getAttribute(\"rel\"),10)-1;r(\"add\"),function(t){for(var e=0;e<s.length;e++){var a=parseInt(s[e].getAttribute(\"val\"),10);a>=t.from&&a<=t.to&&s[e].classList.remove(i.legendInactiveClass)}}(a.config.plotOptions.heatmap.colorScale.ranges[o])}else\"mouseout\"===t.type&&r(\"remove\")}},{key:\"getActiveConfigSeriesIndex\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"asc\",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=this.w,a=0;if(i.config.series.length>1)for(var s=i.config.series.map((function(t,a){return t.data&&t.data.length>0&&-1===i.globals.collapsedSeriesIndices.indexOf(a)&&(!i.globals.comboCharts||0===e.length||e.length&&e.indexOf(i.config.series[a].type)>-1)?a:-1})),r=\"asc\"===t?0:s.length-1;\"asc\"===t?r<s.length:r>=0;\"asc\"===t?r++:r--)if(-1!==s[r]){a=s[r];break}return a}},{key:\"getBarSeriesIndices\",value:function(){return this.w.globals.comboCharts?this.w.config.series.map((function(t,e){return\"bar\"===t.type||\"column\"===t.type?e:-1})).filter((function(t){return-1!==t})):this.w.config.series.map((function(t,e){return e}))}},{key:\"getPreviousPaths\",value:function(){var t=this.w;function e(e,i,a){for(var s=e[i].childNodes,r={type:a,paths:[],realIndex:e[i].getAttribute(\"data:realIndex\")},o=0;o<s.length;o++)if(s[o].hasAttribute(\"pathTo\")){var n=s[o].getAttribute(\"pathTo\");r.paths.push({d:n})}t.globals.previousPaths.push(r)}t.globals.previousPaths=[];[\"line\",\"area\",\"bar\",\"rangebar\",\"rangeArea\",\"candlestick\",\"radar\"].forEach((function(i){for(var a,s=(a=i,t.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(a,\"-series .apexcharts-series\"))),r=0;r<s.length;r++)e(s,r,i)})),this.handlePrevBubbleScatterPaths(\"bubble\"),this.handlePrevBubbleScatterPaths(\"scatter\");var i=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t.config.chart.type,\" .apexcharts-series\"));if(i.length>0)for(var a=function(e){for(var i=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t.config.chart.type,\" .apexcharts-series[data\\\\:realIndex='\").concat(e,\"'] rect\")),a=[],s=function(t){var e=function(e){return i[t].getAttribute(e)},s={x:parseFloat(e(\"x\")),y:parseFloat(e(\"y\")),width:parseFloat(e(\"width\")),height:parseFloat(e(\"height\"))};a.push({rect:s,color:i[t].getAttribute(\"color\")})},r=0;r<i.length;r++)s(r);t.globals.previousPaths.push(a)},s=0;s<i.length;s++)a(s);t.globals.axisCharts||(t.globals.previousPaths=t.globals.series)}},{key:\"handlePrevBubbleScatterPaths\",value:function(t){var e=this.w,i=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t,\"-series .apexcharts-series\"));if(i.length>0)for(var a=0;a<i.length;a++){for(var s=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t,\"-series .apexcharts-series[data\\\\:realIndex='\").concat(a,\"'] circle\")),r=[],o=0;o<s.length;o++)r.push({x:s[o].getAttribute(\"cx\"),y:s[o].getAttribute(\"cy\"),r:s[o].getAttribute(\"r\")});e.globals.previousPaths.push(r)}}},{key:\"clearPreviousPaths\",value:function(){var t=this.w;t.globals.previousPaths=[],t.globals.allSeriesCollapsed=!1}},{key:\"handleNoData\",value:function(){var t=this.w,e=t.config.noData,i=new m(this.ctx),a=t.globals.svgWidth/2,s=t.globals.svgHeight/2,r=\"middle\";if(t.globals.noData=!0,t.globals.animationEnded=!0,\"left\"===e.align?(a=10,r=\"start\"):\"right\"===e.align&&(a=t.globals.svgWidth-10,r=\"end\"),\"top\"===e.verticalAlign?s=50:\"bottom\"===e.verticalAlign&&(s=t.globals.svgHeight-50),a+=e.offsetX,s=s+parseInt(e.style.fontSize,10)+2+e.offsetY,void 0!==e.text&&\"\"!==e.text){var o=i.drawText({x:a,y:s,text:e.text,textAnchor:r,fontSize:e.style.fontSize,fontFamily:e.style.fontFamily,foreColor:e.style.color,opacity:1,class:\"apexcharts-text-nodata\"});t.globals.dom.Paper.add(o)}}},{key:\"setNullSeriesToZeroValues\",value:function(t){for(var e=this.w,i=0;i<t.length;i++)if(0===t[i].length)for(var a=0;a<t[e.globals.maxValsInArrayIndex].length;a++)t[i].push(0);return t}},{key:\"hasAllSeriesEqualX\",value:function(){for(var t=!0,e=this.w,i=this.filteredSeriesX(),a=0;a<i.length-1;a++)if(i[a][0]!==i[a+1][0]){t=!1;break}return e.globals.allSeriesHasEqualX=t,t}},{key:\"filteredSeriesX\",value:function(){var t=this.w.globals.seriesX.map((function(t){return t.length>0?t:[]}));return t}}]),t}(),W=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[],this.seriesGoals=[],this.coreUtils=new y(this.ctx)}return r(t,[{key:\"isMultiFormat\",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:\"isFormatXY\",value:function(){var t=this.w.config.series.slice(),e=new N(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&null!==t[this.activeSeriesIndex].data[0]&&void 0!==t[this.activeSeriesIndex].data[0].x&&null!==t[this.activeSeriesIndex].data[0])return!0}},{key:\"isFormat2DArray\",value:function(){var t=this.w.config.series.slice(),e=new N(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&void 0!==t[this.activeSeriesIndex].data[0]&&null!==t[this.activeSeriesIndex].data[0]&&t[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:\"handleFormat2DArray\",value:function(t,e){for(var i=this.w.config,a=this.w.globals,s=\"boxPlot\"===i.chart.type||\"boxPlot\"===i.series[e].type,r=0;r<t[e].data.length;r++)if(void 0!==t[e].data[r][1]&&(Array.isArray(t[e].data[r][1])&&4===t[e].data[r][1].length&&!s?this.twoDSeries.push(x.parseNumber(t[e].data[r][1][3])):t[e].data[r].length>=5?this.twoDSeries.push(x.parseNumber(t[e].data[r][4])):this.twoDSeries.push(x.parseNumber(t[e].data[r][1])),a.dataFormatXNumeric=!0),\"datetime\"===i.xaxis.type){var o=new Date(t[e].data[r][0]);o=new Date(o).getTime(),this.twoDSeriesX.push(o)}else this.twoDSeriesX.push(t[e].data[r][0]);for(var n=0;n<t[e].data.length;n++)void 0!==t[e].data[n][2]&&(this.threeDSeries.push(t[e].data[n][2]),a.isDataXYZ=!0)}},{key:\"handleFormatXY\",value:function(t,e){var i=this.w.config,a=this.w.globals,s=new I(this.ctx),r=e;a.collapsedSeriesIndices.indexOf(e)>-1&&(r=this.activeSeriesIndex);for(var o=0;o<t[e].data.length;o++)void 0!==t[e].data[o].y&&(Array.isArray(t[e].data[o].y)?this.twoDSeries.push(x.parseNumber(t[e].data[o].y[t[e].data[o].y.length-1])):this.twoDSeries.push(x.parseNumber(t[e].data[o].y))),void 0!==t[e].data[o].goals&&Array.isArray(t[e].data[o].goals)?(void 0===this.seriesGoals[e]&&(this.seriesGoals[e]=[]),this.seriesGoals[e].push(t[e].data[o].goals)):(void 0===this.seriesGoals[e]&&(this.seriesGoals[e]=[]),this.seriesGoals[e].push(null));for(var n=0;n<t[r].data.length;n++){var l=\"string\"==typeof t[r].data[n].x,h=Array.isArray(t[r].data[n].x),c=!h&&!!s.isValidDate(t[r].data[n].x.toString());if(l||c)if(l||i.xaxis.convertedCatToNumeric){var d=a.isBarHorizontal&&a.isRangeData;\"datetime\"!==i.xaxis.type||d?(this.fallbackToCategory=!0,this.twoDSeriesX.push(t[r].data[n].x)):this.twoDSeriesX.push(s.parseDate(t[r].data[n].x))}else\"datetime\"===i.xaxis.type?this.twoDSeriesX.push(s.parseDate(t[r].data[n].x.toString())):(a.dataFormatXNumeric=!0,a.isXNumeric=!0,this.twoDSeriesX.push(parseFloat(t[r].data[n].x)));else h?(this.fallbackToCategory=!0,this.twoDSeriesX.push(t[r].data[n].x)):(a.isXNumeric=!0,a.dataFormatXNumeric=!0,this.twoDSeriesX.push(t[r].data[n].x))}if(t[e].data[0]&&void 0!==t[e].data[0].z){for(var g=0;g<t[e].data.length;g++)this.threeDSeries.push(t[e].data[g].z);a.isDataXYZ=!0}}},{key:\"handleRangeData\",value:function(t,e){var i=this.w.globals,a={};return this.isFormat2DArray()?a=this.handleRangeDataFormat(\"array\",t,e):this.isFormatXY()&&(a=this.handleRangeDataFormat(\"xy\",t,e)),i.seriesRangeStart.push(a.start),i.seriesRangeEnd.push(a.end),i.seriesRange.push(a.rangeUniques),i.seriesRange.forEach((function(t,e){t&&t.forEach((function(t,e){t.y.forEach((function(e,i){for(var a=0;a<t.y.length;a++)if(i!==a){var s=e.y1,r=e.y2,o=t.y[a].y1;s<=t.y[a].y2&&o<=r&&(t.overlaps.indexOf(e.rangeName)<0&&t.overlaps.push(e.rangeName),t.overlaps.indexOf(t.y[a].rangeName)<0&&t.overlaps.push(t.y[a].rangeName))}}))}))})),a}},{key:\"handleCandleStickBoxData\",value:function(t,e){var i=this.w.globals,a={};return this.isFormat2DArray()?a=this.handleCandleStickBoxDataFormat(\"array\",t,e):this.isFormatXY()&&(a=this.handleCandleStickBoxDataFormat(\"xy\",t,e)),i.seriesCandleO[e]=a.o,i.seriesCandleH[e]=a.h,i.seriesCandleM[e]=a.m,i.seriesCandleL[e]=a.l,i.seriesCandleC[e]=a.c,a}},{key:\"handleRangeDataFormat\",value:function(t,e,i){var a=[],s=[],r=e[i].data.filter((function(t,e,i){return e===i.findIndex((function(e){return e.x===t.x}))})).map((function(t,e){return{x:t.x,overlaps:[],y:[]}}));if(\"array\"===t)for(var o=0;o<e[i].data.length;o++)Array.isArray(e[i].data[o])?(a.push(e[i].data[o][1][0]),s.push(e[i].data[o][1][1])):(a.push(e[i].data[o]),s.push(e[i].data[o]));else if(\"xy\"===t)for(var n=function(t){var o=Array.isArray(e[i].data[t].y),n=x.randomId(),l=e[i].data[t].x,h={y1:o?e[i].data[t].y[0]:e[i].data[t].y,y2:o?e[i].data[t].y[1]:e[i].data[t].y,rangeName:n};e[i].data[t].rangeName=n;var c=r.findIndex((function(t){return t.x===l}));r[c].y.push(h),a.push(h.y1),s.push(h.y2)},l=0;l<e[i].data.length;l++)n(l);return{start:a,end:s,rangeUniques:r}}},{key:\"handleCandleStickBoxDataFormat\",value:function(t,e,i){var a=this.w,s=\"boxPlot\"===a.config.chart.type||\"boxPlot\"===a.config.series[i].type,r=[],o=[],n=[],l=[],h=[];if(\"array\"===t)if(s&&6===e[i].data[0].length||!s&&5===e[i].data[0].length)for(var c=0;c<e[i].data.length;c++)r.push(e[i].data[c][1]),o.push(e[i].data[c][2]),s?(n.push(e[i].data[c][3]),l.push(e[i].data[c][4]),h.push(e[i].data[c][5])):(l.push(e[i].data[c][3]),h.push(e[i].data[c][4]));else for(var d=0;d<e[i].data.length;d++)Array.isArray(e[i].data[d][1])&&(r.push(e[i].data[d][1][0]),o.push(e[i].data[d][1][1]),s?(n.push(e[i].data[d][1][2]),l.push(e[i].data[d][1][3]),h.push(e[i].data[d][1][4])):(l.push(e[i].data[d][1][2]),h.push(e[i].data[d][1][3])));else if(\"xy\"===t)for(var g=0;g<e[i].data.length;g++)Array.isArray(e[i].data[g].y)&&(r.push(e[i].data[g].y[0]),o.push(e[i].data[g].y[1]),s?(n.push(e[i].data[g].y[2]),l.push(e[i].data[g].y[3]),h.push(e[i].data[g].y[4])):(l.push(e[i].data[g].y[2]),h.push(e[i].data[g].y[3])));return{o:r,h:o,m:n,l:l,c:h}}},{key:\"parseDataAxisCharts\",value:function(t){var e,i=this,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.ctx,s=this.w.config,r=this.w.globals,o=new I(a),n=s.labels.length>0?s.labels.slice():s.xaxis.categories.slice();if(r.isRangeBar=\"rangeBar\"===s.chart.type&&r.isBarHorizontal,r.hasXaxisGroups=\"category\"===s.xaxis.type&&s.xaxis.group.groups.length>0,r.hasXaxisGroups&&(r.groups=s.xaxis.group.groups),r.hasSeriesGroups=null===(e=t[0])||void 0===e?void 0:e.group,r.hasSeriesGroups){var l=[],h=u(new Set(t.map((function(t){return t.group}))));t.forEach((function(t,e){var i=h.indexOf(t.group);l[i]||(l[i]=[]),l[i].push(t.name)})),r.seriesGroups=l}for(var c=function(){for(var t=0;t<n.length;t++)if(\"string\"==typeof n[t]){if(!o.isValidDate(n[t]))throw new Error(\"You have provided invalid Date format. Please provide a valid JavaScript Date\");i.twoDSeriesX.push(o.parseDate(n[t]))}else i.twoDSeriesX.push(n[t])},d=0;d<t.length;d++){if(this.twoDSeries=[],this.twoDSeriesX=[],this.threeDSeries=[],void 0===t[d].data)return void console.error(\"It is a possibility that you may have not included 'data' property in series.\");if(\"rangeBar\"!==s.chart.type&&\"rangeArea\"!==s.chart.type&&\"rangeBar\"!==t[d].type&&\"rangeArea\"!==t[d].type||(r.isRangeData=!0,r.isComboCharts?\"rangeBar\"!==t[d].type&&\"rangeArea\"!==t[d].type||this.handleRangeData(t,d):\"rangeBar\"!==s.chart.type&&\"rangeArea\"!==s.chart.type||this.handleRangeData(t,d)),this.isMultiFormat())this.isFormat2DArray()?this.handleFormat2DArray(t,d):this.isFormatXY()&&this.handleFormatXY(t,d),\"candlestick\"!==s.chart.type&&\"candlestick\"!==t[d].type&&\"boxPlot\"!==s.chart.type&&\"boxPlot\"!==t[d].type||this.handleCandleStickBoxData(t,d),r.series.push(this.twoDSeries),r.labels.push(this.twoDSeriesX),r.seriesX.push(this.twoDSeriesX),r.seriesGoals=this.seriesGoals,d!==this.activeSeriesIndex||this.fallbackToCategory||(r.isXNumeric=!0);else{\"datetime\"===s.xaxis.type?(r.isXNumeric=!0,c(),r.seriesX.push(this.twoDSeriesX)):\"numeric\"===s.xaxis.type&&(r.isXNumeric=!0,n.length>0&&(this.twoDSeriesX=n,r.seriesX.push(this.twoDSeriesX))),r.labels.push(this.twoDSeriesX);var g=t[d].data.map((function(t){return x.parseNumber(t)}));r.series.push(g)}r.seriesZ.push(this.threeDSeries),void 0!==t[d].name?r.seriesNames.push(t[d].name):r.seriesNames.push(\"series-\"+parseInt(d+1,10)),void 0!==t[d].color?r.seriesColors.push(t[d].color):r.seriesColors.push(void 0)}return this.w}},{key:\"parseDataNonAxisCharts\",value:function(t){var e=this.w.globals,i=this.w.config;e.series=t.slice(),e.seriesNames=i.labels.slice();for(var a=0;a<e.series.length;a++)void 0===e.seriesNames[a]&&e.seriesNames.push(\"series-\"+(a+1));return this.w}},{key:\"handleExternalLabelsData\",value:function(t){var e=this.w.config,i=this.w.globals;if(e.xaxis.categories.length>0)i.labels=e.xaxis.categories;else if(e.labels.length>0)i.labels=e.labels.slice();else if(this.fallbackToCategory){if(i.labels=i.labels[0],i.seriesRange.length&&(i.seriesRange.map((function(t){t.forEach((function(t){i.labels.indexOf(t.x)<0&&t.x&&i.labels.push(t.x)}))})),i.labels=Array.from(new Set(i.labels.map(JSON.stringify)),JSON.parse)),e.xaxis.convertedCatToNumeric)new z(e).convertCatToNumericXaxis(e,this.ctx,i.seriesX[0]),this._generateExternalLabels(t)}else this._generateExternalLabels(t)}},{key:\"_generateExternalLabels\",value:function(t){var e=this.w.globals,i=this.w.config,a=[];if(e.axisCharts){if(e.series.length>0)if(this.isFormatXY())for(var s=i.series.map((function(t,e){return t.data.filter((function(t,e,i){return i.findIndex((function(e){return e.x===t.x}))===e}))})),r=s.reduce((function(t,e,i,a){return a[t].length>e.length?t:i}),0),o=0;o<s[r].length;o++)a.push(o+1);else for(var n=0;n<e.series[e.maxValsInArrayIndex].length;n++)a.push(n+1);e.seriesX=[];for(var l=0;l<t.length;l++)e.seriesX.push(a);e.isXNumeric=!0}if(0===a.length){a=e.axisCharts?[]:e.series.map((function(t,e){return e+1}));for(var h=0;h<t.length;h++)e.seriesX.push(a)}e.labels=a,i.xaxis.convertedCatToNumeric&&(e.categoryLabels=a.map((function(t){return i.xaxis.labels.formatter(t)}))),e.noLabelsProvided=!0}},{key:\"parseData\",value:function(t){var e=this.w,i=e.config,a=e.globals;if(this.excludeCollapsedSeriesInYAxis(),this.fallbackToCategory=!1,this.ctx.core.resetGlobals(),this.ctx.core.isMultipleY(),a.axisCharts?(this.parseDataAxisCharts(t),this.coreUtils.getLargestSeries()):this.parseDataNonAxisCharts(t),i.chart.stacked){var s=new N(this.ctx);a.series=s.setNullSeriesToZeroValues(a.series)}this.coreUtils.getSeriesTotals(),a.axisCharts&&(a.stackedSeriesTotals=this.coreUtils.getStackedSeriesTotals()),this.coreUtils.getPercentSeries(),a.dataFormatXNumeric||a.isXNumeric&&(\"numeric\"!==i.xaxis.type||0!==i.labels.length||0!==i.xaxis.categories.length)||this.handleExternalLabelsData(t);for(var r=this.coreUtils.getCategoryLabels(a.labels),o=0;o<r.length;o++)if(Array.isArray(r[o])){a.isMultiLineX=!0;break}}},{key:\"excludeCollapsedSeriesInYAxis\",value:function(){var t=this,e=this.w;e.globals.ignoreYAxisIndexes=e.globals.collapsedSeries.map((function(i,a){if(t.w.globals.isMultipleYAxis&&!e.config.chart.stacked)return i.index}))}}]),t}(),B=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"getLabel\",value:function(t,e,i,a){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"12px\",o=!(arguments.length>6&&void 0!==arguments[6])||arguments[6],n=this.w,l=void 0===t[a]?\"\":t[a],h=l,c=n.globals.xLabelFormatter,d=n.config.xaxis.labels.formatter,g=!1,u=new T(this.ctx),p=l;o&&(h=u.xLabelFormat(c,l,p,{i:a,dateFormatter:new I(this.ctx).formatDate,w:n}),void 0!==d&&(h=d(l,t[a],{i:a,dateFormatter:new I(this.ctx).formatDate,w:n})));var f,x;e.length>0?(f=e[a].unit,x=null,e.forEach((function(t){\"month\"===t.unit?x=\"year\":\"day\"===t.unit?x=\"month\":\"hour\"===t.unit?x=\"day\":\"minute\"===t.unit&&(x=\"hour\")})),g=x===f,i=e[a].position,h=e[a].value):\"datetime\"===n.config.xaxis.type&&void 0===d&&(h=\"\"),void 0===h&&(h=\"\"),h=Array.isArray(h)?h:h.toString();var b=new m(this.ctx),v={};v=n.globals.rotateXLabels&&o?b.getTextRects(h,parseInt(r,10),null,\"rotate(\".concat(n.config.xaxis.labels.rotate,\" 0 0)\"),!1):b.getTextRects(h,parseInt(r,10));var y=!n.config.xaxis.labels.showDuplicates&&this.ctx.timeScale;return!Array.isArray(h)&&(0===h.indexOf(\"NaN\")||0===h.toLowerCase().indexOf(\"invalid\")||h.toLowerCase().indexOf(\"infinity\")>=0||s.indexOf(h)>=0&&y)&&(h=\"\"),{x:i,text:h,textRect:v,isBold:g}}},{key:\"checkLabelBasedOnTickamount\",value:function(t,e,i){var a=this.w,s=a.config.xaxis.tickAmount;return\"dataPoints\"===s&&(s=Math.round(a.globals.gridWidth/120)),s>i||t%Math.round(i/(s+1))==0||(e.text=\"\"),e}},{key:\"checkForOverflowingLabels\",value:function(t,e,i,a,s){var r=this.w;if(0===t&&r.globals.skipFirstTimelinelabel&&(e.text=\"\"),t===i-1&&r.globals.skipLastTimelinelabel&&(e.text=\"\"),r.config.xaxis.labels.hideOverlappingLabels&&a.length>0){var o=s[s.length-1];e.x<o.textRect.width/(r.globals.rotateXLabels?Math.abs(r.config.xaxis.labels.rotate)/12:1.01)+o.x&&(e.text=\"\")}return e}},{key:\"checkForReversedLabels\",value:function(t,e){var i=this.w;return i.config.yaxis[t]&&i.config.yaxis[t].reversed&&e.reverse(),e}},{key:\"isYAxisHidden\",value:function(t){var e=this.w,i=new y(this.ctx);return!e.config.yaxis[t].show||!e.config.yaxis[t].showForNullSeries&&i.isSeriesNull(t)&&-1===e.globals.collapsedSeriesIndices.indexOf(t)}},{key:\"getYAxisForeColor\",value:function(t,e){var i=this.w;return Array.isArray(t)&&i.globals.yAxisScale[e]&&this.ctx.theme.pushExtraColors(t,i.globals.yAxisScale[e].result.length,!1),t}},{key:\"drawYAxisTicks\",value:function(t,e,i,a,s,r,o){var n=this.w,l=new m(this.ctx),h=n.globals.translateY;if(a.show&&e>0){!0===n.config.yaxis[s].opposite&&(t+=a.width);for(var c=e;c>=0;c--){var d=h+e/10+n.config.yaxis[s].labels.offsetY-1;n.globals.isBarHorizontal&&(d=r*c),\"heatmap\"===n.config.chart.type&&(d+=r/2);var g=l.drawLine(t+i.offsetX-a.width+a.offsetX,d+a.offsetY,t+i.offsetX+a.offsetX,d+a.offsetY,a.color);o.add(g),h+=r}}}}]),t}(),G=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"scaleSvgNode\",value:function(t,e){var i=parseFloat(t.getAttributeNS(null,\"width\")),a=parseFloat(t.getAttributeNS(null,\"height\"));t.setAttributeNS(null,\"width\",i*e),t.setAttributeNS(null,\"height\",a*e),t.setAttributeNS(null,\"viewBox\",\"0 0 \"+i+\" \"+a)}},{key:\"fixSvgStringForIe11\",value:function(t){if(!x.isIE11())return t.replace(/&nbsp;/g,\"&#160;\");var e=0,i=t.replace(/xmlns=\"http:\\/\\/www.w3.org\\/2000\\/svg\"/g,(function(t){return 2===++e?'xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:svgjs=\"http://svgjs.dev\"':t}));return i=(i=i.replace(/xmlns:NS\\d+=\"\"/g,\"\")).replace(/NS\\d+:(\\w+:\\w+=\")/g,\"$1\")}},{key:\"getSvgString\",value:function(t){null==t&&(t=1);var e=this.w.globals.dom.Paper.svg();if(1!==t){var i=this.w.globals.dom.Paper.node.cloneNode(!0);this.scaleSvgNode(i,t),e=(new XMLSerializer).serializeToString(i)}return this.fixSvgStringForIe11(e)}},{key:\"cleanup\",value:function(){var t=this.w,e=t.globals.dom.baseEl.getElementsByClassName(\"apexcharts-xcrosshairs\"),i=t.globals.dom.baseEl.getElementsByClassName(\"apexcharts-ycrosshairs\"),a=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-zoom-rect, .apexcharts-selection-rect\");Array.prototype.forEach.call(a,(function(t){t.setAttribute(\"width\",0)})),e&&e[0]&&(e[0].setAttribute(\"x\",-500),e[0].setAttribute(\"x1\",-500),e[0].setAttribute(\"x2\",-500)),i&&i[0]&&(i[0].setAttribute(\"y\",-100),i[0].setAttribute(\"y1\",-100),i[0].setAttribute(\"y2\",-100))}},{key:\"svgUrl\",value:function(){this.cleanup();var t=this.getSvgString(),e=new Blob([t],{type:\"image/svg+xml;charset=utf-8\"});return URL.createObjectURL(e)}},{key:\"dataURI\",value:function(t){var e=this;return new Promise((function(i){var a=e.w,s=t?t.scale||t.width/a.globals.svgWidth:1;e.cleanup();var r=document.createElement(\"canvas\");r.width=a.globals.svgWidth*s,r.height=parseInt(a.globals.dom.elWrap.style.height,10)*s;var o=\"transparent\"===a.config.chart.background?\"#fff\":a.config.chart.background,n=r.getContext(\"2d\");n.fillStyle=o,n.fillRect(0,0,r.width*s,r.height*s);var l=e.getSvgString(s);if(window.canvg&&x.isIE11()){var h=window.canvg.Canvg.fromString(n,l,{ignoreClear:!0,ignoreDimensions:!0});h.start();var c=r.msToBlob();h.stop(),i({blob:c})}else{var d=\"data:image/svg+xml,\"+encodeURIComponent(l),g=new Image;g.crossOrigin=\"anonymous\",g.onload=function(){if(n.drawImage(g,0,0),r.msToBlob){var t=r.msToBlob();i({blob:t})}else{var e=r.toDataURL(\"image/png\");i({imgURI:e})}},g.src=d}}))}},{key:\"exportToSVG\",value:function(){this.triggerDownload(this.svgUrl(),this.w.config.chart.toolbar.export.svg.filename,\".svg\")}},{key:\"exportToPng\",value:function(){var t=this;this.dataURI().then((function(e){var i=e.imgURI,a=e.blob;a?navigator.msSaveOrOpenBlob(a,t.w.globals.chartID+\".png\"):t.triggerDownload(i,t.w.config.chart.toolbar.export.png.filename,\".png\")}))}},{key:\"exportToCSV\",value:function(t){var e=this,i=t.series,a=t.fileName,s=t.columnDelimiter,r=void 0===s?\",\":s,o=t.lineDelimiter,n=void 0===o?\"\\n\":o,l=this.w;i||(i=l.config.series);var h=[],c=[],d=\"\",g=l.globals.series.map((function(t,e){return-1===l.globals.collapsedSeriesIndices.indexOf(e)?t:[]})),p=Math.max.apply(Math,u(i.map((function(t){return t.data?t.data.length:0})))),f=new W(this.ctx),b=new B(this.ctx),v=function(t){var i=\"\";if(l.globals.axisCharts){if(\"category\"===l.config.xaxis.type||l.config.xaxis.convertedCatToNumeric)if(l.globals.isBarHorizontal){var a=l.globals.yLabelFormatters[0],s=new N(e.ctx).getActiveConfigSeriesIndex();i=a(l.globals.labels[t],{seriesIndex:s,dataPointIndex:t,w:l})}else i=b.getLabel(l.globals.labels,l.globals.timescaleLabels,0,t).text;\"datetime\"===l.config.xaxis.type&&(l.config.xaxis.categories.length?i=l.config.xaxis.categories[t]:l.config.labels.length&&(i=l.config.labels[t]))}else i=l.config.labels[t];return Array.isArray(i)&&(i=i.join(\" \")),x.isNumber(i)?i:i.split(r).join(\"\")},m=function(t,e){if(h.length&&0===e&&c.push(h.join(r)),t.data){t.data=t.data.length&&t.data||u(Array(p)).map((function(){return\"\"}));for(var a=0;a<t.data.length;a++){h=[];var s=v(a);if(s||(f.isFormatXY()?s=i[e].data[a].x:f.isFormat2DArray()&&(s=i[e].data[a]?i[e].data[a][0]:\"\")),0===e){h.push((n=s,\"datetime\"===l.config.xaxis.type&&String(n).length>=10?l.config.chart.toolbar.export.csv.dateFormatter(s):x.isNumber(s)?s:s.split(r).join(\"\")));for(var o=0;o<l.globals.series.length;o++)f.isFormatXY()?h.push(i[o].data[a].y):h.push(g[o][a])}(\"candlestick\"===l.config.chart.type||t.type&&\"candlestick\"===t.type)&&(h.pop(),h.push(l.globals.seriesCandleO[e][a]),h.push(l.globals.seriesCandleH[e][a]),h.push(l.globals.seriesCandleL[e][a]),h.push(l.globals.seriesCandleC[e][a])),(\"boxPlot\"===l.config.chart.type||t.type&&\"boxPlot\"===t.type)&&(h.pop(),h.push(l.globals.seriesCandleO[e][a]),h.push(l.globals.seriesCandleH[e][a]),h.push(l.globals.seriesCandleM[e][a]),h.push(l.globals.seriesCandleL[e][a]),h.push(l.globals.seriesCandleC[e][a])),\"rangeBar\"===l.config.chart.type&&(h.pop(),h.push(l.globals.seriesRangeStart[e][a]),h.push(l.globals.seriesRangeEnd[e][a])),h.length&&c.push(h.join(r))}}var n};h.push(l.config.chart.toolbar.export.csv.headerCategory),\"boxPlot\"===l.config.chart.type?(h.push(\"minimum\"),h.push(\"q1\"),h.push(\"median\"),h.push(\"q3\"),h.push(\"maximum\")):\"candlestick\"===l.config.chart.type?(h.push(\"open\"),h.push(\"high\"),h.push(\"low\"),h.push(\"close\")):\"rangeBar\"===l.config.chart.type?(h.push(\"minimum\"),h.push(\"maximum\")):i.map((function(t,e){var i=t.name?t.name:\"series-\".concat(e);l.globals.axisCharts&&h.push(i.split(r).join(\"\")?i.split(r).join(\"\"):\"series-\".concat(e))})),l.globals.axisCharts||(h.push(l.config.chart.toolbar.export.csv.headerValue),c.push(h.join(r))),i.map((function(t,e){l.globals.axisCharts?m(t,e):((h=[]).push(l.globals.labels[e].split(r).join(\"\")),h.push(g[e]),c.push(h.join(r)))})),d+=c.join(n),this.triggerDownload(\"data:text/csv; charset=utf-8,\"+encodeURIComponent(\"\\ufeff\"+d),a||l.config.chart.toolbar.export.csv.filename,\".csv\")}},{key:\"triggerDownload\",value:function(t,e,i){var a=document.createElement(\"a\");a.href=t,a.download=(e||this.w.globals.chartID)+i,document.body.appendChild(a),a.click(),document.body.removeChild(a)}}]),t}(),V=function(){function t(e,i){a(this,t),this.ctx=e,this.elgrid=i,this.w=e.w;var s=this.w;this.axesUtils=new B(e),this.xaxisLabels=s.globals.labels.slice(),s.globals.timescaleLabels.length>0&&!s.globals.isBarHorizontal&&(this.xaxisLabels=s.globals.timescaleLabels.slice()),s.config.xaxis.overwriteCategories&&(this.xaxisLabels=s.config.xaxis.overwriteCategories),this.drawnLabels=[],this.drawnLabelsRects=[],\"top\"===s.config.xaxis.position?this.offY=0:this.offY=s.globals.gridHeight+1,this.offY=this.offY+s.config.xaxis.axisBorder.offsetY,this.isCategoryBarHorizontal=\"bar\"===s.config.chart.type&&s.config.plotOptions.bar.horizontal,this.xaxisFontSize=s.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=s.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=s.config.xaxis.labels.style.colors,this.xaxisBorderWidth=s.config.xaxis.axisBorder.width,this.isCategoryBarHorizontal&&(this.xaxisBorderWidth=s.config.yaxis[0].axisBorder.width.toString()),this.xaxisBorderWidth.indexOf(\"%\")>-1?this.xaxisBorderWidth=s.globals.gridWidth*parseInt(this.xaxisBorderWidth,10)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth,10),this.xaxisBorderHeight=s.config.xaxis.axisBorder.height,this.yaxis=s.config.yaxis[0]}return r(t,[{key:\"drawXaxis\",value:function(){var t=this.w,e=new m(this.ctx),i=e.group({class:\"apexcharts-xaxis\",transform:\"translate(\".concat(t.config.xaxis.offsetX,\", \").concat(t.config.xaxis.offsetY,\")\")}),a=e.group({class:\"apexcharts-xaxis-texts-g\",transform:\"translate(\".concat(t.globals.translateXAxisX,\", \").concat(t.globals.translateXAxisY,\")\")});i.add(a);for(var s=[],r=0;r<this.xaxisLabels.length;r++)s.push(this.xaxisLabels[r]);if(this.drawXAxisLabelAndGroup(!0,e,a,s,t.globals.isXNumeric,(function(t,e){return e})),t.globals.hasXaxisGroups){var o=t.globals.groups;s=[];for(var n=0;n<o.length;n++)s.push(o[n].title);var l={};t.config.xaxis.group.style&&(l.xaxisFontSize=t.config.xaxis.group.style.fontSize,l.xaxisFontFamily=t.config.xaxis.group.style.fontFamily,l.xaxisForeColors=t.config.xaxis.group.style.colors,l.fontWeight=t.config.xaxis.group.style.fontWeight,l.cssClass=t.config.xaxis.group.style.cssClass),this.drawXAxisLabelAndGroup(!1,e,a,s,!1,(function(t,e){return o[t].cols*e}),l)}if(void 0!==t.config.xaxis.title.text){var h=e.group({class:\"apexcharts-xaxis-title\"}),c=e.drawText({x:t.globals.gridWidth/2+t.config.xaxis.title.offsetX,y:this.offY+parseFloat(this.xaxisFontSize)+(\"bottom\"===t.config.xaxis.position?t.globals.xAxisLabelsHeight:-t.globals.xAxisLabelsHeight-10)+t.config.xaxis.title.offsetY,text:t.config.xaxis.title.text,textAnchor:\"middle\",fontSize:t.config.xaxis.title.style.fontSize,fontFamily:t.config.xaxis.title.style.fontFamily,fontWeight:t.config.xaxis.title.style.fontWeight,foreColor:t.config.xaxis.title.style.color,cssClass:\"apexcharts-xaxis-title-text \"+t.config.xaxis.title.style.cssClass});h.add(c),i.add(h)}if(t.config.xaxis.axisBorder.show){var d=t.globals.barPadForNumericAxis,g=e.drawLine(t.globals.padHorizontal+t.config.xaxis.axisBorder.offsetX-d,this.offY,this.xaxisBorderWidth+d,this.offY,t.config.xaxis.axisBorder.color,0,this.xaxisBorderHeight);this.elgrid&&this.elgrid.elGridBorders&&t.config.grid.show?this.elgrid.elGridBorders.add(g):i.add(g)}return i}},{key:\"drawXAxisLabelAndGroup\",value:function(t,e,i,a,s,r){var o,n=this,l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},h=[],c=[],d=this.w,g=l.xaxisFontSize||this.xaxisFontSize,u=l.xaxisFontFamily||this.xaxisFontFamily,p=l.xaxisForeColors||this.xaxisForeColors,f=l.fontWeight||d.config.xaxis.labels.style.fontWeight,x=l.cssClass||d.config.xaxis.labels.style.cssClass,b=d.globals.padHorizontal,v=a.length,m=\"category\"===d.config.xaxis.type?d.globals.dataPoints:v;if(0===m&&v>m&&(m=v),s){var y=m>1?m-1:m;o=d.globals.gridWidth/y,b=b+r(0,o)/2+d.config.xaxis.labels.offsetX}else o=d.globals.gridWidth/m,b=b+r(0,o)+d.config.xaxis.labels.offsetX;for(var w=function(s){var l=b-r(s,o)/2+d.config.xaxis.labels.offsetX;0===s&&1===v&&o/2===b&&1===m&&(l=d.globals.gridWidth/2);var y=n.axesUtils.getLabel(a,d.globals.timescaleLabels,l,s,h,g,t),w=28;d.globals.rotateXLabels&&t&&(w=22),d.config.xaxis.title.text&&\"top\"===d.config.xaxis.position&&(w+=parseFloat(d.config.xaxis.title.style.fontSize)+2),t||(w=w+parseFloat(g)+(d.globals.xAxisLabelsHeight-d.globals.xAxisGroupLabelsHeight)+(d.globals.rotateXLabels?10:0)),y=void 0!==d.config.xaxis.tickAmount&&\"dataPoints\"!==d.config.xaxis.tickAmount&&\"datetime\"!==d.config.xaxis.type?n.axesUtils.checkLabelBasedOnTickamount(s,y,v):n.axesUtils.checkForOverflowingLabels(s,y,v,h,c);if(d.config.xaxis.labels.show){var k=e.drawText({x:y.x,y:n.offY+d.config.xaxis.labels.offsetY+w-(\"top\"===d.config.xaxis.position?d.globals.xAxisHeight+d.config.xaxis.axisTicks.height-2:0),text:y.text,textAnchor:\"middle\",fontWeight:y.isBold?600:f,fontSize:g,fontFamily:u,foreColor:Array.isArray(p)?t&&d.config.xaxis.convertedCatToNumeric?p[d.globals.minX+s-1]:p[s]:p,isPlainText:!1,cssClass:(t?\"apexcharts-xaxis-label \":\"apexcharts-xaxis-group-label \")+x});if(i.add(k),k.on(\"click\",(function(t){if(\"function\"==typeof d.config.chart.events.xAxisLabelClick){var e=Object.assign({},d,{labelIndex:s});d.config.chart.events.xAxisLabelClick(t,n.ctx,e)}})),t){var A=document.createElementNS(d.globals.SVGNS,\"title\");A.textContent=Array.isArray(y.text)?y.text.join(\" \"):y.text,k.node.appendChild(A),\"\"!==y.text&&(h.push(y.text),c.push(y))}}s<v-1&&(b+=r(s+1,o))},k=0;k<=v-1;k++)w(k)}},{key:\"drawXaxisInversed\",value:function(t){var e,i,a=this,s=this.w,r=new m(this.ctx),o=s.config.yaxis[0].opposite?s.globals.translateYAxisX[t]:0,n=r.group({class:\"apexcharts-yaxis apexcharts-xaxis-inversed\",rel:t}),l=r.group({class:\"apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g\",transform:\"translate(\"+o+\", 0)\"});n.add(l);var h=[];if(s.config.yaxis[t].show)for(var c=0;c<this.xaxisLabels.length;c++)h.push(this.xaxisLabels[c]);e=s.globals.gridHeight/h.length,i=-e/2.2;var d=s.globals.yLabelFormatters[0],g=s.config.yaxis[0].labels;if(g.show)for(var u=function(o){var n=void 0===h[o]?\"\":h[o];n=d(n,{seriesIndex:t,dataPointIndex:o,w:s});var c=a.axesUtils.getYAxisForeColor(g.style.colors,t),u=0;Array.isArray(n)&&(u=n.length/2*parseInt(g.style.fontSize,10));var p=g.offsetX-15,f=\"end\";a.yaxis.opposite&&(f=\"start\"),\"left\"===s.config.yaxis[0].labels.align?(p=g.offsetX,f=\"start\"):\"center\"===s.config.yaxis[0].labels.align?(p=g.offsetX,f=\"middle\"):\"right\"===s.config.yaxis[0].labels.align&&(f=\"end\");var x=r.drawText({x:p,y:i+e+g.offsetY-u,text:n,textAnchor:f,foreColor:Array.isArray(c)?c[o]:c,fontSize:g.style.fontSize,fontFamily:g.style.fontFamily,fontWeight:g.style.fontWeight,isPlainText:!1,cssClass:\"apexcharts-yaxis-label \"+g.style.cssClass,maxWidth:g.maxWidth});l.add(x),x.on(\"click\",(function(t){if(\"function\"==typeof s.config.chart.events.xAxisLabelClick){var e=Object.assign({},s,{labelIndex:o});s.config.chart.events.xAxisLabelClick(t,a.ctx,e)}}));var b=document.createElementNS(s.globals.SVGNS,\"title\");if(b.textContent=Array.isArray(n)?n.join(\" \"):n,x.node.appendChild(b),0!==s.config.yaxis[t].labels.rotate){var v=r.rotateAroundCenter(x.node);x.node.setAttribute(\"transform\",\"rotate(\".concat(s.config.yaxis[t].labels.rotate,\" 0 \").concat(v.y,\")\"))}i+=e},p=0;p<=h.length-1;p++)u(p);if(void 0!==s.config.yaxis[0].title.text){var f=r.group({class:\"apexcharts-yaxis-title apexcharts-xaxis-title-inversed\",transform:\"translate(\"+o+\", 0)\"}),x=r.drawText({x:s.config.yaxis[0].title.offsetX,y:s.globals.gridHeight/2+s.config.yaxis[0].title.offsetY,text:s.config.yaxis[0].title.text,textAnchor:\"middle\",foreColor:s.config.yaxis[0].title.style.color,fontSize:s.config.yaxis[0].title.style.fontSize,fontWeight:s.config.yaxis[0].title.style.fontWeight,fontFamily:s.config.yaxis[0].title.style.fontFamily,cssClass:\"apexcharts-yaxis-title-text \"+s.config.yaxis[0].title.style.cssClass});f.add(x),n.add(f)}var b=0;this.isCategoryBarHorizontal&&s.config.yaxis[0].opposite&&(b=s.globals.gridWidth);var v=s.config.xaxis.axisBorder;if(v.show){var y=r.drawLine(s.globals.padHorizontal+v.offsetX+b,1+v.offsetY,s.globals.padHorizontal+v.offsetX+b,s.globals.gridHeight+v.offsetY,v.color,0);this.elgrid&&this.elgrid.elGridBorders&&s.config.grid.show?this.elgrid.elGridBorders.add(y):n.add(y)}return s.config.yaxis[0].axisTicks.show&&this.axesUtils.drawYAxisTicks(b,h.length,s.config.yaxis[0].axisBorder,s.config.yaxis[0].axisTicks,0,e,n),n}},{key:\"drawXaxisTicks\",value:function(t,e,i){var a=this.w,s=t;if(!(t<0||t-2>a.globals.gridWidth)){var r=this.offY+a.config.xaxis.axisTicks.offsetY;if(e=e+r+a.config.xaxis.axisTicks.height,\"top\"===a.config.xaxis.position&&(e=r-a.config.xaxis.axisTicks.height),a.config.xaxis.axisTicks.show){var o=new m(this.ctx).drawLine(t+a.config.xaxis.axisTicks.offsetX,r+a.config.xaxis.offsetY,s+a.config.xaxis.axisTicks.offsetX,e+a.config.xaxis.offsetY,a.config.xaxis.axisTicks.color);i.add(o),o.node.classList.add(\"apexcharts-xaxis-tick\")}}}},{key:\"getXAxisTicksPositions\",value:function(){var t=this.w,e=[],i=this.xaxisLabels.length,a=t.globals.padHorizontal;if(t.globals.timescaleLabels.length>0)for(var s=0;s<i;s++)a=this.xaxisLabels[s].position,e.push(a);else for(var r=i,o=0;o<r;o++){var n=r;t.globals.isXNumeric&&\"bar\"!==t.config.chart.type&&(n-=1),a+=t.globals.gridWidth/n,e.push(a)}return e}},{key:\"xAxisLabelCorrections\",value:function(){var t=this.w,e=new m(this.ctx),i=t.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-texts-g\"),a=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-xaxis-texts-g text:not(.apexcharts-xaxis-group-label)\"),s=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis-inversed text\"),r=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-xaxis-inversed-texts-g text tspan\");if(t.globals.rotateXLabels||t.config.xaxis.labels.rotateAlways)for(var o=0;o<a.length;o++){var n=e.rotateAroundCenter(a[o]);n.y=n.y-1,n.x=n.x+1,a[o].setAttribute(\"transform\",\"rotate(\".concat(t.config.xaxis.labels.rotate,\" \").concat(n.x,\" \").concat(n.y,\")\")),a[o].setAttribute(\"text-anchor\",\"end\");i.setAttribute(\"transform\",\"translate(0, \".concat(-10,\")\"));var l=a[o].childNodes;t.config.xaxis.labels.trim&&Array.prototype.forEach.call(l,(function(i){e.placeTextWithEllipsis(i,i.textContent,t.globals.xAxisLabelsHeight-(\"bottom\"===t.config.legend.position?20:10))}))}else!function(){for(var i=t.globals.gridWidth/(t.globals.labels.length+1),s=0;s<a.length;s++){var r=a[s].childNodes;t.config.xaxis.labels.trim&&\"datetime\"!==t.config.xaxis.type&&Array.prototype.forEach.call(r,(function(t){e.placeTextWithEllipsis(t,t.textContent,i)}))}}();if(s.length>0){var h=s[s.length-1].getBBox(),c=s[0].getBBox();h.x<-20&&s[s.length-1].parentNode.removeChild(s[s.length-1]),c.x+c.width>t.globals.gridWidth&&!t.globals.isBarHorizontal&&s[0].parentNode.removeChild(s[0]);for(var d=0;d<r.length;d++)e.placeTextWithEllipsis(r[d],r[d].textContent,t.config.yaxis[0].labels.maxWidth-(t.config.yaxis[0].title.text?2*parseFloat(t.config.yaxis[0].title.style.fontSize):0)-15)}}}]),t}(),j=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.xaxisLabels=i.globals.labels.slice(),this.axesUtils=new B(e),this.isRangeBar=i.globals.seriesRange.length,i.globals.timescaleLabels.length>0&&(this.xaxisLabels=i.globals.timescaleLabels.slice())}return r(t,[{key:\"drawGridArea\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w,i=new m(this.ctx);null===t&&(t=i.group({class:\"apexcharts-grid\"}));var a=i.drawLine(e.globals.padHorizontal,1,e.globals.padHorizontal,e.globals.gridHeight,\"transparent\"),s=i.drawLine(e.globals.padHorizontal,e.globals.gridHeight,e.globals.gridWidth,e.globals.gridHeight,\"transparent\");return t.add(s),t.add(a),t}},{key:\"drawGrid\",value:function(){var t=null;return this.w.globals.axisCharts&&(t=this.renderGrid(),this.drawGridArea(t.el)),t}},{key:\"createGridMask\",value:function(){var t=this.w,e=t.globals,i=new m(this.ctx),a=Array.isArray(t.config.stroke.width)?0:t.config.stroke.width;if(Array.isArray(t.config.stroke.width)){var s=0;t.config.stroke.width.forEach((function(t){s=Math.max(s,t)})),a=s}e.dom.elGridRectMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elGridRectMask.setAttribute(\"id\",\"gridRectMask\".concat(e.cuid)),e.dom.elGridRectMarkerMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elGridRectMarkerMask.setAttribute(\"id\",\"gridRectMarkerMask\".concat(e.cuid)),e.dom.elForecastMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elForecastMask.setAttribute(\"id\",\"forecastMask\".concat(e.cuid)),e.dom.elNonForecastMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elNonForecastMask.setAttribute(\"id\",\"nonForecastMask\".concat(e.cuid));var r=t.config.chart.type,o=0,n=0;(\"bar\"===r||\"rangeBar\"===r||\"candlestick\"===r||\"boxPlot\"===r||t.globals.comboBarCount>0)&&t.globals.isXNumeric&&!t.globals.isBarHorizontal&&(o=t.config.grid.padding.left,n=t.config.grid.padding.right,e.barPadForNumericAxis>o&&(o=e.barPadForNumericAxis,n=e.barPadForNumericAxis)),e.dom.elGridRect=i.drawRect(-a/2-o-2,-a/2,e.gridWidth+a+n+o+4,e.gridHeight+a,0,\"#fff\");var l=t.globals.markers.largestSize+1;e.dom.elGridRectMarker=i.drawRect(2*-l,2*-l,e.gridWidth+4*l,e.gridHeight+4*l,0,\"#fff\"),e.dom.elGridRectMask.appendChild(e.dom.elGridRect.node),e.dom.elGridRectMarkerMask.appendChild(e.dom.elGridRectMarker.node);var h=e.dom.baseEl.querySelector(\"defs\");h.appendChild(e.dom.elGridRectMask),h.appendChild(e.dom.elForecastMask),h.appendChild(e.dom.elNonForecastMask),h.appendChild(e.dom.elGridRectMarkerMask)}},{key:\"_drawGridLines\",value:function(t){var e=t.i,i=t.x1,a=t.y1,s=t.x2,r=t.y2,o=t.xCount,n=t.parent,l=this.w;if(!(0===e&&l.globals.skipFirstTimelinelabel||e===o-1&&l.globals.skipLastTimelinelabel&&!l.config.xaxis.labels.formatter||\"radar\"===l.config.chart.type)){l.config.grid.xaxis.lines.show&&this._drawGridLine({i:e,x1:i,y1:a,x2:s,y2:r,xCount:o,parent:n});var h=0;if(l.globals.hasXaxisGroups&&\"between\"===l.config.xaxis.tickPlacement){var c=l.globals.groups;if(c){for(var d=0,g=0;d<e&&g<c.length;g++)d+=c[g].cols;d===e&&(h=.6*l.globals.xAxisLabelsHeight)}}new V(this.ctx).drawXaxisTicks(i,h,l.globals.dom.elGraphical)}}},{key:\"_drawGridLine\",value:function(t){var e=t.i,i=t.x1,a=t.y1,s=t.x2,r=t.y2,o=t.xCount,n=t.parent,l=this.w,h=!1,c=n.node.classList.contains(\"apexcharts-gridlines-horizontal\"),d=l.config.grid.strokeDashArray,g=l.globals.barPadForNumericAxis;(0===a&&0===r||0===i&&0===s)&&(h=!0),a===l.globals.gridHeight&&r===l.globals.gridHeight&&(h=!0),!l.globals.isBarHorizontal||0!==e&&e!==o-1||(h=!0);var u=new m(this).drawLine(i-(c?g:0),a,s+(c?g:0),r,l.config.grid.borderColor,d);u.node.classList.add(\"apexcharts-gridline\"),h&&l.config.grid.show?this.elGridBorders.add(u):n.add(u)}},{key:\"_drawGridBandRect\",value:function(t){var e=t.c,i=t.x1,a=t.y1,s=t.x2,r=t.y2,o=t.type,n=this.w,l=new m(this.ctx),h=n.globals.barPadForNumericAxis;if(\"column\"!==o||\"datetime\"!==n.config.xaxis.type){var c=n.config.grid[o].colors[e],d=l.drawRect(i-(\"row\"===o?h:0),a,s+(\"row\"===o?2*h:0),r,0,c,n.config.grid[o].opacity);this.elg.add(d),d.attr(\"clip-path\",\"url(#gridRectMask\".concat(n.globals.cuid,\")\")),d.node.classList.add(\"apexcharts-grid-\".concat(o))}}},{key:\"_drawXYLines\",value:function(t){var e=this,i=t.xCount,a=t.tickAmount,s=this.w;if(s.config.grid.xaxis.lines.show||s.config.xaxis.axisTicks.show){var r,o=s.globals.padHorizontal,n=s.globals.gridHeight;s.globals.timescaleLabels.length?function(t){for(var a=t.xC,s=t.x1,r=t.y1,o=t.x2,n=t.y2,l=0;l<a;l++)s=e.xaxisLabels[l].position,o=e.xaxisLabels[l].position,e._drawGridLines({i:l,x1:s,y1:r,x2:o,y2:n,xCount:i,parent:e.elgridLinesV})}({xC:i,x1:o,y1:0,x2:r,y2:n}):(s.globals.isXNumeric&&(i=s.globals.xAxisScale.result.length),function(t){for(var a=t.xC,r=t.x1,o=t.y1,n=t.x2,l=t.y2,h=0;h<a+(s.globals.isXNumeric?0:1);h++)0===h&&1===a&&1===s.globals.dataPoints&&(n=r=s.globals.gridWidth/2),e._drawGridLines({i:h,x1:r,y1:o,x2:n,y2:l,xCount:i,parent:e.elgridLinesV}),n=r+=s.globals.gridWidth/(s.globals.isXNumeric?a-1:a)}({xC:i,x1:o,y1:0,x2:r,y2:n}))}if(s.config.grid.yaxis.lines.show){var l=0,h=0,c=s.globals.gridWidth,d=a+1;this.isRangeBar&&(d=s.globals.labels.length);for(var g=0;g<d+(this.isRangeBar?1:0);g++)this._drawGridLine({i:g,xCount:d+(this.isRangeBar?1:0),x1:0,y1:l,x2:c,y2:h,parent:this.elgridLinesH}),h=l+=s.globals.gridHeight/(this.isRangeBar?d:a)}}},{key:\"_drawInvertedXYLines\",value:function(t){var e=t.xCount,i=this.w;if(i.config.grid.xaxis.lines.show||i.config.xaxis.axisTicks.show)for(var a,s=i.globals.padHorizontal,r=i.globals.gridHeight,o=0;o<e+1;o++){i.config.grid.xaxis.lines.show&&this._drawGridLine({i:o,xCount:e+1,x1:s,y1:0,x2:a,y2:r,parent:this.elgridLinesV}),new V(this.ctx).drawXaxisTicks(s,0,i.globals.dom.elGraphical),a=s=s+i.globals.gridWidth/e+.3}if(i.config.grid.yaxis.lines.show)for(var n=0,l=0,h=i.globals.gridWidth,c=0;c<i.globals.dataPoints+1;c++)this._drawGridLine({i:c,xCount:i.globals.dataPoints+1,x1:0,y1:n,x2:h,y2:l,parent:this.elgridLinesH}),l=n+=i.globals.gridHeight/i.globals.dataPoints}},{key:\"renderGrid\",value:function(){var t=this.w,e=new m(this.ctx);this.elg=e.group({class:\"apexcharts-grid\"}),this.elgridLinesH=e.group({class:\"apexcharts-gridlines-horizontal\"}),this.elgridLinesV=e.group({class:\"apexcharts-gridlines-vertical\"}),this.elGridBorders=e.group({class:\"apexcharts-grid-borders\"}),this.elg.add(this.elgridLinesH),this.elg.add(this.elgridLinesV),t.config.grid.show||(this.elgridLinesV.hide(),this.elgridLinesH.hide(),this.elGridBorders.hide());for(var i,a=t.globals.yAxisScale.length?t.globals.yAxisScale[0].result.length-1:5,s=0;s<t.globals.series.length&&(void 0!==t.globals.yAxisScale[s]&&(a=t.globals.yAxisScale[s].result.length-1),!(a>2));s++);return!t.globals.isBarHorizontal||this.isRangeBar?(i=this.xaxisLabels.length,this.isRangeBar&&t.globals.isBarHorizontal&&(i--,a=t.globals.labels.length,t.config.xaxis.tickAmount&&t.config.xaxis.labels.formatter&&(i=t.config.xaxis.tickAmount)),this._drawXYLines({xCount:i,tickAmount:a})):(i=a,a=t.globals.xTickAmount,this._drawInvertedXYLines({xCount:i,tickAmount:a})),this.drawGridBands(i,a),{el:this.elg,elGridBorders:this.elGridBorders,xAxisTickWidth:t.globals.gridWidth/i}}},{key:\"drawGridBands\",value:function(t,e){var i=this.w;if(void 0!==i.config.grid.row.colors&&i.config.grid.row.colors.length>0)for(var a=0,s=i.globals.gridHeight/e,r=i.globals.gridWidth,o=0,n=0;o<e;o++,n++)n>=i.config.grid.row.colors.length&&(n=0),this._drawGridBandRect({c:n,x1:0,y1:a,x2:r,y2:s,type:\"row\"}),a+=i.globals.gridHeight/e;if(void 0!==i.config.grid.column.colors&&i.config.grid.column.colors.length>0)for(var l=i.globals.isBarHorizontal||\"category\"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric?t:t-1,h=i.globals.padHorizontal,c=i.globals.padHorizontal+i.globals.gridWidth/l,d=i.globals.gridHeight,g=0,u=0;g<t;g++,u++)u>=i.config.grid.column.colors.length&&(u=0),this._drawGridBandRect({c:u,x1:h,y1:0,x2:c,y2:d,type:\"column\"}),h+=i.globals.gridWidth/l}}]),t}(),_=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"niceScale\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4?arguments[4]:void 0,r=this.w,o=Math.abs(e-t);if(\"dataPoints\"===(i=this._adjustTicksForSmallRange(i,a,o))&&(i=r.globals.dataPoints-1),t===Number.MIN_VALUE&&0===e||!x.isNumber(t)&&!x.isNumber(e)||t===Number.MIN_VALUE&&e===-Number.MAX_VALUE)return t=0,e=i,this.linearScale(t,e,i);t>e?(console.warn(\"axis.min cannot be greater than axis.max\"),e=t+.1):t===e&&(t=0===t?0:t-.5,e=0===e?2:e+.5);var n=[];o<1&&s&&(\"candlestick\"===r.config.chart.type||\"candlestick\"===r.config.series[a].type||\"boxPlot\"===r.config.chart.type||\"boxPlot\"===r.config.series[a].type||r.globals.isRangeData)&&(e*=1.01);var l=i+1;l<2?l=2:l>2&&(l-=2);var h=o/l,c=Math.floor(x.log10(h)),d=Math.pow(10,c),g=Math.round(h/d);g<1&&(g=1);var u=g*d,p=u*Math.floor(t/u),f=u*Math.ceil(e/u),b=p;if(s&&o>2){for(;n.push(b),!((b+=u)>f););return{result:n,niceMin:n[0],niceMax:n[n.length-1]}}var v=t;(n=[]).push(v);for(var m=Math.abs(e-t)/i,y=0;y<=i;y++)v+=m,n.push(v);return n[n.length-2]>=e&&n.pop(),{result:n,niceMin:n[0],niceMax:n[n.length-1]}}},{key:\"linearScale\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,a=arguments.length>3?arguments[3]:void 0,s=Math.abs(e-t);\"dataPoints\"===(i=this._adjustTicksForSmallRange(i,a,s))&&(i=this.w.globals.dataPoints-1);var r=s/i;i===Number.MAX_VALUE&&(i=10,r=1);for(var o=[],n=t;i>=0;)o.push(n),n+=r,i-=1;return{result:o,niceMin:o[0],niceMax:o[o.length-1]}}},{key:\"logarithmicScaleNice\",value:function(t,e,i){e<=0&&(e=Math.max(t,i)),t<=0&&(t=Math.min(e,i));for(var a=[],s=Math.ceil(Math.log(e)/Math.log(i)+1),r=Math.floor(Math.log(t)/Math.log(i));r<s;r++)a.push(Math.pow(i,r));return{result:a,niceMin:a[0],niceMax:a[a.length-1]}}},{key:\"logarithmicScale\",value:function(t,e,i){e<=0&&(e=Math.max(t,i)),t<=0&&(t=Math.min(e,i));for(var a=[],s=Math.log(e)/Math.log(i),r=Math.log(t)/Math.log(i),o=s-r,n=Math.round(o),l=o/n,h=0,c=r;h<n;h++,c+=l)a.push(Math.pow(i,c));return a.push(Math.pow(i,s)),{result:a,niceMin:t,niceMax:e}}},{key:\"_adjustTicksForSmallRange\",value:function(t,e,i){var a=t;if(void 0!==e&&this.w.config.yaxis[e].labels.formatter&&void 0===this.w.config.yaxis[e].tickAmount){var s=Number(this.w.config.yaxis[e].labels.formatter(1));x.isNumber(s)&&0===this.w.globals.yValueDecimal&&(a=Math.ceil(i))}return a<t?a:t}},{key:\"setYScaleForIndex\",value:function(t,e,i){var a=this.w.globals,s=this.w.config,r=a.isBarHorizontal?s.xaxis:s.yaxis[t];void 0===a.yAxisScale[t]&&(a.yAxisScale[t]=[]);var o=Math.abs(i-e);if(r.logarithmic&&o<=5&&(a.invalidLogScale=!0),r.logarithmic&&o>5)a.allSeriesCollapsed=!1,a.yAxisScale[t]=this.logarithmicScale(e,i,r.logBase),a.yAxisScale[t]=r.forceNiceScale?this.logarithmicScaleNice(e,i,r.logBase):this.logarithmicScale(e,i,r.logBase);else if(i!==-Number.MAX_VALUE&&x.isNumber(i))if(a.allSeriesCollapsed=!1,void 0===r.min&&void 0===r.max||r.forceNiceScale){var n=void 0===s.yaxis[t].max&&void 0===s.yaxis[t].min||s.yaxis[t].forceNiceScale;a.yAxisScale[t]=this.niceScale(e,i,r.tickAmount?r.tickAmount:o<5&&o>1?o+1:5,t,n)}else a.yAxisScale[t]=this.linearScale(e,i,r.tickAmount,t);else a.yAxisScale[t]=this.linearScale(0,5,5)}},{key:\"setXScale\",value:function(t,e){var i=this.w,a=i.globals,s=i.config.xaxis,r=Math.abs(e-t);return e!==-Number.MAX_VALUE&&x.isNumber(e)?a.xAxisScale=this.linearScale(t,e,s.tickAmount?s.tickAmount:r<5&&r>1?r+1:5,0):a.xAxisScale=this.linearScale(0,5,5),a.xAxisScale}},{key:\"setMultipleYScales\",value:function(){var t=this,e=this.w.globals,i=this.w.config,a=e.minYArr.concat([]),s=e.maxYArr.concat([]),r=[];i.yaxis.forEach((function(e,o){var n=o;i.series.forEach((function(t,i){t.name===e.seriesName&&(n=i,o!==i?r.push({index:i,similarIndex:o,alreadyExists:!0}):r.push({index:i}))}));var l=a[n],h=s[n];t.setYScaleForIndex(o,l,h)})),this.sameScaleInMultipleAxes(a,s,r)}},{key:\"sameScaleInMultipleAxes\",value:function(t,e,i){var a=this,s=this.w.config,r=this.w.globals,o=[];i.forEach((function(t){t.alreadyExists&&(void 0===o[t.index]&&(o[t.index]=[]),o[t.index].push(t.index),o[t.index].push(t.similarIndex))})),r.yAxisSameScaleIndices=o,o.forEach((function(t,e){o.forEach((function(i,a){var s,r;e!==a&&(s=t,r=i,s.filter((function(t){return-1!==r.indexOf(t)}))).length>0&&(o[e]=o[e].concat(o[a]))}))}));var n=o.map((function(t){return t.filter((function(e,i){return t.indexOf(e)===i}))})).map((function(t){return t.sort()}));o=o.filter((function(t){return!!t}));var l=n.slice(),h=l.map((function(t){return JSON.stringify(t)}));l=l.filter((function(t,e){return h.indexOf(JSON.stringify(t))===e}));var c=[],d=[];t.forEach((function(t,i){l.forEach((function(a,s){a.indexOf(i)>-1&&(void 0===c[s]&&(c[s]=[],d[s]=[]),c[s].push({key:i,value:t}),d[s].push({key:i,value:e[i]}))}))}));var g=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,Number.MIN_VALUE),u=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,-Number.MAX_VALUE);c.forEach((function(t,e){t.forEach((function(t,i){g[e]=Math.min(t.value,g[e])}))})),d.forEach((function(t,e){t.forEach((function(t,i){u[e]=Math.max(t.value,u[e])}))})),t.forEach((function(t,e){d.forEach((function(t,i){var o=g[i],n=u[i];s.chart.stacked&&(n=0,t.forEach((function(t,e){t.value!==-Number.MAX_VALUE&&(n+=t.value),o!==Number.MIN_VALUE&&(o+=c[i][e].value)}))),t.forEach((function(i,l){t[l].key===e&&(void 0!==s.yaxis[e].min&&(o=\"function\"==typeof s.yaxis[e].min?s.yaxis[e].min(r.minY):s.yaxis[e].min),void 0!==s.yaxis[e].max&&(n=\"function\"==typeof s.yaxis[e].max?s.yaxis[e].max(r.maxY):s.yaxis[e].max),a.setYScaleForIndex(e,o,n))}))}))}))}},{key:\"autoScaleY\",value:function(t,e,i){t||(t=this);var a=t.w;if(a.globals.isMultipleYAxis||a.globals.collapsedSeries.length)return console.warn(\"autoScaleYaxis is not supported in a multi-yaxis chart.\"),e;var s=a.globals.seriesX[0],r=a.config.chart.stacked;return e.forEach((function(t,o){for(var n=0,l=0;l<s.length;l++)if(s[l]>=i.xaxis.min){n=l;break}var h,c,d=a.globals.minYArr[o],g=a.globals.maxYArr[o],u=a.globals.stackedSeriesTotals;a.globals.series.forEach((function(o,l){var p=o[n];r?(p=u[n],h=c=p,u.forEach((function(t,e){s[e]<=i.xaxis.max&&s[e]>=i.xaxis.min&&(t>c&&null!==t&&(c=t),o[e]<h&&null!==o[e]&&(h=o[e]))}))):(h=c=p,o.forEach((function(t,e){if(s[e]<=i.xaxis.max&&s[e]>=i.xaxis.min){var r=t,o=t;a.globals.series.forEach((function(i,a){null!==t&&(r=Math.min(i[e],r),o=Math.max(i[e],o))})),o>c&&null!==o&&(c=o),r<h&&null!==r&&(h=r)}}))),void 0===h&&void 0===c&&(h=d,c=g),c*=c<0?.9:1.1,0===(h*=h<0?1.1:.9)&&0===c&&(h=-1,c=1),c<0&&c<g&&(c=g),h<0&&h>d&&(h=d),e.length>1?(e[l].min=void 0===t.min?h:t.min,e[l].max=void 0===t.max?c:t.max):(e[0].min=void 0===t.min?h:t.min,e[0].max=void 0===t.max?c:t.max)}))})),e}}]),t}(),U=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.scales=new _(e)}return r(t,[{key:\"init\",value:function(){this.setYRange(),this.setXRange(),this.setZRange()}},{key:\"getMinYMaxY\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-Number.MAX_VALUE,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.w.config,r=this.w.globals,o=-Number.MAX_VALUE,n=Number.MIN_VALUE;null===a&&(a=t+1);var l=r.series,h=l,c=l;\"candlestick\"===s.chart.type?(h=r.seriesCandleL,c=r.seriesCandleH):\"boxPlot\"===s.chart.type?(h=r.seriesCandleO,c=r.seriesCandleC):r.isRangeData&&(h=r.seriesRangeStart,c=r.seriesRangeEnd);for(var d=t;d<a;d++){r.dataPoints=Math.max(r.dataPoints,l[d].length),r.categoryLabels.length&&(r.dataPoints=r.categoryLabels.filter((function(t){return void 0!==t})).length),r.labels.length&&(r.dataPoints=Math.max(r.dataPoints,r.labels.length));for(var g=0;g<r.series[d].length;g++){var u=l[d][g];null!==u&&x.isNumber(u)?(void 0!==c[d][g]&&(o=Math.max(o,c[d][g]),e=Math.min(e,c[d][g])),void 0!==h[d][g]&&(e=Math.min(e,h[d][g]),i=Math.max(i,h[d][g])),\"candlestick\"!==this.w.config.chart.type&&\"boxPlot\"!==this.w.config.chart.type&&\"rangeArea\"===this.w.config.chart.type&&\"rangeBar\"===this.w.config.chart.type||(\"candlestick\"!==this.w.config.chart.type&&\"boxPlot\"!==this.w.config.chart.type||void 0!==r.seriesCandleC[d][g]&&(o=Math.max(o,r.seriesCandleO[d][g]),o=Math.max(o,r.seriesCandleH[d][g]),o=Math.max(o,r.seriesCandleL[d][g]),o=Math.max(o,r.seriesCandleC[d][g]),\"boxPlot\"===this.w.config.chart.type&&(o=Math.max(o,r.seriesCandleM[d][g]))),!s.series[d].type||\"candlestick\"===s.series[d].type&&\"boxPlot\"===s.series[d].type&&\"rangeArea\"===s.series[d].type&&\"rangeBar\"===s.series[d].type||(o=Math.max(o,r.series[d][g]),e=Math.min(e,r.series[d][g])),i=o),r.seriesGoals[d]&&r.seriesGoals[d][g]&&Array.isArray(r.seriesGoals[d][g])&&r.seriesGoals[d][g].forEach((function(t){n!==Number.MIN_VALUE&&(n=Math.min(n,t.value),e=n),o=Math.max(o,t.value),i=o})),x.isFloat(u)&&(u=x.noExponents(u),r.yValueDecimal=Math.max(r.yValueDecimal,u.toString().split(\".\")[1].length)),n>h[d][g]&&h[d][g]<0&&(n=h[d][g])):r.hasNullValues=!0}}return\"rangeBar\"===s.chart.type&&r.seriesRangeStart.length&&r.isBarHorizontal&&(n=e),\"bar\"===s.chart.type&&(n<0&&o<0&&(o=0),n===Number.MIN_VALUE&&(n=0)),{minY:n,maxY:o,lowestY:e,highestY:i}}},{key:\"setYRange\",value:function(){var t=this.w.globals,e=this.w.config;t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE;var i=Number.MAX_VALUE;if(t.isMultipleYAxis)for(var a=0;a<t.series.length;a++){var s=this.getMinYMaxY(a,i,null,a+1);t.minYArr.push(s.minY),t.maxYArr.push(s.maxY),i=s.lowestY}var r=this.getMinYMaxY(0,i,null,t.series.length);if(t.minY=r.minY,t.maxY=r.maxY,i=r.lowestY,e.chart.stacked&&this._setStackedMinMax(),(\"line\"===e.chart.type||\"area\"===e.chart.type||\"candlestick\"===e.chart.type||\"boxPlot\"===e.chart.type||\"rangeBar\"===e.chart.type&&!t.isBarHorizontal)&&t.minY===Number.MIN_VALUE&&i!==-Number.MAX_VALUE&&i!==t.maxY){var o=t.maxY-i;(i>=0&&i<=10||void 0!==e.yaxis[0].min||void 0!==e.yaxis[0].max)&&(o=0),t.minY=i-5*o/100,i>0&&t.minY<0&&(t.minY=0),t.maxY=t.maxY+5*o/100}if(e.yaxis.forEach((function(e,i){void 0!==e.max&&(\"number\"==typeof e.max?t.maxYArr[i]=e.max:\"function\"==typeof e.max&&(t.maxYArr[i]=e.max(t.isMultipleYAxis?t.maxYArr[i]:t.maxY)),t.maxY=t.maxYArr[i]),void 0!==e.min&&(\"number\"==typeof e.min?t.minYArr[i]=e.min:\"function\"==typeof e.min&&(t.minYArr[i]=e.min(t.isMultipleYAxis?t.minYArr[i]===Number.MIN_VALUE?0:t.minYArr[i]:t.minY)),t.minY=t.minYArr[i])})),t.isBarHorizontal){[\"min\",\"max\"].forEach((function(i){void 0!==e.xaxis[i]&&\"number\"==typeof e.xaxis[i]&&(\"min\"===i?t.minY=e.xaxis[i]:t.maxY=e.xaxis[i])}))}return t.isMultipleYAxis?(this.scales.setMultipleYScales(),t.minY=i,t.yAxisScale.forEach((function(e,i){t.minYArr[i]=e.niceMin,t.maxYArr[i]=e.niceMax}))):(this.scales.setYScaleForIndex(0,t.minY,t.maxY),t.minY=t.yAxisScale[0].niceMin,t.maxY=t.yAxisScale[0].niceMax,t.minYArr[0]=t.yAxisScale[0].niceMin,t.maxYArr[0]=t.yAxisScale[0].niceMax),{minY:t.minY,maxY:t.maxY,minYArr:t.minYArr,maxYArr:t.maxYArr,yAxisScale:t.yAxisScale}}},{key:\"setXRange\",value:function(){var t=this.w.globals,e=this.w.config,i=\"numeric\"===e.xaxis.type||\"datetime\"===e.xaxis.type||\"category\"===e.xaxis.type&&!t.noLabelsProvided||t.noLabelsProvided||t.isXNumeric;if(t.isXNumeric&&function(){for(var e=0;e<t.series.length;e++)if(t.labels[e])for(var i=0;i<t.labels[e].length;i++)null!==t.labels[e][i]&&x.isNumber(t.labels[e][i])&&(t.maxX=Math.max(t.maxX,t.labels[e][i]),t.initialMaxX=Math.max(t.maxX,t.labels[e][i]),t.minX=Math.min(t.minX,t.labels[e][i]),t.initialMinX=Math.min(t.minX,t.labels[e][i]))}(),t.noLabelsProvided&&0===e.xaxis.categories.length&&(t.maxX=t.labels[t.labels.length-1],t.initialMaxX=t.labels[t.labels.length-1],t.minX=1,t.initialMinX=1),t.isXNumeric||t.noLabelsProvided||t.dataFormatXNumeric){var a;if(void 0===e.xaxis.tickAmount?(a=Math.round(t.svgWidth/150),\"numeric\"===e.xaxis.type&&t.dataPoints<30&&(a=t.dataPoints-1),a>t.dataPoints&&0!==t.dataPoints&&(a=t.dataPoints-1)):\"dataPoints\"===e.xaxis.tickAmount?(t.series.length>1&&(a=t.series[t.maxValsInArrayIndex].length-1),t.isXNumeric&&(a=t.maxX-t.minX-1)):a=e.xaxis.tickAmount,t.xTickAmount=a,void 0!==e.xaxis.max&&\"number\"==typeof e.xaxis.max&&(t.maxX=e.xaxis.max),void 0!==e.xaxis.min&&\"number\"==typeof e.xaxis.min&&(t.minX=e.xaxis.min),void 0!==e.xaxis.range&&(t.minX=t.maxX-e.xaxis.range),t.minX!==Number.MAX_VALUE&&t.maxX!==-Number.MAX_VALUE)if(e.xaxis.convertedCatToNumeric&&!t.dataFormatXNumeric){for(var s=[],r=t.minX-1;r<t.maxX;r++)s.push(r+1);t.xAxisScale={result:s,niceMin:s[0],niceMax:s[s.length-1]}}else t.xAxisScale=this.scales.setXScale(t.minX,t.maxX);else t.xAxisScale=this.scales.linearScale(1,a,a),t.noLabelsProvided&&t.labels.length>0&&(t.xAxisScale=this.scales.linearScale(1,t.labels.length,a-1),t.seriesX=t.labels.slice());i&&(t.labels=t.xAxisScale.result.slice())}return t.isBarHorizontal&&t.labels.length&&(t.xTickAmount=t.labels.length),this._handleSingleDataPoint(),this._getMinXDiff(),{minX:t.minX,maxX:t.maxX}}},{key:\"setZRange\",value:function(){var t=this.w.globals;if(t.isDataXYZ)for(var e=0;e<t.series.length;e++)if(void 0!==t.seriesZ[e])for(var i=0;i<t.seriesZ[e].length;i++)null!==t.seriesZ[e][i]&&x.isNumber(t.seriesZ[e][i])&&(t.maxZ=Math.max(t.maxZ,t.seriesZ[e][i]),t.minZ=Math.min(t.minZ,t.seriesZ[e][i]))}},{key:\"_handleSingleDataPoint\",value:function(){var t=this.w.globals,e=this.w.config;if(t.minX===t.maxX){var i=new I(this.ctx);if(\"datetime\"===e.xaxis.type){var a=i.getDate(t.minX);e.xaxis.labels.datetimeUTC?a.setUTCDate(a.getUTCDate()-2):a.setDate(a.getDate()-2),t.minX=new Date(a).getTime();var s=i.getDate(t.maxX);e.xaxis.labels.datetimeUTC?s.setUTCDate(s.getUTCDate()+2):s.setDate(s.getDate()+2),t.maxX=new Date(s).getTime()}else(\"numeric\"===e.xaxis.type||\"category\"===e.xaxis.type&&!t.noLabelsProvided)&&(t.minX=t.minX-2,t.initialMinX=t.minX,t.maxX=t.maxX+2,t.initialMaxX=t.maxX)}}},{key:\"_getMinXDiff\",value:function(){var t=this.w.globals;t.isXNumeric&&t.seriesX.forEach((function(e,i){1===e.length&&e.push(t.seriesX[t.maxValsInArrayIndex][t.seriesX[t.maxValsInArrayIndex].length-1]);var a=e.slice();a.sort((function(t,e){return t-e})),a.forEach((function(e,i){if(i>0){var s=e-a[i-1];s>0&&(t.minXDiff=Math.min(s,t.minXDiff))}})),1!==t.dataPoints&&t.minXDiff!==Number.MAX_VALUE||(t.minXDiff=.5)}))}},{key:\"_setStackedMinMax\",value:function(){var t=this,e=this.w.globals;if(e.series.length){var i=e.seriesGroups;i.length||(i=[this.w.config.series.map((function(t){return t.name}))]);var a={},s={};i.forEach((function(i){a[i]=[],s[i]=[],t.w.config.series.map((function(t,e){return i.indexOf(t.name)>-1?e:null})).filter((function(t){return null!==t})).forEach((function(t){for(var r=0;r<e.series[e.maxValsInArrayIndex].length;r++)void 0===a[i][r]&&(a[i][r]=0,s[i][r]=0),null!==e.series[t][r]&&x.isNumber(e.series[t][r])&&(e.series[t][r]>0?a[i][r]+=parseFloat(e.series[t][r])+1e-4:s[i][r]+=parseFloat(e.series[t][r]))}))})),Object.entries(a).forEach((function(t){var i=g(t,1)[0];a[i].forEach((function(t,r){e.maxY=Math.max(e.maxY,a[i][r]),e.minY=Math.min(e.minY,s[i][r])}))}))}}}]),t}(),q=function(){function t(e,i){a(this,t),this.ctx=e,this.elgrid=i,this.w=e.w;var s=this.w;this.xaxisFontSize=s.config.xaxis.labels.style.fontSize,this.axisFontFamily=s.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=s.config.xaxis.labels.style.colors,this.isCategoryBarHorizontal=\"bar\"===s.config.chart.type&&s.config.plotOptions.bar.horizontal,this.xAxisoffX=0,\"bottom\"===s.config.xaxis.position&&(this.xAxisoffX=s.globals.gridHeight),this.drawnLabels=[],this.axesUtils=new B(e)}return r(t,[{key:\"drawYaxis\",value:function(t){var e=this,i=this.w,a=new m(this.ctx),s=i.config.yaxis[t].labels.style,r=s.fontSize,o=s.fontFamily,n=s.fontWeight,l=a.group({class:\"apexcharts-yaxis\",rel:t,transform:\"translate(\"+i.globals.translateYAxisX[t]+\", 0)\"});if(this.axesUtils.isYAxisHidden(t))return l;var h=a.group({class:\"apexcharts-yaxis-texts-g\"});l.add(h);var c=i.globals.yAxisScale[t].result.length-1,d=i.globals.gridHeight/c,g=i.globals.translateY,u=i.globals.yLabelFormatters[t],p=i.globals.yAxisScale[t].result.slice();p=this.axesUtils.checkForReversedLabels(t,p);var f=\"\";if(i.config.yaxis[t].labels.show)for(var x=function(l){var x=p[l];x=u(x,l,i);var b=i.config.yaxis[t].labels.padding;i.config.yaxis[t].opposite&&0!==i.config.yaxis.length&&(b*=-1);var v=\"end\";i.config.yaxis[t].opposite&&(v=\"start\"),\"left\"===i.config.yaxis[t].labels.align?v=\"start\":\"center\"===i.config.yaxis[t].labels.align?v=\"middle\":\"right\"===i.config.yaxis[t].labels.align&&(v=\"end\");var m=e.axesUtils.getYAxisForeColor(s.colors,t),y=a.drawText({x:b,y:g+c/10+i.config.yaxis[t].labels.offsetY+1,text:x,textAnchor:v,fontSize:r,fontFamily:o,fontWeight:n,maxWidth:i.config.yaxis[t].labels.maxWidth,foreColor:Array.isArray(m)?m[l]:m,isPlainText:!1,cssClass:\"apexcharts-yaxis-label \"+s.cssClass});l===c&&(f=y),h.add(y);var w=document.createElementNS(i.globals.SVGNS,\"title\");if(w.textContent=Array.isArray(x)?x.join(\" \"):x,y.node.appendChild(w),0!==i.config.yaxis[t].labels.rotate){var k=a.rotateAroundCenter(f.node),A=a.rotateAroundCenter(y.node);y.node.setAttribute(\"transform\",\"rotate(\".concat(i.config.yaxis[t].labels.rotate,\" \").concat(k.x,\" \").concat(A.y,\")\"))}g+=d},b=c;b>=0;b--)x(b);if(void 0!==i.config.yaxis[t].title.text){var v=a.group({class:\"apexcharts-yaxis-title\"}),y=0;i.config.yaxis[t].opposite&&(y=i.globals.translateYAxisX[t]);var w=a.drawText({x:y,y:i.globals.gridHeight/2+i.globals.translateY+i.config.yaxis[t].title.offsetY,text:i.config.yaxis[t].title.text,textAnchor:\"end\",foreColor:i.config.yaxis[t].title.style.color,fontSize:i.config.yaxis[t].title.style.fontSize,fontWeight:i.config.yaxis[t].title.style.fontWeight,fontFamily:i.config.yaxis[t].title.style.fontFamily,cssClass:\"apexcharts-yaxis-title-text \"+i.config.yaxis[t].title.style.cssClass});v.add(w),l.add(v)}var k=i.config.yaxis[t].axisBorder,A=31+k.offsetX;if(i.config.yaxis[t].opposite&&(A=-31-k.offsetX),k.show){var S=a.drawLine(A,i.globals.translateY+k.offsetY-2,A,i.globals.gridHeight+i.globals.translateY+k.offsetY+2,k.color,0,k.width);l.add(S)}return i.config.yaxis[t].axisTicks.show&&this.axesUtils.drawYAxisTicks(A,c,k,i.config.yaxis[t].axisTicks,t,d,l),l}},{key:\"drawYaxisInversed\",value:function(t){var e=this.w,i=new m(this.ctx),a=i.group({class:\"apexcharts-xaxis apexcharts-yaxis-inversed\"}),s=i.group({class:\"apexcharts-xaxis-texts-g\",transform:\"translate(\".concat(e.globals.translateXAxisX,\", \").concat(e.globals.translateXAxisY,\")\")});a.add(s);var r=e.globals.yAxisScale[t].result.length-1,o=e.globals.gridWidth/r+.1,n=o+e.config.xaxis.labels.offsetX,l=e.globals.xLabelFormatter,h=e.globals.yAxisScale[t].result.slice(),c=e.globals.timescaleLabels;c.length>0&&(this.xaxisLabels=c.slice(),r=(h=c.slice()).length),h=this.axesUtils.checkForReversedLabels(t,h);var d=c.length;if(e.config.xaxis.labels.show)for(var g=d?0:r;d?g<d:g>=0;d?g++:g--){var u=h[g];u=l(u,g,e);var p=e.globals.gridWidth+e.globals.padHorizontal-(n-o+e.config.xaxis.labels.offsetX);if(c.length){var f=this.axesUtils.getLabel(h,c,p,g,this.drawnLabels,this.xaxisFontSize);p=f.x,u=f.text,this.drawnLabels.push(f.text),0===g&&e.globals.skipFirstTimelinelabel&&(u=\"\"),g===h.length-1&&e.globals.skipLastTimelinelabel&&(u=\"\")}var x=i.drawText({x:p,y:this.xAxisoffX+e.config.xaxis.labels.offsetY+30-(\"top\"===e.config.xaxis.position?e.globals.xAxisHeight+e.config.xaxis.axisTicks.height-2:0),text:u,textAnchor:\"middle\",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[t]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,fontWeight:e.config.xaxis.labels.style.fontWeight,isPlainText:!1,cssClass:\"apexcharts-xaxis-label \"+e.config.xaxis.labels.style.cssClass});s.add(x),x.tspan(u);var b=document.createElementNS(e.globals.SVGNS,\"title\");b.textContent=u,x.node.appendChild(b),n+=o}return this.inversedYAxisTitleText(a),this.inversedYAxisBorder(a),a}},{key:\"inversedYAxisBorder\",value:function(t){var e=this.w,i=new m(this.ctx),a=e.config.xaxis.axisBorder;if(a.show){var s=0;\"bar\"===e.config.chart.type&&e.globals.isXNumeric&&(s-=15);var r=i.drawLine(e.globals.padHorizontal+s+a.offsetX,this.xAxisoffX,e.globals.gridWidth,this.xAxisoffX,a.color,0,a.height);this.elgrid&&this.elgrid.elGridBorders&&e.config.grid.show?this.elgrid.elGridBorders.add(r):t.add(r)}}},{key:\"inversedYAxisTitleText\",value:function(t){var e=this.w,i=new m(this.ctx);if(void 0!==e.config.xaxis.title.text){var a=i.group({class:\"apexcharts-xaxis-title apexcharts-yaxis-title-inversed\"}),s=i.drawText({x:e.globals.gridWidth/2+e.config.xaxis.title.offsetX,y:this.xAxisoffX+parseFloat(this.xaxisFontSize)+parseFloat(e.config.xaxis.title.style.fontSize)+e.config.xaxis.title.offsetY+20,text:e.config.xaxis.title.text,textAnchor:\"middle\",fontSize:e.config.xaxis.title.style.fontSize,fontFamily:e.config.xaxis.title.style.fontFamily,fontWeight:e.config.xaxis.title.style.fontWeight,foreColor:e.config.xaxis.title.style.color,cssClass:\"apexcharts-xaxis-title-text \"+e.config.xaxis.title.style.cssClass});a.add(s),t.add(a)}}},{key:\"yAxisTitleRotate\",value:function(t,e){var i=this.w,a=new m(this.ctx),s={width:0,height:0},r={width:0,height:0},o=i.globals.dom.baseEl.querySelector(\" .apexcharts-yaxis[rel='\".concat(t,\"'] .apexcharts-yaxis-texts-g\"));null!==o&&(s=o.getBoundingClientRect());var n=i.globals.dom.baseEl.querySelector(\".apexcharts-yaxis[rel='\".concat(t,\"'] .apexcharts-yaxis-title text\"));if(null!==n&&(r=n.getBoundingClientRect()),null!==n){var l=this.xPaddingForYAxisTitle(t,s,r,e);n.setAttribute(\"x\",l.xPos-(e?10:0))}if(null!==n){var h=a.rotateAroundCenter(n);n.setAttribute(\"transform\",\"rotate(\".concat(e?-1*i.config.yaxis[t].title.rotate:i.config.yaxis[t].title.rotate,\" \").concat(h.x,\" \").concat(h.y,\")\"))}}},{key:\"xPaddingForYAxisTitle\",value:function(t,e,i,a){var s=this.w,r=0,o=0,n=10;return void 0===s.config.yaxis[t].title.text||t<0?{xPos:o,padd:0}:(a?(o=e.width+s.config.yaxis[t].title.offsetX+i.width/2+n/2,0===(r+=1)&&(o-=n/2)):(o=-1*e.width+s.config.yaxis[t].title.offsetX+n/2+i.width/2,s.globals.isBarHorizontal&&(n=25,o=-1*e.width-s.config.yaxis[t].title.offsetX-n)),{xPos:o,padd:n})}},{key:\"setYAxisXPosition\",value:function(t,e){var i=this.w,a=0,s=0,r=18,o=1;i.config.yaxis.length>1&&(this.multipleYs=!0),i.config.yaxis.map((function(n,l){var h=i.globals.ignoreYAxisIndexes.indexOf(l)>-1||!n.show||n.floating||0===t[l].width,c=t[l].width+e[l].width;n.opposite?i.globals.isBarHorizontal?(s=i.globals.gridWidth+i.globals.translateX-1,i.globals.translateYAxisX[l]=s-n.labels.offsetX):(s=i.globals.gridWidth+i.globals.translateX+o,h||(o=o+c+20),i.globals.translateYAxisX[l]=s-n.labels.offsetX+20):(a=i.globals.translateX-r,h||(r=r+c+20),i.globals.translateYAxisX[l]=a+n.labels.offsetX)}))}},{key:\"setYAxisTextAlignments\",value:function(){var t=this.w,e=t.globals.dom.baseEl.getElementsByClassName(\"apexcharts-yaxis\");(e=x.listToArray(e)).forEach((function(e,i){var a=t.config.yaxis[i];if(a&&!a.floating&&void 0!==a.labels.align){var s=t.globals.dom.baseEl.querySelector(\".apexcharts-yaxis[rel='\".concat(i,\"'] .apexcharts-yaxis-texts-g\")),r=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis[rel='\".concat(i,\"'] .apexcharts-yaxis-label\"));r=x.listToArray(r);var o=s.getBoundingClientRect();\"left\"===a.labels.align?(r.forEach((function(t,e){t.setAttribute(\"text-anchor\",\"start\")})),a.opposite||s.setAttribute(\"transform\",\"translate(-\".concat(o.width,\", 0)\"))):\"center\"===a.labels.align?(r.forEach((function(t,e){t.setAttribute(\"text-anchor\",\"middle\")})),s.setAttribute(\"transform\",\"translate(\".concat(o.width/2*(a.opposite?1:-1),\", 0)\"))):\"right\"===a.labels.align&&(r.forEach((function(t,e){t.setAttribute(\"text-anchor\",\"end\")})),a.opposite&&s.setAttribute(\"transform\",\"translate(\".concat(o.width,\", 0)\")))}}))}}]),t}(),Z=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.documentEvent=x.bind(this.documentEvent,this)}return r(t,[{key:\"addEventListener\",value:function(t,e){var i=this.w;i.globals.events.hasOwnProperty(t)?i.globals.events[t].push(e):i.globals.events[t]=[e]}},{key:\"removeEventListener\",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){var a=i.globals.events[t].indexOf(e);-1!==a&&i.globals.events[t].splice(a,1)}}},{key:\"fireEvent\",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){e&&e.length||(e=[]);for(var a=i.globals.events[t],s=a.length,r=0;r<s;r++)a[r].apply(null,e)}}},{key:\"setupEventHandlers\",value:function(){var t=this,e=this.w,i=this.ctx,a=e.globals.dom.baseEl.querySelector(e.globals.chartClass);this.ctx.eventList.forEach((function(t){a.addEventListener(t,(function(t){var a=Object.assign({},e,{seriesIndex:e.globals.capturedSeriesIndex,dataPointIndex:e.globals.capturedDataPointIndex});\"mousemove\"===t.type||\"touchmove\"===t.type?\"function\"==typeof e.config.chart.events.mouseMove&&e.config.chart.events.mouseMove(t,i,a):\"mouseleave\"===t.type||\"touchleave\"===t.type?\"function\"==typeof e.config.chart.events.mouseLeave&&e.config.chart.events.mouseLeave(t,i,a):(\"mouseup\"===t.type&&1===t.which||\"touchend\"===t.type)&&(\"function\"==typeof e.config.chart.events.click&&e.config.chart.events.click(t,i,a),i.ctx.events.fireEvent(\"click\",[t,i,a]))}),{capture:!1,passive:!0})})),this.ctx.eventList.forEach((function(i){e.globals.dom.baseEl.addEventListener(i,t.documentEvent,{passive:!0})})),this.ctx.core.setupBrushHandler()}},{key:\"documentEvent\",value:function(t){var e=this.w,i=t.target.className;if(\"click\"===t.type){var a=e.globals.dom.baseEl.querySelector(\".apexcharts-menu\");a&&a.classList.contains(\"apexcharts-menu-open\")&&\"apexcharts-menu-icon\"!==i&&a.classList.remove(\"apexcharts-menu-open\")}e.globals.clientX=\"touchmove\"===t.type?t.touches[0].clientX:t.clientX,e.globals.clientY=\"touchmove\"===t.type?t.touches[0].clientY:t.clientY}}]),t}(),$=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"setCurrentLocaleValues\",value:function(t){var e=this.w.config.chart.locales;window.Apex.chart&&window.Apex.chart.locales&&window.Apex.chart.locales.length>0&&(e=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=e.filter((function(e){return e.name===t}))[0];if(!i)throw new Error(\"Wrong locale name provided. Please make sure you set the correct locale name in options\");var a=x.extend(C,i);this.w.globals.locale=a.options}}]),t}(),J=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"drawAxis\",value:function(t,e){var i,a,s=this,r=this.w.globals,o=this.w.config,n=new V(this.ctx,e),l=new q(this.ctx,e);r.axisCharts&&\"radar\"!==t&&(r.isBarHorizontal?(a=l.drawYaxisInversed(0),i=n.drawXaxisInversed(0),r.dom.elGraphical.add(i),r.dom.elGraphical.add(a)):(i=n.drawXaxis(),r.dom.elGraphical.add(i),o.yaxis.map((function(t,e){if(-1===r.ignoreYAxisIndexes.indexOf(e)&&(a=l.drawYaxis(e),r.dom.Paper.add(a),\"back\"===s.w.config.grid.position)){var i=r.dom.Paper.children()[1];i.remove(),r.dom.Paper.add(i)}}))))}}]),t}(),Q=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"drawXCrosshairs\",value:function(){var t=this.w,e=new m(this.ctx),i=new v(this.ctx),a=t.config.xaxis.crosshairs.fill.gradient,s=t.config.xaxis.crosshairs.dropShadow,r=t.config.xaxis.crosshairs.fill.type,o=a.colorFrom,n=a.colorTo,l=a.opacityFrom,h=a.opacityTo,c=a.stops,d=s.enabled,g=s.left,u=s.top,p=s.blur,f=s.color,b=s.opacity,y=t.config.xaxis.crosshairs.fill.color;if(t.config.xaxis.crosshairs.show){\"gradient\"===r&&(y=e.drawGradient(\"vertical\",o,n,l,h,null,c,null));var w=e.drawRect();1===t.config.xaxis.crosshairs.width&&(w=e.drawLine());var k=t.globals.gridHeight;(!x.isNumber(k)||k<0)&&(k=0);var A=t.config.xaxis.crosshairs.width;(!x.isNumber(A)||A<0)&&(A=0),w.attr({class:\"apexcharts-xcrosshairs\",x:0,y:0,y2:k,width:A,height:k,fill:y,filter:\"none\",\"fill-opacity\":t.config.xaxis.crosshairs.opacity,stroke:t.config.xaxis.crosshairs.stroke.color,\"stroke-width\":t.config.xaxis.crosshairs.stroke.width,\"stroke-dasharray\":t.config.xaxis.crosshairs.stroke.dashArray}),d&&(w=i.dropShadow(w,{left:g,top:u,blur:p,color:f,opacity:b})),t.globals.dom.elGraphical.add(w)}}},{key:\"drawYCrosshairs\",value:function(){var t=this.w,e=new m(this.ctx),i=t.config.yaxis[0].crosshairs,a=t.globals.barPadForNumericAxis;if(t.config.yaxis[0].crosshairs.show){var s=e.drawLine(-a,0,t.globals.gridWidth+a,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);s.attr({class:\"apexcharts-ycrosshairs\"}),t.globals.dom.elGraphical.add(s)}var r=e.drawLine(-a,0,t.globals.gridWidth+a,0,i.stroke.color,0,0);r.attr({class:\"apexcharts-ycrosshairs-hidden\"}),t.globals.dom.elGraphical.add(r)}}]),t}(),K=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"checkResponsiveConfig\",value:function(t){var e=this,i=this.w,a=i.config;if(0!==a.responsive.length){var s=a.responsive.slice();s.sort((function(t,e){return t.breakpoint>e.breakpoint?1:e.breakpoint>t.breakpoint?-1:0})).reverse();var r=new E({}),o=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=s[0].breakpoint,o=window.innerWidth>0?window.innerWidth:screen.width;if(o>a){var n=y.extendArrayProps(r,i.globals.initialConfig,i);t=x.extend(n,t),t=x.extend(i.config,t),e.overrideResponsiveOptions(t)}else for(var l=0;l<s.length;l++)o<s[l].breakpoint&&(t=y.extendArrayProps(r,s[l].options,i),t=x.extend(i.config,t),e.overrideResponsiveOptions(t))};if(t){var n=y.extendArrayProps(r,t,i);n=x.extend(i.config,n),o(n=x.extend(n,t))}else o({})}}},{key:\"overrideResponsiveOptions\",value:function(t){var e=new E(t).init({responsiveOverride:!0});this.w.config=e}}]),t}(),tt=function(){function t(e){a(this,t),this.ctx=e,this.colors=[],this.w=e.w;var i=this.w;this.isColorFn=!1,this.isHeatmapDistributed=\"treemap\"===i.config.chart.type&&i.config.plotOptions.treemap.distributed||\"heatmap\"===i.config.chart.type&&i.config.plotOptions.heatmap.distributed,this.isBarDistributed=i.config.plotOptions.bar.distributed&&(\"bar\"===i.config.chart.type||\"rangeBar\"===i.config.chart.type)}return r(t,[{key:\"init\",value:function(){this.setDefaultColors()}},{key:\"setDefaultColors\",value:function(){var t,e=this,i=this.w,a=new x;if(i.globals.dom.elWrap.classList.add(\"apexcharts-theme-\".concat(i.config.theme.mode)),void 0===i.config.colors||0===(null===(t=i.config.colors)||void 0===t?void 0:t.length)?i.globals.colors=this.predefined():(i.globals.colors=i.config.colors,Array.isArray(i.config.colors)&&i.config.colors.length>0&&\"function\"==typeof i.config.colors[0]&&(i.globals.colors=i.config.series.map((function(t,a){var s=i.config.colors[a];return s||(s=i.config.colors[0]),\"function\"==typeof s?(e.isColorFn=!0,s({value:i.globals.axisCharts?i.globals.series[a][0]?i.globals.series[a][0]:0:i.globals.series[a],seriesIndex:a,dataPointIndex:a,w:i})):s})))),i.globals.seriesColors.map((function(t,e){t&&(i.globals.colors[e]=t)})),i.config.theme.monochrome.enabled){var s=[],r=i.globals.series.length;(this.isBarDistributed||this.isHeatmapDistributed)&&(r=i.globals.series[0].length*i.globals.series.length);for(var o=i.config.theme.monochrome.color,n=1/(r/i.config.theme.monochrome.shadeIntensity),l=i.config.theme.monochrome.shadeTo,h=0,c=0;c<r;c++){var d=void 0;\"dark\"===l?(d=a.shadeColor(-1*h,o),h+=n):(d=a.shadeColor(h,o),h+=n),s.push(d)}i.globals.colors=s.slice()}var g=i.globals.colors.slice();this.pushExtraColors(i.globals.colors);[\"fill\",\"stroke\"].forEach((function(t){void 0===i.config[t].colors?i.globals[t].colors=e.isColorFn?i.config.colors:g:i.globals[t].colors=i.config[t].colors.slice(),e.pushExtraColors(i.globals[t].colors)})),void 0===i.config.dataLabels.style.colors?i.globals.dataLabels.style.colors=g:i.globals.dataLabels.style.colors=i.config.dataLabels.style.colors.slice(),this.pushExtraColors(i.globals.dataLabels.style.colors,50),void 0===i.config.plotOptions.radar.polygons.fill.colors?i.globals.radarPolygons.fill.colors=[\"dark\"===i.config.theme.mode?\"#424242\":\"none\"]:i.globals.radarPolygons.fill.colors=i.config.plotOptions.radar.polygons.fill.colors.slice(),this.pushExtraColors(i.globals.radarPolygons.fill.colors,20),void 0===i.config.markers.colors?i.globals.markers.colors=g:i.globals.markers.colors=i.config.markers.colors.slice(),this.pushExtraColors(i.globals.markers.colors)}},{key:\"pushExtraColors\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,s=e||a.globals.series.length;if(null===i&&(i=this.isBarDistributed||this.isHeatmapDistributed||\"heatmap\"===a.config.chart.type&&a.config.plotOptions.heatmap.colorScale.inverse),i&&a.globals.series.length&&(s=a.globals.series[a.globals.maxValsInArrayIndex].length*a.globals.series.length),t.length<s)for(var r=s-t.length,o=0;o<r;o++)t.push(t[o])}},{key:\"updateThemeOptions\",value:function(t){t.chart=t.chart||{},t.tooltip=t.tooltip||{};var e=t.theme.mode||\"light\",i=t.theme.palette?t.theme.palette:\"dark\"===e?\"palette4\":\"palette1\",a=t.chart.foreColor?t.chart.foreColor:\"dark\"===e?\"#f6f7f8\":\"#373d3f\";return t.tooltip.theme=e,t.chart.foreColor=a,t.theme.palette=i,t}},{key:\"predefined\",value:function(){switch(this.w.config.theme.palette){case\"palette1\":default:this.colors=[\"#008FFB\",\"#00E396\",\"#FEB019\",\"#FF4560\",\"#775DD0\"];break;case\"palette2\":this.colors=[\"#3f51b5\",\"#03a9f4\",\"#4caf50\",\"#f9ce1d\",\"#FF9800\"];break;case\"palette3\":this.colors=[\"#33b2df\",\"#546E7A\",\"#d4526e\",\"#13d8aa\",\"#A5978B\"];break;case\"palette4\":this.colors=[\"#4ecdc4\",\"#c7f464\",\"#81D4FA\",\"#fd6a6a\",\"#546E7A\"];break;case\"palette5\":this.colors=[\"#2b908f\",\"#f9a3a4\",\"#90ee7e\",\"#fa4443\",\"#69d2e7\"];break;case\"palette6\":this.colors=[\"#449DD1\",\"#F86624\",\"#EA3546\",\"#662E9B\",\"#C5D86D\"];break;case\"palette7\":this.colors=[\"#D7263D\",\"#1B998B\",\"#2E294E\",\"#F46036\",\"#E2C044\"];break;case\"palette8\":this.colors=[\"#662E9B\",\"#F86624\",\"#F9C80E\",\"#EA3546\",\"#43BCCD\"];break;case\"palette9\":this.colors=[\"#5C4742\",\"#A5978B\",\"#8D5B4C\",\"#5A2A27\",\"#C4BBAF\"];break;case\"palette10\":this.colors=[\"#A300D6\",\"#7D02EB\",\"#5653FE\",\"#2983FF\",\"#00B1F2\"]}return this.colors}}]),t}(),et=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"draw\",value:function(){this.drawTitleSubtitle(\"title\"),this.drawTitleSubtitle(\"subtitle\")}},{key:\"drawTitleSubtitle\",value:function(t){var e=this.w,i=\"title\"===t?e.config.title:e.config.subtitle,a=e.globals.svgWidth/2,s=i.offsetY,r=\"middle\";if(\"left\"===i.align?(a=10,r=\"start\"):\"right\"===i.align&&(a=e.globals.svgWidth-10,r=\"end\"),a+=i.offsetX,s=s+parseInt(i.style.fontSize,10)+i.margin/2,void 0!==i.text){var o=new m(this.ctx).drawText({x:a,y:s,text:i.text,textAnchor:r,fontSize:i.style.fontSize,fontFamily:i.style.fontFamily,fontWeight:i.style.fontWeight,foreColor:i.style.color,opacity:1});o.node.setAttribute(\"class\",\"apexcharts-\".concat(t,\"-text\")),e.globals.dom.Paper.add(o)}}}]),t}(),it=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\"getTitleSubtitleCoords\",value:function(t){var e=this.w,i=0,a=0,s=\"title\"===t?e.config.title.floating:e.config.subtitle.floating,r=e.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(t,\"-text\"));if(null!==r&&!s){var o=r.getBoundingClientRect();i=o.width,a=e.globals.axisCharts?o.height+5:o.height}return{width:i,height:a}}},{key:\"getLegendsRect\",value:function(){var t=this.w,e=t.globals.dom.elLegendWrap;t.config.legend.height||\"top\"!==t.config.legend.position&&\"bottom\"!==t.config.legend.position||(e.style.maxHeight=t.globals.svgHeight/2+\"px\");var i=Object.assign({},x.getBoundingClientRect(e));return null!==e&&!t.config.legend.floating&&t.config.legend.show?this.dCtx.lgRect={x:i.x,y:i.y,height:i.height,width:0===i.height?0:i.width}:this.dCtx.lgRect={x:0,y:0,height:0,width:0},\"left\"!==t.config.legend.position&&\"right\"!==t.config.legend.position||1.5*this.dCtx.lgRect.width>t.globals.svgWidth&&(this.dCtx.lgRect.width=t.globals.svgWidth/1.5),this.dCtx.lgRect}},{key:\"getLargestStringFromMultiArr\",value:function(t,e){var i=t;if(this.w.globals.isMultiLineX){var a=e.map((function(t,e){return Array.isArray(t)?t.length:1})),s=Math.max.apply(Math,u(a));i=e[a.indexOf(s)]}return i}}]),t}(),at=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\"getxAxisLabelsCoords\",value:function(){var t,e=this.w,i=e.globals.labels.slice();if(e.config.xaxis.convertedCatToNumeric&&0===i.length&&(i=e.globals.categoryLabels),e.globals.timescaleLabels.length>0){var a=this.getxAxisTimeScaleLabelsCoords();t={width:a.width,height:a.height},e.globals.rotateXLabels=!1}else{this.dCtx.lgWidthForSideLegends=\"left\"!==e.config.legend.position&&\"right\"!==e.config.legend.position||e.config.legend.floating?0:this.dCtx.lgRect.width;var s=e.globals.xLabelFormatter,r=x.getLargestStringFromArr(i),o=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,i);e.globals.isBarHorizontal&&(o=r=e.globals.yAxisScale[0].result.reduce((function(t,e){return t.length>e.length?t:e}),0));var n=new T(this.dCtx.ctx),l=r;r=n.xLabelFormat(s,r,l,{i:void 0,dateFormatter:new I(this.dCtx.ctx).formatDate,w:e}),o=n.xLabelFormat(s,o,l,{i:void 0,dateFormatter:new I(this.dCtx.ctx).formatDate,w:e}),(e.config.xaxis.convertedCatToNumeric&&void 0===r||\"\"===String(r).trim())&&(o=r=\"1\");var h=new m(this.dCtx.ctx),c=h.getTextRects(r,e.config.xaxis.labels.style.fontSize),d=c;if(r!==o&&(d=h.getTextRects(o,e.config.xaxis.labels.style.fontSize)),(t={width:c.width>=d.width?c.width:d.width,height:c.height>=d.height?c.height:d.height}).width*i.length>e.globals.svgWidth-this.dCtx.lgWidthForSideLegends-this.dCtx.yAxisWidth-this.dCtx.gridPad.left-this.dCtx.gridPad.right&&0!==e.config.xaxis.labels.rotate||e.config.xaxis.labels.rotateAlways){if(!e.globals.isBarHorizontal){e.globals.rotateXLabels=!0;var g=function(t){return h.getTextRects(t,e.config.xaxis.labels.style.fontSize,e.config.xaxis.labels.style.fontFamily,\"rotate(\".concat(e.config.xaxis.labels.rotate,\" 0 0)\"),!1)};c=g(r),r!==o&&(d=g(o)),t.height=(c.height>d.height?c.height:d.height)/1.5,t.width=c.width>d.width?c.width:d.width}}else e.globals.rotateXLabels=!1}return e.config.xaxis.labels.show||(t={width:0,height:0}),{width:t.width,height:t.height}}},{key:\"getxAxisGroupLabelsCoords\",value:function(){var t,e=this.w;if(!e.globals.hasXaxisGroups)return{width:0,height:0};var i,a=(null===(t=e.config.xaxis.group.style)||void 0===t?void 0:t.fontSize)||e.config.xaxis.labels.style.fontSize,s=e.globals.groups.map((function(t){return t.title})),r=x.getLargestStringFromArr(s),o=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,s),n=new m(this.dCtx.ctx),l=n.getTextRects(r,a),h=l;return r!==o&&(h=n.getTextRects(o,a)),i={width:l.width>=h.width?l.width:h.width,height:l.height>=h.height?l.height:h.height},e.config.xaxis.labels.show||(i={width:0,height:0}),{width:i.width,height:i.height}}},{key:\"getxAxisTitleCoords\",value:function(){var t=this.w,e=0,i=0;if(void 0!==t.config.xaxis.title.text){var a=new m(this.dCtx.ctx).getTextRects(t.config.xaxis.title.text,t.config.xaxis.title.style.fontSize);e=a.width,i=a.height}return{width:e,height:i}}},{key:\"getxAxisTimeScaleLabelsCoords\",value:function(){var t,e=this.w;this.dCtx.timescaleLabels=e.globals.timescaleLabels.slice();var i=this.dCtx.timescaleLabels.map((function(t){return t.value})),a=i.reduce((function(t,e){return void 0===t?(console.error(\"You have possibly supplied invalid Date format. Please supply a valid JavaScript Date\"),0):t.length>e.length?t:e}),0);return 1.05*(t=new m(this.dCtx.ctx).getTextRects(a,e.config.xaxis.labels.style.fontSize)).width*i.length>e.globals.gridWidth&&0!==e.config.xaxis.labels.rotate&&(e.globals.overlappingXLabels=!0),t}},{key:\"additionalPaddingXLabels\",value:function(t){var e=this,i=this.w,a=i.globals,s=i.config,r=s.xaxis.type,o=t.width;a.skipLastTimelinelabel=!1,a.skipFirstTimelinelabel=!1;var n=i.config.yaxis[0].opposite&&i.globals.isBarHorizontal,l=function(t,n){s.yaxis.length>1&&function(t){return-1!==a.collapsedSeriesIndices.indexOf(t)}(n)||function(t){if(e.dCtx.timescaleLabels&&e.dCtx.timescaleLabels.length){var n=e.dCtx.timescaleLabels[0],l=e.dCtx.timescaleLabels[e.dCtx.timescaleLabels.length-1].position+o/1.75-e.dCtx.yAxisWidthRight,h=n.position-o/1.75+e.dCtx.yAxisWidthLeft,c=\"right\"===i.config.legend.position&&e.dCtx.lgRect.width>0?e.dCtx.lgRect.width:0;l>a.svgWidth-a.translateX-c&&(a.skipLastTimelinelabel=!0),h<-(t.show&&!t.floating||\"bar\"!==s.chart.type&&\"candlestick\"!==s.chart.type&&\"rangeBar\"!==s.chart.type&&\"boxPlot\"!==s.chart.type?10:o/1.75)&&(a.skipFirstTimelinelabel=!0)}else\"datetime\"===r?e.dCtx.gridPad.right<o&&!a.rotateXLabels&&(a.skipLastTimelinelabel=!0):\"datetime\"!==r&&e.dCtx.gridPad.right<o/2-e.dCtx.yAxisWidthRight&&!a.rotateXLabels&&!i.config.xaxis.labels.trim&&(\"between\"!==i.config.xaxis.tickPlacement||i.globals.isBarHorizontal)&&(e.dCtx.xPadRight=o/2+1)}(t)};s.yaxis.forEach((function(t,i){n?(e.dCtx.gridPad.left<o&&(e.dCtx.xPadLeft=o/2+1),e.dCtx.xPadRight=o/2+1):l(t,i)}))}}]),t}(),st=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\"getyAxisLabelsCoords\",value:function(){var t=this,e=this.w,i=[],a=10,s=new B(this.dCtx.ctx);return e.config.yaxis.map((function(r,o){var n=e.globals.yAxisScale[o],l=0;if(!s.isYAxisHidden(o)&&r.labels.show&&void 0!==r.labels.minWidth&&(l=r.labels.minWidth),!s.isYAxisHidden(o)&&r.labels.show&&n.result.length){var h=e.globals.yLabelFormatters[o],c=n.niceMin===Number.MIN_VALUE?0:n.niceMin,d=String(c).length>String(n.niceMax).length?c:n.niceMax,g=h(d,{seriesIndex:o,dataPointIndex:-1,w:e}),u=g;if(void 0!==g&&0!==g.length||(g=d),e.globals.isBarHorizontal){a=0;var p=e.globals.labels.slice();g=h(g=x.getLargestStringFromArr(p),{seriesIndex:o,dataPointIndex:-1,w:e}),u=t.dCtx.dimHelpers.getLargestStringFromMultiArr(g,p)}var f=new m(t.dCtx.ctx),b=\"rotate(\".concat(r.labels.rotate,\" 0 0)\"),v=f.getTextRects(g,r.labels.style.fontSize,r.labels.style.fontFamily,b,!1),y=v;g!==u&&(y=f.getTextRects(u,r.labels.style.fontSize,r.labels.style.fontFamily,b,!1)),i.push({width:(l>y.width||l>v.width?l:y.width>v.width?y.width:v.width)+a,height:y.height>v.height?y.height:v.height})}else i.push({width:0,height:0})})),i}},{key:\"getyAxisTitleCoords\",value:function(){var t=this,e=this.w,i=[];return e.config.yaxis.map((function(e,a){if(e.show&&void 0!==e.title.text){var s=new m(t.dCtx.ctx),r=\"rotate(\".concat(e.title.rotate,\" 0 0)\"),o=s.getTextRects(e.title.text,e.title.style.fontSize,e.title.style.fontFamily,r,!1);i.push({width:o.width,height:o.height})}else i.push({width:0,height:0})})),i}},{key:\"getTotalYAxisWidth\",value:function(){var t=this.w,e=0,i=0,a=0,s=t.globals.yAxisScale.length>1?10:0,r=new B(this.dCtx.ctx),o=function(o,n){var l=t.config.yaxis[n].floating,h=0;o.width>0&&!l?(h=o.width+s,function(e){return t.globals.ignoreYAxisIndexes.indexOf(e)>-1}(n)&&(h=h-o.width-s)):h=l||r.isYAxisHidden(n)?0:5,t.config.yaxis[n].opposite?a+=h:i+=h,e+=h};return t.globals.yLabelsCoords.map((function(t,e){o(t,e)})),t.globals.yTitleCoords.map((function(t,e){o(t,e)})),t.globals.isBarHorizontal&&!t.config.yaxis[0].floating&&(e=t.globals.yLabelsCoords[0].width+t.globals.yTitleCoords[0].width+15),this.dCtx.yAxisWidthLeft=i,this.dCtx.yAxisWidthRight=a,e}}]),t}(),rt=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\"gridPadForColumnsInNumericAxis\",value:function(t){var e=this.w;if(e.globals.noData||e.globals.allSeriesCollapsed)return 0;var i=function(t){return\"bar\"===t||\"rangeBar\"===t||\"candlestick\"===t||\"boxPlot\"===t},a=e.config.chart.type,s=0,r=i(a)?e.config.series.length:1;if(e.globals.comboBarCount>0&&(r=e.globals.comboBarCount),e.globals.collapsedSeries.forEach((function(t){i(t.type)&&(r-=1)})),e.config.chart.stacked&&(r=1),(i(a)||e.globals.comboBarCount>0)&&e.globals.isXNumeric&&!e.globals.isBarHorizontal&&r>0){var o,n,l=Math.abs(e.globals.initialMaxX-e.globals.initialMinX);l<=3&&(l=e.globals.dataPoints),o=l/t,e.globals.minXDiff&&e.globals.minXDiff/o>0&&(n=e.globals.minXDiff/o),n>t/2&&(n/=2),(s=n/r*parseInt(e.config.plotOptions.bar.columnWidth,10)/100)<1&&(s=1),s=s/(r>1?1:1.5)+5,e.globals.barPadForNumericAxis=s}return s}},{key:\"gridPadFortitleSubtitle\",value:function(){var t=this,e=this.w,i=e.globals,a=this.dCtx.isSparkline||!e.globals.axisCharts?0:10;[\"title\",\"subtitle\"].forEach((function(i){void 0!==e.config[i].text?a+=e.config[i].margin:a+=t.dCtx.isSparkline||!e.globals.axisCharts?0:5})),!e.config.legend.show||\"bottom\"!==e.config.legend.position||e.config.legend.floating||e.globals.axisCharts||(a+=10);var s=this.dCtx.dimHelpers.getTitleSubtitleCoords(\"title\"),r=this.dCtx.dimHelpers.getTitleSubtitleCoords(\"subtitle\");i.gridHeight=i.gridHeight-s.height-r.height-a,i.translateY=i.translateY+s.height+r.height+a}},{key:\"setGridXPosForDualYAxis\",value:function(t,e){var i=this.w,a=new B(this.dCtx.ctx);i.config.yaxis.map((function(s,r){-1!==i.globals.ignoreYAxisIndexes.indexOf(r)||s.floating||a.isYAxisHidden(r)||(s.opposite&&(i.globals.translateX=i.globals.translateX-(e[r].width+t[r].width)-parseInt(i.config.yaxis[r].labels.style.fontSize,10)/1.2-12),i.globals.translateX<2&&(i.globals.translateX=2))}))}}]),t}(),ot=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.lgRect={},this.yAxisWidth=0,this.yAxisWidthLeft=0,this.yAxisWidthRight=0,this.xAxisHeight=0,this.isSparkline=this.w.config.chart.sparkline.enabled,this.dimHelpers=new it(this),this.dimYAxis=new st(this),this.dimXAxis=new at(this),this.dimGrid=new rt(this),this.lgWidthForSideLegends=0,this.gridPad=this.w.config.grid.padding,this.xPadRight=0,this.xPadLeft=0}return r(t,[{key:\"plotCoords\",value:function(){var t=this,e=this.w,i=e.globals;this.lgRect=this.dimHelpers.getLegendsRect(),this.isSparkline&&(e.config.markers.discrete.length>0||e.config.markers.size>0)&&Object.entries(this.gridPad).forEach((function(e){var i=g(e,2),a=i[0],s=i[1];t.gridPad[a]=Math.max(s,t.w.globals.markers.largestSize/1.5)})),i.axisCharts?this.setDimensionsForAxisCharts():this.setDimensionsForNonAxisCharts(),this.dimGrid.gridPadFortitleSubtitle(),i.gridHeight=i.gridHeight-this.gridPad.top-this.gridPad.bottom,i.gridWidth=i.gridWidth-this.gridPad.left-this.gridPad.right-this.xPadRight-this.xPadLeft;var a=this.dimGrid.gridPadForColumnsInNumericAxis(i.gridWidth);i.gridWidth=i.gridWidth-2*a,i.translateX=i.translateX+this.gridPad.left+this.xPadLeft+(a>0?a+4:0),i.translateY=i.translateY+this.gridPad.top}},{key:\"setDimensionsForAxisCharts\",value:function(){var t=this,e=this.w,i=e.globals,a=this.dimYAxis.getyAxisLabelsCoords(),s=this.dimYAxis.getyAxisTitleCoords();e.globals.yLabelsCoords=[],e.globals.yTitleCoords=[],e.config.yaxis.map((function(t,i){e.globals.yLabelsCoords.push({width:a[i].width,index:i}),e.globals.yTitleCoords.push({width:s[i].width,index:i})})),this.yAxisWidth=this.dimYAxis.getTotalYAxisWidth();var r=this.dimXAxis.getxAxisLabelsCoords(),o=this.dimXAxis.getxAxisGroupLabelsCoords(),n=this.dimXAxis.getxAxisTitleCoords();this.conditionalChecksForAxisCoords(r,n,o),i.translateXAxisY=e.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=e.globals.rotateXLabels&&e.globals.isXNumeric&&e.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,e.globals.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(e.config.xaxis.labels.style.fontSize,10)/1.5*-1),i.translateXAxisY=i.translateXAxisY+e.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+e.config.xaxis.labels.offsetX;var l=this.yAxisWidth,h=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight-n.height,i.xAxisGroupLabelsHeight=i.xAxisLabelsHeight-r.height,i.xAxisLabelsWidth=this.xAxisWidth,i.xAxisHeight=this.xAxisHeight;var c=10;(\"radar\"===e.config.chart.type||this.isSparkline)&&(l=0,h=i.goldenPadding),this.isSparkline&&(this.lgRect={height:0,width:0}),(this.isSparkline||\"treemap\"===e.config.chart.type)&&(l=0,h=0,c=0),this.isSparkline||this.dimXAxis.additionalPaddingXLabels(r);var d=function(){i.translateX=l,i.gridHeight=i.svgHeight-t.lgRect.height-h-(t.isSparkline||\"treemap\"===e.config.chart.type?0:e.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-l};switch(\"top\"===e.config.xaxis.position&&(c=i.xAxisHeight-e.config.xaxis.axisTicks.height-5),e.config.legend.position){case\"bottom\":i.translateY=c,d();break;case\"top\":i.translateY=this.lgRect.height+c,d();break;case\"left\":i.translateY=c,i.translateX=this.lgRect.width+l,i.gridHeight=i.svgHeight-h-12,i.gridWidth=i.svgWidth-this.lgRect.width-l;break;case\"right\":i.translateY=c,i.translateX=l,i.gridHeight=i.svgHeight-h-12,i.gridWidth=i.svgWidth-this.lgRect.width-l-5;break;default:throw new Error(\"Legend position not supported\")}this.dimGrid.setGridXPosForDualYAxis(s,a),new q(this.ctx).setYAxisXPosition(a,s)}},{key:\"setDimensionsForNonAxisCharts\",value:function(){var t=this.w,e=t.globals,i=t.config,a=0;t.config.legend.show&&!t.config.legend.floating&&(a=20);var s=\"pie\"===i.chart.type||\"polarArea\"===i.chart.type||\"donut\"===i.chart.type?\"pie\":\"radialBar\",r=i.plotOptions[s].offsetY,o=i.plotOptions[s].offsetX;if(!i.legend.show||i.legend.floating)return e.gridHeight=e.svgHeight-i.grid.padding.left+i.grid.padding.right,e.gridWidth=e.gridHeight,e.translateY=r,void(e.translateX=o+(e.svgWidth-e.gridWidth)/2);switch(i.legend.position){case\"bottom\":e.gridHeight=e.svgHeight-this.lgRect.height-e.goldenPadding,e.gridWidth=e.svgWidth,e.translateY=r-10,e.translateX=o+(e.svgWidth-e.gridWidth)/2;break;case\"top\":e.gridHeight=e.svgHeight-this.lgRect.height-e.goldenPadding,e.gridWidth=e.svgWidth,e.translateY=this.lgRect.height+r+10,e.translateX=o+(e.svgWidth-e.gridWidth)/2;break;case\"left\":e.gridWidth=e.svgWidth-this.lgRect.width-a,e.gridHeight=\"auto\"!==i.chart.height?e.svgHeight:e.gridWidth,e.translateY=r,e.translateX=o+this.lgRect.width+a;break;case\"right\":e.gridWidth=e.svgWidth-this.lgRect.width-a-5,e.gridHeight=\"auto\"!==i.chart.height?e.svgHeight:e.gridWidth,e.translateY=r,e.translateX=o+10;break;default:throw new Error(\"Legend position not supported\")}}},{key:\"conditionalChecksForAxisCoords\",value:function(t,e,i){var a=this.w,s=a.globals.hasXaxisGroups?2:1,r=i.height+t.height+e.height,o=a.globals.isMultiLineX?1.2:a.globals.LINE_HEIGHT_RATIO,n=a.globals.rotateXLabels?22:10,l=a.globals.rotateXLabels&&\"bottom\"===a.config.legend.position?10:0;this.xAxisHeight=r*o+s*n+l,this.xAxisWidth=t.width,this.xAxisHeight-e.height>a.config.xaxis.labels.maxHeight&&(this.xAxisHeight=a.config.xaxis.labels.maxHeight),a.config.xaxis.labels.minHeight&&this.xAxisHeight<a.config.xaxis.labels.minHeight&&(this.xAxisHeight=a.config.xaxis.labels.minHeight),a.config.xaxis.floating&&(this.xAxisHeight=0);var h=0,c=0;a.config.yaxis.forEach((function(t){h+=t.labels.minWidth,c+=t.labels.maxWidth})),this.yAxisWidth<h&&(this.yAxisWidth=h),this.yAxisWidth>c&&(this.yAxisWidth=c)}}]),t}(),nt=function(){function t(e){a(this,t),this.w=e.w,this.lgCtx=e}return r(t,[{key:\"getLegendStyles\",value:function(){var t=document.createElement(\"style\");t.setAttribute(\"type\",\"text/css\");var e=document.createTextNode(\"\\t\\n    \\t\\n      .apexcharts-legend {\\t\\n        display: flex;\\t\\n        overflow: auto;\\t\\n        padding: 0 10px;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom, .apexcharts-legend.apx-legend-position-top {\\t\\n        flex-wrap: wrap\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\t\\n        flex-direction: column;\\t\\n        bottom: 0;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-left, .apexcharts-legend.apx-legend-position-top.apexcharts-align-left, .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\t\\n        justify-content: flex-start;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-center, .apexcharts-legend.apx-legend-position-top.apexcharts-align-center {\\t\\n        justify-content: center;  \\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-right, .apexcharts-legend.apx-legend-position-top.apexcharts-align-right {\\t\\n        justify-content: flex-end;\\t\\n      }\\t\\n      .apexcharts-legend-series {\\t\\n        cursor: pointer;\\t\\n        line-height: normal;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom .apexcharts-legend-series, .apexcharts-legend.apx-legend-position-top .apexcharts-legend-series{\\t\\n        display: flex;\\t\\n        align-items: center;\\t\\n      }\\t\\n      .apexcharts-legend-text {\\t\\n        position: relative;\\t\\n        font-size: 14px;\\t\\n      }\\t\\n      .apexcharts-legend-text *, .apexcharts-legend-marker * {\\t\\n        pointer-events: none;\\t\\n      }\\t\\n      .apexcharts-legend-marker {\\t\\n        position: relative;\\t\\n        display: inline-block;\\t\\n        cursor: pointer;\\t\\n        margin-right: 3px;\\t\\n        border-style: solid;\\n      }\\t\\n      \\t\\n      .apexcharts-legend.apexcharts-align-right .apexcharts-legend-series, .apexcharts-legend.apexcharts-align-left .apexcharts-legend-series{\\t\\n        display: inline-block;\\t\\n      }\\t\\n      .apexcharts-legend-series.apexcharts-no-click {\\t\\n        cursor: auto;\\t\\n      }\\t\\n      .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\\t\\n        display: none !important;\\t\\n      }\\t\\n      .apexcharts-inactive-legend {\\t\\n        opacity: 0.45;\\t\\n      }\");return t.appendChild(e),t}},{key:\"getLegendBBox\",value:function(){var t=this.w.globals.dom.baseEl.querySelector(\".apexcharts-legend\").getBoundingClientRect(),e=t.width;return{clwh:t.height,clww:e}}},{key:\"appendToForeignObject\",value:function(){this.w.globals.dom.elLegendForeign.appendChild(this.getLegendStyles())}},{key:\"toggleDataSeries\",value:function(t,e){var i=this,a=this.w;if(a.globals.axisCharts||\"radialBar\"===a.config.chart.type){a.globals.resized=!0;var s=null,r=null;if(a.globals.risingSeries=[],a.globals.axisCharts?(s=a.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(t,\"']\")),r=parseInt(s.getAttribute(\"data:realIndex\"),10)):(s=a.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(t+1,\"']\")),r=parseInt(s.getAttribute(\"rel\"),10)-1),e)[{cs:a.globals.collapsedSeries,csi:a.globals.collapsedSeriesIndices},{cs:a.globals.ancillaryCollapsedSeries,csi:a.globals.ancillaryCollapsedSeriesIndices}].forEach((function(t){i.riseCollapsedSeries(t.cs,t.csi,r)}));else this.hideSeries({seriesEl:s,realIndex:r})}else{var o=a.globals.dom.Paper.select(\" .apexcharts-series[rel='\".concat(t+1,\"'] path\")),n=a.config.chart.type;if(\"pie\"===n||\"polarArea\"===n||\"donut\"===n){var l=a.config.plotOptions.pie.donut.labels;new m(this.lgCtx.ctx).pathMouseDown(o.members[0],null),this.lgCtx.ctx.pie.printDataLabelsInner(o.members[0].node,l)}o.fire(\"click\")}}},{key:\"hideSeries\",value:function(t){var e=t.seriesEl,i=t.realIndex,a=this.w,s=x.clone(a.config.series);if(a.globals.axisCharts){var r=!1;if(a.config.yaxis[i]&&a.config.yaxis[i].show&&a.config.yaxis[i].showAlways&&(r=!0,a.globals.ancillaryCollapsedSeriesIndices.indexOf(i)<0&&(a.globals.ancillaryCollapsedSeries.push({index:i,data:s[i].data.slice(),type:e.parentNode.className.baseVal.split(\"-\")[1]}),a.globals.ancillaryCollapsedSeriesIndices.push(i))),!r){a.globals.collapsedSeries.push({index:i,data:s[i].data.slice(),type:e.parentNode.className.baseVal.split(\"-\")[1]}),a.globals.collapsedSeriesIndices.push(i);var o=a.globals.risingSeries.indexOf(i);a.globals.risingSeries.splice(o,1)}}else a.globals.collapsedSeries.push({index:i,data:s[i]}),a.globals.collapsedSeriesIndices.push(i);for(var n=e.childNodes,l=0;l<n.length;l++)n[l].classList.contains(\"apexcharts-series-markers-wrap\")&&(n[l].classList.contains(\"apexcharts-hide\")?n[l].classList.remove(\"apexcharts-hide\"):n[l].classList.add(\"apexcharts-hide\"));a.globals.allSeriesCollapsed=a.globals.collapsedSeries.length===a.config.series.length,s=this._getSeriesBasedOnCollapsedState(s),this.lgCtx.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled)}},{key:\"riseCollapsedSeries\",value:function(t,e,i){var a=this.w,s=x.clone(a.config.series);if(t.length>0){for(var r=0;r<t.length;r++)t[r].index===i&&(a.globals.axisCharts?(s[i].data=t[r].data.slice(),t.splice(r,1),e.splice(r,1),a.globals.risingSeries.push(i)):(s[i]=t[r].data,t.splice(r,1),e.splice(r,1),a.globals.risingSeries.push(i)));s=this._getSeriesBasedOnCollapsedState(s),this.lgCtx.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled)}}},{key:\"_getSeriesBasedOnCollapsedState\",value:function(t){var e=this.w;return e.globals.axisCharts?t.forEach((function(i,a){e.globals.collapsedSeriesIndices.indexOf(a)>-1&&(t[a].data=[])})):t.forEach((function(i,a){e.globals.collapsedSeriesIndices.indexOf(a)>-1&&(t[a]=0)})),t}}]),t}(),lt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.onLegendClick=this.onLegendClick.bind(this),this.onLegendHovered=this.onLegendHovered.bind(this),this.isBarsDistributed=\"bar\"===this.w.config.chart.type&&this.w.config.plotOptions.bar.distributed&&1===this.w.config.series.length,this.legendHelpers=new nt(this)}return r(t,[{key:\"init\",value:function(){var t=this.w,e=t.globals,i=t.config;if((i.legend.showForSingleSeries&&1===e.series.length||this.isBarsDistributed||e.series.length>1||!e.axisCharts)&&i.legend.show){for(;e.dom.elLegendWrap.firstChild;)e.dom.elLegendWrap.removeChild(e.dom.elLegendWrap.firstChild);this.drawLegends(),x.isIE11()?document.getElementsByTagName(\"head\")[0].appendChild(this.legendHelpers.getLegendStyles()):this.legendHelpers.appendToForeignObject(),\"bottom\"===i.legend.position||\"top\"===i.legend.position?this.legendAlignHorizontal():\"right\"!==i.legend.position&&\"left\"!==i.legend.position||this.legendAlignVertical()}}},{key:\"drawLegends\",value:function(){var t=this,e=this.w,i=e.config.legend.fontFamily,a=e.globals.seriesNames,s=e.globals.colors.slice();if(\"heatmap\"===e.config.chart.type){var r=e.config.plotOptions.heatmap.colorScale.ranges;a=r.map((function(t){return t.name?t.name:t.from+\" - \"+t.to})),s=r.map((function(t){return t.color}))}else this.isBarsDistributed&&(a=e.globals.labels.slice());e.config.legend.customLegendItems.length&&(a=e.config.legend.customLegendItems);for(var o=e.globals.legendFormatter,n=e.config.legend.inverseOrder,l=n?a.length-1:0;n?l>=0:l<=a.length-1;n?l--:l++){var h=o(a[l],{seriesIndex:l,w:e}),c=!1,d=!1;if(e.globals.collapsedSeries.length>0)for(var g=0;g<e.globals.collapsedSeries.length;g++)e.globals.collapsedSeries[g].index===l&&(c=!0);if(e.globals.ancillaryCollapsedSeriesIndices.length>0)for(var u=0;u<e.globals.ancillaryCollapsedSeriesIndices.length;u++)e.globals.ancillaryCollapsedSeriesIndices[u]===l&&(d=!0);var p=document.createElement(\"span\");p.classList.add(\"apexcharts-legend-marker\");var f=e.config.legend.markers.offsetX,b=e.config.legend.markers.offsetY,v=e.config.legend.markers.height,w=e.config.legend.markers.width,k=e.config.legend.markers.strokeWidth,A=e.config.legend.markers.strokeColor,S=e.config.legend.markers.radius,C=p.style;C.background=s[l],C.color=s[l],C.setProperty(\"background\",s[l],\"important\"),e.config.legend.markers.fillColors&&e.config.legend.markers.fillColors[l]&&(C.background=e.config.legend.markers.fillColors[l]),void 0!==e.globals.seriesColors[l]&&(C.background=e.globals.seriesColors[l],C.color=e.globals.seriesColors[l]),C.height=Array.isArray(v)?parseFloat(v[l])+\"px\":parseFloat(v)+\"px\",C.width=Array.isArray(w)?parseFloat(w[l])+\"px\":parseFloat(w)+\"px\",C.left=(Array.isArray(f)?parseFloat(f[l]):parseFloat(f))+\"px\",C.top=(Array.isArray(b)?parseFloat(b[l]):parseFloat(b))+\"px\",C.borderWidth=Array.isArray(k)?k[l]:k,C.borderColor=Array.isArray(A)?A[l]:A,C.borderRadius=Array.isArray(S)?parseFloat(S[l])+\"px\":parseFloat(S)+\"px\",e.config.legend.markers.customHTML&&(Array.isArray(e.config.legend.markers.customHTML)?e.config.legend.markers.customHTML[l]&&(p.innerHTML=e.config.legend.markers.customHTML[l]()):p.innerHTML=e.config.legend.markers.customHTML()),m.setAttrs(p,{rel:l+1,\"data:collapsed\":c||d}),(c||d)&&p.classList.add(\"apexcharts-inactive-legend\");var L=document.createElement(\"div\"),P=document.createElement(\"span\");P.classList.add(\"apexcharts-legend-text\"),P.innerHTML=Array.isArray(h)?h.join(\" \"):h;var I=e.config.legend.labels.useSeriesColors?e.globals.colors[l]:e.config.legend.labels.colors;I||(I=e.config.chart.foreColor),P.style.color=I,P.style.fontSize=parseFloat(e.config.legend.fontSize)+\"px\",P.style.fontWeight=e.config.legend.fontWeight,P.style.fontFamily=i||e.config.chart.fontFamily,m.setAttrs(P,{rel:l+1,i:l,\"data:default-text\":encodeURIComponent(h),\"data:collapsed\":c||d}),L.appendChild(p),L.appendChild(P);var T=new y(this.ctx);if(!e.config.legend.showForZeroSeries)0===T.getSeriesTotalByIndex(l)&&T.seriesHaveSameValues(l)&&!T.isSeriesNull(l)&&-1===e.globals.collapsedSeriesIndices.indexOf(l)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(l)&&L.classList.add(\"apexcharts-hidden-zero-series\");e.config.legend.showForNullSeries||T.isSeriesNull(l)&&-1===e.globals.collapsedSeriesIndices.indexOf(l)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(l)&&L.classList.add(\"apexcharts-hidden-null-series\"),e.globals.dom.elLegendWrap.appendChild(L),e.globals.dom.elLegendWrap.classList.add(\"apexcharts-align-\".concat(e.config.legend.horizontalAlign)),e.globals.dom.elLegendWrap.classList.add(\"apx-legend-position-\"+e.config.legend.position),L.classList.add(\"apexcharts-legend-series\"),L.style.margin=\"\".concat(e.config.legend.itemMargin.vertical,\"px \").concat(e.config.legend.itemMargin.horizontal,\"px\"),e.globals.dom.elLegendWrap.style.width=e.config.legend.width?e.config.legend.width+\"px\":\"\",e.globals.dom.elLegendWrap.style.height=e.config.legend.height?e.config.legend.height+\"px\":\"\",m.setAttrs(L,{rel:l+1,seriesName:x.escapeString(a[l]),\"data:collapsed\":c||d}),(c||d)&&L.classList.add(\"apexcharts-inactive-legend\"),e.config.legend.onItemClick.toggleDataSeries||L.classList.add(\"apexcharts-no-click\")}e.globals.dom.elWrap.addEventListener(\"click\",t.onLegendClick,!0),e.config.legend.onItemHover.highlightDataSeries&&0===e.config.legend.customLegendItems.length&&(e.globals.dom.elWrap.addEventListener(\"mousemove\",t.onLegendHovered,!0),e.globals.dom.elWrap.addEventListener(\"mouseout\",t.onLegendHovered,!0))}},{key:\"setLegendWrapXY\",value:function(t,e){var i=this.w,a=i.globals.dom.elLegendWrap,s=a.getBoundingClientRect(),r=0,o=0;if(\"bottom\"===i.config.legend.position)o+=i.globals.svgHeight-s.height/2;else if(\"top\"===i.config.legend.position){var n=new ot(this.ctx),l=n.dimHelpers.getTitleSubtitleCoords(\"title\").height,h=n.dimHelpers.getTitleSubtitleCoords(\"subtitle\").height;o=o+(l>0?l-10:0)+(h>0?h-10:0)}a.style.position=\"absolute\",r=r+t+i.config.legend.offsetX,o=o+e+i.config.legend.offsetY,a.style.left=r+\"px\",a.style.top=o+\"px\",\"bottom\"===i.config.legend.position?(a.style.top=\"auto\",a.style.bottom=5-i.config.legend.offsetY+\"px\"):\"right\"===i.config.legend.position&&(a.style.left=\"auto\",a.style.right=25+i.config.legend.offsetX+\"px\");[\"width\",\"height\"].forEach((function(t){a.style[t]&&(a.style[t]=parseInt(i.config.legend[t],10)+\"px\")}))}},{key:\"legendAlignHorizontal\",value:function(){var t=this.w;t.globals.dom.elLegendWrap.style.right=0;var e=this.legendHelpers.getLegendBBox(),i=new ot(this.ctx),a=i.dimHelpers.getTitleSubtitleCoords(\"title\"),s=i.dimHelpers.getTitleSubtitleCoords(\"subtitle\"),r=0;\"bottom\"===t.config.legend.position?r=-e.clwh/1.8:\"top\"===t.config.legend.position&&(r=a.height+s.height+t.config.title.margin+t.config.subtitle.margin-10),this.setLegendWrapXY(20,r)}},{key:\"legendAlignVertical\",value:function(){var t=this.w,e=this.legendHelpers.getLegendBBox(),i=0;\"left\"===t.config.legend.position&&(i=20),\"right\"===t.config.legend.position&&(i=t.globals.svgWidth-e.clww-10),this.setLegendWrapXY(i,20)}},{key:\"onLegendHovered\",value:function(t){var e=this.w,i=t.target.classList.contains(\"apexcharts-legend-text\")||t.target.classList.contains(\"apexcharts-legend-marker\");if(\"heatmap\"===e.config.chart.type||this.isBarsDistributed){if(i){var a=parseInt(t.target.getAttribute(\"rel\"),10)-1;this.ctx.events.fireEvent(\"legendHover\",[this.ctx,a,this.w]),new N(this.ctx).highlightRangeInSeries(t,t.target)}}else!t.target.classList.contains(\"apexcharts-inactive-legend\")&&i&&new N(this.ctx).toggleSeriesOnHover(t,t.target)}},{key:\"onLegendClick\",value:function(t){var e=this.w;if(!e.config.legend.customLegendItems.length&&(t.target.classList.contains(\"apexcharts-legend-text\")||t.target.classList.contains(\"apexcharts-legend-marker\"))){var i=parseInt(t.target.getAttribute(\"rel\"),10)-1,a=\"true\"===t.target.getAttribute(\"data:collapsed\"),s=this.w.config.chart.events.legendClick;\"function\"==typeof s&&s(this.ctx,i,this.w),this.ctx.events.fireEvent(\"legendClick\",[this.ctx,i,this.w]);var r=this.w.config.legend.markers.onClick;\"function\"==typeof r&&t.target.classList.contains(\"apexcharts-legend-marker\")&&(r(this.ctx,i,this.w),this.ctx.events.fireEvent(\"legendMarkerClick\",[this.ctx,i,this.w])),\"treemap\"!==e.config.chart.type&&\"heatmap\"!==e.config.chart.type&&!this.isBarsDistributed&&e.config.legend.onItemClick.toggleDataSeries&&this.legendHelpers.toggleDataSeries(i,a)}}}]),t}(),ht=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.ev=this.w.config.chart.events,this.selectedClass=\"apexcharts-selected\",this.localeValues=this.w.globals.locale.toolbar,this.minX=i.globals.minX,this.maxX=i.globals.maxX}return r(t,[{key:\"createToolbar\",value:function(){var t=this,e=this.w,i=function(){return document.createElement(\"div\")},a=i();if(a.setAttribute(\"class\",\"apexcharts-toolbar\"),a.style.top=e.config.chart.toolbar.offsetY+\"px\",a.style.right=3-e.config.chart.toolbar.offsetX+\"px\",e.globals.dom.elWrap.appendChild(a),this.elZoom=i(),this.elZoomIn=i(),this.elZoomOut=i(),this.elPan=i(),this.elSelection=i(),this.elZoomReset=i(),this.elMenuIcon=i(),this.elMenu=i(),this.elCustomIcons=[],this.t=e.config.chart.toolbar.tools,Array.isArray(this.t.customIcons))for(var s=0;s<this.t.customIcons.length;s++)this.elCustomIcons.push(i());var r=[],o=function(i,a,s){var o=i.toLowerCase();t.t[o]&&e.config.chart.zoom.enabled&&r.push({el:a,icon:\"string\"==typeof t.t[o]?t.t[o]:s,title:t.localeValues[i],class:\"apexcharts-\".concat(o,\"-icon\")})};o(\"zoomIn\",this.elZoomIn,'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\\n    <path d=\"M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"/>\\n</svg>\\n'),o(\"zoomOut\",this.elZoomOut,'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\\n    <path d=\"M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"/>\\n</svg>\\n');var n=function(i){t.t[i]&&e.config.chart[i].enabled&&r.push({el:\"zoom\"===i?t.elZoom:t.elSelection,icon:\"string\"==typeof t.t[i]?t.t[i]:\"zoom\"===i?'<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\">\\n    <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"/>\\n    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\\n    <path d=\"M12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z\"/>\\n</svg>':'<svg fill=\"#6E8192\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\\n    <path d=\"M3 5h2V3c-1.1 0-2 .9-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2c0-1.1-.9-2-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2z\"/>\\n</svg>',title:t.localeValues[\"zoom\"===i?\"selectionZoom\":\"selection\"],class:e.globals.isTouchDevice?\"apexcharts-element-hidden\":\"apexcharts-\".concat(i,\"-icon\")})};n(\"zoom\"),n(\"selection\"),this.t.pan&&e.config.chart.zoom.enabled&&r.push({el:this.elPan,icon:\"string\"==typeof this.t.pan?this.t.pan:'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\">\\n    <defs>\\n        <path d=\"M0 0h24v24H0z\" id=\"a\"/>\\n    </defs>\\n    <clipPath id=\"b\">\\n        <use overflow=\"visible\" xlink:href=\"#a\"/>\\n    </clipPath>\\n    <path clip-path=\"url(#b)\" d=\"M23 5.5V20c0 2.2-1.8 4-4 4h-7.3c-1.08 0-2.1-.43-2.85-1.19L1 14.83s1.26-1.23 1.3-1.25c.22-.19.49-.29.79-.29.22 0 .42.06.6.16.04.01 4.31 2.46 4.31 2.46V4c0-.83.67-1.5 1.5-1.5S11 3.17 11 4v7h1V1.5c0-.83.67-1.5 1.5-1.5S15 .67 15 1.5V11h1V2.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V11h1V5.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5z\"/>\\n</svg>',title:this.localeValues.pan,class:e.globals.isTouchDevice?\"apexcharts-element-hidden\":\"apexcharts-pan-icon\"}),o(\"reset\",this.elZoomReset,'<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\\n    <path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\"/>\\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\\n</svg>'),this.t.download&&r.push({el:this.elMenuIcon,icon:\"string\"==typeof this.t.download?this.t.download:'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z\"/></svg>',title:this.localeValues.menu,class:\"apexcharts-menu-icon\"});for(var l=0;l<this.elCustomIcons.length;l++)r.push({el:this.elCustomIcons[l],icon:this.t.customIcons[l].icon,title:this.t.customIcons[l].title,index:this.t.customIcons[l].index,class:\"apexcharts-toolbar-custom-icon \"+this.t.customIcons[l].class});r.forEach((function(t,e){t.index&&x.moveIndexInArray(r,e,t.index)}));for(var h=0;h<r.length;h++)m.setAttrs(r[h].el,{class:r[h].class,title:r[h].title}),r[h].el.innerHTML=r[h].icon,a.appendChild(r[h].el);this._createHamburgerMenu(a),e.globals.zoomEnabled?this.elZoom.classList.add(this.selectedClass):e.globals.panEnabled?this.elPan.classList.add(this.selectedClass):e.globals.selectionEnabled&&this.elSelection.classList.add(this.selectedClass),this.addToolbarEventListeners()}},{key:\"_createHamburgerMenu\",value:function(t){this.elMenuItems=[],t.appendChild(this.elMenu),m.setAttrs(this.elMenu,{class:\"apexcharts-menu\"});var e=[{name:\"exportSVG\",title:this.localeValues.exportToSVG},{name:\"exportPNG\",title:this.localeValues.exportToPNG},{name:\"exportCSV\",title:this.localeValues.exportToCSV}];this.w.globals.allSeriesHasEqualX||e.splice(2,1);for(var i=0;i<e.length;i++)this.elMenuItems.push(document.createElement(\"div\")),this.elMenuItems[i].innerHTML=e[i].title,m.setAttrs(this.elMenuItems[i],{class:\"apexcharts-menu-item \".concat(e[i].name),title:e[i].title}),this.elMenu.appendChild(this.elMenuItems[i])}},{key:\"addToolbarEventListeners\",value:function(){var t=this;this.elZoomReset.addEventListener(\"click\",this.handleZoomReset.bind(this)),this.elSelection.addEventListener(\"click\",this.toggleZoomSelection.bind(this,\"selection\")),this.elZoom.addEventListener(\"click\",this.toggleZoomSelection.bind(this,\"zoom\")),this.elZoomIn.addEventListener(\"click\",this.handleZoomIn.bind(this)),this.elZoomOut.addEventListener(\"click\",this.handleZoomOut.bind(this)),this.elPan.addEventListener(\"click\",this.togglePanning.bind(this)),this.elMenuIcon.addEventListener(\"click\",this.toggleMenu.bind(this)),this.elMenuItems.forEach((function(e){e.classList.contains(\"exportSVG\")?e.addEventListener(\"click\",t.handleDownload.bind(t,\"svg\")):e.classList.contains(\"exportPNG\")?e.addEventListener(\"click\",t.handleDownload.bind(t,\"png\")):e.classList.contains(\"exportCSV\")&&e.addEventListener(\"click\",t.handleDownload.bind(t,\"csv\"))}));for(var e=0;e<this.t.customIcons.length;e++)this.elCustomIcons[e].addEventListener(\"click\",this.t.customIcons[e].click.bind(this,this.ctx,this.ctx.w))}},{key:\"toggleZoomSelection\",value:function(t){this.ctx.getSyncedCharts().forEach((function(e){e.ctx.toolbar.toggleOtherControls();var i=\"selection\"===t?e.ctx.toolbar.elSelection:e.ctx.toolbar.elZoom,a=\"selection\"===t?\"selectionEnabled\":\"zoomEnabled\";e.w.globals[a]=!e.w.globals[a],i.classList.contains(e.ctx.toolbar.selectedClass)?i.classList.remove(e.ctx.toolbar.selectedClass):i.classList.add(e.ctx.toolbar.selectedClass)}))}},{key:\"getToolbarIconsReference\",value:function(){var t=this.w;this.elZoom||(this.elZoom=t.globals.dom.baseEl.querySelector(\".apexcharts-zoom-icon\")),this.elPan||(this.elPan=t.globals.dom.baseEl.querySelector(\".apexcharts-pan-icon\")),this.elSelection||(this.elSelection=t.globals.dom.baseEl.querySelector(\".apexcharts-selection-icon\"))}},{key:\"enableZoomPanFromToolbar\",value:function(t){this.toggleOtherControls(),\"pan\"===t?this.w.globals.panEnabled=!0:this.w.globals.zoomEnabled=!0;var e=\"pan\"===t?this.elPan:this.elZoom,i=\"pan\"===t?this.elZoom:this.elPan;e&&e.classList.add(this.selectedClass),i&&i.classList.remove(this.selectedClass)}},{key:\"togglePanning\",value:function(){this.ctx.getSyncedCharts().forEach((function(t){t.ctx.toolbar.toggleOtherControls(),t.w.globals.panEnabled=!t.w.globals.panEnabled,t.ctx.toolbar.elPan.classList.contains(t.ctx.toolbar.selectedClass)?t.ctx.toolbar.elPan.classList.remove(t.ctx.toolbar.selectedClass):t.ctx.toolbar.elPan.classList.add(t.ctx.toolbar.selectedClass)}))}},{key:\"toggleOtherControls\",value:function(){var t=this,e=this.w;e.globals.panEnabled=!1,e.globals.zoomEnabled=!1,e.globals.selectionEnabled=!1,this.getToolbarIconsReference(),[this.elPan,this.elSelection,this.elZoom].forEach((function(e){e&&e.classList.remove(t.selectedClass)}))}},{key:\"handleZoomIn\",value:function(){var t=this.w;t.globals.isRangeBar&&(this.minX=t.globals.minY,this.maxX=t.globals.maxY);var e=(this.minX+this.maxX)/2,i=(this.minX+e)/2,a=(this.maxX+e)/2,s=this._getNewMinXMaxX(i,a);t.globals.disableZoomIn||this.zoomUpdateOptions(s.minX,s.maxX)}},{key:\"handleZoomOut\",value:function(){var t=this.w;if(t.globals.isRangeBar&&(this.minX=t.globals.minY,this.maxX=t.globals.maxY),!(\"datetime\"===t.config.xaxis.type&&new Date(this.minX).getUTCFullYear()<1e3)){var e=(this.minX+this.maxX)/2,i=this.minX-(e-this.minX),a=this.maxX-(e-this.maxX),s=this._getNewMinXMaxX(i,a);t.globals.disableZoomOut||this.zoomUpdateOptions(s.minX,s.maxX)}}},{key:\"_getNewMinXMaxX\",value:function(t,e){var i=this.w.config.xaxis.convertedCatToNumeric;return{minX:i?Math.floor(t):t,maxX:i?Math.floor(e):e}}},{key:\"zoomUpdateOptions\",value:function(t,e){var i=this.w;if(void 0!==t||void 0!==e){if(!(i.config.xaxis.convertedCatToNumeric&&(t<1&&(t=1,e=i.globals.dataPoints),e-t<2))){var a={min:t,max:e},s=this.getBeforeZoomRange(a);s&&(a=s.xaxis);var r={xaxis:a},o=x.clone(i.globals.initialConfig.yaxis);if(i.config.chart.zoom.autoScaleYaxis)o=new _(this.ctx).autoScaleY(this.ctx,o,{xaxis:a});i.config.chart.group||(r.yaxis=o),this.w.globals.zoomed=!0,this.ctx.updateHelpers._updateOptions(r,!1,this.w.config.chart.animations.dynamicAnimation.enabled),this.zoomCallback(a,o)}}else this.handleZoomReset()}},{key:\"zoomCallback\",value:function(t,e){\"function\"==typeof this.ev.zoomed&&this.ev.zoomed(this.ctx,{xaxis:t,yaxis:e})}},{key:\"getBeforeZoomRange\",value:function(t,e){var i=null;return\"function\"==typeof this.ev.beforeZoom&&(i=this.ev.beforeZoom(this,{xaxis:t,yaxis:e})),i}},{key:\"toggleMenu\",value:function(){var t=this;window.setTimeout((function(){t.elMenu.classList.contains(\"apexcharts-menu-open\")?t.elMenu.classList.remove(\"apexcharts-menu-open\"):t.elMenu.classList.add(\"apexcharts-menu-open\")}),0)}},{key:\"handleDownload\",value:function(t){var e=this.w,i=new G(this.ctx);switch(t){case\"svg\":i.exportToSVG(this.ctx);break;case\"png\":i.exportToPng(this.ctx);break;case\"csv\":i.exportToCSV({series:e.config.series,columnDelimiter:e.config.chart.toolbar.export.csv.columnDelimiter})}}},{key:\"handleZoomReset\",value:function(t){this.ctx.getSyncedCharts().forEach((function(t){var e=t.w;if(e.globals.lastXAxis.min=void 0,e.globals.lastXAxis.max=void 0,t.updateHelpers.revertDefaultAxisMinMax(),\"function\"==typeof e.config.chart.events.beforeResetZoom){var i=e.config.chart.events.beforeResetZoom(t,e);i&&t.updateHelpers.revertDefaultAxisMinMax(i)}\"function\"==typeof e.config.chart.events.zoomed&&t.ctx.toolbar.zoomCallback({min:e.config.xaxis.min,max:e.config.xaxis.max}),e.globals.zoomed=!1;var a=t.ctx.series.emptyCollapsedSeries(x.clone(e.globals.initialSeries));t.updateHelpers._updateSeries(a,e.config.chart.animations.dynamicAnimation.enabled)}))}},{key:\"destroy\",value:function(){this.elZoom=null,this.elZoomIn=null,this.elZoomOut=null,this.elPan=null,this.elSelection=null,this.elZoomReset=null,this.elMenuIcon=null}}]),t}(),ct=function(t){n(i,ht);var e=d(i);function i(t){var s;return a(this,i),(s=e.call(this,t)).ctx=t,s.w=t.w,s.dragged=!1,s.graphics=new m(s.ctx),s.eventList=[\"mousedown\",\"mouseleave\",\"mousemove\",\"touchstart\",\"touchmove\",\"mouseup\",\"touchend\"],s.clientX=0,s.clientY=0,s.startX=0,s.endX=0,s.dragX=0,s.startY=0,s.endY=0,s.dragY=0,s.moveDirection=\"none\",s}return r(i,[{key:\"init\",value:function(t){var e=this,i=t.xyRatios,a=this.w,s=this;this.xyRatios=i,this.zoomRect=this.graphics.drawRect(0,0,0,0),this.selectionRect=this.graphics.drawRect(0,0,0,0),this.gridRect=a.globals.dom.baseEl.querySelector(\".apexcharts-grid\"),this.zoomRect.node.classList.add(\"apexcharts-zoom-rect\"),this.selectionRect.node.classList.add(\"apexcharts-selection-rect\"),a.globals.dom.elGraphical.add(this.zoomRect),a.globals.dom.elGraphical.add(this.selectionRect),\"x\"===a.config.chart.selection.type?this.slDraggableRect=this.selectionRect.draggable({minX:0,minY:0,maxX:a.globals.gridWidth,maxY:a.globals.gridHeight}).on(\"dragmove\",this.selectionDragging.bind(this,\"dragging\")):\"y\"===a.config.chart.selection.type?this.slDraggableRect=this.selectionRect.draggable({minX:0,maxX:a.globals.gridWidth}).on(\"dragmove\",this.selectionDragging.bind(this,\"dragging\")):this.slDraggableRect=this.selectionRect.draggable().on(\"dragmove\",this.selectionDragging.bind(this,\"dragging\")),this.preselectedSelection(),this.hoverArea=a.globals.dom.baseEl.querySelector(\"\".concat(a.globals.chartClass,\" .apexcharts-svg\")),this.hoverArea.classList.add(\"apexcharts-zoomable\"),this.eventList.forEach((function(t){e.hoverArea.addEventListener(t,s.svgMouseEvents.bind(s,i),{capture:!1,passive:!0})}))}},{key:\"destroy\",value:function(){this.slDraggableRect&&(this.slDraggableRect.draggable(!1),this.slDraggableRect.off(),this.selectionRect.off()),this.selectionRect=null,this.zoomRect=null,this.gridRect=null}},{key:\"svgMouseEvents\",value:function(t,e){var i=this.w,a=this,s=this.ctx.toolbar,r=i.globals.zoomEnabled?i.config.chart.zoom.type:i.config.chart.selection.type,o=i.config.chart.toolbar.autoSelected;if(e.shiftKey?(this.shiftWasPressed=!0,s.enableZoomPanFromToolbar(\"pan\"===o?\"zoom\":\"pan\")):this.shiftWasPressed&&(s.enableZoomPanFromToolbar(o),this.shiftWasPressed=!1),e.target){var n,l=e.target.classList;if(e.target.parentNode&&null!==e.target.parentNode&&(n=e.target.parentNode.classList),!(l.contains(\"apexcharts-selection-rect\")||l.contains(\"apexcharts-legend-marker\")||l.contains(\"apexcharts-legend-text\")||n&&n.contains(\"apexcharts-toolbar\"))){if(a.clientX=\"touchmove\"===e.type||\"touchstart\"===e.type?e.touches[0].clientX:\"touchend\"===e.type?e.changedTouches[0].clientX:e.clientX,a.clientY=\"touchmove\"===e.type||\"touchstart\"===e.type?e.touches[0].clientY:\"touchend\"===e.type?e.changedTouches[0].clientY:e.clientY,\"mousedown\"===e.type&&1===e.which){var h=a.gridRect.getBoundingClientRect();a.startX=a.clientX-h.left,a.startY=a.clientY-h.top,a.dragged=!1,a.w.globals.mousedown=!0}if((\"mousemove\"===e.type&&1===e.which||\"touchmove\"===e.type)&&(a.dragged=!0,i.globals.panEnabled?(i.globals.selection=null,a.w.globals.mousedown&&a.panDragging({context:a,zoomtype:r,xyRatios:t})):(a.w.globals.mousedown&&i.globals.zoomEnabled||a.w.globals.mousedown&&i.globals.selectionEnabled)&&(a.selection=a.selectionDrawing({context:a,zoomtype:r}))),\"mouseup\"===e.type||\"touchend\"===e.type||\"mouseleave\"===e.type){var c=a.gridRect.getBoundingClientRect();a.w.globals.mousedown&&(a.endX=a.clientX-c.left,a.endY=a.clientY-c.top,a.dragX=Math.abs(a.endX-a.startX),a.dragY=Math.abs(a.endY-a.startY),(i.globals.zoomEnabled||i.globals.selectionEnabled)&&a.selectionDrawn({context:a,zoomtype:r}),i.globals.panEnabled&&i.config.xaxis.convertedCatToNumeric&&a.delayedPanScrolled()),i.globals.zoomEnabled&&a.hideSelectionRect(this.selectionRect),a.dragged=!1,a.w.globals.mousedown=!1}this.makeSelectionRectDraggable()}}}},{key:\"makeSelectionRectDraggable\",value:function(){var t=this.w;if(this.selectionRect){var e=this.selectionRect.node.getBoundingClientRect();e.width>0&&e.height>0&&this.slDraggableRect.selectize({points:\"l, r\",pointSize:8,pointType:\"rect\"}).resize({constraint:{minX:0,minY:0,maxX:t.globals.gridWidth,maxY:t.globals.gridHeight}}).on(\"resizing\",this.selectionDragging.bind(this,\"resizing\"))}}},{key:\"preselectedSelection\",value:function(){var t=this.w,e=this.xyRatios;if(!t.globals.zoomEnabled)if(void 0!==t.globals.selection&&null!==t.globals.selection)this.drawSelectionRect(t.globals.selection);else if(void 0!==t.config.chart.selection.xaxis.min&&void 0!==t.config.chart.selection.xaxis.max){var i=(t.config.chart.selection.xaxis.min-t.globals.minX)/e.xRatio,a={x:i,y:0,width:t.globals.gridWidth-(t.globals.maxX-t.config.chart.selection.xaxis.max)/e.xRatio-i,height:t.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(a),this.makeSelectionRectDraggable(),\"function\"==typeof t.config.chart.events.selection&&t.config.chart.events.selection(this.ctx,{xaxis:{min:t.config.chart.selection.xaxis.min,max:t.config.chart.selection.xaxis.max},yaxis:{}})}}},{key:\"drawSelectionRect\",value:function(t){var e=t.x,i=t.y,a=t.width,s=t.height,r=t.translateX,o=void 0===r?0:r,n=t.translateY,l=void 0===n?0:n,h=this.w,c=this.zoomRect,d=this.selectionRect;if(this.dragged||null!==h.globals.selection){var g={transform:\"translate(\"+o+\", \"+l+\")\"};h.globals.zoomEnabled&&this.dragged&&(a<0&&(a=1),c.attr({x:e,y:i,width:a,height:s,fill:h.config.chart.zoom.zoomedArea.fill.color,\"fill-opacity\":h.config.chart.zoom.zoomedArea.fill.opacity,stroke:h.config.chart.zoom.zoomedArea.stroke.color,\"stroke-width\":h.config.chart.zoom.zoomedArea.stroke.width,\"stroke-opacity\":h.config.chart.zoom.zoomedArea.stroke.opacity}),m.setAttrs(c.node,g)),h.globals.selectionEnabled&&(d.attr({x:e,y:i,width:a>0?a:0,height:s>0?s:0,fill:h.config.chart.selection.fill.color,\"fill-opacity\":h.config.chart.selection.fill.opacity,stroke:h.config.chart.selection.stroke.color,\"stroke-width\":h.config.chart.selection.stroke.width,\"stroke-dasharray\":h.config.chart.selection.stroke.dashArray,\"stroke-opacity\":h.config.chart.selection.stroke.opacity}),m.setAttrs(d.node,g))}}},{key:\"hideSelectionRect\",value:function(t){t&&t.attr({x:0,y:0,width:0,height:0})}},{key:\"selectionDrawing\",value:function(t){var e=t.context,i=t.zoomtype,a=this.w,s=e,r=this.gridRect.getBoundingClientRect(),o=s.startX-1,n=s.startY,l=!1,h=!1,c=s.clientX-r.left-o,d=s.clientY-r.top-n,g={};return Math.abs(c+o)>a.globals.gridWidth?c=a.globals.gridWidth-o:s.clientX-r.left<0&&(c=o),o>s.clientX-r.left&&(l=!0,c=Math.abs(c)),n>s.clientY-r.top&&(h=!0,d=Math.abs(d)),g=\"x\"===i?{x:l?o-c:o,y:0,width:c,height:a.globals.gridHeight}:\"y\"===i?{x:0,y:h?n-d:n,width:a.globals.gridWidth,height:d}:{x:l?o-c:o,y:h?n-d:n,width:c,height:d},s.drawSelectionRect(g),s.selectionDragging(\"resizing\"),g}},{key:\"selectionDragging\",value:function(t,e){var i=this,a=this.w,s=this.xyRatios,r=this.selectionRect,o=0;\"resizing\"===t&&(o=30);var n=function(t){return parseFloat(r.node.getAttribute(t))},l={x:n(\"x\"),y:n(\"y\"),width:n(\"width\"),height:n(\"height\")};a.globals.selection=l,\"function\"==typeof a.config.chart.events.selection&&a.globals.selectionEnabled&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout((function(){var t=i.gridRect.getBoundingClientRect(),e=r.node.getBoundingClientRect(),o={xaxis:{min:a.globals.xAxisScale.niceMin+(e.left-t.left)*s.xRatio,max:a.globals.xAxisScale.niceMin+(e.right-t.left)*s.xRatio},yaxis:{min:a.globals.yAxisScale[0].niceMin+(t.bottom-e.bottom)*s.yRatio[0],max:a.globals.yAxisScale[0].niceMax-(e.top-t.top)*s.yRatio[0]}};a.config.chart.events.selection(i.ctx,o),a.config.chart.brush.enabled&&void 0!==a.config.chart.events.brushScrolled&&a.config.chart.events.brushScrolled(i.ctx,o)}),o))}},{key:\"selectionDrawn\",value:function(t){var e=t.context,i=t.zoomtype,a=this.w,s=e,r=this.xyRatios,o=this.ctx.toolbar;if(s.startX>s.endX){var n=s.startX;s.startX=s.endX,s.endX=n}if(s.startY>s.endY){var l=s.startY;s.startY=s.endY,s.endY=l}var h=void 0,c=void 0;a.globals.isRangeBar?(h=a.globals.yAxisScale[0].niceMin+s.startX*r.invertedYRatio,c=a.globals.yAxisScale[0].niceMin+s.endX*r.invertedYRatio):(h=a.globals.xAxisScale.niceMin+s.startX*r.xRatio,c=a.globals.xAxisScale.niceMin+s.endX*r.xRatio);var d=[],g=[];if(a.config.yaxis.forEach((function(t,e){d.push(a.globals.yAxisScale[e].niceMax-r.yRatio[e]*s.startY),g.push(a.globals.yAxisScale[e].niceMax-r.yRatio[e]*s.endY)})),s.dragged&&(s.dragX>10||s.dragY>10)&&h!==c)if(a.globals.zoomEnabled){var u=x.clone(a.globals.initialConfig.yaxis),p=x.clone(a.globals.initialConfig.xaxis);if(a.globals.zoomed=!0,a.config.xaxis.convertedCatToNumeric&&(h=Math.floor(h),c=Math.floor(c),h<1&&(h=1,c=a.globals.dataPoints),c-h<2&&(c=h+1)),\"xy\"!==i&&\"x\"!==i||(p={min:h,max:c}),\"xy\"!==i&&\"y\"!==i||u.forEach((function(t,e){u[e].min=g[e],u[e].max=d[e]})),a.config.chart.zoom.autoScaleYaxis){var f=new _(s.ctx);u=f.autoScaleY(s.ctx,u,{xaxis:p})}if(o){var b=o.getBeforeZoomRange(p,u);b&&(p=b.xaxis?b.xaxis:p,u=b.yaxis?b.yaxis:u)}var v={xaxis:p};a.config.chart.group||(v.yaxis=u),s.ctx.updateHelpers._updateOptions(v,!1,s.w.config.chart.animations.dynamicAnimation.enabled),\"function\"==typeof a.config.chart.events.zoomed&&o.zoomCallback(p,u)}else if(a.globals.selectionEnabled){var m,y=null;m={min:h,max:c},\"xy\"!==i&&\"y\"!==i||(y=x.clone(a.config.yaxis)).forEach((function(t,e){y[e].min=g[e],y[e].max=d[e]})),a.globals.selection=s.selection,\"function\"==typeof a.config.chart.events.selection&&a.config.chart.events.selection(s.ctx,{xaxis:m,yaxis:y})}}},{key:\"panDragging\",value:function(t){var e=t.context,i=this.w,a=e;if(void 0!==i.globals.lastClientPosition.x){var s=i.globals.lastClientPosition.x-a.clientX,r=i.globals.lastClientPosition.y-a.clientY;Math.abs(s)>Math.abs(r)&&s>0?this.moveDirection=\"left\":Math.abs(s)>Math.abs(r)&&s<0?this.moveDirection=\"right\":Math.abs(r)>Math.abs(s)&&r>0?this.moveDirection=\"up\":Math.abs(r)>Math.abs(s)&&r<0&&(this.moveDirection=\"down\")}i.globals.lastClientPosition={x:a.clientX,y:a.clientY};var o=i.globals.isRangeBar?i.globals.minY:i.globals.minX,n=i.globals.isRangeBar?i.globals.maxY:i.globals.maxX;i.config.xaxis.convertedCatToNumeric||a.panScrolled(o,n)}},{key:\"delayedPanScrolled\",value:function(){var t=this.w,e=t.globals.minX,i=t.globals.maxX,a=(t.globals.maxX-t.globals.minX)/2;\"left\"===this.moveDirection?(e=t.globals.minX+a,i=t.globals.maxX+a):\"right\"===this.moveDirection&&(e=t.globals.minX-a,i=t.globals.maxX-a),e=Math.floor(e),i=Math.floor(i),this.updateScrolledChart({xaxis:{min:e,max:i}},e,i)}},{key:\"panScrolled\",value:function(t,e){var i=this.w,a=this.xyRatios,s=x.clone(i.globals.initialConfig.yaxis),r=a.xRatio,o=i.globals.minX,n=i.globals.maxX;i.globals.isRangeBar&&(r=a.invertedYRatio,o=i.globals.minY,n=i.globals.maxY),\"left\"===this.moveDirection?(t=o+i.globals.gridWidth/15*r,e=n+i.globals.gridWidth/15*r):\"right\"===this.moveDirection&&(t=o-i.globals.gridWidth/15*r,e=n-i.globals.gridWidth/15*r),i.globals.isRangeBar||(t<i.globals.initialMinX||e>i.globals.initialMaxX)&&(t=o,e=n);var l={min:t,max:e};i.config.chart.zoom.autoScaleYaxis&&(s=new _(this.ctx).autoScaleY(this.ctx,s,{xaxis:l}));var h={xaxis:{min:t,max:e}};i.config.chart.group||(h.yaxis=s),this.updateScrolledChart(h,t,e)}},{key:\"updateScrolledChart\",value:function(t,e,i){var a=this.w;this.ctx.updateHelpers._updateOptions(t,!1,!1),\"function\"==typeof a.config.chart.events.scrolled&&a.config.chart.events.scrolled(this.ctx,{xaxis:{min:e,max:i}})}}]),i}(),dt=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx}return r(t,[{key:\"getNearestValues\",value:function(t){var e=t.hoverArea,i=t.elGrid,a=t.clientX,s=t.clientY,r=this.w,o=i.getBoundingClientRect(),n=o.width,l=o.height,h=n/(r.globals.dataPoints-1),c=l/r.globals.dataPoints,d=this.hasBars();!r.globals.comboCharts&&!d||r.config.xaxis.convertedCatToNumeric||(h=n/r.globals.dataPoints);var g=a-o.left-r.globals.barPadForNumericAxis,u=s-o.top;g<0||u<0||g>n||u>l?(e.classList.remove(\"hovering-zoom\"),e.classList.remove(\"hovering-pan\")):r.globals.zoomEnabled?(e.classList.remove(\"hovering-pan\"),e.classList.add(\"hovering-zoom\")):r.globals.panEnabled&&(e.classList.remove(\"hovering-zoom\"),e.classList.add(\"hovering-pan\"));var p=Math.round(g/h),f=Math.floor(u/c);d&&!r.config.xaxis.convertedCatToNumeric&&(p=Math.ceil(g/h),p-=1);var b=null,v=null,m=[],y=[];if(r.globals.seriesXvalues.forEach((function(t){m.push([t[0]+1e-6].concat(t))})),r.globals.seriesYvalues.forEach((function(t){y.push([t[0]+1e-6].concat(t))})),m=m.map((function(t){return t.filter((function(t){return x.isNumber(t)}))})),y=y.map((function(t){return t.filter((function(t){return x.isNumber(t)}))})),r.globals.isXNumeric){var w=this.ttCtx.getElGrid().getBoundingClientRect(),k=g*(w.width/n),A=u*(w.height/l);b=(v=this.closestInMultiArray(k,A,m,y)).index,p=v.j,null!==b&&(m=r.globals.seriesXvalues[b],p=(v=this.closestInArray(k,m)).index)}return r.globals.capturedSeriesIndex=null===b?-1:b,(!p||p<1)&&(p=0),r.globals.isBarHorizontal?r.globals.capturedDataPointIndex=f:r.globals.capturedDataPointIndex=p,{capturedSeries:b,j:r.globals.isBarHorizontal?f:p,hoverX:g,hoverY:u}}},{key:\"closestInMultiArray\",value:function(t,e,i,a){var s=this.w,r=0,o=null,n=-1;s.globals.series.length>1?r=this.getFirstActiveXArray(i):o=0;var l=i[r][0],h=Math.abs(t-l);if(i.forEach((function(e){e.forEach((function(e,i){var a=Math.abs(t-e);a<h&&(h=a,n=i)}))})),-1!==n){var c=a[r][n],d=Math.abs(e-c);o=r,a.forEach((function(t,i){var a=Math.abs(e-t[n]);a<d&&(d=a,o=i)}))}return{index:o,j:n}}},{key:\"getFirstActiveXArray\",value:function(t){for(var e=this.w,i=0,a=t.map((function(t,e){return t.length>0?e:-1})),s=0;s<a.length;s++)if(-1!==a[s]&&-1===e.globals.collapsedSeriesIndices.indexOf(s)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(s)){i=a[s];break}return i}},{key:\"closestInArray\",value:function(t,e){for(var i=e[0],a=null,s=Math.abs(t-i),r=0;r<e.length;r++){var o=Math.abs(t-e[r]);o<s&&(s=o,a=r)}return{index:a}}},{key:\"isXoverlap\",value:function(t){var e=[],i=this.w.globals.seriesX.filter((function(t){return void 0!==t[0]}));if(i.length>0)for(var a=0;a<i.length-1;a++)void 0!==i[a][t]&&void 0!==i[a+1][t]&&i[a][t]!==i[a+1][t]&&e.push(\"unEqual\");return 0===e.length}},{key:\"isInitialSeriesSameLen\",value:function(){for(var t=!0,e=this.w.globals.initialSeries,i=0;i<e.length-1;i++)if(e[i].data.length!==e[i+1].data.length){t=!1;break}return t}},{key:\"getBarsHeight\",value:function(t){return u(t).reduce((function(t,e){return t+e.getBBox().height}),0)}},{key:\"getElMarkers\",value:function(t){return\"number\"==typeof t?this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series[data\\\\:realIndex='\".concat(t,\"'] .apexcharts-series-markers-wrap > *\")):this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series-markers-wrap > *\")}},{key:\"getAllMarkers\",value:function(){var t=this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series-markers-wrap\");(t=u(t)).sort((function(t,e){var i=Number(t.getAttribute(\"data:realIndex\")),a=Number(e.getAttribute(\"data:realIndex\"));return a<i?1:a>i?-1:0}));var e=[];return t.forEach((function(t){e.push(t.querySelector(\".apexcharts-marker\"))})),e}},{key:\"hasMarkers\",value:function(t){return this.getElMarkers(t).length>0}},{key:\"getElBars\",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-bar-series,  .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-rangebar-series\")}},{key:\"hasBars\",value:function(){return this.getElBars().length>0}},{key:\"getHoverMarkerSize\",value:function(t){var e=this.w,i=e.config.markers.hover.size;return void 0===i&&(i=e.globals.markers.size[t]+e.config.markers.hover.sizeOffset),i}},{key:\"toggleAllTooltipSeriesGroups\",value:function(t){var e=this.w,i=this.ttCtx;0===i.allTooltipSeriesGroups.length&&(i.allTooltipSeriesGroups=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-tooltip-series-group\"));for(var a=i.allTooltipSeriesGroups,s=0;s<a.length;s++)\"enable\"===t?(a[s].classList.add(\"apexcharts-active\"),a[s].style.display=e.config.tooltip.items.display):(a[s].classList.remove(\"apexcharts-active\"),a[s].style.display=\"none\")}}]),t}(),gt=function(){function t(e){a(this,t),this.w=e.w,this.ctx=e.ctx,this.ttCtx=e,this.tooltipUtil=new dt(e)}return r(t,[{key:\"drawSeriesTexts\",value:function(t){var e=t.shared,i=void 0===e||e,a=t.ttItems,s=t.i,r=void 0===s?0:s,o=t.j,n=void 0===o?null:o,l=t.y1,h=t.y2,c=t.e,d=this.w;void 0!==d.config.tooltip.custom?this.handleCustomTooltip({i:r,j:n,y1:l,y2:h,w:d}):this.toggleActiveInactiveSeries(i);var g=this.getValuesToPrint({i:r,j:n});this.printLabels({i:r,j:n,values:g,ttItems:a,shared:i,e:c});var u=this.ttCtx.getElTooltip();this.ttCtx.tooltipRect.ttWidth=u.getBoundingClientRect().width,this.ttCtx.tooltipRect.ttHeight=u.getBoundingClientRect().height}},{key:\"printLabels\",value:function(t){var i,a=this,s=t.i,r=t.j,o=t.values,n=t.ttItems,l=t.shared,h=t.e,c=this.w,d=[],g=function(t){return c.globals.seriesGoals[t]&&c.globals.seriesGoals[t][r]&&Array.isArray(c.globals.seriesGoals[t][r])},u=o.xVal,p=o.zVal,f=o.xAxisTTVal,x=\"\",b=c.globals.colors[s];null!==r&&c.config.plotOptions.bar.distributed&&(b=c.globals.colors[r]);for(var v=function(t,o){var v=a.getFormatters(s);x=a.getSeriesName({fn:v.yLbTitleFormatter,index:s,seriesIndex:s,j:r}),\"treemap\"===c.config.chart.type&&(x=v.yLbTitleFormatter(String(c.config.series[s].data[r].x),{series:c.globals.series,seriesIndex:s,dataPointIndex:r,w:c}));var m=c.config.tooltip.inverseOrder?o:t;if(c.globals.axisCharts){var y=function(t){var e,i,a,s;return c.globals.isRangeData?v.yLbFormatter(null===(e=c.globals.seriesRangeStart)||void 0===e||null===(i=e[t])||void 0===i?void 0:i[r],{series:c.globals.seriesRangeStart,seriesIndex:t,dataPointIndex:r,w:c})+\" - \"+v.yLbFormatter(null===(a=c.globals.seriesRangeEnd)||void 0===a||null===(s=a[t])||void 0===s?void 0:s[r],{series:c.globals.seriesRangeEnd,seriesIndex:t,dataPointIndex:r,w:c}):v.yLbFormatter(c.globals.series[t][r],{series:c.globals.series,seriesIndex:t,dataPointIndex:r,w:c})};if(l)v=a.getFormatters(m),x=a.getSeriesName({fn:v.yLbTitleFormatter,index:m,seriesIndex:s,j:r}),b=c.globals.colors[m],i=y(m),g(m)&&(d=c.globals.seriesGoals[m][r].map((function(t){return{attrs:t,val:v.yLbFormatter(t.value,{seriesIndex:m,dataPointIndex:r,w:c})}})));else{var w,k=null==h||null===(w=h.target)||void 0===w?void 0:w.getAttribute(\"fill\");k&&(b=-1!==k.indexOf(\"url\")?document.querySelector(k.substr(4).slice(0,-1)).childNodes[0].getAttribute(\"stroke\"):k),i=y(s),g(s)&&Array.isArray(c.globals.seriesGoals[s][r])&&(d=c.globals.seriesGoals[s][r].map((function(t){return{attrs:t,val:v.yLbFormatter(t.value,{seriesIndex:s,dataPointIndex:r,w:c})}})))}}null===r&&(i=v.yLbFormatter(c.globals.series[s],e(e({},c),{},{seriesIndex:s,dataPointIndex:s}))),a.DOMHandling({i:s,t:m,j:r,ttItems:n,values:{val:i,goalVals:d,xVal:u,xAxisTTVal:f,zVal:p},seriesName:x,shared:l,pColor:b})},m=0,y=c.globals.series.length-1;m<c.globals.series.length;m++,y--)v(m,y)}},{key:\"getFormatters\",value:function(t){var e,i=this.w,a=i.globals.yLabelFormatters[t];return void 0!==i.globals.ttVal?Array.isArray(i.globals.ttVal)?(a=i.globals.ttVal[t]&&i.globals.ttVal[t].formatter,e=i.globals.ttVal[t]&&i.globals.ttVal[t].title&&i.globals.ttVal[t].title.formatter):(a=i.globals.ttVal.formatter,\"function\"==typeof i.globals.ttVal.title.formatter&&(e=i.globals.ttVal.title.formatter)):e=i.config.tooltip.y.title.formatter,\"function\"!=typeof a&&(a=i.globals.yLabelFormatters[0]?i.globals.yLabelFormatters[0]:function(t){return t}),\"function\"!=typeof e&&(e=function(t){return t}),{yLbFormatter:a,yLbTitleFormatter:e}}},{key:\"getSeriesName\",value:function(t){var e=t.fn,i=t.index,a=t.seriesIndex,s=t.j,r=this.w;return e(String(r.globals.seriesNames[i]),{series:r.globals.series,seriesIndex:a,dataPointIndex:s,w:r})}},{key:\"DOMHandling\",value:function(t){t.i;var e=t.t,i=t.j,a=t.ttItems,s=t.values,r=t.seriesName,o=t.shared,n=t.pColor,l=this.w,h=this.ttCtx,c=s.val,d=s.goalVals,g=s.xVal,u=s.xAxisTTVal,p=s.zVal,f=null;f=a[e].children,l.config.tooltip.fillSeriesColor&&(a[e].style.backgroundColor=n,f[0].style.display=\"none\"),h.showTooltipTitle&&(null===h.tooltipTitle&&(h.tooltipTitle=l.globals.dom.baseEl.querySelector(\".apexcharts-tooltip-title\")),h.tooltipTitle.innerHTML=g),h.isXAxisTooltipEnabled&&(h.xaxisTooltipText.innerHTML=\"\"!==u?u:g);var x=a[e].querySelector(\".apexcharts-tooltip-text-y-label\");x&&(x.innerHTML=r||\"\");var b=a[e].querySelector(\".apexcharts-tooltip-text-y-value\");b&&(b.innerHTML=void 0!==c?c:\"\"),f[0]&&f[0].classList.contains(\"apexcharts-tooltip-marker\")&&(l.config.tooltip.marker.fillColors&&Array.isArray(l.config.tooltip.marker.fillColors)&&(n=l.config.tooltip.marker.fillColors[e]),f[0].style.backgroundColor=n),l.config.tooltip.marker.show||(f[0].style.display=\"none\");var v=a[e].querySelector(\".apexcharts-tooltip-text-goals-label\"),m=a[e].querySelector(\".apexcharts-tooltip-text-goals-value\");if(d.length&&l.globals.seriesGoals[e]){var y=function(){var t=\"<div >\",e=\"<div>\";d.forEach((function(i,a){t+=' <div style=\"display: flex\"><span class=\"apexcharts-tooltip-marker\" style=\"background-color: '.concat(i.attrs.strokeColor,'; height: 3px; border-radius: 0; top: 5px;\"></span> ').concat(i.attrs.name,\"</div>\"),e+=\"<div>\".concat(i.val,\"</div>\")})),v.innerHTML=t+\"</div>\",m.innerHTML=e+\"</div>\"};o?l.globals.seriesGoals[e][i]&&Array.isArray(l.globals.seriesGoals[e][i])?y():(v.innerHTML=\"\",m.innerHTML=\"\"):y()}else v.innerHTML=\"\",m.innerHTML=\"\";null!==p&&(a[e].querySelector(\".apexcharts-tooltip-text-z-label\").innerHTML=l.config.tooltip.z.title,a[e].querySelector(\".apexcharts-tooltip-text-z-value\").innerHTML=void 0!==p?p:\"\");o&&f[0]&&(null==c||l.globals.ancillaryCollapsedSeriesIndices.indexOf(e)>-1||l.globals.collapsedSeriesIndices.indexOf(e)>-1?f[0].parentNode.style.display=\"none\":f[0].parentNode.style.display=l.config.tooltip.items.display)}},{key:\"toggleActiveInactiveSeries\",value:function(t){var e=this.w;if(t)this.tooltipUtil.toggleAllTooltipSeriesGroups(\"enable\");else{this.tooltipUtil.toggleAllTooltipSeriesGroups(\"disable\");var i=e.globals.dom.baseEl.querySelector(\".apexcharts-tooltip-series-group\");i&&(i.classList.add(\"apexcharts-active\"),i.style.display=e.config.tooltip.items.display)}}},{key:\"getValuesToPrint\",value:function(t){var e=t.i,i=t.j,a=this.w,s=this.ctx.series.filteredSeriesX(),r=\"\",o=\"\",n=null,l=null,h={series:a.globals.series,seriesIndex:e,dataPointIndex:i,w:a},c=a.globals.ttZFormatter;null===i?l=a.globals.series[e]:a.globals.isXNumeric&&\"treemap\"!==a.config.chart.type?(r=s[e][i],0===s[e].length&&(r=s[this.tooltipUtil.getFirstActiveXArray(s)][i])):r=void 0!==a.globals.labels[i]?a.globals.labels[i]:\"\";var d=r;a.globals.isXNumeric&&\"datetime\"===a.config.xaxis.type?r=new T(this.ctx).xLabelFormat(a.globals.ttKeyFormatter,d,d,{i:void 0,dateFormatter:new I(this.ctx).formatDate,w:this.w}):r=a.globals.isBarHorizontal?a.globals.yLabelFormatters[0](d,h):a.globals.xLabelFormatter(d,h);return void 0!==a.config.tooltip.x.formatter&&(r=a.globals.ttKeyFormatter(d,h)),a.globals.seriesZ.length>0&&a.globals.seriesZ[e].length>0&&(n=c(a.globals.seriesZ[e][i],a)),o=\"function\"==typeof a.config.xaxis.tooltip.formatter?a.globals.xaxisTooltipFormatter(d,h):r,{val:Array.isArray(l)?l.join(\" \"):l,xVal:Array.isArray(r)?r.join(\" \"):r,xAxisTTVal:Array.isArray(o)?o.join(\" \"):o,zVal:n}}},{key:\"handleCustomTooltip\",value:function(t){var e=t.i,i=t.j,a=t.y1,s=t.y2,r=t.w,o=this.ttCtx.getElTooltip(),n=r.config.tooltip.custom;Array.isArray(n)&&n[e]&&(n=n[e]),o.innerHTML=n({ctx:this.ctx,series:r.globals.series,seriesIndex:e,dataPointIndex:i,y1:a,y2:s,w:r})}}]),t}(),ut=function(){function t(e){a(this,t),this.ttCtx=e,this.ctx=e.ctx,this.w=e.w}return r(t,[{key:\"moveXCrosshairs\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.ttCtx,a=this.w,s=i.getElXCrosshairs(),r=t-i.xcrosshairsWidth/2,o=a.globals.labels.slice().length;if(null!==e&&(r=a.globals.gridWidth/o*e),null===s||a.globals.isBarHorizontal||(s.setAttribute(\"x\",r),s.setAttribute(\"x1\",r),s.setAttribute(\"x2\",r),s.setAttribute(\"y2\",a.globals.gridHeight),s.classList.add(\"apexcharts-active\")),r<0&&(r=0),r>a.globals.gridWidth&&(r=a.globals.gridWidth),i.isXAxisTooltipEnabled){var n=r;\"tickWidth\"!==a.config.xaxis.crosshairs.width&&\"barWidth\"!==a.config.xaxis.crosshairs.width||(n=r+i.xcrosshairsWidth/2),this.moveXAxisTooltip(n)}}},{key:\"moveYCrosshairs\",value:function(t){var e=this.ttCtx;null!==e.ycrosshairs&&m.setAttrs(e.ycrosshairs,{y1:t,y2:t}),null!==e.ycrosshairsHidden&&m.setAttrs(e.ycrosshairsHidden,{y1:t,y2:t})}},{key:\"moveXAxisTooltip\",value:function(t){var e=this.w,i=this.ttCtx;if(null!==i.xaxisTooltip&&0!==i.xcrosshairsWidth){i.xaxisTooltip.classList.add(\"apexcharts-active\");var a=i.xaxisOffY+e.config.xaxis.tooltip.offsetY+e.globals.translateY+1+e.config.xaxis.offsetY;if(t-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(t)){t+=e.globals.translateX;var s;s=new m(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=s.width+\"px\",i.xaxisTooltip.style.left=t+\"px\",i.xaxisTooltip.style.top=a+\"px\"}}}},{key:\"moveYAxisTooltip\",value:function(t){var e=this.w,i=this.ttCtx;null===i.yaxisTTEls&&(i.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\"));var a=parseInt(i.ycrosshairsHidden.getAttribute(\"y1\"),10),s=e.globals.translateY+a,r=i.yaxisTTEls[t].getBoundingClientRect().height,o=e.globals.translateYAxisX[t]-2;e.config.yaxis[t].opposite&&(o-=26),s-=r/2,-1===e.globals.ignoreYAxisIndexes.indexOf(t)?(i.yaxisTTEls[t].classList.add(\"apexcharts-active\"),i.yaxisTTEls[t].style.top=s+\"px\",i.yaxisTTEls[t].style.left=o+e.config.yaxis[t].tooltip.offsetX+\"px\"):i.yaxisTTEls[t].classList.remove(\"apexcharts-active\")}},{key:\"moveTooltip\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,s=this.ttCtx,r=s.getElTooltip(),o=s.tooltipRect,n=null!==i?parseFloat(i):1,l=parseFloat(t)+n+5,h=parseFloat(e)+n/2;if(l>a.globals.gridWidth/2&&(l=l-o.ttWidth-n-10),l>a.globals.gridWidth-o.ttWidth-10&&(l=a.globals.gridWidth-o.ttWidth),l<-20&&(l=-20),a.config.tooltip.followCursor){var c=s.getElGrid().getBoundingClientRect();(l=s.e.clientX-c.left)>a.globals.gridWidth/2&&(l-=s.tooltipRect.ttWidth),(h=s.e.clientY+a.globals.translateY-c.top)>a.globals.gridHeight/2&&(h-=s.tooltipRect.ttHeight)}else a.globals.isBarHorizontal||o.ttHeight/2+h>a.globals.gridHeight&&(h=a.globals.gridHeight-o.ttHeight+a.globals.translateY);isNaN(l)||(l+=a.globals.translateX,r.style.left=l+\"px\",r.style.top=h+\"px\")}},{key:\"moveMarkers\",value:function(t,e){var i=this.w,a=this.ttCtx;if(i.globals.markers.size[t]>0)for(var s=i.globals.dom.baseEl.querySelectorAll(\" .apexcharts-series[data\\\\:realIndex='\".concat(t,\"'] .apexcharts-marker\")),r=0;r<s.length;r++)parseInt(s[r].getAttribute(\"rel\"),10)===e&&(a.marker.resetPointsSize(),a.marker.enlargeCurrentPoint(e,s[r]));else a.marker.resetPointsSize(),this.moveDynamicPointOnHover(e,t)}},{key:\"moveDynamicPointOnHover\",value:function(t,e){var i,a,s=this.w,r=this.ttCtx,o=s.globals.pointsArray,n=r.tooltipUtil.getHoverMarkerSize(e),l=s.config.series[e].type;if(!l||\"column\"!==l&&\"candlestick\"!==l&&\"boxPlot\"!==l){i=o[e][t][0],a=o[e][t][1]?o[e][t][1]:0;var h=s.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(e,\"'] .apexcharts-series-markers circle\"));h&&a<s.globals.gridHeight&&a>0&&(h.setAttribute(\"r\",n),h.setAttribute(\"cx\",i),h.setAttribute(\"cy\",a)),this.moveXCrosshairs(i),r.fixedTooltip||this.moveTooltip(i,a,n)}}},{key:\"moveDynamicPointsOnHover\",value:function(t){var e,i=this.ttCtx,a=i.w,s=0,r=0,o=a.globals.pointsArray;e=new N(this.ctx).getActiveConfigSeriesIndex(\"asc\",[\"line\",\"area\",\"scatter\",\"bubble\"]);var n=i.tooltipUtil.getHoverMarkerSize(e);o[e]&&(s=o[e][t][0],r=o[e][t][1]);var l=i.tooltipUtil.getAllMarkers();if(null!==l)for(var h=0;h<a.globals.series.length;h++){var c=o[h];if(a.globals.comboCharts&&void 0===c&&l.splice(h,0,null),c&&c.length){var d=o[h][t][1],g=void 0;if(l[h].setAttribute(\"cx\",s),\"rangeArea\"===a.config.chart.type&&!a.globals.comboCharts){var u=t+a.globals.series[h].length;g=o[h][u][1],d-=Math.abs(d-g)/2}null!==d&&!isNaN(d)&&d<a.globals.gridHeight+n&&d+n>0?(l[h]&&l[h].setAttribute(\"r\",n),l[h]&&l[h].setAttribute(\"cy\",d)):l[h]&&l[h].setAttribute(\"r\",0)}}this.moveXCrosshairs(s),i.fixedTooltip||this.moveTooltip(s,r||a.globals.gridHeight,n)}},{key:\"moveStickyTooltipOverBars\",value:function(t,e){var i=this.w,a=this.ttCtx,s=i.globals.columnSeries?i.globals.columnSeries.length:i.globals.series.length,r=s>=2&&s%2==0?Math.floor(s/2):Math.floor(s/2)+1;i.globals.isBarHorizontal&&(r=new N(this.ctx).getActiveConfigSeriesIndex(\"desc\")+1);var o=i.globals.dom.baseEl.querySelector(\".apexcharts-bar-series .apexcharts-series[rel='\".concat(r,\"'] path[j='\").concat(t,\"'], .apexcharts-candlestick-series .apexcharts-series[rel='\").concat(r,\"'] path[j='\").concat(t,\"'], .apexcharts-boxPlot-series .apexcharts-series[rel='\").concat(r,\"'] path[j='\").concat(t,\"'], .apexcharts-rangebar-series .apexcharts-series[rel='\").concat(r,\"'] path[j='\").concat(t,\"']\"));o||\"number\"!=typeof e||(o=i.globals.dom.baseEl.querySelector(\".apexcharts-bar-series .apexcharts-series[data\\\\:realIndex='\".concat(e,\"'] path[j='\").concat(t,\"'],\\n        .apexcharts-candlestick-series .apexcharts-series[data\\\\:realIndex='\").concat(e,\"'] path[j='\").concat(t,\"'],\\n        .apexcharts-boxPlot-series .apexcharts-series[data\\\\:realIndex='\").concat(e,\"'] path[j='\").concat(t,\"'],\\n        .apexcharts-rangebar-series .apexcharts-series[data\\\\:realIndex='\").concat(e,\"'] path[j='\").concat(t,\"']\")));var n=o?parseFloat(o.getAttribute(\"cx\")):0,l=o?parseFloat(o.getAttribute(\"cy\")):0,h=o?parseFloat(o.getAttribute(\"barWidth\")):0,c=a.getElGrid().getBoundingClientRect(),d=o&&(o.classList.contains(\"apexcharts-candlestick-area\")||o.classList.contains(\"apexcharts-boxPlot-area\"));i.globals.isXNumeric?(o&&!d&&(n-=s%2!=0?h/2:0),o&&d&&i.globals.comboCharts&&(n-=h/2)):i.globals.isBarHorizontal||(n=a.xAxisTicksPositions[t-1]+a.dataPointsDividedWidth/2,isNaN(n)&&(n=a.xAxisTicksPositions[t]-a.dataPointsDividedWidth/2)),i.globals.isBarHorizontal?l-=a.tooltipRect.ttHeight:i.config.tooltip.followCursor?l=a.e.clientY-c.top-a.tooltipRect.ttHeight/2:l+a.tooltipRect.ttHeight+15>i.globals.gridHeight&&(l=i.globals.gridHeight),i.globals.isBarHorizontal||this.moveXCrosshairs(n),a.fixedTooltip||this.moveTooltip(n,l||i.globals.gridHeight)}}]),t}(),pt=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx,this.tooltipPosition=new ut(e)}return r(t,[{key:\"drawDynamicPoints\",value:function(){var t=this.w,e=new m(this.ctx),i=new H(this.ctx),a=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series\");a=u(a),t.config.chart.stacked&&a.sort((function(t,e){return parseFloat(t.getAttribute(\"data:realIndex\"))-parseFloat(e.getAttribute(\"data:realIndex\"))}));for(var s=0;s<a.length;s++){var r=a[s].querySelector(\".apexcharts-series-markers-wrap\");if(null!==r){var o=void 0,n=\"apexcharts-marker w\".concat((Math.random()+1).toString(36).substring(4));\"line\"!==t.config.chart.type&&\"area\"!==t.config.chart.type||t.globals.comboCharts||t.config.tooltip.intersect||(n+=\" no-pointer-events\");var l=i.getMarkerConfig({cssClass:n,seriesIndex:Number(r.getAttribute(\"data:realIndex\"))});(o=e.drawMarker(0,0,l)).node.setAttribute(\"default-marker-size\",0);var h=document.createElementNS(t.globals.SVGNS,\"g\");h.classList.add(\"apexcharts-series-markers\"),h.appendChild(o.node),r.appendChild(h)}}}},{key:\"enlargeCurrentPoint\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.w;\"bubble\"!==s.config.chart.type&&this.newPointSize(t,e);var r=e.getAttribute(\"cx\"),o=e.getAttribute(\"cy\");if(null!==i&&null!==a&&(r=i,o=a),this.tooltipPosition.moveXCrosshairs(r),!this.fixedTooltip){if(\"radar\"===s.config.chart.type){var n=this.ttCtx.getElGrid().getBoundingClientRect();r=this.ttCtx.e.clientX-n.left}this.tooltipPosition.moveTooltip(r,o,s.config.markers.hover.size)}}},{key:\"enlargePoints\",value:function(t){for(var e=this.w,i=this,a=this.ttCtx,s=t,r=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"),o=e.config.markers.hover.size,n=0;n<r.length;n++){var l=r[n].getAttribute(\"rel\"),h=r[n].getAttribute(\"index\");if(void 0===o&&(o=e.globals.markers.size[h]+e.config.markers.hover.sizeOffset),s===parseInt(l,10)){i.newPointSize(s,r[n]);var c=r[n].getAttribute(\"cx\"),d=r[n].getAttribute(\"cy\");i.tooltipPosition.moveXCrosshairs(c),a.fixedTooltip||i.tooltipPosition.moveTooltip(c,d,o)}else i.oldPointSize(r[n])}}},{key:\"newPointSize\",value:function(t,e){var i=this.w,a=i.config.markers.hover.size,s=0===t?e.parentNode.firstChild:e.parentNode.lastChild;if(\"0\"!==s.getAttribute(\"default-marker-size\")){var r=parseInt(s.getAttribute(\"index\"),10);void 0===a&&(a=i.globals.markers.size[r]+i.config.markers.hover.sizeOffset),a<0&&(a=0),s.setAttribute(\"r\",a)}}},{key:\"oldPointSize\",value:function(t){var e=parseFloat(t.getAttribute(\"default-marker-size\"));t.setAttribute(\"r\",e)}},{key:\"resetPointsSize\",value:function(){for(var t=this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"),e=0;e<t.length;e++){var i=parseFloat(t[e].getAttribute(\"default-marker-size\"));x.isNumber(i)&&i>=0?t[e].setAttribute(\"r\",i):t[e].setAttribute(\"r\",0)}}}]),t}(),ft=function(){function t(e){a(this,t),this.w=e.w;var i=this.w;this.ttCtx=e,this.isVerticalGroupedRangeBar=!i.globals.isBarHorizontal&&\"rangeBar\"===i.config.chart.type&&i.config.plotOptions.bar.rangeBarGroupRows}return r(t,[{key:\"getAttr\",value:function(t,e){return parseFloat(t.target.getAttribute(e))}},{key:\"handleHeatTreeTooltip\",value:function(t){var e=t.e,i=t.opt,a=t.x,s=t.y,r=t.type,o=this.ttCtx,n=this.w;if(e.target.classList.contains(\"apexcharts-\".concat(r,\"-rect\"))){var l=this.getAttr(e,\"i\"),h=this.getAttr(e,\"j\"),c=this.getAttr(e,\"cx\"),d=this.getAttr(e,\"cy\"),g=this.getAttr(e,\"width\"),u=this.getAttr(e,\"height\");if(o.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:l,j:h,shared:!1,e:e}),n.globals.capturedSeriesIndex=l,n.globals.capturedDataPointIndex=h,a=c+o.tooltipRect.ttWidth/2+g,s=d+o.tooltipRect.ttHeight/2-u/2,o.tooltipPosition.moveXCrosshairs(c+g/2),a>n.globals.gridWidth/2&&(a=c-o.tooltipRect.ttWidth/2+g),o.w.config.tooltip.followCursor){var p=n.globals.dom.elWrap.getBoundingClientRect();a=n.globals.clientX-p.left-(a>n.globals.gridWidth/2?o.tooltipRect.ttWidth:0),s=n.globals.clientY-p.top-(s>n.globals.gridHeight/2?o.tooltipRect.ttHeight:0)}}return{x:a,y:s}}},{key:\"handleMarkerTooltip\",value:function(t){var e,i,a=t.e,s=t.opt,r=t.x,o=t.y,n=this.w,l=this.ttCtx;if(a.target.classList.contains(\"apexcharts-marker\")){var h=parseInt(s.paths.getAttribute(\"cx\"),10),c=parseInt(s.paths.getAttribute(\"cy\"),10),d=parseFloat(s.paths.getAttribute(\"val\"));if(i=parseInt(s.paths.getAttribute(\"rel\"),10),e=parseInt(s.paths.parentNode.parentNode.parentNode.getAttribute(\"rel\"),10)-1,l.intersect){var g=x.findAncestor(s.paths,\"apexcharts-series\");g&&(e=parseInt(g.getAttribute(\"data:realIndex\"),10))}if(l.tooltipLabels.drawSeriesTexts({ttItems:s.ttItems,i:e,j:i,shared:!l.showOnIntersect&&n.config.tooltip.shared,e:a}),\"mouseup\"===a.type&&l.markerClick(a,e,i),n.globals.capturedSeriesIndex=e,n.globals.capturedDataPointIndex=i,r=h,o=c+n.globals.translateY-1.4*l.tooltipRect.ttHeight,l.w.config.tooltip.followCursor){var u=l.getElGrid().getBoundingClientRect();o=l.e.clientY+n.globals.translateY-u.top}d<0&&(o=c),l.marker.enlargeCurrentPoint(i,s.paths,r,o)}return{x:r,y:o}}},{key:\"handleBarTooltip\",value:function(t){var e,i,a=t.e,s=t.opt,r=this.w,o=this.ttCtx,n=o.getElTooltip(),l=0,h=0,c=0,d=this.getBarTooltipXY({e:a,opt:s});e=d.i;var g=d.barHeight,u=d.j;r.globals.capturedSeriesIndex=e,r.globals.capturedDataPointIndex=u,r.globals.isBarHorizontal&&o.tooltipUtil.hasBars()||!r.config.tooltip.shared?(h=d.x,c=d.y,i=Array.isArray(r.config.stroke.width)?r.config.stroke.width[e]:r.config.stroke.width,l=h):r.globals.comboCharts||r.config.tooltip.shared||(l/=2),isNaN(c)&&(c=r.globals.svgHeight-o.tooltipRect.ttHeight);var p=parseInt(s.paths.parentNode.getAttribute(\"data:realIndex\"),10),f=r.globals.isMultipleYAxis?r.config.yaxis[p]&&r.config.yaxis[p].reversed:r.config.yaxis[0].reversed;if(h+o.tooltipRect.ttWidth>r.globals.gridWidth&&!f?h-=o.tooltipRect.ttWidth:h<0&&(h=0),o.w.config.tooltip.followCursor){var x=o.getElGrid().getBoundingClientRect();c=o.e.clientY-x.top}null===o.tooltip&&(o.tooltip=r.globals.dom.baseEl.querySelector(\".apexcharts-tooltip\")),r.config.tooltip.shared||(r.globals.comboBarCount>0?o.tooltipPosition.moveXCrosshairs(l+i/2):o.tooltipPosition.moveXCrosshairs(l)),!o.fixedTooltip&&(!r.config.tooltip.shared||r.globals.isBarHorizontal&&o.tooltipUtil.hasBars())&&(f&&(h-=o.tooltipRect.ttWidth)<0&&(h=0),!f||r.globals.isBarHorizontal&&o.tooltipUtil.hasBars()||(c=c+g-2*(r.globals.series[e][u]<0?g:0)),c=c+r.globals.translateY-o.tooltipRect.ttHeight/2,n.style.left=h+r.globals.translateX+\"px\",n.style.top=c+\"px\")}},{key:\"getBarTooltipXY\",value:function(t){var e=this,i=t.e,a=t.opt,s=this.w,r=null,o=this.ttCtx,n=0,l=0,h=0,c=0,d=0,g=i.target.classList;if(g.contains(\"apexcharts-bar-area\")||g.contains(\"apexcharts-candlestick-area\")||g.contains(\"apexcharts-boxPlot-area\")||g.contains(\"apexcharts-rangebar-area\")){var u=i.target,p=u.getBoundingClientRect(),f=a.elGrid.getBoundingClientRect(),x=p.height;d=p.height;var b=p.width,v=parseInt(u.getAttribute(\"cx\"),10),m=parseInt(u.getAttribute(\"cy\"),10);c=parseFloat(u.getAttribute(\"barWidth\"));var y=\"touchmove\"===i.type?i.touches[0].clientX:i.clientX;r=parseInt(u.getAttribute(\"j\"),10),n=parseInt(u.parentNode.getAttribute(\"rel\"),10)-1;var w=u.getAttribute(\"data-range-y1\"),k=u.getAttribute(\"data-range-y2\");s.globals.comboCharts&&(n=parseInt(u.parentNode.getAttribute(\"data:realIndex\"),10));var A=function(t){return s.globals.isXNumeric?v-b/2:e.isVerticalGroupedRangeBar?v+b/2:v-o.dataPointsDividedWidth+b/2},S=function(){return m-o.dataPointsDividedHeight+x/2-o.tooltipRect.ttHeight/2};o.tooltipLabels.drawSeriesTexts({ttItems:a.ttItems,i:n,j:r,y1:w?parseInt(w,10):null,y2:k?parseInt(k,10):null,shared:!o.showOnIntersect&&s.config.tooltip.shared,e:i}),s.config.tooltip.followCursor?s.globals.isBarHorizontal?(l=y-f.left+15,h=S()):(l=A(),h=i.clientY-f.top-o.tooltipRect.ttHeight/2-15):s.globals.isBarHorizontal?((l=v)<o.xyRatios.baseLineInvertedY&&(l=v-o.tooltipRect.ttWidth),h=S()):(l=A(),h=m)}return{x:l,y:h,barHeight:d,barWidth:c,i:n,j:r}}}]),t}(),xt=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e}return r(t,[{key:\"drawXaxisTooltip\",value:function(){var t=this.w,e=this.ttCtx,i=\"bottom\"===t.config.xaxis.position;e.xaxisOffY=i?t.globals.gridHeight+1:-t.globals.xAxisHeight-t.config.xaxis.axisTicks.height+3;var a=i?\"apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom\":\"apexcharts-xaxistooltip apexcharts-xaxistooltip-top\",s=t.globals.dom.elWrap;e.isXAxisTooltipEnabled&&(null===t.globals.dom.baseEl.querySelector(\".apexcharts-xaxistooltip\")&&(e.xaxisTooltip=document.createElement(\"div\"),e.xaxisTooltip.setAttribute(\"class\",a+\" apexcharts-theme-\"+t.config.tooltip.theme),s.appendChild(e.xaxisTooltip),e.xaxisTooltipText=document.createElement(\"div\"),e.xaxisTooltipText.classList.add(\"apexcharts-xaxistooltip-text\"),e.xaxisTooltipText.style.fontFamily=t.config.xaxis.tooltip.style.fontFamily||t.config.chart.fontFamily,e.xaxisTooltipText.style.fontSize=t.config.xaxis.tooltip.style.fontSize,e.xaxisTooltip.appendChild(e.xaxisTooltipText)))}},{key:\"drawYaxisTooltip\",value:function(){for(var t=this.w,e=this.ttCtx,i=function(i){var a=t.config.yaxis[i].opposite||t.config.yaxis[i].crosshairs.opposite;e.yaxisOffX=a?t.globals.gridWidth+1:1;var s=\"apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i,a?\" apexcharts-yaxistooltip-right\":\" apexcharts-yaxistooltip-left\");t.globals.yAxisSameScaleIndices.map((function(e,a){e.map((function(e,a){a===i&&(s+=t.config.yaxis[a].show?\" \":\" apexcharts-yaxistooltip-hidden\")}))}));var r=t.globals.dom.elWrap;null===t.globals.dom.baseEl.querySelector(\".apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i))&&(e.yaxisTooltip=document.createElement(\"div\"),e.yaxisTooltip.setAttribute(\"class\",s+\" apexcharts-theme-\"+t.config.tooltip.theme),r.appendChild(e.yaxisTooltip),0===i&&(e.yaxisTooltipText=[]),e.yaxisTooltipText[i]=document.createElement(\"div\"),e.yaxisTooltipText[i].classList.add(\"apexcharts-yaxistooltip-text\"),e.yaxisTooltip.appendChild(e.yaxisTooltipText[i]))},a=0;a<t.config.yaxis.length;a++)i(a)}},{key:\"setXCrosshairWidth\",value:function(){var t=this.w,e=this.ttCtx,i=e.getElXCrosshairs();if(e.xcrosshairsWidth=parseInt(t.config.xaxis.crosshairs.width,10),t.globals.comboCharts){var a=t.globals.dom.baseEl.querySelector(\".apexcharts-bar-area\");if(null!==a&&\"barWidth\"===t.config.xaxis.crosshairs.width){var s=parseFloat(a.getAttribute(\"barWidth\"));e.xcrosshairsWidth=s}else if(\"tickWidth\"===t.config.xaxis.crosshairs.width){var r=t.globals.labels.length;e.xcrosshairsWidth=t.globals.gridWidth/r}}else if(\"tickWidth\"===t.config.xaxis.crosshairs.width){var o=t.globals.labels.length;e.xcrosshairsWidth=t.globals.gridWidth/o}else if(\"barWidth\"===t.config.xaxis.crosshairs.width){var n=t.globals.dom.baseEl.querySelector(\".apexcharts-bar-area\");if(null!==n){var l=parseFloat(n.getAttribute(\"barWidth\"));e.xcrosshairsWidth=l}else e.xcrosshairsWidth=1}t.globals.isBarHorizontal&&(e.xcrosshairsWidth=0),null!==i&&e.xcrosshairsWidth>0&&i.setAttribute(\"width\",e.xcrosshairsWidth)}},{key:\"handleYCrosshair\",value:function(){var t=this.w,e=this.ttCtx;e.ycrosshairs=t.globals.dom.baseEl.querySelector(\".apexcharts-ycrosshairs\"),e.ycrosshairsHidden=t.globals.dom.baseEl.querySelector(\".apexcharts-ycrosshairs-hidden\")}},{key:\"drawYaxisTooltipText\",value:function(t,e,i){var a=this.ttCtx,s=this.w,r=s.globals.yLabelFormatters[t];if(a.yaxisTooltips[t]){var o=a.getElGrid().getBoundingClientRect(),n=(e-o.top)*i.yRatio[t],l=s.globals.maxYArr[t]-s.globals.minYArr[t],h=s.globals.minYArr[t]+(l-n);a.tooltipPosition.moveYCrosshairs(e-o.top),a.yaxisTooltipText[t].innerHTML=r(h),a.tooltipPosition.moveYAxisTooltip(t)}}}]),t}(),bt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.tConfig=i.config.tooltip,this.tooltipUtil=new dt(this),this.tooltipLabels=new gt(this),this.tooltipPosition=new ut(this),this.marker=new pt(this),this.intersect=new ft(this),this.axesTooltip=new xt(this),this.showOnIntersect=this.tConfig.intersect,this.showTooltipTitle=this.tConfig.x.show,this.fixedTooltip=this.tConfig.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarShared=!i.globals.isBarHorizontal&&this.tConfig.shared,this.lastHoverTime=Date.now()}return r(t,[{key:\"getElTooltip\",value:function(t){return t||(t=this),t.w.globals.dom.baseEl?t.w.globals.dom.baseEl.querySelector(\".apexcharts-tooltip\"):null}},{key:\"getElXCrosshairs\",value:function(){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-xcrosshairs\")}},{key:\"getElGrid\",value:function(){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-grid\")}},{key:\"drawTooltip\",value:function(t){var e=this.w;this.xyRatios=t,this.isXAxisTooltipEnabled=e.config.xaxis.tooltip.enabled&&e.globals.axisCharts,this.yaxisTooltips=e.config.yaxis.map((function(t,i){return!!(t.show&&t.tooltip.enabled&&e.globals.axisCharts)})),this.allTooltipSeriesGroups=[],e.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement(\"div\");if(i.classList.add(\"apexcharts-tooltip\"),e.config.tooltip.cssClass&&i.classList.add(e.config.tooltip.cssClass),i.classList.add(\"apexcharts-theme-\".concat(this.tConfig.theme)),e.globals.dom.elWrap.appendChild(i),e.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var a=new V(this.ctx);this.xAxisTicksPositions=a.getXAxisTicksPositions()}if(!e.globals.comboCharts&&!this.tConfig.intersect&&\"rangeBar\"!==e.config.chart.type||this.tConfig.shared||(this.showOnIntersect=!0),0!==e.config.markers.size&&0!==e.globals.markers.largestSize||this.marker.drawDynamicPoints(this),e.globals.collapsedSeries.length!==e.globals.series.length){this.dataPointsDividedHeight=e.globals.gridHeight/e.globals.dataPoints,this.dataPointsDividedWidth=e.globals.gridWidth/e.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement(\"div\"),this.tooltipTitle.classList.add(\"apexcharts-tooltip-title\"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||e.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var s=e.globals.series.length;(e.globals.xyCharts||e.globals.comboCharts)&&this.tConfig.shared&&(s=this.showOnIntersect?1:e.globals.series.length),this.legendLabels=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-legend-text\"),this.ttItems=this.createTTElements(s),this.addSVGEvents()}}},{key:\"createTTElements\",value:function(t){for(var e=this,i=this.w,a=[],s=this.getElTooltip(),r=function(r){var o=document.createElement(\"div\");o.classList.add(\"apexcharts-tooltip-series-group\"),o.style.order=i.config.tooltip.inverseOrder?t-r:r+1,e.tConfig.shared&&e.tConfig.enabledOnSeries&&Array.isArray(e.tConfig.enabledOnSeries)&&e.tConfig.enabledOnSeries.indexOf(r)<0&&o.classList.add(\"apexcharts-tooltip-series-group-hidden\");var n=document.createElement(\"span\");n.classList.add(\"apexcharts-tooltip-marker\"),n.style.backgroundColor=i.globals.colors[r],o.appendChild(n);var l=document.createElement(\"div\");l.classList.add(\"apexcharts-tooltip-text\"),l.style.fontFamily=e.tConfig.style.fontFamily||i.config.chart.fontFamily,l.style.fontSize=e.tConfig.style.fontSize,[\"y\",\"goals\",\"z\"].forEach((function(t){var e=document.createElement(\"div\");e.classList.add(\"apexcharts-tooltip-\".concat(t,\"-group\"));var i=document.createElement(\"span\");i.classList.add(\"apexcharts-tooltip-text-\".concat(t,\"-label\")),e.appendChild(i);var a=document.createElement(\"span\");a.classList.add(\"apexcharts-tooltip-text-\".concat(t,\"-value\")),e.appendChild(a),l.appendChild(e)})),o.appendChild(l),s.appendChild(o),a.push(o)},o=0;o<t;o++)r(o);return a}},{key:\"addSVGEvents\",value:function(){var t=this.w,e=t.config.chart.type,i=this.getElTooltip(),a=!(\"bar\"!==e&&\"candlestick\"!==e&&\"boxPlot\"!==e&&\"rangeBar\"!==e),s=\"area\"===e||\"line\"===e||\"scatter\"===e||\"bubble\"===e||\"radar\"===e,r=t.globals.dom.Paper.node,o=this.getElGrid();o&&(this.seriesBound=o.getBoundingClientRect());var n,l=[],h=[],c={hoverArea:r,elGrid:o,tooltipEl:i,tooltipY:l,tooltipX:h,ttItems:this.ttItems};if(t.globals.axisCharts&&(s?n=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series[data\\\\:longestSeries='true'] .apexcharts-marker\"):a?n=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-boxPlot-area, .apexcharts-series .apexcharts-rangebar-area\"):\"heatmap\"!==e&&\"treemap\"!==e||(n=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series .apexcharts-heatmap, .apexcharts-series .apexcharts-treemap\")),n&&n.length))for(var d=0;d<n.length;d++)l.push(n[d].getAttribute(\"cy\")),h.push(n[d].getAttribute(\"cx\"));if(t.globals.xyCharts&&!this.showOnIntersect||t.globals.comboCharts&&!this.showOnIntersect||a&&this.tooltipUtil.hasBars()&&this.tConfig.shared)this.addPathsEventListeners([r],c);else if(a&&!t.globals.comboCharts||s&&this.showOnIntersect)this.addDatapointEventsListeners(c);else if(!t.globals.axisCharts||\"heatmap\"===e||\"treemap\"===e){var g=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series\");this.addPathsEventListeners(g,c)}if(this.showOnIntersect){var u=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-line-series .apexcharts-marker, .apexcharts-area-series .apexcharts-marker\");u.length>0&&this.addPathsEventListeners(u,c),this.tooltipUtil.hasBars()&&!this.tConfig.shared&&this.addDatapointEventsListeners(c)}}},{key:\"drawFixedTooltipRect\",value:function(){var t=this.w,e=this.getElTooltip(),i=e.getBoundingClientRect(),a=i.width+10,s=i.height+10,r=this.tConfig.fixed.offsetX,o=this.tConfig.fixed.offsetY,n=this.tConfig.fixed.position.toLowerCase();return n.indexOf(\"right\")>-1&&(r=r+t.globals.svgWidth-a+10),n.indexOf(\"bottom\")>-1&&(o=o+t.globals.svgHeight-s-10),e.style.left=r+\"px\",e.style.top=o+\"px\",{x:r,y:o,ttWidth:a,ttHeight:s}}},{key:\"addDatapointEventsListeners\",value:function(t){var e=this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area\");this.addPathsEventListeners(e,t)}},{key:\"addPathsEventListeners\",value:function(t,e){for(var i=this,a=function(a){var s={paths:t[a],tooltipEl:e.tooltipEl,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:e.ttItems};[\"mousemove\",\"mouseup\",\"touchmove\",\"mouseout\",\"touchend\"].map((function(e){return t[a].addEventListener(e,i.onSeriesHover.bind(i,s),{capture:!1,passive:!0})}))},s=0;s<t.length;s++)a(s)}},{key:\"onSeriesHover\",value:function(t,e){var i=this,a=Date.now()-this.lastHoverTime;a>=100?this.seriesHover(t,e):(clearTimeout(this.seriesHoverTimeout),this.seriesHoverTimeout=setTimeout((function(){i.seriesHover(t,e)}),100-a))}},{key:\"seriesHover\",value:function(t,e){var i=this;this.lastHoverTime=Date.now();var a=[],s=this.w;s.config.chart.group&&(a=this.ctx.getGroupedCharts()),s.globals.axisCharts&&(s.globals.minX===-1/0&&s.globals.maxX===1/0||0===s.globals.dataPoints)||(a.length?a.forEach((function(a){var s=i.getElTooltip(a),r={paths:t.paths,tooltipEl:s,tooltipY:t.tooltipY,tooltipX:t.tooltipX,elGrid:t.elGrid,hoverArea:t.hoverArea,ttItems:a.w.globals.tooltip.ttItems};a.w.globals.minX===i.w.globals.minX&&a.w.globals.maxX===i.w.globals.maxX&&a.w.globals.tooltip.seriesHoverByContext({chartCtx:a,ttCtx:a.w.globals.tooltip,opt:r,e:e})})):this.seriesHoverByContext({chartCtx:this.ctx,ttCtx:this.w.globals.tooltip,opt:t,e:e}))}},{key:\"seriesHoverByContext\",value:function(t){var e=t.chartCtx,i=t.ttCtx,a=t.opt,s=t.e,r=e.w,o=this.getElTooltip();if(o){if(i.tooltipRect={x:0,y:0,ttWidth:o.getBoundingClientRect().width,ttHeight:o.getBoundingClientRect().height},i.e=s,i.tooltipUtil.hasBars()&&!r.globals.comboCharts&&!i.isBarShared)if(this.tConfig.onDatasetHover.highlightDataSeries)new N(e).toggleSeriesOnHover(s,s.target.parentNode);i.fixedTooltip&&i.drawFixedTooltipRect(),r.globals.axisCharts?i.axisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect}):i.nonAxisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect})}}},{key:\"axisChartsTooltips\",value:function(t){var e,i,a=t.e,s=t.opt,r=this.w,o=s.elGrid.getBoundingClientRect(),n=\"touchmove\"===a.type?a.touches[0].clientX:a.clientX,l=\"touchmove\"===a.type?a.touches[0].clientY:a.clientY;if(this.clientY=l,this.clientX=n,r.globals.capturedSeriesIndex=-1,r.globals.capturedDataPointIndex=-1,l<o.top||l>o.top+o.height)this.handleMouseOut(s);else{if(Array.isArray(this.tConfig.enabledOnSeries)&&!r.config.tooltip.shared){var h=parseInt(s.paths.getAttribute(\"index\"),10);if(this.tConfig.enabledOnSeries.indexOf(h)<0)return void this.handleMouseOut(s)}var c=this.getElTooltip(),d=this.getElXCrosshairs(),g=r.globals.xyCharts||\"bar\"===r.config.chart.type&&!r.globals.isBarHorizontal&&this.tooltipUtil.hasBars()&&this.tConfig.shared||r.globals.comboCharts&&this.tooltipUtil.hasBars();if(\"mousemove\"===a.type||\"touchmove\"===a.type||\"mouseup\"===a.type){if(r.globals.collapsedSeries.length+r.globals.ancillaryCollapsedSeries.length===r.globals.series.length)return;null!==d&&d.classList.add(\"apexcharts-active\");var u=this.yaxisTooltips.filter((function(t){return!0===t}));if(null!==this.ycrosshairs&&u.length&&this.ycrosshairs.classList.add(\"apexcharts-active\"),g&&!this.showOnIntersect)this.handleStickyTooltip(a,n,l,s);else if(\"heatmap\"===r.config.chart.type||\"treemap\"===r.config.chart.type){var p=this.intersect.handleHeatTreeTooltip({e:a,opt:s,x:e,y:i,type:r.config.chart.type});e=p.x,i=p.y,c.style.left=e+\"px\",c.style.top=i+\"px\"}else this.tooltipUtil.hasBars()&&this.intersect.handleBarTooltip({e:a,opt:s}),this.tooltipUtil.hasMarkers()&&this.intersect.handleMarkerTooltip({e:a,opt:s,x:e,y:i});if(this.yaxisTooltips.length)for(var f=0;f<r.config.yaxis.length;f++)this.axesTooltip.drawYaxisTooltipText(f,l,this.xyRatios);s.tooltipEl.classList.add(\"apexcharts-active\")}else\"mouseout\"!==a.type&&\"touchend\"!==a.type||this.handleMouseOut(s)}}},{key:\"nonAxisChartsTooltips\",value:function(t){var e=t.e,i=t.opt,a=t.tooltipRect,s=this.w,r=i.paths.getAttribute(\"rel\"),o=this.getElTooltip(),n=s.globals.dom.elWrap.getBoundingClientRect();if(\"mousemove\"===e.type||\"touchmove\"===e.type){o.classList.add(\"apexcharts-active\"),this.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:parseInt(r,10)-1,shared:!1});var l=s.globals.clientX-n.left-a.ttWidth/2,h=s.globals.clientY-n.top-a.ttHeight-10;if(o.style.left=l+\"px\",o.style.top=h+\"px\",s.config.legend.tooltipHoverFormatter){var c=r-1,d=(0,s.config.legend.tooltipHoverFormatter)(this.legendLabels[c].getAttribute(\"data:default-text\"),{seriesIndex:c,dataPointIndex:c,w:s});this.legendLabels[c].innerHTML=d}}else\"mouseout\"!==e.type&&\"touchend\"!==e.type||(o.classList.remove(\"apexcharts-active\"),s.config.legend.tooltipHoverFormatter&&this.legendLabels.forEach((function(t){var e=t.getAttribute(\"data:default-text\");t.innerHTML=decodeURIComponent(e)})))}},{key:\"handleStickyTooltip\",value:function(t,e,i,a){var s=this.w,r=this.tooltipUtil.getNearestValues({context:this,hoverArea:a.hoverArea,elGrid:a.elGrid,clientX:e,clientY:i}),o=r.j,n=r.capturedSeries;s.globals.collapsedSeriesIndices.includes(n)&&(n=null);var l=a.elGrid.getBoundingClientRect();if(r.hoverX<0||r.hoverX>l.width)this.handleMouseOut(a);else if(null!==n)this.handleStickyCapturedSeries(t,n,a,o);else if(this.tooltipUtil.isXoverlap(o)||s.globals.isBarHorizontal){var h=s.globals.series.findIndex((function(t,e){return!s.globals.collapsedSeriesIndices.includes(e)}));this.create(t,this,h,o,a.ttItems)}}},{key:\"handleStickyCapturedSeries\",value:function(t,e,i,a){var s=this.w;if(!this.tConfig.shared&&null===s.globals.series[e][a])return void this.handleMouseOut(i);if(void 0!==s.globals.series[e][a])this.tConfig.shared&&this.tooltipUtil.isXoverlap(a)&&this.tooltipUtil.isInitialSeriesSameLen()?this.create(t,this,e,a,i.ttItems):this.create(t,this,e,a,i.ttItems,!1);else if(this.tooltipUtil.isXoverlap(a)){var r=s.globals.series.findIndex((function(t,e){return!s.globals.collapsedSeriesIndices.includes(e)}));this.create(t,this,r,a,i.ttItems)}}},{key:\"deactivateHoverFilter\",value:function(){for(var t=this.w,e=new m(this.ctx),i=t.globals.dom.Paper.select(\".apexcharts-bar-area\"),a=0;a<i.length;a++)e.pathMouseLeave(i[a])}},{key:\"handleMouseOut\",value:function(t){var e=this.w,i=this.getElXCrosshairs();if(t.tooltipEl.classList.remove(\"apexcharts-active\"),this.deactivateHoverFilter(),\"bubble\"!==e.config.chart.type&&this.marker.resetPointsSize(),null!==i&&i.classList.remove(\"apexcharts-active\"),null!==this.ycrosshairs&&this.ycrosshairs.classList.remove(\"apexcharts-active\"),this.isXAxisTooltipEnabled&&this.xaxisTooltip.classList.remove(\"apexcharts-active\"),this.yaxisTooltips.length){null===this.yaxisTTEls&&(this.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\"));for(var a=0;a<this.yaxisTTEls.length;a++)this.yaxisTTEls[a].classList.remove(\"apexcharts-active\")}e.config.legend.tooltipHoverFormatter&&this.legendLabels.forEach((function(t){var e=t.getAttribute(\"data:default-text\");t.innerHTML=decodeURIComponent(e)}))}},{key:\"markerClick\",value:function(t,e,i){var a=this.w;\"function\"==typeof a.config.chart.events.markerClick&&a.config.chart.events.markerClick(t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:a}),this.ctx.events.fireEvent(\"markerClick\",[t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:a}])}},{key:\"create\",value:function(t,i,a,s,r){var o,n,l,h,c,d,g,u,p,f,x,b,v,y,w,k,A=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,S=this.w,C=i;\"mouseup\"===t.type&&this.markerClick(t,a,s),null===A&&(A=this.tConfig.shared);var L=this.tooltipUtil.hasMarkers(a),P=this.tooltipUtil.getElBars();if(S.config.legend.tooltipHoverFormatter){var I=S.config.legend.tooltipHoverFormatter,T=Array.from(this.legendLabels);T.forEach((function(t){var e=t.getAttribute(\"data:default-text\");t.innerHTML=decodeURIComponent(e)}));for(var M=0;M<T.length;M++){var X=T[M],z=parseInt(X.getAttribute(\"i\"),10),E=decodeURIComponent(X.getAttribute(\"data:default-text\")),Y=I(E,{seriesIndex:A?z:a,dataPointIndex:s,w:S});if(A)X.innerHTML=S.globals.collapsedSeriesIndices.indexOf(z)<0?Y:E;else if(X.innerHTML=z===a?Y:E,a===z)break}}var F=e(e({ttItems:r,i:a,j:s},void 0!==(null===(o=S.globals.seriesRange)||void 0===o||null===(n=o[a])||void 0===n||null===(l=n[s])||void 0===l||null===(h=l.y[0])||void 0===h?void 0:h.y1)&&{y1:null===(c=S.globals.seriesRange)||void 0===c||null===(d=c[a])||void 0===d||null===(g=d[s])||void 0===g||null===(u=g.y[0])||void 0===u?void 0:u.y1}),void 0!==(null===(p=S.globals.seriesRange)||void 0===p||null===(f=p[a])||void 0===f||null===(x=f[s])||void 0===x||null===(b=x.y[0])||void 0===b?void 0:b.y2)&&{y2:null===(v=S.globals.seriesRange)||void 0===v||null===(y=v[a])||void 0===y||null===(w=y[s])||void 0===w||null===(k=w.y[0])||void 0===k?void 0:k.y2});if(A){if(C.tooltipLabels.drawSeriesTexts(e(e({},F),{},{shared:!this.showOnIntersect&&this.tConfig.shared})),L)S.globals.markers.largestSize>0?C.marker.enlargePoints(s):C.tooltipPosition.moveDynamicPointsOnHover(s);else if(this.tooltipUtil.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(P),this.barSeriesHeight>0)){var R=new m(this.ctx),H=S.globals.dom.Paper.select(\".apexcharts-bar-area[j='\".concat(s,\"']\"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(s,a);for(var D=0;D<H.length;D++)R.pathMouseEnter(H[D])}}else C.tooltipLabels.drawSeriesTexts(e({shared:!1},F)),this.tooltipUtil.hasBars()&&C.tooltipPosition.moveStickyTooltipOverBars(s,a),L&&C.tooltipPosition.moveMarkers(a,s)}}]),t}(),vt=function(){function t(e){a(this,t),this.w=e.w,this.barCtx=e,this.totalFormatter=this.w.config.plotOptions.bar.dataLabels.total.formatter,this.totalFormatter||(this.totalFormatter=this.w.config.dataLabels.formatter)}return r(t,[{key:\"handleBarDataLabels\",value:function(t){var e=t.x,i=t.y,a=t.y1,s=t.y2,r=t.i,o=t.j,n=t.realIndex,l=t.groupIndex,h=t.series,c=t.barHeight,d=t.barWidth,g=t.barXPosition,u=t.barYPosition,p=t.visibleSeries,f=t.renderedPath,x=this.w,b=new m(this.barCtx.ctx),v=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[n]:this.barCtx.strokeWidth,y=e+parseFloat(d*p),w=i+parseFloat(c*p);x.globals.isXNumeric&&!x.globals.isBarHorizontal&&(y=e+parseFloat(d*(p+1)),w=i+parseFloat(c*(p+1))-v);var k,A=null,S=e,C=i,L={},P=x.config.dataLabels,I=this.barCtx.barOptions.dataLabels,T=this.barCtx.barOptions.dataLabels.total;void 0!==u&&this.barCtx.isRangeBar&&(w=u,C=u),void 0!==g&&this.barCtx.isVerticalGroupedRangeBar&&(y=g,S=g);var M=P.offsetX,X=P.offsetY,z={width:0,height:0};if(x.config.dataLabels.enabled){var E=this.barCtx.series[r][o];z=b.getTextRects(x.globals.yLabelFormatters[0](E),parseFloat(P.style.fontSize))}var Y={x:e,y:i,i:r,j:o,realIndex:n,groupIndex:l||-1,renderedPath:f,bcx:y,bcy:w,barHeight:c,barWidth:d,textRects:z,strokeWidth:v,dataLabelsX:S,dataLabelsY:C,dataLabelsConfig:P,barDataLabelsConfig:I,barTotalDataLabelsConfig:T,offX:M,offY:X};return L=this.barCtx.isHorizontal?this.calculateBarsDataLabelsPosition(Y):this.calculateColumnsDataLabelsPosition(Y),f.attr({cy:L.bcy,cx:L.bcx,j:o,val:h[r][o],barHeight:c,barWidth:d}),k=this.drawCalculatedDataLabels({x:L.dataLabelsX,y:L.dataLabelsY,val:this.barCtx.isRangeBar?[a,s]:h[r][o],i:n,j:o,barWidth:d,barHeight:c,textRects:z,dataLabelsConfig:P}),x.config.chart.stacked&&T.enabled&&(A=this.drawTotalDataLabels({x:L.totalDataLabelsX,y:L.totalDataLabelsY,realIndex:n,textAnchor:L.totalDataLabelsAnchor,val:this.getStackedTotalDataLabel({realIndex:n,j:o}),dataLabelsConfig:P,barTotalDataLabelsConfig:T})),{dataLabels:k,totalDataLabels:A}}},{key:\"getStackedTotalDataLabel\",value:function(t){var i=t.realIndex,a=t.j,s=this.w,r=this.barCtx.stackedSeriesTotals[a];return this.totalFormatter&&(r=this.totalFormatter(r,e(e({},s),{},{seriesIndex:i,dataPointIndex:a,w:s}))),r}},{key:\"calculateColumnsDataLabelsPosition\",value:function(t){var e,i,a=this.w,s=t.i,r=t.j,o=t.realIndex,n=t.groupIndex,l=t.y,h=t.bcx,c=t.barWidth,d=t.barHeight,g=t.textRects,u=t.dataLabelsX,p=t.dataLabelsY,f=t.dataLabelsConfig,x=t.barDataLabelsConfig,b=t.barTotalDataLabelsConfig,v=t.strokeWidth,y=t.offX,w=t.offY;d=Math.abs(d);var k=\"vertical\"===a.config.plotOptions.bar.dataLabels.orientation;h=h-v/2+(-1!==n?n*c:0);var A=a.globals.gridWidth/a.globals.dataPoints;if(this.barCtx.isVerticalGroupedRangeBar?u+=c/2:u=a.globals.isXNumeric?h-c/2+y:h-A+c/2+y,k){u=u+g.height/2-v/2-2}var S=this.barCtx.series[s][r]<0,C=l;switch(this.barCtx.isReversed&&(C=l-d+(S?2*d:0),l-=d),x.position){case\"center\":p=k?S?C+d/2+w:C+d/2-w:S?C-d/2+g.height/2+w:C+d/2+g.height/2-w;break;case\"bottom\":p=k?S?C+d+w:C+d-w:S?C-d+g.height+v+w:C+d-g.height/2+v-w;break;case\"top\":p=k?S?C+w:C-w:S?C-g.height/2-w:C+g.height+w}if(this.barCtx.lastActiveBarSerieIndex===o&&b.enabled){var L=new m(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:o,j:r}),f.fontSize);e=S?C-L.height/2-w-b.offsetY+18:C+L.height+w+b.offsetY-18,i=u+b.offsetX}return a.config.chart.stacked||(p<0?p=0+v:p+g.height/3>a.globals.gridHeight&&(p=a.globals.gridHeight-v)),{bcx:h,bcy:l,dataLabelsX:u,dataLabelsY:p,totalDataLabelsX:i,totalDataLabelsY:e,totalDataLabelsAnchor:\"middle\"}}},{key:\"calculateBarsDataLabelsPosition\",value:function(t){var e=this.w,i=t.x,a=t.i,s=t.j,r=t.realIndex,o=t.groupIndex,n=t.bcy,l=t.barHeight,h=t.barWidth,c=t.textRects,d=t.dataLabelsX,g=t.strokeWidth,u=t.dataLabelsConfig,p=t.barDataLabelsConfig,f=t.barTotalDataLabelsConfig,x=t.offX,b=t.offY,v=e.globals.gridHeight/e.globals.dataPoints;h=Math.abs(h);var y,w,k=(n+=-1!==o?o*l:0)-(this.barCtx.isRangeBar?0:v)+l/2+c.height/2+b-3,A=\"start\",S=this.barCtx.series[a][s]<0,C=i;switch(this.barCtx.isReversed&&(C=i+h-(S?2*h:0),i=e.globals.gridWidth-h),p.position){case\"center\":d=S?C+h/2-x:Math.max(c.width/2,C-h/2)+x;break;case\"bottom\":d=S?C+h-g-Math.round(c.width/2)-x:C-h+g+Math.round(c.width/2)+x;break;case\"top\":d=S?C-g+Math.round(c.width/2)-x:C-g-Math.round(c.width/2)+x}if(this.barCtx.lastActiveBarSerieIndex===r&&f.enabled){var L=new m(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:r,j:s}),u.fontSize);S?(y=C-g+Math.round(L.width/2)-x-f.offsetX-15,A=\"end\"):y=C-g-Math.round(L.width/2)+x+f.offsetX+15,w=k+f.offsetY}return e.config.chart.stacked||(d<0?d=d+c.width+g:d+c.width/2>e.globals.gridWidth&&(d=e.globals.gridWidth-c.width-g)),{bcx:i,bcy:n,dataLabelsX:d,dataLabelsY:k,totalDataLabelsX:y,totalDataLabelsY:w,totalDataLabelsAnchor:A}}},{key:\"drawCalculatedDataLabels\",value:function(t){var i=t.x,a=t.y,s=t.val,r=t.i,o=t.j,n=t.textRects,l=t.barHeight,h=t.barWidth,c=t.dataLabelsConfig,d=this.w,g=\"rotate(0)\";\"vertical\"===d.config.plotOptions.bar.dataLabels.orientation&&(g=\"rotate(-90, \".concat(i,\", \").concat(a,\")\"));var u=new O(this.barCtx.ctx),p=new m(this.barCtx.ctx),f=c.formatter,x=null,b=d.globals.collapsedSeriesIndices.indexOf(r)>-1;if(c.enabled&&!b){x=p.group({class:\"apexcharts-data-labels\",transform:g});var v=\"\";void 0!==s&&(v=f(s,e(e({},d),{},{seriesIndex:r,dataPointIndex:o,w:d}))),!s&&d.config.plotOptions.bar.hideZeroBarsWhenGrouped&&(v=\"\");var y=d.globals.series[r][o]<0,w=d.config.plotOptions.bar.dataLabels.position;if(\"vertical\"===d.config.plotOptions.bar.dataLabels.orientation&&(\"top\"===w&&(c.textAnchor=y?\"end\":\"start\"),\"center\"===w&&(c.textAnchor=\"middle\"),\"bottom\"===w&&(c.textAnchor=y?\"end\":\"start\")),this.barCtx.isRangeBar&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels)h<p.getTextRects(v,parseFloat(c.style.fontSize)).width&&(v=\"\");d.config.chart.stacked&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels&&(this.barCtx.isHorizontal?n.width/1.6>Math.abs(h)&&(v=\"\"):n.height/1.6>Math.abs(l)&&(v=\"\"));var k=e({},c);this.barCtx.isHorizontal&&s<0&&(\"start\"===c.textAnchor?k.textAnchor=\"end\":\"end\"===c.textAnchor&&(k.textAnchor=\"start\")),u.plotDataLabelsText({x:i,y:a,text:v,i:r,j:o,parent:x,dataLabelsConfig:k,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return x}},{key:\"drawTotalDataLabels\",value:function(t){var e,i=t.x,a=t.y,s=t.val,r=t.realIndex,o=t.textAnchor,n=t.barTotalDataLabelsConfig,l=new m(this.barCtx.ctx);return n.enabled&&void 0!==i&&void 0!==a&&this.barCtx.lastActiveBarSerieIndex===r&&(e=l.drawText({x:i,y:a,foreColor:n.style.color,text:s,textAnchor:o,fontFamily:n.style.fontFamily,fontSize:n.style.fontSize,fontWeight:n.style.fontWeight})),e}}]),t}(),mt=function(){function t(e){a(this,t),this.w=e.w,this.barCtx=e}return r(t,[{key:\"initVariables\",value:function(t){var e=this.w;this.barCtx.series=t,this.barCtx.totalItems=0,this.barCtx.seriesLen=0,this.barCtx.visibleI=-1,this.barCtx.visibleItems=1;for(var i=0;i<t.length;i++)if(t[i].length>0&&(this.barCtx.seriesLen=this.barCtx.seriesLen+1,this.barCtx.totalItems+=t[i].length),e.globals.isXNumeric)for(var a=0;a<t[i].length;a++)e.globals.seriesX[i][a]>e.globals.minX&&e.globals.seriesX[i][a]<e.globals.maxX&&this.barCtx.visibleItems++;else this.barCtx.visibleItems=e.globals.dataPoints;0===this.barCtx.seriesLen&&(this.barCtx.seriesLen=1),this.barCtx.zeroSerieses=[],e.globals.comboCharts||this.checkZeroSeries({series:t})}},{key:\"initialPositions\",value:function(){var t,e,i,a,s,r,o,n,l=this.w,h=l.globals.dataPoints;this.barCtx.isRangeBar&&(h=l.globals.labels.length);var c=this.barCtx.seriesLen;if(l.config.plotOptions.bar.rangeBarGroupRows&&(c=1),this.barCtx.isHorizontal)s=(i=l.globals.gridHeight/h)/c,l.globals.isXNumeric&&(s=(i=l.globals.gridHeight/this.barCtx.totalItems)/this.barCtx.seriesLen),s=s*parseInt(this.barCtx.barOptions.barHeight,10)/100,-1===String(this.barCtx.barOptions.barHeight).indexOf(\"%\")&&(s=parseInt(this.barCtx.barOptions.barHeight,10)),n=this.barCtx.baseLineInvertedY+l.globals.padHorizontal+(this.barCtx.isReversed?l.globals.gridWidth:0)-(this.barCtx.isReversed?2*this.barCtx.baseLineInvertedY:0),this.barCtx.isFunnel&&(n=l.globals.gridWidth/2),e=(i-s*this.barCtx.seriesLen)/2;else{if(a=l.globals.gridWidth/this.barCtx.visibleItems,l.config.xaxis.convertedCatToNumeric&&(a=l.globals.gridWidth/l.globals.dataPoints),r=a/c*parseInt(this.barCtx.barOptions.columnWidth,10)/100,l.globals.isXNumeric){var d=this.barCtx.xRatio;l.config.xaxis.convertedCatToNumeric&&(d=this.barCtx.initialXRatio),l.globals.minXDiff&&.5!==l.globals.minXDiff&&l.globals.minXDiff/d>0&&(a=l.globals.minXDiff/d),(r=a/c*parseInt(this.barCtx.barOptions.columnWidth,10)/100)<1&&(r=1)}-1===String(this.barCtx.barOptions.columnWidth).indexOf(\"%\")&&(r=parseInt(this.barCtx.barOptions.columnWidth,10)),o=l.globals.gridHeight-this.barCtx.baseLineY[this.barCtx.yaxisIndex]-(this.barCtx.isReversed?l.globals.gridHeight:0)+(this.barCtx.isReversed?2*this.barCtx.baseLineY[this.barCtx.yaxisIndex]:0),t=l.globals.padHorizontal+(a-r*this.barCtx.seriesLen)/2}return{x:t,y:e,yDivision:i,xDivision:a,barHeight:s,barWidth:r,zeroH:o,zeroW:n}}},{key:\"initializeStackedPrevVars\",value:function(t){var e=t.w;e.globals.hasSeriesGroups?e.globals.seriesGroups.forEach((function(e){t[e]||(t[e]={}),t[e].prevY=[],t[e].prevX=[],t[e].prevYF=[],t[e].prevXF=[],t[e].prevYVal=[],t[e].prevXVal=[]})):(t.prevY=[],t.prevX=[],t.prevYF=[],t.prevXF=[],t.prevYVal=[],t.prevXVal=[])}},{key:\"initializeStackedXYVars\",value:function(t){var e=t.w;e.globals.hasSeriesGroups?e.globals.seriesGroups.forEach((function(e){t[e]||(t[e]={}),t[e].xArrj=[],t[e].xArrjF=[],t[e].xArrjVal=[],t[e].yArrj=[],t[e].yArrjF=[],t[e].yArrjVal=[]})):(t.xArrj=[],t.xArrjF=[],t.xArrjVal=[],t.yArrj=[],t.yArrjF=[],t.yArrjVal=[])}},{key:\"getPathFillColor\",value:function(t,e,i,a){var s,r,o,n,l=this.w,h=new R(this.barCtx.ctx),c=null,d=this.barCtx.barOptions.distributed?i:e;this.barCtx.barOptions.colors.ranges.length>0&&this.barCtx.barOptions.colors.ranges.map((function(a){t[e][i]>=a.from&&t[e][i]<=a.to&&(c=a.color)}));return l.config.series[e].data[i]&&l.config.series[e].data[i].fillColor&&(c=l.config.series[e].data[i].fillColor),h.fillPath({seriesNumber:this.barCtx.barOptions.distributed?d:a,dataPointIndex:i,color:c,value:t[e][i],fillConfig:null===(s=l.config.series[e].data[i])||void 0===s?void 0:s.fill,fillType:null!==(r=l.config.series[e].data[i])&&void 0!==r&&null!==(o=r.fill)&&void 0!==o&&o.type?null===(n=l.config.series[e].data[i])||void 0===n?void 0:n.fill.type:l.config.fill.type})}},{key:\"getStrokeWidth\",value:function(t,e,i){var a=0,s=this.w;return this.barCtx.series[t][e]?this.barCtx.isNullValue=!1:this.barCtx.isNullValue=!0,s.config.stroke.show&&(this.barCtx.isNullValue||(a=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[i]:this.barCtx.strokeWidth)),a}},{key:\"shouldApplyRadius\",value:function(t){var e=this.w,i=!1;return e.config.plotOptions.bar.borderRadius>0&&(e.config.chart.stacked&&\"last\"===e.config.plotOptions.bar.borderRadiusWhenStacked?this.barCtx.lastActiveBarSerieIndex===t&&(i=!0):i=!0),i}},{key:\"barBackground\",value:function(t){var e=t.j,i=t.i,a=t.x1,s=t.x2,r=t.y1,o=t.y2,n=t.elSeries,l=this.w,h=new m(this.barCtx.ctx),c=new N(this.barCtx.ctx).getActiveConfigSeriesIndex();if(this.barCtx.barOptions.colors.backgroundBarColors.length>0&&c===i){e>=this.barCtx.barOptions.colors.backgroundBarColors.length&&(e%=this.barCtx.barOptions.colors.backgroundBarColors.length);var d=this.barCtx.barOptions.colors.backgroundBarColors[e],g=h.drawRect(void 0!==a?a:0,void 0!==r?r:0,void 0!==s?s:l.globals.gridWidth,void 0!==o?o:l.globals.gridHeight,this.barCtx.barOptions.colors.backgroundBarRadius,d,this.barCtx.barOptions.colors.backgroundBarOpacity);n.add(g),g.node.classList.add(\"apexcharts-backgroundBar\")}}},{key:\"getColumnPaths\",value:function(t){var e,i=t.barWidth,a=t.barXPosition,s=t.y1,r=t.y2,o=t.strokeWidth,n=t.seriesGroup,l=t.realIndex,h=t.i,c=t.j,d=t.w,g=new m(this.barCtx.ctx);(o=Array.isArray(o)?o[l]:o)||(o=0);var u=i,p=a;null!==(e=d.config.series[l].data[c])&&void 0!==e&&e.columnWidthOffset&&(p=a-d.config.series[l].data[c].columnWidthOffset/2,u=i+d.config.series[l].data[c].columnWidthOffset);var f=p,x=p+u;s+=.001,r+=.001;var b=g.move(f,s),v=g.move(f,s),y=g.line(x-o,s);if(d.globals.previousPaths.length>0&&(v=this.barCtx.getPreviousPath(l,c,!1)),b=b+g.line(f,r)+g.line(x-o,r)+g.line(x-o,s)+(\"around\"===d.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\"),v=v+g.line(f,s)+y+y+y+y+y+g.line(f,s)+(\"around\"===d.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\"),this.shouldApplyRadius(l)&&(b=g.roundPathCorners(b,d.config.plotOptions.bar.borderRadius)),d.config.chart.stacked){var w=this.barCtx;d.globals.hasSeriesGroups&&n&&(w=this.barCtx[n]),w.yArrj.push(r),w.yArrjF.push(Math.abs(s-r)),w.yArrjVal.push(this.barCtx.series[h][c])}return{pathTo:b,pathFrom:v}}},{key:\"getBarpaths\",value:function(t){var e,i=t.barYPosition,a=t.barHeight,s=t.x1,r=t.x2,o=t.strokeWidth,n=t.seriesGroup,l=t.realIndex,h=t.i,c=t.j,d=t.w,g=new m(this.barCtx.ctx);(o=Array.isArray(o)?o[l]:o)||(o=0);var u=i,p=a;null!==(e=d.config.series[l].data[c])&&void 0!==e&&e.barHeightOffset&&(u=i-d.config.series[l].data[c].barHeightOffset/2,p=a+d.config.series[l].data[c].barHeightOffset);var f=u,x=u+p;s+=.001,r+=.001;var b=g.move(s,f),v=g.move(s,f);d.globals.previousPaths.length>0&&(v=this.barCtx.getPreviousPath(l,c,!1));var y=g.line(s,x-o);if(b=b+g.line(r,f)+g.line(r,x-o)+y+(\"around\"===d.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\"),v=v+g.line(s,f)+y+y+y+y+y+g.line(s,f)+(\"around\"===d.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\"),this.shouldApplyRadius(l)&&(b=g.roundPathCorners(b,d.config.plotOptions.bar.borderRadius)),d.config.chart.stacked){var w=this.barCtx;d.globals.hasSeriesGroups&&n&&(w=this.barCtx[n]),w.xArrj.push(r),w.xArrjF.push(Math.abs(s-r)),w.xArrjVal.push(this.barCtx.series[h][c])}return{pathTo:b,pathFrom:v}}},{key:\"checkZeroSeries\",value:function(t){for(var e=t.series,i=this.w,a=0;a<e.length;a++){for(var s=0,r=0;r<e[i.globals.maxValsInArrayIndex].length;r++)s+=e[a][r];0===s&&this.barCtx.zeroSerieses.push(a)}}},{key:\"getXForValue\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2]?e:null;return null!=t&&(i=e+t/this.barCtx.invertedYRatio-2*(this.barCtx.isReversed?t/this.barCtx.invertedYRatio:0)),i}},{key:\"getYForValue\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2]?e:null;return null!=t&&(i=e-t/this.barCtx.yRatio[this.barCtx.yaxisIndex]+2*(this.barCtx.isReversed?t/this.barCtx.yRatio[this.barCtx.yaxisIndex]:0)),i}},{key:\"getGoalValues\",value:function(t,i,a,s,r){var n=this,l=this.w,h=[],c=function(e,s){var r;h.push((o(r={},t,\"x\"===t?n.getXForValue(e,i,!1):n.getYForValue(e,a,!1)),o(r,\"attrs\",s),r))};if(l.globals.seriesGoals[s]&&l.globals.seriesGoals[s][r]&&Array.isArray(l.globals.seriesGoals[s][r])&&l.globals.seriesGoals[s][r].forEach((function(t){c(t.value,t)})),this.barCtx.barOptions.isDumbbell&&l.globals.seriesRange.length){var d=this.barCtx.barOptions.dumbbellColors?this.barCtx.barOptions.dumbbellColors:l.globals.colors,g={strokeHeight:\"x\"===t?0:l.globals.markers.size[s],strokeWidth:\"x\"===t?l.globals.markers.size[s]:0,strokeDashArray:0,strokeLineCap:\"round\",strokeColor:Array.isArray(d[s])?d[s][0]:d[s]};c(l.globals.seriesRangeStart[s][r],g),c(l.globals.seriesRangeEnd[s][r],e(e({},g),{},{strokeColor:Array.isArray(d[s])?d[s][1]:d[s]}))}return h}},{key:\"drawGoalLine\",value:function(t){var e=t.barXPosition,i=t.barYPosition,a=t.goalX,s=t.goalY,r=t.barWidth,o=t.barHeight,n=new m(this.barCtx.ctx),l=n.group({className:\"apexcharts-bar-goals-groups\"});l.node.classList.add(\"apexcharts-element-hidden\"),this.barCtx.w.globals.delayedElements.push({el:l.node}),l.attr(\"clip-path\",\"url(#gridRectMarkerMask\".concat(this.barCtx.w.globals.cuid,\")\"));var h=null;return this.barCtx.isHorizontal?Array.isArray(a)&&a.forEach((function(t){var e=void 0!==t.attrs.strokeHeight?t.attrs.strokeHeight:o/2,a=i+e+o/2;h=n.drawLine(t.x,a-2*e,t.x,a,t.attrs.strokeColor?t.attrs.strokeColor:void 0,t.attrs.strokeDashArray,t.attrs.strokeWidth?t.attrs.strokeWidth:2,t.attrs.strokeLineCap),l.add(h)})):Array.isArray(s)&&s.forEach((function(t){var i=void 0!==t.attrs.strokeWidth?t.attrs.strokeWidth:r/2,a=e+i+r/2;h=n.drawLine(a-2*i,t.y,a,t.y,t.attrs.strokeColor?t.attrs.strokeColor:void 0,t.attrs.strokeDashArray,t.attrs.strokeHeight?t.attrs.strokeHeight:2,t.attrs.strokeLineCap),l.add(h)})),l}},{key:\"drawBarShadow\",value:function(t){var e=t.prevPaths,i=t.currPaths,a=t.color,s=this.w,r=e.x,o=e.x1,n=e.barYPosition,l=i.x,h=i.x1,c=i.barYPosition,d=n+i.barHeight,g=new m(this.barCtx.ctx),u=new x,p=g.move(o,d)+g.line(r,d)+g.line(l,c)+g.line(h,c)+g.line(o,d)+(\"around\"===s.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\");return g.drawPath({d:p,fill:u.shadeColor(.5,x.rgb2hex(a)),stroke:\"none\",strokeWidth:0,fillOpacity:1,classes:\"apexcharts-bar-shadows\"})}}]),t}(),yt=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w;var s=this.w;this.barOptions=s.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=s.config.stroke.width,this.isNullValue=!1,this.isRangeBar=s.globals.seriesRange.length&&this.isHorizontal,this.isVerticalGroupedRangeBar=!s.globals.isBarHorizontal&&s.globals.seriesRange.length&&s.config.plotOptions.bar.rangeBarGroupRows,this.isFunnel=this.barOptions.isFunnel,this.xyRatios=i,null!==this.xyRatios&&(this.xRatio=i.xRatio,this.initialXRatio=i.initialXRatio,this.yRatio=i.yRatio,this.invertedXRatio=i.invertedXRatio,this.invertedYRatio=i.invertedYRatio,this.baseLineY=i.baseLineY,this.baseLineInvertedY=i.baseLineInvertedY),this.yaxisIndex=0,this.seriesLen=0,this.pathArr=[];var r=new N(this.ctx);this.lastActiveBarSerieIndex=r.getActiveConfigSeriesIndex(\"desc\",[\"bar\",\"column\"]);var o=r.getBarSeriesIndices(),n=new y(this.ctx);this.stackedSeriesTotals=n.getStackedSeriesTotals(this.w.config.series.map((function(t,e){return-1===o.indexOf(e)?e:-1})).filter((function(t){return-1!==t}))),this.barHelpers=new mt(this)}return r(t,[{key:\"draw\",value:function(t,i){var a=this.w,s=new m(this.ctx),r=new y(this.ctx,a);t=r.getLogSeries(t),this.series=t,this.yRatio=r.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t);var o=s.group({class:\"apexcharts-bar-series apexcharts-plot-series\"});a.config.dataLabels.enabled&&this.totalItems>this.barOptions.dataLabels.maxItems&&console.warn(\"WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.\");for(var n=0,l=0;n<t.length;n++,l++){var h,c,d,g,u=void 0,p=void 0,f=[],b=[],v=a.globals.comboCharts?i[n]:n,w=s.group({class:\"apexcharts-series\",rel:n+1,seriesName:x.escapeString(a.globals.seriesNames[v]),\"data:realIndex\":v});this.ctx.series.addCollapsedClassToSeries(w,v),t[n].length>0&&(this.visibleI=this.visibleI+1);var k=0,A=0;this.yRatio.length>1&&(this.yaxisIndex=v),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed;var S=this.barHelpers.initialPositions();p=S.y,k=S.barHeight,c=S.yDivision,g=S.zeroW,u=S.x,A=S.barWidth,h=S.xDivision,d=S.zeroH,this.horizontal||b.push(u+A/2);var C=s.group({class:\"apexcharts-datalabels\",\"data:realIndex\":v});a.globals.delayedElements.push({el:C.node}),C.node.classList.add(\"apexcharts-element-hidden\");var L=s.group({class:\"apexcharts-bar-goals-markers\",style:\"pointer-events: none\"}),P=s.group({class:\"apexcharts-bar-shadows\",style:\"pointer-events: none\"});a.globals.delayedElements.push({el:P.node}),P.node.classList.add(\"apexcharts-element-hidden\");for(var I=0;I<a.globals.dataPoints;I++){var T=this.barHelpers.getStrokeWidth(n,I,v),M=null,X={indexes:{i:n,j:I,realIndex:v,bc:l},x:u,y:p,strokeWidth:T,elSeries:w};this.isHorizontal?(M=this.drawBarPaths(e(e({},X),{},{barHeight:k,zeroW:g,yDivision:c})),A=this.series[n][I]/this.invertedYRatio):(M=this.drawColumnPaths(e(e({},X),{},{xDivision:h,barWidth:A,zeroH:d})),k=this.series[n][I]/this.yRatio[this.yaxisIndex]);var z=this.barHelpers.getPathFillColor(t,n,I,v);if(this.isFunnel&&this.barOptions.isFunnel3d&&this.pathArr.length&&I>0){var E=this.barHelpers.drawBarShadow({color:\"string\"==typeof z&&-1===(null==z?void 0:z.indexOf(\"url\"))?z:x.hexToRgba(a.globals.colors[n]),prevPaths:this.pathArr[this.pathArr.length-1],currPaths:M});E&&P.add(E)}this.pathArr.push(M);var Y=this.barHelpers.drawGoalLine({barXPosition:M.barXPosition,barYPosition:M.barYPosition,goalX:M.goalX,goalY:M.goalY,barHeight:k,barWidth:A});Y&&L.add(Y),p=M.y,u=M.x,I>0&&b.push(u+A/2),f.push(p),this.renderSeries({realIndex:v,pathFill:z,j:I,i:n,pathFrom:M.pathFrom,pathTo:M.pathTo,strokeWidth:T,elSeries:w,x:u,y:p,series:t,barHeight:M.barHeight?M.barHeight:k,barWidth:M.barWidth?M.barWidth:A,elDataLabelsWrap:C,elGoalsMarkers:L,elBarShadows:P,visibleSeries:this.visibleI,type:\"bar\"})}a.globals.seriesXvalues[v]=b,a.globals.seriesYvalues[v]=f,o.add(w)}return o}},{key:\"renderSeries\",value:function(t){var e=t.realIndex,i=t.pathFill,a=t.lineFill,s=t.j,r=t.i,o=t.groupIndex,n=t.pathFrom,l=t.pathTo,h=t.strokeWidth,c=t.elSeries,d=t.x,g=t.y,u=t.y1,p=t.y2,f=t.series,x=t.barHeight,b=t.barWidth,y=t.barXPosition,w=t.barYPosition,k=t.elDataLabelsWrap,A=t.elGoalsMarkers,S=t.elBarShadows,C=t.visibleSeries,L=t.type,P=this.w,I=new m(this.ctx);a||(a=this.barOptions.distributed?P.globals.stroke.colors[s]:P.globals.stroke.colors[e]),P.config.series[r].data[s]&&P.config.series[r].data[s].strokeColor&&(a=P.config.series[r].data[s].strokeColor),this.isNullValue&&(i=\"none\");var T=s/P.config.chart.animations.animateGradually.delay*(P.config.chart.animations.speed/P.globals.dataPoints)/2.4,M=I.renderPaths({i:r,j:s,realIndex:e,pathFrom:n,pathTo:l,stroke:a,strokeWidth:h,strokeLineCap:P.config.stroke.lineCap,fill:i,animationDelay:T,initialSpeed:P.config.chart.animations.speed,dataChangeSpeed:P.config.chart.animations.dynamicAnimation.speed,className:\"apexcharts-\".concat(L,\"-area\")});M.attr(\"clip-path\",\"url(#gridRectMask\".concat(P.globals.cuid,\")\"));var X=P.config.forecastDataPoints;X.count>0&&s>=P.globals.dataPoints-X.count&&(M.node.setAttribute(\"stroke-dasharray\",X.dashArray),M.node.setAttribute(\"stroke-width\",X.strokeWidth),M.node.setAttribute(\"fill-opacity\",X.fillOpacity)),void 0!==u&&void 0!==p&&(M.attr(\"data-range-y1\",u),M.attr(\"data-range-y2\",p)),new v(this.ctx).setSelectionFilter(M,e,s),c.add(M);var z=new vt(this).handleBarDataLabels({x:d,y:g,y1:u,y2:p,i:r,j:s,series:f,realIndex:e,groupIndex:o,barHeight:x,barWidth:b,barXPosition:y,barYPosition:w,renderedPath:M,visibleSeries:C});return null!==z.dataLabels&&k.add(z.dataLabels),z.totalDataLabels&&k.add(z.totalDataLabels),c.add(k),A&&c.add(A),S&&c.add(S),c}},{key:\"drawBarPaths\",value:function(t){var e,i=t.indexes,a=t.barHeight,s=t.strokeWidth,r=t.zeroW,o=t.x,n=t.y,l=t.yDivision,h=t.elSeries,c=this.w,d=i.i,g=i.j;if(c.globals.isXNumeric)e=(n=(c.globals.seriesX[d][g]-c.globals.minX)/this.invertedXRatio-a)+a*this.visibleI;else if(c.config.plotOptions.bar.hideZeroBarsWhenGrouped){var u=0,p=0;c.globals.seriesPercent.forEach((function(t,e){t[g]&&u++,e<d&&0===t[g]&&p++})),u>0&&(a=this.seriesLen*a/u),e=n+a*this.visibleI,e-=a*p}else e=n+a*this.visibleI;this.isFunnel&&(r-=(this.barHelpers.getXForValue(this.series[d][g],r)-r)/2),o=this.barHelpers.getXForValue(this.series[d][g],r);var f=this.barHelpers.getBarpaths({barYPosition:e,barHeight:a,x1:r,x2:o,strokeWidth:s,series:this.series,realIndex:i.realIndex,i:d,j:g,w:c});return c.globals.isXNumeric||(n+=l),this.barHelpers.barBackground({j:g,i:d,y1:e-a*this.visibleI,y2:a*this.seriesLen,elSeries:h}),{pathTo:f.pathTo,pathFrom:f.pathFrom,x1:r,x:o,y:n,goalX:this.barHelpers.getGoalValues(\"x\",r,null,d,g),barYPosition:e,barHeight:a}}},{key:\"drawColumnPaths\",value:function(t){var e,i=t.indexes,a=t.x,s=t.y,r=t.xDivision,o=t.barWidth,n=t.zeroH,l=t.strokeWidth,h=t.elSeries,c=this.w,d=i.realIndex,g=i.i,u=i.j,p=i.bc;if(c.globals.isXNumeric){var f=d;c.globals.seriesX[d].length||(f=c.globals.maxValsInArrayIndex),c.globals.seriesX[f][u]&&(a=(c.globals.seriesX[f][u]-c.globals.minX)/this.xRatio-o*this.seriesLen/2),e=a+o*this.visibleI}else if(c.config.plotOptions.bar.hideZeroBarsWhenGrouped){var x=0,b=0;c.globals.seriesPercent.forEach((function(t,e){t[u]&&x++,e<g&&0===t[u]&&b++})),x>0&&(o=this.seriesLen*o/x),e=a+o*this.visibleI,e-=o*b}else e=a+o*this.visibleI;s=this.barHelpers.getYForValue(this.series[g][u],n);var v=this.barHelpers.getColumnPaths({barXPosition:e,barWidth:o,y1:n,y2:s,strokeWidth:l,series:this.series,realIndex:i.realIndex,i:g,j:u,w:c});return c.globals.isXNumeric||(a+=r),this.barHelpers.barBackground({bc:p,j:u,i:g,x1:e-l/2-o*this.visibleI,x2:o*this.seriesLen+l/2,elSeries:h}),{pathTo:v.pathTo,pathFrom:v.pathFrom,x:a,y:s,goalY:this.barHelpers.getGoalValues(\"y\",null,n,g,u),barXPosition:e,barWidth:o}}},{key:\"getPreviousPath\",value:function(t,e){for(var i,a=this.w,s=0;s<a.globals.previousPaths.length;s++){var r=a.globals.previousPaths[s];r.paths&&r.paths.length>0&&parseInt(r.realIndex,10)===parseInt(t,10)&&void 0!==a.globals.previousPaths[s].paths[e]&&(i=a.globals.previousPaths[s].paths[e].d)}return i}}]),t}(),wt=function(t){n(s,yt);var i=d(s);function s(){return a(this,s),i.apply(this,arguments)}return r(s,[{key:\"draw\",value:function(t,i){var a=this,s=this.w;this.graphics=new m(this.ctx),this.bar=new yt(this.ctx,this.xyRatios);var r=new y(this.ctx,s);t=r.getLogSeries(t),this.yRatio=r.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t),\"100%\"===s.config.chart.stackType&&(t=s.globals.seriesPercent.slice()),this.series=t,this.barHelpers.initializeStackedPrevVars(this);for(var o=this.graphics.group({class:\"apexcharts-bar-series apexcharts-plot-series\"}),n=0,l=0,h=function(r,h){var c=void 0,d=void 0,g=void 0,u=void 0,p=-1;a.groupCtx=a,s.globals.seriesGroups.forEach((function(t,e){t.indexOf(s.config.series[r].name)>-1&&(p=e)})),-1!==p&&(a.groupCtx=a[s.globals.seriesGroups[p]]);var f=[],b=[],v=s.globals.comboCharts?i[r]:r;a.yRatio.length>1&&(a.yaxisIndex=v),a.isReversed=s.config.yaxis[a.yaxisIndex]&&s.config.yaxis[a.yaxisIndex].reversed;var m=a.graphics.group({class:\"apexcharts-series\",seriesName:x.escapeString(s.globals.seriesNames[v]),rel:r+1,\"data:realIndex\":v});a.ctx.series.addCollapsedClassToSeries(m,v);var y=a.graphics.group({class:\"apexcharts-datalabels\",\"data:realIndex\":v}),w=a.graphics.group({class:\"apexcharts-bar-goals-markers\",style:\"pointer-events: none\"}),k=0,A=0,S=a.initialPositions(n,l,c,d,g,u);l=S.y,k=S.barHeight,d=S.yDivision,u=S.zeroW,n=S.x,A=S.barWidth,c=S.xDivision,g=S.zeroH,a.barHelpers.initializeStackedXYVars(a),1===a.groupCtx.prevY.length&&a.groupCtx.prevY[0].every((function(t){return isNaN(t)}))&&(a.groupCtx.prevY[0]=a.groupCtx.prevY[0].map((function(t){return g})),a.groupCtx.prevYF[0]=a.groupCtx.prevYF[0].map((function(t){return 0})));for(var C=0;C<s.globals.dataPoints;C++){var L=a.barHelpers.getStrokeWidth(r,C,v),P={indexes:{i:r,j:C,realIndex:v,bc:h},strokeWidth:L,x:n,y:l,elSeries:m,groupIndex:p,seriesGroup:s.globals.seriesGroups[p]},I=null;a.isHorizontal?(I=a.drawStackedBarPaths(e(e({},P),{},{zeroW:u,barHeight:k,yDivision:d})),A=a.series[r][C]/a.invertedYRatio):(I=a.drawStackedColumnPaths(e(e({},P),{},{xDivision:c,barWidth:A,zeroH:g})),k=a.series[r][C]/a.yRatio[a.yaxisIndex]);var T=a.barHelpers.drawGoalLine({barXPosition:I.barXPosition,barYPosition:I.barYPosition,goalX:I.goalX,goalY:I.goalY,barHeight:k,barWidth:A});T&&w.add(T),l=I.y,n=I.x,f.push(n),b.push(l);var M=a.barHelpers.getPathFillColor(t,r,C,v);m=a.renderSeries({realIndex:v,pathFill:M,j:C,i:r,groupIndex:p,pathFrom:I.pathFrom,pathTo:I.pathTo,strokeWidth:L,elSeries:m,x:n,y:l,series:t,barHeight:k,barWidth:A,elDataLabelsWrap:y,elGoalsMarkers:w,type:\"bar\",visibleSeries:0})}s.globals.seriesXvalues[v]=f,s.globals.seriesYvalues[v]=b,a.groupCtx.prevY.push(a.groupCtx.yArrj),a.groupCtx.prevYF.push(a.groupCtx.yArrjF),a.groupCtx.prevYVal.push(a.groupCtx.yArrjVal),a.groupCtx.prevX.push(a.groupCtx.xArrj),a.groupCtx.prevXF.push(a.groupCtx.xArrjF),a.groupCtx.prevXVal.push(a.groupCtx.xArrjVal),o.add(m)},c=0,d=0;c<t.length;c++,d++)h(c,d);return o}},{key:\"initialPositions\",value:function(t,e,i,a,s,r){var o,n,l,h,c=this.w;return this.isHorizontal?(l=(l=a=c.globals.gridHeight/c.globals.dataPoints)*parseInt(c.config.plotOptions.bar.barHeight,10)/100,-1===String(c.config.plotOptions.bar.barHeight).indexOf(\"%\")&&(l=parseInt(c.config.plotOptions.bar.barHeight,10)),r=this.baseLineInvertedY+c.globals.padHorizontal+(this.isReversed?c.globals.gridWidth:0)-(this.isReversed?2*this.baseLineInvertedY:0),e=(a-l)/2):(h=i=c.globals.gridWidth/c.globals.dataPoints,h=c.globals.isXNumeric&&c.globals.dataPoints>1?(i=c.globals.minXDiff/this.xRatio)*parseInt(this.barOptions.columnWidth,10)/100:h*parseInt(c.config.plotOptions.bar.columnWidth,10)/100,-1===String(c.config.plotOptions.bar.columnWidth).indexOf(\"%\")&&(h=parseInt(c.config.plotOptions.bar.columnWidth,10)),s=c.globals.gridHeight-this.baseLineY[this.yaxisIndex]-(this.isReversed?c.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),t=c.globals.padHorizontal+(i-h)/2),{x:t,y:e,yDivision:a,xDivision:i,barHeight:null!==(o=c.globals.seriesGroups)&&void 0!==o&&o.length?l/c.globals.seriesGroups.length:l,barWidth:null!==(n=c.globals.seriesGroups)&&void 0!==n&&n.length?h/c.globals.seriesGroups.length:h,zeroH:s,zeroW:r}}},{key:\"drawStackedBarPaths\",value:function(t){for(var e,i=t.indexes,a=t.barHeight,s=t.strokeWidth,r=t.zeroW,o=t.x,n=t.y,l=t.groupIndex,h=t.seriesGroup,c=t.yDivision,d=t.elSeries,g=this.w,u=n+(-1!==l?l*a:0),p=i.i,f=i.j,x=0,b=0;b<this.groupCtx.prevXF.length;b++)x+=this.groupCtx.prevXF[b][f];var v=p;if(h&&(v=h.indexOf(g.config.series[p].name)),v>0){var m=r;this.groupCtx.prevXVal[v-1][f]<0?m=this.series[p][f]>=0?this.groupCtx.prevX[v-1][f]+x-2*(this.isReversed?x:0):this.groupCtx.prevX[v-1][f]:this.groupCtx.prevXVal[v-1][f]>=0&&(m=this.series[p][f]>=0?this.groupCtx.prevX[v-1][f]:this.groupCtx.prevX[v-1][f]-x+2*(this.isReversed?x:0)),e=m}else e=r;o=null===this.series[p][f]?e:e+this.series[p][f]/this.invertedYRatio-2*(this.isReversed?this.series[p][f]/this.invertedYRatio:0);var y=this.barHelpers.getBarpaths({barYPosition:u,barHeight:a,x1:e,x2:o,strokeWidth:s,series:this.series,realIndex:i.realIndex,seriesGroup:h,i:p,j:f,w:g});return this.barHelpers.barBackground({j:f,i:p,y1:u,y2:a,elSeries:d}),n+=c,{pathTo:y.pathTo,pathFrom:y.pathFrom,goalX:this.barHelpers.getGoalValues(\"x\",r,null,p,f),barYPosition:u,x:o,y:n}}},{key:\"drawStackedColumnPaths\",value:function(t){var e=t.indexes,i=t.x,a=t.y,s=t.xDivision,r=t.barWidth,o=t.zeroH,n=t.groupIndex,l=t.seriesGroup,h=t.elSeries,c=this.w,d=e.i,g=e.j,u=e.bc;if(c.globals.isXNumeric){var p=c.globals.seriesX[d][g];p||(p=0),i=(p-c.globals.minX)/this.xRatio-r/2,c.globals.seriesGroups.length&&(i=(p-c.globals.minX)/this.xRatio-r/2*c.globals.seriesGroups.length)}for(var f,x=i+(-1!==n?n*r:0),b=0,v=0;v<this.groupCtx.prevYF.length;v++)b+=isNaN(this.groupCtx.prevYF[v][g])?0:this.groupCtx.prevYF[v][g];var m=d;if(l&&(m=l.indexOf(c.config.series[d].name)),m>0&&!c.globals.isXNumeric||m>0&&c.globals.isXNumeric&&c.globals.seriesX[d-1][g]===c.globals.seriesX[d][g]){var y,w,k,A=Math.min(this.yRatio.length+1,d+1);if(void 0!==this.groupCtx.prevY[m-1]&&this.groupCtx.prevY[m-1].length)for(var S=1;S<A;S++){var C;if(!isNaN(null===(C=this.groupCtx.prevY[m-S])||void 0===C?void 0:C[g])){k=this.groupCtx.prevY[m-S][g];break}}for(var L=1;L<A;L++){var P,I;if((null===(P=this.groupCtx.prevYVal[m-L])||void 0===P?void 0:P[g])<0){w=this.series[d][g]>=0?k-b+2*(this.isReversed?b:0):k;break}if((null===(I=this.groupCtx.prevYVal[m-L])||void 0===I?void 0:I[g])>=0){w=this.series[d][g]>=0?k:k+b-2*(this.isReversed?b:0);break}}void 0===w&&(w=c.globals.gridHeight),f=null!==(y=this.groupCtx.prevYF[0])&&void 0!==y&&y.every((function(t){return 0===t}))&&this.groupCtx.prevYF.slice(1,m).every((function(t){return t.every((function(t){return isNaN(t)}))}))?o:w}else f=o;a=this.series[d][g]?f-this.series[d][g]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[d][g]/this.yRatio[this.yaxisIndex]:0):f;var T=this.barHelpers.getColumnPaths({barXPosition:x,barWidth:r,y1:f,y2:a,yRatio:this.yRatio[this.yaxisIndex],strokeWidth:this.strokeWidth,series:this.series,seriesGroup:l,realIndex:e.realIndex,i:d,j:g,w:c});return this.barHelpers.barBackground({bc:u,j:g,i:d,x1:x,x2:r,elSeries:h}),i+=s,{pathTo:T.pathTo,pathFrom:T.pathFrom,goalY:this.barHelpers.getGoalValues(\"y\",null,o,d,g),barXPosition:x,x:c.globals.isXNumeric?i-s:i,y:a}}}]),s}(),kt=function(t){n(s,yt);var i=d(s);function s(){return a(this,s),i.apply(this,arguments)}return r(s,[{key:\"draw\",value:function(t,i,a){var s=this,r=this.w,o=new m(this.ctx),n=r.globals.comboCharts?i:r.config.chart.type,l=new R(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick,this.boxOptions=this.w.config.plotOptions.boxPlot,this.isHorizontal=r.config.plotOptions.bar.horizontal;var h=new y(this.ctx,r);t=h.getLogSeries(t),this.series=t,this.yRatio=h.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t);for(var c=o.group({class:\"apexcharts-\".concat(n,\"-series apexcharts-plot-series\")}),d=function(i){s.isBoxPlot=\"boxPlot\"===r.config.chart.type||\"boxPlot\"===r.config.series[i].type;var n,h,d,g,u=void 0,p=void 0,f=[],b=[],v=r.globals.comboCharts?a[i]:i,m=o.group({class:\"apexcharts-series\",seriesName:x.escapeString(r.globals.seriesNames[v]),rel:i+1,\"data:realIndex\":v});s.ctx.series.addCollapsedClassToSeries(m,v),t[i].length>0&&(s.visibleI=s.visibleI+1);var y,w;s.yRatio.length>1&&(s.yaxisIndex=v);var k=s.barHelpers.initialPositions();p=k.y,y=k.barHeight,h=k.yDivision,g=k.zeroW,u=k.x,w=k.barWidth,n=k.xDivision,d=k.zeroH,b.push(u+w/2);for(var A=o.group({class:\"apexcharts-datalabels\",\"data:realIndex\":v}),S=function(a){var o=s.barHelpers.getStrokeWidth(i,a,v),c=null,x={indexes:{i:i,j:a,realIndex:v},x:u,y:p,strokeWidth:o,elSeries:m};c=s.isHorizontal?s.drawHorizontalBoxPaths(e(e({},x),{},{yDivision:h,barHeight:y,zeroW:g})):s.drawVerticalBoxPaths(e(e({},x),{},{xDivision:n,barWidth:w,zeroH:d})),p=c.y,u=c.x,a>0&&b.push(u+w/2),f.push(p),c.pathTo.forEach((function(e,n){var h=!s.isBoxPlot&&s.candlestickOptions.wick.useFillColor?c.color[n]:r.globals.stroke.colors[i],d=l.fillPath({seriesNumber:v,dataPointIndex:a,color:c.color[n],value:t[i][a]});s.renderSeries({realIndex:v,pathFill:d,lineFill:h,j:a,i:i,pathFrom:c.pathFrom,pathTo:e,strokeWidth:o,elSeries:m,x:u,y:p,series:t,barHeight:y,barWidth:w,elDataLabelsWrap:A,visibleSeries:s.visibleI,type:r.config.chart.type})}))},C=0;C<r.globals.dataPoints;C++)S(C);r.globals.seriesXvalues[v]=b,r.globals.seriesYvalues[v]=f,c.add(m)},g=0;g<t.length;g++)d(g);return c}},{key:\"drawVerticalBoxPaths\",value:function(t){var e=t.indexes,i=t.x;t.y;var a=t.xDivision,s=t.barWidth,r=t.zeroH,o=t.strokeWidth,n=this.w,l=new m(this.ctx),h=e.i,c=e.j,d=!0,g=n.config.plotOptions.candlestick.colors.upward,u=n.config.plotOptions.candlestick.colors.downward,p=\"\";this.isBoxPlot&&(p=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var f=this.yRatio[this.yaxisIndex],x=e.realIndex,b=this.getOHLCValue(x,c),v=r,y=r;b.o>b.c&&(d=!1);var w=Math.min(b.o,b.c),k=Math.max(b.o,b.c),A=b.m;n.globals.isXNumeric&&(i=(n.globals.seriesX[x][c]-n.globals.minX)/this.xRatio-s/2);var S=i+s*this.visibleI;void 0===this.series[h][c]||null===this.series[h][c]?(w=r,k=r):(w=r-w/f,k=r-k/f,v=r-b.h/f,y=r-b.l/f,A=r-b.m/f);var C=l.move(S,r),L=l.move(S+s/2,w);return n.globals.previousPaths.length>0&&(L=this.getPreviousPath(x,c,!0)),C=this.isBoxPlot?[l.move(S,w)+l.line(S+s/2,w)+l.line(S+s/2,v)+l.line(S+s/4,v)+l.line(S+s-s/4,v)+l.line(S+s/2,v)+l.line(S+s/2,w)+l.line(S+s,w)+l.line(S+s,A)+l.line(S,A)+l.line(S,w+o/2),l.move(S,A)+l.line(S+s,A)+l.line(S+s,k)+l.line(S+s/2,k)+l.line(S+s/2,y)+l.line(S+s-s/4,y)+l.line(S+s/4,y)+l.line(S+s/2,y)+l.line(S+s/2,k)+l.line(S,k)+l.line(S,A)+\"z\"]:[l.move(S,k)+l.line(S+s/2,k)+l.line(S+s/2,v)+l.line(S+s/2,k)+l.line(S+s,k)+l.line(S+s,w)+l.line(S+s/2,w)+l.line(S+s/2,y)+l.line(S+s/2,w)+l.line(S,w)+l.line(S,k-o/2)],L+=l.move(S,w),n.globals.isXNumeric||(i+=a),{pathTo:C,pathFrom:L,x:i,y:k,barXPosition:S,color:this.isBoxPlot?p:d?[g]:[u]}}},{key:\"drawHorizontalBoxPaths\",value:function(t){var e=t.indexes;t.x;var i=t.y,a=t.yDivision,s=t.barHeight,r=t.zeroW,o=t.strokeWidth,n=this.w,l=new m(this.ctx),h=e.i,c=e.j,d=this.boxOptions.colors.lower;this.isBoxPlot&&(d=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var g=this.invertedYRatio,u=e.realIndex,p=this.getOHLCValue(u,c),f=r,x=r,b=Math.min(p.o,p.c),v=Math.max(p.o,p.c),y=p.m;n.globals.isXNumeric&&(i=(n.globals.seriesX[u][c]-n.globals.minX)/this.invertedXRatio-s/2);var w=i+s*this.visibleI;void 0===this.series[h][c]||null===this.series[h][c]?(b=r,v=r):(b=r+b/g,v=r+v/g,f=r+p.h/g,x=r+p.l/g,y=r+p.m/g);var k=l.move(r,w),A=l.move(b,w+s/2);return n.globals.previousPaths.length>0&&(A=this.getPreviousPath(u,c,!0)),k=[l.move(b,w)+l.line(b,w+s/2)+l.line(f,w+s/2)+l.line(f,w+s/2-s/4)+l.line(f,w+s/2+s/4)+l.line(f,w+s/2)+l.line(b,w+s/2)+l.line(b,w+s)+l.line(y,w+s)+l.line(y,w)+l.line(b+o/2,w),l.move(y,w)+l.line(y,w+s)+l.line(v,w+s)+l.line(v,w+s/2)+l.line(x,w+s/2)+l.line(x,w+s-s/4)+l.line(x,w+s/4)+l.line(x,w+s/2)+l.line(v,w+s/2)+l.line(v,w)+l.line(y,w)+\"z\"],A+=l.move(b,w),n.globals.isXNumeric||(i+=a),{pathTo:k,pathFrom:A,x:v,y:i,barYPosition:w,color:d}}},{key:\"getOHLCValue\",value:function(t,e){var i=this.w;return{o:this.isBoxPlot?i.globals.seriesCandleH[t][e]:i.globals.seriesCandleO[t][e],h:this.isBoxPlot?i.globals.seriesCandleO[t][e]:i.globals.seriesCandleH[t][e],m:i.globals.seriesCandleM[t][e],l:this.isBoxPlot?i.globals.seriesCandleC[t][e]:i.globals.seriesCandleL[t][e],c:this.isBoxPlot?i.globals.seriesCandleL[t][e]:i.globals.seriesCandleC[t][e]}}}]),s}(),At=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"checkColorRange\",value:function(){var t=this.w,e=!1,i=t.config.plotOptions[t.config.chart.type];return i.colorScale.ranges.length>0&&i.colorScale.ranges.map((function(t,i){t.from<=0&&(e=!0)})),e}},{key:\"getShadeColor\",value:function(t,e,i,a){var s=this.w,r=1,o=s.config.plotOptions[t].shadeIntensity,n=this.determineColor(t,e,i);s.globals.hasNegs||a?r=s.config.plotOptions[t].reverseNegativeShade?n.percent<0?n.percent/100*(1.25*o):(1-n.percent/100)*(1.25*o):n.percent<=0?1-(1+n.percent/100)*o:(1-n.percent/100)*o:(r=1-n.percent/100,\"treemap\"===t&&(r=(1-n.percent/100)*(1.25*o)));var l=n.color,h=new x;return s.config.plotOptions[t].enableShades&&(l=\"dark\"===this.w.config.theme.mode?x.hexToRgba(h.shadeColor(-1*r,n.color),s.config.fill.opacity):x.hexToRgba(h.shadeColor(r,n.color),s.config.fill.opacity)),{color:l,colorProps:n}}},{key:\"determineColor\",value:function(t,e,i){var a=this.w,s=a.globals.series[e][i],r=a.config.plotOptions[t],o=r.colorScale.inverse?i:e;r.distributed&&\"treemap\"===a.config.chart.type&&(o=i);var n=a.globals.colors[o],l=null,h=Math.min.apply(Math,u(a.globals.series[e])),c=Math.max.apply(Math,u(a.globals.series[e]));r.distributed||\"heatmap\"!==t||(h=a.globals.minY,c=a.globals.maxY),void 0!==r.colorScale.min&&(h=r.colorScale.min<a.globals.minY?r.colorScale.min:a.globals.minY,c=r.colorScale.max>a.globals.maxY?r.colorScale.max:a.globals.maxY);var d=Math.abs(c)+Math.abs(h),g=100*s/(0===d?d-1e-6:d);r.colorScale.ranges.length>0&&r.colorScale.ranges.map((function(t,e){if(s>=t.from&&s<=t.to){n=t.color,l=t.foreColor?t.foreColor:null,h=t.from,c=t.to;var i=Math.abs(c)+Math.abs(h);g=100*s/(0===i?i-1e-6:i)}}));return{color:n,foreColor:l,percent:g}}},{key:\"calculateDataLabels\",value:function(t){var e=t.text,i=t.x,a=t.y,s=t.i,r=t.j,o=t.colorProps,n=t.fontSize,l=this.w.config.dataLabels,h=new m(this.ctx),c=new O(this.ctx),d=null;if(l.enabled){d=h.group({class:\"apexcharts-data-labels\"});var g=l.offsetX,u=l.offsetY,p=i+g,f=a+parseFloat(l.style.fontSize)/3+u;c.plotDataLabelsText({x:p,y:f,text:e,i:s,j:r,color:o.foreColor,parent:d,fontSize:n,dataLabelsConfig:l})}return d}},{key:\"addListeners\",value:function(t){var e=new m(this.ctx);t.node.addEventListener(\"mouseenter\",e.pathMouseEnter.bind(this,t)),t.node.addEventListener(\"mouseleave\",e.pathMouseLeave.bind(this,t)),t.node.addEventListener(\"mousedown\",e.pathMouseDown.bind(this,t))}}]),t}(),St=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w,this.xRatio=i.xRatio,this.yRatio=i.yRatio,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.helpers=new At(e),this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.show?this.w.config.stroke.width:0}return r(t,[{key:\"draw\",value:function(t){var e=this.w,i=new m(this.ctx),a=i.group({class:\"apexcharts-heatmap\"});a.attr(\"clip-path\",\"url(#gridRectMask\".concat(e.globals.cuid,\")\"));var s=e.globals.gridWidth/e.globals.dataPoints,r=e.globals.gridHeight/e.globals.series.length,o=0,n=!1;this.negRange=this.helpers.checkColorRange();var l=t.slice();e.config.yaxis[0].reversed&&(n=!0,l.reverse());for(var h=n?0:l.length-1;n?h<l.length:h>=0;n?h++:h--){var c=i.group({class:\"apexcharts-series apexcharts-heatmap-series\",seriesName:x.escapeString(e.globals.seriesNames[h]),rel:h+1,\"data:realIndex\":h});if(this.ctx.series.addCollapsedClassToSeries(c,h),e.config.chart.dropShadow.enabled){var d=e.config.chart.dropShadow;new v(this.ctx).dropShadow(c,d,h)}for(var g=0,u=e.config.plotOptions.heatmap.shadeIntensity,p=0;p<l[h].length;p++){var f=this.helpers.getShadeColor(e.config.chart.type,h,p,this.negRange),b=f.color,y=f.colorProps;if(\"image\"===e.config.fill.type)b=new R(this.ctx).fillPath({seriesNumber:h,dataPointIndex:p,opacity:e.globals.hasNegs?y.percent<0?1-(1+y.percent/100):u+y.percent/100:y.percent/100,patternID:x.randomId(),width:e.config.fill.image.width?e.config.fill.image.width:s,height:e.config.fill.image.height?e.config.fill.image.height:r});var w=this.rectRadius,k=i.drawRect(g,o,s,r,w);if(k.attr({cx:g,cy:o}),k.node.classList.add(\"apexcharts-heatmap-rect\"),c.add(k),k.attr({fill:b,i:h,index:h,j:p,val:l[h][p],\"stroke-width\":this.strokeWidth,stroke:e.config.plotOptions.heatmap.useFillColorAsStroke?b:e.globals.stroke.colors[0],color:b}),this.helpers.addListeners(k),e.config.chart.animations.enabled&&!e.globals.dataChanged){var A=1;e.globals.resized||(A=e.config.chart.animations.speed),this.animateHeatMap(k,g,o,s,r,A)}if(e.globals.dataChanged){var S=1;if(this.dynamicAnim.enabled&&e.globals.shouldAnimate){S=this.dynamicAnim.speed;var C=e.globals.previousPaths[h]&&e.globals.previousPaths[h][p]&&e.globals.previousPaths[h][p].color;C||(C=\"rgba(255, 255, 255, 0)\"),this.animateHeatColor(k,x.isColorHex(C)?C:x.rgb2hex(C),x.isColorHex(b)?b:x.rgb2hex(b),S)}}var L=(0,e.config.dataLabels.formatter)(e.globals.series[h][p],{value:e.globals.series[h][p],seriesIndex:h,dataPointIndex:p,w:e}),P=this.helpers.calculateDataLabels({text:L,x:g+s/2,y:o+r/2,i:h,j:p,colorProps:y,series:l});null!==P&&c.add(P),g+=s}o+=r,a.add(c)}var I=e.globals.yAxisScale[0].result.slice();e.config.yaxis[0].reversed?I.unshift(\"\"):I.push(\"\"),e.globals.yAxisScale[0].result=I;var T=e.globals.gridHeight/e.globals.series.length;return e.config.yaxis[0].labels.offsetY=-T/2,a}},{key:\"animateHeatMap\",value:function(t,e,i,a,s,r){var o=new b(this.ctx);o.animateRect(t,{x:e+a/2,y:i+s/2,width:0,height:0},{x:e,y:i,width:a,height:s},r,(function(){o.animationCompleted(t)}))}},{key:\"animateHeatColor\",value:function(t,e,i,a){t.attr({fill:e}).animate(a).attr({fill:i})}}]),t}(),Ct=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"drawYAxisTexts\",value:function(t,e,i,a){var s=this.w,r=s.config.yaxis[0],o=s.globals.yLabelFormatters[0];return new m(this.ctx).drawText({x:t+r.labels.offsetX,y:e+r.labels.offsetY,text:o(a,i),textAnchor:\"middle\",fontSize:r.labels.style.fontSize,fontFamily:r.labels.style.fontFamily,foreColor:Array.isArray(r.labels.style.colors)?r.labels.style.colors[i]:r.labels.style.colors})}}]),t}(),Lt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animBeginArr=[0],this.animDur=0,this.donutDataLabels=this.w.config.plotOptions.pie.donut.labels,this.lineColorArr=void 0!==i.globals.stroke.colors?i.globals.stroke.colors:i.globals.colors,this.defaultSize=Math.min(i.globals.gridWidth,i.globals.gridHeight),this.centerY=this.defaultSize/2,this.centerX=i.globals.gridWidth/2,\"radialBar\"===i.config.chart.type?this.fullAngle=360:this.fullAngle=Math.abs(i.config.plotOptions.pie.endAngle-i.config.plotOptions.pie.startAngle),this.initialAngle=i.config.plotOptions.pie.startAngle%this.fullAngle,i.globals.radialSize=this.defaultSize/2.05-i.config.stroke.width-(i.config.chart.sparkline.enabled?0:i.config.chart.dropShadow.blur),this.donutSize=i.globals.radialSize*parseInt(i.config.plotOptions.pie.donut.size,10)/100,this.maxY=0,this.sliceLabels=[],this.sliceSizes=[],this.prevSectorAngleArr=[]}return r(t,[{key:\"draw\",value:function(t){var e=this,i=this.w,a=new m(this.ctx);if(this.ret=a.group({class:\"apexcharts-pie\"}),i.globals.noData)return this.ret;for(var s=0,r=0;r<t.length;r++)s+=x.negToZero(t[r]);var o=[],n=a.group();0===s&&(s=1e-5),t.forEach((function(t){e.maxY=Math.max(e.maxY,t)})),i.config.yaxis[0].max&&(this.maxY=i.config.yaxis[0].max),\"back\"===i.config.grid.position&&\"polarArea\"===this.chartType&&this.drawPolarElements(this.ret);for(var l=0;l<t.length;l++){var h=this.fullAngle*x.negToZero(t[l])/s;o.push(h),\"polarArea\"===this.chartType?(o[l]=this.fullAngle/t.length,this.sliceSizes.push(i.globals.radialSize*t[l]/this.maxY)):this.sliceSizes.push(i.globals.radialSize)}if(i.globals.dataChanged){for(var c,d=0,g=0;g<i.globals.previousPaths.length;g++)d+=x.negToZero(i.globals.previousPaths[g]);for(var u=0;u<i.globals.previousPaths.length;u++)c=this.fullAngle*x.negToZero(i.globals.previousPaths[u])/d,this.prevSectorAngleArr.push(c)}this.donutSize<0&&(this.donutSize=0);var p=i.config.plotOptions.pie.customScale,f=i.globals.gridWidth/2,b=i.globals.gridHeight/2,v=f-i.globals.gridWidth/2*p,y=b-i.globals.gridHeight/2*p;if(\"donut\"===this.chartType){var w=a.drawCircle(this.donutSize);w.attr({cx:this.centerX,cy:this.centerY,fill:i.config.plotOptions.pie.donut.background?i.config.plotOptions.pie.donut.background:\"transparent\"}),n.add(w)}var k=this.drawArcs(o,t);if(this.sliceLabels.forEach((function(t){k.add(t)})),n.attr({transform:\"translate(\".concat(v,\", \").concat(y,\") scale(\").concat(p,\")\")}),n.add(k),this.ret.add(n),this.donutDataLabels.show){var A=this.renderInnerDataLabels(this.donutDataLabels,{hollowSize:this.donutSize,centerX:this.centerX,centerY:this.centerY,opacity:this.donutDataLabels.show,translateX:v,translateY:y});this.ret.add(A)}return\"front\"===i.config.grid.position&&\"polarArea\"===this.chartType&&this.drawPolarElements(this.ret),this.ret}},{key:\"drawArcs\",value:function(t,e){var i=this.w,a=new v(this.ctx),s=new m(this.ctx),r=new R(this.ctx),o=s.group({class:\"apexcharts-slices\"}),n=this.initialAngle,l=this.initialAngle,h=this.initialAngle,c=this.initialAngle;this.strokeWidth=i.config.stroke.show?i.config.stroke.width:0;for(var d=0;d<t.length;d++){var g=s.group({class:\"apexcharts-series apexcharts-pie-series\",seriesName:x.escapeString(i.globals.seriesNames[d]),rel:d+1,\"data:realIndex\":d});o.add(g),l=c,h=(n=h)+t[d],c=l+this.prevSectorAngleArr[d];var u=h<n?this.fullAngle+h-n:h-n,p=r.fillPath({seriesNumber:d,size:this.sliceSizes[d],value:e[d]}),f=this.getChangedPath(l,c),b=s.drawPath({d:f,stroke:Array.isArray(this.lineColorArr)?this.lineColorArr[d]:this.lineColorArr,strokeWidth:0,fill:p,fillOpacity:i.config.fill.opacity,classes:\"apexcharts-pie-area apexcharts-\".concat(this.chartType.toLowerCase(),\"-slice-\").concat(d)});if(b.attr({index:0,j:d}),a.setSelectionFilter(b,0,d),i.config.chart.dropShadow.enabled){var y=i.config.chart.dropShadow;a.dropShadow(b,y,d)}this.addListeners(b,this.donutDataLabels),m.setAttrs(b.node,{\"data:angle\":u,\"data:startAngle\":n,\"data:strokeWidth\":this.strokeWidth,\"data:value\":e[d]});var w={x:0,y:0};\"pie\"===this.chartType||\"polarArea\"===this.chartType?w=x.polarToCartesian(this.centerX,this.centerY,i.globals.radialSize/1.25+i.config.plotOptions.pie.dataLabels.offset,(n+u/2)%this.fullAngle):\"donut\"===this.chartType&&(w=x.polarToCartesian(this.centerX,this.centerY,(i.globals.radialSize+this.donutSize)/2+i.config.plotOptions.pie.dataLabels.offset,(n+u/2)%this.fullAngle)),g.add(b);var k=0;if(!this.initialAnim||i.globals.resized||i.globals.dataChanged?this.animBeginArr.push(0):(0===(k=u/this.fullAngle*i.config.chart.animations.speed)&&(k=1),this.animDur=k+this.animDur,this.animBeginArr.push(this.animDur)),this.dynamicAnim&&i.globals.dataChanged?this.animatePaths(b,{size:this.sliceSizes[d],endAngle:h,startAngle:n,prevStartAngle:l,prevEndAngle:c,animateStartingPos:!0,i:d,animBeginArr:this.animBeginArr,shouldSetPrevPaths:!0,dur:i.config.chart.animations.dynamicAnimation.speed}):this.animatePaths(b,{size:this.sliceSizes[d],endAngle:h,startAngle:n,i:d,totalItems:t.length-1,animBeginArr:this.animBeginArr,dur:k}),i.config.plotOptions.pie.expandOnClick&&\"polarArea\"!==this.chartType&&b.click(this.pieClicked.bind(this,d)),void 0!==i.globals.selectedDataPoints[0]&&i.globals.selectedDataPoints[0].indexOf(d)>-1&&this.pieClicked(d),i.config.dataLabels.enabled){var A=w.x,S=w.y,C=100*u/this.fullAngle+\"%\";if(0!==u&&i.config.plotOptions.pie.dataLabels.minAngleToShowLabel<t[d]){var L=i.config.dataLabels.formatter;void 0!==L&&(C=L(i.globals.seriesPercent[d][0],{seriesIndex:d,w:i}));var P=i.globals.dataLabels.style.colors[d],I=s.group({class:\"apexcharts-datalabels\"}),T=s.drawText({x:A,y:S,text:C,textAnchor:\"middle\",fontSize:i.config.dataLabels.style.fontSize,fontFamily:i.config.dataLabels.style.fontFamily,fontWeight:i.config.dataLabels.style.fontWeight,foreColor:P});if(I.add(T),i.config.dataLabels.dropShadow.enabled){var M=i.config.dataLabels.dropShadow;a.dropShadow(T,M)}T.node.classList.add(\"apexcharts-pie-label\"),i.config.chart.animations.animate&&!1===i.globals.resized&&(T.node.classList.add(\"apexcharts-pie-label-delay\"),T.node.style.animationDelay=i.config.chart.animations.speed/940+\"s\"),this.sliceLabels.push(I)}}}return o}},{key:\"addListeners\",value:function(t,e){var i=new m(this.ctx);t.node.addEventListener(\"mouseenter\",i.pathMouseEnter.bind(this,t)),t.node.addEventListener(\"mouseleave\",i.pathMouseLeave.bind(this,t)),t.node.addEventListener(\"mouseleave\",this.revertDataLabelsInner.bind(this,t.node,e)),t.node.addEventListener(\"mousedown\",i.pathMouseDown.bind(this,t)),this.donutDataLabels.total.showAlways||(t.node.addEventListener(\"mouseenter\",this.printDataLabelsInner.bind(this,t.node,e)),t.node.addEventListener(\"mousedown\",this.printDataLabelsInner.bind(this,t.node,e)))}},{key:\"animatePaths\",value:function(t,e){var i=this.w,a=e.endAngle<e.startAngle?this.fullAngle+e.endAngle-e.startAngle:e.endAngle-e.startAngle,s=a,r=e.startAngle,o=e.startAngle;void 0!==e.prevStartAngle&&void 0!==e.prevEndAngle&&(r=e.prevEndAngle,s=e.prevEndAngle<e.prevStartAngle?this.fullAngle+e.prevEndAngle-e.prevStartAngle:e.prevEndAngle-e.prevStartAngle),e.i===i.config.series.length-1&&(a+o>this.fullAngle?e.endAngle=e.endAngle-(a+o):a+o<this.fullAngle&&(e.endAngle=e.endAngle+(this.fullAngle-(a+o)))),a===this.fullAngle&&(a=this.fullAngle-.01),this.animateArc(t,r,o,a,s,e)}},{key:\"animateArc\",value:function(t,e,i,a,s,r){var o,n=this,l=this.w,h=new b(this.ctx),c=r.size;(isNaN(e)||isNaN(s))&&(e=i,s=a,r.dur=0);var d=a,g=i,u=e<i?this.fullAngle+e-i:e-i;l.globals.dataChanged&&r.shouldSetPrevPaths&&r.prevEndAngle&&(o=n.getPiePath({me:n,startAngle:r.prevStartAngle,angle:r.prevEndAngle<r.prevStartAngle?this.fullAngle+r.prevEndAngle-r.prevStartAngle:r.prevEndAngle-r.prevStartAngle,size:c}),t.attr({d:o})),0!==r.dur?t.animate(r.dur,l.globals.easing,r.animBeginArr[r.i]).afterAll((function(){\"pie\"!==n.chartType&&\"donut\"!==n.chartType&&\"polarArea\"!==n.chartType||this.animate(l.config.chart.animations.dynamicAnimation.speed).attr({\"stroke-width\":n.strokeWidth}),r.i===l.config.series.length-1&&h.animationCompleted(t)})).during((function(l){d=u+(a-u)*l,r.animateStartingPos&&(d=s+(a-s)*l,g=e-s+(i-(e-s))*l),o=n.getPiePath({me:n,startAngle:g,angle:d,size:c}),t.node.setAttribute(\"data:pathOrig\",o),t.attr({d:o})})):(o=n.getPiePath({me:n,startAngle:g,angle:a,size:c}),r.isTrack||(l.globals.animationEnded=!0),t.node.setAttribute(\"data:pathOrig\",o),t.attr({d:o,\"stroke-width\":n.strokeWidth}))}},{key:\"pieClicked\",value:function(t){var e,i=this.w,a=this,s=a.sliceSizes[t]+(i.config.plotOptions.pie.expandOnClick?4:0),r=i.globals.dom.Paper.select(\".apexcharts-\".concat(a.chartType.toLowerCase(),\"-slice-\").concat(t)).members[0];if(\"true\"!==r.attr(\"data:pieClicked\")){var o=i.globals.dom.baseEl.getElementsByClassName(\"apexcharts-pie-area\");Array.prototype.forEach.call(o,(function(t){t.setAttribute(\"data:pieClicked\",\"false\");var e=t.getAttribute(\"data:pathOrig\");e&&t.setAttribute(\"d\",e)})),r.attr(\"data:pieClicked\",\"true\");var n=parseInt(r.attr(\"data:startAngle\"),10),l=parseInt(r.attr(\"data:angle\"),10);e=a.getPiePath({me:a,startAngle:n,angle:l,size:s}),360!==l&&r.plot(e)}else{r.attr({\"data:pieClicked\":\"false\"}),this.revertDataLabelsInner(r.node,this.donutDataLabels);var h=r.attr(\"data:pathOrig\");r.attr({d:h})}}},{key:\"getChangedPath\",value:function(t,e){var i=\"\";return this.dynamicAnim&&this.w.globals.dataChanged&&(i=this.getPiePath({me:this,startAngle:t,angle:e-t,size:this.size})),i}},{key:\"getPiePath\",value:function(t){var e=t.me,i=t.startAngle,a=t.angle,s=t.size,r=i,o=Math.PI*(r-90)/180,n=a+i;Math.ceil(n)>=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle&&(n=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle-.01),Math.ceil(n)>this.fullAngle&&(n-=this.fullAngle);var l=Math.PI*(n-90)/180,h=e.centerX+s*Math.cos(o),c=e.centerY+s*Math.sin(o),d=e.centerX+s*Math.cos(l),g=e.centerY+s*Math.sin(l),u=x.polarToCartesian(e.centerX,e.centerY,e.donutSize,n),p=x.polarToCartesian(e.centerX,e.centerY,e.donutSize,r),f=a>180?1:0,b=[\"M\",h,c,\"A\",s,s,0,f,1,d,g];return\"donut\"===e.chartType?[].concat(b,[\"L\",u.x,u.y,\"A\",e.donutSize,e.donutSize,0,f,0,p.x,p.y,\"L\",h,c,\"z\"]).join(\" \"):\"pie\"===e.chartType||\"polarArea\"===e.chartType?[].concat(b,[\"L\",e.centerX,e.centerY,\"L\",h,c]).join(\" \"):[].concat(b).join(\" \")}},{key:\"drawPolarElements\",value:function(t){var e=this.w,i=new _(this.ctx),a=new m(this.ctx),s=new Ct(this.ctx),r=a.group(),o=a.group(),n=i.niceScale(0,Math.ceil(this.maxY),e.config.yaxis[0].tickAmount,0,!0),l=n.result.reverse(),h=n.result.length;this.maxY=n.niceMax;for(var c=e.globals.radialSize,d=c/(h-1),g=0;g<h-1;g++){var u=a.drawCircle(c);if(u.attr({cx:this.centerX,cy:this.centerY,fill:\"none\",\"stroke-width\":e.config.plotOptions.polarArea.rings.strokeWidth,stroke:e.config.plotOptions.polarArea.rings.strokeColor}),e.config.yaxis[0].show){var p=s.drawYAxisTexts(this.centerX,this.centerY-c+parseInt(e.config.yaxis[0].labels.style.fontSize,10)/2,g,l[g]);o.add(p)}r.add(u),c-=d}this.drawSpokes(t),t.add(r),t.add(o)}},{key:\"renderInnerDataLabels\",value:function(t,e){var i=this.w,a=new m(this.ctx),s=a.group({class:\"apexcharts-datalabels-group\",transform:\"translate(\".concat(e.translateX?e.translateX:0,\", \").concat(e.translateY?e.translateY:0,\") scale(\").concat(i.config.plotOptions.pie.customScale,\")\")}),r=t.total.show;s.node.style.opacity=e.opacity;var o,n,l=e.centerX,h=e.centerY;o=void 0===t.name.color?i.globals.colors[0]:t.name.color;var c=t.name.fontSize,d=t.name.fontFamily,g=t.name.fontWeight;n=void 0===t.value.color?i.config.chart.foreColor:t.value.color;var u=t.value.formatter,p=\"\",f=\"\";if(r?(o=t.total.color,c=t.total.fontSize,d=t.total.fontFamily,g=t.total.fontWeight,f=t.total.label,p=t.total.formatter(i)):1===i.globals.series.length&&(p=u(i.globals.series[0],i),f=i.globals.seriesNames[0]),f&&(f=t.name.formatter(f,t.total.show,i)),t.name.show){var x=a.drawText({x:l,y:h+parseFloat(t.name.offsetY),text:f,textAnchor:\"middle\",foreColor:o,fontSize:c,fontWeight:g,fontFamily:d});x.node.classList.add(\"apexcharts-datalabel-label\"),s.add(x)}if(t.value.show){var b=t.name.show?parseFloat(t.value.offsetY)+16:t.value.offsetY,v=a.drawText({x:l,y:h+b,text:p,textAnchor:\"middle\",foreColor:n,fontWeight:t.value.fontWeight,fontSize:t.value.fontSize,fontFamily:t.value.fontFamily});v.node.classList.add(\"apexcharts-datalabel-value\"),s.add(v)}return s}},{key:\"printInnerLabels\",value:function(t,e,i,a){var s,r=this.w;a?s=void 0===t.name.color?r.globals.colors[parseInt(a.parentNode.getAttribute(\"rel\"),10)-1]:t.name.color:r.globals.series.length>1&&t.total.show&&(s=t.total.color);var o=r.globals.dom.baseEl.querySelector(\".apexcharts-datalabel-label\"),n=r.globals.dom.baseEl.querySelector(\".apexcharts-datalabel-value\");i=(0,t.value.formatter)(i,r),a||\"function\"!=typeof t.total.formatter||(i=t.total.formatter(r));var l=e===t.total.label;e=t.name.formatter(e,l,r),null!==o&&(o.textContent=e),null!==n&&(n.textContent=i),null!==o&&(o.style.fill=s)}},{key:\"printDataLabelsInner\",value:function(t,e){var i=this.w,a=t.getAttribute(\"data:value\"),s=i.globals.seriesNames[parseInt(t.parentNode.getAttribute(\"rel\"),10)-1];i.globals.series.length>1&&this.printInnerLabels(e,s,a,t);var r=i.globals.dom.baseEl.querySelector(\".apexcharts-datalabels-group\");null!==r&&(r.style.opacity=1)}},{key:\"drawSpokes\",value:function(t){var e=this,i=this.w,a=new m(this.ctx),s=i.config.plotOptions.polarArea.spokes;if(0!==s.strokeWidth){for(var r=[],o=360/i.globals.series.length,n=0;n<i.globals.series.length;n++)r.push(x.polarToCartesian(this.centerX,this.centerY,i.globals.radialSize,i.config.plotOptions.pie.startAngle+o*n));r.forEach((function(i,r){var o=a.drawLine(i.x,i.y,e.centerX,e.centerY,Array.isArray(s.connectorColors)?s.connectorColors[r]:s.connectorColors);t.add(o)}))}}},{key:\"revertDataLabelsInner\",value:function(t,e,i){var a=this,s=this.w,r=s.globals.dom.baseEl.querySelector(\".apexcharts-datalabels-group\"),o=!1,n=s.globals.dom.baseEl.getElementsByClassName(\"apexcharts-pie-area\"),l=function(t){var i=t.makeSliceOut,s=t.printLabel;Array.prototype.forEach.call(n,(function(t){\"true\"===t.getAttribute(\"data:pieClicked\")&&(i&&(o=!0),s&&a.printDataLabelsInner(t,e))}))};if(l({makeSliceOut:!0,printLabel:!1}),e.total.show&&s.globals.series.length>1)o&&!e.total.showAlways?l({makeSliceOut:!1,printLabel:!0}):this.printInnerLabels(e,e.total.label,e.total.formatter(s));else if(l({makeSliceOut:!1,printLabel:!0}),!o)if(s.globals.selectedDataPoints.length&&s.globals.series.length>1)if(s.globals.selectedDataPoints[0].length>0){var h=s.globals.selectedDataPoints[0],c=s.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(this.chartType.toLowerCase(),\"-slice-\").concat(h));this.printDataLabelsInner(c,e)}else r&&s.globals.selectedDataPoints.length&&0===s.globals.selectedDataPoints[0].length&&(r.style.opacity=0);else r&&s.globals.series.length>1&&(r.style.opacity=0)}}]),t}(),Pt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animDur=0;var i=this.w;this.graphics=new m(this.ctx),this.lineColorArr=void 0!==i.globals.stroke.colors?i.globals.stroke.colors:i.globals.colors,this.defaultSize=i.globals.svgHeight<i.globals.svgWidth?i.globals.gridHeight+1.5*i.globals.goldenPadding:i.globals.gridWidth,this.isLog=i.config.yaxis[0].logarithmic,this.coreUtils=new y(this.ctx),this.maxValue=this.isLog?this.coreUtils.getLogVal(i.globals.maxY,0):i.globals.maxY,this.minValue=this.isLog?this.coreUtils.getLogVal(this.w.globals.minY,0):i.globals.minY,this.polygons=i.config.plotOptions.radar.polygons,this.strokeWidth=i.config.stroke.show?i.config.stroke.width:0,this.size=this.defaultSize/2.1-this.strokeWidth-i.config.chart.dropShadow.blur,i.config.xaxis.labels.show&&(this.size=this.size-i.globals.xAxisLabelsWidth/1.75),void 0!==i.config.plotOptions.radar.size&&(this.size=i.config.plotOptions.radar.size),this.dataRadiusOfPercent=[],this.dataRadius=[],this.angleArr=[],this.yaxisLabelsTextsPos=[]}return r(t,[{key:\"draw\",value:function(t){var i=this,a=this.w,s=new R(this.ctx),r=[],o=new O(this.ctx);t.length&&(this.dataPointsLen=t[a.globals.maxValsInArrayIndex].length),this.disAngle=2*Math.PI/this.dataPointsLen;var n=a.globals.gridWidth/2,l=a.globals.gridHeight/2,h=n+a.config.plotOptions.radar.offsetX,c=l+a.config.plotOptions.radar.offsetY,d=this.graphics.group({class:\"apexcharts-radar-series apexcharts-plot-series\",transform:\"translate(\".concat(h||0,\", \").concat(c||0,\")\")}),g=[],u=null,p=null;if(this.yaxisLabels=this.graphics.group({class:\"apexcharts-yaxis\"}),t.forEach((function(t,n){var l=t.length===a.globals.dataPoints,h=i.graphics.group().attr({class:\"apexcharts-series\",\"data:longestSeries\":l,seriesName:x.escapeString(a.globals.seriesNames[n]),rel:n+1,\"data:realIndex\":n});i.dataRadiusOfPercent[n]=[],i.dataRadius[n]=[],i.angleArr[n]=[],t.forEach((function(t,e){var a=Math.abs(i.maxValue-i.minValue);t+=Math.abs(i.minValue),i.isLog&&(t=i.coreUtils.getLogVal(t,0)),i.dataRadiusOfPercent[n][e]=t/a,i.dataRadius[n][e]=i.dataRadiusOfPercent[n][e]*i.size,i.angleArr[n][e]=e*i.disAngle})),g=i.getDataPointsPos(i.dataRadius[n],i.angleArr[n]);var c=i.createPaths(g,{x:0,y:0});u=i.graphics.group({class:\"apexcharts-series-markers-wrap apexcharts-element-hidden\"}),p=i.graphics.group({class:\"apexcharts-datalabels\",\"data:realIndex\":n}),a.globals.delayedElements.push({el:u.node,index:n});var d={i:n,realIndex:n,animationDelay:n,initialSpeed:a.config.chart.animations.speed,dataChangeSpeed:a.config.chart.animations.dynamicAnimation.speed,className:\"apexcharts-radar\",shouldClipToGrid:!1,bindEventsOnPaths:!1,stroke:a.globals.stroke.colors[n],strokeLineCap:a.config.stroke.lineCap},f=null;a.globals.previousPaths.length>0&&(f=i.getPreviousPath(n));for(var b=0;b<c.linePathsTo.length;b++){var m=i.graphics.renderPaths(e(e({},d),{},{pathFrom:null===f?c.linePathsFrom[b]:f,pathTo:c.linePathsTo[b],strokeWidth:Array.isArray(i.strokeWidth)?i.strokeWidth[n]:i.strokeWidth,fill:\"none\",drawShadow:!1}));h.add(m);var y=s.fillPath({seriesNumber:n}),w=i.graphics.renderPaths(e(e({},d),{},{pathFrom:null===f?c.areaPathsFrom[b]:f,pathTo:c.areaPathsTo[b],strokeWidth:0,fill:y,drawShadow:!1}));if(a.config.chart.dropShadow.enabled){var k=new v(i.ctx),A=a.config.chart.dropShadow;k.dropShadow(w,Object.assign({},A,{noUserSpaceOnUse:!0}),n)}h.add(w)}t.forEach((function(t,s){var r=new H(i.ctx).getMarkerConfig({cssClass:\"apexcharts-marker\",seriesIndex:n,dataPointIndex:s}),l=i.graphics.drawMarker(g[s].x,g[s].y,r);l.attr(\"rel\",s),l.attr(\"j\",s),l.attr(\"index\",n),l.node.setAttribute(\"default-marker-size\",r.pSize);var c=i.graphics.group({class:\"apexcharts-series-markers\"});c&&c.add(l),u.add(c),h.add(u);var d=a.config.dataLabels;if(d.enabled){var f=d.formatter(a.globals.series[n][s],{seriesIndex:n,dataPointIndex:s,w:a});o.plotDataLabelsText({x:g[s].x,y:g[s].y,text:f,textAnchor:\"middle\",i:n,j:n,parent:p,offsetCorrection:!1,dataLabelsConfig:e({},d)})}h.add(p)})),r.push(h)})),this.drawPolygons({parent:d}),a.config.xaxis.labels.show){var f=this.drawXAxisTexts();d.add(f)}return r.forEach((function(t){d.add(t)})),d.add(this.yaxisLabels),d}},{key:\"drawPolygons\",value:function(t){for(var e=this,i=this.w,a=t.parent,s=new Ct(this.ctx),r=i.globals.yAxisScale[0].result.reverse(),o=r.length,n=[],l=this.size/(o-1),h=0;h<o;h++)n[h]=l*h;n.reverse();var c=[],d=[];n.forEach((function(t,i){var a=x.getPolygonPos(t,e.dataPointsLen),s=\"\";a.forEach((function(t,a){if(0===i){var r=e.graphics.drawLine(t.x,t.y,0,0,Array.isArray(e.polygons.connectorColors)?e.polygons.connectorColors[a]:e.polygons.connectorColors);d.push(r)}0===a&&e.yaxisLabelsTextsPos.push({x:t.x,y:t.y}),s+=t.x+\",\"+t.y+\" \"})),c.push(s)})),c.forEach((function(t,s){var r=e.polygons.strokeColors,o=e.polygons.strokeWidth,n=e.graphics.drawPolygon(t,Array.isArray(r)?r[s]:r,Array.isArray(o)?o[s]:o,i.globals.radarPolygons.fill.colors[s]);a.add(n)})),d.forEach((function(t){a.add(t)})),i.config.yaxis[0].show&&this.yaxisLabelsTextsPos.forEach((function(t,i){var a=s.drawYAxisTexts(t.x,t.y,i,r[i]);e.yaxisLabels.add(a)}))}},{key:\"drawXAxisTexts\",value:function(){var t=this,i=this.w,a=i.config.xaxis.labels,s=this.graphics.group({class:\"apexcharts-xaxis\"}),r=x.getPolygonPos(this.size,this.dataPointsLen);return i.globals.labels.forEach((function(o,n){var l=i.config.xaxis.labels.formatter,h=new O(t.ctx);if(r[n]){var c=t.getTextPos(r[n],t.size),d=l(o,{seriesIndex:-1,dataPointIndex:n,w:i});h.plotDataLabelsText({x:c.newX,y:c.newY,text:d,textAnchor:c.textAnchor,i:n,j:n,parent:s,color:Array.isArray(a.style.colors)&&a.style.colors[n]?a.style.colors[n]:\"#a8a8a8\",dataLabelsConfig:e({textAnchor:c.textAnchor,dropShadow:{enabled:!1}},a),offsetCorrection:!1})}})),s}},{key:\"createPaths\",value:function(t,e){var i=this,a=[],s=[],r=[],o=[];if(t.length){s=[this.graphics.move(e.x,e.y)],o=[this.graphics.move(e.x,e.y)];var n=this.graphics.move(t[0].x,t[0].y),l=this.graphics.move(t[0].x,t[0].y);t.forEach((function(e,a){n+=i.graphics.line(e.x,e.y),l+=i.graphics.line(e.x,e.y),a===t.length-1&&(n+=\"Z\",l+=\"Z\")})),a.push(n),r.push(l)}return{linePathsFrom:s,linePathsTo:a,areaPathsFrom:o,areaPathsTo:r}}},{key:\"getTextPos\",value:function(t,e){var i=\"middle\",a=t.x,s=t.y;return Math.abs(t.x)>=10?t.x>0?(i=\"start\",a+=10):t.x<0&&(i=\"end\",a-=10):i=\"middle\",Math.abs(t.y)>=e-10&&(t.y<0?s-=10:t.y>0&&(s+=10)),{textAnchor:i,newX:a,newY:s}}},{key:\"getPreviousPath\",value:function(t){for(var e=this.w,i=null,a=0;a<e.globals.previousPaths.length;a++){var s=e.globals.previousPaths[a];s.paths.length>0&&parseInt(s.realIndex,10)===parseInt(t,10)&&void 0!==e.globals.previousPaths[a].paths[0]&&(i=e.globals.previousPaths[a].paths[0].d)}return i}},{key:\"getDataPointsPos\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.dataPointsLen;t=t||[],e=e||[];for(var a=[],s=0;s<i;s++){var r={};r.x=t[s]*Math.sin(e[s]),r.y=-t[s]*Math.cos(e[s]),a.push(r)}return a}}]),t}(),It=function(t){n(i,Lt);var e=d(i);function i(t){var s;a(this,i),(s=e.call(this,t)).ctx=t,s.w=t.w,s.animBeginArr=[0],s.animDur=0;var r=s.w;return s.startAngle=r.config.plotOptions.radialBar.startAngle,s.endAngle=r.config.plotOptions.radialBar.endAngle,s.totalAngle=Math.abs(r.config.plotOptions.radialBar.endAngle-r.config.plotOptions.radialBar.startAngle),s.trackStartAngle=r.config.plotOptions.radialBar.track.startAngle,s.trackEndAngle=r.config.plotOptions.radialBar.track.endAngle,s.donutDataLabels=s.w.config.plotOptions.radialBar.dataLabels,s.radialDataLabels=s.donutDataLabels,s.trackStartAngle||(s.trackStartAngle=s.startAngle),s.trackEndAngle||(s.trackEndAngle=s.endAngle),360===s.endAngle&&(s.endAngle=359.99),s.margin=parseInt(r.config.plotOptions.radialBar.track.margin,10),s}return r(i,[{key:\"draw\",value:function(t){var e=this.w,i=new m(this.ctx),a=i.group({class:\"apexcharts-radialbar\"});if(e.globals.noData)return a;var s=i.group(),r=this.defaultSize/2,o=e.globals.gridWidth/2,n=this.defaultSize/2.05;e.config.chart.sparkline.enabled||(n=n-e.config.stroke.width-e.config.chart.dropShadow.blur);var l=e.globals.fill.colors;if(e.config.plotOptions.radialBar.track.show){var h=this.drawTracks({size:n,centerX:o,centerY:r,colorArr:l,series:t});s.add(h)}var c=this.drawArcs({size:n,centerX:o,centerY:r,colorArr:l,series:t}),d=360;e.config.plotOptions.radialBar.startAngle<0&&(d=this.totalAngle);var g=(360-d)/360;if(e.globals.radialSize=n-n*g,this.radialDataLabels.value.show){var u=Math.max(this.radialDataLabels.value.offsetY,this.radialDataLabels.name.offsetY);e.globals.radialSize+=u*g}return s.add(c.g),\"front\"===e.config.plotOptions.radialBar.hollow.position&&(c.g.add(c.elHollow),c.dataLabels&&c.g.add(c.dataLabels)),a.add(s),a}},{key:\"drawTracks\",value:function(t){var e=this.w,i=new m(this.ctx),a=i.group({class:\"apexcharts-tracks\"}),s=new v(this.ctx),r=new R(this.ctx),o=this.getStrokeWidth(t);t.size=t.size-o/2;for(var n=0;n<t.series.length;n++){var l=i.group({class:\"apexcharts-radialbar-track apexcharts-track\"});a.add(l),l.attr({rel:n+1}),t.size=t.size-o-this.margin;var h=e.config.plotOptions.radialBar.track,c=r.fillPath({seriesNumber:0,size:t.size,fillColors:Array.isArray(h.background)?h.background[n]:h.background,solid:!0}),d=this.trackStartAngle,g=this.trackEndAngle;Math.abs(g)+Math.abs(d)>=360&&(g=360-Math.abs(this.startAngle)-.1);var u=i.drawPath({d:\"\",stroke:c,strokeWidth:o*parseInt(h.strokeWidth,10)/100,fill:\"none\",strokeOpacity:h.opacity,classes:\"apexcharts-radialbar-area\"});if(h.dropShadow.enabled){var p=h.dropShadow;s.dropShadow(u,p)}l.add(u),u.attr(\"id\",\"apexcharts-radialbarTrack-\"+n),this.animatePaths(u,{centerX:t.centerX,centerY:t.centerY,endAngle:g,startAngle:d,size:t.size,i:n,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:e.globals.easing})}return a}},{key:\"drawArcs\",value:function(t){var e=this.w,i=new m(this.ctx),a=new R(this.ctx),s=new v(this.ctx),r=i.group(),o=this.getStrokeWidth(t);t.size=t.size-o/2;var n=e.config.plotOptions.radialBar.hollow.background,l=t.size-o*t.series.length-this.margin*t.series.length-o*parseInt(e.config.plotOptions.radialBar.track.strokeWidth,10)/100/2,h=l-e.config.plotOptions.radialBar.hollow.margin;void 0!==e.config.plotOptions.radialBar.hollow.image&&(n=this.drawHollowImage(t,r,l,n));var c=this.drawHollow({size:h,centerX:t.centerX,centerY:t.centerY,fill:n||\"transparent\"});if(e.config.plotOptions.radialBar.hollow.dropShadow.enabled){var d=e.config.plotOptions.radialBar.hollow.dropShadow;s.dropShadow(c,d)}var g=1;!this.radialDataLabels.total.show&&e.globals.series.length>1&&(g=0);var u=null;this.radialDataLabels.show&&(u=this.renderInnerDataLabels(this.radialDataLabels,{hollowSize:l,centerX:t.centerX,centerY:t.centerY,opacity:g})),\"back\"===e.config.plotOptions.radialBar.hollow.position&&(r.add(c),u&&r.add(u));var p=!1;e.config.plotOptions.radialBar.inverseOrder&&(p=!0);for(var f=p?t.series.length-1:0;p?f>=0:f<t.series.length;p?f--:f++){var b=i.group({class:\"apexcharts-series apexcharts-radial-series\",seriesName:x.escapeString(e.globals.seriesNames[f])});r.add(b),b.attr({rel:f+1,\"data:realIndex\":f}),this.ctx.series.addCollapsedClassToSeries(b,f),t.size=t.size-o-this.margin;var y=a.fillPath({seriesNumber:f,size:t.size,value:t.series[f]}),w=this.startAngle,k=void 0,A=x.negToZero(t.series[f]>100?100:t.series[f])/100,S=Math.round(this.totalAngle*A)+this.startAngle,C=void 0;e.globals.dataChanged&&(k=this.startAngle,C=Math.round(this.totalAngle*x.negToZero(e.globals.previousPaths[f])/100)+k),Math.abs(S)+Math.abs(w)>=360&&(S-=.01),Math.abs(C)+Math.abs(k)>=360&&(C-=.01);var L=S-w,P=Array.isArray(e.config.stroke.dashArray)?e.config.stroke.dashArray[f]:e.config.stroke.dashArray,I=i.drawPath({d:\"\",stroke:y,strokeWidth:o,fill:\"none\",fillOpacity:e.config.fill.opacity,classes:\"apexcharts-radialbar-area apexcharts-radialbar-slice-\"+f,strokeDashArray:P});if(m.setAttrs(I.node,{\"data:angle\":L,\"data:value\":t.series[f]}),e.config.chart.dropShadow.enabled){var T=e.config.chart.dropShadow;s.dropShadow(I,T,f)}s.setSelectionFilter(I,0,f),this.addListeners(I,this.radialDataLabels),b.add(I),I.attr({index:0,j:f});var M=0;!this.initialAnim||e.globals.resized||e.globals.dataChanged||(M=e.config.chart.animations.speed),e.globals.dataChanged&&(M=e.config.chart.animations.dynamicAnimation.speed),this.animDur=M/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur),this.animatePaths(I,{centerX:t.centerX,centerY:t.centerY,endAngle:S,startAngle:w,prevEndAngle:C,prevStartAngle:k,size:t.size,i:f,totalItems:2,animBeginArr:this.animBeginArr,dur:M,shouldSetPrevPaths:!0,easing:e.globals.easing})}return{g:r,elHollow:c,dataLabels:u}}},{key:\"drawHollow\",value:function(t){var e=new m(this.ctx).drawCircle(2*t.size);return e.attr({class:\"apexcharts-radialbar-hollow\",cx:t.centerX,cy:t.centerY,r:t.size,fill:t.fill}),e}},{key:\"drawHollowImage\",value:function(t,e,i,a){var s=this.w,r=new R(this.ctx),o=x.randomId(),n=s.config.plotOptions.radialBar.hollow.image;if(s.config.plotOptions.radialBar.hollow.imageClipped)r.clippedImgArea({width:i,height:i,image:n,patternID:\"pattern\".concat(s.globals.cuid).concat(o)}),a=\"url(#pattern\".concat(s.globals.cuid).concat(o,\")\");else{var l=s.config.plotOptions.radialBar.hollow.imageWidth,h=s.config.plotOptions.radialBar.hollow.imageHeight;if(void 0===l&&void 0===h){var c=s.globals.dom.Paper.image(n).loaded((function(e){this.move(t.centerX-e.width/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-e.height/2+s.config.plotOptions.radialBar.hollow.imageOffsetY)}));e.add(c)}else{var d=s.globals.dom.Paper.image(n).loaded((function(e){this.move(t.centerX-l/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-h/2+s.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(l,h)}));e.add(d)}}return a}},{key:\"getStrokeWidth\",value:function(t){var e=this.w;return t.size*(100-parseInt(e.config.plotOptions.radialBar.hollow.size,10))/100/(t.series.length+1)-this.margin}}]),i}(),Tt=function(t){n(s,yt);var i=d(s);function s(){return a(this,s),i.apply(this,arguments)}return r(s,[{key:\"draw\",value:function(t,i){var a=this.w,s=new m(this.ctx);this.rangeBarOptions=this.w.config.plotOptions.rangeBar,this.series=t,this.seriesRangeStart=a.globals.seriesRangeStart,this.seriesRangeEnd=a.globals.seriesRangeEnd,this.barHelpers.initVariables(t);for(var r=s.group({class:\"apexcharts-rangebar-series apexcharts-plot-series\"}),n=0;n<t.length;n++){var l,h,c,d,g=void 0,u=void 0,p=a.globals.comboCharts?i[n]:n,f=s.group({class:\"apexcharts-series\",seriesName:x.escapeString(a.globals.seriesNames[p]),rel:n+1,\"data:realIndex\":p});this.ctx.series.addCollapsedClassToSeries(f,p),t[n].length>0&&(this.visibleI=this.visibleI+1);var b=0,v=0;this.yRatio.length>1&&(this.yaxisIndex=p);var y=this.barHelpers.initialPositions();u=y.y,d=y.zeroW,g=y.x,v=y.barWidth,b=y.barHeight,l=y.xDivision,h=y.yDivision,c=y.zeroH;for(var w=s.group({class:\"apexcharts-datalabels\",\"data:realIndex\":p}),k=s.group({class:\"apexcharts-rangebar-goals-markers\",style:\"pointer-events: none\"}),A=0;A<a.globals.dataPoints;A++){var S,C=this.barHelpers.getStrokeWidth(n,A,p),L=this.seriesRangeStart[n][A],P=this.seriesRangeEnd[n][A],I=null,T=null,M=null,X={x:g,y:u,strokeWidth:C,elSeries:f},z=this.seriesLen;if(a.config.plotOptions.bar.rangeBarGroupRows&&(z=1),void 0===a.config.series[n].data[A])break;if(this.isHorizontal){M=u+b*this.visibleI;var E=(h-b*z)/2;if(a.config.series[n].data[A].x){var Y=this.detectOverlappingBars({i:n,j:A,barYPosition:M,srty:E,barHeight:b,yDivision:h,initPositions:y});b=Y.barHeight,M=Y.barYPosition}v=(I=this.drawRangeBarPaths(e({indexes:{i:n,j:A,realIndex:p},barHeight:b,barYPosition:M,zeroW:d,yDivision:h,y1:L,y2:P},X))).barWidth}else{a.globals.isXNumeric&&(g=(a.globals.seriesX[n][A]-a.globals.minX)/this.xRatio-v/2),T=g+v*this.visibleI;var F=(l-v*z)/2;if(a.config.series[n].data[A].x){var R=this.detectOverlappingBars({i:n,j:A,barXPosition:T,srtx:F,barWidth:v,xDivision:l,initPositions:y});v=R.barWidth,T=R.barXPosition}b=(I=this.drawRangeColumnPaths(e({indexes:{i:n,j:A,realIndex:p},barWidth:v,barXPosition:T,zeroH:c,xDivision:l},X))).barHeight}var H=this.barHelpers.drawGoalLine({barXPosition:I.barXPosition,barYPosition:M,goalX:I.goalX,goalY:I.goalY,barHeight:b,barWidth:v});H&&k.add(H),u=I.y,g=I.x;var D=this.barHelpers.getPathFillColor(t,n,A,p),O=a.globals.stroke.colors[p];this.renderSeries((o(S={realIndex:p,pathFill:D,lineFill:O,j:A,i:n,x:g,y:u,y1:L,y2:P,pathFrom:I.pathFrom,pathTo:I.pathTo,strokeWidth:C,elSeries:f,series:t,barHeight:b,barWidth:v,barXPosition:T,barYPosition:M},\"barWidth\",v),o(S,\"elDataLabelsWrap\",w),o(S,\"elGoalsMarkers\",k),o(S,\"visibleSeries\",this.visibleI),o(S,\"type\",\"rangebar\"),S))}r.add(f)}return r}},{key:\"detectOverlappingBars\",value:function(t){var e=t.i,i=t.j,a=t.barYPosition,s=t.barXPosition,r=t.srty,o=t.srtx,n=t.barHeight,l=t.barWidth,h=t.yDivision,c=t.xDivision,d=t.initPositions,g=this.w,u=[],p=g.config.series[e].data[i].rangeName,f=g.config.series[e].data[i].x,x=Array.isArray(f)?f.join(\" \"):f,b=g.globals.labels.map((function(t){return Array.isArray(t)?t.join(\" \"):t})).indexOf(x),v=g.globals.seriesRange[e].findIndex((function(t){return t.x===x&&t.overlaps.length>0}));return this.isHorizontal?(a=g.config.plotOptions.bar.rangeBarGroupRows?r+h*b:r+n*this.visibleI+h*b,v>-1&&!g.config.plotOptions.bar.rangeBarOverlap&&(u=g.globals.seriesRange[e][v].overlaps).indexOf(p)>-1&&(a=(n=d.barHeight/u.length)*this.visibleI+h*(100-parseInt(this.barOptions.barHeight,10))/100/2+n*(this.visibleI+u.indexOf(p))+h*b)):(b>-1&&(s=g.config.plotOptions.bar.rangeBarGroupRows?o+c*b:o+l*this.visibleI+c*b),v>-1&&!g.config.plotOptions.bar.rangeBarOverlap&&(u=g.globals.seriesRange[e][v].overlaps).indexOf(p)>-1&&(s=(l=d.barWidth/u.length)*this.visibleI+c*(100-parseInt(this.barOptions.barWidth,10))/100/2+l*(this.visibleI+u.indexOf(p))+c*b)),{barYPosition:a,barXPosition:s,barHeight:n,barWidth:l}}},{key:\"drawRangeColumnPaths\",value:function(t){var e=t.indexes,i=t.x,a=t.xDivision,s=t.barWidth,r=t.barXPosition,o=t.zeroH,n=this.w,l=e.i,h=e.j,c=this.yRatio[this.yaxisIndex],d=e.realIndex,g=this.getRangeValue(d,h),u=Math.min(g.start,g.end),p=Math.max(g.start,g.end);void 0===this.series[l][h]||null===this.series[l][h]?u=o:(u=o-u/c,p=o-p/c);var f=Math.abs(p-u),x=this.barHelpers.getColumnPaths({barXPosition:r,barWidth:s,y1:u,y2:p,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,realIndex:e.realIndex,i:d,j:h,w:n});return n.globals.isXNumeric||(i+=a),{pathTo:x.pathTo,pathFrom:x.pathFrom,barHeight:f,x:i,y:p,goalY:this.barHelpers.getGoalValues(\"y\",null,o,l,h),barXPosition:r}}},{key:\"drawRangeBarPaths\",value:function(t){var e=t.indexes,i=t.y,a=t.y1,s=t.y2,r=t.yDivision,o=t.barHeight,n=t.barYPosition,l=t.zeroW,h=this.w,c=l+a/this.invertedYRatio,d=l+s/this.invertedYRatio,g=Math.abs(d-c),u=this.barHelpers.getBarpaths({barYPosition:n,barHeight:o,x1:c,x2:d,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,i:e.realIndex,realIndex:e.realIndex,j:e.j,w:h});return h.globals.isXNumeric||(i+=r),{pathTo:u.pathTo,pathFrom:u.pathFrom,barWidth:g,x:d,goalX:this.barHelpers.getGoalValues(\"x\",l,null,e.realIndex,e.j),y:i}}},{key:\"getRangeValue\",value:function(t,e){var i=this.w;return{start:i.globals.seriesRangeStart[t][e],end:i.globals.seriesRangeEnd[t][e]}}}]),s}(),Mt=function(){function t(e){a(this,t),this.w=e.w,this.lineCtx=e}return r(t,[{key:\"sameValueSeriesFix\",value:function(t,e){var i=this.w;if((\"gradient\"===i.config.fill.type||\"gradient\"===i.config.fill.type[t])&&new y(this.lineCtx.ctx,i).seriesHaveSameValues(t)){var a=e[t].slice();a[a.length-1]=a[a.length-1]+1e-6,e[t]=a}return e}},{key:\"calculatePoints\",value:function(t){var e=t.series,i=t.realIndex,a=t.x,s=t.y,r=t.i,o=t.j,n=t.prevY,l=this.w,h=[],c=[];if(0===o){var d=this.lineCtx.categoryAxisCorrection+l.config.markers.offsetX;l.globals.isXNumeric&&(d=(l.globals.seriesX[i][0]-l.globals.minX)/this.lineCtx.xRatio+l.config.markers.offsetX),h.push(d),c.push(x.isNumber(e[r][0])?n+l.config.markers.offsetY:null),h.push(a+l.config.markers.offsetX),c.push(x.isNumber(e[r][o+1])?s+l.config.markers.offsetY:null)}else h.push(a+l.config.markers.offsetX),c.push(x.isNumber(e[r][o+1])?s+l.config.markers.offsetY:null);return{x:h,y:c}}},{key:\"checkPreviousPaths\",value:function(t){for(var e=t.pathFromLine,i=t.pathFromArea,a=t.realIndex,s=this.w,r=0;r<s.globals.previousPaths.length;r++){var o=s.globals.previousPaths[r];(\"line\"===o.type||\"area\"===o.type)&&o.paths.length>0&&parseInt(o.realIndex,10)===parseInt(a,10)&&(\"line\"===o.type?(this.lineCtx.appendPathFrom=!1,e=s.globals.previousPaths[r].paths[0].d):\"area\"===o.type&&(this.lineCtx.appendPathFrom=!1,i=s.globals.previousPaths[r].paths[0].d,s.config.stroke.show&&s.globals.previousPaths[r].paths[1]&&(e=s.globals.previousPaths[r].paths[1].d)))}return{pathFromLine:e,pathFromArea:i}}},{key:\"determineFirstPrevY\",value:function(t){var e,i=t.i,a=t.series,s=t.prevY,r=t.lineYPosition,o=this.w;if(void 0!==(null===(e=a[i])||void 0===e?void 0:e[0]))s=(r=o.config.chart.stacked&&i>0?this.lineCtx.prevSeriesY[i-1][0]:this.lineCtx.zeroY)-a[i][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]+2*(this.lineCtx.isReversed?a[i][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]:0);else if(o.config.chart.stacked&&i>0&&void 0===a[i][0])for(var n=i-1;n>=0;n--)if(null!==a[n][0]&&void 0!==a[n][0]){s=r=this.lineCtx.prevSeriesY[n][0];break}return{prevY:s,lineYPosition:r}}}]),t}(),Xt=function(){function t(e,i,s){a(this,t),this.ctx=e,this.w=e.w,this.xyRatios=i,this.pointsChart=!(\"bubble\"!==this.w.config.chart.type&&\"scatter\"!==this.w.config.chart.type)||s,this.scatter=new D(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.lineHelpers=new Mt(this),this.markers=new H(this.ctx),this.prevSeriesY=[],this.categoryAxisCorrection=0,this.yaxisIndex=0}return r(t,[{key:\"draw\",value:function(t,i,a,s){var r=this.w,o=new m(this.ctx),n=r.globals.comboCharts?i:r.config.chart.type,l=o.group({class:\"apexcharts-\".concat(n,\"-series apexcharts-plot-series\")}),h=new y(this.ctx,r);this.yRatio=this.xyRatios.yRatio,this.zRatio=this.xyRatios.zRatio,this.xRatio=this.xyRatios.xRatio,this.baseLineY=this.xyRatios.baseLineY,t=h.getLogSeries(t),this.yRatio=h.getLogYRatios(this.yRatio);for(var c=[],d=0;d<t.length;d++){t=this.lineHelpers.sameValueSeriesFix(d,t);var g=r.globals.comboCharts?a[d]:d;this._initSerieVariables(t,d,g);var u=[],p=[],f=r.globals.padHorizontal+this.categoryAxisCorrection;this.ctx.series.addCollapsedClassToSeries(this.elSeries,g),r.globals.isXNumeric&&r.globals.seriesX.length>0&&(f=(r.globals.seriesX[g][0]-r.globals.minX)/this.xRatio),p.push(f);var x,b=f,v=void 0,w=b,k=this.zeroY,A=this.zeroY;k=this.lineHelpers.determineFirstPrevY({i:d,series:t,prevY:k,lineYPosition:0}).prevY,u.push(k),x=k;\"rangeArea\"===n&&(v=A=this.lineHelpers.determineFirstPrevY({i:d,series:s,prevY:A,lineYPosition:0}).prevY);var S={type:n,series:t,realIndex:g,i:d,x:f,y:1,pX:b,pY:x,pathsFrom:this._calculatePathsFrom({type:n,series:t,i:d,realIndex:g,prevX:w,prevY:k,prevY2:A}),linePaths:[],areaPaths:[],seriesIndex:a,lineYPosition:0,xArrj:p,yArrj:u,seriesRangeEnd:s},C=this._iterateOverDataPoints(e(e({},S),{},{iterations:\"rangeArea\"===n?t[d].length-1:void 0,isRangeStart:!0}));if(\"rangeArea\"===n){var L=this._calculatePathsFrom({series:s,i:d,realIndex:g,prevX:w,prevY:A}),P=this._iterateOverDataPoints(e(e({},S),{},{series:s,pY:v,pathsFrom:L,iterations:s[d].length-1,isRangeStart:!1}));C.linePaths[0]=P.linePath+C.linePath,C.pathFromLine=P.pathFromLine+C.pathFromLine}this._handlePaths({type:n,realIndex:g,i:d,paths:C}),this.elSeries.add(this.elPointsMain),this.elSeries.add(this.elDataLabelsWrap),c.push(this.elSeries)}if(r.config.chart.stacked)for(var I=c.length;I>0;I--)l.add(c[I-1]);else for(var T=0;T<c.length;T++)l.add(c[T]);return l}},{key:\"_initSerieVariables\",value:function(t,e,i){var a=this.w,s=new m(this.ctx);this.xDivision=a.globals.gridWidth/(a.globals.dataPoints-(\"on\"===a.config.xaxis.tickPlacement?1:0)),this.strokeWidth=Array.isArray(a.config.stroke.width)?a.config.stroke.width[i]:a.config.stroke.width,this.yRatio.length>1&&(this.yaxisIndex=i),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed,this.zeroY=a.globals.gridHeight-this.baseLineY[this.yaxisIndex]-(this.isReversed?a.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),this.areaBottomY=this.zeroY,(this.zeroY>a.globals.gridHeight||\"end\"===a.config.plotOptions.area.fillTo)&&(this.areaBottomY=a.globals.gridHeight),this.categoryAxisCorrection=this.xDivision/2,this.elSeries=s.group({class:\"apexcharts-series\",seriesName:x.escapeString(a.globals.seriesNames[i])}),this.elPointsMain=s.group({class:\"apexcharts-series-markers-wrap\",\"data:realIndex\":i}),this.elDataLabelsWrap=s.group({class:\"apexcharts-datalabels\",\"data:realIndex\":i});var r=t[e].length===a.globals.dataPoints;this.elSeries.attr({\"data:longestSeries\":r,rel:e+1,\"data:realIndex\":i}),this.appendPathFrom=!0}},{key:\"_calculatePathsFrom\",value:function(t){var e,i,a,s,r=t.type,o=t.series,n=t.i,l=t.realIndex,h=t.prevX,c=t.prevY,d=t.prevY2,g=this.w,u=new m(this.ctx);if(null===o[n][0]){for(var p=0;p<o[n].length;p++)if(null!==o[n][p]){h=this.xDivision*p,c=this.zeroY-o[n][p]/this.yRatio[this.yaxisIndex],e=u.move(h,c),i=u.move(h,this.areaBottomY);break}}else e=u.move(h,c),\"rangeArea\"===r&&(e=u.move(h,d)+u.line(h,c)),i=u.move(h,this.areaBottomY)+u.line(h,c);if(a=u.move(-1,this.zeroY)+u.line(-1,this.zeroY),s=u.move(-1,this.zeroY)+u.line(-1,this.zeroY),g.globals.previousPaths.length>0){var f=this.lineHelpers.checkPreviousPaths({pathFromLine:a,pathFromArea:s,realIndex:l});a=f.pathFromLine,s=f.pathFromArea}return{prevX:h,prevY:c,linePath:e,areaPath:i,pathFromLine:a,pathFromArea:s}}},{key:\"_handlePaths\",value:function(t){var i=t.type,a=t.realIndex,s=t.i,r=t.paths,o=this.w,n=new m(this.ctx),l=new R(this.ctx);this.prevSeriesY.push(r.yArrj),o.globals.seriesXvalues[a]=r.xArrj,o.globals.seriesYvalues[a]=r.yArrj;var h=o.config.forecastDataPoints;if(h.count>0&&\"rangeArea\"!==i){var c=o.globals.seriesXvalues[a][o.globals.seriesXvalues[a].length-h.count-1],d=n.drawRect(c,0,o.globals.gridWidth,o.globals.gridHeight,0);o.globals.dom.elForecastMask.appendChild(d.node);var g=n.drawRect(0,0,c,o.globals.gridHeight,0);o.globals.dom.elNonForecastMask.appendChild(g.node)}this.pointsChart||o.globals.delayedElements.push({el:this.elPointsMain.node,index:a});var u={i:s,realIndex:a,animationDelay:s,initialSpeed:o.config.chart.animations.speed,dataChangeSpeed:o.config.chart.animations.dynamicAnimation.speed,className:\"apexcharts-\".concat(i)};if(\"area\"===i)for(var p=l.fillPath({seriesNumber:a}),f=0;f<r.areaPaths.length;f++){var x=n.renderPaths(e(e({},u),{},{pathFrom:r.pathFromArea,pathTo:r.areaPaths[f],stroke:\"none\",strokeWidth:0,strokeLineCap:null,fill:p}));this.elSeries.add(x)}if(o.config.stroke.show&&!this.pointsChart){var b=null;if(\"line\"===i)b=l.fillPath({seriesNumber:a,i:s});else if(\"solid\"===o.config.stroke.fill.type)b=o.globals.stroke.colors[a];else{var v=o.config.fill;o.config.fill=o.config.stroke.fill,b=l.fillPath({seriesNumber:a,i:s}),o.config.fill=v}for(var y=0;y<r.linePaths.length;y++){var w=b;\"rangeArea\"===i&&(w=l.fillPath({seriesNumber:a}));var k=e(e({},u),{},{pathFrom:r.pathFromLine,pathTo:r.linePaths[y],stroke:b,strokeWidth:this.strokeWidth,strokeLineCap:o.config.stroke.lineCap,fill:\"rangeArea\"===i?w:\"none\"}),A=n.renderPaths(k);if(this.elSeries.add(A),A.attr(\"fill-rule\",\"evenodd\"),h.count>0&&\"rangeArea\"!==i){var S=n.renderPaths(k);S.node.setAttribute(\"stroke-dasharray\",h.dashArray),h.strokeWidth&&S.node.setAttribute(\"stroke-width\",h.strokeWidth),this.elSeries.add(S),S.attr(\"clip-path\",\"url(#forecastMask\".concat(o.globals.cuid,\")\")),A.attr(\"clip-path\",\"url(#nonForecastMask\".concat(o.globals.cuid,\")\"))}}}}},{key:\"_iterateOverDataPoints\",value:function(t){var e=t.type,i=t.series,a=t.iterations,s=t.realIndex,r=t.i,o=t.x,n=t.y,l=t.pX,h=t.pY,c=t.pathsFrom,d=t.linePaths,g=t.areaPaths,u=t.seriesIndex,p=t.lineYPosition,f=t.xArrj,b=t.yArrj,v=t.isRangeStart,y=t.seriesRangeEnd,w=this.w,k=new m(this.ctx),A=this.yRatio,S=c.prevY,C=c.linePath,L=c.areaPath,P=c.pathFromLine,I=c.pathFromArea,T=x.isNumber(w.globals.minYArr[s])?w.globals.minYArr[s]:w.globals.minY;a||(a=w.globals.dataPoints>1?w.globals.dataPoints-1:w.globals.dataPoints);for(var M=n,X=0;X<a;X++){var z=void 0===i[r][X+1]||null===i[r][X+1];if(w.globals.isXNumeric){var E=w.globals.seriesX[s][X+1];void 0===w.globals.seriesX[s][X+1]&&(E=w.globals.seriesX[s][a-1]),o=(E-w.globals.minX)/this.xRatio}else o+=this.xDivision;if(w.config.chart.stacked)if(r>0&&w.globals.collapsedSeries.length<w.config.series.length-1){p=this.prevSeriesY[function(t){for(var e=t,i=0;i<w.globals.series.length;i++)if(w.globals.collapsedSeriesIndices.indexOf(t)>-1){e--;break}return e>=0?e:0}(r-1)][X+1]}else p=this.zeroY;else p=this.zeroY;z?n=p-T/A[this.yaxisIndex]+2*(this.isReversed?T/A[this.yaxisIndex]:0):(n=p-i[r][X+1]/A[this.yaxisIndex]+2*(this.isReversed?i[r][X+1]/A[this.yaxisIndex]:0),\"rangeArea\"===e&&(M=p-y[r][X+1]/A[this.yaxisIndex]+2*(this.isReversed?y[r][X+1]/A[this.yaxisIndex]:0))),f.push(o),b.push(n);var Y=this.lineHelpers.calculatePoints({series:i,x:o,y:n,realIndex:s,i:r,j:X,prevY:S}),F=this._createPaths({type:e,series:i,i:r,realIndex:s,j:X,x:o,y:n,y2:M,pX:l,pY:h,linePath:C,areaPath:L,linePaths:d,areaPaths:g,seriesIndex:u,isRangeStart:v});g=F.areaPaths,d=F.linePaths,l=F.pX,h=F.pY,L=F.areaPath,C=F.linePath,this.appendPathFrom&&(P+=k.line(o,this.zeroY),I+=k.line(o,this.zeroY)),this.handleNullDataPoints(i,Y,r,X,s),this._handleMarkersAndLabels({type:e,pointsPos:Y,i:r,j:X,realIndex:s,isRangeStart:v})}return{yArrj:b,xArrj:f,pathFromArea:I,areaPaths:g,pathFromLine:P,linePaths:d,linePath:C,areaPath:L}}},{key:\"_handleMarkersAndLabels\",value:function(t){var e=t.type,i=t.pointsPos,a=t.isRangeStart,s=t.i,r=t.j,o=t.realIndex,n=this.w,l=new O(this.ctx);if(this.pointsChart)this.scatter.draw(this.elSeries,r,{realIndex:o,pointsPos:i,zRatio:this.zRatio,elParent:this.elPointsMain});else{n.globals.series[s].length>1&&this.elPointsMain.node.classList.add(\"apexcharts-element-hidden\");var h=this.markers.plotChartMarkers(i,o,r+1);null!==h&&this.elPointsMain.add(h)}var c=l.drawDataLabel({type:e,isRangeStart:a,pos:i,i:o,j:r+1});null!==c&&this.elDataLabelsWrap.add(c)}},{key:\"_createPaths\",value:function(t){var e=t.type,i=t.series,a=t.i,s=t.realIndex,r=t.j,o=t.x,n=t.y,l=t.y2,h=t.pX,c=t.pY,d=t.linePath,g=t.areaPath,u=t.linePaths,p=t.areaPaths,f=t.seriesIndex,x=t.isRangeStart,b=this.w,v=new m(this.ctx),y=b.config.stroke.curve,w=this.areaBottomY;if(Array.isArray(b.config.stroke.curve)&&(y=Array.isArray(f)?b.config.stroke.curve[f[a]]:b.config.stroke.curve[a]),\"smooth\"===y){var k=.35*(o-h);b.globals.hasNullValues?(null!==i[a][r]&&(null!==i[a][r+1]?(d=v.move(h,c)+v.curve(h+k,c,o-k,n,o+1,n),g=v.move(h+1,c)+v.curve(h+k,c,o-k,n,o+1,n)+v.line(o,w)+v.line(h,w)+\"z\"):(d=v.move(h,c),g=v.move(h,c)+\"z\")),u.push(d),p.push(g)):(d+=v.curve(h+k,c,o-k,n,o,n),g+=v.curve(h+k,c,o-k,n,o,n)),h=o,c=n,r===i[a].length-2&&(g=g+v.curve(h,c,o,n,o,w)+v.move(o,n)+\"z\",\"rangeArea\"===e&&x?d=d+v.curve(h,c,o,n,o,l)+v.move(o,l)+\"z\":b.globals.hasNullValues||(u.push(d),p.push(g)))}else{if(null===i[a][r+1]){d+=v.move(o,n);var A=b.globals.isXNumeric?(b.globals.seriesX[s][r]-b.globals.minX)/this.xRatio:o-this.xDivision;g=g+v.line(A,w)+v.move(o,n)+\"z\"}null===i[a][r]&&(d+=v.move(o,n),g+=v.move(o,w)),\"stepline\"===y?(d=d+v.line(o,null,\"H\")+v.line(null,n,\"V\"),g=g+v.line(o,null,\"H\")+v.line(null,n,\"V\")):\"straight\"===y&&(d+=v.line(o,n),g+=v.line(o,n)),r===i[a].length-2&&(g=g+v.line(o,w)+v.move(o,n)+\"z\",\"rangeArea\"===e&&x?d=d+v.line(o,l)+v.move(o,l)+\"z\":(u.push(d),p.push(g)))}return{linePaths:u,areaPaths:p,pX:h,pY:c,linePath:d,areaPath:g}}},{key:\"handleNullDataPoints\",value:function(t,e,i,a,s){var r=this.w;if(null===t[i][a]&&r.config.markers.showNullDataPoints||1===t[i].length){var o=this.markers.plotChartMarkers(e,s,a+1,this.strokeWidth-r.config.markers.strokeWidth/2,!0);null!==o&&this.elPointsMain.add(o)}}}]),t}();window.TreemapSquared={},window.TreemapSquared.generate=function(){function t(e,i,a,s){this.xoffset=e,this.yoffset=i,this.height=s,this.width=a,this.shortestEdge=function(){return Math.min(this.height,this.width)},this.getCoordinates=function(t){var e,i=[],a=this.xoffset,s=this.yoffset,o=r(t)/this.height,n=r(t)/this.width;if(this.width>=this.height)for(e=0;e<t.length;e++)i.push([a,s,a+o,s+t[e]/o]),s+=t[e]/o;else for(e=0;e<t.length;e++)i.push([a,s,a+t[e]/n,s+n]),a+=t[e]/n;return i},this.cutArea=function(e){var i;if(this.width>=this.height){var a=e/this.height,s=this.width-a;i=new t(this.xoffset+a,this.yoffset,s,this.height)}else{var r=e/this.width,o=this.height-r;i=new t(this.xoffset,this.yoffset+r,this.width,o)}return i}}function e(e,a,s,o,n){o=void 0===o?0:o,n=void 0===n?0:n;var l=i(function(t,e){var i,a=[],s=e/r(t);for(i=0;i<t.length;i++)a[i]=t[i]*s;return a}(e,a*s),[],new t(o,n,a,s),[]);return function(t){var e,i,a=[];for(e=0;e<t.length;e++)for(i=0;i<t[e].length;i++)a.push(t[e][i]);return a}(l)}function i(t,e,s,o){var n,l,h;if(0!==t.length)return n=s.shortestEdge(),function(t,e,i){var s;if(0===t.length)return!0;(s=t.slice()).push(e);var r=a(t,i),o=a(s,i);return r>=o}(e,l=t[0],n)?(e.push(l),i(t.slice(1),e,s,o)):(h=s.cutArea(r(e),o),o.push(s.getCoordinates(e)),i(t,[],h,o)),o;o.push(s.getCoordinates(e))}function a(t,e){var i=Math.min.apply(Math,t),a=Math.max.apply(Math,t),s=r(t);return Math.max(Math.pow(e,2)*a/Math.pow(s,2),Math.pow(s,2)/(Math.pow(e,2)*i))}function s(t){return t&&t.constructor===Array}function r(t){var e,i=0;for(e=0;e<t.length;e++)i+=t[e];return i}function o(t){var e,i=0;if(s(t[0]))for(e=0;e<t.length;e++)i+=o(t[e]);else i=r(t);return i}return function t(i,a,r,n,l){n=void 0===n?0:n,l=void 0===l?0:l;var h,c,d=[],g=[];if(s(i[0])){for(c=0;c<i.length;c++)d[c]=o(i[c]);for(h=e(d,a,r,n,l),c=0;c<i.length;c++)g.push(t(i[c],h[c][2]-h[c][0],h[c][3]-h[c][1],h[c][0],h[c][1]))}else g=e(i,a,r,n,l);return g}}();var zt,Et,Yt=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w,this.strokeWidth=this.w.config.stroke.width,this.helpers=new At(e),this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.labels=[]}return r(t,[{key:\"draw\",value:function(t){var e=this,i=this.w,a=new m(this.ctx),s=new R(this.ctx),r=a.group({class:\"apexcharts-treemap\"});if(i.globals.noData)return r;var o=[];return t.forEach((function(t){var e=t.map((function(t){return Math.abs(t)}));o.push(e)})),this.negRange=this.helpers.checkColorRange(),i.config.series.forEach((function(t,i){t.data.forEach((function(t){Array.isArray(e.labels[i])||(e.labels[i]=[]),e.labels[i].push(t.x)}))})),window.TreemapSquared.generate(o,i.globals.gridWidth,i.globals.gridHeight).forEach((function(o,n){var l=a.group({class:\"apexcharts-series apexcharts-treemap-series\",seriesName:x.escapeString(i.globals.seriesNames[n]),rel:n+1,\"data:realIndex\":n});if(i.config.chart.dropShadow.enabled){var h=i.config.chart.dropShadow;new v(e.ctx).dropShadow(r,h,n)}var c=a.group({class:\"apexcharts-data-labels\"});o.forEach((function(r,o){var h=r[0],c=r[1],d=r[2],g=r[3],u=a.drawRect(h,c,d-h,g-c,0,\"#fff\",1,e.strokeWidth,i.config.plotOptions.treemap.useFillColorAsStroke?f:i.globals.stroke.colors[n]);u.attr({cx:h,cy:c,index:n,i:n,j:o,width:d-h,height:g-c});var p=e.helpers.getShadeColor(i.config.chart.type,n,o,e.negRange),f=p.color;void 0!==i.config.series[n].data[o]&&i.config.series[n].data[o].fillColor&&(f=i.config.series[n].data[o].fillColor);var x=s.fillPath({color:f,seriesNumber:n,dataPointIndex:o});u.node.classList.add(\"apexcharts-treemap-rect\"),u.attr({fill:x}),e.helpers.addListeners(u);var b={x:h+(d-h)/2,y:c+(g-c)/2,width:0,height:0},v={x:h,y:c,width:d-h,height:g-c};if(i.config.chart.animations.enabled&&!i.globals.dataChanged){var m=1;i.globals.resized||(m=i.config.chart.animations.speed),e.animateTreemap(u,b,v,m)}if(i.globals.dataChanged){var y=1;e.dynamicAnim.enabled&&i.globals.shouldAnimate&&(y=e.dynamicAnim.speed,i.globals.previousPaths[n]&&i.globals.previousPaths[n][o]&&i.globals.previousPaths[n][o].rect&&(b=i.globals.previousPaths[n][o].rect),e.animateTreemap(u,b,v,y))}var w=e.getFontSize(r),k=i.config.dataLabels.formatter(e.labels[n][o],{value:i.globals.series[n][o],seriesIndex:n,dataPointIndex:o,w:i}),A=e.helpers.calculateDataLabels({text:k,x:(h+d)/2,y:(c+g)/2+e.strokeWidth/2+w/3,i:n,j:o,colorProps:p,fontSize:w,series:t});i.config.dataLabels.enabled&&A&&e.rotateToFitLabel(A,w,k,h,c,d,g),l.add(u),null!==A&&l.add(A)})),l.add(c),r.add(l)})),r}},{key:\"getFontSize\",value:function(t){var e=this.w;var i,a,s,r,o=function t(e){var i,a=0;if(Array.isArray(e[0]))for(i=0;i<e.length;i++)a+=t(e[i]);else for(i=0;i<e.length;i++)a+=e[i].length;return a}(this.labels)/function t(e){var i,a=0;if(Array.isArray(e[0]))for(i=0;i<e.length;i++)a+=t(e[i]);else for(i=0;i<e.length;i++)a+=1;return a}(this.labels);return i=t[2]-t[0],a=t[3]-t[1],s=i*a,r=Math.pow(s,.5),Math.min(r/o,parseInt(e.config.dataLabels.style.fontSize,10))}},{key:\"rotateToFitLabel\",value:function(t,e,i,a,s,r,o){var n=new m(this.ctx),l=n.getTextRects(i,e);if(l.width+this.w.config.stroke.width+5>r-a&&l.width<=o-s){var h=n.rotateAroundCenter(t.node);t.node.setAttribute(\"transform\",\"rotate(-90 \".concat(h.x,\" \").concat(h.y,\")\"))}}},{key:\"animateTreemap\",value:function(t,e,i,a){var s=new b(this.ctx);s.animateRect(t,{x:e.x,y:e.y,width:e.width,height:e.height},{x:i.x,y:i.y,width:i.width,height:i.height},a,(function(){s.animationCompleted(t)}))}}]),t}(),Ft=86400,Rt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.timeScaleArray=[],this.utc=this.w.config.xaxis.labels.datetimeUTC}return r(t,[{key:\"calculateTimeScaleTicks\",value:function(t,i){var a=this,s=this.w;if(s.globals.allSeriesCollapsed)return s.globals.labels=[],s.globals.timescaleLabels=[],[];var r=new I(this.ctx),o=(i-t)/864e5;this.determineInterval(o),s.globals.disableZoomIn=!1,s.globals.disableZoomOut=!1,o<.00011574074074074075?s.globals.disableZoomIn=!0:o>5e4&&(s.globals.disableZoomOut=!0);var n=r.getTimeUnitsfromTimestamp(t,i,this.utc),l=s.globals.gridWidth/o,h=l/24,c=h/60,d=c/60,g=Math.floor(24*o),u=Math.floor(1440*o),p=Math.floor(o*Ft),f=Math.floor(o),x=Math.floor(o/30),b=Math.floor(o/365),v={minMillisecond:n.minMillisecond,minSecond:n.minSecond,minMinute:n.minMinute,minHour:n.minHour,minDate:n.minDate,minMonth:n.minMonth,minYear:n.minYear},m={firstVal:v,currentMillisecond:v.minMillisecond,currentSecond:v.minSecond,currentMinute:v.minMinute,currentHour:v.minHour,currentMonthDate:v.minDate,currentDate:v.minDate,currentMonth:v.minMonth,currentYear:v.minYear,daysWidthOnXAxis:l,hoursWidthOnXAxis:h,minutesWidthOnXAxis:c,secondsWidthOnXAxis:d,numberOfSeconds:p,numberOfMinutes:u,numberOfHours:g,numberOfDays:f,numberOfMonths:x,numberOfYears:b};switch(this.tickInterval){case\"years\":this.generateYearScale(m);break;case\"months\":case\"half_year\":this.generateMonthScale(m);break;case\"months_days\":case\"months_fortnight\":case\"days\":case\"week_days\":this.generateDayScale(m);break;case\"hours\":this.generateHourScale(m);break;case\"minutes_fives\":case\"minutes\":this.generateMinuteScale(m);break;case\"seconds_tens\":case\"seconds_fives\":case\"seconds\":this.generateSecondScale(m)}var y=this.timeScaleArray.map((function(t){var i={position:t.position,unit:t.unit,year:t.year,day:t.day?t.day:1,hour:t.hour?t.hour:0,month:t.month+1};return\"month\"===t.unit?e(e({},i),{},{day:1,value:t.value+1}):\"day\"===t.unit||\"hour\"===t.unit?e(e({},i),{},{value:t.value}):\"minute\"===t.unit?e(e({},i),{},{value:t.value,minute:t.value}):\"second\"===t.unit?e(e({},i),{},{value:t.value,minute:t.minute,second:t.second}):t}));return y.filter((function(t){var e=1,i=Math.ceil(s.globals.gridWidth/120),r=t.value;void 0!==s.config.xaxis.tickAmount&&(i=s.config.xaxis.tickAmount),y.length>i&&(e=Math.floor(y.length/i));var o=!1,n=!1;switch(a.tickInterval){case\"years\":\"year\"===t.unit&&(o=!0);break;case\"half_year\":e=7,\"year\"===t.unit&&(o=!0);break;case\"months\":e=1,\"year\"===t.unit&&(o=!0);break;case\"months_fortnight\":e=15,\"year\"!==t.unit&&\"month\"!==t.unit||(o=!0),30===r&&(n=!0);break;case\"months_days\":e=10,\"month\"===t.unit&&(o=!0),30===r&&(n=!0);break;case\"week_days\":e=8,\"month\"===t.unit&&(o=!0);break;case\"days\":e=1,\"month\"===t.unit&&(o=!0);break;case\"hours\":\"day\"===t.unit&&(o=!0);break;case\"minutes_fives\":case\"seconds_fives\":r%5!=0&&(n=!0);break;case\"seconds_tens\":r%10!=0&&(n=!0)}if(\"hours\"===a.tickInterval||\"minutes_fives\"===a.tickInterval||\"seconds_tens\"===a.tickInterval||\"seconds_fives\"===a.tickInterval){if(!n)return!0}else if((r%e==0||o)&&!n)return!0}))}},{key:\"recalcDimensionsBasedOnFormat\",value:function(t,e){var i=this.w,a=this.formatDates(t),s=this.removeOverlappingTS(a);i.globals.timescaleLabels=s.slice(),new ot(this.ctx).plotCoords()}},{key:\"determineInterval\",value:function(t){var e=24*t,i=60*e;switch(!0){case t/365>5:this.tickInterval=\"years\";break;case t>800:this.tickInterval=\"half_year\";break;case t>180:this.tickInterval=\"months\";break;case t>90:this.tickInterval=\"months_fortnight\";break;case t>60:this.tickInterval=\"months_days\";break;case t>30:this.tickInterval=\"week_days\";break;case t>2:this.tickInterval=\"days\";break;case e>2.4:this.tickInterval=\"hours\";break;case i>15:this.tickInterval=\"minutes_fives\";break;case i>5:this.tickInterval=\"minutes\";break;case i>1:this.tickInterval=\"seconds_tens\";break;case 60*i>20:this.tickInterval=\"seconds_fives\";break;default:this.tickInterval=\"seconds\"}}},{key:\"generateYearScale\",value:function(t){var e=t.firstVal,i=t.currentMonth,a=t.currentYear,s=t.daysWidthOnXAxis,r=t.numberOfYears,o=e.minYear,n=0,l=new I(this.ctx),h=\"year\";if(e.minDate>1||e.minMonth>0){var c=l.determineRemainingDaysOfYear(e.minYear,e.minMonth,e.minDate);n=(l.determineDaysOfYear(e.minYear)-c+1)*s,o=e.minYear+1,this.timeScaleArray.push({position:n,value:o,unit:h,year:o,month:x.monthMod(i+1)})}else 1===e.minDate&&0===e.minMonth&&this.timeScaleArray.push({position:n,value:o,unit:h,year:a,month:x.monthMod(i+1)});for(var d=o,g=n,u=0;u<r;u++)d++,g=l.determineDaysOfYear(d-1)*s+g,this.timeScaleArray.push({position:g,value:d,unit:h,year:d,month:1})}},{key:\"generateMonthScale\",value:function(t){var e=t.firstVal,i=t.currentMonthDate,a=t.currentMonth,s=t.currentYear,r=t.daysWidthOnXAxis,o=t.numberOfMonths,n=a,l=0,h=new I(this.ctx),c=\"month\",d=0;if(e.minDate>1){l=(h.determineDaysOfMonths(a+1,e.minYear)-i+1)*r,n=x.monthMod(a+1);var g=s+d,u=x.monthMod(n),p=n;0===n&&(c=\"year\",p=g,u=1,g+=d+=1),this.timeScaleArray.push({position:l,value:p,unit:c,year:g,month:u})}else this.timeScaleArray.push({position:l,value:n,unit:c,year:s,month:x.monthMod(a)});for(var f=n+1,b=l,v=0,m=1;v<o;v++,m++){0===(f=x.monthMod(f))?(c=\"year\",d+=1):c=\"month\";var y=this._getYear(s,f,d);b=h.determineDaysOfMonths(f,y)*r+b;var w=0===f?y:f;this.timeScaleArray.push({position:b,value:w,unit:c,year:y,month:0===f?1:f}),f++}}},{key:\"generateDayScale\",value:function(t){var e=t.firstVal,i=t.currentMonth,a=t.currentYear,s=t.hoursWidthOnXAxis,r=t.numberOfDays,o=new I(this.ctx),n=\"day\",l=e.minDate+1,h=l,c=function(t,e,i){return t>o.determineDaysOfMonths(e+1,i)?(h=1,n=\"month\",g=e+=1,e):e},d=(24-e.minHour)*s,g=l,u=c(h,i,a);0===e.minHour&&1===e.minDate?(d=0,g=x.monthMod(e.minMonth),n=\"month\",h=e.minDate,r++):1!==e.minDate&&0===e.minHour&&0===e.minMinute&&(d=0,l=e.minDate,g=l,u=c(h=l,i,a)),this.timeScaleArray.push({position:d,value:g,unit:n,year:this._getYear(a,u,0),month:x.monthMod(u),day:h});for(var p=d,f=0;f<r;f++){n=\"day\",u=c(h+=1,u,this._getYear(a,u,0));var b=this._getYear(a,u,0);p=24*s+p;var v=1===h?x.monthMod(u):h;this.timeScaleArray.push({position:p,value:v,unit:n,year:b,month:x.monthMod(u),day:v})}}},{key:\"generateHourScale\",value:function(t){var e=t.firstVal,i=t.currentDate,a=t.currentMonth,s=t.currentYear,r=t.minutesWidthOnXAxis,o=t.numberOfHours,n=new I(this.ctx),l=\"hour\",h=function(t,e){return t>n.determineDaysOfMonths(e+1,s)&&(f=1,e+=1),{month:e,date:f}},c=function(t,e){return t>n.determineDaysOfMonths(e+1,s)?e+=1:e},d=60-(e.minMinute+e.minSecond/60),g=d*r,u=e.minHour+1,p=u+1;60===d&&(g=0,p=(u=e.minHour)+1);var f=i,b=c(f,a);this.timeScaleArray.push({position:g,value:u,unit:l,day:f,hour:p,year:s,month:x.monthMod(b)});for(var v=g,m=0;m<o;m++){if(l=\"hour\",p>=24)p=0,l=\"day\",b=h(f+=1,b).month,b=c(f,b);var y=this._getYear(s,b,0);v=60*r+v;var w=0===p?f:p;this.timeScaleArray.push({position:v,value:w,unit:l,hour:p,day:f,year:y,month:x.monthMod(b)}),p++}}},{key:\"generateMinuteScale\",value:function(t){for(var e=t.currentMillisecond,i=t.currentSecond,a=t.currentMinute,s=t.currentHour,r=t.currentDate,o=t.currentMonth,n=t.currentYear,l=t.minutesWidthOnXAxis,h=t.secondsWidthOnXAxis,c=t.numberOfMinutes,d=a+1,g=r,u=o,p=n,f=s,b=(60-i-e/1e3)*h,v=0;v<c;v++)d>=60&&(d=0,24===(f+=1)&&(f=0)),this.timeScaleArray.push({position:b,value:d,unit:\"minute\",hour:f,minute:d,day:g,year:this._getYear(p,u,0),month:x.monthMod(u)}),b+=l,d++}},{key:\"generateSecondScale\",value:function(t){for(var e=t.currentMillisecond,i=t.currentSecond,a=t.currentMinute,s=t.currentHour,r=t.currentDate,o=t.currentMonth,n=t.currentYear,l=t.secondsWidthOnXAxis,h=t.numberOfSeconds,c=i+1,d=a,g=r,u=o,p=n,f=s,b=(1e3-e)/1e3*l,v=0;v<h;v++)c>=60&&(c=0,++d>=60&&(d=0,24===++f&&(f=0))),this.timeScaleArray.push({position:b,value:c,unit:\"second\",hour:f,minute:d,second:c,day:g,year:this._getYear(p,u,0),month:x.monthMod(u)}),b+=l,c++}},{key:\"createRawDateString\",value:function(t,e){var i=t.year;return 0===t.month&&(t.month=1),i+=\"-\"+(\"0\"+t.month.toString()).slice(-2),\"day\"===t.unit?i+=\"day\"===t.unit?\"-\"+(\"0\"+e).slice(-2):\"-01\":i+=\"-\"+(\"0\"+(t.day?t.day:\"1\")).slice(-2),\"hour\"===t.unit?i+=\"hour\"===t.unit?\"T\"+(\"0\"+e).slice(-2):\"T00\":i+=\"T\"+(\"0\"+(t.hour?t.hour:\"0\")).slice(-2),\"minute\"===t.unit?i+=\":\"+(\"0\"+e).slice(-2):i+=\":\"+(t.minute?(\"0\"+t.minute).slice(-2):\"00\"),\"second\"===t.unit?i+=\":\"+(\"0\"+e).slice(-2):i+=\":00\",this.utc&&(i+=\".000Z\"),i}},{key:\"formatDates\",value:function(t){var e=this,i=this.w;return t.map((function(t){var a=t.value.toString(),s=new I(e.ctx),r=e.createRawDateString(t,a),o=s.getDate(s.parseDate(r));if(e.utc||(o=s.getDate(s.parseDateWithTimezone(r))),void 0===i.config.xaxis.labels.format){var n=\"dd MMM\",l=i.config.xaxis.labels.datetimeFormatter;\"year\"===t.unit&&(n=l.year),\"month\"===t.unit&&(n=l.month),\"day\"===t.unit&&(n=l.day),\"hour\"===t.unit&&(n=l.hour),\"minute\"===t.unit&&(n=l.minute),\"second\"===t.unit&&(n=l.second),a=s.formatDate(o,n)}else a=s.formatDate(o,i.config.xaxis.labels.format);return{dateString:r,position:t.position,value:a,unit:t.unit,year:t.year,month:t.month}}))}},{key:\"removeOverlappingTS\",value:function(t){var e,i=this,a=new m(this.ctx),s=!1;t.length>0&&t[0].value&&t.every((function(e){return e.value.length===t[0].value.length}))&&(s=!0,e=a.getTextRects(t[0].value).width);var r=0,o=t.map((function(o,n){if(n>0&&i.w.config.xaxis.labels.hideOverlappingLabels){var l=s?e:a.getTextRects(t[r].value).width,h=t[r].position;return o.position>h+l+10?(r=n,o):null}return o}));return o=o.filter((function(t){return null!==t}))}},{key:\"_getYear\",value:function(t,e,i){return t+Math.floor(e/12)+i}}]),t}(),Ht=function(){function t(e,i){a(this,t),this.ctx=i,this.w=i.w,this.el=e}return r(t,[{key:\"setupElements\",value:function(){var t=this.w.globals,e=this.w.config,i=e.chart.type;t.axisCharts=[\"line\",\"area\",\"bar\",\"rangeBar\",\"rangeArea\",\"candlestick\",\"boxPlot\",\"scatter\",\"bubble\",\"radar\",\"heatmap\",\"treemap\"].indexOf(i)>-1,t.xyCharts=[\"line\",\"area\",\"bar\",\"rangeBar\",\"rangeArea\",\"candlestick\",\"boxPlot\",\"scatter\",\"bubble\"].indexOf(i)>-1,t.isBarHorizontal=(\"bar\"===e.chart.type||\"rangeBar\"===e.chart.type||\"boxPlot\"===e.chart.type)&&e.plotOptions.bar.horizontal,t.chartClass=\".apexcharts\"+t.chartID,t.dom.baseEl=this.el,t.dom.elWrap=document.createElement(\"div\"),m.setAttrs(t.dom.elWrap,{id:t.chartClass.substring(1),class:\"apexcharts-canvas \"+t.chartClass.substring(1)}),this.el.appendChild(t.dom.elWrap),t.dom.Paper=new window.SVG.Doc(t.dom.elWrap),t.dom.Paper.attr({class:\"apexcharts-svg\",\"xmlns:data\":\"ApexChartsNS\",transform:\"translate(\".concat(e.chart.offsetX,\", \").concat(e.chart.offsetY,\")\")}),t.dom.Paper.node.style.background=e.chart.background,this.setSVGDimensions(),t.dom.elLegendForeign=document.createElementNS(t.SVGNS,\"foreignObject\"),m.setAttrs(t.dom.elLegendForeign,{x:0,y:0,width:t.svgWidth,height:t.svgHeight}),t.dom.elLegendWrap=document.createElement(\"div\"),t.dom.elLegendWrap.classList.add(\"apexcharts-legend\"),t.dom.elLegendWrap.setAttribute(\"xmlns\",\"http://www.w3.org/1999/xhtml\"),t.dom.elLegendForeign.appendChild(t.dom.elLegendWrap),t.dom.Paper.node.appendChild(t.dom.elLegendForeign),t.dom.elGraphical=t.dom.Paper.group().attr({class:\"apexcharts-inner apexcharts-graphical\"}),t.dom.elDefs=t.dom.Paper.defs(),t.dom.Paper.add(t.dom.elGraphical),t.dom.elGraphical.add(t.dom.elDefs)}},{key:\"plotChartType\",value:function(t,e){var i=this.w,a=i.config,s=i.globals,r={series:[],i:[]},o={series:[],i:[]},n={series:[],i:[]},l={series:[],i:[]},h={series:[],i:[]},c={series:[],i:[]},d={series:[],i:[]},g={series:[],i:[]},u={series:[],seriesRangeEnd:[],i:[]};s.series.map((function(e,p){var f=0;void 0!==t[p].type?(\"column\"===t[p].type||\"bar\"===t[p].type?(s.series.length>1&&a.plotOptions.bar.horizontal&&console.warn(\"Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`\"),h.series.push(e),h.i.push(p),f++,i.globals.columnSeries=h.series):\"area\"===t[p].type?(o.series.push(e),o.i.push(p),f++):\"line\"===t[p].type?(r.series.push(e),r.i.push(p),f++):\"scatter\"===t[p].type?(n.series.push(e),n.i.push(p)):\"bubble\"===t[p].type?(l.series.push(e),l.i.push(p),f++):\"candlestick\"===t[p].type?(c.series.push(e),c.i.push(p),f++):\"boxPlot\"===t[p].type?(d.series.push(e),d.i.push(p),f++):\"rangeBar\"===t[p].type?(g.series.push(e),g.i.push(p),f++):\"rangeArea\"===t[p].type?(u.series.push(s.seriesRangeStart[p]),u.seriesRangeEnd.push(s.seriesRangeEnd[p]),u.i.push(p),f++):console.warn(\"You have specified an unrecognized chart type. Available types for this property are line/area/column/bar/scatter/bubble/candlestick/boxPlot/rangeBar/rangeArea\"),f>1&&(s.comboCharts=!0)):(r.series.push(e),r.i.push(p))}));var p=new Xt(this.ctx,e),f=new kt(this.ctx,e);this.ctx.pie=new Lt(this.ctx);var x=new It(this.ctx);this.ctx.rangeBar=new Tt(this.ctx,e);var b=new Pt(this.ctx),v=[];if(s.comboCharts){if(o.series.length>0&&v.push(p.draw(o.series,\"area\",o.i)),h.series.length>0)if(i.config.chart.stacked){var m=new wt(this.ctx,e);v.push(m.draw(h.series,h.i))}else this.ctx.bar=new yt(this.ctx,e),v.push(this.ctx.bar.draw(h.series,h.i));if(u.series.length>0&&v.push(p.draw(u.series,\"rangeArea\",u.i,u.seriesRangeEnd)),r.series.length>0&&v.push(p.draw(r.series,\"line\",r.i)),c.series.length>0&&v.push(f.draw(c.series,\"candlestick\",c.i)),d.series.length>0&&v.push(f.draw(d.series,\"boxPlot\",d.i)),g.series.length>0&&v.push(this.ctx.rangeBar.draw(g.series,g.i)),n.series.length>0){var y=new Xt(this.ctx,e,!0);v.push(y.draw(n.series,\"scatter\",n.i))}if(l.series.length>0){var w=new Xt(this.ctx,e,!0);v.push(w.draw(l.series,\"bubble\",l.i))}}else switch(a.chart.type){case\"line\":v=p.draw(s.series,\"line\");break;case\"area\":v=p.draw(s.series,\"area\");break;case\"bar\":if(a.chart.stacked)v=new wt(this.ctx,e).draw(s.series);else this.ctx.bar=new yt(this.ctx,e),v=this.ctx.bar.draw(s.series);break;case\"candlestick\":v=new kt(this.ctx,e).draw(s.series,\"candlestick\");break;case\"boxPlot\":v=new kt(this.ctx,e).draw(s.series,a.chart.type);break;case\"rangeBar\":v=this.ctx.rangeBar.draw(s.series);break;case\"rangeArea\":v=p.draw(s.seriesRangeStart,\"rangeArea\",void 0,s.seriesRangeEnd);break;case\"heatmap\":v=new St(this.ctx,e).draw(s.series);break;case\"treemap\":v=new Yt(this.ctx,e).draw(s.series);break;case\"pie\":case\"donut\":case\"polarArea\":v=this.ctx.pie.draw(s.series);break;case\"radialBar\":v=x.draw(s.series);break;case\"radar\":v=b.draw(s.series);break;default:v=p.draw(s.series)}return v}},{key:\"setSVGDimensions\",value:function(){var t=this.w.globals,e=this.w.config;t.svgWidth=e.chart.width,t.svgHeight=e.chart.height;var i=x.getDimensions(this.el),a=e.chart.width.toString().split(/[0-9]+/g).pop();\"%\"===a?x.isNumber(i[0])&&(0===i[0].width&&(i=x.getDimensions(this.el.parentNode)),t.svgWidth=i[0]*parseInt(e.chart.width,10)/100):\"px\"!==a&&\"\"!==a||(t.svgWidth=parseInt(e.chart.width,10));var s=e.chart.height.toString().split(/[0-9]+/g).pop();if(\"auto\"!==t.svgHeight&&\"\"!==t.svgHeight)if(\"%\"===s){var r=x.getDimensions(this.el.parentNode);t.svgHeight=r[1]*parseInt(e.chart.height,10)/100}else t.svgHeight=parseInt(e.chart.height,10);else t.axisCharts?t.svgHeight=t.svgWidth/1.61:t.svgHeight=t.svgWidth/1.2;if(t.svgWidth<0&&(t.svgWidth=0),t.svgHeight<0&&(t.svgHeight=0),m.setAttrs(t.dom.Paper.node,{width:t.svgWidth,height:t.svgHeight}),\"%\"!==s){var o=e.chart.sparkline.enabled?0:t.axisCharts?e.chart.parentHeightOffset:0;t.dom.Paper.node.parentNode.parentNode.style.minHeight=t.svgHeight+o+\"px\"}t.dom.elWrap.style.width=t.svgWidth+\"px\",t.dom.elWrap.style.height=t.svgHeight+\"px\"}},{key:\"shiftGraphPosition\",value:function(){var t=this.w.globals,e=t.translateY,i={transform:\"translate(\"+t.translateX+\", \"+e+\")\"};m.setAttrs(t.dom.elGraphical.node,i)}},{key:\"resizeNonAxisCharts\",value:function(){var t=this.w,e=t.globals,i=0,a=t.config.chart.sparkline.enabled?1:15;a+=t.config.grid.padding.bottom,\"top\"!==t.config.legend.position&&\"bottom\"!==t.config.legend.position||!t.config.legend.show||t.config.legend.floating||(i=new lt(this.ctx).legendHelpers.getLegendBBox().clwh+10);var s=t.globals.dom.baseEl.querySelector(\".apexcharts-radialbar, .apexcharts-pie\"),r=2.05*t.globals.radialSize;if(s&&!t.config.chart.sparkline.enabled&&0!==t.config.plotOptions.radialBar.startAngle){var o=x.getBoundingClientRect(s);r=o.bottom;var n=o.bottom-o.top;r=Math.max(2.05*t.globals.radialSize,n)}var l=r+e.translateY+i+a;e.dom.elLegendForeign&&e.dom.elLegendForeign.setAttribute(\"height\",l),t.config.chart.height&&String(t.config.chart.height).indexOf(\"%\")>0||(e.dom.elWrap.style.height=l+\"px\",m.setAttrs(e.dom.Paper.node,{height:l}),e.dom.Paper.node.parentNode.parentNode.style.minHeight=l+\"px\")}},{key:\"coreCalculations\",value:function(){new U(this.ctx).init()}},{key:\"resetGlobals\",value:function(){var t=this,e=function(){return t.w.config.series.map((function(t){return[]}))},i=new Y,a=this.w.globals;i.initGlobalVars(a),a.seriesXvalues=e(),a.seriesYvalues=e()}},{key:\"isMultipleY\",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.globals.isMultipleYAxis=!0,!0}},{key:\"xySettings\",value:function(){var t=null,e=this.w;if(e.globals.axisCharts){if(\"back\"===e.config.xaxis.crosshairs.position)new Q(this.ctx).drawXCrosshairs();if(\"back\"===e.config.yaxis[0].crosshairs.position)new Q(this.ctx).drawYCrosshairs();if(\"datetime\"===e.config.xaxis.type&&void 0===e.config.xaxis.labels.formatter){this.ctx.timeScale=new Rt(this.ctx);var i=[];isFinite(e.globals.minX)&&isFinite(e.globals.maxX)&&!e.globals.isBarHorizontal?i=this.ctx.timeScale.calculateTimeScaleTicks(e.globals.minX,e.globals.maxX):e.globals.isBarHorizontal&&(i=this.ctx.timeScale.calculateTimeScaleTicks(e.globals.minY,e.globals.maxY)),this.ctx.timeScale.recalcDimensionsBasedOnFormat(i)}t=new y(this.ctx).getCalculatedRatios()}return t}},{key:\"updateSourceChart\",value:function(t){this.ctx.w.globals.selection=void 0,this.ctx.updateHelpers._updateOptions({chart:{selection:{xaxis:{min:t.w.globals.minX,max:t.w.globals.maxX}}}},!1,!1)}},{key:\"setupBrushHandler\",value:function(){var t=this,i=this.w;if(i.config.chart.brush.enabled&&\"function\"!=typeof i.config.chart.events.selection){var a=i.config.chart.brush.targets||[i.config.chart.brush.target];a.forEach((function(e){var i=ApexCharts.getChartByID(e);i.w.globals.brushSource=t.ctx,\"function\"!=typeof i.w.config.chart.events.zoomed&&(i.w.config.chart.events.zoomed=function(){t.updateSourceChart(i)}),\"function\"!=typeof i.w.config.chart.events.scrolled&&(i.w.config.chart.events.scrolled=function(){t.updateSourceChart(i)})})),i.config.chart.events.selection=function(t,s){a.forEach((function(t){var a=ApexCharts.getChartByID(t),r=x.clone(i.config.yaxis);if(i.config.chart.brush.autoScaleYaxis&&1===a.w.globals.series.length){var o=new _(a);r=o.autoScaleY(a,r,s)}var n=a.w.config.yaxis.reduce((function(t,i,s){return[].concat(u(t),[e(e({},a.w.config.yaxis[s]),{},{min:r[0].min,max:r[0].max})])}),[]);a.ctx.updateHelpers._updateOptions({xaxis:{min:s.xaxis.min,max:s.xaxis.max},yaxis:n},!1,!1,!1,!1)}))}}}}]),t}(),Dt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"_updateOptions\",value:function(t){var e=this,a=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return new Promise((function(n){var l=[e.ctx];r&&(l=e.ctx.getSyncedCharts()),e.ctx.w.globals.isExecCalled&&(l=[e.ctx],e.ctx.w.globals.isExecCalled=!1),l.forEach((function(r,h){var c=r.w;if(c.globals.shouldAnimate=s,a||(c.globals.resized=!0,c.globals.dataChanged=!0,s&&r.series.getPreviousPaths()),t&&\"object\"===i(t)&&(r.config=new E(t),t=y.extendArrayProps(r.config,t,c),r.w.globals.chartID!==e.ctx.w.globals.chartID&&delete t.series,c.config=x.extend(c.config,t),o&&(c.globals.lastXAxis=t.xaxis?x.clone(t.xaxis):[],c.globals.lastYAxis=t.yaxis?x.clone(t.yaxis):[],c.globals.initialConfig=x.extend({},c.config),c.globals.initialSeries=x.clone(c.config.series),t.series))){for(var d=0;d<c.globals.collapsedSeriesIndices.length;d++){var g=c.config.series[c.globals.collapsedSeriesIndices[d]];c.globals.collapsedSeries[d].data=c.globals.axisCharts?g.data.slice():g}for(var u=0;u<c.globals.ancillaryCollapsedSeriesIndices.length;u++){var p=c.config.series[c.globals.ancillaryCollapsedSeriesIndices[u]];c.globals.ancillaryCollapsedSeries[u].data=c.globals.axisCharts?p.data.slice():p}r.series.emptyCollapsedSeries(c.config.series)}return r.update(t).then((function(){h===l.length-1&&n(r)}))}))}))}},{key:\"_updateSeries\",value:function(t,e){var i=this,a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return new Promise((function(s){var r,o=i.w;return o.globals.shouldAnimate=e,o.globals.dataChanged=!0,e&&i.ctx.series.getPreviousPaths(),o.globals.axisCharts?(0===(r=t.map((function(t,e){return i._extendSeries(t,e)}))).length&&(r=[{data:[]}]),o.config.series=r):o.config.series=t.slice(),a&&(o.globals.initialConfig.series=x.clone(o.config.series),o.globals.initialSeries=x.clone(o.config.series)),i.ctx.update().then((function(){s(i.ctx)}))}))}},{key:\"_extendSeries\",value:function(t,i){var a=this.w,s=a.config.series[i];return e(e({},a.config.series[i]),{},{name:t.name?t.name:s&&s.name,color:t.color?t.color:s&&s.color,type:t.type?t.type:s&&s.type,data:t.data?t.data:s&&s.data})}},{key:\"toggleDataPointSelection\",value:function(t,e){var i=this.w,a=null,s=\".apexcharts-series[data\\\\:realIndex='\".concat(t,\"']\");return i.globals.axisCharts?a=i.globals.dom.Paper.select(\"\".concat(s,\" path[j='\").concat(e,\"'], \").concat(s,\" circle[j='\").concat(e,\"'], \").concat(s,\" rect[j='\").concat(e,\"']\")).members[0]:void 0===e&&(a=i.globals.dom.Paper.select(\"\".concat(s,\" path[j='\").concat(t,\"']\")).members[0],\"pie\"!==i.config.chart.type&&\"polarArea\"!==i.config.chart.type&&\"donut\"!==i.config.chart.type||this.ctx.pie.pieClicked(t)),a?(new m(this.ctx).pathMouseDown(a,null),a.node?a.node:null):(console.warn(\"toggleDataPointSelection: Element not found\"),null)}},{key:\"forceXAxisUpdate\",value:function(t){var e=this.w;if([\"min\",\"max\"].forEach((function(i){void 0!==t.xaxis[i]&&(e.config.xaxis[i]=t.xaxis[i],e.globals.lastXAxis[i]=t.xaxis[i])})),t.xaxis.categories&&t.xaxis.categories.length&&(e.config.xaxis.categories=t.xaxis.categories),e.config.xaxis.convertedCatToNumeric){var i=new z(t);t=i.convertCatToNumericXaxis(t,this.ctx)}return t}},{key:\"forceYAxisUpdate\",value:function(t){return t.chart&&t.chart.stacked&&\"100%\"===t.chart.stackType&&(Array.isArray(t.yaxis)?t.yaxis.forEach((function(e,i){t.yaxis[i].min=0,t.yaxis[i].max=100})):(t.yaxis.min=0,t.yaxis.max=100)),t}},{key:\"revertDefaultAxisMinMax\",value:function(t){var e=this,i=this.w,a=i.globals.lastXAxis,s=i.globals.lastYAxis;t&&t.xaxis&&(a=t.xaxis),t&&t.yaxis&&(s=t.yaxis),i.config.xaxis.min=a.min,i.config.xaxis.max=a.max;var r=function(t){void 0!==s[t]&&(i.config.yaxis[t].min=s[t].min,i.config.yaxis[t].max=s[t].max)};i.config.yaxis.map((function(t,a){i.globals.zoomed||void 0!==s[a]?r(a):void 0!==e.ctx.opts.yaxis[a]&&(t.min=e.ctx.opts.yaxis[a].min,t.max=e.ctx.opts.yaxis[a].max)}))}}]),t}();zt=\"undefined\"!=typeof window?window:void 0,Et=function(t,e){var a=(void 0!==this?this:t).SVG=function(t){if(a.supported)return t=new a.Doc(t),a.parser.draw||a.prepare(),t};if(a.ns=\"http://www.w3.org/2000/svg\",a.xmlns=\"http://www.w3.org/2000/xmlns/\",a.xlink=\"http://www.w3.org/1999/xlink\",a.svgjs=\"http://svgjs.dev\",a.supported=!0,!a.supported)return!1;a.did=1e3,a.eid=function(t){return\"Svgjs\"+d(t)+a.did++},a.create=function(t){var i=e.createElementNS(this.ns,t);return i.setAttribute(\"id\",this.eid(t)),i},a.extend=function(){var t,e;e=(t=[].slice.call(arguments)).pop();for(var i=t.length-1;i>=0;i--)if(t[i])for(var s in e)t[i].prototype[s]=e[s];a.Set&&a.Set.inherit&&a.Set.inherit()},a.invent=function(t){var e=\"function\"==typeof t.create?t.create:function(){this.constructor.call(this,a.create(t.create))};return t.inherit&&(e.prototype=new t.inherit),t.extend&&a.extend(e,t.extend),t.construct&&a.extend(t.parent||a.Container,t.construct),e},a.adopt=function(e){return e?e.instance?e.instance:((i=\"svg\"==e.nodeName?e.parentNode instanceof t.SVGElement?new a.Nested:new a.Doc:\"linearGradient\"==e.nodeName?new a.Gradient(\"linear\"):\"radialGradient\"==e.nodeName?new a.Gradient(\"radial\"):a[d(e.nodeName)]?new(a[d(e.nodeName)]):new a.Element(e)).type=e.nodeName,i.node=e,e.instance=i,i instanceof a.Doc&&i.namespace().defs(),i.setData(JSON.parse(e.getAttribute(\"svgjs:data\"))||{}),i):null;var i},a.prepare=function(){var t=e.getElementsByTagName(\"body\")[0],i=(t?new a.Doc(t):a.adopt(e.documentElement).nested()).size(2,0);a.parser={body:t||e.documentElement,draw:i.style(\"opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden\").node,poly:i.polyline().node,path:i.path().node,native:a.create(\"svg\")}},a.parser={native:a.create(\"svg\")},e.addEventListener(\"DOMContentLoaded\",(function(){a.parser.draw||a.prepare()}),!1),a.regex={numberAndUnit:/^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,rgb:/rgb\\((\\d+),(\\d+),(\\d+)\\)/,reference:/#([a-z0-9\\-_]+)/i,transforms:/\\)\\s*,?\\s*/,whitespace:/\\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\\s+)?$/,isNumber:/^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,isPercent:/^-?[\\d\\.]+%$/,isImage:/\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i,delimiter:/[\\s,]+/,hyphen:/([^e])\\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\\d?\\.\\d+(?:e[+-]?\\d+)?)((?:\\.\\d+(?:e[+-]?\\d+)?)+))+/gi,dots:/\\./g},a.utils={map:function(t,e){for(var i=t.length,a=[],s=0;s<i;s++)a.push(e(t[s]));return a},filter:function(t,e){for(var i=t.length,a=[],s=0;s<i;s++)e(t[s])&&a.push(t[s]);return a},filterSVGElements:function(e){return this.filter(e,(function(e){return e instanceof t.SVGElement}))}},a.defaults={attrs:{\"fill-opacity\":1,\"stroke-opacity\":1,\"stroke-width\":0,\"stroke-linejoin\":\"miter\",\"stroke-linecap\":\"butt\",fill:\"#000000\",stroke:\"#000000\",opacity:1,x:0,y:0,cx:0,cy:0,width:0,height:0,r:0,rx:0,ry:0,offset:0,\"stop-opacity\":1,\"stop-color\":\"#000000\",\"font-size\":16,\"font-family\":\"Helvetica, Arial, sans-serif\",\"text-anchor\":\"start\"}},a.Color=function(t){var e,s;this.r=0,this.g=0,this.b=0,t&&(\"string\"==typeof t?a.regex.isRgb.test(t)?(e=a.regex.rgb.exec(t.replace(a.regex.whitespace,\"\")),this.r=parseInt(e[1]),this.g=parseInt(e[2]),this.b=parseInt(e[3])):a.regex.isHex.test(t)&&(e=a.regex.hex.exec(4==(s=t).length?[\"#\",s.substring(1,2),s.substring(1,2),s.substring(2,3),s.substring(2,3),s.substring(3,4),s.substring(3,4)].join(\"\"):s),this.r=parseInt(e[1],16),this.g=parseInt(e[2],16),this.b=parseInt(e[3],16)):\"object\"===i(t)&&(this.r=t.r,this.g=t.g,this.b=t.b))},a.extend(a.Color,{toString:function(){return this.toHex()},toHex:function(){return\"#\"+g(this.r)+g(this.g)+g(this.b)},toRgb:function(){return\"rgb(\"+[this.r,this.g,this.b].join()+\")\"},brightness:function(){return this.r/255*.3+this.g/255*.59+this.b/255*.11},morph:function(t){return this.destination=new a.Color(t),this},at:function(t){return this.destination?(t=t<0?0:t>1?1:t,new a.Color({r:~~(this.r+(this.destination.r-this.r)*t),g:~~(this.g+(this.destination.g-this.g)*t),b:~~(this.b+(this.destination.b-this.b)*t)})):this}}),a.Color.test=function(t){return t+=\"\",a.regex.isHex.test(t)||a.regex.isRgb.test(t)},a.Color.isRgb=function(t){return t&&\"number\"==typeof t.r&&\"number\"==typeof t.g&&\"number\"==typeof t.b},a.Color.isColor=function(t){return a.Color.isRgb(t)||a.Color.test(t)},a.Array=function(t,e){0==(t=(t||[]).valueOf()).length&&e&&(t=e.valueOf()),this.value=this.parse(t)},a.extend(a.Array,{toString:function(){return this.value.join(\" \")},valueOf:function(){return this.value},parse:function(t){return t=t.valueOf(),Array.isArray(t)?t:this.split(t)}}),a.PointArray=function(t,e){a.Array.call(this,t,e||[[0,0]])},a.PointArray.prototype=new a.Array,a.PointArray.prototype.constructor=a.PointArray;for(var s={M:function(t,e,i){return e.x=i.x=t[0],e.y=i.y=t[1],[\"M\",e.x,e.y]},L:function(t,e){return e.x=t[0],e.y=t[1],[\"L\",t[0],t[1]]},H:function(t,e){return e.x=t[0],[\"H\",t[0]]},V:function(t,e){return e.y=t[0],[\"V\",t[0]]},C:function(t,e){return e.x=t[4],e.y=t[5],[\"C\",t[0],t[1],t[2],t[3],t[4],t[5]]},Q:function(t,e){return e.x=t[2],e.y=t[3],[\"Q\",t[0],t[1],t[2],t[3]]},Z:function(t,e,i){return e.x=i.x,e.y=i.y,[\"Z\"]}},r=\"mlhvqtcsaz\".split(\"\"),o=0,n=r.length;o<n;++o)s[r[o]]=function(t){return function(e,i,a){if(\"H\"==t)e[0]=e[0]+i.x;else if(\"V\"==t)e[0]=e[0]+i.y;else if(\"A\"==t)e[5]=e[5]+i.x,e[6]=e[6]+i.y;else for(var r=0,o=e.length;r<o;++r)e[r]=e[r]+(r%2?i.y:i.x);if(s&&\"function\"==typeof s[t])return s[t](e,i,a)}}(r[o].toUpperCase());a.PathArray=function(t,e){a.Array.call(this,t,e||[[\"M\",0,0]])},a.PathArray.prototype=new a.Array,a.PathArray.prototype.constructor=a.PathArray,a.extend(a.PathArray,{toString:function(){return function(t){for(var e=0,i=t.length,a=\"\";e<i;e++)a+=t[e][0],null!=t[e][1]&&(a+=t[e][1],null!=t[e][2]&&(a+=\" \",a+=t[e][2],null!=t[e][3]&&(a+=\" \",a+=t[e][3],a+=\" \",a+=t[e][4],null!=t[e][5]&&(a+=\" \",a+=t[e][5],a+=\" \",a+=t[e][6],null!=t[e][7]&&(a+=\" \",a+=t[e][7])))));return a+\" \"}(this.value)},move:function(t,e){var i=this.bbox();return i.x,i.y,this},at:function(t){if(!this.destination)return this;for(var e=this.value,i=this.destination.value,s=[],r=new a.PathArray,o=0,n=e.length;o<n;o++){s[o]=[e[o][0]];for(var l=1,h=e[o].length;l<h;l++)s[o][l]=e[o][l]+(i[o][l]-e[o][l])*t;\"A\"===s[o][0]&&(s[o][4]=+(0!=s[o][4]),s[o][5]=+(0!=s[o][5]))}return r.value=s,r},parse:function(t){if(t instanceof a.PathArray)return t.valueOf();var e,i={M:2,L:2,H:1,V:1,C:6,S:4,Q:4,T:2,A:7,Z:0};t=\"string\"==typeof t?t.replace(a.regex.numbersWithDots,h).replace(a.regex.pathLetters,\" $& \").replace(a.regex.hyphen,\"$1 -\").trim().split(a.regex.delimiter):t.reduce((function(t,e){return[].concat.call(t,e)}),[]);var r=[],o=new a.Point,n=new a.Point,l=0,c=t.length;do{a.regex.isPathLetter.test(t[l])?(e=t[l],++l):\"M\"==e?e=\"L\":\"m\"==e&&(e=\"l\"),r.push(s[e].call(null,t.slice(l,l+=i[e.toUpperCase()]).map(parseFloat),o,n))}while(c>l);return r},bbox:function(){return a.parser.draw||a.prepare(),a.parser.path.setAttribute(\"d\",this.toString()),a.parser.path.getBBox()}}),a.Number=a.invent({create:function(t,e){this.value=0,this.unit=e||\"\",\"number\"==typeof t?this.value=isNaN(t)?0:isFinite(t)?t:t<0?-34e37:34e37:\"string\"==typeof t?(e=t.match(a.regex.numberAndUnit))&&(this.value=parseFloat(e[1]),\"%\"==e[5]?this.value/=100:\"s\"==e[5]&&(this.value*=1e3),this.unit=e[5]):t instanceof a.Number&&(this.value=t.valueOf(),this.unit=t.unit)},extend:{toString:function(){return(\"%\"==this.unit?~~(1e8*this.value)/1e6:\"s\"==this.unit?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(t){return t=new a.Number(t),new a.Number(this+t,this.unit||t.unit)},minus:function(t){return t=new a.Number(t),new a.Number(this-t,this.unit||t.unit)},times:function(t){return t=new a.Number(t),new a.Number(this*t,this.unit||t.unit)},divide:function(t){return t=new a.Number(t),new a.Number(this/t,this.unit||t.unit)},to:function(t){var e=new a.Number(this);return\"string\"==typeof t&&(e.unit=t),e},morph:function(t){return this.destination=new a.Number(t),t.relative&&(this.destination.value+=this.value),this},at:function(t){return this.destination?new a.Number(this.destination).minus(this).times(t).plus(this):this}}}),a.Element=a.invent({create:function(t){this._stroke=a.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=t)&&(this.type=t.nodeName,this.node.instance=this,this._stroke=t.getAttribute(\"stroke\")||this._stroke)},extend:{x:function(t){return this.attr(\"x\",t)},y:function(t){return this.attr(\"y\",t)},cx:function(t){return null==t?this.x()+this.width()/2:this.x(t-this.width()/2)},cy:function(t){return null==t?this.y()+this.height()/2:this.y(t-this.height()/2)},move:function(t,e){return this.x(t).y(e)},center:function(t,e){return this.cx(t).cy(e)},width:function(t){return this.attr(\"width\",t)},height:function(t){return this.attr(\"height\",t)},size:function(t,e){var i=u(this,t,e);return this.width(new a.Number(i.width)).height(new a.Number(i.height))},clone:function(t){this.writeDataToDom();var e=x(this.node.cloneNode(!0));return t?t.add(e):this.after(e),e},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(t){return this.after(t).remove(),t},addTo:function(t){return t.put(this)},putIn:function(t){return t.add(this)},id:function(t){return this.attr(\"id\",t)},show:function(){return this.style(\"display\",\"\")},hide:function(){return this.style(\"display\",\"none\")},visible:function(){return\"none\"!=this.style(\"display\")},toString:function(){return this.attr(\"id\")},classes:function(){var t=this.attr(\"class\");return null==t?[]:t.trim().split(a.regex.delimiter)},hasClass:function(t){return-1!=this.classes().indexOf(t)},addClass:function(t){if(!this.hasClass(t)){var e=this.classes();e.push(t),this.attr(\"class\",e.join(\" \"))}return this},removeClass:function(t){return this.hasClass(t)&&this.attr(\"class\",this.classes().filter((function(e){return e!=t})).join(\" \")),this},toggleClass:function(t){return this.hasClass(t)?this.removeClass(t):this.addClass(t)},reference:function(t){return a.get(this.attr(t))},parent:function(e){var i=this;if(!i.node.parentNode)return null;if(i=a.adopt(i.node.parentNode),!e)return i;for(;i&&i.node instanceof t.SVGElement;){if(\"string\"==typeof e?i.matches(e):i instanceof e)return i;if(!i.node.parentNode||\"#document\"==i.node.parentNode.nodeName)return null;i=a.adopt(i.node.parentNode)}},doc:function(){return this instanceof a.Doc?this:this.parent(a.Doc)},parents:function(t){var e=[],i=this;do{if(!(i=i.parent(t))||!i.node)break;e.push(i)}while(i.parent);return e},matches:function(t){return function(t,e){return(t.matches||t.matchesSelector||t.msMatchesSelector||t.mozMatchesSelector||t.webkitMatchesSelector||t.oMatchesSelector).call(t,e)}(this.node,t)},native:function(){return this.node},svg:function(t){var i=e.createElement(\"svg\");if(!(t&&this instanceof a.Parent))return i.appendChild(t=e.createElement(\"svg\")),this.writeDataToDom(),t.appendChild(this.node.cloneNode(!0)),i.innerHTML.replace(/^<svg>/,\"\").replace(/<\\/svg>$/,\"\");i.innerHTML=\"<svg>\"+t.replace(/\\n/,\"\").replace(/<([\\w:-]+)([^<]+?)\\/>/g,\"<$1$2></$1>\")+\"</svg>\";for(var s=0,r=i.firstChild.childNodes.length;s<r;s++)this.node.appendChild(i.firstChild.firstChild);return this},writeDataToDom:function(){return(this.each||this.lines)&&(this.each?this:this.lines()).each((function(){this.writeDataToDom()})),this.node.removeAttribute(\"svgjs:data\"),Object.keys(this.dom).length&&this.node.setAttribute(\"svgjs:data\",JSON.stringify(this.dom)),this},setData:function(t){return this.dom=t,this},is:function(t){return function(t,e){return t instanceof e}(this,t)}}}),a.easing={\"-\":function(t){return t},\"<>\":function(t){return-Math.cos(t*Math.PI)/2+.5},\">\":function(t){return Math.sin(t*Math.PI/2)},\"<\":function(t){return 1-Math.cos(t*Math.PI/2)}},a.morph=function(t){return function(e,i){return new a.MorphObj(e,i).at(t)}},a.Situation=a.invent({create:function(t){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new a.Number(t.duration).valueOf(),this.delay=new a.Number(t.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=t.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),a.FX=a.invent({create:function(t){this._target=t,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(t,e,s){\"object\"===i(t)&&(e=t.ease,s=t.delay,t=t.duration);var r=new a.Situation({duration:t||1e3,delay:s||0,ease:a.easing[e||\"-\"]||e});return this.queue(r),this},target:function(t){return t&&t instanceof a.Element?(this._target=t,this):this._target},timeToAbsPos:function(t){return(t-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(t){return this.situation.duration/this._speed*t+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=t.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){t.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(t){return(\"function\"==typeof t||t instanceof a.Situation)&&this.situations.push(t),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof a.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var t,e=this.situation;if(e.init)return this;for(var i in e.animations){t=this.target()[i](),Array.isArray(t)||(t=[t]),Array.isArray(e.animations[i])||(e.animations[i]=[e.animations[i]]);for(var s=t.length;s--;)e.animations[i][s]instanceof a.Number&&(t[s]=new a.Number(t[s])),e.animations[i][s]=t[s].morph(e.animations[i][s])}for(var i in e.attrs)e.attrs[i]=new a.MorphObj(this.target().attr(i),e.attrs[i]);for(var i in e.styles)e.styles[i]=new a.MorphObj(this.target().style(i),e.styles[i]);return e.initialTransformation=this.target().matrixify(),e.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(t,e){var i=this.active;return this.active=!1,e&&this.clearQueue(),t&&this.situation&&(!i&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},after:function(t){var e=this.last();return this.target().on(\"finished.fx\",(function i(a){a.detail.situation==e&&(t.call(this,e),this.off(\"finished.fx\",i))})),this._callStart()},during:function(t){var e=this.last(),i=function(i){i.detail.situation==e&&t.call(this,i.detail.pos,a.morph(i.detail.pos),i.detail.eased,e)};return this.target().off(\"during.fx\",i).on(\"during.fx\",i),this.after((function(){this.off(\"during.fx\",i)})),this._callStart()},afterAll:function(t){var e=function e(i){t.call(this),this.off(\"allfinished.fx\",e)};return this.target().off(\"allfinished.fx\",e).on(\"allfinished.fx\",e),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(t,e,i){return this.last()[i||\"animations\"][t]=e,this._callStart()},step:function(t){var e,i,a;t||(this.absPos=this.timeToAbsPos(+new Date)),!1!==this.situation.loops?(e=Math.max(this.absPos,0),i=Math.floor(e),!0===this.situation.loops||i<this.situation.loops?(this.pos=e-i,a=this.situation.loop,this.situation.loop=i):(this.absPos=this.situation.loops,this.pos=1,a=this.situation.loop-1,this.situation.loop=this.situation.loops),this.situation.reversing&&(this.situation.reversed=this.situation.reversed!=Boolean((this.situation.loop-a)%2))):(this.absPos=Math.min(this.absPos,1),this.pos=this.absPos),this.pos<0&&(this.pos=0),this.situation.reversed&&(this.pos=1-this.pos);var s=this.situation.ease(this.pos);for(var r in this.situation.once)r>this.lastPos&&r<=s&&(this.situation.once[r].call(this.target(),this.pos,s),delete this.situation.once[r]);return this.active&&this.target().fire(\"during\",{pos:this.pos,eased:s,fx:this,situation:this.situation}),this.situation?(this.eachAt(),1==this.pos&&!this.situation.reversed||this.situation.reversed&&0==this.pos?(this.stopAnimFrame(),this.target().fire(\"finished\",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire(\"allfinished\"),this.situations.length||(this.target().off(\".fx\"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=s,this):this},eachAt:function(){var t,e=this,i=this.target(),s=this.situation;for(var r in s.animations)t=[].concat(s.animations[r]).map((function(t){return\"string\"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i[r].apply(i,t);for(var r in s.attrs)t=[r].concat(s.attrs[r]).map((function(t){return\"string\"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i.attr.apply(i,t);for(var r in s.styles)t=[r].concat(s.styles[r]).map((function(t){return\"string\"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i.style.apply(i,t);if(s.transforms.length){t=s.initialTransformation,r=0;for(var o=s.transforms.length;r<o;r++){var n=s.transforms[r];n instanceof a.Matrix?t=n.relative?t.multiply((new a.Matrix).morph(n).at(s.ease(this.pos))):t.morph(n).at(s.ease(this.pos)):(n.relative||n.undo(t.extract()),t=t.multiply(n.at(s.ease(this.pos))))}i.matrix(t)}return this},once:function(t,e,i){var a=this.last();return i||(t=a.ease(t)),a.once[t]=e,this},_callStart:function(){return setTimeout(function(){this.start()}.bind(this),0),this}},parent:a.Element,construct:{animate:function(t,e,i){return(this.fx||(this.fx=new a.FX(this))).animate(t,e,i)},delay:function(t){return(this.fx||(this.fx=new a.FX(this))).delay(t)},stop:function(t,e){return this.fx&&this.fx.stop(t,e),this},finish:function(){return this.fx&&this.fx.finish(),this}}}),a.MorphObj=a.invent({create:function(t,e){return a.Color.isColor(e)?new a.Color(t).morph(e):a.regex.delimiter.test(t)?a.regex.pathLetters.test(t)?new a.PathArray(t).morph(e):new a.Array(t).morph(e):a.regex.numberAndUnit.test(e)?new a.Number(t).morph(e):(this.value=t,void(this.destination=e))},extend:{at:function(t,e){return e<1?this.value:this.destination},valueOf:function(){return this.value}}}),a.extend(a.FX,{attr:function(t,e,a){if(\"object\"===i(t))for(var s in t)this.attr(s,t[s]);else this.add(t,e,\"attrs\");return this},plot:function(t,e,i,a){return 4==arguments.length?this.plot([t,e,i,a]):this.add(\"plot\",new(this.target().morphArray)(t))}}),a.Box=a.invent({create:function(t,e,s,r){if(!(\"object\"!==i(t)||t instanceof a.Element))return a.Box.call(this,null!=t.left?t.left:t.x,null!=t.top?t.top:t.y,t.width,t.height);var o;4==arguments.length&&(this.x=t,this.y=e,this.width=s,this.height=r),null==(o=this).x&&(o.x=0,o.y=0,o.width=0,o.height=0),o.w=o.width,o.h=o.height,o.x2=o.x+o.width,o.y2=o.y+o.height,o.cx=o.x+o.width/2,o.cy=o.y+o.height/2}}),a.BBox=a.invent({create:function(t){if(a.Box.apply(this,[].slice.call(arguments)),t instanceof a.Element){var i;try{if(!e.documentElement.contains){for(var s=t.node;s.parentNode;)s=s.parentNode;if(s!=e)throw new Error(\"Element not in the dom\")}i=t.node.getBBox()}catch(e){if(t instanceof a.Shape){a.parser.draw||a.prepare();var r=t.clone(a.parser.draw.instance).show();r&&r.node&&\"function\"==typeof r.node.getBBox&&(i=r.node.getBBox()),r&&\"function\"==typeof r.remove&&r.remove()}else i={x:t.node.clientLeft,y:t.node.clientTop,width:t.node.clientWidth,height:t.node.clientHeight}}a.Box.call(this,i)}},inherit:a.Box,parent:a.Element,construct:{bbox:function(){return new a.BBox(this)}}}),a.BBox.prototype.constructor=a.BBox,a.Matrix=a.invent({create:function(t){var e=f([1,0,0,1,0,0]);t=null===t?e:t instanceof a.Element?t.matrixify():\"string\"==typeof t?f(t.split(a.regex.delimiter).map(parseFloat)):6==arguments.length?f([].slice.call(arguments)):Array.isArray(t)?f(t):t&&\"object\"===i(t)?t:e;for(var s=v.length-1;s>=0;--s)this[v[s]]=null!=t[v[s]]?t[v[s]]:e[v[s]]},extend:{extract:function(){var t=p(this,0,1);p(this,1,0);var e=180/Math.PI*Math.atan2(t.y,t.x)-90;return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(e*Math.PI/180)+this.f*Math.sin(e*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(e*Math.PI/180)+this.e*Math.sin(-e*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),rotation:e,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new a.Matrix(this)}},clone:function(){return new a.Matrix(this)},morph:function(t){return this.destination=new a.Matrix(t),this},multiply:function(t){return new a.Matrix(this.native().multiply(function(t){return t instanceof a.Matrix||(t=new a.Matrix(t)),t}(t).native()))},inverse:function(){return new a.Matrix(this.native().inverse())},translate:function(t,e){return new a.Matrix(this.native().translate(t||0,e||0))},native:function(){for(var t=a.parser.native.createSVGMatrix(),e=v.length-1;e>=0;e--)t[v[e]]=this[v[e]];return t},toString:function(){return\"matrix(\"+b(this.a)+\",\"+b(this.b)+\",\"+b(this.c)+\",\"+b(this.d)+\",\"+b(this.e)+\",\"+b(this.f)+\")\"}},parent:a.Element,construct:{ctm:function(){return new a.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof a.Nested){var t=this.rect(1,1),e=t.node.getScreenCTM();return t.remove(),new a.Matrix(e)}return new a.Matrix(this.node.getScreenCTM())}}}),a.Point=a.invent({create:function(t,e){var a;a=Array.isArray(t)?{x:t[0],y:t[1]}:\"object\"===i(t)?{x:t.x,y:t.y}:null!=t?{x:t,y:null!=e?e:t}:{x:0,y:0},this.x=a.x,this.y=a.y},extend:{clone:function(){return new a.Point(this)},morph:function(t,e){return this.destination=new a.Point(t,e),this}}}),a.extend(a.Element,{point:function(t,e){return new a.Point(t,e).transform(this.screenCTM().inverse())}}),a.extend(a.Element,{attr:function(t,e,s){if(null==t){for(t={},s=(e=this.node.attributes).length-1;s>=0;s--)t[e[s].nodeName]=a.regex.isNumber.test(e[s].nodeValue)?parseFloat(e[s].nodeValue):e[s].nodeValue;return t}if(\"object\"===i(t))for(var r in t)this.attr(r,t[r]);else if(null===e)this.node.removeAttribute(t);else{if(null==e)return null==(e=this.node.getAttribute(t))?a.defaults.attrs[t]:a.regex.isNumber.test(e)?parseFloat(e):e;\"stroke-width\"==t?this.attr(\"stroke\",parseFloat(e)>0?this._stroke:null):\"stroke\"==t&&(this._stroke=e),\"fill\"!=t&&\"stroke\"!=t||(a.regex.isImage.test(e)&&(e=this.doc().defs().image(e,0,0)),e instanceof a.Image&&(e=this.doc().defs().pattern(0,0,(function(){this.add(e)})))),\"number\"==typeof e?e=new a.Number(e):a.Color.isColor(e)?e=new a.Color(e):Array.isArray(e)&&(e=new a.Array(e)),\"leading\"==t?this.leading&&this.leading(e):\"string\"==typeof s?this.node.setAttributeNS(s,t,e.toString()):this.node.setAttribute(t,e.toString()),!this.rebuild||\"font-size\"!=t&&\"x\"!=t||this.rebuild(t,e)}return this}}),a.extend(a.Element,{transform:function(t,e){var s;return\"object\"!==i(t)?(s=new a.Matrix(this).extract(),\"string\"==typeof t?s[t]:s):(s=new a.Matrix(this),e=!!e||!!t.relative,null!=t.a&&(s=e?s.multiply(new a.Matrix(t)):new a.Matrix(t)),this.attr(\"transform\",s))}}),a.extend(a.Element,{untransform:function(){return this.attr(\"transform\",null)},matrixify:function(){return(this.attr(\"transform\")||\"\").split(a.regex.transforms).slice(0,-1).map((function(t){var e=t.trim().split(\"(\");return[e[0],e[1].split(a.regex.delimiter).map((function(t){return parseFloat(t)}))]})).reduce((function(t,e){return\"matrix\"==e[0]?t.multiply(f(e[1])):t[e[0]].apply(t,e[1])}),new a.Matrix)},toParent:function(t){if(this==t)return this;var e=this.screenCTM(),i=t.screenCTM().inverse();return this.addTo(t).untransform().transform(i.multiply(e)),this},toDoc:function(){return this.toParent(this.doc())}}),a.Transformation=a.invent({create:function(t,e){if(arguments.length>1&&\"boolean\"!=typeof e)return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(t))for(var a=0,s=this.arguments.length;a<s;++a)this[this.arguments[a]]=t[a];else if(t&&\"object\"===i(t))for(a=0,s=this.arguments.length;a<s;++a)this[this.arguments[a]]=t[this.arguments[a]];this.inversed=!1,!0===e&&(this.inversed=!0)}}),a.Translate=a.invent({parent:a.Matrix,inherit:a.Transformation,create:function(t,e){this.constructor.apply(this,[].slice.call(arguments))},extend:{arguments:[\"transformedX\",\"transformedY\"],method:\"translate\"}}),a.extend(a.Element,{style:function(t,e){if(0==arguments.length)return this.node.style.cssText||\"\";if(arguments.length<2)if(\"object\"===i(t))for(var s in t)this.style(s,t[s]);else{if(!a.regex.isCss.test(t))return this.node.style[c(t)];for(t=t.split(/\\s*;\\s*/).filter((function(t){return!!t})).map((function(t){return t.split(/\\s*:\\s*/)}));e=t.pop();)this.style(e[0],e[1])}else this.node.style[c(t)]=null===e||a.regex.isBlank.test(e)?\"\":e;return this}}),a.Parent=a.invent({create:function(t){this.constructor.call(this,t)},inherit:a.Element,extend:{children:function(){return a.utils.map(a.utils.filterSVGElements(this.node.childNodes),(function(t){return a.adopt(t)}))},add:function(t,e){return null==e?this.node.appendChild(t.node):t.node!=this.node.childNodes[e]&&this.node.insertBefore(t.node,this.node.childNodes[e]),this},put:function(t,e){return this.add(t,e),t},has:function(t){return this.index(t)>=0},index:function(t){return[].slice.call(this.node.childNodes).indexOf(t.node)},get:function(t){return a.adopt(this.node.childNodes[t])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(t,e){for(var i=this.children(),s=0,r=i.length;s<r;s++)i[s]instanceof a.Element&&t.apply(i[s],[s,i]),e&&i[s]instanceof a.Container&&i[s].each(t,e);return this},removeElement:function(t){return this.node.removeChild(t.node),this},clear:function(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return delete this._defs,this},defs:function(){return this.doc().defs()}}}),a.extend(a.Parent,{ungroup:function(t,e){return 0===e||this instanceof a.Defs||this.node==a.parser.draw||(t=t||(this instanceof a.Doc?this:this.parent(a.Parent)),e=e||1/0,this.each((function(){return this instanceof a.Defs?this:this instanceof a.Parent?this.ungroup(t,e-1):this.toParent(t)})),this.node.firstChild||this.remove()),this},flatten:function(t,e){return this.ungroup(t,e)}}),a.Container=a.invent({create:function(t){this.constructor.call(this,t)},inherit:a.Parent}),a.ViewBox=a.invent({parent:a.Container,construct:{}}),[\"click\",\"dblclick\",\"mousedown\",\"mouseup\",\"mouseover\",\"mouseout\",\"mousemove\",\"touchstart\",\"touchmove\",\"touchleave\",\"touchend\",\"touchcancel\"].forEach((function(t){a.Element.prototype[t]=function(e){return a.on(this.node,t,e),this}})),a.listeners=[],a.handlerMap=[],a.listenerId=0,a.on=function(t,e,i,s,r){var o=i.bind(s||t.instance||t),n=(a.handlerMap.indexOf(t)+1||a.handlerMap.push(t))-1,l=e.split(\".\")[0],h=e.split(\".\")[1]||\"*\";a.listeners[n]=a.listeners[n]||{},a.listeners[n][l]=a.listeners[n][l]||{},a.listeners[n][l][h]=a.listeners[n][l][h]||{},i._svgjsListenerId||(i._svgjsListenerId=++a.listenerId),a.listeners[n][l][h][i._svgjsListenerId]=o,t.addEventListener(l,o,r||{passive:!0})},a.off=function(t,e,i){var s=a.handlerMap.indexOf(t),r=e&&e.split(\".\")[0],o=e&&e.split(\".\")[1],n=\"\";if(-1!=s)if(i){if(\"function\"==typeof i&&(i=i._svgjsListenerId),!i)return;a.listeners[s][r]&&a.listeners[s][r][o||\"*\"]&&(t.removeEventListener(r,a.listeners[s][r][o||\"*\"][i],!1),delete a.listeners[s][r][o||\"*\"][i])}else if(o&&r){if(a.listeners[s][r]&&a.listeners[s][r][o]){for(var l in a.listeners[s][r][o])a.off(t,[r,o].join(\".\"),l);delete a.listeners[s][r][o]}}else if(o)for(var h in a.listeners[s])for(var n in a.listeners[s][h])o===n&&a.off(t,[h,o].join(\".\"));else if(r){if(a.listeners[s][r]){for(var n in a.listeners[s][r])a.off(t,[r,n].join(\".\"));delete a.listeners[s][r]}}else{for(var h in a.listeners[s])a.off(t,h);delete a.listeners[s],delete a.handlerMap[s]}},a.extend(a.Element,{on:function(t,e,i,s){return a.on(this.node,t,e,i,s),this},off:function(t,e){return a.off(this.node,t,e),this},fire:function(e,i){return e instanceof t.Event?this.node.dispatchEvent(e):this.node.dispatchEvent(e=new a.CustomEvent(e,{detail:i,cancelable:!0})),this._event=e,this},event:function(){return this._event}}),a.Defs=a.invent({create:\"defs\",inherit:a.Container}),a.G=a.invent({create:\"g\",inherit:a.Container,extend:{x:function(t){return null==t?this.transform(\"x\"):this.transform({x:t-this.x()},!0)}},construct:{group:function(){return this.put(new a.G)}}}),a.Doc=a.invent({create:function(t){t&&(\"svg\"==(t=\"string\"==typeof t?e.getElementById(t):t).nodeName?this.constructor.call(this,t):(this.constructor.call(this,a.create(\"svg\")),t.appendChild(this.node),this.size(\"100%\",\"100%\")),this.namespace().defs())},inherit:a.Container,extend:{namespace:function(){return this.attr({xmlns:a.ns,version:\"1.1\"}).attr(\"xmlns:xlink\",a.xlink,a.xmlns).attr(\"xmlns:svgjs\",a.svgjs,a.xmlns)},defs:function(){var t;return this._defs||((t=this.node.getElementsByTagName(\"defs\")[0])?this._defs=a.adopt(t):this._defs=new a.Defs,this.node.appendChild(this._defs.node)),this._defs},parent:function(){return this.node.parentNode&&\"#document\"!=this.node.parentNode.nodeName?this.node.parentNode:null},remove:function(){return this.parent()&&this.parent().removeChild(this.node),this},clear:function(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return delete this._defs,a.parser.draw&&!a.parser.draw.parentNode&&this.node.appendChild(a.parser.draw),this},clone:function(t){this.writeDataToDom();var e=this.node,i=x(e.cloneNode(!0));return t?(t.node||t).appendChild(i.node):e.parentNode.insertBefore(i.node,e.nextSibling),i}}}),a.extend(a.Element,{}),a.Gradient=a.invent({create:function(t){this.constructor.call(this,a.create(t+\"Gradient\")),this.type=t},inherit:a.Container,extend:{at:function(t,e,i){return this.put(new a.Stop).update(t,e,i)},update:function(t){return this.clear(),\"function\"==typeof t&&t.call(this,this),this},fill:function(){return\"url(#\"+this.id()+\")\"},toString:function(){return this.fill()},attr:function(t,e,i){return\"transform\"==t&&(t=\"gradientTransform\"),a.Container.prototype.attr.call(this,t,e,i)}},construct:{gradient:function(t,e){return this.defs().gradient(t,e)}}}),a.extend(a.Gradient,a.FX,{from:function(t,e){return\"radial\"==(this._target||this).type?this.attr({fx:new a.Number(t),fy:new a.Number(e)}):this.attr({x1:new a.Number(t),y1:new a.Number(e)})},to:function(t,e){return\"radial\"==(this._target||this).type?this.attr({cx:new a.Number(t),cy:new a.Number(e)}):this.attr({x2:new a.Number(t),y2:new a.Number(e)})}}),a.extend(a.Defs,{gradient:function(t,e){return this.put(new a.Gradient(t)).update(e)}}),a.Stop=a.invent({create:\"stop\",inherit:a.Element,extend:{update:function(t){return(\"number\"==typeof t||t instanceof a.Number)&&(t={offset:arguments[0],color:arguments[1],opacity:arguments[2]}),null!=t.opacity&&this.attr(\"stop-opacity\",t.opacity),null!=t.color&&this.attr(\"stop-color\",t.color),null!=t.offset&&this.attr(\"offset\",new a.Number(t.offset)),this}}}),a.Pattern=a.invent({create:\"pattern\",inherit:a.Container,extend:{fill:function(){return\"url(#\"+this.id()+\")\"},update:function(t){return this.clear(),\"function\"==typeof t&&t.call(this,this),this},toString:function(){return this.fill()},attr:function(t,e,i){return\"transform\"==t&&(t=\"patternTransform\"),a.Container.prototype.attr.call(this,t,e,i)}},construct:{pattern:function(t,e,i){return this.defs().pattern(t,e,i)}}}),a.extend(a.Defs,{pattern:function(t,e,i){return this.put(new a.Pattern).update(i).attr({x:0,y:0,width:t,height:e,patternUnits:\"userSpaceOnUse\"})}}),a.Shape=a.invent({create:function(t){this.constructor.call(this,t)},inherit:a.Element}),a.Symbol=a.invent({create:\"symbol\",inherit:a.Container,construct:{symbol:function(){return this.put(new a.Symbol)}}}),a.Use=a.invent({create:\"use\",inherit:a.Shape,extend:{element:function(t,e){return this.attr(\"href\",(e||\"\")+\"#\"+t,a.xlink)}},construct:{use:function(t,e){return this.put(new a.Use).element(t,e)}}}),a.Rect=a.invent({create:\"rect\",inherit:a.Shape,construct:{rect:function(t,e){return this.put(new a.Rect).size(t,e)}}}),a.Circle=a.invent({create:\"circle\",inherit:a.Shape,construct:{circle:function(t){return this.put(new a.Circle).rx(new a.Number(t).divide(2)).move(0,0)}}}),a.extend(a.Circle,a.FX,{rx:function(t){return this.attr(\"r\",t)},ry:function(t){return this.rx(t)}}),a.Ellipse=a.invent({create:\"ellipse\",inherit:a.Shape,construct:{ellipse:function(t,e){return this.put(new a.Ellipse).size(t,e).move(0,0)}}}),a.extend(a.Ellipse,a.Rect,a.FX,{rx:function(t){return this.attr(\"rx\",t)},ry:function(t){return this.attr(\"ry\",t)}}),a.extend(a.Circle,a.Ellipse,{x:function(t){return null==t?this.cx()-this.rx():this.cx(t+this.rx())},y:function(t){return null==t?this.cy()-this.ry():this.cy(t+this.ry())},cx:function(t){return null==t?this.attr(\"cx\"):this.attr(\"cx\",t)},cy:function(t){return null==t?this.attr(\"cy\"):this.attr(\"cy\",t)},width:function(t){return null==t?2*this.rx():this.rx(new a.Number(t).divide(2))},height:function(t){return null==t?2*this.ry():this.ry(new a.Number(t).divide(2))},size:function(t,e){var i=u(this,t,e);return this.rx(new a.Number(i.width).divide(2)).ry(new a.Number(i.height).divide(2))}}),a.Line=a.invent({create:\"line\",inherit:a.Shape,extend:{array:function(){return new a.PointArray([[this.attr(\"x1\"),this.attr(\"y1\")],[this.attr(\"x2\"),this.attr(\"y2\")]])},plot:function(t,e,i,s){return null==t?this.array():(t=void 0!==e?{x1:t,y1:e,x2:i,y2:s}:new a.PointArray(t).toLine(),this.attr(t))},move:function(t,e){return this.attr(this.array().move(t,e).toLine())},size:function(t,e){var i=u(this,t,e);return this.attr(this.array().size(i.width,i.height).toLine())}},construct:{line:function(t,e,i,s){return a.Line.prototype.plot.apply(this.put(new a.Line),null!=t?[t,e,i,s]:[0,0,0,0])}}}),a.Polyline=a.invent({create:\"polyline\",inherit:a.Shape,construct:{polyline:function(t){return this.put(new a.Polyline).plot(t||new a.PointArray)}}}),a.Polygon=a.invent({create:\"polygon\",inherit:a.Shape,construct:{polygon:function(t){return this.put(new a.Polygon).plot(t||new a.PointArray)}}}),a.extend(a.Polyline,a.Polygon,{array:function(){return this._array||(this._array=new a.PointArray(this.attr(\"points\")))},plot:function(t){return null==t?this.array():this.clear().attr(\"points\",\"string\"==typeof t?t:this._array=new a.PointArray(t))},clear:function(){return delete this._array,this},move:function(t,e){return this.attr(\"points\",this.array().move(t,e))},size:function(t,e){var i=u(this,t,e);return this.attr(\"points\",this.array().size(i.width,i.height))}}),a.extend(a.Line,a.Polyline,a.Polygon,{morphArray:a.PointArray,x:function(t){return null==t?this.bbox().x:this.move(t,this.bbox().y)},y:function(t){return null==t?this.bbox().y:this.move(this.bbox().x,t)},width:function(t){var e=this.bbox();return null==t?e.width:this.size(t,e.height)},height:function(t){var e=this.bbox();return null==t?e.height:this.size(e.width,t)}}),a.Path=a.invent({create:\"path\",inherit:a.Shape,extend:{morphArray:a.PathArray,array:function(){return this._array||(this._array=new a.PathArray(this.attr(\"d\")))},plot:function(t){return null==t?this.array():this.clear().attr(\"d\",\"string\"==typeof t?t:this._array=new a.PathArray(t))},clear:function(){return delete this._array,this}},construct:{path:function(t){return this.put(new a.Path).plot(t||new a.PathArray)}}}),a.Image=a.invent({create:\"image\",inherit:a.Shape,extend:{load:function(e){if(!e)return this;var i=this,s=new t.Image;return a.on(s,\"load\",(function(){a.off(s);var t=i.parent(a.Pattern);null!==t&&(0==i.width()&&0==i.height()&&i.size(s.width,s.height),t&&0==t.width()&&0==t.height()&&t.size(i.width(),i.height()),\"function\"==typeof i._loaded&&i._loaded.call(i,{width:s.width,height:s.height,ratio:s.width/s.height,url:e}))})),a.on(s,\"error\",(function(t){a.off(s),\"function\"==typeof i._error&&i._error.call(i,t)})),this.attr(\"href\",s.src=this.src=e,a.xlink)},loaded:function(t){return this._loaded=t,this},error:function(t){return this._error=t,this}},construct:{image:function(t,e,i){return this.put(new a.Image).load(t).size(e||0,i||e||0)}}}),a.Text=a.invent({create:function(){this.constructor.call(this,a.create(\"text\")),this.dom.leading=new a.Number(1.3),this._rebuild=!0,this._build=!1,this.attr(\"font-family\",a.defaults.attrs[\"font-family\"])},inherit:a.Shape,extend:{x:function(t){return null==t?this.attr(\"x\"):this.attr(\"x\",t)},text:function(t){if(void 0===t){t=\"\";for(var e=this.node.childNodes,i=0,s=e.length;i<s;++i)0!=i&&3!=e[i].nodeType&&1==a.adopt(e[i]).dom.newLined&&(t+=\"\\n\"),t+=e[i].textContent;return t}if(this.clear().build(!0),\"function\"==typeof t)t.call(this,this);else{i=0;for(var r=(t=t.split(\"\\n\")).length;i<r;i++)this.tspan(t[i]).newLine()}return this.build(!1).rebuild()},size:function(t){return this.attr(\"font-size\",t).rebuild()},leading:function(t){return null==t?this.dom.leading:(this.dom.leading=new a.Number(t),this.rebuild())},lines:function(){var t=(this.textPath&&this.textPath()||this).node,e=a.utils.map(a.utils.filterSVGElements(t.childNodes),(function(t){return a.adopt(t)}));return new a.Set(e)},rebuild:function(t){if(\"boolean\"==typeof t&&(this._rebuild=t),this._rebuild){var e=this,i=0,s=this.dom.leading*new a.Number(this.attr(\"font-size\"));this.lines().each((function(){this.dom.newLined&&(e.textPath()||this.attr(\"x\",e.attr(\"x\")),\"\\n\"==this.text()?i+=s:(this.attr(\"dy\",s+i),i=0))})),this.fire(\"rebuild\")}return this},build:function(t){return this._build=!!t,this},setData:function(t){return this.dom=t,this.dom.leading=new a.Number(t.leading||1.3),this}},construct:{text:function(t){return this.put(new a.Text).text(t)},plain:function(t){return this.put(new a.Text).plain(t)}}}),a.Tspan=a.invent({create:\"tspan\",inherit:a.Shape,extend:{text:function(t){return null==t?this.node.textContent+(this.dom.newLined?\"\\n\":\"\"):(\"function\"==typeof t?t.call(this,this):this.plain(t),this)},dx:function(t){return this.attr(\"dx\",t)},dy:function(t){return this.attr(\"dy\",t)},newLine:function(){var t=this.parent(a.Text);return this.dom.newLined=!0,this.dy(t.dom.leading*t.attr(\"font-size\")).attr(\"x\",t.x())}}}),a.extend(a.Text,a.Tspan,{plain:function(t){return!1===this._build&&this.clear(),this.node.appendChild(e.createTextNode(t)),this},tspan:function(t){var e=(this.textPath&&this.textPath()||this).node,i=new a.Tspan;return!1===this._build&&this.clear(),e.appendChild(i.node),i.text(t)},clear:function(){for(var t=(this.textPath&&this.textPath()||this).node;t.hasChildNodes();)t.removeChild(t.lastChild);return this},length:function(){return this.node.getComputedTextLength()}}),a.TextPath=a.invent({create:\"textPath\",inherit:a.Parent,parent:a.Text,construct:{morphArray:a.PathArray,array:function(){var t=this.track();return t?t.array():null},plot:function(t){var e=this.track(),i=null;return e&&(i=e.plot(t)),null==t?i:this},track:function(){var t=this.textPath();if(t)return t.reference(\"href\")},textPath:function(){if(this.node.firstChild&&\"textPath\"==this.node.firstChild.nodeName)return a.adopt(this.node.firstChild)}}}),a.Nested=a.invent({create:function(){this.constructor.call(this,a.create(\"svg\")),this.style(\"overflow\",\"visible\")},inherit:a.Container,construct:{nested:function(){return this.put(new a.Nested)}}});var l={stroke:[\"color\",\"width\",\"opacity\",\"linecap\",\"linejoin\",\"miterlimit\",\"dasharray\",\"dashoffset\"],fill:[\"color\",\"opacity\",\"rule\"],prefix:function(t,e){return\"color\"==e?t:t+\"-\"+e}};function h(t,e,i,s){return i+s.replace(a.regex.dots,\" .\")}function c(t){return t.toLowerCase().replace(/-(.)/g,(function(t,e){return e.toUpperCase()}))}function d(t){return t.charAt(0).toUpperCase()+t.slice(1)}function g(t){var e=t.toString(16);return 1==e.length?\"0\"+e:e}function u(t,e,i){if(null==e||null==i){var a=t.bbox();null==e?e=a.width/a.height*i:null==i&&(i=a.height/a.width*e)}return{width:e,height:i}}function p(t,e,i){return{x:e*t.a+i*t.c+0,y:e*t.b+i*t.d+0}}function f(t){return{a:t[0],b:t[1],c:t[2],d:t[3],e:t[4],f:t[5]}}function x(e){for(var i=e.childNodes.length-1;i>=0;i--)e.childNodes[i]instanceof t.SVGElement&&x(e.childNodes[i]);return a.adopt(e).id(a.eid(e.nodeName))}function b(t){return Math.abs(t)>1e-37?t:0}[\"fill\",\"stroke\"].forEach((function(t){var e={};e[t]=function(e){if(void 0===e)return this;if(\"string\"==typeof e||a.Color.isRgb(e)||e&&\"function\"==typeof e.fill)this.attr(t,e);else for(var i=l[t].length-1;i>=0;i--)null!=e[l[t][i]]&&this.attr(l.prefix(t,l[t][i]),e[l[t][i]]);return this},a.extend(a.Element,a.FX,e)})),a.extend(a.Element,a.FX,{translate:function(t,e){return this.transform({x:t,y:e})},matrix:function(t){return this.attr(\"transform\",new a.Matrix(6==arguments.length?[].slice.call(arguments):t))},opacity:function(t){return this.attr(\"opacity\",t)},dx:function(t){return this.x(new a.Number(t).plus(this instanceof a.FX?0:this.x()),!0)},dy:function(t){return this.y(new a.Number(t).plus(this instanceof a.FX?0:this.y()),!0)}}),a.extend(a.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(t){return this.node.getPointAtLength(t)}}),a.Set=a.invent({create:function(t){Array.isArray(t)?this.members=t:this.clear()},extend:{add:function(){for(var t=[].slice.call(arguments),e=0,i=t.length;e<i;e++)this.members.push(t[e]);return this},remove:function(t){var e=this.index(t);return e>-1&&this.members.splice(e,1),this},each:function(t){for(var e=0,i=this.members.length;e<i;e++)t.apply(this.members[e],[e,this.members]);return this},clear:function(){return this.members=[],this},length:function(){return this.members.length},has:function(t){return this.index(t)>=0},index:function(t){return this.members.indexOf(t)},get:function(t){return this.members[t]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members}},construct:{set:function(t){return new a.Set(t)}}}),a.FX.Set=a.invent({create:function(t){this.set=t}}),a.Set.inherit=function(){var t=[];for(var e in a.Shape.prototype)\"function\"==typeof a.Shape.prototype[e]&&\"function\"!=typeof a.Set.prototype[e]&&t.push(e);for(var e in t.forEach((function(t){a.Set.prototype[t]=function(){for(var e=0,i=this.members.length;e<i;e++)this.members[e]&&\"function\"==typeof this.members[e][t]&&this.members[e][t].apply(this.members[e],arguments);return\"animate\"==t?this.fx||(this.fx=new a.FX.Set(this)):this}})),t=[],a.FX.prototype)\"function\"==typeof a.FX.prototype[e]&&\"function\"!=typeof a.FX.Set.prototype[e]&&t.push(e);t.forEach((function(t){a.FX.Set.prototype[t]=function(){for(var e=0,i=this.set.members.length;e<i;e++)this.set.members[e].fx[t].apply(this.set.members[e].fx,arguments);return this}}))},a.extend(a.Element,{}),a.extend(a.Element,{remember:function(t,e){if(\"object\"===i(arguments[0]))for(var a in t)this.remember(a,t[a]);else{if(1==arguments.length)return this.memory()[t];this.memory()[t]=e}return this},forget:function(){if(0==arguments.length)this._memory={};else for(var t=arguments.length-1;t>=0;t--)delete this.memory()[arguments[t]];return this},memory:function(){return this._memory||(this._memory={})}}),a.get=function(t){var i=e.getElementById(function(t){var e=(t||\"\").toString().match(a.regex.reference);if(e)return e[1]}(t)||t);return a.adopt(i)},a.select=function(t,i){return new a.Set(a.utils.map((i||e).querySelectorAll(t),(function(t){return a.adopt(t)})))},a.extend(a.Parent,{select:function(t){return a.select(t,this.node)}});var v=\"abcdef\".split(\"\");if(\"function\"!=typeof t.CustomEvent){var m=function(t,i){i=i||{bubbles:!1,cancelable:!1,detail:void 0};var a=e.createEvent(\"CustomEvent\");return a.initCustomEvent(t,i.bubbles,i.cancelable,i.detail),a};m.prototype=t.Event.prototype,a.CustomEvent=m}else a.CustomEvent=t.CustomEvent;return a},\"function\"==typeof define&&define.amd?define((function(){return Et(zt,zt.document)})):\"object\"===(\"undefined\"==typeof exports?\"undefined\":i(exports))&&\"undefined\"!=typeof module?module.exports=zt.document?Et(zt,zt.document):function(t){return Et(t,t.document)}:zt.SVG=Et(zt,zt.document),\n/*! svg.filter.js - v2.0.2 - 2016-02-24\n* https://github.com/wout/svg.filter.js\n* Copyright (c) 2016 Wout Fierens; Licensed MIT */\nfunction(){SVG.Filter=SVG.invent({create:\"filter\",inherit:SVG.Parent,extend:{source:\"SourceGraphic\",sourceAlpha:\"SourceAlpha\",background:\"BackgroundImage\",backgroundAlpha:\"BackgroundAlpha\",fill:\"FillPaint\",stroke:\"StrokePaint\",autoSetIn:!0,put:function(t,e){return this.add(t,e),!t.attr(\"in\")&&this.autoSetIn&&t.attr(\"in\",this.source),t.attr(\"result\")||t.attr(\"result\",t),t},blend:function(t,e,i){return this.put(new SVG.BlendEffect(t,e,i))},colorMatrix:function(t,e){return this.put(new SVG.ColorMatrixEffect(t,e))},convolveMatrix:function(t){return this.put(new SVG.ConvolveMatrixEffect(t))},componentTransfer:function(t){return this.put(new SVG.ComponentTransferEffect(t))},composite:function(t,e,i){return this.put(new SVG.CompositeEffect(t,e,i))},flood:function(t,e){return this.put(new SVG.FloodEffect(t,e))},offset:function(t,e){return this.put(new SVG.OffsetEffect(t,e))},image:function(t){return this.put(new SVG.ImageEffect(t))},merge:function(){var t=[void 0];for(var e in arguments)t.push(arguments[e]);return this.put(new(SVG.MergeEffect.bind.apply(SVG.MergeEffect,t)))},gaussianBlur:function(t,e){return this.put(new SVG.GaussianBlurEffect(t,e))},morphology:function(t,e){return this.put(new SVG.MorphologyEffect(t,e))},diffuseLighting:function(t,e,i){return this.put(new SVG.DiffuseLightingEffect(t,e,i))},displacementMap:function(t,e,i,a,s){return this.put(new SVG.DisplacementMapEffect(t,e,i,a,s))},specularLighting:function(t,e,i,a){return this.put(new SVG.SpecularLightingEffect(t,e,i,a))},tile:function(){return this.put(new SVG.TileEffect)},turbulence:function(t,e,i,a,s){return this.put(new SVG.TurbulenceEffect(t,e,i,a,s))},toString:function(){return\"url(#\"+this.attr(\"id\")+\")\"}}}),SVG.extend(SVG.Defs,{filter:function(t){var e=this.put(new SVG.Filter);return\"function\"==typeof t&&t.call(e,e),e}}),SVG.extend(SVG.Container,{filter:function(t){return this.defs().filter(t)}}),SVG.extend(SVG.Element,SVG.G,SVG.Nested,{filter:function(t){return this.filterer=t instanceof SVG.Element?t:this.doc().filter(t),this.doc()&&this.filterer.doc()!==this.doc()&&this.doc().defs().add(this.filterer),this.attr(\"filter\",this.filterer),this.filterer},unfilter:function(t){return this.filterer&&!0===t&&this.filterer.remove(),delete this.filterer,this.attr(\"filter\",null)}}),SVG.Effect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result=\"'+this.attr(\"in\")+'\"]').get(0)||this.attr(\"in\"):this.attr(\"in\",t)},result:function(t){return null==t?this.attr(\"result\"):this.attr(\"result\",t)},toString:function(){return this.result()}}}),SVG.ParentEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Parent,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result=\"'+this.attr(\"in\")+'\"]').get(0)||this.attr(\"in\"):this.attr(\"in\",t)},result:function(t){return null==t?this.attr(\"result\"):this.attr(\"result\",t)},toString:function(){return this.result()}}});var t={blend:function(t,e){return this.parent()&&this.parent().blend(this,t,e)},colorMatrix:function(t,e){return this.parent()&&this.parent().colorMatrix(t,e).in(this)},convolveMatrix:function(t){return this.parent()&&this.parent().convolveMatrix(t).in(this)},componentTransfer:function(t){return this.parent()&&this.parent().componentTransfer(t).in(this)},composite:function(t,e){return this.parent()&&this.parent().composite(this,t,e)},flood:function(t,e){return this.parent()&&this.parent().flood(t,e)},offset:function(t,e){return this.parent()&&this.parent().offset(t,e).in(this)},image:function(t){return this.parent()&&this.parent().image(t)},merge:function(){return this.parent()&&this.parent().merge.apply(this.parent(),[this].concat(arguments))},gaussianBlur:function(t,e){return this.parent()&&this.parent().gaussianBlur(t,e).in(this)},morphology:function(t,e){return this.parent()&&this.parent().morphology(t,e).in(this)},diffuseLighting:function(t,e,i){return this.parent()&&this.parent().diffuseLighting(t,e,i).in(this)},displacementMap:function(t,e,i,a){return this.parent()&&this.parent().displacementMap(this,t,e,i,a)},specularLighting:function(t,e,i,a){return this.parent()&&this.parent().specularLighting(t,e,i,a).in(this)},tile:function(){return this.parent()&&this.parent().tile().in(this)},turbulence:function(t,e,i,a,s){return this.parent()&&this.parent().turbulence(t,e,i,a,s).in(this)}};SVG.extend(SVG.Effect,t),SVG.extend(SVG.ParentEffect,t),SVG.ChildEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){this.attr(\"in\",t)}}});var e={blend:function(t,e,i){this.attr({in:t,in2:e,mode:i||\"normal\"})},colorMatrix:function(t,e){\"matrix\"==t&&(e=s(e)),this.attr({type:t,values:void 0===e?null:e})},convolveMatrix:function(t){t=s(t),this.attr({order:Math.sqrt(t.split(\" \").length),kernelMatrix:t})},composite:function(t,e,i){this.attr({in:t,in2:e,operator:i})},flood:function(t,e){this.attr(\"flood-color\",t),null!=e&&this.attr(\"flood-opacity\",e)},offset:function(t,e){this.attr({dx:t,dy:e})},image:function(t){this.attr(\"href\",t,SVG.xlink)},displacementMap:function(t,e,i,a,s){this.attr({in:t,in2:e,scale:i,xChannelSelector:a,yChannelSelector:s})},gaussianBlur:function(t,e){null!=t||null!=e?this.attr(\"stdDeviation\",function(t){if(!Array.isArray(t))return t;for(var e=0,i=t.length,a=[];e<i;e++)a.push(t[e]);return a.join(\" \")}(Array.prototype.slice.call(arguments))):this.attr(\"stdDeviation\",\"0 0\")},morphology:function(t,e){this.attr({operator:t,radius:e})},tile:function(){},turbulence:function(t,e,i,a,s){this.attr({numOctaves:e,seed:i,stitchTiles:a,baseFrequency:t,type:s})}},i={merge:function(){var t;if(arguments[0]instanceof SVG.Set){var e=this;arguments[0].each((function(t){this instanceof SVG.MergeNode?e.put(this):(this instanceof SVG.Effect||this instanceof SVG.ParentEffect)&&e.put(new SVG.MergeNode(this))}))}else{t=Array.isArray(arguments[0])?arguments[0]:arguments;for(var i=0;i<t.length;i++)t[i]instanceof SVG.MergeNode?this.put(t[i]):this.put(new SVG.MergeNode(t[i]))}},componentTransfer:function(t){if(this.rgb=new SVG.Set,[\"r\",\"g\",\"b\",\"a\"].forEach(function(t){this[t]=new(SVG[\"Func\"+t.toUpperCase()])(\"identity\"),this.rgb.add(this[t]),this.node.appendChild(this[t].node)}.bind(this)),t)for(var e in t.rgb&&([\"r\",\"g\",\"b\"].forEach(function(e){this[e].attr(t.rgb)}.bind(this)),delete t.rgb),t)this[e].attr(t[e])},diffuseLighting:function(t,e,i){this.attr({surfaceScale:t,diffuseConstant:e,kernelUnitLength:i})},specularLighting:function(t,e,i,a){this.attr({surfaceScale:t,diffuseConstant:e,specularExponent:i,kernelUnitLength:a})}},a={distantLight:function(t,e){this.attr({azimuth:t,elevation:e})},pointLight:function(t,e,i){this.attr({x:t,y:e,z:i})},spotLight:function(t,e,i,a,s,r){this.attr({x:t,y:e,z:i,pointsAtX:a,pointsAtY:s,pointsAtZ:r})},mergeNode:function(t){this.attr(\"in\",t)}};function s(t){return Array.isArray(t)&&(t=new SVG.Array(t)),t.toString().replace(/^\\s+/,\"\").replace(/\\s+$/,\"\").replace(/\\s+/g,\" \")}function r(){var t=function(){};for(var e in\"function\"==typeof arguments[arguments.length-1]&&(t=arguments[arguments.length-1],Array.prototype.splice.call(arguments,arguments.length-1,1)),arguments)for(var i in arguments[e])t(arguments[e][i],i,arguments[e])}[\"r\",\"g\",\"b\",\"a\"].forEach((function(t){a[\"Func\"+t.toUpperCase()]=function(t){switch(this.attr(\"type\",t),t){case\"table\":this.attr(\"tableValues\",arguments[1]);break;case\"linear\":this.attr(\"slope\",arguments[1]),this.attr(\"intercept\",arguments[2]);break;case\"gamma\":this.attr(\"amplitude\",arguments[1]),this.attr(\"exponent\",arguments[2]),this.attr(\"offset\",arguments[2])}}})),r(e,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i+\"Effect\"]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\"fe\"+i)),t.apply(this,arguments),this.result(this.attr(\"id\")+\"Out\")},inherit:SVG.Effect,extend:{}})})),r(i,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i+\"Effect\"]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\"fe\"+i)),t.apply(this,arguments),this.result(this.attr(\"id\")+\"Out\")},inherit:SVG.ParentEffect,extend:{}})})),r(a,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\"fe\"+i)),t.apply(this,arguments)},inherit:SVG.ChildEffect,extend:{}})})),SVG.extend(SVG.MergeEffect,{in:function(t){return t instanceof SVG.MergeNode?this.add(t,0):this.add(new SVG.MergeNode(t),0),this}}),SVG.extend(SVG.CompositeEffect,SVG.BlendEffect,SVG.DisplacementMapEffect,{in2:function(t){return null==t?this.parent()&&this.parent().select('[result=\"'+this.attr(\"in2\")+'\"]').get(0)||this.attr(\"in2\"):this.attr(\"in2\",t)}}),SVG.filter={sepiatone:[.343,.669,.119,0,0,.249,.626,.13,0,0,.172,.334,.111,0,0,0,0,0,1,0]}}.call(void 0),function(){function t(t,s,r,o,n,l,h){for(var c=t.slice(s,r||h),d=o.slice(n,l||h),g=0,u={pos:[0,0],start:[0,0]},p={pos:[0,0],start:[0,0]};;){if(c[g]=e.call(u,c[g]),d[g]=e.call(p,d[g]),c[g][0]!=d[g][0]||\"M\"==c[g][0]||\"A\"==c[g][0]&&(c[g][4]!=d[g][4]||c[g][5]!=d[g][5])?(Array.prototype.splice.apply(c,[g,1].concat(a.call(u,c[g]))),Array.prototype.splice.apply(d,[g,1].concat(a.call(p,d[g])))):(c[g]=i.call(u,c[g]),d[g]=i.call(p,d[g])),++g==c.length&&g==d.length)break;g==c.length&&c.push([\"C\",u.pos[0],u.pos[1],u.pos[0],u.pos[1],u.pos[0],u.pos[1]]),g==d.length&&d.push([\"C\",p.pos[0],p.pos[1],p.pos[0],p.pos[1],p.pos[0],p.pos[1]])}return{start:c,dest:d}}function e(t){switch(t[0]){case\"z\":case\"Z\":t[0]=\"L\",t[1]=this.start[0],t[2]=this.start[1];break;case\"H\":t[0]=\"L\",t[2]=this.pos[1];break;case\"V\":t[0]=\"L\",t[2]=t[1],t[1]=this.pos[0];break;case\"T\":t[0]=\"Q\",t[3]=t[1],t[4]=t[2],t[1]=this.reflection[1],t[2]=this.reflection[0];break;case\"S\":t[0]=\"C\",t[6]=t[4],t[5]=t[3],t[4]=t[2],t[3]=t[1],t[2]=this.reflection[1],t[1]=this.reflection[0]}return t}function i(t){var e=t.length;return this.pos=[t[e-2],t[e-1]],-1!=\"SCQT\".indexOf(t[0])&&(this.reflection=[2*this.pos[0]-t[e-4],2*this.pos[1]-t[e-3]]),t}function a(t){var e=[t];switch(t[0]){case\"M\":return this.pos=this.start=[t[1],t[2]],e;case\"L\":t[5]=t[3]=t[1],t[6]=t[4]=t[2],t[1]=this.pos[0],t[2]=this.pos[1];break;case\"Q\":t[6]=t[4],t[5]=t[3],t[4]=1*t[4]/3+2*t[2]/3,t[3]=1*t[3]/3+2*t[1]/3,t[2]=1*this.pos[1]/3+2*t[2]/3,t[1]=1*this.pos[0]/3+2*t[1]/3;break;case\"A\":e=function(t,e){var i,a,s,r,o,n,l,h,c,d,g,u,p,f,x,b,v,m,y,w,k,A,S,C,L,P,I=Math.abs(e[1]),T=Math.abs(e[2]),M=e[3]%360,X=e[4],z=e[5],E=e[6],Y=e[7],F=new SVG.Point(t),R=new SVG.Point(E,Y),H=[];if(0===I||0===T||F.x===R.x&&F.y===R.y)return[[\"C\",F.x,F.y,R.x,R.y,R.x,R.y]];i=new SVG.Point((F.x-R.x)/2,(F.y-R.y)/2).transform((new SVG.Matrix).rotate(M)),(a=i.x*i.x/(I*I)+i.y*i.y/(T*T))>1&&(I*=a=Math.sqrt(a),T*=a);s=(new SVG.Matrix).rotate(M).scale(1/I,1/T).rotate(-M),F=F.transform(s),R=R.transform(s),r=[R.x-F.x,R.y-F.y],n=r[0]*r[0]+r[1]*r[1],o=Math.sqrt(n),r[0]/=o,r[1]/=o,l=n<4?Math.sqrt(1-n/4):0,X===z&&(l*=-1);h=new SVG.Point((R.x+F.x)/2+l*-r[1],(R.y+F.y)/2+l*r[0]),c=new SVG.Point(F.x-h.x,F.y-h.y),d=new SVG.Point(R.x-h.x,R.y-h.y),g=Math.acos(c.x/Math.sqrt(c.x*c.x+c.y*c.y)),c.y<0&&(g*=-1);u=Math.acos(d.x/Math.sqrt(d.x*d.x+d.y*d.y)),d.y<0&&(u*=-1);z&&g>u&&(u+=2*Math.PI);!z&&g<u&&(u-=2*Math.PI);for(f=Math.ceil(2*Math.abs(g-u)/Math.PI),b=[],v=g,p=(u-g)/f,x=4*Math.tan(p/4)/3,k=0;k<=f;k++)y=Math.cos(v),m=Math.sin(v),w=new SVG.Point(h.x+y,h.y+m),b[k]=[new SVG.Point(w.x+x*m,w.y-x*y),w,new SVG.Point(w.x-x*m,w.y+x*y)],v+=p;for(b[0][0]=b[0][1].clone(),b[b.length-1][2]=b[b.length-1][1].clone(),s=(new SVG.Matrix).rotate(M).scale(I,T).rotate(-M),k=0,A=b.length;k<A;k++)b[k][0]=b[k][0].transform(s),b[k][1]=b[k][1].transform(s),b[k][2]=b[k][2].transform(s);for(k=1,A=b.length;k<A;k++)S=(w=b[k-1][2]).x,C=w.y,L=(w=b[k][0]).x,P=w.y,E=(w=b[k][1]).x,Y=w.y,H.push([\"C\",S,C,L,P,E,Y]);return H}(this.pos,t),t=e[0]}return t[0]=\"C\",this.pos=[t[5],t[6]],this.reflection=[2*t[5]-t[3],2*t[6]-t[4]],e}function s(t,e){if(!1===e)return!1;for(var i=e,a=t.length;i<a;++i)if(\"M\"==t[i][0])return i;return!1}SVG.extend(SVG.PathArray,{morph:function(e){for(var i=this.value,a=this.parse(e),r=0,o=0,n=!1,l=!1;!1!==r||!1!==o;){var h;n=s(i,!1!==r&&r+1),l=s(a,!1!==o&&o+1),!1===r&&(r=0==(h=new SVG.PathArray(c.start).bbox()).height||0==h.width?i.push(i[0])-1:i.push([\"M\",h.x+h.width/2,h.y+h.height/2])-1),!1===o&&(o=0==(h=new SVG.PathArray(c.dest).bbox()).height||0==h.width?a.push(a[0])-1:a.push([\"M\",h.x+h.width/2,h.y+h.height/2])-1);var c=t(i,r,n,a,o,l);i=i.slice(0,r).concat(c.start,!1===n?[]:i.slice(n)),a=a.slice(0,o).concat(c.dest,!1===l?[]:a.slice(l)),r=!1!==n&&r+c.start.length,o=!1!==l&&o+c.dest.length}return this.value=i,this.destination=new SVG.PathArray,this.destination.value=a,this}})}(),\n/*! svg.draggable.js - v2.2.2 - 2019-01-08\n* https://github.com/svgdotjs/svg.draggable.js\n* Copyright (c) 2019 Wout Fierens; Licensed MIT */\nfunction(){function t(t){t.remember(\"_draggable\",this),this.el=t}t.prototype.init=function(t,e){var i=this;this.constraint=t,this.value=e,this.el.on(\"mousedown.drag\",(function(t){i.start(t)})),this.el.on(\"touchstart.drag\",(function(t){i.start(t)}))},t.prototype.transformPoint=function(t,e){var i=(t=t||window.event).changedTouches&&t.changedTouches[0]||t;return this.p.x=i.clientX-(e||0),this.p.y=i.clientY,this.p.matrixTransform(this.m)},t.prototype.getBBox=function(){var t=this.el.bbox();return this.el instanceof SVG.Nested&&(t=this.el.rbox()),(this.el instanceof SVG.G||this.el instanceof SVG.Use||this.el instanceof SVG.Nested)&&(t.x=this.el.x(),t.y=this.el.y()),t},t.prototype.start=function(t){if(\"click\"!=t.type&&\"mousedown\"!=t.type&&\"mousemove\"!=t.type||1==(t.which||t.buttons)){var e=this;if(this.el.fire(\"beforedrag\",{event:t,handler:this}),!this.el.event().defaultPrevented){t.preventDefault(),t.stopPropagation(),this.parent=this.parent||this.el.parent(SVG.Nested)||this.el.parent(SVG.Doc),this.p=this.parent.node.createSVGPoint(),this.m=this.el.node.getScreenCTM().inverse();var i,a=this.getBBox();if(this.el instanceof SVG.Text)switch(i=this.el.node.getComputedTextLength(),this.el.attr(\"text-anchor\")){case\"middle\":i/=2;break;case\"start\":i=0}this.startPoints={point:this.transformPoint(t,i),box:a,transform:this.el.transform()},SVG.on(window,\"mousemove.drag\",(function(t){e.drag(t)})),SVG.on(window,\"touchmove.drag\",(function(t){e.drag(t)})),SVG.on(window,\"mouseup.drag\",(function(t){e.end(t)})),SVG.on(window,\"touchend.drag\",(function(t){e.end(t)})),this.el.fire(\"dragstart\",{event:t,p:this.startPoints.point,m:this.m,handler:this})}}},t.prototype.drag=function(t){var e=this.getBBox(),i=this.transformPoint(t),a=this.startPoints.box.x+i.x-this.startPoints.point.x,s=this.startPoints.box.y+i.y-this.startPoints.point.y,r=this.constraint,o=i.x-this.startPoints.point.x,n=i.y-this.startPoints.point.y;if(this.el.fire(\"dragmove\",{event:t,p:i,m:this.m,handler:this}),this.el.event().defaultPrevented)return i;if(\"function\"==typeof r){var l=r.call(this.el,a,s,this.m);\"boolean\"==typeof l&&(l={x:l,y:l}),!0===l.x?this.el.x(a):!1!==l.x&&this.el.x(l.x),!0===l.y?this.el.y(s):!1!==l.y&&this.el.y(l.y)}else\"object\"==typeof r&&(null!=r.minX&&a<r.minX?o=(a=r.minX)-this.startPoints.box.x:null!=r.maxX&&a>r.maxX-e.width&&(o=(a=r.maxX-e.width)-this.startPoints.box.x),null!=r.minY&&s<r.minY?n=(s=r.minY)-this.startPoints.box.y:null!=r.maxY&&s>r.maxY-e.height&&(n=(s=r.maxY-e.height)-this.startPoints.box.y),null!=r.snapToGrid&&(a-=a%r.snapToGrid,s-=s%r.snapToGrid,o-=o%r.snapToGrid,n-=n%r.snapToGrid),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:o,y:n},!0):this.el.move(a,s));return i},t.prototype.end=function(t){var e=this.drag(t);this.el.fire(\"dragend\",{event:t,p:e,m:this.m,handler:this}),SVG.off(window,\"mousemove.drag\"),SVG.off(window,\"touchmove.drag\"),SVG.off(window,\"mouseup.drag\"),SVG.off(window,\"touchend.drag\")},SVG.extend(SVG.Element,{draggable:function(e,i){\"function\"!=typeof e&&\"object\"!=typeof e||(i=e,e=!0);var a=this.remember(\"_draggable\")||new t(this);return(e=void 0===e||e)?a.init(i||{},e):(this.off(\"mousedown.drag\"),this.off(\"touchstart.drag\")),this}})}.call(void 0),function(){function t(t){this.el=t,t.remember(\"_selectHandler\",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1},this.pointsList={lt:[0,0],rt:[\"width\",0],rb:[\"width\",\"height\"],lb:[0,\"height\"],t:[\"width\",0],r:[\"width\",\"height\"],b:[\"width\",\"height\"],l:[0,\"height\"]},this.pointCoord=function(t,e,i){var a=\"string\"!=typeof t?t:e[t];return i?a/2:a},this.pointCoords=function(t,e){var i=this.pointsList[t];return{x:this.pointCoord(i[0],e,\"t\"===t||\"b\"===t),y:this.pointCoord(i[1],e,\"r\"===t||\"l\"===t)}}}t.prototype.init=function(t,e){var i=this.el.bbox();this.options={};var a=this.el.selectize.defaults.points;for(var s in this.el.selectize.defaults)this.options[s]=this.el.selectize.defaults[s],void 0!==e[s]&&(this.options[s]=e[s]);var r=[\"points\",\"pointsExclude\"];for(var s in r){var o=this.options[r[s]];\"string\"==typeof o?o=o.length>0?o.split(/\\s*,\\s*/i):[]:\"boolean\"==typeof o&&\"points\"===r[s]&&(o=o?a:[]),this.options[r[s]]=o}this.options.points=[a,this.options.points].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)>-1}))})),this.options.points=[this.options.points,this.options.pointsExclude].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)<0}))})),this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&-1!==[\"line\",\"polyline\",\"polygon\"].indexOf(this.el.type)?this.selectPoints(t):this.selectRect(t),this.observe(),this.cleanup()},t.prototype.selectPoints=function(t){return this.pointSelection.isSelected=t,this.pointSelection.set||(this.pointSelection.set=this.parent.set(),this.drawPoints()),this},t.prototype.getPointArray=function(){var t=this.el.bbox();return this.el.array().valueOf().map((function(e){return[e[0]-t.x,e[1]-t.y]}))},t.prototype.drawPoints=function(){for(var t=this,e=this.getPointArray(),i=0,a=e.length;i<a;++i){var s=function(e){return function(i){(i=i||window.event).preventDefault?i.preventDefault():i.returnValue=!1,i.stopPropagation();var a=i.pageX||i.touches[0].pageX,s=i.pageY||i.touches[0].pageY;t.el.fire(\"point\",{x:a,y:s,i:e,event:i})}}(i),r=this.drawPoint(e[i][0],e[i][1]).addClass(this.options.classPoints).addClass(this.options.classPoints+\"_point\").on(\"touchstart\",s).on(\"mousedown\",s);this.pointSelection.set.add(r)}},t.prototype.drawPoint=function(t,e){var i=this.options.pointType;switch(i){case\"circle\":return this.drawCircle(t,e);case\"rect\":return this.drawRect(t,e);default:if(\"function\"==typeof i)return i.call(this,t,e);throw new Error(\"Unknown \"+i+\" point type!\")}},t.prototype.drawCircle=function(t,e){return this.nested.circle(this.options.pointSize).center(t,e)},t.prototype.drawRect=function(t,e){return this.nested.rect(this.options.pointSize,this.options.pointSize).center(t,e)},t.prototype.updatePointSelection=function(){var t=this.getPointArray();this.pointSelection.set.each((function(e){this.cx()===t[e][0]&&this.cy()===t[e][1]||this.center(t[e][0],t[e][1])}))},t.prototype.updateRectSelection=function(){var t=this,e=this.el.bbox();if(this.rectSelection.set.get(0).attr({width:e.width,height:e.height}),this.options.points.length&&this.options.points.map((function(i,a){var s=t.pointCoords(i,e);t.rectSelection.set.get(a+1).center(s.x,s.y)})),this.options.rotationPoint){var i=this.rectSelection.set.length();this.rectSelection.set.get(i-1).center(e.width/2,20)}},t.prototype.selectRect=function(t){var e=this,i=this.el.bbox();function a(t){return function(i){(i=i||window.event).preventDefault?i.preventDefault():i.returnValue=!1,i.stopPropagation();var a=i.pageX||i.touches[0].pageX,s=i.pageY||i.touches[0].pageY;e.el.fire(t,{x:a,y:s,event:i})}}if(this.rectSelection.isSelected=t,this.rectSelection.set=this.rectSelection.set||this.parent.set(),this.rectSelection.set.get(0)||this.rectSelection.set.add(this.nested.rect(i.width,i.height).addClass(this.options.classRect)),this.options.points.length&&this.rectSelection.set.length()<2){this.options.points.map((function(t,s){var r=e.pointCoords(t,i),o=e.drawPoint(r.x,r.y).attr(\"class\",e.options.classPoints+\"_\"+t).on(\"mousedown\",a(t)).on(\"touchstart\",a(t));e.rectSelection.set.add(o)})),this.rectSelection.set.each((function(){this.addClass(e.options.classPoints)}))}if(this.options.rotationPoint&&(this.options.points&&!this.rectSelection.set.get(9)||!this.options.points&&!this.rectSelection.set.get(1))){var s=function(t){(t=t||window.event).preventDefault?t.preventDefault():t.returnValue=!1,t.stopPropagation();var i=t.pageX||t.touches[0].pageX,a=t.pageY||t.touches[0].pageY;e.el.fire(\"rot\",{x:i,y:a,event:t})},r=this.drawPoint(i.width/2,20).attr(\"class\",this.options.classPoints+\"_rot\").on(\"touchstart\",s).on(\"mousedown\",s);this.rectSelection.set.add(r)}},t.prototype.handler=function(){var t=this.el.bbox();this.nested.matrix(new SVG.Matrix(this.el).translate(t.x,t.y)),this.rectSelection.isSelected&&this.updateRectSelection(),this.pointSelection.isSelected&&this.updatePointSelection()},t.prototype.observe=function(){var t=this;if(MutationObserver)if(this.rectSelection.isSelected||this.pointSelection.isSelected)this.observerInst=this.observerInst||new MutationObserver((function(){t.handler()})),this.observerInst.observe(this.el.node,{attributes:!0});else try{this.observerInst.disconnect(),delete this.observerInst}catch(t){}else this.el.off(\"DOMAttrModified.select\"),(this.rectSelection.isSelected||this.pointSelection.isSelected)&&this.el.on(\"DOMAttrModified.select\",(function(){t.handler()}))},t.prototype.cleanup=function(){!this.rectSelection.isSelected&&this.rectSelection.set&&(this.rectSelection.set.each((function(){this.remove()})),this.rectSelection.set.clear(),delete this.rectSelection.set),!this.pointSelection.isSelected&&this.pointSelection.set&&(this.pointSelection.set.each((function(){this.remove()})),this.pointSelection.set.clear(),delete this.pointSelection.set),this.pointSelection.isSelected||this.rectSelection.isSelected||(this.nested.remove(),delete this.nested)},SVG.extend(SVG.Element,{selectize:function(e,i){return\"object\"==typeof e&&(i=e,e=!0),(this.remember(\"_selectHandler\")||new t(this)).init(void 0===e||e,i||{}),this}}),SVG.Element.prototype.selectize.defaults={points:[\"lt\",\"rt\",\"rb\",\"lb\",\"t\",\"r\",\"b\",\"l\"],pointsExclude:[],classRect:\"svg_select_boundingRect\",classPoints:\"svg_select_points\",pointSize:7,rotationPoint:!0,deepSelect:!1,pointType:\"circle\"}}(),function(){(function(){function t(t){t.remember(\"_resizeHandler\",this),this.el=t,this.parameters={},this.lastUpdateCall=null,this.p=t.doc().node.createSVGPoint()}t.prototype.transformPoint=function(t,e,i){return this.p.x=t-(this.offset.x-window.pageXOffset),this.p.y=e-(this.offset.y-window.pageYOffset),this.p.matrixTransform(i||this.m)},t.prototype._extractPosition=function(t){return{x:null!=t.clientX?t.clientX:t.touches[0].clientX,y:null!=t.clientY?t.clientY:t.touches[0].clientY}},t.prototype.init=function(t){var e=this;if(this.stop(),\"stop\"!==t){for(var i in this.options={},this.el.resize.defaults)this.options[i]=this.el.resize.defaults[i],void 0!==t[i]&&(this.options[i]=t[i]);this.el.on(\"lt.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"rt.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"rb.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"lb.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"t.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"r.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"b.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"l.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"rot.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"point.resize\",(function(t){e.resize(t||window.event)})),this.update()}},t.prototype.stop=function(){return this.el.off(\"lt.resize\"),this.el.off(\"rt.resize\"),this.el.off(\"rb.resize\"),this.el.off(\"lb.resize\"),this.el.off(\"t.resize\"),this.el.off(\"r.resize\"),this.el.off(\"b.resize\"),this.el.off(\"l.resize\"),this.el.off(\"rot.resize\"),this.el.off(\"point.resize\"),this},t.prototype.resize=function(t){var e=this;this.m=this.el.node.getScreenCTM().inverse(),this.offset={x:window.pageXOffset,y:window.pageYOffset};var i=this._extractPosition(t.detail.event);if(this.parameters={type:this.el.type,p:this.transformPoint(i.x,i.y),x:t.detail.x,y:t.detail.y,box:this.el.bbox(),rotation:this.el.transform().rotation},\"text\"===this.el.type&&(this.parameters.fontSize=this.el.attr()[\"font-size\"]),void 0!==t.detail.i){var a=this.el.array().valueOf();this.parameters.i=t.detail.i,this.parameters.pointCoords=[a[t.detail.i][0],a[t.detail.i][1]]}switch(t.type){case\"lt\":this.calc=function(t,e){var i=this.snapToGrid(t,e);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height-i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y+i[1]).size(this.parameters.box.width-i[0],this.parameters.box.height-i[1])}};break;case\"rt\":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height-i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).size(this.parameters.box.width+i[0],this.parameters.box.height-i[1])}};break;case\"rb\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height+i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+i[0],this.parameters.box.height+i[1])}};break;case\"lb\":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height+i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).size(this.parameters.box.width-i[0],this.parameters.box.height+i[1])}};break;case\"t\":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.height-i[1]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).height(this.parameters.box.height-i[1])}};break;case\"r\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+i[0])}};break;case\"b\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.height+i[1]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+i[1])}};break;case\"l\":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).width(this.parameters.box.width-i[0])}};break;case\"rot\":this.calc=function(t,e){var i=t+this.parameters.p.x,a=e+this.parameters.p.y,s=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),r=Math.atan2(a-this.parameters.box.y-this.parameters.box.height/2,i-this.parameters.box.x-this.parameters.box.width/2),o=this.parameters.rotation+180*(r-s)/Math.PI+this.options.snapToAngle/2;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(o-o%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case\"point\":this.calc=function(t,e){var i=this.snapToGrid(t,e,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),a=this.el.array().valueOf();a[this.parameters.i][0]=this.parameters.pointCoords[0]+i[0],a[this.parameters.i][1]=this.parameters.pointCoords[1]+i[1],this.el.plot(a)}}this.el.fire(\"resizestart\",{dx:this.parameters.x,dy:this.parameters.y,event:t}),SVG.on(window,\"touchmove.resize\",(function(t){e.update(t||window.event)})),SVG.on(window,\"touchend.resize\",(function(){e.done()})),SVG.on(window,\"mousemove.resize\",(function(t){e.update(t||window.event)})),SVG.on(window,\"mouseup.resize\",(function(){e.done()}))},t.prototype.update=function(t){if(t){var e=this._extractPosition(t),i=this.transformPoint(e.x,e.y),a=i.x-this.parameters.p.x,s=i.y-this.parameters.p.y;this.lastUpdateCall=[a,s],this.calc(a,s),this.el.fire(\"resizing\",{dx:a,dy:s,event:t})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},t.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,\"mousemove.resize\"),SVG.off(window,\"mouseup.resize\"),SVG.off(window,\"touchmove.resize\"),SVG.off(window,\"touchend.resize\"),this.el.fire(\"resizedone\")},t.prototype.snapToGrid=function(t,e,i,a){var s;return void 0!==a?s=[(i+t)%this.options.snapToGrid,(a+e)%this.options.snapToGrid]:(i=null==i?3:i,s=[(this.parameters.box.x+t+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+e+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),t<0&&(s[0]-=this.options.snapToGrid),e<0&&(s[1]-=this.options.snapToGrid),t-=Math.abs(s[0])<this.options.snapToGrid/2?s[0]:s[0]-(t<0?-this.options.snapToGrid:this.options.snapToGrid),e-=Math.abs(s[1])<this.options.snapToGrid/2?s[1]:s[1]-(e<0?-this.options.snapToGrid:this.options.snapToGrid),this.constraintToBox(t,e,i,a)},t.prototype.constraintToBox=function(t,e,i,a){var s,r,o=this.options.constraint||{};return void 0!==a?(s=i,r=a):(s=this.parameters.box.x+(1&i?0:this.parameters.box.width),r=this.parameters.box.y+(2&i?0:this.parameters.box.height)),void 0!==o.minX&&s+t<o.minX&&(t=o.minX-s),void 0!==o.maxX&&s+t>o.maxX&&(t=o.maxX-s),void 0!==o.minY&&r+e<o.minY&&(e=o.minY-r),void 0!==o.maxY&&r+e>o.maxY&&(e=o.maxY-r),[t,e]},t.prototype.checkAspectRatio=function(t,e){if(!this.options.saveAspectRatio)return t;var i=t.slice(),a=this.parameters.box.width/this.parameters.box.height,s=this.parameters.box.width+t[0],r=this.parameters.box.height-t[1],o=s/r;return o<a?(i[1]=s/a-this.parameters.box.height,e&&(i[1]=-i[1])):o>a&&(i[0]=this.parameters.box.width-r*a,e&&(i[0]=-i[0])),i},SVG.extend(SVG.Element,{resize:function(e){return(this.remember(\"_resizeHandler\")||new t(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}(),void 0===window.Apex&&(window.Apex={});var Ot=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"initModules\",value:function(){this.ctx.publicMethods=[\"updateOptions\",\"updateSeries\",\"appendData\",\"appendSeries\",\"toggleSeries\",\"showSeries\",\"hideSeries\",\"setLocale\",\"resetSeries\",\"zoomX\",\"toggleDataPointSelection\",\"dataURI\",\"exportToCSV\",\"addXaxisAnnotation\",\"addYaxisAnnotation\",\"addPointAnnotation\",\"clearAnnotations\",\"removeAnnotation\",\"paper\",\"destroy\"],this.ctx.eventList=[\"click\",\"mousedown\",\"mousemove\",\"mouseleave\",\"touchstart\",\"touchmove\",\"touchleave\",\"mouseup\",\"touchend\"],this.ctx.animations=new b(this.ctx),this.ctx.axes=new J(this.ctx),this.ctx.core=new Ht(this.ctx.el,this.ctx),this.ctx.config=new E({}),this.ctx.data=new W(this.ctx),this.ctx.grid=new j(this.ctx),this.ctx.graphics=new m(this.ctx),this.ctx.coreUtils=new y(this.ctx),this.ctx.crosshairs=new Q(this.ctx),this.ctx.events=new Z(this.ctx),this.ctx.exports=new G(this.ctx),this.ctx.localization=new $(this.ctx),this.ctx.options=new L,this.ctx.responsive=new K(this.ctx),this.ctx.series=new N(this.ctx),this.ctx.theme=new tt(this.ctx),this.ctx.formatters=new T(this.ctx),this.ctx.titleSubtitle=new et(this.ctx),this.ctx.legend=new lt(this.ctx),this.ctx.toolbar=new ht(this.ctx),this.ctx.tooltip=new bt(this.ctx),this.ctx.dimensions=new ot(this.ctx),this.ctx.updateHelpers=new Dt(this.ctx),this.ctx.zoomPanSelection=new ct(this.ctx),this.ctx.w.globals.tooltip=new bt(this.ctx)}}]),t}(),Nt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"clear\",value:function(t){var e=t.isUpdating;this.ctx.zoomPanSelection&&this.ctx.zoomPanSelection.destroy(),this.ctx.toolbar&&this.ctx.toolbar.destroy(),this.ctx.animations=null,this.ctx.axes=null,this.ctx.annotations=null,this.ctx.core=null,this.ctx.data=null,this.ctx.grid=null,this.ctx.series=null,this.ctx.responsive=null,this.ctx.theme=null,this.ctx.formatters=null,this.ctx.titleSubtitle=null,this.ctx.legend=null,this.ctx.dimensions=null,this.ctx.options=null,this.ctx.crosshairs=null,this.ctx.zoomPanSelection=null,this.ctx.updateHelpers=null,this.ctx.toolbar=null,this.ctx.localization=null,this.ctx.w.globals.tooltip=null,this.clearDomElements({isUpdating:e})}},{key:\"killSVG\",value:function(t){t.each((function(t,e){this.removeClass(\"*\"),this.off(),this.stop()}),!0),t.ungroup(),t.clear()}},{key:\"clearDomElements\",value:function(t){var e=this,i=t.isUpdating,a=this.w.globals.dom.Paper.node;a.parentNode&&a.parentNode.parentNode&&!i&&(a.parentNode.parentNode.style.minHeight=\"unset\");var s=this.w.globals.dom.baseEl;s&&this.ctx.eventList.forEach((function(t){s.removeEventListener(t,e.ctx.events.documentEvent)}));var r=this.w.globals.dom;if(null!==this.ctx.el)for(;this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild);this.killSVG(r.Paper),r.Paper.remove(),r.elWrap=null,r.elGraphical=null,r.elLegendWrap=null,r.elLegendForeign=null,r.baseEl=null,r.elGridRect=null,r.elGridRectMask=null,r.elGridRectMarkerMask=null,r.elForecastMask=null,r.elNonForecastMask=null,r.elDefs=null}}]),t}(),Wt=new WeakMap;var Bt=function(){function t(e,i){a(this,t),this.opts=i,this.ctx=this,this.w=new F(i).init(),this.el=e,this.w.globals.cuid=x.randomId(),this.w.globals.chartID=this.w.config.chart.id?x.escapeString(this.w.config.chart.id):this.w.globals.cuid,new Ot(this).initModules(),this.create=x.bind(this.create,this),this.windowResizeHandler=this._windowResizeHandler.bind(this),this.parentResizeHandler=this._parentResizeCallback.bind(this)}return r(t,[{key:\"render\",value:function(){var t=this;return new Promise((function(e,i){if(null!==t.el){void 0===Apex._chartInstances&&(Apex._chartInstances=[]),t.w.config.chart.id&&Apex._chartInstances.push({id:t.w.globals.chartID,group:t.w.config.chart.group,chart:t}),t.setLocale(t.w.config.chart.defaultLocale);var a=t.w.config.chart.events.beforeMount;if(\"function\"==typeof a&&a(t,t.w),t.events.fireEvent(\"beforeMount\",[t,t.w]),window.addEventListener(\"resize\",t.windowResizeHandler),function(t,e){var i=!1;if(t.nodeType!==Node.DOCUMENT_FRAGMENT_NODE){var a=t.getBoundingClientRect();\"none\"!==t.style.display&&0!==a.width||(i=!0)}var s=new ResizeObserver((function(a){i&&e.call(t,a),i=!0}));t.nodeType===Node.DOCUMENT_FRAGMENT_NODE?Array.from(t.children).forEach((function(t){return s.observe(t)})):s.observe(t),Wt.set(e,s)}(t.el.parentNode,t.parentResizeHandler),!t.css){var s=t.el.getRootNode&&t.el.getRootNode(),r=x.is(\"ShadowRoot\",s),o=t.el.ownerDocument,n=o.getElementById(\"apexcharts-css\");!r&&n||(t.css=document.createElement(\"style\"),t.css.id=\"apexcharts-css\",t.css.textContent='@keyframes opaque {\\n  0% {\\n      opacity: 0\\n  }\\n\\n  to {\\n      opacity: 1\\n  }\\n}\\n\\n@keyframes resizeanim {\\n  0%,to {\\n      opacity: 0\\n  }\\n}\\n\\n.apexcharts-canvas {\\n  position: relative;\\n  user-select: none\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar {\\n  -webkit-appearance: none;\\n  width: 6px\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\\n  border-radius: 4px;\\n  background-color: rgba(0,0,0,.5);\\n  box-shadow: 0 0 1px rgba(255,255,255,.5);\\n  -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5)\\n}\\n\\n.apexcharts-inner {\\n  position: relative\\n}\\n\\n.apexcharts-text tspan {\\n  font-family: inherit\\n}\\n\\n.legend-mouseover-inactive {\\n  transition: .15s ease all;\\n  opacity: .2\\n}\\n\\n.apexcharts-legend-text {\\n  padding-left: 15px;\\n  margin-left: -15px;\\n}\\n\\n.apexcharts-series-collapsed {\\n  opacity: 0\\n}\\n\\n.apexcharts-tooltip {\\n  border-radius: 5px;\\n  box-shadow: 2px 2px 6px -4px #999;\\n  cursor: default;\\n  font-size: 14px;\\n  left: 62px;\\n  opacity: 0;\\n  pointer-events: none;\\n  position: absolute;\\n  top: 20px;\\n  display: flex;\\n  flex-direction: column;\\n  overflow: hidden;\\n  white-space: nowrap;\\n  z-index: 12;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-tooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light {\\n  border: 1px solid #e3e3e3;\\n  background: rgba(255,255,255,.96)\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-dark {\\n  color: #fff;\\n  background: rgba(30,30,30,.8)\\n}\\n\\n.apexcharts-tooltip * {\\n  font-family: inherit\\n}\\n\\n.apexcharts-tooltip-title {\\n  padding: 6px;\\n  font-size: 15px;\\n  margin-bottom: 4px\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {\\n  background: #eceff1;\\n  border-bottom: 1px solid #ddd\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\\n  background: rgba(0,0,0,.7);\\n  border-bottom: 1px solid #333\\n}\\n\\n.apexcharts-tooltip-text-goals-value,.apexcharts-tooltip-text-y-value,.apexcharts-tooltip-text-z-value {\\n  display: inline-block;\\n  margin-left: 5px;\\n  font-weight: 600\\n}\\n\\n.apexcharts-tooltip-text-goals-label:empty,.apexcharts-tooltip-text-goals-value:empty,.apexcharts-tooltip-text-y-label:empty,.apexcharts-tooltip-text-y-value:empty,.apexcharts-tooltip-text-z-value:empty,.apexcharts-tooltip-title:empty {\\n  display: none\\n}\\n\\n.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-tooltip-goals-group,.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\\n  display: flex\\n}\\n\\n.apexcharts-tooltip-text-goals-label:not(:empty),.apexcharts-tooltip-text-goals-value:not(:empty) {\\n  margin-top: -6px\\n}\\n\\n.apexcharts-tooltip-marker {\\n  width: 12px;\\n  height: 12px;\\n  position: relative;\\n  top: 0;\\n  margin-right: 10px;\\n  border-radius: 50%\\n}\\n\\n.apexcharts-tooltip-series-group {\\n  padding: 0 10px;\\n  display: none;\\n  text-align: left;\\n  justify-content: left;\\n  align-items: center\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\\n  opacity: 1\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active,.apexcharts-tooltip-series-group:last-child {\\n  padding-bottom: 4px\\n}\\n\\n.apexcharts-tooltip-series-group-hidden {\\n  opacity: 0;\\n  height: 0;\\n  line-height: 0;\\n  padding: 0!important\\n}\\n\\n.apexcharts-tooltip-y-group {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-custom-tooltip,.apexcharts-tooltip-box {\\n  padding: 4px 8px\\n}\\n\\n.apexcharts-tooltip-boxPlot {\\n  display: flex;\\n  flex-direction: column-reverse\\n}\\n\\n.apexcharts-tooltip-box>div {\\n  margin: 4px 0\\n}\\n\\n.apexcharts-tooltip-box span.value {\\n  font-weight: 700\\n}\\n\\n.apexcharts-tooltip-rangebar {\\n  padding: 5px 8px\\n}\\n\\n.apexcharts-tooltip-rangebar .category {\\n  font-weight: 600;\\n  color: #777\\n}\\n\\n.apexcharts-tooltip-rangebar .series-name {\\n  font-weight: 700;\\n  display: block;\\n  margin-bottom: 5px\\n}\\n\\n.apexcharts-xaxistooltip,.apexcharts-yaxistooltip {\\n  opacity: 0;\\n  pointer-events: none;\\n  color: #373d3f;\\n  font-size: 13px;\\n  text-align: center;\\n  border-radius: 2px;\\n  position: absolute;\\n  z-index: 10;\\n  background: #eceff1;\\n  border: 1px solid #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip {\\n  padding: 9px 10px;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-theme-dark {\\n  background: rgba(0,0,0,.7);\\n  border: 1px solid rgba(0,0,0,.5);\\n  color: #fff\\n}\\n\\n.apexcharts-xaxistooltip:after,.apexcharts-xaxistooltip:before {\\n  left: 50%;\\n  border: solid transparent;\\n  content: \" \";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n.apexcharts-xaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-left: -6px\\n}\\n\\n.apexcharts-xaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 7px;\\n  margin-left: -7px\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after,.apexcharts-xaxistooltip-bottom:before {\\n  bottom: 100%\\n}\\n\\n.apexcharts-xaxistooltip-top:after,.apexcharts-xaxistooltip-top:before {\\n  top: 100%\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after {\\n  border-bottom-color: #eceff1\\n}\\n\\n.apexcharts-xaxistooltip-bottom:before {\\n  border-bottom-color: #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {\\n  border-bottom-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-xaxistooltip-top:after {\\n  border-top-color: #eceff1\\n}\\n\\n.apexcharts-xaxistooltip-top:before {\\n  border-top-color: #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {\\n  border-top-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-yaxistooltip {\\n  padding: 4px 10px\\n}\\n\\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\\n  background: rgba(0,0,0,.7);\\n  border: 1px solid rgba(0,0,0,.5);\\n  color: #fff\\n}\\n\\n.apexcharts-yaxistooltip:after,.apexcharts-yaxistooltip:before {\\n  top: 50%;\\n  border: solid transparent;\\n  content: \" \";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n.apexcharts-yaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-top: -6px\\n}\\n\\n.apexcharts-yaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 7px;\\n  margin-top: -7px\\n}\\n\\n.apexcharts-yaxistooltip-left:after,.apexcharts-yaxistooltip-left:before {\\n  left: 100%\\n}\\n\\n.apexcharts-yaxistooltip-right:after,.apexcharts-yaxistooltip-right:before {\\n  right: 100%\\n}\\n\\n.apexcharts-yaxistooltip-left:after {\\n  border-left-color: #eceff1\\n}\\n\\n.apexcharts-yaxistooltip-left:before {\\n  border-left-color: #90a4ae\\n}\\n\\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {\\n  border-left-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-yaxistooltip-right:after {\\n  border-right-color: #eceff1\\n}\\n\\n.apexcharts-yaxistooltip-right:before {\\n  border-right-color: #90a4ae\\n}\\n\\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {\\n  border-right-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-yaxistooltip.apexcharts-active {\\n  opacity: 1\\n}\\n\\n.apexcharts-yaxistooltip-hidden {\\n  display: none\\n}\\n\\n.apexcharts-xcrosshairs,.apexcharts-ycrosshairs {\\n  pointer-events: none;\\n  opacity: 0;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xcrosshairs.apexcharts-active,.apexcharts-ycrosshairs.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-ycrosshairs-hidden {\\n  opacity: 0\\n}\\n\\n.apexcharts-selection-rect {\\n  cursor: move\\n}\\n\\n.svg_select_boundingRect,.svg_select_points_rot {\\n  pointer-events: none;\\n  opacity: 0;\\n  visibility: hidden\\n}\\n\\n.apexcharts-selection-rect+g .svg_select_boundingRect,.apexcharts-selection-rect+g .svg_select_points_rot {\\n  opacity: 0;\\n  visibility: hidden\\n}\\n\\n.apexcharts-selection-rect+g .svg_select_points_l,.apexcharts-selection-rect+g .svg_select_points_r {\\n  cursor: ew-resize;\\n  opacity: 1;\\n  visibility: visible\\n}\\n\\n.svg_select_points {\\n  fill: #efefef;\\n  stroke: #333;\\n  rx: 2\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-zoom {\\n  cursor: crosshair\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\\n  cursor: move\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-pan-icon,.apexcharts-reset-icon,.apexcharts-selection-icon,.apexcharts-toolbar-custom-icon,.apexcharts-zoom-icon,.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {\\n  cursor: pointer;\\n  width: 20px;\\n  height: 20px;\\n  line-height: 24px;\\n  color: #6e8192;\\n  text-align: center\\n}\\n\\n.apexcharts-menu-icon svg,.apexcharts-reset-icon svg,.apexcharts-zoom-icon svg,.apexcharts-zoomin-icon svg,.apexcharts-zoomout-icon svg {\\n  fill: #6e8192\\n}\\n\\n.apexcharts-selection-icon svg {\\n  fill: #444;\\n  transform: scale(.76)\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-icon svg,.apexcharts-theme-dark .apexcharts-pan-icon svg,.apexcharts-theme-dark .apexcharts-reset-icon svg,.apexcharts-theme-dark .apexcharts-selection-icon svg,.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg,.apexcharts-theme-dark .apexcharts-zoom-icon svg,.apexcharts-theme-dark .apexcharts-zoomin-icon svg,.apexcharts-theme-dark .apexcharts-zoomout-icon svg {\\n  fill: #f3f4f5\\n}\\n\\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg {\\n  fill: #008ffb\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-icon:hover svg,.apexcharts-theme-light .apexcharts-reset-icon:hover svg,.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg {\\n  fill: #333\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-selection-icon {\\n  position: relative\\n}\\n\\n.apexcharts-reset-icon {\\n  margin-left: 5px\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-reset-icon,.apexcharts-zoom-icon {\\n  transform: scale(.85)\\n}\\n\\n.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {\\n  transform: scale(.7)\\n}\\n\\n.apexcharts-zoomout-icon {\\n  margin-right: 3px\\n}\\n\\n.apexcharts-pan-icon {\\n  transform: scale(.62);\\n  position: relative;\\n  left: 1px;\\n  top: 0\\n}\\n\\n.apexcharts-pan-icon svg {\\n  fill: #fff;\\n  stroke: #6e8192;\\n  stroke-width: 2\\n}\\n\\n.apexcharts-pan-icon.apexcharts-selected svg {\\n  stroke: #008ffb\\n}\\n\\n.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {\\n  stroke: #333\\n}\\n\\n.apexcharts-toolbar {\\n  position: absolute;\\n  z-index: 11;\\n  max-width: 176px;\\n  text-align: right;\\n  border-radius: 3px;\\n  padding: 0 6px 2px;\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center\\n}\\n\\n.apexcharts-menu {\\n  background: #fff;\\n  position: absolute;\\n  top: 100%;\\n  border: 1px solid #ddd;\\n  border-radius: 3px;\\n  padding: 3px;\\n  right: 10px;\\n  opacity: 0;\\n  min-width: 110px;\\n  transition: .15s ease all;\\n  pointer-events: none\\n}\\n\\n.apexcharts-menu.apexcharts-menu-open {\\n  opacity: 1;\\n  pointer-events: all;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-menu-item {\\n  padding: 6px 7px;\\n  font-size: 12px;\\n  cursor: pointer\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-item:hover {\\n  background: #eee\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu {\\n  background: rgba(0,0,0,.7);\\n  color: #fff\\n}\\n\\n@media screen and (min-width:768px) {\\n  .apexcharts-canvas:hover .apexcharts-toolbar {\\n      opacity: 1\\n  }\\n}\\n\\n.apexcharts-canvas .apexcharts-element-hidden,.apexcharts-datalabel.apexcharts-element-hidden,.apexcharts-hide .apexcharts-series-points {\\n  opacity: 0\\n}\\n\\n.apexcharts-hidden-element-shown {\\n  opacity: 1;\\n  transition: 0.25s ease all;\\n}\\n.apexcharts-datalabel,.apexcharts-datalabel-label,.apexcharts-datalabel-value,.apexcharts-datalabels,.apexcharts-pie-label {\\n  cursor: default;\\n  pointer-events: none\\n}\\n\\n.apexcharts-pie-label-delay {\\n  opacity: 0;\\n  animation-name: opaque;\\n  animation-duration: .3s;\\n  animation-fill-mode: forwards;\\n  animation-timing-function: ease\\n}\\n\\n.apexcharts-annotation-rect,.apexcharts-area-series .apexcharts-area,.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-gridline,.apexcharts-line,.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-point-annotation-label,.apexcharts-radar-series path,.apexcharts-radar-series polygon,.apexcharts-toolbar svg,.apexcharts-tooltip .apexcharts-marker,.apexcharts-xaxis-annotation-label,.apexcharts-yaxis-annotation-label,.apexcharts-zoom-rect {\\n  pointer-events: none\\n}\\n\\n.apexcharts-marker {\\n  transition: .15s ease all\\n}\\n\\n.resize-triggers {\\n  animation: 1ms resizeanim;\\n  visibility: hidden;\\n  opacity: 0;\\n  height: 100%;\\n  width: 100%;\\n  overflow: hidden\\n}\\n\\n.contract-trigger:before,.resize-triggers,.resize-triggers>div {\\n  content: \" \";\\n  display: block;\\n  position: absolute;\\n  top: 0;\\n  left: 0\\n}\\n\\n.resize-triggers>div {\\n  height: 100%;\\n  width: 100%;\\n  background: #eee;\\n  overflow: auto\\n}\\n\\n.contract-trigger:before {\\n  overflow: hidden;\\n  width: 200%;\\n  height: 200%\\n}\\n',r?s.prepend(t.css):o.head.appendChild(t.css))}var l=t.create(t.w.config.series,{});if(!l)return e(t);t.mount(l).then((function(){\"function\"==typeof t.w.config.chart.events.mounted&&t.w.config.chart.events.mounted(t,t.w),t.events.fireEvent(\"mounted\",[t,t.w]),e(l)})).catch((function(t){i(t)}))}else i(new Error(\"Element not found\"))}))}},{key:\"create\",value:function(t,e){var i=this.w;new Ot(this).initModules();var a=this.w.globals;(a.noData=!1,a.animationEnded=!1,this.responsive.checkResponsiveConfig(e),i.config.xaxis.convertedCatToNumeric)&&new z(i.config).convertCatToNumericXaxis(i.config,this.ctx);if(null===this.el)return a.animationEnded=!0,null;if(this.core.setupElements(),\"treemap\"===i.config.chart.type&&(i.config.grid.show=!1,i.config.yaxis[0].show=!1),0===a.svgWidth)return a.animationEnded=!0,null;var s=y.checkComboSeries(t);a.comboCharts=s.comboCharts,a.comboBarCount=s.comboBarCount;var r=t.every((function(t){return t.data&&0===t.data.length}));(0===t.length||r)&&this.series.handleNoData(),this.events.setupEventHandlers(),this.data.parseData(t),this.theme.init(),new H(this).setGlobalMarkerSize(),this.formatters.setLabelFormatters(),this.titleSubtitle.draw(),a.noData&&a.collapsedSeries.length!==a.series.length&&!i.config.legend.showForSingleSeries||this.legend.init(),this.series.hasAllSeriesEqualX(),a.axisCharts&&(this.core.coreCalculations(),\"category\"!==i.config.xaxis.type&&this.formatters.setLabelFormatters(),this.ctx.toolbar.minX=i.globals.minX,this.ctx.toolbar.maxX=i.globals.maxX),this.formatters.heatmapLabelFormatters(),new y(this).getLargestMarkerSize(),this.dimensions.plotCoords();var o=this.core.xySettings();this.grid.createGridMask();var n=this.core.plotChartType(t,o),l=new O(this);return l.bringForward(),i.config.dataLabels.background.enabled&&l.dataLabelsBackground(),this.core.shiftGraphPosition(),{elGraph:n,xyRatios:o,dimensions:{plot:{left:i.globals.translateX,top:i.globals.translateY,width:i.globals.gridWidth,height:i.globals.gridHeight}}}}},{key:\"mount\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=this,a=i.w;return new Promise((function(s,r){if(null===i.el)return r(new Error(\"Not enough data to display or target element not found\"));(null===e||a.globals.allSeriesCollapsed)&&i.series.handleNoData(),i.grid=new j(i);var o=i.grid.drawGrid();if(i.annotations=new P(i),i.annotations.drawImageAnnos(),i.annotations.drawTextAnnos(),\"back\"===a.config.grid.position&&o&&a.globals.dom.elGraphical.add(o.el),Array.isArray(e.elGraph))for(var n=0;n<e.elGraph.length;n++)a.globals.dom.elGraphical.add(e.elGraph[n]);else a.globals.dom.elGraphical.add(e.elGraph);\"front\"===a.config.grid.position&&o&&a.globals.dom.elGraphical.add(o.el),o&&o.elGridBorders&&o.elGridBorders.node&&a.globals.dom.elGraphical.add(o.elGridBorders),\"front\"===a.config.xaxis.crosshairs.position&&i.crosshairs.drawXCrosshairs(),\"front\"===a.config.yaxis[0].crosshairs.position&&i.crosshairs.drawYCrosshairs(),\"treemap\"!==a.config.chart.type&&i.axes.drawAxis(a.config.chart.type,o);var l=new V(t.ctx,o),h=new q(t.ctx,o);if(null!==o&&(l.xAxisLabelCorrections(o.xAxisTickWidth),h.setYAxisTextAlignments(),a.config.yaxis.map((function(t,e){-1===a.globals.ignoreYAxisIndexes.indexOf(e)&&h.yAxisTitleRotate(e,t.opposite)}))),i.annotations.drawAxesAnnotations(),!a.globals.noData){if(a.config.tooltip.enabled&&!a.globals.noData&&i.w.globals.tooltip.drawTooltip(e.xyRatios),a.globals.axisCharts&&(a.globals.isXNumeric||a.config.xaxis.convertedCatToNumeric||a.globals.isRangeBar))(a.config.chart.zoom.enabled||a.config.chart.selection&&a.config.chart.selection.enabled||a.config.chart.pan&&a.config.chart.pan.enabled)&&i.zoomPanSelection.init({xyRatios:e.xyRatios});else{var c=a.config.chart.toolbar.tools;[\"zoom\",\"zoomin\",\"zoomout\",\"selection\",\"pan\",\"reset\"].forEach((function(t){c[t]=!1}))}a.config.chart.toolbar.show&&!a.globals.allSeriesCollapsed&&i.toolbar.createToolbar()}a.globals.memory.methodsToExec.length>0&&a.globals.memory.methodsToExec.forEach((function(t){t.method(t.params,!1,t.context)})),a.globals.axisCharts||a.globals.noData||i.core.resizeNonAxisCharts(),s(i)}))}},{key:\"destroy\",value:function(){var t,e;window.removeEventListener(\"resize\",this.windowResizeHandler),this.el.parentNode,t=this.parentResizeHandler,(e=Wt.get(t))&&(e.disconnect(),Wt.delete(t));var i=this.w.config.chart.id;i&&Apex._chartInstances.forEach((function(t,e){t.id===x.escapeString(i)&&Apex._chartInstances.splice(e,1)})),new Nt(this.ctx).clear({isUpdating:!1})}},{key:\"updateOptions\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=this.w;return o.globals.selection=void 0,t.series&&(this.series.resetSeries(!1,!0,!1),t.series.length&&t.series[0].data&&(t.series=t.series.map((function(t,i){return e.updateHelpers._extendSeries(t,i)}))),this.updateHelpers.revertDefaultAxisMinMax()),t.xaxis&&(t=this.updateHelpers.forceXAxisUpdate(t)),t.yaxis&&(t=this.updateHelpers.forceYAxisUpdate(t)),o.globals.collapsedSeriesIndices.length>0&&this.series.clearPreviousPaths(),t.theme&&(t=this.theme.updateThemeOptions(t)),this.updateHelpers._updateOptions(t,i,a,s,r)}},{key:\"updateSeries\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(t,e,i)}},{key:\"appendSeries\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=this.w.config.series.slice();return a.push(t),this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(a,e,i)}},{key:\"appendData\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var a=i.w.config.series.slice(),s=0;s<a.length;s++)if(null!==t[s]&&void 0!==t[s])for(var r=0;r<t[s].data.length;r++)a[s].data.push(t[s].data[r]);return i.w.config.series=a,e&&(i.w.globals.initialSeries=x.clone(i.w.config.series)),this.update()}},{key:\"update\",value:function(t){var e=this;return new Promise((function(i,a){new Nt(e.ctx).clear({isUpdating:!0});var s=e.create(e.w.config.series,t);if(!s)return i(e);e.mount(s).then((function(){\"function\"==typeof e.w.config.chart.events.updated&&e.w.config.chart.events.updated(e,e.w),e.events.fireEvent(\"updated\",[e,e.w]),e.w.globals.isDirty=!0,i(e)})).catch((function(t){a(t)}))}))}},{key:\"getSyncedCharts\",value:function(){var t=this.getGroupedCharts(),e=[this];return t.length&&(e=[],t.forEach((function(t){e.push(t)}))),e}},{key:\"getGroupedCharts\",value:function(){var t=this;return Apex._chartInstances.filter((function(t){if(t.group)return!0})).map((function(e){return t.w.config.chart.group===e.group?e.chart:t}))}},{key:\"toggleSeries\",value:function(t){return this.series.toggleSeries(t)}},{key:\"highlightSeriesOnLegendHover\",value:function(t,e){return this.series.toggleSeriesOnHover(t,e)}},{key:\"showSeries\",value:function(t){this.series.showSeries(t)}},{key:\"hideSeries\",value:function(t){this.series.hideSeries(t)}},{key:\"resetSeries\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.series.resetSeries(t,e)}},{key:\"addEventListener\",value:function(t,e){this.events.addEventListener(t,e)}},{key:\"removeEventListener\",value:function(t,e){this.events.removeEventListener(t,e)}},{key:\"addXaxisAnnotation\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addXaxisAnnotationExternal(t,e,a)}},{key:\"addYaxisAnnotation\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addYaxisAnnotationExternal(t,e,a)}},{key:\"addPointAnnotation\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addPointAnnotationExternal(t,e,a)}},{key:\"clearAnnotations\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,e=this;t&&(e=t),e.annotations.clearAnnotations(e)}},{key:\"removeAnnotation\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,i=this;e&&(i=e),i.annotations.removeAnnotation(i,t)}},{key:\"getChartArea\",value:function(){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-inner\")}},{key:\"getSeriesTotalXRange\",value:function(t,e){return this.coreUtils.getSeriesTotalsXRange(t,e)}},{key:\"getHighestValueInSeries\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new U(this.ctx).getMinYMaxY(t).highestY}},{key:\"getLowestValueInSeries\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new U(this.ctx).getMinYMaxY(t).lowestY}},{key:\"getSeriesTotal\",value:function(){return this.w.globals.seriesTotals}},{key:\"toggleDataPointSelection\",value:function(t,e){return this.updateHelpers.toggleDataPointSelection(t,e)}},{key:\"zoomX\",value:function(t,e){this.ctx.toolbar.zoomUpdateOptions(t,e)}},{key:\"setLocale\",value:function(t){this.localization.setCurrentLocaleValues(t)}},{key:\"dataURI\",value:function(t){return new G(this.ctx).dataURI(t)}},{key:\"exportToCSV\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new G(this.ctx).exportToCSV(t)}},{key:\"paper\",value:function(){return this.w.globals.dom.Paper}},{key:\"_parentResizeCallback\",value:function(){this.w.globals.animationEnded&&this.w.config.chart.redrawOnParentResize&&this._windowResize()}},{key:\"_windowResize\",value:function(){var t=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout((function(){t.w.globals.resized=!0,t.w.globals.dataChanged=!1,t.ctx.update()}),150)}},{key:\"_windowResizeHandler\",value:function(){var t=this.w.config.chart.redrawOnWindowResize;\"function\"==typeof t&&(t=t()),t&&this._windowResize()}}],[{key:\"getChartByID\",value:function(t){var e=x.escapeString(t),i=Apex._chartInstances.filter((function(t){return t.id===e}))[0];return i&&i.chart}},{key:\"initOnLoad\",value:function(){for(var e=document.querySelectorAll(\"[data-apexcharts]\"),i=0;i<e.length;i++){new t(e[i],JSON.parse(e[i].getAttribute(\"data-options\"))).render()}}},{key:\"exec\",value:function(t,e){var i=this.getChartByID(t);if(i){i.w.globals.isExecCalled=!0;var a=null;if(-1!==i.publicMethods.indexOf(e)){for(var s=arguments.length,r=new Array(s>2?s-2:0),o=2;o<s;o++)r[o-2]=arguments[o];a=i[e].apply(i,r)}return a}}},{key:\"merge\",value:function(t,e){return x.extend(t,e)}}]),t}();module.exports=Bt;\n"
  },
  {
    "path": "public/assets/apexcharts/apexcharts.css",
    "content": "@keyframes opaque {\n  0% {\n      opacity: 0\n  }\n\n  to {\n      opacity: 1\n  }\n}\n\n@keyframes resizeanim {\n  0%,to {\n      opacity: 0\n  }\n}\n\n.apexcharts-canvas {\n  position: relative;\n  user-select: none\n}\n\n.apexcharts-canvas ::-webkit-scrollbar {\n  -webkit-appearance: none;\n  width: 6px\n}\n\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n  border-radius: 4px;\n  background-color: rgba(0,0,0,.5);\n  box-shadow: 0 0 1px rgba(255,255,255,.5);\n  -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5)\n}\n\n.apexcharts-inner {\n  position: relative\n}\n\n.apexcharts-text tspan {\n  font-family: inherit\n}\n\n.legend-mouseover-inactive {\n  transition: .15s ease all;\n  opacity: .2\n}\n\n.apexcharts-legend-text {\n  padding-left: 15px;\n  margin-left: -15px;\n}\n\n.apexcharts-series-collapsed {\n  opacity: 0\n}\n\n.apexcharts-tooltip {\n  border-radius: 5px;\n  box-shadow: 2px 2px 6px -4px #999;\n  cursor: default;\n  font-size: 14px;\n  left: 62px;\n  opacity: 0;\n  pointer-events: none;\n  position: absolute;\n  top: 20px;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  white-space: nowrap;\n  z-index: 12;\n  transition: .15s ease all\n}\n\n.apexcharts-tooltip.apexcharts-active {\n  opacity: 1;\n  transition: .15s ease all\n}\n\n.apexcharts-tooltip.apexcharts-theme-light {\n  border: 1px solid #e3e3e3;\n  background: rgba(255,255,255,.96)\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark {\n  color: #fff;\n  background: rgba(30,30,30,.8)\n}\n\n.apexcharts-tooltip * {\n  font-family: inherit\n}\n\n.apexcharts-tooltip-title {\n  padding: 6px;\n  font-size: 15px;\n  margin-bottom: 4px\n}\n\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {\n  background: #eceff1;\n  border-bottom: 1px solid #ddd\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\n  background: rgba(0,0,0,.7);\n  border-bottom: 1px solid #333\n}\n\n.apexcharts-tooltip-text-goals-value,.apexcharts-tooltip-text-y-value,.apexcharts-tooltip-text-z-value {\n  display: inline-block;\n  margin-left: 5px;\n  font-weight: 600\n}\n\n.apexcharts-tooltip-text-goals-label:empty,.apexcharts-tooltip-text-goals-value:empty,.apexcharts-tooltip-text-y-label:empty,.apexcharts-tooltip-text-y-value:empty,.apexcharts-tooltip-text-z-value:empty,.apexcharts-tooltip-title:empty {\n  display: none\n}\n\n.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\n  padding: 6px 0 5px\n}\n\n.apexcharts-tooltip-goals-group,.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\n  display: flex\n}\n\n.apexcharts-tooltip-text-goals-label:not(:empty),.apexcharts-tooltip-text-goals-value:not(:empty) {\n  margin-top: -6px\n}\n\n.apexcharts-tooltip-marker {\n  width: 12px;\n  height: 12px;\n  position: relative;\n  top: 0;\n  margin-right: 10px;\n  border-radius: 50%\n}\n\n.apexcharts-tooltip-series-group {\n  padding: 0 10px;\n  display: none;\n  text-align: left;\n  justify-content: left;\n  align-items: center\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\n  opacity: 1\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active,.apexcharts-tooltip-series-group:last-child {\n  padding-bottom: 4px\n}\n\n.apexcharts-tooltip-series-group-hidden {\n  opacity: 0;\n  height: 0;\n  line-height: 0;\n  padding: 0!important\n}\n\n.apexcharts-tooltip-y-group {\n  padding: 6px 0 5px\n}\n\n.apexcharts-custom-tooltip,.apexcharts-tooltip-box {\n  padding: 4px 8px\n}\n\n.apexcharts-tooltip-boxPlot {\n  display: flex;\n  flex-direction: column-reverse\n}\n\n.apexcharts-tooltip-box>div {\n  margin: 4px 0\n}\n\n.apexcharts-tooltip-box span.value {\n  font-weight: 700\n}\n\n.apexcharts-tooltip-rangebar {\n  padding: 5px 8px\n}\n\n.apexcharts-tooltip-rangebar .category {\n  font-weight: 600;\n  color: #777\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n  font-weight: 700;\n  display: block;\n  margin-bottom: 5px\n}\n\n.apexcharts-xaxistooltip,.apexcharts-yaxistooltip {\n  opacity: 0;\n  pointer-events: none;\n  color: #373d3f;\n  font-size: 13px;\n  text-align: center;\n  border-radius: 2px;\n  position: absolute;\n  z-index: 10;\n  background: #eceff1;\n  border: 1px solid #90a4ae\n}\n\n.apexcharts-xaxistooltip {\n  padding: 9px 10px;\n  transition: .15s ease all\n}\n\n.apexcharts-xaxistooltip.apexcharts-theme-dark {\n  background: rgba(0,0,0,.7);\n  border: 1px solid rgba(0,0,0,.5);\n  color: #fff\n}\n\n.apexcharts-xaxistooltip:after,.apexcharts-xaxistooltip:before {\n  left: 50%;\n  border: solid transparent;\n  content: \" \";\n  height: 0;\n  width: 0;\n  position: absolute;\n  pointer-events: none\n}\n\n.apexcharts-xaxistooltip:after {\n  border-color: transparent;\n  border-width: 6px;\n  margin-left: -6px\n}\n\n.apexcharts-xaxistooltip:before {\n  border-color: transparent;\n  border-width: 7px;\n  margin-left: -7px\n}\n\n.apexcharts-xaxistooltip-bottom:after,.apexcharts-xaxistooltip-bottom:before {\n  bottom: 100%\n}\n\n.apexcharts-xaxistooltip-top:after,.apexcharts-xaxistooltip-top:before {\n  top: 100%\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n  border-bottom-color: #eceff1\n}\n\n.apexcharts-xaxistooltip-bottom:before {\n  border-bottom-color: #90a4ae\n}\n\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {\n  border-bottom-color: rgba(0,0,0,.5)\n}\n\n.apexcharts-xaxistooltip-top:after {\n  border-top-color: #eceff1\n}\n\n.apexcharts-xaxistooltip-top:before {\n  border-top-color: #90a4ae\n}\n\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {\n  border-top-color: rgba(0,0,0,.5)\n}\n\n.apexcharts-xaxistooltip.apexcharts-active {\n  opacity: 1;\n  transition: .15s ease all\n}\n\n.apexcharts-yaxistooltip {\n  padding: 4px 10px\n}\n\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\n  background: rgba(0,0,0,.7);\n  border: 1px solid rgba(0,0,0,.5);\n  color: #fff\n}\n\n.apexcharts-yaxistooltip:after,.apexcharts-yaxistooltip:before {\n  top: 50%;\n  border: solid transparent;\n  content: \" \";\n  height: 0;\n  width: 0;\n  position: absolute;\n  pointer-events: none\n}\n\n.apexcharts-yaxistooltip:after {\n  border-color: transparent;\n  border-width: 6px;\n  margin-top: -6px\n}\n\n.apexcharts-yaxistooltip:before {\n  border-color: transparent;\n  border-width: 7px;\n  margin-top: -7px\n}\n\n.apexcharts-yaxistooltip-left:after,.apexcharts-yaxistooltip-left:before {\n  left: 100%\n}\n\n.apexcharts-yaxistooltip-right:after,.apexcharts-yaxistooltip-right:before {\n  right: 100%\n}\n\n.apexcharts-yaxistooltip-left:after {\n  border-left-color: #eceff1\n}\n\n.apexcharts-yaxistooltip-left:before {\n  border-left-color: #90a4ae\n}\n\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {\n  border-left-color: rgba(0,0,0,.5)\n}\n\n.apexcharts-yaxistooltip-right:after {\n  border-right-color: #eceff1\n}\n\n.apexcharts-yaxistooltip-right:before {\n  border-right-color: #90a4ae\n}\n\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {\n  border-right-color: rgba(0,0,0,.5)\n}\n\n.apexcharts-yaxistooltip.apexcharts-active {\n  opacity: 1\n}\n\n.apexcharts-yaxistooltip-hidden {\n  display: none\n}\n\n.apexcharts-xcrosshairs,.apexcharts-ycrosshairs {\n  pointer-events: none;\n  opacity: 0;\n  transition: .15s ease all\n}\n\n.apexcharts-xcrosshairs.apexcharts-active,.apexcharts-ycrosshairs.apexcharts-active {\n  opacity: 1;\n  transition: .15s ease all\n}\n\n.apexcharts-ycrosshairs-hidden {\n  opacity: 0\n}\n\n.apexcharts-selection-rect {\n  cursor: move\n}\n\n.svg_select_boundingRect,.svg_select_points_rot {\n  pointer-events: none;\n  opacity: 0;\n  visibility: hidden\n}\n\n.apexcharts-selection-rect+g .svg_select_boundingRect,.apexcharts-selection-rect+g .svg_select_points_rot {\n  opacity: 0;\n  visibility: hidden\n}\n\n.apexcharts-selection-rect+g .svg_select_points_l,.apexcharts-selection-rect+g .svg_select_points_r {\n  cursor: ew-resize;\n  opacity: 1;\n  visibility: visible\n}\n\n.svg_select_points {\n  fill: #efefef;\n  stroke: #333;\n  rx: 2\n}\n\n.apexcharts-svg.apexcharts-zoomable.hovering-zoom {\n  cursor: crosshair\n}\n\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\n  cursor: move\n}\n\n.apexcharts-menu-icon,.apexcharts-pan-icon,.apexcharts-reset-icon,.apexcharts-selection-icon,.apexcharts-toolbar-custom-icon,.apexcharts-zoom-icon,.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {\n  cursor: pointer;\n  width: 20px;\n  height: 20px;\n  line-height: 24px;\n  color: #6e8192;\n  text-align: center\n}\n\n.apexcharts-menu-icon svg,.apexcharts-reset-icon svg,.apexcharts-zoom-icon svg,.apexcharts-zoomin-icon svg,.apexcharts-zoomout-icon svg {\n  fill: #6e8192\n}\n\n.apexcharts-selection-icon svg {\n  fill: #444;\n  transform: scale(.76)\n}\n\n.apexcharts-theme-dark .apexcharts-menu-icon svg,.apexcharts-theme-dark .apexcharts-pan-icon svg,.apexcharts-theme-dark .apexcharts-reset-icon svg,.apexcharts-theme-dark .apexcharts-selection-icon svg,.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg,.apexcharts-theme-dark .apexcharts-zoom-icon svg,.apexcharts-theme-dark .apexcharts-zoomin-icon svg,.apexcharts-theme-dark .apexcharts-zoomout-icon svg {\n  fill: #f3f4f5\n}\n\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg {\n  fill: #008ffb\n}\n\n.apexcharts-theme-light .apexcharts-menu-icon:hover svg,.apexcharts-theme-light .apexcharts-reset-icon:hover svg,.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg {\n  fill: #333\n}\n\n.apexcharts-menu-icon,.apexcharts-selection-icon {\n  position: relative\n}\n\n.apexcharts-reset-icon {\n  margin-left: 5px\n}\n\n.apexcharts-menu-icon,.apexcharts-reset-icon,.apexcharts-zoom-icon {\n  transform: scale(.85)\n}\n\n.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {\n  transform: scale(.7)\n}\n\n.apexcharts-zoomout-icon {\n  margin-right: 3px\n}\n\n.apexcharts-pan-icon {\n  transform: scale(.62);\n  position: relative;\n  left: 1px;\n  top: 0\n}\n\n.apexcharts-pan-icon svg {\n  fill: #fff;\n  stroke: #6e8192;\n  stroke-width: 2\n}\n\n.apexcharts-pan-icon.apexcharts-selected svg {\n  stroke: #008ffb\n}\n\n.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {\n  stroke: #333\n}\n\n.apexcharts-toolbar {\n  position: absolute;\n  z-index: 11;\n  max-width: 176px;\n  text-align: right;\n  border-radius: 3px;\n  padding: 0 6px 2px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center\n}\n\n.apexcharts-menu {\n  background: #fff;\n  position: absolute;\n  top: 100%;\n  border: 1px solid #ddd;\n  border-radius: 3px;\n  padding: 3px;\n  right: 10px;\n  opacity: 0;\n  min-width: 110px;\n  transition: .15s ease all;\n  pointer-events: none\n}\n\n.apexcharts-menu.apexcharts-menu-open {\n  opacity: 1;\n  pointer-events: all;\n  transition: .15s ease all\n}\n\n.apexcharts-menu-item {\n  padding: 6px 7px;\n  font-size: 12px;\n  cursor: pointer\n}\n\n.apexcharts-theme-light .apexcharts-menu-item:hover {\n  background: #eee\n}\n\n.apexcharts-theme-dark .apexcharts-menu {\n  background: rgba(0,0,0,.7);\n  color: #fff\n}\n\n@media screen and (min-width:768px) {\n  .apexcharts-canvas:hover .apexcharts-toolbar {\n      opacity: 1\n  }\n}\n\n.apexcharts-canvas .apexcharts-element-hidden,.apexcharts-datalabel.apexcharts-element-hidden,.apexcharts-hide .apexcharts-series-points {\n  opacity: 0\n}\n\n.apexcharts-hidden-element-shown {\n  opacity: 1;\n  transition: 0.25s ease all;\n}\n.apexcharts-datalabel,.apexcharts-datalabel-label,.apexcharts-datalabel-value,.apexcharts-datalabels,.apexcharts-pie-label {\n  cursor: default;\n  pointer-events: none\n}\n\n.apexcharts-pie-label-delay {\n  opacity: 0;\n  animation-name: opaque;\n  animation-duration: .3s;\n  animation-fill-mode: forwards;\n  animation-timing-function: ease\n}\n\n.apexcharts-annotation-rect,.apexcharts-area-series .apexcharts-area,.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-gridline,.apexcharts-line,.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-point-annotation-label,.apexcharts-radar-series path,.apexcharts-radar-series polygon,.apexcharts-toolbar svg,.apexcharts-tooltip .apexcharts-marker,.apexcharts-xaxis-annotation-label,.apexcharts-yaxis-annotation-label,.apexcharts-zoom-rect {\n  pointer-events: none\n}\n\n.apexcharts-marker {\n  transition: .15s ease all\n}\n\n.resize-triggers {\n  animation: 1ms resizeanim;\n  visibility: hidden;\n  opacity: 0;\n  height: 100%;\n  width: 100%;\n  overflow: hidden\n}\n\n.contract-trigger:before,.resize-triggers,.resize-triggers>div {\n  content: \" \";\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0\n}\n\n.resize-triggers>div {\n  height: 100%;\n  width: 100%;\n  background: #eee;\n  overflow: auto\n}\n\n.contract-trigger:before {\n  overflow: hidden;\n  width: 200%;\n  height: 200%\n}\n"
  },
  {
    "path": "public/assets/apexcharts/apexcharts.esm.js",
    "content": "/*!\n * ApexCharts v3.41.0\n * (c) 2018-2023 ApexCharts\n * Released under the MIT License.\n */\nfunction t(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function e(e){for(var i=1;i<arguments.length;i++){var a=null!=arguments[i]?arguments[i]:{};i%2?t(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):t(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}function a(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function s(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}function r(t,e,i){return e&&s(t.prototype,e),i&&s(t,i),t}function o(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function n(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&h(t,e)}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function h(t,e){return h=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},h(t,e)}function c(t,e){if(e&&(\"object\"==typeof e||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}function d(t){var e=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,a=l(t);if(e){var s=l(this).constructor;i=Reflect.construct(a,arguments,s)}else i=a.apply(this,arguments);return c(this,i)}}function g(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var i=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null==i)return;var a,s,r=[],o=!0,n=!1;try{for(i=i.call(t);!(o=(a=i.next()).done)&&(r.push(a.value),!e||r.length!==e);o=!0);}catch(t){n=!0,s=t}finally{try{o||null==i.return||i.return()}finally{if(n)throw s}}return r}(t,e)||p(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function u(t){return function(t){if(Array.isArray(t))return f(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||p(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function p(t,e){if(t){if(\"string\"==typeof t)return f(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?f(t,e):void 0}}function f(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}var x=function(){function t(){a(this,t)}return r(t,[{key:\"shadeRGBColor\",value:function(t,e){var i=e.split(\",\"),a=t<0?0:255,s=t<0?-1*t:t,r=parseInt(i[0].slice(4),10),o=parseInt(i[1],10),n=parseInt(i[2],10);return\"rgb(\"+(Math.round((a-r)*s)+r)+\",\"+(Math.round((a-o)*s)+o)+\",\"+(Math.round((a-n)*s)+n)+\")\"}},{key:\"shadeHexColor\",value:function(t,e){var i=parseInt(e.slice(1),16),a=t<0?0:255,s=t<0?-1*t:t,r=i>>16,o=i>>8&255,n=255&i;return\"#\"+(16777216+65536*(Math.round((a-r)*s)+r)+256*(Math.round((a-o)*s)+o)+(Math.round((a-n)*s)+n)).toString(16).slice(1)}},{key:\"shadeColor\",value:function(e,i){return t.isColorHex(i)?this.shadeHexColor(e,i):this.shadeRGBColor(e,i)}}],[{key:\"bind\",value:function(t,e){return function(){return t.apply(e,arguments)}}},{key:\"isObject\",value:function(t){return t&&\"object\"===i(t)&&!Array.isArray(t)&&null!=t}},{key:\"is\",value:function(t,e){return Object.prototype.toString.call(e)===\"[object \"+t+\"]\"}},{key:\"listToArray\",value:function(t){var e,i=[];for(e=0;e<t.length;e++)i[e]=t[e];return i}},{key:\"extend\",value:function(t,e){var i=this;\"function\"!=typeof Object.assign&&(Object.assign=function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var a=arguments[i];if(null!=a)for(var s in a)a.hasOwnProperty(s)&&(e[s]=a[s])}return e});var a=Object.assign({},t);return this.isObject(t)&&this.isObject(e)&&Object.keys(e).forEach((function(s){i.isObject(e[s])&&s in t?a[s]=i.extend(t[s],e[s]):Object.assign(a,o({},s,e[s]))})),a}},{key:\"extendArray\",value:function(e,i){var a=[];return e.map((function(e){a.push(t.extend(i,e))})),e=a}},{key:\"monthMod\",value:function(t){return t%12}},{key:\"clone\",value:function(e){if(t.is(\"Array\",e)){for(var a=[],s=0;s<e.length;s++)a[s]=this.clone(e[s]);return a}if(t.is(\"Null\",e))return null;if(t.is(\"Date\",e))return e;if(\"object\"===i(e)){var r={};for(var o in e)e.hasOwnProperty(o)&&(r[o]=this.clone(e[o]));return r}return e}},{key:\"log10\",value:function(t){return Math.log(t)/Math.LN10}},{key:\"roundToBase10\",value:function(t){return Math.pow(10,Math.floor(Math.log10(t)))}},{key:\"roundToBase\",value:function(t,e){return Math.pow(e,Math.floor(Math.log(t)/Math.log(e)))}},{key:\"parseNumber\",value:function(t){return null===t?t:parseFloat(t)}},{key:\"randomId\",value:function(){return(Math.random()+1).toString(36).substring(4)}},{key:\"noExponents\",value:function(t){var e=String(t).split(/[eE]/);if(1===e.length)return e[0];var i=\"\",a=t<0?\"-\":\"\",s=e[0].replace(\".\",\"\"),r=Number(e[1])+1;if(r<0){for(i=a+\"0.\";r++;)i+=\"0\";return i+s.replace(/^-/,\"\")}for(r-=s.length;r--;)i+=\"0\";return s+i}},{key:\"getDimensions\",value:function(t){var e=getComputedStyle(t,null),i=t.clientHeight,a=t.clientWidth;return i-=parseFloat(e.paddingTop)+parseFloat(e.paddingBottom),[a-=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight),i]}},{key:\"getBoundingClientRect\",value:function(t){var e=t.getBoundingClientRect();return{top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:t.clientWidth,height:t.clientHeight,x:e.left,y:e.top}}},{key:\"getLargestStringFromArr\",value:function(t){return t.reduce((function(t,e){return Array.isArray(e)&&(e=e.reduce((function(t,e){return t.length>e.length?t:e}))),t.length>e.length?t:e}),0)}},{key:\"hexToRgba\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"#999999\",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.6;\"#\"!==t.substring(0,1)&&(t=\"#999999\");var i=t.replace(\"#\",\"\");i=i.match(new RegExp(\"(.{\"+i.length/3+\"})\",\"g\"));for(var a=0;a<i.length;a++)i[a]=parseInt(1===i[a].length?i[a]+i[a]:i[a],16);return void 0!==e&&i.push(e),\"rgba(\"+i.join(\",\")+\")\"}},{key:\"getOpacityFromRGBA\",value:function(t){return parseFloat(t.replace(/^.*,(.+)\\)/,\"$1\"))}},{key:\"rgb2hex\",value:function(t){return(t=t.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i))&&4===t.length?\"#\"+(\"0\"+parseInt(t[1],10).toString(16)).slice(-2)+(\"0\"+parseInt(t[2],10).toString(16)).slice(-2)+(\"0\"+parseInt(t[3],10).toString(16)).slice(-2):\"\"}},{key:\"isColorHex\",value:function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)/i.test(t)}},{key:\"getPolygonPos\",value:function(t,e){for(var i=[],a=2*Math.PI/e,s=0;s<e;s++){var r={};r.x=t*Math.sin(s*a),r.y=-t*Math.cos(s*a),i.push(r)}return i}},{key:\"polarToCartesian\",value:function(t,e,i,a){var s=(a-90)*Math.PI/180;return{x:t+i*Math.cos(s),y:e+i*Math.sin(s)}}},{key:\"escapeString\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"x\",i=t.toString().slice();return i=i.replace(/[` ~!@#$%^&*()|+\\=?;:'\",.<>{}[\\]\\\\/]/gi,e)}},{key:\"negToZero\",value:function(t){return t<0?0:t}},{key:\"moveIndexInArray\",value:function(t,e,i){if(i>=t.length)for(var a=i-t.length+1;a--;)t.push(void 0);return t.splice(i,0,t.splice(e,1)[0]),t}},{key:\"extractNumber\",value:function(t){return parseFloat(t.replace(/[^\\d.]*/g,\"\"))}},{key:\"findAncestor\",value:function(t,e){for(;(t=t.parentElement)&&!t.classList.contains(e););return t}},{key:\"setELstyles\",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t.style.key=e[i])}},{key:\"isNumber\",value:function(t){return!isNaN(t)&&parseFloat(Number(t))===t&&!isNaN(parseInt(t,10))}},{key:\"isFloat\",value:function(t){return Number(t)===t&&t%1!=0}},{key:\"isSafari\",value:function(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}},{key:\"isFirefox\",value:function(){return navigator.userAgent.toLowerCase().indexOf(\"firefox\")>-1}},{key:\"isIE11\",value:function(){if(-1!==window.navigator.userAgent.indexOf(\"MSIE\")||window.navigator.appVersion.indexOf(\"Trident/\")>-1)return!0}},{key:\"isIE\",value:function(){var t=window.navigator.userAgent,e=t.indexOf(\"MSIE \");if(e>0)return parseInt(t.substring(e+5,t.indexOf(\".\",e)),10);if(t.indexOf(\"Trident/\")>0){var i=t.indexOf(\"rv:\");return parseInt(t.substring(i+3,t.indexOf(\".\",i)),10)}var a=t.indexOf(\"Edge/\");return a>0&&parseInt(t.substring(a+5,t.indexOf(\".\",a)),10)}}]),t}(),b=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.setEasingFunctions()}return r(t,[{key:\"setEasingFunctions\",value:function(){var t;if(!this.w.globals.easing){switch(this.w.config.chart.animations.easing){case\"linear\":t=\"-\";break;case\"easein\":t=\"<\";break;case\"easeout\":t=\">\";break;case\"easeinout\":default:t=\"<>\";break;case\"swing\":t=function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1};break;case\"bounce\":t=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375};break;case\"elastic\":t=function(t){return t===!!t?t:Math.pow(2,-10*t)*Math.sin((t-.075)*(2*Math.PI)/.3)+1}}this.w.globals.easing=t}}},{key:\"animateLine\",value:function(t,e,i,a){t.attr(e).animate(a).attr(i)}},{key:\"animateMarker\",value:function(t,e,i,a,s,r){e||(e=0),t.attr({r:e,width:e,height:e}).animate(a,s).attr({r:i,width:i.width,height:i.height}).afterAll((function(){r()}))}},{key:\"animateCircle\",value:function(t,e,i,a,s){t.attr({r:e.r,cx:e.cx,cy:e.cy}).animate(a,s).attr({r:i.r,cx:i.cx,cy:i.cy})}},{key:\"animateRect\",value:function(t,e,i,a,s){t.attr(e).animate(a).attr(i).afterAll((function(){return s()}))}},{key:\"animatePathsGradually\",value:function(t){var e=t.el,i=t.realIndex,a=t.j,s=t.fill,r=t.pathFrom,o=t.pathTo,n=t.speed,l=t.delay,h=this.w,c=0;h.config.chart.animations.animateGradually.enabled&&(c=h.config.chart.animations.animateGradually.delay),h.config.chart.animations.dynamicAnimation.enabled&&h.globals.dataChanged&&\"bar\"!==h.config.chart.type&&(c=0),this.morphSVG(e,i,a,\"line\"!==h.config.chart.type||h.globals.comboCharts?s:\"stroke\",r,o,n,l*c)}},{key:\"showDelayedElements\",value:function(){this.w.globals.delayedElements.forEach((function(t){var e=t.el;e.classList.remove(\"apexcharts-element-hidden\"),e.classList.add(\"apexcharts-hidden-element-shown\")}))}},{key:\"animationCompleted\",value:function(t){var e=this.w;e.globals.animationEnded||(e.globals.animationEnded=!0,this.showDelayedElements(),\"function\"==typeof e.config.chart.events.animationEnd&&e.config.chart.events.animationEnd(this.ctx,{el:t,w:e}))}},{key:\"morphSVG\",value:function(t,e,i,a,s,r,o,n){var l=this,h=this.w;s||(s=t.attr(\"pathFrom\")),r||(r=t.attr(\"pathTo\"));var c=function(t){return\"radar\"===h.config.chart.type&&(o=1),\"M 0 \".concat(h.globals.gridHeight)};(!s||s.indexOf(\"undefined\")>-1||s.indexOf(\"NaN\")>-1)&&(s=c()),(!r||r.indexOf(\"undefined\")>-1||r.indexOf(\"NaN\")>-1)&&(r=c()),h.globals.shouldAnimate||(o=1),t.plot(s).animate(1,h.globals.easing,n).plot(s).animate(o,h.globals.easing,n).plot(r).afterAll((function(){x.isNumber(i)?i===h.globals.series[h.globals.maxValsInArrayIndex].length-2&&h.globals.shouldAnimate&&l.animationCompleted(t):\"none\"!==a&&h.globals.shouldAnimate&&(!h.globals.comboCharts&&e===h.globals.series.length-1||h.globals.comboCharts)&&l.animationCompleted(t),l.showDelayedElements()}))}}]),t}(),v=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"getDefaultFilter\",value:function(t,e){var i=this.w;t.unfilter(!0),(new window.SVG.Filter).size(\"120%\",\"180%\",\"-5%\",\"-40%\"),\"none\"!==i.config.states.normal.filter?this.applyFilter(t,e,i.config.states.normal.filter.type,i.config.states.normal.filter.value):i.config.chart.dropShadow.enabled&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:\"addNormalFilter\",value:function(t,e){var i=this.w;i.config.chart.dropShadow.enabled&&!t.node.classList.contains(\"apexcharts-marker\")&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:\"addLightenFilter\",value:function(t,e,i){var a=this,s=this.w,r=i.intensity;t.unfilter(!0);new window.SVG.Filter;t.filter((function(t){var i=s.config.chart.dropShadow;(i.enabled?a.addShadow(t,e,i):t).componentTransfer({rgb:{type:\"linear\",slope:1.5,intercept:r}})})),t.filterer.node.setAttribute(\"filterUnits\",\"userSpaceOnUse\"),this._scaleFilterSize(t.filterer.node)}},{key:\"addDarkenFilter\",value:function(t,e,i){var a=this,s=this.w,r=i.intensity;t.unfilter(!0);new window.SVG.Filter;t.filter((function(t){var i=s.config.chart.dropShadow;(i.enabled?a.addShadow(t,e,i):t).componentTransfer({rgb:{type:\"linear\",slope:r}})})),t.filterer.node.setAttribute(\"filterUnits\",\"userSpaceOnUse\"),this._scaleFilterSize(t.filterer.node)}},{key:\"applyFilter\",value:function(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.5;switch(i){case\"none\":this.addNormalFilter(t,e);break;case\"lighten\":this.addLightenFilter(t,e,{intensity:a});break;case\"darken\":this.addDarkenFilter(t,e,{intensity:a})}}},{key:\"addShadow\",value:function(t,e,i){var a=i.blur,s=i.top,r=i.left,o=i.color,n=i.opacity,l=t.flood(Array.isArray(o)?o[e]:o,n).composite(t.sourceAlpha,\"in\").offset(r,s).gaussianBlur(a).merge(t.source);return t.blend(t.source,l)}},{key:\"dropShadow\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=e.top,s=e.left,r=e.blur,o=e.color,n=e.opacity,l=e.noUserSpaceOnUse,h=this.w;return t.unfilter(!0),x.isIE()&&\"radialBar\"===h.config.chart.type||(o=Array.isArray(o)?o[i]:o,t.filter((function(t){var e=null;e=x.isSafari()||x.isFirefox()||x.isIE()?t.flood(o,n).composite(t.sourceAlpha,\"in\").offset(s,a).gaussianBlur(r):t.flood(o,n).composite(t.sourceAlpha,\"in\").offset(s,a).gaussianBlur(r).merge(t.source),t.blend(t.source,e)})),l||t.filterer.node.setAttribute(\"filterUnits\",\"userSpaceOnUse\"),this._scaleFilterSize(t.filterer.node)),t}},{key:\"setSelectionFilter\",value:function(t,e,i){var a=this.w;if(void 0!==a.globals.selectedDataPoints[e]&&a.globals.selectedDataPoints[e].indexOf(i)>-1){t.node.setAttribute(\"selected\",!0);var s=a.config.states.active.filter;\"none\"!==s&&this.applyFilter(t,e,s.type,s.value)}}},{key:\"_scaleFilterSize\",value:function(t){!function(e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}({width:\"200%\",height:\"200%\",x:\"-50%\",y:\"-50%\"})}}]),t}(),m=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"roundPathCorners\",value:function(t,e){function i(t,e,i){var s=e.x-t.x,r=e.y-t.y,o=Math.sqrt(s*s+r*r);return a(t,e,Math.min(1,i/o))}function a(t,e,i){return{x:t.x+(e.x-t.x)*i,y:t.y+(e.y-t.y)*i}}function s(t,e){t.length>2&&(t[t.length-2]=e.x,t[t.length-1]=e.y)}function r(t){return{x:parseFloat(t[t.length-2]),y:parseFloat(t[t.length-1])}}t.indexOf(\"NaN\")>-1&&(t=\"\");var o=t.split(/[,\\s]/).reduce((function(t,e){var i=e.match(\"([a-zA-Z])(.+)\");return i?(t.push(i[1]),t.push(i[2])):t.push(e),t}),[]).reduce((function(t,e){return parseFloat(e)==e&&t.length?t[t.length-1].push(e):t.push([e]),t}),[]),n=[];if(o.length>1){var l=r(o[0]),h=null;\"Z\"==o[o.length-1][0]&&o[0].length>2&&(h=[\"L\",l.x,l.y],o[o.length-1]=h),n.push(o[0]);for(var c=1;c<o.length;c++){var d=n[n.length-1],g=o[c],u=g==h?o[1]:o[c+1];if(u&&d&&d.length>2&&\"L\"==g[0]&&u.length>2&&\"L\"==u[0]){var p,f,x=r(d),b=r(g),v=r(u);p=i(b,x,e),f=i(b,v,e),s(g,p),g.origPoint=b,n.push(g);var m=a(p,b,.5),y=a(b,f,.5),w=[\"C\",m.x,m.y,y.x,y.y,f.x,f.y];w.origPoint=b,n.push(w)}else n.push(g)}if(h){var k=r(n[n.length-1]);n.push([\"Z\"]),s(n[0],k)}}else n=o;return n.reduce((function(t,e){return t+e.join(\" \")+\" \"}),\"\")}},{key:\"drawLine\",value:function(t,e,i,a){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:\"#a8a8a8\",r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,n=arguments.length>7&&void 0!==arguments[7]?arguments[7]:\"butt\";return this.w.globals.dom.Paper.line().attr({x1:t,y1:e,x2:i,y2:a,stroke:s,\"stroke-dasharray\":r,\"stroke-width\":o,\"stroke-linecap\":n})}},{key:\"drawRect\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"#fefefe\",o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,n=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,l=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,h=arguments.length>9&&void 0!==arguments[9]?arguments[9]:0,c=this.w.globals.dom.Paper.rect();return c.attr({x:t,y:e,width:i>0?i:0,height:a>0?a:0,rx:s,ry:s,opacity:o,\"stroke-width\":null!==n?n:0,stroke:null!==l?l:\"none\",\"stroke-dasharray\":h}),c.node.setAttribute(\"fill\",r),c}},{key:\"drawPolygon\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"#e1e1e1\",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"none\";return this.w.globals.dom.Paper.polygon(t).attr({fill:a,stroke:e,\"stroke-width\":i})}},{key:\"drawCircle\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;t<0&&(t=0);var i=this.w.globals.dom.Paper.circle(2*t);return null!==e&&i.attr(e),i}},{key:\"drawPath\",value:function(t){var e=t.d,i=void 0===e?\"\":e,a=t.stroke,s=void 0===a?\"#a8a8a8\":a,r=t.strokeWidth,o=void 0===r?1:r,n=t.fill,l=t.fillOpacity,h=void 0===l?1:l,c=t.strokeOpacity,d=void 0===c?1:c,g=t.classes,u=t.strokeLinecap,p=void 0===u?null:u,f=t.strokeDashArray,x=void 0===f?0:f,b=this.w;return null===p&&(p=b.config.stroke.lineCap),(i.indexOf(\"undefined\")>-1||i.indexOf(\"NaN\")>-1)&&(i=\"M 0 \".concat(b.globals.gridHeight)),b.globals.dom.Paper.path(i).attr({fill:n,\"fill-opacity\":h,stroke:s,\"stroke-opacity\":d,\"stroke-linecap\":p,\"stroke-width\":o,\"stroke-dasharray\":x,class:g})}},{key:\"group\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w.globals.dom.Paper.group();return null!==t&&e.attr(t),e}},{key:\"move\",value:function(t,e){var i=[\"M\",t,e].join(\" \");return i}},{key:\"line\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=null;return null===i?a=[\" L\",t,e].join(\" \"):\"H\"===i?a=[\" H\",t].join(\" \"):\"V\"===i&&(a=[\" V\",e].join(\" \")),a}},{key:\"curve\",value:function(t,e,i,a,s,r){var o=[\"C\",t,e,i,a,s,r].join(\" \");return o}},{key:\"quadraticCurve\",value:function(t,e,i,a){return[\"Q\",t,e,i,a].join(\" \")}},{key:\"arc\",value:function(t,e,i,a,s,r,o){var n=\"A\";arguments.length>7&&void 0!==arguments[7]&&arguments[7]&&(n=\"a\");var l=[n,t,e,i,a,s,r,o].join(\" \");return l}},{key:\"renderPaths\",value:function(t){var i,a=t.j,s=t.realIndex,r=t.pathFrom,o=t.pathTo,n=t.stroke,l=t.strokeWidth,h=t.strokeLinecap,c=t.fill,d=t.animationDelay,g=t.initialSpeed,u=t.dataChangeSpeed,p=t.className,f=t.shouldClipToGrid,x=void 0===f||f,m=t.bindEventsOnPaths,y=void 0===m||m,w=t.drawShadow,k=void 0===w||w,A=this.w,S=new v(this.ctx),C=new b(this.ctx),L=this.w.config.chart.animations.enabled,P=L&&this.w.config.chart.animations.dynamicAnimation.enabled,I=!!(L&&!A.globals.resized||P&&A.globals.dataChanged&&A.globals.shouldAnimate);I?i=r:(i=o,A.globals.animationEnded=!0);var T=A.config.stroke.dashArray,M=0;M=Array.isArray(T)?T[s]:A.config.stroke.dashArray;var X=this.drawPath({d:i,stroke:n,strokeWidth:l,fill:c,fillOpacity:1,classes:p,strokeLinecap:h,strokeDashArray:M});if(X.attr(\"index\",s),x&&X.attr({\"clip-path\":\"url(#gridRectMask\".concat(A.globals.cuid,\")\")}),\"none\"!==A.config.states.normal.filter.type)S.getDefaultFilter(X,s);else if(A.config.chart.dropShadow.enabled&&k&&(!A.config.chart.dropShadow.enabledOnSeries||A.config.chart.dropShadow.enabledOnSeries&&-1!==A.config.chart.dropShadow.enabledOnSeries.indexOf(s))){var z=A.config.chart.dropShadow;S.dropShadow(X,z,s)}y&&(X.node.addEventListener(\"mouseenter\",this.pathMouseEnter.bind(this,X)),X.node.addEventListener(\"mouseleave\",this.pathMouseLeave.bind(this,X)),X.node.addEventListener(\"mousedown\",this.pathMouseDown.bind(this,X))),X.attr({pathTo:o,pathFrom:r});var E={el:X,j:a,realIndex:s,pathFrom:r,pathTo:o,fill:c,strokeWidth:l,delay:d};return!L||A.globals.resized||A.globals.dataChanged?!A.globals.resized&&A.globals.dataChanged||C.showDelayedElements():C.animatePathsGradually(e(e({},E),{},{speed:g})),A.globals.dataChanged&&P&&I&&C.animatePathsGradually(e(e({},E),{},{speed:u})),X}},{key:\"drawPattern\",value:function(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"#a8a8a8\",s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;return this.w.globals.dom.Paper.pattern(e,i,(function(r){\"horizontalLines\"===t?r.line(0,0,i,0).stroke({color:a,width:s+1}):\"verticalLines\"===t?r.line(0,0,0,e).stroke({color:a,width:s+1}):\"slantedLines\"===t?r.line(0,0,e,i).stroke({color:a,width:s}):\"squares\"===t?r.rect(e,i).fill(\"none\").stroke({color:a,width:s}):\"circles\"===t&&r.circle(e).fill(\"none\").stroke({color:a,width:s})}))}},{key:\"drawGradient\",value:function(t,e,i,a,s){var r,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,n=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,h=arguments.length>8&&void 0!==arguments[8]?arguments[8]:0,c=this.w;e.length<9&&0===e.indexOf(\"#\")&&(e=x.hexToRgba(e,a)),i.length<9&&0===i.indexOf(\"#\")&&(i=x.hexToRgba(i,s));var d=0,g=1,u=1,p=null;null!==n&&(d=void 0!==n[0]?n[0]/100:0,g=void 0!==n[1]?n[1]/100:1,u=void 0!==n[2]?n[2]/100:1,p=void 0!==n[3]?n[3]/100:null);var f=!(\"donut\"!==c.config.chart.type&&\"pie\"!==c.config.chart.type&&\"polarArea\"!==c.config.chart.type&&\"bubble\"!==c.config.chart.type);if(r=null===l||0===l.length?c.globals.dom.Paper.gradient(f?\"radial\":\"linear\",(function(t){t.at(d,e,a),t.at(g,i,s),t.at(u,i,s),null!==p&&t.at(p,e,a)})):c.globals.dom.Paper.gradient(f?\"radial\":\"linear\",(function(t){(Array.isArray(l[h])?l[h]:l).forEach((function(e){t.at(e.offset/100,e.color,e.opacity)}))})),f){var b=c.globals.gridWidth/2,v=c.globals.gridHeight/2;\"bubble\"!==c.config.chart.type?r.attr({gradientUnits:\"userSpaceOnUse\",cx:b,cy:v,r:o}):r.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else\"vertical\"===t?r.from(0,0).to(0,1):\"diagonal\"===t?r.from(0,0).to(1,1):\"horizontal\"===t?r.from(0,1).to(1,1):\"diagonal2\"===t&&r.from(1,0).to(0,1);return r}},{key:\"getTextBasedOnMaxWidth\",value:function(t){var e=t.text,i=t.maxWidth,a=t.fontSize,s=t.fontFamily,r=this.getTextRects(e,a,s),o=r.width/e.length,n=Math.floor(i/o);return i<r.width?e.slice(0,n-3)+\"...\":e}},{key:\"drawText\",value:function(t){var i=this,a=t.x,s=t.y,r=t.text,o=t.textAnchor,n=t.fontSize,l=t.fontFamily,h=t.fontWeight,c=t.foreColor,d=t.opacity,g=t.maxWidth,u=t.cssClass,p=void 0===u?\"\":u,f=t.isPlainText,x=void 0===f||f,b=this.w;void 0===r&&(r=\"\");var v=r;o||(o=\"start\"),c&&c.length||(c=b.config.chart.foreColor),l=l||b.config.chart.fontFamily,h=h||\"regular\";var m,y={maxWidth:g,fontSize:n=n||\"11px\",fontFamily:l};return Array.isArray(r)?m=b.globals.dom.Paper.text((function(t){for(var a=0;a<r.length;a++)v=r[a],g&&(v=i.getTextBasedOnMaxWidth(e({text:r[a]},y))),0===a?t.tspan(v):t.tspan(v).newLine()})):(g&&(v=this.getTextBasedOnMaxWidth(e({text:r},y))),m=x?b.globals.dom.Paper.plain(r):b.globals.dom.Paper.text((function(t){return t.tspan(v)}))),m.attr({x:a,y:s,\"text-anchor\":o,\"dominant-baseline\":\"auto\",\"font-size\":n,\"font-family\":l,\"font-weight\":h,fill:c,class:\"apexcharts-text \"+p}),m.node.style.fontFamily=l,m.node.style.opacity=d,m}},{key:\"drawMarker\",value:function(t,e,i){t=t||0;var a=i.pSize||0,s=null;if(\"square\"===i.shape||\"rect\"===i.shape){var r=void 0===i.pRadius?a/2:i.pRadius;null!==e&&a||(a=0,r=0);var o=1.2*a+r,n=this.drawRect(o,o,o,o,r);n.attr({x:t-o/2,y:e-o/2,cx:t,cy:e,class:i.class?i.class:\"\",fill:i.pointFillColor,\"fill-opacity\":i.pointFillOpacity?i.pointFillOpacity:1,stroke:i.pointStrokeColor,\"stroke-width\":i.pointStrokeWidth?i.pointStrokeWidth:0,\"stroke-opacity\":i.pointStrokeOpacity?i.pointStrokeOpacity:1}),s=n}else\"circle\"!==i.shape&&i.shape||(x.isNumber(e)||(a=0,e=0),s=this.drawCircle(a,{cx:t,cy:e,class:i.class?i.class:\"\",stroke:i.pointStrokeColor,fill:i.pointFillColor,\"fill-opacity\":i.pointFillOpacity?i.pointFillOpacity:1,\"stroke-width\":i.pointStrokeWidth?i.pointStrokeWidth:0,\"stroke-opacity\":i.pointStrokeOpacity?i.pointStrokeOpacity:1}));return s}},{key:\"pathMouseEnter\",value:function(t,e){var i=this.w,a=new v(this.ctx),s=parseInt(t.node.getAttribute(\"index\"),10),r=parseInt(t.node.getAttribute(\"j\"),10);if(\"function\"==typeof i.config.chart.events.dataPointMouseEnter&&i.config.chart.events.dataPointMouseEnter(e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}),this.ctx.events.fireEvent(\"dataPointMouseEnter\",[e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}]),(\"none\"===i.config.states.active.filter.type||\"true\"!==t.node.getAttribute(\"selected\"))&&\"none\"!==i.config.states.hover.filter.type&&!i.globals.isTouchDevice){var o=i.config.states.hover.filter;a.applyFilter(t,s,o.type,o.value)}}},{key:\"pathMouseLeave\",value:function(t,e){var i=this.w,a=new v(this.ctx),s=parseInt(t.node.getAttribute(\"index\"),10),r=parseInt(t.node.getAttribute(\"j\"),10);\"function\"==typeof i.config.chart.events.dataPointMouseLeave&&i.config.chart.events.dataPointMouseLeave(e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}),this.ctx.events.fireEvent(\"dataPointMouseLeave\",[e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}]),\"none\"!==i.config.states.active.filter.type&&\"true\"===t.node.getAttribute(\"selected\")||\"none\"!==i.config.states.hover.filter.type&&a.getDefaultFilter(t,s)}},{key:\"pathMouseDown\",value:function(t,e){var i=this.w,a=new v(this.ctx),s=parseInt(t.node.getAttribute(\"index\"),10),r=parseInt(t.node.getAttribute(\"j\"),10),o=\"false\";if(\"true\"===t.node.getAttribute(\"selected\")){if(t.node.setAttribute(\"selected\",\"false\"),i.globals.selectedDataPoints[s].indexOf(r)>-1){var n=i.globals.selectedDataPoints[s].indexOf(r);i.globals.selectedDataPoints[s].splice(n,1)}}else{if(!i.config.states.active.allowMultipleDataPointsSelection&&i.globals.selectedDataPoints.length>0){i.globals.selectedDataPoints=[];var l=i.globals.dom.Paper.select(\".apexcharts-series path\").members,h=i.globals.dom.Paper.select(\".apexcharts-series circle, .apexcharts-series rect\").members,c=function(t){Array.prototype.forEach.call(t,(function(t){t.node.setAttribute(\"selected\",\"false\"),a.getDefaultFilter(t,s)}))};c(l),c(h)}t.node.setAttribute(\"selected\",\"true\"),o=\"true\",void 0===i.globals.selectedDataPoints[s]&&(i.globals.selectedDataPoints[s]=[]),i.globals.selectedDataPoints[s].push(r)}if(\"true\"===o){var d=i.config.states.active.filter;if(\"none\"!==d)a.applyFilter(t,s,d.type,d.value);else if(\"none\"!==i.config.states.hover.filter&&!i.globals.isTouchDevice){var g=i.config.states.hover.filter;a.applyFilter(t,s,g.type,g.value)}}else if(\"none\"!==i.config.states.active.filter.type)if(\"none\"===i.config.states.hover.filter.type||i.globals.isTouchDevice)a.getDefaultFilter(t,s);else{g=i.config.states.hover.filter;a.applyFilter(t,s,g.type,g.value)}\"function\"==typeof i.config.chart.events.dataPointSelection&&i.config.chart.events.dataPointSelection(e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}),e&&this.ctx.events.fireEvent(\"dataPointSelection\",[e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}])}},{key:\"rotateAroundCenter\",value:function(t){var e={};return t&&\"function\"==typeof t.getBBox&&(e=t.getBBox()),{x:e.x+e.width/2,y:e.y+e.height/2}}},{key:\"getTextRects\",value:function(t,e,i,a){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=this.w,o=this.drawText({x:-200,y:-200,text:t,textAnchor:\"start\",fontSize:e,fontFamily:i,foreColor:\"#fff\",opacity:0});a&&o.attr(\"transform\",a),r.globals.dom.Paper.add(o);var n=o.bbox();return s||(n=o.node.getBoundingClientRect()),o.remove(),{width:n.width,height:n.height}}},{key:\"placeTextWithEllipsis\",value:function(t,e,i){if(\"function\"==typeof t.getComputedTextLength&&(t.textContent=e,e.length>0&&t.getComputedTextLength()>=i/1.1)){for(var a=e.length-3;a>0;a-=3)if(t.getSubStringLength(0,a)<=i/1.1)return void(t.textContent=e.substring(0,a)+\"...\");t.textContent=\".\"}}}],[{key:\"setAttrs\",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}}]),t}(),y=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"getStackedSeriesTotals\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=this.w,i=[];if(0===e.globals.series.length)return i;for(var a=0;a<e.globals.series[e.globals.maxValsInArrayIndex].length;a++){for(var s=0,r=0;r<e.globals.series.length;r++)void 0!==e.globals.series[r][a]&&-1===t.indexOf(r)&&(s+=e.globals.series[r][a]);i.push(s)}return i}},{key:\"getSeriesTotalByIndex\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null===t?this.w.config.series.reduce((function(t,e){return t+e}),0):this.w.globals.series[t].reduce((function(t,e){return t+e}),0)}},{key:\"isSeriesNull\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return 0===(null===t?this.w.config.series.filter((function(t){return null!==t})):this.w.config.series[t].data.filter((function(t){return null!==t}))).length}},{key:\"seriesHaveSameValues\",value:function(t){return this.w.globals.series[t].every((function(t,e,i){return t===i[0]}))}},{key:\"getCategoryLabels\",value:function(t){var e=this.w,i=t.slice();return e.config.xaxis.convertedCatToNumeric&&(i=t.map((function(t,i){return e.config.xaxis.labels.formatter(t-e.globals.minX+1)}))),i}},{key:\"getLargestSeries\",value:function(){var t=this.w;t.globals.maxValsInArrayIndex=t.globals.series.map((function(t){return t.length})).indexOf(Math.max.apply(Math,t.globals.series.map((function(t){return t.length}))))}},{key:\"getLargestMarkerSize\",value:function(){var t=this.w,e=0;return t.globals.markers.size.forEach((function(t){e=Math.max(e,t)})),t.config.markers.discrete&&t.config.markers.discrete.length&&t.config.markers.discrete.forEach((function(t){e=Math.max(e,t.size)})),e>0&&(e+=t.config.markers.hover.sizeOffset+1),t.globals.markers.largestSize=e,e}},{key:\"getSeriesTotals\",value:function(){var t=this.w;t.globals.seriesTotals=t.globals.series.map((function(t,e){var i=0;if(Array.isArray(t))for(var a=0;a<t.length;a++)i+=t[a];else i+=t;return i}))}},{key:\"getSeriesTotalsXRange\",value:function(t,e){var i=this.w;return i.globals.series.map((function(a,s){for(var r=0,o=0;o<a.length;o++)i.globals.seriesX[s][o]>t&&i.globals.seriesX[s][o]<e&&(r+=a[o]);return r}))}},{key:\"getPercentSeries\",value:function(){var t=this.w;t.globals.seriesPercent=t.globals.series.map((function(e,i){var a=[];if(Array.isArray(e))for(var s=0;s<e.length;s++){var r=t.globals.stackedSeriesTotals[s],o=0;r&&(o=100*e[s]/r),a.push(o)}else{var n=100*e/t.globals.seriesTotals.reduce((function(t,e){return t+e}),0);a.push(n)}return a}))}},{key:\"getCalculatedRatios\",value:function(){var t,e,i,a,s=this.w.globals,r=[],o=0,n=[],l=.1,h=0;if(s.yRange=[],s.isMultipleYAxis)for(var c=0;c<s.minYArr.length;c++)s.yRange.push(Math.abs(s.minYArr[c]-s.maxYArr[c])),n.push(0);else s.yRange.push(Math.abs(s.minY-s.maxY));s.xRange=Math.abs(s.maxX-s.minX),s.zRange=Math.abs(s.maxZ-s.minZ);for(var d=0;d<s.yRange.length;d++)r.push(s.yRange[d]/s.gridHeight);if(e=s.xRange/s.gridWidth,i=Math.abs(s.initialMaxX-s.initialMinX)/s.gridWidth,t=s.yRange/s.gridWidth,a=s.xRange/s.gridHeight,(o=s.zRange/s.gridHeight*16)||(o=1),s.minY!==Number.MIN_VALUE&&0!==Math.abs(s.minY)&&(s.hasNegs=!0),s.isMultipleYAxis){n=[];for(var g=0;g<r.length;g++)n.push(-s.minYArr[g]/r[g])}else n.push(-s.minY/r[0]),s.minY!==Number.MIN_VALUE&&0!==Math.abs(s.minY)&&(l=-s.minY/t,h=s.minX/e);return{yRatio:r,invertedYRatio:t,zRatio:o,xRatio:e,initialXRatio:i,invertedXRatio:a,baseLineInvertedY:l,baseLineY:n,baseLineX:h}}},{key:\"getLogSeries\",value:function(t){var e=this,i=this.w;return i.globals.seriesLog=t.map((function(t,a){return i.config.yaxis[a]&&i.config.yaxis[a].logarithmic?t.map((function(t){return null===t?null:e.getLogVal(i.config.yaxis[a].logBase,t,a)})):t})),i.globals.invalidLogScale?t:i.globals.seriesLog}},{key:\"getBaseLog\",value:function(t,e){return Math.log(e)/Math.log(t)}},{key:\"getLogVal\",value:function(t,e,i){if(0===e)return 0;var a=this.w,s=0===a.globals.minYArr[i]?-1:this.getBaseLog(t,a.globals.minYArr[i]),r=(0===a.globals.maxYArr[i]?0:this.getBaseLog(t,a.globals.maxYArr[i]))-s;return e<1?e/r:(this.getBaseLog(t,e)-s)/r}},{key:\"getLogYRatios\",value:function(t){var e=this,i=this.w,a=this.w.globals;return a.yLogRatio=t.slice(),a.logYRange=a.yRange.map((function(t,s){if(i.config.yaxis[s]&&e.w.config.yaxis[s].logarithmic){var r,o=-Number.MAX_VALUE,n=Number.MIN_VALUE;return a.seriesLog.forEach((function(t,e){t.forEach((function(t){i.config.yaxis[e]&&i.config.yaxis[e].logarithmic&&(o=Math.max(t,o),n=Math.min(t,n))}))})),r=Math.pow(a.yRange[s],Math.abs(n-o)/a.yRange[s]),a.yLogRatio[s]=r/a.gridHeight,r}})),a.invalidLogScale?t.slice():a.yLogRatio}}],[{key:\"checkComboSeries\",value:function(t){var e=!1,i=0,a=0;return t.length&&void 0!==t[0].type&&t.forEach((function(t){\"bar\"!==t.type&&\"column\"!==t.type&&\"candlestick\"!==t.type&&\"boxPlot\"!==t.type||i++,void 0!==t.type&&a++})),a>0&&(e=!0),{comboBarCount:i,comboCharts:e}}},{key:\"extendArrayProps\",value:function(t,e,i){return e.yaxis&&(e=t.extendYAxis(e,i)),e.annotations&&(e.annotations.yaxis&&(e=t.extendYAxisAnnotations(e)),e.annotations.xaxis&&(e=t.extendXAxisAnnotations(e)),e.annotations.points&&(e=t.extendPointAnnotations(e))),e}}]),t}(),w=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e}return r(t,[{key:\"setOrientations\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w;if(\"vertical\"===t.label.orientation){var a=null!==e?e:0,s=i.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='\".concat(a,\"']\"));if(null!==s){var r=s.getBoundingClientRect();s.setAttribute(\"x\",parseFloat(s.getAttribute(\"x\"))-r.height+4),\"top\"===t.label.position?s.setAttribute(\"y\",parseFloat(s.getAttribute(\"y\"))+r.width):s.setAttribute(\"y\",parseFloat(s.getAttribute(\"y\"))-r.width);var o=this.annoCtx.graphics.rotateAroundCenter(s),n=o.x,l=o.y;s.setAttribute(\"transform\",\"rotate(-90 \".concat(n,\" \").concat(l,\")\"))}}}},{key:\"addBackgroundToAnno\",value:function(t,e){var i=this.w;if(!t||void 0===e.label.text||void 0!==e.label.text&&!String(e.label.text).trim())return null;var a=i.globals.dom.baseEl.querySelector(\".apexcharts-grid\").getBoundingClientRect(),s=t.getBoundingClientRect(),r=e.label.style.padding.left,o=e.label.style.padding.right,n=e.label.style.padding.top,l=e.label.style.padding.bottom;\"vertical\"===e.label.orientation&&(n=e.label.style.padding.left,l=e.label.style.padding.right,r=e.label.style.padding.top,o=e.label.style.padding.bottom);var h=s.left-a.left-r,c=s.top-a.top-n,d=this.annoCtx.graphics.drawRect(h-i.globals.barPadForNumericAxis,c,s.width+r+o,s.height+n+l,e.label.borderRadius,e.label.style.background,1,e.label.borderWidth,e.label.borderColor,0);return e.id&&d.node.classList.add(e.id),d}},{key:\"annotationsBackground\",value:function(){var t=this,e=this.w,i=function(i,a,s){var r=e.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(s,\"-annotations .apexcharts-\").concat(s,\"-annotation-label[rel='\").concat(a,\"']\"));if(r){var o=r.parentNode,n=t.addBackgroundToAnno(r,i);n&&(o.insertBefore(n.node,r),i.label.mouseEnter&&n.node.addEventListener(\"mouseenter\",i.label.mouseEnter.bind(t,i)),i.label.mouseLeave&&n.node.addEventListener(\"mouseleave\",i.label.mouseLeave.bind(t,i)),i.label.click&&n.node.addEventListener(\"click\",i.label.click.bind(t,i)))}};e.config.annotations.xaxis.map((function(t,e){i(t,e,\"xaxis\")})),e.config.annotations.yaxis.map((function(t,e){i(t,e,\"yaxis\")})),e.config.annotations.points.map((function(t,e){i(t,e,\"point\")}))}},{key:\"getY1Y2\",value:function(t,e){var i,a=\"y1\"===t?e.y:e.y2,s=this.w;if(this.annoCtx.invertAxis){var r=s.globals.labels.indexOf(a);s.config.xaxis.convertedCatToNumeric&&(r=s.globals.categoryLabels.indexOf(a));var o=s.globals.dom.baseEl.querySelector(\".apexcharts-yaxis-texts-g text:nth-child(\"+(r+1)+\")\");o&&(i=parseFloat(o.getAttribute(\"y\")))}else{var n;if(s.config.yaxis[e.yAxisIndex].logarithmic)n=(a=new y(this.annoCtx.ctx).getLogVal(a,e.yAxisIndex))/s.globals.yLogRatio[e.yAxisIndex];else n=(a-s.globals.minYArr[e.yAxisIndex])/(s.globals.yRange[e.yAxisIndex]/s.globals.gridHeight);i=s.globals.gridHeight-n,!e.marker||void 0!==e.y&&null!==e.y||(i=0),s.config.yaxis[e.yAxisIndex]&&s.config.yaxis[e.yAxisIndex].reversed&&(i=n)}return\"string\"==typeof a&&a.indexOf(\"px\")>-1&&(i=parseFloat(a)),i}},{key:\"getX1X2\",value:function(t,e){var i=this.w,a=this.annoCtx.invertAxis?i.globals.minY:i.globals.minX,s=this.annoCtx.invertAxis?i.globals.maxY:i.globals.maxX,r=this.annoCtx.invertAxis?i.globals.yRange[0]:i.globals.xRange,o=(e.x-a)/(r/i.globals.gridWidth);this.annoCtx.inversedReversedAxis&&(o=(s-e.x)/(r/i.globals.gridWidth)),\"category\"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||i.globals.dataFormatXNumeric||(o=this.getStringX(e.x));var n=(e.x2-a)/(r/i.globals.gridWidth);return this.annoCtx.inversedReversedAxis&&(n=(s-e.x2)/(r/i.globals.gridWidth)),\"category\"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||i.globals.dataFormatXNumeric||(n=this.getStringX(e.x2)),void 0!==e.x&&null!==e.x||!e.marker||(o=i.globals.gridWidth),\"x1\"===t&&\"string\"==typeof e.x&&e.x.indexOf(\"px\")>-1&&(o=parseFloat(e.x)),\"x2\"===t&&\"string\"==typeof e.x2&&e.x2.indexOf(\"px\")>-1&&(n=parseFloat(e.x2)),\"x1\"===t?o:n}},{key:\"getStringX\",value:function(t){var e=this.w,i=t;e.config.xaxis.convertedCatToNumeric&&e.globals.categoryLabels.length&&(t=e.globals.categoryLabels.indexOf(t)+1);var a=e.globals.labels.indexOf(t),s=e.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-texts-g text:nth-child(\"+(a+1)+\")\");return s&&(i=parseFloat(s.getAttribute(\"x\"))),i}}]),t}(),k=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e,this.invertAxis=this.annoCtx.invertAxis,this.helpers=new w(this.annoCtx)}return r(t,[{key:\"addXaxisAnnotation\",value:function(t,e,i){var a,s=this.w,r=this.helpers.getX1X2(\"x1\",t),o=t.label.text,n=t.strokeDashArray;if(x.isNumber(r)){if(null===t.x2||void 0===t.x2){var l=this.annoCtx.graphics.drawLine(r+t.offsetX,0+t.offsetY,r+t.offsetX,s.globals.gridHeight+t.offsetY,t.borderColor,n,t.borderWidth);e.appendChild(l.node),t.id&&l.node.classList.add(t.id)}else{if((a=this.helpers.getX1X2(\"x2\",t))<r){var h=r;r=a,a=h}var c=this.annoCtx.graphics.drawRect(r+t.offsetX,0+t.offsetY,a-r,s.globals.gridHeight+t.offsetY,0,t.fillColor,t.opacity,1,t.borderColor,n);c.node.classList.add(\"apexcharts-annotation-rect\"),c.attr(\"clip-path\",\"url(#gridRectMask\".concat(s.globals.cuid,\")\")),e.appendChild(c.node),t.id&&c.node.classList.add(t.id)}var d=this.annoCtx.graphics.getTextRects(o,parseFloat(t.label.style.fontSize)),g=\"top\"===t.label.position?4:\"center\"===t.label.position?s.globals.gridHeight/2+(\"vertical\"===t.label.orientation?d.width/2:0):s.globals.gridHeight,u=this.annoCtx.graphics.drawText({x:r+t.label.offsetX,y:g+t.label.offsetY-(\"vertical\"===t.label.orientation?\"top\"===t.label.position?d.width/2-12:-d.width/2:0),text:o,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\"apexcharts-xaxis-annotation-label \".concat(t.label.style.cssClass,\" \").concat(t.id?t.id:\"\")});u.attr({rel:i}),e.appendChild(u.node),this.annoCtx.helpers.setOrientations(t,i)}}},{key:\"drawXAxisAnnotations\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\"apexcharts-xaxis-annotations\"});return e.config.annotations.xaxis.map((function(e,a){t.addXaxisAnnotation(e,i.node,a)})),i}}]),t}(),A=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e,this.helpers=new w(this.annoCtx)}return r(t,[{key:\"addYaxisAnnotation\",value:function(t,e,i){var a,s=this.w,r=t.strokeDashArray,o=this.helpers.getY1Y2(\"y1\",t),n=t.label.text;if(null===t.y2||void 0===t.y2){var l=this.annoCtx.graphics.drawLine(0+t.offsetX,o+t.offsetY,this._getYAxisAnnotationWidth(t),o+t.offsetY,t.borderColor,r,t.borderWidth);e.appendChild(l.node),t.id&&l.node.classList.add(t.id)}else{if((a=this.helpers.getY1Y2(\"y2\",t))>o){var h=o;o=a,a=h}var c=this.annoCtx.graphics.drawRect(0+t.offsetX,a+t.offsetY,this._getYAxisAnnotationWidth(t),o-a,0,t.fillColor,t.opacity,1,t.borderColor,r);c.node.classList.add(\"apexcharts-annotation-rect\"),c.attr(\"clip-path\",\"url(#gridRectMask\".concat(s.globals.cuid,\")\")),e.appendChild(c.node),t.id&&c.node.classList.add(t.id)}var d=\"right\"===t.label.position?s.globals.gridWidth:\"center\"===t.label.position?s.globals.gridWidth/2:0,g=this.annoCtx.graphics.drawText({x:d+t.label.offsetX,y:(null!=a?a:o)+t.label.offsetY-3,text:n,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\"apexcharts-yaxis-annotation-label \".concat(t.label.style.cssClass,\" \").concat(t.id?t.id:\"\")});g.attr({rel:i}),e.appendChild(g.node)}},{key:\"_getYAxisAnnotationWidth\",value:function(t){var e=this.w;e.globals.gridWidth;return(t.width.indexOf(\"%\")>-1?e.globals.gridWidth*parseInt(t.width,10)/100:parseInt(t.width,10))+t.offsetX}},{key:\"drawYAxisAnnotations\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\"apexcharts-yaxis-annotations\"});return e.config.annotations.yaxis.map((function(e,a){t.addYaxisAnnotation(e,i.node,a)})),i}}]),t}(),S=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e,this.helpers=new w(this.annoCtx)}return r(t,[{key:\"addPointAnnotation\",value:function(t,e,i){this.w;var a=this.helpers.getX1X2(\"x1\",t),s=this.helpers.getY1Y2(\"y1\",t);if(x.isNumber(a)){var r={pSize:t.marker.size,pointStrokeWidth:t.marker.strokeWidth,pointFillColor:t.marker.fillColor,pointStrokeColor:t.marker.strokeColor,shape:t.marker.shape,pRadius:t.marker.radius,class:\"apexcharts-point-annotation-marker \".concat(t.marker.cssClass,\" \").concat(t.id?t.id:\"\")},o=this.annoCtx.graphics.drawMarker(a+t.marker.offsetX,s+t.marker.offsetY,r);e.appendChild(o.node);var n=t.label.text?t.label.text:\"\",l=this.annoCtx.graphics.drawText({x:a+t.label.offsetX,y:s+t.label.offsetY-t.marker.size-parseFloat(t.label.style.fontSize)/1.6,text:n,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\"apexcharts-point-annotation-label \".concat(t.label.style.cssClass,\" \").concat(t.id?t.id:\"\")});if(l.attr({rel:i}),e.appendChild(l.node),t.customSVG.SVG){var h=this.annoCtx.graphics.group({class:\"apexcharts-point-annotations-custom-svg \"+t.customSVG.cssClass});h.attr({transform:\"translate(\".concat(a+t.customSVG.offsetX,\", \").concat(s+t.customSVG.offsetY,\")\")}),h.node.innerHTML=t.customSVG.SVG,e.appendChild(h.node)}if(t.image.path){var c=t.image.width?t.image.width:20,d=t.image.height?t.image.height:20;o=this.annoCtx.addImage({x:a+t.image.offsetX-c/2,y:s+t.image.offsetY-d/2,width:c,height:d,path:t.image.path,appendTo:\".apexcharts-point-annotations\"})}t.mouseEnter&&o.node.addEventListener(\"mouseenter\",t.mouseEnter.bind(this,t)),t.mouseLeave&&o.node.addEventListener(\"mouseleave\",t.mouseLeave.bind(this,t)),t.click&&o.node.addEventListener(\"click\",t.click.bind(this,t))}}},{key:\"drawPointAnnotations\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\"apexcharts-point-annotations\"});return e.config.annotations.points.map((function(e,a){t.addPointAnnotation(e,i.node,a)})),i}}]),t}();var C={name:\"en\",options:{months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],toolbar:{exportToSVG:\"Download SVG\",exportToPNG:\"Download PNG\",exportToCSV:\"Download CSV\",menu:\"Menu\",selection:\"Selection\",selectionZoom:\"Selection Zoom\",zoomIn:\"Zoom In\",zoomOut:\"Zoom Out\",pan:\"Panning\",reset:\"Reset Zoom\"}}},L=function(){function t(){a(this,t),this.yAxis={show:!0,showAlways:!1,showForNullSeries:!0,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,logBase:10,tickAmount:void 0,forceNiceScale:!1,max:void 0,min:void 0,floating:!1,decimalsInFloat:void 0,labels:{show:!0,minWidth:0,maxWidth:160,offsetX:0,offsetY:0,align:void 0,rotate:0,padding:20,style:{colors:[],fontSize:\"11px\",fontWeight:400,fontFamily:void 0,cssClass:\"\"},formatter:void 0},axisBorder:{show:!1,color:\"#e0e0e0\",width:1,offsetX:0,offsetY:0},axisTicks:{show:!1,color:\"#e0e0e0\",width:6,offsetX:0,offsetY:0},title:{text:void 0,rotate:-90,offsetY:0,offsetX:0,style:{color:void 0,fontSize:\"11px\",fontWeight:900,fontFamily:void 0,cssClass:\"\"}},tooltip:{enabled:!1,offsetX:0},crosshairs:{show:!0,position:\"front\",stroke:{color:\"#b6b6b6\",width:1,dashArray:0}}},this.pointAnnotation={id:void 0,x:0,y:null,yAxisIndex:0,seriesIndex:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,marker:{size:4,fillColor:\"#fff\",strokeWidth:2,strokeColor:\"#333\",shape:\"circle\",offsetX:0,offsetY:0,radius:2,cssClass:\"\"},label:{borderColor:\"#c2c2c2\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\"middle\",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:\"#fff\",color:void 0,fontSize:\"11px\",fontFamily:void 0,fontWeight:400,cssClass:\"\",padding:{left:5,right:5,top:2,bottom:2}}},customSVG:{SVG:void 0,cssClass:void 0,offsetX:0,offsetY:0},image:{path:void 0,width:20,height:20,offsetX:0,offsetY:0}},this.yAxisAnnotation={id:void 0,y:0,y2:null,strokeDashArray:1,fillColor:\"#c2c2c2\",borderColor:\"#c2c2c2\",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,width:\"100%\",yAxisIndex:0,label:{borderColor:\"#c2c2c2\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\"end\",position:\"right\",offsetX:0,offsetY:-3,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:\"#fff\",color:void 0,fontSize:\"11px\",fontFamily:void 0,fontWeight:400,cssClass:\"\",padding:{left:5,right:5,top:2,bottom:2}}}},this.xAxisAnnotation={id:void 0,x:0,x2:null,strokeDashArray:1,fillColor:\"#c2c2c2\",borderColor:\"#c2c2c2\",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,label:{borderColor:\"#c2c2c2\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\"middle\",orientation:\"vertical\",position:\"top\",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:\"#fff\",color:void 0,fontSize:\"11px\",fontFamily:void 0,fontWeight:400,cssClass:\"\",padding:{left:5,right:5,top:2,bottom:2}}}},this.text={x:0,y:0,text:\"\",textAnchor:\"start\",foreColor:void 0,fontSize:\"13px\",fontFamily:void 0,fontWeight:400,appendTo:\".apexcharts-annotations\",backgroundColor:\"transparent\",borderColor:\"#c2c2c2\",borderRadius:0,borderWidth:0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2}}return r(t,[{key:\"init\",value:function(){return{annotations:{yaxis:[this.yAxisAnnotation],xaxis:[this.xAxisAnnotation],points:[this.pointAnnotation],texts:[],images:[],shapes:[]},chart:{animations:{enabled:!0,easing:\"easeinout\",speed:800,animateGradually:{delay:150,enabled:!0},dynamicAnimation:{enabled:!0,speed:350}},background:\"transparent\",locales:[C],defaultLocale:\"en\",dropShadow:{enabled:!1,enabledOnSeries:void 0,top:2,left:2,blur:4,color:\"#000\",opacity:.35},events:{animationEnd:void 0,beforeMount:void 0,mounted:void 0,updated:void 0,click:void 0,mouseMove:void 0,mouseLeave:void 0,xAxisLabelClick:void 0,legendClick:void 0,markerClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,beforeResetZoom:void 0,zoomed:void 0,scrolled:void 0,brushScrolled:void 0},foreColor:\"#373d3f\",fontFamily:\"Helvetica, Arial, sans-serif\",height:\"auto\",parentHeightOffset:15,redrawOnParentResize:!0,redrawOnWindowResize:!0,id:void 0,group:void 0,offsetX:0,offsetY:0,selection:{enabled:!1,type:\"x\",fill:{color:\"#24292e\",opacity:.1},stroke:{width:1,color:\"#24292e\",opacity:.4,dashArray:3},xaxis:{min:void 0,max:void 0},yaxis:{min:void 0,max:void 0}},sparkline:{enabled:!1},brush:{enabled:!1,autoScaleYaxis:!0,target:void 0},stacked:!1,stackType:\"normal\",toolbar:{show:!0,offsetX:0,offsetY:0,tools:{download:!0,selection:!0,zoom:!0,zoomin:!0,zoomout:!0,pan:!0,reset:!0,customIcons:[]},export:{csv:{filename:void 0,columnDelimiter:\",\",headerCategory:\"category\",headerValue:\"value\",dateFormatter:function(t){return new Date(t).toDateString()}},png:{filename:void 0},svg:{filename:void 0}},autoSelected:\"zoom\"},type:\"line\",width:\"100%\",zoom:{enabled:!0,type:\"x\",autoScaleYaxis:!1,zoomedArea:{fill:{color:\"#90CAF9\",opacity:.4},stroke:{color:\"#0D47A1\",opacity:.4,width:1}}}},plotOptions:{area:{fillTo:\"origin\"},bar:{horizontal:!1,columnWidth:\"70%\",barHeight:\"70%\",distributed:!1,borderRadius:0,borderRadiusApplication:\"around\",borderRadiusWhenStacked:\"last\",rangeBarOverlap:!0,rangeBarGroupRows:!1,hideZeroBarsWhenGrouped:!1,isDumbbell:!1,dumbbellColors:void 0,isFunnel:!1,isFunnel3d:!0,colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1,backgroundBarRadius:0},dataLabels:{position:\"top\",maxItems:100,hideOverflowingLabels:!0,orientation:\"horizontal\",total:{enabled:!1,formatter:void 0,offsetX:0,offsetY:0,style:{color:\"#373d3f\",fontSize:\"12px\",fontFamily:void 0,fontWeight:600}}}},bubble:{zScaling:!0,minBubbleRadius:void 0,maxBubbleRadius:void 0},candlestick:{colors:{upward:\"#00B746\",downward:\"#EF403C\"},wick:{useFillColor:!0}},boxPlot:{colors:{upper:\"#00E396\",lower:\"#008FFB\"}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,reverseNegativeShade:!1,distributed:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},treemap:{enableShades:!0,shadeIntensity:.5,distributed:!1,reverseNegativeShade:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},radialBar:{inverseOrder:!1,startAngle:0,endAngle:360,offsetX:0,offsetY:0,hollow:{margin:5,size:\"50%\",background:\"transparent\",image:void 0,imageWidth:150,imageHeight:150,imageOffsetX:0,imageOffsetY:0,imageClipped:!0,position:\"front\",dropShadow:{enabled:!1,top:0,left:0,blur:3,color:\"#000\",opacity:.5}},track:{show:!0,startAngle:void 0,endAngle:void 0,background:\"#f2f2f2\",strokeWidth:\"97%\",opacity:1,margin:5,dropShadow:{enabled:!1,top:0,left:0,blur:3,color:\"#000\",opacity:.5}},dataLabels:{show:!0,name:{show:!0,fontSize:\"16px\",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:0,formatter:function(t){return t}},value:{show:!0,fontSize:\"14px\",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:16,formatter:function(t){return t+\"%\"}},total:{show:!1,label:\"Total\",fontSize:\"16px\",fontWeight:600,fontFamily:void 0,color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce((function(t,e){return t+e}),0)/t.globals.series.length+\"%\"}}}},pie:{customScale:1,offsetX:0,offsetY:0,startAngle:0,endAngle:360,expandOnClick:!0,dataLabels:{offset:0,minAngleToShowLabel:10},donut:{size:\"65%\",background:\"transparent\",labels:{show:!1,name:{show:!0,fontSize:\"16px\",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:-10,formatter:function(t){return t}},value:{show:!0,fontSize:\"20px\",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:10,formatter:function(t){return t}},total:{show:!1,showAlways:!1,label:\"Total\",fontSize:\"16px\",fontWeight:400,fontFamily:void 0,color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce((function(t,e){return t+e}),0)}}}}},polarArea:{rings:{strokeWidth:1,strokeColor:\"#e8e8e8\"},spokes:{strokeWidth:1,connectorColors:\"#e8e8e8\"}},radar:{size:void 0,offsetX:0,offsetY:0,polygons:{strokeWidth:1,strokeColors:\"#e8e8e8\",connectorColors:\"#e8e8e8\",fill:{colors:void 0}}}},colors:void 0,dataLabels:{enabled:!0,enabledOnSeries:void 0,formatter:function(t){return null!==t?t:\"\"},textAnchor:\"middle\",distributed:!1,offsetX:0,offsetY:0,style:{fontSize:\"12px\",fontFamily:void 0,fontWeight:600,colors:void 0},background:{enabled:!0,foreColor:\"#fff\",borderRadius:2,padding:4,opacity:.9,borderWidth:1,borderColor:\"#fff\",dropShadow:{enabled:!1,top:1,left:1,blur:1,color:\"#000\",opacity:.45}},dropShadow:{enabled:!1,top:1,left:1,blur:1,color:\"#000\",opacity:.45}},fill:{type:\"solid\",colors:void 0,opacity:.85,gradient:{shade:\"dark\",type:\"horizontal\",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},image:{src:[],width:void 0,height:void 0},pattern:{style:\"squares\",width:6,height:6,strokeWidth:2}},forecastDataPoints:{count:0,fillOpacity:.5,strokeWidth:void 0,dashArray:4},grid:{show:!0,borderColor:\"#e0e0e0\",strokeDashArray:0,position:\"back\",xaxis:{lines:{show:!1}},yaxis:{lines:{show:!0}},row:{colors:void 0,opacity:.5},column:{colors:void 0,opacity:.5},padding:{top:0,right:10,bottom:0,left:12}},labels:[],legend:{show:!0,showForSingleSeries:!1,showForNullSeries:!0,showForZeroSeries:!0,floating:!1,position:\"bottom\",horizontalAlign:\"center\",inverseOrder:!1,fontSize:\"12px\",fontFamily:void 0,fontWeight:400,width:void 0,height:void 0,formatter:void 0,tooltipHoverFormatter:void 0,offsetX:-20,offsetY:4,customLegendItems:[],labels:{colors:void 0,useSeriesColors:!1},markers:{width:12,height:12,strokeWidth:0,fillColors:void 0,strokeColor:\"#fff\",radius:12,customHTML:void 0,offsetX:0,offsetY:0,onClick:void 0},itemMargin:{horizontal:5,vertical:2},onItemClick:{toggleDataSeries:!0},onItemHover:{highlightDataSeries:!0}},markers:{discrete:[],size:0,colors:void 0,strokeColors:\"#fff\",strokeWidth:2,strokeOpacity:.9,strokeDashArray:0,fillOpacity:1,shape:\"circle\",width:8,height:8,radius:2,offsetX:0,offsetY:0,onClick:void 0,onDblClick:void 0,showNullDataPoints:!0,hover:{size:void 0,sizeOffset:3}},noData:{text:void 0,align:\"center\",verticalAlign:\"middle\",offsetX:0,offsetY:0,style:{color:void 0,fontSize:\"14px\",fontFamily:void 0}},responsive:[],series:void 0,states:{normal:{filter:{type:\"none\",value:0}},hover:{filter:{type:\"lighten\",value:.1}},active:{allowMultipleDataPointsSelection:!1,filter:{type:\"darken\",value:.5}}},title:{text:void 0,align:\"left\",margin:5,offsetX:0,offsetY:0,floating:!1,style:{fontSize:\"14px\",fontWeight:900,fontFamily:void 0,color:void 0}},subtitle:{text:void 0,align:\"left\",margin:5,offsetX:0,offsetY:30,floating:!1,style:{fontSize:\"12px\",fontWeight:400,fontFamily:void 0,color:void 0}},stroke:{show:!0,curve:\"smooth\",lineCap:\"butt\",width:2,colors:void 0,dashArray:0,fill:{type:\"solid\",colors:void 0,opacity:.85,gradient:{shade:\"dark\",type:\"horizontal\",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]}}},tooltip:{enabled:!0,enabledOnSeries:void 0,shared:!0,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:\"light\",cssClass:\"\",style:{fontSize:\"12px\",fontFamily:void 0},onDatasetHover:{highlightDataSeries:!1},x:{show:!0,format:\"dd MMM\",formatter:void 0},y:{formatter:void 0,title:{formatter:function(t){return t?t+\": \":\"\"}}},z:{formatter:void 0,title:\"Size: \"},marker:{show:!0,fillColors:void 0},items:{display:\"flex\"},fixed:{enabled:!1,position:\"topRight\",offsetX:0,offsetY:0}},xaxis:{type:\"category\",categories:[],convertedCatToNumeric:!1,offsetX:0,offsetY:0,overwriteCategories:void 0,labels:{show:!0,rotate:-45,rotateAlways:!1,hideOverlappingLabels:!0,trim:!1,minHeight:void 0,maxHeight:120,showDuplicates:!0,style:{colors:[],fontSize:\"12px\",fontWeight:400,fontFamily:void 0,cssClass:\"\"},offsetX:0,offsetY:0,format:void 0,formatter:void 0,datetimeUTC:!0,datetimeFormatter:{year:\"yyyy\",month:\"MMM 'yy\",day:\"dd MMM\",hour:\"HH:mm\",minute:\"HH:mm:ss\",second:\"HH:mm:ss\"}},group:{groups:[],style:{colors:[],fontSize:\"12px\",fontWeight:400,fontFamily:void 0,cssClass:\"\"}},axisBorder:{show:!0,color:\"#e0e0e0\",width:\"100%\",height:1,offsetX:0,offsetY:0},axisTicks:{show:!0,color:\"#e0e0e0\",height:6,offsetX:0,offsetY:0},tickAmount:void 0,tickPlacement:\"on\",min:void 0,max:void 0,range:void 0,floating:!1,decimalsInFloat:void 0,position:\"bottom\",title:{text:void 0,offsetX:0,offsetY:0,style:{color:void 0,fontSize:\"12px\",fontWeight:900,fontFamily:void 0,cssClass:\"\"}},crosshairs:{show:!0,width:1,position:\"back\",opacity:.9,stroke:{color:\"#b6b6b6\",width:1,dashArray:3},fill:{type:\"solid\",color:\"#B1B9C4\",gradient:{colorFrom:\"#D8E3F0\",colorTo:\"#BED1E6\",stops:[0,100],opacityFrom:.4,opacityTo:.5}},dropShadow:{enabled:!1,left:0,top:0,blur:1,opacity:.4}},tooltip:{enabled:!0,offsetY:0,formatter:void 0,style:{fontSize:\"12px\",fontFamily:void 0}}},yaxis:this.yAxis,theme:{mode:\"light\",palette:\"palette1\",monochrome:{enabled:!1,color:\"#008FFB\",shadeTo:\"light\",shadeIntensity:.65}}}}}]),t}(),P=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.graphics=new m(this.ctx),this.w.globals.isBarHorizontal&&(this.invertAxis=!0),this.helpers=new w(this),this.xAxisAnnotations=new k(this),this.yAxisAnnotations=new A(this),this.pointsAnnotations=new S(this),this.w.globals.isBarHorizontal&&this.w.config.yaxis[0].reversed&&(this.inversedReversedAxis=!0),this.xDivision=this.w.globals.gridWidth/this.w.globals.dataPoints}return r(t,[{key:\"drawAxesAnnotations\",value:function(){var t=this.w;if(t.globals.axisCharts){for(var e=this.yAxisAnnotations.drawYAxisAnnotations(),i=this.xAxisAnnotations.drawXAxisAnnotations(),a=this.pointsAnnotations.drawPointAnnotations(),s=t.config.chart.animations.enabled,r=[e,i,a],o=[i.node,e.node,a.node],n=0;n<3;n++)t.globals.dom.elGraphical.add(r[n]),!s||t.globals.resized||t.globals.dataChanged||\"scatter\"!==t.config.chart.type&&\"bubble\"!==t.config.chart.type&&t.globals.dataPoints>1&&o[n].classList.add(\"apexcharts-element-hidden\"),t.globals.delayedElements.push({el:o[n],index:0});this.helpers.annotationsBackground()}}},{key:\"drawImageAnnos\",value:function(){var t=this;this.w.config.annotations.images.map((function(e,i){t.addImage(e,i)}))}},{key:\"drawTextAnnos\",value:function(){var t=this;this.w.config.annotations.texts.map((function(e,i){t.addText(e,i)}))}},{key:\"addXaxisAnnotation\",value:function(t,e,i){this.xAxisAnnotations.addXaxisAnnotation(t,e,i)}},{key:\"addYaxisAnnotation\",value:function(t,e,i){this.yAxisAnnotations.addYaxisAnnotation(t,e,i)}},{key:\"addPointAnnotation\",value:function(t,e,i){this.pointsAnnotations.addPointAnnotation(t,e,i)}},{key:\"addText\",value:function(t,e){var i=t.x,a=t.y,s=t.text,r=t.textAnchor,o=t.foreColor,n=t.fontSize,l=t.fontFamily,h=t.fontWeight,c=t.cssClass,d=t.backgroundColor,g=t.borderWidth,u=t.strokeDashArray,p=t.borderRadius,f=t.borderColor,x=t.appendTo,b=void 0===x?\".apexcharts-annotations\":x,v=t.paddingLeft,m=void 0===v?4:v,y=t.paddingRight,w=void 0===y?4:y,k=t.paddingBottom,A=void 0===k?2:k,S=t.paddingTop,C=void 0===S?2:S,L=this.w,P=this.graphics.drawText({x:i,y:a,text:s,textAnchor:r||\"start\",fontSize:n||\"12px\",fontWeight:h||\"regular\",fontFamily:l||L.config.chart.fontFamily,foreColor:o||L.config.chart.foreColor,cssClass:c}),I=L.globals.dom.baseEl.querySelector(b);I&&I.appendChild(P.node);var T=P.bbox();if(s){var M=this.graphics.drawRect(T.x-m,T.y-C,T.width+m+w,T.height+A+C,p,d||\"transparent\",1,g,f,u);I.insertBefore(M.node,P.node)}}},{key:\"addImage\",value:function(t,e){var i=this.w,a=t.path,s=t.x,r=void 0===s?0:s,o=t.y,n=void 0===o?0:o,l=t.width,h=void 0===l?20:l,c=t.height,d=void 0===c?20:c,g=t.appendTo,u=void 0===g?\".apexcharts-annotations\":g,p=i.globals.dom.Paper.image(a);p.size(h,d).move(r,n);var f=i.globals.dom.baseEl.querySelector(u);return f&&f.appendChild(p.node),p}},{key:\"addXaxisAnnotationExternal\",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\"xaxis\",contextMethod:i.addXaxisAnnotation}),i}},{key:\"addYaxisAnnotationExternal\",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\"yaxis\",contextMethod:i.addYaxisAnnotation}),i}},{key:\"addPointAnnotationExternal\",value:function(t,e,i){return void 0===this.invertAxis&&(this.invertAxis=i.w.globals.isBarHorizontal),this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\"point\",contextMethod:i.addPointAnnotation}),i}},{key:\"addAnnotationExternal\",value:function(t){var e=t.params,i=t.pushToMemory,a=t.context,s=t.type,r=t.contextMethod,o=a,n=o.w,l=n.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(s,\"-annotations\")),h=l.childNodes.length+1,c=new L,d=Object.assign({},\"xaxis\"===s?c.xAxisAnnotation:\"yaxis\"===s?c.yAxisAnnotation:c.pointAnnotation),g=x.extend(d,e);switch(s){case\"xaxis\":this.addXaxisAnnotation(g,l,h);break;case\"yaxis\":this.addYaxisAnnotation(g,l,h);break;case\"point\":this.addPointAnnotation(g,l,h)}var u=n.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(s,\"-annotations .apexcharts-\").concat(s,\"-annotation-label[rel='\").concat(h,\"']\")),p=this.helpers.addBackgroundToAnno(u,g);return p&&l.insertBefore(p.node,u),i&&n.globals.memory.methodsToExec.push({context:o,id:g.id?g.id:x.randomId(),method:r,label:\"addAnnotation\",params:e}),a}},{key:\"clearAnnotations\",value:function(t){var e=t.w,i=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations\");e.globals.memory.methodsToExec.map((function(t,i){\"addText\"!==t.label&&\"addAnnotation\"!==t.label||e.globals.memory.methodsToExec.splice(i,1)})),i=x.listToArray(i),Array.prototype.forEach.call(i,(function(t){for(;t.firstChild;)t.removeChild(t.firstChild)}))}},{key:\"removeAnnotation\",value:function(t,e){var i=t.w,a=i.globals.dom.baseEl.querySelectorAll(\".\".concat(e));a&&(i.globals.memory.methodsToExec.map((function(t,a){t.id===e&&i.globals.memory.methodsToExec.splice(a,1)})),Array.prototype.forEach.call(a,(function(t){t.parentElement.removeChild(t)})))}}]),t}(),I=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.months31=[1,3,5,7,8,10,12],this.months30=[2,4,6,9,11],this.daysCntOfYear=[0,31,59,90,120,151,181,212,243,273,304,334]}return r(t,[{key:\"isValidDate\",value:function(t){return!isNaN(this.parseDate(t))}},{key:\"getTimeStamp\",value:function(t){return Date.parse(t)?this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(t).toISOString().substr(0,25)).getTime():new Date(t).getTime():t}},{key:\"getDate\",value:function(t){return this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(t).toUTCString()):new Date(t)}},{key:\"parseDate\",value:function(t){var e=Date.parse(t);if(!isNaN(e))return this.getTimeStamp(t);var i=Date.parse(t.replace(/-/g,\"/\").replace(/[a-z]+/gi,\" \"));return i=this.getTimeStamp(i)}},{key:\"parseDateWithTimezone\",value:function(t){return Date.parse(t.replace(/-/g,\"/\").replace(/[a-z]+/gi,\" \"))}},{key:\"formatDate\",value:function(t,e){var i=this.w.globals.locale,a=this.w.config.xaxis.labels.datetimeUTC,s=[\"\\0\"].concat(u(i.months)),r=[\"\\x01\"].concat(u(i.shortMonths)),o=[\"\\x02\"].concat(u(i.days)),n=[\"\\x03\"].concat(u(i.shortDays));function l(t,e){var i=t+\"\";for(e=e||2;i.length<e;)i=\"0\"+i;return i}var h=a?t.getUTCFullYear():t.getFullYear();e=(e=(e=e.replace(/(^|[^\\\\])yyyy+/g,\"$1\"+h)).replace(/(^|[^\\\\])yy/g,\"$1\"+h.toString().substr(2,2))).replace(/(^|[^\\\\])y/g,\"$1\"+h);var c=(a?t.getUTCMonth():t.getMonth())+1;e=(e=(e=(e=e.replace(/(^|[^\\\\])MMMM+/g,\"$1\"+s[0])).replace(/(^|[^\\\\])MMM/g,\"$1\"+r[0])).replace(/(^|[^\\\\])MM/g,\"$1\"+l(c))).replace(/(^|[^\\\\])M/g,\"$1\"+c);var d=a?t.getUTCDate():t.getDate();e=(e=(e=(e=e.replace(/(^|[^\\\\])dddd+/g,\"$1\"+o[0])).replace(/(^|[^\\\\])ddd/g,\"$1\"+n[0])).replace(/(^|[^\\\\])dd/g,\"$1\"+l(d))).replace(/(^|[^\\\\])d/g,\"$1\"+d);var g=a?t.getUTCHours():t.getHours(),p=g>12?g-12:0===g?12:g;e=(e=(e=(e=e.replace(/(^|[^\\\\])HH+/g,\"$1\"+l(g))).replace(/(^|[^\\\\])H/g,\"$1\"+g)).replace(/(^|[^\\\\])hh+/g,\"$1\"+l(p))).replace(/(^|[^\\\\])h/g,\"$1\"+p);var f=a?t.getUTCMinutes():t.getMinutes();e=(e=e.replace(/(^|[^\\\\])mm+/g,\"$1\"+l(f))).replace(/(^|[^\\\\])m/g,\"$1\"+f);var x=a?t.getUTCSeconds():t.getSeconds();e=(e=e.replace(/(^|[^\\\\])ss+/g,\"$1\"+l(x))).replace(/(^|[^\\\\])s/g,\"$1\"+x);var b=a?t.getUTCMilliseconds():t.getMilliseconds();e=e.replace(/(^|[^\\\\])fff+/g,\"$1\"+l(b,3)),b=Math.round(b/10),e=e.replace(/(^|[^\\\\])ff/g,\"$1\"+l(b)),b=Math.round(b/10);var v=g<12?\"AM\":\"PM\";e=(e=(e=e.replace(/(^|[^\\\\])f/g,\"$1\"+b)).replace(/(^|[^\\\\])TT+/g,\"$1\"+v)).replace(/(^|[^\\\\])T/g,\"$1\"+v.charAt(0));var m=v.toLowerCase();e=(e=e.replace(/(^|[^\\\\])tt+/g,\"$1\"+m)).replace(/(^|[^\\\\])t/g,\"$1\"+m.charAt(0));var y=-t.getTimezoneOffset(),w=a||!y?\"Z\":y>0?\"+\":\"-\";if(!a){var k=(y=Math.abs(y))%60;w+=l(Math.floor(y/60))+\":\"+l(k)}e=e.replace(/(^|[^\\\\])K/g,\"$1\"+w);var A=(a?t.getUTCDay():t.getDay())+1;return e=(e=(e=(e=(e=e.replace(new RegExp(o[0],\"g\"),o[A])).replace(new RegExp(n[0],\"g\"),n[A])).replace(new RegExp(s[0],\"g\"),s[c])).replace(new RegExp(r[0],\"g\"),r[c])).replace(/\\\\(.)/g,\"$1\")}},{key:\"getTimeUnitsfromTimestamp\",value:function(t,e,i){var a=this.w;void 0!==a.config.xaxis.min&&(t=a.config.xaxis.min),void 0!==a.config.xaxis.max&&(e=a.config.xaxis.max);var s=this.getDate(t),r=this.getDate(e),o=this.formatDate(s,\"yyyy MM dd HH mm ss fff\").split(\" \"),n=this.formatDate(r,\"yyyy MM dd HH mm ss fff\").split(\" \");return{minMillisecond:parseInt(o[6],10),maxMillisecond:parseInt(n[6],10),minSecond:parseInt(o[5],10),maxSecond:parseInt(n[5],10),minMinute:parseInt(o[4],10),maxMinute:parseInt(n[4],10),minHour:parseInt(o[3],10),maxHour:parseInt(n[3],10),minDate:parseInt(o[2],10),maxDate:parseInt(n[2],10),minMonth:parseInt(o[1],10)-1,maxMonth:parseInt(n[1],10)-1,minYear:parseInt(o[0],10),maxYear:parseInt(n[0],10)}}},{key:\"isLeapYear\",value:function(t){return t%4==0&&t%100!=0||t%400==0}},{key:\"calculcateLastDaysOfMonth\",value:function(t,e,i){return this.determineDaysOfMonths(t,e)-i}},{key:\"determineDaysOfYear\",value:function(t){var e=365;return this.isLeapYear(t)&&(e=366),e}},{key:\"determineRemainingDaysOfYear\",value:function(t,e,i){var a=this.daysCntOfYear[e]+i;return e>1&&this.isLeapYear()&&a++,a}},{key:\"determineDaysOfMonths\",value:function(t,e){var i=30;switch(t=x.monthMod(t),!0){case this.months30.indexOf(t)>-1:2===t&&(i=this.isLeapYear(e)?29:28);break;case this.months31.indexOf(t)>-1:default:i=31}return i}}]),t}(),T=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.tooltipKeyFormat=\"dd MMM\"}return r(t,[{key:\"xLabelFormat\",value:function(t,e,i,a){var s=this.w;if(\"datetime\"===s.config.xaxis.type&&void 0===s.config.xaxis.labels.formatter&&void 0===s.config.tooltip.x.formatter){var r=new I(this.ctx);return r.formatDate(r.getDate(e),s.config.tooltip.x.format)}return t(e,i,a)}},{key:\"defaultGeneralFormatter\",value:function(t){return Array.isArray(t)?t.map((function(t){return t})):t}},{key:\"defaultYFormatter\",value:function(t,e,i){var a=this.w;return x.isNumber(t)&&(t=0!==a.globals.yValueDecimal?t.toFixed(void 0!==e.decimalsInFloat?e.decimalsInFloat:a.globals.yValueDecimal):a.globals.maxYArr[i]-a.globals.minYArr[i]<5?t.toFixed(1):t.toFixed(0)),t}},{key:\"setLabelFormatters\",value:function(){var t=this,e=this.w;return e.globals.xaxisTooltipFormatter=function(e){return t.defaultGeneralFormatter(e)},e.globals.ttKeyFormatter=function(e){return t.defaultGeneralFormatter(e)},e.globals.ttZFormatter=function(t){return t},e.globals.legendFormatter=function(e){return t.defaultGeneralFormatter(e)},void 0!==e.config.xaxis.labels.formatter?e.globals.xLabelFormatter=e.config.xaxis.labels.formatter:e.globals.xLabelFormatter=function(t){if(x.isNumber(t)){if(!e.config.xaxis.convertedCatToNumeric&&\"numeric\"===e.config.xaxis.type){if(x.isNumber(e.config.xaxis.decimalsInFloat))return t.toFixed(e.config.xaxis.decimalsInFloat);var i=e.globals.maxX-e.globals.minX;return i>0&&i<100?t.toFixed(1):t.toFixed(0)}if(e.globals.isBarHorizontal)if(e.globals.maxY-e.globals.minYArr<4)return t.toFixed(1);return t.toFixed(0)}return t},\"function\"==typeof e.config.tooltip.x.formatter?e.globals.ttKeyFormatter=e.config.tooltip.x.formatter:e.globals.ttKeyFormatter=e.globals.xLabelFormatter,\"function\"==typeof e.config.xaxis.tooltip.formatter&&(e.globals.xaxisTooltipFormatter=e.config.xaxis.tooltip.formatter),(Array.isArray(e.config.tooltip.y)||void 0!==e.config.tooltip.y.formatter)&&(e.globals.ttVal=e.config.tooltip.y),void 0!==e.config.tooltip.z.formatter&&(e.globals.ttZFormatter=e.config.tooltip.z.formatter),void 0!==e.config.legend.formatter&&(e.globals.legendFormatter=e.config.legend.formatter),e.config.yaxis.forEach((function(i,a){void 0!==i.labels.formatter?e.globals.yLabelFormatters[a]=i.labels.formatter:e.globals.yLabelFormatters[a]=function(s){return e.globals.xyCharts?Array.isArray(s)?s.map((function(e){return t.defaultYFormatter(e,i,a)})):t.defaultYFormatter(s,i,a):s}})),e.globals}},{key:\"heatmapLabelFormatters\",value:function(){var t=this.w;if(\"heatmap\"===t.config.chart.type){t.globals.yAxisScale[0].result=t.globals.seriesNames.slice();var e=t.globals.seriesNames.reduce((function(t,e){return t.length>e.length?t:e}),0);t.globals.yAxisScale[0].niceMax=e,t.globals.yAxisScale[0].niceMin=e}}}]),t}(),M=function(t){var e,i=t.isTimeline,a=t.ctx,s=t.seriesIndex,r=t.dataPointIndex,o=t.y1,n=t.y2,l=t.w,h=l.globals.seriesRangeStart[s][r],c=l.globals.seriesRangeEnd[s][r],d=l.globals.labels[r],g=l.config.series[s].name?l.config.series[s].name:\"\",u=l.globals.ttKeyFormatter,p=l.config.tooltip.y.title.formatter,f={w:l,seriesIndex:s,dataPointIndex:r,start:h,end:c};(\"function\"==typeof p&&(g=p(g,f)),null!==(e=l.config.series[s].data[r])&&void 0!==e&&e.x&&(d=l.config.series[s].data[r].x),i)||\"datetime\"===l.config.xaxis.type&&(d=new T(a).xLabelFormat(l.globals.ttKeyFormatter,d,d,{i:void 0,dateFormatter:new I(a).formatDate,w:l}));\"function\"==typeof u&&(d=u(d,f)),Number.isFinite(o)&&Number.isFinite(n)&&(h=o,c=n);var x=\"\",b=\"\",v=l.globals.colors[s];if(void 0===l.config.tooltip.x.formatter)if(\"datetime\"===l.config.xaxis.type){var m=new I(a);x=m.formatDate(m.getDate(h),l.config.tooltip.x.format),b=m.formatDate(m.getDate(c),l.config.tooltip.x.format)}else x=h,b=c;else x=l.config.tooltip.x.formatter(h),b=l.config.tooltip.x.formatter(c);return{start:h,end:c,startVal:x,endVal:b,ylabel:d,color:v,seriesName:g}},X=function(t){var e=t.color,i=t.seriesName,a=t.ylabel,s=t.start,r=t.end,o=t.seriesIndex,n=t.dataPointIndex,l=t.ctx.tooltip.tooltipLabels.getFormatters(o);s=l.yLbFormatter(s),r=l.yLbFormatter(r);var h=l.yLbFormatter(t.w.globals.series[o][n]),c='<span class=\"value start-value\">\\n  '.concat(s,'\\n  </span> <span class=\"separator\">-</span> <span class=\"value end-value\">\\n  ').concat(r,\"\\n  </span>\");return'<div class=\"apexcharts-tooltip-rangebar\"><div> <span class=\"series-name\" style=\"color: '+e+'\">'+(i||\"\")+'</span></div><div> <span class=\"category\">'+a+\": </span> \"+(t.w.globals.comboCharts?\"rangeArea\"===t.w.config.series[o].type||\"rangeBar\"===t.w.config.series[o].type?c:\"<span>\".concat(h,\"</span>\"):c)+\" </div></div>\"},z=function(){function t(e){a(this,t),this.opts=e}return r(t,[{key:\"hideYAxis\",value:function(){this.opts.yaxis[0].show=!1,this.opts.yaxis[0].title.text=\"\",this.opts.yaxis[0].axisBorder.show=!1,this.opts.yaxis[0].axisTicks.show=!1,this.opts.yaxis[0].floating=!0}},{key:\"line\",value:function(){return{chart:{animations:{easing:\"swing\"}},dataLabels:{enabled:!1},stroke:{width:5,curve:\"straight\"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}},{key:\"sparkline\",value:function(t){this.hideYAxis();return x.extend(t,{grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}})}},{key:\"bar\",value:function(){return{chart:{stacked:!1,animations:{easing:\"swing\"}},plotOptions:{bar:{dataLabels:{position:\"center\"}}},dataLabels:{style:{colors:[\"#fff\"]},background:{enabled:!1}},stroke:{width:0,lineCap:\"round\"},fill:{opacity:.85},legend:{markers:{shape:\"square\",radius:2,size:8}},tooltip:{shared:!1,intersect:!0},xaxis:{tooltip:{enabled:!1},tickPlacement:\"between\",crosshairs:{width:\"barWidth\",position:\"back\",fill:{type:\"gradient\"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:\"funnel\",value:function(){return this.hideYAxis(),e(e({},this.bar()),{},{chart:{animations:{easing:\"linear\",speed:800,animateGradually:{enabled:!1}}},plotOptions:{bar:{horizontal:!0,borderRadiusApplication:\"around\",borderRadius:0,dataLabels:{position:\"center\"}}},grid:{show:!1,padding:{left:0,right:0}},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}}})}},{key:\"candlestick\",value:function(){var t=this;return{stroke:{width:1,colors:[\"#333\"]},fill:{opacity:1},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(e){var i=e.seriesIndex,a=e.dataPointIndex,s=e.w;return t._getBoxTooltip(s,i,a,[\"Open\",\"High\",\"\",\"Low\",\"Close\"],\"candlestick\")}},states:{active:{filter:{type:\"none\"}}},xaxis:{crosshairs:{width:1}}}}},{key:\"boxPlot\",value:function(){var t=this;return{chart:{animations:{dynamicAnimation:{enabled:!1}}},stroke:{width:1,colors:[\"#24292e\"]},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(e){var i=e.seriesIndex,a=e.dataPointIndex,s=e.w;return t._getBoxTooltip(s,i,a,[\"Minimum\",\"Q1\",\"Median\",\"Q3\",\"Maximum\"],\"boxPlot\")}},markers:{size:5,strokeWidth:1,strokeColors:\"#111\"},xaxis:{crosshairs:{width:1}}}}},{key:\"rangeBar\",value:function(){return{chart:{animations:{animateGradually:!1}},stroke:{width:0,lineCap:\"square\"},plotOptions:{bar:{borderRadius:0,dataLabels:{position:\"center\"}}},dataLabels:{enabled:!1,formatter:function(t,e){e.ctx;var i=e.seriesIndex,a=e.dataPointIndex,s=e.w,r=function(){var t=s.globals.seriesRangeStart[i][a];return s.globals.seriesRangeEnd[i][a]-t};return s.globals.comboCharts?\"rangeBar\"===s.config.series[i].type||\"rangeArea\"===s.config.series[i].type?r():t:r()},background:{enabled:!1},style:{colors:[\"#fff\"]}},markers:{size:10},tooltip:{shared:!1,followCursor:!0,custom:function(t){return t.w.config.plotOptions&&t.w.config.plotOptions.bar&&t.w.config.plotOptions.bar.horizontal?function(t){var i=M(e(e({},t),{},{isTimeline:!0})),a=i.color,s=i.seriesName,r=i.ylabel,o=i.startVal,n=i.endVal;return X(e(e({},t),{},{color:a,seriesName:s,ylabel:r,start:o,end:n}))}(t):function(t){var i=M(t),a=i.color,s=i.seriesName,r=i.ylabel,o=i.start,n=i.end;return X(e(e({},t),{},{color:a,seriesName:s,ylabel:r,start:o,end:n}))}(t)}},xaxis:{tickPlacement:\"between\",tooltip:{enabled:!1},crosshairs:{stroke:{width:0}}}}}},{key:\"dumbbell\",value:function(t){var e,i;return null!==(e=t.plotOptions.bar)&&void 0!==e&&e.barHeight||(t.plotOptions.bar.barHeight=2),null!==(i=t.plotOptions.bar)&&void 0!==i&&i.columnWidth||(t.plotOptions.bar.columnWidth=2),t}},{key:\"area\",value:function(){return{stroke:{width:4,fill:{type:\"solid\",gradient:{inverseColors:!1,shade:\"light\",type:\"vertical\",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}}},fill:{type:\"gradient\",gradient:{inverseColors:!1,shade:\"light\",type:\"vertical\",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}},markers:{size:0,hover:{sizeOffset:6}},tooltip:{followCursor:!1}}}},{key:\"rangeArea\",value:function(){return{stroke:{curve:\"straight\",width:0},fill:{type:\"solid\",opacity:.6},markers:{size:0},states:{hover:{filter:{type:\"none\"}},active:{filter:{type:\"none\"}}},tooltip:{intersect:!1,shared:!0,followCursor:!0,custom:function(t){return function(t){var i=M(t),a=i.color,s=i.seriesName,r=i.ylabel,o=i.start,n=i.end;return X(e(e({},t),{},{color:a,seriesName:s,ylabel:r,start:o,end:n}))}(t)}}}}},{key:\"brush\",value:function(t){return x.extend(t,{chart:{toolbar:{autoSelected:\"selection\",show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1},stroke:{width:1},tooltip:{enabled:!1},xaxis:{tooltip:{enabled:!1}}})}},{key:\"stacked100\",value:function(t){t.dataLabels=t.dataLabels||{},t.dataLabels.formatter=t.dataLabels.formatter||void 0;var e=t.dataLabels.formatter;return t.yaxis.forEach((function(e,i){t.yaxis[i].min=0,t.yaxis[i].max=100})),\"bar\"===t.chart.type&&(t.dataLabels.formatter=e||function(t){return\"number\"==typeof t&&t?t.toFixed(0)+\"%\":t}),t}},{key:\"stackedBars\",value:function(){var t=this.bar();return e(e({},t),{},{plotOptions:e(e({},t.plotOptions),{},{bar:e(e({},t.plotOptions.bar),{},{borderRadiusApplication:\"end\",borderRadiusWhenStacked:\"last\"})})})}},{key:\"convertCatToNumeric\",value:function(t){return t.xaxis.convertedCatToNumeric=!0,t}},{key:\"convertCatToNumericXaxis\",value:function(t,e,i){t.xaxis.type=\"numeric\",t.xaxis.labels=t.xaxis.labels||{},t.xaxis.labels.formatter=t.xaxis.labels.formatter||function(t){return x.isNumber(t)?Math.floor(t):t};var a=t.xaxis.labels.formatter,s=t.xaxis.categories&&t.xaxis.categories.length?t.xaxis.categories:t.labels;return i&&i.length&&(s=i.map((function(t){return Array.isArray(t)?t:String(t)}))),s&&s.length&&(t.xaxis.labels.formatter=function(t){return x.isNumber(t)?a(s[Math.floor(t)-1]):a(t)}),t.xaxis.categories=[],t.labels=[],t.xaxis.tickAmount=t.xaxis.tickAmount||\"dataPoints\",t}},{key:\"bubble\",value:function(){return{dataLabels:{style:{colors:[\"#fff\"]}},tooltip:{shared:!1,intersect:!0},xaxis:{crosshairs:{width:0}},fill:{type:\"solid\",gradient:{shade:\"light\",inverse:!0,shadeIntensity:.55,opacityFrom:.4,opacityTo:.8}}}}},{key:\"scatter\",value:function(){return{dataLabels:{enabled:!1},tooltip:{shared:!1,intersect:!0},markers:{size:6,strokeWidth:1,hover:{sizeOffset:2}}}}},{key:\"heatmap\",value:function(){return{chart:{stacked:!1},fill:{opacity:1},dataLabels:{style:{colors:[\"#fff\"]}},stroke:{colors:[\"#fff\"]},tooltip:{followCursor:!0,marker:{show:!1},x:{show:!1}},legend:{position:\"top\",markers:{shape:\"square\",size:10,offsetY:2}},grid:{padding:{right:20}}}}},{key:\"treemap\",value:function(){return{chart:{zoom:{enabled:!1}},dataLabels:{style:{fontSize:14,fontWeight:600,colors:[\"#fff\"]}},stroke:{show:!0,width:2,colors:[\"#fff\"]},legend:{show:!1},fill:{gradient:{stops:[0,100]}},tooltip:{followCursor:!0,x:{show:!1}},grid:{padding:{left:0,right:0}},xaxis:{crosshairs:{show:!1},tooltip:{enabled:!1}}}}},{key:\"pie\",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(t){return t.toFixed(1)+\"%\"},style:{colors:[\"#fff\"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:[\"#fff\"]},fill:{opacity:1,gradient:{shade:\"light\",stops:[0,100]}},tooltip:{theme:\"dark\",fillSeriesColor:!0},legend:{position:\"right\"}}}},{key:\"donut\",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+\"%\"},style:{colors:[\"#fff\"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:[\"#fff\"]},fill:{opacity:1,gradient:{shade:\"light\",shadeIntensity:.35,stops:[80,100],opacityFrom:1,opacityTo:1}},tooltip:{theme:\"dark\",fillSeriesColor:!0},legend:{position:\"right\"}}}},{key:\"polarArea\",value:function(){return this.opts.yaxis[0].tickAmount=this.opts.yaxis[0].tickAmount?this.opts.yaxis[0].tickAmount:6,{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+\"%\"},enabled:!1},stroke:{show:!0,width:2},fill:{opacity:.7},tooltip:{theme:\"dark\",fillSeriesColor:!0},legend:{position:\"right\"}}}},{key:\"radar\",value:function(){return this.opts.yaxis[0].labels.offsetY=this.opts.yaxis[0].labels.offsetY?this.opts.yaxis[0].labels.offsetY:6,{dataLabels:{enabled:!1,style:{fontSize:\"11px\"}},stroke:{width:2},markers:{size:3,strokeWidth:1,strokeOpacity:1},fill:{opacity:.2},tooltip:{shared:!1,intersect:!0,followCursor:!0},grid:{show:!1},xaxis:{labels:{formatter:function(t){return t},style:{colors:[\"#a8a8a8\"],fontSize:\"11px\"}},tooltip:{enabled:!1},crosshairs:{show:!1}}}}},{key:\"radialBar\",value:function(){return{chart:{animations:{dynamicAnimation:{enabled:!0,speed:800}},toolbar:{show:!1}},fill:{gradient:{shade:\"dark\",shadeIntensity:.4,inverseColors:!1,type:\"diagonal2\",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},legend:{show:!1,position:\"right\"},tooltip:{enabled:!1,fillSeriesColor:!0}}}},{key:\"_getBoxTooltip\",value:function(t,e,i,a,s){var r=t.globals.seriesCandleO[e][i],o=t.globals.seriesCandleH[e][i],n=t.globals.seriesCandleM[e][i],l=t.globals.seriesCandleL[e][i],h=t.globals.seriesCandleC[e][i];return t.config.series[e].type&&t.config.series[e].type!==s?'<div class=\"apexcharts-custom-tooltip\">\\n          '.concat(t.config.series[e].name?t.config.series[e].name:\"series-\"+(e+1),\": <strong>\").concat(t.globals.series[e][i],\"</strong>\\n        </div>\"):'<div class=\"apexcharts-tooltip-box apexcharts-tooltip-'.concat(t.config.chart.type,'\">')+\"<div>\".concat(a[0],': <span class=\"value\">')+r+\"</span></div>\"+\"<div>\".concat(a[1],': <span class=\"value\">')+o+\"</span></div>\"+(n?\"<div>\".concat(a[2],': <span class=\"value\">')+n+\"</span></div>\":\"\")+\"<div>\".concat(a[3],': <span class=\"value\">')+l+\"</span></div>\"+\"<div>\".concat(a[4],': <span class=\"value\">')+h+\"</span></div></div>\"}}]),t}(),E=function(){function t(e){a(this,t),this.opts=e}return r(t,[{key:\"init\",value:function(t){var e=t.responsiveOverride,a=this.opts,s=new L,r=new z(a);this.chartType=a.chart.type,a=this.extendYAxis(a),a=this.extendAnnotations(a);var o=s.init(),n={};if(a&&\"object\"===i(a)){var l,h,c,d,g,u,p,f,b={};b=-1!==[\"line\",\"area\",\"bar\",\"candlestick\",\"boxPlot\",\"rangeBar\",\"rangeArea\",\"bubble\",\"scatter\",\"heatmap\",\"treemap\",\"pie\",\"polarArea\",\"donut\",\"radar\",\"radialBar\"].indexOf(a.chart.type)?r[a.chart.type]():r.line(),null!==(l=a.plotOptions)&&void 0!==l&&null!==(h=l.bar)&&void 0!==h&&h.isFunnel&&(b=r.funnel()),a.chart.stacked&&\"bar\"===a.chart.type&&(b=r.stackedBars()),null!==(c=a.chart.brush)&&void 0!==c&&c.enabled&&(b=r.brush(b)),a.chart.stacked&&\"100%\"===a.chart.stackType&&(a=r.stacked100(a)),null!==(d=a.plotOptions)&&void 0!==d&&null!==(g=d.bar)&&void 0!==g&&g.isDumbbell&&(a=r.dumbbell(a)),this.checkForDarkTheme(window.Apex),this.checkForDarkTheme(a),a.xaxis=a.xaxis||window.Apex.xaxis||{},e||(a.xaxis.convertedCatToNumeric=!1),(null!==(u=(a=this.checkForCatToNumericXAxis(this.chartType,b,a)).chart.sparkline)&&void 0!==u&&u.enabled||null!==(p=window.Apex.chart)&&void 0!==p&&null!==(f=p.sparkline)&&void 0!==f&&f.enabled)&&(b=r.sparkline(b)),n=x.extend(o,b)}var v=x.extend(n,window.Apex);return o=x.extend(v,a),o=this.handleUserInputErrors(o)}},{key:\"checkForCatToNumericXAxis\",value:function(t,e,i){var a,s,r=new z(i),o=(\"bar\"===t||\"boxPlot\"===t)&&(null===(a=i.plotOptions)||void 0===a||null===(s=a.bar)||void 0===s?void 0:s.horizontal),n=\"pie\"===t||\"polarArea\"===t||\"donut\"===t||\"radar\"===t||\"radialBar\"===t||\"heatmap\"===t,l=\"datetime\"!==i.xaxis.type&&\"numeric\"!==i.xaxis.type,h=i.xaxis.tickPlacement?i.xaxis.tickPlacement:e.xaxis&&e.xaxis.tickPlacement;return o||n||!l||\"between\"===h||(i=r.convertCatToNumeric(i)),i}},{key:\"extendYAxis\",value:function(t,e){var i=new L;(void 0===t.yaxis||!t.yaxis||Array.isArray(t.yaxis)&&0===t.yaxis.length)&&(t.yaxis={}),t.yaxis.constructor!==Array&&window.Apex.yaxis&&window.Apex.yaxis.constructor!==Array&&(t.yaxis=x.extend(t.yaxis,window.Apex.yaxis)),t.yaxis.constructor!==Array?t.yaxis=[x.extend(i.yAxis,t.yaxis)]:t.yaxis=x.extendArray(t.yaxis,i.yAxis);var a=!1;t.yaxis.forEach((function(t){t.logarithmic&&(a=!0)}));var s=t.series;return e&&!s&&(s=e.config.series),a&&s.length!==t.yaxis.length&&s.length&&(t.yaxis=s.map((function(e,a){if(e.name||(s[a].name=\"series-\".concat(a+1)),t.yaxis[a])return t.yaxis[a].seriesName=s[a].name,t.yaxis[a];var r=x.extend(i.yAxis,t.yaxis[0]);return r.show=!1,r}))),a&&s.length>1&&s.length!==t.yaxis.length&&console.warn(\"A multi-series logarithmic chart should have equal number of series and y-axes. Please make sure to equalize both.\"),t}},{key:\"extendAnnotations\",value:function(t){return void 0===t.annotations&&(t.annotations={},t.annotations.yaxis=[],t.annotations.xaxis=[],t.annotations.points=[]),t=this.extendYAxisAnnotations(t),t=this.extendXAxisAnnotations(t),t=this.extendPointAnnotations(t)}},{key:\"extendYAxisAnnotations\",value:function(t){var e=new L;return t.annotations.yaxis=x.extendArray(void 0!==t.annotations.yaxis?t.annotations.yaxis:[],e.yAxisAnnotation),t}},{key:\"extendXAxisAnnotations\",value:function(t){var e=new L;return t.annotations.xaxis=x.extendArray(void 0!==t.annotations.xaxis?t.annotations.xaxis:[],e.xAxisAnnotation),t}},{key:\"extendPointAnnotations\",value:function(t){var e=new L;return t.annotations.points=x.extendArray(void 0!==t.annotations.points?t.annotations.points:[],e.pointAnnotation),t}},{key:\"checkForDarkTheme\",value:function(t){t.theme&&\"dark\"===t.theme.mode&&(t.tooltip||(t.tooltip={}),\"light\"!==t.tooltip.theme&&(t.tooltip.theme=\"dark\"),t.chart.foreColor||(t.chart.foreColor=\"#f6f7f8\"),t.chart.background||(t.chart.background=\"#424242\"),t.theme.palette||(t.theme.palette=\"palette4\"))}},{key:\"handleUserInputErrors\",value:function(t){var e=t;if(e.tooltip.shared&&e.tooltip.intersect)throw new Error(\"tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.\");if(\"bar\"===e.chart.type&&e.plotOptions.bar.horizontal){if(e.yaxis.length>1)throw new Error(\"Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false\");e.yaxis[0].reversed&&(e.yaxis[0].opposite=!0),e.xaxis.tooltip.enabled=!1,e.yaxis[0].tooltip.enabled=!1,e.chart.zoom.enabled=!1}return\"bar\"!==e.chart.type&&\"rangeBar\"!==e.chart.type||e.tooltip.shared&&\"barWidth\"===e.xaxis.crosshairs.width&&e.series.length>1&&(e.xaxis.crosshairs.width=\"tickWidth\"),\"candlestick\"!==e.chart.type&&\"boxPlot\"!==e.chart.type||e.yaxis[0].reversed&&(console.warn(\"Reversed y-axis in \".concat(e.chart.type,\" chart is not supported.\")),e.yaxis[0].reversed=!1),e}}]),t}(),Y=function(){function t(){a(this,t)}return r(t,[{key:\"initGlobalVars\",value:function(t){t.series=[],t.seriesCandleO=[],t.seriesCandleH=[],t.seriesCandleM=[],t.seriesCandleL=[],t.seriesCandleC=[],t.seriesRangeStart=[],t.seriesRangeEnd=[],t.seriesRange=[],t.seriesPercent=[],t.seriesGoals=[],t.seriesX=[],t.seriesZ=[],t.seriesNames=[],t.seriesTotals=[],t.seriesLog=[],t.seriesColors=[],t.stackedSeriesTotals=[],t.seriesXvalues=[],t.seriesYvalues=[],t.labels=[],t.hasXaxisGroups=!1,t.groups=[],t.hasSeriesGroups=!1,t.seriesGroups=[],t.categoryLabels=[],t.timescaleLabels=[],t.noLabelsProvided=!1,t.resizeTimer=null,t.selectionResizeTimer=null,t.delayedElements=[],t.pointsArray=[],t.dataLabelsRects=[],t.isXNumeric=!1,t.skipLastTimelinelabel=!1,t.skipFirstTimelinelabel=!1,t.isDataXYZ=!1,t.isMultiLineX=!1,t.isMultipleYAxis=!1,t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE,t.minYArr=[],t.maxYArr=[],t.maxX=-Number.MAX_VALUE,t.minX=Number.MAX_VALUE,t.initialMaxX=-Number.MAX_VALUE,t.initialMinX=Number.MAX_VALUE,t.maxDate=0,t.minDate=Number.MAX_VALUE,t.minZ=Number.MAX_VALUE,t.maxZ=-Number.MAX_VALUE,t.minXDiff=Number.MAX_VALUE,t.yAxisScale=[],t.xAxisScale=null,t.xAxisTicksPositions=[],t.yLabelsCoords=[],t.yTitleCoords=[],t.barPadForNumericAxis=0,t.padHorizontal=0,t.xRange=0,t.yRange=[],t.zRange=0,t.dataPoints=0,t.xTickAmount=0}},{key:\"globalVars\",value:function(t){return{chartID:null,cuid:null,events:{beforeMount:[],mounted:[],updated:[],clicked:[],selection:[],dataPointSelection:[],zoomed:[],scrolled:[]},colors:[],clientX:null,clientY:null,fill:{colors:[]},stroke:{colors:[]},dataLabels:{style:{colors:[]}},radarPolygons:{fill:{colors:[]}},markers:{colors:[],size:t.markers.size,largestSize:0},animationEnded:!1,isTouchDevice:\"ontouchstart\"in window||navigator.msMaxTouchPoints,isDirty:!1,isExecCalled:!1,initialConfig:null,initialSeries:[],lastXAxis:[],lastYAxis:[],columnSeries:null,labels:[],timescaleLabels:[],noLabelsProvided:!1,allSeriesCollapsed:!1,collapsedSeries:[],collapsedSeriesIndices:[],ancillaryCollapsedSeries:[],ancillaryCollapsedSeriesIndices:[],risingSeries:[],dataFormatXNumeric:!1,capturedSeriesIndex:-1,capturedDataPointIndex:-1,selectedDataPoints:[],goldenPadding:35,invalidLogScale:!1,ignoreYAxisIndexes:[],yAxisSameScaleIndices:[],maxValsInArrayIndex:0,radialSize:0,selection:void 0,zoomEnabled:\"zoom\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.zoom&&t.chart.zoom.enabled,panEnabled:\"pan\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.pan,selectionEnabled:\"selection\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.selection,yaxis:null,mousedown:!1,lastClientPosition:{},visibleXRange:void 0,yValueDecimal:0,total:0,SVGNS:\"http://www.w3.org/2000/svg\",svgWidth:0,svgHeight:0,noData:!1,locale:{},dom:{},memory:{methodsToExec:[]},shouldAnimate:!0,skipLastTimelinelabel:!1,skipFirstTimelinelabel:!1,delayedElements:[],axisCharts:!0,isDataXYZ:!1,resized:!1,resizeTimer:null,comboCharts:!1,dataChanged:!1,previousPaths:[],allSeriesHasEqualX:!0,pointsArray:[],dataLabelsRects:[],lastDrawnDataLabelsIndexes:[],hasNullValues:!1,easing:null,zoomed:!1,gridWidth:0,gridHeight:0,rotateXLabels:!1,defaultLabels:!1,xLabelFormatter:void 0,yLabelFormatters:[],xaxisTooltipFormatter:void 0,ttKeyFormatter:void 0,ttVal:void 0,ttZFormatter:void 0,LINE_HEIGHT_RATIO:1.618,xAxisLabelsHeight:0,xAxisGroupLabelsHeight:0,xAxisLabelsWidth:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null}}},{key:\"init\",value:function(t){var e=this.globalVars(t);return this.initGlobalVars(e),e.initialConfig=x.extend({},t),e.initialSeries=x.clone(t.series),e.lastXAxis=x.clone(e.initialConfig.xaxis),e.lastYAxis=x.clone(e.initialConfig.yaxis),e}}]),t}(),F=function(){function t(e){a(this,t),this.opts=e}return r(t,[{key:\"init\",value:function(){var t=new E(this.opts).init({responsiveOverride:!1});return{config:t,globals:(new Y).init(t)}}}]),t}(),R=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.opts=null,this.seriesIndex=0}return r(t,[{key:\"clippedImgArea\",value:function(t){var e=this.w,i=e.config,a=parseInt(e.globals.gridWidth,10),s=parseInt(e.globals.gridHeight,10),r=a>s?a:s,o=t.image,n=0,l=0;void 0===t.width&&void 0===t.height?void 0!==i.fill.image.width&&void 0!==i.fill.image.height?(n=i.fill.image.width+1,l=i.fill.image.height):(n=r+1,l=r):(n=t.width,l=t.height);var h=document.createElementNS(e.globals.SVGNS,\"pattern\");m.setAttrs(h,{id:t.patternID,patternUnits:t.patternUnits?t.patternUnits:\"userSpaceOnUse\",width:n+\"px\",height:l+\"px\"});var c=document.createElementNS(e.globals.SVGNS,\"image\");h.appendChild(c),c.setAttributeNS(window.SVG.xlink,\"href\",o),m.setAttrs(c,{x:0,y:0,preserveAspectRatio:\"none\",width:n+\"px\",height:l+\"px\"}),c.style.opacity=t.opacity,e.globals.dom.elDefs.node.appendChild(h)}},{key:\"getSeriesIndex\",value:function(t){var e=this.w,i=e.config.chart.type;return(\"bar\"===i||\"rangeBar\"===i)&&e.config.plotOptions.bar.distributed||\"heatmap\"===i||\"treemap\"===i?this.seriesIndex=t.seriesNumber:this.seriesIndex=t.seriesNumber%e.globals.series.length,this.seriesIndex}},{key:\"fillPath\",value:function(t){var e=this.w;this.opts=t;var i,a,s,r=this.w.config;this.seriesIndex=this.getSeriesIndex(t);var o=this.getFillColors()[this.seriesIndex];void 0!==e.globals.seriesColors[this.seriesIndex]&&(o=e.globals.seriesColors[this.seriesIndex]),\"function\"==typeof o&&(o=o({seriesIndex:this.seriesIndex,dataPointIndex:t.dataPointIndex,value:t.value,w:e}));var n=t.fillType?t.fillType:this.getFillType(this.seriesIndex),l=Array.isArray(r.fill.opacity)?r.fill.opacity[this.seriesIndex]:r.fill.opacity;t.color&&(o=t.color);var h=o;if(-1===o.indexOf(\"rgb\")?o.length<9&&(h=x.hexToRgba(o,l)):o.indexOf(\"rgba\")>-1&&(l=x.getOpacityFromRGBA(o)),t.opacity&&(l=t.opacity),\"pattern\"===n&&(a=this.handlePatternFill({fillConfig:t.fillConfig,patternFill:a,fillColor:o,fillOpacity:l,defaultColor:h})),\"gradient\"===n&&(s=this.handleGradientFill({fillConfig:t.fillConfig,fillColor:o,fillOpacity:l,i:this.seriesIndex})),\"image\"===n){var c=r.fill.image.src,d=t.patternID?t.patternID:\"\";this.clippedImgArea({opacity:l,image:Array.isArray(c)?t.seriesNumber<c.length?c[t.seriesNumber]:c[0]:c,width:t.width?t.width:void 0,height:t.height?t.height:void 0,patternUnits:t.patternUnits,patternID:\"pattern\".concat(e.globals.cuid).concat(t.seriesNumber+1).concat(d)}),i=\"url(#pattern\".concat(e.globals.cuid).concat(t.seriesNumber+1).concat(d,\")\")}else i=\"gradient\"===n?s:\"pattern\"===n?a:h;return t.solid&&(i=h),i}},{key:\"getFillType\",value:function(t){var e=this.w;return Array.isArray(e.config.fill.type)?e.config.fill.type[t]:e.config.fill.type}},{key:\"getFillColors\",value:function(){var t=this.w,e=t.config,i=this.opts,a=[];return t.globals.comboCharts?\"line\"===t.config.series[this.seriesIndex].type?Array.isArray(t.globals.stroke.colors)?a=t.globals.stroke.colors:a.push(t.globals.stroke.colors):Array.isArray(t.globals.fill.colors)?a=t.globals.fill.colors:a.push(t.globals.fill.colors):\"line\"===e.chart.type?Array.isArray(t.globals.stroke.colors)?a=t.globals.stroke.colors:a.push(t.globals.stroke.colors):Array.isArray(t.globals.fill.colors)?a=t.globals.fill.colors:a.push(t.globals.fill.colors),void 0!==i.fillColors&&(a=[],Array.isArray(i.fillColors)?a=i.fillColors.slice():a.push(i.fillColors)),a}},{key:\"handlePatternFill\",value:function(t){var e=t.fillConfig,i=t.patternFill,a=t.fillColor,s=t.fillOpacity,r=t.defaultColor,o=this.w.config.fill;e&&(o=e);var n=this.opts,l=new m(this.ctx),h=Array.isArray(o.pattern.strokeWidth)?o.pattern.strokeWidth[this.seriesIndex]:o.pattern.strokeWidth,c=a;Array.isArray(o.pattern.style)?i=void 0!==o.pattern.style[n.seriesNumber]?l.drawPattern(o.pattern.style[n.seriesNumber],o.pattern.width,o.pattern.height,c,h,s):r:i=l.drawPattern(o.pattern.style,o.pattern.width,o.pattern.height,c,h,s);return i}},{key:\"handleGradientFill\",value:function(t){var i=t.fillColor,a=t.fillOpacity,s=t.fillConfig,r=t.i,o=this.w.config.fill;s&&(o=e(e({},o),s));var n,l=this.opts,h=new m(this.ctx),c=new x,d=o.gradient.type,g=i,u=void 0===o.gradient.opacityFrom?a:Array.isArray(o.gradient.opacityFrom)?o.gradient.opacityFrom[r]:o.gradient.opacityFrom;g.indexOf(\"rgba\")>-1&&(u=x.getOpacityFromRGBA(g));var p=void 0===o.gradient.opacityTo?a:Array.isArray(o.gradient.opacityTo)?o.gradient.opacityTo[r]:o.gradient.opacityTo;if(void 0===o.gradient.gradientToColors||0===o.gradient.gradientToColors.length)n=\"dark\"===o.gradient.shade?c.shadeColor(-1*parseFloat(o.gradient.shadeIntensity),i.indexOf(\"rgb\")>-1?x.rgb2hex(i):i):c.shadeColor(parseFloat(o.gradient.shadeIntensity),i.indexOf(\"rgb\")>-1?x.rgb2hex(i):i);else if(o.gradient.gradientToColors[l.seriesNumber]){var f=o.gradient.gradientToColors[l.seriesNumber];n=f,f.indexOf(\"rgba\")>-1&&(p=x.getOpacityFromRGBA(f))}else n=i;if(o.gradient.gradientFrom&&(g=o.gradient.gradientFrom),o.gradient.gradientTo&&(n=o.gradient.gradientTo),o.gradient.inverseColors){var b=g;g=n,n=b}return g.indexOf(\"rgb\")>-1&&(g=x.rgb2hex(g)),n.indexOf(\"rgb\")>-1&&(n=x.rgb2hex(n)),h.drawGradient(d,g,n,u,p,l.size,o.gradient.stops,o.gradient.colorStops,r)}}]),t}(),H=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"setGlobalMarkerSize\",value:function(){var t=this.w;if(t.globals.markers.size=Array.isArray(t.config.markers.size)?t.config.markers.size:[t.config.markers.size],t.globals.markers.size.length>0){if(t.globals.markers.size.length<t.globals.series.length+1)for(var e=0;e<=t.globals.series.length;e++)void 0===t.globals.markers.size[e]&&t.globals.markers.size.push(t.globals.markers.size[0])}else t.globals.markers.size=t.config.series.map((function(e){return t.config.markers.size}))}},{key:\"plotChartMarkers\",value:function(t,e,i,a){var s,r=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=this.w,n=e,l=t,h=null,c=new m(this.ctx),d=o.config.markers.discrete&&o.config.markers.discrete.length;if((o.globals.markers.size[e]>0||r||d)&&(h=c.group({class:r||d?\"\":\"apexcharts-series-markers\"})).attr(\"clip-path\",\"url(#gridRectMarkerMask\".concat(o.globals.cuid,\")\")),Array.isArray(l.x))for(var g=0;g<l.x.length;g++){var u=i;1===i&&0===g&&(u=0),1===i&&1===g&&(u=1);var p=\"apexcharts-marker\";if(\"line\"!==o.config.chart.type&&\"area\"!==o.config.chart.type||o.globals.comboCharts||o.config.tooltip.intersect||(p+=\" no-pointer-events\"),(Array.isArray(o.config.markers.size)?o.globals.markers.size[e]>0:o.config.markers.size>0)||r||d){x.isNumber(l.y[g])?p+=\" w\".concat(x.randomId()):p=\"apexcharts-nullpoint\";var f=this.getMarkerConfig({cssClass:p,seriesIndex:e,dataPointIndex:u});o.config.series[n].data[u]&&(o.config.series[n].data[u].fillColor&&(f.pointFillColor=o.config.series[n].data[u].fillColor),o.config.series[n].data[u].strokeColor&&(f.pointStrokeColor=o.config.series[n].data[u].strokeColor)),a&&(f.pSize=a),(l.x[g]<0||l.x[g]>o.globals.gridWidth||l.y[g]<0||l.y[g]>o.globals.gridHeight)&&(f.pSize=0),(s=c.drawMarker(l.x[g],l.y[g],f)).attr(\"rel\",u),s.attr(\"j\",u),s.attr(\"index\",e),s.node.setAttribute(\"default-marker-size\",f.pSize),new v(this.ctx).setSelectionFilter(s,e,u),this.addEvents(s),h&&h.add(s)}else void 0===o.globals.pointsArray[e]&&(o.globals.pointsArray[e]=[]),o.globals.pointsArray[e].push([l.x[g],l.y[g]])}return h}},{key:\"getMarkerConfig\",value:function(t){var e=t.cssClass,i=t.seriesIndex,a=t.dataPointIndex,s=void 0===a?null:a,r=t.finishRadius,o=void 0===r?null:r,n=this.w,l=this.getMarkerStyle(i),h=n.globals.markers.size[i],c=n.config.markers;return null!==s&&c.discrete.length&&c.discrete.map((function(t){t.seriesIndex===i&&t.dataPointIndex===s&&(l.pointStrokeColor=t.strokeColor,l.pointFillColor=t.fillColor,h=t.size,l.pointShape=t.shape)})),{pSize:null===o?h:o,pRadius:c.radius,width:Array.isArray(c.width)?c.width[i]:c.width,height:Array.isArray(c.height)?c.height[i]:c.height,pointStrokeWidth:Array.isArray(c.strokeWidth)?c.strokeWidth[i]:c.strokeWidth,pointStrokeColor:l.pointStrokeColor,pointFillColor:l.pointFillColor,shape:l.pointShape||(Array.isArray(c.shape)?c.shape[i]:c.shape),class:e,pointStrokeOpacity:Array.isArray(c.strokeOpacity)?c.strokeOpacity[i]:c.strokeOpacity,pointStrokeDashArray:Array.isArray(c.strokeDashArray)?c.strokeDashArray[i]:c.strokeDashArray,pointFillOpacity:Array.isArray(c.fillOpacity)?c.fillOpacity[i]:c.fillOpacity,seriesIndex:i}}},{key:\"addEvents\",value:function(t){var e=this.w,i=new m(this.ctx);t.node.addEventListener(\"mouseenter\",i.pathMouseEnter.bind(this.ctx,t)),t.node.addEventListener(\"mouseleave\",i.pathMouseLeave.bind(this.ctx,t)),t.node.addEventListener(\"mousedown\",i.pathMouseDown.bind(this.ctx,t)),t.node.addEventListener(\"click\",e.config.markers.onClick),t.node.addEventListener(\"dblclick\",e.config.markers.onDblClick),t.node.addEventListener(\"touchstart\",i.pathMouseDown.bind(this.ctx,t),{passive:!0})}},{key:\"getMarkerStyle\",value:function(t){var e=this.w,i=e.globals.markers.colors,a=e.config.markers.strokeColor||e.config.markers.strokeColors;return{pointStrokeColor:Array.isArray(a)?a[t]:a,pointFillColor:Array.isArray(i)?i[t]:i}}}]),t}(),D=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled}return r(t,[{key:\"draw\",value:function(t,e,i){var a=this.w,s=new m(this.ctx),r=i.realIndex,o=i.pointsPos,n=i.zRatio,l=i.elParent,h=s.group({class:\"apexcharts-series-markers apexcharts-series-\".concat(a.config.chart.type)});if(h.attr(\"clip-path\",\"url(#gridRectMarkerMask\".concat(a.globals.cuid,\")\")),Array.isArray(o.x))for(var c=0;c<o.x.length;c++){var d=e+1,g=!0;0===e&&0===c&&(d=0),0===e&&1===c&&(d=1);var u=0,p=a.globals.markers.size[r];if(n!==1/0){var f=a.config.plotOptions.bubble;p=a.globals.seriesZ[r][d],f.zScaling&&(p/=n),f.minBubbleRadius&&p<f.minBubbleRadius&&(p=f.minBubbleRadius),f.maxBubbleRadius&&p>f.maxBubbleRadius&&(p=f.maxBubbleRadius)}a.config.chart.animations.enabled||(u=p);var x=o.x[c],b=o.y[c];if(u=u||0,null!==b&&void 0!==a.globals.series[r][d]||(g=!1),g){var v=this.drawPoint(x,b,u,p,r,d,e);h.add(v)}l.add(h)}}},{key:\"drawPoint\",value:function(t,e,i,a,s,r,o){var n=this.w,l=s,h=new b(this.ctx),c=new v(this.ctx),d=new R(this.ctx),g=new H(this.ctx),u=new m(this.ctx),p=g.getMarkerConfig({cssClass:\"apexcharts-marker\",seriesIndex:l,dataPointIndex:r,finishRadius:\"bubble\"===n.config.chart.type||n.globals.comboCharts&&n.config.series[s]&&\"bubble\"===n.config.series[s].type?a:null});a=p.pSize;var f,x=d.fillPath({seriesNumber:s,dataPointIndex:r,color:p.pointFillColor,patternUnits:\"objectBoundingBox\",value:n.globals.series[s][o]});if(\"circle\"===p.shape?f=u.drawCircle(i):\"square\"!==p.shape&&\"rect\"!==p.shape||(f=u.drawRect(0,0,p.width-p.pointStrokeWidth/2,p.height-p.pointStrokeWidth/2,p.pRadius)),n.config.series[l].data[r]&&n.config.series[l].data[r].fillColor&&(x=n.config.series[l].data[r].fillColor),f.attr({x:t-p.width/2-p.pointStrokeWidth/2,y:e-p.height/2-p.pointStrokeWidth/2,cx:t,cy:e,fill:x,\"fill-opacity\":p.pointFillOpacity,stroke:p.pointStrokeColor,r:a,\"stroke-width\":p.pointStrokeWidth,\"stroke-dasharray\":p.pointStrokeDashArray,\"stroke-opacity\":p.pointStrokeOpacity}),n.config.chart.dropShadow.enabled){var y=n.config.chart.dropShadow;c.dropShadow(f,y,s)}if(!this.initialAnim||n.globals.dataChanged||n.globals.resized)n.globals.animationEnded=!0;else{var w=n.config.chart.animations.speed;h.animateMarker(f,0,\"circle\"===p.shape?a:{width:p.width,height:p.height},w,n.globals.easing,(function(){window.setTimeout((function(){h.animationCompleted(f)}),100)}))}if(n.globals.dataChanged&&\"circle\"===p.shape)if(this.dynamicAnim){var k,A,S,C,L=n.config.chart.animations.dynamicAnimation.speed;null!=(C=n.globals.previousPaths[s]&&n.globals.previousPaths[s][o])&&(k=C.x,A=C.y,S=void 0!==C.r?C.r:a);for(var P=0;P<n.globals.collapsedSeries.length;P++)n.globals.collapsedSeries[P].index===s&&(L=1,a=0);0===t&&0===e&&(a=0),h.animateCircle(f,{cx:k,cy:A,r:S},{cx:t,cy:e,r:a},L,n.globals.easing)}else f.attr({r:a});return f.attr({rel:r,j:r,index:s,\"default-marker-size\":a}),c.setSelectionFilter(f,s,r),g.addEvents(f),f.node.classList.add(\"apexcharts-marker\"),f}},{key:\"centerTextInBubble\",value:function(t){var e=this.w;return{y:t+=parseInt(e.config.dataLabels.style.fontSize,10)/4}}}]),t}(),O=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"dataLabelsCorrection\",value:function(t,e,i,a,s,r,o){var n=this.w,l=!1,h=new m(this.ctx).getTextRects(i,o),c=h.width,d=h.height;e<0&&(e=0),e>n.globals.gridHeight+d&&(e=n.globals.gridHeight+d/2),void 0===n.globals.dataLabelsRects[a]&&(n.globals.dataLabelsRects[a]=[]),n.globals.dataLabelsRects[a].push({x:t,y:e,width:c,height:d});var g=n.globals.dataLabelsRects[a].length-2,u=void 0!==n.globals.lastDrawnDataLabelsIndexes[a]?n.globals.lastDrawnDataLabelsIndexes[a][n.globals.lastDrawnDataLabelsIndexes[a].length-1]:0;if(void 0!==n.globals.dataLabelsRects[a][g]){var p=n.globals.dataLabelsRects[a][u];(t>p.x+p.width+2||e>p.y+p.height+2||t+c<p.x)&&(l=!0)}return(0===s||r)&&(l=!0),{x:t,y:e,textRects:h,drawnextLabel:l}}},{key:\"drawDataLabel\",value:function(t){var e=this,i=t.type,a=t.pos,s=t.i,r=t.j,o=t.isRangeStart,n=t.strokeWidth,l=void 0===n?2:n,h=this.w,c=new m(this.ctx),d=h.config.dataLabels,g=0,u=0,p=r,f=null;if(!d.enabled||!Array.isArray(a.x))return f;f=c.group({class:\"apexcharts-data-labels\"});for(var x=0;x<a.x.length;x++)if(g=a.x[x]+d.offsetX,u=a.y[x]+d.offsetY+l,!isNaN(g)){1===r&&0===x&&(p=0),1===r&&1===x&&(p=1);var b=h.globals.series[s][p];\"rangeArea\"===i&&(b=o?h.globals.seriesRangeStart[s][p]:h.globals.seriesRangeEnd[s][p]);var v=\"\",y=function(t){return h.config.dataLabels.formatter(t,{ctx:e.ctx,seriesIndex:s,dataPointIndex:p,w:h})};if(\"bubble\"===h.config.chart.type)v=y(b=h.globals.seriesZ[s][p]),u=a.y[x],u=new D(this.ctx).centerTextInBubble(u,s,p).y;else void 0!==b&&(v=y(b));this.plotDataLabelsText({x:g,y:u,text:v,i:s,j:p,parent:f,offsetCorrection:!0,dataLabelsConfig:h.config.dataLabels})}return f}},{key:\"plotDataLabelsText\",value:function(t){var e=this.w,i=new m(this.ctx),a=t.x,s=t.y,r=t.i,o=t.j,n=t.text,l=t.textAnchor,h=t.fontSize,c=t.parent,d=t.dataLabelsConfig,g=t.color,u=t.alwaysDrawDataLabel,p=t.offsetCorrection;if(!(Array.isArray(e.config.dataLabels.enabledOnSeries)&&e.config.dataLabels.enabledOnSeries.indexOf(r)<0)){var f={x:a,y:s,drawnextLabel:!0,textRects:null};p&&(f=this.dataLabelsCorrection(a,s,n,r,o,u,parseInt(d.style.fontSize,10))),e.globals.zoomed||(a=f.x,s=f.y),f.textRects&&(a<-10-f.textRects.width||a>e.globals.gridWidth+f.textRects.width+10)&&(n=\"\");var x=e.globals.dataLabels.style.colors[r];((\"bar\"===e.config.chart.type||\"rangeBar\"===e.config.chart.type)&&e.config.plotOptions.bar.distributed||e.config.dataLabels.distributed)&&(x=e.globals.dataLabels.style.colors[o]),\"function\"==typeof x&&(x=x({series:e.globals.series,seriesIndex:r,dataPointIndex:o,w:e})),g&&(x=g);var b=d.offsetX,y=d.offsetY;if(\"bar\"!==e.config.chart.type&&\"rangeBar\"!==e.config.chart.type||(b=0,y=0),f.drawnextLabel){var w=i.drawText({width:100,height:parseInt(d.style.fontSize,10),x:a+b,y:s+y,foreColor:x,textAnchor:l||d.textAnchor,text:n,fontSize:h||d.style.fontSize,fontFamily:d.style.fontFamily,fontWeight:d.style.fontWeight||\"normal\"});if(w.attr({class:\"apexcharts-datalabel\",cx:a,cy:s}),d.dropShadow.enabled){var k=d.dropShadow;new v(this.ctx).dropShadow(w,k)}c.add(w),void 0===e.globals.lastDrawnDataLabelsIndexes[r]&&(e.globals.lastDrawnDataLabelsIndexes[r]=[]),e.globals.lastDrawnDataLabelsIndexes[r].push(o)}}}},{key:\"addBackgroundToDataLabel\",value:function(t,e){var i=this.w,a=i.config.dataLabels.background,s=a.padding,r=a.padding/2,o=e.width,n=e.height,l=new m(this.ctx).drawRect(e.x-s,e.y-r/2,o+2*s,n+r,a.borderRadius,\"transparent\"===i.config.chart.background?\"#fff\":i.config.chart.background,a.opacity,a.borderWidth,a.borderColor);a.dropShadow.enabled&&new v(this.ctx).dropShadow(l,a.dropShadow);return l}},{key:\"dataLabelsBackground\",value:function(){var t=this.w;if(\"bubble\"!==t.config.chart.type)for(var e=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-datalabels text\"),i=0;i<e.length;i++){var a=e[i],s=a.getBBox(),r=null;if(s.width&&s.height&&(r=this.addBackgroundToDataLabel(a,s)),r){a.parentNode.insertBefore(r.node,a);var o=a.getAttribute(\"fill\");t.config.chart.animations.enabled&&!t.globals.resized&&!t.globals.dataChanged?r.animate().attr({fill:o}):r.attr({fill:o}),a.setAttribute(\"fill\",t.config.dataLabels.background.foreColor)}}}},{key:\"bringForward\",value:function(){for(var t=this.w,e=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-datalabels\"),i=t.globals.dom.baseEl.querySelector(\".apexcharts-plot-series:last-child\"),a=0;a<e.length;a++)i&&i.insertBefore(e[a],i.nextSibling)}}]),t}(),N=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.legendInactiveClass=\"legend-mouseover-inactive\"}return r(t,[{key:\"getAllSeriesEls\",value:function(){return this.w.globals.dom.baseEl.getElementsByClassName(\"apexcharts-series\")}},{key:\"getSeriesByName\",value:function(t){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-inner .apexcharts-series[seriesName='\".concat(x.escapeString(t),\"']\"))}},{key:\"isSeriesHidden\",value:function(t){var e=this.getSeriesByName(t),i=parseInt(e.getAttribute(\"data:realIndex\"),10);return{isHidden:e.classList.contains(\"apexcharts-series-collapsed\"),realIndex:i}}},{key:\"addCollapsedClassToSeries\",value:function(t,e){var i=this.w;function a(i){for(var a=0;a<i.length;a++)i[a].index===e&&t.node.classList.add(\"apexcharts-series-collapsed\")}a(i.globals.collapsedSeries),a(i.globals.ancillaryCollapsedSeries)}},{key:\"toggleSeries\",value:function(t){var e=this.isSeriesHidden(t);return this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,e.isHidden),e.isHidden}},{key:\"showSeries\",value:function(t){var e=this.isSeriesHidden(t);e.isHidden&&this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,!0)}},{key:\"hideSeries\",value:function(t){var e=this.isSeriesHidden(t);e.isHidden||this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,!1)}},{key:\"resetSeries\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=this.w,s=x.clone(a.globals.initialSeries);a.globals.previousPaths=[],i?(a.globals.collapsedSeries=[],a.globals.ancillaryCollapsedSeries=[],a.globals.collapsedSeriesIndices=[],a.globals.ancillaryCollapsedSeriesIndices=[]):s=this.emptyCollapsedSeries(s),a.config.series=s,t&&(e&&(a.globals.zoomed=!1,this.ctx.updateHelpers.revertDefaultAxisMinMax()),this.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled))}},{key:\"emptyCollapsedSeries\",value:function(t){for(var e=this.w,i=0;i<t.length;i++)e.globals.collapsedSeriesIndices.indexOf(i)>-1&&(t[i].data=[]);return t}},{key:\"toggleSeriesOnHover\",value:function(t,e){var i=this.w;e||(e=t.target);var a=i.globals.dom.baseEl.querySelectorAll(\".apexcharts-series, .apexcharts-datalabels\");if(\"mousemove\"===t.type){var s=parseInt(e.getAttribute(\"rel\"),10)-1,r=null,o=null;i.globals.axisCharts||\"radialBar\"===i.config.chart.type?i.globals.axisCharts?(r=i.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(s,\"']\")),o=i.globals.dom.baseEl.querySelector(\".apexcharts-datalabels[data\\\\:realIndex='\".concat(s,\"']\"))):r=i.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(s+1,\"']\")):r=i.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(s+1,\"'] path\"));for(var n=0;n<a.length;n++)a[n].classList.add(this.legendInactiveClass);null!==r&&(i.globals.axisCharts||r.parentNode.classList.remove(this.legendInactiveClass),r.classList.remove(this.legendInactiveClass),null!==o&&o.classList.remove(this.legendInactiveClass))}else if(\"mouseout\"===t.type)for(var l=0;l<a.length;l++)a[l].classList.remove(this.legendInactiveClass)}},{key:\"highlightRangeInSeries\",value:function(t,e){var i=this,a=this.w,s=a.globals.dom.baseEl.getElementsByClassName(\"apexcharts-heatmap-rect\"),r=function(t){for(var e=0;e<s.length;e++)s[e].classList[t](i.legendInactiveClass)};if(\"mousemove\"===t.type){var o=parseInt(e.getAttribute(\"rel\"),10)-1;r(\"add\"),function(t){for(var e=0;e<s.length;e++){var a=parseInt(s[e].getAttribute(\"val\"),10);a>=t.from&&a<=t.to&&s[e].classList.remove(i.legendInactiveClass)}}(a.config.plotOptions.heatmap.colorScale.ranges[o])}else\"mouseout\"===t.type&&r(\"remove\")}},{key:\"getActiveConfigSeriesIndex\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"asc\",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=this.w,a=0;if(i.config.series.length>1)for(var s=i.config.series.map((function(t,a){return t.data&&t.data.length>0&&-1===i.globals.collapsedSeriesIndices.indexOf(a)&&(!i.globals.comboCharts||0===e.length||e.length&&e.indexOf(i.config.series[a].type)>-1)?a:-1})),r=\"asc\"===t?0:s.length-1;\"asc\"===t?r<s.length:r>=0;\"asc\"===t?r++:r--)if(-1!==s[r]){a=s[r];break}return a}},{key:\"getBarSeriesIndices\",value:function(){return this.w.globals.comboCharts?this.w.config.series.map((function(t,e){return\"bar\"===t.type||\"column\"===t.type?e:-1})).filter((function(t){return-1!==t})):this.w.config.series.map((function(t,e){return e}))}},{key:\"getPreviousPaths\",value:function(){var t=this.w;function e(e,i,a){for(var s=e[i].childNodes,r={type:a,paths:[],realIndex:e[i].getAttribute(\"data:realIndex\")},o=0;o<s.length;o++)if(s[o].hasAttribute(\"pathTo\")){var n=s[o].getAttribute(\"pathTo\");r.paths.push({d:n})}t.globals.previousPaths.push(r)}t.globals.previousPaths=[];[\"line\",\"area\",\"bar\",\"rangebar\",\"rangeArea\",\"candlestick\",\"radar\"].forEach((function(i){for(var a,s=(a=i,t.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(a,\"-series .apexcharts-series\"))),r=0;r<s.length;r++)e(s,r,i)})),this.handlePrevBubbleScatterPaths(\"bubble\"),this.handlePrevBubbleScatterPaths(\"scatter\");var i=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t.config.chart.type,\" .apexcharts-series\"));if(i.length>0)for(var a=function(e){for(var i=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t.config.chart.type,\" .apexcharts-series[data\\\\:realIndex='\").concat(e,\"'] rect\")),a=[],s=function(t){var e=function(e){return i[t].getAttribute(e)},s={x:parseFloat(e(\"x\")),y:parseFloat(e(\"y\")),width:parseFloat(e(\"width\")),height:parseFloat(e(\"height\"))};a.push({rect:s,color:i[t].getAttribute(\"color\")})},r=0;r<i.length;r++)s(r);t.globals.previousPaths.push(a)},s=0;s<i.length;s++)a(s);t.globals.axisCharts||(t.globals.previousPaths=t.globals.series)}},{key:\"handlePrevBubbleScatterPaths\",value:function(t){var e=this.w,i=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t,\"-series .apexcharts-series\"));if(i.length>0)for(var a=0;a<i.length;a++){for(var s=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t,\"-series .apexcharts-series[data\\\\:realIndex='\").concat(a,\"'] circle\")),r=[],o=0;o<s.length;o++)r.push({x:s[o].getAttribute(\"cx\"),y:s[o].getAttribute(\"cy\"),r:s[o].getAttribute(\"r\")});e.globals.previousPaths.push(r)}}},{key:\"clearPreviousPaths\",value:function(){var t=this.w;t.globals.previousPaths=[],t.globals.allSeriesCollapsed=!1}},{key:\"handleNoData\",value:function(){var t=this.w,e=t.config.noData,i=new m(this.ctx),a=t.globals.svgWidth/2,s=t.globals.svgHeight/2,r=\"middle\";if(t.globals.noData=!0,t.globals.animationEnded=!0,\"left\"===e.align?(a=10,r=\"start\"):\"right\"===e.align&&(a=t.globals.svgWidth-10,r=\"end\"),\"top\"===e.verticalAlign?s=50:\"bottom\"===e.verticalAlign&&(s=t.globals.svgHeight-50),a+=e.offsetX,s=s+parseInt(e.style.fontSize,10)+2+e.offsetY,void 0!==e.text&&\"\"!==e.text){var o=i.drawText({x:a,y:s,text:e.text,textAnchor:r,fontSize:e.style.fontSize,fontFamily:e.style.fontFamily,foreColor:e.style.color,opacity:1,class:\"apexcharts-text-nodata\"});t.globals.dom.Paper.add(o)}}},{key:\"setNullSeriesToZeroValues\",value:function(t){for(var e=this.w,i=0;i<t.length;i++)if(0===t[i].length)for(var a=0;a<t[e.globals.maxValsInArrayIndex].length;a++)t[i].push(0);return t}},{key:\"hasAllSeriesEqualX\",value:function(){for(var t=!0,e=this.w,i=this.filteredSeriesX(),a=0;a<i.length-1;a++)if(i[a][0]!==i[a+1][0]){t=!1;break}return e.globals.allSeriesHasEqualX=t,t}},{key:\"filteredSeriesX\",value:function(){var t=this.w.globals.seriesX.map((function(t){return t.length>0?t:[]}));return t}}]),t}(),W=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[],this.seriesGoals=[],this.coreUtils=new y(this.ctx)}return r(t,[{key:\"isMultiFormat\",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:\"isFormatXY\",value:function(){var t=this.w.config.series.slice(),e=new N(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&null!==t[this.activeSeriesIndex].data[0]&&void 0!==t[this.activeSeriesIndex].data[0].x&&null!==t[this.activeSeriesIndex].data[0])return!0}},{key:\"isFormat2DArray\",value:function(){var t=this.w.config.series.slice(),e=new N(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&void 0!==t[this.activeSeriesIndex].data[0]&&null!==t[this.activeSeriesIndex].data[0]&&t[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:\"handleFormat2DArray\",value:function(t,e){for(var i=this.w.config,a=this.w.globals,s=\"boxPlot\"===i.chart.type||\"boxPlot\"===i.series[e].type,r=0;r<t[e].data.length;r++)if(void 0!==t[e].data[r][1]&&(Array.isArray(t[e].data[r][1])&&4===t[e].data[r][1].length&&!s?this.twoDSeries.push(x.parseNumber(t[e].data[r][1][3])):t[e].data[r].length>=5?this.twoDSeries.push(x.parseNumber(t[e].data[r][4])):this.twoDSeries.push(x.parseNumber(t[e].data[r][1])),a.dataFormatXNumeric=!0),\"datetime\"===i.xaxis.type){var o=new Date(t[e].data[r][0]);o=new Date(o).getTime(),this.twoDSeriesX.push(o)}else this.twoDSeriesX.push(t[e].data[r][0]);for(var n=0;n<t[e].data.length;n++)void 0!==t[e].data[n][2]&&(this.threeDSeries.push(t[e].data[n][2]),a.isDataXYZ=!0)}},{key:\"handleFormatXY\",value:function(t,e){var i=this.w.config,a=this.w.globals,s=new I(this.ctx),r=e;a.collapsedSeriesIndices.indexOf(e)>-1&&(r=this.activeSeriesIndex);for(var o=0;o<t[e].data.length;o++)void 0!==t[e].data[o].y&&(Array.isArray(t[e].data[o].y)?this.twoDSeries.push(x.parseNumber(t[e].data[o].y[t[e].data[o].y.length-1])):this.twoDSeries.push(x.parseNumber(t[e].data[o].y))),void 0!==t[e].data[o].goals&&Array.isArray(t[e].data[o].goals)?(void 0===this.seriesGoals[e]&&(this.seriesGoals[e]=[]),this.seriesGoals[e].push(t[e].data[o].goals)):(void 0===this.seriesGoals[e]&&(this.seriesGoals[e]=[]),this.seriesGoals[e].push(null));for(var n=0;n<t[r].data.length;n++){var l=\"string\"==typeof t[r].data[n].x,h=Array.isArray(t[r].data[n].x),c=!h&&!!s.isValidDate(t[r].data[n].x.toString());if(l||c)if(l||i.xaxis.convertedCatToNumeric){var d=a.isBarHorizontal&&a.isRangeData;\"datetime\"!==i.xaxis.type||d?(this.fallbackToCategory=!0,this.twoDSeriesX.push(t[r].data[n].x)):this.twoDSeriesX.push(s.parseDate(t[r].data[n].x))}else\"datetime\"===i.xaxis.type?this.twoDSeriesX.push(s.parseDate(t[r].data[n].x.toString())):(a.dataFormatXNumeric=!0,a.isXNumeric=!0,this.twoDSeriesX.push(parseFloat(t[r].data[n].x)));else h?(this.fallbackToCategory=!0,this.twoDSeriesX.push(t[r].data[n].x)):(a.isXNumeric=!0,a.dataFormatXNumeric=!0,this.twoDSeriesX.push(t[r].data[n].x))}if(t[e].data[0]&&void 0!==t[e].data[0].z){for(var g=0;g<t[e].data.length;g++)this.threeDSeries.push(t[e].data[g].z);a.isDataXYZ=!0}}},{key:\"handleRangeData\",value:function(t,e){var i=this.w.globals,a={};return this.isFormat2DArray()?a=this.handleRangeDataFormat(\"array\",t,e):this.isFormatXY()&&(a=this.handleRangeDataFormat(\"xy\",t,e)),i.seriesRangeStart.push(a.start),i.seriesRangeEnd.push(a.end),i.seriesRange.push(a.rangeUniques),i.seriesRange.forEach((function(t,e){t&&t.forEach((function(t,e){t.y.forEach((function(e,i){for(var a=0;a<t.y.length;a++)if(i!==a){var s=e.y1,r=e.y2,o=t.y[a].y1;s<=t.y[a].y2&&o<=r&&(t.overlaps.indexOf(e.rangeName)<0&&t.overlaps.push(e.rangeName),t.overlaps.indexOf(t.y[a].rangeName)<0&&t.overlaps.push(t.y[a].rangeName))}}))}))})),a}},{key:\"handleCandleStickBoxData\",value:function(t,e){var i=this.w.globals,a={};return this.isFormat2DArray()?a=this.handleCandleStickBoxDataFormat(\"array\",t,e):this.isFormatXY()&&(a=this.handleCandleStickBoxDataFormat(\"xy\",t,e)),i.seriesCandleO[e]=a.o,i.seriesCandleH[e]=a.h,i.seriesCandleM[e]=a.m,i.seriesCandleL[e]=a.l,i.seriesCandleC[e]=a.c,a}},{key:\"handleRangeDataFormat\",value:function(t,e,i){var a=[],s=[],r=e[i].data.filter((function(t,e,i){return e===i.findIndex((function(e){return e.x===t.x}))})).map((function(t,e){return{x:t.x,overlaps:[],y:[]}}));if(\"array\"===t)for(var o=0;o<e[i].data.length;o++)Array.isArray(e[i].data[o])?(a.push(e[i].data[o][1][0]),s.push(e[i].data[o][1][1])):(a.push(e[i].data[o]),s.push(e[i].data[o]));else if(\"xy\"===t)for(var n=function(t){var o=Array.isArray(e[i].data[t].y),n=x.randomId(),l=e[i].data[t].x,h={y1:o?e[i].data[t].y[0]:e[i].data[t].y,y2:o?e[i].data[t].y[1]:e[i].data[t].y,rangeName:n};e[i].data[t].rangeName=n;var c=r.findIndex((function(t){return t.x===l}));r[c].y.push(h),a.push(h.y1),s.push(h.y2)},l=0;l<e[i].data.length;l++)n(l);return{start:a,end:s,rangeUniques:r}}},{key:\"handleCandleStickBoxDataFormat\",value:function(t,e,i){var a=this.w,s=\"boxPlot\"===a.config.chart.type||\"boxPlot\"===a.config.series[i].type,r=[],o=[],n=[],l=[],h=[];if(\"array\"===t)if(s&&6===e[i].data[0].length||!s&&5===e[i].data[0].length)for(var c=0;c<e[i].data.length;c++)r.push(e[i].data[c][1]),o.push(e[i].data[c][2]),s?(n.push(e[i].data[c][3]),l.push(e[i].data[c][4]),h.push(e[i].data[c][5])):(l.push(e[i].data[c][3]),h.push(e[i].data[c][4]));else for(var d=0;d<e[i].data.length;d++)Array.isArray(e[i].data[d][1])&&(r.push(e[i].data[d][1][0]),o.push(e[i].data[d][1][1]),s?(n.push(e[i].data[d][1][2]),l.push(e[i].data[d][1][3]),h.push(e[i].data[d][1][4])):(l.push(e[i].data[d][1][2]),h.push(e[i].data[d][1][3])));else if(\"xy\"===t)for(var g=0;g<e[i].data.length;g++)Array.isArray(e[i].data[g].y)&&(r.push(e[i].data[g].y[0]),o.push(e[i].data[g].y[1]),s?(n.push(e[i].data[g].y[2]),l.push(e[i].data[g].y[3]),h.push(e[i].data[g].y[4])):(l.push(e[i].data[g].y[2]),h.push(e[i].data[g].y[3])));return{o:r,h:o,m:n,l:l,c:h}}},{key:\"parseDataAxisCharts\",value:function(t){var e,i=this,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.ctx,s=this.w.config,r=this.w.globals,o=new I(a),n=s.labels.length>0?s.labels.slice():s.xaxis.categories.slice();if(r.isRangeBar=\"rangeBar\"===s.chart.type&&r.isBarHorizontal,r.hasXaxisGroups=\"category\"===s.xaxis.type&&s.xaxis.group.groups.length>0,r.hasXaxisGroups&&(r.groups=s.xaxis.group.groups),r.hasSeriesGroups=null===(e=t[0])||void 0===e?void 0:e.group,r.hasSeriesGroups){var l=[],h=u(new Set(t.map((function(t){return t.group}))));t.forEach((function(t,e){var i=h.indexOf(t.group);l[i]||(l[i]=[]),l[i].push(t.name)})),r.seriesGroups=l}for(var c=function(){for(var t=0;t<n.length;t++)if(\"string\"==typeof n[t]){if(!o.isValidDate(n[t]))throw new Error(\"You have provided invalid Date format. Please provide a valid JavaScript Date\");i.twoDSeriesX.push(o.parseDate(n[t]))}else i.twoDSeriesX.push(n[t])},d=0;d<t.length;d++){if(this.twoDSeries=[],this.twoDSeriesX=[],this.threeDSeries=[],void 0===t[d].data)return void console.error(\"It is a possibility that you may have not included 'data' property in series.\");if(\"rangeBar\"!==s.chart.type&&\"rangeArea\"!==s.chart.type&&\"rangeBar\"!==t[d].type&&\"rangeArea\"!==t[d].type||(r.isRangeData=!0,r.isComboCharts?\"rangeBar\"!==t[d].type&&\"rangeArea\"!==t[d].type||this.handleRangeData(t,d):\"rangeBar\"!==s.chart.type&&\"rangeArea\"!==s.chart.type||this.handleRangeData(t,d)),this.isMultiFormat())this.isFormat2DArray()?this.handleFormat2DArray(t,d):this.isFormatXY()&&this.handleFormatXY(t,d),\"candlestick\"!==s.chart.type&&\"candlestick\"!==t[d].type&&\"boxPlot\"!==s.chart.type&&\"boxPlot\"!==t[d].type||this.handleCandleStickBoxData(t,d),r.series.push(this.twoDSeries),r.labels.push(this.twoDSeriesX),r.seriesX.push(this.twoDSeriesX),r.seriesGoals=this.seriesGoals,d!==this.activeSeriesIndex||this.fallbackToCategory||(r.isXNumeric=!0);else{\"datetime\"===s.xaxis.type?(r.isXNumeric=!0,c(),r.seriesX.push(this.twoDSeriesX)):\"numeric\"===s.xaxis.type&&(r.isXNumeric=!0,n.length>0&&(this.twoDSeriesX=n,r.seriesX.push(this.twoDSeriesX))),r.labels.push(this.twoDSeriesX);var g=t[d].data.map((function(t){return x.parseNumber(t)}));r.series.push(g)}r.seriesZ.push(this.threeDSeries),void 0!==t[d].name?r.seriesNames.push(t[d].name):r.seriesNames.push(\"series-\"+parseInt(d+1,10)),void 0!==t[d].color?r.seriesColors.push(t[d].color):r.seriesColors.push(void 0)}return this.w}},{key:\"parseDataNonAxisCharts\",value:function(t){var e=this.w.globals,i=this.w.config;e.series=t.slice(),e.seriesNames=i.labels.slice();for(var a=0;a<e.series.length;a++)void 0===e.seriesNames[a]&&e.seriesNames.push(\"series-\"+(a+1));return this.w}},{key:\"handleExternalLabelsData\",value:function(t){var e=this.w.config,i=this.w.globals;if(e.xaxis.categories.length>0)i.labels=e.xaxis.categories;else if(e.labels.length>0)i.labels=e.labels.slice();else if(this.fallbackToCategory){if(i.labels=i.labels[0],i.seriesRange.length&&(i.seriesRange.map((function(t){t.forEach((function(t){i.labels.indexOf(t.x)<0&&t.x&&i.labels.push(t.x)}))})),i.labels=Array.from(new Set(i.labels.map(JSON.stringify)),JSON.parse)),e.xaxis.convertedCatToNumeric)new z(e).convertCatToNumericXaxis(e,this.ctx,i.seriesX[0]),this._generateExternalLabels(t)}else this._generateExternalLabels(t)}},{key:\"_generateExternalLabels\",value:function(t){var e=this.w.globals,i=this.w.config,a=[];if(e.axisCharts){if(e.series.length>0)if(this.isFormatXY())for(var s=i.series.map((function(t,e){return t.data.filter((function(t,e,i){return i.findIndex((function(e){return e.x===t.x}))===e}))})),r=s.reduce((function(t,e,i,a){return a[t].length>e.length?t:i}),0),o=0;o<s[r].length;o++)a.push(o+1);else for(var n=0;n<e.series[e.maxValsInArrayIndex].length;n++)a.push(n+1);e.seriesX=[];for(var l=0;l<t.length;l++)e.seriesX.push(a);e.isXNumeric=!0}if(0===a.length){a=e.axisCharts?[]:e.series.map((function(t,e){return e+1}));for(var h=0;h<t.length;h++)e.seriesX.push(a)}e.labels=a,i.xaxis.convertedCatToNumeric&&(e.categoryLabels=a.map((function(t){return i.xaxis.labels.formatter(t)}))),e.noLabelsProvided=!0}},{key:\"parseData\",value:function(t){var e=this.w,i=e.config,a=e.globals;if(this.excludeCollapsedSeriesInYAxis(),this.fallbackToCategory=!1,this.ctx.core.resetGlobals(),this.ctx.core.isMultipleY(),a.axisCharts?(this.parseDataAxisCharts(t),this.coreUtils.getLargestSeries()):this.parseDataNonAxisCharts(t),i.chart.stacked){var s=new N(this.ctx);a.series=s.setNullSeriesToZeroValues(a.series)}this.coreUtils.getSeriesTotals(),a.axisCharts&&(a.stackedSeriesTotals=this.coreUtils.getStackedSeriesTotals()),this.coreUtils.getPercentSeries(),a.dataFormatXNumeric||a.isXNumeric&&(\"numeric\"!==i.xaxis.type||0!==i.labels.length||0!==i.xaxis.categories.length)||this.handleExternalLabelsData(t);for(var r=this.coreUtils.getCategoryLabels(a.labels),o=0;o<r.length;o++)if(Array.isArray(r[o])){a.isMultiLineX=!0;break}}},{key:\"excludeCollapsedSeriesInYAxis\",value:function(){var t=this,e=this.w;e.globals.ignoreYAxisIndexes=e.globals.collapsedSeries.map((function(i,a){if(t.w.globals.isMultipleYAxis&&!e.config.chart.stacked)return i.index}))}}]),t}(),B=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"getLabel\",value:function(t,e,i,a){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"12px\",o=!(arguments.length>6&&void 0!==arguments[6])||arguments[6],n=this.w,l=void 0===t[a]?\"\":t[a],h=l,c=n.globals.xLabelFormatter,d=n.config.xaxis.labels.formatter,g=!1,u=new T(this.ctx),p=l;o&&(h=u.xLabelFormat(c,l,p,{i:a,dateFormatter:new I(this.ctx).formatDate,w:n}),void 0!==d&&(h=d(l,t[a],{i:a,dateFormatter:new I(this.ctx).formatDate,w:n})));var f,x;e.length>0?(f=e[a].unit,x=null,e.forEach((function(t){\"month\"===t.unit?x=\"year\":\"day\"===t.unit?x=\"month\":\"hour\"===t.unit?x=\"day\":\"minute\"===t.unit&&(x=\"hour\")})),g=x===f,i=e[a].position,h=e[a].value):\"datetime\"===n.config.xaxis.type&&void 0===d&&(h=\"\"),void 0===h&&(h=\"\"),h=Array.isArray(h)?h:h.toString();var b=new m(this.ctx),v={};v=n.globals.rotateXLabels&&o?b.getTextRects(h,parseInt(r,10),null,\"rotate(\".concat(n.config.xaxis.labels.rotate,\" 0 0)\"),!1):b.getTextRects(h,parseInt(r,10));var y=!n.config.xaxis.labels.showDuplicates&&this.ctx.timeScale;return!Array.isArray(h)&&(0===h.indexOf(\"NaN\")||0===h.toLowerCase().indexOf(\"invalid\")||h.toLowerCase().indexOf(\"infinity\")>=0||s.indexOf(h)>=0&&y)&&(h=\"\"),{x:i,text:h,textRect:v,isBold:g}}},{key:\"checkLabelBasedOnTickamount\",value:function(t,e,i){var a=this.w,s=a.config.xaxis.tickAmount;return\"dataPoints\"===s&&(s=Math.round(a.globals.gridWidth/120)),s>i||t%Math.round(i/(s+1))==0||(e.text=\"\"),e}},{key:\"checkForOverflowingLabels\",value:function(t,e,i,a,s){var r=this.w;if(0===t&&r.globals.skipFirstTimelinelabel&&(e.text=\"\"),t===i-1&&r.globals.skipLastTimelinelabel&&(e.text=\"\"),r.config.xaxis.labels.hideOverlappingLabels&&a.length>0){var o=s[s.length-1];e.x<o.textRect.width/(r.globals.rotateXLabels?Math.abs(r.config.xaxis.labels.rotate)/12:1.01)+o.x&&(e.text=\"\")}return e}},{key:\"checkForReversedLabels\",value:function(t,e){var i=this.w;return i.config.yaxis[t]&&i.config.yaxis[t].reversed&&e.reverse(),e}},{key:\"isYAxisHidden\",value:function(t){var e=this.w,i=new y(this.ctx);return!e.config.yaxis[t].show||!e.config.yaxis[t].showForNullSeries&&i.isSeriesNull(t)&&-1===e.globals.collapsedSeriesIndices.indexOf(t)}},{key:\"getYAxisForeColor\",value:function(t,e){var i=this.w;return Array.isArray(t)&&i.globals.yAxisScale[e]&&this.ctx.theme.pushExtraColors(t,i.globals.yAxisScale[e].result.length,!1),t}},{key:\"drawYAxisTicks\",value:function(t,e,i,a,s,r,o){var n=this.w,l=new m(this.ctx),h=n.globals.translateY;if(a.show&&e>0){!0===n.config.yaxis[s].opposite&&(t+=a.width);for(var c=e;c>=0;c--){var d=h+e/10+n.config.yaxis[s].labels.offsetY-1;n.globals.isBarHorizontal&&(d=r*c),\"heatmap\"===n.config.chart.type&&(d+=r/2);var g=l.drawLine(t+i.offsetX-a.width+a.offsetX,d+a.offsetY,t+i.offsetX+a.offsetX,d+a.offsetY,a.color);o.add(g),h+=r}}}}]),t}(),G=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"scaleSvgNode\",value:function(t,e){var i=parseFloat(t.getAttributeNS(null,\"width\")),a=parseFloat(t.getAttributeNS(null,\"height\"));t.setAttributeNS(null,\"width\",i*e),t.setAttributeNS(null,\"height\",a*e),t.setAttributeNS(null,\"viewBox\",\"0 0 \"+i+\" \"+a)}},{key:\"fixSvgStringForIe11\",value:function(t){if(!x.isIE11())return t.replace(/&nbsp;/g,\"&#160;\");var e=0,i=t.replace(/xmlns=\"http:\\/\\/www.w3.org\\/2000\\/svg\"/g,(function(t){return 2===++e?'xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:svgjs=\"http://svgjs.dev\"':t}));return i=(i=i.replace(/xmlns:NS\\d+=\"\"/g,\"\")).replace(/NS\\d+:(\\w+:\\w+=\")/g,\"$1\")}},{key:\"getSvgString\",value:function(t){null==t&&(t=1);var e=this.w.globals.dom.Paper.svg();if(1!==t){var i=this.w.globals.dom.Paper.node.cloneNode(!0);this.scaleSvgNode(i,t),e=(new XMLSerializer).serializeToString(i)}return this.fixSvgStringForIe11(e)}},{key:\"cleanup\",value:function(){var t=this.w,e=t.globals.dom.baseEl.getElementsByClassName(\"apexcharts-xcrosshairs\"),i=t.globals.dom.baseEl.getElementsByClassName(\"apexcharts-ycrosshairs\"),a=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-zoom-rect, .apexcharts-selection-rect\");Array.prototype.forEach.call(a,(function(t){t.setAttribute(\"width\",0)})),e&&e[0]&&(e[0].setAttribute(\"x\",-500),e[0].setAttribute(\"x1\",-500),e[0].setAttribute(\"x2\",-500)),i&&i[0]&&(i[0].setAttribute(\"y\",-100),i[0].setAttribute(\"y1\",-100),i[0].setAttribute(\"y2\",-100))}},{key:\"svgUrl\",value:function(){this.cleanup();var t=this.getSvgString(),e=new Blob([t],{type:\"image/svg+xml;charset=utf-8\"});return URL.createObjectURL(e)}},{key:\"dataURI\",value:function(t){var e=this;return new Promise((function(i){var a=e.w,s=t?t.scale||t.width/a.globals.svgWidth:1;e.cleanup();var r=document.createElement(\"canvas\");r.width=a.globals.svgWidth*s,r.height=parseInt(a.globals.dom.elWrap.style.height,10)*s;var o=\"transparent\"===a.config.chart.background?\"#fff\":a.config.chart.background,n=r.getContext(\"2d\");n.fillStyle=o,n.fillRect(0,0,r.width*s,r.height*s);var l=e.getSvgString(s);if(window.canvg&&x.isIE11()){var h=window.canvg.Canvg.fromString(n,l,{ignoreClear:!0,ignoreDimensions:!0});h.start();var c=r.msToBlob();h.stop(),i({blob:c})}else{var d=\"data:image/svg+xml,\"+encodeURIComponent(l),g=new Image;g.crossOrigin=\"anonymous\",g.onload=function(){if(n.drawImage(g,0,0),r.msToBlob){var t=r.msToBlob();i({blob:t})}else{var e=r.toDataURL(\"image/png\");i({imgURI:e})}},g.src=d}}))}},{key:\"exportToSVG\",value:function(){this.triggerDownload(this.svgUrl(),this.w.config.chart.toolbar.export.svg.filename,\".svg\")}},{key:\"exportToPng\",value:function(){var t=this;this.dataURI().then((function(e){var i=e.imgURI,a=e.blob;a?navigator.msSaveOrOpenBlob(a,t.w.globals.chartID+\".png\"):t.triggerDownload(i,t.w.config.chart.toolbar.export.png.filename,\".png\")}))}},{key:\"exportToCSV\",value:function(t){var e=this,i=t.series,a=t.fileName,s=t.columnDelimiter,r=void 0===s?\",\":s,o=t.lineDelimiter,n=void 0===o?\"\\n\":o,l=this.w;i||(i=l.config.series);var h=[],c=[],d=\"\",g=l.globals.series.map((function(t,e){return-1===l.globals.collapsedSeriesIndices.indexOf(e)?t:[]})),p=Math.max.apply(Math,u(i.map((function(t){return t.data?t.data.length:0})))),f=new W(this.ctx),b=new B(this.ctx),v=function(t){var i=\"\";if(l.globals.axisCharts){if(\"category\"===l.config.xaxis.type||l.config.xaxis.convertedCatToNumeric)if(l.globals.isBarHorizontal){var a=l.globals.yLabelFormatters[0],s=new N(e.ctx).getActiveConfigSeriesIndex();i=a(l.globals.labels[t],{seriesIndex:s,dataPointIndex:t,w:l})}else i=b.getLabel(l.globals.labels,l.globals.timescaleLabels,0,t).text;\"datetime\"===l.config.xaxis.type&&(l.config.xaxis.categories.length?i=l.config.xaxis.categories[t]:l.config.labels.length&&(i=l.config.labels[t]))}else i=l.config.labels[t];return Array.isArray(i)&&(i=i.join(\" \")),x.isNumber(i)?i:i.split(r).join(\"\")},m=function(t,e){if(h.length&&0===e&&c.push(h.join(r)),t.data){t.data=t.data.length&&t.data||u(Array(p)).map((function(){return\"\"}));for(var a=0;a<t.data.length;a++){h=[];var s=v(a);if(s||(f.isFormatXY()?s=i[e].data[a].x:f.isFormat2DArray()&&(s=i[e].data[a]?i[e].data[a][0]:\"\")),0===e){h.push((n=s,\"datetime\"===l.config.xaxis.type&&String(n).length>=10?l.config.chart.toolbar.export.csv.dateFormatter(s):x.isNumber(s)?s:s.split(r).join(\"\")));for(var o=0;o<l.globals.series.length;o++)f.isFormatXY()?h.push(i[o].data[a].y):h.push(g[o][a])}(\"candlestick\"===l.config.chart.type||t.type&&\"candlestick\"===t.type)&&(h.pop(),h.push(l.globals.seriesCandleO[e][a]),h.push(l.globals.seriesCandleH[e][a]),h.push(l.globals.seriesCandleL[e][a]),h.push(l.globals.seriesCandleC[e][a])),(\"boxPlot\"===l.config.chart.type||t.type&&\"boxPlot\"===t.type)&&(h.pop(),h.push(l.globals.seriesCandleO[e][a]),h.push(l.globals.seriesCandleH[e][a]),h.push(l.globals.seriesCandleM[e][a]),h.push(l.globals.seriesCandleL[e][a]),h.push(l.globals.seriesCandleC[e][a])),\"rangeBar\"===l.config.chart.type&&(h.pop(),h.push(l.globals.seriesRangeStart[e][a]),h.push(l.globals.seriesRangeEnd[e][a])),h.length&&c.push(h.join(r))}}var n};h.push(l.config.chart.toolbar.export.csv.headerCategory),\"boxPlot\"===l.config.chart.type?(h.push(\"minimum\"),h.push(\"q1\"),h.push(\"median\"),h.push(\"q3\"),h.push(\"maximum\")):\"candlestick\"===l.config.chart.type?(h.push(\"open\"),h.push(\"high\"),h.push(\"low\"),h.push(\"close\")):\"rangeBar\"===l.config.chart.type?(h.push(\"minimum\"),h.push(\"maximum\")):i.map((function(t,e){var i=t.name?t.name:\"series-\".concat(e);l.globals.axisCharts&&h.push(i.split(r).join(\"\")?i.split(r).join(\"\"):\"series-\".concat(e))})),l.globals.axisCharts||(h.push(l.config.chart.toolbar.export.csv.headerValue),c.push(h.join(r))),i.map((function(t,e){l.globals.axisCharts?m(t,e):((h=[]).push(l.globals.labels[e].split(r).join(\"\")),h.push(g[e]),c.push(h.join(r)))})),d+=c.join(n),this.triggerDownload(\"data:text/csv; charset=utf-8,\"+encodeURIComponent(\"\\ufeff\"+d),a||l.config.chart.toolbar.export.csv.filename,\".csv\")}},{key:\"triggerDownload\",value:function(t,e,i){var a=document.createElement(\"a\");a.href=t,a.download=(e||this.w.globals.chartID)+i,document.body.appendChild(a),a.click(),document.body.removeChild(a)}}]),t}(),V=function(){function t(e,i){a(this,t),this.ctx=e,this.elgrid=i,this.w=e.w;var s=this.w;this.axesUtils=new B(e),this.xaxisLabels=s.globals.labels.slice(),s.globals.timescaleLabels.length>0&&!s.globals.isBarHorizontal&&(this.xaxisLabels=s.globals.timescaleLabels.slice()),s.config.xaxis.overwriteCategories&&(this.xaxisLabels=s.config.xaxis.overwriteCategories),this.drawnLabels=[],this.drawnLabelsRects=[],\"top\"===s.config.xaxis.position?this.offY=0:this.offY=s.globals.gridHeight+1,this.offY=this.offY+s.config.xaxis.axisBorder.offsetY,this.isCategoryBarHorizontal=\"bar\"===s.config.chart.type&&s.config.plotOptions.bar.horizontal,this.xaxisFontSize=s.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=s.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=s.config.xaxis.labels.style.colors,this.xaxisBorderWidth=s.config.xaxis.axisBorder.width,this.isCategoryBarHorizontal&&(this.xaxisBorderWidth=s.config.yaxis[0].axisBorder.width.toString()),this.xaxisBorderWidth.indexOf(\"%\")>-1?this.xaxisBorderWidth=s.globals.gridWidth*parseInt(this.xaxisBorderWidth,10)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth,10),this.xaxisBorderHeight=s.config.xaxis.axisBorder.height,this.yaxis=s.config.yaxis[0]}return r(t,[{key:\"drawXaxis\",value:function(){var t=this.w,e=new m(this.ctx),i=e.group({class:\"apexcharts-xaxis\",transform:\"translate(\".concat(t.config.xaxis.offsetX,\", \").concat(t.config.xaxis.offsetY,\")\")}),a=e.group({class:\"apexcharts-xaxis-texts-g\",transform:\"translate(\".concat(t.globals.translateXAxisX,\", \").concat(t.globals.translateXAxisY,\")\")});i.add(a);for(var s=[],r=0;r<this.xaxisLabels.length;r++)s.push(this.xaxisLabels[r]);if(this.drawXAxisLabelAndGroup(!0,e,a,s,t.globals.isXNumeric,(function(t,e){return e})),t.globals.hasXaxisGroups){var o=t.globals.groups;s=[];for(var n=0;n<o.length;n++)s.push(o[n].title);var l={};t.config.xaxis.group.style&&(l.xaxisFontSize=t.config.xaxis.group.style.fontSize,l.xaxisFontFamily=t.config.xaxis.group.style.fontFamily,l.xaxisForeColors=t.config.xaxis.group.style.colors,l.fontWeight=t.config.xaxis.group.style.fontWeight,l.cssClass=t.config.xaxis.group.style.cssClass),this.drawXAxisLabelAndGroup(!1,e,a,s,!1,(function(t,e){return o[t].cols*e}),l)}if(void 0!==t.config.xaxis.title.text){var h=e.group({class:\"apexcharts-xaxis-title\"}),c=e.drawText({x:t.globals.gridWidth/2+t.config.xaxis.title.offsetX,y:this.offY+parseFloat(this.xaxisFontSize)+(\"bottom\"===t.config.xaxis.position?t.globals.xAxisLabelsHeight:-t.globals.xAxisLabelsHeight-10)+t.config.xaxis.title.offsetY,text:t.config.xaxis.title.text,textAnchor:\"middle\",fontSize:t.config.xaxis.title.style.fontSize,fontFamily:t.config.xaxis.title.style.fontFamily,fontWeight:t.config.xaxis.title.style.fontWeight,foreColor:t.config.xaxis.title.style.color,cssClass:\"apexcharts-xaxis-title-text \"+t.config.xaxis.title.style.cssClass});h.add(c),i.add(h)}if(t.config.xaxis.axisBorder.show){var d=t.globals.barPadForNumericAxis,g=e.drawLine(t.globals.padHorizontal+t.config.xaxis.axisBorder.offsetX-d,this.offY,this.xaxisBorderWidth+d,this.offY,t.config.xaxis.axisBorder.color,0,this.xaxisBorderHeight);this.elgrid&&this.elgrid.elGridBorders&&t.config.grid.show?this.elgrid.elGridBorders.add(g):i.add(g)}return i}},{key:\"drawXAxisLabelAndGroup\",value:function(t,e,i,a,s,r){var o,n=this,l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},h=[],c=[],d=this.w,g=l.xaxisFontSize||this.xaxisFontSize,u=l.xaxisFontFamily||this.xaxisFontFamily,p=l.xaxisForeColors||this.xaxisForeColors,f=l.fontWeight||d.config.xaxis.labels.style.fontWeight,x=l.cssClass||d.config.xaxis.labels.style.cssClass,b=d.globals.padHorizontal,v=a.length,m=\"category\"===d.config.xaxis.type?d.globals.dataPoints:v;if(0===m&&v>m&&(m=v),s){var y=m>1?m-1:m;o=d.globals.gridWidth/y,b=b+r(0,o)/2+d.config.xaxis.labels.offsetX}else o=d.globals.gridWidth/m,b=b+r(0,o)+d.config.xaxis.labels.offsetX;for(var w=function(s){var l=b-r(s,o)/2+d.config.xaxis.labels.offsetX;0===s&&1===v&&o/2===b&&1===m&&(l=d.globals.gridWidth/2);var y=n.axesUtils.getLabel(a,d.globals.timescaleLabels,l,s,h,g,t),w=28;d.globals.rotateXLabels&&t&&(w=22),d.config.xaxis.title.text&&\"top\"===d.config.xaxis.position&&(w+=parseFloat(d.config.xaxis.title.style.fontSize)+2),t||(w=w+parseFloat(g)+(d.globals.xAxisLabelsHeight-d.globals.xAxisGroupLabelsHeight)+(d.globals.rotateXLabels?10:0)),y=void 0!==d.config.xaxis.tickAmount&&\"dataPoints\"!==d.config.xaxis.tickAmount&&\"datetime\"!==d.config.xaxis.type?n.axesUtils.checkLabelBasedOnTickamount(s,y,v):n.axesUtils.checkForOverflowingLabels(s,y,v,h,c);if(d.config.xaxis.labels.show){var k=e.drawText({x:y.x,y:n.offY+d.config.xaxis.labels.offsetY+w-(\"top\"===d.config.xaxis.position?d.globals.xAxisHeight+d.config.xaxis.axisTicks.height-2:0),text:y.text,textAnchor:\"middle\",fontWeight:y.isBold?600:f,fontSize:g,fontFamily:u,foreColor:Array.isArray(p)?t&&d.config.xaxis.convertedCatToNumeric?p[d.globals.minX+s-1]:p[s]:p,isPlainText:!1,cssClass:(t?\"apexcharts-xaxis-label \":\"apexcharts-xaxis-group-label \")+x});if(i.add(k),k.on(\"click\",(function(t){if(\"function\"==typeof d.config.chart.events.xAxisLabelClick){var e=Object.assign({},d,{labelIndex:s});d.config.chart.events.xAxisLabelClick(t,n.ctx,e)}})),t){var A=document.createElementNS(d.globals.SVGNS,\"title\");A.textContent=Array.isArray(y.text)?y.text.join(\" \"):y.text,k.node.appendChild(A),\"\"!==y.text&&(h.push(y.text),c.push(y))}}s<v-1&&(b+=r(s+1,o))},k=0;k<=v-1;k++)w(k)}},{key:\"drawXaxisInversed\",value:function(t){var e,i,a=this,s=this.w,r=new m(this.ctx),o=s.config.yaxis[0].opposite?s.globals.translateYAxisX[t]:0,n=r.group({class:\"apexcharts-yaxis apexcharts-xaxis-inversed\",rel:t}),l=r.group({class:\"apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g\",transform:\"translate(\"+o+\", 0)\"});n.add(l);var h=[];if(s.config.yaxis[t].show)for(var c=0;c<this.xaxisLabels.length;c++)h.push(this.xaxisLabels[c]);e=s.globals.gridHeight/h.length,i=-e/2.2;var d=s.globals.yLabelFormatters[0],g=s.config.yaxis[0].labels;if(g.show)for(var u=function(o){var n=void 0===h[o]?\"\":h[o];n=d(n,{seriesIndex:t,dataPointIndex:o,w:s});var c=a.axesUtils.getYAxisForeColor(g.style.colors,t),u=0;Array.isArray(n)&&(u=n.length/2*parseInt(g.style.fontSize,10));var p=g.offsetX-15,f=\"end\";a.yaxis.opposite&&(f=\"start\"),\"left\"===s.config.yaxis[0].labels.align?(p=g.offsetX,f=\"start\"):\"center\"===s.config.yaxis[0].labels.align?(p=g.offsetX,f=\"middle\"):\"right\"===s.config.yaxis[0].labels.align&&(f=\"end\");var x=r.drawText({x:p,y:i+e+g.offsetY-u,text:n,textAnchor:f,foreColor:Array.isArray(c)?c[o]:c,fontSize:g.style.fontSize,fontFamily:g.style.fontFamily,fontWeight:g.style.fontWeight,isPlainText:!1,cssClass:\"apexcharts-yaxis-label \"+g.style.cssClass,maxWidth:g.maxWidth});l.add(x),x.on(\"click\",(function(t){if(\"function\"==typeof s.config.chart.events.xAxisLabelClick){var e=Object.assign({},s,{labelIndex:o});s.config.chart.events.xAxisLabelClick(t,a.ctx,e)}}));var b=document.createElementNS(s.globals.SVGNS,\"title\");if(b.textContent=Array.isArray(n)?n.join(\" \"):n,x.node.appendChild(b),0!==s.config.yaxis[t].labels.rotate){var v=r.rotateAroundCenter(x.node);x.node.setAttribute(\"transform\",\"rotate(\".concat(s.config.yaxis[t].labels.rotate,\" 0 \").concat(v.y,\")\"))}i+=e},p=0;p<=h.length-1;p++)u(p);if(void 0!==s.config.yaxis[0].title.text){var f=r.group({class:\"apexcharts-yaxis-title apexcharts-xaxis-title-inversed\",transform:\"translate(\"+o+\", 0)\"}),x=r.drawText({x:s.config.yaxis[0].title.offsetX,y:s.globals.gridHeight/2+s.config.yaxis[0].title.offsetY,text:s.config.yaxis[0].title.text,textAnchor:\"middle\",foreColor:s.config.yaxis[0].title.style.color,fontSize:s.config.yaxis[0].title.style.fontSize,fontWeight:s.config.yaxis[0].title.style.fontWeight,fontFamily:s.config.yaxis[0].title.style.fontFamily,cssClass:\"apexcharts-yaxis-title-text \"+s.config.yaxis[0].title.style.cssClass});f.add(x),n.add(f)}var b=0;this.isCategoryBarHorizontal&&s.config.yaxis[0].opposite&&(b=s.globals.gridWidth);var v=s.config.xaxis.axisBorder;if(v.show){var y=r.drawLine(s.globals.padHorizontal+v.offsetX+b,1+v.offsetY,s.globals.padHorizontal+v.offsetX+b,s.globals.gridHeight+v.offsetY,v.color,0);this.elgrid&&this.elgrid.elGridBorders&&s.config.grid.show?this.elgrid.elGridBorders.add(y):n.add(y)}return s.config.yaxis[0].axisTicks.show&&this.axesUtils.drawYAxisTicks(b,h.length,s.config.yaxis[0].axisBorder,s.config.yaxis[0].axisTicks,0,e,n),n}},{key:\"drawXaxisTicks\",value:function(t,e,i){var a=this.w,s=t;if(!(t<0||t-2>a.globals.gridWidth)){var r=this.offY+a.config.xaxis.axisTicks.offsetY;if(e=e+r+a.config.xaxis.axisTicks.height,\"top\"===a.config.xaxis.position&&(e=r-a.config.xaxis.axisTicks.height),a.config.xaxis.axisTicks.show){var o=new m(this.ctx).drawLine(t+a.config.xaxis.axisTicks.offsetX,r+a.config.xaxis.offsetY,s+a.config.xaxis.axisTicks.offsetX,e+a.config.xaxis.offsetY,a.config.xaxis.axisTicks.color);i.add(o),o.node.classList.add(\"apexcharts-xaxis-tick\")}}}},{key:\"getXAxisTicksPositions\",value:function(){var t=this.w,e=[],i=this.xaxisLabels.length,a=t.globals.padHorizontal;if(t.globals.timescaleLabels.length>0)for(var s=0;s<i;s++)a=this.xaxisLabels[s].position,e.push(a);else for(var r=i,o=0;o<r;o++){var n=r;t.globals.isXNumeric&&\"bar\"!==t.config.chart.type&&(n-=1),a+=t.globals.gridWidth/n,e.push(a)}return e}},{key:\"xAxisLabelCorrections\",value:function(){var t=this.w,e=new m(this.ctx),i=t.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-texts-g\"),a=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-xaxis-texts-g text:not(.apexcharts-xaxis-group-label)\"),s=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis-inversed text\"),r=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-xaxis-inversed-texts-g text tspan\");if(t.globals.rotateXLabels||t.config.xaxis.labels.rotateAlways)for(var o=0;o<a.length;o++){var n=e.rotateAroundCenter(a[o]);n.y=n.y-1,n.x=n.x+1,a[o].setAttribute(\"transform\",\"rotate(\".concat(t.config.xaxis.labels.rotate,\" \").concat(n.x,\" \").concat(n.y,\")\")),a[o].setAttribute(\"text-anchor\",\"end\");i.setAttribute(\"transform\",\"translate(0, \".concat(-10,\")\"));var l=a[o].childNodes;t.config.xaxis.labels.trim&&Array.prototype.forEach.call(l,(function(i){e.placeTextWithEllipsis(i,i.textContent,t.globals.xAxisLabelsHeight-(\"bottom\"===t.config.legend.position?20:10))}))}else!function(){for(var i=t.globals.gridWidth/(t.globals.labels.length+1),s=0;s<a.length;s++){var r=a[s].childNodes;t.config.xaxis.labels.trim&&\"datetime\"!==t.config.xaxis.type&&Array.prototype.forEach.call(r,(function(t){e.placeTextWithEllipsis(t,t.textContent,i)}))}}();if(s.length>0){var h=s[s.length-1].getBBox(),c=s[0].getBBox();h.x<-20&&s[s.length-1].parentNode.removeChild(s[s.length-1]),c.x+c.width>t.globals.gridWidth&&!t.globals.isBarHorizontal&&s[0].parentNode.removeChild(s[0]);for(var d=0;d<r.length;d++)e.placeTextWithEllipsis(r[d],r[d].textContent,t.config.yaxis[0].labels.maxWidth-(t.config.yaxis[0].title.text?2*parseFloat(t.config.yaxis[0].title.style.fontSize):0)-15)}}}]),t}(),j=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.xaxisLabels=i.globals.labels.slice(),this.axesUtils=new B(e),this.isRangeBar=i.globals.seriesRange.length,i.globals.timescaleLabels.length>0&&(this.xaxisLabels=i.globals.timescaleLabels.slice())}return r(t,[{key:\"drawGridArea\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w,i=new m(this.ctx);null===t&&(t=i.group({class:\"apexcharts-grid\"}));var a=i.drawLine(e.globals.padHorizontal,1,e.globals.padHorizontal,e.globals.gridHeight,\"transparent\"),s=i.drawLine(e.globals.padHorizontal,e.globals.gridHeight,e.globals.gridWidth,e.globals.gridHeight,\"transparent\");return t.add(s),t.add(a),t}},{key:\"drawGrid\",value:function(){var t=null;return this.w.globals.axisCharts&&(t=this.renderGrid(),this.drawGridArea(t.el)),t}},{key:\"createGridMask\",value:function(){var t=this.w,e=t.globals,i=new m(this.ctx),a=Array.isArray(t.config.stroke.width)?0:t.config.stroke.width;if(Array.isArray(t.config.stroke.width)){var s=0;t.config.stroke.width.forEach((function(t){s=Math.max(s,t)})),a=s}e.dom.elGridRectMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elGridRectMask.setAttribute(\"id\",\"gridRectMask\".concat(e.cuid)),e.dom.elGridRectMarkerMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elGridRectMarkerMask.setAttribute(\"id\",\"gridRectMarkerMask\".concat(e.cuid)),e.dom.elForecastMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elForecastMask.setAttribute(\"id\",\"forecastMask\".concat(e.cuid)),e.dom.elNonForecastMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elNonForecastMask.setAttribute(\"id\",\"nonForecastMask\".concat(e.cuid));var r=t.config.chart.type,o=0,n=0;(\"bar\"===r||\"rangeBar\"===r||\"candlestick\"===r||\"boxPlot\"===r||t.globals.comboBarCount>0)&&t.globals.isXNumeric&&!t.globals.isBarHorizontal&&(o=t.config.grid.padding.left,n=t.config.grid.padding.right,e.barPadForNumericAxis>o&&(o=e.barPadForNumericAxis,n=e.barPadForNumericAxis)),e.dom.elGridRect=i.drawRect(-a/2-o-2,-a/2,e.gridWidth+a+n+o+4,e.gridHeight+a,0,\"#fff\");var l=t.globals.markers.largestSize+1;e.dom.elGridRectMarker=i.drawRect(2*-l,2*-l,e.gridWidth+4*l,e.gridHeight+4*l,0,\"#fff\"),e.dom.elGridRectMask.appendChild(e.dom.elGridRect.node),e.dom.elGridRectMarkerMask.appendChild(e.dom.elGridRectMarker.node);var h=e.dom.baseEl.querySelector(\"defs\");h.appendChild(e.dom.elGridRectMask),h.appendChild(e.dom.elForecastMask),h.appendChild(e.dom.elNonForecastMask),h.appendChild(e.dom.elGridRectMarkerMask)}},{key:\"_drawGridLines\",value:function(t){var e=t.i,i=t.x1,a=t.y1,s=t.x2,r=t.y2,o=t.xCount,n=t.parent,l=this.w;if(!(0===e&&l.globals.skipFirstTimelinelabel||e===o-1&&l.globals.skipLastTimelinelabel&&!l.config.xaxis.labels.formatter||\"radar\"===l.config.chart.type)){l.config.grid.xaxis.lines.show&&this._drawGridLine({i:e,x1:i,y1:a,x2:s,y2:r,xCount:o,parent:n});var h=0;if(l.globals.hasXaxisGroups&&\"between\"===l.config.xaxis.tickPlacement){var c=l.globals.groups;if(c){for(var d=0,g=0;d<e&&g<c.length;g++)d+=c[g].cols;d===e&&(h=.6*l.globals.xAxisLabelsHeight)}}new V(this.ctx).drawXaxisTicks(i,h,l.globals.dom.elGraphical)}}},{key:\"_drawGridLine\",value:function(t){var e=t.i,i=t.x1,a=t.y1,s=t.x2,r=t.y2,o=t.xCount,n=t.parent,l=this.w,h=!1,c=n.node.classList.contains(\"apexcharts-gridlines-horizontal\"),d=l.config.grid.strokeDashArray,g=l.globals.barPadForNumericAxis;(0===a&&0===r||0===i&&0===s)&&(h=!0),a===l.globals.gridHeight&&r===l.globals.gridHeight&&(h=!0),!l.globals.isBarHorizontal||0!==e&&e!==o-1||(h=!0);var u=new m(this).drawLine(i-(c?g:0),a,s+(c?g:0),r,l.config.grid.borderColor,d);u.node.classList.add(\"apexcharts-gridline\"),h&&l.config.grid.show?this.elGridBorders.add(u):n.add(u)}},{key:\"_drawGridBandRect\",value:function(t){var e=t.c,i=t.x1,a=t.y1,s=t.x2,r=t.y2,o=t.type,n=this.w,l=new m(this.ctx),h=n.globals.barPadForNumericAxis;if(\"column\"!==o||\"datetime\"!==n.config.xaxis.type){var c=n.config.grid[o].colors[e],d=l.drawRect(i-(\"row\"===o?h:0),a,s+(\"row\"===o?2*h:0),r,0,c,n.config.grid[o].opacity);this.elg.add(d),d.attr(\"clip-path\",\"url(#gridRectMask\".concat(n.globals.cuid,\")\")),d.node.classList.add(\"apexcharts-grid-\".concat(o))}}},{key:\"_drawXYLines\",value:function(t){var e=this,i=t.xCount,a=t.tickAmount,s=this.w;if(s.config.grid.xaxis.lines.show||s.config.xaxis.axisTicks.show){var r,o=s.globals.padHorizontal,n=s.globals.gridHeight;s.globals.timescaleLabels.length?function(t){for(var a=t.xC,s=t.x1,r=t.y1,o=t.x2,n=t.y2,l=0;l<a;l++)s=e.xaxisLabels[l].position,o=e.xaxisLabels[l].position,e._drawGridLines({i:l,x1:s,y1:r,x2:o,y2:n,xCount:i,parent:e.elgridLinesV})}({xC:i,x1:o,y1:0,x2:r,y2:n}):(s.globals.isXNumeric&&(i=s.globals.xAxisScale.result.length),function(t){for(var a=t.xC,r=t.x1,o=t.y1,n=t.x2,l=t.y2,h=0;h<a+(s.globals.isXNumeric?0:1);h++)0===h&&1===a&&1===s.globals.dataPoints&&(n=r=s.globals.gridWidth/2),e._drawGridLines({i:h,x1:r,y1:o,x2:n,y2:l,xCount:i,parent:e.elgridLinesV}),n=r+=s.globals.gridWidth/(s.globals.isXNumeric?a-1:a)}({xC:i,x1:o,y1:0,x2:r,y2:n}))}if(s.config.grid.yaxis.lines.show){var l=0,h=0,c=s.globals.gridWidth,d=a+1;this.isRangeBar&&(d=s.globals.labels.length);for(var g=0;g<d+(this.isRangeBar?1:0);g++)this._drawGridLine({i:g,xCount:d+(this.isRangeBar?1:0),x1:0,y1:l,x2:c,y2:h,parent:this.elgridLinesH}),h=l+=s.globals.gridHeight/(this.isRangeBar?d:a)}}},{key:\"_drawInvertedXYLines\",value:function(t){var e=t.xCount,i=this.w;if(i.config.grid.xaxis.lines.show||i.config.xaxis.axisTicks.show)for(var a,s=i.globals.padHorizontal,r=i.globals.gridHeight,o=0;o<e+1;o++){i.config.grid.xaxis.lines.show&&this._drawGridLine({i:o,xCount:e+1,x1:s,y1:0,x2:a,y2:r,parent:this.elgridLinesV}),new V(this.ctx).drawXaxisTicks(s,0,i.globals.dom.elGraphical),a=s=s+i.globals.gridWidth/e+.3}if(i.config.grid.yaxis.lines.show)for(var n=0,l=0,h=i.globals.gridWidth,c=0;c<i.globals.dataPoints+1;c++)this._drawGridLine({i:c,xCount:i.globals.dataPoints+1,x1:0,y1:n,x2:h,y2:l,parent:this.elgridLinesH}),l=n+=i.globals.gridHeight/i.globals.dataPoints}},{key:\"renderGrid\",value:function(){var t=this.w,e=new m(this.ctx);this.elg=e.group({class:\"apexcharts-grid\"}),this.elgridLinesH=e.group({class:\"apexcharts-gridlines-horizontal\"}),this.elgridLinesV=e.group({class:\"apexcharts-gridlines-vertical\"}),this.elGridBorders=e.group({class:\"apexcharts-grid-borders\"}),this.elg.add(this.elgridLinesH),this.elg.add(this.elgridLinesV),t.config.grid.show||(this.elgridLinesV.hide(),this.elgridLinesH.hide(),this.elGridBorders.hide());for(var i,a=t.globals.yAxisScale.length?t.globals.yAxisScale[0].result.length-1:5,s=0;s<t.globals.series.length&&(void 0!==t.globals.yAxisScale[s]&&(a=t.globals.yAxisScale[s].result.length-1),!(a>2));s++);return!t.globals.isBarHorizontal||this.isRangeBar?(i=this.xaxisLabels.length,this.isRangeBar&&t.globals.isBarHorizontal&&(i--,a=t.globals.labels.length,t.config.xaxis.tickAmount&&t.config.xaxis.labels.formatter&&(i=t.config.xaxis.tickAmount)),this._drawXYLines({xCount:i,tickAmount:a})):(i=a,a=t.globals.xTickAmount,this._drawInvertedXYLines({xCount:i,tickAmount:a})),this.drawGridBands(i,a),{el:this.elg,elGridBorders:this.elGridBorders,xAxisTickWidth:t.globals.gridWidth/i}}},{key:\"drawGridBands\",value:function(t,e){var i=this.w;if(void 0!==i.config.grid.row.colors&&i.config.grid.row.colors.length>0)for(var a=0,s=i.globals.gridHeight/e,r=i.globals.gridWidth,o=0,n=0;o<e;o++,n++)n>=i.config.grid.row.colors.length&&(n=0),this._drawGridBandRect({c:n,x1:0,y1:a,x2:r,y2:s,type:\"row\"}),a+=i.globals.gridHeight/e;if(void 0!==i.config.grid.column.colors&&i.config.grid.column.colors.length>0)for(var l=i.globals.isBarHorizontal||\"category\"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric?t:t-1,h=i.globals.padHorizontal,c=i.globals.padHorizontal+i.globals.gridWidth/l,d=i.globals.gridHeight,g=0,u=0;g<t;g++,u++)u>=i.config.grid.column.colors.length&&(u=0),this._drawGridBandRect({c:u,x1:h,y1:0,x2:c,y2:d,type:\"column\"}),h+=i.globals.gridWidth/l}}]),t}(),_=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"niceScale\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4?arguments[4]:void 0,r=this.w,o=Math.abs(e-t);if(\"dataPoints\"===(i=this._adjustTicksForSmallRange(i,a,o))&&(i=r.globals.dataPoints-1),t===Number.MIN_VALUE&&0===e||!x.isNumber(t)&&!x.isNumber(e)||t===Number.MIN_VALUE&&e===-Number.MAX_VALUE)return t=0,e=i,this.linearScale(t,e,i);t>e?(console.warn(\"axis.min cannot be greater than axis.max\"),e=t+.1):t===e&&(t=0===t?0:t-.5,e=0===e?2:e+.5);var n=[];o<1&&s&&(\"candlestick\"===r.config.chart.type||\"candlestick\"===r.config.series[a].type||\"boxPlot\"===r.config.chart.type||\"boxPlot\"===r.config.series[a].type||r.globals.isRangeData)&&(e*=1.01);var l=i+1;l<2?l=2:l>2&&(l-=2);var h=o/l,c=Math.floor(x.log10(h)),d=Math.pow(10,c),g=Math.round(h/d);g<1&&(g=1);var u=g*d,p=u*Math.floor(t/u),f=u*Math.ceil(e/u),b=p;if(s&&o>2){for(;n.push(b),!((b+=u)>f););return{result:n,niceMin:n[0],niceMax:n[n.length-1]}}var v=t;(n=[]).push(v);for(var m=Math.abs(e-t)/i,y=0;y<=i;y++)v+=m,n.push(v);return n[n.length-2]>=e&&n.pop(),{result:n,niceMin:n[0],niceMax:n[n.length-1]}}},{key:\"linearScale\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,a=arguments.length>3?arguments[3]:void 0,s=Math.abs(e-t);\"dataPoints\"===(i=this._adjustTicksForSmallRange(i,a,s))&&(i=this.w.globals.dataPoints-1);var r=s/i;i===Number.MAX_VALUE&&(i=10,r=1);for(var o=[],n=t;i>=0;)o.push(n),n+=r,i-=1;return{result:o,niceMin:o[0],niceMax:o[o.length-1]}}},{key:\"logarithmicScaleNice\",value:function(t,e,i){e<=0&&(e=Math.max(t,i)),t<=0&&(t=Math.min(e,i));for(var a=[],s=Math.ceil(Math.log(e)/Math.log(i)+1),r=Math.floor(Math.log(t)/Math.log(i));r<s;r++)a.push(Math.pow(i,r));return{result:a,niceMin:a[0],niceMax:a[a.length-1]}}},{key:\"logarithmicScale\",value:function(t,e,i){e<=0&&(e=Math.max(t,i)),t<=0&&(t=Math.min(e,i));for(var a=[],s=Math.log(e)/Math.log(i),r=Math.log(t)/Math.log(i),o=s-r,n=Math.round(o),l=o/n,h=0,c=r;h<n;h++,c+=l)a.push(Math.pow(i,c));return a.push(Math.pow(i,s)),{result:a,niceMin:t,niceMax:e}}},{key:\"_adjustTicksForSmallRange\",value:function(t,e,i){var a=t;if(void 0!==e&&this.w.config.yaxis[e].labels.formatter&&void 0===this.w.config.yaxis[e].tickAmount){var s=Number(this.w.config.yaxis[e].labels.formatter(1));x.isNumber(s)&&0===this.w.globals.yValueDecimal&&(a=Math.ceil(i))}return a<t?a:t}},{key:\"setYScaleForIndex\",value:function(t,e,i){var a=this.w.globals,s=this.w.config,r=a.isBarHorizontal?s.xaxis:s.yaxis[t];void 0===a.yAxisScale[t]&&(a.yAxisScale[t]=[]);var o=Math.abs(i-e);if(r.logarithmic&&o<=5&&(a.invalidLogScale=!0),r.logarithmic&&o>5)a.allSeriesCollapsed=!1,a.yAxisScale[t]=this.logarithmicScale(e,i,r.logBase),a.yAxisScale[t]=r.forceNiceScale?this.logarithmicScaleNice(e,i,r.logBase):this.logarithmicScale(e,i,r.logBase);else if(i!==-Number.MAX_VALUE&&x.isNumber(i))if(a.allSeriesCollapsed=!1,void 0===r.min&&void 0===r.max||r.forceNiceScale){var n=void 0===s.yaxis[t].max&&void 0===s.yaxis[t].min||s.yaxis[t].forceNiceScale;a.yAxisScale[t]=this.niceScale(e,i,r.tickAmount?r.tickAmount:o<5&&o>1?o+1:5,t,n)}else a.yAxisScale[t]=this.linearScale(e,i,r.tickAmount,t);else a.yAxisScale[t]=this.linearScale(0,5,5)}},{key:\"setXScale\",value:function(t,e){var i=this.w,a=i.globals,s=i.config.xaxis,r=Math.abs(e-t);return e!==-Number.MAX_VALUE&&x.isNumber(e)?a.xAxisScale=this.linearScale(t,e,s.tickAmount?s.tickAmount:r<5&&r>1?r+1:5,0):a.xAxisScale=this.linearScale(0,5,5),a.xAxisScale}},{key:\"setMultipleYScales\",value:function(){var t=this,e=this.w.globals,i=this.w.config,a=e.minYArr.concat([]),s=e.maxYArr.concat([]),r=[];i.yaxis.forEach((function(e,o){var n=o;i.series.forEach((function(t,i){t.name===e.seriesName&&(n=i,o!==i?r.push({index:i,similarIndex:o,alreadyExists:!0}):r.push({index:i}))}));var l=a[n],h=s[n];t.setYScaleForIndex(o,l,h)})),this.sameScaleInMultipleAxes(a,s,r)}},{key:\"sameScaleInMultipleAxes\",value:function(t,e,i){var a=this,s=this.w.config,r=this.w.globals,o=[];i.forEach((function(t){t.alreadyExists&&(void 0===o[t.index]&&(o[t.index]=[]),o[t.index].push(t.index),o[t.index].push(t.similarIndex))})),r.yAxisSameScaleIndices=o,o.forEach((function(t,e){o.forEach((function(i,a){var s,r;e!==a&&(s=t,r=i,s.filter((function(t){return-1!==r.indexOf(t)}))).length>0&&(o[e]=o[e].concat(o[a]))}))}));var n=o.map((function(t){return t.filter((function(e,i){return t.indexOf(e)===i}))})).map((function(t){return t.sort()}));o=o.filter((function(t){return!!t}));var l=n.slice(),h=l.map((function(t){return JSON.stringify(t)}));l=l.filter((function(t,e){return h.indexOf(JSON.stringify(t))===e}));var c=[],d=[];t.forEach((function(t,i){l.forEach((function(a,s){a.indexOf(i)>-1&&(void 0===c[s]&&(c[s]=[],d[s]=[]),c[s].push({key:i,value:t}),d[s].push({key:i,value:e[i]}))}))}));var g=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,Number.MIN_VALUE),u=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,-Number.MAX_VALUE);c.forEach((function(t,e){t.forEach((function(t,i){g[e]=Math.min(t.value,g[e])}))})),d.forEach((function(t,e){t.forEach((function(t,i){u[e]=Math.max(t.value,u[e])}))})),t.forEach((function(t,e){d.forEach((function(t,i){var o=g[i],n=u[i];s.chart.stacked&&(n=0,t.forEach((function(t,e){t.value!==-Number.MAX_VALUE&&(n+=t.value),o!==Number.MIN_VALUE&&(o+=c[i][e].value)}))),t.forEach((function(i,l){t[l].key===e&&(void 0!==s.yaxis[e].min&&(o=\"function\"==typeof s.yaxis[e].min?s.yaxis[e].min(r.minY):s.yaxis[e].min),void 0!==s.yaxis[e].max&&(n=\"function\"==typeof s.yaxis[e].max?s.yaxis[e].max(r.maxY):s.yaxis[e].max),a.setYScaleForIndex(e,o,n))}))}))}))}},{key:\"autoScaleY\",value:function(t,e,i){t||(t=this);var a=t.w;if(a.globals.isMultipleYAxis||a.globals.collapsedSeries.length)return console.warn(\"autoScaleYaxis is not supported in a multi-yaxis chart.\"),e;var s=a.globals.seriesX[0],r=a.config.chart.stacked;return e.forEach((function(t,o){for(var n=0,l=0;l<s.length;l++)if(s[l]>=i.xaxis.min){n=l;break}var h,c,d=a.globals.minYArr[o],g=a.globals.maxYArr[o],u=a.globals.stackedSeriesTotals;a.globals.series.forEach((function(o,l){var p=o[n];r?(p=u[n],h=c=p,u.forEach((function(t,e){s[e]<=i.xaxis.max&&s[e]>=i.xaxis.min&&(t>c&&null!==t&&(c=t),o[e]<h&&null!==o[e]&&(h=o[e]))}))):(h=c=p,o.forEach((function(t,e){if(s[e]<=i.xaxis.max&&s[e]>=i.xaxis.min){var r=t,o=t;a.globals.series.forEach((function(i,a){null!==t&&(r=Math.min(i[e],r),o=Math.max(i[e],o))})),o>c&&null!==o&&(c=o),r<h&&null!==r&&(h=r)}}))),void 0===h&&void 0===c&&(h=d,c=g),c*=c<0?.9:1.1,0===(h*=h<0?1.1:.9)&&0===c&&(h=-1,c=1),c<0&&c<g&&(c=g),h<0&&h>d&&(h=d),e.length>1?(e[l].min=void 0===t.min?h:t.min,e[l].max=void 0===t.max?c:t.max):(e[0].min=void 0===t.min?h:t.min,e[0].max=void 0===t.max?c:t.max)}))})),e}}]),t}(),U=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.scales=new _(e)}return r(t,[{key:\"init\",value:function(){this.setYRange(),this.setXRange(),this.setZRange()}},{key:\"getMinYMaxY\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-Number.MAX_VALUE,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.w.config,r=this.w.globals,o=-Number.MAX_VALUE,n=Number.MIN_VALUE;null===a&&(a=t+1);var l=r.series,h=l,c=l;\"candlestick\"===s.chart.type?(h=r.seriesCandleL,c=r.seriesCandleH):\"boxPlot\"===s.chart.type?(h=r.seriesCandleO,c=r.seriesCandleC):r.isRangeData&&(h=r.seriesRangeStart,c=r.seriesRangeEnd);for(var d=t;d<a;d++){r.dataPoints=Math.max(r.dataPoints,l[d].length),r.categoryLabels.length&&(r.dataPoints=r.categoryLabels.filter((function(t){return void 0!==t})).length),r.labels.length&&(r.dataPoints=Math.max(r.dataPoints,r.labels.length));for(var g=0;g<r.series[d].length;g++){var u=l[d][g];null!==u&&x.isNumber(u)?(void 0!==c[d][g]&&(o=Math.max(o,c[d][g]),e=Math.min(e,c[d][g])),void 0!==h[d][g]&&(e=Math.min(e,h[d][g]),i=Math.max(i,h[d][g])),\"candlestick\"!==this.w.config.chart.type&&\"boxPlot\"!==this.w.config.chart.type&&\"rangeArea\"===this.w.config.chart.type&&\"rangeBar\"===this.w.config.chart.type||(\"candlestick\"!==this.w.config.chart.type&&\"boxPlot\"!==this.w.config.chart.type||void 0!==r.seriesCandleC[d][g]&&(o=Math.max(o,r.seriesCandleO[d][g]),o=Math.max(o,r.seriesCandleH[d][g]),o=Math.max(o,r.seriesCandleL[d][g]),o=Math.max(o,r.seriesCandleC[d][g]),\"boxPlot\"===this.w.config.chart.type&&(o=Math.max(o,r.seriesCandleM[d][g]))),!s.series[d].type||\"candlestick\"===s.series[d].type&&\"boxPlot\"===s.series[d].type&&\"rangeArea\"===s.series[d].type&&\"rangeBar\"===s.series[d].type||(o=Math.max(o,r.series[d][g]),e=Math.min(e,r.series[d][g])),i=o),r.seriesGoals[d]&&r.seriesGoals[d][g]&&Array.isArray(r.seriesGoals[d][g])&&r.seriesGoals[d][g].forEach((function(t){n!==Number.MIN_VALUE&&(n=Math.min(n,t.value),e=n),o=Math.max(o,t.value),i=o})),x.isFloat(u)&&(u=x.noExponents(u),r.yValueDecimal=Math.max(r.yValueDecimal,u.toString().split(\".\")[1].length)),n>h[d][g]&&h[d][g]<0&&(n=h[d][g])):r.hasNullValues=!0}}return\"rangeBar\"===s.chart.type&&r.seriesRangeStart.length&&r.isBarHorizontal&&(n=e),\"bar\"===s.chart.type&&(n<0&&o<0&&(o=0),n===Number.MIN_VALUE&&(n=0)),{minY:n,maxY:o,lowestY:e,highestY:i}}},{key:\"setYRange\",value:function(){var t=this.w.globals,e=this.w.config;t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE;var i=Number.MAX_VALUE;if(t.isMultipleYAxis)for(var a=0;a<t.series.length;a++){var s=this.getMinYMaxY(a,i,null,a+1);t.minYArr.push(s.minY),t.maxYArr.push(s.maxY),i=s.lowestY}var r=this.getMinYMaxY(0,i,null,t.series.length);if(t.minY=r.minY,t.maxY=r.maxY,i=r.lowestY,e.chart.stacked&&this._setStackedMinMax(),(\"line\"===e.chart.type||\"area\"===e.chart.type||\"candlestick\"===e.chart.type||\"boxPlot\"===e.chart.type||\"rangeBar\"===e.chart.type&&!t.isBarHorizontal)&&t.minY===Number.MIN_VALUE&&i!==-Number.MAX_VALUE&&i!==t.maxY){var o=t.maxY-i;(i>=0&&i<=10||void 0!==e.yaxis[0].min||void 0!==e.yaxis[0].max)&&(o=0),t.minY=i-5*o/100,i>0&&t.minY<0&&(t.minY=0),t.maxY=t.maxY+5*o/100}if(e.yaxis.forEach((function(e,i){void 0!==e.max&&(\"number\"==typeof e.max?t.maxYArr[i]=e.max:\"function\"==typeof e.max&&(t.maxYArr[i]=e.max(t.isMultipleYAxis?t.maxYArr[i]:t.maxY)),t.maxY=t.maxYArr[i]),void 0!==e.min&&(\"number\"==typeof e.min?t.minYArr[i]=e.min:\"function\"==typeof e.min&&(t.minYArr[i]=e.min(t.isMultipleYAxis?t.minYArr[i]===Number.MIN_VALUE?0:t.minYArr[i]:t.minY)),t.minY=t.minYArr[i])})),t.isBarHorizontal){[\"min\",\"max\"].forEach((function(i){void 0!==e.xaxis[i]&&\"number\"==typeof e.xaxis[i]&&(\"min\"===i?t.minY=e.xaxis[i]:t.maxY=e.xaxis[i])}))}return t.isMultipleYAxis?(this.scales.setMultipleYScales(),t.minY=i,t.yAxisScale.forEach((function(e,i){t.minYArr[i]=e.niceMin,t.maxYArr[i]=e.niceMax}))):(this.scales.setYScaleForIndex(0,t.minY,t.maxY),t.minY=t.yAxisScale[0].niceMin,t.maxY=t.yAxisScale[0].niceMax,t.minYArr[0]=t.yAxisScale[0].niceMin,t.maxYArr[0]=t.yAxisScale[0].niceMax),{minY:t.minY,maxY:t.maxY,minYArr:t.minYArr,maxYArr:t.maxYArr,yAxisScale:t.yAxisScale}}},{key:\"setXRange\",value:function(){var t=this.w.globals,e=this.w.config,i=\"numeric\"===e.xaxis.type||\"datetime\"===e.xaxis.type||\"category\"===e.xaxis.type&&!t.noLabelsProvided||t.noLabelsProvided||t.isXNumeric;if(t.isXNumeric&&function(){for(var e=0;e<t.series.length;e++)if(t.labels[e])for(var i=0;i<t.labels[e].length;i++)null!==t.labels[e][i]&&x.isNumber(t.labels[e][i])&&(t.maxX=Math.max(t.maxX,t.labels[e][i]),t.initialMaxX=Math.max(t.maxX,t.labels[e][i]),t.minX=Math.min(t.minX,t.labels[e][i]),t.initialMinX=Math.min(t.minX,t.labels[e][i]))}(),t.noLabelsProvided&&0===e.xaxis.categories.length&&(t.maxX=t.labels[t.labels.length-1],t.initialMaxX=t.labels[t.labels.length-1],t.minX=1,t.initialMinX=1),t.isXNumeric||t.noLabelsProvided||t.dataFormatXNumeric){var a;if(void 0===e.xaxis.tickAmount?(a=Math.round(t.svgWidth/150),\"numeric\"===e.xaxis.type&&t.dataPoints<30&&(a=t.dataPoints-1),a>t.dataPoints&&0!==t.dataPoints&&(a=t.dataPoints-1)):\"dataPoints\"===e.xaxis.tickAmount?(t.series.length>1&&(a=t.series[t.maxValsInArrayIndex].length-1),t.isXNumeric&&(a=t.maxX-t.minX-1)):a=e.xaxis.tickAmount,t.xTickAmount=a,void 0!==e.xaxis.max&&\"number\"==typeof e.xaxis.max&&(t.maxX=e.xaxis.max),void 0!==e.xaxis.min&&\"number\"==typeof e.xaxis.min&&(t.minX=e.xaxis.min),void 0!==e.xaxis.range&&(t.minX=t.maxX-e.xaxis.range),t.minX!==Number.MAX_VALUE&&t.maxX!==-Number.MAX_VALUE)if(e.xaxis.convertedCatToNumeric&&!t.dataFormatXNumeric){for(var s=[],r=t.minX-1;r<t.maxX;r++)s.push(r+1);t.xAxisScale={result:s,niceMin:s[0],niceMax:s[s.length-1]}}else t.xAxisScale=this.scales.setXScale(t.minX,t.maxX);else t.xAxisScale=this.scales.linearScale(1,a,a),t.noLabelsProvided&&t.labels.length>0&&(t.xAxisScale=this.scales.linearScale(1,t.labels.length,a-1),t.seriesX=t.labels.slice());i&&(t.labels=t.xAxisScale.result.slice())}return t.isBarHorizontal&&t.labels.length&&(t.xTickAmount=t.labels.length),this._handleSingleDataPoint(),this._getMinXDiff(),{minX:t.minX,maxX:t.maxX}}},{key:\"setZRange\",value:function(){var t=this.w.globals;if(t.isDataXYZ)for(var e=0;e<t.series.length;e++)if(void 0!==t.seriesZ[e])for(var i=0;i<t.seriesZ[e].length;i++)null!==t.seriesZ[e][i]&&x.isNumber(t.seriesZ[e][i])&&(t.maxZ=Math.max(t.maxZ,t.seriesZ[e][i]),t.minZ=Math.min(t.minZ,t.seriesZ[e][i]))}},{key:\"_handleSingleDataPoint\",value:function(){var t=this.w.globals,e=this.w.config;if(t.minX===t.maxX){var i=new I(this.ctx);if(\"datetime\"===e.xaxis.type){var a=i.getDate(t.minX);e.xaxis.labels.datetimeUTC?a.setUTCDate(a.getUTCDate()-2):a.setDate(a.getDate()-2),t.minX=new Date(a).getTime();var s=i.getDate(t.maxX);e.xaxis.labels.datetimeUTC?s.setUTCDate(s.getUTCDate()+2):s.setDate(s.getDate()+2),t.maxX=new Date(s).getTime()}else(\"numeric\"===e.xaxis.type||\"category\"===e.xaxis.type&&!t.noLabelsProvided)&&(t.minX=t.minX-2,t.initialMinX=t.minX,t.maxX=t.maxX+2,t.initialMaxX=t.maxX)}}},{key:\"_getMinXDiff\",value:function(){var t=this.w.globals;t.isXNumeric&&t.seriesX.forEach((function(e,i){1===e.length&&e.push(t.seriesX[t.maxValsInArrayIndex][t.seriesX[t.maxValsInArrayIndex].length-1]);var a=e.slice();a.sort((function(t,e){return t-e})),a.forEach((function(e,i){if(i>0){var s=e-a[i-1];s>0&&(t.minXDiff=Math.min(s,t.minXDiff))}})),1!==t.dataPoints&&t.minXDiff!==Number.MAX_VALUE||(t.minXDiff=.5)}))}},{key:\"_setStackedMinMax\",value:function(){var t=this,e=this.w.globals;if(e.series.length){var i=e.seriesGroups;i.length||(i=[this.w.config.series.map((function(t){return t.name}))]);var a={},s={};i.forEach((function(i){a[i]=[],s[i]=[],t.w.config.series.map((function(t,e){return i.indexOf(t.name)>-1?e:null})).filter((function(t){return null!==t})).forEach((function(t){for(var r=0;r<e.series[e.maxValsInArrayIndex].length;r++)void 0===a[i][r]&&(a[i][r]=0,s[i][r]=0),null!==e.series[t][r]&&x.isNumber(e.series[t][r])&&(e.series[t][r]>0?a[i][r]+=parseFloat(e.series[t][r])+1e-4:s[i][r]+=parseFloat(e.series[t][r]))}))})),Object.entries(a).forEach((function(t){var i=g(t,1)[0];a[i].forEach((function(t,r){e.maxY=Math.max(e.maxY,a[i][r]),e.minY=Math.min(e.minY,s[i][r])}))}))}}}]),t}(),q=function(){function t(e,i){a(this,t),this.ctx=e,this.elgrid=i,this.w=e.w;var s=this.w;this.xaxisFontSize=s.config.xaxis.labels.style.fontSize,this.axisFontFamily=s.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=s.config.xaxis.labels.style.colors,this.isCategoryBarHorizontal=\"bar\"===s.config.chart.type&&s.config.plotOptions.bar.horizontal,this.xAxisoffX=0,\"bottom\"===s.config.xaxis.position&&(this.xAxisoffX=s.globals.gridHeight),this.drawnLabels=[],this.axesUtils=new B(e)}return r(t,[{key:\"drawYaxis\",value:function(t){var e=this,i=this.w,a=new m(this.ctx),s=i.config.yaxis[t].labels.style,r=s.fontSize,o=s.fontFamily,n=s.fontWeight,l=a.group({class:\"apexcharts-yaxis\",rel:t,transform:\"translate(\"+i.globals.translateYAxisX[t]+\", 0)\"});if(this.axesUtils.isYAxisHidden(t))return l;var h=a.group({class:\"apexcharts-yaxis-texts-g\"});l.add(h);var c=i.globals.yAxisScale[t].result.length-1,d=i.globals.gridHeight/c,g=i.globals.translateY,u=i.globals.yLabelFormatters[t],p=i.globals.yAxisScale[t].result.slice();p=this.axesUtils.checkForReversedLabels(t,p);var f=\"\";if(i.config.yaxis[t].labels.show)for(var x=function(l){var x=p[l];x=u(x,l,i);var b=i.config.yaxis[t].labels.padding;i.config.yaxis[t].opposite&&0!==i.config.yaxis.length&&(b*=-1);var v=\"end\";i.config.yaxis[t].opposite&&(v=\"start\"),\"left\"===i.config.yaxis[t].labels.align?v=\"start\":\"center\"===i.config.yaxis[t].labels.align?v=\"middle\":\"right\"===i.config.yaxis[t].labels.align&&(v=\"end\");var m=e.axesUtils.getYAxisForeColor(s.colors,t),y=a.drawText({x:b,y:g+c/10+i.config.yaxis[t].labels.offsetY+1,text:x,textAnchor:v,fontSize:r,fontFamily:o,fontWeight:n,maxWidth:i.config.yaxis[t].labels.maxWidth,foreColor:Array.isArray(m)?m[l]:m,isPlainText:!1,cssClass:\"apexcharts-yaxis-label \"+s.cssClass});l===c&&(f=y),h.add(y);var w=document.createElementNS(i.globals.SVGNS,\"title\");if(w.textContent=Array.isArray(x)?x.join(\" \"):x,y.node.appendChild(w),0!==i.config.yaxis[t].labels.rotate){var k=a.rotateAroundCenter(f.node),A=a.rotateAroundCenter(y.node);y.node.setAttribute(\"transform\",\"rotate(\".concat(i.config.yaxis[t].labels.rotate,\" \").concat(k.x,\" \").concat(A.y,\")\"))}g+=d},b=c;b>=0;b--)x(b);if(void 0!==i.config.yaxis[t].title.text){var v=a.group({class:\"apexcharts-yaxis-title\"}),y=0;i.config.yaxis[t].opposite&&(y=i.globals.translateYAxisX[t]);var w=a.drawText({x:y,y:i.globals.gridHeight/2+i.globals.translateY+i.config.yaxis[t].title.offsetY,text:i.config.yaxis[t].title.text,textAnchor:\"end\",foreColor:i.config.yaxis[t].title.style.color,fontSize:i.config.yaxis[t].title.style.fontSize,fontWeight:i.config.yaxis[t].title.style.fontWeight,fontFamily:i.config.yaxis[t].title.style.fontFamily,cssClass:\"apexcharts-yaxis-title-text \"+i.config.yaxis[t].title.style.cssClass});v.add(w),l.add(v)}var k=i.config.yaxis[t].axisBorder,A=31+k.offsetX;if(i.config.yaxis[t].opposite&&(A=-31-k.offsetX),k.show){var S=a.drawLine(A,i.globals.translateY+k.offsetY-2,A,i.globals.gridHeight+i.globals.translateY+k.offsetY+2,k.color,0,k.width);l.add(S)}return i.config.yaxis[t].axisTicks.show&&this.axesUtils.drawYAxisTicks(A,c,k,i.config.yaxis[t].axisTicks,t,d,l),l}},{key:\"drawYaxisInversed\",value:function(t){var e=this.w,i=new m(this.ctx),a=i.group({class:\"apexcharts-xaxis apexcharts-yaxis-inversed\"}),s=i.group({class:\"apexcharts-xaxis-texts-g\",transform:\"translate(\".concat(e.globals.translateXAxisX,\", \").concat(e.globals.translateXAxisY,\")\")});a.add(s);var r=e.globals.yAxisScale[t].result.length-1,o=e.globals.gridWidth/r+.1,n=o+e.config.xaxis.labels.offsetX,l=e.globals.xLabelFormatter,h=e.globals.yAxisScale[t].result.slice(),c=e.globals.timescaleLabels;c.length>0&&(this.xaxisLabels=c.slice(),r=(h=c.slice()).length),h=this.axesUtils.checkForReversedLabels(t,h);var d=c.length;if(e.config.xaxis.labels.show)for(var g=d?0:r;d?g<d:g>=0;d?g++:g--){var u=h[g];u=l(u,g,e);var p=e.globals.gridWidth+e.globals.padHorizontal-(n-o+e.config.xaxis.labels.offsetX);if(c.length){var f=this.axesUtils.getLabel(h,c,p,g,this.drawnLabels,this.xaxisFontSize);p=f.x,u=f.text,this.drawnLabels.push(f.text),0===g&&e.globals.skipFirstTimelinelabel&&(u=\"\"),g===h.length-1&&e.globals.skipLastTimelinelabel&&(u=\"\")}var x=i.drawText({x:p,y:this.xAxisoffX+e.config.xaxis.labels.offsetY+30-(\"top\"===e.config.xaxis.position?e.globals.xAxisHeight+e.config.xaxis.axisTicks.height-2:0),text:u,textAnchor:\"middle\",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[t]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,fontWeight:e.config.xaxis.labels.style.fontWeight,isPlainText:!1,cssClass:\"apexcharts-xaxis-label \"+e.config.xaxis.labels.style.cssClass});s.add(x),x.tspan(u);var b=document.createElementNS(e.globals.SVGNS,\"title\");b.textContent=u,x.node.appendChild(b),n+=o}return this.inversedYAxisTitleText(a),this.inversedYAxisBorder(a),a}},{key:\"inversedYAxisBorder\",value:function(t){var e=this.w,i=new m(this.ctx),a=e.config.xaxis.axisBorder;if(a.show){var s=0;\"bar\"===e.config.chart.type&&e.globals.isXNumeric&&(s-=15);var r=i.drawLine(e.globals.padHorizontal+s+a.offsetX,this.xAxisoffX,e.globals.gridWidth,this.xAxisoffX,a.color,0,a.height);this.elgrid&&this.elgrid.elGridBorders&&e.config.grid.show?this.elgrid.elGridBorders.add(r):t.add(r)}}},{key:\"inversedYAxisTitleText\",value:function(t){var e=this.w,i=new m(this.ctx);if(void 0!==e.config.xaxis.title.text){var a=i.group({class:\"apexcharts-xaxis-title apexcharts-yaxis-title-inversed\"}),s=i.drawText({x:e.globals.gridWidth/2+e.config.xaxis.title.offsetX,y:this.xAxisoffX+parseFloat(this.xaxisFontSize)+parseFloat(e.config.xaxis.title.style.fontSize)+e.config.xaxis.title.offsetY+20,text:e.config.xaxis.title.text,textAnchor:\"middle\",fontSize:e.config.xaxis.title.style.fontSize,fontFamily:e.config.xaxis.title.style.fontFamily,fontWeight:e.config.xaxis.title.style.fontWeight,foreColor:e.config.xaxis.title.style.color,cssClass:\"apexcharts-xaxis-title-text \"+e.config.xaxis.title.style.cssClass});a.add(s),t.add(a)}}},{key:\"yAxisTitleRotate\",value:function(t,e){var i=this.w,a=new m(this.ctx),s={width:0,height:0},r={width:0,height:0},o=i.globals.dom.baseEl.querySelector(\" .apexcharts-yaxis[rel='\".concat(t,\"'] .apexcharts-yaxis-texts-g\"));null!==o&&(s=o.getBoundingClientRect());var n=i.globals.dom.baseEl.querySelector(\".apexcharts-yaxis[rel='\".concat(t,\"'] .apexcharts-yaxis-title text\"));if(null!==n&&(r=n.getBoundingClientRect()),null!==n){var l=this.xPaddingForYAxisTitle(t,s,r,e);n.setAttribute(\"x\",l.xPos-(e?10:0))}if(null!==n){var h=a.rotateAroundCenter(n);n.setAttribute(\"transform\",\"rotate(\".concat(e?-1*i.config.yaxis[t].title.rotate:i.config.yaxis[t].title.rotate,\" \").concat(h.x,\" \").concat(h.y,\")\"))}}},{key:\"xPaddingForYAxisTitle\",value:function(t,e,i,a){var s=this.w,r=0,o=0,n=10;return void 0===s.config.yaxis[t].title.text||t<0?{xPos:o,padd:0}:(a?(o=e.width+s.config.yaxis[t].title.offsetX+i.width/2+n/2,0===(r+=1)&&(o-=n/2)):(o=-1*e.width+s.config.yaxis[t].title.offsetX+n/2+i.width/2,s.globals.isBarHorizontal&&(n=25,o=-1*e.width-s.config.yaxis[t].title.offsetX-n)),{xPos:o,padd:n})}},{key:\"setYAxisXPosition\",value:function(t,e){var i=this.w,a=0,s=0,r=18,o=1;i.config.yaxis.length>1&&(this.multipleYs=!0),i.config.yaxis.map((function(n,l){var h=i.globals.ignoreYAxisIndexes.indexOf(l)>-1||!n.show||n.floating||0===t[l].width,c=t[l].width+e[l].width;n.opposite?i.globals.isBarHorizontal?(s=i.globals.gridWidth+i.globals.translateX-1,i.globals.translateYAxisX[l]=s-n.labels.offsetX):(s=i.globals.gridWidth+i.globals.translateX+o,h||(o=o+c+20),i.globals.translateYAxisX[l]=s-n.labels.offsetX+20):(a=i.globals.translateX-r,h||(r=r+c+20),i.globals.translateYAxisX[l]=a+n.labels.offsetX)}))}},{key:\"setYAxisTextAlignments\",value:function(){var t=this.w,e=t.globals.dom.baseEl.getElementsByClassName(\"apexcharts-yaxis\");(e=x.listToArray(e)).forEach((function(e,i){var a=t.config.yaxis[i];if(a&&!a.floating&&void 0!==a.labels.align){var s=t.globals.dom.baseEl.querySelector(\".apexcharts-yaxis[rel='\".concat(i,\"'] .apexcharts-yaxis-texts-g\")),r=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis[rel='\".concat(i,\"'] .apexcharts-yaxis-label\"));r=x.listToArray(r);var o=s.getBoundingClientRect();\"left\"===a.labels.align?(r.forEach((function(t,e){t.setAttribute(\"text-anchor\",\"start\")})),a.opposite||s.setAttribute(\"transform\",\"translate(-\".concat(o.width,\", 0)\"))):\"center\"===a.labels.align?(r.forEach((function(t,e){t.setAttribute(\"text-anchor\",\"middle\")})),s.setAttribute(\"transform\",\"translate(\".concat(o.width/2*(a.opposite?1:-1),\", 0)\"))):\"right\"===a.labels.align&&(r.forEach((function(t,e){t.setAttribute(\"text-anchor\",\"end\")})),a.opposite&&s.setAttribute(\"transform\",\"translate(\".concat(o.width,\", 0)\")))}}))}}]),t}(),Z=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.documentEvent=x.bind(this.documentEvent,this)}return r(t,[{key:\"addEventListener\",value:function(t,e){var i=this.w;i.globals.events.hasOwnProperty(t)?i.globals.events[t].push(e):i.globals.events[t]=[e]}},{key:\"removeEventListener\",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){var a=i.globals.events[t].indexOf(e);-1!==a&&i.globals.events[t].splice(a,1)}}},{key:\"fireEvent\",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){e&&e.length||(e=[]);for(var a=i.globals.events[t],s=a.length,r=0;r<s;r++)a[r].apply(null,e)}}},{key:\"setupEventHandlers\",value:function(){var t=this,e=this.w,i=this.ctx,a=e.globals.dom.baseEl.querySelector(e.globals.chartClass);this.ctx.eventList.forEach((function(t){a.addEventListener(t,(function(t){var a=Object.assign({},e,{seriesIndex:e.globals.capturedSeriesIndex,dataPointIndex:e.globals.capturedDataPointIndex});\"mousemove\"===t.type||\"touchmove\"===t.type?\"function\"==typeof e.config.chart.events.mouseMove&&e.config.chart.events.mouseMove(t,i,a):\"mouseleave\"===t.type||\"touchleave\"===t.type?\"function\"==typeof e.config.chart.events.mouseLeave&&e.config.chart.events.mouseLeave(t,i,a):(\"mouseup\"===t.type&&1===t.which||\"touchend\"===t.type)&&(\"function\"==typeof e.config.chart.events.click&&e.config.chart.events.click(t,i,a),i.ctx.events.fireEvent(\"click\",[t,i,a]))}),{capture:!1,passive:!0})})),this.ctx.eventList.forEach((function(i){e.globals.dom.baseEl.addEventListener(i,t.documentEvent,{passive:!0})})),this.ctx.core.setupBrushHandler()}},{key:\"documentEvent\",value:function(t){var e=this.w,i=t.target.className;if(\"click\"===t.type){var a=e.globals.dom.baseEl.querySelector(\".apexcharts-menu\");a&&a.classList.contains(\"apexcharts-menu-open\")&&\"apexcharts-menu-icon\"!==i&&a.classList.remove(\"apexcharts-menu-open\")}e.globals.clientX=\"touchmove\"===t.type?t.touches[0].clientX:t.clientX,e.globals.clientY=\"touchmove\"===t.type?t.touches[0].clientY:t.clientY}}]),t}(),$=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"setCurrentLocaleValues\",value:function(t){var e=this.w.config.chart.locales;window.Apex.chart&&window.Apex.chart.locales&&window.Apex.chart.locales.length>0&&(e=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=e.filter((function(e){return e.name===t}))[0];if(!i)throw new Error(\"Wrong locale name provided. Please make sure you set the correct locale name in options\");var a=x.extend(C,i);this.w.globals.locale=a.options}}]),t}(),J=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"drawAxis\",value:function(t,e){var i,a,s=this,r=this.w.globals,o=this.w.config,n=new V(this.ctx,e),l=new q(this.ctx,e);r.axisCharts&&\"radar\"!==t&&(r.isBarHorizontal?(a=l.drawYaxisInversed(0),i=n.drawXaxisInversed(0),r.dom.elGraphical.add(i),r.dom.elGraphical.add(a)):(i=n.drawXaxis(),r.dom.elGraphical.add(i),o.yaxis.map((function(t,e){if(-1===r.ignoreYAxisIndexes.indexOf(e)&&(a=l.drawYaxis(e),r.dom.Paper.add(a),\"back\"===s.w.config.grid.position)){var i=r.dom.Paper.children()[1];i.remove(),r.dom.Paper.add(i)}}))))}}]),t}(),Q=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"drawXCrosshairs\",value:function(){var t=this.w,e=new m(this.ctx),i=new v(this.ctx),a=t.config.xaxis.crosshairs.fill.gradient,s=t.config.xaxis.crosshairs.dropShadow,r=t.config.xaxis.crosshairs.fill.type,o=a.colorFrom,n=a.colorTo,l=a.opacityFrom,h=a.opacityTo,c=a.stops,d=s.enabled,g=s.left,u=s.top,p=s.blur,f=s.color,b=s.opacity,y=t.config.xaxis.crosshairs.fill.color;if(t.config.xaxis.crosshairs.show){\"gradient\"===r&&(y=e.drawGradient(\"vertical\",o,n,l,h,null,c,null));var w=e.drawRect();1===t.config.xaxis.crosshairs.width&&(w=e.drawLine());var k=t.globals.gridHeight;(!x.isNumber(k)||k<0)&&(k=0);var A=t.config.xaxis.crosshairs.width;(!x.isNumber(A)||A<0)&&(A=0),w.attr({class:\"apexcharts-xcrosshairs\",x:0,y:0,y2:k,width:A,height:k,fill:y,filter:\"none\",\"fill-opacity\":t.config.xaxis.crosshairs.opacity,stroke:t.config.xaxis.crosshairs.stroke.color,\"stroke-width\":t.config.xaxis.crosshairs.stroke.width,\"stroke-dasharray\":t.config.xaxis.crosshairs.stroke.dashArray}),d&&(w=i.dropShadow(w,{left:g,top:u,blur:p,color:f,opacity:b})),t.globals.dom.elGraphical.add(w)}}},{key:\"drawYCrosshairs\",value:function(){var t=this.w,e=new m(this.ctx),i=t.config.yaxis[0].crosshairs,a=t.globals.barPadForNumericAxis;if(t.config.yaxis[0].crosshairs.show){var s=e.drawLine(-a,0,t.globals.gridWidth+a,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);s.attr({class:\"apexcharts-ycrosshairs\"}),t.globals.dom.elGraphical.add(s)}var r=e.drawLine(-a,0,t.globals.gridWidth+a,0,i.stroke.color,0,0);r.attr({class:\"apexcharts-ycrosshairs-hidden\"}),t.globals.dom.elGraphical.add(r)}}]),t}(),K=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"checkResponsiveConfig\",value:function(t){var e=this,i=this.w,a=i.config;if(0!==a.responsive.length){var s=a.responsive.slice();s.sort((function(t,e){return t.breakpoint>e.breakpoint?1:e.breakpoint>t.breakpoint?-1:0})).reverse();var r=new E({}),o=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=s[0].breakpoint,o=window.innerWidth>0?window.innerWidth:screen.width;if(o>a){var n=y.extendArrayProps(r,i.globals.initialConfig,i);t=x.extend(n,t),t=x.extend(i.config,t),e.overrideResponsiveOptions(t)}else for(var l=0;l<s.length;l++)o<s[l].breakpoint&&(t=y.extendArrayProps(r,s[l].options,i),t=x.extend(i.config,t),e.overrideResponsiveOptions(t))};if(t){var n=y.extendArrayProps(r,t,i);n=x.extend(i.config,n),o(n=x.extend(n,t))}else o({})}}},{key:\"overrideResponsiveOptions\",value:function(t){var e=new E(t).init({responsiveOverride:!0});this.w.config=e}}]),t}(),tt=function(){function t(e){a(this,t),this.ctx=e,this.colors=[],this.w=e.w;var i=this.w;this.isColorFn=!1,this.isHeatmapDistributed=\"treemap\"===i.config.chart.type&&i.config.plotOptions.treemap.distributed||\"heatmap\"===i.config.chart.type&&i.config.plotOptions.heatmap.distributed,this.isBarDistributed=i.config.plotOptions.bar.distributed&&(\"bar\"===i.config.chart.type||\"rangeBar\"===i.config.chart.type)}return r(t,[{key:\"init\",value:function(){this.setDefaultColors()}},{key:\"setDefaultColors\",value:function(){var t,e=this,i=this.w,a=new x;if(i.globals.dom.elWrap.classList.add(\"apexcharts-theme-\".concat(i.config.theme.mode)),void 0===i.config.colors||0===(null===(t=i.config.colors)||void 0===t?void 0:t.length)?i.globals.colors=this.predefined():(i.globals.colors=i.config.colors,Array.isArray(i.config.colors)&&i.config.colors.length>0&&\"function\"==typeof i.config.colors[0]&&(i.globals.colors=i.config.series.map((function(t,a){var s=i.config.colors[a];return s||(s=i.config.colors[0]),\"function\"==typeof s?(e.isColorFn=!0,s({value:i.globals.axisCharts?i.globals.series[a][0]?i.globals.series[a][0]:0:i.globals.series[a],seriesIndex:a,dataPointIndex:a,w:i})):s})))),i.globals.seriesColors.map((function(t,e){t&&(i.globals.colors[e]=t)})),i.config.theme.monochrome.enabled){var s=[],r=i.globals.series.length;(this.isBarDistributed||this.isHeatmapDistributed)&&(r=i.globals.series[0].length*i.globals.series.length);for(var o=i.config.theme.monochrome.color,n=1/(r/i.config.theme.monochrome.shadeIntensity),l=i.config.theme.monochrome.shadeTo,h=0,c=0;c<r;c++){var d=void 0;\"dark\"===l?(d=a.shadeColor(-1*h,o),h+=n):(d=a.shadeColor(h,o),h+=n),s.push(d)}i.globals.colors=s.slice()}var g=i.globals.colors.slice();this.pushExtraColors(i.globals.colors);[\"fill\",\"stroke\"].forEach((function(t){void 0===i.config[t].colors?i.globals[t].colors=e.isColorFn?i.config.colors:g:i.globals[t].colors=i.config[t].colors.slice(),e.pushExtraColors(i.globals[t].colors)})),void 0===i.config.dataLabels.style.colors?i.globals.dataLabels.style.colors=g:i.globals.dataLabels.style.colors=i.config.dataLabels.style.colors.slice(),this.pushExtraColors(i.globals.dataLabels.style.colors,50),void 0===i.config.plotOptions.radar.polygons.fill.colors?i.globals.radarPolygons.fill.colors=[\"dark\"===i.config.theme.mode?\"#424242\":\"none\"]:i.globals.radarPolygons.fill.colors=i.config.plotOptions.radar.polygons.fill.colors.slice(),this.pushExtraColors(i.globals.radarPolygons.fill.colors,20),void 0===i.config.markers.colors?i.globals.markers.colors=g:i.globals.markers.colors=i.config.markers.colors.slice(),this.pushExtraColors(i.globals.markers.colors)}},{key:\"pushExtraColors\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,s=e||a.globals.series.length;if(null===i&&(i=this.isBarDistributed||this.isHeatmapDistributed||\"heatmap\"===a.config.chart.type&&a.config.plotOptions.heatmap.colorScale.inverse),i&&a.globals.series.length&&(s=a.globals.series[a.globals.maxValsInArrayIndex].length*a.globals.series.length),t.length<s)for(var r=s-t.length,o=0;o<r;o++)t.push(t[o])}},{key:\"updateThemeOptions\",value:function(t){t.chart=t.chart||{},t.tooltip=t.tooltip||{};var e=t.theme.mode||\"light\",i=t.theme.palette?t.theme.palette:\"dark\"===e?\"palette4\":\"palette1\",a=t.chart.foreColor?t.chart.foreColor:\"dark\"===e?\"#f6f7f8\":\"#373d3f\";return t.tooltip.theme=e,t.chart.foreColor=a,t.theme.palette=i,t}},{key:\"predefined\",value:function(){switch(this.w.config.theme.palette){case\"palette1\":default:this.colors=[\"#008FFB\",\"#00E396\",\"#FEB019\",\"#FF4560\",\"#775DD0\"];break;case\"palette2\":this.colors=[\"#3f51b5\",\"#03a9f4\",\"#4caf50\",\"#f9ce1d\",\"#FF9800\"];break;case\"palette3\":this.colors=[\"#33b2df\",\"#546E7A\",\"#d4526e\",\"#13d8aa\",\"#A5978B\"];break;case\"palette4\":this.colors=[\"#4ecdc4\",\"#c7f464\",\"#81D4FA\",\"#fd6a6a\",\"#546E7A\"];break;case\"palette5\":this.colors=[\"#2b908f\",\"#f9a3a4\",\"#90ee7e\",\"#fa4443\",\"#69d2e7\"];break;case\"palette6\":this.colors=[\"#449DD1\",\"#F86624\",\"#EA3546\",\"#662E9B\",\"#C5D86D\"];break;case\"palette7\":this.colors=[\"#D7263D\",\"#1B998B\",\"#2E294E\",\"#F46036\",\"#E2C044\"];break;case\"palette8\":this.colors=[\"#662E9B\",\"#F86624\",\"#F9C80E\",\"#EA3546\",\"#43BCCD\"];break;case\"palette9\":this.colors=[\"#5C4742\",\"#A5978B\",\"#8D5B4C\",\"#5A2A27\",\"#C4BBAF\"];break;case\"palette10\":this.colors=[\"#A300D6\",\"#7D02EB\",\"#5653FE\",\"#2983FF\",\"#00B1F2\"]}return this.colors}}]),t}(),et=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"draw\",value:function(){this.drawTitleSubtitle(\"title\"),this.drawTitleSubtitle(\"subtitle\")}},{key:\"drawTitleSubtitle\",value:function(t){var e=this.w,i=\"title\"===t?e.config.title:e.config.subtitle,a=e.globals.svgWidth/2,s=i.offsetY,r=\"middle\";if(\"left\"===i.align?(a=10,r=\"start\"):\"right\"===i.align&&(a=e.globals.svgWidth-10,r=\"end\"),a+=i.offsetX,s=s+parseInt(i.style.fontSize,10)+i.margin/2,void 0!==i.text){var o=new m(this.ctx).drawText({x:a,y:s,text:i.text,textAnchor:r,fontSize:i.style.fontSize,fontFamily:i.style.fontFamily,fontWeight:i.style.fontWeight,foreColor:i.style.color,opacity:1});o.node.setAttribute(\"class\",\"apexcharts-\".concat(t,\"-text\")),e.globals.dom.Paper.add(o)}}}]),t}(),it=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\"getTitleSubtitleCoords\",value:function(t){var e=this.w,i=0,a=0,s=\"title\"===t?e.config.title.floating:e.config.subtitle.floating,r=e.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(t,\"-text\"));if(null!==r&&!s){var o=r.getBoundingClientRect();i=o.width,a=e.globals.axisCharts?o.height+5:o.height}return{width:i,height:a}}},{key:\"getLegendsRect\",value:function(){var t=this.w,e=t.globals.dom.elLegendWrap;t.config.legend.height||\"top\"!==t.config.legend.position&&\"bottom\"!==t.config.legend.position||(e.style.maxHeight=t.globals.svgHeight/2+\"px\");var i=Object.assign({},x.getBoundingClientRect(e));return null!==e&&!t.config.legend.floating&&t.config.legend.show?this.dCtx.lgRect={x:i.x,y:i.y,height:i.height,width:0===i.height?0:i.width}:this.dCtx.lgRect={x:0,y:0,height:0,width:0},\"left\"!==t.config.legend.position&&\"right\"!==t.config.legend.position||1.5*this.dCtx.lgRect.width>t.globals.svgWidth&&(this.dCtx.lgRect.width=t.globals.svgWidth/1.5),this.dCtx.lgRect}},{key:\"getLargestStringFromMultiArr\",value:function(t,e){var i=t;if(this.w.globals.isMultiLineX){var a=e.map((function(t,e){return Array.isArray(t)?t.length:1})),s=Math.max.apply(Math,u(a));i=e[a.indexOf(s)]}return i}}]),t}(),at=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\"getxAxisLabelsCoords\",value:function(){var t,e=this.w,i=e.globals.labels.slice();if(e.config.xaxis.convertedCatToNumeric&&0===i.length&&(i=e.globals.categoryLabels),e.globals.timescaleLabels.length>0){var a=this.getxAxisTimeScaleLabelsCoords();t={width:a.width,height:a.height},e.globals.rotateXLabels=!1}else{this.dCtx.lgWidthForSideLegends=\"left\"!==e.config.legend.position&&\"right\"!==e.config.legend.position||e.config.legend.floating?0:this.dCtx.lgRect.width;var s=e.globals.xLabelFormatter,r=x.getLargestStringFromArr(i),o=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,i);e.globals.isBarHorizontal&&(o=r=e.globals.yAxisScale[0].result.reduce((function(t,e){return t.length>e.length?t:e}),0));var n=new T(this.dCtx.ctx),l=r;r=n.xLabelFormat(s,r,l,{i:void 0,dateFormatter:new I(this.dCtx.ctx).formatDate,w:e}),o=n.xLabelFormat(s,o,l,{i:void 0,dateFormatter:new I(this.dCtx.ctx).formatDate,w:e}),(e.config.xaxis.convertedCatToNumeric&&void 0===r||\"\"===String(r).trim())&&(o=r=\"1\");var h=new m(this.dCtx.ctx),c=h.getTextRects(r,e.config.xaxis.labels.style.fontSize),d=c;if(r!==o&&(d=h.getTextRects(o,e.config.xaxis.labels.style.fontSize)),(t={width:c.width>=d.width?c.width:d.width,height:c.height>=d.height?c.height:d.height}).width*i.length>e.globals.svgWidth-this.dCtx.lgWidthForSideLegends-this.dCtx.yAxisWidth-this.dCtx.gridPad.left-this.dCtx.gridPad.right&&0!==e.config.xaxis.labels.rotate||e.config.xaxis.labels.rotateAlways){if(!e.globals.isBarHorizontal){e.globals.rotateXLabels=!0;var g=function(t){return h.getTextRects(t,e.config.xaxis.labels.style.fontSize,e.config.xaxis.labels.style.fontFamily,\"rotate(\".concat(e.config.xaxis.labels.rotate,\" 0 0)\"),!1)};c=g(r),r!==o&&(d=g(o)),t.height=(c.height>d.height?c.height:d.height)/1.5,t.width=c.width>d.width?c.width:d.width}}else e.globals.rotateXLabels=!1}return e.config.xaxis.labels.show||(t={width:0,height:0}),{width:t.width,height:t.height}}},{key:\"getxAxisGroupLabelsCoords\",value:function(){var t,e=this.w;if(!e.globals.hasXaxisGroups)return{width:0,height:0};var i,a=(null===(t=e.config.xaxis.group.style)||void 0===t?void 0:t.fontSize)||e.config.xaxis.labels.style.fontSize,s=e.globals.groups.map((function(t){return t.title})),r=x.getLargestStringFromArr(s),o=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,s),n=new m(this.dCtx.ctx),l=n.getTextRects(r,a),h=l;return r!==o&&(h=n.getTextRects(o,a)),i={width:l.width>=h.width?l.width:h.width,height:l.height>=h.height?l.height:h.height},e.config.xaxis.labels.show||(i={width:0,height:0}),{width:i.width,height:i.height}}},{key:\"getxAxisTitleCoords\",value:function(){var t=this.w,e=0,i=0;if(void 0!==t.config.xaxis.title.text){var a=new m(this.dCtx.ctx).getTextRects(t.config.xaxis.title.text,t.config.xaxis.title.style.fontSize);e=a.width,i=a.height}return{width:e,height:i}}},{key:\"getxAxisTimeScaleLabelsCoords\",value:function(){var t,e=this.w;this.dCtx.timescaleLabels=e.globals.timescaleLabels.slice();var i=this.dCtx.timescaleLabels.map((function(t){return t.value})),a=i.reduce((function(t,e){return void 0===t?(console.error(\"You have possibly supplied invalid Date format. Please supply a valid JavaScript Date\"),0):t.length>e.length?t:e}),0);return 1.05*(t=new m(this.dCtx.ctx).getTextRects(a,e.config.xaxis.labels.style.fontSize)).width*i.length>e.globals.gridWidth&&0!==e.config.xaxis.labels.rotate&&(e.globals.overlappingXLabels=!0),t}},{key:\"additionalPaddingXLabels\",value:function(t){var e=this,i=this.w,a=i.globals,s=i.config,r=s.xaxis.type,o=t.width;a.skipLastTimelinelabel=!1,a.skipFirstTimelinelabel=!1;var n=i.config.yaxis[0].opposite&&i.globals.isBarHorizontal,l=function(t,n){s.yaxis.length>1&&function(t){return-1!==a.collapsedSeriesIndices.indexOf(t)}(n)||function(t){if(e.dCtx.timescaleLabels&&e.dCtx.timescaleLabels.length){var n=e.dCtx.timescaleLabels[0],l=e.dCtx.timescaleLabels[e.dCtx.timescaleLabels.length-1].position+o/1.75-e.dCtx.yAxisWidthRight,h=n.position-o/1.75+e.dCtx.yAxisWidthLeft,c=\"right\"===i.config.legend.position&&e.dCtx.lgRect.width>0?e.dCtx.lgRect.width:0;l>a.svgWidth-a.translateX-c&&(a.skipLastTimelinelabel=!0),h<-(t.show&&!t.floating||\"bar\"!==s.chart.type&&\"candlestick\"!==s.chart.type&&\"rangeBar\"!==s.chart.type&&\"boxPlot\"!==s.chart.type?10:o/1.75)&&(a.skipFirstTimelinelabel=!0)}else\"datetime\"===r?e.dCtx.gridPad.right<o&&!a.rotateXLabels&&(a.skipLastTimelinelabel=!0):\"datetime\"!==r&&e.dCtx.gridPad.right<o/2-e.dCtx.yAxisWidthRight&&!a.rotateXLabels&&!i.config.xaxis.labels.trim&&(\"between\"!==i.config.xaxis.tickPlacement||i.globals.isBarHorizontal)&&(e.dCtx.xPadRight=o/2+1)}(t)};s.yaxis.forEach((function(t,i){n?(e.dCtx.gridPad.left<o&&(e.dCtx.xPadLeft=o/2+1),e.dCtx.xPadRight=o/2+1):l(t,i)}))}}]),t}(),st=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\"getyAxisLabelsCoords\",value:function(){var t=this,e=this.w,i=[],a=10,s=new B(this.dCtx.ctx);return e.config.yaxis.map((function(r,o){var n=e.globals.yAxisScale[o],l=0;if(!s.isYAxisHidden(o)&&r.labels.show&&void 0!==r.labels.minWidth&&(l=r.labels.minWidth),!s.isYAxisHidden(o)&&r.labels.show&&n.result.length){var h=e.globals.yLabelFormatters[o],c=n.niceMin===Number.MIN_VALUE?0:n.niceMin,d=String(c).length>String(n.niceMax).length?c:n.niceMax,g=h(d,{seriesIndex:o,dataPointIndex:-1,w:e}),u=g;if(void 0!==g&&0!==g.length||(g=d),e.globals.isBarHorizontal){a=0;var p=e.globals.labels.slice();g=h(g=x.getLargestStringFromArr(p),{seriesIndex:o,dataPointIndex:-1,w:e}),u=t.dCtx.dimHelpers.getLargestStringFromMultiArr(g,p)}var f=new m(t.dCtx.ctx),b=\"rotate(\".concat(r.labels.rotate,\" 0 0)\"),v=f.getTextRects(g,r.labels.style.fontSize,r.labels.style.fontFamily,b,!1),y=v;g!==u&&(y=f.getTextRects(u,r.labels.style.fontSize,r.labels.style.fontFamily,b,!1)),i.push({width:(l>y.width||l>v.width?l:y.width>v.width?y.width:v.width)+a,height:y.height>v.height?y.height:v.height})}else i.push({width:0,height:0})})),i}},{key:\"getyAxisTitleCoords\",value:function(){var t=this,e=this.w,i=[];return e.config.yaxis.map((function(e,a){if(e.show&&void 0!==e.title.text){var s=new m(t.dCtx.ctx),r=\"rotate(\".concat(e.title.rotate,\" 0 0)\"),o=s.getTextRects(e.title.text,e.title.style.fontSize,e.title.style.fontFamily,r,!1);i.push({width:o.width,height:o.height})}else i.push({width:0,height:0})})),i}},{key:\"getTotalYAxisWidth\",value:function(){var t=this.w,e=0,i=0,a=0,s=t.globals.yAxisScale.length>1?10:0,r=new B(this.dCtx.ctx),o=function(o,n){var l=t.config.yaxis[n].floating,h=0;o.width>0&&!l?(h=o.width+s,function(e){return t.globals.ignoreYAxisIndexes.indexOf(e)>-1}(n)&&(h=h-o.width-s)):h=l||r.isYAxisHidden(n)?0:5,t.config.yaxis[n].opposite?a+=h:i+=h,e+=h};return t.globals.yLabelsCoords.map((function(t,e){o(t,e)})),t.globals.yTitleCoords.map((function(t,e){o(t,e)})),t.globals.isBarHorizontal&&!t.config.yaxis[0].floating&&(e=t.globals.yLabelsCoords[0].width+t.globals.yTitleCoords[0].width+15),this.dCtx.yAxisWidthLeft=i,this.dCtx.yAxisWidthRight=a,e}}]),t}(),rt=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\"gridPadForColumnsInNumericAxis\",value:function(t){var e=this.w;if(e.globals.noData||e.globals.allSeriesCollapsed)return 0;var i=function(t){return\"bar\"===t||\"rangeBar\"===t||\"candlestick\"===t||\"boxPlot\"===t},a=e.config.chart.type,s=0,r=i(a)?e.config.series.length:1;if(e.globals.comboBarCount>0&&(r=e.globals.comboBarCount),e.globals.collapsedSeries.forEach((function(t){i(t.type)&&(r-=1)})),e.config.chart.stacked&&(r=1),(i(a)||e.globals.comboBarCount>0)&&e.globals.isXNumeric&&!e.globals.isBarHorizontal&&r>0){var o,n,l=Math.abs(e.globals.initialMaxX-e.globals.initialMinX);l<=3&&(l=e.globals.dataPoints),o=l/t,e.globals.minXDiff&&e.globals.minXDiff/o>0&&(n=e.globals.minXDiff/o),n>t/2&&(n/=2),(s=n/r*parseInt(e.config.plotOptions.bar.columnWidth,10)/100)<1&&(s=1),s=s/(r>1?1:1.5)+5,e.globals.barPadForNumericAxis=s}return s}},{key:\"gridPadFortitleSubtitle\",value:function(){var t=this,e=this.w,i=e.globals,a=this.dCtx.isSparkline||!e.globals.axisCharts?0:10;[\"title\",\"subtitle\"].forEach((function(i){void 0!==e.config[i].text?a+=e.config[i].margin:a+=t.dCtx.isSparkline||!e.globals.axisCharts?0:5})),!e.config.legend.show||\"bottom\"!==e.config.legend.position||e.config.legend.floating||e.globals.axisCharts||(a+=10);var s=this.dCtx.dimHelpers.getTitleSubtitleCoords(\"title\"),r=this.dCtx.dimHelpers.getTitleSubtitleCoords(\"subtitle\");i.gridHeight=i.gridHeight-s.height-r.height-a,i.translateY=i.translateY+s.height+r.height+a}},{key:\"setGridXPosForDualYAxis\",value:function(t,e){var i=this.w,a=new B(this.dCtx.ctx);i.config.yaxis.map((function(s,r){-1!==i.globals.ignoreYAxisIndexes.indexOf(r)||s.floating||a.isYAxisHidden(r)||(s.opposite&&(i.globals.translateX=i.globals.translateX-(e[r].width+t[r].width)-parseInt(i.config.yaxis[r].labels.style.fontSize,10)/1.2-12),i.globals.translateX<2&&(i.globals.translateX=2))}))}}]),t}(),ot=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.lgRect={},this.yAxisWidth=0,this.yAxisWidthLeft=0,this.yAxisWidthRight=0,this.xAxisHeight=0,this.isSparkline=this.w.config.chart.sparkline.enabled,this.dimHelpers=new it(this),this.dimYAxis=new st(this),this.dimXAxis=new at(this),this.dimGrid=new rt(this),this.lgWidthForSideLegends=0,this.gridPad=this.w.config.grid.padding,this.xPadRight=0,this.xPadLeft=0}return r(t,[{key:\"plotCoords\",value:function(){var t=this,e=this.w,i=e.globals;this.lgRect=this.dimHelpers.getLegendsRect(),this.isSparkline&&(e.config.markers.discrete.length>0||e.config.markers.size>0)&&Object.entries(this.gridPad).forEach((function(e){var i=g(e,2),a=i[0],s=i[1];t.gridPad[a]=Math.max(s,t.w.globals.markers.largestSize/1.5)})),i.axisCharts?this.setDimensionsForAxisCharts():this.setDimensionsForNonAxisCharts(),this.dimGrid.gridPadFortitleSubtitle(),i.gridHeight=i.gridHeight-this.gridPad.top-this.gridPad.bottom,i.gridWidth=i.gridWidth-this.gridPad.left-this.gridPad.right-this.xPadRight-this.xPadLeft;var a=this.dimGrid.gridPadForColumnsInNumericAxis(i.gridWidth);i.gridWidth=i.gridWidth-2*a,i.translateX=i.translateX+this.gridPad.left+this.xPadLeft+(a>0?a+4:0),i.translateY=i.translateY+this.gridPad.top}},{key:\"setDimensionsForAxisCharts\",value:function(){var t=this,e=this.w,i=e.globals,a=this.dimYAxis.getyAxisLabelsCoords(),s=this.dimYAxis.getyAxisTitleCoords();e.globals.yLabelsCoords=[],e.globals.yTitleCoords=[],e.config.yaxis.map((function(t,i){e.globals.yLabelsCoords.push({width:a[i].width,index:i}),e.globals.yTitleCoords.push({width:s[i].width,index:i})})),this.yAxisWidth=this.dimYAxis.getTotalYAxisWidth();var r=this.dimXAxis.getxAxisLabelsCoords(),o=this.dimXAxis.getxAxisGroupLabelsCoords(),n=this.dimXAxis.getxAxisTitleCoords();this.conditionalChecksForAxisCoords(r,n,o),i.translateXAxisY=e.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=e.globals.rotateXLabels&&e.globals.isXNumeric&&e.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,e.globals.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(e.config.xaxis.labels.style.fontSize,10)/1.5*-1),i.translateXAxisY=i.translateXAxisY+e.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+e.config.xaxis.labels.offsetX;var l=this.yAxisWidth,h=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight-n.height,i.xAxisGroupLabelsHeight=i.xAxisLabelsHeight-r.height,i.xAxisLabelsWidth=this.xAxisWidth,i.xAxisHeight=this.xAxisHeight;var c=10;(\"radar\"===e.config.chart.type||this.isSparkline)&&(l=0,h=i.goldenPadding),this.isSparkline&&(this.lgRect={height:0,width:0}),(this.isSparkline||\"treemap\"===e.config.chart.type)&&(l=0,h=0,c=0),this.isSparkline||this.dimXAxis.additionalPaddingXLabels(r);var d=function(){i.translateX=l,i.gridHeight=i.svgHeight-t.lgRect.height-h-(t.isSparkline||\"treemap\"===e.config.chart.type?0:e.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-l};switch(\"top\"===e.config.xaxis.position&&(c=i.xAxisHeight-e.config.xaxis.axisTicks.height-5),e.config.legend.position){case\"bottom\":i.translateY=c,d();break;case\"top\":i.translateY=this.lgRect.height+c,d();break;case\"left\":i.translateY=c,i.translateX=this.lgRect.width+l,i.gridHeight=i.svgHeight-h-12,i.gridWidth=i.svgWidth-this.lgRect.width-l;break;case\"right\":i.translateY=c,i.translateX=l,i.gridHeight=i.svgHeight-h-12,i.gridWidth=i.svgWidth-this.lgRect.width-l-5;break;default:throw new Error(\"Legend position not supported\")}this.dimGrid.setGridXPosForDualYAxis(s,a),new q(this.ctx).setYAxisXPosition(a,s)}},{key:\"setDimensionsForNonAxisCharts\",value:function(){var t=this.w,e=t.globals,i=t.config,a=0;t.config.legend.show&&!t.config.legend.floating&&(a=20);var s=\"pie\"===i.chart.type||\"polarArea\"===i.chart.type||\"donut\"===i.chart.type?\"pie\":\"radialBar\",r=i.plotOptions[s].offsetY,o=i.plotOptions[s].offsetX;if(!i.legend.show||i.legend.floating)return e.gridHeight=e.svgHeight-i.grid.padding.left+i.grid.padding.right,e.gridWidth=e.gridHeight,e.translateY=r,void(e.translateX=o+(e.svgWidth-e.gridWidth)/2);switch(i.legend.position){case\"bottom\":e.gridHeight=e.svgHeight-this.lgRect.height-e.goldenPadding,e.gridWidth=e.svgWidth,e.translateY=r-10,e.translateX=o+(e.svgWidth-e.gridWidth)/2;break;case\"top\":e.gridHeight=e.svgHeight-this.lgRect.height-e.goldenPadding,e.gridWidth=e.svgWidth,e.translateY=this.lgRect.height+r+10,e.translateX=o+(e.svgWidth-e.gridWidth)/2;break;case\"left\":e.gridWidth=e.svgWidth-this.lgRect.width-a,e.gridHeight=\"auto\"!==i.chart.height?e.svgHeight:e.gridWidth,e.translateY=r,e.translateX=o+this.lgRect.width+a;break;case\"right\":e.gridWidth=e.svgWidth-this.lgRect.width-a-5,e.gridHeight=\"auto\"!==i.chart.height?e.svgHeight:e.gridWidth,e.translateY=r,e.translateX=o+10;break;default:throw new Error(\"Legend position not supported\")}}},{key:\"conditionalChecksForAxisCoords\",value:function(t,e,i){var a=this.w,s=a.globals.hasXaxisGroups?2:1,r=i.height+t.height+e.height,o=a.globals.isMultiLineX?1.2:a.globals.LINE_HEIGHT_RATIO,n=a.globals.rotateXLabels?22:10,l=a.globals.rotateXLabels&&\"bottom\"===a.config.legend.position?10:0;this.xAxisHeight=r*o+s*n+l,this.xAxisWidth=t.width,this.xAxisHeight-e.height>a.config.xaxis.labels.maxHeight&&(this.xAxisHeight=a.config.xaxis.labels.maxHeight),a.config.xaxis.labels.minHeight&&this.xAxisHeight<a.config.xaxis.labels.minHeight&&(this.xAxisHeight=a.config.xaxis.labels.minHeight),a.config.xaxis.floating&&(this.xAxisHeight=0);var h=0,c=0;a.config.yaxis.forEach((function(t){h+=t.labels.minWidth,c+=t.labels.maxWidth})),this.yAxisWidth<h&&(this.yAxisWidth=h),this.yAxisWidth>c&&(this.yAxisWidth=c)}}]),t}(),nt=function(){function t(e){a(this,t),this.w=e.w,this.lgCtx=e}return r(t,[{key:\"getLegendStyles\",value:function(){var t=document.createElement(\"style\");t.setAttribute(\"type\",\"text/css\");var e=document.createTextNode(\"\\t\\n    \\t\\n      .apexcharts-legend {\\t\\n        display: flex;\\t\\n        overflow: auto;\\t\\n        padding: 0 10px;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom, .apexcharts-legend.apx-legend-position-top {\\t\\n        flex-wrap: wrap\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\t\\n        flex-direction: column;\\t\\n        bottom: 0;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-left, .apexcharts-legend.apx-legend-position-top.apexcharts-align-left, .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\t\\n        justify-content: flex-start;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-center, .apexcharts-legend.apx-legend-position-top.apexcharts-align-center {\\t\\n        justify-content: center;  \\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-right, .apexcharts-legend.apx-legend-position-top.apexcharts-align-right {\\t\\n        justify-content: flex-end;\\t\\n      }\\t\\n      .apexcharts-legend-series {\\t\\n        cursor: pointer;\\t\\n        line-height: normal;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom .apexcharts-legend-series, .apexcharts-legend.apx-legend-position-top .apexcharts-legend-series{\\t\\n        display: flex;\\t\\n        align-items: center;\\t\\n      }\\t\\n      .apexcharts-legend-text {\\t\\n        position: relative;\\t\\n        font-size: 14px;\\t\\n      }\\t\\n      .apexcharts-legend-text *, .apexcharts-legend-marker * {\\t\\n        pointer-events: none;\\t\\n      }\\t\\n      .apexcharts-legend-marker {\\t\\n        position: relative;\\t\\n        display: inline-block;\\t\\n        cursor: pointer;\\t\\n        margin-right: 3px;\\t\\n        border-style: solid;\\n      }\\t\\n      \\t\\n      .apexcharts-legend.apexcharts-align-right .apexcharts-legend-series, .apexcharts-legend.apexcharts-align-left .apexcharts-legend-series{\\t\\n        display: inline-block;\\t\\n      }\\t\\n      .apexcharts-legend-series.apexcharts-no-click {\\t\\n        cursor: auto;\\t\\n      }\\t\\n      .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\\t\\n        display: none !important;\\t\\n      }\\t\\n      .apexcharts-inactive-legend {\\t\\n        opacity: 0.45;\\t\\n      }\");return t.appendChild(e),t}},{key:\"getLegendBBox\",value:function(){var t=this.w.globals.dom.baseEl.querySelector(\".apexcharts-legend\").getBoundingClientRect(),e=t.width;return{clwh:t.height,clww:e}}},{key:\"appendToForeignObject\",value:function(){this.w.globals.dom.elLegendForeign.appendChild(this.getLegendStyles())}},{key:\"toggleDataSeries\",value:function(t,e){var i=this,a=this.w;if(a.globals.axisCharts||\"radialBar\"===a.config.chart.type){a.globals.resized=!0;var s=null,r=null;if(a.globals.risingSeries=[],a.globals.axisCharts?(s=a.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(t,\"']\")),r=parseInt(s.getAttribute(\"data:realIndex\"),10)):(s=a.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(t+1,\"']\")),r=parseInt(s.getAttribute(\"rel\"),10)-1),e)[{cs:a.globals.collapsedSeries,csi:a.globals.collapsedSeriesIndices},{cs:a.globals.ancillaryCollapsedSeries,csi:a.globals.ancillaryCollapsedSeriesIndices}].forEach((function(t){i.riseCollapsedSeries(t.cs,t.csi,r)}));else this.hideSeries({seriesEl:s,realIndex:r})}else{var o=a.globals.dom.Paper.select(\" .apexcharts-series[rel='\".concat(t+1,\"'] path\")),n=a.config.chart.type;if(\"pie\"===n||\"polarArea\"===n||\"donut\"===n){var l=a.config.plotOptions.pie.donut.labels;new m(this.lgCtx.ctx).pathMouseDown(o.members[0],null),this.lgCtx.ctx.pie.printDataLabelsInner(o.members[0].node,l)}o.fire(\"click\")}}},{key:\"hideSeries\",value:function(t){var e=t.seriesEl,i=t.realIndex,a=this.w,s=x.clone(a.config.series);if(a.globals.axisCharts){var r=!1;if(a.config.yaxis[i]&&a.config.yaxis[i].show&&a.config.yaxis[i].showAlways&&(r=!0,a.globals.ancillaryCollapsedSeriesIndices.indexOf(i)<0&&(a.globals.ancillaryCollapsedSeries.push({index:i,data:s[i].data.slice(),type:e.parentNode.className.baseVal.split(\"-\")[1]}),a.globals.ancillaryCollapsedSeriesIndices.push(i))),!r){a.globals.collapsedSeries.push({index:i,data:s[i].data.slice(),type:e.parentNode.className.baseVal.split(\"-\")[1]}),a.globals.collapsedSeriesIndices.push(i);var o=a.globals.risingSeries.indexOf(i);a.globals.risingSeries.splice(o,1)}}else a.globals.collapsedSeries.push({index:i,data:s[i]}),a.globals.collapsedSeriesIndices.push(i);for(var n=e.childNodes,l=0;l<n.length;l++)n[l].classList.contains(\"apexcharts-series-markers-wrap\")&&(n[l].classList.contains(\"apexcharts-hide\")?n[l].classList.remove(\"apexcharts-hide\"):n[l].classList.add(\"apexcharts-hide\"));a.globals.allSeriesCollapsed=a.globals.collapsedSeries.length===a.config.series.length,s=this._getSeriesBasedOnCollapsedState(s),this.lgCtx.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled)}},{key:\"riseCollapsedSeries\",value:function(t,e,i){var a=this.w,s=x.clone(a.config.series);if(t.length>0){for(var r=0;r<t.length;r++)t[r].index===i&&(a.globals.axisCharts?(s[i].data=t[r].data.slice(),t.splice(r,1),e.splice(r,1),a.globals.risingSeries.push(i)):(s[i]=t[r].data,t.splice(r,1),e.splice(r,1),a.globals.risingSeries.push(i)));s=this._getSeriesBasedOnCollapsedState(s),this.lgCtx.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled)}}},{key:\"_getSeriesBasedOnCollapsedState\",value:function(t){var e=this.w;return e.globals.axisCharts?t.forEach((function(i,a){e.globals.collapsedSeriesIndices.indexOf(a)>-1&&(t[a].data=[])})):t.forEach((function(i,a){e.globals.collapsedSeriesIndices.indexOf(a)>-1&&(t[a]=0)})),t}}]),t}(),lt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.onLegendClick=this.onLegendClick.bind(this),this.onLegendHovered=this.onLegendHovered.bind(this),this.isBarsDistributed=\"bar\"===this.w.config.chart.type&&this.w.config.plotOptions.bar.distributed&&1===this.w.config.series.length,this.legendHelpers=new nt(this)}return r(t,[{key:\"init\",value:function(){var t=this.w,e=t.globals,i=t.config;if((i.legend.showForSingleSeries&&1===e.series.length||this.isBarsDistributed||e.series.length>1||!e.axisCharts)&&i.legend.show){for(;e.dom.elLegendWrap.firstChild;)e.dom.elLegendWrap.removeChild(e.dom.elLegendWrap.firstChild);this.drawLegends(),x.isIE11()?document.getElementsByTagName(\"head\")[0].appendChild(this.legendHelpers.getLegendStyles()):this.legendHelpers.appendToForeignObject(),\"bottom\"===i.legend.position||\"top\"===i.legend.position?this.legendAlignHorizontal():\"right\"!==i.legend.position&&\"left\"!==i.legend.position||this.legendAlignVertical()}}},{key:\"drawLegends\",value:function(){var t=this,e=this.w,i=e.config.legend.fontFamily,a=e.globals.seriesNames,s=e.globals.colors.slice();if(\"heatmap\"===e.config.chart.type){var r=e.config.plotOptions.heatmap.colorScale.ranges;a=r.map((function(t){return t.name?t.name:t.from+\" - \"+t.to})),s=r.map((function(t){return t.color}))}else this.isBarsDistributed&&(a=e.globals.labels.slice());e.config.legend.customLegendItems.length&&(a=e.config.legend.customLegendItems);for(var o=e.globals.legendFormatter,n=e.config.legend.inverseOrder,l=n?a.length-1:0;n?l>=0:l<=a.length-1;n?l--:l++){var h=o(a[l],{seriesIndex:l,w:e}),c=!1,d=!1;if(e.globals.collapsedSeries.length>0)for(var g=0;g<e.globals.collapsedSeries.length;g++)e.globals.collapsedSeries[g].index===l&&(c=!0);if(e.globals.ancillaryCollapsedSeriesIndices.length>0)for(var u=0;u<e.globals.ancillaryCollapsedSeriesIndices.length;u++)e.globals.ancillaryCollapsedSeriesIndices[u]===l&&(d=!0);var p=document.createElement(\"span\");p.classList.add(\"apexcharts-legend-marker\");var f=e.config.legend.markers.offsetX,b=e.config.legend.markers.offsetY,v=e.config.legend.markers.height,w=e.config.legend.markers.width,k=e.config.legend.markers.strokeWidth,A=e.config.legend.markers.strokeColor,S=e.config.legend.markers.radius,C=p.style;C.background=s[l],C.color=s[l],C.setProperty(\"background\",s[l],\"important\"),e.config.legend.markers.fillColors&&e.config.legend.markers.fillColors[l]&&(C.background=e.config.legend.markers.fillColors[l]),void 0!==e.globals.seriesColors[l]&&(C.background=e.globals.seriesColors[l],C.color=e.globals.seriesColors[l]),C.height=Array.isArray(v)?parseFloat(v[l])+\"px\":parseFloat(v)+\"px\",C.width=Array.isArray(w)?parseFloat(w[l])+\"px\":parseFloat(w)+\"px\",C.left=(Array.isArray(f)?parseFloat(f[l]):parseFloat(f))+\"px\",C.top=(Array.isArray(b)?parseFloat(b[l]):parseFloat(b))+\"px\",C.borderWidth=Array.isArray(k)?k[l]:k,C.borderColor=Array.isArray(A)?A[l]:A,C.borderRadius=Array.isArray(S)?parseFloat(S[l])+\"px\":parseFloat(S)+\"px\",e.config.legend.markers.customHTML&&(Array.isArray(e.config.legend.markers.customHTML)?e.config.legend.markers.customHTML[l]&&(p.innerHTML=e.config.legend.markers.customHTML[l]()):p.innerHTML=e.config.legend.markers.customHTML()),m.setAttrs(p,{rel:l+1,\"data:collapsed\":c||d}),(c||d)&&p.classList.add(\"apexcharts-inactive-legend\");var L=document.createElement(\"div\"),P=document.createElement(\"span\");P.classList.add(\"apexcharts-legend-text\"),P.innerHTML=Array.isArray(h)?h.join(\" \"):h;var I=e.config.legend.labels.useSeriesColors?e.globals.colors[l]:e.config.legend.labels.colors;I||(I=e.config.chart.foreColor),P.style.color=I,P.style.fontSize=parseFloat(e.config.legend.fontSize)+\"px\",P.style.fontWeight=e.config.legend.fontWeight,P.style.fontFamily=i||e.config.chart.fontFamily,m.setAttrs(P,{rel:l+1,i:l,\"data:default-text\":encodeURIComponent(h),\"data:collapsed\":c||d}),L.appendChild(p),L.appendChild(P);var T=new y(this.ctx);if(!e.config.legend.showForZeroSeries)0===T.getSeriesTotalByIndex(l)&&T.seriesHaveSameValues(l)&&!T.isSeriesNull(l)&&-1===e.globals.collapsedSeriesIndices.indexOf(l)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(l)&&L.classList.add(\"apexcharts-hidden-zero-series\");e.config.legend.showForNullSeries||T.isSeriesNull(l)&&-1===e.globals.collapsedSeriesIndices.indexOf(l)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(l)&&L.classList.add(\"apexcharts-hidden-null-series\"),e.globals.dom.elLegendWrap.appendChild(L),e.globals.dom.elLegendWrap.classList.add(\"apexcharts-align-\".concat(e.config.legend.horizontalAlign)),e.globals.dom.elLegendWrap.classList.add(\"apx-legend-position-\"+e.config.legend.position),L.classList.add(\"apexcharts-legend-series\"),L.style.margin=\"\".concat(e.config.legend.itemMargin.vertical,\"px \").concat(e.config.legend.itemMargin.horizontal,\"px\"),e.globals.dom.elLegendWrap.style.width=e.config.legend.width?e.config.legend.width+\"px\":\"\",e.globals.dom.elLegendWrap.style.height=e.config.legend.height?e.config.legend.height+\"px\":\"\",m.setAttrs(L,{rel:l+1,seriesName:x.escapeString(a[l]),\"data:collapsed\":c||d}),(c||d)&&L.classList.add(\"apexcharts-inactive-legend\"),e.config.legend.onItemClick.toggleDataSeries||L.classList.add(\"apexcharts-no-click\")}e.globals.dom.elWrap.addEventListener(\"click\",t.onLegendClick,!0),e.config.legend.onItemHover.highlightDataSeries&&0===e.config.legend.customLegendItems.length&&(e.globals.dom.elWrap.addEventListener(\"mousemove\",t.onLegendHovered,!0),e.globals.dom.elWrap.addEventListener(\"mouseout\",t.onLegendHovered,!0))}},{key:\"setLegendWrapXY\",value:function(t,e){var i=this.w,a=i.globals.dom.elLegendWrap,s=a.getBoundingClientRect(),r=0,o=0;if(\"bottom\"===i.config.legend.position)o+=i.globals.svgHeight-s.height/2;else if(\"top\"===i.config.legend.position){var n=new ot(this.ctx),l=n.dimHelpers.getTitleSubtitleCoords(\"title\").height,h=n.dimHelpers.getTitleSubtitleCoords(\"subtitle\").height;o=o+(l>0?l-10:0)+(h>0?h-10:0)}a.style.position=\"absolute\",r=r+t+i.config.legend.offsetX,o=o+e+i.config.legend.offsetY,a.style.left=r+\"px\",a.style.top=o+\"px\",\"bottom\"===i.config.legend.position?(a.style.top=\"auto\",a.style.bottom=5-i.config.legend.offsetY+\"px\"):\"right\"===i.config.legend.position&&(a.style.left=\"auto\",a.style.right=25+i.config.legend.offsetX+\"px\");[\"width\",\"height\"].forEach((function(t){a.style[t]&&(a.style[t]=parseInt(i.config.legend[t],10)+\"px\")}))}},{key:\"legendAlignHorizontal\",value:function(){var t=this.w;t.globals.dom.elLegendWrap.style.right=0;var e=this.legendHelpers.getLegendBBox(),i=new ot(this.ctx),a=i.dimHelpers.getTitleSubtitleCoords(\"title\"),s=i.dimHelpers.getTitleSubtitleCoords(\"subtitle\"),r=0;\"bottom\"===t.config.legend.position?r=-e.clwh/1.8:\"top\"===t.config.legend.position&&(r=a.height+s.height+t.config.title.margin+t.config.subtitle.margin-10),this.setLegendWrapXY(20,r)}},{key:\"legendAlignVertical\",value:function(){var t=this.w,e=this.legendHelpers.getLegendBBox(),i=0;\"left\"===t.config.legend.position&&(i=20),\"right\"===t.config.legend.position&&(i=t.globals.svgWidth-e.clww-10),this.setLegendWrapXY(i,20)}},{key:\"onLegendHovered\",value:function(t){var e=this.w,i=t.target.classList.contains(\"apexcharts-legend-text\")||t.target.classList.contains(\"apexcharts-legend-marker\");if(\"heatmap\"===e.config.chart.type||this.isBarsDistributed){if(i){var a=parseInt(t.target.getAttribute(\"rel\"),10)-1;this.ctx.events.fireEvent(\"legendHover\",[this.ctx,a,this.w]),new N(this.ctx).highlightRangeInSeries(t,t.target)}}else!t.target.classList.contains(\"apexcharts-inactive-legend\")&&i&&new N(this.ctx).toggleSeriesOnHover(t,t.target)}},{key:\"onLegendClick\",value:function(t){var e=this.w;if(!e.config.legend.customLegendItems.length&&(t.target.classList.contains(\"apexcharts-legend-text\")||t.target.classList.contains(\"apexcharts-legend-marker\"))){var i=parseInt(t.target.getAttribute(\"rel\"),10)-1,a=\"true\"===t.target.getAttribute(\"data:collapsed\"),s=this.w.config.chart.events.legendClick;\"function\"==typeof s&&s(this.ctx,i,this.w),this.ctx.events.fireEvent(\"legendClick\",[this.ctx,i,this.w]);var r=this.w.config.legend.markers.onClick;\"function\"==typeof r&&t.target.classList.contains(\"apexcharts-legend-marker\")&&(r(this.ctx,i,this.w),this.ctx.events.fireEvent(\"legendMarkerClick\",[this.ctx,i,this.w])),\"treemap\"!==e.config.chart.type&&\"heatmap\"!==e.config.chart.type&&!this.isBarsDistributed&&e.config.legend.onItemClick.toggleDataSeries&&this.legendHelpers.toggleDataSeries(i,a)}}}]),t}(),ht=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.ev=this.w.config.chart.events,this.selectedClass=\"apexcharts-selected\",this.localeValues=this.w.globals.locale.toolbar,this.minX=i.globals.minX,this.maxX=i.globals.maxX}return r(t,[{key:\"createToolbar\",value:function(){var t=this,e=this.w,i=function(){return document.createElement(\"div\")},a=i();if(a.setAttribute(\"class\",\"apexcharts-toolbar\"),a.style.top=e.config.chart.toolbar.offsetY+\"px\",a.style.right=3-e.config.chart.toolbar.offsetX+\"px\",e.globals.dom.elWrap.appendChild(a),this.elZoom=i(),this.elZoomIn=i(),this.elZoomOut=i(),this.elPan=i(),this.elSelection=i(),this.elZoomReset=i(),this.elMenuIcon=i(),this.elMenu=i(),this.elCustomIcons=[],this.t=e.config.chart.toolbar.tools,Array.isArray(this.t.customIcons))for(var s=0;s<this.t.customIcons.length;s++)this.elCustomIcons.push(i());var r=[],o=function(i,a,s){var o=i.toLowerCase();t.t[o]&&e.config.chart.zoom.enabled&&r.push({el:a,icon:\"string\"==typeof t.t[o]?t.t[o]:s,title:t.localeValues[i],class:\"apexcharts-\".concat(o,\"-icon\")})};o(\"zoomIn\",this.elZoomIn,'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\\n    <path d=\"M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"/>\\n</svg>\\n'),o(\"zoomOut\",this.elZoomOut,'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\\n    <path d=\"M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"/>\\n</svg>\\n');var n=function(i){t.t[i]&&e.config.chart[i].enabled&&r.push({el:\"zoom\"===i?t.elZoom:t.elSelection,icon:\"string\"==typeof t.t[i]?t.t[i]:\"zoom\"===i?'<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\">\\n    <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"/>\\n    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\\n    <path d=\"M12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z\"/>\\n</svg>':'<svg fill=\"#6E8192\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\\n    <path d=\"M3 5h2V3c-1.1 0-2 .9-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2c0-1.1-.9-2-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2z\"/>\\n</svg>',title:t.localeValues[\"zoom\"===i?\"selectionZoom\":\"selection\"],class:e.globals.isTouchDevice?\"apexcharts-element-hidden\":\"apexcharts-\".concat(i,\"-icon\")})};n(\"zoom\"),n(\"selection\"),this.t.pan&&e.config.chart.zoom.enabled&&r.push({el:this.elPan,icon:\"string\"==typeof this.t.pan?this.t.pan:'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\">\\n    <defs>\\n        <path d=\"M0 0h24v24H0z\" id=\"a\"/>\\n    </defs>\\n    <clipPath id=\"b\">\\n        <use overflow=\"visible\" xlink:href=\"#a\"/>\\n    </clipPath>\\n    <path clip-path=\"url(#b)\" d=\"M23 5.5V20c0 2.2-1.8 4-4 4h-7.3c-1.08 0-2.1-.43-2.85-1.19L1 14.83s1.26-1.23 1.3-1.25c.22-.19.49-.29.79-.29.22 0 .42.06.6.16.04.01 4.31 2.46 4.31 2.46V4c0-.83.67-1.5 1.5-1.5S11 3.17 11 4v7h1V1.5c0-.83.67-1.5 1.5-1.5S15 .67 15 1.5V11h1V2.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V11h1V5.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5z\"/>\\n</svg>',title:this.localeValues.pan,class:e.globals.isTouchDevice?\"apexcharts-element-hidden\":\"apexcharts-pan-icon\"}),o(\"reset\",this.elZoomReset,'<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\\n    <path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\"/>\\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\\n</svg>'),this.t.download&&r.push({el:this.elMenuIcon,icon:\"string\"==typeof this.t.download?this.t.download:'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z\"/></svg>',title:this.localeValues.menu,class:\"apexcharts-menu-icon\"});for(var l=0;l<this.elCustomIcons.length;l++)r.push({el:this.elCustomIcons[l],icon:this.t.customIcons[l].icon,title:this.t.customIcons[l].title,index:this.t.customIcons[l].index,class:\"apexcharts-toolbar-custom-icon \"+this.t.customIcons[l].class});r.forEach((function(t,e){t.index&&x.moveIndexInArray(r,e,t.index)}));for(var h=0;h<r.length;h++)m.setAttrs(r[h].el,{class:r[h].class,title:r[h].title}),r[h].el.innerHTML=r[h].icon,a.appendChild(r[h].el);this._createHamburgerMenu(a),e.globals.zoomEnabled?this.elZoom.classList.add(this.selectedClass):e.globals.panEnabled?this.elPan.classList.add(this.selectedClass):e.globals.selectionEnabled&&this.elSelection.classList.add(this.selectedClass),this.addToolbarEventListeners()}},{key:\"_createHamburgerMenu\",value:function(t){this.elMenuItems=[],t.appendChild(this.elMenu),m.setAttrs(this.elMenu,{class:\"apexcharts-menu\"});var e=[{name:\"exportSVG\",title:this.localeValues.exportToSVG},{name:\"exportPNG\",title:this.localeValues.exportToPNG},{name:\"exportCSV\",title:this.localeValues.exportToCSV}];this.w.globals.allSeriesHasEqualX||e.splice(2,1);for(var i=0;i<e.length;i++)this.elMenuItems.push(document.createElement(\"div\")),this.elMenuItems[i].innerHTML=e[i].title,m.setAttrs(this.elMenuItems[i],{class:\"apexcharts-menu-item \".concat(e[i].name),title:e[i].title}),this.elMenu.appendChild(this.elMenuItems[i])}},{key:\"addToolbarEventListeners\",value:function(){var t=this;this.elZoomReset.addEventListener(\"click\",this.handleZoomReset.bind(this)),this.elSelection.addEventListener(\"click\",this.toggleZoomSelection.bind(this,\"selection\")),this.elZoom.addEventListener(\"click\",this.toggleZoomSelection.bind(this,\"zoom\")),this.elZoomIn.addEventListener(\"click\",this.handleZoomIn.bind(this)),this.elZoomOut.addEventListener(\"click\",this.handleZoomOut.bind(this)),this.elPan.addEventListener(\"click\",this.togglePanning.bind(this)),this.elMenuIcon.addEventListener(\"click\",this.toggleMenu.bind(this)),this.elMenuItems.forEach((function(e){e.classList.contains(\"exportSVG\")?e.addEventListener(\"click\",t.handleDownload.bind(t,\"svg\")):e.classList.contains(\"exportPNG\")?e.addEventListener(\"click\",t.handleDownload.bind(t,\"png\")):e.classList.contains(\"exportCSV\")&&e.addEventListener(\"click\",t.handleDownload.bind(t,\"csv\"))}));for(var e=0;e<this.t.customIcons.length;e++)this.elCustomIcons[e].addEventListener(\"click\",this.t.customIcons[e].click.bind(this,this.ctx,this.ctx.w))}},{key:\"toggleZoomSelection\",value:function(t){this.ctx.getSyncedCharts().forEach((function(e){e.ctx.toolbar.toggleOtherControls();var i=\"selection\"===t?e.ctx.toolbar.elSelection:e.ctx.toolbar.elZoom,a=\"selection\"===t?\"selectionEnabled\":\"zoomEnabled\";e.w.globals[a]=!e.w.globals[a],i.classList.contains(e.ctx.toolbar.selectedClass)?i.classList.remove(e.ctx.toolbar.selectedClass):i.classList.add(e.ctx.toolbar.selectedClass)}))}},{key:\"getToolbarIconsReference\",value:function(){var t=this.w;this.elZoom||(this.elZoom=t.globals.dom.baseEl.querySelector(\".apexcharts-zoom-icon\")),this.elPan||(this.elPan=t.globals.dom.baseEl.querySelector(\".apexcharts-pan-icon\")),this.elSelection||(this.elSelection=t.globals.dom.baseEl.querySelector(\".apexcharts-selection-icon\"))}},{key:\"enableZoomPanFromToolbar\",value:function(t){this.toggleOtherControls(),\"pan\"===t?this.w.globals.panEnabled=!0:this.w.globals.zoomEnabled=!0;var e=\"pan\"===t?this.elPan:this.elZoom,i=\"pan\"===t?this.elZoom:this.elPan;e&&e.classList.add(this.selectedClass),i&&i.classList.remove(this.selectedClass)}},{key:\"togglePanning\",value:function(){this.ctx.getSyncedCharts().forEach((function(t){t.ctx.toolbar.toggleOtherControls(),t.w.globals.panEnabled=!t.w.globals.panEnabled,t.ctx.toolbar.elPan.classList.contains(t.ctx.toolbar.selectedClass)?t.ctx.toolbar.elPan.classList.remove(t.ctx.toolbar.selectedClass):t.ctx.toolbar.elPan.classList.add(t.ctx.toolbar.selectedClass)}))}},{key:\"toggleOtherControls\",value:function(){var t=this,e=this.w;e.globals.panEnabled=!1,e.globals.zoomEnabled=!1,e.globals.selectionEnabled=!1,this.getToolbarIconsReference(),[this.elPan,this.elSelection,this.elZoom].forEach((function(e){e&&e.classList.remove(t.selectedClass)}))}},{key:\"handleZoomIn\",value:function(){var t=this.w;t.globals.isRangeBar&&(this.minX=t.globals.minY,this.maxX=t.globals.maxY);var e=(this.minX+this.maxX)/2,i=(this.minX+e)/2,a=(this.maxX+e)/2,s=this._getNewMinXMaxX(i,a);t.globals.disableZoomIn||this.zoomUpdateOptions(s.minX,s.maxX)}},{key:\"handleZoomOut\",value:function(){var t=this.w;if(t.globals.isRangeBar&&(this.minX=t.globals.minY,this.maxX=t.globals.maxY),!(\"datetime\"===t.config.xaxis.type&&new Date(this.minX).getUTCFullYear()<1e3)){var e=(this.minX+this.maxX)/2,i=this.minX-(e-this.minX),a=this.maxX-(e-this.maxX),s=this._getNewMinXMaxX(i,a);t.globals.disableZoomOut||this.zoomUpdateOptions(s.minX,s.maxX)}}},{key:\"_getNewMinXMaxX\",value:function(t,e){var i=this.w.config.xaxis.convertedCatToNumeric;return{minX:i?Math.floor(t):t,maxX:i?Math.floor(e):e}}},{key:\"zoomUpdateOptions\",value:function(t,e){var i=this.w;if(void 0!==t||void 0!==e){if(!(i.config.xaxis.convertedCatToNumeric&&(t<1&&(t=1,e=i.globals.dataPoints),e-t<2))){var a={min:t,max:e},s=this.getBeforeZoomRange(a);s&&(a=s.xaxis);var r={xaxis:a},o=x.clone(i.globals.initialConfig.yaxis);if(i.config.chart.zoom.autoScaleYaxis)o=new _(this.ctx).autoScaleY(this.ctx,o,{xaxis:a});i.config.chart.group||(r.yaxis=o),this.w.globals.zoomed=!0,this.ctx.updateHelpers._updateOptions(r,!1,this.w.config.chart.animations.dynamicAnimation.enabled),this.zoomCallback(a,o)}}else this.handleZoomReset()}},{key:\"zoomCallback\",value:function(t,e){\"function\"==typeof this.ev.zoomed&&this.ev.zoomed(this.ctx,{xaxis:t,yaxis:e})}},{key:\"getBeforeZoomRange\",value:function(t,e){var i=null;return\"function\"==typeof this.ev.beforeZoom&&(i=this.ev.beforeZoom(this,{xaxis:t,yaxis:e})),i}},{key:\"toggleMenu\",value:function(){var t=this;window.setTimeout((function(){t.elMenu.classList.contains(\"apexcharts-menu-open\")?t.elMenu.classList.remove(\"apexcharts-menu-open\"):t.elMenu.classList.add(\"apexcharts-menu-open\")}),0)}},{key:\"handleDownload\",value:function(t){var e=this.w,i=new G(this.ctx);switch(t){case\"svg\":i.exportToSVG(this.ctx);break;case\"png\":i.exportToPng(this.ctx);break;case\"csv\":i.exportToCSV({series:e.config.series,columnDelimiter:e.config.chart.toolbar.export.csv.columnDelimiter})}}},{key:\"handleZoomReset\",value:function(t){this.ctx.getSyncedCharts().forEach((function(t){var e=t.w;if(e.globals.lastXAxis.min=void 0,e.globals.lastXAxis.max=void 0,t.updateHelpers.revertDefaultAxisMinMax(),\"function\"==typeof e.config.chart.events.beforeResetZoom){var i=e.config.chart.events.beforeResetZoom(t,e);i&&t.updateHelpers.revertDefaultAxisMinMax(i)}\"function\"==typeof e.config.chart.events.zoomed&&t.ctx.toolbar.zoomCallback({min:e.config.xaxis.min,max:e.config.xaxis.max}),e.globals.zoomed=!1;var a=t.ctx.series.emptyCollapsedSeries(x.clone(e.globals.initialSeries));t.updateHelpers._updateSeries(a,e.config.chart.animations.dynamicAnimation.enabled)}))}},{key:\"destroy\",value:function(){this.elZoom=null,this.elZoomIn=null,this.elZoomOut=null,this.elPan=null,this.elSelection=null,this.elZoomReset=null,this.elMenuIcon=null}}]),t}(),ct=function(t){n(i,ht);var e=d(i);function i(t){var s;return a(this,i),(s=e.call(this,t)).ctx=t,s.w=t.w,s.dragged=!1,s.graphics=new m(s.ctx),s.eventList=[\"mousedown\",\"mouseleave\",\"mousemove\",\"touchstart\",\"touchmove\",\"mouseup\",\"touchend\"],s.clientX=0,s.clientY=0,s.startX=0,s.endX=0,s.dragX=0,s.startY=0,s.endY=0,s.dragY=0,s.moveDirection=\"none\",s}return r(i,[{key:\"init\",value:function(t){var e=this,i=t.xyRatios,a=this.w,s=this;this.xyRatios=i,this.zoomRect=this.graphics.drawRect(0,0,0,0),this.selectionRect=this.graphics.drawRect(0,0,0,0),this.gridRect=a.globals.dom.baseEl.querySelector(\".apexcharts-grid\"),this.zoomRect.node.classList.add(\"apexcharts-zoom-rect\"),this.selectionRect.node.classList.add(\"apexcharts-selection-rect\"),a.globals.dom.elGraphical.add(this.zoomRect),a.globals.dom.elGraphical.add(this.selectionRect),\"x\"===a.config.chart.selection.type?this.slDraggableRect=this.selectionRect.draggable({minX:0,minY:0,maxX:a.globals.gridWidth,maxY:a.globals.gridHeight}).on(\"dragmove\",this.selectionDragging.bind(this,\"dragging\")):\"y\"===a.config.chart.selection.type?this.slDraggableRect=this.selectionRect.draggable({minX:0,maxX:a.globals.gridWidth}).on(\"dragmove\",this.selectionDragging.bind(this,\"dragging\")):this.slDraggableRect=this.selectionRect.draggable().on(\"dragmove\",this.selectionDragging.bind(this,\"dragging\")),this.preselectedSelection(),this.hoverArea=a.globals.dom.baseEl.querySelector(\"\".concat(a.globals.chartClass,\" .apexcharts-svg\")),this.hoverArea.classList.add(\"apexcharts-zoomable\"),this.eventList.forEach((function(t){e.hoverArea.addEventListener(t,s.svgMouseEvents.bind(s,i),{capture:!1,passive:!0})}))}},{key:\"destroy\",value:function(){this.slDraggableRect&&(this.slDraggableRect.draggable(!1),this.slDraggableRect.off(),this.selectionRect.off()),this.selectionRect=null,this.zoomRect=null,this.gridRect=null}},{key:\"svgMouseEvents\",value:function(t,e){var i=this.w,a=this,s=this.ctx.toolbar,r=i.globals.zoomEnabled?i.config.chart.zoom.type:i.config.chart.selection.type,o=i.config.chart.toolbar.autoSelected;if(e.shiftKey?(this.shiftWasPressed=!0,s.enableZoomPanFromToolbar(\"pan\"===o?\"zoom\":\"pan\")):this.shiftWasPressed&&(s.enableZoomPanFromToolbar(o),this.shiftWasPressed=!1),e.target){var n,l=e.target.classList;if(e.target.parentNode&&null!==e.target.parentNode&&(n=e.target.parentNode.classList),!(l.contains(\"apexcharts-selection-rect\")||l.contains(\"apexcharts-legend-marker\")||l.contains(\"apexcharts-legend-text\")||n&&n.contains(\"apexcharts-toolbar\"))){if(a.clientX=\"touchmove\"===e.type||\"touchstart\"===e.type?e.touches[0].clientX:\"touchend\"===e.type?e.changedTouches[0].clientX:e.clientX,a.clientY=\"touchmove\"===e.type||\"touchstart\"===e.type?e.touches[0].clientY:\"touchend\"===e.type?e.changedTouches[0].clientY:e.clientY,\"mousedown\"===e.type&&1===e.which){var h=a.gridRect.getBoundingClientRect();a.startX=a.clientX-h.left,a.startY=a.clientY-h.top,a.dragged=!1,a.w.globals.mousedown=!0}if((\"mousemove\"===e.type&&1===e.which||\"touchmove\"===e.type)&&(a.dragged=!0,i.globals.panEnabled?(i.globals.selection=null,a.w.globals.mousedown&&a.panDragging({context:a,zoomtype:r,xyRatios:t})):(a.w.globals.mousedown&&i.globals.zoomEnabled||a.w.globals.mousedown&&i.globals.selectionEnabled)&&(a.selection=a.selectionDrawing({context:a,zoomtype:r}))),\"mouseup\"===e.type||\"touchend\"===e.type||\"mouseleave\"===e.type){var c=a.gridRect.getBoundingClientRect();a.w.globals.mousedown&&(a.endX=a.clientX-c.left,a.endY=a.clientY-c.top,a.dragX=Math.abs(a.endX-a.startX),a.dragY=Math.abs(a.endY-a.startY),(i.globals.zoomEnabled||i.globals.selectionEnabled)&&a.selectionDrawn({context:a,zoomtype:r}),i.globals.panEnabled&&i.config.xaxis.convertedCatToNumeric&&a.delayedPanScrolled()),i.globals.zoomEnabled&&a.hideSelectionRect(this.selectionRect),a.dragged=!1,a.w.globals.mousedown=!1}this.makeSelectionRectDraggable()}}}},{key:\"makeSelectionRectDraggable\",value:function(){var t=this.w;if(this.selectionRect){var e=this.selectionRect.node.getBoundingClientRect();e.width>0&&e.height>0&&this.slDraggableRect.selectize({points:\"l, r\",pointSize:8,pointType:\"rect\"}).resize({constraint:{minX:0,minY:0,maxX:t.globals.gridWidth,maxY:t.globals.gridHeight}}).on(\"resizing\",this.selectionDragging.bind(this,\"resizing\"))}}},{key:\"preselectedSelection\",value:function(){var t=this.w,e=this.xyRatios;if(!t.globals.zoomEnabled)if(void 0!==t.globals.selection&&null!==t.globals.selection)this.drawSelectionRect(t.globals.selection);else if(void 0!==t.config.chart.selection.xaxis.min&&void 0!==t.config.chart.selection.xaxis.max){var i=(t.config.chart.selection.xaxis.min-t.globals.minX)/e.xRatio,a={x:i,y:0,width:t.globals.gridWidth-(t.globals.maxX-t.config.chart.selection.xaxis.max)/e.xRatio-i,height:t.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(a),this.makeSelectionRectDraggable(),\"function\"==typeof t.config.chart.events.selection&&t.config.chart.events.selection(this.ctx,{xaxis:{min:t.config.chart.selection.xaxis.min,max:t.config.chart.selection.xaxis.max},yaxis:{}})}}},{key:\"drawSelectionRect\",value:function(t){var e=t.x,i=t.y,a=t.width,s=t.height,r=t.translateX,o=void 0===r?0:r,n=t.translateY,l=void 0===n?0:n,h=this.w,c=this.zoomRect,d=this.selectionRect;if(this.dragged||null!==h.globals.selection){var g={transform:\"translate(\"+o+\", \"+l+\")\"};h.globals.zoomEnabled&&this.dragged&&(a<0&&(a=1),c.attr({x:e,y:i,width:a,height:s,fill:h.config.chart.zoom.zoomedArea.fill.color,\"fill-opacity\":h.config.chart.zoom.zoomedArea.fill.opacity,stroke:h.config.chart.zoom.zoomedArea.stroke.color,\"stroke-width\":h.config.chart.zoom.zoomedArea.stroke.width,\"stroke-opacity\":h.config.chart.zoom.zoomedArea.stroke.opacity}),m.setAttrs(c.node,g)),h.globals.selectionEnabled&&(d.attr({x:e,y:i,width:a>0?a:0,height:s>0?s:0,fill:h.config.chart.selection.fill.color,\"fill-opacity\":h.config.chart.selection.fill.opacity,stroke:h.config.chart.selection.stroke.color,\"stroke-width\":h.config.chart.selection.stroke.width,\"stroke-dasharray\":h.config.chart.selection.stroke.dashArray,\"stroke-opacity\":h.config.chart.selection.stroke.opacity}),m.setAttrs(d.node,g))}}},{key:\"hideSelectionRect\",value:function(t){t&&t.attr({x:0,y:0,width:0,height:0})}},{key:\"selectionDrawing\",value:function(t){var e=t.context,i=t.zoomtype,a=this.w,s=e,r=this.gridRect.getBoundingClientRect(),o=s.startX-1,n=s.startY,l=!1,h=!1,c=s.clientX-r.left-o,d=s.clientY-r.top-n,g={};return Math.abs(c+o)>a.globals.gridWidth?c=a.globals.gridWidth-o:s.clientX-r.left<0&&(c=o),o>s.clientX-r.left&&(l=!0,c=Math.abs(c)),n>s.clientY-r.top&&(h=!0,d=Math.abs(d)),g=\"x\"===i?{x:l?o-c:o,y:0,width:c,height:a.globals.gridHeight}:\"y\"===i?{x:0,y:h?n-d:n,width:a.globals.gridWidth,height:d}:{x:l?o-c:o,y:h?n-d:n,width:c,height:d},s.drawSelectionRect(g),s.selectionDragging(\"resizing\"),g}},{key:\"selectionDragging\",value:function(t,e){var i=this,a=this.w,s=this.xyRatios,r=this.selectionRect,o=0;\"resizing\"===t&&(o=30);var n=function(t){return parseFloat(r.node.getAttribute(t))},l={x:n(\"x\"),y:n(\"y\"),width:n(\"width\"),height:n(\"height\")};a.globals.selection=l,\"function\"==typeof a.config.chart.events.selection&&a.globals.selectionEnabled&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout((function(){var t=i.gridRect.getBoundingClientRect(),e=r.node.getBoundingClientRect(),o={xaxis:{min:a.globals.xAxisScale.niceMin+(e.left-t.left)*s.xRatio,max:a.globals.xAxisScale.niceMin+(e.right-t.left)*s.xRatio},yaxis:{min:a.globals.yAxisScale[0].niceMin+(t.bottom-e.bottom)*s.yRatio[0],max:a.globals.yAxisScale[0].niceMax-(e.top-t.top)*s.yRatio[0]}};a.config.chart.events.selection(i.ctx,o),a.config.chart.brush.enabled&&void 0!==a.config.chart.events.brushScrolled&&a.config.chart.events.brushScrolled(i.ctx,o)}),o))}},{key:\"selectionDrawn\",value:function(t){var e=t.context,i=t.zoomtype,a=this.w,s=e,r=this.xyRatios,o=this.ctx.toolbar;if(s.startX>s.endX){var n=s.startX;s.startX=s.endX,s.endX=n}if(s.startY>s.endY){var l=s.startY;s.startY=s.endY,s.endY=l}var h=void 0,c=void 0;a.globals.isRangeBar?(h=a.globals.yAxisScale[0].niceMin+s.startX*r.invertedYRatio,c=a.globals.yAxisScale[0].niceMin+s.endX*r.invertedYRatio):(h=a.globals.xAxisScale.niceMin+s.startX*r.xRatio,c=a.globals.xAxisScale.niceMin+s.endX*r.xRatio);var d=[],g=[];if(a.config.yaxis.forEach((function(t,e){d.push(a.globals.yAxisScale[e].niceMax-r.yRatio[e]*s.startY),g.push(a.globals.yAxisScale[e].niceMax-r.yRatio[e]*s.endY)})),s.dragged&&(s.dragX>10||s.dragY>10)&&h!==c)if(a.globals.zoomEnabled){var u=x.clone(a.globals.initialConfig.yaxis),p=x.clone(a.globals.initialConfig.xaxis);if(a.globals.zoomed=!0,a.config.xaxis.convertedCatToNumeric&&(h=Math.floor(h),c=Math.floor(c),h<1&&(h=1,c=a.globals.dataPoints),c-h<2&&(c=h+1)),\"xy\"!==i&&\"x\"!==i||(p={min:h,max:c}),\"xy\"!==i&&\"y\"!==i||u.forEach((function(t,e){u[e].min=g[e],u[e].max=d[e]})),a.config.chart.zoom.autoScaleYaxis){var f=new _(s.ctx);u=f.autoScaleY(s.ctx,u,{xaxis:p})}if(o){var b=o.getBeforeZoomRange(p,u);b&&(p=b.xaxis?b.xaxis:p,u=b.yaxis?b.yaxis:u)}var v={xaxis:p};a.config.chart.group||(v.yaxis=u),s.ctx.updateHelpers._updateOptions(v,!1,s.w.config.chart.animations.dynamicAnimation.enabled),\"function\"==typeof a.config.chart.events.zoomed&&o.zoomCallback(p,u)}else if(a.globals.selectionEnabled){var m,y=null;m={min:h,max:c},\"xy\"!==i&&\"y\"!==i||(y=x.clone(a.config.yaxis)).forEach((function(t,e){y[e].min=g[e],y[e].max=d[e]})),a.globals.selection=s.selection,\"function\"==typeof a.config.chart.events.selection&&a.config.chart.events.selection(s.ctx,{xaxis:m,yaxis:y})}}},{key:\"panDragging\",value:function(t){var e=t.context,i=this.w,a=e;if(void 0!==i.globals.lastClientPosition.x){var s=i.globals.lastClientPosition.x-a.clientX,r=i.globals.lastClientPosition.y-a.clientY;Math.abs(s)>Math.abs(r)&&s>0?this.moveDirection=\"left\":Math.abs(s)>Math.abs(r)&&s<0?this.moveDirection=\"right\":Math.abs(r)>Math.abs(s)&&r>0?this.moveDirection=\"up\":Math.abs(r)>Math.abs(s)&&r<0&&(this.moveDirection=\"down\")}i.globals.lastClientPosition={x:a.clientX,y:a.clientY};var o=i.globals.isRangeBar?i.globals.minY:i.globals.minX,n=i.globals.isRangeBar?i.globals.maxY:i.globals.maxX;i.config.xaxis.convertedCatToNumeric||a.panScrolled(o,n)}},{key:\"delayedPanScrolled\",value:function(){var t=this.w,e=t.globals.minX,i=t.globals.maxX,a=(t.globals.maxX-t.globals.minX)/2;\"left\"===this.moveDirection?(e=t.globals.minX+a,i=t.globals.maxX+a):\"right\"===this.moveDirection&&(e=t.globals.minX-a,i=t.globals.maxX-a),e=Math.floor(e),i=Math.floor(i),this.updateScrolledChart({xaxis:{min:e,max:i}},e,i)}},{key:\"panScrolled\",value:function(t,e){var i=this.w,a=this.xyRatios,s=x.clone(i.globals.initialConfig.yaxis),r=a.xRatio,o=i.globals.minX,n=i.globals.maxX;i.globals.isRangeBar&&(r=a.invertedYRatio,o=i.globals.minY,n=i.globals.maxY),\"left\"===this.moveDirection?(t=o+i.globals.gridWidth/15*r,e=n+i.globals.gridWidth/15*r):\"right\"===this.moveDirection&&(t=o-i.globals.gridWidth/15*r,e=n-i.globals.gridWidth/15*r),i.globals.isRangeBar||(t<i.globals.initialMinX||e>i.globals.initialMaxX)&&(t=o,e=n);var l={min:t,max:e};i.config.chart.zoom.autoScaleYaxis&&(s=new _(this.ctx).autoScaleY(this.ctx,s,{xaxis:l}));var h={xaxis:{min:t,max:e}};i.config.chart.group||(h.yaxis=s),this.updateScrolledChart(h,t,e)}},{key:\"updateScrolledChart\",value:function(t,e,i){var a=this.w;this.ctx.updateHelpers._updateOptions(t,!1,!1),\"function\"==typeof a.config.chart.events.scrolled&&a.config.chart.events.scrolled(this.ctx,{xaxis:{min:e,max:i}})}}]),i}(),dt=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx}return r(t,[{key:\"getNearestValues\",value:function(t){var e=t.hoverArea,i=t.elGrid,a=t.clientX,s=t.clientY,r=this.w,o=i.getBoundingClientRect(),n=o.width,l=o.height,h=n/(r.globals.dataPoints-1),c=l/r.globals.dataPoints,d=this.hasBars();!r.globals.comboCharts&&!d||r.config.xaxis.convertedCatToNumeric||(h=n/r.globals.dataPoints);var g=a-o.left-r.globals.barPadForNumericAxis,u=s-o.top;g<0||u<0||g>n||u>l?(e.classList.remove(\"hovering-zoom\"),e.classList.remove(\"hovering-pan\")):r.globals.zoomEnabled?(e.classList.remove(\"hovering-pan\"),e.classList.add(\"hovering-zoom\")):r.globals.panEnabled&&(e.classList.remove(\"hovering-zoom\"),e.classList.add(\"hovering-pan\"));var p=Math.round(g/h),f=Math.floor(u/c);d&&!r.config.xaxis.convertedCatToNumeric&&(p=Math.ceil(g/h),p-=1);var b=null,v=null,m=[],y=[];if(r.globals.seriesXvalues.forEach((function(t){m.push([t[0]+1e-6].concat(t))})),r.globals.seriesYvalues.forEach((function(t){y.push([t[0]+1e-6].concat(t))})),m=m.map((function(t){return t.filter((function(t){return x.isNumber(t)}))})),y=y.map((function(t){return t.filter((function(t){return x.isNumber(t)}))})),r.globals.isXNumeric){var w=this.ttCtx.getElGrid().getBoundingClientRect(),k=g*(w.width/n),A=u*(w.height/l);b=(v=this.closestInMultiArray(k,A,m,y)).index,p=v.j,null!==b&&(m=r.globals.seriesXvalues[b],p=(v=this.closestInArray(k,m)).index)}return r.globals.capturedSeriesIndex=null===b?-1:b,(!p||p<1)&&(p=0),r.globals.isBarHorizontal?r.globals.capturedDataPointIndex=f:r.globals.capturedDataPointIndex=p,{capturedSeries:b,j:r.globals.isBarHorizontal?f:p,hoverX:g,hoverY:u}}},{key:\"closestInMultiArray\",value:function(t,e,i,a){var s=this.w,r=0,o=null,n=-1;s.globals.series.length>1?r=this.getFirstActiveXArray(i):o=0;var l=i[r][0],h=Math.abs(t-l);if(i.forEach((function(e){e.forEach((function(e,i){var a=Math.abs(t-e);a<h&&(h=a,n=i)}))})),-1!==n){var c=a[r][n],d=Math.abs(e-c);o=r,a.forEach((function(t,i){var a=Math.abs(e-t[n]);a<d&&(d=a,o=i)}))}return{index:o,j:n}}},{key:\"getFirstActiveXArray\",value:function(t){for(var e=this.w,i=0,a=t.map((function(t,e){return t.length>0?e:-1})),s=0;s<a.length;s++)if(-1!==a[s]&&-1===e.globals.collapsedSeriesIndices.indexOf(s)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(s)){i=a[s];break}return i}},{key:\"closestInArray\",value:function(t,e){for(var i=e[0],a=null,s=Math.abs(t-i),r=0;r<e.length;r++){var o=Math.abs(t-e[r]);o<s&&(s=o,a=r)}return{index:a}}},{key:\"isXoverlap\",value:function(t){var e=[],i=this.w.globals.seriesX.filter((function(t){return void 0!==t[0]}));if(i.length>0)for(var a=0;a<i.length-1;a++)void 0!==i[a][t]&&void 0!==i[a+1][t]&&i[a][t]!==i[a+1][t]&&e.push(\"unEqual\");return 0===e.length}},{key:\"isInitialSeriesSameLen\",value:function(){for(var t=!0,e=this.w.globals.initialSeries,i=0;i<e.length-1;i++)if(e[i].data.length!==e[i+1].data.length){t=!1;break}return t}},{key:\"getBarsHeight\",value:function(t){return u(t).reduce((function(t,e){return t+e.getBBox().height}),0)}},{key:\"getElMarkers\",value:function(t){return\"number\"==typeof t?this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series[data\\\\:realIndex='\".concat(t,\"'] .apexcharts-series-markers-wrap > *\")):this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series-markers-wrap > *\")}},{key:\"getAllMarkers\",value:function(){var t=this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series-markers-wrap\");(t=u(t)).sort((function(t,e){var i=Number(t.getAttribute(\"data:realIndex\")),a=Number(e.getAttribute(\"data:realIndex\"));return a<i?1:a>i?-1:0}));var e=[];return t.forEach((function(t){e.push(t.querySelector(\".apexcharts-marker\"))})),e}},{key:\"hasMarkers\",value:function(t){return this.getElMarkers(t).length>0}},{key:\"getElBars\",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-bar-series,  .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-rangebar-series\")}},{key:\"hasBars\",value:function(){return this.getElBars().length>0}},{key:\"getHoverMarkerSize\",value:function(t){var e=this.w,i=e.config.markers.hover.size;return void 0===i&&(i=e.globals.markers.size[t]+e.config.markers.hover.sizeOffset),i}},{key:\"toggleAllTooltipSeriesGroups\",value:function(t){var e=this.w,i=this.ttCtx;0===i.allTooltipSeriesGroups.length&&(i.allTooltipSeriesGroups=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-tooltip-series-group\"));for(var a=i.allTooltipSeriesGroups,s=0;s<a.length;s++)\"enable\"===t?(a[s].classList.add(\"apexcharts-active\"),a[s].style.display=e.config.tooltip.items.display):(a[s].classList.remove(\"apexcharts-active\"),a[s].style.display=\"none\")}}]),t}(),gt=function(){function t(e){a(this,t),this.w=e.w,this.ctx=e.ctx,this.ttCtx=e,this.tooltipUtil=new dt(e)}return r(t,[{key:\"drawSeriesTexts\",value:function(t){var e=t.shared,i=void 0===e||e,a=t.ttItems,s=t.i,r=void 0===s?0:s,o=t.j,n=void 0===o?null:o,l=t.y1,h=t.y2,c=t.e,d=this.w;void 0!==d.config.tooltip.custom?this.handleCustomTooltip({i:r,j:n,y1:l,y2:h,w:d}):this.toggleActiveInactiveSeries(i);var g=this.getValuesToPrint({i:r,j:n});this.printLabels({i:r,j:n,values:g,ttItems:a,shared:i,e:c});var u=this.ttCtx.getElTooltip();this.ttCtx.tooltipRect.ttWidth=u.getBoundingClientRect().width,this.ttCtx.tooltipRect.ttHeight=u.getBoundingClientRect().height}},{key:\"printLabels\",value:function(t){var i,a=this,s=t.i,r=t.j,o=t.values,n=t.ttItems,l=t.shared,h=t.e,c=this.w,d=[],g=function(t){return c.globals.seriesGoals[t]&&c.globals.seriesGoals[t][r]&&Array.isArray(c.globals.seriesGoals[t][r])},u=o.xVal,p=o.zVal,f=o.xAxisTTVal,x=\"\",b=c.globals.colors[s];null!==r&&c.config.plotOptions.bar.distributed&&(b=c.globals.colors[r]);for(var v=function(t,o){var v=a.getFormatters(s);x=a.getSeriesName({fn:v.yLbTitleFormatter,index:s,seriesIndex:s,j:r}),\"treemap\"===c.config.chart.type&&(x=v.yLbTitleFormatter(String(c.config.series[s].data[r].x),{series:c.globals.series,seriesIndex:s,dataPointIndex:r,w:c}));var m=c.config.tooltip.inverseOrder?o:t;if(c.globals.axisCharts){var y=function(t){var e,i,a,s;return c.globals.isRangeData?v.yLbFormatter(null===(e=c.globals.seriesRangeStart)||void 0===e||null===(i=e[t])||void 0===i?void 0:i[r],{series:c.globals.seriesRangeStart,seriesIndex:t,dataPointIndex:r,w:c})+\" - \"+v.yLbFormatter(null===(a=c.globals.seriesRangeEnd)||void 0===a||null===(s=a[t])||void 0===s?void 0:s[r],{series:c.globals.seriesRangeEnd,seriesIndex:t,dataPointIndex:r,w:c}):v.yLbFormatter(c.globals.series[t][r],{series:c.globals.series,seriesIndex:t,dataPointIndex:r,w:c})};if(l)v=a.getFormatters(m),x=a.getSeriesName({fn:v.yLbTitleFormatter,index:m,seriesIndex:s,j:r}),b=c.globals.colors[m],i=y(m),g(m)&&(d=c.globals.seriesGoals[m][r].map((function(t){return{attrs:t,val:v.yLbFormatter(t.value,{seriesIndex:m,dataPointIndex:r,w:c})}})));else{var w,k=null==h||null===(w=h.target)||void 0===w?void 0:w.getAttribute(\"fill\");k&&(b=-1!==k.indexOf(\"url\")?document.querySelector(k.substr(4).slice(0,-1)).childNodes[0].getAttribute(\"stroke\"):k),i=y(s),g(s)&&Array.isArray(c.globals.seriesGoals[s][r])&&(d=c.globals.seriesGoals[s][r].map((function(t){return{attrs:t,val:v.yLbFormatter(t.value,{seriesIndex:s,dataPointIndex:r,w:c})}})))}}null===r&&(i=v.yLbFormatter(c.globals.series[s],e(e({},c),{},{seriesIndex:s,dataPointIndex:s}))),a.DOMHandling({i:s,t:m,j:r,ttItems:n,values:{val:i,goalVals:d,xVal:u,xAxisTTVal:f,zVal:p},seriesName:x,shared:l,pColor:b})},m=0,y=c.globals.series.length-1;m<c.globals.series.length;m++,y--)v(m,y)}},{key:\"getFormatters\",value:function(t){var e,i=this.w,a=i.globals.yLabelFormatters[t];return void 0!==i.globals.ttVal?Array.isArray(i.globals.ttVal)?(a=i.globals.ttVal[t]&&i.globals.ttVal[t].formatter,e=i.globals.ttVal[t]&&i.globals.ttVal[t].title&&i.globals.ttVal[t].title.formatter):(a=i.globals.ttVal.formatter,\"function\"==typeof i.globals.ttVal.title.formatter&&(e=i.globals.ttVal.title.formatter)):e=i.config.tooltip.y.title.formatter,\"function\"!=typeof a&&(a=i.globals.yLabelFormatters[0]?i.globals.yLabelFormatters[0]:function(t){return t}),\"function\"!=typeof e&&(e=function(t){return t}),{yLbFormatter:a,yLbTitleFormatter:e}}},{key:\"getSeriesName\",value:function(t){var e=t.fn,i=t.index,a=t.seriesIndex,s=t.j,r=this.w;return e(String(r.globals.seriesNames[i]),{series:r.globals.series,seriesIndex:a,dataPointIndex:s,w:r})}},{key:\"DOMHandling\",value:function(t){t.i;var e=t.t,i=t.j,a=t.ttItems,s=t.values,r=t.seriesName,o=t.shared,n=t.pColor,l=this.w,h=this.ttCtx,c=s.val,d=s.goalVals,g=s.xVal,u=s.xAxisTTVal,p=s.zVal,f=null;f=a[e].children,l.config.tooltip.fillSeriesColor&&(a[e].style.backgroundColor=n,f[0].style.display=\"none\"),h.showTooltipTitle&&(null===h.tooltipTitle&&(h.tooltipTitle=l.globals.dom.baseEl.querySelector(\".apexcharts-tooltip-title\")),h.tooltipTitle.innerHTML=g),h.isXAxisTooltipEnabled&&(h.xaxisTooltipText.innerHTML=\"\"!==u?u:g);var x=a[e].querySelector(\".apexcharts-tooltip-text-y-label\");x&&(x.innerHTML=r||\"\");var b=a[e].querySelector(\".apexcharts-tooltip-text-y-value\");b&&(b.innerHTML=void 0!==c?c:\"\"),f[0]&&f[0].classList.contains(\"apexcharts-tooltip-marker\")&&(l.config.tooltip.marker.fillColors&&Array.isArray(l.config.tooltip.marker.fillColors)&&(n=l.config.tooltip.marker.fillColors[e]),f[0].style.backgroundColor=n),l.config.tooltip.marker.show||(f[0].style.display=\"none\");var v=a[e].querySelector(\".apexcharts-tooltip-text-goals-label\"),m=a[e].querySelector(\".apexcharts-tooltip-text-goals-value\");if(d.length&&l.globals.seriesGoals[e]){var y=function(){var t=\"<div >\",e=\"<div>\";d.forEach((function(i,a){t+=' <div style=\"display: flex\"><span class=\"apexcharts-tooltip-marker\" style=\"background-color: '.concat(i.attrs.strokeColor,'; height: 3px; border-radius: 0; top: 5px;\"></span> ').concat(i.attrs.name,\"</div>\"),e+=\"<div>\".concat(i.val,\"</div>\")})),v.innerHTML=t+\"</div>\",m.innerHTML=e+\"</div>\"};o?l.globals.seriesGoals[e][i]&&Array.isArray(l.globals.seriesGoals[e][i])?y():(v.innerHTML=\"\",m.innerHTML=\"\"):y()}else v.innerHTML=\"\",m.innerHTML=\"\";null!==p&&(a[e].querySelector(\".apexcharts-tooltip-text-z-label\").innerHTML=l.config.tooltip.z.title,a[e].querySelector(\".apexcharts-tooltip-text-z-value\").innerHTML=void 0!==p?p:\"\");o&&f[0]&&(null==c||l.globals.ancillaryCollapsedSeriesIndices.indexOf(e)>-1||l.globals.collapsedSeriesIndices.indexOf(e)>-1?f[0].parentNode.style.display=\"none\":f[0].parentNode.style.display=l.config.tooltip.items.display)}},{key:\"toggleActiveInactiveSeries\",value:function(t){var e=this.w;if(t)this.tooltipUtil.toggleAllTooltipSeriesGroups(\"enable\");else{this.tooltipUtil.toggleAllTooltipSeriesGroups(\"disable\");var i=e.globals.dom.baseEl.querySelector(\".apexcharts-tooltip-series-group\");i&&(i.classList.add(\"apexcharts-active\"),i.style.display=e.config.tooltip.items.display)}}},{key:\"getValuesToPrint\",value:function(t){var e=t.i,i=t.j,a=this.w,s=this.ctx.series.filteredSeriesX(),r=\"\",o=\"\",n=null,l=null,h={series:a.globals.series,seriesIndex:e,dataPointIndex:i,w:a},c=a.globals.ttZFormatter;null===i?l=a.globals.series[e]:a.globals.isXNumeric&&\"treemap\"!==a.config.chart.type?(r=s[e][i],0===s[e].length&&(r=s[this.tooltipUtil.getFirstActiveXArray(s)][i])):r=void 0!==a.globals.labels[i]?a.globals.labels[i]:\"\";var d=r;a.globals.isXNumeric&&\"datetime\"===a.config.xaxis.type?r=new T(this.ctx).xLabelFormat(a.globals.ttKeyFormatter,d,d,{i:void 0,dateFormatter:new I(this.ctx).formatDate,w:this.w}):r=a.globals.isBarHorizontal?a.globals.yLabelFormatters[0](d,h):a.globals.xLabelFormatter(d,h);return void 0!==a.config.tooltip.x.formatter&&(r=a.globals.ttKeyFormatter(d,h)),a.globals.seriesZ.length>0&&a.globals.seriesZ[e].length>0&&(n=c(a.globals.seriesZ[e][i],a)),o=\"function\"==typeof a.config.xaxis.tooltip.formatter?a.globals.xaxisTooltipFormatter(d,h):r,{val:Array.isArray(l)?l.join(\" \"):l,xVal:Array.isArray(r)?r.join(\" \"):r,xAxisTTVal:Array.isArray(o)?o.join(\" \"):o,zVal:n}}},{key:\"handleCustomTooltip\",value:function(t){var e=t.i,i=t.j,a=t.y1,s=t.y2,r=t.w,o=this.ttCtx.getElTooltip(),n=r.config.tooltip.custom;Array.isArray(n)&&n[e]&&(n=n[e]),o.innerHTML=n({ctx:this.ctx,series:r.globals.series,seriesIndex:e,dataPointIndex:i,y1:a,y2:s,w:r})}}]),t}(),ut=function(){function t(e){a(this,t),this.ttCtx=e,this.ctx=e.ctx,this.w=e.w}return r(t,[{key:\"moveXCrosshairs\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.ttCtx,a=this.w,s=i.getElXCrosshairs(),r=t-i.xcrosshairsWidth/2,o=a.globals.labels.slice().length;if(null!==e&&(r=a.globals.gridWidth/o*e),null===s||a.globals.isBarHorizontal||(s.setAttribute(\"x\",r),s.setAttribute(\"x1\",r),s.setAttribute(\"x2\",r),s.setAttribute(\"y2\",a.globals.gridHeight),s.classList.add(\"apexcharts-active\")),r<0&&(r=0),r>a.globals.gridWidth&&(r=a.globals.gridWidth),i.isXAxisTooltipEnabled){var n=r;\"tickWidth\"!==a.config.xaxis.crosshairs.width&&\"barWidth\"!==a.config.xaxis.crosshairs.width||(n=r+i.xcrosshairsWidth/2),this.moveXAxisTooltip(n)}}},{key:\"moveYCrosshairs\",value:function(t){var e=this.ttCtx;null!==e.ycrosshairs&&m.setAttrs(e.ycrosshairs,{y1:t,y2:t}),null!==e.ycrosshairsHidden&&m.setAttrs(e.ycrosshairsHidden,{y1:t,y2:t})}},{key:\"moveXAxisTooltip\",value:function(t){var e=this.w,i=this.ttCtx;if(null!==i.xaxisTooltip&&0!==i.xcrosshairsWidth){i.xaxisTooltip.classList.add(\"apexcharts-active\");var a=i.xaxisOffY+e.config.xaxis.tooltip.offsetY+e.globals.translateY+1+e.config.xaxis.offsetY;if(t-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(t)){t+=e.globals.translateX;var s;s=new m(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=s.width+\"px\",i.xaxisTooltip.style.left=t+\"px\",i.xaxisTooltip.style.top=a+\"px\"}}}},{key:\"moveYAxisTooltip\",value:function(t){var e=this.w,i=this.ttCtx;null===i.yaxisTTEls&&(i.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\"));var a=parseInt(i.ycrosshairsHidden.getAttribute(\"y1\"),10),s=e.globals.translateY+a,r=i.yaxisTTEls[t].getBoundingClientRect().height,o=e.globals.translateYAxisX[t]-2;e.config.yaxis[t].opposite&&(o-=26),s-=r/2,-1===e.globals.ignoreYAxisIndexes.indexOf(t)?(i.yaxisTTEls[t].classList.add(\"apexcharts-active\"),i.yaxisTTEls[t].style.top=s+\"px\",i.yaxisTTEls[t].style.left=o+e.config.yaxis[t].tooltip.offsetX+\"px\"):i.yaxisTTEls[t].classList.remove(\"apexcharts-active\")}},{key:\"moveTooltip\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,s=this.ttCtx,r=s.getElTooltip(),o=s.tooltipRect,n=null!==i?parseFloat(i):1,l=parseFloat(t)+n+5,h=parseFloat(e)+n/2;if(l>a.globals.gridWidth/2&&(l=l-o.ttWidth-n-10),l>a.globals.gridWidth-o.ttWidth-10&&(l=a.globals.gridWidth-o.ttWidth),l<-20&&(l=-20),a.config.tooltip.followCursor){var c=s.getElGrid().getBoundingClientRect();(l=s.e.clientX-c.left)>a.globals.gridWidth/2&&(l-=s.tooltipRect.ttWidth),(h=s.e.clientY+a.globals.translateY-c.top)>a.globals.gridHeight/2&&(h-=s.tooltipRect.ttHeight)}else a.globals.isBarHorizontal||o.ttHeight/2+h>a.globals.gridHeight&&(h=a.globals.gridHeight-o.ttHeight+a.globals.translateY);isNaN(l)||(l+=a.globals.translateX,r.style.left=l+\"px\",r.style.top=h+\"px\")}},{key:\"moveMarkers\",value:function(t,e){var i=this.w,a=this.ttCtx;if(i.globals.markers.size[t]>0)for(var s=i.globals.dom.baseEl.querySelectorAll(\" .apexcharts-series[data\\\\:realIndex='\".concat(t,\"'] .apexcharts-marker\")),r=0;r<s.length;r++)parseInt(s[r].getAttribute(\"rel\"),10)===e&&(a.marker.resetPointsSize(),a.marker.enlargeCurrentPoint(e,s[r]));else a.marker.resetPointsSize(),this.moveDynamicPointOnHover(e,t)}},{key:\"moveDynamicPointOnHover\",value:function(t,e){var i,a,s=this.w,r=this.ttCtx,o=s.globals.pointsArray,n=r.tooltipUtil.getHoverMarkerSize(e),l=s.config.series[e].type;if(!l||\"column\"!==l&&\"candlestick\"!==l&&\"boxPlot\"!==l){i=o[e][t][0],a=o[e][t][1]?o[e][t][1]:0;var h=s.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(e,\"'] .apexcharts-series-markers circle\"));h&&a<s.globals.gridHeight&&a>0&&(h.setAttribute(\"r\",n),h.setAttribute(\"cx\",i),h.setAttribute(\"cy\",a)),this.moveXCrosshairs(i),r.fixedTooltip||this.moveTooltip(i,a,n)}}},{key:\"moveDynamicPointsOnHover\",value:function(t){var e,i=this.ttCtx,a=i.w,s=0,r=0,o=a.globals.pointsArray;e=new N(this.ctx).getActiveConfigSeriesIndex(\"asc\",[\"line\",\"area\",\"scatter\",\"bubble\"]);var n=i.tooltipUtil.getHoverMarkerSize(e);o[e]&&(s=o[e][t][0],r=o[e][t][1]);var l=i.tooltipUtil.getAllMarkers();if(null!==l)for(var h=0;h<a.globals.series.length;h++){var c=o[h];if(a.globals.comboCharts&&void 0===c&&l.splice(h,0,null),c&&c.length){var d=o[h][t][1],g=void 0;if(l[h].setAttribute(\"cx\",s),\"rangeArea\"===a.config.chart.type&&!a.globals.comboCharts){var u=t+a.globals.series[h].length;g=o[h][u][1],d-=Math.abs(d-g)/2}null!==d&&!isNaN(d)&&d<a.globals.gridHeight+n&&d+n>0?(l[h]&&l[h].setAttribute(\"r\",n),l[h]&&l[h].setAttribute(\"cy\",d)):l[h]&&l[h].setAttribute(\"r\",0)}}this.moveXCrosshairs(s),i.fixedTooltip||this.moveTooltip(s,r||a.globals.gridHeight,n)}},{key:\"moveStickyTooltipOverBars\",value:function(t,e){var i=this.w,a=this.ttCtx,s=i.globals.columnSeries?i.globals.columnSeries.length:i.globals.series.length,r=s>=2&&s%2==0?Math.floor(s/2):Math.floor(s/2)+1;i.globals.isBarHorizontal&&(r=new N(this.ctx).getActiveConfigSeriesIndex(\"desc\")+1);var o=i.globals.dom.baseEl.querySelector(\".apexcharts-bar-series .apexcharts-series[rel='\".concat(r,\"'] path[j='\").concat(t,\"'], .apexcharts-candlestick-series .apexcharts-series[rel='\").concat(r,\"'] path[j='\").concat(t,\"'], .apexcharts-boxPlot-series .apexcharts-series[rel='\").concat(r,\"'] path[j='\").concat(t,\"'], .apexcharts-rangebar-series .apexcharts-series[rel='\").concat(r,\"'] path[j='\").concat(t,\"']\"));o||\"number\"!=typeof e||(o=i.globals.dom.baseEl.querySelector(\".apexcharts-bar-series .apexcharts-series[data\\\\:realIndex='\".concat(e,\"'] path[j='\").concat(t,\"'],\\n        .apexcharts-candlestick-series .apexcharts-series[data\\\\:realIndex='\").concat(e,\"'] path[j='\").concat(t,\"'],\\n        .apexcharts-boxPlot-series .apexcharts-series[data\\\\:realIndex='\").concat(e,\"'] path[j='\").concat(t,\"'],\\n        .apexcharts-rangebar-series .apexcharts-series[data\\\\:realIndex='\").concat(e,\"'] path[j='\").concat(t,\"']\")));var n=o?parseFloat(o.getAttribute(\"cx\")):0,l=o?parseFloat(o.getAttribute(\"cy\")):0,h=o?parseFloat(o.getAttribute(\"barWidth\")):0,c=a.getElGrid().getBoundingClientRect(),d=o&&(o.classList.contains(\"apexcharts-candlestick-area\")||o.classList.contains(\"apexcharts-boxPlot-area\"));i.globals.isXNumeric?(o&&!d&&(n-=s%2!=0?h/2:0),o&&d&&i.globals.comboCharts&&(n-=h/2)):i.globals.isBarHorizontal||(n=a.xAxisTicksPositions[t-1]+a.dataPointsDividedWidth/2,isNaN(n)&&(n=a.xAxisTicksPositions[t]-a.dataPointsDividedWidth/2)),i.globals.isBarHorizontal?l-=a.tooltipRect.ttHeight:i.config.tooltip.followCursor?l=a.e.clientY-c.top-a.tooltipRect.ttHeight/2:l+a.tooltipRect.ttHeight+15>i.globals.gridHeight&&(l=i.globals.gridHeight),i.globals.isBarHorizontal||this.moveXCrosshairs(n),a.fixedTooltip||this.moveTooltip(n,l||i.globals.gridHeight)}}]),t}(),pt=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx,this.tooltipPosition=new ut(e)}return r(t,[{key:\"drawDynamicPoints\",value:function(){var t=this.w,e=new m(this.ctx),i=new H(this.ctx),a=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series\");a=u(a),t.config.chart.stacked&&a.sort((function(t,e){return parseFloat(t.getAttribute(\"data:realIndex\"))-parseFloat(e.getAttribute(\"data:realIndex\"))}));for(var s=0;s<a.length;s++){var r=a[s].querySelector(\".apexcharts-series-markers-wrap\");if(null!==r){var o=void 0,n=\"apexcharts-marker w\".concat((Math.random()+1).toString(36).substring(4));\"line\"!==t.config.chart.type&&\"area\"!==t.config.chart.type||t.globals.comboCharts||t.config.tooltip.intersect||(n+=\" no-pointer-events\");var l=i.getMarkerConfig({cssClass:n,seriesIndex:Number(r.getAttribute(\"data:realIndex\"))});(o=e.drawMarker(0,0,l)).node.setAttribute(\"default-marker-size\",0);var h=document.createElementNS(t.globals.SVGNS,\"g\");h.classList.add(\"apexcharts-series-markers\"),h.appendChild(o.node),r.appendChild(h)}}}},{key:\"enlargeCurrentPoint\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.w;\"bubble\"!==s.config.chart.type&&this.newPointSize(t,e);var r=e.getAttribute(\"cx\"),o=e.getAttribute(\"cy\");if(null!==i&&null!==a&&(r=i,o=a),this.tooltipPosition.moveXCrosshairs(r),!this.fixedTooltip){if(\"radar\"===s.config.chart.type){var n=this.ttCtx.getElGrid().getBoundingClientRect();r=this.ttCtx.e.clientX-n.left}this.tooltipPosition.moveTooltip(r,o,s.config.markers.hover.size)}}},{key:\"enlargePoints\",value:function(t){for(var e=this.w,i=this,a=this.ttCtx,s=t,r=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"),o=e.config.markers.hover.size,n=0;n<r.length;n++){var l=r[n].getAttribute(\"rel\"),h=r[n].getAttribute(\"index\");if(void 0===o&&(o=e.globals.markers.size[h]+e.config.markers.hover.sizeOffset),s===parseInt(l,10)){i.newPointSize(s,r[n]);var c=r[n].getAttribute(\"cx\"),d=r[n].getAttribute(\"cy\");i.tooltipPosition.moveXCrosshairs(c),a.fixedTooltip||i.tooltipPosition.moveTooltip(c,d,o)}else i.oldPointSize(r[n])}}},{key:\"newPointSize\",value:function(t,e){var i=this.w,a=i.config.markers.hover.size,s=0===t?e.parentNode.firstChild:e.parentNode.lastChild;if(\"0\"!==s.getAttribute(\"default-marker-size\")){var r=parseInt(s.getAttribute(\"index\"),10);void 0===a&&(a=i.globals.markers.size[r]+i.config.markers.hover.sizeOffset),a<0&&(a=0),s.setAttribute(\"r\",a)}}},{key:\"oldPointSize\",value:function(t){var e=parseFloat(t.getAttribute(\"default-marker-size\"));t.setAttribute(\"r\",e)}},{key:\"resetPointsSize\",value:function(){for(var t=this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"),e=0;e<t.length;e++){var i=parseFloat(t[e].getAttribute(\"default-marker-size\"));x.isNumber(i)&&i>=0?t[e].setAttribute(\"r\",i):t[e].setAttribute(\"r\",0)}}}]),t}(),ft=function(){function t(e){a(this,t),this.w=e.w;var i=this.w;this.ttCtx=e,this.isVerticalGroupedRangeBar=!i.globals.isBarHorizontal&&\"rangeBar\"===i.config.chart.type&&i.config.plotOptions.bar.rangeBarGroupRows}return r(t,[{key:\"getAttr\",value:function(t,e){return parseFloat(t.target.getAttribute(e))}},{key:\"handleHeatTreeTooltip\",value:function(t){var e=t.e,i=t.opt,a=t.x,s=t.y,r=t.type,o=this.ttCtx,n=this.w;if(e.target.classList.contains(\"apexcharts-\".concat(r,\"-rect\"))){var l=this.getAttr(e,\"i\"),h=this.getAttr(e,\"j\"),c=this.getAttr(e,\"cx\"),d=this.getAttr(e,\"cy\"),g=this.getAttr(e,\"width\"),u=this.getAttr(e,\"height\");if(o.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:l,j:h,shared:!1,e:e}),n.globals.capturedSeriesIndex=l,n.globals.capturedDataPointIndex=h,a=c+o.tooltipRect.ttWidth/2+g,s=d+o.tooltipRect.ttHeight/2-u/2,o.tooltipPosition.moveXCrosshairs(c+g/2),a>n.globals.gridWidth/2&&(a=c-o.tooltipRect.ttWidth/2+g),o.w.config.tooltip.followCursor){var p=n.globals.dom.elWrap.getBoundingClientRect();a=n.globals.clientX-p.left-(a>n.globals.gridWidth/2?o.tooltipRect.ttWidth:0),s=n.globals.clientY-p.top-(s>n.globals.gridHeight/2?o.tooltipRect.ttHeight:0)}}return{x:a,y:s}}},{key:\"handleMarkerTooltip\",value:function(t){var e,i,a=t.e,s=t.opt,r=t.x,o=t.y,n=this.w,l=this.ttCtx;if(a.target.classList.contains(\"apexcharts-marker\")){var h=parseInt(s.paths.getAttribute(\"cx\"),10),c=parseInt(s.paths.getAttribute(\"cy\"),10),d=parseFloat(s.paths.getAttribute(\"val\"));if(i=parseInt(s.paths.getAttribute(\"rel\"),10),e=parseInt(s.paths.parentNode.parentNode.parentNode.getAttribute(\"rel\"),10)-1,l.intersect){var g=x.findAncestor(s.paths,\"apexcharts-series\");g&&(e=parseInt(g.getAttribute(\"data:realIndex\"),10))}if(l.tooltipLabels.drawSeriesTexts({ttItems:s.ttItems,i:e,j:i,shared:!l.showOnIntersect&&n.config.tooltip.shared,e:a}),\"mouseup\"===a.type&&l.markerClick(a,e,i),n.globals.capturedSeriesIndex=e,n.globals.capturedDataPointIndex=i,r=h,o=c+n.globals.translateY-1.4*l.tooltipRect.ttHeight,l.w.config.tooltip.followCursor){var u=l.getElGrid().getBoundingClientRect();o=l.e.clientY+n.globals.translateY-u.top}d<0&&(o=c),l.marker.enlargeCurrentPoint(i,s.paths,r,o)}return{x:r,y:o}}},{key:\"handleBarTooltip\",value:function(t){var e,i,a=t.e,s=t.opt,r=this.w,o=this.ttCtx,n=o.getElTooltip(),l=0,h=0,c=0,d=this.getBarTooltipXY({e:a,opt:s});e=d.i;var g=d.barHeight,u=d.j;r.globals.capturedSeriesIndex=e,r.globals.capturedDataPointIndex=u,r.globals.isBarHorizontal&&o.tooltipUtil.hasBars()||!r.config.tooltip.shared?(h=d.x,c=d.y,i=Array.isArray(r.config.stroke.width)?r.config.stroke.width[e]:r.config.stroke.width,l=h):r.globals.comboCharts||r.config.tooltip.shared||(l/=2),isNaN(c)&&(c=r.globals.svgHeight-o.tooltipRect.ttHeight);var p=parseInt(s.paths.parentNode.getAttribute(\"data:realIndex\"),10),f=r.globals.isMultipleYAxis?r.config.yaxis[p]&&r.config.yaxis[p].reversed:r.config.yaxis[0].reversed;if(h+o.tooltipRect.ttWidth>r.globals.gridWidth&&!f?h-=o.tooltipRect.ttWidth:h<0&&(h=0),o.w.config.tooltip.followCursor){var x=o.getElGrid().getBoundingClientRect();c=o.e.clientY-x.top}null===o.tooltip&&(o.tooltip=r.globals.dom.baseEl.querySelector(\".apexcharts-tooltip\")),r.config.tooltip.shared||(r.globals.comboBarCount>0?o.tooltipPosition.moveXCrosshairs(l+i/2):o.tooltipPosition.moveXCrosshairs(l)),!o.fixedTooltip&&(!r.config.tooltip.shared||r.globals.isBarHorizontal&&o.tooltipUtil.hasBars())&&(f&&(h-=o.tooltipRect.ttWidth)<0&&(h=0),!f||r.globals.isBarHorizontal&&o.tooltipUtil.hasBars()||(c=c+g-2*(r.globals.series[e][u]<0?g:0)),c=c+r.globals.translateY-o.tooltipRect.ttHeight/2,n.style.left=h+r.globals.translateX+\"px\",n.style.top=c+\"px\")}},{key:\"getBarTooltipXY\",value:function(t){var e=this,i=t.e,a=t.opt,s=this.w,r=null,o=this.ttCtx,n=0,l=0,h=0,c=0,d=0,g=i.target.classList;if(g.contains(\"apexcharts-bar-area\")||g.contains(\"apexcharts-candlestick-area\")||g.contains(\"apexcharts-boxPlot-area\")||g.contains(\"apexcharts-rangebar-area\")){var u=i.target,p=u.getBoundingClientRect(),f=a.elGrid.getBoundingClientRect(),x=p.height;d=p.height;var b=p.width,v=parseInt(u.getAttribute(\"cx\"),10),m=parseInt(u.getAttribute(\"cy\"),10);c=parseFloat(u.getAttribute(\"barWidth\"));var y=\"touchmove\"===i.type?i.touches[0].clientX:i.clientX;r=parseInt(u.getAttribute(\"j\"),10),n=parseInt(u.parentNode.getAttribute(\"rel\"),10)-1;var w=u.getAttribute(\"data-range-y1\"),k=u.getAttribute(\"data-range-y2\");s.globals.comboCharts&&(n=parseInt(u.parentNode.getAttribute(\"data:realIndex\"),10));var A=function(t){return s.globals.isXNumeric?v-b/2:e.isVerticalGroupedRangeBar?v+b/2:v-o.dataPointsDividedWidth+b/2},S=function(){return m-o.dataPointsDividedHeight+x/2-o.tooltipRect.ttHeight/2};o.tooltipLabels.drawSeriesTexts({ttItems:a.ttItems,i:n,j:r,y1:w?parseInt(w,10):null,y2:k?parseInt(k,10):null,shared:!o.showOnIntersect&&s.config.tooltip.shared,e:i}),s.config.tooltip.followCursor?s.globals.isBarHorizontal?(l=y-f.left+15,h=S()):(l=A(),h=i.clientY-f.top-o.tooltipRect.ttHeight/2-15):s.globals.isBarHorizontal?((l=v)<o.xyRatios.baseLineInvertedY&&(l=v-o.tooltipRect.ttWidth),h=S()):(l=A(),h=m)}return{x:l,y:h,barHeight:d,barWidth:c,i:n,j:r}}}]),t}(),xt=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e}return r(t,[{key:\"drawXaxisTooltip\",value:function(){var t=this.w,e=this.ttCtx,i=\"bottom\"===t.config.xaxis.position;e.xaxisOffY=i?t.globals.gridHeight+1:-t.globals.xAxisHeight-t.config.xaxis.axisTicks.height+3;var a=i?\"apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom\":\"apexcharts-xaxistooltip apexcharts-xaxistooltip-top\",s=t.globals.dom.elWrap;e.isXAxisTooltipEnabled&&(null===t.globals.dom.baseEl.querySelector(\".apexcharts-xaxistooltip\")&&(e.xaxisTooltip=document.createElement(\"div\"),e.xaxisTooltip.setAttribute(\"class\",a+\" apexcharts-theme-\"+t.config.tooltip.theme),s.appendChild(e.xaxisTooltip),e.xaxisTooltipText=document.createElement(\"div\"),e.xaxisTooltipText.classList.add(\"apexcharts-xaxistooltip-text\"),e.xaxisTooltipText.style.fontFamily=t.config.xaxis.tooltip.style.fontFamily||t.config.chart.fontFamily,e.xaxisTooltipText.style.fontSize=t.config.xaxis.tooltip.style.fontSize,e.xaxisTooltip.appendChild(e.xaxisTooltipText)))}},{key:\"drawYaxisTooltip\",value:function(){for(var t=this.w,e=this.ttCtx,i=function(i){var a=t.config.yaxis[i].opposite||t.config.yaxis[i].crosshairs.opposite;e.yaxisOffX=a?t.globals.gridWidth+1:1;var s=\"apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i,a?\" apexcharts-yaxistooltip-right\":\" apexcharts-yaxistooltip-left\");t.globals.yAxisSameScaleIndices.map((function(e,a){e.map((function(e,a){a===i&&(s+=t.config.yaxis[a].show?\" \":\" apexcharts-yaxistooltip-hidden\")}))}));var r=t.globals.dom.elWrap;null===t.globals.dom.baseEl.querySelector(\".apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i))&&(e.yaxisTooltip=document.createElement(\"div\"),e.yaxisTooltip.setAttribute(\"class\",s+\" apexcharts-theme-\"+t.config.tooltip.theme),r.appendChild(e.yaxisTooltip),0===i&&(e.yaxisTooltipText=[]),e.yaxisTooltipText[i]=document.createElement(\"div\"),e.yaxisTooltipText[i].classList.add(\"apexcharts-yaxistooltip-text\"),e.yaxisTooltip.appendChild(e.yaxisTooltipText[i]))},a=0;a<t.config.yaxis.length;a++)i(a)}},{key:\"setXCrosshairWidth\",value:function(){var t=this.w,e=this.ttCtx,i=e.getElXCrosshairs();if(e.xcrosshairsWidth=parseInt(t.config.xaxis.crosshairs.width,10),t.globals.comboCharts){var a=t.globals.dom.baseEl.querySelector(\".apexcharts-bar-area\");if(null!==a&&\"barWidth\"===t.config.xaxis.crosshairs.width){var s=parseFloat(a.getAttribute(\"barWidth\"));e.xcrosshairsWidth=s}else if(\"tickWidth\"===t.config.xaxis.crosshairs.width){var r=t.globals.labels.length;e.xcrosshairsWidth=t.globals.gridWidth/r}}else if(\"tickWidth\"===t.config.xaxis.crosshairs.width){var o=t.globals.labels.length;e.xcrosshairsWidth=t.globals.gridWidth/o}else if(\"barWidth\"===t.config.xaxis.crosshairs.width){var n=t.globals.dom.baseEl.querySelector(\".apexcharts-bar-area\");if(null!==n){var l=parseFloat(n.getAttribute(\"barWidth\"));e.xcrosshairsWidth=l}else e.xcrosshairsWidth=1}t.globals.isBarHorizontal&&(e.xcrosshairsWidth=0),null!==i&&e.xcrosshairsWidth>0&&i.setAttribute(\"width\",e.xcrosshairsWidth)}},{key:\"handleYCrosshair\",value:function(){var t=this.w,e=this.ttCtx;e.ycrosshairs=t.globals.dom.baseEl.querySelector(\".apexcharts-ycrosshairs\"),e.ycrosshairsHidden=t.globals.dom.baseEl.querySelector(\".apexcharts-ycrosshairs-hidden\")}},{key:\"drawYaxisTooltipText\",value:function(t,e,i){var a=this.ttCtx,s=this.w,r=s.globals.yLabelFormatters[t];if(a.yaxisTooltips[t]){var o=a.getElGrid().getBoundingClientRect(),n=(e-o.top)*i.yRatio[t],l=s.globals.maxYArr[t]-s.globals.minYArr[t],h=s.globals.minYArr[t]+(l-n);a.tooltipPosition.moveYCrosshairs(e-o.top),a.yaxisTooltipText[t].innerHTML=r(h),a.tooltipPosition.moveYAxisTooltip(t)}}}]),t}(),bt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.tConfig=i.config.tooltip,this.tooltipUtil=new dt(this),this.tooltipLabels=new gt(this),this.tooltipPosition=new ut(this),this.marker=new pt(this),this.intersect=new ft(this),this.axesTooltip=new xt(this),this.showOnIntersect=this.tConfig.intersect,this.showTooltipTitle=this.tConfig.x.show,this.fixedTooltip=this.tConfig.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarShared=!i.globals.isBarHorizontal&&this.tConfig.shared,this.lastHoverTime=Date.now()}return r(t,[{key:\"getElTooltip\",value:function(t){return t||(t=this),t.w.globals.dom.baseEl?t.w.globals.dom.baseEl.querySelector(\".apexcharts-tooltip\"):null}},{key:\"getElXCrosshairs\",value:function(){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-xcrosshairs\")}},{key:\"getElGrid\",value:function(){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-grid\")}},{key:\"drawTooltip\",value:function(t){var e=this.w;this.xyRatios=t,this.isXAxisTooltipEnabled=e.config.xaxis.tooltip.enabled&&e.globals.axisCharts,this.yaxisTooltips=e.config.yaxis.map((function(t,i){return!!(t.show&&t.tooltip.enabled&&e.globals.axisCharts)})),this.allTooltipSeriesGroups=[],e.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement(\"div\");if(i.classList.add(\"apexcharts-tooltip\"),e.config.tooltip.cssClass&&i.classList.add(e.config.tooltip.cssClass),i.classList.add(\"apexcharts-theme-\".concat(this.tConfig.theme)),e.globals.dom.elWrap.appendChild(i),e.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var a=new V(this.ctx);this.xAxisTicksPositions=a.getXAxisTicksPositions()}if(!e.globals.comboCharts&&!this.tConfig.intersect&&\"rangeBar\"!==e.config.chart.type||this.tConfig.shared||(this.showOnIntersect=!0),0!==e.config.markers.size&&0!==e.globals.markers.largestSize||this.marker.drawDynamicPoints(this),e.globals.collapsedSeries.length!==e.globals.series.length){this.dataPointsDividedHeight=e.globals.gridHeight/e.globals.dataPoints,this.dataPointsDividedWidth=e.globals.gridWidth/e.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement(\"div\"),this.tooltipTitle.classList.add(\"apexcharts-tooltip-title\"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||e.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var s=e.globals.series.length;(e.globals.xyCharts||e.globals.comboCharts)&&this.tConfig.shared&&(s=this.showOnIntersect?1:e.globals.series.length),this.legendLabels=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-legend-text\"),this.ttItems=this.createTTElements(s),this.addSVGEvents()}}},{key:\"createTTElements\",value:function(t){for(var e=this,i=this.w,a=[],s=this.getElTooltip(),r=function(r){var o=document.createElement(\"div\");o.classList.add(\"apexcharts-tooltip-series-group\"),o.style.order=i.config.tooltip.inverseOrder?t-r:r+1,e.tConfig.shared&&e.tConfig.enabledOnSeries&&Array.isArray(e.tConfig.enabledOnSeries)&&e.tConfig.enabledOnSeries.indexOf(r)<0&&o.classList.add(\"apexcharts-tooltip-series-group-hidden\");var n=document.createElement(\"span\");n.classList.add(\"apexcharts-tooltip-marker\"),n.style.backgroundColor=i.globals.colors[r],o.appendChild(n);var l=document.createElement(\"div\");l.classList.add(\"apexcharts-tooltip-text\"),l.style.fontFamily=e.tConfig.style.fontFamily||i.config.chart.fontFamily,l.style.fontSize=e.tConfig.style.fontSize,[\"y\",\"goals\",\"z\"].forEach((function(t){var e=document.createElement(\"div\");e.classList.add(\"apexcharts-tooltip-\".concat(t,\"-group\"));var i=document.createElement(\"span\");i.classList.add(\"apexcharts-tooltip-text-\".concat(t,\"-label\")),e.appendChild(i);var a=document.createElement(\"span\");a.classList.add(\"apexcharts-tooltip-text-\".concat(t,\"-value\")),e.appendChild(a),l.appendChild(e)})),o.appendChild(l),s.appendChild(o),a.push(o)},o=0;o<t;o++)r(o);return a}},{key:\"addSVGEvents\",value:function(){var t=this.w,e=t.config.chart.type,i=this.getElTooltip(),a=!(\"bar\"!==e&&\"candlestick\"!==e&&\"boxPlot\"!==e&&\"rangeBar\"!==e),s=\"area\"===e||\"line\"===e||\"scatter\"===e||\"bubble\"===e||\"radar\"===e,r=t.globals.dom.Paper.node,o=this.getElGrid();o&&(this.seriesBound=o.getBoundingClientRect());var n,l=[],h=[],c={hoverArea:r,elGrid:o,tooltipEl:i,tooltipY:l,tooltipX:h,ttItems:this.ttItems};if(t.globals.axisCharts&&(s?n=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series[data\\\\:longestSeries='true'] .apexcharts-marker\"):a?n=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-boxPlot-area, .apexcharts-series .apexcharts-rangebar-area\"):\"heatmap\"!==e&&\"treemap\"!==e||(n=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series .apexcharts-heatmap, .apexcharts-series .apexcharts-treemap\")),n&&n.length))for(var d=0;d<n.length;d++)l.push(n[d].getAttribute(\"cy\")),h.push(n[d].getAttribute(\"cx\"));if(t.globals.xyCharts&&!this.showOnIntersect||t.globals.comboCharts&&!this.showOnIntersect||a&&this.tooltipUtil.hasBars()&&this.tConfig.shared)this.addPathsEventListeners([r],c);else if(a&&!t.globals.comboCharts||s&&this.showOnIntersect)this.addDatapointEventsListeners(c);else if(!t.globals.axisCharts||\"heatmap\"===e||\"treemap\"===e){var g=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series\");this.addPathsEventListeners(g,c)}if(this.showOnIntersect){var u=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-line-series .apexcharts-marker, .apexcharts-area-series .apexcharts-marker\");u.length>0&&this.addPathsEventListeners(u,c),this.tooltipUtil.hasBars()&&!this.tConfig.shared&&this.addDatapointEventsListeners(c)}}},{key:\"drawFixedTooltipRect\",value:function(){var t=this.w,e=this.getElTooltip(),i=e.getBoundingClientRect(),a=i.width+10,s=i.height+10,r=this.tConfig.fixed.offsetX,o=this.tConfig.fixed.offsetY,n=this.tConfig.fixed.position.toLowerCase();return n.indexOf(\"right\")>-1&&(r=r+t.globals.svgWidth-a+10),n.indexOf(\"bottom\")>-1&&(o=o+t.globals.svgHeight-s-10),e.style.left=r+\"px\",e.style.top=o+\"px\",{x:r,y:o,ttWidth:a,ttHeight:s}}},{key:\"addDatapointEventsListeners\",value:function(t){var e=this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area\");this.addPathsEventListeners(e,t)}},{key:\"addPathsEventListeners\",value:function(t,e){for(var i=this,a=function(a){var s={paths:t[a],tooltipEl:e.tooltipEl,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:e.ttItems};[\"mousemove\",\"mouseup\",\"touchmove\",\"mouseout\",\"touchend\"].map((function(e){return t[a].addEventListener(e,i.onSeriesHover.bind(i,s),{capture:!1,passive:!0})}))},s=0;s<t.length;s++)a(s)}},{key:\"onSeriesHover\",value:function(t,e){var i=this,a=Date.now()-this.lastHoverTime;a>=100?this.seriesHover(t,e):(clearTimeout(this.seriesHoverTimeout),this.seriesHoverTimeout=setTimeout((function(){i.seriesHover(t,e)}),100-a))}},{key:\"seriesHover\",value:function(t,e){var i=this;this.lastHoverTime=Date.now();var a=[],s=this.w;s.config.chart.group&&(a=this.ctx.getGroupedCharts()),s.globals.axisCharts&&(s.globals.minX===-1/0&&s.globals.maxX===1/0||0===s.globals.dataPoints)||(a.length?a.forEach((function(a){var s=i.getElTooltip(a),r={paths:t.paths,tooltipEl:s,tooltipY:t.tooltipY,tooltipX:t.tooltipX,elGrid:t.elGrid,hoverArea:t.hoverArea,ttItems:a.w.globals.tooltip.ttItems};a.w.globals.minX===i.w.globals.minX&&a.w.globals.maxX===i.w.globals.maxX&&a.w.globals.tooltip.seriesHoverByContext({chartCtx:a,ttCtx:a.w.globals.tooltip,opt:r,e:e})})):this.seriesHoverByContext({chartCtx:this.ctx,ttCtx:this.w.globals.tooltip,opt:t,e:e}))}},{key:\"seriesHoverByContext\",value:function(t){var e=t.chartCtx,i=t.ttCtx,a=t.opt,s=t.e,r=e.w,o=this.getElTooltip();if(o){if(i.tooltipRect={x:0,y:0,ttWidth:o.getBoundingClientRect().width,ttHeight:o.getBoundingClientRect().height},i.e=s,i.tooltipUtil.hasBars()&&!r.globals.comboCharts&&!i.isBarShared)if(this.tConfig.onDatasetHover.highlightDataSeries)new N(e).toggleSeriesOnHover(s,s.target.parentNode);i.fixedTooltip&&i.drawFixedTooltipRect(),r.globals.axisCharts?i.axisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect}):i.nonAxisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect})}}},{key:\"axisChartsTooltips\",value:function(t){var e,i,a=t.e,s=t.opt,r=this.w,o=s.elGrid.getBoundingClientRect(),n=\"touchmove\"===a.type?a.touches[0].clientX:a.clientX,l=\"touchmove\"===a.type?a.touches[0].clientY:a.clientY;if(this.clientY=l,this.clientX=n,r.globals.capturedSeriesIndex=-1,r.globals.capturedDataPointIndex=-1,l<o.top||l>o.top+o.height)this.handleMouseOut(s);else{if(Array.isArray(this.tConfig.enabledOnSeries)&&!r.config.tooltip.shared){var h=parseInt(s.paths.getAttribute(\"index\"),10);if(this.tConfig.enabledOnSeries.indexOf(h)<0)return void this.handleMouseOut(s)}var c=this.getElTooltip(),d=this.getElXCrosshairs(),g=r.globals.xyCharts||\"bar\"===r.config.chart.type&&!r.globals.isBarHorizontal&&this.tooltipUtil.hasBars()&&this.tConfig.shared||r.globals.comboCharts&&this.tooltipUtil.hasBars();if(\"mousemove\"===a.type||\"touchmove\"===a.type||\"mouseup\"===a.type){if(r.globals.collapsedSeries.length+r.globals.ancillaryCollapsedSeries.length===r.globals.series.length)return;null!==d&&d.classList.add(\"apexcharts-active\");var u=this.yaxisTooltips.filter((function(t){return!0===t}));if(null!==this.ycrosshairs&&u.length&&this.ycrosshairs.classList.add(\"apexcharts-active\"),g&&!this.showOnIntersect)this.handleStickyTooltip(a,n,l,s);else if(\"heatmap\"===r.config.chart.type||\"treemap\"===r.config.chart.type){var p=this.intersect.handleHeatTreeTooltip({e:a,opt:s,x:e,y:i,type:r.config.chart.type});e=p.x,i=p.y,c.style.left=e+\"px\",c.style.top=i+\"px\"}else this.tooltipUtil.hasBars()&&this.intersect.handleBarTooltip({e:a,opt:s}),this.tooltipUtil.hasMarkers()&&this.intersect.handleMarkerTooltip({e:a,opt:s,x:e,y:i});if(this.yaxisTooltips.length)for(var f=0;f<r.config.yaxis.length;f++)this.axesTooltip.drawYaxisTooltipText(f,l,this.xyRatios);s.tooltipEl.classList.add(\"apexcharts-active\")}else\"mouseout\"!==a.type&&\"touchend\"!==a.type||this.handleMouseOut(s)}}},{key:\"nonAxisChartsTooltips\",value:function(t){var e=t.e,i=t.opt,a=t.tooltipRect,s=this.w,r=i.paths.getAttribute(\"rel\"),o=this.getElTooltip(),n=s.globals.dom.elWrap.getBoundingClientRect();if(\"mousemove\"===e.type||\"touchmove\"===e.type){o.classList.add(\"apexcharts-active\"),this.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:parseInt(r,10)-1,shared:!1});var l=s.globals.clientX-n.left-a.ttWidth/2,h=s.globals.clientY-n.top-a.ttHeight-10;if(o.style.left=l+\"px\",o.style.top=h+\"px\",s.config.legend.tooltipHoverFormatter){var c=r-1,d=(0,s.config.legend.tooltipHoverFormatter)(this.legendLabels[c].getAttribute(\"data:default-text\"),{seriesIndex:c,dataPointIndex:c,w:s});this.legendLabels[c].innerHTML=d}}else\"mouseout\"!==e.type&&\"touchend\"!==e.type||(o.classList.remove(\"apexcharts-active\"),s.config.legend.tooltipHoverFormatter&&this.legendLabels.forEach((function(t){var e=t.getAttribute(\"data:default-text\");t.innerHTML=decodeURIComponent(e)})))}},{key:\"handleStickyTooltip\",value:function(t,e,i,a){var s=this.w,r=this.tooltipUtil.getNearestValues({context:this,hoverArea:a.hoverArea,elGrid:a.elGrid,clientX:e,clientY:i}),o=r.j,n=r.capturedSeries;s.globals.collapsedSeriesIndices.includes(n)&&(n=null);var l=a.elGrid.getBoundingClientRect();if(r.hoverX<0||r.hoverX>l.width)this.handleMouseOut(a);else if(null!==n)this.handleStickyCapturedSeries(t,n,a,o);else if(this.tooltipUtil.isXoverlap(o)||s.globals.isBarHorizontal){var h=s.globals.series.findIndex((function(t,e){return!s.globals.collapsedSeriesIndices.includes(e)}));this.create(t,this,h,o,a.ttItems)}}},{key:\"handleStickyCapturedSeries\",value:function(t,e,i,a){var s=this.w;if(!this.tConfig.shared&&null===s.globals.series[e][a])return void this.handleMouseOut(i);if(void 0!==s.globals.series[e][a])this.tConfig.shared&&this.tooltipUtil.isXoverlap(a)&&this.tooltipUtil.isInitialSeriesSameLen()?this.create(t,this,e,a,i.ttItems):this.create(t,this,e,a,i.ttItems,!1);else if(this.tooltipUtil.isXoverlap(a)){var r=s.globals.series.findIndex((function(t,e){return!s.globals.collapsedSeriesIndices.includes(e)}));this.create(t,this,r,a,i.ttItems)}}},{key:\"deactivateHoverFilter\",value:function(){for(var t=this.w,e=new m(this.ctx),i=t.globals.dom.Paper.select(\".apexcharts-bar-area\"),a=0;a<i.length;a++)e.pathMouseLeave(i[a])}},{key:\"handleMouseOut\",value:function(t){var e=this.w,i=this.getElXCrosshairs();if(t.tooltipEl.classList.remove(\"apexcharts-active\"),this.deactivateHoverFilter(),\"bubble\"!==e.config.chart.type&&this.marker.resetPointsSize(),null!==i&&i.classList.remove(\"apexcharts-active\"),null!==this.ycrosshairs&&this.ycrosshairs.classList.remove(\"apexcharts-active\"),this.isXAxisTooltipEnabled&&this.xaxisTooltip.classList.remove(\"apexcharts-active\"),this.yaxisTooltips.length){null===this.yaxisTTEls&&(this.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\"));for(var a=0;a<this.yaxisTTEls.length;a++)this.yaxisTTEls[a].classList.remove(\"apexcharts-active\")}e.config.legend.tooltipHoverFormatter&&this.legendLabels.forEach((function(t){var e=t.getAttribute(\"data:default-text\");t.innerHTML=decodeURIComponent(e)}))}},{key:\"markerClick\",value:function(t,e,i){var a=this.w;\"function\"==typeof a.config.chart.events.markerClick&&a.config.chart.events.markerClick(t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:a}),this.ctx.events.fireEvent(\"markerClick\",[t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:a}])}},{key:\"create\",value:function(t,i,a,s,r){var o,n,l,h,c,d,g,u,p,f,x,b,v,y,w,k,A=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,S=this.w,C=i;\"mouseup\"===t.type&&this.markerClick(t,a,s),null===A&&(A=this.tConfig.shared);var L=this.tooltipUtil.hasMarkers(a),P=this.tooltipUtil.getElBars();if(S.config.legend.tooltipHoverFormatter){var I=S.config.legend.tooltipHoverFormatter,T=Array.from(this.legendLabels);T.forEach((function(t){var e=t.getAttribute(\"data:default-text\");t.innerHTML=decodeURIComponent(e)}));for(var M=0;M<T.length;M++){var X=T[M],z=parseInt(X.getAttribute(\"i\"),10),E=decodeURIComponent(X.getAttribute(\"data:default-text\")),Y=I(E,{seriesIndex:A?z:a,dataPointIndex:s,w:S});if(A)X.innerHTML=S.globals.collapsedSeriesIndices.indexOf(z)<0?Y:E;else if(X.innerHTML=z===a?Y:E,a===z)break}}var F=e(e({ttItems:r,i:a,j:s},void 0!==(null===(o=S.globals.seriesRange)||void 0===o||null===(n=o[a])||void 0===n||null===(l=n[s])||void 0===l||null===(h=l.y[0])||void 0===h?void 0:h.y1)&&{y1:null===(c=S.globals.seriesRange)||void 0===c||null===(d=c[a])||void 0===d||null===(g=d[s])||void 0===g||null===(u=g.y[0])||void 0===u?void 0:u.y1}),void 0!==(null===(p=S.globals.seriesRange)||void 0===p||null===(f=p[a])||void 0===f||null===(x=f[s])||void 0===x||null===(b=x.y[0])||void 0===b?void 0:b.y2)&&{y2:null===(v=S.globals.seriesRange)||void 0===v||null===(y=v[a])||void 0===y||null===(w=y[s])||void 0===w||null===(k=w.y[0])||void 0===k?void 0:k.y2});if(A){if(C.tooltipLabels.drawSeriesTexts(e(e({},F),{},{shared:!this.showOnIntersect&&this.tConfig.shared})),L)S.globals.markers.largestSize>0?C.marker.enlargePoints(s):C.tooltipPosition.moveDynamicPointsOnHover(s);else if(this.tooltipUtil.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(P),this.barSeriesHeight>0)){var R=new m(this.ctx),H=S.globals.dom.Paper.select(\".apexcharts-bar-area[j='\".concat(s,\"']\"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(s,a);for(var D=0;D<H.length;D++)R.pathMouseEnter(H[D])}}else C.tooltipLabels.drawSeriesTexts(e({shared:!1},F)),this.tooltipUtil.hasBars()&&C.tooltipPosition.moveStickyTooltipOverBars(s,a),L&&C.tooltipPosition.moveMarkers(a,s)}}]),t}(),vt=function(){function t(e){a(this,t),this.w=e.w,this.barCtx=e,this.totalFormatter=this.w.config.plotOptions.bar.dataLabels.total.formatter,this.totalFormatter||(this.totalFormatter=this.w.config.dataLabels.formatter)}return r(t,[{key:\"handleBarDataLabels\",value:function(t){var e=t.x,i=t.y,a=t.y1,s=t.y2,r=t.i,o=t.j,n=t.realIndex,l=t.groupIndex,h=t.series,c=t.barHeight,d=t.barWidth,g=t.barXPosition,u=t.barYPosition,p=t.visibleSeries,f=t.renderedPath,x=this.w,b=new m(this.barCtx.ctx),v=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[n]:this.barCtx.strokeWidth,y=e+parseFloat(d*p),w=i+parseFloat(c*p);x.globals.isXNumeric&&!x.globals.isBarHorizontal&&(y=e+parseFloat(d*(p+1)),w=i+parseFloat(c*(p+1))-v);var k,A=null,S=e,C=i,L={},P=x.config.dataLabels,I=this.barCtx.barOptions.dataLabels,T=this.barCtx.barOptions.dataLabels.total;void 0!==u&&this.barCtx.isRangeBar&&(w=u,C=u),void 0!==g&&this.barCtx.isVerticalGroupedRangeBar&&(y=g,S=g);var M=P.offsetX,X=P.offsetY,z={width:0,height:0};if(x.config.dataLabels.enabled){var E=this.barCtx.series[r][o];z=b.getTextRects(x.globals.yLabelFormatters[0](E),parseFloat(P.style.fontSize))}var Y={x:e,y:i,i:r,j:o,realIndex:n,groupIndex:l||-1,renderedPath:f,bcx:y,bcy:w,barHeight:c,barWidth:d,textRects:z,strokeWidth:v,dataLabelsX:S,dataLabelsY:C,dataLabelsConfig:P,barDataLabelsConfig:I,barTotalDataLabelsConfig:T,offX:M,offY:X};return L=this.barCtx.isHorizontal?this.calculateBarsDataLabelsPosition(Y):this.calculateColumnsDataLabelsPosition(Y),f.attr({cy:L.bcy,cx:L.bcx,j:o,val:h[r][o],barHeight:c,barWidth:d}),k=this.drawCalculatedDataLabels({x:L.dataLabelsX,y:L.dataLabelsY,val:this.barCtx.isRangeBar?[a,s]:h[r][o],i:n,j:o,barWidth:d,barHeight:c,textRects:z,dataLabelsConfig:P}),x.config.chart.stacked&&T.enabled&&(A=this.drawTotalDataLabels({x:L.totalDataLabelsX,y:L.totalDataLabelsY,realIndex:n,textAnchor:L.totalDataLabelsAnchor,val:this.getStackedTotalDataLabel({realIndex:n,j:o}),dataLabelsConfig:P,barTotalDataLabelsConfig:T})),{dataLabels:k,totalDataLabels:A}}},{key:\"getStackedTotalDataLabel\",value:function(t){var i=t.realIndex,a=t.j,s=this.w,r=this.barCtx.stackedSeriesTotals[a];return this.totalFormatter&&(r=this.totalFormatter(r,e(e({},s),{},{seriesIndex:i,dataPointIndex:a,w:s}))),r}},{key:\"calculateColumnsDataLabelsPosition\",value:function(t){var e,i,a=this.w,s=t.i,r=t.j,o=t.realIndex,n=t.groupIndex,l=t.y,h=t.bcx,c=t.barWidth,d=t.barHeight,g=t.textRects,u=t.dataLabelsX,p=t.dataLabelsY,f=t.dataLabelsConfig,x=t.barDataLabelsConfig,b=t.barTotalDataLabelsConfig,v=t.strokeWidth,y=t.offX,w=t.offY;d=Math.abs(d);var k=\"vertical\"===a.config.plotOptions.bar.dataLabels.orientation;h=h-v/2+(-1!==n?n*c:0);var A=a.globals.gridWidth/a.globals.dataPoints;if(this.barCtx.isVerticalGroupedRangeBar?u+=c/2:u=a.globals.isXNumeric?h-c/2+y:h-A+c/2+y,k){u=u+g.height/2-v/2-2}var S=this.barCtx.series[s][r]<0,C=l;switch(this.barCtx.isReversed&&(C=l-d+(S?2*d:0),l-=d),x.position){case\"center\":p=k?S?C+d/2+w:C+d/2-w:S?C-d/2+g.height/2+w:C+d/2+g.height/2-w;break;case\"bottom\":p=k?S?C+d+w:C+d-w:S?C-d+g.height+v+w:C+d-g.height/2+v-w;break;case\"top\":p=k?S?C+w:C-w:S?C-g.height/2-w:C+g.height+w}if(this.barCtx.lastActiveBarSerieIndex===o&&b.enabled){var L=new m(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:o,j:r}),f.fontSize);e=S?C-L.height/2-w-b.offsetY+18:C+L.height+w+b.offsetY-18,i=u+b.offsetX}return a.config.chart.stacked||(p<0?p=0+v:p+g.height/3>a.globals.gridHeight&&(p=a.globals.gridHeight-v)),{bcx:h,bcy:l,dataLabelsX:u,dataLabelsY:p,totalDataLabelsX:i,totalDataLabelsY:e,totalDataLabelsAnchor:\"middle\"}}},{key:\"calculateBarsDataLabelsPosition\",value:function(t){var e=this.w,i=t.x,a=t.i,s=t.j,r=t.realIndex,o=t.groupIndex,n=t.bcy,l=t.barHeight,h=t.barWidth,c=t.textRects,d=t.dataLabelsX,g=t.strokeWidth,u=t.dataLabelsConfig,p=t.barDataLabelsConfig,f=t.barTotalDataLabelsConfig,x=t.offX,b=t.offY,v=e.globals.gridHeight/e.globals.dataPoints;h=Math.abs(h);var y,w,k=(n+=-1!==o?o*l:0)-(this.barCtx.isRangeBar?0:v)+l/2+c.height/2+b-3,A=\"start\",S=this.barCtx.series[a][s]<0,C=i;switch(this.barCtx.isReversed&&(C=i+h-(S?2*h:0),i=e.globals.gridWidth-h),p.position){case\"center\":d=S?C+h/2-x:Math.max(c.width/2,C-h/2)+x;break;case\"bottom\":d=S?C+h-g-Math.round(c.width/2)-x:C-h+g+Math.round(c.width/2)+x;break;case\"top\":d=S?C-g+Math.round(c.width/2)-x:C-g-Math.round(c.width/2)+x}if(this.barCtx.lastActiveBarSerieIndex===r&&f.enabled){var L=new m(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:r,j:s}),u.fontSize);S?(y=C-g+Math.round(L.width/2)-x-f.offsetX-15,A=\"end\"):y=C-g-Math.round(L.width/2)+x+f.offsetX+15,w=k+f.offsetY}return e.config.chart.stacked||(d<0?d=d+c.width+g:d+c.width/2>e.globals.gridWidth&&(d=e.globals.gridWidth-c.width-g)),{bcx:i,bcy:n,dataLabelsX:d,dataLabelsY:k,totalDataLabelsX:y,totalDataLabelsY:w,totalDataLabelsAnchor:A}}},{key:\"drawCalculatedDataLabels\",value:function(t){var i=t.x,a=t.y,s=t.val,r=t.i,o=t.j,n=t.textRects,l=t.barHeight,h=t.barWidth,c=t.dataLabelsConfig,d=this.w,g=\"rotate(0)\";\"vertical\"===d.config.plotOptions.bar.dataLabels.orientation&&(g=\"rotate(-90, \".concat(i,\", \").concat(a,\")\"));var u=new O(this.barCtx.ctx),p=new m(this.barCtx.ctx),f=c.formatter,x=null,b=d.globals.collapsedSeriesIndices.indexOf(r)>-1;if(c.enabled&&!b){x=p.group({class:\"apexcharts-data-labels\",transform:g});var v=\"\";void 0!==s&&(v=f(s,e(e({},d),{},{seriesIndex:r,dataPointIndex:o,w:d}))),!s&&d.config.plotOptions.bar.hideZeroBarsWhenGrouped&&(v=\"\");var y=d.globals.series[r][o]<0,w=d.config.plotOptions.bar.dataLabels.position;if(\"vertical\"===d.config.plotOptions.bar.dataLabels.orientation&&(\"top\"===w&&(c.textAnchor=y?\"end\":\"start\"),\"center\"===w&&(c.textAnchor=\"middle\"),\"bottom\"===w&&(c.textAnchor=y?\"end\":\"start\")),this.barCtx.isRangeBar&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels)h<p.getTextRects(v,parseFloat(c.style.fontSize)).width&&(v=\"\");d.config.chart.stacked&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels&&(this.barCtx.isHorizontal?n.width/1.6>Math.abs(h)&&(v=\"\"):n.height/1.6>Math.abs(l)&&(v=\"\"));var k=e({},c);this.barCtx.isHorizontal&&s<0&&(\"start\"===c.textAnchor?k.textAnchor=\"end\":\"end\"===c.textAnchor&&(k.textAnchor=\"start\")),u.plotDataLabelsText({x:i,y:a,text:v,i:r,j:o,parent:x,dataLabelsConfig:k,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return x}},{key:\"drawTotalDataLabels\",value:function(t){var e,i=t.x,a=t.y,s=t.val,r=t.realIndex,o=t.textAnchor,n=t.barTotalDataLabelsConfig,l=new m(this.barCtx.ctx);return n.enabled&&void 0!==i&&void 0!==a&&this.barCtx.lastActiveBarSerieIndex===r&&(e=l.drawText({x:i,y:a,foreColor:n.style.color,text:s,textAnchor:o,fontFamily:n.style.fontFamily,fontSize:n.style.fontSize,fontWeight:n.style.fontWeight})),e}}]),t}(),mt=function(){function t(e){a(this,t),this.w=e.w,this.barCtx=e}return r(t,[{key:\"initVariables\",value:function(t){var e=this.w;this.barCtx.series=t,this.barCtx.totalItems=0,this.barCtx.seriesLen=0,this.barCtx.visibleI=-1,this.barCtx.visibleItems=1;for(var i=0;i<t.length;i++)if(t[i].length>0&&(this.barCtx.seriesLen=this.barCtx.seriesLen+1,this.barCtx.totalItems+=t[i].length),e.globals.isXNumeric)for(var a=0;a<t[i].length;a++)e.globals.seriesX[i][a]>e.globals.minX&&e.globals.seriesX[i][a]<e.globals.maxX&&this.barCtx.visibleItems++;else this.barCtx.visibleItems=e.globals.dataPoints;0===this.barCtx.seriesLen&&(this.barCtx.seriesLen=1),this.barCtx.zeroSerieses=[],e.globals.comboCharts||this.checkZeroSeries({series:t})}},{key:\"initialPositions\",value:function(){var t,e,i,a,s,r,o,n,l=this.w,h=l.globals.dataPoints;this.barCtx.isRangeBar&&(h=l.globals.labels.length);var c=this.barCtx.seriesLen;if(l.config.plotOptions.bar.rangeBarGroupRows&&(c=1),this.barCtx.isHorizontal)s=(i=l.globals.gridHeight/h)/c,l.globals.isXNumeric&&(s=(i=l.globals.gridHeight/this.barCtx.totalItems)/this.barCtx.seriesLen),s=s*parseInt(this.barCtx.barOptions.barHeight,10)/100,-1===String(this.barCtx.barOptions.barHeight).indexOf(\"%\")&&(s=parseInt(this.barCtx.barOptions.barHeight,10)),n=this.barCtx.baseLineInvertedY+l.globals.padHorizontal+(this.barCtx.isReversed?l.globals.gridWidth:0)-(this.barCtx.isReversed?2*this.barCtx.baseLineInvertedY:0),this.barCtx.isFunnel&&(n=l.globals.gridWidth/2),e=(i-s*this.barCtx.seriesLen)/2;else{if(a=l.globals.gridWidth/this.barCtx.visibleItems,l.config.xaxis.convertedCatToNumeric&&(a=l.globals.gridWidth/l.globals.dataPoints),r=a/c*parseInt(this.barCtx.barOptions.columnWidth,10)/100,l.globals.isXNumeric){var d=this.barCtx.xRatio;l.config.xaxis.convertedCatToNumeric&&(d=this.barCtx.initialXRatio),l.globals.minXDiff&&.5!==l.globals.minXDiff&&l.globals.minXDiff/d>0&&(a=l.globals.minXDiff/d),(r=a/c*parseInt(this.barCtx.barOptions.columnWidth,10)/100)<1&&(r=1)}-1===String(this.barCtx.barOptions.columnWidth).indexOf(\"%\")&&(r=parseInt(this.barCtx.barOptions.columnWidth,10)),o=l.globals.gridHeight-this.barCtx.baseLineY[this.barCtx.yaxisIndex]-(this.barCtx.isReversed?l.globals.gridHeight:0)+(this.barCtx.isReversed?2*this.barCtx.baseLineY[this.barCtx.yaxisIndex]:0),t=l.globals.padHorizontal+(a-r*this.barCtx.seriesLen)/2}return{x:t,y:e,yDivision:i,xDivision:a,barHeight:s,barWidth:r,zeroH:o,zeroW:n}}},{key:\"initializeStackedPrevVars\",value:function(t){var e=t.w;e.globals.hasSeriesGroups?e.globals.seriesGroups.forEach((function(e){t[e]||(t[e]={}),t[e].prevY=[],t[e].prevX=[],t[e].prevYF=[],t[e].prevXF=[],t[e].prevYVal=[],t[e].prevXVal=[]})):(t.prevY=[],t.prevX=[],t.prevYF=[],t.prevXF=[],t.prevYVal=[],t.prevXVal=[])}},{key:\"initializeStackedXYVars\",value:function(t){var e=t.w;e.globals.hasSeriesGroups?e.globals.seriesGroups.forEach((function(e){t[e]||(t[e]={}),t[e].xArrj=[],t[e].xArrjF=[],t[e].xArrjVal=[],t[e].yArrj=[],t[e].yArrjF=[],t[e].yArrjVal=[]})):(t.xArrj=[],t.xArrjF=[],t.xArrjVal=[],t.yArrj=[],t.yArrjF=[],t.yArrjVal=[])}},{key:\"getPathFillColor\",value:function(t,e,i,a){var s,r,o,n,l=this.w,h=new R(this.barCtx.ctx),c=null,d=this.barCtx.barOptions.distributed?i:e;this.barCtx.barOptions.colors.ranges.length>0&&this.barCtx.barOptions.colors.ranges.map((function(a){t[e][i]>=a.from&&t[e][i]<=a.to&&(c=a.color)}));return l.config.series[e].data[i]&&l.config.series[e].data[i].fillColor&&(c=l.config.series[e].data[i].fillColor),h.fillPath({seriesNumber:this.barCtx.barOptions.distributed?d:a,dataPointIndex:i,color:c,value:t[e][i],fillConfig:null===(s=l.config.series[e].data[i])||void 0===s?void 0:s.fill,fillType:null!==(r=l.config.series[e].data[i])&&void 0!==r&&null!==(o=r.fill)&&void 0!==o&&o.type?null===(n=l.config.series[e].data[i])||void 0===n?void 0:n.fill.type:l.config.fill.type})}},{key:\"getStrokeWidth\",value:function(t,e,i){var a=0,s=this.w;return this.barCtx.series[t][e]?this.barCtx.isNullValue=!1:this.barCtx.isNullValue=!0,s.config.stroke.show&&(this.barCtx.isNullValue||(a=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[i]:this.barCtx.strokeWidth)),a}},{key:\"shouldApplyRadius\",value:function(t){var e=this.w,i=!1;return e.config.plotOptions.bar.borderRadius>0&&(e.config.chart.stacked&&\"last\"===e.config.plotOptions.bar.borderRadiusWhenStacked?this.barCtx.lastActiveBarSerieIndex===t&&(i=!0):i=!0),i}},{key:\"barBackground\",value:function(t){var e=t.j,i=t.i,a=t.x1,s=t.x2,r=t.y1,o=t.y2,n=t.elSeries,l=this.w,h=new m(this.barCtx.ctx),c=new N(this.barCtx.ctx).getActiveConfigSeriesIndex();if(this.barCtx.barOptions.colors.backgroundBarColors.length>0&&c===i){e>=this.barCtx.barOptions.colors.backgroundBarColors.length&&(e%=this.barCtx.barOptions.colors.backgroundBarColors.length);var d=this.barCtx.barOptions.colors.backgroundBarColors[e],g=h.drawRect(void 0!==a?a:0,void 0!==r?r:0,void 0!==s?s:l.globals.gridWidth,void 0!==o?o:l.globals.gridHeight,this.barCtx.barOptions.colors.backgroundBarRadius,d,this.barCtx.barOptions.colors.backgroundBarOpacity);n.add(g),g.node.classList.add(\"apexcharts-backgroundBar\")}}},{key:\"getColumnPaths\",value:function(t){var e,i=t.barWidth,a=t.barXPosition,s=t.y1,r=t.y2,o=t.strokeWidth,n=t.seriesGroup,l=t.realIndex,h=t.i,c=t.j,d=t.w,g=new m(this.barCtx.ctx);(o=Array.isArray(o)?o[l]:o)||(o=0);var u=i,p=a;null!==(e=d.config.series[l].data[c])&&void 0!==e&&e.columnWidthOffset&&(p=a-d.config.series[l].data[c].columnWidthOffset/2,u=i+d.config.series[l].data[c].columnWidthOffset);var f=p,x=p+u;s+=.001,r+=.001;var b=g.move(f,s),v=g.move(f,s),y=g.line(x-o,s);if(d.globals.previousPaths.length>0&&(v=this.barCtx.getPreviousPath(l,c,!1)),b=b+g.line(f,r)+g.line(x-o,r)+g.line(x-o,s)+(\"around\"===d.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\"),v=v+g.line(f,s)+y+y+y+y+y+g.line(f,s)+(\"around\"===d.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\"),this.shouldApplyRadius(l)&&(b=g.roundPathCorners(b,d.config.plotOptions.bar.borderRadius)),d.config.chart.stacked){var w=this.barCtx;d.globals.hasSeriesGroups&&n&&(w=this.barCtx[n]),w.yArrj.push(r),w.yArrjF.push(Math.abs(s-r)),w.yArrjVal.push(this.barCtx.series[h][c])}return{pathTo:b,pathFrom:v}}},{key:\"getBarpaths\",value:function(t){var e,i=t.barYPosition,a=t.barHeight,s=t.x1,r=t.x2,o=t.strokeWidth,n=t.seriesGroup,l=t.realIndex,h=t.i,c=t.j,d=t.w,g=new m(this.barCtx.ctx);(o=Array.isArray(o)?o[l]:o)||(o=0);var u=i,p=a;null!==(e=d.config.series[l].data[c])&&void 0!==e&&e.barHeightOffset&&(u=i-d.config.series[l].data[c].barHeightOffset/2,p=a+d.config.series[l].data[c].barHeightOffset);var f=u,x=u+p;s+=.001,r+=.001;var b=g.move(s,f),v=g.move(s,f);d.globals.previousPaths.length>0&&(v=this.barCtx.getPreviousPath(l,c,!1));var y=g.line(s,x-o);if(b=b+g.line(r,f)+g.line(r,x-o)+y+(\"around\"===d.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\"),v=v+g.line(s,f)+y+y+y+y+y+g.line(s,f)+(\"around\"===d.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\"),this.shouldApplyRadius(l)&&(b=g.roundPathCorners(b,d.config.plotOptions.bar.borderRadius)),d.config.chart.stacked){var w=this.barCtx;d.globals.hasSeriesGroups&&n&&(w=this.barCtx[n]),w.xArrj.push(r),w.xArrjF.push(Math.abs(s-r)),w.xArrjVal.push(this.barCtx.series[h][c])}return{pathTo:b,pathFrom:v}}},{key:\"checkZeroSeries\",value:function(t){for(var e=t.series,i=this.w,a=0;a<e.length;a++){for(var s=0,r=0;r<e[i.globals.maxValsInArrayIndex].length;r++)s+=e[a][r];0===s&&this.barCtx.zeroSerieses.push(a)}}},{key:\"getXForValue\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2]?e:null;return null!=t&&(i=e+t/this.barCtx.invertedYRatio-2*(this.barCtx.isReversed?t/this.barCtx.invertedYRatio:0)),i}},{key:\"getYForValue\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2]?e:null;return null!=t&&(i=e-t/this.barCtx.yRatio[this.barCtx.yaxisIndex]+2*(this.barCtx.isReversed?t/this.barCtx.yRatio[this.barCtx.yaxisIndex]:0)),i}},{key:\"getGoalValues\",value:function(t,i,a,s,r){var n=this,l=this.w,h=[],c=function(e,s){var r;h.push((o(r={},t,\"x\"===t?n.getXForValue(e,i,!1):n.getYForValue(e,a,!1)),o(r,\"attrs\",s),r))};if(l.globals.seriesGoals[s]&&l.globals.seriesGoals[s][r]&&Array.isArray(l.globals.seriesGoals[s][r])&&l.globals.seriesGoals[s][r].forEach((function(t){c(t.value,t)})),this.barCtx.barOptions.isDumbbell&&l.globals.seriesRange.length){var d=this.barCtx.barOptions.dumbbellColors?this.barCtx.barOptions.dumbbellColors:l.globals.colors,g={strokeHeight:\"x\"===t?0:l.globals.markers.size[s],strokeWidth:\"x\"===t?l.globals.markers.size[s]:0,strokeDashArray:0,strokeLineCap:\"round\",strokeColor:Array.isArray(d[s])?d[s][0]:d[s]};c(l.globals.seriesRangeStart[s][r],g),c(l.globals.seriesRangeEnd[s][r],e(e({},g),{},{strokeColor:Array.isArray(d[s])?d[s][1]:d[s]}))}return h}},{key:\"drawGoalLine\",value:function(t){var e=t.barXPosition,i=t.barYPosition,a=t.goalX,s=t.goalY,r=t.barWidth,o=t.barHeight,n=new m(this.barCtx.ctx),l=n.group({className:\"apexcharts-bar-goals-groups\"});l.node.classList.add(\"apexcharts-element-hidden\"),this.barCtx.w.globals.delayedElements.push({el:l.node}),l.attr(\"clip-path\",\"url(#gridRectMarkerMask\".concat(this.barCtx.w.globals.cuid,\")\"));var h=null;return this.barCtx.isHorizontal?Array.isArray(a)&&a.forEach((function(t){var e=void 0!==t.attrs.strokeHeight?t.attrs.strokeHeight:o/2,a=i+e+o/2;h=n.drawLine(t.x,a-2*e,t.x,a,t.attrs.strokeColor?t.attrs.strokeColor:void 0,t.attrs.strokeDashArray,t.attrs.strokeWidth?t.attrs.strokeWidth:2,t.attrs.strokeLineCap),l.add(h)})):Array.isArray(s)&&s.forEach((function(t){var i=void 0!==t.attrs.strokeWidth?t.attrs.strokeWidth:r/2,a=e+i+r/2;h=n.drawLine(a-2*i,t.y,a,t.y,t.attrs.strokeColor?t.attrs.strokeColor:void 0,t.attrs.strokeDashArray,t.attrs.strokeHeight?t.attrs.strokeHeight:2,t.attrs.strokeLineCap),l.add(h)})),l}},{key:\"drawBarShadow\",value:function(t){var e=t.prevPaths,i=t.currPaths,a=t.color,s=this.w,r=e.x,o=e.x1,n=e.barYPosition,l=i.x,h=i.x1,c=i.barYPosition,d=n+i.barHeight,g=new m(this.barCtx.ctx),u=new x,p=g.move(o,d)+g.line(r,d)+g.line(l,c)+g.line(h,c)+g.line(o,d)+(\"around\"===s.config.plotOptions.bar.borderRadiusApplication?\" Z\":\" z\");return g.drawPath({d:p,fill:u.shadeColor(.5,x.rgb2hex(a)),stroke:\"none\",strokeWidth:0,fillOpacity:1,classes:\"apexcharts-bar-shadows\"})}}]),t}(),yt=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w;var s=this.w;this.barOptions=s.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=s.config.stroke.width,this.isNullValue=!1,this.isRangeBar=s.globals.seriesRange.length&&this.isHorizontal,this.isVerticalGroupedRangeBar=!s.globals.isBarHorizontal&&s.globals.seriesRange.length&&s.config.plotOptions.bar.rangeBarGroupRows,this.isFunnel=this.barOptions.isFunnel,this.xyRatios=i,null!==this.xyRatios&&(this.xRatio=i.xRatio,this.initialXRatio=i.initialXRatio,this.yRatio=i.yRatio,this.invertedXRatio=i.invertedXRatio,this.invertedYRatio=i.invertedYRatio,this.baseLineY=i.baseLineY,this.baseLineInvertedY=i.baseLineInvertedY),this.yaxisIndex=0,this.seriesLen=0,this.pathArr=[];var r=new N(this.ctx);this.lastActiveBarSerieIndex=r.getActiveConfigSeriesIndex(\"desc\",[\"bar\",\"column\"]);var o=r.getBarSeriesIndices(),n=new y(this.ctx);this.stackedSeriesTotals=n.getStackedSeriesTotals(this.w.config.series.map((function(t,e){return-1===o.indexOf(e)?e:-1})).filter((function(t){return-1!==t}))),this.barHelpers=new mt(this)}return r(t,[{key:\"draw\",value:function(t,i){var a=this.w,s=new m(this.ctx),r=new y(this.ctx,a);t=r.getLogSeries(t),this.series=t,this.yRatio=r.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t);var o=s.group({class:\"apexcharts-bar-series apexcharts-plot-series\"});a.config.dataLabels.enabled&&this.totalItems>this.barOptions.dataLabels.maxItems&&console.warn(\"WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.\");for(var n=0,l=0;n<t.length;n++,l++){var h,c,d,g,u=void 0,p=void 0,f=[],b=[],v=a.globals.comboCharts?i[n]:n,w=s.group({class:\"apexcharts-series\",rel:n+1,seriesName:x.escapeString(a.globals.seriesNames[v]),\"data:realIndex\":v});this.ctx.series.addCollapsedClassToSeries(w,v),t[n].length>0&&(this.visibleI=this.visibleI+1);var k=0,A=0;this.yRatio.length>1&&(this.yaxisIndex=v),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed;var S=this.barHelpers.initialPositions();p=S.y,k=S.barHeight,c=S.yDivision,g=S.zeroW,u=S.x,A=S.barWidth,h=S.xDivision,d=S.zeroH,this.horizontal||b.push(u+A/2);var C=s.group({class:\"apexcharts-datalabels\",\"data:realIndex\":v});a.globals.delayedElements.push({el:C.node}),C.node.classList.add(\"apexcharts-element-hidden\");var L=s.group({class:\"apexcharts-bar-goals-markers\",style:\"pointer-events: none\"}),P=s.group({class:\"apexcharts-bar-shadows\",style:\"pointer-events: none\"});a.globals.delayedElements.push({el:P.node}),P.node.classList.add(\"apexcharts-element-hidden\");for(var I=0;I<a.globals.dataPoints;I++){var T=this.barHelpers.getStrokeWidth(n,I,v),M=null,X={indexes:{i:n,j:I,realIndex:v,bc:l},x:u,y:p,strokeWidth:T,elSeries:w};this.isHorizontal?(M=this.drawBarPaths(e(e({},X),{},{barHeight:k,zeroW:g,yDivision:c})),A=this.series[n][I]/this.invertedYRatio):(M=this.drawColumnPaths(e(e({},X),{},{xDivision:h,barWidth:A,zeroH:d})),k=this.series[n][I]/this.yRatio[this.yaxisIndex]);var z=this.barHelpers.getPathFillColor(t,n,I,v);if(this.isFunnel&&this.barOptions.isFunnel3d&&this.pathArr.length&&I>0){var E=this.barHelpers.drawBarShadow({color:\"string\"==typeof z&&-1===(null==z?void 0:z.indexOf(\"url\"))?z:x.hexToRgba(a.globals.colors[n]),prevPaths:this.pathArr[this.pathArr.length-1],currPaths:M});E&&P.add(E)}this.pathArr.push(M);var Y=this.barHelpers.drawGoalLine({barXPosition:M.barXPosition,barYPosition:M.barYPosition,goalX:M.goalX,goalY:M.goalY,barHeight:k,barWidth:A});Y&&L.add(Y),p=M.y,u=M.x,I>0&&b.push(u+A/2),f.push(p),this.renderSeries({realIndex:v,pathFill:z,j:I,i:n,pathFrom:M.pathFrom,pathTo:M.pathTo,strokeWidth:T,elSeries:w,x:u,y:p,series:t,barHeight:M.barHeight?M.barHeight:k,barWidth:M.barWidth?M.barWidth:A,elDataLabelsWrap:C,elGoalsMarkers:L,elBarShadows:P,visibleSeries:this.visibleI,type:\"bar\"})}a.globals.seriesXvalues[v]=b,a.globals.seriesYvalues[v]=f,o.add(w)}return o}},{key:\"renderSeries\",value:function(t){var e=t.realIndex,i=t.pathFill,a=t.lineFill,s=t.j,r=t.i,o=t.groupIndex,n=t.pathFrom,l=t.pathTo,h=t.strokeWidth,c=t.elSeries,d=t.x,g=t.y,u=t.y1,p=t.y2,f=t.series,x=t.barHeight,b=t.barWidth,y=t.barXPosition,w=t.barYPosition,k=t.elDataLabelsWrap,A=t.elGoalsMarkers,S=t.elBarShadows,C=t.visibleSeries,L=t.type,P=this.w,I=new m(this.ctx);a||(a=this.barOptions.distributed?P.globals.stroke.colors[s]:P.globals.stroke.colors[e]),P.config.series[r].data[s]&&P.config.series[r].data[s].strokeColor&&(a=P.config.series[r].data[s].strokeColor),this.isNullValue&&(i=\"none\");var T=s/P.config.chart.animations.animateGradually.delay*(P.config.chart.animations.speed/P.globals.dataPoints)/2.4,M=I.renderPaths({i:r,j:s,realIndex:e,pathFrom:n,pathTo:l,stroke:a,strokeWidth:h,strokeLineCap:P.config.stroke.lineCap,fill:i,animationDelay:T,initialSpeed:P.config.chart.animations.speed,dataChangeSpeed:P.config.chart.animations.dynamicAnimation.speed,className:\"apexcharts-\".concat(L,\"-area\")});M.attr(\"clip-path\",\"url(#gridRectMask\".concat(P.globals.cuid,\")\"));var X=P.config.forecastDataPoints;X.count>0&&s>=P.globals.dataPoints-X.count&&(M.node.setAttribute(\"stroke-dasharray\",X.dashArray),M.node.setAttribute(\"stroke-width\",X.strokeWidth),M.node.setAttribute(\"fill-opacity\",X.fillOpacity)),void 0!==u&&void 0!==p&&(M.attr(\"data-range-y1\",u),M.attr(\"data-range-y2\",p)),new v(this.ctx).setSelectionFilter(M,e,s),c.add(M);var z=new vt(this).handleBarDataLabels({x:d,y:g,y1:u,y2:p,i:r,j:s,series:f,realIndex:e,groupIndex:o,barHeight:x,barWidth:b,barXPosition:y,barYPosition:w,renderedPath:M,visibleSeries:C});return null!==z.dataLabels&&k.add(z.dataLabels),z.totalDataLabels&&k.add(z.totalDataLabels),c.add(k),A&&c.add(A),S&&c.add(S),c}},{key:\"drawBarPaths\",value:function(t){var e,i=t.indexes,a=t.barHeight,s=t.strokeWidth,r=t.zeroW,o=t.x,n=t.y,l=t.yDivision,h=t.elSeries,c=this.w,d=i.i,g=i.j;if(c.globals.isXNumeric)e=(n=(c.globals.seriesX[d][g]-c.globals.minX)/this.invertedXRatio-a)+a*this.visibleI;else if(c.config.plotOptions.bar.hideZeroBarsWhenGrouped){var u=0,p=0;c.globals.seriesPercent.forEach((function(t,e){t[g]&&u++,e<d&&0===t[g]&&p++})),u>0&&(a=this.seriesLen*a/u),e=n+a*this.visibleI,e-=a*p}else e=n+a*this.visibleI;this.isFunnel&&(r-=(this.barHelpers.getXForValue(this.series[d][g],r)-r)/2),o=this.barHelpers.getXForValue(this.series[d][g],r);var f=this.barHelpers.getBarpaths({barYPosition:e,barHeight:a,x1:r,x2:o,strokeWidth:s,series:this.series,realIndex:i.realIndex,i:d,j:g,w:c});return c.globals.isXNumeric||(n+=l),this.barHelpers.barBackground({j:g,i:d,y1:e-a*this.visibleI,y2:a*this.seriesLen,elSeries:h}),{pathTo:f.pathTo,pathFrom:f.pathFrom,x1:r,x:o,y:n,goalX:this.barHelpers.getGoalValues(\"x\",r,null,d,g),barYPosition:e,barHeight:a}}},{key:\"drawColumnPaths\",value:function(t){var e,i=t.indexes,a=t.x,s=t.y,r=t.xDivision,o=t.barWidth,n=t.zeroH,l=t.strokeWidth,h=t.elSeries,c=this.w,d=i.realIndex,g=i.i,u=i.j,p=i.bc;if(c.globals.isXNumeric){var f=d;c.globals.seriesX[d].length||(f=c.globals.maxValsInArrayIndex),c.globals.seriesX[f][u]&&(a=(c.globals.seriesX[f][u]-c.globals.minX)/this.xRatio-o*this.seriesLen/2),e=a+o*this.visibleI}else if(c.config.plotOptions.bar.hideZeroBarsWhenGrouped){var x=0,b=0;c.globals.seriesPercent.forEach((function(t,e){t[u]&&x++,e<g&&0===t[u]&&b++})),x>0&&(o=this.seriesLen*o/x),e=a+o*this.visibleI,e-=o*b}else e=a+o*this.visibleI;s=this.barHelpers.getYForValue(this.series[g][u],n);var v=this.barHelpers.getColumnPaths({barXPosition:e,barWidth:o,y1:n,y2:s,strokeWidth:l,series:this.series,realIndex:i.realIndex,i:g,j:u,w:c});return c.globals.isXNumeric||(a+=r),this.barHelpers.barBackground({bc:p,j:u,i:g,x1:e-l/2-o*this.visibleI,x2:o*this.seriesLen+l/2,elSeries:h}),{pathTo:v.pathTo,pathFrom:v.pathFrom,x:a,y:s,goalY:this.barHelpers.getGoalValues(\"y\",null,n,g,u),barXPosition:e,barWidth:o}}},{key:\"getPreviousPath\",value:function(t,e){for(var i,a=this.w,s=0;s<a.globals.previousPaths.length;s++){var r=a.globals.previousPaths[s];r.paths&&r.paths.length>0&&parseInt(r.realIndex,10)===parseInt(t,10)&&void 0!==a.globals.previousPaths[s].paths[e]&&(i=a.globals.previousPaths[s].paths[e].d)}return i}}]),t}(),wt=function(t){n(s,yt);var i=d(s);function s(){return a(this,s),i.apply(this,arguments)}return r(s,[{key:\"draw\",value:function(t,i){var a=this,s=this.w;this.graphics=new m(this.ctx),this.bar=new yt(this.ctx,this.xyRatios);var r=new y(this.ctx,s);t=r.getLogSeries(t),this.yRatio=r.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t),\"100%\"===s.config.chart.stackType&&(t=s.globals.seriesPercent.slice()),this.series=t,this.barHelpers.initializeStackedPrevVars(this);for(var o=this.graphics.group({class:\"apexcharts-bar-series apexcharts-plot-series\"}),n=0,l=0,h=function(r,h){var c=void 0,d=void 0,g=void 0,u=void 0,p=-1;a.groupCtx=a,s.globals.seriesGroups.forEach((function(t,e){t.indexOf(s.config.series[r].name)>-1&&(p=e)})),-1!==p&&(a.groupCtx=a[s.globals.seriesGroups[p]]);var f=[],b=[],v=s.globals.comboCharts?i[r]:r;a.yRatio.length>1&&(a.yaxisIndex=v),a.isReversed=s.config.yaxis[a.yaxisIndex]&&s.config.yaxis[a.yaxisIndex].reversed;var m=a.graphics.group({class:\"apexcharts-series\",seriesName:x.escapeString(s.globals.seriesNames[v]),rel:r+1,\"data:realIndex\":v});a.ctx.series.addCollapsedClassToSeries(m,v);var y=a.graphics.group({class:\"apexcharts-datalabels\",\"data:realIndex\":v}),w=a.graphics.group({class:\"apexcharts-bar-goals-markers\",style:\"pointer-events: none\"}),k=0,A=0,S=a.initialPositions(n,l,c,d,g,u);l=S.y,k=S.barHeight,d=S.yDivision,u=S.zeroW,n=S.x,A=S.barWidth,c=S.xDivision,g=S.zeroH,a.barHelpers.initializeStackedXYVars(a),1===a.groupCtx.prevY.length&&a.groupCtx.prevY[0].every((function(t){return isNaN(t)}))&&(a.groupCtx.prevY[0]=a.groupCtx.prevY[0].map((function(t){return g})),a.groupCtx.prevYF[0]=a.groupCtx.prevYF[0].map((function(t){return 0})));for(var C=0;C<s.globals.dataPoints;C++){var L=a.barHelpers.getStrokeWidth(r,C,v),P={indexes:{i:r,j:C,realIndex:v,bc:h},strokeWidth:L,x:n,y:l,elSeries:m,groupIndex:p,seriesGroup:s.globals.seriesGroups[p]},I=null;a.isHorizontal?(I=a.drawStackedBarPaths(e(e({},P),{},{zeroW:u,barHeight:k,yDivision:d})),A=a.series[r][C]/a.invertedYRatio):(I=a.drawStackedColumnPaths(e(e({},P),{},{xDivision:c,barWidth:A,zeroH:g})),k=a.series[r][C]/a.yRatio[a.yaxisIndex]);var T=a.barHelpers.drawGoalLine({barXPosition:I.barXPosition,barYPosition:I.barYPosition,goalX:I.goalX,goalY:I.goalY,barHeight:k,barWidth:A});T&&w.add(T),l=I.y,n=I.x,f.push(n),b.push(l);var M=a.barHelpers.getPathFillColor(t,r,C,v);m=a.renderSeries({realIndex:v,pathFill:M,j:C,i:r,groupIndex:p,pathFrom:I.pathFrom,pathTo:I.pathTo,strokeWidth:L,elSeries:m,x:n,y:l,series:t,barHeight:k,barWidth:A,elDataLabelsWrap:y,elGoalsMarkers:w,type:\"bar\",visibleSeries:0})}s.globals.seriesXvalues[v]=f,s.globals.seriesYvalues[v]=b,a.groupCtx.prevY.push(a.groupCtx.yArrj),a.groupCtx.prevYF.push(a.groupCtx.yArrjF),a.groupCtx.prevYVal.push(a.groupCtx.yArrjVal),a.groupCtx.prevX.push(a.groupCtx.xArrj),a.groupCtx.prevXF.push(a.groupCtx.xArrjF),a.groupCtx.prevXVal.push(a.groupCtx.xArrjVal),o.add(m)},c=0,d=0;c<t.length;c++,d++)h(c,d);return o}},{key:\"initialPositions\",value:function(t,e,i,a,s,r){var o,n,l,h,c=this.w;return this.isHorizontal?(l=(l=a=c.globals.gridHeight/c.globals.dataPoints)*parseInt(c.config.plotOptions.bar.barHeight,10)/100,-1===String(c.config.plotOptions.bar.barHeight).indexOf(\"%\")&&(l=parseInt(c.config.plotOptions.bar.barHeight,10)),r=this.baseLineInvertedY+c.globals.padHorizontal+(this.isReversed?c.globals.gridWidth:0)-(this.isReversed?2*this.baseLineInvertedY:0),e=(a-l)/2):(h=i=c.globals.gridWidth/c.globals.dataPoints,h=c.globals.isXNumeric&&c.globals.dataPoints>1?(i=c.globals.minXDiff/this.xRatio)*parseInt(this.barOptions.columnWidth,10)/100:h*parseInt(c.config.plotOptions.bar.columnWidth,10)/100,-1===String(c.config.plotOptions.bar.columnWidth).indexOf(\"%\")&&(h=parseInt(c.config.plotOptions.bar.columnWidth,10)),s=c.globals.gridHeight-this.baseLineY[this.yaxisIndex]-(this.isReversed?c.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),t=c.globals.padHorizontal+(i-h)/2),{x:t,y:e,yDivision:a,xDivision:i,barHeight:null!==(o=c.globals.seriesGroups)&&void 0!==o&&o.length?l/c.globals.seriesGroups.length:l,barWidth:null!==(n=c.globals.seriesGroups)&&void 0!==n&&n.length?h/c.globals.seriesGroups.length:h,zeroH:s,zeroW:r}}},{key:\"drawStackedBarPaths\",value:function(t){for(var e,i=t.indexes,a=t.barHeight,s=t.strokeWidth,r=t.zeroW,o=t.x,n=t.y,l=t.groupIndex,h=t.seriesGroup,c=t.yDivision,d=t.elSeries,g=this.w,u=n+(-1!==l?l*a:0),p=i.i,f=i.j,x=0,b=0;b<this.groupCtx.prevXF.length;b++)x+=this.groupCtx.prevXF[b][f];var v=p;if(h&&(v=h.indexOf(g.config.series[p].name)),v>0){var m=r;this.groupCtx.prevXVal[v-1][f]<0?m=this.series[p][f]>=0?this.groupCtx.prevX[v-1][f]+x-2*(this.isReversed?x:0):this.groupCtx.prevX[v-1][f]:this.groupCtx.prevXVal[v-1][f]>=0&&(m=this.series[p][f]>=0?this.groupCtx.prevX[v-1][f]:this.groupCtx.prevX[v-1][f]-x+2*(this.isReversed?x:0)),e=m}else e=r;o=null===this.series[p][f]?e:e+this.series[p][f]/this.invertedYRatio-2*(this.isReversed?this.series[p][f]/this.invertedYRatio:0);var y=this.barHelpers.getBarpaths({barYPosition:u,barHeight:a,x1:e,x2:o,strokeWidth:s,series:this.series,realIndex:i.realIndex,seriesGroup:h,i:p,j:f,w:g});return this.barHelpers.barBackground({j:f,i:p,y1:u,y2:a,elSeries:d}),n+=c,{pathTo:y.pathTo,pathFrom:y.pathFrom,goalX:this.barHelpers.getGoalValues(\"x\",r,null,p,f),barYPosition:u,x:o,y:n}}},{key:\"drawStackedColumnPaths\",value:function(t){var e=t.indexes,i=t.x,a=t.y,s=t.xDivision,r=t.barWidth,o=t.zeroH,n=t.groupIndex,l=t.seriesGroup,h=t.elSeries,c=this.w,d=e.i,g=e.j,u=e.bc;if(c.globals.isXNumeric){var p=c.globals.seriesX[d][g];p||(p=0),i=(p-c.globals.minX)/this.xRatio-r/2,c.globals.seriesGroups.length&&(i=(p-c.globals.minX)/this.xRatio-r/2*c.globals.seriesGroups.length)}for(var f,x=i+(-1!==n?n*r:0),b=0,v=0;v<this.groupCtx.prevYF.length;v++)b+=isNaN(this.groupCtx.prevYF[v][g])?0:this.groupCtx.prevYF[v][g];var m=d;if(l&&(m=l.indexOf(c.config.series[d].name)),m>0&&!c.globals.isXNumeric||m>0&&c.globals.isXNumeric&&c.globals.seriesX[d-1][g]===c.globals.seriesX[d][g]){var y,w,k,A=Math.min(this.yRatio.length+1,d+1);if(void 0!==this.groupCtx.prevY[m-1]&&this.groupCtx.prevY[m-1].length)for(var S=1;S<A;S++){var C;if(!isNaN(null===(C=this.groupCtx.prevY[m-S])||void 0===C?void 0:C[g])){k=this.groupCtx.prevY[m-S][g];break}}for(var L=1;L<A;L++){var P,I;if((null===(P=this.groupCtx.prevYVal[m-L])||void 0===P?void 0:P[g])<0){w=this.series[d][g]>=0?k-b+2*(this.isReversed?b:0):k;break}if((null===(I=this.groupCtx.prevYVal[m-L])||void 0===I?void 0:I[g])>=0){w=this.series[d][g]>=0?k:k+b-2*(this.isReversed?b:0);break}}void 0===w&&(w=c.globals.gridHeight),f=null!==(y=this.groupCtx.prevYF[0])&&void 0!==y&&y.every((function(t){return 0===t}))&&this.groupCtx.prevYF.slice(1,m).every((function(t){return t.every((function(t){return isNaN(t)}))}))?o:w}else f=o;a=this.series[d][g]?f-this.series[d][g]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[d][g]/this.yRatio[this.yaxisIndex]:0):f;var T=this.barHelpers.getColumnPaths({barXPosition:x,barWidth:r,y1:f,y2:a,yRatio:this.yRatio[this.yaxisIndex],strokeWidth:this.strokeWidth,series:this.series,seriesGroup:l,realIndex:e.realIndex,i:d,j:g,w:c});return this.barHelpers.barBackground({bc:u,j:g,i:d,x1:x,x2:r,elSeries:h}),i+=s,{pathTo:T.pathTo,pathFrom:T.pathFrom,goalY:this.barHelpers.getGoalValues(\"y\",null,o,d,g),barXPosition:x,x:c.globals.isXNumeric?i-s:i,y:a}}}]),s}(),kt=function(t){n(s,yt);var i=d(s);function s(){return a(this,s),i.apply(this,arguments)}return r(s,[{key:\"draw\",value:function(t,i,a){var s=this,r=this.w,o=new m(this.ctx),n=r.globals.comboCharts?i:r.config.chart.type,l=new R(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick,this.boxOptions=this.w.config.plotOptions.boxPlot,this.isHorizontal=r.config.plotOptions.bar.horizontal;var h=new y(this.ctx,r);t=h.getLogSeries(t),this.series=t,this.yRatio=h.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t);for(var c=o.group({class:\"apexcharts-\".concat(n,\"-series apexcharts-plot-series\")}),d=function(i){s.isBoxPlot=\"boxPlot\"===r.config.chart.type||\"boxPlot\"===r.config.series[i].type;var n,h,d,g,u=void 0,p=void 0,f=[],b=[],v=r.globals.comboCharts?a[i]:i,m=o.group({class:\"apexcharts-series\",seriesName:x.escapeString(r.globals.seriesNames[v]),rel:i+1,\"data:realIndex\":v});s.ctx.series.addCollapsedClassToSeries(m,v),t[i].length>0&&(s.visibleI=s.visibleI+1);var y,w;s.yRatio.length>1&&(s.yaxisIndex=v);var k=s.barHelpers.initialPositions();p=k.y,y=k.barHeight,h=k.yDivision,g=k.zeroW,u=k.x,w=k.barWidth,n=k.xDivision,d=k.zeroH,b.push(u+w/2);for(var A=o.group({class:\"apexcharts-datalabels\",\"data:realIndex\":v}),S=function(a){var o=s.barHelpers.getStrokeWidth(i,a,v),c=null,x={indexes:{i:i,j:a,realIndex:v},x:u,y:p,strokeWidth:o,elSeries:m};c=s.isHorizontal?s.drawHorizontalBoxPaths(e(e({},x),{},{yDivision:h,barHeight:y,zeroW:g})):s.drawVerticalBoxPaths(e(e({},x),{},{xDivision:n,barWidth:w,zeroH:d})),p=c.y,u=c.x,a>0&&b.push(u+w/2),f.push(p),c.pathTo.forEach((function(e,n){var h=!s.isBoxPlot&&s.candlestickOptions.wick.useFillColor?c.color[n]:r.globals.stroke.colors[i],d=l.fillPath({seriesNumber:v,dataPointIndex:a,color:c.color[n],value:t[i][a]});s.renderSeries({realIndex:v,pathFill:d,lineFill:h,j:a,i:i,pathFrom:c.pathFrom,pathTo:e,strokeWidth:o,elSeries:m,x:u,y:p,series:t,barHeight:y,barWidth:w,elDataLabelsWrap:A,visibleSeries:s.visibleI,type:r.config.chart.type})}))},C=0;C<r.globals.dataPoints;C++)S(C);r.globals.seriesXvalues[v]=b,r.globals.seriesYvalues[v]=f,c.add(m)},g=0;g<t.length;g++)d(g);return c}},{key:\"drawVerticalBoxPaths\",value:function(t){var e=t.indexes,i=t.x;t.y;var a=t.xDivision,s=t.barWidth,r=t.zeroH,o=t.strokeWidth,n=this.w,l=new m(this.ctx),h=e.i,c=e.j,d=!0,g=n.config.plotOptions.candlestick.colors.upward,u=n.config.plotOptions.candlestick.colors.downward,p=\"\";this.isBoxPlot&&(p=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var f=this.yRatio[this.yaxisIndex],x=e.realIndex,b=this.getOHLCValue(x,c),v=r,y=r;b.o>b.c&&(d=!1);var w=Math.min(b.o,b.c),k=Math.max(b.o,b.c),A=b.m;n.globals.isXNumeric&&(i=(n.globals.seriesX[x][c]-n.globals.minX)/this.xRatio-s/2);var S=i+s*this.visibleI;void 0===this.series[h][c]||null===this.series[h][c]?(w=r,k=r):(w=r-w/f,k=r-k/f,v=r-b.h/f,y=r-b.l/f,A=r-b.m/f);var C=l.move(S,r),L=l.move(S+s/2,w);return n.globals.previousPaths.length>0&&(L=this.getPreviousPath(x,c,!0)),C=this.isBoxPlot?[l.move(S,w)+l.line(S+s/2,w)+l.line(S+s/2,v)+l.line(S+s/4,v)+l.line(S+s-s/4,v)+l.line(S+s/2,v)+l.line(S+s/2,w)+l.line(S+s,w)+l.line(S+s,A)+l.line(S,A)+l.line(S,w+o/2),l.move(S,A)+l.line(S+s,A)+l.line(S+s,k)+l.line(S+s/2,k)+l.line(S+s/2,y)+l.line(S+s-s/4,y)+l.line(S+s/4,y)+l.line(S+s/2,y)+l.line(S+s/2,k)+l.line(S,k)+l.line(S,A)+\"z\"]:[l.move(S,k)+l.line(S+s/2,k)+l.line(S+s/2,v)+l.line(S+s/2,k)+l.line(S+s,k)+l.line(S+s,w)+l.line(S+s/2,w)+l.line(S+s/2,y)+l.line(S+s/2,w)+l.line(S,w)+l.line(S,k-o/2)],L+=l.move(S,w),n.globals.isXNumeric||(i+=a),{pathTo:C,pathFrom:L,x:i,y:k,barXPosition:S,color:this.isBoxPlot?p:d?[g]:[u]}}},{key:\"drawHorizontalBoxPaths\",value:function(t){var e=t.indexes;t.x;var i=t.y,a=t.yDivision,s=t.barHeight,r=t.zeroW,o=t.strokeWidth,n=this.w,l=new m(this.ctx),h=e.i,c=e.j,d=this.boxOptions.colors.lower;this.isBoxPlot&&(d=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var g=this.invertedYRatio,u=e.realIndex,p=this.getOHLCValue(u,c),f=r,x=r,b=Math.min(p.o,p.c),v=Math.max(p.o,p.c),y=p.m;n.globals.isXNumeric&&(i=(n.globals.seriesX[u][c]-n.globals.minX)/this.invertedXRatio-s/2);var w=i+s*this.visibleI;void 0===this.series[h][c]||null===this.series[h][c]?(b=r,v=r):(b=r+b/g,v=r+v/g,f=r+p.h/g,x=r+p.l/g,y=r+p.m/g);var k=l.move(r,w),A=l.move(b,w+s/2);return n.globals.previousPaths.length>0&&(A=this.getPreviousPath(u,c,!0)),k=[l.move(b,w)+l.line(b,w+s/2)+l.line(f,w+s/2)+l.line(f,w+s/2-s/4)+l.line(f,w+s/2+s/4)+l.line(f,w+s/2)+l.line(b,w+s/2)+l.line(b,w+s)+l.line(y,w+s)+l.line(y,w)+l.line(b+o/2,w),l.move(y,w)+l.line(y,w+s)+l.line(v,w+s)+l.line(v,w+s/2)+l.line(x,w+s/2)+l.line(x,w+s-s/4)+l.line(x,w+s/4)+l.line(x,w+s/2)+l.line(v,w+s/2)+l.line(v,w)+l.line(y,w)+\"z\"],A+=l.move(b,w),n.globals.isXNumeric||(i+=a),{pathTo:k,pathFrom:A,x:v,y:i,barYPosition:w,color:d}}},{key:\"getOHLCValue\",value:function(t,e){var i=this.w;return{o:this.isBoxPlot?i.globals.seriesCandleH[t][e]:i.globals.seriesCandleO[t][e],h:this.isBoxPlot?i.globals.seriesCandleO[t][e]:i.globals.seriesCandleH[t][e],m:i.globals.seriesCandleM[t][e],l:this.isBoxPlot?i.globals.seriesCandleC[t][e]:i.globals.seriesCandleL[t][e],c:this.isBoxPlot?i.globals.seriesCandleL[t][e]:i.globals.seriesCandleC[t][e]}}}]),s}(),At=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"checkColorRange\",value:function(){var t=this.w,e=!1,i=t.config.plotOptions[t.config.chart.type];return i.colorScale.ranges.length>0&&i.colorScale.ranges.map((function(t,i){t.from<=0&&(e=!0)})),e}},{key:\"getShadeColor\",value:function(t,e,i,a){var s=this.w,r=1,o=s.config.plotOptions[t].shadeIntensity,n=this.determineColor(t,e,i);s.globals.hasNegs||a?r=s.config.plotOptions[t].reverseNegativeShade?n.percent<0?n.percent/100*(1.25*o):(1-n.percent/100)*(1.25*o):n.percent<=0?1-(1+n.percent/100)*o:(1-n.percent/100)*o:(r=1-n.percent/100,\"treemap\"===t&&(r=(1-n.percent/100)*(1.25*o)));var l=n.color,h=new x;return s.config.plotOptions[t].enableShades&&(l=\"dark\"===this.w.config.theme.mode?x.hexToRgba(h.shadeColor(-1*r,n.color),s.config.fill.opacity):x.hexToRgba(h.shadeColor(r,n.color),s.config.fill.opacity)),{color:l,colorProps:n}}},{key:\"determineColor\",value:function(t,e,i){var a=this.w,s=a.globals.series[e][i],r=a.config.plotOptions[t],o=r.colorScale.inverse?i:e;r.distributed&&\"treemap\"===a.config.chart.type&&(o=i);var n=a.globals.colors[o],l=null,h=Math.min.apply(Math,u(a.globals.series[e])),c=Math.max.apply(Math,u(a.globals.series[e]));r.distributed||\"heatmap\"!==t||(h=a.globals.minY,c=a.globals.maxY),void 0!==r.colorScale.min&&(h=r.colorScale.min<a.globals.minY?r.colorScale.min:a.globals.minY,c=r.colorScale.max>a.globals.maxY?r.colorScale.max:a.globals.maxY);var d=Math.abs(c)+Math.abs(h),g=100*s/(0===d?d-1e-6:d);r.colorScale.ranges.length>0&&r.colorScale.ranges.map((function(t,e){if(s>=t.from&&s<=t.to){n=t.color,l=t.foreColor?t.foreColor:null,h=t.from,c=t.to;var i=Math.abs(c)+Math.abs(h);g=100*s/(0===i?i-1e-6:i)}}));return{color:n,foreColor:l,percent:g}}},{key:\"calculateDataLabels\",value:function(t){var e=t.text,i=t.x,a=t.y,s=t.i,r=t.j,o=t.colorProps,n=t.fontSize,l=this.w.config.dataLabels,h=new m(this.ctx),c=new O(this.ctx),d=null;if(l.enabled){d=h.group({class:\"apexcharts-data-labels\"});var g=l.offsetX,u=l.offsetY,p=i+g,f=a+parseFloat(l.style.fontSize)/3+u;c.plotDataLabelsText({x:p,y:f,text:e,i:s,j:r,color:o.foreColor,parent:d,fontSize:n,dataLabelsConfig:l})}return d}},{key:\"addListeners\",value:function(t){var e=new m(this.ctx);t.node.addEventListener(\"mouseenter\",e.pathMouseEnter.bind(this,t)),t.node.addEventListener(\"mouseleave\",e.pathMouseLeave.bind(this,t)),t.node.addEventListener(\"mousedown\",e.pathMouseDown.bind(this,t))}}]),t}(),St=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w,this.xRatio=i.xRatio,this.yRatio=i.yRatio,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.helpers=new At(e),this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.show?this.w.config.stroke.width:0}return r(t,[{key:\"draw\",value:function(t){var e=this.w,i=new m(this.ctx),a=i.group({class:\"apexcharts-heatmap\"});a.attr(\"clip-path\",\"url(#gridRectMask\".concat(e.globals.cuid,\")\"));var s=e.globals.gridWidth/e.globals.dataPoints,r=e.globals.gridHeight/e.globals.series.length,o=0,n=!1;this.negRange=this.helpers.checkColorRange();var l=t.slice();e.config.yaxis[0].reversed&&(n=!0,l.reverse());for(var h=n?0:l.length-1;n?h<l.length:h>=0;n?h++:h--){var c=i.group({class:\"apexcharts-series apexcharts-heatmap-series\",seriesName:x.escapeString(e.globals.seriesNames[h]),rel:h+1,\"data:realIndex\":h});if(this.ctx.series.addCollapsedClassToSeries(c,h),e.config.chart.dropShadow.enabled){var d=e.config.chart.dropShadow;new v(this.ctx).dropShadow(c,d,h)}for(var g=0,u=e.config.plotOptions.heatmap.shadeIntensity,p=0;p<l[h].length;p++){var f=this.helpers.getShadeColor(e.config.chart.type,h,p,this.negRange),b=f.color,y=f.colorProps;if(\"image\"===e.config.fill.type)b=new R(this.ctx).fillPath({seriesNumber:h,dataPointIndex:p,opacity:e.globals.hasNegs?y.percent<0?1-(1+y.percent/100):u+y.percent/100:y.percent/100,patternID:x.randomId(),width:e.config.fill.image.width?e.config.fill.image.width:s,height:e.config.fill.image.height?e.config.fill.image.height:r});var w=this.rectRadius,k=i.drawRect(g,o,s,r,w);if(k.attr({cx:g,cy:o}),k.node.classList.add(\"apexcharts-heatmap-rect\"),c.add(k),k.attr({fill:b,i:h,index:h,j:p,val:l[h][p],\"stroke-width\":this.strokeWidth,stroke:e.config.plotOptions.heatmap.useFillColorAsStroke?b:e.globals.stroke.colors[0],color:b}),this.helpers.addListeners(k),e.config.chart.animations.enabled&&!e.globals.dataChanged){var A=1;e.globals.resized||(A=e.config.chart.animations.speed),this.animateHeatMap(k,g,o,s,r,A)}if(e.globals.dataChanged){var S=1;if(this.dynamicAnim.enabled&&e.globals.shouldAnimate){S=this.dynamicAnim.speed;var C=e.globals.previousPaths[h]&&e.globals.previousPaths[h][p]&&e.globals.previousPaths[h][p].color;C||(C=\"rgba(255, 255, 255, 0)\"),this.animateHeatColor(k,x.isColorHex(C)?C:x.rgb2hex(C),x.isColorHex(b)?b:x.rgb2hex(b),S)}}var L=(0,e.config.dataLabels.formatter)(e.globals.series[h][p],{value:e.globals.series[h][p],seriesIndex:h,dataPointIndex:p,w:e}),P=this.helpers.calculateDataLabels({text:L,x:g+s/2,y:o+r/2,i:h,j:p,colorProps:y,series:l});null!==P&&c.add(P),g+=s}o+=r,a.add(c)}var I=e.globals.yAxisScale[0].result.slice();e.config.yaxis[0].reversed?I.unshift(\"\"):I.push(\"\"),e.globals.yAxisScale[0].result=I;var T=e.globals.gridHeight/e.globals.series.length;return e.config.yaxis[0].labels.offsetY=-T/2,a}},{key:\"animateHeatMap\",value:function(t,e,i,a,s,r){var o=new b(this.ctx);o.animateRect(t,{x:e+a/2,y:i+s/2,width:0,height:0},{x:e,y:i,width:a,height:s},r,(function(){o.animationCompleted(t)}))}},{key:\"animateHeatColor\",value:function(t,e,i,a){t.attr({fill:e}).animate(a).attr({fill:i})}}]),t}(),Ct=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"drawYAxisTexts\",value:function(t,e,i,a){var s=this.w,r=s.config.yaxis[0],o=s.globals.yLabelFormatters[0];return new m(this.ctx).drawText({x:t+r.labels.offsetX,y:e+r.labels.offsetY,text:o(a,i),textAnchor:\"middle\",fontSize:r.labels.style.fontSize,fontFamily:r.labels.style.fontFamily,foreColor:Array.isArray(r.labels.style.colors)?r.labels.style.colors[i]:r.labels.style.colors})}}]),t}(),Lt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animBeginArr=[0],this.animDur=0,this.donutDataLabels=this.w.config.plotOptions.pie.donut.labels,this.lineColorArr=void 0!==i.globals.stroke.colors?i.globals.stroke.colors:i.globals.colors,this.defaultSize=Math.min(i.globals.gridWidth,i.globals.gridHeight),this.centerY=this.defaultSize/2,this.centerX=i.globals.gridWidth/2,\"radialBar\"===i.config.chart.type?this.fullAngle=360:this.fullAngle=Math.abs(i.config.plotOptions.pie.endAngle-i.config.plotOptions.pie.startAngle),this.initialAngle=i.config.plotOptions.pie.startAngle%this.fullAngle,i.globals.radialSize=this.defaultSize/2.05-i.config.stroke.width-(i.config.chart.sparkline.enabled?0:i.config.chart.dropShadow.blur),this.donutSize=i.globals.radialSize*parseInt(i.config.plotOptions.pie.donut.size,10)/100,this.maxY=0,this.sliceLabels=[],this.sliceSizes=[],this.prevSectorAngleArr=[]}return r(t,[{key:\"draw\",value:function(t){var e=this,i=this.w,a=new m(this.ctx);if(this.ret=a.group({class:\"apexcharts-pie\"}),i.globals.noData)return this.ret;for(var s=0,r=0;r<t.length;r++)s+=x.negToZero(t[r]);var o=[],n=a.group();0===s&&(s=1e-5),t.forEach((function(t){e.maxY=Math.max(e.maxY,t)})),i.config.yaxis[0].max&&(this.maxY=i.config.yaxis[0].max),\"back\"===i.config.grid.position&&\"polarArea\"===this.chartType&&this.drawPolarElements(this.ret);for(var l=0;l<t.length;l++){var h=this.fullAngle*x.negToZero(t[l])/s;o.push(h),\"polarArea\"===this.chartType?(o[l]=this.fullAngle/t.length,this.sliceSizes.push(i.globals.radialSize*t[l]/this.maxY)):this.sliceSizes.push(i.globals.radialSize)}if(i.globals.dataChanged){for(var c,d=0,g=0;g<i.globals.previousPaths.length;g++)d+=x.negToZero(i.globals.previousPaths[g]);for(var u=0;u<i.globals.previousPaths.length;u++)c=this.fullAngle*x.negToZero(i.globals.previousPaths[u])/d,this.prevSectorAngleArr.push(c)}this.donutSize<0&&(this.donutSize=0);var p=i.config.plotOptions.pie.customScale,f=i.globals.gridWidth/2,b=i.globals.gridHeight/2,v=f-i.globals.gridWidth/2*p,y=b-i.globals.gridHeight/2*p;if(\"donut\"===this.chartType){var w=a.drawCircle(this.donutSize);w.attr({cx:this.centerX,cy:this.centerY,fill:i.config.plotOptions.pie.donut.background?i.config.plotOptions.pie.donut.background:\"transparent\"}),n.add(w)}var k=this.drawArcs(o,t);if(this.sliceLabels.forEach((function(t){k.add(t)})),n.attr({transform:\"translate(\".concat(v,\", \").concat(y,\") scale(\").concat(p,\")\")}),n.add(k),this.ret.add(n),this.donutDataLabels.show){var A=this.renderInnerDataLabels(this.donutDataLabels,{hollowSize:this.donutSize,centerX:this.centerX,centerY:this.centerY,opacity:this.donutDataLabels.show,translateX:v,translateY:y});this.ret.add(A)}return\"front\"===i.config.grid.position&&\"polarArea\"===this.chartType&&this.drawPolarElements(this.ret),this.ret}},{key:\"drawArcs\",value:function(t,e){var i=this.w,a=new v(this.ctx),s=new m(this.ctx),r=new R(this.ctx),o=s.group({class:\"apexcharts-slices\"}),n=this.initialAngle,l=this.initialAngle,h=this.initialAngle,c=this.initialAngle;this.strokeWidth=i.config.stroke.show?i.config.stroke.width:0;for(var d=0;d<t.length;d++){var g=s.group({class:\"apexcharts-series apexcharts-pie-series\",seriesName:x.escapeString(i.globals.seriesNames[d]),rel:d+1,\"data:realIndex\":d});o.add(g),l=c,h=(n=h)+t[d],c=l+this.prevSectorAngleArr[d];var u=h<n?this.fullAngle+h-n:h-n,p=r.fillPath({seriesNumber:d,size:this.sliceSizes[d],value:e[d]}),f=this.getChangedPath(l,c),b=s.drawPath({d:f,stroke:Array.isArray(this.lineColorArr)?this.lineColorArr[d]:this.lineColorArr,strokeWidth:0,fill:p,fillOpacity:i.config.fill.opacity,classes:\"apexcharts-pie-area apexcharts-\".concat(this.chartType.toLowerCase(),\"-slice-\").concat(d)});if(b.attr({index:0,j:d}),a.setSelectionFilter(b,0,d),i.config.chart.dropShadow.enabled){var y=i.config.chart.dropShadow;a.dropShadow(b,y,d)}this.addListeners(b,this.donutDataLabels),m.setAttrs(b.node,{\"data:angle\":u,\"data:startAngle\":n,\"data:strokeWidth\":this.strokeWidth,\"data:value\":e[d]});var w={x:0,y:0};\"pie\"===this.chartType||\"polarArea\"===this.chartType?w=x.polarToCartesian(this.centerX,this.centerY,i.globals.radialSize/1.25+i.config.plotOptions.pie.dataLabels.offset,(n+u/2)%this.fullAngle):\"donut\"===this.chartType&&(w=x.polarToCartesian(this.centerX,this.centerY,(i.globals.radialSize+this.donutSize)/2+i.config.plotOptions.pie.dataLabels.offset,(n+u/2)%this.fullAngle)),g.add(b);var k=0;if(!this.initialAnim||i.globals.resized||i.globals.dataChanged?this.animBeginArr.push(0):(0===(k=u/this.fullAngle*i.config.chart.animations.speed)&&(k=1),this.animDur=k+this.animDur,this.animBeginArr.push(this.animDur)),this.dynamicAnim&&i.globals.dataChanged?this.animatePaths(b,{size:this.sliceSizes[d],endAngle:h,startAngle:n,prevStartAngle:l,prevEndAngle:c,animateStartingPos:!0,i:d,animBeginArr:this.animBeginArr,shouldSetPrevPaths:!0,dur:i.config.chart.animations.dynamicAnimation.speed}):this.animatePaths(b,{size:this.sliceSizes[d],endAngle:h,startAngle:n,i:d,totalItems:t.length-1,animBeginArr:this.animBeginArr,dur:k}),i.config.plotOptions.pie.expandOnClick&&\"polarArea\"!==this.chartType&&b.click(this.pieClicked.bind(this,d)),void 0!==i.globals.selectedDataPoints[0]&&i.globals.selectedDataPoints[0].indexOf(d)>-1&&this.pieClicked(d),i.config.dataLabels.enabled){var A=w.x,S=w.y,C=100*u/this.fullAngle+\"%\";if(0!==u&&i.config.plotOptions.pie.dataLabels.minAngleToShowLabel<t[d]){var L=i.config.dataLabels.formatter;void 0!==L&&(C=L(i.globals.seriesPercent[d][0],{seriesIndex:d,w:i}));var P=i.globals.dataLabels.style.colors[d],I=s.group({class:\"apexcharts-datalabels\"}),T=s.drawText({x:A,y:S,text:C,textAnchor:\"middle\",fontSize:i.config.dataLabels.style.fontSize,fontFamily:i.config.dataLabels.style.fontFamily,fontWeight:i.config.dataLabels.style.fontWeight,foreColor:P});if(I.add(T),i.config.dataLabels.dropShadow.enabled){var M=i.config.dataLabels.dropShadow;a.dropShadow(T,M)}T.node.classList.add(\"apexcharts-pie-label\"),i.config.chart.animations.animate&&!1===i.globals.resized&&(T.node.classList.add(\"apexcharts-pie-label-delay\"),T.node.style.animationDelay=i.config.chart.animations.speed/940+\"s\"),this.sliceLabels.push(I)}}}return o}},{key:\"addListeners\",value:function(t,e){var i=new m(this.ctx);t.node.addEventListener(\"mouseenter\",i.pathMouseEnter.bind(this,t)),t.node.addEventListener(\"mouseleave\",i.pathMouseLeave.bind(this,t)),t.node.addEventListener(\"mouseleave\",this.revertDataLabelsInner.bind(this,t.node,e)),t.node.addEventListener(\"mousedown\",i.pathMouseDown.bind(this,t)),this.donutDataLabels.total.showAlways||(t.node.addEventListener(\"mouseenter\",this.printDataLabelsInner.bind(this,t.node,e)),t.node.addEventListener(\"mousedown\",this.printDataLabelsInner.bind(this,t.node,e)))}},{key:\"animatePaths\",value:function(t,e){var i=this.w,a=e.endAngle<e.startAngle?this.fullAngle+e.endAngle-e.startAngle:e.endAngle-e.startAngle,s=a,r=e.startAngle,o=e.startAngle;void 0!==e.prevStartAngle&&void 0!==e.prevEndAngle&&(r=e.prevEndAngle,s=e.prevEndAngle<e.prevStartAngle?this.fullAngle+e.prevEndAngle-e.prevStartAngle:e.prevEndAngle-e.prevStartAngle),e.i===i.config.series.length-1&&(a+o>this.fullAngle?e.endAngle=e.endAngle-(a+o):a+o<this.fullAngle&&(e.endAngle=e.endAngle+(this.fullAngle-(a+o)))),a===this.fullAngle&&(a=this.fullAngle-.01),this.animateArc(t,r,o,a,s,e)}},{key:\"animateArc\",value:function(t,e,i,a,s,r){var o,n=this,l=this.w,h=new b(this.ctx),c=r.size;(isNaN(e)||isNaN(s))&&(e=i,s=a,r.dur=0);var d=a,g=i,u=e<i?this.fullAngle+e-i:e-i;l.globals.dataChanged&&r.shouldSetPrevPaths&&r.prevEndAngle&&(o=n.getPiePath({me:n,startAngle:r.prevStartAngle,angle:r.prevEndAngle<r.prevStartAngle?this.fullAngle+r.prevEndAngle-r.prevStartAngle:r.prevEndAngle-r.prevStartAngle,size:c}),t.attr({d:o})),0!==r.dur?t.animate(r.dur,l.globals.easing,r.animBeginArr[r.i]).afterAll((function(){\"pie\"!==n.chartType&&\"donut\"!==n.chartType&&\"polarArea\"!==n.chartType||this.animate(l.config.chart.animations.dynamicAnimation.speed).attr({\"stroke-width\":n.strokeWidth}),r.i===l.config.series.length-1&&h.animationCompleted(t)})).during((function(l){d=u+(a-u)*l,r.animateStartingPos&&(d=s+(a-s)*l,g=e-s+(i-(e-s))*l),o=n.getPiePath({me:n,startAngle:g,angle:d,size:c}),t.node.setAttribute(\"data:pathOrig\",o),t.attr({d:o})})):(o=n.getPiePath({me:n,startAngle:g,angle:a,size:c}),r.isTrack||(l.globals.animationEnded=!0),t.node.setAttribute(\"data:pathOrig\",o),t.attr({d:o,\"stroke-width\":n.strokeWidth}))}},{key:\"pieClicked\",value:function(t){var e,i=this.w,a=this,s=a.sliceSizes[t]+(i.config.plotOptions.pie.expandOnClick?4:0),r=i.globals.dom.Paper.select(\".apexcharts-\".concat(a.chartType.toLowerCase(),\"-slice-\").concat(t)).members[0];if(\"true\"!==r.attr(\"data:pieClicked\")){var o=i.globals.dom.baseEl.getElementsByClassName(\"apexcharts-pie-area\");Array.prototype.forEach.call(o,(function(t){t.setAttribute(\"data:pieClicked\",\"false\");var e=t.getAttribute(\"data:pathOrig\");e&&t.setAttribute(\"d\",e)})),r.attr(\"data:pieClicked\",\"true\");var n=parseInt(r.attr(\"data:startAngle\"),10),l=parseInt(r.attr(\"data:angle\"),10);e=a.getPiePath({me:a,startAngle:n,angle:l,size:s}),360!==l&&r.plot(e)}else{r.attr({\"data:pieClicked\":\"false\"}),this.revertDataLabelsInner(r.node,this.donutDataLabels);var h=r.attr(\"data:pathOrig\");r.attr({d:h})}}},{key:\"getChangedPath\",value:function(t,e){var i=\"\";return this.dynamicAnim&&this.w.globals.dataChanged&&(i=this.getPiePath({me:this,startAngle:t,angle:e-t,size:this.size})),i}},{key:\"getPiePath\",value:function(t){var e=t.me,i=t.startAngle,a=t.angle,s=t.size,r=i,o=Math.PI*(r-90)/180,n=a+i;Math.ceil(n)>=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle&&(n=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle-.01),Math.ceil(n)>this.fullAngle&&(n-=this.fullAngle);var l=Math.PI*(n-90)/180,h=e.centerX+s*Math.cos(o),c=e.centerY+s*Math.sin(o),d=e.centerX+s*Math.cos(l),g=e.centerY+s*Math.sin(l),u=x.polarToCartesian(e.centerX,e.centerY,e.donutSize,n),p=x.polarToCartesian(e.centerX,e.centerY,e.donutSize,r),f=a>180?1:0,b=[\"M\",h,c,\"A\",s,s,0,f,1,d,g];return\"donut\"===e.chartType?[].concat(b,[\"L\",u.x,u.y,\"A\",e.donutSize,e.donutSize,0,f,0,p.x,p.y,\"L\",h,c,\"z\"]).join(\" \"):\"pie\"===e.chartType||\"polarArea\"===e.chartType?[].concat(b,[\"L\",e.centerX,e.centerY,\"L\",h,c]).join(\" \"):[].concat(b).join(\" \")}},{key:\"drawPolarElements\",value:function(t){var e=this.w,i=new _(this.ctx),a=new m(this.ctx),s=new Ct(this.ctx),r=a.group(),o=a.group(),n=i.niceScale(0,Math.ceil(this.maxY),e.config.yaxis[0].tickAmount,0,!0),l=n.result.reverse(),h=n.result.length;this.maxY=n.niceMax;for(var c=e.globals.radialSize,d=c/(h-1),g=0;g<h-1;g++){var u=a.drawCircle(c);if(u.attr({cx:this.centerX,cy:this.centerY,fill:\"none\",\"stroke-width\":e.config.plotOptions.polarArea.rings.strokeWidth,stroke:e.config.plotOptions.polarArea.rings.strokeColor}),e.config.yaxis[0].show){var p=s.drawYAxisTexts(this.centerX,this.centerY-c+parseInt(e.config.yaxis[0].labels.style.fontSize,10)/2,g,l[g]);o.add(p)}r.add(u),c-=d}this.drawSpokes(t),t.add(r),t.add(o)}},{key:\"renderInnerDataLabels\",value:function(t,e){var i=this.w,a=new m(this.ctx),s=a.group({class:\"apexcharts-datalabels-group\",transform:\"translate(\".concat(e.translateX?e.translateX:0,\", \").concat(e.translateY?e.translateY:0,\") scale(\").concat(i.config.plotOptions.pie.customScale,\")\")}),r=t.total.show;s.node.style.opacity=e.opacity;var o,n,l=e.centerX,h=e.centerY;o=void 0===t.name.color?i.globals.colors[0]:t.name.color;var c=t.name.fontSize,d=t.name.fontFamily,g=t.name.fontWeight;n=void 0===t.value.color?i.config.chart.foreColor:t.value.color;var u=t.value.formatter,p=\"\",f=\"\";if(r?(o=t.total.color,c=t.total.fontSize,d=t.total.fontFamily,g=t.total.fontWeight,f=t.total.label,p=t.total.formatter(i)):1===i.globals.series.length&&(p=u(i.globals.series[0],i),f=i.globals.seriesNames[0]),f&&(f=t.name.formatter(f,t.total.show,i)),t.name.show){var x=a.drawText({x:l,y:h+parseFloat(t.name.offsetY),text:f,textAnchor:\"middle\",foreColor:o,fontSize:c,fontWeight:g,fontFamily:d});x.node.classList.add(\"apexcharts-datalabel-label\"),s.add(x)}if(t.value.show){var b=t.name.show?parseFloat(t.value.offsetY)+16:t.value.offsetY,v=a.drawText({x:l,y:h+b,text:p,textAnchor:\"middle\",foreColor:n,fontWeight:t.value.fontWeight,fontSize:t.value.fontSize,fontFamily:t.value.fontFamily});v.node.classList.add(\"apexcharts-datalabel-value\"),s.add(v)}return s}},{key:\"printInnerLabels\",value:function(t,e,i,a){var s,r=this.w;a?s=void 0===t.name.color?r.globals.colors[parseInt(a.parentNode.getAttribute(\"rel\"),10)-1]:t.name.color:r.globals.series.length>1&&t.total.show&&(s=t.total.color);var o=r.globals.dom.baseEl.querySelector(\".apexcharts-datalabel-label\"),n=r.globals.dom.baseEl.querySelector(\".apexcharts-datalabel-value\");i=(0,t.value.formatter)(i,r),a||\"function\"!=typeof t.total.formatter||(i=t.total.formatter(r));var l=e===t.total.label;e=t.name.formatter(e,l,r),null!==o&&(o.textContent=e),null!==n&&(n.textContent=i),null!==o&&(o.style.fill=s)}},{key:\"printDataLabelsInner\",value:function(t,e){var i=this.w,a=t.getAttribute(\"data:value\"),s=i.globals.seriesNames[parseInt(t.parentNode.getAttribute(\"rel\"),10)-1];i.globals.series.length>1&&this.printInnerLabels(e,s,a,t);var r=i.globals.dom.baseEl.querySelector(\".apexcharts-datalabels-group\");null!==r&&(r.style.opacity=1)}},{key:\"drawSpokes\",value:function(t){var e=this,i=this.w,a=new m(this.ctx),s=i.config.plotOptions.polarArea.spokes;if(0!==s.strokeWidth){for(var r=[],o=360/i.globals.series.length,n=0;n<i.globals.series.length;n++)r.push(x.polarToCartesian(this.centerX,this.centerY,i.globals.radialSize,i.config.plotOptions.pie.startAngle+o*n));r.forEach((function(i,r){var o=a.drawLine(i.x,i.y,e.centerX,e.centerY,Array.isArray(s.connectorColors)?s.connectorColors[r]:s.connectorColors);t.add(o)}))}}},{key:\"revertDataLabelsInner\",value:function(t,e,i){var a=this,s=this.w,r=s.globals.dom.baseEl.querySelector(\".apexcharts-datalabels-group\"),o=!1,n=s.globals.dom.baseEl.getElementsByClassName(\"apexcharts-pie-area\"),l=function(t){var i=t.makeSliceOut,s=t.printLabel;Array.prototype.forEach.call(n,(function(t){\"true\"===t.getAttribute(\"data:pieClicked\")&&(i&&(o=!0),s&&a.printDataLabelsInner(t,e))}))};if(l({makeSliceOut:!0,printLabel:!1}),e.total.show&&s.globals.series.length>1)o&&!e.total.showAlways?l({makeSliceOut:!1,printLabel:!0}):this.printInnerLabels(e,e.total.label,e.total.formatter(s));else if(l({makeSliceOut:!1,printLabel:!0}),!o)if(s.globals.selectedDataPoints.length&&s.globals.series.length>1)if(s.globals.selectedDataPoints[0].length>0){var h=s.globals.selectedDataPoints[0],c=s.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(this.chartType.toLowerCase(),\"-slice-\").concat(h));this.printDataLabelsInner(c,e)}else r&&s.globals.selectedDataPoints.length&&0===s.globals.selectedDataPoints[0].length&&(r.style.opacity=0);else r&&s.globals.series.length>1&&(r.style.opacity=0)}}]),t}(),Pt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animDur=0;var i=this.w;this.graphics=new m(this.ctx),this.lineColorArr=void 0!==i.globals.stroke.colors?i.globals.stroke.colors:i.globals.colors,this.defaultSize=i.globals.svgHeight<i.globals.svgWidth?i.globals.gridHeight+1.5*i.globals.goldenPadding:i.globals.gridWidth,this.isLog=i.config.yaxis[0].logarithmic,this.coreUtils=new y(this.ctx),this.maxValue=this.isLog?this.coreUtils.getLogVal(i.globals.maxY,0):i.globals.maxY,this.minValue=this.isLog?this.coreUtils.getLogVal(this.w.globals.minY,0):i.globals.minY,this.polygons=i.config.plotOptions.radar.polygons,this.strokeWidth=i.config.stroke.show?i.config.stroke.width:0,this.size=this.defaultSize/2.1-this.strokeWidth-i.config.chart.dropShadow.blur,i.config.xaxis.labels.show&&(this.size=this.size-i.globals.xAxisLabelsWidth/1.75),void 0!==i.config.plotOptions.radar.size&&(this.size=i.config.plotOptions.radar.size),this.dataRadiusOfPercent=[],this.dataRadius=[],this.angleArr=[],this.yaxisLabelsTextsPos=[]}return r(t,[{key:\"draw\",value:function(t){var i=this,a=this.w,s=new R(this.ctx),r=[],o=new O(this.ctx);t.length&&(this.dataPointsLen=t[a.globals.maxValsInArrayIndex].length),this.disAngle=2*Math.PI/this.dataPointsLen;var n=a.globals.gridWidth/2,l=a.globals.gridHeight/2,h=n+a.config.plotOptions.radar.offsetX,c=l+a.config.plotOptions.radar.offsetY,d=this.graphics.group({class:\"apexcharts-radar-series apexcharts-plot-series\",transform:\"translate(\".concat(h||0,\", \").concat(c||0,\")\")}),g=[],u=null,p=null;if(this.yaxisLabels=this.graphics.group({class:\"apexcharts-yaxis\"}),t.forEach((function(t,n){var l=t.length===a.globals.dataPoints,h=i.graphics.group().attr({class:\"apexcharts-series\",\"data:longestSeries\":l,seriesName:x.escapeString(a.globals.seriesNames[n]),rel:n+1,\"data:realIndex\":n});i.dataRadiusOfPercent[n]=[],i.dataRadius[n]=[],i.angleArr[n]=[],t.forEach((function(t,e){var a=Math.abs(i.maxValue-i.minValue);t+=Math.abs(i.minValue),i.isLog&&(t=i.coreUtils.getLogVal(t,0)),i.dataRadiusOfPercent[n][e]=t/a,i.dataRadius[n][e]=i.dataRadiusOfPercent[n][e]*i.size,i.angleArr[n][e]=e*i.disAngle})),g=i.getDataPointsPos(i.dataRadius[n],i.angleArr[n]);var c=i.createPaths(g,{x:0,y:0});u=i.graphics.group({class:\"apexcharts-series-markers-wrap apexcharts-element-hidden\"}),p=i.graphics.group({class:\"apexcharts-datalabels\",\"data:realIndex\":n}),a.globals.delayedElements.push({el:u.node,index:n});var d={i:n,realIndex:n,animationDelay:n,initialSpeed:a.config.chart.animations.speed,dataChangeSpeed:a.config.chart.animations.dynamicAnimation.speed,className:\"apexcharts-radar\",shouldClipToGrid:!1,bindEventsOnPaths:!1,stroke:a.globals.stroke.colors[n],strokeLineCap:a.config.stroke.lineCap},f=null;a.globals.previousPaths.length>0&&(f=i.getPreviousPath(n));for(var b=0;b<c.linePathsTo.length;b++){var m=i.graphics.renderPaths(e(e({},d),{},{pathFrom:null===f?c.linePathsFrom[b]:f,pathTo:c.linePathsTo[b],strokeWidth:Array.isArray(i.strokeWidth)?i.strokeWidth[n]:i.strokeWidth,fill:\"none\",drawShadow:!1}));h.add(m);var y=s.fillPath({seriesNumber:n}),w=i.graphics.renderPaths(e(e({},d),{},{pathFrom:null===f?c.areaPathsFrom[b]:f,pathTo:c.areaPathsTo[b],strokeWidth:0,fill:y,drawShadow:!1}));if(a.config.chart.dropShadow.enabled){var k=new v(i.ctx),A=a.config.chart.dropShadow;k.dropShadow(w,Object.assign({},A,{noUserSpaceOnUse:!0}),n)}h.add(w)}t.forEach((function(t,s){var r=new H(i.ctx).getMarkerConfig({cssClass:\"apexcharts-marker\",seriesIndex:n,dataPointIndex:s}),l=i.graphics.drawMarker(g[s].x,g[s].y,r);l.attr(\"rel\",s),l.attr(\"j\",s),l.attr(\"index\",n),l.node.setAttribute(\"default-marker-size\",r.pSize);var c=i.graphics.group({class:\"apexcharts-series-markers\"});c&&c.add(l),u.add(c),h.add(u);var d=a.config.dataLabels;if(d.enabled){var f=d.formatter(a.globals.series[n][s],{seriesIndex:n,dataPointIndex:s,w:a});o.plotDataLabelsText({x:g[s].x,y:g[s].y,text:f,textAnchor:\"middle\",i:n,j:n,parent:p,offsetCorrection:!1,dataLabelsConfig:e({},d)})}h.add(p)})),r.push(h)})),this.drawPolygons({parent:d}),a.config.xaxis.labels.show){var f=this.drawXAxisTexts();d.add(f)}return r.forEach((function(t){d.add(t)})),d.add(this.yaxisLabels),d}},{key:\"drawPolygons\",value:function(t){for(var e=this,i=this.w,a=t.parent,s=new Ct(this.ctx),r=i.globals.yAxisScale[0].result.reverse(),o=r.length,n=[],l=this.size/(o-1),h=0;h<o;h++)n[h]=l*h;n.reverse();var c=[],d=[];n.forEach((function(t,i){var a=x.getPolygonPos(t,e.dataPointsLen),s=\"\";a.forEach((function(t,a){if(0===i){var r=e.graphics.drawLine(t.x,t.y,0,0,Array.isArray(e.polygons.connectorColors)?e.polygons.connectorColors[a]:e.polygons.connectorColors);d.push(r)}0===a&&e.yaxisLabelsTextsPos.push({x:t.x,y:t.y}),s+=t.x+\",\"+t.y+\" \"})),c.push(s)})),c.forEach((function(t,s){var r=e.polygons.strokeColors,o=e.polygons.strokeWidth,n=e.graphics.drawPolygon(t,Array.isArray(r)?r[s]:r,Array.isArray(o)?o[s]:o,i.globals.radarPolygons.fill.colors[s]);a.add(n)})),d.forEach((function(t){a.add(t)})),i.config.yaxis[0].show&&this.yaxisLabelsTextsPos.forEach((function(t,i){var a=s.drawYAxisTexts(t.x,t.y,i,r[i]);e.yaxisLabels.add(a)}))}},{key:\"drawXAxisTexts\",value:function(){var t=this,i=this.w,a=i.config.xaxis.labels,s=this.graphics.group({class:\"apexcharts-xaxis\"}),r=x.getPolygonPos(this.size,this.dataPointsLen);return i.globals.labels.forEach((function(o,n){var l=i.config.xaxis.labels.formatter,h=new O(t.ctx);if(r[n]){var c=t.getTextPos(r[n],t.size),d=l(o,{seriesIndex:-1,dataPointIndex:n,w:i});h.plotDataLabelsText({x:c.newX,y:c.newY,text:d,textAnchor:c.textAnchor,i:n,j:n,parent:s,color:Array.isArray(a.style.colors)&&a.style.colors[n]?a.style.colors[n]:\"#a8a8a8\",dataLabelsConfig:e({textAnchor:c.textAnchor,dropShadow:{enabled:!1}},a),offsetCorrection:!1})}})),s}},{key:\"createPaths\",value:function(t,e){var i=this,a=[],s=[],r=[],o=[];if(t.length){s=[this.graphics.move(e.x,e.y)],o=[this.graphics.move(e.x,e.y)];var n=this.graphics.move(t[0].x,t[0].y),l=this.graphics.move(t[0].x,t[0].y);t.forEach((function(e,a){n+=i.graphics.line(e.x,e.y),l+=i.graphics.line(e.x,e.y),a===t.length-1&&(n+=\"Z\",l+=\"Z\")})),a.push(n),r.push(l)}return{linePathsFrom:s,linePathsTo:a,areaPathsFrom:o,areaPathsTo:r}}},{key:\"getTextPos\",value:function(t,e){var i=\"middle\",a=t.x,s=t.y;return Math.abs(t.x)>=10?t.x>0?(i=\"start\",a+=10):t.x<0&&(i=\"end\",a-=10):i=\"middle\",Math.abs(t.y)>=e-10&&(t.y<0?s-=10:t.y>0&&(s+=10)),{textAnchor:i,newX:a,newY:s}}},{key:\"getPreviousPath\",value:function(t){for(var e=this.w,i=null,a=0;a<e.globals.previousPaths.length;a++){var s=e.globals.previousPaths[a];s.paths.length>0&&parseInt(s.realIndex,10)===parseInt(t,10)&&void 0!==e.globals.previousPaths[a].paths[0]&&(i=e.globals.previousPaths[a].paths[0].d)}return i}},{key:\"getDataPointsPos\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.dataPointsLen;t=t||[],e=e||[];for(var a=[],s=0;s<i;s++){var r={};r.x=t[s]*Math.sin(e[s]),r.y=-t[s]*Math.cos(e[s]),a.push(r)}return a}}]),t}(),It=function(t){n(i,Lt);var e=d(i);function i(t){var s;a(this,i),(s=e.call(this,t)).ctx=t,s.w=t.w,s.animBeginArr=[0],s.animDur=0;var r=s.w;return s.startAngle=r.config.plotOptions.radialBar.startAngle,s.endAngle=r.config.plotOptions.radialBar.endAngle,s.totalAngle=Math.abs(r.config.plotOptions.radialBar.endAngle-r.config.plotOptions.radialBar.startAngle),s.trackStartAngle=r.config.plotOptions.radialBar.track.startAngle,s.trackEndAngle=r.config.plotOptions.radialBar.track.endAngle,s.donutDataLabels=s.w.config.plotOptions.radialBar.dataLabels,s.radialDataLabels=s.donutDataLabels,s.trackStartAngle||(s.trackStartAngle=s.startAngle),s.trackEndAngle||(s.trackEndAngle=s.endAngle),360===s.endAngle&&(s.endAngle=359.99),s.margin=parseInt(r.config.plotOptions.radialBar.track.margin,10),s}return r(i,[{key:\"draw\",value:function(t){var e=this.w,i=new m(this.ctx),a=i.group({class:\"apexcharts-radialbar\"});if(e.globals.noData)return a;var s=i.group(),r=this.defaultSize/2,o=e.globals.gridWidth/2,n=this.defaultSize/2.05;e.config.chart.sparkline.enabled||(n=n-e.config.stroke.width-e.config.chart.dropShadow.blur);var l=e.globals.fill.colors;if(e.config.plotOptions.radialBar.track.show){var h=this.drawTracks({size:n,centerX:o,centerY:r,colorArr:l,series:t});s.add(h)}var c=this.drawArcs({size:n,centerX:o,centerY:r,colorArr:l,series:t}),d=360;e.config.plotOptions.radialBar.startAngle<0&&(d=this.totalAngle);var g=(360-d)/360;if(e.globals.radialSize=n-n*g,this.radialDataLabels.value.show){var u=Math.max(this.radialDataLabels.value.offsetY,this.radialDataLabels.name.offsetY);e.globals.radialSize+=u*g}return s.add(c.g),\"front\"===e.config.plotOptions.radialBar.hollow.position&&(c.g.add(c.elHollow),c.dataLabels&&c.g.add(c.dataLabels)),a.add(s),a}},{key:\"drawTracks\",value:function(t){var e=this.w,i=new m(this.ctx),a=i.group({class:\"apexcharts-tracks\"}),s=new v(this.ctx),r=new R(this.ctx),o=this.getStrokeWidth(t);t.size=t.size-o/2;for(var n=0;n<t.series.length;n++){var l=i.group({class:\"apexcharts-radialbar-track apexcharts-track\"});a.add(l),l.attr({rel:n+1}),t.size=t.size-o-this.margin;var h=e.config.plotOptions.radialBar.track,c=r.fillPath({seriesNumber:0,size:t.size,fillColors:Array.isArray(h.background)?h.background[n]:h.background,solid:!0}),d=this.trackStartAngle,g=this.trackEndAngle;Math.abs(g)+Math.abs(d)>=360&&(g=360-Math.abs(this.startAngle)-.1);var u=i.drawPath({d:\"\",stroke:c,strokeWidth:o*parseInt(h.strokeWidth,10)/100,fill:\"none\",strokeOpacity:h.opacity,classes:\"apexcharts-radialbar-area\"});if(h.dropShadow.enabled){var p=h.dropShadow;s.dropShadow(u,p)}l.add(u),u.attr(\"id\",\"apexcharts-radialbarTrack-\"+n),this.animatePaths(u,{centerX:t.centerX,centerY:t.centerY,endAngle:g,startAngle:d,size:t.size,i:n,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:e.globals.easing})}return a}},{key:\"drawArcs\",value:function(t){var e=this.w,i=new m(this.ctx),a=new R(this.ctx),s=new v(this.ctx),r=i.group(),o=this.getStrokeWidth(t);t.size=t.size-o/2;var n=e.config.plotOptions.radialBar.hollow.background,l=t.size-o*t.series.length-this.margin*t.series.length-o*parseInt(e.config.plotOptions.radialBar.track.strokeWidth,10)/100/2,h=l-e.config.plotOptions.radialBar.hollow.margin;void 0!==e.config.plotOptions.radialBar.hollow.image&&(n=this.drawHollowImage(t,r,l,n));var c=this.drawHollow({size:h,centerX:t.centerX,centerY:t.centerY,fill:n||\"transparent\"});if(e.config.plotOptions.radialBar.hollow.dropShadow.enabled){var d=e.config.plotOptions.radialBar.hollow.dropShadow;s.dropShadow(c,d)}var g=1;!this.radialDataLabels.total.show&&e.globals.series.length>1&&(g=0);var u=null;this.radialDataLabels.show&&(u=this.renderInnerDataLabels(this.radialDataLabels,{hollowSize:l,centerX:t.centerX,centerY:t.centerY,opacity:g})),\"back\"===e.config.plotOptions.radialBar.hollow.position&&(r.add(c),u&&r.add(u));var p=!1;e.config.plotOptions.radialBar.inverseOrder&&(p=!0);for(var f=p?t.series.length-1:0;p?f>=0:f<t.series.length;p?f--:f++){var b=i.group({class:\"apexcharts-series apexcharts-radial-series\",seriesName:x.escapeString(e.globals.seriesNames[f])});r.add(b),b.attr({rel:f+1,\"data:realIndex\":f}),this.ctx.series.addCollapsedClassToSeries(b,f),t.size=t.size-o-this.margin;var y=a.fillPath({seriesNumber:f,size:t.size,value:t.series[f]}),w=this.startAngle,k=void 0,A=x.negToZero(t.series[f]>100?100:t.series[f])/100,S=Math.round(this.totalAngle*A)+this.startAngle,C=void 0;e.globals.dataChanged&&(k=this.startAngle,C=Math.round(this.totalAngle*x.negToZero(e.globals.previousPaths[f])/100)+k),Math.abs(S)+Math.abs(w)>=360&&(S-=.01),Math.abs(C)+Math.abs(k)>=360&&(C-=.01);var L=S-w,P=Array.isArray(e.config.stroke.dashArray)?e.config.stroke.dashArray[f]:e.config.stroke.dashArray,I=i.drawPath({d:\"\",stroke:y,strokeWidth:o,fill:\"none\",fillOpacity:e.config.fill.opacity,classes:\"apexcharts-radialbar-area apexcharts-radialbar-slice-\"+f,strokeDashArray:P});if(m.setAttrs(I.node,{\"data:angle\":L,\"data:value\":t.series[f]}),e.config.chart.dropShadow.enabled){var T=e.config.chart.dropShadow;s.dropShadow(I,T,f)}s.setSelectionFilter(I,0,f),this.addListeners(I,this.radialDataLabels),b.add(I),I.attr({index:0,j:f});var M=0;!this.initialAnim||e.globals.resized||e.globals.dataChanged||(M=e.config.chart.animations.speed),e.globals.dataChanged&&(M=e.config.chart.animations.dynamicAnimation.speed),this.animDur=M/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur),this.animatePaths(I,{centerX:t.centerX,centerY:t.centerY,endAngle:S,startAngle:w,prevEndAngle:C,prevStartAngle:k,size:t.size,i:f,totalItems:2,animBeginArr:this.animBeginArr,dur:M,shouldSetPrevPaths:!0,easing:e.globals.easing})}return{g:r,elHollow:c,dataLabels:u}}},{key:\"drawHollow\",value:function(t){var e=new m(this.ctx).drawCircle(2*t.size);return e.attr({class:\"apexcharts-radialbar-hollow\",cx:t.centerX,cy:t.centerY,r:t.size,fill:t.fill}),e}},{key:\"drawHollowImage\",value:function(t,e,i,a){var s=this.w,r=new R(this.ctx),o=x.randomId(),n=s.config.plotOptions.radialBar.hollow.image;if(s.config.plotOptions.radialBar.hollow.imageClipped)r.clippedImgArea({width:i,height:i,image:n,patternID:\"pattern\".concat(s.globals.cuid).concat(o)}),a=\"url(#pattern\".concat(s.globals.cuid).concat(o,\")\");else{var l=s.config.plotOptions.radialBar.hollow.imageWidth,h=s.config.plotOptions.radialBar.hollow.imageHeight;if(void 0===l&&void 0===h){var c=s.globals.dom.Paper.image(n).loaded((function(e){this.move(t.centerX-e.width/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-e.height/2+s.config.plotOptions.radialBar.hollow.imageOffsetY)}));e.add(c)}else{var d=s.globals.dom.Paper.image(n).loaded((function(e){this.move(t.centerX-l/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-h/2+s.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(l,h)}));e.add(d)}}return a}},{key:\"getStrokeWidth\",value:function(t){var e=this.w;return t.size*(100-parseInt(e.config.plotOptions.radialBar.hollow.size,10))/100/(t.series.length+1)-this.margin}}]),i}(),Tt=function(t){n(s,yt);var i=d(s);function s(){return a(this,s),i.apply(this,arguments)}return r(s,[{key:\"draw\",value:function(t,i){var a=this.w,s=new m(this.ctx);this.rangeBarOptions=this.w.config.plotOptions.rangeBar,this.series=t,this.seriesRangeStart=a.globals.seriesRangeStart,this.seriesRangeEnd=a.globals.seriesRangeEnd,this.barHelpers.initVariables(t);for(var r=s.group({class:\"apexcharts-rangebar-series apexcharts-plot-series\"}),n=0;n<t.length;n++){var l,h,c,d,g=void 0,u=void 0,p=a.globals.comboCharts?i[n]:n,f=s.group({class:\"apexcharts-series\",seriesName:x.escapeString(a.globals.seriesNames[p]),rel:n+1,\"data:realIndex\":p});this.ctx.series.addCollapsedClassToSeries(f,p),t[n].length>0&&(this.visibleI=this.visibleI+1);var b=0,v=0;this.yRatio.length>1&&(this.yaxisIndex=p);var y=this.barHelpers.initialPositions();u=y.y,d=y.zeroW,g=y.x,v=y.barWidth,b=y.barHeight,l=y.xDivision,h=y.yDivision,c=y.zeroH;for(var w=s.group({class:\"apexcharts-datalabels\",\"data:realIndex\":p}),k=s.group({class:\"apexcharts-rangebar-goals-markers\",style:\"pointer-events: none\"}),A=0;A<a.globals.dataPoints;A++){var S,C=this.barHelpers.getStrokeWidth(n,A,p),L=this.seriesRangeStart[n][A],P=this.seriesRangeEnd[n][A],I=null,T=null,M=null,X={x:g,y:u,strokeWidth:C,elSeries:f},z=this.seriesLen;if(a.config.plotOptions.bar.rangeBarGroupRows&&(z=1),void 0===a.config.series[n].data[A])break;if(this.isHorizontal){M=u+b*this.visibleI;var E=(h-b*z)/2;if(a.config.series[n].data[A].x){var Y=this.detectOverlappingBars({i:n,j:A,barYPosition:M,srty:E,barHeight:b,yDivision:h,initPositions:y});b=Y.barHeight,M=Y.barYPosition}v=(I=this.drawRangeBarPaths(e({indexes:{i:n,j:A,realIndex:p},barHeight:b,barYPosition:M,zeroW:d,yDivision:h,y1:L,y2:P},X))).barWidth}else{a.globals.isXNumeric&&(g=(a.globals.seriesX[n][A]-a.globals.minX)/this.xRatio-v/2),T=g+v*this.visibleI;var F=(l-v*z)/2;if(a.config.series[n].data[A].x){var R=this.detectOverlappingBars({i:n,j:A,barXPosition:T,srtx:F,barWidth:v,xDivision:l,initPositions:y});v=R.barWidth,T=R.barXPosition}b=(I=this.drawRangeColumnPaths(e({indexes:{i:n,j:A,realIndex:p},barWidth:v,barXPosition:T,zeroH:c,xDivision:l},X))).barHeight}var H=this.barHelpers.drawGoalLine({barXPosition:I.barXPosition,barYPosition:M,goalX:I.goalX,goalY:I.goalY,barHeight:b,barWidth:v});H&&k.add(H),u=I.y,g=I.x;var D=this.barHelpers.getPathFillColor(t,n,A,p),O=a.globals.stroke.colors[p];this.renderSeries((o(S={realIndex:p,pathFill:D,lineFill:O,j:A,i:n,x:g,y:u,y1:L,y2:P,pathFrom:I.pathFrom,pathTo:I.pathTo,strokeWidth:C,elSeries:f,series:t,barHeight:b,barWidth:v,barXPosition:T,barYPosition:M},\"barWidth\",v),o(S,\"elDataLabelsWrap\",w),o(S,\"elGoalsMarkers\",k),o(S,\"visibleSeries\",this.visibleI),o(S,\"type\",\"rangebar\"),S))}r.add(f)}return r}},{key:\"detectOverlappingBars\",value:function(t){var e=t.i,i=t.j,a=t.barYPosition,s=t.barXPosition,r=t.srty,o=t.srtx,n=t.barHeight,l=t.barWidth,h=t.yDivision,c=t.xDivision,d=t.initPositions,g=this.w,u=[],p=g.config.series[e].data[i].rangeName,f=g.config.series[e].data[i].x,x=Array.isArray(f)?f.join(\" \"):f,b=g.globals.labels.map((function(t){return Array.isArray(t)?t.join(\" \"):t})).indexOf(x),v=g.globals.seriesRange[e].findIndex((function(t){return t.x===x&&t.overlaps.length>0}));return this.isHorizontal?(a=g.config.plotOptions.bar.rangeBarGroupRows?r+h*b:r+n*this.visibleI+h*b,v>-1&&!g.config.plotOptions.bar.rangeBarOverlap&&(u=g.globals.seriesRange[e][v].overlaps).indexOf(p)>-1&&(a=(n=d.barHeight/u.length)*this.visibleI+h*(100-parseInt(this.barOptions.barHeight,10))/100/2+n*(this.visibleI+u.indexOf(p))+h*b)):(b>-1&&(s=g.config.plotOptions.bar.rangeBarGroupRows?o+c*b:o+l*this.visibleI+c*b),v>-1&&!g.config.plotOptions.bar.rangeBarOverlap&&(u=g.globals.seriesRange[e][v].overlaps).indexOf(p)>-1&&(s=(l=d.barWidth/u.length)*this.visibleI+c*(100-parseInt(this.barOptions.barWidth,10))/100/2+l*(this.visibleI+u.indexOf(p))+c*b)),{barYPosition:a,barXPosition:s,barHeight:n,barWidth:l}}},{key:\"drawRangeColumnPaths\",value:function(t){var e=t.indexes,i=t.x,a=t.xDivision,s=t.barWidth,r=t.barXPosition,o=t.zeroH,n=this.w,l=e.i,h=e.j,c=this.yRatio[this.yaxisIndex],d=e.realIndex,g=this.getRangeValue(d,h),u=Math.min(g.start,g.end),p=Math.max(g.start,g.end);void 0===this.series[l][h]||null===this.series[l][h]?u=o:(u=o-u/c,p=o-p/c);var f=Math.abs(p-u),x=this.barHelpers.getColumnPaths({barXPosition:r,barWidth:s,y1:u,y2:p,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,realIndex:e.realIndex,i:d,j:h,w:n});return n.globals.isXNumeric||(i+=a),{pathTo:x.pathTo,pathFrom:x.pathFrom,barHeight:f,x:i,y:p,goalY:this.barHelpers.getGoalValues(\"y\",null,o,l,h),barXPosition:r}}},{key:\"drawRangeBarPaths\",value:function(t){var e=t.indexes,i=t.y,a=t.y1,s=t.y2,r=t.yDivision,o=t.barHeight,n=t.barYPosition,l=t.zeroW,h=this.w,c=l+a/this.invertedYRatio,d=l+s/this.invertedYRatio,g=Math.abs(d-c),u=this.barHelpers.getBarpaths({barYPosition:n,barHeight:o,x1:c,x2:d,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,i:e.realIndex,realIndex:e.realIndex,j:e.j,w:h});return h.globals.isXNumeric||(i+=r),{pathTo:u.pathTo,pathFrom:u.pathFrom,barWidth:g,x:d,goalX:this.barHelpers.getGoalValues(\"x\",l,null,e.realIndex,e.j),y:i}}},{key:\"getRangeValue\",value:function(t,e){var i=this.w;return{start:i.globals.seriesRangeStart[t][e],end:i.globals.seriesRangeEnd[t][e]}}}]),s}(),Mt=function(){function t(e){a(this,t),this.w=e.w,this.lineCtx=e}return r(t,[{key:\"sameValueSeriesFix\",value:function(t,e){var i=this.w;if((\"gradient\"===i.config.fill.type||\"gradient\"===i.config.fill.type[t])&&new y(this.lineCtx.ctx,i).seriesHaveSameValues(t)){var a=e[t].slice();a[a.length-1]=a[a.length-1]+1e-6,e[t]=a}return e}},{key:\"calculatePoints\",value:function(t){var e=t.series,i=t.realIndex,a=t.x,s=t.y,r=t.i,o=t.j,n=t.prevY,l=this.w,h=[],c=[];if(0===o){var d=this.lineCtx.categoryAxisCorrection+l.config.markers.offsetX;l.globals.isXNumeric&&(d=(l.globals.seriesX[i][0]-l.globals.minX)/this.lineCtx.xRatio+l.config.markers.offsetX),h.push(d),c.push(x.isNumber(e[r][0])?n+l.config.markers.offsetY:null),h.push(a+l.config.markers.offsetX),c.push(x.isNumber(e[r][o+1])?s+l.config.markers.offsetY:null)}else h.push(a+l.config.markers.offsetX),c.push(x.isNumber(e[r][o+1])?s+l.config.markers.offsetY:null);return{x:h,y:c}}},{key:\"checkPreviousPaths\",value:function(t){for(var e=t.pathFromLine,i=t.pathFromArea,a=t.realIndex,s=this.w,r=0;r<s.globals.previousPaths.length;r++){var o=s.globals.previousPaths[r];(\"line\"===o.type||\"area\"===o.type)&&o.paths.length>0&&parseInt(o.realIndex,10)===parseInt(a,10)&&(\"line\"===o.type?(this.lineCtx.appendPathFrom=!1,e=s.globals.previousPaths[r].paths[0].d):\"area\"===o.type&&(this.lineCtx.appendPathFrom=!1,i=s.globals.previousPaths[r].paths[0].d,s.config.stroke.show&&s.globals.previousPaths[r].paths[1]&&(e=s.globals.previousPaths[r].paths[1].d)))}return{pathFromLine:e,pathFromArea:i}}},{key:\"determineFirstPrevY\",value:function(t){var e,i=t.i,a=t.series,s=t.prevY,r=t.lineYPosition,o=this.w;if(void 0!==(null===(e=a[i])||void 0===e?void 0:e[0]))s=(r=o.config.chart.stacked&&i>0?this.lineCtx.prevSeriesY[i-1][0]:this.lineCtx.zeroY)-a[i][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]+2*(this.lineCtx.isReversed?a[i][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]:0);else if(o.config.chart.stacked&&i>0&&void 0===a[i][0])for(var n=i-1;n>=0;n--)if(null!==a[n][0]&&void 0!==a[n][0]){s=r=this.lineCtx.prevSeriesY[n][0];break}return{prevY:s,lineYPosition:r}}}]),t}(),Xt=function(){function t(e,i,s){a(this,t),this.ctx=e,this.w=e.w,this.xyRatios=i,this.pointsChart=!(\"bubble\"!==this.w.config.chart.type&&\"scatter\"!==this.w.config.chart.type)||s,this.scatter=new D(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.lineHelpers=new Mt(this),this.markers=new H(this.ctx),this.prevSeriesY=[],this.categoryAxisCorrection=0,this.yaxisIndex=0}return r(t,[{key:\"draw\",value:function(t,i,a,s){var r=this.w,o=new m(this.ctx),n=r.globals.comboCharts?i:r.config.chart.type,l=o.group({class:\"apexcharts-\".concat(n,\"-series apexcharts-plot-series\")}),h=new y(this.ctx,r);this.yRatio=this.xyRatios.yRatio,this.zRatio=this.xyRatios.zRatio,this.xRatio=this.xyRatios.xRatio,this.baseLineY=this.xyRatios.baseLineY,t=h.getLogSeries(t),this.yRatio=h.getLogYRatios(this.yRatio);for(var c=[],d=0;d<t.length;d++){t=this.lineHelpers.sameValueSeriesFix(d,t);var g=r.globals.comboCharts?a[d]:d;this._initSerieVariables(t,d,g);var u=[],p=[],f=r.globals.padHorizontal+this.categoryAxisCorrection;this.ctx.series.addCollapsedClassToSeries(this.elSeries,g),r.globals.isXNumeric&&r.globals.seriesX.length>0&&(f=(r.globals.seriesX[g][0]-r.globals.minX)/this.xRatio),p.push(f);var x,b=f,v=void 0,w=b,k=this.zeroY,A=this.zeroY;k=this.lineHelpers.determineFirstPrevY({i:d,series:t,prevY:k,lineYPosition:0}).prevY,u.push(k),x=k;\"rangeArea\"===n&&(v=A=this.lineHelpers.determineFirstPrevY({i:d,series:s,prevY:A,lineYPosition:0}).prevY);var S={type:n,series:t,realIndex:g,i:d,x:f,y:1,pX:b,pY:x,pathsFrom:this._calculatePathsFrom({type:n,series:t,i:d,realIndex:g,prevX:w,prevY:k,prevY2:A}),linePaths:[],areaPaths:[],seriesIndex:a,lineYPosition:0,xArrj:p,yArrj:u,seriesRangeEnd:s},C=this._iterateOverDataPoints(e(e({},S),{},{iterations:\"rangeArea\"===n?t[d].length-1:void 0,isRangeStart:!0}));if(\"rangeArea\"===n){var L=this._calculatePathsFrom({series:s,i:d,realIndex:g,prevX:w,prevY:A}),P=this._iterateOverDataPoints(e(e({},S),{},{series:s,pY:v,pathsFrom:L,iterations:s[d].length-1,isRangeStart:!1}));C.linePaths[0]=P.linePath+C.linePath,C.pathFromLine=P.pathFromLine+C.pathFromLine}this._handlePaths({type:n,realIndex:g,i:d,paths:C}),this.elSeries.add(this.elPointsMain),this.elSeries.add(this.elDataLabelsWrap),c.push(this.elSeries)}if(r.config.chart.stacked)for(var I=c.length;I>0;I--)l.add(c[I-1]);else for(var T=0;T<c.length;T++)l.add(c[T]);return l}},{key:\"_initSerieVariables\",value:function(t,e,i){var a=this.w,s=new m(this.ctx);this.xDivision=a.globals.gridWidth/(a.globals.dataPoints-(\"on\"===a.config.xaxis.tickPlacement?1:0)),this.strokeWidth=Array.isArray(a.config.stroke.width)?a.config.stroke.width[i]:a.config.stroke.width,this.yRatio.length>1&&(this.yaxisIndex=i),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed,this.zeroY=a.globals.gridHeight-this.baseLineY[this.yaxisIndex]-(this.isReversed?a.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),this.areaBottomY=this.zeroY,(this.zeroY>a.globals.gridHeight||\"end\"===a.config.plotOptions.area.fillTo)&&(this.areaBottomY=a.globals.gridHeight),this.categoryAxisCorrection=this.xDivision/2,this.elSeries=s.group({class:\"apexcharts-series\",seriesName:x.escapeString(a.globals.seriesNames[i])}),this.elPointsMain=s.group({class:\"apexcharts-series-markers-wrap\",\"data:realIndex\":i}),this.elDataLabelsWrap=s.group({class:\"apexcharts-datalabels\",\"data:realIndex\":i});var r=t[e].length===a.globals.dataPoints;this.elSeries.attr({\"data:longestSeries\":r,rel:e+1,\"data:realIndex\":i}),this.appendPathFrom=!0}},{key:\"_calculatePathsFrom\",value:function(t){var e,i,a,s,r=t.type,o=t.series,n=t.i,l=t.realIndex,h=t.prevX,c=t.prevY,d=t.prevY2,g=this.w,u=new m(this.ctx);if(null===o[n][0]){for(var p=0;p<o[n].length;p++)if(null!==o[n][p]){h=this.xDivision*p,c=this.zeroY-o[n][p]/this.yRatio[this.yaxisIndex],e=u.move(h,c),i=u.move(h,this.areaBottomY);break}}else e=u.move(h,c),\"rangeArea\"===r&&(e=u.move(h,d)+u.line(h,c)),i=u.move(h,this.areaBottomY)+u.line(h,c);if(a=u.move(-1,this.zeroY)+u.line(-1,this.zeroY),s=u.move(-1,this.zeroY)+u.line(-1,this.zeroY),g.globals.previousPaths.length>0){var f=this.lineHelpers.checkPreviousPaths({pathFromLine:a,pathFromArea:s,realIndex:l});a=f.pathFromLine,s=f.pathFromArea}return{prevX:h,prevY:c,linePath:e,areaPath:i,pathFromLine:a,pathFromArea:s}}},{key:\"_handlePaths\",value:function(t){var i=t.type,a=t.realIndex,s=t.i,r=t.paths,o=this.w,n=new m(this.ctx),l=new R(this.ctx);this.prevSeriesY.push(r.yArrj),o.globals.seriesXvalues[a]=r.xArrj,o.globals.seriesYvalues[a]=r.yArrj;var h=o.config.forecastDataPoints;if(h.count>0&&\"rangeArea\"!==i){var c=o.globals.seriesXvalues[a][o.globals.seriesXvalues[a].length-h.count-1],d=n.drawRect(c,0,o.globals.gridWidth,o.globals.gridHeight,0);o.globals.dom.elForecastMask.appendChild(d.node);var g=n.drawRect(0,0,c,o.globals.gridHeight,0);o.globals.dom.elNonForecastMask.appendChild(g.node)}this.pointsChart||o.globals.delayedElements.push({el:this.elPointsMain.node,index:a});var u={i:s,realIndex:a,animationDelay:s,initialSpeed:o.config.chart.animations.speed,dataChangeSpeed:o.config.chart.animations.dynamicAnimation.speed,className:\"apexcharts-\".concat(i)};if(\"area\"===i)for(var p=l.fillPath({seriesNumber:a}),f=0;f<r.areaPaths.length;f++){var x=n.renderPaths(e(e({},u),{},{pathFrom:r.pathFromArea,pathTo:r.areaPaths[f],stroke:\"none\",strokeWidth:0,strokeLineCap:null,fill:p}));this.elSeries.add(x)}if(o.config.stroke.show&&!this.pointsChart){var b=null;if(\"line\"===i)b=l.fillPath({seriesNumber:a,i:s});else if(\"solid\"===o.config.stroke.fill.type)b=o.globals.stroke.colors[a];else{var v=o.config.fill;o.config.fill=o.config.stroke.fill,b=l.fillPath({seriesNumber:a,i:s}),o.config.fill=v}for(var y=0;y<r.linePaths.length;y++){var w=b;\"rangeArea\"===i&&(w=l.fillPath({seriesNumber:a}));var k=e(e({},u),{},{pathFrom:r.pathFromLine,pathTo:r.linePaths[y],stroke:b,strokeWidth:this.strokeWidth,strokeLineCap:o.config.stroke.lineCap,fill:\"rangeArea\"===i?w:\"none\"}),A=n.renderPaths(k);if(this.elSeries.add(A),A.attr(\"fill-rule\",\"evenodd\"),h.count>0&&\"rangeArea\"!==i){var S=n.renderPaths(k);S.node.setAttribute(\"stroke-dasharray\",h.dashArray),h.strokeWidth&&S.node.setAttribute(\"stroke-width\",h.strokeWidth),this.elSeries.add(S),S.attr(\"clip-path\",\"url(#forecastMask\".concat(o.globals.cuid,\")\")),A.attr(\"clip-path\",\"url(#nonForecastMask\".concat(o.globals.cuid,\")\"))}}}}},{key:\"_iterateOverDataPoints\",value:function(t){var e=t.type,i=t.series,a=t.iterations,s=t.realIndex,r=t.i,o=t.x,n=t.y,l=t.pX,h=t.pY,c=t.pathsFrom,d=t.linePaths,g=t.areaPaths,u=t.seriesIndex,p=t.lineYPosition,f=t.xArrj,b=t.yArrj,v=t.isRangeStart,y=t.seriesRangeEnd,w=this.w,k=new m(this.ctx),A=this.yRatio,S=c.prevY,C=c.linePath,L=c.areaPath,P=c.pathFromLine,I=c.pathFromArea,T=x.isNumber(w.globals.minYArr[s])?w.globals.minYArr[s]:w.globals.minY;a||(a=w.globals.dataPoints>1?w.globals.dataPoints-1:w.globals.dataPoints);for(var M=n,X=0;X<a;X++){var z=void 0===i[r][X+1]||null===i[r][X+1];if(w.globals.isXNumeric){var E=w.globals.seriesX[s][X+1];void 0===w.globals.seriesX[s][X+1]&&(E=w.globals.seriesX[s][a-1]),o=(E-w.globals.minX)/this.xRatio}else o+=this.xDivision;if(w.config.chart.stacked)if(r>0&&w.globals.collapsedSeries.length<w.config.series.length-1){p=this.prevSeriesY[function(t){for(var e=t,i=0;i<w.globals.series.length;i++)if(w.globals.collapsedSeriesIndices.indexOf(t)>-1){e--;break}return e>=0?e:0}(r-1)][X+1]}else p=this.zeroY;else p=this.zeroY;z?n=p-T/A[this.yaxisIndex]+2*(this.isReversed?T/A[this.yaxisIndex]:0):(n=p-i[r][X+1]/A[this.yaxisIndex]+2*(this.isReversed?i[r][X+1]/A[this.yaxisIndex]:0),\"rangeArea\"===e&&(M=p-y[r][X+1]/A[this.yaxisIndex]+2*(this.isReversed?y[r][X+1]/A[this.yaxisIndex]:0))),f.push(o),b.push(n);var Y=this.lineHelpers.calculatePoints({series:i,x:o,y:n,realIndex:s,i:r,j:X,prevY:S}),F=this._createPaths({type:e,series:i,i:r,realIndex:s,j:X,x:o,y:n,y2:M,pX:l,pY:h,linePath:C,areaPath:L,linePaths:d,areaPaths:g,seriesIndex:u,isRangeStart:v});g=F.areaPaths,d=F.linePaths,l=F.pX,h=F.pY,L=F.areaPath,C=F.linePath,this.appendPathFrom&&(P+=k.line(o,this.zeroY),I+=k.line(o,this.zeroY)),this.handleNullDataPoints(i,Y,r,X,s),this._handleMarkersAndLabels({type:e,pointsPos:Y,i:r,j:X,realIndex:s,isRangeStart:v})}return{yArrj:b,xArrj:f,pathFromArea:I,areaPaths:g,pathFromLine:P,linePaths:d,linePath:C,areaPath:L}}},{key:\"_handleMarkersAndLabels\",value:function(t){var e=t.type,i=t.pointsPos,a=t.isRangeStart,s=t.i,r=t.j,o=t.realIndex,n=this.w,l=new O(this.ctx);if(this.pointsChart)this.scatter.draw(this.elSeries,r,{realIndex:o,pointsPos:i,zRatio:this.zRatio,elParent:this.elPointsMain});else{n.globals.series[s].length>1&&this.elPointsMain.node.classList.add(\"apexcharts-element-hidden\");var h=this.markers.plotChartMarkers(i,o,r+1);null!==h&&this.elPointsMain.add(h)}var c=l.drawDataLabel({type:e,isRangeStart:a,pos:i,i:o,j:r+1});null!==c&&this.elDataLabelsWrap.add(c)}},{key:\"_createPaths\",value:function(t){var e=t.type,i=t.series,a=t.i,s=t.realIndex,r=t.j,o=t.x,n=t.y,l=t.y2,h=t.pX,c=t.pY,d=t.linePath,g=t.areaPath,u=t.linePaths,p=t.areaPaths,f=t.seriesIndex,x=t.isRangeStart,b=this.w,v=new m(this.ctx),y=b.config.stroke.curve,w=this.areaBottomY;if(Array.isArray(b.config.stroke.curve)&&(y=Array.isArray(f)?b.config.stroke.curve[f[a]]:b.config.stroke.curve[a]),\"smooth\"===y){var k=.35*(o-h);b.globals.hasNullValues?(null!==i[a][r]&&(null!==i[a][r+1]?(d=v.move(h,c)+v.curve(h+k,c,o-k,n,o+1,n),g=v.move(h+1,c)+v.curve(h+k,c,o-k,n,o+1,n)+v.line(o,w)+v.line(h,w)+\"z\"):(d=v.move(h,c),g=v.move(h,c)+\"z\")),u.push(d),p.push(g)):(d+=v.curve(h+k,c,o-k,n,o,n),g+=v.curve(h+k,c,o-k,n,o,n)),h=o,c=n,r===i[a].length-2&&(g=g+v.curve(h,c,o,n,o,w)+v.move(o,n)+\"z\",\"rangeArea\"===e&&x?d=d+v.curve(h,c,o,n,o,l)+v.move(o,l)+\"z\":b.globals.hasNullValues||(u.push(d),p.push(g)))}else{if(null===i[a][r+1]){d+=v.move(o,n);var A=b.globals.isXNumeric?(b.globals.seriesX[s][r]-b.globals.minX)/this.xRatio:o-this.xDivision;g=g+v.line(A,w)+v.move(o,n)+\"z\"}null===i[a][r]&&(d+=v.move(o,n),g+=v.move(o,w)),\"stepline\"===y?(d=d+v.line(o,null,\"H\")+v.line(null,n,\"V\"),g=g+v.line(o,null,\"H\")+v.line(null,n,\"V\")):\"straight\"===y&&(d+=v.line(o,n),g+=v.line(o,n)),r===i[a].length-2&&(g=g+v.line(o,w)+v.move(o,n)+\"z\",\"rangeArea\"===e&&x?d=d+v.line(o,l)+v.move(o,l)+\"z\":(u.push(d),p.push(g)))}return{linePaths:u,areaPaths:p,pX:h,pY:c,linePath:d,areaPath:g}}},{key:\"handleNullDataPoints\",value:function(t,e,i,a,s){var r=this.w;if(null===t[i][a]&&r.config.markers.showNullDataPoints||1===t[i].length){var o=this.markers.plotChartMarkers(e,s,a+1,this.strokeWidth-r.config.markers.strokeWidth/2,!0);null!==o&&this.elPointsMain.add(o)}}}]),t}();window.TreemapSquared={},window.TreemapSquared.generate=function(){function t(e,i,a,s){this.xoffset=e,this.yoffset=i,this.height=s,this.width=a,this.shortestEdge=function(){return Math.min(this.height,this.width)},this.getCoordinates=function(t){var e,i=[],a=this.xoffset,s=this.yoffset,o=r(t)/this.height,n=r(t)/this.width;if(this.width>=this.height)for(e=0;e<t.length;e++)i.push([a,s,a+o,s+t[e]/o]),s+=t[e]/o;else for(e=0;e<t.length;e++)i.push([a,s,a+t[e]/n,s+n]),a+=t[e]/n;return i},this.cutArea=function(e){var i;if(this.width>=this.height){var a=e/this.height,s=this.width-a;i=new t(this.xoffset+a,this.yoffset,s,this.height)}else{var r=e/this.width,o=this.height-r;i=new t(this.xoffset,this.yoffset+r,this.width,o)}return i}}function e(e,a,s,o,n){o=void 0===o?0:o,n=void 0===n?0:n;var l=i(function(t,e){var i,a=[],s=e/r(t);for(i=0;i<t.length;i++)a[i]=t[i]*s;return a}(e,a*s),[],new t(o,n,a,s),[]);return function(t){var e,i,a=[];for(e=0;e<t.length;e++)for(i=0;i<t[e].length;i++)a.push(t[e][i]);return a}(l)}function i(t,e,s,o){var n,l,h;if(0!==t.length)return n=s.shortestEdge(),function(t,e,i){var s;if(0===t.length)return!0;(s=t.slice()).push(e);var r=a(t,i),o=a(s,i);return r>=o}(e,l=t[0],n)?(e.push(l),i(t.slice(1),e,s,o)):(h=s.cutArea(r(e),o),o.push(s.getCoordinates(e)),i(t,[],h,o)),o;o.push(s.getCoordinates(e))}function a(t,e){var i=Math.min.apply(Math,t),a=Math.max.apply(Math,t),s=r(t);return Math.max(Math.pow(e,2)*a/Math.pow(s,2),Math.pow(s,2)/(Math.pow(e,2)*i))}function s(t){return t&&t.constructor===Array}function r(t){var e,i=0;for(e=0;e<t.length;e++)i+=t[e];return i}function o(t){var e,i=0;if(s(t[0]))for(e=0;e<t.length;e++)i+=o(t[e]);else i=r(t);return i}return function t(i,a,r,n,l){n=void 0===n?0:n,l=void 0===l?0:l;var h,c,d=[],g=[];if(s(i[0])){for(c=0;c<i.length;c++)d[c]=o(i[c]);for(h=e(d,a,r,n,l),c=0;c<i.length;c++)g.push(t(i[c],h[c][2]-h[c][0],h[c][3]-h[c][1],h[c][0],h[c][1]))}else g=e(i,a,r,n,l);return g}}();var zt,Et,Yt=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w,this.strokeWidth=this.w.config.stroke.width,this.helpers=new At(e),this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.labels=[]}return r(t,[{key:\"draw\",value:function(t){var e=this,i=this.w,a=new m(this.ctx),s=new R(this.ctx),r=a.group({class:\"apexcharts-treemap\"});if(i.globals.noData)return r;var o=[];return t.forEach((function(t){var e=t.map((function(t){return Math.abs(t)}));o.push(e)})),this.negRange=this.helpers.checkColorRange(),i.config.series.forEach((function(t,i){t.data.forEach((function(t){Array.isArray(e.labels[i])||(e.labels[i]=[]),e.labels[i].push(t.x)}))})),window.TreemapSquared.generate(o,i.globals.gridWidth,i.globals.gridHeight).forEach((function(o,n){var l=a.group({class:\"apexcharts-series apexcharts-treemap-series\",seriesName:x.escapeString(i.globals.seriesNames[n]),rel:n+1,\"data:realIndex\":n});if(i.config.chart.dropShadow.enabled){var h=i.config.chart.dropShadow;new v(e.ctx).dropShadow(r,h,n)}var c=a.group({class:\"apexcharts-data-labels\"});o.forEach((function(r,o){var h=r[0],c=r[1],d=r[2],g=r[3],u=a.drawRect(h,c,d-h,g-c,0,\"#fff\",1,e.strokeWidth,i.config.plotOptions.treemap.useFillColorAsStroke?f:i.globals.stroke.colors[n]);u.attr({cx:h,cy:c,index:n,i:n,j:o,width:d-h,height:g-c});var p=e.helpers.getShadeColor(i.config.chart.type,n,o,e.negRange),f=p.color;void 0!==i.config.series[n].data[o]&&i.config.series[n].data[o].fillColor&&(f=i.config.series[n].data[o].fillColor);var x=s.fillPath({color:f,seriesNumber:n,dataPointIndex:o});u.node.classList.add(\"apexcharts-treemap-rect\"),u.attr({fill:x}),e.helpers.addListeners(u);var b={x:h+(d-h)/2,y:c+(g-c)/2,width:0,height:0},v={x:h,y:c,width:d-h,height:g-c};if(i.config.chart.animations.enabled&&!i.globals.dataChanged){var m=1;i.globals.resized||(m=i.config.chart.animations.speed),e.animateTreemap(u,b,v,m)}if(i.globals.dataChanged){var y=1;e.dynamicAnim.enabled&&i.globals.shouldAnimate&&(y=e.dynamicAnim.speed,i.globals.previousPaths[n]&&i.globals.previousPaths[n][o]&&i.globals.previousPaths[n][o].rect&&(b=i.globals.previousPaths[n][o].rect),e.animateTreemap(u,b,v,y))}var w=e.getFontSize(r),k=i.config.dataLabels.formatter(e.labels[n][o],{value:i.globals.series[n][o],seriesIndex:n,dataPointIndex:o,w:i}),A=e.helpers.calculateDataLabels({text:k,x:(h+d)/2,y:(c+g)/2+e.strokeWidth/2+w/3,i:n,j:o,colorProps:p,fontSize:w,series:t});i.config.dataLabels.enabled&&A&&e.rotateToFitLabel(A,w,k,h,c,d,g),l.add(u),null!==A&&l.add(A)})),l.add(c),r.add(l)})),r}},{key:\"getFontSize\",value:function(t){var e=this.w;var i,a,s,r,o=function t(e){var i,a=0;if(Array.isArray(e[0]))for(i=0;i<e.length;i++)a+=t(e[i]);else for(i=0;i<e.length;i++)a+=e[i].length;return a}(this.labels)/function t(e){var i,a=0;if(Array.isArray(e[0]))for(i=0;i<e.length;i++)a+=t(e[i]);else for(i=0;i<e.length;i++)a+=1;return a}(this.labels);return i=t[2]-t[0],a=t[3]-t[1],s=i*a,r=Math.pow(s,.5),Math.min(r/o,parseInt(e.config.dataLabels.style.fontSize,10))}},{key:\"rotateToFitLabel\",value:function(t,e,i,a,s,r,o){var n=new m(this.ctx),l=n.getTextRects(i,e);if(l.width+this.w.config.stroke.width+5>r-a&&l.width<=o-s){var h=n.rotateAroundCenter(t.node);t.node.setAttribute(\"transform\",\"rotate(-90 \".concat(h.x,\" \").concat(h.y,\")\"))}}},{key:\"animateTreemap\",value:function(t,e,i,a){var s=new b(this.ctx);s.animateRect(t,{x:e.x,y:e.y,width:e.width,height:e.height},{x:i.x,y:i.y,width:i.width,height:i.height},a,(function(){s.animationCompleted(t)}))}}]),t}(),Ft=86400,Rt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.timeScaleArray=[],this.utc=this.w.config.xaxis.labels.datetimeUTC}return r(t,[{key:\"calculateTimeScaleTicks\",value:function(t,i){var a=this,s=this.w;if(s.globals.allSeriesCollapsed)return s.globals.labels=[],s.globals.timescaleLabels=[],[];var r=new I(this.ctx),o=(i-t)/864e5;this.determineInterval(o),s.globals.disableZoomIn=!1,s.globals.disableZoomOut=!1,o<.00011574074074074075?s.globals.disableZoomIn=!0:o>5e4&&(s.globals.disableZoomOut=!0);var n=r.getTimeUnitsfromTimestamp(t,i,this.utc),l=s.globals.gridWidth/o,h=l/24,c=h/60,d=c/60,g=Math.floor(24*o),u=Math.floor(1440*o),p=Math.floor(o*Ft),f=Math.floor(o),x=Math.floor(o/30),b=Math.floor(o/365),v={minMillisecond:n.minMillisecond,minSecond:n.minSecond,minMinute:n.minMinute,minHour:n.minHour,minDate:n.minDate,minMonth:n.minMonth,minYear:n.minYear},m={firstVal:v,currentMillisecond:v.minMillisecond,currentSecond:v.minSecond,currentMinute:v.minMinute,currentHour:v.minHour,currentMonthDate:v.minDate,currentDate:v.minDate,currentMonth:v.minMonth,currentYear:v.minYear,daysWidthOnXAxis:l,hoursWidthOnXAxis:h,minutesWidthOnXAxis:c,secondsWidthOnXAxis:d,numberOfSeconds:p,numberOfMinutes:u,numberOfHours:g,numberOfDays:f,numberOfMonths:x,numberOfYears:b};switch(this.tickInterval){case\"years\":this.generateYearScale(m);break;case\"months\":case\"half_year\":this.generateMonthScale(m);break;case\"months_days\":case\"months_fortnight\":case\"days\":case\"week_days\":this.generateDayScale(m);break;case\"hours\":this.generateHourScale(m);break;case\"minutes_fives\":case\"minutes\":this.generateMinuteScale(m);break;case\"seconds_tens\":case\"seconds_fives\":case\"seconds\":this.generateSecondScale(m)}var y=this.timeScaleArray.map((function(t){var i={position:t.position,unit:t.unit,year:t.year,day:t.day?t.day:1,hour:t.hour?t.hour:0,month:t.month+1};return\"month\"===t.unit?e(e({},i),{},{day:1,value:t.value+1}):\"day\"===t.unit||\"hour\"===t.unit?e(e({},i),{},{value:t.value}):\"minute\"===t.unit?e(e({},i),{},{value:t.value,minute:t.value}):\"second\"===t.unit?e(e({},i),{},{value:t.value,minute:t.minute,second:t.second}):t}));return y.filter((function(t){var e=1,i=Math.ceil(s.globals.gridWidth/120),r=t.value;void 0!==s.config.xaxis.tickAmount&&(i=s.config.xaxis.tickAmount),y.length>i&&(e=Math.floor(y.length/i));var o=!1,n=!1;switch(a.tickInterval){case\"years\":\"year\"===t.unit&&(o=!0);break;case\"half_year\":e=7,\"year\"===t.unit&&(o=!0);break;case\"months\":e=1,\"year\"===t.unit&&(o=!0);break;case\"months_fortnight\":e=15,\"year\"!==t.unit&&\"month\"!==t.unit||(o=!0),30===r&&(n=!0);break;case\"months_days\":e=10,\"month\"===t.unit&&(o=!0),30===r&&(n=!0);break;case\"week_days\":e=8,\"month\"===t.unit&&(o=!0);break;case\"days\":e=1,\"month\"===t.unit&&(o=!0);break;case\"hours\":\"day\"===t.unit&&(o=!0);break;case\"minutes_fives\":case\"seconds_fives\":r%5!=0&&(n=!0);break;case\"seconds_tens\":r%10!=0&&(n=!0)}if(\"hours\"===a.tickInterval||\"minutes_fives\"===a.tickInterval||\"seconds_tens\"===a.tickInterval||\"seconds_fives\"===a.tickInterval){if(!n)return!0}else if((r%e==0||o)&&!n)return!0}))}},{key:\"recalcDimensionsBasedOnFormat\",value:function(t,e){var i=this.w,a=this.formatDates(t),s=this.removeOverlappingTS(a);i.globals.timescaleLabels=s.slice(),new ot(this.ctx).plotCoords()}},{key:\"determineInterval\",value:function(t){var e=24*t,i=60*e;switch(!0){case t/365>5:this.tickInterval=\"years\";break;case t>800:this.tickInterval=\"half_year\";break;case t>180:this.tickInterval=\"months\";break;case t>90:this.tickInterval=\"months_fortnight\";break;case t>60:this.tickInterval=\"months_days\";break;case t>30:this.tickInterval=\"week_days\";break;case t>2:this.tickInterval=\"days\";break;case e>2.4:this.tickInterval=\"hours\";break;case i>15:this.tickInterval=\"minutes_fives\";break;case i>5:this.tickInterval=\"minutes\";break;case i>1:this.tickInterval=\"seconds_tens\";break;case 60*i>20:this.tickInterval=\"seconds_fives\";break;default:this.tickInterval=\"seconds\"}}},{key:\"generateYearScale\",value:function(t){var e=t.firstVal,i=t.currentMonth,a=t.currentYear,s=t.daysWidthOnXAxis,r=t.numberOfYears,o=e.minYear,n=0,l=new I(this.ctx),h=\"year\";if(e.minDate>1||e.minMonth>0){var c=l.determineRemainingDaysOfYear(e.minYear,e.minMonth,e.minDate);n=(l.determineDaysOfYear(e.minYear)-c+1)*s,o=e.minYear+1,this.timeScaleArray.push({position:n,value:o,unit:h,year:o,month:x.monthMod(i+1)})}else 1===e.minDate&&0===e.minMonth&&this.timeScaleArray.push({position:n,value:o,unit:h,year:a,month:x.monthMod(i+1)});for(var d=o,g=n,u=0;u<r;u++)d++,g=l.determineDaysOfYear(d-1)*s+g,this.timeScaleArray.push({position:g,value:d,unit:h,year:d,month:1})}},{key:\"generateMonthScale\",value:function(t){var e=t.firstVal,i=t.currentMonthDate,a=t.currentMonth,s=t.currentYear,r=t.daysWidthOnXAxis,o=t.numberOfMonths,n=a,l=0,h=new I(this.ctx),c=\"month\",d=0;if(e.minDate>1){l=(h.determineDaysOfMonths(a+1,e.minYear)-i+1)*r,n=x.monthMod(a+1);var g=s+d,u=x.monthMod(n),p=n;0===n&&(c=\"year\",p=g,u=1,g+=d+=1),this.timeScaleArray.push({position:l,value:p,unit:c,year:g,month:u})}else this.timeScaleArray.push({position:l,value:n,unit:c,year:s,month:x.monthMod(a)});for(var f=n+1,b=l,v=0,m=1;v<o;v++,m++){0===(f=x.monthMod(f))?(c=\"year\",d+=1):c=\"month\";var y=this._getYear(s,f,d);b=h.determineDaysOfMonths(f,y)*r+b;var w=0===f?y:f;this.timeScaleArray.push({position:b,value:w,unit:c,year:y,month:0===f?1:f}),f++}}},{key:\"generateDayScale\",value:function(t){var e=t.firstVal,i=t.currentMonth,a=t.currentYear,s=t.hoursWidthOnXAxis,r=t.numberOfDays,o=new I(this.ctx),n=\"day\",l=e.minDate+1,h=l,c=function(t,e,i){return t>o.determineDaysOfMonths(e+1,i)?(h=1,n=\"month\",g=e+=1,e):e},d=(24-e.minHour)*s,g=l,u=c(h,i,a);0===e.minHour&&1===e.minDate?(d=0,g=x.monthMod(e.minMonth),n=\"month\",h=e.minDate,r++):1!==e.minDate&&0===e.minHour&&0===e.minMinute&&(d=0,l=e.minDate,g=l,u=c(h=l,i,a)),this.timeScaleArray.push({position:d,value:g,unit:n,year:this._getYear(a,u,0),month:x.monthMod(u),day:h});for(var p=d,f=0;f<r;f++){n=\"day\",u=c(h+=1,u,this._getYear(a,u,0));var b=this._getYear(a,u,0);p=24*s+p;var v=1===h?x.monthMod(u):h;this.timeScaleArray.push({position:p,value:v,unit:n,year:b,month:x.monthMod(u),day:v})}}},{key:\"generateHourScale\",value:function(t){var e=t.firstVal,i=t.currentDate,a=t.currentMonth,s=t.currentYear,r=t.minutesWidthOnXAxis,o=t.numberOfHours,n=new I(this.ctx),l=\"hour\",h=function(t,e){return t>n.determineDaysOfMonths(e+1,s)&&(f=1,e+=1),{month:e,date:f}},c=function(t,e){return t>n.determineDaysOfMonths(e+1,s)?e+=1:e},d=60-(e.minMinute+e.minSecond/60),g=d*r,u=e.minHour+1,p=u+1;60===d&&(g=0,p=(u=e.minHour)+1);var f=i,b=c(f,a);this.timeScaleArray.push({position:g,value:u,unit:l,day:f,hour:p,year:s,month:x.monthMod(b)});for(var v=g,m=0;m<o;m++){if(l=\"hour\",p>=24)p=0,l=\"day\",b=h(f+=1,b).month,b=c(f,b);var y=this._getYear(s,b,0);v=60*r+v;var w=0===p?f:p;this.timeScaleArray.push({position:v,value:w,unit:l,hour:p,day:f,year:y,month:x.monthMod(b)}),p++}}},{key:\"generateMinuteScale\",value:function(t){for(var e=t.currentMillisecond,i=t.currentSecond,a=t.currentMinute,s=t.currentHour,r=t.currentDate,o=t.currentMonth,n=t.currentYear,l=t.minutesWidthOnXAxis,h=t.secondsWidthOnXAxis,c=t.numberOfMinutes,d=a+1,g=r,u=o,p=n,f=s,b=(60-i-e/1e3)*h,v=0;v<c;v++)d>=60&&(d=0,24===(f+=1)&&(f=0)),this.timeScaleArray.push({position:b,value:d,unit:\"minute\",hour:f,minute:d,day:g,year:this._getYear(p,u,0),month:x.monthMod(u)}),b+=l,d++}},{key:\"generateSecondScale\",value:function(t){for(var e=t.currentMillisecond,i=t.currentSecond,a=t.currentMinute,s=t.currentHour,r=t.currentDate,o=t.currentMonth,n=t.currentYear,l=t.secondsWidthOnXAxis,h=t.numberOfSeconds,c=i+1,d=a,g=r,u=o,p=n,f=s,b=(1e3-e)/1e3*l,v=0;v<h;v++)c>=60&&(c=0,++d>=60&&(d=0,24===++f&&(f=0))),this.timeScaleArray.push({position:b,value:c,unit:\"second\",hour:f,minute:d,second:c,day:g,year:this._getYear(p,u,0),month:x.monthMod(u)}),b+=l,c++}},{key:\"createRawDateString\",value:function(t,e){var i=t.year;return 0===t.month&&(t.month=1),i+=\"-\"+(\"0\"+t.month.toString()).slice(-2),\"day\"===t.unit?i+=\"day\"===t.unit?\"-\"+(\"0\"+e).slice(-2):\"-01\":i+=\"-\"+(\"0\"+(t.day?t.day:\"1\")).slice(-2),\"hour\"===t.unit?i+=\"hour\"===t.unit?\"T\"+(\"0\"+e).slice(-2):\"T00\":i+=\"T\"+(\"0\"+(t.hour?t.hour:\"0\")).slice(-2),\"minute\"===t.unit?i+=\":\"+(\"0\"+e).slice(-2):i+=\":\"+(t.minute?(\"0\"+t.minute).slice(-2):\"00\"),\"second\"===t.unit?i+=\":\"+(\"0\"+e).slice(-2):i+=\":00\",this.utc&&(i+=\".000Z\"),i}},{key:\"formatDates\",value:function(t){var e=this,i=this.w;return t.map((function(t){var a=t.value.toString(),s=new I(e.ctx),r=e.createRawDateString(t,a),o=s.getDate(s.parseDate(r));if(e.utc||(o=s.getDate(s.parseDateWithTimezone(r))),void 0===i.config.xaxis.labels.format){var n=\"dd MMM\",l=i.config.xaxis.labels.datetimeFormatter;\"year\"===t.unit&&(n=l.year),\"month\"===t.unit&&(n=l.month),\"day\"===t.unit&&(n=l.day),\"hour\"===t.unit&&(n=l.hour),\"minute\"===t.unit&&(n=l.minute),\"second\"===t.unit&&(n=l.second),a=s.formatDate(o,n)}else a=s.formatDate(o,i.config.xaxis.labels.format);return{dateString:r,position:t.position,value:a,unit:t.unit,year:t.year,month:t.month}}))}},{key:\"removeOverlappingTS\",value:function(t){var e,i=this,a=new m(this.ctx),s=!1;t.length>0&&t[0].value&&t.every((function(e){return e.value.length===t[0].value.length}))&&(s=!0,e=a.getTextRects(t[0].value).width);var r=0,o=t.map((function(o,n){if(n>0&&i.w.config.xaxis.labels.hideOverlappingLabels){var l=s?e:a.getTextRects(t[r].value).width,h=t[r].position;return o.position>h+l+10?(r=n,o):null}return o}));return o=o.filter((function(t){return null!==t}))}},{key:\"_getYear\",value:function(t,e,i){return t+Math.floor(e/12)+i}}]),t}(),Ht=function(){function t(e,i){a(this,t),this.ctx=i,this.w=i.w,this.el=e}return r(t,[{key:\"setupElements\",value:function(){var t=this.w.globals,e=this.w.config,i=e.chart.type;t.axisCharts=[\"line\",\"area\",\"bar\",\"rangeBar\",\"rangeArea\",\"candlestick\",\"boxPlot\",\"scatter\",\"bubble\",\"radar\",\"heatmap\",\"treemap\"].indexOf(i)>-1,t.xyCharts=[\"line\",\"area\",\"bar\",\"rangeBar\",\"rangeArea\",\"candlestick\",\"boxPlot\",\"scatter\",\"bubble\"].indexOf(i)>-1,t.isBarHorizontal=(\"bar\"===e.chart.type||\"rangeBar\"===e.chart.type||\"boxPlot\"===e.chart.type)&&e.plotOptions.bar.horizontal,t.chartClass=\".apexcharts\"+t.chartID,t.dom.baseEl=this.el,t.dom.elWrap=document.createElement(\"div\"),m.setAttrs(t.dom.elWrap,{id:t.chartClass.substring(1),class:\"apexcharts-canvas \"+t.chartClass.substring(1)}),this.el.appendChild(t.dom.elWrap),t.dom.Paper=new window.SVG.Doc(t.dom.elWrap),t.dom.Paper.attr({class:\"apexcharts-svg\",\"xmlns:data\":\"ApexChartsNS\",transform:\"translate(\".concat(e.chart.offsetX,\", \").concat(e.chart.offsetY,\")\")}),t.dom.Paper.node.style.background=e.chart.background,this.setSVGDimensions(),t.dom.elLegendForeign=document.createElementNS(t.SVGNS,\"foreignObject\"),m.setAttrs(t.dom.elLegendForeign,{x:0,y:0,width:t.svgWidth,height:t.svgHeight}),t.dom.elLegendWrap=document.createElement(\"div\"),t.dom.elLegendWrap.classList.add(\"apexcharts-legend\"),t.dom.elLegendWrap.setAttribute(\"xmlns\",\"http://www.w3.org/1999/xhtml\"),t.dom.elLegendForeign.appendChild(t.dom.elLegendWrap),t.dom.Paper.node.appendChild(t.dom.elLegendForeign),t.dom.elGraphical=t.dom.Paper.group().attr({class:\"apexcharts-inner apexcharts-graphical\"}),t.dom.elDefs=t.dom.Paper.defs(),t.dom.Paper.add(t.dom.elGraphical),t.dom.elGraphical.add(t.dom.elDefs)}},{key:\"plotChartType\",value:function(t,e){var i=this.w,a=i.config,s=i.globals,r={series:[],i:[]},o={series:[],i:[]},n={series:[],i:[]},l={series:[],i:[]},h={series:[],i:[]},c={series:[],i:[]},d={series:[],i:[]},g={series:[],i:[]},u={series:[],seriesRangeEnd:[],i:[]};s.series.map((function(e,p){var f=0;void 0!==t[p].type?(\"column\"===t[p].type||\"bar\"===t[p].type?(s.series.length>1&&a.plotOptions.bar.horizontal&&console.warn(\"Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`\"),h.series.push(e),h.i.push(p),f++,i.globals.columnSeries=h.series):\"area\"===t[p].type?(o.series.push(e),o.i.push(p),f++):\"line\"===t[p].type?(r.series.push(e),r.i.push(p),f++):\"scatter\"===t[p].type?(n.series.push(e),n.i.push(p)):\"bubble\"===t[p].type?(l.series.push(e),l.i.push(p),f++):\"candlestick\"===t[p].type?(c.series.push(e),c.i.push(p),f++):\"boxPlot\"===t[p].type?(d.series.push(e),d.i.push(p),f++):\"rangeBar\"===t[p].type?(g.series.push(e),g.i.push(p),f++):\"rangeArea\"===t[p].type?(u.series.push(s.seriesRangeStart[p]),u.seriesRangeEnd.push(s.seriesRangeEnd[p]),u.i.push(p),f++):console.warn(\"You have specified an unrecognized chart type. Available types for this property are line/area/column/bar/scatter/bubble/candlestick/boxPlot/rangeBar/rangeArea\"),f>1&&(s.comboCharts=!0)):(r.series.push(e),r.i.push(p))}));var p=new Xt(this.ctx,e),f=new kt(this.ctx,e);this.ctx.pie=new Lt(this.ctx);var x=new It(this.ctx);this.ctx.rangeBar=new Tt(this.ctx,e);var b=new Pt(this.ctx),v=[];if(s.comboCharts){if(o.series.length>0&&v.push(p.draw(o.series,\"area\",o.i)),h.series.length>0)if(i.config.chart.stacked){var m=new wt(this.ctx,e);v.push(m.draw(h.series,h.i))}else this.ctx.bar=new yt(this.ctx,e),v.push(this.ctx.bar.draw(h.series,h.i));if(u.series.length>0&&v.push(p.draw(u.series,\"rangeArea\",u.i,u.seriesRangeEnd)),r.series.length>0&&v.push(p.draw(r.series,\"line\",r.i)),c.series.length>0&&v.push(f.draw(c.series,\"candlestick\",c.i)),d.series.length>0&&v.push(f.draw(d.series,\"boxPlot\",d.i)),g.series.length>0&&v.push(this.ctx.rangeBar.draw(g.series,g.i)),n.series.length>0){var y=new Xt(this.ctx,e,!0);v.push(y.draw(n.series,\"scatter\",n.i))}if(l.series.length>0){var w=new Xt(this.ctx,e,!0);v.push(w.draw(l.series,\"bubble\",l.i))}}else switch(a.chart.type){case\"line\":v=p.draw(s.series,\"line\");break;case\"area\":v=p.draw(s.series,\"area\");break;case\"bar\":if(a.chart.stacked)v=new wt(this.ctx,e).draw(s.series);else this.ctx.bar=new yt(this.ctx,e),v=this.ctx.bar.draw(s.series);break;case\"candlestick\":v=new kt(this.ctx,e).draw(s.series,\"candlestick\");break;case\"boxPlot\":v=new kt(this.ctx,e).draw(s.series,a.chart.type);break;case\"rangeBar\":v=this.ctx.rangeBar.draw(s.series);break;case\"rangeArea\":v=p.draw(s.seriesRangeStart,\"rangeArea\",void 0,s.seriesRangeEnd);break;case\"heatmap\":v=new St(this.ctx,e).draw(s.series);break;case\"treemap\":v=new Yt(this.ctx,e).draw(s.series);break;case\"pie\":case\"donut\":case\"polarArea\":v=this.ctx.pie.draw(s.series);break;case\"radialBar\":v=x.draw(s.series);break;case\"radar\":v=b.draw(s.series);break;default:v=p.draw(s.series)}return v}},{key:\"setSVGDimensions\",value:function(){var t=this.w.globals,e=this.w.config;t.svgWidth=e.chart.width,t.svgHeight=e.chart.height;var i=x.getDimensions(this.el),a=e.chart.width.toString().split(/[0-9]+/g).pop();\"%\"===a?x.isNumber(i[0])&&(0===i[0].width&&(i=x.getDimensions(this.el.parentNode)),t.svgWidth=i[0]*parseInt(e.chart.width,10)/100):\"px\"!==a&&\"\"!==a||(t.svgWidth=parseInt(e.chart.width,10));var s=e.chart.height.toString().split(/[0-9]+/g).pop();if(\"auto\"!==t.svgHeight&&\"\"!==t.svgHeight)if(\"%\"===s){var r=x.getDimensions(this.el.parentNode);t.svgHeight=r[1]*parseInt(e.chart.height,10)/100}else t.svgHeight=parseInt(e.chart.height,10);else t.axisCharts?t.svgHeight=t.svgWidth/1.61:t.svgHeight=t.svgWidth/1.2;if(t.svgWidth<0&&(t.svgWidth=0),t.svgHeight<0&&(t.svgHeight=0),m.setAttrs(t.dom.Paper.node,{width:t.svgWidth,height:t.svgHeight}),\"%\"!==s){var o=e.chart.sparkline.enabled?0:t.axisCharts?e.chart.parentHeightOffset:0;t.dom.Paper.node.parentNode.parentNode.style.minHeight=t.svgHeight+o+\"px\"}t.dom.elWrap.style.width=t.svgWidth+\"px\",t.dom.elWrap.style.height=t.svgHeight+\"px\"}},{key:\"shiftGraphPosition\",value:function(){var t=this.w.globals,e=t.translateY,i={transform:\"translate(\"+t.translateX+\", \"+e+\")\"};m.setAttrs(t.dom.elGraphical.node,i)}},{key:\"resizeNonAxisCharts\",value:function(){var t=this.w,e=t.globals,i=0,a=t.config.chart.sparkline.enabled?1:15;a+=t.config.grid.padding.bottom,\"top\"!==t.config.legend.position&&\"bottom\"!==t.config.legend.position||!t.config.legend.show||t.config.legend.floating||(i=new lt(this.ctx).legendHelpers.getLegendBBox().clwh+10);var s=t.globals.dom.baseEl.querySelector(\".apexcharts-radialbar, .apexcharts-pie\"),r=2.05*t.globals.radialSize;if(s&&!t.config.chart.sparkline.enabled&&0!==t.config.plotOptions.radialBar.startAngle){var o=x.getBoundingClientRect(s);r=o.bottom;var n=o.bottom-o.top;r=Math.max(2.05*t.globals.radialSize,n)}var l=r+e.translateY+i+a;e.dom.elLegendForeign&&e.dom.elLegendForeign.setAttribute(\"height\",l),t.config.chart.height&&String(t.config.chart.height).indexOf(\"%\")>0||(e.dom.elWrap.style.height=l+\"px\",m.setAttrs(e.dom.Paper.node,{height:l}),e.dom.Paper.node.parentNode.parentNode.style.minHeight=l+\"px\")}},{key:\"coreCalculations\",value:function(){new U(this.ctx).init()}},{key:\"resetGlobals\",value:function(){var t=this,e=function(){return t.w.config.series.map((function(t){return[]}))},i=new Y,a=this.w.globals;i.initGlobalVars(a),a.seriesXvalues=e(),a.seriesYvalues=e()}},{key:\"isMultipleY\",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.globals.isMultipleYAxis=!0,!0}},{key:\"xySettings\",value:function(){var t=null,e=this.w;if(e.globals.axisCharts){if(\"back\"===e.config.xaxis.crosshairs.position)new Q(this.ctx).drawXCrosshairs();if(\"back\"===e.config.yaxis[0].crosshairs.position)new Q(this.ctx).drawYCrosshairs();if(\"datetime\"===e.config.xaxis.type&&void 0===e.config.xaxis.labels.formatter){this.ctx.timeScale=new Rt(this.ctx);var i=[];isFinite(e.globals.minX)&&isFinite(e.globals.maxX)&&!e.globals.isBarHorizontal?i=this.ctx.timeScale.calculateTimeScaleTicks(e.globals.minX,e.globals.maxX):e.globals.isBarHorizontal&&(i=this.ctx.timeScale.calculateTimeScaleTicks(e.globals.minY,e.globals.maxY)),this.ctx.timeScale.recalcDimensionsBasedOnFormat(i)}t=new y(this.ctx).getCalculatedRatios()}return t}},{key:\"updateSourceChart\",value:function(t){this.ctx.w.globals.selection=void 0,this.ctx.updateHelpers._updateOptions({chart:{selection:{xaxis:{min:t.w.globals.minX,max:t.w.globals.maxX}}}},!1,!1)}},{key:\"setupBrushHandler\",value:function(){var t=this,i=this.w;if(i.config.chart.brush.enabled&&\"function\"!=typeof i.config.chart.events.selection){var a=i.config.chart.brush.targets||[i.config.chart.brush.target];a.forEach((function(e){var i=ApexCharts.getChartByID(e);i.w.globals.brushSource=t.ctx,\"function\"!=typeof i.w.config.chart.events.zoomed&&(i.w.config.chart.events.zoomed=function(){t.updateSourceChart(i)}),\"function\"!=typeof i.w.config.chart.events.scrolled&&(i.w.config.chart.events.scrolled=function(){t.updateSourceChart(i)})})),i.config.chart.events.selection=function(t,s){a.forEach((function(t){var a=ApexCharts.getChartByID(t),r=x.clone(i.config.yaxis);if(i.config.chart.brush.autoScaleYaxis&&1===a.w.globals.series.length){var o=new _(a);r=o.autoScaleY(a,r,s)}var n=a.w.config.yaxis.reduce((function(t,i,s){return[].concat(u(t),[e(e({},a.w.config.yaxis[s]),{},{min:r[0].min,max:r[0].max})])}),[]);a.ctx.updateHelpers._updateOptions({xaxis:{min:s.xaxis.min,max:s.xaxis.max},yaxis:n},!1,!1,!1,!1)}))}}}}]),t}(),Dt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"_updateOptions\",value:function(t){var e=this,a=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return new Promise((function(n){var l=[e.ctx];r&&(l=e.ctx.getSyncedCharts()),e.ctx.w.globals.isExecCalled&&(l=[e.ctx],e.ctx.w.globals.isExecCalled=!1),l.forEach((function(r,h){var c=r.w;if(c.globals.shouldAnimate=s,a||(c.globals.resized=!0,c.globals.dataChanged=!0,s&&r.series.getPreviousPaths()),t&&\"object\"===i(t)&&(r.config=new E(t),t=y.extendArrayProps(r.config,t,c),r.w.globals.chartID!==e.ctx.w.globals.chartID&&delete t.series,c.config=x.extend(c.config,t),o&&(c.globals.lastXAxis=t.xaxis?x.clone(t.xaxis):[],c.globals.lastYAxis=t.yaxis?x.clone(t.yaxis):[],c.globals.initialConfig=x.extend({},c.config),c.globals.initialSeries=x.clone(c.config.series),t.series))){for(var d=0;d<c.globals.collapsedSeriesIndices.length;d++){var g=c.config.series[c.globals.collapsedSeriesIndices[d]];c.globals.collapsedSeries[d].data=c.globals.axisCharts?g.data.slice():g}for(var u=0;u<c.globals.ancillaryCollapsedSeriesIndices.length;u++){var p=c.config.series[c.globals.ancillaryCollapsedSeriesIndices[u]];c.globals.ancillaryCollapsedSeries[u].data=c.globals.axisCharts?p.data.slice():p}r.series.emptyCollapsedSeries(c.config.series)}return r.update(t).then((function(){h===l.length-1&&n(r)}))}))}))}},{key:\"_updateSeries\",value:function(t,e){var i=this,a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return new Promise((function(s){var r,o=i.w;return o.globals.shouldAnimate=e,o.globals.dataChanged=!0,e&&i.ctx.series.getPreviousPaths(),o.globals.axisCharts?(0===(r=t.map((function(t,e){return i._extendSeries(t,e)}))).length&&(r=[{data:[]}]),o.config.series=r):o.config.series=t.slice(),a&&(o.globals.initialConfig.series=x.clone(o.config.series),o.globals.initialSeries=x.clone(o.config.series)),i.ctx.update().then((function(){s(i.ctx)}))}))}},{key:\"_extendSeries\",value:function(t,i){var a=this.w,s=a.config.series[i];return e(e({},a.config.series[i]),{},{name:t.name?t.name:s&&s.name,color:t.color?t.color:s&&s.color,type:t.type?t.type:s&&s.type,data:t.data?t.data:s&&s.data})}},{key:\"toggleDataPointSelection\",value:function(t,e){var i=this.w,a=null,s=\".apexcharts-series[data\\\\:realIndex='\".concat(t,\"']\");return i.globals.axisCharts?a=i.globals.dom.Paper.select(\"\".concat(s,\" path[j='\").concat(e,\"'], \").concat(s,\" circle[j='\").concat(e,\"'], \").concat(s,\" rect[j='\").concat(e,\"']\")).members[0]:void 0===e&&(a=i.globals.dom.Paper.select(\"\".concat(s,\" path[j='\").concat(t,\"']\")).members[0],\"pie\"!==i.config.chart.type&&\"polarArea\"!==i.config.chart.type&&\"donut\"!==i.config.chart.type||this.ctx.pie.pieClicked(t)),a?(new m(this.ctx).pathMouseDown(a,null),a.node?a.node:null):(console.warn(\"toggleDataPointSelection: Element not found\"),null)}},{key:\"forceXAxisUpdate\",value:function(t){var e=this.w;if([\"min\",\"max\"].forEach((function(i){void 0!==t.xaxis[i]&&(e.config.xaxis[i]=t.xaxis[i],e.globals.lastXAxis[i]=t.xaxis[i])})),t.xaxis.categories&&t.xaxis.categories.length&&(e.config.xaxis.categories=t.xaxis.categories),e.config.xaxis.convertedCatToNumeric){var i=new z(t);t=i.convertCatToNumericXaxis(t,this.ctx)}return t}},{key:\"forceYAxisUpdate\",value:function(t){return t.chart&&t.chart.stacked&&\"100%\"===t.chart.stackType&&(Array.isArray(t.yaxis)?t.yaxis.forEach((function(e,i){t.yaxis[i].min=0,t.yaxis[i].max=100})):(t.yaxis.min=0,t.yaxis.max=100)),t}},{key:\"revertDefaultAxisMinMax\",value:function(t){var e=this,i=this.w,a=i.globals.lastXAxis,s=i.globals.lastYAxis;t&&t.xaxis&&(a=t.xaxis),t&&t.yaxis&&(s=t.yaxis),i.config.xaxis.min=a.min,i.config.xaxis.max=a.max;var r=function(t){void 0!==s[t]&&(i.config.yaxis[t].min=s[t].min,i.config.yaxis[t].max=s[t].max)};i.config.yaxis.map((function(t,a){i.globals.zoomed||void 0!==s[a]?r(a):void 0!==e.ctx.opts.yaxis[a]&&(t.min=e.ctx.opts.yaxis[a].min,t.max=e.ctx.opts.yaxis[a].max)}))}}]),t}();zt=\"undefined\"!=typeof window?window:void 0,Et=function(t,e){var a=(void 0!==this?this:t).SVG=function(t){if(a.supported)return t=new a.Doc(t),a.parser.draw||a.prepare(),t};if(a.ns=\"http://www.w3.org/2000/svg\",a.xmlns=\"http://www.w3.org/2000/xmlns/\",a.xlink=\"http://www.w3.org/1999/xlink\",a.svgjs=\"http://svgjs.dev\",a.supported=!0,!a.supported)return!1;a.did=1e3,a.eid=function(t){return\"Svgjs\"+d(t)+a.did++},a.create=function(t){var i=e.createElementNS(this.ns,t);return i.setAttribute(\"id\",this.eid(t)),i},a.extend=function(){var t,e;e=(t=[].slice.call(arguments)).pop();for(var i=t.length-1;i>=0;i--)if(t[i])for(var s in e)t[i].prototype[s]=e[s];a.Set&&a.Set.inherit&&a.Set.inherit()},a.invent=function(t){var e=\"function\"==typeof t.create?t.create:function(){this.constructor.call(this,a.create(t.create))};return t.inherit&&(e.prototype=new t.inherit),t.extend&&a.extend(e,t.extend),t.construct&&a.extend(t.parent||a.Container,t.construct),e},a.adopt=function(e){return e?e.instance?e.instance:((i=\"svg\"==e.nodeName?e.parentNode instanceof t.SVGElement?new a.Nested:new a.Doc:\"linearGradient\"==e.nodeName?new a.Gradient(\"linear\"):\"radialGradient\"==e.nodeName?new a.Gradient(\"radial\"):a[d(e.nodeName)]?new(a[d(e.nodeName)]):new a.Element(e)).type=e.nodeName,i.node=e,e.instance=i,i instanceof a.Doc&&i.namespace().defs(),i.setData(JSON.parse(e.getAttribute(\"svgjs:data\"))||{}),i):null;var i},a.prepare=function(){var t=e.getElementsByTagName(\"body\")[0],i=(t?new a.Doc(t):a.adopt(e.documentElement).nested()).size(2,0);a.parser={body:t||e.documentElement,draw:i.style(\"opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden\").node,poly:i.polyline().node,path:i.path().node,native:a.create(\"svg\")}},a.parser={native:a.create(\"svg\")},e.addEventListener(\"DOMContentLoaded\",(function(){a.parser.draw||a.prepare()}),!1),a.regex={numberAndUnit:/^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,rgb:/rgb\\((\\d+),(\\d+),(\\d+)\\)/,reference:/#([a-z0-9\\-_]+)/i,transforms:/\\)\\s*,?\\s*/,whitespace:/\\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\\s+)?$/,isNumber:/^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,isPercent:/^-?[\\d\\.]+%$/,isImage:/\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i,delimiter:/[\\s,]+/,hyphen:/([^e])\\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\\d?\\.\\d+(?:e[+-]?\\d+)?)((?:\\.\\d+(?:e[+-]?\\d+)?)+))+/gi,dots:/\\./g},a.utils={map:function(t,e){for(var i=t.length,a=[],s=0;s<i;s++)a.push(e(t[s]));return a},filter:function(t,e){for(var i=t.length,a=[],s=0;s<i;s++)e(t[s])&&a.push(t[s]);return a},filterSVGElements:function(e){return this.filter(e,(function(e){return e instanceof t.SVGElement}))}},a.defaults={attrs:{\"fill-opacity\":1,\"stroke-opacity\":1,\"stroke-width\":0,\"stroke-linejoin\":\"miter\",\"stroke-linecap\":\"butt\",fill:\"#000000\",stroke:\"#000000\",opacity:1,x:0,y:0,cx:0,cy:0,width:0,height:0,r:0,rx:0,ry:0,offset:0,\"stop-opacity\":1,\"stop-color\":\"#000000\",\"font-size\":16,\"font-family\":\"Helvetica, Arial, sans-serif\",\"text-anchor\":\"start\"}},a.Color=function(t){var e,s;this.r=0,this.g=0,this.b=0,t&&(\"string\"==typeof t?a.regex.isRgb.test(t)?(e=a.regex.rgb.exec(t.replace(a.regex.whitespace,\"\")),this.r=parseInt(e[1]),this.g=parseInt(e[2]),this.b=parseInt(e[3])):a.regex.isHex.test(t)&&(e=a.regex.hex.exec(4==(s=t).length?[\"#\",s.substring(1,2),s.substring(1,2),s.substring(2,3),s.substring(2,3),s.substring(3,4),s.substring(3,4)].join(\"\"):s),this.r=parseInt(e[1],16),this.g=parseInt(e[2],16),this.b=parseInt(e[3],16)):\"object\"===i(t)&&(this.r=t.r,this.g=t.g,this.b=t.b))},a.extend(a.Color,{toString:function(){return this.toHex()},toHex:function(){return\"#\"+g(this.r)+g(this.g)+g(this.b)},toRgb:function(){return\"rgb(\"+[this.r,this.g,this.b].join()+\")\"},brightness:function(){return this.r/255*.3+this.g/255*.59+this.b/255*.11},morph:function(t){return this.destination=new a.Color(t),this},at:function(t){return this.destination?(t=t<0?0:t>1?1:t,new a.Color({r:~~(this.r+(this.destination.r-this.r)*t),g:~~(this.g+(this.destination.g-this.g)*t),b:~~(this.b+(this.destination.b-this.b)*t)})):this}}),a.Color.test=function(t){return t+=\"\",a.regex.isHex.test(t)||a.regex.isRgb.test(t)},a.Color.isRgb=function(t){return t&&\"number\"==typeof t.r&&\"number\"==typeof t.g&&\"number\"==typeof t.b},a.Color.isColor=function(t){return a.Color.isRgb(t)||a.Color.test(t)},a.Array=function(t,e){0==(t=(t||[]).valueOf()).length&&e&&(t=e.valueOf()),this.value=this.parse(t)},a.extend(a.Array,{toString:function(){return this.value.join(\" \")},valueOf:function(){return this.value},parse:function(t){return t=t.valueOf(),Array.isArray(t)?t:this.split(t)}}),a.PointArray=function(t,e){a.Array.call(this,t,e||[[0,0]])},a.PointArray.prototype=new a.Array,a.PointArray.prototype.constructor=a.PointArray;for(var s={M:function(t,e,i){return e.x=i.x=t[0],e.y=i.y=t[1],[\"M\",e.x,e.y]},L:function(t,e){return e.x=t[0],e.y=t[1],[\"L\",t[0],t[1]]},H:function(t,e){return e.x=t[0],[\"H\",t[0]]},V:function(t,e){return e.y=t[0],[\"V\",t[0]]},C:function(t,e){return e.x=t[4],e.y=t[5],[\"C\",t[0],t[1],t[2],t[3],t[4],t[5]]},Q:function(t,e){return e.x=t[2],e.y=t[3],[\"Q\",t[0],t[1],t[2],t[3]]},Z:function(t,e,i){return e.x=i.x,e.y=i.y,[\"Z\"]}},r=\"mlhvqtcsaz\".split(\"\"),o=0,n=r.length;o<n;++o)s[r[o]]=function(t){return function(e,i,a){if(\"H\"==t)e[0]=e[0]+i.x;else if(\"V\"==t)e[0]=e[0]+i.y;else if(\"A\"==t)e[5]=e[5]+i.x,e[6]=e[6]+i.y;else for(var r=0,o=e.length;r<o;++r)e[r]=e[r]+(r%2?i.y:i.x);if(s&&\"function\"==typeof s[t])return s[t](e,i,a)}}(r[o].toUpperCase());a.PathArray=function(t,e){a.Array.call(this,t,e||[[\"M\",0,0]])},a.PathArray.prototype=new a.Array,a.PathArray.prototype.constructor=a.PathArray,a.extend(a.PathArray,{toString:function(){return function(t){for(var e=0,i=t.length,a=\"\";e<i;e++)a+=t[e][0],null!=t[e][1]&&(a+=t[e][1],null!=t[e][2]&&(a+=\" \",a+=t[e][2],null!=t[e][3]&&(a+=\" \",a+=t[e][3],a+=\" \",a+=t[e][4],null!=t[e][5]&&(a+=\" \",a+=t[e][5],a+=\" \",a+=t[e][6],null!=t[e][7]&&(a+=\" \",a+=t[e][7])))));return a+\" \"}(this.value)},move:function(t,e){var i=this.bbox();return i.x,i.y,this},at:function(t){if(!this.destination)return this;for(var e=this.value,i=this.destination.value,s=[],r=new a.PathArray,o=0,n=e.length;o<n;o++){s[o]=[e[o][0]];for(var l=1,h=e[o].length;l<h;l++)s[o][l]=e[o][l]+(i[o][l]-e[o][l])*t;\"A\"===s[o][0]&&(s[o][4]=+(0!=s[o][4]),s[o][5]=+(0!=s[o][5]))}return r.value=s,r},parse:function(t){if(t instanceof a.PathArray)return t.valueOf();var e,i={M:2,L:2,H:1,V:1,C:6,S:4,Q:4,T:2,A:7,Z:0};t=\"string\"==typeof t?t.replace(a.regex.numbersWithDots,h).replace(a.regex.pathLetters,\" $& \").replace(a.regex.hyphen,\"$1 -\").trim().split(a.regex.delimiter):t.reduce((function(t,e){return[].concat.call(t,e)}),[]);var r=[],o=new a.Point,n=new a.Point,l=0,c=t.length;do{a.regex.isPathLetter.test(t[l])?(e=t[l],++l):\"M\"==e?e=\"L\":\"m\"==e&&(e=\"l\"),r.push(s[e].call(null,t.slice(l,l+=i[e.toUpperCase()]).map(parseFloat),o,n))}while(c>l);return r},bbox:function(){return a.parser.draw||a.prepare(),a.parser.path.setAttribute(\"d\",this.toString()),a.parser.path.getBBox()}}),a.Number=a.invent({create:function(t,e){this.value=0,this.unit=e||\"\",\"number\"==typeof t?this.value=isNaN(t)?0:isFinite(t)?t:t<0?-34e37:34e37:\"string\"==typeof t?(e=t.match(a.regex.numberAndUnit))&&(this.value=parseFloat(e[1]),\"%\"==e[5]?this.value/=100:\"s\"==e[5]&&(this.value*=1e3),this.unit=e[5]):t instanceof a.Number&&(this.value=t.valueOf(),this.unit=t.unit)},extend:{toString:function(){return(\"%\"==this.unit?~~(1e8*this.value)/1e6:\"s\"==this.unit?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(t){return t=new a.Number(t),new a.Number(this+t,this.unit||t.unit)},minus:function(t){return t=new a.Number(t),new a.Number(this-t,this.unit||t.unit)},times:function(t){return t=new a.Number(t),new a.Number(this*t,this.unit||t.unit)},divide:function(t){return t=new a.Number(t),new a.Number(this/t,this.unit||t.unit)},to:function(t){var e=new a.Number(this);return\"string\"==typeof t&&(e.unit=t),e},morph:function(t){return this.destination=new a.Number(t),t.relative&&(this.destination.value+=this.value),this},at:function(t){return this.destination?new a.Number(this.destination).minus(this).times(t).plus(this):this}}}),a.Element=a.invent({create:function(t){this._stroke=a.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=t)&&(this.type=t.nodeName,this.node.instance=this,this._stroke=t.getAttribute(\"stroke\")||this._stroke)},extend:{x:function(t){return this.attr(\"x\",t)},y:function(t){return this.attr(\"y\",t)},cx:function(t){return null==t?this.x()+this.width()/2:this.x(t-this.width()/2)},cy:function(t){return null==t?this.y()+this.height()/2:this.y(t-this.height()/2)},move:function(t,e){return this.x(t).y(e)},center:function(t,e){return this.cx(t).cy(e)},width:function(t){return this.attr(\"width\",t)},height:function(t){return this.attr(\"height\",t)},size:function(t,e){var i=u(this,t,e);return this.width(new a.Number(i.width)).height(new a.Number(i.height))},clone:function(t){this.writeDataToDom();var e=x(this.node.cloneNode(!0));return t?t.add(e):this.after(e),e},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(t){return this.after(t).remove(),t},addTo:function(t){return t.put(this)},putIn:function(t){return t.add(this)},id:function(t){return this.attr(\"id\",t)},show:function(){return this.style(\"display\",\"\")},hide:function(){return this.style(\"display\",\"none\")},visible:function(){return\"none\"!=this.style(\"display\")},toString:function(){return this.attr(\"id\")},classes:function(){var t=this.attr(\"class\");return null==t?[]:t.trim().split(a.regex.delimiter)},hasClass:function(t){return-1!=this.classes().indexOf(t)},addClass:function(t){if(!this.hasClass(t)){var e=this.classes();e.push(t),this.attr(\"class\",e.join(\" \"))}return this},removeClass:function(t){return this.hasClass(t)&&this.attr(\"class\",this.classes().filter((function(e){return e!=t})).join(\" \")),this},toggleClass:function(t){return this.hasClass(t)?this.removeClass(t):this.addClass(t)},reference:function(t){return a.get(this.attr(t))},parent:function(e){var i=this;if(!i.node.parentNode)return null;if(i=a.adopt(i.node.parentNode),!e)return i;for(;i&&i.node instanceof t.SVGElement;){if(\"string\"==typeof e?i.matches(e):i instanceof e)return i;if(!i.node.parentNode||\"#document\"==i.node.parentNode.nodeName)return null;i=a.adopt(i.node.parentNode)}},doc:function(){return this instanceof a.Doc?this:this.parent(a.Doc)},parents:function(t){var e=[],i=this;do{if(!(i=i.parent(t))||!i.node)break;e.push(i)}while(i.parent);return e},matches:function(t){return function(t,e){return(t.matches||t.matchesSelector||t.msMatchesSelector||t.mozMatchesSelector||t.webkitMatchesSelector||t.oMatchesSelector).call(t,e)}(this.node,t)},native:function(){return this.node},svg:function(t){var i=e.createElement(\"svg\");if(!(t&&this instanceof a.Parent))return i.appendChild(t=e.createElement(\"svg\")),this.writeDataToDom(),t.appendChild(this.node.cloneNode(!0)),i.innerHTML.replace(/^<svg>/,\"\").replace(/<\\/svg>$/,\"\");i.innerHTML=\"<svg>\"+t.replace(/\\n/,\"\").replace(/<([\\w:-]+)([^<]+?)\\/>/g,\"<$1$2></$1>\")+\"</svg>\";for(var s=0,r=i.firstChild.childNodes.length;s<r;s++)this.node.appendChild(i.firstChild.firstChild);return this},writeDataToDom:function(){return(this.each||this.lines)&&(this.each?this:this.lines()).each((function(){this.writeDataToDom()})),this.node.removeAttribute(\"svgjs:data\"),Object.keys(this.dom).length&&this.node.setAttribute(\"svgjs:data\",JSON.stringify(this.dom)),this},setData:function(t){return this.dom=t,this},is:function(t){return function(t,e){return t instanceof e}(this,t)}}}),a.easing={\"-\":function(t){return t},\"<>\":function(t){return-Math.cos(t*Math.PI)/2+.5},\">\":function(t){return Math.sin(t*Math.PI/2)},\"<\":function(t){return 1-Math.cos(t*Math.PI/2)}},a.morph=function(t){return function(e,i){return new a.MorphObj(e,i).at(t)}},a.Situation=a.invent({create:function(t){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new a.Number(t.duration).valueOf(),this.delay=new a.Number(t.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=t.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),a.FX=a.invent({create:function(t){this._target=t,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(t,e,s){\"object\"===i(t)&&(e=t.ease,s=t.delay,t=t.duration);var r=new a.Situation({duration:t||1e3,delay:s||0,ease:a.easing[e||\"-\"]||e});return this.queue(r),this},target:function(t){return t&&t instanceof a.Element?(this._target=t,this):this._target},timeToAbsPos:function(t){return(t-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(t){return this.situation.duration/this._speed*t+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=t.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){t.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(t){return(\"function\"==typeof t||t instanceof a.Situation)&&this.situations.push(t),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof a.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var t,e=this.situation;if(e.init)return this;for(var i in e.animations){t=this.target()[i](),Array.isArray(t)||(t=[t]),Array.isArray(e.animations[i])||(e.animations[i]=[e.animations[i]]);for(var s=t.length;s--;)e.animations[i][s]instanceof a.Number&&(t[s]=new a.Number(t[s])),e.animations[i][s]=t[s].morph(e.animations[i][s])}for(var i in e.attrs)e.attrs[i]=new a.MorphObj(this.target().attr(i),e.attrs[i]);for(var i in e.styles)e.styles[i]=new a.MorphObj(this.target().style(i),e.styles[i]);return e.initialTransformation=this.target().matrixify(),e.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(t,e){var i=this.active;return this.active=!1,e&&this.clearQueue(),t&&this.situation&&(!i&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},after:function(t){var e=this.last();return this.target().on(\"finished.fx\",(function i(a){a.detail.situation==e&&(t.call(this,e),this.off(\"finished.fx\",i))})),this._callStart()},during:function(t){var e=this.last(),i=function(i){i.detail.situation==e&&t.call(this,i.detail.pos,a.morph(i.detail.pos),i.detail.eased,e)};return this.target().off(\"during.fx\",i).on(\"during.fx\",i),this.after((function(){this.off(\"during.fx\",i)})),this._callStart()},afterAll:function(t){var e=function e(i){t.call(this),this.off(\"allfinished.fx\",e)};return this.target().off(\"allfinished.fx\",e).on(\"allfinished.fx\",e),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(t,e,i){return this.last()[i||\"animations\"][t]=e,this._callStart()},step:function(t){var e,i,a;t||(this.absPos=this.timeToAbsPos(+new Date)),!1!==this.situation.loops?(e=Math.max(this.absPos,0),i=Math.floor(e),!0===this.situation.loops||i<this.situation.loops?(this.pos=e-i,a=this.situation.loop,this.situation.loop=i):(this.absPos=this.situation.loops,this.pos=1,a=this.situation.loop-1,this.situation.loop=this.situation.loops),this.situation.reversing&&(this.situation.reversed=this.situation.reversed!=Boolean((this.situation.loop-a)%2))):(this.absPos=Math.min(this.absPos,1),this.pos=this.absPos),this.pos<0&&(this.pos=0),this.situation.reversed&&(this.pos=1-this.pos);var s=this.situation.ease(this.pos);for(var r in this.situation.once)r>this.lastPos&&r<=s&&(this.situation.once[r].call(this.target(),this.pos,s),delete this.situation.once[r]);return this.active&&this.target().fire(\"during\",{pos:this.pos,eased:s,fx:this,situation:this.situation}),this.situation?(this.eachAt(),1==this.pos&&!this.situation.reversed||this.situation.reversed&&0==this.pos?(this.stopAnimFrame(),this.target().fire(\"finished\",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire(\"allfinished\"),this.situations.length||(this.target().off(\".fx\"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=s,this):this},eachAt:function(){var t,e=this,i=this.target(),s=this.situation;for(var r in s.animations)t=[].concat(s.animations[r]).map((function(t){return\"string\"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i[r].apply(i,t);for(var r in s.attrs)t=[r].concat(s.attrs[r]).map((function(t){return\"string\"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i.attr.apply(i,t);for(var r in s.styles)t=[r].concat(s.styles[r]).map((function(t){return\"string\"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i.style.apply(i,t);if(s.transforms.length){t=s.initialTransformation,r=0;for(var o=s.transforms.length;r<o;r++){var n=s.transforms[r];n instanceof a.Matrix?t=n.relative?t.multiply((new a.Matrix).morph(n).at(s.ease(this.pos))):t.morph(n).at(s.ease(this.pos)):(n.relative||n.undo(t.extract()),t=t.multiply(n.at(s.ease(this.pos))))}i.matrix(t)}return this},once:function(t,e,i){var a=this.last();return i||(t=a.ease(t)),a.once[t]=e,this},_callStart:function(){return setTimeout(function(){this.start()}.bind(this),0),this}},parent:a.Element,construct:{animate:function(t,e,i){return(this.fx||(this.fx=new a.FX(this))).animate(t,e,i)},delay:function(t){return(this.fx||(this.fx=new a.FX(this))).delay(t)},stop:function(t,e){return this.fx&&this.fx.stop(t,e),this},finish:function(){return this.fx&&this.fx.finish(),this}}}),a.MorphObj=a.invent({create:function(t,e){return a.Color.isColor(e)?new a.Color(t).morph(e):a.regex.delimiter.test(t)?a.regex.pathLetters.test(t)?new a.PathArray(t).morph(e):new a.Array(t).morph(e):a.regex.numberAndUnit.test(e)?new a.Number(t).morph(e):(this.value=t,void(this.destination=e))},extend:{at:function(t,e){return e<1?this.value:this.destination},valueOf:function(){return this.value}}}),a.extend(a.FX,{attr:function(t,e,a){if(\"object\"===i(t))for(var s in t)this.attr(s,t[s]);else this.add(t,e,\"attrs\");return this},plot:function(t,e,i,a){return 4==arguments.length?this.plot([t,e,i,a]):this.add(\"plot\",new(this.target().morphArray)(t))}}),a.Box=a.invent({create:function(t,e,s,r){if(!(\"object\"!==i(t)||t instanceof a.Element))return a.Box.call(this,null!=t.left?t.left:t.x,null!=t.top?t.top:t.y,t.width,t.height);var o;4==arguments.length&&(this.x=t,this.y=e,this.width=s,this.height=r),null==(o=this).x&&(o.x=0,o.y=0,o.width=0,o.height=0),o.w=o.width,o.h=o.height,o.x2=o.x+o.width,o.y2=o.y+o.height,o.cx=o.x+o.width/2,o.cy=o.y+o.height/2}}),a.BBox=a.invent({create:function(t){if(a.Box.apply(this,[].slice.call(arguments)),t instanceof a.Element){var i;try{if(!e.documentElement.contains){for(var s=t.node;s.parentNode;)s=s.parentNode;if(s!=e)throw new Error(\"Element not in the dom\")}i=t.node.getBBox()}catch(e){if(t instanceof a.Shape){a.parser.draw||a.prepare();var r=t.clone(a.parser.draw.instance).show();r&&r.node&&\"function\"==typeof r.node.getBBox&&(i=r.node.getBBox()),r&&\"function\"==typeof r.remove&&r.remove()}else i={x:t.node.clientLeft,y:t.node.clientTop,width:t.node.clientWidth,height:t.node.clientHeight}}a.Box.call(this,i)}},inherit:a.Box,parent:a.Element,construct:{bbox:function(){return new a.BBox(this)}}}),a.BBox.prototype.constructor=a.BBox,a.Matrix=a.invent({create:function(t){var e=f([1,0,0,1,0,0]);t=null===t?e:t instanceof a.Element?t.matrixify():\"string\"==typeof t?f(t.split(a.regex.delimiter).map(parseFloat)):6==arguments.length?f([].slice.call(arguments)):Array.isArray(t)?f(t):t&&\"object\"===i(t)?t:e;for(var s=v.length-1;s>=0;--s)this[v[s]]=null!=t[v[s]]?t[v[s]]:e[v[s]]},extend:{extract:function(){var t=p(this,0,1);p(this,1,0);var e=180/Math.PI*Math.atan2(t.y,t.x)-90;return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(e*Math.PI/180)+this.f*Math.sin(e*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(e*Math.PI/180)+this.e*Math.sin(-e*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),rotation:e,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new a.Matrix(this)}},clone:function(){return new a.Matrix(this)},morph:function(t){return this.destination=new a.Matrix(t),this},multiply:function(t){return new a.Matrix(this.native().multiply(function(t){return t instanceof a.Matrix||(t=new a.Matrix(t)),t}(t).native()))},inverse:function(){return new a.Matrix(this.native().inverse())},translate:function(t,e){return new a.Matrix(this.native().translate(t||0,e||0))},native:function(){for(var t=a.parser.native.createSVGMatrix(),e=v.length-1;e>=0;e--)t[v[e]]=this[v[e]];return t},toString:function(){return\"matrix(\"+b(this.a)+\",\"+b(this.b)+\",\"+b(this.c)+\",\"+b(this.d)+\",\"+b(this.e)+\",\"+b(this.f)+\")\"}},parent:a.Element,construct:{ctm:function(){return new a.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof a.Nested){var t=this.rect(1,1),e=t.node.getScreenCTM();return t.remove(),new a.Matrix(e)}return new a.Matrix(this.node.getScreenCTM())}}}),a.Point=a.invent({create:function(t,e){var a;a=Array.isArray(t)?{x:t[0],y:t[1]}:\"object\"===i(t)?{x:t.x,y:t.y}:null!=t?{x:t,y:null!=e?e:t}:{x:0,y:0},this.x=a.x,this.y=a.y},extend:{clone:function(){return new a.Point(this)},morph:function(t,e){return this.destination=new a.Point(t,e),this}}}),a.extend(a.Element,{point:function(t,e){return new a.Point(t,e).transform(this.screenCTM().inverse())}}),a.extend(a.Element,{attr:function(t,e,s){if(null==t){for(t={},s=(e=this.node.attributes).length-1;s>=0;s--)t[e[s].nodeName]=a.regex.isNumber.test(e[s].nodeValue)?parseFloat(e[s].nodeValue):e[s].nodeValue;return t}if(\"object\"===i(t))for(var r in t)this.attr(r,t[r]);else if(null===e)this.node.removeAttribute(t);else{if(null==e)return null==(e=this.node.getAttribute(t))?a.defaults.attrs[t]:a.regex.isNumber.test(e)?parseFloat(e):e;\"stroke-width\"==t?this.attr(\"stroke\",parseFloat(e)>0?this._stroke:null):\"stroke\"==t&&(this._stroke=e),\"fill\"!=t&&\"stroke\"!=t||(a.regex.isImage.test(e)&&(e=this.doc().defs().image(e,0,0)),e instanceof a.Image&&(e=this.doc().defs().pattern(0,0,(function(){this.add(e)})))),\"number\"==typeof e?e=new a.Number(e):a.Color.isColor(e)?e=new a.Color(e):Array.isArray(e)&&(e=new a.Array(e)),\"leading\"==t?this.leading&&this.leading(e):\"string\"==typeof s?this.node.setAttributeNS(s,t,e.toString()):this.node.setAttribute(t,e.toString()),!this.rebuild||\"font-size\"!=t&&\"x\"!=t||this.rebuild(t,e)}return this}}),a.extend(a.Element,{transform:function(t,e){var s;return\"object\"!==i(t)?(s=new a.Matrix(this).extract(),\"string\"==typeof t?s[t]:s):(s=new a.Matrix(this),e=!!e||!!t.relative,null!=t.a&&(s=e?s.multiply(new a.Matrix(t)):new a.Matrix(t)),this.attr(\"transform\",s))}}),a.extend(a.Element,{untransform:function(){return this.attr(\"transform\",null)},matrixify:function(){return(this.attr(\"transform\")||\"\").split(a.regex.transforms).slice(0,-1).map((function(t){var e=t.trim().split(\"(\");return[e[0],e[1].split(a.regex.delimiter).map((function(t){return parseFloat(t)}))]})).reduce((function(t,e){return\"matrix\"==e[0]?t.multiply(f(e[1])):t[e[0]].apply(t,e[1])}),new a.Matrix)},toParent:function(t){if(this==t)return this;var e=this.screenCTM(),i=t.screenCTM().inverse();return this.addTo(t).untransform().transform(i.multiply(e)),this},toDoc:function(){return this.toParent(this.doc())}}),a.Transformation=a.invent({create:function(t,e){if(arguments.length>1&&\"boolean\"!=typeof e)return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(t))for(var a=0,s=this.arguments.length;a<s;++a)this[this.arguments[a]]=t[a];else if(t&&\"object\"===i(t))for(a=0,s=this.arguments.length;a<s;++a)this[this.arguments[a]]=t[this.arguments[a]];this.inversed=!1,!0===e&&(this.inversed=!0)}}),a.Translate=a.invent({parent:a.Matrix,inherit:a.Transformation,create:function(t,e){this.constructor.apply(this,[].slice.call(arguments))},extend:{arguments:[\"transformedX\",\"transformedY\"],method:\"translate\"}}),a.extend(a.Element,{style:function(t,e){if(0==arguments.length)return this.node.style.cssText||\"\";if(arguments.length<2)if(\"object\"===i(t))for(var s in t)this.style(s,t[s]);else{if(!a.regex.isCss.test(t))return this.node.style[c(t)];for(t=t.split(/\\s*;\\s*/).filter((function(t){return!!t})).map((function(t){return t.split(/\\s*:\\s*/)}));e=t.pop();)this.style(e[0],e[1])}else this.node.style[c(t)]=null===e||a.regex.isBlank.test(e)?\"\":e;return this}}),a.Parent=a.invent({create:function(t){this.constructor.call(this,t)},inherit:a.Element,extend:{children:function(){return a.utils.map(a.utils.filterSVGElements(this.node.childNodes),(function(t){return a.adopt(t)}))},add:function(t,e){return null==e?this.node.appendChild(t.node):t.node!=this.node.childNodes[e]&&this.node.insertBefore(t.node,this.node.childNodes[e]),this},put:function(t,e){return this.add(t,e),t},has:function(t){return this.index(t)>=0},index:function(t){return[].slice.call(this.node.childNodes).indexOf(t.node)},get:function(t){return a.adopt(this.node.childNodes[t])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(t,e){for(var i=this.children(),s=0,r=i.length;s<r;s++)i[s]instanceof a.Element&&t.apply(i[s],[s,i]),e&&i[s]instanceof a.Container&&i[s].each(t,e);return this},removeElement:function(t){return this.node.removeChild(t.node),this},clear:function(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return delete this._defs,this},defs:function(){return this.doc().defs()}}}),a.extend(a.Parent,{ungroup:function(t,e){return 0===e||this instanceof a.Defs||this.node==a.parser.draw||(t=t||(this instanceof a.Doc?this:this.parent(a.Parent)),e=e||1/0,this.each((function(){return this instanceof a.Defs?this:this instanceof a.Parent?this.ungroup(t,e-1):this.toParent(t)})),this.node.firstChild||this.remove()),this},flatten:function(t,e){return this.ungroup(t,e)}}),a.Container=a.invent({create:function(t){this.constructor.call(this,t)},inherit:a.Parent}),a.ViewBox=a.invent({parent:a.Container,construct:{}}),[\"click\",\"dblclick\",\"mousedown\",\"mouseup\",\"mouseover\",\"mouseout\",\"mousemove\",\"touchstart\",\"touchmove\",\"touchleave\",\"touchend\",\"touchcancel\"].forEach((function(t){a.Element.prototype[t]=function(e){return a.on(this.node,t,e),this}})),a.listeners=[],a.handlerMap=[],a.listenerId=0,a.on=function(t,e,i,s,r){var o=i.bind(s||t.instance||t),n=(a.handlerMap.indexOf(t)+1||a.handlerMap.push(t))-1,l=e.split(\".\")[0],h=e.split(\".\")[1]||\"*\";a.listeners[n]=a.listeners[n]||{},a.listeners[n][l]=a.listeners[n][l]||{},a.listeners[n][l][h]=a.listeners[n][l][h]||{},i._svgjsListenerId||(i._svgjsListenerId=++a.listenerId),a.listeners[n][l][h][i._svgjsListenerId]=o,t.addEventListener(l,o,r||{passive:!0})},a.off=function(t,e,i){var s=a.handlerMap.indexOf(t),r=e&&e.split(\".\")[0],o=e&&e.split(\".\")[1],n=\"\";if(-1!=s)if(i){if(\"function\"==typeof i&&(i=i._svgjsListenerId),!i)return;a.listeners[s][r]&&a.listeners[s][r][o||\"*\"]&&(t.removeEventListener(r,a.listeners[s][r][o||\"*\"][i],!1),delete a.listeners[s][r][o||\"*\"][i])}else if(o&&r){if(a.listeners[s][r]&&a.listeners[s][r][o]){for(var l in a.listeners[s][r][o])a.off(t,[r,o].join(\".\"),l);delete a.listeners[s][r][o]}}else if(o)for(var h in a.listeners[s])for(var n in a.listeners[s][h])o===n&&a.off(t,[h,o].join(\".\"));else if(r){if(a.listeners[s][r]){for(var n in a.listeners[s][r])a.off(t,[r,n].join(\".\"));delete a.listeners[s][r]}}else{for(var h in a.listeners[s])a.off(t,h);delete a.listeners[s],delete a.handlerMap[s]}},a.extend(a.Element,{on:function(t,e,i,s){return a.on(this.node,t,e,i,s),this},off:function(t,e){return a.off(this.node,t,e),this},fire:function(e,i){return e instanceof t.Event?this.node.dispatchEvent(e):this.node.dispatchEvent(e=new a.CustomEvent(e,{detail:i,cancelable:!0})),this._event=e,this},event:function(){return this._event}}),a.Defs=a.invent({create:\"defs\",inherit:a.Container}),a.G=a.invent({create:\"g\",inherit:a.Container,extend:{x:function(t){return null==t?this.transform(\"x\"):this.transform({x:t-this.x()},!0)}},construct:{group:function(){return this.put(new a.G)}}}),a.Doc=a.invent({create:function(t){t&&(\"svg\"==(t=\"string\"==typeof t?e.getElementById(t):t).nodeName?this.constructor.call(this,t):(this.constructor.call(this,a.create(\"svg\")),t.appendChild(this.node),this.size(\"100%\",\"100%\")),this.namespace().defs())},inherit:a.Container,extend:{namespace:function(){return this.attr({xmlns:a.ns,version:\"1.1\"}).attr(\"xmlns:xlink\",a.xlink,a.xmlns).attr(\"xmlns:svgjs\",a.svgjs,a.xmlns)},defs:function(){var t;return this._defs||((t=this.node.getElementsByTagName(\"defs\")[0])?this._defs=a.adopt(t):this._defs=new a.Defs,this.node.appendChild(this._defs.node)),this._defs},parent:function(){return this.node.parentNode&&\"#document\"!=this.node.parentNode.nodeName?this.node.parentNode:null},remove:function(){return this.parent()&&this.parent().removeChild(this.node),this},clear:function(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return delete this._defs,a.parser.draw&&!a.parser.draw.parentNode&&this.node.appendChild(a.parser.draw),this},clone:function(t){this.writeDataToDom();var e=this.node,i=x(e.cloneNode(!0));return t?(t.node||t).appendChild(i.node):e.parentNode.insertBefore(i.node,e.nextSibling),i}}}),a.extend(a.Element,{}),a.Gradient=a.invent({create:function(t){this.constructor.call(this,a.create(t+\"Gradient\")),this.type=t},inherit:a.Container,extend:{at:function(t,e,i){return this.put(new a.Stop).update(t,e,i)},update:function(t){return this.clear(),\"function\"==typeof t&&t.call(this,this),this},fill:function(){return\"url(#\"+this.id()+\")\"},toString:function(){return this.fill()},attr:function(t,e,i){return\"transform\"==t&&(t=\"gradientTransform\"),a.Container.prototype.attr.call(this,t,e,i)}},construct:{gradient:function(t,e){return this.defs().gradient(t,e)}}}),a.extend(a.Gradient,a.FX,{from:function(t,e){return\"radial\"==(this._target||this).type?this.attr({fx:new a.Number(t),fy:new a.Number(e)}):this.attr({x1:new a.Number(t),y1:new a.Number(e)})},to:function(t,e){return\"radial\"==(this._target||this).type?this.attr({cx:new a.Number(t),cy:new a.Number(e)}):this.attr({x2:new a.Number(t),y2:new a.Number(e)})}}),a.extend(a.Defs,{gradient:function(t,e){return this.put(new a.Gradient(t)).update(e)}}),a.Stop=a.invent({create:\"stop\",inherit:a.Element,extend:{update:function(t){return(\"number\"==typeof t||t instanceof a.Number)&&(t={offset:arguments[0],color:arguments[1],opacity:arguments[2]}),null!=t.opacity&&this.attr(\"stop-opacity\",t.opacity),null!=t.color&&this.attr(\"stop-color\",t.color),null!=t.offset&&this.attr(\"offset\",new a.Number(t.offset)),this}}}),a.Pattern=a.invent({create:\"pattern\",inherit:a.Container,extend:{fill:function(){return\"url(#\"+this.id()+\")\"},update:function(t){return this.clear(),\"function\"==typeof t&&t.call(this,this),this},toString:function(){return this.fill()},attr:function(t,e,i){return\"transform\"==t&&(t=\"patternTransform\"),a.Container.prototype.attr.call(this,t,e,i)}},construct:{pattern:function(t,e,i){return this.defs().pattern(t,e,i)}}}),a.extend(a.Defs,{pattern:function(t,e,i){return this.put(new a.Pattern).update(i).attr({x:0,y:0,width:t,height:e,patternUnits:\"userSpaceOnUse\"})}}),a.Shape=a.invent({create:function(t){this.constructor.call(this,t)},inherit:a.Element}),a.Symbol=a.invent({create:\"symbol\",inherit:a.Container,construct:{symbol:function(){return this.put(new a.Symbol)}}}),a.Use=a.invent({create:\"use\",inherit:a.Shape,extend:{element:function(t,e){return this.attr(\"href\",(e||\"\")+\"#\"+t,a.xlink)}},construct:{use:function(t,e){return this.put(new a.Use).element(t,e)}}}),a.Rect=a.invent({create:\"rect\",inherit:a.Shape,construct:{rect:function(t,e){return this.put(new a.Rect).size(t,e)}}}),a.Circle=a.invent({create:\"circle\",inherit:a.Shape,construct:{circle:function(t){return this.put(new a.Circle).rx(new a.Number(t).divide(2)).move(0,0)}}}),a.extend(a.Circle,a.FX,{rx:function(t){return this.attr(\"r\",t)},ry:function(t){return this.rx(t)}}),a.Ellipse=a.invent({create:\"ellipse\",inherit:a.Shape,construct:{ellipse:function(t,e){return this.put(new a.Ellipse).size(t,e).move(0,0)}}}),a.extend(a.Ellipse,a.Rect,a.FX,{rx:function(t){return this.attr(\"rx\",t)},ry:function(t){return this.attr(\"ry\",t)}}),a.extend(a.Circle,a.Ellipse,{x:function(t){return null==t?this.cx()-this.rx():this.cx(t+this.rx())},y:function(t){return null==t?this.cy()-this.ry():this.cy(t+this.ry())},cx:function(t){return null==t?this.attr(\"cx\"):this.attr(\"cx\",t)},cy:function(t){return null==t?this.attr(\"cy\"):this.attr(\"cy\",t)},width:function(t){return null==t?2*this.rx():this.rx(new a.Number(t).divide(2))},height:function(t){return null==t?2*this.ry():this.ry(new a.Number(t).divide(2))},size:function(t,e){var i=u(this,t,e);return this.rx(new a.Number(i.width).divide(2)).ry(new a.Number(i.height).divide(2))}}),a.Line=a.invent({create:\"line\",inherit:a.Shape,extend:{array:function(){return new a.PointArray([[this.attr(\"x1\"),this.attr(\"y1\")],[this.attr(\"x2\"),this.attr(\"y2\")]])},plot:function(t,e,i,s){return null==t?this.array():(t=void 0!==e?{x1:t,y1:e,x2:i,y2:s}:new a.PointArray(t).toLine(),this.attr(t))},move:function(t,e){return this.attr(this.array().move(t,e).toLine())},size:function(t,e){var i=u(this,t,e);return this.attr(this.array().size(i.width,i.height).toLine())}},construct:{line:function(t,e,i,s){return a.Line.prototype.plot.apply(this.put(new a.Line),null!=t?[t,e,i,s]:[0,0,0,0])}}}),a.Polyline=a.invent({create:\"polyline\",inherit:a.Shape,construct:{polyline:function(t){return this.put(new a.Polyline).plot(t||new a.PointArray)}}}),a.Polygon=a.invent({create:\"polygon\",inherit:a.Shape,construct:{polygon:function(t){return this.put(new a.Polygon).plot(t||new a.PointArray)}}}),a.extend(a.Polyline,a.Polygon,{array:function(){return this._array||(this._array=new a.PointArray(this.attr(\"points\")))},plot:function(t){return null==t?this.array():this.clear().attr(\"points\",\"string\"==typeof t?t:this._array=new a.PointArray(t))},clear:function(){return delete this._array,this},move:function(t,e){return this.attr(\"points\",this.array().move(t,e))},size:function(t,e){var i=u(this,t,e);return this.attr(\"points\",this.array().size(i.width,i.height))}}),a.extend(a.Line,a.Polyline,a.Polygon,{morphArray:a.PointArray,x:function(t){return null==t?this.bbox().x:this.move(t,this.bbox().y)},y:function(t){return null==t?this.bbox().y:this.move(this.bbox().x,t)},width:function(t){var e=this.bbox();return null==t?e.width:this.size(t,e.height)},height:function(t){var e=this.bbox();return null==t?e.height:this.size(e.width,t)}}),a.Path=a.invent({create:\"path\",inherit:a.Shape,extend:{morphArray:a.PathArray,array:function(){return this._array||(this._array=new a.PathArray(this.attr(\"d\")))},plot:function(t){return null==t?this.array():this.clear().attr(\"d\",\"string\"==typeof t?t:this._array=new a.PathArray(t))},clear:function(){return delete this._array,this}},construct:{path:function(t){return this.put(new a.Path).plot(t||new a.PathArray)}}}),a.Image=a.invent({create:\"image\",inherit:a.Shape,extend:{load:function(e){if(!e)return this;var i=this,s=new t.Image;return a.on(s,\"load\",(function(){a.off(s);var t=i.parent(a.Pattern);null!==t&&(0==i.width()&&0==i.height()&&i.size(s.width,s.height),t&&0==t.width()&&0==t.height()&&t.size(i.width(),i.height()),\"function\"==typeof i._loaded&&i._loaded.call(i,{width:s.width,height:s.height,ratio:s.width/s.height,url:e}))})),a.on(s,\"error\",(function(t){a.off(s),\"function\"==typeof i._error&&i._error.call(i,t)})),this.attr(\"href\",s.src=this.src=e,a.xlink)},loaded:function(t){return this._loaded=t,this},error:function(t){return this._error=t,this}},construct:{image:function(t,e,i){return this.put(new a.Image).load(t).size(e||0,i||e||0)}}}),a.Text=a.invent({create:function(){this.constructor.call(this,a.create(\"text\")),this.dom.leading=new a.Number(1.3),this._rebuild=!0,this._build=!1,this.attr(\"font-family\",a.defaults.attrs[\"font-family\"])},inherit:a.Shape,extend:{x:function(t){return null==t?this.attr(\"x\"):this.attr(\"x\",t)},text:function(t){if(void 0===t){t=\"\";for(var e=this.node.childNodes,i=0,s=e.length;i<s;++i)0!=i&&3!=e[i].nodeType&&1==a.adopt(e[i]).dom.newLined&&(t+=\"\\n\"),t+=e[i].textContent;return t}if(this.clear().build(!0),\"function\"==typeof t)t.call(this,this);else{i=0;for(var r=(t=t.split(\"\\n\")).length;i<r;i++)this.tspan(t[i]).newLine()}return this.build(!1).rebuild()},size:function(t){return this.attr(\"font-size\",t).rebuild()},leading:function(t){return null==t?this.dom.leading:(this.dom.leading=new a.Number(t),this.rebuild())},lines:function(){var t=(this.textPath&&this.textPath()||this).node,e=a.utils.map(a.utils.filterSVGElements(t.childNodes),(function(t){return a.adopt(t)}));return new a.Set(e)},rebuild:function(t){if(\"boolean\"==typeof t&&(this._rebuild=t),this._rebuild){var e=this,i=0,s=this.dom.leading*new a.Number(this.attr(\"font-size\"));this.lines().each((function(){this.dom.newLined&&(e.textPath()||this.attr(\"x\",e.attr(\"x\")),\"\\n\"==this.text()?i+=s:(this.attr(\"dy\",s+i),i=0))})),this.fire(\"rebuild\")}return this},build:function(t){return this._build=!!t,this},setData:function(t){return this.dom=t,this.dom.leading=new a.Number(t.leading||1.3),this}},construct:{text:function(t){return this.put(new a.Text).text(t)},plain:function(t){return this.put(new a.Text).plain(t)}}}),a.Tspan=a.invent({create:\"tspan\",inherit:a.Shape,extend:{text:function(t){return null==t?this.node.textContent+(this.dom.newLined?\"\\n\":\"\"):(\"function\"==typeof t?t.call(this,this):this.plain(t),this)},dx:function(t){return this.attr(\"dx\",t)},dy:function(t){return this.attr(\"dy\",t)},newLine:function(){var t=this.parent(a.Text);return this.dom.newLined=!0,this.dy(t.dom.leading*t.attr(\"font-size\")).attr(\"x\",t.x())}}}),a.extend(a.Text,a.Tspan,{plain:function(t){return!1===this._build&&this.clear(),this.node.appendChild(e.createTextNode(t)),this},tspan:function(t){var e=(this.textPath&&this.textPath()||this).node,i=new a.Tspan;return!1===this._build&&this.clear(),e.appendChild(i.node),i.text(t)},clear:function(){for(var t=(this.textPath&&this.textPath()||this).node;t.hasChildNodes();)t.removeChild(t.lastChild);return this},length:function(){return this.node.getComputedTextLength()}}),a.TextPath=a.invent({create:\"textPath\",inherit:a.Parent,parent:a.Text,construct:{morphArray:a.PathArray,array:function(){var t=this.track();return t?t.array():null},plot:function(t){var e=this.track(),i=null;return e&&(i=e.plot(t)),null==t?i:this},track:function(){var t=this.textPath();if(t)return t.reference(\"href\")},textPath:function(){if(this.node.firstChild&&\"textPath\"==this.node.firstChild.nodeName)return a.adopt(this.node.firstChild)}}}),a.Nested=a.invent({create:function(){this.constructor.call(this,a.create(\"svg\")),this.style(\"overflow\",\"visible\")},inherit:a.Container,construct:{nested:function(){return this.put(new a.Nested)}}});var l={stroke:[\"color\",\"width\",\"opacity\",\"linecap\",\"linejoin\",\"miterlimit\",\"dasharray\",\"dashoffset\"],fill:[\"color\",\"opacity\",\"rule\"],prefix:function(t,e){return\"color\"==e?t:t+\"-\"+e}};function h(t,e,i,s){return i+s.replace(a.regex.dots,\" .\")}function c(t){return t.toLowerCase().replace(/-(.)/g,(function(t,e){return e.toUpperCase()}))}function d(t){return t.charAt(0).toUpperCase()+t.slice(1)}function g(t){var e=t.toString(16);return 1==e.length?\"0\"+e:e}function u(t,e,i){if(null==e||null==i){var a=t.bbox();null==e?e=a.width/a.height*i:null==i&&(i=a.height/a.width*e)}return{width:e,height:i}}function p(t,e,i){return{x:e*t.a+i*t.c+0,y:e*t.b+i*t.d+0}}function f(t){return{a:t[0],b:t[1],c:t[2],d:t[3],e:t[4],f:t[5]}}function x(e){for(var i=e.childNodes.length-1;i>=0;i--)e.childNodes[i]instanceof t.SVGElement&&x(e.childNodes[i]);return a.adopt(e).id(a.eid(e.nodeName))}function b(t){return Math.abs(t)>1e-37?t:0}[\"fill\",\"stroke\"].forEach((function(t){var e={};e[t]=function(e){if(void 0===e)return this;if(\"string\"==typeof e||a.Color.isRgb(e)||e&&\"function\"==typeof e.fill)this.attr(t,e);else for(var i=l[t].length-1;i>=0;i--)null!=e[l[t][i]]&&this.attr(l.prefix(t,l[t][i]),e[l[t][i]]);return this},a.extend(a.Element,a.FX,e)})),a.extend(a.Element,a.FX,{translate:function(t,e){return this.transform({x:t,y:e})},matrix:function(t){return this.attr(\"transform\",new a.Matrix(6==arguments.length?[].slice.call(arguments):t))},opacity:function(t){return this.attr(\"opacity\",t)},dx:function(t){return this.x(new a.Number(t).plus(this instanceof a.FX?0:this.x()),!0)},dy:function(t){return this.y(new a.Number(t).plus(this instanceof a.FX?0:this.y()),!0)}}),a.extend(a.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(t){return this.node.getPointAtLength(t)}}),a.Set=a.invent({create:function(t){Array.isArray(t)?this.members=t:this.clear()},extend:{add:function(){for(var t=[].slice.call(arguments),e=0,i=t.length;e<i;e++)this.members.push(t[e]);return this},remove:function(t){var e=this.index(t);return e>-1&&this.members.splice(e,1),this},each:function(t){for(var e=0,i=this.members.length;e<i;e++)t.apply(this.members[e],[e,this.members]);return this},clear:function(){return this.members=[],this},length:function(){return this.members.length},has:function(t){return this.index(t)>=0},index:function(t){return this.members.indexOf(t)},get:function(t){return this.members[t]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members}},construct:{set:function(t){return new a.Set(t)}}}),a.FX.Set=a.invent({create:function(t){this.set=t}}),a.Set.inherit=function(){var t=[];for(var e in a.Shape.prototype)\"function\"==typeof a.Shape.prototype[e]&&\"function\"!=typeof a.Set.prototype[e]&&t.push(e);for(var e in t.forEach((function(t){a.Set.prototype[t]=function(){for(var e=0,i=this.members.length;e<i;e++)this.members[e]&&\"function\"==typeof this.members[e][t]&&this.members[e][t].apply(this.members[e],arguments);return\"animate\"==t?this.fx||(this.fx=new a.FX.Set(this)):this}})),t=[],a.FX.prototype)\"function\"==typeof a.FX.prototype[e]&&\"function\"!=typeof a.FX.Set.prototype[e]&&t.push(e);t.forEach((function(t){a.FX.Set.prototype[t]=function(){for(var e=0,i=this.set.members.length;e<i;e++)this.set.members[e].fx[t].apply(this.set.members[e].fx,arguments);return this}}))},a.extend(a.Element,{}),a.extend(a.Element,{remember:function(t,e){if(\"object\"===i(arguments[0]))for(var a in t)this.remember(a,t[a]);else{if(1==arguments.length)return this.memory()[t];this.memory()[t]=e}return this},forget:function(){if(0==arguments.length)this._memory={};else for(var t=arguments.length-1;t>=0;t--)delete this.memory()[arguments[t]];return this},memory:function(){return this._memory||(this._memory={})}}),a.get=function(t){var i=e.getElementById(function(t){var e=(t||\"\").toString().match(a.regex.reference);if(e)return e[1]}(t)||t);return a.adopt(i)},a.select=function(t,i){return new a.Set(a.utils.map((i||e).querySelectorAll(t),(function(t){return a.adopt(t)})))},a.extend(a.Parent,{select:function(t){return a.select(t,this.node)}});var v=\"abcdef\".split(\"\");if(\"function\"!=typeof t.CustomEvent){var m=function(t,i){i=i||{bubbles:!1,cancelable:!1,detail:void 0};var a=e.createEvent(\"CustomEvent\");return a.initCustomEvent(t,i.bubbles,i.cancelable,i.detail),a};m.prototype=t.Event.prototype,a.CustomEvent=m}else a.CustomEvent=t.CustomEvent;return a},\"function\"==typeof define&&define.amd?define((function(){return Et(zt,zt.document)})):\"object\"===(\"undefined\"==typeof exports?\"undefined\":i(exports))&&\"undefined\"!=typeof module?module.exports=zt.document?Et(zt,zt.document):function(t){return Et(t,t.document)}:zt.SVG=Et(zt,zt.document),\n/*! svg.filter.js - v2.0.2 - 2016-02-24\n* https://github.com/wout/svg.filter.js\n* Copyright (c) 2016 Wout Fierens; Licensed MIT */\nfunction(){SVG.Filter=SVG.invent({create:\"filter\",inherit:SVG.Parent,extend:{source:\"SourceGraphic\",sourceAlpha:\"SourceAlpha\",background:\"BackgroundImage\",backgroundAlpha:\"BackgroundAlpha\",fill:\"FillPaint\",stroke:\"StrokePaint\",autoSetIn:!0,put:function(t,e){return this.add(t,e),!t.attr(\"in\")&&this.autoSetIn&&t.attr(\"in\",this.source),t.attr(\"result\")||t.attr(\"result\",t),t},blend:function(t,e,i){return this.put(new SVG.BlendEffect(t,e,i))},colorMatrix:function(t,e){return this.put(new SVG.ColorMatrixEffect(t,e))},convolveMatrix:function(t){return this.put(new SVG.ConvolveMatrixEffect(t))},componentTransfer:function(t){return this.put(new SVG.ComponentTransferEffect(t))},composite:function(t,e,i){return this.put(new SVG.CompositeEffect(t,e,i))},flood:function(t,e){return this.put(new SVG.FloodEffect(t,e))},offset:function(t,e){return this.put(new SVG.OffsetEffect(t,e))},image:function(t){return this.put(new SVG.ImageEffect(t))},merge:function(){var t=[void 0];for(var e in arguments)t.push(arguments[e]);return this.put(new(SVG.MergeEffect.bind.apply(SVG.MergeEffect,t)))},gaussianBlur:function(t,e){return this.put(new SVG.GaussianBlurEffect(t,e))},morphology:function(t,e){return this.put(new SVG.MorphologyEffect(t,e))},diffuseLighting:function(t,e,i){return this.put(new SVG.DiffuseLightingEffect(t,e,i))},displacementMap:function(t,e,i,a,s){return this.put(new SVG.DisplacementMapEffect(t,e,i,a,s))},specularLighting:function(t,e,i,a){return this.put(new SVG.SpecularLightingEffect(t,e,i,a))},tile:function(){return this.put(new SVG.TileEffect)},turbulence:function(t,e,i,a,s){return this.put(new SVG.TurbulenceEffect(t,e,i,a,s))},toString:function(){return\"url(#\"+this.attr(\"id\")+\")\"}}}),SVG.extend(SVG.Defs,{filter:function(t){var e=this.put(new SVG.Filter);return\"function\"==typeof t&&t.call(e,e),e}}),SVG.extend(SVG.Container,{filter:function(t){return this.defs().filter(t)}}),SVG.extend(SVG.Element,SVG.G,SVG.Nested,{filter:function(t){return this.filterer=t instanceof SVG.Element?t:this.doc().filter(t),this.doc()&&this.filterer.doc()!==this.doc()&&this.doc().defs().add(this.filterer),this.attr(\"filter\",this.filterer),this.filterer},unfilter:function(t){return this.filterer&&!0===t&&this.filterer.remove(),delete this.filterer,this.attr(\"filter\",null)}}),SVG.Effect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result=\"'+this.attr(\"in\")+'\"]').get(0)||this.attr(\"in\"):this.attr(\"in\",t)},result:function(t){return null==t?this.attr(\"result\"):this.attr(\"result\",t)},toString:function(){return this.result()}}}),SVG.ParentEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Parent,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result=\"'+this.attr(\"in\")+'\"]').get(0)||this.attr(\"in\"):this.attr(\"in\",t)},result:function(t){return null==t?this.attr(\"result\"):this.attr(\"result\",t)},toString:function(){return this.result()}}});var t={blend:function(t,e){return this.parent()&&this.parent().blend(this,t,e)},colorMatrix:function(t,e){return this.parent()&&this.parent().colorMatrix(t,e).in(this)},convolveMatrix:function(t){return this.parent()&&this.parent().convolveMatrix(t).in(this)},componentTransfer:function(t){return this.parent()&&this.parent().componentTransfer(t).in(this)},composite:function(t,e){return this.parent()&&this.parent().composite(this,t,e)},flood:function(t,e){return this.parent()&&this.parent().flood(t,e)},offset:function(t,e){return this.parent()&&this.parent().offset(t,e).in(this)},image:function(t){return this.parent()&&this.parent().image(t)},merge:function(){return this.parent()&&this.parent().merge.apply(this.parent(),[this].concat(arguments))},gaussianBlur:function(t,e){return this.parent()&&this.parent().gaussianBlur(t,e).in(this)},morphology:function(t,e){return this.parent()&&this.parent().morphology(t,e).in(this)},diffuseLighting:function(t,e,i){return this.parent()&&this.parent().diffuseLighting(t,e,i).in(this)},displacementMap:function(t,e,i,a){return this.parent()&&this.parent().displacementMap(this,t,e,i,a)},specularLighting:function(t,e,i,a){return this.parent()&&this.parent().specularLighting(t,e,i,a).in(this)},tile:function(){return this.parent()&&this.parent().tile().in(this)},turbulence:function(t,e,i,a,s){return this.parent()&&this.parent().turbulence(t,e,i,a,s).in(this)}};SVG.extend(SVG.Effect,t),SVG.extend(SVG.ParentEffect,t),SVG.ChildEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){this.attr(\"in\",t)}}});var e={blend:function(t,e,i){this.attr({in:t,in2:e,mode:i||\"normal\"})},colorMatrix:function(t,e){\"matrix\"==t&&(e=s(e)),this.attr({type:t,values:void 0===e?null:e})},convolveMatrix:function(t){t=s(t),this.attr({order:Math.sqrt(t.split(\" \").length),kernelMatrix:t})},composite:function(t,e,i){this.attr({in:t,in2:e,operator:i})},flood:function(t,e){this.attr(\"flood-color\",t),null!=e&&this.attr(\"flood-opacity\",e)},offset:function(t,e){this.attr({dx:t,dy:e})},image:function(t){this.attr(\"href\",t,SVG.xlink)},displacementMap:function(t,e,i,a,s){this.attr({in:t,in2:e,scale:i,xChannelSelector:a,yChannelSelector:s})},gaussianBlur:function(t,e){null!=t||null!=e?this.attr(\"stdDeviation\",function(t){if(!Array.isArray(t))return t;for(var e=0,i=t.length,a=[];e<i;e++)a.push(t[e]);return a.join(\" \")}(Array.prototype.slice.call(arguments))):this.attr(\"stdDeviation\",\"0 0\")},morphology:function(t,e){this.attr({operator:t,radius:e})},tile:function(){},turbulence:function(t,e,i,a,s){this.attr({numOctaves:e,seed:i,stitchTiles:a,baseFrequency:t,type:s})}},i={merge:function(){var t;if(arguments[0]instanceof SVG.Set){var e=this;arguments[0].each((function(t){this instanceof SVG.MergeNode?e.put(this):(this instanceof SVG.Effect||this instanceof SVG.ParentEffect)&&e.put(new SVG.MergeNode(this))}))}else{t=Array.isArray(arguments[0])?arguments[0]:arguments;for(var i=0;i<t.length;i++)t[i]instanceof SVG.MergeNode?this.put(t[i]):this.put(new SVG.MergeNode(t[i]))}},componentTransfer:function(t){if(this.rgb=new SVG.Set,[\"r\",\"g\",\"b\",\"a\"].forEach(function(t){this[t]=new(SVG[\"Func\"+t.toUpperCase()])(\"identity\"),this.rgb.add(this[t]),this.node.appendChild(this[t].node)}.bind(this)),t)for(var e in t.rgb&&([\"r\",\"g\",\"b\"].forEach(function(e){this[e].attr(t.rgb)}.bind(this)),delete t.rgb),t)this[e].attr(t[e])},diffuseLighting:function(t,e,i){this.attr({surfaceScale:t,diffuseConstant:e,kernelUnitLength:i})},specularLighting:function(t,e,i,a){this.attr({surfaceScale:t,diffuseConstant:e,specularExponent:i,kernelUnitLength:a})}},a={distantLight:function(t,e){this.attr({azimuth:t,elevation:e})},pointLight:function(t,e,i){this.attr({x:t,y:e,z:i})},spotLight:function(t,e,i,a,s,r){this.attr({x:t,y:e,z:i,pointsAtX:a,pointsAtY:s,pointsAtZ:r})},mergeNode:function(t){this.attr(\"in\",t)}};function s(t){return Array.isArray(t)&&(t=new SVG.Array(t)),t.toString().replace(/^\\s+/,\"\").replace(/\\s+$/,\"\").replace(/\\s+/g,\" \")}function r(){var t=function(){};for(var e in\"function\"==typeof arguments[arguments.length-1]&&(t=arguments[arguments.length-1],Array.prototype.splice.call(arguments,arguments.length-1,1)),arguments)for(var i in arguments[e])t(arguments[e][i],i,arguments[e])}[\"r\",\"g\",\"b\",\"a\"].forEach((function(t){a[\"Func\"+t.toUpperCase()]=function(t){switch(this.attr(\"type\",t),t){case\"table\":this.attr(\"tableValues\",arguments[1]);break;case\"linear\":this.attr(\"slope\",arguments[1]),this.attr(\"intercept\",arguments[2]);break;case\"gamma\":this.attr(\"amplitude\",arguments[1]),this.attr(\"exponent\",arguments[2]),this.attr(\"offset\",arguments[2])}}})),r(e,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i+\"Effect\"]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\"fe\"+i)),t.apply(this,arguments),this.result(this.attr(\"id\")+\"Out\")},inherit:SVG.Effect,extend:{}})})),r(i,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i+\"Effect\"]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\"fe\"+i)),t.apply(this,arguments),this.result(this.attr(\"id\")+\"Out\")},inherit:SVG.ParentEffect,extend:{}})})),r(a,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\"fe\"+i)),t.apply(this,arguments)},inherit:SVG.ChildEffect,extend:{}})})),SVG.extend(SVG.MergeEffect,{in:function(t){return t instanceof SVG.MergeNode?this.add(t,0):this.add(new SVG.MergeNode(t),0),this}}),SVG.extend(SVG.CompositeEffect,SVG.BlendEffect,SVG.DisplacementMapEffect,{in2:function(t){return null==t?this.parent()&&this.parent().select('[result=\"'+this.attr(\"in2\")+'\"]').get(0)||this.attr(\"in2\"):this.attr(\"in2\",t)}}),SVG.filter={sepiatone:[.343,.669,.119,0,0,.249,.626,.13,0,0,.172,.334,.111,0,0,0,0,0,1,0]}}.call(void 0),function(){function t(t,s,r,o,n,l,h){for(var c=t.slice(s,r||h),d=o.slice(n,l||h),g=0,u={pos:[0,0],start:[0,0]},p={pos:[0,0],start:[0,0]};;){if(c[g]=e.call(u,c[g]),d[g]=e.call(p,d[g]),c[g][0]!=d[g][0]||\"M\"==c[g][0]||\"A\"==c[g][0]&&(c[g][4]!=d[g][4]||c[g][5]!=d[g][5])?(Array.prototype.splice.apply(c,[g,1].concat(a.call(u,c[g]))),Array.prototype.splice.apply(d,[g,1].concat(a.call(p,d[g])))):(c[g]=i.call(u,c[g]),d[g]=i.call(p,d[g])),++g==c.length&&g==d.length)break;g==c.length&&c.push([\"C\",u.pos[0],u.pos[1],u.pos[0],u.pos[1],u.pos[0],u.pos[1]]),g==d.length&&d.push([\"C\",p.pos[0],p.pos[1],p.pos[0],p.pos[1],p.pos[0],p.pos[1]])}return{start:c,dest:d}}function e(t){switch(t[0]){case\"z\":case\"Z\":t[0]=\"L\",t[1]=this.start[0],t[2]=this.start[1];break;case\"H\":t[0]=\"L\",t[2]=this.pos[1];break;case\"V\":t[0]=\"L\",t[2]=t[1],t[1]=this.pos[0];break;case\"T\":t[0]=\"Q\",t[3]=t[1],t[4]=t[2],t[1]=this.reflection[1],t[2]=this.reflection[0];break;case\"S\":t[0]=\"C\",t[6]=t[4],t[5]=t[3],t[4]=t[2],t[3]=t[1],t[2]=this.reflection[1],t[1]=this.reflection[0]}return t}function i(t){var e=t.length;return this.pos=[t[e-2],t[e-1]],-1!=\"SCQT\".indexOf(t[0])&&(this.reflection=[2*this.pos[0]-t[e-4],2*this.pos[1]-t[e-3]]),t}function a(t){var e=[t];switch(t[0]){case\"M\":return this.pos=this.start=[t[1],t[2]],e;case\"L\":t[5]=t[3]=t[1],t[6]=t[4]=t[2],t[1]=this.pos[0],t[2]=this.pos[1];break;case\"Q\":t[6]=t[4],t[5]=t[3],t[4]=1*t[4]/3+2*t[2]/3,t[3]=1*t[3]/3+2*t[1]/3,t[2]=1*this.pos[1]/3+2*t[2]/3,t[1]=1*this.pos[0]/3+2*t[1]/3;break;case\"A\":e=function(t,e){var i,a,s,r,o,n,l,h,c,d,g,u,p,f,x,b,v,m,y,w,k,A,S,C,L,P,I=Math.abs(e[1]),T=Math.abs(e[2]),M=e[3]%360,X=e[4],z=e[5],E=e[6],Y=e[7],F=new SVG.Point(t),R=new SVG.Point(E,Y),H=[];if(0===I||0===T||F.x===R.x&&F.y===R.y)return[[\"C\",F.x,F.y,R.x,R.y,R.x,R.y]];i=new SVG.Point((F.x-R.x)/2,(F.y-R.y)/2).transform((new SVG.Matrix).rotate(M)),(a=i.x*i.x/(I*I)+i.y*i.y/(T*T))>1&&(I*=a=Math.sqrt(a),T*=a);s=(new SVG.Matrix).rotate(M).scale(1/I,1/T).rotate(-M),F=F.transform(s),R=R.transform(s),r=[R.x-F.x,R.y-F.y],n=r[0]*r[0]+r[1]*r[1],o=Math.sqrt(n),r[0]/=o,r[1]/=o,l=n<4?Math.sqrt(1-n/4):0,X===z&&(l*=-1);h=new SVG.Point((R.x+F.x)/2+l*-r[1],(R.y+F.y)/2+l*r[0]),c=new SVG.Point(F.x-h.x,F.y-h.y),d=new SVG.Point(R.x-h.x,R.y-h.y),g=Math.acos(c.x/Math.sqrt(c.x*c.x+c.y*c.y)),c.y<0&&(g*=-1);u=Math.acos(d.x/Math.sqrt(d.x*d.x+d.y*d.y)),d.y<0&&(u*=-1);z&&g>u&&(u+=2*Math.PI);!z&&g<u&&(u-=2*Math.PI);for(f=Math.ceil(2*Math.abs(g-u)/Math.PI),b=[],v=g,p=(u-g)/f,x=4*Math.tan(p/4)/3,k=0;k<=f;k++)y=Math.cos(v),m=Math.sin(v),w=new SVG.Point(h.x+y,h.y+m),b[k]=[new SVG.Point(w.x+x*m,w.y-x*y),w,new SVG.Point(w.x-x*m,w.y+x*y)],v+=p;for(b[0][0]=b[0][1].clone(),b[b.length-1][2]=b[b.length-1][1].clone(),s=(new SVG.Matrix).rotate(M).scale(I,T).rotate(-M),k=0,A=b.length;k<A;k++)b[k][0]=b[k][0].transform(s),b[k][1]=b[k][1].transform(s),b[k][2]=b[k][2].transform(s);for(k=1,A=b.length;k<A;k++)S=(w=b[k-1][2]).x,C=w.y,L=(w=b[k][0]).x,P=w.y,E=(w=b[k][1]).x,Y=w.y,H.push([\"C\",S,C,L,P,E,Y]);return H}(this.pos,t),t=e[0]}return t[0]=\"C\",this.pos=[t[5],t[6]],this.reflection=[2*t[5]-t[3],2*t[6]-t[4]],e}function s(t,e){if(!1===e)return!1;for(var i=e,a=t.length;i<a;++i)if(\"M\"==t[i][0])return i;return!1}SVG.extend(SVG.PathArray,{morph:function(e){for(var i=this.value,a=this.parse(e),r=0,o=0,n=!1,l=!1;!1!==r||!1!==o;){var h;n=s(i,!1!==r&&r+1),l=s(a,!1!==o&&o+1),!1===r&&(r=0==(h=new SVG.PathArray(c.start).bbox()).height||0==h.width?i.push(i[0])-1:i.push([\"M\",h.x+h.width/2,h.y+h.height/2])-1),!1===o&&(o=0==(h=new SVG.PathArray(c.dest).bbox()).height||0==h.width?a.push(a[0])-1:a.push([\"M\",h.x+h.width/2,h.y+h.height/2])-1);var c=t(i,r,n,a,o,l);i=i.slice(0,r).concat(c.start,!1===n?[]:i.slice(n)),a=a.slice(0,o).concat(c.dest,!1===l?[]:a.slice(l)),r=!1!==n&&r+c.start.length,o=!1!==l&&o+c.dest.length}return this.value=i,this.destination=new SVG.PathArray,this.destination.value=a,this}})}(),\n/*! svg.draggable.js - v2.2.2 - 2019-01-08\n* https://github.com/svgdotjs/svg.draggable.js\n* Copyright (c) 2019 Wout Fierens; Licensed MIT */\nfunction(){function t(t){t.remember(\"_draggable\",this),this.el=t}t.prototype.init=function(t,e){var i=this;this.constraint=t,this.value=e,this.el.on(\"mousedown.drag\",(function(t){i.start(t)})),this.el.on(\"touchstart.drag\",(function(t){i.start(t)}))},t.prototype.transformPoint=function(t,e){var i=(t=t||window.event).changedTouches&&t.changedTouches[0]||t;return this.p.x=i.clientX-(e||0),this.p.y=i.clientY,this.p.matrixTransform(this.m)},t.prototype.getBBox=function(){var t=this.el.bbox();return this.el instanceof SVG.Nested&&(t=this.el.rbox()),(this.el instanceof SVG.G||this.el instanceof SVG.Use||this.el instanceof SVG.Nested)&&(t.x=this.el.x(),t.y=this.el.y()),t},t.prototype.start=function(t){if(\"click\"!=t.type&&\"mousedown\"!=t.type&&\"mousemove\"!=t.type||1==(t.which||t.buttons)){var e=this;if(this.el.fire(\"beforedrag\",{event:t,handler:this}),!this.el.event().defaultPrevented){t.preventDefault(),t.stopPropagation(),this.parent=this.parent||this.el.parent(SVG.Nested)||this.el.parent(SVG.Doc),this.p=this.parent.node.createSVGPoint(),this.m=this.el.node.getScreenCTM().inverse();var i,a=this.getBBox();if(this.el instanceof SVG.Text)switch(i=this.el.node.getComputedTextLength(),this.el.attr(\"text-anchor\")){case\"middle\":i/=2;break;case\"start\":i=0}this.startPoints={point:this.transformPoint(t,i),box:a,transform:this.el.transform()},SVG.on(window,\"mousemove.drag\",(function(t){e.drag(t)})),SVG.on(window,\"touchmove.drag\",(function(t){e.drag(t)})),SVG.on(window,\"mouseup.drag\",(function(t){e.end(t)})),SVG.on(window,\"touchend.drag\",(function(t){e.end(t)})),this.el.fire(\"dragstart\",{event:t,p:this.startPoints.point,m:this.m,handler:this})}}},t.prototype.drag=function(t){var e=this.getBBox(),i=this.transformPoint(t),a=this.startPoints.box.x+i.x-this.startPoints.point.x,s=this.startPoints.box.y+i.y-this.startPoints.point.y,r=this.constraint,o=i.x-this.startPoints.point.x,n=i.y-this.startPoints.point.y;if(this.el.fire(\"dragmove\",{event:t,p:i,m:this.m,handler:this}),this.el.event().defaultPrevented)return i;if(\"function\"==typeof r){var l=r.call(this.el,a,s,this.m);\"boolean\"==typeof l&&(l={x:l,y:l}),!0===l.x?this.el.x(a):!1!==l.x&&this.el.x(l.x),!0===l.y?this.el.y(s):!1!==l.y&&this.el.y(l.y)}else\"object\"==typeof r&&(null!=r.minX&&a<r.minX?o=(a=r.minX)-this.startPoints.box.x:null!=r.maxX&&a>r.maxX-e.width&&(o=(a=r.maxX-e.width)-this.startPoints.box.x),null!=r.minY&&s<r.minY?n=(s=r.minY)-this.startPoints.box.y:null!=r.maxY&&s>r.maxY-e.height&&(n=(s=r.maxY-e.height)-this.startPoints.box.y),null!=r.snapToGrid&&(a-=a%r.snapToGrid,s-=s%r.snapToGrid,o-=o%r.snapToGrid,n-=n%r.snapToGrid),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:o,y:n},!0):this.el.move(a,s));return i},t.prototype.end=function(t){var e=this.drag(t);this.el.fire(\"dragend\",{event:t,p:e,m:this.m,handler:this}),SVG.off(window,\"mousemove.drag\"),SVG.off(window,\"touchmove.drag\"),SVG.off(window,\"mouseup.drag\"),SVG.off(window,\"touchend.drag\")},SVG.extend(SVG.Element,{draggable:function(e,i){\"function\"!=typeof e&&\"object\"!=typeof e||(i=e,e=!0);var a=this.remember(\"_draggable\")||new t(this);return(e=void 0===e||e)?a.init(i||{},e):(this.off(\"mousedown.drag\"),this.off(\"touchstart.drag\")),this}})}.call(void 0),function(){function t(t){this.el=t,t.remember(\"_selectHandler\",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1},this.pointsList={lt:[0,0],rt:[\"width\",0],rb:[\"width\",\"height\"],lb:[0,\"height\"],t:[\"width\",0],r:[\"width\",\"height\"],b:[\"width\",\"height\"],l:[0,\"height\"]},this.pointCoord=function(t,e,i){var a=\"string\"!=typeof t?t:e[t];return i?a/2:a},this.pointCoords=function(t,e){var i=this.pointsList[t];return{x:this.pointCoord(i[0],e,\"t\"===t||\"b\"===t),y:this.pointCoord(i[1],e,\"r\"===t||\"l\"===t)}}}t.prototype.init=function(t,e){var i=this.el.bbox();this.options={};var a=this.el.selectize.defaults.points;for(var s in this.el.selectize.defaults)this.options[s]=this.el.selectize.defaults[s],void 0!==e[s]&&(this.options[s]=e[s]);var r=[\"points\",\"pointsExclude\"];for(var s in r){var o=this.options[r[s]];\"string\"==typeof o?o=o.length>0?o.split(/\\s*,\\s*/i):[]:\"boolean\"==typeof o&&\"points\"===r[s]&&(o=o?a:[]),this.options[r[s]]=o}this.options.points=[a,this.options.points].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)>-1}))})),this.options.points=[this.options.points,this.options.pointsExclude].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)<0}))})),this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&-1!==[\"line\",\"polyline\",\"polygon\"].indexOf(this.el.type)?this.selectPoints(t):this.selectRect(t),this.observe(),this.cleanup()},t.prototype.selectPoints=function(t){return this.pointSelection.isSelected=t,this.pointSelection.set||(this.pointSelection.set=this.parent.set(),this.drawPoints()),this},t.prototype.getPointArray=function(){var t=this.el.bbox();return this.el.array().valueOf().map((function(e){return[e[0]-t.x,e[1]-t.y]}))},t.prototype.drawPoints=function(){for(var t=this,e=this.getPointArray(),i=0,a=e.length;i<a;++i){var s=function(e){return function(i){(i=i||window.event).preventDefault?i.preventDefault():i.returnValue=!1,i.stopPropagation();var a=i.pageX||i.touches[0].pageX,s=i.pageY||i.touches[0].pageY;t.el.fire(\"point\",{x:a,y:s,i:e,event:i})}}(i),r=this.drawPoint(e[i][0],e[i][1]).addClass(this.options.classPoints).addClass(this.options.classPoints+\"_point\").on(\"touchstart\",s).on(\"mousedown\",s);this.pointSelection.set.add(r)}},t.prototype.drawPoint=function(t,e){var i=this.options.pointType;switch(i){case\"circle\":return this.drawCircle(t,e);case\"rect\":return this.drawRect(t,e);default:if(\"function\"==typeof i)return i.call(this,t,e);throw new Error(\"Unknown \"+i+\" point type!\")}},t.prototype.drawCircle=function(t,e){return this.nested.circle(this.options.pointSize).center(t,e)},t.prototype.drawRect=function(t,e){return this.nested.rect(this.options.pointSize,this.options.pointSize).center(t,e)},t.prototype.updatePointSelection=function(){var t=this.getPointArray();this.pointSelection.set.each((function(e){this.cx()===t[e][0]&&this.cy()===t[e][1]||this.center(t[e][0],t[e][1])}))},t.prototype.updateRectSelection=function(){var t=this,e=this.el.bbox();if(this.rectSelection.set.get(0).attr({width:e.width,height:e.height}),this.options.points.length&&this.options.points.map((function(i,a){var s=t.pointCoords(i,e);t.rectSelection.set.get(a+1).center(s.x,s.y)})),this.options.rotationPoint){var i=this.rectSelection.set.length();this.rectSelection.set.get(i-1).center(e.width/2,20)}},t.prototype.selectRect=function(t){var e=this,i=this.el.bbox();function a(t){return function(i){(i=i||window.event).preventDefault?i.preventDefault():i.returnValue=!1,i.stopPropagation();var a=i.pageX||i.touches[0].pageX,s=i.pageY||i.touches[0].pageY;e.el.fire(t,{x:a,y:s,event:i})}}if(this.rectSelection.isSelected=t,this.rectSelection.set=this.rectSelection.set||this.parent.set(),this.rectSelection.set.get(0)||this.rectSelection.set.add(this.nested.rect(i.width,i.height).addClass(this.options.classRect)),this.options.points.length&&this.rectSelection.set.length()<2){this.options.points.map((function(t,s){var r=e.pointCoords(t,i),o=e.drawPoint(r.x,r.y).attr(\"class\",e.options.classPoints+\"_\"+t).on(\"mousedown\",a(t)).on(\"touchstart\",a(t));e.rectSelection.set.add(o)})),this.rectSelection.set.each((function(){this.addClass(e.options.classPoints)}))}if(this.options.rotationPoint&&(this.options.points&&!this.rectSelection.set.get(9)||!this.options.points&&!this.rectSelection.set.get(1))){var s=function(t){(t=t||window.event).preventDefault?t.preventDefault():t.returnValue=!1,t.stopPropagation();var i=t.pageX||t.touches[0].pageX,a=t.pageY||t.touches[0].pageY;e.el.fire(\"rot\",{x:i,y:a,event:t})},r=this.drawPoint(i.width/2,20).attr(\"class\",this.options.classPoints+\"_rot\").on(\"touchstart\",s).on(\"mousedown\",s);this.rectSelection.set.add(r)}},t.prototype.handler=function(){var t=this.el.bbox();this.nested.matrix(new SVG.Matrix(this.el).translate(t.x,t.y)),this.rectSelection.isSelected&&this.updateRectSelection(),this.pointSelection.isSelected&&this.updatePointSelection()},t.prototype.observe=function(){var t=this;if(MutationObserver)if(this.rectSelection.isSelected||this.pointSelection.isSelected)this.observerInst=this.observerInst||new MutationObserver((function(){t.handler()})),this.observerInst.observe(this.el.node,{attributes:!0});else try{this.observerInst.disconnect(),delete this.observerInst}catch(t){}else this.el.off(\"DOMAttrModified.select\"),(this.rectSelection.isSelected||this.pointSelection.isSelected)&&this.el.on(\"DOMAttrModified.select\",(function(){t.handler()}))},t.prototype.cleanup=function(){!this.rectSelection.isSelected&&this.rectSelection.set&&(this.rectSelection.set.each((function(){this.remove()})),this.rectSelection.set.clear(),delete this.rectSelection.set),!this.pointSelection.isSelected&&this.pointSelection.set&&(this.pointSelection.set.each((function(){this.remove()})),this.pointSelection.set.clear(),delete this.pointSelection.set),this.pointSelection.isSelected||this.rectSelection.isSelected||(this.nested.remove(),delete this.nested)},SVG.extend(SVG.Element,{selectize:function(e,i){return\"object\"==typeof e&&(i=e,e=!0),(this.remember(\"_selectHandler\")||new t(this)).init(void 0===e||e,i||{}),this}}),SVG.Element.prototype.selectize.defaults={points:[\"lt\",\"rt\",\"rb\",\"lb\",\"t\",\"r\",\"b\",\"l\"],pointsExclude:[],classRect:\"svg_select_boundingRect\",classPoints:\"svg_select_points\",pointSize:7,rotationPoint:!0,deepSelect:!1,pointType:\"circle\"}}(),function(){(function(){function t(t){t.remember(\"_resizeHandler\",this),this.el=t,this.parameters={},this.lastUpdateCall=null,this.p=t.doc().node.createSVGPoint()}t.prototype.transformPoint=function(t,e,i){return this.p.x=t-(this.offset.x-window.pageXOffset),this.p.y=e-(this.offset.y-window.pageYOffset),this.p.matrixTransform(i||this.m)},t.prototype._extractPosition=function(t){return{x:null!=t.clientX?t.clientX:t.touches[0].clientX,y:null!=t.clientY?t.clientY:t.touches[0].clientY}},t.prototype.init=function(t){var e=this;if(this.stop(),\"stop\"!==t){for(var i in this.options={},this.el.resize.defaults)this.options[i]=this.el.resize.defaults[i],void 0!==t[i]&&(this.options[i]=t[i]);this.el.on(\"lt.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"rt.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"rb.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"lb.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"t.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"r.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"b.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"l.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"rot.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"point.resize\",(function(t){e.resize(t||window.event)})),this.update()}},t.prototype.stop=function(){return this.el.off(\"lt.resize\"),this.el.off(\"rt.resize\"),this.el.off(\"rb.resize\"),this.el.off(\"lb.resize\"),this.el.off(\"t.resize\"),this.el.off(\"r.resize\"),this.el.off(\"b.resize\"),this.el.off(\"l.resize\"),this.el.off(\"rot.resize\"),this.el.off(\"point.resize\"),this},t.prototype.resize=function(t){var e=this;this.m=this.el.node.getScreenCTM().inverse(),this.offset={x:window.pageXOffset,y:window.pageYOffset};var i=this._extractPosition(t.detail.event);if(this.parameters={type:this.el.type,p:this.transformPoint(i.x,i.y),x:t.detail.x,y:t.detail.y,box:this.el.bbox(),rotation:this.el.transform().rotation},\"text\"===this.el.type&&(this.parameters.fontSize=this.el.attr()[\"font-size\"]),void 0!==t.detail.i){var a=this.el.array().valueOf();this.parameters.i=t.detail.i,this.parameters.pointCoords=[a[t.detail.i][0],a[t.detail.i][1]]}switch(t.type){case\"lt\":this.calc=function(t,e){var i=this.snapToGrid(t,e);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height-i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y+i[1]).size(this.parameters.box.width-i[0],this.parameters.box.height-i[1])}};break;case\"rt\":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height-i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).size(this.parameters.box.width+i[0],this.parameters.box.height-i[1])}};break;case\"rb\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height+i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+i[0],this.parameters.box.height+i[1])}};break;case\"lb\":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height+i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).size(this.parameters.box.width-i[0],this.parameters.box.height+i[1])}};break;case\"t\":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.height-i[1]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).height(this.parameters.box.height-i[1])}};break;case\"r\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+i[0])}};break;case\"b\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.height+i[1]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+i[1])}};break;case\"l\":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).width(this.parameters.box.width-i[0])}};break;case\"rot\":this.calc=function(t,e){var i=t+this.parameters.p.x,a=e+this.parameters.p.y,s=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),r=Math.atan2(a-this.parameters.box.y-this.parameters.box.height/2,i-this.parameters.box.x-this.parameters.box.width/2),o=this.parameters.rotation+180*(r-s)/Math.PI+this.options.snapToAngle/2;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(o-o%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case\"point\":this.calc=function(t,e){var i=this.snapToGrid(t,e,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),a=this.el.array().valueOf();a[this.parameters.i][0]=this.parameters.pointCoords[0]+i[0],a[this.parameters.i][1]=this.parameters.pointCoords[1]+i[1],this.el.plot(a)}}this.el.fire(\"resizestart\",{dx:this.parameters.x,dy:this.parameters.y,event:t}),SVG.on(window,\"touchmove.resize\",(function(t){e.update(t||window.event)})),SVG.on(window,\"touchend.resize\",(function(){e.done()})),SVG.on(window,\"mousemove.resize\",(function(t){e.update(t||window.event)})),SVG.on(window,\"mouseup.resize\",(function(){e.done()}))},t.prototype.update=function(t){if(t){var e=this._extractPosition(t),i=this.transformPoint(e.x,e.y),a=i.x-this.parameters.p.x,s=i.y-this.parameters.p.y;this.lastUpdateCall=[a,s],this.calc(a,s),this.el.fire(\"resizing\",{dx:a,dy:s,event:t})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},t.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,\"mousemove.resize\"),SVG.off(window,\"mouseup.resize\"),SVG.off(window,\"touchmove.resize\"),SVG.off(window,\"touchend.resize\"),this.el.fire(\"resizedone\")},t.prototype.snapToGrid=function(t,e,i,a){var s;return void 0!==a?s=[(i+t)%this.options.snapToGrid,(a+e)%this.options.snapToGrid]:(i=null==i?3:i,s=[(this.parameters.box.x+t+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+e+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),t<0&&(s[0]-=this.options.snapToGrid),e<0&&(s[1]-=this.options.snapToGrid),t-=Math.abs(s[0])<this.options.snapToGrid/2?s[0]:s[0]-(t<0?-this.options.snapToGrid:this.options.snapToGrid),e-=Math.abs(s[1])<this.options.snapToGrid/2?s[1]:s[1]-(e<0?-this.options.snapToGrid:this.options.snapToGrid),this.constraintToBox(t,e,i,a)},t.prototype.constraintToBox=function(t,e,i,a){var s,r,o=this.options.constraint||{};return void 0!==a?(s=i,r=a):(s=this.parameters.box.x+(1&i?0:this.parameters.box.width),r=this.parameters.box.y+(2&i?0:this.parameters.box.height)),void 0!==o.minX&&s+t<o.minX&&(t=o.minX-s),void 0!==o.maxX&&s+t>o.maxX&&(t=o.maxX-s),void 0!==o.minY&&r+e<o.minY&&(e=o.minY-r),void 0!==o.maxY&&r+e>o.maxY&&(e=o.maxY-r),[t,e]},t.prototype.checkAspectRatio=function(t,e){if(!this.options.saveAspectRatio)return t;var i=t.slice(),a=this.parameters.box.width/this.parameters.box.height,s=this.parameters.box.width+t[0],r=this.parameters.box.height-t[1],o=s/r;return o<a?(i[1]=s/a-this.parameters.box.height,e&&(i[1]=-i[1])):o>a&&(i[0]=this.parameters.box.width-r*a,e&&(i[0]=-i[0])),i},SVG.extend(SVG.Element,{resize:function(e){return(this.remember(\"_resizeHandler\")||new t(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}(),void 0===window.Apex&&(window.Apex={});var Ot=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"initModules\",value:function(){this.ctx.publicMethods=[\"updateOptions\",\"updateSeries\",\"appendData\",\"appendSeries\",\"toggleSeries\",\"showSeries\",\"hideSeries\",\"setLocale\",\"resetSeries\",\"zoomX\",\"toggleDataPointSelection\",\"dataURI\",\"exportToCSV\",\"addXaxisAnnotation\",\"addYaxisAnnotation\",\"addPointAnnotation\",\"clearAnnotations\",\"removeAnnotation\",\"paper\",\"destroy\"],this.ctx.eventList=[\"click\",\"mousedown\",\"mousemove\",\"mouseleave\",\"touchstart\",\"touchmove\",\"touchleave\",\"mouseup\",\"touchend\"],this.ctx.animations=new b(this.ctx),this.ctx.axes=new J(this.ctx),this.ctx.core=new Ht(this.ctx.el,this.ctx),this.ctx.config=new E({}),this.ctx.data=new W(this.ctx),this.ctx.grid=new j(this.ctx),this.ctx.graphics=new m(this.ctx),this.ctx.coreUtils=new y(this.ctx),this.ctx.crosshairs=new Q(this.ctx),this.ctx.events=new Z(this.ctx),this.ctx.exports=new G(this.ctx),this.ctx.localization=new $(this.ctx),this.ctx.options=new L,this.ctx.responsive=new K(this.ctx),this.ctx.series=new N(this.ctx),this.ctx.theme=new tt(this.ctx),this.ctx.formatters=new T(this.ctx),this.ctx.titleSubtitle=new et(this.ctx),this.ctx.legend=new lt(this.ctx),this.ctx.toolbar=new ht(this.ctx),this.ctx.tooltip=new bt(this.ctx),this.ctx.dimensions=new ot(this.ctx),this.ctx.updateHelpers=new Dt(this.ctx),this.ctx.zoomPanSelection=new ct(this.ctx),this.ctx.w.globals.tooltip=new bt(this.ctx)}}]),t}(),Nt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"clear\",value:function(t){var e=t.isUpdating;this.ctx.zoomPanSelection&&this.ctx.zoomPanSelection.destroy(),this.ctx.toolbar&&this.ctx.toolbar.destroy(),this.ctx.animations=null,this.ctx.axes=null,this.ctx.annotations=null,this.ctx.core=null,this.ctx.data=null,this.ctx.grid=null,this.ctx.series=null,this.ctx.responsive=null,this.ctx.theme=null,this.ctx.formatters=null,this.ctx.titleSubtitle=null,this.ctx.legend=null,this.ctx.dimensions=null,this.ctx.options=null,this.ctx.crosshairs=null,this.ctx.zoomPanSelection=null,this.ctx.updateHelpers=null,this.ctx.toolbar=null,this.ctx.localization=null,this.ctx.w.globals.tooltip=null,this.clearDomElements({isUpdating:e})}},{key:\"killSVG\",value:function(t){t.each((function(t,e){this.removeClass(\"*\"),this.off(),this.stop()}),!0),t.ungroup(),t.clear()}},{key:\"clearDomElements\",value:function(t){var e=this,i=t.isUpdating,a=this.w.globals.dom.Paper.node;a.parentNode&&a.parentNode.parentNode&&!i&&(a.parentNode.parentNode.style.minHeight=\"unset\");var s=this.w.globals.dom.baseEl;s&&this.ctx.eventList.forEach((function(t){s.removeEventListener(t,e.ctx.events.documentEvent)}));var r=this.w.globals.dom;if(null!==this.ctx.el)for(;this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild);this.killSVG(r.Paper),r.Paper.remove(),r.elWrap=null,r.elGraphical=null,r.elLegendWrap=null,r.elLegendForeign=null,r.baseEl=null,r.elGridRect=null,r.elGridRectMask=null,r.elGridRectMarkerMask=null,r.elForecastMask=null,r.elNonForecastMask=null,r.elDefs=null}}]),t}(),Wt=new WeakMap;var Bt=function(){function t(e,i){a(this,t),this.opts=i,this.ctx=this,this.w=new F(i).init(),this.el=e,this.w.globals.cuid=x.randomId(),this.w.globals.chartID=this.w.config.chart.id?x.escapeString(this.w.config.chart.id):this.w.globals.cuid,new Ot(this).initModules(),this.create=x.bind(this.create,this),this.windowResizeHandler=this._windowResizeHandler.bind(this),this.parentResizeHandler=this._parentResizeCallback.bind(this)}return r(t,[{key:\"render\",value:function(){var t=this;return new Promise((function(e,i){if(null!==t.el){void 0===Apex._chartInstances&&(Apex._chartInstances=[]),t.w.config.chart.id&&Apex._chartInstances.push({id:t.w.globals.chartID,group:t.w.config.chart.group,chart:t}),t.setLocale(t.w.config.chart.defaultLocale);var a=t.w.config.chart.events.beforeMount;if(\"function\"==typeof a&&a(t,t.w),t.events.fireEvent(\"beforeMount\",[t,t.w]),window.addEventListener(\"resize\",t.windowResizeHandler),function(t,e){var i=!1;if(t.nodeType!==Node.DOCUMENT_FRAGMENT_NODE){var a=t.getBoundingClientRect();\"none\"!==t.style.display&&0!==a.width||(i=!0)}var s=new ResizeObserver((function(a){i&&e.call(t,a),i=!0}));t.nodeType===Node.DOCUMENT_FRAGMENT_NODE?Array.from(t.children).forEach((function(t){return s.observe(t)})):s.observe(t),Wt.set(e,s)}(t.el.parentNode,t.parentResizeHandler),!t.css){var s=t.el.getRootNode&&t.el.getRootNode(),r=x.is(\"ShadowRoot\",s),o=t.el.ownerDocument,n=o.getElementById(\"apexcharts-css\");!r&&n||(t.css=document.createElement(\"style\"),t.css.id=\"apexcharts-css\",t.css.textContent='@keyframes opaque {\\n  0% {\\n      opacity: 0\\n  }\\n\\n  to {\\n      opacity: 1\\n  }\\n}\\n\\n@keyframes resizeanim {\\n  0%,to {\\n      opacity: 0\\n  }\\n}\\n\\n.apexcharts-canvas {\\n  position: relative;\\n  user-select: none\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar {\\n  -webkit-appearance: none;\\n  width: 6px\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\\n  border-radius: 4px;\\n  background-color: rgba(0,0,0,.5);\\n  box-shadow: 0 0 1px rgba(255,255,255,.5);\\n  -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5)\\n}\\n\\n.apexcharts-inner {\\n  position: relative\\n}\\n\\n.apexcharts-text tspan {\\n  font-family: inherit\\n}\\n\\n.legend-mouseover-inactive {\\n  transition: .15s ease all;\\n  opacity: .2\\n}\\n\\n.apexcharts-legend-text {\\n  padding-left: 15px;\\n  margin-left: -15px;\\n}\\n\\n.apexcharts-series-collapsed {\\n  opacity: 0\\n}\\n\\n.apexcharts-tooltip {\\n  border-radius: 5px;\\n  box-shadow: 2px 2px 6px -4px #999;\\n  cursor: default;\\n  font-size: 14px;\\n  left: 62px;\\n  opacity: 0;\\n  pointer-events: none;\\n  position: absolute;\\n  top: 20px;\\n  display: flex;\\n  flex-direction: column;\\n  overflow: hidden;\\n  white-space: nowrap;\\n  z-index: 12;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-tooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light {\\n  border: 1px solid #e3e3e3;\\n  background: rgba(255,255,255,.96)\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-dark {\\n  color: #fff;\\n  background: rgba(30,30,30,.8)\\n}\\n\\n.apexcharts-tooltip * {\\n  font-family: inherit\\n}\\n\\n.apexcharts-tooltip-title {\\n  padding: 6px;\\n  font-size: 15px;\\n  margin-bottom: 4px\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {\\n  background: #eceff1;\\n  border-bottom: 1px solid #ddd\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\\n  background: rgba(0,0,0,.7);\\n  border-bottom: 1px solid #333\\n}\\n\\n.apexcharts-tooltip-text-goals-value,.apexcharts-tooltip-text-y-value,.apexcharts-tooltip-text-z-value {\\n  display: inline-block;\\n  margin-left: 5px;\\n  font-weight: 600\\n}\\n\\n.apexcharts-tooltip-text-goals-label:empty,.apexcharts-tooltip-text-goals-value:empty,.apexcharts-tooltip-text-y-label:empty,.apexcharts-tooltip-text-y-value:empty,.apexcharts-tooltip-text-z-value:empty,.apexcharts-tooltip-title:empty {\\n  display: none\\n}\\n\\n.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-tooltip-goals-group,.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\\n  display: flex\\n}\\n\\n.apexcharts-tooltip-text-goals-label:not(:empty),.apexcharts-tooltip-text-goals-value:not(:empty) {\\n  margin-top: -6px\\n}\\n\\n.apexcharts-tooltip-marker {\\n  width: 12px;\\n  height: 12px;\\n  position: relative;\\n  top: 0;\\n  margin-right: 10px;\\n  border-radius: 50%\\n}\\n\\n.apexcharts-tooltip-series-group {\\n  padding: 0 10px;\\n  display: none;\\n  text-align: left;\\n  justify-content: left;\\n  align-items: center\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\\n  opacity: 1\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active,.apexcharts-tooltip-series-group:last-child {\\n  padding-bottom: 4px\\n}\\n\\n.apexcharts-tooltip-series-group-hidden {\\n  opacity: 0;\\n  height: 0;\\n  line-height: 0;\\n  padding: 0!important\\n}\\n\\n.apexcharts-tooltip-y-group {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-custom-tooltip,.apexcharts-tooltip-box {\\n  padding: 4px 8px\\n}\\n\\n.apexcharts-tooltip-boxPlot {\\n  display: flex;\\n  flex-direction: column-reverse\\n}\\n\\n.apexcharts-tooltip-box>div {\\n  margin: 4px 0\\n}\\n\\n.apexcharts-tooltip-box span.value {\\n  font-weight: 700\\n}\\n\\n.apexcharts-tooltip-rangebar {\\n  padding: 5px 8px\\n}\\n\\n.apexcharts-tooltip-rangebar .category {\\n  font-weight: 600;\\n  color: #777\\n}\\n\\n.apexcharts-tooltip-rangebar .series-name {\\n  font-weight: 700;\\n  display: block;\\n  margin-bottom: 5px\\n}\\n\\n.apexcharts-xaxistooltip,.apexcharts-yaxistooltip {\\n  opacity: 0;\\n  pointer-events: none;\\n  color: #373d3f;\\n  font-size: 13px;\\n  text-align: center;\\n  border-radius: 2px;\\n  position: absolute;\\n  z-index: 10;\\n  background: #eceff1;\\n  border: 1px solid #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip {\\n  padding: 9px 10px;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-theme-dark {\\n  background: rgba(0,0,0,.7);\\n  border: 1px solid rgba(0,0,0,.5);\\n  color: #fff\\n}\\n\\n.apexcharts-xaxistooltip:after,.apexcharts-xaxistooltip:before {\\n  left: 50%;\\n  border: solid transparent;\\n  content: \" \";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n.apexcharts-xaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-left: -6px\\n}\\n\\n.apexcharts-xaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 7px;\\n  margin-left: -7px\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after,.apexcharts-xaxistooltip-bottom:before {\\n  bottom: 100%\\n}\\n\\n.apexcharts-xaxistooltip-top:after,.apexcharts-xaxistooltip-top:before {\\n  top: 100%\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after {\\n  border-bottom-color: #eceff1\\n}\\n\\n.apexcharts-xaxistooltip-bottom:before {\\n  border-bottom-color: #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {\\n  border-bottom-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-xaxistooltip-top:after {\\n  border-top-color: #eceff1\\n}\\n\\n.apexcharts-xaxistooltip-top:before {\\n  border-top-color: #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {\\n  border-top-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-yaxistooltip {\\n  padding: 4px 10px\\n}\\n\\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\\n  background: rgba(0,0,0,.7);\\n  border: 1px solid rgba(0,0,0,.5);\\n  color: #fff\\n}\\n\\n.apexcharts-yaxistooltip:after,.apexcharts-yaxistooltip:before {\\n  top: 50%;\\n  border: solid transparent;\\n  content: \" \";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n.apexcharts-yaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-top: -6px\\n}\\n\\n.apexcharts-yaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 7px;\\n  margin-top: -7px\\n}\\n\\n.apexcharts-yaxistooltip-left:after,.apexcharts-yaxistooltip-left:before {\\n  left: 100%\\n}\\n\\n.apexcharts-yaxistooltip-right:after,.apexcharts-yaxistooltip-right:before {\\n  right: 100%\\n}\\n\\n.apexcharts-yaxistooltip-left:after {\\n  border-left-color: #eceff1\\n}\\n\\n.apexcharts-yaxistooltip-left:before {\\n  border-left-color: #90a4ae\\n}\\n\\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {\\n  border-left-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-yaxistooltip-right:after {\\n  border-right-color: #eceff1\\n}\\n\\n.apexcharts-yaxistooltip-right:before {\\n  border-right-color: #90a4ae\\n}\\n\\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {\\n  border-right-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-yaxistooltip.apexcharts-active {\\n  opacity: 1\\n}\\n\\n.apexcharts-yaxistooltip-hidden {\\n  display: none\\n}\\n\\n.apexcharts-xcrosshairs,.apexcharts-ycrosshairs {\\n  pointer-events: none;\\n  opacity: 0;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xcrosshairs.apexcharts-active,.apexcharts-ycrosshairs.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-ycrosshairs-hidden {\\n  opacity: 0\\n}\\n\\n.apexcharts-selection-rect {\\n  cursor: move\\n}\\n\\n.svg_select_boundingRect,.svg_select_points_rot {\\n  pointer-events: none;\\n  opacity: 0;\\n  visibility: hidden\\n}\\n\\n.apexcharts-selection-rect+g .svg_select_boundingRect,.apexcharts-selection-rect+g .svg_select_points_rot {\\n  opacity: 0;\\n  visibility: hidden\\n}\\n\\n.apexcharts-selection-rect+g .svg_select_points_l,.apexcharts-selection-rect+g .svg_select_points_r {\\n  cursor: ew-resize;\\n  opacity: 1;\\n  visibility: visible\\n}\\n\\n.svg_select_points {\\n  fill: #efefef;\\n  stroke: #333;\\n  rx: 2\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-zoom {\\n  cursor: crosshair\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\\n  cursor: move\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-pan-icon,.apexcharts-reset-icon,.apexcharts-selection-icon,.apexcharts-toolbar-custom-icon,.apexcharts-zoom-icon,.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {\\n  cursor: pointer;\\n  width: 20px;\\n  height: 20px;\\n  line-height: 24px;\\n  color: #6e8192;\\n  text-align: center\\n}\\n\\n.apexcharts-menu-icon svg,.apexcharts-reset-icon svg,.apexcharts-zoom-icon svg,.apexcharts-zoomin-icon svg,.apexcharts-zoomout-icon svg {\\n  fill: #6e8192\\n}\\n\\n.apexcharts-selection-icon svg {\\n  fill: #444;\\n  transform: scale(.76)\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-icon svg,.apexcharts-theme-dark .apexcharts-pan-icon svg,.apexcharts-theme-dark .apexcharts-reset-icon svg,.apexcharts-theme-dark .apexcharts-selection-icon svg,.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg,.apexcharts-theme-dark .apexcharts-zoom-icon svg,.apexcharts-theme-dark .apexcharts-zoomin-icon svg,.apexcharts-theme-dark .apexcharts-zoomout-icon svg {\\n  fill: #f3f4f5\\n}\\n\\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg {\\n  fill: #008ffb\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-icon:hover svg,.apexcharts-theme-light .apexcharts-reset-icon:hover svg,.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg {\\n  fill: #333\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-selection-icon {\\n  position: relative\\n}\\n\\n.apexcharts-reset-icon {\\n  margin-left: 5px\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-reset-icon,.apexcharts-zoom-icon {\\n  transform: scale(.85)\\n}\\n\\n.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {\\n  transform: scale(.7)\\n}\\n\\n.apexcharts-zoomout-icon {\\n  margin-right: 3px\\n}\\n\\n.apexcharts-pan-icon {\\n  transform: scale(.62);\\n  position: relative;\\n  left: 1px;\\n  top: 0\\n}\\n\\n.apexcharts-pan-icon svg {\\n  fill: #fff;\\n  stroke: #6e8192;\\n  stroke-width: 2\\n}\\n\\n.apexcharts-pan-icon.apexcharts-selected svg {\\n  stroke: #008ffb\\n}\\n\\n.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {\\n  stroke: #333\\n}\\n\\n.apexcharts-toolbar {\\n  position: absolute;\\n  z-index: 11;\\n  max-width: 176px;\\n  text-align: right;\\n  border-radius: 3px;\\n  padding: 0 6px 2px;\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center\\n}\\n\\n.apexcharts-menu {\\n  background: #fff;\\n  position: absolute;\\n  top: 100%;\\n  border: 1px solid #ddd;\\n  border-radius: 3px;\\n  padding: 3px;\\n  right: 10px;\\n  opacity: 0;\\n  min-width: 110px;\\n  transition: .15s ease all;\\n  pointer-events: none\\n}\\n\\n.apexcharts-menu.apexcharts-menu-open {\\n  opacity: 1;\\n  pointer-events: all;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-menu-item {\\n  padding: 6px 7px;\\n  font-size: 12px;\\n  cursor: pointer\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-item:hover {\\n  background: #eee\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu {\\n  background: rgba(0,0,0,.7);\\n  color: #fff\\n}\\n\\n@media screen and (min-width:768px) {\\n  .apexcharts-canvas:hover .apexcharts-toolbar {\\n      opacity: 1\\n  }\\n}\\n\\n.apexcharts-canvas .apexcharts-element-hidden,.apexcharts-datalabel.apexcharts-element-hidden,.apexcharts-hide .apexcharts-series-points {\\n  opacity: 0\\n}\\n\\n.apexcharts-hidden-element-shown {\\n  opacity: 1;\\n  transition: 0.25s ease all;\\n}\\n.apexcharts-datalabel,.apexcharts-datalabel-label,.apexcharts-datalabel-value,.apexcharts-datalabels,.apexcharts-pie-label {\\n  cursor: default;\\n  pointer-events: none\\n}\\n\\n.apexcharts-pie-label-delay {\\n  opacity: 0;\\n  animation-name: opaque;\\n  animation-duration: .3s;\\n  animation-fill-mode: forwards;\\n  animation-timing-function: ease\\n}\\n\\n.apexcharts-annotation-rect,.apexcharts-area-series .apexcharts-area,.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-gridline,.apexcharts-line,.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-point-annotation-label,.apexcharts-radar-series path,.apexcharts-radar-series polygon,.apexcharts-toolbar svg,.apexcharts-tooltip .apexcharts-marker,.apexcharts-xaxis-annotation-label,.apexcharts-yaxis-annotation-label,.apexcharts-zoom-rect {\\n  pointer-events: none\\n}\\n\\n.apexcharts-marker {\\n  transition: .15s ease all\\n}\\n\\n.resize-triggers {\\n  animation: 1ms resizeanim;\\n  visibility: hidden;\\n  opacity: 0;\\n  height: 100%;\\n  width: 100%;\\n  overflow: hidden\\n}\\n\\n.contract-trigger:before,.resize-triggers,.resize-triggers>div {\\n  content: \" \";\\n  display: block;\\n  position: absolute;\\n  top: 0;\\n  left: 0\\n}\\n\\n.resize-triggers>div {\\n  height: 100%;\\n  width: 100%;\\n  background: #eee;\\n  overflow: auto\\n}\\n\\n.contract-trigger:before {\\n  overflow: hidden;\\n  width: 200%;\\n  height: 200%\\n}\\n',r?s.prepend(t.css):o.head.appendChild(t.css))}var l=t.create(t.w.config.series,{});if(!l)return e(t);t.mount(l).then((function(){\"function\"==typeof t.w.config.chart.events.mounted&&t.w.config.chart.events.mounted(t,t.w),t.events.fireEvent(\"mounted\",[t,t.w]),e(l)})).catch((function(t){i(t)}))}else i(new Error(\"Element not found\"))}))}},{key:\"create\",value:function(t,e){var i=this.w;new Ot(this).initModules();var a=this.w.globals;(a.noData=!1,a.animationEnded=!1,this.responsive.checkResponsiveConfig(e),i.config.xaxis.convertedCatToNumeric)&&new z(i.config).convertCatToNumericXaxis(i.config,this.ctx);if(null===this.el)return a.animationEnded=!0,null;if(this.core.setupElements(),\"treemap\"===i.config.chart.type&&(i.config.grid.show=!1,i.config.yaxis[0].show=!1),0===a.svgWidth)return a.animationEnded=!0,null;var s=y.checkComboSeries(t);a.comboCharts=s.comboCharts,a.comboBarCount=s.comboBarCount;var r=t.every((function(t){return t.data&&0===t.data.length}));(0===t.length||r)&&this.series.handleNoData(),this.events.setupEventHandlers(),this.data.parseData(t),this.theme.init(),new H(this).setGlobalMarkerSize(),this.formatters.setLabelFormatters(),this.titleSubtitle.draw(),a.noData&&a.collapsedSeries.length!==a.series.length&&!i.config.legend.showForSingleSeries||this.legend.init(),this.series.hasAllSeriesEqualX(),a.axisCharts&&(this.core.coreCalculations(),\"category\"!==i.config.xaxis.type&&this.formatters.setLabelFormatters(),this.ctx.toolbar.minX=i.globals.minX,this.ctx.toolbar.maxX=i.globals.maxX),this.formatters.heatmapLabelFormatters(),new y(this).getLargestMarkerSize(),this.dimensions.plotCoords();var o=this.core.xySettings();this.grid.createGridMask();var n=this.core.plotChartType(t,o),l=new O(this);return l.bringForward(),i.config.dataLabels.background.enabled&&l.dataLabelsBackground(),this.core.shiftGraphPosition(),{elGraph:n,xyRatios:o,dimensions:{plot:{left:i.globals.translateX,top:i.globals.translateY,width:i.globals.gridWidth,height:i.globals.gridHeight}}}}},{key:\"mount\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=this,a=i.w;return new Promise((function(s,r){if(null===i.el)return r(new Error(\"Not enough data to display or target element not found\"));(null===e||a.globals.allSeriesCollapsed)&&i.series.handleNoData(),i.grid=new j(i);var o=i.grid.drawGrid();if(i.annotations=new P(i),i.annotations.drawImageAnnos(),i.annotations.drawTextAnnos(),\"back\"===a.config.grid.position&&o&&a.globals.dom.elGraphical.add(o.el),Array.isArray(e.elGraph))for(var n=0;n<e.elGraph.length;n++)a.globals.dom.elGraphical.add(e.elGraph[n]);else a.globals.dom.elGraphical.add(e.elGraph);\"front\"===a.config.grid.position&&o&&a.globals.dom.elGraphical.add(o.el),o&&o.elGridBorders&&o.elGridBorders.node&&a.globals.dom.elGraphical.add(o.elGridBorders),\"front\"===a.config.xaxis.crosshairs.position&&i.crosshairs.drawXCrosshairs(),\"front\"===a.config.yaxis[0].crosshairs.position&&i.crosshairs.drawYCrosshairs(),\"treemap\"!==a.config.chart.type&&i.axes.drawAxis(a.config.chart.type,o);var l=new V(t.ctx,o),h=new q(t.ctx,o);if(null!==o&&(l.xAxisLabelCorrections(o.xAxisTickWidth),h.setYAxisTextAlignments(),a.config.yaxis.map((function(t,e){-1===a.globals.ignoreYAxisIndexes.indexOf(e)&&h.yAxisTitleRotate(e,t.opposite)}))),i.annotations.drawAxesAnnotations(),!a.globals.noData){if(a.config.tooltip.enabled&&!a.globals.noData&&i.w.globals.tooltip.drawTooltip(e.xyRatios),a.globals.axisCharts&&(a.globals.isXNumeric||a.config.xaxis.convertedCatToNumeric||a.globals.isRangeBar))(a.config.chart.zoom.enabled||a.config.chart.selection&&a.config.chart.selection.enabled||a.config.chart.pan&&a.config.chart.pan.enabled)&&i.zoomPanSelection.init({xyRatios:e.xyRatios});else{var c=a.config.chart.toolbar.tools;[\"zoom\",\"zoomin\",\"zoomout\",\"selection\",\"pan\",\"reset\"].forEach((function(t){c[t]=!1}))}a.config.chart.toolbar.show&&!a.globals.allSeriesCollapsed&&i.toolbar.createToolbar()}a.globals.memory.methodsToExec.length>0&&a.globals.memory.methodsToExec.forEach((function(t){t.method(t.params,!1,t.context)})),a.globals.axisCharts||a.globals.noData||i.core.resizeNonAxisCharts(),s(i)}))}},{key:\"destroy\",value:function(){var t,e;window.removeEventListener(\"resize\",this.windowResizeHandler),this.el.parentNode,t=this.parentResizeHandler,(e=Wt.get(t))&&(e.disconnect(),Wt.delete(t));var i=this.w.config.chart.id;i&&Apex._chartInstances.forEach((function(t,e){t.id===x.escapeString(i)&&Apex._chartInstances.splice(e,1)})),new Nt(this.ctx).clear({isUpdating:!1})}},{key:\"updateOptions\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=this.w;return o.globals.selection=void 0,t.series&&(this.series.resetSeries(!1,!0,!1),t.series.length&&t.series[0].data&&(t.series=t.series.map((function(t,i){return e.updateHelpers._extendSeries(t,i)}))),this.updateHelpers.revertDefaultAxisMinMax()),t.xaxis&&(t=this.updateHelpers.forceXAxisUpdate(t)),t.yaxis&&(t=this.updateHelpers.forceYAxisUpdate(t)),o.globals.collapsedSeriesIndices.length>0&&this.series.clearPreviousPaths(),t.theme&&(t=this.theme.updateThemeOptions(t)),this.updateHelpers._updateOptions(t,i,a,s,r)}},{key:\"updateSeries\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(t,e,i)}},{key:\"appendSeries\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=this.w.config.series.slice();return a.push(t),this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(a,e,i)}},{key:\"appendData\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var a=i.w.config.series.slice(),s=0;s<a.length;s++)if(null!==t[s]&&void 0!==t[s])for(var r=0;r<t[s].data.length;r++)a[s].data.push(t[s].data[r]);return i.w.config.series=a,e&&(i.w.globals.initialSeries=x.clone(i.w.config.series)),this.update()}},{key:\"update\",value:function(t){var e=this;return new Promise((function(i,a){new Nt(e.ctx).clear({isUpdating:!0});var s=e.create(e.w.config.series,t);if(!s)return i(e);e.mount(s).then((function(){\"function\"==typeof e.w.config.chart.events.updated&&e.w.config.chart.events.updated(e,e.w),e.events.fireEvent(\"updated\",[e,e.w]),e.w.globals.isDirty=!0,i(e)})).catch((function(t){a(t)}))}))}},{key:\"getSyncedCharts\",value:function(){var t=this.getGroupedCharts(),e=[this];return t.length&&(e=[],t.forEach((function(t){e.push(t)}))),e}},{key:\"getGroupedCharts\",value:function(){var t=this;return Apex._chartInstances.filter((function(t){if(t.group)return!0})).map((function(e){return t.w.config.chart.group===e.group?e.chart:t}))}},{key:\"toggleSeries\",value:function(t){return this.series.toggleSeries(t)}},{key:\"highlightSeriesOnLegendHover\",value:function(t,e){return this.series.toggleSeriesOnHover(t,e)}},{key:\"showSeries\",value:function(t){this.series.showSeries(t)}},{key:\"hideSeries\",value:function(t){this.series.hideSeries(t)}},{key:\"resetSeries\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.series.resetSeries(t,e)}},{key:\"addEventListener\",value:function(t,e){this.events.addEventListener(t,e)}},{key:\"removeEventListener\",value:function(t,e){this.events.removeEventListener(t,e)}},{key:\"addXaxisAnnotation\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addXaxisAnnotationExternal(t,e,a)}},{key:\"addYaxisAnnotation\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addYaxisAnnotationExternal(t,e,a)}},{key:\"addPointAnnotation\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addPointAnnotationExternal(t,e,a)}},{key:\"clearAnnotations\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,e=this;t&&(e=t),e.annotations.clearAnnotations(e)}},{key:\"removeAnnotation\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,i=this;e&&(i=e),i.annotations.removeAnnotation(i,t)}},{key:\"getChartArea\",value:function(){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-inner\")}},{key:\"getSeriesTotalXRange\",value:function(t,e){return this.coreUtils.getSeriesTotalsXRange(t,e)}},{key:\"getHighestValueInSeries\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new U(this.ctx).getMinYMaxY(t).highestY}},{key:\"getLowestValueInSeries\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new U(this.ctx).getMinYMaxY(t).lowestY}},{key:\"getSeriesTotal\",value:function(){return this.w.globals.seriesTotals}},{key:\"toggleDataPointSelection\",value:function(t,e){return this.updateHelpers.toggleDataPointSelection(t,e)}},{key:\"zoomX\",value:function(t,e){this.ctx.toolbar.zoomUpdateOptions(t,e)}},{key:\"setLocale\",value:function(t){this.localization.setCurrentLocaleValues(t)}},{key:\"dataURI\",value:function(t){return new G(this.ctx).dataURI(t)}},{key:\"exportToCSV\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new G(this.ctx).exportToCSV(t)}},{key:\"paper\",value:function(){return this.w.globals.dom.Paper}},{key:\"_parentResizeCallback\",value:function(){this.w.globals.animationEnded&&this.w.config.chart.redrawOnParentResize&&this._windowResize()}},{key:\"_windowResize\",value:function(){var t=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout((function(){t.w.globals.resized=!0,t.w.globals.dataChanged=!1,t.ctx.update()}),150)}},{key:\"_windowResizeHandler\",value:function(){var t=this.w.config.chart.redrawOnWindowResize;\"function\"==typeof t&&(t=t()),t&&this._windowResize()}}],[{key:\"getChartByID\",value:function(t){var e=x.escapeString(t),i=Apex._chartInstances.filter((function(t){return t.id===e}))[0];return i&&i.chart}},{key:\"initOnLoad\",value:function(){for(var e=document.querySelectorAll(\"[data-apexcharts]\"),i=0;i<e.length;i++){new t(e[i],JSON.parse(e[i].getAttribute(\"data-options\"))).render()}}},{key:\"exec\",value:function(t,e){var i=this.getChartByID(t);if(i){i.w.globals.isExecCalled=!0;var a=null;if(-1!==i.publicMethods.indexOf(e)){for(var s=arguments.length,r=new Array(s>2?s-2:0),o=2;o<s;o++)r[o-2]=arguments[o];a=i[e].apply(i,r)}return a}}},{key:\"merge\",value:function(t,e){return x.extend(t,e)}}]),t}();export{Bt as default};\n"
  },
  {
    "path": "public/assets/apexcharts/apexcharts.js",
    "content": "/*!\n * ApexCharts v3.40.0\n * (c) 2018-2023 ApexCharts\n * Released under the MIT License.\n */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ApexCharts = factory());\n})(this, (function () { 'use strict';\n\n  function ownKeys(object, enumerableOnly) {\n    var keys = Object.keys(object);\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(object);\n\n      if (enumerableOnly) {\n        symbols = symbols.filter(function (sym) {\n          return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n        });\n      }\n\n      keys.push.apply(keys, symbols);\n    }\n\n    return keys;\n  }\n\n  function _objectSpread2(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n\n      if (i % 2) {\n        ownKeys(Object(source), true).forEach(function (key) {\n          _defineProperty(target, key, source[key]);\n        });\n      } else if (Object.getOwnPropertyDescriptors) {\n        Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n      } else {\n        ownKeys(Object(source)).forEach(function (key) {\n          Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n        });\n      }\n    }\n\n    return target;\n  }\n\n  function _typeof(obj) {\n    \"@babel/helpers - typeof\";\n\n    if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n      _typeof = function (obj) {\n        return typeof obj;\n      };\n    } else {\n      _typeof = function (obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n      };\n    }\n\n    return _typeof(obj);\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        writable: true,\n        configurable: true\n      }\n    });\n    if (superClass) _setPrototypeOf(subClass, superClass);\n  }\n\n  function _getPrototypeOf(o) {\n    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n      return o.__proto__ || Object.getPrototypeOf(o);\n    };\n    return _getPrototypeOf(o);\n  }\n\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n\n    return _setPrototypeOf(o, p);\n  }\n\n  function _isNativeReflectConstruct() {\n    if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n    if (Reflect.construct.sham) return false;\n    if (typeof Proxy === \"function\") return true;\n\n    try {\n      Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function _assertThisInitialized(self) {\n    if (self === void 0) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }\n\n    return self;\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n      return call;\n    } else if (call !== void 0) {\n      throw new TypeError(\"Derived constructors may only return object or undefined\");\n    }\n\n    return _assertThisInitialized(self);\n  }\n\n  function _createSuper(Derived) {\n    var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n    return function _createSuperInternal() {\n      var Super = _getPrototypeOf(Derived),\n          result;\n\n      if (hasNativeReflectConstruct) {\n        var NewTarget = _getPrototypeOf(this).constructor;\n\n        result = Reflect.construct(Super, arguments, NewTarget);\n      } else {\n        result = Super.apply(this, arguments);\n      }\n\n      return _possibleConstructorReturn(this, result);\n    };\n  }\n\n  function _slicedToArray(arr, i) {\n    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _arrayWithHoles(arr) {\n    if (Array.isArray(arr)) return arr;\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _iterableToArrayLimit(arr, i) {\n    var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n    if (_i == null) return;\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n\n    var _s, _e;\n\n    try {\n      for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  function _nonIterableRest() {\n    throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  /*\n   ** Generic functions which are not dependent on ApexCharts\n   */\n  var Utils$1 = /*#__PURE__*/function () {\n    function Utils() {\n      _classCallCheck(this, Utils);\n    }\n\n    _createClass(Utils, [{\n      key: \"shadeRGBColor\",\n      value: function shadeRGBColor(percent, color) {\n        var f = color.split(','),\n            t = percent < 0 ? 0 : 255,\n            p = percent < 0 ? percent * -1 : percent,\n            R = parseInt(f[0].slice(4), 10),\n            G = parseInt(f[1], 10),\n            B = parseInt(f[2], 10);\n        return 'rgb(' + (Math.round((t - R) * p) + R) + ',' + (Math.round((t - G) * p) + G) + ',' + (Math.round((t - B) * p) + B) + ')';\n      }\n    }, {\n      key: \"shadeHexColor\",\n      value: function shadeHexColor(percent, color) {\n        var f = parseInt(color.slice(1), 16),\n            t = percent < 0 ? 0 : 255,\n            p = percent < 0 ? percent * -1 : percent,\n            R = f >> 16,\n            G = f >> 8 & 0x00ff,\n            B = f & 0x0000ff;\n        return '#' + (0x1000000 + (Math.round((t - R) * p) + R) * 0x10000 + (Math.round((t - G) * p) + G) * 0x100 + (Math.round((t - B) * p) + B)).toString(16).slice(1);\n      } // beautiful color shading blending code\n      // http://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors\n\n    }, {\n      key: \"shadeColor\",\n      value: function shadeColor(p, color) {\n        if (Utils.isColorHex(color)) {\n          return this.shadeHexColor(p, color);\n        } else {\n          return this.shadeRGBColor(p, color);\n        }\n      }\n    }], [{\n      key: \"bind\",\n      value: function bind(fn, me) {\n        return function () {\n          return fn.apply(me, arguments);\n        };\n      }\n    }, {\n      key: \"isObject\",\n      value: function isObject(item) {\n        return item && _typeof(item) === 'object' && !Array.isArray(item) && item != null;\n      } // Type checking that works across different window objects\n\n    }, {\n      key: \"is\",\n      value: function is(type, val) {\n        return Object.prototype.toString.call(val) === '[object ' + type + ']';\n      }\n    }, {\n      key: \"listToArray\",\n      value: function listToArray(list) {\n        var i,\n            array = [];\n\n        for (i = 0; i < list.length; i++) {\n          array[i] = list[i];\n        }\n\n        return array;\n      } // to extend defaults with user options\n      // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873\n\n    }, {\n      key: \"extend\",\n      value: function extend(target, source) {\n        var _this = this;\n\n        if (typeof Object.assign !== 'function') {\n\n          (function () {\n            Object.assign = function (target) {\n\n              if (target === undefined || target === null) {\n                throw new TypeError('Cannot convert undefined or null to object');\n              }\n\n              var output = Object(target);\n\n              for (var index = 1; index < arguments.length; index++) {\n                var _source = arguments[index];\n\n                if (_source !== undefined && _source !== null) {\n                  for (var nextKey in _source) {\n                    if (_source.hasOwnProperty(nextKey)) {\n                      output[nextKey] = _source[nextKey];\n                    }\n                  }\n                }\n              }\n\n              return output;\n            };\n          })();\n        }\n\n        var output = Object.assign({}, target);\n\n        if (this.isObject(target) && this.isObject(source)) {\n          Object.keys(source).forEach(function (key) {\n            if (_this.isObject(source[key])) {\n              if (!(key in target)) {\n                Object.assign(output, _defineProperty({}, key, source[key]));\n              } else {\n                output[key] = _this.extend(target[key], source[key]);\n              }\n            } else {\n              Object.assign(output, _defineProperty({}, key, source[key]));\n            }\n          });\n        }\n\n        return output;\n      }\n    }, {\n      key: \"extendArray\",\n      value: function extendArray(arrToExtend, resultArr) {\n        var extendedArr = [];\n        arrToExtend.map(function (item) {\n          extendedArr.push(Utils.extend(resultArr, item));\n        });\n        arrToExtend = extendedArr;\n        return arrToExtend;\n      } // If month counter exceeds 12, it starts again from 1\n\n    }, {\n      key: \"monthMod\",\n      value: function monthMod(month) {\n        return month % 12;\n      }\n    }, {\n      key: \"clone\",\n      value: function clone(source) {\n        if (Utils.is('Array', source)) {\n          var cloneResult = [];\n\n          for (var i = 0; i < source.length; i++) {\n            cloneResult[i] = this.clone(source[i]);\n          }\n\n          return cloneResult;\n        } else if (Utils.is('Null', source)) {\n          // fixes an issue where null values were converted to {}\n          return null;\n        } else if (Utils.is('Date', source)) {\n          return source;\n        } else if (_typeof(source) === 'object') {\n          var _cloneResult = {};\n\n          for (var prop in source) {\n            if (source.hasOwnProperty(prop)) {\n              _cloneResult[prop] = this.clone(source[prop]);\n            }\n          }\n\n          return _cloneResult;\n        } else {\n          return source;\n        }\n      }\n    }, {\n      key: \"log10\",\n      value: function log10(x) {\n        return Math.log(x) / Math.LN10;\n      }\n    }, {\n      key: \"roundToBase10\",\n      value: function roundToBase10(x) {\n        return Math.pow(10, Math.floor(Math.log10(x)));\n      }\n    }, {\n      key: \"roundToBase\",\n      value: function roundToBase(x, base) {\n        return Math.pow(base, Math.floor(Math.log(x) / Math.log(base)));\n      }\n    }, {\n      key: \"parseNumber\",\n      value: function parseNumber(val) {\n        if (val === null) return val;\n        return parseFloat(val);\n      }\n    }, {\n      key: \"randomId\",\n      value: function randomId() {\n        return (Math.random() + 1).toString(36).substring(4);\n      }\n    }, {\n      key: \"noExponents\",\n      value: function noExponents(val) {\n        var data = String(val).split(/[eE]/);\n        if (data.length === 1) return data[0];\n        var z = '',\n            sign = val < 0 ? '-' : '',\n            str = data[0].replace('.', ''),\n            mag = Number(data[1]) + 1;\n\n        if (mag < 0) {\n          z = sign + '0.';\n\n          while (mag++) {\n            z += '0';\n          }\n\n          return z + str.replace(/^-/, '');\n        }\n\n        mag -= str.length;\n\n        while (mag--) {\n          z += '0';\n        }\n\n        return str + z;\n      }\n    }, {\n      key: \"getDimensions\",\n      value: function getDimensions(el) {\n        var computedStyle = getComputedStyle(el, null);\n        var elementHeight = el.clientHeight;\n        var elementWidth = el.clientWidth;\n        elementHeight -= parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom);\n        elementWidth -= parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight);\n        return [elementWidth, elementHeight];\n      }\n    }, {\n      key: \"getBoundingClientRect\",\n      value: function getBoundingClientRect(element) {\n        var rect = element.getBoundingClientRect();\n        return {\n          top: rect.top,\n          right: rect.right,\n          bottom: rect.bottom,\n          left: rect.left,\n          width: element.clientWidth,\n          height: element.clientHeight,\n          x: rect.left,\n          y: rect.top\n        };\n      }\n    }, {\n      key: \"getLargestStringFromArr\",\n      value: function getLargestStringFromArr(arr) {\n        return arr.reduce(function (a, b) {\n          if (Array.isArray(b)) {\n            b = b.reduce(function (aa, bb) {\n              return aa.length > bb.length ? aa : bb;\n            });\n          }\n\n          return a.length > b.length ? a : b;\n        }, 0);\n      } // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-12342275\n\n    }, {\n      key: \"hexToRgba\",\n      value: function hexToRgba() {\n        var hex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '#999999';\n        var opacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.6;\n\n        if (hex.substring(0, 1) !== '#') {\n          hex = '#999999';\n        }\n\n        var h = hex.replace('#', '');\n        h = h.match(new RegExp('(.{' + h.length / 3 + '})', 'g'));\n\n        for (var i = 0; i < h.length; i++) {\n          h[i] = parseInt(h[i].length === 1 ? h[i] + h[i] : h[i], 16);\n        }\n\n        if (typeof opacity !== 'undefined') h.push(opacity);\n        return 'rgba(' + h.join(',') + ')';\n      }\n    }, {\n      key: \"getOpacityFromRGBA\",\n      value: function getOpacityFromRGBA(rgba) {\n        return parseFloat(rgba.replace(/^.*,(.+)\\)/, '$1'));\n      }\n    }, {\n      key: \"rgb2hex\",\n      value: function rgb2hex(rgb) {\n        rgb = rgb.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n        return rgb && rgb.length === 4 ? '#' + ('0' + parseInt(rgb[1], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[2], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[3], 10).toString(16)).slice(-2) : '';\n      }\n    }, {\n      key: \"isColorHex\",\n      value: function isColorHex(color) {\n        return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)/i.test(color);\n      }\n    }, {\n      key: \"getPolygonPos\",\n      value: function getPolygonPos(size, dataPointsLen) {\n        var dotsArray = [];\n        var angle = Math.PI * 2 / dataPointsLen;\n\n        for (var i = 0; i < dataPointsLen; i++) {\n          var curPos = {};\n          curPos.x = size * Math.sin(i * angle);\n          curPos.y = -size * Math.cos(i * angle);\n          dotsArray.push(curPos);\n        }\n\n        return dotsArray;\n      }\n    }, {\n      key: \"polarToCartesian\",\n      value: function polarToCartesian(centerX, centerY, radius, angleInDegrees) {\n        var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0;\n        return {\n          x: centerX + radius * Math.cos(angleInRadians),\n          y: centerY + radius * Math.sin(angleInRadians)\n        };\n      }\n    }, {\n      key: \"escapeString\",\n      value: function escapeString(str) {\n        var escapeWith = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x';\n        var newStr = str.toString().slice();\n        newStr = newStr.replace(/[` ~!@#$%^&*()|+\\=?;:'\",.<>{}[\\]\\\\/]/gi, escapeWith);\n        return newStr;\n      }\n    }, {\n      key: \"negToZero\",\n      value: function negToZero(val) {\n        return val < 0 ? 0 : val;\n      }\n    }, {\n      key: \"moveIndexInArray\",\n      value: function moveIndexInArray(arr, old_index, new_index) {\n        if (new_index >= arr.length) {\n          var k = new_index - arr.length + 1;\n\n          while (k--) {\n            arr.push(undefined);\n          }\n        }\n\n        arr.splice(new_index, 0, arr.splice(old_index, 1)[0]);\n        return arr;\n      }\n    }, {\n      key: \"extractNumber\",\n      value: function extractNumber(s) {\n        return parseFloat(s.replace(/[^\\d.]*/g, ''));\n      }\n    }, {\n      key: \"findAncestor\",\n      value: function findAncestor(el, cls) {\n        while ((el = el.parentElement) && !el.classList.contains(cls)) {\n        }\n\n        return el;\n      }\n    }, {\n      key: \"setELstyles\",\n      value: function setELstyles(el, styles) {\n        for (var key in styles) {\n          if (styles.hasOwnProperty(key)) {\n            el.style.key = styles[key];\n          }\n        }\n      }\n    }, {\n      key: \"isNumber\",\n      value: function isNumber(value) {\n        return !isNaN(value) && parseFloat(Number(value)) === value && !isNaN(parseInt(value, 10));\n      }\n    }, {\n      key: \"isFloat\",\n      value: function isFloat(n) {\n        return Number(n) === n && n % 1 !== 0;\n      }\n    }, {\n      key: \"isSafari\",\n      value: function isSafari() {\n        return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n      }\n    }, {\n      key: \"isFirefox\",\n      value: function isFirefox() {\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n      }\n    }, {\n      key: \"isIE11\",\n      value: function isIE11() {\n        if (window.navigator.userAgent.indexOf('MSIE') !== -1 || window.navigator.appVersion.indexOf('Trident/') > -1) {\n          return true;\n        }\n      }\n    }, {\n      key: \"isIE\",\n      value: function isIE() {\n        var ua = window.navigator.userAgent;\n        var msie = ua.indexOf('MSIE ');\n\n        if (msie > 0) {\n          // IE 10 or older => return version number\n          return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n        }\n\n        var trident = ua.indexOf('Trident/');\n\n        if (trident > 0) {\n          // IE 11 => return version number\n          var rv = ua.indexOf('rv:');\n          return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n        }\n\n        var edge = ua.indexOf('Edge/');\n\n        if (edge > 0) {\n          // Edge (IE 12+) => return version number\n          return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n        } // other browser\n\n\n        return false;\n      }\n    }]);\n\n    return Utils;\n  }();\n\n  /**\n   * ApexCharts Animation Class.\n   *\n   * @module Animations\n   **/\n\n  var Animations = /*#__PURE__*/function () {\n    function Animations(ctx) {\n      _classCallCheck(this, Animations);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.setEasingFunctions();\n    }\n\n    _createClass(Animations, [{\n      key: \"setEasingFunctions\",\n      value: function setEasingFunctions() {\n        var easing;\n        if (this.w.globals.easing) return;\n        var userDefinedEasing = this.w.config.chart.animations.easing;\n\n        switch (userDefinedEasing) {\n          case 'linear':\n            {\n              easing = '-';\n              break;\n            }\n\n          case 'easein':\n            {\n              easing = '<';\n              break;\n            }\n\n          case 'easeout':\n            {\n              easing = '>';\n              break;\n            }\n\n          case 'easeinout':\n            {\n              easing = '<>';\n              break;\n            }\n\n          case 'swing':\n            {\n              easing = function easing(pos) {\n                var s = 1.70158;\n                var ret = (pos -= 1) * pos * ((s + 1) * pos + s) + 1;\n                return ret;\n              };\n\n              break;\n            }\n\n          case 'bounce':\n            {\n              easing = function easing(pos) {\n                var ret = '';\n\n                if (pos < 1 / 2.75) {\n                  ret = 7.5625 * pos * pos;\n                } else if (pos < 2 / 2.75) {\n                  ret = 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75;\n                } else if (pos < 2.5 / 2.75) {\n                  ret = 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375;\n                } else {\n                  ret = 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375;\n                }\n\n                return ret;\n              };\n\n              break;\n            }\n\n          case 'elastic':\n            {\n              easing = function easing(pos) {\n                if (pos === !!pos) return pos;\n                return Math.pow(2, -10 * pos) * Math.sin((pos - 0.075) * (2 * Math.PI) / 0.3) + 1;\n              };\n\n              break;\n            }\n\n          default:\n            {\n              easing = '<>';\n            }\n        }\n\n        this.w.globals.easing = easing;\n      }\n    }, {\n      key: \"animateLine\",\n      value: function animateLine(el, from, to, speed) {\n        el.attr(from).animate(speed).attr(to);\n      }\n      /*\n       ** Animate radius of a circle element\n       */\n\n    }, {\n      key: \"animateMarker\",\n      value: function animateMarker(el, from, to, speed, easing, cb) {\n        if (!from) from = 0;\n        el.attr({\n          r: from,\n          width: from,\n          height: from\n        }).animate(speed, easing).attr({\n          r: to,\n          width: to.width,\n          height: to.height\n        }).afterAll(function () {\n          cb();\n        });\n      }\n      /*\n       ** Animate radius and position of a circle element\n       */\n\n    }, {\n      key: \"animateCircle\",\n      value: function animateCircle(el, from, to, speed, easing) {\n        el.attr({\n          r: from.r,\n          cx: from.cx,\n          cy: from.cy\n        }).animate(speed, easing).attr({\n          r: to.r,\n          cx: to.cx,\n          cy: to.cy\n        });\n      }\n      /*\n       ** Animate rect properties\n       */\n\n    }, {\n      key: \"animateRect\",\n      value: function animateRect(el, from, to, speed, fn) {\n        el.attr(from).animate(speed).attr(to).afterAll(function () {\n          return fn();\n        });\n      }\n    }, {\n      key: \"animatePathsGradually\",\n      value: function animatePathsGradually(params) {\n        var el = params.el,\n            realIndex = params.realIndex,\n            j = params.j,\n            fill = params.fill,\n            pathFrom = params.pathFrom,\n            pathTo = params.pathTo,\n            speed = params.speed,\n            delay = params.delay;\n        var me = this;\n        var w = this.w;\n        var delayFactor = 0;\n\n        if (w.config.chart.animations.animateGradually.enabled) {\n          delayFactor = w.config.chart.animations.animateGradually.delay;\n        }\n\n        if (w.config.chart.animations.dynamicAnimation.enabled && w.globals.dataChanged && w.config.chart.type !== 'bar') {\n          // disabled due to this bug - https://github.com/apexcharts/vue-apexcharts/issues/75\n          delayFactor = 0;\n        }\n\n        me.morphSVG(el, realIndex, j, w.config.chart.type === 'line' && !w.globals.comboCharts ? 'stroke' : fill, pathFrom, pathTo, speed, delay * delayFactor);\n      }\n    }, {\n      key: \"showDelayedElements\",\n      value: function showDelayedElements() {\n        this.w.globals.delayedElements.forEach(function (d) {\n          var ele = d.el;\n          ele.classList.remove('apexcharts-element-hidden');\n          ele.classList.add('apexcharts-hidden-element-shown');\n        });\n      }\n    }, {\n      key: \"animationCompleted\",\n      value: function animationCompleted(el) {\n        var w = this.w;\n        if (w.globals.animationEnded) return;\n        w.globals.animationEnded = true;\n        this.showDelayedElements();\n\n        if (typeof w.config.chart.events.animationEnd === 'function') {\n          w.config.chart.events.animationEnd(this.ctx, {\n            el: el,\n            w: w\n          });\n        }\n      } // SVG.js animation for morphing one path to another\n\n    }, {\n      key: \"morphSVG\",\n      value: function morphSVG(el, realIndex, j, fill, pathFrom, pathTo, speed, delay) {\n        var _this = this;\n\n        var w = this.w;\n\n        if (!pathFrom) {\n          pathFrom = el.attr('pathFrom');\n        }\n\n        if (!pathTo) {\n          pathTo = el.attr('pathTo');\n        }\n\n        var disableAnimationForCorrupPath = function disableAnimationForCorrupPath(path) {\n          if (w.config.chart.type === 'radar') {\n            // radar chart drops the path to bottom and hence a corrup path looks ugly\n            // therefore, disable animation for such a case\n            speed = 1;\n          }\n\n          return \"M 0 \".concat(w.globals.gridHeight);\n        };\n\n        if (!pathFrom || pathFrom.indexOf('undefined') > -1 || pathFrom.indexOf('NaN') > -1) {\n          pathFrom = disableAnimationForCorrupPath();\n        }\n\n        if (!pathTo || pathTo.indexOf('undefined') > -1 || pathTo.indexOf('NaN') > -1) {\n          pathTo = disableAnimationForCorrupPath();\n        }\n\n        if (!w.globals.shouldAnimate) {\n          speed = 1;\n        }\n\n        el.plot(pathFrom).animate(1, w.globals.easing, delay).plot(pathFrom).animate(speed, w.globals.easing, delay).plot(pathTo).afterAll(function () {\n          // a flag to indicate that the original mount function can return true now as animation finished here\n          if (Utils$1.isNumber(j)) {\n            if (j === w.globals.series[w.globals.maxValsInArrayIndex].length - 2 && w.globals.shouldAnimate) {\n              _this.animationCompleted(el);\n            }\n          } else if (fill !== 'none' && w.globals.shouldAnimate) {\n            if (!w.globals.comboCharts && realIndex === w.globals.series.length - 1 || w.globals.comboCharts) {\n              _this.animationCompleted(el);\n            }\n          }\n\n          _this.showDelayedElements();\n        });\n      }\n    }]);\n\n    return Animations;\n  }();\n\n  /**\n   * ApexCharts Filters Class for setting hover/active states on the paths.\n   *\n   * @module Formatters\n   **/\n\n  var Filters = /*#__PURE__*/function () {\n    function Filters(ctx) {\n      _classCallCheck(this, Filters);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    } // create a re-usable filter which can be appended other filter effects and applied to multiple elements\n\n\n    _createClass(Filters, [{\n      key: \"getDefaultFilter\",\n      value: function getDefaultFilter(el, i) {\n        var w = this.w;\n        el.unfilter(true);\n        var filter = new window.SVG.Filter();\n        filter.size('120%', '180%', '-5%', '-40%');\n\n        if (w.config.states.normal.filter !== 'none') {\n          this.applyFilter(el, i, w.config.states.normal.filter.type, w.config.states.normal.filter.value);\n        } else {\n          if (w.config.chart.dropShadow.enabled) {\n            this.dropShadow(el, w.config.chart.dropShadow, i);\n          }\n        }\n      }\n    }, {\n      key: \"addNormalFilter\",\n      value: function addNormalFilter(el, i) {\n        var w = this.w; // revert shadow if it was there\n        // but, ignore marker as marker don't have dropshadow yet\n\n        if (w.config.chart.dropShadow.enabled && !el.node.classList.contains('apexcharts-marker')) {\n          this.dropShadow(el, w.config.chart.dropShadow, i);\n        }\n      } // appends dropShadow to the filter object which can be chained with other filter effects\n\n    }, {\n      key: \"addLightenFilter\",\n      value: function addLightenFilter(el, i, attrs) {\n        var _this = this;\n\n        var w = this.w;\n        var intensity = attrs.intensity;\n        el.unfilter(true);\n        var filter = new window.SVG.Filter();\n        el.filter(function (add) {\n          var shadowAttr = w.config.chart.dropShadow;\n\n          if (shadowAttr.enabled) {\n            filter = _this.addShadow(add, i, shadowAttr);\n          } else {\n            filter = add;\n          }\n\n          filter.componentTransfer({\n            rgb: {\n              type: 'linear',\n              slope: 1.5,\n              intercept: intensity\n            }\n          });\n        });\n        el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse');\n\n        this._scaleFilterSize(el.filterer.node);\n      } // appends dropShadow to the filter object which can be chained with other filter effects\n\n    }, {\n      key: \"addDarkenFilter\",\n      value: function addDarkenFilter(el, i, attrs) {\n        var _this2 = this;\n\n        var w = this.w;\n        var intensity = attrs.intensity;\n        el.unfilter(true);\n        var filter = new window.SVG.Filter();\n        el.filter(function (add) {\n          var shadowAttr = w.config.chart.dropShadow;\n\n          if (shadowAttr.enabled) {\n            filter = _this2.addShadow(add, i, shadowAttr);\n          } else {\n            filter = add;\n          }\n\n          filter.componentTransfer({\n            rgb: {\n              type: 'linear',\n              slope: intensity\n            }\n          });\n        });\n        el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse');\n\n        this._scaleFilterSize(el.filterer.node);\n      }\n    }, {\n      key: \"applyFilter\",\n      value: function applyFilter(el, i, filter) {\n        var intensity = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5;\n\n        switch (filter) {\n          case 'none':\n            {\n              this.addNormalFilter(el, i);\n              break;\n            }\n\n          case 'lighten':\n            {\n              this.addLightenFilter(el, i, {\n                intensity: intensity\n              });\n              break;\n            }\n\n          case 'darken':\n            {\n              this.addDarkenFilter(el, i, {\n                intensity: intensity\n              });\n              break;\n            }\n        }\n      } // appends dropShadow to the filter object which can be chained with other filter effects\n\n    }, {\n      key: \"addShadow\",\n      value: function addShadow(add, i, attrs) {\n        var blur = attrs.blur,\n            top = attrs.top,\n            left = attrs.left,\n            color = attrs.color,\n            opacity = attrs.opacity;\n        var shadowBlur = add.flood(Array.isArray(color) ? color[i] : color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source);\n        return add.blend(add.source, shadowBlur);\n      } // directly adds dropShadow to the element and returns the same element.\n      // the only way it is different from the addShadow() function is that addShadow is chainable to other filters, while this function discards all filters and add dropShadow\n\n    }, {\n      key: \"dropShadow\",\n      value: function dropShadow(el, attrs) {\n        var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n        var top = attrs.top,\n            left = attrs.left,\n            blur = attrs.blur,\n            color = attrs.color,\n            opacity = attrs.opacity,\n            noUserSpaceOnUse = attrs.noUserSpaceOnUse;\n        var w = this.w;\n        el.unfilter(true);\n\n        if (Utils$1.isIE() && w.config.chart.type === 'radialBar') {\n          // in radialbar charts, dropshadow is clipping actual drawing in IE\n          return el;\n        }\n\n        color = Array.isArray(color) ? color[i] : color;\n        el.filter(function (add) {\n          var shadowBlur = null;\n\n          if (Utils$1.isSafari() || Utils$1.isFirefox() || Utils$1.isIE()) {\n            // safari/firefox/IE have some alternative way to use this filter\n            shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur);\n          } else {\n            shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source);\n          }\n\n          add.blend(add.source, shadowBlur);\n        });\n\n        if (!noUserSpaceOnUse) {\n          el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse');\n        }\n\n        this._scaleFilterSize(el.filterer.node);\n\n        return el;\n      }\n    }, {\n      key: \"setSelectionFilter\",\n      value: function setSelectionFilter(el, realIndex, dataPointIndex) {\n        var w = this.w;\n\n        if (typeof w.globals.selectedDataPoints[realIndex] !== 'undefined') {\n          if (w.globals.selectedDataPoints[realIndex].indexOf(dataPointIndex) > -1) {\n            el.node.setAttribute('selected', true);\n            var activeFilter = w.config.states.active.filter;\n\n            if (activeFilter !== 'none') {\n              this.applyFilter(el, realIndex, activeFilter.type, activeFilter.value);\n            }\n          }\n        }\n      }\n    }, {\n      key: \"_scaleFilterSize\",\n      value: function _scaleFilterSize(el) {\n        var setAttributes = function setAttributes(attrs) {\n          for (var key in attrs) {\n            if (attrs.hasOwnProperty(key)) {\n              el.setAttribute(key, attrs[key]);\n            }\n          }\n        };\n\n        setAttributes({\n          width: '200%',\n          height: '200%',\n          x: '-50%',\n          y: '-50%'\n        });\n      }\n    }]);\n\n    return Filters;\n  }();\n\n  /**\n   * ApexCharts Graphics Class for all drawing operations.\n   *\n   * @module Graphics\n   **/\n\n  var Graphics = /*#__PURE__*/function () {\n    function Graphics(ctx) {\n      _classCallCheck(this, Graphics);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n    /*****************************************************************************\n     *                                                                            *\n     *  SVG Path Rounding Function                                                *\n     *  Copyright (C) 2014 Yona Appletree                                         *\n     *                                                                            *\n     *  Licensed under the Apache License, Version 2.0 (the \"License\");           *\n     *  you may not use this file except in compliance with the License.          *\n     *  You may obtain a copy of the License at                                   *\n     *                                                                            *\n     *      http://www.apache.org/licenses/LICENSE-2.0                            *\n     *                                                                            *\n     *  Unless required by applicable law or agreed to in writing, software       *\n     *  distributed under the License is distributed on an \"AS IS\" BASIS,         *\n     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *\n     *  See the License for the specific language governing permissions and       *\n     *  limitations under the License.                                            *\n     *                                                                            *\n     *****************************************************************************/\n\n    /**\n     * SVG Path rounding function. Takes an input path string and outputs a path\n     * string where all line-line corners have been rounded. Only supports absolute\n     * commands at the moment.\n     *\n     * @param pathString The SVG input path\n     * @param radius The amount to round the corners, either a value in the SVG\n     *               coordinate space, or, if useFractionalRadius is true, a value\n     *               from 0 to 1.\n     * @returns A new SVG path string with the rounding\n     */\n\n\n    _createClass(Graphics, [{\n      key: \"roundPathCorners\",\n      value: function roundPathCorners(pathString, radius) {\n        if (pathString.indexOf('NaN') > -1) pathString = '';\n\n        function moveTowardsLength(movingPoint, targetPoint, amount) {\n          var width = targetPoint.x - movingPoint.x;\n          var height = targetPoint.y - movingPoint.y;\n          var distance = Math.sqrt(width * width + height * height);\n          return moveTowardsFractional(movingPoint, targetPoint, Math.min(1, amount / distance));\n        }\n\n        function moveTowardsFractional(movingPoint, targetPoint, fraction) {\n          return {\n            x: movingPoint.x + (targetPoint.x - movingPoint.x) * fraction,\n            y: movingPoint.y + (targetPoint.y - movingPoint.y) * fraction\n          };\n        } // Adjusts the ending position of a command\n\n\n        function adjustCommand(cmd, newPoint) {\n          if (cmd.length > 2) {\n            cmd[cmd.length - 2] = newPoint.x;\n            cmd[cmd.length - 1] = newPoint.y;\n          }\n        } // Gives an {x, y} object for a command's ending position\n\n\n        function pointForCommand(cmd) {\n          return {\n            x: parseFloat(cmd[cmd.length - 2]),\n            y: parseFloat(cmd[cmd.length - 1])\n          };\n        } // Split apart the path, handing concatonated letters and numbers\n\n\n        var pathParts = pathString.split(/[,\\s]/).reduce(function (parts, part) {\n          var match = part.match('([a-zA-Z])(.+)');\n\n          if (match) {\n            parts.push(match[1]);\n            parts.push(match[2]);\n          } else {\n            parts.push(part);\n          }\n\n          return parts;\n        }, []); // Group the commands with their arguments for easier handling\n\n        var commands = pathParts.reduce(function (commands, part) {\n          if (parseFloat(part) == part && commands.length) {\n            commands[commands.length - 1].push(part);\n          } else {\n            commands.push([part]);\n          }\n\n          return commands;\n        }, []); // The resulting commands, also grouped\n\n        var resultCommands = [];\n\n        if (commands.length > 1) {\n          var startPoint = pointForCommand(commands[0]); // Handle the close path case with a \"virtual\" closing line\n\n          var virtualCloseLine = null;\n\n          if (commands[commands.length - 1][0] == 'Z' && commands[0].length > 2) {\n            virtualCloseLine = ['L', startPoint.x, startPoint.y];\n            commands[commands.length - 1] = virtualCloseLine;\n          } // We always use the first command (but it may be mutated)\n\n\n          resultCommands.push(commands[0]);\n\n          for (var cmdIndex = 1; cmdIndex < commands.length; cmdIndex++) {\n            var prevCmd = resultCommands[resultCommands.length - 1];\n            var curCmd = commands[cmdIndex]; // Handle closing case\n\n            var nextCmd = curCmd == virtualCloseLine ? commands[1] : commands[cmdIndex + 1]; // Nasty logic to decide if this path is a candidite.\n\n            if (nextCmd && prevCmd && prevCmd.length > 2 && curCmd[0] == 'L' && nextCmd.length > 2 && nextCmd[0] == 'L') {\n              // Calc the points we're dealing with\n              var prevPoint = pointForCommand(prevCmd);\n              var curPoint = pointForCommand(curCmd);\n              var nextPoint = pointForCommand(nextCmd); // The start and end of the cuve are just our point moved towards the previous and next points, respectivly\n\n              var curveStart, curveEnd;\n              curveStart = moveTowardsLength(curPoint, prevPoint, radius);\n              curveEnd = moveTowardsLength(curPoint, nextPoint, radius); // Adjust the current command and add it\n\n              adjustCommand(curCmd, curveStart);\n              curCmd.origPoint = curPoint;\n              resultCommands.push(curCmd); // The curve control points are halfway between the start/end of the curve and\n              // the original point\n\n              var startControl = moveTowardsFractional(curveStart, curPoint, 0.5);\n              var endControl = moveTowardsFractional(curPoint, curveEnd, 0.5); // Create the curve\n\n              var curveCmd = ['C', startControl.x, startControl.y, endControl.x, endControl.y, curveEnd.x, curveEnd.y]; // Save the original point for fractional calculations\n\n              curveCmd.origPoint = curPoint;\n              resultCommands.push(curveCmd);\n            } else {\n              // Pass through commands that don't qualify\n              resultCommands.push(curCmd);\n            }\n          } // Fix up the starting point and restore the close path if the path was orignally closed\n\n\n          if (virtualCloseLine) {\n            var newStartPoint = pointForCommand(resultCommands[resultCommands.length - 1]);\n            resultCommands.push(['Z']);\n            adjustCommand(resultCommands[0], newStartPoint);\n          }\n        } else {\n          resultCommands = commands;\n        }\n\n        return resultCommands.reduce(function (str, c) {\n          return str + c.join(' ') + ' ';\n        }, '');\n      }\n    }, {\n      key: \"drawLine\",\n      value: function drawLine(x1, y1, x2, y2) {\n        var lineColor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '#a8a8a8';\n        var dashArray = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n        var strokeWidth = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;\n        var strokeLineCap = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 'butt';\n        var w = this.w;\n        var line = w.globals.dom.Paper.line().attr({\n          x1: x1,\n          y1: y1,\n          x2: x2,\n          y2: y2,\n          stroke: lineColor,\n          'stroke-dasharray': dashArray,\n          'stroke-width': strokeWidth,\n          'stroke-linecap': strokeLineCap\n        });\n        return line;\n      }\n    }, {\n      key: \"drawRect\",\n      value: function drawRect() {\n        var x1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n        var y1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n        var x2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n        var y2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n        var radius = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n        var color = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '#fefefe';\n        var opacity = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1;\n        var strokeWidth = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;\n        var strokeColor = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null;\n        var strokeDashArray = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 0;\n        var w = this.w;\n        var rect = w.globals.dom.Paper.rect();\n        rect.attr({\n          x: x1,\n          y: y1,\n          width: x2 > 0 ? x2 : 0,\n          height: y2 > 0 ? y2 : 0,\n          rx: radius,\n          ry: radius,\n          opacity: opacity,\n          'stroke-width': strokeWidth !== null ? strokeWidth : 0,\n          stroke: strokeColor !== null ? strokeColor : 'none',\n          'stroke-dasharray': strokeDashArray\n        }); // fix apexcharts.js#1410\n\n        rect.node.setAttribute('fill', color);\n        return rect;\n      }\n    }, {\n      key: \"drawPolygon\",\n      value: function drawPolygon(polygonString) {\n        var stroke = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#e1e1e1';\n        var strokeWidth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n        var fill = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'none';\n        var w = this.w;\n        var polygon = w.globals.dom.Paper.polygon(polygonString).attr({\n          fill: fill,\n          stroke: stroke,\n          'stroke-width': strokeWidth\n        });\n        return polygon;\n      }\n    }, {\n      key: \"drawCircle\",\n      value: function drawCircle(radius) {\n        var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n        var w = this.w;\n        if (radius < 0) radius = 0;\n        var c = w.globals.dom.Paper.circle(radius * 2);\n\n        if (attrs !== null) {\n          c.attr(attrs);\n        }\n\n        return c;\n      }\n    }, {\n      key: \"drawPath\",\n      value: function drawPath(_ref) {\n        var _ref$d = _ref.d,\n            d = _ref$d === void 0 ? '' : _ref$d,\n            _ref$stroke = _ref.stroke,\n            stroke = _ref$stroke === void 0 ? '#a8a8a8' : _ref$stroke,\n            _ref$strokeWidth = _ref.strokeWidth,\n            strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth,\n            fill = _ref.fill,\n            _ref$fillOpacity = _ref.fillOpacity,\n            fillOpacity = _ref$fillOpacity === void 0 ? 1 : _ref$fillOpacity,\n            _ref$strokeOpacity = _ref.strokeOpacity,\n            strokeOpacity = _ref$strokeOpacity === void 0 ? 1 : _ref$strokeOpacity,\n            classes = _ref.classes,\n            _ref$strokeLinecap = _ref.strokeLinecap,\n            strokeLinecap = _ref$strokeLinecap === void 0 ? null : _ref$strokeLinecap,\n            _ref$strokeDashArray = _ref.strokeDashArray,\n            strokeDashArray = _ref$strokeDashArray === void 0 ? 0 : _ref$strokeDashArray;\n        var w = this.w;\n\n        if (strokeLinecap === null) {\n          strokeLinecap = w.config.stroke.lineCap;\n        }\n\n        if (d.indexOf('undefined') > -1 || d.indexOf('NaN') > -1) {\n          d = \"M 0 \".concat(w.globals.gridHeight);\n        }\n\n        var p = w.globals.dom.Paper.path(d).attr({\n          fill: fill,\n          'fill-opacity': fillOpacity,\n          stroke: stroke,\n          'stroke-opacity': strokeOpacity,\n          'stroke-linecap': strokeLinecap,\n          'stroke-width': strokeWidth,\n          'stroke-dasharray': strokeDashArray,\n          class: classes\n        });\n        return p;\n      }\n    }, {\n      key: \"group\",\n      value: function group() {\n        var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        var w = this.w;\n        var g = w.globals.dom.Paper.group();\n\n        if (attrs !== null) {\n          g.attr(attrs);\n        }\n\n        return g;\n      }\n    }, {\n      key: \"move\",\n      value: function move(x, y) {\n        var move = ['M', x, y].join(' ');\n        return move;\n      }\n    }, {\n      key: \"line\",\n      value: function line(x, y) {\n        var hORv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        var line = null;\n\n        if (hORv === null) {\n          line = [' L', x, y].join(' ');\n        } else if (hORv === 'H') {\n          line = [' H', x].join(' ');\n        } else if (hORv === 'V') {\n          line = [' V', y].join(' ');\n        }\n\n        return line;\n      }\n    }, {\n      key: \"curve\",\n      value: function curve(x1, y1, x2, y2, x, y) {\n        var curve = ['C', x1, y1, x2, y2, x, y].join(' ');\n        return curve;\n      }\n    }, {\n      key: \"quadraticCurve\",\n      value: function quadraticCurve(x1, y1, x, y) {\n        var curve = ['Q', x1, y1, x, y].join(' ');\n        return curve;\n      }\n    }, {\n      key: \"arc\",\n      value: function arc(rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y) {\n        var relative = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;\n        var coord = 'A';\n        if (relative) coord = 'a';\n        var arc = [coord, rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y].join(' ');\n        return arc;\n      }\n      /**\n       * @memberof Graphics\n       * @param {object}\n       *  i = series's index\n       *  realIndex = realIndex is series's actual index when it was drawn time. After several redraws, the iterating \"i\" may change in loops, but realIndex doesn't\n       *  pathFrom = existing pathFrom to animateTo\n       *  pathTo = new Path to which d attr will be animated from pathFrom to pathTo\n       *  stroke = line Color\n       *  strokeWidth = width of path Line\n       *  fill = it can be gradient, single color, pattern or image\n       *  animationDelay = how much to delay when starting animation (in milliseconds)\n       *  dataChangeSpeed = for dynamic animations, when data changes\n       *  className = class attribute to add\n       * @return {object} svg.js path object\n       **/\n\n    }, {\n      key: \"renderPaths\",\n      value: function renderPaths(_ref2) {\n        var j = _ref2.j,\n            realIndex = _ref2.realIndex,\n            pathFrom = _ref2.pathFrom,\n            pathTo = _ref2.pathTo,\n            stroke = _ref2.stroke,\n            strokeWidth = _ref2.strokeWidth,\n            strokeLinecap = _ref2.strokeLinecap,\n            fill = _ref2.fill,\n            animationDelay = _ref2.animationDelay,\n            initialSpeed = _ref2.initialSpeed,\n            dataChangeSpeed = _ref2.dataChangeSpeed,\n            className = _ref2.className,\n            _ref2$shouldClipToGri = _ref2.shouldClipToGrid,\n            shouldClipToGrid = _ref2$shouldClipToGri === void 0 ? true : _ref2$shouldClipToGri,\n            _ref2$bindEventsOnPat = _ref2.bindEventsOnPaths,\n            bindEventsOnPaths = _ref2$bindEventsOnPat === void 0 ? true : _ref2$bindEventsOnPat,\n            _ref2$drawShadow = _ref2.drawShadow,\n            drawShadow = _ref2$drawShadow === void 0 ? true : _ref2$drawShadow;\n        var w = this.w;\n        var filters = new Filters(this.ctx);\n        var anim = new Animations(this.ctx);\n        var initialAnim = this.w.config.chart.animations.enabled;\n        var dynamicAnim = initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n        var d;\n        var shouldAnimate = !!(initialAnim && !w.globals.resized || dynamicAnim && w.globals.dataChanged && w.globals.shouldAnimate);\n\n        if (shouldAnimate) {\n          d = pathFrom;\n        } else {\n          d = pathTo;\n          w.globals.animationEnded = true;\n        }\n\n        var strokeDashArrayOpt = w.config.stroke.dashArray;\n        var strokeDashArray = 0;\n\n        if (Array.isArray(strokeDashArrayOpt)) {\n          strokeDashArray = strokeDashArrayOpt[realIndex];\n        } else {\n          strokeDashArray = w.config.stroke.dashArray;\n        }\n\n        var el = this.drawPath({\n          d: d,\n          stroke: stroke,\n          strokeWidth: strokeWidth,\n          fill: fill,\n          fillOpacity: 1,\n          classes: className,\n          strokeLinecap: strokeLinecap,\n          strokeDashArray: strokeDashArray\n        });\n        el.attr('index', realIndex);\n\n        if (shouldClipToGrid) {\n          el.attr({\n            'clip-path': \"url(#gridRectMask\".concat(w.globals.cuid, \")\")\n          });\n        } // const defaultFilter = el.filterer\n\n\n        if (w.config.states.normal.filter.type !== 'none') {\n          filters.getDefaultFilter(el, realIndex);\n        } else {\n          if (w.config.chart.dropShadow.enabled && drawShadow) {\n            if (!w.config.chart.dropShadow.enabledOnSeries || w.config.chart.dropShadow.enabledOnSeries && w.config.chart.dropShadow.enabledOnSeries.indexOf(realIndex) !== -1) {\n              var shadow = w.config.chart.dropShadow;\n              filters.dropShadow(el, shadow, realIndex);\n            }\n          }\n        }\n\n        if (bindEventsOnPaths) {\n          el.node.addEventListener('mouseenter', this.pathMouseEnter.bind(this, el));\n          el.node.addEventListener('mouseleave', this.pathMouseLeave.bind(this, el));\n          el.node.addEventListener('mousedown', this.pathMouseDown.bind(this, el));\n        }\n\n        el.attr({\n          pathTo: pathTo,\n          pathFrom: pathFrom\n        });\n        var defaultAnimateOpts = {\n          el: el,\n          j: j,\n          realIndex: realIndex,\n          pathFrom: pathFrom,\n          pathTo: pathTo,\n          fill: fill,\n          strokeWidth: strokeWidth,\n          delay: animationDelay\n        };\n\n        if (initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n          anim.animatePathsGradually(_objectSpread2(_objectSpread2({}, defaultAnimateOpts), {}, {\n            speed: initialSpeed\n          }));\n        } else {\n          if (w.globals.resized || !w.globals.dataChanged) {\n            anim.showDelayedElements();\n          }\n        }\n\n        if (w.globals.dataChanged && dynamicAnim && shouldAnimate) {\n          anim.animatePathsGradually(_objectSpread2(_objectSpread2({}, defaultAnimateOpts), {}, {\n            speed: dataChangeSpeed\n          }));\n        }\n\n        return el;\n      }\n    }, {\n      key: \"drawPattern\",\n      value: function drawPattern(style, width, height) {\n        var stroke = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '#a8a8a8';\n        var strokeWidth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n        var w = this.w;\n        var p = w.globals.dom.Paper.pattern(width, height, function (add) {\n          if (style === 'horizontalLines') {\n            add.line(0, 0, height, 0).stroke({\n              color: stroke,\n              width: strokeWidth + 1\n            });\n          } else if (style === 'verticalLines') {\n            add.line(0, 0, 0, width).stroke({\n              color: stroke,\n              width: strokeWidth + 1\n            });\n          } else if (style === 'slantedLines') {\n            add.line(0, 0, width, height).stroke({\n              color: stroke,\n              width: strokeWidth\n            });\n          } else if (style === 'squares') {\n            add.rect(width, height).fill('none').stroke({\n              color: stroke,\n              width: strokeWidth\n            });\n          } else if (style === 'circles') {\n            add.circle(width).fill('none').stroke({\n              color: stroke,\n              width: strokeWidth\n            });\n          }\n        });\n        return p;\n      }\n    }, {\n      key: \"drawGradient\",\n      value: function drawGradient(style, gfrom, gto, opacityFrom, opacityTo) {\n        var size = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n        var stops = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;\n        var colorStops = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;\n        var i = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0;\n        var w = this.w;\n        var g;\n\n        if (gfrom.length < 9 && gfrom.indexOf('#') === 0) {\n          // if the hex contains alpha and is of 9 digit, skip the opacity\n          gfrom = Utils$1.hexToRgba(gfrom, opacityFrom);\n        }\n\n        if (gto.length < 9 && gto.indexOf('#') === 0) {\n          gto = Utils$1.hexToRgba(gto, opacityTo);\n        }\n\n        var stop1 = 0;\n        var stop2 = 1;\n        var stop3 = 1;\n        var stop4 = null;\n\n        if (stops !== null) {\n          stop1 = typeof stops[0] !== 'undefined' ? stops[0] / 100 : 0;\n          stop2 = typeof stops[1] !== 'undefined' ? stops[1] / 100 : 1;\n          stop3 = typeof stops[2] !== 'undefined' ? stops[2] / 100 : 1;\n          stop4 = typeof stops[3] !== 'undefined' ? stops[3] / 100 : null;\n        }\n\n        var radial = !!(w.config.chart.type === 'donut' || w.config.chart.type === 'pie' || w.config.chart.type === 'polarArea' || w.config.chart.type === 'bubble');\n\n        if (colorStops === null || colorStops.length === 0) {\n          g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) {\n            stop.at(stop1, gfrom, opacityFrom);\n            stop.at(stop2, gto, opacityTo);\n            stop.at(stop3, gto, opacityTo);\n\n            if (stop4 !== null) {\n              stop.at(stop4, gfrom, opacityFrom);\n            }\n          });\n        } else {\n          g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) {\n            var gradientStops = Array.isArray(colorStops[i]) ? colorStops[i] : colorStops;\n            gradientStops.forEach(function (s) {\n              stop.at(s.offset / 100, s.color, s.opacity);\n            });\n          });\n        }\n\n        if (!radial) {\n          if (style === 'vertical') {\n            g.from(0, 0).to(0, 1);\n          } else if (style === 'diagonal') {\n            g.from(0, 0).to(1, 1);\n          } else if (style === 'horizontal') {\n            g.from(0, 1).to(1, 1);\n          } else if (style === 'diagonal2') {\n            g.from(1, 0).to(0, 1);\n          }\n        } else {\n          var offx = w.globals.gridWidth / 2;\n          var offy = w.globals.gridHeight / 2;\n\n          if (w.config.chart.type !== 'bubble') {\n            g.attr({\n              gradientUnits: 'userSpaceOnUse',\n              cx: offx,\n              cy: offy,\n              r: size\n            });\n          } else {\n            g.attr({\n              cx: 0.5,\n              cy: 0.5,\n              r: 0.8,\n              fx: 0.2,\n              fy: 0.2\n            });\n          }\n        }\n\n        return g;\n      }\n    }, {\n      key: \"getTextBasedOnMaxWidth\",\n      value: function getTextBasedOnMaxWidth(_ref3) {\n        var text = _ref3.text,\n            maxWidth = _ref3.maxWidth,\n            fontSize = _ref3.fontSize,\n            fontFamily = _ref3.fontFamily;\n        var tRects = this.getTextRects(text, fontSize, fontFamily);\n        var wordWidth = tRects.width / text.length;\n        var wordsBasedOnWidth = Math.floor(maxWidth / wordWidth);\n\n        if (maxWidth < tRects.width) {\n          return text.slice(0, wordsBasedOnWidth - 3) + '...';\n        }\n\n        return text;\n      }\n    }, {\n      key: \"drawText\",\n      value: function drawText(_ref4) {\n        var _this = this;\n\n        var x = _ref4.x,\n            y = _ref4.y,\n            text = _ref4.text,\n            textAnchor = _ref4.textAnchor,\n            fontSize = _ref4.fontSize,\n            fontFamily = _ref4.fontFamily,\n            fontWeight = _ref4.fontWeight,\n            foreColor = _ref4.foreColor,\n            opacity = _ref4.opacity,\n            maxWidth = _ref4.maxWidth,\n            _ref4$cssClass = _ref4.cssClass,\n            cssClass = _ref4$cssClass === void 0 ? '' : _ref4$cssClass,\n            _ref4$isPlainText = _ref4.isPlainText,\n            isPlainText = _ref4$isPlainText === void 0 ? true : _ref4$isPlainText;\n        var w = this.w;\n        if (typeof text === 'undefined') text = '';\n        var truncatedText = text;\n\n        if (!textAnchor) {\n          textAnchor = 'start';\n        }\n\n        if (!foreColor || !foreColor.length) {\n          foreColor = w.config.chart.foreColor;\n        }\n\n        fontFamily = fontFamily || w.config.chart.fontFamily;\n        fontSize = fontSize || '11px';\n        fontWeight = fontWeight || 'regular';\n        var commonProps = {\n          maxWidth: maxWidth,\n          fontSize: fontSize,\n          fontFamily: fontFamily\n        };\n        var elText;\n\n        if (Array.isArray(text)) {\n          elText = w.globals.dom.Paper.text(function (add) {\n            for (var i = 0; i < text.length; i++) {\n              truncatedText = text[i];\n\n              if (maxWidth) {\n                truncatedText = _this.getTextBasedOnMaxWidth(_objectSpread2({\n                  text: text[i]\n                }, commonProps));\n              }\n\n              i === 0 ? add.tspan(truncatedText) : add.tspan(truncatedText).newLine();\n            }\n          });\n        } else {\n          if (maxWidth) {\n            truncatedText = this.getTextBasedOnMaxWidth(_objectSpread2({\n              text: text\n            }, commonProps));\n          }\n\n          elText = isPlainText ? w.globals.dom.Paper.plain(text) : w.globals.dom.Paper.text(function (add) {\n            return add.tspan(truncatedText);\n          });\n        }\n\n        elText.attr({\n          x: x,\n          y: y,\n          'text-anchor': textAnchor,\n          'dominant-baseline': 'auto',\n          'font-size': fontSize,\n          'font-family': fontFamily,\n          'font-weight': fontWeight,\n          fill: foreColor,\n          class: 'apexcharts-text ' + cssClass\n        });\n        elText.node.style.fontFamily = fontFamily;\n        elText.node.style.opacity = opacity;\n        return elText;\n      }\n    }, {\n      key: \"drawMarker\",\n      value: function drawMarker(x, y, opts) {\n        x = x || 0;\n        var size = opts.pSize || 0;\n        var elPoint = null;\n\n        if (opts.shape === 'square' || opts.shape === 'rect') {\n          var radius = opts.pRadius === undefined ? size / 2 : opts.pRadius;\n\n          if (y === null || !size) {\n            size = 0;\n            radius = 0;\n          }\n\n          var nSize = size * 1.2 + radius;\n          var p = this.drawRect(nSize, nSize, nSize, nSize, radius);\n          p.attr({\n            x: x - nSize / 2,\n            y: y - nSize / 2,\n            cx: x,\n            cy: y,\n            class: opts.class ? opts.class : '',\n            fill: opts.pointFillColor,\n            'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1,\n            stroke: opts.pointStrokeColor,\n            'stroke-width': opts.pointStrokeWidth ? opts.pointStrokeWidth : 0,\n            'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1\n          });\n          elPoint = p;\n        } else if (opts.shape === 'circle' || !opts.shape) {\n          if (!Utils$1.isNumber(y)) {\n            size = 0;\n            y = 0;\n          } // let nSize = size - opts.pRadius / 2 < 0 ? 0 : size - opts.pRadius / 2\n\n\n          elPoint = this.drawCircle(size, {\n            cx: x,\n            cy: y,\n            class: opts.class ? opts.class : '',\n            stroke: opts.pointStrokeColor,\n            fill: opts.pointFillColor,\n            'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1,\n            'stroke-width': opts.pointStrokeWidth ? opts.pointStrokeWidth : 0,\n            'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1\n          });\n        }\n\n        return elPoint;\n      }\n    }, {\n      key: \"pathMouseEnter\",\n      value: function pathMouseEnter(path, e) {\n        var w = this.w;\n        var filters = new Filters(this.ctx);\n        var i = parseInt(path.node.getAttribute('index'), 10);\n        var j = parseInt(path.node.getAttribute('j'), 10);\n\n        if (typeof w.config.chart.events.dataPointMouseEnter === 'function') {\n          w.config.chart.events.dataPointMouseEnter(e, this.ctx, {\n            seriesIndex: i,\n            dataPointIndex: j,\n            w: w\n          });\n        }\n\n        this.ctx.events.fireEvent('dataPointMouseEnter', [e, this.ctx, {\n          seriesIndex: i,\n          dataPointIndex: j,\n          w: w\n        }]);\n\n        if (w.config.states.active.filter.type !== 'none') {\n          if (path.node.getAttribute('selected') === 'true') {\n            return;\n          }\n        }\n\n        if (w.config.states.hover.filter.type !== 'none') {\n          if (!w.globals.isTouchDevice) {\n            var hoverFilter = w.config.states.hover.filter;\n            filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value);\n          }\n        }\n      }\n    }, {\n      key: \"pathMouseLeave\",\n      value: function pathMouseLeave(path, e) {\n        var w = this.w;\n        var filters = new Filters(this.ctx);\n        var i = parseInt(path.node.getAttribute('index'), 10);\n        var j = parseInt(path.node.getAttribute('j'), 10);\n\n        if (typeof w.config.chart.events.dataPointMouseLeave === 'function') {\n          w.config.chart.events.dataPointMouseLeave(e, this.ctx, {\n            seriesIndex: i,\n            dataPointIndex: j,\n            w: w\n          });\n        }\n\n        this.ctx.events.fireEvent('dataPointMouseLeave', [e, this.ctx, {\n          seriesIndex: i,\n          dataPointIndex: j,\n          w: w\n        }]);\n\n        if (w.config.states.active.filter.type !== 'none') {\n          if (path.node.getAttribute('selected') === 'true') {\n            return;\n          }\n        }\n\n        if (w.config.states.hover.filter.type !== 'none') {\n          filters.getDefaultFilter(path, i);\n        }\n      }\n    }, {\n      key: \"pathMouseDown\",\n      value: function pathMouseDown(path, e) {\n        var w = this.w;\n        var filters = new Filters(this.ctx);\n        var i = parseInt(path.node.getAttribute('index'), 10);\n        var j = parseInt(path.node.getAttribute('j'), 10);\n        var selected = 'false';\n\n        if (path.node.getAttribute('selected') === 'true') {\n          path.node.setAttribute('selected', 'false');\n\n          if (w.globals.selectedDataPoints[i].indexOf(j) > -1) {\n            var index = w.globals.selectedDataPoints[i].indexOf(j);\n            w.globals.selectedDataPoints[i].splice(index, 1);\n          }\n        } else {\n          if (!w.config.states.active.allowMultipleDataPointsSelection && w.globals.selectedDataPoints.length > 0) {\n            w.globals.selectedDataPoints = [];\n            var elPaths = w.globals.dom.Paper.select('.apexcharts-series path').members;\n            var elCircles = w.globals.dom.Paper.select('.apexcharts-series circle, .apexcharts-series rect').members;\n\n            var deSelect = function deSelect(els) {\n              Array.prototype.forEach.call(els, function (el) {\n                el.node.setAttribute('selected', 'false');\n                filters.getDefaultFilter(el, i);\n              });\n            };\n\n            deSelect(elPaths);\n            deSelect(elCircles);\n          }\n\n          path.node.setAttribute('selected', 'true');\n          selected = 'true';\n\n          if (typeof w.globals.selectedDataPoints[i] === 'undefined') {\n            w.globals.selectedDataPoints[i] = [];\n          }\n\n          w.globals.selectedDataPoints[i].push(j);\n        }\n\n        if (selected === 'true') {\n          var activeFilter = w.config.states.active.filter;\n\n          if (activeFilter !== 'none') {\n            filters.applyFilter(path, i, activeFilter.type, activeFilter.value);\n          } else {\n            // Reapply the hover filter in case it was removed by `deselect`when there is no active filter and it is not a touch device\n            if (w.config.states.hover.filter !== 'none') {\n              if (!w.globals.isTouchDevice) {\n                var hoverFilter = w.config.states.hover.filter;\n                filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value);\n              }\n            }\n          }\n        } else {\n          // If the item was deselected, apply hover state filter if it is not a touch device\n          if (w.config.states.active.filter.type !== 'none') {\n            if (w.config.states.hover.filter.type !== 'none' && !w.globals.isTouchDevice) {\n              var hoverFilter = w.config.states.hover.filter;\n              filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value);\n            } else {\n              filters.getDefaultFilter(path, i);\n            }\n          }\n        }\n\n        if (typeof w.config.chart.events.dataPointSelection === 'function') {\n          w.config.chart.events.dataPointSelection(e, this.ctx, {\n            selectedDataPoints: w.globals.selectedDataPoints,\n            seriesIndex: i,\n            dataPointIndex: j,\n            w: w\n          });\n        }\n\n        if (e) {\n          this.ctx.events.fireEvent('dataPointSelection', [e, this.ctx, {\n            selectedDataPoints: w.globals.selectedDataPoints,\n            seriesIndex: i,\n            dataPointIndex: j,\n            w: w\n          }]);\n        }\n      }\n    }, {\n      key: \"rotateAroundCenter\",\n      value: function rotateAroundCenter(el) {\n        var coord = {};\n\n        if (el && typeof el.getBBox === 'function') {\n          coord = el.getBBox();\n        }\n\n        var x = coord.x + coord.width / 2;\n        var y = coord.y + coord.height / 2;\n        return {\n          x: x,\n          y: y\n        };\n      }\n    }, {\n      key: \"getTextRects\",\n      value: function getTextRects(text, fontSize, fontFamily, transform) {\n        var useBBox = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n        var w = this.w;\n        var virtualText = this.drawText({\n          x: -200,\n          y: -200,\n          text: text,\n          textAnchor: 'start',\n          fontSize: fontSize,\n          fontFamily: fontFamily,\n          foreColor: '#fff',\n          opacity: 0\n        });\n\n        if (transform) {\n          virtualText.attr('transform', transform);\n        }\n\n        w.globals.dom.Paper.add(virtualText);\n        var rect = virtualText.bbox();\n\n        if (!useBBox) {\n          rect = virtualText.node.getBoundingClientRect();\n        }\n\n        virtualText.remove();\n        return {\n          width: rect.width,\n          height: rect.height\n        };\n      }\n      /**\n       * append ... to long text\n       * http://stackoverflow.com/questions/9241315/trimming-text-to-a-given-pixel-width-in-svg\n       * @memberof Graphics\n       **/\n\n    }, {\n      key: \"placeTextWithEllipsis\",\n      value: function placeTextWithEllipsis(textObj, textString, width) {\n        if (typeof textObj.getComputedTextLength !== 'function') return;\n        textObj.textContent = textString;\n\n        if (textString.length > 0) {\n          // ellipsis is needed\n          if (textObj.getComputedTextLength() >= width / 1.1) {\n            for (var x = textString.length - 3; x > 0; x -= 3) {\n              if (textObj.getSubStringLength(0, x) <= width / 1.1) {\n                textObj.textContent = textString.substring(0, x) + '...';\n                return;\n              }\n            }\n\n            textObj.textContent = '.'; // can't place at all\n          }\n        }\n      }\n    }], [{\n      key: \"setAttrs\",\n      value: function setAttrs(el, attrs) {\n        for (var key in attrs) {\n          if (attrs.hasOwnProperty(key)) {\n            el.setAttribute(key, attrs[key]);\n          }\n        }\n      }\n    }]);\n\n    return Graphics;\n  }();\n\n  /*\n   ** Util functions which are dependent on ApexCharts instance\n   */\n  var CoreUtils = /*#__PURE__*/function () {\n    function CoreUtils(ctx) {\n      _classCallCheck(this, CoreUtils);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(CoreUtils, [{\n      key: \"getStackedSeriesTotals\",\n      value:\n      /**\n       * @memberof CoreUtils\n       * returns the sum of all individual values in a multiple stacked series\n       * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]]\n       *  @return [34,36,48,13]\n       **/\n      function getStackedSeriesTotals() {\n        var excludedSeriesIndices = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n        var w = this.w;\n        var total = [];\n        if (w.globals.series.length === 0) return total;\n\n        for (var i = 0; i < w.globals.series[w.globals.maxValsInArrayIndex].length; i++) {\n          var t = 0;\n\n          for (var j = 0; j < w.globals.series.length; j++) {\n            if (typeof w.globals.series[j][i] !== 'undefined' && excludedSeriesIndices.indexOf(j) === -1) {\n              t += w.globals.series[j][i];\n            }\n          }\n\n          total.push(t);\n        }\n\n        return total;\n      } // get total of the all values inside all series\n\n    }, {\n      key: \"getSeriesTotalByIndex\",\n      value: function getSeriesTotalByIndex() {\n        var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n        if (index === null) {\n          // non-plot chart types - pie / donut / circle\n          return this.w.config.series.reduce(function (acc, cur) {\n            return acc + cur;\n          }, 0);\n        } else {\n          // axis charts - supporting multiple series\n          return this.w.globals.series[index].reduce(function (acc, cur) {\n            return acc + cur;\n          }, 0);\n        }\n      }\n    }, {\n      key: \"isSeriesNull\",\n      value: function isSeriesNull() {\n        var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        var r = [];\n\n        if (index === null) {\n          // non-plot chart types - pie / donut / circle\n          r = this.w.config.series.filter(function (d) {\n            return d !== null;\n          });\n        } else {\n          // axis charts - supporting multiple series\n          r = this.w.config.series[index].data.filter(function (d) {\n            return d !== null;\n          });\n        }\n\n        return r.length === 0;\n      }\n    }, {\n      key: \"seriesHaveSameValues\",\n      value: function seriesHaveSameValues(index) {\n        return this.w.globals.series[index].every(function (val, i, arr) {\n          return val === arr[0];\n        });\n      }\n    }, {\n      key: \"getCategoryLabels\",\n      value: function getCategoryLabels(labels) {\n        var w = this.w;\n        var catLabels = labels.slice();\n\n        if (w.config.xaxis.convertedCatToNumeric) {\n          catLabels = labels.map(function (i, li) {\n            return w.config.xaxis.labels.formatter(i - w.globals.minX + 1);\n          });\n        }\n\n        return catLabels;\n      } // maxValsInArrayIndex is the index of series[] which has the largest number of items\n\n    }, {\n      key: \"getLargestSeries\",\n      value: function getLargestSeries() {\n        var w = this.w;\n        w.globals.maxValsInArrayIndex = w.globals.series.map(function (a) {\n          return a.length;\n        }).indexOf(Math.max.apply(Math, w.globals.series.map(function (a) {\n          return a.length;\n        })));\n      }\n    }, {\n      key: \"getLargestMarkerSize\",\n      value: function getLargestMarkerSize() {\n        var w = this.w;\n        var size = 0;\n        w.globals.markers.size.forEach(function (m) {\n          size = Math.max(size, m);\n        });\n\n        if (w.config.markers.discrete && w.config.markers.discrete.length) {\n          w.config.markers.discrete.forEach(function (m) {\n            size = Math.max(size, m.size);\n          });\n        }\n\n        if (size > 0) {\n          size += w.config.markers.hover.sizeOffset + 1;\n        }\n\n        w.globals.markers.largestSize = size;\n        return size;\n      }\n      /**\n       * @memberof Core\n       * returns the sum of all values in a series\n       * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]]\n       *  @return [120, 11]\n       **/\n\n    }, {\n      key: \"getSeriesTotals\",\n      value: function getSeriesTotals() {\n        var w = this.w;\n        w.globals.seriesTotals = w.globals.series.map(function (ser, index) {\n          var total = 0;\n\n          if (Array.isArray(ser)) {\n            for (var j = 0; j < ser.length; j++) {\n              total += ser[j];\n            }\n          } else {\n            // for pie/donuts/gauges\n            total += ser;\n          }\n\n          return total;\n        });\n      }\n    }, {\n      key: \"getSeriesTotalsXRange\",\n      value: function getSeriesTotalsXRange(minX, maxX) {\n        var w = this.w;\n        var seriesTotalsXRange = w.globals.series.map(function (ser, index) {\n          var total = 0;\n\n          for (var j = 0; j < ser.length; j++) {\n            if (w.globals.seriesX[index][j] > minX && w.globals.seriesX[index][j] < maxX) {\n              total += ser[j];\n            }\n          }\n\n          return total;\n        });\n        return seriesTotalsXRange;\n      }\n      /**\n       * @memberof CoreUtils\n       * returns the percentage value of all individual values which can be used in a 100% stacked series\n       * Eg. w.globals.series = [[32, 33, 43, 12], [2, 3, 5, 1]]\n       *  @return [[94.11, 91.66, 89.58, 92.30], [5.88, 8.33, 10.41, 7.7]]\n       **/\n\n    }, {\n      key: \"getPercentSeries\",\n      value: function getPercentSeries() {\n        var w = this.w;\n        w.globals.seriesPercent = w.globals.series.map(function (ser, index) {\n          var seriesPercent = [];\n\n          if (Array.isArray(ser)) {\n            for (var j = 0; j < ser.length; j++) {\n              var total = w.globals.stackedSeriesTotals[j];\n              var percent = 0;\n\n              if (total) {\n                percent = 100 * ser[j] / total;\n              }\n\n              seriesPercent.push(percent);\n            }\n          } else {\n            var _total = w.globals.seriesTotals.reduce(function (acc, val) {\n              return acc + val;\n            }, 0);\n\n            var _percent = 100 * ser / _total;\n\n            seriesPercent.push(_percent);\n          }\n\n          return seriesPercent;\n        });\n      }\n    }, {\n      key: \"getCalculatedRatios\",\n      value: function getCalculatedRatios() {\n        var gl = this.w.globals;\n        var yRatio = [];\n        var invertedYRatio = 0;\n        var xRatio = 0;\n        var initialXRatio = 0;\n        var invertedXRatio = 0;\n        var zRatio = 0;\n        var baseLineY = [];\n        var baseLineInvertedY = 0.1;\n        var baseLineX = 0;\n        gl.yRange = [];\n\n        if (gl.isMultipleYAxis) {\n          for (var i = 0; i < gl.minYArr.length; i++) {\n            gl.yRange.push(Math.abs(gl.minYArr[i] - gl.maxYArr[i]));\n            baseLineY.push(0);\n          }\n        } else {\n          gl.yRange.push(Math.abs(gl.minY - gl.maxY));\n        }\n\n        gl.xRange = Math.abs(gl.maxX - gl.minX);\n        gl.zRange = Math.abs(gl.maxZ - gl.minZ); // multiple y axis\n\n        for (var _i = 0; _i < gl.yRange.length; _i++) {\n          yRatio.push(gl.yRange[_i] / gl.gridHeight);\n        }\n\n        xRatio = gl.xRange / gl.gridWidth;\n        initialXRatio = Math.abs(gl.initialMaxX - gl.initialMinX) / gl.gridWidth;\n        invertedYRatio = gl.yRange / gl.gridWidth;\n        invertedXRatio = gl.xRange / gl.gridHeight;\n        zRatio = gl.zRange / gl.gridHeight * 16;\n\n        if (!zRatio) {\n          zRatio = 1;\n        }\n\n        if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) {\n          // Negative numbers present in series\n          gl.hasNegs = true;\n        }\n\n        if (gl.isMultipleYAxis) {\n          baseLineY = []; // baseline variables is the 0 of the yaxis which will be needed when there are negatives\n\n          for (var _i2 = 0; _i2 < yRatio.length; _i2++) {\n            baseLineY.push(-gl.minYArr[_i2] / yRatio[_i2]);\n          }\n        } else {\n          baseLineY.push(-gl.minY / yRatio[0]);\n\n          if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) {\n            baseLineInvertedY = -gl.minY / invertedYRatio; // this is for bar chart\n\n            baseLineX = gl.minX / xRatio;\n          }\n        }\n\n        return {\n          yRatio: yRatio,\n          invertedYRatio: invertedYRatio,\n          zRatio: zRatio,\n          xRatio: xRatio,\n          initialXRatio: initialXRatio,\n          invertedXRatio: invertedXRatio,\n          baseLineInvertedY: baseLineInvertedY,\n          baseLineY: baseLineY,\n          baseLineX: baseLineX\n        };\n      }\n    }, {\n      key: \"getLogSeries\",\n      value: function getLogSeries(series) {\n        var _this = this;\n\n        var w = this.w;\n        w.globals.seriesLog = series.map(function (s, i) {\n          if (w.config.yaxis[i] && w.config.yaxis[i].logarithmic) {\n            return s.map(function (d) {\n              if (d === null) return null;\n              return _this.getLogVal(w.config.yaxis[i].logBase, d, i);\n            });\n          } else {\n            return s;\n          }\n        });\n        return w.globals.invalidLogScale ? series : w.globals.seriesLog;\n      }\n    }, {\n      key: \"getBaseLog\",\n      value: function getBaseLog(base, value) {\n        return Math.log(value) / Math.log(base);\n      }\n    }, {\n      key: \"getLogVal\",\n      value: function getLogVal(b, d, yIndex) {\n        if (d === 0) {\n          return 0;\n        }\n\n        var w = this.w;\n        var min_log_val = w.globals.minYArr[yIndex] === 0 ? -1 // make sure we dont calculate log of 0\n        : this.getBaseLog(b, w.globals.minYArr[yIndex]);\n        var max_log_val = w.globals.maxYArr[yIndex] === 0 ? 0 // make sure we dont calculate log of 0\n        : this.getBaseLog(b, w.globals.maxYArr[yIndex]);\n        var number_of_height_levels = max_log_val - min_log_val;\n        if (d < 1) return d / number_of_height_levels;\n        var log_height_value = this.getBaseLog(b, d) - min_log_val;\n        return log_height_value / number_of_height_levels;\n      }\n    }, {\n      key: \"getLogYRatios\",\n      value: function getLogYRatios(yRatio) {\n        var _this2 = this;\n\n        var w = this.w;\n        var gl = this.w.globals;\n        gl.yLogRatio = yRatio.slice();\n        gl.logYRange = gl.yRange.map(function (yRange, i) {\n          if (w.config.yaxis[i] && _this2.w.config.yaxis[i].logarithmic) {\n            var maxY = -Number.MAX_VALUE;\n            var minY = Number.MIN_VALUE;\n            var range = 1;\n            gl.seriesLog.forEach(function (s, si) {\n              s.forEach(function (v) {\n                if (w.config.yaxis[si] && w.config.yaxis[si].logarithmic) {\n                  maxY = Math.max(v, maxY);\n                  minY = Math.min(v, minY);\n                }\n              });\n            });\n            range = Math.pow(gl.yRange[i], Math.abs(minY - maxY) / gl.yRange[i]);\n            gl.yLogRatio[i] = range / gl.gridHeight;\n            return range;\n          }\n        });\n        return gl.invalidLogScale ? yRatio.slice() : gl.yLogRatio;\n      } // Some config objects can be array - and we need to extend them correctly\n\n    }], [{\n      key: \"checkComboSeries\",\n      value: function checkComboSeries(series) {\n        var comboCharts = false;\n        var comboBarCount = 0;\n        var comboCount = 0; // if user specified a type in series too, turn on comboCharts flag\n\n        if (series.length && typeof series[0].type !== 'undefined') {\n          series.forEach(function (s) {\n            if (s.type === 'bar' || s.type === 'column' || s.type === 'candlestick' || s.type === 'boxPlot') {\n              comboBarCount++;\n            }\n\n            if (typeof s.type !== 'undefined') {\n              comboCount++;\n            }\n          });\n        }\n\n        if (comboCount > 0) {\n          comboCharts = true;\n        }\n\n        return {\n          comboBarCount: comboBarCount,\n          comboCharts: comboCharts\n        };\n      }\n    }, {\n      key: \"extendArrayProps\",\n      value: function extendArrayProps(configInstance, options, w) {\n        if (options.yaxis) {\n          options = configInstance.extendYAxis(options, w);\n        }\n\n        if (options.annotations) {\n          if (options.annotations.yaxis) {\n            options = configInstance.extendYAxisAnnotations(options);\n          }\n\n          if (options.annotations.xaxis) {\n            options = configInstance.extendXAxisAnnotations(options);\n          }\n\n          if (options.annotations.points) {\n            options = configInstance.extendPointAnnotations(options);\n          }\n        }\n\n        return options;\n      }\n    }]);\n\n    return CoreUtils;\n  }();\n\n  var Helpers$4 = /*#__PURE__*/function () {\n    function Helpers(annoCtx) {\n      _classCallCheck(this, Helpers);\n\n      this.w = annoCtx.w;\n      this.annoCtx = annoCtx;\n    }\n\n    _createClass(Helpers, [{\n      key: \"setOrientations\",\n      value: function setOrientations(anno) {\n        var annoIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n        var w = this.w;\n\n        if (anno.label.orientation === 'vertical') {\n          var i = annoIndex !== null ? annoIndex : 0;\n          var xAnno = w.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='\".concat(i, \"']\"));\n\n          if (xAnno !== null) {\n            var xAnnoCoord = xAnno.getBoundingClientRect();\n            xAnno.setAttribute('x', parseFloat(xAnno.getAttribute('x')) - xAnnoCoord.height + 4);\n\n            if (anno.label.position === 'top') {\n              xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) + xAnnoCoord.width);\n            } else {\n              xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) - xAnnoCoord.width);\n            }\n\n            var annoRotatingCenter = this.annoCtx.graphics.rotateAroundCenter(xAnno);\n            var x = annoRotatingCenter.x;\n            var y = annoRotatingCenter.y;\n            xAnno.setAttribute('transform', \"rotate(-90 \".concat(x, \" \").concat(y, \")\"));\n          }\n        }\n      }\n    }, {\n      key: \"addBackgroundToAnno\",\n      value: function addBackgroundToAnno(annoEl, anno) {\n        var w = this.w;\n        if (!annoEl || typeof anno.label.text === 'undefined' || typeof anno.label.text !== 'undefined' && !String(anno.label.text).trim()) return null;\n        var elGridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid').getBoundingClientRect();\n        var coords = annoEl.getBoundingClientRect();\n        var pleft = anno.label.style.padding.left;\n        var pright = anno.label.style.padding.right;\n        var ptop = anno.label.style.padding.top;\n        var pbottom = anno.label.style.padding.bottom;\n\n        if (anno.label.orientation === 'vertical') {\n          ptop = anno.label.style.padding.left;\n          pbottom = anno.label.style.padding.right;\n          pleft = anno.label.style.padding.top;\n          pright = anno.label.style.padding.bottom;\n        }\n\n        var x1 = coords.left - elGridRect.left - pleft;\n        var y1 = coords.top - elGridRect.top - ptop;\n        var elRect = this.annoCtx.graphics.drawRect(x1 - w.globals.barPadForNumericAxis, y1, coords.width + pleft + pright, coords.height + ptop + pbottom, anno.label.borderRadius, anno.label.style.background, 1, anno.label.borderWidth, anno.label.borderColor, 0);\n\n        if (anno.id) {\n          // don't escapeString for this ID as it causes duplicate rects\n          elRect.node.classList.add(anno.id);\n        }\n\n        return elRect;\n      }\n    }, {\n      key: \"annotationsBackground\",\n      value: function annotationsBackground() {\n        var _this = this;\n\n        var w = this.w;\n\n        var add = function add(anno, i, type) {\n          var annoLabel = w.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(type, \"-annotations .apexcharts-\").concat(type, \"-annotation-label[rel='\").concat(i, \"']\"));\n\n          if (annoLabel) {\n            var parent = annoLabel.parentNode;\n\n            var elRect = _this.addBackgroundToAnno(annoLabel, anno);\n\n            if (elRect) {\n              parent.insertBefore(elRect.node, annoLabel);\n\n              if (anno.label.mouseEnter) {\n                elRect.node.addEventListener('mouseenter', anno.label.mouseEnter.bind(_this, anno));\n              }\n\n              if (anno.label.mouseLeave) {\n                elRect.node.addEventListener('mouseleave', anno.label.mouseLeave.bind(_this, anno));\n              }\n\n              if (anno.label.click) {\n                elRect.node.addEventListener('click', anno.label.click.bind(_this, anno));\n              }\n            }\n          }\n        };\n\n        w.config.annotations.xaxis.map(function (anno, i) {\n          add(anno, i, 'xaxis');\n        });\n        w.config.annotations.yaxis.map(function (anno, i) {\n          add(anno, i, 'yaxis');\n        });\n        w.config.annotations.points.map(function (anno, i) {\n          add(anno, i, 'point');\n        });\n      }\n    }, {\n      key: \"getY1Y2\",\n      value: function getY1Y2(type, anno) {\n        var y = type === 'y1' ? anno.y : anno.y2;\n        var yP;\n        var w = this.w;\n\n        if (this.annoCtx.invertAxis) {\n          var catIndex = w.globals.labels.indexOf(y);\n\n          if (w.config.xaxis.convertedCatToNumeric) {\n            catIndex = w.globals.categoryLabels.indexOf(y);\n          }\n\n          var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (catIndex + 1) + ')');\n\n          if (xLabel) {\n            yP = parseFloat(xLabel.getAttribute('y'));\n          }\n        } else {\n          var yPos;\n\n          if (w.config.yaxis[anno.yAxisIndex].logarithmic) {\n            var coreUtils = new CoreUtils(this.annoCtx.ctx);\n            y = coreUtils.getLogVal(y, anno.yAxisIndex);\n            yPos = y / w.globals.yLogRatio[anno.yAxisIndex];\n          } else {\n            yPos = (y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight);\n          }\n\n          yP = w.globals.gridHeight - yPos;\n\n          if (anno.marker && (anno.y === undefined || anno.y === null)) {\n            // point annotation\n            yP = 0;\n          }\n\n          if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) {\n            yP = yPos;\n          }\n        }\n\n        if (typeof y === 'string' && y.indexOf('px') > -1) {\n          yP = parseFloat(y);\n        }\n\n        return yP;\n      }\n    }, {\n      key: \"getX1X2\",\n      value: function getX1X2(type, anno) {\n        var w = this.w;\n        var min = this.annoCtx.invertAxis ? w.globals.minY : w.globals.minX;\n        var max = this.annoCtx.invertAxis ? w.globals.maxY : w.globals.maxX;\n        var range = this.annoCtx.invertAxis ? w.globals.yRange[0] : w.globals.xRange;\n        var x1 = (anno.x - min) / (range / w.globals.gridWidth);\n\n        if (this.annoCtx.inversedReversedAxis) {\n          x1 = (max - anno.x) / (range / w.globals.gridWidth);\n        }\n\n        if ((w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) && !this.annoCtx.invertAxis && !w.globals.dataFormatXNumeric) {\n          x1 = this.getStringX(anno.x);\n        }\n\n        var x2 = (anno.x2 - min) / (range / w.globals.gridWidth);\n\n        if (this.annoCtx.inversedReversedAxis) {\n          x2 = (max - anno.x2) / (range / w.globals.gridWidth);\n        }\n\n        if ((w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) && !this.annoCtx.invertAxis && !w.globals.dataFormatXNumeric) {\n          x2 = this.getStringX(anno.x2);\n        }\n\n        if ((anno.x === undefined || anno.x === null) && anno.marker) {\n          // point annotation in a horizontal chart\n          x1 = w.globals.gridWidth;\n        }\n\n        if (type === 'x1' && typeof anno.x === 'string' && anno.x.indexOf('px') > -1) {\n          x1 = parseFloat(anno.x);\n        }\n\n        if (type === 'x2' && typeof anno.x2 === 'string' && anno.x2.indexOf('px') > -1) {\n          x2 = parseFloat(anno.x2);\n        }\n\n        return type === 'x1' ? x1 : x2;\n      }\n    }, {\n      key: \"getStringX\",\n      value: function getStringX(x) {\n        var w = this.w;\n        var rX = x;\n\n        if (w.config.xaxis.convertedCatToNumeric && w.globals.categoryLabels.length) {\n          x = w.globals.categoryLabels.indexOf(x) + 1;\n        }\n\n        var catIndex = w.globals.labels.indexOf(x);\n        var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')');\n\n        if (xLabel) {\n          rX = parseFloat(xLabel.getAttribute('x'));\n        }\n\n        return rX;\n      }\n    }]);\n\n    return Helpers;\n  }();\n\n  var XAnnotations = /*#__PURE__*/function () {\n    function XAnnotations(annoCtx) {\n      _classCallCheck(this, XAnnotations);\n\n      this.w = annoCtx.w;\n      this.annoCtx = annoCtx;\n      this.invertAxis = this.annoCtx.invertAxis;\n      this.helpers = new Helpers$4(this.annoCtx);\n    }\n\n    _createClass(XAnnotations, [{\n      key: \"addXaxisAnnotation\",\n      value: function addXaxisAnnotation(anno, parent, index) {\n        var w = this.w;\n        var x1 = this.helpers.getX1X2('x1', anno);\n        var x2;\n        var text = anno.label.text;\n        var strokeDashArray = anno.strokeDashArray;\n        if (!Utils$1.isNumber(x1)) return;\n\n        if (anno.x2 === null || typeof anno.x2 === 'undefined') {\n          var line = this.annoCtx.graphics.drawLine(x1 + anno.offsetX, // x1\n          0 + anno.offsetY, // y1\n          x1 + anno.offsetX, // x2\n          w.globals.gridHeight + anno.offsetY, // y2\n          anno.borderColor, // lineColor\n          strokeDashArray, //dashArray\n          anno.borderWidth);\n          parent.appendChild(line.node);\n\n          if (anno.id) {\n            line.node.classList.add(anno.id);\n          }\n        } else {\n          x2 = this.helpers.getX1X2('x2', anno);\n\n          if (x2 < x1) {\n            var temp = x1;\n            x1 = x2;\n            x2 = temp;\n          }\n\n          var rect = this.annoCtx.graphics.drawRect(x1 + anno.offsetX, // x1\n          0 + anno.offsetY, // y1\n          x2 - x1, // x2\n          w.globals.gridHeight + anno.offsetY, // y2\n          0, // radius\n          anno.fillColor, // color\n          anno.opacity, // opacity,\n          1, // strokeWidth\n          anno.borderColor, // strokeColor\n          strokeDashArray // stokeDashArray\n          );\n          rect.node.classList.add('apexcharts-annotation-rect');\n          rect.attr('clip-path', \"url(#gridRectMask\".concat(w.globals.cuid, \")\"));\n          parent.appendChild(rect.node);\n\n          if (anno.id) {\n            rect.node.classList.add(anno.id);\n          }\n        }\n\n        var textRects = this.annoCtx.graphics.getTextRects(text, parseFloat(anno.label.style.fontSize));\n        var textY = anno.label.position === 'top' ? 4 : anno.label.position === 'center' ? w.globals.gridHeight / 2 + (anno.label.orientation === 'vertical' ? textRects.width / 2 : 0) : w.globals.gridHeight;\n        var elText = this.annoCtx.graphics.drawText({\n          x: x1 + anno.label.offsetX,\n          y: textY + anno.label.offsetY - (anno.label.orientation === 'vertical' ? anno.label.position === 'top' ? textRects.width / 2 - 12 : -textRects.width / 2 : 0),\n          text: text,\n          textAnchor: anno.label.textAnchor,\n          fontSize: anno.label.style.fontSize,\n          fontFamily: anno.label.style.fontFamily,\n          fontWeight: anno.label.style.fontWeight,\n          foreColor: anno.label.style.color,\n          cssClass: \"apexcharts-xaxis-annotation-label \".concat(anno.label.style.cssClass, \" \").concat(anno.id ? anno.id : '')\n        });\n        elText.attr({\n          rel: index\n        });\n        parent.appendChild(elText.node); // after placing the annotations on svg, set any vertically placed annotations\n\n        this.annoCtx.helpers.setOrientations(anno, index);\n      }\n    }, {\n      key: \"drawXAxisAnnotations\",\n      value: function drawXAxisAnnotations() {\n        var _this = this;\n\n        var w = this.w;\n        var elg = this.annoCtx.graphics.group({\n          class: 'apexcharts-xaxis-annotations'\n        });\n        w.config.annotations.xaxis.map(function (anno, index) {\n          _this.addXaxisAnnotation(anno, elg.node, index);\n        });\n        return elg;\n      }\n    }]);\n\n    return XAnnotations;\n  }();\n\n  var YAnnotations = /*#__PURE__*/function () {\n    function YAnnotations(annoCtx) {\n      _classCallCheck(this, YAnnotations);\n\n      this.w = annoCtx.w;\n      this.annoCtx = annoCtx;\n      this.helpers = new Helpers$4(this.annoCtx);\n    }\n\n    _createClass(YAnnotations, [{\n      key: \"addYaxisAnnotation\",\n      value: function addYaxisAnnotation(anno, parent, index) {\n        var w = this.w;\n        var strokeDashArray = anno.strokeDashArray;\n        var y1 = this.helpers.getY1Y2('y1', anno);\n        var y2;\n        var text = anno.label.text;\n\n        if (anno.y2 === null || typeof anno.y2 === 'undefined') {\n          var line = this.annoCtx.graphics.drawLine(0 + anno.offsetX, // x1\n          y1 + anno.offsetY, // y1\n          this._getYAxisAnnotationWidth(anno), // x2\n          y1 + anno.offsetY, // y2\n          anno.borderColor, // lineColor\n          strokeDashArray, // dashArray\n          anno.borderWidth);\n          parent.appendChild(line.node);\n\n          if (anno.id) {\n            line.node.classList.add(anno.id);\n          }\n        } else {\n          y2 = this.helpers.getY1Y2('y2', anno);\n\n          if (y2 > y1) {\n            var temp = y1;\n            y1 = y2;\n            y2 = temp;\n          }\n\n          var rect = this.annoCtx.graphics.drawRect(0 + anno.offsetX, // x1\n          y2 + anno.offsetY, // y1\n          this._getYAxisAnnotationWidth(anno), // x2\n          y1 - y2, // y2\n          0, // radius\n          anno.fillColor, // color\n          anno.opacity, // opacity,\n          1, // strokeWidth\n          anno.borderColor, // strokeColor\n          strokeDashArray // stokeDashArray\n          );\n          rect.node.classList.add('apexcharts-annotation-rect');\n          rect.attr('clip-path', \"url(#gridRectMask\".concat(w.globals.cuid, \")\"));\n          parent.appendChild(rect.node);\n\n          if (anno.id) {\n            rect.node.classList.add(anno.id);\n          }\n        }\n\n        var textX = anno.label.position === 'right' ? w.globals.gridWidth : anno.label.position === 'center' ? w.globals.gridWidth / 2 : 0;\n        var elText = this.annoCtx.graphics.drawText({\n          x: textX + anno.label.offsetX,\n          y: (y2 != null ? y2 : y1) + anno.label.offsetY - 3,\n          text: text,\n          textAnchor: anno.label.textAnchor,\n          fontSize: anno.label.style.fontSize,\n          fontFamily: anno.label.style.fontFamily,\n          fontWeight: anno.label.style.fontWeight,\n          foreColor: anno.label.style.color,\n          cssClass: \"apexcharts-yaxis-annotation-label \".concat(anno.label.style.cssClass, \" \").concat(anno.id ? anno.id : '')\n        });\n        elText.attr({\n          rel: index\n        });\n        parent.appendChild(elText.node);\n      }\n    }, {\n      key: \"_getYAxisAnnotationWidth\",\n      value: function _getYAxisAnnotationWidth(anno) {\n        // issue apexcharts.js#2009\n        var w = this.w;\n        var width = w.globals.gridWidth;\n\n        if (anno.width.indexOf('%') > -1) {\n          width = w.globals.gridWidth * parseInt(anno.width, 10) / 100;\n        } else {\n          width = parseInt(anno.width, 10);\n        }\n\n        return width + anno.offsetX;\n      }\n    }, {\n      key: \"drawYAxisAnnotations\",\n      value: function drawYAxisAnnotations() {\n        var _this = this;\n\n        var w = this.w;\n        var elg = this.annoCtx.graphics.group({\n          class: 'apexcharts-yaxis-annotations'\n        });\n        w.config.annotations.yaxis.map(function (anno, index) {\n          _this.addYaxisAnnotation(anno, elg.node, index);\n        });\n        return elg;\n      }\n    }]);\n\n    return YAnnotations;\n  }();\n\n  var PointAnnotations = /*#__PURE__*/function () {\n    function PointAnnotations(annoCtx) {\n      _classCallCheck(this, PointAnnotations);\n\n      this.w = annoCtx.w;\n      this.annoCtx = annoCtx;\n      this.helpers = new Helpers$4(this.annoCtx);\n    }\n\n    _createClass(PointAnnotations, [{\n      key: \"addPointAnnotation\",\n      value: function addPointAnnotation(anno, parent, index) {\n        this.w;\n        var x = this.helpers.getX1X2('x1', anno);\n        var y = this.helpers.getY1Y2('y1', anno);\n        if (!Utils$1.isNumber(x)) return;\n        var optsPoints = {\n          pSize: anno.marker.size,\n          pointStrokeWidth: anno.marker.strokeWidth,\n          pointFillColor: anno.marker.fillColor,\n          pointStrokeColor: anno.marker.strokeColor,\n          shape: anno.marker.shape,\n          pRadius: anno.marker.radius,\n          class: \"apexcharts-point-annotation-marker \".concat(anno.marker.cssClass, \" \").concat(anno.id ? anno.id : '')\n        };\n        var point = this.annoCtx.graphics.drawMarker(x + anno.marker.offsetX, y + anno.marker.offsetY, optsPoints);\n        parent.appendChild(point.node);\n        var text = anno.label.text ? anno.label.text : '';\n        var elText = this.annoCtx.graphics.drawText({\n          x: x + anno.label.offsetX,\n          y: y + anno.label.offsetY - anno.marker.size - parseFloat(anno.label.style.fontSize) / 1.6,\n          text: text,\n          textAnchor: anno.label.textAnchor,\n          fontSize: anno.label.style.fontSize,\n          fontFamily: anno.label.style.fontFamily,\n          fontWeight: anno.label.style.fontWeight,\n          foreColor: anno.label.style.color,\n          cssClass: \"apexcharts-point-annotation-label \".concat(anno.label.style.cssClass, \" \").concat(anno.id ? anno.id : '')\n        });\n        elText.attr({\n          rel: index\n        });\n        parent.appendChild(elText.node); // TODO: deprecate this as we will use custom\n\n        if (anno.customSVG.SVG) {\n          var g = this.annoCtx.graphics.group({\n            class: 'apexcharts-point-annotations-custom-svg ' + anno.customSVG.cssClass\n          });\n          g.attr({\n            transform: \"translate(\".concat(x + anno.customSVG.offsetX, \", \").concat(y + anno.customSVG.offsetY, \")\")\n          });\n          g.node.innerHTML = anno.customSVG.SVG;\n          parent.appendChild(g.node);\n        }\n\n        if (anno.image.path) {\n          var imgWidth = anno.image.width ? anno.image.width : 20;\n          var imgHeight = anno.image.height ? anno.image.height : 20;\n          point = this.annoCtx.addImage({\n            x: x + anno.image.offsetX - imgWidth / 2,\n            y: y + anno.image.offsetY - imgHeight / 2,\n            width: imgWidth,\n            height: imgHeight,\n            path: anno.image.path,\n            appendTo: '.apexcharts-point-annotations'\n          });\n        }\n\n        if (anno.mouseEnter) {\n          point.node.addEventListener('mouseenter', anno.mouseEnter.bind(this, anno));\n        }\n\n        if (anno.mouseLeave) {\n          point.node.addEventListener('mouseleave', anno.mouseLeave.bind(this, anno));\n        }\n\n        if (anno.click) {\n          point.node.addEventListener('click', anno.click.bind(this, anno));\n        }\n      }\n    }, {\n      key: \"drawPointAnnotations\",\n      value: function drawPointAnnotations() {\n        var _this = this;\n\n        var w = this.w;\n        var elg = this.annoCtx.graphics.group({\n          class: 'apexcharts-point-annotations'\n        });\n        w.config.annotations.points.map(function (anno, index) {\n          _this.addPointAnnotation(anno, elg.node, index);\n        });\n        return elg;\n      }\n    }]);\n\n    return PointAnnotations;\n  }();\n\n  const name = \"en\";\n  const options = {\n  \tmonths: [\n  \t\t\"January\",\n  \t\t\"February\",\n  \t\t\"March\",\n  \t\t\"April\",\n  \t\t\"May\",\n  \t\t\"June\",\n  \t\t\"July\",\n  \t\t\"August\",\n  \t\t\"September\",\n  \t\t\"October\",\n  \t\t\"November\",\n  \t\t\"December\"\n  \t],\n  \tshortMonths: [\n  \t\t\"Jan\",\n  \t\t\"Feb\",\n  \t\t\"Mar\",\n  \t\t\"Apr\",\n  \t\t\"May\",\n  \t\t\"Jun\",\n  \t\t\"Jul\",\n  \t\t\"Aug\",\n  \t\t\"Sep\",\n  \t\t\"Oct\",\n  \t\t\"Nov\",\n  \t\t\"Dec\"\n  \t],\n  \tdays: [\n  \t\t\"Sunday\",\n  \t\t\"Monday\",\n  \t\t\"Tuesday\",\n  \t\t\"Wednesday\",\n  \t\t\"Thursday\",\n  \t\t\"Friday\",\n  \t\t\"Saturday\"\n  \t],\n  \tshortDays: [\n  \t\t\"Sun\",\n  \t\t\"Mon\",\n  \t\t\"Tue\",\n  \t\t\"Wed\",\n  \t\t\"Thu\",\n  \t\t\"Fri\",\n  \t\t\"Sat\"\n  \t],\n  \ttoolbar: {\n  \t\texportToSVG: \"Download SVG\",\n  \t\texportToPNG: \"Download PNG\",\n  \t\texportToCSV: \"Download CSV\",\n  \t\tmenu: \"Menu\",\n  \t\tselection: \"Selection\",\n  \t\tselectionZoom: \"Selection Zoom\",\n  \t\tzoomIn: \"Zoom In\",\n  \t\tzoomOut: \"Zoom Out\",\n  \t\tpan: \"Panning\",\n  \t\treset: \"Reset Zoom\"\n  \t}\n  };\n  var en = {\n  \tname: name,\n  \toptions: options\n  };\n\n  var Options = /*#__PURE__*/function () {\n    function Options() {\n      _classCallCheck(this, Options);\n\n      this.yAxis = {\n        show: true,\n        showAlways: false,\n        showForNullSeries: true,\n        seriesName: undefined,\n        opposite: false,\n        reversed: false,\n        logarithmic: false,\n        logBase: 10,\n        tickAmount: undefined,\n        forceNiceScale: false,\n        max: undefined,\n        min: undefined,\n        floating: false,\n        decimalsInFloat: undefined,\n        labels: {\n          show: true,\n          minWidth: 0,\n          maxWidth: 160,\n          offsetX: 0,\n          offsetY: 0,\n          align: undefined,\n          rotate: 0,\n          padding: 20,\n          style: {\n            colors: [],\n            fontSize: '11px',\n            fontWeight: 400,\n            fontFamily: undefined,\n            cssClass: ''\n          },\n          formatter: undefined\n        },\n        axisBorder: {\n          show: false,\n          color: '#e0e0e0',\n          width: 1,\n          offsetX: 0,\n          offsetY: 0\n        },\n        axisTicks: {\n          show: false,\n          color: '#e0e0e0',\n          width: 6,\n          offsetX: 0,\n          offsetY: 0\n        },\n        title: {\n          text: undefined,\n          rotate: -90,\n          offsetY: 0,\n          offsetX: 0,\n          style: {\n            color: undefined,\n            fontSize: '11px',\n            fontWeight: 900,\n            fontFamily: undefined,\n            cssClass: ''\n          }\n        },\n        tooltip: {\n          enabled: false,\n          offsetX: 0\n        },\n        crosshairs: {\n          show: true,\n          position: 'front',\n          stroke: {\n            color: '#b6b6b6',\n            width: 1,\n            dashArray: 0\n          }\n        }\n      };\n      this.pointAnnotation = {\n        id: undefined,\n        x: 0,\n        y: null,\n        yAxisIndex: 0,\n        seriesIndex: 0,\n        mouseEnter: undefined,\n        mouseLeave: undefined,\n        click: undefined,\n        marker: {\n          size: 4,\n          fillColor: '#fff',\n          strokeWidth: 2,\n          strokeColor: '#333',\n          shape: 'circle',\n          offsetX: 0,\n          offsetY: 0,\n          radius: 2,\n          cssClass: ''\n        },\n        label: {\n          borderColor: '#c2c2c2',\n          borderWidth: 1,\n          borderRadius: 2,\n          text: undefined,\n          textAnchor: 'middle',\n          offsetX: 0,\n          offsetY: 0,\n          mouseEnter: undefined,\n          mouseLeave: undefined,\n          click: undefined,\n          style: {\n            background: '#fff',\n            color: undefined,\n            fontSize: '11px',\n            fontFamily: undefined,\n            fontWeight: 400,\n            cssClass: '',\n            padding: {\n              left: 5,\n              right: 5,\n              top: 2,\n              bottom: 2\n            }\n          }\n        },\n        customSVG: {\n          // this will be deprecated in the next major version as it is going to be replaced with a better alternative below\n          SVG: undefined,\n          cssClass: undefined,\n          offsetX: 0,\n          offsetY: 0\n        },\n        image: {\n          path: undefined,\n          width: 20,\n          height: 20,\n          offsetX: 0,\n          offsetY: 0\n        }\n      };\n      this.yAxisAnnotation = {\n        id: undefined,\n        y: 0,\n        y2: null,\n        strokeDashArray: 1,\n        fillColor: '#c2c2c2',\n        borderColor: '#c2c2c2',\n        borderWidth: 1,\n        opacity: 0.3,\n        offsetX: 0,\n        offsetY: 0,\n        width: '100%',\n        yAxisIndex: 0,\n        label: {\n          borderColor: '#c2c2c2',\n          borderWidth: 1,\n          borderRadius: 2,\n          text: undefined,\n          textAnchor: 'end',\n          position: 'right',\n          offsetX: 0,\n          offsetY: -3,\n          mouseEnter: undefined,\n          mouseLeave: undefined,\n          click: undefined,\n          style: {\n            background: '#fff',\n            color: undefined,\n            fontSize: '11px',\n            fontFamily: undefined,\n            fontWeight: 400,\n            cssClass: '',\n            padding: {\n              left: 5,\n              right: 5,\n              top: 2,\n              bottom: 2\n            }\n          }\n        }\n      };\n      this.xAxisAnnotation = {\n        id: undefined,\n        x: 0,\n        x2: null,\n        strokeDashArray: 1,\n        fillColor: '#c2c2c2',\n        borderColor: '#c2c2c2',\n        borderWidth: 1,\n        opacity: 0.3,\n        offsetX: 0,\n        offsetY: 0,\n        label: {\n          borderColor: '#c2c2c2',\n          borderWidth: 1,\n          borderRadius: 2,\n          text: undefined,\n          textAnchor: 'middle',\n          orientation: 'vertical',\n          position: 'top',\n          offsetX: 0,\n          offsetY: 0,\n          mouseEnter: undefined,\n          mouseLeave: undefined,\n          click: undefined,\n          style: {\n            background: '#fff',\n            color: undefined,\n            fontSize: '11px',\n            fontFamily: undefined,\n            fontWeight: 400,\n            cssClass: '',\n            padding: {\n              left: 5,\n              right: 5,\n              top: 2,\n              bottom: 2\n            }\n          }\n        }\n      };\n      this.text = {\n        x: 0,\n        y: 0,\n        text: '',\n        textAnchor: 'start',\n        foreColor: undefined,\n        fontSize: '13px',\n        fontFamily: undefined,\n        fontWeight: 400,\n        appendTo: '.apexcharts-annotations',\n        backgroundColor: 'transparent',\n        borderColor: '#c2c2c2',\n        borderRadius: 0,\n        borderWidth: 0,\n        paddingLeft: 4,\n        paddingRight: 4,\n        paddingTop: 2,\n        paddingBottom: 2\n      };\n    }\n\n    _createClass(Options, [{\n      key: \"init\",\n      value: function init() {\n        return {\n          annotations: {\n            yaxis: [this.yAxisAnnotation],\n            xaxis: [this.xAxisAnnotation],\n            points: [this.pointAnnotation],\n            texts: [],\n            images: [],\n            shapes: []\n          },\n          chart: {\n            animations: {\n              enabled: true,\n              easing: 'easeinout',\n              // linear, easeout, easein, easeinout, swing, bounce, elastic\n              speed: 800,\n              animateGradually: {\n                delay: 150,\n                enabled: true\n              },\n              dynamicAnimation: {\n                enabled: true,\n                speed: 350\n              }\n            },\n            background: 'transparent',\n            locales: [en],\n            defaultLocale: 'en',\n            dropShadow: {\n              enabled: false,\n              enabledOnSeries: undefined,\n              top: 2,\n              left: 2,\n              blur: 4,\n              color: '#000',\n              opacity: 0.35\n            },\n            events: {\n              animationEnd: undefined,\n              beforeMount: undefined,\n              mounted: undefined,\n              updated: undefined,\n              click: undefined,\n              mouseMove: undefined,\n              mouseLeave: undefined,\n              xAxisLabelClick: undefined,\n              legendClick: undefined,\n              markerClick: undefined,\n              selection: undefined,\n              dataPointSelection: undefined,\n              dataPointMouseEnter: undefined,\n              dataPointMouseLeave: undefined,\n              beforeZoom: undefined,\n              beforeResetZoom: undefined,\n              zoomed: undefined,\n              scrolled: undefined,\n              brushScrolled: undefined\n            },\n            foreColor: '#373d3f',\n            fontFamily: 'Helvetica, Arial, sans-serif',\n            height: 'auto',\n            parentHeightOffset: 15,\n            redrawOnParentResize: true,\n            redrawOnWindowResize: true,\n            id: undefined,\n            group: undefined,\n            offsetX: 0,\n            offsetY: 0,\n            selection: {\n              enabled: false,\n              type: 'x',\n              // selectedPoints: undefined, // default datapoints that should be selected automatically\n              fill: {\n                color: '#24292e',\n                opacity: 0.1\n              },\n              stroke: {\n                width: 1,\n                color: '#24292e',\n                opacity: 0.4,\n                dashArray: 3\n              },\n              xaxis: {\n                min: undefined,\n                max: undefined\n              },\n              yaxis: {\n                min: undefined,\n                max: undefined\n              }\n            },\n            sparkline: {\n              enabled: false\n            },\n            brush: {\n              enabled: false,\n              autoScaleYaxis: true,\n              target: undefined\n            },\n            stacked: false,\n            stackType: 'normal',\n            toolbar: {\n              show: true,\n              offsetX: 0,\n              offsetY: 0,\n              tools: {\n                download: true,\n                selection: true,\n                zoom: true,\n                zoomin: true,\n                zoomout: true,\n                pan: true,\n                reset: true,\n                customIcons: []\n              },\n              export: {\n                csv: {\n                  filename: undefined,\n                  columnDelimiter: ',',\n                  headerCategory: 'category',\n                  headerValue: 'value',\n                  dateFormatter: function dateFormatter(timestamp) {\n                    return new Date(timestamp).toDateString();\n                  }\n                },\n                png: {\n                  filename: undefined\n                },\n                svg: {\n                  filename: undefined\n                }\n              },\n              autoSelected: 'zoom' // accepts -> zoom, pan, selection\n\n            },\n            type: 'line',\n            width: '100%',\n            zoom: {\n              enabled: true,\n              type: 'x',\n              autoScaleYaxis: false,\n              zoomedArea: {\n                fill: {\n                  color: '#90CAF9',\n                  opacity: 0.4\n                },\n                stroke: {\n                  color: '#0D47A1',\n                  opacity: 0.4,\n                  width: 1\n                }\n              }\n            }\n          },\n          plotOptions: {\n            area: {\n              fillTo: 'origin'\n            },\n            bar: {\n              horizontal: false,\n              columnWidth: '70%',\n              // should be in percent 0 - 100\n              barHeight: '70%',\n              // should be in percent 0 - 100\n              distributed: false,\n              borderRadius: 0,\n              borderRadiusApplication: 'around',\n              // [around, end]\n              borderRadiusWhenStacked: 'last',\n              // [all, last]\n              rangeBarOverlap: true,\n              rangeBarGroupRows: false,\n              hideZeroBarsWhenGrouped: false,\n              isDumbbell: false,\n              dumbbellColors: undefined,\n              isFunnel: false,\n              isFunnel3d: true,\n              colors: {\n                ranges: [],\n                backgroundBarColors: [],\n                backgroundBarOpacity: 1,\n                backgroundBarRadius: 0\n              },\n              dataLabels: {\n                position: 'top',\n                // top, center, bottom\n                maxItems: 100,\n                hideOverflowingLabels: true,\n                orientation: 'horizontal',\n                total: {\n                  enabled: false,\n                  formatter: undefined,\n                  offsetX: 0,\n                  offsetY: 0,\n                  style: {\n                    color: '#373d3f',\n                    fontSize: '12px',\n                    fontFamily: undefined,\n                    fontWeight: 600\n                  }\n                }\n              }\n            },\n            bubble: {\n              zScaling: true,\n              minBubbleRadius: undefined,\n              maxBubbleRadius: undefined\n            },\n            candlestick: {\n              colors: {\n                upward: '#00B746',\n                downward: '#EF403C'\n              },\n              wick: {\n                useFillColor: true\n              }\n            },\n            boxPlot: {\n              colors: {\n                upper: '#00E396',\n                lower: '#008FFB'\n              }\n            },\n            heatmap: {\n              radius: 2,\n              enableShades: true,\n              shadeIntensity: 0.5,\n              reverseNegativeShade: false,\n              distributed: false,\n              useFillColorAsStroke: false,\n              colorScale: {\n                inverse: false,\n                ranges: [],\n                min: undefined,\n                max: undefined\n              }\n            },\n            treemap: {\n              enableShades: true,\n              shadeIntensity: 0.5,\n              distributed: false,\n              reverseNegativeShade: false,\n              useFillColorAsStroke: false,\n              colorScale: {\n                inverse: false,\n                ranges: [],\n                min: undefined,\n                max: undefined\n              }\n            },\n            radialBar: {\n              inverseOrder: false,\n              startAngle: 0,\n              endAngle: 360,\n              offsetX: 0,\n              offsetY: 0,\n              hollow: {\n                margin: 5,\n                size: '50%',\n                background: 'transparent',\n                image: undefined,\n                imageWidth: 150,\n                imageHeight: 150,\n                imageOffsetX: 0,\n                imageOffsetY: 0,\n                imageClipped: true,\n                position: 'front',\n                dropShadow: {\n                  enabled: false,\n                  top: 0,\n                  left: 0,\n                  blur: 3,\n                  color: '#000',\n                  opacity: 0.5\n                }\n              },\n              track: {\n                show: true,\n                startAngle: undefined,\n                endAngle: undefined,\n                background: '#f2f2f2',\n                strokeWidth: '97%',\n                opacity: 1,\n                margin: 5,\n                // margin is in pixels\n                dropShadow: {\n                  enabled: false,\n                  top: 0,\n                  left: 0,\n                  blur: 3,\n                  color: '#000',\n                  opacity: 0.5\n                }\n              },\n              dataLabels: {\n                show: true,\n                name: {\n                  show: true,\n                  fontSize: '16px',\n                  fontFamily: undefined,\n                  fontWeight: 600,\n                  color: undefined,\n                  offsetY: 0,\n                  formatter: function formatter(val) {\n                    return val;\n                  }\n                },\n                value: {\n                  show: true,\n                  fontSize: '14px',\n                  fontFamily: undefined,\n                  fontWeight: 400,\n                  color: undefined,\n                  offsetY: 16,\n                  formatter: function formatter(val) {\n                    return val + '%';\n                  }\n                },\n                total: {\n                  show: false,\n                  label: 'Total',\n                  fontSize: '16px',\n                  fontWeight: 600,\n                  fontFamily: undefined,\n                  color: undefined,\n                  formatter: function formatter(w) {\n                    return w.globals.seriesTotals.reduce(function (a, b) {\n                      return a + b;\n                    }, 0) / w.globals.series.length + '%';\n                  }\n                }\n              }\n            },\n            pie: {\n              customScale: 1,\n              offsetX: 0,\n              offsetY: 0,\n              startAngle: 0,\n              endAngle: 360,\n              expandOnClick: true,\n              dataLabels: {\n                // These are the percentage values which are displayed on slice\n                offset: 0,\n                // offset by which labels will move outside\n                minAngleToShowLabel: 10\n              },\n              donut: {\n                size: '65%',\n                background: 'transparent',\n                labels: {\n                  // These are the inner labels appearing inside donut\n                  show: false,\n                  name: {\n                    show: true,\n                    fontSize: '16px',\n                    fontFamily: undefined,\n                    fontWeight: 600,\n                    color: undefined,\n                    offsetY: -10,\n                    formatter: function formatter(val) {\n                      return val;\n                    }\n                  },\n                  value: {\n                    show: true,\n                    fontSize: '20px',\n                    fontFamily: undefined,\n                    fontWeight: 400,\n                    color: undefined,\n                    offsetY: 10,\n                    formatter: function formatter(val) {\n                      return val;\n                    }\n                  },\n                  total: {\n                    show: false,\n                    showAlways: false,\n                    label: 'Total',\n                    fontSize: '16px',\n                    fontWeight: 400,\n                    fontFamily: undefined,\n                    color: undefined,\n                    formatter: function formatter(w) {\n                      return w.globals.seriesTotals.reduce(function (a, b) {\n                        return a + b;\n                      }, 0);\n                    }\n                  }\n                }\n              }\n            },\n            polarArea: {\n              rings: {\n                strokeWidth: 1,\n                strokeColor: '#e8e8e8'\n              },\n              spokes: {\n                strokeWidth: 1,\n                connectorColors: '#e8e8e8'\n              }\n            },\n            radar: {\n              size: undefined,\n              offsetX: 0,\n              offsetY: 0,\n              polygons: {\n                // strokeColor: '#e8e8e8', // should be deprecated in the minor version i.e 3.2\n                strokeWidth: 1,\n                strokeColors: '#e8e8e8',\n                connectorColors: '#e8e8e8',\n                fill: {\n                  colors: undefined\n                }\n              }\n            }\n          },\n          colors: undefined,\n          dataLabels: {\n            enabled: true,\n            enabledOnSeries: undefined,\n            formatter: function formatter(val) {\n              return val !== null ? val : '';\n            },\n            textAnchor: 'middle',\n            distributed: false,\n            offsetX: 0,\n            offsetY: 0,\n            style: {\n              fontSize: '12px',\n              fontFamily: undefined,\n              fontWeight: 600,\n              colors: undefined\n            },\n            background: {\n              enabled: true,\n              foreColor: '#fff',\n              borderRadius: 2,\n              padding: 4,\n              opacity: 0.9,\n              borderWidth: 1,\n              borderColor: '#fff',\n              dropShadow: {\n                enabled: false,\n                top: 1,\n                left: 1,\n                blur: 1,\n                color: '#000',\n                opacity: 0.45\n              }\n            },\n            dropShadow: {\n              enabled: false,\n              top: 1,\n              left: 1,\n              blur: 1,\n              color: '#000',\n              opacity: 0.45\n            }\n          },\n          fill: {\n            type: 'solid',\n            colors: undefined,\n            // array of colors\n            opacity: 0.85,\n            gradient: {\n              shade: 'dark',\n              type: 'horizontal',\n              shadeIntensity: 0.5,\n              gradientToColors: undefined,\n              inverseColors: true,\n              opacityFrom: 1,\n              opacityTo: 1,\n              stops: [0, 50, 100],\n              colorStops: []\n            },\n            image: {\n              src: [],\n              width: undefined,\n              // optional\n              height: undefined // optional\n\n            },\n            pattern: {\n              style: 'squares',\n              // String | Array of Strings\n              width: 6,\n              height: 6,\n              strokeWidth: 2\n            }\n          },\n          forecastDataPoints: {\n            count: 0,\n            fillOpacity: 0.5,\n            strokeWidth: undefined,\n            dashArray: 4\n          },\n          grid: {\n            show: true,\n            borderColor: '#e0e0e0',\n            strokeDashArray: 0,\n            position: 'back',\n            xaxis: {\n              lines: {\n                show: false\n              }\n            },\n            yaxis: {\n              lines: {\n                show: true\n              }\n            },\n            row: {\n              colors: undefined,\n              // takes as array which will be repeated on rows\n              opacity: 0.5\n            },\n            column: {\n              colors: undefined,\n              // takes an array which will be repeated on columns\n              opacity: 0.5\n            },\n            padding: {\n              top: 0,\n              right: 10,\n              bottom: 0,\n              left: 12\n            }\n          },\n          labels: [],\n          legend: {\n            show: true,\n            showForSingleSeries: false,\n            showForNullSeries: true,\n            showForZeroSeries: true,\n            floating: false,\n            position: 'bottom',\n            // whether to position legends in 1 of 4\n            // direction - top, bottom, left, right\n            horizontalAlign: 'center',\n            // when position top/bottom, you can specify whether to align legends left, right or center\n            inverseOrder: false,\n            fontSize: '12px',\n            fontFamily: undefined,\n            fontWeight: 400,\n            width: undefined,\n            height: undefined,\n            formatter: undefined,\n            tooltipHoverFormatter: undefined,\n            offsetX: -20,\n            offsetY: 4,\n            customLegendItems: [],\n            labels: {\n              colors: undefined,\n              useSeriesColors: false\n            },\n            markers: {\n              width: 12,\n              height: 12,\n              strokeWidth: 0,\n              fillColors: undefined,\n              strokeColor: '#fff',\n              radius: 12,\n              customHTML: undefined,\n              offsetX: 0,\n              offsetY: 0,\n              onClick: undefined\n            },\n            itemMargin: {\n              horizontal: 5,\n              vertical: 2\n            },\n            onItemClick: {\n              toggleDataSeries: true\n            },\n            onItemHover: {\n              highlightDataSeries: true\n            }\n          },\n          markers: {\n            discrete: [],\n            size: 0,\n            colors: undefined,\n            //strokeColor: '#fff', // TODO: deprecate in major version 4.0\n            strokeColors: '#fff',\n            strokeWidth: 2,\n            strokeOpacity: 0.9,\n            strokeDashArray: 0,\n            fillOpacity: 1,\n            shape: 'circle',\n            width: 8,\n            // only applicable when shape is rect/square\n            height: 8,\n            // only applicable when shape is rect/square\n            radius: 2,\n            offsetX: 0,\n            offsetY: 0,\n            onClick: undefined,\n            onDblClick: undefined,\n            showNullDataPoints: true,\n            hover: {\n              size: undefined,\n              sizeOffset: 3\n            }\n          },\n          noData: {\n            text: undefined,\n            align: 'center',\n            verticalAlign: 'middle',\n            offsetX: 0,\n            offsetY: 0,\n            style: {\n              color: undefined,\n              fontSize: '14px',\n              fontFamily: undefined\n            }\n          },\n          responsive: [],\n          // breakpoints should follow ascending order 400, then 700, then 1000\n          series: undefined,\n          states: {\n            normal: {\n              filter: {\n                type: 'none',\n                value: 0\n              }\n            },\n            hover: {\n              filter: {\n                type: 'lighten',\n                value: 0.1\n              }\n            },\n            active: {\n              allowMultipleDataPointsSelection: false,\n              filter: {\n                type: 'darken',\n                value: 0.5\n              }\n            }\n          },\n          title: {\n            text: undefined,\n            align: 'left',\n            margin: 5,\n            offsetX: 0,\n            offsetY: 0,\n            floating: false,\n            style: {\n              fontSize: '14px',\n              fontWeight: 900,\n              fontFamily: undefined,\n              color: undefined\n            }\n          },\n          subtitle: {\n            text: undefined,\n            align: 'left',\n            margin: 5,\n            offsetX: 0,\n            offsetY: 30,\n            floating: false,\n            style: {\n              fontSize: '12px',\n              fontWeight: 400,\n              fontFamily: undefined,\n              color: undefined\n            }\n          },\n          stroke: {\n            show: true,\n            curve: 'smooth',\n            // \"smooth\" / \"straight\" / \"stepline\"\n            lineCap: 'butt',\n            // round, butt , square\n            width: 2,\n            colors: undefined,\n            // array of colors\n            dashArray: 0,\n            // single value or array of values\n            fill: {\n              type: 'solid',\n              colors: undefined,\n              // array of colors\n              opacity: 0.85,\n              gradient: {\n                shade: 'dark',\n                type: 'horizontal',\n                shadeIntensity: 0.5,\n                gradientToColors: undefined,\n                inverseColors: true,\n                opacityFrom: 1,\n                opacityTo: 1,\n                stops: [0, 50, 100],\n                colorStops: []\n              }\n            }\n          },\n          tooltip: {\n            enabled: true,\n            enabledOnSeries: undefined,\n            shared: true,\n            followCursor: false,\n            // when disabled, the tooltip will show on top of the series instead of mouse position\n            intersect: false,\n            // when enabled, tooltip will only show when user directly hovers over point\n            inverseOrder: false,\n            custom: undefined,\n            fillSeriesColor: false,\n            theme: 'light',\n            cssClass: '',\n            style: {\n              fontSize: '12px',\n              fontFamily: undefined\n            },\n            onDatasetHover: {\n              highlightDataSeries: false\n            },\n            x: {\n              // x value\n              show: true,\n              format: 'dd MMM',\n              // dd/MM, dd MMM yy, dd MMM yyyy\n              formatter: undefined // a custom user supplied formatter function\n\n            },\n            y: {\n              formatter: undefined,\n              title: {\n                formatter: function formatter(seriesName) {\n                  return seriesName ? seriesName + ': ' : '';\n                }\n              }\n            },\n            z: {\n              formatter: undefined,\n              title: 'Size: '\n            },\n            marker: {\n              show: true,\n              fillColors: undefined\n            },\n            items: {\n              display: 'flex'\n            },\n            fixed: {\n              enabled: false,\n              position: 'topRight',\n              // topRight, topLeft, bottomRight, bottomLeft\n              offsetX: 0,\n              offsetY: 0\n            }\n          },\n          xaxis: {\n            type: 'category',\n            categories: [],\n            convertedCatToNumeric: false,\n            // internal property which should not be altered outside\n            offsetX: 0,\n            offsetY: 0,\n            overwriteCategories: undefined,\n            labels: {\n              show: true,\n              rotate: -45,\n              rotateAlways: false,\n              hideOverlappingLabels: true,\n              trim: false,\n              minHeight: undefined,\n              maxHeight: 120,\n              showDuplicates: true,\n              style: {\n                colors: [],\n                fontSize: '12px',\n                fontWeight: 400,\n                fontFamily: undefined,\n                cssClass: ''\n              },\n              offsetX: 0,\n              offsetY: 0,\n              format: undefined,\n              formatter: undefined,\n              // custom formatter function which will override format\n              datetimeUTC: true,\n              datetimeFormatter: {\n                year: 'yyyy',\n                month: \"MMM 'yy\",\n                day: 'dd MMM',\n                hour: 'HH:mm',\n                minute: 'HH:mm:ss',\n                second: 'HH:mm:ss'\n              }\n            },\n            group: {\n              groups: [],\n              style: {\n                colors: [],\n                fontSize: '12px',\n                fontWeight: 400,\n                fontFamily: undefined,\n                cssClass: ''\n              }\n            },\n            axisBorder: {\n              show: true,\n              color: '#e0e0e0',\n              width: '100%',\n              height: 1,\n              offsetX: 0,\n              offsetY: 0\n            },\n            axisTicks: {\n              show: true,\n              color: '#e0e0e0',\n              height: 6,\n              offsetX: 0,\n              offsetY: 0\n            },\n            tickAmount: undefined,\n            tickPlacement: 'on',\n            min: undefined,\n            max: undefined,\n            range: undefined,\n            floating: false,\n            decimalsInFloat: undefined,\n            position: 'bottom',\n            title: {\n              text: undefined,\n              offsetX: 0,\n              offsetY: 0,\n              style: {\n                color: undefined,\n                fontSize: '12px',\n                fontWeight: 900,\n                fontFamily: undefined,\n                cssClass: ''\n              }\n            },\n            crosshairs: {\n              show: true,\n              width: 1,\n              // tickWidth/barWidth or an integer\n              position: 'back',\n              opacity: 0.9,\n              stroke: {\n                color: '#b6b6b6',\n                width: 1,\n                dashArray: 3\n              },\n              fill: {\n                type: 'solid',\n                // solid, gradient\n                color: '#B1B9C4',\n                gradient: {\n                  colorFrom: '#D8E3F0',\n                  colorTo: '#BED1E6',\n                  stops: [0, 100],\n                  opacityFrom: 0.4,\n                  opacityTo: 0.5\n                }\n              },\n              dropShadow: {\n                enabled: false,\n                left: 0,\n                top: 0,\n                blur: 1,\n                opacity: 0.4\n              }\n            },\n            tooltip: {\n              enabled: true,\n              offsetY: 0,\n              formatter: undefined,\n              style: {\n                fontSize: '12px',\n                fontFamily: undefined\n              }\n            }\n          },\n          yaxis: this.yAxis,\n          theme: {\n            mode: 'light',\n            palette: 'palette1',\n            // If defined, it will overwrite globals.colors variable\n            monochrome: {\n              // monochrome allows you to select just 1 color and fill out the rest with light/dark shade (intensity can be selected)\n              enabled: false,\n              color: '#008FFB',\n              shadeTo: 'light',\n              shadeIntensity: 0.65\n            }\n          }\n        };\n      }\n    }]);\n\n    return Options;\n  }();\n\n  /**\n   * ApexCharts Annotations Class for drawing lines/rects on both xaxis and yaxis.\n   *\n   * @module Annotations\n   **/\n\n  var Annotations = /*#__PURE__*/function () {\n    function Annotations(ctx) {\n      _classCallCheck(this, Annotations);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.graphics = new Graphics(this.ctx);\n\n      if (this.w.globals.isBarHorizontal) {\n        this.invertAxis = true;\n      }\n\n      this.helpers = new Helpers$4(this);\n      this.xAxisAnnotations = new XAnnotations(this);\n      this.yAxisAnnotations = new YAnnotations(this);\n      this.pointsAnnotations = new PointAnnotations(this);\n\n      if (this.w.globals.isBarHorizontal && this.w.config.yaxis[0].reversed) {\n        this.inversedReversedAxis = true;\n      }\n\n      this.xDivision = this.w.globals.gridWidth / this.w.globals.dataPoints;\n    }\n\n    _createClass(Annotations, [{\n      key: \"drawAxesAnnotations\",\n      value: function drawAxesAnnotations() {\n        var w = this.w;\n\n        if (w.globals.axisCharts) {\n          var yAnnotations = this.yAxisAnnotations.drawYAxisAnnotations();\n          var xAnnotations = this.xAxisAnnotations.drawXAxisAnnotations();\n          var pointAnnotations = this.pointsAnnotations.drawPointAnnotations();\n          var initialAnim = w.config.chart.animations.enabled;\n          var annoArray = [yAnnotations, xAnnotations, pointAnnotations];\n          var annoElArray = [xAnnotations.node, yAnnotations.node, pointAnnotations.node];\n\n          for (var i = 0; i < 3; i++) {\n            w.globals.dom.elGraphical.add(annoArray[i]);\n\n            if (initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n              // fixes apexcharts/apexcharts.js#685\n              if (w.config.chart.type !== 'scatter' && w.config.chart.type !== 'bubble' && w.globals.dataPoints > 1) {\n                annoElArray[i].classList.add('apexcharts-element-hidden');\n              }\n            }\n\n            w.globals.delayedElements.push({\n              el: annoElArray[i],\n              index: 0\n            });\n          } // background sizes needs to be calculated after text is drawn, so calling them last\n\n\n          this.helpers.annotationsBackground();\n        }\n      }\n    }, {\n      key: \"drawImageAnnos\",\n      value: function drawImageAnnos() {\n        var _this = this;\n\n        var w = this.w;\n        w.config.annotations.images.map(function (s, index) {\n          _this.addImage(s, index);\n        });\n      }\n    }, {\n      key: \"drawTextAnnos\",\n      value: function drawTextAnnos() {\n        var _this2 = this;\n\n        var w = this.w;\n        w.config.annotations.texts.map(function (t, index) {\n          _this2.addText(t, index);\n        });\n      }\n    }, {\n      key: \"addXaxisAnnotation\",\n      value: function addXaxisAnnotation(anno, parent, index) {\n        this.xAxisAnnotations.addXaxisAnnotation(anno, parent, index);\n      }\n    }, {\n      key: \"addYaxisAnnotation\",\n      value: function addYaxisAnnotation(anno, parent, index) {\n        this.yAxisAnnotations.addYaxisAnnotation(anno, parent, index);\n      }\n    }, {\n      key: \"addPointAnnotation\",\n      value: function addPointAnnotation(anno, parent, index) {\n        this.pointsAnnotations.addPointAnnotation(anno, parent, index);\n      }\n    }, {\n      key: \"addText\",\n      value: function addText(params, index) {\n        var x = params.x,\n            y = params.y,\n            text = params.text,\n            textAnchor = params.textAnchor,\n            foreColor = params.foreColor,\n            fontSize = params.fontSize,\n            fontFamily = params.fontFamily,\n            fontWeight = params.fontWeight,\n            cssClass = params.cssClass,\n            backgroundColor = params.backgroundColor,\n            borderWidth = params.borderWidth,\n            strokeDashArray = params.strokeDashArray,\n            borderRadius = params.borderRadius,\n            borderColor = params.borderColor,\n            _params$appendTo = params.appendTo,\n            appendTo = _params$appendTo === void 0 ? '.apexcharts-annotations' : _params$appendTo,\n            _params$paddingLeft = params.paddingLeft,\n            paddingLeft = _params$paddingLeft === void 0 ? 4 : _params$paddingLeft,\n            _params$paddingRight = params.paddingRight,\n            paddingRight = _params$paddingRight === void 0 ? 4 : _params$paddingRight,\n            _params$paddingBottom = params.paddingBottom,\n            paddingBottom = _params$paddingBottom === void 0 ? 2 : _params$paddingBottom,\n            _params$paddingTop = params.paddingTop,\n            paddingTop = _params$paddingTop === void 0 ? 2 : _params$paddingTop;\n        var w = this.w;\n        var elText = this.graphics.drawText({\n          x: x,\n          y: y,\n          text: text,\n          textAnchor: textAnchor || 'start',\n          fontSize: fontSize || '12px',\n          fontWeight: fontWeight || 'regular',\n          fontFamily: fontFamily || w.config.chart.fontFamily,\n          foreColor: foreColor || w.config.chart.foreColor,\n          cssClass: 'apexcharts-text ' + cssClass ? cssClass : ''\n        });\n        var parent = w.globals.dom.baseEl.querySelector(appendTo);\n\n        if (parent) {\n          parent.appendChild(elText.node);\n        }\n\n        var textRect = elText.bbox();\n\n        if (text) {\n          var elRect = this.graphics.drawRect(textRect.x - paddingLeft, textRect.y - paddingTop, textRect.width + paddingLeft + paddingRight, textRect.height + paddingBottom + paddingTop, borderRadius, backgroundColor ? backgroundColor : 'transparent', 1, borderWidth, borderColor, strokeDashArray);\n          parent.insertBefore(elRect.node, elText.node);\n        }\n      }\n    }, {\n      key: \"addImage\",\n      value: function addImage(params, index) {\n        var w = this.w;\n        var path = params.path,\n            _params$x = params.x,\n            x = _params$x === void 0 ? 0 : _params$x,\n            _params$y = params.y,\n            y = _params$y === void 0 ? 0 : _params$y,\n            _params$width = params.width,\n            width = _params$width === void 0 ? 20 : _params$width,\n            _params$height = params.height,\n            height = _params$height === void 0 ? 20 : _params$height,\n            _params$appendTo2 = params.appendTo,\n            appendTo = _params$appendTo2 === void 0 ? '.apexcharts-annotations' : _params$appendTo2;\n        var img = w.globals.dom.Paper.image(path);\n        img.size(width, height).move(x, y);\n        var parent = w.globals.dom.baseEl.querySelector(appendTo);\n\n        if (parent) {\n          parent.appendChild(img.node);\n        }\n\n        return img;\n      } // The addXaxisAnnotation method requires a parent class, and user calling this method externally on the chart instance may not specify parent, hence a different method\n\n    }, {\n      key: \"addXaxisAnnotationExternal\",\n      value: function addXaxisAnnotationExternal(params, pushToMemory, context) {\n        this.addAnnotationExternal({\n          params: params,\n          pushToMemory: pushToMemory,\n          context: context,\n          type: 'xaxis',\n          contextMethod: context.addXaxisAnnotation\n        });\n        return context;\n      }\n    }, {\n      key: \"addYaxisAnnotationExternal\",\n      value: function addYaxisAnnotationExternal(params, pushToMemory, context) {\n        this.addAnnotationExternal({\n          params: params,\n          pushToMemory: pushToMemory,\n          context: context,\n          type: 'yaxis',\n          contextMethod: context.addYaxisAnnotation\n        });\n        return context;\n      }\n    }, {\n      key: \"addPointAnnotationExternal\",\n      value: function addPointAnnotationExternal(params, pushToMemory, context) {\n        if (typeof this.invertAxis === 'undefined') {\n          this.invertAxis = context.w.globals.isBarHorizontal;\n        }\n\n        this.addAnnotationExternal({\n          params: params,\n          pushToMemory: pushToMemory,\n          context: context,\n          type: 'point',\n          contextMethod: context.addPointAnnotation\n        });\n        return context;\n      }\n    }, {\n      key: \"addAnnotationExternal\",\n      value: function addAnnotationExternal(_ref) {\n        var params = _ref.params,\n            pushToMemory = _ref.pushToMemory,\n            context = _ref.context,\n            type = _ref.type,\n            contextMethod = _ref.contextMethod;\n        var me = context;\n        var w = me.w;\n        var parent = w.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(type, \"-annotations\"));\n        var index = parent.childNodes.length + 1;\n        var options = new Options();\n        var axesAnno = Object.assign({}, type === 'xaxis' ? options.xAxisAnnotation : type === 'yaxis' ? options.yAxisAnnotation : options.pointAnnotation);\n        var anno = Utils$1.extend(axesAnno, params);\n\n        switch (type) {\n          case 'xaxis':\n            this.addXaxisAnnotation(anno, parent, index);\n            break;\n\n          case 'yaxis':\n            this.addYaxisAnnotation(anno, parent, index);\n            break;\n\n          case 'point':\n            this.addPointAnnotation(anno, parent, index);\n            break;\n        } // add background\n\n\n        var axesAnnoLabel = w.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(type, \"-annotations .apexcharts-\").concat(type, \"-annotation-label[rel='\").concat(index, \"']\"));\n        var elRect = this.helpers.addBackgroundToAnno(axesAnnoLabel, anno);\n\n        if (elRect) {\n          parent.insertBefore(elRect.node, axesAnnoLabel);\n        }\n\n        if (pushToMemory) {\n          w.globals.memory.methodsToExec.push({\n            context: me,\n            id: anno.id ? anno.id : Utils$1.randomId(),\n            method: contextMethod,\n            label: 'addAnnotation',\n            params: params\n          });\n        }\n\n        return context;\n      }\n    }, {\n      key: \"clearAnnotations\",\n      value: function clearAnnotations(ctx) {\n        var w = ctx.w;\n        var annos = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations'); // annotations added externally should be cleared out too\n\n        w.globals.memory.methodsToExec.map(function (m, i) {\n          if (m.label === 'addText' || m.label === 'addAnnotation') {\n            w.globals.memory.methodsToExec.splice(i, 1);\n          }\n        });\n        annos = Utils$1.listToArray(annos); // delete the DOM elements\n\n        Array.prototype.forEach.call(annos, function (a) {\n          while (a.firstChild) {\n            a.removeChild(a.firstChild);\n          }\n        });\n      }\n    }, {\n      key: \"removeAnnotation\",\n      value: function removeAnnotation(ctx, id) {\n        var w = ctx.w;\n        var annos = w.globals.dom.baseEl.querySelectorAll(\".\".concat(id));\n\n        if (annos) {\n          w.globals.memory.methodsToExec.map(function (m, i) {\n            if (m.id === id) {\n              w.globals.memory.methodsToExec.splice(i, 1);\n            }\n          });\n          Array.prototype.forEach.call(annos, function (a) {\n            a.parentElement.removeChild(a);\n          });\n        }\n      }\n    }]);\n\n    return Annotations;\n  }();\n\n  /**\n   * DateTime Class to manipulate datetime values.\n   *\n   * @module DateTime\n   **/\n\n  var DateTime = /*#__PURE__*/function () {\n    function DateTime(ctx) {\n      _classCallCheck(this, DateTime);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.months31 = [1, 3, 5, 7, 8, 10, 12];\n      this.months30 = [2, 4, 6, 9, 11];\n      this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n    }\n\n    _createClass(DateTime, [{\n      key: \"isValidDate\",\n      value: function isValidDate(date) {\n        return !isNaN(this.parseDate(date));\n      }\n    }, {\n      key: \"getTimeStamp\",\n      value: function getTimeStamp(dateStr) {\n        if (!Date.parse(dateStr)) {\n          return dateStr;\n        }\n\n        var utc = this.w.config.xaxis.labels.datetimeUTC;\n        return !utc ? new Date(dateStr).getTime() : new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime();\n      }\n    }, {\n      key: \"getDate\",\n      value: function getDate(timestamp) {\n        var utc = this.w.config.xaxis.labels.datetimeUTC;\n        return utc ? new Date(new Date(timestamp).toUTCString()) : new Date(timestamp);\n      }\n    }, {\n      key: \"parseDate\",\n      value: function parseDate(dateStr) {\n        var parsed = Date.parse(dateStr);\n\n        if (!isNaN(parsed)) {\n          return this.getTimeStamp(dateStr);\n        }\n\n        var output = Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' '));\n        output = this.getTimeStamp(output);\n        return output;\n      } // This fixes the difference of x-axis labels between chrome/safari\n      // Fixes #1726, #1544, #1485, #1255\n\n    }, {\n      key: \"parseDateWithTimezone\",\n      value: function parseDateWithTimezone(dateStr) {\n        return Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' '));\n      } // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191\n\n    }, {\n      key: \"formatDate\",\n      value: function formatDate(date, format) {\n        var locale = this.w.globals.locale;\n        var utc = this.w.config.xaxis.labels.datetimeUTC;\n        var MMMM = ['\\x00'].concat(_toConsumableArray(locale.months));\n        var MMM = ['\\x01'].concat(_toConsumableArray(locale.shortMonths));\n        var dddd = ['\\x02'].concat(_toConsumableArray(locale.days));\n        var ddd = ['\\x03'].concat(_toConsumableArray(locale.shortDays));\n\n        function ii(i, len) {\n          var s = i + '';\n          len = len || 2;\n\n          while (s.length < len) {\n            s = '0' + s;\n          }\n\n          return s;\n        }\n\n        var y = utc ? date.getUTCFullYear() : date.getFullYear();\n        format = format.replace(/(^|[^\\\\])yyyy+/g, '$1' + y);\n        format = format.replace(/(^|[^\\\\])yy/g, '$1' + y.toString().substr(2, 2));\n        format = format.replace(/(^|[^\\\\])y/g, '$1' + y);\n        var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1;\n        format = format.replace(/(^|[^\\\\])MMMM+/g, '$1' + MMMM[0]);\n        format = format.replace(/(^|[^\\\\])MMM/g, '$1' + MMM[0]);\n        format = format.replace(/(^|[^\\\\])MM/g, '$1' + ii(M));\n        format = format.replace(/(^|[^\\\\])M/g, '$1' + M);\n        var d = utc ? date.getUTCDate() : date.getDate();\n        format = format.replace(/(^|[^\\\\])dddd+/g, '$1' + dddd[0]);\n        format = format.replace(/(^|[^\\\\])ddd/g, '$1' + ddd[0]);\n        format = format.replace(/(^|[^\\\\])dd/g, '$1' + ii(d));\n        format = format.replace(/(^|[^\\\\])d/g, '$1' + d);\n        var H = utc ? date.getUTCHours() : date.getHours();\n        format = format.replace(/(^|[^\\\\])HH+/g, '$1' + ii(H));\n        format = format.replace(/(^|[^\\\\])H/g, '$1' + H);\n        var h = H > 12 ? H - 12 : H === 0 ? 12 : H;\n        format = format.replace(/(^|[^\\\\])hh+/g, '$1' + ii(h));\n        format = format.replace(/(^|[^\\\\])h/g, '$1' + h);\n        var m = utc ? date.getUTCMinutes() : date.getMinutes();\n        format = format.replace(/(^|[^\\\\])mm+/g, '$1' + ii(m));\n        format = format.replace(/(^|[^\\\\])m/g, '$1' + m);\n        var s = utc ? date.getUTCSeconds() : date.getSeconds();\n        format = format.replace(/(^|[^\\\\])ss+/g, '$1' + ii(s));\n        format = format.replace(/(^|[^\\\\])s/g, '$1' + s);\n        var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds();\n        format = format.replace(/(^|[^\\\\])fff+/g, '$1' + ii(f, 3));\n        f = Math.round(f / 10);\n        format = format.replace(/(^|[^\\\\])ff/g, '$1' + ii(f));\n        f = Math.round(f / 10);\n        format = format.replace(/(^|[^\\\\])f/g, '$1' + f);\n        var T = H < 12 ? 'AM' : 'PM';\n        format = format.replace(/(^|[^\\\\])TT+/g, '$1' + T);\n        format = format.replace(/(^|[^\\\\])T/g, '$1' + T.charAt(0));\n        var t = T.toLowerCase();\n        format = format.replace(/(^|[^\\\\])tt+/g, '$1' + t);\n        format = format.replace(/(^|[^\\\\])t/g, '$1' + t.charAt(0));\n        var tz = -date.getTimezoneOffset();\n        var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-';\n\n        if (!utc) {\n          tz = Math.abs(tz);\n          var tzHrs = Math.floor(tz / 60);\n          var tzMin = tz % 60;\n          K += ii(tzHrs) + ':' + ii(tzMin);\n        }\n\n        format = format.replace(/(^|[^\\\\])K/g, '$1' + K);\n        var day = (utc ? date.getUTCDay() : date.getDay()) + 1;\n        format = format.replace(new RegExp(dddd[0], 'g'), dddd[day]);\n        format = format.replace(new RegExp(ddd[0], 'g'), ddd[day]);\n        format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M]);\n        format = format.replace(new RegExp(MMM[0], 'g'), MMM[M]);\n        format = format.replace(/\\\\(.)/g, '$1');\n        return format;\n      }\n    }, {\n      key: \"getTimeUnitsfromTimestamp\",\n      value: function getTimeUnitsfromTimestamp(minX, maxX, utc) {\n        var w = this.w;\n\n        if (w.config.xaxis.min !== undefined) {\n          minX = w.config.xaxis.min;\n        }\n\n        if (w.config.xaxis.max !== undefined) {\n          maxX = w.config.xaxis.max;\n        }\n\n        var tsMin = this.getDate(minX);\n        var tsMax = this.getDate(maxX);\n        var minD = this.formatDate(tsMin, 'yyyy MM dd HH mm ss fff').split(' ');\n        var maxD = this.formatDate(tsMax, 'yyyy MM dd HH mm ss fff').split(' ');\n        return {\n          minMillisecond: parseInt(minD[6], 10),\n          maxMillisecond: parseInt(maxD[6], 10),\n          minSecond: parseInt(minD[5], 10),\n          maxSecond: parseInt(maxD[5], 10),\n          minMinute: parseInt(minD[4], 10),\n          maxMinute: parseInt(maxD[4], 10),\n          minHour: parseInt(minD[3], 10),\n          maxHour: parseInt(maxD[3], 10),\n          minDate: parseInt(minD[2], 10),\n          maxDate: parseInt(maxD[2], 10),\n          minMonth: parseInt(minD[1], 10) - 1,\n          maxMonth: parseInt(maxD[1], 10) - 1,\n          minYear: parseInt(minD[0], 10),\n          maxYear: parseInt(maxD[0], 10)\n        };\n      }\n    }, {\n      key: \"isLeapYear\",\n      value: function isLeapYear(year) {\n        return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n      }\n    }, {\n      key: \"calculcateLastDaysOfMonth\",\n      value: function calculcateLastDaysOfMonth(month, year, subtract) {\n        var days = this.determineDaysOfMonths(month, year); // whatever days we get, subtract the number of days asked\n\n        return days - subtract;\n      }\n    }, {\n      key: \"determineDaysOfYear\",\n      value: function determineDaysOfYear(year) {\n        var days = 365;\n\n        if (this.isLeapYear(year)) {\n          days = 366;\n        }\n\n        return days;\n      }\n    }, {\n      key: \"determineRemainingDaysOfYear\",\n      value: function determineRemainingDaysOfYear(year, month, date) {\n        var dayOfYear = this.daysCntOfYear[month] + date;\n        if (month > 1 && this.isLeapYear()) dayOfYear++;\n        return dayOfYear;\n      }\n    }, {\n      key: \"determineDaysOfMonths\",\n      value: function determineDaysOfMonths(month, year) {\n        var days = 30;\n        month = Utils$1.monthMod(month);\n\n        switch (true) {\n          case this.months30.indexOf(month) > -1:\n            if (month === 2) {\n              if (this.isLeapYear(year)) {\n                days = 29;\n              } else {\n                days = 28;\n              }\n            }\n\n            break;\n\n          case this.months31.indexOf(month) > -1:\n            days = 31;\n            break;\n\n          default:\n            days = 31;\n            break;\n        }\n\n        return days;\n      }\n    }]);\n\n    return DateTime;\n  }();\n\n  /**\n   * ApexCharts Formatter Class for setting value formatters for axes as well as tooltips.\n   *\n   * @module Formatters\n   **/\n\n  var Formatters = /*#__PURE__*/function () {\n    function Formatters(ctx) {\n      _classCallCheck(this, Formatters);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.tooltipKeyFormat = 'dd MMM';\n    }\n\n    _createClass(Formatters, [{\n      key: \"xLabelFormat\",\n      value: function xLabelFormat(fn, val, timestamp, opts) {\n        var w = this.w;\n\n        if (w.config.xaxis.type === 'datetime') {\n          if (w.config.xaxis.labels.formatter === undefined) {\n            // if user has not specified a custom formatter, use the default tooltip.x.format\n            if (w.config.tooltip.x.formatter === undefined) {\n              var datetimeObj = new DateTime(this.ctx);\n              return datetimeObj.formatDate(datetimeObj.getDate(val), w.config.tooltip.x.format);\n            }\n          }\n        }\n\n        return fn(val, timestamp, opts);\n      }\n    }, {\n      key: \"defaultGeneralFormatter\",\n      value: function defaultGeneralFormatter(val) {\n        if (Array.isArray(val)) {\n          return val.map(function (v) {\n            return v;\n          });\n        } else {\n          return val;\n        }\n      }\n    }, {\n      key: \"defaultYFormatter\",\n      value: function defaultYFormatter(v, yaxe, i) {\n        var w = this.w;\n\n        if (Utils$1.isNumber(v)) {\n          if (w.globals.yValueDecimal !== 0) {\n            v = v.toFixed(yaxe.decimalsInFloat !== undefined ? yaxe.decimalsInFloat : w.globals.yValueDecimal);\n          } else if (w.globals.maxYArr[i] - w.globals.minYArr[i] < 5) {\n            v = v.toFixed(1);\n          } else {\n            v = v.toFixed(0);\n          }\n        }\n\n        return v;\n      }\n    }, {\n      key: \"setLabelFormatters\",\n      value: function setLabelFormatters() {\n        var _this = this;\n\n        var w = this.w;\n\n        w.globals.xaxisTooltipFormatter = function (val) {\n          return _this.defaultGeneralFormatter(val);\n        };\n\n        w.globals.ttKeyFormatter = function (val) {\n          return _this.defaultGeneralFormatter(val);\n        };\n\n        w.globals.ttZFormatter = function (val) {\n          return val;\n        };\n\n        w.globals.legendFormatter = function (val) {\n          return _this.defaultGeneralFormatter(val);\n        }; // formatter function will always overwrite format property\n\n\n        if (w.config.xaxis.labels.formatter !== undefined) {\n          w.globals.xLabelFormatter = w.config.xaxis.labels.formatter;\n        } else {\n          w.globals.xLabelFormatter = function (val) {\n            if (Utils$1.isNumber(val)) {\n              if (!w.config.xaxis.convertedCatToNumeric && w.config.xaxis.type === 'numeric') {\n                if (Utils$1.isNumber(w.config.xaxis.decimalsInFloat)) {\n                  return val.toFixed(w.config.xaxis.decimalsInFloat);\n                } else {\n                  var diff = w.globals.maxX - w.globals.minX;\n\n                  if (diff > 0 && diff < 100) {\n                    return val.toFixed(1);\n                  }\n\n                  return val.toFixed(0);\n                }\n              }\n\n              if (w.globals.isBarHorizontal) {\n                var range = w.globals.maxY - w.globals.minYArr;\n\n                if (range < 4) {\n                  return val.toFixed(1);\n                }\n              }\n\n              return val.toFixed(0);\n            }\n\n            return val;\n          };\n        }\n\n        if (typeof w.config.tooltip.x.formatter === 'function') {\n          w.globals.ttKeyFormatter = w.config.tooltip.x.formatter;\n        } else {\n          w.globals.ttKeyFormatter = w.globals.xLabelFormatter;\n        }\n\n        if (typeof w.config.xaxis.tooltip.formatter === 'function') {\n          w.globals.xaxisTooltipFormatter = w.config.xaxis.tooltip.formatter;\n        }\n\n        if (Array.isArray(w.config.tooltip.y)) {\n          w.globals.ttVal = w.config.tooltip.y;\n        } else {\n          if (w.config.tooltip.y.formatter !== undefined) {\n            w.globals.ttVal = w.config.tooltip.y;\n          }\n        }\n\n        if (w.config.tooltip.z.formatter !== undefined) {\n          w.globals.ttZFormatter = w.config.tooltip.z.formatter;\n        } // legend formatter - if user wants to append any global values of series to legend text\n\n\n        if (w.config.legend.formatter !== undefined) {\n          w.globals.legendFormatter = w.config.legend.formatter;\n        } // formatter function will always overwrite format property\n\n\n        w.config.yaxis.forEach(function (yaxe, i) {\n          if (yaxe.labels.formatter !== undefined) {\n            w.globals.yLabelFormatters[i] = yaxe.labels.formatter;\n          } else {\n            w.globals.yLabelFormatters[i] = function (val) {\n              if (!w.globals.xyCharts) return val;\n\n              if (Array.isArray(val)) {\n                return val.map(function (v) {\n                  return _this.defaultYFormatter(v, yaxe, i);\n                });\n              } else {\n                return _this.defaultYFormatter(val, yaxe, i);\n              }\n            };\n          }\n        });\n        return w.globals;\n      }\n    }, {\n      key: \"heatmapLabelFormatters\",\n      value: function heatmapLabelFormatters() {\n        var w = this.w;\n\n        if (w.config.chart.type === 'heatmap') {\n          w.globals.yAxisScale[0].result = w.globals.seriesNames.slice(); //  get the longest string from the labels array and also apply label formatter to it\n\n          var longest = w.globals.seriesNames.reduce(function (a, b) {\n            return a.length > b.length ? a : b;\n          }, 0);\n          w.globals.yAxisScale[0].niceMax = longest;\n          w.globals.yAxisScale[0].niceMin = longest;\n        }\n      }\n    }]);\n\n    return Formatters;\n  }();\n\n  /**\n   * ApexCharts Default Class for setting default options for all chart types.\n   *\n   * @module Defaults\n   **/\n\n  var getRangeValues = function getRangeValues(_ref) {\n    var _w$config$series$seri;\n\n    var isTimeline = _ref.isTimeline,\n        ctx = _ref.ctx,\n        seriesIndex = _ref.seriesIndex,\n        dataPointIndex = _ref.dataPointIndex,\n        y1 = _ref.y1,\n        y2 = _ref.y2,\n        w = _ref.w;\n    var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex];\n    var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex];\n    var ylabel = w.globals.labels[dataPointIndex];\n    var seriesName = w.config.series[seriesIndex].name ? w.config.series[seriesIndex].name : '';\n    var yLbFormatter = w.globals.ttKeyFormatter;\n    var yLbTitleFormatter = w.config.tooltip.y.title.formatter;\n    var opts = {\n      w: w,\n      seriesIndex: seriesIndex,\n      dataPointIndex: dataPointIndex,\n      start: start,\n      end: end\n    };\n\n    if (typeof yLbTitleFormatter === 'function') {\n      seriesName = yLbTitleFormatter(seriesName, opts);\n    }\n\n    if ((_w$config$series$seri = w.config.series[seriesIndex].data[dataPointIndex]) !== null && _w$config$series$seri !== void 0 && _w$config$series$seri.x) {\n      ylabel = w.config.series[seriesIndex].data[dataPointIndex].x;\n    }\n\n    if (!isTimeline) {\n      if (w.config.xaxis.type === 'datetime') {\n        var xFormat = new Formatters(ctx);\n        ylabel = xFormat.xLabelFormat(w.globals.ttKeyFormatter, ylabel, ylabel, {\n          i: undefined,\n          dateFormatter: new DateTime(ctx).formatDate,\n          w: w\n        });\n      }\n    }\n\n    if (typeof yLbFormatter === 'function') {\n      ylabel = yLbFormatter(ylabel, opts);\n    }\n\n    if (Number.isFinite(y1) && Number.isFinite(y2)) {\n      start = y1;\n      end = y2;\n    }\n\n    var startVal = '';\n    var endVal = '';\n    var color = w.globals.colors[seriesIndex];\n\n    if (w.config.tooltip.x.formatter === undefined) {\n      if (w.config.xaxis.type === 'datetime') {\n        var datetimeObj = new DateTime(ctx);\n        startVal = datetimeObj.formatDate(datetimeObj.getDate(start), w.config.tooltip.x.format);\n        endVal = datetimeObj.formatDate(datetimeObj.getDate(end), w.config.tooltip.x.format);\n      } else {\n        startVal = start;\n        endVal = end;\n      }\n    } else {\n      startVal = w.config.tooltip.x.formatter(start);\n      endVal = w.config.tooltip.x.formatter(end);\n    }\n\n    return {\n      start: start,\n      end: end,\n      startVal: startVal,\n      endVal: endVal,\n      ylabel: ylabel,\n      color: color,\n      seriesName: seriesName\n    };\n  };\n\n  var buildRangeTooltipHTML = function buildRangeTooltipHTML(opts) {\n    var color = opts.color,\n        seriesName = opts.seriesName,\n        ylabel = opts.ylabel,\n        start = opts.start,\n        end = opts.end,\n        seriesIndex = opts.seriesIndex,\n        dataPointIndex = opts.dataPointIndex;\n    var formatter = opts.ctx.tooltip.tooltipLabels.getFormatters(seriesIndex);\n    start = formatter.yLbFormatter(start);\n    end = formatter.yLbFormatter(end);\n    var val = formatter.yLbFormatter(opts.w.globals.series[seriesIndex][dataPointIndex]);\n    var valueHTML = '';\n    var rangeValues = \"<span class=\\\"value start-value\\\">\\n  \".concat(start, \"\\n  </span> <span class=\\\"separator\\\">-</span> <span class=\\\"value end-value\\\">\\n  \").concat(end, \"\\n  </span>\");\n\n    if (opts.w.globals.comboCharts) {\n      if (opts.w.config.series[seriesIndex].type === 'rangeArea' || opts.w.config.series[seriesIndex].type === 'rangeBar') {\n        valueHTML = rangeValues;\n      } else {\n        valueHTML = \"<span>\".concat(val, \"</span>\");\n      }\n    } else {\n      valueHTML = rangeValues;\n    }\n\n    return '<div class=\"apexcharts-tooltip-rangebar\">' + '<div> <span class=\"series-name\" style=\"color: ' + color + '\">' + (seriesName ? seriesName : '') + '</span></div>' + '<div> <span class=\"category\">' + ylabel + ': </span> ' + valueHTML + ' </div>' + '</div>';\n  };\n\n  var Defaults = /*#__PURE__*/function () {\n    function Defaults(opts) {\n      _classCallCheck(this, Defaults);\n\n      this.opts = opts;\n    }\n\n    _createClass(Defaults, [{\n      key: \"hideYAxis\",\n      value: function hideYAxis() {\n        this.opts.yaxis[0].show = false;\n        this.opts.yaxis[0].title.text = '';\n        this.opts.yaxis[0].axisBorder.show = false;\n        this.opts.yaxis[0].axisTicks.show = false;\n        this.opts.yaxis[0].floating = true;\n      }\n    }, {\n      key: \"line\",\n      value: function line() {\n        return {\n          chart: {\n            animations: {\n              easing: 'swing'\n            }\n          },\n          dataLabels: {\n            enabled: false\n          },\n          stroke: {\n            width: 5,\n            curve: 'straight'\n          },\n          markers: {\n            size: 0,\n            hover: {\n              sizeOffset: 6\n            }\n          },\n          xaxis: {\n            crosshairs: {\n              width: 1\n            }\n          }\n        };\n      }\n    }, {\n      key: \"sparkline\",\n      value: function sparkline(defaults) {\n        this.hideYAxis();\n        var ret = {\n          grid: {\n            show: false,\n            padding: {\n              left: 0,\n              right: 0,\n              top: 0,\n              bottom: 0\n            }\n          },\n          legend: {\n            show: false\n          },\n          xaxis: {\n            labels: {\n              show: false\n            },\n            tooltip: {\n              enabled: false\n            },\n            axisBorder: {\n              show: false\n            },\n            axisTicks: {\n              show: false\n            }\n          },\n          chart: {\n            toolbar: {\n              show: false\n            },\n            zoom: {\n              enabled: false\n            }\n          },\n          dataLabels: {\n            enabled: false\n          }\n        };\n        return Utils$1.extend(defaults, ret);\n      }\n    }, {\n      key: \"bar\",\n      value: function bar() {\n        return {\n          chart: {\n            stacked: false,\n            animations: {\n              easing: 'swing'\n            }\n          },\n          plotOptions: {\n            bar: {\n              dataLabels: {\n                position: 'center'\n              }\n            }\n          },\n          dataLabels: {\n            style: {\n              colors: ['#fff']\n            },\n            background: {\n              enabled: false\n            }\n          },\n          stroke: {\n            width: 0,\n            lineCap: 'round'\n          },\n          fill: {\n            opacity: 0.85\n          },\n          legend: {\n            markers: {\n              shape: 'square',\n              radius: 2,\n              size: 8\n            }\n          },\n          tooltip: {\n            shared: false,\n            intersect: true\n          },\n          xaxis: {\n            tooltip: {\n              enabled: false\n            },\n            tickPlacement: 'between',\n            crosshairs: {\n              width: 'barWidth',\n              position: 'back',\n              fill: {\n                type: 'gradient'\n              },\n              dropShadow: {\n                enabled: false\n              },\n              stroke: {\n                width: 0\n              }\n            }\n          }\n        };\n      }\n    }, {\n      key: \"funnel\",\n      value: function funnel() {\n        this.hideYAxis();\n        return _objectSpread2(_objectSpread2({}, this.bar()), {}, {\n          chart: {\n            animations: {\n              easing: 'linear',\n              speed: 800,\n              animateGradually: {\n                enabled: false\n              }\n            }\n          },\n          plotOptions: {\n            bar: {\n              horizontal: true,\n              borderRadiusApplication: 'around',\n              borderRadius: 0,\n              dataLabels: {\n                position: 'center'\n              }\n            }\n          },\n          grid: {\n            show: false,\n            padding: {\n              left: 0,\n              right: 0\n            }\n          },\n          xaxis: {\n            labels: {\n              show: false\n            },\n            tooltip: {\n              enabled: false\n            },\n            axisBorder: {\n              show: false\n            },\n            axisTicks: {\n              show: false\n            }\n          }\n        });\n      }\n    }, {\n      key: \"candlestick\",\n      value: function candlestick() {\n        var _this = this;\n\n        return {\n          stroke: {\n            width: 1,\n            colors: ['#333']\n          },\n          fill: {\n            opacity: 1\n          },\n          dataLabels: {\n            enabled: false\n          },\n          tooltip: {\n            shared: true,\n            custom: function custom(_ref2) {\n              var seriesIndex = _ref2.seriesIndex,\n                  dataPointIndex = _ref2.dataPointIndex,\n                  w = _ref2.w;\n              return _this._getBoxTooltip(w, seriesIndex, dataPointIndex, ['Open', 'High', '', 'Low', 'Close'], 'candlestick');\n            }\n          },\n          states: {\n            active: {\n              filter: {\n                type: 'none'\n              }\n            }\n          },\n          xaxis: {\n            crosshairs: {\n              width: 1\n            }\n          }\n        };\n      }\n    }, {\n      key: \"boxPlot\",\n      value: function boxPlot() {\n        var _this2 = this;\n\n        return {\n          chart: {\n            animations: {\n              dynamicAnimation: {\n                enabled: false\n              }\n            }\n          },\n          stroke: {\n            width: 1,\n            colors: ['#24292e']\n          },\n          dataLabels: {\n            enabled: false\n          },\n          tooltip: {\n            shared: true,\n            custom: function custom(_ref3) {\n              var seriesIndex = _ref3.seriesIndex,\n                  dataPointIndex = _ref3.dataPointIndex,\n                  w = _ref3.w;\n              return _this2._getBoxTooltip(w, seriesIndex, dataPointIndex, ['Minimum', 'Q1', 'Median', 'Q3', 'Maximum'], 'boxPlot');\n            }\n          },\n          markers: {\n            size: 5,\n            strokeWidth: 1,\n            strokeColors: '#111'\n          },\n          xaxis: {\n            crosshairs: {\n              width: 1\n            }\n          }\n        };\n      }\n    }, {\n      key: \"rangeBar\",\n      value: function rangeBar() {\n        var handleTimelineTooltip = function handleTimelineTooltip(opts) {\n          var _getRangeValues = getRangeValues(_objectSpread2(_objectSpread2({}, opts), {}, {\n            isTimeline: true\n          })),\n              color = _getRangeValues.color,\n              seriesName = _getRangeValues.seriesName,\n              ylabel = _getRangeValues.ylabel,\n              startVal = _getRangeValues.startVal,\n              endVal = _getRangeValues.endVal;\n\n          return buildRangeTooltipHTML(_objectSpread2(_objectSpread2({}, opts), {}, {\n            color: color,\n            seriesName: seriesName,\n            ylabel: ylabel,\n            start: startVal,\n            end: endVal\n          }));\n        };\n\n        var handleRangeColumnTooltip = function handleRangeColumnTooltip(opts) {\n          var _getRangeValues2 = getRangeValues(opts),\n              color = _getRangeValues2.color,\n              seriesName = _getRangeValues2.seriesName,\n              ylabel = _getRangeValues2.ylabel,\n              start = _getRangeValues2.start,\n              end = _getRangeValues2.end;\n\n          return buildRangeTooltipHTML(_objectSpread2(_objectSpread2({}, opts), {}, {\n            color: color,\n            seriesName: seriesName,\n            ylabel: ylabel,\n            start: start,\n            end: end\n          }));\n        };\n\n        return {\n          chart: {\n            animations: {\n              animateGradually: false\n            }\n          },\n          stroke: {\n            width: 0,\n            lineCap: 'square'\n          },\n          plotOptions: {\n            bar: {\n              borderRadius: 0,\n              dataLabels: {\n                position: 'center'\n              }\n            }\n          },\n          dataLabels: {\n            enabled: false,\n            formatter: function formatter(val, _ref4) {\n              _ref4.ctx;\n                  var seriesIndex = _ref4.seriesIndex,\n                  dataPointIndex = _ref4.dataPointIndex,\n                  w = _ref4.w;\n\n              var getVal = function getVal() {\n                var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex];\n                var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex];\n                return end - start;\n              };\n\n              if (w.globals.comboCharts) {\n                if (w.config.series[seriesIndex].type === 'rangeBar' || w.config.series[seriesIndex].type === 'rangeArea') {\n                  return getVal();\n                } else {\n                  return val;\n                }\n              } else {\n                return getVal();\n              }\n            },\n            background: {\n              enabled: false\n            },\n            style: {\n              colors: ['#fff']\n            }\n          },\n          markers: {\n            size: 10\n          },\n          tooltip: {\n            shared: false,\n            followCursor: true,\n            custom: function custom(opts) {\n              if (opts.w.config.plotOptions && opts.w.config.plotOptions.bar && opts.w.config.plotOptions.bar.horizontal) {\n                return handleTimelineTooltip(opts);\n              } else {\n                return handleRangeColumnTooltip(opts);\n              }\n            }\n          },\n          xaxis: {\n            tickPlacement: 'between',\n            tooltip: {\n              enabled: false\n            },\n            crosshairs: {\n              stroke: {\n                width: 0\n              }\n            }\n          }\n        };\n      }\n    }, {\n      key: \"dumbbell\",\n      value: function dumbbell(opts) {\n        var _opts$plotOptions$bar, _opts$plotOptions$bar2;\n\n        if (!((_opts$plotOptions$bar = opts.plotOptions.bar) !== null && _opts$plotOptions$bar !== void 0 && _opts$plotOptions$bar.barHeight)) {\n          opts.plotOptions.bar.barHeight = 2;\n        }\n\n        if (!((_opts$plotOptions$bar2 = opts.plotOptions.bar) !== null && _opts$plotOptions$bar2 !== void 0 && _opts$plotOptions$bar2.columnWidth)) {\n          opts.plotOptions.bar.columnWidth = 2;\n        }\n\n        return opts;\n      }\n    }, {\n      key: \"area\",\n      value: function area() {\n        return {\n          stroke: {\n            width: 4,\n            fill: {\n              type: 'solid',\n              gradient: {\n                inverseColors: false,\n                shade: 'light',\n                type: 'vertical',\n                opacityFrom: 0.65,\n                opacityTo: 0.5,\n                stops: [0, 100, 100]\n              }\n            }\n          },\n          fill: {\n            type: 'gradient',\n            gradient: {\n              inverseColors: false,\n              shade: 'light',\n              type: 'vertical',\n              opacityFrom: 0.65,\n              opacityTo: 0.5,\n              stops: [0, 100, 100]\n            }\n          },\n          markers: {\n            size: 0,\n            hover: {\n              sizeOffset: 6\n            }\n          },\n          tooltip: {\n            followCursor: false\n          }\n        };\n      }\n    }, {\n      key: \"rangeArea\",\n      value: function rangeArea() {\n        var handleRangeAreaTooltip = function handleRangeAreaTooltip(opts) {\n          var _getRangeValues3 = getRangeValues(opts),\n              color = _getRangeValues3.color,\n              seriesName = _getRangeValues3.seriesName,\n              ylabel = _getRangeValues3.ylabel,\n              start = _getRangeValues3.start,\n              end = _getRangeValues3.end;\n\n          return buildRangeTooltipHTML(_objectSpread2(_objectSpread2({}, opts), {}, {\n            color: color,\n            seriesName: seriesName,\n            ylabel: ylabel,\n            start: start,\n            end: end\n          }));\n        };\n\n        return {\n          stroke: {\n            curve: 'straight',\n            width: 0\n          },\n          fill: {\n            type: 'solid',\n            opacity: 0.6\n          },\n          markers: {\n            size: 0\n          },\n          states: {\n            hover: {\n              filter: {\n                type: 'none'\n              }\n            },\n            active: {\n              filter: {\n                type: 'none'\n              }\n            }\n          },\n          tooltip: {\n            intersect: false,\n            shared: true,\n            followCursor: true,\n            custom: function custom(opts) {\n              return handleRangeAreaTooltip(opts);\n            }\n          }\n        };\n      }\n    }, {\n      key: \"brush\",\n      value: function brush(defaults) {\n        var ret = {\n          chart: {\n            toolbar: {\n              autoSelected: 'selection',\n              show: false\n            },\n            zoom: {\n              enabled: false\n            }\n          },\n          dataLabels: {\n            enabled: false\n          },\n          stroke: {\n            width: 1\n          },\n          tooltip: {\n            enabled: false\n          },\n          xaxis: {\n            tooltip: {\n              enabled: false\n            }\n          }\n        };\n        return Utils$1.extend(defaults, ret);\n      }\n    }, {\n      key: \"stacked100\",\n      value: function stacked100(opts) {\n        opts.dataLabels = opts.dataLabels || {};\n        opts.dataLabels.formatter = opts.dataLabels.formatter || undefined;\n        var existingDataLabelFormatter = opts.dataLabels.formatter;\n        opts.yaxis.forEach(function (yaxe, index) {\n          opts.yaxis[index].min = 0;\n          opts.yaxis[index].max = 100;\n        });\n        var isBar = opts.chart.type === 'bar';\n\n        if (isBar) {\n          opts.dataLabels.formatter = existingDataLabelFormatter || function (val) {\n            if (typeof val === 'number') {\n              return val ? val.toFixed(0) + '%' : val;\n            }\n\n            return val;\n          };\n        }\n\n        return opts;\n      }\n    }, {\n      key: \"stackedBars\",\n      value: function stackedBars() {\n        var barDefaults = this.bar();\n        return _objectSpread2(_objectSpread2({}, barDefaults), {}, {\n          plotOptions: _objectSpread2(_objectSpread2({}, barDefaults.plotOptions), {}, {\n            bar: _objectSpread2(_objectSpread2({}, barDefaults.plotOptions.bar), {}, {\n              borderRadiusApplication: 'end',\n              borderRadiusWhenStacked: 'last'\n            })\n          })\n        });\n      } // This function removes the left and right spacing in chart for line/area/scatter if xaxis type = category for those charts by converting xaxis = numeric. Numeric/Datetime xaxis prevents the unnecessary spacing in the left/right of the chart area\n\n    }, {\n      key: \"convertCatToNumeric\",\n      value: function convertCatToNumeric(opts) {\n        opts.xaxis.convertedCatToNumeric = true;\n        return opts;\n      }\n    }, {\n      key: \"convertCatToNumericXaxis\",\n      value: function convertCatToNumericXaxis(opts, ctx, cats) {\n        opts.xaxis.type = 'numeric';\n        opts.xaxis.labels = opts.xaxis.labels || {};\n\n        opts.xaxis.labels.formatter = opts.xaxis.labels.formatter || function (val) {\n          return Utils$1.isNumber(val) ? Math.floor(val) : val;\n        };\n\n        var defaultFormatter = opts.xaxis.labels.formatter;\n        var labels = opts.xaxis.categories && opts.xaxis.categories.length ? opts.xaxis.categories : opts.labels;\n\n        if (cats && cats.length) {\n          labels = cats.map(function (c) {\n            return Array.isArray(c) ? c : String(c);\n          });\n        }\n\n        if (labels && labels.length) {\n          opts.xaxis.labels.formatter = function (val) {\n            return Utils$1.isNumber(val) ? defaultFormatter(labels[Math.floor(val) - 1]) : defaultFormatter(val);\n          };\n        }\n\n        opts.xaxis.categories = [];\n        opts.labels = [];\n        opts.xaxis.tickAmount = opts.xaxis.tickAmount || 'dataPoints';\n        return opts;\n      }\n    }, {\n      key: \"bubble\",\n      value: function bubble() {\n        return {\n          dataLabels: {\n            style: {\n              colors: ['#fff']\n            }\n          },\n          tooltip: {\n            shared: false,\n            intersect: true\n          },\n          xaxis: {\n            crosshairs: {\n              width: 0\n            }\n          },\n          fill: {\n            type: 'solid',\n            gradient: {\n              shade: 'light',\n              inverse: true,\n              shadeIntensity: 0.55,\n              opacityFrom: 0.4,\n              opacityTo: 0.8\n            }\n          }\n        };\n      }\n    }, {\n      key: \"scatter\",\n      value: function scatter() {\n        return {\n          dataLabels: {\n            enabled: false\n          },\n          tooltip: {\n            shared: false,\n            intersect: true\n          },\n          markers: {\n            size: 6,\n            strokeWidth: 1,\n            hover: {\n              sizeOffset: 2\n            }\n          }\n        };\n      }\n    }, {\n      key: \"heatmap\",\n      value: function heatmap() {\n        return {\n          chart: {\n            stacked: false\n          },\n          fill: {\n            opacity: 1\n          },\n          dataLabels: {\n            style: {\n              colors: ['#fff']\n            }\n          },\n          stroke: {\n            colors: ['#fff']\n          },\n          tooltip: {\n            followCursor: true,\n            marker: {\n              show: false\n            },\n            x: {\n              show: false\n            }\n          },\n          legend: {\n            position: 'top',\n            markers: {\n              shape: 'square',\n              size: 10,\n              offsetY: 2\n            }\n          },\n          grid: {\n            padding: {\n              right: 20\n            }\n          }\n        };\n      }\n    }, {\n      key: \"treemap\",\n      value: function treemap() {\n        return {\n          chart: {\n            zoom: {\n              enabled: false\n            }\n          },\n          dataLabels: {\n            style: {\n              fontSize: 14,\n              fontWeight: 600,\n              colors: ['#fff']\n            }\n          },\n          stroke: {\n            show: true,\n            width: 2,\n            colors: ['#fff']\n          },\n          legend: {\n            show: false\n          },\n          fill: {\n            gradient: {\n              stops: [0, 100]\n            }\n          },\n          tooltip: {\n            followCursor: true,\n            x: {\n              show: false\n            }\n          },\n          grid: {\n            padding: {\n              left: 0,\n              right: 0\n            }\n          },\n          xaxis: {\n            crosshairs: {\n              show: false\n            },\n            tooltip: {\n              enabled: false\n            }\n          }\n        };\n      }\n    }, {\n      key: \"pie\",\n      value: function pie() {\n        return {\n          chart: {\n            toolbar: {\n              show: false\n            }\n          },\n          plotOptions: {\n            pie: {\n              donut: {\n                labels: {\n                  show: false\n                }\n              }\n            }\n          },\n          dataLabels: {\n            formatter: function formatter(val) {\n              return val.toFixed(1) + '%';\n            },\n            style: {\n              colors: ['#fff']\n            },\n            background: {\n              enabled: false\n            },\n            dropShadow: {\n              enabled: true\n            }\n          },\n          stroke: {\n            colors: ['#fff']\n          },\n          fill: {\n            opacity: 1,\n            gradient: {\n              shade: 'light',\n              stops: [0, 100]\n            }\n          },\n          tooltip: {\n            theme: 'dark',\n            fillSeriesColor: true\n          },\n          legend: {\n            position: 'right'\n          }\n        };\n      }\n    }, {\n      key: \"donut\",\n      value: function donut() {\n        return {\n          chart: {\n            toolbar: {\n              show: false\n            }\n          },\n          dataLabels: {\n            formatter: function formatter(val) {\n              return val.toFixed(1) + '%';\n            },\n            style: {\n              colors: ['#fff']\n            },\n            background: {\n              enabled: false\n            },\n            dropShadow: {\n              enabled: true\n            }\n          },\n          stroke: {\n            colors: ['#fff']\n          },\n          fill: {\n            opacity: 1,\n            gradient: {\n              shade: 'light',\n              shadeIntensity: 0.35,\n              stops: [80, 100],\n              opacityFrom: 1,\n              opacityTo: 1\n            }\n          },\n          tooltip: {\n            theme: 'dark',\n            fillSeriesColor: true\n          },\n          legend: {\n            position: 'right'\n          }\n        };\n      }\n    }, {\n      key: \"polarArea\",\n      value: function polarArea() {\n        this.opts.yaxis[0].tickAmount = this.opts.yaxis[0].tickAmount ? this.opts.yaxis[0].tickAmount : 6;\n        return {\n          chart: {\n            toolbar: {\n              show: false\n            }\n          },\n          dataLabels: {\n            formatter: function formatter(val) {\n              return val.toFixed(1) + '%';\n            },\n            enabled: false\n          },\n          stroke: {\n            show: true,\n            width: 2\n          },\n          fill: {\n            opacity: 0.7\n          },\n          tooltip: {\n            theme: 'dark',\n            fillSeriesColor: true\n          },\n          legend: {\n            position: 'right'\n          }\n        };\n      }\n    }, {\n      key: \"radar\",\n      value: function radar() {\n        this.opts.yaxis[0].labels.offsetY = this.opts.yaxis[0].labels.offsetY ? this.opts.yaxis[0].labels.offsetY : 6;\n        return {\n          dataLabels: {\n            enabled: false,\n            style: {\n              fontSize: '11px'\n            }\n          },\n          stroke: {\n            width: 2\n          },\n          markers: {\n            size: 3,\n            strokeWidth: 1,\n            strokeOpacity: 1\n          },\n          fill: {\n            opacity: 0.2\n          },\n          tooltip: {\n            shared: false,\n            intersect: true,\n            followCursor: true\n          },\n          grid: {\n            show: false\n          },\n          xaxis: {\n            labels: {\n              formatter: function formatter(val) {\n                return val;\n              },\n              style: {\n                colors: ['#a8a8a8'],\n                fontSize: '11px'\n              }\n            },\n            tooltip: {\n              enabled: false\n            },\n            crosshairs: {\n              show: false\n            }\n          }\n        };\n      }\n    }, {\n      key: \"radialBar\",\n      value: function radialBar() {\n        return {\n          chart: {\n            animations: {\n              dynamicAnimation: {\n                enabled: true,\n                speed: 800\n              }\n            },\n            toolbar: {\n              show: false\n            }\n          },\n          fill: {\n            gradient: {\n              shade: 'dark',\n              shadeIntensity: 0.4,\n              inverseColors: false,\n              type: 'diagonal2',\n              opacityFrom: 1,\n              opacityTo: 1,\n              stops: [70, 98, 100]\n            }\n          },\n          legend: {\n            show: false,\n            position: 'right'\n          },\n          tooltip: {\n            enabled: false,\n            fillSeriesColor: true\n          }\n        };\n      }\n    }, {\n      key: \"_getBoxTooltip\",\n      value: function _getBoxTooltip(w, seriesIndex, dataPointIndex, labels, chartType) {\n        var o = w.globals.seriesCandleO[seriesIndex][dataPointIndex];\n        var h = w.globals.seriesCandleH[seriesIndex][dataPointIndex];\n        var m = w.globals.seriesCandleM[seriesIndex][dataPointIndex];\n        var l = w.globals.seriesCandleL[seriesIndex][dataPointIndex];\n        var c = w.globals.seriesCandleC[seriesIndex][dataPointIndex];\n\n        if (w.config.series[seriesIndex].type && w.config.series[seriesIndex].type !== chartType) {\n          return \"<div class=\\\"apexcharts-custom-tooltip\\\">\\n          \".concat(w.config.series[seriesIndex].name ? w.config.series[seriesIndex].name : 'series-' + (seriesIndex + 1), \": <strong>\").concat(w.globals.series[seriesIndex][dataPointIndex], \"</strong>\\n        </div>\");\n        } else {\n          return \"<div class=\\\"apexcharts-tooltip-box apexcharts-tooltip-\".concat(w.config.chart.type, \"\\\">\") + \"<div>\".concat(labels[0], \": <span class=\\\"value\\\">\") + o + '</span></div>' + \"<div>\".concat(labels[1], \": <span class=\\\"value\\\">\") + h + '</span></div>' + (m ? \"<div>\".concat(labels[2], \": <span class=\\\"value\\\">\") + m + '</span></div>' : '') + \"<div>\".concat(labels[3], \": <span class=\\\"value\\\">\") + l + '</span></div>' + \"<div>\".concat(labels[4], \": <span class=\\\"value\\\">\") + c + '</span></div>' + '</div>';\n        }\n      }\n    }]);\n\n    return Defaults;\n  }();\n\n  /**\n   * ApexCharts Config Class for extending user options with pre-defined ApexCharts config.\n   *\n   * @module Config\n   **/\n\n  var Config = /*#__PURE__*/function () {\n    function Config(opts) {\n      _classCallCheck(this, Config);\n\n      this.opts = opts;\n    }\n\n    _createClass(Config, [{\n      key: \"init\",\n      value: function init(_ref) {\n        var responsiveOverride = _ref.responsiveOverride;\n        var opts = this.opts;\n        var options = new Options();\n        var defaults = new Defaults(opts);\n        this.chartType = opts.chart.type;\n        opts = this.extendYAxis(opts);\n        opts = this.extendAnnotations(opts);\n        var config = options.init();\n        var newDefaults = {};\n\n        if (opts && _typeof(opts) === 'object') {\n          var _opts$plotOptions, _opts$plotOptions$bar, _opts$chart$brush, _opts$plotOptions2, _opts$plotOptions2$ba, _opts$chart$sparkline, _window$Apex$chart, _window$Apex$chart$sp;\n\n          var chartDefaults = {};\n          var chartTypes = ['line', 'area', 'bar', 'candlestick', 'boxPlot', 'rangeBar', 'rangeArea', 'bubble', 'scatter', 'heatmap', 'treemap', 'pie', 'polarArea', 'donut', 'radar', 'radialBar'];\n\n          if (chartTypes.indexOf(opts.chart.type) !== -1) {\n            chartDefaults = defaults[opts.chart.type]();\n          } else {\n            chartDefaults = defaults.line();\n          }\n\n          if ((_opts$plotOptions = opts.plotOptions) !== null && _opts$plotOptions !== void 0 && (_opts$plotOptions$bar = _opts$plotOptions.bar) !== null && _opts$plotOptions$bar !== void 0 && _opts$plotOptions$bar.isFunnel) {\n            chartDefaults = defaults.funnel();\n          }\n\n          if (opts.chart.stacked && opts.chart.type === 'bar') {\n            chartDefaults = defaults.stackedBars();\n          }\n\n          if ((_opts$chart$brush = opts.chart.brush) !== null && _opts$chart$brush !== void 0 && _opts$chart$brush.enabled) {\n            chartDefaults = defaults.brush(chartDefaults);\n          }\n\n          if (opts.chart.stacked && opts.chart.stackType === '100%') {\n            opts = defaults.stacked100(opts);\n          }\n\n          if ((_opts$plotOptions2 = opts.plotOptions) !== null && _opts$plotOptions2 !== void 0 && (_opts$plotOptions2$ba = _opts$plotOptions2.bar) !== null && _opts$plotOptions2$ba !== void 0 && _opts$plotOptions2$ba.isDumbbell) {\n            opts = defaults.dumbbell(opts);\n          } // If user has specified a dark theme, make the tooltip dark too\n\n\n          this.checkForDarkTheme(window.Apex); // check global window Apex options\n\n          this.checkForDarkTheme(opts); // check locally passed options\n\n          opts.xaxis = opts.xaxis || window.Apex.xaxis || {}; // an important boolean needs to be set here\n          // otherwise all the charts will have this flag set to true window.Apex.xaxis is set globally\n\n          if (!responsiveOverride) {\n            opts.xaxis.convertedCatToNumeric = false;\n          }\n\n          opts = this.checkForCatToNumericXAxis(this.chartType, chartDefaults, opts);\n\n          if ((_opts$chart$sparkline = opts.chart.sparkline) !== null && _opts$chart$sparkline !== void 0 && _opts$chart$sparkline.enabled || (_window$Apex$chart = window.Apex.chart) !== null && _window$Apex$chart !== void 0 && (_window$Apex$chart$sp = _window$Apex$chart.sparkline) !== null && _window$Apex$chart$sp !== void 0 && _window$Apex$chart$sp.enabled) {\n            chartDefaults = defaults.sparkline(chartDefaults);\n          }\n\n          newDefaults = Utils$1.extend(config, chartDefaults);\n        } // config should cascade in this fashion\n        // default-config < global-apex-variable-config < user-defined-config\n        // get GLOBALLY defined options and merge with the default config\n\n\n        var mergedWithDefaultConfig = Utils$1.extend(newDefaults, window.Apex); // get the merged config and extend with user defined config\n\n        config = Utils$1.extend(mergedWithDefaultConfig, opts); // some features are not supported. those mismatches should be handled\n\n        config = this.handleUserInputErrors(config);\n        return config;\n      }\n    }, {\n      key: \"checkForCatToNumericXAxis\",\n      value: function checkForCatToNumericXAxis(chartType, chartDefaults, opts) {\n        var _opts$plotOptions3, _opts$plotOptions3$ba;\n\n        var defaults = new Defaults(opts);\n        var isBarHorizontal = (chartType === 'bar' || chartType === 'boxPlot') && ((_opts$plotOptions3 = opts.plotOptions) === null || _opts$plotOptions3 === void 0 ? void 0 : (_opts$plotOptions3$ba = _opts$plotOptions3.bar) === null || _opts$plotOptions3$ba === void 0 ? void 0 : _opts$plotOptions3$ba.horizontal);\n        var unsupportedZoom = chartType === 'pie' || chartType === 'polarArea' || chartType === 'donut' || chartType === 'radar' || chartType === 'radialBar' || chartType === 'heatmap';\n        var notNumericXAxis = opts.xaxis.type !== 'datetime' && opts.xaxis.type !== 'numeric';\n        var tickPlacement = opts.xaxis.tickPlacement ? opts.xaxis.tickPlacement : chartDefaults.xaxis && chartDefaults.xaxis.tickPlacement;\n\n        if (!isBarHorizontal && !unsupportedZoom && notNumericXAxis && tickPlacement !== 'between') {\n          opts = defaults.convertCatToNumeric(opts);\n        }\n\n        return opts;\n      }\n    }, {\n      key: \"extendYAxis\",\n      value: function extendYAxis(opts, w) {\n        var options = new Options();\n\n        if (typeof opts.yaxis === 'undefined' || !opts.yaxis || Array.isArray(opts.yaxis) && opts.yaxis.length === 0) {\n          opts.yaxis = {};\n        } // extend global yaxis config (only if object is provided / not an array)\n\n\n        if (opts.yaxis.constructor !== Array && window.Apex.yaxis && window.Apex.yaxis.constructor !== Array) {\n          opts.yaxis = Utils$1.extend(opts.yaxis, window.Apex.yaxis);\n        } // as we can't extend nested object's array with extend, we need to do it first\n        // user can provide either an array or object in yaxis config\n\n\n        if (opts.yaxis.constructor !== Array) {\n          // convert the yaxis to array if user supplied object\n          opts.yaxis = [Utils$1.extend(options.yAxis, opts.yaxis)];\n        } else {\n          opts.yaxis = Utils$1.extendArray(opts.yaxis, options.yAxis);\n        }\n\n        var isLogY = false;\n        opts.yaxis.forEach(function (y) {\n          if (y.logarithmic) {\n            isLogY = true;\n          }\n        });\n        var series = opts.series;\n\n        if (w && !series) {\n          series = w.config.series;\n        } // A logarithmic chart works correctly when each series has a corresponding y-axis\n        // If this is not the case, we manually create yaxis for multi-series log chart\n\n\n        if (isLogY && series.length !== opts.yaxis.length && series.length) {\n          opts.yaxis = series.map(function (s, i) {\n            if (!s.name) {\n              series[i].name = \"series-\".concat(i + 1);\n            }\n\n            if (opts.yaxis[i]) {\n              opts.yaxis[i].seriesName = series[i].name;\n              return opts.yaxis[i];\n            } else {\n              var newYaxis = Utils$1.extend(options.yAxis, opts.yaxis[0]);\n              newYaxis.show = false;\n              return newYaxis;\n            }\n          });\n        }\n\n        if (isLogY && series.length > 1 && series.length !== opts.yaxis.length) {\n          console.warn('A multi-series logarithmic chart should have equal number of series and y-axes. Please make sure to equalize both.');\n        }\n\n        return opts;\n      } // annotations also accepts array, so we need to extend them manually\n\n    }, {\n      key: \"extendAnnotations\",\n      value: function extendAnnotations(opts) {\n        if (typeof opts.annotations === 'undefined') {\n          opts.annotations = {};\n          opts.annotations.yaxis = [];\n          opts.annotations.xaxis = [];\n          opts.annotations.points = [];\n        }\n\n        opts = this.extendYAxisAnnotations(opts);\n        opts = this.extendXAxisAnnotations(opts);\n        opts = this.extendPointAnnotations(opts);\n        return opts;\n      }\n    }, {\n      key: \"extendYAxisAnnotations\",\n      value: function extendYAxisAnnotations(opts) {\n        var options = new Options();\n        opts.annotations.yaxis = Utils$1.extendArray(typeof opts.annotations.yaxis !== 'undefined' ? opts.annotations.yaxis : [], options.yAxisAnnotation);\n        return opts;\n      }\n    }, {\n      key: \"extendXAxisAnnotations\",\n      value: function extendXAxisAnnotations(opts) {\n        var options = new Options();\n        opts.annotations.xaxis = Utils$1.extendArray(typeof opts.annotations.xaxis !== 'undefined' ? opts.annotations.xaxis : [], options.xAxisAnnotation);\n        return opts;\n      }\n    }, {\n      key: \"extendPointAnnotations\",\n      value: function extendPointAnnotations(opts) {\n        var options = new Options();\n        opts.annotations.points = Utils$1.extendArray(typeof opts.annotations.points !== 'undefined' ? opts.annotations.points : [], options.pointAnnotation);\n        return opts;\n      }\n    }, {\n      key: \"checkForDarkTheme\",\n      value: function checkForDarkTheme(opts) {\n        if (opts.theme && opts.theme.mode === 'dark') {\n          if (!opts.tooltip) {\n            opts.tooltip = {};\n          }\n\n          if (opts.tooltip.theme !== 'light') {\n            opts.tooltip.theme = 'dark';\n          }\n\n          if (!opts.chart.foreColor) {\n            opts.chart.foreColor = '#f6f7f8';\n          }\n\n          if (!opts.chart.background) {\n            opts.chart.background = '#424242';\n          }\n\n          if (!opts.theme.palette) {\n            opts.theme.palette = 'palette4';\n          }\n        }\n      }\n    }, {\n      key: \"handleUserInputErrors\",\n      value: function handleUserInputErrors(opts) {\n        var config = opts; // conflicting tooltip option. intersect makes sure to focus on 1 point at a time. Shared cannot be used along with it\n\n        if (config.tooltip.shared && config.tooltip.intersect) {\n          throw new Error('tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.');\n        }\n\n        if (config.chart.type === 'bar' && config.plotOptions.bar.horizontal) {\n          // No multiple yaxis for bars\n          if (config.yaxis.length > 1) {\n            throw new Error('Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false');\n          } // if yaxis is reversed in horizontal bar chart, you should draw the y-axis on right side\n\n\n          if (config.yaxis[0].reversed) {\n            config.yaxis[0].opposite = true;\n          }\n\n          config.xaxis.tooltip.enabled = false; // no xaxis tooltip for horizontal bar\n\n          config.yaxis[0].tooltip.enabled = false; // no xaxis tooltip for horizontal bar\n\n          config.chart.zoom.enabled = false; // no zooming for horz bars\n        }\n\n        if (config.chart.type === 'bar' || config.chart.type === 'rangeBar') {\n          if (config.tooltip.shared) {\n            if (config.xaxis.crosshairs.width === 'barWidth' && config.series.length > 1) {\n              config.xaxis.crosshairs.width = 'tickWidth';\n            }\n          }\n        }\n\n        if (config.chart.type === 'candlestick' || config.chart.type === 'boxPlot') {\n          if (config.yaxis[0].reversed) {\n            console.warn(\"Reversed y-axis in \".concat(config.chart.type, \" chart is not supported.\"));\n            config.yaxis[0].reversed = false;\n          }\n        }\n\n        return config;\n      }\n    }]);\n\n    return Config;\n  }();\n\n  var Globals = /*#__PURE__*/function () {\n    function Globals() {\n      _classCallCheck(this, Globals);\n    }\n\n    _createClass(Globals, [{\n      key: \"initGlobalVars\",\n      value: function initGlobalVars(gl) {\n        gl.series = []; // the MAIN series array (y values)\n\n        gl.seriesCandleO = [];\n        gl.seriesCandleH = [];\n        gl.seriesCandleM = [];\n        gl.seriesCandleL = [];\n        gl.seriesCandleC = [];\n        gl.seriesRangeStart = [];\n        gl.seriesRangeEnd = [];\n        gl.seriesRange = [];\n        gl.seriesPercent = [];\n        gl.seriesGoals = [];\n        gl.seriesX = [];\n        gl.seriesZ = [];\n        gl.seriesNames = [];\n        gl.seriesTotals = [];\n        gl.seriesLog = [];\n        gl.seriesColors = [];\n        gl.stackedSeriesTotals = [];\n        gl.seriesXvalues = []; // we will need this in tooltip (it's x position)\n        // when we will have unequal x values, we will need\n        // some way to get x value depending on mouse pointer\n\n        gl.seriesYvalues = []; // we will need this when deciding which series\n        // user hovered on\n\n        gl.labels = [];\n        gl.hasXaxisGroups = false;\n        gl.groups = [];\n        gl.hasSeriesGroups = false;\n        gl.seriesGroups = [];\n        gl.categoryLabels = [];\n        gl.timescaleLabels = [];\n        gl.noLabelsProvided = false;\n        gl.resizeTimer = null;\n        gl.selectionResizeTimer = null;\n        gl.delayedElements = [];\n        gl.pointsArray = [];\n        gl.dataLabelsRects = [];\n        gl.isXNumeric = false;\n        gl.skipLastTimelinelabel = false;\n        gl.skipFirstTimelinelabel = false;\n        gl.isDataXYZ = false;\n        gl.isMultiLineX = false;\n        gl.isMultipleYAxis = false;\n        gl.maxY = -Number.MAX_VALUE;\n        gl.minY = Number.MIN_VALUE;\n        gl.minYArr = [];\n        gl.maxYArr = [];\n        gl.maxX = -Number.MAX_VALUE;\n        gl.minX = Number.MAX_VALUE;\n        gl.initialMaxX = -Number.MAX_VALUE;\n        gl.initialMinX = Number.MAX_VALUE;\n        gl.maxDate = 0;\n        gl.minDate = Number.MAX_VALUE;\n        gl.minZ = Number.MAX_VALUE;\n        gl.maxZ = -Number.MAX_VALUE;\n        gl.minXDiff = Number.MAX_VALUE;\n        gl.yAxisScale = [];\n        gl.xAxisScale = null;\n        gl.xAxisTicksPositions = [];\n        gl.yLabelsCoords = [];\n        gl.yTitleCoords = [];\n        gl.barPadForNumericAxis = 0;\n        gl.padHorizontal = 0;\n        gl.xRange = 0;\n        gl.yRange = [];\n        gl.zRange = 0;\n        gl.dataPoints = 0;\n        gl.xTickAmount = 0;\n      }\n    }, {\n      key: \"globalVars\",\n      value: function globalVars(config) {\n        return {\n          chartID: null,\n          // chart ID - apexcharts-cuid\n          cuid: null,\n          // chart ID - random numbers excluding \"apexcharts\" part\n          events: {\n            beforeMount: [],\n            mounted: [],\n            updated: [],\n            clicked: [],\n            selection: [],\n            dataPointSelection: [],\n            zoomed: [],\n            scrolled: []\n          },\n          colors: [],\n          clientX: null,\n          clientY: null,\n          fill: {\n            colors: []\n          },\n          stroke: {\n            colors: []\n          },\n          dataLabels: {\n            style: {\n              colors: []\n            }\n          },\n          radarPolygons: {\n            fill: {\n              colors: []\n            }\n          },\n          markers: {\n            colors: [],\n            size: config.markers.size,\n            largestSize: 0\n          },\n          animationEnded: false,\n          isTouchDevice: 'ontouchstart' in window || navigator.msMaxTouchPoints,\n          isDirty: false,\n          // chart has been updated after the initial render. This is different than dataChanged property. isDirty means user manually called some method to update\n          isExecCalled: false,\n          // whether user updated the chart through the exec method\n          initialConfig: null,\n          // we will store the first config user has set to go back when user finishes interactions like zooming and come out of it\n          initialSeries: [],\n          lastXAxis: [],\n          lastYAxis: [],\n          columnSeries: null,\n          labels: [],\n          // store the text to draw on x axis\n          // Don't mutate the labels, many things including tooltips depends on it!\n          timescaleLabels: [],\n          // store the timescaleLabels Labels in another variable\n          noLabelsProvided: false,\n          // if user didn't provide any categories/labels or x values, fallback to 1,2,3,4...\n          allSeriesCollapsed: false,\n          collapsedSeries: [],\n          // when user collapses a series, it goes into this array\n          collapsedSeriesIndices: [],\n          // this stores the index of the collapsedSeries instead of whole object for quick access\n          ancillaryCollapsedSeries: [],\n          // when user collapses an \"alwaysVisible\" series, it goes into this array\n          ancillaryCollapsedSeriesIndices: [],\n          // this stores the index of the ancillaryCollapsedSeries whose y-axis is always visible\n          risingSeries: [],\n          // when user re-opens a collapsed series, it goes here\n          dataFormatXNumeric: false,\n          // boolean value to indicate user has passed numeric x values\n          capturedSeriesIndex: -1,\n          capturedDataPointIndex: -1,\n          selectedDataPoints: [],\n          goldenPadding: 35,\n          // this value is used at a lot of places for spacing purpose\n          invalidLogScale: false,\n          // if a user enabled log scale but the data provided is not valid to generate a log scale, turn on this flag\n          ignoreYAxisIndexes: [],\n          // when series are being collapsed in multiple y axes, ignore certain index\n          yAxisSameScaleIndices: [],\n          maxValsInArrayIndex: 0,\n          radialSize: 0,\n          selection: undefined,\n          zoomEnabled: config.chart.toolbar.autoSelected === 'zoom' && config.chart.toolbar.tools.zoom && config.chart.zoom.enabled,\n          panEnabled: config.chart.toolbar.autoSelected === 'pan' && config.chart.toolbar.tools.pan,\n          selectionEnabled: config.chart.toolbar.autoSelected === 'selection' && config.chart.toolbar.tools.selection,\n          yaxis: null,\n          mousedown: false,\n          lastClientPosition: {},\n          // don't reset this variable this the chart is destroyed. It is used to detect right or left mousemove in panning\n          visibleXRange: undefined,\n          yValueDecimal: 0,\n          // are there floating numbers in the series. If yes, this represent the len of the decimals\n          total: 0,\n          SVGNS: 'http://www.w3.org/2000/svg',\n          // svg namespace\n          svgWidth: 0,\n          // the whole svg width\n          svgHeight: 0,\n          // the whole svg height\n          noData: false,\n          // whether there is any data to display or not\n          locale: {},\n          // the current locale values will be preserved here for global access\n          dom: {},\n          // for storing all dom nodes in this particular property\n          memory: {\n            methodsToExec: []\n          },\n          shouldAnimate: true,\n          skipLastTimelinelabel: false,\n          // when last label is cropped, skip drawing it\n          skipFirstTimelinelabel: false,\n          // when first label is cropped, skip drawing it\n          delayedElements: [],\n          // element which appear after animation has finished\n          axisCharts: true,\n          // chart type = line or area or bar\n          // (refer them also as plot charts in the code)\n          isDataXYZ: false,\n          // bool: data was provided in a {[x,y,z]} pattern\n          resized: false,\n          // bool: user has resized\n          resizeTimer: null,\n          // timeout function to make a small delay before\n          // drawing when user resized\n          comboCharts: false,\n          // bool: whether it's a combination of line/column\n          dataChanged: false,\n          // bool: has data changed dynamically\n          previousPaths: [],\n          // array: when data is changed, it will animate from\n          // previous paths\n          allSeriesHasEqualX: true,\n          pointsArray: [],\n          // store the points positions here to draw later on hover\n          // format is - [[x,y],[x,y]... [x,y]]\n          dataLabelsRects: [],\n          // store the positions of datalabels to prevent collision\n          lastDrawnDataLabelsIndexes: [],\n          hasNullValues: false,\n          // bool: whether series contains null values\n          easing: null,\n          // function: animation effect to apply\n          zoomed: false,\n          // whether user has zoomed or not\n          gridWidth: 0,\n          // drawable width of actual graphs (series paths)\n          gridHeight: 0,\n          // drawable height of actual graphs (series paths)\n          rotateXLabels: false,\n          defaultLabels: false,\n          xLabelFormatter: undefined,\n          // formatter for x axis labels\n          yLabelFormatters: [],\n          xaxisTooltipFormatter: undefined,\n          // formatter for x axis tooltip\n          ttKeyFormatter: undefined,\n          ttVal: undefined,\n          ttZFormatter: undefined,\n          LINE_HEIGHT_RATIO: 1.618,\n          xAxisLabelsHeight: 0,\n          xAxisGroupLabelsHeight: 0,\n          xAxisLabelsWidth: 0,\n          yAxisLabelsWidth: 0,\n          scaleX: 1,\n          scaleY: 1,\n          translateX: 0,\n          translateY: 0,\n          translateYAxisX: [],\n          yAxisWidths: [],\n          translateXAxisY: 0,\n          translateXAxisX: 0,\n          tooltip: null\n        };\n      }\n    }, {\n      key: \"init\",\n      value: function init(config) {\n        var globals = this.globalVars(config);\n        this.initGlobalVars(globals);\n        globals.initialConfig = Utils$1.extend({}, config);\n        globals.initialSeries = Utils$1.clone(config.series);\n        globals.lastXAxis = Utils$1.clone(globals.initialConfig.xaxis);\n        globals.lastYAxis = Utils$1.clone(globals.initialConfig.yaxis);\n        return globals;\n      }\n    }]);\n\n    return Globals;\n  }();\n\n  /**\n   * ApexCharts Base Class for extending user options with pre-defined ApexCharts config.\n   *\n   * @module Base\n   **/\n\n  var Base = /*#__PURE__*/function () {\n    function Base(opts) {\n      _classCallCheck(this, Base);\n\n      this.opts = opts;\n    }\n\n    _createClass(Base, [{\n      key: \"init\",\n      value: function init() {\n        var config = new Config(this.opts).init({\n          responsiveOverride: false\n        });\n        var globals = new Globals().init(config);\n        var w = {\n          config: config,\n          globals: globals\n        };\n        return w;\n      }\n    }]);\n\n    return Base;\n  }();\n\n  /**\n   * ApexCharts Fill Class for setting fill options of the paths.\n   *\n   * @module Fill\n   **/\n\n  var Fill = /*#__PURE__*/function () {\n    function Fill(ctx) {\n      _classCallCheck(this, Fill);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.opts = null;\n      this.seriesIndex = 0;\n    }\n\n    _createClass(Fill, [{\n      key: \"clippedImgArea\",\n      value: function clippedImgArea(params) {\n        var w = this.w;\n        var cnf = w.config;\n        var svgW = parseInt(w.globals.gridWidth, 10);\n        var svgH = parseInt(w.globals.gridHeight, 10);\n        var size = svgW > svgH ? svgW : svgH;\n        var fillImg = params.image;\n        var imgWidth = 0;\n        var imgHeight = 0;\n\n        if (typeof params.width === 'undefined' && typeof params.height === 'undefined') {\n          if (cnf.fill.image.width !== undefined && cnf.fill.image.height !== undefined) {\n            imgWidth = cnf.fill.image.width + 1;\n            imgHeight = cnf.fill.image.height;\n          } else {\n            imgWidth = size + 1;\n            imgHeight = size;\n          }\n        } else {\n          imgWidth = params.width;\n          imgHeight = params.height;\n        }\n\n        var elPattern = document.createElementNS(w.globals.SVGNS, 'pattern');\n        Graphics.setAttrs(elPattern, {\n          id: params.patternID,\n          patternUnits: params.patternUnits ? params.patternUnits : 'userSpaceOnUse',\n          width: imgWidth + 'px',\n          height: imgHeight + 'px'\n        });\n        var elImage = document.createElementNS(w.globals.SVGNS, 'image');\n        elPattern.appendChild(elImage);\n        elImage.setAttributeNS(window.SVG.xlink, 'href', fillImg);\n        Graphics.setAttrs(elImage, {\n          x: 0,\n          y: 0,\n          preserveAspectRatio: 'none',\n          width: imgWidth + 'px',\n          height: imgHeight + 'px'\n        });\n        elImage.style.opacity = params.opacity;\n        w.globals.dom.elDefs.node.appendChild(elPattern);\n      }\n    }, {\n      key: \"getSeriesIndex\",\n      value: function getSeriesIndex(opts) {\n        var w = this.w;\n        var cType = w.config.chart.type;\n\n        if ((cType === 'bar' || cType === 'rangeBar') && w.config.plotOptions.bar.distributed || cType === 'heatmap' || cType === 'treemap') {\n          this.seriesIndex = opts.seriesNumber;\n        } else {\n          this.seriesIndex = opts.seriesNumber % w.globals.series.length;\n        }\n\n        return this.seriesIndex;\n      }\n    }, {\n      key: \"fillPath\",\n      value: function fillPath(opts) {\n        var w = this.w;\n        this.opts = opts;\n        var cnf = this.w.config;\n        var pathFill;\n        var patternFill, gradientFill;\n        this.seriesIndex = this.getSeriesIndex(opts);\n        var fillColors = this.getFillColors();\n        var fillColor = fillColors[this.seriesIndex]; //override fillcolor if user inputted color with data\n\n        if (w.globals.seriesColors[this.seriesIndex] !== undefined) {\n          fillColor = w.globals.seriesColors[this.seriesIndex];\n        }\n\n        if (typeof fillColor === 'function') {\n          fillColor = fillColor({\n            seriesIndex: this.seriesIndex,\n            dataPointIndex: opts.dataPointIndex,\n            value: opts.value,\n            w: w\n          });\n        }\n\n        var fillType = opts.fillType ? opts.fillType : this.getFillType(this.seriesIndex);\n        var fillOpacity = Array.isArray(cnf.fill.opacity) ? cnf.fill.opacity[this.seriesIndex] : cnf.fill.opacity;\n\n        if (opts.color) {\n          fillColor = opts.color;\n        }\n\n        var defaultColor = fillColor;\n\n        if (fillColor.indexOf('rgb') === -1) {\n          if (fillColor.length < 9) {\n            // if the hex contains alpha and is of 9 digit, skip the opacity\n            defaultColor = Utils$1.hexToRgba(fillColor, fillOpacity);\n          }\n        } else {\n          if (fillColor.indexOf('rgba') > -1) {\n            fillOpacity = Utils$1.getOpacityFromRGBA(fillColor);\n          }\n        }\n\n        if (opts.opacity) fillOpacity = opts.opacity;\n\n        if (fillType === 'pattern') {\n          patternFill = this.handlePatternFill({\n            fillConfig: opts.fillConfig,\n            patternFill: patternFill,\n            fillColor: fillColor,\n            fillOpacity: fillOpacity,\n            defaultColor: defaultColor\n          });\n        }\n\n        if (fillType === 'gradient') {\n          gradientFill = this.handleGradientFill({\n            fillConfig: opts.fillConfig,\n            fillColor: fillColor,\n            fillOpacity: fillOpacity,\n            i: this.seriesIndex\n          });\n        }\n\n        if (fillType === 'image') {\n          var imgSrc = cnf.fill.image.src;\n          var patternID = opts.patternID ? opts.patternID : '';\n          this.clippedImgArea({\n            opacity: fillOpacity,\n            image: Array.isArray(imgSrc) ? opts.seriesNumber < imgSrc.length ? imgSrc[opts.seriesNumber] : imgSrc[0] : imgSrc,\n            width: opts.width ? opts.width : undefined,\n            height: opts.height ? opts.height : undefined,\n            patternUnits: opts.patternUnits,\n            patternID: \"pattern\".concat(w.globals.cuid).concat(opts.seriesNumber + 1).concat(patternID)\n          });\n          pathFill = \"url(#pattern\".concat(w.globals.cuid).concat(opts.seriesNumber + 1).concat(patternID, \")\");\n        } else if (fillType === 'gradient') {\n          pathFill = gradientFill;\n        } else if (fillType === 'pattern') {\n          pathFill = patternFill;\n        } else {\n          pathFill = defaultColor;\n        } // override pattern/gradient if opts.solid is true\n\n\n        if (opts.solid) {\n          pathFill = defaultColor;\n        }\n\n        return pathFill;\n      }\n    }, {\n      key: \"getFillType\",\n      value: function getFillType(seriesIndex) {\n        var w = this.w;\n\n        if (Array.isArray(w.config.fill.type)) {\n          return w.config.fill.type[seriesIndex];\n        } else {\n          return w.config.fill.type;\n        }\n      }\n    }, {\n      key: \"getFillColors\",\n      value: function getFillColors() {\n        var w = this.w;\n        var cnf = w.config;\n        var opts = this.opts;\n        var fillColors = [];\n\n        if (w.globals.comboCharts) {\n          if (w.config.series[this.seriesIndex].type === 'line') {\n            if (Array.isArray(w.globals.stroke.colors)) {\n              fillColors = w.globals.stroke.colors;\n            } else {\n              fillColors.push(w.globals.stroke.colors);\n            }\n          } else {\n            if (Array.isArray(w.globals.fill.colors)) {\n              fillColors = w.globals.fill.colors;\n            } else {\n              fillColors.push(w.globals.fill.colors);\n            }\n          }\n        } else {\n          if (cnf.chart.type === 'line') {\n            if (Array.isArray(w.globals.stroke.colors)) {\n              fillColors = w.globals.stroke.colors;\n            } else {\n              fillColors.push(w.globals.stroke.colors);\n            }\n          } else {\n            if (Array.isArray(w.globals.fill.colors)) {\n              fillColors = w.globals.fill.colors;\n            } else {\n              fillColors.push(w.globals.fill.colors);\n            }\n          }\n        } // colors passed in arguments\n\n\n        if (typeof opts.fillColors !== 'undefined') {\n          fillColors = [];\n\n          if (Array.isArray(opts.fillColors)) {\n            fillColors = opts.fillColors.slice();\n          } else {\n            fillColors.push(opts.fillColors);\n          }\n        }\n\n        return fillColors;\n      }\n    }, {\n      key: \"handlePatternFill\",\n      value: function handlePatternFill(_ref) {\n        var fillConfig = _ref.fillConfig,\n            patternFill = _ref.patternFill,\n            fillColor = _ref.fillColor,\n            fillOpacity = _ref.fillOpacity,\n            defaultColor = _ref.defaultColor;\n        var fillCnf = this.w.config.fill;\n\n        if (fillConfig) {\n          fillCnf = fillConfig;\n        }\n\n        var opts = this.opts;\n        var graphics = new Graphics(this.ctx);\n        var patternStrokeWidth = Array.isArray(fillCnf.pattern.strokeWidth) ? fillCnf.pattern.strokeWidth[this.seriesIndex] : fillCnf.pattern.strokeWidth;\n        var patternLineColor = fillColor;\n\n        if (Array.isArray(fillCnf.pattern.style)) {\n          if (typeof fillCnf.pattern.style[opts.seriesNumber] !== 'undefined') {\n            var pf = graphics.drawPattern(fillCnf.pattern.style[opts.seriesNumber], fillCnf.pattern.width, fillCnf.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity);\n            patternFill = pf;\n          } else {\n            patternFill = defaultColor;\n          }\n        } else {\n          patternFill = graphics.drawPattern(fillCnf.pattern.style, fillCnf.pattern.width, fillCnf.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity);\n        }\n\n        return patternFill;\n      }\n    }, {\n      key: \"handleGradientFill\",\n      value: function handleGradientFill(_ref2) {\n        var fillColor = _ref2.fillColor,\n            fillOpacity = _ref2.fillOpacity,\n            fillConfig = _ref2.fillConfig,\n            i = _ref2.i;\n        var fillCnf = this.w.config.fill;\n\n        if (fillConfig) {\n          fillCnf = _objectSpread2(_objectSpread2({}, fillCnf), fillConfig);\n        }\n\n        var opts = this.opts;\n        var graphics = new Graphics(this.ctx);\n        var utils = new Utils$1();\n        var type = fillCnf.gradient.type;\n        var gradientFrom = fillColor;\n        var gradientTo;\n        var opacityFrom = fillCnf.gradient.opacityFrom === undefined ? fillOpacity : Array.isArray(fillCnf.gradient.opacityFrom) ? fillCnf.gradient.opacityFrom[i] : fillCnf.gradient.opacityFrom;\n\n        if (gradientFrom.indexOf('rgba') > -1) {\n          opacityFrom = Utils$1.getOpacityFromRGBA(gradientFrom);\n        }\n\n        var opacityTo = fillCnf.gradient.opacityTo === undefined ? fillOpacity : Array.isArray(fillCnf.gradient.opacityTo) ? fillCnf.gradient.opacityTo[i] : fillCnf.gradient.opacityTo;\n\n        if (fillCnf.gradient.gradientToColors === undefined || fillCnf.gradient.gradientToColors.length === 0) {\n          if (fillCnf.gradient.shade === 'dark') {\n            gradientTo = utils.shadeColor(parseFloat(fillCnf.gradient.shadeIntensity) * -1, fillColor.indexOf('rgb') > -1 ? Utils$1.rgb2hex(fillColor) : fillColor);\n          } else {\n            gradientTo = utils.shadeColor(parseFloat(fillCnf.gradient.shadeIntensity), fillColor.indexOf('rgb') > -1 ? Utils$1.rgb2hex(fillColor) : fillColor);\n          }\n        } else {\n          if (fillCnf.gradient.gradientToColors[opts.seriesNumber]) {\n            var gToColor = fillCnf.gradient.gradientToColors[opts.seriesNumber];\n            gradientTo = gToColor;\n\n            if (gToColor.indexOf('rgba') > -1) {\n              opacityTo = Utils$1.getOpacityFromRGBA(gToColor);\n            }\n          } else {\n            gradientTo = fillColor;\n          }\n        }\n\n        if (fillCnf.gradient.gradientFrom) {\n          gradientFrom = fillCnf.gradient.gradientFrom;\n        }\n\n        if (fillCnf.gradient.gradientTo) {\n          gradientTo = fillCnf.gradient.gradientTo;\n        }\n\n        if (fillCnf.gradient.inverseColors) {\n          var t = gradientFrom;\n          gradientFrom = gradientTo;\n          gradientTo = t;\n        }\n\n        if (gradientFrom.indexOf('rgb') > -1) {\n          gradientFrom = Utils$1.rgb2hex(gradientFrom);\n        }\n\n        if (gradientTo.indexOf('rgb') > -1) {\n          gradientTo = Utils$1.rgb2hex(gradientTo);\n        }\n\n        return graphics.drawGradient(type, gradientFrom, gradientTo, opacityFrom, opacityTo, opts.size, fillCnf.gradient.stops, fillCnf.gradient.colorStops, i);\n      }\n    }]);\n\n    return Fill;\n  }();\n\n  /**\n   * ApexCharts Markers Class for drawing points on y values in axes charts.\n   *\n   * @module Markers\n   **/\n\n  var Markers = /*#__PURE__*/function () {\n    function Markers(ctx, opts) {\n      _classCallCheck(this, Markers);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(Markers, [{\n      key: \"setGlobalMarkerSize\",\n      value: function setGlobalMarkerSize() {\n        var w = this.w;\n        w.globals.markers.size = Array.isArray(w.config.markers.size) ? w.config.markers.size : [w.config.markers.size];\n\n        if (w.globals.markers.size.length > 0) {\n          if (w.globals.markers.size.length < w.globals.series.length + 1) {\n            for (var i = 0; i <= w.globals.series.length; i++) {\n              if (typeof w.globals.markers.size[i] === 'undefined') {\n                w.globals.markers.size.push(w.globals.markers.size[0]);\n              }\n            }\n          }\n        } else {\n          w.globals.markers.size = w.config.series.map(function (s) {\n            return w.config.markers.size;\n          });\n        }\n      }\n    }, {\n      key: \"plotChartMarkers\",\n      value: function plotChartMarkers(pointsPos, seriesIndex, j, pSize) {\n        var alwaysDrawMarker = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n        var w = this.w;\n        var i = seriesIndex;\n        var p = pointsPos;\n        var elPointsWrap = null;\n        var graphics = new Graphics(this.ctx);\n        var point;\n        var hasDiscreteMarkers = w.config.markers.discrete && w.config.markers.discrete.length;\n\n        if (w.globals.markers.size[seriesIndex] > 0 || alwaysDrawMarker || hasDiscreteMarkers) {\n          elPointsWrap = graphics.group({\n            class: alwaysDrawMarker || hasDiscreteMarkers ? '' : 'apexcharts-series-markers'\n          });\n          elPointsWrap.attr('clip-path', \"url(#gridRectMarkerMask\".concat(w.globals.cuid, \")\"));\n        }\n\n        if (Array.isArray(p.x)) {\n          for (var q = 0; q < p.x.length; q++) {\n            var dataPointIndex = j; // a small hack as we have 2 points for the first val to connect it\n\n            if (j === 1 && q === 0) dataPointIndex = 0;\n            if (j === 1 && q === 1) dataPointIndex = 1;\n            var PointClasses = 'apexcharts-marker';\n\n            if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) {\n              PointClasses += ' no-pointer-events';\n            }\n\n            var shouldMarkerDraw = Array.isArray(w.config.markers.size) ? w.globals.markers.size[seriesIndex] > 0 : w.config.markers.size > 0;\n\n            if (shouldMarkerDraw || alwaysDrawMarker || hasDiscreteMarkers) {\n              if (Utils$1.isNumber(p.y[q])) {\n                PointClasses += \" w\".concat(Utils$1.randomId());\n              } else {\n                PointClasses = 'apexcharts-nullpoint';\n              }\n\n              var opts = this.getMarkerConfig({\n                cssClass: PointClasses,\n                seriesIndex: seriesIndex,\n                dataPointIndex: dataPointIndex\n              });\n\n              if (w.config.series[i].data[dataPointIndex]) {\n                if (w.config.series[i].data[dataPointIndex].fillColor) {\n                  opts.pointFillColor = w.config.series[i].data[dataPointIndex].fillColor;\n                }\n\n                if (w.config.series[i].data[dataPointIndex].strokeColor) {\n                  opts.pointStrokeColor = w.config.series[i].data[dataPointIndex].strokeColor;\n                }\n              }\n\n              if (pSize) {\n                opts.pSize = pSize;\n              }\n\n              if (p.x[q] < 0 || p.x[q] > w.globals.gridWidth || p.y[q] < 0 || p.y[q] > w.globals.gridHeight) {\n                opts.pSize = 0;\n              }\n\n              point = graphics.drawMarker(p.x[q], p.y[q], opts);\n              point.attr('rel', dataPointIndex);\n              point.attr('j', dataPointIndex);\n              point.attr('index', seriesIndex);\n              point.node.setAttribute('default-marker-size', opts.pSize);\n              var filters = new Filters(this.ctx);\n              filters.setSelectionFilter(point, seriesIndex, dataPointIndex);\n              this.addEvents(point);\n\n              if (elPointsWrap) {\n                elPointsWrap.add(point);\n              }\n            } else {\n              // dynamic array creation - multidimensional\n              if (typeof w.globals.pointsArray[seriesIndex] === 'undefined') w.globals.pointsArray[seriesIndex] = [];\n              w.globals.pointsArray[seriesIndex].push([p.x[q], p.y[q]]);\n            }\n          }\n        }\n\n        return elPointsWrap;\n      }\n    }, {\n      key: \"getMarkerConfig\",\n      value: function getMarkerConfig(_ref) {\n        var cssClass = _ref.cssClass,\n            seriesIndex = _ref.seriesIndex,\n            _ref$dataPointIndex = _ref.dataPointIndex,\n            dataPointIndex = _ref$dataPointIndex === void 0 ? null : _ref$dataPointIndex,\n            _ref$finishRadius = _ref.finishRadius,\n            finishRadius = _ref$finishRadius === void 0 ? null : _ref$finishRadius;\n        var w = this.w;\n        var pStyle = this.getMarkerStyle(seriesIndex);\n        var pSize = w.globals.markers.size[seriesIndex];\n        var m = w.config.markers; // discrete markers is an option where user can specify a particular marker with different shape, size and color\n\n        if (dataPointIndex !== null && m.discrete.length) {\n          m.discrete.map(function (marker) {\n            if (marker.seriesIndex === seriesIndex && marker.dataPointIndex === dataPointIndex) {\n              pStyle.pointStrokeColor = marker.strokeColor;\n              pStyle.pointFillColor = marker.fillColor;\n              pSize = marker.size;\n              pStyle.pointShape = marker.shape;\n            }\n          });\n        }\n\n        return {\n          pSize: finishRadius === null ? pSize : finishRadius,\n          pRadius: m.radius,\n          width: Array.isArray(m.width) ? m.width[seriesIndex] : m.width,\n          height: Array.isArray(m.height) ? m.height[seriesIndex] : m.height,\n          pointStrokeWidth: Array.isArray(m.strokeWidth) ? m.strokeWidth[seriesIndex] : m.strokeWidth,\n          pointStrokeColor: pStyle.pointStrokeColor,\n          pointFillColor: pStyle.pointFillColor,\n          shape: pStyle.pointShape || (Array.isArray(m.shape) ? m.shape[seriesIndex] : m.shape),\n          class: cssClass,\n          pointStrokeOpacity: Array.isArray(m.strokeOpacity) ? m.strokeOpacity[seriesIndex] : m.strokeOpacity,\n          pointStrokeDashArray: Array.isArray(m.strokeDashArray) ? m.strokeDashArray[seriesIndex] : m.strokeDashArray,\n          pointFillOpacity: Array.isArray(m.fillOpacity) ? m.fillOpacity[seriesIndex] : m.fillOpacity,\n          seriesIndex: seriesIndex\n        };\n      }\n    }, {\n      key: \"addEvents\",\n      value: function addEvents(circle) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        circle.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this.ctx, circle));\n        circle.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this.ctx, circle));\n        circle.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this.ctx, circle));\n        circle.node.addEventListener('click', w.config.markers.onClick);\n        circle.node.addEventListener('dblclick', w.config.markers.onDblClick);\n        circle.node.addEventListener('touchstart', graphics.pathMouseDown.bind(this.ctx, circle), {\n          passive: true\n        });\n      }\n    }, {\n      key: \"getMarkerStyle\",\n      value: function getMarkerStyle(seriesIndex) {\n        var w = this.w;\n        var colors = w.globals.markers.colors;\n        var strokeColors = w.config.markers.strokeColor || w.config.markers.strokeColors;\n        var pointStrokeColor = Array.isArray(strokeColors) ? strokeColors[seriesIndex] : strokeColors;\n        var pointFillColor = Array.isArray(colors) ? colors[seriesIndex] : colors;\n        return {\n          pointStrokeColor: pointStrokeColor,\n          pointFillColor: pointFillColor\n        };\n      }\n    }]);\n\n    return Markers;\n  }();\n\n  /**\n   * ApexCharts Scatter Class.\n   * This Class also handles bubbles chart as currently there is no major difference in drawing them,\n   * @module Scatter\n   **/\n\n  var Scatter = /*#__PURE__*/function () {\n    function Scatter(ctx) {\n      _classCallCheck(this, Scatter);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.initialAnim = this.w.config.chart.animations.enabled;\n      this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n    }\n\n    _createClass(Scatter, [{\n      key: \"draw\",\n      value: function draw(elSeries, j, opts) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var realIndex = opts.realIndex;\n        var pointsPos = opts.pointsPos;\n        var zRatio = opts.zRatio;\n        var elPointsMain = opts.elParent;\n        var elPointsWrap = graphics.group({\n          class: \"apexcharts-series-markers apexcharts-series-\".concat(w.config.chart.type)\n        });\n        elPointsWrap.attr('clip-path', \"url(#gridRectMarkerMask\".concat(w.globals.cuid, \")\"));\n\n        if (Array.isArray(pointsPos.x)) {\n          for (var q = 0; q < pointsPos.x.length; q++) {\n            var dataPointIndex = j + 1;\n            var shouldDraw = true; // a small hack as we have 2 points for the first val to connect it\n\n            if (j === 0 && q === 0) dataPointIndex = 0;\n            if (j === 0 && q === 1) dataPointIndex = 1;\n            var radius = 0;\n            var finishRadius = w.globals.markers.size[realIndex];\n\n            if (zRatio !== Infinity) {\n              // means we have a bubble\n              var bubble = w.config.plotOptions.bubble;\n              finishRadius = w.globals.seriesZ[realIndex][dataPointIndex];\n\n              if (bubble.zScaling) {\n                finishRadius /= zRatio;\n              }\n\n              if (bubble.minBubbleRadius && finishRadius < bubble.minBubbleRadius) {\n                finishRadius = bubble.minBubbleRadius;\n              }\n\n              if (bubble.maxBubbleRadius && finishRadius > bubble.maxBubbleRadius) {\n                finishRadius = bubble.maxBubbleRadius;\n              }\n            }\n\n            if (!w.config.chart.animations.enabled) {\n              radius = finishRadius;\n            }\n\n            var x = pointsPos.x[q];\n            var y = pointsPos.y[q];\n            radius = radius || 0;\n\n            if (y === null || typeof w.globals.series[realIndex][dataPointIndex] === 'undefined') {\n              shouldDraw = false;\n            }\n\n            if (shouldDraw) {\n              var point = this.drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j);\n              elPointsWrap.add(point);\n            }\n\n            elPointsMain.add(elPointsWrap);\n          }\n        }\n      }\n    }, {\n      key: \"drawPoint\",\n      value: function drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j) {\n        var w = this.w;\n        var i = realIndex;\n        var anim = new Animations(this.ctx);\n        var filters = new Filters(this.ctx);\n        var fill = new Fill(this.ctx);\n        var markers = new Markers(this.ctx);\n        var graphics = new Graphics(this.ctx);\n        var markerConfig = markers.getMarkerConfig({\n          cssClass: 'apexcharts-marker',\n          seriesIndex: i,\n          dataPointIndex: dataPointIndex,\n          finishRadius: w.config.chart.type === 'bubble' || w.globals.comboCharts && w.config.series[realIndex] && w.config.series[realIndex].type === 'bubble' ? finishRadius : null\n        });\n        finishRadius = markerConfig.pSize;\n        var pathFillCircle = fill.fillPath({\n          seriesNumber: realIndex,\n          dataPointIndex: dataPointIndex,\n          color: markerConfig.pointFillColor,\n          patternUnits: 'objectBoundingBox',\n          value: w.globals.series[realIndex][j]\n        });\n        var el;\n\n        if (markerConfig.shape === 'circle') {\n          el = graphics.drawCircle(radius);\n        } else if (markerConfig.shape === 'square' || markerConfig.shape === 'rect') {\n          el = graphics.drawRect(0, 0, markerConfig.width - markerConfig.pointStrokeWidth / 2, markerConfig.height - markerConfig.pointStrokeWidth / 2, markerConfig.pRadius);\n        }\n\n        if (w.config.series[i].data[dataPointIndex]) {\n          if (w.config.series[i].data[dataPointIndex].fillColor) {\n            pathFillCircle = w.config.series[i].data[dataPointIndex].fillColor;\n          }\n        }\n\n        el.attr({\n          x: x - markerConfig.width / 2 - markerConfig.pointStrokeWidth / 2,\n          y: y - markerConfig.height / 2 - markerConfig.pointStrokeWidth / 2,\n          cx: x,\n          cy: y,\n          fill: pathFillCircle,\n          'fill-opacity': markerConfig.pointFillOpacity,\n          stroke: markerConfig.pointStrokeColor,\n          r: finishRadius,\n          'stroke-width': markerConfig.pointStrokeWidth,\n          'stroke-dasharray': markerConfig.pointStrokeDashArray,\n          'stroke-opacity': markerConfig.pointStrokeOpacity\n        });\n\n        if (w.config.chart.dropShadow.enabled) {\n          var dropShadow = w.config.chart.dropShadow;\n          filters.dropShadow(el, dropShadow, realIndex);\n        }\n\n        if (this.initialAnim && !w.globals.dataChanged && !w.globals.resized) {\n          var speed = w.config.chart.animations.speed;\n          anim.animateMarker(el, 0, markerConfig.shape === 'circle' ? finishRadius : {\n            width: markerConfig.width,\n            height: markerConfig.height\n          }, speed, w.globals.easing, function () {\n            window.setTimeout(function () {\n              anim.animationCompleted(el);\n            }, 100);\n          });\n        } else {\n          w.globals.animationEnded = true;\n        }\n\n        if (w.globals.dataChanged && markerConfig.shape === 'circle') {\n          if (this.dynamicAnim) {\n            var _speed = w.config.chart.animations.dynamicAnimation.speed;\n            var prevX, prevY, prevR;\n            var prevPathJ = null;\n            prevPathJ = w.globals.previousPaths[realIndex] && w.globals.previousPaths[realIndex][j];\n\n            if (typeof prevPathJ !== 'undefined' && prevPathJ !== null) {\n              // series containing less elements will ignore these values and revert to 0\n              prevX = prevPathJ.x;\n              prevY = prevPathJ.y;\n              prevR = typeof prevPathJ.r !== 'undefined' ? prevPathJ.r : finishRadius;\n            }\n\n            for (var cs = 0; cs < w.globals.collapsedSeries.length; cs++) {\n              if (w.globals.collapsedSeries[cs].index === realIndex) {\n                _speed = 1;\n                finishRadius = 0;\n              }\n            }\n\n            if (x === 0 && y === 0) finishRadius = 0;\n            anim.animateCircle(el, {\n              cx: prevX,\n              cy: prevY,\n              r: prevR\n            }, {\n              cx: x,\n              cy: y,\n              r: finishRadius\n            }, _speed, w.globals.easing);\n          } else {\n            el.attr({\n              r: finishRadius\n            });\n          }\n        }\n\n        el.attr({\n          rel: dataPointIndex,\n          j: dataPointIndex,\n          index: realIndex,\n          'default-marker-size': finishRadius\n        });\n        filters.setSelectionFilter(el, realIndex, dataPointIndex);\n        markers.addEvents(el);\n        el.node.classList.add('apexcharts-marker');\n        return el;\n      }\n    }, {\n      key: \"centerTextInBubble\",\n      value: function centerTextInBubble(y) {\n        var w = this.w;\n        y = y + parseInt(w.config.dataLabels.style.fontSize, 10) / 4;\n        return {\n          y: y\n        };\n      }\n    }]);\n\n    return Scatter;\n  }();\n\n  /**\n   * ApexCharts DataLabels Class for drawing dataLabels on Axes based Charts.\n   *\n   * @module DataLabels\n   **/\n\n  var DataLabels = /*#__PURE__*/function () {\n    function DataLabels(ctx) {\n      _classCallCheck(this, DataLabels);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    } // When there are many datalabels to be printed, and some of them overlaps each other in the same series, this method will take care of that\n    // Also, when datalabels exceeds the drawable area and get clipped off, we need to adjust and move some pixels to make them visible again\n\n\n    _createClass(DataLabels, [{\n      key: \"dataLabelsCorrection\",\n      value: function dataLabelsCorrection(x, y, val, i, dataPointIndex, alwaysDrawDataLabel, fontSize) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var drawnextLabel = false; //\n\n        var textRects = graphics.getTextRects(val, fontSize);\n        var width = textRects.width;\n        var height = textRects.height;\n        if (y < 0) y = 0;\n        if (y > w.globals.gridHeight + height) y = w.globals.gridHeight + height / 2; // first value in series, so push an empty array\n\n        if (typeof w.globals.dataLabelsRects[i] === 'undefined') w.globals.dataLabelsRects[i] = []; // then start pushing actual rects in that sub-array\n\n        w.globals.dataLabelsRects[i].push({\n          x: x,\n          y: y,\n          width: width,\n          height: height\n        });\n        var len = w.globals.dataLabelsRects[i].length - 2;\n        var lastDrawnIndex = typeof w.globals.lastDrawnDataLabelsIndexes[i] !== 'undefined' ? w.globals.lastDrawnDataLabelsIndexes[i][w.globals.lastDrawnDataLabelsIndexes[i].length - 1] : 0;\n\n        if (typeof w.globals.dataLabelsRects[i][len] !== 'undefined') {\n          var lastDataLabelRect = w.globals.dataLabelsRects[i][lastDrawnIndex];\n\n          if ( // next label forward and x not intersecting\n          x > lastDataLabelRect.x + lastDataLabelRect.width + 2 || y > lastDataLabelRect.y + lastDataLabelRect.height + 2 || x + width < lastDataLabelRect.x // next label is going to be drawn backwards\n          ) {\n            // the 2 indexes don't override, so OK to draw next label\n            drawnextLabel = true;\n          }\n        }\n\n        if (dataPointIndex === 0 || alwaysDrawDataLabel) {\n          drawnextLabel = true;\n        }\n\n        return {\n          x: x,\n          y: y,\n          textRects: textRects,\n          drawnextLabel: drawnextLabel\n        };\n      }\n    }, {\n      key: \"drawDataLabel\",\n      value: function drawDataLabel(_ref) {\n        var _this = this;\n\n        var type = _ref.type,\n            pos = _ref.pos,\n            i = _ref.i,\n            j = _ref.j,\n            isRangeStart = _ref.isRangeStart,\n            _ref$strokeWidth = _ref.strokeWidth,\n            strokeWidth = _ref$strokeWidth === void 0 ? 2 : _ref$strokeWidth;\n        // this method handles line, area, bubble, scatter charts as those charts contains markers/points which have pre-defined x/y positions\n        // all other charts like radar / bars / heatmaps will define their own drawDataLabel routine\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var dataLabelsConfig = w.config.dataLabels;\n        var x = 0;\n        var y = 0;\n        var dataPointIndex = j;\n        var elDataLabelsWrap = null;\n\n        if (!dataLabelsConfig.enabled || !Array.isArray(pos.x)) {\n          return elDataLabelsWrap;\n        }\n\n        elDataLabelsWrap = graphics.group({\n          class: 'apexcharts-data-labels'\n        });\n\n        for (var q = 0; q < pos.x.length; q++) {\n          x = pos.x[q] + dataLabelsConfig.offsetX;\n          y = pos.y[q] + dataLabelsConfig.offsetY + strokeWidth;\n\n          if (!isNaN(x)) {\n            // a small hack as we have 2 points for the first val to connect it\n            if (j === 1 && q === 0) dataPointIndex = 0;\n            if (j === 1 && q === 1) dataPointIndex = 1;\n            var val = w.globals.series[i][dataPointIndex];\n\n            if (type === 'rangeArea') {\n              if (isRangeStart) {\n                val = w.globals.seriesRangeStart[i][dataPointIndex];\n              } else {\n                val = w.globals.seriesRangeEnd[i][dataPointIndex];\n              }\n            }\n\n            var text = '';\n\n            var getText = function getText(v) {\n              return w.config.dataLabels.formatter(v, {\n                ctx: _this.ctx,\n                seriesIndex: i,\n                dataPointIndex: dataPointIndex,\n                w: w\n              });\n            };\n\n            if (w.config.chart.type === 'bubble') {\n              val = w.globals.seriesZ[i][dataPointIndex];\n              text = getText(val);\n              y = pos.y[q];\n              var scatter = new Scatter(this.ctx);\n              var centerTextInBubbleCoords = scatter.centerTextInBubble(y, i, dataPointIndex);\n              y = centerTextInBubbleCoords.y;\n            } else {\n              if (typeof val !== 'undefined') {\n                text = getText(val);\n              }\n            }\n\n            this.plotDataLabelsText({\n              x: x,\n              y: y,\n              text: text,\n              i: i,\n              j: dataPointIndex,\n              parent: elDataLabelsWrap,\n              offsetCorrection: true,\n              dataLabelsConfig: w.config.dataLabels\n            });\n          }\n        }\n\n        return elDataLabelsWrap;\n      }\n    }, {\n      key: \"plotDataLabelsText\",\n      value: function plotDataLabelsText(opts) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var x = opts.x,\n            y = opts.y,\n            i = opts.i,\n            j = opts.j,\n            text = opts.text,\n            textAnchor = opts.textAnchor,\n            fontSize = opts.fontSize,\n            parent = opts.parent,\n            dataLabelsConfig = opts.dataLabelsConfig,\n            color = opts.color,\n            alwaysDrawDataLabel = opts.alwaysDrawDataLabel,\n            offsetCorrection = opts.offsetCorrection;\n\n        if (Array.isArray(w.config.dataLabels.enabledOnSeries)) {\n          if (w.config.dataLabels.enabledOnSeries.indexOf(i) < 0) {\n            return;\n          }\n        }\n\n        var correctedLabels = {\n          x: x,\n          y: y,\n          drawnextLabel: true,\n          textRects: null\n        };\n\n        if (offsetCorrection) {\n          correctedLabels = this.dataLabelsCorrection(x, y, text, i, j, alwaysDrawDataLabel, parseInt(dataLabelsConfig.style.fontSize, 10));\n        } // when zoomed, we don't need to correct labels offsets,\n        // but if normally, labels get cropped, correct them\n\n\n        if (!w.globals.zoomed) {\n          x = correctedLabels.x;\n          y = correctedLabels.y;\n        }\n\n        if (correctedLabels.textRects) {\n          // fixes #2264\n          if (x < -10 - correctedLabels.textRects.width || x > w.globals.gridWidth + correctedLabels.textRects.width + 10) {\n            // datalabels fall outside drawing area, so draw a blank label\n            text = '';\n          }\n        }\n\n        var dataLabelColor = w.globals.dataLabels.style.colors[i];\n\n        if ((w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && w.config.plotOptions.bar.distributed || w.config.dataLabels.distributed) {\n          dataLabelColor = w.globals.dataLabels.style.colors[j];\n        }\n\n        if (typeof dataLabelColor === 'function') {\n          dataLabelColor = dataLabelColor({\n            series: w.globals.series,\n            seriesIndex: i,\n            dataPointIndex: j,\n            w: w\n          });\n        }\n\n        if (color) {\n          dataLabelColor = color;\n        }\n\n        var offX = dataLabelsConfig.offsetX;\n        var offY = dataLabelsConfig.offsetY;\n\n        if (w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') {\n          // for certain chart types, we handle offsets while calculating datalabels pos\n          // why? because bars/column may have negative values and based on that\n          // offsets becomes reversed\n          offX = 0;\n          offY = 0;\n        }\n\n        if (correctedLabels.drawnextLabel) {\n          var dataLabelText = graphics.drawText({\n            width: 100,\n            height: parseInt(dataLabelsConfig.style.fontSize, 10),\n            x: x + offX,\n            y: y + offY,\n            foreColor: dataLabelColor,\n            textAnchor: textAnchor || dataLabelsConfig.textAnchor,\n            text: text,\n            fontSize: fontSize || dataLabelsConfig.style.fontSize,\n            fontFamily: dataLabelsConfig.style.fontFamily,\n            fontWeight: dataLabelsConfig.style.fontWeight || 'normal'\n          });\n          dataLabelText.attr({\n            class: 'apexcharts-datalabel',\n            cx: x,\n            cy: y\n          });\n\n          if (dataLabelsConfig.dropShadow.enabled) {\n            var textShadow = dataLabelsConfig.dropShadow;\n            var filters = new Filters(this.ctx);\n            filters.dropShadow(dataLabelText, textShadow);\n          }\n\n          parent.add(dataLabelText);\n\n          if (typeof w.globals.lastDrawnDataLabelsIndexes[i] === 'undefined') {\n            w.globals.lastDrawnDataLabelsIndexes[i] = [];\n          }\n\n          w.globals.lastDrawnDataLabelsIndexes[i].push(j);\n        }\n      }\n    }, {\n      key: \"addBackgroundToDataLabel\",\n      value: function addBackgroundToDataLabel(el, coords) {\n        var w = this.w;\n        var bCnf = w.config.dataLabels.background;\n        var paddingH = bCnf.padding;\n        var paddingV = bCnf.padding / 2;\n        var width = coords.width;\n        var height = coords.height;\n        var graphics = new Graphics(this.ctx);\n        var elRect = graphics.drawRect(coords.x - paddingH, coords.y - paddingV / 2, width + paddingH * 2, height + paddingV, bCnf.borderRadius, w.config.chart.background === 'transparent' ? '#fff' : w.config.chart.background, bCnf.opacity, bCnf.borderWidth, bCnf.borderColor);\n\n        if (bCnf.dropShadow.enabled) {\n          var filters = new Filters(this.ctx);\n          filters.dropShadow(elRect, bCnf.dropShadow);\n        }\n\n        return elRect;\n      }\n    }, {\n      key: \"dataLabelsBackground\",\n      value: function dataLabelsBackground() {\n        var w = this.w;\n        if (w.config.chart.type === 'bubble') return;\n        var elDataLabels = w.globals.dom.baseEl.querySelectorAll('.apexcharts-datalabels text');\n\n        for (var i = 0; i < elDataLabels.length; i++) {\n          var el = elDataLabels[i];\n          var coords = el.getBBox();\n          var elRect = null;\n\n          if (coords.width && coords.height) {\n            elRect = this.addBackgroundToDataLabel(el, coords);\n          }\n\n          if (elRect) {\n            el.parentNode.insertBefore(elRect.node, el);\n            var background = el.getAttribute('fill');\n            var shouldAnim = w.config.chart.animations.enabled && !w.globals.resized && !w.globals.dataChanged;\n\n            if (shouldAnim) {\n              elRect.animate().attr({\n                fill: background\n              });\n            } else {\n              elRect.attr({\n                fill: background\n              });\n            }\n\n            el.setAttribute('fill', w.config.dataLabels.background.foreColor);\n          }\n        }\n      }\n    }, {\n      key: \"bringForward\",\n      value: function bringForward() {\n        var w = this.w;\n        var elDataLabelsNodes = w.globals.dom.baseEl.querySelectorAll('.apexcharts-datalabels');\n        var elSeries = w.globals.dom.baseEl.querySelector('.apexcharts-plot-series:last-child');\n\n        for (var i = 0; i < elDataLabelsNodes.length; i++) {\n          if (elSeries) {\n            elSeries.insertBefore(elDataLabelsNodes[i], elSeries.nextSibling);\n          }\n        }\n      }\n    }]);\n\n    return DataLabels;\n  }();\n\n  /**\n   * ApexCharts Series Class for interaction with the Series of the chart.\n   *\n   * @module Series\n   **/\n\n  var Series = /*#__PURE__*/function () {\n    function Series(ctx) {\n      _classCallCheck(this, Series);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.legendInactiveClass = 'legend-mouseover-inactive';\n    }\n\n    _createClass(Series, [{\n      key: \"getAllSeriesEls\",\n      value: function getAllSeriesEls() {\n        return this.w.globals.dom.baseEl.getElementsByClassName(\"apexcharts-series\");\n      }\n    }, {\n      key: \"getSeriesByName\",\n      value: function getSeriesByName(seriesName) {\n        return this.w.globals.dom.baseEl.querySelector(\".apexcharts-inner .apexcharts-series[seriesName='\".concat(Utils$1.escapeString(seriesName), \"']\"));\n      }\n    }, {\n      key: \"isSeriesHidden\",\n      value: function isSeriesHidden(seriesName) {\n        var targetElement = this.getSeriesByName(seriesName);\n        var realIndex = parseInt(targetElement.getAttribute('data:realIndex'), 10);\n        var isHidden = targetElement.classList.contains('apexcharts-series-collapsed');\n        return {\n          isHidden: isHidden,\n          realIndex: realIndex\n        };\n      }\n    }, {\n      key: \"addCollapsedClassToSeries\",\n      value: function addCollapsedClassToSeries(elSeries, index) {\n        var w = this.w;\n\n        function iterateOnAllCollapsedSeries(series) {\n          for (var cs = 0; cs < series.length; cs++) {\n            if (series[cs].index === index) {\n              elSeries.node.classList.add('apexcharts-series-collapsed');\n            }\n          }\n        }\n\n        iterateOnAllCollapsedSeries(w.globals.collapsedSeries);\n        iterateOnAllCollapsedSeries(w.globals.ancillaryCollapsedSeries);\n      }\n    }, {\n      key: \"toggleSeries\",\n      value: function toggleSeries(seriesName) {\n        var isSeriesHidden = this.isSeriesHidden(seriesName);\n        this.ctx.legend.legendHelpers.toggleDataSeries(isSeriesHidden.realIndex, isSeriesHidden.isHidden);\n        return isSeriesHidden.isHidden;\n      }\n    }, {\n      key: \"showSeries\",\n      value: function showSeries(seriesName) {\n        var isSeriesHidden = this.isSeriesHidden(seriesName);\n\n        if (isSeriesHidden.isHidden) {\n          this.ctx.legend.legendHelpers.toggleDataSeries(isSeriesHidden.realIndex, true);\n        }\n      }\n    }, {\n      key: \"hideSeries\",\n      value: function hideSeries(seriesName) {\n        var isSeriesHidden = this.isSeriesHidden(seriesName);\n\n        if (!isSeriesHidden.isHidden) {\n          this.ctx.legend.legendHelpers.toggleDataSeries(isSeriesHidden.realIndex, false);\n        }\n      }\n    }, {\n      key: \"resetSeries\",\n      value: function resetSeries() {\n        var shouldUpdateChart = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n        var shouldResetZoom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var shouldResetCollapsed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        var w = this.w;\n        var series = Utils$1.clone(w.globals.initialSeries);\n        w.globals.previousPaths = [];\n\n        if (shouldResetCollapsed) {\n          w.globals.collapsedSeries = [];\n          w.globals.ancillaryCollapsedSeries = [];\n          w.globals.collapsedSeriesIndices = [];\n          w.globals.ancillaryCollapsedSeriesIndices = [];\n        } else {\n          series = this.emptyCollapsedSeries(series);\n        }\n\n        w.config.series = series;\n\n        if (shouldUpdateChart) {\n          if (shouldResetZoom) {\n            w.globals.zoomed = false;\n            this.ctx.updateHelpers.revertDefaultAxisMinMax();\n          }\n\n          this.ctx.updateHelpers._updateSeries(series, w.config.chart.animations.dynamicAnimation.enabled);\n        }\n      }\n    }, {\n      key: \"emptyCollapsedSeries\",\n      value: function emptyCollapsedSeries(series) {\n        var w = this.w;\n\n        for (var i = 0; i < series.length; i++) {\n          if (w.globals.collapsedSeriesIndices.indexOf(i) > -1) {\n            series[i].data = [];\n          }\n        }\n\n        return series;\n      }\n    }, {\n      key: \"toggleSeriesOnHover\",\n      value: function toggleSeriesOnHover(e, targetElement) {\n        var w = this.w;\n        if (!targetElement) targetElement = e.target;\n        var allSeriesEls = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series, .apexcharts-datalabels\");\n\n        if (e.type === 'mousemove') {\n          var seriesCnt = parseInt(targetElement.getAttribute('rel'), 10) - 1;\n          var seriesEl = null;\n          var dataLabelEl = null;\n\n          if (w.globals.axisCharts || w.config.chart.type === 'radialBar') {\n            if (w.globals.axisCharts) {\n              seriesEl = w.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(seriesCnt, \"']\"));\n              dataLabelEl = w.globals.dom.baseEl.querySelector(\".apexcharts-datalabels[data\\\\:realIndex='\".concat(seriesCnt, \"']\"));\n            } else {\n              seriesEl = w.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(seriesCnt + 1, \"']\"));\n            }\n          } else {\n            seriesEl = w.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(seriesCnt + 1, \"'] path\"));\n          }\n\n          for (var se = 0; se < allSeriesEls.length; se++) {\n            allSeriesEls[se].classList.add(this.legendInactiveClass);\n          }\n\n          if (seriesEl !== null) {\n            if (!w.globals.axisCharts) {\n              seriesEl.parentNode.classList.remove(this.legendInactiveClass);\n            }\n\n            seriesEl.classList.remove(this.legendInactiveClass);\n\n            if (dataLabelEl !== null) {\n              dataLabelEl.classList.remove(this.legendInactiveClass);\n            }\n          }\n        } else if (e.type === 'mouseout') {\n          for (var _se = 0; _se < allSeriesEls.length; _se++) {\n            allSeriesEls[_se].classList.remove(this.legendInactiveClass);\n          }\n        }\n      }\n    }, {\n      key: \"highlightRangeInSeries\",\n      value: function highlightRangeInSeries(e, targetElement) {\n        var _this = this;\n\n        var w = this.w;\n        var allHeatMapElements = w.globals.dom.baseEl.getElementsByClassName('apexcharts-heatmap-rect');\n\n        var activeInactive = function activeInactive(action) {\n          for (var i = 0; i < allHeatMapElements.length; i++) {\n            allHeatMapElements[i].classList[action](_this.legendInactiveClass);\n          }\n        };\n\n        var removeInactiveClassFromHoveredRange = function removeInactiveClassFromHoveredRange(range) {\n          for (var i = 0; i < allHeatMapElements.length; i++) {\n            var val = parseInt(allHeatMapElements[i].getAttribute('val'), 10);\n\n            if (val >= range.from && val <= range.to) {\n              allHeatMapElements[i].classList.remove(_this.legendInactiveClass);\n            }\n          }\n        };\n\n        if (e.type === 'mousemove') {\n          var seriesCnt = parseInt(targetElement.getAttribute('rel'), 10) - 1;\n          activeInactive('add');\n          var range = w.config.plotOptions.heatmap.colorScale.ranges[seriesCnt];\n          removeInactiveClassFromHoveredRange(range);\n        } else if (e.type === 'mouseout') {\n          activeInactive('remove');\n        }\n      }\n    }, {\n      key: \"getActiveConfigSeriesIndex\",\n      value: function getActiveConfigSeriesIndex() {\n        var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'asc';\n        var chartTypes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n        var w = this.w;\n        var activeIndex = 0;\n\n        if (w.config.series.length > 1) {\n          // active series flag is required to know if user has not deactivated via legend click\n          var activeSeriesIndex = w.config.series.map(function (s, index) {\n            var checkChartType = function checkChartType() {\n              if (w.globals.comboCharts) {\n                return chartTypes.length === 0 || chartTypes.length && chartTypes.indexOf(w.config.series[index].type) > -1;\n              }\n\n              return true;\n            };\n\n            var hasData = s.data && s.data.length > 0 && w.globals.collapsedSeriesIndices.indexOf(index) === -1;\n            return hasData && checkChartType() ? index : -1;\n          });\n\n          for (var a = order === 'asc' ? 0 : activeSeriesIndex.length - 1; order === 'asc' ? a < activeSeriesIndex.length : a >= 0; order === 'asc' ? a++ : a--) {\n            if (activeSeriesIndex[a] !== -1) {\n              activeIndex = activeSeriesIndex[a];\n              break;\n            }\n          }\n        }\n\n        return activeIndex;\n      }\n    }, {\n      key: \"getBarSeriesIndices\",\n      value: function getBarSeriesIndices() {\n        var w = this.w;\n\n        if (w.globals.comboCharts) {\n          return this.w.config.series.map(function (s, i) {\n            return s.type === 'bar' || s.type === 'column' ? i : -1;\n          }).filter(function (i) {\n            return i !== -1;\n          });\n        }\n\n        return this.w.config.series.map(function (s, i) {\n          return i;\n        });\n      }\n    }, {\n      key: \"getPreviousPaths\",\n      value: function getPreviousPaths() {\n        var w = this.w;\n        w.globals.previousPaths = [];\n\n        function pushPaths(seriesEls, i, type) {\n          var paths = seriesEls[i].childNodes;\n          var dArr = {\n            type: type,\n            paths: [],\n            realIndex: seriesEls[i].getAttribute('data:realIndex')\n          };\n\n          for (var j = 0; j < paths.length; j++) {\n            if (paths[j].hasAttribute('pathTo')) {\n              var d = paths[j].getAttribute('pathTo');\n              dArr.paths.push({\n                d: d\n              });\n            }\n          }\n\n          w.globals.previousPaths.push(dArr);\n        }\n\n        var getPaths = function getPaths(chartType) {\n          return w.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(chartType, \"-series .apexcharts-series\"));\n        };\n\n        var chartTypes = ['line', 'area', 'bar', 'rangebar', 'rangeArea', 'candlestick', 'radar'];\n        chartTypes.forEach(function (type) {\n          var paths = getPaths(type);\n\n          for (var p = 0; p < paths.length; p++) {\n            pushPaths(paths, p, type);\n          }\n        });\n        this.handlePrevBubbleScatterPaths('bubble');\n        this.handlePrevBubbleScatterPaths('scatter');\n        var heatTreeSeries = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(w.config.chart.type, \" .apexcharts-series\"));\n\n        if (heatTreeSeries.length > 0) {\n          var _loop = function _loop(h) {\n            var seriesEls = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(w.config.chart.type, \" .apexcharts-series[data\\\\:realIndex='\").concat(h, \"'] rect\"));\n            var dArr = [];\n\n            var _loop2 = function _loop2(i) {\n              var getAttr = function getAttr(x) {\n                return seriesEls[i].getAttribute(x);\n              };\n\n              var rect = {\n                x: parseFloat(getAttr('x')),\n                y: parseFloat(getAttr('y')),\n                width: parseFloat(getAttr('width')),\n                height: parseFloat(getAttr('height'))\n              };\n              dArr.push({\n                rect: rect,\n                color: seriesEls[i].getAttribute('color')\n              });\n            };\n\n            for (var i = 0; i < seriesEls.length; i++) {\n              _loop2(i);\n            }\n\n            w.globals.previousPaths.push(dArr);\n          };\n\n          for (var h = 0; h < heatTreeSeries.length; h++) {\n            _loop(h);\n          }\n        }\n\n        if (!w.globals.axisCharts) {\n          // for non-axis charts (i.e., circular charts, pathFrom is not usable. We need whole series)\n          w.globals.previousPaths = w.globals.series;\n        }\n      }\n    }, {\n      key: \"handlePrevBubbleScatterPaths\",\n      value: function handlePrevBubbleScatterPaths(type) {\n        var w = this.w;\n        var paths = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(type, \"-series .apexcharts-series\"));\n\n        if (paths.length > 0) {\n          for (var s = 0; s < paths.length; s++) {\n            var seriesEls = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(type, \"-series .apexcharts-series[data\\\\:realIndex='\").concat(s, \"'] circle\"));\n            var dArr = [];\n\n            for (var i = 0; i < seriesEls.length; i++) {\n              dArr.push({\n                x: seriesEls[i].getAttribute('cx'),\n                y: seriesEls[i].getAttribute('cy'),\n                r: seriesEls[i].getAttribute('r')\n              });\n            }\n\n            w.globals.previousPaths.push(dArr);\n          }\n        }\n      }\n    }, {\n      key: \"clearPreviousPaths\",\n      value: function clearPreviousPaths() {\n        var w = this.w;\n        w.globals.previousPaths = [];\n        w.globals.allSeriesCollapsed = false;\n      }\n    }, {\n      key: \"handleNoData\",\n      value: function handleNoData() {\n        var w = this.w;\n        var me = this;\n        var noDataOpts = w.config.noData;\n        var graphics = new Graphics(me.ctx);\n        var x = w.globals.svgWidth / 2;\n        var y = w.globals.svgHeight / 2;\n        var textAnchor = 'middle';\n        w.globals.noData = true;\n        w.globals.animationEnded = true;\n\n        if (noDataOpts.align === 'left') {\n          x = 10;\n          textAnchor = 'start';\n        } else if (noDataOpts.align === 'right') {\n          x = w.globals.svgWidth - 10;\n          textAnchor = 'end';\n        }\n\n        if (noDataOpts.verticalAlign === 'top') {\n          y = 50;\n        } else if (noDataOpts.verticalAlign === 'bottom') {\n          y = w.globals.svgHeight - 50;\n        }\n\n        x = x + noDataOpts.offsetX;\n        y = y + parseInt(noDataOpts.style.fontSize, 10) + 2 + noDataOpts.offsetY;\n\n        if (noDataOpts.text !== undefined && noDataOpts.text !== '') {\n          var titleText = graphics.drawText({\n            x: x,\n            y: y,\n            text: noDataOpts.text,\n            textAnchor: textAnchor,\n            fontSize: noDataOpts.style.fontSize,\n            fontFamily: noDataOpts.style.fontFamily,\n            foreColor: noDataOpts.style.color,\n            opacity: 1,\n            class: 'apexcharts-text-nodata'\n          });\n          w.globals.dom.Paper.add(titleText);\n        }\n      } // When user clicks on legends, the collapsed series is filled with [0,0,0,...,0]\n      // This is because we don't want to alter the series' length as it is used at many places\n\n    }, {\n      key: \"setNullSeriesToZeroValues\",\n      value: function setNullSeriesToZeroValues(series) {\n        var w = this.w;\n\n        for (var sl = 0; sl < series.length; sl++) {\n          if (series[sl].length === 0) {\n            for (var j = 0; j < series[w.globals.maxValsInArrayIndex].length; j++) {\n              series[sl].push(0);\n            }\n          }\n        }\n\n        return series;\n      }\n    }, {\n      key: \"hasAllSeriesEqualX\",\n      value: function hasAllSeriesEqualX() {\n        var equalLen = true;\n        var w = this.w;\n        var filteredSerX = this.filteredSeriesX();\n\n        for (var i = 0; i < filteredSerX.length - 1; i++) {\n          if (filteredSerX[i][0] !== filteredSerX[i + 1][0]) {\n            equalLen = false;\n            break;\n          }\n        }\n\n        w.globals.allSeriesHasEqualX = equalLen;\n        return equalLen;\n      }\n    }, {\n      key: \"filteredSeriesX\",\n      value: function filteredSeriesX() {\n        var w = this.w;\n        var filteredSeriesX = w.globals.seriesX.map(function (ser) {\n          return ser.length > 0 ? ser : [];\n        });\n        return filteredSeriesX;\n      }\n    }]);\n\n    return Series;\n  }();\n\n  var Data = /*#__PURE__*/function () {\n    function Data(ctx) {\n      _classCallCheck(this, Data);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.twoDSeries = [];\n      this.threeDSeries = [];\n      this.twoDSeriesX = [];\n      this.seriesGoals = [];\n      this.coreUtils = new CoreUtils(this.ctx);\n    }\n\n    _createClass(Data, [{\n      key: \"isMultiFormat\",\n      value: function isMultiFormat() {\n        return this.isFormatXY() || this.isFormat2DArray();\n      } // given format is [{x, y}, {x, y}]\n\n    }, {\n      key: \"isFormatXY\",\n      value: function isFormatXY() {\n        var series = this.w.config.series.slice();\n        var sr = new Series(this.ctx);\n        this.activeSeriesIndex = sr.getActiveConfigSeriesIndex();\n\n        if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && series[this.activeSeriesIndex].data[0] !== null && typeof series[this.activeSeriesIndex].data[0].x !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null) {\n          return true;\n        }\n      } // given format is [[x, y], [x, y]]\n\n    }, {\n      key: \"isFormat2DArray\",\n      value: function isFormat2DArray() {\n        var series = this.w.config.series.slice();\n        var sr = new Series(this.ctx);\n        this.activeSeriesIndex = sr.getActiveConfigSeriesIndex();\n\n        if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && typeof series[this.activeSeriesIndex].data[0] !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null && series[this.activeSeriesIndex].data[0].constructor === Array) {\n          return true;\n        }\n      }\n    }, {\n      key: \"handleFormat2DArray\",\n      value: function handleFormat2DArray(ser, i) {\n        var cnf = this.w.config;\n        var gl = this.w.globals;\n        var isBoxPlot = cnf.chart.type === 'boxPlot' || cnf.series[i].type === 'boxPlot';\n\n        for (var j = 0; j < ser[i].data.length; j++) {\n          if (typeof ser[i].data[j][1] !== 'undefined') {\n            if (Array.isArray(ser[i].data[j][1]) && ser[i].data[j][1].length === 4 && !isBoxPlot) {\n              // candlestick nested ohlc format\n              this.twoDSeries.push(Utils$1.parseNumber(ser[i].data[j][1][3]));\n            } else if (ser[i].data[j].length >= 5) {\n              // candlestick non-nested ohlc format\n              this.twoDSeries.push(Utils$1.parseNumber(ser[i].data[j][4]));\n            } else {\n              this.twoDSeries.push(Utils$1.parseNumber(ser[i].data[j][1]));\n            }\n\n            gl.dataFormatXNumeric = true;\n          }\n\n          if (cnf.xaxis.type === 'datetime') {\n            // if timestamps are provided and xaxis type is datetime,\n            var ts = new Date(ser[i].data[j][0]);\n            ts = new Date(ts).getTime();\n            this.twoDSeriesX.push(ts);\n          } else {\n            this.twoDSeriesX.push(ser[i].data[j][0]);\n          }\n        }\n\n        for (var _j = 0; _j < ser[i].data.length; _j++) {\n          if (typeof ser[i].data[_j][2] !== 'undefined') {\n            this.threeDSeries.push(ser[i].data[_j][2]);\n            gl.isDataXYZ = true;\n          }\n        }\n      }\n    }, {\n      key: \"handleFormatXY\",\n      value: function handleFormatXY(ser, i) {\n        var cnf = this.w.config;\n        var gl = this.w.globals;\n        var dt = new DateTime(this.ctx);\n        var activeI = i;\n\n        if (gl.collapsedSeriesIndices.indexOf(i) > -1) {\n          // fix #368\n          activeI = this.activeSeriesIndex;\n        } // get series\n\n\n        for (var j = 0; j < ser[i].data.length; j++) {\n          if (typeof ser[i].data[j].y !== 'undefined') {\n            if (Array.isArray(ser[i].data[j].y)) {\n              this.twoDSeries.push(Utils$1.parseNumber(ser[i].data[j].y[ser[i].data[j].y.length - 1]));\n            } else {\n              this.twoDSeries.push(Utils$1.parseNumber(ser[i].data[j].y));\n            }\n          }\n\n          if (typeof ser[i].data[j].goals !== 'undefined' && Array.isArray(ser[i].data[j].goals)) {\n            if (typeof this.seriesGoals[i] === 'undefined') {\n              this.seriesGoals[i] = [];\n            }\n\n            this.seriesGoals[i].push(ser[i].data[j].goals);\n          } else {\n            if (typeof this.seriesGoals[i] === 'undefined') {\n              this.seriesGoals[i] = [];\n            }\n\n            this.seriesGoals[i].push(null);\n          }\n        } // get seriesX\n\n\n        for (var _j2 = 0; _j2 < ser[activeI].data.length; _j2++) {\n          var isXString = typeof ser[activeI].data[_j2].x === 'string';\n          var isXArr = Array.isArray(ser[activeI].data[_j2].x);\n          var isXDate = !isXArr && !!dt.isValidDate(ser[activeI].data[_j2].x.toString());\n\n          if (isXString || isXDate) {\n            // user supplied '01/01/2017' or a date string (a JS date object is not supported)\n            if (isXString || cnf.xaxis.convertedCatToNumeric) {\n              var isRangeColumn = gl.isBarHorizontal && gl.isRangeData;\n\n              if (cnf.xaxis.type === 'datetime' && !isRangeColumn) {\n                this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x));\n              } else {\n                // a category and not a numeric x value\n                this.fallbackToCategory = true;\n                this.twoDSeriesX.push(ser[activeI].data[_j2].x);\n              }\n            } else {\n              if (cnf.xaxis.type === 'datetime') {\n                this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x.toString()));\n              } else {\n                gl.dataFormatXNumeric = true;\n                gl.isXNumeric = true;\n                this.twoDSeriesX.push(parseFloat(ser[activeI].data[_j2].x));\n              }\n            }\n          } else if (isXArr) {\n            // a multiline label described in array format\n            this.fallbackToCategory = true;\n            this.twoDSeriesX.push(ser[activeI].data[_j2].x);\n          } else {\n            // a numeric value in x property\n            gl.isXNumeric = true;\n            gl.dataFormatXNumeric = true;\n            this.twoDSeriesX.push(ser[activeI].data[_j2].x);\n          }\n        }\n\n        if (ser[i].data[0] && typeof ser[i].data[0].z !== 'undefined') {\n          for (var t = 0; t < ser[i].data.length; t++) {\n            this.threeDSeries.push(ser[i].data[t].z);\n          }\n\n          gl.isDataXYZ = true;\n        }\n      }\n    }, {\n      key: \"handleRangeData\",\n      value: function handleRangeData(ser, i) {\n        var gl = this.w.globals;\n        var range = {};\n\n        if (this.isFormat2DArray()) {\n          range = this.handleRangeDataFormat('array', ser, i);\n        } else if (this.isFormatXY()) {\n          range = this.handleRangeDataFormat('xy', ser, i);\n        }\n\n        gl.seriesRangeStart.push(range.start);\n        gl.seriesRangeEnd.push(range.end);\n        gl.seriesRange.push(range.rangeUniques); // check for overlaps to avoid clashes in a timeline chart\n\n        gl.seriesRange.forEach(function (sr, si) {\n          if (sr) {\n            sr.forEach(function (sarr, sarri) {\n              sarr.y.forEach(function (arr, arri) {\n                for (var sri = 0; sri < sarr.y.length; sri++) {\n                  if (arri !== sri) {\n                    var range1y1 = arr.y1;\n                    var range1y2 = arr.y2;\n                    var range2y1 = sarr.y[sri].y1;\n                    var range2y2 = sarr.y[sri].y2;\n\n                    if (range1y1 <= range2y2 && range2y1 <= range1y2) {\n                      if (sarr.overlaps.indexOf(arr.rangeName) < 0) {\n                        sarr.overlaps.push(arr.rangeName);\n                      }\n\n                      if (sarr.overlaps.indexOf(sarr.y[sri].rangeName) < 0) {\n                        sarr.overlaps.push(sarr.y[sri].rangeName);\n                      }\n                    }\n                  }\n                }\n              });\n            });\n          }\n        });\n        return range;\n      }\n    }, {\n      key: \"handleCandleStickBoxData\",\n      value: function handleCandleStickBoxData(ser, i) {\n        var gl = this.w.globals;\n        var ohlc = {};\n\n        if (this.isFormat2DArray()) {\n          ohlc = this.handleCandleStickBoxDataFormat('array', ser, i);\n        } else if (this.isFormatXY()) {\n          ohlc = this.handleCandleStickBoxDataFormat('xy', ser, i);\n        }\n\n        gl.seriesCandleO[i] = ohlc.o;\n        gl.seriesCandleH[i] = ohlc.h;\n        gl.seriesCandleM[i] = ohlc.m;\n        gl.seriesCandleL[i] = ohlc.l;\n        gl.seriesCandleC[i] = ohlc.c;\n        return ohlc;\n      }\n    }, {\n      key: \"handleRangeDataFormat\",\n      value: function handleRangeDataFormat(format, ser, i) {\n        var rangeStart = [];\n        var rangeEnd = [];\n        var uniqueKeys = ser[i].data.filter(function (thing, index, self) {\n          return index === self.findIndex(function (t) {\n            return t.x === thing.x;\n          });\n        }).map(function (r, index) {\n          return {\n            x: r.x,\n            overlaps: [],\n            y: []\n          };\n        });\n\n        if (format === 'array') {\n          for (var j = 0; j < ser[i].data.length; j++) {\n            if (Array.isArray(ser[i].data[j])) {\n              rangeStart.push(ser[i].data[j][1][0]);\n              rangeEnd.push(ser[i].data[j][1][1]);\n            } else {\n              rangeStart.push(ser[i].data[j]);\n              rangeEnd.push(ser[i].data[j]);\n            }\n          }\n        } else if (format === 'xy') {\n          var _loop = function _loop(_j3) {\n            var isDataPoint2D = Array.isArray(ser[i].data[_j3].y);\n            var id = Utils$1.randomId();\n            var x = ser[i].data[_j3].x;\n            var y = {\n              y1: isDataPoint2D ? ser[i].data[_j3].y[0] : ser[i].data[_j3].y,\n              y2: isDataPoint2D ? ser[i].data[_j3].y[1] : ser[i].data[_j3].y,\n              rangeName: id\n            }; // mutating config object by adding a new property\n            // TODO: As this is specifically for timeline rangebar charts, update the docs mentioning the series only supports xy format\n\n            ser[i].data[_j3].rangeName = id;\n            var uI = uniqueKeys.findIndex(function (t) {\n              return t.x === x;\n            });\n            uniqueKeys[uI].y.push(y);\n            rangeStart.push(y.y1);\n            rangeEnd.push(y.y2);\n          };\n\n          for (var _j3 = 0; _j3 < ser[i].data.length; _j3++) {\n            _loop(_j3);\n          }\n        }\n\n        return {\n          start: rangeStart,\n          end: rangeEnd,\n          rangeUniques: uniqueKeys\n        };\n      }\n    }, {\n      key: \"handleCandleStickBoxDataFormat\",\n      value: function handleCandleStickBoxDataFormat(format, ser, i) {\n        var w = this.w;\n        var isBoxPlot = w.config.chart.type === 'boxPlot' || w.config.series[i].type === 'boxPlot';\n        var serO = [];\n        var serH = [];\n        var serM = [];\n        var serL = [];\n        var serC = [];\n\n        if (format === 'array') {\n          if (isBoxPlot && ser[i].data[0].length === 6 || !isBoxPlot && ser[i].data[0].length === 5) {\n            for (var j = 0; j < ser[i].data.length; j++) {\n              serO.push(ser[i].data[j][1]);\n              serH.push(ser[i].data[j][2]);\n\n              if (isBoxPlot) {\n                serM.push(ser[i].data[j][3]);\n                serL.push(ser[i].data[j][4]);\n                serC.push(ser[i].data[j][5]);\n              } else {\n                serL.push(ser[i].data[j][3]);\n                serC.push(ser[i].data[j][4]);\n              }\n            }\n          } else {\n            for (var _j4 = 0; _j4 < ser[i].data.length; _j4++) {\n              if (Array.isArray(ser[i].data[_j4][1])) {\n                serO.push(ser[i].data[_j4][1][0]);\n                serH.push(ser[i].data[_j4][1][1]);\n\n                if (isBoxPlot) {\n                  serM.push(ser[i].data[_j4][1][2]);\n                  serL.push(ser[i].data[_j4][1][3]);\n                  serC.push(ser[i].data[_j4][1][4]);\n                } else {\n                  serL.push(ser[i].data[_j4][1][2]);\n                  serC.push(ser[i].data[_j4][1][3]);\n                }\n              }\n            }\n          }\n        } else if (format === 'xy') {\n          for (var _j5 = 0; _j5 < ser[i].data.length; _j5++) {\n            if (Array.isArray(ser[i].data[_j5].y)) {\n              serO.push(ser[i].data[_j5].y[0]);\n              serH.push(ser[i].data[_j5].y[1]);\n\n              if (isBoxPlot) {\n                serM.push(ser[i].data[_j5].y[2]);\n                serL.push(ser[i].data[_j5].y[3]);\n                serC.push(ser[i].data[_j5].y[4]);\n              } else {\n                serL.push(ser[i].data[_j5].y[2]);\n                serC.push(ser[i].data[_j5].y[3]);\n              }\n            }\n          }\n        }\n\n        return {\n          o: serO,\n          h: serH,\n          m: serM,\n          l: serL,\n          c: serC\n        };\n      }\n    }, {\n      key: \"parseDataAxisCharts\",\n      value: function parseDataAxisCharts(ser) {\n        var _ser$,\n            _this = this;\n\n        var ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ctx;\n        var cnf = this.w.config;\n        var gl = this.w.globals;\n        var dt = new DateTime(ctx);\n        var xlabels = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice();\n        gl.isRangeBar = cnf.chart.type === 'rangeBar' && gl.isBarHorizontal;\n        gl.hasXaxisGroups = cnf.xaxis.type === 'category' && cnf.xaxis.group.groups.length > 0;\n\n        if (gl.hasXaxisGroups) {\n          gl.groups = cnf.xaxis.group.groups;\n        }\n\n        gl.hasSeriesGroups = (_ser$ = ser[0]) === null || _ser$ === void 0 ? void 0 : _ser$.group;\n\n        if (gl.hasSeriesGroups) {\n          var buckets = [];\n\n          var groups = _toConsumableArray(new Set(ser.map(function (s) {\n            return s.group;\n          })));\n\n          ser.forEach(function (s, i) {\n            var index = groups.indexOf(s.group);\n            if (!buckets[index]) buckets[index] = [];\n            buckets[index].push(s.name);\n          });\n          gl.seriesGroups = buckets;\n        }\n\n        var handleDates = function handleDates() {\n          for (var j = 0; j < xlabels.length; j++) {\n            if (typeof xlabels[j] === 'string') {\n              // user provided date strings\n              var isDate = dt.isValidDate(xlabels[j]);\n\n              if (isDate) {\n                _this.twoDSeriesX.push(dt.parseDate(xlabels[j]));\n              } else {\n                throw new Error('You have provided invalid Date format. Please provide a valid JavaScript Date');\n              }\n            } else {\n              // user provided timestamps\n              _this.twoDSeriesX.push(xlabels[j]);\n            }\n          }\n        };\n\n        for (var i = 0; i < ser.length; i++) {\n          this.twoDSeries = [];\n          this.twoDSeriesX = [];\n          this.threeDSeries = [];\n\n          if (typeof ser[i].data === 'undefined') {\n            console.error(\"It is a possibility that you may have not included 'data' property in series.\");\n            return;\n          }\n\n          if (cnf.chart.type === 'rangeBar' || cnf.chart.type === 'rangeArea' || ser[i].type === 'rangeBar' || ser[i].type === 'rangeArea') {\n            gl.isRangeData = true;\n\n            if (gl.isComboCharts) {\n              if (ser[i].type === 'rangeBar' || ser[i].type === 'rangeArea') {\n                this.handleRangeData(ser, i);\n              }\n            } else if (cnf.chart.type === 'rangeBar' || cnf.chart.type === 'rangeArea') {\n              this.handleRangeData(ser, i);\n            }\n          }\n\n          if (this.isMultiFormat()) {\n            if (this.isFormat2DArray()) {\n              this.handleFormat2DArray(ser, i);\n            } else if (this.isFormatXY()) {\n              this.handleFormatXY(ser, i);\n            }\n\n            if (cnf.chart.type === 'candlestick' || ser[i].type === 'candlestick' || cnf.chart.type === 'boxPlot' || ser[i].type === 'boxPlot') {\n              this.handleCandleStickBoxData(ser, i);\n            }\n\n            gl.series.push(this.twoDSeries);\n            gl.labels.push(this.twoDSeriesX);\n            gl.seriesX.push(this.twoDSeriesX);\n            gl.seriesGoals = this.seriesGoals;\n\n            if (i === this.activeSeriesIndex && !this.fallbackToCategory) {\n              gl.isXNumeric = true;\n            }\n          } else {\n            if (cnf.xaxis.type === 'datetime') {\n              // user didn't supplied [{x,y}] or [[x,y]], but single array in data.\n              // Also labels/categories were supplied differently\n              gl.isXNumeric = true;\n              handleDates();\n              gl.seriesX.push(this.twoDSeriesX);\n            } else if (cnf.xaxis.type === 'numeric') {\n              gl.isXNumeric = true;\n\n              if (xlabels.length > 0) {\n                this.twoDSeriesX = xlabels;\n                gl.seriesX.push(this.twoDSeriesX);\n              }\n            }\n\n            gl.labels.push(this.twoDSeriesX);\n            var singleArray = ser[i].data.map(function (d) {\n              return Utils$1.parseNumber(d);\n            });\n            gl.series.push(singleArray);\n          }\n\n          gl.seriesZ.push(this.threeDSeries);\n\n          if (ser[i].name !== undefined) {\n            gl.seriesNames.push(ser[i].name);\n          } else {\n            gl.seriesNames.push('series-' + parseInt(i + 1, 10));\n          } // overrided default color if user inputs color with series data\n\n\n          if (ser[i].color !== undefined) {\n            gl.seriesColors.push(ser[i].color);\n          } else {\n            gl.seriesColors.push(undefined);\n          }\n        }\n\n        return this.w;\n      }\n    }, {\n      key: \"parseDataNonAxisCharts\",\n      value: function parseDataNonAxisCharts(ser) {\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        gl.series = ser.slice();\n        gl.seriesNames = cnf.labels.slice();\n\n        for (var i = 0; i < gl.series.length; i++) {\n          if (gl.seriesNames[i] === undefined) {\n            gl.seriesNames.push('series-' + (i + 1));\n          }\n        }\n\n        return this.w;\n      }\n      /** User possibly set string categories in xaxis.categories or labels prop\n       * Or didn't set xaxis labels at all - in which case we manually do it.\n       * If user passed series data as [[3, 2], [4, 5]] or [{ x: 3, y: 55 }],\n       * this shouldn't be called\n       * @param {array} ser - the series which user passed to the config\n       */\n\n    }, {\n      key: \"handleExternalLabelsData\",\n      value: function handleExternalLabelsData(ser) {\n        var cnf = this.w.config;\n        var gl = this.w.globals;\n\n        if (cnf.xaxis.categories.length > 0) {\n          // user provided labels in xaxis.category prop\n          gl.labels = cnf.xaxis.categories;\n        } else if (cnf.labels.length > 0) {\n          // user provided labels in labels props\n          gl.labels = cnf.labels.slice();\n        } else if (this.fallbackToCategory) {\n          // user provided labels in x prop in [{ x: 3, y: 55 }] data, and those labels are already stored in gl.labels[0], so just re-arrange the gl.labels array\n          gl.labels = gl.labels[0];\n\n          if (gl.seriesRange.length) {\n            gl.seriesRange.map(function (srt) {\n              srt.forEach(function (sr) {\n                if (gl.labels.indexOf(sr.x) < 0 && sr.x) {\n                  gl.labels.push(sr.x);\n                }\n              });\n            }); // remove duplicate x-axis labels\n\n            gl.labels = Array.from(new Set(gl.labels.map(JSON.stringify)), JSON.parse);\n          }\n\n          if (cnf.xaxis.convertedCatToNumeric) {\n            var defaults = new Defaults(cnf);\n            defaults.convertCatToNumericXaxis(cnf, this.ctx, gl.seriesX[0]);\n\n            this._generateExternalLabels(ser);\n          }\n        } else {\n          this._generateExternalLabels(ser);\n        }\n      }\n    }, {\n      key: \"_generateExternalLabels\",\n      value: function _generateExternalLabels(ser) {\n        var gl = this.w.globals;\n        var cnf = this.w.config; // user didn't provided any labels, fallback to 1-2-3-4-5\n\n        var labelArr = [];\n\n        if (gl.axisCharts) {\n          if (gl.series.length > 0) {\n            if (this.isFormatXY()) {\n              // in case there is a combo chart (boxplot/scatter)\n              // and there are duplicated x values, we need to eliminate duplicates\n              var seriesDataFiltered = cnf.series.map(function (serie, s) {\n                return serie.data.filter(function (v, i, a) {\n                  return a.findIndex(function (t) {\n                    return t.x === v.x;\n                  }) === i;\n                });\n              });\n              var len = seriesDataFiltered.reduce(function (p, c, i, a) {\n                return a[p].length > c.length ? p : i;\n              }, 0);\n\n              for (var i = 0; i < seriesDataFiltered[len].length; i++) {\n                labelArr.push(i + 1);\n              }\n            } else {\n              for (var _i = 0; _i < gl.series[gl.maxValsInArrayIndex].length; _i++) {\n                labelArr.push(_i + 1);\n              }\n            }\n          }\n\n          gl.seriesX = []; // create gl.seriesX as it will be used in calculations of x positions\n\n          for (var _i2 = 0; _i2 < ser.length; _i2++) {\n            gl.seriesX.push(labelArr);\n          } // turn on the isXNumeric flag to allow minX and maxX to function properly\n\n\n          gl.isXNumeric = true;\n        } // no series to pull labels from, put a 0-10 series\n        // possibly, user collapsed all series. Hence we can't work with above calc\n\n\n        if (labelArr.length === 0) {\n          labelArr = gl.axisCharts ? [] : gl.series.map(function (gls, glsi) {\n            return glsi + 1;\n          });\n\n          for (var _i3 = 0; _i3 < ser.length; _i3++) {\n            gl.seriesX.push(labelArr);\n          }\n        } // Finally, pass the labelArr in gl.labels which will be printed on x-axis\n\n\n        gl.labels = labelArr;\n\n        if (cnf.xaxis.convertedCatToNumeric) {\n          gl.categoryLabels = labelArr.map(function (l) {\n            return cnf.xaxis.labels.formatter(l);\n          });\n        } // Turn on this global flag to indicate no labels were provided by user\n\n\n        gl.noLabelsProvided = true;\n      } // Segregate user provided data into appropriate vars\n\n    }, {\n      key: \"parseData\",\n      value: function parseData(ser) {\n        var w = this.w;\n        var cnf = w.config;\n        var gl = w.globals;\n        this.excludeCollapsedSeriesInYAxis(); // If we detected string in X prop of series, we fallback to category x-axis\n\n        this.fallbackToCategory = false;\n        this.ctx.core.resetGlobals();\n        this.ctx.core.isMultipleY();\n\n        if (gl.axisCharts) {\n          // axisCharts includes line / area / column / scatter\n          this.parseDataAxisCharts(ser);\n          this.coreUtils.getLargestSeries();\n        } else {\n          // non-axis charts are pie / donut\n          this.parseDataNonAxisCharts(ser);\n        } // set Null values to 0 in all series when user hides/shows some series\n\n\n        if (cnf.chart.stacked) {\n          var series = new Series(this.ctx);\n          gl.series = series.setNullSeriesToZeroValues(gl.series);\n        }\n\n        this.coreUtils.getSeriesTotals();\n\n        if (gl.axisCharts) {\n          gl.stackedSeriesTotals = this.coreUtils.getStackedSeriesTotals();\n        }\n\n        this.coreUtils.getPercentSeries();\n\n        if (!gl.dataFormatXNumeric && (!gl.isXNumeric || cnf.xaxis.type === 'numeric' && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0)) {\n          // x-axis labels couldn't be detected; hence try searching every option in config\n          this.handleExternalLabelsData(ser);\n        } // check for multiline xaxis\n\n\n        var catLabels = this.coreUtils.getCategoryLabels(gl.labels);\n\n        for (var l = 0; l < catLabels.length; l++) {\n          if (Array.isArray(catLabels[l])) {\n            gl.isMultiLineX = true;\n            break;\n          }\n        }\n      }\n    }, {\n      key: \"excludeCollapsedSeriesInYAxis\",\n      value: function excludeCollapsedSeriesInYAxis() {\n        var _this2 = this;\n\n        var w = this.w;\n        w.globals.ignoreYAxisIndexes = w.globals.collapsedSeries.map(function (collapsed, i) {\n          // fix issue #1215\n          // if stacked, not returning collapsed.index to preserve yaxis\n          if (_this2.w.globals.isMultipleYAxis && !w.config.chart.stacked) {\n            return collapsed.index;\n          }\n        });\n      }\n    }]);\n\n    return Data;\n  }();\n\n  var AxesUtils = /*#__PURE__*/function () {\n    function AxesUtils(ctx) {\n      _classCallCheck(this, AxesUtils);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    } // Based on the formatter function, get the label text and position\n\n\n    _createClass(AxesUtils, [{\n      key: \"getLabel\",\n      value: function getLabel(labels, timescaleLabels, x, i) {\n        var drawnLabels = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];\n        var fontSize = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '12px';\n        var isLeafGroup = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true;\n        var w = this.w;\n        var rawLabel = typeof labels[i] === 'undefined' ? '' : labels[i];\n        var label = rawLabel;\n        var xlbFormatter = w.globals.xLabelFormatter;\n        var customFormatter = w.config.xaxis.labels.formatter;\n        var isBold = false;\n        var xFormat = new Formatters(this.ctx);\n        var timestamp = rawLabel;\n\n        if (isLeafGroup) {\n          label = xFormat.xLabelFormat(xlbFormatter, rawLabel, timestamp, {\n            i: i,\n            dateFormatter: new DateTime(this.ctx).formatDate,\n            w: w\n          });\n\n          if (customFormatter !== undefined) {\n            label = customFormatter(rawLabel, labels[i], {\n              i: i,\n              dateFormatter: new DateTime(this.ctx).formatDate,\n              w: w\n            });\n          }\n        }\n\n        var determineHighestUnit = function determineHighestUnit(unit) {\n          var highestUnit = null;\n          timescaleLabels.forEach(function (t) {\n            if (t.unit === 'month') {\n              highestUnit = 'year';\n            } else if (t.unit === 'day') {\n              highestUnit = 'month';\n            } else if (t.unit === 'hour') {\n              highestUnit = 'day';\n            } else if (t.unit === 'minute') {\n              highestUnit = 'hour';\n            }\n          });\n          return highestUnit === unit;\n        };\n\n        if (timescaleLabels.length > 0) {\n          isBold = determineHighestUnit(timescaleLabels[i].unit);\n          x = timescaleLabels[i].position;\n          label = timescaleLabels[i].value;\n        } else {\n          if (w.config.xaxis.type === 'datetime' && customFormatter === undefined) {\n            label = '';\n          }\n        }\n\n        if (typeof label === 'undefined') label = '';\n        label = Array.isArray(label) ? label : label.toString();\n        var graphics = new Graphics(this.ctx);\n        var textRect = {};\n\n        if (w.globals.rotateXLabels && isLeafGroup) {\n          textRect = graphics.getTextRects(label, parseInt(fontSize, 10), null, \"rotate(\".concat(w.config.xaxis.labels.rotate, \" 0 0)\"), false);\n        } else {\n          textRect = graphics.getTextRects(label, parseInt(fontSize, 10));\n        }\n\n        var allowDuplicatesInTimeScale = !w.config.xaxis.labels.showDuplicates && this.ctx.timeScale;\n\n        if (!Array.isArray(label) && (label.indexOf('NaN') === 0 || label.toLowerCase().indexOf('invalid') === 0 || label.toLowerCase().indexOf('infinity') >= 0 || drawnLabels.indexOf(label) >= 0 && allowDuplicatesInTimeScale)) {\n          label = '';\n        }\n\n        return {\n          x: x,\n          text: label,\n          textRect: textRect,\n          isBold: isBold\n        };\n      }\n    }, {\n      key: \"checkLabelBasedOnTickamount\",\n      value: function checkLabelBasedOnTickamount(i, label, labelsLen) {\n        var w = this.w;\n        var ticks = w.config.xaxis.tickAmount;\n        if (ticks === 'dataPoints') ticks = Math.round(w.globals.gridWidth / 120);\n        if (ticks > labelsLen) return label;\n        var tickMultiple = Math.round(labelsLen / (ticks + 1));\n\n        if (i % tickMultiple === 0) {\n          return label;\n        } else {\n          label.text = '';\n        }\n\n        return label;\n      }\n    }, {\n      key: \"checkForOverflowingLabels\",\n      value: function checkForOverflowingLabels(i, label, labelsLen, drawnLabels, drawnLabelsRects) {\n        var w = this.w;\n\n        if (i === 0) {\n          // check if first label is being truncated\n          if (w.globals.skipFirstTimelinelabel) {\n            label.text = '';\n          }\n        }\n\n        if (i === labelsLen - 1) {\n          // check if last label is being truncated\n          if (w.globals.skipLastTimelinelabel) {\n            label.text = '';\n          }\n        }\n\n        if (w.config.xaxis.labels.hideOverlappingLabels && drawnLabels.length > 0) {\n          var prev = drawnLabelsRects[drawnLabelsRects.length - 1];\n\n          if (label.x < prev.textRect.width / (w.globals.rotateXLabels ? Math.abs(w.config.xaxis.labels.rotate) / 12 : 1.01) + prev.x) {\n            label.text = '';\n          }\n        }\n\n        return label;\n      }\n    }, {\n      key: \"checkForReversedLabels\",\n      value: function checkForReversedLabels(i, labels) {\n        var w = this.w;\n\n        if (w.config.yaxis[i] && w.config.yaxis[i].reversed) {\n          labels.reverse();\n        }\n\n        return labels;\n      }\n    }, {\n      key: \"isYAxisHidden\",\n      value: function isYAxisHidden(index) {\n        var w = this.w;\n        var coreUtils = new CoreUtils(this.ctx);\n        return !w.config.yaxis[index].show || !w.config.yaxis[index].showForNullSeries && coreUtils.isSeriesNull(index) && w.globals.collapsedSeriesIndices.indexOf(index) === -1;\n      } // get the label color for y-axis\n      // realIndex is the actual series index, while i is the tick Index\n\n    }, {\n      key: \"getYAxisForeColor\",\n      value: function getYAxisForeColor(yColors, realIndex) {\n        var w = this.w;\n\n        if (Array.isArray(yColors) && w.globals.yAxisScale[realIndex]) {\n          this.ctx.theme.pushExtraColors(yColors, w.globals.yAxisScale[realIndex].result.length, false);\n        }\n\n        return yColors;\n      }\n    }, {\n      key: \"drawYAxisTicks\",\n      value: function drawYAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx); // initial label position = 0;\n\n        var t = w.globals.translateY;\n\n        if (axisTicks.show && tickAmount > 0) {\n          if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width;\n\n          for (var i = tickAmount; i >= 0; i--) {\n            var tY = t + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY - 1;\n\n            if (w.globals.isBarHorizontal) {\n              tY = labelsDivider * i;\n            }\n\n            if (w.config.chart.type === 'heatmap') {\n              tY = tY + labelsDivider / 2;\n            }\n\n            var elTick = graphics.drawLine(x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX, tY + axisTicks.offsetY, x + axisBorder.offsetX + axisTicks.offsetX, tY + axisTicks.offsetY, axisTicks.color);\n            elYaxis.add(elTick);\n            t = t + labelsDivider;\n          }\n        }\n      }\n    }]);\n\n    return AxesUtils;\n  }();\n\n  var Exports = /*#__PURE__*/function () {\n    function Exports(ctx) {\n      _classCallCheck(this, Exports);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(Exports, [{\n      key: \"scaleSvgNode\",\n      value: function scaleSvgNode(svg, scale) {\n        // get current both width and height of the svg\n        var svgWidth = parseFloat(svg.getAttributeNS(null, 'width'));\n        var svgHeight = parseFloat(svg.getAttributeNS(null, 'height')); // set new width and height based on the scale\n\n        svg.setAttributeNS(null, 'width', svgWidth * scale);\n        svg.setAttributeNS(null, 'height', svgHeight * scale);\n        svg.setAttributeNS(null, 'viewBox', '0 0 ' + svgWidth + ' ' + svgHeight);\n      }\n    }, {\n      key: \"fixSvgStringForIe11\",\n      value: function fixSvgStringForIe11(svgData) {\n        // IE11 generates broken SVG that we have to fix by using regex\n        if (!Utils$1.isIE11()) {\n          // not IE11 - noop\n          return svgData.replace(/&nbsp;/g, '&#160;');\n        } // replace second occurrence of \"xmlns\" attribute with \"xmlns:xlink\" with correct url + add xmlns:svgjs\n\n\n        var nXmlnsSeen = 0;\n        var result = svgData.replace(/xmlns=\"http:\\/\\/www.w3.org\\/2000\\/svg\"/g, function (match) {\n          nXmlnsSeen++;\n          return nXmlnsSeen === 2 ? 'xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:svgjs=\"http://svgjs.dev\"' : match;\n        }); // remove the invalid empty namespace declarations\n\n        result = result.replace(/xmlns:NS\\d+=\"\"/g, ''); // remove these broken namespaces from attributes\n\n        result = result.replace(/NS\\d+:(\\w+:\\w+=\")/g, '$1');\n        return result;\n      }\n    }, {\n      key: \"getSvgString\",\n      value: function getSvgString(scale) {\n        if (scale == undefined) {\n          scale = 1; // if no scale is specified, don't scale...\n        }\n\n        var svgString = this.w.globals.dom.Paper.svg(); // in case the scale is different than 1, the svg needs to be rescaled\n\n        if (scale !== 1) {\n          // clone the svg node so it remains intact in the UI\n          var svgNode = this.w.globals.dom.Paper.node.cloneNode(true); // scale the image\n\n          this.scaleSvgNode(svgNode, scale); // get the string representation of the svgNode\n\n          svgString = new XMLSerializer().serializeToString(svgNode);\n        }\n\n        return this.fixSvgStringForIe11(svgString);\n      }\n    }, {\n      key: \"cleanup\",\n      value: function cleanup() {\n        var w = this.w; // hide some elements to avoid printing them on exported svg\n\n        var xcrosshairs = w.globals.dom.baseEl.getElementsByClassName('apexcharts-xcrosshairs');\n        var ycrosshairs = w.globals.dom.baseEl.getElementsByClassName('apexcharts-ycrosshairs');\n        var zoomSelectionRects = w.globals.dom.baseEl.querySelectorAll('.apexcharts-zoom-rect, .apexcharts-selection-rect');\n        Array.prototype.forEach.call(zoomSelectionRects, function (z) {\n          z.setAttribute('width', 0);\n        });\n\n        if (xcrosshairs && xcrosshairs[0]) {\n          xcrosshairs[0].setAttribute('x', -500);\n          xcrosshairs[0].setAttribute('x1', -500);\n          xcrosshairs[0].setAttribute('x2', -500);\n        }\n\n        if (ycrosshairs && ycrosshairs[0]) {\n          ycrosshairs[0].setAttribute('y', -100);\n          ycrosshairs[0].setAttribute('y1', -100);\n          ycrosshairs[0].setAttribute('y2', -100);\n        }\n      }\n    }, {\n      key: \"svgUrl\",\n      value: function svgUrl() {\n        this.cleanup();\n        var svgData = this.getSvgString();\n        var svgBlob = new Blob([svgData], {\n          type: 'image/svg+xml;charset=utf-8'\n        });\n        return URL.createObjectURL(svgBlob);\n      }\n    }, {\n      key: \"dataURI\",\n      value: function dataURI(options) {\n        var _this = this;\n\n        return new Promise(function (resolve) {\n          var w = _this.w;\n          var scale = options ? options.scale || options.width / w.globals.svgWidth : 1;\n\n          _this.cleanup();\n\n          var canvas = document.createElement('canvas');\n          canvas.width = w.globals.svgWidth * scale;\n          canvas.height = parseInt(w.globals.dom.elWrap.style.height, 10) * scale; // because of resizeNonAxisCharts\n\n          var canvasBg = w.config.chart.background === 'transparent' ? '#fff' : w.config.chart.background;\n          var ctx = canvas.getContext('2d');\n          ctx.fillStyle = canvasBg;\n          ctx.fillRect(0, 0, canvas.width * scale, canvas.height * scale);\n\n          var svgData = _this.getSvgString(scale);\n\n          if (window.canvg && Utils$1.isIE11()) {\n            // use canvg as a polyfill to workaround ie11 considering a canvas with loaded svg 'unsafe'\n            // without ignoreClear we lose our background color; without ignoreDimensions some grid lines become invisible\n            var v = window.canvg.Canvg.fromString(ctx, svgData, {\n              ignoreClear: true,\n              ignoreDimensions: true\n            }); // render the svg to canvas\n\n            v.start();\n            var blob = canvas.msToBlob(); // dispose - missing this will cause a memory leak\n\n            v.stop();\n            resolve({\n              blob: blob\n            });\n          } else {\n            var svgUrl = 'data:image/svg+xml,' + encodeURIComponent(svgData);\n            var img = new Image();\n            img.crossOrigin = 'anonymous';\n\n            img.onload = function () {\n              ctx.drawImage(img, 0, 0);\n\n              if (canvas.msToBlob) {\n                // IE and Edge can't navigate to data urls, so we return the blob instead\n                var _blob = canvas.msToBlob();\n\n                resolve({\n                  blob: _blob\n                });\n              } else {\n                var imgURI = canvas.toDataURL('image/png');\n                resolve({\n                  imgURI: imgURI\n                });\n              }\n            };\n\n            img.src = svgUrl;\n          }\n        });\n      }\n    }, {\n      key: \"exportToSVG\",\n      value: function exportToSVG() {\n        this.triggerDownload(this.svgUrl(), this.w.config.chart.toolbar.export.svg.filename, '.svg');\n      }\n    }, {\n      key: \"exportToPng\",\n      value: function exportToPng() {\n        var _this2 = this;\n\n        this.dataURI().then(function (_ref) {\n          var imgURI = _ref.imgURI,\n              blob = _ref.blob;\n\n          if (blob) {\n            navigator.msSaveOrOpenBlob(blob, _this2.w.globals.chartID + '.png');\n          } else {\n            _this2.triggerDownload(imgURI, _this2.w.config.chart.toolbar.export.png.filename, '.png');\n          }\n        });\n      }\n    }, {\n      key: \"exportToCSV\",\n      value: function exportToCSV(_ref2) {\n        var _this3 = this;\n\n        var series = _ref2.series,\n            fileName = _ref2.fileName,\n            _ref2$columnDelimiter = _ref2.columnDelimiter,\n            columnDelimiter = _ref2$columnDelimiter === void 0 ? ',' : _ref2$columnDelimiter,\n            _ref2$lineDelimiter = _ref2.lineDelimiter,\n            lineDelimiter = _ref2$lineDelimiter === void 0 ? '\\n' : _ref2$lineDelimiter;\n        var w = this.w;\n        if (!series) series = w.config.series;\n        var columns = [];\n        var rows = [];\n        var result = '';\n        var universalBOM = \"\\uFEFF\";\n        var gSeries = w.globals.series.map(function (s, i) {\n          return w.globals.collapsedSeriesIndices.indexOf(i) === -1 ? s : [];\n        });\n\n        var isTimeStamp = function isTimeStamp(num) {\n          return w.config.xaxis.type === 'datetime' && String(num).length >= 10;\n        };\n\n        var seriesMaxDataLength = Math.max.apply(Math, _toConsumableArray(series.map(function (s) {\n          return s.data ? s.data.length : 0;\n        })));\n        var dataFormat = new Data(this.ctx);\n        var axesUtils = new AxesUtils(this.ctx);\n\n        var getCat = function getCat(i) {\n          var cat = ''; // pie / donut/ radial\n\n          if (!w.globals.axisCharts) {\n            cat = w.config.labels[i];\n          } else {\n            // xy charts\n            // non datetime\n            if (w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) {\n              if (w.globals.isBarHorizontal) {\n                var lbFormatter = w.globals.yLabelFormatters[0];\n                var sr = new Series(_this3.ctx);\n                var activeSeries = sr.getActiveConfigSeriesIndex();\n                cat = lbFormatter(w.globals.labels[i], {\n                  seriesIndex: activeSeries,\n                  dataPointIndex: i,\n                  w: w\n                });\n              } else {\n                cat = axesUtils.getLabel(w.globals.labels, w.globals.timescaleLabels, 0, i).text;\n              }\n            } // datetime, but labels specified in categories or labels\n\n\n            if (w.config.xaxis.type === 'datetime') {\n              if (w.config.xaxis.categories.length) {\n                cat = w.config.xaxis.categories[i];\n              } else if (w.config.labels.length) {\n                cat = w.config.labels[i];\n              }\n            }\n          }\n\n          if (Array.isArray(cat)) {\n            cat = cat.join(' ');\n          }\n\n          return Utils$1.isNumber(cat) ? cat : cat.split(columnDelimiter).join('');\n        }; // Fix https://github.com/apexcharts/apexcharts.js/issues/3365\n\n\n        var getEmptyDataForCsvColumn = function getEmptyDataForCsvColumn() {\n          return _toConsumableArray(Array(seriesMaxDataLength)).map(function () {\n            return '';\n          });\n        };\n\n        var handleAxisRowsColumns = function handleAxisRowsColumns(s, sI) {\n          if (columns.length && sI === 0) {\n            // It's the first series.  Go ahead and create the first row with header information.\n            rows.push(columns.join(columnDelimiter));\n          }\n\n          if (s.data) {\n            // Use the data we have, or generate a properly sized empty array with empty data if some data is missing.\n            s.data = s.data.length && s.data || getEmptyDataForCsvColumn();\n\n            for (var i = 0; i < s.data.length; i++) {\n              // Reset the columns array so that we can start building columns for this row.\n              columns = [];\n              var cat = getCat(i);\n\n              if (!cat) {\n                if (dataFormat.isFormatXY()) {\n                  cat = series[sI].data[i].x;\n                } else if (dataFormat.isFormat2DArray()) {\n                  cat = series[sI].data[i] ? series[sI].data[i][0] : '';\n                }\n              }\n\n              if (sI === 0) {\n                // It's the first series.  Also handle the category.\n                columns.push(isTimeStamp(cat) ? w.config.chart.toolbar.export.csv.dateFormatter(cat) : Utils$1.isNumber(cat) ? cat : cat.split(columnDelimiter).join(''));\n\n                for (var ci = 0; ci < w.globals.series.length; ci++) {\n                  if (dataFormat.isFormatXY()) {\n                    columns.push(series[ci].data[i].y);\n                  } else {\n                    columns.push(gSeries[ci][i]);\n                  }\n                }\n              }\n\n              if (w.config.chart.type === 'candlestick' || s.type && s.type === 'candlestick') {\n                columns.pop();\n                columns.push(w.globals.seriesCandleO[sI][i]);\n                columns.push(w.globals.seriesCandleH[sI][i]);\n                columns.push(w.globals.seriesCandleL[sI][i]);\n                columns.push(w.globals.seriesCandleC[sI][i]);\n              }\n\n              if (w.config.chart.type === 'boxPlot' || s.type && s.type === 'boxPlot') {\n                columns.pop();\n                columns.push(w.globals.seriesCandleO[sI][i]);\n                columns.push(w.globals.seriesCandleH[sI][i]);\n                columns.push(w.globals.seriesCandleM[sI][i]);\n                columns.push(w.globals.seriesCandleL[sI][i]);\n                columns.push(w.globals.seriesCandleC[sI][i]);\n              }\n\n              if (w.config.chart.type === 'rangeBar') {\n                columns.pop();\n                columns.push(w.globals.seriesRangeStart[sI][i]);\n                columns.push(w.globals.seriesRangeEnd[sI][i]);\n              }\n\n              if (columns.length) {\n                rows.push(columns.join(columnDelimiter));\n              }\n            }\n          }\n        };\n\n        columns.push(w.config.chart.toolbar.export.csv.headerCategory);\n\n        if (w.config.chart.type === 'boxPlot') {\n          columns.push('minimum');\n          columns.push('q1');\n          columns.push('median');\n          columns.push('q3');\n          columns.push('maximum');\n        } else if (w.config.chart.type === 'candlestick') {\n          columns.push('open');\n          columns.push('high');\n          columns.push('low');\n          columns.push('close');\n        } else if (w.config.chart.type === 'rangeBar') {\n          columns.push('minimum');\n          columns.push('maximum');\n        } else {\n          series.map(function (s, sI) {\n            var sname = (s.name ? s.name : \"series-\".concat(sI)) + '';\n\n            if (w.globals.axisCharts) {\n              columns.push(sname.split(columnDelimiter).join('') ? sname.split(columnDelimiter).join('') : \"series-\".concat(sI));\n            }\n          });\n        }\n\n        if (!w.globals.axisCharts) {\n          columns.push(w.config.chart.toolbar.export.csv.headerValue);\n          rows.push(columns.join(columnDelimiter));\n        }\n\n        series.map(function (s, sI) {\n          if (w.globals.axisCharts) {\n            handleAxisRowsColumns(s, sI);\n          } else {\n            columns = [];\n            columns.push(w.globals.labels[sI].split(columnDelimiter).join(''));\n            columns.push(gSeries[sI]);\n            rows.push(columns.join(columnDelimiter));\n          }\n        });\n        result += rows.join(lineDelimiter);\n        this.triggerDownload('data:text/csv; charset=utf-8,' + encodeURIComponent(universalBOM + result), fileName ? fileName : w.config.chart.toolbar.export.csv.filename, '.csv');\n      }\n    }, {\n      key: \"triggerDownload\",\n      value: function triggerDownload(href, filename, ext) {\n        var downloadLink = document.createElement('a');\n        downloadLink.href = href;\n        downloadLink.download = (filename ? filename : this.w.globals.chartID) + ext;\n        document.body.appendChild(downloadLink);\n        downloadLink.click();\n        document.body.removeChild(downloadLink);\n      }\n    }]);\n\n    return Exports;\n  }();\n\n  /**\n   * ApexCharts XAxis Class for drawing X-Axis.\n   *\n   * @module XAxis\n   **/\n\n  var XAxis = /*#__PURE__*/function () {\n    function XAxis(ctx, elgrid) {\n      _classCallCheck(this, XAxis);\n\n      this.ctx = ctx;\n      this.elgrid = elgrid;\n      this.w = ctx.w;\n      var w = this.w;\n      this.axesUtils = new AxesUtils(ctx);\n      this.xaxisLabels = w.globals.labels.slice();\n\n      if (w.globals.timescaleLabels.length > 0 && !w.globals.isBarHorizontal) {\n        //  timeline labels are there and chart is not rangeabr timeline\n        this.xaxisLabels = w.globals.timescaleLabels.slice();\n      }\n\n      if (w.config.xaxis.overwriteCategories) {\n        this.xaxisLabels = w.config.xaxis.overwriteCategories;\n      }\n\n      this.drawnLabels = [];\n      this.drawnLabelsRects = [];\n\n      if (w.config.xaxis.position === 'top') {\n        this.offY = 0;\n      } else {\n        this.offY = w.globals.gridHeight + 1;\n      }\n\n      this.offY = this.offY + w.config.xaxis.axisBorder.offsetY;\n      this.isCategoryBarHorizontal = w.config.chart.type === 'bar' && w.config.plotOptions.bar.horizontal;\n      this.xaxisFontSize = w.config.xaxis.labels.style.fontSize;\n      this.xaxisFontFamily = w.config.xaxis.labels.style.fontFamily;\n      this.xaxisForeColors = w.config.xaxis.labels.style.colors;\n      this.xaxisBorderWidth = w.config.xaxis.axisBorder.width;\n\n      if (this.isCategoryBarHorizontal) {\n        this.xaxisBorderWidth = w.config.yaxis[0].axisBorder.width.toString();\n      }\n\n      if (this.xaxisBorderWidth.indexOf('%') > -1) {\n        this.xaxisBorderWidth = w.globals.gridWidth * parseInt(this.xaxisBorderWidth, 10) / 100;\n      } else {\n        this.xaxisBorderWidth = parseInt(this.xaxisBorderWidth, 10);\n      }\n\n      this.xaxisBorderHeight = w.config.xaxis.axisBorder.height; // For bars, we will only consider single y xais,\n      // as we are not providing multiple yaxis for bar charts\n\n      this.yaxis = w.config.yaxis[0];\n    }\n\n    _createClass(XAxis, [{\n      key: \"drawXaxis\",\n      value: function drawXaxis() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var elXaxis = graphics.group({\n          class: 'apexcharts-xaxis',\n          transform: \"translate(\".concat(w.config.xaxis.offsetX, \", \").concat(w.config.xaxis.offsetY, \")\")\n        });\n        var elXaxisTexts = graphics.group({\n          class: 'apexcharts-xaxis-texts-g',\n          transform: \"translate(\".concat(w.globals.translateXAxisX, \", \").concat(w.globals.translateXAxisY, \")\")\n        });\n        elXaxis.add(elXaxisTexts);\n        var labels = [];\n\n        for (var i = 0; i < this.xaxisLabels.length; i++) {\n          labels.push(this.xaxisLabels[i]);\n        }\n\n        this.drawXAxisLabelAndGroup(true, graphics, elXaxisTexts, labels, w.globals.isXNumeric, function (i, colWidth) {\n          return colWidth;\n        });\n\n        if (w.globals.hasXaxisGroups) {\n          var labelsGroup = w.globals.groups;\n          labels = [];\n\n          for (var _i = 0; _i < labelsGroup.length; _i++) {\n            labels.push(labelsGroup[_i].title);\n          }\n\n          var overwriteStyles = {};\n\n          if (w.config.xaxis.group.style) {\n            overwriteStyles.xaxisFontSize = w.config.xaxis.group.style.fontSize;\n            overwriteStyles.xaxisFontFamily = w.config.xaxis.group.style.fontFamily;\n            overwriteStyles.xaxisForeColors = w.config.xaxis.group.style.colors;\n            overwriteStyles.fontWeight = w.config.xaxis.group.style.fontWeight;\n            overwriteStyles.cssClass = w.config.xaxis.group.style.cssClass;\n          }\n\n          this.drawXAxisLabelAndGroup(false, graphics, elXaxisTexts, labels, false, function (i, colWidth) {\n            return labelsGroup[i].cols * colWidth;\n          }, overwriteStyles);\n        }\n\n        if (w.config.xaxis.title.text !== undefined) {\n          var elXaxisTitle = graphics.group({\n            class: 'apexcharts-xaxis-title'\n          });\n          var elXAxisTitleText = graphics.drawText({\n            x: w.globals.gridWidth / 2 + w.config.xaxis.title.offsetX,\n            y: this.offY + parseFloat(this.xaxisFontSize) + (w.config.xaxis.position === 'bottom' ? w.globals.xAxisLabelsHeight : -w.globals.xAxisLabelsHeight - 10) + w.config.xaxis.title.offsetY,\n            text: w.config.xaxis.title.text,\n            textAnchor: 'middle',\n            fontSize: w.config.xaxis.title.style.fontSize,\n            fontFamily: w.config.xaxis.title.style.fontFamily,\n            fontWeight: w.config.xaxis.title.style.fontWeight,\n            foreColor: w.config.xaxis.title.style.color,\n            cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass\n          });\n          elXaxisTitle.add(elXAxisTitleText);\n          elXaxis.add(elXaxisTitle);\n        }\n\n        if (w.config.xaxis.axisBorder.show) {\n          var offX = w.globals.barPadForNumericAxis;\n          var elHorzLine = graphics.drawLine(w.globals.padHorizontal + w.config.xaxis.axisBorder.offsetX - offX, this.offY, this.xaxisBorderWidth + offX, this.offY, w.config.xaxis.axisBorder.color, 0, this.xaxisBorderHeight);\n\n          if (this.elgrid && this.elgrid.elGridBorders && w.config.grid.show) {\n            this.elgrid.elGridBorders.add(elHorzLine);\n          } else {\n            elXaxis.add(elHorzLine);\n          }\n        }\n\n        return elXaxis;\n      }\n    }, {\n      key: \"drawXAxisLabelAndGroup\",\n      value: function drawXAxisLabelAndGroup(isLeafGroup, graphics, elXaxisTexts, labels, isXNumeric, colWidthCb) {\n        var _this = this;\n\n        var overwriteStyles = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {};\n        var drawnLabels = [];\n        var drawnLabelsRects = [];\n        var w = this.w;\n        var xaxisFontSize = overwriteStyles.xaxisFontSize || this.xaxisFontSize;\n        var xaxisFontFamily = overwriteStyles.xaxisFontFamily || this.xaxisFontFamily;\n        var xaxisForeColors = overwriteStyles.xaxisForeColors || this.xaxisForeColors;\n        var fontWeight = overwriteStyles.fontWeight || w.config.xaxis.labels.style.fontWeight;\n        var cssClass = overwriteStyles.cssClass || w.config.xaxis.labels.style.cssClass;\n        var colWidth; // initial x Position (keep adding column width in the loop)\n\n        var xPos = w.globals.padHorizontal;\n        var labelsLen = labels.length;\n        /**\n         * labelsLen can be different (whether you are drawing x-axis labels or x-axis group labels)\n         * hence, we introduce dataPoints to be consistent.\n         * Also, in datetime/numeric xaxis, dataPoints can be misleading, so we resort to labelsLen for such xaxis type\n         */\n\n        var dataPoints = w.config.xaxis.type === 'category' ? w.globals.dataPoints : labelsLen; // when all series are collapsed, fixes #3381\n\n        if (dataPoints === 0 && labelsLen > dataPoints) dataPoints = labelsLen;\n\n        if (isXNumeric) {\n          var len = dataPoints > 1 ? dataPoints - 1 : dataPoints;\n          colWidth = w.globals.gridWidth / len;\n          xPos = xPos + colWidthCb(0, colWidth) / 2 + w.config.xaxis.labels.offsetX;\n        } else {\n          colWidth = w.globals.gridWidth / dataPoints;\n          xPos = xPos + colWidthCb(0, colWidth) + w.config.xaxis.labels.offsetX;\n        }\n\n        var _loop = function _loop(i) {\n          var x = xPos - colWidthCb(i, colWidth) / 2 + w.config.xaxis.labels.offsetX;\n\n          if (i === 0 && labelsLen === 1 && colWidth / 2 === xPos && dataPoints === 1) {\n            // single datapoint\n            x = w.globals.gridWidth / 2;\n          }\n\n          var label = _this.axesUtils.getLabel(labels, w.globals.timescaleLabels, x, i, drawnLabels, xaxisFontSize, isLeafGroup);\n\n          var offsetYCorrection = 28;\n\n          if (w.globals.rotateXLabels && isLeafGroup) {\n            offsetYCorrection = 22;\n          }\n\n          if (w.config.xaxis.title.text && w.config.xaxis.position === 'top') {\n            offsetYCorrection += parseFloat(w.config.xaxis.title.style.fontSize) + 2;\n          }\n\n          if (!isLeafGroup) {\n            offsetYCorrection = offsetYCorrection + parseFloat(xaxisFontSize) + (w.globals.xAxisLabelsHeight - w.globals.xAxisGroupLabelsHeight) + (w.globals.rotateXLabels ? 10 : 0);\n          }\n\n          var isCategoryTickAmounts = typeof w.config.xaxis.tickAmount !== 'undefined' && w.config.xaxis.tickAmount !== 'dataPoints' && w.config.xaxis.type !== 'datetime';\n\n          if (isCategoryTickAmounts) {\n            label = _this.axesUtils.checkLabelBasedOnTickamount(i, label, labelsLen);\n          } else {\n            label = _this.axesUtils.checkForOverflowingLabels(i, label, labelsLen, drawnLabels, drawnLabelsRects);\n          }\n\n          var getCatForeColor = function getCatForeColor() {\n            return isLeafGroup && w.config.xaxis.convertedCatToNumeric ? xaxisForeColors[w.globals.minX + i - 1] : xaxisForeColors[i];\n          };\n\n          if (w.config.xaxis.labels.show) {\n            var elText = graphics.drawText({\n              x: label.x,\n              y: _this.offY + w.config.xaxis.labels.offsetY + offsetYCorrection - (w.config.xaxis.position === 'top' ? w.globals.xAxisHeight + w.config.xaxis.axisTicks.height - 2 : 0),\n              text: label.text,\n              textAnchor: 'middle',\n              fontWeight: label.isBold ? 600 : fontWeight,\n              fontSize: xaxisFontSize,\n              fontFamily: xaxisFontFamily,\n              foreColor: Array.isArray(xaxisForeColors) ? getCatForeColor() : xaxisForeColors,\n              isPlainText: false,\n              cssClass: (isLeafGroup ? 'apexcharts-xaxis-label ' : 'apexcharts-xaxis-group-label ') + cssClass\n            });\n            elXaxisTexts.add(elText);\n            elText.on('click', function (e) {\n              if (typeof w.config.chart.events.xAxisLabelClick === 'function') {\n                var opts = Object.assign({}, w, {\n                  labelIndex: i\n                });\n                w.config.chart.events.xAxisLabelClick(e, _this.ctx, opts);\n              }\n            });\n\n            if (isLeafGroup) {\n              var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title');\n              elTooltipTitle.textContent = Array.isArray(label.text) ? label.text.join(' ') : label.text;\n              elText.node.appendChild(elTooltipTitle);\n\n              if (label.text !== '') {\n                drawnLabels.push(label.text);\n                drawnLabelsRects.push(label);\n              }\n            }\n          }\n\n          if (i < labelsLen - 1) {\n            xPos = xPos + colWidthCb(i + 1, colWidth);\n          }\n        };\n\n        for (var i = 0; i <= labelsLen - 1; i++) {\n          _loop(i);\n        }\n      } // this actually becomes the vertical axis (for bar charts)\n\n    }, {\n      key: \"drawXaxisInversed\",\n      value: function drawXaxisInversed(realIndex) {\n        var _this2 = this;\n\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var translateYAxisX = w.config.yaxis[0].opposite ? w.globals.translateYAxisX[realIndex] : 0;\n        var elYaxis = graphics.group({\n          class: 'apexcharts-yaxis apexcharts-xaxis-inversed',\n          rel: realIndex\n        });\n        var elYaxisTexts = graphics.group({\n          class: 'apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g',\n          transform: 'translate(' + translateYAxisX + ', 0)'\n        });\n        elYaxis.add(elYaxisTexts);\n        var colHeight; // initial x Position (keep adding column width in the loop)\n\n        var yPos;\n        var labels = [];\n\n        if (w.config.yaxis[realIndex].show) {\n          for (var i = 0; i < this.xaxisLabels.length; i++) {\n            labels.push(this.xaxisLabels[i]);\n          }\n        }\n\n        colHeight = w.globals.gridHeight / labels.length;\n        yPos = -(colHeight / 2.2);\n        var lbFormatter = w.globals.yLabelFormatters[0];\n        var ylabels = w.config.yaxis[0].labels;\n\n        if (ylabels.show) {\n          var _loop2 = function _loop2(_i2) {\n            var label = typeof labels[_i2] === 'undefined' ? '' : labels[_i2];\n            label = lbFormatter(label, {\n              seriesIndex: realIndex,\n              dataPointIndex: _i2,\n              w: w\n            });\n\n            var yColors = _this2.axesUtils.getYAxisForeColor(ylabels.style.colors, realIndex);\n\n            var getForeColor = function getForeColor() {\n              return Array.isArray(yColors) ? yColors[_i2] : yColors;\n            };\n\n            var multiY = 0;\n\n            if (Array.isArray(label)) {\n              multiY = label.length / 2 * parseInt(ylabels.style.fontSize, 10);\n            }\n\n            var offsetX = ylabels.offsetX - 15;\n            var textAnchor = 'end';\n\n            if (_this2.yaxis.opposite) {\n              textAnchor = 'start';\n            }\n\n            if (w.config.yaxis[0].labels.align === 'left') {\n              offsetX = ylabels.offsetX;\n              textAnchor = 'start';\n            } else if (w.config.yaxis[0].labels.align === 'center') {\n              offsetX = ylabels.offsetX;\n              textAnchor = 'middle';\n            } else if (w.config.yaxis[0].labels.align === 'right') {\n              textAnchor = 'end';\n            }\n\n            var elLabel = graphics.drawText({\n              x: offsetX,\n              y: yPos + colHeight + ylabels.offsetY - multiY,\n              text: label,\n              textAnchor: textAnchor,\n              foreColor: getForeColor(),\n              fontSize: ylabels.style.fontSize,\n              fontFamily: ylabels.style.fontFamily,\n              fontWeight: ylabels.style.fontWeight,\n              isPlainText: false,\n              cssClass: 'apexcharts-yaxis-label ' + ylabels.style.cssClass,\n              maxWidth: ylabels.maxWidth\n            });\n            elYaxisTexts.add(elLabel);\n            elLabel.on('click', function (e) {\n              if (typeof w.config.chart.events.xAxisLabelClick === 'function') {\n                var opts = Object.assign({}, w, {\n                  labelIndex: _i2\n                });\n                w.config.chart.events.xAxisLabelClick(e, _this2.ctx, opts);\n              }\n            });\n            var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title');\n            elTooltipTitle.textContent = Array.isArray(label) ? label.join(' ') : label;\n            elLabel.node.appendChild(elTooltipTitle);\n\n            if (w.config.yaxis[realIndex].labels.rotate !== 0) {\n              var labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node);\n              elLabel.node.setAttribute('transform', \"rotate(\".concat(w.config.yaxis[realIndex].labels.rotate, \" 0 \").concat(labelRotatingCenter.y, \")\"));\n            }\n\n            yPos = yPos + colHeight;\n          };\n\n          for (var _i2 = 0; _i2 <= labels.length - 1; _i2++) {\n            _loop2(_i2);\n          }\n        }\n\n        if (w.config.yaxis[0].title.text !== undefined) {\n          var elXaxisTitle = graphics.group({\n            class: 'apexcharts-yaxis-title apexcharts-xaxis-title-inversed',\n            transform: 'translate(' + translateYAxisX + ', 0)'\n          });\n          var elXAxisTitleText = graphics.drawText({\n            x: w.config.yaxis[0].title.offsetX,\n            y: w.globals.gridHeight / 2 + w.config.yaxis[0].title.offsetY,\n            text: w.config.yaxis[0].title.text,\n            textAnchor: 'middle',\n            foreColor: w.config.yaxis[0].title.style.color,\n            fontSize: w.config.yaxis[0].title.style.fontSize,\n            fontWeight: w.config.yaxis[0].title.style.fontWeight,\n            fontFamily: w.config.yaxis[0].title.style.fontFamily,\n            cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[0].title.style.cssClass\n          });\n          elXaxisTitle.add(elXAxisTitleText);\n          elYaxis.add(elXaxisTitle);\n        }\n\n        var offX = 0;\n\n        if (this.isCategoryBarHorizontal && w.config.yaxis[0].opposite) {\n          offX = w.globals.gridWidth;\n        }\n\n        var axisBorder = w.config.xaxis.axisBorder;\n\n        if (axisBorder.show) {\n          var elVerticalLine = graphics.drawLine(w.globals.padHorizontal + axisBorder.offsetX + offX, 1 + axisBorder.offsetY, w.globals.padHorizontal + axisBorder.offsetX + offX, w.globals.gridHeight + axisBorder.offsetY, axisBorder.color, 0);\n\n          if (this.elgrid && this.elgrid.elGridBorders && w.config.grid.show) {\n            this.elgrid.elGridBorders.add(elVerticalLine);\n          } else {\n            elYaxis.add(elVerticalLine);\n          }\n        }\n\n        if (w.config.yaxis[0].axisTicks.show) {\n          this.axesUtils.drawYAxisTicks(offX, labels.length, w.config.yaxis[0].axisBorder, w.config.yaxis[0].axisTicks, 0, colHeight, elYaxis);\n        }\n\n        return elYaxis;\n      }\n    }, {\n      key: \"drawXaxisTicks\",\n      value: function drawXaxisTicks(x1, y2, appendToElement) {\n        var w = this.w;\n        var x2 = x1;\n        if (x1 < 0 || x1 - 2 > w.globals.gridWidth) return;\n        var y1 = this.offY + w.config.xaxis.axisTicks.offsetY;\n        y2 = y2 + y1 + w.config.xaxis.axisTicks.height;\n\n        if (w.config.xaxis.position === 'top') {\n          y2 = y1 - w.config.xaxis.axisTicks.height;\n        }\n\n        if (w.config.xaxis.axisTicks.show) {\n          var graphics = new Graphics(this.ctx);\n          var line = graphics.drawLine(x1 + w.config.xaxis.axisTicks.offsetX, y1 + w.config.xaxis.offsetY, x2 + w.config.xaxis.axisTicks.offsetX, y2 + w.config.xaxis.offsetY, w.config.xaxis.axisTicks.color); // we are not returning anything, but appending directly to the element passed in param\n\n          appendToElement.add(line);\n          line.node.classList.add('apexcharts-xaxis-tick');\n        }\n      }\n    }, {\n      key: \"getXAxisTicksPositions\",\n      value: function getXAxisTicksPositions() {\n        var w = this.w;\n        var xAxisTicksPositions = [];\n        var xCount = this.xaxisLabels.length;\n        var x1 = w.globals.padHorizontal;\n\n        if (w.globals.timescaleLabels.length > 0) {\n          for (var i = 0; i < xCount; i++) {\n            x1 = this.xaxisLabels[i].position;\n            xAxisTicksPositions.push(x1);\n          }\n        } else {\n          var xCountForCategoryCharts = xCount;\n\n          for (var _i3 = 0; _i3 < xCountForCategoryCharts; _i3++) {\n            var x1Count = xCountForCategoryCharts;\n\n            if (w.globals.isXNumeric && w.config.chart.type !== 'bar') {\n              x1Count -= 1;\n            }\n\n            x1 = x1 + w.globals.gridWidth / x1Count;\n            xAxisTicksPositions.push(x1);\n          }\n        }\n\n        return xAxisTicksPositions;\n      } // to rotate x-axis labels or to put ... for longer text in xaxis\n\n    }, {\n      key: \"xAxisLabelCorrections\",\n      value: function xAxisLabelCorrections() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var xAxis = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g');\n        var xAxisTexts = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-texts-g text:not(.apexcharts-xaxis-group-label)');\n        var yAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-inversed text');\n        var xAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-inversed-texts-g text tspan');\n\n        if (w.globals.rotateXLabels || w.config.xaxis.labels.rotateAlways) {\n          for (var xat = 0; xat < xAxisTexts.length; xat++) {\n            var textRotatingCenter = graphics.rotateAroundCenter(xAxisTexts[xat]);\n            textRotatingCenter.y = textRotatingCenter.y - 1; // + tickWidth/4;\n\n            textRotatingCenter.x = textRotatingCenter.x + 1;\n            xAxisTexts[xat].setAttribute('transform', \"rotate(\".concat(w.config.xaxis.labels.rotate, \" \").concat(textRotatingCenter.x, \" \").concat(textRotatingCenter.y, \")\"));\n            xAxisTexts[xat].setAttribute('text-anchor', \"end\");\n            var offsetHeight = 10;\n            xAxis.setAttribute('transform', \"translate(0, \".concat(-offsetHeight, \")\"));\n            var tSpan = xAxisTexts[xat].childNodes;\n\n            if (w.config.xaxis.labels.trim) {\n              Array.prototype.forEach.call(tSpan, function (ts) {\n                graphics.placeTextWithEllipsis(ts, ts.textContent, w.globals.xAxisLabelsHeight - (w.config.legend.position === 'bottom' ? 20 : 10));\n              });\n            }\n          }\n        } else {\n          (function () {\n            var width = w.globals.gridWidth / (w.globals.labels.length + 1);\n\n            for (var _xat = 0; _xat < xAxisTexts.length; _xat++) {\n              var _tSpan = xAxisTexts[_xat].childNodes;\n\n              if (w.config.xaxis.labels.trim && w.config.xaxis.type !== 'datetime') {\n                Array.prototype.forEach.call(_tSpan, function (ts) {\n                  graphics.placeTextWithEllipsis(ts, ts.textContent, width);\n                });\n              }\n            }\n          })();\n        }\n\n        if (yAxisTextsInversed.length > 0) {\n          // truncate rotated y axis in bar chart (x axis)\n          var firstLabelPosX = yAxisTextsInversed[yAxisTextsInversed.length - 1].getBBox();\n          var lastLabelPosX = yAxisTextsInversed[0].getBBox();\n\n          if (firstLabelPosX.x < -20) {\n            yAxisTextsInversed[yAxisTextsInversed.length - 1].parentNode.removeChild(yAxisTextsInversed[yAxisTextsInversed.length - 1]);\n          }\n\n          if (lastLabelPosX.x + lastLabelPosX.width > w.globals.gridWidth && !w.globals.isBarHorizontal) {\n            yAxisTextsInversed[0].parentNode.removeChild(yAxisTextsInversed[0]);\n          } // truncate rotated x axis in bar chart (y axis)\n\n\n          for (var _xat2 = 0; _xat2 < xAxisTextsInversed.length; _xat2++) {\n            graphics.placeTextWithEllipsis(xAxisTextsInversed[_xat2], xAxisTextsInversed[_xat2].textContent, w.config.yaxis[0].labels.maxWidth - (w.config.yaxis[0].title.text ? parseFloat(w.config.yaxis[0].title.style.fontSize) * 2 : 0) - 15);\n          }\n        }\n      } // renderXAxisBands() {\n      //   let w = this.w;\n      //   let plotBand = document.createElementNS(w.globals.SVGNS, 'rect')\n      //   w.globals.dom.elGraphical.add(plotBand)\n      // }\n\n    }]);\n\n    return XAxis;\n  }();\n\n  /**\n   * ApexCharts Grid Class for drawing Cartesian Grid.\n   *\n   * @module Grid\n   **/\n\n  var Grid = /*#__PURE__*/function () {\n    function Grid(ctx) {\n      _classCallCheck(this, Grid);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      var w = this.w;\n      this.xaxisLabels = w.globals.labels.slice();\n      this.axesUtils = new AxesUtils(ctx);\n      this.isRangeBar = w.globals.seriesRange.length;\n\n      if (w.globals.timescaleLabels.length > 0) {\n        //  timescaleLabels labels are there\n        this.xaxisLabels = w.globals.timescaleLabels.slice();\n      }\n    } // when using sparklines or when showing no grid, we need to have a grid area which is reused at many places for other calculations as well\n\n\n    _createClass(Grid, [{\n      key: \"drawGridArea\",\n      value: function drawGridArea() {\n        var elGrid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n\n        if (elGrid === null) {\n          elGrid = graphics.group({\n            class: 'apexcharts-grid'\n          });\n        }\n\n        var elVerticalLine = graphics.drawLine(w.globals.padHorizontal, 1, w.globals.padHorizontal, w.globals.gridHeight, 'transparent');\n        var elHorzLine = graphics.drawLine(w.globals.padHorizontal, w.globals.gridHeight, w.globals.gridWidth, w.globals.gridHeight, 'transparent');\n        elGrid.add(elHorzLine);\n        elGrid.add(elVerticalLine);\n        return elGrid;\n      }\n    }, {\n      key: \"drawGrid\",\n      value: function drawGrid() {\n        var gl = this.w.globals;\n        var elgrid = null;\n\n        if (gl.axisCharts) {\n          // grid is drawn after xaxis and yaxis are drawn\n          elgrid = this.renderGrid();\n          this.drawGridArea(elgrid.el);\n        }\n\n        return elgrid;\n      } // This mask will clip off overflowing graphics from the drawable area\n\n    }, {\n      key: \"createGridMask\",\n      value: function createGridMask() {\n        var w = this.w;\n        var gl = w.globals;\n        var graphics = new Graphics(this.ctx);\n        var strokeSize = Array.isArray(w.config.stroke.width) ? 0 : w.config.stroke.width;\n\n        if (Array.isArray(w.config.stroke.width)) {\n          var strokeMaxSize = 0;\n          w.config.stroke.width.forEach(function (m) {\n            strokeMaxSize = Math.max(strokeMaxSize, m);\n          });\n          strokeSize = strokeMaxSize;\n        }\n\n        gl.dom.elGridRectMask = document.createElementNS(gl.SVGNS, 'clipPath');\n        gl.dom.elGridRectMask.setAttribute('id', \"gridRectMask\".concat(gl.cuid));\n        gl.dom.elGridRectMarkerMask = document.createElementNS(gl.SVGNS, 'clipPath');\n        gl.dom.elGridRectMarkerMask.setAttribute('id', \"gridRectMarkerMask\".concat(gl.cuid));\n        gl.dom.elForecastMask = document.createElementNS(gl.SVGNS, 'clipPath');\n        gl.dom.elForecastMask.setAttribute('id', \"forecastMask\".concat(gl.cuid));\n        gl.dom.elNonForecastMask = document.createElementNS(gl.SVGNS, 'clipPath');\n        gl.dom.elNonForecastMask.setAttribute('id', \"nonForecastMask\".concat(gl.cuid)); // let barHalfWidth = 0\n\n        var type = w.config.chart.type;\n        var hasBar = type === 'bar' || type === 'rangeBar' || type === 'candlestick' || type === 'boxPlot' || w.globals.comboBarCount > 0;\n        var barWidthLeft = 0;\n        var barWidthRight = 0;\n\n        if (hasBar && w.globals.isXNumeric && !w.globals.isBarHorizontal) {\n          barWidthLeft = w.config.grid.padding.left;\n          barWidthRight = w.config.grid.padding.right;\n\n          if (gl.barPadForNumericAxis > barWidthLeft) {\n            barWidthLeft = gl.barPadForNumericAxis;\n            barWidthRight = gl.barPadForNumericAxis;\n          }\n        }\n\n        gl.dom.elGridRect = graphics.drawRect(-strokeSize / 2 - barWidthLeft - 2, -strokeSize / 2, gl.gridWidth + strokeSize + barWidthRight + barWidthLeft + 4, gl.gridHeight + strokeSize, 0, '#fff');\n        var markerSize = w.globals.markers.largestSize + 1;\n        gl.dom.elGridRectMarker = graphics.drawRect(-markerSize * 2, -markerSize * 2, gl.gridWidth + markerSize * 4, gl.gridHeight + markerSize * 4, 0, '#fff');\n        gl.dom.elGridRectMask.appendChild(gl.dom.elGridRect.node);\n        gl.dom.elGridRectMarkerMask.appendChild(gl.dom.elGridRectMarker.node);\n        var defs = gl.dom.baseEl.querySelector('defs');\n        defs.appendChild(gl.dom.elGridRectMask);\n        defs.appendChild(gl.dom.elForecastMask);\n        defs.appendChild(gl.dom.elNonForecastMask);\n        defs.appendChild(gl.dom.elGridRectMarkerMask);\n      }\n    }, {\n      key: \"_drawGridLines\",\n      value: function _drawGridLines(_ref) {\n        var i = _ref.i,\n            x1 = _ref.x1,\n            y1 = _ref.y1,\n            x2 = _ref.x2,\n            y2 = _ref.y2,\n            xCount = _ref.xCount,\n            parent = _ref.parent;\n        var w = this.w;\n\n        var shouldDraw = function shouldDraw() {\n          if (i === 0 && w.globals.skipFirstTimelinelabel) {\n            return false;\n          }\n\n          if (i === xCount - 1 && w.globals.skipLastTimelinelabel && !w.config.xaxis.labels.formatter) {\n            return false;\n          }\n\n          if (w.config.chart.type === 'radar') {\n            return false;\n          }\n\n          return true;\n        };\n\n        if (shouldDraw()) {\n          if (w.config.grid.xaxis.lines.show) {\n            this._drawGridLine({\n              i: i,\n              x1: x1,\n              y1: y1,\n              x2: x2,\n              y2: y2,\n              xCount: xCount,\n              parent: parent\n            });\n          }\n\n          var y_2 = 0;\n\n          if (w.globals.hasXaxisGroups && w.config.xaxis.tickPlacement === 'between') {\n            var groups = w.globals.groups;\n\n            if (groups) {\n              var gacc = 0;\n\n              for (var gi = 0; gacc < i && gi < groups.length; gi++) {\n                gacc += groups[gi].cols;\n              }\n\n              if (gacc === i) {\n                y_2 = w.globals.xAxisLabelsHeight * 0.6;\n              }\n            }\n          }\n\n          var xAxis = new XAxis(this.ctx);\n          xAxis.drawXaxisTicks(x1, y_2, w.globals.dom.elGraphical);\n        }\n      }\n    }, {\n      key: \"_drawGridLine\",\n      value: function _drawGridLine(_ref2) {\n        var i = _ref2.i,\n            x1 = _ref2.x1,\n            y1 = _ref2.y1,\n            x2 = _ref2.x2,\n            y2 = _ref2.y2,\n            xCount = _ref2.xCount,\n            parent = _ref2.parent;\n        var w = this.w;\n        var excludeBorders = false;\n        var isHorzLine = parent.node.classList.contains('apexcharts-gridlines-horizontal');\n        var strokeDashArray = w.config.grid.strokeDashArray;\n        var offX = w.globals.barPadForNumericAxis;\n\n        if (y1 === 0 && y2 === 0 || x1 === 0 && x2 === 0) {\n          excludeBorders = true;\n        }\n\n        if (y1 === w.globals.gridHeight && y2 === w.globals.gridHeight) {\n          excludeBorders = true;\n        }\n\n        if (w.globals.isBarHorizontal && (i === 0 || i === xCount - 1)) {\n          excludeBorders = true;\n        }\n\n        var graphics = new Graphics(this);\n        var line = graphics.drawLine(x1 - (isHorzLine ? offX : 0), y1, x2 + (isHorzLine ? offX : 0), y2, w.config.grid.borderColor, strokeDashArray);\n        line.node.classList.add('apexcharts-gridline');\n\n        if (excludeBorders && w.config.grid.show) {\n          this.elGridBorders.add(line);\n        } else {\n          parent.add(line);\n        }\n      }\n    }, {\n      key: \"_drawGridBandRect\",\n      value: function _drawGridBandRect(_ref3) {\n        var c = _ref3.c,\n            x1 = _ref3.x1,\n            y1 = _ref3.y1,\n            x2 = _ref3.x2,\n            y2 = _ref3.y2,\n            type = _ref3.type;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var offX = w.globals.barPadForNumericAxis;\n        if (type === 'column' && w.config.xaxis.type === 'datetime') return;\n        var color = w.config.grid[type].colors[c];\n        var rect = graphics.drawRect(x1 - (type === 'row' ? offX : 0), y1, x2 + (type === 'row' ? offX * 2 : 0), y2, 0, color, w.config.grid[type].opacity);\n        this.elg.add(rect);\n        rect.attr('clip-path', \"url(#gridRectMask\".concat(w.globals.cuid, \")\"));\n        rect.node.classList.add(\"apexcharts-grid-\".concat(type));\n      }\n    }, {\n      key: \"_drawXYLines\",\n      value: function _drawXYLines(_ref4) {\n        var _this = this;\n\n        var xCount = _ref4.xCount,\n            tickAmount = _ref4.tickAmount;\n        var w = this.w;\n\n        var datetimeLines = function datetimeLines(_ref5) {\n          var xC = _ref5.xC,\n              x1 = _ref5.x1,\n              y1 = _ref5.y1,\n              x2 = _ref5.x2,\n              y2 = _ref5.y2;\n\n          for (var i = 0; i < xC; i++) {\n            x1 = _this.xaxisLabels[i].position;\n            x2 = _this.xaxisLabels[i].position;\n\n            _this._drawGridLines({\n              i: i,\n              x1: x1,\n              y1: y1,\n              x2: x2,\n              y2: y2,\n              xCount: xCount,\n              parent: _this.elgridLinesV\n            });\n          }\n        };\n\n        var categoryLines = function categoryLines(_ref6) {\n          var xC = _ref6.xC,\n              x1 = _ref6.x1,\n              y1 = _ref6.y1,\n              x2 = _ref6.x2,\n              y2 = _ref6.y2;\n\n          for (var i = 0; i < xC + (w.globals.isXNumeric ? 0 : 1); i++) {\n            if (i === 0 && xC === 1 && w.globals.dataPoints === 1) {\n              // single datapoint\n              x1 = w.globals.gridWidth / 2;\n              x2 = x1;\n            }\n\n            _this._drawGridLines({\n              i: i,\n              x1: x1,\n              y1: y1,\n              x2: x2,\n              y2: y2,\n              xCount: xCount,\n              parent: _this.elgridLinesV\n            });\n\n            x1 = x1 + w.globals.gridWidth / (w.globals.isXNumeric ? xC - 1 : xC);\n            x2 = x1;\n          }\n        }; // draw vertical lines\n\n\n        if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) {\n          var x1 = w.globals.padHorizontal;\n          var y1 = 0;\n          var x2;\n          var y2 = w.globals.gridHeight;\n\n          if (w.globals.timescaleLabels.length) {\n            datetimeLines({\n              xC: xCount,\n              x1: x1,\n              y1: y1,\n              x2: x2,\n              y2: y2\n            });\n          } else {\n            if (w.globals.isXNumeric) {\n              xCount = w.globals.xAxisScale.result.length;\n            }\n\n            categoryLines({\n              xC: xCount,\n              x1: x1,\n              y1: y1,\n              x2: x2,\n              y2: y2\n            });\n          }\n        } // draw horizontal lines\n\n\n        if (w.config.grid.yaxis.lines.show) {\n          var _x = 0;\n          var _y = 0;\n          var _y2 = 0;\n          var _x2 = w.globals.gridWidth;\n          var tA = tickAmount + 1;\n\n          if (this.isRangeBar) {\n            tA = w.globals.labels.length;\n          }\n\n          for (var i = 0; i < tA + (this.isRangeBar ? 1 : 0); i++) {\n            this._drawGridLine({\n              i: i,\n              xCount: tA + (this.isRangeBar ? 1 : 0),\n              x1: _x,\n              y1: _y,\n              x2: _x2,\n              y2: _y2,\n              parent: this.elgridLinesH\n            });\n\n            _y = _y + w.globals.gridHeight / (this.isRangeBar ? tA : tickAmount);\n            _y2 = _y;\n          }\n        }\n      }\n    }, {\n      key: \"_drawInvertedXYLines\",\n      value: function _drawInvertedXYLines(_ref7) {\n        var xCount = _ref7.xCount;\n        var w = this.w; // draw vertical lines\n\n        if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) {\n          var x1 = w.globals.padHorizontal;\n          var y1 = 0;\n          var x2;\n          var y2 = w.globals.gridHeight;\n\n          for (var i = 0; i < xCount + 1; i++) {\n            if (w.config.grid.xaxis.lines.show) {\n              this._drawGridLine({\n                i: i,\n                xCount: xCount + 1,\n                x1: x1,\n                y1: y1,\n                x2: x2,\n                y2: y2,\n                parent: this.elgridLinesV\n              });\n            }\n\n            var xAxis = new XAxis(this.ctx);\n            xAxis.drawXaxisTicks(x1, 0, w.globals.dom.elGraphical);\n            x1 = x1 + w.globals.gridWidth / xCount + 0.3;\n            x2 = x1;\n          }\n        } // draw horizontal lines\n\n\n        if (w.config.grid.yaxis.lines.show) {\n          var _x3 = 0;\n          var _y3 = 0;\n          var _y4 = 0;\n          var _x4 = w.globals.gridWidth;\n\n          for (var _i = 0; _i < w.globals.dataPoints + 1; _i++) {\n            this._drawGridLine({\n              i: _i,\n              xCount: w.globals.dataPoints + 1,\n              x1: _x3,\n              y1: _y3,\n              x2: _x4,\n              y2: _y4,\n              parent: this.elgridLinesH\n            });\n\n            _y3 = _y3 + w.globals.gridHeight / w.globals.dataPoints;\n            _y4 = _y3;\n          }\n        }\n      } // actual grid rendering\n\n    }, {\n      key: \"renderGrid\",\n      value: function renderGrid() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        this.elg = graphics.group({\n          class: 'apexcharts-grid'\n        });\n        this.elgridLinesH = graphics.group({\n          class: 'apexcharts-gridlines-horizontal'\n        });\n        this.elgridLinesV = graphics.group({\n          class: 'apexcharts-gridlines-vertical'\n        });\n        this.elGridBorders = graphics.group({\n          class: 'apexcharts-grid-borders'\n        });\n        this.elg.add(this.elgridLinesH);\n        this.elg.add(this.elgridLinesV);\n\n        if (!w.config.grid.show) {\n          this.elgridLinesV.hide();\n          this.elgridLinesH.hide();\n          this.elGridBorders.hide();\n        }\n\n        var yTickAmount = w.globals.yAxisScale.length ? w.globals.yAxisScale[0].result.length - 1 : 5;\n\n        for (var i = 0; i < w.globals.series.length; i++) {\n          if (typeof w.globals.yAxisScale[i] !== 'undefined') {\n            yTickAmount = w.globals.yAxisScale[i].result.length - 1;\n          }\n\n          if (yTickAmount > 2) break;\n        }\n\n        var xCount;\n\n        if (!w.globals.isBarHorizontal || this.isRangeBar) {\n          xCount = this.xaxisLabels.length;\n\n          if (this.isRangeBar && w.globals.isBarHorizontal) {\n            xCount--;\n            yTickAmount = w.globals.labels.length;\n\n            if (w.config.xaxis.tickAmount && w.config.xaxis.labels.formatter) {\n              xCount = w.config.xaxis.tickAmount;\n            }\n          }\n\n          this._drawXYLines({\n            xCount: xCount,\n            tickAmount: yTickAmount\n          });\n        } else {\n          xCount = yTickAmount; // for horizontal bar chart, get the xaxis tickamount\n\n          yTickAmount = w.globals.xTickAmount;\n\n          this._drawInvertedXYLines({\n            xCount: xCount,\n            tickAmount: yTickAmount\n          });\n        }\n\n        this.drawGridBands(xCount, yTickAmount);\n        return {\n          el: this.elg,\n          elGridBorders: this.elGridBorders,\n          xAxisTickWidth: w.globals.gridWidth / xCount\n        };\n      }\n    }, {\n      key: \"drawGridBands\",\n      value: function drawGridBands(xCount, tickAmount) {\n        var w = this.w; // rows background bands\n\n        if (w.config.grid.row.colors !== undefined && w.config.grid.row.colors.length > 0) {\n          var x1 = 0;\n          var y1 = 0;\n          var y2 = w.globals.gridHeight / tickAmount;\n          var x2 = w.globals.gridWidth;\n\n          for (var i = 0, c = 0; i < tickAmount; i++, c++) {\n            if (c >= w.config.grid.row.colors.length) {\n              c = 0;\n            }\n\n            this._drawGridBandRect({\n              c: c,\n              x1: x1,\n              y1: y1,\n              x2: x2,\n              y2: y2,\n              type: 'row'\n            });\n\n            y1 = y1 + w.globals.gridHeight / tickAmount;\n          }\n        } // columns background bands\n\n\n        if (w.config.grid.column.colors !== undefined && w.config.grid.column.colors.length > 0) {\n          var xc = !w.globals.isBarHorizontal && (w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) ? xCount - 1 : xCount;\n          var _x5 = w.globals.padHorizontal;\n          var _y5 = 0;\n\n          var _x6 = w.globals.padHorizontal + w.globals.gridWidth / xc;\n\n          var _y6 = w.globals.gridHeight;\n\n          for (var _i2 = 0, _c = 0; _i2 < xCount; _i2++, _c++) {\n            if (_c >= w.config.grid.column.colors.length) {\n              _c = 0;\n            }\n\n            this._drawGridBandRect({\n              c: _c,\n              x1: _x5,\n              y1: _y5,\n              x2: _x6,\n              y2: _y6,\n              type: 'column'\n            });\n\n            _x5 = _x5 + w.globals.gridWidth / xc;\n          }\n        }\n      }\n    }]);\n\n    return Grid;\n  }();\n\n  var Range$1 = /*#__PURE__*/function () {\n    function Range(ctx) {\n      _classCallCheck(this, Range);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    } // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axiss\n    // This routine creates the Y axis values for a graph.\n\n\n    _createClass(Range, [{\n      key: \"niceScale\",\n      value: function niceScale(yMin, yMax) {\n        var ticks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n        var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n        var NO_MIN_MAX_PROVIDED = arguments.length > 4 ? arguments[4] : undefined;\n        var w = this.w; // Determine Range\n\n        var range = Math.abs(yMax - yMin);\n        ticks = this._adjustTicksForSmallRange(ticks, index, range);\n\n        if (ticks === 'dataPoints') {\n          ticks = w.globals.dataPoints - 1;\n        }\n\n        if (yMin === Number.MIN_VALUE && yMax === 0 || !Utils$1.isNumber(yMin) && !Utils$1.isNumber(yMax) || yMin === Number.MIN_VALUE && yMax === -Number.MAX_VALUE) {\n          // when all values are 0\n          yMin = 0;\n          yMax = ticks;\n          var linearScale = this.linearScale(yMin, yMax, ticks);\n          return linearScale;\n        }\n\n        if (yMin > yMax) {\n          // if somehow due to some wrong config, user sent max less than min,\n          // adjust the min/max again\n          console.warn('axis.min cannot be greater than axis.max');\n          yMax = yMin + 0.1;\n        } else if (yMin === yMax) {\n          // If yMin and yMax are identical, then\n          // adjust the yMin and yMax values to actually\n          // make a graph. Also avoids division by zero errors.\n          yMin = yMin === 0 ? 0 : yMin - 0.5; // some small value\n\n          yMax = yMax === 0 ? 2 : yMax + 0.5; // some small value\n        } // Calculate Min amd Max graphical labels and graph\n        // increments.  The number of ticks defaults to\n        // 10 which is the SUGGESTED value.  Any tick value\n        // entered is used as a suggested value which is\n        // adjusted to be a 'pretty' value.\n        //\n        // Output will be an array of the Y axis values that\n        // encompass the Y values.\n\n\n        var result = [];\n\n        if (range < 1 && NO_MIN_MAX_PROVIDED && (w.config.chart.type === 'candlestick' || w.config.series[index].type === 'candlestick' || w.config.chart.type === 'boxPlot' || w.config.series[index].type === 'boxPlot' || w.globals.isRangeData)) {\n          /* fix https://github.com/apexcharts/apexcharts.js/issues/430 */\n          yMax = yMax * 1.01;\n        }\n\n        var tiks = ticks + 1; // Adjust ticks if needed\n\n        if (tiks < 2) {\n          tiks = 2;\n        } else if (tiks > 2) {\n          tiks -= 2;\n        } // Get raw step value\n\n\n        var tempStep = range / tiks; // Calculate pretty step value\n\n        var mag = Math.floor(Utils$1.log10(tempStep));\n        var magPow = Math.pow(10, mag);\n        var magMsd = Math.round(tempStep / magPow);\n\n        if (magMsd < 1) {\n          magMsd = 1;\n        }\n\n        var stepSize = magMsd * magPow; // build Y label array.\n        // Lower and upper bounds calculations\n\n        var lb = stepSize * Math.floor(yMin / stepSize);\n        var ub = stepSize * Math.ceil(yMax / stepSize); // Build array\n\n        var val = lb;\n\n        if (NO_MIN_MAX_PROVIDED && range > 2) {\n          while (1) {\n            result.push(val);\n            val += stepSize;\n\n            if (val > ub) {\n              break;\n            }\n          }\n\n          return {\n            result: result,\n            niceMin: result[0],\n            niceMax: result[result.length - 1]\n          };\n        } else {\n          result = [];\n          var v = yMin;\n          result.push(v);\n          var valuesDivider = Math.abs(yMax - yMin) / ticks;\n\n          for (var i = 0; i <= ticks; i++) {\n            v = v + valuesDivider;\n            result.push(v);\n          }\n\n          if (result[result.length - 2] >= yMax) {\n            result.pop();\n          }\n\n          return {\n            result: result,\n            niceMin: result[0],\n            niceMax: result[result.length - 1]\n          };\n        }\n      }\n    }, {\n      key: \"linearScale\",\n      value: function linearScale(yMin, yMax) {\n        var ticks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n        var index = arguments.length > 3 ? arguments[3] : undefined;\n        var range = Math.abs(yMax - yMin);\n        ticks = this._adjustTicksForSmallRange(ticks, index, range);\n\n        if (ticks === 'dataPoints') {\n          ticks = this.w.globals.dataPoints - 1;\n        }\n\n        var step = range / ticks;\n\n        if (ticks === Number.MAX_VALUE) {\n          ticks = 10;\n          step = 1;\n        }\n\n        var result = [];\n        var v = yMin;\n\n        while (ticks >= 0) {\n          result.push(v);\n          v = v + step;\n          ticks -= 1;\n        }\n\n        return {\n          result: result,\n          niceMin: result[0],\n          niceMax: result[result.length - 1]\n        };\n      }\n    }, {\n      key: \"logarithmicScaleNice\",\n      value: function logarithmicScaleNice(yMin, yMax, base) {\n        // Basic validation to avoid for loop starting at -inf.\n        if (yMax <= 0) yMax = Math.max(yMin, base);\n        if (yMin <= 0) yMin = Math.min(yMax, base);\n        var logs = [];\n        var logMax = Math.ceil(Math.log(yMax) / Math.log(base) + 1); // Get powers of base for our max and min\n\n        var logMin = Math.floor(Math.log(yMin) / Math.log(base));\n\n        for (var i = logMin; i < logMax; i++) {\n          logs.push(Math.pow(base, i));\n        }\n\n        return {\n          result: logs,\n          niceMin: logs[0],\n          niceMax: logs[logs.length - 1]\n        };\n      }\n    }, {\n      key: \"logarithmicScale\",\n      value: function logarithmicScale(yMin, yMax, base) {\n        // Basic validation to avoid for loop starting at -inf.\n        if (yMax <= 0) yMax = Math.max(yMin, base);\n        if (yMin <= 0) yMin = Math.min(yMax, base);\n        var logs = []; // Get the logarithmic range.\n\n        var logMax = Math.log(yMax) / Math.log(base);\n        var logMin = Math.log(yMin) / Math.log(base); // Get the exact logarithmic range.\n        // (This is the exact number of multiples of the base there are between yMin and yMax).\n\n        var logRange = logMax - logMin; // Round the logarithmic range to get the number of ticks we will create.\n        // If the chosen min/max values are multiples of each other WRT the base, this will be neat.\n        // If the chosen min/max aren't, we will at least still provide USEFUL ticks.\n\n        var ticks = Math.round(logRange); // Get the logarithmic spacing between ticks.\n\n        var logTickSpacing = logRange / ticks; // Create as many ticks as there is range in the logs.\n\n        for (var i = 0, logTick = logMin; i < ticks; i++, logTick += logTickSpacing) {\n          logs.push(Math.pow(base, logTick));\n        } // Add a final tick at the yMax.\n\n\n        logs.push(Math.pow(base, logMax));\n        return {\n          result: logs,\n          niceMin: yMin,\n          niceMax: yMax\n        };\n      }\n    }, {\n      key: \"_adjustTicksForSmallRange\",\n      value: function _adjustTicksForSmallRange(ticks, index, range) {\n        var newTicks = ticks;\n\n        if (typeof index !== 'undefined' && this.w.config.yaxis[index].labels.formatter && this.w.config.yaxis[index].tickAmount === undefined) {\n          var formattedVal = Number(this.w.config.yaxis[index].labels.formatter(1));\n\n          if (Utils$1.isNumber(formattedVal) && this.w.globals.yValueDecimal === 0) {\n            newTicks = Math.ceil(range);\n          }\n        }\n\n        return newTicks < ticks ? newTicks : ticks;\n      }\n    }, {\n      key: \"setYScaleForIndex\",\n      value: function setYScaleForIndex(index, minY, maxY) {\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        var y = gl.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index];\n\n        if (typeof gl.yAxisScale[index] === 'undefined') {\n          gl.yAxisScale[index] = [];\n        }\n\n        var diff = Math.abs(maxY - minY);\n\n        if (y.logarithmic && diff <= 5) {\n          gl.invalidLogScale = true;\n        }\n\n        if (y.logarithmic && diff > 5) {\n          gl.allSeriesCollapsed = false;\n          gl.yAxisScale[index] = this.logarithmicScale(minY, maxY, y.logBase);\n          gl.yAxisScale[index] = y.forceNiceScale ? this.logarithmicScaleNice(minY, maxY, y.logBase) : this.logarithmicScale(minY, maxY, y.logBase);\n        } else {\n          if (maxY === -Number.MAX_VALUE || !Utils$1.isNumber(maxY)) {\n            // no data in the chart. Either all series collapsed or user passed a blank array\n            gl.yAxisScale[index] = this.linearScale(0, 5, 5);\n          } else {\n            // there is some data. Turn off the allSeriesCollapsed flag\n            gl.allSeriesCollapsed = false;\n\n            if ((y.min !== undefined || y.max !== undefined) && !y.forceNiceScale) {\n              // fix https://github.com/apexcharts/apexcharts.js/issues/492\n              gl.yAxisScale[index] = this.linearScale(minY, maxY, y.tickAmount, index);\n            } else {\n              var noMinMaxProvided = cnf.yaxis[index].max === undefined && cnf.yaxis[index].min === undefined || cnf.yaxis[index].forceNiceScale;\n              gl.yAxisScale[index] = this.niceScale(minY, maxY, y.tickAmount ? y.tickAmount : diff < 5 && diff > 1 ? diff + 1 : 5, index, // fix https://github.com/apexcharts/apexcharts.js/issues/397\n              noMinMaxProvided);\n            }\n          }\n        }\n      }\n    }, {\n      key: \"setXScale\",\n      value: function setXScale(minX, maxX) {\n        var w = this.w;\n        var gl = w.globals;\n        var x = w.config.xaxis;\n        var diff = Math.abs(maxX - minX);\n\n        if (maxX === -Number.MAX_VALUE || !Utils$1.isNumber(maxX)) {\n          // no data in the chart. Either all series collapsed or user passed a blank array\n          gl.xAxisScale = this.linearScale(0, 5, 5);\n        } else {\n          gl.xAxisScale = this.linearScale(minX, maxX, x.tickAmount ? x.tickAmount : diff < 5 && diff > 1 ? diff + 1 : 5, 0);\n        }\n\n        return gl.xAxisScale;\n      }\n    }, {\n      key: \"setMultipleYScales\",\n      value: function setMultipleYScales() {\n        var _this = this;\n\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        var minYArr = gl.minYArr.concat([]);\n        var maxYArr = gl.maxYArr.concat([]);\n        var scalesIndices = []; // here, we loop through the yaxis array and find the item which has \"seriesName\" property\n\n        cnf.yaxis.forEach(function (yaxe, i) {\n          var index = i;\n          cnf.series.forEach(function (s, si) {\n            // if seriesName matches and that series is not collapsed, we use that scale\n            // fix issue #1215\n            // proceed even if si is in gl.collapsedSeriesIndices\n            if (s.name === yaxe.seriesName) {\n              index = si;\n\n              if (i !== si) {\n                scalesIndices.push({\n                  index: si,\n                  similarIndex: i,\n                  alreadyExists: true\n                });\n              } else {\n                scalesIndices.push({\n                  index: si\n                });\n              }\n            }\n          });\n          var minY = minYArr[index];\n          var maxY = maxYArr[index];\n\n          _this.setYScaleForIndex(i, minY, maxY);\n        });\n        this.sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices);\n      }\n    }, {\n      key: \"sameScaleInMultipleAxes\",\n      value: function sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices) {\n        var _this2 = this;\n\n        var cnf = this.w.config;\n        var gl = this.w.globals; // we got the scalesIndices array in the above code, but we need to filter out the items which doesn't have same scales\n\n        var similarIndices = [];\n        scalesIndices.forEach(function (scale) {\n          if (scale.alreadyExists) {\n            if (typeof similarIndices[scale.index] === 'undefined') {\n              similarIndices[scale.index] = [];\n            }\n\n            similarIndices[scale.index].push(scale.index);\n            similarIndices[scale.index].push(scale.similarIndex);\n          }\n        });\n\n        function intersect(a, b) {\n          return a.filter(function (value) {\n            return b.indexOf(value) !== -1;\n          });\n        }\n\n        gl.yAxisSameScaleIndices = similarIndices;\n        similarIndices.forEach(function (si, i) {\n          similarIndices.forEach(function (sj, j) {\n            if (i !== j) {\n              if (intersect(si, sj).length > 0) {\n                similarIndices[i] = similarIndices[i].concat(similarIndices[j]);\n              }\n            }\n          });\n        }); // then, we remove duplicates from the similarScale array\n\n        var uniqueSimilarIndices = similarIndices.map(function (item) {\n          return item.filter(function (i, pos) {\n            return item.indexOf(i) === pos;\n          });\n        }); // sort further to remove whole duplicate arrays later\n\n        var sortedIndices = uniqueSimilarIndices.map(function (s) {\n          return s.sort();\n        }); // remove undefined items\n\n        similarIndices = similarIndices.filter(function (s) {\n          return !!s;\n        });\n        var indices = sortedIndices.slice();\n        var stringIndices = indices.map(function (ind) {\n          return JSON.stringify(ind);\n        });\n        indices = indices.filter(function (ind, p) {\n          return stringIndices.indexOf(JSON.stringify(ind)) === p;\n        });\n        var sameScaleMinYArr = [];\n        var sameScaleMaxYArr = [];\n        minYArr.forEach(function (minYValue, yi) {\n          indices.forEach(function (scale, i) {\n            // we compare only the yIndex which exists in the indices array\n            if (scale.indexOf(yi) > -1) {\n              if (typeof sameScaleMinYArr[i] === 'undefined') {\n                sameScaleMinYArr[i] = [];\n                sameScaleMaxYArr[i] = [];\n              }\n\n              sameScaleMinYArr[i].push({\n                key: yi,\n                value: minYValue\n              });\n              sameScaleMaxYArr[i].push({\n                key: yi,\n                value: maxYArr[yi]\n              });\n            }\n          });\n        });\n        var sameScaleMin = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, Number.MIN_VALUE);\n        var sameScaleMax = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, -Number.MAX_VALUE);\n        sameScaleMinYArr.forEach(function (s, i) {\n          s.forEach(function (sc, j) {\n            sameScaleMin[i] = Math.min(sc.value, sameScaleMin[i]);\n          });\n        });\n        sameScaleMaxYArr.forEach(function (s, i) {\n          s.forEach(function (sc, j) {\n            sameScaleMax[i] = Math.max(sc.value, sameScaleMax[i]);\n          });\n        });\n        minYArr.forEach(function (min, i) {\n          sameScaleMaxYArr.forEach(function (s, si) {\n            var minY = sameScaleMin[si];\n            var maxY = sameScaleMax[si];\n\n            if (cnf.chart.stacked) {\n              // for stacked charts, we need to add the values\n              maxY = 0;\n              s.forEach(function (ind, k) {\n                // fix incorrectly adjust y scale issue #1215\n                if (ind.value !== -Number.MAX_VALUE) {\n                  maxY += ind.value;\n                }\n\n                if (minY !== Number.MIN_VALUE) {\n                  minY += sameScaleMinYArr[si][k].value;\n                }\n              });\n            }\n\n            s.forEach(function (ind, k) {\n              if (s[k].key === i) {\n                if (cnf.yaxis[i].min !== undefined) {\n                  if (typeof cnf.yaxis[i].min === 'function') {\n                    minY = cnf.yaxis[i].min(gl.minY);\n                  } else {\n                    minY = cnf.yaxis[i].min;\n                  }\n                }\n\n                if (cnf.yaxis[i].max !== undefined) {\n                  if (typeof cnf.yaxis[i].max === 'function') {\n                    maxY = cnf.yaxis[i].max(gl.maxY);\n                  } else {\n                    maxY = cnf.yaxis[i].max;\n                  }\n                }\n\n                _this2.setYScaleForIndex(i, minY, maxY);\n              }\n            });\n          });\n        });\n      } // experimental feature which scales the y-axis to a min/max based on x-axis range\n\n    }, {\n      key: \"autoScaleY\",\n      value: function autoScaleY(ctx, yaxis, e) {\n        if (!ctx) {\n          ctx = this;\n        }\n\n        var w = ctx.w;\n\n        if (w.globals.isMultipleYAxis || w.globals.collapsedSeries.length) {\n          // The autoScale option for multiple y-axis is turned off as it leads to buggy behavior.\n          // Also, when a series is collapsed, it results in incorrect behavior. Hence turned it off for that too - fixes apexcharts.js#795\n          console.warn('autoScaleYaxis is not supported in a multi-yaxis chart.');\n          return yaxis;\n        }\n\n        var seriesX = w.globals.seriesX[0];\n        var isStacked = w.config.chart.stacked;\n        yaxis.forEach(function (yaxe, yi) {\n          var firstXIndex = 0;\n\n          for (var xi = 0; xi < seriesX.length; xi++) {\n            if (seriesX[xi] >= e.xaxis.min) {\n              firstXIndex = xi;\n              break;\n            }\n          }\n\n          var initialMin = w.globals.minYArr[yi];\n          var initialMax = w.globals.maxYArr[yi];\n          var min, max;\n          var stackedSer = w.globals.stackedSeriesTotals;\n          w.globals.series.forEach(function (serie, sI) {\n            var firstValue = serie[firstXIndex];\n\n            if (isStacked) {\n              firstValue = stackedSer[firstXIndex];\n              min = max = firstValue;\n              stackedSer.forEach(function (y, yI) {\n                if (seriesX[yI] <= e.xaxis.max && seriesX[yI] >= e.xaxis.min) {\n                  if (y > max && y !== null) max = y;\n                  if (serie[yI] < min && serie[yI] !== null) min = serie[yI];\n                }\n              });\n            } else {\n              min = max = firstValue;\n              serie.forEach(function (y, yI) {\n                if (seriesX[yI] <= e.xaxis.max && seriesX[yI] >= e.xaxis.min) {\n                  var valMin = y;\n                  var valMax = y;\n                  w.globals.series.forEach(function (wS, wSI) {\n                    if (y !== null) {\n                      valMin = Math.min(wS[yI], valMin);\n                      valMax = Math.max(wS[yI], valMax);\n                    }\n                  });\n                  if (valMax > max && valMax !== null) max = valMax;\n                  if (valMin < min && valMin !== null) min = valMin;\n                }\n              });\n            }\n\n            if (min === undefined && max === undefined) {\n              min = initialMin;\n              max = initialMax;\n            }\n\n            min *= min < 0 ? 1.1 : 0.9;\n            max *= max < 0 ? 0.9 : 1.1;\n\n            if (min === 0 && max === 0) {\n              min = -1;\n              max = 1;\n            }\n\n            if (max < 0 && max < initialMax) {\n              max = initialMax;\n            }\n\n            if (min < 0 && min > initialMin) {\n              min = initialMin;\n            }\n\n            if (yaxis.length > 1) {\n              yaxis[sI].min = yaxe.min === undefined ? min : yaxe.min;\n              yaxis[sI].max = yaxe.max === undefined ? max : yaxe.max;\n            } else {\n              yaxis[0].min = yaxe.min === undefined ? min : yaxe.min;\n              yaxis[0].max = yaxe.max === undefined ? max : yaxe.max;\n            }\n          });\n        });\n        return yaxis;\n      }\n    }]);\n\n    return Range;\n  }();\n\n  /**\n   * Range is used to generates values between min and max.\n   *\n   * @module Range\n   **/\n\n  var Range = /*#__PURE__*/function () {\n    function Range(ctx) {\n      _classCallCheck(this, Range);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.scales = new Range$1(ctx);\n    }\n\n    _createClass(Range, [{\n      key: \"init\",\n      value: function init() {\n        this.setYRange();\n        this.setXRange();\n        this.setZRange();\n      }\n    }, {\n      key: \"getMinYMaxY\",\n      value: function getMinYMaxY(startingIndex) {\n        var lowestY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n        var highestY = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -Number.MAX_VALUE;\n        var len = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n        var cnf = this.w.config;\n        var gl = this.w.globals;\n        var maxY = -Number.MAX_VALUE;\n        var minY = Number.MIN_VALUE;\n\n        if (len === null) {\n          len = startingIndex + 1;\n        }\n\n        var series = gl.series;\n        var seriesMin = series;\n        var seriesMax = series;\n\n        if (cnf.chart.type === 'candlestick') {\n          seriesMin = gl.seriesCandleL;\n          seriesMax = gl.seriesCandleH;\n        } else if (cnf.chart.type === 'boxPlot') {\n          seriesMin = gl.seriesCandleO;\n          seriesMax = gl.seriesCandleC;\n        } else if (gl.isRangeData) {\n          seriesMin = gl.seriesRangeStart;\n          seriesMax = gl.seriesRangeEnd;\n        }\n\n        for (var i = startingIndex; i < len; i++) {\n          gl.dataPoints = Math.max(gl.dataPoints, series[i].length);\n\n          if (gl.categoryLabels.length) {\n            gl.dataPoints = gl.categoryLabels.filter(function (label) {\n              return typeof label !== 'undefined';\n            }).length;\n          }\n\n          if (gl.labels.length) {\n            gl.dataPoints = Math.max(gl.dataPoints, gl.labels.length);\n          }\n\n          for (var j = 0; j < gl.series[i].length; j++) {\n            var val = series[i][j];\n\n            if (val !== null && Utils$1.isNumber(val)) {\n              if (typeof seriesMax[i][j] !== 'undefined') {\n                maxY = Math.max(maxY, seriesMax[i][j]);\n                lowestY = Math.min(lowestY, seriesMax[i][j]);\n              }\n\n              if (typeof seriesMin[i][j] !== 'undefined') {\n                lowestY = Math.min(lowestY, seriesMin[i][j]);\n                highestY = Math.max(highestY, seriesMin[i][j]);\n              }\n\n              if (this.w.config.chart.type === 'candlestick' || this.w.config.chart.type === 'boxPlot' || this.w.config.chart.type !== 'rangeArea' || this.w.config.chart.type !== 'rangeBar') {\n                if (this.w.config.chart.type === 'candlestick' || this.w.config.chart.type === 'boxPlot') {\n                  if (typeof gl.seriesCandleC[i][j] !== 'undefined') {\n                    maxY = Math.max(maxY, gl.seriesCandleO[i][j]);\n                    maxY = Math.max(maxY, gl.seriesCandleH[i][j]);\n                    maxY = Math.max(maxY, gl.seriesCandleL[i][j]);\n                    maxY = Math.max(maxY, gl.seriesCandleC[i][j]);\n\n                    if (this.w.config.chart.type === 'boxPlot') {\n                      maxY = Math.max(maxY, gl.seriesCandleM[i][j]);\n                    }\n                  }\n                } // there is a combo chart and the specified series in not either candlestick, boxplot, or rangeArea/rangeBar; find the max there\n\n\n                if (cnf.series[i].type && (cnf.series[i].type !== 'candlestick' || cnf.series[i].type !== 'boxPlot' || cnf.series[i].type !== 'rangeArea' || cnf.series[i].type !== 'rangeBar')) {\n                  maxY = Math.max(maxY, gl.series[i][j]);\n                  lowestY = Math.min(lowestY, gl.series[i][j]);\n                }\n\n                highestY = maxY;\n              }\n\n              if (gl.seriesGoals[i] && gl.seriesGoals[i][j] && Array.isArray(gl.seriesGoals[i][j])) {\n                gl.seriesGoals[i][j].forEach(function (g) {\n                  if (minY !== Number.MIN_VALUE) {\n                    minY = Math.min(minY, g.value);\n                    lowestY = minY;\n                  }\n\n                  maxY = Math.max(maxY, g.value);\n                  highestY = maxY;\n                });\n              }\n\n              if (Utils$1.isFloat(val)) {\n                val = Utils$1.noExponents(val);\n                gl.yValueDecimal = Math.max(gl.yValueDecimal, val.toString().split('.')[1].length);\n              }\n\n              if (minY > seriesMin[i][j] && seriesMin[i][j] < 0) {\n                minY = seriesMin[i][j];\n              }\n            } else {\n              gl.hasNullValues = true;\n            }\n          }\n        }\n\n        if (cnf.chart.type === 'rangeBar' && gl.seriesRangeStart.length && gl.isBarHorizontal) {\n          minY = lowestY;\n        }\n\n        if (cnf.chart.type === 'bar') {\n          if (minY < 0 && maxY < 0) {\n            // all negative values in a bar chart, hence make the max to 0\n            maxY = 0;\n          }\n\n          if (minY === Number.MIN_VALUE) {\n            minY = 0;\n          }\n        }\n\n        return {\n          minY: minY,\n          maxY: maxY,\n          lowestY: lowestY,\n          highestY: highestY\n        };\n      }\n    }, {\n      key: \"setYRange\",\n      value: function setYRange() {\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        gl.maxY = -Number.MAX_VALUE;\n        gl.minY = Number.MIN_VALUE;\n        var lowestYInAllSeries = Number.MAX_VALUE;\n\n        if (gl.isMultipleYAxis) {\n          // we need to get minY and maxY for multiple y axis\n          for (var i = 0; i < gl.series.length; i++) {\n            var minYMaxYArr = this.getMinYMaxY(i, lowestYInAllSeries, null, i + 1);\n            gl.minYArr.push(minYMaxYArr.minY);\n            gl.maxYArr.push(minYMaxYArr.maxY);\n            lowestYInAllSeries = minYMaxYArr.lowestY;\n          }\n        } // and then, get the minY and maxY from all series\n\n\n        var minYMaxY = this.getMinYMaxY(0, lowestYInAllSeries, null, gl.series.length);\n        gl.minY = minYMaxY.minY;\n        gl.maxY = minYMaxY.maxY;\n        lowestYInAllSeries = minYMaxY.lowestY;\n\n        if (cnf.chart.stacked) {\n          this._setStackedMinMax();\n        } // if the numbers are too big, reduce the range\n        // for eg, if number is between 100000-110000, putting 0 as the lowest value is not so good idea. So change the gl.minY for line/area/candlesticks/boxPlot\n\n\n        if (cnf.chart.type === 'line' || cnf.chart.type === 'area' || cnf.chart.type === 'candlestick' || cnf.chart.type === 'boxPlot' || cnf.chart.type === 'rangeBar' && !gl.isBarHorizontal) {\n          if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE && lowestYInAllSeries !== gl.maxY // single value possibility\n          ) {\n            var diff = gl.maxY - lowestYInAllSeries;\n\n            if (lowestYInAllSeries >= 0 && lowestYInAllSeries <= 10 || cnf.yaxis[0].min !== undefined || cnf.yaxis[0].max !== undefined) {\n              // if minY is already 0/low value, we don't want to go negatives here - so this check is essential.\n              diff = 0;\n            }\n\n            gl.minY = lowestYInAllSeries - diff * 5 / 100;\n            /* fix https://github.com/apexcharts/apexcharts.js/issues/614 */\n\n            /* fix https://github.com/apexcharts/apexcharts.js/issues/968 */\n\n            if (lowestYInAllSeries > 0 && gl.minY < 0) {\n              gl.minY = 0;\n            }\n            /* fix https://github.com/apexcharts/apexcharts.js/issues/426 */\n\n\n            gl.maxY = gl.maxY + diff * 5 / 100;\n          }\n        }\n\n        cnf.yaxis.forEach(function (yaxe, index) {\n          // override all min/max values by user defined values (y axis)\n          if (yaxe.max !== undefined) {\n            if (typeof yaxe.max === 'number') {\n              gl.maxYArr[index] = yaxe.max;\n            } else if (typeof yaxe.max === 'function') {\n              // fixes apexcharts.js/issues/2098\n              gl.maxYArr[index] = yaxe.max(gl.isMultipleYAxis ? gl.maxYArr[index] : gl.maxY);\n            } // gl.maxY is for single y-axis chart, it will be ignored in multi-yaxis\n\n\n            gl.maxY = gl.maxYArr[index];\n          }\n\n          if (yaxe.min !== undefined) {\n            if (typeof yaxe.min === 'number') {\n              gl.minYArr[index] = yaxe.min;\n            } else if (typeof yaxe.min === 'function') {\n              // fixes apexcharts.js/issues/2098\n              gl.minYArr[index] = yaxe.min(gl.isMultipleYAxis ? gl.minYArr[index] === Number.MIN_VALUE ? 0 : gl.minYArr[index] : gl.minY);\n            } // gl.minY is for single y-axis chart, it will be ignored in multi-yaxis\n\n\n            gl.minY = gl.minYArr[index];\n          }\n        }); // for horizontal bar charts, we need to check xaxis min/max as user may have specified there\n\n        if (gl.isBarHorizontal) {\n          var minmax = ['min', 'max'];\n          minmax.forEach(function (m) {\n            if (cnf.xaxis[m] !== undefined && typeof cnf.xaxis[m] === 'number') {\n              m === 'min' ? gl.minY = cnf.xaxis[m] : gl.maxY = cnf.xaxis[m];\n            }\n          });\n        } // for multi y-axis we need different scales for each\n\n\n        if (gl.isMultipleYAxis) {\n          this.scales.setMultipleYScales();\n          gl.minY = lowestYInAllSeries;\n          gl.yAxisScale.forEach(function (scale, i) {\n            gl.minYArr[i] = scale.niceMin;\n            gl.maxYArr[i] = scale.niceMax;\n          });\n        } else {\n          this.scales.setYScaleForIndex(0, gl.minY, gl.maxY);\n          gl.minY = gl.yAxisScale[0].niceMin;\n          gl.maxY = gl.yAxisScale[0].niceMax;\n          gl.minYArr[0] = gl.yAxisScale[0].niceMin;\n          gl.maxYArr[0] = gl.yAxisScale[0].niceMax;\n        }\n\n        return {\n          minY: gl.minY,\n          maxY: gl.maxY,\n          minYArr: gl.minYArr,\n          maxYArr: gl.maxYArr,\n          yAxisScale: gl.yAxisScale\n        };\n      }\n    }, {\n      key: \"setXRange\",\n      value: function setXRange() {\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        var isXNumeric = cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'datetime' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided || gl.noLabelsProvided || gl.isXNumeric;\n\n        var getInitialMinXMaxX = function getInitialMinXMaxX() {\n          for (var i = 0; i < gl.series.length; i++) {\n            if (gl.labels[i]) {\n              for (var j = 0; j < gl.labels[i].length; j++) {\n                if (gl.labels[i][j] !== null && Utils$1.isNumber(gl.labels[i][j])) {\n                  gl.maxX = Math.max(gl.maxX, gl.labels[i][j]);\n                  gl.initialMaxX = Math.max(gl.maxX, gl.labels[i][j]);\n                  gl.minX = Math.min(gl.minX, gl.labels[i][j]);\n                  gl.initialMinX = Math.min(gl.minX, gl.labels[i][j]);\n                }\n              }\n            }\n          }\n        }; // minX maxX starts here\n\n\n        if (gl.isXNumeric) {\n          getInitialMinXMaxX();\n        }\n\n        if (gl.noLabelsProvided) {\n          if (cnf.xaxis.categories.length === 0) {\n            gl.maxX = gl.labels[gl.labels.length - 1];\n            gl.initialMaxX = gl.labels[gl.labels.length - 1];\n            gl.minX = 1;\n            gl.initialMinX = 1;\n          }\n        }\n\n        if (gl.isXNumeric || gl.noLabelsProvided || gl.dataFormatXNumeric) {\n          var ticks;\n\n          if (cnf.xaxis.tickAmount === undefined) {\n            ticks = Math.round(gl.svgWidth / 150); // no labels provided and total number of dataPoints is less than 30\n\n            if (cnf.xaxis.type === 'numeric' && gl.dataPoints < 30) {\n              ticks = gl.dataPoints - 1;\n            } // this check is for when ticks exceeds total datapoints and that would result in duplicate labels\n\n\n            if (ticks > gl.dataPoints && gl.dataPoints !== 0) {\n              ticks = gl.dataPoints - 1;\n            }\n          } else if (cnf.xaxis.tickAmount === 'dataPoints') {\n            if (gl.series.length > 1) {\n              ticks = gl.series[gl.maxValsInArrayIndex].length - 1;\n            }\n\n            if (gl.isXNumeric) {\n              ticks = gl.maxX - gl.minX - 1;\n            }\n          } else {\n            ticks = cnf.xaxis.tickAmount;\n          }\n\n          gl.xTickAmount = ticks; // override all min/max values by user defined values (x axis)\n\n          if (cnf.xaxis.max !== undefined && typeof cnf.xaxis.max === 'number') {\n            gl.maxX = cnf.xaxis.max;\n          }\n\n          if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') {\n            gl.minX = cnf.xaxis.min;\n          } // if range is provided, adjust the new minX\n\n\n          if (cnf.xaxis.range !== undefined) {\n            gl.minX = gl.maxX - cnf.xaxis.range;\n          }\n\n          if (gl.minX !== Number.MAX_VALUE && gl.maxX !== -Number.MAX_VALUE) {\n            if (cnf.xaxis.convertedCatToNumeric && !gl.dataFormatXNumeric) {\n              var catScale = [];\n\n              for (var i = gl.minX - 1; i < gl.maxX; i++) {\n                catScale.push(i + 1);\n              }\n\n              gl.xAxisScale = {\n                result: catScale,\n                niceMin: catScale[0],\n                niceMax: catScale[catScale.length - 1]\n              };\n            } else {\n              gl.xAxisScale = this.scales.setXScale(gl.minX, gl.maxX);\n            }\n          } else {\n            gl.xAxisScale = this.scales.linearScale(1, ticks, ticks);\n\n            if (gl.noLabelsProvided && gl.labels.length > 0) {\n              gl.xAxisScale = this.scales.linearScale(1, gl.labels.length, ticks - 1); // this is the only place seriesX is again mutated\n\n              gl.seriesX = gl.labels.slice();\n            }\n          } // we will still store these labels as the count for this will be different (to draw grid and labels placement)\n\n\n          if (isXNumeric) {\n            gl.labels = gl.xAxisScale.result.slice();\n          }\n        }\n\n        if (gl.isBarHorizontal && gl.labels.length) {\n          gl.xTickAmount = gl.labels.length;\n        } // single dataPoint\n\n\n        this._handleSingleDataPoint(); // minimum x difference to calculate bar width in numeric bars\n\n\n        this._getMinXDiff();\n\n        return {\n          minX: gl.minX,\n          maxX: gl.maxX\n        };\n      }\n    }, {\n      key: \"setZRange\",\n      value: function setZRange() {\n        // minZ, maxZ starts here\n        var gl = this.w.globals;\n        if (!gl.isDataXYZ) return;\n\n        for (var i = 0; i < gl.series.length; i++) {\n          if (typeof gl.seriesZ[i] !== 'undefined') {\n            for (var j = 0; j < gl.seriesZ[i].length; j++) {\n              if (gl.seriesZ[i][j] !== null && Utils$1.isNumber(gl.seriesZ[i][j])) {\n                gl.maxZ = Math.max(gl.maxZ, gl.seriesZ[i][j]);\n                gl.minZ = Math.min(gl.minZ, gl.seriesZ[i][j]);\n              }\n            }\n          }\n        }\n      }\n    }, {\n      key: \"_handleSingleDataPoint\",\n      value: function _handleSingleDataPoint() {\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n\n        if (gl.minX === gl.maxX) {\n          var datetimeObj = new DateTime(this.ctx);\n\n          if (cnf.xaxis.type === 'datetime') {\n            var newMinX = datetimeObj.getDate(gl.minX);\n\n            if (cnf.xaxis.labels.datetimeUTC) {\n              newMinX.setUTCDate(newMinX.getUTCDate() - 2);\n            } else {\n              newMinX.setDate(newMinX.getDate() - 2);\n            }\n\n            gl.minX = new Date(newMinX).getTime();\n            var newMaxX = datetimeObj.getDate(gl.maxX);\n\n            if (cnf.xaxis.labels.datetimeUTC) {\n              newMaxX.setUTCDate(newMaxX.getUTCDate() + 2);\n            } else {\n              newMaxX.setDate(newMaxX.getDate() + 2);\n            }\n\n            gl.maxX = new Date(newMaxX).getTime();\n          } else if (cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided) {\n            gl.minX = gl.minX - 2;\n            gl.initialMinX = gl.minX;\n            gl.maxX = gl.maxX + 2;\n            gl.initialMaxX = gl.maxX;\n          }\n        }\n      }\n    }, {\n      key: \"_getMinXDiff\",\n      value: function _getMinXDiff() {\n        var gl = this.w.globals;\n\n        if (gl.isXNumeric) {\n          // get the least x diff if numeric x axis is present\n          gl.seriesX.forEach(function (sX, i) {\n            if (sX.length === 1) {\n              // a small hack to prevent overlapping multiple bars when there is just 1 datapoint in bar series.\n              // fix #811\n              sX.push(gl.seriesX[gl.maxValsInArrayIndex][gl.seriesX[gl.maxValsInArrayIndex].length - 1]);\n            } // fix #983 (clone the array to avoid side effects)\n\n\n            var seriesX = sX.slice();\n            seriesX.sort(function (a, b) {\n              return a - b;\n            });\n            seriesX.forEach(function (s, j) {\n              if (j > 0) {\n                var xDiff = s - seriesX[j - 1];\n\n                if (xDiff > 0) {\n                  gl.minXDiff = Math.min(xDiff, gl.minXDiff);\n                }\n              }\n            });\n\n            if (gl.dataPoints === 1 || gl.minXDiff === Number.MAX_VALUE) {\n              // fixes apexcharts.js #1221\n              gl.minXDiff = 0.5;\n            }\n          });\n        }\n      }\n    }, {\n      key: \"_setStackedMinMax\",\n      value: function _setStackedMinMax() {\n        var _this = this;\n\n        var gl = this.w.globals; // for stacked charts, we calculate each series's parallel values. i.e, series[0][j] + series[1][j] .... [series[i.length][j]] and get the max out of it\n\n        if (!gl.series.length) return;\n        var seriesGroups = gl.seriesGroups;\n\n        if (!seriesGroups.length) {\n          seriesGroups = [this.w.config.series.map(function (serie) {\n            return serie.name;\n          })];\n        }\n\n        var stackedPoss = {};\n        var stackedNegs = {};\n        seriesGroups.forEach(function (group) {\n          stackedPoss[group] = [];\n          stackedNegs[group] = [];\n\n          var indicesOfSeriesInGroup = _this.w.config.series.map(function (serie, si) {\n            return group.indexOf(serie.name) > -1 ? si : null;\n          }).filter(function (f) {\n            return f !== null;\n          });\n\n          indicesOfSeriesInGroup.forEach(function (i) {\n            for (var j = 0; j < gl.series[gl.maxValsInArrayIndex].length; j++) {\n              if (typeof stackedPoss[group][j] === 'undefined') {\n                stackedPoss[group][j] = 0;\n                stackedNegs[group][j] = 0;\n              }\n\n              if (gl.series[i][j] !== null && Utils$1.isNumber(gl.series[i][j])) {\n                gl.series[i][j] > 0 ? stackedPoss[group][j] += parseFloat(gl.series[i][j]) + 0.0001 : stackedNegs[group][j] += parseFloat(gl.series[i][j]);\n              }\n            }\n          });\n        });\n        Object.entries(stackedPoss).forEach(function (_ref) {\n          var _ref2 = _slicedToArray(_ref, 1),\n              key = _ref2[0];\n\n          stackedPoss[key].forEach(function (_, stgi) {\n            gl.maxY = Math.max(gl.maxY, stackedPoss[key][stgi]);\n            gl.minY = Math.min(gl.minY, stackedNegs[key][stgi]);\n          });\n        });\n      }\n    }]);\n\n    return Range;\n  }();\n\n  /**\n   * ApexCharts YAxis Class for drawing Y-Axis.\n   *\n   * @module YAxis\n   **/\n\n  var YAxis = /*#__PURE__*/function () {\n    function YAxis(ctx, elgrid) {\n      _classCallCheck(this, YAxis);\n\n      this.ctx = ctx;\n      this.elgrid = elgrid;\n      this.w = ctx.w;\n      var w = this.w;\n      this.xaxisFontSize = w.config.xaxis.labels.style.fontSize;\n      this.axisFontFamily = w.config.xaxis.labels.style.fontFamily;\n      this.xaxisForeColors = w.config.xaxis.labels.style.colors;\n      this.isCategoryBarHorizontal = w.config.chart.type === 'bar' && w.config.plotOptions.bar.horizontal;\n      this.xAxisoffX = 0;\n\n      if (w.config.xaxis.position === 'bottom') {\n        this.xAxisoffX = w.globals.gridHeight;\n      }\n\n      this.drawnLabels = [];\n      this.axesUtils = new AxesUtils(ctx);\n    }\n\n    _createClass(YAxis, [{\n      key: \"drawYaxis\",\n      value: function drawYaxis(realIndex) {\n        var _this = this;\n\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var yaxisStyle = w.config.yaxis[realIndex].labels.style;\n        var yaxisFontSize = yaxisStyle.fontSize;\n        var yaxisFontFamily = yaxisStyle.fontFamily;\n        var yaxisFontWeight = yaxisStyle.fontWeight;\n        var elYaxis = graphics.group({\n          class: 'apexcharts-yaxis',\n          rel: realIndex,\n          transform: 'translate(' + w.globals.translateYAxisX[realIndex] + ', 0)'\n        });\n\n        if (this.axesUtils.isYAxisHidden(realIndex)) {\n          return elYaxis;\n        }\n\n        var elYaxisTexts = graphics.group({\n          class: 'apexcharts-yaxis-texts-g'\n        });\n        elYaxis.add(elYaxisTexts);\n        var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg height/number of ticks\n\n        var labelsDivider = w.globals.gridHeight / tickAmount; // initial label position = 0;\n\n        var l = w.globals.translateY;\n        var lbFormatter = w.globals.yLabelFormatters[realIndex];\n        var labels = w.globals.yAxisScale[realIndex].result.slice();\n        labels = this.axesUtils.checkForReversedLabels(realIndex, labels);\n        var firstLabel = '';\n\n        if (w.config.yaxis[realIndex].labels.show) {\n          var _loop = function _loop(i) {\n            var val = labels[i];\n            val = lbFormatter(val, i, w);\n            var xPad = w.config.yaxis[realIndex].labels.padding;\n\n            if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0) {\n              xPad = xPad * -1;\n            }\n\n            var textAnchor = 'end';\n\n            if (w.config.yaxis[realIndex].opposite) {\n              textAnchor = 'start';\n            }\n\n            if (w.config.yaxis[realIndex].labels.align === 'left') {\n              textAnchor = 'start';\n            } else if (w.config.yaxis[realIndex].labels.align === 'center') {\n              textAnchor = 'middle';\n            } else if (w.config.yaxis[realIndex].labels.align === 'right') {\n              textAnchor = 'end';\n            }\n\n            var yColors = _this.axesUtils.getYAxisForeColor(yaxisStyle.colors, realIndex);\n\n            var getForeColor = function getForeColor() {\n              return Array.isArray(yColors) ? yColors[i] : yColors;\n            };\n\n            var label = graphics.drawText({\n              x: xPad,\n              y: l + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY + 1,\n              text: val,\n              textAnchor: textAnchor,\n              fontSize: yaxisFontSize,\n              fontFamily: yaxisFontFamily,\n              fontWeight: yaxisFontWeight,\n              maxWidth: w.config.yaxis[realIndex].labels.maxWidth,\n              foreColor: getForeColor(),\n              isPlainText: false,\n              cssClass: 'apexcharts-yaxis-label ' + yaxisStyle.cssClass\n            });\n\n            if (i === tickAmount) {\n              firstLabel = label;\n            }\n\n            elYaxisTexts.add(label);\n            var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title');\n            elTooltipTitle.textContent = Array.isArray(val) ? val.join(' ') : val;\n            label.node.appendChild(elTooltipTitle);\n\n            if (w.config.yaxis[realIndex].labels.rotate !== 0) {\n              var firstabelRotatingCenter = graphics.rotateAroundCenter(firstLabel.node);\n              var labelRotatingCenter = graphics.rotateAroundCenter(label.node);\n              label.node.setAttribute('transform', \"rotate(\".concat(w.config.yaxis[realIndex].labels.rotate, \" \").concat(firstabelRotatingCenter.x, \" \").concat(labelRotatingCenter.y, \")\"));\n            }\n\n            l = l + labelsDivider;\n          };\n\n          for (var i = tickAmount; i >= 0; i--) {\n            _loop(i);\n          }\n        }\n\n        if (w.config.yaxis[realIndex].title.text !== undefined) {\n          var elYaxisTitle = graphics.group({\n            class: 'apexcharts-yaxis-title'\n          });\n          var _x = 0;\n\n          if (w.config.yaxis[realIndex].opposite) {\n            _x = w.globals.translateYAxisX[realIndex];\n          }\n\n          var elYAxisTitleText = graphics.drawText({\n            x: _x,\n            y: w.globals.gridHeight / 2 + w.globals.translateY + w.config.yaxis[realIndex].title.offsetY,\n            text: w.config.yaxis[realIndex].title.text,\n            textAnchor: 'end',\n            foreColor: w.config.yaxis[realIndex].title.style.color,\n            fontSize: w.config.yaxis[realIndex].title.style.fontSize,\n            fontWeight: w.config.yaxis[realIndex].title.style.fontWeight,\n            fontFamily: w.config.yaxis[realIndex].title.style.fontFamily,\n            cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[realIndex].title.style.cssClass\n          });\n          elYaxisTitle.add(elYAxisTitleText);\n          elYaxis.add(elYaxisTitle);\n        }\n\n        var axisBorder = w.config.yaxis[realIndex].axisBorder;\n        var x = 31 + axisBorder.offsetX;\n\n        if (w.config.yaxis[realIndex].opposite) {\n          x = -31 - axisBorder.offsetX;\n        }\n\n        if (axisBorder.show) {\n          var elVerticalLine = graphics.drawLine(x, w.globals.translateY + axisBorder.offsetY - 2, x, w.globals.gridHeight + w.globals.translateY + axisBorder.offsetY + 2, axisBorder.color, 0, axisBorder.width);\n          elYaxis.add(elVerticalLine);\n        }\n\n        if (w.config.yaxis[realIndex].axisTicks.show) {\n          this.axesUtils.drawYAxisTicks(x, tickAmount, axisBorder, w.config.yaxis[realIndex].axisTicks, realIndex, labelsDivider, elYaxis);\n        }\n\n        return elYaxis;\n      } // This actually becomes horizontal axis (for bar charts)\n\n    }, {\n      key: \"drawYaxisInversed\",\n      value: function drawYaxisInversed(realIndex) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var elXaxis = graphics.group({\n          class: 'apexcharts-xaxis apexcharts-yaxis-inversed'\n        });\n        var elXaxisTexts = graphics.group({\n          class: 'apexcharts-xaxis-texts-g',\n          transform: \"translate(\".concat(w.globals.translateXAxisX, \", \").concat(w.globals.translateXAxisY, \")\")\n        });\n        elXaxis.add(elXaxisTexts);\n        var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg width/number of ticks\n\n        var labelsDivider = w.globals.gridWidth / tickAmount + 0.1; // initial label position;\n\n        var l = labelsDivider + w.config.xaxis.labels.offsetX;\n        var lbFormatter = w.globals.xLabelFormatter;\n        var labels = w.globals.yAxisScale[realIndex].result.slice();\n        var timescaleLabels = w.globals.timescaleLabels;\n\n        if (timescaleLabels.length > 0) {\n          this.xaxisLabels = timescaleLabels.slice();\n          labels = timescaleLabels.slice();\n          tickAmount = labels.length;\n        }\n\n        labels = this.axesUtils.checkForReversedLabels(realIndex, labels);\n        var tl = timescaleLabels.length;\n\n        if (w.config.xaxis.labels.show) {\n          for (var i = tl ? 0 : tickAmount; tl ? i < tl : i >= 0; tl ? i++ : i--) {\n            var val = labels[i];\n            val = lbFormatter(val, i, w);\n            var x = w.globals.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX);\n\n            if (timescaleLabels.length) {\n              var label = this.axesUtils.getLabel(labels, timescaleLabels, x, i, this.drawnLabels, this.xaxisFontSize);\n              x = label.x;\n              val = label.text;\n              this.drawnLabels.push(label.text);\n\n              if (i === 0 && w.globals.skipFirstTimelinelabel) {\n                val = '';\n              }\n\n              if (i === labels.length - 1 && w.globals.skipLastTimelinelabel) {\n                val = '';\n              }\n            }\n\n            var elTick = graphics.drawText({\n              x: x,\n              y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30 - (w.config.xaxis.position === 'top' ? w.globals.xAxisHeight + w.config.xaxis.axisTicks.height - 2 : 0),\n              text: val,\n              textAnchor: 'middle',\n              foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors,\n              fontSize: this.xaxisFontSize,\n              fontFamily: this.xaxisFontFamily,\n              fontWeight: w.config.xaxis.labels.style.fontWeight,\n              isPlainText: false,\n              cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass\n            });\n            elXaxisTexts.add(elTick);\n            elTick.tspan(val);\n            var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title');\n            elTooltipTitle.textContent = val;\n            elTick.node.appendChild(elTooltipTitle);\n            l = l + labelsDivider;\n          }\n        }\n\n        this.inversedYAxisTitleText(elXaxis);\n        this.inversedYAxisBorder(elXaxis);\n        return elXaxis;\n      }\n    }, {\n      key: \"inversedYAxisBorder\",\n      value: function inversedYAxisBorder(parent) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var axisBorder = w.config.xaxis.axisBorder;\n\n        if (axisBorder.show) {\n          var lineCorrection = 0;\n\n          if (w.config.chart.type === 'bar' && w.globals.isXNumeric) {\n            lineCorrection = lineCorrection - 15;\n          }\n\n          var elHorzLine = graphics.drawLine(w.globals.padHorizontal + lineCorrection + axisBorder.offsetX, this.xAxisoffX, w.globals.gridWidth, this.xAxisoffX, axisBorder.color, 0, axisBorder.height); // in horizontal bars, we append axisBorder to elGridBorders element to avoid z-index issues\n\n          if (this.elgrid && this.elgrid.elGridBorders && w.config.grid.show) {\n            this.elgrid.elGridBorders.add(elHorzLine);\n          } else {\n            parent.add(elHorzLine);\n          }\n        }\n      }\n    }, {\n      key: \"inversedYAxisTitleText\",\n      value: function inversedYAxisTitleText(parent) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n\n        if (w.config.xaxis.title.text !== undefined) {\n          var elYaxisTitle = graphics.group({\n            class: 'apexcharts-xaxis-title apexcharts-yaxis-title-inversed'\n          });\n          var elYAxisTitleText = graphics.drawText({\n            x: w.globals.gridWidth / 2 + w.config.xaxis.title.offsetX,\n            y: this.xAxisoffX + parseFloat(this.xaxisFontSize) + parseFloat(w.config.xaxis.title.style.fontSize) + w.config.xaxis.title.offsetY + 20,\n            text: w.config.xaxis.title.text,\n            textAnchor: 'middle',\n            fontSize: w.config.xaxis.title.style.fontSize,\n            fontFamily: w.config.xaxis.title.style.fontFamily,\n            fontWeight: w.config.xaxis.title.style.fontWeight,\n            foreColor: w.config.xaxis.title.style.color,\n            cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass\n          });\n          elYaxisTitle.add(elYAxisTitleText);\n          parent.add(elYaxisTitle);\n        }\n      }\n    }, {\n      key: \"yAxisTitleRotate\",\n      value: function yAxisTitleRotate(realIndex, yAxisOpposite) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var yAxisLabelsCoord = {\n          width: 0,\n          height: 0\n        };\n        var yAxisTitleCoord = {\n          width: 0,\n          height: 0\n        };\n        var elYAxisLabelsWrap = w.globals.dom.baseEl.querySelector(\" .apexcharts-yaxis[rel='\".concat(realIndex, \"'] .apexcharts-yaxis-texts-g\"));\n\n        if (elYAxisLabelsWrap !== null) {\n          yAxisLabelsCoord = elYAxisLabelsWrap.getBoundingClientRect();\n        }\n\n        var yAxisTitle = w.globals.dom.baseEl.querySelector(\".apexcharts-yaxis[rel='\".concat(realIndex, \"'] .apexcharts-yaxis-title text\"));\n\n        if (yAxisTitle !== null) {\n          yAxisTitleCoord = yAxisTitle.getBoundingClientRect();\n        }\n\n        if (yAxisTitle !== null) {\n          var x = this.xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite);\n          yAxisTitle.setAttribute('x', x.xPos - (yAxisOpposite ? 10 : 0));\n        }\n\n        if (yAxisTitle !== null) {\n          var titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle);\n          yAxisTitle.setAttribute('transform', \"rotate(\".concat(yAxisOpposite ? w.config.yaxis[realIndex].title.rotate * -1 : w.config.yaxis[realIndex].title.rotate, \" \").concat(titleRotatingCenter.x, \" \").concat(titleRotatingCenter.y, \")\"));\n        }\n      }\n    }, {\n      key: \"xPaddingForYAxisTitle\",\n      value: function xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) {\n        var w = this.w;\n        var oppositeAxisCount = 0;\n        var x = 0;\n        var padd = 10;\n\n        if (w.config.yaxis[realIndex].title.text === undefined || realIndex < 0) {\n          return {\n            xPos: x,\n            padd: 0\n          };\n        }\n\n        if (yAxisOpposite) {\n          x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2;\n          oppositeAxisCount += 1;\n\n          if (oppositeAxisCount === 0) {\n            x = x - padd / 2;\n          }\n        } else {\n          x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2;\n\n          if (w.globals.isBarHorizontal) {\n            padd = 25;\n            x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd;\n          }\n        }\n\n        return {\n          xPos: x,\n          padd: padd\n        };\n      } // sets the x position of the y-axis by counting the labels width, title width and any offset\n\n    }, {\n      key: \"setYAxisXPosition\",\n      value: function setYAxisXPosition(yaxisLabelCoords, yTitleCoords) {\n        var w = this.w;\n        var xLeft = 0;\n        var xRight = 0;\n        var leftOffsetX = 18;\n        var rightOffsetX = 1;\n\n        if (w.config.yaxis.length > 1) {\n          this.multipleYs = true;\n        }\n\n        w.config.yaxis.map(function (yaxe, index) {\n          var shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.indexOf(index) > -1 || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0;\n          var axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width;\n\n          if (!yaxe.opposite) {\n            xLeft = w.globals.translateX - leftOffsetX;\n\n            if (!shouldNotDrawAxis) {\n              leftOffsetX = leftOffsetX + axisWidth + 20;\n            }\n\n            w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX;\n          } else {\n            if (w.globals.isBarHorizontal) {\n              xRight = w.globals.gridWidth + w.globals.translateX - 1;\n              w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX;\n            } else {\n              xRight = w.globals.gridWidth + w.globals.translateX + rightOffsetX;\n\n              if (!shouldNotDrawAxis) {\n                rightOffsetX = rightOffsetX + axisWidth + 20;\n              }\n\n              w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20;\n            }\n          }\n        });\n      }\n    }, {\n      key: \"setYAxisTextAlignments\",\n      value: function setYAxisTextAlignments() {\n        var w = this.w;\n        var yaxis = w.globals.dom.baseEl.getElementsByClassName(\"apexcharts-yaxis\");\n        yaxis = Utils$1.listToArray(yaxis);\n        yaxis.forEach(function (y, index) {\n          var yaxe = w.config.yaxis[index]; // proceed only if user has specified alignment\n\n          if (yaxe && !yaxe.floating && yaxe.labels.align !== undefined) {\n            var yAxisInner = w.globals.dom.baseEl.querySelector(\".apexcharts-yaxis[rel='\".concat(index, \"'] .apexcharts-yaxis-texts-g\"));\n            var yAxisTexts = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis[rel='\".concat(index, \"'] .apexcharts-yaxis-label\"));\n            yAxisTexts = Utils$1.listToArray(yAxisTexts);\n            var rect = yAxisInner.getBoundingClientRect();\n\n            if (yaxe.labels.align === 'left') {\n              yAxisTexts.forEach(function (label, lI) {\n                label.setAttribute('text-anchor', 'start');\n              });\n\n              if (!yaxe.opposite) {\n                yAxisInner.setAttribute('transform', \"translate(-\".concat(rect.width, \", 0)\"));\n              }\n            } else if (yaxe.labels.align === 'center') {\n              yAxisTexts.forEach(function (label, lI) {\n                label.setAttribute('text-anchor', 'middle');\n              });\n              yAxisInner.setAttribute('transform', \"translate(\".concat(rect.width / 2 * (!yaxe.opposite ? -1 : 1), \", 0)\"));\n            } else if (yaxe.labels.align === 'right') {\n              yAxisTexts.forEach(function (label, lI) {\n                label.setAttribute('text-anchor', 'end');\n              });\n\n              if (yaxe.opposite) {\n                yAxisInner.setAttribute('transform', \"translate(\".concat(rect.width, \", 0)\"));\n              }\n            }\n          }\n        });\n      }\n    }]);\n\n    return YAxis;\n  }();\n\n  var Events = /*#__PURE__*/function () {\n    function Events(ctx) {\n      _classCallCheck(this, Events);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.documentEvent = Utils$1.bind(this.documentEvent, this);\n    }\n\n    _createClass(Events, [{\n      key: \"addEventListener\",\n      value: function addEventListener(name, handler) {\n        var w = this.w;\n\n        if (w.globals.events.hasOwnProperty(name)) {\n          w.globals.events[name].push(handler);\n        } else {\n          w.globals.events[name] = [handler];\n        }\n      }\n    }, {\n      key: \"removeEventListener\",\n      value: function removeEventListener(name, handler) {\n        var w = this.w;\n\n        if (!w.globals.events.hasOwnProperty(name)) {\n          return;\n        }\n\n        var index = w.globals.events[name].indexOf(handler);\n\n        if (index !== -1) {\n          w.globals.events[name].splice(index, 1);\n        }\n      }\n    }, {\n      key: \"fireEvent\",\n      value: function fireEvent(name, args) {\n        var w = this.w;\n\n        if (!w.globals.events.hasOwnProperty(name)) {\n          return;\n        }\n\n        if (!args || !args.length) {\n          args = [];\n        }\n\n        var evs = w.globals.events[name];\n        var l = evs.length;\n\n        for (var i = 0; i < l; i++) {\n          evs[i].apply(null, args);\n        }\n      }\n    }, {\n      key: \"setupEventHandlers\",\n      value: function setupEventHandlers() {\n        var _this = this;\n\n        var w = this.w;\n        var me = this.ctx;\n        var clickableArea = w.globals.dom.baseEl.querySelector(w.globals.chartClass);\n        this.ctx.eventList.forEach(function (event) {\n          clickableArea.addEventListener(event, function (e) {\n            var opts = Object.assign({}, w, {\n              seriesIndex: w.globals.capturedSeriesIndex,\n              dataPointIndex: w.globals.capturedDataPointIndex\n            });\n\n            if (e.type === 'mousemove' || e.type === 'touchmove') {\n              if (typeof w.config.chart.events.mouseMove === 'function') {\n                w.config.chart.events.mouseMove(e, me, opts);\n              }\n            } else if (e.type === 'mouseleave' || e.type === 'touchleave') {\n              if (typeof w.config.chart.events.mouseLeave === 'function') {\n                w.config.chart.events.mouseLeave(e, me, opts);\n              }\n            } else if (e.type === 'mouseup' && e.which === 1 || e.type === 'touchend') {\n              if (typeof w.config.chart.events.click === 'function') {\n                w.config.chart.events.click(e, me, opts);\n              }\n\n              me.ctx.events.fireEvent('click', [e, me, opts]);\n            }\n          }, {\n            capture: false,\n            passive: true\n          });\n        });\n        this.ctx.eventList.forEach(function (event) {\n          w.globals.dom.baseEl.addEventListener(event, _this.documentEvent, {\n            passive: true\n          });\n        });\n        this.ctx.core.setupBrushHandler();\n      }\n    }, {\n      key: \"documentEvent\",\n      value: function documentEvent(e) {\n        var w = this.w;\n        var target = e.target.className;\n\n        if (e.type === 'click') {\n          var elMenu = w.globals.dom.baseEl.querySelector('.apexcharts-menu');\n\n          if (elMenu && elMenu.classList.contains('apexcharts-menu-open') && target !== 'apexcharts-menu-icon') {\n            elMenu.classList.remove('apexcharts-menu-open');\n          }\n        }\n\n        w.globals.clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX;\n        w.globals.clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY;\n      }\n    }]);\n\n    return Events;\n  }();\n\n  var Localization = /*#__PURE__*/function () {\n    function Localization(ctx) {\n      _classCallCheck(this, Localization);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(Localization, [{\n      key: \"setCurrentLocaleValues\",\n      value: function setCurrentLocaleValues(localeName) {\n        var locales = this.w.config.chart.locales; // check if user has specified locales in global Apex variable\n        // if yes - then extend those with local chart's locale\n\n        if (window.Apex.chart && window.Apex.chart.locales && window.Apex.chart.locales.length > 0) {\n          locales = this.w.config.chart.locales.concat(window.Apex.chart.locales);\n        } // find the locale from the array of locales which user has set (either by chart.defaultLocale or by calling setLocale() method.)\n\n\n        var selectedLocale = locales.filter(function (c) {\n          return c.name === localeName;\n        })[0];\n\n        if (selectedLocale) {\n          // create a complete locale object by extending defaults so you don't get undefined errors.\n          var ret = Utils$1.extend(en, selectedLocale); // store these locale options in global var for ease access\n\n          this.w.globals.locale = ret.options;\n        } else {\n          throw new Error('Wrong locale name provided. Please make sure you set the correct locale name in options');\n        }\n      }\n    }]);\n\n    return Localization;\n  }();\n\n  var Axes = /*#__PURE__*/function () {\n    function Axes(ctx) {\n      _classCallCheck(this, Axes);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(Axes, [{\n      key: \"drawAxis\",\n      value: function drawAxis(type, elgrid) {\n        var _this = this;\n\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        var xAxis = new XAxis(this.ctx, elgrid);\n        var yAxis = new YAxis(this.ctx, elgrid);\n\n        if (gl.axisCharts && type !== 'radar') {\n          var elXaxis, elYaxis;\n\n          if (gl.isBarHorizontal) {\n            elYaxis = yAxis.drawYaxisInversed(0);\n            elXaxis = xAxis.drawXaxisInversed(0);\n            gl.dom.elGraphical.add(elXaxis);\n            gl.dom.elGraphical.add(elYaxis);\n          } else {\n            elXaxis = xAxis.drawXaxis();\n            gl.dom.elGraphical.add(elXaxis);\n            cnf.yaxis.map(function (yaxe, index) {\n              if (gl.ignoreYAxisIndexes.indexOf(index) === -1) {\n                elYaxis = yAxis.drawYaxis(index);\n                gl.dom.Paper.add(elYaxis);\n\n                if (_this.w.config.grid.position === 'back') {\n                  var inner = gl.dom.Paper.children()[1];\n                  inner.remove();\n                  gl.dom.Paper.add(inner);\n                }\n              }\n            });\n          }\n        }\n      }\n    }]);\n\n    return Axes;\n  }();\n\n  var Crosshairs = /*#__PURE__*/function () {\n    function Crosshairs(ctx) {\n      _classCallCheck(this, Crosshairs);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(Crosshairs, [{\n      key: \"drawXCrosshairs\",\n      value: function drawXCrosshairs() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var filters = new Filters(this.ctx);\n        var crosshairGradient = w.config.xaxis.crosshairs.fill.gradient;\n        var crosshairShadow = w.config.xaxis.crosshairs.dropShadow;\n        var fillType = w.config.xaxis.crosshairs.fill.type;\n        var gradientFrom = crosshairGradient.colorFrom;\n        var gradientTo = crosshairGradient.colorTo;\n        var opacityFrom = crosshairGradient.opacityFrom;\n        var opacityTo = crosshairGradient.opacityTo;\n        var stops = crosshairGradient.stops;\n        var shadow = 'none';\n        var dropShadow = crosshairShadow.enabled;\n        var shadowLeft = crosshairShadow.left;\n        var shadowTop = crosshairShadow.top;\n        var shadowBlur = crosshairShadow.blur;\n        var shadowColor = crosshairShadow.color;\n        var shadowOpacity = crosshairShadow.opacity;\n        var xcrosshairsFill = w.config.xaxis.crosshairs.fill.color;\n\n        if (w.config.xaxis.crosshairs.show) {\n          if (fillType === 'gradient') {\n            xcrosshairsFill = graphics.drawGradient('vertical', gradientFrom, gradientTo, opacityFrom, opacityTo, null, stops, null);\n          }\n\n          var xcrosshairs = graphics.drawRect();\n\n          if (w.config.xaxis.crosshairs.width === 1) {\n            // to prevent drawing 2 lines, convert rect to line\n            xcrosshairs = graphics.drawLine();\n          }\n\n          var gridHeight = w.globals.gridHeight;\n\n          if (!Utils$1.isNumber(gridHeight) || gridHeight < 0) {\n            gridHeight = 0;\n          }\n\n          var crosshairsWidth = w.config.xaxis.crosshairs.width;\n\n          if (!Utils$1.isNumber(crosshairsWidth) || crosshairsWidth < 0) {\n            crosshairsWidth = 0;\n          }\n\n          xcrosshairs.attr({\n            class: 'apexcharts-xcrosshairs',\n            x: 0,\n            y: 0,\n            y2: gridHeight,\n            width: crosshairsWidth,\n            height: gridHeight,\n            fill: xcrosshairsFill,\n            filter: shadow,\n            'fill-opacity': w.config.xaxis.crosshairs.opacity,\n            stroke: w.config.xaxis.crosshairs.stroke.color,\n            'stroke-width': w.config.xaxis.crosshairs.stroke.width,\n            'stroke-dasharray': w.config.xaxis.crosshairs.stroke.dashArray\n          });\n\n          if (dropShadow) {\n            xcrosshairs = filters.dropShadow(xcrosshairs, {\n              left: shadowLeft,\n              top: shadowTop,\n              blur: shadowBlur,\n              color: shadowColor,\n              opacity: shadowOpacity\n            });\n          }\n\n          w.globals.dom.elGraphical.add(xcrosshairs);\n        }\n      }\n    }, {\n      key: \"drawYCrosshairs\",\n      value: function drawYCrosshairs() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var crosshair = w.config.yaxis[0].crosshairs;\n        var offX = w.globals.barPadForNumericAxis;\n\n        if (w.config.yaxis[0].crosshairs.show) {\n          var ycrosshairs = graphics.drawLine(-offX, 0, w.globals.gridWidth + offX, 0, crosshair.stroke.color, crosshair.stroke.dashArray, crosshair.stroke.width);\n          ycrosshairs.attr({\n            class: 'apexcharts-ycrosshairs'\n          });\n          w.globals.dom.elGraphical.add(ycrosshairs);\n        } // draw an invisible crosshair to help in positioning the yaxis tooltip\n\n\n        var ycrosshairsHidden = graphics.drawLine(-offX, 0, w.globals.gridWidth + offX, 0, crosshair.stroke.color, 0, 0);\n        ycrosshairsHidden.attr({\n          class: 'apexcharts-ycrosshairs-hidden'\n        });\n        w.globals.dom.elGraphical.add(ycrosshairsHidden);\n      }\n    }]);\n\n    return Crosshairs;\n  }();\n\n  /**\n   * ApexCharts Responsive Class to override options for different screen sizes.\n   *\n   * @module Responsive\n   **/\n\n  var Responsive = /*#__PURE__*/function () {\n    function Responsive(ctx) {\n      _classCallCheck(this, Responsive);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    } // the opts parameter if not null has to be set overriding everything\n    // as the opts is set by user externally\n\n\n    _createClass(Responsive, [{\n      key: \"checkResponsiveConfig\",\n      value: function checkResponsiveConfig(opts) {\n        var _this = this;\n\n        var w = this.w;\n        var cnf = w.config; // check if responsive config exists\n\n        if (cnf.responsive.length === 0) return;\n        var res = cnf.responsive.slice();\n        res.sort(function (a, b) {\n          return a.breakpoint > b.breakpoint ? 1 : b.breakpoint > a.breakpoint ? -1 : 0;\n        }).reverse();\n        var config = new Config({});\n\n        var iterateResponsiveOptions = function iterateResponsiveOptions() {\n          var newOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n          var largestBreakpoint = res[0].breakpoint;\n          var width = window.innerWidth > 0 ? window.innerWidth : screen.width;\n\n          if (width > largestBreakpoint) {\n            var options = CoreUtils.extendArrayProps(config, w.globals.initialConfig, w);\n            newOptions = Utils$1.extend(options, newOptions);\n            newOptions = Utils$1.extend(w.config, newOptions);\n\n            _this.overrideResponsiveOptions(newOptions);\n          } else {\n            for (var i = 0; i < res.length; i++) {\n              if (width < res[i].breakpoint) {\n                newOptions = CoreUtils.extendArrayProps(config, res[i].options, w);\n                newOptions = Utils$1.extend(w.config, newOptions);\n\n                _this.overrideResponsiveOptions(newOptions);\n              }\n            }\n          }\n        };\n\n        if (opts) {\n          var options = CoreUtils.extendArrayProps(config, opts, w);\n          options = Utils$1.extend(w.config, options);\n          options = Utils$1.extend(options, opts);\n          iterateResponsiveOptions(options);\n        } else {\n          iterateResponsiveOptions({});\n        }\n      }\n    }, {\n      key: \"overrideResponsiveOptions\",\n      value: function overrideResponsiveOptions(newOptions) {\n        var newConfig = new Config(newOptions).init({\n          responsiveOverride: true\n        });\n        this.w.config = newConfig;\n      }\n    }]);\n\n    return Responsive;\n  }();\n\n  /**\n   * ApexCharts Theme Class for setting the colors and palettes.\n   *\n   * @module Theme\n   **/\n\n  var Theme = /*#__PURE__*/function () {\n    function Theme(ctx) {\n      _classCallCheck(this, Theme);\n\n      this.ctx = ctx;\n      this.colors = [];\n      this.w = ctx.w;\n      var w = this.w;\n      this.isColorFn = false;\n      this.isHeatmapDistributed = w.config.chart.type === 'treemap' && w.config.plotOptions.treemap.distributed || w.config.chart.type === 'heatmap' && w.config.plotOptions.heatmap.distributed;\n      this.isBarDistributed = w.config.plotOptions.bar.distributed && (w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar');\n    }\n\n    _createClass(Theme, [{\n      key: \"init\",\n      value: function init() {\n        this.setDefaultColors();\n      }\n    }, {\n      key: \"setDefaultColors\",\n      value: function setDefaultColors() {\n        var _w$config$colors,\n            _this = this;\n\n        var w = this.w;\n        var utils = new Utils$1();\n        w.globals.dom.elWrap.classList.add(\"apexcharts-theme-\".concat(w.config.theme.mode));\n\n        if (w.config.colors === undefined || ((_w$config$colors = w.config.colors) === null || _w$config$colors === void 0 ? void 0 : _w$config$colors.length) === 0) {\n          w.globals.colors = this.predefined();\n        } else {\n          w.globals.colors = w.config.colors; // if user provided a function in colors, we need to eval here\n\n          if (Array.isArray(w.config.colors) && w.config.colors.length > 0 && typeof w.config.colors[0] === 'function') {\n            w.globals.colors = w.config.series.map(function (s, i) {\n              var c = w.config.colors[i];\n              if (!c) c = w.config.colors[0];\n\n              if (typeof c === 'function') {\n                _this.isColorFn = true;\n                return c({\n                  value: w.globals.axisCharts ? w.globals.series[i][0] ? w.globals.series[i][0] : 0 : w.globals.series[i],\n                  seriesIndex: i,\n                  dataPointIndex: i,\n                  w: w\n                });\n              }\n\n              return c;\n            });\n          }\n        } // user defined colors in series array\n\n\n        w.globals.seriesColors.map(function (c, i) {\n          if (c) {\n            w.globals.colors[i] = c;\n          }\n        });\n\n        if (w.config.theme.monochrome.enabled) {\n          var monoArr = [];\n          var glsCnt = w.globals.series.length;\n\n          if (this.isBarDistributed || this.isHeatmapDistributed) {\n            glsCnt = w.globals.series[0].length * w.globals.series.length;\n          }\n\n          var mainColor = w.config.theme.monochrome.color;\n          var part = 1 / (glsCnt / w.config.theme.monochrome.shadeIntensity);\n          var shade = w.config.theme.monochrome.shadeTo;\n          var percent = 0;\n\n          for (var gsl = 0; gsl < glsCnt; gsl++) {\n            var newColor = void 0;\n\n            if (shade === 'dark') {\n              newColor = utils.shadeColor(percent * -1, mainColor);\n              percent = percent + part;\n            } else {\n              newColor = utils.shadeColor(percent, mainColor);\n              percent = percent + part;\n            }\n\n            monoArr.push(newColor);\n          }\n\n          w.globals.colors = monoArr.slice();\n        }\n\n        var defaultColors = w.globals.colors.slice(); // if user specified fewer colors than no. of series, push the same colors again\n\n        this.pushExtraColors(w.globals.colors);\n        var colorTypes = ['fill', 'stroke'];\n        colorTypes.forEach(function (c) {\n          if (w.config[c].colors === undefined) {\n            w.globals[c].colors = _this.isColorFn ? w.config.colors : defaultColors;\n          } else {\n            w.globals[c].colors = w.config[c].colors.slice();\n          }\n\n          _this.pushExtraColors(w.globals[c].colors);\n        });\n\n        if (w.config.dataLabels.style.colors === undefined) {\n          w.globals.dataLabels.style.colors = defaultColors;\n        } else {\n          w.globals.dataLabels.style.colors = w.config.dataLabels.style.colors.slice();\n        }\n\n        this.pushExtraColors(w.globals.dataLabels.style.colors, 50);\n\n        if (w.config.plotOptions.radar.polygons.fill.colors === undefined) {\n          w.globals.radarPolygons.fill.colors = [w.config.theme.mode === 'dark' ? '#424242' : 'none'];\n        } else {\n          w.globals.radarPolygons.fill.colors = w.config.plotOptions.radar.polygons.fill.colors.slice();\n        }\n\n        this.pushExtraColors(w.globals.radarPolygons.fill.colors, 20); // The point colors\n\n        if (w.config.markers.colors === undefined) {\n          w.globals.markers.colors = defaultColors;\n        } else {\n          w.globals.markers.colors = w.config.markers.colors.slice();\n        }\n\n        this.pushExtraColors(w.globals.markers.colors);\n      } // When the number of colors provided is less than the number of series, this method\n      // will push same colors to the list\n      // params:\n      // distributed is only valid for distributed column/bar charts\n\n    }, {\n      key: \"pushExtraColors\",\n      value: function pushExtraColors(colorSeries, length) {\n        var distributed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        var w = this.w;\n        var len = length || w.globals.series.length;\n\n        if (distributed === null) {\n          distributed = this.isBarDistributed || this.isHeatmapDistributed || w.config.chart.type === 'heatmap' && w.config.plotOptions.heatmap.colorScale.inverse;\n        }\n\n        if (distributed && w.globals.series.length) {\n          len = w.globals.series[w.globals.maxValsInArrayIndex].length * w.globals.series.length;\n        }\n\n        if (colorSeries.length < len) {\n          var diff = len - colorSeries.length;\n\n          for (var i = 0; i < diff; i++) {\n            colorSeries.push(colorSeries[i]);\n          }\n        }\n      }\n    }, {\n      key: \"updateThemeOptions\",\n      value: function updateThemeOptions(options) {\n        options.chart = options.chart || {};\n        options.tooltip = options.tooltip || {};\n        var mode = options.theme.mode || 'light';\n        var palette = options.theme.palette ? options.theme.palette : mode === 'dark' ? 'palette4' : 'palette1';\n        var foreColor = options.chart.foreColor ? options.chart.foreColor : mode === 'dark' ? '#f6f7f8' : '#373d3f';\n        options.tooltip.theme = mode;\n        options.chart.foreColor = foreColor;\n        options.theme.palette = palette;\n        return options;\n      }\n    }, {\n      key: \"predefined\",\n      value: function predefined() {\n        var palette = this.w.config.theme.palette; // D6E3F8, FCEFEF, DCE0D9, A5978B, EDDDD4, D6E3F8, FEF5EF\n\n        switch (palette) {\n          case 'palette1':\n            this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0'];\n            break;\n\n          case 'palette2':\n            this.colors = ['#3f51b5', '#03a9f4', '#4caf50', '#f9ce1d', '#FF9800'];\n            break;\n\n          case 'palette3':\n            this.colors = ['#33b2df', '#546E7A', '#d4526e', '#13d8aa', '#A5978B'];\n            break;\n\n          case 'palette4':\n            this.colors = ['#4ecdc4', '#c7f464', '#81D4FA', '#fd6a6a', '#546E7A'];\n            break;\n\n          case 'palette5':\n            this.colors = ['#2b908f', '#f9a3a4', '#90ee7e', '#fa4443', '#69d2e7'];\n            break;\n\n          case 'palette6':\n            this.colors = ['#449DD1', '#F86624', '#EA3546', '#662E9B', '#C5D86D'];\n            break;\n\n          case 'palette7':\n            this.colors = ['#D7263D', '#1B998B', '#2E294E', '#F46036', '#E2C044'];\n            break;\n\n          case 'palette8':\n            this.colors = ['#662E9B', '#F86624', '#F9C80E', '#EA3546', '#43BCCD'];\n            break;\n\n          case 'palette9':\n            this.colors = ['#5C4742', '#A5978B', '#8D5B4C', '#5A2A27', '#C4BBAF'];\n            break;\n\n          case 'palette10':\n            this.colors = ['#A300D6', '#7D02EB', '#5653FE', '#2983FF', '#00B1F2'];\n            break;\n\n          default:\n            this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0'];\n            break;\n        }\n\n        return this.colors;\n      }\n    }]);\n\n    return Theme;\n  }();\n\n  var TitleSubtitle = /*#__PURE__*/function () {\n    function TitleSubtitle(ctx) {\n      _classCallCheck(this, TitleSubtitle);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(TitleSubtitle, [{\n      key: \"draw\",\n      value: function draw() {\n        this.drawTitleSubtitle('title');\n        this.drawTitleSubtitle('subtitle');\n      }\n    }, {\n      key: \"drawTitleSubtitle\",\n      value: function drawTitleSubtitle(type) {\n        var w = this.w;\n        var tsConfig = type === 'title' ? w.config.title : w.config.subtitle;\n        var x = w.globals.svgWidth / 2;\n        var y = tsConfig.offsetY;\n        var textAnchor = 'middle';\n\n        if (tsConfig.align === 'left') {\n          x = 10;\n          textAnchor = 'start';\n        } else if (tsConfig.align === 'right') {\n          x = w.globals.svgWidth - 10;\n          textAnchor = 'end';\n        }\n\n        x = x + tsConfig.offsetX;\n        y = y + parseInt(tsConfig.style.fontSize, 10) + tsConfig.margin / 2;\n\n        if (tsConfig.text !== undefined) {\n          var graphics = new Graphics(this.ctx);\n          var titleText = graphics.drawText({\n            x: x,\n            y: y,\n            text: tsConfig.text,\n            textAnchor: textAnchor,\n            fontSize: tsConfig.style.fontSize,\n            fontFamily: tsConfig.style.fontFamily,\n            fontWeight: tsConfig.style.fontWeight,\n            foreColor: tsConfig.style.color,\n            opacity: 1\n          });\n          titleText.node.setAttribute('class', \"apexcharts-\".concat(type, \"-text\"));\n          w.globals.dom.Paper.add(titleText);\n        }\n      }\n    }]);\n\n    return TitleSubtitle;\n  }();\n\n  var Helpers$3 = /*#__PURE__*/function () {\n    function Helpers(dCtx) {\n      _classCallCheck(this, Helpers);\n\n      this.w = dCtx.w;\n      this.dCtx = dCtx;\n    }\n    /**\n     * Get Chart Title/Subtitle Dimensions\n     * @memberof Dimensions\n     * @return {{width, height}}\n     **/\n\n\n    _createClass(Helpers, [{\n      key: \"getTitleSubtitleCoords\",\n      value: function getTitleSubtitleCoords(type) {\n        var w = this.w;\n        var width = 0;\n        var height = 0;\n        var floating = type === 'title' ? w.config.title.floating : w.config.subtitle.floating;\n        var el = w.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(type, \"-text\"));\n\n        if (el !== null && !floating) {\n          var coord = el.getBoundingClientRect();\n          width = coord.width;\n          height = w.globals.axisCharts ? coord.height + 5 : coord.height;\n        }\n\n        return {\n          width: width,\n          height: height\n        };\n      }\n    }, {\n      key: \"getLegendsRect\",\n      value: function getLegendsRect() {\n        var w = this.w;\n        var elLegendWrap = w.globals.dom.elLegendWrap;\n\n        if (!w.config.legend.height && (w.config.legend.position === 'top' || w.config.legend.position === 'bottom')) {\n          // avoid legend to take up all the space\n          elLegendWrap.style.maxHeight = w.globals.svgHeight / 2 + 'px';\n        }\n\n        var lgRect = Object.assign({}, Utils$1.getBoundingClientRect(elLegendWrap));\n\n        if (elLegendWrap !== null && !w.config.legend.floating && w.config.legend.show) {\n          this.dCtx.lgRect = {\n            x: lgRect.x,\n            y: lgRect.y,\n            height: lgRect.height,\n            width: lgRect.height === 0 ? 0 : lgRect.width\n          };\n        } else {\n          this.dCtx.lgRect = {\n            x: 0,\n            y: 0,\n            height: 0,\n            width: 0\n          };\n        } // if legend takes up all of the chart space, we need to restrict it.\n\n\n        if (w.config.legend.position === 'left' || w.config.legend.position === 'right') {\n          if (this.dCtx.lgRect.width * 1.5 > w.globals.svgWidth) {\n            this.dCtx.lgRect.width = w.globals.svgWidth / 1.5;\n          }\n        }\n\n        return this.dCtx.lgRect;\n      }\n    }, {\n      key: \"getLargestStringFromMultiArr\",\n      value: function getLargestStringFromMultiArr(val, arr) {\n        var w = this.w;\n        var valArr = val;\n\n        if (w.globals.isMultiLineX) {\n          // if the xaxis labels has multiline texts (array)\n          var maxArrs = arr.map(function (xl, idx) {\n            return Array.isArray(xl) ? xl.length : 1;\n          });\n          var maxArrLen = Math.max.apply(Math, _toConsumableArray(maxArrs));\n          var maxArrIndex = maxArrs.indexOf(maxArrLen);\n          valArr = arr[maxArrIndex];\n        }\n\n        return valArr;\n      }\n    }]);\n\n    return Helpers;\n  }();\n\n  var DimXAxis = /*#__PURE__*/function () {\n    function DimXAxis(dCtx) {\n      _classCallCheck(this, DimXAxis);\n\n      this.w = dCtx.w;\n      this.dCtx = dCtx;\n    }\n    /**\n     * Get X Axis Dimensions\n     * @memberof Dimensions\n     * @return {{width, height}}\n     **/\n\n\n    _createClass(DimXAxis, [{\n      key: \"getxAxisLabelsCoords\",\n      value: function getxAxisLabelsCoords() {\n        var w = this.w;\n        var xaxisLabels = w.globals.labels.slice();\n\n        if (w.config.xaxis.convertedCatToNumeric && xaxisLabels.length === 0) {\n          xaxisLabels = w.globals.categoryLabels;\n        }\n\n        var rect;\n\n        if (w.globals.timescaleLabels.length > 0) {\n          var coords = this.getxAxisTimeScaleLabelsCoords();\n          rect = {\n            width: coords.width,\n            height: coords.height\n          };\n          w.globals.rotateXLabels = false;\n        } else {\n          this.dCtx.lgWidthForSideLegends = (w.config.legend.position === 'left' || w.config.legend.position === 'right') && !w.config.legend.floating ? this.dCtx.lgRect.width : 0; // get the longest string from the labels array and also apply label formatter\n\n          var xlbFormatter = w.globals.xLabelFormatter; // prevent changing xaxisLabels to avoid issues in multi-yaxes - fix #522\n\n          var val = Utils$1.getLargestStringFromArr(xaxisLabels);\n          var valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(val, xaxisLabels); // the labels gets changed for bar charts\n\n          if (w.globals.isBarHorizontal) {\n            val = w.globals.yAxisScale[0].result.reduce(function (a, b) {\n              return a.length > b.length ? a : b;\n            }, 0);\n            valArr = val;\n          }\n\n          var xFormat = new Formatters(this.dCtx.ctx);\n          var timestamp = val;\n          val = xFormat.xLabelFormat(xlbFormatter, val, timestamp, {\n            i: undefined,\n            dateFormatter: new DateTime(this.dCtx.ctx).formatDate,\n            w: w\n          });\n          valArr = xFormat.xLabelFormat(xlbFormatter, valArr, timestamp, {\n            i: undefined,\n            dateFormatter: new DateTime(this.dCtx.ctx).formatDate,\n            w: w\n          });\n\n          if (w.config.xaxis.convertedCatToNumeric && typeof val === 'undefined' || String(val).trim() === '') {\n            val = '1';\n            valArr = val;\n          }\n\n          var graphics = new Graphics(this.dCtx.ctx);\n          var xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize);\n          var xArrLabelrect = xLabelrect;\n\n          if (val !== valArr) {\n            xArrLabelrect = graphics.getTextRects(valArr, w.config.xaxis.labels.style.fontSize);\n          }\n\n          rect = {\n            width: xLabelrect.width >= xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width,\n            height: xLabelrect.height >= xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height\n          };\n\n          if (rect.width * xaxisLabels.length > w.globals.svgWidth - this.dCtx.lgWidthForSideLegends - this.dCtx.yAxisWidth - this.dCtx.gridPad.left - this.dCtx.gridPad.right && w.config.xaxis.labels.rotate !== 0 || w.config.xaxis.labels.rotateAlways) {\n            if (!w.globals.isBarHorizontal) {\n              w.globals.rotateXLabels = true;\n\n              var getRotatedTextRects = function getRotatedTextRects(text) {\n                return graphics.getTextRects(text, w.config.xaxis.labels.style.fontSize, w.config.xaxis.labels.style.fontFamily, \"rotate(\".concat(w.config.xaxis.labels.rotate, \" 0 0)\"), false);\n              };\n\n              xLabelrect = getRotatedTextRects(val);\n\n              if (val !== valArr) {\n                xArrLabelrect = getRotatedTextRects(valArr);\n              }\n\n              rect.height = (xLabelrect.height > xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height) / 1.5;\n              rect.width = xLabelrect.width > xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width;\n            }\n          } else {\n            w.globals.rotateXLabels = false;\n          }\n        }\n\n        if (!w.config.xaxis.labels.show) {\n          rect = {\n            width: 0,\n            height: 0\n          };\n        }\n\n        return {\n          width: rect.width,\n          height: rect.height\n        };\n      }\n      /**\n       * Get X Axis Label Group height\n       * @memberof Dimensions\n       * @return {{width, height}}\n       */\n\n    }, {\n      key: \"getxAxisGroupLabelsCoords\",\n      value: function getxAxisGroupLabelsCoords() {\n        var _w$config$xaxis$group;\n\n        var w = this.w;\n\n        if (!w.globals.hasXaxisGroups) {\n          return {\n            width: 0,\n            height: 0\n          };\n        }\n\n        var fontSize = ((_w$config$xaxis$group = w.config.xaxis.group.style) === null || _w$config$xaxis$group === void 0 ? void 0 : _w$config$xaxis$group.fontSize) || w.config.xaxis.labels.style.fontSize;\n        var xaxisLabels = w.globals.groups.map(function (g) {\n          return g.title;\n        });\n        var rect; // prevent changing xaxisLabels to avoid issues in multi-yaxes - fix #522\n\n        var val = Utils$1.getLargestStringFromArr(xaxisLabels);\n        var valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(val, xaxisLabels);\n        var graphics = new Graphics(this.dCtx.ctx);\n        var xLabelrect = graphics.getTextRects(val, fontSize);\n        var xArrLabelrect = xLabelrect;\n\n        if (val !== valArr) {\n          xArrLabelrect = graphics.getTextRects(valArr, fontSize);\n        }\n\n        rect = {\n          width: xLabelrect.width >= xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width,\n          height: xLabelrect.height >= xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height\n        };\n\n        if (!w.config.xaxis.labels.show) {\n          rect = {\n            width: 0,\n            height: 0\n          };\n        }\n\n        return {\n          width: rect.width,\n          height: rect.height\n        };\n      }\n      /**\n       * Get X Axis Title Dimensions\n       * @memberof Dimensions\n       * @return {{width, height}}\n       **/\n\n    }, {\n      key: \"getxAxisTitleCoords\",\n      value: function getxAxisTitleCoords() {\n        var w = this.w;\n        var width = 0;\n        var height = 0;\n\n        if (w.config.xaxis.title.text !== undefined) {\n          var graphics = new Graphics(this.dCtx.ctx);\n          var rect = graphics.getTextRects(w.config.xaxis.title.text, w.config.xaxis.title.style.fontSize);\n          width = rect.width;\n          height = rect.height;\n        }\n\n        return {\n          width: width,\n          height: height\n        };\n      }\n    }, {\n      key: \"getxAxisTimeScaleLabelsCoords\",\n      value: function getxAxisTimeScaleLabelsCoords() {\n        var w = this.w;\n        var rect;\n        this.dCtx.timescaleLabels = w.globals.timescaleLabels.slice();\n        var labels = this.dCtx.timescaleLabels.map(function (label) {\n          return label.value;\n        }); //  get the longest string from the labels array and also apply label formatter to it\n\n        var val = labels.reduce(function (a, b) {\n          // if undefined, maybe user didn't pass the datetime(x) values\n          if (typeof a === 'undefined') {\n            console.error('You have possibly supplied invalid Date format. Please supply a valid JavaScript Date');\n            return 0;\n          } else {\n            return a.length > b.length ? a : b;\n          }\n        }, 0);\n        var graphics = new Graphics(this.dCtx.ctx);\n        rect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize);\n        var totalWidthRotated = rect.width * 1.05 * labels.length;\n\n        if (totalWidthRotated > w.globals.gridWidth && w.config.xaxis.labels.rotate !== 0) {\n          w.globals.overlappingXLabels = true;\n        }\n\n        return rect;\n      } // In certain cases, the last labels gets cropped in xaxis.\n      // Hence, we add some additional padding based on the label length to avoid the last label being cropped or we don't draw it at all\n\n    }, {\n      key: \"additionalPaddingXLabels\",\n      value: function additionalPaddingXLabels(xaxisLabelCoords) {\n        var _this = this;\n\n        var w = this.w;\n        var gl = w.globals;\n        var cnf = w.config;\n        var xtype = cnf.xaxis.type;\n        var lbWidth = xaxisLabelCoords.width;\n        gl.skipLastTimelinelabel = false;\n        gl.skipFirstTimelinelabel = false;\n        var isBarOpposite = w.config.yaxis[0].opposite && w.globals.isBarHorizontal;\n\n        var isCollapsed = function isCollapsed(i) {\n          return gl.collapsedSeriesIndices.indexOf(i) !== -1;\n        };\n\n        var rightPad = function rightPad(yaxe) {\n          if (_this.dCtx.timescaleLabels && _this.dCtx.timescaleLabels.length) {\n            // for timeline labels, we take the last label and check if it exceeds gridWidth\n            var firstimescaleLabel = _this.dCtx.timescaleLabels[0];\n            var lastTimescaleLabel = _this.dCtx.timescaleLabels[_this.dCtx.timescaleLabels.length - 1];\n            var lastLabelPosition = lastTimescaleLabel.position + lbWidth / 1.75 - _this.dCtx.yAxisWidthRight;\n            var firstLabelPosition = firstimescaleLabel.position - lbWidth / 1.75 + _this.dCtx.yAxisWidthLeft;\n            var lgRightRectWidth = w.config.legend.position === 'right' && _this.dCtx.lgRect.width > 0 ? _this.dCtx.lgRect.width : 0;\n\n            if (lastLabelPosition > gl.svgWidth - gl.translateX - lgRightRectWidth) {\n              gl.skipLastTimelinelabel = true;\n            }\n\n            if (firstLabelPosition < -((!yaxe.show || yaxe.floating) && (cnf.chart.type === 'bar' || cnf.chart.type === 'candlestick' || cnf.chart.type === 'rangeBar' || cnf.chart.type === 'boxPlot') ? lbWidth / 1.75 : 10)) {\n              gl.skipFirstTimelinelabel = true;\n            }\n          } else if (xtype === 'datetime') {\n            // If user has enabled DateTime, but uses own's formatter\n            if (_this.dCtx.gridPad.right < lbWidth && !gl.rotateXLabels) {\n              gl.skipLastTimelinelabel = true;\n            }\n          } else if (xtype !== 'datetime') {\n            if (_this.dCtx.gridPad.right < lbWidth / 2 - _this.dCtx.yAxisWidthRight && !gl.rotateXLabels && !w.config.xaxis.labels.trim && (w.config.xaxis.tickPlacement !== 'between' || w.globals.isBarHorizontal)) {\n              _this.dCtx.xPadRight = lbWidth / 2 + 1;\n            }\n          }\n        };\n\n        var padYAxe = function padYAxe(yaxe, i) {\n          if (cnf.yaxis.length > 1 && isCollapsed(i)) return;\n          rightPad(yaxe);\n        };\n\n        cnf.yaxis.forEach(function (yaxe, i) {\n          if (isBarOpposite) {\n            if (_this.dCtx.gridPad.left < lbWidth) {\n              _this.dCtx.xPadLeft = lbWidth / 2 + 1;\n            }\n\n            _this.dCtx.xPadRight = lbWidth / 2 + 1;\n          } else {\n            padYAxe(yaxe, i);\n          }\n        });\n      }\n    }]);\n\n    return DimXAxis;\n  }();\n\n  var DimYAxis = /*#__PURE__*/function () {\n    function DimYAxis(dCtx) {\n      _classCallCheck(this, DimYAxis);\n\n      this.w = dCtx.w;\n      this.dCtx = dCtx;\n    }\n    /**\n     * Get Y Axis Dimensions\n     * @memberof Dimensions\n     * @return {{width, height}}\n     **/\n\n\n    _createClass(DimYAxis, [{\n      key: \"getyAxisLabelsCoords\",\n      value: function getyAxisLabelsCoords() {\n        var _this = this;\n\n        var w = this.w;\n        var width = 0;\n        var height = 0;\n        var ret = [];\n        var labelPad = 10;\n        var axesUtils = new AxesUtils(this.dCtx.ctx);\n        w.config.yaxis.map(function (yaxe, index) {\n          var yS = w.globals.yAxisScale[index];\n          var yAxisMinWidth = 0;\n          if (!axesUtils.isYAxisHidden(index) && yaxe.labels.show && yaxe.labels.minWidth !== undefined) yAxisMinWidth = yaxe.labels.minWidth;\n\n          if (!axesUtils.isYAxisHidden(index) && yaxe.labels.show && yS.result.length) {\n            var lbFormatter = w.globals.yLabelFormatters[index];\n            var minV = yS.niceMin === Number.MIN_VALUE ? 0 : yS.niceMin;\n            var longestStr = String(minV).length > String(yS.niceMax).length ? minV : yS.niceMax; // the second parameter -1 is the index of tick which user can use in the formatter\n\n            var val = lbFormatter(longestStr, {\n              seriesIndex: index,\n              dataPointIndex: -1,\n              w: w\n            });\n            var valArr = val; // if user has specified a custom formatter, and the result is null or empty, we need to discard the formatter and take the value as it is.\n\n            if (typeof val === 'undefined' || val.length === 0) {\n              val = longestStr;\n            }\n\n            if (w.globals.isBarHorizontal) {\n              labelPad = 0;\n              var barYaxisLabels = w.globals.labels.slice(); //  get the longest string from the labels array and also apply label formatter to it\n\n              val = Utils$1.getLargestStringFromArr(barYaxisLabels);\n              val = lbFormatter(val, {\n                seriesIndex: index,\n                dataPointIndex: -1,\n                w: w\n              });\n              valArr = _this.dCtx.dimHelpers.getLargestStringFromMultiArr(val, barYaxisLabels);\n            }\n\n            var graphics = new Graphics(_this.dCtx.ctx);\n            var rotateStr = 'rotate('.concat(yaxe.labels.rotate, ' 0 0)');\n            var rect = graphics.getTextRects(val, yaxe.labels.style.fontSize, yaxe.labels.style.fontFamily, rotateStr, false);\n            var arrLabelrect = rect;\n\n            if (val !== valArr) {\n              arrLabelrect = graphics.getTextRects(valArr, yaxe.labels.style.fontSize, yaxe.labels.style.fontFamily, rotateStr, false);\n            }\n\n            ret.push({\n              width: (yAxisMinWidth > arrLabelrect.width || yAxisMinWidth > rect.width ? yAxisMinWidth : arrLabelrect.width > rect.width ? arrLabelrect.width : rect.width) + labelPad,\n              height: arrLabelrect.height > rect.height ? arrLabelrect.height : rect.height\n            });\n          } else {\n            ret.push({\n              width: width,\n              height: height\n            });\n          }\n        });\n        return ret;\n      }\n      /**\n       * Get Y Axis Dimensions\n       * @memberof Dimensions\n       * @return {{width, height}}\n       **/\n\n    }, {\n      key: \"getyAxisTitleCoords\",\n      value: function getyAxisTitleCoords() {\n        var _this2 = this;\n\n        var w = this.w;\n        var ret = [];\n        w.config.yaxis.map(function (yaxe, index) {\n          if (yaxe.show && yaxe.title.text !== undefined) {\n            var graphics = new Graphics(_this2.dCtx.ctx);\n            var rotateStr = 'rotate('.concat(yaxe.title.rotate, ' 0 0)');\n            var rect = graphics.getTextRects(yaxe.title.text, yaxe.title.style.fontSize, yaxe.title.style.fontFamily, rotateStr, false);\n            ret.push({\n              width: rect.width,\n              height: rect.height\n            });\n          } else {\n            ret.push({\n              width: 0,\n              height: 0\n            });\n          }\n        });\n        return ret;\n      }\n    }, {\n      key: \"getTotalYAxisWidth\",\n      value: function getTotalYAxisWidth() {\n        var w = this.w;\n        var yAxisWidth = 0;\n        var yAxisWidthLeft = 0;\n        var yAxisWidthRight = 0;\n        var padding = w.globals.yAxisScale.length > 1 ? 10 : 0;\n        var axesUtils = new AxesUtils(this.dCtx.ctx);\n\n        var isHiddenYAxis = function isHiddenYAxis(index) {\n          return w.globals.ignoreYAxisIndexes.indexOf(index) > -1;\n        };\n\n        var padForLabelTitle = function padForLabelTitle(coord, index) {\n          var floating = w.config.yaxis[index].floating;\n          var width = 0;\n\n          if (coord.width > 0 && !floating) {\n            width = coord.width + padding;\n\n            if (isHiddenYAxis(index)) {\n              width = width - coord.width - padding;\n            }\n          } else {\n            width = floating || axesUtils.isYAxisHidden(index) ? 0 : 5;\n          }\n\n          w.config.yaxis[index].opposite ? yAxisWidthRight = yAxisWidthRight + width : yAxisWidthLeft = yAxisWidthLeft + width;\n          yAxisWidth = yAxisWidth + width;\n        };\n\n        w.globals.yLabelsCoords.map(function (yLabelCoord, index) {\n          padForLabelTitle(yLabelCoord, index);\n        });\n        w.globals.yTitleCoords.map(function (yTitleCoord, index) {\n          padForLabelTitle(yTitleCoord, index);\n        });\n\n        if (w.globals.isBarHorizontal && !w.config.yaxis[0].floating) {\n          yAxisWidth = w.globals.yLabelsCoords[0].width + w.globals.yTitleCoords[0].width + 15;\n        }\n\n        this.dCtx.yAxisWidthLeft = yAxisWidthLeft;\n        this.dCtx.yAxisWidthRight = yAxisWidthRight;\n        return yAxisWidth;\n      }\n    }]);\n\n    return DimYAxis;\n  }();\n\n  var DimGrid = /*#__PURE__*/function () {\n    function DimGrid(dCtx) {\n      _classCallCheck(this, DimGrid);\n\n      this.w = dCtx.w;\n      this.dCtx = dCtx;\n    }\n\n    _createClass(DimGrid, [{\n      key: \"gridPadForColumnsInNumericAxis\",\n      value: function gridPadForColumnsInNumericAxis(gridWidth) {\n        var w = this.w;\n\n        if (w.globals.noData || w.globals.allSeriesCollapsed) {\n          return 0;\n        }\n\n        var hasBar = function hasBar(type) {\n          return type === 'bar' || type === 'rangeBar' || type === 'candlestick' || type === 'boxPlot';\n        };\n\n        var type = w.config.chart.type;\n        var barWidth = 0;\n        var seriesLen = hasBar(type) ? w.config.series.length : 1;\n\n        if (w.globals.comboBarCount > 0) {\n          seriesLen = w.globals.comboBarCount;\n        }\n\n        w.globals.collapsedSeries.forEach(function (c) {\n          if (hasBar(c.type)) {\n            seriesLen = seriesLen - 1;\n          }\n        });\n\n        if (w.config.chart.stacked) {\n          seriesLen = 1;\n        }\n\n        var barsPresent = hasBar(type) || w.globals.comboBarCount > 0;\n\n        if (barsPresent && w.globals.isXNumeric && !w.globals.isBarHorizontal && seriesLen > 0) {\n          var xRatio = 0;\n          var xRange = Math.abs(w.globals.initialMaxX - w.globals.initialMinX);\n\n          if (xRange <= 3) {\n            xRange = w.globals.dataPoints;\n          }\n\n          xRatio = xRange / gridWidth;\n          var xDivision; // max barwidth should be equal to minXDiff to avoid overlap\n\n          if (w.globals.minXDiff && w.globals.minXDiff / xRatio > 0) {\n            xDivision = w.globals.minXDiff / xRatio;\n          }\n\n          if (xDivision > gridWidth / 2) {\n            xDivision = xDivision / 2;\n          }\n\n          barWidth = xDivision / seriesLen * parseInt(w.config.plotOptions.bar.columnWidth, 10) / 100;\n\n          if (barWidth < 1) {\n            barWidth = 1;\n          }\n\n          barWidth = barWidth / (seriesLen > 1 ? 1 : 1.5) + 5;\n          w.globals.barPadForNumericAxis = barWidth;\n        }\n\n        return barWidth;\n      }\n    }, {\n      key: \"gridPadFortitleSubtitle\",\n      value: function gridPadFortitleSubtitle() {\n        var _this = this;\n\n        var w = this.w;\n        var gl = w.globals;\n        var gridShrinkOffset = this.dCtx.isSparkline || !w.globals.axisCharts ? 0 : 10;\n        var titleSubtitle = ['title', 'subtitle'];\n        titleSubtitle.forEach(function (t) {\n          if (w.config[t].text !== undefined) {\n            gridShrinkOffset += w.config[t].margin;\n          } else {\n            gridShrinkOffset += _this.dCtx.isSparkline || !w.globals.axisCharts ? 0 : 5;\n          }\n        });\n\n        if (w.config.legend.show && w.config.legend.position === 'bottom' && !w.config.legend.floating && !w.globals.axisCharts) {\n          gridShrinkOffset += 10;\n        }\n\n        var titleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords('title');\n        var subtitleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords('subtitle');\n        gl.gridHeight = gl.gridHeight - titleCoords.height - subtitleCoords.height - gridShrinkOffset;\n        gl.translateY = gl.translateY + titleCoords.height + subtitleCoords.height + gridShrinkOffset;\n      }\n    }, {\n      key: \"setGridXPosForDualYAxis\",\n      value: function setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords) {\n        var w = this.w;\n        var axesUtils = new AxesUtils(this.dCtx.ctx);\n        w.config.yaxis.map(function (yaxe, index) {\n          if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1 && !yaxe.floating && !axesUtils.isYAxisHidden(index)) {\n            if (yaxe.opposite) {\n              w.globals.translateX = w.globals.translateX - (yaxisLabelCoords[index].width + yTitleCoords[index].width) - parseInt(w.config.yaxis[index].labels.style.fontSize, 10) / 1.2 - 12;\n            } // fixes apexcharts.js#1599\n\n\n            if (w.globals.translateX < 2) {\n              w.globals.translateX = 2;\n            }\n          }\n        });\n      }\n    }]);\n\n    return DimGrid;\n  }();\n\n  /**\n   * ApexCharts Dimensions Class for calculating rects of all elements that are drawn and will be drawn.\n   *\n   * @module Dimensions\n   **/\n\n  var Dimensions = /*#__PURE__*/function () {\n    function Dimensions(ctx) {\n      _classCallCheck(this, Dimensions);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.lgRect = {};\n      this.yAxisWidth = 0;\n      this.yAxisWidthLeft = 0;\n      this.yAxisWidthRight = 0;\n      this.xAxisHeight = 0;\n      this.isSparkline = this.w.config.chart.sparkline.enabled;\n      this.dimHelpers = new Helpers$3(this);\n      this.dimYAxis = new DimYAxis(this);\n      this.dimXAxis = new DimXAxis(this);\n      this.dimGrid = new DimGrid(this);\n      this.lgWidthForSideLegends = 0;\n      this.gridPad = this.w.config.grid.padding;\n      this.xPadRight = 0;\n      this.xPadLeft = 0;\n    }\n    /**\n     * @memberof Dimensions\n     * @param {object} w - chart context\n     **/\n\n\n    _createClass(Dimensions, [{\n      key: \"plotCoords\",\n      value: function plotCoords() {\n        var _this = this;\n\n        var w = this.w;\n        var gl = w.globals;\n        this.lgRect = this.dimHelpers.getLegendsRect();\n\n        if (this.isSparkline && (w.config.markers.discrete.length > 0 || w.config.markers.size > 0)) {\n          Object.entries(this.gridPad).forEach(function (_ref) {\n            var _ref2 = _slicedToArray(_ref, 2),\n                k = _ref2[0],\n                v = _ref2[1];\n\n            _this.gridPad[k] = Math.max(v, _this.w.globals.markers.largestSize / 1.5);\n          });\n        }\n\n        if (gl.axisCharts) {\n          // for line / area / scatter / column\n          this.setDimensionsForAxisCharts();\n        } else {\n          // for pie / donuts / circle\n          this.setDimensionsForNonAxisCharts();\n        }\n\n        this.dimGrid.gridPadFortitleSubtitle(); // after calculating everything, apply padding set by user\n\n        gl.gridHeight = gl.gridHeight - this.gridPad.top - this.gridPad.bottom;\n        gl.gridWidth = gl.gridWidth - this.gridPad.left - this.gridPad.right - this.xPadRight - this.xPadLeft;\n        var barWidth = this.dimGrid.gridPadForColumnsInNumericAxis(gl.gridWidth);\n        gl.gridWidth = gl.gridWidth - barWidth * 2;\n        gl.translateX = gl.translateX + this.gridPad.left + this.xPadLeft + (barWidth > 0 ? barWidth + 4 : 0);\n        gl.translateY = gl.translateY + this.gridPad.top;\n      }\n    }, {\n      key: \"setDimensionsForAxisCharts\",\n      value: function setDimensionsForAxisCharts() {\n        var _this2 = this;\n\n        var w = this.w;\n        var gl = w.globals;\n        var yaxisLabelCoords = this.dimYAxis.getyAxisLabelsCoords();\n        var yTitleCoords = this.dimYAxis.getyAxisTitleCoords();\n        w.globals.yLabelsCoords = [];\n        w.globals.yTitleCoords = [];\n        w.config.yaxis.map(function (yaxe, index) {\n          // store the labels and titles coords in global vars\n          w.globals.yLabelsCoords.push({\n            width: yaxisLabelCoords[index].width,\n            index: index\n          });\n          w.globals.yTitleCoords.push({\n            width: yTitleCoords[index].width,\n            index: index\n          });\n        });\n        this.yAxisWidth = this.dimYAxis.getTotalYAxisWidth();\n        var xaxisLabelCoords = this.dimXAxis.getxAxisLabelsCoords();\n        var xaxisGroupLabelCoords = this.dimXAxis.getxAxisGroupLabelsCoords();\n        var xtitleCoords = this.dimXAxis.getxAxisTitleCoords();\n        this.conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords, xaxisGroupLabelCoords);\n        gl.translateXAxisY = w.globals.rotateXLabels ? this.xAxisHeight / 8 : -4;\n        gl.translateXAxisX = w.globals.rotateXLabels && w.globals.isXNumeric && w.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0;\n\n        if (w.globals.isBarHorizontal) {\n          gl.rotateXLabels = false;\n          gl.translateXAxisY = -1 * (parseInt(w.config.xaxis.labels.style.fontSize, 10) / 1.5);\n        }\n\n        gl.translateXAxisY = gl.translateXAxisY + w.config.xaxis.labels.offsetY;\n        gl.translateXAxisX = gl.translateXAxisX + w.config.xaxis.labels.offsetX;\n        var yAxisWidth = this.yAxisWidth;\n        var xAxisHeight = this.xAxisHeight;\n        gl.xAxisLabelsHeight = this.xAxisHeight - xtitleCoords.height;\n        gl.xAxisGroupLabelsHeight = gl.xAxisLabelsHeight - xaxisLabelCoords.height;\n        gl.xAxisLabelsWidth = this.xAxisWidth;\n        gl.xAxisHeight = this.xAxisHeight;\n        var translateY = 10;\n\n        if (w.config.chart.type === 'radar' || this.isSparkline) {\n          yAxisWidth = 0;\n          xAxisHeight = gl.goldenPadding;\n        }\n\n        if (this.isSparkline) {\n          this.lgRect = {\n            height: 0,\n            width: 0\n          };\n        }\n\n        if (this.isSparkline || w.config.chart.type === 'treemap') {\n          yAxisWidth = 0;\n          xAxisHeight = 0;\n          translateY = 0;\n        }\n\n        if (!this.isSparkline) {\n          this.dimXAxis.additionalPaddingXLabels(xaxisLabelCoords);\n        }\n\n        var legendTopBottom = function legendTopBottom() {\n          gl.translateX = yAxisWidth;\n          gl.gridHeight = gl.svgHeight - _this2.lgRect.height - xAxisHeight - (!_this2.isSparkline && w.config.chart.type !== 'treemap' ? w.globals.rotateXLabels ? 10 : 15 : 0);\n          gl.gridWidth = gl.svgWidth - yAxisWidth;\n        };\n\n        if (w.config.xaxis.position === 'top') translateY = gl.xAxisHeight - w.config.xaxis.axisTicks.height - 5;\n\n        switch (w.config.legend.position) {\n          case 'bottom':\n            gl.translateY = translateY;\n            legendTopBottom();\n            break;\n\n          case 'top':\n            gl.translateY = this.lgRect.height + translateY;\n            legendTopBottom();\n            break;\n\n          case 'left':\n            gl.translateY = translateY;\n            gl.translateX = this.lgRect.width + yAxisWidth;\n            gl.gridHeight = gl.svgHeight - xAxisHeight - 12;\n            gl.gridWidth = gl.svgWidth - this.lgRect.width - yAxisWidth;\n            break;\n\n          case 'right':\n            gl.translateY = translateY;\n            gl.translateX = yAxisWidth;\n            gl.gridHeight = gl.svgHeight - xAxisHeight - 12;\n            gl.gridWidth = gl.svgWidth - this.lgRect.width - yAxisWidth - 5;\n            break;\n\n          default:\n            throw new Error('Legend position not supported');\n        }\n\n        this.dimGrid.setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords); // after drawing everything, set the Y axis positions\n\n        var objyAxis = new YAxis(this.ctx);\n        objyAxis.setYAxisXPosition(yaxisLabelCoords, yTitleCoords);\n      }\n    }, {\n      key: \"setDimensionsForNonAxisCharts\",\n      value: function setDimensionsForNonAxisCharts() {\n        var w = this.w;\n        var gl = w.globals;\n        var cnf = w.config;\n        var xPad = 0;\n\n        if (w.config.legend.show && !w.config.legend.floating) {\n          xPad = 20;\n        }\n\n        var type = cnf.chart.type === 'pie' || cnf.chart.type === 'polarArea' || cnf.chart.type === 'donut' ? 'pie' : 'radialBar';\n        var offY = cnf.plotOptions[type].offsetY;\n        var offX = cnf.plotOptions[type].offsetX;\n\n        if (!cnf.legend.show || cnf.legend.floating) {\n          gl.gridHeight = gl.svgHeight - cnf.grid.padding.left + cnf.grid.padding.right;\n          gl.gridWidth = gl.gridHeight;\n          gl.translateY = offY;\n          gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2;\n          return;\n        }\n\n        switch (cnf.legend.position) {\n          case 'bottom':\n            gl.gridHeight = gl.svgHeight - this.lgRect.height - gl.goldenPadding;\n            gl.gridWidth = gl.svgWidth;\n            gl.translateY = offY - 10;\n            gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2;\n            break;\n\n          case 'top':\n            gl.gridHeight = gl.svgHeight - this.lgRect.height - gl.goldenPadding;\n            gl.gridWidth = gl.svgWidth;\n            gl.translateY = this.lgRect.height + offY + 10;\n            gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2;\n            break;\n\n          case 'left':\n            gl.gridWidth = gl.svgWidth - this.lgRect.width - xPad;\n            gl.gridHeight = cnf.chart.height !== 'auto' ? gl.svgHeight : gl.gridWidth;\n            gl.translateY = offY;\n            gl.translateX = offX + this.lgRect.width + xPad;\n            break;\n\n          case 'right':\n            gl.gridWidth = gl.svgWidth - this.lgRect.width - xPad - 5;\n            gl.gridHeight = cnf.chart.height !== 'auto' ? gl.svgHeight : gl.gridWidth;\n            gl.translateY = offY;\n            gl.translateX = offX + 10;\n            break;\n\n          default:\n            throw new Error('Legend position not supported');\n        }\n      }\n    }, {\n      key: \"conditionalChecksForAxisCoords\",\n      value: function conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords, xaxisGroupLabelCoords) {\n        var w = this.w;\n        var xAxisNum = w.globals.hasXaxisGroups ? 2 : 1;\n        var baseXAxisHeight = xaxisGroupLabelCoords.height + xaxisLabelCoords.height + xtitleCoords.height;\n        var xAxisHeightMultiplicate = w.globals.isMultiLineX ? 1.2 : w.globals.LINE_HEIGHT_RATIO;\n        var rotatedXAxisOffset = w.globals.rotateXLabels ? 22 : 10;\n        var rotatedXAxisLegendOffset = w.globals.rotateXLabels && w.config.legend.position === 'bottom';\n        var additionalOffset = rotatedXAxisLegendOffset ? 10 : 0;\n        this.xAxisHeight = baseXAxisHeight * xAxisHeightMultiplicate + xAxisNum * rotatedXAxisOffset + additionalOffset;\n        this.xAxisWidth = xaxisLabelCoords.width;\n\n        if (this.xAxisHeight - xtitleCoords.height > w.config.xaxis.labels.maxHeight) {\n          this.xAxisHeight = w.config.xaxis.labels.maxHeight;\n        }\n\n        if (w.config.xaxis.labels.minHeight && this.xAxisHeight < w.config.xaxis.labels.minHeight) {\n          this.xAxisHeight = w.config.xaxis.labels.minHeight;\n        }\n\n        if (w.config.xaxis.floating) {\n          this.xAxisHeight = 0;\n        }\n\n        var minYAxisWidth = 0;\n        var maxYAxisWidth = 0;\n        w.config.yaxis.forEach(function (y) {\n          minYAxisWidth += y.labels.minWidth;\n          maxYAxisWidth += y.labels.maxWidth;\n        });\n\n        if (this.yAxisWidth < minYAxisWidth) {\n          this.yAxisWidth = minYAxisWidth;\n        }\n\n        if (this.yAxisWidth > maxYAxisWidth) {\n          this.yAxisWidth = maxYAxisWidth;\n        }\n      }\n    }]);\n\n    return Dimensions;\n  }();\n\n  var Helpers$2 = /*#__PURE__*/function () {\n    function Helpers(lgCtx) {\n      _classCallCheck(this, Helpers);\n\n      this.w = lgCtx.w;\n      this.lgCtx = lgCtx;\n    }\n\n    _createClass(Helpers, [{\n      key: \"getLegendStyles\",\n      value: function getLegendStyles() {\n        var stylesheet = document.createElement('style');\n        stylesheet.setAttribute('type', 'text/css');\n        var text = \"\\t\\n    \\t\\n      .apexcharts-legend {\\t\\n        display: flex;\\t\\n        overflow: auto;\\t\\n        padding: 0 10px;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom, .apexcharts-legend.apx-legend-position-top {\\t\\n        flex-wrap: wrap\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\t\\n        flex-direction: column;\\t\\n        bottom: 0;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-left, .apexcharts-legend.apx-legend-position-top.apexcharts-align-left, .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\t\\n        justify-content: flex-start;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-center, .apexcharts-legend.apx-legend-position-top.apexcharts-align-center {\\t\\n        justify-content: center;  \\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-right, .apexcharts-legend.apx-legend-position-top.apexcharts-align-right {\\t\\n        justify-content: flex-end;\\t\\n      }\\t\\n      .apexcharts-legend-series {\\t\\n        cursor: pointer;\\t\\n        line-height: normal;\\t\\n      }\\t\\n      .apexcharts-legend.apx-legend-position-bottom .apexcharts-legend-series, .apexcharts-legend.apx-legend-position-top .apexcharts-legend-series{\\t\\n        display: flex;\\t\\n        align-items: center;\\t\\n      }\\t\\n      .apexcharts-legend-text {\\t\\n        position: relative;\\t\\n        font-size: 14px;\\t\\n      }\\t\\n      .apexcharts-legend-text *, .apexcharts-legend-marker * {\\t\\n        pointer-events: none;\\t\\n      }\\t\\n      .apexcharts-legend-marker {\\t\\n        position: relative;\\t\\n        display: inline-block;\\t\\n        cursor: pointer;\\t\\n        margin-right: 3px;\\t\\n        border-style: solid;\\n      }\\t\\n      \\t\\n      .apexcharts-legend.apexcharts-align-right .apexcharts-legend-series, .apexcharts-legend.apexcharts-align-left .apexcharts-legend-series{\\t\\n        display: inline-block;\\t\\n      }\\t\\n      .apexcharts-legend-series.apexcharts-no-click {\\t\\n        cursor: auto;\\t\\n      }\\t\\n      .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\\t\\n        display: none !important;\\t\\n      }\\t\\n      .apexcharts-inactive-legend {\\t\\n        opacity: 0.45;\\t\\n      }\";\n        var rules = document.createTextNode(text);\n        stylesheet.appendChild(rules);\n        return stylesheet;\n      }\n    }, {\n      key: \"getLegendBBox\",\n      value: function getLegendBBox() {\n        var w = this.w;\n        var currLegendsWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend');\n        var currLegendsWrapRect = currLegendsWrap.getBoundingClientRect();\n        var currLegendsWrapWidth = currLegendsWrapRect.width;\n        var currLegendsWrapHeight = currLegendsWrapRect.height;\n        return {\n          clwh: currLegendsWrapHeight,\n          clww: currLegendsWrapWidth\n        };\n      }\n    }, {\n      key: \"appendToForeignObject\",\n      value: function appendToForeignObject() {\n        var gl = this.w.globals;\n        gl.dom.elLegendForeign.appendChild(this.getLegendStyles());\n      }\n    }, {\n      key: \"toggleDataSeries\",\n      value: function toggleDataSeries(seriesCnt, isHidden) {\n        var _this = this;\n\n        var w = this.w;\n\n        if (w.globals.axisCharts || w.config.chart.type === 'radialBar') {\n          w.globals.resized = true; // we don't want initial animations again\n\n          var seriesEl = null;\n          var realIndex = null; // yes, make it null. 1 series will rise at a time\n\n          w.globals.risingSeries = [];\n\n          if (w.globals.axisCharts) {\n            seriesEl = w.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(seriesCnt, \"']\"));\n            realIndex = parseInt(seriesEl.getAttribute('data:realIndex'), 10);\n          } else {\n            seriesEl = w.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(seriesCnt + 1, \"']\"));\n            realIndex = parseInt(seriesEl.getAttribute('rel'), 10) - 1;\n          }\n\n          if (isHidden) {\n            var seriesToMakeVisible = [{\n              cs: w.globals.collapsedSeries,\n              csi: w.globals.collapsedSeriesIndices\n            }, {\n              cs: w.globals.ancillaryCollapsedSeries,\n              csi: w.globals.ancillaryCollapsedSeriesIndices\n            }];\n            seriesToMakeVisible.forEach(function (r) {\n              _this.riseCollapsedSeries(r.cs, r.csi, realIndex);\n            });\n          } else {\n            this.hideSeries({\n              seriesEl: seriesEl,\n              realIndex: realIndex\n            });\n          }\n        } else {\n          // for non-axis charts i.e pie / donuts\n          var _seriesEl = w.globals.dom.Paper.select(\" .apexcharts-series[rel='\".concat(seriesCnt + 1, \"'] path\"));\n\n          var type = w.config.chart.type;\n\n          if (type === 'pie' || type === 'polarArea' || type === 'donut') {\n            var dataLabels = w.config.plotOptions.pie.donut.labels;\n            var graphics = new Graphics(this.lgCtx.ctx);\n            graphics.pathMouseDown(_seriesEl.members[0], null);\n            this.lgCtx.ctx.pie.printDataLabelsInner(_seriesEl.members[0].node, dataLabels);\n          }\n\n          _seriesEl.fire('click');\n        }\n      }\n    }, {\n      key: \"hideSeries\",\n      value: function hideSeries(_ref) {\n        var seriesEl = _ref.seriesEl,\n            realIndex = _ref.realIndex;\n        var w = this.w;\n        var series = Utils$1.clone(w.config.series);\n\n        if (w.globals.axisCharts) {\n          var shouldNotHideYAxis = false;\n\n          if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].show && w.config.yaxis[realIndex].showAlways) {\n            shouldNotHideYAxis = true;\n\n            if (w.globals.ancillaryCollapsedSeriesIndices.indexOf(realIndex) < 0) {\n              w.globals.ancillaryCollapsedSeries.push({\n                index: realIndex,\n                data: series[realIndex].data.slice(),\n                type: seriesEl.parentNode.className.baseVal.split('-')[1]\n              });\n              w.globals.ancillaryCollapsedSeriesIndices.push(realIndex);\n            }\n          }\n\n          if (!shouldNotHideYAxis) {\n            w.globals.collapsedSeries.push({\n              index: realIndex,\n              data: series[realIndex].data.slice(),\n              type: seriesEl.parentNode.className.baseVal.split('-')[1]\n            });\n            w.globals.collapsedSeriesIndices.push(realIndex);\n            var removeIndexOfRising = w.globals.risingSeries.indexOf(realIndex);\n            w.globals.risingSeries.splice(removeIndexOfRising, 1);\n          }\n        } else {\n          w.globals.collapsedSeries.push({\n            index: realIndex,\n            data: series[realIndex]\n          });\n          w.globals.collapsedSeriesIndices.push(realIndex);\n        }\n\n        var seriesChildren = seriesEl.childNodes;\n\n        for (var sc = 0; sc < seriesChildren.length; sc++) {\n          if (seriesChildren[sc].classList.contains('apexcharts-series-markers-wrap')) {\n            if (seriesChildren[sc].classList.contains('apexcharts-hide')) {\n              seriesChildren[sc].classList.remove('apexcharts-hide');\n            } else {\n              seriesChildren[sc].classList.add('apexcharts-hide');\n            }\n          }\n        }\n\n        w.globals.allSeriesCollapsed = w.globals.collapsedSeries.length === w.config.series.length;\n        series = this._getSeriesBasedOnCollapsedState(series);\n\n        this.lgCtx.ctx.updateHelpers._updateSeries(series, w.config.chart.animations.dynamicAnimation.enabled);\n      }\n    }, {\n      key: \"riseCollapsedSeries\",\n      value: function riseCollapsedSeries(collapsedSeries, seriesIndices, realIndex) {\n        var w = this.w;\n        var series = Utils$1.clone(w.config.series);\n\n        if (collapsedSeries.length > 0) {\n          for (var c = 0; c < collapsedSeries.length; c++) {\n            if (collapsedSeries[c].index === realIndex) {\n              if (w.globals.axisCharts) {\n                series[realIndex].data = collapsedSeries[c].data.slice();\n                collapsedSeries.splice(c, 1);\n                seriesIndices.splice(c, 1);\n                w.globals.risingSeries.push(realIndex);\n              } else {\n                series[realIndex] = collapsedSeries[c].data;\n                collapsedSeries.splice(c, 1);\n                seriesIndices.splice(c, 1);\n                w.globals.risingSeries.push(realIndex);\n              }\n            }\n          }\n\n          series = this._getSeriesBasedOnCollapsedState(series);\n\n          this.lgCtx.ctx.updateHelpers._updateSeries(series, w.config.chart.animations.dynamicAnimation.enabled);\n        }\n      }\n    }, {\n      key: \"_getSeriesBasedOnCollapsedState\",\n      value: function _getSeriesBasedOnCollapsedState(series) {\n        var w = this.w;\n\n        if (w.globals.axisCharts) {\n          series.forEach(function (s, sI) {\n            if (w.globals.collapsedSeriesIndices.indexOf(sI) > -1) {\n              series[sI].data = [];\n            }\n          });\n        } else {\n          series.forEach(function (s, sI) {\n            if (w.globals.collapsedSeriesIndices.indexOf(sI) > -1) {\n              series[sI] = 0;\n            }\n          });\n        }\n\n        return series;\n      }\n    }]);\n\n    return Helpers;\n  }();\n\n  /**\n   * ApexCharts Legend Class to draw legend.\n   *\n   * @module Legend\n   **/\n\n  var Legend = /*#__PURE__*/function () {\n    function Legend(ctx) {\n      _classCallCheck(this, Legend);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.onLegendClick = this.onLegendClick.bind(this);\n      this.onLegendHovered = this.onLegendHovered.bind(this);\n      this.isBarsDistributed = this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.distributed && this.w.config.series.length === 1;\n      this.legendHelpers = new Helpers$2(this);\n    }\n\n    _createClass(Legend, [{\n      key: \"init\",\n      value: function init() {\n        var w = this.w;\n        var gl = w.globals;\n        var cnf = w.config;\n        var showLegendAlways = cnf.legend.showForSingleSeries && gl.series.length === 1 || this.isBarsDistributed || gl.series.length > 1;\n\n        if ((showLegendAlways || !gl.axisCharts) && cnf.legend.show) {\n          while (gl.dom.elLegendWrap.firstChild) {\n            gl.dom.elLegendWrap.removeChild(gl.dom.elLegendWrap.firstChild);\n          }\n\n          this.drawLegends();\n\n          if (!Utils$1.isIE11()) {\n            this.legendHelpers.appendToForeignObject();\n          } else {\n            // IE11 doesn't supports foreignObject, hence append it to <head>\n            document.getElementsByTagName('head')[0].appendChild(this.legendHelpers.getLegendStyles());\n          }\n\n          if (cnf.legend.position === 'bottom' || cnf.legend.position === 'top') {\n            this.legendAlignHorizontal();\n          } else if (cnf.legend.position === 'right' || cnf.legend.position === 'left') {\n            this.legendAlignVertical();\n          }\n        }\n      }\n    }, {\n      key: \"drawLegends\",\n      value: function drawLegends() {\n        var me = this;\n        var w = this.w;\n        var fontFamily = w.config.legend.fontFamily;\n        var legendNames = w.globals.seriesNames;\n        var fillcolor = w.globals.colors.slice();\n\n        if (w.config.chart.type === 'heatmap') {\n          var ranges = w.config.plotOptions.heatmap.colorScale.ranges;\n          legendNames = ranges.map(function (colorScale) {\n            return colorScale.name ? colorScale.name : colorScale.from + ' - ' + colorScale.to;\n          });\n          fillcolor = ranges.map(function (color) {\n            return color.color;\n          });\n        } else if (this.isBarsDistributed) {\n          legendNames = w.globals.labels.slice();\n        }\n\n        if (w.config.legend.customLegendItems.length) {\n          legendNames = w.config.legend.customLegendItems;\n        }\n\n        var legendFormatter = w.globals.legendFormatter;\n        var isLegendInversed = w.config.legend.inverseOrder;\n\n        for (var i = isLegendInversed ? legendNames.length - 1 : 0; isLegendInversed ? i >= 0 : i <= legendNames.length - 1; isLegendInversed ? i-- : i++) {\n          var text = legendFormatter(legendNames[i], {\n            seriesIndex: i,\n            w: w\n          });\n          var collapsedSeries = false;\n          var ancillaryCollapsedSeries = false;\n\n          if (w.globals.collapsedSeries.length > 0) {\n            for (var c = 0; c < w.globals.collapsedSeries.length; c++) {\n              if (w.globals.collapsedSeries[c].index === i) {\n                collapsedSeries = true;\n              }\n            }\n          }\n\n          if (w.globals.ancillaryCollapsedSeriesIndices.length > 0) {\n            for (var _c = 0; _c < w.globals.ancillaryCollapsedSeriesIndices.length; _c++) {\n              if (w.globals.ancillaryCollapsedSeriesIndices[_c] === i) {\n                ancillaryCollapsedSeries = true;\n              }\n            }\n          }\n\n          var elMarker = document.createElement('span');\n          elMarker.classList.add('apexcharts-legend-marker');\n          var mOffsetX = w.config.legend.markers.offsetX;\n          var mOffsetY = w.config.legend.markers.offsetY;\n          var mHeight = w.config.legend.markers.height;\n          var mWidth = w.config.legend.markers.width;\n          var mBorderWidth = w.config.legend.markers.strokeWidth;\n          var mBorderColor = w.config.legend.markers.strokeColor;\n          var mBorderRadius = w.config.legend.markers.radius;\n          var mStyle = elMarker.style;\n          mStyle.background = fillcolor[i];\n          mStyle.color = fillcolor[i];\n          mStyle.setProperty('background', fillcolor[i], 'important'); // override fill color with custom legend.markers.fillColors\n\n          if (w.config.legend.markers.fillColors && w.config.legend.markers.fillColors[i]) {\n            mStyle.background = w.config.legend.markers.fillColors[i];\n          } // override with data color\n\n\n          if (w.globals.seriesColors[i] !== undefined) {\n            mStyle.background = w.globals.seriesColors[i];\n            mStyle.color = w.globals.seriesColors[i];\n          }\n\n          mStyle.height = Array.isArray(mHeight) ? parseFloat(mHeight[i]) + 'px' : parseFloat(mHeight) + 'px';\n          mStyle.width = Array.isArray(mWidth) ? parseFloat(mWidth[i]) + 'px' : parseFloat(mWidth) + 'px';\n          mStyle.left = (Array.isArray(mOffsetX) ? parseFloat(mOffsetX[i]) : parseFloat(mOffsetX)) + 'px';\n          mStyle.top = (Array.isArray(mOffsetY) ? parseFloat(mOffsetY[i]) : parseFloat(mOffsetY)) + 'px';\n          mStyle.borderWidth = Array.isArray(mBorderWidth) ? mBorderWidth[i] : mBorderWidth;\n          mStyle.borderColor = Array.isArray(mBorderColor) ? mBorderColor[i] : mBorderColor;\n          mStyle.borderRadius = Array.isArray(mBorderRadius) ? parseFloat(mBorderRadius[i]) + 'px' : parseFloat(mBorderRadius) + 'px';\n\n          if (w.config.legend.markers.customHTML) {\n            if (Array.isArray(w.config.legend.markers.customHTML)) {\n              if (w.config.legend.markers.customHTML[i]) {\n                elMarker.innerHTML = w.config.legend.markers.customHTML[i]();\n              }\n            } else {\n              elMarker.innerHTML = w.config.legend.markers.customHTML();\n            }\n          }\n\n          Graphics.setAttrs(elMarker, {\n            rel: i + 1,\n            'data:collapsed': collapsedSeries || ancillaryCollapsedSeries\n          });\n\n          if (collapsedSeries || ancillaryCollapsedSeries) {\n            elMarker.classList.add('apexcharts-inactive-legend');\n          }\n\n          var elLegend = document.createElement('div');\n          var elLegendText = document.createElement('span');\n          elLegendText.classList.add('apexcharts-legend-text');\n          elLegendText.innerHTML = Array.isArray(text) ? text.join(' ') : text;\n          var textColor = w.config.legend.labels.useSeriesColors ? w.globals.colors[i] : w.config.legend.labels.colors;\n\n          if (!textColor) {\n            textColor = w.config.chart.foreColor;\n          }\n\n          elLegendText.style.color = textColor;\n          elLegendText.style.fontSize = parseFloat(w.config.legend.fontSize) + 'px';\n          elLegendText.style.fontWeight = w.config.legend.fontWeight;\n          elLegendText.style.fontFamily = fontFamily || w.config.chart.fontFamily;\n          Graphics.setAttrs(elLegendText, {\n            rel: i + 1,\n            i: i,\n            'data:default-text': encodeURIComponent(text),\n            'data:collapsed': collapsedSeries || ancillaryCollapsedSeries\n          });\n          elLegend.appendChild(elMarker);\n          elLegend.appendChild(elLegendText);\n          var coreUtils = new CoreUtils(this.ctx);\n\n          if (!w.config.legend.showForZeroSeries) {\n            var total = coreUtils.getSeriesTotalByIndex(i);\n\n            if (total === 0 && coreUtils.seriesHaveSameValues(i) && !coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) {\n              elLegend.classList.add('apexcharts-hidden-zero-series');\n            }\n          }\n\n          if (!w.config.legend.showForNullSeries) {\n            if (coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) {\n              elLegend.classList.add('apexcharts-hidden-null-series');\n            }\n          }\n\n          w.globals.dom.elLegendWrap.appendChild(elLegend);\n          w.globals.dom.elLegendWrap.classList.add(\"apexcharts-align-\".concat(w.config.legend.horizontalAlign));\n          w.globals.dom.elLegendWrap.classList.add('apx-legend-position-' + w.config.legend.position);\n          elLegend.classList.add('apexcharts-legend-series');\n          elLegend.style.margin = \"\".concat(w.config.legend.itemMargin.vertical, \"px \").concat(w.config.legend.itemMargin.horizontal, \"px\");\n          w.globals.dom.elLegendWrap.style.width = w.config.legend.width ? w.config.legend.width + 'px' : '';\n          w.globals.dom.elLegendWrap.style.height = w.config.legend.height ? w.config.legend.height + 'px' : '';\n          Graphics.setAttrs(elLegend, {\n            rel: i + 1,\n            seriesName: Utils$1.escapeString(legendNames[i]),\n            'data:collapsed': collapsedSeries || ancillaryCollapsedSeries\n          });\n\n          if (collapsedSeries || ancillaryCollapsedSeries) {\n            elLegend.classList.add('apexcharts-inactive-legend');\n          }\n\n          if (!w.config.legend.onItemClick.toggleDataSeries) {\n            elLegend.classList.add('apexcharts-no-click');\n          }\n        }\n\n        w.globals.dom.elWrap.addEventListener('click', me.onLegendClick, true);\n\n        if (w.config.legend.onItemHover.highlightDataSeries && w.config.legend.customLegendItems.length === 0) {\n          w.globals.dom.elWrap.addEventListener('mousemove', me.onLegendHovered, true);\n          w.globals.dom.elWrap.addEventListener('mouseout', me.onLegendHovered, true);\n        }\n      }\n    }, {\n      key: \"setLegendWrapXY\",\n      value: function setLegendWrapXY(offsetX, offsetY) {\n        var w = this.w;\n        var elLegendWrap = w.globals.dom.elLegendWrap;\n        var legendRect = elLegendWrap.getBoundingClientRect();\n        var x = 0;\n        var y = 0;\n\n        if (w.config.legend.position === 'bottom') {\n          y = y + (w.globals.svgHeight - legendRect.height / 2);\n        } else if (w.config.legend.position === 'top') {\n          var dim = new Dimensions(this.ctx);\n          var titleH = dim.dimHelpers.getTitleSubtitleCoords('title').height;\n          var subtitleH = dim.dimHelpers.getTitleSubtitleCoords('subtitle').height;\n          y = y + (titleH > 0 ? titleH - 10 : 0) + (subtitleH > 0 ? subtitleH - 10 : 0);\n        }\n\n        elLegendWrap.style.position = 'absolute';\n        x = x + offsetX + w.config.legend.offsetX;\n        y = y + offsetY + w.config.legend.offsetY;\n        elLegendWrap.style.left = x + 'px';\n        elLegendWrap.style.top = y + 'px';\n\n        if (w.config.legend.position === 'bottom') {\n          elLegendWrap.style.top = 'auto';\n          elLegendWrap.style.bottom = 5 - w.config.legend.offsetY + 'px';\n        } else if (w.config.legend.position === 'right') {\n          elLegendWrap.style.left = 'auto';\n          elLegendWrap.style.right = 25 + w.config.legend.offsetX + 'px';\n        }\n\n        var fixedHeigthWidth = ['width', 'height'];\n        fixedHeigthWidth.forEach(function (hw) {\n          if (elLegendWrap.style[hw]) {\n            elLegendWrap.style[hw] = parseInt(w.config.legend[hw], 10) + 'px';\n          }\n        });\n      }\n    }, {\n      key: \"legendAlignHorizontal\",\n      value: function legendAlignHorizontal() {\n        var w = this.w;\n        var elLegendWrap = w.globals.dom.elLegendWrap;\n        elLegendWrap.style.right = 0;\n        var lRect = this.legendHelpers.getLegendBBox();\n        var dimensions = new Dimensions(this.ctx);\n        var titleRect = dimensions.dimHelpers.getTitleSubtitleCoords('title');\n        var subtitleRect = dimensions.dimHelpers.getTitleSubtitleCoords('subtitle');\n        var offsetX = 20;\n        var offsetY = 0; // the whole legend box is set to bottom\n\n        if (w.config.legend.position === 'bottom') {\n          offsetY = -lRect.clwh / 1.8;\n        } else if (w.config.legend.position === 'top') {\n          offsetY = titleRect.height + subtitleRect.height + w.config.title.margin + w.config.subtitle.margin - 10;\n        }\n\n        this.setLegendWrapXY(offsetX, offsetY);\n      }\n    }, {\n      key: \"legendAlignVertical\",\n      value: function legendAlignVertical() {\n        var w = this.w;\n        var lRect = this.legendHelpers.getLegendBBox();\n        var offsetY = 20;\n        var offsetX = 0;\n\n        if (w.config.legend.position === 'left') {\n          offsetX = 20;\n        }\n\n        if (w.config.legend.position === 'right') {\n          offsetX = w.globals.svgWidth - lRect.clww - 10;\n        }\n\n        this.setLegendWrapXY(offsetX, offsetY);\n      }\n    }, {\n      key: \"onLegendHovered\",\n      value: function onLegendHovered(e) {\n        var w = this.w;\n        var hoverOverLegend = e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker');\n\n        if (w.config.chart.type !== 'heatmap' && !this.isBarsDistributed) {\n          if (!e.target.classList.contains('apexcharts-inactive-legend') && hoverOverLegend) {\n            var series = new Series(this.ctx);\n            series.toggleSeriesOnHover(e, e.target);\n          }\n        } else {\n          // for heatmap handling\n          if (hoverOverLegend) {\n            var seriesCnt = parseInt(e.target.getAttribute('rel'), 10) - 1;\n            this.ctx.events.fireEvent('legendHover', [this.ctx, seriesCnt, this.w]);\n\n            var _series = new Series(this.ctx);\n\n            _series.highlightRangeInSeries(e, e.target);\n          }\n        }\n      }\n    }, {\n      key: \"onLegendClick\",\n      value: function onLegendClick(e) {\n        var w = this.w;\n        if (w.config.legend.customLegendItems.length) return;\n\n        if (e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker')) {\n          var seriesCnt = parseInt(e.target.getAttribute('rel'), 10) - 1;\n          var isHidden = e.target.getAttribute('data:collapsed') === 'true';\n          var legendClick = this.w.config.chart.events.legendClick;\n\n          if (typeof legendClick === 'function') {\n            legendClick(this.ctx, seriesCnt, this.w);\n          }\n\n          this.ctx.events.fireEvent('legendClick', [this.ctx, seriesCnt, this.w]);\n          var markerClick = this.w.config.legend.markers.onClick;\n\n          if (typeof markerClick === 'function' && e.target.classList.contains('apexcharts-legend-marker')) {\n            markerClick(this.ctx, seriesCnt, this.w);\n            this.ctx.events.fireEvent('legendMarkerClick', [this.ctx, seriesCnt, this.w]);\n          } // for now - just prevent click on heatmap legend - and allow hover only\n\n\n          var clickAllowed = w.config.chart.type !== 'treemap' && w.config.chart.type !== 'heatmap' && !this.isBarsDistributed;\n\n          if (clickAllowed && w.config.legend.onItemClick.toggleDataSeries) {\n            this.legendHelpers.toggleDataSeries(seriesCnt, isHidden);\n          }\n        }\n      }\n    }]);\n\n    return Legend;\n  }();\n\n  var icoPan = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" fill=\\\"#000000\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\">\\n    <defs>\\n        <path d=\\\"M0 0h24v24H0z\\\" id=\\\"a\\\"/>\\n    </defs>\\n    <clipPath id=\\\"b\\\">\\n        <use overflow=\\\"visible\\\" xlink:href=\\\"#a\\\"/>\\n    </clipPath>\\n    <path clip-path=\\\"url(#b)\\\" d=\\\"M23 5.5V20c0 2.2-1.8 4-4 4h-7.3c-1.08 0-2.1-.43-2.85-1.19L1 14.83s1.26-1.23 1.3-1.25c.22-.19.49-.29.79-.29.22 0 .42.06.6.16.04.01 4.31 2.46 4.31 2.46V4c0-.83.67-1.5 1.5-1.5S11 3.17 11 4v7h1V1.5c0-.83.67-1.5 1.5-1.5S15 .67 15 1.5V11h1V2.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V11h1V5.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5z\\\"/>\\n</svg>\";\n\n  var icoZoom = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"#000000\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\">\\n    <path d=\\\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\\\"/>\\n    <path d=\\\"M0 0h24v24H0V0z\\\" fill=\\\"none\\\"/>\\n    <path d=\\\"M12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z\\\"/>\\n</svg>\";\n\n  var icoReset = \"<svg fill=\\\"#000000\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n    <path d=\\\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\\\"/>\\n    <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/>\\n</svg>\";\n\n  var icoZoomIn = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\">\\n    <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/>\\n    <path d=\\\"M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\\\"/>\\n</svg>\\n\";\n\n  var icoZoomOut = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\">\\n    <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/>\\n    <path d=\\\"M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\\\"/>\\n</svg>\\n\";\n\n  var icoSelect = \"<svg fill=\\\"#6E8192\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n    <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/>\\n    <path d=\\\"M3 5h2V3c-1.1 0-2 .9-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2c0-1.1-.9-2-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2z\\\"/>\\n</svg>\";\n\n  var icoMenu = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"none\\\" d=\\\"M0 0h24v24H0V0z\\\"/><path d=\\\"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z\\\"/></svg>\";\n\n  /**\n   * ApexCharts Toolbar Class for creating toolbar in axis based charts.\n   *\n   * @module Toolbar\n   **/\n\n  var Toolbar = /*#__PURE__*/function () {\n    function Toolbar(ctx) {\n      _classCallCheck(this, Toolbar);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      var w = this.w;\n      this.ev = this.w.config.chart.events;\n      this.selectedClass = 'apexcharts-selected';\n      this.localeValues = this.w.globals.locale.toolbar;\n      this.minX = w.globals.minX;\n      this.maxX = w.globals.maxX;\n    }\n\n    _createClass(Toolbar, [{\n      key: \"createToolbar\",\n      value: function createToolbar() {\n        var _this = this;\n\n        var w = this.w;\n\n        var createDiv = function createDiv() {\n          return document.createElement('div');\n        };\n\n        var elToolbarWrap = createDiv();\n        elToolbarWrap.setAttribute('class', 'apexcharts-toolbar');\n        elToolbarWrap.style.top = w.config.chart.toolbar.offsetY + 'px';\n        elToolbarWrap.style.right = -w.config.chart.toolbar.offsetX + 3 + 'px';\n        w.globals.dom.elWrap.appendChild(elToolbarWrap);\n        this.elZoom = createDiv();\n        this.elZoomIn = createDiv();\n        this.elZoomOut = createDiv();\n        this.elPan = createDiv();\n        this.elSelection = createDiv();\n        this.elZoomReset = createDiv();\n        this.elMenuIcon = createDiv();\n        this.elMenu = createDiv();\n        this.elCustomIcons = [];\n        this.t = w.config.chart.toolbar.tools;\n\n        if (Array.isArray(this.t.customIcons)) {\n          for (var i = 0; i < this.t.customIcons.length; i++) {\n            this.elCustomIcons.push(createDiv());\n          }\n        }\n\n        var toolbarControls = [];\n\n        var appendZoomControl = function appendZoomControl(type, el, ico) {\n          var tool = type.toLowerCase();\n\n          if (_this.t[tool] && w.config.chart.zoom.enabled) {\n            toolbarControls.push({\n              el: el,\n              icon: typeof _this.t[tool] === 'string' ? _this.t[tool] : ico,\n              title: _this.localeValues[type],\n              class: \"apexcharts-\".concat(tool, \"-icon\")\n            });\n          }\n        };\n\n        appendZoomControl('zoomIn', this.elZoomIn, icoZoomIn);\n        appendZoomControl('zoomOut', this.elZoomOut, icoZoomOut);\n\n        var zoomSelectionCtrls = function zoomSelectionCtrls(z) {\n          if (_this.t[z] && w.config.chart[z].enabled) {\n            toolbarControls.push({\n              el: z === 'zoom' ? _this.elZoom : _this.elSelection,\n              icon: typeof _this.t[z] === 'string' ? _this.t[z] : z === 'zoom' ? icoZoom : icoSelect,\n              title: _this.localeValues[z === 'zoom' ? 'selectionZoom' : 'selection'],\n              class: w.globals.isTouchDevice ? 'apexcharts-element-hidden' : \"apexcharts-\".concat(z, \"-icon\")\n            });\n          }\n        };\n\n        zoomSelectionCtrls('zoom');\n        zoomSelectionCtrls('selection');\n\n        if (this.t.pan && w.config.chart.zoom.enabled) {\n          toolbarControls.push({\n            el: this.elPan,\n            icon: typeof this.t.pan === 'string' ? this.t.pan : icoPan,\n            title: this.localeValues.pan,\n            class: w.globals.isTouchDevice ? 'apexcharts-element-hidden' : 'apexcharts-pan-icon'\n          });\n        }\n\n        appendZoomControl('reset', this.elZoomReset, icoReset);\n\n        if (this.t.download) {\n          toolbarControls.push({\n            el: this.elMenuIcon,\n            icon: typeof this.t.download === 'string' ? this.t.download : icoMenu,\n            title: this.localeValues.menu,\n            class: 'apexcharts-menu-icon'\n          });\n        }\n\n        for (var _i = 0; _i < this.elCustomIcons.length; _i++) {\n          toolbarControls.push({\n            el: this.elCustomIcons[_i],\n            icon: this.t.customIcons[_i].icon,\n            title: this.t.customIcons[_i].title,\n            index: this.t.customIcons[_i].index,\n            class: 'apexcharts-toolbar-custom-icon ' + this.t.customIcons[_i].class\n          });\n        }\n\n        toolbarControls.forEach(function (t, index) {\n          if (t.index) {\n            Utils$1.moveIndexInArray(toolbarControls, index, t.index);\n          }\n        });\n\n        for (var _i2 = 0; _i2 < toolbarControls.length; _i2++) {\n          Graphics.setAttrs(toolbarControls[_i2].el, {\n            class: toolbarControls[_i2].class,\n            title: toolbarControls[_i2].title\n          });\n          toolbarControls[_i2].el.innerHTML = toolbarControls[_i2].icon;\n          elToolbarWrap.appendChild(toolbarControls[_i2].el);\n        }\n\n        this._createHamburgerMenu(elToolbarWrap);\n\n        if (w.globals.zoomEnabled) {\n          this.elZoom.classList.add(this.selectedClass);\n        } else if (w.globals.panEnabled) {\n          this.elPan.classList.add(this.selectedClass);\n        } else if (w.globals.selectionEnabled) {\n          this.elSelection.classList.add(this.selectedClass);\n        }\n\n        this.addToolbarEventListeners();\n      }\n    }, {\n      key: \"_createHamburgerMenu\",\n      value: function _createHamburgerMenu(parent) {\n        this.elMenuItems = [];\n        parent.appendChild(this.elMenu);\n        Graphics.setAttrs(this.elMenu, {\n          class: 'apexcharts-menu'\n        });\n        var menuItems = [{\n          name: 'exportSVG',\n          title: this.localeValues.exportToSVG\n        }, {\n          name: 'exportPNG',\n          title: this.localeValues.exportToPNG\n        }, {\n          name: 'exportCSV',\n          title: this.localeValues.exportToCSV\n        }];\n\n        if (!this.w.globals.allSeriesHasEqualX) {\n          // if it is a multi series, and all series have variable x values, export CSV won't work\n          menuItems.splice(2, 1);\n        }\n\n        for (var i = 0; i < menuItems.length; i++) {\n          this.elMenuItems.push(document.createElement('div'));\n          this.elMenuItems[i].innerHTML = menuItems[i].title;\n          Graphics.setAttrs(this.elMenuItems[i], {\n            class: \"apexcharts-menu-item \".concat(menuItems[i].name),\n            title: menuItems[i].title\n          });\n          this.elMenu.appendChild(this.elMenuItems[i]);\n        }\n      }\n    }, {\n      key: \"addToolbarEventListeners\",\n      value: function addToolbarEventListeners() {\n        var _this2 = this;\n\n        this.elZoomReset.addEventListener('click', this.handleZoomReset.bind(this));\n        this.elSelection.addEventListener('click', this.toggleZoomSelection.bind(this, 'selection'));\n        this.elZoom.addEventListener('click', this.toggleZoomSelection.bind(this, 'zoom'));\n        this.elZoomIn.addEventListener('click', this.handleZoomIn.bind(this));\n        this.elZoomOut.addEventListener('click', this.handleZoomOut.bind(this));\n        this.elPan.addEventListener('click', this.togglePanning.bind(this));\n        this.elMenuIcon.addEventListener('click', this.toggleMenu.bind(this));\n        this.elMenuItems.forEach(function (m) {\n          if (m.classList.contains('exportSVG')) {\n            m.addEventListener('click', _this2.handleDownload.bind(_this2, 'svg'));\n          } else if (m.classList.contains('exportPNG')) {\n            m.addEventListener('click', _this2.handleDownload.bind(_this2, 'png'));\n          } else if (m.classList.contains('exportCSV')) {\n            m.addEventListener('click', _this2.handleDownload.bind(_this2, 'csv'));\n          }\n        });\n\n        for (var i = 0; i < this.t.customIcons.length; i++) {\n          this.elCustomIcons[i].addEventListener('click', this.t.customIcons[i].click.bind(this, this.ctx, this.ctx.w));\n        }\n      }\n    }, {\n      key: \"toggleZoomSelection\",\n      value: function toggleZoomSelection(type) {\n        var charts = this.ctx.getSyncedCharts();\n        charts.forEach(function (ch) {\n          ch.ctx.toolbar.toggleOtherControls();\n          var el = type === 'selection' ? ch.ctx.toolbar.elSelection : ch.ctx.toolbar.elZoom;\n          var enabledType = type === 'selection' ? 'selectionEnabled' : 'zoomEnabled';\n          ch.w.globals[enabledType] = !ch.w.globals[enabledType];\n\n          if (!el.classList.contains(ch.ctx.toolbar.selectedClass)) {\n            el.classList.add(ch.ctx.toolbar.selectedClass);\n          } else {\n            el.classList.remove(ch.ctx.toolbar.selectedClass);\n          }\n        });\n      }\n    }, {\n      key: \"getToolbarIconsReference\",\n      value: function getToolbarIconsReference() {\n        var w = this.w;\n\n        if (!this.elZoom) {\n          this.elZoom = w.globals.dom.baseEl.querySelector('.apexcharts-zoom-icon');\n        }\n\n        if (!this.elPan) {\n          this.elPan = w.globals.dom.baseEl.querySelector('.apexcharts-pan-icon');\n        }\n\n        if (!this.elSelection) {\n          this.elSelection = w.globals.dom.baseEl.querySelector('.apexcharts-selection-icon');\n        }\n      }\n    }, {\n      key: \"enableZoomPanFromToolbar\",\n      value: function enableZoomPanFromToolbar(type) {\n        this.toggleOtherControls();\n        type === 'pan' ? this.w.globals.panEnabled = true : this.w.globals.zoomEnabled = true;\n        var el = type === 'pan' ? this.elPan : this.elZoom;\n        var el2 = type === 'pan' ? this.elZoom : this.elPan;\n\n        if (el) {\n          el.classList.add(this.selectedClass);\n        }\n\n        if (el2) {\n          el2.classList.remove(this.selectedClass);\n        }\n      }\n    }, {\n      key: \"togglePanning\",\n      value: function togglePanning() {\n        var charts = this.ctx.getSyncedCharts();\n        charts.forEach(function (ch) {\n          ch.ctx.toolbar.toggleOtherControls();\n          ch.w.globals.panEnabled = !ch.w.globals.panEnabled;\n\n          if (!ch.ctx.toolbar.elPan.classList.contains(ch.ctx.toolbar.selectedClass)) {\n            ch.ctx.toolbar.elPan.classList.add(ch.ctx.toolbar.selectedClass);\n          } else {\n            ch.ctx.toolbar.elPan.classList.remove(ch.ctx.toolbar.selectedClass);\n          }\n        });\n      }\n    }, {\n      key: \"toggleOtherControls\",\n      value: function toggleOtherControls() {\n        var _this3 = this;\n\n        var w = this.w;\n        w.globals.panEnabled = false;\n        w.globals.zoomEnabled = false;\n        w.globals.selectionEnabled = false;\n        this.getToolbarIconsReference();\n        var toggleEls = [this.elPan, this.elSelection, this.elZoom];\n        toggleEls.forEach(function (el) {\n          if (el) {\n            el.classList.remove(_this3.selectedClass);\n          }\n        });\n      }\n    }, {\n      key: \"handleZoomIn\",\n      value: function handleZoomIn() {\n        var w = this.w;\n\n        if (w.globals.isRangeBar) {\n          this.minX = w.globals.minY;\n          this.maxX = w.globals.maxY;\n        }\n\n        var centerX = (this.minX + this.maxX) / 2;\n        var newMinX = (this.minX + centerX) / 2;\n        var newMaxX = (this.maxX + centerX) / 2;\n\n        var newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX);\n\n        if (!w.globals.disableZoomIn) {\n          this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX);\n        }\n      }\n    }, {\n      key: \"handleZoomOut\",\n      value: function handleZoomOut() {\n        var w = this.w;\n\n        if (w.globals.isRangeBar) {\n          this.minX = w.globals.minY;\n          this.maxX = w.globals.maxY;\n        } // avoid zooming out beyond 1000 which may result in NaN values being printed on x-axis\n\n\n        if (w.config.xaxis.type === 'datetime' && new Date(this.minX).getUTCFullYear() < 1000) {\n          return;\n        }\n\n        var centerX = (this.minX + this.maxX) / 2;\n        var newMinX = this.minX - (centerX - this.minX);\n        var newMaxX = this.maxX - (centerX - this.maxX);\n\n        var newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX);\n\n        if (!w.globals.disableZoomOut) {\n          this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX);\n        }\n      }\n    }, {\n      key: \"_getNewMinXMaxX\",\n      value: function _getNewMinXMaxX(newMinX, newMaxX) {\n        var shouldFloor = this.w.config.xaxis.convertedCatToNumeric;\n        return {\n          minX: shouldFloor ? Math.floor(newMinX) : newMinX,\n          maxX: shouldFloor ? Math.floor(newMaxX) : newMaxX\n        };\n      }\n    }, {\n      key: \"zoomUpdateOptions\",\n      value: function zoomUpdateOptions(newMinX, newMaxX) {\n        var w = this.w;\n\n        if (newMinX === undefined && newMaxX === undefined) {\n          this.handleZoomReset();\n          return;\n        }\n\n        if (w.config.xaxis.convertedCatToNumeric) {\n          // in category charts, avoid zooming out beyond min and max\n          if (newMinX < 1) {\n            newMinX = 1;\n            newMaxX = w.globals.dataPoints;\n          }\n\n          if (newMaxX - newMinX < 2) {\n            return;\n          }\n        }\n\n        var xaxis = {\n          min: newMinX,\n          max: newMaxX\n        };\n        var beforeZoomRange = this.getBeforeZoomRange(xaxis);\n\n        if (beforeZoomRange) {\n          xaxis = beforeZoomRange.xaxis;\n        }\n\n        var options = {\n          xaxis: xaxis\n        };\n        var yaxis = Utils$1.clone(w.globals.initialConfig.yaxis);\n\n        if (w.config.chart.zoom.autoScaleYaxis) {\n          var scale = new Range$1(this.ctx);\n          yaxis = scale.autoScaleY(this.ctx, yaxis, {\n            xaxis: xaxis\n          });\n        }\n\n        if (!w.config.chart.group) {\n          // if chart in a group, prevent yaxis update here\n          // fix issue #650\n          options.yaxis = yaxis;\n        }\n\n        this.w.globals.zoomed = true;\n\n        this.ctx.updateHelpers._updateOptions(options, false, this.w.config.chart.animations.dynamicAnimation.enabled);\n\n        this.zoomCallback(xaxis, yaxis);\n      }\n    }, {\n      key: \"zoomCallback\",\n      value: function zoomCallback(xaxis, yaxis) {\n        if (typeof this.ev.zoomed === 'function') {\n          this.ev.zoomed(this.ctx, {\n            xaxis: xaxis,\n            yaxis: yaxis\n          });\n        }\n      }\n    }, {\n      key: \"getBeforeZoomRange\",\n      value: function getBeforeZoomRange(xaxis, yaxis) {\n        var newRange = null;\n\n        if (typeof this.ev.beforeZoom === 'function') {\n          newRange = this.ev.beforeZoom(this, {\n            xaxis: xaxis,\n            yaxis: yaxis\n          });\n        }\n\n        return newRange;\n      }\n    }, {\n      key: \"toggleMenu\",\n      value: function toggleMenu() {\n        var _this4 = this;\n\n        window.setTimeout(function () {\n          if (_this4.elMenu.classList.contains('apexcharts-menu-open')) {\n            _this4.elMenu.classList.remove('apexcharts-menu-open');\n          } else {\n            _this4.elMenu.classList.add('apexcharts-menu-open');\n          }\n        }, 0);\n      }\n    }, {\n      key: \"handleDownload\",\n      value: function handleDownload(type) {\n        var w = this.w;\n        var exprt = new Exports(this.ctx);\n\n        switch (type) {\n          case 'svg':\n            exprt.exportToSVG(this.ctx);\n            break;\n\n          case 'png':\n            exprt.exportToPng(this.ctx);\n            break;\n\n          case 'csv':\n            exprt.exportToCSV({\n              series: w.config.series,\n              columnDelimiter: w.config.chart.toolbar.export.csv.columnDelimiter\n            });\n            break;\n        }\n      }\n    }, {\n      key: \"handleZoomReset\",\n      value: function handleZoomReset(e) {\n        var charts = this.ctx.getSyncedCharts();\n        charts.forEach(function (ch) {\n          var w = ch.w; // forget lastXAxis min/max as reset button isn't resetting the x-axis completely if zoomX is called before\n\n          w.globals.lastXAxis.min = undefined;\n          w.globals.lastXAxis.max = undefined;\n          ch.updateHelpers.revertDefaultAxisMinMax();\n\n          if (typeof w.config.chart.events.beforeResetZoom === 'function') {\n            // here, user get an option to control xaxis and yaxis when resetZoom is called\n            // at this point, whatever is returned from w.config.chart.events.beforeResetZoom\n            // is set as the new xaxis/yaxis min/max\n            var resetZoomRange = w.config.chart.events.beforeResetZoom(ch, w);\n\n            if (resetZoomRange) {\n              ch.updateHelpers.revertDefaultAxisMinMax(resetZoomRange);\n            }\n          }\n\n          if (typeof w.config.chart.events.zoomed === 'function') {\n            ch.ctx.toolbar.zoomCallback({\n              min: w.config.xaxis.min,\n              max: w.config.xaxis.max\n            });\n          }\n\n          w.globals.zoomed = false; // if user has some series collapsed before hitting zoom reset button,\n          // those series should stay collapsed\n\n          var series = ch.ctx.series.emptyCollapsedSeries(Utils$1.clone(w.globals.initialSeries));\n\n          ch.updateHelpers._updateSeries(series, w.config.chart.animations.dynamicAnimation.enabled);\n        });\n      }\n    }, {\n      key: \"destroy\",\n      value: function destroy() {\n        this.elZoom = null;\n        this.elZoomIn = null;\n        this.elZoomOut = null;\n        this.elPan = null;\n        this.elSelection = null;\n        this.elZoomReset = null;\n        this.elMenuIcon = null;\n      }\n    }]);\n\n    return Toolbar;\n  }();\n\n  /**\n   * ApexCharts Zoom Class for handling zooming and panning on axes based charts.\n   *\n   * @module ZoomPanSelection\n   **/\n\n  var ZoomPanSelection = /*#__PURE__*/function (_Toolbar) {\n    _inherits(ZoomPanSelection, _Toolbar);\n\n    var _super = _createSuper(ZoomPanSelection);\n\n    function ZoomPanSelection(ctx) {\n      var _this;\n\n      _classCallCheck(this, ZoomPanSelection);\n\n      _this = _super.call(this, ctx);\n      _this.ctx = ctx;\n      _this.w = ctx.w;\n      _this.dragged = false;\n      _this.graphics = new Graphics(_this.ctx);\n      _this.eventList = ['mousedown', 'mouseleave', 'mousemove', 'touchstart', 'touchmove', 'mouseup', 'touchend'];\n      _this.clientX = 0;\n      _this.clientY = 0;\n      _this.startX = 0;\n      _this.endX = 0;\n      _this.dragX = 0;\n      _this.startY = 0;\n      _this.endY = 0;\n      _this.dragY = 0;\n      _this.moveDirection = 'none';\n      return _this;\n    }\n\n    _createClass(ZoomPanSelection, [{\n      key: \"init\",\n      value: function init(_ref) {\n        var _this2 = this;\n\n        var xyRatios = _ref.xyRatios;\n        var w = this.w;\n        var me = this;\n        this.xyRatios = xyRatios;\n        this.zoomRect = this.graphics.drawRect(0, 0, 0, 0);\n        this.selectionRect = this.graphics.drawRect(0, 0, 0, 0);\n        this.gridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid');\n        this.zoomRect.node.classList.add('apexcharts-zoom-rect');\n        this.selectionRect.node.classList.add('apexcharts-selection-rect');\n        w.globals.dom.elGraphical.add(this.zoomRect);\n        w.globals.dom.elGraphical.add(this.selectionRect);\n\n        if (w.config.chart.selection.type === 'x') {\n          this.slDraggableRect = this.selectionRect.draggable({\n            minX: 0,\n            minY: 0,\n            maxX: w.globals.gridWidth,\n            maxY: w.globals.gridHeight\n          }).on('dragmove', this.selectionDragging.bind(this, 'dragging'));\n        } else if (w.config.chart.selection.type === 'y') {\n          this.slDraggableRect = this.selectionRect.draggable({\n            minX: 0,\n            maxX: w.globals.gridWidth\n          }).on('dragmove', this.selectionDragging.bind(this, 'dragging'));\n        } else {\n          this.slDraggableRect = this.selectionRect.draggable().on('dragmove', this.selectionDragging.bind(this, 'dragging'));\n        }\n\n        this.preselectedSelection();\n        this.hoverArea = w.globals.dom.baseEl.querySelector(\"\".concat(w.globals.chartClass, \" .apexcharts-svg\"));\n        this.hoverArea.classList.add('apexcharts-zoomable');\n        this.eventList.forEach(function (event) {\n          _this2.hoverArea.addEventListener(event, me.svgMouseEvents.bind(me, xyRatios), {\n            capture: false,\n            passive: true\n          });\n        });\n      } // remove the event listeners which were previously added on hover area\n\n    }, {\n      key: \"destroy\",\n      value: function destroy() {\n        if (this.slDraggableRect) {\n          this.slDraggableRect.draggable(false);\n          this.slDraggableRect.off();\n          this.selectionRect.off();\n        }\n\n        this.selectionRect = null;\n        this.zoomRect = null;\n        this.gridRect = null;\n      }\n    }, {\n      key: \"svgMouseEvents\",\n      value: function svgMouseEvents(xyRatios, e) {\n        var w = this.w;\n        var me = this;\n        var toolbar = this.ctx.toolbar;\n        var zoomtype = w.globals.zoomEnabled ? w.config.chart.zoom.type : w.config.chart.selection.type;\n        var autoSelected = w.config.chart.toolbar.autoSelected;\n\n        if (e.shiftKey) {\n          this.shiftWasPressed = true;\n          toolbar.enableZoomPanFromToolbar(autoSelected === 'pan' ? 'zoom' : 'pan');\n        } else {\n          if (this.shiftWasPressed) {\n            toolbar.enableZoomPanFromToolbar(autoSelected);\n            this.shiftWasPressed = false;\n          }\n        }\n\n        if (!e.target) return;\n        var tc = e.target.classList;\n        var pc;\n\n        if (e.target.parentNode && e.target.parentNode !== null) {\n          pc = e.target.parentNode.classList;\n        }\n\n        var falsePositives = tc.contains('apexcharts-selection-rect') || tc.contains('apexcharts-legend-marker') || tc.contains('apexcharts-legend-text') || pc && pc.contains('apexcharts-toolbar');\n        if (falsePositives) return;\n        me.clientX = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientX : e.type === 'touchend' ? e.changedTouches[0].clientX : e.clientX;\n        me.clientY = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientY : e.type === 'touchend' ? e.changedTouches[0].clientY : e.clientY;\n\n        if (e.type === 'mousedown' && e.which === 1) {\n          var gridRectDim = me.gridRect.getBoundingClientRect();\n          me.startX = me.clientX - gridRectDim.left;\n          me.startY = me.clientY - gridRectDim.top;\n          me.dragged = false;\n          me.w.globals.mousedown = true;\n        }\n\n        if (e.type === 'mousemove' && e.which === 1 || e.type === 'touchmove') {\n          me.dragged = true;\n\n          if (w.globals.panEnabled) {\n            w.globals.selection = null;\n\n            if (me.w.globals.mousedown) {\n              me.panDragging({\n                context: me,\n                zoomtype: zoomtype,\n                xyRatios: xyRatios\n              });\n            }\n          } else {\n            if (me.w.globals.mousedown && w.globals.zoomEnabled || me.w.globals.mousedown && w.globals.selectionEnabled) {\n              me.selection = me.selectionDrawing({\n                context: me,\n                zoomtype: zoomtype\n              });\n            }\n          }\n        }\n\n        if (e.type === 'mouseup' || e.type === 'touchend' || e.type === 'mouseleave') {\n          // we will be calling getBoundingClientRect on each mousedown/mousemove/mouseup\n          var _gridRectDim = me.gridRect.getBoundingClientRect();\n\n          if (me.w.globals.mousedown) {\n            // user released the drag, now do all the calculations\n            me.endX = me.clientX - _gridRectDim.left;\n            me.endY = me.clientY - _gridRectDim.top;\n            me.dragX = Math.abs(me.endX - me.startX);\n            me.dragY = Math.abs(me.endY - me.startY);\n\n            if (w.globals.zoomEnabled || w.globals.selectionEnabled) {\n              me.selectionDrawn({\n                context: me,\n                zoomtype: zoomtype\n              });\n            }\n\n            if (w.globals.panEnabled && w.config.xaxis.convertedCatToNumeric) {\n              me.delayedPanScrolled();\n            }\n          }\n\n          if (w.globals.zoomEnabled) {\n            me.hideSelectionRect(this.selectionRect);\n          }\n\n          me.dragged = false;\n          me.w.globals.mousedown = false;\n        }\n\n        this.makeSelectionRectDraggable();\n      }\n    }, {\n      key: \"makeSelectionRectDraggable\",\n      value: function makeSelectionRectDraggable() {\n        var w = this.w;\n        if (!this.selectionRect) return;\n        var rectDim = this.selectionRect.node.getBoundingClientRect();\n\n        if (rectDim.width > 0 && rectDim.height > 0) {\n          this.slDraggableRect.selectize({\n            points: 'l, r',\n            pointSize: 8,\n            pointType: 'rect'\n          }).resize({\n            constraint: {\n              minX: 0,\n              minY: 0,\n              maxX: w.globals.gridWidth,\n              maxY: w.globals.gridHeight\n            }\n          }).on('resizing', this.selectionDragging.bind(this, 'resizing'));\n        }\n      }\n    }, {\n      key: \"preselectedSelection\",\n      value: function preselectedSelection() {\n        var w = this.w;\n        var xyRatios = this.xyRatios;\n\n        if (!w.globals.zoomEnabled) {\n          if (typeof w.globals.selection !== 'undefined' && w.globals.selection !== null) {\n            this.drawSelectionRect(w.globals.selection);\n          } else {\n            if (w.config.chart.selection.xaxis.min !== undefined && w.config.chart.selection.xaxis.max !== undefined) {\n              var x = (w.config.chart.selection.xaxis.min - w.globals.minX) / xyRatios.xRatio;\n              var width = w.globals.gridWidth - (w.globals.maxX - w.config.chart.selection.xaxis.max) / xyRatios.xRatio - x;\n              var selectionRect = {\n                x: x,\n                y: 0,\n                width: width,\n                height: w.globals.gridHeight,\n                translateX: 0,\n                translateY: 0,\n                selectionEnabled: true\n              };\n              this.drawSelectionRect(selectionRect);\n              this.makeSelectionRectDraggable();\n\n              if (typeof w.config.chart.events.selection === 'function') {\n                w.config.chart.events.selection(this.ctx, {\n                  xaxis: {\n                    min: w.config.chart.selection.xaxis.min,\n                    max: w.config.chart.selection.xaxis.max\n                  },\n                  yaxis: {}\n                });\n              }\n            }\n          }\n        }\n      }\n    }, {\n      key: \"drawSelectionRect\",\n      value: function drawSelectionRect(_ref2) {\n        var x = _ref2.x,\n            y = _ref2.y,\n            width = _ref2.width,\n            height = _ref2.height,\n            _ref2$translateX = _ref2.translateX,\n            translateX = _ref2$translateX === void 0 ? 0 : _ref2$translateX,\n            _ref2$translateY = _ref2.translateY,\n            translateY = _ref2$translateY === void 0 ? 0 : _ref2$translateY;\n        var w = this.w;\n        var zoomRect = this.zoomRect;\n        var selectionRect = this.selectionRect;\n\n        if (this.dragged || w.globals.selection !== null) {\n          var scalingAttrs = {\n            transform: 'translate(' + translateX + ', ' + translateY + ')'\n          }; // change styles based on zoom or selection\n          // zoom is Enabled and user has dragged, so draw blue rect\n\n          if (w.globals.zoomEnabled && this.dragged) {\n            if (width < 0) width = 1; // fixes apexcharts.js#1168\n\n            zoomRect.attr({\n              x: x,\n              y: y,\n              width: width,\n              height: height,\n              fill: w.config.chart.zoom.zoomedArea.fill.color,\n              'fill-opacity': w.config.chart.zoom.zoomedArea.fill.opacity,\n              stroke: w.config.chart.zoom.zoomedArea.stroke.color,\n              'stroke-width': w.config.chart.zoom.zoomedArea.stroke.width,\n              'stroke-opacity': w.config.chart.zoom.zoomedArea.stroke.opacity\n            });\n            Graphics.setAttrs(zoomRect.node, scalingAttrs);\n          } // selection is enabled\n\n\n          if (w.globals.selectionEnabled) {\n            selectionRect.attr({\n              x: x,\n              y: y,\n              width: width > 0 ? width : 0,\n              height: height > 0 ? height : 0,\n              fill: w.config.chart.selection.fill.color,\n              'fill-opacity': w.config.chart.selection.fill.opacity,\n              stroke: w.config.chart.selection.stroke.color,\n              'stroke-width': w.config.chart.selection.stroke.width,\n              'stroke-dasharray': w.config.chart.selection.stroke.dashArray,\n              'stroke-opacity': w.config.chart.selection.stroke.opacity\n            });\n            Graphics.setAttrs(selectionRect.node, scalingAttrs);\n          }\n        }\n      }\n    }, {\n      key: \"hideSelectionRect\",\n      value: function hideSelectionRect(rect) {\n        if (rect) {\n          rect.attr({\n            x: 0,\n            y: 0,\n            width: 0,\n            height: 0\n          });\n        }\n      }\n    }, {\n      key: \"selectionDrawing\",\n      value: function selectionDrawing(_ref3) {\n        var context = _ref3.context,\n            zoomtype = _ref3.zoomtype;\n        var w = this.w;\n        var me = context;\n        var gridRectDim = this.gridRect.getBoundingClientRect();\n        var startX = me.startX - 1;\n        var startY = me.startY;\n        var inversedX = false;\n        var inversedY = false;\n        var selectionWidth = me.clientX - gridRectDim.left - startX;\n        var selectionHeight = me.clientY - gridRectDim.top - startY;\n        var selectionRect = {};\n\n        if (Math.abs(selectionWidth + startX) > w.globals.gridWidth) {\n          // user dragged the mouse outside drawing area to the right\n          selectionWidth = w.globals.gridWidth - startX;\n        } else if (me.clientX - gridRectDim.left < 0) {\n          // user dragged the mouse outside drawing area to the left\n          selectionWidth = startX;\n        } // inverse selection X\n\n\n        if (startX > me.clientX - gridRectDim.left) {\n          inversedX = true;\n          selectionWidth = Math.abs(selectionWidth);\n        } // inverse selection Y\n\n\n        if (startY > me.clientY - gridRectDim.top) {\n          inversedY = true;\n          selectionHeight = Math.abs(selectionHeight);\n        }\n\n        if (zoomtype === 'x') {\n          selectionRect = {\n            x: inversedX ? startX - selectionWidth : startX,\n            y: 0,\n            width: selectionWidth,\n            height: w.globals.gridHeight\n          };\n        } else if (zoomtype === 'y') {\n          selectionRect = {\n            x: 0,\n            y: inversedY ? startY - selectionHeight : startY,\n            width: w.globals.gridWidth,\n            height: selectionHeight\n          };\n        } else {\n          selectionRect = {\n            x: inversedX ? startX - selectionWidth : startX,\n            y: inversedY ? startY - selectionHeight : startY,\n            width: selectionWidth,\n            height: selectionHeight\n          };\n        }\n\n        me.drawSelectionRect(selectionRect);\n        me.selectionDragging('resizing');\n        return selectionRect;\n      }\n    }, {\n      key: \"selectionDragging\",\n      value: function selectionDragging(type, e) {\n        var _this3 = this;\n\n        var w = this.w;\n        var xyRatios = this.xyRatios;\n        var selRect = this.selectionRect;\n        var timerInterval = 0;\n\n        if (type === 'resizing') {\n          timerInterval = 30;\n        } // update selection when selection rect is dragged\n\n\n        var getSelAttr = function getSelAttr(attr) {\n          return parseFloat(selRect.node.getAttribute(attr));\n        };\n\n        var draggedProps = {\n          x: getSelAttr('x'),\n          y: getSelAttr('y'),\n          width: getSelAttr('width'),\n          height: getSelAttr('height')\n        };\n        w.globals.selection = draggedProps; // update selection ends\n\n        if (typeof w.config.chart.events.selection === 'function' && w.globals.selectionEnabled) {\n          // a small debouncer is required when resizing to avoid freezing the chart\n          clearTimeout(this.w.globals.selectionResizeTimer);\n          this.w.globals.selectionResizeTimer = window.setTimeout(function () {\n            var gridRectDim = _this3.gridRect.getBoundingClientRect();\n\n            var selectionRect = selRect.node.getBoundingClientRect();\n            var minX = w.globals.xAxisScale.niceMin + (selectionRect.left - gridRectDim.left) * xyRatios.xRatio;\n            var maxX = w.globals.xAxisScale.niceMin + (selectionRect.right - gridRectDim.left) * xyRatios.xRatio;\n            var minY = w.globals.yAxisScale[0].niceMin + (gridRectDim.bottom - selectionRect.bottom) * xyRatios.yRatio[0];\n            var maxY = w.globals.yAxisScale[0].niceMax - (selectionRect.top - gridRectDim.top) * xyRatios.yRatio[0];\n            var xyAxis = {\n              xaxis: {\n                min: minX,\n                max: maxX\n              },\n              yaxis: {\n                min: minY,\n                max: maxY\n              }\n            };\n            w.config.chart.events.selection(_this3.ctx, xyAxis);\n\n            if (w.config.chart.brush.enabled && w.config.chart.events.brushScrolled !== undefined) {\n              w.config.chart.events.brushScrolled(_this3.ctx, xyAxis);\n            }\n          }, timerInterval);\n        }\n      }\n    }, {\n      key: \"selectionDrawn\",\n      value: function selectionDrawn(_ref4) {\n        var context = _ref4.context,\n            zoomtype = _ref4.zoomtype;\n        var w = this.w;\n        var me = context;\n        var xyRatios = this.xyRatios;\n        var toolbar = this.ctx.toolbar;\n\n        if (me.startX > me.endX) {\n          var tempX = me.startX;\n          me.startX = me.endX;\n          me.endX = tempX;\n        }\n\n        if (me.startY > me.endY) {\n          var tempY = me.startY;\n          me.startY = me.endY;\n          me.endY = tempY;\n        }\n\n        var xLowestValue = undefined;\n        var xHighestValue = undefined;\n\n        if (!w.globals.isRangeBar) {\n          xLowestValue = w.globals.xAxisScale.niceMin + me.startX * xyRatios.xRatio;\n          xHighestValue = w.globals.xAxisScale.niceMin + me.endX * xyRatios.xRatio;\n        } else {\n          xLowestValue = w.globals.yAxisScale[0].niceMin + me.startX * xyRatios.invertedYRatio;\n          xHighestValue = w.globals.yAxisScale[0].niceMin + me.endX * xyRatios.invertedYRatio;\n        } // TODO: we will consider the 1st y axis values here for getting highest and lowest y\n\n\n        var yHighestValue = [];\n        var yLowestValue = [];\n        w.config.yaxis.forEach(function (yaxe, index) {\n          yHighestValue.push(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.startY);\n          yLowestValue.push(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.endY);\n        });\n\n        if (me.dragged && (me.dragX > 10 || me.dragY > 10) && xLowestValue !== xHighestValue) {\n          if (w.globals.zoomEnabled) {\n            var yaxis = Utils$1.clone(w.globals.initialConfig.yaxis);\n            var xaxis = Utils$1.clone(w.globals.initialConfig.xaxis);\n            w.globals.zoomed = true;\n\n            if (w.config.xaxis.convertedCatToNumeric) {\n              xLowestValue = Math.floor(xLowestValue);\n              xHighestValue = Math.floor(xHighestValue);\n\n              if (xLowestValue < 1) {\n                xLowestValue = 1;\n                xHighestValue = w.globals.dataPoints;\n              }\n\n              if (xHighestValue - xLowestValue < 2) {\n                xHighestValue = xLowestValue + 1;\n              }\n            }\n\n            if (zoomtype === 'xy' || zoomtype === 'x') {\n              xaxis = {\n                min: xLowestValue,\n                max: xHighestValue\n              };\n            }\n\n            if (zoomtype === 'xy' || zoomtype === 'y') {\n              yaxis.forEach(function (yaxe, index) {\n                yaxis[index].min = yLowestValue[index];\n                yaxis[index].max = yHighestValue[index];\n              });\n            }\n\n            if (w.config.chart.zoom.autoScaleYaxis) {\n              var scale = new Range$1(me.ctx);\n              yaxis = scale.autoScaleY(me.ctx, yaxis, {\n                xaxis: xaxis\n              });\n            }\n\n            if (toolbar) {\n              var beforeZoomRange = toolbar.getBeforeZoomRange(xaxis, yaxis);\n\n              if (beforeZoomRange) {\n                xaxis = beforeZoomRange.xaxis ? beforeZoomRange.xaxis : xaxis;\n                yaxis = beforeZoomRange.yaxis ? beforeZoomRange.yaxis : yaxis;\n              }\n            }\n\n            var options = {\n              xaxis: xaxis\n            };\n\n            if (!w.config.chart.group) {\n              // if chart in a group, prevent yaxis update here\n              // fix issue #650\n              options.yaxis = yaxis;\n            }\n\n            me.ctx.updateHelpers._updateOptions(options, false, me.w.config.chart.animations.dynamicAnimation.enabled);\n\n            if (typeof w.config.chart.events.zoomed === 'function') {\n              toolbar.zoomCallback(xaxis, yaxis);\n            }\n          } else if (w.globals.selectionEnabled) {\n            var _yaxis = null;\n            var _xaxis = null;\n            _xaxis = {\n              min: xLowestValue,\n              max: xHighestValue\n            };\n\n            if (zoomtype === 'xy' || zoomtype === 'y') {\n              _yaxis = Utils$1.clone(w.config.yaxis);\n\n              _yaxis.forEach(function (yaxe, index) {\n                _yaxis[index].min = yLowestValue[index];\n                _yaxis[index].max = yHighestValue[index];\n              });\n            }\n\n            w.globals.selection = me.selection;\n\n            if (typeof w.config.chart.events.selection === 'function') {\n              w.config.chart.events.selection(me.ctx, {\n                xaxis: _xaxis,\n                yaxis: _yaxis\n              });\n            }\n          }\n        }\n      }\n    }, {\n      key: \"panDragging\",\n      value: function panDragging(_ref5) {\n        var context = _ref5.context;\n        var w = this.w;\n        var me = context; // check to make sure there is data to compare against\n\n        if (typeof w.globals.lastClientPosition.x !== 'undefined') {\n          // get the change from last position to this position\n          var deltaX = w.globals.lastClientPosition.x - me.clientX;\n          var deltaY = w.globals.lastClientPosition.y - me.clientY; // check which direction had the highest amplitude and then figure out direction by checking if the value is greater or less than zero\n\n          if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX > 0) {\n            this.moveDirection = 'left';\n          } else if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX < 0) {\n            this.moveDirection = 'right';\n          } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY > 0) {\n            this.moveDirection = 'up';\n          } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY < 0) {\n            this.moveDirection = 'down';\n          }\n        } // set the new last position to the current for next time (to get the position of drag)\n\n\n        w.globals.lastClientPosition = {\n          x: me.clientX,\n          y: me.clientY\n        };\n        var xLowestValue = w.globals.isRangeBar ? w.globals.minY : w.globals.minX;\n        var xHighestValue = w.globals.isRangeBar ? w.globals.maxY : w.globals.maxX; // on a category, we don't pan continuosly as it causes bugs\n\n        if (!w.config.xaxis.convertedCatToNumeric) {\n          me.panScrolled(xLowestValue, xHighestValue);\n        }\n      }\n    }, {\n      key: \"delayedPanScrolled\",\n      value: function delayedPanScrolled() {\n        var w = this.w;\n        var newMinX = w.globals.minX;\n        var newMaxX = w.globals.maxX;\n        var centerX = (w.globals.maxX - w.globals.minX) / 2;\n\n        if (this.moveDirection === 'left') {\n          newMinX = w.globals.minX + centerX;\n          newMaxX = w.globals.maxX + centerX;\n        } else if (this.moveDirection === 'right') {\n          newMinX = w.globals.minX - centerX;\n          newMaxX = w.globals.maxX - centerX;\n        }\n\n        newMinX = Math.floor(newMinX);\n        newMaxX = Math.floor(newMaxX);\n        this.updateScrolledChart({\n          xaxis: {\n            min: newMinX,\n            max: newMaxX\n          }\n        }, newMinX, newMaxX);\n      }\n    }, {\n      key: \"panScrolled\",\n      value: function panScrolled(xLowestValue, xHighestValue) {\n        var w = this.w;\n        var xyRatios = this.xyRatios;\n        var yaxis = Utils$1.clone(w.globals.initialConfig.yaxis);\n        var xRatio = xyRatios.xRatio;\n        var minX = w.globals.minX;\n        var maxX = w.globals.maxX;\n\n        if (w.globals.isRangeBar) {\n          xRatio = xyRatios.invertedYRatio;\n          minX = w.globals.minY;\n          maxX = w.globals.maxY;\n        }\n\n        if (this.moveDirection === 'left') {\n          xLowestValue = minX + w.globals.gridWidth / 15 * xRatio;\n          xHighestValue = maxX + w.globals.gridWidth / 15 * xRatio;\n        } else if (this.moveDirection === 'right') {\n          xLowestValue = minX - w.globals.gridWidth / 15 * xRatio;\n          xHighestValue = maxX - w.globals.gridWidth / 15 * xRatio;\n        }\n\n        if (!w.globals.isRangeBar) {\n          if (xLowestValue < w.globals.initialMinX || xHighestValue > w.globals.initialMaxX) {\n            xLowestValue = minX;\n            xHighestValue = maxX;\n          }\n        }\n\n        var xaxis = {\n          min: xLowestValue,\n          max: xHighestValue\n        };\n\n        if (w.config.chart.zoom.autoScaleYaxis) {\n          var scale = new Range$1(this.ctx);\n          yaxis = scale.autoScaleY(this.ctx, yaxis, {\n            xaxis: xaxis\n          });\n        }\n\n        var options = {\n          xaxis: {\n            min: xLowestValue,\n            max: xHighestValue\n          }\n        };\n\n        if (!w.config.chart.group) {\n          // if chart in a group, prevent yaxis update here\n          // fix issue #650\n          options.yaxis = yaxis;\n        }\n\n        this.updateScrolledChart(options, xLowestValue, xHighestValue);\n      }\n    }, {\n      key: \"updateScrolledChart\",\n      value: function updateScrolledChart(options, xLowestValue, xHighestValue) {\n        var w = this.w;\n\n        this.ctx.updateHelpers._updateOptions(options, false, false);\n\n        if (typeof w.config.chart.events.scrolled === 'function') {\n          w.config.chart.events.scrolled(this.ctx, {\n            xaxis: {\n              min: xLowestValue,\n              max: xHighestValue\n            }\n          });\n        }\n      }\n    }]);\n\n    return ZoomPanSelection;\n  }(Toolbar);\n\n  /**\n   * ApexCharts Tooltip.Utils Class to support Tooltip functionality.\n   *\n   * @module Tooltip.Utils\n   **/\n\n  var Utils = /*#__PURE__*/function () {\n    function Utils(tooltipContext) {\n      _classCallCheck(this, Utils);\n\n      this.w = tooltipContext.w;\n      this.ttCtx = tooltipContext;\n      this.ctx = tooltipContext.ctx;\n    }\n    /**\n     ** When hovering over series, you need to capture which series is being hovered on.\n     ** This function will return both capturedseries index as well as inner index of that series\n     * @memberof Utils\n     * @param {object}\n     * - hoverArea = the rect on which user hovers\n     * - elGrid = dimensions of the hover rect (it can be different than hoverarea)\n     */\n\n\n    _createClass(Utils, [{\n      key: \"getNearestValues\",\n      value: function getNearestValues(_ref) {\n        var hoverArea = _ref.hoverArea,\n            elGrid = _ref.elGrid,\n            clientX = _ref.clientX,\n            clientY = _ref.clientY;\n        var w = this.w;\n        var seriesBound = elGrid.getBoundingClientRect();\n        var hoverWidth = seriesBound.width;\n        var hoverHeight = seriesBound.height;\n        var xDivisor = hoverWidth / (w.globals.dataPoints - 1);\n        var yDivisor = hoverHeight / w.globals.dataPoints;\n        var hasBars = this.hasBars();\n\n        if ((w.globals.comboCharts || hasBars) && !w.config.xaxis.convertedCatToNumeric) {\n          xDivisor = hoverWidth / w.globals.dataPoints;\n        }\n\n        var hoverX = clientX - seriesBound.left - w.globals.barPadForNumericAxis;\n        var hoverY = clientY - seriesBound.top;\n        var notInRect = hoverX < 0 || hoverY < 0 || hoverX > hoverWidth || hoverY > hoverHeight;\n\n        if (notInRect) {\n          hoverArea.classList.remove('hovering-zoom');\n          hoverArea.classList.remove('hovering-pan');\n        } else {\n          if (w.globals.zoomEnabled) {\n            hoverArea.classList.remove('hovering-pan');\n            hoverArea.classList.add('hovering-zoom');\n          } else if (w.globals.panEnabled) {\n            hoverArea.classList.remove('hovering-zoom');\n            hoverArea.classList.add('hovering-pan');\n          }\n        }\n\n        var j = Math.round(hoverX / xDivisor);\n        var jHorz = Math.floor(hoverY / yDivisor);\n\n        if (hasBars && !w.config.xaxis.convertedCatToNumeric) {\n          j = Math.ceil(hoverX / xDivisor);\n          j = j - 1;\n        }\n\n        var capturedSeries = null;\n        var closest = null;\n        var seriesXValArr = [];\n        var seriesYValArr = []; //add extra values to show markers for the first points. Included both axes to avoid incorrect positioning of the marker\n\n        w.globals.seriesXvalues.forEach(function (value) {\n          seriesXValArr.push([value[0] + 0.000001].concat(value));\n        });\n        w.globals.seriesYvalues.forEach(function (value) {\n          seriesYValArr.push([value[0] + 0.000001].concat(value));\n        });\n        seriesXValArr = seriesXValArr.map(function (seriesXVal) {\n          return seriesXVal.filter(function (s) {\n            return Utils$1.isNumber(s);\n          });\n        });\n        seriesYValArr = seriesYValArr.map(function (seriesYVal) {\n          return seriesYVal.filter(function (s) {\n            return Utils$1.isNumber(s);\n          });\n        }); // if X axis type is not category and tooltip is not shared, then we need to find the cursor position and get the nearest value\n\n        if (w.globals.isXNumeric) {\n          // Change origin of cursor position so that we can compute the relative nearest point to the cursor on our chart\n          // we only need to scale because all points are relative to the bounds.left and bounds.top => origin is virtually (0, 0)\n          var chartGridEl = this.ttCtx.getElGrid();\n          var chartGridElBoundingRect = chartGridEl.getBoundingClientRect();\n          var transformedHoverX = hoverX * (chartGridElBoundingRect.width / hoverWidth);\n          var transformedHoverY = hoverY * (chartGridElBoundingRect.height / hoverHeight);\n          closest = this.closestInMultiArray(transformedHoverX, transformedHoverY, seriesXValArr, seriesYValArr);\n          capturedSeries = closest.index;\n          j = closest.j;\n\n          if (capturedSeries !== null) {\n            // initial push, it should be a little smaller than the 1st val\n            seriesXValArr = w.globals.seriesXvalues[capturedSeries];\n            closest = this.closestInArray(transformedHoverX, seriesXValArr);\n            j = closest.index;\n          }\n        }\n\n        w.globals.capturedSeriesIndex = capturedSeries === null ? -1 : capturedSeries;\n        if (!j || j < 1) j = 0;\n\n        if (w.globals.isBarHorizontal) {\n          w.globals.capturedDataPointIndex = jHorz;\n        } else {\n          w.globals.capturedDataPointIndex = j;\n        }\n\n        return {\n          capturedSeries: capturedSeries,\n          j: w.globals.isBarHorizontal ? jHorz : j,\n          hoverX: hoverX,\n          hoverY: hoverY\n        };\n      }\n    }, {\n      key: \"closestInMultiArray\",\n      value: function closestInMultiArray(hoverX, hoverY, Xarrays, Yarrays) {\n        var w = this.w;\n        var activeIndex = 0;\n        var currIndex = null;\n        var j = -1;\n\n        if (w.globals.series.length > 1) {\n          activeIndex = this.getFirstActiveXArray(Xarrays);\n        } else {\n          currIndex = 0;\n        }\n\n        var currX = Xarrays[activeIndex][0];\n        var diffX = Math.abs(hoverX - currX); // find nearest point on x-axis\n\n        Xarrays.forEach(function (arrX) {\n          arrX.forEach(function (x, iX) {\n            var newDiff = Math.abs(hoverX - x);\n\n            if (newDiff < diffX) {\n              diffX = newDiff;\n              j = iX;\n            }\n          });\n        });\n\n        if (j !== -1) {\n          // find nearest graph on y-axis relevanted to nearest point on x-axis\n          var currY = Yarrays[activeIndex][j];\n          var diffY = Math.abs(hoverY - currY);\n          currIndex = activeIndex;\n          Yarrays.forEach(function (arrY, iAY) {\n            var newDiff = Math.abs(hoverY - arrY[j]);\n\n            if (newDiff < diffY) {\n              diffY = newDiff;\n              currIndex = iAY;\n            }\n          });\n        }\n\n        return {\n          index: currIndex,\n          j: j\n        };\n      }\n    }, {\n      key: \"getFirstActiveXArray\",\n      value: function getFirstActiveXArray(Xarrays) {\n        var w = this.w;\n        var activeIndex = 0;\n        var firstActiveSeriesIndex = Xarrays.map(function (xarr, index) {\n          return xarr.length > 0 ? index : -1;\n        });\n\n        for (var a = 0; a < firstActiveSeriesIndex.length; a++) {\n          if (firstActiveSeriesIndex[a] !== -1 && w.globals.collapsedSeriesIndices.indexOf(a) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(a) === -1) {\n            activeIndex = firstActiveSeriesIndex[a];\n            break;\n          }\n        }\n\n        return activeIndex;\n      }\n    }, {\n      key: \"closestInArray\",\n      value: function closestInArray(val, arr) {\n        var curr = arr[0];\n        var currIndex = null;\n        var diff = Math.abs(val - curr);\n\n        for (var i = 0; i < arr.length; i++) {\n          var newdiff = Math.abs(val - arr[i]);\n\n          if (newdiff < diff) {\n            diff = newdiff;\n            currIndex = i;\n          }\n        }\n\n        return {\n          index: currIndex\n        };\n      }\n      /**\n       * When there are multiple series, it is possible to have different x values for each series.\n       * But it may be possible in those multiple series, that there is same x value for 2 or more\n       * series.\n       * @memberof Utils\n       * @param {int}\n       * - j = is the inner index of series -> (series[i][j])\n       * @return {bool}\n       */\n\n    }, {\n      key: \"isXoverlap\",\n      value: function isXoverlap(j) {\n        var w = this.w;\n        var xSameForAllSeriesJArr = [];\n        var seriesX = w.globals.seriesX.filter(function (s) {\n          return typeof s[0] !== 'undefined';\n        });\n\n        if (seriesX.length > 0) {\n          for (var i = 0; i < seriesX.length - 1; i++) {\n            if (typeof seriesX[i][j] !== 'undefined' && typeof seriesX[i + 1][j] !== 'undefined') {\n              if (seriesX[i][j] !== seriesX[i + 1][j]) {\n                xSameForAllSeriesJArr.push('unEqual');\n              }\n            }\n          }\n        }\n\n        if (xSameForAllSeriesJArr.length === 0) {\n          return true;\n        }\n\n        return false;\n      }\n    }, {\n      key: \"isInitialSeriesSameLen\",\n      value: function isInitialSeriesSameLen() {\n        var sameLen = true;\n        var initialSeries = this.w.globals.initialSeries;\n\n        for (var i = 0; i < initialSeries.length - 1; i++) {\n          if (initialSeries[i].data.length !== initialSeries[i + 1].data.length) {\n            sameLen = false;\n            break;\n          }\n        }\n\n        return sameLen;\n      }\n    }, {\n      key: \"getBarsHeight\",\n      value: function getBarsHeight(allbars) {\n        var bars = _toConsumableArray(allbars);\n\n        var totalHeight = bars.reduce(function (acc, bar) {\n          return acc + bar.getBBox().height;\n        }, 0);\n        return totalHeight;\n      }\n    }, {\n      key: \"getElMarkers\",\n      value: function getElMarkers(capturedSeries) {\n        // The selector .apexcharts-series-markers-wrap > * includes marker groups for which the\n        // .apexcharts-series-markers class is not added due to null values or discrete markers\n        if (typeof capturedSeries == 'number') {\n          return this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series[data\\\\:realIndex='\".concat(capturedSeries, \"'] .apexcharts-series-markers-wrap > *\"));\n        }\n\n        return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers-wrap > *');\n      }\n    }, {\n      key: \"getAllMarkers\",\n      value: function getAllMarkers() {\n        // first get all marker parents. This parent class contains series-index\n        // which helps to sort the markers as they are dynamic\n        var markersWraps = this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers-wrap');\n        markersWraps = _toConsumableArray(markersWraps);\n        markersWraps.sort(function (a, b) {\n          var indexA = Number(a.getAttribute('data:realIndex'));\n          var indexB = Number(b.getAttribute('data:realIndex'));\n          return indexB < indexA ? 1 : indexB > indexA ? -1 : 0;\n        });\n        var markers = [];\n        markersWraps.forEach(function (m) {\n          markers.push(m.querySelector('.apexcharts-marker'));\n        });\n        return markers;\n      }\n    }, {\n      key: \"hasMarkers\",\n      value: function hasMarkers(capturedSeries) {\n        var markers = this.getElMarkers(capturedSeries);\n        return markers.length > 0;\n      }\n    }, {\n      key: \"getElBars\",\n      value: function getElBars() {\n        return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series,  .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-rangebar-series');\n      }\n    }, {\n      key: \"hasBars\",\n      value: function hasBars() {\n        var bars = this.getElBars();\n        return bars.length > 0;\n      }\n    }, {\n      key: \"getHoverMarkerSize\",\n      value: function getHoverMarkerSize(index) {\n        var w = this.w;\n        var hoverSize = w.config.markers.hover.size;\n\n        if (hoverSize === undefined) {\n          hoverSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset;\n        }\n\n        return hoverSize;\n      }\n    }, {\n      key: \"toggleAllTooltipSeriesGroups\",\n      value: function toggleAllTooltipSeriesGroups(state) {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n\n        if (ttCtx.allTooltipSeriesGroups.length === 0) {\n          ttCtx.allTooltipSeriesGroups = w.globals.dom.baseEl.querySelectorAll('.apexcharts-tooltip-series-group');\n        }\n\n        var allTooltipSeriesGroups = ttCtx.allTooltipSeriesGroups;\n\n        for (var i = 0; i < allTooltipSeriesGroups.length; i++) {\n          if (state === 'enable') {\n            allTooltipSeriesGroups[i].classList.add('apexcharts-active');\n            allTooltipSeriesGroups[i].style.display = w.config.tooltip.items.display;\n          } else {\n            allTooltipSeriesGroups[i].classList.remove('apexcharts-active');\n            allTooltipSeriesGroups[i].style.display = 'none';\n          }\n        }\n      }\n    }]);\n\n    return Utils;\n  }();\n\n  /**\n   * ApexCharts Tooltip.Labels Class to draw texts on the tooltip.\n   * This file deals with printing actual text on the tooltip.\n   *\n   * @module Tooltip.Labels\n   **/\n\n  var Labels = /*#__PURE__*/function () {\n    function Labels(tooltipContext) {\n      _classCallCheck(this, Labels);\n\n      this.w = tooltipContext.w;\n      this.ctx = tooltipContext.ctx;\n      this.ttCtx = tooltipContext;\n      this.tooltipUtil = new Utils(tooltipContext);\n    }\n\n    _createClass(Labels, [{\n      key: \"drawSeriesTexts\",\n      value: function drawSeriesTexts(_ref) {\n        var _ref$shared = _ref.shared,\n            shared = _ref$shared === void 0 ? true : _ref$shared,\n            ttItems = _ref.ttItems,\n            _ref$i = _ref.i,\n            i = _ref$i === void 0 ? 0 : _ref$i,\n            _ref$j = _ref.j,\n            j = _ref$j === void 0 ? null : _ref$j,\n            y1 = _ref.y1,\n            y2 = _ref.y2,\n            e = _ref.e;\n        var w = this.w;\n\n        if (w.config.tooltip.custom !== undefined) {\n          this.handleCustomTooltip({\n            i: i,\n            j: j,\n            y1: y1,\n            y2: y2,\n            w: w\n          });\n        } else {\n          this.toggleActiveInactiveSeries(shared);\n        }\n\n        var values = this.getValuesToPrint({\n          i: i,\n          j: j\n        });\n        this.printLabels({\n          i: i,\n          j: j,\n          values: values,\n          ttItems: ttItems,\n          shared: shared,\n          e: e\n        }); // Re-calculate tooltip dimensions now that we have drawn the text\n\n        var tooltipEl = this.ttCtx.getElTooltip();\n        this.ttCtx.tooltipRect.ttWidth = tooltipEl.getBoundingClientRect().width;\n        this.ttCtx.tooltipRect.ttHeight = tooltipEl.getBoundingClientRect().height;\n      }\n    }, {\n      key: \"printLabels\",\n      value: function printLabels(_ref2) {\n        var _this = this;\n\n        var i = _ref2.i,\n            j = _ref2.j,\n            values = _ref2.values,\n            ttItems = _ref2.ttItems,\n            shared = _ref2.shared,\n            e = _ref2.e;\n        var w = this.w;\n        var val;\n        var goalVals = [];\n\n        var hasGoalValues = function hasGoalValues(gi) {\n          return w.globals.seriesGoals[gi] && w.globals.seriesGoals[gi][j] && Array.isArray(w.globals.seriesGoals[gi][j]);\n        };\n\n        var xVal = values.xVal,\n            zVal = values.zVal,\n            xAxisTTVal = values.xAxisTTVal;\n        var seriesName = '';\n        var pColor = w.globals.colors[i]; // The pColor here is for the markers inside tooltip\n\n        if (j !== null && w.config.plotOptions.bar.distributed) {\n          pColor = w.globals.colors[j];\n        }\n\n        var _loop = function _loop(t, inverset) {\n          var f = _this.getFormatters(i);\n\n          seriesName = _this.getSeriesName({\n            fn: f.yLbTitleFormatter,\n            index: i,\n            seriesIndex: i,\n            j: j\n          });\n\n          if (w.config.chart.type === 'treemap') {\n            seriesName = f.yLbTitleFormatter(String(w.config.series[i].data[j].x), {\n              series: w.globals.series,\n              seriesIndex: i,\n              dataPointIndex: j,\n              w: w\n            });\n          }\n\n          var tIndex = w.config.tooltip.inverseOrder ? inverset : t;\n\n          if (w.globals.axisCharts) {\n            var getValBySeriesIndex = function getValBySeriesIndex(index) {\n              if (w.globals.isRangeData) {\n                var _w$globals$seriesRang, _w$globals$seriesRang2, _w$globals$seriesRang3, _w$globals$seriesRang4;\n\n                return f.yLbFormatter((_w$globals$seriesRang = w.globals.seriesRangeStart) === null || _w$globals$seriesRang === void 0 ? void 0 : (_w$globals$seriesRang2 = _w$globals$seriesRang[index]) === null || _w$globals$seriesRang2 === void 0 ? void 0 : _w$globals$seriesRang2[j], {\n                  series: w.globals.seriesRangeStart,\n                  seriesIndex: index,\n                  dataPointIndex: j,\n                  w: w\n                }) + ' - ' + f.yLbFormatter((_w$globals$seriesRang3 = w.globals.seriesRangeEnd) === null || _w$globals$seriesRang3 === void 0 ? void 0 : (_w$globals$seriesRang4 = _w$globals$seriesRang3[index]) === null || _w$globals$seriesRang4 === void 0 ? void 0 : _w$globals$seriesRang4[j], {\n                  series: w.globals.seriesRangeEnd,\n                  seriesIndex: index,\n                  dataPointIndex: j,\n                  w: w\n                });\n              }\n\n              return f.yLbFormatter(w.globals.series[index][j], {\n                series: w.globals.series,\n                seriesIndex: index,\n                dataPointIndex: j,\n                w: w\n              });\n            };\n\n            if (shared) {\n              f = _this.getFormatters(tIndex);\n              seriesName = _this.getSeriesName({\n                fn: f.yLbTitleFormatter,\n                index: tIndex,\n                seriesIndex: i,\n                j: j\n              });\n              pColor = w.globals.colors[tIndex];\n              val = getValBySeriesIndex(tIndex);\n\n              if (hasGoalValues(tIndex)) {\n                goalVals = w.globals.seriesGoals[tIndex][j].map(function (goal) {\n                  return {\n                    attrs: goal,\n                    val: f.yLbFormatter(goal.value, {\n                      seriesIndex: tIndex,\n                      dataPointIndex: j,\n                      w: w\n                    })\n                  };\n                });\n              }\n            } else {\n              var _e$target;\n\n              // get a color from a hover area (if it's a line pattern then get from a first line)\n              var targetFill = e === null || e === void 0 ? void 0 : (_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.getAttribute('fill');\n\n              if (targetFill) {\n                pColor = targetFill.indexOf('url') !== -1 ? document.querySelector(targetFill.substr(4).slice(0, -1)).childNodes[0].getAttribute('stroke') : targetFill;\n              }\n\n              val = getValBySeriesIndex(i);\n\n              if (hasGoalValues(i) && Array.isArray(w.globals.seriesGoals[i][j])) {\n                goalVals = w.globals.seriesGoals[i][j].map(function (goal) {\n                  return {\n                    attrs: goal,\n                    val: f.yLbFormatter(goal.value, {\n                      seriesIndex: i,\n                      dataPointIndex: j,\n                      w: w\n                    })\n                  };\n                });\n              }\n            }\n          } // for pie / donuts\n\n\n          if (j === null) {\n            val = f.yLbFormatter(w.globals.series[i], _objectSpread2(_objectSpread2({}, w), {}, {\n              seriesIndex: i,\n              dataPointIndex: i\n            }));\n          }\n\n          _this.DOMHandling({\n            i: i,\n            t: tIndex,\n            j: j,\n            ttItems: ttItems,\n            values: {\n              val: val,\n              goalVals: goalVals,\n              xVal: xVal,\n              xAxisTTVal: xAxisTTVal,\n              zVal: zVal\n            },\n            seriesName: seriesName,\n            shared: shared,\n            pColor: pColor\n          });\n        };\n\n        for (var t = 0, inverset = w.globals.series.length - 1; t < w.globals.series.length; t++, inverset--) {\n          _loop(t, inverset);\n        }\n      }\n    }, {\n      key: \"getFormatters\",\n      value: function getFormatters(i) {\n        var w = this.w;\n        var yLbFormatter = w.globals.yLabelFormatters[i];\n        var yLbTitleFormatter;\n\n        if (w.globals.ttVal !== undefined) {\n          if (Array.isArray(w.globals.ttVal)) {\n            yLbFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].formatter;\n            yLbTitleFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].title && w.globals.ttVal[i].title.formatter;\n          } else {\n            yLbFormatter = w.globals.ttVal.formatter;\n\n            if (typeof w.globals.ttVal.title.formatter === 'function') {\n              yLbTitleFormatter = w.globals.ttVal.title.formatter;\n            }\n          }\n        } else {\n          yLbTitleFormatter = w.config.tooltip.y.title.formatter;\n        }\n\n        if (typeof yLbFormatter !== 'function') {\n          if (w.globals.yLabelFormatters[0]) {\n            yLbFormatter = w.globals.yLabelFormatters[0];\n          } else {\n            yLbFormatter = function yLbFormatter(label) {\n              return label;\n            };\n          }\n        }\n\n        if (typeof yLbTitleFormatter !== 'function') {\n          yLbTitleFormatter = function yLbTitleFormatter(label) {\n            return label;\n          };\n        }\n\n        return {\n          yLbFormatter: yLbFormatter,\n          yLbTitleFormatter: yLbTitleFormatter\n        };\n      }\n    }, {\n      key: \"getSeriesName\",\n      value: function getSeriesName(_ref3) {\n        var fn = _ref3.fn,\n            index = _ref3.index,\n            seriesIndex = _ref3.seriesIndex,\n            j = _ref3.j;\n        var w = this.w;\n        return fn(String(w.globals.seriesNames[index]), {\n          series: w.globals.series,\n          seriesIndex: seriesIndex,\n          dataPointIndex: j,\n          w: w\n        });\n      }\n    }, {\n      key: \"DOMHandling\",\n      value: function DOMHandling(_ref4) {\n        _ref4.i;\n            var t = _ref4.t,\n            j = _ref4.j,\n            ttItems = _ref4.ttItems,\n            values = _ref4.values,\n            seriesName = _ref4.seriesName,\n            shared = _ref4.shared,\n            pColor = _ref4.pColor;\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var val = values.val,\n            goalVals = values.goalVals,\n            xVal = values.xVal,\n            xAxisTTVal = values.xAxisTTVal,\n            zVal = values.zVal;\n        var ttItemsChildren = null;\n        ttItemsChildren = ttItems[t].children;\n\n        if (w.config.tooltip.fillSeriesColor) {\n          ttItems[t].style.backgroundColor = pColor;\n          ttItemsChildren[0].style.display = 'none';\n        }\n\n        if (ttCtx.showTooltipTitle) {\n          if (ttCtx.tooltipTitle === null) {\n            // get it once if null, and store it in class property\n            ttCtx.tooltipTitle = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-title');\n          }\n\n          ttCtx.tooltipTitle.innerHTML = xVal;\n        } // if xaxis tooltip is constructed, we need to replace the innerHTML\n\n\n        if (ttCtx.isXAxisTooltipEnabled) {\n          ttCtx.xaxisTooltipText.innerHTML = xAxisTTVal !== '' ? xAxisTTVal : xVal;\n        }\n\n        var ttYLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-y-label');\n\n        if (ttYLabel) {\n          ttYLabel.innerHTML = seriesName ? seriesName : '';\n        }\n\n        var ttYVal = ttItems[t].querySelector('.apexcharts-tooltip-text-y-value');\n\n        if (ttYVal) {\n          ttYVal.innerHTML = typeof val !== 'undefined' ? val : '';\n        }\n\n        if (ttItemsChildren[0] && ttItemsChildren[0].classList.contains('apexcharts-tooltip-marker')) {\n          if (w.config.tooltip.marker.fillColors && Array.isArray(w.config.tooltip.marker.fillColors)) {\n            pColor = w.config.tooltip.marker.fillColors[t];\n          }\n\n          ttItemsChildren[0].style.backgroundColor = pColor;\n        }\n\n        if (!w.config.tooltip.marker.show) {\n          ttItemsChildren[0].style.display = 'none';\n        }\n\n        var ttGLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-goals-label');\n        var ttGVal = ttItems[t].querySelector('.apexcharts-tooltip-text-goals-value');\n\n        if (goalVals.length && w.globals.seriesGoals[t]) {\n          var createGoalsHtml = function createGoalsHtml() {\n            var gLabels = '<div >';\n            var gVals = '<div>';\n            goalVals.forEach(function (goal, gi) {\n              gLabels += \" <div style=\\\"display: flex\\\"><span class=\\\"apexcharts-tooltip-marker\\\" style=\\\"background-color: \".concat(goal.attrs.strokeColor, \"; height: 3px; border-radius: 0; top: 5px;\\\"></span> \").concat(goal.attrs.name, \"</div>\");\n              gVals += \"<div>\".concat(goal.val, \"</div>\");\n            });\n            ttGLabel.innerHTML = gLabels + \"</div>\";\n            ttGVal.innerHTML = gVals + \"</div>\";\n          };\n\n          if (shared) {\n            if (w.globals.seriesGoals[t][j] && Array.isArray(w.globals.seriesGoals[t][j])) {\n              createGoalsHtml();\n            } else {\n              ttGLabel.innerHTML = '';\n              ttGVal.innerHTML = '';\n            }\n          } else {\n            createGoalsHtml();\n          }\n        } else {\n          ttGLabel.innerHTML = '';\n          ttGVal.innerHTML = '';\n        }\n\n        if (zVal !== null) {\n          var ttZLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-z-label');\n          ttZLabel.innerHTML = w.config.tooltip.z.title;\n          var ttZVal = ttItems[t].querySelector('.apexcharts-tooltip-text-z-value');\n          ttZVal.innerHTML = typeof zVal !== 'undefined' ? zVal : '';\n        }\n\n        if (shared && ttItemsChildren[0]) {\n          // hide when no Val or series collapsed\n          if (typeof val === 'undefined' || val === null || w.globals.ancillaryCollapsedSeriesIndices.indexOf(t) > -1 || w.globals.collapsedSeriesIndices.indexOf(t) > -1) {\n            ttItemsChildren[0].parentNode.style.display = 'none';\n          } else {\n            ttItemsChildren[0].parentNode.style.display = w.config.tooltip.items.display;\n          }\n        }\n      }\n    }, {\n      key: \"toggleActiveInactiveSeries\",\n      value: function toggleActiveInactiveSeries(shared) {\n        var w = this.w;\n\n        if (shared) {\n          // make all tooltips active\n          this.tooltipUtil.toggleAllTooltipSeriesGroups('enable');\n        } else {\n          // disable all tooltip text groups\n          this.tooltipUtil.toggleAllTooltipSeriesGroups('disable'); // enable the first tooltip text group\n\n          var firstTooltipSeriesGroup = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-series-group');\n\n          if (firstTooltipSeriesGroup) {\n            firstTooltipSeriesGroup.classList.add('apexcharts-active');\n            firstTooltipSeriesGroup.style.display = w.config.tooltip.items.display;\n          }\n        }\n      }\n    }, {\n      key: \"getValuesToPrint\",\n      value: function getValuesToPrint(_ref5) {\n        var i = _ref5.i,\n            j = _ref5.j;\n        var w = this.w;\n        var filteredSeriesX = this.ctx.series.filteredSeriesX();\n        var xVal = '';\n        var xAxisTTVal = '';\n        var zVal = null;\n        var val = null;\n        var customFormatterOpts = {\n          series: w.globals.series,\n          seriesIndex: i,\n          dataPointIndex: j,\n          w: w\n        };\n        var zFormatter = w.globals.ttZFormatter;\n\n        if (j === null) {\n          val = w.globals.series[i];\n        } else {\n          if (w.globals.isXNumeric && w.config.chart.type !== 'treemap') {\n            xVal = filteredSeriesX[i][j];\n\n            if (filteredSeriesX[i].length === 0) {\n              // a series (possibly the first one) might be collapsed, so get the next active index\n              var firstActiveSeriesIndex = this.tooltipUtil.getFirstActiveXArray(filteredSeriesX);\n              xVal = filteredSeriesX[firstActiveSeriesIndex][j];\n            }\n          } else {\n            xVal = typeof w.globals.labels[j] !== 'undefined' ? w.globals.labels[j] : '';\n          }\n        }\n\n        var bufferXVal = xVal;\n\n        if (w.globals.isXNumeric && w.config.xaxis.type === 'datetime') {\n          var xFormat = new Formatters(this.ctx);\n          xVal = xFormat.xLabelFormat(w.globals.ttKeyFormatter, bufferXVal, bufferXVal, {\n            i: undefined,\n            dateFormatter: new DateTime(this.ctx).formatDate,\n            w: this.w\n          });\n        } else {\n          if (w.globals.isBarHorizontal) {\n            xVal = w.globals.yLabelFormatters[0](bufferXVal, customFormatterOpts);\n          } else {\n            xVal = w.globals.xLabelFormatter(bufferXVal, customFormatterOpts);\n          }\n        } // override default x-axis formatter with tooltip formatter\n\n\n        if (w.config.tooltip.x.formatter !== undefined) {\n          xVal = w.globals.ttKeyFormatter(bufferXVal, customFormatterOpts);\n        }\n\n        if (w.globals.seriesZ.length > 0 && w.globals.seriesZ[i].length > 0) {\n          zVal = zFormatter(w.globals.seriesZ[i][j], w);\n        }\n\n        if (typeof w.config.xaxis.tooltip.formatter === 'function') {\n          xAxisTTVal = w.globals.xaxisTooltipFormatter(bufferXVal, customFormatterOpts);\n        } else {\n          xAxisTTVal = xVal;\n        }\n\n        return {\n          val: Array.isArray(val) ? val.join(' ') : val,\n          xVal: Array.isArray(xVal) ? xVal.join(' ') : xVal,\n          xAxisTTVal: Array.isArray(xAxisTTVal) ? xAxisTTVal.join(' ') : xAxisTTVal,\n          zVal: zVal\n        };\n      }\n    }, {\n      key: \"handleCustomTooltip\",\n      value: function handleCustomTooltip(_ref6) {\n        var i = _ref6.i,\n            j = _ref6.j,\n            y1 = _ref6.y1,\n            y2 = _ref6.y2,\n            w = _ref6.w;\n        var tooltipEl = this.ttCtx.getElTooltip();\n        var fn = w.config.tooltip.custom;\n\n        if (Array.isArray(fn) && fn[i]) {\n          fn = fn[i];\n        } // override everything with a custom html tooltip and replace it\n\n\n        tooltipEl.innerHTML = fn({\n          ctx: this.ctx,\n          series: w.globals.series,\n          seriesIndex: i,\n          dataPointIndex: j,\n          y1: y1,\n          y2: y2,\n          w: w\n        });\n      }\n    }]);\n\n    return Labels;\n  }();\n\n  /**\n   * ApexCharts Tooltip.Position Class to move the tooltip based on x and y position.\n   *\n   * @module Tooltip.Position\n   **/\n\n  var Position = /*#__PURE__*/function () {\n    function Position(tooltipContext) {\n      _classCallCheck(this, Position);\n\n      this.ttCtx = tooltipContext;\n      this.ctx = tooltipContext.ctx;\n      this.w = tooltipContext.w;\n    }\n    /**\n     * This will move the crosshair (the vertical/horz line that moves along with mouse)\n     * Along with this, this function also calls the xaxisMove function\n     * @memberof Position\n     * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair\n     */\n\n\n    _createClass(Position, [{\n      key: \"moveXCrosshairs\",\n      value: function moveXCrosshairs(cx) {\n        var j = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n        var ttCtx = this.ttCtx;\n        var w = this.w;\n        var xcrosshairs = ttCtx.getElXCrosshairs();\n        var x = cx - ttCtx.xcrosshairsWidth / 2;\n        var tickAmount = w.globals.labels.slice().length;\n\n        if (j !== null) {\n          x = w.globals.gridWidth / tickAmount * j;\n        }\n\n        if (xcrosshairs !== null && !w.globals.isBarHorizontal) {\n          xcrosshairs.setAttribute('x', x);\n          xcrosshairs.setAttribute('x1', x);\n          xcrosshairs.setAttribute('x2', x);\n          xcrosshairs.setAttribute('y2', w.globals.gridHeight);\n          xcrosshairs.classList.add('apexcharts-active');\n        }\n\n        if (x < 0) {\n          x = 0;\n        }\n\n        if (x > w.globals.gridWidth) {\n          x = w.globals.gridWidth;\n        }\n\n        if (ttCtx.isXAxisTooltipEnabled) {\n          var tx = x;\n\n          if (w.config.xaxis.crosshairs.width === 'tickWidth' || w.config.xaxis.crosshairs.width === 'barWidth') {\n            tx = x + ttCtx.xcrosshairsWidth / 2;\n          }\n\n          this.moveXAxisTooltip(tx);\n        }\n      }\n      /**\n       * This will move the crosshair (the vertical/horz line that moves along with mouse)\n       * Along with this, this function also calls the xaxisMove function\n       * @memberof Position\n       * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair\n       */\n\n    }, {\n      key: \"moveYCrosshairs\",\n      value: function moveYCrosshairs(cy) {\n        var ttCtx = this.ttCtx;\n\n        if (ttCtx.ycrosshairs !== null) {\n          Graphics.setAttrs(ttCtx.ycrosshairs, {\n            y1: cy,\n            y2: cy\n          });\n        }\n\n        if (ttCtx.ycrosshairsHidden !== null) {\n          Graphics.setAttrs(ttCtx.ycrosshairsHidden, {\n            y1: cy,\n            y2: cy\n          });\n        }\n      }\n      /**\n       ** AxisTooltip is the small rectangle which appears on x axis with x value, when user moves\n       * @memberof Position\n       * @param {int} - cx = point's x position, wherever point's x is, you need to move\n       */\n\n    }, {\n      key: \"moveXAxisTooltip\",\n      value: function moveXAxisTooltip(cx) {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n\n        if (ttCtx.xaxisTooltip !== null && ttCtx.xcrosshairsWidth !== 0) {\n          ttCtx.xaxisTooltip.classList.add('apexcharts-active');\n          var cy = ttCtx.xaxisOffY + w.config.xaxis.tooltip.offsetY + w.globals.translateY + 1 + w.config.xaxis.offsetY;\n          var xaxisTTText = ttCtx.xaxisTooltip.getBoundingClientRect();\n          var xaxisTTTextWidth = xaxisTTText.width;\n          cx = cx - xaxisTTTextWidth / 2;\n\n          if (!isNaN(cx)) {\n            cx = cx + w.globals.translateX;\n            var textRect = 0;\n            var graphics = new Graphics(this.ctx);\n            textRect = graphics.getTextRects(ttCtx.xaxisTooltipText.innerHTML);\n            ttCtx.xaxisTooltipText.style.minWidth = textRect.width + 'px';\n            ttCtx.xaxisTooltip.style.left = cx + 'px';\n            ttCtx.xaxisTooltip.style.top = cy + 'px';\n          }\n        }\n      }\n    }, {\n      key: \"moveYAxisTooltip\",\n      value: function moveYAxisTooltip(index) {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n\n        if (ttCtx.yaxisTTEls === null) {\n          ttCtx.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip');\n        }\n\n        var ycrosshairsHiddenRectY1 = parseInt(ttCtx.ycrosshairsHidden.getAttribute('y1'), 10);\n        var cy = w.globals.translateY + ycrosshairsHiddenRectY1;\n        var yAxisTTRect = ttCtx.yaxisTTEls[index].getBoundingClientRect();\n        var yAxisTTHeight = yAxisTTRect.height;\n        var cx = w.globals.translateYAxisX[index] - 2;\n\n        if (w.config.yaxis[index].opposite) {\n          cx = cx - 26;\n        }\n\n        cy = cy - yAxisTTHeight / 2;\n\n        if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1) {\n          ttCtx.yaxisTTEls[index].classList.add('apexcharts-active');\n          ttCtx.yaxisTTEls[index].style.top = cy + 'px';\n          ttCtx.yaxisTTEls[index].style.left = cx + w.config.yaxis[index].tooltip.offsetX + 'px';\n        } else {\n          ttCtx.yaxisTTEls[index].classList.remove('apexcharts-active');\n        }\n      }\n      /**\n       ** moves the whole tooltip by changing x, y attrs\n       * @memberof Position\n       * @param {int} - cx = point's x position, wherever point's x is, you need to move tooltip\n       * @param {int} - cy = point's y position, wherever point's y is, you need to move tooltip\n       * @param {int} - r = point's radius\n       */\n\n    }, {\n      key: \"moveTooltip\",\n      value: function moveTooltip(cx, cy) {\n        var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var tooltipEl = ttCtx.getElTooltip();\n        var tooltipRect = ttCtx.tooltipRect;\n        var pointR = r !== null ? parseFloat(r) : 1;\n        var x = parseFloat(cx) + pointR + 5;\n        var y = parseFloat(cy) + pointR / 2; // - tooltipRect.ttHeight / 2\n\n        if (x > w.globals.gridWidth / 2) {\n          x = x - tooltipRect.ttWidth - pointR - 10;\n        }\n\n        if (x > w.globals.gridWidth - tooltipRect.ttWidth - 10) {\n          x = w.globals.gridWidth - tooltipRect.ttWidth;\n        }\n\n        if (x < -20) {\n          x = -20;\n        }\n\n        if (w.config.tooltip.followCursor) {\n          var elGrid = ttCtx.getElGrid();\n          var seriesBound = elGrid.getBoundingClientRect();\n          x = ttCtx.e.clientX - seriesBound.left;\n\n          if (x > w.globals.gridWidth / 2) {\n            x = x - ttCtx.tooltipRect.ttWidth;\n          }\n\n          y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top;\n\n          if (y > w.globals.gridHeight / 2) {\n            y = y - ttCtx.tooltipRect.ttHeight;\n          }\n        } else {\n          if (!w.globals.isBarHorizontal) {\n            if (tooltipRect.ttHeight / 2 + y > w.globals.gridHeight) {\n              y = w.globals.gridHeight - tooltipRect.ttHeight + w.globals.translateY;\n            }\n          }\n        }\n\n        if (!isNaN(x)) {\n          x = x + w.globals.translateX;\n          tooltipEl.style.left = x + 'px';\n          tooltipEl.style.top = y + 'px';\n        }\n      }\n    }, {\n      key: \"moveMarkers\",\n      value: function moveMarkers(i, j) {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n\n        if (w.globals.markers.size[i] > 0) {\n          var allPoints = w.globals.dom.baseEl.querySelectorAll(\" .apexcharts-series[data\\\\:realIndex='\".concat(i, \"'] .apexcharts-marker\"));\n\n          for (var p = 0; p < allPoints.length; p++) {\n            if (parseInt(allPoints[p].getAttribute('rel'), 10) === j) {\n              ttCtx.marker.resetPointsSize();\n              ttCtx.marker.enlargeCurrentPoint(j, allPoints[p]);\n            }\n          }\n        } else {\n          ttCtx.marker.resetPointsSize();\n          this.moveDynamicPointOnHover(j, i);\n        }\n      } // This function is used when you need to show markers/points only on hover -\n      // DIFFERENT X VALUES in multiple series\n\n    }, {\n      key: \"moveDynamicPointOnHover\",\n      value: function moveDynamicPointOnHover(j, capturedSeries) {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var cx = 0;\n        var cy = 0;\n        var pointsArr = w.globals.pointsArray;\n        var hoverSize = ttCtx.tooltipUtil.getHoverMarkerSize(capturedSeries);\n        var serType = w.config.series[capturedSeries].type;\n\n        if (serType && (serType === 'column' || serType === 'candlestick' || serType === 'boxPlot')) {\n          // fix error mentioned in #811\n          return;\n        }\n\n        cx = pointsArr[capturedSeries][j][0];\n        cy = pointsArr[capturedSeries][j][1] ? pointsArr[capturedSeries][j][1] : 0;\n        var point = w.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(capturedSeries, \"'] .apexcharts-series-markers circle\"));\n\n        if (point && cy < w.globals.gridHeight && cy > 0) {\n          point.setAttribute('r', hoverSize);\n          point.setAttribute('cx', cx);\n          point.setAttribute('cy', cy);\n        } // point.style.opacity = w.config.markers.hover.opacity\n\n\n        this.moveXCrosshairs(cx);\n\n        if (!ttCtx.fixedTooltip) {\n          this.moveTooltip(cx, cy, hoverSize);\n        }\n      } // This function is used when you need to show markers/points only on hover -\n      // SAME X VALUES in multiple series\n\n    }, {\n      key: \"moveDynamicPointsOnHover\",\n      value: function moveDynamicPointsOnHover(j) {\n        var ttCtx = this.ttCtx;\n        var w = ttCtx.w;\n        var cx = 0;\n        var cy = 0;\n        var activeSeries = 0;\n        var pointsArr = w.globals.pointsArray;\n        var series = new Series(this.ctx);\n        activeSeries = series.getActiveConfigSeriesIndex('asc', ['line', 'area', 'scatter', 'bubble']);\n        var hoverSize = ttCtx.tooltipUtil.getHoverMarkerSize(activeSeries);\n\n        if (pointsArr[activeSeries]) {\n          cx = pointsArr[activeSeries][j][0];\n          cy = pointsArr[activeSeries][j][1];\n        }\n\n        var points = ttCtx.tooltipUtil.getAllMarkers();\n\n        if (points !== null) {\n          for (var p = 0; p < w.globals.series.length; p++) {\n            var pointArr = pointsArr[p];\n\n            if (w.globals.comboCharts) {\n              // in a combo chart, if column charts are present, markers will not match with the number of series, hence this patch to push a null value in points array\n              if (typeof pointArr === 'undefined') {\n                // nodelist to array\n                points.splice(p, 0, null);\n              }\n            }\n\n            if (pointArr && pointArr.length) {\n              var pcy = pointsArr[p][j][1];\n              var pcy2 = void 0;\n              points[p].setAttribute('cx', cx);\n\n              if (w.config.chart.type === 'rangeArea' && !w.globals.comboCharts) {\n                var rangeStartIndex = j + w.globals.series[p].length;\n                pcy2 = pointsArr[p][rangeStartIndex][1];\n                var pcyDiff = Math.abs(pcy - pcy2) / 2;\n                pcy = pcy - pcyDiff;\n              }\n\n              if (pcy !== null && !isNaN(pcy) && pcy < w.globals.gridHeight + hoverSize && pcy + hoverSize > 0) {\n                points[p] && points[p].setAttribute('r', hoverSize);\n                points[p] && points[p].setAttribute('cy', pcy);\n              } else {\n                points[p] && points[p].setAttribute('r', 0);\n              }\n            }\n          }\n        }\n\n        this.moveXCrosshairs(cx);\n\n        if (!ttCtx.fixedTooltip) {\n          this.moveTooltip(cx, cy || w.globals.gridHeight, hoverSize);\n        }\n      }\n    }, {\n      key: \"moveStickyTooltipOverBars\",\n      value: function moveStickyTooltipOverBars(j, capturedSeries) {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var barLen = w.globals.columnSeries ? w.globals.columnSeries.length : w.globals.series.length;\n        var i = barLen >= 2 && barLen % 2 === 0 ? Math.floor(barLen / 2) : Math.floor(barLen / 2) + 1;\n\n        if (w.globals.isBarHorizontal) {\n          var series = new Series(this.ctx);\n          i = series.getActiveConfigSeriesIndex('desc') + 1;\n        }\n\n        var jBar = w.globals.dom.baseEl.querySelector(\".apexcharts-bar-series .apexcharts-series[rel='\".concat(i, \"'] path[j='\").concat(j, \"'], .apexcharts-candlestick-series .apexcharts-series[rel='\").concat(i, \"'] path[j='\").concat(j, \"'], .apexcharts-boxPlot-series .apexcharts-series[rel='\").concat(i, \"'] path[j='\").concat(j, \"'], .apexcharts-rangebar-series .apexcharts-series[rel='\").concat(i, \"'] path[j='\").concat(j, \"']\"));\n\n        if (!jBar && typeof capturedSeries === 'number') {\n          // Try with captured series index\n          jBar = w.globals.dom.baseEl.querySelector(\".apexcharts-bar-series .apexcharts-series[data\\\\:realIndex='\".concat(capturedSeries, \"'] path[j='\").concat(j, \"'],\\n        .apexcharts-candlestick-series .apexcharts-series[data\\\\:realIndex='\").concat(capturedSeries, \"'] path[j='\").concat(j, \"'],\\n        .apexcharts-boxPlot-series .apexcharts-series[data\\\\:realIndex='\").concat(capturedSeries, \"'] path[j='\").concat(j, \"'],\\n        .apexcharts-rangebar-series .apexcharts-series[data\\\\:realIndex='\").concat(capturedSeries, \"'] path[j='\").concat(j, \"']\"));\n        }\n\n        var bcx = jBar ? parseFloat(jBar.getAttribute('cx')) : 0;\n        var bcy = jBar ? parseFloat(jBar.getAttribute('cy')) : 0;\n        var bw = jBar ? parseFloat(jBar.getAttribute('barWidth')) : 0;\n        var elGrid = ttCtx.getElGrid();\n        var seriesBound = elGrid.getBoundingClientRect();\n        var isBoxOrCandle = jBar && (jBar.classList.contains('apexcharts-candlestick-area') || jBar.classList.contains('apexcharts-boxPlot-area'));\n\n        if (w.globals.isXNumeric) {\n          if (jBar && !isBoxOrCandle) {\n            bcx = bcx - (barLen % 2 !== 0 ? bw / 2 : 0);\n          }\n\n          if (jBar && // fixes apexcharts.js#2354\n          isBoxOrCandle && w.globals.comboCharts) {\n            bcx = bcx - bw / 2;\n          }\n        } else {\n          if (!w.globals.isBarHorizontal) {\n            bcx = ttCtx.xAxisTicksPositions[j - 1] + ttCtx.dataPointsDividedWidth / 2;\n\n            if (isNaN(bcx)) {\n              bcx = ttCtx.xAxisTicksPositions[j] - ttCtx.dataPointsDividedWidth / 2;\n            }\n          }\n        }\n\n        if (!w.globals.isBarHorizontal) {\n          if (w.config.tooltip.followCursor) {\n            bcy = ttCtx.e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2;\n          } else {\n            if (bcy + ttCtx.tooltipRect.ttHeight + 15 > w.globals.gridHeight) {\n              bcy = w.globals.gridHeight;\n            }\n          }\n        } else {\n          bcy = bcy - ttCtx.tooltipRect.ttHeight;\n        }\n\n        if (!w.globals.isBarHorizontal) {\n          this.moveXCrosshairs(bcx);\n        }\n\n        if (!ttCtx.fixedTooltip) {\n          this.moveTooltip(bcx, bcy || w.globals.gridHeight);\n        }\n      }\n    }]);\n\n    return Position;\n  }();\n\n  /**\n   * ApexCharts Tooltip.Marker Class to draw texts on the tooltip.\n   * This file deals with the markers that appear near tooltip in line/area charts.\n   * These markers helps the user to associate the data-points and the values\n   * that are shown in the tooltip\n   *\n   * @module Tooltip.Marker\n   **/\n\n  var Marker = /*#__PURE__*/function () {\n    function Marker(tooltipContext) {\n      _classCallCheck(this, Marker);\n\n      this.w = tooltipContext.w;\n      this.ttCtx = tooltipContext;\n      this.ctx = tooltipContext.ctx;\n      this.tooltipPosition = new Position(tooltipContext);\n    }\n\n    _createClass(Marker, [{\n      key: \"drawDynamicPoints\",\n      value: function drawDynamicPoints() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var marker = new Markers(this.ctx);\n        var elsSeries = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series');\n        elsSeries = _toConsumableArray(elsSeries);\n\n        if (w.config.chart.stacked) {\n          elsSeries.sort(function (a, b) {\n            return parseFloat(a.getAttribute('data:realIndex')) - parseFloat(b.getAttribute('data:realIndex'));\n          });\n        }\n\n        for (var i = 0; i < elsSeries.length; i++) {\n          var pointsMain = elsSeries[i].querySelector(\".apexcharts-series-markers-wrap\");\n\n          if (pointsMain !== null) {\n            // it can be null as we have tooltips in donut/bar charts\n            var point = void 0;\n            var PointClasses = \"apexcharts-marker w\".concat((Math.random() + 1).toString(36).substring(4));\n\n            if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) {\n              PointClasses += ' no-pointer-events';\n            }\n\n            var elPointOptions = marker.getMarkerConfig({\n              cssClass: PointClasses,\n              seriesIndex: Number(pointsMain.getAttribute('data:realIndex')) // fixes apexcharts/apexcharts.js #1427\n\n            });\n            point = graphics.drawMarker(0, 0, elPointOptions);\n            point.node.setAttribute('default-marker-size', 0);\n            var elPointsG = document.createElementNS(w.globals.SVGNS, 'g');\n            elPointsG.classList.add('apexcharts-series-markers');\n            elPointsG.appendChild(point.node);\n            pointsMain.appendChild(elPointsG);\n          }\n        }\n      }\n    }, {\n      key: \"enlargeCurrentPoint\",\n      value: function enlargeCurrentPoint(rel, point) {\n        var x = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        var y = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n        var w = this.w;\n\n        if (w.config.chart.type !== 'bubble') {\n          this.newPointSize(rel, point);\n        }\n\n        var cx = point.getAttribute('cx');\n        var cy = point.getAttribute('cy');\n\n        if (x !== null && y !== null) {\n          cx = x;\n          cy = y;\n        }\n\n        this.tooltipPosition.moveXCrosshairs(cx);\n\n        if (!this.fixedTooltip) {\n          if (w.config.chart.type === 'radar') {\n            var elGrid = this.ttCtx.getElGrid();\n            var seriesBound = elGrid.getBoundingClientRect();\n            cx = this.ttCtx.e.clientX - seriesBound.left;\n          }\n\n          this.tooltipPosition.moveTooltip(cx, cy, w.config.markers.hover.size);\n        }\n      }\n    }, {\n      key: \"enlargePoints\",\n      value: function enlargePoints(j) {\n        var w = this.w;\n        var me = this;\n        var ttCtx = this.ttCtx;\n        var col = j;\n        var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker');\n        var newSize = w.config.markers.hover.size;\n\n        for (var p = 0; p < points.length; p++) {\n          var rel = points[p].getAttribute('rel');\n          var index = points[p].getAttribute('index');\n\n          if (newSize === undefined) {\n            newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset;\n          }\n\n          if (col === parseInt(rel, 10)) {\n            me.newPointSize(col, points[p]);\n            var cx = points[p].getAttribute('cx');\n            var cy = points[p].getAttribute('cy');\n            me.tooltipPosition.moveXCrosshairs(cx);\n\n            if (!ttCtx.fixedTooltip) {\n              me.tooltipPosition.moveTooltip(cx, cy, newSize);\n            }\n          } else {\n            me.oldPointSize(points[p]);\n          }\n        }\n      }\n    }, {\n      key: \"newPointSize\",\n      value: function newPointSize(rel, point) {\n        var w = this.w;\n        var newSize = w.config.markers.hover.size;\n        var elPoint = rel === 0 ? point.parentNode.firstChild : point.parentNode.lastChild;\n\n        if (elPoint.getAttribute('default-marker-size') !== '0') {\n          var index = parseInt(elPoint.getAttribute('index'), 10);\n\n          if (newSize === undefined) {\n            newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset;\n          }\n\n          if (newSize < 0) newSize = 0;\n          elPoint.setAttribute('r', newSize);\n        }\n      }\n    }, {\n      key: \"oldPointSize\",\n      value: function oldPointSize(point) {\n        var size = parseFloat(point.getAttribute('default-marker-size'));\n        point.setAttribute('r', size);\n      }\n    }, {\n      key: \"resetPointsSize\",\n      value: function resetPointsSize() {\n        var w = this.w;\n        var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker');\n\n        for (var p = 0; p < points.length; p++) {\n          var size = parseFloat(points[p].getAttribute('default-marker-size'));\n\n          if (Utils$1.isNumber(size) && size >= 0) {\n            points[p].setAttribute('r', size);\n          } else {\n            points[p].setAttribute('r', 0);\n          }\n        }\n      }\n    }]);\n\n    return Marker;\n  }();\n\n  /**\n   * ApexCharts Tooltip.Intersect Class.\n   * This file deals with functions related to intersecting tooltips\n   * (tooltips that appear when user hovers directly over a data-point whether)\n   *\n   * @module Tooltip.Intersect\n   **/\n\n  var Intersect = /*#__PURE__*/function () {\n    function Intersect(tooltipContext) {\n      _classCallCheck(this, Intersect);\n\n      this.w = tooltipContext.w;\n      var w = this.w;\n      this.ttCtx = tooltipContext;\n      this.isVerticalGroupedRangeBar = !w.globals.isBarHorizontal && w.config.chart.type === 'rangeBar' && w.config.plotOptions.bar.rangeBarGroupRows;\n    } // a helper function to get an element's attribute value\n\n\n    _createClass(Intersect, [{\n      key: \"getAttr\",\n      value: function getAttr(e, attr) {\n        return parseFloat(e.target.getAttribute(attr));\n      } // handle tooltip for heatmaps and treemaps\n\n    }, {\n      key: \"handleHeatTreeTooltip\",\n      value: function handleHeatTreeTooltip(_ref) {\n        var e = _ref.e,\n            opt = _ref.opt,\n            x = _ref.x,\n            y = _ref.y,\n            type = _ref.type;\n        var ttCtx = this.ttCtx;\n        var w = this.w;\n\n        if (e.target.classList.contains(\"apexcharts-\".concat(type, \"-rect\"))) {\n          var i = this.getAttr(e, 'i');\n          var j = this.getAttr(e, 'j');\n          var cx = this.getAttr(e, 'cx');\n          var cy = this.getAttr(e, 'cy');\n          var width = this.getAttr(e, 'width');\n          var height = this.getAttr(e, 'height');\n          ttCtx.tooltipLabels.drawSeriesTexts({\n            ttItems: opt.ttItems,\n            i: i,\n            j: j,\n            shared: false,\n            e: e\n          });\n          w.globals.capturedSeriesIndex = i;\n          w.globals.capturedDataPointIndex = j;\n          x = cx + ttCtx.tooltipRect.ttWidth / 2 + width;\n          y = cy + ttCtx.tooltipRect.ttHeight / 2 - height / 2;\n          ttCtx.tooltipPosition.moveXCrosshairs(cx + width / 2);\n\n          if (x > w.globals.gridWidth / 2) {\n            x = cx - ttCtx.tooltipRect.ttWidth / 2 + width;\n          }\n\n          if (ttCtx.w.config.tooltip.followCursor) {\n            var seriesBound = w.globals.dom.elWrap.getBoundingClientRect();\n            x = w.globals.clientX - seriesBound.left - (x > w.globals.gridWidth / 2 ? ttCtx.tooltipRect.ttWidth : 0);\n            y = w.globals.clientY - seriesBound.top - (y > w.globals.gridHeight / 2 ? ttCtx.tooltipRect.ttHeight : 0);\n          }\n        }\n\n        return {\n          x: x,\n          y: y\n        };\n      }\n      /**\n       * handle tooltips for line/area/scatter charts where tooltip.intersect is true\n       * when user hovers over the marker directly, this function is executed\n       */\n\n    }, {\n      key: \"handleMarkerTooltip\",\n      value: function handleMarkerTooltip(_ref2) {\n        var e = _ref2.e,\n            opt = _ref2.opt,\n            x = _ref2.x,\n            y = _ref2.y;\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var i;\n        var j;\n\n        if (e.target.classList.contains('apexcharts-marker')) {\n          var cx = parseInt(opt.paths.getAttribute('cx'), 10);\n          var cy = parseInt(opt.paths.getAttribute('cy'), 10);\n          var val = parseFloat(opt.paths.getAttribute('val'));\n          j = parseInt(opt.paths.getAttribute('rel'), 10);\n          i = parseInt(opt.paths.parentNode.parentNode.parentNode.getAttribute('rel'), 10) - 1;\n\n          if (ttCtx.intersect) {\n            var el = Utils$1.findAncestor(opt.paths, 'apexcharts-series');\n\n            if (el) {\n              i = parseInt(el.getAttribute('data:realIndex'), 10);\n            }\n          }\n\n          ttCtx.tooltipLabels.drawSeriesTexts({\n            ttItems: opt.ttItems,\n            i: i,\n            j: j,\n            shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared,\n            e: e\n          });\n\n          if (e.type === 'mouseup') {\n            ttCtx.markerClick(e, i, j);\n          }\n\n          w.globals.capturedSeriesIndex = i;\n          w.globals.capturedDataPointIndex = j;\n          x = cx;\n          y = cy + w.globals.translateY - ttCtx.tooltipRect.ttHeight * 1.4;\n\n          if (ttCtx.w.config.tooltip.followCursor) {\n            var elGrid = ttCtx.getElGrid();\n            var seriesBound = elGrid.getBoundingClientRect();\n            y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top;\n          }\n\n          if (val < 0) {\n            y = cy;\n          }\n\n          ttCtx.marker.enlargeCurrentPoint(j, opt.paths, x, y);\n        }\n\n        return {\n          x: x,\n          y: y\n        };\n      }\n      /**\n       * handle tooltips for bar/column charts\n       */\n\n    }, {\n      key: \"handleBarTooltip\",\n      value: function handleBarTooltip(_ref3) {\n        var e = _ref3.e,\n            opt = _ref3.opt;\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var tooltipEl = ttCtx.getElTooltip();\n        var bx = 0;\n        var x = 0;\n        var y = 0;\n        var i = 0;\n        var strokeWidth;\n        var barXY = this.getBarTooltipXY({\n          e: e,\n          opt: opt\n        });\n        i = barXY.i;\n        var barHeight = barXY.barHeight;\n        var j = barXY.j;\n        w.globals.capturedSeriesIndex = i;\n        w.globals.capturedDataPointIndex = j;\n\n        if (w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars() || !w.config.tooltip.shared) {\n          x = barXY.x;\n          y = barXY.y;\n          strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width;\n          bx = x;\n        } else {\n          if (!w.globals.comboCharts && !w.config.tooltip.shared) {\n            // todo: re-check this condition as it's always 0\n            bx = bx / 2;\n          }\n        } // y is NaN, make it touch the bottom of grid area\n\n\n        if (isNaN(y)) {\n          y = w.globals.svgHeight - ttCtx.tooltipRect.ttHeight;\n        }\n\n        var seriesIndex = parseInt(opt.paths.parentNode.getAttribute('data:realIndex'), 10);\n        var isReversed = w.globals.isMultipleYAxis ? w.config.yaxis[seriesIndex] && w.config.yaxis[seriesIndex].reversed : w.config.yaxis[0].reversed;\n\n        if (x + ttCtx.tooltipRect.ttWidth > w.globals.gridWidth && !isReversed) {\n          x = x - ttCtx.tooltipRect.ttWidth;\n        } else if (x < 0) {\n          x = 0;\n        }\n\n        if (ttCtx.w.config.tooltip.followCursor) {\n          var elGrid = ttCtx.getElGrid();\n          var seriesBound = elGrid.getBoundingClientRect();\n          y = ttCtx.e.clientY - seriesBound.top;\n        } // if tooltip is still null, querySelector\n\n\n        if (ttCtx.tooltip === null) {\n          ttCtx.tooltip = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip');\n        }\n\n        if (!w.config.tooltip.shared) {\n          if (w.globals.comboBarCount > 0) {\n            ttCtx.tooltipPosition.moveXCrosshairs(bx + strokeWidth / 2);\n          } else {\n            ttCtx.tooltipPosition.moveXCrosshairs(bx);\n          }\n        } // move tooltip here\n\n\n        if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars())) {\n          if (isReversed) {\n            x = x - ttCtx.tooltipRect.ttWidth;\n\n            if (x < 0) {\n              x = 0;\n            }\n          }\n\n          if (isReversed && !(w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars())) {\n            y = y + barHeight - (w.globals.series[i][j] < 0 ? barHeight : 0) * 2;\n          }\n\n          y = y + w.globals.translateY - ttCtx.tooltipRect.ttHeight / 2;\n          tooltipEl.style.left = x + w.globals.translateX + 'px';\n          tooltipEl.style.top = y + 'px';\n        }\n      }\n    }, {\n      key: \"getBarTooltipXY\",\n      value: function getBarTooltipXY(_ref4) {\n        var _this = this;\n\n        var e = _ref4.e,\n            opt = _ref4.opt;\n        var w = this.w;\n        var j = null;\n        var ttCtx = this.ttCtx;\n        var i = 0;\n        var x = 0;\n        var y = 0;\n        var barWidth = 0;\n        var barHeight = 0;\n        var cl = e.target.classList;\n\n        if (cl.contains('apexcharts-bar-area') || cl.contains('apexcharts-candlestick-area') || cl.contains('apexcharts-boxPlot-area') || cl.contains('apexcharts-rangebar-area')) {\n          var bar = e.target;\n          var barRect = bar.getBoundingClientRect();\n          var seriesBound = opt.elGrid.getBoundingClientRect();\n          var bh = barRect.height;\n          barHeight = barRect.height;\n          var bw = barRect.width;\n          var cx = parseInt(bar.getAttribute('cx'), 10);\n          var cy = parseInt(bar.getAttribute('cy'), 10);\n          barWidth = parseFloat(bar.getAttribute('barWidth'));\n          var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX;\n          j = parseInt(bar.getAttribute('j'), 10);\n          i = parseInt(bar.parentNode.getAttribute('rel'), 10) - 1;\n          var y1 = bar.getAttribute('data-range-y1');\n          var y2 = bar.getAttribute('data-range-y2');\n\n          if (w.globals.comboCharts) {\n            i = parseInt(bar.parentNode.getAttribute('data:realIndex'), 10);\n          } // if (w.config.tooltip.shared) {\n          // this check not needed  at the moment\n          //   const yDivisor = w.globals.gridHeight / (w.globals.series.length)\n          //   const hoverY = ttCtx.clientY - ttCtx.seriesBound.top\n          //   j = Math.ceil(hoverY / yDivisor)\n          // }\n\n\n          var handleXForColumns = function handleXForColumns(x) {\n            if (w.globals.isXNumeric) {\n              x = cx - bw / 2;\n            } else {\n              if (_this.isVerticalGroupedRangeBar) {\n                x = cx + bw / 2;\n              } else {\n                x = cx - ttCtx.dataPointsDividedWidth + bw / 2;\n              }\n            }\n\n            return x;\n          };\n\n          var handleYForBars = function handleYForBars() {\n            return cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2;\n          };\n\n          ttCtx.tooltipLabels.drawSeriesTexts({\n            ttItems: opt.ttItems,\n            i: i,\n            j: j,\n            y1: y1 ? parseInt(y1, 10) : null,\n            y2: y2 ? parseInt(y2, 10) : null,\n            shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared,\n            e: e\n          });\n\n          if (w.config.tooltip.followCursor) {\n            if (w.globals.isBarHorizontal) {\n              x = clientX - seriesBound.left + 15;\n              y = handleYForBars();\n            } else {\n              x = handleXForColumns(x);\n              y = e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15;\n            }\n          } else {\n            if (w.globals.isBarHorizontal) {\n              x = cx;\n\n              if (x < ttCtx.xyRatios.baseLineInvertedY) {\n                x = cx - ttCtx.tooltipRect.ttWidth;\n              }\n\n              y = handleYForBars();\n            } else {\n              x = handleXForColumns(x);\n              y = cy; // - ttCtx.tooltipRect.ttHeight / 2 + 10\n            }\n          }\n        }\n\n        return {\n          x: x,\n          y: y,\n          barHeight: barHeight,\n          barWidth: barWidth,\n          i: i,\n          j: j\n        };\n      }\n    }]);\n\n    return Intersect;\n  }();\n\n  /**\n   * ApexCharts Tooltip.AxesTooltip Class.\n   * This file deals with the x-axis and y-axis tooltips.\n   *\n   * @module Tooltip.AxesTooltip\n   **/\n  var AxesTooltip = /*#__PURE__*/function () {\n    function AxesTooltip(tooltipContext) {\n      _classCallCheck(this, AxesTooltip);\n\n      this.w = tooltipContext.w;\n      this.ttCtx = tooltipContext;\n    }\n    /**\n     * This method adds the secondary tooltip which appears below x axis\n     * @memberof Tooltip\n     **/\n\n\n    _createClass(AxesTooltip, [{\n      key: \"drawXaxisTooltip\",\n      value: function drawXaxisTooltip() {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var isBottom = w.config.xaxis.position === 'bottom';\n        ttCtx.xaxisOffY = isBottom ? w.globals.gridHeight + 1 : -w.globals.xAxisHeight - w.config.xaxis.axisTicks.height + 3;\n        var tooltipCssClass = isBottom ? 'apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom' : 'apexcharts-xaxistooltip apexcharts-xaxistooltip-top';\n        var renderTo = w.globals.dom.elWrap;\n\n        if (ttCtx.isXAxisTooltipEnabled) {\n          var xaxisTooltip = w.globals.dom.baseEl.querySelector('.apexcharts-xaxistooltip');\n\n          if (xaxisTooltip === null) {\n            ttCtx.xaxisTooltip = document.createElement('div');\n            ttCtx.xaxisTooltip.setAttribute('class', tooltipCssClass + ' apexcharts-theme-' + w.config.tooltip.theme);\n            renderTo.appendChild(ttCtx.xaxisTooltip);\n            ttCtx.xaxisTooltipText = document.createElement('div');\n            ttCtx.xaxisTooltipText.classList.add('apexcharts-xaxistooltip-text');\n            ttCtx.xaxisTooltipText.style.fontFamily = w.config.xaxis.tooltip.style.fontFamily || w.config.chart.fontFamily;\n            ttCtx.xaxisTooltipText.style.fontSize = w.config.xaxis.tooltip.style.fontSize;\n            ttCtx.xaxisTooltip.appendChild(ttCtx.xaxisTooltipText);\n          }\n        }\n      }\n      /**\n       * This method adds the secondary tooltip which appears below x axis\n       * @memberof Tooltip\n       **/\n\n    }, {\n      key: \"drawYaxisTooltip\",\n      value: function drawYaxisTooltip() {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n\n        var _loop = function _loop(i) {\n          var isRight = w.config.yaxis[i].opposite || w.config.yaxis[i].crosshairs.opposite;\n          ttCtx.yaxisOffX = isRight ? w.globals.gridWidth + 1 : 1;\n          var tooltipCssClass = isRight ? \"apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i, \" apexcharts-yaxistooltip-right\") : \"apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i, \" apexcharts-yaxistooltip-left\");\n          w.globals.yAxisSameScaleIndices.map(function (samescales, ssi) {\n            samescales.map(function (s, si) {\n              if (si === i) {\n                tooltipCssClass += w.config.yaxis[si].show ? \" \" : \" apexcharts-yaxistooltip-hidden\";\n              }\n            });\n          });\n          var renderTo = w.globals.dom.elWrap;\n          var yaxisTooltip = w.globals.dom.baseEl.querySelector(\".apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i));\n\n          if (yaxisTooltip === null) {\n            ttCtx.yaxisTooltip = document.createElement('div');\n            ttCtx.yaxisTooltip.setAttribute('class', tooltipCssClass + ' apexcharts-theme-' + w.config.tooltip.theme);\n            renderTo.appendChild(ttCtx.yaxisTooltip);\n            if (i === 0) ttCtx.yaxisTooltipText = [];\n            ttCtx.yaxisTooltipText[i] = document.createElement('div');\n            ttCtx.yaxisTooltipText[i].classList.add('apexcharts-yaxistooltip-text');\n            ttCtx.yaxisTooltip.appendChild(ttCtx.yaxisTooltipText[i]);\n          }\n        };\n\n        for (var i = 0; i < w.config.yaxis.length; i++) {\n          _loop(i);\n        }\n      }\n      /**\n       * @memberof Tooltip\n       **/\n\n    }, {\n      key: \"setXCrosshairWidth\",\n      value: function setXCrosshairWidth() {\n        var w = this.w;\n        var ttCtx = this.ttCtx; // set xcrosshairs width\n\n        var xcrosshairs = ttCtx.getElXCrosshairs();\n        ttCtx.xcrosshairsWidth = parseInt(w.config.xaxis.crosshairs.width, 10);\n\n        if (!w.globals.comboCharts) {\n          if (w.config.xaxis.crosshairs.width === 'tickWidth') {\n            var count = w.globals.labels.length;\n            ttCtx.xcrosshairsWidth = w.globals.gridWidth / count;\n          } else if (w.config.xaxis.crosshairs.width === 'barWidth') {\n            var bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area');\n\n            if (bar !== null) {\n              var barWidth = parseFloat(bar.getAttribute('barWidth'));\n              ttCtx.xcrosshairsWidth = barWidth;\n            } else {\n              ttCtx.xcrosshairsWidth = 1;\n            }\n          }\n        } else {\n          var _bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area');\n\n          if (_bar !== null && w.config.xaxis.crosshairs.width === 'barWidth') {\n            var _barWidth = parseFloat(_bar.getAttribute('barWidth'));\n\n            ttCtx.xcrosshairsWidth = _barWidth;\n          } else {\n            if (w.config.xaxis.crosshairs.width === 'tickWidth') {\n              var _count = w.globals.labels.length;\n              ttCtx.xcrosshairsWidth = w.globals.gridWidth / _count;\n            }\n          }\n        }\n\n        if (w.globals.isBarHorizontal) {\n          ttCtx.xcrosshairsWidth = 0;\n        }\n\n        if (xcrosshairs !== null && ttCtx.xcrosshairsWidth > 0) {\n          xcrosshairs.setAttribute('width', ttCtx.xcrosshairsWidth);\n        }\n      }\n    }, {\n      key: \"handleYCrosshair\",\n      value: function handleYCrosshair() {\n        var w = this.w;\n        var ttCtx = this.ttCtx; // set ycrosshairs height\n\n        ttCtx.ycrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs');\n        ttCtx.ycrosshairsHidden = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs-hidden');\n      }\n    }, {\n      key: \"drawYaxisTooltipText\",\n      value: function drawYaxisTooltipText(index, clientY, xyRatios) {\n        var ttCtx = this.ttCtx;\n        var w = this.w;\n        var lbFormatter = w.globals.yLabelFormatters[index];\n\n        if (ttCtx.yaxisTooltips[index]) {\n          var elGrid = ttCtx.getElGrid();\n          var seriesBound = elGrid.getBoundingClientRect();\n          var hoverY = (clientY - seriesBound.top) * xyRatios.yRatio[index];\n          var height = w.globals.maxYArr[index] - w.globals.minYArr[index];\n          var val = w.globals.minYArr[index] + (height - hoverY);\n          ttCtx.tooltipPosition.moveYCrosshairs(clientY - seriesBound.top);\n          ttCtx.yaxisTooltipText[index].innerHTML = lbFormatter(val);\n          ttCtx.tooltipPosition.moveYAxisTooltip(index);\n        }\n      }\n    }]);\n\n    return AxesTooltip;\n  }();\n\n  /**\n   * ApexCharts Core Tooltip Class to handle the tooltip generation.\n   *\n   * @module Tooltip\n   **/\n\n  var Tooltip = /*#__PURE__*/function () {\n    function Tooltip(ctx) {\n      _classCallCheck(this, Tooltip);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      var w = this.w;\n      this.tConfig = w.config.tooltip;\n      this.tooltipUtil = new Utils(this);\n      this.tooltipLabels = new Labels(this);\n      this.tooltipPosition = new Position(this);\n      this.marker = new Marker(this);\n      this.intersect = new Intersect(this);\n      this.axesTooltip = new AxesTooltip(this);\n      this.showOnIntersect = this.tConfig.intersect;\n      this.showTooltipTitle = this.tConfig.x.show;\n      this.fixedTooltip = this.tConfig.fixed.enabled;\n      this.xaxisTooltip = null;\n      this.yaxisTTEls = null;\n      this.isBarShared = !w.globals.isBarHorizontal && this.tConfig.shared;\n      this.lastHoverTime = Date.now();\n    }\n\n    _createClass(Tooltip, [{\n      key: \"getElTooltip\",\n      value: function getElTooltip(ctx) {\n        if (!ctx) ctx = this;\n        if (!ctx.w.globals.dom.baseEl) return null;\n        return ctx.w.globals.dom.baseEl.querySelector('.apexcharts-tooltip');\n      }\n    }, {\n      key: \"getElXCrosshairs\",\n      value: function getElXCrosshairs() {\n        return this.w.globals.dom.baseEl.querySelector('.apexcharts-xcrosshairs');\n      }\n    }, {\n      key: \"getElGrid\",\n      value: function getElGrid() {\n        return this.w.globals.dom.baseEl.querySelector('.apexcharts-grid');\n      }\n    }, {\n      key: \"drawTooltip\",\n      value: function drawTooltip(xyRatios) {\n        var w = this.w;\n        this.xyRatios = xyRatios;\n        this.isXAxisTooltipEnabled = w.config.xaxis.tooltip.enabled && w.globals.axisCharts;\n        this.yaxisTooltips = w.config.yaxis.map(function (y, i) {\n          return y.show && y.tooltip.enabled && w.globals.axisCharts ? true : false;\n        });\n        this.allTooltipSeriesGroups = [];\n\n        if (!w.globals.axisCharts) {\n          this.showTooltipTitle = false;\n        }\n\n        var tooltipEl = document.createElement('div');\n        tooltipEl.classList.add('apexcharts-tooltip');\n\n        if (w.config.tooltip.cssClass) {\n          tooltipEl.classList.add(w.config.tooltip.cssClass);\n        }\n\n        tooltipEl.classList.add(\"apexcharts-theme-\".concat(this.tConfig.theme));\n        w.globals.dom.elWrap.appendChild(tooltipEl);\n\n        if (w.globals.axisCharts) {\n          this.axesTooltip.drawXaxisTooltip();\n          this.axesTooltip.drawYaxisTooltip();\n          this.axesTooltip.setXCrosshairWidth();\n          this.axesTooltip.handleYCrosshair();\n          var xAxis = new XAxis(this.ctx);\n          this.xAxisTicksPositions = xAxis.getXAxisTicksPositions();\n        } // we forcefully set intersect true for these conditions\n\n\n        if ((w.globals.comboCharts || this.tConfig.intersect || w.config.chart.type === 'rangeBar') && !this.tConfig.shared) {\n          this.showOnIntersect = true;\n        }\n\n        if (w.config.markers.size === 0 || w.globals.markers.largestSize === 0) {\n          // when user don't want to show points all the time, but only on when hovering on series\n          this.marker.drawDynamicPoints(this);\n        } // no visible series, exit\n\n\n        if (w.globals.collapsedSeries.length === w.globals.series.length) return;\n        this.dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints;\n        this.dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints;\n\n        if (this.showTooltipTitle) {\n          this.tooltipTitle = document.createElement('div');\n          this.tooltipTitle.classList.add('apexcharts-tooltip-title');\n          this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily;\n          this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize;\n          tooltipEl.appendChild(this.tooltipTitle);\n        }\n\n        var ttItemsCnt = w.globals.series.length; // whether shared or not, default is shared\n\n        if ((w.globals.xyCharts || w.globals.comboCharts) && this.tConfig.shared) {\n          if (!this.showOnIntersect) {\n            ttItemsCnt = w.globals.series.length;\n          } else {\n            ttItemsCnt = 1;\n          }\n        }\n\n        this.legendLabels = w.globals.dom.baseEl.querySelectorAll('.apexcharts-legend-text');\n        this.ttItems = this.createTTElements(ttItemsCnt);\n        this.addSVGEvents();\n      }\n    }, {\n      key: \"createTTElements\",\n      value: function createTTElements(ttItemsCnt) {\n        var _this = this;\n\n        var w = this.w;\n        var ttItems = [];\n        var tooltipEl = this.getElTooltip();\n\n        var _loop = function _loop(i) {\n          var gTxt = document.createElement('div');\n          gTxt.classList.add('apexcharts-tooltip-series-group');\n          gTxt.style.order = w.config.tooltip.inverseOrder ? ttItemsCnt - i : i + 1;\n\n          if (_this.tConfig.shared && _this.tConfig.enabledOnSeries && Array.isArray(_this.tConfig.enabledOnSeries)) {\n            if (_this.tConfig.enabledOnSeries.indexOf(i) < 0) {\n              gTxt.classList.add('apexcharts-tooltip-series-group-hidden');\n            }\n          }\n\n          var point = document.createElement('span');\n          point.classList.add('apexcharts-tooltip-marker');\n          point.style.backgroundColor = w.globals.colors[i];\n          gTxt.appendChild(point);\n          var gYZ = document.createElement('div');\n          gYZ.classList.add('apexcharts-tooltip-text');\n          gYZ.style.fontFamily = _this.tConfig.style.fontFamily || w.config.chart.fontFamily;\n          gYZ.style.fontSize = _this.tConfig.style.fontSize;\n          ['y', 'goals', 'z'].forEach(function (g) {\n            var gValText = document.createElement('div');\n            gValText.classList.add(\"apexcharts-tooltip-\".concat(g, \"-group\"));\n            var txtLabel = document.createElement('span');\n            txtLabel.classList.add(\"apexcharts-tooltip-text-\".concat(g, \"-label\"));\n            gValText.appendChild(txtLabel);\n            var txtValue = document.createElement('span');\n            txtValue.classList.add(\"apexcharts-tooltip-text-\".concat(g, \"-value\"));\n            gValText.appendChild(txtValue);\n            gYZ.appendChild(gValText);\n          });\n          gTxt.appendChild(gYZ);\n          tooltipEl.appendChild(gTxt);\n          ttItems.push(gTxt);\n        };\n\n        for (var i = 0; i < ttItemsCnt; i++) {\n          _loop(i);\n        }\n\n        return ttItems;\n      }\n    }, {\n      key: \"addSVGEvents\",\n      value: function addSVGEvents() {\n        var w = this.w;\n        var type = w.config.chart.type;\n        var tooltipEl = this.getElTooltip();\n        var commonBar = !!(type === 'bar' || type === 'candlestick' || type === 'boxPlot' || type === 'rangeBar');\n        var chartWithmarkers = type === 'area' || type === 'line' || type === 'scatter' || type === 'bubble' || type === 'radar';\n        var hoverArea = w.globals.dom.Paper.node;\n        var elGrid = this.getElGrid();\n\n        if (elGrid) {\n          this.seriesBound = elGrid.getBoundingClientRect();\n        }\n\n        var tooltipY = [];\n        var tooltipX = [];\n        var seriesHoverParams = {\n          hoverArea: hoverArea,\n          elGrid: elGrid,\n          tooltipEl: tooltipEl,\n          tooltipY: tooltipY,\n          tooltipX: tooltipX,\n          ttItems: this.ttItems\n        };\n        var points;\n\n        if (w.globals.axisCharts) {\n          if (chartWithmarkers) {\n            points = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series[data\\\\:longestSeries='true'] .apexcharts-marker\");\n          } else if (commonBar) {\n            points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-boxPlot-area, .apexcharts-series .apexcharts-rangebar-area');\n          } else if (type === 'heatmap' || type === 'treemap') {\n            points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-heatmap, .apexcharts-series .apexcharts-treemap');\n          }\n\n          if (points && points.length) {\n            for (var p = 0; p < points.length; p++) {\n              tooltipY.push(points[p].getAttribute('cy'));\n              tooltipX.push(points[p].getAttribute('cx'));\n            }\n          }\n        }\n\n        var validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || commonBar && this.tooltipUtil.hasBars() && this.tConfig.shared;\n\n        if (validSharedChartTypes) {\n          this.addPathsEventListeners([hoverArea], seriesHoverParams);\n        } else if (commonBar && !w.globals.comboCharts || chartWithmarkers && this.showOnIntersect) {\n          this.addDatapointEventsListeners(seriesHoverParams);\n        } else if (!w.globals.axisCharts || type === 'heatmap' || type === 'treemap') {\n          var seriesAll = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series');\n          this.addPathsEventListeners(seriesAll, seriesHoverParams);\n        }\n\n        if (this.showOnIntersect) {\n          var lineAreaPoints = w.globals.dom.baseEl.querySelectorAll('.apexcharts-line-series .apexcharts-marker, .apexcharts-area-series .apexcharts-marker');\n\n          if (lineAreaPoints.length > 0) {\n            // if we find any lineSeries, addEventListeners for them\n            this.addPathsEventListeners(lineAreaPoints, seriesHoverParams);\n          } // combo charts may have bars, so add event listeners here too\n\n\n          if (this.tooltipUtil.hasBars() && !this.tConfig.shared) {\n            this.addDatapointEventsListeners(seriesHoverParams);\n          }\n        }\n      }\n    }, {\n      key: \"drawFixedTooltipRect\",\n      value: function drawFixedTooltipRect() {\n        var w = this.w;\n        var tooltipEl = this.getElTooltip();\n        var tooltipRect = tooltipEl.getBoundingClientRect();\n        var ttWidth = tooltipRect.width + 10;\n        var ttHeight = tooltipRect.height + 10;\n        var x = this.tConfig.fixed.offsetX;\n        var y = this.tConfig.fixed.offsetY;\n        var fixed = this.tConfig.fixed.position.toLowerCase();\n\n        if (fixed.indexOf('right') > -1) {\n          x = x + w.globals.svgWidth - ttWidth + 10;\n        }\n\n        if (fixed.indexOf('bottom') > -1) {\n          y = y + w.globals.svgHeight - ttHeight - 10;\n        }\n\n        tooltipEl.style.left = x + 'px';\n        tooltipEl.style.top = y + 'px';\n        return {\n          x: x,\n          y: y,\n          ttWidth: ttWidth,\n          ttHeight: ttHeight\n        };\n      }\n    }, {\n      key: \"addDatapointEventsListeners\",\n      value: function addDatapointEventsListeners(seriesHoverParams) {\n        var w = this.w;\n        var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area');\n        this.addPathsEventListeners(points, seriesHoverParams);\n      }\n    }, {\n      key: \"addPathsEventListeners\",\n      value: function addPathsEventListeners(paths, opts) {\n        var self = this;\n\n        var _loop2 = function _loop2(p) {\n          var extendedOpts = {\n            paths: paths[p],\n            tooltipEl: opts.tooltipEl,\n            tooltipY: opts.tooltipY,\n            tooltipX: opts.tooltipX,\n            elGrid: opts.elGrid,\n            hoverArea: opts.hoverArea,\n            ttItems: opts.ttItems\n          };\n          var events = ['mousemove', 'mouseup', 'touchmove', 'mouseout', 'touchend'];\n          events.map(function (ev) {\n            return paths[p].addEventListener(ev, self.onSeriesHover.bind(self, extendedOpts), {\n              capture: false,\n              passive: true\n            });\n          });\n        };\n\n        for (var p = 0; p < paths.length; p++) {\n          _loop2(p);\n        }\n      }\n      /*\n       ** Check to see if the tooltips should be updated based on a mouse / touch event\n       */\n\n    }, {\n      key: \"onSeriesHover\",\n      value: function onSeriesHover(opt, e) {\n        var _this2 = this;\n\n        // If a user is moving their mouse quickly, don't bother updating the tooltip every single frame\n        var targetDelay = 100;\n        var timeSinceLastUpdate = Date.now() - this.lastHoverTime;\n\n        if (timeSinceLastUpdate >= targetDelay) {\n          // The tooltip was last updated over 100ms ago - redraw it even if the user is still moving their\n          // mouse so they get some feedback that their moves are being registered\n          this.seriesHover(opt, e);\n        } else {\n          // The tooltip was last updated less than 100ms ago\n          // Cancel any other delayed draw, so we don't show stale data\n          clearTimeout(this.seriesHoverTimeout); // Schedule the next draw so that it happens about 100ms after the last update\n\n          this.seriesHoverTimeout = setTimeout(function () {\n            _this2.seriesHover(opt, e);\n          }, targetDelay - timeSinceLastUpdate);\n        }\n      }\n      /*\n       ** The actual series hover function\n       */\n\n    }, {\n      key: \"seriesHover\",\n      value: function seriesHover(opt, e) {\n        var _this3 = this;\n\n        this.lastHoverTime = Date.now();\n        var chartGroups = [];\n        var w = this.w; // if user has more than one charts in group, we need to sync\n\n        if (w.config.chart.group) {\n          chartGroups = this.ctx.getGroupedCharts();\n        }\n\n        if (w.globals.axisCharts && (w.globals.minX === -Infinity && w.globals.maxX === Infinity || w.globals.dataPoints === 0)) {\n          return;\n        }\n\n        if (chartGroups.length) {\n          chartGroups.forEach(function (ch) {\n            var tooltipEl = _this3.getElTooltip(ch);\n\n            var newOpts = {\n              paths: opt.paths,\n              tooltipEl: tooltipEl,\n              tooltipY: opt.tooltipY,\n              tooltipX: opt.tooltipX,\n              elGrid: opt.elGrid,\n              hoverArea: opt.hoverArea,\n              ttItems: ch.w.globals.tooltip.ttItems\n            }; // all the charts should have the same minX and maxX (same xaxis) for multiple tooltips to work correctly\n\n            if (ch.w.globals.minX === _this3.w.globals.minX && ch.w.globals.maxX === _this3.w.globals.maxX) {\n              ch.w.globals.tooltip.seriesHoverByContext({\n                chartCtx: ch,\n                ttCtx: ch.w.globals.tooltip,\n                opt: newOpts,\n                e: e\n              });\n            }\n          });\n        } else {\n          this.seriesHoverByContext({\n            chartCtx: this.ctx,\n            ttCtx: this.w.globals.tooltip,\n            opt: opt,\n            e: e\n          });\n        }\n      }\n    }, {\n      key: \"seriesHoverByContext\",\n      value: function seriesHoverByContext(_ref) {\n        var chartCtx = _ref.chartCtx,\n            ttCtx = _ref.ttCtx,\n            opt = _ref.opt,\n            e = _ref.e;\n        var w = chartCtx.w;\n        var tooltipEl = this.getElTooltip();\n        if (!tooltipEl) return; // tooltipRect is calculated on every mousemove, because the text is dynamic\n\n        ttCtx.tooltipRect = {\n          x: 0,\n          y: 0,\n          ttWidth: tooltipEl.getBoundingClientRect().width,\n          ttHeight: tooltipEl.getBoundingClientRect().height\n        };\n        ttCtx.e = e; // highlight the current hovered bars\n\n        if (ttCtx.tooltipUtil.hasBars() && !w.globals.comboCharts && !ttCtx.isBarShared) {\n          if (this.tConfig.onDatasetHover.highlightDataSeries) {\n            var series = new Series(chartCtx);\n            series.toggleSeriesOnHover(e, e.target.parentNode);\n          }\n        }\n\n        if (ttCtx.fixedTooltip) {\n          ttCtx.drawFixedTooltipRect();\n        }\n\n        if (w.globals.axisCharts) {\n          ttCtx.axisChartsTooltips({\n            e: e,\n            opt: opt,\n            tooltipRect: ttCtx.tooltipRect\n          });\n        } else {\n          // non-plot charts i.e pie/donut/circle\n          ttCtx.nonAxisChartsTooltips({\n            e: e,\n            opt: opt,\n            tooltipRect: ttCtx.tooltipRect\n          });\n        }\n      } // tooltip handling for line/area/bar/columns/scatter\n\n    }, {\n      key: \"axisChartsTooltips\",\n      value: function axisChartsTooltips(_ref2) {\n        var e = _ref2.e,\n            opt = _ref2.opt;\n        var w = this.w;\n        var x, y;\n        var seriesBound = opt.elGrid.getBoundingClientRect();\n        var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX;\n        var clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY;\n        this.clientY = clientY;\n        this.clientX = clientX;\n        w.globals.capturedSeriesIndex = -1;\n        w.globals.capturedDataPointIndex = -1;\n\n        if (clientY < seriesBound.top || clientY > seriesBound.top + seriesBound.height) {\n          this.handleMouseOut(opt);\n          return;\n        }\n\n        if (Array.isArray(this.tConfig.enabledOnSeries) && !w.config.tooltip.shared) {\n          var index = parseInt(opt.paths.getAttribute('index'), 10);\n\n          if (this.tConfig.enabledOnSeries.indexOf(index) < 0) {\n            this.handleMouseOut(opt);\n            return;\n          }\n        }\n\n        var tooltipEl = this.getElTooltip();\n        var xcrosshairs = this.getElXCrosshairs();\n        var isStickyTooltip = w.globals.xyCharts || w.config.chart.type === 'bar' && !w.globals.isBarHorizontal && this.tooltipUtil.hasBars() && this.tConfig.shared || w.globals.comboCharts && this.tooltipUtil.hasBars();\n\n        if (e.type === 'mousemove' || e.type === 'touchmove' || e.type === 'mouseup') {\n          // there is no series to hover over\n          if (w.globals.collapsedSeries.length + w.globals.ancillaryCollapsedSeries.length === w.globals.series.length) {\n            return;\n          }\n\n          if (xcrosshairs !== null) {\n            xcrosshairs.classList.add('apexcharts-active');\n          }\n\n          var hasYAxisTooltip = this.yaxisTooltips.filter(function (b) {\n            return b === true;\n          });\n\n          if (this.ycrosshairs !== null && hasYAxisTooltip.length) {\n            this.ycrosshairs.classList.add('apexcharts-active');\n          }\n\n          if (isStickyTooltip && !this.showOnIntersect) {\n            this.handleStickyTooltip(e, clientX, clientY, opt);\n          } else {\n            if (w.config.chart.type === 'heatmap' || w.config.chart.type === 'treemap') {\n              var markerXY = this.intersect.handleHeatTreeTooltip({\n                e: e,\n                opt: opt,\n                x: x,\n                y: y,\n                type: w.config.chart.type\n              });\n              x = markerXY.x;\n              y = markerXY.y;\n              tooltipEl.style.left = x + 'px';\n              tooltipEl.style.top = y + 'px';\n            } else {\n              if (this.tooltipUtil.hasBars()) {\n                this.intersect.handleBarTooltip({\n                  e: e,\n                  opt: opt\n                });\n              }\n\n              if (this.tooltipUtil.hasMarkers()) {\n                // intersect - line/area/scatter/bubble\n                this.intersect.handleMarkerTooltip({\n                  e: e,\n                  opt: opt,\n                  x: x,\n                  y: y\n                });\n              }\n            }\n          }\n\n          if (this.yaxisTooltips.length) {\n            for (var yt = 0; yt < w.config.yaxis.length; yt++) {\n              this.axesTooltip.drawYaxisTooltipText(yt, clientY, this.xyRatios);\n            }\n          }\n\n          opt.tooltipEl.classList.add('apexcharts-active');\n        } else if (e.type === 'mouseout' || e.type === 'touchend') {\n          this.handleMouseOut(opt);\n        }\n      } // tooltip handling for pie/donuts\n\n    }, {\n      key: \"nonAxisChartsTooltips\",\n      value: function nonAxisChartsTooltips(_ref3) {\n        var e = _ref3.e,\n            opt = _ref3.opt,\n            tooltipRect = _ref3.tooltipRect;\n        var w = this.w;\n        var rel = opt.paths.getAttribute('rel');\n        var tooltipEl = this.getElTooltip();\n        var seriesBound = w.globals.dom.elWrap.getBoundingClientRect();\n\n        if (e.type === 'mousemove' || e.type === 'touchmove') {\n          tooltipEl.classList.add('apexcharts-active');\n          this.tooltipLabels.drawSeriesTexts({\n            ttItems: opt.ttItems,\n            i: parseInt(rel, 10) - 1,\n            shared: false\n          });\n          var x = w.globals.clientX - seriesBound.left - tooltipRect.ttWidth / 2;\n          var y = w.globals.clientY - seriesBound.top - tooltipRect.ttHeight - 10;\n          tooltipEl.style.left = x + 'px';\n          tooltipEl.style.top = y + 'px';\n\n          if (w.config.legend.tooltipHoverFormatter) {\n            var legendFormatter = w.config.legend.tooltipHoverFormatter;\n            var i = rel - 1;\n            var legendName = this.legendLabels[i].getAttribute('data:default-text');\n            var text = legendFormatter(legendName, {\n              seriesIndex: i,\n              dataPointIndex: i,\n              w: w\n            });\n            this.legendLabels[i].innerHTML = text;\n          }\n        } else if (e.type === 'mouseout' || e.type === 'touchend') {\n          tooltipEl.classList.remove('apexcharts-active');\n\n          if (w.config.legend.tooltipHoverFormatter) {\n            this.legendLabels.forEach(function (l) {\n              var defaultText = l.getAttribute('data:default-text');\n              l.innerHTML = decodeURIComponent(defaultText);\n            });\n          }\n        }\n      }\n    }, {\n      key: \"handleStickyTooltip\",\n      value: function handleStickyTooltip(e, clientX, clientY, opt) {\n        var w = this.w;\n        var capj = this.tooltipUtil.getNearestValues({\n          context: this,\n          hoverArea: opt.hoverArea,\n          elGrid: opt.elGrid,\n          clientX: clientX,\n          clientY: clientY\n        });\n        var j = capj.j;\n        var capturedSeries = capj.capturedSeries;\n        if (w.globals.collapsedSeriesIndices.includes(capturedSeries)) capturedSeries = null;\n        var bounds = opt.elGrid.getBoundingClientRect();\n\n        if (capj.hoverX < 0 || capj.hoverX > bounds.width) {\n          this.handleMouseOut(opt);\n          return;\n        }\n\n        if (capturedSeries !== null) {\n          this.handleStickyCapturedSeries(e, capturedSeries, opt, j);\n        } else {\n          // couldn't capture any series. check if shared X is same,\n          // if yes, draw a grouped tooltip\n          if (this.tooltipUtil.isXoverlap(j) || w.globals.isBarHorizontal) {\n            var firstVisibleSeries = w.globals.series.findIndex(function (s, i) {\n              return !w.globals.collapsedSeriesIndices.includes(i);\n            });\n            this.create(e, this, firstVisibleSeries, j, opt.ttItems);\n          }\n        }\n      }\n    }, {\n      key: \"handleStickyCapturedSeries\",\n      value: function handleStickyCapturedSeries(e, capturedSeries, opt, j) {\n        var w = this.w;\n\n        if (!this.tConfig.shared) {\n          var ignoreNull = w.globals.series[capturedSeries][j] === null;\n\n          if (ignoreNull) {\n            this.handleMouseOut(opt);\n            return;\n          }\n        }\n\n        if (typeof w.globals.series[capturedSeries][j] !== 'undefined') {\n          if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isInitialSeriesSameLen()) {\n            this.create(e, this, capturedSeries, j, opt.ttItems);\n          } else {\n            this.create(e, this, capturedSeries, j, opt.ttItems, false);\n          }\n        } else {\n          if (this.tooltipUtil.isXoverlap(j)) {\n            var firstVisibleSeries = w.globals.series.findIndex(function (s, i) {\n              return !w.globals.collapsedSeriesIndices.includes(i);\n            });\n            this.create(e, this, firstVisibleSeries, j, opt.ttItems);\n          }\n        }\n      }\n    }, {\n      key: \"deactivateHoverFilter\",\n      value: function deactivateHoverFilter() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var allPaths = w.globals.dom.Paper.select(\".apexcharts-bar-area\");\n\n        for (var b = 0; b < allPaths.length; b++) {\n          graphics.pathMouseLeave(allPaths[b]);\n        }\n      }\n    }, {\n      key: \"handleMouseOut\",\n      value: function handleMouseOut(opt) {\n        var w = this.w;\n        var xcrosshairs = this.getElXCrosshairs();\n        opt.tooltipEl.classList.remove('apexcharts-active');\n        this.deactivateHoverFilter();\n\n        if (w.config.chart.type !== 'bubble') {\n          this.marker.resetPointsSize();\n        }\n\n        if (xcrosshairs !== null) {\n          xcrosshairs.classList.remove('apexcharts-active');\n        }\n\n        if (this.ycrosshairs !== null) {\n          this.ycrosshairs.classList.remove('apexcharts-active');\n        }\n\n        if (this.isXAxisTooltipEnabled) {\n          this.xaxisTooltip.classList.remove('apexcharts-active');\n        }\n\n        if (this.yaxisTooltips.length) {\n          if (this.yaxisTTEls === null) {\n            this.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip');\n          }\n\n          for (var i = 0; i < this.yaxisTTEls.length; i++) {\n            this.yaxisTTEls[i].classList.remove('apexcharts-active');\n          }\n        }\n\n        if (w.config.legend.tooltipHoverFormatter) {\n          this.legendLabels.forEach(function (l) {\n            var defaultText = l.getAttribute('data:default-text');\n            l.innerHTML = decodeURIComponent(defaultText);\n          });\n        }\n      }\n    }, {\n      key: \"markerClick\",\n      value: function markerClick(e, seriesIndex, dataPointIndex) {\n        var w = this.w;\n\n        if (typeof w.config.chart.events.markerClick === 'function') {\n          w.config.chart.events.markerClick(e, this.ctx, {\n            seriesIndex: seriesIndex,\n            dataPointIndex: dataPointIndex,\n            w: w\n          });\n        }\n\n        this.ctx.events.fireEvent('markerClick', [e, this.ctx, {\n          seriesIndex: seriesIndex,\n          dataPointIndex: dataPointIndex,\n          w: w\n        }]);\n      }\n    }, {\n      key: \"create\",\n      value: function create(e, context, capturedSeries, j, ttItems) {\n        var _w$globals$seriesRang, _w$globals$seriesRang2, _w$globals$seriesRang3, _w$globals$seriesRang4, _w$globals$seriesRang5, _w$globals$seriesRang6, _w$globals$seriesRang7, _w$globals$seriesRang8, _w$globals$seriesRang9, _w$globals$seriesRang10, _w$globals$seriesRang11, _w$globals$seriesRang12, _w$globals$seriesRang13, _w$globals$seriesRang14, _w$globals$seriesRang15, _w$globals$seriesRang16;\n\n        var shared = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n        var w = this.w;\n        var ttCtx = context;\n\n        if (e.type === 'mouseup') {\n          this.markerClick(e, capturedSeries, j);\n        }\n\n        if (shared === null) shared = this.tConfig.shared;\n        var hasMarkers = this.tooltipUtil.hasMarkers(capturedSeries);\n        var bars = this.tooltipUtil.getElBars();\n\n        if (w.config.legend.tooltipHoverFormatter) {\n          var legendFormatter = w.config.legend.tooltipHoverFormatter;\n          var els = Array.from(this.legendLabels); // reset all legend values first\n\n          els.forEach(function (l) {\n            var legendName = l.getAttribute('data:default-text');\n            l.innerHTML = decodeURIComponent(legendName);\n          }); // for irregular time series\n\n          for (var i = 0; i < els.length; i++) {\n            var l = els[i];\n            var lsIndex = parseInt(l.getAttribute('i'), 10);\n            var legendName = decodeURIComponent(l.getAttribute('data:default-text'));\n            var text = legendFormatter(legendName, {\n              seriesIndex: shared ? lsIndex : capturedSeries,\n              dataPointIndex: j,\n              w: w\n            });\n\n            if (!shared) {\n              l.innerHTML = lsIndex === capturedSeries ? text : legendName;\n\n              if (capturedSeries === lsIndex) {\n                break;\n              }\n            } else {\n              l.innerHTML = w.globals.collapsedSeriesIndices.indexOf(lsIndex) < 0 ? text : legendName;\n            }\n          }\n        }\n\n        var commonSeriesTextsParams = _objectSpread2(_objectSpread2({\n          ttItems: ttItems,\n          i: capturedSeries,\n          j: j\n        }, typeof ((_w$globals$seriesRang = w.globals.seriesRange) === null || _w$globals$seriesRang === void 0 ? void 0 : (_w$globals$seriesRang2 = _w$globals$seriesRang[capturedSeries]) === null || _w$globals$seriesRang2 === void 0 ? void 0 : (_w$globals$seriesRang3 = _w$globals$seriesRang2[j]) === null || _w$globals$seriesRang3 === void 0 ? void 0 : (_w$globals$seriesRang4 = _w$globals$seriesRang3.y[0]) === null || _w$globals$seriesRang4 === void 0 ? void 0 : _w$globals$seriesRang4.y1) !== 'undefined' && {\n          y1: (_w$globals$seriesRang5 = w.globals.seriesRange) === null || _w$globals$seriesRang5 === void 0 ? void 0 : (_w$globals$seriesRang6 = _w$globals$seriesRang5[capturedSeries]) === null || _w$globals$seriesRang6 === void 0 ? void 0 : (_w$globals$seriesRang7 = _w$globals$seriesRang6[j]) === null || _w$globals$seriesRang7 === void 0 ? void 0 : (_w$globals$seriesRang8 = _w$globals$seriesRang7.y[0]) === null || _w$globals$seriesRang8 === void 0 ? void 0 : _w$globals$seriesRang8.y1\n        }), typeof ((_w$globals$seriesRang9 = w.globals.seriesRange) === null || _w$globals$seriesRang9 === void 0 ? void 0 : (_w$globals$seriesRang10 = _w$globals$seriesRang9[capturedSeries]) === null || _w$globals$seriesRang10 === void 0 ? void 0 : (_w$globals$seriesRang11 = _w$globals$seriesRang10[j]) === null || _w$globals$seriesRang11 === void 0 ? void 0 : (_w$globals$seriesRang12 = _w$globals$seriesRang11.y[0]) === null || _w$globals$seriesRang12 === void 0 ? void 0 : _w$globals$seriesRang12.y2) !== 'undefined' && {\n          y2: (_w$globals$seriesRang13 = w.globals.seriesRange) === null || _w$globals$seriesRang13 === void 0 ? void 0 : (_w$globals$seriesRang14 = _w$globals$seriesRang13[capturedSeries]) === null || _w$globals$seriesRang14 === void 0 ? void 0 : (_w$globals$seriesRang15 = _w$globals$seriesRang14[j]) === null || _w$globals$seriesRang15 === void 0 ? void 0 : (_w$globals$seriesRang16 = _w$globals$seriesRang15.y[0]) === null || _w$globals$seriesRang16 === void 0 ? void 0 : _w$globals$seriesRang16.y2\n        });\n\n        if (shared) {\n          ttCtx.tooltipLabels.drawSeriesTexts(_objectSpread2(_objectSpread2({}, commonSeriesTextsParams), {}, {\n            shared: this.showOnIntersect ? false : this.tConfig.shared\n          }));\n\n          if (hasMarkers) {\n            if (w.globals.markers.largestSize > 0) {\n              ttCtx.marker.enlargePoints(j);\n            } else {\n              ttCtx.tooltipPosition.moveDynamicPointsOnHover(j);\n            }\n          } else if (this.tooltipUtil.hasBars()) {\n            this.barSeriesHeight = this.tooltipUtil.getBarsHeight(bars);\n\n            if (this.barSeriesHeight > 0) {\n              // hover state, activate snap filter\n              var graphics = new Graphics(this.ctx);\n              var paths = w.globals.dom.Paper.select(\".apexcharts-bar-area[j='\".concat(j, \"']\")); // de-activate first\n\n              this.deactivateHoverFilter();\n              this.tooltipPosition.moveStickyTooltipOverBars(j, capturedSeries);\n\n              for (var b = 0; b < paths.length; b++) {\n                graphics.pathMouseEnter(paths[b]);\n              }\n            }\n          }\n        } else {\n          ttCtx.tooltipLabels.drawSeriesTexts(_objectSpread2({\n            shared: false\n          }, commonSeriesTextsParams));\n\n          if (this.tooltipUtil.hasBars()) {\n            ttCtx.tooltipPosition.moveStickyTooltipOverBars(j, capturedSeries);\n          }\n\n          if (hasMarkers) {\n            ttCtx.tooltipPosition.moveMarkers(capturedSeries, j);\n          }\n        }\n      }\n    }]);\n\n    return Tooltip;\n  }();\n\n  var BarDataLabels = /*#__PURE__*/function () {\n    function BarDataLabels(barCtx) {\n      _classCallCheck(this, BarDataLabels);\n\n      this.w = barCtx.w;\n      this.barCtx = barCtx;\n      this.totalFormatter = this.w.config.plotOptions.bar.dataLabels.total.formatter;\n\n      if (!this.totalFormatter) {\n        this.totalFormatter = this.w.config.dataLabels.formatter;\n      }\n    }\n    /** handleBarDataLabels is used to calculate the positions for the data-labels\n     * It also sets the element's data attr for bars and calls drawCalculatedBarDataLabels()\n     * After calculating, it also calls the function to draw data labels\n     * @memberof Bar\n     * @param {object} {barProps} most of the bar properties used throughout the bar\n     * drawing function\n     * @return {object} dataLabels node-element which you can append later\n     **/\n\n\n    _createClass(BarDataLabels, [{\n      key: \"handleBarDataLabels\",\n      value: function handleBarDataLabels(opts) {\n        var x = opts.x,\n            y = opts.y,\n            y1 = opts.y1,\n            y2 = opts.y2,\n            i = opts.i,\n            j = opts.j,\n            realIndex = opts.realIndex,\n            groupIndex = opts.groupIndex,\n            series = opts.series,\n            barHeight = opts.barHeight,\n            barWidth = opts.barWidth,\n            barXPosition = opts.barXPosition,\n            barYPosition = opts.barYPosition,\n            visibleSeries = opts.visibleSeries,\n            renderedPath = opts.renderedPath;\n        var w = this.w;\n        var graphics = new Graphics(this.barCtx.ctx);\n        var strokeWidth = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[realIndex] : this.barCtx.strokeWidth;\n        var bcx = x + parseFloat(barWidth * visibleSeries);\n        var bcy = y + parseFloat(barHeight * visibleSeries);\n\n        if (w.globals.isXNumeric && !w.globals.isBarHorizontal) {\n          bcx = x + parseFloat(barWidth * (visibleSeries + 1));\n          bcy = y + parseFloat(barHeight * (visibleSeries + 1)) - strokeWidth;\n        }\n\n        var dataLabels = null;\n        var totalDataLabels = null;\n        var dataLabelsX = x;\n        var dataLabelsY = y;\n        var dataLabelsPos = {};\n        var dataLabelsConfig = w.config.dataLabels;\n        var barDataLabelsConfig = this.barCtx.barOptions.dataLabels;\n        var barTotalDataLabelsConfig = this.barCtx.barOptions.dataLabels.total;\n\n        if (typeof barYPosition !== 'undefined' && this.barCtx.isRangeBar) {\n          bcy = barYPosition;\n          dataLabelsY = barYPosition;\n        }\n\n        if (typeof barXPosition !== 'undefined' && this.barCtx.isVerticalGroupedRangeBar) {\n          bcx = barXPosition;\n          dataLabelsX = barXPosition;\n        }\n\n        var offX = dataLabelsConfig.offsetX;\n        var offY = dataLabelsConfig.offsetY;\n        var textRects = {\n          width: 0,\n          height: 0\n        };\n\n        if (w.config.dataLabels.enabled) {\n          var yLabel = this.barCtx.series[i][j];\n          textRects = graphics.getTextRects(w.globals.yLabelFormatters[0](yLabel), parseFloat(dataLabelsConfig.style.fontSize));\n        }\n\n        var params = {\n          x: x,\n          y: y,\n          i: i,\n          j: j,\n          realIndex: realIndex,\n          groupIndex: !!groupIndex ? groupIndex : -1,\n          renderedPath: renderedPath,\n          bcx: bcx,\n          bcy: bcy,\n          barHeight: barHeight,\n          barWidth: barWidth,\n          textRects: textRects,\n          strokeWidth: strokeWidth,\n          dataLabelsX: dataLabelsX,\n          dataLabelsY: dataLabelsY,\n          dataLabelsConfig: dataLabelsConfig,\n          barDataLabelsConfig: barDataLabelsConfig,\n          barTotalDataLabelsConfig: barTotalDataLabelsConfig,\n          offX: offX,\n          offY: offY\n        };\n\n        if (this.barCtx.isHorizontal) {\n          dataLabelsPos = this.calculateBarsDataLabelsPosition(params);\n        } else {\n          dataLabelsPos = this.calculateColumnsDataLabelsPosition(params);\n        }\n\n        renderedPath.attr({\n          cy: dataLabelsPos.bcy,\n          cx: dataLabelsPos.bcx,\n          j: j,\n          val: series[i][j],\n          barHeight: barHeight,\n          barWidth: barWidth\n        });\n        dataLabels = this.drawCalculatedDataLabels({\n          x: dataLabelsPos.dataLabelsX,\n          y: dataLabelsPos.dataLabelsY,\n          val: this.barCtx.isRangeBar ? [y1, y2] : series[i][j],\n          i: realIndex,\n          j: j,\n          barWidth: barWidth,\n          barHeight: barHeight,\n          textRects: textRects,\n          dataLabelsConfig: dataLabelsConfig\n        });\n\n        if (w.config.chart.stacked && barTotalDataLabelsConfig.enabled) {\n          totalDataLabels = this.drawTotalDataLabels({\n            x: dataLabelsPos.totalDataLabelsX,\n            y: dataLabelsPos.totalDataLabelsY,\n            realIndex: realIndex,\n            textAnchor: dataLabelsPos.totalDataLabelsAnchor,\n            val: this.getStackedTotalDataLabel({\n              realIndex: realIndex,\n              j: j\n            }),\n            dataLabelsConfig: dataLabelsConfig,\n            barTotalDataLabelsConfig: barTotalDataLabelsConfig\n          });\n        }\n\n        return {\n          dataLabels: dataLabels,\n          totalDataLabels: totalDataLabels\n        };\n      }\n    }, {\n      key: \"getStackedTotalDataLabel\",\n      value: function getStackedTotalDataLabel(_ref) {\n        var realIndex = _ref.realIndex,\n            j = _ref.j;\n        var w = this.w;\n        var val = this.barCtx.stackedSeriesTotals[j];\n\n        if (this.totalFormatter) {\n          val = this.totalFormatter(val, _objectSpread2(_objectSpread2({}, w), {}, {\n            seriesIndex: realIndex,\n            dataPointIndex: j,\n            w: w\n          }));\n        }\n\n        return val;\n      }\n    }, {\n      key: \"calculateColumnsDataLabelsPosition\",\n      value: function calculateColumnsDataLabelsPosition(opts) {\n        var w = this.w;\n        var i = opts.i,\n            j = opts.j,\n            realIndex = opts.realIndex,\n            groupIndex = opts.groupIndex,\n            y = opts.y,\n            bcx = opts.bcx,\n            barWidth = opts.barWidth,\n            barHeight = opts.barHeight,\n            textRects = opts.textRects,\n            dataLabelsX = opts.dataLabelsX,\n            dataLabelsY = opts.dataLabelsY,\n            dataLabelsConfig = opts.dataLabelsConfig,\n            barDataLabelsConfig = opts.barDataLabelsConfig,\n            barTotalDataLabelsConfig = opts.barTotalDataLabelsConfig,\n            strokeWidth = opts.strokeWidth,\n            offX = opts.offX,\n            offY = opts.offY;\n        var totalDataLabelsY;\n        var totalDataLabelsX;\n        var totalDataLabelsAnchor = 'middle';\n        barHeight = Math.abs(barHeight);\n        var vertical = w.config.plotOptions.bar.dataLabels.orientation === 'vertical';\n        bcx = bcx - strokeWidth / 2 + (groupIndex !== -1 ? groupIndex * barWidth : 0);\n        var dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints;\n\n        if (this.barCtx.isVerticalGroupedRangeBar) {\n          dataLabelsX = dataLabelsX + barWidth / 2;\n        } else {\n          if (w.globals.isXNumeric) {\n            dataLabelsX = bcx - barWidth / 2 + offX;\n          } else {\n            dataLabelsX = bcx - dataPointsDividedWidth + barWidth / 2 + offX;\n          }\n        }\n\n        if (vertical) {\n          var offsetDLX = 2;\n          dataLabelsX = dataLabelsX + textRects.height / 2 - strokeWidth / 2 - offsetDLX;\n        }\n\n        var valIsNegative = this.barCtx.series[i][j] < 0;\n        var newY = y;\n\n        if (this.barCtx.isReversed) {\n          newY = y - barHeight + (valIsNegative ? barHeight * 2 : 0);\n          y = y - barHeight;\n        }\n\n        switch (barDataLabelsConfig.position) {\n          case 'center':\n            if (vertical) {\n              if (valIsNegative) {\n                dataLabelsY = newY + barHeight / 2 + offY;\n              } else {\n                dataLabelsY = newY + barHeight / 2 - offY;\n              }\n            } else {\n              if (valIsNegative) {\n                dataLabelsY = newY - barHeight / 2 + textRects.height / 2 + offY;\n              } else {\n                dataLabelsY = newY + barHeight / 2 + textRects.height / 2 - offY;\n              }\n            }\n\n            break;\n\n          case 'bottom':\n            if (vertical) {\n              if (valIsNegative) {\n                dataLabelsY = newY + barHeight + offY;\n              } else {\n                dataLabelsY = newY + barHeight - offY;\n              }\n            } else {\n              if (valIsNegative) {\n                dataLabelsY = newY - barHeight + textRects.height + strokeWidth + offY;\n              } else {\n                dataLabelsY = newY + barHeight - textRects.height / 2 + strokeWidth - offY;\n              }\n            }\n\n            break;\n\n          case 'top':\n            if (vertical) {\n              if (valIsNegative) {\n                dataLabelsY = newY + offY;\n              } else {\n                dataLabelsY = newY - offY;\n              }\n            } else {\n              if (valIsNegative) {\n                dataLabelsY = newY - textRects.height / 2 - offY;\n              } else {\n                dataLabelsY = newY + textRects.height + offY;\n              }\n            }\n\n            break;\n        }\n\n        if (this.barCtx.lastActiveBarSerieIndex === realIndex && barTotalDataLabelsConfig.enabled) {\n          var ADDITIONAL_OFFX = 18;\n          var graphics = new Graphics(this.barCtx.ctx);\n          var totalLabeltextRects = graphics.getTextRects(this.getStackedTotalDataLabel({\n            realIndex: realIndex,\n            j: j\n          }), dataLabelsConfig.fontSize);\n\n          if (valIsNegative) {\n            totalDataLabelsY = newY - totalLabeltextRects.height / 2 - offY - barTotalDataLabelsConfig.offsetY + ADDITIONAL_OFFX;\n          } else {\n            totalDataLabelsY = newY + totalLabeltextRects.height + offY + barTotalDataLabelsConfig.offsetY - ADDITIONAL_OFFX;\n          }\n\n          totalDataLabelsX = dataLabelsX + barTotalDataLabelsConfig.offsetX;\n        }\n\n        if (!w.config.chart.stacked) {\n          if (dataLabelsY < 0) {\n            dataLabelsY = 0 + strokeWidth;\n          } else if (dataLabelsY + textRects.height / 3 > w.globals.gridHeight) {\n            dataLabelsY = w.globals.gridHeight - strokeWidth;\n          }\n        }\n\n        return {\n          bcx: bcx,\n          bcy: y,\n          dataLabelsX: dataLabelsX,\n          dataLabelsY: dataLabelsY,\n          totalDataLabelsX: totalDataLabelsX,\n          totalDataLabelsY: totalDataLabelsY,\n          totalDataLabelsAnchor: totalDataLabelsAnchor\n        };\n      }\n    }, {\n      key: \"calculateBarsDataLabelsPosition\",\n      value: function calculateBarsDataLabelsPosition(opts) {\n        var w = this.w;\n        var x = opts.x,\n            i = opts.i,\n            j = opts.j,\n            realIndex = opts.realIndex,\n            groupIndex = opts.groupIndex,\n            bcy = opts.bcy,\n            barHeight = opts.barHeight,\n            barWidth = opts.barWidth,\n            textRects = opts.textRects,\n            dataLabelsX = opts.dataLabelsX,\n            strokeWidth = opts.strokeWidth,\n            dataLabelsConfig = opts.dataLabelsConfig,\n            barDataLabelsConfig = opts.barDataLabelsConfig,\n            barTotalDataLabelsConfig = opts.barTotalDataLabelsConfig,\n            offX = opts.offX,\n            offY = opts.offY;\n        var dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints;\n        barWidth = Math.abs(barWidth);\n        bcy = bcy + (groupIndex !== -1 ? groupIndex * barHeight : 0);\n        var dataLabelsY = bcy - (this.barCtx.isRangeBar ? 0 : dataPointsDividedHeight) + barHeight / 2 + textRects.height / 2 + offY - 3;\n        var totalDataLabelsX;\n        var totalDataLabelsY;\n        var totalDataLabelsAnchor = 'start';\n        var valIsNegative = this.barCtx.series[i][j] < 0;\n        var newX = x;\n\n        if (this.barCtx.isReversed) {\n          newX = x + barWidth - (valIsNegative ? barWidth * 2 : 0);\n          x = w.globals.gridWidth - barWidth;\n        }\n\n        switch (barDataLabelsConfig.position) {\n          case 'center':\n            if (valIsNegative) {\n              dataLabelsX = newX + barWidth / 2 - offX;\n            } else {\n              dataLabelsX = Math.max(textRects.width / 2, newX - barWidth / 2) + offX;\n            }\n\n            break;\n\n          case 'bottom':\n            if (valIsNegative) {\n              dataLabelsX = newX + barWidth - strokeWidth - Math.round(textRects.width / 2) - offX;\n            } else {\n              dataLabelsX = newX - barWidth + strokeWidth + Math.round(textRects.width / 2) + offX;\n            }\n\n            break;\n\n          case 'top':\n            if (valIsNegative) {\n              dataLabelsX = newX - strokeWidth + Math.round(textRects.width / 2) - offX;\n            } else {\n              dataLabelsX = newX - strokeWidth - Math.round(textRects.width / 2) + offX;\n            }\n\n            break;\n        }\n\n        if (this.barCtx.lastActiveBarSerieIndex === realIndex && barTotalDataLabelsConfig.enabled) {\n          var ADDITIONAL_OFFX = 15;\n          var graphics = new Graphics(this.barCtx.ctx);\n          var totalLabeltextRects = graphics.getTextRects(this.getStackedTotalDataLabel({\n            realIndex: realIndex,\n            j: j\n          }), dataLabelsConfig.fontSize);\n\n          if (valIsNegative) {\n            totalDataLabelsX = newX - strokeWidth + Math.round(totalLabeltextRects.width / 2) - offX - barTotalDataLabelsConfig.offsetX - ADDITIONAL_OFFX;\n            totalDataLabelsAnchor = 'end';\n          } else {\n            totalDataLabelsX = newX - strokeWidth - Math.round(totalLabeltextRects.width / 2) + offX + barTotalDataLabelsConfig.offsetX + ADDITIONAL_OFFX;\n          }\n\n          totalDataLabelsY = dataLabelsY + barTotalDataLabelsConfig.offsetY;\n        }\n\n        if (!w.config.chart.stacked) {\n          if (dataLabelsX < 0) {\n            dataLabelsX = dataLabelsX + textRects.width + strokeWidth;\n          } else if (dataLabelsX + textRects.width / 2 > w.globals.gridWidth) {\n            dataLabelsX = w.globals.gridWidth - textRects.width - strokeWidth;\n          }\n        }\n\n        return {\n          bcx: x,\n          bcy: bcy,\n          dataLabelsX: dataLabelsX,\n          dataLabelsY: dataLabelsY,\n          totalDataLabelsX: totalDataLabelsX,\n          totalDataLabelsY: totalDataLabelsY,\n          totalDataLabelsAnchor: totalDataLabelsAnchor\n        };\n      }\n    }, {\n      key: \"drawCalculatedDataLabels\",\n      value: function drawCalculatedDataLabels(_ref2) {\n        var x = _ref2.x,\n            y = _ref2.y,\n            val = _ref2.val,\n            i = _ref2.i,\n            j = _ref2.j,\n            textRects = _ref2.textRects,\n            barHeight = _ref2.barHeight,\n            barWidth = _ref2.barWidth,\n            dataLabelsConfig = _ref2.dataLabelsConfig;\n        var w = this.w;\n        var rotate = 'rotate(0)';\n        if (w.config.plotOptions.bar.dataLabels.orientation === 'vertical') rotate = \"rotate(-90, \".concat(x, \", \").concat(y, \")\");\n        var dataLabels = new DataLabels(this.barCtx.ctx);\n        var graphics = new Graphics(this.barCtx.ctx);\n        var formatter = dataLabelsConfig.formatter;\n        var elDataLabelsWrap = null;\n        var isSeriesNotCollapsed = w.globals.collapsedSeriesIndices.indexOf(i) > -1;\n\n        if (dataLabelsConfig.enabled && !isSeriesNotCollapsed) {\n          elDataLabelsWrap = graphics.group({\n            class: 'apexcharts-data-labels',\n            transform: rotate\n          });\n          var text = '';\n\n          if (typeof val !== 'undefined') {\n            text = formatter(val, _objectSpread2(_objectSpread2({}, w), {}, {\n              seriesIndex: i,\n              dataPointIndex: j,\n              w: w\n            }));\n          }\n\n          if (!val && w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n            text = '';\n          }\n\n          var valIsNegative = w.globals.series[i][j] < 0;\n          var position = w.config.plotOptions.bar.dataLabels.position;\n\n          if (w.config.plotOptions.bar.dataLabels.orientation === 'vertical') {\n            if (position === 'top') {\n              if (valIsNegative) dataLabelsConfig.textAnchor = 'end';else dataLabelsConfig.textAnchor = 'start';\n            }\n\n            if (position === 'center') {\n              dataLabelsConfig.textAnchor = 'middle';\n            }\n\n            if (position === 'bottom') {\n              if (valIsNegative) dataLabelsConfig.textAnchor = 'end';else dataLabelsConfig.textAnchor = 'start';\n            }\n          }\n\n          if (this.barCtx.isRangeBar && this.barCtx.barOptions.dataLabels.hideOverflowingLabels) {\n            // hide the datalabel if it cannot fit into the rect\n            var txRect = graphics.getTextRects(text, parseFloat(dataLabelsConfig.style.fontSize));\n\n            if (barWidth < txRect.width) {\n              text = '';\n            }\n          }\n\n          if (w.config.chart.stacked && this.barCtx.barOptions.dataLabels.hideOverflowingLabels) {\n            // if there is not enough space to draw the label in the bar/column rect, check hideOverflowingLabels property to prevent overflowing on wrong rect\n            // Note: This issue is only seen in stacked charts\n            if (this.barCtx.isHorizontal) {\n              if (textRects.width / 1.6 > Math.abs(barWidth)) {\n                text = '';\n              }\n            } else {\n              if (textRects.height / 1.6 > Math.abs(barHeight)) {\n                text = '';\n              }\n            }\n          }\n\n          var modifiedDataLabelsConfig = _objectSpread2({}, dataLabelsConfig);\n\n          if (this.barCtx.isHorizontal) {\n            if (val < 0) {\n              if (dataLabelsConfig.textAnchor === 'start') {\n                modifiedDataLabelsConfig.textAnchor = 'end';\n              } else if (dataLabelsConfig.textAnchor === 'end') {\n                modifiedDataLabelsConfig.textAnchor = 'start';\n              }\n            }\n          }\n\n          dataLabels.plotDataLabelsText({\n            x: x,\n            y: y,\n            text: text,\n            i: i,\n            j: j,\n            parent: elDataLabelsWrap,\n            dataLabelsConfig: modifiedDataLabelsConfig,\n            alwaysDrawDataLabel: true,\n            offsetCorrection: true\n          });\n        }\n\n        return elDataLabelsWrap;\n      }\n    }, {\n      key: \"drawTotalDataLabels\",\n      value: function drawTotalDataLabels(_ref3) {\n        var x = _ref3.x,\n            y = _ref3.y,\n            val = _ref3.val,\n            realIndex = _ref3.realIndex,\n            textAnchor = _ref3.textAnchor,\n            barTotalDataLabelsConfig = _ref3.barTotalDataLabelsConfig;\n        var graphics = new Graphics(this.barCtx.ctx);\n        var totalDataLabelText;\n\n        if (barTotalDataLabelsConfig.enabled && typeof x !== 'undefined' && typeof y !== 'undefined' && this.barCtx.lastActiveBarSerieIndex === realIndex) {\n          totalDataLabelText = graphics.drawText({\n            x: x,\n            y: y,\n            foreColor: barTotalDataLabelsConfig.style.color,\n            text: val,\n            textAnchor: textAnchor,\n            fontFamily: barTotalDataLabelsConfig.style.fontFamily,\n            fontSize: barTotalDataLabelsConfig.style.fontSize,\n            fontWeight: barTotalDataLabelsConfig.style.fontWeight\n          });\n        }\n\n        return totalDataLabelText;\n      }\n    }]);\n\n    return BarDataLabels;\n  }();\n\n  var Helpers$1 = /*#__PURE__*/function () {\n    function Helpers(barCtx) {\n      _classCallCheck(this, Helpers);\n\n      this.w = barCtx.w;\n      this.barCtx = barCtx;\n    }\n\n    _createClass(Helpers, [{\n      key: \"initVariables\",\n      value: function initVariables(series) {\n        var w = this.w;\n        this.barCtx.series = series;\n        this.barCtx.totalItems = 0;\n        this.barCtx.seriesLen = 0;\n        this.barCtx.visibleI = -1; // visible Series\n\n        this.barCtx.visibleItems = 1; // number of visible bars after user zoomed in/out\n\n        for (var sl = 0; sl < series.length; sl++) {\n          if (series[sl].length > 0) {\n            this.barCtx.seriesLen = this.barCtx.seriesLen + 1;\n            this.barCtx.totalItems += series[sl].length;\n          }\n\n          if (w.globals.isXNumeric) {\n            // get max visible items\n            for (var j = 0; j < series[sl].length; j++) {\n              if (w.globals.seriesX[sl][j] > w.globals.minX && w.globals.seriesX[sl][j] < w.globals.maxX) {\n                this.barCtx.visibleItems++;\n              }\n            }\n          } else {\n            this.barCtx.visibleItems = w.globals.dataPoints;\n          }\n        }\n\n        if (this.barCtx.seriesLen === 0) {\n          // A small adjustment when combo charts are used\n          this.barCtx.seriesLen = 1;\n        }\n\n        this.barCtx.zeroSerieses = [];\n\n        if (!w.globals.comboCharts) {\n          this.checkZeroSeries({\n            series: series\n          });\n        }\n      }\n    }, {\n      key: \"initialPositions\",\n      value: function initialPositions() {\n        var w = this.w;\n        var x, y, yDivision, xDivision, barHeight, barWidth, zeroH, zeroW;\n        var dataPoints = w.globals.dataPoints;\n\n        if (this.barCtx.isRangeBar) {\n          // timeline rangebar chart\n          dataPoints = w.globals.labels.length;\n        }\n\n        var seriesLen = this.barCtx.seriesLen;\n\n        if (w.config.plotOptions.bar.rangeBarGroupRows) {\n          seriesLen = 1;\n        }\n\n        if (this.barCtx.isHorizontal) {\n          // height divided into equal parts\n          yDivision = w.globals.gridHeight / dataPoints;\n          barHeight = yDivision / seriesLen;\n\n          if (w.globals.isXNumeric) {\n            yDivision = w.globals.gridHeight / this.barCtx.totalItems;\n            barHeight = yDivision / this.barCtx.seriesLen;\n          }\n\n          barHeight = barHeight * parseInt(this.barCtx.barOptions.barHeight, 10) / 100;\n\n          if (String(this.barCtx.barOptions.barHeight).indexOf('%') === -1) {\n            barHeight = parseInt(this.barCtx.barOptions.barHeight, 10);\n          }\n\n          zeroW = this.barCtx.baseLineInvertedY + w.globals.padHorizontal + (this.barCtx.isReversed ? w.globals.gridWidth : 0) - (this.barCtx.isReversed ? this.barCtx.baseLineInvertedY * 2 : 0);\n\n          if (this.barCtx.isFunnel) {\n            zeroW = w.globals.gridWidth / 2;\n          }\n\n          y = (yDivision - barHeight * this.barCtx.seriesLen) / 2;\n        } else {\n          // width divided into equal parts\n          xDivision = w.globals.gridWidth / this.barCtx.visibleItems;\n\n          if (w.config.xaxis.convertedCatToNumeric) {\n            xDivision = w.globals.gridWidth / w.globals.dataPoints;\n          }\n\n          barWidth = xDivision / seriesLen * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100;\n\n          if (w.globals.isXNumeric) {\n            // max barwidth should be equal to minXDiff to avoid overlap\n            var xRatio = this.barCtx.xRatio;\n\n            if (w.config.xaxis.convertedCatToNumeric) {\n              xRatio = this.barCtx.initialXRatio;\n            }\n\n            if (w.globals.minXDiff && w.globals.minXDiff !== 0.5 && w.globals.minXDiff / xRatio > 0) {\n              xDivision = w.globals.minXDiff / xRatio;\n            }\n\n            barWidth = xDivision / seriesLen * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100;\n\n            if (barWidth < 1) {\n              barWidth = 1;\n            }\n          }\n\n          if (String(this.barCtx.barOptions.columnWidth).indexOf('%') === -1) {\n            barWidth = parseInt(this.barCtx.barOptions.columnWidth, 10);\n          }\n\n          zeroH = w.globals.gridHeight - this.barCtx.baseLineY[this.barCtx.yaxisIndex] - (this.barCtx.isReversed ? w.globals.gridHeight : 0) + (this.barCtx.isReversed ? this.barCtx.baseLineY[this.barCtx.yaxisIndex] * 2 : 0);\n          x = w.globals.padHorizontal + (xDivision - barWidth * this.barCtx.seriesLen) / 2;\n        }\n\n        return {\n          x: x,\n          y: y,\n          yDivision: yDivision,\n          xDivision: xDivision,\n          barHeight: barHeight,\n          barWidth: barWidth,\n          zeroH: zeroH,\n          zeroW: zeroW\n        };\n      }\n    }, {\n      key: \"initializeStackedPrevVars\",\n      value: function initializeStackedPrevVars(ctx) {\n        var w = ctx.w;\n\n        if (w.globals.hasSeriesGroups) {\n          w.globals.seriesGroups.forEach(function (group) {\n            if (!ctx[group]) ctx[group] = {};\n            ctx[group].prevY = [];\n            ctx[group].prevX = [];\n            ctx[group].prevYF = [];\n            ctx[group].prevXF = [];\n            ctx[group].prevYVal = [];\n            ctx[group].prevXVal = [];\n          });\n        } else {\n          ctx.prevY = []; // y position on chart (in columns)\n\n          ctx.prevX = []; // x position on chart (in horz bars)\n\n          ctx.prevYF = []; // starting y and ending y (height) in columns\n\n          ctx.prevXF = []; // starting x and ending x (width) in bars\n\n          ctx.prevYVal = []; // y values (series[i][j]) in columns\n\n          ctx.prevXVal = []; // x values (series[i][j]) in bars\n        }\n      }\n    }, {\n      key: \"initializeStackedXYVars\",\n      value: function initializeStackedXYVars(ctx) {\n        var w = ctx.w;\n\n        if (w.globals.hasSeriesGroups) {\n          w.globals.seriesGroups.forEach(function (group) {\n            if (!ctx[group]) ctx[group] = {};\n            ctx[group].xArrj = [];\n            ctx[group].xArrjF = [];\n            ctx[group].xArrjVal = [];\n            ctx[group].yArrj = [];\n            ctx[group].yArrjF = [];\n            ctx[group].yArrjVal = [];\n          });\n        } else {\n          ctx.xArrj = []; // xj indicates x position on graph in bars\n\n          ctx.xArrjF = []; // xjF indicates bar's x position + x2 positions in bars\n\n          ctx.xArrjVal = []; // x val means the actual series's y values in horizontal/bars\n\n          ctx.yArrj = []; // yj indicates y position on graph in columns\n\n          ctx.yArrjF = []; // yjF indicates bar's y position + y2 positions in columns\n\n          ctx.yArrjVal = []; // y val means the actual series's y values in columns\n        }\n      }\n    }, {\n      key: \"getPathFillColor\",\n      value: function getPathFillColor(series, i, j, realIndex) {\n        var _w$config$series$i$da, _w$config$series$i$da2, _w$config$series$i$da3, _w$config$series$i$da4;\n\n        var w = this.w;\n        var fill = new Fill(this.barCtx.ctx);\n        var fillColor = null;\n        var seriesNumber = this.barCtx.barOptions.distributed ? j : i;\n\n        if (this.barCtx.barOptions.colors.ranges.length > 0) {\n          var colorRange = this.barCtx.barOptions.colors.ranges;\n          colorRange.map(function (range) {\n            if (series[i][j] >= range.from && series[i][j] <= range.to) {\n              fillColor = range.color;\n            }\n          });\n        }\n\n        if (w.config.series[i].data[j] && w.config.series[i].data[j].fillColor) {\n          fillColor = w.config.series[i].data[j].fillColor;\n        }\n\n        var pathFill = fill.fillPath({\n          seriesNumber: this.barCtx.barOptions.distributed ? seriesNumber : realIndex,\n          dataPointIndex: j,\n          color: fillColor,\n          value: series[i][j],\n          fillConfig: (_w$config$series$i$da = w.config.series[i].data[j]) === null || _w$config$series$i$da === void 0 ? void 0 : _w$config$series$i$da.fill,\n          fillType: (_w$config$series$i$da2 = w.config.series[i].data[j]) !== null && _w$config$series$i$da2 !== void 0 && (_w$config$series$i$da3 = _w$config$series$i$da2.fill) !== null && _w$config$series$i$da3 !== void 0 && _w$config$series$i$da3.type ? (_w$config$series$i$da4 = w.config.series[i].data[j]) === null || _w$config$series$i$da4 === void 0 ? void 0 : _w$config$series$i$da4.fill.type : w.config.fill.type\n        });\n        return pathFill;\n      }\n    }, {\n      key: \"getStrokeWidth\",\n      value: function getStrokeWidth(i, j, realIndex) {\n        var strokeWidth = 0;\n        var w = this.w;\n\n        if (!this.barCtx.series[i][j]) {\n          this.barCtx.isNullValue = true;\n        } else {\n          this.barCtx.isNullValue = false;\n        }\n\n        if (w.config.stroke.show) {\n          if (!this.barCtx.isNullValue) {\n            strokeWidth = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[realIndex] : this.barCtx.strokeWidth;\n          }\n        }\n\n        return strokeWidth;\n      }\n    }, {\n      key: \"shouldApplyRadius\",\n      value: function shouldApplyRadius(realIndex) {\n        var w = this.w;\n        var applyRadius = false;\n\n        if (w.config.plotOptions.bar.borderRadius > 0) {\n          if (w.config.chart.stacked) {\n            if (w.config.plotOptions.bar.borderRadiusWhenStacked === 'last') {\n              if (this.barCtx.lastActiveBarSerieIndex === realIndex) {\n                applyRadius = true;\n              }\n            } else {\n              applyRadius = true;\n            }\n          } else {\n            applyRadius = true;\n          }\n        }\n\n        return applyRadius;\n      }\n    }, {\n      key: \"barBackground\",\n      value: function barBackground(_ref) {\n        var j = _ref.j,\n            i = _ref.i,\n            x1 = _ref.x1,\n            x2 = _ref.x2,\n            y1 = _ref.y1,\n            y2 = _ref.y2,\n            elSeries = _ref.elSeries;\n        var w = this.w;\n        var graphics = new Graphics(this.barCtx.ctx);\n        var sr = new Series(this.barCtx.ctx);\n        var activeSeriesIndex = sr.getActiveConfigSeriesIndex();\n\n        if (this.barCtx.barOptions.colors.backgroundBarColors.length > 0 && activeSeriesIndex === i) {\n          if (j >= this.barCtx.barOptions.colors.backgroundBarColors.length) {\n            j %= this.barCtx.barOptions.colors.backgroundBarColors.length;\n          }\n\n          var bcolor = this.barCtx.barOptions.colors.backgroundBarColors[j];\n          var rect = graphics.drawRect(typeof x1 !== 'undefined' ? x1 : 0, typeof y1 !== 'undefined' ? y1 : 0, typeof x2 !== 'undefined' ? x2 : w.globals.gridWidth, typeof y2 !== 'undefined' ? y2 : w.globals.gridHeight, this.barCtx.barOptions.colors.backgroundBarRadius, bcolor, this.barCtx.barOptions.colors.backgroundBarOpacity);\n          elSeries.add(rect);\n          rect.node.classList.add('apexcharts-backgroundBar');\n        }\n      }\n    }, {\n      key: \"getColumnPaths\",\n      value: function getColumnPaths(_ref2) {\n        var _w$config$series$real;\n\n        var barWidth = _ref2.barWidth,\n            barXPosition = _ref2.barXPosition,\n            y1 = _ref2.y1,\n            y2 = _ref2.y2,\n            strokeWidth = _ref2.strokeWidth,\n            seriesGroup = _ref2.seriesGroup,\n            realIndex = _ref2.realIndex,\n            i = _ref2.i,\n            j = _ref2.j,\n            w = _ref2.w;\n        var graphics = new Graphics(this.barCtx.ctx);\n        strokeWidth = Array.isArray(strokeWidth) ? strokeWidth[realIndex] : strokeWidth;\n        if (!strokeWidth) strokeWidth = 0;\n        var bW = barWidth;\n        var bXP = barXPosition;\n\n        if ((_w$config$series$real = w.config.series[realIndex].data[j]) !== null && _w$config$series$real !== void 0 && _w$config$series$real.columnWidthOffset) {\n          bXP = barXPosition - w.config.series[realIndex].data[j].columnWidthOffset / 2;\n          bW = barWidth + w.config.series[realIndex].data[j].columnWidthOffset;\n        }\n\n        var x1 = bXP;\n        var x2 = bXP + bW; // append tiny pixels to avoid exponentials (which cause issues in border-radius)\n\n        y1 += 0.001;\n        y2 += 0.001;\n        var pathTo = graphics.move(x1, y1);\n        var pathFrom = graphics.move(x1, y1);\n        var sl = graphics.line(x2 - strokeWidth, y1);\n\n        if (w.globals.previousPaths.length > 0) {\n          pathFrom = this.barCtx.getPreviousPath(realIndex, j, false);\n        }\n\n        pathTo = pathTo + graphics.line(x1, y2) + graphics.line(x2 - strokeWidth, y2) + graphics.line(x2 - strokeWidth, y1) + (w.config.plotOptions.bar.borderRadiusApplication === 'around' ? ' Z' : ' z'); // the lines in pathFrom are repeated to equal it to the points of pathTo\n        // this is to avoid weird animation (bug in svg.js)\n\n        pathFrom = pathFrom + graphics.line(x1, y1) + sl + sl + sl + sl + sl + graphics.line(x1, y1) + (w.config.plotOptions.bar.borderRadiusApplication === 'around' ? ' Z' : ' z');\n\n        if (this.shouldApplyRadius(realIndex)) {\n          pathTo = graphics.roundPathCorners(pathTo, w.config.plotOptions.bar.borderRadius);\n        }\n\n        if (w.config.chart.stacked) {\n          var _ctx = this.barCtx;\n\n          if (w.globals.hasSeriesGroups && seriesGroup) {\n            _ctx = this.barCtx[seriesGroup];\n          }\n\n          _ctx.yArrj.push(y2);\n\n          _ctx.yArrjF.push(Math.abs(y1 - y2));\n\n          _ctx.yArrjVal.push(this.barCtx.series[i][j]);\n        }\n\n        return {\n          pathTo: pathTo,\n          pathFrom: pathFrom\n        };\n      }\n    }, {\n      key: \"getBarpaths\",\n      value: function getBarpaths(_ref3) {\n        var _w$config$series$real2;\n\n        var barYPosition = _ref3.barYPosition,\n            barHeight = _ref3.barHeight,\n            x1 = _ref3.x1,\n            x2 = _ref3.x2,\n            strokeWidth = _ref3.strokeWidth,\n            seriesGroup = _ref3.seriesGroup,\n            realIndex = _ref3.realIndex,\n            i = _ref3.i,\n            j = _ref3.j,\n            w = _ref3.w;\n        var graphics = new Graphics(this.barCtx.ctx);\n        strokeWidth = Array.isArray(strokeWidth) ? strokeWidth[realIndex] : strokeWidth;\n        if (!strokeWidth) strokeWidth = 0;\n        var bYP = barYPosition;\n        var bH = barHeight;\n\n        if ((_w$config$series$real2 = w.config.series[realIndex].data[j]) !== null && _w$config$series$real2 !== void 0 && _w$config$series$real2.barHeightOffset) {\n          bYP = barYPosition - w.config.series[realIndex].data[j].barHeightOffset / 2;\n          bH = barHeight + w.config.series[realIndex].data[j].barHeightOffset;\n        }\n\n        var y1 = bYP;\n        var y2 = bYP + bH; // append tiny pixels to avoid exponentials (which cause issues in border-radius)\n\n        x1 += 0.001;\n        x2 += 0.001;\n        var pathTo = graphics.move(x1, y1);\n        var pathFrom = graphics.move(x1, y1);\n\n        if (w.globals.previousPaths.length > 0) {\n          pathFrom = this.barCtx.getPreviousPath(realIndex, j, false);\n        }\n\n        var sl = graphics.line(x1, y2 - strokeWidth);\n        pathTo = pathTo + graphics.line(x2, y1) + graphics.line(x2, y2 - strokeWidth) + sl + (w.config.plotOptions.bar.borderRadiusApplication === 'around' ? ' Z' : ' z');\n        pathFrom = pathFrom + graphics.line(x1, y1) + sl + sl + sl + sl + sl + graphics.line(x1, y1) + (w.config.plotOptions.bar.borderRadiusApplication === 'around' ? ' Z' : ' z');\n\n        if (this.shouldApplyRadius(realIndex)) {\n          pathTo = graphics.roundPathCorners(pathTo, w.config.plotOptions.bar.borderRadius);\n        }\n\n        if (w.config.chart.stacked) {\n          var _ctx = this.barCtx;\n\n          if (w.globals.hasSeriesGroups && seriesGroup) {\n            _ctx = this.barCtx[seriesGroup];\n          }\n\n          _ctx.xArrj.push(x2);\n\n          _ctx.xArrjF.push(Math.abs(x1 - x2));\n\n          _ctx.xArrjVal.push(this.barCtx.series[i][j]);\n        }\n\n        return {\n          pathTo: pathTo,\n          pathFrom: pathFrom\n        };\n      }\n    }, {\n      key: \"checkZeroSeries\",\n      value: function checkZeroSeries(_ref4) {\n        var series = _ref4.series;\n        var w = this.w;\n\n        for (var zs = 0; zs < series.length; zs++) {\n          var total = 0;\n\n          for (var zsj = 0; zsj < series[w.globals.maxValsInArrayIndex].length; zsj++) {\n            total += series[zs][zsj];\n          }\n\n          if (total === 0) {\n            this.barCtx.zeroSerieses.push(zs);\n          }\n        }\n      }\n    }, {\n      key: \"getXForValue\",\n      value: function getXForValue(value, zeroW) {\n        var zeroPositionForNull = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        var xForVal = zeroPositionForNull ? zeroW : null;\n\n        if (typeof value !== 'undefined' && value !== null) {\n          xForVal = zeroW + value / this.barCtx.invertedYRatio - (this.barCtx.isReversed ? value / this.barCtx.invertedYRatio : 0) * 2;\n        }\n\n        return xForVal;\n      }\n    }, {\n      key: \"getYForValue\",\n      value: function getYForValue(value, zeroH) {\n        var zeroPositionForNull = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        var yForVal = zeroPositionForNull ? zeroH : null;\n\n        if (typeof value !== 'undefined' && value !== null) {\n          yForVal = zeroH - value / this.barCtx.yRatio[this.barCtx.yaxisIndex] + (this.barCtx.isReversed ? value / this.barCtx.yRatio[this.barCtx.yaxisIndex] : 0) * 2;\n        }\n\n        return yForVal;\n      }\n    }, {\n      key: \"getGoalValues\",\n      value: function getGoalValues(type, zeroW, zeroH, i, j) {\n        var _this = this;\n\n        var w = this.w;\n        var goals = [];\n\n        var pushGoal = function pushGoal(value, attrs) {\n          var _goals$push;\n\n          goals.push((_goals$push = {}, _defineProperty(_goals$push, type, type === 'x' ? _this.getXForValue(value, zeroW, false) : _this.getYForValue(value, zeroH, false)), _defineProperty(_goals$push, \"attrs\", attrs), _goals$push));\n        };\n\n        if (w.globals.seriesGoals[i] && w.globals.seriesGoals[i][j] && Array.isArray(w.globals.seriesGoals[i][j])) {\n          w.globals.seriesGoals[i][j].forEach(function (goal) {\n            pushGoal(goal.value, goal);\n          });\n        }\n\n        if (this.barCtx.barOptions.isDumbbell && w.globals.seriesRange.length) {\n          var colors = this.barCtx.barOptions.dumbbellColors ? this.barCtx.barOptions.dumbbellColors : w.globals.colors;\n          var commonAttrs = {\n            strokeHeight: type === 'x' ? 0 : w.globals.markers.size[i],\n            strokeWidth: type === 'x' ? w.globals.markers.size[i] : 0,\n            strokeDashArray: 0,\n            strokeLineCap: 'round',\n            strokeColor: Array.isArray(colors[i]) ? colors[i][0] : colors[i]\n          };\n          pushGoal(w.globals.seriesRangeStart[i][j], commonAttrs);\n          pushGoal(w.globals.seriesRangeEnd[i][j], _objectSpread2(_objectSpread2({}, commonAttrs), {}, {\n            strokeColor: Array.isArray(colors[i]) ? colors[i][1] : colors[i]\n          }));\n        }\n\n        return goals;\n      }\n    }, {\n      key: \"drawGoalLine\",\n      value: function drawGoalLine(_ref5) {\n        var barXPosition = _ref5.barXPosition,\n            barYPosition = _ref5.barYPosition,\n            goalX = _ref5.goalX,\n            goalY = _ref5.goalY,\n            barWidth = _ref5.barWidth,\n            barHeight = _ref5.barHeight;\n        var graphics = new Graphics(this.barCtx.ctx);\n        var lineGroup = graphics.group({\n          className: 'apexcharts-bar-goals-groups'\n        });\n        lineGroup.node.classList.add('apexcharts-element-hidden');\n        this.barCtx.w.globals.delayedElements.push({\n          el: lineGroup.node\n        });\n        lineGroup.attr('clip-path', \"url(#gridRectMarkerMask\".concat(this.barCtx.w.globals.cuid, \")\"));\n        var line = null;\n\n        if (this.barCtx.isHorizontal) {\n          if (Array.isArray(goalX)) {\n            goalX.forEach(function (goal) {\n              var sHeight = typeof goal.attrs.strokeHeight !== 'undefined' ? goal.attrs.strokeHeight : barHeight / 2;\n              var y = barYPosition + sHeight + barHeight / 2;\n              line = graphics.drawLine(goal.x, y - sHeight * 2, goal.x, y, goal.attrs.strokeColor ? goal.attrs.strokeColor : undefined, goal.attrs.strokeDashArray, goal.attrs.strokeWidth ? goal.attrs.strokeWidth : 2, goal.attrs.strokeLineCap);\n              lineGroup.add(line);\n            });\n          }\n        } else {\n          if (Array.isArray(goalY)) {\n            goalY.forEach(function (goal) {\n              var sWidth = typeof goal.attrs.strokeWidth !== 'undefined' ? goal.attrs.strokeWidth : barWidth / 2;\n              var x = barXPosition + sWidth + barWidth / 2;\n              line = graphics.drawLine(x - sWidth * 2, goal.y, x, goal.y, goal.attrs.strokeColor ? goal.attrs.strokeColor : undefined, goal.attrs.strokeDashArray, goal.attrs.strokeHeight ? goal.attrs.strokeHeight : 2, goal.attrs.strokeLineCap);\n              lineGroup.add(line);\n            });\n          }\n        }\n\n        return lineGroup;\n      }\n    }, {\n      key: \"drawBarShadow\",\n      value: function drawBarShadow(_ref6) {\n        var prevPaths = _ref6.prevPaths,\n            currPaths = _ref6.currPaths,\n            color = _ref6.color;\n        var w = this.w;\n        var prevX2 = prevPaths.x,\n            prevX1 = prevPaths.x1,\n            prevY1 = prevPaths.barYPosition;\n        var currX2 = currPaths.x,\n            currX1 = currPaths.x1,\n            currY1 = currPaths.barYPosition;\n        var prevY2 = prevY1 + currPaths.barHeight;\n        var graphics = new Graphics(this.barCtx.ctx);\n        var utils = new Utils$1();\n        var shadowPath = graphics.move(prevX1, prevY2) + graphics.line(prevX2, prevY2) + graphics.line(currX2, currY1) + graphics.line(currX1, currY1) + graphics.line(prevX1, prevY2) + (w.config.plotOptions.bar.borderRadiusApplication === 'around' ? ' Z' : ' z');\n        return graphics.drawPath({\n          d: shadowPath,\n          fill: utils.shadeColor(0.5, Utils$1.rgb2hex(color)),\n          stroke: 'none',\n          strokeWidth: 0,\n          fillOpacity: 1,\n          classes: 'apexcharts-bar-shadows'\n        });\n      }\n    }]);\n\n    return Helpers;\n  }();\n\n  /**\n   * ApexCharts Bar Class responsible for drawing both Columns and Bars.\n   *\n   * @module Bar\n   **/\n\n  var Bar = /*#__PURE__*/function () {\n    function Bar(ctx, xyRatios) {\n      _classCallCheck(this, Bar);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      var w = this.w;\n      this.barOptions = w.config.plotOptions.bar;\n      this.isHorizontal = this.barOptions.horizontal;\n      this.strokeWidth = w.config.stroke.width;\n      this.isNullValue = false;\n      this.isRangeBar = w.globals.seriesRange.length && this.isHorizontal;\n      this.isVerticalGroupedRangeBar = !w.globals.isBarHorizontal && w.globals.seriesRange.length && w.config.plotOptions.bar.rangeBarGroupRows;\n      this.isFunnel = this.barOptions.isFunnel;\n      this.xyRatios = xyRatios;\n\n      if (this.xyRatios !== null) {\n        this.xRatio = xyRatios.xRatio;\n        this.initialXRatio = xyRatios.initialXRatio;\n        this.yRatio = xyRatios.yRatio;\n        this.invertedXRatio = xyRatios.invertedXRatio;\n        this.invertedYRatio = xyRatios.invertedYRatio;\n        this.baseLineY = xyRatios.baseLineY;\n        this.baseLineInvertedY = xyRatios.baseLineInvertedY;\n      }\n\n      this.yaxisIndex = 0;\n      this.seriesLen = 0;\n      this.pathArr = [];\n      var ser = new Series(this.ctx);\n      this.lastActiveBarSerieIndex = ser.getActiveConfigSeriesIndex('desc', ['bar', 'column']);\n      var barSeriesIndices = ser.getBarSeriesIndices();\n      var coreUtils = new CoreUtils(this.ctx);\n      this.stackedSeriesTotals = coreUtils.getStackedSeriesTotals(this.w.config.series.map(function (s, i) {\n        return barSeriesIndices.indexOf(i) === -1 ? i : -1;\n      }).filter(function (s) {\n        return s !== -1;\n      }));\n      this.barHelpers = new Helpers$1(this);\n    }\n    /** primary draw method which is called on bar object\n     * @memberof Bar\n     * @param {array} series - user supplied series values\n     * @param {int} seriesIndex - the index by which series will be drawn on the svg\n     * @return {node} element which is supplied to parent chart draw method for appending\n     **/\n\n\n    _createClass(Bar, [{\n      key: \"draw\",\n      value: function draw(series, seriesIndex) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var coreUtils = new CoreUtils(this.ctx, w);\n        series = coreUtils.getLogSeries(series);\n        this.series = series;\n        this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n        this.barHelpers.initVariables(series);\n        var ret = graphics.group({\n          class: 'apexcharts-bar-series apexcharts-plot-series'\n        });\n\n        if (w.config.dataLabels.enabled) {\n          if (this.totalItems > this.barOptions.dataLabels.maxItems) {\n            console.warn('WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.');\n          }\n        }\n\n        for (var i = 0, bc = 0; i < series.length; i++, bc++) {\n          var x = void 0,\n              y = void 0,\n              xDivision = void 0,\n              // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n          yDivision = void 0,\n              // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n          zeroH = void 0,\n              // zeroH is the baseline where 0 meets y axis\n          zeroW = void 0; // zeroW is the baseline where 0 meets x axis\n\n          var yArrj = []; // hold y values of current iterating series\n\n          var xArrj = []; // hold x values of current iterating series\n\n          var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn\n\n          var elSeries = graphics.group({\n            class: \"apexcharts-series\",\n            rel: i + 1,\n            seriesName: Utils$1.escapeString(w.globals.seriesNames[realIndex]),\n            'data:realIndex': realIndex\n          });\n          this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex);\n\n          if (series[i].length > 0) {\n            this.visibleI = this.visibleI + 1;\n          }\n\n          var barHeight = 0;\n          var barWidth = 0;\n\n          if (this.yRatio.length > 1) {\n            this.yaxisIndex = realIndex;\n          }\n\n          this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed;\n          var initPositions = this.barHelpers.initialPositions();\n          y = initPositions.y;\n          barHeight = initPositions.barHeight;\n          yDivision = initPositions.yDivision;\n          zeroW = initPositions.zeroW;\n          x = initPositions.x;\n          barWidth = initPositions.barWidth;\n          xDivision = initPositions.xDivision;\n          zeroH = initPositions.zeroH;\n\n          if (!this.horizontal) {\n            xArrj.push(x + barWidth / 2);\n          } // eldatalabels\n\n\n          var elDataLabelsWrap = graphics.group({\n            class: 'apexcharts-datalabels',\n            'data:realIndex': realIndex\n          });\n          w.globals.delayedElements.push({\n            el: elDataLabelsWrap.node\n          });\n          elDataLabelsWrap.node.classList.add('apexcharts-element-hidden');\n          var elGoalsMarkers = graphics.group({\n            class: 'apexcharts-bar-goals-markers',\n            style: \"pointer-events: none\"\n          });\n          var elBarShadows = graphics.group({\n            class: 'apexcharts-bar-shadows',\n            style: \"pointer-events: none\"\n          });\n          w.globals.delayedElements.push({\n            el: elBarShadows.node\n          });\n          elBarShadows.node.classList.add('apexcharts-element-hidden');\n\n          for (var j = 0; j < w.globals.dataPoints; j++) {\n            var strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n            var paths = null;\n            var pathsParams = {\n              indexes: {\n                i: i,\n                j: j,\n                realIndex: realIndex,\n                bc: bc\n              },\n              x: x,\n              y: y,\n              strokeWidth: strokeWidth,\n              elSeries: elSeries\n            };\n\n            if (this.isHorizontal) {\n              paths = this.drawBarPaths(_objectSpread2(_objectSpread2({}, pathsParams), {}, {\n                barHeight: barHeight,\n                zeroW: zeroW,\n                yDivision: yDivision\n              }));\n              barWidth = this.series[i][j] / this.invertedYRatio;\n            } else {\n              paths = this.drawColumnPaths(_objectSpread2(_objectSpread2({}, pathsParams), {}, {\n                xDivision: xDivision,\n                barWidth: barWidth,\n                zeroH: zeroH\n              }));\n              barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex];\n            }\n\n            var pathFill = this.barHelpers.getPathFillColor(series, i, j, realIndex);\n\n            if (this.isFunnel && this.barOptions.isFunnel3d && this.pathArr.length && j > 0) {\n              var barShadow = this.barHelpers.drawBarShadow({\n                color: typeof pathFill === 'string' && (pathFill === null || pathFill === void 0 ? void 0 : pathFill.indexOf('url')) === -1 ? pathFill : Utils$1.hexToRgba(w.globals.colors[i]),\n                prevPaths: this.pathArr[this.pathArr.length - 1],\n                currPaths: paths\n              });\n\n              if (barShadow) {\n                elBarShadows.add(barShadow);\n              }\n            }\n\n            this.pathArr.push(paths);\n            var barGoalLine = this.barHelpers.drawGoalLine({\n              barXPosition: paths.barXPosition,\n              barYPosition: paths.barYPosition,\n              goalX: paths.goalX,\n              goalY: paths.goalY,\n              barHeight: barHeight,\n              barWidth: barWidth\n            });\n\n            if (barGoalLine) {\n              elGoalsMarkers.add(barGoalLine);\n            }\n\n            y = paths.y;\n            x = paths.x; // push current X\n\n            if (j > 0) {\n              xArrj.push(x + barWidth / 2);\n            }\n\n            yArrj.push(y);\n            this.renderSeries({\n              realIndex: realIndex,\n              pathFill: pathFill,\n              j: j,\n              i: i,\n              pathFrom: paths.pathFrom,\n              pathTo: paths.pathTo,\n              strokeWidth: strokeWidth,\n              elSeries: elSeries,\n              x: x,\n              y: y,\n              series: series,\n              barHeight: paths.barHeight ? paths.barHeight : barHeight,\n              barWidth: paths.barWidth ? paths.barWidth : barWidth,\n              elDataLabelsWrap: elDataLabelsWrap,\n              elGoalsMarkers: elGoalsMarkers,\n              elBarShadows: elBarShadows,\n              visibleSeries: this.visibleI,\n              type: 'bar'\n            });\n          } // push all x val arrays into main xArr\n\n\n          w.globals.seriesXvalues[realIndex] = xArrj;\n          w.globals.seriesYvalues[realIndex] = yArrj;\n          ret.add(elSeries);\n        }\n\n        return ret;\n      }\n    }, {\n      key: \"renderSeries\",\n      value: function renderSeries(_ref) {\n        var realIndex = _ref.realIndex,\n            pathFill = _ref.pathFill,\n            lineFill = _ref.lineFill,\n            j = _ref.j,\n            i = _ref.i,\n            groupIndex = _ref.groupIndex,\n            pathFrom = _ref.pathFrom,\n            pathTo = _ref.pathTo,\n            strokeWidth = _ref.strokeWidth,\n            elSeries = _ref.elSeries,\n            x = _ref.x,\n            y = _ref.y,\n            y1 = _ref.y1,\n            y2 = _ref.y2,\n            series = _ref.series,\n            barHeight = _ref.barHeight,\n            barWidth = _ref.barWidth,\n            barXPosition = _ref.barXPosition,\n            barYPosition = _ref.barYPosition,\n            elDataLabelsWrap = _ref.elDataLabelsWrap,\n            elGoalsMarkers = _ref.elGoalsMarkers,\n            elBarShadows = _ref.elBarShadows,\n            visibleSeries = _ref.visibleSeries,\n            type = _ref.type;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n\n        if (!lineFill) {\n          /* fix apexcharts#341 */\n          lineFill = this.barOptions.distributed ? w.globals.stroke.colors[j] : w.globals.stroke.colors[realIndex];\n        }\n\n        if (w.config.series[i].data[j] && w.config.series[i].data[j].strokeColor) {\n          lineFill = w.config.series[i].data[j].strokeColor;\n        }\n\n        if (this.isNullValue) {\n          pathFill = 'none';\n        }\n\n        var delay = j / w.config.chart.animations.animateGradually.delay * (w.config.chart.animations.speed / w.globals.dataPoints) / 2.4;\n        var renderedPath = graphics.renderPaths({\n          i: i,\n          j: j,\n          realIndex: realIndex,\n          pathFrom: pathFrom,\n          pathTo: pathTo,\n          stroke: lineFill,\n          strokeWidth: strokeWidth,\n          strokeLineCap: w.config.stroke.lineCap,\n          fill: pathFill,\n          animationDelay: delay,\n          initialSpeed: w.config.chart.animations.speed,\n          dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed,\n          className: \"apexcharts-\".concat(type, \"-area\")\n        });\n        renderedPath.attr('clip-path', \"url(#gridRectMask\".concat(w.globals.cuid, \")\"));\n        var forecast = w.config.forecastDataPoints;\n\n        if (forecast.count > 0) {\n          if (j >= w.globals.dataPoints - forecast.count) {\n            renderedPath.node.setAttribute('stroke-dasharray', forecast.dashArray);\n            renderedPath.node.setAttribute('stroke-width', forecast.strokeWidth);\n            renderedPath.node.setAttribute('fill-opacity', forecast.fillOpacity);\n          }\n        }\n\n        if (typeof y1 !== 'undefined' && typeof y2 !== 'undefined') {\n          renderedPath.attr('data-range-y1', y1);\n          renderedPath.attr('data-range-y2', y2);\n        }\n\n        var filters = new Filters(this.ctx);\n        filters.setSelectionFilter(renderedPath, realIndex, j);\n        elSeries.add(renderedPath);\n        var barDataLabels = new BarDataLabels(this);\n        var dataLabelsObj = barDataLabels.handleBarDataLabels({\n          x: x,\n          y: y,\n          y1: y1,\n          y2: y2,\n          i: i,\n          j: j,\n          series: series,\n          realIndex: realIndex,\n          groupIndex: groupIndex,\n          barHeight: barHeight,\n          barWidth: barWidth,\n          barXPosition: barXPosition,\n          barYPosition: barYPosition,\n          renderedPath: renderedPath,\n          visibleSeries: visibleSeries\n        });\n\n        if (dataLabelsObj.dataLabels !== null) {\n          elDataLabelsWrap.add(dataLabelsObj.dataLabels);\n        }\n\n        if (dataLabelsObj.totalDataLabels) {\n          elDataLabelsWrap.add(dataLabelsObj.totalDataLabels);\n        }\n\n        elSeries.add(elDataLabelsWrap);\n\n        if (elGoalsMarkers) {\n          elSeries.add(elGoalsMarkers);\n        }\n\n        if (elBarShadows) {\n          elSeries.add(elBarShadows);\n        }\n\n        return elSeries;\n      }\n    }, {\n      key: \"drawBarPaths\",\n      value: function drawBarPaths(_ref2) {\n        var indexes = _ref2.indexes,\n            barHeight = _ref2.barHeight,\n            strokeWidth = _ref2.strokeWidth,\n            zeroW = _ref2.zeroW,\n            x = _ref2.x,\n            y = _ref2.y,\n            yDivision = _ref2.yDivision,\n            elSeries = _ref2.elSeries;\n        var w = this.w;\n        var i = indexes.i;\n        var j = indexes.j;\n        var barYPosition;\n\n        if (w.globals.isXNumeric) {\n          y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight;\n          barYPosition = y + barHeight * this.visibleI;\n        } else {\n          if (w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n            var nonZeroColumns = 0;\n            var zeroEncounters = 0;\n            w.globals.seriesPercent.forEach(function (_s, _si) {\n              if (_s[j]) {\n                nonZeroColumns++;\n              }\n\n              if (_si < i && _s[j] === 0) {\n                zeroEncounters++;\n              }\n            });\n\n            if (nonZeroColumns > 0) {\n              barHeight = this.seriesLen * barHeight / nonZeroColumns;\n            }\n\n            barYPosition = y + barHeight * this.visibleI;\n            barYPosition -= barHeight * zeroEncounters;\n          } else {\n            barYPosition = y + barHeight * this.visibleI;\n          }\n        }\n\n        if (this.isFunnel) {\n          zeroW = zeroW - (this.barHelpers.getXForValue(this.series[i][j], zeroW) - zeroW) / 2;\n        }\n\n        x = this.barHelpers.getXForValue(this.series[i][j], zeroW);\n        var paths = this.barHelpers.getBarpaths({\n          barYPosition: barYPosition,\n          barHeight: barHeight,\n          x1: zeroW,\n          x2: x,\n          strokeWidth: strokeWidth,\n          series: this.series,\n          realIndex: indexes.realIndex,\n          i: i,\n          j: j,\n          w: w\n        });\n\n        if (!w.globals.isXNumeric) {\n          y = y + yDivision;\n        }\n\n        this.barHelpers.barBackground({\n          j: j,\n          i: i,\n          y1: barYPosition - barHeight * this.visibleI,\n          y2: barHeight * this.seriesLen,\n          elSeries: elSeries\n        });\n        return {\n          pathTo: paths.pathTo,\n          pathFrom: paths.pathFrom,\n          x1: zeroW,\n          x: x,\n          y: y,\n          goalX: this.barHelpers.getGoalValues('x', zeroW, null, i, j),\n          barYPosition: barYPosition,\n          barHeight: barHeight\n        };\n      }\n    }, {\n      key: \"drawColumnPaths\",\n      value: function drawColumnPaths(_ref3) {\n        var indexes = _ref3.indexes,\n            x = _ref3.x,\n            y = _ref3.y,\n            xDivision = _ref3.xDivision,\n            barWidth = _ref3.barWidth,\n            zeroH = _ref3.zeroH,\n            strokeWidth = _ref3.strokeWidth,\n            elSeries = _ref3.elSeries;\n        var w = this.w;\n        var realIndex = indexes.realIndex;\n        var i = indexes.i;\n        var j = indexes.j;\n        var bc = indexes.bc;\n        var barXPosition;\n\n        if (w.globals.isXNumeric) {\n          var sxI = realIndex;\n\n          if (!w.globals.seriesX[realIndex].length) {\n            sxI = w.globals.maxValsInArrayIndex;\n          }\n\n          if (w.globals.seriesX[sxI][j]) {\n            x = (w.globals.seriesX[sxI][j] - w.globals.minX) / this.xRatio - barWidth * this.seriesLen / 2;\n          } // re-calc barXPosition as x changed\n\n\n          barXPosition = x + barWidth * this.visibleI;\n        } else {\n          if (w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n            var nonZeroColumns = 0;\n            var zeroEncounters = 0;\n            w.globals.seriesPercent.forEach(function (_s, _si) {\n              if (_s[j]) {\n                nonZeroColumns++;\n              }\n\n              if (_si < i && _s[j] === 0) {\n                zeroEncounters++;\n              }\n            });\n\n            if (nonZeroColumns > 0) {\n              barWidth = this.seriesLen * barWidth / nonZeroColumns;\n            }\n\n            barXPosition = x + barWidth * this.visibleI;\n            barXPosition -= barWidth * zeroEncounters;\n          } else {\n            barXPosition = x + barWidth * this.visibleI;\n          }\n        }\n\n        y = this.barHelpers.getYForValue(this.series[i][j], zeroH);\n        var paths = this.barHelpers.getColumnPaths({\n          barXPosition: barXPosition,\n          barWidth: barWidth,\n          y1: zeroH,\n          y2: y,\n          strokeWidth: strokeWidth,\n          series: this.series,\n          realIndex: indexes.realIndex,\n          i: i,\n          j: j,\n          w: w\n        });\n\n        if (!w.globals.isXNumeric) {\n          x = x + xDivision;\n        }\n\n        this.barHelpers.barBackground({\n          bc: bc,\n          j: j,\n          i: i,\n          x1: barXPosition - strokeWidth / 2 - barWidth * this.visibleI,\n          x2: barWidth * this.seriesLen + strokeWidth / 2,\n          elSeries: elSeries\n        });\n        return {\n          pathTo: paths.pathTo,\n          pathFrom: paths.pathFrom,\n          x: x,\n          y: y,\n          goalY: this.barHelpers.getGoalValues('y', null, zeroH, i, j),\n          barXPosition: barXPosition,\n          barWidth: barWidth\n        };\n      }\n      /** getPreviousPath is a common function for bars/columns which is used to get previous paths when data changes.\n       * @memberof Bar\n       * @param {int} realIndex - current iterating i\n       * @param {int} j - current iterating series's j index\n       * @return {string} pathFrom is the string which will be appended in animations\n       **/\n\n    }, {\n      key: \"getPreviousPath\",\n      value: function getPreviousPath(realIndex, j) {\n        var w = this.w;\n        var pathFrom;\n\n        for (var pp = 0; pp < w.globals.previousPaths.length; pp++) {\n          var gpp = w.globals.previousPaths[pp];\n\n          if (gpp.paths && gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(realIndex, 10)) {\n            if (typeof w.globals.previousPaths[pp].paths[j] !== 'undefined') {\n              pathFrom = w.globals.previousPaths[pp].paths[j].d;\n            }\n          }\n        }\n\n        return pathFrom;\n      }\n    }]);\n\n    return Bar;\n  }();\n\n  /**\n   * ApexCharts BarStacked Class responsible for drawing both Stacked Columns and Bars.\n   *\n   * @module BarStacked\n   * The whole calculation for stacked bar/column is different from normal bar/column,\n   * hence it makes sense to derive a new class for it extending most of the props of Parent Bar\n   **/\n\n  var BarStacked = /*#__PURE__*/function (_Bar) {\n    _inherits(BarStacked, _Bar);\n\n    var _super = _createSuper(BarStacked);\n\n    function BarStacked() {\n      _classCallCheck(this, BarStacked);\n\n      return _super.apply(this, arguments);\n    }\n\n    _createClass(BarStacked, [{\n      key: \"draw\",\n      value: function draw(series, seriesIndex) {\n        var _this = this;\n\n        var w = this.w;\n        this.graphics = new Graphics(this.ctx);\n        this.bar = new Bar(this.ctx, this.xyRatios);\n        var coreUtils = new CoreUtils(this.ctx, w);\n        series = coreUtils.getLogSeries(series);\n        this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n        this.barHelpers.initVariables(series);\n\n        if (w.config.chart.stackType === '100%') {\n          series = w.globals.seriesPercent.slice();\n        }\n\n        this.series = series;\n        this.barHelpers.initializeStackedPrevVars(this);\n        var ret = this.graphics.group({\n          class: 'apexcharts-bar-series apexcharts-plot-series'\n        });\n        var x = 0;\n        var y = 0;\n\n        var _loop = function _loop(i, bc) {\n          var xDivision = void 0; // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n\n          var yDivision = void 0; // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n\n          var zeroH = void 0; // zeroH is the baseline where 0 meets y axis\n\n          var zeroW = void 0; // zeroW is the baseline where 0 meets x axis\n\n          var groupIndex = -1; // groupIndex is the index of group buckets (group1, group2, ...)\n\n          _this.groupCtx = _this;\n          w.globals.seriesGroups.forEach(function (group, gIndex) {\n            if (group.indexOf(w.config.series[i].name) > -1) {\n              groupIndex = gIndex;\n            }\n          });\n\n          if (groupIndex !== -1) {\n            _this.groupCtx = _this[w.globals.seriesGroups[groupIndex]];\n          }\n\n          var xArrValues = [];\n          var yArrValues = [];\n          var realIndex = w.globals.comboCharts ? seriesIndex[i] : i;\n\n          if (_this.yRatio.length > 1) {\n            _this.yaxisIndex = realIndex;\n          }\n\n          _this.isReversed = w.config.yaxis[_this.yaxisIndex] && w.config.yaxis[_this.yaxisIndex].reversed; // el to which series will be drawn\n\n          var elSeries = _this.graphics.group({\n            class: \"apexcharts-series\",\n            seriesName: Utils$1.escapeString(w.globals.seriesNames[realIndex]),\n            rel: i + 1,\n            'data:realIndex': realIndex\n          });\n\n          _this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); // eldatalabels\n\n\n          var elDataLabelsWrap = _this.graphics.group({\n            class: 'apexcharts-datalabels',\n            'data:realIndex': realIndex\n          });\n\n          var elGoalsMarkers = _this.graphics.group({\n            class: 'apexcharts-bar-goals-markers',\n            style: \"pointer-events: none\"\n          });\n\n          var barHeight = 0;\n          var barWidth = 0;\n\n          var initPositions = _this.initialPositions(x, y, xDivision, yDivision, zeroH, zeroW);\n\n          y = initPositions.y;\n          barHeight = initPositions.barHeight;\n          yDivision = initPositions.yDivision;\n          zeroW = initPositions.zeroW;\n          x = initPositions.x;\n          barWidth = initPositions.barWidth;\n          xDivision = initPositions.xDivision;\n          zeroH = initPositions.zeroH;\n\n          _this.barHelpers.initializeStackedXYVars(_this); // where all stack bar disappear after collapsing the first series\n\n\n          if (_this.groupCtx.prevY.length === 1 && _this.groupCtx.prevY[0].every(function (val) {\n            return isNaN(val);\n          })) {\n            _this.groupCtx.prevY[0] = _this.groupCtx.prevY[0].map(function (val) {\n              return zeroH;\n            });\n            _this.groupCtx.prevYF[0] = _this.groupCtx.prevYF[0].map(function (val) {\n              return 0;\n            });\n          }\n\n          for (var j = 0; j < w.globals.dataPoints; j++) {\n            var strokeWidth = _this.barHelpers.getStrokeWidth(i, j, realIndex);\n\n            var commonPathOpts = {\n              indexes: {\n                i: i,\n                j: j,\n                realIndex: realIndex,\n                bc: bc\n              },\n              strokeWidth: strokeWidth,\n              x: x,\n              y: y,\n              elSeries: elSeries,\n              groupIndex: groupIndex,\n              seriesGroup: w.globals.seriesGroups[groupIndex]\n            };\n            var paths = null;\n\n            if (_this.isHorizontal) {\n              paths = _this.drawStackedBarPaths(_objectSpread2(_objectSpread2({}, commonPathOpts), {}, {\n                zeroW: zeroW,\n                barHeight: barHeight,\n                yDivision: yDivision\n              }));\n              barWidth = _this.series[i][j] / _this.invertedYRatio;\n            } else {\n              paths = _this.drawStackedColumnPaths(_objectSpread2(_objectSpread2({}, commonPathOpts), {}, {\n                xDivision: xDivision,\n                barWidth: barWidth,\n                zeroH: zeroH\n              }));\n              barHeight = _this.series[i][j] / _this.yRatio[_this.yaxisIndex];\n            }\n\n            var barGoalLine = _this.barHelpers.drawGoalLine({\n              barXPosition: paths.barXPosition,\n              barYPosition: paths.barYPosition,\n              goalX: paths.goalX,\n              goalY: paths.goalY,\n              barHeight: barHeight,\n              barWidth: barWidth\n            });\n\n            if (barGoalLine) {\n              elGoalsMarkers.add(barGoalLine);\n            }\n\n            y = paths.y;\n            x = paths.x;\n            xArrValues.push(x);\n            yArrValues.push(y);\n\n            var pathFill = _this.barHelpers.getPathFillColor(series, i, j, realIndex);\n\n            elSeries = _this.renderSeries({\n              realIndex: realIndex,\n              pathFill: pathFill,\n              j: j,\n              i: i,\n              groupIndex: groupIndex,\n              pathFrom: paths.pathFrom,\n              pathTo: paths.pathTo,\n              strokeWidth: strokeWidth,\n              elSeries: elSeries,\n              x: x,\n              y: y,\n              series: series,\n              barHeight: barHeight,\n              barWidth: barWidth,\n              elDataLabelsWrap: elDataLabelsWrap,\n              elGoalsMarkers: elGoalsMarkers,\n              type: 'bar',\n              visibleSeries: 0\n            });\n          } // push all x val arrays into main xArr\n\n\n          w.globals.seriesXvalues[realIndex] = xArrValues;\n          w.globals.seriesYvalues[realIndex] = yArrValues; // push all current y values array to main PrevY Array\n\n          _this.groupCtx.prevY.push(_this.groupCtx.yArrj);\n\n          _this.groupCtx.prevYF.push(_this.groupCtx.yArrjF);\n\n          _this.groupCtx.prevYVal.push(_this.groupCtx.yArrjVal);\n\n          _this.groupCtx.prevX.push(_this.groupCtx.xArrj);\n\n          _this.groupCtx.prevXF.push(_this.groupCtx.xArrjF);\n\n          _this.groupCtx.prevXVal.push(_this.groupCtx.xArrjVal);\n\n          ret.add(elSeries);\n        };\n\n        for (var i = 0, bc = 0; i < series.length; i++, bc++) {\n          _loop(i, bc);\n        }\n\n        return ret;\n      }\n    }, {\n      key: \"initialPositions\",\n      value: function initialPositions(x, y, xDivision, yDivision, zeroH, zeroW) {\n        var _w$globals$seriesGrou, _w$globals$seriesGrou2;\n\n        var w = this.w;\n        var barHeight, barWidth;\n\n        if (this.isHorizontal) {\n          // height divided into equal parts\n          yDivision = w.globals.gridHeight / w.globals.dataPoints;\n          barHeight = yDivision;\n          barHeight = barHeight * parseInt(w.config.plotOptions.bar.barHeight, 10) / 100;\n\n          if (String(w.config.plotOptions.bar.barHeight).indexOf('%') === -1) {\n            barHeight = parseInt(w.config.plotOptions.bar.barHeight, 10);\n          }\n\n          zeroW = this.baseLineInvertedY + w.globals.padHorizontal + (this.isReversed ? w.globals.gridWidth : 0) - (this.isReversed ? this.baseLineInvertedY * 2 : 0); // initial y position is half of barHeight * half of number of Bars\n\n          y = (yDivision - barHeight) / 2;\n        } else {\n          // width divided into equal parts\n          xDivision = w.globals.gridWidth / w.globals.dataPoints;\n          barWidth = xDivision;\n\n          if (w.globals.isXNumeric && w.globals.dataPoints > 1) {\n            // the check (w.globals.dataPoints > 1) fixes apexcharts.js #1617\n            xDivision = w.globals.minXDiff / this.xRatio;\n            barWidth = xDivision * parseInt(this.barOptions.columnWidth, 10) / 100;\n          } else {\n            barWidth = barWidth * parseInt(w.config.plotOptions.bar.columnWidth, 10) / 100;\n          }\n\n          if (String(w.config.plotOptions.bar.columnWidth).indexOf('%') === -1) {\n            barWidth = parseInt(w.config.plotOptions.bar.columnWidth, 10);\n          }\n\n          zeroH = w.globals.gridHeight - this.baseLineY[this.yaxisIndex] - (this.isReversed ? w.globals.gridHeight : 0) + (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0); // initial x position is one third of barWidth\n\n          x = w.globals.padHorizontal + (xDivision - barWidth) / 2;\n        }\n\n        return {\n          x: x,\n          y: y,\n          yDivision: yDivision,\n          xDivision: xDivision,\n          barHeight: (_w$globals$seriesGrou = w.globals.seriesGroups) !== null && _w$globals$seriesGrou !== void 0 && _w$globals$seriesGrou.length ? barHeight / w.globals.seriesGroups.length : barHeight,\n          barWidth: (_w$globals$seriesGrou2 = w.globals.seriesGroups) !== null && _w$globals$seriesGrou2 !== void 0 && _w$globals$seriesGrou2.length ? barWidth / w.globals.seriesGroups.length : barWidth,\n          zeroH: zeroH,\n          zeroW: zeroW\n        };\n      }\n    }, {\n      key: \"drawStackedBarPaths\",\n      value: function drawStackedBarPaths(_ref) {\n        var indexes = _ref.indexes,\n            barHeight = _ref.barHeight,\n            strokeWidth = _ref.strokeWidth,\n            zeroW = _ref.zeroW,\n            x = _ref.x,\n            y = _ref.y,\n            groupIndex = _ref.groupIndex,\n            seriesGroup = _ref.seriesGroup,\n            yDivision = _ref.yDivision,\n            elSeries = _ref.elSeries;\n        var w = this.w;\n        var barYPosition = y + (groupIndex !== -1 ? groupIndex * barHeight : 0);\n        var barXPosition;\n        var i = indexes.i;\n        var j = indexes.j;\n        var prevBarW = 0;\n\n        for (var k = 0; k < this.groupCtx.prevXF.length; k++) {\n          prevBarW = prevBarW + this.groupCtx.prevXF[k][j];\n        }\n\n        var gsi = i; // an index to keep track of the series inside a group\n\n        if (seriesGroup) {\n          gsi = seriesGroup.indexOf(w.config.series[i].name);\n        }\n\n        if (gsi > 0) {\n          var bXP = zeroW;\n\n          if (this.groupCtx.prevXVal[gsi - 1][j] < 0) {\n            bXP = this.series[i][j] >= 0 ? this.groupCtx.prevX[gsi - 1][j] + prevBarW - (this.isReversed ? prevBarW : 0) * 2 : this.groupCtx.prevX[gsi - 1][j];\n          } else if (this.groupCtx.prevXVal[gsi - 1][j] >= 0) {\n            bXP = this.series[i][j] >= 0 ? this.groupCtx.prevX[gsi - 1][j] : this.groupCtx.prevX[gsi - 1][j] - prevBarW + (this.isReversed ? prevBarW : 0) * 2;\n          }\n\n          barXPosition = bXP;\n        } else {\n          // the first series will not have prevX values\n          barXPosition = zeroW;\n        }\n\n        if (this.series[i][j] === null) {\n          x = barXPosition;\n        } else {\n          x = barXPosition + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2;\n        }\n\n        var paths = this.barHelpers.getBarpaths({\n          barYPosition: barYPosition,\n          barHeight: barHeight,\n          x1: barXPosition,\n          x2: x,\n          strokeWidth: strokeWidth,\n          series: this.series,\n          realIndex: indexes.realIndex,\n          seriesGroup: seriesGroup,\n          i: i,\n          j: j,\n          w: w\n        });\n        this.barHelpers.barBackground({\n          j: j,\n          i: i,\n          y1: barYPosition,\n          y2: barHeight,\n          elSeries: elSeries\n        });\n        y = y + yDivision;\n        return {\n          pathTo: paths.pathTo,\n          pathFrom: paths.pathFrom,\n          goalX: this.barHelpers.getGoalValues('x', zeroW, null, i, j),\n          barYPosition: barYPosition,\n          x: x,\n          y: y\n        };\n      }\n    }, {\n      key: \"drawStackedColumnPaths\",\n      value: function drawStackedColumnPaths(_ref2) {\n        var indexes = _ref2.indexes,\n            x = _ref2.x,\n            y = _ref2.y,\n            xDivision = _ref2.xDivision,\n            barWidth = _ref2.barWidth,\n            zeroH = _ref2.zeroH,\n            groupIndex = _ref2.groupIndex,\n            seriesGroup = _ref2.seriesGroup,\n            elSeries = _ref2.elSeries;\n        var w = this.w;\n        var i = indexes.i;\n        var j = indexes.j;\n        var bc = indexes.bc;\n\n        if (w.globals.isXNumeric) {\n          var seriesVal = w.globals.seriesX[i][j];\n          if (!seriesVal) seriesVal = 0;\n          x = (seriesVal - w.globals.minX) / this.xRatio - barWidth / 2;\n\n          if (w.globals.seriesGroups.length) {\n            x = (seriesVal - w.globals.minX) / this.xRatio - barWidth / 2 * w.globals.seriesGroups.length;\n          }\n        }\n\n        var barXPosition = x + (groupIndex !== -1 ? groupIndex * barWidth : 0);\n        var barYPosition;\n        var prevBarH = 0;\n\n        for (var k = 0; k < this.groupCtx.prevYF.length; k++) {\n          // fix issue #1215\n          // in case where this.groupCtx.prevYF[k][j] is NaN, use 0 instead\n          prevBarH = prevBarH + (!isNaN(this.groupCtx.prevYF[k][j]) ? this.groupCtx.prevYF[k][j] : 0);\n        }\n\n        var gsi = i; // an index to keep track of the series inside a group\n\n        if (seriesGroup) {\n          gsi = seriesGroup.indexOf(w.config.series[i].name);\n        }\n\n        if (gsi > 0 && !w.globals.isXNumeric || gsi > 0 && w.globals.isXNumeric && w.globals.seriesX[i - 1][j] === w.globals.seriesX[i][j]) {\n          var _this$groupCtx$prevYF;\n\n          var bYP;\n          var prevYValue;\n          var p = Math.min(this.yRatio.length + 1, i + 1);\n\n          if (this.groupCtx.prevY[gsi - 1] !== undefined && this.groupCtx.prevY[gsi - 1].length) {\n            for (var ii = 1; ii < p; ii++) {\n              var _this$groupCtx$prevY;\n\n              if (!isNaN((_this$groupCtx$prevY = this.groupCtx.prevY[gsi - ii]) === null || _this$groupCtx$prevY === void 0 ? void 0 : _this$groupCtx$prevY[j])) {\n                // find the previous available value to give prevYValue\n                prevYValue = this.groupCtx.prevY[gsi - ii][j]; // if found it, break the loop\n\n                break;\n              }\n            }\n          }\n\n          for (var _ii = 1; _ii < p; _ii++) {\n            var _this$groupCtx$prevYV, _this$groupCtx$prevYV2;\n\n            // find the previous available value(non-NaN) to give bYP\n            if (((_this$groupCtx$prevYV = this.groupCtx.prevYVal[gsi - _ii]) === null || _this$groupCtx$prevYV === void 0 ? void 0 : _this$groupCtx$prevYV[j]) < 0) {\n              bYP = this.series[i][j] >= 0 ? prevYValue - prevBarH + (this.isReversed ? prevBarH : 0) * 2 : prevYValue; // found it? break the loop\n\n              break;\n            } else if (((_this$groupCtx$prevYV2 = this.groupCtx.prevYVal[gsi - _ii]) === null || _this$groupCtx$prevYV2 === void 0 ? void 0 : _this$groupCtx$prevYV2[j]) >= 0) {\n              bYP = this.series[i][j] >= 0 ? prevYValue : prevYValue + prevBarH - (this.isReversed ? prevBarH : 0) * 2; // found it? break the loop\n\n              break;\n            }\n          }\n\n          if (typeof bYP === 'undefined') bYP = w.globals.gridHeight; // if this.prevYF[0] is all 0 resulted from line #486\n          // AND every arr starting from the second only contains NaN\n\n          if ((_this$groupCtx$prevYF = this.groupCtx.prevYF[0]) !== null && _this$groupCtx$prevYF !== void 0 && _this$groupCtx$prevYF.every(function (val) {\n            return val === 0;\n          }) && this.groupCtx.prevYF.slice(1, gsi).every(function (arr) {\n            return arr.every(function (val) {\n              return isNaN(val);\n            });\n          })) {\n            barYPosition = zeroH;\n          } else {\n            // Nothing special\n            barYPosition = bYP;\n          }\n        } else {\n          // the first series will not have prevY values, also if the prev index's series X doesn't matches the current index's series X, then start from zero\n          barYPosition = zeroH;\n        }\n\n        if (this.series[i][j]) {\n          y = barYPosition - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2;\n        } else {\n          // fixes #3610\n          y = barYPosition;\n        }\n\n        var paths = this.barHelpers.getColumnPaths({\n          barXPosition: barXPosition,\n          barWidth: barWidth,\n          y1: barYPosition,\n          y2: y,\n          yRatio: this.yRatio[this.yaxisIndex],\n          strokeWidth: this.strokeWidth,\n          series: this.series,\n          seriesGroup: seriesGroup,\n          realIndex: indexes.realIndex,\n          i: i,\n          j: j,\n          w: w\n        });\n        this.barHelpers.barBackground({\n          bc: bc,\n          j: j,\n          i: i,\n          x1: barXPosition,\n          x2: barWidth,\n          elSeries: elSeries\n        });\n        x = x + xDivision;\n        return {\n          pathTo: paths.pathTo,\n          pathFrom: paths.pathFrom,\n          goalY: this.barHelpers.getGoalValues('y', null, zeroH, i, j),\n          barXPosition: barXPosition,\n          x: w.globals.isXNumeric ? x - xDivision : x,\n          y: y\n        };\n      }\n    }]);\n\n    return BarStacked;\n  }(Bar);\n\n  /**\n   * ApexCharts BoxCandleStick Class responsible for drawing both Stacked Columns and Bars.\n   *\n   * @module BoxCandleStick\n   **/\n\n  var BoxCandleStick = /*#__PURE__*/function (_Bar) {\n    _inherits(BoxCandleStick, _Bar);\n\n    var _super = _createSuper(BoxCandleStick);\n\n    function BoxCandleStick() {\n      _classCallCheck(this, BoxCandleStick);\n\n      return _super.apply(this, arguments);\n    }\n\n    _createClass(BoxCandleStick, [{\n      key: \"draw\",\n      value: function draw(series, ctype, seriesIndex) {\n        var _this = this;\n\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var type = w.globals.comboCharts ? ctype : w.config.chart.type;\n        var fill = new Fill(this.ctx);\n        this.candlestickOptions = this.w.config.plotOptions.candlestick;\n        this.boxOptions = this.w.config.plotOptions.boxPlot;\n        this.isHorizontal = w.config.plotOptions.bar.horizontal;\n        var coreUtils = new CoreUtils(this.ctx, w);\n        series = coreUtils.getLogSeries(series);\n        this.series = series;\n        this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n        this.barHelpers.initVariables(series);\n        var ret = graphics.group({\n          class: \"apexcharts-\".concat(type, \"-series apexcharts-plot-series\")\n        });\n\n        var _loop = function _loop(i) {\n          _this.isBoxPlot = w.config.chart.type === 'boxPlot' || w.config.series[i].type === 'boxPlot';\n          var x = void 0,\n              y = void 0,\n              xDivision = void 0,\n              // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n          yDivision = void 0,\n              // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n          zeroH = void 0,\n              // zeroH is the baseline where 0 meets y axis\n          zeroW = void 0; // zeroW is the baseline where 0 meets x axis\n\n          var yArrj = []; // hold y values of current iterating series\n\n          var xArrj = []; // hold x values of current iterating series\n\n          var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn\n\n          var elSeries = graphics.group({\n            class: \"apexcharts-series\",\n            seriesName: Utils$1.escapeString(w.globals.seriesNames[realIndex]),\n            rel: i + 1,\n            'data:realIndex': realIndex\n          });\n\n          _this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex);\n\n          if (series[i].length > 0) {\n            _this.visibleI = _this.visibleI + 1;\n          }\n\n          var barHeight = 0;\n          var barWidth = 0;\n\n          if (_this.yRatio.length > 1) {\n            _this.yaxisIndex = realIndex;\n          }\n\n          var initPositions = _this.barHelpers.initialPositions();\n\n          y = initPositions.y;\n          barHeight = initPositions.barHeight;\n          yDivision = initPositions.yDivision;\n          zeroW = initPositions.zeroW;\n          x = initPositions.x;\n          barWidth = initPositions.barWidth;\n          xDivision = initPositions.xDivision;\n          zeroH = initPositions.zeroH;\n          xArrj.push(x + barWidth / 2); // eldatalabels\n\n          var elDataLabelsWrap = graphics.group({\n            class: 'apexcharts-datalabels',\n            'data:realIndex': realIndex\n          });\n\n          var _loop2 = function _loop2(j) {\n            var strokeWidth = _this.barHelpers.getStrokeWidth(i, j, realIndex);\n\n            var paths = null;\n            var pathsParams = {\n              indexes: {\n                i: i,\n                j: j,\n                realIndex: realIndex\n              },\n              x: x,\n              y: y,\n              strokeWidth: strokeWidth,\n              elSeries: elSeries\n            };\n\n            if (_this.isHorizontal) {\n              paths = _this.drawHorizontalBoxPaths(_objectSpread2(_objectSpread2({}, pathsParams), {}, {\n                yDivision: yDivision,\n                barHeight: barHeight,\n                zeroW: zeroW\n              }));\n            } else {\n              paths = _this.drawVerticalBoxPaths(_objectSpread2(_objectSpread2({}, pathsParams), {}, {\n                xDivision: xDivision,\n                barWidth: barWidth,\n                zeroH: zeroH\n              }));\n            }\n\n            y = paths.y;\n            x = paths.x; // push current X\n\n            if (j > 0) {\n              xArrj.push(x + barWidth / 2);\n            }\n\n            yArrj.push(y);\n            paths.pathTo.forEach(function (pathTo, pi) {\n              var lineFill = !_this.isBoxPlot && _this.candlestickOptions.wick.useFillColor ? paths.color[pi] : w.globals.stroke.colors[i];\n              var pathFill = fill.fillPath({\n                seriesNumber: realIndex,\n                dataPointIndex: j,\n                color: paths.color[pi],\n                value: series[i][j]\n              });\n\n              _this.renderSeries({\n                realIndex: realIndex,\n                pathFill: pathFill,\n                lineFill: lineFill,\n                j: j,\n                i: i,\n                pathFrom: paths.pathFrom,\n                pathTo: pathTo,\n                strokeWidth: strokeWidth,\n                elSeries: elSeries,\n                x: x,\n                y: y,\n                series: series,\n                barHeight: barHeight,\n                barWidth: barWidth,\n                elDataLabelsWrap: elDataLabelsWrap,\n                visibleSeries: _this.visibleI,\n                type: w.config.chart.type\n              });\n            });\n          };\n\n          for (var j = 0; j < w.globals.dataPoints; j++) {\n            _loop2(j);\n          } // push all x val arrays into main xArr\n\n\n          w.globals.seriesXvalues[realIndex] = xArrj;\n          w.globals.seriesYvalues[realIndex] = yArrj;\n          ret.add(elSeries);\n        };\n\n        for (var i = 0; i < series.length; i++) {\n          _loop(i);\n        }\n\n        return ret;\n      }\n    }, {\n      key: \"drawVerticalBoxPaths\",\n      value: function drawVerticalBoxPaths(_ref) {\n        var indexes = _ref.indexes,\n            x = _ref.x;\n            _ref.y;\n            var xDivision = _ref.xDivision,\n            barWidth = _ref.barWidth,\n            zeroH = _ref.zeroH,\n            strokeWidth = _ref.strokeWidth;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var i = indexes.i;\n        var j = indexes.j;\n        var isPositive = true;\n        var colorPos = w.config.plotOptions.candlestick.colors.upward;\n        var colorNeg = w.config.plotOptions.candlestick.colors.downward;\n        var color = '';\n\n        if (this.isBoxPlot) {\n          color = [this.boxOptions.colors.lower, this.boxOptions.colors.upper];\n        }\n\n        var yRatio = this.yRatio[this.yaxisIndex];\n        var realIndex = indexes.realIndex;\n        var ohlc = this.getOHLCValue(realIndex, j);\n        var l1 = zeroH;\n        var l2 = zeroH;\n\n        if (ohlc.o > ohlc.c) {\n          isPositive = false;\n        }\n\n        var y1 = Math.min(ohlc.o, ohlc.c);\n        var y2 = Math.max(ohlc.o, ohlc.c);\n        var m = ohlc.m;\n\n        if (w.globals.isXNumeric) {\n          x = (w.globals.seriesX[realIndex][j] - w.globals.minX) / this.xRatio - barWidth / 2;\n        }\n\n        var barXPosition = x + barWidth * this.visibleI;\n\n        if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) {\n          y1 = zeroH;\n          y2 = zeroH;\n        } else {\n          y1 = zeroH - y1 / yRatio;\n          y2 = zeroH - y2 / yRatio;\n          l1 = zeroH - ohlc.h / yRatio;\n          l2 = zeroH - ohlc.l / yRatio;\n          m = zeroH - ohlc.m / yRatio;\n        }\n\n        var pathTo = graphics.move(barXPosition, zeroH);\n        var pathFrom = graphics.move(barXPosition + barWidth / 2, y1);\n\n        if (w.globals.previousPaths.length > 0) {\n          pathFrom = this.getPreviousPath(realIndex, j, true);\n        }\n\n        if (this.isBoxPlot) {\n          pathTo = [graphics.move(barXPosition, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 4, l1) + graphics.line(barXPosition + barWidth - barWidth / 4, l1) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth, m) + graphics.line(barXPosition, m) + graphics.line(barXPosition, y1 + strokeWidth / 2), graphics.move(barXPosition, m) + graphics.line(barXPosition + barWidth, m) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth - barWidth / 4, l2) + graphics.line(barXPosition + barWidth / 4, l2) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition, y2) + graphics.line(barXPosition, m) + 'z'];\n        } else {\n          // candlestick\n          pathTo = [graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2)];\n        }\n\n        pathFrom = pathFrom + graphics.move(barXPosition, y1);\n\n        if (!w.globals.isXNumeric) {\n          x = x + xDivision;\n        }\n\n        return {\n          pathTo: pathTo,\n          pathFrom: pathFrom,\n          x: x,\n          y: y2,\n          barXPosition: barXPosition,\n          color: this.isBoxPlot ? color : isPositive ? [colorPos] : [colorNeg]\n        };\n      }\n    }, {\n      key: \"drawHorizontalBoxPaths\",\n      value: function drawHorizontalBoxPaths(_ref2) {\n        var indexes = _ref2.indexes;\n            _ref2.x;\n            var y = _ref2.y,\n            yDivision = _ref2.yDivision,\n            barHeight = _ref2.barHeight,\n            zeroW = _ref2.zeroW,\n            strokeWidth = _ref2.strokeWidth;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var i = indexes.i;\n        var j = indexes.j;\n        var color = this.boxOptions.colors.lower;\n\n        if (this.isBoxPlot) {\n          color = [this.boxOptions.colors.lower, this.boxOptions.colors.upper];\n        }\n\n        var yRatio = this.invertedYRatio;\n        var realIndex = indexes.realIndex;\n        var ohlc = this.getOHLCValue(realIndex, j);\n        var l1 = zeroW;\n        var l2 = zeroW;\n        var x1 = Math.min(ohlc.o, ohlc.c);\n        var x2 = Math.max(ohlc.o, ohlc.c);\n        var m = ohlc.m;\n\n        if (w.globals.isXNumeric) {\n          y = (w.globals.seriesX[realIndex][j] - w.globals.minX) / this.invertedXRatio - barHeight / 2;\n        }\n\n        var barYPosition = y + barHeight * this.visibleI;\n\n        if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) {\n          x1 = zeroW;\n          x2 = zeroW;\n        } else {\n          x1 = zeroW + x1 / yRatio;\n          x2 = zeroW + x2 / yRatio;\n          l1 = zeroW + ohlc.h / yRatio;\n          l2 = zeroW + ohlc.l / yRatio;\n          m = zeroW + ohlc.m / yRatio;\n        }\n\n        var pathTo = graphics.move(zeroW, barYPosition);\n        var pathFrom = graphics.move(x1, barYPosition + barHeight / 2);\n\n        if (w.globals.previousPaths.length > 0) {\n          pathFrom = this.getPreviousPath(realIndex, j, true);\n        }\n\n        pathTo = [graphics.move(x1, barYPosition) + graphics.line(x1, barYPosition + barHeight / 2) + graphics.line(l1, barYPosition + barHeight / 2) + graphics.line(l1, barYPosition + barHeight / 2 - barHeight / 4) + graphics.line(l1, barYPosition + barHeight / 2 + barHeight / 4) + graphics.line(l1, barYPosition + barHeight / 2) + graphics.line(x1, barYPosition + barHeight / 2) + graphics.line(x1, barYPosition + barHeight) + graphics.line(m, barYPosition + barHeight) + graphics.line(m, barYPosition) + graphics.line(x1 + strokeWidth / 2, barYPosition), graphics.move(m, barYPosition) + graphics.line(m, barYPosition + barHeight) + graphics.line(x2, barYPosition + barHeight) + graphics.line(x2, barYPosition + barHeight / 2) + graphics.line(l2, barYPosition + barHeight / 2) + graphics.line(l2, barYPosition + barHeight - barHeight / 4) + graphics.line(l2, barYPosition + barHeight / 4) + graphics.line(l2, barYPosition + barHeight / 2) + graphics.line(x2, barYPosition + barHeight / 2) + graphics.line(x2, barYPosition) + graphics.line(m, barYPosition) + 'z'];\n        pathFrom = pathFrom + graphics.move(x1, barYPosition);\n\n        if (!w.globals.isXNumeric) {\n          y = y + yDivision;\n        }\n\n        return {\n          pathTo: pathTo,\n          pathFrom: pathFrom,\n          x: x2,\n          y: y,\n          barYPosition: barYPosition,\n          color: color\n        };\n      }\n    }, {\n      key: \"getOHLCValue\",\n      value: function getOHLCValue(i, j) {\n        var w = this.w;\n        return {\n          o: this.isBoxPlot ? w.globals.seriesCandleH[i][j] : w.globals.seriesCandleO[i][j],\n          h: this.isBoxPlot ? w.globals.seriesCandleO[i][j] : w.globals.seriesCandleH[i][j],\n          m: w.globals.seriesCandleM[i][j],\n          l: this.isBoxPlot ? w.globals.seriesCandleC[i][j] : w.globals.seriesCandleL[i][j],\n          c: this.isBoxPlot ? w.globals.seriesCandleL[i][j] : w.globals.seriesCandleC[i][j]\n        };\n      }\n    }]);\n\n    return BoxCandleStick;\n  }(Bar);\n\n  var TreemapHelpers = /*#__PURE__*/function () {\n    function TreemapHelpers(ctx) {\n      _classCallCheck(this, TreemapHelpers);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(TreemapHelpers, [{\n      key: \"checkColorRange\",\n      value: function checkColorRange() {\n        var w = this.w;\n        var negRange = false;\n        var chartOpts = w.config.plotOptions[w.config.chart.type];\n\n        if (chartOpts.colorScale.ranges.length > 0) {\n          chartOpts.colorScale.ranges.map(function (range, index) {\n            if (range.from <= 0) {\n              negRange = true;\n            }\n          });\n        }\n\n        return negRange;\n      }\n    }, {\n      key: \"getShadeColor\",\n      value: function getShadeColor(chartType, i, j, negRange) {\n        var w = this.w;\n        var colorShadePercent = 1;\n        var shadeIntensity = w.config.plotOptions[chartType].shadeIntensity;\n        var colorProps = this.determineColor(chartType, i, j);\n\n        if (w.globals.hasNegs || negRange) {\n          if (w.config.plotOptions[chartType].reverseNegativeShade) {\n            if (colorProps.percent < 0) {\n              colorShadePercent = colorProps.percent / 100 * (shadeIntensity * 1.25);\n            } else {\n              colorShadePercent = (1 - colorProps.percent / 100) * (shadeIntensity * 1.25);\n            }\n          } else {\n            if (colorProps.percent <= 0) {\n              colorShadePercent = 1 - (1 + colorProps.percent / 100) * shadeIntensity;\n            } else {\n              colorShadePercent = (1 - colorProps.percent / 100) * shadeIntensity;\n            }\n          }\n        } else {\n          colorShadePercent = 1 - colorProps.percent / 100;\n\n          if (chartType === 'treemap') {\n            colorShadePercent = (1 - colorProps.percent / 100) * (shadeIntensity * 1.25);\n          }\n        }\n\n        var color = colorProps.color;\n        var utils = new Utils$1();\n\n        if (w.config.plotOptions[chartType].enableShades) {\n          if (this.w.config.theme.mode === 'dark') {\n            color = Utils$1.hexToRgba(utils.shadeColor(colorShadePercent * -1, colorProps.color), w.config.fill.opacity);\n          } else {\n            color = Utils$1.hexToRgba(utils.shadeColor(colorShadePercent, colorProps.color), w.config.fill.opacity);\n          }\n        }\n\n        return {\n          color: color,\n          colorProps: colorProps\n        };\n      }\n    }, {\n      key: \"determineColor\",\n      value: function determineColor(chartType, i, j) {\n        var w = this.w;\n        var val = w.globals.series[i][j];\n        var chartOpts = w.config.plotOptions[chartType];\n        var seriesNumber = chartOpts.colorScale.inverse ? j : i;\n\n        if (chartOpts.distributed && w.config.chart.type === 'treemap') {\n          seriesNumber = j;\n        }\n\n        var color = w.globals.colors[seriesNumber];\n        var foreColor = null;\n        var min = Math.min.apply(Math, _toConsumableArray(w.globals.series[i]));\n        var max = Math.max.apply(Math, _toConsumableArray(w.globals.series[i]));\n\n        if (!chartOpts.distributed && chartType === 'heatmap') {\n          min = w.globals.minY;\n          max = w.globals.maxY;\n        }\n\n        if (typeof chartOpts.colorScale.min !== 'undefined') {\n          min = chartOpts.colorScale.min < w.globals.minY ? chartOpts.colorScale.min : w.globals.minY;\n          max = chartOpts.colorScale.max > w.globals.maxY ? chartOpts.colorScale.max : w.globals.maxY;\n        }\n\n        var total = Math.abs(max) + Math.abs(min);\n        var percent = 100 * val / (total === 0 ? total - 0.000001 : total);\n\n        if (chartOpts.colorScale.ranges.length > 0) {\n          var colorRange = chartOpts.colorScale.ranges;\n          colorRange.map(function (range, index) {\n            if (val >= range.from && val <= range.to) {\n              color = range.color;\n              foreColor = range.foreColor ? range.foreColor : null;\n              min = range.from;\n              max = range.to;\n              var rTotal = Math.abs(max) + Math.abs(min);\n              percent = 100 * val / (rTotal === 0 ? rTotal - 0.000001 : rTotal);\n            }\n          });\n        }\n\n        return {\n          color: color,\n          foreColor: foreColor,\n          percent: percent\n        };\n      }\n    }, {\n      key: \"calculateDataLabels\",\n      value: function calculateDataLabels(_ref) {\n        var text = _ref.text,\n            x = _ref.x,\n            y = _ref.y,\n            i = _ref.i,\n            j = _ref.j,\n            colorProps = _ref.colorProps,\n            fontSize = _ref.fontSize;\n        var w = this.w;\n        var dataLabelsConfig = w.config.dataLabels;\n        var graphics = new Graphics(this.ctx);\n        var dataLabels = new DataLabels(this.ctx);\n        var elDataLabelsWrap = null;\n\n        if (dataLabelsConfig.enabled) {\n          elDataLabelsWrap = graphics.group({\n            class: 'apexcharts-data-labels'\n          });\n          var offX = dataLabelsConfig.offsetX;\n          var offY = dataLabelsConfig.offsetY;\n          var dataLabelsX = x + offX;\n          var dataLabelsY = y + parseFloat(dataLabelsConfig.style.fontSize) / 3 + offY;\n          dataLabels.plotDataLabelsText({\n            x: dataLabelsX,\n            y: dataLabelsY,\n            text: text,\n            i: i,\n            j: j,\n            color: colorProps.foreColor,\n            parent: elDataLabelsWrap,\n            fontSize: fontSize,\n            dataLabelsConfig: dataLabelsConfig\n          });\n        }\n\n        return elDataLabelsWrap;\n      }\n    }, {\n      key: \"addListeners\",\n      value: function addListeners(elRect) {\n        var graphics = new Graphics(this.ctx);\n        elRect.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, elRect));\n        elRect.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, elRect));\n        elRect.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, elRect));\n      }\n    }]);\n\n    return TreemapHelpers;\n  }();\n\n  /**\n   * ApexCharts HeatMap Class.\n   * @module HeatMap\n   **/\n\n  var HeatMap = /*#__PURE__*/function () {\n    function HeatMap(ctx, xyRatios) {\n      _classCallCheck(this, HeatMap);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.xRatio = xyRatios.xRatio;\n      this.yRatio = xyRatios.yRatio;\n      this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation;\n      this.helpers = new TreemapHelpers(ctx);\n      this.rectRadius = this.w.config.plotOptions.heatmap.radius;\n      this.strokeWidth = this.w.config.stroke.show ? this.w.config.stroke.width : 0;\n    }\n\n    _createClass(HeatMap, [{\n      key: \"draw\",\n      value: function draw(series) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var ret = graphics.group({\n          class: 'apexcharts-heatmap'\n        });\n        ret.attr('clip-path', \"url(#gridRectMask\".concat(w.globals.cuid, \")\")); // width divided into equal parts\n\n        var xDivision = w.globals.gridWidth / w.globals.dataPoints;\n        var yDivision = w.globals.gridHeight / w.globals.series.length;\n        var y1 = 0;\n        var rev = false;\n        this.negRange = this.helpers.checkColorRange();\n        var heatSeries = series.slice();\n\n        if (w.config.yaxis[0].reversed) {\n          rev = true;\n          heatSeries.reverse();\n        }\n\n        for (var i = rev ? 0 : heatSeries.length - 1; rev ? i < heatSeries.length : i >= 0; rev ? i++ : i--) {\n          // el to which series will be drawn\n          var elSeries = graphics.group({\n            class: \"apexcharts-series apexcharts-heatmap-series\",\n            seriesName: Utils$1.escapeString(w.globals.seriesNames[i]),\n            rel: i + 1,\n            'data:realIndex': i\n          });\n          this.ctx.series.addCollapsedClassToSeries(elSeries, i);\n\n          if (w.config.chart.dropShadow.enabled) {\n            var shadow = w.config.chart.dropShadow;\n            var filters = new Filters(this.ctx);\n            filters.dropShadow(elSeries, shadow, i);\n          }\n\n          var x1 = 0;\n          var shadeIntensity = w.config.plotOptions.heatmap.shadeIntensity;\n\n          for (var j = 0; j < heatSeries[i].length; j++) {\n            var heatColor = this.helpers.getShadeColor(w.config.chart.type, i, j, this.negRange);\n            var color = heatColor.color;\n            var heatColorProps = heatColor.colorProps;\n\n            if (w.config.fill.type === 'image') {\n              var fill = new Fill(this.ctx);\n              color = fill.fillPath({\n                seriesNumber: i,\n                dataPointIndex: j,\n                opacity: w.globals.hasNegs ? heatColorProps.percent < 0 ? 1 - (1 + heatColorProps.percent / 100) : shadeIntensity + heatColorProps.percent / 100 : heatColorProps.percent / 100,\n                patternID: Utils$1.randomId(),\n                width: w.config.fill.image.width ? w.config.fill.image.width : xDivision,\n                height: w.config.fill.image.height ? w.config.fill.image.height : yDivision\n              });\n            }\n\n            var radius = this.rectRadius;\n            var rect = graphics.drawRect(x1, y1, xDivision, yDivision, radius);\n            rect.attr({\n              cx: x1,\n              cy: y1\n            });\n            rect.node.classList.add('apexcharts-heatmap-rect');\n            elSeries.add(rect);\n            rect.attr({\n              fill: color,\n              i: i,\n              index: i,\n              j: j,\n              val: heatSeries[i][j],\n              'stroke-width': this.strokeWidth,\n              stroke: w.config.plotOptions.heatmap.useFillColorAsStroke ? color : w.globals.stroke.colors[0],\n              color: color\n            });\n            this.helpers.addListeners(rect);\n\n            if (w.config.chart.animations.enabled && !w.globals.dataChanged) {\n              var speed = 1;\n\n              if (!w.globals.resized) {\n                speed = w.config.chart.animations.speed;\n              }\n\n              this.animateHeatMap(rect, x1, y1, xDivision, yDivision, speed);\n            }\n\n            if (w.globals.dataChanged) {\n              var _speed = 1;\n\n              if (this.dynamicAnim.enabled && w.globals.shouldAnimate) {\n                _speed = this.dynamicAnim.speed;\n                var colorFrom = w.globals.previousPaths[i] && w.globals.previousPaths[i][j] && w.globals.previousPaths[i][j].color;\n                if (!colorFrom) colorFrom = 'rgba(255, 255, 255, 0)';\n                this.animateHeatColor(rect, Utils$1.isColorHex(colorFrom) ? colorFrom : Utils$1.rgb2hex(colorFrom), Utils$1.isColorHex(color) ? color : Utils$1.rgb2hex(color), _speed);\n              }\n            }\n\n            var formatter = w.config.dataLabels.formatter;\n            var formattedText = formatter(w.globals.series[i][j], {\n              value: w.globals.series[i][j],\n              seriesIndex: i,\n              dataPointIndex: j,\n              w: w\n            });\n            var dataLabels = this.helpers.calculateDataLabels({\n              text: formattedText,\n              x: x1 + xDivision / 2,\n              y: y1 + yDivision / 2,\n              i: i,\n              j: j,\n              colorProps: heatColorProps,\n              series: heatSeries\n            });\n\n            if (dataLabels !== null) {\n              elSeries.add(dataLabels);\n            }\n\n            x1 = x1 + xDivision;\n          }\n\n          y1 = y1 + yDivision;\n          ret.add(elSeries);\n        } // adjust yaxis labels for heatmap\n\n\n        var yAxisScale = w.globals.yAxisScale[0].result.slice();\n\n        if (w.config.yaxis[0].reversed) {\n          yAxisScale.unshift('');\n        } else {\n          yAxisScale.push('');\n        }\n\n        w.globals.yAxisScale[0].result = yAxisScale;\n        var divisor = w.globals.gridHeight / w.globals.series.length;\n        w.config.yaxis[0].labels.offsetY = -(divisor / 2);\n        return ret;\n      }\n    }, {\n      key: \"animateHeatMap\",\n      value: function animateHeatMap(el, x, y, width, height, speed) {\n        var animations = new Animations(this.ctx);\n        animations.animateRect(el, {\n          x: x + width / 2,\n          y: y + height / 2,\n          width: 0,\n          height: 0\n        }, {\n          x: x,\n          y: y,\n          width: width,\n          height: height\n        }, speed, function () {\n          animations.animationCompleted(el);\n        });\n      }\n    }, {\n      key: \"animateHeatColor\",\n      value: function animateHeatColor(el, colorFrom, colorTo, speed) {\n        el.attr({\n          fill: colorFrom\n        }).animate(speed).attr({\n          fill: colorTo\n        });\n      }\n    }]);\n\n    return HeatMap;\n  }();\n\n  var CircularChartsHelpers = /*#__PURE__*/function () {\n    function CircularChartsHelpers(ctx) {\n      _classCallCheck(this, CircularChartsHelpers);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(CircularChartsHelpers, [{\n      key: \"drawYAxisTexts\",\n      value: function drawYAxisTexts(x, y, i, text) {\n        var w = this.w;\n        var yaxisConfig = w.config.yaxis[0];\n        var formatter = w.globals.yLabelFormatters[0];\n        var graphics = new Graphics(this.ctx);\n        var yaxisLabel = graphics.drawText({\n          x: x + yaxisConfig.labels.offsetX,\n          y: y + yaxisConfig.labels.offsetY,\n          text: formatter(text, i),\n          textAnchor: 'middle',\n          fontSize: yaxisConfig.labels.style.fontSize,\n          fontFamily: yaxisConfig.labels.style.fontFamily,\n          foreColor: Array.isArray(yaxisConfig.labels.style.colors) ? yaxisConfig.labels.style.colors[i] : yaxisConfig.labels.style.colors\n        });\n        return yaxisLabel;\n      }\n    }]);\n\n    return CircularChartsHelpers;\n  }();\n\n  /**\n   * ApexCharts Pie Class for drawing Pie / Donut Charts.\n   * @module Pie\n   **/\n\n  var Pie = /*#__PURE__*/function () {\n    function Pie(ctx) {\n      _classCallCheck(this, Pie);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      var w = this.w;\n      this.chartType = this.w.config.chart.type;\n      this.initialAnim = this.w.config.chart.animations.enabled;\n      this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n      this.animBeginArr = [0];\n      this.animDur = 0;\n      this.donutDataLabels = this.w.config.plotOptions.pie.donut.labels;\n      this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors;\n      this.defaultSize = Math.min(w.globals.gridWidth, w.globals.gridHeight);\n      this.centerY = this.defaultSize / 2;\n      this.centerX = w.globals.gridWidth / 2;\n\n      if (w.config.chart.type === 'radialBar') {\n        this.fullAngle = 360;\n      } else {\n        this.fullAngle = Math.abs(w.config.plotOptions.pie.endAngle - w.config.plotOptions.pie.startAngle);\n      }\n\n      this.initialAngle = w.config.plotOptions.pie.startAngle % this.fullAngle;\n      w.globals.radialSize = this.defaultSize / 2.05 - w.config.stroke.width - (!w.config.chart.sparkline.enabled ? w.config.chart.dropShadow.blur : 0);\n      this.donutSize = w.globals.radialSize * parseInt(w.config.plotOptions.pie.donut.size, 10) / 100;\n      this.maxY = 0;\n      this.sliceLabels = [];\n      this.sliceSizes = [];\n      this.prevSectorAngleArr = []; // for dynamic animations\n    }\n\n    _createClass(Pie, [{\n      key: \"draw\",\n      value: function draw(series) {\n        var _this = this;\n\n        var self = this;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        this.ret = graphics.group({\n          class: 'apexcharts-pie'\n        });\n        if (w.globals.noData) return this.ret;\n        var total = 0;\n\n        for (var k = 0; k < series.length; k++) {\n          // CALCULATE THE TOTAL\n          total += Utils$1.negToZero(series[k]);\n        }\n\n        var sectorAngleArr = []; // el to which series will be drawn\n\n        var elSeries = graphics.group(); // prevent division by zero error if there is no data\n\n        if (total === 0) {\n          total = 0.00001;\n        }\n\n        series.forEach(function (m) {\n          _this.maxY = Math.max(_this.maxY, m);\n        }); // override maxY if user provided in config\n\n        if (w.config.yaxis[0].max) {\n          this.maxY = w.config.yaxis[0].max;\n        }\n\n        if (w.config.grid.position === 'back' && this.chartType === 'polarArea') {\n          this.drawPolarElements(this.ret);\n        }\n\n        for (var i = 0; i < series.length; i++) {\n          // CALCULATE THE ANGLES\n          var angle = this.fullAngle * Utils$1.negToZero(series[i]) / total;\n          sectorAngleArr.push(angle);\n\n          if (this.chartType === 'polarArea') {\n            sectorAngleArr[i] = this.fullAngle / series.length;\n            this.sliceSizes.push(w.globals.radialSize * series[i] / this.maxY);\n          } else {\n            this.sliceSizes.push(w.globals.radialSize);\n          }\n        }\n\n        if (w.globals.dataChanged) {\n          var prevTotal = 0;\n\n          for (var _k = 0; _k < w.globals.previousPaths.length; _k++) {\n            // CALCULATE THE PREV TOTAL\n            prevTotal += Utils$1.negToZero(w.globals.previousPaths[_k]);\n          }\n\n          var previousAngle;\n\n          for (var _i = 0; _i < w.globals.previousPaths.length; _i++) {\n            // CALCULATE THE PREVIOUS ANGLES\n            previousAngle = this.fullAngle * Utils$1.negToZero(w.globals.previousPaths[_i]) / prevTotal;\n            this.prevSectorAngleArr.push(previousAngle);\n          }\n        } // on small chart size after few count of resizes browser window donutSize can be negative\n\n\n        if (this.donutSize < 0) {\n          this.donutSize = 0;\n        }\n\n        var scaleSize = w.config.plotOptions.pie.customScale;\n        var halfW = w.globals.gridWidth / 2;\n        var halfH = w.globals.gridHeight / 2;\n        var translateX = halfW - w.globals.gridWidth / 2 * scaleSize;\n        var translateY = halfH - w.globals.gridHeight / 2 * scaleSize;\n\n        if (this.chartType === 'donut') {\n          // draw the inner circle and add some text to it\n          var circle = graphics.drawCircle(this.donutSize);\n          circle.attr({\n            cx: this.centerX,\n            cy: this.centerY,\n            fill: w.config.plotOptions.pie.donut.background ? w.config.plotOptions.pie.donut.background : 'transparent'\n          });\n          elSeries.add(circle);\n        }\n\n        var elG = self.drawArcs(sectorAngleArr, series); // add slice dataLabels at the end\n\n        this.sliceLabels.forEach(function (s) {\n          elG.add(s);\n        });\n        elSeries.attr({\n          transform: \"translate(\".concat(translateX, \", \").concat(translateY, \") scale(\").concat(scaleSize, \")\")\n        });\n        elSeries.add(elG);\n        this.ret.add(elSeries);\n\n        if (this.donutDataLabels.show) {\n          var dataLabels = this.renderInnerDataLabels(this.donutDataLabels, {\n            hollowSize: this.donutSize,\n            centerX: this.centerX,\n            centerY: this.centerY,\n            opacity: this.donutDataLabels.show,\n            translateX: translateX,\n            translateY: translateY\n          });\n          this.ret.add(dataLabels);\n        }\n\n        if (w.config.grid.position === 'front' && this.chartType === 'polarArea') {\n          this.drawPolarElements(this.ret);\n        }\n\n        return this.ret;\n      } // core function for drawing pie arcs\n\n    }, {\n      key: \"drawArcs\",\n      value: function drawArcs(sectorAngleArr, series) {\n        var w = this.w;\n        var filters = new Filters(this.ctx);\n        var graphics = new Graphics(this.ctx);\n        var fill = new Fill(this.ctx);\n        var g = graphics.group({\n          class: 'apexcharts-slices'\n        });\n        var startAngle = this.initialAngle;\n        var prevStartAngle = this.initialAngle;\n        var endAngle = this.initialAngle;\n        var prevEndAngle = this.initialAngle;\n        this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0;\n\n        for (var i = 0; i < sectorAngleArr.length; i++) {\n          var elPieArc = graphics.group({\n            class: \"apexcharts-series apexcharts-pie-series\",\n            seriesName: Utils$1.escapeString(w.globals.seriesNames[i]),\n            rel: i + 1,\n            'data:realIndex': i\n          });\n          g.add(elPieArc);\n          startAngle = endAngle;\n          prevStartAngle = prevEndAngle;\n          endAngle = startAngle + sectorAngleArr[i];\n          prevEndAngle = prevStartAngle + this.prevSectorAngleArr[i];\n          var angle = endAngle < startAngle ? this.fullAngle + endAngle - startAngle : endAngle - startAngle;\n          var pathFill = fill.fillPath({\n            seriesNumber: i,\n            size: this.sliceSizes[i],\n            value: series[i]\n          }); // additionally, pass size for gradient drawing in the fillPath function\n\n          var path = this.getChangedPath(prevStartAngle, prevEndAngle);\n          var elPath = graphics.drawPath({\n            d: path,\n            stroke: Array.isArray(this.lineColorArr) ? this.lineColorArr[i] : this.lineColorArr,\n            strokeWidth: 0,\n            fill: pathFill,\n            fillOpacity: w.config.fill.opacity,\n            classes: \"apexcharts-pie-area apexcharts-\".concat(this.chartType.toLowerCase(), \"-slice-\").concat(i)\n          });\n          elPath.attr({\n            index: 0,\n            j: i\n          });\n          filters.setSelectionFilter(elPath, 0, i);\n\n          if (w.config.chart.dropShadow.enabled) {\n            var shadow = w.config.chart.dropShadow;\n            filters.dropShadow(elPath, shadow, i);\n          }\n\n          this.addListeners(elPath, this.donutDataLabels);\n          Graphics.setAttrs(elPath.node, {\n            'data:angle': angle,\n            'data:startAngle': startAngle,\n            'data:strokeWidth': this.strokeWidth,\n            'data:value': series[i]\n          });\n          var labelPosition = {\n            x: 0,\n            y: 0\n          };\n\n          if (this.chartType === 'pie' || this.chartType === 'polarArea') {\n            labelPosition = Utils$1.polarToCartesian(this.centerX, this.centerY, w.globals.radialSize / 1.25 + w.config.plotOptions.pie.dataLabels.offset, (startAngle + angle / 2) % this.fullAngle);\n          } else if (this.chartType === 'donut') {\n            labelPosition = Utils$1.polarToCartesian(this.centerX, this.centerY, (w.globals.radialSize + this.donutSize) / 2 + w.config.plotOptions.pie.dataLabels.offset, (startAngle + angle / 2) % this.fullAngle);\n          }\n\n          elPieArc.add(elPath); // Animation code starts\n\n          var dur = 0;\n\n          if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n            dur = angle / this.fullAngle * w.config.chart.animations.speed;\n            if (dur === 0) dur = 1;\n            this.animDur = dur + this.animDur;\n            this.animBeginArr.push(this.animDur);\n          } else {\n            this.animBeginArr.push(0);\n          }\n\n          if (this.dynamicAnim && w.globals.dataChanged) {\n            this.animatePaths(elPath, {\n              size: this.sliceSizes[i],\n              endAngle: endAngle,\n              startAngle: startAngle,\n              prevStartAngle: prevStartAngle,\n              prevEndAngle: prevEndAngle,\n              animateStartingPos: true,\n              i: i,\n              animBeginArr: this.animBeginArr,\n              shouldSetPrevPaths: true,\n              dur: w.config.chart.animations.dynamicAnimation.speed\n            });\n          } else {\n            this.animatePaths(elPath, {\n              size: this.sliceSizes[i],\n              endAngle: endAngle,\n              startAngle: startAngle,\n              i: i,\n              totalItems: sectorAngleArr.length - 1,\n              animBeginArr: this.animBeginArr,\n              dur: dur\n            });\n          } // animation code ends\n\n\n          if (w.config.plotOptions.pie.expandOnClick && this.chartType !== 'polarArea') {\n            elPath.click(this.pieClicked.bind(this, i));\n          }\n\n          if (typeof w.globals.selectedDataPoints[0] !== 'undefined' && w.globals.selectedDataPoints[0].indexOf(i) > -1) {\n            this.pieClicked(i);\n          }\n\n          if (w.config.dataLabels.enabled) {\n            var xPos = labelPosition.x;\n            var yPos = labelPosition.y;\n            var text = 100 * angle / this.fullAngle + '%';\n\n            if (angle !== 0 && w.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i]) {\n              var formatter = w.config.dataLabels.formatter;\n\n              if (formatter !== undefined) {\n                text = formatter(w.globals.seriesPercent[i][0], {\n                  seriesIndex: i,\n                  w: w\n                });\n              }\n\n              var foreColor = w.globals.dataLabels.style.colors[i];\n              var elPieLabelWrap = graphics.group({\n                class: \"apexcharts-datalabels\"\n              });\n              var elPieLabel = graphics.drawText({\n                x: xPos,\n                y: yPos,\n                text: text,\n                textAnchor: 'middle',\n                fontSize: w.config.dataLabels.style.fontSize,\n                fontFamily: w.config.dataLabels.style.fontFamily,\n                fontWeight: w.config.dataLabels.style.fontWeight,\n                foreColor: foreColor\n              });\n              elPieLabelWrap.add(elPieLabel);\n\n              if (w.config.dataLabels.dropShadow.enabled) {\n                var textShadow = w.config.dataLabels.dropShadow;\n                filters.dropShadow(elPieLabel, textShadow);\n              }\n\n              elPieLabel.node.classList.add('apexcharts-pie-label');\n\n              if (w.config.chart.animations.animate && w.globals.resized === false) {\n                elPieLabel.node.classList.add('apexcharts-pie-label-delay');\n                elPieLabel.node.style.animationDelay = w.config.chart.animations.speed / 940 + 's';\n              }\n\n              this.sliceLabels.push(elPieLabelWrap);\n            }\n          }\n        }\n\n        return g;\n      }\n    }, {\n      key: \"addListeners\",\n      value: function addListeners(elPath, dataLabels) {\n        var graphics = new Graphics(this.ctx); // append filters on mouseenter and mouseleave\n\n        elPath.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, elPath));\n        elPath.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, elPath));\n        elPath.node.addEventListener('mouseleave', this.revertDataLabelsInner.bind(this, elPath.node, dataLabels));\n        elPath.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, elPath));\n\n        if (!this.donutDataLabels.total.showAlways) {\n          elPath.node.addEventListener('mouseenter', this.printDataLabelsInner.bind(this, elPath.node, dataLabels));\n          elPath.node.addEventListener('mousedown', this.printDataLabelsInner.bind(this, elPath.node, dataLabels));\n        }\n      } // This function can be used for other circle charts too\n\n    }, {\n      key: \"animatePaths\",\n      value: function animatePaths(el, opts) {\n        var w = this.w;\n        var me = this;\n        var angle = opts.endAngle < opts.startAngle ? this.fullAngle + opts.endAngle - opts.startAngle : opts.endAngle - opts.startAngle;\n        var prevAngle = angle;\n        var fromStartAngle = opts.startAngle;\n        var toStartAngle = opts.startAngle;\n\n        if (opts.prevStartAngle !== undefined && opts.prevEndAngle !== undefined) {\n          fromStartAngle = opts.prevEndAngle;\n          prevAngle = opts.prevEndAngle < opts.prevStartAngle ? this.fullAngle + opts.prevEndAngle - opts.prevStartAngle : opts.prevEndAngle - opts.prevStartAngle;\n        }\n\n        if (opts.i === w.config.series.length - 1) {\n          // some adjustments for the last overlapping paths\n          if (angle + toStartAngle > this.fullAngle) {\n            opts.endAngle = opts.endAngle - (angle + toStartAngle);\n          } else if (angle + toStartAngle < this.fullAngle) {\n            opts.endAngle = opts.endAngle + (this.fullAngle - (angle + toStartAngle));\n          }\n        }\n\n        if (angle === this.fullAngle) angle = this.fullAngle - 0.01;\n        me.animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts);\n      }\n    }, {\n      key: \"animateArc\",\n      value: function animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts) {\n        var me = this;\n        var w = this.w;\n        var animations = new Animations(this.ctx);\n        var size = opts.size;\n        var path;\n\n        if (isNaN(fromStartAngle) || isNaN(prevAngle)) {\n          fromStartAngle = toStartAngle;\n          prevAngle = angle;\n          opts.dur = 0;\n        }\n\n        var currAngle = angle;\n        var startAngle = toStartAngle;\n        var fromAngle = fromStartAngle < toStartAngle ? this.fullAngle + fromStartAngle - toStartAngle : fromStartAngle - toStartAngle;\n\n        if (w.globals.dataChanged && opts.shouldSetPrevPaths) {\n          // to avoid flicker when updating, set prev path first and then animate from there\n          if (opts.prevEndAngle) {\n            path = me.getPiePath({\n              me: me,\n              startAngle: opts.prevStartAngle,\n              angle: opts.prevEndAngle < opts.prevStartAngle ? this.fullAngle + opts.prevEndAngle - opts.prevStartAngle : opts.prevEndAngle - opts.prevStartAngle,\n              size: size\n            });\n            el.attr({\n              d: path\n            });\n          }\n        }\n\n        if (opts.dur !== 0) {\n          el.animate(opts.dur, w.globals.easing, opts.animBeginArr[opts.i]).afterAll(function () {\n            if (me.chartType === 'pie' || me.chartType === 'donut' || me.chartType === 'polarArea') {\n              this.animate(w.config.chart.animations.dynamicAnimation.speed).attr({\n                'stroke-width': me.strokeWidth\n              });\n            }\n\n            if (opts.i === w.config.series.length - 1) {\n              animations.animationCompleted(el);\n            }\n          }).during(function (pos) {\n            currAngle = fromAngle + (angle - fromAngle) * pos;\n\n            if (opts.animateStartingPos) {\n              currAngle = prevAngle + (angle - prevAngle) * pos;\n              startAngle = fromStartAngle - prevAngle + (toStartAngle - (fromStartAngle - prevAngle)) * pos;\n            }\n\n            path = me.getPiePath({\n              me: me,\n              startAngle: startAngle,\n              angle: currAngle,\n              size: size\n            });\n            el.node.setAttribute('data:pathOrig', path);\n            el.attr({\n              d: path\n            });\n          });\n        } else {\n          path = me.getPiePath({\n            me: me,\n            startAngle: startAngle,\n            angle: angle,\n            size: size\n          });\n\n          if (!opts.isTrack) {\n            w.globals.animationEnded = true;\n          }\n\n          el.node.setAttribute('data:pathOrig', path);\n          el.attr({\n            d: path,\n            'stroke-width': me.strokeWidth\n          });\n        }\n      }\n    }, {\n      key: \"pieClicked\",\n      value: function pieClicked(i) {\n        var w = this.w;\n        var me = this;\n        var path;\n        var size = me.sliceSizes[i] + (w.config.plotOptions.pie.expandOnClick ? 4 : 0);\n        var elPath = w.globals.dom.Paper.select(\".apexcharts-\".concat(me.chartType.toLowerCase(), \"-slice-\").concat(i)).members[0];\n\n        if (elPath.attr('data:pieClicked') === 'true') {\n          elPath.attr({\n            'data:pieClicked': 'false'\n          });\n          this.revertDataLabelsInner(elPath.node, this.donutDataLabels);\n          var origPath = elPath.attr('data:pathOrig');\n          elPath.attr({\n            d: origPath\n          });\n          return;\n        } else {\n          // reset all elems\n          var allEls = w.globals.dom.baseEl.getElementsByClassName('apexcharts-pie-area');\n          Array.prototype.forEach.call(allEls, function (pieSlice) {\n            pieSlice.setAttribute('data:pieClicked', 'false');\n            var origPath = pieSlice.getAttribute('data:pathOrig');\n\n            if (origPath) {\n              pieSlice.setAttribute('d', origPath);\n            }\n          });\n          elPath.attr('data:pieClicked', 'true');\n        }\n\n        var startAngle = parseInt(elPath.attr('data:startAngle'), 10);\n        var angle = parseInt(elPath.attr('data:angle'), 10);\n        path = me.getPiePath({\n          me: me,\n          startAngle: startAngle,\n          angle: angle,\n          size: size\n        });\n        if (angle === 360) return;\n        elPath.plot(path);\n      }\n    }, {\n      key: \"getChangedPath\",\n      value: function getChangedPath(prevStartAngle, prevEndAngle) {\n        var path = '';\n\n        if (this.dynamicAnim && this.w.globals.dataChanged) {\n          path = this.getPiePath({\n            me: this,\n            startAngle: prevStartAngle,\n            angle: prevEndAngle - prevStartAngle,\n            size: this.size\n          });\n        }\n\n        return path;\n      }\n    }, {\n      key: \"getPiePath\",\n      value: function getPiePath(_ref) {\n        var me = _ref.me,\n            startAngle = _ref.startAngle,\n            angle = _ref.angle,\n            size = _ref.size;\n        var path;\n        var startDeg = startAngle;\n        var startRadians = Math.PI * (startDeg - 90) / 180;\n        var endDeg = angle + startAngle; // prevent overlap\n\n        if (Math.ceil(endDeg) >= this.fullAngle + this.w.config.plotOptions.pie.startAngle % this.fullAngle) {\n          endDeg = this.fullAngle + this.w.config.plotOptions.pie.startAngle % this.fullAngle - 0.01;\n        }\n\n        if (Math.ceil(endDeg) > this.fullAngle) endDeg -= this.fullAngle;\n        var endRadians = Math.PI * (endDeg - 90) / 180;\n        var x1 = me.centerX + size * Math.cos(startRadians);\n        var y1 = me.centerY + size * Math.sin(startRadians);\n        var x2 = me.centerX + size * Math.cos(endRadians);\n        var y2 = me.centerY + size * Math.sin(endRadians);\n        var startInner = Utils$1.polarToCartesian(me.centerX, me.centerY, me.donutSize, endDeg);\n        var endInner = Utils$1.polarToCartesian(me.centerX, me.centerY, me.donutSize, startDeg);\n        var largeArc = angle > 180 ? 1 : 0;\n        var pathBeginning = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2];\n\n        if (me.chartType === 'donut') {\n          path = [].concat(pathBeginning, ['L', startInner.x, startInner.y, 'A', me.donutSize, me.donutSize, 0, largeArc, 0, endInner.x, endInner.y, 'L', x1, y1, 'z']).join(' ');\n        } else if (me.chartType === 'pie' || me.chartType === 'polarArea') {\n          path = [].concat(pathBeginning, ['L', me.centerX, me.centerY, 'L', x1, y1]).join(' ');\n        } else {\n          path = [].concat(pathBeginning).join(' ');\n        }\n\n        return path;\n      }\n    }, {\n      key: \"drawPolarElements\",\n      value: function drawPolarElements(parent) {\n        var w = this.w;\n        var scale = new Range$1(this.ctx);\n        var graphics = new Graphics(this.ctx);\n        var helpers = new CircularChartsHelpers(this.ctx);\n        var gCircles = graphics.group();\n        var gYAxis = graphics.group();\n        var yScale = scale.niceScale(0, Math.ceil(this.maxY), w.config.yaxis[0].tickAmount, 0, true);\n        var yTexts = yScale.result.reverse();\n        var len = yScale.result.length;\n        this.maxY = yScale.niceMax;\n        var circleSize = w.globals.radialSize;\n        var diff = circleSize / (len - 1);\n\n        for (var i = 0; i < len - 1; i++) {\n          var circle = graphics.drawCircle(circleSize);\n          circle.attr({\n            cx: this.centerX,\n            cy: this.centerY,\n            fill: 'none',\n            'stroke-width': w.config.plotOptions.polarArea.rings.strokeWidth,\n            stroke: w.config.plotOptions.polarArea.rings.strokeColor\n          });\n\n          if (w.config.yaxis[0].show) {\n            var yLabel = helpers.drawYAxisTexts(this.centerX, this.centerY - circleSize + parseInt(w.config.yaxis[0].labels.style.fontSize, 10) / 2, i, yTexts[i]);\n            gYAxis.add(yLabel);\n          }\n\n          gCircles.add(circle);\n          circleSize = circleSize - diff;\n        }\n\n        this.drawSpokes(parent);\n        parent.add(gCircles);\n        parent.add(gYAxis);\n      }\n    }, {\n      key: \"renderInnerDataLabels\",\n      value: function renderInnerDataLabels(dataLabelsConfig, opts) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var g = graphics.group({\n          class: 'apexcharts-datalabels-group',\n          transform: \"translate(\".concat(opts.translateX ? opts.translateX : 0, \", \").concat(opts.translateY ? opts.translateY : 0, \") scale(\").concat(w.config.plotOptions.pie.customScale, \")\")\n        });\n        var showTotal = dataLabelsConfig.total.show;\n        g.node.style.opacity = opts.opacity;\n        var x = opts.centerX;\n        var y = opts.centerY;\n        var labelColor, valueColor;\n\n        if (dataLabelsConfig.name.color === undefined) {\n          labelColor = w.globals.colors[0];\n        } else {\n          labelColor = dataLabelsConfig.name.color;\n        }\n\n        var labelFontSize = dataLabelsConfig.name.fontSize;\n        var labelFontFamily = dataLabelsConfig.name.fontFamily;\n        var labelFontWeight = dataLabelsConfig.name.fontWeight;\n\n        if (dataLabelsConfig.value.color === undefined) {\n          valueColor = w.config.chart.foreColor;\n        } else {\n          valueColor = dataLabelsConfig.value.color;\n        }\n\n        var lbFormatter = dataLabelsConfig.value.formatter;\n        var val = '';\n        var name = '';\n\n        if (showTotal) {\n          labelColor = dataLabelsConfig.total.color;\n          labelFontSize = dataLabelsConfig.total.fontSize;\n          labelFontFamily = dataLabelsConfig.total.fontFamily;\n          labelFontWeight = dataLabelsConfig.total.fontWeight;\n          name = dataLabelsConfig.total.label;\n          val = dataLabelsConfig.total.formatter(w);\n        } else {\n          if (w.globals.series.length === 1) {\n            val = lbFormatter(w.globals.series[0], w);\n            name = w.globals.seriesNames[0];\n          }\n        }\n\n        if (name) {\n          name = dataLabelsConfig.name.formatter(name, dataLabelsConfig.total.show, w);\n        }\n\n        if (dataLabelsConfig.name.show) {\n          var elLabel = graphics.drawText({\n            x: x,\n            y: y + parseFloat(dataLabelsConfig.name.offsetY),\n            text: name,\n            textAnchor: 'middle',\n            foreColor: labelColor,\n            fontSize: labelFontSize,\n            fontWeight: labelFontWeight,\n            fontFamily: labelFontFamily\n          });\n          elLabel.node.classList.add('apexcharts-datalabel-label');\n          g.add(elLabel);\n        }\n\n        if (dataLabelsConfig.value.show) {\n          var valOffset = dataLabelsConfig.name.show ? parseFloat(dataLabelsConfig.value.offsetY) + 16 : dataLabelsConfig.value.offsetY;\n          var elValue = graphics.drawText({\n            x: x,\n            y: y + valOffset,\n            text: val,\n            textAnchor: 'middle',\n            foreColor: valueColor,\n            fontWeight: dataLabelsConfig.value.fontWeight,\n            fontSize: dataLabelsConfig.value.fontSize,\n            fontFamily: dataLabelsConfig.value.fontFamily\n          });\n          elValue.node.classList.add('apexcharts-datalabel-value');\n          g.add(elValue);\n        } // for a multi-series circle chart, we need to show total value instead of first series labels\n\n\n        return g;\n      }\n      /**\n       *\n       * @param {string} name - The name of the series\n       * @param {string} val - The value of that series\n       * @param {object} el - Optional el (indicates which series was hovered/clicked). If this param is not present, means we need to show total\n       */\n\n    }, {\n      key: \"printInnerLabels\",\n      value: function printInnerLabels(labelsConfig, name, val, el) {\n        var w = this.w;\n        var labelColor;\n\n        if (el) {\n          if (labelsConfig.name.color === undefined) {\n            labelColor = w.globals.colors[parseInt(el.parentNode.getAttribute('rel'), 10) - 1];\n          } else {\n            labelColor = labelsConfig.name.color;\n          }\n        } else {\n          if (w.globals.series.length > 1 && labelsConfig.total.show) {\n            labelColor = labelsConfig.total.color;\n          }\n        }\n\n        var elLabel = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-label');\n        var elValue = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-value');\n        var lbFormatter = labelsConfig.value.formatter;\n        val = lbFormatter(val, w); // we need to show Total Val - so get the formatter of it\n\n        if (!el && typeof labelsConfig.total.formatter === 'function') {\n          val = labelsConfig.total.formatter(w);\n        }\n\n        var isTotal = name === labelsConfig.total.label;\n        name = labelsConfig.name.formatter(name, isTotal, w);\n\n        if (elLabel !== null) {\n          elLabel.textContent = name;\n        }\n\n        if (elValue !== null) {\n          elValue.textContent = val;\n        }\n\n        if (elLabel !== null) {\n          elLabel.style.fill = labelColor;\n        }\n      }\n    }, {\n      key: \"printDataLabelsInner\",\n      value: function printDataLabelsInner(el, dataLabelsConfig) {\n        var w = this.w;\n        var val = el.getAttribute('data:value');\n        var name = w.globals.seriesNames[parseInt(el.parentNode.getAttribute('rel'), 10) - 1];\n\n        if (w.globals.series.length > 1) {\n          this.printInnerLabels(dataLabelsConfig, name, val, el);\n        }\n\n        var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group');\n\n        if (dataLabelsGroup !== null) {\n          dataLabelsGroup.style.opacity = 1;\n        }\n      }\n    }, {\n      key: \"drawSpokes\",\n      value: function drawSpokes(parent) {\n        var _this2 = this;\n\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var spokeConfig = w.config.plotOptions.polarArea.spokes;\n        if (spokeConfig.strokeWidth === 0) return;\n        var spokes = [];\n        var angleDivision = 360 / w.globals.series.length;\n\n        for (var i = 0; i < w.globals.series.length; i++) {\n          spokes.push(Utils$1.polarToCartesian(this.centerX, this.centerY, w.globals.radialSize, w.config.plotOptions.pie.startAngle + angleDivision * i));\n        }\n\n        spokes.forEach(function (p, i) {\n          var line = graphics.drawLine(p.x, p.y, _this2.centerX, _this2.centerY, Array.isArray(spokeConfig.connectorColors) ? spokeConfig.connectorColors[i] : spokeConfig.connectorColors);\n          parent.add(line);\n        });\n      }\n    }, {\n      key: \"revertDataLabelsInner\",\n      value: function revertDataLabelsInner(elem, dataLabelsConfig, event) {\n        var _this3 = this;\n\n        var w = this.w;\n        var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group');\n        var sliceOut = false;\n        var slices = w.globals.dom.baseEl.getElementsByClassName(\"apexcharts-pie-area\");\n\n        var selectSlice = function selectSlice(_ref2) {\n          var makeSliceOut = _ref2.makeSliceOut,\n              printLabel = _ref2.printLabel;\n          Array.prototype.forEach.call(slices, function (s) {\n            if (s.getAttribute('data:pieClicked') === 'true') {\n              if (makeSliceOut) {\n                sliceOut = true;\n              }\n\n              if (printLabel) {\n                _this3.printDataLabelsInner(s, dataLabelsConfig);\n              }\n            }\n          });\n        };\n\n        selectSlice({\n          makeSliceOut: true,\n          printLabel: false\n        });\n\n        if (dataLabelsConfig.total.show && w.globals.series.length > 1) {\n          if (sliceOut && !dataLabelsConfig.total.showAlways) {\n            selectSlice({\n              makeSliceOut: false,\n              printLabel: true\n            });\n          } else {\n            this.printInnerLabels(dataLabelsConfig, dataLabelsConfig.total.label, dataLabelsConfig.total.formatter(w));\n          }\n        } else {\n          selectSlice({\n            makeSliceOut: false,\n            printLabel: true\n          });\n\n          if (!sliceOut) {\n            if (w.globals.selectedDataPoints.length && w.globals.series.length > 1) {\n              if (w.globals.selectedDataPoints[0].length > 0) {\n                var index = w.globals.selectedDataPoints[0];\n                var el = w.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(this.chartType.toLowerCase(), \"-slice-\").concat(index));\n                this.printDataLabelsInner(el, dataLabelsConfig);\n              } else if (dataLabelsGroup && w.globals.selectedDataPoints.length && w.globals.selectedDataPoints[0].length === 0) {\n                dataLabelsGroup.style.opacity = 0;\n              }\n            } else {\n              if (dataLabelsGroup && w.globals.series.length > 1) {\n                dataLabelsGroup.style.opacity = 0;\n              }\n            }\n          }\n        }\n      }\n    }]);\n\n    return Pie;\n  }();\n\n  /**\n   * ApexCharts Radar Class for Spider/Radar Charts.\n   * @module Radar\n   **/\n\n  var Radar = /*#__PURE__*/function () {\n    function Radar(ctx) {\n      _classCallCheck(this, Radar);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.chartType = this.w.config.chart.type;\n      this.initialAnim = this.w.config.chart.animations.enabled;\n      this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n      this.animDur = 0;\n      var w = this.w;\n      this.graphics = new Graphics(this.ctx);\n      this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors;\n      this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.globals.gridHeight + w.globals.goldenPadding * 1.5 : w.globals.gridWidth;\n      this.isLog = w.config.yaxis[0].logarithmic;\n      this.coreUtils = new CoreUtils(this.ctx);\n      this.maxValue = this.isLog ? this.coreUtils.getLogVal(w.globals.maxY, 0) : w.globals.maxY;\n      this.minValue = this.isLog ? this.coreUtils.getLogVal(this.w.globals.minY, 0) : w.globals.minY;\n      this.polygons = w.config.plotOptions.radar.polygons;\n      this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0;\n      this.size = this.defaultSize / 2.1 - this.strokeWidth - w.config.chart.dropShadow.blur;\n\n      if (w.config.xaxis.labels.show) {\n        this.size = this.size - w.globals.xAxisLabelsWidth / 1.75;\n      }\n\n      if (w.config.plotOptions.radar.size !== undefined) {\n        this.size = w.config.plotOptions.radar.size;\n      }\n\n      this.dataRadiusOfPercent = [];\n      this.dataRadius = [];\n      this.angleArr = [];\n      this.yaxisLabelsTextsPos = [];\n    }\n\n    _createClass(Radar, [{\n      key: \"draw\",\n      value: function draw(series) {\n        var _this = this;\n\n        var w = this.w;\n        var fill = new Fill(this.ctx);\n        var allSeries = [];\n        var dataLabels = new DataLabels(this.ctx);\n\n        if (series.length) {\n          this.dataPointsLen = series[w.globals.maxValsInArrayIndex].length;\n        }\n\n        this.disAngle = Math.PI * 2 / this.dataPointsLen;\n        var halfW = w.globals.gridWidth / 2;\n        var halfH = w.globals.gridHeight / 2;\n        var translateX = halfW + w.config.plotOptions.radar.offsetX;\n        var translateY = halfH + w.config.plotOptions.radar.offsetY;\n        var ret = this.graphics.group({\n          class: 'apexcharts-radar-series apexcharts-plot-series',\n          transform: \"translate(\".concat(translateX || 0, \", \").concat(translateY || 0, \")\")\n        });\n        var dataPointsPos = [];\n        var elPointsMain = null;\n        var elDataPointsMain = null;\n        this.yaxisLabels = this.graphics.group({\n          class: 'apexcharts-yaxis'\n        });\n        series.forEach(function (s, i) {\n          var longestSeries = s.length === w.globals.dataPoints; // el to which series will be drawn\n\n          var elSeries = _this.graphics.group().attr({\n            class: \"apexcharts-series\",\n            'data:longestSeries': longestSeries,\n            seriesName: Utils$1.escapeString(w.globals.seriesNames[i]),\n            rel: i + 1,\n            'data:realIndex': i\n          });\n\n          _this.dataRadiusOfPercent[i] = [];\n          _this.dataRadius[i] = [];\n          _this.angleArr[i] = [];\n          s.forEach(function (dv, j) {\n            var range = Math.abs(_this.maxValue - _this.minValue);\n            dv = dv + Math.abs(_this.minValue);\n\n            if (_this.isLog) {\n              dv = _this.coreUtils.getLogVal(dv, 0);\n            }\n\n            _this.dataRadiusOfPercent[i][j] = dv / range;\n            _this.dataRadius[i][j] = _this.dataRadiusOfPercent[i][j] * _this.size;\n            _this.angleArr[i][j] = j * _this.disAngle;\n          });\n          dataPointsPos = _this.getDataPointsPos(_this.dataRadius[i], _this.angleArr[i]);\n\n          var paths = _this.createPaths(dataPointsPos, {\n            x: 0,\n            y: 0\n          }); // points\n\n\n          elPointsMain = _this.graphics.group({\n            class: 'apexcharts-series-markers-wrap apexcharts-element-hidden'\n          }); // datapoints\n\n          elDataPointsMain = _this.graphics.group({\n            class: \"apexcharts-datalabels\",\n            'data:realIndex': i\n          });\n          w.globals.delayedElements.push({\n            el: elPointsMain.node,\n            index: i\n          });\n          var defaultRenderedPathOptions = {\n            i: i,\n            realIndex: i,\n            animationDelay: i,\n            initialSpeed: w.config.chart.animations.speed,\n            dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed,\n            className: \"apexcharts-radar\",\n            shouldClipToGrid: false,\n            bindEventsOnPaths: false,\n            stroke: w.globals.stroke.colors[i],\n            strokeLineCap: w.config.stroke.lineCap\n          };\n          var pathFrom = null;\n\n          if (w.globals.previousPaths.length > 0) {\n            pathFrom = _this.getPreviousPath(i);\n          }\n\n          for (var p = 0; p < paths.linePathsTo.length; p++) {\n            var renderedLinePath = _this.graphics.renderPaths(_objectSpread2(_objectSpread2({}, defaultRenderedPathOptions), {}, {\n              pathFrom: pathFrom === null ? paths.linePathsFrom[p] : pathFrom,\n              pathTo: paths.linePathsTo[p],\n              strokeWidth: Array.isArray(_this.strokeWidth) ? _this.strokeWidth[i] : _this.strokeWidth,\n              fill: 'none',\n              drawShadow: false\n            }));\n\n            elSeries.add(renderedLinePath);\n            var pathFill = fill.fillPath({\n              seriesNumber: i\n            });\n\n            var renderedAreaPath = _this.graphics.renderPaths(_objectSpread2(_objectSpread2({}, defaultRenderedPathOptions), {}, {\n              pathFrom: pathFrom === null ? paths.areaPathsFrom[p] : pathFrom,\n              pathTo: paths.areaPathsTo[p],\n              strokeWidth: 0,\n              fill: pathFill,\n              drawShadow: false\n            }));\n\n            if (w.config.chart.dropShadow.enabled) {\n              var filters = new Filters(_this.ctx);\n              var shadow = w.config.chart.dropShadow;\n              filters.dropShadow(renderedAreaPath, Object.assign({}, shadow, {\n                noUserSpaceOnUse: true\n              }), i);\n            }\n\n            elSeries.add(renderedAreaPath);\n          }\n\n          s.forEach(function (sj, j) {\n            var markers = new Markers(_this.ctx);\n            var opts = markers.getMarkerConfig({\n              cssClass: 'apexcharts-marker',\n              seriesIndex: i,\n              dataPointIndex: j\n            });\n\n            var point = _this.graphics.drawMarker(dataPointsPos[j].x, dataPointsPos[j].y, opts);\n\n            point.attr('rel', j);\n            point.attr('j', j);\n            point.attr('index', i);\n            point.node.setAttribute('default-marker-size', opts.pSize);\n\n            var elPointsWrap = _this.graphics.group({\n              class: 'apexcharts-series-markers'\n            });\n\n            if (elPointsWrap) {\n              elPointsWrap.add(point);\n            }\n\n            elPointsMain.add(elPointsWrap);\n            elSeries.add(elPointsMain);\n            var dataLabelsConfig = w.config.dataLabels;\n\n            if (dataLabelsConfig.enabled) {\n              var text = dataLabelsConfig.formatter(w.globals.series[i][j], {\n                seriesIndex: i,\n                dataPointIndex: j,\n                w: w\n              });\n              dataLabels.plotDataLabelsText({\n                x: dataPointsPos[j].x,\n                y: dataPointsPos[j].y,\n                text: text,\n                textAnchor: 'middle',\n                i: i,\n                j: i,\n                parent: elDataPointsMain,\n                offsetCorrection: false,\n                dataLabelsConfig: _objectSpread2({}, dataLabelsConfig)\n              });\n            }\n\n            elSeries.add(elDataPointsMain);\n          });\n          allSeries.push(elSeries);\n        });\n        this.drawPolygons({\n          parent: ret\n        });\n\n        if (w.config.xaxis.labels.show) {\n          var xaxisTexts = this.drawXAxisTexts();\n          ret.add(xaxisTexts);\n        }\n\n        allSeries.forEach(function (elS) {\n          ret.add(elS);\n        });\n        ret.add(this.yaxisLabels);\n        return ret;\n      }\n    }, {\n      key: \"drawPolygons\",\n      value: function drawPolygons(opts) {\n        var _this2 = this;\n\n        var w = this.w;\n        var parent = opts.parent;\n        var helpers = new CircularChartsHelpers(this.ctx);\n        var yaxisTexts = w.globals.yAxisScale[0].result.reverse();\n        var layers = yaxisTexts.length;\n        var radiusSizes = [];\n        var layerDis = this.size / (layers - 1);\n\n        for (var i = 0; i < layers; i++) {\n          radiusSizes[i] = layerDis * i;\n        }\n\n        radiusSizes.reverse();\n        var polygonStrings = [];\n        var lines = [];\n        radiusSizes.forEach(function (radiusSize, r) {\n          var polygon = Utils$1.getPolygonPos(radiusSize, _this2.dataPointsLen);\n          var string = '';\n          polygon.forEach(function (p, i) {\n            if (r === 0) {\n              var line = _this2.graphics.drawLine(p.x, p.y, 0, 0, Array.isArray(_this2.polygons.connectorColors) ? _this2.polygons.connectorColors[i] : _this2.polygons.connectorColors);\n\n              lines.push(line);\n            }\n\n            if (i === 0) {\n              _this2.yaxisLabelsTextsPos.push({\n                x: p.x,\n                y: p.y\n              });\n            }\n\n            string += p.x + ',' + p.y + ' ';\n          });\n          polygonStrings.push(string);\n        });\n        polygonStrings.forEach(function (p, i) {\n          var strokeColors = _this2.polygons.strokeColors;\n          var strokeWidth = _this2.polygons.strokeWidth;\n\n          var polygon = _this2.graphics.drawPolygon(p, Array.isArray(strokeColors) ? strokeColors[i] : strokeColors, Array.isArray(strokeWidth) ? strokeWidth[i] : strokeWidth, w.globals.radarPolygons.fill.colors[i]);\n\n          parent.add(polygon);\n        });\n        lines.forEach(function (l) {\n          parent.add(l);\n        });\n\n        if (w.config.yaxis[0].show) {\n          this.yaxisLabelsTextsPos.forEach(function (p, i) {\n            var yText = helpers.drawYAxisTexts(p.x, p.y, i, yaxisTexts[i]);\n\n            _this2.yaxisLabels.add(yText);\n          });\n        }\n      }\n    }, {\n      key: \"drawXAxisTexts\",\n      value: function drawXAxisTexts() {\n        var _this3 = this;\n\n        var w = this.w;\n        var xaxisLabelsConfig = w.config.xaxis.labels;\n        var elXAxisWrap = this.graphics.group({\n          class: 'apexcharts-xaxis'\n        });\n        var polygonPos = Utils$1.getPolygonPos(this.size, this.dataPointsLen);\n        w.globals.labels.forEach(function (label, i) {\n          var formatter = w.config.xaxis.labels.formatter;\n          var dataLabels = new DataLabels(_this3.ctx);\n\n          if (polygonPos[i]) {\n            var textPos = _this3.getTextPos(polygonPos[i], _this3.size);\n\n            var text = formatter(label, {\n              seriesIndex: -1,\n              dataPointIndex: i,\n              w: w\n            });\n            dataLabels.plotDataLabelsText({\n              x: textPos.newX,\n              y: textPos.newY,\n              text: text,\n              textAnchor: textPos.textAnchor,\n              i: i,\n              j: i,\n              parent: elXAxisWrap,\n              color: Array.isArray(xaxisLabelsConfig.style.colors) && xaxisLabelsConfig.style.colors[i] ? xaxisLabelsConfig.style.colors[i] : '#a8a8a8',\n              dataLabelsConfig: _objectSpread2({\n                textAnchor: textPos.textAnchor,\n                dropShadow: {\n                  enabled: false\n                }\n              }, xaxisLabelsConfig),\n              offsetCorrection: false\n            });\n          }\n        });\n        return elXAxisWrap;\n      }\n    }, {\n      key: \"createPaths\",\n      value: function createPaths(pos, origin) {\n        var _this4 = this;\n\n        var linePathsTo = [];\n        var linePathsFrom = [];\n        var areaPathsTo = [];\n        var areaPathsFrom = [];\n\n        if (pos.length) {\n          linePathsFrom = [this.graphics.move(origin.x, origin.y)];\n          areaPathsFrom = [this.graphics.move(origin.x, origin.y)];\n          var linePathTo = this.graphics.move(pos[0].x, pos[0].y);\n          var areaPathTo = this.graphics.move(pos[0].x, pos[0].y);\n          pos.forEach(function (p, i) {\n            linePathTo += _this4.graphics.line(p.x, p.y);\n            areaPathTo += _this4.graphics.line(p.x, p.y);\n\n            if (i === pos.length - 1) {\n              linePathTo += 'Z';\n              areaPathTo += 'Z';\n            }\n          });\n          linePathsTo.push(linePathTo);\n          areaPathsTo.push(areaPathTo);\n        }\n\n        return {\n          linePathsFrom: linePathsFrom,\n          linePathsTo: linePathsTo,\n          areaPathsFrom: areaPathsFrom,\n          areaPathsTo: areaPathsTo\n        };\n      }\n    }, {\n      key: \"getTextPos\",\n      value: function getTextPos(pos, polygonSize) {\n        var limit = 10;\n        var textAnchor = 'middle';\n        var newX = pos.x;\n        var newY = pos.y;\n\n        if (Math.abs(pos.x) >= limit) {\n          if (pos.x > 0) {\n            textAnchor = 'start';\n            newX += 10;\n          } else if (pos.x < 0) {\n            textAnchor = 'end';\n            newX -= 10;\n          }\n        } else {\n          textAnchor = 'middle';\n        }\n\n        if (Math.abs(pos.y) >= polygonSize - limit) {\n          if (pos.y < 0) {\n            newY -= 10;\n          } else if (pos.y > 0) {\n            newY += 10;\n          }\n        }\n\n        return {\n          textAnchor: textAnchor,\n          newX: newX,\n          newY: newY\n        };\n      }\n    }, {\n      key: \"getPreviousPath\",\n      value: function getPreviousPath(realIndex) {\n        var w = this.w;\n        var pathFrom = null;\n\n        for (var pp = 0; pp < w.globals.previousPaths.length; pp++) {\n          var gpp = w.globals.previousPaths[pp];\n\n          if (gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(realIndex, 10)) {\n            if (typeof w.globals.previousPaths[pp].paths[0] !== 'undefined') {\n              pathFrom = w.globals.previousPaths[pp].paths[0].d;\n            }\n          }\n        }\n\n        return pathFrom;\n      }\n    }, {\n      key: \"getDataPointsPos\",\n      value: function getDataPointsPos(dataRadiusArr, angleArr) {\n        var dataPointsLen = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.dataPointsLen;\n        dataRadiusArr = dataRadiusArr || [];\n        angleArr = angleArr || [];\n        var dataPointsPosArray = [];\n\n        for (var j = 0; j < dataPointsLen; j++) {\n          var curPointPos = {};\n          curPointPos.x = dataRadiusArr[j] * Math.sin(angleArr[j]);\n          curPointPos.y = -dataRadiusArr[j] * Math.cos(angleArr[j]);\n          dataPointsPosArray.push(curPointPos);\n        }\n\n        return dataPointsPosArray;\n      }\n    }]);\n\n    return Radar;\n  }();\n\n  /**\n   * ApexCharts Radial Class for drawing Circle / Semi Circle Charts.\n   * @module Radial\n   **/\n\n  var Radial = /*#__PURE__*/function (_Pie) {\n    _inherits(Radial, _Pie);\n\n    var _super = _createSuper(Radial);\n\n    function Radial(ctx) {\n      var _this;\n\n      _classCallCheck(this, Radial);\n\n      _this = _super.call(this, ctx);\n      _this.ctx = ctx;\n      _this.w = ctx.w;\n      _this.animBeginArr = [0];\n      _this.animDur = 0;\n      var w = _this.w;\n      _this.startAngle = w.config.plotOptions.radialBar.startAngle;\n      _this.endAngle = w.config.plotOptions.radialBar.endAngle;\n      _this.totalAngle = Math.abs(w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle);\n      _this.trackStartAngle = w.config.plotOptions.radialBar.track.startAngle;\n      _this.trackEndAngle = w.config.plotOptions.radialBar.track.endAngle;\n      _this.donutDataLabels = _this.w.config.plotOptions.radialBar.dataLabels;\n      _this.radialDataLabels = _this.donutDataLabels; // make a copy for easy reference\n\n      if (!_this.trackStartAngle) _this.trackStartAngle = _this.startAngle;\n      if (!_this.trackEndAngle) _this.trackEndAngle = _this.endAngle;\n      if (_this.endAngle === 360) _this.endAngle = 359.99;\n      _this.margin = parseInt(w.config.plotOptions.radialBar.track.margin, 10);\n      return _this;\n    }\n\n    _createClass(Radial, [{\n      key: \"draw\",\n      value: function draw(series) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var ret = graphics.group({\n          class: 'apexcharts-radialbar'\n        });\n        if (w.globals.noData) return ret;\n        var elSeries = graphics.group();\n        var centerY = this.defaultSize / 2;\n        var centerX = w.globals.gridWidth / 2;\n        var size = this.defaultSize / 2.05;\n\n        if (!w.config.chart.sparkline.enabled) {\n          size = size - w.config.stroke.width - w.config.chart.dropShadow.blur;\n        }\n\n        var colorArr = w.globals.fill.colors;\n\n        if (w.config.plotOptions.radialBar.track.show) {\n          var elTracks = this.drawTracks({\n            size: size,\n            centerX: centerX,\n            centerY: centerY,\n            colorArr: colorArr,\n            series: series\n          });\n          elSeries.add(elTracks);\n        }\n\n        var elG = this.drawArcs({\n          size: size,\n          centerX: centerX,\n          centerY: centerY,\n          colorArr: colorArr,\n          series: series\n        });\n        var totalAngle = 360;\n\n        if (w.config.plotOptions.radialBar.startAngle < 0) {\n          totalAngle = this.totalAngle;\n        }\n\n        var angleRatio = (360 - totalAngle) / 360;\n        w.globals.radialSize = size - size * angleRatio;\n\n        if (this.radialDataLabels.value.show) {\n          var offset = Math.max(this.radialDataLabels.value.offsetY, this.radialDataLabels.name.offsetY);\n          w.globals.radialSize += offset * angleRatio;\n        }\n\n        elSeries.add(elG.g);\n\n        if (w.config.plotOptions.radialBar.hollow.position === 'front') {\n          elG.g.add(elG.elHollow);\n\n          if (elG.dataLabels) {\n            elG.g.add(elG.dataLabels);\n          }\n        }\n\n        ret.add(elSeries);\n        return ret;\n      }\n    }, {\n      key: \"drawTracks\",\n      value: function drawTracks(opts) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var g = graphics.group({\n          class: 'apexcharts-tracks'\n        });\n        var filters = new Filters(this.ctx);\n        var fill = new Fill(this.ctx);\n        var strokeWidth = this.getStrokeWidth(opts);\n        opts.size = opts.size - strokeWidth / 2;\n\n        for (var i = 0; i < opts.series.length; i++) {\n          var elRadialBarTrack = graphics.group({\n            class: 'apexcharts-radialbar-track apexcharts-track'\n          });\n          g.add(elRadialBarTrack);\n          elRadialBarTrack.attr({\n            rel: i + 1\n          });\n          opts.size = opts.size - strokeWidth - this.margin;\n          var trackConfig = w.config.plotOptions.radialBar.track;\n          var pathFill = fill.fillPath({\n            seriesNumber: 0,\n            size: opts.size,\n            fillColors: Array.isArray(trackConfig.background) ? trackConfig.background[i] : trackConfig.background,\n            solid: true\n          });\n          var startAngle = this.trackStartAngle;\n          var endAngle = this.trackEndAngle;\n          if (Math.abs(endAngle) + Math.abs(startAngle) >= 360) endAngle = 360 - Math.abs(this.startAngle) - 0.1;\n          var elPath = graphics.drawPath({\n            d: '',\n            stroke: pathFill,\n            strokeWidth: strokeWidth * parseInt(trackConfig.strokeWidth, 10) / 100,\n            fill: 'none',\n            strokeOpacity: trackConfig.opacity,\n            classes: 'apexcharts-radialbar-area'\n          });\n\n          if (trackConfig.dropShadow.enabled) {\n            var shadow = trackConfig.dropShadow;\n            filters.dropShadow(elPath, shadow);\n          }\n\n          elRadialBarTrack.add(elPath);\n          elPath.attr('id', 'apexcharts-radialbarTrack-' + i);\n          this.animatePaths(elPath, {\n            centerX: opts.centerX,\n            centerY: opts.centerY,\n            endAngle: endAngle,\n            startAngle: startAngle,\n            size: opts.size,\n            i: i,\n            totalItems: 2,\n            animBeginArr: 0,\n            dur: 0,\n            isTrack: true,\n            easing: w.globals.easing\n          });\n        }\n\n        return g;\n      }\n    }, {\n      key: \"drawArcs\",\n      value: function drawArcs(opts) {\n        var w = this.w; // size, donutSize, centerX, centerY, colorArr, lineColorArr, sectorAngleArr, series\n\n        var graphics = new Graphics(this.ctx);\n        var fill = new Fill(this.ctx);\n        var filters = new Filters(this.ctx);\n        var g = graphics.group();\n        var strokeWidth = this.getStrokeWidth(opts);\n        opts.size = opts.size - strokeWidth / 2;\n        var hollowFillID = w.config.plotOptions.radialBar.hollow.background;\n        var hollowSize = opts.size - strokeWidth * opts.series.length - this.margin * opts.series.length - strokeWidth * parseInt(w.config.plotOptions.radialBar.track.strokeWidth, 10) / 100 / 2;\n        var hollowRadius = hollowSize - w.config.plotOptions.radialBar.hollow.margin;\n\n        if (w.config.plotOptions.radialBar.hollow.image !== undefined) {\n          hollowFillID = this.drawHollowImage(opts, g, hollowSize, hollowFillID);\n        }\n\n        var elHollow = this.drawHollow({\n          size: hollowRadius,\n          centerX: opts.centerX,\n          centerY: opts.centerY,\n          fill: hollowFillID ? hollowFillID : 'transparent'\n        });\n\n        if (w.config.plotOptions.radialBar.hollow.dropShadow.enabled) {\n          var shadow = w.config.plotOptions.radialBar.hollow.dropShadow;\n          filters.dropShadow(elHollow, shadow);\n        }\n\n        var shown = 1;\n\n        if (!this.radialDataLabels.total.show && w.globals.series.length > 1) {\n          shown = 0;\n        }\n\n        var dataLabels = null;\n\n        if (this.radialDataLabels.show) {\n          dataLabels = this.renderInnerDataLabels(this.radialDataLabels, {\n            hollowSize: hollowSize,\n            centerX: opts.centerX,\n            centerY: opts.centerY,\n            opacity: shown\n          });\n        }\n\n        if (w.config.plotOptions.radialBar.hollow.position === 'back') {\n          g.add(elHollow);\n\n          if (dataLabels) {\n            g.add(dataLabels);\n          }\n        }\n\n        var reverseLoop = false;\n\n        if (w.config.plotOptions.radialBar.inverseOrder) {\n          reverseLoop = true;\n        }\n\n        for (var i = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i >= 0 : i < opts.series.length; reverseLoop ? i-- : i++) {\n          var elRadialBarArc = graphics.group({\n            class: \"apexcharts-series apexcharts-radial-series\",\n            seriesName: Utils$1.escapeString(w.globals.seriesNames[i])\n          });\n          g.add(elRadialBarArc);\n          elRadialBarArc.attr({\n            rel: i + 1,\n            'data:realIndex': i\n          });\n          this.ctx.series.addCollapsedClassToSeries(elRadialBarArc, i);\n          opts.size = opts.size - strokeWidth - this.margin;\n          var pathFill = fill.fillPath({\n            seriesNumber: i,\n            size: opts.size,\n            value: opts.series[i]\n          });\n          var startAngle = this.startAngle;\n          var prevStartAngle = void 0; // if data exceeds 100, make it 100\n\n          var dataValue = Utils$1.negToZero(opts.series[i] > 100 ? 100 : opts.series[i]) / 100;\n          var endAngle = Math.round(this.totalAngle * dataValue) + this.startAngle;\n          var prevEndAngle = void 0;\n\n          if (w.globals.dataChanged) {\n            prevStartAngle = this.startAngle;\n            prevEndAngle = Math.round(this.totalAngle * Utils$1.negToZero(w.globals.previousPaths[i]) / 100) + prevStartAngle;\n          }\n\n          var currFullAngle = Math.abs(endAngle) + Math.abs(startAngle);\n\n          if (currFullAngle >= 360) {\n            endAngle = endAngle - 0.01;\n          }\n\n          var prevFullAngle = Math.abs(prevEndAngle) + Math.abs(prevStartAngle);\n\n          if (prevFullAngle >= 360) {\n            prevEndAngle = prevEndAngle - 0.01;\n          }\n\n          var angle = endAngle - startAngle;\n          var dashArray = Array.isArray(w.config.stroke.dashArray) ? w.config.stroke.dashArray[i] : w.config.stroke.dashArray;\n          var elPath = graphics.drawPath({\n            d: '',\n            stroke: pathFill,\n            strokeWidth: strokeWidth,\n            fill: 'none',\n            fillOpacity: w.config.fill.opacity,\n            classes: 'apexcharts-radialbar-area apexcharts-radialbar-slice-' + i,\n            strokeDashArray: dashArray\n          });\n          Graphics.setAttrs(elPath.node, {\n            'data:angle': angle,\n            'data:value': opts.series[i]\n          });\n\n          if (w.config.chart.dropShadow.enabled) {\n            var _shadow = w.config.chart.dropShadow;\n            filters.dropShadow(elPath, _shadow, i);\n          }\n\n          filters.setSelectionFilter(elPath, 0, i);\n          this.addListeners(elPath, this.radialDataLabels);\n          elRadialBarArc.add(elPath);\n          elPath.attr({\n            index: 0,\n            j: i\n          });\n          var dur = 0;\n\n          if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n            dur = w.config.chart.animations.speed;\n          }\n\n          if (w.globals.dataChanged) {\n            dur = w.config.chart.animations.dynamicAnimation.speed;\n          }\n\n          this.animDur = dur / (opts.series.length * 1.2) + this.animDur;\n          this.animBeginArr.push(this.animDur);\n          this.animatePaths(elPath, {\n            centerX: opts.centerX,\n            centerY: opts.centerY,\n            endAngle: endAngle,\n            startAngle: startAngle,\n            prevEndAngle: prevEndAngle,\n            prevStartAngle: prevStartAngle,\n            size: opts.size,\n            i: i,\n            totalItems: 2,\n            animBeginArr: this.animBeginArr,\n            dur: dur,\n            shouldSetPrevPaths: true,\n            easing: w.globals.easing\n          });\n        }\n\n        return {\n          g: g,\n          elHollow: elHollow,\n          dataLabels: dataLabels\n        };\n      }\n    }, {\n      key: \"drawHollow\",\n      value: function drawHollow(opts) {\n        var graphics = new Graphics(this.ctx);\n        var circle = graphics.drawCircle(opts.size * 2);\n        circle.attr({\n          class: 'apexcharts-radialbar-hollow',\n          cx: opts.centerX,\n          cy: opts.centerY,\n          r: opts.size,\n          fill: opts.fill\n        });\n        return circle;\n      }\n    }, {\n      key: \"drawHollowImage\",\n      value: function drawHollowImage(opts, g, hollowSize, hollowFillID) {\n        var w = this.w;\n        var fill = new Fill(this.ctx);\n        var randID = Utils$1.randomId();\n        var hollowFillImg = w.config.plotOptions.radialBar.hollow.image;\n\n        if (w.config.plotOptions.radialBar.hollow.imageClipped) {\n          fill.clippedImgArea({\n            width: hollowSize,\n            height: hollowSize,\n            image: hollowFillImg,\n            patternID: \"pattern\".concat(w.globals.cuid).concat(randID)\n          });\n          hollowFillID = \"url(#pattern\".concat(w.globals.cuid).concat(randID, \")\");\n        } else {\n          var imgWidth = w.config.plotOptions.radialBar.hollow.imageWidth;\n          var imgHeight = w.config.plotOptions.radialBar.hollow.imageHeight;\n\n          if (imgWidth === undefined && imgHeight === undefined) {\n            var image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) {\n              this.move(opts.centerX - loader.width / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - loader.height / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY);\n            });\n            g.add(image);\n          } else {\n            var _image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) {\n              this.move(opts.centerX - imgWidth / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - imgHeight / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY);\n              this.size(imgWidth, imgHeight);\n            });\n\n            g.add(_image);\n          }\n        }\n\n        return hollowFillID;\n      }\n    }, {\n      key: \"getStrokeWidth\",\n      value: function getStrokeWidth(opts) {\n        var w = this.w;\n        return opts.size * (100 - parseInt(w.config.plotOptions.radialBar.hollow.size, 10)) / 100 / (opts.series.length + 1) - this.margin;\n      }\n    }]);\n\n    return Radial;\n  }(Pie);\n\n  /**\n   * ApexCharts RangeBar Class responsible for drawing Range/Timeline Bars.\n   *\n   * @module RangeBar\n   **/\n\n  var RangeBar = /*#__PURE__*/function (_Bar) {\n    _inherits(RangeBar, _Bar);\n\n    var _super = _createSuper(RangeBar);\n\n    function RangeBar() {\n      _classCallCheck(this, RangeBar);\n\n      return _super.apply(this, arguments);\n    }\n\n    _createClass(RangeBar, [{\n      key: \"draw\",\n      value: function draw(series, seriesIndex) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        this.rangeBarOptions = this.w.config.plotOptions.rangeBar;\n        this.series = series;\n        this.seriesRangeStart = w.globals.seriesRangeStart;\n        this.seriesRangeEnd = w.globals.seriesRangeEnd;\n        this.barHelpers.initVariables(series);\n        var ret = graphics.group({\n          class: 'apexcharts-rangebar-series apexcharts-plot-series'\n        });\n\n        for (var i = 0; i < series.length; i++) {\n          var x = void 0,\n              y = void 0,\n              xDivision = void 0,\n              // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n          yDivision = void 0,\n              // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n          zeroH = void 0,\n              // zeroH is the baseline where 0 meets y axis\n          zeroW = void 0; // zeroW is the baseline where 0 meets x axis\n\n          var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn\n\n          var elSeries = graphics.group({\n            class: \"apexcharts-series\",\n            seriesName: Utils$1.escapeString(w.globals.seriesNames[realIndex]),\n            rel: i + 1,\n            'data:realIndex': realIndex\n          });\n          this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex);\n\n          if (series[i].length > 0) {\n            this.visibleI = this.visibleI + 1;\n          }\n\n          var barHeight = 0;\n          var barWidth = 0;\n\n          if (this.yRatio.length > 1) {\n            this.yaxisIndex = realIndex;\n          }\n\n          var initPositions = this.barHelpers.initialPositions();\n          y = initPositions.y;\n          zeroW = initPositions.zeroW;\n          x = initPositions.x;\n          barWidth = initPositions.barWidth;\n          barHeight = initPositions.barHeight;\n          xDivision = initPositions.xDivision;\n          yDivision = initPositions.yDivision;\n          zeroH = initPositions.zeroH; // eldatalabels\n\n          var elDataLabelsWrap = graphics.group({\n            class: 'apexcharts-datalabels',\n            'data:realIndex': realIndex\n          });\n          var elGoalsMarkers = graphics.group({\n            class: 'apexcharts-rangebar-goals-markers',\n            style: \"pointer-events: none\"\n          });\n\n          for (var j = 0; j < w.globals.dataPoints; j++) {\n            var _this$renderSeries;\n\n            var strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n            var y1 = this.seriesRangeStart[i][j];\n            var y2 = this.seriesRangeEnd[i][j];\n            var paths = null;\n            var barXPosition = null;\n            var barYPosition = null;\n            var params = {\n              x: x,\n              y: y,\n              strokeWidth: strokeWidth,\n              elSeries: elSeries\n            };\n            var seriesLen = this.seriesLen;\n\n            if (w.config.plotOptions.bar.rangeBarGroupRows) {\n              seriesLen = 1;\n            }\n\n            if (typeof w.config.series[i].data[j] === 'undefined') {\n              // no data exists for further indexes, hence we need to get out the innr loop.\n              // As we are iterating over total datapoints, there is a possiblity the series might not have data for j index\n              break;\n            }\n\n            if (this.isHorizontal) {\n              barYPosition = y + barHeight * this.visibleI;\n              var srty = (yDivision - barHeight * seriesLen) / 2;\n\n              if (w.config.series[i].data[j].x) {\n                var positions = this.detectOverlappingBars({\n                  i: i,\n                  j: j,\n                  barYPosition: barYPosition,\n                  srty: srty,\n                  barHeight: barHeight,\n                  yDivision: yDivision,\n                  initPositions: initPositions\n                });\n                barHeight = positions.barHeight;\n                barYPosition = positions.barYPosition;\n              }\n\n              paths = this.drawRangeBarPaths(_objectSpread2({\n                indexes: {\n                  i: i,\n                  j: j,\n                  realIndex: realIndex\n                },\n                barHeight: barHeight,\n                barYPosition: barYPosition,\n                zeroW: zeroW,\n                yDivision: yDivision,\n                y1: y1,\n                y2: y2\n              }, params));\n              barWidth = paths.barWidth;\n            } else {\n              if (w.globals.isXNumeric) {\n                x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2;\n              }\n\n              barXPosition = x + barWidth * this.visibleI;\n              var srtx = (xDivision - barWidth * seriesLen) / 2;\n\n              if (w.config.series[i].data[j].x) {\n                var _positions = this.detectOverlappingBars({\n                  i: i,\n                  j: j,\n                  barXPosition: barXPosition,\n                  srtx: srtx,\n                  barWidth: barWidth,\n                  xDivision: xDivision,\n                  initPositions: initPositions\n                });\n\n                barWidth = _positions.barWidth;\n                barXPosition = _positions.barXPosition;\n              }\n\n              paths = this.drawRangeColumnPaths(_objectSpread2({\n                indexes: {\n                  i: i,\n                  j: j,\n                  realIndex: realIndex\n                },\n                barWidth: barWidth,\n                barXPosition: barXPosition,\n                zeroH: zeroH,\n                xDivision: xDivision\n              }, params));\n              barHeight = paths.barHeight;\n            }\n\n            var barGoalLine = this.barHelpers.drawGoalLine({\n              barXPosition: paths.barXPosition,\n              barYPosition: barYPosition,\n              goalX: paths.goalX,\n              goalY: paths.goalY,\n              barHeight: barHeight,\n              barWidth: barWidth\n            });\n\n            if (barGoalLine) {\n              elGoalsMarkers.add(barGoalLine);\n            }\n\n            y = paths.y;\n            x = paths.x;\n            var pathFill = this.barHelpers.getPathFillColor(series, i, j, realIndex);\n            var lineFill = w.globals.stroke.colors[realIndex];\n            this.renderSeries((_this$renderSeries = {\n              realIndex: realIndex,\n              pathFill: pathFill,\n              lineFill: lineFill,\n              j: j,\n              i: i,\n              x: x,\n              y: y,\n              y1: y1,\n              y2: y2,\n              pathFrom: paths.pathFrom,\n              pathTo: paths.pathTo,\n              strokeWidth: strokeWidth,\n              elSeries: elSeries,\n              series: series,\n              barHeight: barHeight,\n              barWidth: barWidth,\n              barXPosition: barXPosition,\n              barYPosition: barYPosition\n            }, _defineProperty(_this$renderSeries, \"barWidth\", barWidth), _defineProperty(_this$renderSeries, \"elDataLabelsWrap\", elDataLabelsWrap), _defineProperty(_this$renderSeries, \"elGoalsMarkers\", elGoalsMarkers), _defineProperty(_this$renderSeries, \"visibleSeries\", this.visibleI), _defineProperty(_this$renderSeries, \"type\", 'rangebar'), _this$renderSeries));\n          }\n\n          ret.add(elSeries);\n        }\n\n        return ret;\n      }\n    }, {\n      key: \"detectOverlappingBars\",\n      value: function detectOverlappingBars(_ref) {\n        var i = _ref.i,\n            j = _ref.j,\n            barYPosition = _ref.barYPosition,\n            barXPosition = _ref.barXPosition,\n            srty = _ref.srty,\n            srtx = _ref.srtx,\n            barHeight = _ref.barHeight,\n            barWidth = _ref.barWidth,\n            yDivision = _ref.yDivision,\n            xDivision = _ref.xDivision,\n            initPositions = _ref.initPositions;\n        var w = this.w;\n        var overlaps = [];\n        var rangeName = w.config.series[i].data[j].rangeName;\n        var x = w.config.series[i].data[j].x;\n        var labelX = Array.isArray(x) ? x.join(' ') : x;\n        var rowIndex = w.globals.labels.map(function (_) {\n          return Array.isArray(_) ? _.join(' ') : _;\n        }).indexOf(labelX);\n        var overlappedIndex = w.globals.seriesRange[i].findIndex(function (tx) {\n          return tx.x === labelX && tx.overlaps.length > 0;\n        });\n\n        if (this.isHorizontal) {\n          if (w.config.plotOptions.bar.rangeBarGroupRows) {\n            barYPosition = srty + yDivision * rowIndex;\n          } else {\n            barYPosition = srty + barHeight * this.visibleI + yDivision * rowIndex;\n          }\n\n          if (overlappedIndex > -1 && !w.config.plotOptions.bar.rangeBarOverlap) {\n            overlaps = w.globals.seriesRange[i][overlappedIndex].overlaps;\n\n            if (overlaps.indexOf(rangeName) > -1) {\n              barHeight = initPositions.barHeight / overlaps.length;\n              barYPosition = barHeight * this.visibleI + yDivision * (100 - parseInt(this.barOptions.barHeight, 10)) / 100 / 2 + barHeight * (this.visibleI + overlaps.indexOf(rangeName)) + yDivision * rowIndex;\n            }\n          }\n        } else {\n          if (rowIndex > -1) {\n            if (w.config.plotOptions.bar.rangeBarGroupRows) {\n              barXPosition = srtx + xDivision * rowIndex;\n            } else {\n              barXPosition = srtx + barWidth * this.visibleI + xDivision * rowIndex;\n            }\n          }\n\n          if (overlappedIndex > -1 && !w.config.plotOptions.bar.rangeBarOverlap) {\n            overlaps = w.globals.seriesRange[i][overlappedIndex].overlaps;\n\n            if (overlaps.indexOf(rangeName) > -1) {\n              barWidth = initPositions.barWidth / overlaps.length;\n              barXPosition = barWidth * this.visibleI + xDivision * (100 - parseInt(this.barOptions.barWidth, 10)) / 100 / 2 + barWidth * (this.visibleI + overlaps.indexOf(rangeName)) + xDivision * rowIndex;\n            }\n          }\n        }\n\n        return {\n          barYPosition: barYPosition,\n          barXPosition: barXPosition,\n          barHeight: barHeight,\n          barWidth: barWidth\n        };\n      }\n    }, {\n      key: \"drawRangeColumnPaths\",\n      value: function drawRangeColumnPaths(_ref2) {\n        var indexes = _ref2.indexes,\n            x = _ref2.x,\n            xDivision = _ref2.xDivision,\n            barWidth = _ref2.barWidth,\n            barXPosition = _ref2.barXPosition,\n            zeroH = _ref2.zeroH;\n        var w = this.w;\n        var i = indexes.i;\n        var j = indexes.j;\n        var yRatio = this.yRatio[this.yaxisIndex];\n        var realIndex = indexes.realIndex;\n        var range = this.getRangeValue(realIndex, j);\n        var y1 = Math.min(range.start, range.end);\n        var y2 = Math.max(range.start, range.end);\n\n        if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) {\n          y1 = zeroH;\n        } else {\n          y1 = zeroH - y1 / yRatio;\n          y2 = zeroH - y2 / yRatio;\n        }\n\n        var barHeight = Math.abs(y2 - y1);\n        var paths = this.barHelpers.getColumnPaths({\n          barXPosition: barXPosition,\n          barWidth: barWidth,\n          y1: y1,\n          y2: y2,\n          strokeWidth: this.strokeWidth,\n          series: this.seriesRangeEnd,\n          realIndex: indexes.realIndex,\n          i: realIndex,\n          j: j,\n          w: w\n        });\n\n        if (!w.globals.isXNumeric) {\n          x = x + xDivision;\n        }\n\n        return {\n          pathTo: paths.pathTo,\n          pathFrom: paths.pathFrom,\n          barHeight: barHeight,\n          x: x,\n          y: y2,\n          goalY: this.barHelpers.getGoalValues('y', null, zeroH, i, j),\n          barXPosition: barXPosition\n        };\n      }\n    }, {\n      key: \"drawRangeBarPaths\",\n      value: function drawRangeBarPaths(_ref3) {\n        var indexes = _ref3.indexes,\n            y = _ref3.y,\n            y1 = _ref3.y1,\n            y2 = _ref3.y2,\n            yDivision = _ref3.yDivision,\n            barHeight = _ref3.barHeight,\n            barYPosition = _ref3.barYPosition,\n            zeroW = _ref3.zeroW;\n        var w = this.w;\n        var x1 = zeroW + y1 / this.invertedYRatio;\n        var x2 = zeroW + y2 / this.invertedYRatio;\n        var barWidth = Math.abs(x2 - x1);\n        var paths = this.barHelpers.getBarpaths({\n          barYPosition: barYPosition,\n          barHeight: barHeight,\n          x1: x1,\n          x2: x2,\n          strokeWidth: this.strokeWidth,\n          series: this.seriesRangeEnd,\n          i: indexes.realIndex,\n          realIndex: indexes.realIndex,\n          j: indexes.j,\n          w: w\n        });\n\n        if (!w.globals.isXNumeric) {\n          y = y + yDivision;\n        }\n\n        return {\n          pathTo: paths.pathTo,\n          pathFrom: paths.pathFrom,\n          barWidth: barWidth,\n          x: x2,\n          goalX: this.barHelpers.getGoalValues('x', zeroW, null, indexes.realIndex, indexes.j),\n          y: y\n        };\n      }\n    }, {\n      key: \"getRangeValue\",\n      value: function getRangeValue(i, j) {\n        var w = this.w;\n        return {\n          start: w.globals.seriesRangeStart[i][j],\n          end: w.globals.seriesRangeEnd[i][j]\n        };\n      }\n    }]);\n\n    return RangeBar;\n  }(Bar);\n\n  var Helpers = /*#__PURE__*/function () {\n    function Helpers(lineCtx) {\n      _classCallCheck(this, Helpers);\n\n      this.w = lineCtx.w;\n      this.lineCtx = lineCtx;\n    }\n\n    _createClass(Helpers, [{\n      key: \"sameValueSeriesFix\",\n      value: function sameValueSeriesFix(i, series) {\n        var w = this.w;\n\n        if (w.config.fill.type === 'gradient' || w.config.fill.type[i] === 'gradient') {\n          var coreUtils = new CoreUtils(this.lineCtx.ctx, w); // applied only to LINE chart\n          // a small adjustment to allow gradient line to draw correctly for all same values\n\n          /* #fix https://github.com/apexcharts/apexcharts.js/issues/358 */\n\n          if (coreUtils.seriesHaveSameValues(i)) {\n            var gSeries = series[i].slice();\n            gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 0.000001;\n            series[i] = gSeries;\n          }\n        }\n\n        return series;\n      }\n    }, {\n      key: \"calculatePoints\",\n      value: function calculatePoints(_ref) {\n        var series = _ref.series,\n            realIndex = _ref.realIndex,\n            x = _ref.x,\n            y = _ref.y,\n            i = _ref.i,\n            j = _ref.j,\n            prevY = _ref.prevY;\n        var w = this.w;\n        var ptX = [];\n        var ptY = [];\n\n        if (j === 0) {\n          var xPT1st = this.lineCtx.categoryAxisCorrection + w.config.markers.offsetX; // the first point for line series\n          // we need to check whether it's not a time series, because a time series may\n          // start from the middle of the x axis\n\n          if (w.globals.isXNumeric) {\n            xPT1st = (w.globals.seriesX[realIndex][0] - w.globals.minX) / this.lineCtx.xRatio + w.config.markers.offsetX;\n          } // push 2 points for the first data values\n\n\n          ptX.push(xPT1st);\n          ptY.push(Utils$1.isNumber(series[i][0]) ? prevY + w.config.markers.offsetY : null);\n          ptX.push(x + w.config.markers.offsetX);\n          ptY.push(Utils$1.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null);\n        } else {\n          ptX.push(x + w.config.markers.offsetX);\n          ptY.push(Utils$1.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null);\n        }\n\n        var pointsPos = {\n          x: ptX,\n          y: ptY\n        };\n        return pointsPos;\n      }\n    }, {\n      key: \"checkPreviousPaths\",\n      value: function checkPreviousPaths(_ref2) {\n        var pathFromLine = _ref2.pathFromLine,\n            pathFromArea = _ref2.pathFromArea,\n            realIndex = _ref2.realIndex;\n        var w = this.w;\n\n        for (var pp = 0; pp < w.globals.previousPaths.length; pp++) {\n          var gpp = w.globals.previousPaths[pp];\n\n          if ((gpp.type === 'line' || gpp.type === 'area') && gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(realIndex, 10)) {\n            if (gpp.type === 'line') {\n              this.lineCtx.appendPathFrom = false;\n              pathFromLine = w.globals.previousPaths[pp].paths[0].d;\n            } else if (gpp.type === 'area') {\n              this.lineCtx.appendPathFrom = false;\n              pathFromArea = w.globals.previousPaths[pp].paths[0].d;\n\n              if (w.config.stroke.show && w.globals.previousPaths[pp].paths[1]) {\n                pathFromLine = w.globals.previousPaths[pp].paths[1].d;\n              }\n            }\n          }\n        }\n\n        return {\n          pathFromLine: pathFromLine,\n          pathFromArea: pathFromArea\n        };\n      }\n    }, {\n      key: \"determineFirstPrevY\",\n      value: function determineFirstPrevY(_ref3) {\n        var _series$i;\n\n        var i = _ref3.i,\n            series = _ref3.series,\n            prevY = _ref3.prevY,\n            lineYPosition = _ref3.lineYPosition;\n        var w = this.w;\n\n        if (typeof ((_series$i = series[i]) === null || _series$i === void 0 ? void 0 : _series$i[0]) !== 'undefined') {\n          if (w.config.chart.stacked) {\n            if (i > 0) {\n              // 1st y value of previous series\n              lineYPosition = this.lineCtx.prevSeriesY[i - 1][0];\n            } else {\n              // the first series will not have prevY values\n              lineYPosition = this.lineCtx.zeroY;\n            }\n          } else {\n            lineYPosition = this.lineCtx.zeroY;\n          }\n\n          prevY = lineYPosition - series[i][0] / this.lineCtx.yRatio[this.lineCtx.yaxisIndex] + (this.lineCtx.isReversed ? series[i][0] / this.lineCtx.yRatio[this.lineCtx.yaxisIndex] : 0) * 2;\n        } else {\n          // the first value in the current series is null\n          if (w.config.chart.stacked && i > 0 && typeof series[i][0] === 'undefined') {\n            // check for undefined value (undefined value will occur when we clear the series while user clicks on legend to hide serieses)\n            for (var s = i - 1; s >= 0; s--) {\n              // for loop to get to 1st previous value until we get it\n              if (series[s][0] !== null && typeof series[s][0] !== 'undefined') {\n                lineYPosition = this.lineCtx.prevSeriesY[s][0];\n                prevY = lineYPosition;\n                break;\n              }\n            }\n          }\n        }\n\n        return {\n          prevY: prevY,\n          lineYPosition: lineYPosition\n        };\n      }\n    }]);\n\n    return Helpers;\n  }();\n\n  /**\n   * ApexCharts Line Class responsible for drawing Line / Area / RangeArea Charts.\n   * This class is also responsible for generating values for Bubble/Scatter charts, so need to rename it to Axis Charts to avoid confusions\n   * @module Line\n   **/\n\n  var Line = /*#__PURE__*/function () {\n    function Line(ctx, xyRatios, isPointsChart) {\n      _classCallCheck(this, Line);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.xyRatios = xyRatios;\n      this.pointsChart = !(this.w.config.chart.type !== 'bubble' && this.w.config.chart.type !== 'scatter') || isPointsChart;\n      this.scatter = new Scatter(this.ctx);\n      this.noNegatives = this.w.globals.minX === Number.MAX_VALUE;\n      this.lineHelpers = new Helpers(this);\n      this.markers = new Markers(this.ctx);\n      this.prevSeriesY = [];\n      this.categoryAxisCorrection = 0;\n      this.yaxisIndex = 0;\n    }\n\n    _createClass(Line, [{\n      key: \"draw\",\n      value: function draw(series, ctype, seriesIndex, seriesRangeEnd) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var type = w.globals.comboCharts ? ctype : w.config.chart.type;\n        var ret = graphics.group({\n          class: \"apexcharts-\".concat(type, \"-series apexcharts-plot-series\")\n        });\n        var coreUtils = new CoreUtils(this.ctx, w);\n        this.yRatio = this.xyRatios.yRatio;\n        this.zRatio = this.xyRatios.zRatio;\n        this.xRatio = this.xyRatios.xRatio;\n        this.baseLineY = this.xyRatios.baseLineY;\n        series = coreUtils.getLogSeries(series);\n        this.yRatio = coreUtils.getLogYRatios(this.yRatio); // push all series in an array, so we can draw in reverse order (for stacked charts)\n\n        var allSeries = [];\n\n        for (var i = 0; i < series.length; i++) {\n          series = this.lineHelpers.sameValueSeriesFix(i, series);\n          var realIndex = w.globals.comboCharts ? seriesIndex[i] : i;\n\n          this._initSerieVariables(series, i, realIndex);\n\n          var yArrj = []; // hold y values of current iterating series\n\n          var xArrj = []; // hold x values of current iterating series\n\n          var x = w.globals.padHorizontal + this.categoryAxisCorrection;\n          var y = 1;\n          var linePaths = [];\n          var areaPaths = [];\n          this.ctx.series.addCollapsedClassToSeries(this.elSeries, realIndex);\n\n          if (w.globals.isXNumeric && w.globals.seriesX.length > 0) {\n            x = (w.globals.seriesX[realIndex][0] - w.globals.minX) / this.xRatio;\n          }\n\n          xArrj.push(x);\n          var pX = x;\n          var pY = void 0;\n          var pY2 = void 0;\n          var prevX = pX;\n          var prevY = this.zeroY;\n          var prevY2 = this.zeroY;\n          var lineYPosition = 0; // the first value in the current series is not null or undefined\n\n          var firstPrevY = this.lineHelpers.determineFirstPrevY({\n            i: i,\n            series: series,\n            prevY: prevY,\n            lineYPosition: lineYPosition\n          });\n          prevY = firstPrevY.prevY;\n          yArrj.push(prevY);\n          pY = prevY; // y2 are needed for range-area charts\n\n          var firstPrevY2 = void 0;\n\n          if (type === 'rangeArea') {\n            firstPrevY2 = this.lineHelpers.determineFirstPrevY({\n              i: i,\n              series: seriesRangeEnd,\n              prevY: prevY2,\n              lineYPosition: lineYPosition\n            });\n            prevY2 = firstPrevY2.prevY;\n            pY2 = prevY2;\n          }\n\n          var pathsFrom = this._calculatePathsFrom({\n            type: type,\n            series: series,\n            i: i,\n            realIndex: realIndex,\n            prevX: prevX,\n            prevY: prevY,\n            prevY2: prevY2\n          });\n\n          var iteratingOpts = {\n            type: type,\n            series: series,\n            realIndex: realIndex,\n            i: i,\n            x: x,\n            y: y,\n            pX: pX,\n            pY: pY,\n            pathsFrom: pathsFrom,\n            linePaths: linePaths,\n            areaPaths: areaPaths,\n            seriesIndex: seriesIndex,\n            lineYPosition: lineYPosition,\n            xArrj: xArrj,\n            yArrj: yArrj,\n            seriesRangeEnd: seriesRangeEnd\n          };\n\n          var paths = this._iterateOverDataPoints(_objectSpread2(_objectSpread2({}, iteratingOpts), {}, {\n            iterations: type === 'rangeArea' ? series[i].length - 1 : undefined,\n            isRangeStart: true\n          }));\n\n          if (type === 'rangeArea') {\n            var pathsFrom2 = this._calculatePathsFrom({\n              series: seriesRangeEnd,\n              i: i,\n              realIndex: realIndex,\n              prevX: prevX,\n              prevY: prevY2\n            });\n\n            var rangePaths = this._iterateOverDataPoints(_objectSpread2(_objectSpread2({}, iteratingOpts), {}, {\n              series: seriesRangeEnd,\n              pY: pY2,\n              pathsFrom: pathsFrom2,\n              iterations: seriesRangeEnd[i].length - 1,\n              isRangeStart: false\n            }));\n\n            paths.linePaths[0] = rangePaths.linePath + paths.linePath;\n            paths.pathFromLine = rangePaths.pathFromLine + paths.pathFromLine;\n          }\n\n          this._handlePaths({\n            type: type,\n            realIndex: realIndex,\n            i: i,\n            paths: paths\n          });\n\n          this.elSeries.add(this.elPointsMain);\n          this.elSeries.add(this.elDataLabelsWrap);\n          allSeries.push(this.elSeries);\n        }\n\n        if (w.config.chart.stacked) {\n          for (var s = allSeries.length; s > 0; s--) {\n            ret.add(allSeries[s - 1]);\n          }\n        } else {\n          for (var _s = 0; _s < allSeries.length; _s++) {\n            ret.add(allSeries[_s]);\n          }\n        }\n\n        return ret;\n      }\n    }, {\n      key: \"_initSerieVariables\",\n      value: function _initSerieVariables(series, i, realIndex) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx); // width divided into equal parts\n\n        this.xDivision = w.globals.gridWidth / (w.globals.dataPoints - (w.config.xaxis.tickPlacement === 'on' ? 1 : 0));\n        this.strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[realIndex] : w.config.stroke.width;\n\n        if (this.yRatio.length > 1) {\n          this.yaxisIndex = realIndex;\n        }\n\n        this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; // zeroY is the 0 value in y series which can be used in negative charts\n\n        this.zeroY = w.globals.gridHeight - this.baseLineY[this.yaxisIndex] - (this.isReversed ? w.globals.gridHeight : 0) + (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0);\n        this.areaBottomY = this.zeroY;\n\n        if (this.zeroY > w.globals.gridHeight || w.config.plotOptions.area.fillTo === 'end') {\n          this.areaBottomY = w.globals.gridHeight;\n        }\n\n        this.categoryAxisCorrection = this.xDivision / 2; // el to which series will be drawn\n\n        this.elSeries = graphics.group({\n          class: \"apexcharts-series\",\n          seriesName: Utils$1.escapeString(w.globals.seriesNames[realIndex])\n        }); // points\n\n        this.elPointsMain = graphics.group({\n          class: 'apexcharts-series-markers-wrap',\n          'data:realIndex': realIndex\n        }); // eldatalabels\n\n        this.elDataLabelsWrap = graphics.group({\n          class: 'apexcharts-datalabels',\n          'data:realIndex': realIndex\n        });\n        var longestSeries = series[i].length === w.globals.dataPoints;\n        this.elSeries.attr({\n          'data:longestSeries': longestSeries,\n          rel: i + 1,\n          'data:realIndex': realIndex\n        });\n        this.appendPathFrom = true;\n      }\n    }, {\n      key: \"_calculatePathsFrom\",\n      value: function _calculatePathsFrom(_ref) {\n        var type = _ref.type,\n            series = _ref.series,\n            i = _ref.i,\n            realIndex = _ref.realIndex,\n            prevX = _ref.prevX,\n            prevY = _ref.prevY,\n            prevY2 = _ref.prevY2;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var linePath, areaPath, pathFromLine, pathFromArea;\n\n        if (series[i][0] === null) {\n          // when the first value itself is null, we need to move the pointer to a location where a null value is not found\n          for (var s = 0; s < series[i].length; s++) {\n            if (series[i][s] !== null) {\n              prevX = this.xDivision * s;\n              prevY = this.zeroY - series[i][s] / this.yRatio[this.yaxisIndex];\n              linePath = graphics.move(prevX, prevY);\n              areaPath = graphics.move(prevX, this.areaBottomY);\n              break;\n            }\n          }\n        } else {\n          linePath = graphics.move(prevX, prevY);\n\n          if (type === 'rangeArea') {\n            linePath = graphics.move(prevX, prevY2) + graphics.line(prevX, prevY);\n          }\n\n          areaPath = graphics.move(prevX, this.areaBottomY) + graphics.line(prevX, prevY);\n        }\n\n        pathFromLine = graphics.move(-1, this.zeroY) + graphics.line(-1, this.zeroY);\n        pathFromArea = graphics.move(-1, this.zeroY) + graphics.line(-1, this.zeroY);\n\n        if (w.globals.previousPaths.length > 0) {\n          var pathFrom = this.lineHelpers.checkPreviousPaths({\n            pathFromLine: pathFromLine,\n            pathFromArea: pathFromArea,\n            realIndex: realIndex\n          });\n          pathFromLine = pathFrom.pathFromLine;\n          pathFromArea = pathFrom.pathFromArea;\n        }\n\n        return {\n          prevX: prevX,\n          prevY: prevY,\n          linePath: linePath,\n          areaPath: areaPath,\n          pathFromLine: pathFromLine,\n          pathFromArea: pathFromArea\n        };\n      }\n    }, {\n      key: \"_handlePaths\",\n      value: function _handlePaths(_ref2) {\n        var type = _ref2.type,\n            realIndex = _ref2.realIndex,\n            i = _ref2.i,\n            paths = _ref2.paths;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var fill = new Fill(this.ctx); // push all current y values array to main PrevY Array\n\n        this.prevSeriesY.push(paths.yArrj); // push all x val arrays into main xArr\n\n        w.globals.seriesXvalues[realIndex] = paths.xArrj;\n        w.globals.seriesYvalues[realIndex] = paths.yArrj;\n        var forecast = w.config.forecastDataPoints;\n\n        if (forecast.count > 0 && type !== 'rangeArea') {\n          var forecastCutoff = w.globals.seriesXvalues[realIndex][w.globals.seriesXvalues[realIndex].length - forecast.count - 1];\n          var elForecastMask = graphics.drawRect(forecastCutoff, 0, w.globals.gridWidth, w.globals.gridHeight, 0);\n          w.globals.dom.elForecastMask.appendChild(elForecastMask.node);\n          var elNonForecastMask = graphics.drawRect(0, 0, forecastCutoff, w.globals.gridHeight, 0);\n          w.globals.dom.elNonForecastMask.appendChild(elNonForecastMask.node);\n        } // these elements will be shown after area path animation completes\n\n\n        if (!this.pointsChart) {\n          w.globals.delayedElements.push({\n            el: this.elPointsMain.node,\n            index: realIndex\n          });\n        }\n\n        var defaultRenderedPathOptions = {\n          i: i,\n          realIndex: realIndex,\n          animationDelay: i,\n          initialSpeed: w.config.chart.animations.speed,\n          dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed,\n          className: \"apexcharts-\".concat(type)\n        };\n\n        if (type === 'area') {\n          var pathFill = fill.fillPath({\n            seriesNumber: realIndex\n          });\n\n          for (var p = 0; p < paths.areaPaths.length; p++) {\n            var renderedPath = graphics.renderPaths(_objectSpread2(_objectSpread2({}, defaultRenderedPathOptions), {}, {\n              pathFrom: paths.pathFromArea,\n              pathTo: paths.areaPaths[p],\n              stroke: 'none',\n              strokeWidth: 0,\n              strokeLineCap: null,\n              fill: pathFill\n            }));\n            this.elSeries.add(renderedPath);\n          }\n        }\n\n        if (w.config.stroke.show && !this.pointsChart) {\n          var lineFill = null;\n\n          if (type === 'line') {\n            lineFill = fill.fillPath({\n              seriesNumber: realIndex,\n              i: i\n            });\n          } else {\n            if (w.config.stroke.fill.type === 'solid') {\n              lineFill = w.globals.stroke.colors[realIndex];\n            } else {\n              var prevFill = w.config.fill;\n              w.config.fill = w.config.stroke.fill;\n              lineFill = fill.fillPath({\n                seriesNumber: realIndex,\n                i: i\n              });\n              w.config.fill = prevFill;\n            }\n          } // range-area paths are drawn using linePaths\n\n\n          for (var _p = 0; _p < paths.linePaths.length; _p++) {\n            var _pathFill = lineFill;\n\n            if (type === 'rangeArea') {\n              _pathFill = fill.fillPath({\n                seriesNumber: realIndex\n              });\n            }\n\n            var linePathCommonOpts = _objectSpread2(_objectSpread2({}, defaultRenderedPathOptions), {}, {\n              pathFrom: paths.pathFromLine,\n              pathTo: paths.linePaths[_p],\n              stroke: lineFill,\n              strokeWidth: this.strokeWidth,\n              strokeLineCap: w.config.stroke.lineCap,\n              fill: type === 'rangeArea' ? _pathFill : 'none'\n            });\n\n            var _renderedPath = graphics.renderPaths(linePathCommonOpts);\n\n            this.elSeries.add(_renderedPath);\n\n            _renderedPath.attr('fill-rule', \"evenodd\");\n\n            if (forecast.count > 0 && type !== 'rangeArea') {\n              var renderedForecastPath = graphics.renderPaths(linePathCommonOpts);\n              renderedForecastPath.node.setAttribute('stroke-dasharray', forecast.dashArray);\n\n              if (forecast.strokeWidth) {\n                renderedForecastPath.node.setAttribute('stroke-width', forecast.strokeWidth);\n              }\n\n              this.elSeries.add(renderedForecastPath);\n              renderedForecastPath.attr('clip-path', \"url(#forecastMask\".concat(w.globals.cuid, \")\"));\n\n              _renderedPath.attr('clip-path', \"url(#nonForecastMask\".concat(w.globals.cuid, \")\"));\n            }\n          }\n        }\n      }\n    }, {\n      key: \"_iterateOverDataPoints\",\n      value: function _iterateOverDataPoints(_ref3) {\n        var type = _ref3.type,\n            series = _ref3.series,\n            iterations = _ref3.iterations,\n            realIndex = _ref3.realIndex,\n            i = _ref3.i,\n            x = _ref3.x,\n            y = _ref3.y,\n            pX = _ref3.pX,\n            pY = _ref3.pY,\n            pathsFrom = _ref3.pathsFrom,\n            linePaths = _ref3.linePaths,\n            areaPaths = _ref3.areaPaths,\n            seriesIndex = _ref3.seriesIndex,\n            lineYPosition = _ref3.lineYPosition,\n            xArrj = _ref3.xArrj,\n            yArrj = _ref3.yArrj,\n            isRangeStart = _ref3.isRangeStart,\n            seriesRangeEnd = _ref3.seriesRangeEnd;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var yRatio = this.yRatio;\n        var prevY = pathsFrom.prevY,\n            linePath = pathsFrom.linePath,\n            areaPath = pathsFrom.areaPath,\n            pathFromLine = pathsFrom.pathFromLine,\n            pathFromArea = pathsFrom.pathFromArea;\n        var minY = Utils$1.isNumber(w.globals.minYArr[realIndex]) ? w.globals.minYArr[realIndex] : w.globals.minY;\n\n        if (!iterations) {\n          iterations = w.globals.dataPoints > 1 ? w.globals.dataPoints - 1 : w.globals.dataPoints;\n        }\n\n        var y2 = y;\n\n        for (var j = 0; j < iterations; j++) {\n          var isNull = typeof series[i][j + 1] === 'undefined' || series[i][j + 1] === null;\n\n          if (w.globals.isXNumeric) {\n            var sX = w.globals.seriesX[realIndex][j + 1];\n\n            if (typeof w.globals.seriesX[realIndex][j + 1] === 'undefined') {\n              /* fix #374 */\n              sX = w.globals.seriesX[realIndex][iterations - 1];\n            }\n\n            x = (sX - w.globals.minX) / this.xRatio;\n          } else {\n            x = x + this.xDivision;\n          }\n\n          if (w.config.chart.stacked) {\n            if (i > 0 && w.globals.collapsedSeries.length < w.config.series.length - 1) {\n              // a collapsed series in a stacked bar chart may provide wrong result for the next series, hence find the prevIndex of prev series which is not collapsed - fixes apexcharts.js#1372\n              var prevIndex = function prevIndex(pi) {\n                var pii = pi;\n\n                for (var cpi = 0; cpi < w.globals.series.length; cpi++) {\n                  if (w.globals.collapsedSeriesIndices.indexOf(pi) > -1) {\n                    pii--;\n                    break;\n                  }\n                }\n\n                return pii >= 0 ? pii : 0;\n              };\n\n              lineYPosition = this.prevSeriesY[prevIndex(i - 1)][j + 1];\n            } else {\n              // the first series will not have prevY values\n              lineYPosition = this.zeroY;\n            }\n          } else {\n            lineYPosition = this.zeroY;\n          }\n\n          if (isNull) {\n            y = lineYPosition - minY / yRatio[this.yaxisIndex] + (this.isReversed ? minY / yRatio[this.yaxisIndex] : 0) * 2;\n          } else {\n            y = lineYPosition - series[i][j + 1] / yRatio[this.yaxisIndex] + (this.isReversed ? series[i][j + 1] / yRatio[this.yaxisIndex] : 0) * 2;\n\n            if (type === 'rangeArea') {\n              y2 = lineYPosition - seriesRangeEnd[i][j + 1] / yRatio[this.yaxisIndex] + (this.isReversed ? seriesRangeEnd[i][j + 1] / yRatio[this.yaxisIndex] : 0) * 2;\n            }\n          } // push current X\n\n\n          xArrj.push(x); // push current Y that will be used as next series's bottom position\n\n          yArrj.push(y);\n          var pointsPos = this.lineHelpers.calculatePoints({\n            series: series,\n            x: x,\n            y: y,\n            realIndex: realIndex,\n            i: i,\n            j: j,\n            prevY: prevY\n          });\n\n          var calculatedPaths = this._createPaths({\n            type: type,\n            series: series,\n            i: i,\n            realIndex: realIndex,\n            j: j,\n            x: x,\n            y: y,\n            y2: y2,\n            pX: pX,\n            pY: pY,\n            linePath: linePath,\n            areaPath: areaPath,\n            linePaths: linePaths,\n            areaPaths: areaPaths,\n            seriesIndex: seriesIndex,\n            isRangeStart: isRangeStart\n          });\n\n          areaPaths = calculatedPaths.areaPaths;\n          linePaths = calculatedPaths.linePaths;\n          pX = calculatedPaths.pX;\n          pY = calculatedPaths.pY;\n          areaPath = calculatedPaths.areaPath;\n          linePath = calculatedPaths.linePath;\n\n          if (this.appendPathFrom) {\n            pathFromLine = pathFromLine + graphics.line(x, this.zeroY);\n            pathFromArea = pathFromArea + graphics.line(x, this.zeroY);\n          }\n\n          this.handleNullDataPoints(series, pointsPos, i, j, realIndex);\n\n          this._handleMarkersAndLabels({\n            type: type,\n            pointsPos: pointsPos,\n            i: i,\n            j: j,\n            realIndex: realIndex,\n            isRangeStart: isRangeStart\n          });\n        }\n\n        return {\n          yArrj: yArrj,\n          xArrj: xArrj,\n          pathFromArea: pathFromArea,\n          areaPaths: areaPaths,\n          pathFromLine: pathFromLine,\n          linePaths: linePaths,\n          linePath: linePath,\n          areaPath: areaPath\n        };\n      }\n    }, {\n      key: \"_handleMarkersAndLabels\",\n      value: function _handleMarkersAndLabels(_ref4) {\n        var type = _ref4.type,\n            pointsPos = _ref4.pointsPos,\n            isRangeStart = _ref4.isRangeStart,\n            i = _ref4.i,\n            j = _ref4.j,\n            realIndex = _ref4.realIndex;\n        var w = this.w;\n        var dataLabels = new DataLabels(this.ctx);\n\n        if (!this.pointsChart) {\n          if (w.globals.series[i].length > 1) {\n            this.elPointsMain.node.classList.add('apexcharts-element-hidden');\n          }\n\n          var elPointsWrap = this.markers.plotChartMarkers(pointsPos, realIndex, j + 1);\n\n          if (elPointsWrap !== null) {\n            this.elPointsMain.add(elPointsWrap);\n          }\n        } else {\n          // scatter / bubble chart points creation\n          this.scatter.draw(this.elSeries, j, {\n            realIndex: realIndex,\n            pointsPos: pointsPos,\n            zRatio: this.zRatio,\n            elParent: this.elPointsMain\n          });\n        }\n\n        var drawnLabels = dataLabels.drawDataLabel({\n          type: type,\n          isRangeStart: isRangeStart,\n          pos: pointsPos,\n          i: realIndex,\n          j: j + 1\n        });\n\n        if (drawnLabels !== null) {\n          this.elDataLabelsWrap.add(drawnLabels);\n        }\n      }\n    }, {\n      key: \"_createPaths\",\n      value: function _createPaths(_ref5) {\n        var type = _ref5.type,\n            series = _ref5.series,\n            i = _ref5.i,\n            realIndex = _ref5.realIndex,\n            j = _ref5.j,\n            x = _ref5.x,\n            y = _ref5.y,\n            y2 = _ref5.y2,\n            pX = _ref5.pX,\n            pY = _ref5.pY,\n            linePath = _ref5.linePath,\n            areaPath = _ref5.areaPath,\n            linePaths = _ref5.linePaths,\n            areaPaths = _ref5.areaPaths,\n            seriesIndex = _ref5.seriesIndex,\n            isRangeStart = _ref5.isRangeStart;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var curve = w.config.stroke.curve;\n        var areaBottomY = this.areaBottomY;\n\n        if (Array.isArray(w.config.stroke.curve)) {\n          if (Array.isArray(seriesIndex)) {\n            curve = w.config.stroke.curve[seriesIndex[i]];\n          } else {\n            curve = w.config.stroke.curve[i];\n          }\n        } // logic of smooth curve derived from chartist\n        // CREDITS: https://gionkunz.github.io/chartist-js/\n\n\n        if (curve === 'smooth') {\n          var length = (x - pX) * 0.35;\n\n          if (w.globals.hasNullValues) {\n            if (series[i][j] !== null) {\n              if (series[i][j + 1] !== null) {\n                linePath = graphics.move(pX, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y);\n                areaPath = graphics.move(pX + 1, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y) + graphics.line(x, areaBottomY) + graphics.line(pX, areaBottomY) + 'z';\n              } else {\n                linePath = graphics.move(pX, pY);\n                areaPath = graphics.move(pX, pY) + 'z';\n              }\n            }\n\n            linePaths.push(linePath);\n            areaPaths.push(areaPath);\n          } else {\n            linePath = linePath + graphics.curve(pX + length, pY, x - length, y, x, y);\n            areaPath = areaPath + graphics.curve(pX + length, pY, x - length, y, x, y);\n          }\n\n          pX = x;\n          pY = y;\n\n          if (j === series[i].length - 2) {\n            // last loop, close path\n            areaPath = areaPath + graphics.curve(pX, pY, x, y, x, areaBottomY) + graphics.move(x, y) + 'z';\n\n            if (type === 'rangeArea' && isRangeStart) {\n              linePath = linePath + graphics.curve(pX, pY, x, y, x, y2) + graphics.move(x, y2) + 'z';\n            } else {\n              if (!w.globals.hasNullValues) {\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n              }\n            }\n          }\n        } else {\n          if (series[i][j + 1] === null) {\n            linePath = linePath + graphics.move(x, y);\n            var numericOrCatX = w.globals.isXNumeric ? (w.globals.seriesX[realIndex][j] - w.globals.minX) / this.xRatio : x - this.xDivision;\n            areaPath = areaPath + graphics.line(numericOrCatX, areaBottomY) + graphics.move(x, y) + 'z';\n          }\n\n          if (series[i][j] === null) {\n            linePath = linePath + graphics.move(x, y);\n            areaPath = areaPath + graphics.move(x, areaBottomY);\n          }\n\n          if (curve === 'stepline') {\n            linePath = linePath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V');\n            areaPath = areaPath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V');\n          } else if (curve === 'straight') {\n            linePath = linePath + graphics.line(x, y);\n            areaPath = areaPath + graphics.line(x, y);\n          }\n\n          if (j === series[i].length - 2) {\n            // last loop, close path\n            areaPath = areaPath + graphics.line(x, areaBottomY) + graphics.move(x, y) + 'z';\n\n            if (type === 'rangeArea' && isRangeStart) {\n              linePath = linePath + graphics.line(x, y2) + graphics.move(x, y2) + 'z';\n            } else {\n              linePaths.push(linePath);\n              areaPaths.push(areaPath);\n            }\n          }\n        }\n\n        return {\n          linePaths: linePaths,\n          areaPaths: areaPaths,\n          pX: pX,\n          pY: pY,\n          linePath: linePath,\n          areaPath: areaPath\n        };\n      }\n    }, {\n      key: \"handleNullDataPoints\",\n      value: function handleNullDataPoints(series, pointsPos, i, j, realIndex) {\n        var w = this.w;\n\n        if (series[i][j] === null && w.config.markers.showNullDataPoints || series[i].length === 1) {\n          // fixes apexcharts.js#1282, #1252\n          var elPointsWrap = this.markers.plotChartMarkers(pointsPos, realIndex, j + 1, this.strokeWidth - w.config.markers.strokeWidth / 2, true);\n\n          if (elPointsWrap !== null) {\n            this.elPointsMain.add(elPointsWrap);\n          }\n        }\n      }\n    }]);\n\n    return Line;\n  }();\n\n  /*\n   * treemap-squarify.js - open source implementation of squarified treemaps\n   *\n   * Treemap Squared 0.5 - Treemap Charting library\n   *\n   * https://github.com/imranghory/treemap-squared/\n   *\n   * Copyright (c) 2012 Imran Ghory (imranghory@gmail.com)\n   * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.\n   *\n   *\n   * Implementation of the squarify treemap algorithm described in:\n   *\n   * Bruls, Mark; Huizing, Kees; van Wijk, Jarke J. (2000), \"Squarified treemaps\"\n   * in de Leeuw, W.; van Liere, R., Data Visualization 2000:\n   * Proc. Joint Eurographics and IEEE TCVG Symp. on Visualization, Springer-Verlag, pp. 33–42.\n   *\n   * Paper is available online at: http://www.win.tue.nl/~vanwijk/stm.pdf\n   *\n   * The code in this file is completeley decoupled from the drawing code so it should be trivial\n   * to port it to any other vector drawing library. Given an array of datapoints this library returns\n   * an array of cartesian coordinates that represent the rectangles that make up the treemap.\n   *\n   * The library also supports multidimensional data (nested treemaps) and performs normalization on the data.\n   *\n   * See the README file for more details.\n   */\n  window.TreemapSquared = {};\n\n  (function () {\n\n    window.TreemapSquared.generate = function () {\n      function Container(xoffset, yoffset, width, height) {\n        this.xoffset = xoffset; // offset from the the top left hand corner\n\n        this.yoffset = yoffset; // ditto\n\n        this.height = height;\n        this.width = width;\n\n        this.shortestEdge = function () {\n          return Math.min(this.height, this.width);\n        }; // getCoordinates - for a row of boxes which we've placed\n        //                  return an array of their cartesian coordinates\n\n\n        this.getCoordinates = function (row) {\n          var coordinates = [];\n          var subxoffset = this.xoffset,\n              subyoffset = this.yoffset; //our offset within the container\n\n          var areawidth = sumArray(row) / this.height;\n          var areaheight = sumArray(row) / this.width;\n          var i;\n\n          if (this.width >= this.height) {\n            for (i = 0; i < row.length; i++) {\n              coordinates.push([subxoffset, subyoffset, subxoffset + areawidth, subyoffset + row[i] / areawidth]);\n              subyoffset = subyoffset + row[i] / areawidth;\n            }\n          } else {\n            for (i = 0; i < row.length; i++) {\n              coordinates.push([subxoffset, subyoffset, subxoffset + row[i] / areaheight, subyoffset + areaheight]);\n              subxoffset = subxoffset + row[i] / areaheight;\n            }\n          }\n\n          return coordinates;\n        }; // cutArea - once we've placed some boxes into an row we then need to identify the remaining area,\n        //           this function takes the area of the boxes we've placed and calculates the location and\n        //           dimensions of the remaining space and returns a container box defined by the remaining area\n\n\n        this.cutArea = function (area) {\n          var newcontainer;\n\n          if (this.width >= this.height) {\n            var areawidth = area / this.height;\n            var newwidth = this.width - areawidth;\n            newcontainer = new Container(this.xoffset + areawidth, this.yoffset, newwidth, this.height);\n          } else {\n            var areaheight = area / this.width;\n            var newheight = this.height - areaheight;\n            newcontainer = new Container(this.xoffset, this.yoffset + areaheight, this.width, newheight);\n          }\n\n          return newcontainer;\n        };\n      } // normalize - the Bruls algorithm assumes we're passing in areas that nicely fit into our\n      //             container box, this method takes our raw data and normalizes the data values into\n      //             area values so that this assumption is valid.\n\n\n      function normalize(data, area) {\n        var normalizeddata = [];\n        var sum = sumArray(data);\n        var multiplier = area / sum;\n        var i;\n\n        for (i = 0; i < data.length; i++) {\n          normalizeddata[i] = data[i] * multiplier;\n        }\n\n        return normalizeddata;\n      } // treemapMultidimensional - takes multidimensional data (aka [[23,11],[11,32]] - nested array)\n      //                           and recursively calls itself using treemapSingledimensional\n      //                           to create a patchwork of treemaps and merge them\n\n\n      function treemapMultidimensional(data, width, height, xoffset, yoffset) {\n        xoffset = typeof xoffset === 'undefined' ? 0 : xoffset;\n        yoffset = typeof yoffset === 'undefined' ? 0 : yoffset;\n        var mergeddata = [];\n        var mergedtreemap;\n        var results = [];\n        var i;\n\n        if (isArray(data[0])) {\n          // if we've got more dimensions of depth\n          for (i = 0; i < data.length; i++) {\n            mergeddata[i] = sumMultidimensionalArray(data[i]);\n          }\n\n          mergedtreemap = treemapSingledimensional(mergeddata, width, height, xoffset, yoffset);\n\n          for (i = 0; i < data.length; i++) {\n            results.push(treemapMultidimensional(data[i], mergedtreemap[i][2] - mergedtreemap[i][0], mergedtreemap[i][3] - mergedtreemap[i][1], mergedtreemap[i][0], mergedtreemap[i][1]));\n          }\n        } else {\n          results = treemapSingledimensional(data, width, height, xoffset, yoffset);\n        }\n\n        return results;\n      } // treemapSingledimensional - simple wrapper around squarify\n\n\n      function treemapSingledimensional(data, width, height, xoffset, yoffset) {\n        xoffset = typeof xoffset === 'undefined' ? 0 : xoffset;\n        yoffset = typeof yoffset === 'undefined' ? 0 : yoffset;\n        var rawtreemap = squarify(normalize(data, width * height), [], new Container(xoffset, yoffset, width, height), []);\n        return flattenTreemap(rawtreemap);\n      } // flattenTreemap - squarify implementation returns an array of arrays of coordinates\n      //                  because we have a new array everytime we switch to building a new row\n      //                  this converts it into an array of coordinates.\n\n\n      function flattenTreemap(rawtreemap) {\n        var flattreemap = [];\n        var i, j;\n\n        for (i = 0; i < rawtreemap.length; i++) {\n          for (j = 0; j < rawtreemap[i].length; j++) {\n            flattreemap.push(rawtreemap[i][j]);\n          }\n        }\n\n        return flattreemap;\n      } // squarify  - as per the Bruls paper\n      //             plus coordinates stack and containers so we get\n      //             usable data out of it\n\n\n      function squarify(data, currentrow, container, stack) {\n        var length;\n        var nextdatapoint;\n        var newcontainer;\n\n        if (data.length === 0) {\n          stack.push(container.getCoordinates(currentrow));\n          return;\n        }\n\n        length = container.shortestEdge();\n        nextdatapoint = data[0];\n\n        if (improvesRatio(currentrow, nextdatapoint, length)) {\n          currentrow.push(nextdatapoint);\n          squarify(data.slice(1), currentrow, container, stack);\n        } else {\n          newcontainer = container.cutArea(sumArray(currentrow), stack);\n          stack.push(container.getCoordinates(currentrow));\n          squarify(data, [], newcontainer, stack);\n        }\n\n        return stack;\n      } // improveRatio - implements the worse calculation and comparision as given in Bruls\n      //                (note the error in the original paper; fixed here)\n\n\n      function improvesRatio(currentrow, nextnode, length) {\n        var newrow;\n\n        if (currentrow.length === 0) {\n          return true;\n        }\n\n        newrow = currentrow.slice();\n        newrow.push(nextnode);\n        var currentratio = calculateRatio(currentrow, length);\n        var newratio = calculateRatio(newrow, length); // the pseudocode in the Bruls paper has the direction of the comparison\n        // wrong, this is the correct one.\n\n        return currentratio >= newratio;\n      } // calculateRatio - calculates the maximum width to height ratio of the\n      //                  boxes in this row\n\n\n      function calculateRatio(row, length) {\n        var min = Math.min.apply(Math, row);\n        var max = Math.max.apply(Math, row);\n        var sum = sumArray(row);\n        return Math.max(Math.pow(length, 2) * max / Math.pow(sum, 2), Math.pow(sum, 2) / (Math.pow(length, 2) * min));\n      } // isArray - checks if arr is an array\n\n\n      function isArray(arr) {\n        return arr && arr.constructor === Array;\n      } // sumArray - sums a single dimensional array\n\n\n      function sumArray(arr) {\n        var sum = 0;\n        var i;\n\n        for (i = 0; i < arr.length; i++) {\n          sum += arr[i];\n        }\n\n        return sum;\n      } // sumMultidimensionalArray - sums the values in a nested array (aka [[0,1],[[2,3]]])\n\n\n      function sumMultidimensionalArray(arr) {\n        var i,\n            total = 0;\n\n        if (isArray(arr[0])) {\n          for (i = 0; i < arr.length; i++) {\n            total += sumMultidimensionalArray(arr[i]);\n          }\n        } else {\n          total = sumArray(arr);\n        }\n\n        return total;\n      }\n\n      return treemapMultidimensional;\n    }();\n  })();\n\n  /**\n   * ApexCharts TreemapChart Class.\n   * @module TreemapChart\n   **/\n\n  var TreemapChart = /*#__PURE__*/function () {\n    function TreemapChart(ctx, xyRatios) {\n      _classCallCheck(this, TreemapChart);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.strokeWidth = this.w.config.stroke.width;\n      this.helpers = new TreemapHelpers(ctx);\n      this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation;\n      this.labels = [];\n    }\n\n    _createClass(TreemapChart, [{\n      key: \"draw\",\n      value: function draw(series) {\n        var _this = this;\n\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var fill = new Fill(this.ctx);\n        var ret = graphics.group({\n          class: 'apexcharts-treemap'\n        });\n        if (w.globals.noData) return ret;\n        var ser = [];\n        series.forEach(function (s) {\n          var d = s.map(function (v) {\n            return Math.abs(v);\n          });\n          ser.push(d);\n        });\n        this.negRange = this.helpers.checkColorRange();\n        w.config.series.forEach(function (s, i) {\n          s.data.forEach(function (l) {\n            if (!Array.isArray(_this.labels[i])) _this.labels[i] = [];\n\n            _this.labels[i].push(l.x);\n          });\n        });\n        var nodes = window.TreemapSquared.generate(ser, w.globals.gridWidth, w.globals.gridHeight);\n        nodes.forEach(function (node, i) {\n          var elSeries = graphics.group({\n            class: \"apexcharts-series apexcharts-treemap-series\",\n            seriesName: Utils$1.escapeString(w.globals.seriesNames[i]),\n            rel: i + 1,\n            'data:realIndex': i\n          });\n\n          if (w.config.chart.dropShadow.enabled) {\n            var shadow = w.config.chart.dropShadow;\n            var filters = new Filters(_this.ctx);\n            filters.dropShadow(ret, shadow, i);\n          }\n\n          var elDataLabelWrap = graphics.group({\n            class: 'apexcharts-data-labels'\n          });\n          node.forEach(function (r, j) {\n            var x1 = r[0];\n            var y1 = r[1];\n            var x2 = r[2];\n            var y2 = r[3];\n            var elRect = graphics.drawRect(x1, y1, x2 - x1, y2 - y1, 0, '#fff', 1, _this.strokeWidth, w.config.plotOptions.treemap.useFillColorAsStroke ? color : w.globals.stroke.colors[i]);\n            elRect.attr({\n              cx: x1,\n              cy: y1,\n              index: i,\n              i: i,\n              j: j,\n              width: x2 - x1,\n              height: y2 - y1\n            });\n\n            var colorProps = _this.helpers.getShadeColor(w.config.chart.type, i, j, _this.negRange);\n\n            var color = colorProps.color;\n\n            if (typeof w.config.series[i].data[j] !== 'undefined' && w.config.series[i].data[j].fillColor) {\n              color = w.config.series[i].data[j].fillColor;\n            }\n\n            var pathFill = fill.fillPath({\n              color: color,\n              seriesNumber: i,\n              dataPointIndex: j\n            });\n            elRect.node.classList.add('apexcharts-treemap-rect');\n            elRect.attr({\n              fill: pathFill\n            });\n\n            _this.helpers.addListeners(elRect);\n\n            var fromRect = {\n              x: x1 + (x2 - x1) / 2,\n              y: y1 + (y2 - y1) / 2,\n              width: 0,\n              height: 0\n            };\n            var toRect = {\n              x: x1,\n              y: y1,\n              width: x2 - x1,\n              height: y2 - y1\n            };\n\n            if (w.config.chart.animations.enabled && !w.globals.dataChanged) {\n              var speed = 1;\n\n              if (!w.globals.resized) {\n                speed = w.config.chart.animations.speed;\n              }\n\n              _this.animateTreemap(elRect, fromRect, toRect, speed);\n            }\n\n            if (w.globals.dataChanged) {\n              var _speed = 1;\n\n              if (_this.dynamicAnim.enabled && w.globals.shouldAnimate) {\n                _speed = _this.dynamicAnim.speed;\n\n                if (w.globals.previousPaths[i] && w.globals.previousPaths[i][j] && w.globals.previousPaths[i][j].rect) {\n                  fromRect = w.globals.previousPaths[i][j].rect;\n                }\n\n                _this.animateTreemap(elRect, fromRect, toRect, _speed);\n              }\n            }\n\n            var fontSize = _this.getFontSize(r);\n\n            var formattedText = w.config.dataLabels.formatter(_this.labels[i][j], {\n              value: w.globals.series[i][j],\n              seriesIndex: i,\n              dataPointIndex: j,\n              w: w\n            });\n\n            var dataLabels = _this.helpers.calculateDataLabels({\n              text: formattedText,\n              x: (x1 + x2) / 2,\n              y: (y1 + y2) / 2 + _this.strokeWidth / 2 + fontSize / 3,\n              i: i,\n              j: j,\n              colorProps: colorProps,\n              fontSize: fontSize,\n              series: series\n            });\n\n            if (w.config.dataLabels.enabled && dataLabels) {\n              _this.rotateToFitLabel(dataLabels, fontSize, formattedText, x1, y1, x2, y2);\n            }\n\n            elSeries.add(elRect);\n\n            if (dataLabels !== null) {\n              elSeries.add(dataLabels);\n            }\n          });\n          elSeries.add(elDataLabelWrap);\n          ret.add(elSeries);\n        });\n        return ret;\n      } // This calculates a font-size based upon\n      // average label length and the size of the box the label is\n      // going into. The maximum font size is set in chart config.\n\n    }, {\n      key: \"getFontSize\",\n      value: function getFontSize(coordinates) {\n        var w = this.w; // total length of labels (i.e [[\"Italy\"],[\"Spain\", \"Greece\"]] -> 16)\n\n        function totalLabelLength(arr) {\n          var i,\n              total = 0;\n\n          if (Array.isArray(arr[0])) {\n            for (i = 0; i < arr.length; i++) {\n              total += totalLabelLength(arr[i]);\n            }\n          } else {\n            for (i = 0; i < arr.length; i++) {\n              total += arr[i].length;\n            }\n          }\n\n          return total;\n        } // count of labels (i.e [[\"Italy\"],[\"Spain\", \"Greece\"]] -> 3)\n\n\n        function countLabels(arr) {\n          var i,\n              total = 0;\n\n          if (Array.isArray(arr[0])) {\n            for (i = 0; i < arr.length; i++) {\n              total += countLabels(arr[i]);\n            }\n          } else {\n            for (i = 0; i < arr.length; i++) {\n              total += 1;\n            }\n          }\n\n          return total;\n        }\n\n        var averagelabelsize = totalLabelLength(this.labels) / countLabels(this.labels);\n\n        function fontSize(width, height) {\n          // the font size should be proportional to the size of the box (and the value)\n          // otherwise you can end up creating a visual distortion where two boxes of identical\n          // size have different sized labels, and thus make it look as if the two boxes\n          // represent different sizes\n          var area = width * height;\n          var arearoot = Math.pow(area, 0.5);\n          return Math.min(arearoot / averagelabelsize, parseInt(w.config.dataLabels.style.fontSize, 10));\n        }\n\n        return fontSize(coordinates[2] - coordinates[0], coordinates[3] - coordinates[1]);\n      }\n    }, {\n      key: \"rotateToFitLabel\",\n      value: function rotateToFitLabel(elText, fontSize, text, x1, y1, x2, y2) {\n        var graphics = new Graphics(this.ctx);\n        var textRect = graphics.getTextRects(text, fontSize); //if the label fits better sideways then rotate it\n\n        if (textRect.width + this.w.config.stroke.width + 5 > x2 - x1 && textRect.width <= y2 - y1) {\n          var labelRotatingCenter = graphics.rotateAroundCenter(elText.node);\n          elText.node.setAttribute('transform', \"rotate(-90 \".concat(labelRotatingCenter.x, \" \").concat(labelRotatingCenter.y, \")\"));\n        }\n      }\n    }, {\n      key: \"animateTreemap\",\n      value: function animateTreemap(el, fromRect, toRect, speed) {\n        var animations = new Animations(this.ctx);\n        animations.animateRect(el, {\n          x: fromRect.x,\n          y: fromRect.y,\n          width: fromRect.width,\n          height: fromRect.height\n        }, {\n          x: toRect.x,\n          y: toRect.y,\n          width: toRect.width,\n          height: toRect.height\n        }, speed, function () {\n          animations.animationCompleted(el);\n        });\n      }\n    }]);\n\n    return TreemapChart;\n  }();\n\n  var MINUTES_IN_DAY = 24 * 60;\n  var SECONDS_IN_DAY = MINUTES_IN_DAY * 60;\n  var MIN_ZOOM_DAYS = 10 / SECONDS_IN_DAY;\n  /**\n   * ApexCharts TimeScale Class for generating time ticks for x-axis.\n   *\n   * @module TimeScale\n   **/\n\n  var TimeScale = /*#__PURE__*/function () {\n    function TimeScale(ctx) {\n      _classCallCheck(this, TimeScale);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.timeScaleArray = [];\n      this.utc = this.w.config.xaxis.labels.datetimeUTC;\n    }\n\n    _createClass(TimeScale, [{\n      key: \"calculateTimeScaleTicks\",\n      value: function calculateTimeScaleTicks(minX, maxX) {\n        var _this = this;\n\n        var w = this.w; // null check when no series to show\n\n        if (w.globals.allSeriesCollapsed) {\n          w.globals.labels = [];\n          w.globals.timescaleLabels = [];\n          return [];\n        }\n\n        var dt = new DateTime(this.ctx);\n        var daysDiff = (maxX - minX) / (1000 * SECONDS_IN_DAY);\n        this.determineInterval(daysDiff);\n        w.globals.disableZoomIn = false;\n        w.globals.disableZoomOut = false;\n\n        if (daysDiff < MIN_ZOOM_DAYS) {\n          w.globals.disableZoomIn = true;\n        } else if (daysDiff > 50000) {\n          w.globals.disableZoomOut = true;\n        }\n\n        var timeIntervals = dt.getTimeUnitsfromTimestamp(minX, maxX, this.utc);\n        var daysWidthOnXAxis = w.globals.gridWidth / daysDiff;\n        var hoursWidthOnXAxis = daysWidthOnXAxis / 24;\n        var minutesWidthOnXAxis = hoursWidthOnXAxis / 60;\n        var secondsWidthOnXAxis = minutesWidthOnXAxis / 60;\n        var numberOfHours = Math.floor(daysDiff * 24);\n        var numberOfMinutes = Math.floor(daysDiff * MINUTES_IN_DAY);\n        var numberOfSeconds = Math.floor(daysDiff * SECONDS_IN_DAY);\n        var numberOfDays = Math.floor(daysDiff);\n        var numberOfMonths = Math.floor(daysDiff / 30);\n        var numberOfYears = Math.floor(daysDiff / 365);\n        var firstVal = {\n          minMillisecond: timeIntervals.minMillisecond,\n          minSecond: timeIntervals.minSecond,\n          minMinute: timeIntervals.minMinute,\n          minHour: timeIntervals.minHour,\n          minDate: timeIntervals.minDate,\n          minMonth: timeIntervals.minMonth,\n          minYear: timeIntervals.minYear\n        };\n        var currentMillisecond = firstVal.minMillisecond;\n        var currentSecond = firstVal.minSecond;\n        var currentMinute = firstVal.minMinute;\n        var currentHour = firstVal.minHour;\n        var currentMonthDate = firstVal.minDate;\n        var currentDate = firstVal.minDate;\n        var currentMonth = firstVal.minMonth;\n        var currentYear = firstVal.minYear;\n        var params = {\n          firstVal: firstVal,\n          currentMillisecond: currentMillisecond,\n          currentSecond: currentSecond,\n          currentMinute: currentMinute,\n          currentHour: currentHour,\n          currentMonthDate: currentMonthDate,\n          currentDate: currentDate,\n          currentMonth: currentMonth,\n          currentYear: currentYear,\n          daysWidthOnXAxis: daysWidthOnXAxis,\n          hoursWidthOnXAxis: hoursWidthOnXAxis,\n          minutesWidthOnXAxis: minutesWidthOnXAxis,\n          secondsWidthOnXAxis: secondsWidthOnXAxis,\n          numberOfSeconds: numberOfSeconds,\n          numberOfMinutes: numberOfMinutes,\n          numberOfHours: numberOfHours,\n          numberOfDays: numberOfDays,\n          numberOfMonths: numberOfMonths,\n          numberOfYears: numberOfYears\n        };\n\n        switch (this.tickInterval) {\n          case 'years':\n            {\n              this.generateYearScale(params);\n              break;\n            }\n\n          case 'months':\n          case 'half_year':\n            {\n              this.generateMonthScale(params);\n              break;\n            }\n\n          case 'months_days':\n          case 'months_fortnight':\n          case 'days':\n          case 'week_days':\n            {\n              this.generateDayScale(params);\n              break;\n            }\n\n          case 'hours':\n            {\n              this.generateHourScale(params);\n              break;\n            }\n\n          case 'minutes_fives':\n          case 'minutes':\n            this.generateMinuteScale(params);\n            break;\n\n          case 'seconds_tens':\n          case 'seconds_fives':\n          case 'seconds':\n            this.generateSecondScale(params);\n            break;\n        } // first, we will adjust the month values index\n        // as in the upper function, it is starting from 0\n        // we will start them from 1\n\n\n        var adjustedMonthInTimeScaleArray = this.timeScaleArray.map(function (ts) {\n          var defaultReturn = {\n            position: ts.position,\n            unit: ts.unit,\n            year: ts.year,\n            day: ts.day ? ts.day : 1,\n            hour: ts.hour ? ts.hour : 0,\n            month: ts.month + 1\n          };\n\n          if (ts.unit === 'month') {\n            return _objectSpread2(_objectSpread2({}, defaultReturn), {}, {\n              day: 1,\n              value: ts.value + 1\n            });\n          } else if (ts.unit === 'day' || ts.unit === 'hour') {\n            return _objectSpread2(_objectSpread2({}, defaultReturn), {}, {\n              value: ts.value\n            });\n          } else if (ts.unit === 'minute') {\n            return _objectSpread2(_objectSpread2({}, defaultReturn), {}, {\n              value: ts.value,\n              minute: ts.value\n            });\n          } else if (ts.unit === 'second') {\n            return _objectSpread2(_objectSpread2({}, defaultReturn), {}, {\n              value: ts.value,\n              minute: ts.minute,\n              second: ts.second\n            });\n          }\n\n          return ts;\n        });\n        var filteredTimeScale = adjustedMonthInTimeScaleArray.filter(function (ts) {\n          var modulo = 1;\n          var ticks = Math.ceil(w.globals.gridWidth / 120);\n          var value = ts.value;\n\n          if (w.config.xaxis.tickAmount !== undefined) {\n            ticks = w.config.xaxis.tickAmount;\n          }\n\n          if (adjustedMonthInTimeScaleArray.length > ticks) {\n            modulo = Math.floor(adjustedMonthInTimeScaleArray.length / ticks);\n          }\n\n          var shouldNotSkipUnit = false; // there is a big change in unit i.e days to months\n\n          var shouldNotPrint = false; // should skip these values\n\n          switch (_this.tickInterval) {\n            case 'years':\n              // make years label denser\n              if (ts.unit === 'year') {\n                shouldNotSkipUnit = true;\n              }\n\n              break;\n\n            case 'half_year':\n              modulo = 7;\n\n              if (ts.unit === 'year') {\n                shouldNotSkipUnit = true;\n              }\n\n              break;\n\n            case 'months':\n              modulo = 1;\n\n              if (ts.unit === 'year') {\n                shouldNotSkipUnit = true;\n              }\n\n              break;\n\n            case 'months_fortnight':\n              modulo = 15;\n\n              if (ts.unit === 'year' || ts.unit === 'month') {\n                shouldNotSkipUnit = true;\n              }\n\n              if (value === 30) {\n                shouldNotPrint = true;\n              }\n\n              break;\n\n            case 'months_days':\n              modulo = 10;\n\n              if (ts.unit === 'month') {\n                shouldNotSkipUnit = true;\n              }\n\n              if (value === 30) {\n                shouldNotPrint = true;\n              }\n\n              break;\n\n            case 'week_days':\n              modulo = 8;\n\n              if (ts.unit === 'month') {\n                shouldNotSkipUnit = true;\n              }\n\n              break;\n\n            case 'days':\n              modulo = 1;\n\n              if (ts.unit === 'month') {\n                shouldNotSkipUnit = true;\n              }\n\n              break;\n\n            case 'hours':\n              if (ts.unit === 'day') {\n                shouldNotSkipUnit = true;\n              }\n\n              break;\n\n            case 'minutes_fives':\n              if (value % 5 !== 0) {\n                shouldNotPrint = true;\n              }\n\n              break;\n\n            case 'seconds_tens':\n              if (value % 10 !== 0) {\n                shouldNotPrint = true;\n              }\n\n              break;\n\n            case 'seconds_fives':\n              if (value % 5 !== 0) {\n                shouldNotPrint = true;\n              }\n\n              break;\n          }\n\n          if (_this.tickInterval === 'hours' || _this.tickInterval === 'minutes_fives' || _this.tickInterval === 'seconds_tens' || _this.tickInterval === 'seconds_fives') {\n            if (!shouldNotPrint) {\n              return true;\n            }\n          } else {\n            if ((value % modulo === 0 || shouldNotSkipUnit) && !shouldNotPrint) {\n              return true;\n            }\n          }\n        });\n        return filteredTimeScale;\n      }\n    }, {\n      key: \"recalcDimensionsBasedOnFormat\",\n      value: function recalcDimensionsBasedOnFormat(filteredTimeScale, inverted) {\n        var w = this.w;\n        var reformattedTimescaleArray = this.formatDates(filteredTimeScale);\n        var removedOverlappingTS = this.removeOverlappingTS(reformattedTimescaleArray);\n        w.globals.timescaleLabels = removedOverlappingTS.slice(); // at this stage, we need to re-calculate coords of the grid as timeline labels may have altered the xaxis labels coords\n        // The reason we can't do this prior to this stage is because timeline labels depends on gridWidth, and as the ticks are calculated based on available gridWidth, there can be unknown number of ticks generated for different minX and maxX\n        // Dependency on Dimensions(), need to refactor correctly\n        // TODO - find an alternate way to avoid calling this Heavy method twice\n\n        var dimensions = new Dimensions(this.ctx);\n        dimensions.plotCoords();\n      }\n    }, {\n      key: \"determineInterval\",\n      value: function determineInterval(daysDiff) {\n        var yearsDiff = daysDiff / 365;\n        var hoursDiff = daysDiff * 24;\n        var minutesDiff = hoursDiff * 60;\n        var secondsDiff = minutesDiff * 60;\n\n        switch (true) {\n          case yearsDiff > 5:\n            this.tickInterval = 'years';\n            break;\n\n          case daysDiff > 800:\n            this.tickInterval = 'half_year';\n            break;\n\n          case daysDiff > 180:\n            this.tickInterval = 'months';\n            break;\n\n          case daysDiff > 90:\n            this.tickInterval = 'months_fortnight';\n            break;\n\n          case daysDiff > 60:\n            this.tickInterval = 'months_days';\n            break;\n\n          case daysDiff > 30:\n            this.tickInterval = 'week_days';\n            break;\n\n          case daysDiff > 2:\n            this.tickInterval = 'days';\n            break;\n\n          case hoursDiff > 2.4:\n            this.tickInterval = 'hours';\n            break;\n\n          case minutesDiff > 15:\n            this.tickInterval = 'minutes_fives';\n            break;\n\n          case minutesDiff > 5:\n            this.tickInterval = 'minutes';\n            break;\n\n          case minutesDiff > 1:\n            this.tickInterval = 'seconds_tens';\n            break;\n\n          case secondsDiff > 20:\n            this.tickInterval = 'seconds_fives';\n            break;\n\n          default:\n            this.tickInterval = 'seconds';\n            break;\n        }\n      }\n    }, {\n      key: \"generateYearScale\",\n      value: function generateYearScale(_ref) {\n        var firstVal = _ref.firstVal,\n            currentMonth = _ref.currentMonth,\n            currentYear = _ref.currentYear,\n            daysWidthOnXAxis = _ref.daysWidthOnXAxis,\n            numberOfYears = _ref.numberOfYears;\n        var firstTickValue = firstVal.minYear;\n        var firstTickPosition = 0;\n        var dt = new DateTime(this.ctx);\n        var unit = 'year';\n\n        if (firstVal.minDate > 1 || firstVal.minMonth > 0) {\n          var remainingDays = dt.determineRemainingDaysOfYear(firstVal.minYear, firstVal.minMonth, firstVal.minDate); // remainingDaysofFirstMonth is used to reacht the 2nd tick position\n\n          var remainingDaysOfFirstYear = dt.determineDaysOfYear(firstVal.minYear) - remainingDays + 1; // calculate the first tick position\n\n          firstTickPosition = remainingDaysOfFirstYear * daysWidthOnXAxis;\n          firstTickValue = firstVal.minYear + 1; // push the first tick in the array\n\n          this.timeScaleArray.push({\n            position: firstTickPosition,\n            value: firstTickValue,\n            unit: unit,\n            year: firstTickValue,\n            month: Utils$1.monthMod(currentMonth + 1)\n          });\n        } else if (firstVal.minDate === 1 && firstVal.minMonth === 0) {\n          // push the first tick in the array\n          this.timeScaleArray.push({\n            position: firstTickPosition,\n            value: firstTickValue,\n            unit: unit,\n            year: currentYear,\n            month: Utils$1.monthMod(currentMonth + 1)\n          });\n        }\n\n        var year = firstTickValue;\n        var pos = firstTickPosition; // keep drawing rest of the ticks\n\n        for (var i = 0; i < numberOfYears; i++) {\n          year++;\n          pos = dt.determineDaysOfYear(year - 1) * daysWidthOnXAxis + pos;\n          this.timeScaleArray.push({\n            position: pos,\n            value: year,\n            unit: unit,\n            year: year,\n            month: 1\n          });\n        }\n      }\n    }, {\n      key: \"generateMonthScale\",\n      value: function generateMonthScale(_ref2) {\n        var firstVal = _ref2.firstVal,\n            currentMonthDate = _ref2.currentMonthDate,\n            currentMonth = _ref2.currentMonth,\n            currentYear = _ref2.currentYear,\n            daysWidthOnXAxis = _ref2.daysWidthOnXAxis,\n            numberOfMonths = _ref2.numberOfMonths;\n        var firstTickValue = currentMonth;\n        var firstTickPosition = 0;\n        var dt = new DateTime(this.ctx);\n        var unit = 'month';\n        var yrCounter = 0;\n\n        if (firstVal.minDate > 1) {\n          // remainingDaysofFirstMonth is used to reacht the 2nd tick position\n          var remainingDaysOfFirstMonth = dt.determineDaysOfMonths(currentMonth + 1, firstVal.minYear) - currentMonthDate + 1; // calculate the first tick position\n\n          firstTickPosition = remainingDaysOfFirstMonth * daysWidthOnXAxis;\n          firstTickValue = Utils$1.monthMod(currentMonth + 1);\n          var year = currentYear + yrCounter;\n\n          var _month = Utils$1.monthMod(firstTickValue);\n\n          var value = firstTickValue; // it's Jan, so update the year\n\n          if (firstTickValue === 0) {\n            unit = 'year';\n            value = year;\n            _month = 1;\n            yrCounter += 1;\n            year = year + yrCounter;\n          } // push the first tick in the array\n\n\n          this.timeScaleArray.push({\n            position: firstTickPosition,\n            value: value,\n            unit: unit,\n            year: year,\n            month: _month\n          });\n        } else {\n          // push the first tick in the array\n          this.timeScaleArray.push({\n            position: firstTickPosition,\n            value: firstTickValue,\n            unit: unit,\n            year: currentYear,\n            month: Utils$1.monthMod(currentMonth)\n          });\n        }\n\n        var month = firstTickValue + 1;\n        var pos = firstTickPosition; // keep drawing rest of the ticks\n\n        for (var i = 0, j = 1; i < numberOfMonths; i++, j++) {\n          month = Utils$1.monthMod(month);\n\n          if (month === 0) {\n            unit = 'year';\n            yrCounter += 1;\n          } else {\n            unit = 'month';\n          }\n\n          var _year = this._getYear(currentYear, month, yrCounter);\n\n          pos = dt.determineDaysOfMonths(month, _year) * daysWidthOnXAxis + pos;\n          var monthVal = month === 0 ? _year : month;\n          this.timeScaleArray.push({\n            position: pos,\n            value: monthVal,\n            unit: unit,\n            year: _year,\n            month: month === 0 ? 1 : month\n          });\n          month++;\n        }\n      }\n    }, {\n      key: \"generateDayScale\",\n      value: function generateDayScale(_ref3) {\n        var firstVal = _ref3.firstVal,\n            currentMonth = _ref3.currentMonth,\n            currentYear = _ref3.currentYear,\n            hoursWidthOnXAxis = _ref3.hoursWidthOnXAxis,\n            numberOfDays = _ref3.numberOfDays;\n        var dt = new DateTime(this.ctx);\n        var unit = 'day';\n        var firstTickValue = firstVal.minDate + 1;\n        var date = firstTickValue;\n\n        var changeMonth = function changeMonth(dateVal, month, year) {\n          var monthdays = dt.determineDaysOfMonths(month + 1, year);\n\n          if (dateVal > monthdays) {\n            month = month + 1;\n            date = 1;\n            unit = 'month';\n            val = month;\n            return month;\n          }\n\n          return month;\n        };\n\n        var remainingHours = 24 - firstVal.minHour;\n        var yrCounter = 0; // calculate the first tick position\n\n        var firstTickPosition = remainingHours * hoursWidthOnXAxis;\n        var val = firstTickValue;\n        var month = changeMonth(date, currentMonth, currentYear);\n\n        if (firstVal.minHour === 0 && firstVal.minDate === 1) {\n          // the first value is the first day of month\n          firstTickPosition = 0;\n          val = Utils$1.monthMod(firstVal.minMonth);\n          unit = 'month';\n          date = firstVal.minDate;\n          numberOfDays++;\n        } else if (firstVal.minDate !== 1 && firstVal.minHour === 0 && firstVal.minMinute === 0) {\n          // fixes apexcharts/apexcharts.js/issues/1730\n          firstTickPosition = 0;\n          firstTickValue = firstVal.minDate;\n          date = firstTickValue;\n          val = firstTickValue; // in case it's the last date of month, we need to check it\n\n          month = changeMonth(date, currentMonth, currentYear);\n        } // push the first tick in the array\n\n\n        this.timeScaleArray.push({\n          position: firstTickPosition,\n          value: val,\n          unit: unit,\n          year: this._getYear(currentYear, month, yrCounter),\n          month: Utils$1.monthMod(month),\n          day: date\n        });\n        var pos = firstTickPosition; // keep drawing rest of the ticks\n\n        for (var i = 0; i < numberOfDays; i++) {\n          date += 1;\n          unit = 'day';\n          month = changeMonth(date, month, this._getYear(currentYear, month, yrCounter));\n\n          var year = this._getYear(currentYear, month, yrCounter);\n\n          pos = 24 * hoursWidthOnXAxis + pos;\n          var value = date === 1 ? Utils$1.monthMod(month) : date;\n          this.timeScaleArray.push({\n            position: pos,\n            value: value,\n            unit: unit,\n            year: year,\n            month: Utils$1.monthMod(month),\n            day: value\n          });\n        }\n      }\n    }, {\n      key: \"generateHourScale\",\n      value: function generateHourScale(_ref4) {\n        var firstVal = _ref4.firstVal,\n            currentDate = _ref4.currentDate,\n            currentMonth = _ref4.currentMonth,\n            currentYear = _ref4.currentYear,\n            minutesWidthOnXAxis = _ref4.minutesWidthOnXAxis,\n            numberOfHours = _ref4.numberOfHours;\n        var dt = new DateTime(this.ctx);\n        var yrCounter = 0;\n        var unit = 'hour';\n\n        var changeDate = function changeDate(dateVal, month) {\n          var monthdays = dt.determineDaysOfMonths(month + 1, currentYear);\n\n          if (dateVal > monthdays) {\n            date = 1;\n            month = month + 1;\n          }\n\n          return {\n            month: month,\n            date: date\n          };\n        };\n\n        var changeMonth = function changeMonth(dateVal, month) {\n          var monthdays = dt.determineDaysOfMonths(month + 1, currentYear);\n\n          if (dateVal > monthdays) {\n            month = month + 1;\n            return month;\n          }\n\n          return month;\n        }; // factor in minSeconds as well\n\n\n        var remainingMins = 60 - (firstVal.minMinute + firstVal.minSecond / 60.0);\n        var firstTickPosition = remainingMins * minutesWidthOnXAxis;\n        var firstTickValue = firstVal.minHour + 1;\n        var hour = firstTickValue + 1;\n\n        if (remainingMins === 60) {\n          firstTickPosition = 0;\n          firstTickValue = firstVal.minHour;\n          hour = firstTickValue + 1;\n        }\n\n        var date = currentDate;\n        var month = changeMonth(date, currentMonth); // push the first tick in the array\n\n        this.timeScaleArray.push({\n          position: firstTickPosition,\n          value: firstTickValue,\n          unit: unit,\n          day: date,\n          hour: hour,\n          year: currentYear,\n          month: Utils$1.monthMod(month)\n        });\n        var pos = firstTickPosition; // keep drawing rest of the ticks\n\n        for (var i = 0; i < numberOfHours; i++) {\n          unit = 'hour';\n\n          if (hour >= 24) {\n            hour = 0;\n            date += 1;\n            unit = 'day';\n            var checkNextMonth = changeDate(date, month);\n            month = checkNextMonth.month;\n            month = changeMonth(date, month);\n          }\n\n          var year = this._getYear(currentYear, month, yrCounter);\n\n          pos = 60 * minutesWidthOnXAxis + pos;\n          var val = hour === 0 ? date : hour;\n          this.timeScaleArray.push({\n            position: pos,\n            value: val,\n            unit: unit,\n            hour: hour,\n            day: date,\n            year: year,\n            month: Utils$1.monthMod(month)\n          });\n          hour++;\n        }\n      }\n    }, {\n      key: \"generateMinuteScale\",\n      value: function generateMinuteScale(_ref5) {\n        var currentMillisecond = _ref5.currentMillisecond,\n            currentSecond = _ref5.currentSecond,\n            currentMinute = _ref5.currentMinute,\n            currentHour = _ref5.currentHour,\n            currentDate = _ref5.currentDate,\n            currentMonth = _ref5.currentMonth,\n            currentYear = _ref5.currentYear,\n            minutesWidthOnXAxis = _ref5.minutesWidthOnXAxis,\n            secondsWidthOnXAxis = _ref5.secondsWidthOnXAxis,\n            numberOfMinutes = _ref5.numberOfMinutes;\n        var yrCounter = 0;\n        var unit = 'minute';\n        var remainingSecs = 60 - currentSecond;\n        var firstTickPosition = (remainingSecs - currentMillisecond / 1000) * secondsWidthOnXAxis;\n        var minute = currentMinute + 1;\n        var date = currentDate;\n        var month = currentMonth;\n        var year = currentYear;\n        var hour = currentHour;\n        var pos = firstTickPosition;\n\n        for (var i = 0; i < numberOfMinutes; i++) {\n          if (minute >= 60) {\n            minute = 0;\n            hour += 1;\n\n            if (hour === 24) {\n              hour = 0;\n            }\n          }\n\n          this.timeScaleArray.push({\n            position: pos,\n            value: minute,\n            unit: unit,\n            hour: hour,\n            minute: minute,\n            day: date,\n            year: this._getYear(year, month, yrCounter),\n            month: Utils$1.monthMod(month)\n          });\n          pos += minutesWidthOnXAxis;\n          minute++;\n        }\n      }\n    }, {\n      key: \"generateSecondScale\",\n      value: function generateSecondScale(_ref6) {\n        var currentMillisecond = _ref6.currentMillisecond,\n            currentSecond = _ref6.currentSecond,\n            currentMinute = _ref6.currentMinute,\n            currentHour = _ref6.currentHour,\n            currentDate = _ref6.currentDate,\n            currentMonth = _ref6.currentMonth,\n            currentYear = _ref6.currentYear,\n            secondsWidthOnXAxis = _ref6.secondsWidthOnXAxis,\n            numberOfSeconds = _ref6.numberOfSeconds;\n        var yrCounter = 0;\n        var unit = 'second';\n        var remainingMillisecs = 1000 - currentMillisecond;\n        var firstTickPosition = remainingMillisecs / 1000 * secondsWidthOnXAxis;\n        var second = currentSecond + 1;\n        var minute = currentMinute;\n        var date = currentDate;\n        var month = currentMonth;\n        var year = currentYear;\n        var hour = currentHour;\n        var pos = firstTickPosition;\n\n        for (var i = 0; i < numberOfSeconds; i++) {\n          if (second >= 60) {\n            minute++;\n            second = 0;\n\n            if (minute >= 60) {\n              hour++;\n              minute = 0;\n\n              if (hour === 24) {\n                hour = 0;\n              }\n            }\n          }\n\n          this.timeScaleArray.push({\n            position: pos,\n            value: second,\n            unit: unit,\n            hour: hour,\n            minute: minute,\n            second: second,\n            day: date,\n            year: this._getYear(year, month, yrCounter),\n            month: Utils$1.monthMod(month)\n          });\n          pos += secondsWidthOnXAxis;\n          second++;\n        }\n      }\n    }, {\n      key: \"createRawDateString\",\n      value: function createRawDateString(ts, value) {\n        var raw = ts.year;\n\n        if (ts.month === 0) {\n          // invalid month, correct it\n          ts.month = 1;\n        }\n\n        raw += '-' + ('0' + ts.month.toString()).slice(-2); // unit is day\n\n        if (ts.unit === 'day') {\n          raw += ts.unit === 'day' ? '-' + ('0' + value).slice(-2) : '-01';\n        } else {\n          raw += '-' + ('0' + (ts.day ? ts.day : '1')).slice(-2);\n        } // unit is hour\n\n\n        if (ts.unit === 'hour') {\n          raw += ts.unit === 'hour' ? 'T' + ('0' + value).slice(-2) : 'T00';\n        } else {\n          raw += 'T' + ('0' + (ts.hour ? ts.hour : '0')).slice(-2);\n        }\n\n        if (ts.unit === 'minute') {\n          raw += ':' + ('0' + value).slice(-2);\n        } else {\n          raw += ':' + (ts.minute ? ('0' + ts.minute).slice(-2) : '00');\n        }\n\n        if (ts.unit === 'second') {\n          raw += ':' + ('0' + value).slice(-2);\n        } else {\n          raw += ':00';\n        }\n\n        if (this.utc) {\n          raw += '.000Z';\n        }\n\n        return raw;\n      }\n    }, {\n      key: \"formatDates\",\n      value: function formatDates(filteredTimeScale) {\n        var _this2 = this;\n\n        var w = this.w;\n        var reformattedTimescaleArray = filteredTimeScale.map(function (ts) {\n          var value = ts.value.toString();\n          var dt = new DateTime(_this2.ctx);\n\n          var raw = _this2.createRawDateString(ts, value);\n\n          var dateToFormat = dt.getDate(dt.parseDate(raw));\n\n          if (!_this2.utc) {\n            // Fixes #1726, #1544, #1485, #1255\n            dateToFormat = dt.getDate(dt.parseDateWithTimezone(raw));\n          }\n\n          if (w.config.xaxis.labels.format === undefined) {\n            var customFormat = 'dd MMM';\n            var dtFormatter = w.config.xaxis.labels.datetimeFormatter;\n            if (ts.unit === 'year') customFormat = dtFormatter.year;\n            if (ts.unit === 'month') customFormat = dtFormatter.month;\n            if (ts.unit === 'day') customFormat = dtFormatter.day;\n            if (ts.unit === 'hour') customFormat = dtFormatter.hour;\n            if (ts.unit === 'minute') customFormat = dtFormatter.minute;\n            if (ts.unit === 'second') customFormat = dtFormatter.second;\n            value = dt.formatDate(dateToFormat, customFormat);\n          } else {\n            value = dt.formatDate(dateToFormat, w.config.xaxis.labels.format);\n          }\n\n          return {\n            dateString: raw,\n            position: ts.position,\n            value: value,\n            unit: ts.unit,\n            year: ts.year,\n            month: ts.month\n          };\n        });\n        return reformattedTimescaleArray;\n      }\n    }, {\n      key: \"removeOverlappingTS\",\n      value: function removeOverlappingTS(arr) {\n        var _this3 = this;\n\n        var graphics = new Graphics(this.ctx);\n        var equalLabelLengthFlag = false; // These labels got same length?\n\n        var constantLabelWidth; // If true, what is the constant length to use\n\n        if (arr.length > 0 && // check arr length\n        arr[0].value && // check arr[0] contains value\n        arr.every(function (lb) {\n          return lb.value.length === arr[0].value.length;\n        }) // check every arr label value is the same as the first one\n        ) {\n          equalLabelLengthFlag = true; // These labels got same length\n\n          constantLabelWidth = graphics.getTextRects(arr[0].value).width; // The constant label width to use\n        }\n\n        var lastDrawnIndex = 0;\n        var filteredArray = arr.map(function (item, index) {\n          if (index > 0 && _this3.w.config.xaxis.labels.hideOverlappingLabels) {\n            var prevLabelWidth = !equalLabelLengthFlag // if vary in label length\n            ? graphics.getTextRects(arr[lastDrawnIndex].value).width // get individual length\n            : constantLabelWidth; // else: use constant length\n\n            var prevPos = arr[lastDrawnIndex].position;\n            var pos = item.position;\n\n            if (pos > prevPos + prevLabelWidth + 10) {\n              lastDrawnIndex = index;\n              return item;\n            } else {\n              return null;\n            }\n          } else {\n            return item;\n          }\n        });\n        filteredArray = filteredArray.filter(function (f) {\n          return f !== null;\n        });\n        return filteredArray;\n      }\n    }, {\n      key: \"_getYear\",\n      value: function _getYear(currentYear, month, yrCounter) {\n        return currentYear + Math.floor(month / 12) + yrCounter;\n      }\n    }]);\n\n    return TimeScale;\n  }();\n\n  /**\n   * ApexCharts Core Class responsible for major calculations and creating elements.\n   *\n   * @module Core\n   **/\n\n  var Core = /*#__PURE__*/function () {\n    function Core(el, ctx) {\n      _classCallCheck(this, Core);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.el = el;\n    } // get data and store into appropriate vars\n\n\n    _createClass(Core, [{\n      key: \"setupElements\",\n      value: function setupElements() {\n        var gl = this.w.globals;\n        var cnf = this.w.config; // const graphics = new Graphics(this.ctx)\n\n        var ct = cnf.chart.type;\n        var axisChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', 'rangeArea', 'candlestick', 'boxPlot', 'scatter', 'bubble', 'radar', 'heatmap', 'treemap'];\n        var xyChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', 'rangeArea', 'candlestick', 'boxPlot', 'scatter', 'bubble'];\n        gl.axisCharts = axisChartsArrTypes.indexOf(ct) > -1;\n        gl.xyCharts = xyChartsArrTypes.indexOf(ct) > -1;\n        gl.isBarHorizontal = (cnf.chart.type === 'bar' || cnf.chart.type === 'rangeBar' || cnf.chart.type === 'boxPlot') && cnf.plotOptions.bar.horizontal;\n        gl.chartClass = '.apexcharts' + gl.chartID;\n        gl.dom.baseEl = this.el;\n        gl.dom.elWrap = document.createElement('div');\n        Graphics.setAttrs(gl.dom.elWrap, {\n          id: gl.chartClass.substring(1),\n          class: 'apexcharts-canvas ' + gl.chartClass.substring(1)\n        });\n        this.el.appendChild(gl.dom.elWrap);\n        gl.dom.Paper = new window.SVG.Doc(gl.dom.elWrap);\n        gl.dom.Paper.attr({\n          class: 'apexcharts-svg',\n          'xmlns:data': 'ApexChartsNS',\n          transform: \"translate(\".concat(cnf.chart.offsetX, \", \").concat(cnf.chart.offsetY, \")\")\n        });\n        gl.dom.Paper.node.style.background = cnf.chart.background;\n        this.setSVGDimensions(); // append foreignElement (legend's parent)\n        // legend is kept in foreignElement to be included while exporting\n        // removing foreignElement and creating legend through HTML will not render legend in export\n\n        gl.dom.elLegendForeign = document.createElementNS(gl.SVGNS, 'foreignObject');\n        Graphics.setAttrs(gl.dom.elLegendForeign, {\n          x: 0,\n          y: 0,\n          width: gl.svgWidth,\n          height: gl.svgHeight\n        });\n        gl.dom.elLegendWrap = document.createElement('div');\n        gl.dom.elLegendWrap.classList.add('apexcharts-legend');\n        gl.dom.elLegendWrap.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');\n        gl.dom.elLegendForeign.appendChild(gl.dom.elLegendWrap);\n        gl.dom.Paper.node.appendChild(gl.dom.elLegendForeign); // the elGraphical is the parent of all primary visuals\n\n        gl.dom.elGraphical = gl.dom.Paper.group().attr({\n          class: 'apexcharts-inner apexcharts-graphical'\n        });\n        gl.dom.elDefs = gl.dom.Paper.defs();\n        gl.dom.Paper.add(gl.dom.elGraphical);\n        gl.dom.elGraphical.add(gl.dom.elDefs);\n      }\n    }, {\n      key: \"plotChartType\",\n      value: function plotChartType(ser, xyRatios) {\n        var w = this.w;\n        var cnf = w.config;\n        var gl = w.globals;\n        var lineSeries = {\n          series: [],\n          i: []\n        };\n        var areaSeries = {\n          series: [],\n          i: []\n        };\n        var scatterSeries = {\n          series: [],\n          i: []\n        };\n        var bubbleSeries = {\n          series: [],\n          i: []\n        };\n        var columnSeries = {\n          series: [],\n          i: []\n        };\n        var candlestickSeries = {\n          series: [],\n          i: []\n        };\n        var boxplotSeries = {\n          series: [],\n          i: []\n        };\n        var rangeBarSeries = {\n          series: [],\n          i: []\n        };\n        var rangeAreaSeries = {\n          series: [],\n          seriesRangeEnd: [],\n          i: []\n        };\n        gl.series.map(function (serie, st) {\n          var comboCount = 0; // if user has specified a particular type for particular series\n\n          if (typeof ser[st].type !== 'undefined') {\n            if (ser[st].type === 'column' || ser[st].type === 'bar') {\n              if (gl.series.length > 1 && cnf.plotOptions.bar.horizontal) {\n                // horizontal bars not supported in mixed charts, hence show a warning\n                console.warn('Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`');\n              }\n\n              columnSeries.series.push(serie);\n              columnSeries.i.push(st);\n              comboCount++;\n              w.globals.columnSeries = columnSeries.series;\n            } else if (ser[st].type === 'area') {\n              areaSeries.series.push(serie);\n              areaSeries.i.push(st);\n              comboCount++;\n            } else if (ser[st].type === 'line') {\n              lineSeries.series.push(serie);\n              lineSeries.i.push(st);\n              comboCount++;\n            } else if (ser[st].type === 'scatter') {\n              scatterSeries.series.push(serie);\n              scatterSeries.i.push(st);\n            } else if (ser[st].type === 'bubble') {\n              bubbleSeries.series.push(serie);\n              bubbleSeries.i.push(st);\n              comboCount++;\n            } else if (ser[st].type === 'candlestick') {\n              candlestickSeries.series.push(serie);\n              candlestickSeries.i.push(st);\n              comboCount++;\n            } else if (ser[st].type === 'boxPlot') {\n              boxplotSeries.series.push(serie);\n              boxplotSeries.i.push(st);\n              comboCount++;\n            } else if (ser[st].type === 'rangeBar') {\n              rangeBarSeries.series.push(serie);\n              rangeBarSeries.i.push(st);\n              comboCount++;\n            } else if (ser[st].type === 'rangeArea') {\n              rangeAreaSeries.series.push(gl.seriesRangeStart[st]);\n              rangeAreaSeries.seriesRangeEnd.push(gl.seriesRangeEnd[st]);\n              rangeAreaSeries.i.push(st);\n              comboCount++;\n            } else {\n              // user has specified type, but it is not valid (other than line/area/column)\n              console.warn('You have specified an unrecognized chart type. Available types for this property are line/area/column/bar/scatter/bubble/candlestick/boxPlot/rangeBar/rangeArea');\n            }\n\n            if (comboCount > 1) {\n              gl.comboCharts = true;\n            }\n          } else {\n            lineSeries.series.push(serie);\n            lineSeries.i.push(st);\n          }\n        });\n        var line = new Line(this.ctx, xyRatios);\n        var boxCandlestick = new BoxCandleStick(this.ctx, xyRatios);\n        this.ctx.pie = new Pie(this.ctx);\n        var radialBar = new Radial(this.ctx);\n        this.ctx.rangeBar = new RangeBar(this.ctx, xyRatios);\n        var radar = new Radar(this.ctx);\n        var elGraph = [];\n\n        if (gl.comboCharts) {\n          if (areaSeries.series.length > 0) {\n            elGraph.push(line.draw(areaSeries.series, 'area', areaSeries.i));\n          }\n\n          if (columnSeries.series.length > 0) {\n            if (w.config.chart.stacked) {\n              var barStacked = new BarStacked(this.ctx, xyRatios);\n              elGraph.push(barStacked.draw(columnSeries.series, columnSeries.i));\n            } else {\n              this.ctx.bar = new Bar(this.ctx, xyRatios);\n              elGraph.push(this.ctx.bar.draw(columnSeries.series, columnSeries.i));\n            }\n          }\n\n          if (rangeAreaSeries.series.length > 0) {\n            elGraph.push(line.draw(rangeAreaSeries.series, 'rangeArea', rangeAreaSeries.i, rangeAreaSeries.seriesRangeEnd));\n          }\n\n          if (lineSeries.series.length > 0) {\n            elGraph.push(line.draw(lineSeries.series, 'line', lineSeries.i));\n          }\n\n          if (candlestickSeries.series.length > 0) {\n            elGraph.push(boxCandlestick.draw(candlestickSeries.series, 'candlestick', candlestickSeries.i));\n          }\n\n          if (boxplotSeries.series.length > 0) {\n            elGraph.push(boxCandlestick.draw(boxplotSeries.series, 'boxPlot', boxplotSeries.i));\n          }\n\n          if (rangeBarSeries.series.length > 0) {\n            elGraph.push(this.ctx.rangeBar.draw(rangeBarSeries.series, rangeBarSeries.i));\n          }\n\n          if (scatterSeries.series.length > 0) {\n            var scatterLine = new Line(this.ctx, xyRatios, true);\n            elGraph.push(scatterLine.draw(scatterSeries.series, 'scatter', scatterSeries.i));\n          }\n\n          if (bubbleSeries.series.length > 0) {\n            var bubbleLine = new Line(this.ctx, xyRatios, true);\n            elGraph.push(bubbleLine.draw(bubbleSeries.series, 'bubble', bubbleSeries.i));\n          }\n        } else {\n          switch (cnf.chart.type) {\n            case 'line':\n              elGraph = line.draw(gl.series, 'line');\n              break;\n\n            case 'area':\n              elGraph = line.draw(gl.series, 'area');\n              break;\n\n            case 'bar':\n              if (cnf.chart.stacked) {\n                var _barStacked = new BarStacked(this.ctx, xyRatios);\n\n                elGraph = _barStacked.draw(gl.series);\n              } else {\n                this.ctx.bar = new Bar(this.ctx, xyRatios);\n                elGraph = this.ctx.bar.draw(gl.series);\n              }\n\n              break;\n\n            case 'candlestick':\n              var candleStick = new BoxCandleStick(this.ctx, xyRatios);\n              elGraph = candleStick.draw(gl.series, 'candlestick');\n              break;\n\n            case 'boxPlot':\n              var boxPlot = new BoxCandleStick(this.ctx, xyRatios);\n              elGraph = boxPlot.draw(gl.series, cnf.chart.type);\n              break;\n\n            case 'rangeBar':\n              elGraph = this.ctx.rangeBar.draw(gl.series);\n              break;\n\n            case 'rangeArea':\n              elGraph = line.draw(gl.seriesRangeStart, 'rangeArea', undefined, gl.seriesRangeEnd);\n              break;\n\n            case 'heatmap':\n              var heatmap = new HeatMap(this.ctx, xyRatios);\n              elGraph = heatmap.draw(gl.series);\n              break;\n\n            case 'treemap':\n              var treemap = new TreemapChart(this.ctx, xyRatios);\n              elGraph = treemap.draw(gl.series);\n              break;\n\n            case 'pie':\n            case 'donut':\n            case 'polarArea':\n              elGraph = this.ctx.pie.draw(gl.series);\n              break;\n\n            case 'radialBar':\n              elGraph = radialBar.draw(gl.series);\n              break;\n\n            case 'radar':\n              elGraph = radar.draw(gl.series);\n              break;\n\n            default:\n              elGraph = line.draw(gl.series);\n          }\n        }\n\n        return elGraph;\n      }\n    }, {\n      key: \"setSVGDimensions\",\n      value: function setSVGDimensions() {\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        gl.svgWidth = cnf.chart.width;\n        gl.svgHeight = cnf.chart.height;\n        var elDim = Utils$1.getDimensions(this.el);\n        var widthUnit = cnf.chart.width.toString().split(/[0-9]+/g).pop();\n\n        if (widthUnit === '%') {\n          if (Utils$1.isNumber(elDim[0])) {\n            if (elDim[0].width === 0) {\n              elDim = Utils$1.getDimensions(this.el.parentNode);\n            }\n\n            gl.svgWidth = elDim[0] * parseInt(cnf.chart.width, 10) / 100;\n          }\n        } else if (widthUnit === 'px' || widthUnit === '') {\n          gl.svgWidth = parseInt(cnf.chart.width, 10);\n        }\n\n        var heightUnit = cnf.chart.height.toString().split(/[0-9]+/g).pop();\n\n        if (gl.svgHeight !== 'auto' && gl.svgHeight !== '') {\n          if (heightUnit === '%') {\n            var elParentDim = Utils$1.getDimensions(this.el.parentNode);\n            gl.svgHeight = elParentDim[1] * parseInt(cnf.chart.height, 10) / 100;\n          } else {\n            gl.svgHeight = parseInt(cnf.chart.height, 10);\n          }\n        } else {\n          if (gl.axisCharts) {\n            gl.svgHeight = gl.svgWidth / 1.61;\n          } else {\n            gl.svgHeight = gl.svgWidth / 1.2;\n          }\n        }\n\n        if (gl.svgWidth < 0) gl.svgWidth = 0;\n        if (gl.svgHeight < 0) gl.svgHeight = 0;\n        Graphics.setAttrs(gl.dom.Paper.node, {\n          width: gl.svgWidth,\n          height: gl.svgHeight\n        });\n\n        if (heightUnit !== '%') {\n          // fixes https://github.com/apexcharts/apexcharts.js/issues/2059\n          var offsetY = cnf.chart.sparkline.enabled ? 0 : gl.axisCharts ? cnf.chart.parentHeightOffset : 0;\n          gl.dom.Paper.node.parentNode.parentNode.style.minHeight = gl.svgHeight + offsetY + 'px';\n        }\n\n        gl.dom.elWrap.style.width = gl.svgWidth + 'px';\n        gl.dom.elWrap.style.height = gl.svgHeight + 'px';\n      }\n    }, {\n      key: \"shiftGraphPosition\",\n      value: function shiftGraphPosition() {\n        var gl = this.w.globals;\n        var tY = gl.translateY;\n        var tX = gl.translateX;\n        var scalingAttrs = {\n          transform: 'translate(' + tX + ', ' + tY + ')'\n        };\n        Graphics.setAttrs(gl.dom.elGraphical.node, scalingAttrs);\n      } // To prevent extra spacings in the bottom of the chart, we need to recalculate the height for pie/donut/radialbar charts\n\n    }, {\n      key: \"resizeNonAxisCharts\",\n      value: function resizeNonAxisCharts() {\n        var w = this.w;\n        var gl = w.globals;\n        var legendHeight = 0;\n        var offY = w.config.chart.sparkline.enabled ? 1 : 15;\n        offY = offY + w.config.grid.padding.bottom;\n\n        if ((w.config.legend.position === 'top' || w.config.legend.position === 'bottom') && w.config.legend.show && !w.config.legend.floating) {\n          legendHeight = new Legend(this.ctx).legendHelpers.getLegendBBox().clwh + 10;\n        }\n\n        var el = w.globals.dom.baseEl.querySelector('.apexcharts-radialbar, .apexcharts-pie');\n        var chartInnerDimensions = w.globals.radialSize * 2.05;\n\n        if (el && !w.config.chart.sparkline.enabled && w.config.plotOptions.radialBar.startAngle !== 0) {\n          var elRadialRect = Utils$1.getBoundingClientRect(el);\n          chartInnerDimensions = elRadialRect.bottom;\n          var maxHeight = elRadialRect.bottom - elRadialRect.top;\n          chartInnerDimensions = Math.max(w.globals.radialSize * 2.05, maxHeight);\n        }\n\n        var newHeight = chartInnerDimensions + gl.translateY + legendHeight + offY;\n\n        if (gl.dom.elLegendForeign) {\n          gl.dom.elLegendForeign.setAttribute('height', newHeight);\n        } // fix apexcharts/apexcharts.js/issues/3105 (when % is provided in height, it keeps increasing)\n\n\n        if (w.config.chart.height && String(w.config.chart.height).indexOf('%') > 0) return;\n        gl.dom.elWrap.style.height = newHeight + 'px';\n        Graphics.setAttrs(gl.dom.Paper.node, {\n          height: newHeight\n        });\n        gl.dom.Paper.node.parentNode.parentNode.style.minHeight = newHeight + 'px';\n      }\n      /*\n       ** All the calculations for setting range in charts will be done here\n       */\n\n    }, {\n      key: \"coreCalculations\",\n      value: function coreCalculations() {\n        var range = new Range(this.ctx);\n        range.init();\n      }\n    }, {\n      key: \"resetGlobals\",\n      value: function resetGlobals() {\n        var _this = this;\n\n        var resetxyValues = function resetxyValues() {\n          return _this.w.config.series.map(function (s) {\n            return [];\n          });\n        };\n\n        var globalObj = new Globals();\n        var gl = this.w.globals;\n        globalObj.initGlobalVars(gl);\n        gl.seriesXvalues = resetxyValues();\n        gl.seriesYvalues = resetxyValues();\n      }\n    }, {\n      key: \"isMultipleY\",\n      value: function isMultipleY() {\n        // user has supplied an array in yaxis property. So, turn on multipleYAxis flag\n        if (this.w.config.yaxis.constructor === Array && this.w.config.yaxis.length > 1) {\n          this.w.globals.isMultipleYAxis = true;\n          return true;\n        }\n      }\n    }, {\n      key: \"xySettings\",\n      value: function xySettings() {\n        var xyRatios = null;\n        var w = this.w;\n\n        if (w.globals.axisCharts) {\n          if (w.config.xaxis.crosshairs.position === 'back') {\n            var crosshairs = new Crosshairs(this.ctx);\n            crosshairs.drawXCrosshairs();\n          }\n\n          if (w.config.yaxis[0].crosshairs.position === 'back') {\n            var _crosshairs = new Crosshairs(this.ctx);\n\n            _crosshairs.drawYCrosshairs();\n          }\n\n          if (w.config.xaxis.type === 'datetime' && w.config.xaxis.labels.formatter === undefined) {\n            this.ctx.timeScale = new TimeScale(this.ctx);\n            var formattedTimeScale = [];\n\n            if (isFinite(w.globals.minX) && isFinite(w.globals.maxX) && !w.globals.isBarHorizontal) {\n              formattedTimeScale = this.ctx.timeScale.calculateTimeScaleTicks(w.globals.minX, w.globals.maxX);\n            } else if (w.globals.isBarHorizontal) {\n              formattedTimeScale = this.ctx.timeScale.calculateTimeScaleTicks(w.globals.minY, w.globals.maxY);\n            }\n\n            this.ctx.timeScale.recalcDimensionsBasedOnFormat(formattedTimeScale);\n          }\n\n          var coreUtils = new CoreUtils(this.ctx);\n          xyRatios = coreUtils.getCalculatedRatios();\n        }\n\n        return xyRatios;\n      }\n    }, {\n      key: \"updateSourceChart\",\n      value: function updateSourceChart(targetChart) {\n        this.ctx.w.globals.selection = undefined;\n\n        this.ctx.updateHelpers._updateOptions({\n          chart: {\n            selection: {\n              xaxis: {\n                min: targetChart.w.globals.minX,\n                max: targetChart.w.globals.maxX\n              }\n            }\n          }\n        }, false, false);\n      }\n    }, {\n      key: \"setupBrushHandler\",\n      value: function setupBrushHandler() {\n        var _this2 = this;\n\n        var w = this.w; // only for brush charts\n\n        if (!w.config.chart.brush.enabled) {\n          return;\n        } // if user has not defined a custom function for selection - we handle the brush chart\n        // otherwise we leave it to the user to define the functionality for selection\n\n\n        if (typeof w.config.chart.events.selection !== 'function') {\n          var targets = w.config.chart.brush.targets || [w.config.chart.brush.target]; // retro compatibility with single target option\n\n          targets.forEach(function (target) {\n            var targetChart = ApexCharts.getChartByID(target);\n            targetChart.w.globals.brushSource = _this2.ctx;\n\n            if (typeof targetChart.w.config.chart.events.zoomed !== 'function') {\n              targetChart.w.config.chart.events.zoomed = function () {\n                _this2.updateSourceChart(targetChart);\n              };\n            }\n\n            if (typeof targetChart.w.config.chart.events.scrolled !== 'function') {\n              targetChart.w.config.chart.events.scrolled = function () {\n                _this2.updateSourceChart(targetChart);\n              };\n            }\n          });\n\n          w.config.chart.events.selection = function (chart, e) {\n            targets.forEach(function (target) {\n              var targetChart = ApexCharts.getChartByID(target);\n              var yaxis = Utils$1.clone(w.config.yaxis);\n\n              if (w.config.chart.brush.autoScaleYaxis && targetChart.w.globals.series.length === 1) {\n                var scale = new Range$1(targetChart);\n                yaxis = scale.autoScaleY(targetChart, yaxis, e);\n              }\n\n              var multipleYaxis = targetChart.w.config.yaxis.reduce(function (acc, curr, index) {\n                return [].concat(_toConsumableArray(acc), [_objectSpread2(_objectSpread2({}, targetChart.w.config.yaxis[index]), {}, {\n                  min: yaxis[0].min,\n                  max: yaxis[0].max\n                })]);\n              }, []);\n\n              targetChart.ctx.updateHelpers._updateOptions({\n                xaxis: {\n                  min: e.xaxis.min,\n                  max: e.xaxis.max\n                },\n                yaxis: multipleYaxis\n              }, false, false, false, false);\n            });\n          };\n        }\n      }\n    }]);\n\n    return Core;\n  }();\n\n  var UpdateHelpers = /*#__PURE__*/function () {\n    function UpdateHelpers(ctx) {\n      _classCallCheck(this, UpdateHelpers);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n    /**\n     * private method to update Options.\n     *\n     * @param {object} options - A new config object can be passed which will be merged with the existing config object\n     * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there\n     * @param {boolean} animate - should animate or not on updating Options\n     * @param {boolean} overwriteInitialConfig - should update the initial config or not\n     */\n\n\n    _createClass(UpdateHelpers, [{\n      key: \"_updateOptions\",\n      value: function _updateOptions(options) {\n        var _this = this;\n\n        var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n        var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        var updateSyncedCharts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n        var overwriteInitialConfig = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n        return new Promise(function (resolve) {\n          var charts = [_this.ctx];\n\n          if (updateSyncedCharts) {\n            charts = _this.ctx.getSyncedCharts();\n          }\n\n          if (_this.ctx.w.globals.isExecCalled) {\n            // If the user called exec method, we don't want to get grouped charts as user specifically provided a chartID to update\n            charts = [_this.ctx];\n            _this.ctx.w.globals.isExecCalled = false;\n          }\n\n          charts.forEach(function (ch, chartIndex) {\n            var w = ch.w;\n            w.globals.shouldAnimate = animate;\n\n            if (!redraw) {\n              w.globals.resized = true;\n              w.globals.dataChanged = true;\n\n              if (animate) {\n                ch.series.getPreviousPaths();\n              }\n            }\n\n            if (options && _typeof(options) === 'object') {\n              ch.config = new Config(options);\n              options = CoreUtils.extendArrayProps(ch.config, options, w); // fixes #914, #623\n\n              if (ch.w.globals.chartID !== _this.ctx.w.globals.chartID) {\n                // don't overwrite series of synchronized charts\n                delete options.series;\n              }\n\n              w.config = Utils$1.extend(w.config, options);\n\n              if (overwriteInitialConfig) {\n                // we need to forget the lastXAxis and lastYAxis as user forcefully overwriteInitialConfig. If we do not do this, and next time when user zooms the chart after setting yaxis.min/max or xaxis.min/max - the stored lastXAxis will never allow the chart to use the updated min/max by user.\n                w.globals.lastXAxis = options.xaxis ? Utils$1.clone(options.xaxis) : [];\n                w.globals.lastYAxis = options.yaxis ? Utils$1.clone(options.yaxis) : []; // After forgetting lastAxes, we need to restore the new config in initialConfig/initialSeries\n\n                w.globals.initialConfig = Utils$1.extend({}, w.config);\n                w.globals.initialSeries = Utils$1.clone(w.config.series);\n\n                if (options.series) {\n                  // Replace the collapsed series data\n                  for (var i = 0; i < w.globals.collapsedSeriesIndices.length; i++) {\n                    var series = w.config.series[w.globals.collapsedSeriesIndices[i]];\n                    w.globals.collapsedSeries[i].data = w.globals.axisCharts ? series.data.slice() : series;\n                  }\n\n                  for (var _i = 0; _i < w.globals.ancillaryCollapsedSeriesIndices.length; _i++) {\n                    var _series = w.config.series[w.globals.ancillaryCollapsedSeriesIndices[_i]];\n                    w.globals.ancillaryCollapsedSeries[_i].data = w.globals.axisCharts ? _series.data.slice() : _series;\n                  } // Ensure that auto-generated axes are scaled to the visible data\n\n\n                  ch.series.emptyCollapsedSeries(w.config.series);\n                }\n              }\n            }\n\n            return ch.update(options).then(function () {\n              if (chartIndex === charts.length - 1) {\n                resolve(ch);\n              }\n            });\n          });\n        });\n      }\n      /**\n       * Private method to update Series.\n       *\n       * @param {array} series - New series which will override the existing\n       */\n\n    }, {\n      key: \"_updateSeries\",\n      value: function _updateSeries(newSeries, animate) {\n        var _this2 = this;\n\n        var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n        return new Promise(function (resolve) {\n          var w = _this2.w;\n          w.globals.shouldAnimate = animate;\n          w.globals.dataChanged = true;\n\n          if (animate) {\n            _this2.ctx.series.getPreviousPaths();\n          }\n\n          var existingSeries; // axis charts\n\n          if (w.globals.axisCharts) {\n            existingSeries = newSeries.map(function (s, i) {\n              return _this2._extendSeries(s, i);\n            });\n\n            if (existingSeries.length === 0) {\n              existingSeries = [{\n                data: []\n              }];\n            }\n\n            w.config.series = existingSeries;\n          } else {\n            // non-axis chart (pie/radialbar)\n            w.config.series = newSeries.slice();\n          }\n\n          if (overwriteInitialSeries) {\n            w.globals.initialConfig.series = Utils$1.clone(w.config.series);\n            w.globals.initialSeries = Utils$1.clone(w.config.series);\n          }\n\n          return _this2.ctx.update().then(function () {\n            resolve(_this2.ctx);\n          });\n        });\n      }\n    }, {\n      key: \"_extendSeries\",\n      value: function _extendSeries(s, i) {\n        var w = this.w;\n        var ser = w.config.series[i];\n        return _objectSpread2(_objectSpread2({}, w.config.series[i]), {}, {\n          name: s.name ? s.name : ser && ser.name,\n          color: s.color ? s.color : ser && ser.color,\n          type: s.type ? s.type : ser && ser.type,\n          data: s.data ? s.data : ser && ser.data\n        });\n      }\n    }, {\n      key: \"toggleDataPointSelection\",\n      value: function toggleDataPointSelection(seriesIndex, dataPointIndex) {\n        var w = this.w;\n        var elPath = null;\n        var parent = \".apexcharts-series[data\\\\:realIndex='\".concat(seriesIndex, \"']\");\n\n        if (w.globals.axisCharts) {\n          elPath = w.globals.dom.Paper.select(\"\".concat(parent, \" path[j='\").concat(dataPointIndex, \"'], \").concat(parent, \" circle[j='\").concat(dataPointIndex, \"'], \").concat(parent, \" rect[j='\").concat(dataPointIndex, \"']\")).members[0];\n        } else {\n          // dataPointIndex will be undefined here, hence using seriesIndex\n          if (typeof dataPointIndex === 'undefined') {\n            elPath = w.globals.dom.Paper.select(\"\".concat(parent, \" path[j='\").concat(seriesIndex, \"']\")).members[0];\n\n            if (w.config.chart.type === 'pie' || w.config.chart.type === 'polarArea' || w.config.chart.type === 'donut') {\n              this.ctx.pie.pieClicked(seriesIndex);\n            }\n          }\n        }\n\n        if (elPath) {\n          var graphics = new Graphics(this.ctx);\n          graphics.pathMouseDown(elPath, null);\n        } else {\n          console.warn('toggleDataPointSelection: Element not found');\n          return null;\n        }\n\n        return elPath.node ? elPath.node : null;\n      }\n    }, {\n      key: \"forceXAxisUpdate\",\n      value: function forceXAxisUpdate(options) {\n        var w = this.w;\n        var minmax = ['min', 'max'];\n        minmax.forEach(function (a) {\n          if (typeof options.xaxis[a] !== 'undefined') {\n            w.config.xaxis[a] = options.xaxis[a];\n            w.globals.lastXAxis[a] = options.xaxis[a];\n          }\n        });\n\n        if (options.xaxis.categories && options.xaxis.categories.length) {\n          w.config.xaxis.categories = options.xaxis.categories;\n        }\n\n        if (w.config.xaxis.convertedCatToNumeric) {\n          var defaults = new Defaults(options);\n          options = defaults.convertCatToNumericXaxis(options, this.ctx);\n        }\n\n        return options;\n      }\n    }, {\n      key: \"forceYAxisUpdate\",\n      value: function forceYAxisUpdate(options) {\n        if (options.chart && options.chart.stacked && options.chart.stackType === '100%') {\n          if (Array.isArray(options.yaxis)) {\n            options.yaxis.forEach(function (yaxe, index) {\n              options.yaxis[index].min = 0;\n              options.yaxis[index].max = 100;\n            });\n          } else {\n            options.yaxis.min = 0;\n            options.yaxis.max = 100;\n          }\n        }\n\n        return options;\n      }\n      /**\n       * This function reverts the yaxis and xaxis min/max values to what it was when the chart was defined.\n       * This function fixes an important bug where a user might load a new series after zooming in/out of previous series which resulted in wrong min/max\n       * Also, this should never be called internally on zoom/pan - the reset should only happen when user calls the updateSeries() function externally\n       * The function also accepts an object {xaxis, yaxis} which when present is set as the new xaxis/yaxis\n       */\n\n    }, {\n      key: \"revertDefaultAxisMinMax\",\n      value: function revertDefaultAxisMinMax(opts) {\n        var _this3 = this;\n\n        var w = this.w;\n        var xaxis = w.globals.lastXAxis;\n        var yaxis = w.globals.lastYAxis;\n\n        if (opts && opts.xaxis) {\n          xaxis = opts.xaxis;\n        }\n\n        if (opts && opts.yaxis) {\n          yaxis = opts.yaxis;\n        }\n\n        w.config.xaxis.min = xaxis.min;\n        w.config.xaxis.max = xaxis.max;\n\n        var getLastYAxis = function getLastYAxis(index) {\n          if (typeof yaxis[index] !== 'undefined') {\n            w.config.yaxis[index].min = yaxis[index].min;\n            w.config.yaxis[index].max = yaxis[index].max;\n          }\n        };\n\n        w.config.yaxis.map(function (yaxe, index) {\n          if (w.globals.zoomed) {\n            // user has zoomed, check the last yaxis\n            getLastYAxis(index);\n          } else {\n            // user hasn't zoomed, check the last yaxis first\n            if (typeof yaxis[index] !== 'undefined') {\n              getLastYAxis(index);\n            } else {\n              // if last y-axis don't exist, check the original yaxis\n              if (typeof _this3.ctx.opts.yaxis[index] !== 'undefined') {\n                yaxe.min = _this3.ctx.opts.yaxis[index].min;\n                yaxe.max = _this3.ctx.opts.yaxis[index].max;\n              }\n            }\n          }\n        });\n      }\n    }]);\n\n    return UpdateHelpers;\n  }();\n\n  (function (root, factory) {\n    /* istanbul ignore next */\n    if (typeof define === 'function' && define.amd) {\n      define(function () {\n        return factory(root, root.document);\n      });\n      /* below check fixes #412 */\n    } else if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined') {\n      module.exports = root.document ? factory(root, root.document) : function (w) {\n        return factory(w, w.document);\n      };\n    } else {\n      root.SVG = factory(root, root.document);\n    }\n  })(typeof window !== 'undefined' ? window : undefined, function (window, document) {\n    // Find global reference - uses 'this' by default when available,\n    // falls back to 'window' otherwise (for bundlers like Webpack)\n    var globalRef = typeof this !== 'undefined' ? this : window; // The main wrapping element\n\n    var SVG = globalRef.SVG = function (element) {\n      if (SVG.supported) {\n        element = new SVG.Doc(element);\n\n        if (!SVG.parser.draw) {\n          SVG.prepare();\n        }\n\n        return element;\n      }\n    }; // Default namespaces\n\n\n    SVG.ns = 'http://www.w3.org/2000/svg';\n    SVG.xmlns = 'http://www.w3.org/2000/xmlns/';\n    SVG.xlink = 'http://www.w3.org/1999/xlink';\n    SVG.svgjs = 'http://svgjs.dev'; // Svg support test\n\n    SVG.supported = function () {\n      return true; // !!document.createElementNS &&\n      //     !! document.createElementNS(SVG.ns,'svg').createSVGRect\n    }(); // Don't bother to continue if SVG is not supported\n\n\n    if (!SVG.supported) return false; // Element id sequence\n\n    SVG.did = 1000; // Get next named element id\n\n    SVG.eid = function (name) {\n      return 'Svgjs' + capitalize(name) + SVG.did++;\n    }; // Method for element creation\n\n\n    SVG.create = function (name) {\n      // create element\n      var element = document.createElementNS(this.ns, name); // apply unique id\n\n      element.setAttribute('id', this.eid(name));\n      return element;\n    }; // Method for extending objects\n\n\n    SVG.extend = function () {\n      var modules, methods; // Get list of modules\n\n      modules = [].slice.call(arguments); // Get object with extensions\n\n      methods = modules.pop();\n\n      for (var i = modules.length - 1; i >= 0; i--) {\n        if (modules[i]) {\n          for (var key in methods) {\n            modules[i].prototype[key] = methods[key];\n          }\n        }\n      } // Make sure SVG.Set inherits any newly added methods\n\n\n      if (SVG.Set && SVG.Set.inherit) {\n        SVG.Set.inherit();\n      }\n    }; // Invent new element\n\n\n    SVG.invent = function (config) {\n      // Create element initializer\n      var initializer = typeof config.create === 'function' ? config.create : function () {\n        this.constructor.call(this, SVG.create(config.create));\n      }; // Inherit prototype\n\n      if (config.inherit) {\n        initializer.prototype = new config.inherit();\n      } // Extend with methods\n\n\n      if (config.extend) {\n        SVG.extend(initializer, config.extend);\n      } // Attach construct method to parent\n\n\n      if (config.construct) {\n        SVG.extend(config.parent || SVG.Container, config.construct);\n      }\n\n      return initializer;\n    }; // Adopt existing svg elements\n\n\n    SVG.adopt = function (node) {\n      // check for presence of node\n      if (!node) return null; // make sure a node isn't already adopted\n\n      if (node.instance) return node.instance; // initialize variables\n\n      var element; // adopt with element-specific settings\n\n      if (node.nodeName == 'svg') {\n        element = node.parentNode instanceof window.SVGElement ? new SVG.Nested() : new SVG.Doc();\n      } else if (node.nodeName == 'linearGradient') {\n        element = new SVG.Gradient('linear');\n      } else if (node.nodeName == 'radialGradient') {\n        element = new SVG.Gradient('radial');\n      } else if (SVG[capitalize(node.nodeName)]) {\n        element = new SVG[capitalize(node.nodeName)]();\n      } else {\n        element = new SVG.Element(node);\n      } // ensure references\n\n\n      element.type = node.nodeName;\n      element.node = node;\n      node.instance = element; // SVG.Class specific preparations\n\n      if (element instanceof SVG.Doc) {\n        element.namespace().defs();\n      } // pull svgjs data from the dom (getAttributeNS doesn't work in html5)\n\n\n      element.setData(JSON.parse(node.getAttribute('svgjs:data')) || {});\n      return element;\n    }; // Initialize parsing element\n\n\n    SVG.prepare = function () {\n      // Select document body and create invisible svg element\n      var body = document.getElementsByTagName('body')[0],\n          draw = (body ? new SVG.Doc(body) : SVG.adopt(document.documentElement).nested()).size(2, 0); // Create parser object\n\n      SVG.parser = {\n        body: body || document.documentElement,\n        draw: draw.style('opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden').node,\n        poly: draw.polyline().node,\n        path: draw.path().node,\n        native: SVG.create('svg')\n      };\n    };\n\n    SVG.parser = {\n      native: SVG.create('svg')\n    };\n    document.addEventListener('DOMContentLoaded', function () {\n      if (!SVG.parser.draw) {\n        SVG.prepare();\n      }\n    }, false); // Storage for regular expressions\n\n    SVG.regex = {\n      // Parse unit value\n      numberAndUnit: /^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i,\n      // Parse hex value\n      hex: /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,\n      // Parse rgb value\n      rgb: /rgb\\((\\d+),(\\d+),(\\d+)\\)/,\n      // Parse reference id\n      reference: /#([a-z0-9\\-_]+)/i,\n      // splits a transformation chain\n      transforms: /\\)\\s*,?\\s*/,\n      // Whitespace\n      whitespace: /\\s/g,\n      // Test hex value\n      isHex: /^#[a-f0-9]{3,6}$/i,\n      // Test rgb value\n      isRgb: /^rgb\\(/,\n      // Test css declaration\n      isCss: /[^:]+:[^;]+;?/,\n      // Test for blank string\n      isBlank: /^(\\s+)?$/,\n      // Test for numeric string\n      isNumber: /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\n      // Test for percent value\n      isPercent: /^-?[\\d\\.]+%$/,\n      // Test for image url\n      isImage: /\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i,\n      // split at whitespace and comma\n      delimiter: /[\\s,]+/,\n      // The following regex are used to parse the d attribute of a path\n      // Matches all hyphens which are not after an exponent\n      hyphen: /([^e])\\-/gi,\n      // Replaces and tests for all path letters\n      pathLetters: /[MLHVCSQTAZ]/gi,\n      // yes we need this one, too\n      isPathLetter: /[MLHVCSQTAZ]/i,\n      // matches 0.154.23.45\n      numbersWithDots: /((\\d?\\.\\d+(?:e[+-]?\\d+)?)((?:\\.\\d+(?:e[+-]?\\d+)?)+))+/gi,\n      // matches .\n      dots: /\\./g\n    };\n    SVG.utils = {\n      // Map function\n      map: function map(array, block) {\n        var il = array.length,\n            result = [];\n\n        for (var i = 0; i < il; i++) {\n          result.push(block(array[i]));\n        }\n\n        return result;\n      },\n      // Filter function\n      filter: function filter(array, block) {\n        var il = array.length,\n            result = [];\n\n        for (var i = 0; i < il; i++) {\n          if (block(array[i])) {\n            result.push(array[i]);\n          }\n        }\n\n        return result;\n      },\n      filterSVGElements: function filterSVGElements(nodes) {\n        return this.filter(nodes, function (el) {\n          return el instanceof window.SVGElement;\n        });\n      }\n    };\n    SVG.defaults = {\n      // Default attribute values\n      attrs: {\n        // fill and stroke\n        'fill-opacity': 1,\n        'stroke-opacity': 1,\n        'stroke-width': 0,\n        'stroke-linejoin': 'miter',\n        'stroke-linecap': 'butt',\n        fill: '#000000',\n        stroke: '#000000',\n        opacity: 1,\n        // position\n        x: 0,\n        y: 0,\n        cx: 0,\n        cy: 0,\n        // size\n        width: 0,\n        height: 0,\n        // radius\n        r: 0,\n        rx: 0,\n        ry: 0,\n        // gradient\n        offset: 0,\n        'stop-opacity': 1,\n        'stop-color': '#000000',\n        // text\n        'font-size': 16,\n        'font-family': 'Helvetica, Arial, sans-serif',\n        'text-anchor': 'start'\n      }\n    }; // Module for color convertions\n\n    SVG.Color = function (color) {\n      var match; // initialize defaults\n\n      this.r = 0;\n      this.g = 0;\n      this.b = 0;\n      if (!color) return; // parse color\n\n      if (typeof color === 'string') {\n        if (SVG.regex.isRgb.test(color)) {\n          // get rgb values\n          match = SVG.regex.rgb.exec(color.replace(SVG.regex.whitespace, '')); // parse numeric values\n\n          this.r = parseInt(match[1]);\n          this.g = parseInt(match[2]);\n          this.b = parseInt(match[3]);\n        } else if (SVG.regex.isHex.test(color)) {\n          // get hex values\n          match = SVG.regex.hex.exec(fullHex(color)); // parse numeric values\n\n          this.r = parseInt(match[1], 16);\n          this.g = parseInt(match[2], 16);\n          this.b = parseInt(match[3], 16);\n        }\n      } else if (_typeof(color) === 'object') {\n        this.r = color.r;\n        this.g = color.g;\n        this.b = color.b;\n      }\n    };\n\n    SVG.extend(SVG.Color, {\n      // Default to hex conversion\n      toString: function toString() {\n        return this.toHex();\n      },\n      // Build hex value\n      toHex: function toHex() {\n        return '#' + compToHex(this.r) + compToHex(this.g) + compToHex(this.b);\n      },\n      // Build rgb value\n      toRgb: function toRgb() {\n        return 'rgb(' + [this.r, this.g, this.b].join() + ')';\n      },\n      // Calculate true brightness\n      brightness: function brightness() {\n        return this.r / 255 * 0.30 + this.g / 255 * 0.59 + this.b / 255 * 0.11;\n      },\n      // Make color morphable\n      morph: function morph(color) {\n        this.destination = new SVG.Color(color);\n        return this;\n      },\n      // Get morphed color at given position\n      at: function at(pos) {\n        // make sure a destination is defined\n        if (!this.destination) return this; // normalise pos\n\n        pos = pos < 0 ? 0 : pos > 1 ? 1 : pos; // generate morphed color\n\n        return new SVG.Color({\n          r: ~~(this.r + (this.destination.r - this.r) * pos),\n          g: ~~(this.g + (this.destination.g - this.g) * pos),\n          b: ~~(this.b + (this.destination.b - this.b) * pos)\n        });\n      }\n    }); // Testers\n    // Test if given value is a color string\n\n    SVG.Color.test = function (color) {\n      color += '';\n      return SVG.regex.isHex.test(color) || SVG.regex.isRgb.test(color);\n    }; // Test if given value is a rgb object\n\n\n    SVG.Color.isRgb = function (color) {\n      return color && typeof color.r === 'number' && typeof color.g === 'number' && typeof color.b === 'number';\n    }; // Test if given value is a color\n\n\n    SVG.Color.isColor = function (color) {\n      return SVG.Color.isRgb(color) || SVG.Color.test(color);\n    }; // Module for array conversion\n\n\n    SVG.Array = function (array, fallback) {\n      array = (array || []).valueOf(); // if array is empty and fallback is provided, use fallback\n\n      if (array.length == 0 && fallback) {\n        array = fallback.valueOf();\n      } // parse array\n\n\n      this.value = this.parse(array);\n    };\n\n    SVG.extend(SVG.Array, {\n      // Convert array to string\n      toString: function toString() {\n        return this.value.join(' ');\n      },\n      // Real value\n      valueOf: function valueOf() {\n        return this.value;\n      },\n      // Parse whitespace separated string\n      parse: function parse(array) {\n        array = array.valueOf(); // if already is an array, no need to parse it\n\n        if (Array.isArray(array)) return array;\n        return this.split(array);\n      }\n    }); // Poly points array\n\n    SVG.PointArray = function (array, fallback) {\n      SVG.Array.call(this, array, fallback || [[0, 0]]);\n    }; // Inherit from SVG.Array\n\n\n    SVG.PointArray.prototype = new SVG.Array();\n    SVG.PointArray.prototype.constructor = SVG.PointArray;\n    var pathHandlers = {\n      M: function M(c, p, p0) {\n        p.x = p0.x = c[0];\n        p.y = p0.y = c[1];\n        return ['M', p.x, p.y];\n      },\n      L: function L(c, p) {\n        p.x = c[0];\n        p.y = c[1];\n        return ['L', c[0], c[1]];\n      },\n      H: function H(c, p) {\n        p.x = c[0];\n        return ['H', c[0]];\n      },\n      V: function V(c, p) {\n        p.y = c[0];\n        return ['V', c[0]];\n      },\n      C: function C(c, p) {\n        p.x = c[4];\n        p.y = c[5];\n        return ['C', c[0], c[1], c[2], c[3], c[4], c[5]];\n      },\n      Q: function Q(c, p) {\n        p.x = c[2];\n        p.y = c[3];\n        return ['Q', c[0], c[1], c[2], c[3]];\n      },\n      Z: function Z(c, p, p0) {\n        p.x = p0.x;\n        p.y = p0.y;\n        return ['Z'];\n      }\n    };\n    var mlhvqtcsa = 'mlhvqtcsaz'.split('');\n\n    for (var i = 0, il = mlhvqtcsa.length; i < il; ++i) {\n      pathHandlers[mlhvqtcsa[i]] = function (i) {\n        return function (c, p, p0) {\n          if (i == 'H') c[0] = c[0] + p.x;else if (i == 'V') c[0] = c[0] + p.y;else if (i == 'A') {\n            c[5] = c[5] + p.x, c[6] = c[6] + p.y;\n          } else {\n            for (var j = 0, jl = c.length; j < jl; ++j) {\n              c[j] = c[j] + (j % 2 ? p.y : p.x);\n            }\n          }\n\n          if (pathHandlers && typeof pathHandlers[i] === 'function') {\n            // this check fixes jest unit tests\n            return pathHandlers[i](c, p, p0);\n          }\n        };\n      }(mlhvqtcsa[i].toUpperCase());\n    } // Path points array\n\n\n    SVG.PathArray = function (array, fallback) {\n      SVG.Array.call(this, array, fallback || [['M', 0, 0]]);\n    }; // Inherit from SVG.Array\n\n\n    SVG.PathArray.prototype = new SVG.Array();\n    SVG.PathArray.prototype.constructor = SVG.PathArray;\n    SVG.extend(SVG.PathArray, {\n      // Convert array to string\n      toString: function toString() {\n        return arrayToString(this.value);\n      },\n      // Move path string\n      move: function move(x, y) {\n        // get bounding box of current situation\n        var box = this.bbox(); // get relative offset\n\n        x -= box.x;\n        y -= box.y;\n        return this;\n      },\n      // Get morphed path array at given position\n      at: function at(pos) {\n        // make sure a destination is defined\n        if (!this.destination) return this;\n        var sourceArray = this.value,\n            destinationArray = this.destination.value,\n            array = [],\n            pathArray = new SVG.PathArray(),\n            il,\n            jl; // Animate has specified in the SVG spec\n        // See: https://www.w3.org/TR/SVG11/paths.html#PathElement\n\n        for (var i = 0, il = sourceArray.length; i < il; i++) {\n          array[i] = [sourceArray[i][0]];\n\n          for (var j = 1, jl = sourceArray[i].length; j < jl; j++) {\n            array[i][j] = sourceArray[i][j] + (destinationArray[i][j] - sourceArray[i][j]) * pos;\n          } // For the two flags of the elliptical arc command, the SVG spec say:\n          // Flags and booleans are interpolated as fractions between zero and one, with any non-zero value considered to be a value of one/true\n          // Elliptical arc command as an array followed by corresponding indexes:\n          // ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n          //   0    1   2        3                 4             5      6  7\n\n\n          if (array[i][0] === 'A') {\n            array[i][4] = +(array[i][4] != 0);\n            array[i][5] = +(array[i][5] != 0);\n          }\n        } // Directly modify the value of a path array, this is done this way for performance\n\n\n        pathArray.value = array;\n        return pathArray;\n      },\n      // Absolutize and parse path to array\n      parse: function parse(array) {\n        // if it's already a patharray, no need to parse it\n        if (array instanceof SVG.PathArray) return array.valueOf(); // prepare for parsing\n\n        var s,\n            arr,\n            paramCnt = {\n          'M': 2,\n          'L': 2,\n          'H': 1,\n          'V': 1,\n          'C': 6,\n          'S': 4,\n          'Q': 4,\n          'T': 2,\n          'A': 7,\n          'Z': 0\n        };\n\n        if (typeof array === 'string') {\n          array = array.replace(SVG.regex.numbersWithDots, pathRegReplace) // convert 45.123.123 to 45.123 .123\n          .replace(SVG.regex.pathLetters, ' $& ') // put some room between letters and numbers\n          .replace(SVG.regex.hyphen, '$1 -') // add space before hyphen\n          .trim() // trim\n          .split(SVG.regex.delimiter); // split into array\n        } else {\n          array = array.reduce(function (prev, curr) {\n            return [].concat.call(prev, curr);\n          }, []);\n        } // array now is an array containing all parts of a path e.g. ['M', '0', '0', 'L', '30', '30' ...]\n\n\n        var arr = [],\n            p = new SVG.Point(),\n            p0 = new SVG.Point(),\n            index = 0,\n            len = array.length;\n\n        do {\n          // Test if we have a path letter\n          if (SVG.regex.isPathLetter.test(array[index])) {\n            s = array[index];\n            ++index; // If last letter was a move command and we got no new, it defaults to [L]ine\n          } else if (s == 'M') {\n            s = 'L';\n          } else if (s == 'm') {\n            s = 'l';\n          }\n\n          arr.push(pathHandlers[s].call(null, array.slice(index, index = index + paramCnt[s.toUpperCase()]).map(parseFloat), p, p0));\n        } while (len > index);\n\n        return arr;\n      },\n      // Get bounding box of path\n      bbox: function bbox() {\n        if (!SVG.parser.draw) {\n          SVG.prepare();\n        }\n\n        SVG.parser.path.setAttribute('d', this.toString());\n        return SVG.parser.path.getBBox();\n      }\n    }); // Module for unit convertions\n\n    SVG.Number = SVG.invent({\n      // Initialize\n      create: function create(value, unit) {\n        // initialize defaults\n        this.value = 0;\n        this.unit = unit || ''; // parse value\n\n        if (typeof value === 'number') {\n          // ensure a valid numeric value\n          this.value = isNaN(value) ? 0 : !isFinite(value) ? value < 0 ? -3.4e+38 : +3.4e+38 : value;\n        } else if (typeof value === 'string') {\n          unit = value.match(SVG.regex.numberAndUnit);\n\n          if (unit) {\n            // make value numeric\n            this.value = parseFloat(unit[1]); // normalize\n\n            if (unit[5] == '%') {\n              this.value /= 100;\n            } else if (unit[5] == 's') {\n              this.value *= 1000;\n            } // store unit\n\n\n            this.unit = unit[5];\n          }\n        } else {\n          if (value instanceof SVG.Number) {\n            this.value = value.valueOf();\n            this.unit = value.unit;\n          }\n        }\n      },\n      // Add methods\n      extend: {\n        // Stringalize\n        toString: function toString() {\n          return (this.unit == '%' ? ~~(this.value * 1e8) / 1e6 : this.unit == 's' ? this.value / 1e3 : this.value) + this.unit;\n        },\n        toJSON: function toJSON() {\n          return this.toString();\n        },\n        // Convert to primitive\n        valueOf: function valueOf() {\n          return this.value;\n        },\n        // Add number\n        plus: function plus(number) {\n          number = new SVG.Number(number);\n          return new SVG.Number(this + number, this.unit || number.unit);\n        },\n        // Subtract number\n        minus: function minus(number) {\n          number = new SVG.Number(number);\n          return new SVG.Number(this - number, this.unit || number.unit);\n        },\n        // Multiply number\n        times: function times(number) {\n          number = new SVG.Number(number);\n          return new SVG.Number(this * number, this.unit || number.unit);\n        },\n        // Divide number\n        divide: function divide(number) {\n          number = new SVG.Number(number);\n          return new SVG.Number(this / number, this.unit || number.unit);\n        },\n        // Convert to different unit\n        to: function to(unit) {\n          var number = new SVG.Number(this);\n\n          if (typeof unit === 'string') {\n            number.unit = unit;\n          }\n\n          return number;\n        },\n        // Make number morphable\n        morph: function morph(number) {\n          this.destination = new SVG.Number(number);\n\n          if (number.relative) {\n            this.destination.value += this.value;\n          }\n\n          return this;\n        },\n        // Get morphed number at given position\n        at: function at(pos) {\n          // Make sure a destination is defined\n          if (!this.destination) return this; // Generate new morphed number\n\n          return new SVG.Number(this.destination).minus(this).times(pos).plus(this);\n        }\n      }\n    });\n    SVG.Element = SVG.invent({\n      // Initialize node\n      create: function create(node) {\n        // make stroke value accessible dynamically\n        this._stroke = SVG.defaults.attrs.stroke;\n        this._event = null; // initialize data object\n\n        this.dom = {}; // create circular reference\n\n        if (this.node = node) {\n          this.type = node.nodeName;\n          this.node.instance = this; // store current attribute value\n\n          this._stroke = node.getAttribute('stroke') || this._stroke;\n        }\n      },\n      // Add class methods\n      extend: {\n        // Move over x-axis\n        x: function x(_x) {\n          return this.attr('x', _x);\n        },\n        // Move over y-axis\n        y: function y(_y) {\n          return this.attr('y', _y);\n        },\n        // Move by center over x-axis\n        cx: function cx(x) {\n          return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2);\n        },\n        // Move by center over y-axis\n        cy: function cy(y) {\n          return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2);\n        },\n        // Move element to given x and y values\n        move: function move(x, y) {\n          return this.x(x).y(y);\n        },\n        // Move element by its center\n        center: function center(x, y) {\n          return this.cx(x).cy(y);\n        },\n        // Set width of element\n        width: function width(_width) {\n          return this.attr('width', _width);\n        },\n        // Set height of element\n        height: function height(_height) {\n          return this.attr('height', _height);\n        },\n        // Set element size to given width and height\n        size: function size(width, height) {\n          var p = proportionalSize(this, width, height);\n          return this.width(new SVG.Number(p.width)).height(new SVG.Number(p.height));\n        },\n        // Clone element\n        clone: function clone(parent) {\n          // write dom data to the dom so the clone can pickup the data\n          this.writeDataToDom(); // clone element and assign new id\n\n          var clone = assignNewId(this.node.cloneNode(true)); // insert the clone in the given parent or after myself\n\n          if (parent) parent.add(clone);else this.after(clone);\n          return clone;\n        },\n        // Remove element\n        remove: function remove() {\n          if (this.parent()) {\n            this.parent().removeElement(this);\n          }\n\n          return this;\n        },\n        // Replace element\n        replace: function replace(element) {\n          this.after(element).remove();\n          return element;\n        },\n        // Add element to given container and return self\n        addTo: function addTo(parent) {\n          return parent.put(this);\n        },\n        // Add element to given container and return container\n        putIn: function putIn(parent) {\n          return parent.add(this);\n        },\n        // Get / set id\n        id: function id(_id) {\n          return this.attr('id', _id);\n        },\n        // Show element\n        show: function show() {\n          return this.style('display', '');\n        },\n        // Hide element\n        hide: function hide() {\n          return this.style('display', 'none');\n        },\n        // Is element visible?\n        visible: function visible() {\n          return this.style('display') != 'none';\n        },\n        // Return id on string conversion\n        toString: function toString() {\n          return this.attr('id');\n        },\n        // Return array of classes on the node\n        classes: function classes() {\n          var attr = this.attr('class');\n          return attr == null ? [] : attr.trim().split(SVG.regex.delimiter);\n        },\n        // Return true if class exists on the node, false otherwise\n        hasClass: function hasClass(name) {\n          return this.classes().indexOf(name) != -1;\n        },\n        // Add class to the node\n        addClass: function addClass(name) {\n          if (!this.hasClass(name)) {\n            var array = this.classes();\n            array.push(name);\n            this.attr('class', array.join(' '));\n          }\n\n          return this;\n        },\n        // Remove class from the node\n        removeClass: function removeClass(name) {\n          if (this.hasClass(name)) {\n            this.attr('class', this.classes().filter(function (c) {\n              return c != name;\n            }).join(' '));\n          }\n\n          return this;\n        },\n        // Toggle the presence of a class on the node\n        toggleClass: function toggleClass(name) {\n          return this.hasClass(name) ? this.removeClass(name) : this.addClass(name);\n        },\n        // Get referenced element form attribute value\n        reference: function reference(attr) {\n          return SVG.get(this.attr(attr));\n        },\n        // Returns the parent element instance\n        parent: function parent(type) {\n          var parent = this; // check for parent\n\n          if (!parent.node.parentNode) return null; // get parent element\n\n          parent = SVG.adopt(parent.node.parentNode);\n          if (!type) return parent; // loop trough ancestors if type is given\n\n          while (parent && parent.node instanceof window.SVGElement) {\n            if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent;\n            if (!parent.node.parentNode || parent.node.parentNode.nodeName == '#document') return null; // #759, #720\n\n            parent = SVG.adopt(parent.node.parentNode);\n          }\n        },\n        // Get parent document\n        doc: function doc() {\n          return this instanceof SVG.Doc ? this : this.parent(SVG.Doc);\n        },\n        // return array of all ancestors of given type up to the root svg\n        parents: function parents(type) {\n          var parents = [],\n              parent = this;\n\n          do {\n            parent = parent.parent(type);\n            if (!parent || !parent.node) break;\n            parents.push(parent);\n          } while (parent.parent);\n\n          return parents;\n        },\n        // matches the element vs a css selector\n        matches: function matches(selector) {\n          return _matches(this.node, selector);\n        },\n        // Returns the svg node to call native svg methods on it\n        native: function native() {\n          return this.node;\n        },\n        // Import raw svg\n        svg: function svg(_svg) {\n          // create temporary holder\n          var well = document.createElement('svg'); // act as a setter if svg is given\n\n          if (_svg && this instanceof SVG.Parent) {\n            // dump raw svg\n            well.innerHTML = '<svg>' + _svg.replace(/\\n/, '').replace(/<([\\w:-]+)([^<]+?)\\/>/g, '<$1$2></$1>') + '</svg>'; // transplant nodes\n\n            for (var i = 0, il = well.firstChild.childNodes.length; i < il; i++) {\n              this.node.appendChild(well.firstChild.firstChild);\n            } // otherwise act as a getter\n\n          } else {\n            // create a wrapping svg element in case of partial content\n            well.appendChild(_svg = document.createElement('svg')); // write svgjs data to the dom\n\n            this.writeDataToDom(); // insert a copy of this node\n\n            _svg.appendChild(this.node.cloneNode(true)); // return target element\n\n\n            return well.innerHTML.replace(/^<svg>/, '').replace(/<\\/svg>$/, '');\n          }\n\n          return this;\n        },\n        // write svgjs data to the dom\n        writeDataToDom: function writeDataToDom() {\n          // dump variables recursively\n          if (this.each || this.lines) {\n            var fn = this.each ? this : this.lines();\n            fn.each(function () {\n              this.writeDataToDom();\n            });\n          } // remove previously set data\n\n\n          this.node.removeAttribute('svgjs:data');\n\n          if (Object.keys(this.dom).length) {\n            this.node.setAttribute('svgjs:data', JSON.stringify(this.dom));\n          } // see #428\n\n\n          return this;\n        },\n        // set given data to the elements data property\n        setData: function setData(o) {\n          this.dom = o;\n          return this;\n        },\n        is: function is(obj) {\n          return _is(this, obj);\n        }\n      }\n    });\n    SVG.easing = {\n      '-': function _(pos) {\n        return pos;\n      },\n      '<>': function _(pos) {\n        return -Math.cos(pos * Math.PI) / 2 + 0.5;\n      },\n      '>': function _(pos) {\n        return Math.sin(pos * Math.PI / 2);\n      },\n      '<': function _(pos) {\n        return -Math.cos(pos * Math.PI / 2) + 1;\n      }\n    };\n\n    SVG.morph = function (pos) {\n      return function (from, to) {\n        return new SVG.MorphObj(from, to).at(pos);\n      };\n    };\n\n    SVG.Situation = SVG.invent({\n      create: function create(o) {\n        this.init = false;\n        this.reversed = false;\n        this.reversing = false;\n        this.duration = new SVG.Number(o.duration).valueOf();\n        this.delay = new SVG.Number(o.delay).valueOf();\n        this.start = +new Date() + this.delay;\n        this.finish = this.start + this.duration;\n        this.ease = o.ease; // this.loop is incremented from 0 to this.loops\n        // it is also incremented when in an infinite loop (when this.loops is true)\n\n        this.loop = 0;\n        this.loops = false;\n        this.animations = {// functionToCall: [list of morphable objects]\n          // e.g. move: [SVG.Number, SVG.Number]\n        };\n        this.attrs = {// holds all attributes which are not represented from a function svg.js provides\n          // e.g. someAttr: SVG.Number\n        };\n        this.styles = {// holds all styles which should be animated\n          // e.g. fill-color: SVG.Color\n        };\n        this.transforms = [// holds all transformations as transformation objects\n          // e.g. [SVG.Rotate, SVG.Translate, SVG.Matrix]\n        ];\n        this.once = {// functions to fire at a specific position\n          // e.g. \"0.5\": function foo(){}\n        };\n      }\n    });\n    SVG.FX = SVG.invent({\n      create: function create(element) {\n        this._target = element;\n        this.situations = [];\n        this.active = false;\n        this.situation = null;\n        this.paused = false;\n        this.lastPos = 0;\n        this.pos = 0; // The absolute position of an animation is its position in the context of its complete duration (including delay and loops)\n        // When performing a delay, absPos is below 0 and when performing a loop, its value is above 1\n\n        this.absPos = 0;\n        this._speed = 1;\n      },\n      extend: {\n        /**\n         * sets or returns the target of this animation\n         * @param o object || number In case of Object it holds all parameters. In case of number its the duration of the animation\n         * @param ease function || string Function which should be used for easing or easing keyword\n         * @param delay Number indicating the delay before the animation starts\n         * @return target || this\n         */\n        animate: function animate(o, ease, delay) {\n          if (_typeof(o) === 'object') {\n            ease = o.ease;\n            delay = o.delay;\n            o = o.duration;\n          }\n\n          var situation = new SVG.Situation({\n            duration: o || 1000,\n            delay: delay || 0,\n            ease: SVG.easing[ease || '-'] || ease\n          });\n          this.queue(situation);\n          return this;\n        },\n\n        /**\n        * sets a delay before the next element of the queue is called\n        * @param delay Duration of delay in milliseconds\n        * @return this.target()\n        */\n\n        /**\n        * sets or returns the target of this animation\n        * @param null || target SVG.Element which should be set as new target\n        * @return target || this\n        */\n        target: function target(_target) {\n          if (_target && _target instanceof SVG.Element) {\n            this._target = _target;\n            return this;\n          }\n\n          return this._target;\n        },\n        // returns the absolute position at a given time\n        timeToAbsPos: function timeToAbsPos(timestamp) {\n          return (timestamp - this.situation.start) / (this.situation.duration / this._speed);\n        },\n        // returns the timestamp from a given absolute positon\n        absPosToTime: function absPosToTime(absPos) {\n          return this.situation.duration / this._speed * absPos + this.situation.start;\n        },\n        // starts the animationloop\n        startAnimFrame: function startAnimFrame() {\n          this.stopAnimFrame();\n          this.animationFrame = window.requestAnimationFrame(function () {\n            this.step();\n          }.bind(this));\n        },\n        // cancels the animationframe\n        stopAnimFrame: function stopAnimFrame() {\n          window.cancelAnimationFrame(this.animationFrame);\n        },\n        // kicks off the animation - only does something when the queue is currently not active and at least one situation is set\n        start: function start() {\n          // dont start if already started\n          if (!this.active && this.situation) {\n            this.active = true;\n            this.startCurrent();\n          }\n\n          return this;\n        },\n        // start the current situation\n        startCurrent: function startCurrent() {\n          this.situation.start = +new Date() + this.situation.delay / this._speed;\n          this.situation.finish = this.situation.start + this.situation.duration / this._speed;\n          return this.initAnimations().step();\n        },\n\n        /**\n        * adds a function / Situation to the animation queue\n        * @param fn function / situation to add\n        * @return this\n        */\n        queue: function queue(fn) {\n          if (typeof fn === 'function' || fn instanceof SVG.Situation) {\n            this.situations.push(fn);\n          }\n\n          if (!this.situation) this.situation = this.situations.shift();\n          return this;\n        },\n\n        /**\n        * pulls next element from the queue and execute it\n        * @return this\n        */\n        dequeue: function dequeue() {\n          // stop current animation\n          this.stop(); // get next animation from queue\n\n          this.situation = this.situations.shift();\n\n          if (this.situation) {\n            if (this.situation instanceof SVG.Situation) {\n              this.start();\n            } else {\n              // If it is not a SVG.Situation, then it is a function, we execute it\n              this.situation.call(this);\n            }\n          }\n\n          return this;\n        },\n        // updates all animations to the current state of the element\n        // this is important when one property could be changed from another property\n        initAnimations: function initAnimations() {\n          var source;\n          var s = this.situation;\n          if (s.init) return this;\n\n          for (var i in s.animations) {\n            source = this.target()[i]();\n\n            if (!Array.isArray(source)) {\n              source = [source];\n            }\n\n            if (!Array.isArray(s.animations[i])) {\n              s.animations[i] = [s.animations[i]];\n            } // if(s.animations[i].length > source.length) {\n            //  source.concat = source.concat(s.animations[i].slice(source.length, s.animations[i].length))\n            // }\n\n\n            for (var j = source.length; j--;) {\n              // The condition is because some methods return a normal number instead\n              // of a SVG.Number\n              if (s.animations[i][j] instanceof SVG.Number) {\n                source[j] = new SVG.Number(source[j]);\n              }\n\n              s.animations[i][j] = source[j].morph(s.animations[i][j]);\n            }\n          }\n\n          for (var i in s.attrs) {\n            s.attrs[i] = new SVG.MorphObj(this.target().attr(i), s.attrs[i]);\n          }\n\n          for (var i in s.styles) {\n            s.styles[i] = new SVG.MorphObj(this.target().style(i), s.styles[i]);\n          }\n\n          s.initialTransformation = this.target().matrixify();\n          s.init = true;\n          return this;\n        },\n        clearQueue: function clearQueue() {\n          this.situations = [];\n          return this;\n        },\n        clearCurrent: function clearCurrent() {\n          this.situation = null;\n          return this;\n        },\n\n        /** stops the animation immediately\n        * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately.\n        * @param clearQueue A Boolean indicating whether to remove queued animation as well.\n        * @return this\n        */\n        stop: function stop(jumpToEnd, clearQueue) {\n          var active = this.active;\n          this.active = false;\n\n          if (clearQueue) {\n            this.clearQueue();\n          }\n\n          if (jumpToEnd && this.situation) {\n            // initialize the situation if it was not\n            !active && this.startCurrent();\n            this.atEnd();\n          }\n\n          this.stopAnimFrame();\n          return this.clearCurrent();\n        },\n        after: function after(fn) {\n          var c = this.last(),\n              wrapper = function wrapper(e) {\n            if (e.detail.situation == c) {\n              fn.call(this, c);\n              this.off('finished.fx', wrapper); // prevent memory leak\n            }\n          };\n\n          this.target().on('finished.fx', wrapper);\n          return this._callStart();\n        },\n        // adds a callback which is called whenever one animation step is performed\n        during: function during(fn) {\n          var c = this.last(),\n              wrapper = function wrapper(e) {\n            if (e.detail.situation == c) {\n              fn.call(this, e.detail.pos, SVG.morph(e.detail.pos), e.detail.eased, c);\n            }\n          }; // see above\n\n\n          this.target().off('during.fx', wrapper).on('during.fx', wrapper);\n          this.after(function () {\n            this.off('during.fx', wrapper);\n          });\n          return this._callStart();\n        },\n        // calls after ALL animations in the queue are finished\n        afterAll: function afterAll(fn) {\n          var wrapper = function wrapper(e) {\n            fn.call(this);\n            this.off('allfinished.fx', wrapper);\n          }; // see above\n\n\n          this.target().off('allfinished.fx', wrapper).on('allfinished.fx', wrapper);\n          return this._callStart();\n        },\n        last: function last() {\n          return this.situations.length ? this.situations[this.situations.length - 1] : this.situation;\n        },\n        // adds one property to the animations\n        add: function add(method, args, type) {\n          this.last()[type || 'animations'][method] = args;\n          return this._callStart();\n        },\n\n        /** perform one step of the animation\n        *  @param ignoreTime Boolean indicating whether to ignore time and use position directly or recalculate position based on time\n        *  @return this\n        */\n        step: function step(ignoreTime) {\n          // convert current time to an absolute position\n          if (!ignoreTime) this.absPos = this.timeToAbsPos(+new Date()); // This part convert an absolute position to a position\n\n          if (this.situation.loops !== false) {\n            var absPos, absPosInt, lastLoop; // If the absolute position is below 0, we just treat it as if it was 0\n\n            absPos = Math.max(this.absPos, 0);\n            absPosInt = Math.floor(absPos);\n\n            if (this.situation.loops === true || absPosInt < this.situation.loops) {\n              this.pos = absPos - absPosInt;\n              lastLoop = this.situation.loop;\n              this.situation.loop = absPosInt;\n            } else {\n              this.absPos = this.situation.loops;\n              this.pos = 1; // The -1 here is because we don't want to toggle reversed when all the loops have been completed\n\n              lastLoop = this.situation.loop - 1;\n              this.situation.loop = this.situation.loops;\n            }\n\n            if (this.situation.reversing) {\n              // Toggle reversed if an odd number of loops as occured since the last call of step\n              this.situation.reversed = this.situation.reversed != Boolean((this.situation.loop - lastLoop) % 2);\n            }\n          } else {\n            // If there are no loop, the absolute position must not be above 1\n            this.absPos = Math.min(this.absPos, 1);\n            this.pos = this.absPos;\n          } // while the absolute position can be below 0, the position must not be below 0\n\n\n          if (this.pos < 0) this.pos = 0;\n          if (this.situation.reversed) this.pos = 1 - this.pos; // apply easing\n\n          var eased = this.situation.ease(this.pos); // call once-callbacks\n\n          for (var i in this.situation.once) {\n            if (i > this.lastPos && i <= eased) {\n              this.situation.once[i].call(this.target(), this.pos, eased);\n              delete this.situation.once[i];\n            }\n          } // fire during callback with position, eased position and current situation as parameter\n\n\n          if (this.active) this.target().fire('during', {\n            pos: this.pos,\n            eased: eased,\n            fx: this,\n            situation: this.situation\n          }); // the user may call stop or finish in the during callback\n          // so make sure that we still have a valid situation\n\n          if (!this.situation) {\n            return this;\n          } // apply the actual animation to every property\n\n\n          this.eachAt(); // do final code when situation is finished\n\n          if (this.pos == 1 && !this.situation.reversed || this.situation.reversed && this.pos == 0) {\n            // stop animation callback\n            this.stopAnimFrame(); // fire finished callback with current situation as parameter\n\n            this.target().fire('finished', {\n              fx: this,\n              situation: this.situation\n            });\n\n            if (!this.situations.length) {\n              this.target().fire('allfinished'); // Recheck the length since the user may call animate in the afterAll callback\n\n              if (!this.situations.length) {\n                this.target().off('.fx'); // there shouldnt be any binding left, but to make sure...\n\n                this.active = false;\n              }\n            } // start next animation\n\n\n            if (this.active) this.dequeue();else this.clearCurrent();\n          } else if (!this.paused && this.active) {\n            // we continue animating when we are not at the end\n            this.startAnimFrame();\n          } // save last eased position for once callback triggering\n\n\n          this.lastPos = eased;\n          return this;\n        },\n        // calculates the step for every property and calls block with it\n        eachAt: function eachAt() {\n          var len,\n              at,\n              self = this,\n              target = this.target(),\n              s = this.situation; // apply animations which can be called trough a method\n\n          for (var i in s.animations) {\n            at = [].concat(s.animations[i]).map(function (el) {\n              return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el;\n            });\n            target[i].apply(target, at);\n          } // apply animation which has to be applied with attr()\n\n\n          for (var i in s.attrs) {\n            at = [i].concat(s.attrs[i]).map(function (el) {\n              return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el;\n            });\n            target.attr.apply(target, at);\n          } // apply animation which has to be applied with style()\n\n\n          for (var i in s.styles) {\n            at = [i].concat(s.styles[i]).map(function (el) {\n              return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el;\n            });\n            target.style.apply(target, at);\n          } // animate initialTransformation which has to be chained\n\n\n          if (s.transforms.length) {\n            // get initial initialTransformation\n            at = s.initialTransformation;\n\n            for (var i = 0, len = s.transforms.length; i < len; i++) {\n              // get next transformation in chain\n              var a = s.transforms[i]; // multiply matrix directly\n\n              if (a instanceof SVG.Matrix) {\n                if (a.relative) {\n                  at = at.multiply(new SVG.Matrix().morph(a).at(s.ease(this.pos)));\n                } else {\n                  at = at.morph(a).at(s.ease(this.pos));\n                }\n\n                continue;\n              } // when transformation is absolute we have to reset the needed transformation first\n\n\n              if (!a.relative) {\n                a.undo(at.extract());\n              } // and reapply it after\n\n\n              at = at.multiply(a.at(s.ease(this.pos)));\n            } // set new matrix on element\n\n\n            target.matrix(at);\n          }\n\n          return this;\n        },\n        // adds an once-callback which is called at a specific position and never again\n        once: function once(pos, fn, isEased) {\n          var c = this.last();\n          if (!isEased) pos = c.ease(pos);\n          c.once[pos] = fn;\n          return this;\n        },\n        _callStart: function _callStart() {\n          setTimeout(function () {\n            this.start();\n          }.bind(this), 0);\n          return this;\n        }\n      },\n      parent: SVG.Element,\n      // Add method to parent elements\n      construct: {\n        // Get fx module or create a new one, then animate with given duration and ease\n        animate: function animate(o, ease, delay) {\n          return (this.fx || (this.fx = new SVG.FX(this))).animate(o, ease, delay);\n        },\n        delay: function delay(_delay) {\n          return (this.fx || (this.fx = new SVG.FX(this))).delay(_delay);\n        },\n        stop: function stop(jumpToEnd, clearQueue) {\n          if (this.fx) {\n            this.fx.stop(jumpToEnd, clearQueue);\n          }\n\n          return this;\n        },\n        finish: function finish() {\n          if (this.fx) {\n            this.fx.finish();\n          }\n\n          return this;\n        }\n      }\n    }); // MorphObj is used whenever no morphable object is given\n\n    SVG.MorphObj = SVG.invent({\n      create: function create(from, to) {\n        // prepare color for morphing\n        if (SVG.Color.isColor(to)) return new SVG.Color(from).morph(to); // check if we have a list of values\n\n        if (SVG.regex.delimiter.test(from)) {\n          // prepare path for morphing\n          if (SVG.regex.pathLetters.test(from)) return new SVG.PathArray(from).morph(to); // prepare value list for morphing\n          else return new SVG.Array(from).morph(to);\n        } // prepare number for morphing\n\n\n        if (SVG.regex.numberAndUnit.test(to)) return new SVG.Number(from).morph(to); // prepare for plain morphing\n\n        this.value = from;\n        this.destination = to;\n      },\n      extend: {\n        at: function at(pos, real) {\n          return real < 1 ? this.value : this.destination;\n        },\n        valueOf: function valueOf() {\n          return this.value;\n        }\n      }\n    });\n    SVG.extend(SVG.FX, {\n      // Add animatable attributes\n      attr: function attr(a, v, relative) {\n        // apply attributes individually\n        if (_typeof(a) === 'object') {\n          for (var key in a) {\n            this.attr(key, a[key]);\n          }\n        } else {\n          this.add(a, v, 'attrs');\n        }\n\n        return this;\n      },\n      // Add animatable plot\n      plot: function plot(a, b, c, d) {\n        // Lines can be plotted with 4 arguments\n        if (arguments.length == 4) {\n          return this.plot([a, b, c, d]);\n        }\n\n        return this.add('plot', new (this.target().morphArray)(a));\n      }\n    });\n    SVG.Box = SVG.invent({\n      create: function create(x, y, width, height) {\n        if (_typeof(x) === 'object' && !(x instanceof SVG.Element)) {\n          // chromes getBoundingClientRect has no x and y property\n          return SVG.Box.call(this, x.left != null ? x.left : x.x, x.top != null ? x.top : x.y, x.width, x.height);\n        } else if (arguments.length == 4) {\n          this.x = x;\n          this.y = y;\n          this.width = width;\n          this.height = height;\n        } // add center, right, bottom...\n\n\n        fullBox(this);\n      }\n    });\n    SVG.BBox = SVG.invent({\n      // Initialize\n      create: function create(element) {\n        SVG.Box.apply(this, [].slice.call(arguments)); // get values if element is given\n\n        if (element instanceof SVG.Element) {\n          var box; // yes this is ugly, but Firefox can be a pain when it comes to elements that are not yet rendered\n\n          try {\n            if (!document.documentElement.contains) {\n              // This is IE - it does not support contains() for top-level SVGs\n              var topParent = element.node;\n\n              while (topParent.parentNode) {\n                topParent = topParent.parentNode;\n              }\n\n              if (topParent != document) throw new Error('Element not in the dom');\n            } else {// the element is NOT in the dom, throw error\n              // disabling the check below which fixes issue #76\n              // if (!document.documentElement.contains(element.node)) throw new Exception('Element not in the dom')\n            } // find native bbox\n\n\n            box = element.node.getBBox();\n          } catch (e) {\n            if (element instanceof SVG.Shape) {\n              if (!SVG.parser.draw) {\n                // fixes apexcharts/vue-apexcharts #14\n                SVG.prepare();\n              }\n\n              var clone = element.clone(SVG.parser.draw.instance).show();\n\n              if (clone && clone.node && typeof clone.node.getBBox === 'function') {\n                // this check fixes jest unit tests\n                box = clone.node.getBBox();\n              }\n\n              if (clone && typeof clone.remove === 'function') {\n                clone.remove();\n              }\n            } else {\n              box = {\n                x: element.node.clientLeft,\n                y: element.node.clientTop,\n                width: element.node.clientWidth,\n                height: element.node.clientHeight\n              };\n            }\n          }\n\n          SVG.Box.call(this, box);\n        }\n      },\n      // Define ancestor\n      inherit: SVG.Box,\n      // Define Parent\n      parent: SVG.Element,\n      // Constructor\n      construct: {\n        // Get bounding box\n        bbox: function bbox() {\n          return new SVG.BBox(this);\n        }\n      }\n    });\n    SVG.BBox.prototype.constructor = SVG.BBox;\n    SVG.Matrix = SVG.invent({\n      // Initialize\n      create: function create(source) {\n        var base = arrayToMatrix([1, 0, 0, 1, 0, 0]); // ensure source as object\n\n        source = source === null ? base : source instanceof SVG.Element ? source.matrixify() : typeof source === 'string' ? arrayToMatrix(source.split(SVG.regex.delimiter).map(parseFloat)) : arguments.length == 6 ? arrayToMatrix([].slice.call(arguments)) : Array.isArray(source) ? arrayToMatrix(source) : source && _typeof(source) === 'object' ? source : base; // merge source\n\n        for (var i = abcdef.length - 1; i >= 0; --i) {\n          this[abcdef[i]] = source[abcdef[i]] != null ? source[abcdef[i]] : base[abcdef[i]];\n        }\n      },\n      // Add methods\n      extend: {\n        // Extract individual transformations\n        extract: function extract() {\n          // find delta transform points\n          var px = deltaTransformPoint(this, 0, 1);\n              deltaTransformPoint(this, 1, 0);\n              var skewX = 180 / Math.PI * Math.atan2(px.y, px.x) - 90;\n          return {\n            // translation\n            x: this.e,\n            y: this.f,\n            transformedX: (this.e * Math.cos(skewX * Math.PI / 180) + this.f * Math.sin(skewX * Math.PI / 180)) / Math.sqrt(this.a * this.a + this.b * this.b),\n            transformedY: (this.f * Math.cos(skewX * Math.PI / 180) + this.e * Math.sin(-skewX * Math.PI / 180)) / Math.sqrt(this.c * this.c + this.d * this.d),\n            // rotation\n            rotation: skewX,\n            a: this.a,\n            b: this.b,\n            c: this.c,\n            d: this.d,\n            e: this.e,\n            f: this.f,\n            matrix: new SVG.Matrix(this)\n          };\n        },\n        // Clone matrix\n        clone: function clone() {\n          return new SVG.Matrix(this);\n        },\n        // Morph one matrix into another\n        morph: function morph(matrix) {\n          // store new destination\n          this.destination = new SVG.Matrix(matrix);\n          return this;\n        },\n        // Multiplies by given matrix\n        multiply: function multiply(matrix) {\n          return new SVG.Matrix(this.native().multiply(parseMatrix(matrix).native()));\n        },\n        // Inverses matrix\n        inverse: function inverse() {\n          return new SVG.Matrix(this.native().inverse());\n        },\n        // Translate matrix\n        translate: function translate(x, y) {\n          return new SVG.Matrix(this.native().translate(x || 0, y || 0));\n        },\n        // Convert to native SVGMatrix\n        native: function native() {\n          // create new matrix\n          var matrix = SVG.parser.native.createSVGMatrix(); // update with current values\n\n          for (var i = abcdef.length - 1; i >= 0; i--) {\n            matrix[abcdef[i]] = this[abcdef[i]];\n          }\n\n          return matrix;\n        },\n        // Convert matrix to string\n        toString: function toString() {\n          // Construct the matrix directly, avoid values that are too small\n          return 'matrix(' + float32String(this.a) + ',' + float32String(this.b) + ',' + float32String(this.c) + ',' + float32String(this.d) + ',' + float32String(this.e) + ',' + float32String(this.f) + ')';\n        }\n      },\n      // Define parent\n      parent: SVG.Element,\n      // Add parent method\n      construct: {\n        // Get current matrix\n        ctm: function ctm() {\n          return new SVG.Matrix(this.node.getCTM());\n        },\n        // Get current screen matrix\n        screenCTM: function screenCTM() {\n          /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537\n             This is needed because FF does not return the transformation matrix\n             for the inner coordinate system when getScreenCTM() is called on nested svgs.\n             However all other Browsers do that */\n          if (this instanceof SVG.Nested) {\n            var rect = this.rect(1, 1);\n            var m = rect.node.getScreenCTM();\n            rect.remove();\n            return new SVG.Matrix(m);\n          }\n\n          return new SVG.Matrix(this.node.getScreenCTM());\n        }\n      }\n    });\n    SVG.Point = SVG.invent({\n      // Initialize\n      create: function create(x, y) {\n        var source,\n            base = {\n          x: 0,\n          y: 0\n        }; // ensure source as object\n\n        source = Array.isArray(x) ? {\n          x: x[0],\n          y: x[1]\n        } : _typeof(x) === 'object' ? {\n          x: x.x,\n          y: x.y\n        } : x != null ? {\n          x: x,\n          y: y != null ? y : x\n        } : base; // If y has no value, then x is used has its value\n        // merge source\n\n        this.x = source.x;\n        this.y = source.y;\n      },\n      // Add methods\n      extend: {\n        // Clone point\n        clone: function clone() {\n          return new SVG.Point(this);\n        },\n        // Morph one point into another\n        morph: function morph(x, y) {\n          // store new destination\n          this.destination = new SVG.Point(x, y);\n          return this;\n        }\n      }\n    });\n    SVG.extend(SVG.Element, {\n      // Get point\n      point: function point(x, y) {\n        return new SVG.Point(x, y).transform(this.screenCTM().inverse());\n      }\n    });\n    SVG.extend(SVG.Element, {\n      // Set svg element attribute\n      attr: function attr(a, v, n) {\n        // act as full getter\n        if (a == null) {\n          // get an object of attributes\n          a = {};\n          v = this.node.attributes;\n\n          for (var n = v.length - 1; n >= 0; n--) {\n            a[v[n].nodeName] = SVG.regex.isNumber.test(v[n].nodeValue) ? parseFloat(v[n].nodeValue) : v[n].nodeValue;\n          }\n\n          return a;\n        } else if (_typeof(a) === 'object') {\n          // apply every attribute individually if an object is passed\n          for (var v_ in a) {\n            this.attr(v_, a[v_]);\n          }\n        } else if (v === null) {\n          // remove value\n          this.node.removeAttribute(a);\n        } else if (v == null) {\n          // act as a getter if the first and only argument is not an object\n          v = this.node.getAttribute(a);\n          return v == null ? SVG.defaults.attrs[a] : SVG.regex.isNumber.test(v) ? parseFloat(v) : v;\n        } else {\n          // BUG FIX: some browsers will render a stroke if a color is given even though stroke width is 0\n          if (a == 'stroke-width') {\n            this.attr('stroke', parseFloat(v) > 0 ? this._stroke : null);\n          } else if (a == 'stroke') {\n            this._stroke = v;\n          } // convert image fill and stroke to patterns\n\n\n          if (a == 'fill' || a == 'stroke') {\n            if (SVG.regex.isImage.test(v)) {\n              v = this.doc().defs().image(v, 0, 0);\n            }\n\n            if (v instanceof SVG.Image) {\n              v = this.doc().defs().pattern(0, 0, function () {\n                this.add(v);\n              });\n            }\n          } // ensure correct numeric values (also accepts NaN and Infinity)\n\n\n          if (typeof v === 'number') {\n            v = new SVG.Number(v);\n          } // ensure full hex color\n          else if (SVG.Color.isColor(v)) {\n            v = new SVG.Color(v);\n          } // parse array values\n          else if (Array.isArray(v)) {\n            v = new SVG.Array(v);\n          } // if the passed attribute is leading...\n\n\n          if (a == 'leading') {\n            // ... call the leading method instead\n            if (this.leading) {\n              this.leading(v);\n            }\n          } else {\n            // set given attribute on node\n            typeof n === 'string' ? this.node.setAttributeNS(n, a, v.toString()) : this.node.setAttribute(a, v.toString());\n          } // rebuild if required\n\n\n          if (this.rebuild && (a == 'font-size' || a == 'x')) {\n            this.rebuild(a, v);\n          }\n        }\n\n        return this;\n      }\n    });\n    SVG.extend(SVG.Element, {\n      // Add transformations\n      transform: function transform(o, relative) {\n        // get target in case of the fx module, otherwise reference this\n        var target = this,\n            matrix;\n   // act as a getter\n\n        if (_typeof(o) !== 'object') {\n          // get current matrix\n          matrix = new SVG.Matrix(target).extract();\n          return typeof o === 'string' ? matrix[o] : matrix;\n        } // get current matrix\n\n\n        matrix = new SVG.Matrix(target); // ensure relative flag\n\n        relative = !!relative || !!o.relative; // act on matrix\n\n        if (o.a != null) {\n          matrix = relative // relative\n          ? matrix.multiply(new SVG.Matrix(o)) // absolute\n          : new SVG.Matrix(o);\n        }\n\n        return this.attr('transform', matrix);\n      }\n    });\n    SVG.extend(SVG.Element, {\n      // Reset all transformations\n      untransform: function untransform() {\n        return this.attr('transform', null);\n      },\n      // merge the whole transformation chain into one matrix and returns it\n      matrixify: function matrixify() {\n        var matrix = (this.attr('transform') || '').split(SVG.regex.transforms).slice(0, -1).map(function (str) {\n          // generate key => value pairs\n          var kv = str.trim().split('(');\n          return [kv[0], kv[1].split(SVG.regex.delimiter).map(function (str) {\n            return parseFloat(str);\n          })];\n        }) // merge every transformation into one matrix\n        .reduce(function (matrix, transform) {\n          if (transform[0] == 'matrix') return matrix.multiply(arrayToMatrix(transform[1]));\n          return matrix[transform[0]].apply(matrix, transform[1]);\n        }, new SVG.Matrix());\n        return matrix;\n      },\n      // add an element to another parent without changing the visual representation on the screen\n      toParent: function toParent(parent) {\n        if (this == parent) return this;\n        var ctm = this.screenCTM();\n        var pCtm = parent.screenCTM().inverse();\n        this.addTo(parent).untransform().transform(pCtm.multiply(ctm));\n        return this;\n      },\n      // same as above with parent equals root-svg\n      toDoc: function toDoc() {\n        return this.toParent(this.doc());\n      }\n    });\n    SVG.Transformation = SVG.invent({\n      create: function create(source, inversed) {\n        if (arguments.length > 1 && typeof inversed !== 'boolean') {\n          return this.constructor.call(this, [].slice.call(arguments));\n        }\n\n        if (Array.isArray(source)) {\n          for (var i = 0, len = this.arguments.length; i < len; ++i) {\n            this[this.arguments[i]] = source[i];\n          }\n        } else if (source && _typeof(source) === 'object') {\n          for (var i = 0, len = this.arguments.length; i < len; ++i) {\n            this[this.arguments[i]] = source[this.arguments[i]];\n          }\n        }\n\n        this.inversed = false;\n\n        if (inversed === true) {\n          this.inversed = true;\n        }\n      }\n    });\n    SVG.Translate = SVG.invent({\n      parent: SVG.Matrix,\n      inherit: SVG.Transformation,\n      create: function create(source, inversed) {\n        this.constructor.apply(this, [].slice.call(arguments));\n      },\n      extend: {\n        arguments: ['transformedX', 'transformedY'],\n        method: 'translate'\n      }\n    });\n    SVG.extend(SVG.Element, {\n      // Dynamic style generator\n      style: function style(s, v) {\n        if (arguments.length == 0) {\n          // get full style\n          return this.node.style.cssText || '';\n        } else if (arguments.length < 2) {\n          // apply every style individually if an object is passed\n          if (_typeof(s) === 'object') {\n            for (var v_ in s) {\n              this.style(v_, s[v_]);\n            }\n          } else if (SVG.regex.isCss.test(s)) {\n            // parse css string\n            s = s.split(/\\s*;\\s*/) // filter out suffix ; and stuff like ;;\n            .filter(function (e) {\n              return !!e;\n            }).map(function (e) {\n              return e.split(/\\s*:\\s*/);\n            }); // apply every definition individually\n\n            while (v = s.pop()) {\n              this.style(v[0], v[1]);\n            }\n          } else {\n            // act as a getter if the first and only argument is not an object\n            return this.node.style[camelCase(s)];\n          }\n        } else {\n          this.node.style[camelCase(s)] = v === null || SVG.regex.isBlank.test(v) ? '' : v;\n        }\n\n        return this;\n      }\n    });\n    SVG.Parent = SVG.invent({\n      // Initialize node\n      create: function create(element) {\n        this.constructor.call(this, element);\n      },\n      // Inherit from\n      inherit: SVG.Element,\n      // Add class methods\n      extend: {\n        // Returns all child elements\n        children: function children() {\n          return SVG.utils.map(SVG.utils.filterSVGElements(this.node.childNodes), function (node) {\n            return SVG.adopt(node);\n          });\n        },\n        // Add given element at a position\n        add: function add(element, i) {\n          if (i == null) {\n            this.node.appendChild(element.node);\n          } else if (element.node != this.node.childNodes[i]) {\n            this.node.insertBefore(element.node, this.node.childNodes[i]);\n          }\n\n          return this;\n        },\n        // Basically does the same as `add()` but returns the added element instead\n        put: function put(element, i) {\n          this.add(element, i);\n          return element;\n        },\n        // Checks if the given element is a child\n        has: function has(element) {\n          return this.index(element) >= 0;\n        },\n        // Gets index of given element\n        index: function index(element) {\n          return [].slice.call(this.node.childNodes).indexOf(element.node);\n        },\n        // Get a element at the given index\n        get: function get(i) {\n          return SVG.adopt(this.node.childNodes[i]);\n        },\n        // Get first child\n        first: function first() {\n          return this.get(0);\n        },\n        // Get the last child\n        last: function last() {\n          return this.get(this.node.childNodes.length - 1);\n        },\n        // Iterates over all children and invokes a given block\n        each: function each(block, deep) {\n          var il,\n              children = this.children();\n\n          for (var i = 0, il = children.length; i < il; i++) {\n            if (children[i] instanceof SVG.Element) {\n              block.apply(children[i], [i, children]);\n            }\n\n            if (deep && children[i] instanceof SVG.Container) {\n              children[i].each(block, deep);\n            }\n          }\n\n          return this;\n        },\n        // Remove a given child\n        removeElement: function removeElement(element) {\n          this.node.removeChild(element.node);\n          return this;\n        },\n        // Remove all elements in this container\n        clear: function clear() {\n          // remove children\n          while (this.node.hasChildNodes()) {\n            this.node.removeChild(this.node.lastChild);\n          } // remove defs reference\n\n\n          delete this._defs;\n          return this;\n        },\n        // Get defs\n        defs: function defs() {\n          return this.doc().defs();\n        }\n      }\n    });\n    SVG.extend(SVG.Parent, {\n      ungroup: function ungroup(parent, depth) {\n        if (depth === 0 || this instanceof SVG.Defs || this.node == SVG.parser.draw) return this;\n        parent = parent || (this instanceof SVG.Doc ? this : this.parent(SVG.Parent));\n        depth = depth || Infinity;\n        this.each(function () {\n          if (this instanceof SVG.Defs) return this;\n          if (this instanceof SVG.Parent) return this.ungroup(parent, depth - 1);\n          return this.toParent(parent);\n        });\n        this.node.firstChild || this.remove();\n        return this;\n      },\n      flatten: function flatten(parent, depth) {\n        return this.ungroup(parent, depth);\n      }\n    });\n    SVG.Container = SVG.invent({\n      // Initialize node\n      create: function create(element) {\n        this.constructor.call(this, element);\n      },\n      // Inherit from\n      inherit: SVG.Parent\n    });\n    SVG.ViewBox = SVG.invent({\n      // Define parent\n      parent: SVG.Container,\n      // Add parent method\n      construct: {}\n    }) // Add events to elements\n    ;\n    ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', // , 'mouseenter' -> not supported by IE\n    // , 'mouseleave' -> not supported by IE\n    'touchstart', 'touchmove', 'touchleave', 'touchend', 'touchcancel'].forEach(function (event) {\n      // add event to SVG.Element\n      SVG.Element.prototype[event] = function (f) {\n        // bind event to element rather than element node\n        SVG.on(this.node, event, f);\n        return this;\n      };\n    }); // Initialize listeners stack\n\n    SVG.listeners = [];\n    SVG.handlerMap = [];\n    SVG.listenerId = 0; // Add event binder in the SVG namespace\n\n    SVG.on = function (node, event, listener, binding, options) {\n      // create listener, get object-index\n      var l = listener.bind(binding || node.instance || node),\n          index = (SVG.handlerMap.indexOf(node) + 1 || SVG.handlerMap.push(node)) - 1,\n          ev = event.split('.')[0],\n          ns = event.split('.')[1] || '*'; // ensure valid object\n\n      SVG.listeners[index] = SVG.listeners[index] || {};\n      SVG.listeners[index][ev] = SVG.listeners[index][ev] || {};\n      SVG.listeners[index][ev][ns] = SVG.listeners[index][ev][ns] || {};\n\n      if (!listener._svgjsListenerId) {\n        listener._svgjsListenerId = ++SVG.listenerId;\n      } // reference listener\n\n\n      SVG.listeners[index][ev][ns][listener._svgjsListenerId] = l; // add listener\n\n      node.addEventListener(ev, l, options || {\n        passive: true\n      });\n    }; // Add event unbinder in the SVG namespace\n\n\n    SVG.off = function (node, event, listener) {\n      var index = SVG.handlerMap.indexOf(node),\n          ev = event && event.split('.')[0],\n          ns = event && event.split('.')[1],\n          namespace = '';\n      if (index == -1) return;\n\n      if (listener) {\n        if (typeof listener === 'function') listener = listener._svgjsListenerId;\n        if (!listener) return; // remove listener reference\n\n        if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns || '*']) {\n          // remove listener\n          node.removeEventListener(ev, SVG.listeners[index][ev][ns || '*'][listener], false);\n          delete SVG.listeners[index][ev][ns || '*'][listener];\n        }\n      } else if (ns && ev) {\n        // remove all listeners for a namespaced event\n        if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns]) {\n          for (var listener_ in SVG.listeners[index][ev][ns]) {\n            SVG.off(node, [ev, ns].join('.'), listener_);\n          }\n\n          delete SVG.listeners[index][ev][ns];\n        }\n      } else if (ns) {\n        // remove all listeners for a specific namespace\n        for (var event_ in SVG.listeners[index]) {\n          for (var namespace in SVG.listeners[index][event_]) {\n            if (ns === namespace) {\n              SVG.off(node, [event_, ns].join('.'));\n            }\n          }\n        }\n      } else if (ev) {\n        // remove all listeners for the event\n        if (SVG.listeners[index][ev]) {\n          for (var namespace in SVG.listeners[index][ev]) {\n            SVG.off(node, [ev, namespace].join('.'));\n          }\n\n          delete SVG.listeners[index][ev];\n        }\n      } else {\n        // remove all listeners on a given node\n        for (var event_ in SVG.listeners[index]) {\n          SVG.off(node, event_);\n        }\n\n        delete SVG.listeners[index];\n        delete SVG.handlerMap[index];\n      }\n    }; //\n\n\n    SVG.extend(SVG.Element, {\n      // Bind given event to listener\n      on: function on(event, listener, binding, options) {\n        SVG.on(this.node, event, listener, binding, options);\n        return this;\n      },\n      // Unbind event from listener\n      off: function off(event, listener) {\n        SVG.off(this.node, event, listener);\n        return this;\n      },\n      // Fire given event\n      fire: function fire(event, data) {\n        // Dispatch event\n        if (event instanceof window.Event) {\n          this.node.dispatchEvent(event);\n        } else {\n          this.node.dispatchEvent(event = new SVG.CustomEvent(event, {\n            detail: data,\n            cancelable: true\n          }));\n        }\n\n        this._event = event;\n        return this;\n      },\n      event: function event() {\n        return this._event;\n      }\n    });\n    SVG.Defs = SVG.invent({\n      // Initialize node\n      create: 'defs',\n      // Inherit from\n      inherit: SVG.Container\n    });\n    SVG.G = SVG.invent({\n      // Initialize node\n      create: 'g',\n      // Inherit from\n      inherit: SVG.Container,\n      // Add class methods\n      extend: {\n        // Move over x-axis\n        x: function x(_x2) {\n          return _x2 == null ? this.transform('x') : this.transform({\n            x: _x2 - this.x()\n          }, true);\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create a group element\n        group: function group() {\n          return this.put(new SVG.G());\n        }\n      }\n    });\n    SVG.Doc = SVG.invent({\n      // Initialize node\n      create: function create(element) {\n        if (element) {\n          // ensure the presence of a dom element\n          element = typeof element === 'string' ? document.getElementById(element) : element; // If the target is an svg element, use that element as the main wrapper.\n          // This allows svg.js to work with svg documents as well.\n\n          if (element.nodeName == 'svg') {\n            this.constructor.call(this, element);\n          } else {\n            this.constructor.call(this, SVG.create('svg'));\n            element.appendChild(this.node);\n            this.size('100%', '100%');\n          } // set svg element attributes and ensure defs node\n\n\n          this.namespace().defs();\n        }\n      },\n      // Inherit from\n      inherit: SVG.Container,\n      // Add class methods\n      extend: {\n        // Add namespaces\n        namespace: function namespace() {\n          return this.attr({\n            xmlns: SVG.ns,\n            version: '1.1'\n          }).attr('xmlns:xlink', SVG.xlink, SVG.xmlns).attr('xmlns:svgjs', SVG.svgjs, SVG.xmlns);\n        },\n        // Creates and returns defs element\n        defs: function defs() {\n          if (!this._defs) {\n            var defs; // Find or create a defs element in this instance\n\n            if (defs = this.node.getElementsByTagName('defs')[0]) {\n              this._defs = SVG.adopt(defs);\n            } else {\n              this._defs = new SVG.Defs();\n            } // Make sure the defs node is at the end of the stack\n\n\n            this.node.appendChild(this._defs.node);\n          }\n\n          return this._defs;\n        },\n        // custom parent method\n        parent: function parent() {\n          if (!this.node.parentNode || this.node.parentNode.nodeName == '#document') return null;\n          return this.node.parentNode;\n        },\n        // Removes the doc from the DOM\n        remove: function remove() {\n          if (this.parent()) {\n            this.parent().removeChild(this.node);\n          }\n\n          return this;\n        },\n        clear: function clear() {\n          // remove children\n          while (this.node.hasChildNodes()) {\n            this.node.removeChild(this.node.lastChild);\n          } // remove defs reference\n\n\n          delete this._defs; // add back parser\n\n          if (SVG.parser.draw && !SVG.parser.draw.parentNode) {\n            this.node.appendChild(SVG.parser.draw);\n          }\n\n          return this;\n        },\n        clone: function clone(parent) {\n          // write dom data to the dom so the clone can pickup the data\n          this.writeDataToDom(); // get reference to node\n\n          var node = this.node; // clone element and assign new id\n\n          var clone = assignNewId(node.cloneNode(true)); // insert the clone in the given parent or after myself\n\n          if (parent) {\n            (parent.node || parent).appendChild(clone.node);\n          } else {\n            node.parentNode.insertBefore(clone.node, node.nextSibling);\n          }\n\n          return clone;\n        }\n      }\n    }); // ### This module adds backward / forward functionality to elements.\n    //\n\n    SVG.extend(SVG.Element, {// Get all siblings, including myself\n    });\n    SVG.Gradient = SVG.invent({\n      // Initialize node\n      create: function create(type) {\n        this.constructor.call(this, SVG.create(type + 'Gradient')); // store type\n\n        this.type = type;\n      },\n      // Inherit from\n      inherit: SVG.Container,\n      // Add class methods\n      extend: {\n        // Add a color stop\n        at: function at(offset, color, opacity) {\n          return this.put(new SVG.Stop()).update(offset, color, opacity);\n        },\n        // Update gradient\n        update: function update(block) {\n          // remove all stops\n          this.clear(); // invoke passed block\n\n          if (typeof block === 'function') {\n            block.call(this, this);\n          }\n\n          return this;\n        },\n        // Return the fill id\n        fill: function fill() {\n          return 'url(#' + this.id() + ')';\n        },\n        // Alias string convertion to fill\n        toString: function toString() {\n          return this.fill();\n        },\n        // custom attr to handle transform\n        attr: function attr(a, b, c) {\n          if (a == 'transform') a = 'gradientTransform';\n          return SVG.Container.prototype.attr.call(this, a, b, c);\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create gradient element in defs\n        gradient: function gradient(type, block) {\n          return this.defs().gradient(type, block);\n        }\n      }\n    }); // Add animatable methods to both gradient and fx module\n\n    SVG.extend(SVG.Gradient, SVG.FX, {\n      // From position\n      from: function from(x, y) {\n        return (this._target || this).type == 'radial' ? this.attr({\n          fx: new SVG.Number(x),\n          fy: new SVG.Number(y)\n        }) : this.attr({\n          x1: new SVG.Number(x),\n          y1: new SVG.Number(y)\n        });\n      },\n      // To position\n      to: function to(x, y) {\n        return (this._target || this).type == 'radial' ? this.attr({\n          cx: new SVG.Number(x),\n          cy: new SVG.Number(y)\n        }) : this.attr({\n          x2: new SVG.Number(x),\n          y2: new SVG.Number(y)\n        });\n      }\n    }); // Base gradient generation\n\n    SVG.extend(SVG.Defs, {\n      // define gradient\n      gradient: function gradient(type, block) {\n        return this.put(new SVG.Gradient(type)).update(block);\n      }\n    });\n    SVG.Stop = SVG.invent({\n      // Initialize node\n      create: 'stop',\n      // Inherit from\n      inherit: SVG.Element,\n      // Add class methods\n      extend: {\n        // add color stops\n        update: function update(o) {\n          if (typeof o === 'number' || o instanceof SVG.Number) {\n            o = {\n              offset: arguments[0],\n              color: arguments[1],\n              opacity: arguments[2]\n            };\n          } // set attributes\n\n\n          if (o.opacity != null) this.attr('stop-opacity', o.opacity);\n          if (o.color != null) this.attr('stop-color', o.color);\n          if (o.offset != null) this.attr('offset', new SVG.Number(o.offset));\n          return this;\n        }\n      }\n    });\n    SVG.Pattern = SVG.invent({\n      // Initialize node\n      create: 'pattern',\n      // Inherit from\n      inherit: SVG.Container,\n      // Add class methods\n      extend: {\n        // Return the fill id\n        fill: function fill() {\n          return 'url(#' + this.id() + ')';\n        },\n        // Update pattern by rebuilding\n        update: function update(block) {\n          // remove content\n          this.clear(); // invoke passed block\n\n          if (typeof block === 'function') {\n            block.call(this, this);\n          }\n\n          return this;\n        },\n        // Alias string convertion to fill\n        toString: function toString() {\n          return this.fill();\n        },\n        // custom attr to handle transform\n        attr: function attr(a, b, c) {\n          if (a == 'transform') a = 'patternTransform';\n          return SVG.Container.prototype.attr.call(this, a, b, c);\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create pattern element in defs\n        pattern: function pattern(width, height, block) {\n          return this.defs().pattern(width, height, block);\n        }\n      }\n    });\n    SVG.extend(SVG.Defs, {\n      // Define gradient\n      pattern: function pattern(width, height, block) {\n        return this.put(new SVG.Pattern()).update(block).attr({\n          x: 0,\n          y: 0,\n          width: width,\n          height: height,\n          patternUnits: 'userSpaceOnUse'\n        });\n      }\n    });\n    SVG.Shape = SVG.invent({\n      // Initialize node\n      create: function create(element) {\n        this.constructor.call(this, element);\n      },\n      // Inherit from\n      inherit: SVG.Element\n    });\n    SVG.Symbol = SVG.invent({\n      // Initialize node\n      create: 'symbol',\n      // Inherit from\n      inherit: SVG.Container,\n      construct: {\n        // create symbol\n        symbol: function symbol() {\n          return this.put(new SVG.Symbol());\n        }\n      }\n    });\n    SVG.Use = SVG.invent({\n      // Initialize node\n      create: 'use',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add class methods\n      extend: {\n        // Use element as a reference\n        element: function element(_element, file) {\n          // Set lined element\n          return this.attr('href', (file || '') + '#' + _element, SVG.xlink);\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create a use element\n        use: function use(element, file) {\n          return this.put(new SVG.Use()).element(element, file);\n        }\n      }\n    });\n    SVG.Rect = SVG.invent({\n      // Initialize node\n      create: 'rect',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add parent method\n      construct: {\n        // Create a rect element\n        rect: function rect(width, height) {\n          return this.put(new SVG.Rect()).size(width, height);\n        }\n      }\n    });\n    SVG.Circle = SVG.invent({\n      // Initialize node\n      create: 'circle',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add parent method\n      construct: {\n        // Create circle element, based on ellipse\n        circle: function circle(size) {\n          return this.put(new SVG.Circle()).rx(new SVG.Number(size).divide(2)).move(0, 0);\n        }\n      }\n    });\n    SVG.extend(SVG.Circle, SVG.FX, {\n      // Radius x value\n      rx: function rx(_rx) {\n        return this.attr('r', _rx);\n      },\n      // Alias radius x value\n      ry: function ry(_ry) {\n        return this.rx(_ry);\n      }\n    });\n    SVG.Ellipse = SVG.invent({\n      // Initialize node\n      create: 'ellipse',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add parent method\n      construct: {\n        // Create an ellipse\n        ellipse: function ellipse(width, height) {\n          return this.put(new SVG.Ellipse()).size(width, height).move(0, 0);\n        }\n      }\n    });\n    SVG.extend(SVG.Ellipse, SVG.Rect, SVG.FX, {\n      // Radius x value\n      rx: function rx(_rx2) {\n        return this.attr('rx', _rx2);\n      },\n      // Radius y value\n      ry: function ry(_ry2) {\n        return this.attr('ry', _ry2);\n      }\n    }); // Add common method\n\n    SVG.extend(SVG.Circle, SVG.Ellipse, {\n      // Move over x-axis\n      x: function x(_x3) {\n        return _x3 == null ? this.cx() - this.rx() : this.cx(_x3 + this.rx());\n      },\n      // Move over y-axis\n      y: function y(_y2) {\n        return _y2 == null ? this.cy() - this.ry() : this.cy(_y2 + this.ry());\n      },\n      // Move by center over x-axis\n      cx: function cx(x) {\n        return x == null ? this.attr('cx') : this.attr('cx', x);\n      },\n      // Move by center over y-axis\n      cy: function cy(y) {\n        return y == null ? this.attr('cy') : this.attr('cy', y);\n      },\n      // Set width of element\n      width: function width(_width2) {\n        return _width2 == null ? this.rx() * 2 : this.rx(new SVG.Number(_width2).divide(2));\n      },\n      // Set height of element\n      height: function height(_height2) {\n        return _height2 == null ? this.ry() * 2 : this.ry(new SVG.Number(_height2).divide(2));\n      },\n      // Custom size function\n      size: function size(width, height) {\n        var p = proportionalSize(this, width, height);\n        return this.rx(new SVG.Number(p.width).divide(2)).ry(new SVG.Number(p.height).divide(2));\n      }\n    });\n    SVG.Line = SVG.invent({\n      // Initialize node\n      create: 'line',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add class methods\n      extend: {\n        // Get array\n        array: function array() {\n          return new SVG.PointArray([[this.attr('x1'), this.attr('y1')], [this.attr('x2'), this.attr('y2')]]);\n        },\n        // Overwrite native plot() method\n        plot: function plot(x1, y1, x2, y2) {\n          if (x1 == null) {\n            return this.array();\n          } else if (typeof y1 !== 'undefined') {\n            x1 = {\n              x1: x1,\n              y1: y1,\n              x2: x2,\n              y2: y2\n            };\n          } else {\n            x1 = new SVG.PointArray(x1).toLine();\n          }\n\n          return this.attr(x1);\n        },\n        // Move by left top corner\n        move: function move(x, y) {\n          return this.attr(this.array().move(x, y).toLine());\n        },\n        // Set element size to given width and height\n        size: function size(width, height) {\n          var p = proportionalSize(this, width, height);\n          return this.attr(this.array().size(p.width, p.height).toLine());\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create a line element\n        line: function line(x1, y1, x2, y2) {\n          // make sure plot is called as a setter\n          // x1 is not necessarily a number, it can also be an array, a string and a SVG.PointArray\n          return SVG.Line.prototype.plot.apply(this.put(new SVG.Line()), x1 != null ? [x1, y1, x2, y2] : [0, 0, 0, 0]);\n        }\n      }\n    });\n    SVG.Polyline = SVG.invent({\n      // Initialize node\n      create: 'polyline',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add parent method\n      construct: {\n        // Create a wrapped polyline element\n        polyline: function polyline(p) {\n          // make sure plot is called as a setter\n          return this.put(new SVG.Polyline()).plot(p || new SVG.PointArray());\n        }\n      }\n    });\n    SVG.Polygon = SVG.invent({\n      // Initialize node\n      create: 'polygon',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add parent method\n      construct: {\n        // Create a wrapped polygon element\n        polygon: function polygon(p) {\n          // make sure plot is called as a setter\n          return this.put(new SVG.Polygon()).plot(p || new SVG.PointArray());\n        }\n      }\n    }); // Add polygon-specific functions\n\n    SVG.extend(SVG.Polyline, SVG.Polygon, {\n      // Get array\n      array: function array() {\n        return this._array || (this._array = new SVG.PointArray(this.attr('points')));\n      },\n      // Plot new path\n      plot: function plot(p) {\n        return p == null ? this.array() : this.clear().attr('points', typeof p === 'string' ? p : this._array = new SVG.PointArray(p));\n      },\n      // Clear array cache\n      clear: function clear() {\n        delete this._array;\n        return this;\n      },\n      // Move by left top corner\n      move: function move(x, y) {\n        return this.attr('points', this.array().move(x, y));\n      },\n      // Set element size to given width and height\n      size: function size(width, height) {\n        var p = proportionalSize(this, width, height);\n        return this.attr('points', this.array().size(p.width, p.height));\n      }\n    }); // unify all point to point elements\n\n    SVG.extend(SVG.Line, SVG.Polyline, SVG.Polygon, {\n      // Define morphable array\n      morphArray: SVG.PointArray,\n      // Move by left top corner over x-axis\n      x: function x(_x4) {\n        return _x4 == null ? this.bbox().x : this.move(_x4, this.bbox().y);\n      },\n      // Move by left top corner over y-axis\n      y: function y(_y3) {\n        return _y3 == null ? this.bbox().y : this.move(this.bbox().x, _y3);\n      },\n      // Set width of element\n      width: function width(_width3) {\n        var b = this.bbox();\n        return _width3 == null ? b.width : this.size(_width3, b.height);\n      },\n      // Set height of element\n      height: function height(_height3) {\n        var b = this.bbox();\n        return _height3 == null ? b.height : this.size(b.width, _height3);\n      }\n    });\n    SVG.Path = SVG.invent({\n      // Initialize node\n      create: 'path',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add class methods\n      extend: {\n        // Define morphable array\n        morphArray: SVG.PathArray,\n        // Get array\n        array: function array() {\n          return this._array || (this._array = new SVG.PathArray(this.attr('d')));\n        },\n        // Plot new path\n        plot: function plot(d) {\n          return d == null ? this.array() : this.clear().attr('d', typeof d === 'string' ? d : this._array = new SVG.PathArray(d));\n        },\n        // Clear array cache\n        clear: function clear() {\n          delete this._array;\n          return this;\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create a wrapped path element\n        path: function path(d) {\n          // make sure plot is called as a setter\n          return this.put(new SVG.Path()).plot(d || new SVG.PathArray());\n        }\n      }\n    });\n    SVG.Image = SVG.invent({\n      // Initialize node\n      create: 'image',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add class methods\n      extend: {\n        // (re)load image\t\n        load: function load(url) {\n          if (!url) return this;\n          var self = this,\n              img = new window.Image(); // preload image\t\n\n          SVG.on(img, 'load', function () {\n            SVG.off(img);\n            var p = self.parent(SVG.Pattern);\n            if (p === null) return; // ensure image size\t\n\n            if (self.width() == 0 && self.height() == 0) {\n              self.size(img.width, img.height);\n            } // ensure pattern size if not set\t\n\n\n            if (p && p.width() == 0 && p.height() == 0) {\n              p.size(self.width(), self.height());\n            } // callback\t\n\n\n            if (typeof self._loaded === 'function') {\n              self._loaded.call(self, {\n                width: img.width,\n                height: img.height,\n                ratio: img.width / img.height,\n                url: url\n              });\n            }\n          });\n          SVG.on(img, 'error', function (e) {\n            SVG.off(img);\n\n            if (typeof self._error === 'function') {\n              self._error.call(self, e);\n            }\n          });\n          return this.attr('href', img.src = this.src = url, SVG.xlink);\n        },\n        // Add loaded callback\t\n        loaded: function loaded(_loaded) {\n          this._loaded = _loaded;\n          return this;\n        },\n        error: function error(_error) {\n          this._error = _error;\n          return this;\n        }\n      },\n      // Add parent method\n      construct: {\n        // create image element, load image and set its size\t\n        image: function image(source, width, height) {\n          return this.put(new SVG.Image()).load(source).size(width || 0, height || width || 0);\n        }\n      }\n    });\n    SVG.Text = SVG.invent({\n      // Initialize node\n      create: function create() {\n        this.constructor.call(this, SVG.create('text'));\n        this.dom.leading = new SVG.Number(1.3); // store leading value for rebuilding\n\n        this._rebuild = true; // enable automatic updating of dy values\n\n        this._build = false; // disable build mode for adding multiple lines\n        // set default font\n\n        this.attr('font-family', SVG.defaults.attrs['font-family']);\n      },\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add class methods\n      extend: {\n        // Move over x-axis\n        x: function x(_x5) {\n          // act as getter\n          if (_x5 == null) {\n            return this.attr('x');\n          }\n\n          return this.attr('x', _x5);\n        },\n        // Set the text content\n        text: function text(_text) {\n          // act as getter\n          if (typeof _text === 'undefined') {\n            var _text = '';\n            var children = this.node.childNodes;\n\n            for (var i = 0, len = children.length; i < len; ++i) {\n              // add newline if its not the first child and newLined is set to true\n              if (i != 0 && children[i].nodeType != 3 && SVG.adopt(children[i]).dom.newLined == true) {\n                _text += '\\n';\n              } // add content of this node\n\n\n              _text += children[i].textContent;\n            }\n\n            return _text;\n          } // remove existing content\n\n\n          this.clear().build(true);\n\n          if (typeof _text === 'function') {\n            // call block\n            _text.call(this, this);\n          } else {\n            // store text and make sure text is not blank\n            _text = _text.split('\\n'); // build new lines\n\n            for (var i = 0, il = _text.length; i < il; i++) {\n              this.tspan(_text[i]).newLine();\n            }\n          } // disable build mode and rebuild lines\n\n\n          return this.build(false).rebuild();\n        },\n        // Set font size\n        size: function size(_size) {\n          return this.attr('font-size', _size).rebuild();\n        },\n        // Set / get leading\n        leading: function leading(value) {\n          // act as getter\n          if (value == null) {\n            return this.dom.leading;\n          } // act as setter\n\n\n          this.dom.leading = new SVG.Number(value);\n          return this.rebuild();\n        },\n        // Get all the first level lines\n        lines: function lines() {\n          var node = (this.textPath && this.textPath() || this).node; // filter tspans and map them to SVG.js instances\n\n          var lines = SVG.utils.map(SVG.utils.filterSVGElements(node.childNodes), function (el) {\n            return SVG.adopt(el);\n          }); // return an instance of SVG.set\n\n          return new SVG.Set(lines);\n        },\n        // Rebuild appearance type\n        rebuild: function rebuild(_rebuild) {\n          // store new rebuild flag if given\n          if (typeof _rebuild === 'boolean') {\n            this._rebuild = _rebuild;\n          } // define position of all lines\n\n\n          if (this._rebuild) {\n            var self = this,\n                blankLineOffset = 0,\n                dy = this.dom.leading * new SVG.Number(this.attr('font-size'));\n            this.lines().each(function () {\n              if (this.dom.newLined) {\n                if (!self.textPath()) {\n                  this.attr('x', self.attr('x'));\n                }\n\n                if (this.text() == '\\n') {\n                  blankLineOffset += dy;\n                } else {\n                  this.attr('dy', dy + blankLineOffset);\n                  blankLineOffset = 0;\n                }\n              }\n            });\n            this.fire('rebuild');\n          }\n\n          return this;\n        },\n        // Enable / disable build mode\n        build: function build(_build) {\n          this._build = !!_build;\n          return this;\n        },\n        // overwrite method from parent to set data properly\n        setData: function setData(o) {\n          this.dom = o;\n          this.dom.leading = new SVG.Number(o.leading || 1.3);\n          return this;\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create text element\n        text: function text(_text2) {\n          return this.put(new SVG.Text()).text(_text2);\n        },\n        // Create plain text element\n        plain: function plain(text) {\n          return this.put(new SVG.Text()).plain(text);\n        }\n      }\n    });\n    SVG.Tspan = SVG.invent({\n      // Initialize node\n      create: 'tspan',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add class methods\n      extend: {\n        // Set text content\n        text: function text(_text3) {\n          if (_text3 == null) return this.node.textContent + (this.dom.newLined ? '\\n' : '');\n          typeof _text3 === 'function' ? _text3.call(this, this) : this.plain(_text3);\n          return this;\n        },\n        // Shortcut dx\n        dx: function dx(_dx) {\n          return this.attr('dx', _dx);\n        },\n        // Shortcut dy\n        dy: function dy(_dy) {\n          return this.attr('dy', _dy);\n        },\n        // Create new line\n        newLine: function newLine() {\n          // fetch text parent\n          var t = this.parent(SVG.Text); // mark new line\n\n          this.dom.newLined = true; // apply new hy¡n\n\n          return this.dy(t.dom.leading * t.attr('font-size')).attr('x', t.x());\n        }\n      }\n    });\n    SVG.extend(SVG.Text, SVG.Tspan, {\n      // Create plain text node\n      plain: function plain(text) {\n        // clear if build mode is disabled\n        if (this._build === false) {\n          this.clear();\n        } // create text node\n\n\n        this.node.appendChild(document.createTextNode(text));\n        return this;\n      },\n      // Create a tspan\n      tspan: function tspan(text) {\n        var node = (this.textPath && this.textPath() || this).node,\n            tspan = new SVG.Tspan(); // clear if build mode is disabled\n\n        if (this._build === false) {\n          this.clear();\n        } // add new tspan\n\n\n        node.appendChild(tspan.node);\n        return tspan.text(text);\n      },\n      // Clear all lines\n      clear: function clear() {\n        var node = (this.textPath && this.textPath() || this).node; // remove existing child nodes\n\n        while (node.hasChildNodes()) {\n          node.removeChild(node.lastChild);\n        }\n\n        return this;\n      },\n      // Get length of text element\n      length: function length() {\n        return this.node.getComputedTextLength();\n      }\n    });\n    SVG.TextPath = SVG.invent({\n      // Initialize node\n      create: 'textPath',\n      // Inherit from\n      inherit: SVG.Parent,\n      // Define parent class\n      parent: SVG.Text,\n      // Add parent method\n      construct: {\n        morphArray: SVG.PathArray,\n        // return the array of the path track element\n        array: function array() {\n          var track = this.track();\n          return track ? track.array() : null;\n        },\n        // Plot path if any\n        plot: function plot(d) {\n          var track = this.track(),\n              pathArray = null;\n\n          if (track) {\n            pathArray = track.plot(d);\n          }\n\n          return d == null ? pathArray : this;\n        },\n        // Get the path track element\n        track: function track() {\n          var path = this.textPath();\n\n          if (path) {\n            return path.reference('href');\n          }\n        },\n        // Get the textPath child\n        textPath: function textPath() {\n          if (this.node.firstChild && this.node.firstChild.nodeName == 'textPath') {\n            return SVG.adopt(this.node.firstChild);\n          }\n        }\n      }\n    });\n    SVG.Nested = SVG.invent({\n      // Initialize node\n      create: function create() {\n        this.constructor.call(this, SVG.create('svg'));\n        this.style('overflow', 'visible');\n      },\n      // Inherit from\n      inherit: SVG.Container,\n      // Add parent method\n      construct: {\n        // Create nested svg document\n        nested: function nested() {\n          return this.put(new SVG.Nested());\n        }\n      }\n    }); // Define list of available attributes for stroke and fill\n\n    var sugar = {\n      stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'],\n      fill: ['color', 'opacity', 'rule'],\n      prefix: function prefix(t, a) {\n        return a == 'color' ? t : t + '-' + a;\n      }\n    } // Add sugar for fill and stroke\n    ;\n    ['fill', 'stroke'].forEach(function (m) {\n      var extension = {};\n\n      extension[m] = function (o) {\n        if (typeof o === 'undefined') {\n          return this;\n        }\n\n        if (typeof o === 'string' || SVG.Color.isRgb(o) || o && typeof o.fill === 'function') {\n          this.attr(m, o);\n        } else // set all attributes from sugar.fill and sugar.stroke list\n          {\n            for (var i = sugar[m].length - 1; i >= 0; i--) {\n              if (o[sugar[m][i]] != null) {\n                this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]]);\n              }\n            }\n          }\n\n        return this;\n      };\n\n      SVG.extend(SVG.Element, SVG.FX, extension);\n    });\n    SVG.extend(SVG.Element, SVG.FX, {\n      // Map translate to transform\n      translate: function translate(x, y) {\n        return this.transform({\n          x: x,\n          y: y\n        });\n      },\n      // Map matrix to transform\n      matrix: function matrix(m) {\n        return this.attr('transform', new SVG.Matrix(arguments.length == 6 ? [].slice.call(arguments) : m));\n      },\n      // Opacity\n      opacity: function opacity(value) {\n        return this.attr('opacity', value);\n      },\n      // Relative move over x axis\n      dx: function dx(x) {\n        return this.x(new SVG.Number(x).plus(this instanceof SVG.FX ? 0 : this.x()), true);\n      },\n      // Relative move over y axis\n      dy: function dy(y) {\n        return this.y(new SVG.Number(y).plus(this instanceof SVG.FX ? 0 : this.y()), true);\n      }\n    });\n    SVG.extend(SVG.Path, {\n      // Get path length\n      length: function length() {\n        return this.node.getTotalLength();\n      },\n      // Get point at length\n      pointAt: function pointAt(length) {\n        return this.node.getPointAtLength(length);\n      }\n    });\n    SVG.Set = SVG.invent({\n      // Initialize\n      create: function create(members) {\n        // Set initial state\n        Array.isArray(members) ? this.members = members : this.clear();\n      },\n      // Add class methods\n      extend: {\n        // Add element to set\n        add: function add() {\n          var il,\n              elements = [].slice.call(arguments);\n\n          for (var i = 0, il = elements.length; i < il; i++) {\n            this.members.push(elements[i]);\n          }\n\n          return this;\n        },\n        // Remove element from set\n        remove: function remove(element) {\n          var i = this.index(element); // remove given child\n\n          if (i > -1) {\n            this.members.splice(i, 1);\n          }\n\n          return this;\n        },\n        // Iterate over all members\n        each: function each(block) {\n          for (var i = 0, il = this.members.length; i < il; i++) {\n            block.apply(this.members[i], [i, this.members]);\n          }\n\n          return this;\n        },\n        // Restore to defaults\n        clear: function clear() {\n          // initialize store\n          this.members = [];\n          return this;\n        },\n        // Get the length of a set\n        length: function length() {\n          return this.members.length;\n        },\n        // Checks if a given element is present in set\n        has: function has(element) {\n          return this.index(element) >= 0;\n        },\n        // retuns index of given element in set\n        index: function index(element) {\n          return this.members.indexOf(element);\n        },\n        // Get member at given index\n        get: function get(i) {\n          return this.members[i];\n        },\n        // Get first member\n        first: function first() {\n          return this.get(0);\n        },\n        // Get last member\n        last: function last() {\n          return this.get(this.members.length - 1);\n        },\n        // Default value\n        valueOf: function valueOf() {\n          return this.members;\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create a new set\n        set: function set(members) {\n          return new SVG.Set(members);\n        }\n      }\n    });\n    SVG.FX.Set = SVG.invent({\n      // Initialize node\n      create: function create(set) {\n        // store reference to set\n        this.set = set;\n      }\n    }); // Alias methods\n\n    SVG.Set.inherit = function () {\n      var methods = []; // gather shape methods\n\n      for (var m in SVG.Shape.prototype) {\n        if (typeof SVG.Shape.prototype[m] === 'function' && typeof SVG.Set.prototype[m] !== 'function') {\n          methods.push(m);\n        }\n      } // apply shape aliasses\n\n\n      methods.forEach(function (method) {\n        SVG.Set.prototype[method] = function () {\n          for (var i = 0, il = this.members.length; i < il; i++) {\n            if (this.members[i] && typeof this.members[i][method] === 'function') {\n              this.members[i][method].apply(this.members[i], arguments);\n            }\n          }\n\n          return method == 'animate' ? this.fx || (this.fx = new SVG.FX.Set(this)) : this;\n        };\n      }); // clear methods for the next round\n\n      methods = []; // gather fx methods\n\n      for (var m in SVG.FX.prototype) {\n        if (typeof SVG.FX.prototype[m] === 'function' && typeof SVG.FX.Set.prototype[m] !== 'function') {\n          methods.push(m);\n        }\n      } // apply fx aliasses\n\n\n      methods.forEach(function (method) {\n        SVG.FX.Set.prototype[method] = function () {\n          for (var i = 0, il = this.set.members.length; i < il; i++) {\n            this.set.members[i].fx[method].apply(this.set.members[i].fx, arguments);\n          }\n\n          return this;\n        };\n      });\n    };\n\n    SVG.extend(SVG.Element, {});\n    SVG.extend(SVG.Element, {\n      // Remember arbitrary data\n      remember: function remember(k, v) {\n        // remember every item in an object individually\n        if (_typeof(arguments[0]) === 'object') {\n          for (var v_ in k) {\n            this.remember(v_, k[v_]);\n          }\n        } // retrieve memory\n        else if (arguments.length == 1) {\n          return this.memory()[k];\n        } // store memory\n        else {\n          this.memory()[k] = v;\n        }\n\n        return this;\n      },\n      // Erase a given memory\n      forget: function forget() {\n        if (arguments.length == 0) {\n          this._memory = {};\n        } else {\n          for (var i = arguments.length - 1; i >= 0; i--) {\n            delete this.memory()[arguments[i]];\n          }\n        }\n\n        return this;\n      },\n      // Initialize or return local memory object\n      memory: function memory() {\n        return this._memory || (this._memory = {});\n      }\n    }); // Method for getting an element by id\n\n    SVG.get = function (id) {\n      var node = document.getElementById(idFromReference(id) || id);\n      return SVG.adopt(node);\n    }; // Select elements by query string\n\n\n    SVG.select = function (query, parent) {\n      return new SVG.Set(SVG.utils.map((parent || document).querySelectorAll(query), function (node) {\n        return SVG.adopt(node);\n      }));\n    };\n\n    SVG.extend(SVG.Parent, {\n      // Scoped select method\n      select: function select(query) {\n        return SVG.select(query, this.node);\n      }\n    });\n\n    function pathRegReplace(a, b, c, d) {\n      return c + d.replace(SVG.regex.dots, ' .');\n    } // creates deep clone of array\n\n\n    function _is(el, obj) {\n      return el instanceof obj;\n    } // tests if a given selector matches an element\n\n\n    function _matches(el, selector) {\n      return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector);\n    } // Convert dash-separated-string to camelCase\n\n\n    function camelCase(s) {\n      return s.toLowerCase().replace(/-(.)/g, function (m, g) {\n        return g.toUpperCase();\n      });\n    } // Capitalize first letter of a string\n\n\n    function capitalize(s) {\n      return s.charAt(0).toUpperCase() + s.slice(1);\n    } // Ensure to six-based hex\n\n\n    function fullHex(hex) {\n      return hex.length == 4 ? ['#', hex.substring(1, 2), hex.substring(1, 2), hex.substring(2, 3), hex.substring(2, 3), hex.substring(3, 4), hex.substring(3, 4)].join('') : hex;\n    } // Component to hex value\n\n\n    function compToHex(comp) {\n      var hex = comp.toString(16);\n      return hex.length == 1 ? '0' + hex : hex;\n    } // Calculate proportional width and height values when necessary\n\n\n    function proportionalSize(element, width, height) {\n      if (width == null || height == null) {\n        var box = element.bbox();\n\n        if (width == null) {\n          width = box.width / box.height * height;\n        } else if (height == null) {\n          height = box.height / box.width * width;\n        }\n      }\n\n      return {\n        width: width,\n        height: height\n      };\n    } // Delta transform point\n\n\n    function deltaTransformPoint(matrix, x, y) {\n      return {\n        x: x * matrix.a + y * matrix.c + 0,\n        y: x * matrix.b + y * matrix.d + 0\n      };\n    } // Map matrix array to object\n\n\n    function arrayToMatrix(a) {\n      return {\n        a: a[0],\n        b: a[1],\n        c: a[2],\n        d: a[3],\n        e: a[4],\n        f: a[5]\n      };\n    } // Parse matrix if required\n\n\n    function parseMatrix(matrix) {\n      if (!(matrix instanceof SVG.Matrix)) {\n        matrix = new SVG.Matrix(matrix);\n      }\n\n      return matrix;\n    } // Add centre point to transform object\n\n\n    function arrayToString(a) {\n      for (var i = 0, il = a.length, s = ''; i < il; i++) {\n        s += a[i][0];\n\n        if (a[i][1] != null) {\n          s += a[i][1];\n\n          if (a[i][2] != null) {\n            s += ' ';\n            s += a[i][2];\n\n            if (a[i][3] != null) {\n              s += ' ';\n              s += a[i][3];\n              s += ' ';\n              s += a[i][4];\n\n              if (a[i][5] != null) {\n                s += ' ';\n                s += a[i][5];\n                s += ' ';\n                s += a[i][6];\n\n                if (a[i][7] != null) {\n                  s += ' ';\n                  s += a[i][7];\n                }\n              }\n            }\n          }\n        }\n      }\n\n      return s + ' ';\n    } // Deep new id assignment\n\n\n    function assignNewId(node) {\n      // do the same for SVG child nodes as well\n      for (var i = node.childNodes.length - 1; i >= 0; i--) {\n        if (node.childNodes[i] instanceof window.SVGElement) {\n          assignNewId(node.childNodes[i]);\n        }\n      }\n\n      return SVG.adopt(node).id(SVG.eid(node.nodeName));\n    } // Add more bounding box properties\n\n\n    function fullBox(b) {\n      if (b.x == null) {\n        b.x = 0;\n        b.y = 0;\n        b.width = 0;\n        b.height = 0;\n      }\n\n      b.w = b.width;\n      b.h = b.height;\n      b.x2 = b.x + b.width;\n      b.y2 = b.y + b.height;\n      b.cx = b.x + b.width / 2;\n      b.cy = b.y + b.height / 2;\n      return b;\n    } // Get id from reference string\n\n\n    function idFromReference(url) {\n      var m = (url || '').toString().match(SVG.regex.reference);\n      if (m) return m[1];\n    } // If values like 1e-88 are passed, this is not a valid 32 bit float,\n    // but in those cases, we are so close to 0 that 0 works well!\n\n\n    function float32String(v) {\n      return Math.abs(v) > 1e-37 ? v : 0;\n    } // Create matrix array for looping\n\n\n    var abcdef = 'abcdef'.split(''); // Add CustomEvent to IE9 and IE10\t\n\n    if (typeof window.CustomEvent !== 'function') {\n      // Code from: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent\t\n      var CustomEventPoly = function CustomEventPoly(event, options) {\n        options = options || {\n          bubbles: false,\n          cancelable: false,\n          detail: undefined\n        };\n        var e = document.createEvent('CustomEvent');\n        e.initCustomEvent(event, options.bubbles, options.cancelable, options.detail);\n        return e;\n      };\n\n      CustomEventPoly.prototype = window.Event.prototype;\n      SVG.CustomEvent = CustomEventPoly;\n    } else {\n      SVG.CustomEvent = window.CustomEvent;\n    }\n\n    return SVG;\n  });\n\n  /*! svg.filter.js - v2.0.2 - 2016-02-24\n  * https://github.com/wout/svg.filter.js\n  * Copyright (c) 2016 Wout Fierens; Licensed MIT */\n  (function() {\n\n    // Main filter class\n    SVG.Filter = SVG.invent({\n      create: 'filter',\n      inherit: SVG.Parent,\n      extend: {\n        // Static strings\n        source:           'SourceGraphic',\n        sourceAlpha:      'SourceAlpha',\n        background:       'BackgroundImage',\n        backgroundAlpha:  'BackgroundAlpha',\n        fill:             'FillPaint',\n        stroke:           'StrokePaint',\n\n        autoSetIn: true,\n        // Custom put method for leaner code\n        put: function(element, i) {\n          this.add(element, i);\n\n          if(!element.attr('in') && this.autoSetIn){\n            element.attr('in',this.source);\n          }\n          if(!element.attr('result')){\n            element.attr('result',element);\n          }\n\n          return element\n        },\n        // Blend effect\n        blend: function(in1, in2, mode) {\n          return this.put(new SVG.BlendEffect(in1, in2, mode))\n        },\n        // ColorMatrix effect\n        colorMatrix: function(type, values) {\n          return this.put(new SVG.ColorMatrixEffect(type, values))\n        },\n        // ConvolveMatrix effect\n        convolveMatrix: function(matrix) {\n          return this.put(new SVG.ConvolveMatrixEffect(matrix))\n        },\n        // ComponentTransfer effect\n        componentTransfer: function(components) {\n          return this.put(new SVG.ComponentTransferEffect(components))\n        },\n        // Composite effect\n        composite: function(in1, in2, operator) {\n          return this.put(new SVG.CompositeEffect(in1, in2, operator))\n        },\n        // Flood effect\n        flood: function(color, opacity) {\n          return this.put(new SVG.FloodEffect(color, opacity))\n        },\n        // Offset effect\n        offset: function(x, y) {\n          return this.put(new SVG.OffsetEffect(x,y))\n        },\n        // Image effect\n        image: function(src) {\n          return this.put(new SVG.ImageEffect(src))\n        },\n        // Merge effect\n        merge: function() {\n          //pass the array of arguments to the constructor because we dont know if the user gave us an array as the first arguemnt or wether they listed the effects in the arguments\n          var args = [undefined];\n          for(var i in arguments) args.push(arguments[i]);\n          return this.put(new (SVG.MergeEffect.bind.apply(SVG.MergeEffect,args)))\n        },\n        // Gaussian Blur effect\n        gaussianBlur: function(x,y) {\n          return this.put(new SVG.GaussianBlurEffect(x,y))\n        },\n        // Morphology effect\n        morphology: function(operator,radius){\n          return this.put(new SVG.MorphologyEffect(operator,radius))\n        },\n        // DiffuseLighting effect\n        diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){\n          return this.put(new SVG.DiffuseLightingEffect(surfaceScale,diffuseConstant,kernelUnitLength))\n        },\n        // DisplacementMap effect\n        displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){\n          return this.put(new SVG.DisplacementMapEffect(in1,in2,scale,xChannelSelector,yChannelSelector))\n        },\n        // SpecularLighting effect\n        specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){\n          return this.put(new SVG.SpecularLightingEffect(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength))\n        },\n        // Tile effect\n        tile: function(){\n          return this.put(new SVG.TileEffect());\n        },\n        // Turbulence effect\n        turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){\n          return this.put(new SVG.TurbulenceEffect(baseFrequency,numOctaves,seed,stitchTiles,type))\n        },\n        // Default string value\n        toString: function() {\n          return 'url(#' + this.attr('id') + ')'\n        }\n      }\n    });\n\n    //add .filter function\n    SVG.extend(SVG.Defs, {\n      // Define filter\n      filter: function(block) {\n        var filter = this.put(new SVG.Filter);\n\n        /* invoke passed block */\n        if (typeof block === 'function')\n          block.call(filter, filter);\n\n        return filter\n      }\n    });\n    SVG.extend(SVG.Container, {\n      // Define filter on defs\n      filter: function(block) {\n        return this.defs().filter(block)\n      }\n    });\n    SVG.extend(SVG.Element, SVG.G, SVG.Nested, {\n      // Create filter element in defs and store reference\n      filter: function(block) {\n        this.filterer = block instanceof SVG.Element ?\n          block : this.doc().filter(block);\n\n        if(this.doc() && this.filterer.doc() !== this.doc()){\n          this.doc().defs().add(this.filterer);\n        }\n\n        this.attr('filter', this.filterer);\n\n        return this.filterer\n      },\n      // Remove filter\n      unfilter: function(remove) {\n        /* also remove the filter node */\n        if (this.filterer && remove === true)\n          this.filterer.remove();\n\n        /* delete reference to filterer */\n        delete this.filterer;\n\n        /* remove filter attribute */\n        return this.attr('filter', null)\n      }\n    });\n\n    // Create SVG.Effect class\n    SVG.Effect = SVG.invent({\n      create: function(){\n        this.constructor.call(this);\n      },\n      inherit: SVG.Element,\n      extend: {\n        // Set in attribute\n        in: function(effect) {\n          return effect == null? this.parent() && this.parent().select('[result=\"'+this.attr('in')+'\"]').get(0) || this.attr('in') : this.attr('in', effect)\n        },\n        // Named result\n        result: function(result) {\n          return result == null? this.attr('result') : this.attr('result',result)\n        },\n        // Stringification\n        toString: function() {\n          return this.result()\n        }\n      }\n    });\n\n    // create class for parent effects like merge\n    // Inherit from SVG.Parent\n    SVG.ParentEffect = SVG.invent({\n      create: function(){\n        this.constructor.call(this);\n      },\n      inherit: SVG.Parent,\n      extend: {\n        // Set in attribute\n        in: function(effect) {\n          return effect == null? this.parent() && this.parent().select('[result=\"'+this.attr('in')+'\"]').get(0) || this.attr('in') : this.attr('in', effect)\n        },\n        // Named result\n        result: function(result) {\n          return result == null? this.attr('result') : this.attr('result',result)\n        },\n        // Stringification\n        toString: function() {\n          return this.result()\n        }\n      }\n    });\n\n    //chaining\n    var chainingEffects = {\n      // Blend effect\n      blend: function(in2, mode) {\n        return this.parent() && this.parent().blend(this, in2, mode) //pass this as the first input\n      },\n      // ColorMatrix effect\n      colorMatrix: function(type, values) {\n        return this.parent() && this.parent().colorMatrix(type, values).in(this)\n      },\n      // ConvolveMatrix effect\n      convolveMatrix: function(matrix) {\n        return this.parent() && this.parent().convolveMatrix(matrix).in(this)\n      },\n      // ComponentTransfer effect\n      componentTransfer: function(components) {\n        return this.parent() && this.parent().componentTransfer(components).in(this)\n      },\n      // Composite effect\n      composite: function(in2, operator) {\n        return this.parent() && this.parent().composite(this, in2, operator) //pass this as the first input\n      },\n      // Flood effect\n      flood: function(color, opacity) {\n        return this.parent() && this.parent().flood(color, opacity) //this effect dont have inputs\n      },\n      // Offset effect\n      offset: function(x, y) {\n        return this.parent() && this.parent().offset(x,y).in(this)\n      },\n      // Image effect\n      image: function(src) {\n        return this.parent() && this.parent().image(src) //this effect dont have inputs\n      },\n      // Merge effect\n      merge: function() {\n        return this.parent() && this.parent().merge.apply(this.parent(),[this].concat(arguments)) //pass this as the first argument\n      },\n      // Gaussian Blur effect\n      gaussianBlur: function(x,y) {\n        return this.parent() && this.parent().gaussianBlur(x,y).in(this)\n      },\n      // Morphology effect\n      morphology: function(operator,radius){\n        return this.parent() && this.parent().morphology(operator,radius).in(this)\n      },\n      // DiffuseLighting effect\n      diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){\n        return this.parent() && this.parent().diffuseLighting(surfaceScale,diffuseConstant,kernelUnitLength).in(this)\n      },\n      // DisplacementMap effect\n      displacementMap: function(in2,scale,xChannelSelector,yChannelSelector){\n        return this.parent() && this.parent().displacementMap(this,in2,scale,xChannelSelector,yChannelSelector) //pass this as the first input\n      },\n      // SpecularLighting effect\n      specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){\n        return this.parent() && this.parent().specularLighting(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength).in(this)\n      },\n      // Tile effect\n      tile: function(){\n        return this.parent() && this.parent().tile().in(this)\n      },\n      // Turbulence effect\n      turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){\n        return this.parent() && this.parent().turbulence(baseFrequency,numOctaves,seed,stitchTiles,type).in(this)\n      }\n    };\n    SVG.extend(SVG.Effect,chainingEffects);\n    SVG.extend(SVG.ParentEffect,chainingEffects);\n\n    //crea class for child effects, like MergeNode, FuncR and lights\n    SVG.ChildEffect = SVG.invent({\n      create: function(){\n        this.constructor.call(this);\n      },\n      inherit: SVG.Element,\n      extend: {\n      in: function(effect){\n        this.attr('in',effect);\n      }\n      //dont include any \"result\" functions because these types of nodes dont have them\n      }\n    });\n\n    // Create all different effects\n    var effects = {\n      blend: function(in1,in2,mode){\n        this.attr({\n          in: in1,\n          in2: in2,\n          mode: mode || 'normal'\n        });\n      },\n      colorMatrix: function(type,values){\n        if (type == 'matrix')\n          values = normaliseMatrix(values);\n\n        this.attr({\n          type:   type\n        , values: typeof values == 'undefined' ? null : values\n        });\n      },\n      convolveMatrix: function(matrix){\n        matrix = normaliseMatrix(matrix);\n\n        this.attr({\n          order:        Math.sqrt(matrix.split(' ').length)\n        , kernelMatrix: matrix\n        });\n      },\n      composite: function(in1, in2, operator){\n        this.attr({\n          in: in1,\n          in2: in2,\n          operator: operator\n        });\n      },\n      flood: function(color,opacity){\n        this.attr('flood-color',color);\n        if(opacity != null) this.attr('flood-opacity',opacity);\n      },\n      offset: function(x,y){\n        this.attr({\n          dx: x,\n          dy: y\n        });\n      },\n      image: function(src){\n        this.attr('href', src, SVG.xlink);\n      },\n      displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){\n        this.attr({\n          in: in1,\n          in2: in2,\n          scale: scale,\n          xChannelSelector: xChannelSelector,\n          yChannelSelector: yChannelSelector\n        });\n      },\n      gaussianBlur: function(x,y){\n        if(x != null || y != null)\n          this.attr('stdDeviation', listString(Array.prototype.slice.call(arguments)));\n        else\n          this.attr('stdDeviation', '0 0');\n      },\n      morphology: function(operator,radius){\n        this.attr({\n          operator: operator,\n          radius: radius\n        });\n      },\n      tile: function(){\n\n      },\n      turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){\n        this.attr({\n          numOctaves: numOctaves,\n          seed: seed,\n          stitchTiles: stitchTiles,\n          baseFrequency: baseFrequency,\n          type: type\n        });\n      }\n    };\n\n    // Create all parent effects\n    var parentEffects = {\n      merge: function(){\n        var children;\n\n        //test to see if we have a set\n        if(arguments[0] instanceof SVG.Set){\n          var that = this;\n          arguments[0].each(function(i){\n            if(this instanceof SVG.MergeNode)\n              that.put(this);\n            else if(this instanceof SVG.Effect || this instanceof SVG.ParentEffect)\n              that.put(new SVG.MergeNode(this));\n          });\n        }\n        else {\n          //if the first argument is an array use it\n          if(Array.isArray(arguments[0]))\n            children = arguments[0];\n          else\n            children = arguments;\n\n          for(var i = 0; i < children.length; i++){\n            if(children[i] instanceof SVG.MergeNode){\n              this.put(children[i]);\n            }\n            else this.put(new SVG.MergeNode(children[i]));\n          }\n        }\n      },\n      componentTransfer: function(compontents){\n        /* create rgb set */\n        this.rgb = new SVG.Set\n\n        /* create components */\n        ;(['r', 'g', 'b', 'a']).forEach(function(c) {\n          /* create component */\n          this[c] = new SVG['Func' + c.toUpperCase()]('identity');\n\n          /* store component in set */\n          this.rgb.add(this[c]);\n\n          /* add component node */\n          this.node.appendChild(this[c].node);\n        }.bind(this)); //lost context in foreach\n\n        /* set components */\n        if (compontents) {\n          if (compontents.rgb) {\n  (['r', 'g', 'b']).forEach(function(c) {\n              this[c].attr(compontents.rgb);\n            }.bind(this));\n\n            delete compontents.rgb;\n          }\n\n          /* set individual components */\n          for (var c in compontents)\n            this[c].attr(compontents[c]);\n        }\n      },\n      diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){\n        this.attr({\n          surfaceScale: surfaceScale,\n          diffuseConstant: diffuseConstant,\n          kernelUnitLength: kernelUnitLength\n        });\n      },\n      specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){\n        this.attr({\n          surfaceScale: surfaceScale,\n          diffuseConstant: diffuseConstant,\n          specularExponent: specularExponent,\n          kernelUnitLength: kernelUnitLength\n        });\n      },\n    };\n\n    // Create child effects like PointLight and MergeNode\n    var childEffects = {\n      distantLight: function(azimuth, elevation){\n        this.attr({\n          azimuth: azimuth,\n          elevation: elevation\n        });\n      },\n      pointLight: function(x,y,z){\n        this.attr({\n          x: x,\n          y: y,\n          z: z\n        });\n      },\n      spotLight: function(x,y,z,pointsAtX,pointsAtY,pointsAtZ){\n        this.attr({\n          x: x,\n          y: y,\n          z: z,\n          pointsAtX: pointsAtX,\n          pointsAtY: pointsAtY,\n          pointsAtZ: pointsAtZ\n        });\n      },\n      mergeNode: function(in1){\n        this.attr('in',in1);\n      }\n    }\n\n    // Create compontent functions\n    ;(['r', 'g', 'b', 'a']).forEach(function(c) {\n      /* create class */\n      childEffects['Func' + c.toUpperCase()] = function(type) {\n        this.attr('type',type);\n\n        // take diffent arguments based on the type\n        switch(type){\n          case 'table':\n            this.attr('tableValues',arguments[1]);\n            break\n          case 'linear':\n            this.attr('slope',arguments[1]);\n            this.attr('intercept',arguments[2]);\n            break\n          case 'gamma':\n            this.attr('amplitude',arguments[1]);\n            this.attr('exponent',arguments[2]);\n            this.attr('offset',arguments[2]);\n            break\n        }\n      };\n    });\n\n    //create effects\n    foreach(effects,function(effect,i){\n\n      /* capitalize name */\n      var name = i.charAt(0).toUpperCase() + i.slice(1);\n      var proto = {};\n\n      /* create class */\n      SVG[name + 'Effect'] = SVG.invent({\n        create: function() {\n          //call super\n          this.constructor.call(this, SVG.create('fe' + name));\n\n          //call constructor for this effect\n          effect.apply(this,arguments);\n\n          //set the result\n          this.result(this.attr('id') + 'Out');\n        },\n        inherit: SVG.Effect,\n        extend: proto\n      });\n    });\n\n    //create parent effects\n    foreach(parentEffects,function(effect,i){\n\n      /* capitalize name */\n      var name = i.charAt(0).toUpperCase() + i.slice(1);\n      var proto = {};\n\n      /* create class */\n      SVG[name + 'Effect'] = SVG.invent({\n        create: function() {\n          //call super\n          this.constructor.call(this, SVG.create('fe' + name));\n\n          //call constructor for this effect\n          effect.apply(this,arguments);\n\n          //set the result\n          this.result(this.attr('id') + 'Out');\n        },\n        inherit: SVG.ParentEffect,\n        extend: proto\n      });\n    });\n\n    //create child effects\n    foreach(childEffects,function(effect,i){\n\n      /* capitalize name */\n      var name = i.charAt(0).toUpperCase() + i.slice(1);\n      var proto = {};\n\n      /* create class */\n      SVG[name] = SVG.invent({\n        create: function() {\n          //call super\n          this.constructor.call(this, SVG.create('fe' + name));\n\n          //call constructor for this effect\n          effect.apply(this,arguments);\n        },\n        inherit: SVG.ChildEffect,\n        extend: proto\n      });\n    });\n\n    // Effect-specific extensions\n    SVG.extend(SVG.MergeEffect,{\n      in: function(effect){\n        if(effect instanceof SVG.MergeNode)\n          this.add(effect,0);\n        else\n          this.add(new SVG.MergeNode(effect),0);\n\n        return this\n      }\n    });\n    SVG.extend(SVG.CompositeEffect,SVG.BlendEffect,SVG.DisplacementMapEffect,{\n      in2: function(effect){\n          return effect == null? this.parent() && this.parent().select('[result=\"'+this.attr('in2')+'\"]').get(0) || this.attr('in2') : this.attr('in2', effect)\n      }\n    });\n\n    // Presets\n    SVG.filter = {\n      sepiatone:  [ .343, .669, .119, 0, 0\n                  , .249, .626, .130, 0, 0\n                  , .172, .334, .111, 0, 0\n                  , .000, .000, .000, 1, 0 ]\n    };\n\n    // Helpers\n    function normaliseMatrix(matrix) {\n      /* convert possible array value to string */\n      if (Array.isArray(matrix))\n        matrix = new SVG.Array(matrix);\n\n      /* ensure there are no leading, tailing or double spaces */\n      return matrix.toString().replace(/^\\s+/, '').replace(/\\s+$/, '').replace(/\\s+/g, ' ')\n    }\n\n    function listString(list) {\n      if (!Array.isArray(list))\n        return list\n\n      for (var i = 0, l = list.length, s = []; i < l; i++)\n        s.push(list[i]);\n\n      return s.join(' ')\n    }\n\n    function foreach(){ //loops through mutiple objects\n      var fn = function(){};\n      if(typeof arguments[arguments.length-1] == 'function'){\n        fn = arguments[arguments.length-1];\n        Array.prototype.splice.call(arguments,arguments.length-1,1);\n      }\n      for(var k in arguments){\n        for(var i in arguments[k]){\n          fn(arguments[k][i],i,arguments[k]);\n        }\n      }\n    }\n\n  }).call(undefined);\n\n  (function() {\n\n  SVG.extend(SVG.PathArray, {\n    morph: function(array) {\n\n      var startArr = this.value\n        ,  destArr = this.parse(array);\n\n      var startOffsetM = 0\n        ,  destOffsetM = 0;\n\n      var startOffsetNextM = false\n        ,  destOffsetNextM = false;\n\n      while(true){\n        // stop if there is no M anymore\n        if(startOffsetM === false && destOffsetM === false) break\n\n        // find the next M in path array\n        startOffsetNextM = findNextM(startArr, startOffsetM === false ? false : startOffsetM+1);\n         destOffsetNextM = findNextM( destArr,  destOffsetM === false ? false :  destOffsetM+1);\n\n        // We have to add one M to the startArray\n        if(startOffsetM === false){\n          var bbox = new SVG.PathArray(result.start).bbox();\n\n          // when the last block had no bounding box we simply take the first M we got\n          if(bbox.height == 0 || bbox.width == 0){\n            startOffsetM =  startArr.push(startArr[0]) - 1;\n          }else {\n            // we take the middle of the bbox instead when we got one\n            startOffsetM = startArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1;\n          }\n        }\n\n        // We have to add one M to the destArray\n        if( destOffsetM === false){\n          var bbox = new SVG.PathArray(result.dest).bbox();\n\n          if(bbox.height == 0 || bbox.width == 0){\n            destOffsetM =  destArr.push(destArr[0]) - 1;\n          }else {\n            destOffsetM =  destArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1;\n          }\n        }\n\n        // handle block from M to next M\n        var result = handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM);\n\n        // update the arrays to their new values\n        startArr = startArr.slice(0, startOffsetM).concat(result.start, startOffsetNextM === false ? [] : startArr.slice(startOffsetNextM));\n         destArr =  destArr.slice(0,  destOffsetM).concat(result.dest ,  destOffsetNextM === false ? [] :  destArr.slice( destOffsetNextM));\n\n        // update offsets\n        startOffsetM = startOffsetNextM === false ? false : startOffsetM + result.start.length;\n         destOffsetM =  destOffsetNextM === false ? false :  destOffsetM + result.dest.length;\n\n      }\n\n      // copy back arrays\n      this.value = startArr;\n      this.destination = new SVG.PathArray();\n      this.destination.value = destArr;\n\n      return this\n    }\n  });\n\n\n\n  // sorry for the long declaration\n  // slices out one block (from M to M) and syncronize it so the types and length match\n  function handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM, undefined$1){\n\n    // slice out the block we need\n    var startArrTemp = startArr.slice(startOffsetM, startOffsetNextM || undefined$1)\n      ,  destArrTemp =  destArr.slice( destOffsetM,  destOffsetNextM || undefined$1);\n\n    var i = 0\n      , posStart = {pos:[0,0], start:[0,0]}\n      , posDest  = {pos:[0,0], start:[0,0]};\n\n    do{\n\n      // convert shorthand types to long form\n      startArrTemp[i] = simplyfy.call(posStart, startArrTemp[i]);\n       destArrTemp[i] = simplyfy.call(posDest ,  destArrTemp[i]);\n\n      // check if both shape types match\n      // 2 elliptical arc curve commands ('A'), are considered different if the\n      // flags (large-arc-flag, sweep-flag) don't match\n      if(startArrTemp[i][0] != destArrTemp[i][0] || startArrTemp[i][0] == 'M' ||\n          (startArrTemp[i][0] == 'A' &&\n            (startArrTemp[i][4] != destArrTemp[i][4] || startArrTemp[i][5] != destArrTemp[i][5])\n          )\n        ) {\n\n        // if not, convert shapes to beziere\n        Array.prototype.splice.apply(startArrTemp, [i, 1].concat(toBeziere.call(posStart, startArrTemp[i])));\n         Array.prototype.splice.apply(destArrTemp, [i, 1].concat(toBeziere.call(posDest, destArrTemp[i])));\n\n      } else {\n\n        // only update positions otherwise\n        startArrTemp[i] = setPosAndReflection.call(posStart, startArrTemp[i]);\n         destArrTemp[i] = setPosAndReflection.call(posDest ,  destArrTemp[i]);\n\n      }\n\n      // we are at the end at both arrays. stop here\n      if(++i == startArrTemp.length && i == destArrTemp.length) break\n\n      // destArray is longer. Add one element\n      if(i == startArrTemp.length){\n        startArrTemp.push([\n          'C',\n          posStart.pos[0],\n          posStart.pos[1],\n          posStart.pos[0],\n          posStart.pos[1],\n          posStart.pos[0],\n          posStart.pos[1],\n        ]);\n      }\n\n      // startArr is longer. Add one element\n      if(i == destArrTemp.length){\n        destArrTemp.push([\n          'C',\n          posDest.pos[0],\n          posDest.pos[1],\n          posDest.pos[0],\n          posDest.pos[1],\n          posDest.pos[0],\n          posDest.pos[1]\n        ]);\n      }\n\n\n    }while(true)\n\n    // return the updated block\n    return {start:startArrTemp, dest:destArrTemp}\n  }\n\n  // converts shorthand types to long form\n  function simplyfy(val){\n\n    switch(val[0]){\n      case 'z': // shorthand line to start\n      case 'Z':\n        val[0] = 'L';\n        val[1] = this.start[0];\n        val[2] = this.start[1];\n        break\n      case 'H': // shorthand horizontal line\n        val[0] = 'L';\n        val[2] = this.pos[1];\n        break\n      case 'V': // shorthand vertical line\n        val[0] = 'L';\n        val[2] = val[1];\n        val[1] = this.pos[0];\n        break\n      case 'T': // shorthand quadratic beziere\n        val[0] = 'Q';\n        val[3] = val[1];\n        val[4] = val[2];\n        val[1] = this.reflection[1];\n        val[2] = this.reflection[0];\n        break\n      case 'S': // shorthand cubic beziere\n        val[0] = 'C';\n        val[6] = val[4];\n        val[5] = val[3];\n        val[4] = val[2];\n        val[3] = val[1];\n        val[2] = this.reflection[1];\n        val[1] = this.reflection[0];\n        break\n    }\n\n    return val\n\n  }\n\n  // updates reflection point and current position\n  function setPosAndReflection(val){\n\n    var len = val.length;\n\n    this.pos = [ val[len-2], val[len-1] ];\n\n    if('SCQT'.indexOf(val[0]) != -1)\n      this.reflection = [ 2 * this.pos[0] - val[len-4], 2 * this.pos[1] - val[len-3] ];\n\n    return val\n  }\n\n  // converts all types to cubic beziere\n  function toBeziere(val){\n    var retVal = [val];\n\n    switch(val[0]){\n      case 'M': // special handling for M\n        this.pos = this.start = [val[1], val[2]];\n        return retVal\n      case 'L':\n        val[5] = val[3] = val[1];\n        val[6] = val[4] = val[2];\n        val[1] = this.pos[0];\n        val[2] = this.pos[1];\n        break\n      case 'Q':\n        val[6] = val[4];\n        val[5] = val[3];\n        val[4] = val[4] * 1/3 + val[2] * 2/3;\n        val[3] = val[3] * 1/3 + val[1] * 2/3;\n        val[2] = this.pos[1] * 1/3 + val[2] * 2/3;\n        val[1] = this.pos[0] * 1/3 + val[1] * 2/3;\n        break\n      case 'A':\n        retVal = arcToBeziere(this.pos, val);\n        val = retVal[0];\n        break\n    }\n\n    val[0] = 'C';\n    this.pos = [val[5], val[6]];\n    this.reflection = [2 * val[5] - val[3], 2 * val[6] - val[4]];\n\n    return retVal\n\n  }\n\n  // finds the next position of type M\n  function findNextM(arr, offset){\n\n    if(offset === false) return false\n\n    for(var i = offset, len = arr.length;i < len;++i){\n\n      if(arr[i][0] == 'M') return i\n\n    }\n\n    return false\n  }\n\n\n\n  // Convert an arc segment into equivalent cubic Bezier curves\n  // Depending on the arc, up to 4 curves might be used to represent it since a\n  // curve gives a good approximation for only a quarter of an ellipse\n  // The curves are returned as an array of SVG curve commands:\n  // [ ['C', x1, y1, x2, y2, x, y] ... ]\n  function arcToBeziere(pos, val) {\n      // Parameters extraction, handle out-of-range parameters as specified in the SVG spec\n      // See: https://www.w3.org/TR/SVG11/implnote.html#ArcOutOfRangeParameters\n      var rx = Math.abs(val[1]), ry = Math.abs(val[2]), xAxisRotation = val[3] % 360\n        , largeArcFlag = val[4], sweepFlag = val[5], x = val[6], y = val[7]\n        , A = new SVG.Point(pos), B = new SVG.Point(x, y)\n        , primedCoord, lambda, mat, k, c, cSquare, t, O, OA, OB, tetaStart, tetaEnd\n        , deltaTeta, nbSectors, f, arcSegPoints, angle, sinAngle, cosAngle, pt, i, il\n        , retVal = [], x1, y1, x2, y2;\n\n      // Ensure radii are non-zero\n      if(rx === 0 || ry === 0 || (A.x === B.x && A.y === B.y)) {\n        // treat this arc as a straight line segment\n        return [['C', A.x, A.y, B.x, B.y, B.x, B.y]]\n      }\n\n      // Ensure radii are large enough using the algorithm provided in the SVG spec\n      // See: https://www.w3.org/TR/SVG11/implnote.html#ArcCorrectionOutOfRangeRadii\n      primedCoord = new SVG.Point((A.x-B.x)/2, (A.y-B.y)/2).transform(new SVG.Matrix().rotate(xAxisRotation));\n      lambda = (primedCoord.x * primedCoord.x) / (rx * rx) + (primedCoord.y * primedCoord.y) / (ry * ry);\n      if(lambda > 1) {\n        lambda = Math.sqrt(lambda);\n        rx = lambda*rx;\n        ry = lambda*ry;\n      }\n\n      // To simplify calculations, we make the arc part of a unit circle (rayon is 1) instead of an ellipse\n      mat = new SVG.Matrix().rotate(xAxisRotation).scale(1/rx, 1/ry).rotate(-xAxisRotation);\n      A = A.transform(mat);\n      B = B.transform(mat);\n\n      // Calculate the horizontal and vertical distance between the initial and final point of the arc\n      k = [B.x-A.x, B.y-A.y];\n\n      // Find the length of the chord formed by A and B\n      cSquare = k[0]*k[0] + k[1]*k[1];\n      c = Math.sqrt(cSquare);\n\n      // Calculate the ratios of the horizontal and vertical distance on the length of the chord\n      k[0] /= c;\n      k[1] /= c;\n\n      // Calculate the distance between the circle center and the chord midpoint\n      // using this formula: t = sqrt(r^2 - c^2 / 4)\n      // where t is the distance between the cirle center and the chord midpoint,\n      //       r is the rayon of the circle and c is the chord length\n      // From: http://www.ajdesigner.com/phpcircle/circle_segment_chord_t.php\n      // Because of the imprecision of floating point numbers, cSquare might end\n      // up being slightly above 4 which would result in a negative radicand\n      // To prevent that, a test is made before computing the square root\n      t = (cSquare < 4) ? Math.sqrt(1 - cSquare/4) : 0;\n\n      // For most situations, there are actually two different ellipses that\n      // satisfy the constraints imposed by the points A and B, the radii rx and ry,\n      // and the xAxisRotation\n      // When the flags largeArcFlag and sweepFlag are equal, it means that the\n      // second ellipse is used as a solution\n      // See: https://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands\n      if(largeArcFlag === sweepFlag) {\n          t *= -1;\n      }\n\n      // Calculate the coordinates of the center of the circle from the midpoint of the chord\n      // This is done by multiplying the ratios calculated previously by the distance between\n      // the circle center and the chord midpoint and using these values to go from the midpoint\n      // to the center of the circle\n      // The negative of the vertical distance ratio is used to modify the x coordinate while\n      // the horizontal distance ratio is used to modify the y coordinate\n      // That is because the center of the circle is perpendicular to the chord and perpendicular\n      // lines are negative reciprocals\n      O = new SVG.Point((B.x+A.x)/2 + t*-k[1], (B.y+A.y)/2 + t*k[0]);\n      // Move the center of the circle at the origin\n      OA = new SVG.Point(A.x-O.x, A.y-O.y);\n      OB = new SVG.Point(B.x-O.x, B.y-O.y);\n\n      // Calculate the start and end angle\n      tetaStart = Math.acos(OA.x/Math.sqrt(OA.x*OA.x + OA.y*OA.y));\n      if (OA.y < 0) {\n        tetaStart *= -1;\n      }\n      tetaEnd = Math.acos(OB.x/Math.sqrt(OB.x*OB.x + OB.y*OB.y));\n      if (OB.y < 0) {\n        tetaEnd *= -1;\n      }\n\n      // If sweep-flag is '1', then the arc will be drawn in a \"positive-angle\" direction,\n      // make sure that the end angle is above the start angle\n      if (sweepFlag && tetaStart > tetaEnd) {\n        tetaEnd += 2*Math.PI;\n      }\n      // If sweep-flag is '0', then the arc will be drawn in a \"negative-angle\" direction,\n      // make sure that the end angle is below the start angle\n      if (!sweepFlag && tetaStart < tetaEnd) {\n        tetaEnd -= 2*Math.PI;\n      }\n\n      // Find the number of Bezier curves that are required to represent the arc\n      // A cubic Bezier curve gives a good enough approximation when representing at most a quarter of a circle\n      nbSectors = Math.ceil(Math.abs(tetaStart-tetaEnd) * 2/Math.PI);\n\n      // Calculate the coordinates of the points of all the Bezier curves required to represent the arc\n      // For an in-depth explanation of this part see: http://pomax.github.io/bezierinfo/#circles_cubic\n      arcSegPoints = [];\n      angle = tetaStart;\n      deltaTeta = (tetaEnd-tetaStart)/nbSectors;\n      f = 4*Math.tan(deltaTeta/4)/3;\n      for (i = 0; i <= nbSectors; i++) { // The <= is because a Bezier curve have a start and a endpoint\n        cosAngle = Math.cos(angle);\n        sinAngle = Math.sin(angle);\n\n        pt = new SVG.Point(O.x+cosAngle, O.y+sinAngle);\n        arcSegPoints[i] = [new SVG.Point(pt.x+f*sinAngle, pt.y-f*cosAngle), pt, new SVG.Point(pt.x-f*sinAngle, pt.y+f*cosAngle)];\n\n        angle += deltaTeta;\n      }\n\n      // Remove the first control point of the first segment point and remove the second control point of the last segment point\n      // These two control points are not used in the approximation of the arc, that is why they are removed\n      arcSegPoints[0][0] = arcSegPoints[0][1].clone();\n      arcSegPoints[arcSegPoints.length-1][2] = arcSegPoints[arcSegPoints.length-1][1].clone();\n\n      // Revert the transformation that was applied to make the arc part of a unit circle instead of an ellipse\n      mat = new SVG.Matrix().rotate(xAxisRotation).scale(rx, ry).rotate(-xAxisRotation);\n      for (i = 0, il = arcSegPoints.length; i < il; i++) {\n        arcSegPoints[i][0] = arcSegPoints[i][0].transform(mat);\n        arcSegPoints[i][1] = arcSegPoints[i][1].transform(mat);\n        arcSegPoints[i][2] = arcSegPoints[i][2].transform(mat);\n      }\n\n\n      // Convert the segments points to SVG curve commands\n      for (i = 1, il = arcSegPoints.length; i < il; i++) {\n        pt = arcSegPoints[i-1][2];\n        x1 = pt.x;\n        y1 = pt.y;\n\n        pt = arcSegPoints[i][0];\n        x2 = pt.x;\n        y2 = pt.y;\n\n        pt = arcSegPoints[i][1];\n        x = pt.x;\n        y = pt.y;\n\n        retVal.push(['C', x1, y1, x2, y2, x, y]);\n      }\n\n      return retVal\n  }\n  }());\n\n  /*! svg.draggable.js - v2.2.2 - 2019-01-08\n  * https://github.com/svgdotjs/svg.draggable.js\n  * Copyright (c) 2019 Wout Fierens; Licensed MIT */\n  (function() {\n\n    // creates handler, saves it\n    function DragHandler(el){\n      el.remember('_draggable', this);\n      this.el = el;\n    }\n\n\n    // Sets new parameter, starts dragging\n    DragHandler.prototype.init = function(constraint, val){\n      var _this = this;\n      this.constraint = constraint;\n      this.value = val;\n      this.el.on('mousedown.drag', function(e){ _this.start(e); });\n      this.el.on('touchstart.drag', function(e){ _this.start(e); });\n    };\n\n    // transforms one point from screen to user coords\n    DragHandler.prototype.transformPoint = function(event, offset){\n        event = event || window.event;\n        var touches = event.changedTouches && event.changedTouches[0] || event;\n        this.p.x = touches.clientX - (offset || 0);\n        this.p.y = touches.clientY;\n        return this.p.matrixTransform(this.m)\n    };\n\n    // gets elements bounding box with special handling of groups, nested and use\n    DragHandler.prototype.getBBox = function(){\n\n      var box = this.el.bbox();\n\n      if(this.el instanceof SVG.Nested) box = this.el.rbox();\n\n      if (this.el instanceof SVG.G || this.el instanceof SVG.Use || this.el instanceof SVG.Nested) {\n        box.x = this.el.x();\n        box.y = this.el.y();\n      }\n\n      return box\n    };\n\n    // start dragging\n    DragHandler.prototype.start = function(e){\n\n      // check for left button\n      if(e.type == 'click'|| e.type == 'mousedown' || e.type == 'mousemove'){\n        if((e.which || e.buttons) != 1){\n            return\n        }\n      }\n\n      var _this = this;\n\n      // fire beforedrag event\n      this.el.fire('beforedrag', { event: e, handler: this });\n      if(this.el.event().defaultPrevented) return;\n\n      // prevent browser drag behavior as soon as possible\n      e.preventDefault();\n\n      // prevent propagation to a parent that might also have dragging enabled\n      e.stopPropagation();\n\n      // search for parent on the fly to make sure we can call\n      // draggable() even when element is not in the dom currently\n      this.parent = this.parent || this.el.parent(SVG.Nested) || this.el.parent(SVG.Doc);\n      this.p = this.parent.node.createSVGPoint();\n\n      // save current transformation matrix\n      this.m = this.el.node.getScreenCTM().inverse();\n\n      var box = this.getBBox();\n\n      var anchorOffset;\n\n      // fix text-anchor in text-element (#37)\n      if(this.el instanceof SVG.Text){\n        anchorOffset = this.el.node.getComputedTextLength();\n\n        switch(this.el.attr('text-anchor')){\n          case 'middle':\n            anchorOffset /= 2;\n            break\n          case 'start':\n            anchorOffset = 0;\n            break;\n        }\n      }\n\n      this.startPoints = {\n        // We take absolute coordinates since we are just using a delta here\n        point: this.transformPoint(e, anchorOffset),\n        box:   box,\n        transform: this.el.transform()\n      };\n\n      // add drag and end events to window\n      SVG.on(window, 'mousemove.drag', function(e){ _this.drag(e); });\n      SVG.on(window, 'touchmove.drag', function(e){ _this.drag(e); });\n      SVG.on(window, 'mouseup.drag', function(e){ _this.end(e); });\n      SVG.on(window, 'touchend.drag', function(e){ _this.end(e); });\n\n      // fire dragstart event\n      this.el.fire('dragstart', {event: e, p: this.startPoints.point, m: this.m, handler: this});\n    };\n\n    // while dragging\n    DragHandler.prototype.drag = function(e){\n\n      var box = this.getBBox()\n        , p   = this.transformPoint(e)\n        , x   = this.startPoints.box.x + p.x - this.startPoints.point.x\n        , y   = this.startPoints.box.y + p.y - this.startPoints.point.y\n        , c   = this.constraint\n        , gx  = p.x - this.startPoints.point.x\n        , gy  = p.y - this.startPoints.point.y;\n\n      this.el.fire('dragmove', {\n          event: e\n        , p: p\n        , m: this.m\n        , handler: this\n      });\n\n      if(this.el.event().defaultPrevented) return p\n\n      // move the element to its new position, if possible by constraint\n      if (typeof c == 'function') {\n\n        var coord = c.call(this.el, x, y, this.m);\n\n        // bool, just show us if movement is allowed or not\n        if (typeof coord == 'boolean') {\n          coord = {\n            x: coord,\n            y: coord\n          };\n        }\n\n        // if true, we just move. If !false its a number and we move it there\n        if (coord.x === true) {\n          this.el.x(x);\n        } else if (coord.x !== false) {\n          this.el.x(coord.x);\n        }\n\n        if (coord.y === true) {\n          this.el.y(y);\n        } else if (coord.y !== false) {\n          this.el.y(coord.y);\n        }\n\n      } else if (typeof c == 'object') {\n\n        // keep element within constrained box\n        if (c.minX != null && x < c.minX) {\n          x = c.minX;\n          gx = x - this.startPoints.box.x;\n        } else if (c.maxX != null && x > c.maxX - box.width) {\n          x = c.maxX - box.width;\n          gx = x - this.startPoints.box.x;\n        } if (c.minY != null && y < c.minY) {\n          y = c.minY;\n          gy = y - this.startPoints.box.y;\n        } else if (c.maxY != null && y > c.maxY - box.height) {\n          y = c.maxY - box.height;\n          gy = y - this.startPoints.box.y;\n        }\n\n        if (c.snapToGrid != null) {\n          x = x - (x % c.snapToGrid);\n          y = y - (y % c.snapToGrid);\n          gx = gx - (gx % c.snapToGrid);\n          gy = gy - (gy % c.snapToGrid);\n        }\n\n        if(this.el instanceof SVG.G)\n          this.el.matrix(this.startPoints.transform).transform({x:gx, y: gy}, true);\n        else\n          this.el.move(x, y);\n      }\n\n      // so we can use it in the end-method, too\n      return p\n    };\n\n    DragHandler.prototype.end = function(e){\n\n      // final drag\n      var p = this.drag(e);\n\n      // fire dragend event\n      this.el.fire('dragend', { event: e, p: p, m: this.m, handler: this });\n\n      // unbind events\n      SVG.off(window, 'mousemove.drag');\n      SVG.off(window, 'touchmove.drag');\n      SVG.off(window, 'mouseup.drag');\n      SVG.off(window, 'touchend.drag');\n\n    };\n\n    SVG.extend(SVG.Element, {\n      // Make element draggable\n      // Constraint might be an object (as described in readme.md) or a function in the form \"function (x, y)\" that gets called before every move.\n      // The function can return a boolean or an object of the form {x, y}, to which the element will be moved. \"False\" skips moving, true moves to raw x, y.\n      draggable: function(value, constraint) {\n\n        // Check the parameters and reassign if needed\n        if (typeof value == 'function' || typeof value == 'object') {\n          constraint = value;\n          value = true;\n        }\n\n        var dragHandler = this.remember('_draggable') || new DragHandler(this);\n\n        // When no parameter is given, value is true\n        value = typeof value === 'undefined' ? true : value;\n\n        if(value) dragHandler.init(constraint || {}, value);\n        else {\n          this.off('mousedown.drag');\n          this.off('touchstart.drag');\n        }\n\n        return this\n      }\n\n    });\n\n  }).call(undefined);\n\n  (function() {\n\n  function SelectHandler(el) {\n\n      this.el = el;\n      el.remember('_selectHandler', this);\n      this.pointSelection = {isSelected: false};\n      this.rectSelection = {isSelected: false};\n\n      // helper list with position settings of each type of point\n      this.pointsList = {\n        lt: [ 0, 0 ],\n        rt: [ 'width', 0 ],\n        rb: [ 'width', 'height' ],\n        lb: [ 0, 'height' ],\n        t: [ 'width', 0 ],\n        r: [ 'width', 'height' ],\n        b: [ 'width', 'height' ],\n        l: [ 0, 'height' ]\n      };\n\n      // helper function to get point coordinates based on settings above and an object (bbox in our case)\n      this.pointCoord = function (setting, object, isPointCentered) {\n        var coord = typeof setting !== 'string' ? setting : object[setting];\n        // Top, bottom, right and left points are placed in the center of element width/height\n        return isPointCentered ? coord / 2 : coord\n      };\n\n      this.pointCoords = function (point, object) {\n        var settings = this.pointsList[point];\n\n        return {\n          x: this.pointCoord(settings[0], object, (point === 't' || point === 'b')),\n          y: this.pointCoord(settings[1], object, (point === 'r' || point === 'l'))\n        }\n      };\n  }\n\n  SelectHandler.prototype.init = function (value, options) {\n\n      var bbox = this.el.bbox();\n      this.options = {};\n\n      // store defaults list of points in order to verify users config\n      var points = this.el.selectize.defaults.points;\n\n      // Merging the defaults and the options-object together\n      for (var i in this.el.selectize.defaults) {\n          this.options[i] = this.el.selectize.defaults[i];\n          if (options[i] !== undefined) {\n              this.options[i] = options[i];\n          }\n      }\n\n      // prepare & validate list of points to be added (or excluded)\n      var pointsLists = ['points', 'pointsExclude'];\n\n      for (var i in pointsLists) {\n        var option = this.options[pointsLists[i]];\n\n        if (typeof option === 'string') {\n          if (option.length > 0) {\n            // if set as comma separated string list => convert it into an array\n            option = option.split(/\\s*,\\s*/i);\n          } else {\n            option = [];\n          }\n        } else if (typeof option === 'boolean' && pointsLists[i] === 'points') {\n          // this is not needed, but let's have it for legacy support\n          option = option ? points : [];\n        }\n\n        this.options[pointsLists[i]] = option;\n      }\n\n      // intersect correct all points options with users config (exclude unwanted points)\n      // ES5 -> NO arrow functions nor Array.includes()\n      this.options.points = [ points, this.options.points ].reduce(\n        function (a, b) {\n          return a.filter(\n            function (c) {\n              return b.indexOf(c) > -1;\n            }\n          )\n        }\n      );\n\n      // exclude pointsExclude, if wanted\n      this.options.points = [ this.options.points, this.options.pointsExclude ].reduce(\n        function (a, b) {\n          return a.filter(\n            function (c) {\n              return b.indexOf(c) < 0;\n            }\n          )\n        }\n      );\n\n      this.parent = this.el.parent();\n      this.nested = (this.nested || this.parent.group());\n      this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y));\n\n      // When deepSelect is enabled and the element is a line/polyline/polygon, draw only points for moving\n      if (this.options.deepSelect && ['line', 'polyline', 'polygon'].indexOf(this.el.type) !== -1) {\n          this.selectPoints(value);\n      } else {\n          this.selectRect(value);\n      }\n\n      this.observe();\n      this.cleanup();\n\n  };\n\n  SelectHandler.prototype.selectPoints = function (value) {\n\n      this.pointSelection.isSelected = value;\n\n      // When set is already there we dont have to create one\n      if (this.pointSelection.set) {\n          return this;\n      }\n\n      // Create our set of elements\n      this.pointSelection.set = this.parent.set();\n      // draw the points and mark the element as selected\n      this.drawPoints();\n\n      return this;\n\n  };\n\n  // create the point-array which contains the 2 points of a line or simply the points-array of polyline/polygon\n  SelectHandler.prototype.getPointArray = function () {\n      var bbox = this.el.bbox();\n\n      return this.el.array().valueOf().map(function (el) {\n          return [el[0] - bbox.x, el[1] - bbox.y];\n      });\n  };\n\n  // Draws a points\n  SelectHandler.prototype.drawPoints = function () {\n\n      var _this = this, array = this.getPointArray();\n\n      // go through the array of points\n      for (var i = 0, len = array.length; i < len; ++i) {\n\n          var curriedEvent = (function (k) {\n              return function (ev) {\n                  ev = ev || window.event;\n                  ev.preventDefault ? ev.preventDefault() : ev.returnValue = false;\n                  ev.stopPropagation();\n\n                  var x = ev.pageX || ev.touches[0].pageX;\n                  var y = ev.pageY || ev.touches[0].pageY;\n                  _this.el.fire('point', {x: x, y: y, i: k, event: ev});\n              };\n          })(i);\n\n          // add every point to the set\n          // add css-classes and a touchstart-event which fires our event for moving points\n          var point = this.drawPoint(array[i][0], array[i][1])\n                          .addClass(this.options.classPoints)\n                          .addClass(this.options.classPoints + '_point')\n                          .on('touchstart', curriedEvent)\n                          .on('mousedown', curriedEvent);\n          this.pointSelection.set.add(point);\n      }\n  };\n\n  // The function to draw single point\n  SelectHandler.prototype.drawPoint = function (cx, cy) {\n      var pointType = this.options.pointType;\n\n      switch (pointType) {\n          case 'circle':\n              return this.drawCircle(cx, cy);\n          case 'rect':\n              return this.drawRect(cx, cy);\n          default:\n              if (typeof pointType === 'function') {\n                  return pointType.call(this, cx, cy);\n              }\n\n              throw new Error('Unknown ' + pointType + ' point type!');\n      }\n  };\n\n  // The function to draw the circle point\n  SelectHandler.prototype.drawCircle = function (cx, cy) {\n      return this.nested.circle(this.options.pointSize)\n                        .center(cx, cy);\n  };\n\n  // The function to draw the rect point\n  SelectHandler.prototype.drawRect = function (cx, cy) {\n      return this.nested.rect(this.options.pointSize, this.options.pointSize)\n                        .center(cx, cy);\n  };\n\n  // every time a point is moved, we have to update the positions of our point\n  SelectHandler.prototype.updatePointSelection = function () {\n      var array = this.getPointArray();\n\n      this.pointSelection.set.each(function (i) {\n          if (this.cx() === array[i][0] && this.cy() === array[i][1]) {\n              return;\n          }\n          this.center(array[i][0], array[i][1]);\n      });\n  };\n\n  SelectHandler.prototype.updateRectSelection = function () {\n      var _this = this, bbox = this.el.bbox();\n\n      this.rectSelection.set.get(0).attr({\n          width: bbox.width,\n          height: bbox.height\n      });\n\n      // set.get(1) is always in the upper left corner. no need to move it\n      if (this.options.points.length) {\n        this.options.points.map(function (point, index) {\n          var coords = _this.pointCoords(point, bbox);\n\n          _this.rectSelection.set.get(index + 1).center(coords.x, coords.y);\n        });\n      }\n\n      if (this.options.rotationPoint) {\n          var length = this.rectSelection.set.length();\n\n          this.rectSelection.set.get(length - 1).center(bbox.width / 2, 20);\n      }\n  };\n\n  SelectHandler.prototype.selectRect = function (value) {\n\n      var _this = this, bbox = this.el.bbox();\n\n      this.rectSelection.isSelected = value;\n\n      // when set is already p\n      this.rectSelection.set = this.rectSelection.set || this.parent.set();\n\n      // helperFunction to create a mouse-down function which triggers the event specified in `eventName`\n      function getMoseDownFunc(eventName) {\n          return function (ev) {\n              ev = ev || window.event;\n              ev.preventDefault ? ev.preventDefault() : ev.returnValue = false;\n              ev.stopPropagation();\n\n              var x = ev.pageX || ev.touches[0].pageX;\n              var y = ev.pageY || ev.touches[0].pageY;\n              _this.el.fire(eventName, {x: x, y: y, event: ev});\n          };\n      }\n\n      // create the selection-rectangle and add the css-class\n      if (!this.rectSelection.set.get(0)) {\n          this.rectSelection.set.add(this.nested.rect(bbox.width, bbox.height).addClass(this.options.classRect));\n      }\n\n      // Draw Points at the edges, if enabled\n      if (this.options.points.length && this.rectSelection.set.length() < 2) {\n          var ename =\"touchstart\", mname = \"mousedown\";\n\n          this.options.points.map(function (point, index) {\n              var coords = _this.pointCoords(point, bbox);\n\n              var pointElement = _this.drawPoint(coords.x, coords.y)\n                                      .attr('class', _this.options.classPoints + '_' + point)\n                                      .on(mname, getMoseDownFunc(point))\n                                      .on(ename, getMoseDownFunc(point));\n              _this.rectSelection.set.add(pointElement);\n          });\n\n          this.rectSelection.set.each(function () {\n              this.addClass(_this.options.classPoints);\n          });\n      }\n\n      // draw rotationPint, if enabled\n      if (this.options.rotationPoint && ((this.options.points && !this.rectSelection.set.get(9)) || (!this.options.points && !this.rectSelection.set.get(1)))) {\n\n          var curriedEvent = function (ev) {\n              ev = ev || window.event;\n              ev.preventDefault ? ev.preventDefault() : ev.returnValue = false;\n              ev.stopPropagation();\n\n              var x = ev.pageX || ev.touches[0].pageX;\n              var y = ev.pageY || ev.touches[0].pageY;\n              _this.el.fire('rot', {x: x, y: y, event: ev});\n          };\n\n          var pointElement = this.drawPoint(bbox.width / 2, 20)\n                                .attr('class', this.options.classPoints + '_rot')\n                                .on(\"touchstart\", curriedEvent)\n                                .on(\"mousedown\", curriedEvent);\n          this.rectSelection.set.add(pointElement);\n      }\n\n  };\n\n  SelectHandler.prototype.handler = function () {\n\n      var bbox = this.el.bbox();\n      this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y));\n\n      if (this.rectSelection.isSelected) {\n          this.updateRectSelection();\n      }\n\n      if (this.pointSelection.isSelected) {\n          this.updatePointSelection();\n      }\n\n  };\n\n  SelectHandler.prototype.observe = function () {\n      var _this = this;\n\n      if (MutationObserver) {\n          if (this.rectSelection.isSelected || this.pointSelection.isSelected) {\n              this.observerInst = this.observerInst || new MutationObserver(function () {\n                  _this.handler();\n              });\n              this.observerInst.observe(this.el.node, {attributes: true});\n          } else {\n              try {\n                  this.observerInst.disconnect();\n                  delete this.observerInst;\n              } catch (e) {\n              }\n          }\n      } else {\n          this.el.off('DOMAttrModified.select');\n\n          if (this.rectSelection.isSelected || this.pointSelection.isSelected) {\n              this.el.on('DOMAttrModified.select', function () {\n                  _this.handler();\n              });\n          }\n      }\n  };\n\n  SelectHandler.prototype.cleanup = function () {\n\n      //var _this = this;\n\n      if (!this.rectSelection.isSelected && this.rectSelection.set) {\n          // stop watching the element, remove the selection\n          this.rectSelection.set.each(function () {\n              this.remove();\n          });\n\n          this.rectSelection.set.clear();\n          delete this.rectSelection.set;\n      }\n\n      if (!this.pointSelection.isSelected && this.pointSelection.set) {\n          // Remove all points, clear the set, stop watching the element\n          this.pointSelection.set.each(function () {\n              this.remove();\n          });\n\n          this.pointSelection.set.clear();\n          delete this.pointSelection.set;\n      }\n\n      if (!this.pointSelection.isSelected && !this.rectSelection.isSelected) {\n          this.nested.remove();\n          delete this.nested;\n\n      }\n  };\n\n\n  SVG.extend(SVG.Element, {\n      // Select element with mouse\n      selectize: function (value, options) {\n\n          // Check the parameters and reassign if needed\n          if (typeof value === 'object') {\n              options = value;\n              value = true;\n          }\n\n          var selectHandler = this.remember('_selectHandler') || new SelectHandler(this);\n\n          selectHandler.init(value === undefined ? true : value, options || {});\n\n          return this;\n\n      }\n  });\n\n  SVG.Element.prototype.selectize.defaults = {\n      points: ['lt', 'rt', 'rb', 'lb', 't', 'r', 'b', 'l'],    // which points to draw, default all\n      pointsExclude: [],                       // easier option if to exclude few than rewrite all\n      classRect: 'svg_select_boundingRect',    // Css-class added to the rect\n      classPoints: 'svg_select_points',        // Css-class added to the points\n      pointSize: 7,                            // size of point\n      rotationPoint: true,                     // If true, rotation point is drawn. Needed for rotation!\n      deepSelect: false,                       // If true, moving of single points is possible (only line, polyline, polyon)\n      pointType: 'circle'                      // Point type: circle or rect, default circle\n  };\n  }());\n\n  (function() {\n  (function () {\n\n      function ResizeHandler(el) {\n\n          el.remember('_resizeHandler', this);\n\n          this.el = el;\n          this.parameters = {};\n          this.lastUpdateCall = null;\n          this.p = el.doc().node.createSVGPoint();\n      }\n\n      ResizeHandler.prototype.transformPoint = function(x, y, m){\n\n          this.p.x = x - (this.offset.x - window.pageXOffset);\n          this.p.y = y - (this.offset.y - window.pageYOffset);\n\n          return this.p.matrixTransform(m || this.m);\n\n      };\n\n      ResizeHandler.prototype._extractPosition = function(event) {\n          // Extract a position from a mouse/touch event.\n          // Returns { x: .., y: .. }\n          return {\n              x: event.clientX != null ? event.clientX : event.touches[0].clientX,\n              y: event.clientY != null ? event.clientY : event.touches[0].clientY\n          }\n      };\n\n      ResizeHandler.prototype.init = function (options) {\n\n          var _this = this;\n\n          this.stop();\n\n          if (options === 'stop') {\n              return;\n          }\n\n          this.options = {};\n\n          // Merge options and defaults\n          for (var i in this.el.resize.defaults) {\n              this.options[i] = this.el.resize.defaults[i];\n              if (typeof options[i] !== 'undefined') {\n                  this.options[i] = options[i];\n              }\n          }\n\n          // We listen to all these events which are specifying different edges\n          this.el.on('lt.resize', function(e){ _this.resize(e || window.event); });  // Left-Top\n          this.el.on('rt.resize', function(e){ _this.resize(e || window.event); });  // Right-Top\n          this.el.on('rb.resize', function(e){ _this.resize(e || window.event); });  // Right-Bottom\n          this.el.on('lb.resize', function(e){ _this.resize(e || window.event); });  // Left-Bottom\n\n          this.el.on('t.resize', function(e){ _this.resize(e || window.event); });   // Top\n          this.el.on('r.resize', function(e){ _this.resize(e || window.event); });   // Right\n          this.el.on('b.resize', function(e){ _this.resize(e || window.event); });   // Bottom\n          this.el.on('l.resize', function(e){ _this.resize(e || window.event); });   // Left\n\n          this.el.on('rot.resize', function(e){ _this.resize(e || window.event); }); // Rotation\n\n          this.el.on('point.resize', function(e){ _this.resize(e || window.event); }); // Point-Moving\n\n          // This call ensures, that the plugin reacts to a change of snapToGrid immediately\n          this.update();\n\n      };\n\n      ResizeHandler.prototype.stop = function(){\n          this.el.off('lt.resize');\n          this.el.off('rt.resize');\n          this.el.off('rb.resize');\n          this.el.off('lb.resize');\n\n          this.el.off('t.resize');\n          this.el.off('r.resize');\n          this.el.off('b.resize');\n          this.el.off('l.resize');\n\n          this.el.off('rot.resize');\n\n          this.el.off('point.resize');\n\n          return this;\n      };\n\n      ResizeHandler.prototype.resize = function (event) {\n\n          var _this = this;\n\n          this.m = this.el.node.getScreenCTM().inverse();\n          this.offset = { x: window.pageXOffset, y: window.pageYOffset };\n\n          var txPt = this._extractPosition(event.detail.event);\n          this.parameters = {\n              type: this.el.type, // the type of element\n              p: this.transformPoint(txPt.x, txPt.y),\n              x: event.detail.x,      // x-position of the mouse when resizing started\n              y: event.detail.y,      // y-position of the mouse when resizing started\n              box: this.el.bbox(),    // The bounding-box of the element\n              rotation: this.el.transform().rotation  // The current rotation of the element\n          };\n\n          // Add font-size parameter if the element type is text\n          if (this.el.type === \"text\") {\n              this.parameters.fontSize = this.el.attr()[\"font-size\"];\n          }\n\n          // the i-param in the event holds the index of the point which is moved, when using `deepSelect`\n          if (event.detail.i !== undefined) {\n\n              // get the point array\n              var array = this.el.array().valueOf();\n\n              // Save the index and the point which is moved\n              this.parameters.i = event.detail.i;\n              this.parameters.pointCoords = [array[event.detail.i][0], array[event.detail.i][1]];\n          }\n\n          // Lets check which edge of the bounding-box was clicked and resize the this.el according to this\n          switch (event.type) {\n\n              // Left-Top-Edge\n              case 'lt':\n                  // We build a calculating function for every case which gives us the new position of the this.el\n                  this.calc = function (diffX, diffY) {\n                      // The procedure is always the same\n                      // First we snap the edge to the given grid (snapping to 1px grid is normal resizing)\n                      var snap = this.snapToGrid(diffX, diffY);\n\n                      // Now we check if the new height and width still valid (> 0)\n                      if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height - snap[1] > 0) {\n                          // ...if valid, we resize the this.el (which can include moving because the coord-system starts at the left-top and this edge is moving sometimes when resized)\n\n                          /*\n                           * but first check if the element is text box, so we can change the font size instead of\n                           * the width and height\n                           */\n\n                          if (this.parameters.type === \"text\") {\n                              this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y);\n                              this.el.attr(\"font-size\", this.parameters.fontSize - snap[0]);\n                              return;\n                          }\n\n                          snap = this.checkAspectRatio(snap);\n\n                          this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y + snap[1]).size(this.parameters.box.width - snap[0], this.parameters.box.height - snap[1]);\n                      }\n                  };\n                  break;\n\n              // Right-Top\n              case 'rt':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 1 << 1);\n                      if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height - snap[1] > 0) {\n                          if (this.parameters.type === \"text\") {\n                              this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y);\n                              this.el.attr(\"font-size\", this.parameters.fontSize + snap[0]);\n                              return;\n                          }\n\n                          snap = this.checkAspectRatio(snap, true);\n\n                          this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).size(this.parameters.box.width + snap[0], this.parameters.box.height - snap[1]);\n                      }\n                  };\n                  break;\n\n              // Right-Bottom\n              case 'rb':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 0);\n                      if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height + snap[1] > 0) {\n                          if (this.parameters.type === \"text\") {\n                              this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y);\n                              this.el.attr(\"font-size\", this.parameters.fontSize + snap[0]);\n                              return;\n                          }\n\n                          snap = this.checkAspectRatio(snap);\n\n                          this.el.move(this.parameters.box.x, this.parameters.box.y).size(this.parameters.box.width + snap[0], this.parameters.box.height + snap[1]);\n                      }\n                  };\n                  break;\n\n              // Left-Bottom\n              case 'lb':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 1);\n                      if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height + snap[1] > 0) {\n                          if (this.parameters.type === \"text\") {\n                              this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y);\n                              this.el.attr(\"font-size\", this.parameters.fontSize - snap[0]);\n                              return;\n                          }\n\n                          snap = this.checkAspectRatio(snap, true);\n\n                          this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).size(this.parameters.box.width - snap[0], this.parameters.box.height + snap[1]);\n                      }\n                  };\n                  break;\n\n              // Top\n              case 't':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 1 << 1);\n                      if (this.parameters.box.height - snap[1] > 0) {\n                          // Disable the font-resizing if it is not from the corner of bounding-box\n                          if (this.parameters.type === \"text\") {\n                              return;\n                          }\n\n                          this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).height(this.parameters.box.height - snap[1]);\n                      }\n                  };\n                  break;\n\n              // Right\n              case 'r':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 0);\n                      if (this.parameters.box.width + snap[0] > 0) {\n                          if (this.parameters.type === \"text\") {\n                              return;\n                          }\n\n                          this.el.move(this.parameters.box.x, this.parameters.box.y).width(this.parameters.box.width + snap[0]);\n                      }\n                  };\n                  break;\n\n              // Bottom\n              case 'b':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 0);\n                      if (this.parameters.box.height + snap[1] > 0) {\n                          if (this.parameters.type === \"text\") {\n                              return;\n                          }\n\n                          this.el.move(this.parameters.box.x, this.parameters.box.y).height(this.parameters.box.height + snap[1]);\n                      }\n                  };\n                  break;\n\n              // Left\n              case 'l':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 1);\n                      if (this.parameters.box.width - snap[0] > 0) {\n                          if (this.parameters.type === \"text\") {\n                              return;\n                          }\n\n                          this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).width(this.parameters.box.width - snap[0]);\n                      }\n                  };\n                  break;\n\n              // Rotation\n              case 'rot':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n\n                      // yes this is kinda stupid but we need the mouse coords back...\n                      var current = {x: diffX + this.parameters.p.x, y: diffY + this.parameters.p.y};\n\n                      // start minus middle\n                      var sAngle = Math.atan2((this.parameters.p.y - this.parameters.box.y - this.parameters.box.height / 2), (this.parameters.p.x - this.parameters.box.x - this.parameters.box.width / 2));\n\n                      // end minus middle\n                      var pAngle = Math.atan2((current.y - this.parameters.box.y - this.parameters.box.height / 2), (current.x - this.parameters.box.x - this.parameters.box.width / 2));\n\n                      var angle = this.parameters.rotation + (pAngle - sAngle) * 180 / Math.PI + this.options.snapToAngle / 2;\n\n                      // We have to move the element to the center of the box first and change the rotation afterwards\n                      // because rotation always works around a rotation-center, which is changed when moving the element\n                      // We also set the new rotation center to the center of the box.\n                      this.el.center(this.parameters.box.cx, this.parameters.box.cy).rotate(angle - (angle % this.options.snapToAngle), this.parameters.box.cx, this.parameters.box.cy);\n                  };\n                  break;\n\n              // Moving one single Point (needed when an element is deepSelected which means you can move every single point of the object)\n              case 'point':\n                  this.calc = function (diffX, diffY) {\n\n                      // Snapping the point to the grid\n                      var snap = this.snapToGrid(diffX, diffY, this.parameters.pointCoords[0], this.parameters.pointCoords[1]);\n\n                      // Get the point array\n                      var array = this.el.array().valueOf();\n\n                      // Changing the moved point in the array\n                      array[this.parameters.i][0] = this.parameters.pointCoords[0] + snap[0];\n                      array[this.parameters.i][1] = this.parameters.pointCoords[1] + snap[1];\n\n                      // And plot the new this.el\n                      this.el.plot(array);\n                  };\n          }\n\n          this.el.fire('resizestart', {dx: this.parameters.x, dy: this.parameters.y, event: event});\n          // When resizing started, we have to register events for...\n          // Touches.\n          SVG.on(window, 'touchmove.resize', function(e) {\n              _this.update(e || window.event);\n          });\n          SVG.on(window, 'touchend.resize', function() {\n              _this.done();\n          });\n          // Mouse.\n          SVG.on(window, 'mousemove.resize', function (e) {\n              _this.update(e || window.event);\n          });\n          SVG.on(window, 'mouseup.resize', function () {\n              _this.done();\n          });\n\n      };\n\n      // The update-function redraws the element every time the mouse is moving\n      ResizeHandler.prototype.update = function (event) {\n\n          if (!event) {\n              if (this.lastUpdateCall) {\n                  this.calc(this.lastUpdateCall[0], this.lastUpdateCall[1]);\n              }\n              return;\n          }\n\n          // Calculate the difference between the mouseposition at start and now\n          var txPt = this._extractPosition(event);\n          var p = this.transformPoint(txPt.x, txPt.y);\n\n          var diffX = p.x - this.parameters.p.x,\n              diffY = p.y - this.parameters.p.y;\n\n          this.lastUpdateCall = [diffX, diffY];\n\n          // Calculate the new position and height / width of the element\n          this.calc(diffX, diffY);\n\n         // Emit an event to say we have changed.\n          this.el.fire('resizing', {dx: diffX, dy: diffY, event: event});\n      };\n\n      // Is called on mouseup.\n      // Removes the update-function from the mousemove event\n      ResizeHandler.prototype.done = function () {\n          this.lastUpdateCall = null;\n          SVG.off(window, 'mousemove.resize');\n          SVG.off(window, 'mouseup.resize');\n          SVG.off(window, 'touchmove.resize');\n          SVG.off(window, 'touchend.resize');\n          this.el.fire('resizedone');\n      };\n\n      // The flag is used to determine whether the resizing is used with a left-Point (first bit) and top-point (second bit)\n      // In this cases the temp-values are calculated differently\n      ResizeHandler.prototype.snapToGrid = function (diffX, diffY, flag, pointCoordsY) {\n\n          var temp;\n\n          // If `pointCoordsY` is given, a single Point has to be snapped (deepSelect). That's why we need a different temp-value\n          if (typeof pointCoordsY !== 'undefined') {\n              // Note that flag = pointCoordsX in this case\n              temp = [(flag + diffX) % this.options.snapToGrid, (pointCoordsY + diffY) % this.options.snapToGrid];\n          } else {\n              // We check if the flag is set and if not we set a default-value (both bits set - which means upper-left-edge)\n              flag = flag == null ? 1 | 1 << 1 : flag;\n              temp = [(this.parameters.box.x + diffX + (flag & 1 ? 0 : this.parameters.box.width)) % this.options.snapToGrid, (this.parameters.box.y + diffY + (flag & (1 << 1) ? 0 : this.parameters.box.height)) % this.options.snapToGrid];\n          }\n\n          if(diffX < 0) {\n              temp[0] -= this.options.snapToGrid;\n          }\n          if(diffY < 0) {\n              temp[1] -= this.options.snapToGrid;\n          }\n\n          diffX -= (Math.abs(temp[0]) < this.options.snapToGrid / 2 ?\n                    temp[0] :\n                    temp[0] - (diffX < 0 ? -this.options.snapToGrid : this.options.snapToGrid));\n          diffY -= (Math.abs(temp[1]) < this.options.snapToGrid / 2 ?\n                    temp[1] :\n                    temp[1] - (diffY < 0 ? -this.options.snapToGrid : this.options.snapToGrid));\n\n          return this.constraintToBox(diffX, diffY, flag, pointCoordsY);\n\n      };\n\n      // keep element within constrained box\n      ResizeHandler.prototype.constraintToBox = function (diffX, diffY, flag, pointCoordsY) {\n          //return [diffX, diffY]\n          var c = this.options.constraint || {};\n          var orgX, orgY;\n\n          if (typeof pointCoordsY !== 'undefined') {\n            orgX = flag;\n            orgY = pointCoordsY;\n          } else {\n            orgX = this.parameters.box.x + (flag & 1 ? 0 : this.parameters.box.width);\n            orgY = this.parameters.box.y + (flag & (1<<1) ? 0 : this.parameters.box.height);\n          }\n\n          if (typeof c.minX !== 'undefined' && orgX + diffX < c.minX) {\n            diffX = c.minX - orgX;\n          }\n\n          if (typeof c.maxX !== 'undefined' && orgX + diffX > c.maxX) {\n            diffX = c.maxX - orgX;\n          }\n\n          if (typeof c.minY !== 'undefined' && orgY + diffY < c.minY) {\n            diffY = c.minY - orgY;\n          }\n\n          if (typeof c.maxY !== 'undefined' && orgY + diffY > c.maxY) {\n            diffY = c.maxY - orgY;\n          }\n\n          return [diffX, diffY];\n      };\n\n      ResizeHandler.prototype.checkAspectRatio = function (snap, isReverse) {\n          if (!this.options.saveAspectRatio) {\n              return snap;\n          }\n\n          var updatedSnap = snap.slice();\n          var aspectRatio = this.parameters.box.width / this.parameters.box.height;\n          var newW = this.parameters.box.width + snap[0];\n          var newH = this.parameters.box.height - snap[1];\n          var newAspectRatio = newW / newH;\n\n          if (newAspectRatio < aspectRatio) {\n              // Height is too big. Adapt it\n              updatedSnap[1] = newW / aspectRatio - this.parameters.box.height;\n              isReverse && (updatedSnap[1] = -updatedSnap[1]);\n          } else if (newAspectRatio > aspectRatio) {\n              // Width is too big. Adapt it\n              updatedSnap[0] = this.parameters.box.width - newH * aspectRatio;\n              isReverse && (updatedSnap[0] = -updatedSnap[0]);\n          }\n\n          return updatedSnap;\n      };\n\n      SVG.extend(SVG.Element, {\n          // Resize element with mouse\n          resize: function (options) {\n\n              (this.remember('_resizeHandler') || new ResizeHandler(this)).init(options || {});\n\n              return this;\n\n          }\n\n      });\n\n      SVG.Element.prototype.resize.defaults = {\n          snapToAngle: 0.1,       // Specifies the speed the rotation is happening when moving the mouse\n          snapToGrid: 1,          // Snaps to a grid of `snapToGrid` Pixels\n          constraint: {},         // keep element within constrained box\n          saveAspectRatio: false  // Save aspect ratio when resizing using lt, rt, rb or lb points\n      };\n\n  }).call(this);\n  }());\n\n  if (typeof window.Apex === 'undefined') {\n    window.Apex = {};\n  }\n\n  var InitCtxVariables = /*#__PURE__*/function () {\n    function InitCtxVariables(ctx) {\n      _classCallCheck(this, InitCtxVariables);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(InitCtxVariables, [{\n      key: \"initModules\",\n      value: function initModules() {\n        this.ctx.publicMethods = ['updateOptions', 'updateSeries', 'appendData', 'appendSeries', 'toggleSeries', 'showSeries', 'hideSeries', 'setLocale', 'resetSeries', 'zoomX', 'toggleDataPointSelection', 'dataURI', 'exportToCSV', 'addXaxisAnnotation', 'addYaxisAnnotation', 'addPointAnnotation', 'clearAnnotations', 'removeAnnotation', 'paper', 'destroy'];\n        this.ctx.eventList = ['click', 'mousedown', 'mousemove', 'mouseleave', 'touchstart', 'touchmove', 'touchleave', 'mouseup', 'touchend'];\n        this.ctx.animations = new Animations(this.ctx);\n        this.ctx.axes = new Axes(this.ctx);\n        this.ctx.core = new Core(this.ctx.el, this.ctx);\n        this.ctx.config = new Config({});\n        this.ctx.data = new Data(this.ctx);\n        this.ctx.grid = new Grid(this.ctx);\n        this.ctx.graphics = new Graphics(this.ctx);\n        this.ctx.coreUtils = new CoreUtils(this.ctx);\n        this.ctx.crosshairs = new Crosshairs(this.ctx);\n        this.ctx.events = new Events(this.ctx);\n        this.ctx.exports = new Exports(this.ctx);\n        this.ctx.localization = new Localization(this.ctx);\n        this.ctx.options = new Options();\n        this.ctx.responsive = new Responsive(this.ctx);\n        this.ctx.series = new Series(this.ctx);\n        this.ctx.theme = new Theme(this.ctx);\n        this.ctx.formatters = new Formatters(this.ctx);\n        this.ctx.titleSubtitle = new TitleSubtitle(this.ctx);\n        this.ctx.legend = new Legend(this.ctx);\n        this.ctx.toolbar = new Toolbar(this.ctx);\n        this.ctx.tooltip = new Tooltip(this.ctx);\n        this.ctx.dimensions = new Dimensions(this.ctx);\n        this.ctx.updateHelpers = new UpdateHelpers(this.ctx);\n        this.ctx.zoomPanSelection = new ZoomPanSelection(this.ctx);\n        this.ctx.w.globals.tooltip = new Tooltip(this.ctx);\n      }\n    }]);\n\n    return InitCtxVariables;\n  }();\n\n  var Destroy = /*#__PURE__*/function () {\n    function Destroy(ctx) {\n      _classCallCheck(this, Destroy);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(Destroy, [{\n      key: \"clear\",\n      value: function clear(_ref) {\n        var isUpdating = _ref.isUpdating;\n\n        if (this.ctx.zoomPanSelection) {\n          this.ctx.zoomPanSelection.destroy();\n        }\n\n        if (this.ctx.toolbar) {\n          this.ctx.toolbar.destroy();\n        }\n\n        this.ctx.animations = null;\n        this.ctx.axes = null;\n        this.ctx.annotations = null;\n        this.ctx.core = null;\n        this.ctx.data = null;\n        this.ctx.grid = null;\n        this.ctx.series = null;\n        this.ctx.responsive = null;\n        this.ctx.theme = null;\n        this.ctx.formatters = null;\n        this.ctx.titleSubtitle = null;\n        this.ctx.legend = null;\n        this.ctx.dimensions = null;\n        this.ctx.options = null;\n        this.ctx.crosshairs = null;\n        this.ctx.zoomPanSelection = null;\n        this.ctx.updateHelpers = null;\n        this.ctx.toolbar = null;\n        this.ctx.localization = null;\n        this.ctx.w.globals.tooltip = null;\n        this.clearDomElements({\n          isUpdating: isUpdating\n        });\n      }\n    }, {\n      key: \"killSVG\",\n      value: function killSVG(draw) {\n        draw.each(function (i, children) {\n          this.removeClass('*');\n          this.off();\n          this.stop();\n        }, true);\n        draw.ungroup();\n        draw.clear();\n      }\n    }, {\n      key: \"clearDomElements\",\n      value: function clearDomElements(_ref2) {\n        var _this = this;\n\n        var isUpdating = _ref2.isUpdating;\n        var elSVG = this.w.globals.dom.Paper.node; // fixes apexcharts.js#1654 & vue-apexcharts#256\n\n        if (elSVG.parentNode && elSVG.parentNode.parentNode && !isUpdating) {\n          elSVG.parentNode.parentNode.style.minHeight = 'unset';\n        } // detach root event\n\n\n        var baseEl = this.w.globals.dom.baseEl;\n\n        if (baseEl) {\n          // see https://github.com/apexcharts/vue-apexcharts/issues/275\n          this.ctx.eventList.forEach(function (event) {\n            baseEl.removeEventListener(event, _this.ctx.events.documentEvent);\n          });\n        }\n\n        var domEls = this.w.globals.dom;\n\n        if (this.ctx.el !== null) {\n          // remove all child elements - resetting the whole chart\n          while (this.ctx.el.firstChild) {\n            this.ctx.el.removeChild(this.ctx.el.firstChild);\n          }\n        }\n\n        this.killSVG(domEls.Paper);\n        domEls.Paper.remove();\n        domEls.elWrap = null;\n        domEls.elGraphical = null;\n        domEls.elLegendWrap = null;\n        domEls.elLegendForeign = null;\n        domEls.baseEl = null;\n        domEls.elGridRect = null;\n        domEls.elGridRectMask = null;\n        domEls.elGridRectMarkerMask = null;\n        domEls.elForecastMask = null;\n        domEls.elNonForecastMask = null;\n        domEls.elDefs = null;\n      }\n    }]);\n\n    return Destroy;\n  }();\n\n  // Helpers to react to element resizes, regardless of what caused them\n  // TODO Currently this creates a new ResizeObserver every time we want to observe an element for resizes\n  // Ideally, we should be able to use a single observer for all elements\n  var ros = new WeakMap(); // Map callbacks to ResizeObserver instances for easy removal\n\n  function addResizeListener(el, fn) {\n    var called = false;\n\n    if (el.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n      var elRect = el.getBoundingClientRect();\n\n      if (el.style.display === 'none' || elRect.width === 0) {\n        // if elRect.width=0, the chart is not rendered at all\n        // (it has either display none or hidden in a different tab)\n        // fixes https://github.com/apexcharts/apexcharts.js/issues/2825\n        // fixes https://github.com/apexcharts/apexcharts.js/issues/2991\n        // fixes https://github.com/apexcharts/apexcharts.js/issues/2992\n        called = true;\n      }\n    }\n\n    var ro = new ResizeObserver(function (r) {\n      // ROs fire immediately after being created,\n      // per spec: https://drafts.csswg.org/resize-observer/#ref-for-element%E2%91%A3\n      // we don't want that so we just discard the first run\n      if (called) {\n        fn.call(el, r);\n      }\n\n      called = true;\n    });\n\n    if (el.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      // Document fragment, observe children instead (needed for Shadow DOM, see #1332)\n      Array.from(el.children).forEach(function (c) {\n        return ro.observe(c);\n      });\n    } else {\n      ro.observe(el);\n    }\n\n    ros.set(fn, ro);\n  }\n  function removeResizeListener(el, fn) {\n    var ro = ros.get(fn);\n\n    if (ro) {\n      ro.disconnect();\n      ros.delete(fn);\n    }\n  }\n\n  var css_248z = \"@keyframes opaque {\\n  0% {\\n      opacity: 0\\n  }\\n\\n  to {\\n      opacity: 1\\n  }\\n}\\n\\n@keyframes resizeanim {\\n  0%,to {\\n      opacity: 0\\n  }\\n}\\n\\n.apexcharts-canvas {\\n  position: relative;\\n  user-select: none\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar {\\n  -webkit-appearance: none;\\n  width: 6px\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\\n  border-radius: 4px;\\n  background-color: rgba(0,0,0,.5);\\n  box-shadow: 0 0 1px rgba(255,255,255,.5);\\n  -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5)\\n}\\n\\n.apexcharts-inner {\\n  position: relative\\n}\\n\\n.apexcharts-text tspan {\\n  font-family: inherit\\n}\\n\\n.legend-mouseover-inactive {\\n  transition: .15s ease all;\\n  opacity: .2\\n}\\n\\n.apexcharts-legend-text {\\n  padding-left: 15px;\\n  margin-left: -15px;\\n}\\n\\n.apexcharts-series-collapsed {\\n  opacity: 0\\n}\\n\\n.apexcharts-tooltip {\\n  border-radius: 5px;\\n  box-shadow: 2px 2px 6px -4px #999;\\n  cursor: default;\\n  font-size: 14px;\\n  left: 62px;\\n  opacity: 0;\\n  pointer-events: none;\\n  position: absolute;\\n  top: 20px;\\n  display: flex;\\n  flex-direction: column;\\n  overflow: hidden;\\n  white-space: nowrap;\\n  z-index: 12;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-tooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light {\\n  border: 1px solid #e3e3e3;\\n  background: rgba(255,255,255,.96)\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-dark {\\n  color: #fff;\\n  background: rgba(30,30,30,.8)\\n}\\n\\n.apexcharts-tooltip * {\\n  font-family: inherit\\n}\\n\\n.apexcharts-tooltip-title {\\n  padding: 6px;\\n  font-size: 15px;\\n  margin-bottom: 4px\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {\\n  background: #eceff1;\\n  border-bottom: 1px solid #ddd\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\\n  background: rgba(0,0,0,.7);\\n  border-bottom: 1px solid #333\\n}\\n\\n.apexcharts-tooltip-text-goals-value,.apexcharts-tooltip-text-y-value,.apexcharts-tooltip-text-z-value {\\n  display: inline-block;\\n  margin-left: 5px;\\n  font-weight: 600\\n}\\n\\n.apexcharts-tooltip-text-goals-label:empty,.apexcharts-tooltip-text-goals-value:empty,.apexcharts-tooltip-text-y-label:empty,.apexcharts-tooltip-text-y-value:empty,.apexcharts-tooltip-text-z-value:empty,.apexcharts-tooltip-title:empty {\\n  display: none\\n}\\n\\n.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-tooltip-goals-group,.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\\n  display: flex\\n}\\n\\n.apexcharts-tooltip-text-goals-label:not(:empty),.apexcharts-tooltip-text-goals-value:not(:empty) {\\n  margin-top: -6px\\n}\\n\\n.apexcharts-tooltip-marker {\\n  width: 12px;\\n  height: 12px;\\n  position: relative;\\n  top: 0;\\n  margin-right: 10px;\\n  border-radius: 50%\\n}\\n\\n.apexcharts-tooltip-series-group {\\n  padding: 0 10px;\\n  display: none;\\n  text-align: left;\\n  justify-content: left;\\n  align-items: center\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\\n  opacity: 1\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active,.apexcharts-tooltip-series-group:last-child {\\n  padding-bottom: 4px\\n}\\n\\n.apexcharts-tooltip-series-group-hidden {\\n  opacity: 0;\\n  height: 0;\\n  line-height: 0;\\n  padding: 0!important\\n}\\n\\n.apexcharts-tooltip-y-group {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-custom-tooltip,.apexcharts-tooltip-box {\\n  padding: 4px 8px\\n}\\n\\n.apexcharts-tooltip-boxPlot {\\n  display: flex;\\n  flex-direction: column-reverse\\n}\\n\\n.apexcharts-tooltip-box>div {\\n  margin: 4px 0\\n}\\n\\n.apexcharts-tooltip-box span.value {\\n  font-weight: 700\\n}\\n\\n.apexcharts-tooltip-rangebar {\\n  padding: 5px 8px\\n}\\n\\n.apexcharts-tooltip-rangebar .category {\\n  font-weight: 600;\\n  color: #777\\n}\\n\\n.apexcharts-tooltip-rangebar .series-name {\\n  font-weight: 700;\\n  display: block;\\n  margin-bottom: 5px\\n}\\n\\n.apexcharts-xaxistooltip,.apexcharts-yaxistooltip {\\n  opacity: 0;\\n  pointer-events: none;\\n  color: #373d3f;\\n  font-size: 13px;\\n  text-align: center;\\n  border-radius: 2px;\\n  position: absolute;\\n  z-index: 10;\\n  background: #eceff1;\\n  border: 1px solid #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip {\\n  padding: 9px 10px;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-theme-dark {\\n  background: rgba(0,0,0,.7);\\n  border: 1px solid rgba(0,0,0,.5);\\n  color: #fff\\n}\\n\\n.apexcharts-xaxistooltip:after,.apexcharts-xaxistooltip:before {\\n  left: 50%;\\n  border: solid transparent;\\n  content: \\\" \\\";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n.apexcharts-xaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-left: -6px\\n}\\n\\n.apexcharts-xaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 7px;\\n  margin-left: -7px\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after,.apexcharts-xaxistooltip-bottom:before {\\n  bottom: 100%\\n}\\n\\n.apexcharts-xaxistooltip-top:after,.apexcharts-xaxistooltip-top:before {\\n  top: 100%\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after {\\n  border-bottom-color: #eceff1\\n}\\n\\n.apexcharts-xaxistooltip-bottom:before {\\n  border-bottom-color: #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {\\n  border-bottom-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-xaxistooltip-top:after {\\n  border-top-color: #eceff1\\n}\\n\\n.apexcharts-xaxistooltip-top:before {\\n  border-top-color: #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {\\n  border-top-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-yaxistooltip {\\n  padding: 4px 10px\\n}\\n\\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\\n  background: rgba(0,0,0,.7);\\n  border: 1px solid rgba(0,0,0,.5);\\n  color: #fff\\n}\\n\\n.apexcharts-yaxistooltip:after,.apexcharts-yaxistooltip:before {\\n  top: 50%;\\n  border: solid transparent;\\n  content: \\\" \\\";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n.apexcharts-yaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-top: -6px\\n}\\n\\n.apexcharts-yaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 7px;\\n  margin-top: -7px\\n}\\n\\n.apexcharts-yaxistooltip-left:after,.apexcharts-yaxistooltip-left:before {\\n  left: 100%\\n}\\n\\n.apexcharts-yaxistooltip-right:after,.apexcharts-yaxistooltip-right:before {\\n  right: 100%\\n}\\n\\n.apexcharts-yaxistooltip-left:after {\\n  border-left-color: #eceff1\\n}\\n\\n.apexcharts-yaxistooltip-left:before {\\n  border-left-color: #90a4ae\\n}\\n\\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {\\n  border-left-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-yaxistooltip-right:after {\\n  border-right-color: #eceff1\\n}\\n\\n.apexcharts-yaxistooltip-right:before {\\n  border-right-color: #90a4ae\\n}\\n\\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {\\n  border-right-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-yaxistooltip.apexcharts-active {\\n  opacity: 1\\n}\\n\\n.apexcharts-yaxistooltip-hidden {\\n  display: none\\n}\\n\\n.apexcharts-xcrosshairs,.apexcharts-ycrosshairs {\\n  pointer-events: none;\\n  opacity: 0;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xcrosshairs.apexcharts-active,.apexcharts-ycrosshairs.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-ycrosshairs-hidden {\\n  opacity: 0\\n}\\n\\n.apexcharts-selection-rect {\\n  cursor: move\\n}\\n\\n.svg_select_boundingRect,.svg_select_points_rot {\\n  pointer-events: none;\\n  opacity: 0;\\n  visibility: hidden\\n}\\n\\n.apexcharts-selection-rect+g .svg_select_boundingRect,.apexcharts-selection-rect+g .svg_select_points_rot {\\n  opacity: 0;\\n  visibility: hidden\\n}\\n\\n.apexcharts-selection-rect+g .svg_select_points_l,.apexcharts-selection-rect+g .svg_select_points_r {\\n  cursor: ew-resize;\\n  opacity: 1;\\n  visibility: visible\\n}\\n\\n.svg_select_points {\\n  fill: #efefef;\\n  stroke: #333;\\n  rx: 2\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-zoom {\\n  cursor: crosshair\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\\n  cursor: move\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-pan-icon,.apexcharts-reset-icon,.apexcharts-selection-icon,.apexcharts-toolbar-custom-icon,.apexcharts-zoom-icon,.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {\\n  cursor: pointer;\\n  width: 20px;\\n  height: 20px;\\n  line-height: 24px;\\n  color: #6e8192;\\n  text-align: center\\n}\\n\\n.apexcharts-menu-icon svg,.apexcharts-reset-icon svg,.apexcharts-zoom-icon svg,.apexcharts-zoomin-icon svg,.apexcharts-zoomout-icon svg {\\n  fill: #6e8192\\n}\\n\\n.apexcharts-selection-icon svg {\\n  fill: #444;\\n  transform: scale(.76)\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-icon svg,.apexcharts-theme-dark .apexcharts-pan-icon svg,.apexcharts-theme-dark .apexcharts-reset-icon svg,.apexcharts-theme-dark .apexcharts-selection-icon svg,.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg,.apexcharts-theme-dark .apexcharts-zoom-icon svg,.apexcharts-theme-dark .apexcharts-zoomin-icon svg,.apexcharts-theme-dark .apexcharts-zoomout-icon svg {\\n  fill: #f3f4f5\\n}\\n\\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg {\\n  fill: #008ffb\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-icon:hover svg,.apexcharts-theme-light .apexcharts-reset-icon:hover svg,.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg {\\n  fill: #333\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-selection-icon {\\n  position: relative\\n}\\n\\n.apexcharts-reset-icon {\\n  margin-left: 5px\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-reset-icon,.apexcharts-zoom-icon {\\n  transform: scale(.85)\\n}\\n\\n.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {\\n  transform: scale(.7)\\n}\\n\\n.apexcharts-zoomout-icon {\\n  margin-right: 3px\\n}\\n\\n.apexcharts-pan-icon {\\n  transform: scale(.62);\\n  position: relative;\\n  left: 1px;\\n  top: 0\\n}\\n\\n.apexcharts-pan-icon svg {\\n  fill: #fff;\\n  stroke: #6e8192;\\n  stroke-width: 2\\n}\\n\\n.apexcharts-pan-icon.apexcharts-selected svg {\\n  stroke: #008ffb\\n}\\n\\n.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {\\n  stroke: #333\\n}\\n\\n.apexcharts-toolbar {\\n  position: absolute;\\n  z-index: 11;\\n  max-width: 176px;\\n  text-align: right;\\n  border-radius: 3px;\\n  padding: 0 6px 2px;\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center\\n}\\n\\n.apexcharts-menu {\\n  background: #fff;\\n  position: absolute;\\n  top: 100%;\\n  border: 1px solid #ddd;\\n  border-radius: 3px;\\n  padding: 3px;\\n  right: 10px;\\n  opacity: 0;\\n  min-width: 110px;\\n  transition: .15s ease all;\\n  pointer-events: none\\n}\\n\\n.apexcharts-menu.apexcharts-menu-open {\\n  opacity: 1;\\n  pointer-events: all;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-menu-item {\\n  padding: 6px 7px;\\n  font-size: 12px;\\n  cursor: pointer\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-item:hover {\\n  background: #eee\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu {\\n  background: rgba(0,0,0,.7);\\n  color: #fff\\n}\\n\\n@media screen and (min-width:768px) {\\n  .apexcharts-canvas:hover .apexcharts-toolbar {\\n      opacity: 1\\n  }\\n}\\n\\n.apexcharts-canvas .apexcharts-element-hidden,.apexcharts-datalabel.apexcharts-element-hidden,.apexcharts-hide .apexcharts-series-points {\\n  opacity: 0\\n}\\n\\n.apexcharts-hidden-element-shown {\\n  opacity: 1;\\n  transition: 0.25s ease all;\\n}\\n.apexcharts-datalabel,.apexcharts-datalabel-label,.apexcharts-datalabel-value,.apexcharts-datalabels,.apexcharts-pie-label {\\n  cursor: default;\\n  pointer-events: none\\n}\\n\\n.apexcharts-pie-label-delay {\\n  opacity: 0;\\n  animation-name: opaque;\\n  animation-duration: .3s;\\n  animation-fill-mode: forwards;\\n  animation-timing-function: ease\\n}\\n\\n.apexcharts-annotation-rect,.apexcharts-area-series .apexcharts-area,.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-gridline,.apexcharts-line,.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-point-annotation-label,.apexcharts-radar-series path,.apexcharts-radar-series polygon,.apexcharts-toolbar svg,.apexcharts-tooltip .apexcharts-marker,.apexcharts-xaxis-annotation-label,.apexcharts-yaxis-annotation-label,.apexcharts-zoom-rect {\\n  pointer-events: none\\n}\\n\\n.apexcharts-marker {\\n  transition: .15s ease all\\n}\\n\\n.resize-triggers {\\n  animation: 1ms resizeanim;\\n  visibility: hidden;\\n  opacity: 0;\\n  height: 100%;\\n  width: 100%;\\n  overflow: hidden\\n}\\n\\n.contract-trigger:before,.resize-triggers,.resize-triggers>div {\\n  content: \\\" \\\";\\n  display: block;\\n  position: absolute;\\n  top: 0;\\n  left: 0\\n}\\n\\n.resize-triggers>div {\\n  height: 100%;\\n  width: 100%;\\n  background: #eee;\\n  overflow: auto\\n}\\n\\n.contract-trigger:before {\\n  overflow: hidden;\\n  width: 200%;\\n  height: 200%\\n}\\n\";\n\n  /**\n   *\n   * @module ApexCharts\n   **/\n\n  var ApexCharts$1 = /*#__PURE__*/function () {\n    function ApexCharts(el, opts) {\n      _classCallCheck(this, ApexCharts);\n\n      this.opts = opts;\n      this.ctx = this; // Pass the user supplied options to the Base Class where these options will be extended with defaults. The returned object from Base Class will become the config object in the entire codebase.\n\n      this.w = new Base(opts).init();\n      this.el = el;\n      this.w.globals.cuid = Utils$1.randomId();\n      this.w.globals.chartID = this.w.config.chart.id ? Utils$1.escapeString(this.w.config.chart.id) : this.w.globals.cuid;\n      var initCtx = new InitCtxVariables(this);\n      initCtx.initModules();\n      this.create = Utils$1.bind(this.create, this);\n      this.windowResizeHandler = this._windowResizeHandler.bind(this);\n      this.parentResizeHandler = this._parentResizeCallback.bind(this);\n    }\n    /**\n     * The primary method user will call to render the chart.\n     */\n\n\n    _createClass(ApexCharts, [{\n      key: \"render\",\n      value: function render() {\n        var _this = this;\n\n        // main method\n        return new Promise(function (resolve, reject) {\n          // only draw chart, if element found\n          if (_this.el !== null) {\n            if (typeof Apex._chartInstances === 'undefined') {\n              Apex._chartInstances = [];\n            }\n\n            if (_this.w.config.chart.id) {\n              Apex._chartInstances.push({\n                id: _this.w.globals.chartID,\n                group: _this.w.config.chart.group,\n                chart: _this\n              });\n            } // set the locale here\n\n\n            _this.setLocale(_this.w.config.chart.defaultLocale);\n\n            var beforeMount = _this.w.config.chart.events.beforeMount;\n\n            if (typeof beforeMount === 'function') {\n              beforeMount(_this, _this.w);\n            }\n\n            _this.events.fireEvent('beforeMount', [_this, _this.w]);\n\n            window.addEventListener('resize', _this.windowResizeHandler);\n            addResizeListener(_this.el.parentNode, _this.parentResizeHandler); // Add CSS if not already added\n\n            if (!_this.css) {\n              var rootNode = _this.el.getRootNode && _this.el.getRootNode();\n\n              var inShadowRoot = Utils$1.is('ShadowRoot', rootNode);\n              var doc = _this.el.ownerDocument;\n              var globalCSS = doc.getElementById('apexcharts-css');\n\n              if (inShadowRoot || !globalCSS) {\n                _this.css = document.createElement('style');\n                _this.css.id = 'apexcharts-css';\n                _this.css.textContent = css_248z;\n\n                if (inShadowRoot) {\n                  // We are in Shadow DOM, add to shadow root\n                  rootNode.prepend(_this.css);\n                } else {\n                  // Add to <head> of element's document\n                  doc.head.appendChild(_this.css);\n                }\n              }\n            }\n\n            var graphData = _this.create(_this.w.config.series, {});\n\n            if (!graphData) return resolve(_this);\n\n            _this.mount(graphData).then(function () {\n              if (typeof _this.w.config.chart.events.mounted === 'function') {\n                _this.w.config.chart.events.mounted(_this, _this.w);\n              }\n\n              _this.events.fireEvent('mounted', [_this, _this.w]);\n\n              resolve(graphData);\n            }).catch(function (e) {\n              reject(e); // handle error in case no data or element not found\n            });\n          } else {\n            reject(new Error('Element not found'));\n          }\n        });\n      }\n    }, {\n      key: \"create\",\n      value: function create(ser, opts) {\n        var w = this.w;\n        var initCtx = new InitCtxVariables(this);\n        initCtx.initModules();\n        var gl = this.w.globals;\n        gl.noData = false;\n        gl.animationEnded = false;\n        this.responsive.checkResponsiveConfig(opts);\n\n        if (w.config.xaxis.convertedCatToNumeric) {\n          var defaults = new Defaults(w.config);\n          defaults.convertCatToNumericXaxis(w.config, this.ctx);\n        }\n\n        if (this.el === null) {\n          gl.animationEnded = true;\n          return null;\n        }\n\n        this.core.setupElements();\n\n        if (w.config.chart.type === 'treemap') {\n          w.config.grid.show = false;\n          w.config.yaxis[0].show = false;\n        }\n\n        if (gl.svgWidth === 0) {\n          // if the element is hidden, skip drawing\n          gl.animationEnded = true;\n          return null;\n        }\n\n        var combo = CoreUtils.checkComboSeries(ser);\n        gl.comboCharts = combo.comboCharts;\n        gl.comboBarCount = combo.comboBarCount;\n        var allSeriesAreEmpty = ser.every(function (s) {\n          return s.data && s.data.length === 0;\n        });\n\n        if (ser.length === 0 || allSeriesAreEmpty) {\n          this.series.handleNoData();\n        }\n\n        this.events.setupEventHandlers(); // Handle the data inputted by user and set some of the global variables (for eg, if data is datetime / numeric / category). Don't calculate the range / min / max at this time\n\n        this.data.parseData(ser); // this is a good time to set theme colors first\n\n        this.theme.init(); // as markers accepts array, we need to setup global markers for easier access\n\n        var markers = new Markers(this);\n        markers.setGlobalMarkerSize(); // labelFormatters should be called before dimensions as in dimensions we need text labels width\n\n        this.formatters.setLabelFormatters();\n        this.titleSubtitle.draw(); // legend is calculated here before coreCalculations because it affects the plottable area\n        // if there is some data to show or user collapsed all series, then proceed drawing legend\n\n        if (!gl.noData || gl.collapsedSeries.length === gl.series.length || w.config.legend.showForSingleSeries) {\n          this.legend.init();\n        } // check whether in multiple series, all series share the same X\n\n\n        this.series.hasAllSeriesEqualX(); // coreCalculations will give the min/max range and yaxis/axis values. It should be called here to set series variable from config to globals\n\n        if (gl.axisCharts) {\n          this.core.coreCalculations();\n\n          if (w.config.xaxis.type !== 'category') {\n            // as we have minX and maxX values, determine the default DateTimeFormat for time series\n            this.formatters.setLabelFormatters();\n          }\n\n          this.ctx.toolbar.minX = w.globals.minX;\n          this.ctx.toolbar.maxX = w.globals.maxX;\n        } // we need to generate yaxis for heatmap separately as we are not showing numerics there, but seriesNames. There are some tweaks which are required for heatmap to align labels correctly which are done in below function\n        // Also we need to do this before calculating Dimensions plotCoords() method of Dimensions\n\n\n        this.formatters.heatmapLabelFormatters(); // get the largest marker size which will be needed in dimensions calc\n\n        var coreUtils = new CoreUtils(this);\n        coreUtils.getLargestMarkerSize(); // We got plottable area here, next task would be to calculate axis areas\n\n        this.dimensions.plotCoords();\n        var xyRatios = this.core.xySettings();\n        this.grid.createGridMask();\n        var elGraph = this.core.plotChartType(ser, xyRatios);\n        var dataLabels = new DataLabels(this);\n        dataLabels.bringForward();\n\n        if (w.config.dataLabels.background.enabled) {\n          dataLabels.dataLabelsBackground();\n        } // after all the drawing calculations, shift the graphical area (actual charts/bars) excluding legends\n\n\n        this.core.shiftGraphPosition();\n        var dim = {\n          plot: {\n            left: w.globals.translateX,\n            top: w.globals.translateY,\n            width: w.globals.gridWidth,\n            height: w.globals.gridHeight\n          }\n        };\n        return {\n          elGraph: elGraph,\n          xyRatios: xyRatios,\n          dimensions: dim\n        };\n      }\n    }, {\n      key: \"mount\",\n      value: function mount() {\n        var _this2 = this;\n\n        var graphData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        var me = this;\n        var w = me.w;\n        return new Promise(function (resolve, reject) {\n          // no data to display\n          if (me.el === null) {\n            return reject(new Error('Not enough data to display or target element not found'));\n          } else if (graphData === null || w.globals.allSeriesCollapsed) {\n            me.series.handleNoData();\n          }\n\n          me.grid = new Grid(me);\n          var elgrid = me.grid.drawGrid();\n          me.annotations = new Annotations(me);\n          me.annotations.drawImageAnnos();\n          me.annotations.drawTextAnnos();\n\n          if (w.config.grid.position === 'back' && elgrid) {\n            w.globals.dom.elGraphical.add(elgrid.el);\n          }\n\n          if (Array.isArray(graphData.elGraph)) {\n            for (var g = 0; g < graphData.elGraph.length; g++) {\n              w.globals.dom.elGraphical.add(graphData.elGraph[g]);\n            }\n          } else {\n            w.globals.dom.elGraphical.add(graphData.elGraph);\n          }\n\n          if (w.config.grid.position === 'front' && elgrid) {\n            w.globals.dom.elGraphical.add(elgrid.el);\n          }\n\n          if (elgrid && elgrid.elGridBorders && elgrid.elGridBorders.node) {\n            w.globals.dom.elGraphical.add(elgrid.elGridBorders);\n          }\n\n          if (w.config.xaxis.crosshairs.position === 'front') {\n            me.crosshairs.drawXCrosshairs();\n          }\n\n          if (w.config.yaxis[0].crosshairs.position === 'front') {\n            me.crosshairs.drawYCrosshairs();\n          }\n\n          if (w.config.chart.type !== 'treemap') {\n            me.axes.drawAxis(w.config.chart.type, elgrid);\n          }\n\n          var xAxis = new XAxis(_this2.ctx, elgrid);\n          var yaxis = new YAxis(_this2.ctx, elgrid);\n\n          if (elgrid !== null) {\n            xAxis.xAxisLabelCorrections(elgrid.xAxisTickWidth);\n            yaxis.setYAxisTextAlignments();\n            w.config.yaxis.map(function (yaxe, index) {\n              if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1) {\n                yaxis.yAxisTitleRotate(index, yaxe.opposite);\n              }\n            });\n          }\n\n          me.annotations.drawAxesAnnotations();\n\n          if (!w.globals.noData) {\n            // draw tooltips at the end\n            if (w.config.tooltip.enabled && !w.globals.noData) {\n              me.w.globals.tooltip.drawTooltip(graphData.xyRatios);\n            }\n\n            if (w.globals.axisCharts && (w.globals.isXNumeric || w.config.xaxis.convertedCatToNumeric || w.globals.isRangeBar)) {\n              if (w.config.chart.zoom.enabled || w.config.chart.selection && w.config.chart.selection.enabled || w.config.chart.pan && w.config.chart.pan.enabled) {\n                me.zoomPanSelection.init({\n                  xyRatios: graphData.xyRatios\n                });\n              }\n            } else {\n              var tools = w.config.chart.toolbar.tools;\n              var toolsArr = ['zoom', 'zoomin', 'zoomout', 'selection', 'pan', 'reset'];\n              toolsArr.forEach(function (t) {\n                tools[t] = false;\n              });\n            }\n\n            if (w.config.chart.toolbar.show && !w.globals.allSeriesCollapsed) {\n              me.toolbar.createToolbar();\n            }\n          }\n\n          if (w.globals.memory.methodsToExec.length > 0) {\n            w.globals.memory.methodsToExec.forEach(function (fn) {\n              fn.method(fn.params, false, fn.context);\n            });\n          }\n\n          if (!w.globals.axisCharts && !w.globals.noData) {\n            me.core.resizeNonAxisCharts();\n          }\n\n          resolve(me);\n        });\n      }\n      /**\n       * Destroy the chart instance by removing all elements which also clean up event listeners on those elements.\n       */\n\n    }, {\n      key: \"destroy\",\n      value: function destroy() {\n        window.removeEventListener('resize', this.windowResizeHandler);\n        removeResizeListener(this.el.parentNode, this.parentResizeHandler); // remove the chart's instance from the global Apex._chartInstances\n\n        var chartID = this.w.config.chart.id;\n\n        if (chartID) {\n          Apex._chartInstances.forEach(function (c, i) {\n            if (c.id === Utils$1.escapeString(chartID)) {\n              Apex._chartInstances.splice(i, 1);\n            }\n          });\n        }\n\n        new Destroy(this.ctx).clear({\n          isUpdating: false\n        });\n      }\n      /**\n       * Allows users to update Options after the chart has rendered.\n       *\n       * @param {object} options - A new config object can be passed which will be merged with the existing config object\n       * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there\n       * @param {boolean} animate - should animate or not on updating Options\n       */\n\n    }, {\n      key: \"updateOptions\",\n      value: function updateOptions(options) {\n        var _this3 = this;\n\n        var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n        var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        var updateSyncedCharts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n        var overwriteInitialConfig = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n        var w = this.w; // when called externally, clear some global variables\n        // fixes apexcharts.js#1488\n\n        w.globals.selection = undefined;\n\n        if (options.series) {\n          this.series.resetSeries(false, true, false);\n\n          if (options.series.length && options.series[0].data) {\n            options.series = options.series.map(function (s, i) {\n              return _this3.updateHelpers._extendSeries(s, i);\n            });\n          } // user updated the series via updateOptions() function.\n          // Hence, we need to reset axis min/max to avoid zooming issues\n\n\n          this.updateHelpers.revertDefaultAxisMinMax();\n        } // user has set x-axis min/max externally - hence we need to forcefully set the xaxis min/max\n\n\n        if (options.xaxis) {\n          options = this.updateHelpers.forceXAxisUpdate(options);\n        }\n\n        if (options.yaxis) {\n          options = this.updateHelpers.forceYAxisUpdate(options);\n        }\n\n        if (w.globals.collapsedSeriesIndices.length > 0) {\n          this.series.clearPreviousPaths();\n        }\n        /* update theme mode#459 */\n\n\n        if (options.theme) {\n          options = this.theme.updateThemeOptions(options);\n        }\n\n        return this.updateHelpers._updateOptions(options, redraw, animate, updateSyncedCharts, overwriteInitialConfig);\n      }\n      /**\n       * Allows users to update Series after the chart has rendered.\n       *\n       * @param {array} series - New series which will override the existing\n       */\n\n    }, {\n      key: \"updateSeries\",\n      value: function updateSeries() {\n        var newSeries = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n        var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        this.series.resetSeries(false);\n        this.updateHelpers.revertDefaultAxisMinMax();\n        return this.updateHelpers._updateSeries(newSeries, animate, overwriteInitialSeries);\n      }\n      /**\n       * Allows users to append a new series after the chart has rendered.\n       *\n       * @param {array} newSerie - New serie which will be appended to the existing series\n       */\n\n    }, {\n      key: \"appendSeries\",\n      value: function appendSeries(newSerie) {\n        var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        var newSeries = this.w.config.series.slice();\n        newSeries.push(newSerie);\n        this.series.resetSeries(false);\n        this.updateHelpers.revertDefaultAxisMinMax();\n        return this.updateHelpers._updateSeries(newSeries, animate, overwriteInitialSeries);\n      }\n      /**\n       * Allows users to append Data to series.\n       *\n       * @param {array} newData - New data in the same format as series\n       */\n\n    }, {\n      key: \"appendData\",\n      value: function appendData(newData) {\n        var overwriteInitialSeries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var me = this;\n        me.w.globals.dataChanged = true;\n        me.series.getPreviousPaths();\n        var newSeries = me.w.config.series.slice();\n\n        for (var i = 0; i < newSeries.length; i++) {\n          if (newData[i] !== null && typeof newData[i] !== 'undefined') {\n            for (var j = 0; j < newData[i].data.length; j++) {\n              newSeries[i].data.push(newData[i].data[j]);\n            }\n          }\n        }\n\n        me.w.config.series = newSeries;\n\n        if (overwriteInitialSeries) {\n          me.w.globals.initialSeries = Utils$1.clone(me.w.config.series);\n        }\n\n        return this.update();\n      }\n    }, {\n      key: \"update\",\n      value: function update(options) {\n        var _this4 = this;\n\n        return new Promise(function (resolve, reject) {\n          new Destroy(_this4.ctx).clear({\n            isUpdating: true\n          });\n\n          var graphData = _this4.create(_this4.w.config.series, options);\n\n          if (!graphData) return resolve(_this4);\n\n          _this4.mount(graphData).then(function () {\n            if (typeof _this4.w.config.chart.events.updated === 'function') {\n              _this4.w.config.chart.events.updated(_this4, _this4.w);\n            }\n\n            _this4.events.fireEvent('updated', [_this4, _this4.w]);\n\n            _this4.w.globals.isDirty = true;\n            resolve(_this4);\n          }).catch(function (e) {\n            reject(e);\n          });\n        });\n      }\n      /**\n       * Get all charts in the same \"group\" (including the instance which is called upon) to sync them when user zooms in/out or pan.\n       */\n\n    }, {\n      key: \"getSyncedCharts\",\n      value: function getSyncedCharts() {\n        var chartGroups = this.getGroupedCharts();\n        var allCharts = [this];\n\n        if (chartGroups.length) {\n          allCharts = [];\n          chartGroups.forEach(function (ch) {\n            allCharts.push(ch);\n          });\n        }\n\n        return allCharts;\n      }\n      /**\n       * Get charts in the same \"group\" (excluding the instance which is called upon) to perform operations on the other charts of the same group (eg., tooltip hovering)\n       */\n\n    }, {\n      key: \"getGroupedCharts\",\n      value: function getGroupedCharts() {\n        var _this5 = this;\n\n        return Apex._chartInstances.filter(function (ch) {\n          if (ch.group) {\n            return true;\n          }\n        }).map(function (ch) {\n          return _this5.w.config.chart.group === ch.group ? ch.chart : _this5;\n        });\n      }\n    }, {\n      key: \"toggleSeries\",\n      value: function toggleSeries(seriesName) {\n        return this.series.toggleSeries(seriesName);\n      }\n    }, {\n      key: \"highlightSeriesOnLegendHover\",\n      value: function highlightSeriesOnLegendHover(e, targetElement) {\n        return this.series.toggleSeriesOnHover(e, targetElement);\n      }\n    }, {\n      key: \"showSeries\",\n      value: function showSeries(seriesName) {\n        this.series.showSeries(seriesName);\n      }\n    }, {\n      key: \"hideSeries\",\n      value: function hideSeries(seriesName) {\n        this.series.hideSeries(seriesName);\n      }\n    }, {\n      key: \"resetSeries\",\n      value: function resetSeries() {\n        var shouldUpdateChart = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n        var shouldResetZoom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        this.series.resetSeries(shouldUpdateChart, shouldResetZoom);\n      } // Public method to add event listener on chart context\n\n    }, {\n      key: \"addEventListener\",\n      value: function addEventListener(name, handler) {\n        this.events.addEventListener(name, handler);\n      } // Public method to remove event listener on chart context\n\n    }, {\n      key: \"removeEventListener\",\n      value: function removeEventListener(name, handler) {\n        this.events.removeEventListener(name, handler);\n      }\n    }, {\n      key: \"addXaxisAnnotation\",\n      value: function addXaxisAnnotation(opts) {\n        var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n        var me = this;\n\n        if (context) {\n          me = context;\n        }\n\n        me.annotations.addXaxisAnnotationExternal(opts, pushToMemory, me);\n      }\n    }, {\n      key: \"addYaxisAnnotation\",\n      value: function addYaxisAnnotation(opts) {\n        var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n        var me = this;\n\n        if (context) {\n          me = context;\n        }\n\n        me.annotations.addYaxisAnnotationExternal(opts, pushToMemory, me);\n      }\n    }, {\n      key: \"addPointAnnotation\",\n      value: function addPointAnnotation(opts) {\n        var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n        var me = this;\n\n        if (context) {\n          me = context;\n        }\n\n        me.annotations.addPointAnnotationExternal(opts, pushToMemory, me);\n      }\n    }, {\n      key: \"clearAnnotations\",\n      value: function clearAnnotations() {\n        var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n        var me = this;\n\n        if (context) {\n          me = context;\n        }\n\n        me.annotations.clearAnnotations(me);\n      }\n    }, {\n      key: \"removeAnnotation\",\n      value: function removeAnnotation(id) {\n        var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n        var me = this;\n\n        if (context) {\n          me = context;\n        }\n\n        me.annotations.removeAnnotation(me, id);\n      }\n    }, {\n      key: \"getChartArea\",\n      value: function getChartArea() {\n        var el = this.w.globals.dom.baseEl.querySelector('.apexcharts-inner');\n        return el;\n      }\n    }, {\n      key: \"getSeriesTotalXRange\",\n      value: function getSeriesTotalXRange(minX, maxX) {\n        return this.coreUtils.getSeriesTotalsXRange(minX, maxX);\n      }\n    }, {\n      key: \"getHighestValueInSeries\",\n      value: function getHighestValueInSeries() {\n        var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n        var range = new Range(this.ctx);\n        return range.getMinYMaxY(seriesIndex).highestY;\n      }\n    }, {\n      key: \"getLowestValueInSeries\",\n      value: function getLowestValueInSeries() {\n        var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n        var range = new Range(this.ctx);\n        return range.getMinYMaxY(seriesIndex).lowestY;\n      }\n    }, {\n      key: \"getSeriesTotal\",\n      value: function getSeriesTotal() {\n        return this.w.globals.seriesTotals;\n      }\n    }, {\n      key: \"toggleDataPointSelection\",\n      value: function toggleDataPointSelection(seriesIndex, dataPointIndex) {\n        return this.updateHelpers.toggleDataPointSelection(seriesIndex, dataPointIndex);\n      }\n    }, {\n      key: \"zoomX\",\n      value: function zoomX(min, max) {\n        this.ctx.toolbar.zoomUpdateOptions(min, max);\n      }\n    }, {\n      key: \"setLocale\",\n      value: function setLocale(localeName) {\n        this.localization.setCurrentLocaleValues(localeName);\n      }\n    }, {\n      key: \"dataURI\",\n      value: function dataURI(options) {\n        var exp = new Exports(this.ctx);\n        return exp.dataURI(options);\n      }\n    }, {\n      key: \"exportToCSV\",\n      value: function exportToCSV() {\n        var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n        var exp = new Exports(this.ctx);\n        return exp.exportToCSV(options);\n      }\n    }, {\n      key: \"paper\",\n      value: function paper() {\n        return this.w.globals.dom.Paper;\n      }\n    }, {\n      key: \"_parentResizeCallback\",\n      value: function _parentResizeCallback() {\n        if (this.w.globals.animationEnded && this.w.config.chart.redrawOnParentResize) {\n          this._windowResize();\n        }\n      }\n      /**\n       * Handle window resize and re-draw the whole chart.\n       */\n\n    }, {\n      key: \"_windowResize\",\n      value: function _windowResize() {\n        var _this6 = this;\n\n        clearTimeout(this.w.globals.resizeTimer);\n        this.w.globals.resizeTimer = window.setTimeout(function () {\n          _this6.w.globals.resized = true;\n          _this6.w.globals.dataChanged = false; // we need to redraw the whole chart on window resize (with a small delay).\n\n          _this6.ctx.update();\n        }, 150);\n      }\n    }, {\n      key: \"_windowResizeHandler\",\n      value: function _windowResizeHandler() {\n        var redraw = this.w.config.chart.redrawOnWindowResize;\n\n        if (typeof redraw === 'function') {\n          redraw = redraw();\n        }\n\n        redraw && this._windowResize();\n      }\n    }], [{\n      key: \"getChartByID\",\n      value: function getChartByID(id) {\n        var chartId = Utils$1.escapeString(id);\n\n        var c = Apex._chartInstances.filter(function (ch) {\n          return ch.id === chartId;\n        })[0];\n\n        return c && c.chart;\n      }\n      /**\n       * Allows the user to provide data attrs in the element and the chart will render automatically when this method is called by searching for the elements containing 'data-apexcharts' attribute\n       */\n\n    }, {\n      key: \"initOnLoad\",\n      value: function initOnLoad() {\n        var els = document.querySelectorAll('[data-apexcharts]');\n\n        for (var i = 0; i < els.length; i++) {\n          var el = els[i];\n          var options = JSON.parse(els[i].getAttribute('data-options'));\n          var apexChart = new ApexCharts(el, options);\n          apexChart.render();\n        }\n      }\n      /**\n       * This static method allows users to call chart methods without necessarily from the\n       * instance of the chart in case user has assigned chartID to the targeted chart.\n       * The chartID is used for mapping the instance stored in Apex._chartInstances global variable\n       *\n       * This is helpful in cases when you don't have reference of the chart instance\n       * easily and need to call the method from anywhere.\n       * For eg, in React/Vue applications when you have many parent/child components,\n       * and need easy reference to other charts for performing dynamic operations\n       *\n       * @param {string} chartID - The unique identifier which will be used to call methods\n       * on that chart instance\n       * @param {function} fn - The method name to call\n       * @param {object} opts - The parameters which are accepted in the original method will be passed here in the same order.\n       */\n\n    }, {\n      key: \"exec\",\n      value: function exec(chartID, fn) {\n        var chart = this.getChartByID(chartID);\n        if (!chart) return; // turn on the global exec flag to indicate this method was called\n\n        chart.w.globals.isExecCalled = true;\n        var ret = null;\n\n        if (chart.publicMethods.indexOf(fn) !== -1) {\n          for (var _len = arguments.length, opts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n            opts[_key - 2] = arguments[_key];\n          }\n\n          ret = chart[fn].apply(chart, opts);\n        }\n\n        return ret;\n      }\n    }, {\n      key: \"merge\",\n      value: function merge(target, source) {\n        return Utils$1.extend(target, source);\n      }\n    }]);\n\n    return ApexCharts;\n  }();\n\n  return ApexCharts$1;\n\n}));\n"
  },
  {
    "path": "public/assets/apexcharts/locales/ar.json",
    "content": "{\n\"name\": \"ar\",\n\"options\": {\n\"months\": [\n\"يناير\",\n\"فبراير\",\n\"مارس\",\n\"أبريل\",\n\"مايو\",\n\"يونيو\",\n\"يوليو\",\n\"أغسطس\",\n\"سبتمبر\",\n\"أكتوبر\",\n\"نوفمبر\",\n\"ديسمبر\"\n],\n\"shortMonths\": [\n\"يناير\",\n\"فبراير\",\n\"مارس\",\n\"أبريل\",\n\"مايو\",\n\"يونيو\",\n\"يوليو\",\n\"أغسطس\",\n\"سبتمبر\",\n\"أكتوبر\",\n\"نوفمبر\",\n\"ديسمبر\"\n],\n\"days\": [\n\"الأحد\",\n\"الإثنين\",\n\"الثلاثاء\",\n\"الأربعاء\",\n\"الخميس\",\n\"الجمعة\",\n\"السبت\"\n],\n\"shortDays\": [\n\"أحد\",\n\"إثنين\",\n\"ثلاثاء\",\n\"أربعاء\",\n\"خميس\",\n\"جمعة\",\n\"سبت\"\n],\n\"toolbar\": {\n\"exportToSVG\": \"تحميل بصيغة SVG\",\n\"exportToPNG\": \"تحميل بصيغة PNG\",\n\"exportToCSV\": \"تحميل بصيغة CSV\",\n\"menu\": \"القائمة\",\n\"selection\": \"تحديد\",\n\"selectionZoom\": \"تكبير التحديد\",\n\"zoomIn\": \"تكبير\",\n\"zoomOut\": \"تصغير\",\n\"pan\": \"تحريك\",\n\"reset\": \"إعادة التعيين\"\n}\n}\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/ca.json",
    "content": "{\n  \"name\": \"ca\",\n  \"options\": {\n    \"months\": [\n      \"Gener\",\n      \"Febrer\",\n      \"Març\",\n      \"Abril\",\n      \"Maig\",\n      \"Juny\",\n      \"Juliol\",\n      \"Agost\",\n      \"Setembre\",\n      \"Octubre\",\n      \"Novembre\",\n      \"Desembre\"\n    ],\n    \"shortMonths\": [\n      \"Gen.\",\n      \"Febr.\",\n      \"Març\",\n      \"Abr.\",\n      \"Maig\",\n      \"Juny\",\n      \"Jul.\",\n      \"Ag.\",\n      \"Set.\",\n      \"Oct.\",\n      \"Nov.\",\n      \"Des.\"\n    ],\n    \"days\": [\n      \"Diumenge\",\n      \"Dilluns\",\n      \"Dimarts\",\n      \"Dimecres\",\n      \"Dijous\",\n      \"Divendres\",\n      \"Dissabte\"\n    ],\n    \"shortDays\": [\"Dg\", \"Dl\", \"Dt\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Descarregar SVG\",\n      \"exportToPNG\": \"Descarregar PNG\",\n      \"exportToCSV\": \"Descarregar CSV\",\n      \"menu\": \"Menú\",\n      \"selection\": \"Seleccionar\",\n      \"selectionZoom\": \"Seleccionar Zoom\",\n      \"zoomIn\": \"Augmentar\",\n      \"zoomOut\": \"Disminuir\",\n      \"pan\": \"Navegació\",\n      \"reset\": \"Reiniciar Zoom\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/cs.json",
    "content": "{\n  \"name\": \"cs\",\n  \"options\": {\n    \"months\": [\n      \"Leden\",\n      \"Únor\",\n      \"Březen\",\n      \"Duben\",\n      \"Květen\",\n      \"Červen\",\n      \"Červenec\",\n      \"Srpen\",\n      \"Září\",\n      \"Říjen\",\n      \"Listopad\",\n      \"Prosinec\"\n    ],\n    \"shortMonths\": [\n      \"Led\",\n      \"Úno\",\n      \"Bře\",\n      \"Dub\",\n      \"Kvě\",\n      \"Čvn\",\n      \"Čvc\",\n      \"Srp\",\n      \"Zář\",\n      \"Říj\",\n      \"Lis\",\n      \"Pro\"\n    ],\n    \"days\": [\n      \"Neděle\",\n      \"Pondělí\",\n      \"Úterý\",\n      \"Středa\",\n      \"Čtvrtek\",\n      \"Pátek\",\n      \"Sobota\"\n    ],\n    \"shortDays\": [\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Stáhnout SVG\",\n      \"exportToPNG\": \"Stáhnout PNG\",\n      \"exportToCSV\": \"Stáhnout CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Vybrat\",\n      \"selectionZoom\": \"Zoom: Vybrat\",\n      \"zoomIn\": \"Zoom: Přiblížit\",\n      \"zoomOut\": \"Zoom: Oddálit\",\n      \"pan\": \"Přesouvat\",\n      \"reset\": \"Resetovat\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/da.json",
    "content": "{\n  \"name\": \"da\",\n  \"options\": {\n    \"months\": [\n      \"januar\",\n      \"februar\",\n      \"marts\",\n      \"april\",\n      \"maj\",\n      \"juni\",\n      \"juli\",\n      \"august\",\n      \"september\",\n      \"oktober\",\n      \"november\",\n      \"december\"\n    ],\n    \"shortMonths\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"apr\",\n      \"maj\",\n      \"jun\",\n      \"jul\",\n      \"aug\",\n      \"sep\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"days\": [\n      \"Søndag\",\n      \"Mandag\",\n      \"Tirsdag\",\n      \"Onsdag\",\n      \"Torsdag\",\n      \"Fredag\",\n      \"Lørdag\"\n    ],\n    \"shortDays\": [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Download SVG\",\n      \"exportToPNG\": \"Download PNG\",\n      \"exportToCSV\": \"Download CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Valg\",\n      \"selectionZoom\": \"Zoom til valg\",\n      \"zoomIn\": \"Zoom ind\",\n      \"zoomOut\": \"Zoom ud\",\n      \"pan\": \"Panorér\",\n      \"reset\": \"Nulstil zoom\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/de.json",
    "content": "{\n  \"name\": \"de\",\n  \"options\": {\n    \"months\": [\n      \"Januar\",\n      \"Februar\",\n      \"März\",\n      \"April\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"August\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Dezember\"\n    ],\n    \"shortMonths\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mär\",\n      \"Apr\",\n      \"Mai\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dez\"\n    ],\n    \"days\": [\n      \"Sonntag\",\n      \"Montag\",\n      \"Dienstag\",\n      \"Mittwoch\",\n      \"Donnerstag\",\n      \"Freitag\",\n      \"Samstag\"\n    ],\n    \"shortDays\": [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"SVG speichern\",\n      \"exportToPNG\": \"PNG speichern\",\n      \"exportToCSV\": \"CSV speichern\",\n      \"menu\": \"Menü\",\n      \"selection\": \"Auswahl\",\n      \"selectionZoom\": \"Auswahl vergrößern\",\n      \"zoomIn\": \"Vergrößern\",\n      \"zoomOut\": \"Verkleinern\",\n      \"pan\": \"Verschieben\",\n      \"reset\": \"Zoom zurücksetzen\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/el.json",
    "content": "{\n  \"name\": \"el\",\n  \"options\": {\n    \"months\": [\n      \"Ιανουάριος\",\n      \"Φεβρουάριος\",\n      \"Μάρτιος\",\n      \"Απρίλιος\",\n      \"Μάιος\",\n      \"Ιούνιος\",\n      \"Ιούλιος\",\n      \"Αύγουστος\",\n      \"Σεπτέμβριος\",\n      \"Οκτώβριος\",\n      \"Νοέμβριος\",\n      \"Δεκέμβριος\"\n    ],\n    \"shortMonths\": [\n      \"Ιαν\",\n      \"Φευ\",\n      \"Μαρ\",\n      \"Απρ\",\n      \"Μάι\",\n      \"Ιουν\",\n      \"Ιουλ\",\n      \"Αυγ\",\n      \"Σεπ\",\n      \"Οκτ\",\n      \"Νοε\",\n      \"Δεκ\"\n    ],\n    \"days\": [\n      \"Κυριακή\",\n      \"Δευτέρα\",\n      \"Τρίτη\",\n      \"Τετάρτη\",\n      \"Πέμπτη\",\n      \"Παρασκευή\",\n      \"Σάββατο\"\n    ],\n    \"shortDays\": [\"Κυρ\", \"Δευ\", \"Τρι\", \"Τετ\", \"Πεμ\", \"Παρ\", \"Σαβ\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Λήψη SVG\",\n      \"exportToPNG\": \"Λήψη PNG\",\n      \"exportToCSV\": \"Λήψη CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Επιλογή\",\n      \"selectionZoom\": \"Μεγένθυση βάση επιλογής\",\n      \"zoomIn\": \"Μεγένθυνση\",\n      \"zoomOut\": \"Σμίκρυνση\",\n      \"pan\": \"Μετατόπιση\",\n      \"reset\": \"Επαναφορά μεγένθυνσης\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/en.json",
    "content": "{\n  \"name\": \"en\",\n  \"options\": {\n    \"months\": [\n      \"January\",\n      \"February\",\n      \"March\",\n      \"April\",\n      \"May\",\n      \"June\",\n      \"July\",\n      \"August\",\n      \"September\",\n      \"October\",\n      \"November\",\n      \"December\"\n    ],\n    \"shortMonths\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"days\": [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\"\n    ],\n    \"shortDays\": [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Download SVG\",\n      \"exportToPNG\": \"Download PNG\",\n      \"exportToCSV\": \"Download CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Selection\",\n      \"selectionZoom\": \"Selection Zoom\",\n      \"zoomIn\": \"Zoom In\",\n      \"zoomOut\": \"Zoom Out\",\n      \"pan\": \"Panning\",\n      \"reset\": \"Reset Zoom\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/es.json",
    "content": "{\n  \"name\": \"es\",\n  \"options\": {\n    \"months\": [\n      \"Enero\",\n      \"Febrero\",\n      \"Marzo\",\n      \"Abril\",\n      \"Mayo\",\n      \"Junio\",\n      \"Julio\",\n      \"Agosto\",\n      \"Septiembre\",\n      \"Octubre\",\n      \"Noviembre\",\n      \"Diciembre\"\n    ],\n    \"shortMonths\": [\n      \"Ene\",\n      \"Feb\",\n      \"Mar\",\n      \"Abr\",\n      \"May\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Sep\",\n      \"Oct\",\n      \"Nov\",\n      \"Dic\"\n    ],\n    \"days\": [\n      \"Domingo\",\n      \"Lunes\",\n      \"Martes\",\n      \"Miércoles\",\n      \"Jueves\",\n      \"Viernes\",\n      \"Sábado\"\n    ],\n    \"shortDays\": [\"Dom\", \"Lun\", \"Mar\", \"Mie\", \"Jue\", \"Vie\", \"Sab\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Descargar SVG\",\n      \"exportToPNG\": \"Descargar PNG\",\n      \"exportToCSV\": \"Descargar CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Seleccionar\",\n      \"selectionZoom\": \"Seleccionar Zoom\",\n      \"zoomIn\": \"Aumentar\",\n      \"zoomOut\": \"Disminuir\",\n      \"pan\": \"Navegación\",\n      \"reset\": \"Reiniciar Zoom\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/et.json",
    "content": "{\n  \"name\": \"et\",\n  \"options\": {\n    \"months\": [\n      \"jaanuar\",\n      \"veebruar\",\n      \"märts\",\n      \"aprill\",\n      \"mai\",\n      \"juuni\",\n      \"juuli\",\n      \"august\",\n      \"september\",\n      \"oktoober\",\n      \"november\",\n      \"detsember\"\n    ],\n    \"shortMonths\": [\n      \"jaan\",\n      \"veebr\",\n      \"märts\",\n      \"apr\",\n      \"mai\",\n      \"juuni\",\n      \"juuli\",\n      \"aug\",\n      \"sept\",\n      \"okt\",\n      \"nov\",\n      \"dets\"\n    ],\n    \"days\": [\n      \"pühapäev\",\n      \"esmaspäev\",\n      \"teisipäev\",\n      \"kolmapäev\",\n      \"neljapäev\",\n      \"reede\",\n      \"laupäev\"\n    ],\n    \"shortDays\": [\n      \"P\",\n      \"E\",\n      \"T\",\n      \"K\",\n      \"N\",\n      \"R\",\n      \"L\"\n    ],\n    \"toolbar\": {\n      \"exportToSVG\": \"Lae alla SVG\",\n      \"exportToPNG\": \"Lae alla PNG\",\n      \"exportToCSV\": \"Lae alla CSV\",\n      \"menu\": \"Menüü\",\n      \"selection\": \"Valik\",\n      \"selectionZoom\": \"Valiku suum\",\n      \"zoomIn\": \"Suurenda\",\n      \"zoomOut\": \"Vähenda\",\n      \"pan\": \"Panoraamimine\",\n      \"reset\": \"Lähtesta suum\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/fa.json",
    "content": "{\n  \"name\": \"fa\",\n  \"options\": {\n    \"months\": [\n      \"فروردین\",\n      \"اردیبهشت\",\n      \"خرداد\",\n      \"تیر\",\n      \"مرداد\",\n      \"شهریور\",\n      \"مهر\",\n      \"آبان\",\n      \"آذر\",\n      \"دی\",\n      \"بهمن\",\n      \"اسفند\"\n    ],\n    \"shortMonths\": [\n      \"فرو\",\n      \"ارد\",\n      \"خرد\",\n      \"تیر\",\n      \"مرد\",\n      \"شهر\",\n      \"مهر\",\n      \"آبا\",\n      \"آذر\",\n      \"دی\",\n      \"بهمـ\",\n      \"اسفـ\"\n    ],\n    \"days\": [\n      \"یکشنبه\",\n      \"دوشنبه\",\n      \"سه شنبه\",\n      \"چهارشنبه\",\n      \"پنجشنبه\",\n      \"جمعه\",\n      \"شنبه\"\n    ],\n    \"shortDays\": [\"ی\", \"د\", \"س\", \"چ\", \"پ\", \"ج\", \"ش\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"دانلود SVG\",\n      \"exportToPNG\": \"دانلود PNG\",\n      \"exportToCSV\": \"دانلود CSV\",\n      \"menu\": \"منو\",\n      \"selection\": \"انتخاب\",\n      \"selectionZoom\": \"بزرگنمایی انتخابی\",\n      \"zoomIn\": \"بزرگنمایی\",\n      \"zoomOut\": \"کوچکنمایی\",\n      \"pan\": \"پیمایش\",\n      \"reset\": \"بازنشانی بزرگنمایی\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/fi.json",
    "content": "{\n  \"name\": \"fi\",\n  \"options\": {\n    \"months\": [\n      \"Tammikuu\",\n      \"Helmikuu\",\n      \"Maaliskuu\",\n      \"Huhtikuu\",\n      \"Toukokuu\",\n      \"Kesäkuu\",\n      \"Heinäkuu\",\n      \"Elokuu\",\n      \"Syyskuu\",\n      \"Lokakuu\",\n      \"Marraskuu\",\n      \"Joulukuu\"\n    ],\n    \"shortMonths\": [\n      \"Tammi\",\n      \"Helmi\",\n      \"Maalis\",\n      \"Huhti\",\n      \"Touko\",\n      \"Kesä\",\n      \"Heinä\",\n      \"Elo\",\n      \"Syys\",\n      \"Loka\",\n      \"Marras\",\n      \"Joulu\"\n    ],\n    \"days\": [\n      \"Sunnuntai\",\n      \"Maanantai\",\n      \"Tiistai\",\n      \"Keskiviikko\",\n      \"Torstai\",\n      \"Perjantai\",\n      \"Lauantai\"\n    ],\n    \"shortDays\": [\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Lataa SVG\",\n      \"exportToPNG\": \"Lataa PNG\",\n      \"exportToCSV\": \"Lataa CSV\",\n      \"menu\": \"Valikko\",\n      \"selection\": \"Valinta\",\n      \"selectionZoom\": \"Valinnan zoomaus\",\n      \"zoomIn\": \"Lähennä\",\n      \"zoomOut\": \"Loitonna\",\n      \"pan\": \"Panoroi\",\n      \"reset\": \"Nollaa zoomaus\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/fr.json",
    "content": "{\n  \"name\": \"fr\",\n  \"options\": {\n    \"months\": [\n      \"janvier\",\n      \"février\",\n      \"mars\",\n      \"avril\",\n      \"mai\",\n      \"juin\",\n      \"juillet\",\n      \"août\",\n      \"septembre\",\n      \"octobre\",\n      \"novembre\",\n      \"décembre\"\n    ],\n    \"shortMonths\": [\n      \"janv.\",\n      \"févr.\",\n      \"mars\",\n      \"avr.\",\n      \"mai\",\n      \"juin\",\n      \"juill.\",\n      \"août\",\n      \"sept.\",\n      \"oct.\",\n      \"nov.\",\n      \"déc.\"\n    ],\n    \"days\": [\n      \"dimanche\",\n      \"lundi\",\n      \"mardi\",\n      \"mercredi\",\n      \"jeudi\",\n      \"vendredi\",\n      \"samedi\"\n    ],\n    \"shortDays\": [\"dim.\", \"lun.\", \"mar.\", \"mer.\", \"jeu.\", \"ven.\", \"sam.\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Télécharger au format SVG\",\n      \"exportToPNG\": \"Télécharger au format PNG\",\n      \"exportToCSV\": \"Télécharger au format CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Sélection\",\n      \"selectionZoom\": \"Sélection et zoom\",\n      \"zoomIn\": \"Zoomer\",\n      \"zoomOut\": \"Dézoomer\",\n      \"pan\": \"Navigation\",\n      \"reset\": \"Réinitialiser le zoom\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/he.json",
    "content": "{\n  \"name\": \"he\",\n  \"options\": {\n    \"months\": [\n      \"ינואר\",\n      \"פברואר\",\n      \"מרץ\",\n      \"אפריל\",\n      \"מאי\",\n      \"יוני\",\n      \"יולי\",\n      \"אוגוסט\",\n      \"ספטמבר\",\n      \"אוקטובר\",\n      \"נובמבר\",\n      \"דצמבר\"\n    ],\n    \"shortMonths\": [\n      \"ינו׳\",\n      \"פבר׳\",\n      \"מרץ\",\n      \"אפר׳\",\n      \"מאי\",\n      \"יוני\",\n      \"יולי\",\n      \"אוג׳\",\n      \"ספט׳\",\n      \"אוק׳\",\n      \"נוב׳\",\n      \"דצמ׳\"\n    ],\n    \"days\": [\n      \"ראשון\",\n      \"שני\",\n      \"שלישי\",\n      \"רביעי\",\n      \"חמישי\",\n      \"שישי\",\n      \"שבת\"\n    ],\n    \"shortDays\": [\"א׳\", \"ב׳\", \"ג׳\", \"ד׳\", \"ה׳\", \"ו׳\", \"ש׳\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"הורד SVG\",\n      \"exportToPNG\": \"הורד PNG\",\n      \"exportToCSV\": \"הורד CSV\",\n      \"menu\": \"תפריט\",\n      \"selection\": \"בחירה\",\n      \"selectionZoom\": \"זום בחירה\",\n      \"zoomIn\": \"הגדלה\",\n      \"zoomOut\": \"הקטנה\",\n      \"pan\": \"הזזה\",\n      \"reset\": \"איפוס תצוגה\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/hi.json",
    "content": "{\n  \"name\": \"hi\",\n  \"options\": {\n    \"months\": [\n      \"जनवरी\",\n      \"फ़रवरी\",\n      \"मार्च\",\n      \"अप्रैल\",\n      \"मई\",\n      \"जून\",\n      \"जुलाई\",\n      \"अगस्त\",\n      \"सितंबर\",\n      \"अक्टूबर\",\n      \"नवंबर\",\n      \"दिसंबर\"\n    ],\n    \"shortMonths\": [\n      \"जनवरी\",\n      \"फ़रवरी\",\n      \"मार्च\",\n      \"अप्रैल\",\n      \"मई\",\n      \"जून\",\n      \"जुलाई\",\n      \"अगस्त\",\n      \"सितंबर\",\n      \"अक्टूबर\",\n      \"नवंबर\",\n      \"दिसंबर\"\n    ],\n    \"days\": [\n      \"रविवार\",\n      \"सोमवार\",\n      \"मंगलवार\",\n      \"बुधवार\",\n      \"गुरुवार\",\n      \"शुक्रवार\",\n      \"शनिवार\"\n    ],\n    \"shortDays\": [\"रवि\", \"सोम\", \"मंगल\", \"बुध\", \"गुरु\", \"शुक्र\", \"शनि\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"निर्यात SVG\",\n      \"exportToPNG\": \"निर्यात PNG\",\n      \"exportToCSV\": \"निर्यात CSV\",\n      \"menu\": \"सूची\",\n      \"selection\": \"चयन\",\n      \"selectionZoom\": \"ज़ूम करना\",\n      \"zoomIn\": \"ज़ूम इन\",\n      \"zoomOut\": \"ज़ूम आउट\",\n      \"pan\": \"पैनिंग\",\n      \"reset\": \"फिर से कायम करना\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/hr.json",
    "content": "{\n  \"name\": \"hr\",\n  \"options\": {\n    \"months\": [\n      \"Siječanj\",\n      \"Veljača\",\n      \"Ožujak\",\n      \"Travanj\",\n      \"Svibanj\",\n      \"Lipanj\",\n      \"Srpanj\",\n      \"Kolovoz\",\n      \"Rujan\",\n      \"Listopad\",\n      \"Studeni\",\n      \"Prosinac\"\n    ],\n    \"shortMonths\": [\n      \"Sij\",\n      \"Velj\",\n      \"Ožu\",\n      \"Tra\",\n      \"Svi\",\n      \"Lip\",\n      \"Srp\",\n      \"Kol\",\n      \"Ruj\",\n      \"Lis\",\n      \"Stu\",\n      \"Pro\"\n    ],\n    \"days\": [\n      \"Nedjelja\",\n      \"Ponedjeljak\",\n      \"Utorak\",\n      \"Srijeda\",\n      \"Četvrtak\",\n      \"Petak\",\n      \"Subota\"\n    ],\n    \"shortDays\": [\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Preuzmi SVG\",\n      \"exportToPNG\": \"Preuzmi PNG\",\n      \"exportToCSV\": \"Preuzmi CSV\",\n      \"menu\": \"Izbornik\",\n      \"selection\": \"Odabir\",\n      \"selectionZoom\": \"Odabirno povećanje\",\n      \"zoomIn\": \"Uvećajte prikaz\",\n      \"zoomOut\": \"Umanjite prikaz\",\n      \"pan\": \"Pomicanje\",\n      \"reset\": \"Povratak na zadani prikaz\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/hu.json",
    "content": "{\n  \"name\": \"hu\",\n  \"options\": {\n    \"months\": [\n      \"január\",\n      \"február\",\n      \"március\",\n      \"április\",\n      \"május\",\n      \"június\",\n      \"július\",\n      \"augusztus\",\n      \"szeptember\",\n      \"október\",\n      \"november\",\n      \"december\"\n    ],\n    \"shortMonths\": [\n      \"jan\",\n      \"feb\",\n      \"mar\",\n      \"ápr\",\n      \"máj\",\n      \"jún\",\n      \"júl\",\n      \"aug\",\n      \"szept\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"days\": [\n      \"hétfő\",\n      \"kedd\",\n      \"szerda\",\n      \"csütörtök\",\n      \"péntek\",\n      \"szombat\",\n      \"vasárnap\"\n    ],\n    \"shortDays\": [\n      \"H\",\n      \"K\",\n      \"Sze\",\n      \"Cs\",\n      \"P\",\n      \"Szo\",\n      \"V\"\n    ],\n    \"toolbar\": {\n      \"exportToSVG\": \"Exportálás SVG-be\",\n      \"exportToPNG\": \"Exportálás PNG-be\",\n      \"exportToCSV\": \"Exportálás CSV-be\",\n      \"menu\": \"Fő ajánlat\",\n      \"download\": \"SVG letöltése\",\n      \"selection\": \"Kiválasztás\",\n      \"selectionZoom\": \"Nagyító kiválasztása\",\n      \"zoomIn\": \"Nagyítás\",\n      \"zoomOut\": \"Kicsinyítés\",\n      \"pan\": \"Képcsúsztatás\",\n      \"reset\": \"Nagyító visszaállítása\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/hy.json",
    "content": "{\n  \"name\": \"hy\",\n  \"options\": {\n    \"months\": [\n      \"Հունվար\",\n      \"Փետրվար\",\n      \"Մարտ\",\n      \"Ապրիլ\",\n      \"Մայիս\",\n      \"Հունիս\",\n      \"Հուլիս\",\n      \"Օգոստոս\",\n      \"Սեպտեմբեր\",\n      \"Հոկտեմբեր\",\n      \"Նոյեմբեր\",\n      \"Դեկտեմբեր\"\n    ],\n    \"shortMonths\": [\n      \"Հնվ\",\n      \"Փտվ\",\n      \"Մրտ\",\n      \"Ապր\",\n      \"Մյս\",\n      \"Հնս\",\n      \"Հլիս\",\n      \"Օգս\",\n      \"Սեպ\",\n      \"Հոկ\",\n      \"Նոյ\",\n      \"Դեկ\"\n    ],\n    \"days\": [\n      \"Կիրակի\",\n      \"Երկուշաբթի\",\n      \"Երեքշաբթի\",\n      \"Չորեքշաբթի\",\n      \"Հինգշաբթի\",\n      \"Ուրբաթ\",\n      \"Շաբաթ\"\n    ],\n    \"shortDays\": [\"Կիր\", \"Երկ\", \"Երք\", \"Չրք\", \"Հնգ\", \"Ուրբ\", \"Շբթ\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Բեռնել SVG\",\n      \"exportToPNG\": \"Բեռնել PNG\",\n      \"exportToCSV\": \"Բեռնել CSV\",\n      \"menu\": \"Մենյու\",\n      \"selection\": \"Ընտրված\",\n      \"selectionZoom\": \"Ընտրված հատվածի խոշորացում\",\n      \"zoomIn\": \"Խոշորացնել\",\n      \"zoomOut\": \"Մանրացնել\",\n      \"pan\": \"Տեղափոխում\",\n      \"reset\": \"Բերել սկզբնական վիճակի\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/id.json",
    "content": "{\n  \"name\": \"id\",\n  \"options\": {\n    \"months\": [\n      \"Januari\",\n      \"Februari\",\n      \"Maret\",\n      \"April\",\n      \"Mei\",\n      \"Juni\",\n      \"Juli\",\n      \"Agustus\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Desember\"\n    ],\n    \"shortMonths\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Agu\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"days\": [\"Minggu\", \"Senin\", \"Selasa\", \"Rabu\", \"kamis\", \"Jumat\", \"Sabtu\"],\n    \"shortDays\": [\"Min\", \"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Unduh SVG\",\n      \"exportToPNG\": \"Unduh PNG\",\n      \"exportToCSV\": \"Unduh CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Pilihan\",\n      \"selectionZoom\": \"Perbesar Pilihan\",\n      \"zoomIn\": \"Perbesar\",\n      \"zoomOut\": \"Perkecil\",\n      \"pan\": \"Geser\",\n      \"reset\": \"Atur Ulang Zoom\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/it.json",
    "content": "{\n  \"name\": \"it\",\n  \"options\": {\n    \"months\": [\n      \"Gennaio\",\n      \"Febbraio\",\n      \"Marzo\",\n      \"Aprile\",\n      \"Maggio\",\n      \"Giugno\",\n      \"Luglio\",\n      \"Agosto\",\n      \"Settembre\",\n      \"Ottobre\",\n      \"Novembre\",\n      \"Dicembre\"\n    ],\n    \"shortMonths\": [\n      \"Gen\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Mag\",\n      \"Giu\",\n      \"Lug\",\n      \"Ago\",\n      \"Set\",\n      \"Ott\",\n      \"Nov\",\n      \"Dic\"\n    ],\n    \"days\": [\n      \"Domenica\",\n      \"Lunedì\",\n      \"Martedì\",\n      \"Mercoledì\",\n      \"Giovedì\",\n      \"Venerdì\",\n      \"Sabato\"\n    ],\n    \"shortDays\": [\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Scarica SVG\",\n      \"exportToPNG\": \"Scarica PNG\",\n      \"exportToCSV\": \"Scarica CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Selezione\",\n      \"selectionZoom\": \"Seleziona Zoom\",\n      \"zoomIn\": \"Zoom In\",\n      \"zoomOut\": \"Zoom Out\",\n      \"pan\": \"Sposta\",\n      \"reset\": \"Reimposta Zoom\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/ja.json",
    "content": "{\n  \"name\": \"ja\",\n  \"options\": {\n    \"months\": [\n      \"1月\",\n      \"2月\",\n      \"3月\",\n      \"4月\",\n      \"5月\",\n      \"6月\",\n      \"7月\",\n      \"8月\",\n      \"9月\",\n      \"10月\",\n      \"11月\",\n      \"12月\"\n    ],\n    \"shortMonths\": [\n      \"1月\",\n      \"2月\",\n      \"3月\",\n      \"4月\",\n      \"5月\",\n      \"6月\",\n      \"7月\",\n      \"8月\",\n      \"9月\",\n      \"10月\",\n      \"11月\",\n      \"12月\"\n    ],\n    \"days\": [\n      \"日曜日\",\n      \"月曜日\",\n      \"火曜日\",\n      \"水曜日\",\n      \"木曜日\",\n      \"金曜日\",\n      \"土曜日\"\n    ],\n    \"shortDays\": [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"SVGダウンロード\",\n      \"exportToPNG\": \"PNGダウンロード\",\n      \"exportToCSV\": \"CSVダウンロード\",\n      \"menu\": \"メニュー\",\n      \"selection\": \"選択\",\n      \"selectionZoom\": \"選択ズーム\",\n      \"zoomIn\": \"拡大\",\n      \"zoomOut\": \"縮小\",\n      \"pan\": \"パン\",\n      \"reset\": \"ズームリセット\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/ka.json",
    "content": "{\n  \"name\": \"ka\",\n  \"options\": {\n    \"months\": [\n      \"იანვარი\",\n      \"თებერვალი\",\n      \"მარტი\",\n      \"აპრილი\",\n      \"მაისი\",\n      \"ივნისი\",\n      \"ივლისი\",\n      \"აგვისტო\",\n      \"სექტემბერი\",\n      \"ოქტომბერი\",\n      \"ნოემბერი\",\n      \"დეკემბერი\"\n    ],\n    \"shortMonths\": [\n      \"იან\",\n      \"თებ\",\n      \"მარ\",\n      \"აპრ\",\n      \"მაი\",\n      \"ივნ\",\n      \"ივლ\",\n      \"აგვ\",\n      \"სექ\",\n      \"ოქტ\",\n      \"ნოე\",\n      \"დეკ\"\n    ],\n    \"days\": [\n      \"კვირა\",\n      \"ორშაბათი\",\n      \"სამშაბათი\",\n      \"ოთხშაბათი\",\n      \"ხუთშაბათი\",\n      \"პარასკევი\",\n      \"შაბათი\"\n    ],\n    \"shortDays\": [\"კვი\", \"ორშ\", \"სამ\", \"ოთხ\", \"ხუთ\", \"პარ\", \"შაბ\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"გადმოქაჩე SVG\",\n      \"exportToPNG\": \"გადმოქაჩე PNG\",\n      \"exportToCSV\": \"გადმოქაჩე CSV\",\n      \"menu\": \"მენიუ\",\n      \"selection\": \"არჩევა\",\n      \"selectionZoom\": \"არჩეულის გადიდება\",\n      \"zoomIn\": \"გადიდება\",\n      \"zoomOut\": \"დაპატარაება\",\n      \"pan\": \"გადაჩოჩება\",\n      \"reset\": \"გადიდების გაუქმება\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/ko.json",
    "content": "{\n  \"name\": \"ko\",\n  \"options\": {\n    \"months\": [\n      \"1월\",\n      \"2월\",\n      \"3월\",\n      \"4월\",\n      \"5월\",\n      \"6월\",\n      \"7월\",\n      \"8월\",\n      \"9월\",\n      \"10월\",\n      \"11월\",\n      \"12월\"\n    ],\n    \"shortMonths\": [\n      \"1월\",\n      \"2월\",\n      \"3월\",\n      \"4월\",\n      \"5월\",\n      \"6월\",\n      \"7월\",\n      \"8월\",\n      \"9월\",\n      \"10월\",\n      \"11월\",\n      \"12월\"\n    ],\n    \"days\": [\n      \"일요일\",\n      \"월요일\",\n      \"화요일\",\n      \"수요일\",\n      \"목요일\",\n      \"금요일\",\n      \"토요일\"\n    ],\n    \"shortDays\": [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"SVG 다운로드\",\n      \"exportToPNG\": \"PNG 다운로드\",\n      \"exportToCSV\": \"CSV 다운로드\",\n      \"menu\": \"메뉴\",\n      \"selection\": \"선택\",\n      \"selectionZoom\": \"선택영역 확대\",\n      \"zoomIn\": \"확대\",\n      \"zoomOut\": \"축소\",\n      \"pan\": \"패닝\",\n      \"reset\": \"원래대로\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/lt.json",
    "content": "{\n  \"name\": \"lt\",\n  \"options\": {\n    \"months\": [\n      \"Sausis\",\n      \"Vasaris\",\n      \"Kovas\",\n      \"Balandis\",\n      \"Gegužė\",\n      \"Birželis\",\n      \"Liepa\",\n      \"Rugpjūtis\",\n      \"Rugsėjis\",\n      \"Spalis\",\n      \"Lapkritis\",\n      \"Gruodis\"\n    ],\n    \"shortMonths\": [\n      \"Sau\",\n      \"Vas\",\n      \"Kov\",\n      \"Bal\",\n      \"Geg\",\n      \"Bir\",\n      \"Lie\",\n      \"Rgp\",\n      \"Rgs\",\n      \"Spl\",\n      \"Lap\",\n      \"Grd\"\n    ],\n    \"days\": [\n      \"Sekmadienis\",\n      \"Pirmadienis\",\n      \"Antradienis\",\n      \"Trečiadienis\",\n      \"Ketvirtadienis\",\n      \"Penktadienis\",\n      \"Šeštadienis\"\n    ],\n    \"shortDays\": [\"Sk\", \"Per\", \"An\", \"Tr\", \"Kt\", \"Pn\", \"Št\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Atsisiųsti SVG\",\n      \"exportToPNG\": \"Atsisiųsti PNG\",\n      \"exportToCSV\": \"Atsisiųsti CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Pasirinkimas\",\n      \"selectionZoom\": \"Zoom: Pasirinkimas\",\n      \"zoomIn\": \"Zoom: Priartinti\",\n      \"zoomOut\": \"Zoom: Atitolinti\",\n      \"pan\": \"Perkėlimas\",\n      \"reset\": \"Atstatyti\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/lv.json",
    "content": "{\n  \"name\": \"lv\",\n  \"options\": {\n    \"months\": [\n      \"janvāris\",\n      \"februāris\",\n      \"marts\",\n      \"aprīlis\",\n      \"maijs\",\n      \"jūnijs\",\n      \"jūlijs\",\n      \"augusts\",\n      \"septembris\",\n      \"oktobris\",\n      \"novembris\",\n      \"decembris\"\n    ],\n    \"shortMonths\": [\n      \"janv\",\n      \"febr\",\n      \"marts\",\n      \"apr\",\n      \"maijs\",\n      \"jūn\",\n      \"jūl\",\n      \"aug\",\n      \"sept\",\n      \"okt\",\n      \"nov\",\n      \"dec\"\n    ],\n    \"days\": [\n      \"svētdiena\",\n      \"pirmdiena\",\n      \"otrdiena\",\n      \"trešdiena\",\n      \"ceturtdiena\",\n      \"piektdiena\",\n      \"sestdiena\"\n    ],\n    \"shortDays\": [\n      \"Sv\",\n      \"P\",\n      \"O\",\n      \"T\",\n      \"C\",\n      \"P\",\n      \"S\"\n    ],\n    \"toolbar\": {\n      \"exportToSVG\": \"Lejuplādēt SVG\",\n      \"exportToPNG\": \"Lejuplādēt PNG\",\n      \"exportToCSV\": \"Lejuplādēt CSV\",\n      \"menu\": \"Izvēlne\",\n      \"selection\": \"Atlase\",\n      \"selectionZoom\": \"Pietuvināt atlasi\",\n      \"zoomIn\": \"Pietuvināt\",\n      \"zoomOut\": \"Attālināt\",\n      \"pan\": \"Pārvietoties diagrammā\",\n      \"reset\": \"Atiestatīt pietuvinājumu\"\n    }\n  }\n}\n\n"
  },
  {
    "path": "public/assets/apexcharts/locales/nb.json",
    "content": "{\n  \"name\": \"nb\",\n  \"options\": {\n    \"months\": [\n      \"Januar\",\n      \"Februar\",\n      \"Mars\",\n      \"April\",\n      \"Mai\",\n      \"Juni\",\n      \"Juli\",\n      \"August\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"Desember\"\n    ],\n    \"shortMonths\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Mai\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Des\"\n    ],\n    \"days\": [\n      \"Søndag\",\n      \"Mandag\",\n      \"Tirsdag\",\n      \"Onsdag\",\n      \"Torsdag\",\n      \"Fredag\",\n      \"Lørdag\"\n    ],\n    \"shortDays\": [\"Sø\", \"Ma\", \"Ti\", \"On\", \"To\", \"Fr\", \"Lø\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Last ned SVG\",\n      \"exportToPNG\": \"Last ned PNG\",\n      \"exportToCSV\": \"Last ned CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Velg\",\n      \"selectionZoom\": \"Zoom: Velg\",\n      \"zoomIn\": \"Zoome inn\",\n      \"zoomOut\": \"Zoome ut\",\n      \"pan\": \"Skyving\",\n      \"reset\": \"Start på nytt\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/nl.json",
    "content": "{\n  \"name\": \"nl\",\n  \"options\": {\n    \"months\": [\n      \"Januari\",\n      \"Februari\",\n      \"Maart\",\n      \"April\",\n      \"Mei\",\n      \"Juni\",\n      \"Juli\",\n      \"Augustus\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"December\"\n    ],\n    \"shortMonths\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mrt\",\n      \"Apr\",\n      \"Mei\",\n      \"Jun\",\n      \"Jul\",\n      \"Aug\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"days\": [\n      \"Zondag\",\n      \"Maandag\",\n      \"Dinsdag\",\n      \"Woensdag\",\n      \"Donderdag\",\n      \"Vrijdag\",\n      \"Zaterdag\"\n    ],\n    \"shortDays\": [\"Zo\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Za\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Download SVG\",\n      \"exportToPNG\": \"Download PNG\",\n      \"exportToCSV\": \"Download CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Selectie\",\n      \"selectionZoom\": \"Zoom selectie\",\n      \"zoomIn\": \"Zoom in\",\n      \"zoomOut\": \"Zoom out\",\n      \"pan\": \"Verplaatsen\",\n      \"reset\": \"Standaardwaarden\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/pl.json",
    "content": "{\n  \"name\": \"pl\",\n  \"options\": {\n    \"months\": [\n      \"Styczeń\",\n      \"Luty\",\n      \"Marzec\",\n      \"Kwiecień\",\n      \"Maj\",\n      \"Czerwiec\",\n      \"Lipiec\",\n      \"Sierpień\",\n      \"Wrzesień\",\n      \"Październik\",\n      \"Listopad\",\n      \"Grudzień\"\n    ],\n    \"shortMonths\": [\n      \"Sty\",\n      \"Lut\",\n      \"Mar\",\n      \"Kwi\",\n      \"Maj\",\n      \"Cze\",\n      \"Lip\",\n      \"Sie\",\n      \"Wrz\",\n      \"Paź\",\n      \"Lis\",\n      \"Gru\"\n    ],\n    \"days\": [\n      \"Niedziela\",\n      \"Poniedziałek\",\n      \"Wtorek\",\n      \"Środa\",\n      \"Czwartek\",\n      \"Piątek\",\n      \"Sobota\"\n    ],\n    \"shortDays\": [\"Nd\", \"Pn\", \"Wt\", \"Śr\", \"Cz\", \"Pt\", \"Sb\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Pobierz SVG\",\n      \"exportToPNG\": \"Pobierz PNG\",\n      \"exportToCSV\": \"Pobierz CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Wybieranie\",\n      \"selectionZoom\": \"Zoom: Wybieranie\",\n      \"zoomIn\": \"Zoom: Przybliż\",\n      \"zoomOut\": \"Zoom: Oddal\",\n      \"pan\": \"Przesuwanie\",\n      \"reset\": \"Resetuj\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/pt-br.json",
    "content": "{\n  \"name\": \"pt-br\",\n  \"options\": {\n    \"months\": [\n      \"Janeiro\",\n      \"Fevereiro\",\n      \"Março\",\n      \"Abril\",\n      \"Maio\",\n      \"Junho\",\n      \"Julho\",\n      \"Agosto\",\n      \"Setembro\",\n      \"Outubro\",\n      \"Novembro\",\n      \"Dezembro\"\n    ],\n    \"shortMonths\": [\n      \"Jan\",\n      \"Fev\",\n      \"Mar\",\n      \"Abr\",\n      \"Mai\",\n      \"Jun\",\n      \"Jul\",\n      \"Ago\",\n      \"Set\",\n      \"Out\",\n      \"Nov\",\n      \"Dez\"\n    ],\n    \"days\": [\n      \"Domingo\",\n      \"Segunda\",\n      \"Terça\",\n      \"Quarta\",\n      \"Quinta\",\n      \"Sexta\",\n      \"Sábado\"\n    ],\n    \"shortDays\": [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Baixar SVG\",\n      \"exportToPNG\": \"Baixar PNG\",\n      \"exportToCSV\": \"Baixar CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Selecionar\",\n      \"selectionZoom\": \"Selecionar Zoom\",\n      \"zoomIn\": \"Aumentar\",\n      \"zoomOut\": \"Diminuir\",\n      \"pan\": \"Navegação\",\n      \"reset\": \"Reiniciar Zoom\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/pt.json",
    "content": "{\n  \"name\": \"pt\",\n  \"options\": {\n    \"months\": [\n      \"Janeiro\",\n      \"Fevereiro\",\n      \"Março\",\n      \"Abril\",\n      \"Maio\",\n      \"Junho\",\n      \"Julho\",\n      \"Agosto\",\n      \"Setembro\",\n      \"Outubro\",\n      \"Novembro\",\n      \"Dezembro\"\n    ],\n    \"shortMonths\": [\n      \"Jan\",\n      \"Fev\",\n      \"Mar\",\n      \"Abr\",\n      \"Mai\",\n      \"Jun\",\n      \"Jul\",\n      \"Ag\",\n      \"Set\",\n      \"Out\",\n      \"Nov\",\n      \"Dez\"\n    ],\n    \"days\": [\n      \"Domingo\",\n      \"Segunda-feira\",\n      \"Terça-feira\",\n      \"Quarta-feira\",\n      \"Quinta-feira\",\n      \"Sexta-feira\",\n      \"Sábado\"\n    ],\n    \"shortDays\": [\"Do\", \"Se\", \"Te\", \"Qa\", \"Qi\", \"Sx\", \"Sa\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Baixar SVG\",\n      \"exportToPNG\": \"Baixar PNG\",\n      \"exportToCSV\": \"Baixar CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Selecionar\",\n      \"selectionZoom\": \"Zoom: Selecionar\",\n      \"zoomIn\": \"Zoom: Aumentar\",\n      \"zoomOut\": \"Zoom: Diminuir\",\n      \"pan\": \"Deslocamento\",\n      \"reset\": \"Redefinir\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/rs.json",
    "content": "{\n  \"name\": \"rs\",\n  \"options\": {\n    \"months\": [\n      \"Januar\",\n      \"Februar\",\n      \"Mart\",\n      \"April\",\n      \"Maj\",\n      \"Jun\",\n      \"Jul\",\n      \"Avgust\",\n      \"Septembar\",\n      \"Oktobar\",\n      \"Novembar\",\n      \"Decembar\"\n    ],\n    \"shortMonths\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Maj\",\n      \"Jun\",\n      \"Jul\",\n      \"Avg\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"days\": [\n      \"Nedelja\",\n      \"Ponedeljak\",\n      \"Utorak\",\n      \"Sreda\",\n      \"Četvrtak\",\n      \"Petak\",\n      \"Subota\"\n    ],\n    \"shortDays\": [\"Ned\", \"Pon\", \"Uto\", \"Sre\", \"Čet\", \"Pet\", \"Sub\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Preuzmi SVG\",\n      \"exportToPNG\": \"Preuzmi PNG\",\n      \"exportToCSV\": \"Preuzmi CSV\",\n      \"menu\": \"Meni\",\n      \"selection\": \"Odabir\",\n      \"selectionZoom\": \"Odabirno povećanje\",\n      \"zoomIn\": \"Uvećajte prikaz\",\n      \"zoomOut\": \"Umanjite prikaz\",\n      \"pan\": \"Pomeranje\",\n      \"reset\": \"Resetuj prikaz\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/ru.json",
    "content": "{\n  \"name\": \"ru\",\n  \"options\": {\n    \"months\": [\n      \"Январь\",\n      \"Февраль\",\n      \"Март\",\n      \"Апрель\",\n      \"Май\",\n      \"Июнь\",\n      \"Июль\",\n      \"Август\",\n      \"Сентябрь\",\n      \"Октябрь\",\n      \"Ноябрь\",\n      \"Декабрь\"\n    ],\n    \"shortMonths\": [\n      \"Янв\",\n      \"Фев\",\n      \"Мар\",\n      \"Апр\",\n      \"Май\",\n      \"Июн\",\n      \"Июл\",\n      \"Авг\",\n      \"Сен\",\n      \"Окт\",\n      \"Ноя\",\n      \"Дек\"\n    ],\n    \"days\": [\n      \"Воскресенье\",\n      \"Понедельник\",\n      \"Вторник\",\n      \"Среда\",\n      \"Четверг\",\n      \"Пятница\",\n      \"Суббота\"\n    ],\n    \"shortDays\": [\"Вс\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Сохранить SVG\",\n      \"exportToPNG\": \"Сохранить PNG\",\n      \"exportToCSV\": \"Сохранить CSV\",\n      \"menu\": \"Меню\",\n      \"selection\": \"Выбор\",\n      \"selectionZoom\": \"Выбор с увеличением\",\n      \"zoomIn\": \"Увеличить\",\n      \"zoomOut\": \"Уменьшить\",\n      \"pan\": \"Перемещение\",\n      \"reset\": \"Сбросить увеличение\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/se.json",
    "content": "{\n  \"name\": \"se\",\n  \"options\": {\n    \"months\": [\n      \"Januari\",\n      \"Februari\",\n      \"Mars\",\n      \"April\",\n      \"Maj\",\n      \"Juni\",\n      \"Juli\",\n      \"Augusti\",\n      \"September\",\n      \"Oktober\",\n      \"November\",\n      \"December\"\n    ],\n    \"shortMonths\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Maj\",\n      \"Juni\",\n      \"Juli\",\n      \"Aug\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"days\": [\n      \"Söndag\",\n      \"Måndag\",\n      \"Tisdag\",\n      \"Onsdag\",\n      \"Torsdag\",\n      \"Fredag\",\n      \"Lördag\"\n    ],\n    \"shortDays\": [\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Ladda SVG\",\n      \"exportToPNG\": \"Ladda PNG\",\n      \"exportToCSV\": \"Ladda CSV\",\n      \"menu\": \"Meny\",\n      \"selection\": \"Selektion\",\n      \"selectionZoom\": \"Val av zoom\",\n      \"zoomIn\": \"Zooma in\",\n      \"zoomOut\": \"Zooma ut\",\n      \"pan\": \"Panorering\",\n      \"reset\": \"Återställ zoomning\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/sk.json",
    "content": "{\n  \"name\": \"sk\",\n  \"options\": {\n    \"months\": [\n      \"Január\",\n      \"Február\",\n      \"Marec\",\n      \"Apríl\",\n      \"Máj\",\n      \"Jún\",\n      \"Júl\",\n      \"August\",\n      \"September\",\n      \"Október\",\n      \"November\",\n      \"December\"\n    ],\n    \"shortMonths\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Máj\",\n      \"Jún\",\n      \"Júl\",\n      \"Aug\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"days\": [\n      \"Nedeľa\",\n      \"Pondelok\",\n      \"Utorok\",\n      \"Streda\",\n      \"Štvrtok\",\n      \"Piatok\",\n      \"Sobota\"\n    ],\n    \"shortDays\": [\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pi\", \"So\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Stiahnuť SVG\",\n      \"exportToPNG\": \"Stiahnuť PNG\",\n      \"exportToCSV\": \"Stiahnuť CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Vyberanie\",\n      \"selectionZoom\": \"Zoom: Vyberanie\",\n      \"zoomIn\": \"Zoom: Priblížiť\",\n      \"zoomOut\": \"Zoom: Vzdialiť\",\n      \"pan\": \"Presúvanie\",\n      \"reset\": \"Resetovať\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/sl.json",
    "content": "{\n  \"name\": \"sl\",\n  \"options\": {\n    \"months\": [\n      \"Januar\",\n      \"Februar\",\n      \"Marec\",\n      \"April\",\n      \"Maj\",\n      \"Junij\",\n      \"Julij\",\n      \"Avgust\",\n      \"Septemer\",\n      \"Oktober\",\n      \"November\",\n      \"December\"\n    ],\n    \"shortMonths\": [\n      \"Jan\",\n      \"Feb\",\n      \"Mar\",\n      \"Apr\",\n      \"Maj\",\n      \"Jun\",\n      \"Jul\",\n      \"Avg\",\n      \"Sep\",\n      \"Okt\",\n      \"Nov\",\n      \"Dec\"\n    ],\n    \"days\": [\n      \"Nedelja\",\n      \"Ponedeljek\",\n      \"Torek\",\n      \"Sreda\",\n      \"Četrtek\",\n      \"Petek\",\n      \"Sobota\"\n    ],\n    \"shortDays\": [\"Ne\", \"Po\", \"To\", \"Sr\", \"Če\", \"Pe\", \"So\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Prenesi SVG\",\n      \"exportToPNG\": \"Prenesi PNG\",\n      \"exportToCSV\": \"Prenesi CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Izbiranje\",\n      \"selectionZoom\": \"Zoom: Izbira\",\n      \"zoomIn\": \"Zoom: Približaj\",\n      \"zoomOut\": \"Zoom: Oddalji\",\n      \"pan\": \"Pomikanje\",\n      \"reset\": \"Resetiraj\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/sq.json",
    "content": "{\n  \"name\": \"sq\",\n  \"options\": {\n    \"months\": [\n      \"Janar\",\n      \"Shkurt\",\n      \"Mars\",\n      \"Prill\",\n      \"Maj\",\n      \"Qershor\",\n      \"Korrik\",\n      \"Gusht\",\n      \"Shtator\",\n      \"Tetor\",\n      \"Nëntor\",\n      \"Dhjetor\"\n    ],\n    \"shortMonths\": [\n      \"Jan\",\n      \"Shk\",\n      \"Mar\",\n      \"Pr\",\n      \"Maj\",\n      \"Qer\",\n      \"Korr\",\n      \"Gush\",\n      \"Sht\",\n      \"Tet\",\n      \"Nën\",\n      \"Dhj\"\n    ],\n    \"days\": [\n      \"e Dielë\",\n      \"e Hënë\",\n      \"e Martë\",\n      \"e Mërkurë\",\n      \"e Enjte\",\n      \"e Premte\",\n      \"e Shtunë\"\n    ],\n    \"shortDays\": [\"Die\", \"Hën\", \"Mar\", \"Mër\", \"Enj\", \"Pre\", \"Sht\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Shkarko SVG\",\n      \"exportToPNG\": \"Shkarko PNG\",\n      \"exportToCSV\": \"Shkarko CSV\",\n      \"menu\": \"Menu\",\n      \"selection\": \"Seleksiono\",\n      \"selectionZoom\": \"Seleksiono Zmadhim\",\n      \"zoomIn\": \"Zmadho\",\n      \"zoomOut\": \"Zvogëlo\",\n      \"pan\": \"Spostoje\",\n      \"reset\": \"Rikthe dimensionin\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/th.json",
    "content": "{\n  \"name\": \"th\",\n  \"options\": {\n    \"months\": [\n      \"มกราคม\",\n      \"กุมภาพันธ์\",\n      \"มีนาคม\",\n      \"เมษายน\",\n      \"พฤษภาคม\",\n      \"มิถุนายน\",\n      \"กรกฎาคม\",\n      \"สิงหาคม\",\n      \"กันยายน\",\n      \"ตุลาคม\",\n      \"พฤศจิกายน\",\n      \"ธันวาคม\"\n    ],\n    \"shortMonths\": [\n      \"ม.ค.\",\n      \"ก.พ.\",\n      \"มี.ค.\",\n      \"เม.ย.\",\n      \"พ.ค.\",\n      \"มิ.ย.\",\n      \"ก.ค.\",\n      \"ส.ค.\",\n      \"ก.ย.\",\n      \"ต.ค.\",\n      \"พ.ย.\",\n      \"ธ.ค.\"\n    ],\n    \"days\": [\n      \"อาทิตย์\",\n      \"จันทร์\",\n      \"อังคาร\",\n      \"พุธ\",\n      \"พฤหัสบดี\",\n      \"ศุกร์\",\n      \"เสาร์\"\n    ],\n    \"shortDays\": [\"อา\", \"จ\", \"อ\", \"พ\", \"พฤ\", \"ศ\", \"ส\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"ดาวน์โหลด SVG\",\n      \"exportToPNG\": \"ดาวน์โหลด PNG\",\n      \"exportToCSV\": \"ดาวน์โหลด CSV\",\n      \"menu\": \"เมนู\",\n      \"selection\": \"เลือก\",\n      \"selectionZoom\": \"เลือกจุดที่จะซูม\",\n      \"zoomIn\": \"ซูมเข้า\",\n      \"zoomOut\": \"ซูมออก\",\n      \"pan\": \"ปรากฎว่า\",\n      \"reset\": \"รีเซ็ตการซูม\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/tr.json",
    "content": "{\n  \"name\": \"tr\",\n  \"options\": {\n    \"months\": [\n      \"Ocak\",\n      \"Şubat\",\n      \"Mart\",\n      \"Nisan\",\n      \"Mayıs\",\n      \"Haziran\",\n      \"Temmuz\",\n      \"Ağustos\",\n      \"Eylül\",\n      \"Ekim\",\n      \"Kasım\",\n      \"Aralık\"\n    ],\n    \"shortMonths\": [\n      \"Oca\",\n      \"Şub\",\n      \"Mar\",\n      \"Nis\",\n      \"May\",\n      \"Haz\",\n      \"Tem\",\n      \"Ağu\",\n      \"Eyl\",\n      \"Eki\",\n      \"Kas\",\n      \"Ara\"\n    ],\n    \"days\": [\n      \"Pazar\",\n      \"Pazartesi\",\n      \"Salı\",\n      \"Çarşamba\",\n      \"Perşembe\",\n      \"Cuma\",\n      \"Cumartesi\"\n    ],\n    \"shortDays\": [\"Paz\", \"Pzt\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cmt\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"SVG İndir\",\n      \"exportToPNG\": \"PNG İndir\",\n      \"exportToCSV\": \"CSV İndir\",\n      \"menu\": \"Menü\",\n      \"selection\": \"Seçim\",\n      \"selectionZoom\": \"Seçim Yakınlaştır\",\n      \"zoomIn\": \"Yakınlaştır\",\n      \"zoomOut\": \"Uzaklaştır\",\n      \"pan\": \"Kaydır\",\n      \"reset\": \"Yakınlaştırmayı Sıfırla\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/ua.json",
    "content": "{\n  \"name\": \"ua\",\n  \"options\": {\n    \"months\": [\n      \"Січень\",\n      \"Лютий\",\n      \"Березень\",\n      \"Квітень\",\n      \"Травень\",\n      \"Червень\",\n      \"Липень\",\n      \"Серпень\",\n      \"Вересень\",\n      \"Жовтень\",\n      \"Листопад\",\n      \"Грудень\"\n    ],\n    \"shortMonths\": [\n      \"Січ\",\n      \"Лют\",\n      \"Бер\",\n      \"Кві\",\n      \"Тра\",\n      \"Чер\",\n      \"Лип\",\n      \"Сер\",\n      \"Вер\",\n      \"Жов\",\n      \"Лис\",\n      \"Гру\"\n    ],\n    \"days\": [\n      \"Неділя\",\n      \"Понеділок\",\n      \"Вівторок\",\n      \"Середа\",\n      \"Четвер\",\n      \"П'ятниця\",\n      \"Субота\"\n    ],\n    \"shortDays\": [\"Нд\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"Зберегти SVG\",\n      \"exportToPNG\": \"Зберегти PNG\",\n      \"exportToCSV\": \"Зберегти CSV\",\n      \"menu\": \"Меню\",\n      \"selection\": \"Вибір\",\n      \"selectionZoom\": \"Вибір із збільшенням\",\n      \"zoomIn\": \"Збільшити\",\n      \"zoomOut\": \"Зменшити\",\n      \"pan\": \"Переміщення\",\n      \"reset\": \"Скинути збільшення\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/zh-cn.json",
    "content": "{\n  \"name\": \"zh-cn\",\n  \"options\": {\n    \"months\": [\n      \"一月\",\n      \"二月\",\n      \"三月\",\n      \"四月\",\n      \"五月\",\n      \"六月\",\n      \"七月\",\n      \"八月\",\n      \"九月\",\n      \"十月\",\n      \"十一月\",\n      \"十二月\"\n    ],\n    \"shortMonths\": [\n      \"一月\",\n      \"二月\",\n      \"三月\",\n      \"四月\",\n      \"五月\",\n      \"六月\",\n      \"七月\",\n      \"八月\",\n      \"九月\",\n      \"十月\",\n      \"十一月\",\n      \"十二月\"\n    ],\n    \"days\": [\n      \"星期天\",\n      \"星期一\",\n      \"星期二\",\n      \"星期三\",\n      \"星期四\",\n      \"星期五\",\n      \"星期六\"\n    ],\n    \"shortDays\": [\"周日\", \"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"下载 SVG\",\n      \"exportToPNG\": \"下载 PNG\",\n      \"exportToCSV\": \"下载 CSV\",\n      \"menu\": \"菜单\",\n      \"selection\": \"选择\",\n      \"selectionZoom\": \"选择缩放\",\n      \"zoomIn\": \"放大\",\n      \"zoomOut\": \"缩小\",\n      \"pan\": \"平移\",\n      \"reset\": \"重置缩放\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/apexcharts/locales/zh-tw.json",
    "content": "{\n  \"name\": \"zh-tw\",\n  \"options\": {\n    \"months\": [\n      \"一月\",\n      \"二月\",\n      \"三月\",\n      \"四月\",\n      \"五月\",\n      \"六月\",\n      \"七月\",\n      \"八月\",\n      \"九月\",\n      \"十月\",\n      \"十一月\",\n      \"十二月\"\n    ],\n    \"shortMonths\": [\n      \"一月\",\n      \"二月\",\n      \"三月\",\n      \"四月\",\n      \"五月\",\n      \"六月\",\n      \"七月\",\n      \"八月\",\n      \"九月\",\n      \"十月\",\n      \"十一月\",\n      \"十二月\"\n    ],\n    \"days\": [\n      \"星期日\",\n      \"星期一\",\n      \"星期二\",\n      \"星期三\",\n      \"星期四\",\n      \"星期五\",\n      \"星期六\"\n    ],\n    \"shortDays\": [\"週日\", \"週一\", \"週二\", \"週三\", \"週四\", \"週五\", \"週六\"],\n    \"toolbar\": {\n      \"exportToSVG\": \"下載 SVG\",\n      \"exportToPNG\": \"下載 PNG\",\n      \"exportToCSV\": \"下載 CSV\",\n      \"menu\": \"菜單\",\n      \"selection\": \"選擇\",\n      \"selectionZoom\": \"選擇縮放\",\n      \"zoomIn\": \"放大\",\n      \"zoomOut\": \"縮小\",\n      \"pan\": \"平移\",\n      \"reset\": \"重置縮放\"\n    }\n  }\n}\n"
  },
  {
    "path": "public/assets/bootstrap-5.3.2-dist/css/bootstrap-grid.css",
    "content": "/*!\n * Bootstrap Grid v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container-sm, .container {\n    max-width: 540px;\n  }\n}\n@media (min-width: 768px) {\n  .container-md, .container-sm, .container {\n    max-width: 720px;\n  }\n}\n@media (min-width: 992px) {\n  .container-lg, .container-md, .container-sm, .container {\n    max-width: 960px;\n  }\n}\n@media (min-width: 1200px) {\n  .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1140px;\n  }\n}\n@media (min-width: 1400px) {\n  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1320px;\n  }\n}\n:root {\n  --bs-breakpoint-xs: 0;\n  --bs-breakpoint-sm: 576px;\n  --bs-breakpoint-md: 768px;\n  --bs-breakpoint-lg: 992px;\n  --bs-breakpoint-xl: 1200px;\n  --bs-breakpoint-xxl: 1400px;\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: flex;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-0.5 * var(--bs-gutter-x));\n  margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n  box-sizing: border-box;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.row-cols-4 > * {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-auto {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  flex: 0 0 auto;\n  width: 8.33333333%;\n}\n\n.col-2 {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-3 {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.col-5 {\n  flex: 0 0 auto;\n  width: 41.66666667%;\n}\n\n.col-6 {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  flex: 0 0 auto;\n  width: 58.33333333%;\n}\n\n.col-8 {\n  flex: 0 0 auto;\n  width: 66.66666667%;\n}\n\n.col-9 {\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  flex: 0 0 auto;\n  width: 83.33333333%;\n}\n\n.col-11 {\n  flex: 0 0 auto;\n  width: 91.66666667%;\n}\n\n.col-12 {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.33333333%;\n}\n\n.offset-2 {\n  margin-left: 16.66666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.33333333%;\n}\n\n.offset-5 {\n  margin-left: 41.66666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.33333333%;\n}\n\n.offset-8 {\n  margin-left: 66.66666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.33333333%;\n}\n\n.offset-11 {\n  margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-sm-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-sm-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-sm-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-sm-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-sm-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-sm-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-sm-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-sm-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-sm-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-sm-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 768px) {\n  .col-md {\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-md-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-md-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-md-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-md-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-md-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-md-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-md-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-md-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-md-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-md-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 992px) {\n  .col-lg {\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-lg-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-lg-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-lg-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-lg-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-lg-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-lg-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-lg-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-lg-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-lg-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-lg-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1200px) {\n  .col-xl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-xl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1400px) {\n  .col-xxl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-xxl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xxl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xxl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xxl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xxl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xxl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xxl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xxl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xxl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xxl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-inline-grid {\n  display: inline-grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.flex-fill {\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  flex-direction: row !important;\n}\n\n.flex-column {\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  align-content: center !important;\n}\n\n.align-content-between {\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  align-self: auto !important;\n}\n\n.align-self-start {\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  align-self: stretch !important;\n}\n\n.order-first {\n  order: -1 !important;\n}\n\n.order-0 {\n  order: 0 !important;\n}\n\n.order-1 {\n  order: 1 !important;\n}\n\n.order-2 {\n  order: 2 !important;\n}\n\n.order-3 {\n  order: 3 !important;\n}\n\n.order-4 {\n  order: 4 !important;\n}\n\n.order-5 {\n  order: 5 !important;\n}\n\n.order-last {\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-sm-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    order: 5 !important;\n  }\n  .order-sm-last {\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n}\n@media (min-width: 768px) {\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-md-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    order: -1 !important;\n  }\n  .order-md-0 {\n    order: 0 !important;\n  }\n  .order-md-1 {\n    order: 1 !important;\n  }\n  .order-md-2 {\n    order: 2 !important;\n  }\n  .order-md-3 {\n    order: 3 !important;\n  }\n  .order-md-4 {\n    order: 4 !important;\n  }\n  .order-md-5 {\n    order: 5 !important;\n  }\n  .order-md-last {\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n}\n@media (min-width: 992px) {\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-lg-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    order: 5 !important;\n  }\n  .order-lg-last {\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n}\n@media (min-width: 1200px) {\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    order: 5 !important;\n  }\n  .order-xl-last {\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n}\n@media (min-width: 1400px) {\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xxl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n}\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */"
  },
  {
    "path": "public/assets/bootstrap-5.3.2-dist/css/bootstrap-grid.rtl.css",
    "content": "/*!\n * Bootstrap Grid v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  width: 100%;\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  margin-left: auto;\n  margin-right: auto;\n}\n\n@media (min-width: 576px) {\n  .container-sm, .container {\n    max-width: 540px;\n  }\n}\n@media (min-width: 768px) {\n  .container-md, .container-sm, .container {\n    max-width: 720px;\n  }\n}\n@media (min-width: 992px) {\n  .container-lg, .container-md, .container-sm, .container {\n    max-width: 960px;\n  }\n}\n@media (min-width: 1200px) {\n  .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1140px;\n  }\n}\n@media (min-width: 1400px) {\n  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1320px;\n  }\n}\n:root {\n  --bs-breakpoint-xs: 0;\n  --bs-breakpoint-sm: 576px;\n  --bs-breakpoint-md: 768px;\n  --bs-breakpoint-lg: 992px;\n  --bs-breakpoint-xl: 1200px;\n  --bs-breakpoint-xxl: 1400px;\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: flex;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-left: calc(-0.5 * var(--bs-gutter-x));\n  margin-right: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n  box-sizing: border-box;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.row-cols-4 > * {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-auto {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  flex: 0 0 auto;\n  width: 8.33333333%;\n}\n\n.col-2 {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-3 {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.col-5 {\n  flex: 0 0 auto;\n  width: 41.66666667%;\n}\n\n.col-6 {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  flex: 0 0 auto;\n  width: 58.33333333%;\n}\n\n.col-8 {\n  flex: 0 0 auto;\n  width: 66.66666667%;\n}\n\n.col-9 {\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  flex: 0 0 auto;\n  width: 83.33333333%;\n}\n\n.col-11 {\n  flex: 0 0 auto;\n  width: 91.66666667%;\n}\n\n.col-12 {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-right: 8.33333333%;\n}\n\n.offset-2 {\n  margin-right: 16.66666667%;\n}\n\n.offset-3 {\n  margin-right: 25%;\n}\n\n.offset-4 {\n  margin-right: 33.33333333%;\n}\n\n.offset-5 {\n  margin-right: 41.66666667%;\n}\n\n.offset-6 {\n  margin-right: 50%;\n}\n\n.offset-7 {\n  margin-right: 58.33333333%;\n}\n\n.offset-8 {\n  margin-right: 66.66666667%;\n}\n\n.offset-9 {\n  margin-right: 75%;\n}\n\n.offset-10 {\n  margin-right: 83.33333333%;\n}\n\n.offset-11 {\n  margin-right: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-sm-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-sm-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-sm-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-sm-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-sm-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-sm-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-sm-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-sm-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-sm-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-sm-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-right: 0;\n  }\n  .offset-sm-1 {\n    margin-right: 8.33333333%;\n  }\n  .offset-sm-2 {\n    margin-right: 16.66666667%;\n  }\n  .offset-sm-3 {\n    margin-right: 25%;\n  }\n  .offset-sm-4 {\n    margin-right: 33.33333333%;\n  }\n  .offset-sm-5 {\n    margin-right: 41.66666667%;\n  }\n  .offset-sm-6 {\n    margin-right: 50%;\n  }\n  .offset-sm-7 {\n    margin-right: 58.33333333%;\n  }\n  .offset-sm-8 {\n    margin-right: 66.66666667%;\n  }\n  .offset-sm-9 {\n    margin-right: 75%;\n  }\n  .offset-sm-10 {\n    margin-right: 83.33333333%;\n  }\n  .offset-sm-11 {\n    margin-right: 91.66666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 768px) {\n  .col-md {\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-md-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-md-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-md-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-md-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-md-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-md-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-md-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-md-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-md-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-md-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-right: 0;\n  }\n  .offset-md-1 {\n    margin-right: 8.33333333%;\n  }\n  .offset-md-2 {\n    margin-right: 16.66666667%;\n  }\n  .offset-md-3 {\n    margin-right: 25%;\n  }\n  .offset-md-4 {\n    margin-right: 33.33333333%;\n  }\n  .offset-md-5 {\n    margin-right: 41.66666667%;\n  }\n  .offset-md-6 {\n    margin-right: 50%;\n  }\n  .offset-md-7 {\n    margin-right: 58.33333333%;\n  }\n  .offset-md-8 {\n    margin-right: 66.66666667%;\n  }\n  .offset-md-9 {\n    margin-right: 75%;\n  }\n  .offset-md-10 {\n    margin-right: 83.33333333%;\n  }\n  .offset-md-11 {\n    margin-right: 91.66666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 992px) {\n  .col-lg {\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-lg-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-lg-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-lg-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-lg-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-lg-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-lg-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-lg-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-lg-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-lg-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-lg-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-right: 0;\n  }\n  .offset-lg-1 {\n    margin-right: 8.33333333%;\n  }\n  .offset-lg-2 {\n    margin-right: 16.66666667%;\n  }\n  .offset-lg-3 {\n    margin-right: 25%;\n  }\n  .offset-lg-4 {\n    margin-right: 33.33333333%;\n  }\n  .offset-lg-5 {\n    margin-right: 41.66666667%;\n  }\n  .offset-lg-6 {\n    margin-right: 50%;\n  }\n  .offset-lg-7 {\n    margin-right: 58.33333333%;\n  }\n  .offset-lg-8 {\n    margin-right: 66.66666667%;\n  }\n  .offset-lg-9 {\n    margin-right: 75%;\n  }\n  .offset-lg-10 {\n    margin-right: 83.33333333%;\n  }\n  .offset-lg-11 {\n    margin-right: 91.66666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1200px) {\n  .col-xl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-xl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-right: 0;\n  }\n  .offset-xl-1 {\n    margin-right: 8.33333333%;\n  }\n  .offset-xl-2 {\n    margin-right: 16.66666667%;\n  }\n  .offset-xl-3 {\n    margin-right: 25%;\n  }\n  .offset-xl-4 {\n    margin-right: 33.33333333%;\n  }\n  .offset-xl-5 {\n    margin-right: 41.66666667%;\n  }\n  .offset-xl-6 {\n    margin-right: 50%;\n  }\n  .offset-xl-7 {\n    margin-right: 58.33333333%;\n  }\n  .offset-xl-8 {\n    margin-right: 66.66666667%;\n  }\n  .offset-xl-9 {\n    margin-right: 75%;\n  }\n  .offset-xl-10 {\n    margin-right: 83.33333333%;\n  }\n  .offset-xl-11 {\n    margin-right: 91.66666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1400px) {\n  .col-xxl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-xxl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xxl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xxl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xxl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xxl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xxl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xxl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xxl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xxl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xxl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-right: 0;\n  }\n  .offset-xxl-1 {\n    margin-right: 8.33333333%;\n  }\n  .offset-xxl-2 {\n    margin-right: 16.66666667%;\n  }\n  .offset-xxl-3 {\n    margin-right: 25%;\n  }\n  .offset-xxl-4 {\n    margin-right: 33.33333333%;\n  }\n  .offset-xxl-5 {\n    margin-right: 41.66666667%;\n  }\n  .offset-xxl-6 {\n    margin-right: 50%;\n  }\n  .offset-xxl-7 {\n    margin-right: 58.33333333%;\n  }\n  .offset-xxl-8 {\n    margin-right: 66.66666667%;\n  }\n  .offset-xxl-9 {\n    margin-right: 75%;\n  }\n  .offset-xxl-10 {\n    margin-right: 83.33333333%;\n  }\n  .offset-xxl-11 {\n    margin-right: 91.66666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-inline-grid {\n  display: inline-grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.flex-fill {\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  flex-direction: row !important;\n}\n\n.flex-column {\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  align-content: center !important;\n}\n\n.align-content-between {\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  align-self: auto !important;\n}\n\n.align-self-start {\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  align-self: stretch !important;\n}\n\n.order-first {\n  order: -1 !important;\n}\n\n.order-0 {\n  order: 0 !important;\n}\n\n.order-1 {\n  order: 1 !important;\n}\n\n.order-2 {\n  order: 2 !important;\n}\n\n.order-3 {\n  order: 3 !important;\n}\n\n.order-4 {\n  order: 4 !important;\n}\n\n.order-5 {\n  order: 5 !important;\n}\n\n.order-last {\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-left: 0 !important;\n  margin-right: 0 !important;\n}\n\n.mx-1 {\n  margin-left: 0.25rem !important;\n  margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-left: 0.5rem !important;\n  margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-left: 1rem !important;\n  margin-right: 1rem !important;\n}\n\n.mx-4 {\n  margin-left: 1.5rem !important;\n  margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-left: 3rem !important;\n  margin-right: 3rem !important;\n}\n\n.mx-auto {\n  margin-left: auto !important;\n  margin-right: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-left: 0 !important;\n}\n\n.me-1 {\n  margin-left: 0.25rem !important;\n}\n\n.me-2 {\n  margin-left: 0.5rem !important;\n}\n\n.me-3 {\n  margin-left: 1rem !important;\n}\n\n.me-4 {\n  margin-left: 1.5rem !important;\n}\n\n.me-5 {\n  margin-left: 3rem !important;\n}\n\n.me-auto {\n  margin-left: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-right: 0 !important;\n}\n\n.ms-1 {\n  margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-right: 1rem !important;\n}\n\n.ms-4 {\n  margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-right: 3rem !important;\n}\n\n.ms-auto {\n  margin-right: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-left: 0 !important;\n  padding-right: 0 !important;\n}\n\n.px-1 {\n  padding-left: 0.25rem !important;\n  padding-right: 0.25rem !important;\n}\n\n.px-2 {\n  padding-left: 0.5rem !important;\n  padding-right: 0.5rem !important;\n}\n\n.px-3 {\n  padding-left: 1rem !important;\n  padding-right: 1rem !important;\n}\n\n.px-4 {\n  padding-left: 1.5rem !important;\n  padding-right: 1.5rem !important;\n}\n\n.px-5 {\n  padding-left: 3rem !important;\n  padding-right: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-left: 0 !important;\n}\n\n.pe-1 {\n  padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-left: 1rem !important;\n}\n\n.pe-4 {\n  padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-left: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-right: 0 !important;\n}\n\n.ps-1 {\n  padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-right: 1rem !important;\n}\n\n.ps-4 {\n  padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-right: 3rem !important;\n}\n\n@media (min-width: 576px) {\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-sm-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    order: 5 !important;\n  }\n  .order-sm-last {\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-left: 0 !important;\n  }\n  .me-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-left: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-right: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-right: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-sm-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-left: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-right: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-right: 3rem !important;\n  }\n}\n@media (min-width: 768px) {\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-md-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    order: -1 !important;\n  }\n  .order-md-0 {\n    order: 0 !important;\n  }\n  .order-md-1 {\n    order: 1 !important;\n  }\n  .order-md-2 {\n    order: 2 !important;\n  }\n  .order-md-3 {\n    order: 3 !important;\n  }\n  .order-md-4 {\n    order: 4 !important;\n  }\n  .order-md-5 {\n    order: 5 !important;\n  }\n  .order-md-last {\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-md-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-left: 0 !important;\n  }\n  .me-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-left: 1rem !important;\n  }\n  .me-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-left: 3rem !important;\n  }\n  .me-md-auto {\n    margin-left: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-right: 0 !important;\n  }\n  .ms-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-right: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-md-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-md-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-left: 0 !important;\n  }\n  .pe-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-right: 0 !important;\n  }\n  .ps-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-right: 3rem !important;\n  }\n}\n@media (min-width: 992px) {\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-lg-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    order: 5 !important;\n  }\n  .order-lg-last {\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-left: 0 !important;\n  }\n  .me-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-left: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-right: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-right: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-lg-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-left: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-right: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-right: 3rem !important;\n  }\n}\n@media (min-width: 1200px) {\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    order: 5 !important;\n  }\n  .order-xl-last {\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-left: 0 !important;\n  }\n  .me-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-left: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-right: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-right: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-xl-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-left: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-right: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-right: 3rem !important;\n  }\n}\n@media (min-width: 1400px) {\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xxl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-left: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-right: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-right: 3rem !important;\n  }\n}\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap-grid.rtl.css.map */"
  },
  {
    "path": "public/assets/bootstrap-5.3.2-dist/css/bootstrap-reboot.css",
    "content": "/*!\n * Bootstrap Reboot v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n  --bs-blue: #0d6efd;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #d63384;\n  --bs-red: #dc3545;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ffc107;\n  --bs-green: #198754;\n  --bs-teal: #20c997;\n  --bs-cyan: #0dcaf0;\n  --bs-black: #000;\n  --bs-white: #fff;\n  --bs-gray: #6c757d;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #6c757d;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #0d6efd;\n  --bs-secondary: #6c757d;\n  --bs-success: #198754;\n  --bs-info: #0dcaf0;\n  --bs-warning: #ffc107;\n  --bs-danger: #dc3545;\n  --bs-light: #f8f9fa;\n  --bs-dark: #212529;\n  --bs-primary-rgb: 13, 110, 253;\n  --bs-secondary-rgb: 108, 117, 125;\n  --bs-success-rgb: 25, 135, 84;\n  --bs-info-rgb: 13, 202, 240;\n  --bs-warning-rgb: 255, 193, 7;\n  --bs-danger-rgb: 220, 53, 69;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 33, 37, 41;\n  --bs-primary-text-emphasis: #052c65;\n  --bs-secondary-text-emphasis: #2b2f32;\n  --bs-success-text-emphasis: #0a3622;\n  --bs-info-text-emphasis: #055160;\n  --bs-warning-text-emphasis: #664d03;\n  --bs-danger-text-emphasis: #58151c;\n  --bs-light-text-emphasis: #495057;\n  --bs-dark-text-emphasis: #495057;\n  --bs-primary-bg-subtle: #cfe2ff;\n  --bs-secondary-bg-subtle: #e2e3e5;\n  --bs-success-bg-subtle: #d1e7dd;\n  --bs-info-bg-subtle: #cff4fc;\n  --bs-warning-bg-subtle: #fff3cd;\n  --bs-danger-bg-subtle: #f8d7da;\n  --bs-light-bg-subtle: #fcfcfd;\n  --bs-dark-bg-subtle: #ced4da;\n  --bs-primary-border-subtle: #9ec5fe;\n  --bs-secondary-border-subtle: #c4c8cb;\n  --bs-success-border-subtle: #a3cfbb;\n  --bs-info-border-subtle: #9eeaf9;\n  --bs-warning-border-subtle: #ffe69c;\n  --bs-danger-border-subtle: #f1aeb5;\n  --bs-light-border-subtle: #e9ecef;\n  --bs-dark-border-subtle: #adb5bd;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #212529;\n  --bs-body-color-rgb: 33, 37, 41;\n  --bs-body-bg: #fff;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-emphasis-color: #000;\n  --bs-emphasis-color-rgb: 0, 0, 0;\n  --bs-secondary-color: rgba(33, 37, 41, 0.75);\n  --bs-secondary-color-rgb: 33, 37, 41;\n  --bs-secondary-bg: #e9ecef;\n  --bs-secondary-bg-rgb: 233, 236, 239;\n  --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n  --bs-tertiary-color-rgb: 33, 37, 41;\n  --bs-tertiary-bg: #f8f9fa;\n  --bs-tertiary-bg-rgb: 248, 249, 250;\n  --bs-heading-color: inherit;\n  --bs-link-color: #0d6efd;\n  --bs-link-color-rgb: 13, 110, 253;\n  --bs-link-decoration: underline;\n  --bs-link-hover-color: #0a58ca;\n  --bs-link-hover-color-rgb: 10, 88, 202;\n  --bs-code-color: #d63384;\n  --bs-highlight-color: #212529;\n  --bs-highlight-bg: #fff3cd;\n  --bs-border-width: 1px;\n  --bs-border-style: solid;\n  --bs-border-color: #dee2e6;\n  --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n  --bs-border-radius: 0.375rem;\n  --bs-border-radius-sm: 0.25rem;\n  --bs-border-radius-lg: 0.5rem;\n  --bs-border-radius-xl: 1rem;\n  --bs-border-radius-xxl: 2rem;\n  --bs-border-radius-2xl: var(--bs-border-radius-xxl);\n  --bs-border-radius-pill: 50rem;\n  --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n  --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);\n  --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n  --bs-focus-ring-width: 0.25rem;\n  --bs-focus-ring-opacity: 0.25;\n  --bs-focus-ring-color: rgba(13, 110, 253, 0.25);\n  --bs-form-valid-color: #198754;\n  --bs-form-valid-border-color: #198754;\n  --bs-form-invalid-color: #dc3545;\n  --bs-form-invalid-border-color: #dc3545;\n}\n\n[data-bs-theme=dark] {\n  color-scheme: dark;\n  --bs-body-color: #dee2e6;\n  --bs-body-color-rgb: 222, 226, 230;\n  --bs-body-bg: #212529;\n  --bs-body-bg-rgb: 33, 37, 41;\n  --bs-emphasis-color: #fff;\n  --bs-emphasis-color-rgb: 255, 255, 255;\n  --bs-secondary-color: rgba(222, 226, 230, 0.75);\n  --bs-secondary-color-rgb: 222, 226, 230;\n  --bs-secondary-bg: #343a40;\n  --bs-secondary-bg-rgb: 52, 58, 64;\n  --bs-tertiary-color: rgba(222, 226, 230, 0.5);\n  --bs-tertiary-color-rgb: 222, 226, 230;\n  --bs-tertiary-bg: #2b3035;\n  --bs-tertiary-bg-rgb: 43, 48, 53;\n  --bs-primary-text-emphasis: #6ea8fe;\n  --bs-secondary-text-emphasis: #a7acb1;\n  --bs-success-text-emphasis: #75b798;\n  --bs-info-text-emphasis: #6edff6;\n  --bs-warning-text-emphasis: #ffda6a;\n  --bs-danger-text-emphasis: #ea868f;\n  --bs-light-text-emphasis: #f8f9fa;\n  --bs-dark-text-emphasis: #dee2e6;\n  --bs-primary-bg-subtle: #031633;\n  --bs-secondary-bg-subtle: #161719;\n  --bs-success-bg-subtle: #051b11;\n  --bs-info-bg-subtle: #032830;\n  --bs-warning-bg-subtle: #332701;\n  --bs-danger-bg-subtle: #2c0b0e;\n  --bs-light-bg-subtle: #343a40;\n  --bs-dark-bg-subtle: #1a1d20;\n  --bs-primary-border-subtle: #084298;\n  --bs-secondary-border-subtle: #41464b;\n  --bs-success-border-subtle: #0f5132;\n  --bs-info-border-subtle: #087990;\n  --bs-warning-border-subtle: #997404;\n  --bs-danger-border-subtle: #842029;\n  --bs-light-border-subtle: #495057;\n  --bs-dark-border-subtle: #343a40;\n  --bs-heading-color: inherit;\n  --bs-link-color: #6ea8fe;\n  --bs-link-hover-color: #8bb9fe;\n  --bs-link-color-rgb: 110, 168, 254;\n  --bs-link-hover-color-rgb: 139, 185, 254;\n  --bs-code-color: #e685b5;\n  --bs-highlight-color: #dee2e6;\n  --bs-highlight-bg: #664d03;\n  --bs-border-color: #495057;\n  --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n  --bs-form-valid-color: #75b798;\n  --bs-form-valid-border-color: #75b798;\n  --bs-form-invalid-color: #ea868f;\n  --bs-form-invalid-border-color: #ea868f;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  border: 0;\n  border-top: var(--bs-border-width) solid;\n  opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n  color: var(--bs-heading-color);\n}\n\nh1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n  h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n  h2 {\n    font-size: 2rem;\n  }\n}\n\nh3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n  h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n  h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5 {\n  font-size: 1.25rem;\n}\n\nh6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: 0.5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 0.875em;\n}\n\nmark {\n  padding: 0.1875em;\n  color: var(--bs-highlight-color);\n  background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\na {\n  color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n  text-decoration: underline;\n}\na:hover {\n  --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: var(--bs-code-color);\n  word-wrap: break-word;\n}\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.1875rem 0.375rem;\n  font-size: 0.875em;\n  color: var(--bs-body-bg);\n  background-color: var(--bs-body-color);\n  border-radius: 0.25rem;\n}\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: var(--bs-secondary-color);\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=button] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\nselect:disabled {\n  opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n  display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n  -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=search] {\n  -webkit-appearance: textfield;\n  outline-offset: -2px;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\n::file-selector-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */"
  },
  {
    "path": "public/assets/bootstrap-5.3.2-dist/css/bootstrap-reboot.rtl.css",
    "content": "/*!\n * Bootstrap Reboot v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n  --bs-blue: #0d6efd;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #d63384;\n  --bs-red: #dc3545;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ffc107;\n  --bs-green: #198754;\n  --bs-teal: #20c997;\n  --bs-cyan: #0dcaf0;\n  --bs-black: #000;\n  --bs-white: #fff;\n  --bs-gray: #6c757d;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #6c757d;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #0d6efd;\n  --bs-secondary: #6c757d;\n  --bs-success: #198754;\n  --bs-info: #0dcaf0;\n  --bs-warning: #ffc107;\n  --bs-danger: #dc3545;\n  --bs-light: #f8f9fa;\n  --bs-dark: #212529;\n  --bs-primary-rgb: 13, 110, 253;\n  --bs-secondary-rgb: 108, 117, 125;\n  --bs-success-rgb: 25, 135, 84;\n  --bs-info-rgb: 13, 202, 240;\n  --bs-warning-rgb: 255, 193, 7;\n  --bs-danger-rgb: 220, 53, 69;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 33, 37, 41;\n  --bs-primary-text-emphasis: #052c65;\n  --bs-secondary-text-emphasis: #2b2f32;\n  --bs-success-text-emphasis: #0a3622;\n  --bs-info-text-emphasis: #055160;\n  --bs-warning-text-emphasis: #664d03;\n  --bs-danger-text-emphasis: #58151c;\n  --bs-light-text-emphasis: #495057;\n  --bs-dark-text-emphasis: #495057;\n  --bs-primary-bg-subtle: #cfe2ff;\n  --bs-secondary-bg-subtle: #e2e3e5;\n  --bs-success-bg-subtle: #d1e7dd;\n  --bs-info-bg-subtle: #cff4fc;\n  --bs-warning-bg-subtle: #fff3cd;\n  --bs-danger-bg-subtle: #f8d7da;\n  --bs-light-bg-subtle: #fcfcfd;\n  --bs-dark-bg-subtle: #ced4da;\n  --bs-primary-border-subtle: #9ec5fe;\n  --bs-secondary-border-subtle: #c4c8cb;\n  --bs-success-border-subtle: #a3cfbb;\n  --bs-info-border-subtle: #9eeaf9;\n  --bs-warning-border-subtle: #ffe69c;\n  --bs-danger-border-subtle: #f1aeb5;\n  --bs-light-border-subtle: #e9ecef;\n  --bs-dark-border-subtle: #adb5bd;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #212529;\n  --bs-body-color-rgb: 33, 37, 41;\n  --bs-body-bg: #fff;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-emphasis-color: #000;\n  --bs-emphasis-color-rgb: 0, 0, 0;\n  --bs-secondary-color: rgba(33, 37, 41, 0.75);\n  --bs-secondary-color-rgb: 33, 37, 41;\n  --bs-secondary-bg: #e9ecef;\n  --bs-secondary-bg-rgb: 233, 236, 239;\n  --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n  --bs-tertiary-color-rgb: 33, 37, 41;\n  --bs-tertiary-bg: #f8f9fa;\n  --bs-tertiary-bg-rgb: 248, 249, 250;\n  --bs-heading-color: inherit;\n  --bs-link-color: #0d6efd;\n  --bs-link-color-rgb: 13, 110, 253;\n  --bs-link-decoration: underline;\n  --bs-link-hover-color: #0a58ca;\n  --bs-link-hover-color-rgb: 10, 88, 202;\n  --bs-code-color: #d63384;\n  --bs-highlight-color: #212529;\n  --bs-highlight-bg: #fff3cd;\n  --bs-border-width: 1px;\n  --bs-border-style: solid;\n  --bs-border-color: #dee2e6;\n  --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n  --bs-border-radius: 0.375rem;\n  --bs-border-radius-sm: 0.25rem;\n  --bs-border-radius-lg: 0.5rem;\n  --bs-border-radius-xl: 1rem;\n  --bs-border-radius-xxl: 2rem;\n  --bs-border-radius-2xl: var(--bs-border-radius-xxl);\n  --bs-border-radius-pill: 50rem;\n  --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n  --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);\n  --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n  --bs-focus-ring-width: 0.25rem;\n  --bs-focus-ring-opacity: 0.25;\n  --bs-focus-ring-color: rgba(13, 110, 253, 0.25);\n  --bs-form-valid-color: #198754;\n  --bs-form-valid-border-color: #198754;\n  --bs-form-invalid-color: #dc3545;\n  --bs-form-invalid-border-color: #dc3545;\n}\n\n[data-bs-theme=dark] {\n  color-scheme: dark;\n  --bs-body-color: #dee2e6;\n  --bs-body-color-rgb: 222, 226, 230;\n  --bs-body-bg: #212529;\n  --bs-body-bg-rgb: 33, 37, 41;\n  --bs-emphasis-color: #fff;\n  --bs-emphasis-color-rgb: 255, 255, 255;\n  --bs-secondary-color: rgba(222, 226, 230, 0.75);\n  --bs-secondary-color-rgb: 222, 226, 230;\n  --bs-secondary-bg: #343a40;\n  --bs-secondary-bg-rgb: 52, 58, 64;\n  --bs-tertiary-color: rgba(222, 226, 230, 0.5);\n  --bs-tertiary-color-rgb: 222, 226, 230;\n  --bs-tertiary-bg: #2b3035;\n  --bs-tertiary-bg-rgb: 43, 48, 53;\n  --bs-primary-text-emphasis: #6ea8fe;\n  --bs-secondary-text-emphasis: #a7acb1;\n  --bs-success-text-emphasis: #75b798;\n  --bs-info-text-emphasis: #6edff6;\n  --bs-warning-text-emphasis: #ffda6a;\n  --bs-danger-text-emphasis: #ea868f;\n  --bs-light-text-emphasis: #f8f9fa;\n  --bs-dark-text-emphasis: #dee2e6;\n  --bs-primary-bg-subtle: #031633;\n  --bs-secondary-bg-subtle: #161719;\n  --bs-success-bg-subtle: #051b11;\n  --bs-info-bg-subtle: #032830;\n  --bs-warning-bg-subtle: #332701;\n  --bs-danger-bg-subtle: #2c0b0e;\n  --bs-light-bg-subtle: #343a40;\n  --bs-dark-bg-subtle: #1a1d20;\n  --bs-primary-border-subtle: #084298;\n  --bs-secondary-border-subtle: #41464b;\n  --bs-success-border-subtle: #0f5132;\n  --bs-info-border-subtle: #087990;\n  --bs-warning-border-subtle: #997404;\n  --bs-danger-border-subtle: #842029;\n  --bs-light-border-subtle: #495057;\n  --bs-dark-border-subtle: #343a40;\n  --bs-heading-color: inherit;\n  --bs-link-color: #6ea8fe;\n  --bs-link-hover-color: #8bb9fe;\n  --bs-link-color-rgb: 110, 168, 254;\n  --bs-link-hover-color-rgb: 139, 185, 254;\n  --bs-code-color: #e685b5;\n  --bs-highlight-color: #dee2e6;\n  --bs-highlight-bg: #664d03;\n  --bs-border-color: #495057;\n  --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n  --bs-form-valid-color: #75b798;\n  --bs-form-valid-border-color: #75b798;\n  --bs-form-invalid-color: #ea868f;\n  --bs-form-invalid-border-color: #ea868f;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  border: 0;\n  border-top: var(--bs-border-width) solid;\n  opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n  color: var(--bs-heading-color);\n}\n\nh1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n  h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n  h2 {\n    font-size: 2rem;\n  }\n}\n\nh3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n  h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n  h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5 {\n  font-size: 1.25rem;\n}\n\nh6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-right: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: 0.5rem;\n  margin-right: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 0.875em;\n}\n\nmark {\n  padding: 0.1875em;\n  color: var(--bs-highlight-color);\n  background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\na {\n  color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n  text-decoration: underline;\n}\na:hover {\n  --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: var(--bs-code-color);\n  word-wrap: break-word;\n}\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.1875rem 0.375rem;\n  font-size: 0.875em;\n  color: var(--bs-body-bg);\n  background-color: var(--bs-body-color);\n  border-radius: 0.25rem;\n}\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: var(--bs-secondary-color);\n  text-align: right;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=button] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\nselect:disabled {\n  opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n  display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n  -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: right;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\nlegend + * {\n  clear: right;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=search] {\n  -webkit-appearance: textfield;\n  outline-offset: -2px;\n}\n\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\n::file-selector-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */"
  },
  {
    "path": "public/assets/bootstrap-5.3.2-dist/css/bootstrap-utilities.css",
    "content": "/*!\n * Bootstrap Utilities v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n  --bs-blue: #0d6efd;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #d63384;\n  --bs-red: #dc3545;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ffc107;\n  --bs-green: #198754;\n  --bs-teal: #20c997;\n  --bs-cyan: #0dcaf0;\n  --bs-black: #000;\n  --bs-white: #fff;\n  --bs-gray: #6c757d;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #6c757d;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #0d6efd;\n  --bs-secondary: #6c757d;\n  --bs-success: #198754;\n  --bs-info: #0dcaf0;\n  --bs-warning: #ffc107;\n  --bs-danger: #dc3545;\n  --bs-light: #f8f9fa;\n  --bs-dark: #212529;\n  --bs-primary-rgb: 13, 110, 253;\n  --bs-secondary-rgb: 108, 117, 125;\n  --bs-success-rgb: 25, 135, 84;\n  --bs-info-rgb: 13, 202, 240;\n  --bs-warning-rgb: 255, 193, 7;\n  --bs-danger-rgb: 220, 53, 69;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 33, 37, 41;\n  --bs-primary-text-emphasis: #052c65;\n  --bs-secondary-text-emphasis: #2b2f32;\n  --bs-success-text-emphasis: #0a3622;\n  --bs-info-text-emphasis: #055160;\n  --bs-warning-text-emphasis: #664d03;\n  --bs-danger-text-emphasis: #58151c;\n  --bs-light-text-emphasis: #495057;\n  --bs-dark-text-emphasis: #495057;\n  --bs-primary-bg-subtle: #cfe2ff;\n  --bs-secondary-bg-subtle: #e2e3e5;\n  --bs-success-bg-subtle: #d1e7dd;\n  --bs-info-bg-subtle: #cff4fc;\n  --bs-warning-bg-subtle: #fff3cd;\n  --bs-danger-bg-subtle: #f8d7da;\n  --bs-light-bg-subtle: #fcfcfd;\n  --bs-dark-bg-subtle: #ced4da;\n  --bs-primary-border-subtle: #9ec5fe;\n  --bs-secondary-border-subtle: #c4c8cb;\n  --bs-success-border-subtle: #a3cfbb;\n  --bs-info-border-subtle: #9eeaf9;\n  --bs-warning-border-subtle: #ffe69c;\n  --bs-danger-border-subtle: #f1aeb5;\n  --bs-light-border-subtle: #e9ecef;\n  --bs-dark-border-subtle: #adb5bd;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #212529;\n  --bs-body-color-rgb: 33, 37, 41;\n  --bs-body-bg: #fff;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-emphasis-color: #000;\n  --bs-emphasis-color-rgb: 0, 0, 0;\n  --bs-secondary-color: rgba(33, 37, 41, 0.75);\n  --bs-secondary-color-rgb: 33, 37, 41;\n  --bs-secondary-bg: #e9ecef;\n  --bs-secondary-bg-rgb: 233, 236, 239;\n  --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n  --bs-tertiary-color-rgb: 33, 37, 41;\n  --bs-tertiary-bg: #f8f9fa;\n  --bs-tertiary-bg-rgb: 248, 249, 250;\n  --bs-heading-color: inherit;\n  --bs-link-color: #0d6efd;\n  --bs-link-color-rgb: 13, 110, 253;\n  --bs-link-decoration: underline;\n  --bs-link-hover-color: #0a58ca;\n  --bs-link-hover-color-rgb: 10, 88, 202;\n  --bs-code-color: #d63384;\n  --bs-highlight-color: #212529;\n  --bs-highlight-bg: #fff3cd;\n  --bs-border-width: 1px;\n  --bs-border-style: solid;\n  --bs-border-color: #dee2e6;\n  --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n  --bs-border-radius: 0.375rem;\n  --bs-border-radius-sm: 0.25rem;\n  --bs-border-radius-lg: 0.5rem;\n  --bs-border-radius-xl: 1rem;\n  --bs-border-radius-xxl: 2rem;\n  --bs-border-radius-2xl: var(--bs-border-radius-xxl);\n  --bs-border-radius-pill: 50rem;\n  --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n  --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);\n  --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n  --bs-focus-ring-width: 0.25rem;\n  --bs-focus-ring-opacity: 0.25;\n  --bs-focus-ring-color: rgba(13, 110, 253, 0.25);\n  --bs-form-valid-color: #198754;\n  --bs-form-valid-border-color: #198754;\n  --bs-form-invalid-color: #dc3545;\n  --bs-form-invalid-border-color: #dc3545;\n}\n\n[data-bs-theme=dark] {\n  color-scheme: dark;\n  --bs-body-color: #dee2e6;\n  --bs-body-color-rgb: 222, 226, 230;\n  --bs-body-bg: #212529;\n  --bs-body-bg-rgb: 33, 37, 41;\n  --bs-emphasis-color: #fff;\n  --bs-emphasis-color-rgb: 255, 255, 255;\n  --bs-secondary-color: rgba(222, 226, 230, 0.75);\n  --bs-secondary-color-rgb: 222, 226, 230;\n  --bs-secondary-bg: #343a40;\n  --bs-secondary-bg-rgb: 52, 58, 64;\n  --bs-tertiary-color: rgba(222, 226, 230, 0.5);\n  --bs-tertiary-color-rgb: 222, 226, 230;\n  --bs-tertiary-bg: #2b3035;\n  --bs-tertiary-bg-rgb: 43, 48, 53;\n  --bs-primary-text-emphasis: #6ea8fe;\n  --bs-secondary-text-emphasis: #a7acb1;\n  --bs-success-text-emphasis: #75b798;\n  --bs-info-text-emphasis: #6edff6;\n  --bs-warning-text-emphasis: #ffda6a;\n  --bs-danger-text-emphasis: #ea868f;\n  --bs-light-text-emphasis: #f8f9fa;\n  --bs-dark-text-emphasis: #dee2e6;\n  --bs-primary-bg-subtle: #031633;\n  --bs-secondary-bg-subtle: #161719;\n  --bs-success-bg-subtle: #051b11;\n  --bs-info-bg-subtle: #032830;\n  --bs-warning-bg-subtle: #332701;\n  --bs-danger-bg-subtle: #2c0b0e;\n  --bs-light-bg-subtle: #343a40;\n  --bs-dark-bg-subtle: #1a1d20;\n  --bs-primary-border-subtle: #084298;\n  --bs-secondary-border-subtle: #41464b;\n  --bs-success-border-subtle: #0f5132;\n  --bs-info-border-subtle: #087990;\n  --bs-warning-border-subtle: #997404;\n  --bs-danger-border-subtle: #842029;\n  --bs-light-border-subtle: #495057;\n  --bs-dark-border-subtle: #343a40;\n  --bs-heading-color: inherit;\n  --bs-link-color: #6ea8fe;\n  --bs-link-hover-color: #8bb9fe;\n  --bs-link-color-rgb: 110, 168, 254;\n  --bs-link-hover-color-rgb: 139, 185, 254;\n  --bs-code-color: #e685b5;\n  --bs-highlight-color: #dee2e6;\n  --bs-highlight-bg: #664d03;\n  --bs-border-color: #495057;\n  --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n  --bs-form-valid-color: #75b798;\n  --bs-form-valid-border-color: #75b798;\n  --bs-form-invalid-color: #ea868f;\n  --bs-form-invalid-border-color: #ea868f;\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.text-bg-primary {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n  color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-primary:hover, .link-primary:focus {\n  color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-secondary {\n  color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n  color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-success {\n  color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-success:hover, .link-success:focus {\n  color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-info {\n  color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-info:hover, .link-info:focus {\n  color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-warning {\n  color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-warning:hover, .link-warning:focus {\n  color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-danger {\n  color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-danger:hover, .link-danger:focus {\n  color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-light {\n  color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-light:hover, .link-light:focus {\n  color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-dark {\n  color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-dark:hover, .link-dark:focus {\n  color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-body-emphasis {\n  color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-body-emphasis:hover, .link-body-emphasis:focus {\n  color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n  text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n}\n\n.focus-ring:focus {\n  outline: 0;\n  box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);\n}\n\n.icon-link {\n  display: inline-flex;\n  gap: 0.375rem;\n  align-items: center;\n  -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n  text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n  text-underline-offset: 0.25em;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n.icon-link > .bi {\n  flex-shrink: 0;\n  width: 1em;\n  height: 1em;\n  fill: currentcolor;\n  transition: 0.2s ease-in-out transform;\n}\n@media (prefers-reduced-motion: reduce) {\n  .icon-link > .bi {\n    transition: none;\n  }\n}\n\n.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi {\n  transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0));\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n.sticky-bottom {\n  position: -webkit-sticky;\n  position: sticky;\n  bottom: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-sm-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-md-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-lg-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-xl-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-xxl-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n.hstack {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  align-self: stretch;\n}\n\n.vstack {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n.visually-hidden:not(caption),\n.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {\n  position: absolute !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  align-self: stretch;\n  width: var(--bs-border-width);\n  min-height: 1em;\n  background-color: currentcolor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.object-fit-contain {\n  -o-object-fit: contain !important;\n  object-fit: contain !important;\n}\n\n.object-fit-cover {\n  -o-object-fit: cover !important;\n  object-fit: cover !important;\n}\n\n.object-fit-fill {\n  -o-object-fit: fill !important;\n  object-fit: fill !important;\n}\n\n.object-fit-scale {\n  -o-object-fit: scale-down !important;\n  object-fit: scale-down !important;\n}\n\n.object-fit-none {\n  -o-object-fit: none !important;\n  object-fit: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.overflow-x-auto {\n  overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n  overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n  overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n  overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n  overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n  overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n  overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n  overflow-y: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-inline-grid {\n  display: inline-grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: var(--bs-box-shadow) !important;\n}\n\n.shadow-sm {\n  box-shadow: var(--bs-box-shadow-sm) !important;\n}\n\n.shadow-lg {\n  box-shadow: var(--bs-box-shadow-lg) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.focus-ring-primary {\n  --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-secondary {\n  --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-success {\n  --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-info {\n  --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-warning {\n  --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-danger {\n  --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-light {\n  --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-dark {\n  --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity));\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-black {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n  border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n  border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n  border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n  border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n  border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n  border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n  border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n  border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.border-opacity-10 {\n  --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n  --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n  --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n  --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n  --bs-border-opacity: 1;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  flex-direction: row !important;\n}\n\n.flex-column {\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  align-content: center !important;\n}\n\n.align-content-between {\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  align-self: auto !important;\n}\n\n.align-self-start {\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  align-self: stretch !important;\n}\n\n.order-first {\n  order: -1 !important;\n}\n\n.order-0 {\n  order: 0 !important;\n}\n\n.order-1 {\n  order: 1 !important;\n}\n\n.order-2 {\n  order: 2 !important;\n}\n\n.order-3 {\n  order: 3 !important;\n}\n\n.order-4 {\n  order: 4 !important;\n}\n\n.order-5 {\n  order: 5 !important;\n}\n\n.order-last {\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.row-gap-0 {\n  row-gap: 0 !important;\n}\n\n.row-gap-1 {\n  row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n  row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n  row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n  row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n  row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n  -moz-column-gap: 0 !important;\n  column-gap: 0 !important;\n}\n\n.column-gap-1 {\n  -moz-column-gap: 0.25rem !important;\n  column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n  -moz-column-gap: 0.5rem !important;\n  column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n  -moz-column-gap: 1rem !important;\n  column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n  -moz-column-gap: 1.5rem !important;\n  column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n  -moz-column-gap: 3rem !important;\n  column-gap: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-medium {\n  font-weight: 500 !important;\n}\n\n.fw-semibold {\n  font-weight: 600 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n  --bs-text-opacity: 1;\n  color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n  --bs-text-opacity: 1;\n  color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n  --bs-text-opacity: 1;\n  color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n  color: var(--bs-primary-text-emphasis) !important;\n}\n\n.text-secondary-emphasis {\n  color: var(--bs-secondary-text-emphasis) !important;\n}\n\n.text-success-emphasis {\n  color: var(--bs-success-text-emphasis) !important;\n}\n\n.text-info-emphasis {\n  color: var(--bs-info-text-emphasis) !important;\n}\n\n.text-warning-emphasis {\n  color: var(--bs-warning-text-emphasis) !important;\n}\n\n.text-danger-emphasis {\n  color: var(--bs-danger-text-emphasis) !important;\n}\n\n.text-light-emphasis {\n  color: var(--bs-light-text-emphasis) !important;\n}\n\n.text-dark-emphasis {\n  color: var(--bs-dark-text-emphasis) !important;\n}\n\n.link-opacity-10 {\n  --bs-link-opacity: 0.1;\n}\n\n.link-opacity-10-hover:hover {\n  --bs-link-opacity: 0.1;\n}\n\n.link-opacity-25 {\n  --bs-link-opacity: 0.25;\n}\n\n.link-opacity-25-hover:hover {\n  --bs-link-opacity: 0.25;\n}\n\n.link-opacity-50 {\n  --bs-link-opacity: 0.5;\n}\n\n.link-opacity-50-hover:hover {\n  --bs-link-opacity: 0.5;\n}\n\n.link-opacity-75 {\n  --bs-link-opacity: 0.75;\n}\n\n.link-opacity-75-hover:hover {\n  --bs-link-opacity: 0.75;\n}\n\n.link-opacity-100 {\n  --bs-link-opacity: 1;\n}\n\n.link-opacity-100-hover:hover {\n  --bs-link-opacity: 1;\n}\n\n.link-offset-1 {\n  text-underline-offset: 0.125em !important;\n}\n\n.link-offset-1-hover:hover {\n  text-underline-offset: 0.125em !important;\n}\n\n.link-offset-2 {\n  text-underline-offset: 0.25em !important;\n}\n\n.link-offset-2-hover:hover {\n  text-underline-offset: 0.25em !important;\n}\n\n.link-offset-3 {\n  text-underline-offset: 0.375em !important;\n}\n\n.link-offset-3-hover:hover {\n  text-underline-offset: 0.375em !important;\n}\n\n.link-underline-primary {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-secondary {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-success {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-info {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-warning {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-danger {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-light {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-dark {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-underline-opacity-0 {\n  --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-0-hover:hover {\n  --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-10 {\n  --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-10-hover:hover {\n  --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-25 {\n  --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-25-hover:hover {\n  --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-50 {\n  --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-50-hover:hover {\n  --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-75 {\n  --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-75-hover:hover {\n  --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-100 {\n  --bs-link-underline-opacity: 1;\n}\n\n.link-underline-opacity-100-hover:hover {\n  --bs-link-underline-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-body-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n  background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n  background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n  background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n  background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n  background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n  background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n  background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n  background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n  border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n  border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n  border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n  border-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n  border-top-left-radius: var(--bs-border-radius) !important;\n  border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n  border-top-left-radius: 0 !important;\n  border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n  border-top-left-radius: var(--bs-border-radius-sm) !important;\n  border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n  border-top-left-radius: var(--bs-border-radius) !important;\n  border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n  border-top-left-radius: var(--bs-border-radius-lg) !important;\n  border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n  border-top-left-radius: var(--bs-border-radius-xl) !important;\n  border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n  border-top-left-radius: var(--bs-border-radius-xxl) !important;\n  border-top-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-top-circle {\n  border-top-left-radius: 50% !important;\n  border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n  border-top-left-radius: var(--bs-border-radius-pill) !important;\n  border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n  border-top-right-radius: var(--bs-border-radius) !important;\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n  border-top-right-radius: 0 !important;\n  border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n  border-top-right-radius: var(--bs-border-radius-sm) !important;\n  border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n  border-top-right-radius: var(--bs-border-radius) !important;\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n  border-top-right-radius: var(--bs-border-radius-lg) !important;\n  border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n  border-top-right-radius: var(--bs-border-radius-xl) !important;\n  border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n  border-top-right-radius: var(--bs-border-radius-xxl) !important;\n  border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-end-circle {\n  border-top-right-radius: 50% !important;\n  border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n  border-top-right-radius: var(--bs-border-radius-pill) !important;\n  border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n  border-bottom-right-radius: 0 !important;\n  border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n  border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n  border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n  border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n  border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n  border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n  border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n  border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n  border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-bottom-circle {\n  border-bottom-right-radius: 50% !important;\n  border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n  border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n  border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n  border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n  border-bottom-left-radius: 0 !important;\n  border-top-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n  border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n  border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n  border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n  border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n  border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n  border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n  border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n  border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n  border-top-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-start-circle {\n  border-bottom-left-radius: 50% !important;\n  border-top-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n  border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n  border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n.z-n1 {\n  z-index: -1 !important;\n}\n\n.z-0 {\n  z-index: 0 !important;\n}\n\n.z-1 {\n  z-index: 1 !important;\n}\n\n.z-2 {\n  z-index: 2 !important;\n}\n\n.z-3 {\n  z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .object-fit-sm-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-sm-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-sm-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-sm-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-sm-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-sm-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    order: 5 !important;\n  }\n  .order-sm-last {\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-sm-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-sm-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-sm-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-sm-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-sm-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-sm-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-sm-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-sm-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-sm-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-sm-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-sm-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-sm-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .object-fit-md-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-md-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-md-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-md-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-md-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-md-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    order: -1 !important;\n  }\n  .order-md-0 {\n    order: 0 !important;\n  }\n  .order-md-1 {\n    order: 1 !important;\n  }\n  .order-md-2 {\n    order: 2 !important;\n  }\n  .order-md-3 {\n    order: 3 !important;\n  }\n  .order-md-4 {\n    order: 4 !important;\n  }\n  .order-md-5 {\n    order: 5 !important;\n  }\n  .order-md-last {\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-md-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-md-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-md-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-md-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-md-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-md-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-md-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-md-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-md-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-md-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-md-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-md-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .object-fit-lg-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-lg-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-lg-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-lg-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-lg-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-lg-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    order: 5 !important;\n  }\n  .order-lg-last {\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-lg-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-lg-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-lg-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-lg-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-lg-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-lg-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-lg-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-lg-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-lg-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-lg-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-lg-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-lg-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .object-fit-xl-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-xl-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-xl-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-xl-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-xl-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    order: 5 !important;\n  }\n  .order-xl-last {\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-xl-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-xl-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-xl-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-xl-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-xl-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-xl-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-xl-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-xl-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-xl-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-xl-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-xl-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-xl-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .object-fit-xxl-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-xxl-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-xxl-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-xxl-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-xxl-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xxl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-xxl-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-xxl-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-xxl-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-xxl-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-xxl-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-xxl-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-xxl-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-xxl-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-xxl-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-xxl-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-xxl-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-xxl-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n/*# sourceMappingURL=bootstrap-utilities.css.map */"
  },
  {
    "path": "public/assets/bootstrap-5.3.2-dist/css/bootstrap-utilities.rtl.css",
    "content": "/*!\n * Bootstrap Utilities v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n  --bs-blue: #0d6efd;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #d63384;\n  --bs-red: #dc3545;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ffc107;\n  --bs-green: #198754;\n  --bs-teal: #20c997;\n  --bs-cyan: #0dcaf0;\n  --bs-black: #000;\n  --bs-white: #fff;\n  --bs-gray: #6c757d;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #6c757d;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #0d6efd;\n  --bs-secondary: #6c757d;\n  --bs-success: #198754;\n  --bs-info: #0dcaf0;\n  --bs-warning: #ffc107;\n  --bs-danger: #dc3545;\n  --bs-light: #f8f9fa;\n  --bs-dark: #212529;\n  --bs-primary-rgb: 13, 110, 253;\n  --bs-secondary-rgb: 108, 117, 125;\n  --bs-success-rgb: 25, 135, 84;\n  --bs-info-rgb: 13, 202, 240;\n  --bs-warning-rgb: 255, 193, 7;\n  --bs-danger-rgb: 220, 53, 69;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 33, 37, 41;\n  --bs-primary-text-emphasis: #052c65;\n  --bs-secondary-text-emphasis: #2b2f32;\n  --bs-success-text-emphasis: #0a3622;\n  --bs-info-text-emphasis: #055160;\n  --bs-warning-text-emphasis: #664d03;\n  --bs-danger-text-emphasis: #58151c;\n  --bs-light-text-emphasis: #495057;\n  --bs-dark-text-emphasis: #495057;\n  --bs-primary-bg-subtle: #cfe2ff;\n  --bs-secondary-bg-subtle: #e2e3e5;\n  --bs-success-bg-subtle: #d1e7dd;\n  --bs-info-bg-subtle: #cff4fc;\n  --bs-warning-bg-subtle: #fff3cd;\n  --bs-danger-bg-subtle: #f8d7da;\n  --bs-light-bg-subtle: #fcfcfd;\n  --bs-dark-bg-subtle: #ced4da;\n  --bs-primary-border-subtle: #9ec5fe;\n  --bs-secondary-border-subtle: #c4c8cb;\n  --bs-success-border-subtle: #a3cfbb;\n  --bs-info-border-subtle: #9eeaf9;\n  --bs-warning-border-subtle: #ffe69c;\n  --bs-danger-border-subtle: #f1aeb5;\n  --bs-light-border-subtle: #e9ecef;\n  --bs-dark-border-subtle: #adb5bd;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #212529;\n  --bs-body-color-rgb: 33, 37, 41;\n  --bs-body-bg: #fff;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-emphasis-color: #000;\n  --bs-emphasis-color-rgb: 0, 0, 0;\n  --bs-secondary-color: rgba(33, 37, 41, 0.75);\n  --bs-secondary-color-rgb: 33, 37, 41;\n  --bs-secondary-bg: #e9ecef;\n  --bs-secondary-bg-rgb: 233, 236, 239;\n  --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n  --bs-tertiary-color-rgb: 33, 37, 41;\n  --bs-tertiary-bg: #f8f9fa;\n  --bs-tertiary-bg-rgb: 248, 249, 250;\n  --bs-heading-color: inherit;\n  --bs-link-color: #0d6efd;\n  --bs-link-color-rgb: 13, 110, 253;\n  --bs-link-decoration: underline;\n  --bs-link-hover-color: #0a58ca;\n  --bs-link-hover-color-rgb: 10, 88, 202;\n  --bs-code-color: #d63384;\n  --bs-highlight-color: #212529;\n  --bs-highlight-bg: #fff3cd;\n  --bs-border-width: 1px;\n  --bs-border-style: solid;\n  --bs-border-color: #dee2e6;\n  --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n  --bs-border-radius: 0.375rem;\n  --bs-border-radius-sm: 0.25rem;\n  --bs-border-radius-lg: 0.5rem;\n  --bs-border-radius-xl: 1rem;\n  --bs-border-radius-xxl: 2rem;\n  --bs-border-radius-2xl: var(--bs-border-radius-xxl);\n  --bs-border-radius-pill: 50rem;\n  --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n  --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);\n  --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n  --bs-focus-ring-width: 0.25rem;\n  --bs-focus-ring-opacity: 0.25;\n  --bs-focus-ring-color: rgba(13, 110, 253, 0.25);\n  --bs-form-valid-color: #198754;\n  --bs-form-valid-border-color: #198754;\n  --bs-form-invalid-color: #dc3545;\n  --bs-form-invalid-border-color: #dc3545;\n}\n\n[data-bs-theme=dark] {\n  color-scheme: dark;\n  --bs-body-color: #dee2e6;\n  --bs-body-color-rgb: 222, 226, 230;\n  --bs-body-bg: #212529;\n  --bs-body-bg-rgb: 33, 37, 41;\n  --bs-emphasis-color: #fff;\n  --bs-emphasis-color-rgb: 255, 255, 255;\n  --bs-secondary-color: rgba(222, 226, 230, 0.75);\n  --bs-secondary-color-rgb: 222, 226, 230;\n  --bs-secondary-bg: #343a40;\n  --bs-secondary-bg-rgb: 52, 58, 64;\n  --bs-tertiary-color: rgba(222, 226, 230, 0.5);\n  --bs-tertiary-color-rgb: 222, 226, 230;\n  --bs-tertiary-bg: #2b3035;\n  --bs-tertiary-bg-rgb: 43, 48, 53;\n  --bs-primary-text-emphasis: #6ea8fe;\n  --bs-secondary-text-emphasis: #a7acb1;\n  --bs-success-text-emphasis: #75b798;\n  --bs-info-text-emphasis: #6edff6;\n  --bs-warning-text-emphasis: #ffda6a;\n  --bs-danger-text-emphasis: #ea868f;\n  --bs-light-text-emphasis: #f8f9fa;\n  --bs-dark-text-emphasis: #dee2e6;\n  --bs-primary-bg-subtle: #031633;\n  --bs-secondary-bg-subtle: #161719;\n  --bs-success-bg-subtle: #051b11;\n  --bs-info-bg-subtle: #032830;\n  --bs-warning-bg-subtle: #332701;\n  --bs-danger-bg-subtle: #2c0b0e;\n  --bs-light-bg-subtle: #343a40;\n  --bs-dark-bg-subtle: #1a1d20;\n  --bs-primary-border-subtle: #084298;\n  --bs-secondary-border-subtle: #41464b;\n  --bs-success-border-subtle: #0f5132;\n  --bs-info-border-subtle: #087990;\n  --bs-warning-border-subtle: #997404;\n  --bs-danger-border-subtle: #842029;\n  --bs-light-border-subtle: #495057;\n  --bs-dark-border-subtle: #343a40;\n  --bs-heading-color: inherit;\n  --bs-link-color: #6ea8fe;\n  --bs-link-hover-color: #8bb9fe;\n  --bs-link-color-rgb: 110, 168, 254;\n  --bs-link-hover-color-rgb: 139, 185, 254;\n  --bs-code-color: #e685b5;\n  --bs-highlight-color: #dee2e6;\n  --bs-highlight-bg: #664d03;\n  --bs-border-color: #495057;\n  --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n  --bs-form-valid-color: #75b798;\n  --bs-form-valid-border-color: #75b798;\n  --bs-form-invalid-color: #ea868f;\n  --bs-form-invalid-border-color: #ea868f;\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.text-bg-primary {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n  color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-primary:hover, .link-primary:focus {\n  color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-secondary {\n  color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n  color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-success {\n  color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-success:hover, .link-success:focus {\n  color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-info {\n  color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-info:hover, .link-info:focus {\n  color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-warning {\n  color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-warning:hover, .link-warning:focus {\n  color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-danger {\n  color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-danger:hover, .link-danger:focus {\n  color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-light {\n  color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-light:hover, .link-light:focus {\n  color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-dark {\n  color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-dark:hover, .link-dark:focus {\n  color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-body-emphasis {\n  color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-body-emphasis:hover, .link-body-emphasis:focus {\n  color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n  text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n}\n\n.focus-ring:focus {\n  outline: 0;\n  box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);\n}\n\n.icon-link {\n  display: inline-flex;\n  gap: 0.375rem;\n  align-items: center;\n  -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n  text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n  text-underline-offset: 0.25em;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n.icon-link > .bi {\n  flex-shrink: 0;\n  width: 1em;\n  height: 1em;\n  fill: currentcolor;\n  transition: 0.2s ease-in-out transform;\n}\n@media (prefers-reduced-motion: reduce) {\n  .icon-link > .bi {\n    transition: none;\n  }\n}\n\n.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi {\n  transform: var(--bs-icon-link-transform, translate3d(-0.25em, 0, 0));\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n.ratio > * {\n  position: absolute;\n  top: 0;\n  right: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n.sticky-bottom {\n  position: -webkit-sticky;\n  position: sticky;\n  bottom: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-sm-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-md-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-lg-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-xl-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-xxl-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n.hstack {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  align-self: stretch;\n}\n\n.vstack {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n.visually-hidden:not(caption),\n.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {\n  position: absolute !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  align-self: stretch;\n  width: var(--bs-border-width);\n  min-height: 1em;\n  background-color: currentcolor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: right !important;\n}\n\n.float-end {\n  float: left !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.object-fit-contain {\n  -o-object-fit: contain !important;\n  object-fit: contain !important;\n}\n\n.object-fit-cover {\n  -o-object-fit: cover !important;\n  object-fit: cover !important;\n}\n\n.object-fit-fill {\n  -o-object-fit: fill !important;\n  object-fit: fill !important;\n}\n\n.object-fit-scale {\n  -o-object-fit: scale-down !important;\n  object-fit: scale-down !important;\n}\n\n.object-fit-none {\n  -o-object-fit: none !important;\n  object-fit: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.overflow-x-auto {\n  overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n  overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n  overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n  overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n  overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n  overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n  overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n  overflow-y: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-inline-grid {\n  display: inline-grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: var(--bs-box-shadow) !important;\n}\n\n.shadow-sm {\n  box-shadow: var(--bs-box-shadow-sm) !important;\n}\n\n.shadow-lg {\n  box-shadow: var(--bs-box-shadow-lg) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.focus-ring-primary {\n  --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-secondary {\n  --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-success {\n  --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-info {\n  --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-warning {\n  --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-danger {\n  --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-light {\n  --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-dark {\n  --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity));\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  right: 0 !important;\n}\n\n.start-50 {\n  right: 50% !important;\n}\n\n.start-100 {\n  right: 100% !important;\n}\n\n.end-0 {\n  left: 0 !important;\n}\n\n.end-50 {\n  left: 50% !important;\n}\n\n.end-100 {\n  left: 100% !important;\n}\n\n.translate-middle {\n  transform: translate(50%, -50%) !important;\n}\n\n.translate-middle-x {\n  transform: translateX(50%) !important;\n}\n\n.translate-middle-y {\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n  border-left: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n  border-right: 0 !important;\n}\n\n.border-primary {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-black {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n  border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n  border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n  border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n  border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n  border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n  border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n  border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n  border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.border-opacity-10 {\n  --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n  --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n  --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n  --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n  --bs-border-opacity: 1;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  flex-direction: row !important;\n}\n\n.flex-column {\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  align-content: center !important;\n}\n\n.align-content-between {\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  align-self: auto !important;\n}\n\n.align-self-start {\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  align-self: stretch !important;\n}\n\n.order-first {\n  order: -1 !important;\n}\n\n.order-0 {\n  order: 0 !important;\n}\n\n.order-1 {\n  order: 1 !important;\n}\n\n.order-2 {\n  order: 2 !important;\n}\n\n.order-3 {\n  order: 3 !important;\n}\n\n.order-4 {\n  order: 4 !important;\n}\n\n.order-5 {\n  order: 5 !important;\n}\n\n.order-last {\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-left: 0 !important;\n  margin-right: 0 !important;\n}\n\n.mx-1 {\n  margin-left: 0.25rem !important;\n  margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-left: 0.5rem !important;\n  margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-left: 1rem !important;\n  margin-right: 1rem !important;\n}\n\n.mx-4 {\n  margin-left: 1.5rem !important;\n  margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-left: 3rem !important;\n  margin-right: 3rem !important;\n}\n\n.mx-auto {\n  margin-left: auto !important;\n  margin-right: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-left: 0 !important;\n}\n\n.me-1 {\n  margin-left: 0.25rem !important;\n}\n\n.me-2 {\n  margin-left: 0.5rem !important;\n}\n\n.me-3 {\n  margin-left: 1rem !important;\n}\n\n.me-4 {\n  margin-left: 1.5rem !important;\n}\n\n.me-5 {\n  margin-left: 3rem !important;\n}\n\n.me-auto {\n  margin-left: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-right: 0 !important;\n}\n\n.ms-1 {\n  margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-right: 1rem !important;\n}\n\n.ms-4 {\n  margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-right: 3rem !important;\n}\n\n.ms-auto {\n  margin-right: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-left: 0 !important;\n  padding-right: 0 !important;\n}\n\n.px-1 {\n  padding-left: 0.25rem !important;\n  padding-right: 0.25rem !important;\n}\n\n.px-2 {\n  padding-left: 0.5rem !important;\n  padding-right: 0.5rem !important;\n}\n\n.px-3 {\n  padding-left: 1rem !important;\n  padding-right: 1rem !important;\n}\n\n.px-4 {\n  padding-left: 1.5rem !important;\n  padding-right: 1.5rem !important;\n}\n\n.px-5 {\n  padding-left: 3rem !important;\n  padding-right: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-left: 0 !important;\n}\n\n.pe-1 {\n  padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-left: 1rem !important;\n}\n\n.pe-4 {\n  padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-left: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-right: 0 !important;\n}\n\n.ps-1 {\n  padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-right: 1rem !important;\n}\n\n.ps-4 {\n  padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-right: 3rem !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.row-gap-0 {\n  row-gap: 0 !important;\n}\n\n.row-gap-1 {\n  row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n  row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n  row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n  row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n  row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n  -moz-column-gap: 0 !important;\n  column-gap: 0 !important;\n}\n\n.column-gap-1 {\n  -moz-column-gap: 0.25rem !important;\n  column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n  -moz-column-gap: 0.5rem !important;\n  column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n  -moz-column-gap: 1rem !important;\n  column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n  -moz-column-gap: 1.5rem !important;\n  column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n  -moz-column-gap: 3rem !important;\n  column-gap: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-medium {\n  font-weight: 500 !important;\n}\n\n.fw-semibold {\n  font-weight: 600 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: right !important;\n}\n\n.text-end {\n  text-align: left !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n  --bs-text-opacity: 1;\n  color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n  --bs-text-opacity: 1;\n  color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n  --bs-text-opacity: 1;\n  color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n  color: var(--bs-primary-text-emphasis) !important;\n}\n\n.text-secondary-emphasis {\n  color: var(--bs-secondary-text-emphasis) !important;\n}\n\n.text-success-emphasis {\n  color: var(--bs-success-text-emphasis) !important;\n}\n\n.text-info-emphasis {\n  color: var(--bs-info-text-emphasis) !important;\n}\n\n.text-warning-emphasis {\n  color: var(--bs-warning-text-emphasis) !important;\n}\n\n.text-danger-emphasis {\n  color: var(--bs-danger-text-emphasis) !important;\n}\n\n.text-light-emphasis {\n  color: var(--bs-light-text-emphasis) !important;\n}\n\n.text-dark-emphasis {\n  color: var(--bs-dark-text-emphasis) !important;\n}\n\n.link-opacity-10 {\n  --bs-link-opacity: 0.1;\n}\n\n.link-opacity-10-hover:hover {\n  --bs-link-opacity: 0.1;\n}\n\n.link-opacity-25 {\n  --bs-link-opacity: 0.25;\n}\n\n.link-opacity-25-hover:hover {\n  --bs-link-opacity: 0.25;\n}\n\n.link-opacity-50 {\n  --bs-link-opacity: 0.5;\n}\n\n.link-opacity-50-hover:hover {\n  --bs-link-opacity: 0.5;\n}\n\n.link-opacity-75 {\n  --bs-link-opacity: 0.75;\n}\n\n.link-opacity-75-hover:hover {\n  --bs-link-opacity: 0.75;\n}\n\n.link-opacity-100 {\n  --bs-link-opacity: 1;\n}\n\n.link-opacity-100-hover:hover {\n  --bs-link-opacity: 1;\n}\n\n.link-offset-1 {\n  text-underline-offset: 0.125em !important;\n}\n\n.link-offset-1-hover:hover {\n  text-underline-offset: 0.125em !important;\n}\n\n.link-offset-2 {\n  text-underline-offset: 0.25em !important;\n}\n\n.link-offset-2-hover:hover {\n  text-underline-offset: 0.25em !important;\n}\n\n.link-offset-3 {\n  text-underline-offset: 0.375em !important;\n}\n\n.link-offset-3-hover:hover {\n  text-underline-offset: 0.375em !important;\n}\n\n.link-underline-primary {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-secondary {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-success {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-info {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-warning {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-danger {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-light {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-dark {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-underline-opacity-0 {\n  --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-0-hover:hover {\n  --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-10 {\n  --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-10-hover:hover {\n  --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-25 {\n  --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-25-hover:hover {\n  --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-50 {\n  --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-50-hover:hover {\n  --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-75 {\n  --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-75-hover:hover {\n  --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-100 {\n  --bs-link-underline-opacity: 1;\n}\n\n.link-underline-opacity-100-hover:hover {\n  --bs-link-underline-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-body-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n  background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n  background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n  background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n  background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n  background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n  background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n  background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n  background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n  border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n  border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n  border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n  border-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n  border-top-right-radius: var(--bs-border-radius) !important;\n  border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n  border-top-right-radius: 0 !important;\n  border-top-left-radius: 0 !important;\n}\n\n.rounded-top-1 {\n  border-top-right-radius: var(--bs-border-radius-sm) !important;\n  border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n  border-top-right-radius: var(--bs-border-radius) !important;\n  border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n  border-top-right-radius: var(--bs-border-radius-lg) !important;\n  border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n  border-top-right-radius: var(--bs-border-radius-xl) !important;\n  border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n  border-top-right-radius: var(--bs-border-radius-xxl) !important;\n  border-top-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-top-circle {\n  border-top-right-radius: 50% !important;\n  border-top-left-radius: 50% !important;\n}\n\n.rounded-top-pill {\n  border-top-right-radius: var(--bs-border-radius-pill) !important;\n  border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n  border-top-left-radius: var(--bs-border-radius) !important;\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n  border-top-left-radius: 0 !important;\n  border-bottom-left-radius: 0 !important;\n}\n\n.rounded-end-1 {\n  border-top-left-radius: var(--bs-border-radius-sm) !important;\n  border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n  border-top-left-radius: var(--bs-border-radius) !important;\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n  border-top-left-radius: var(--bs-border-radius-lg) !important;\n  border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n  border-top-left-radius: var(--bs-border-radius-xl) !important;\n  border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n  border-top-left-radius: var(--bs-border-radius-xxl) !important;\n  border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-end-circle {\n  border-top-left-radius: 50% !important;\n  border-bottom-left-radius: 50% !important;\n}\n\n.rounded-end-pill {\n  border-top-left-radius: var(--bs-border-radius-pill) !important;\n  border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n  border-bottom-left-radius: 0 !important;\n  border-bottom-right-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n  border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n  border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n  border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n  border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n  border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n  border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n  border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n  border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-bottom-circle {\n  border-bottom-left-radius: 50% !important;\n  border-bottom-right-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n  border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n  border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n  border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n  border-bottom-right-radius: 0 !important;\n  border-top-right-radius: 0 !important;\n}\n\n.rounded-start-1 {\n  border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n  border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n  border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n  border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n  border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n  border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n  border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n  border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n  border-top-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-start-circle {\n  border-bottom-right-radius: 50% !important;\n  border-top-right-radius: 50% !important;\n}\n\n.rounded-start-pill {\n  border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n  border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n.z-n1 {\n  z-index: -1 !important;\n}\n\n.z-0 {\n  z-index: 0 !important;\n}\n\n.z-1 {\n  z-index: 1 !important;\n}\n\n.z-2 {\n  z-index: 2 !important;\n}\n\n.z-3 {\n  z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: right !important;\n  }\n  .float-sm-end {\n    float: left !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .object-fit-sm-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-sm-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-sm-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-sm-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-sm-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-sm-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    order: 5 !important;\n  }\n  .order-sm-last {\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-left: 0 !important;\n  }\n  .me-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-left: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-right: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-right: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-sm-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-left: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-right: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-sm-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-sm-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-sm-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-sm-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-sm-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-sm-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-sm-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-sm-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-sm-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-sm-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-sm-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-sm-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: right !important;\n  }\n  .text-sm-end {\n    text-align: left !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 768px) {\n  .float-md-start {\n    float: right !important;\n  }\n  .float-md-end {\n    float: left !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .object-fit-md-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-md-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-md-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-md-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-md-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-md-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    order: -1 !important;\n  }\n  .order-md-0 {\n    order: 0 !important;\n  }\n  .order-md-1 {\n    order: 1 !important;\n  }\n  .order-md-2 {\n    order: 2 !important;\n  }\n  .order-md-3 {\n    order: 3 !important;\n  }\n  .order-md-4 {\n    order: 4 !important;\n  }\n  .order-md-5 {\n    order: 5 !important;\n  }\n  .order-md-last {\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-md-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-left: 0 !important;\n  }\n  .me-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-left: 1rem !important;\n  }\n  .me-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-left: 3rem !important;\n  }\n  .me-md-auto {\n    margin-left: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-right: 0 !important;\n  }\n  .ms-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-right: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-md-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-md-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-left: 0 !important;\n  }\n  .pe-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-right: 0 !important;\n  }\n  .ps-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-right: 3rem !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-md-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-md-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-md-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-md-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-md-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-md-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-md-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-md-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-md-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-md-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-md-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-md-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-md-start {\n    text-align: right !important;\n  }\n  .text-md-end {\n    text-align: left !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: right !important;\n  }\n  .float-lg-end {\n    float: left !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .object-fit-lg-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-lg-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-lg-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-lg-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-lg-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-lg-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    order: 5 !important;\n  }\n  .order-lg-last {\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-left: 0 !important;\n  }\n  .me-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-left: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-right: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-right: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-lg-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-left: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-right: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-lg-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-lg-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-lg-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-lg-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-lg-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-lg-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-lg-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-lg-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-lg-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-lg-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-lg-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-lg-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: right !important;\n  }\n  .text-lg-end {\n    text-align: left !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: right !important;\n  }\n  .float-xl-end {\n    float: left !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .object-fit-xl-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-xl-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-xl-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-xl-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-xl-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    order: 5 !important;\n  }\n  .order-xl-last {\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-left: 0 !important;\n  }\n  .me-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-left: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-right: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-right: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-xl-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-left: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-right: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-xl-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-xl-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-xl-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-xl-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-xl-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-xl-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-xl-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-xl-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-xl-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-xl-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-xl-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-xl-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: right !important;\n  }\n  .text-xl-end {\n    text-align: left !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: right !important;\n  }\n  .float-xxl-end {\n    float: left !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .object-fit-xxl-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-xxl-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-xxl-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-xxl-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-xxl-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xxl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-left: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-right: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-xxl-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-xxl-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-xxl-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-xxl-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-xxl-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-xxl-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-xxl-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-xxl-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-xxl-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-xxl-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-xxl-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-xxl-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: right !important;\n  }\n  .text-xxl-end {\n    text-align: left !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap-utilities.rtl.css.map */"
  },
  {
    "path": "public/assets/bootstrap-5.3.2-dist/css/bootstrap.css",
    "content": "@charset \"UTF-8\";\n/*!\n * Bootstrap  v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n  --bs-blue: #0d6efd;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #d63384;\n  --bs-red: #dc3545;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ffc107;\n  --bs-green: #198754;\n  --bs-teal: #20c997;\n  --bs-cyan: #0dcaf0;\n  --bs-black: #000;\n  --bs-white: #fff;\n  --bs-gray: #6c757d;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #6c757d;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #0d6efd;\n  --bs-secondary: #6c757d;\n  --bs-success: #198754;\n  --bs-info: #0dcaf0;\n  --bs-warning: #ffc107;\n  --bs-danger: #dc3545;\n  --bs-light: #f8f9fa;\n  --bs-dark: #212529;\n  --bs-primary-rgb: 13, 110, 253;\n  --bs-secondary-rgb: 108, 117, 125;\n  --bs-success-rgb: 25, 135, 84;\n  --bs-info-rgb: 13, 202, 240;\n  --bs-warning-rgb: 255, 193, 7;\n  --bs-danger-rgb: 220, 53, 69;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 33, 37, 41;\n  --bs-primary-text-emphasis: #052c65;\n  --bs-secondary-text-emphasis: #2b2f32;\n  --bs-success-text-emphasis: #0a3622;\n  --bs-info-text-emphasis: #055160;\n  --bs-warning-text-emphasis: #664d03;\n  --bs-danger-text-emphasis: #58151c;\n  --bs-light-text-emphasis: #495057;\n  --bs-dark-text-emphasis: #495057;\n  --bs-primary-bg-subtle: #cfe2ff;\n  --bs-secondary-bg-subtle: #e2e3e5;\n  --bs-success-bg-subtle: #d1e7dd;\n  --bs-info-bg-subtle: #cff4fc;\n  --bs-warning-bg-subtle: #fff3cd;\n  --bs-danger-bg-subtle: #f8d7da;\n  --bs-light-bg-subtle: #fcfcfd;\n  --bs-dark-bg-subtle: #ced4da;\n  --bs-primary-border-subtle: #9ec5fe;\n  --bs-secondary-border-subtle: #c4c8cb;\n  --bs-success-border-subtle: #a3cfbb;\n  --bs-info-border-subtle: #9eeaf9;\n  --bs-warning-border-subtle: #ffe69c;\n  --bs-danger-border-subtle: #f1aeb5;\n  --bs-light-border-subtle: #e9ecef;\n  --bs-dark-border-subtle: #adb5bd;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #212529;\n  --bs-body-color-rgb: 33, 37, 41;\n  --bs-body-bg: #fff;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-emphasis-color: #000;\n  --bs-emphasis-color-rgb: 0, 0, 0;\n  --bs-secondary-color: rgba(33, 37, 41, 0.75);\n  --bs-secondary-color-rgb: 33, 37, 41;\n  --bs-secondary-bg: #e9ecef;\n  --bs-secondary-bg-rgb: 233, 236, 239;\n  --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n  --bs-tertiary-color-rgb: 33, 37, 41;\n  --bs-tertiary-bg: #f8f9fa;\n  --bs-tertiary-bg-rgb: 248, 249, 250;\n  --bs-heading-color: inherit;\n  --bs-link-color: #0d6efd;\n  --bs-link-color-rgb: 13, 110, 253;\n  --bs-link-decoration: underline;\n  --bs-link-hover-color: #0a58ca;\n  --bs-link-hover-color-rgb: 10, 88, 202;\n  --bs-code-color: #d63384;\n  --bs-highlight-color: #212529;\n  --bs-highlight-bg: #fff3cd;\n  --bs-border-width: 1px;\n  --bs-border-style: solid;\n  --bs-border-color: #dee2e6;\n  --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n  --bs-border-radius: 0.375rem;\n  --bs-border-radius-sm: 0.25rem;\n  --bs-border-radius-lg: 0.5rem;\n  --bs-border-radius-xl: 1rem;\n  --bs-border-radius-xxl: 2rem;\n  --bs-border-radius-2xl: var(--bs-border-radius-xxl);\n  --bs-border-radius-pill: 50rem;\n  --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n  --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);\n  --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n  --bs-focus-ring-width: 0.25rem;\n  --bs-focus-ring-opacity: 0.25;\n  --bs-focus-ring-color: rgba(13, 110, 253, 0.25);\n  --bs-form-valid-color: #198754;\n  --bs-form-valid-border-color: #198754;\n  --bs-form-invalid-color: #dc3545;\n  --bs-form-invalid-border-color: #dc3545;\n}\n\n[data-bs-theme=dark] {\n  color-scheme: dark;\n  --bs-body-color: #dee2e6;\n  --bs-body-color-rgb: 222, 226, 230;\n  --bs-body-bg: #212529;\n  --bs-body-bg-rgb: 33, 37, 41;\n  --bs-emphasis-color: #fff;\n  --bs-emphasis-color-rgb: 255, 255, 255;\n  --bs-secondary-color: rgba(222, 226, 230, 0.75);\n  --bs-secondary-color-rgb: 222, 226, 230;\n  --bs-secondary-bg: #343a40;\n  --bs-secondary-bg-rgb: 52, 58, 64;\n  --bs-tertiary-color: rgba(222, 226, 230, 0.5);\n  --bs-tertiary-color-rgb: 222, 226, 230;\n  --bs-tertiary-bg: #2b3035;\n  --bs-tertiary-bg-rgb: 43, 48, 53;\n  --bs-primary-text-emphasis: #6ea8fe;\n  --bs-secondary-text-emphasis: #a7acb1;\n  --bs-success-text-emphasis: #75b798;\n  --bs-info-text-emphasis: #6edff6;\n  --bs-warning-text-emphasis: #ffda6a;\n  --bs-danger-text-emphasis: #ea868f;\n  --bs-light-text-emphasis: #f8f9fa;\n  --bs-dark-text-emphasis: #dee2e6;\n  --bs-primary-bg-subtle: #031633;\n  --bs-secondary-bg-subtle: #161719;\n  --bs-success-bg-subtle: #051b11;\n  --bs-info-bg-subtle: #032830;\n  --bs-warning-bg-subtle: #332701;\n  --bs-danger-bg-subtle: #2c0b0e;\n  --bs-light-bg-subtle: #343a40;\n  --bs-dark-bg-subtle: #1a1d20;\n  --bs-primary-border-subtle: #084298;\n  --bs-secondary-border-subtle: #41464b;\n  --bs-success-border-subtle: #0f5132;\n  --bs-info-border-subtle: #087990;\n  --bs-warning-border-subtle: #997404;\n  --bs-danger-border-subtle: #842029;\n  --bs-light-border-subtle: #495057;\n  --bs-dark-border-subtle: #343a40;\n  --bs-heading-color: inherit;\n  --bs-link-color: #6ea8fe;\n  --bs-link-hover-color: #8bb9fe;\n  --bs-link-color-rgb: 110, 168, 254;\n  --bs-link-hover-color-rgb: 139, 185, 254;\n  --bs-code-color: #e685b5;\n  --bs-highlight-color: #dee2e6;\n  --bs-highlight-bg: #664d03;\n  --bs-border-color: #495057;\n  --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n  --bs-form-valid-color: #75b798;\n  --bs-form-valid-border-color: #75b798;\n  --bs-form-invalid-color: #ea868f;\n  --bs-form-invalid-border-color: #ea868f;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  border: 0;\n  border-top: var(--bs-border-width) solid;\n  opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n  color: var(--bs-heading-color);\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: 0.5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.1875em;\n  color: var(--bs-highlight-color);\n  background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\na {\n  color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n  text-decoration: underline;\n}\na:hover {\n  --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: var(--bs-code-color);\n  word-wrap: break-word;\n}\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.1875rem 0.375rem;\n  font-size: 0.875em;\n  color: var(--bs-body-bg);\n  background-color: var(--bs-body-color);\n  border-radius: 0.25rem;\n}\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: var(--bs-secondary-color);\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=button] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\nselect:disabled {\n  opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n  display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n  -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=search] {\n  -webkit-appearance: textfield;\n  outline-offset: -2px;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\n::file-selector-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #6c757d;\n}\n.blockquote-footer::before {\n  content: \"— \";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: var(--bs-body-bg);\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  border-radius: var(--bs-border-radius);\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: var(--bs-secondary-color);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container-sm, .container {\n    max-width: 540px;\n  }\n}\n@media (min-width: 768px) {\n  .container-md, .container-sm, .container {\n    max-width: 720px;\n  }\n}\n@media (min-width: 992px) {\n  .container-lg, .container-md, .container-sm, .container {\n    max-width: 960px;\n  }\n}\n@media (min-width: 1200px) {\n  .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1140px;\n  }\n}\n@media (min-width: 1400px) {\n  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1320px;\n  }\n}\n:root {\n  --bs-breakpoint-xs: 0;\n  --bs-breakpoint-sm: 576px;\n  --bs-breakpoint-md: 768px;\n  --bs-breakpoint-lg: 992px;\n  --bs-breakpoint-xl: 1200px;\n  --bs-breakpoint-xxl: 1400px;\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: flex;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-0.5 * var(--bs-gutter-x));\n  margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.row-cols-4 > * {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-auto {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  flex: 0 0 auto;\n  width: 8.33333333%;\n}\n\n.col-2 {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-3 {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.col-5 {\n  flex: 0 0 auto;\n  width: 41.66666667%;\n}\n\n.col-6 {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  flex: 0 0 auto;\n  width: 58.33333333%;\n}\n\n.col-8 {\n  flex: 0 0 auto;\n  width: 66.66666667%;\n}\n\n.col-9 {\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  flex: 0 0 auto;\n  width: 83.33333333%;\n}\n\n.col-11 {\n  flex: 0 0 auto;\n  width: 91.66666667%;\n}\n\n.col-12 {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.33333333%;\n}\n\n.offset-2 {\n  margin-left: 16.66666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.33333333%;\n}\n\n.offset-5 {\n  margin-left: 41.66666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.33333333%;\n}\n\n.offset-8 {\n  margin-left: 66.66666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.33333333%;\n}\n\n.offset-11 {\n  margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-sm-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-sm-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-sm-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-sm-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-sm-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-sm-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-sm-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-sm-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-sm-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-sm-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 768px) {\n  .col-md {\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-md-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-md-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-md-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-md-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-md-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-md-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-md-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-md-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-md-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-md-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 992px) {\n  .col-lg {\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-lg-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-lg-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-lg-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-lg-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-lg-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-lg-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-lg-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-lg-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-lg-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-lg-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1200px) {\n  .col-xl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-xl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1400px) {\n  .col-xxl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-xxl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xxl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xxl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xxl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xxl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xxl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xxl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xxl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xxl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xxl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n.table {\n  --bs-table-color-type: initial;\n  --bs-table-bg-type: initial;\n  --bs-table-color-state: initial;\n  --bs-table-bg-state: initial;\n  --bs-table-color: var(--bs-emphasis-color);\n  --bs-table-bg: var(--bs-body-bg);\n  --bs-table-border-color: var(--bs-border-color);\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: var(--bs-emphasis-color);\n  --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);\n  --bs-table-active-color: var(--bs-emphasis-color);\n  --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);\n  --bs-table-hover-color: var(--bs-emphasis-color);\n  --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  vertical-align: top;\n  border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));\n  background-color: var(--bs-table-bg);\n  border-bottom-width: var(--bs-border-width);\n  box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)));\n}\n.table > tbody {\n  vertical-align: inherit;\n}\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table-group-divider {\n  border-top: calc(var(--bs-border-width) * 2) solid currentcolor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: var(--bs-border-width) 0;\n}\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 var(--bs-border-width);\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-color-type: var(--bs-table-striped-color);\n  --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n  --bs-table-color-type: var(--bs-table-striped-color);\n  --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-active {\n  --bs-table-color-state: var(--bs-table-active-color);\n  --bs-table-bg-state: var(--bs-table-active-bg);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-color-state: var(--bs-table-hover-color);\n  --bs-table-bg-state: var(--bs-table-hover-bg);\n}\n\n.table-primary {\n  --bs-table-color: #000;\n  --bs-table-bg: #cfe2ff;\n  --bs-table-border-color: #a6b5cc;\n  --bs-table-striped-bg: #c5d7f2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bacbe6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bfd1ec;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n  --bs-table-color: #000;\n  --bs-table-bg: #e2e3e5;\n  --bs-table-border-color: #b5b6b7;\n  --bs-table-striped-bg: #d7d8da;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #cbccce;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d1d2d4;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n  --bs-table-color: #000;\n  --bs-table-bg: #d1e7dd;\n  --bs-table-border-color: #a7b9b1;\n  --bs-table-striped-bg: #c7dbd2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bcd0c7;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c1d6cc;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n  --bs-table-color: #000;\n  --bs-table-bg: #cff4fc;\n  --bs-table-border-color: #a6c3ca;\n  --bs-table-striped-bg: #c5e8ef;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #badce3;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bfe2e9;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n  --bs-table-color: #000;\n  --bs-table-bg: #fff3cd;\n  --bs-table-border-color: #ccc2a4;\n  --bs-table-striped-bg: #f2e7c3;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6dbb9;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ece1be;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n  --bs-table-color: #000;\n  --bs-table-bg: #f8d7da;\n  --bs-table-border-color: #c6acae;\n  --bs-table-striped-bg: #eccccf;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfc2c4;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5c7ca;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n  --bs-table-color: #000;\n  --bs-table-bg: #f8f9fa;\n  --bs-table-border-color: #c6c7c8;\n  --bs-table-striped-bg: #ecedee;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfe0e1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5e6e7;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n  --bs-table-color: #fff;\n  --bs-table-bg: #212529;\n  --bs-table-border-color: #4d5154;\n  --bs-table-striped-bg: #2c3034;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #373b3e;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #323539;\n  --bs-table-hover-color: #fff;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + var(--bs-border-width));\n  padding-bottom: calc(0.375rem + var(--bs-border-width));\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + var(--bs-border-width));\n  padding-bottom: calc(0.5rem + var(--bs-border-width));\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + var(--bs-border-width));\n  padding-bottom: calc(0.25rem + var(--bs-border-width));\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: var(--bs-secondary-color);\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: var(--bs-body-color);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  background-color: var(--bs-body-bg);\n  background-clip: padding-box;\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  border-radius: var(--bs-border-radius);\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n.form-control[type=file] {\n  overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control:focus {\n  color: var(--bs-body-color);\n  background-color: var(--bs-body-bg);\n  border-color: #86b7fe;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n  min-width: 85px;\n  height: 1.5em;\n  margin: 0;\n}\n.form-control::-webkit-datetime-edit {\n  display: block;\n  padding: 0;\n}\n.form-control::-moz-placeholder {\n  color: var(--bs-secondary-color);\n  opacity: 1;\n}\n.form-control::placeholder {\n  color: var(--bs-secondary-color);\n  opacity: 1;\n}\n.form-control:disabled {\n  background-color: var(--bs-secondary-bg);\n  opacity: 1;\n}\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: var(--bs-body-color);\n  background-color: var(--bs-tertiary-bg);\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: var(--bs-border-width);\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: var(--bs-body-color);\n  background-color: var(--bs-tertiary-bg);\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: var(--bs-border-width);\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: var(--bs-secondary-bg);\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: var(--bs-secondary-bg);\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: var(--bs-body-color);\n  background-color: transparent;\n  border: solid transparent;\n  border-width: var(--bs-border-width) 0;\n}\n.form-control-plaintext:focus {\n  outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: var(--bs-border-radius-sm);\n}\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: var(--bs-border-radius-lg);\n}\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-control-color {\n  width: 3rem;\n  height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n  padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n  border: 0 !important;\n  border-radius: var(--bs-border-radius);\n}\n.form-control-color::-webkit-color-swatch {\n  border: 0 !important;\n  border-radius: var(--bs-border-radius);\n}\n.form-control-color.form-control-sm {\n  height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\n.form-control-color.form-control-lg {\n  height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-select {\n  --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: var(--bs-body-color);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  background-color: var(--bs-body-bg);\n  background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  border-radius: var(--bs-border-radius);\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n.form-select:focus {\n  border-color: #86b7fe;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n.form-select:disabled {\n  background-color: var(--bs-secondary-bg);\n}\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 var(--bs-body-color);\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: var(--bs-border-radius-sm);\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: var(--bs-border-radius-lg);\n}\n\n[data-bs-theme=dark] .form-select {\n  --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-reverse {\n  padding-right: 1.5em;\n  padding-left: 0;\n  text-align: right;\n}\n.form-check-reverse .form-check-input {\n  float: right;\n  margin-right: -1.5em;\n  margin-left: 0;\n}\n\n.form-check-input {\n  --bs-form-check-bg: var(--bs-body-bg);\n  flex-shrink: 0;\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  background-color: var(--bs-form-check-bg);\n  background-image: var(--bs-form-check-bg-image);\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n  print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n  border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n  border-radius: 50%;\n}\n.form-check-input:active {\n  filter: brightness(90%);\n}\n.form-check-input:focus {\n  border-color: #86b7fe;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n  --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n  --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n  --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  cursor: default;\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n  --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: var(--bs-form-switch-bg);\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n.form-switch .form-check-input:focus {\n  --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n  padding-right: 2.5em;\n  padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n  margin-right: -2.5em;\n  margin-left: 0;\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {\n  --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\");\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  background-color: transparent;\n}\n.form-range:focus {\n  outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  -webkit-appearance: none;\n  appearance: none;\n  background-color: #0d6efd;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n.form-range::-webkit-slider-thumb:active {\n  background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: var(--bs-secondary-bg);\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  -moz-appearance: none;\n  appearance: none;\n  background-color: #0d6efd;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n.form-range::-moz-range-thumb:active {\n  background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: var(--bs-secondary-bg);\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range:disabled {\n  pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: var(--bs-secondary-color);\n}\n.form-range:disabled::-moz-range-thumb {\n  background-color: var(--bs-secondary-color);\n}\n\n.form-floating {\n  position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n  height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n  min-height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n  line-height: 1.25;\n}\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 2;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  overflow: hidden;\n  text-align: start;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  pointer-events: none;\n  border: var(--bs-border-width) solid transparent;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n  padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {\n  color: transparent;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n  color: transparent;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  color: rgba(var(--bs-body-color-rgb), 0.65);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n  color: rgba(var(--bs-body-color-rgb), 0.65);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label::after {\n  position: absolute;\n  inset: 1rem 0.375rem;\n  z-index: -1;\n  height: 1.5em;\n  content: \"\";\n  background-color: var(--bs-body-bg);\n  border-radius: var(--bs-border-radius);\n}\n.form-floating > .form-control:focus ~ label::after,\n.form-floating > .form-control:not(:placeholder-shown) ~ label::after,\n.form-floating > .form-control-plaintext ~ label::after,\n.form-floating > .form-select ~ label::after {\n  position: absolute;\n  inset: 1rem 0.375rem;\n  z-index: -1;\n  height: 1.5em;\n  content: \"\";\n  background-color: var(--bs-body-bg);\n  border-radius: var(--bs-border-radius);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n  color: rgba(var(--bs-body-color-rgb), 0.65);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n  border-width: var(--bs-border-width) 0;\n}\n.form-floating > :disabled ~ label,\n.form-floating > .form-control:disabled ~ label {\n  color: #6c757d;\n}\n.form-floating > :disabled ~ label::after,\n.form-floating > .form-control:disabled ~ label::after {\n  background-color: var(--bs-secondary-bg);\n}\n\n.input-group {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: stretch;\n  width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n  position: relative;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n  z-index: 5;\n}\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n.input-group .btn:focus {\n  z-index: 5;\n}\n\n.input-group-text {\n  display: flex;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: var(--bs-body-color);\n  text-align: center;\n  white-space: nowrap;\n  background-color: var(--bs-tertiary-bg);\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  border-radius: var(--bs-border-radius);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: var(--bs-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: var(--bs-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: calc(var(--bs-border-width) * -1);\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: var(--bs-form-valid-color);\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: 0.1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: var(--bs-success);\n  border-radius: var(--bs-border-radius);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: var(--bs-form-valid-border-color);\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: var(--bs-form-valid-border-color);\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  padding-right: 4.125rem;\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: var(--bs-form-valid-border-color);\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n  width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: var(--bs-form-valid-color);\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: var(--bs-form-valid-color);\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: var(--bs-form-invalid-color);\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: 0.1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: var(--bs-danger);\n  border-radius: var(--bs-border-radius);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: var(--bs-form-invalid-border-color);\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: var(--bs-form-invalid-border-color);\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n  padding-right: 4.125rem;\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: var(--bs-form-invalid-border-color);\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n  width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: var(--bs-form-invalid-color);\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: var(--bs-form-invalid-color);\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n  z-index: 4;\n}\n\n.btn {\n  --bs-btn-padding-x: 0.75rem;\n  --bs-btn-padding-y: 0.375rem;\n  --bs-btn-font-family: ;\n  --bs-btn-font-size: 1rem;\n  --bs-btn-font-weight: 400;\n  --bs-btn-line-height: 1.5;\n  --bs-btn-color: var(--bs-body-color);\n  --bs-btn-bg: transparent;\n  --bs-btn-border-width: var(--bs-border-width);\n  --bs-btn-border-color: transparent;\n  --bs-btn-border-radius: var(--bs-border-radius);\n  --bs-btn-hover-border-color: transparent;\n  --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n  --bs-btn-disabled-opacity: 0.65;\n  --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n  display: inline-block;\n  padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n  font-family: var(--bs-btn-font-family);\n  font-size: var(--bs-btn-font-size);\n  font-weight: var(--bs-btn-font-weight);\n  line-height: var(--bs-btn-line-height);\n  color: var(--bs-btn-color);\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n  border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n  border-radius: var(--bs-btn-border-radius);\n  background-color: var(--bs-btn-bg);\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n.btn:hover {\n  color: var(--bs-btn-hover-color);\n  background-color: var(--bs-btn-hover-bg);\n  border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n  color: var(--bs-btn-color);\n  background-color: var(--bs-btn-bg);\n  border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n  color: var(--bs-btn-hover-color);\n  background-color: var(--bs-btn-hover-bg);\n  border-color: var(--bs-btn-hover-border-color);\n  outline: 0;\n  box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n  border-color: var(--bs-btn-hover-border-color);\n  outline: 0;\n  box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n  color: var(--bs-btn-active-color);\n  background-color: var(--bs-btn-active-bg);\n  border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n  box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n  color: var(--bs-btn-disabled-color);\n  pointer-events: none;\n  background-color: var(--bs-btn-disabled-bg);\n  border-color: var(--bs-btn-disabled-border-color);\n  opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #0d6efd;\n  --bs-btn-border-color: #0d6efd;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #0b5ed7;\n  --bs-btn-hover-border-color: #0a58ca;\n  --bs-btn-focus-shadow-rgb: 49, 132, 253;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #0a58ca;\n  --bs-btn-active-border-color: #0a53be;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #0d6efd;\n  --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #6c757d;\n  --bs-btn-border-color: #6c757d;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #5c636a;\n  --bs-btn-hover-border-color: #565e64;\n  --bs-btn-focus-shadow-rgb: 130, 138, 145;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #565e64;\n  --bs-btn-active-border-color: #51585e;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #6c757d;\n  --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #198754;\n  --bs-btn-border-color: #198754;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #157347;\n  --bs-btn-hover-border-color: #146c43;\n  --bs-btn-focus-shadow-rgb: 60, 153, 110;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #146c43;\n  --bs-btn-active-border-color: #13653f;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #198754;\n  --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n  --bs-btn-color: #000;\n  --bs-btn-bg: #0dcaf0;\n  --bs-btn-border-color: #0dcaf0;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #31d2f2;\n  --bs-btn-hover-border-color: #25cff2;\n  --bs-btn-focus-shadow-rgb: 11, 172, 204;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #3dd5f3;\n  --bs-btn-active-border-color: #25cff2;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #000;\n  --bs-btn-disabled-bg: #0dcaf0;\n  --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n  --bs-btn-color: #000;\n  --bs-btn-bg: #ffc107;\n  --bs-btn-border-color: #ffc107;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #ffca2c;\n  --bs-btn-hover-border-color: #ffc720;\n  --bs-btn-focus-shadow-rgb: 217, 164, 6;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #ffcd39;\n  --bs-btn-active-border-color: #ffc720;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #000;\n  --bs-btn-disabled-bg: #ffc107;\n  --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #dc3545;\n  --bs-btn-border-color: #dc3545;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #bb2d3b;\n  --bs-btn-hover-border-color: #b02a37;\n  --bs-btn-focus-shadow-rgb: 225, 83, 97;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #b02a37;\n  --bs-btn-active-border-color: #a52834;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #dc3545;\n  --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n  --bs-btn-color: #000;\n  --bs-btn-bg: #f8f9fa;\n  --bs-btn-border-color: #f8f9fa;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #d3d4d5;\n  --bs-btn-hover-border-color: #c6c7c8;\n  --bs-btn-focus-shadow-rgb: 211, 212, 213;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #c6c7c8;\n  --bs-btn-active-border-color: #babbbc;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #000;\n  --bs-btn-disabled-bg: #f8f9fa;\n  --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #212529;\n  --bs-btn-border-color: #212529;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #424649;\n  --bs-btn-hover-border-color: #373b3e;\n  --bs-btn-focus-shadow-rgb: 66, 70, 73;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #4d5154;\n  --bs-btn-active-border-color: #373b3e;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #212529;\n  --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n  --bs-btn-color: #0d6efd;\n  --bs-btn-border-color: #0d6efd;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #0d6efd;\n  --bs-btn-hover-border-color: #0d6efd;\n  --bs-btn-focus-shadow-rgb: 13, 110, 253;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #0d6efd;\n  --bs-btn-active-border-color: #0d6efd;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #0d6efd;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #0d6efd;\n  --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n  --bs-btn-color: #6c757d;\n  --bs-btn-border-color: #6c757d;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #6c757d;\n  --bs-btn-hover-border-color: #6c757d;\n  --bs-btn-focus-shadow-rgb: 108, 117, 125;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #6c757d;\n  --bs-btn-active-border-color: #6c757d;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #6c757d;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #6c757d;\n  --bs-gradient: none;\n}\n\n.btn-outline-success {\n  --bs-btn-color: #198754;\n  --bs-btn-border-color: #198754;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #198754;\n  --bs-btn-hover-border-color: #198754;\n  --bs-btn-focus-shadow-rgb: 25, 135, 84;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #198754;\n  --bs-btn-active-border-color: #198754;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #198754;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #198754;\n  --bs-gradient: none;\n}\n\n.btn-outline-info {\n  --bs-btn-color: #0dcaf0;\n  --bs-btn-border-color: #0dcaf0;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #0dcaf0;\n  --bs-btn-hover-border-color: #0dcaf0;\n  --bs-btn-focus-shadow-rgb: 13, 202, 240;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #0dcaf0;\n  --bs-btn-active-border-color: #0dcaf0;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #0dcaf0;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #0dcaf0;\n  --bs-gradient: none;\n}\n\n.btn-outline-warning {\n  --bs-btn-color: #ffc107;\n  --bs-btn-border-color: #ffc107;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #ffc107;\n  --bs-btn-hover-border-color: #ffc107;\n  --bs-btn-focus-shadow-rgb: 255, 193, 7;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #ffc107;\n  --bs-btn-active-border-color: #ffc107;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #ffc107;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #ffc107;\n  --bs-gradient: none;\n}\n\n.btn-outline-danger {\n  --bs-btn-color: #dc3545;\n  --bs-btn-border-color: #dc3545;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #dc3545;\n  --bs-btn-hover-border-color: #dc3545;\n  --bs-btn-focus-shadow-rgb: 220, 53, 69;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #dc3545;\n  --bs-btn-active-border-color: #dc3545;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #dc3545;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #dc3545;\n  --bs-gradient: none;\n}\n\n.btn-outline-light {\n  --bs-btn-color: #f8f9fa;\n  --bs-btn-border-color: #f8f9fa;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #f8f9fa;\n  --bs-btn-hover-border-color: #f8f9fa;\n  --bs-btn-focus-shadow-rgb: 248, 249, 250;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #f8f9fa;\n  --bs-btn-active-border-color: #f8f9fa;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #f8f9fa;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #f8f9fa;\n  --bs-gradient: none;\n}\n\n.btn-outline-dark {\n  --bs-btn-color: #212529;\n  --bs-btn-border-color: #212529;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #212529;\n  --bs-btn-hover-border-color: #212529;\n  --bs-btn-focus-shadow-rgb: 33, 37, 41;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #212529;\n  --bs-btn-active-border-color: #212529;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #212529;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #212529;\n  --bs-gradient: none;\n}\n\n.btn-link {\n  --bs-btn-font-weight: 400;\n  --bs-btn-color: var(--bs-link-color);\n  --bs-btn-bg: transparent;\n  --bs-btn-border-color: transparent;\n  --bs-btn-hover-color: var(--bs-link-hover-color);\n  --bs-btn-hover-border-color: transparent;\n  --bs-btn-active-color: var(--bs-link-hover-color);\n  --bs-btn-active-border-color: transparent;\n  --bs-btn-disabled-color: #6c757d;\n  --bs-btn-disabled-border-color: transparent;\n  --bs-btn-box-shadow: 0 0 0 #000;\n  --bs-btn-focus-shadow-rgb: 49, 132, 253;\n  text-decoration: underline;\n}\n.btn-link:focus-visible {\n  color: var(--bs-btn-color);\n}\n.btn-link:hover {\n  color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  --bs-btn-padding-y: 0.5rem;\n  --bs-btn-padding-x: 1rem;\n  --bs-btn-font-size: 1.25rem;\n  --bs-btn-border-radius: var(--bs-border-radius-lg);\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  --bs-btn-padding-y: 0.25rem;\n  --bs-btn-padding-x: 0.5rem;\n  --bs-btn-font-size: 0.875rem;\n  --bs-btn-border-radius: var(--bs-border-radius-sm);\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  --bs-dropdown-zindex: 1000;\n  --bs-dropdown-min-width: 10rem;\n  --bs-dropdown-padding-x: 0;\n  --bs-dropdown-padding-y: 0.5rem;\n  --bs-dropdown-spacer: 0.125rem;\n  --bs-dropdown-font-size: 1rem;\n  --bs-dropdown-color: var(--bs-body-color);\n  --bs-dropdown-bg: var(--bs-body-bg);\n  --bs-dropdown-border-color: var(--bs-border-color-translucent);\n  --bs-dropdown-border-radius: var(--bs-border-radius);\n  --bs-dropdown-border-width: var(--bs-border-width);\n  --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));\n  --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n  --bs-dropdown-divider-margin-y: 0.5rem;\n  --bs-dropdown-box-shadow: var(--bs-box-shadow);\n  --bs-dropdown-link-color: var(--bs-body-color);\n  --bs-dropdown-link-hover-color: var(--bs-body-color);\n  --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);\n  --bs-dropdown-link-active-color: #fff;\n  --bs-dropdown-link-active-bg: #0d6efd;\n  --bs-dropdown-link-disabled-color: var(--bs-tertiary-color);\n  --bs-dropdown-item-padding-x: 1rem;\n  --bs-dropdown-item-padding-y: 0.25rem;\n  --bs-dropdown-header-color: #6c757d;\n  --bs-dropdown-header-padding-x: 1rem;\n  --bs-dropdown-header-padding-y: 0.5rem;\n  position: absolute;\n  z-index: var(--bs-dropdown-zindex);\n  display: none;\n  min-width: var(--bs-dropdown-min-width);\n  padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n  margin: 0;\n  font-size: var(--bs-dropdown-font-size);\n  color: var(--bs-dropdown-color);\n  text-align: left;\n  list-style: none;\n  background-color: var(--bs-dropdown-bg);\n  background-clip: padding-box;\n  border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n  border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: var(--bs-dropdown-divider-margin-y) 0;\n  overflow: hidden;\n  border-top: 1px solid var(--bs-dropdown-divider-bg);\n  opacity: 1;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n  clear: both;\n  font-weight: 400;\n  color: var(--bs-dropdown-link-color);\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n  border-radius: var(--bs-dropdown-item-border-radius, 0);\n}\n.dropdown-item:hover, .dropdown-item:focus {\n  color: var(--bs-dropdown-link-hover-color);\n  background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n  color: var(--bs-dropdown-link-active-color);\n  text-decoration: none;\n  background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: var(--bs-dropdown-link-disabled-color);\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: var(--bs-dropdown-header-color);\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n  color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n  --bs-dropdown-color: #dee2e6;\n  --bs-dropdown-bg: #343a40;\n  --bs-dropdown-border-color: var(--bs-border-color-translucent);\n  --bs-dropdown-box-shadow: ;\n  --bs-dropdown-link-color: #dee2e6;\n  --bs-dropdown-link-hover-color: #fff;\n  --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n  --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n  --bs-dropdown-link-active-color: #fff;\n  --bs-dropdown-link-active-bg: #0d6efd;\n  --bs-dropdown-link-disabled-color: #adb5bd;\n  --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-flex;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group {\n  border-radius: var(--bs-border-radius);\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: calc(var(--bs-border-width) * -1);\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: calc(var(--bs-border-width) * -1);\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  --bs-nav-link-padding-x: 1rem;\n  --bs-nav-link-padding-y: 0.5rem;\n  --bs-nav-link-font-weight: ;\n  --bs-nav-link-color: var(--bs-link-color);\n  --bs-nav-link-hover-color: var(--bs-link-hover-color);\n  --bs-nav-link-disabled-color: var(--bs-secondary-color);\n  display: flex;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n  font-size: var(--bs-nav-link-font-size);\n  font-weight: var(--bs-nav-link-font-weight);\n  color: var(--bs-nav-link-color);\n  text-decoration: none;\n  background: none;\n  border: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n.nav-link:hover, .nav-link:focus {\n  color: var(--bs-nav-link-hover-color);\n}\n.nav-link:focus-visible {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.nav-link.disabled, .nav-link:disabled {\n  color: var(--bs-nav-link-disabled-color);\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  --bs-nav-tabs-border-width: var(--bs-border-width);\n  --bs-nav-tabs-border-color: var(--bs-border-color);\n  --bs-nav-tabs-border-radius: var(--bs-border-radius);\n  --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n  --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n  --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n  --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n  border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n  margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n  border: var(--bs-nav-tabs-border-width) solid transparent;\n  border-top-left-radius: var(--bs-nav-tabs-border-radius);\n  border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  isolation: isolate;\n  border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: var(--bs-nav-tabs-link-active-color);\n  background-color: var(--bs-nav-tabs-link-active-bg);\n  border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n  margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills {\n  --bs-nav-pills-border-radius: var(--bs-border-radius);\n  --bs-nav-pills-link-active-color: #fff;\n  --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n  border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: var(--bs-nav-pills-link-active-color);\n  background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-underline {\n  --bs-nav-underline-gap: 1rem;\n  --bs-nav-underline-border-width: 0.125rem;\n  --bs-nav-underline-link-active-color: var(--bs-emphasis-color);\n  gap: var(--bs-nav-underline-gap);\n}\n.nav-underline .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n  border-bottom: var(--bs-nav-underline-border-width) solid transparent;\n}\n.nav-underline .nav-link:hover, .nav-underline .nav-link:focus {\n  border-bottom-color: currentcolor;\n}\n.nav-underline .nav-link.active,\n.nav-underline .show > .nav-link {\n  font-weight: 700;\n  color: var(--bs-nav-underline-link-active-color);\n  border-bottom-color: currentcolor;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  flex-basis: 0;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  --bs-navbar-padding-x: 0;\n  --bs-navbar-padding-y: 0.5rem;\n  --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);\n  --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);\n  --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);\n  --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);\n  --bs-navbar-brand-padding-y: 0.3125rem;\n  --bs-navbar-brand-margin-end: 1rem;\n  --bs-navbar-brand-font-size: 1.25rem;\n  --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);\n  --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);\n  --bs-navbar-nav-link-padding-x: 0.5rem;\n  --bs-navbar-toggler-padding-y: 0.25rem;\n  --bs-navbar-toggler-padding-x: 0.75rem;\n  --bs-navbar-toggler-font-size: 1.25rem;\n  --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n  --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);\n  --bs-navbar-toggler-border-radius: var(--bs-border-radius);\n  --bs-navbar-toggler-focus-width: 0.25rem;\n  --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n  display: flex;\n  flex-wrap: inherit;\n  align-items: center;\n  justify-content: space-between;\n}\n.navbar-brand {\n  padding-top: var(--bs-navbar-brand-padding-y);\n  padding-bottom: var(--bs-navbar-brand-padding-y);\n  margin-right: var(--bs-navbar-brand-margin-end);\n  font-size: var(--bs-navbar-brand-font-size);\n  color: var(--bs-navbar-brand-color);\n  text-decoration: none;\n  white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n  color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n  --bs-nav-link-padding-x: 0;\n  --bs-nav-link-padding-y: 0.5rem;\n  --bs-nav-link-font-weight: ;\n  --bs-nav-link-color: var(--bs-navbar-color);\n  --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n  --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.navbar-nav .nav-link.active, .navbar-nav .nav-link.show {\n  color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n  color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n  flex-basis: 100%;\n  flex-grow: 1;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n  font-size: var(--bs-navbar-toggler-font-size);\n  line-height: 1;\n  color: var(--bs-navbar-color);\n  background-color: transparent;\n  border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n  border-radius: var(--bs-navbar-toggler-border-radius);\n  transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-image: var(--bs-navbar-toggler-icon-bg);\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-sm .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-md .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-lg .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-xl .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-xxl .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n.navbar-expand {\n  flex-wrap: nowrap;\n  justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n  flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: var(--bs-navbar-nav-link-padding-x);\n  padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n  display: flex !important;\n  flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n.navbar-expand .offcanvas {\n  position: static;\n  z-index: auto;\n  flex-grow: 1;\n  width: auto !important;\n  height: auto !important;\n  visibility: visible !important;\n  background-color: transparent !important;\n  border: 0 !important;\n  transform: none !important;\n  transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n  display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n  display: flex;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-dark,\n.navbar[data-bs-theme=dark] {\n  --bs-navbar-color: rgba(255, 255, 255, 0.55);\n  --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n  --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n  --bs-navbar-active-color: #fff;\n  --bs-navbar-brand-color: #fff;\n  --bs-navbar-brand-hover-color: #fff;\n  --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n  --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n[data-bs-theme=dark] .navbar-toggler-icon {\n  --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n  --bs-card-spacer-y: 1rem;\n  --bs-card-spacer-x: 1rem;\n  --bs-card-title-spacer-y: 0.5rem;\n  --bs-card-title-color: ;\n  --bs-card-subtitle-color: ;\n  --bs-card-border-width: var(--bs-border-width);\n  --bs-card-border-color: var(--bs-border-color-translucent);\n  --bs-card-border-radius: var(--bs-border-radius);\n  --bs-card-box-shadow: ;\n  --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n  --bs-card-cap-padding-y: 0.5rem;\n  --bs-card-cap-padding-x: 1rem;\n  --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);\n  --bs-card-cap-color: ;\n  --bs-card-height: ;\n  --bs-card-color: ;\n  --bs-card-bg: var(--bs-body-bg);\n  --bs-card-img-overlay-padding: 1rem;\n  --bs-card-group-margin: 0.75rem;\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  height: var(--bs-card-height);\n  color: var(--bs-body-color);\n  word-wrap: break-word;\n  background-color: var(--bs-card-bg);\n  background-clip: border-box;\n  border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n  border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: var(--bs-card-inner-border-radius);\n  border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: var(--bs-card-inner-border-radius);\n  border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  flex: 1 1 auto;\n  padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n  color: var(--bs-card-color);\n}\n\n.card-title {\n  margin-bottom: var(--bs-card-title-spacer-y);\n  color: var(--bs-card-title-color);\n}\n\n.card-subtitle {\n  margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n  margin-bottom: 0;\n  color: var(--bs-card-subtitle-color);\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n  padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n  margin-bottom: 0;\n  color: var(--bs-card-cap-color);\n  background-color: var(--bs-card-cap-bg);\n  border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n  border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n  padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n  color: var(--bs-card-cap-color);\n  background-color: var(--bs-card-cap-bg);\n  border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n  border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n  margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n  margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n  margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n  border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n  background-color: var(--bs-card-bg);\n  border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n  margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n  margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: var(--bs-card-img-overlay-padding);\n  border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: var(--bs-card-inner-border-radius);\n  border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: var(--bs-card-inner-border-radius);\n  border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n  margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n  .card-group {\n    display: flex;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion {\n  --bs-accordion-color: var(--bs-body-color);\n  --bs-accordion-bg: var(--bs-body-bg);\n  --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n  --bs-accordion-border-color: var(--bs-border-color);\n  --bs-accordion-border-width: var(--bs-border-width);\n  --bs-accordion-border-radius: var(--bs-border-radius);\n  --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n  --bs-accordion-btn-padding-x: 1.25rem;\n  --bs-accordion-btn-padding-y: 1rem;\n  --bs-accordion-btn-color: var(--bs-body-color);\n  --bs-accordion-btn-bg: var(--bs-accordion-bg);\n  --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  --bs-accordion-btn-icon-width: 1.25rem;\n  --bs-accordion-btn-icon-transform: rotate(-180deg);\n  --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n  --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  --bs-accordion-btn-focus-border-color: #86b7fe;\n  --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n  --bs-accordion-body-padding-x: 1.25rem;\n  --bs-accordion-body-padding-y: 1rem;\n  --bs-accordion-active-color: var(--bs-primary-text-emphasis);\n  --bs-accordion-active-bg: var(--bs-primary-bg-subtle);\n}\n\n.accordion-button {\n  position: relative;\n  display: flex;\n  align-items: center;\n  width: 100%;\n  padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n  font-size: 1rem;\n  color: var(--bs-accordion-btn-color);\n  text-align: left;\n  background-color: var(--bs-accordion-btn-bg);\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n.accordion-button:not(.collapsed) {\n  color: var(--bs-accordion-active-color);\n  background-color: var(--bs-accordion-active-bg);\n  box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n  background-image: var(--bs-accordion-btn-active-icon);\n  transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n  flex-shrink: 0;\n  width: var(--bs-accordion-btn-icon-width);\n  height: var(--bs-accordion-btn-icon-width);\n  margin-left: auto;\n  content: \"\";\n  background-image: var(--bs-accordion-btn-icon);\n  background-repeat: no-repeat;\n  background-size: var(--bs-accordion-btn-icon-width);\n  transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n.accordion-button:hover {\n  z-index: 2;\n}\n.accordion-button:focus {\n  z-index: 3;\n  border-color: var(--bs-accordion-btn-focus-border-color);\n  outline: 0;\n  box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  color: var(--bs-accordion-color);\n  background-color: var(--bs-accordion-bg);\n  border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n  border-top-left-radius: var(--bs-accordion-border-radius);\n  border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: var(--bs-accordion-inner-border-radius);\n  border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n.accordion-item:last-of-type {\n  border-bottom-right-radius: var(--bs-accordion-border-radius);\n  border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n  border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: var(--bs-accordion-border-radius);\n  border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n  padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n  border-radius: 0;\n}\n\n[data-bs-theme=dark] .accordion-button::after {\n  --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.breadcrumb {\n  --bs-breadcrumb-padding-x: 0;\n  --bs-breadcrumb-padding-y: 0;\n  --bs-breadcrumb-margin-bottom: 1rem;\n  --bs-breadcrumb-bg: ;\n  --bs-breadcrumb-border-radius: ;\n  --bs-breadcrumb-divider-color: var(--bs-secondary-color);\n  --bs-breadcrumb-item-padding-x: 0.5rem;\n  --bs-breadcrumb-item-active-color: var(--bs-secondary-color);\n  display: flex;\n  flex-wrap: wrap;\n  padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n  margin-bottom: var(--bs-breadcrumb-margin-bottom);\n  font-size: var(--bs-breadcrumb-font-size);\n  list-style: none;\n  background-color: var(--bs-breadcrumb-bg);\n  border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: var(--bs-breadcrumb-item-padding-x);\n  color: var(--bs-breadcrumb-divider-color);\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n  color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n  --bs-pagination-padding-x: 0.75rem;\n  --bs-pagination-padding-y: 0.375rem;\n  --bs-pagination-font-size: 1rem;\n  --bs-pagination-color: var(--bs-link-color);\n  --bs-pagination-bg: var(--bs-body-bg);\n  --bs-pagination-border-width: var(--bs-border-width);\n  --bs-pagination-border-color: var(--bs-border-color);\n  --bs-pagination-border-radius: var(--bs-border-radius);\n  --bs-pagination-hover-color: var(--bs-link-hover-color);\n  --bs-pagination-hover-bg: var(--bs-tertiary-bg);\n  --bs-pagination-hover-border-color: var(--bs-border-color);\n  --bs-pagination-focus-color: var(--bs-link-hover-color);\n  --bs-pagination-focus-bg: var(--bs-secondary-bg);\n  --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n  --bs-pagination-active-color: #fff;\n  --bs-pagination-active-bg: #0d6efd;\n  --bs-pagination-active-border-color: #0d6efd;\n  --bs-pagination-disabled-color: var(--bs-secondary-color);\n  --bs-pagination-disabled-bg: var(--bs-secondary-bg);\n  --bs-pagination-disabled-border-color: var(--bs-border-color);\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n  font-size: var(--bs-pagination-font-size);\n  color: var(--bs-pagination-color);\n  text-decoration: none;\n  background-color: var(--bs-pagination-bg);\n  border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n.page-link:hover {\n  z-index: 2;\n  color: var(--bs-pagination-hover-color);\n  background-color: var(--bs-pagination-hover-bg);\n  border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n  z-index: 3;\n  color: var(--bs-pagination-focus-color);\n  background-color: var(--bs-pagination-focus-bg);\n  outline: 0;\n  box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n  z-index: 3;\n  color: var(--bs-pagination-active-color);\n  background-color: var(--bs-pagination-active-bg);\n  border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n  color: var(--bs-pagination-disabled-color);\n  pointer-events: none;\n  background-color: var(--bs-pagination-disabled-bg);\n  border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: calc(var(--bs-border-width) * -1);\n}\n.page-item:first-child .page-link {\n  border-top-left-radius: var(--bs-pagination-border-radius);\n  border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n  border-top-right-radius: var(--bs-pagination-border-radius);\n  border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n  --bs-pagination-padding-x: 1.5rem;\n  --bs-pagination-padding-y: 0.75rem;\n  --bs-pagination-font-size: 1.25rem;\n  --bs-pagination-border-radius: var(--bs-border-radius-lg);\n}\n\n.pagination-sm {\n  --bs-pagination-padding-x: 0.5rem;\n  --bs-pagination-padding-y: 0.25rem;\n  --bs-pagination-font-size: 0.875rem;\n  --bs-pagination-border-radius: var(--bs-border-radius-sm);\n}\n\n.badge {\n  --bs-badge-padding-x: 0.65em;\n  --bs-badge-padding-y: 0.35em;\n  --bs-badge-font-size: 0.75em;\n  --bs-badge-font-weight: 700;\n  --bs-badge-color: #fff;\n  --bs-badge-border-radius: var(--bs-border-radius);\n  display: inline-block;\n  padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n  font-size: var(--bs-badge-font-size);\n  font-weight: var(--bs-badge-font-weight);\n  line-height: 1;\n  color: var(--bs-badge-color);\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  --bs-alert-bg: transparent;\n  --bs-alert-padding-x: 1rem;\n  --bs-alert-padding-y: 1rem;\n  --bs-alert-margin-bottom: 1rem;\n  --bs-alert-color: inherit;\n  --bs-alert-border-color: transparent;\n  --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);\n  --bs-alert-border-radius: var(--bs-border-radius);\n  --bs-alert-link-color: inherit;\n  position: relative;\n  padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n  margin-bottom: var(--bs-alert-margin-bottom);\n  color: var(--bs-alert-color);\n  background-color: var(--bs-alert-bg);\n  border: var(--bs-alert-border);\n  border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n  color: var(--bs-alert-link-color);\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  --bs-alert-color: var(--bs-primary-text-emphasis);\n  --bs-alert-bg: var(--bs-primary-bg-subtle);\n  --bs-alert-border-color: var(--bs-primary-border-subtle);\n  --bs-alert-link-color: var(--bs-primary-text-emphasis);\n}\n\n.alert-secondary {\n  --bs-alert-color: var(--bs-secondary-text-emphasis);\n  --bs-alert-bg: var(--bs-secondary-bg-subtle);\n  --bs-alert-border-color: var(--bs-secondary-border-subtle);\n  --bs-alert-link-color: var(--bs-secondary-text-emphasis);\n}\n\n.alert-success {\n  --bs-alert-color: var(--bs-success-text-emphasis);\n  --bs-alert-bg: var(--bs-success-bg-subtle);\n  --bs-alert-border-color: var(--bs-success-border-subtle);\n  --bs-alert-link-color: var(--bs-success-text-emphasis);\n}\n\n.alert-info {\n  --bs-alert-color: var(--bs-info-text-emphasis);\n  --bs-alert-bg: var(--bs-info-bg-subtle);\n  --bs-alert-border-color: var(--bs-info-border-subtle);\n  --bs-alert-link-color: var(--bs-info-text-emphasis);\n}\n\n.alert-warning {\n  --bs-alert-color: var(--bs-warning-text-emphasis);\n  --bs-alert-bg: var(--bs-warning-bg-subtle);\n  --bs-alert-border-color: var(--bs-warning-border-subtle);\n  --bs-alert-link-color: var(--bs-warning-text-emphasis);\n}\n\n.alert-danger {\n  --bs-alert-color: var(--bs-danger-text-emphasis);\n  --bs-alert-bg: var(--bs-danger-bg-subtle);\n  --bs-alert-border-color: var(--bs-danger-border-subtle);\n  --bs-alert-link-color: var(--bs-danger-text-emphasis);\n}\n\n.alert-light {\n  --bs-alert-color: var(--bs-light-text-emphasis);\n  --bs-alert-bg: var(--bs-light-bg-subtle);\n  --bs-alert-border-color: var(--bs-light-border-subtle);\n  --bs-alert-link-color: var(--bs-light-text-emphasis);\n}\n\n.alert-dark {\n  --bs-alert-color: var(--bs-dark-text-emphasis);\n  --bs-alert-bg: var(--bs-dark-bg-subtle);\n  --bs-alert-border-color: var(--bs-dark-border-subtle);\n  --bs-alert-link-color: var(--bs-dark-text-emphasis);\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n.progress,\n.progress-stacked {\n  --bs-progress-height: 1rem;\n  --bs-progress-font-size: 0.75rem;\n  --bs-progress-bg: var(--bs-secondary-bg);\n  --bs-progress-border-radius: var(--bs-border-radius);\n  --bs-progress-box-shadow: var(--bs-box-shadow-inset);\n  --bs-progress-bar-color: #fff;\n  --bs-progress-bar-bg: #0d6efd;\n  --bs-progress-bar-transition: width 0.6s ease;\n  display: flex;\n  height: var(--bs-progress-height);\n  overflow: hidden;\n  font-size: var(--bs-progress-font-size);\n  background-color: var(--bs-progress-bg);\n  border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  overflow: hidden;\n  color: var(--bs-progress-bar-color);\n  text-align: center;\n  white-space: nowrap;\n  background-color: var(--bs-progress-bar-bg);\n  transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-stacked > .progress {\n  overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n  width: 100%;\n}\n\n.progress-bar-animated {\n  animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    animation: none;\n  }\n}\n\n.list-group {\n  --bs-list-group-color: var(--bs-body-color);\n  --bs-list-group-bg: var(--bs-body-bg);\n  --bs-list-group-border-color: var(--bs-border-color);\n  --bs-list-group-border-width: var(--bs-border-width);\n  --bs-list-group-border-radius: var(--bs-border-radius);\n  --bs-list-group-item-padding-x: 1rem;\n  --bs-list-group-item-padding-y: 0.5rem;\n  --bs-list-group-action-color: var(--bs-secondary-color);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);\n  --bs-list-group-action-active-color: var(--bs-body-color);\n  --bs-list-group-action-active-bg: var(--bs-secondary-bg);\n  --bs-list-group-disabled-color: var(--bs-secondary-color);\n  --bs-list-group-disabled-bg: var(--bs-body-bg);\n  --bs-list-group-active-color: #fff;\n  --bs-list-group-active-bg: #0d6efd;\n  --bs-list-group-active-border-color: #0d6efd;\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: var(--bs-list-group-action-color);\n  text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: var(--bs-list-group-action-hover-color);\n  text-decoration: none;\n  background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n  color: var(--bs-list-group-action-active-color);\n  background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n  color: var(--bs-list-group-color);\n  text-decoration: none;\n  background-color: var(--bs-list-group-bg);\n  border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n  color: var(--bs-list-group-disabled-color);\n  pointer-events: none;\n  background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n  z-index: 2;\n  color: var(--bs-list-group-active-color);\n  background-color: var(--bs-list-group-active-bg);\n  border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n  margin-top: calc(-1 * var(--bs-list-group-border-width));\n  border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n  flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n  border-bottom-left-radius: var(--bs-list-group-border-radius);\n  border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n  border-top-right-radius: var(--bs-list-group-border-radius);\n  border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: var(--bs-list-group-border-width);\n  border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: calc(-1 * var(--bs-list-group-border-width));\n  border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n.list-group-flush {\n  border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n  border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  --bs-list-group-color: var(--bs-primary-text-emphasis);\n  --bs-list-group-bg: var(--bs-primary-bg-subtle);\n  --bs-list-group-border-color: var(--bs-primary-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-primary-border-subtle);\n  --bs-list-group-active-color: var(--bs-primary-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-primary-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-primary-text-emphasis);\n}\n\n.list-group-item-secondary {\n  --bs-list-group-color: var(--bs-secondary-text-emphasis);\n  --bs-list-group-bg: var(--bs-secondary-bg-subtle);\n  --bs-list-group-border-color: var(--bs-secondary-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);\n  --bs-list-group-active-color: var(--bs-secondary-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-secondary-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis);\n}\n\n.list-group-item-success {\n  --bs-list-group-color: var(--bs-success-text-emphasis);\n  --bs-list-group-bg: var(--bs-success-bg-subtle);\n  --bs-list-group-border-color: var(--bs-success-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-success-border-subtle);\n  --bs-list-group-active-color: var(--bs-success-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-success-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-success-text-emphasis);\n}\n\n.list-group-item-info {\n  --bs-list-group-color: var(--bs-info-text-emphasis);\n  --bs-list-group-bg: var(--bs-info-bg-subtle);\n  --bs-list-group-border-color: var(--bs-info-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-info-border-subtle);\n  --bs-list-group-active-color: var(--bs-info-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-info-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-info-text-emphasis);\n}\n\n.list-group-item-warning {\n  --bs-list-group-color: var(--bs-warning-text-emphasis);\n  --bs-list-group-bg: var(--bs-warning-bg-subtle);\n  --bs-list-group-border-color: var(--bs-warning-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-warning-border-subtle);\n  --bs-list-group-active-color: var(--bs-warning-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-warning-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-warning-text-emphasis);\n}\n\n.list-group-item-danger {\n  --bs-list-group-color: var(--bs-danger-text-emphasis);\n  --bs-list-group-bg: var(--bs-danger-bg-subtle);\n  --bs-list-group-border-color: var(--bs-danger-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-danger-border-subtle);\n  --bs-list-group-active-color: var(--bs-danger-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-danger-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-danger-text-emphasis);\n}\n\n.list-group-item-light {\n  --bs-list-group-color: var(--bs-light-text-emphasis);\n  --bs-list-group-bg: var(--bs-light-bg-subtle);\n  --bs-list-group-border-color: var(--bs-light-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-light-border-subtle);\n  --bs-list-group-active-color: var(--bs-light-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-light-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-light-text-emphasis);\n}\n\n.list-group-item-dark {\n  --bs-list-group-color: var(--bs-dark-text-emphasis);\n  --bs-list-group-bg: var(--bs-dark-bg-subtle);\n  --bs-list-group-border-color: var(--bs-dark-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-dark-border-subtle);\n  --bs-list-group-active-color: var(--bs-dark-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-dark-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-dark-text-emphasis);\n}\n\n.btn-close {\n  --bs-btn-close-color: #000;\n  --bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");\n  --bs-btn-close-opacity: 0.5;\n  --bs-btn-close-hover-opacity: 0.75;\n  --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n  --bs-btn-close-focus-opacity: 1;\n  --bs-btn-close-disabled-opacity: 0.25;\n  --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: var(--bs-btn-close-color);\n  background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.375rem;\n  opacity: var(--bs-btn-close-opacity);\n}\n.btn-close:hover {\n  color: var(--bs-btn-close-color);\n  text-decoration: none;\n  opacity: var(--bs-btn-close-hover-opacity);\n}\n.btn-close:focus {\n  outline: 0;\n  box-shadow: var(--bs-btn-close-focus-shadow);\n  opacity: var(--bs-btn-close-focus-opacity);\n}\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n  opacity: var(--bs-btn-close-disabled-opacity);\n}\n\n.btn-close-white {\n  filter: var(--bs-btn-close-white-filter);\n}\n\n[data-bs-theme=dark] .btn-close {\n  filter: var(--bs-btn-close-white-filter);\n}\n\n.toast {\n  --bs-toast-zindex: 1090;\n  --bs-toast-padding-x: 0.75rem;\n  --bs-toast-padding-y: 0.5rem;\n  --bs-toast-spacing: 1.5rem;\n  --bs-toast-max-width: 350px;\n  --bs-toast-font-size: 0.875rem;\n  --bs-toast-color: ;\n  --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n  --bs-toast-border-width: var(--bs-border-width);\n  --bs-toast-border-color: var(--bs-border-color-translucent);\n  --bs-toast-border-radius: var(--bs-border-radius);\n  --bs-toast-box-shadow: var(--bs-box-shadow);\n  --bs-toast-header-color: var(--bs-secondary-color);\n  --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n  --bs-toast-header-border-color: var(--bs-border-color-translucent);\n  width: var(--bs-toast-max-width);\n  max-width: 100%;\n  font-size: var(--bs-toast-font-size);\n  color: var(--bs-toast-color);\n  pointer-events: auto;\n  background-color: var(--bs-toast-bg);\n  background-clip: padding-box;\n  border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n  box-shadow: var(--bs-toast-box-shadow);\n  border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n  opacity: 0;\n}\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  --bs-toast-zindex: 1090;\n  position: absolute;\n  z-index: var(--bs-toast-zindex);\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n  margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n  display: flex;\n  align-items: center;\n  padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n  color: var(--bs-toast-header-color);\n  background-color: var(--bs-toast-header-bg);\n  background-clip: padding-box;\n  border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n  border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n  border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n  margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n  margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n  padding: var(--bs-toast-padding-x);\n  word-wrap: break-word;\n}\n\n.modal {\n  --bs-modal-zindex: 1055;\n  --bs-modal-width: 500px;\n  --bs-modal-padding: 1rem;\n  --bs-modal-margin: 0.5rem;\n  --bs-modal-color: ;\n  --bs-modal-bg: var(--bs-body-bg);\n  --bs-modal-border-color: var(--bs-border-color-translucent);\n  --bs-modal-border-width: var(--bs-border-width);\n  --bs-modal-border-radius: var(--bs-border-radius-lg);\n  --bs-modal-box-shadow: var(--bs-box-shadow-sm);\n  --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));\n  --bs-modal-header-padding-x: 1rem;\n  --bs-modal-header-padding-y: 1rem;\n  --bs-modal-header-padding: 1rem 1rem;\n  --bs-modal-header-border-color: var(--bs-border-color);\n  --bs-modal-header-border-width: var(--bs-border-width);\n  --bs-modal-title-line-height: 1.5;\n  --bs-modal-footer-gap: 0.5rem;\n  --bs-modal-footer-bg: ;\n  --bs-modal-footer-border-color: var(--bs-border-color);\n  --bs-modal-footer-border-width: var(--bs-border-width);\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: var(--bs-modal-zindex);\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: var(--bs-modal-margin);\n  pointer-events: none;\n}\n.modal.fade .modal-dialog {\n  transition: transform 0.3s ease-out;\n  transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n.modal.show .modal-dialog {\n  transform: none;\n}\n.modal.modal-static .modal-dialog {\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: flex;\n  align-items: center;\n  min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  color: var(--bs-modal-color);\n  pointer-events: auto;\n  background-color: var(--bs-modal-bg);\n  background-clip: padding-box;\n  border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n  border-radius: var(--bs-modal-border-radius);\n  outline: 0;\n}\n\n.modal-backdrop {\n  --bs-backdrop-zindex: 1050;\n  --bs-backdrop-bg: #000;\n  --bs-backdrop-opacity: 0.5;\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: var(--bs-backdrop-zindex);\n  width: 100vw;\n  height: 100vh;\n  background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n  opacity: 0;\n}\n.modal-backdrop.show {\n  opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  justify-content: space-between;\n  padding: var(--bs-modal-header-padding);\n  border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n  border-top-left-radius: var(--bs-modal-inner-border-radius);\n  border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n  padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n  margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n  position: relative;\n  flex: 1 1 auto;\n  padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n  display: flex;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: flex-end;\n  padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n  background-color: var(--bs-modal-footer-bg);\n  border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n  border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n  border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n  margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n  .modal {\n    --bs-modal-margin: 1.75rem;\n    --bs-modal-box-shadow: var(--bs-box-shadow);\n  }\n  .modal-dialog {\n    max-width: var(--bs-modal-width);\n    margin-right: auto;\n    margin-left: auto;\n  }\n  .modal-sm {\n    --bs-modal-width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    --bs-modal-width: 800px;\n  }\n}\n@media (min-width: 1200px) {\n  .modal-xl {\n    --bs-modal-width: 1140px;\n  }\n}\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header,\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header,\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header,\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header,\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header,\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n.tooltip {\n  --bs-tooltip-zindex: 1080;\n  --bs-tooltip-max-width: 200px;\n  --bs-tooltip-padding-x: 0.5rem;\n  --bs-tooltip-padding-y: 0.25rem;\n  --bs-tooltip-margin: ;\n  --bs-tooltip-font-size: 0.875rem;\n  --bs-tooltip-color: var(--bs-body-bg);\n  --bs-tooltip-bg: var(--bs-emphasis-color);\n  --bs-tooltip-border-radius: var(--bs-border-radius);\n  --bs-tooltip-opacity: 0.9;\n  --bs-tooltip-arrow-width: 0.8rem;\n  --bs-tooltip-arrow-height: 0.4rem;\n  z-index: var(--bs-tooltip-zindex);\n  display: block;\n  margin: var(--bs-tooltip-margin);\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  white-space: normal;\n  word-spacing: normal;\n  line-break: auto;\n  font-size: var(--bs-tooltip-font-size);\n  word-wrap: break-word;\n  opacity: 0;\n}\n.tooltip.show {\n  opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n  display: block;\n  width: var(--bs-tooltip-arrow-width);\n  height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n  bottom: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n  top: -1px;\n  border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n  border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n  left: calc(-1 * var(--bs-tooltip-arrow-height));\n  width: var(--bs-tooltip-arrow-height);\n  height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n  right: -1px;\n  border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n  border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n  top: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n  border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n  right: calc(-1 * var(--bs-tooltip-arrow-height));\n  width: var(--bs-tooltip-arrow-height);\n  height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n  left: -1px;\n  border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n  border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n  max-width: var(--bs-tooltip-max-width);\n  padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n  color: var(--bs-tooltip-color);\n  text-align: center;\n  background-color: var(--bs-tooltip-bg);\n  border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n  --bs-popover-zindex: 1070;\n  --bs-popover-max-width: 276px;\n  --bs-popover-font-size: 0.875rem;\n  --bs-popover-bg: var(--bs-body-bg);\n  --bs-popover-border-width: var(--bs-border-width);\n  --bs-popover-border-color: var(--bs-border-color-translucent);\n  --bs-popover-border-radius: var(--bs-border-radius-lg);\n  --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));\n  --bs-popover-box-shadow: var(--bs-box-shadow);\n  --bs-popover-header-padding-x: 1rem;\n  --bs-popover-header-padding-y: 0.5rem;\n  --bs-popover-header-font-size: 1rem;\n  --bs-popover-header-color: inherit;\n  --bs-popover-header-bg: var(--bs-secondary-bg);\n  --bs-popover-body-padding-x: 1rem;\n  --bs-popover-body-padding-y: 1rem;\n  --bs-popover-body-color: var(--bs-body-color);\n  --bs-popover-arrow-width: 1rem;\n  --bs-popover-arrow-height: 0.5rem;\n  --bs-popover-arrow-border: var(--bs-popover-border-color);\n  z-index: var(--bs-popover-zindex);\n  display: block;\n  max-width: var(--bs-popover-max-width);\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  white-space: normal;\n  word-spacing: normal;\n  line-break: auto;\n  font-size: var(--bs-popover-font-size);\n  word-wrap: break-word;\n  background-color: var(--bs-popover-bg);\n  background-clip: padding-box;\n  border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n  border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n  display: block;\n  width: var(--bs-popover-arrow-width);\n  height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n  border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n  bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n  border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n  bottom: 0;\n  border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n  bottom: var(--bs-popover-border-width);\n  border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n  left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n  width: var(--bs-popover-arrow-height);\n  height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n  border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n  left: 0;\n  border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n  left: var(--bs-popover-border-width);\n  border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n  top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n  border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n  top: 0;\n  border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n  top: var(--bs-popover-border-width);\n  border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: var(--bs-popover-arrow-width);\n  margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n  content: \"\";\n  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n  right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n  width: var(--bs-popover-arrow-height);\n  height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n  border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n  right: 0;\n  border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n  right: var(--bs-popover-border-width);\n  border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n  padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n  margin-bottom: 0;\n  font-size: var(--bs-popover-header-font-size);\n  color: var(--bs-popover-header-color);\n  background-color: var(--bs-popover-header-bg);\n  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n  border-top-left-radius: var(--bs-popover-inner-border-radius);\n  border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n  color: var(--bs-popover-body-color);\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: flex;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n}\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n[data-bs-theme=dark] .carousel .carousel-control-prev-icon,\n[data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon,\n[data-bs-theme=dark].carousel .carousel-control-next-icon {\n  filter: invert(1) grayscale(100);\n}\n[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption {\n  color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n  display: inline-block;\n  width: var(--bs-spinner-width);\n  height: var(--bs-spinner-height);\n  vertical-align: var(--bs-spinner-vertical-align);\n  border-radius: 50%;\n  animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n  to {\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n.spinner-border {\n  --bs-spinner-width: 2rem;\n  --bs-spinner-height: 2rem;\n  --bs-spinner-vertical-align: -0.125em;\n  --bs-spinner-border-width: 0.25em;\n  --bs-spinner-animation-speed: 0.75s;\n  --bs-spinner-animation-name: spinner-border;\n  border: var(--bs-spinner-border-width) solid currentcolor;\n  border-right-color: transparent;\n}\n\n.spinner-border-sm {\n  --bs-spinner-width: 1rem;\n  --bs-spinner-height: 1rem;\n  --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n  0% {\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    transform: none;\n  }\n}\n.spinner-grow {\n  --bs-spinner-width: 2rem;\n  --bs-spinner-height: 2rem;\n  --bs-spinner-vertical-align: -0.125em;\n  --bs-spinner-animation-speed: 0.75s;\n  --bs-spinner-animation-name: spinner-grow;\n  background-color: currentcolor;\n  opacity: 0;\n}\n\n.spinner-grow-sm {\n  --bs-spinner-width: 1rem;\n  --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    --bs-spinner-animation-speed: 1.5s;\n  }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n  --bs-offcanvas-zindex: 1045;\n  --bs-offcanvas-width: 400px;\n  --bs-offcanvas-height: 30vh;\n  --bs-offcanvas-padding-x: 1rem;\n  --bs-offcanvas-padding-y: 1rem;\n  --bs-offcanvas-color: var(--bs-body-color);\n  --bs-offcanvas-bg: var(--bs-body-bg);\n  --bs-offcanvas-border-width: var(--bs-border-width);\n  --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n  --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);\n  --bs-offcanvas-transition: transform 0.3s ease-in-out;\n  --bs-offcanvas-title-line-height: 1.5;\n}\n\n@media (max-width: 575.98px) {\n  .offcanvas-sm {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-sm {\n    transition: none;\n  }\n}\n@media (max-width: 575.98px) {\n  .offcanvas-sm.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-sm.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-sm.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-sm.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 576px) {\n  .offcanvas-sm {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-sm .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-sm .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .offcanvas-md {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-md {\n    transition: none;\n  }\n}\n@media (max-width: 767.98px) {\n  .offcanvas-md.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-md.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-md.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-md.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 768px) {\n  .offcanvas-md {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-md .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-md .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .offcanvas-lg {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-lg {\n    transition: none;\n  }\n}\n@media (max-width: 991.98px) {\n  .offcanvas-lg.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-lg.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-lg.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-lg.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 992px) {\n  .offcanvas-lg {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-lg .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-lg .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .offcanvas-xl {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-xl {\n    transition: none;\n  }\n}\n@media (max-width: 1199.98px) {\n  .offcanvas-xl.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-xl.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-xl.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-xl.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 1200px) {\n  .offcanvas-xl {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-xl .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-xl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .offcanvas-xxl {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-xxl {\n    transition: none;\n  }\n}\n@media (max-width: 1399.98px) {\n  .offcanvas-xxl.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-xxl.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-xxl.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-xxl.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 1400px) {\n  .offcanvas-xxl {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-xxl .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-xxl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: var(--bs-offcanvas-zindex);\n  display: flex;\n  flex-direction: column;\n  max-width: 100%;\n  color: var(--bs-offcanvas-color);\n  visibility: hidden;\n  background-color: var(--bs-offcanvas-bg);\n  background-clip: padding-box;\n  outline: 0;\n  transition: var(--bs-offcanvas-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n.offcanvas.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: var(--bs-offcanvas-width);\n  border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: var(--bs-offcanvas-width);\n  border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: var(--bs-offcanvas-height);\n  max-height: 100%;\n  border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: var(--bs-offcanvas-height);\n  max-height: 100%;\n  border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n  transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n  visibility: visible;\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n  padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n  margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n  margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));\n  margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: var(--bs-offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n  flex-grow: 1;\n  padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n  overflow-y: auto;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentcolor;\n  opacity: 0.5;\n}\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: 0.6em;\n}\n\n.placeholder-sm {\n  min-height: 0.8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.text-bg-primary {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n  color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-primary:hover, .link-primary:focus {\n  color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-secondary {\n  color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n  color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-success {\n  color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-success:hover, .link-success:focus {\n  color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-info {\n  color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-info:hover, .link-info:focus {\n  color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-warning {\n  color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-warning:hover, .link-warning:focus {\n  color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-danger {\n  color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-danger:hover, .link-danger:focus {\n  color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-light {\n  color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-light:hover, .link-light:focus {\n  color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-dark {\n  color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-dark:hover, .link-dark:focus {\n  color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-body-emphasis {\n  color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-body-emphasis:hover, .link-body-emphasis:focus {\n  color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n  text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n}\n\n.focus-ring:focus {\n  outline: 0;\n  box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);\n}\n\n.icon-link {\n  display: inline-flex;\n  gap: 0.375rem;\n  align-items: center;\n  -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n  text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n  text-underline-offset: 0.25em;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n.icon-link > .bi {\n  flex-shrink: 0;\n  width: 1em;\n  height: 1em;\n  fill: currentcolor;\n  transition: 0.2s ease-in-out transform;\n}\n@media (prefers-reduced-motion: reduce) {\n  .icon-link > .bi {\n    transition: none;\n  }\n}\n\n.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi {\n  transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0));\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n.sticky-bottom {\n  position: -webkit-sticky;\n  position: sticky;\n  bottom: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-sm-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-md-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-lg-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-xl-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-xxl-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n.hstack {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  align-self: stretch;\n}\n\n.vstack {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n.visually-hidden:not(caption),\n.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {\n  position: absolute !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  align-self: stretch;\n  width: var(--bs-border-width);\n  min-height: 1em;\n  background-color: currentcolor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.object-fit-contain {\n  -o-object-fit: contain !important;\n  object-fit: contain !important;\n}\n\n.object-fit-cover {\n  -o-object-fit: cover !important;\n  object-fit: cover !important;\n}\n\n.object-fit-fill {\n  -o-object-fit: fill !important;\n  object-fit: fill !important;\n}\n\n.object-fit-scale {\n  -o-object-fit: scale-down !important;\n  object-fit: scale-down !important;\n}\n\n.object-fit-none {\n  -o-object-fit: none !important;\n  object-fit: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.overflow-x-auto {\n  overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n  overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n  overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n  overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n  overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n  overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n  overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n  overflow-y: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-inline-grid {\n  display: inline-grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: var(--bs-box-shadow) !important;\n}\n\n.shadow-sm {\n  box-shadow: var(--bs-box-shadow-sm) !important;\n}\n\n.shadow-lg {\n  box-shadow: var(--bs-box-shadow-lg) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.focus-ring-primary {\n  --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-secondary {\n  --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-success {\n  --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-info {\n  --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-warning {\n  --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-danger {\n  --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-light {\n  --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-dark {\n  --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity));\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-black {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n  border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n  border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n  border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n  border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n  border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n  border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n  border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n  border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.border-opacity-10 {\n  --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n  --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n  --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n  --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n  --bs-border-opacity: 1;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  flex-direction: row !important;\n}\n\n.flex-column {\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  align-content: center !important;\n}\n\n.align-content-between {\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  align-self: auto !important;\n}\n\n.align-self-start {\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  align-self: stretch !important;\n}\n\n.order-first {\n  order: -1 !important;\n}\n\n.order-0 {\n  order: 0 !important;\n}\n\n.order-1 {\n  order: 1 !important;\n}\n\n.order-2 {\n  order: 2 !important;\n}\n\n.order-3 {\n  order: 3 !important;\n}\n\n.order-4 {\n  order: 4 !important;\n}\n\n.order-5 {\n  order: 5 !important;\n}\n\n.order-last {\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.row-gap-0 {\n  row-gap: 0 !important;\n}\n\n.row-gap-1 {\n  row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n  row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n  row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n  row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n  row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n  -moz-column-gap: 0 !important;\n  column-gap: 0 !important;\n}\n\n.column-gap-1 {\n  -moz-column-gap: 0.25rem !important;\n  column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n  -moz-column-gap: 0.5rem !important;\n  column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n  -moz-column-gap: 1rem !important;\n  column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n  -moz-column-gap: 1.5rem !important;\n  column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n  -moz-column-gap: 3rem !important;\n  column-gap: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-medium {\n  font-weight: 500 !important;\n}\n\n.fw-semibold {\n  font-weight: 600 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n  --bs-text-opacity: 1;\n  color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n  --bs-text-opacity: 1;\n  color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n  --bs-text-opacity: 1;\n  color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n  color: var(--bs-primary-text-emphasis) !important;\n}\n\n.text-secondary-emphasis {\n  color: var(--bs-secondary-text-emphasis) !important;\n}\n\n.text-success-emphasis {\n  color: var(--bs-success-text-emphasis) !important;\n}\n\n.text-info-emphasis {\n  color: var(--bs-info-text-emphasis) !important;\n}\n\n.text-warning-emphasis {\n  color: var(--bs-warning-text-emphasis) !important;\n}\n\n.text-danger-emphasis {\n  color: var(--bs-danger-text-emphasis) !important;\n}\n\n.text-light-emphasis {\n  color: var(--bs-light-text-emphasis) !important;\n}\n\n.text-dark-emphasis {\n  color: var(--bs-dark-text-emphasis) !important;\n}\n\n.link-opacity-10 {\n  --bs-link-opacity: 0.1;\n}\n\n.link-opacity-10-hover:hover {\n  --bs-link-opacity: 0.1;\n}\n\n.link-opacity-25 {\n  --bs-link-opacity: 0.25;\n}\n\n.link-opacity-25-hover:hover {\n  --bs-link-opacity: 0.25;\n}\n\n.link-opacity-50 {\n  --bs-link-opacity: 0.5;\n}\n\n.link-opacity-50-hover:hover {\n  --bs-link-opacity: 0.5;\n}\n\n.link-opacity-75 {\n  --bs-link-opacity: 0.75;\n}\n\n.link-opacity-75-hover:hover {\n  --bs-link-opacity: 0.75;\n}\n\n.link-opacity-100 {\n  --bs-link-opacity: 1;\n}\n\n.link-opacity-100-hover:hover {\n  --bs-link-opacity: 1;\n}\n\n.link-offset-1 {\n  text-underline-offset: 0.125em !important;\n}\n\n.link-offset-1-hover:hover {\n  text-underline-offset: 0.125em !important;\n}\n\n.link-offset-2 {\n  text-underline-offset: 0.25em !important;\n}\n\n.link-offset-2-hover:hover {\n  text-underline-offset: 0.25em !important;\n}\n\n.link-offset-3 {\n  text-underline-offset: 0.375em !important;\n}\n\n.link-offset-3-hover:hover {\n  text-underline-offset: 0.375em !important;\n}\n\n.link-underline-primary {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-secondary {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-success {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-info {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-warning {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-danger {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-light {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-dark {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-underline-opacity-0 {\n  --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-0-hover:hover {\n  --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-10 {\n  --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-10-hover:hover {\n  --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-25 {\n  --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-25-hover:hover {\n  --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-50 {\n  --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-50-hover:hover {\n  --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-75 {\n  --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-75-hover:hover {\n  --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-100 {\n  --bs-link-underline-opacity: 1;\n}\n\n.link-underline-opacity-100-hover:hover {\n  --bs-link-underline-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-body-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n  background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n  background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n  background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n  background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n  background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n  background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n  background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n  background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n  border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n  border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n  border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n  border-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n  border-top-left-radius: var(--bs-border-radius) !important;\n  border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n  border-top-left-radius: 0 !important;\n  border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n  border-top-left-radius: var(--bs-border-radius-sm) !important;\n  border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n  border-top-left-radius: var(--bs-border-radius) !important;\n  border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n  border-top-left-radius: var(--bs-border-radius-lg) !important;\n  border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n  border-top-left-radius: var(--bs-border-radius-xl) !important;\n  border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n  border-top-left-radius: var(--bs-border-radius-xxl) !important;\n  border-top-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-top-circle {\n  border-top-left-radius: 50% !important;\n  border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n  border-top-left-radius: var(--bs-border-radius-pill) !important;\n  border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n  border-top-right-radius: var(--bs-border-radius) !important;\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n  border-top-right-radius: 0 !important;\n  border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n  border-top-right-radius: var(--bs-border-radius-sm) !important;\n  border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n  border-top-right-radius: var(--bs-border-radius) !important;\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n  border-top-right-radius: var(--bs-border-radius-lg) !important;\n  border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n  border-top-right-radius: var(--bs-border-radius-xl) !important;\n  border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n  border-top-right-radius: var(--bs-border-radius-xxl) !important;\n  border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-end-circle {\n  border-top-right-radius: 50% !important;\n  border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n  border-top-right-radius: var(--bs-border-radius-pill) !important;\n  border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n  border-bottom-right-radius: 0 !important;\n  border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n  border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n  border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n  border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n  border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n  border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n  border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n  border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n  border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-bottom-circle {\n  border-bottom-right-radius: 50% !important;\n  border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n  border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n  border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n  border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n  border-bottom-left-radius: 0 !important;\n  border-top-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n  border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n  border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n  border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n  border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n  border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n  border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n  border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n  border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n  border-top-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-start-circle {\n  border-bottom-left-radius: 50% !important;\n  border-top-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n  border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n  border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n.z-n1 {\n  z-index: -1 !important;\n}\n\n.z-0 {\n  z-index: 0 !important;\n}\n\n.z-1 {\n  z-index: 1 !important;\n}\n\n.z-2 {\n  z-index: 2 !important;\n}\n\n.z-3 {\n  z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .object-fit-sm-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-sm-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-sm-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-sm-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-sm-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-sm-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    order: 5 !important;\n  }\n  .order-sm-last {\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-sm-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-sm-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-sm-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-sm-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-sm-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-sm-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-sm-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-sm-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-sm-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-sm-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-sm-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-sm-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .object-fit-md-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-md-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-md-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-md-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-md-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-md-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    order: -1 !important;\n  }\n  .order-md-0 {\n    order: 0 !important;\n  }\n  .order-md-1 {\n    order: 1 !important;\n  }\n  .order-md-2 {\n    order: 2 !important;\n  }\n  .order-md-3 {\n    order: 3 !important;\n  }\n  .order-md-4 {\n    order: 4 !important;\n  }\n  .order-md-5 {\n    order: 5 !important;\n  }\n  .order-md-last {\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-md-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-md-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-md-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-md-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-md-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-md-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-md-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-md-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-md-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-md-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-md-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-md-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .object-fit-lg-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-lg-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-lg-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-lg-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-lg-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-lg-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    order: 5 !important;\n  }\n  .order-lg-last {\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-lg-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-lg-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-lg-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-lg-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-lg-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-lg-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-lg-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-lg-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-lg-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-lg-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-lg-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-lg-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .object-fit-xl-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-xl-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-xl-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-xl-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-xl-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    order: 5 !important;\n  }\n  .order-xl-last {\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-xl-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-xl-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-xl-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-xl-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-xl-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-xl-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-xl-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-xl-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-xl-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-xl-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-xl-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-xl-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .object-fit-xxl-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-xxl-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-xxl-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-xxl-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-xxl-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xxl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-xxl-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-xxl-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-xxl-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-xxl-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-xxl-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-xxl-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-xxl-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-xxl-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-xxl-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-xxl-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-xxl-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-xxl-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */"
  },
  {
    "path": "public/assets/bootstrap-5.3.2-dist/css/bootstrap.rtl.css",
    "content": "@charset \"UTF-8\";\n/*!\n * Bootstrap  v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n  --bs-blue: #0d6efd;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #d63384;\n  --bs-red: #dc3545;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ffc107;\n  --bs-green: #198754;\n  --bs-teal: #20c997;\n  --bs-cyan: #0dcaf0;\n  --bs-black: #000;\n  --bs-white: #fff;\n  --bs-gray: #6c757d;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #6c757d;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #0d6efd;\n  --bs-secondary: #6c757d;\n  --bs-success: #198754;\n  --bs-info: #0dcaf0;\n  --bs-warning: #ffc107;\n  --bs-danger: #dc3545;\n  --bs-light: #f8f9fa;\n  --bs-dark: #212529;\n  --bs-primary-rgb: 13, 110, 253;\n  --bs-secondary-rgb: 108, 117, 125;\n  --bs-success-rgb: 25, 135, 84;\n  --bs-info-rgb: 13, 202, 240;\n  --bs-warning-rgb: 255, 193, 7;\n  --bs-danger-rgb: 220, 53, 69;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 33, 37, 41;\n  --bs-primary-text-emphasis: #052c65;\n  --bs-secondary-text-emphasis: #2b2f32;\n  --bs-success-text-emphasis: #0a3622;\n  --bs-info-text-emphasis: #055160;\n  --bs-warning-text-emphasis: #664d03;\n  --bs-danger-text-emphasis: #58151c;\n  --bs-light-text-emphasis: #495057;\n  --bs-dark-text-emphasis: #495057;\n  --bs-primary-bg-subtle: #cfe2ff;\n  --bs-secondary-bg-subtle: #e2e3e5;\n  --bs-success-bg-subtle: #d1e7dd;\n  --bs-info-bg-subtle: #cff4fc;\n  --bs-warning-bg-subtle: #fff3cd;\n  --bs-danger-bg-subtle: #f8d7da;\n  --bs-light-bg-subtle: #fcfcfd;\n  --bs-dark-bg-subtle: #ced4da;\n  --bs-primary-border-subtle: #9ec5fe;\n  --bs-secondary-border-subtle: #c4c8cb;\n  --bs-success-border-subtle: #a3cfbb;\n  --bs-info-border-subtle: #9eeaf9;\n  --bs-warning-border-subtle: #ffe69c;\n  --bs-danger-border-subtle: #f1aeb5;\n  --bs-light-border-subtle: #e9ecef;\n  --bs-dark-border-subtle: #adb5bd;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #212529;\n  --bs-body-color-rgb: 33, 37, 41;\n  --bs-body-bg: #fff;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-emphasis-color: #000;\n  --bs-emphasis-color-rgb: 0, 0, 0;\n  --bs-secondary-color: rgba(33, 37, 41, 0.75);\n  --bs-secondary-color-rgb: 33, 37, 41;\n  --bs-secondary-bg: #e9ecef;\n  --bs-secondary-bg-rgb: 233, 236, 239;\n  --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n  --bs-tertiary-color-rgb: 33, 37, 41;\n  --bs-tertiary-bg: #f8f9fa;\n  --bs-tertiary-bg-rgb: 248, 249, 250;\n  --bs-heading-color: inherit;\n  --bs-link-color: #0d6efd;\n  --bs-link-color-rgb: 13, 110, 253;\n  --bs-link-decoration: underline;\n  --bs-link-hover-color: #0a58ca;\n  --bs-link-hover-color-rgb: 10, 88, 202;\n  --bs-code-color: #d63384;\n  --bs-highlight-color: #212529;\n  --bs-highlight-bg: #fff3cd;\n  --bs-border-width: 1px;\n  --bs-border-style: solid;\n  --bs-border-color: #dee2e6;\n  --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n  --bs-border-radius: 0.375rem;\n  --bs-border-radius-sm: 0.25rem;\n  --bs-border-radius-lg: 0.5rem;\n  --bs-border-radius-xl: 1rem;\n  --bs-border-radius-xxl: 2rem;\n  --bs-border-radius-2xl: var(--bs-border-radius-xxl);\n  --bs-border-radius-pill: 50rem;\n  --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n  --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);\n  --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n  --bs-focus-ring-width: 0.25rem;\n  --bs-focus-ring-opacity: 0.25;\n  --bs-focus-ring-color: rgba(13, 110, 253, 0.25);\n  --bs-form-valid-color: #198754;\n  --bs-form-valid-border-color: #198754;\n  --bs-form-invalid-color: #dc3545;\n  --bs-form-invalid-border-color: #dc3545;\n}\n\n[data-bs-theme=dark] {\n  color-scheme: dark;\n  --bs-body-color: #dee2e6;\n  --bs-body-color-rgb: 222, 226, 230;\n  --bs-body-bg: #212529;\n  --bs-body-bg-rgb: 33, 37, 41;\n  --bs-emphasis-color: #fff;\n  --bs-emphasis-color-rgb: 255, 255, 255;\n  --bs-secondary-color: rgba(222, 226, 230, 0.75);\n  --bs-secondary-color-rgb: 222, 226, 230;\n  --bs-secondary-bg: #343a40;\n  --bs-secondary-bg-rgb: 52, 58, 64;\n  --bs-tertiary-color: rgba(222, 226, 230, 0.5);\n  --bs-tertiary-color-rgb: 222, 226, 230;\n  --bs-tertiary-bg: #2b3035;\n  --bs-tertiary-bg-rgb: 43, 48, 53;\n  --bs-primary-text-emphasis: #6ea8fe;\n  --bs-secondary-text-emphasis: #a7acb1;\n  --bs-success-text-emphasis: #75b798;\n  --bs-info-text-emphasis: #6edff6;\n  --bs-warning-text-emphasis: #ffda6a;\n  --bs-danger-text-emphasis: #ea868f;\n  --bs-light-text-emphasis: #f8f9fa;\n  --bs-dark-text-emphasis: #dee2e6;\n  --bs-primary-bg-subtle: #031633;\n  --bs-secondary-bg-subtle: #161719;\n  --bs-success-bg-subtle: #051b11;\n  --bs-info-bg-subtle: #032830;\n  --bs-warning-bg-subtle: #332701;\n  --bs-danger-bg-subtle: #2c0b0e;\n  --bs-light-bg-subtle: #343a40;\n  --bs-dark-bg-subtle: #1a1d20;\n  --bs-primary-border-subtle: #084298;\n  --bs-secondary-border-subtle: #41464b;\n  --bs-success-border-subtle: #0f5132;\n  --bs-info-border-subtle: #087990;\n  --bs-warning-border-subtle: #997404;\n  --bs-danger-border-subtle: #842029;\n  --bs-light-border-subtle: #495057;\n  --bs-dark-border-subtle: #343a40;\n  --bs-heading-color: inherit;\n  --bs-link-color: #6ea8fe;\n  --bs-link-hover-color: #8bb9fe;\n  --bs-link-color-rgb: 110, 168, 254;\n  --bs-link-hover-color-rgb: 139, 185, 254;\n  --bs-code-color: #e685b5;\n  --bs-highlight-color: #dee2e6;\n  --bs-highlight-bg: #664d03;\n  --bs-border-color: #495057;\n  --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n  --bs-form-valid-color: #75b798;\n  --bs-form-valid-border-color: #75b798;\n  --bs-form-invalid-color: #ea868f;\n  --bs-form-invalid-border-color: #ea868f;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  border: 0;\n  border-top: var(--bs-border-width) solid;\n  opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n  color: var(--bs-heading-color);\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-right: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: 0.5rem;\n  margin-right: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.1875em;\n  color: var(--bs-highlight-color);\n  background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\na {\n  color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n  text-decoration: underline;\n}\na:hover {\n  --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: var(--bs-code-color);\n  word-wrap: break-word;\n}\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.1875rem 0.375rem;\n  font-size: 0.875em;\n  color: var(--bs-body-bg);\n  background-color: var(--bs-body-color);\n  border-radius: 0.25rem;\n}\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: var(--bs-secondary-color);\n  text-align: right;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=button] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\nselect:disabled {\n  opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n  display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n  -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: right;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\nlegend + * {\n  clear: right;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=search] {\n  -webkit-appearance: textfield;\n  outline-offset: -2px;\n}\n\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\n::file-selector-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-right: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-right: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n  margin-left: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #6c757d;\n}\n.blockquote-footer::before {\n  content: \"— \";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: var(--bs-body-bg);\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  border-radius: var(--bs-border-radius);\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: var(--bs-secondary-color);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  width: 100%;\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  margin-left: auto;\n  margin-right: auto;\n}\n\n@media (min-width: 576px) {\n  .container-sm, .container {\n    max-width: 540px;\n  }\n}\n@media (min-width: 768px) {\n  .container-md, .container-sm, .container {\n    max-width: 720px;\n  }\n}\n@media (min-width: 992px) {\n  .container-lg, .container-md, .container-sm, .container {\n    max-width: 960px;\n  }\n}\n@media (min-width: 1200px) {\n  .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1140px;\n  }\n}\n@media (min-width: 1400px) {\n  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1320px;\n  }\n}\n:root {\n  --bs-breakpoint-xs: 0;\n  --bs-breakpoint-sm: 576px;\n  --bs-breakpoint-md: 768px;\n  --bs-breakpoint-lg: 992px;\n  --bs-breakpoint-xl: 1200px;\n  --bs-breakpoint-xxl: 1400px;\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: flex;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-left: calc(-0.5 * var(--bs-gutter-x));\n  margin-right: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.row-cols-4 > * {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-auto {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  flex: 0 0 auto;\n  width: 8.33333333%;\n}\n\n.col-2 {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-3 {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.col-5 {\n  flex: 0 0 auto;\n  width: 41.66666667%;\n}\n\n.col-6 {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  flex: 0 0 auto;\n  width: 58.33333333%;\n}\n\n.col-8 {\n  flex: 0 0 auto;\n  width: 66.66666667%;\n}\n\n.col-9 {\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  flex: 0 0 auto;\n  width: 83.33333333%;\n}\n\n.col-11 {\n  flex: 0 0 auto;\n  width: 91.66666667%;\n}\n\n.col-12 {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-right: 8.33333333%;\n}\n\n.offset-2 {\n  margin-right: 16.66666667%;\n}\n\n.offset-3 {\n  margin-right: 25%;\n}\n\n.offset-4 {\n  margin-right: 33.33333333%;\n}\n\n.offset-5 {\n  margin-right: 41.66666667%;\n}\n\n.offset-6 {\n  margin-right: 50%;\n}\n\n.offset-7 {\n  margin-right: 58.33333333%;\n}\n\n.offset-8 {\n  margin-right: 66.66666667%;\n}\n\n.offset-9 {\n  margin-right: 75%;\n}\n\n.offset-10 {\n  margin-right: 83.33333333%;\n}\n\n.offset-11 {\n  margin-right: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-sm-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-sm-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-sm-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-sm-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-sm-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-sm-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-sm-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-sm-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-sm-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-sm-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-right: 0;\n  }\n  .offset-sm-1 {\n    margin-right: 8.33333333%;\n  }\n  .offset-sm-2 {\n    margin-right: 16.66666667%;\n  }\n  .offset-sm-3 {\n    margin-right: 25%;\n  }\n  .offset-sm-4 {\n    margin-right: 33.33333333%;\n  }\n  .offset-sm-5 {\n    margin-right: 41.66666667%;\n  }\n  .offset-sm-6 {\n    margin-right: 50%;\n  }\n  .offset-sm-7 {\n    margin-right: 58.33333333%;\n  }\n  .offset-sm-8 {\n    margin-right: 66.66666667%;\n  }\n  .offset-sm-9 {\n    margin-right: 75%;\n  }\n  .offset-sm-10 {\n    margin-right: 83.33333333%;\n  }\n  .offset-sm-11 {\n    margin-right: 91.66666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 768px) {\n  .col-md {\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-md-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-md-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-md-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-md-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-md-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-md-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-md-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-md-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-md-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-md-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-right: 0;\n  }\n  .offset-md-1 {\n    margin-right: 8.33333333%;\n  }\n  .offset-md-2 {\n    margin-right: 16.66666667%;\n  }\n  .offset-md-3 {\n    margin-right: 25%;\n  }\n  .offset-md-4 {\n    margin-right: 33.33333333%;\n  }\n  .offset-md-5 {\n    margin-right: 41.66666667%;\n  }\n  .offset-md-6 {\n    margin-right: 50%;\n  }\n  .offset-md-7 {\n    margin-right: 58.33333333%;\n  }\n  .offset-md-8 {\n    margin-right: 66.66666667%;\n  }\n  .offset-md-9 {\n    margin-right: 75%;\n  }\n  .offset-md-10 {\n    margin-right: 83.33333333%;\n  }\n  .offset-md-11 {\n    margin-right: 91.66666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 992px) {\n  .col-lg {\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-lg-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-lg-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-lg-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-lg-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-lg-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-lg-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-lg-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-lg-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-lg-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-lg-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-right: 0;\n  }\n  .offset-lg-1 {\n    margin-right: 8.33333333%;\n  }\n  .offset-lg-2 {\n    margin-right: 16.66666667%;\n  }\n  .offset-lg-3 {\n    margin-right: 25%;\n  }\n  .offset-lg-4 {\n    margin-right: 33.33333333%;\n  }\n  .offset-lg-5 {\n    margin-right: 41.66666667%;\n  }\n  .offset-lg-6 {\n    margin-right: 50%;\n  }\n  .offset-lg-7 {\n    margin-right: 58.33333333%;\n  }\n  .offset-lg-8 {\n    margin-right: 66.66666667%;\n  }\n  .offset-lg-9 {\n    margin-right: 75%;\n  }\n  .offset-lg-10 {\n    margin-right: 83.33333333%;\n  }\n  .offset-lg-11 {\n    margin-right: 91.66666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1200px) {\n  .col-xl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-xl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-right: 0;\n  }\n  .offset-xl-1 {\n    margin-right: 8.33333333%;\n  }\n  .offset-xl-2 {\n    margin-right: 16.66666667%;\n  }\n  .offset-xl-3 {\n    margin-right: 25%;\n  }\n  .offset-xl-4 {\n    margin-right: 33.33333333%;\n  }\n  .offset-xl-5 {\n    margin-right: 41.66666667%;\n  }\n  .offset-xl-6 {\n    margin-right: 50%;\n  }\n  .offset-xl-7 {\n    margin-right: 58.33333333%;\n  }\n  .offset-xl-8 {\n    margin-right: 66.66666667%;\n  }\n  .offset-xl-9 {\n    margin-right: 75%;\n  }\n  .offset-xl-10 {\n    margin-right: 83.33333333%;\n  }\n  .offset-xl-11 {\n    margin-right: 91.66666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1400px) {\n  .col-xxl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-xxl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xxl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xxl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xxl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xxl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xxl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xxl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xxl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xxl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xxl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-right: 0;\n  }\n  .offset-xxl-1 {\n    margin-right: 8.33333333%;\n  }\n  .offset-xxl-2 {\n    margin-right: 16.66666667%;\n  }\n  .offset-xxl-3 {\n    margin-right: 25%;\n  }\n  .offset-xxl-4 {\n    margin-right: 33.33333333%;\n  }\n  .offset-xxl-5 {\n    margin-right: 41.66666667%;\n  }\n  .offset-xxl-6 {\n    margin-right: 50%;\n  }\n  .offset-xxl-7 {\n    margin-right: 58.33333333%;\n  }\n  .offset-xxl-8 {\n    margin-right: 66.66666667%;\n  }\n  .offset-xxl-9 {\n    margin-right: 75%;\n  }\n  .offset-xxl-10 {\n    margin-right: 83.33333333%;\n  }\n  .offset-xxl-11 {\n    margin-right: 91.66666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n.table {\n  --bs-table-color-type: initial;\n  --bs-table-bg-type: initial;\n  --bs-table-color-state: initial;\n  --bs-table-bg-state: initial;\n  --bs-table-color: var(--bs-emphasis-color);\n  --bs-table-bg: var(--bs-body-bg);\n  --bs-table-border-color: var(--bs-border-color);\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: var(--bs-emphasis-color);\n  --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);\n  --bs-table-active-color: var(--bs-emphasis-color);\n  --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);\n  --bs-table-hover-color: var(--bs-emphasis-color);\n  --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  vertical-align: top;\n  border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));\n  background-color: var(--bs-table-bg);\n  border-bottom-width: var(--bs-border-width);\n  box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)));\n}\n.table > tbody {\n  vertical-align: inherit;\n}\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table-group-divider {\n  border-top: calc(var(--bs-border-width) * 2) solid currentcolor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: var(--bs-border-width) 0;\n}\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 var(--bs-border-width);\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-color-type: var(--bs-table-striped-color);\n  --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n  --bs-table-color-type: var(--bs-table-striped-color);\n  --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-active {\n  --bs-table-color-state: var(--bs-table-active-color);\n  --bs-table-bg-state: var(--bs-table-active-bg);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-color-state: var(--bs-table-hover-color);\n  --bs-table-bg-state: var(--bs-table-hover-bg);\n}\n\n.table-primary {\n  --bs-table-color: #000;\n  --bs-table-bg: #cfe2ff;\n  --bs-table-border-color: #a6b5cc;\n  --bs-table-striped-bg: #c5d7f2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bacbe6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bfd1ec;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n  --bs-table-color: #000;\n  --bs-table-bg: #e2e3e5;\n  --bs-table-border-color: #b5b6b7;\n  --bs-table-striped-bg: #d7d8da;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #cbccce;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d1d2d4;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n  --bs-table-color: #000;\n  --bs-table-bg: #d1e7dd;\n  --bs-table-border-color: #a7b9b1;\n  --bs-table-striped-bg: #c7dbd2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bcd0c7;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c1d6cc;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n  --bs-table-color: #000;\n  --bs-table-bg: #cff4fc;\n  --bs-table-border-color: #a6c3ca;\n  --bs-table-striped-bg: #c5e8ef;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #badce3;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bfe2e9;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n  --bs-table-color: #000;\n  --bs-table-bg: #fff3cd;\n  --bs-table-border-color: #ccc2a4;\n  --bs-table-striped-bg: #f2e7c3;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6dbb9;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ece1be;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n  --bs-table-color: #000;\n  --bs-table-bg: #f8d7da;\n  --bs-table-border-color: #c6acae;\n  --bs-table-striped-bg: #eccccf;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfc2c4;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5c7ca;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n  --bs-table-color: #000;\n  --bs-table-bg: #f8f9fa;\n  --bs-table-border-color: #c6c7c8;\n  --bs-table-striped-bg: #ecedee;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfe0e1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5e6e7;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n  --bs-table-color: #fff;\n  --bs-table-bg: #212529;\n  --bs-table-border-color: #4d5154;\n  --bs-table-striped-bg: #2c3034;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #373b3e;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #323539;\n  --bs-table-hover-color: #fff;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + var(--bs-border-width));\n  padding-bottom: calc(0.375rem + var(--bs-border-width));\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + var(--bs-border-width));\n  padding-bottom: calc(0.5rem + var(--bs-border-width));\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + var(--bs-border-width));\n  padding-bottom: calc(0.25rem + var(--bs-border-width));\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: var(--bs-secondary-color);\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: var(--bs-body-color);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  background-color: var(--bs-body-bg);\n  background-clip: padding-box;\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  border-radius: var(--bs-border-radius);\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n.form-control[type=file] {\n  overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control:focus {\n  color: var(--bs-body-color);\n  background-color: var(--bs-body-bg);\n  border-color: #86b7fe;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n  min-width: 85px;\n  height: 1.5em;\n  margin: 0;\n}\n.form-control::-webkit-datetime-edit {\n  display: block;\n  padding: 0;\n}\n.form-control::-moz-placeholder {\n  color: var(--bs-secondary-color);\n  opacity: 1;\n}\n.form-control::placeholder {\n  color: var(--bs-secondary-color);\n  opacity: 1;\n}\n.form-control:disabled {\n  background-color: var(--bs-secondary-bg);\n  opacity: 1;\n}\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: var(--bs-body-color);\n  background-color: var(--bs-tertiary-bg);\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: var(--bs-border-width);\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: var(--bs-body-color);\n  background-color: var(--bs-tertiary-bg);\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: var(--bs-border-width);\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: var(--bs-secondary-bg);\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: var(--bs-secondary-bg);\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: var(--bs-body-color);\n  background-color: transparent;\n  border: solid transparent;\n  border-width: var(--bs-border-width) 0;\n}\n.form-control-plaintext:focus {\n  outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-left: 0;\n  padding-right: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: var(--bs-border-radius-sm);\n}\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: var(--bs-border-radius-lg);\n}\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-control-color {\n  width: 3rem;\n  height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n  padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n  border: 0 !important;\n  border-radius: var(--bs-border-radius);\n}\n.form-control-color::-webkit-color-swatch {\n  border: 0 !important;\n  border-radius: var(--bs-border-radius);\n}\n.form-control-color.form-control-sm {\n  height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\n.form-control-color.form-control-lg {\n  height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-select {\n  --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem 0.375rem 2.25rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: var(--bs-body-color);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  background-color: var(--bs-body-bg);\n  background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);\n  background-repeat: no-repeat;\n  background-position: left 0.75rem center;\n  background-size: 16px 12px;\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  border-radius: var(--bs-border-radius);\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n.form-select:focus {\n  border-color: #86b7fe;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-left: 0.75rem;\n  background-image: none;\n}\n.form-select:disabled {\n  background-color: var(--bs-secondary-bg);\n}\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 var(--bs-body-color);\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-right: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: var(--bs-border-radius-sm);\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-right: 1rem;\n  font-size: 1.25rem;\n  border-radius: var(--bs-border-radius-lg);\n}\n\n[data-bs-theme=dark] .form-select {\n  --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-right: 1.5em;\n  margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n  float: right;\n  margin-right: -1.5em;\n}\n\n.form-check-reverse {\n  padding-left: 1.5em;\n  padding-right: 0;\n  text-align: left;\n}\n.form-check-reverse .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n  margin-right: 0;\n}\n\n.form-check-input {\n  --bs-form-check-bg: var(--bs-body-bg);\n  flex-shrink: 0;\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  background-color: var(--bs-form-check-bg);\n  background-image: var(--bs-form-check-bg-image);\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n  print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n  border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n  border-radius: 50%;\n}\n.form-check-input:active {\n  filter: brightness(90%);\n}\n.form-check-input:focus {\n  border-color: #86b7fe;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n  --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n  --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n  --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  cursor: default;\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-right: 2.5em;\n}\n.form-switch .form-check-input {\n  --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  width: 2em;\n  margin-right: -2.5em;\n  background-image: var(--bs-form-switch-bg);\n  background-position: right center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n.form-switch .form-check-input:focus {\n  --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n  background-position: left center;\n  --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n  padding-left: 2.5em;\n  padding-right: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n  margin-left: -2.5em;\n  margin-right: 0;\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-left: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {\n  --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\");\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  background-color: transparent;\n}\n.form-range:focus {\n  outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  -webkit-appearance: none;\n  appearance: none;\n  background-color: #0d6efd;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n.form-range::-webkit-slider-thumb:active {\n  background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: var(--bs-secondary-bg);\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  -moz-appearance: none;\n  appearance: none;\n  background-color: #0d6efd;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n.form-range::-moz-range-thumb:active {\n  background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: var(--bs-secondary-bg);\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range:disabled {\n  pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: var(--bs-secondary-color);\n}\n.form-range:disabled::-moz-range-thumb {\n  background-color: var(--bs-secondary-color);\n}\n\n.form-floating {\n  position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n  height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n  min-height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n  line-height: 1.25;\n}\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  overflow: hidden;\n  text-align: start;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  pointer-events: none;\n  border: var(--bs-border-width) solid transparent;\n  transform-origin: 100% 0;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n  padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {\n  color: transparent;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n  color: transparent;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  color: rgba(var(--bs-body-color-rgb), 0.65);\n  transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n  color: rgba(var(--bs-body-color-rgb), 0.65);\n  transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label::after {\n  position: absolute;\n  inset: 1rem 0.375rem;\n  z-index: -1;\n  height: 1.5em;\n  content: \"\";\n  background-color: var(--bs-body-bg);\n  border-radius: var(--bs-border-radius);\n}\n.form-floating > .form-control:focus ~ label::after,\n.form-floating > .form-control:not(:placeholder-shown) ~ label::after,\n.form-floating > .form-control-plaintext ~ label::after,\n.form-floating > .form-select ~ label::after {\n  position: absolute;\n  inset: 1rem 0.375rem;\n  z-index: -1;\n  height: 1.5em;\n  content: \"\";\n  background-color: var(--bs-body-bg);\n  border-radius: var(--bs-border-radius);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n  color: rgba(var(--bs-body-color-rgb), 0.65);\n  transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n  border-width: var(--bs-border-width) 0;\n}\n.form-floating > :disabled ~ label,\n.form-floating > .form-control:disabled ~ label {\n  color: #6c757d;\n}\n.form-floating > :disabled ~ label::after,\n.form-floating > .form-control:disabled ~ label::after {\n  background-color: var(--bs-secondary-bg);\n}\n\n.input-group {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: stretch;\n  width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n  position: relative;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n  z-index: 5;\n}\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n.input-group .btn:focus {\n  z-index: 5;\n}\n\n.input-group-text {\n  display: flex;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: var(--bs-body-color);\n  text-align: center;\n  white-space: nowrap;\n  background-color: var(--bs-tertiary-bg);\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  border-radius: var(--bs-border-radius);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: var(--bs-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: var(--bs-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-left: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-right: calc(var(--bs-border-width) * -1);\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: var(--bs-form-valid-color);\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: 0.1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: var(--bs-success);\n  border-radius: var(--bs-border-radius);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: var(--bs-form-valid-border-color);\n  padding-left: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: left calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: var(--bs-form-valid-border-color);\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-left: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  padding-left: 4.125rem;\n  background-position: left 0.75rem center, center left 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: var(--bs-form-valid-border-color);\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n  width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: var(--bs-form-valid-color);\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: var(--bs-form-valid-color);\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-right: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: var(--bs-form-invalid-color);\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: 0.1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: var(--bs-danger);\n  border-radius: var(--bs-border-radius);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: var(--bs-form-invalid-border-color);\n  padding-left: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: left calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: var(--bs-form-invalid-border-color);\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-left: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n  padding-left: 4.125rem;\n  background-position: left 0.75rem center, center left 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: var(--bs-form-invalid-border-color);\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n  width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: var(--bs-form-invalid-color);\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: var(--bs-form-invalid-color);\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-right: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n  z-index: 4;\n}\n\n.btn {\n  --bs-btn-padding-x: 0.75rem;\n  --bs-btn-padding-y: 0.375rem;\n  --bs-btn-font-family: ;\n  --bs-btn-font-size: 1rem;\n  --bs-btn-font-weight: 400;\n  --bs-btn-line-height: 1.5;\n  --bs-btn-color: var(--bs-body-color);\n  --bs-btn-bg: transparent;\n  --bs-btn-border-width: var(--bs-border-width);\n  --bs-btn-border-color: transparent;\n  --bs-btn-border-radius: var(--bs-border-radius);\n  --bs-btn-hover-border-color: transparent;\n  --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n  --bs-btn-disabled-opacity: 0.65;\n  --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n  display: inline-block;\n  padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n  font-family: var(--bs-btn-font-family);\n  font-size: var(--bs-btn-font-size);\n  font-weight: var(--bs-btn-font-weight);\n  line-height: var(--bs-btn-line-height);\n  color: var(--bs-btn-color);\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n  border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n  border-radius: var(--bs-btn-border-radius);\n  background-color: var(--bs-btn-bg);\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n.btn:hover {\n  color: var(--bs-btn-hover-color);\n  background-color: var(--bs-btn-hover-bg);\n  border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n  color: var(--bs-btn-color);\n  background-color: var(--bs-btn-bg);\n  border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n  color: var(--bs-btn-hover-color);\n  background-color: var(--bs-btn-hover-bg);\n  border-color: var(--bs-btn-hover-border-color);\n  outline: 0;\n  box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n  border-color: var(--bs-btn-hover-border-color);\n  outline: 0;\n  box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n  color: var(--bs-btn-active-color);\n  background-color: var(--bs-btn-active-bg);\n  border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n  box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n  color: var(--bs-btn-disabled-color);\n  pointer-events: none;\n  background-color: var(--bs-btn-disabled-bg);\n  border-color: var(--bs-btn-disabled-border-color);\n  opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #0d6efd;\n  --bs-btn-border-color: #0d6efd;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #0b5ed7;\n  --bs-btn-hover-border-color: #0a58ca;\n  --bs-btn-focus-shadow-rgb: 49, 132, 253;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #0a58ca;\n  --bs-btn-active-border-color: #0a53be;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #0d6efd;\n  --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #6c757d;\n  --bs-btn-border-color: #6c757d;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #5c636a;\n  --bs-btn-hover-border-color: #565e64;\n  --bs-btn-focus-shadow-rgb: 130, 138, 145;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #565e64;\n  --bs-btn-active-border-color: #51585e;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #6c757d;\n  --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #198754;\n  --bs-btn-border-color: #198754;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #157347;\n  --bs-btn-hover-border-color: #146c43;\n  --bs-btn-focus-shadow-rgb: 60, 153, 110;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #146c43;\n  --bs-btn-active-border-color: #13653f;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #198754;\n  --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n  --bs-btn-color: #000;\n  --bs-btn-bg: #0dcaf0;\n  --bs-btn-border-color: #0dcaf0;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #31d2f2;\n  --bs-btn-hover-border-color: #25cff2;\n  --bs-btn-focus-shadow-rgb: 11, 172, 204;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #3dd5f3;\n  --bs-btn-active-border-color: #25cff2;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #000;\n  --bs-btn-disabled-bg: #0dcaf0;\n  --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n  --bs-btn-color: #000;\n  --bs-btn-bg: #ffc107;\n  --bs-btn-border-color: #ffc107;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #ffca2c;\n  --bs-btn-hover-border-color: #ffc720;\n  --bs-btn-focus-shadow-rgb: 217, 164, 6;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #ffcd39;\n  --bs-btn-active-border-color: #ffc720;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #000;\n  --bs-btn-disabled-bg: #ffc107;\n  --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #dc3545;\n  --bs-btn-border-color: #dc3545;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #bb2d3b;\n  --bs-btn-hover-border-color: #b02a37;\n  --bs-btn-focus-shadow-rgb: 225, 83, 97;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #b02a37;\n  --bs-btn-active-border-color: #a52834;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #dc3545;\n  --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n  --bs-btn-color: #000;\n  --bs-btn-bg: #f8f9fa;\n  --bs-btn-border-color: #f8f9fa;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #d3d4d5;\n  --bs-btn-hover-border-color: #c6c7c8;\n  --bs-btn-focus-shadow-rgb: 211, 212, 213;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #c6c7c8;\n  --bs-btn-active-border-color: #babbbc;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #000;\n  --bs-btn-disabled-bg: #f8f9fa;\n  --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #212529;\n  --bs-btn-border-color: #212529;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #424649;\n  --bs-btn-hover-border-color: #373b3e;\n  --bs-btn-focus-shadow-rgb: 66, 70, 73;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #4d5154;\n  --bs-btn-active-border-color: #373b3e;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #212529;\n  --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n  --bs-btn-color: #0d6efd;\n  --bs-btn-border-color: #0d6efd;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #0d6efd;\n  --bs-btn-hover-border-color: #0d6efd;\n  --bs-btn-focus-shadow-rgb: 13, 110, 253;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #0d6efd;\n  --bs-btn-active-border-color: #0d6efd;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #0d6efd;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #0d6efd;\n  --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n  --bs-btn-color: #6c757d;\n  --bs-btn-border-color: #6c757d;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #6c757d;\n  --bs-btn-hover-border-color: #6c757d;\n  --bs-btn-focus-shadow-rgb: 108, 117, 125;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #6c757d;\n  --bs-btn-active-border-color: #6c757d;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #6c757d;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #6c757d;\n  --bs-gradient: none;\n}\n\n.btn-outline-success {\n  --bs-btn-color: #198754;\n  --bs-btn-border-color: #198754;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #198754;\n  --bs-btn-hover-border-color: #198754;\n  --bs-btn-focus-shadow-rgb: 25, 135, 84;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #198754;\n  --bs-btn-active-border-color: #198754;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #198754;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #198754;\n  --bs-gradient: none;\n}\n\n.btn-outline-info {\n  --bs-btn-color: #0dcaf0;\n  --bs-btn-border-color: #0dcaf0;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #0dcaf0;\n  --bs-btn-hover-border-color: #0dcaf0;\n  --bs-btn-focus-shadow-rgb: 13, 202, 240;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #0dcaf0;\n  --bs-btn-active-border-color: #0dcaf0;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #0dcaf0;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #0dcaf0;\n  --bs-gradient: none;\n}\n\n.btn-outline-warning {\n  --bs-btn-color: #ffc107;\n  --bs-btn-border-color: #ffc107;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #ffc107;\n  --bs-btn-hover-border-color: #ffc107;\n  --bs-btn-focus-shadow-rgb: 255, 193, 7;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #ffc107;\n  --bs-btn-active-border-color: #ffc107;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #ffc107;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #ffc107;\n  --bs-gradient: none;\n}\n\n.btn-outline-danger {\n  --bs-btn-color: #dc3545;\n  --bs-btn-border-color: #dc3545;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #dc3545;\n  --bs-btn-hover-border-color: #dc3545;\n  --bs-btn-focus-shadow-rgb: 220, 53, 69;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #dc3545;\n  --bs-btn-active-border-color: #dc3545;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #dc3545;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #dc3545;\n  --bs-gradient: none;\n}\n\n.btn-outline-light {\n  --bs-btn-color: #f8f9fa;\n  --bs-btn-border-color: #f8f9fa;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #f8f9fa;\n  --bs-btn-hover-border-color: #f8f9fa;\n  --bs-btn-focus-shadow-rgb: 248, 249, 250;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #f8f9fa;\n  --bs-btn-active-border-color: #f8f9fa;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #f8f9fa;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #f8f9fa;\n  --bs-gradient: none;\n}\n\n.btn-outline-dark {\n  --bs-btn-color: #212529;\n  --bs-btn-border-color: #212529;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #212529;\n  --bs-btn-hover-border-color: #212529;\n  --bs-btn-focus-shadow-rgb: 33, 37, 41;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #212529;\n  --bs-btn-active-border-color: #212529;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #212529;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #212529;\n  --bs-gradient: none;\n}\n\n.btn-link {\n  --bs-btn-font-weight: 400;\n  --bs-btn-color: var(--bs-link-color);\n  --bs-btn-bg: transparent;\n  --bs-btn-border-color: transparent;\n  --bs-btn-hover-color: var(--bs-link-hover-color);\n  --bs-btn-hover-border-color: transparent;\n  --bs-btn-active-color: var(--bs-link-hover-color);\n  --bs-btn-active-border-color: transparent;\n  --bs-btn-disabled-color: #6c757d;\n  --bs-btn-disabled-border-color: transparent;\n  --bs-btn-box-shadow: 0 0 0 #000;\n  --bs-btn-focus-shadow-rgb: 49, 132, 253;\n  text-decoration: underline;\n}\n.btn-link:focus-visible {\n  color: var(--bs-btn-color);\n}\n.btn-link:hover {\n  color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  --bs-btn-padding-y: 0.5rem;\n  --bs-btn-padding-x: 1rem;\n  --bs-btn-font-size: 1.25rem;\n  --bs-btn-border-radius: var(--bs-border-radius-lg);\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  --bs-btn-padding-y: 0.25rem;\n  --bs-btn-padding-x: 0.5rem;\n  --bs-btn-font-size: 0.875rem;\n  --bs-btn-border-radius: var(--bs-border-radius-sm);\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-left: 0.3em solid transparent;\n  border-bottom: 0;\n  border-right: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n  margin-right: 0;\n}\n\n.dropdown-menu {\n  --bs-dropdown-zindex: 1000;\n  --bs-dropdown-min-width: 10rem;\n  --bs-dropdown-padding-x: 0;\n  --bs-dropdown-padding-y: 0.5rem;\n  --bs-dropdown-spacer: 0.125rem;\n  --bs-dropdown-font-size: 1rem;\n  --bs-dropdown-color: var(--bs-body-color);\n  --bs-dropdown-bg: var(--bs-body-bg);\n  --bs-dropdown-border-color: var(--bs-border-color-translucent);\n  --bs-dropdown-border-radius: var(--bs-border-radius);\n  --bs-dropdown-border-width: var(--bs-border-width);\n  --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));\n  --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n  --bs-dropdown-divider-margin-y: 0.5rem;\n  --bs-dropdown-box-shadow: var(--bs-box-shadow);\n  --bs-dropdown-link-color: var(--bs-body-color);\n  --bs-dropdown-link-hover-color: var(--bs-body-color);\n  --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);\n  --bs-dropdown-link-active-color: #fff;\n  --bs-dropdown-link-active-bg: #0d6efd;\n  --bs-dropdown-link-disabled-color: var(--bs-tertiary-color);\n  --bs-dropdown-item-padding-x: 1rem;\n  --bs-dropdown-item-padding-y: 0.25rem;\n  --bs-dropdown-header-color: #6c757d;\n  --bs-dropdown-header-padding-x: 1rem;\n  --bs-dropdown-header-padding-y: 0.5rem;\n  position: absolute;\n  z-index: var(--bs-dropdown-zindex);\n  display: none;\n  min-width: var(--bs-dropdown-min-width);\n  padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n  margin: 0;\n  font-size: var(--bs-dropdown-font-size);\n  color: var(--bs-dropdown-color);\n  text-align: right;\n  list-style: none;\n  background-color: var(--bs-dropdown-bg);\n  background-clip: padding-box;\n  border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n  border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  right: 0;\n  margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n  left: auto;\n  right: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n  left: 0;\n  right: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    left: auto;\n    right: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    left: 0;\n    right: auto;\n  }\n}\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    left: auto;\n    right: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    left: 0;\n    right: auto;\n  }\n}\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    left: auto;\n    right: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    left: 0;\n    right: auto;\n  }\n}\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    left: auto;\n    right: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    left: 0;\n    right: auto;\n  }\n}\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    left: auto;\n    right: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    left: 0;\n    right: auto;\n  }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-left: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-right: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n  margin-right: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  left: auto;\n  right: 100%;\n  margin-top: 0;\n  margin-right: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-left: 0;\n  border-bottom: 0.3em solid transparent;\n  border-right: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n  margin-right: 0;\n}\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  left: 100%;\n  right: auto;\n  margin-top: 0;\n  margin-left: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-left: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n  margin-right: 0;\n}\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: var(--bs-dropdown-divider-margin-y) 0;\n  overflow: hidden;\n  border-top: 1px solid var(--bs-dropdown-divider-bg);\n  opacity: 1;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n  clear: both;\n  font-weight: 400;\n  color: var(--bs-dropdown-link-color);\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n  border-radius: var(--bs-dropdown-item-border-radius, 0);\n}\n.dropdown-item:hover, .dropdown-item:focus {\n  color: var(--bs-dropdown-link-hover-color);\n  background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n  color: var(--bs-dropdown-link-active-color);\n  text-decoration: none;\n  background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: var(--bs-dropdown-link-disabled-color);\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: var(--bs-dropdown-header-color);\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n  color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n  --bs-dropdown-color: #dee2e6;\n  --bs-dropdown-bg: #343a40;\n  --bs-dropdown-border-color: var(--bs-border-color-translucent);\n  --bs-dropdown-box-shadow: ;\n  --bs-dropdown-link-color: #dee2e6;\n  --bs-dropdown-link-hover-color: #fff;\n  --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n  --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n  --bs-dropdown-link-active-color: #fff;\n  --bs-dropdown-link-active-bg: #0d6efd;\n  --bs-dropdown-link-disabled-color: #adb5bd;\n  --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-flex;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group {\n  border-radius: var(--bs-border-radius);\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n  margin-right: calc(var(--bs-border-width) * -1);\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-left: 0.5625rem;\n  padding-right: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n  margin-right: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n  margin-left: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-left: 0.375rem;\n  padding-right: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\n\n.btn-group-vertical {\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: calc(var(--bs-border-width) * -1);\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.nav {\n  --bs-nav-link-padding-x: 1rem;\n  --bs-nav-link-padding-y: 0.5rem;\n  --bs-nav-link-font-weight: ;\n  --bs-nav-link-color: var(--bs-link-color);\n  --bs-nav-link-hover-color: var(--bs-link-hover-color);\n  --bs-nav-link-disabled-color: var(--bs-secondary-color);\n  display: flex;\n  flex-wrap: wrap;\n  padding-right: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n  font-size: var(--bs-nav-link-font-size);\n  font-weight: var(--bs-nav-link-font-weight);\n  color: var(--bs-nav-link-color);\n  text-decoration: none;\n  background: none;\n  border: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n.nav-link:hover, .nav-link:focus {\n  color: var(--bs-nav-link-hover-color);\n}\n.nav-link:focus-visible {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.nav-link.disabled, .nav-link:disabled {\n  color: var(--bs-nav-link-disabled-color);\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  --bs-nav-tabs-border-width: var(--bs-border-width);\n  --bs-nav-tabs-border-color: var(--bs-border-color);\n  --bs-nav-tabs-border-radius: var(--bs-border-radius);\n  --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n  --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n  --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n  --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n  border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n  margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n  border: var(--bs-nav-tabs-border-width) solid transparent;\n  border-top-right-radius: var(--bs-nav-tabs-border-radius);\n  border-top-left-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  isolation: isolate;\n  border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: var(--bs-nav-tabs-link-active-color);\n  background-color: var(--bs-nav-tabs-link-active-bg);\n  border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n  margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.nav-pills {\n  --bs-nav-pills-border-radius: var(--bs-border-radius);\n  --bs-nav-pills-link-active-color: #fff;\n  --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n  border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: var(--bs-nav-pills-link-active-color);\n  background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-underline {\n  --bs-nav-underline-gap: 1rem;\n  --bs-nav-underline-border-width: 0.125rem;\n  --bs-nav-underline-link-active-color: var(--bs-emphasis-color);\n  gap: var(--bs-nav-underline-gap);\n}\n.nav-underline .nav-link {\n  padding-left: 0;\n  padding-right: 0;\n  border-bottom: var(--bs-nav-underline-border-width) solid transparent;\n}\n.nav-underline .nav-link:hover, .nav-underline .nav-link:focus {\n  border-bottom-color: currentcolor;\n}\n.nav-underline .nav-link.active,\n.nav-underline .show > .nav-link {\n  font-weight: 700;\n  color: var(--bs-nav-underline-link-active-color);\n  border-bottom-color: currentcolor;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  flex-basis: 0;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  --bs-navbar-padding-x: 0;\n  --bs-navbar-padding-y: 0.5rem;\n  --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);\n  --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);\n  --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);\n  --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);\n  --bs-navbar-brand-padding-y: 0.3125rem;\n  --bs-navbar-brand-margin-end: 1rem;\n  --bs-navbar-brand-font-size: 1.25rem;\n  --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);\n  --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);\n  --bs-navbar-nav-link-padding-x: 0.5rem;\n  --bs-navbar-toggler-padding-y: 0.25rem;\n  --bs-navbar-toggler-padding-x: 0.75rem;\n  --bs-navbar-toggler-font-size: 1.25rem;\n  --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n  --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);\n  --bs-navbar-toggler-border-radius: var(--bs-border-radius);\n  --bs-navbar-toggler-focus-width: 0.25rem;\n  --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n  display: flex;\n  flex-wrap: inherit;\n  align-items: center;\n  justify-content: space-between;\n}\n.navbar-brand {\n  padding-top: var(--bs-navbar-brand-padding-y);\n  padding-bottom: var(--bs-navbar-brand-padding-y);\n  margin-left: var(--bs-navbar-brand-margin-end);\n  font-size: var(--bs-navbar-brand-font-size);\n  color: var(--bs-navbar-brand-color);\n  text-decoration: none;\n  white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n  color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n  --bs-nav-link-padding-x: 0;\n  --bs-nav-link-padding-y: 0.5rem;\n  --bs-nav-link-font-weight: ;\n  --bs-nav-link-color: var(--bs-navbar-color);\n  --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n  --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n  display: flex;\n  flex-direction: column;\n  padding-right: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.navbar-nav .nav-link.active, .navbar-nav .nav-link.show {\n  color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n  color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n  flex-basis: 100%;\n  flex-grow: 1;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n  font-size: var(--bs-navbar-toggler-font-size);\n  line-height: 1;\n  color: var(--bs-navbar-color);\n  background-color: transparent;\n  border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n  border-radius: var(--bs-navbar-toggler-border-radius);\n  transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-image: var(--bs-navbar-toggler-icon-bg);\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-sm .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-md .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-lg .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-xl .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-xxl .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n.navbar-expand {\n  flex-wrap: nowrap;\n  justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n  flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n  padding-left: var(--bs-navbar-nav-link-padding-x);\n  padding-right: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n  display: flex !important;\n  flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n.navbar-expand .offcanvas {\n  position: static;\n  z-index: auto;\n  flex-grow: 1;\n  width: auto !important;\n  height: auto !important;\n  visibility: visible !important;\n  background-color: transparent !important;\n  border: 0 !important;\n  transform: none !important;\n  transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n  display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n  display: flex;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-dark,\n.navbar[data-bs-theme=dark] {\n  --bs-navbar-color: rgba(255, 255, 255, 0.55);\n  --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n  --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n  --bs-navbar-active-color: #fff;\n  --bs-navbar-brand-color: #fff;\n  --bs-navbar-brand-hover-color: #fff;\n  --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n  --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n[data-bs-theme=dark] .navbar-toggler-icon {\n  --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n  --bs-card-spacer-y: 1rem;\n  --bs-card-spacer-x: 1rem;\n  --bs-card-title-spacer-y: 0.5rem;\n  --bs-card-title-color: ;\n  --bs-card-subtitle-color: ;\n  --bs-card-border-width: var(--bs-border-width);\n  --bs-card-border-color: var(--bs-border-color-translucent);\n  --bs-card-border-radius: var(--bs-border-radius);\n  --bs-card-box-shadow: ;\n  --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n  --bs-card-cap-padding-y: 0.5rem;\n  --bs-card-cap-padding-x: 1rem;\n  --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);\n  --bs-card-cap-color: ;\n  --bs-card-height: ;\n  --bs-card-color: ;\n  --bs-card-bg: var(--bs-body-bg);\n  --bs-card-img-overlay-padding: 1rem;\n  --bs-card-group-margin: 0.75rem;\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  height: var(--bs-card-height);\n  color: var(--bs-body-color);\n  word-wrap: break-word;\n  background-color: var(--bs-card-bg);\n  background-clip: border-box;\n  border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n  border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n  margin-left: 0;\n  margin-right: 0;\n}\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-right-radius: var(--bs-card-inner-border-radius);\n  border-top-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-left-radius: var(--bs-card-inner-border-radius);\n  border-bottom-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  flex: 1 1 auto;\n  padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n  color: var(--bs-card-color);\n}\n\n.card-title {\n  margin-bottom: var(--bs-card-title-spacer-y);\n  color: var(--bs-card-title-color);\n}\n\n.card-subtitle {\n  margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n  margin-bottom: 0;\n  color: var(--bs-card-subtitle-color);\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-right: var(--bs-card-spacer-x);\n}\n\n.card-header {\n  padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n  margin-bottom: 0;\n  color: var(--bs-card-cap-color);\n  background-color: var(--bs-card-cap-bg);\n  border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n  border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n  padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n  color: var(--bs-card-cap-color);\n  background-color: var(--bs-card-cap-bg);\n  border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n  border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n  margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n  margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n  margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n  border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n  background-color: var(--bs-card-bg);\n  border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n  margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n  margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  padding: var(--bs-card-img-overlay-padding);\n  border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-right-radius: var(--bs-card-inner-border-radius);\n  border-top-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-left-radius: var(--bs-card-inner-border-radius);\n  border-bottom-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n  margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n  .card-group {\n    display: flex;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-right: 0;\n    border-right: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n}\n\n.accordion {\n  --bs-accordion-color: var(--bs-body-color);\n  --bs-accordion-bg: var(--bs-body-bg);\n  --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n  --bs-accordion-border-color: var(--bs-border-color);\n  --bs-accordion-border-width: var(--bs-border-width);\n  --bs-accordion-border-radius: var(--bs-border-radius);\n  --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n  --bs-accordion-btn-padding-x: 1.25rem;\n  --bs-accordion-btn-padding-y: 1rem;\n  --bs-accordion-btn-color: var(--bs-body-color);\n  --bs-accordion-btn-bg: var(--bs-accordion-bg);\n  --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  --bs-accordion-btn-icon-width: 1.25rem;\n  --bs-accordion-btn-icon-transform: rotate(-180deg);\n  --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n  --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  --bs-accordion-btn-focus-border-color: #86b7fe;\n  --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n  --bs-accordion-body-padding-x: 1.25rem;\n  --bs-accordion-body-padding-y: 1rem;\n  --bs-accordion-active-color: var(--bs-primary-text-emphasis);\n  --bs-accordion-active-bg: var(--bs-primary-bg-subtle);\n}\n\n.accordion-button {\n  position: relative;\n  display: flex;\n  align-items: center;\n  width: 100%;\n  padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n  font-size: 1rem;\n  color: var(--bs-accordion-btn-color);\n  text-align: right;\n  background-color: var(--bs-accordion-btn-bg);\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n.accordion-button:not(.collapsed) {\n  color: var(--bs-accordion-active-color);\n  background-color: var(--bs-accordion-active-bg);\n  box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n  background-image: var(--bs-accordion-btn-active-icon);\n  transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n  flex-shrink: 0;\n  width: var(--bs-accordion-btn-icon-width);\n  height: var(--bs-accordion-btn-icon-width);\n  margin-right: auto;\n  content: \"\";\n  background-image: var(--bs-accordion-btn-icon);\n  background-repeat: no-repeat;\n  background-size: var(--bs-accordion-btn-icon-width);\n  transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n.accordion-button:hover {\n  z-index: 2;\n}\n.accordion-button:focus {\n  z-index: 3;\n  border-color: var(--bs-accordion-btn-focus-border-color);\n  outline: 0;\n  box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  color: var(--bs-accordion-color);\n  background-color: var(--bs-accordion-bg);\n  border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n  border-top-right-radius: var(--bs-accordion-border-radius);\n  border-top-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n  border-top-right-radius: var(--bs-accordion-inner-border-radius);\n  border-top-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n.accordion-item:last-of-type {\n  border-bottom-left-radius: var(--bs-accordion-border-radius);\n  border-bottom-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n  border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-left-radius: var(--bs-accordion-border-radius);\n  border-bottom-right-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n  padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n.accordion-flush .accordion-item {\n  border-left: 0;\n  border-right: 0;\n  border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n  border-radius: 0;\n}\n\n[data-bs-theme=dark] .accordion-button::after {\n  --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.breadcrumb {\n  --bs-breadcrumb-padding-x: 0;\n  --bs-breadcrumb-padding-y: 0;\n  --bs-breadcrumb-margin-bottom: 1rem;\n  --bs-breadcrumb-bg: ;\n  --bs-breadcrumb-border-radius: ;\n  --bs-breadcrumb-divider-color: var(--bs-secondary-color);\n  --bs-breadcrumb-item-padding-x: 0.5rem;\n  --bs-breadcrumb-item-active-color: var(--bs-secondary-color);\n  display: flex;\n  flex-wrap: wrap;\n  padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n  margin-bottom: var(--bs-breadcrumb-margin-bottom);\n  font-size: var(--bs-breadcrumb-font-size);\n  list-style: none;\n  background-color: var(--bs-breadcrumb-bg);\n  border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-right: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n  float: right;\n  padding-left: var(--bs-breadcrumb-item-padding-x);\n  color: var(--bs-breadcrumb-divider-color);\n  content:  var(--bs-breadcrumb-divider, \"/\") ;\n}\n.breadcrumb-item.active {\n  color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n  --bs-pagination-padding-x: 0.75rem;\n  --bs-pagination-padding-y: 0.375rem;\n  --bs-pagination-font-size: 1rem;\n  --bs-pagination-color: var(--bs-link-color);\n  --bs-pagination-bg: var(--bs-body-bg);\n  --bs-pagination-border-width: var(--bs-border-width);\n  --bs-pagination-border-color: var(--bs-border-color);\n  --bs-pagination-border-radius: var(--bs-border-radius);\n  --bs-pagination-hover-color: var(--bs-link-hover-color);\n  --bs-pagination-hover-bg: var(--bs-tertiary-bg);\n  --bs-pagination-hover-border-color: var(--bs-border-color);\n  --bs-pagination-focus-color: var(--bs-link-hover-color);\n  --bs-pagination-focus-bg: var(--bs-secondary-bg);\n  --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n  --bs-pagination-active-color: #fff;\n  --bs-pagination-active-bg: #0d6efd;\n  --bs-pagination-active-border-color: #0d6efd;\n  --bs-pagination-disabled-color: var(--bs-secondary-color);\n  --bs-pagination-disabled-bg: var(--bs-secondary-bg);\n  --bs-pagination-disabled-border-color: var(--bs-border-color);\n  display: flex;\n  padding-right: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n  font-size: var(--bs-pagination-font-size);\n  color: var(--bs-pagination-color);\n  text-decoration: none;\n  background-color: var(--bs-pagination-bg);\n  border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n.page-link:hover {\n  z-index: 2;\n  color: var(--bs-pagination-hover-color);\n  background-color: var(--bs-pagination-hover-bg);\n  border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n  z-index: 3;\n  color: var(--bs-pagination-focus-color);\n  background-color: var(--bs-pagination-focus-bg);\n  outline: 0;\n  box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n  z-index: 3;\n  color: var(--bs-pagination-active-color);\n  background-color: var(--bs-pagination-active-bg);\n  border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n  color: var(--bs-pagination-disabled-color);\n  pointer-events: none;\n  background-color: var(--bs-pagination-disabled-bg);\n  border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-right: calc(var(--bs-border-width) * -1);\n}\n.page-item:first-child .page-link {\n  border-top-right-radius: var(--bs-pagination-border-radius);\n  border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n  border-top-left-radius: var(--bs-pagination-border-radius);\n  border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n  --bs-pagination-padding-x: 1.5rem;\n  --bs-pagination-padding-y: 0.75rem;\n  --bs-pagination-font-size: 1.25rem;\n  --bs-pagination-border-radius: var(--bs-border-radius-lg);\n}\n\n.pagination-sm {\n  --bs-pagination-padding-x: 0.5rem;\n  --bs-pagination-padding-y: 0.25rem;\n  --bs-pagination-font-size: 0.875rem;\n  --bs-pagination-border-radius: var(--bs-border-radius-sm);\n}\n\n.badge {\n  --bs-badge-padding-x: 0.65em;\n  --bs-badge-padding-y: 0.35em;\n  --bs-badge-font-size: 0.75em;\n  --bs-badge-font-weight: 700;\n  --bs-badge-color: #fff;\n  --bs-badge-border-radius: var(--bs-border-radius);\n  display: inline-block;\n  padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n  font-size: var(--bs-badge-font-size);\n  font-weight: var(--bs-badge-font-weight);\n  line-height: 1;\n  color: var(--bs-badge-color);\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  --bs-alert-bg: transparent;\n  --bs-alert-padding-x: 1rem;\n  --bs-alert-padding-y: 1rem;\n  --bs-alert-margin-bottom: 1rem;\n  --bs-alert-color: inherit;\n  --bs-alert-border-color: transparent;\n  --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);\n  --bs-alert-border-radius: var(--bs-border-radius);\n  --bs-alert-link-color: inherit;\n  position: relative;\n  padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n  margin-bottom: var(--bs-alert-margin-bottom);\n  color: var(--bs-alert-color);\n  background-color: var(--bs-alert-bg);\n  border: var(--bs-alert-border);\n  border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n  color: var(--bs-alert-link-color);\n}\n\n.alert-dismissible {\n  padding-left: 3rem;\n}\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  --bs-alert-color: var(--bs-primary-text-emphasis);\n  --bs-alert-bg: var(--bs-primary-bg-subtle);\n  --bs-alert-border-color: var(--bs-primary-border-subtle);\n  --bs-alert-link-color: var(--bs-primary-text-emphasis);\n}\n\n.alert-secondary {\n  --bs-alert-color: var(--bs-secondary-text-emphasis);\n  --bs-alert-bg: var(--bs-secondary-bg-subtle);\n  --bs-alert-border-color: var(--bs-secondary-border-subtle);\n  --bs-alert-link-color: var(--bs-secondary-text-emphasis);\n}\n\n.alert-success {\n  --bs-alert-color: var(--bs-success-text-emphasis);\n  --bs-alert-bg: var(--bs-success-bg-subtle);\n  --bs-alert-border-color: var(--bs-success-border-subtle);\n  --bs-alert-link-color: var(--bs-success-text-emphasis);\n}\n\n.alert-info {\n  --bs-alert-color: var(--bs-info-text-emphasis);\n  --bs-alert-bg: var(--bs-info-bg-subtle);\n  --bs-alert-border-color: var(--bs-info-border-subtle);\n  --bs-alert-link-color: var(--bs-info-text-emphasis);\n}\n\n.alert-warning {\n  --bs-alert-color: var(--bs-warning-text-emphasis);\n  --bs-alert-bg: var(--bs-warning-bg-subtle);\n  --bs-alert-border-color: var(--bs-warning-border-subtle);\n  --bs-alert-link-color: var(--bs-warning-text-emphasis);\n}\n\n.alert-danger {\n  --bs-alert-color: var(--bs-danger-text-emphasis);\n  --bs-alert-bg: var(--bs-danger-bg-subtle);\n  --bs-alert-border-color: var(--bs-danger-border-subtle);\n  --bs-alert-link-color: var(--bs-danger-text-emphasis);\n}\n\n.alert-light {\n  --bs-alert-color: var(--bs-light-text-emphasis);\n  --bs-alert-bg: var(--bs-light-bg-subtle);\n  --bs-alert-border-color: var(--bs-light-border-subtle);\n  --bs-alert-link-color: var(--bs-light-text-emphasis);\n}\n\n.alert-dark {\n  --bs-alert-color: var(--bs-dark-text-emphasis);\n  --bs-alert-bg: var(--bs-dark-bg-subtle);\n  --bs-alert-border-color: var(--bs-dark-border-subtle);\n  --bs-alert-link-color: var(--bs-dark-text-emphasis);\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n.progress,\n.progress-stacked {\n  --bs-progress-height: 1rem;\n  --bs-progress-font-size: 0.75rem;\n  --bs-progress-bg: var(--bs-secondary-bg);\n  --bs-progress-border-radius: var(--bs-border-radius);\n  --bs-progress-box-shadow: var(--bs-box-shadow-inset);\n  --bs-progress-bar-color: #fff;\n  --bs-progress-bar-bg: #0d6efd;\n  --bs-progress-bar-transition: width 0.6s ease;\n  display: flex;\n  height: var(--bs-progress-height);\n  overflow: hidden;\n  font-size: var(--bs-progress-font-size);\n  background-color: var(--bs-progress-bg);\n  border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  overflow: hidden;\n  color: var(--bs-progress-bar-color);\n  text-align: center;\n  white-space: nowrap;\n  background-color: var(--bs-progress-bar-bg);\n  transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-stacked > .progress {\n  overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n  width: 100%;\n}\n\n.progress-bar-animated {\n  animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    animation: none;\n  }\n}\n\n.list-group {\n  --bs-list-group-color: var(--bs-body-color);\n  --bs-list-group-bg: var(--bs-body-bg);\n  --bs-list-group-border-color: var(--bs-border-color);\n  --bs-list-group-border-width: var(--bs-border-width);\n  --bs-list-group-border-radius: var(--bs-border-radius);\n  --bs-list-group-item-padding-x: 1rem;\n  --bs-list-group-item-padding-y: 0.5rem;\n  --bs-list-group-action-color: var(--bs-secondary-color);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);\n  --bs-list-group-action-active-color: var(--bs-body-color);\n  --bs-list-group-action-active-bg: var(--bs-secondary-bg);\n  --bs-list-group-disabled-color: var(--bs-secondary-color);\n  --bs-list-group-disabled-bg: var(--bs-body-bg);\n  --bs-list-group-active-color: #fff;\n  --bs-list-group-active-bg: #0d6efd;\n  --bs-list-group-active-border-color: #0d6efd;\n  display: flex;\n  flex-direction: column;\n  padding-right: 0;\n  margin-bottom: 0;\n  border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: var(--bs-list-group-action-color);\n  text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: var(--bs-list-group-action-hover-color);\n  text-decoration: none;\n  background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n  color: var(--bs-list-group-action-active-color);\n  background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n  color: var(--bs-list-group-color);\n  text-decoration: none;\n  background-color: var(--bs-list-group-bg);\n  border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n  border-top-right-radius: inherit;\n  border-top-left-radius: inherit;\n}\n.list-group-item:last-child {\n  border-bottom-left-radius: inherit;\n  border-bottom-right-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n  color: var(--bs-list-group-disabled-color);\n  pointer-events: none;\n  background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n  z-index: 2;\n  color: var(--bs-list-group-active-color);\n  background-color: var(--bs-list-group-active-bg);\n  border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n  margin-top: calc(-1 * var(--bs-list-group-border-width));\n  border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n  flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n  border-bottom-right-radius: var(--bs-list-group-border-radius);\n  border-top-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n  border-top-left-radius: var(--bs-list-group-border-radius);\n  border-bottom-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: var(--bs-list-group-border-width);\n  border-right-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-right: calc(-1 * var(--bs-list-group-border-width));\n  border-right-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n    border-bottom-right-radius: var(--bs-list-group-border-radius);\n    border-top-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n    border-top-left-radius: var(--bs-list-group-border-radius);\n    border-bottom-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-right-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-right: calc(-1 * var(--bs-list-group-border-width));\n    border-right-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n    border-bottom-right-radius: var(--bs-list-group-border-radius);\n    border-top-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n    border-top-left-radius: var(--bs-list-group-border-radius);\n    border-bottom-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-right-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-right: calc(-1 * var(--bs-list-group-border-width));\n    border-right-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n    border-bottom-right-radius: var(--bs-list-group-border-radius);\n    border-top-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n    border-top-left-radius: var(--bs-list-group-border-radius);\n    border-bottom-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-right-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-right: calc(-1 * var(--bs-list-group-border-width));\n    border-right-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n    border-bottom-right-radius: var(--bs-list-group-border-radius);\n    border-top-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n    border-top-left-radius: var(--bs-list-group-border-radius);\n    border-bottom-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-right-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-right: calc(-1 * var(--bs-list-group-border-width));\n    border-right-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n    border-bottom-right-radius: var(--bs-list-group-border-radius);\n    border-top-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n    border-top-left-radius: var(--bs-list-group-border-radius);\n    border-bottom-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-right-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-right: calc(-1 * var(--bs-list-group-border-width));\n    border-right-width: var(--bs-list-group-border-width);\n  }\n}\n.list-group-flush {\n  border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n  border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  --bs-list-group-color: var(--bs-primary-text-emphasis);\n  --bs-list-group-bg: var(--bs-primary-bg-subtle);\n  --bs-list-group-border-color: var(--bs-primary-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-primary-border-subtle);\n  --bs-list-group-active-color: var(--bs-primary-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-primary-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-primary-text-emphasis);\n}\n\n.list-group-item-secondary {\n  --bs-list-group-color: var(--bs-secondary-text-emphasis);\n  --bs-list-group-bg: var(--bs-secondary-bg-subtle);\n  --bs-list-group-border-color: var(--bs-secondary-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);\n  --bs-list-group-active-color: var(--bs-secondary-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-secondary-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis);\n}\n\n.list-group-item-success {\n  --bs-list-group-color: var(--bs-success-text-emphasis);\n  --bs-list-group-bg: var(--bs-success-bg-subtle);\n  --bs-list-group-border-color: var(--bs-success-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-success-border-subtle);\n  --bs-list-group-active-color: var(--bs-success-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-success-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-success-text-emphasis);\n}\n\n.list-group-item-info {\n  --bs-list-group-color: var(--bs-info-text-emphasis);\n  --bs-list-group-bg: var(--bs-info-bg-subtle);\n  --bs-list-group-border-color: var(--bs-info-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-info-border-subtle);\n  --bs-list-group-active-color: var(--bs-info-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-info-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-info-text-emphasis);\n}\n\n.list-group-item-warning {\n  --bs-list-group-color: var(--bs-warning-text-emphasis);\n  --bs-list-group-bg: var(--bs-warning-bg-subtle);\n  --bs-list-group-border-color: var(--bs-warning-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-warning-border-subtle);\n  --bs-list-group-active-color: var(--bs-warning-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-warning-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-warning-text-emphasis);\n}\n\n.list-group-item-danger {\n  --bs-list-group-color: var(--bs-danger-text-emphasis);\n  --bs-list-group-bg: var(--bs-danger-bg-subtle);\n  --bs-list-group-border-color: var(--bs-danger-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-danger-border-subtle);\n  --bs-list-group-active-color: var(--bs-danger-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-danger-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-danger-text-emphasis);\n}\n\n.list-group-item-light {\n  --bs-list-group-color: var(--bs-light-text-emphasis);\n  --bs-list-group-bg: var(--bs-light-bg-subtle);\n  --bs-list-group-border-color: var(--bs-light-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-light-border-subtle);\n  --bs-list-group-active-color: var(--bs-light-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-light-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-light-text-emphasis);\n}\n\n.list-group-item-dark {\n  --bs-list-group-color: var(--bs-dark-text-emphasis);\n  --bs-list-group-bg: var(--bs-dark-bg-subtle);\n  --bs-list-group-border-color: var(--bs-dark-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-dark-border-subtle);\n  --bs-list-group-active-color: var(--bs-dark-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-dark-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-dark-text-emphasis);\n}\n\n.btn-close {\n  --bs-btn-close-color: #000;\n  --bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");\n  --bs-btn-close-opacity: 0.5;\n  --bs-btn-close-hover-opacity: 0.75;\n  --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n  --bs-btn-close-focus-opacity: 1;\n  --bs-btn-close-disabled-opacity: 0.25;\n  --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: var(--bs-btn-close-color);\n  background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.375rem;\n  opacity: var(--bs-btn-close-opacity);\n}\n.btn-close:hover {\n  color: var(--bs-btn-close-color);\n  text-decoration: none;\n  opacity: var(--bs-btn-close-hover-opacity);\n}\n.btn-close:focus {\n  outline: 0;\n  box-shadow: var(--bs-btn-close-focus-shadow);\n  opacity: var(--bs-btn-close-focus-opacity);\n}\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n  opacity: var(--bs-btn-close-disabled-opacity);\n}\n\n.btn-close-white {\n  filter: var(--bs-btn-close-white-filter);\n}\n\n[data-bs-theme=dark] .btn-close {\n  filter: var(--bs-btn-close-white-filter);\n}\n\n.toast {\n  --bs-toast-zindex: 1090;\n  --bs-toast-padding-x: 0.75rem;\n  --bs-toast-padding-y: 0.5rem;\n  --bs-toast-spacing: 1.5rem;\n  --bs-toast-max-width: 350px;\n  --bs-toast-font-size: 0.875rem;\n  --bs-toast-color: ;\n  --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n  --bs-toast-border-width: var(--bs-border-width);\n  --bs-toast-border-color: var(--bs-border-color-translucent);\n  --bs-toast-border-radius: var(--bs-border-radius);\n  --bs-toast-box-shadow: var(--bs-box-shadow);\n  --bs-toast-header-color: var(--bs-secondary-color);\n  --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n  --bs-toast-header-border-color: var(--bs-border-color-translucent);\n  width: var(--bs-toast-max-width);\n  max-width: 100%;\n  font-size: var(--bs-toast-font-size);\n  color: var(--bs-toast-color);\n  pointer-events: auto;\n  background-color: var(--bs-toast-bg);\n  background-clip: padding-box;\n  border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n  box-shadow: var(--bs-toast-box-shadow);\n  border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n  opacity: 0;\n}\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  --bs-toast-zindex: 1090;\n  position: absolute;\n  z-index: var(--bs-toast-zindex);\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n  margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n  display: flex;\n  align-items: center;\n  padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n  color: var(--bs-toast-header-color);\n  background-color: var(--bs-toast-header-bg);\n  background-clip: padding-box;\n  border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n  border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n  border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n  margin-left: calc(-0.5 * var(--bs-toast-padding-x));\n  margin-right: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n  padding: var(--bs-toast-padding-x);\n  word-wrap: break-word;\n}\n\n.modal {\n  --bs-modal-zindex: 1055;\n  --bs-modal-width: 500px;\n  --bs-modal-padding: 1rem;\n  --bs-modal-margin: 0.5rem;\n  --bs-modal-color: ;\n  --bs-modal-bg: var(--bs-body-bg);\n  --bs-modal-border-color: var(--bs-border-color-translucent);\n  --bs-modal-border-width: var(--bs-border-width);\n  --bs-modal-border-radius: var(--bs-border-radius-lg);\n  --bs-modal-box-shadow: var(--bs-box-shadow-sm);\n  --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));\n  --bs-modal-header-padding-x: 1rem;\n  --bs-modal-header-padding-y: 1rem;\n  --bs-modal-header-padding: 1rem 1rem;\n  --bs-modal-header-border-color: var(--bs-border-color);\n  --bs-modal-header-border-width: var(--bs-border-width);\n  --bs-modal-title-line-height: 1.5;\n  --bs-modal-footer-gap: 0.5rem;\n  --bs-modal-footer-bg: ;\n  --bs-modal-footer-border-color: var(--bs-border-color);\n  --bs-modal-footer-border-width: var(--bs-border-width);\n  position: fixed;\n  top: 0;\n  right: 0;\n  z-index: var(--bs-modal-zindex);\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: var(--bs-modal-margin);\n  pointer-events: none;\n}\n.modal.fade .modal-dialog {\n  transition: transform 0.3s ease-out;\n  transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n.modal.show .modal-dialog {\n  transform: none;\n}\n.modal.modal-static .modal-dialog {\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: flex;\n  align-items: center;\n  min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  color: var(--bs-modal-color);\n  pointer-events: auto;\n  background-color: var(--bs-modal-bg);\n  background-clip: padding-box;\n  border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n  border-radius: var(--bs-modal-border-radius);\n  outline: 0;\n}\n\n.modal-backdrop {\n  --bs-backdrop-zindex: 1050;\n  --bs-backdrop-bg: #000;\n  --bs-backdrop-opacity: 0.5;\n  position: fixed;\n  top: 0;\n  right: 0;\n  z-index: var(--bs-backdrop-zindex);\n  width: 100vw;\n  height: 100vh;\n  background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n  opacity: 0;\n}\n.modal-backdrop.show {\n  opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  justify-content: space-between;\n  padding: var(--bs-modal-header-padding);\n  border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n  border-top-right-radius: var(--bs-modal-inner-border-radius);\n  border-top-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n  padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n  margin: calc(-0.5 * var(--bs-modal-header-padding-y)) auto calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x));\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n  position: relative;\n  flex: 1 1 auto;\n  padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n  display: flex;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: flex-end;\n  padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n  background-color: var(--bs-modal-footer-bg);\n  border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n  border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n  border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n  margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n  .modal {\n    --bs-modal-margin: 1.75rem;\n    --bs-modal-box-shadow: var(--bs-box-shadow);\n  }\n  .modal-dialog {\n    max-width: var(--bs-modal-width);\n    margin-left: auto;\n    margin-right: auto;\n  }\n  .modal-sm {\n    --bs-modal-width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    --bs-modal-width: 800px;\n  }\n}\n@media (min-width: 1200px) {\n  .modal-xl {\n    --bs-modal-width: 1140px;\n  }\n}\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header,\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header,\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header,\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header,\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header,\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n.tooltip {\n  --bs-tooltip-zindex: 1080;\n  --bs-tooltip-max-width: 200px;\n  --bs-tooltip-padding-x: 0.5rem;\n  --bs-tooltip-padding-y: 0.25rem;\n  --bs-tooltip-margin: ;\n  --bs-tooltip-font-size: 0.875rem;\n  --bs-tooltip-color: var(--bs-body-bg);\n  --bs-tooltip-bg: var(--bs-emphasis-color);\n  --bs-tooltip-border-radius: var(--bs-border-radius);\n  --bs-tooltip-opacity: 0.9;\n  --bs-tooltip-arrow-width: 0.8rem;\n  --bs-tooltip-arrow-height: 0.4rem;\n  z-index: var(--bs-tooltip-zindex);\n  display: block;\n  margin: var(--bs-tooltip-margin);\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: right;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  white-space: normal;\n  word-spacing: normal;\n  line-break: auto;\n  font-size: var(--bs-tooltip-font-size);\n  word-wrap: break-word;\n  opacity: 0;\n}\n.tooltip.show {\n  opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n  display: block;\n  width: var(--bs-tooltip-arrow-width);\n  height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n  bottom: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n  top: -1px;\n  border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n  border-top-color: var(--bs-tooltip-bg);\n}\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n  left: calc(-1 * var(--bs-tooltip-arrow-height));\n  width: var(--bs-tooltip-arrow-height);\n  height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n  right: -1px;\n  border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n  border-right-color: var(--bs-tooltip-bg);\n}\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n  top: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n  border-bottom-color: var(--bs-tooltip-bg);\n}\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n  right: calc(-1 * var(--bs-tooltip-arrow-height));\n  width: var(--bs-tooltip-arrow-height);\n  height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n  left: -1px;\n  border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n  border-left-color: var(--bs-tooltip-bg);\n}\n.tooltip-inner {\n  max-width: var(--bs-tooltip-max-width);\n  padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n  color: var(--bs-tooltip-color);\n  text-align: center;\n  background-color: var(--bs-tooltip-bg);\n  border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n  --bs-popover-zindex: 1070;\n  --bs-popover-max-width: 276px;\n  --bs-popover-font-size: 0.875rem;\n  --bs-popover-bg: var(--bs-body-bg);\n  --bs-popover-border-width: var(--bs-border-width);\n  --bs-popover-border-color: var(--bs-border-color-translucent);\n  --bs-popover-border-radius: var(--bs-border-radius-lg);\n  --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));\n  --bs-popover-box-shadow: var(--bs-box-shadow);\n  --bs-popover-header-padding-x: 1rem;\n  --bs-popover-header-padding-y: 0.5rem;\n  --bs-popover-header-font-size: 1rem;\n  --bs-popover-header-color: inherit;\n  --bs-popover-header-bg: var(--bs-secondary-bg);\n  --bs-popover-body-padding-x: 1rem;\n  --bs-popover-body-padding-y: 1rem;\n  --bs-popover-body-color: var(--bs-body-color);\n  --bs-popover-arrow-width: 1rem;\n  --bs-popover-arrow-height: 0.5rem;\n  --bs-popover-arrow-border: var(--bs-popover-border-color);\n  z-index: var(--bs-popover-zindex);\n  display: block;\n  max-width: var(--bs-popover-max-width);\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: right;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  white-space: normal;\n  word-spacing: normal;\n  line-break: auto;\n  font-size: var(--bs-popover-font-size);\n  word-wrap: break-word;\n  background-color: var(--bs-popover-bg);\n  background-clip: padding-box;\n  border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n  border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n  display: block;\n  width: var(--bs-popover-arrow-width);\n  height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n  border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n  bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n  border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n  bottom: 0;\n  border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n  bottom: var(--bs-popover-border-width);\n  border-top-color: var(--bs-popover-bg);\n}\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n  left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n  width: var(--bs-popover-arrow-height);\n  height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n  border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n  left: 0;\n  border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n  left: var(--bs-popover-border-width);\n  border-right-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n  top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n  border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n  top: 0;\n  border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n  top: var(--bs-popover-border-width);\n  border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n  position: absolute;\n  top: 0;\n  right: 50%;\n  display: block;\n  width: var(--bs-popover-arrow-width);\n  margin-right: calc(-0.5 * var(--bs-popover-arrow-width));\n  content: \"\";\n  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n  right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n  width: var(--bs-popover-arrow-height);\n  height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n  border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n  right: 0;\n  border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n  right: var(--bs-popover-border-width);\n  border-left-color: var(--bs-popover-bg);\n}\n.popover-header {\n  padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n  margin-bottom: 0;\n  font-size: var(--bs-popover-header-font-size);\n  color: var(--bs-popover-header-color);\n  background-color: var(--bs-popover-header-bg);\n  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n  border-top-right-radius: var(--bs-popover-inner-border-radius);\n  border-top-left-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n  color: var(--bs-popover-body-color);\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: right;\n  width: 100%;\n  margin-left: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  transform: translateX(-100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  transform: translateX(100%);\n}\n\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  right: 0;\n}\n\n.carousel-control-next {\n  left: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 2;\n  display: flex;\n  justify-content: center;\n  padding: 0;\n  margin-left: 15%;\n  margin-bottom: 1rem;\n  margin-right: 15%;\n}\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-left: 3px;\n  margin-right: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  bottom: 1.25rem;\n  right: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-next-icon,\n.carousel-dark .carousel-control-prev-icon {\n  filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n[data-bs-theme=dark] .carousel .carousel-control-next-icon,\n[data-bs-theme=dark] .carousel .carousel-control-prev-icon, [data-bs-theme=dark].carousel .carousel-control-next-icon,\n[data-bs-theme=dark].carousel .carousel-control-prev-icon {\n  filter: invert(1) grayscale(100);\n}\n[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption {\n  color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n  display: inline-block;\n  width: var(--bs-spinner-width);\n  height: var(--bs-spinner-height);\n  vertical-align: var(--bs-spinner-vertical-align);\n  border-radius: 50%;\n  animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n  to {\n    transform: rotate(360deg) ;\n  }\n}\n.spinner-border {\n  --bs-spinner-width: 2rem;\n  --bs-spinner-height: 2rem;\n  --bs-spinner-vertical-align: -0.125em;\n  --bs-spinner-border-width: 0.25em;\n  --bs-spinner-animation-speed: 0.75s;\n  --bs-spinner-animation-name: spinner-border;\n  border: var(--bs-spinner-border-width) solid currentcolor;\n  border-left-color: transparent;\n}\n\n.spinner-border-sm {\n  --bs-spinner-width: 1rem;\n  --bs-spinner-height: 1rem;\n  --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n  0% {\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    transform: none;\n  }\n}\n.spinner-grow {\n  --bs-spinner-width: 2rem;\n  --bs-spinner-height: 2rem;\n  --bs-spinner-vertical-align: -0.125em;\n  --bs-spinner-animation-speed: 0.75s;\n  --bs-spinner-animation-name: spinner-grow;\n  background-color: currentcolor;\n  opacity: 0;\n}\n\n.spinner-grow-sm {\n  --bs-spinner-width: 1rem;\n  --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    --bs-spinner-animation-speed: 1.5s;\n  }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n  --bs-offcanvas-zindex: 1045;\n  --bs-offcanvas-width: 400px;\n  --bs-offcanvas-height: 30vh;\n  --bs-offcanvas-padding-x: 1rem;\n  --bs-offcanvas-padding-y: 1rem;\n  --bs-offcanvas-color: var(--bs-body-color);\n  --bs-offcanvas-bg: var(--bs-body-bg);\n  --bs-offcanvas-border-width: var(--bs-border-width);\n  --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n  --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);\n  --bs-offcanvas-transition: transform 0.3s ease-in-out;\n  --bs-offcanvas-title-line-height: 1.5;\n}\n\n@media (max-width: 575.98px) {\n  .offcanvas-sm {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-sm {\n    transition: none;\n  }\n}\n@media (max-width: 575.98px) {\n  .offcanvas-sm.offcanvas-start {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-sm.offcanvas-end {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-sm.offcanvas-top {\n    top: 0;\n    left: 0;\n    right: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-sm.offcanvas-bottom {\n    left: 0;\n    right: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 576px) {\n  .offcanvas-sm {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-sm .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-sm .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .offcanvas-md {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-md {\n    transition: none;\n  }\n}\n@media (max-width: 767.98px) {\n  .offcanvas-md.offcanvas-start {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-md.offcanvas-end {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-md.offcanvas-top {\n    top: 0;\n    left: 0;\n    right: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-md.offcanvas-bottom {\n    left: 0;\n    right: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 768px) {\n  .offcanvas-md {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-md .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-md .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .offcanvas-lg {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-lg {\n    transition: none;\n  }\n}\n@media (max-width: 991.98px) {\n  .offcanvas-lg.offcanvas-start {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-lg.offcanvas-end {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-lg.offcanvas-top {\n    top: 0;\n    left: 0;\n    right: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-lg.offcanvas-bottom {\n    left: 0;\n    right: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 992px) {\n  .offcanvas-lg {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-lg .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-lg .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .offcanvas-xl {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-xl {\n    transition: none;\n  }\n}\n@media (max-width: 1199.98px) {\n  .offcanvas-xl.offcanvas-start {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-xl.offcanvas-end {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-xl.offcanvas-top {\n    top: 0;\n    left: 0;\n    right: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-xl.offcanvas-bottom {\n    left: 0;\n    right: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 1200px) {\n  .offcanvas-xl {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-xl .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-xl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .offcanvas-xxl {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-xxl {\n    transition: none;\n  }\n}\n@media (max-width: 1399.98px) {\n  .offcanvas-xxl.offcanvas-start {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-xxl.offcanvas-end {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-xxl.offcanvas-top {\n    top: 0;\n    left: 0;\n    right: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-xxl.offcanvas-bottom {\n    left: 0;\n    right: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 1400px) {\n  .offcanvas-xxl {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-xxl .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-xxl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: var(--bs-offcanvas-zindex);\n  display: flex;\n  flex-direction: column;\n  max-width: 100%;\n  color: var(--bs-offcanvas-color);\n  visibility: hidden;\n  background-color: var(--bs-offcanvas-bg);\n  background-clip: padding-box;\n  outline: 0;\n  transition: var(--bs-offcanvas-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n.offcanvas.offcanvas-start {\n  top: 0;\n  right: 0;\n  width: var(--bs-offcanvas-width);\n  border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateX(100%);\n}\n.offcanvas.offcanvas-end {\n  top: 0;\n  left: 0;\n  width: var(--bs-offcanvas-width);\n  border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateX(-100%);\n}\n.offcanvas.offcanvas-top {\n  top: 0;\n  left: 0;\n  right: 0;\n  height: var(--bs-offcanvas-height);\n  max-height: 100%;\n  border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n  left: 0;\n  right: 0;\n  height: var(--bs-offcanvas-height);\n  max-height: 100%;\n  border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n  transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n  visibility: visible;\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n  padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n  margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n  margin-left: calc(-0.5 * var(--bs-offcanvas-padding-x));\n  margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: var(--bs-offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n  flex-grow: 1;\n  padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n  overflow-y: auto;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentcolor;\n  opacity: 0.5;\n}\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: 0.6em;\n}\n\n.placeholder-sm {\n  min-height: 0.8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.text-bg-primary {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n  color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-primary:hover, .link-primary:focus {\n  color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-secondary {\n  color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n  color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-success {\n  color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-success:hover, .link-success:focus {\n  color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-info {\n  color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-info:hover, .link-info:focus {\n  color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-warning {\n  color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-warning:hover, .link-warning:focus {\n  color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-danger {\n  color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-danger:hover, .link-danger:focus {\n  color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-light {\n  color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-light:hover, .link-light:focus {\n  color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-dark {\n  color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-dark:hover, .link-dark:focus {\n  color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-body-emphasis {\n  color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-body-emphasis:hover, .link-body-emphasis:focus {\n  color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;\n  -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n  text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n}\n\n.focus-ring:focus {\n  outline: 0;\n  box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);\n}\n\n.icon-link {\n  display: inline-flex;\n  gap: 0.375rem;\n  align-items: center;\n  -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n  text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n  text-underline-offset: 0.25em;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n.icon-link > .bi {\n  flex-shrink: 0;\n  width: 1em;\n  height: 1em;\n  fill: currentcolor;\n  transition: 0.2s ease-in-out transform;\n}\n@media (prefers-reduced-motion: reduce) {\n  .icon-link > .bi {\n    transition: none;\n  }\n}\n\n.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi {\n  transform: var(--bs-icon-link-transform, translate3d(-0.25em, 0, 0));\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n.ratio > * {\n  position: absolute;\n  top: 0;\n  right: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n.sticky-bottom {\n  position: -webkit-sticky;\n  position: sticky;\n  bottom: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-sm-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-md-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-lg-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-xl-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-xxl-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n.hstack {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  align-self: stretch;\n}\n\n.vstack {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n.visually-hidden:not(caption),\n.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {\n  position: absolute !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  align-self: stretch;\n  width: var(--bs-border-width);\n  min-height: 1em;\n  background-color: currentcolor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: right !important;\n}\n\n.float-end {\n  float: left !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.object-fit-contain {\n  -o-object-fit: contain !important;\n  object-fit: contain !important;\n}\n\n.object-fit-cover {\n  -o-object-fit: cover !important;\n  object-fit: cover !important;\n}\n\n.object-fit-fill {\n  -o-object-fit: fill !important;\n  object-fit: fill !important;\n}\n\n.object-fit-scale {\n  -o-object-fit: scale-down !important;\n  object-fit: scale-down !important;\n}\n\n.object-fit-none {\n  -o-object-fit: none !important;\n  object-fit: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.overflow-x-auto {\n  overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n  overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n  overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n  overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n  overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n  overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n  overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n  overflow-y: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-inline-grid {\n  display: inline-grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: var(--bs-box-shadow) !important;\n}\n\n.shadow-sm {\n  box-shadow: var(--bs-box-shadow-sm) !important;\n}\n\n.shadow-lg {\n  box-shadow: var(--bs-box-shadow-lg) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.focus-ring-primary {\n  --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-secondary {\n  --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-success {\n  --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-info {\n  --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-warning {\n  --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-danger {\n  --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-light {\n  --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-dark {\n  --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity));\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  right: 0 !important;\n}\n\n.start-50 {\n  right: 50% !important;\n}\n\n.start-100 {\n  right: 100% !important;\n}\n\n.end-0 {\n  left: 0 !important;\n}\n\n.end-50 {\n  left: 50% !important;\n}\n\n.end-100 {\n  left: 100% !important;\n}\n\n.translate-middle {\n  transform: translate(50%, -50%) !important;\n}\n\n.translate-middle-x {\n  transform: translateX(50%) !important;\n}\n\n.translate-middle-y {\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n  border-left: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n  border-right: 0 !important;\n}\n\n.border-primary {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-black {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n  border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n  border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n  border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n  border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n  border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n  border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n  border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n  border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.border-opacity-10 {\n  --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n  --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n  --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n  --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n  --bs-border-opacity: 1;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  flex-direction: row !important;\n}\n\n.flex-column {\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  align-content: center !important;\n}\n\n.align-content-between {\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  align-self: auto !important;\n}\n\n.align-self-start {\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  align-self: stretch !important;\n}\n\n.order-first {\n  order: -1 !important;\n}\n\n.order-0 {\n  order: 0 !important;\n}\n\n.order-1 {\n  order: 1 !important;\n}\n\n.order-2 {\n  order: 2 !important;\n}\n\n.order-3 {\n  order: 3 !important;\n}\n\n.order-4 {\n  order: 4 !important;\n}\n\n.order-5 {\n  order: 5 !important;\n}\n\n.order-last {\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-left: 0 !important;\n  margin-right: 0 !important;\n}\n\n.mx-1 {\n  margin-left: 0.25rem !important;\n  margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-left: 0.5rem !important;\n  margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-left: 1rem !important;\n  margin-right: 1rem !important;\n}\n\n.mx-4 {\n  margin-left: 1.5rem !important;\n  margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-left: 3rem !important;\n  margin-right: 3rem !important;\n}\n\n.mx-auto {\n  margin-left: auto !important;\n  margin-right: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-left: 0 !important;\n}\n\n.me-1 {\n  margin-left: 0.25rem !important;\n}\n\n.me-2 {\n  margin-left: 0.5rem !important;\n}\n\n.me-3 {\n  margin-left: 1rem !important;\n}\n\n.me-4 {\n  margin-left: 1.5rem !important;\n}\n\n.me-5 {\n  margin-left: 3rem !important;\n}\n\n.me-auto {\n  margin-left: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-right: 0 !important;\n}\n\n.ms-1 {\n  margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-right: 1rem !important;\n}\n\n.ms-4 {\n  margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-right: 3rem !important;\n}\n\n.ms-auto {\n  margin-right: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-left: 0 !important;\n  padding-right: 0 !important;\n}\n\n.px-1 {\n  padding-left: 0.25rem !important;\n  padding-right: 0.25rem !important;\n}\n\n.px-2 {\n  padding-left: 0.5rem !important;\n  padding-right: 0.5rem !important;\n}\n\n.px-3 {\n  padding-left: 1rem !important;\n  padding-right: 1rem !important;\n}\n\n.px-4 {\n  padding-left: 1.5rem !important;\n  padding-right: 1.5rem !important;\n}\n\n.px-5 {\n  padding-left: 3rem !important;\n  padding-right: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-left: 0 !important;\n}\n\n.pe-1 {\n  padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-left: 1rem !important;\n}\n\n.pe-4 {\n  padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-left: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-right: 0 !important;\n}\n\n.ps-1 {\n  padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-right: 1rem !important;\n}\n\n.ps-4 {\n  padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-right: 3rem !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.row-gap-0 {\n  row-gap: 0 !important;\n}\n\n.row-gap-1 {\n  row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n  row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n  row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n  row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n  row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n  -moz-column-gap: 0 !important;\n  column-gap: 0 !important;\n}\n\n.column-gap-1 {\n  -moz-column-gap: 0.25rem !important;\n  column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n  -moz-column-gap: 0.5rem !important;\n  column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n  -moz-column-gap: 1rem !important;\n  column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n  -moz-column-gap: 1.5rem !important;\n  column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n  -moz-column-gap: 3rem !important;\n  column-gap: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-medium {\n  font-weight: 500 !important;\n}\n\n.fw-semibold {\n  font-weight: 600 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: right !important;\n}\n\n.text-end {\n  text-align: left !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n  --bs-text-opacity: 1;\n  color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n  --bs-text-opacity: 1;\n  color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n  --bs-text-opacity: 1;\n  color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n  color: var(--bs-primary-text-emphasis) !important;\n}\n\n.text-secondary-emphasis {\n  color: var(--bs-secondary-text-emphasis) !important;\n}\n\n.text-success-emphasis {\n  color: var(--bs-success-text-emphasis) !important;\n}\n\n.text-info-emphasis {\n  color: var(--bs-info-text-emphasis) !important;\n}\n\n.text-warning-emphasis {\n  color: var(--bs-warning-text-emphasis) !important;\n}\n\n.text-danger-emphasis {\n  color: var(--bs-danger-text-emphasis) !important;\n}\n\n.text-light-emphasis {\n  color: var(--bs-light-text-emphasis) !important;\n}\n\n.text-dark-emphasis {\n  color: var(--bs-dark-text-emphasis) !important;\n}\n\n.link-opacity-10 {\n  --bs-link-opacity: 0.1;\n}\n\n.link-opacity-10-hover:hover {\n  --bs-link-opacity: 0.1;\n}\n\n.link-opacity-25 {\n  --bs-link-opacity: 0.25;\n}\n\n.link-opacity-25-hover:hover {\n  --bs-link-opacity: 0.25;\n}\n\n.link-opacity-50 {\n  --bs-link-opacity: 0.5;\n}\n\n.link-opacity-50-hover:hover {\n  --bs-link-opacity: 0.5;\n}\n\n.link-opacity-75 {\n  --bs-link-opacity: 0.75;\n}\n\n.link-opacity-75-hover:hover {\n  --bs-link-opacity: 0.75;\n}\n\n.link-opacity-100 {\n  --bs-link-opacity: 1;\n}\n\n.link-opacity-100-hover:hover {\n  --bs-link-opacity: 1;\n}\n\n.link-offset-1 {\n  text-underline-offset: 0.125em !important;\n}\n\n.link-offset-1-hover:hover {\n  text-underline-offset: 0.125em !important;\n}\n\n.link-offset-2 {\n  text-underline-offset: 0.25em !important;\n}\n\n.link-offset-2-hover:hover {\n  text-underline-offset: 0.25em !important;\n}\n\n.link-offset-3 {\n  text-underline-offset: 0.375em !important;\n}\n\n.link-offset-3-hover:hover {\n  text-underline-offset: 0.375em !important;\n}\n\n.link-underline-primary {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-secondary {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-success {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-info {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-warning {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-danger {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-light {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-dark {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n  text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline {\n  --bs-link-underline-opacity: 1;\n  -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n  text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-underline-opacity-0 {\n  --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-0-hover:hover {\n  --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-10 {\n  --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-10-hover:hover {\n  --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-25 {\n  --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-25-hover:hover {\n  --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-50 {\n  --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-50-hover:hover {\n  --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-75 {\n  --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-75-hover:hover {\n  --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-100 {\n  --bs-link-underline-opacity: 1;\n}\n\n.link-underline-opacity-100-hover:hover {\n  --bs-link-underline-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-body-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n  background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n  background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n  background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n  background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n  background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n  background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n  background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n  background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n  border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n  border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n  border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n  border-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n  border-top-right-radius: var(--bs-border-radius) !important;\n  border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n  border-top-right-radius: 0 !important;\n  border-top-left-radius: 0 !important;\n}\n\n.rounded-top-1 {\n  border-top-right-radius: var(--bs-border-radius-sm) !important;\n  border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n  border-top-right-radius: var(--bs-border-radius) !important;\n  border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n  border-top-right-radius: var(--bs-border-radius-lg) !important;\n  border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n  border-top-right-radius: var(--bs-border-radius-xl) !important;\n  border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n  border-top-right-radius: var(--bs-border-radius-xxl) !important;\n  border-top-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-top-circle {\n  border-top-right-radius: 50% !important;\n  border-top-left-radius: 50% !important;\n}\n\n.rounded-top-pill {\n  border-top-right-radius: var(--bs-border-radius-pill) !important;\n  border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n  border-top-left-radius: var(--bs-border-radius) !important;\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n  border-top-left-radius: 0 !important;\n  border-bottom-left-radius: 0 !important;\n}\n\n.rounded-end-1 {\n  border-top-left-radius: var(--bs-border-radius-sm) !important;\n  border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n  border-top-left-radius: var(--bs-border-radius) !important;\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n  border-top-left-radius: var(--bs-border-radius-lg) !important;\n  border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n  border-top-left-radius: var(--bs-border-radius-xl) !important;\n  border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n  border-top-left-radius: var(--bs-border-radius-xxl) !important;\n  border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-end-circle {\n  border-top-left-radius: 50% !important;\n  border-bottom-left-radius: 50% !important;\n}\n\n.rounded-end-pill {\n  border-top-left-radius: var(--bs-border-radius-pill) !important;\n  border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n  border-bottom-left-radius: 0 !important;\n  border-bottom-right-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n  border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n  border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n  border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n  border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n  border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n  border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n  border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n  border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-bottom-circle {\n  border-bottom-left-radius: 50% !important;\n  border-bottom-right-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n  border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n  border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n  border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n  border-bottom-right-radius: 0 !important;\n  border-top-right-radius: 0 !important;\n}\n\n.rounded-start-1 {\n  border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n  border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n  border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n  border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n  border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n  border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n  border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n  border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n  border-top-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-start-circle {\n  border-bottom-right-radius: 50% !important;\n  border-top-right-radius: 50% !important;\n}\n\n.rounded-start-pill {\n  border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n  border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n.z-n1 {\n  z-index: -1 !important;\n}\n\n.z-0 {\n  z-index: 0 !important;\n}\n\n.z-1 {\n  z-index: 1 !important;\n}\n\n.z-2 {\n  z-index: 2 !important;\n}\n\n.z-3 {\n  z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: right !important;\n  }\n  .float-sm-end {\n    float: left !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .object-fit-sm-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-sm-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-sm-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-sm-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-sm-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-sm-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    order: 5 !important;\n  }\n  .order-sm-last {\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-left: 0 !important;\n  }\n  .me-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-left: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-right: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-right: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-sm-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-left: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-right: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-sm-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-sm-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-sm-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-sm-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-sm-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-sm-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-sm-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-sm-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-sm-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-sm-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-sm-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-sm-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: right !important;\n  }\n  .text-sm-end {\n    text-align: left !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 768px) {\n  .float-md-start {\n    float: right !important;\n  }\n  .float-md-end {\n    float: left !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .object-fit-md-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-md-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-md-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-md-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-md-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-md-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    order: -1 !important;\n  }\n  .order-md-0 {\n    order: 0 !important;\n  }\n  .order-md-1 {\n    order: 1 !important;\n  }\n  .order-md-2 {\n    order: 2 !important;\n  }\n  .order-md-3 {\n    order: 3 !important;\n  }\n  .order-md-4 {\n    order: 4 !important;\n  }\n  .order-md-5 {\n    order: 5 !important;\n  }\n  .order-md-last {\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-md-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-left: 0 !important;\n  }\n  .me-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-left: 1rem !important;\n  }\n  .me-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-left: 3rem !important;\n  }\n  .me-md-auto {\n    margin-left: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-right: 0 !important;\n  }\n  .ms-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-right: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-md-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-md-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-left: 0 !important;\n  }\n  .pe-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-right: 0 !important;\n  }\n  .ps-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-right: 3rem !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-md-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-md-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-md-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-md-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-md-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-md-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-md-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-md-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-md-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-md-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-md-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-md-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-md-start {\n    text-align: right !important;\n  }\n  .text-md-end {\n    text-align: left !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: right !important;\n  }\n  .float-lg-end {\n    float: left !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .object-fit-lg-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-lg-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-lg-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-lg-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-lg-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-lg-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    order: 5 !important;\n  }\n  .order-lg-last {\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-left: 0 !important;\n  }\n  .me-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-left: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-right: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-right: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-lg-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-left: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-right: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-lg-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-lg-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-lg-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-lg-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-lg-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-lg-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-lg-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-lg-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-lg-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-lg-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-lg-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-lg-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: right !important;\n  }\n  .text-lg-end {\n    text-align: left !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: right !important;\n  }\n  .float-xl-end {\n    float: left !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .object-fit-xl-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-xl-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-xl-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-xl-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-xl-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    order: 5 !important;\n  }\n  .order-xl-last {\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-left: 0 !important;\n  }\n  .me-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-left: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-right: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-right: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-xl-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-left: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-right: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-xl-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-xl-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-xl-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-xl-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-xl-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-xl-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-xl-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-xl-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-xl-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-xl-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-xl-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-xl-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: right !important;\n  }\n  .text-xl-end {\n    text-align: left !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: right !important;\n  }\n  .float-xxl-end {\n    float: left !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .object-fit-xxl-contain {\n    -o-object-fit: contain !important;\n    object-fit: contain !important;\n  }\n  .object-fit-xxl-cover {\n    -o-object-fit: cover !important;\n    object-fit: cover !important;\n  }\n  .object-fit-xxl-fill {\n    -o-object-fit: fill !important;\n    object-fit: fill !important;\n  }\n  .object-fit-xxl-scale {\n    -o-object-fit: scale-down !important;\n    object-fit: scale-down !important;\n  }\n  .object-fit-xxl-none {\n    -o-object-fit: none !important;\n    object-fit: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xxl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-left: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-right: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-xxl-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-xxl-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-xxl-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-xxl-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-xxl-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-xxl-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-xxl-0 {\n    -moz-column-gap: 0 !important;\n    column-gap: 0 !important;\n  }\n  .column-gap-xxl-1 {\n    -moz-column-gap: 0.25rem !important;\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-xxl-2 {\n    -moz-column-gap: 0.5rem !important;\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-xxl-3 {\n    -moz-column-gap: 1rem !important;\n    column-gap: 1rem !important;\n  }\n  .column-gap-xxl-4 {\n    -moz-column-gap: 1.5rem !important;\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-xxl-5 {\n    -moz-column-gap: 3rem !important;\n    column-gap: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: right !important;\n  }\n  .text-xxl-end {\n    text-align: left !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.rtl.css.map */"
  },
  {
    "path": "public/assets/bootstrap-5.3.2-dist/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.3.2 (https://getbootstrap.com/)\n  * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n})(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const elementMap = new Map();\n  const Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n      const instanceMap = elementMap.get(element);\n\n      // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n      instanceMap.set(key, instance);\n    },\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n      return null;\n    },\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key);\n\n      // free up element references if there are no instances left for an element\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend';\n\n  /**\n   * Properly escape IDs selectors to handle weird IDs\n   * @param {string} selector\n   * @returns {string}\n   */\n  const parseSelector = selector => {\n    if (selector && window.CSS && window.CSS.escape) {\n      // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n      selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n    }\n    return selector;\n  };\n\n  // Shout-out Angus Croll (https://goo.gl/pxwQGp)\n  const toType = object => {\n    if (object === null || object === undefined) {\n      return `${object}`;\n    }\n    return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n\n  /**\n   * Public Util API\n   */\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n    return prefix;\n  };\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    }\n\n    // Get transition-duration of the element\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n    // Return 0 if element or transition duration is not found\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    }\n\n    // If multiple durations are defined, take the first\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n  const isElement$1 = object => {\n    if (!object || typeof object !== 'object') {\n      return false;\n    }\n    if (typeof object.jquery !== 'undefined') {\n      object = object[0];\n    }\n    return typeof object.nodeType !== 'undefined';\n  };\n  const getElement = object => {\n    // it's a jQuery object or a node element\n    if (isElement$1(object)) {\n      return object.jquery ? object[0] : object;\n    }\n    if (typeof object === 'string' && object.length > 0) {\n      return document.querySelector(parseSelector(object));\n    }\n    return null;\n  };\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n    const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n    // Handle `details` element as its content may falsie appear visible when it is closed\n    const closedDetails = element.closest('details:not([open])');\n    if (!closedDetails) {\n      return elementIsVisible;\n    }\n    if (closedDetails !== element) {\n      const summary = element.closest('summary');\n      if (summary && summary.parentNode !== closedDetails) {\n        return false;\n      }\n      if (summary === null) {\n        return false;\n      }\n    }\n    return elementIsVisible;\n  };\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    }\n\n    // Can find the shadow root otherwise it'll return the document\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n    if (element instanceof ShadowRoot) {\n      return element;\n    }\n\n    // when we don't find a shadow root\n    if (!element.parentNode) {\n      return null;\n    }\n    return findShadowRoot(element.parentNode);\n  };\n  const noop = () => {};\n\n  /**\n   * Trick to restart an element's animation\n   *\n   * @param {HTMLElement} element\n   * @return void\n   *\n   * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n   */\n  const reflow = element => {\n    element.offsetHeight; // eslint-disable-line no-unused-expressions\n  };\n\n  const getjQuery = () => {\n    if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return window.jQuery;\n    }\n    return null;\n  };\n  const DOMContentLoadedCallbacks = [];\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          for (const callback of DOMContentLoadedCallbacks) {\n            callback();\n          }\n        });\n      }\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n  const isRTL = () => document.documentElement.dir === 'rtl';\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n  const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n    return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n  };\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    const listLength = list.length;\n    let index = list.indexOf(activeElement);\n\n    // if the element does not exist in the list return an element\n    // depending on the direction and if cycle is allowed\n    if (index === -1) {\n      return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n    }\n    index += shouldGetNext ? 1 : -1;\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n  /**\n   * Private methods\n   */\n\n  function makeEventUid(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n  function getElementEvents(element) {\n    const uid = makeEventUid(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      hydrateObj(event, {\n        delegateTarget: element\n      });\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n      return fn.apply(element, [event]);\n    };\n  }\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (const domElement of domElements) {\n          if (domElement !== target) {\n            continue;\n          }\n          hydrateObj(event, {\n            delegateTarget: target\n          });\n          if (handler.oneOff) {\n            EventHandler.off(element, event.type, selector, fn);\n          }\n          return fn.apply(target, [event]);\n        }\n      }\n    };\n  }\n  function findHandler(events, callable, delegationSelector = null) {\n    return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n  }\n  function normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n    const isDelegated = typeof handler === 'string';\n    // TODO: tooltip passes `false` instead of selector, so we need to check\n    const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    if (!nativeEvents.has(typeEvent)) {\n      typeEvent = originalTypeEvent;\n    }\n    return [isDelegated, callable, typeEvent];\n  }\n  function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n    let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n    // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n    if (originalTypeEvent in customEvents) {\n      const wrapFunction = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n      callable = wrapFunction(callable);\n    }\n    const events = getElementEvents(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n    if (previousFunction) {\n      previousFunction.oneOff = previousFunction.oneOff && oneOff;\n      return;\n    }\n    const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n    fn.delegationSelector = isDelegated ? handler : null;\n    fn.callable = callable;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, isDelegated);\n  }\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n    if (!fn) {\n      return;\n    }\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n      if (handlerKey.includes(namespace)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n      }\n    }\n  }\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n  const EventHandler = {\n    on(element, event, handler, delegationFunction) {\n      addHandler(element, event, handler, delegationFunction, false);\n    },\n    one(element, event, handler, delegationFunction) {\n      addHandler(element, event, handler, delegationFunction, true);\n    },\n    off(element, originalTypeEvent, handler, delegationFunction) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n      const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getElementEvents(element);\n      const storeElementEvent = events[typeEvent] || {};\n      const isNamespace = originalTypeEvent.startsWith('.');\n      if (typeof callable !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!Object.keys(storeElementEvent).length) {\n          return;\n        }\n        removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n        return;\n      }\n      if (isNamespace) {\n        for (const elementEvent of Object.keys(events)) {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        }\n      }\n      for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n        }\n      }\n    },\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      let jQueryEvent = null;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n      const evt = hydrateObj(new Event(event, {\n        bubbles,\n        cancelable: true\n      }), args);\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n      if (evt.defaultPrevented && jQueryEvent) {\n        jQueryEvent.preventDefault();\n      }\n      return evt;\n    }\n  };\n  function hydrateObj(obj, meta = {}) {\n    for (const [key, value] of Object.entries(meta)) {\n      try {\n        obj[key] = value;\n      } catch (_unused) {\n        Object.defineProperty(obj, key, {\n          configurable: true,\n          get() {\n            return value;\n          }\n        });\n      }\n    }\n    return obj;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  function normalizeData(value) {\n    if (value === 'true') {\n      return true;\n    }\n    if (value === 'false') {\n      return false;\n    }\n    if (value === Number(value).toString()) {\n      return Number(value);\n    }\n    if (value === '' || value === 'null') {\n      return null;\n    }\n    if (typeof value !== 'string') {\n      return value;\n    }\n    try {\n      return JSON.parse(decodeURIComponent(value));\n    } catch (_unused) {\n      return value;\n    }\n  }\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n      const attributes = {};\n      const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n      for (const key of bsKeys) {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      }\n      return attributes;\n    },\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    }\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/config.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Class definition\n   */\n\n  class Config {\n    // Getters\n    static get Default() {\n      return {};\n    }\n    static get DefaultType() {\n      return {};\n    }\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n    _getConfig(config) {\n      config = this._mergeConfigObj(config);\n      config = this._configAfterMerge(config);\n      this._typeCheckConfig(config);\n      return config;\n    }\n    _configAfterMerge(config) {\n      return config;\n    }\n    _mergeConfigObj(config, element) {\n      const jsonConfig = isElement$1(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n      return {\n        ...this.constructor.Default,\n        ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n        ...(isElement$1(element) ? Manipulator.getDataAttributes(element) : {}),\n        ...(typeof config === 'object' ? config : {})\n      };\n    }\n    _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n      for (const [property, expectedTypes] of Object.entries(configTypes)) {\n        const value = config[property];\n        const valueType = isElement$1(value) ? 'element' : toType(value);\n        if (!new RegExp(expectedTypes).test(valueType)) {\n          throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n        }\n      }\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const VERSION = '5.3.2';\n\n  /**\n   * Class definition\n   */\n\n  class BaseComponent extends Config {\n    constructor(element, config) {\n      super();\n      element = getElement(element);\n      if (!element) {\n        return;\n      }\n      this._element = element;\n      this._config = this._getConfig(config);\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    // Public\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      for (const propertyName of Object.getOwnPropertyNames(this)) {\n        this[propertyName] = null;\n      }\n    }\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    _getConfig(config) {\n      config = this._mergeConfigObj(config, this._element);\n      config = this._configAfterMerge(config);\n      this._typeCheckConfig(config);\n      return config;\n    }\n\n    // Static\n    static getInstance(element) {\n      return Data.get(getElement(element), this.DATA_KEY);\n    }\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n    static get VERSION() {\n      return VERSION;\n    }\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n    static eventName(name) {\n      return `${name}${this.EVENT_KEY}`;\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n    if (!selector || selector === '#') {\n      let hrefAttribute = element.getAttribute('href');\n\n      // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n      if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n        return null;\n      }\n\n      // Just in case some CMS puts out a full URL with the anchor appended\n      if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n        hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n      }\n      selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;\n    }\n    return selector;\n  };\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode.closest(selector);\n      while (ancestor) {\n        parents.push(ancestor);\n        ancestor = ancestor.parentNode.closest(selector);\n      }\n      return parents;\n    },\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n        previous = previous.previousElementSibling;\n      }\n      return [];\n    },\n    // TODO: this is now unused; remove later along with prev()\n    next(element, selector) {\n      let next = element.nextElementSibling;\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n        next = next.nextElementSibling;\n      }\n      return [];\n    },\n    focusableChildren(element) {\n      const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n      return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n    },\n    getSelectorFromElement(element) {\n      const selector = getSelector(element);\n      if (selector) {\n        return SelectorEngine.findOne(selector) ? selector : null;\n      }\n      return null;\n    },\n    getElementFromSelector(element) {\n      const selector = getSelector(element);\n      return selector ? SelectorEngine.findOne(selector) : null;\n    },\n    getMultipleElementsFromSelector(element) {\n      const selector = getSelector(element);\n      return selector ? SelectorEngine.find(selector) : [];\n    }\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/component-functions.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const enableDismissTrigger = (component, method = 'hide') => {\n    const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n    const name = component.NAME;\n    EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n      if (['A', 'AREA'].includes(this.tagName)) {\n        event.preventDefault();\n      }\n      if (isDisabled(this)) {\n        return;\n      }\n      const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n      const instance = component.getOrCreateInstance(target);\n\n      // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n      instance[method]();\n    });\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$f = 'alert';\n  const DATA_KEY$a = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$a}`;\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$8 = 'show';\n\n  /**\n   * Class definition\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$f;\n    }\n\n    // Public\n    close() {\n      const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n      if (closeEvent.defaultPrevented) {\n        return;\n      }\n      this._element.classList.remove(CLASS_NAME_SHOW$8);\n      const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n      this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n    }\n\n    // Private\n    _destroyElement() {\n      this._element.remove();\n      EventHandler.trigger(this._element, EVENT_CLOSED);\n      this.dispose();\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](this);\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  enableDismissTrigger(Alert, 'close');\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$e = 'button';\n  const DATA_KEY$9 = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n  /**\n   * Class definition\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$e;\n    }\n\n    // Public\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/swipe.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$d = 'swipe';\n  const EVENT_KEY$9 = '.bs.swipe';\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SWIPE_THRESHOLD = 40;\n  const Default$c = {\n    endCallback: null,\n    leftCallback: null,\n    rightCallback: null\n  };\n  const DefaultType$c = {\n    endCallback: '(function|null)',\n    leftCallback: '(function|null)',\n    rightCallback: '(function|null)'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Swipe extends Config {\n    constructor(element, config) {\n      super();\n      this._element = element;\n      if (!element || !Swipe.isSupported()) {\n        return;\n      }\n      this._config = this._getConfig(config);\n      this._deltaX = 0;\n      this._supportPointerEvents = Boolean(window.PointerEvent);\n      this._initEvents();\n    }\n\n    // Getters\n    static get Default() {\n      return Default$c;\n    }\n    static get DefaultType() {\n      return DefaultType$c;\n    }\n    static get NAME() {\n      return NAME$d;\n    }\n\n    // Public\n    dispose() {\n      EventHandler.off(this._element, EVENT_KEY$9);\n    }\n\n    // Private\n    _start(event) {\n      if (!this._supportPointerEvents) {\n        this._deltaX = event.touches[0].clientX;\n        return;\n      }\n      if (this._eventIsPointerPenTouch(event)) {\n        this._deltaX = event.clientX;\n      }\n    }\n    _end(event) {\n      if (this._eventIsPointerPenTouch(event)) {\n        this._deltaX = event.clientX - this._deltaX;\n      }\n      this._handleSwipe();\n      execute(this._config.endCallback);\n    }\n    _move(event) {\n      this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n    }\n    _handleSwipe() {\n      const absDeltaX = Math.abs(this._deltaX);\n      if (absDeltaX <= SWIPE_THRESHOLD) {\n        return;\n      }\n      const direction = absDeltaX / this._deltaX;\n      this._deltaX = 0;\n      if (!direction) {\n        return;\n      }\n      execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n    }\n    _initEvents() {\n      if (this._supportPointerEvents) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n      }\n    }\n    _eventIsPointerPenTouch(event) {\n      return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n    }\n\n    // Static\n    static isSupported() {\n      return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$c = 'carousel';\n  const DATA_KEY$8 = 'bs.carousel';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const ARROW_LEFT_KEY$1 = 'ArrowLeft';\n  const ARROW_RIGHT_KEY$1 = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const EVENT_SLIDE = `slide${EVENT_KEY$8}`;\n  const EVENT_SLID = `slid${EVENT_KEY$8}`;\n  const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\n  const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\n  const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\n  const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n  };\n  const Default$b = {\n    interval: 5000,\n    keyboard: true,\n    pause: 'hover',\n    ride: false,\n    touch: true,\n    wrap: true\n  };\n  const DefaultType$b = {\n    interval: '(number|boolean)',\n    // TODO:v6 remove boolean support\n    keyboard: 'boolean',\n    pause: '(string|boolean)',\n    ride: '(boolean|string)',\n    touch: 'boolean',\n    wrap: 'boolean'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._interval = null;\n      this._activeElement = null;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this._swipeHelper = null;\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._addEventListeners();\n      if (this._config.ride === CLASS_NAME_CAROUSEL) {\n        this.cycle();\n      }\n    }\n\n    // Getters\n    static get Default() {\n      return Default$b;\n    }\n    static get DefaultType() {\n      return DefaultType$b;\n    }\n    static get NAME() {\n      return NAME$c;\n    }\n\n    // Public\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n    nextWhenVisible() {\n      // FIXME TODO use `document.visibilityState`\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n    pause() {\n      if (this._isSliding) {\n        triggerTransitionEnd(this._element);\n      }\n      this._clearInterval();\n    }\n    cycle() {\n      this._clearInterval();\n      this._updateInterval();\n      this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n    }\n    _maybeEnableCycle() {\n      if (!this._config.ride) {\n        return;\n      }\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n        return;\n      }\n      this.cycle();\n    }\n    to(index) {\n      const items = this._getItems();\n      if (index > items.length - 1 || index < 0) {\n        return;\n      }\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n      const activeIndex = this._getItemIndex(this._getActive());\n      if (activeIndex === index) {\n        return;\n      }\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n      this._slide(order, items[index]);\n    }\n    dispose() {\n      if (this._swipeHelper) {\n        this._swipeHelper.dispose();\n      }\n      super.dispose();\n    }\n\n    // Private\n    _configAfterMerge(config) {\n      config.defaultInterval = config.interval;\n      return config;\n    }\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n      }\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n        EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n      }\n      if (this._config.touch && Swipe.isSupported()) {\n        this._addTouchEventListeners();\n      }\n    }\n    _addTouchEventListeners() {\n      for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n        EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n      }\n      const endCallBack = () => {\n        if (this._config.pause !== 'hover') {\n          return;\n        }\n\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n\n        this.pause();\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n        this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      };\n      const swipeConfig = {\n        leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n        rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n        endCallback: endCallBack\n      };\n      this._swipeHelper = new Swipe(this._element, swipeConfig);\n    }\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n      const direction = KEY_TO_DIRECTION[event.key];\n      if (direction) {\n        event.preventDefault();\n        this._slide(this._directionToOrder(direction));\n      }\n    }\n    _getItemIndex(element) {\n      return this._getItems().indexOf(element);\n    }\n    _setActiveIndicatorElement(index) {\n      if (!this._indicatorsElement) {\n        return;\n      }\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n      if (newActiveIndicator) {\n        newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n        newActiveIndicator.setAttribute('aria-current', 'true');\n      }\n    }\n    _updateInterval() {\n      const element = this._activeElement || this._getActive();\n      if (!element) {\n        return;\n      }\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n      this._config.interval = elementInterval || this._config.defaultInterval;\n    }\n    _slide(order, element = null) {\n      if (this._isSliding) {\n        return;\n      }\n      const activeElement = this._getActive();\n      const isNext = order === ORDER_NEXT;\n      const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n      if (nextElement === activeElement) {\n        return;\n      }\n      const nextElementIndex = this._getItemIndex(nextElement);\n      const triggerEvent = eventName => {\n        return EventHandler.trigger(this._element, eventName, {\n          relatedTarget: nextElement,\n          direction: this._orderToDirection(order),\n          from: this._getItemIndex(activeElement),\n          to: nextElementIndex\n        });\n      };\n      const slideEvent = triggerEvent(EVENT_SLIDE);\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        // TODO: change tests that use empty divs to avoid this check\n        return;\n      }\n      const isCycling = Boolean(this._interval);\n      this.pause();\n      this._isSliding = true;\n      this._setActiveIndicatorElement(nextElementIndex);\n      this._activeElement = nextElement;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        triggerEvent(EVENT_SLID);\n      };\n      this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_SLIDE);\n    }\n    _getActive() {\n      return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n    }\n    _getItems() {\n      return SelectorEngine.find(SELECTOR_ITEM, this._element);\n    }\n    _clearInterval() {\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n    }\n    _directionToOrder(direction) {\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n    _orderToDirection(order) {\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Carousel.getOrCreateInstance(this, config);\n        if (typeof config === 'number') {\n          data.to(config);\n          return;\n        }\n        if (typeof config === 'string') {\n          if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n          data[config]();\n        }\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n    const target = SelectorEngine.getElementFromSelector(this);\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n    event.preventDefault();\n    const carousel = Carousel.getOrCreateInstance(target);\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n    if (slideIndex) {\n      carousel.to(slideIndex);\n      carousel._maybeEnableCycle();\n      return;\n    }\n    if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n      carousel.next();\n      carousel._maybeEnableCycle();\n      return;\n    }\n    carousel.prev();\n    carousel._maybeEnableCycle();\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n    for (const carousel of carousels) {\n      Carousel.getOrCreateInstance(carousel);\n    }\n  });\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$b = 'collapse';\n  const DATA_KEY$7 = 'bs.collapse';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\n  const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\n  const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  const Default$a = {\n    parent: null,\n    toggle: true\n  };\n  const DefaultType$a = {\n    parent: '(null|element)',\n    toggle: 'boolean'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._isTransitioning = false;\n      this._triggerArray = [];\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n      for (const elem of toggleList) {\n        const selector = SelectorEngine.getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n        if (selector !== null && filterElement.length) {\n          this._triggerArray.push(elem);\n        }\n      }\n      this._initializeChildren();\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n      }\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    }\n\n    // Getters\n    static get Default() {\n      return Default$a;\n    }\n    static get DefaultType() {\n      return DefaultType$a;\n    }\n    static get NAME() {\n      return NAME$b;\n    }\n\n    // Public\n    toggle() {\n      if (this._isShown()) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n    show() {\n      if (this._isTransitioning || this._isShown()) {\n        return;\n      }\n      let activeChildren = [];\n\n      // find active children\n      if (this._config.parent) {\n        activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n          toggle: false\n        }));\n      }\n      if (activeChildren.length && activeChildren[0]._isTransitioning) {\n        return;\n      }\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n      for (const activeInstance of activeChildren) {\n        activeInstance.hide();\n      }\n      const dimension = this._getDimension();\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n      this._element.style[dimension] = 0;\n      this._addAriaAndCollapsedClass(this._triggerArray, true);\n      this._isTransitioning = true;\n      const complete = () => {\n        this._isTransitioning = false;\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n        this._element.style[dimension] = '';\n        EventHandler.trigger(this._element, EVENT_SHOWN$6);\n      };\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n      this._queueCallback(complete, this._element, true);\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n    hide() {\n      if (this._isTransitioning || !this._isShown()) {\n        return;\n      }\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n      const dimension = this._getDimension();\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n      for (const trigger of this._triggerArray) {\n        const element = SelectorEngine.getElementFromSelector(trigger);\n        if (element && !this._isShown(element)) {\n          this._addAriaAndCollapsedClass([trigger], false);\n        }\n      }\n      this._isTransitioning = true;\n      const complete = () => {\n        this._isTransitioning = false;\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n        EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n      };\n      this._element.style[dimension] = '';\n      this._queueCallback(complete, this._element, true);\n    }\n    _isShown(element = this._element) {\n      return element.classList.contains(CLASS_NAME_SHOW$7);\n    }\n\n    // Private\n    _configAfterMerge(config) {\n      config.toggle = Boolean(config.toggle); // Coerce string values\n      config.parent = getElement(config.parent);\n      return config;\n    }\n    _getDimension() {\n      return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n    }\n    _initializeChildren() {\n      if (!this._config.parent) {\n        return;\n      }\n      const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n      for (const element of children) {\n        const selected = SelectorEngine.getElementFromSelector(element);\n        if (selected) {\n          this._addAriaAndCollapsedClass([element], this._isShown(selected));\n        }\n      }\n    }\n    _getFirstLevelChildren(selector) {\n      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n      // remove children if greater depth\n      return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n    }\n    _addAriaAndCollapsedClass(triggerArray, isOpen) {\n      if (!triggerArray.length) {\n        return;\n      }\n      for (const element of triggerArray) {\n        element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n        element.setAttribute('aria-expanded', isOpen);\n      }\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      const _config = {};\n      if (typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n      return this.each(function () {\n        const data = Collapse.getOrCreateInstance(this, _config);\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n          data[config]();\n        }\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n    for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n      Collapse.getOrCreateInstance(element, {\n        toggle: false\n      }).toggle();\n    }\n  });\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  const applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function getUAString() {\n    var uaData = navigator.userAgentData;\n\n    if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n      return uaData.brands.map(function (item) {\n        return item.brand + \"/\" + item.version;\n      }).join(' ');\n    }\n\n    return navigator.userAgent;\n  }\n\n  function isLayoutViewport() {\n    return !/^((?!chrome|android).)*safari/i.test(getUAString());\n  }\n\n  function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n    if (includeScale === void 0) {\n      includeScale = false;\n    }\n\n    if (isFixedStrategy === void 0) {\n      isFixedStrategy = false;\n    }\n\n    var clientRect = element.getBoundingClientRect();\n    var scaleX = 1;\n    var scaleY = 1;\n\n    if (includeScale && isHTMLElement(element)) {\n      scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n      scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n    }\n\n    var _ref = isElement(element) ? getWindow(element) : window,\n        visualViewport = _ref.visualViewport;\n\n    var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n    var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n    var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n    var width = clientRect.width / scaleX;\n    var height = clientRect.height / scaleY;\n    return {\n      width: width,\n      height: height,\n      top: y,\n      right: x + width,\n      bottom: y + height,\n      left: x,\n      x: x,\n      y: y\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = /firefox/i.test(getUAString());\n    var isIE = /Trident/i.test(getUAString());\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    if (isShadowRoot(currentNode)) {\n      currentNode = currentNode.host;\n    }\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n  function withinMaxClamp(min, value, max) {\n    var v = within(min, value, max);\n    return v > max ? max : v;\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  const arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref, win) {\n    var x = _ref.x,\n        y = _ref.y;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(x * dpr) / dpr || 0,\n      y: round(y * dpr) / dpr || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        variation = _ref2.variation,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets,\n        isFixed = _ref2.isFixed;\n    var _offsets$x = offsets.x,\n        x = _offsets$x === void 0 ? 0 : _offsets$x,\n        _offsets$y = offsets.y,\n        y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n    var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n      x: x,\n      y: y\n    }) : {\n      x: x,\n      y: y\n    };\n\n    x = _ref3.x;\n    y = _ref3.y;\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static' && position === 'absolute') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top || (placement === left || placement === right) && variation === end) {\n        sideY = bottom;\n        var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n        offsetParent[heightProp];\n        y -= offsetY - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left || (placement === top || placement === bottom) && variation === end) {\n        sideX = right;\n        var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n        offsetParent[widthProp];\n        x -= offsetX - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n      x: x,\n      y: y\n    }, getWindow(popper)) : {\n      x: x,\n      y: y\n    };\n\n    x = _ref4.x;\n    y = _ref4.y;\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref5) {\n    var state = _ref5.state,\n        options = _ref5.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      variation: getVariation(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration,\n      isFixed: state.options.strategy === 'fixed'\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  const computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  const eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element, strategy) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0;\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height;\n      var layoutViewport = isLayoutViewport();\n\n      if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element, strategy) {\n    var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent, strategy) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary, strategy) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$strategy = _options.strategy,\n        strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n    var referenceClientRect = getBoundingClientRect(state.elements.reference);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  const flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  const hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  const offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  const popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n      mainAxis: tetherOffsetValue,\n      altAxis: tetherOffsetValue\n    } : Object.assign({\n      mainAxis: 0,\n      altAxis: 0\n    }, tetherOffsetValue);\n    var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis) {\n      var _offsetModifierState$;\n\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = offset + overflow[mainSide];\n      var max$1 = offset - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n      var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = offset + maxOffset - offsetModifierValue;\n      var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n      popperOffsets[mainAxis] = preventedOffset;\n      data[mainAxis] = preventedOffset - offset;\n    }\n\n    if (checkAltAxis) {\n      var _offsetModifierState$2;\n\n      var _mainSide = mainAxis === 'x' ? top : left;\n\n      var _altSide = mainAxis === 'x' ? bottom : right;\n\n      var _offset = popperOffsets[altAxis];\n\n      var _len = altAxis === 'y' ? 'height' : 'width';\n\n      var _min = _offset + overflow[_mainSide];\n\n      var _max = _offset - overflow[_altSide];\n\n      var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n      var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n      var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n      var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n      var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n      popperOffsets[altAxis] = _preventedOffset;\n      data[altAxis] = _preventedOffset - _offset;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  const preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  function isElementScaled(element) {\n    var rect = element.getBoundingClientRect();\n    var scaleX = round(rect.width) / element.offsetWidth || 1;\n    var scaleY = round(rect.height) / element.offsetHeight || 1;\n    return scaleX !== 1 || scaleY !== 1;\n  } // Returns the composite rect of an element relative to its offsetParent.\n  // Composite means it takes into account transforms as well as layout.\n\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent, true);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(setOptionsAction) {\n          var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          });\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref) {\n          var name = _ref.name,\n              _ref$options = _ref.options,\n              options = _ref$options === void 0 ? {} : _ref$options,\n              effect = _ref.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  const Popper = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({\n    __proto__: null,\n    afterMain,\n    afterRead,\n    afterWrite,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    auto,\n    basePlacements,\n    beforeMain,\n    beforeRead,\n    beforeWrite,\n    bottom,\n    clippingParents,\n    computeStyles: computeStyles$1,\n    createPopper,\n    createPopperBase: createPopper$2,\n    createPopperLite: createPopper$1,\n    detectOverflow,\n    end,\n    eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    left,\n    main,\n    modifierPhases,\n    offset: offset$1,\n    placements,\n    popper,\n    popperGenerator,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1,\n    read,\n    reference,\n    right,\n    start,\n    top,\n    variationPlacements,\n    viewport,\n    write\n  }, Symbol.toStringTag, { value: 'Module' }));\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$a = 'dropdown';\n  const DATA_KEY$6 = 'bs.dropdown';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const TAB_KEY$1 = 'Tab';\n  const ARROW_UP_KEY$1 = 'ArrowUp';\n  const ARROW_DOWN_KEY$1 = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_SHOW$6 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_DROPUP_CENTER = 'dropup-center';\n  const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\n  const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR = '.navbar';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const PLACEMENT_TOPCENTER = 'top';\n  const PLACEMENT_BOTTOMCENTER = 'bottom';\n  const Default$9 = {\n    autoClose: true,\n    boundary: 'clippingParents',\n    display: 'dynamic',\n    offset: [0, 2],\n    popperConfig: null,\n    reference: 'toggle'\n  };\n  const DefaultType$9 = {\n    autoClose: '(boolean|string)',\n    boundary: '(string|element)',\n    display: 'string',\n    offset: '(array|string|function)',\n    popperConfig: '(null|object|function)',\n    reference: '(string|element|object)'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._popper = null;\n      this._parent = this._element.parentNode; // dropdown wrapper\n      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n      this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n      this._inNavbar = this._detectNavbar();\n    }\n\n    // Getters\n    static get Default() {\n      return Default$9;\n    }\n    static get DefaultType() {\n      return DefaultType$9;\n    }\n    static get NAME() {\n      return NAME$a;\n    }\n\n    // Public\n    toggle() {\n      return this._isShown() ? this.hide() : this.show();\n    }\n    show() {\n      if (isDisabled(this._element) || this._isShown()) {\n        return;\n      }\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n      this._createPopper();\n\n      // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n      if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n        for (const element of [].concat(...document.body.children)) {\n          EventHandler.on(element, 'mouseover', noop);\n        }\n      }\n      this._element.focus();\n      this._element.setAttribute('aria-expanded', true);\n      this._menu.classList.add(CLASS_NAME_SHOW$6);\n      this._element.classList.add(CLASS_NAME_SHOW$6);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n    }\n    hide() {\n      if (isDisabled(this._element) || !this._isShown()) {\n        return;\n      }\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      this._completeHide(relatedTarget);\n    }\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n      super.dispose();\n    }\n    update() {\n      this._inNavbar = this._detectNavbar();\n      if (this._popper) {\n        this._popper.update();\n      }\n    }\n\n    // Private\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n      if ('ontouchstart' in document.documentElement) {\n        for (const element of [].concat(...document.body.children)) {\n          EventHandler.off(element, 'mouseover', noop);\n        }\n      }\n      if (this._popper) {\n        this._popper.destroy();\n      }\n      this._menu.classList.remove(CLASS_NAME_SHOW$6);\n      this._element.classList.remove(CLASS_NAME_SHOW$6);\n      this._element.setAttribute('aria-expanded', 'false');\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n    }\n    _getConfig(config) {\n      config = super._getConfig(config);\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n      return config;\n    }\n    _createPopper() {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n      let referenceElement = this._element;\n      if (this._config.reference === 'parent') {\n        referenceElement = this._parent;\n      } else if (isElement$1(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n      const popperConfig = this._getPopperConfig();\n      this._popper = createPopper(referenceElement, this._menu, popperConfig);\n    }\n    _isShown() {\n      return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n    }\n    _getPlacement() {\n      const parentDropdown = this._parent;\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      }\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n        return PLACEMENT_TOPCENTER;\n      }\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n        return PLACEMENT_BOTTOMCENTER;\n      }\n\n      // We need to trim the value because custom properties can also include spaces\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n    _detectNavbar() {\n      return this._element.closest(SELECTOR_NAVBAR) !== null;\n    }\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n      if (typeof offset === 'string') {\n        return offset.split(',').map(value => Number.parseInt(value, 10));\n      }\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n      return offset;\n    }\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      };\n\n      // Disable Popper if we have a static display or Dropdown is in Navbar\n      if (this._inNavbar || this._config.display === 'static') {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n      return {\n        ...defaultBsPopperConfig,\n        ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n      };\n    }\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n      if (!items.length) {\n        return;\n      }\n\n      // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Dropdown.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n    static clearMenus(event) {\n      if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n        return;\n      }\n      const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n      for (const toggle of openToggles) {\n        const context = Dropdown.getInstance(toggle);\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        }\n\n        // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n        context._completeHide(relatedTarget);\n      }\n    }\n    static dataApiKeydownHandler(event) {\n      // If not an UP | DOWN | ESCAPE key => not a dropdown command\n      // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n      const isInput = /input|textarea/i.test(event.target.tagName);\n      const isEscapeEvent = event.key === ESCAPE_KEY$2;\n      const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n      if (!isUpOrDownEvent && !isEscapeEvent) {\n        return;\n      }\n      if (isInput && !isEscapeEvent) {\n        return;\n      }\n      event.preventDefault();\n\n      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n      const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n      const instance = Dropdown.getOrCreateInstance(getToggleButton);\n      if (isUpOrDownEvent) {\n        event.stopPropagation();\n        instance.show();\n        instance._selectMenuItem(event);\n        return;\n      }\n      if (instance._isShown()) {\n        // else is escape and we check if it is shown\n        event.stopPropagation();\n        instance.hide();\n        getToggleButton.focus();\n      }\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.getOrCreateInstance(this).toggle();\n  });\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$9 = 'backdrop';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\n  const Default$8 = {\n    className: 'modal-backdrop',\n    clickCallback: null,\n    isAnimated: false,\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    rootElement: 'body' // give the choice to place backdrop under different elements\n  };\n\n  const DefaultType$8 = {\n    className: 'string',\n    clickCallback: '(function|null)',\n    isAnimated: 'boolean',\n    isVisible: 'boolean',\n    rootElement: '(element|string)'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Backdrop extends Config {\n    constructor(config) {\n      super();\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    // Getters\n    static get Default() {\n      return Default$8;\n    }\n    static get DefaultType() {\n      return DefaultType$8;\n    }\n    static get NAME() {\n      return NAME$9;\n    }\n\n    // Public\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n      this._append();\n      const element = this._getElement();\n      if (this._config.isAnimated) {\n        reflow(element);\n      }\n      element.classList.add(CLASS_NAME_SHOW$5);\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n      this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    }\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n      this._element.remove();\n      this._isAppended = false;\n    }\n\n    // Private\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = this._config.className;\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$4);\n        }\n        this._element = backdrop;\n      }\n      return this._element;\n    }\n    _configAfterMerge(config) {\n      // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n      config.rootElement = getElement(config.rootElement);\n      return config;\n    }\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n      const element = this._getElement();\n      this._config.rootElement.append(element);\n      EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/focustrap.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$8 = 'focustrap';\n  const DATA_KEY$5 = 'bs.focustrap';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\n  const TAB_KEY = 'Tab';\n  const TAB_NAV_FORWARD = 'forward';\n  const TAB_NAV_BACKWARD = 'backward';\n  const Default$7 = {\n    autofocus: true,\n    trapElement: null // The element to trap focus inside of\n  };\n\n  const DefaultType$7 = {\n    autofocus: 'boolean',\n    trapElement: 'element'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class FocusTrap extends Config {\n    constructor(config) {\n      super();\n      this._config = this._getConfig(config);\n      this._isActive = false;\n      this._lastTabNavDirection = null;\n    }\n\n    // Getters\n    static get Default() {\n      return Default$7;\n    }\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n    static get NAME() {\n      return NAME$8;\n    }\n\n    // Public\n    activate() {\n      if (this._isActive) {\n        return;\n      }\n      if (this._config.autofocus) {\n        this._config.trapElement.focus();\n      }\n      EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n      EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n      this._isActive = true;\n    }\n    deactivate() {\n      if (!this._isActive) {\n        return;\n      }\n      this._isActive = false;\n      EventHandler.off(document, EVENT_KEY$5);\n    }\n\n    // Private\n    _handleFocusin(event) {\n      const {\n        trapElement\n      } = this._config;\n      if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n        return;\n      }\n      const elements = SelectorEngine.focusableChildren(trapElement);\n      if (elements.length === 0) {\n        trapElement.focus();\n      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n        elements[elements.length - 1].focus();\n      } else {\n        elements[0].focus();\n      }\n    }\n    _handleKeydown(event) {\n      if (event.key !== TAB_KEY) {\n        return;\n      }\n      this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n  const PROPERTY_PADDING = 'padding-right';\n  const PROPERTY_MARGIN = 'margin-right';\n\n  /**\n   * Class definition\n   */\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    // Public\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n    hide() {\n      const width = this.getWidth();\n      this._disableOverFlow();\n      // give padding to element to balance the hidden scrollbar width\n      this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n      // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n    }\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n      this._resetElementAttributes(this._element, PROPERTY_PADDING);\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n    }\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n    // Private\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n      this._element.style.overflow = 'hidden';\n    }\n    _setElementAttributes(selector, styleProperty, callback) {\n      const scrollbarWidth = this.getWidth();\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n        this._saveInitialAttribute(element, styleProperty);\n        const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n        element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n      };\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n    _saveInitialAttribute(element, styleProperty) {\n      const actualValue = element.style.getPropertyValue(styleProperty);\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProperty, actualValue);\n      }\n    }\n    _resetElementAttributes(selector, styleProperty) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProperty);\n        // We only want to remove the property if the value is `null`; the value can also be zero\n        if (value === null) {\n          element.style.removeProperty(styleProperty);\n          return;\n        }\n        Manipulator.removeDataAttribute(element, styleProperty);\n        element.style.setProperty(styleProperty, value);\n      };\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n        return;\n      }\n      for (const sel of SelectorEngine.find(selector, this._element)) {\n        callBack(sel);\n      }\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$7 = 'modal';\n  const DATA_KEY$4 = 'bs.modal';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\n  const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\n  const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_SHOW$4 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const OPEN_SELECTOR$1 = '.modal.show';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const Default$6 = {\n    backdrop: true,\n    focus: true,\n    keyboard: true\n  };\n  const DefaultType$6 = {\n    backdrop: '(boolean|string)',\n    focus: 'boolean',\n    keyboard: 'boolean'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._focustrap = this._initializeFocusTrap();\n      this._isShown = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n      this._addEventListeners();\n    }\n\n    // Getters\n    static get Default() {\n      return Default$6;\n    }\n    static get DefaultType() {\n      return DefaultType$6;\n    }\n    static get NAME() {\n      return NAME$7;\n    }\n\n    // Public\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n        relatedTarget\n      });\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n      this._isShown = true;\n      this._isTransitioning = true;\n      this._scrollBar.hide();\n      document.body.classList.add(CLASS_NAME_OPEN);\n      this._adjustDialog();\n      this._backdrop.show(() => this._showElement(relatedTarget));\n    }\n    hide() {\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n      this._isShown = false;\n      this._isTransitioning = true;\n      this._focustrap.deactivate();\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n      this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n    }\n    dispose() {\n      EventHandler.off(window, EVENT_KEY$4);\n      EventHandler.off(this._dialog, EVENT_KEY$4);\n      this._backdrop.dispose();\n      this._focustrap.deactivate();\n      super.dispose();\n    }\n    handleUpdate() {\n      this._adjustDialog();\n    }\n\n    // Private\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value,\n        isAnimated: this._isAnimated()\n      });\n    }\n    _initializeFocusTrap() {\n      return new FocusTrap({\n        trapElement: this._element\n      });\n    }\n    _showElement(relatedTarget) {\n      // try to append dynamic modal\n      if (!document.body.contains(this._element)) {\n        document.body.append(this._element);\n      }\n      this._element.style.display = 'block';\n      this._element.removeAttribute('aria-hidden');\n      this._element.setAttribute('aria-modal', true);\n      this._element.setAttribute('role', 'dialog');\n      this._element.scrollTop = 0;\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n      reflow(this._element);\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._focustrap.activate();\n        }\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n          relatedTarget\n        });\n      };\n      this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n    }\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (event.key !== ESCAPE_KEY$1) {\n          return;\n        }\n        if (this._config.keyboard) {\n          this.hide();\n          return;\n        }\n        this._triggerBackdropTransition();\n      });\n      EventHandler.on(window, EVENT_RESIZE$1, () => {\n        if (this._isShown && !this._isTransitioning) {\n          this._adjustDialog();\n        }\n      });\n      EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n        // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n        EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n          if (this._element !== event.target || this._element !== event2.target) {\n            return;\n          }\n          if (this._config.backdrop === 'static') {\n            this._triggerBackdropTransition();\n            return;\n          }\n          if (this._config.backdrop) {\n            this.hide();\n          }\n        });\n      });\n    }\n    _hideModal() {\n      this._element.style.display = 'none';\n      this._element.setAttribute('aria-hidden', true);\n      this._element.removeAttribute('aria-modal');\n      this._element.removeAttribute('role');\n      this._isTransitioning = false;\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n        this._resetAdjustments();\n        this._scrollBar.reset();\n        EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n      });\n    }\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$3);\n    }\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n      const initialOverflowY = this._element.style.overflowY;\n      // return if the following background transition hasn't yet completed\n      if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n      if (!isModalOverflowing) {\n        this._element.style.overflowY = 'hidden';\n      }\n      this._element.classList.add(CLASS_NAME_STATIC);\n      this._queueCallback(() => {\n        this._element.classList.remove(CLASS_NAME_STATIC);\n        this._queueCallback(() => {\n          this._element.style.overflowY = initialOverflowY;\n        }, this._dialog);\n      }, this._dialog);\n      this._element.focus();\n    }\n\n    /**\n     * The following methods are used to handle overflowing modals\n     */\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n      const scrollbarWidth = this._scrollBar.getWidth();\n      const isBodyOverflowing = scrollbarWidth > 0;\n      if (isBodyOverflowing && !isModalOverflowing) {\n        const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n        this._element.style[property] = `${scrollbarWidth}px`;\n      }\n      if (!isBodyOverflowing && isModalOverflowing) {\n        const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n        this._element.style[property] = `${scrollbarWidth}px`;\n      }\n    }\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    }\n\n    // Static\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](relatedTarget);\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = SelectorEngine.getElementFromSelector(this);\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n    EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n      EventHandler.one(target, EVENT_HIDDEN$4, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n\n    // avoid conflict when clicking modal toggler while another one is open\n    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n    if (alreadyOpen) {\n      Modal.getInstance(alreadyOpen).hide();\n    }\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  enableDismissTrigger(Modal);\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$6 = 'offcanvas';\n  const DATA_KEY$3 = 'bs.offcanvas';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\n  const ESCAPE_KEY = 'Escape';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const CLASS_NAME_SHOWING$1 = 'showing';\n  const CLASS_NAME_HIDING = 'hiding';\n  const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$3}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n      this._focustrap = this._initializeFocusTrap();\n      this._addEventListeners();\n    }\n\n    // Getters\n    static get Default() {\n      return Default$5;\n    }\n    static get DefaultType() {\n      return DefaultType$5;\n    }\n    static get NAME() {\n      return NAME$6;\n    }\n\n    // Public\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n      this._isShown = true;\n      this._backdrop.show();\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n      }\n      this._element.setAttribute('aria-modal', true);\n      this._element.setAttribute('role', 'dialog');\n      this._element.classList.add(CLASS_NAME_SHOWING$1);\n      const completeCallBack = () => {\n        if (!this._config.scroll || this._config.backdrop) {\n          this._focustrap.activate();\n        }\n        this._element.classList.add(CLASS_NAME_SHOW$3);\n        this._element.classList.remove(CLASS_NAME_SHOWING$1);\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n      this._focustrap.deactivate();\n      this._element.blur();\n      this._isShown = false;\n      this._element.classList.add(CLASS_NAME_HIDING);\n      this._backdrop.hide();\n      const completeCallback = () => {\n        this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n        this._element.removeAttribute('aria-modal');\n        this._element.removeAttribute('role');\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      };\n      this._queueCallback(completeCallback, this._element, true);\n    }\n    dispose() {\n      this._backdrop.dispose();\n      this._focustrap.deactivate();\n      super.dispose();\n    }\n\n    // Private\n    _initializeBackDrop() {\n      const clickCallback = () => {\n        if (this._config.backdrop === 'static') {\n          EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n          return;\n        }\n        this.hide();\n      };\n\n      // 'static' option will be translated to true, and booleans will keep their value\n      const isVisible = Boolean(this._config.backdrop);\n      return new Backdrop({\n        className: CLASS_NAME_BACKDROP,\n        isVisible,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: isVisible ? clickCallback : null\n      });\n    }\n    _initializeFocusTrap() {\n      return new FocusTrap({\n        trapElement: this._element\n      });\n    }\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (event.key !== ESCAPE_KEY) {\n          return;\n        }\n        if (this._config.keyboard) {\n          this.hide();\n          return;\n        }\n        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n      });\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](this);\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = SelectorEngine.getElementFromSelector(this);\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n    if (isDisabled(this)) {\n      return;\n    }\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n\n    // avoid conflict when clicking a toggler of an offcanvas, while another is open\n    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n    if (alreadyOpen && alreadyOpen !== target) {\n      Offcanvas.getInstance(alreadyOpen).hide();\n    }\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n      Offcanvas.getOrCreateInstance(selector).show();\n    }\n  });\n  EventHandler.on(window, EVENT_RESIZE, () => {\n    for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n      if (getComputedStyle(element).position !== 'fixed') {\n        Offcanvas.getOrCreateInstance(element).hide();\n      }\n    }\n  });\n  enableDismissTrigger(Offcanvas);\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  // js-docs-start allow-list\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  // js-docs-end allow-list\n\n  const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n  /**\n   * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n   * contexts.\n   *\n   * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n   */\n  // eslint-disable-next-line unicorn/better-regex\n  const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\n  const allowedAttribute = (attribute, allowedAttributeList) => {\n    const attributeName = attribute.nodeName.toLowerCase();\n    if (allowedAttributeList.includes(attributeName)) {\n      if (uriAttributes.has(attributeName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n      }\n      return true;\n    }\n\n    // Check if a regular expression validates the attribute.\n    return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n    if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n      return sanitizeFunction(unsafeHtml);\n    }\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n    for (const element of elements) {\n      const elementName = element.nodeName.toLowerCase();\n      if (!Object.keys(allowList).includes(elementName)) {\n        element.remove();\n        continue;\n      }\n      const attributeList = [].concat(...element.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n      for (const attribute of attributeList) {\n        if (!allowedAttribute(attribute, allowedAttributes)) {\n          element.removeAttribute(attribute.nodeName);\n        }\n      }\n    }\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/template-factory.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$5 = 'TemplateFactory';\n  const Default$4 = {\n    allowList: DefaultAllowlist,\n    content: {},\n    // { selector : text ,  selector2 : text2 , }\n    extraClass: '',\n    html: false,\n    sanitize: true,\n    sanitizeFn: null,\n    template: '<div></div>'\n  };\n  const DefaultType$4 = {\n    allowList: 'object',\n    content: 'object',\n    extraClass: '(string|function)',\n    html: 'boolean',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    template: 'string'\n  };\n  const DefaultContentType = {\n    entry: '(string|element|function|null)',\n    selector: '(string|element)'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class TemplateFactory extends Config {\n    constructor(config) {\n      super();\n      this._config = this._getConfig(config);\n    }\n\n    // Getters\n    static get Default() {\n      return Default$4;\n    }\n    static get DefaultType() {\n      return DefaultType$4;\n    }\n    static get NAME() {\n      return NAME$5;\n    }\n\n    // Public\n    getContent() {\n      return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n    }\n    hasContent() {\n      return this.getContent().length > 0;\n    }\n    changeContent(content) {\n      this._checkContent(content);\n      this._config.content = {\n        ...this._config.content,\n        ...content\n      };\n      return this;\n    }\n    toHtml() {\n      const templateWrapper = document.createElement('div');\n      templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n      for (const [selector, text] of Object.entries(this._config.content)) {\n        this._setContent(templateWrapper, text, selector);\n      }\n      const template = templateWrapper.children[0];\n      const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n      if (extraClass) {\n        template.classList.add(...extraClass.split(' '));\n      }\n      return template;\n    }\n\n    // Private\n    _typeCheckConfig(config) {\n      super._typeCheckConfig(config);\n      this._checkContent(config.content);\n    }\n    _checkContent(arg) {\n      for (const [selector, content] of Object.entries(arg)) {\n        super._typeCheckConfig({\n          selector,\n          entry: content\n        }, DefaultContentType);\n      }\n    }\n    _setContent(template, content, selector) {\n      const templateElement = SelectorEngine.findOne(selector, template);\n      if (!templateElement) {\n        return;\n      }\n      content = this._resolvePossibleFunction(content);\n      if (!content) {\n        templateElement.remove();\n        return;\n      }\n      if (isElement$1(content)) {\n        this._putElementInTemplate(getElement(content), templateElement);\n        return;\n      }\n      if (this._config.html) {\n        templateElement.innerHTML = this._maybeSanitize(content);\n        return;\n      }\n      templateElement.textContent = content;\n    }\n    _maybeSanitize(arg) {\n      return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n    }\n    _resolvePossibleFunction(arg) {\n      return execute(arg, [this]);\n    }\n    _putElementInTemplate(element, templateElement) {\n      if (this._config.html) {\n        templateElement.innerHTML = '';\n        templateElement.append(element);\n        return;\n      }\n      templateElement.textContent = element.textContent;\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$4 = 'tooltip';\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\n  const EVENT_MODAL_HIDE = 'hide.bs.modal';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  const EVENT_HIDE$2 = 'hide';\n  const EVENT_HIDDEN$2 = 'hidden';\n  const EVENT_SHOW$2 = 'show';\n  const EVENT_SHOWN$2 = 'shown';\n  const EVENT_INSERTED = 'inserted';\n  const EVENT_CLICK$1 = 'click';\n  const EVENT_FOCUSIN$1 = 'focusin';\n  const EVENT_FOCUSOUT$1 = 'focusout';\n  const EVENT_MOUSEENTER = 'mouseenter';\n  const EVENT_MOUSELEAVE = 'mouseleave';\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    allowList: DefaultAllowlist,\n    animation: true,\n    boundary: 'clippingParents',\n    container: false,\n    customClass: '',\n    delay: 0,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    html: false,\n    offset: [0, 6],\n    placement: 'top',\n    popperConfig: null,\n    sanitize: true,\n    sanitizeFn: null,\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    title: '',\n    trigger: 'hover focus'\n  };\n  const DefaultType$3 = {\n    allowList: 'object',\n    animation: 'boolean',\n    boundary: '(string|element)',\n    container: '(string|element|boolean)',\n    customClass: '(string|function)',\n    delay: '(number|object)',\n    fallbackPlacements: 'array',\n    html: 'boolean',\n    offset: '(array|string|function)',\n    placement: '(string|function)',\n    popperConfig: '(null|object|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    selector: '(string|boolean)',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n      super(element, config);\n\n      // Private\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._isHovered = null;\n      this._activeTrigger = {};\n      this._popper = null;\n      this._templateFactory = null;\n      this._newContent = null;\n\n      // Protected\n      this.tip = null;\n      this._setListeners();\n      if (!this._config.selector) {\n        this._fixTitle();\n      }\n    }\n\n    // Getters\n    static get Default() {\n      return Default$3;\n    }\n    static get DefaultType() {\n      return DefaultType$3;\n    }\n    static get NAME() {\n      return NAME$4;\n    }\n\n    // Public\n    enable() {\n      this._isEnabled = true;\n    }\n    disable() {\n      this._isEnabled = false;\n    }\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n    toggle() {\n      if (!this._isEnabled) {\n        return;\n      }\n      this._activeTrigger.click = !this._activeTrigger.click;\n      if (this._isShown()) {\n        this._leave();\n        return;\n      }\n      this._enter();\n    }\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n      if (this._element.getAttribute('data-bs-original-title')) {\n        this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n      }\n      this._disposePopper();\n      super.dispose();\n    }\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n      if (!(this._isWithContent() && this._isEnabled)) {\n        return;\n      }\n      const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      // TODO: v6 remove this or make it optional\n      this._disposePopper();\n      const tip = this._getTipElement();\n      this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n      const {\n        container\n      } = this._config;\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.append(tip);\n        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n      }\n      this._popper = this._createPopper(tip);\n      tip.classList.add(CLASS_NAME_SHOW$2);\n\n      // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n      if ('ontouchstart' in document.documentElement) {\n        for (const element of [].concat(...document.body.children)) {\n          EventHandler.on(element, 'mouseover', noop);\n        }\n      }\n      const complete = () => {\n        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n        if (this._isHovered === false) {\n          this._leave();\n        }\n        this._isHovered = false;\n      };\n      this._queueCallback(complete, this.tip, this._isAnimated());\n    }\n    hide() {\n      if (!this._isShown()) {\n        return;\n      }\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n      const tip = this._getTipElement();\n      tip.classList.remove(CLASS_NAME_SHOW$2);\n\n      // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n      if ('ontouchstart' in document.documentElement) {\n        for (const element of [].concat(...document.body.children)) {\n          EventHandler.off(element, 'mouseover', noop);\n        }\n      }\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      this._isHovered = null; // it is a trick to support manual triggering\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n        if (!this._isHovered) {\n          this._disposePopper();\n        }\n        this._element.removeAttribute('aria-describedby');\n        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n      };\n      this._queueCallback(complete, this.tip, this._isAnimated());\n    }\n    update() {\n      if (this._popper) {\n        this._popper.update();\n      }\n    }\n\n    // Protected\n    _isWithContent() {\n      return Boolean(this._getTitle());\n    }\n    _getTipElement() {\n      if (!this.tip) {\n        this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n      }\n      return this.tip;\n    }\n    _createTipElement(content) {\n      const tip = this._getTemplateFactory(content).toHtml();\n\n      // TODO: remove this check in v6\n      if (!tip) {\n        return null;\n      }\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n      // TODO: v6 the following can be achieved with CSS only\n      tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n      const tipId = getUID(this.constructor.NAME).toString();\n      tip.setAttribute('id', tipId);\n      if (this._isAnimated()) {\n        tip.classList.add(CLASS_NAME_FADE$2);\n      }\n      return tip;\n    }\n    setContent(content) {\n      this._newContent = content;\n      if (this._isShown()) {\n        this._disposePopper();\n        this.show();\n      }\n    }\n    _getTemplateFactory(content) {\n      if (this._templateFactory) {\n        this._templateFactory.changeContent(content);\n      } else {\n        this._templateFactory = new TemplateFactory({\n          ...this._config,\n          // the `content` var has to be after `this._config`\n          // to override config.content in case of popover\n          content,\n          extraClass: this._resolvePossibleFunction(this._config.customClass)\n        });\n      }\n      return this._templateFactory;\n    }\n    _getContentForTemplate() {\n      return {\n        [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n      };\n    }\n    _getTitle() {\n      return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n    }\n\n    // Private\n    _initializeOnDelegatedTarget(event) {\n      return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n    }\n    _isAnimated() {\n      return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n    }\n    _isShown() {\n      return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n    }\n    _createPopper(tip) {\n      const placement = execute(this._config.placement, [this, tip, this._element]);\n      const attachment = AttachmentMap[placement.toUpperCase()];\n      return createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n      if (typeof offset === 'string') {\n        return offset.split(',').map(value => Number.parseInt(value, 10));\n      }\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n      return offset;\n    }\n    _resolvePossibleFunction(arg) {\n      return execute(arg, [this._element]);\n    }\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'preSetPlacement',\n          enabled: true,\n          phase: 'beforeMain',\n          fn: data => {\n            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n            this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n          }\n        }]\n      };\n      return {\n        ...defaultBsPopperConfig,\n        ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n      };\n    }\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n      for (const trigger of triggers) {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n            const context = this._initializeOnDelegatedTarget(event);\n            context.toggle();\n          });\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n          EventHandler.on(this._element, eventIn, this._config.selector, event => {\n            const context = this._initializeOnDelegatedTarget(event);\n            context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n            context._enter();\n          });\n          EventHandler.on(this._element, eventOut, this._config.selector, event => {\n            const context = this._initializeOnDelegatedTarget(event);\n            context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n            context._leave();\n          });\n        }\n      }\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n      EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n    }\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n      if (!title) {\n        return;\n      }\n      if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n        this._element.setAttribute('aria-label', title);\n      }\n      this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n      this._element.removeAttribute('title');\n    }\n    _enter() {\n      if (this._isShown() || this._isHovered) {\n        this._isHovered = true;\n        return;\n      }\n      this._isHovered = true;\n      this._setTimeout(() => {\n        if (this._isHovered) {\n          this.show();\n        }\n      }, this._config.delay.show);\n    }\n    _leave() {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n      this._isHovered = false;\n      this._setTimeout(() => {\n        if (!this._isHovered) {\n          this.hide();\n        }\n      }, this._config.delay.hide);\n    }\n    _setTimeout(handler, timeout) {\n      clearTimeout(this._timeout);\n      this._timeout = setTimeout(handler, timeout);\n    }\n    _isWithActiveTrigger() {\n      return Object.values(this._activeTrigger).includes(true);\n    }\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      for (const dataAttribute of Object.keys(dataAttributes)) {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n          delete dataAttributes[dataAttribute];\n        }\n      }\n      config = {\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config = this._mergeConfigObj(config);\n      config = this._configAfterMerge(config);\n      this._typeCheckConfig(config);\n      return config;\n    }\n    _configAfterMerge(config) {\n      config.container = config.container === false ? document.body : getElement(config.container);\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n      return config;\n    }\n    _getDelegateConfig() {\n      const config = {};\n      for (const [key, value] of Object.entries(this._config)) {\n        if (this.constructor.Default[key] !== value) {\n          config[key] = value;\n        }\n      }\n      config.selector = false;\n      config.trigger = 'manual';\n\n      // In the future can be replaced with:\n      // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n      // `Object.fromEntries(keysWithDifferentValues)`\n      return config;\n    }\n    _disposePopper() {\n      if (this._popper) {\n        this._popper.destroy();\n        this._popper = null;\n      }\n      if (this.tip) {\n        this.tip.remove();\n        this.tip = null;\n      }\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n  }\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$3 = 'popover';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  const Default$2 = {\n    ...Tooltip.Default,\n    content: '',\n    offset: [0, 8],\n    placement: 'right',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>',\n    trigger: 'click'\n  };\n  const DefaultType$2 = {\n    ...Tooltip.DefaultType,\n    content: '(null|string|element|function)'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n    static get DefaultType() {\n      return DefaultType$2;\n    }\n    static get NAME() {\n      return NAME$3;\n    }\n\n    // Overrides\n    _isWithContent() {\n      return this._getTitle() || this._getContent();\n    }\n\n    // Private\n    _getContentForTemplate() {\n      return {\n        [SELECTOR_TITLE]: this._getTitle(),\n        [SELECTOR_CONTENT]: this._getContent()\n      };\n    }\n    _getContent() {\n      return this._resolvePossibleFunction(this._config.content);\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n  }\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_CLICK = `click${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_TARGET_LINKS = '[href]';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const Default$1 = {\n    offset: null,\n    // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n    rootMargin: '0px 0px -25%',\n    smoothScroll: false,\n    target: null,\n    threshold: [0.1, 0.5, 1]\n  };\n  const DefaultType$1 = {\n    offset: '(number|null)',\n    // TODO v6 @deprecated, keep it for backwards compatibility reasons\n    rootMargin: 'string',\n    smoothScroll: 'boolean',\n    target: 'element',\n    threshold: 'array'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n\n      // this._element is the observablesContainer and config.target the menu links wrapper\n      this._targetLinks = new Map();\n      this._observableSections = new Map();\n      this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n      this._activeTarget = null;\n      this._observer = null;\n      this._previousScrollData = {\n        visibleEntryTop: 0,\n        parentScrollTop: 0\n      };\n      this.refresh(); // initialize\n    }\n\n    // Getters\n    static get Default() {\n      return Default$1;\n    }\n    static get DefaultType() {\n      return DefaultType$1;\n    }\n    static get NAME() {\n      return NAME$2;\n    }\n\n    // Public\n    refresh() {\n      this._initializeTargetsAndObservables();\n      this._maybeEnableSmoothScroll();\n      if (this._observer) {\n        this._observer.disconnect();\n      } else {\n        this._observer = this._getNewObserver();\n      }\n      for (const section of this._observableSections.values()) {\n        this._observer.observe(section);\n      }\n    }\n    dispose() {\n      this._observer.disconnect();\n      super.dispose();\n    }\n\n    // Private\n    _configAfterMerge(config) {\n      // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n      config.target = getElement(config.target) || document.body;\n\n      // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n      config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n      if (typeof config.threshold === 'string') {\n        config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n      }\n      return config;\n    }\n    _maybeEnableSmoothScroll() {\n      if (!this._config.smoothScroll) {\n        return;\n      }\n\n      // unregister any previous listeners\n      EventHandler.off(this._config.target, EVENT_CLICK);\n      EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n        const observableSection = this._observableSections.get(event.target.hash);\n        if (observableSection) {\n          event.preventDefault();\n          const root = this._rootElement || window;\n          const height = observableSection.offsetTop - this._element.offsetTop;\n          if (root.scrollTo) {\n            root.scrollTo({\n              top: height,\n              behavior: 'smooth'\n            });\n            return;\n          }\n\n          // Chrome 60 doesn't support `scrollTo`\n          root.scrollTop = height;\n        }\n      });\n    }\n    _getNewObserver() {\n      const options = {\n        root: this._rootElement,\n        threshold: this._config.threshold,\n        rootMargin: this._config.rootMargin\n      };\n      return new IntersectionObserver(entries => this._observerCallback(entries), options);\n    }\n\n    // The logic of selection\n    _observerCallback(entries) {\n      const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n      const activate = entry => {\n        this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n        this._process(targetElement(entry));\n      };\n      const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n      const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n      this._previousScrollData.parentScrollTop = parentScrollTop;\n      for (const entry of entries) {\n        if (!entry.isIntersecting) {\n          this._activeTarget = null;\n          this._clearActiveClass(targetElement(entry));\n          continue;\n        }\n        const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n        // if we are scrolling down, pick the bigger offsetTop\n        if (userScrollsDown && entryIsLowerThanPrevious) {\n          activate(entry);\n          // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n          if (!parentScrollTop) {\n            return;\n          }\n          continue;\n        }\n\n        // if we are scrolling up, pick the smallest offsetTop\n        if (!userScrollsDown && !entryIsLowerThanPrevious) {\n          activate(entry);\n        }\n      }\n    }\n    _initializeTargetsAndObservables() {\n      this._targetLinks = new Map();\n      this._observableSections = new Map();\n      const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n      for (const anchor of targetLinks) {\n        // ensure that the anchor has an id and is not disabled\n        if (!anchor.hash || isDisabled(anchor)) {\n          continue;\n        }\n        const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n        // ensure that the observableSection exists & is visible\n        if (isVisible(observableSection)) {\n          this._targetLinks.set(decodeURI(anchor.hash), anchor);\n          this._observableSections.set(anchor.hash, observableSection);\n        }\n      }\n    }\n    _process(target) {\n      if (this._activeTarget === target) {\n        return;\n      }\n      this._clearActiveClass(this._config.target);\n      this._activeTarget = target;\n      target.classList.add(CLASS_NAME_ACTIVE$1);\n      this._activateParents(target);\n      EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n    _activateParents(target) {\n      // Activate dropdown parents\n      if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n        return;\n      }\n      for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n          item.classList.add(CLASS_NAME_ACTIVE$1);\n        }\n      }\n    }\n    _clearActiveClass(parent) {\n      parent.classList.remove(CLASS_NAME_ACTIVE$1);\n      const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);\n      for (const node of activeNodes) {\n        node.classList.remove(CLASS_NAME_ACTIVE$1);\n      }\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {\n    for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n      ScrollSpy.getOrCreateInstance(spy);\n    }\n  });\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const HOME_KEY = 'Home';\n  const END_KEY = 'End';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const CLASS_DROPDOWN = 'dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\n  const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\n  const SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\n  const SELECTOR_OUTER = '.nav-item, .list-group-item';\n  const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // TODO: could only be `tab` in v6\n  const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\n  const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n  /**\n   * Class definition\n   */\n\n  class Tab extends BaseComponent {\n    constructor(element) {\n      super(element);\n      this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n      if (!this._parent) {\n        return;\n        // TODO: should throw exception in v6\n        // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n      }\n\n      // Set up initial aria attributes\n      this._setInitialAttributes(this._parent, this._getChildren());\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    }\n\n    // Public\n    show() {\n      // Shows this elem and deactivate the active sibling if exists\n      const innerElem = this._element;\n      if (this._elemIsActive(innerElem)) {\n        return;\n      }\n\n      // Search for active tab on same parent to deactivate it\n      const active = this._getActiveElem();\n      const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\n        relatedTarget: innerElem\n      }) : null;\n      const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\n        relatedTarget: active\n      });\n      if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n        return;\n      }\n      this._deactivate(active, innerElem);\n      this._activate(innerElem, active);\n    }\n\n    // Private\n    _activate(element, relatedElem) {\n      if (!element) {\n        return;\n      }\n      element.classList.add(CLASS_NAME_ACTIVE);\n      this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n      const complete = () => {\n        if (element.getAttribute('role') !== 'tab') {\n          element.classList.add(CLASS_NAME_SHOW$1);\n          return;\n        }\n        element.removeAttribute('tabindex');\n        element.setAttribute('aria-selected', true);\n        this._toggleDropDown(element, true);\n        EventHandler.trigger(element, EVENT_SHOWN$1, {\n          relatedTarget: relatedElem\n        });\n      };\n      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n    }\n    _deactivate(element, relatedElem) {\n      if (!element) {\n        return;\n      }\n      element.classList.remove(CLASS_NAME_ACTIVE);\n      element.blur();\n      this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n      const complete = () => {\n        if (element.getAttribute('role') !== 'tab') {\n          element.classList.remove(CLASS_NAME_SHOW$1);\n          return;\n        }\n        element.setAttribute('aria-selected', false);\n        element.setAttribute('tabindex', '-1');\n        this._toggleDropDown(element, false);\n        EventHandler.trigger(element, EVENT_HIDDEN$1, {\n          relatedTarget: relatedElem\n        });\n      };\n      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n    }\n    _keydown(event) {\n      if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {\n        return;\n      }\n      event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n      event.preventDefault();\n      const children = this._getChildren().filter(element => !isDisabled(element));\n      let nextActiveElement;\n      if ([HOME_KEY, END_KEY].includes(event.key)) {\n        nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n      } else {\n        const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n        nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n      }\n      if (nextActiveElement) {\n        nextActiveElement.focus({\n          preventScroll: true\n        });\n        Tab.getOrCreateInstance(nextActiveElement).show();\n      }\n    }\n    _getChildren() {\n      // collection of inner elements\n      return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n    }\n    _getActiveElem() {\n      return this._getChildren().find(child => this._elemIsActive(child)) || null;\n    }\n    _setInitialAttributes(parent, children) {\n      this._setAttributeIfNotExists(parent, 'role', 'tablist');\n      for (const child of children) {\n        this._setInitialAttributesOnChild(child);\n      }\n    }\n    _setInitialAttributesOnChild(child) {\n      child = this._getInnerElement(child);\n      const isActive = this._elemIsActive(child);\n      const outerElem = this._getOuterElement(child);\n      child.setAttribute('aria-selected', isActive);\n      if (outerElem !== child) {\n        this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n      }\n      if (!isActive) {\n        child.setAttribute('tabindex', '-1');\n      }\n      this._setAttributeIfNotExists(child, 'role', 'tab');\n\n      // set attributes to the related panel too\n      this._setInitialAttributesOnTargetPanel(child);\n    }\n    _setInitialAttributesOnTargetPanel(child) {\n      const target = SelectorEngine.getElementFromSelector(child);\n      if (!target) {\n        return;\n      }\n      this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n      if (child.id) {\n        this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n      }\n    }\n    _toggleDropDown(element, open) {\n      const outerElem = this._getOuterElement(element);\n      if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n        return;\n      }\n      const toggle = (selector, className) => {\n        const element = SelectorEngine.findOne(selector, outerElem);\n        if (element) {\n          element.classList.toggle(className, open);\n        }\n      };\n      toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n      toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\n      outerElem.setAttribute('aria-expanded', open);\n    }\n    _setAttributeIfNotExists(element, attribute, value) {\n      if (!element.hasAttribute(attribute)) {\n        element.setAttribute(attribute, value);\n      }\n    }\n    _elemIsActive(elem) {\n      return elem.classList.contains(CLASS_NAME_ACTIVE);\n    }\n\n    // Try to get the inner element (usually the .nav-link)\n    _getInnerElement(elem) {\n      return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n    }\n\n    // Try to get the outer element (usually the .nav-item)\n    _getOuterElement(elem) {\n      return elem.closest(SELECTOR_OUTER) || elem;\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n    if (isDisabled(this)) {\n      return;\n    }\n    Tab.getOrCreateInstance(this).show();\n  });\n\n  /**\n   * Initialize on focus\n   */\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n      Tab.getOrCreateInstance(element);\n    }\n  });\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n      this._setListeners();\n    }\n\n    // Getters\n    static get Default() {\n      return Default;\n    }\n    static get DefaultType() {\n      return DefaultType;\n    }\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n      this._clearTimeout();\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n        this._maybeScheduleHide();\n      };\n      this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n      reflow(this._element);\n      this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n    hide() {\n      if (!this.isShown()) {\n        return;\n      }\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n        this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n      this._element.classList.add(CLASS_NAME_SHOWING);\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n    dispose() {\n      this._clearTimeout();\n      if (this.isShown()) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n      super.dispose();\n    }\n    isShown() {\n      return this._element.classList.contains(CLASS_NAME_SHOW);\n    }\n\n    // Private\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          {\n            this._hasMouseInteraction = isInteracting;\n            break;\n          }\n        case 'focusin':\n        case 'focusout':\n          {\n            this._hasKeyboardInteraction = isInteracting;\n            break;\n          }\n      }\n      if (isInteracting) {\n        this._clearTimeout();\n        return;\n      }\n      const nextElement = event.relatedTarget;\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n      this._maybeScheduleHide();\n    }\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n          data[config](this);\n        }\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  enableDismissTrigger(Toast);\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n}));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "public/assets/bootstrap-5.3.2-dist/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.3.2 (https://getbootstrap.com/)\n  * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\nconst Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n    const instanceMap = elementMap.get(element);\n\n    // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n    instanceMap.set(key, instance);\n  },\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n    return null;\n  },\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key);\n\n    // free up element references if there are no instances left for an element\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n  if (selector && window.CSS && window.CSS.escape) {\n    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n    selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n  }\n  return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n  if (object === null || object === undefined) {\n    return `${object}`;\n  }\n  return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n  return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  }\n\n  // Get transition-duration of the element\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst isElement = object => {\n  if (!object || typeof object !== 'object') {\n    return false;\n  }\n  if (typeof object.jquery !== 'undefined') {\n    object = object[0];\n  }\n  return typeof object.nodeType !== 'undefined';\n};\nconst getElement = object => {\n  // it's a jQuery object or a node element\n  if (isElement(object)) {\n    return object.jquery ? object[0] : object;\n  }\n  if (typeof object === 'string' && object.length > 0) {\n    return document.querySelector(parseSelector(object));\n  }\n  return null;\n};\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n  const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  // Handle `details` element as its content may falsie appear visible when it is closed\n  const closedDetails = element.closest('details:not([open])');\n  if (!closedDetails) {\n    return elementIsVisible;\n  }\n  if (closedDetails !== element) {\n    const summary = element.closest('summary');\n    if (summary && summary.parentNode !== closedDetails) {\n      return false;\n    }\n    if (summary === null) {\n      return false;\n    }\n  }\n  return elementIsVisible;\n};\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n  if (element instanceof ShadowRoot) {\n    return element;\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null;\n  }\n  return findShadowRoot(element.parentNode);\n};\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n  element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n  if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return window.jQuery;\n  }\n  return null;\n};\nconst DOMContentLoadedCallbacks = [];\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        for (const callback of DOMContentLoadedCallbacks) {\n          callback();\n        }\n      });\n    }\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n  return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  const listLength = list.length;\n  let index = list.indexOf(activeElement);\n\n  // if the element does not exist in the list return an element\n  // depending on the direction and if cycle is allowed\n  if (index === -1) {\n    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n  }\n  index += shouldGetNext ? 1 : -1;\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n  const uid = makeEventUid(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    hydrateObj(event, {\n      delegateTarget: element\n    });\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n    return fn.apply(element, [event]);\n  };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (const domElement of domElements) {\n        if (domElement !== target) {\n          continue;\n        }\n        hydrateObj(event, {\n          delegateTarget: target\n        });\n        if (handler.oneOff) {\n          EventHandler.off(element, event.type, selector, fn);\n        }\n        return fn.apply(target, [event]);\n      }\n    }\n  };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n  return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n  const isDelegated = typeof handler === 'string';\n  // TODO: tooltip passes `false` instead of selector, so we need to check\n  const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  if (!nativeEvents.has(typeEvent)) {\n    typeEvent = originalTypeEvent;\n  }\n  return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n  let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n  if (originalTypeEvent in customEvents) {\n    const wrapFunction = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n    callable = wrapFunction(callable);\n  }\n  const events = getElementEvents(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n  if (previousFunction) {\n    previousFunction.oneOff = previousFunction.oneOff && oneOff;\n    return;\n  }\n  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n  fn.delegationSelector = isDelegated ? handler : null;\n  fn.callable = callable;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n  if (!fn) {\n    return;\n  }\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n    if (handlerKey.includes(namespace)) {\n      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n    }\n  }\n}\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\nconst EventHandler = {\n  on(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, false);\n  },\n  one(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, true);\n  },\n  off(element, originalTypeEvent, handler, delegationFunction) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n    const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getElementEvents(element);\n    const storeElementEvent = events[typeEvent] || {};\n    const isNamespace = originalTypeEvent.startsWith('.');\n    if (typeof callable !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!Object.keys(storeElementEvent).length) {\n        return;\n      }\n      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n      return;\n    }\n    if (isNamespace) {\n      for (const elementEvent of Object.keys(events)) {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      }\n    }\n    for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n      }\n    }\n  },\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    let jQueryEvent = null;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n    const evt = hydrateObj(new Event(event, {\n      bubbles,\n      cancelable: true\n    }), args);\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n    if (evt.defaultPrevented && jQueryEvent) {\n      jQueryEvent.preventDefault();\n    }\n    return evt;\n  }\n};\nfunction hydrateObj(obj, meta = {}) {\n  for (const [key, value] of Object.entries(meta)) {\n    try {\n      obj[key] = value;\n    } catch (_unused) {\n      Object.defineProperty(obj, key, {\n        configurable: true,\n        get() {\n          return value;\n        }\n      });\n    }\n  }\n  return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n  if (value === 'true') {\n    return true;\n  }\n  if (value === 'false') {\n    return false;\n  }\n  if (value === Number(value).toString()) {\n    return Number(value);\n  }\n  if (value === '' || value === 'null') {\n    return null;\n  }\n  if (typeof value !== 'string') {\n    return value;\n  }\n  try {\n    return JSON.parse(decodeURIComponent(value));\n  } catch (_unused) {\n    return value;\n  }\n}\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n    const attributes = {};\n    const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n    for (const key of bsKeys) {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    }\n    return attributes;\n  },\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass Config {\n  // Getters\n  static get Default() {\n    return {};\n  }\n  static get DefaultType() {\n    return {};\n  }\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n  _getConfig(config) {\n    config = this._mergeConfigObj(config);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n  _configAfterMerge(config) {\n    return config;\n  }\n  _mergeConfigObj(config, element) {\n    const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n    return {\n      ...this.constructor.Default,\n      ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n      ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n      ...(typeof config === 'object' ? config : {})\n    };\n  }\n  _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n    for (const [property, expectedTypes] of Object.entries(configTypes)) {\n      const value = config[property];\n      const valueType = isElement(value) ? 'element' : toType(value);\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    }\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.2';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n  constructor(element, config) {\n    super();\n    element = getElement(element);\n    if (!element) {\n      return;\n    }\n    this._element = element;\n    this._config = this._getConfig(config);\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  // Public\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    for (const propertyName of Object.getOwnPropertyNames(this)) {\n      this[propertyName] = null;\n    }\n  }\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  _getConfig(config) {\n    config = this._mergeConfigObj(config, this._element);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n\n  // Static\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY);\n  }\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n  static get VERSION() {\n    return VERSION;\n  }\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n  static eventName(name) {\n    return `${name}${this.EVENT_KEY}`;\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n  if (!selector || selector === '#') {\n    let hrefAttribute = element.getAttribute('href');\n\n    // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n    if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n      return null;\n    }\n\n    // Just in case some CMS puts out a full URL with the anchor appended\n    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n      hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n    }\n    selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;\n  }\n  return selector;\n};\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode.closest(selector);\n    while (ancestor) {\n      parents.push(ancestor);\n      ancestor = ancestor.parentNode.closest(selector);\n    }\n    return parents;\n  },\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n      previous = previous.previousElementSibling;\n    }\n    return [];\n  },\n  // TODO: this is now unused; remove later along with prev()\n  next(element, selector) {\n    let next = element.nextElementSibling;\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n      next = next.nextElementSibling;\n    }\n    return [];\n  },\n  focusableChildren(element) {\n    const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n  },\n  getSelectorFromElement(element) {\n    const selector = getSelector(element);\n    if (selector) {\n      return SelectorEngine.findOne(selector) ? selector : null;\n    }\n    return null;\n  },\n  getElementFromSelector(element) {\n    const selector = getSelector(element);\n    return selector ? SelectorEngine.findOne(selector) : null;\n  },\n  getMultipleElementsFromSelector(element) {\n    const selector = getSelector(element);\n    return selector ? SelectorEngine.find(selector) : [];\n  }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n  const name = component.NAME;\n  EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n    if (isDisabled(this)) {\n      return;\n    }\n    const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n    const instance = component.getOrCreateInstance(target);\n\n    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n    instance[method]();\n  });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$f;\n  }\n\n  // Public\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n    if (closeEvent.defaultPrevented) {\n      return;\n    }\n    this._element.classList.remove(CLASS_NAME_SHOW$8);\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n  }\n\n  // Private\n  _destroyElement() {\n    this._element.remove();\n    EventHandler.trigger(this._element, EVENT_CLOSED);\n    this.dispose();\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config](this);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$e;\n  }\n\n  // Public\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n  endCallback: null,\n  leftCallback: null,\n  rightCallback: null\n};\nconst DefaultType$c = {\n  endCallback: '(function|null)',\n  leftCallback: '(function|null)',\n  rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n  constructor(element, config) {\n    super();\n    this._element = element;\n    if (!element || !Swipe.isSupported()) {\n      return;\n    }\n    this._config = this._getConfig(config);\n    this._deltaX = 0;\n    this._supportPointerEvents = Boolean(window.PointerEvent);\n    this._initEvents();\n  }\n\n  // Getters\n  static get Default() {\n    return Default$c;\n  }\n  static get DefaultType() {\n    return DefaultType$c;\n  }\n  static get NAME() {\n    return NAME$d;\n  }\n\n  // Public\n  dispose() {\n    EventHandler.off(this._element, EVENT_KEY$9);\n  }\n\n  // Private\n  _start(event) {\n    if (!this._supportPointerEvents) {\n      this._deltaX = event.touches[0].clientX;\n      return;\n    }\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX;\n    }\n  }\n  _end(event) {\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX - this._deltaX;\n    }\n    this._handleSwipe();\n    execute(this._config.endCallback);\n  }\n  _move(event) {\n    this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n  }\n  _handleSwipe() {\n    const absDeltaX = Math.abs(this._deltaX);\n    if (absDeltaX <= SWIPE_THRESHOLD) {\n      return;\n    }\n    const direction = absDeltaX / this._deltaX;\n    this._deltaX = 0;\n    if (!direction) {\n      return;\n    }\n    execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n  }\n  _initEvents() {\n    if (this._supportPointerEvents) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n    }\n  }\n  _eventIsPointerPenTouch(event) {\n    return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n  }\n\n  // Static\n  static isSupported() {\n    return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n  interval: 5000,\n  keyboard: true,\n  pause: 'hover',\n  ride: false,\n  touch: true,\n  wrap: true\n};\nconst DefaultType$b = {\n  interval: '(number|boolean)',\n  // TODO:v6 remove boolean support\n  keyboard: 'boolean',\n  pause: '(string|boolean)',\n  ride: '(boolean|string)',\n  touch: 'boolean',\n  wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n    this._interval = null;\n    this._activeElement = null;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this._swipeHelper = null;\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._addEventListeners();\n    if (this._config.ride === CLASS_NAME_CAROUSEL) {\n      this.cycle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default$b;\n  }\n  static get DefaultType() {\n    return DefaultType$b;\n  }\n  static get NAME() {\n    return NAME$c;\n  }\n\n  // Public\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n  nextWhenVisible() {\n    // FIXME TODO use `document.visibilityState`\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n  pause() {\n    if (this._isSliding) {\n      triggerTransitionEnd(this._element);\n    }\n    this._clearInterval();\n  }\n  cycle() {\n    this._clearInterval();\n    this._updateInterval();\n    this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n  }\n  _maybeEnableCycle() {\n    if (!this._config.ride) {\n      return;\n    }\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n      return;\n    }\n    this.cycle();\n  }\n  to(index) {\n    const items = this._getItems();\n    if (index > items.length - 1 || index < 0) {\n      return;\n    }\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n    const activeIndex = this._getItemIndex(this._getActive());\n    if (activeIndex === index) {\n      return;\n    }\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n    this._slide(order, items[index]);\n  }\n  dispose() {\n    if (this._swipeHelper) {\n      this._swipeHelper.dispose();\n    }\n    super.dispose();\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.defaultInterval = config.interval;\n    return config;\n  }\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n    }\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n      EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n    }\n    if (this._config.touch && Swipe.isSupported()) {\n      this._addTouchEventListeners();\n    }\n  }\n  _addTouchEventListeners() {\n    for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n      EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n    }\n    const endCallBack = () => {\n      if (this._config.pause !== 'hover') {\n        return;\n      }\n\n      // If it's a touch-enabled device, mouseenter/leave are fired as\n      // part of the mouse compatibility events on first tap - the carousel\n      // would stop cycling until user tapped out of it;\n      // here, we listen for touchend, explicitly pause the carousel\n      // (as if it's the second time we tap on it, mouseenter compat event\n      // is NOT fired) and after a timeout (to allow for mouse compatibility\n      // events to fire) we explicitly restart cycling\n\n      this.pause();\n      if (this.touchTimeout) {\n        clearTimeout(this.touchTimeout);\n      }\n      this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n    };\n    const swipeConfig = {\n      leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n      rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n      endCallback: endCallBack\n    };\n    this._swipeHelper = new Swipe(this._element, swipeConfig);\n  }\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n    const direction = KEY_TO_DIRECTION[event.key];\n    if (direction) {\n      event.preventDefault();\n      this._slide(this._directionToOrder(direction));\n    }\n  }\n  _getItemIndex(element) {\n    return this._getItems().indexOf(element);\n  }\n  _setActiveIndicatorElement(index) {\n    if (!this._indicatorsElement) {\n      return;\n    }\n    const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n    activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n    activeIndicator.removeAttribute('aria-current');\n    const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n    if (newActiveIndicator) {\n      newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n      newActiveIndicator.setAttribute('aria-current', 'true');\n    }\n  }\n  _updateInterval() {\n    const element = this._activeElement || this._getActive();\n    if (!element) {\n      return;\n    }\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n    this._config.interval = elementInterval || this._config.defaultInterval;\n  }\n  _slide(order, element = null) {\n    if (this._isSliding) {\n      return;\n    }\n    const activeElement = this._getActive();\n    const isNext = order === ORDER_NEXT;\n    const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n    if (nextElement === activeElement) {\n      return;\n    }\n    const nextElementIndex = this._getItemIndex(nextElement);\n    const triggerEvent = eventName => {\n      return EventHandler.trigger(this._element, eventName, {\n        relatedTarget: nextElement,\n        direction: this._orderToDirection(order),\n        from: this._getItemIndex(activeElement),\n        to: nextElementIndex\n      });\n    };\n    const slideEvent = triggerEvent(EVENT_SLIDE);\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      // TODO: change tests that use empty divs to avoid this check\n      return;\n    }\n    const isCycling = Boolean(this._interval);\n    this.pause();\n    this._isSliding = true;\n    this._setActiveIndicatorElement(nextElementIndex);\n    this._activeElement = nextElement;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n    nextElement.classList.add(orderClassName);\n    reflow(nextElement);\n    activeElement.classList.add(directionalClassName);\n    nextElement.classList.add(directionalClassName);\n    const completeCallBack = () => {\n      nextElement.classList.remove(directionalClassName, orderClassName);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n      this._isSliding = false;\n      triggerEvent(EVENT_SLID);\n    };\n    this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_SLIDE);\n  }\n  _getActive() {\n    return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n  }\n  _getItems() {\n    return SelectorEngine.find(SELECTOR_ITEM, this._element);\n  }\n  _clearInterval() {\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n  }\n  _directionToOrder(direction) {\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n  _orderToDirection(order) {\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Carousel.getOrCreateInstance(this, config);\n      if (typeof config === 'number') {\n        data.to(config);\n        return;\n      }\n      if (typeof config === 'string') {\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this);\n  if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n    return;\n  }\n  event.preventDefault();\n  const carousel = Carousel.getOrCreateInstance(target);\n  const slideIndex = this.getAttribute('data-bs-slide-to');\n  if (slideIndex) {\n    carousel.to(slideIndex);\n    carousel._maybeEnableCycle();\n    return;\n  }\n  if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n    carousel.next();\n    carousel._maybeEnableCycle();\n    return;\n  }\n  carousel.prev();\n  carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n  for (const carousel of carousels) {\n    Carousel.getOrCreateInstance(carousel);\n  }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n  parent: null,\n  toggle: true\n};\nconst DefaultType$a = {\n  parent: '(null|element)',\n  toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n    this._isTransitioning = false;\n    this._triggerArray = [];\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n    for (const elem of toggleList) {\n      const selector = SelectorEngine.getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n      if (selector !== null && filterElement.length) {\n        this._triggerArray.push(elem);\n      }\n    }\n    this._initializeChildren();\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n    }\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default$a;\n  }\n  static get DefaultType() {\n    return DefaultType$a;\n  }\n  static get NAME() {\n    return NAME$b;\n  }\n\n  // Public\n  toggle() {\n    if (this._isShown()) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return;\n    }\n    let activeChildren = [];\n\n    // find active children\n    if (this._config.parent) {\n      activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n        toggle: false\n      }));\n    }\n    if (activeChildren.length && activeChildren[0]._isTransitioning) {\n      return;\n    }\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n    for (const activeInstance of activeChildren) {\n      activeInstance.hide();\n    }\n    const dimension = this._getDimension();\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n    this._element.style[dimension] = 0;\n    this._addAriaAndCollapsedClass(this._triggerArray, true);\n    this._isTransitioning = true;\n    const complete = () => {\n      this._isTransitioning = false;\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n      this._element.style[dimension] = '';\n      EventHandler.trigger(this._element, EVENT_SHOWN$6);\n    };\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n    this._queueCallback(complete, this._element, true);\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return;\n    }\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n    const dimension = this._getDimension();\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n    for (const trigger of this._triggerArray) {\n      const element = SelectorEngine.getElementFromSelector(trigger);\n      if (element && !this._isShown(element)) {\n        this._addAriaAndCollapsedClass([trigger], false);\n      }\n    }\n    this._isTransitioning = true;\n    const complete = () => {\n      this._isTransitioning = false;\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n      EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n    };\n    this._element.style[dimension] = '';\n    this._queueCallback(complete, this._element, true);\n  }\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW$7);\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.toggle = Boolean(config.toggle); // Coerce string values\n    config.parent = getElement(config.parent);\n    return config;\n  }\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n  }\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return;\n    }\n    const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n    for (const element of children) {\n      const selected = SelectorEngine.getElementFromSelector(element);\n      if (selected) {\n        this._addAriaAndCollapsedClass([element], this._isShown(selected));\n      }\n    }\n  }\n  _getFirstLevelChildren(selector) {\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n    // remove children if greater depth\n    return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n  }\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return;\n    }\n    for (const element of triggerArray) {\n      element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n      element.setAttribute('aria-expanded', isOpen);\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    const _config = {};\n    if (typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n    return this.each(function () {\n      const data = Collapse.getOrCreateInstance(this, _config);\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n  for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n    Collapse.getOrCreateInstance(element, {\n      toggle: false\n    }).toggle();\n  }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n  autoClose: true,\n  boundary: 'clippingParents',\n  display: 'dynamic',\n  offset: [0, 2],\n  popperConfig: null,\n  reference: 'toggle'\n};\nconst DefaultType$9 = {\n  autoClose: '(boolean|string)',\n  boundary: '(string|element)',\n  display: 'string',\n  offset: '(array|string|function)',\n  popperConfig: '(null|object|function)',\n  reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n    this._popper = null;\n    this._parent = this._element.parentNode; // dropdown wrapper\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n    this._inNavbar = this._detectNavbar();\n  }\n\n  // Getters\n  static get Default() {\n    return Default$9;\n  }\n  static get DefaultType() {\n    return DefaultType$9;\n  }\n  static get NAME() {\n    return NAME$a;\n  }\n\n  // Public\n  toggle() {\n    return this._isShown() ? this.hide() : this.show();\n  }\n  show() {\n    if (isDisabled(this._element) || this._isShown()) {\n      return;\n    }\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n    this._createPopper();\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop);\n      }\n    }\n    this._element.focus();\n    this._element.setAttribute('aria-expanded', true);\n    this._menu.classList.add(CLASS_NAME_SHOW$6);\n    this._element.classList.add(CLASS_NAME_SHOW$6);\n    EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n  }\n  hide() {\n    if (isDisabled(this._element) || !this._isShown()) {\n      return;\n    }\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    this._completeHide(relatedTarget);\n  }\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n    super.dispose();\n  }\n  update() {\n    this._inNavbar = this._detectNavbar();\n    if (this._popper) {\n      this._popper.update();\n    }\n  }\n\n  // Private\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop);\n      }\n    }\n    if (this._popper) {\n      this._popper.destroy();\n    }\n    this._menu.classList.remove(CLASS_NAME_SHOW$6);\n    this._element.classList.remove(CLASS_NAME_SHOW$6);\n    this._element.setAttribute('aria-expanded', 'false');\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n  }\n  _getConfig(config) {\n    config = super._getConfig(config);\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n    return config;\n  }\n  _createPopper() {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n    }\n    let referenceElement = this._element;\n    if (this._config.reference === 'parent') {\n      referenceElement = this._parent;\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference);\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference;\n    }\n    const popperConfig = this._getPopperConfig();\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n  }\n  _isShown() {\n    return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n  }\n  _getPlacement() {\n    const parentDropdown = this._parent;\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    }\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n      return PLACEMENT_TOPCENTER;\n    }\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n      return PLACEMENT_BOTTOMCENTER;\n    }\n\n    // We need to trim the value because custom properties can also include spaces\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n  _detectNavbar() {\n    return this._element.closest(SELECTOR_NAVBAR) !== null;\n  }\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10));\n    }\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n    return offset;\n  }\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    };\n\n    // Disable Popper if we have a static display or Dropdown is in Navbar\n    if (this._inNavbar || this._config.display === 'static') {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n    };\n  }\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n    if (!items.length) {\n      return;\n    }\n\n    // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config]();\n    });\n  }\n  static clearMenus(event) {\n    if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n      return;\n    }\n    const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n    for (const toggle of openToggles) {\n      const context = Dropdown.getInstance(toggle);\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n      const composedPath = event.composedPath();\n      const isMenuTarget = composedPath.includes(context._menu);\n      if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n        continue;\n      }\n\n      // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n      if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n        continue;\n      }\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n      if (event.type === 'click') {\n        relatedTarget.clickEvent = event;\n      }\n      context._completeHide(relatedTarget);\n    }\n  }\n  static dataApiKeydownHandler(event) {\n    // If not an UP | DOWN | ESCAPE key => not a dropdown command\n    // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n    const isInput = /input|textarea/i.test(event.target.tagName);\n    const isEscapeEvent = event.key === ESCAPE_KEY$2;\n    const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n    if (!isUpOrDownEvent && !isEscapeEvent) {\n      return;\n    }\n    if (isInput && !isEscapeEvent) {\n      return;\n    }\n    event.preventDefault();\n\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n    const instance = Dropdown.getOrCreateInstance(getToggleButton);\n    if (isUpOrDownEvent) {\n      event.stopPropagation();\n      instance.show();\n      instance._selectMenuItem(event);\n      return;\n    }\n    if (instance._isShown()) {\n      // else is escape and we check if it is shown\n      event.stopPropagation();\n      instance.hide();\n      getToggleButton.focus();\n    }\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n  className: 'modal-backdrop',\n  clickCallback: null,\n  isAnimated: false,\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  rootElement: 'body' // give the choice to place backdrop under different elements\n};\n\nconst DefaultType$8 = {\n  className: 'string',\n  clickCallback: '(function|null)',\n  isAnimated: 'boolean',\n  isVisible: 'boolean',\n  rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  // Getters\n  static get Default() {\n    return Default$8;\n  }\n  static get DefaultType() {\n    return DefaultType$8;\n  }\n  static get NAME() {\n    return NAME$9;\n  }\n\n  // Public\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n    this._append();\n    const element = this._getElement();\n    if (this._config.isAnimated) {\n      reflow(element);\n    }\n    element.classList.add(CLASS_NAME_SHOW$5);\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n    this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  }\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n    this._element.remove();\n    this._isAppended = false;\n  }\n\n  // Private\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = this._config.className;\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$4);\n      }\n      this._element = backdrop;\n    }\n    return this._element;\n  }\n  _configAfterMerge(config) {\n    // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n    config.rootElement = getElement(config.rootElement);\n    return config;\n  }\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n    const element = this._getElement();\n    this._config.rootElement.append(element);\n    EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n  autofocus: true,\n  trapElement: null // The element to trap focus inside of\n};\n\nconst DefaultType$7 = {\n  autofocus: 'boolean',\n  trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n    this._isActive = false;\n    this._lastTabNavDirection = null;\n  }\n\n  // Getters\n  static get Default() {\n    return Default$7;\n  }\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n  static get NAME() {\n    return NAME$8;\n  }\n\n  // Public\n  activate() {\n    if (this._isActive) {\n      return;\n    }\n    if (this._config.autofocus) {\n      this._config.trapElement.focus();\n    }\n    EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n    this._isActive = true;\n  }\n  deactivate() {\n    if (!this._isActive) {\n      return;\n    }\n    this._isActive = false;\n    EventHandler.off(document, EVENT_KEY$5);\n  }\n\n  // Private\n  _handleFocusin(event) {\n    const {\n      trapElement\n    } = this._config;\n    if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n      return;\n    }\n    const elements = SelectorEngine.focusableChildren(trapElement);\n    if (elements.length === 0) {\n      trapElement.focus();\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus();\n    } else {\n      elements[0].focus();\n    }\n  }\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return;\n    }\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  // Public\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n  hide() {\n    const width = this.getWidth();\n    this._disableOverFlow();\n    // give padding to element to balance the hidden scrollbar width\n    this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n  }\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n    this._resetElementAttributes(this._element, PROPERTY_PADDING);\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n  }\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n  // Private\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n    this._element.style.overflow = 'hidden';\n  }\n  _setElementAttributes(selector, styleProperty, callback) {\n    const scrollbarWidth = this.getWidth();\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n      this._saveInitialAttribute(element, styleProperty);\n      const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n      element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n    };\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n  _saveInitialAttribute(element, styleProperty) {\n    const actualValue = element.style.getPropertyValue(styleProperty);\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProperty, actualValue);\n    }\n  }\n  _resetElementAttributes(selector, styleProperty) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProperty);\n      // We only want to remove the property if the value is `null`; the value can also be zero\n      if (value === null) {\n        element.style.removeProperty(styleProperty);\n        return;\n      }\n      Manipulator.removeDataAttribute(element, styleProperty);\n      element.style.setProperty(styleProperty, value);\n    };\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n      return;\n    }\n    for (const sel of SelectorEngine.find(selector, this._element)) {\n      callBack(sel);\n    }\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n  backdrop: true,\n  focus: true,\n  keyboard: true\n};\nconst DefaultType$6 = {\n  backdrop: '(boolean|string)',\n  focus: 'boolean',\n  keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._focustrap = this._initializeFocusTrap();\n    this._isShown = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n    this._addEventListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default$6;\n  }\n  static get DefaultType() {\n    return DefaultType$6;\n  }\n  static get NAME() {\n    return NAME$7;\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n      relatedTarget\n    });\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n    this._isShown = true;\n    this._isTransitioning = true;\n    this._scrollBar.hide();\n    document.body.classList.add(CLASS_NAME_OPEN);\n    this._adjustDialog();\n    this._backdrop.show(() => this._showElement(relatedTarget));\n  }\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n    this._isShown = false;\n    this._isTransitioning = true;\n    this._focustrap.deactivate();\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n    this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n  }\n  dispose() {\n    EventHandler.off(window, EVENT_KEY$4);\n    EventHandler.off(this._dialog, EVENT_KEY$4);\n    this._backdrop.dispose();\n    this._focustrap.deactivate();\n    super.dispose();\n  }\n  handleUpdate() {\n    this._adjustDialog();\n  }\n\n  // Private\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value,\n      isAnimated: this._isAnimated()\n    });\n  }\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    });\n  }\n  _showElement(relatedTarget) {\n    // try to append dynamic modal\n    if (!document.body.contains(this._element)) {\n      document.body.append(this._element);\n    }\n    this._element.style.display = 'block';\n    this._element.removeAttribute('aria-hidden');\n    this._element.setAttribute('aria-modal', true);\n    this._element.setAttribute('role', 'dialog');\n    this._element.scrollTop = 0;\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n    reflow(this._element);\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate();\n      }\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n        relatedTarget\n      });\n    };\n    this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n  }\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n      if (event.key !== ESCAPE_KEY$1) {\n        return;\n      }\n      if (this._config.keyboard) {\n        this.hide();\n        return;\n      }\n      this._triggerBackdropTransition();\n    });\n    EventHandler.on(window, EVENT_RESIZE$1, () => {\n      if (this._isShown && !this._isTransitioning) {\n        this._adjustDialog();\n      }\n    });\n    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n      // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n      EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n        if (this._element !== event.target || this._element !== event2.target) {\n          return;\n        }\n        if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n          return;\n        }\n        if (this._config.backdrop) {\n          this.hide();\n        }\n      });\n    });\n  }\n  _hideModal() {\n    this._element.style.display = 'none';\n    this._element.setAttribute('aria-hidden', true);\n    this._element.removeAttribute('aria-modal');\n    this._element.removeAttribute('role');\n    this._isTransitioning = false;\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n      this._resetAdjustments();\n      this._scrollBar.reset();\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n    });\n  }\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$3);\n  }\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n    const initialOverflowY = this._element.style.overflowY;\n    // return if the following background transition hasn't yet completed\n    if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n    if (!isModalOverflowing) {\n      this._element.style.overflowY = 'hidden';\n    }\n    this._element.classList.add(CLASS_NAME_STATIC);\n    this._queueCallback(() => {\n      this._element.classList.remove(CLASS_NAME_STATIC);\n      this._queueCallback(() => {\n        this._element.style.overflowY = initialOverflowY;\n      }, this._dialog);\n    }, this._dialog);\n    this._element.focus();\n  }\n\n  /**\n   * The following methods are used to handle overflowing modals\n   */\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n    const scrollbarWidth = this._scrollBar.getWidth();\n    const isBodyOverflowing = scrollbarWidth > 0;\n    if (isBodyOverflowing && !isModalOverflowing) {\n      const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n      this._element.style[property] = `${scrollbarWidth}px`;\n    }\n    if (!isBodyOverflowing && isModalOverflowing) {\n      const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n      this._element.style[property] = `${scrollbarWidth}px`;\n    }\n  }\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  }\n\n  // Static\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config](relatedTarget);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this);\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n  EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n    EventHandler.one(target, EVENT_HIDDEN$4, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n\n  // avoid conflict when clicking modal toggler while another one is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n  if (alreadyOpen) {\n    Modal.getInstance(alreadyOpen).hide();\n  }\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n    this._focustrap = this._initializeFocusTrap();\n    this._addEventListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default$5;\n  }\n  static get DefaultType() {\n    return DefaultType$5;\n  }\n  static get NAME() {\n    return NAME$6;\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n    this._isShown = true;\n    this._backdrop.show();\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n    }\n    this._element.setAttribute('aria-modal', true);\n    this._element.setAttribute('role', 'dialog');\n    this._element.classList.add(CLASS_NAME_SHOWING$1);\n    const completeCallBack = () => {\n      if (!this._config.scroll || this._config.backdrop) {\n        this._focustrap.activate();\n      }\n      this._element.classList.add(CLASS_NAME_SHOW$3);\n      this._element.classList.remove(CLASS_NAME_SHOWING$1);\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n    this._focustrap.deactivate();\n    this._element.blur();\n    this._isShown = false;\n    this._element.classList.add(CLASS_NAME_HIDING);\n    this._backdrop.hide();\n    const completeCallback = () => {\n      this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n      this._element.removeAttribute('aria-modal');\n      this._element.removeAttribute('role');\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    };\n    this._queueCallback(completeCallback, this._element, true);\n  }\n  dispose() {\n    this._backdrop.dispose();\n    this._focustrap.deactivate();\n    super.dispose();\n  }\n\n  // Private\n  _initializeBackDrop() {\n    const clickCallback = () => {\n      if (this._config.backdrop === 'static') {\n        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n        return;\n      }\n      this.hide();\n    };\n\n    // 'static' option will be translated to true, and booleans will keep their value\n    const isVisible = Boolean(this._config.backdrop);\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: isVisible ? clickCallback : null\n    });\n  }\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    });\n  }\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return;\n      }\n      if (this._config.keyboard) {\n        this.hide();\n        return;\n      }\n      EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n    });\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config](this);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this);\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n  if (isDisabled(this)) {\n    return;\n  }\n  EventHandler.one(target, EVENT_HIDDEN$3, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  });\n\n  // avoid conflict when clicking a toggler of an offcanvas, while another is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n  if (alreadyOpen && alreadyOpen !== target) {\n    Offcanvas.getInstance(alreadyOpen).hide();\n  }\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n    Offcanvas.getOrCreateInstance(selector).show();\n  }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n  for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n    if (getComputedStyle(element).position !== 'fixed') {\n      Offcanvas.getOrCreateInstance(element).hide();\n    }\n  }\n});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase();\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n    }\n    return true;\n  }\n\n  // Check if a regular expression validates the attribute.\n  return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n    return sanitizeFunction(unsafeHtml);\n  }\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n  for (const element of elements) {\n    const elementName = element.nodeName.toLowerCase();\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove();\n      continue;\n    }\n    const attributeList = [].concat(...element.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n    for (const attribute of attributeList) {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName);\n      }\n    }\n  }\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n  allowList: DefaultAllowlist,\n  content: {},\n  // { selector : text ,  selector2 : text2 , }\n  extraClass: '',\n  html: false,\n  sanitize: true,\n  sanitizeFn: null,\n  template: '<div></div>'\n};\nconst DefaultType$4 = {\n  allowList: 'object',\n  content: 'object',\n  extraClass: '(string|function)',\n  html: 'boolean',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  template: 'string'\n};\nconst DefaultContentType = {\n  entry: '(string|element|function|null)',\n  selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n  }\n\n  // Getters\n  static get Default() {\n    return Default$4;\n  }\n  static get DefaultType() {\n    return DefaultType$4;\n  }\n  static get NAME() {\n    return NAME$5;\n  }\n\n  // Public\n  getContent() {\n    return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n  }\n  hasContent() {\n    return this.getContent().length > 0;\n  }\n  changeContent(content) {\n    this._checkContent(content);\n    this._config.content = {\n      ...this._config.content,\n      ...content\n    };\n    return this;\n  }\n  toHtml() {\n    const templateWrapper = document.createElement('div');\n    templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n    for (const [selector, text] of Object.entries(this._config.content)) {\n      this._setContent(templateWrapper, text, selector);\n    }\n    const template = templateWrapper.children[0];\n    const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n    if (extraClass) {\n      template.classList.add(...extraClass.split(' '));\n    }\n    return template;\n  }\n\n  // Private\n  _typeCheckConfig(config) {\n    super._typeCheckConfig(config);\n    this._checkContent(config.content);\n  }\n  _checkContent(arg) {\n    for (const [selector, content] of Object.entries(arg)) {\n      super._typeCheckConfig({\n        selector,\n        entry: content\n      }, DefaultContentType);\n    }\n  }\n  _setContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template);\n    if (!templateElement) {\n      return;\n    }\n    content = this._resolvePossibleFunction(content);\n    if (!content) {\n      templateElement.remove();\n      return;\n    }\n    if (isElement(content)) {\n      this._putElementInTemplate(getElement(content), templateElement);\n      return;\n    }\n    if (this._config.html) {\n      templateElement.innerHTML = this._maybeSanitize(content);\n      return;\n    }\n    templateElement.textContent = content;\n  }\n  _maybeSanitize(arg) {\n    return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n  }\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this]);\n  }\n  _putElementInTemplate(element, templateElement) {\n    if (this._config.html) {\n      templateElement.innerHTML = '';\n      templateElement.append(element);\n      return;\n    }\n    templateElement.textContent = element.textContent;\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  allowList: DefaultAllowlist,\n  animation: true,\n  boundary: 'clippingParents',\n  container: false,\n  customClass: '',\n  delay: 0,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  html: false,\n  offset: [0, 6],\n  placement: 'top',\n  popperConfig: null,\n  sanitize: true,\n  sanitizeFn: null,\n  selector: false,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  title: '',\n  trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n  allowList: 'object',\n  animation: 'boolean',\n  boundary: '(string|element)',\n  container: '(string|element|boolean)',\n  customClass: '(string|function)',\n  delay: '(number|object)',\n  fallbackPlacements: 'array',\n  html: 'boolean',\n  offset: '(array|string|function)',\n  placement: '(string|function)',\n  popperConfig: '(null|object|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  selector: '(string|boolean)',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n    super(element, config);\n\n    // Private\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._isHovered = null;\n    this._activeTrigger = {};\n    this._popper = null;\n    this._templateFactory = null;\n    this._newContent = null;\n\n    // Protected\n    this.tip = null;\n    this._setListeners();\n    if (!this._config.selector) {\n      this._fixTitle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default$3;\n  }\n  static get DefaultType() {\n    return DefaultType$3;\n  }\n  static get NAME() {\n    return NAME$4;\n  }\n\n  // Public\n  enable() {\n    this._isEnabled = true;\n  }\n  disable() {\n    this._isEnabled = false;\n  }\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n  toggle() {\n    if (!this._isEnabled) {\n      return;\n    }\n    this._activeTrigger.click = !this._activeTrigger.click;\n    if (this._isShown()) {\n      this._leave();\n      return;\n    }\n    this._enter();\n  }\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n    if (this._element.getAttribute('data-bs-original-title')) {\n      this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n    }\n    this._disposePopper();\n    super.dispose();\n  }\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n    if (!(this._isWithContent() && this._isEnabled)) {\n      return;\n    }\n    const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    // TODO: v6 remove this or make it optional\n    this._disposePopper();\n    const tip = this._getTipElement();\n    this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n    const {\n      container\n    } = this._config;\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip);\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n    }\n    this._popper = this._createPopper(tip);\n    tip.classList.add(CLASS_NAME_SHOW$2);\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop);\n      }\n    }\n    const complete = () => {\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n      if (this._isHovered === false) {\n        this._leave();\n      }\n      this._isHovered = false;\n    };\n    this._queueCallback(complete, this.tip, this._isAnimated());\n  }\n  hide() {\n    if (!this._isShown()) {\n      return;\n    }\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n    const tip = this._getTipElement();\n    tip.classList.remove(CLASS_NAME_SHOW$2);\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop);\n      }\n    }\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    this._isHovered = null; // it is a trick to support manual triggering\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n      if (!this._isHovered) {\n        this._disposePopper();\n      }\n      this._element.removeAttribute('aria-describedby');\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n    };\n    this._queueCallback(complete, this.tip, this._isAnimated());\n  }\n  update() {\n    if (this._popper) {\n      this._popper.update();\n    }\n  }\n\n  // Protected\n  _isWithContent() {\n    return Boolean(this._getTitle());\n  }\n  _getTipElement() {\n    if (!this.tip) {\n      this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n    }\n    return this.tip;\n  }\n  _createTipElement(content) {\n    const tip = this._getTemplateFactory(content).toHtml();\n\n    // TODO: remove this check in v6\n    if (!tip) {\n      return null;\n    }\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    // TODO: v6 the following can be achieved with CSS only\n    tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n    const tipId = getUID(this.constructor.NAME).toString();\n    tip.setAttribute('id', tipId);\n    if (this._isAnimated()) {\n      tip.classList.add(CLASS_NAME_FADE$2);\n    }\n    return tip;\n  }\n  setContent(content) {\n    this._newContent = content;\n    if (this._isShown()) {\n      this._disposePopper();\n      this.show();\n    }\n  }\n  _getTemplateFactory(content) {\n    if (this._templateFactory) {\n      this._templateFactory.changeContent(content);\n    } else {\n      this._templateFactory = new TemplateFactory({\n        ...this._config,\n        // the `content` var has to be after `this._config`\n        // to override config.content in case of popover\n        content,\n        extraClass: this._resolvePossibleFunction(this._config.customClass)\n      });\n    }\n    return this._templateFactory;\n  }\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n    };\n  }\n  _getTitle() {\n    return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n  }\n\n  // Private\n  _initializeOnDelegatedTarget(event) {\n    return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n  }\n  _isAnimated() {\n    return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n  }\n  _isShown() {\n    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n  }\n  _createPopper(tip) {\n    const placement = execute(this._config.placement, [this, tip, this._element]);\n    const attachment = AttachmentMap[placement.toUpperCase()];\n    return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n  }\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10));\n    }\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n    return offset;\n  }\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this._element]);\n  }\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'preSetPlacement',\n        enabled: true,\n        phase: 'beforeMain',\n        fn: data => {\n          // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n          // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n          this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n        }\n      }]\n    };\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n    };\n  }\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n    for (const trigger of triggers) {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event);\n          context.toggle();\n        });\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n        EventHandler.on(this._element, eventIn, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event);\n          context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n          context._enter();\n        });\n        EventHandler.on(this._element, eventOut, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event);\n          context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n          context._leave();\n        });\n      }\n    }\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n  }\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n    if (!title) {\n      return;\n    }\n    if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n      this._element.setAttribute('aria-label', title);\n    }\n    this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n    this._element.removeAttribute('title');\n  }\n  _enter() {\n    if (this._isShown() || this._isHovered) {\n      this._isHovered = true;\n      return;\n    }\n    this._isHovered = true;\n    this._setTimeout(() => {\n      if (this._isHovered) {\n        this.show();\n      }\n    }, this._config.delay.show);\n  }\n  _leave() {\n    if (this._isWithActiveTrigger()) {\n      return;\n    }\n    this._isHovered = false;\n    this._setTimeout(() => {\n      if (!this._isHovered) {\n        this.hide();\n      }\n    }, this._config.delay.hide);\n  }\n  _setTimeout(handler, timeout) {\n    clearTimeout(this._timeout);\n    this._timeout = setTimeout(handler, timeout);\n  }\n  _isWithActiveTrigger() {\n    return Object.values(this._activeTrigger).includes(true);\n  }\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    for (const dataAttribute of Object.keys(dataAttributes)) {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n        delete dataAttributes[dataAttribute];\n      }\n    }\n    config = {\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config = this._mergeConfigObj(config);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n  _configAfterMerge(config) {\n    config.container = config.container === false ? document.body : getElement(config.container);\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n    return config;\n  }\n  _getDelegateConfig() {\n    const config = {};\n    for (const [key, value] of Object.entries(this._config)) {\n      if (this.constructor.Default[key] !== value) {\n        config[key] = value;\n      }\n    }\n    config.selector = false;\n    config.trigger = 'manual';\n\n    // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n    return config;\n  }\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy();\n      this._popper = null;\n    }\n    if (this.tip) {\n      this.tip.remove();\n      this.tip = null;\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config]();\n    });\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n  ...Tooltip.Default,\n  content: '',\n  offset: [0, 8],\n  placement: 'right',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>',\n  trigger: 'click'\n};\nconst DefaultType$2 = {\n  ...Tooltip.DefaultType,\n  content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n  static get DefaultType() {\n    return DefaultType$2;\n  }\n  static get NAME() {\n    return NAME$3;\n  }\n\n  // Overrides\n  _isWithContent() {\n    return this._getTitle() || this._getContent();\n  }\n\n  // Private\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TITLE]: this._getTitle(),\n      [SELECTOR_CONTENT]: this._getContent()\n    };\n  }\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content);\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config]();\n    });\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n  offset: null,\n  // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: '0px 0px -25%',\n  smoothScroll: false,\n  target: null,\n  threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n  offset: '(number|null)',\n  // TODO v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: 'string',\n  smoothScroll: 'boolean',\n  target: 'element',\n  threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    // this._element is the observablesContainer and config.target the menu links wrapper\n    this._targetLinks = new Map();\n    this._observableSections = new Map();\n    this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n    this._activeTarget = null;\n    this._observer = null;\n    this._previousScrollData = {\n      visibleEntryTop: 0,\n      parentScrollTop: 0\n    };\n    this.refresh(); // initialize\n  }\n\n  // Getters\n  static get Default() {\n    return Default$1;\n  }\n  static get DefaultType() {\n    return DefaultType$1;\n  }\n  static get NAME() {\n    return NAME$2;\n  }\n\n  // Public\n  refresh() {\n    this._initializeTargetsAndObservables();\n    this._maybeEnableSmoothScroll();\n    if (this._observer) {\n      this._observer.disconnect();\n    } else {\n      this._observer = this._getNewObserver();\n    }\n    for (const section of this._observableSections.values()) {\n      this._observer.observe(section);\n    }\n  }\n  dispose() {\n    this._observer.disconnect();\n    super.dispose();\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n    config.target = getElement(config.target) || document.body;\n\n    // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n    config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n    if (typeof config.threshold === 'string') {\n      config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n    }\n    return config;\n  }\n  _maybeEnableSmoothScroll() {\n    if (!this._config.smoothScroll) {\n      return;\n    }\n\n    // unregister any previous listeners\n    EventHandler.off(this._config.target, EVENT_CLICK);\n    EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n      const observableSection = this._observableSections.get(event.target.hash);\n      if (observableSection) {\n        event.preventDefault();\n        const root = this._rootElement || window;\n        const height = observableSection.offsetTop - this._element.offsetTop;\n        if (root.scrollTo) {\n          root.scrollTo({\n            top: height,\n            behavior: 'smooth'\n          });\n          return;\n        }\n\n        // Chrome 60 doesn't support `scrollTo`\n        root.scrollTop = height;\n      }\n    });\n  }\n  _getNewObserver() {\n    const options = {\n      root: this._rootElement,\n      threshold: this._config.threshold,\n      rootMargin: this._config.rootMargin\n    };\n    return new IntersectionObserver(entries => this._observerCallback(entries), options);\n  }\n\n  // The logic of selection\n  _observerCallback(entries) {\n    const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n    const activate = entry => {\n      this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n      this._process(targetElement(entry));\n    };\n    const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n    const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n    this._previousScrollData.parentScrollTop = parentScrollTop;\n    for (const entry of entries) {\n      if (!entry.isIntersecting) {\n        this._activeTarget = null;\n        this._clearActiveClass(targetElement(entry));\n        continue;\n      }\n      const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n      // if we are scrolling down, pick the bigger offsetTop\n      if (userScrollsDown && entryIsLowerThanPrevious) {\n        activate(entry);\n        // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n        if (!parentScrollTop) {\n          return;\n        }\n        continue;\n      }\n\n      // if we are scrolling up, pick the smallest offsetTop\n      if (!userScrollsDown && !entryIsLowerThanPrevious) {\n        activate(entry);\n      }\n    }\n  }\n  _initializeTargetsAndObservables() {\n    this._targetLinks = new Map();\n    this._observableSections = new Map();\n    const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n    for (const anchor of targetLinks) {\n      // ensure that the anchor has an id and is not disabled\n      if (!anchor.hash || isDisabled(anchor)) {\n        continue;\n      }\n      const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n      // ensure that the observableSection exists & is visible\n      if (isVisible(observableSection)) {\n        this._targetLinks.set(decodeURI(anchor.hash), anchor);\n        this._observableSections.set(anchor.hash, observableSection);\n      }\n    }\n  }\n  _process(target) {\n    if (this._activeTarget === target) {\n      return;\n    }\n    this._clearActiveClass(this._config.target);\n    this._activeTarget = target;\n    target.classList.add(CLASS_NAME_ACTIVE$1);\n    this._activateParents(target);\n    EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n  _activateParents(target) {\n    // Activate dropdown parents\n    if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n      return;\n    }\n    for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n      // Set triggered links parents as active\n      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n      for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n        item.classList.add(CLASS_NAME_ACTIVE$1);\n      }\n    }\n  }\n  _clearActiveClass(parent) {\n    parent.classList.remove(CLASS_NAME_ACTIVE$1);\n    const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);\n    for (const node of activeNodes) {\n      node.classList.remove(CLASS_NAME_ACTIVE$1);\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config]();\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {\n  for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n    ScrollSpy.getOrCreateInstance(spy);\n  }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst HOME_KEY = 'Home';\nconst END_KEY = 'End';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst CLASS_DROPDOWN = 'dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\nconst SELECTOR_OUTER = '.nav-item, .list-group-item';\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n  constructor(element) {\n    super(element);\n    this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n    if (!this._parent) {\n      return;\n      // TODO: should throw exception in v6\n      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n    }\n\n    // Set up initial aria attributes\n    this._setInitialAttributes(this._parent, this._getChildren());\n    EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  }\n\n  // Public\n  show() {\n    // Shows this elem and deactivate the active sibling if exists\n    const innerElem = this._element;\n    if (this._elemIsActive(innerElem)) {\n      return;\n    }\n\n    // Search for active tab on same parent to deactivate it\n    const active = this._getActiveElem();\n    const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\n      relatedTarget: innerElem\n    }) : null;\n    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\n      relatedTarget: active\n    });\n    if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n      return;\n    }\n    this._deactivate(active, innerElem);\n    this._activate(innerElem, active);\n  }\n\n  // Private\n  _activate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n    element.classList.add(CLASS_NAME_ACTIVE);\n    this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.add(CLASS_NAME_SHOW$1);\n        return;\n      }\n      element.removeAttribute('tabindex');\n      element.setAttribute('aria-selected', true);\n      this._toggleDropDown(element, true);\n      EventHandler.trigger(element, EVENT_SHOWN$1, {\n        relatedTarget: relatedElem\n      });\n    };\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n  }\n  _deactivate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n    element.classList.remove(CLASS_NAME_ACTIVE);\n    element.blur();\n    this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.remove(CLASS_NAME_SHOW$1);\n        return;\n      }\n      element.setAttribute('aria-selected', false);\n      element.setAttribute('tabindex', '-1');\n      this._toggleDropDown(element, false);\n      EventHandler.trigger(element, EVENT_HIDDEN$1, {\n        relatedTarget: relatedElem\n      });\n    };\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n  }\n  _keydown(event) {\n    if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {\n      return;\n    }\n    event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n    event.preventDefault();\n    const children = this._getChildren().filter(element => !isDisabled(element));\n    let nextActiveElement;\n    if ([HOME_KEY, END_KEY].includes(event.key)) {\n      nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n    } else {\n      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n      nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n    }\n    if (nextActiveElement) {\n      nextActiveElement.focus({\n        preventScroll: true\n      });\n      Tab.getOrCreateInstance(nextActiveElement).show();\n    }\n  }\n  _getChildren() {\n    // collection of inner elements\n    return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n  }\n  _getActiveElem() {\n    return this._getChildren().find(child => this._elemIsActive(child)) || null;\n  }\n  _setInitialAttributes(parent, children) {\n    this._setAttributeIfNotExists(parent, 'role', 'tablist');\n    for (const child of children) {\n      this._setInitialAttributesOnChild(child);\n    }\n  }\n  _setInitialAttributesOnChild(child) {\n    child = this._getInnerElement(child);\n    const isActive = this._elemIsActive(child);\n    const outerElem = this._getOuterElement(child);\n    child.setAttribute('aria-selected', isActive);\n    if (outerElem !== child) {\n      this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n    }\n    if (!isActive) {\n      child.setAttribute('tabindex', '-1');\n    }\n    this._setAttributeIfNotExists(child, 'role', 'tab');\n\n    // set attributes to the related panel too\n    this._setInitialAttributesOnTargetPanel(child);\n  }\n  _setInitialAttributesOnTargetPanel(child) {\n    const target = SelectorEngine.getElementFromSelector(child);\n    if (!target) {\n      return;\n    }\n    this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n    if (child.id) {\n      this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n    }\n  }\n  _toggleDropDown(element, open) {\n    const outerElem = this._getOuterElement(element);\n    if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n      return;\n    }\n    const toggle = (selector, className) => {\n      const element = SelectorEngine.findOne(selector, outerElem);\n      if (element) {\n        element.classList.toggle(className, open);\n      }\n    };\n    toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n    toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\n    outerElem.setAttribute('aria-expanded', open);\n  }\n  _setAttributeIfNotExists(element, attribute, value) {\n    if (!element.hasAttribute(attribute)) {\n      element.setAttribute(attribute, value);\n    }\n  }\n  _elemIsActive(elem) {\n    return elem.classList.contains(CLASS_NAME_ACTIVE);\n  }\n\n  // Try to get the inner element (usually the .nav-link)\n  _getInnerElement(elem) {\n    return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n  }\n\n  // Try to get the outer element (usually the .nav-item)\n  _getOuterElement(elem) {\n    return elem.closest(SELECTOR_OUTER) || elem;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config]();\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n  if (isDisabled(this)) {\n    return;\n  }\n  Tab.getOrCreateInstance(this).show();\n});\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n    Tab.getOrCreateInstance(element);\n  }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n    this._setListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n  static get DefaultType() {\n    return DefaultType;\n  }\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n    this._clearTimeout();\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n      this._maybeScheduleHide();\n    };\n    this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n    reflow(this._element);\n    this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n  hide() {\n    if (!this.isShown()) {\n      return;\n    }\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n      this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n    this._element.classList.add(CLASS_NAME_SHOWING);\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n  dispose() {\n    this._clearTimeout();\n    if (this.isShown()) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n    super.dispose();\n  }\n  isShown() {\n    return this._element.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  // Private\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        {\n          this._hasMouseInteraction = isInteracting;\n          break;\n        }\n      case 'focusin':\n      case 'focusout':\n        {\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n        }\n    }\n    if (isInteracting) {\n      this._clearTimeout();\n      return;\n    }\n    const nextElement = event.relatedTarget;\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n    this._maybeScheduleHide();\n  }\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](this);\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "public/assets/bootstrap-5.3.2-dist/js/bootstrap.js",
    "content": "/*!\n  * Bootstrap v5.3.2 (https://getbootstrap.com/)\n  * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core')) :\n  typeof define === 'function' && define.amd ? define(['@popperjs/core'], factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory(global.Popper));\n})(this, (function (Popper) { 'use strict';\n\n  function _interopNamespaceDefault(e) {\n    const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });\n    if (e) {\n      for (const k in e) {\n        if (k !== 'default') {\n          const d = Object.getOwnPropertyDescriptor(e, k);\n          Object.defineProperty(n, k, d.get ? d : {\n            enumerable: true,\n            get: () => e[k]\n          });\n        }\n      }\n    }\n    n.default = e;\n    return Object.freeze(n);\n  }\n\n  const Popper__namespace = /*#__PURE__*/_interopNamespaceDefault(Popper);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * Constants\n   */\n\n  const elementMap = new Map();\n  const Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n      const instanceMap = elementMap.get(element);\n\n      // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n      instanceMap.set(key, instance);\n    },\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n      return null;\n    },\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key);\n\n      // free up element references if there are no instances left for an element\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend';\n\n  /**\n   * Properly escape IDs selectors to handle weird IDs\n   * @param {string} selector\n   * @returns {string}\n   */\n  const parseSelector = selector => {\n    if (selector && window.CSS && window.CSS.escape) {\n      // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n      selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n    }\n    return selector;\n  };\n\n  // Shout-out Angus Croll (https://goo.gl/pxwQGp)\n  const toType = object => {\n    if (object === null || object === undefined) {\n      return `${object}`;\n    }\n    return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n\n  /**\n   * Public Util API\n   */\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n    return prefix;\n  };\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    }\n\n    // Get transition-duration of the element\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n    // Return 0 if element or transition duration is not found\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    }\n\n    // If multiple durations are defined, take the first\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n  const isElement = object => {\n    if (!object || typeof object !== 'object') {\n      return false;\n    }\n    if (typeof object.jquery !== 'undefined') {\n      object = object[0];\n    }\n    return typeof object.nodeType !== 'undefined';\n  };\n  const getElement = object => {\n    // it's a jQuery object or a node element\n    if (isElement(object)) {\n      return object.jquery ? object[0] : object;\n    }\n    if (typeof object === 'string' && object.length > 0) {\n      return document.querySelector(parseSelector(object));\n    }\n    return null;\n  };\n  const isVisible = element => {\n    if (!isElement(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n    const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n    // Handle `details` element as its content may falsie appear visible when it is closed\n    const closedDetails = element.closest('details:not([open])');\n    if (!closedDetails) {\n      return elementIsVisible;\n    }\n    if (closedDetails !== element) {\n      const summary = element.closest('summary');\n      if (summary && summary.parentNode !== closedDetails) {\n        return false;\n      }\n      if (summary === null) {\n        return false;\n      }\n    }\n    return elementIsVisible;\n  };\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    }\n\n    // Can find the shadow root otherwise it'll return the document\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n    if (element instanceof ShadowRoot) {\n      return element;\n    }\n\n    // when we don't find a shadow root\n    if (!element.parentNode) {\n      return null;\n    }\n    return findShadowRoot(element.parentNode);\n  };\n  const noop = () => {};\n\n  /**\n   * Trick to restart an element's animation\n   *\n   * @param {HTMLElement} element\n   * @return void\n   *\n   * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n   */\n  const reflow = element => {\n    element.offsetHeight; // eslint-disable-line no-unused-expressions\n  };\n\n  const getjQuery = () => {\n    if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return window.jQuery;\n    }\n    return null;\n  };\n  const DOMContentLoadedCallbacks = [];\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          for (const callback of DOMContentLoadedCallbacks) {\n            callback();\n          }\n        });\n      }\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n  const isRTL = () => document.documentElement.dir === 'rtl';\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n  const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n    return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n  };\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    const listLength = list.length;\n    let index = list.indexOf(activeElement);\n\n    // if the element does not exist in the list return an element\n    // depending on the direction and if cycle is allowed\n    if (index === -1) {\n      return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n    }\n    index += shouldGetNext ? 1 : -1;\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n  /**\n   * Private methods\n   */\n\n  function makeEventUid(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n  function getElementEvents(element) {\n    const uid = makeEventUid(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      hydrateObj(event, {\n        delegateTarget: element\n      });\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n      return fn.apply(element, [event]);\n    };\n  }\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (const domElement of domElements) {\n          if (domElement !== target) {\n            continue;\n          }\n          hydrateObj(event, {\n            delegateTarget: target\n          });\n          if (handler.oneOff) {\n            EventHandler.off(element, event.type, selector, fn);\n          }\n          return fn.apply(target, [event]);\n        }\n      }\n    };\n  }\n  function findHandler(events, callable, delegationSelector = null) {\n    return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n  }\n  function normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n    const isDelegated = typeof handler === 'string';\n    // TODO: tooltip passes `false` instead of selector, so we need to check\n    const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    if (!nativeEvents.has(typeEvent)) {\n      typeEvent = originalTypeEvent;\n    }\n    return [isDelegated, callable, typeEvent];\n  }\n  function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n    let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n    // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n    if (originalTypeEvent in customEvents) {\n      const wrapFunction = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n      callable = wrapFunction(callable);\n    }\n    const events = getElementEvents(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n    if (previousFunction) {\n      previousFunction.oneOff = previousFunction.oneOff && oneOff;\n      return;\n    }\n    const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n    fn.delegationSelector = isDelegated ? handler : null;\n    fn.callable = callable;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, isDelegated);\n  }\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n    if (!fn) {\n      return;\n    }\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n      if (handlerKey.includes(namespace)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n      }\n    }\n  }\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n  const EventHandler = {\n    on(element, event, handler, delegationFunction) {\n      addHandler(element, event, handler, delegationFunction, false);\n    },\n    one(element, event, handler, delegationFunction) {\n      addHandler(element, event, handler, delegationFunction, true);\n    },\n    off(element, originalTypeEvent, handler, delegationFunction) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n      const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getElementEvents(element);\n      const storeElementEvent = events[typeEvent] || {};\n      const isNamespace = originalTypeEvent.startsWith('.');\n      if (typeof callable !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!Object.keys(storeElementEvent).length) {\n          return;\n        }\n        removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n        return;\n      }\n      if (isNamespace) {\n        for (const elementEvent of Object.keys(events)) {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        }\n      }\n      for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n        }\n      }\n    },\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      let jQueryEvent = null;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n      const evt = hydrateObj(new Event(event, {\n        bubbles,\n        cancelable: true\n      }), args);\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n      if (evt.defaultPrevented && jQueryEvent) {\n        jQueryEvent.preventDefault();\n      }\n      return evt;\n    }\n  };\n  function hydrateObj(obj, meta = {}) {\n    for (const [key, value] of Object.entries(meta)) {\n      try {\n        obj[key] = value;\n      } catch (_unused) {\n        Object.defineProperty(obj, key, {\n          configurable: true,\n          get() {\n            return value;\n          }\n        });\n      }\n    }\n    return obj;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  function normalizeData(value) {\n    if (value === 'true') {\n      return true;\n    }\n    if (value === 'false') {\n      return false;\n    }\n    if (value === Number(value).toString()) {\n      return Number(value);\n    }\n    if (value === '' || value === 'null') {\n      return null;\n    }\n    if (typeof value !== 'string') {\n      return value;\n    }\n    try {\n      return JSON.parse(decodeURIComponent(value));\n    } catch (_unused) {\n      return value;\n    }\n  }\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n      const attributes = {};\n      const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n      for (const key of bsKeys) {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      }\n      return attributes;\n    },\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    }\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/config.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Class definition\n   */\n\n  class Config {\n    // Getters\n    static get Default() {\n      return {};\n    }\n    static get DefaultType() {\n      return {};\n    }\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n    _getConfig(config) {\n      config = this._mergeConfigObj(config);\n      config = this._configAfterMerge(config);\n      this._typeCheckConfig(config);\n      return config;\n    }\n    _configAfterMerge(config) {\n      return config;\n    }\n    _mergeConfigObj(config, element) {\n      const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n      return {\n        ...this.constructor.Default,\n        ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n        ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n        ...(typeof config === 'object' ? config : {})\n      };\n    }\n    _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n      for (const [property, expectedTypes] of Object.entries(configTypes)) {\n        const value = config[property];\n        const valueType = isElement(value) ? 'element' : toType(value);\n        if (!new RegExp(expectedTypes).test(valueType)) {\n          throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n        }\n      }\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const VERSION = '5.3.2';\n\n  /**\n   * Class definition\n   */\n\n  class BaseComponent extends Config {\n    constructor(element, config) {\n      super();\n      element = getElement(element);\n      if (!element) {\n        return;\n      }\n      this._element = element;\n      this._config = this._getConfig(config);\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    // Public\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      for (const propertyName of Object.getOwnPropertyNames(this)) {\n        this[propertyName] = null;\n      }\n    }\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    _getConfig(config) {\n      config = this._mergeConfigObj(config, this._element);\n      config = this._configAfterMerge(config);\n      this._typeCheckConfig(config);\n      return config;\n    }\n\n    // Static\n    static getInstance(element) {\n      return Data.get(getElement(element), this.DATA_KEY);\n    }\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n    static get VERSION() {\n      return VERSION;\n    }\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n    static eventName(name) {\n      return `${name}${this.EVENT_KEY}`;\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n    if (!selector || selector === '#') {\n      let hrefAttribute = element.getAttribute('href');\n\n      // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n      if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n        return null;\n      }\n\n      // Just in case some CMS puts out a full URL with the anchor appended\n      if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n        hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n      }\n      selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;\n    }\n    return selector;\n  };\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode.closest(selector);\n      while (ancestor) {\n        parents.push(ancestor);\n        ancestor = ancestor.parentNode.closest(selector);\n      }\n      return parents;\n    },\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n        previous = previous.previousElementSibling;\n      }\n      return [];\n    },\n    // TODO: this is now unused; remove later along with prev()\n    next(element, selector) {\n      let next = element.nextElementSibling;\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n        next = next.nextElementSibling;\n      }\n      return [];\n    },\n    focusableChildren(element) {\n      const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n      return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n    },\n    getSelectorFromElement(element) {\n      const selector = getSelector(element);\n      if (selector) {\n        return SelectorEngine.findOne(selector) ? selector : null;\n      }\n      return null;\n    },\n    getElementFromSelector(element) {\n      const selector = getSelector(element);\n      return selector ? SelectorEngine.findOne(selector) : null;\n    },\n    getMultipleElementsFromSelector(element) {\n      const selector = getSelector(element);\n      return selector ? SelectorEngine.find(selector) : [];\n    }\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/component-functions.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const enableDismissTrigger = (component, method = 'hide') => {\n    const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n    const name = component.NAME;\n    EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n      if (['A', 'AREA'].includes(this.tagName)) {\n        event.preventDefault();\n      }\n      if (isDisabled(this)) {\n        return;\n      }\n      const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n      const instance = component.getOrCreateInstance(target);\n\n      // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n      instance[method]();\n    });\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$f = 'alert';\n  const DATA_KEY$a = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$a}`;\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$8 = 'show';\n\n  /**\n   * Class definition\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$f;\n    }\n\n    // Public\n    close() {\n      const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n      if (closeEvent.defaultPrevented) {\n        return;\n      }\n      this._element.classList.remove(CLASS_NAME_SHOW$8);\n      const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n      this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n    }\n\n    // Private\n    _destroyElement() {\n      this._element.remove();\n      EventHandler.trigger(this._element, EVENT_CLOSED);\n      this.dispose();\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](this);\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  enableDismissTrigger(Alert, 'close');\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$e = 'button';\n  const DATA_KEY$9 = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n  /**\n   * Class definition\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$e;\n    }\n\n    // Public\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/swipe.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$d = 'swipe';\n  const EVENT_KEY$9 = '.bs.swipe';\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SWIPE_THRESHOLD = 40;\n  const Default$c = {\n    endCallback: null,\n    leftCallback: null,\n    rightCallback: null\n  };\n  const DefaultType$c = {\n    endCallback: '(function|null)',\n    leftCallback: '(function|null)',\n    rightCallback: '(function|null)'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Swipe extends Config {\n    constructor(element, config) {\n      super();\n      this._element = element;\n      if (!element || !Swipe.isSupported()) {\n        return;\n      }\n      this._config = this._getConfig(config);\n      this._deltaX = 0;\n      this._supportPointerEvents = Boolean(window.PointerEvent);\n      this._initEvents();\n    }\n\n    // Getters\n    static get Default() {\n      return Default$c;\n    }\n    static get DefaultType() {\n      return DefaultType$c;\n    }\n    static get NAME() {\n      return NAME$d;\n    }\n\n    // Public\n    dispose() {\n      EventHandler.off(this._element, EVENT_KEY$9);\n    }\n\n    // Private\n    _start(event) {\n      if (!this._supportPointerEvents) {\n        this._deltaX = event.touches[0].clientX;\n        return;\n      }\n      if (this._eventIsPointerPenTouch(event)) {\n        this._deltaX = event.clientX;\n      }\n    }\n    _end(event) {\n      if (this._eventIsPointerPenTouch(event)) {\n        this._deltaX = event.clientX - this._deltaX;\n      }\n      this._handleSwipe();\n      execute(this._config.endCallback);\n    }\n    _move(event) {\n      this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n    }\n    _handleSwipe() {\n      const absDeltaX = Math.abs(this._deltaX);\n      if (absDeltaX <= SWIPE_THRESHOLD) {\n        return;\n      }\n      const direction = absDeltaX / this._deltaX;\n      this._deltaX = 0;\n      if (!direction) {\n        return;\n      }\n      execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n    }\n    _initEvents() {\n      if (this._supportPointerEvents) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n      }\n    }\n    _eventIsPointerPenTouch(event) {\n      return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n    }\n\n    // Static\n    static isSupported() {\n      return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$c = 'carousel';\n  const DATA_KEY$8 = 'bs.carousel';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const ARROW_LEFT_KEY$1 = 'ArrowLeft';\n  const ARROW_RIGHT_KEY$1 = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const EVENT_SLIDE = `slide${EVENT_KEY$8}`;\n  const EVENT_SLID = `slid${EVENT_KEY$8}`;\n  const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\n  const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\n  const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\n  const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n  };\n  const Default$b = {\n    interval: 5000,\n    keyboard: true,\n    pause: 'hover',\n    ride: false,\n    touch: true,\n    wrap: true\n  };\n  const DefaultType$b = {\n    interval: '(number|boolean)',\n    // TODO:v6 remove boolean support\n    keyboard: 'boolean',\n    pause: '(string|boolean)',\n    ride: '(boolean|string)',\n    touch: 'boolean',\n    wrap: 'boolean'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._interval = null;\n      this._activeElement = null;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this._swipeHelper = null;\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._addEventListeners();\n      if (this._config.ride === CLASS_NAME_CAROUSEL) {\n        this.cycle();\n      }\n    }\n\n    // Getters\n    static get Default() {\n      return Default$b;\n    }\n    static get DefaultType() {\n      return DefaultType$b;\n    }\n    static get NAME() {\n      return NAME$c;\n    }\n\n    // Public\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n    nextWhenVisible() {\n      // FIXME TODO use `document.visibilityState`\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n    pause() {\n      if (this._isSliding) {\n        triggerTransitionEnd(this._element);\n      }\n      this._clearInterval();\n    }\n    cycle() {\n      this._clearInterval();\n      this._updateInterval();\n      this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n    }\n    _maybeEnableCycle() {\n      if (!this._config.ride) {\n        return;\n      }\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n        return;\n      }\n      this.cycle();\n    }\n    to(index) {\n      const items = this._getItems();\n      if (index > items.length - 1 || index < 0) {\n        return;\n      }\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n      const activeIndex = this._getItemIndex(this._getActive());\n      if (activeIndex === index) {\n        return;\n      }\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n      this._slide(order, items[index]);\n    }\n    dispose() {\n      if (this._swipeHelper) {\n        this._swipeHelper.dispose();\n      }\n      super.dispose();\n    }\n\n    // Private\n    _configAfterMerge(config) {\n      config.defaultInterval = config.interval;\n      return config;\n    }\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n      }\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n        EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n      }\n      if (this._config.touch && Swipe.isSupported()) {\n        this._addTouchEventListeners();\n      }\n    }\n    _addTouchEventListeners() {\n      for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n        EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n      }\n      const endCallBack = () => {\n        if (this._config.pause !== 'hover') {\n          return;\n        }\n\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n\n        this.pause();\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n        this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      };\n      const swipeConfig = {\n        leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n        rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n        endCallback: endCallBack\n      };\n      this._swipeHelper = new Swipe(this._element, swipeConfig);\n    }\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n      const direction = KEY_TO_DIRECTION[event.key];\n      if (direction) {\n        event.preventDefault();\n        this._slide(this._directionToOrder(direction));\n      }\n    }\n    _getItemIndex(element) {\n      return this._getItems().indexOf(element);\n    }\n    _setActiveIndicatorElement(index) {\n      if (!this._indicatorsElement) {\n        return;\n      }\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n      if (newActiveIndicator) {\n        newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n        newActiveIndicator.setAttribute('aria-current', 'true');\n      }\n    }\n    _updateInterval() {\n      const element = this._activeElement || this._getActive();\n      if (!element) {\n        return;\n      }\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n      this._config.interval = elementInterval || this._config.defaultInterval;\n    }\n    _slide(order, element = null) {\n      if (this._isSliding) {\n        return;\n      }\n      const activeElement = this._getActive();\n      const isNext = order === ORDER_NEXT;\n      const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n      if (nextElement === activeElement) {\n        return;\n      }\n      const nextElementIndex = this._getItemIndex(nextElement);\n      const triggerEvent = eventName => {\n        return EventHandler.trigger(this._element, eventName, {\n          relatedTarget: nextElement,\n          direction: this._orderToDirection(order),\n          from: this._getItemIndex(activeElement),\n          to: nextElementIndex\n        });\n      };\n      const slideEvent = triggerEvent(EVENT_SLIDE);\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        // TODO: change tests that use empty divs to avoid this check\n        return;\n      }\n      const isCycling = Boolean(this._interval);\n      this.pause();\n      this._isSliding = true;\n      this._setActiveIndicatorElement(nextElementIndex);\n      this._activeElement = nextElement;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        triggerEvent(EVENT_SLID);\n      };\n      this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_SLIDE);\n    }\n    _getActive() {\n      return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n    }\n    _getItems() {\n      return SelectorEngine.find(SELECTOR_ITEM, this._element);\n    }\n    _clearInterval() {\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n    }\n    _directionToOrder(direction) {\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n    _orderToDirection(order) {\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Carousel.getOrCreateInstance(this, config);\n        if (typeof config === 'number') {\n          data.to(config);\n          return;\n        }\n        if (typeof config === 'string') {\n          if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n          data[config]();\n        }\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n    const target = SelectorEngine.getElementFromSelector(this);\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n    event.preventDefault();\n    const carousel = Carousel.getOrCreateInstance(target);\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n    if (slideIndex) {\n      carousel.to(slideIndex);\n      carousel._maybeEnableCycle();\n      return;\n    }\n    if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n      carousel.next();\n      carousel._maybeEnableCycle();\n      return;\n    }\n    carousel.prev();\n    carousel._maybeEnableCycle();\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n    for (const carousel of carousels) {\n      Carousel.getOrCreateInstance(carousel);\n    }\n  });\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$b = 'collapse';\n  const DATA_KEY$7 = 'bs.collapse';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\n  const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\n  const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  const Default$a = {\n    parent: null,\n    toggle: true\n  };\n  const DefaultType$a = {\n    parent: '(null|element)',\n    toggle: 'boolean'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._isTransitioning = false;\n      this._triggerArray = [];\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n      for (const elem of toggleList) {\n        const selector = SelectorEngine.getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n        if (selector !== null && filterElement.length) {\n          this._triggerArray.push(elem);\n        }\n      }\n      this._initializeChildren();\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n      }\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    }\n\n    // Getters\n    static get Default() {\n      return Default$a;\n    }\n    static get DefaultType() {\n      return DefaultType$a;\n    }\n    static get NAME() {\n      return NAME$b;\n    }\n\n    // Public\n    toggle() {\n      if (this._isShown()) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n    show() {\n      if (this._isTransitioning || this._isShown()) {\n        return;\n      }\n      let activeChildren = [];\n\n      // find active children\n      if (this._config.parent) {\n        activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n          toggle: false\n        }));\n      }\n      if (activeChildren.length && activeChildren[0]._isTransitioning) {\n        return;\n      }\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n      for (const activeInstance of activeChildren) {\n        activeInstance.hide();\n      }\n      const dimension = this._getDimension();\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n      this._element.style[dimension] = 0;\n      this._addAriaAndCollapsedClass(this._triggerArray, true);\n      this._isTransitioning = true;\n      const complete = () => {\n        this._isTransitioning = false;\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n        this._element.style[dimension] = '';\n        EventHandler.trigger(this._element, EVENT_SHOWN$6);\n      };\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n      this._queueCallback(complete, this._element, true);\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n    hide() {\n      if (this._isTransitioning || !this._isShown()) {\n        return;\n      }\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n      const dimension = this._getDimension();\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n      for (const trigger of this._triggerArray) {\n        const element = SelectorEngine.getElementFromSelector(trigger);\n        if (element && !this._isShown(element)) {\n          this._addAriaAndCollapsedClass([trigger], false);\n        }\n      }\n      this._isTransitioning = true;\n      const complete = () => {\n        this._isTransitioning = false;\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n        EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n      };\n      this._element.style[dimension] = '';\n      this._queueCallback(complete, this._element, true);\n    }\n    _isShown(element = this._element) {\n      return element.classList.contains(CLASS_NAME_SHOW$7);\n    }\n\n    // Private\n    _configAfterMerge(config) {\n      config.toggle = Boolean(config.toggle); // Coerce string values\n      config.parent = getElement(config.parent);\n      return config;\n    }\n    _getDimension() {\n      return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n    }\n    _initializeChildren() {\n      if (!this._config.parent) {\n        return;\n      }\n      const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n      for (const element of children) {\n        const selected = SelectorEngine.getElementFromSelector(element);\n        if (selected) {\n          this._addAriaAndCollapsedClass([element], this._isShown(selected));\n        }\n      }\n    }\n    _getFirstLevelChildren(selector) {\n      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n      // remove children if greater depth\n      return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n    }\n    _addAriaAndCollapsedClass(triggerArray, isOpen) {\n      if (!triggerArray.length) {\n        return;\n      }\n      for (const element of triggerArray) {\n        element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n        element.setAttribute('aria-expanded', isOpen);\n      }\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      const _config = {};\n      if (typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n      return this.each(function () {\n        const data = Collapse.getOrCreateInstance(this, _config);\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n          data[config]();\n        }\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n    for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n      Collapse.getOrCreateInstance(element, {\n        toggle: false\n      }).toggle();\n    }\n  });\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$a = 'dropdown';\n  const DATA_KEY$6 = 'bs.dropdown';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const TAB_KEY$1 = 'Tab';\n  const ARROW_UP_KEY$1 = 'ArrowUp';\n  const ARROW_DOWN_KEY$1 = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_SHOW$6 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_DROPUP_CENTER = 'dropup-center';\n  const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\n  const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR = '.navbar';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const PLACEMENT_TOPCENTER = 'top';\n  const PLACEMENT_BOTTOMCENTER = 'bottom';\n  const Default$9 = {\n    autoClose: true,\n    boundary: 'clippingParents',\n    display: 'dynamic',\n    offset: [0, 2],\n    popperConfig: null,\n    reference: 'toggle'\n  };\n  const DefaultType$9 = {\n    autoClose: '(boolean|string)',\n    boundary: '(string|element)',\n    display: 'string',\n    offset: '(array|string|function)',\n    popperConfig: '(null|object|function)',\n    reference: '(string|element|object)'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._popper = null;\n      this._parent = this._element.parentNode; // dropdown wrapper\n      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n      this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n      this._inNavbar = this._detectNavbar();\n    }\n\n    // Getters\n    static get Default() {\n      return Default$9;\n    }\n    static get DefaultType() {\n      return DefaultType$9;\n    }\n    static get NAME() {\n      return NAME$a;\n    }\n\n    // Public\n    toggle() {\n      return this._isShown() ? this.hide() : this.show();\n    }\n    show() {\n      if (isDisabled(this._element) || this._isShown()) {\n        return;\n      }\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n      this._createPopper();\n\n      // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n      if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n        for (const element of [].concat(...document.body.children)) {\n          EventHandler.on(element, 'mouseover', noop);\n        }\n      }\n      this._element.focus();\n      this._element.setAttribute('aria-expanded', true);\n      this._menu.classList.add(CLASS_NAME_SHOW$6);\n      this._element.classList.add(CLASS_NAME_SHOW$6);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n    }\n    hide() {\n      if (isDisabled(this._element) || !this._isShown()) {\n        return;\n      }\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      this._completeHide(relatedTarget);\n    }\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n      super.dispose();\n    }\n    update() {\n      this._inNavbar = this._detectNavbar();\n      if (this._popper) {\n        this._popper.update();\n      }\n    }\n\n    // Private\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n      if ('ontouchstart' in document.documentElement) {\n        for (const element of [].concat(...document.body.children)) {\n          EventHandler.off(element, 'mouseover', noop);\n        }\n      }\n      if (this._popper) {\n        this._popper.destroy();\n      }\n      this._menu.classList.remove(CLASS_NAME_SHOW$6);\n      this._element.classList.remove(CLASS_NAME_SHOW$6);\n      this._element.setAttribute('aria-expanded', 'false');\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n    }\n    _getConfig(config) {\n      config = super._getConfig(config);\n      if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n      return config;\n    }\n    _createPopper() {\n      if (typeof Popper__namespace === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n      let referenceElement = this._element;\n      if (this._config.reference === 'parent') {\n        referenceElement = this._parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n      const popperConfig = this._getPopperConfig();\n      this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);\n    }\n    _isShown() {\n      return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n    }\n    _getPlacement() {\n      const parentDropdown = this._parent;\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      }\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n        return PLACEMENT_TOPCENTER;\n      }\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n        return PLACEMENT_BOTTOMCENTER;\n      }\n\n      // We need to trim the value because custom properties can also include spaces\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n    _detectNavbar() {\n      return this._element.closest(SELECTOR_NAVBAR) !== null;\n    }\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n      if (typeof offset === 'string') {\n        return offset.split(',').map(value => Number.parseInt(value, 10));\n      }\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n      return offset;\n    }\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      };\n\n      // Disable Popper if we have a static display or Dropdown is in Navbar\n      if (this._inNavbar || this._config.display === 'static') {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n      return {\n        ...defaultBsPopperConfig,\n        ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n      };\n    }\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n      if (!items.length) {\n        return;\n      }\n\n      // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Dropdown.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n    static clearMenus(event) {\n      if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n        return;\n      }\n      const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n      for (const toggle of openToggles) {\n        const context = Dropdown.getInstance(toggle);\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        }\n\n        // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n        context._completeHide(relatedTarget);\n      }\n    }\n    static dataApiKeydownHandler(event) {\n      // If not an UP | DOWN | ESCAPE key => not a dropdown command\n      // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n      const isInput = /input|textarea/i.test(event.target.tagName);\n      const isEscapeEvent = event.key === ESCAPE_KEY$2;\n      const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n      if (!isUpOrDownEvent && !isEscapeEvent) {\n        return;\n      }\n      if (isInput && !isEscapeEvent) {\n        return;\n      }\n      event.preventDefault();\n\n      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n      const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n      const instance = Dropdown.getOrCreateInstance(getToggleButton);\n      if (isUpOrDownEvent) {\n        event.stopPropagation();\n        instance.show();\n        instance._selectMenuItem(event);\n        return;\n      }\n      if (instance._isShown()) {\n        // else is escape and we check if it is shown\n        event.stopPropagation();\n        instance.hide();\n        getToggleButton.focus();\n      }\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.getOrCreateInstance(this).toggle();\n  });\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$9 = 'backdrop';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\n  const Default$8 = {\n    className: 'modal-backdrop',\n    clickCallback: null,\n    isAnimated: false,\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    rootElement: 'body' // give the choice to place backdrop under different elements\n  };\n\n  const DefaultType$8 = {\n    className: 'string',\n    clickCallback: '(function|null)',\n    isAnimated: 'boolean',\n    isVisible: 'boolean',\n    rootElement: '(element|string)'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Backdrop extends Config {\n    constructor(config) {\n      super();\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    // Getters\n    static get Default() {\n      return Default$8;\n    }\n    static get DefaultType() {\n      return DefaultType$8;\n    }\n    static get NAME() {\n      return NAME$9;\n    }\n\n    // Public\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n      this._append();\n      const element = this._getElement();\n      if (this._config.isAnimated) {\n        reflow(element);\n      }\n      element.classList.add(CLASS_NAME_SHOW$5);\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n      this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    }\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n      this._element.remove();\n      this._isAppended = false;\n    }\n\n    // Private\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = this._config.className;\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$4);\n        }\n        this._element = backdrop;\n      }\n      return this._element;\n    }\n    _configAfterMerge(config) {\n      // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n      config.rootElement = getElement(config.rootElement);\n      return config;\n    }\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n      const element = this._getElement();\n      this._config.rootElement.append(element);\n      EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/focustrap.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$8 = 'focustrap';\n  const DATA_KEY$5 = 'bs.focustrap';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\n  const TAB_KEY = 'Tab';\n  const TAB_NAV_FORWARD = 'forward';\n  const TAB_NAV_BACKWARD = 'backward';\n  const Default$7 = {\n    autofocus: true,\n    trapElement: null // The element to trap focus inside of\n  };\n\n  const DefaultType$7 = {\n    autofocus: 'boolean',\n    trapElement: 'element'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class FocusTrap extends Config {\n    constructor(config) {\n      super();\n      this._config = this._getConfig(config);\n      this._isActive = false;\n      this._lastTabNavDirection = null;\n    }\n\n    // Getters\n    static get Default() {\n      return Default$7;\n    }\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n    static get NAME() {\n      return NAME$8;\n    }\n\n    // Public\n    activate() {\n      if (this._isActive) {\n        return;\n      }\n      if (this._config.autofocus) {\n        this._config.trapElement.focus();\n      }\n      EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n      EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n      this._isActive = true;\n    }\n    deactivate() {\n      if (!this._isActive) {\n        return;\n      }\n      this._isActive = false;\n      EventHandler.off(document, EVENT_KEY$5);\n    }\n\n    // Private\n    _handleFocusin(event) {\n      const {\n        trapElement\n      } = this._config;\n      if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n        return;\n      }\n      const elements = SelectorEngine.focusableChildren(trapElement);\n      if (elements.length === 0) {\n        trapElement.focus();\n      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n        elements[elements.length - 1].focus();\n      } else {\n        elements[0].focus();\n      }\n    }\n    _handleKeydown(event) {\n      if (event.key !== TAB_KEY) {\n        return;\n      }\n      this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n  const PROPERTY_PADDING = 'padding-right';\n  const PROPERTY_MARGIN = 'margin-right';\n\n  /**\n   * Class definition\n   */\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    // Public\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n    hide() {\n      const width = this.getWidth();\n      this._disableOverFlow();\n      // give padding to element to balance the hidden scrollbar width\n      this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n      // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n    }\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n      this._resetElementAttributes(this._element, PROPERTY_PADDING);\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n    }\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n    // Private\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n      this._element.style.overflow = 'hidden';\n    }\n    _setElementAttributes(selector, styleProperty, callback) {\n      const scrollbarWidth = this.getWidth();\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n        this._saveInitialAttribute(element, styleProperty);\n        const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n        element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n      };\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n    _saveInitialAttribute(element, styleProperty) {\n      const actualValue = element.style.getPropertyValue(styleProperty);\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProperty, actualValue);\n      }\n    }\n    _resetElementAttributes(selector, styleProperty) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProperty);\n        // We only want to remove the property if the value is `null`; the value can also be zero\n        if (value === null) {\n          element.style.removeProperty(styleProperty);\n          return;\n        }\n        Manipulator.removeDataAttribute(element, styleProperty);\n        element.style.setProperty(styleProperty, value);\n      };\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement(selector)) {\n        callBack(selector);\n        return;\n      }\n      for (const sel of SelectorEngine.find(selector, this._element)) {\n        callBack(sel);\n      }\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$7 = 'modal';\n  const DATA_KEY$4 = 'bs.modal';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\n  const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\n  const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_SHOW$4 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const OPEN_SELECTOR$1 = '.modal.show';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const Default$6 = {\n    backdrop: true,\n    focus: true,\n    keyboard: true\n  };\n  const DefaultType$6 = {\n    backdrop: '(boolean|string)',\n    focus: 'boolean',\n    keyboard: 'boolean'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._focustrap = this._initializeFocusTrap();\n      this._isShown = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n      this._addEventListeners();\n    }\n\n    // Getters\n    static get Default() {\n      return Default$6;\n    }\n    static get DefaultType() {\n      return DefaultType$6;\n    }\n    static get NAME() {\n      return NAME$7;\n    }\n\n    // Public\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n        relatedTarget\n      });\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n      this._isShown = true;\n      this._isTransitioning = true;\n      this._scrollBar.hide();\n      document.body.classList.add(CLASS_NAME_OPEN);\n      this._adjustDialog();\n      this._backdrop.show(() => this._showElement(relatedTarget));\n    }\n    hide() {\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n      this._isShown = false;\n      this._isTransitioning = true;\n      this._focustrap.deactivate();\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n      this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n    }\n    dispose() {\n      EventHandler.off(window, EVENT_KEY$4);\n      EventHandler.off(this._dialog, EVENT_KEY$4);\n      this._backdrop.dispose();\n      this._focustrap.deactivate();\n      super.dispose();\n    }\n    handleUpdate() {\n      this._adjustDialog();\n    }\n\n    // Private\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value,\n        isAnimated: this._isAnimated()\n      });\n    }\n    _initializeFocusTrap() {\n      return new FocusTrap({\n        trapElement: this._element\n      });\n    }\n    _showElement(relatedTarget) {\n      // try to append dynamic modal\n      if (!document.body.contains(this._element)) {\n        document.body.append(this._element);\n      }\n      this._element.style.display = 'block';\n      this._element.removeAttribute('aria-hidden');\n      this._element.setAttribute('aria-modal', true);\n      this._element.setAttribute('role', 'dialog');\n      this._element.scrollTop = 0;\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n      reflow(this._element);\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._focustrap.activate();\n        }\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n          relatedTarget\n        });\n      };\n      this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n    }\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (event.key !== ESCAPE_KEY$1) {\n          return;\n        }\n        if (this._config.keyboard) {\n          this.hide();\n          return;\n        }\n        this._triggerBackdropTransition();\n      });\n      EventHandler.on(window, EVENT_RESIZE$1, () => {\n        if (this._isShown && !this._isTransitioning) {\n          this._adjustDialog();\n        }\n      });\n      EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n        // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n        EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n          if (this._element !== event.target || this._element !== event2.target) {\n            return;\n          }\n          if (this._config.backdrop === 'static') {\n            this._triggerBackdropTransition();\n            return;\n          }\n          if (this._config.backdrop) {\n            this.hide();\n          }\n        });\n      });\n    }\n    _hideModal() {\n      this._element.style.display = 'none';\n      this._element.setAttribute('aria-hidden', true);\n      this._element.removeAttribute('aria-modal');\n      this._element.removeAttribute('role');\n      this._isTransitioning = false;\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n        this._resetAdjustments();\n        this._scrollBar.reset();\n        EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n      });\n    }\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$3);\n    }\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n      const initialOverflowY = this._element.style.overflowY;\n      // return if the following background transition hasn't yet completed\n      if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n      if (!isModalOverflowing) {\n        this._element.style.overflowY = 'hidden';\n      }\n      this._element.classList.add(CLASS_NAME_STATIC);\n      this._queueCallback(() => {\n        this._element.classList.remove(CLASS_NAME_STATIC);\n        this._queueCallback(() => {\n          this._element.style.overflowY = initialOverflowY;\n        }, this._dialog);\n      }, this._dialog);\n      this._element.focus();\n    }\n\n    /**\n     * The following methods are used to handle overflowing modals\n     */\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n      const scrollbarWidth = this._scrollBar.getWidth();\n      const isBodyOverflowing = scrollbarWidth > 0;\n      if (isBodyOverflowing && !isModalOverflowing) {\n        const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n        this._element.style[property] = `${scrollbarWidth}px`;\n      }\n      if (!isBodyOverflowing && isModalOverflowing) {\n        const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n        this._element.style[property] = `${scrollbarWidth}px`;\n      }\n    }\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    }\n\n    // Static\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](relatedTarget);\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = SelectorEngine.getElementFromSelector(this);\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n    EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n      EventHandler.one(target, EVENT_HIDDEN$4, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n\n    // avoid conflict when clicking modal toggler while another one is open\n    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n    if (alreadyOpen) {\n      Modal.getInstance(alreadyOpen).hide();\n    }\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  enableDismissTrigger(Modal);\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$6 = 'offcanvas';\n  const DATA_KEY$3 = 'bs.offcanvas';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\n  const ESCAPE_KEY = 'Escape';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const CLASS_NAME_SHOWING$1 = 'showing';\n  const CLASS_NAME_HIDING = 'hiding';\n  const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$3}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n      this._focustrap = this._initializeFocusTrap();\n      this._addEventListeners();\n    }\n\n    // Getters\n    static get Default() {\n      return Default$5;\n    }\n    static get DefaultType() {\n      return DefaultType$5;\n    }\n    static get NAME() {\n      return NAME$6;\n    }\n\n    // Public\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n      this._isShown = true;\n      this._backdrop.show();\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n      }\n      this._element.setAttribute('aria-modal', true);\n      this._element.setAttribute('role', 'dialog');\n      this._element.classList.add(CLASS_NAME_SHOWING$1);\n      const completeCallBack = () => {\n        if (!this._config.scroll || this._config.backdrop) {\n          this._focustrap.activate();\n        }\n        this._element.classList.add(CLASS_NAME_SHOW$3);\n        this._element.classList.remove(CLASS_NAME_SHOWING$1);\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n      this._focustrap.deactivate();\n      this._element.blur();\n      this._isShown = false;\n      this._element.classList.add(CLASS_NAME_HIDING);\n      this._backdrop.hide();\n      const completeCallback = () => {\n        this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n        this._element.removeAttribute('aria-modal');\n        this._element.removeAttribute('role');\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      };\n      this._queueCallback(completeCallback, this._element, true);\n    }\n    dispose() {\n      this._backdrop.dispose();\n      this._focustrap.deactivate();\n      super.dispose();\n    }\n\n    // Private\n    _initializeBackDrop() {\n      const clickCallback = () => {\n        if (this._config.backdrop === 'static') {\n          EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n          return;\n        }\n        this.hide();\n      };\n\n      // 'static' option will be translated to true, and booleans will keep their value\n      const isVisible = Boolean(this._config.backdrop);\n      return new Backdrop({\n        className: CLASS_NAME_BACKDROP,\n        isVisible,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: isVisible ? clickCallback : null\n      });\n    }\n    _initializeFocusTrap() {\n      return new FocusTrap({\n        trapElement: this._element\n      });\n    }\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (event.key !== ESCAPE_KEY) {\n          return;\n        }\n        if (this._config.keyboard) {\n          this.hide();\n          return;\n        }\n        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n      });\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](this);\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = SelectorEngine.getElementFromSelector(this);\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n    if (isDisabled(this)) {\n      return;\n    }\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n\n    // avoid conflict when clicking a toggler of an offcanvas, while another is open\n    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n    if (alreadyOpen && alreadyOpen !== target) {\n      Offcanvas.getInstance(alreadyOpen).hide();\n    }\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n      Offcanvas.getOrCreateInstance(selector).show();\n    }\n  });\n  EventHandler.on(window, EVENT_RESIZE, () => {\n    for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n      if (getComputedStyle(element).position !== 'fixed') {\n        Offcanvas.getOrCreateInstance(element).hide();\n      }\n    }\n  });\n  enableDismissTrigger(Offcanvas);\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  // js-docs-start allow-list\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  // js-docs-end allow-list\n\n  const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n  /**\n   * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n   * contexts.\n   *\n   * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n   */\n  // eslint-disable-next-line unicorn/better-regex\n  const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\n  const allowedAttribute = (attribute, allowedAttributeList) => {\n    const attributeName = attribute.nodeName.toLowerCase();\n    if (allowedAttributeList.includes(attributeName)) {\n      if (uriAttributes.has(attributeName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n      }\n      return true;\n    }\n\n    // Check if a regular expression validates the attribute.\n    return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n    if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n      return sanitizeFunction(unsafeHtml);\n    }\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n    for (const element of elements) {\n      const elementName = element.nodeName.toLowerCase();\n      if (!Object.keys(allowList).includes(elementName)) {\n        element.remove();\n        continue;\n      }\n      const attributeList = [].concat(...element.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n      for (const attribute of attributeList) {\n        if (!allowedAttribute(attribute, allowedAttributes)) {\n          element.removeAttribute(attribute.nodeName);\n        }\n      }\n    }\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap util/template-factory.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$5 = 'TemplateFactory';\n  const Default$4 = {\n    allowList: DefaultAllowlist,\n    content: {},\n    // { selector : text ,  selector2 : text2 , }\n    extraClass: '',\n    html: false,\n    sanitize: true,\n    sanitizeFn: null,\n    template: '<div></div>'\n  };\n  const DefaultType$4 = {\n    allowList: 'object',\n    content: 'object',\n    extraClass: '(string|function)',\n    html: 'boolean',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    template: 'string'\n  };\n  const DefaultContentType = {\n    entry: '(string|element|function|null)',\n    selector: '(string|element)'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class TemplateFactory extends Config {\n    constructor(config) {\n      super();\n      this._config = this._getConfig(config);\n    }\n\n    // Getters\n    static get Default() {\n      return Default$4;\n    }\n    static get DefaultType() {\n      return DefaultType$4;\n    }\n    static get NAME() {\n      return NAME$5;\n    }\n\n    // Public\n    getContent() {\n      return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n    }\n    hasContent() {\n      return this.getContent().length > 0;\n    }\n    changeContent(content) {\n      this._checkContent(content);\n      this._config.content = {\n        ...this._config.content,\n        ...content\n      };\n      return this;\n    }\n    toHtml() {\n      const templateWrapper = document.createElement('div');\n      templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n      for (const [selector, text] of Object.entries(this._config.content)) {\n        this._setContent(templateWrapper, text, selector);\n      }\n      const template = templateWrapper.children[0];\n      const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n      if (extraClass) {\n        template.classList.add(...extraClass.split(' '));\n      }\n      return template;\n    }\n\n    // Private\n    _typeCheckConfig(config) {\n      super._typeCheckConfig(config);\n      this._checkContent(config.content);\n    }\n    _checkContent(arg) {\n      for (const [selector, content] of Object.entries(arg)) {\n        super._typeCheckConfig({\n          selector,\n          entry: content\n        }, DefaultContentType);\n      }\n    }\n    _setContent(template, content, selector) {\n      const templateElement = SelectorEngine.findOne(selector, template);\n      if (!templateElement) {\n        return;\n      }\n      content = this._resolvePossibleFunction(content);\n      if (!content) {\n        templateElement.remove();\n        return;\n      }\n      if (isElement(content)) {\n        this._putElementInTemplate(getElement(content), templateElement);\n        return;\n      }\n      if (this._config.html) {\n        templateElement.innerHTML = this._maybeSanitize(content);\n        return;\n      }\n      templateElement.textContent = content;\n    }\n    _maybeSanitize(arg) {\n      return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n    }\n    _resolvePossibleFunction(arg) {\n      return execute(arg, [this]);\n    }\n    _putElementInTemplate(element, templateElement) {\n      if (this._config.html) {\n        templateElement.innerHTML = '';\n        templateElement.append(element);\n        return;\n      }\n      templateElement.textContent = element.textContent;\n    }\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$4 = 'tooltip';\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\n  const EVENT_MODAL_HIDE = 'hide.bs.modal';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  const EVENT_HIDE$2 = 'hide';\n  const EVENT_HIDDEN$2 = 'hidden';\n  const EVENT_SHOW$2 = 'show';\n  const EVENT_SHOWN$2 = 'shown';\n  const EVENT_INSERTED = 'inserted';\n  const EVENT_CLICK$1 = 'click';\n  const EVENT_FOCUSIN$1 = 'focusin';\n  const EVENT_FOCUSOUT$1 = 'focusout';\n  const EVENT_MOUSEENTER = 'mouseenter';\n  const EVENT_MOUSELEAVE = 'mouseleave';\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    allowList: DefaultAllowlist,\n    animation: true,\n    boundary: 'clippingParents',\n    container: false,\n    customClass: '',\n    delay: 0,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    html: false,\n    offset: [0, 6],\n    placement: 'top',\n    popperConfig: null,\n    sanitize: true,\n    sanitizeFn: null,\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    title: '',\n    trigger: 'hover focus'\n  };\n  const DefaultType$3 = {\n    allowList: 'object',\n    animation: 'boolean',\n    boundary: '(string|element)',\n    container: '(string|element|boolean)',\n    customClass: '(string|function)',\n    delay: '(number|object)',\n    fallbackPlacements: 'array',\n    html: 'boolean',\n    offset: '(array|string|function)',\n    placement: '(string|function)',\n    popperConfig: '(null|object|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    selector: '(string|boolean)',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper__namespace === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n      super(element, config);\n\n      // Private\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._isHovered = null;\n      this._activeTrigger = {};\n      this._popper = null;\n      this._templateFactory = null;\n      this._newContent = null;\n\n      // Protected\n      this.tip = null;\n      this._setListeners();\n      if (!this._config.selector) {\n        this._fixTitle();\n      }\n    }\n\n    // Getters\n    static get Default() {\n      return Default$3;\n    }\n    static get DefaultType() {\n      return DefaultType$3;\n    }\n    static get NAME() {\n      return NAME$4;\n    }\n\n    // Public\n    enable() {\n      this._isEnabled = true;\n    }\n    disable() {\n      this._isEnabled = false;\n    }\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n    toggle() {\n      if (!this._isEnabled) {\n        return;\n      }\n      this._activeTrigger.click = !this._activeTrigger.click;\n      if (this._isShown()) {\n        this._leave();\n        return;\n      }\n      this._enter();\n    }\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n      if (this._element.getAttribute('data-bs-original-title')) {\n        this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n      }\n      this._disposePopper();\n      super.dispose();\n    }\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n      if (!(this._isWithContent() && this._isEnabled)) {\n        return;\n      }\n      const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      // TODO: v6 remove this or make it optional\n      this._disposePopper();\n      const tip = this._getTipElement();\n      this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n      const {\n        container\n      } = this._config;\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.append(tip);\n        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n      }\n      this._popper = this._createPopper(tip);\n      tip.classList.add(CLASS_NAME_SHOW$2);\n\n      // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n      if ('ontouchstart' in document.documentElement) {\n        for (const element of [].concat(...document.body.children)) {\n          EventHandler.on(element, 'mouseover', noop);\n        }\n      }\n      const complete = () => {\n        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n        if (this._isHovered === false) {\n          this._leave();\n        }\n        this._isHovered = false;\n      };\n      this._queueCallback(complete, this.tip, this._isAnimated());\n    }\n    hide() {\n      if (!this._isShown()) {\n        return;\n      }\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n      const tip = this._getTipElement();\n      tip.classList.remove(CLASS_NAME_SHOW$2);\n\n      // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n      if ('ontouchstart' in document.documentElement) {\n        for (const element of [].concat(...document.body.children)) {\n          EventHandler.off(element, 'mouseover', noop);\n        }\n      }\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      this._isHovered = null; // it is a trick to support manual triggering\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n        if (!this._isHovered) {\n          this._disposePopper();\n        }\n        this._element.removeAttribute('aria-describedby');\n        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n      };\n      this._queueCallback(complete, this.tip, this._isAnimated());\n    }\n    update() {\n      if (this._popper) {\n        this._popper.update();\n      }\n    }\n\n    // Protected\n    _isWithContent() {\n      return Boolean(this._getTitle());\n    }\n    _getTipElement() {\n      if (!this.tip) {\n        this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n      }\n      return this.tip;\n    }\n    _createTipElement(content) {\n      const tip = this._getTemplateFactory(content).toHtml();\n\n      // TODO: remove this check in v6\n      if (!tip) {\n        return null;\n      }\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n      // TODO: v6 the following can be achieved with CSS only\n      tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n      const tipId = getUID(this.constructor.NAME).toString();\n      tip.setAttribute('id', tipId);\n      if (this._isAnimated()) {\n        tip.classList.add(CLASS_NAME_FADE$2);\n      }\n      return tip;\n    }\n    setContent(content) {\n      this._newContent = content;\n      if (this._isShown()) {\n        this._disposePopper();\n        this.show();\n      }\n    }\n    _getTemplateFactory(content) {\n      if (this._templateFactory) {\n        this._templateFactory.changeContent(content);\n      } else {\n        this._templateFactory = new TemplateFactory({\n          ...this._config,\n          // the `content` var has to be after `this._config`\n          // to override config.content in case of popover\n          content,\n          extraClass: this._resolvePossibleFunction(this._config.customClass)\n        });\n      }\n      return this._templateFactory;\n    }\n    _getContentForTemplate() {\n      return {\n        [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n      };\n    }\n    _getTitle() {\n      return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n    }\n\n    // Private\n    _initializeOnDelegatedTarget(event) {\n      return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n    }\n    _isAnimated() {\n      return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n    }\n    _isShown() {\n      return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n    }\n    _createPopper(tip) {\n      const placement = execute(this._config.placement, [this, tip, this._element]);\n      const attachment = AttachmentMap[placement.toUpperCase()];\n      return Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n      if (typeof offset === 'string') {\n        return offset.split(',').map(value => Number.parseInt(value, 10));\n      }\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n      return offset;\n    }\n    _resolvePossibleFunction(arg) {\n      return execute(arg, [this._element]);\n    }\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'preSetPlacement',\n          enabled: true,\n          phase: 'beforeMain',\n          fn: data => {\n            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n            this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n          }\n        }]\n      };\n      return {\n        ...defaultBsPopperConfig,\n        ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n      };\n    }\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n      for (const trigger of triggers) {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n            const context = this._initializeOnDelegatedTarget(event);\n            context.toggle();\n          });\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n          EventHandler.on(this._element, eventIn, this._config.selector, event => {\n            const context = this._initializeOnDelegatedTarget(event);\n            context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n            context._enter();\n          });\n          EventHandler.on(this._element, eventOut, this._config.selector, event => {\n            const context = this._initializeOnDelegatedTarget(event);\n            context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n            context._leave();\n          });\n        }\n      }\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n      EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n    }\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n      if (!title) {\n        return;\n      }\n      if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n        this._element.setAttribute('aria-label', title);\n      }\n      this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n      this._element.removeAttribute('title');\n    }\n    _enter() {\n      if (this._isShown() || this._isHovered) {\n        this._isHovered = true;\n        return;\n      }\n      this._isHovered = true;\n      this._setTimeout(() => {\n        if (this._isHovered) {\n          this.show();\n        }\n      }, this._config.delay.show);\n    }\n    _leave() {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n      this._isHovered = false;\n      this._setTimeout(() => {\n        if (!this._isHovered) {\n          this.hide();\n        }\n      }, this._config.delay.hide);\n    }\n    _setTimeout(handler, timeout) {\n      clearTimeout(this._timeout);\n      this._timeout = setTimeout(handler, timeout);\n    }\n    _isWithActiveTrigger() {\n      return Object.values(this._activeTrigger).includes(true);\n    }\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      for (const dataAttribute of Object.keys(dataAttributes)) {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n          delete dataAttributes[dataAttribute];\n        }\n      }\n      config = {\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config = this._mergeConfigObj(config);\n      config = this._configAfterMerge(config);\n      this._typeCheckConfig(config);\n      return config;\n    }\n    _configAfterMerge(config) {\n      config.container = config.container === false ? document.body : getElement(config.container);\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n      return config;\n    }\n    _getDelegateConfig() {\n      const config = {};\n      for (const [key, value] of Object.entries(this._config)) {\n        if (this.constructor.Default[key] !== value) {\n          config[key] = value;\n        }\n      }\n      config.selector = false;\n      config.trigger = 'manual';\n\n      // In the future can be replaced with:\n      // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n      // `Object.fromEntries(keysWithDifferentValues)`\n      return config;\n    }\n    _disposePopper() {\n      if (this._popper) {\n        this._popper.destroy();\n        this._popper = null;\n      }\n      if (this.tip) {\n        this.tip.remove();\n        this.tip = null;\n      }\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n  }\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$3 = 'popover';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  const Default$2 = {\n    ...Tooltip.Default,\n    content: '',\n    offset: [0, 8],\n    placement: 'right',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>',\n    trigger: 'click'\n  };\n  const DefaultType$2 = {\n    ...Tooltip.DefaultType,\n    content: '(null|string|element|function)'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n    static get DefaultType() {\n      return DefaultType$2;\n    }\n    static get NAME() {\n      return NAME$3;\n    }\n\n    // Overrides\n    _isWithContent() {\n      return this._getTitle() || this._getContent();\n    }\n\n    // Private\n    _getContentForTemplate() {\n      return {\n        [SELECTOR_TITLE]: this._getTitle(),\n        [SELECTOR_CONTENT]: this._getContent()\n      };\n    }\n    _getContent() {\n      return this._resolvePossibleFunction(this._config.content);\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n  }\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_CLICK = `click${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_TARGET_LINKS = '[href]';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const Default$1 = {\n    offset: null,\n    // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n    rootMargin: '0px 0px -25%',\n    smoothScroll: false,\n    target: null,\n    threshold: [0.1, 0.5, 1]\n  };\n  const DefaultType$1 = {\n    offset: '(number|null)',\n    // TODO v6 @deprecated, keep it for backwards compatibility reasons\n    rootMargin: 'string',\n    smoothScroll: 'boolean',\n    target: 'element',\n    threshold: 'array'\n  };\n\n  /**\n   * Class definition\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n\n      // this._element is the observablesContainer and config.target the menu links wrapper\n      this._targetLinks = new Map();\n      this._observableSections = new Map();\n      this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n      this._activeTarget = null;\n      this._observer = null;\n      this._previousScrollData = {\n        visibleEntryTop: 0,\n        parentScrollTop: 0\n      };\n      this.refresh(); // initialize\n    }\n\n    // Getters\n    static get Default() {\n      return Default$1;\n    }\n    static get DefaultType() {\n      return DefaultType$1;\n    }\n    static get NAME() {\n      return NAME$2;\n    }\n\n    // Public\n    refresh() {\n      this._initializeTargetsAndObservables();\n      this._maybeEnableSmoothScroll();\n      if (this._observer) {\n        this._observer.disconnect();\n      } else {\n        this._observer = this._getNewObserver();\n      }\n      for (const section of this._observableSections.values()) {\n        this._observer.observe(section);\n      }\n    }\n    dispose() {\n      this._observer.disconnect();\n      super.dispose();\n    }\n\n    // Private\n    _configAfterMerge(config) {\n      // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n      config.target = getElement(config.target) || document.body;\n\n      // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n      config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n      if (typeof config.threshold === 'string') {\n        config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n      }\n      return config;\n    }\n    _maybeEnableSmoothScroll() {\n      if (!this._config.smoothScroll) {\n        return;\n      }\n\n      // unregister any previous listeners\n      EventHandler.off(this._config.target, EVENT_CLICK);\n      EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n        const observableSection = this._observableSections.get(event.target.hash);\n        if (observableSection) {\n          event.preventDefault();\n          const root = this._rootElement || window;\n          const height = observableSection.offsetTop - this._element.offsetTop;\n          if (root.scrollTo) {\n            root.scrollTo({\n              top: height,\n              behavior: 'smooth'\n            });\n            return;\n          }\n\n          // Chrome 60 doesn't support `scrollTo`\n          root.scrollTop = height;\n        }\n      });\n    }\n    _getNewObserver() {\n      const options = {\n        root: this._rootElement,\n        threshold: this._config.threshold,\n        rootMargin: this._config.rootMargin\n      };\n      return new IntersectionObserver(entries => this._observerCallback(entries), options);\n    }\n\n    // The logic of selection\n    _observerCallback(entries) {\n      const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n      const activate = entry => {\n        this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n        this._process(targetElement(entry));\n      };\n      const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n      const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n      this._previousScrollData.parentScrollTop = parentScrollTop;\n      for (const entry of entries) {\n        if (!entry.isIntersecting) {\n          this._activeTarget = null;\n          this._clearActiveClass(targetElement(entry));\n          continue;\n        }\n        const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n        // if we are scrolling down, pick the bigger offsetTop\n        if (userScrollsDown && entryIsLowerThanPrevious) {\n          activate(entry);\n          // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n          if (!parentScrollTop) {\n            return;\n          }\n          continue;\n        }\n\n        // if we are scrolling up, pick the smallest offsetTop\n        if (!userScrollsDown && !entryIsLowerThanPrevious) {\n          activate(entry);\n        }\n      }\n    }\n    _initializeTargetsAndObservables() {\n      this._targetLinks = new Map();\n      this._observableSections = new Map();\n      const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n      for (const anchor of targetLinks) {\n        // ensure that the anchor has an id and is not disabled\n        if (!anchor.hash || isDisabled(anchor)) {\n          continue;\n        }\n        const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n        // ensure that the observableSection exists & is visible\n        if (isVisible(observableSection)) {\n          this._targetLinks.set(decodeURI(anchor.hash), anchor);\n          this._observableSections.set(anchor.hash, observableSection);\n        }\n      }\n    }\n    _process(target) {\n      if (this._activeTarget === target) {\n        return;\n      }\n      this._clearActiveClass(this._config.target);\n      this._activeTarget = target;\n      target.classList.add(CLASS_NAME_ACTIVE$1);\n      this._activateParents(target);\n      EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n    _activateParents(target) {\n      // Activate dropdown parents\n      if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n        return;\n      }\n      for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n          item.classList.add(CLASS_NAME_ACTIVE$1);\n        }\n      }\n    }\n    _clearActiveClass(parent) {\n      parent.classList.remove(CLASS_NAME_ACTIVE$1);\n      const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);\n      for (const node of activeNodes) {\n        node.classList.remove(CLASS_NAME_ACTIVE$1);\n      }\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {\n    for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n      ScrollSpy.getOrCreateInstance(spy);\n    }\n  });\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const HOME_KEY = 'Home';\n  const END_KEY = 'End';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const CLASS_DROPDOWN = 'dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\n  const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\n  const SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\n  const SELECTOR_OUTER = '.nav-item, .list-group-item';\n  const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // TODO: could only be `tab` in v6\n  const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\n  const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n  /**\n   * Class definition\n   */\n\n  class Tab extends BaseComponent {\n    constructor(element) {\n      super(element);\n      this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n      if (!this._parent) {\n        return;\n        // TODO: should throw exception in v6\n        // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n      }\n\n      // Set up initial aria attributes\n      this._setInitialAttributes(this._parent, this._getChildren());\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    }\n\n    // Public\n    show() {\n      // Shows this elem and deactivate the active sibling if exists\n      const innerElem = this._element;\n      if (this._elemIsActive(innerElem)) {\n        return;\n      }\n\n      // Search for active tab on same parent to deactivate it\n      const active = this._getActiveElem();\n      const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\n        relatedTarget: innerElem\n      }) : null;\n      const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\n        relatedTarget: active\n      });\n      if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n        return;\n      }\n      this._deactivate(active, innerElem);\n      this._activate(innerElem, active);\n    }\n\n    // Private\n    _activate(element, relatedElem) {\n      if (!element) {\n        return;\n      }\n      element.classList.add(CLASS_NAME_ACTIVE);\n      this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n      const complete = () => {\n        if (element.getAttribute('role') !== 'tab') {\n          element.classList.add(CLASS_NAME_SHOW$1);\n          return;\n        }\n        element.removeAttribute('tabindex');\n        element.setAttribute('aria-selected', true);\n        this._toggleDropDown(element, true);\n        EventHandler.trigger(element, EVENT_SHOWN$1, {\n          relatedTarget: relatedElem\n        });\n      };\n      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n    }\n    _deactivate(element, relatedElem) {\n      if (!element) {\n        return;\n      }\n      element.classList.remove(CLASS_NAME_ACTIVE);\n      element.blur();\n      this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n      const complete = () => {\n        if (element.getAttribute('role') !== 'tab') {\n          element.classList.remove(CLASS_NAME_SHOW$1);\n          return;\n        }\n        element.setAttribute('aria-selected', false);\n        element.setAttribute('tabindex', '-1');\n        this._toggleDropDown(element, false);\n        EventHandler.trigger(element, EVENT_HIDDEN$1, {\n          relatedTarget: relatedElem\n        });\n      };\n      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n    }\n    _keydown(event) {\n      if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {\n        return;\n      }\n      event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n      event.preventDefault();\n      const children = this._getChildren().filter(element => !isDisabled(element));\n      let nextActiveElement;\n      if ([HOME_KEY, END_KEY].includes(event.key)) {\n        nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n      } else {\n        const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n        nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n      }\n      if (nextActiveElement) {\n        nextActiveElement.focus({\n          preventScroll: true\n        });\n        Tab.getOrCreateInstance(nextActiveElement).show();\n      }\n    }\n    _getChildren() {\n      // collection of inner elements\n      return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n    }\n    _getActiveElem() {\n      return this._getChildren().find(child => this._elemIsActive(child)) || null;\n    }\n    _setInitialAttributes(parent, children) {\n      this._setAttributeIfNotExists(parent, 'role', 'tablist');\n      for (const child of children) {\n        this._setInitialAttributesOnChild(child);\n      }\n    }\n    _setInitialAttributesOnChild(child) {\n      child = this._getInnerElement(child);\n      const isActive = this._elemIsActive(child);\n      const outerElem = this._getOuterElement(child);\n      child.setAttribute('aria-selected', isActive);\n      if (outerElem !== child) {\n        this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n      }\n      if (!isActive) {\n        child.setAttribute('tabindex', '-1');\n      }\n      this._setAttributeIfNotExists(child, 'role', 'tab');\n\n      // set attributes to the related panel too\n      this._setInitialAttributesOnTargetPanel(child);\n    }\n    _setInitialAttributesOnTargetPanel(child) {\n      const target = SelectorEngine.getElementFromSelector(child);\n      if (!target) {\n        return;\n      }\n      this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n      if (child.id) {\n        this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n      }\n    }\n    _toggleDropDown(element, open) {\n      const outerElem = this._getOuterElement(element);\n      if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n        return;\n      }\n      const toggle = (selector, className) => {\n        const element = SelectorEngine.findOne(selector, outerElem);\n        if (element) {\n          element.classList.toggle(className, open);\n        }\n      };\n      toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n      toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\n      outerElem.setAttribute('aria-expanded', open);\n    }\n    _setAttributeIfNotExists(element, attribute, value) {\n      if (!element.hasAttribute(attribute)) {\n        element.setAttribute(attribute, value);\n      }\n    }\n    _elemIsActive(elem) {\n      return elem.classList.contains(CLASS_NAME_ACTIVE);\n    }\n\n    // Try to get the inner element (usually the .nav-link)\n    _getInnerElement(elem) {\n      return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n    }\n\n    // Try to get the outer element (usually the .nav-item)\n    _getOuterElement(elem) {\n      return elem.closest(SELECTOR_OUTER) || elem;\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n        if (typeof config !== 'string') {\n          return;\n        }\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n    if (isDisabled(this)) {\n      return;\n    }\n    Tab.getOrCreateInstance(this).show();\n  });\n\n  /**\n   * Initialize on focus\n   */\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n      Tab.getOrCreateInstance(element);\n    }\n  });\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  /**\n   * Constants\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n\n  /**\n   * Class definition\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element, config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n      this._setListeners();\n    }\n\n    // Getters\n    static get Default() {\n      return Default;\n    }\n    static get DefaultType() {\n      return DefaultType;\n    }\n    static get NAME() {\n      return NAME;\n    }\n\n    // Public\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n      this._clearTimeout();\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n        this._maybeScheduleHide();\n      };\n      this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n      reflow(this._element);\n      this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n    hide() {\n      if (!this.isShown()) {\n        return;\n      }\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n        this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n      this._element.classList.add(CLASS_NAME_SHOWING);\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n    dispose() {\n      this._clearTimeout();\n      if (this.isShown()) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n      super.dispose();\n    }\n    isShown() {\n      return this._element.classList.contains(CLASS_NAME_SHOW);\n    }\n\n    // Private\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          {\n            this._hasMouseInteraction = isInteracting;\n            break;\n          }\n        case 'focusin':\n        case 'focusout':\n          {\n            this._hasKeyboardInteraction = isInteracting;\n            break;\n          }\n      }\n      if (isInteracting) {\n        this._clearTimeout();\n        return;\n      }\n      const nextElement = event.relatedTarget;\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n      this._maybeScheduleHide();\n    }\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    }\n\n    // Static\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n          data[config](this);\n        }\n      });\n    }\n  }\n\n  /**\n   * Data API implementation\n   */\n\n  enableDismissTrigger(Toast);\n\n  /**\n   * jQuery\n   */\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n}));\n//# sourceMappingURL=bootstrap.js.map\n"
  },
  {
    "path": "public/assets/css/demo.css",
    "content": "/*\n* demo.css\n* File include item demo only specific css only\n******************************************************************************/\n\n.menu .app-brand.demo {\n  height: 64px;\n  margin-top: 12px;\n}\n\n.app-brand-logo.demo svg {\n  width: 22px;\n  height: 38px;\n}\n\n.app-brand-text.demo {\n  font-size: 1.75rem;\n  letter-spacing: -0.5px;\n  text-transform: lowercase;\n}\n\n/* ! For .layout-navbar-fixed added fix padding top to .layout-page */\n/* Detached navbar */\n.layout-navbar-fixed .layout-wrapper:not(.layout-horizontal):not(.layout-without-menu) .layout-page {\n  padding-top: 76px !important;\n}\n/* Default navbar */\n.layout-navbar-fixed .layout-wrapper:not(.layout-without-menu) .layout-page {\n  padding-top: 64px !important;\n}\n.docs-page .layout-navbar-fixed.layout-wrapper:not(.layout-without-menu) .layout-page,\n.docs-page .layout-menu-fixed.layout-wrapper:not(.layout-without-menu) .layout-page {\n  padding-top: 62px !important;\n}\n\n/* Navbar page z-index issue solution */\n.content-wrapper .navbar {\n  z-index: auto;\n}\n\n/*\n* Content\n******************************************************************************/\n\n.demo-blocks > * {\n  display: block !important;\n}\n\n.demo-inline-spacing > * {\n  margin: 1rem 0.375rem 0 0 !important;\n}\n\n/* ? .demo-vertical-spacing class is used to have vertical margins between elements. To remove margin-top from the first-child, use .demo-only-element class with .demo-vertical-spacing class. For example, we have used this class in forms-input-groups.html file. */\n.demo-vertical-spacing > * {\n  margin-top: 1rem !important;\n  margin-bottom: 0 !important;\n}\n.demo-vertical-spacing.demo-only-element > :first-child {\n  margin-top: 0 !important;\n}\n\n.demo-vertical-spacing-lg > * {\n  margin-top: 1.875rem !important;\n  margin-bottom: 0 !important;\n}\n.demo-vertical-spacing-lg.demo-only-element > :first-child {\n  margin-top: 0 !important;\n}\n\n.demo-vertical-spacing-xl > * {\n  margin-top: 5rem !important;\n  margin-bottom: 0 !important;\n}\n.demo-vertical-spacing-xl.demo-only-element > :first-child {\n  margin-top: 0 !important;\n}\n\n.rtl-only {\n  display: none !important;\n  text-align: left !important;\n  direction: ltr !important;\n}\n\n[dir='rtl'] .rtl-only {\n  display: block !important;\n}\n\n/* Dropdown buttons going out of small screens */\n@media (max-width: 576px) {\n  #dropdown-variation-demo .btn-group .text-truncate {\n    width: 231px;\n    position: relative;\n  }\n  #dropdown-variation-demo .btn-group .text-truncate::after {\n    position: absolute;\n    top: 45%;\n    right: 0.65rem;\n  }\n}\n\n/*\n* Layout demo\n******************************************************************************/\n\n.layout-demo-wrapper {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  margin-top: 1rem;\n}\n.layout-demo-placeholder img {\n  width: 900px;\n}\n.layout-demo-info {\n  text-align: center;\n  margin-top: 1rem;\n}\n"
  },
  {
    "path": "public/assets/js/config.js",
    "content": "/**\n * Config\n * -------------------------------------------------------------------------------------\n * ! IMPORTANT: Make sure you clear the browser local storage In order to see the config changes in the template.\n * ! To clear local storage: (https://www.leadshook.com/help/how-to-clear-local-storage-in-google-chrome-browser/).\n */\n\n'use strict';\n\n// JS global variables\nlet config = {\n  colors: {\n    primary: '#696cff',\n    secondary: '#8592a3',\n    success: '#71dd37',\n    info: '#03c3ec',\n    warning: '#ffab00',\n    danger: '#ff3e1d',\n    dark: '#233446',\n    black: '#000',\n    white: '#fff',\n    cardColor: '#fff',\n    bodyBg: '#f5f5f9',\n    bodyColor: '#697a8d',\n    headingColor: '#566a7f',\n    textMuted: '#a1acb8',\n    borderColor: '#eceef1'\n  }\n};\n"
  },
  {
    "path": "public/assets/js/dashboards-analytics.js",
    "content": "/**\n * Dashboard Analytics\n */\n\n'use strict';\n\n(function () {\n  let cardColor, headingColor, axisColor, shadeColor, borderColor;\n\n  cardColor = config.colors.cardColor;\n  headingColor = config.colors.headingColor;\n  axisColor = config.colors.axisColor;\n  borderColor = config.colors.borderColor;\n\n  // Total Revenue Report Chart - Bar Chart\n  // --------------------------------------------------------------------\n  const totalRevenueChartEl = document.querySelector('#totalRevenueChart'),\n    totalRevenueChartOptions = {\n      series: [\n        {\n          name: '2021',\n          data: [18, 7, 15, 29, 18, 12, 9]\n        },\n        {\n          name: '2020',\n          data: [-13, -18, -9, -14, -5, -17, -15]\n        }\n      ],\n      chart: {\n        height: 300,\n        stacked: true,\n        type: 'bar',\n        toolbar: { show: false }\n      },\n      plotOptions: {\n        bar: {\n          horizontal: false,\n          columnWidth: '33%',\n          borderRadius: 12,\n          startingShape: 'rounded',\n          endingShape: 'rounded'\n        }\n      },\n      colors: [config.colors.primary, config.colors.info],\n      dataLabels: {\n        enabled: false\n      },\n      stroke: {\n        curve: 'smooth',\n        width: 6,\n        lineCap: 'round',\n        colors: [cardColor]\n      },\n      legend: {\n        show: true,\n        horizontalAlign: 'left',\n        position: 'top',\n        markers: {\n          height: 8,\n          width: 8,\n          radius: 12,\n          offsetX: -3\n        },\n        labels: {\n          colors: axisColor\n        },\n        itemMargin: {\n          horizontal: 10\n        }\n      },\n      grid: {\n        borderColor: borderColor,\n        padding: {\n          top: 0,\n          bottom: -8,\n          left: 20,\n          right: 20\n        }\n      },\n      xaxis: {\n        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],\n        labels: {\n          style: {\n            fontSize: '13px',\n            colors: axisColor\n          }\n        },\n        axisTicks: {\n          show: false\n        },\n        axisBorder: {\n          show: false\n        }\n      },\n      yaxis: {\n        labels: {\n          style: {\n            fontSize: '13px',\n            colors: axisColor\n          }\n        }\n      },\n      responsive: [\n        {\n          breakpoint: 1700,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 10,\n                columnWidth: '32%'\n              }\n            }\n          }\n        },\n        {\n          breakpoint: 1580,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 10,\n                columnWidth: '35%'\n              }\n            }\n          }\n        },\n        {\n          breakpoint: 1440,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 10,\n                columnWidth: '42%'\n              }\n            }\n          }\n        },\n        {\n          breakpoint: 1300,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 10,\n                columnWidth: '48%'\n              }\n            }\n          }\n        },\n        {\n          breakpoint: 1200,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 10,\n                columnWidth: '40%'\n              }\n            }\n          }\n        },\n        {\n          breakpoint: 1040,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 11,\n                columnWidth: '48%'\n              }\n            }\n          }\n        },\n        {\n          breakpoint: 991,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 10,\n                columnWidth: '30%'\n              }\n            }\n          }\n        },\n        {\n          breakpoint: 840,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 10,\n                columnWidth: '35%'\n              }\n            }\n          }\n        },\n        {\n          breakpoint: 768,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 10,\n                columnWidth: '28%'\n              }\n            }\n          }\n        },\n        {\n          breakpoint: 640,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 10,\n                columnWidth: '32%'\n              }\n            }\n          }\n        },\n        {\n          breakpoint: 576,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 10,\n                columnWidth: '37%'\n              }\n            }\n          }\n        },\n        {\n          breakpoint: 480,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 10,\n                columnWidth: '45%'\n              }\n            }\n          }\n        },\n        {\n          breakpoint: 420,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 10,\n                columnWidth: '52%'\n              }\n            }\n          }\n        },\n        {\n          breakpoint: 380,\n          options: {\n            plotOptions: {\n              bar: {\n                borderRadius: 10,\n                columnWidth: '60%'\n              }\n            }\n          }\n        }\n      ],\n      states: {\n        hover: {\n          filter: {\n            type: 'none'\n          }\n        },\n        active: {\n          filter: {\n            type: 'none'\n          }\n        }\n      }\n    };\n  if (typeof totalRevenueChartEl !== undefined && totalRevenueChartEl !== null) {\n    const totalRevenueChart = new ApexCharts(totalRevenueChartEl, totalRevenueChartOptions);\n    totalRevenueChart.render();\n  }\n\n  // Growth Chart - Radial Bar Chart\n  // --------------------------------------------------------------------\n  const growthChartEl = document.querySelector('#growthChart'),\n    growthChartOptions = {\n      series: [78],\n      labels: ['Growth'],\n      chart: {\n        height: 240,\n        type: 'radialBar'\n      },\n      plotOptions: {\n        radialBar: {\n          size: 150,\n          offsetY: 10,\n          startAngle: -150,\n          endAngle: 150,\n          hollow: {\n            size: '55%'\n          },\n          track: {\n            background: cardColor,\n            strokeWidth: '100%'\n          },\n          dataLabels: {\n            name: {\n              offsetY: 15,\n              color: headingColor,\n              fontSize: '15px',\n              fontWeight: '500',\n              fontFamily: 'Public Sans'\n            },\n            value: {\n              offsetY: -25,\n              color: headingColor,\n              fontSize: '22px',\n              fontWeight: '500',\n              fontFamily: 'Public Sans'\n            }\n          }\n        }\n      },\n      colors: [config.colors.primary],\n      fill: {\n        type: 'gradient',\n        gradient: {\n          shade: 'dark',\n          shadeIntensity: 0.5,\n          gradientToColors: [config.colors.primary],\n          inverseColors: true,\n          opacityFrom: 1,\n          opacityTo: 0.6,\n          stops: [30, 70, 100]\n        }\n      },\n      stroke: {\n        dashArray: 5\n      },\n      grid: {\n        padding: {\n          top: -35,\n          bottom: -10\n        }\n      },\n      states: {\n        hover: {\n          filter: {\n            type: 'none'\n          }\n        },\n        active: {\n          filter: {\n            type: 'none'\n          }\n        }\n      }\n    };\n  if (typeof growthChartEl !== undefined && growthChartEl !== null) {\n    const growthChart = new ApexCharts(growthChartEl, growthChartOptions);\n    growthChart.render();\n  }\n\n  // Profit Report Line Chart\n  // --------------------------------------------------------------------\n  const profileReportChartEl = document.querySelector('#profileReportChart'),\n    profileReportChartConfig = {\n      chart: {\n        height: 80,\n        // width: 175,\n        type: 'line',\n        toolbar: {\n          show: false\n        },\n        dropShadow: {\n          enabled: true,\n          top: 10,\n          left: 5,\n          blur: 3,\n          color: config.colors.warning,\n          opacity: 0.15\n        },\n        sparkline: {\n          enabled: true\n        }\n      },\n      grid: {\n        show: false,\n        padding: {\n          right: 8\n        }\n      },\n      colors: [config.colors.warning],\n      dataLabels: {\n        enabled: false\n      },\n      stroke: {\n        width: 5,\n        curve: 'smooth'\n      },\n      series: [\n        {\n          data: [110, 270, 145, 245, 205, 285]\n        }\n      ],\n      xaxis: {\n        show: false,\n        lines: {\n          show: false\n        },\n        labels: {\n          show: false\n        },\n        axisBorder: {\n          show: false\n        }\n      },\n      yaxis: {\n        show: false\n      }\n    };\n  if (typeof profileReportChartEl !== undefined && profileReportChartEl !== null) {\n    const profileReportChart = new ApexCharts(profileReportChartEl, profileReportChartConfig);\n    profileReportChart.render();\n  }\n\n  // Order Statistics Chart\n  // --------------------------------------------------------------------\n  const chartOrderStatistics = document.querySelector('#orderStatisticsChart'),\n    orderChartConfig = {\n      chart: {\n        height: 165,\n        width: 130,\n        type: 'donut'\n      },\n      labels: ['Electronic', 'Sports', 'Decor', 'Fashion'],\n      series: [85, 15, 50, 50],\n      colors: [config.colors.primary, config.colors.secondary, config.colors.info, config.colors.success],\n      stroke: {\n        width: 5,\n        colors: [cardColor]\n      },\n      dataLabels: {\n        enabled: false,\n        formatter: function (val, opt) {\n          return parseInt(val) + '%';\n        }\n      },\n      legend: {\n        show: false\n      },\n      grid: {\n        padding: {\n          top: 0,\n          bottom: 0,\n          right: 15\n        }\n      },\n      states: {\n        hover: {\n          filter: { type: 'none' }\n        },\n        active: {\n          filter: { type: 'none' }\n        }\n      },\n      plotOptions: {\n        pie: {\n          donut: {\n            size: '75%',\n            labels: {\n              show: true,\n              value: {\n                fontSize: '1.5rem',\n                fontFamily: 'Public Sans',\n                color: headingColor,\n                offsetY: -15,\n                formatter: function (val) {\n                  return parseInt(val) + '%';\n                }\n              },\n              name: {\n                offsetY: 20,\n                fontFamily: 'Public Sans'\n              },\n              total: {\n                show: true,\n                fontSize: '0.8125rem',\n                color: axisColor,\n                label: 'Weekly',\n                formatter: function (w) {\n                  return '38%';\n                }\n              }\n            }\n          }\n        }\n      }\n    };\n  if (typeof chartOrderStatistics !== undefined && chartOrderStatistics !== null) {\n    const statisticsChart = new ApexCharts(chartOrderStatistics, orderChartConfig);\n    statisticsChart.render();\n  }\n\n  // Income Chart - Area chart\n  // --------------------------------------------------------------------\n  const incomeChartEl = document.querySelector('#incomeChart'),\n    incomeChartConfig = {\n      series: [\n        {\n          data: [24, 21, 30, 22, 42, 26, 35, 29]\n        }\n      ],\n      chart: {\n        height: 215,\n        parentHeightOffset: 0,\n        parentWidthOffset: 0,\n        toolbar: {\n          show: false\n        },\n        type: 'area'\n      },\n      dataLabels: {\n        enabled: false\n      },\n      stroke: {\n        width: 2,\n        curve: 'smooth'\n      },\n      legend: {\n        show: false\n      },\n      markers: {\n        size: 6,\n        colors: 'transparent',\n        strokeColors: 'transparent',\n        strokeWidth: 4,\n        discrete: [\n          {\n            fillColor: config.colors.white,\n            seriesIndex: 0,\n            dataPointIndex: 7,\n            strokeColor: config.colors.primary,\n            strokeWidth: 2,\n            size: 6,\n            radius: 8\n          }\n        ],\n        hover: {\n          size: 7\n        }\n      },\n      colors: [config.colors.primary],\n      fill: {\n        type: 'gradient',\n        gradient: {\n          shade: shadeColor,\n          shadeIntensity: 0.6,\n          opacityFrom: 0.5,\n          opacityTo: 0.25,\n          stops: [0, 95, 100]\n        }\n      },\n      grid: {\n        borderColor: borderColor,\n        strokeDashArray: 3,\n        padding: {\n          top: -20,\n          bottom: -8,\n          left: -10,\n          right: 8\n        }\n      },\n      xaxis: {\n        categories: ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'],\n        axisBorder: {\n          show: false\n        },\n        axisTicks: {\n          show: false\n        },\n        labels: {\n          show: true,\n          style: {\n            fontSize: '13px',\n            colors: axisColor\n          }\n        }\n      },\n      yaxis: {\n        labels: {\n          show: false\n        },\n        min: 10,\n        max: 50,\n        tickAmount: 4\n      }\n    };\n  if (typeof incomeChartEl !== undefined && incomeChartEl !== null) {\n    const incomeChart = new ApexCharts(incomeChartEl, incomeChartConfig);\n    incomeChart.render();\n  }\n\n  // Expenses Mini Chart - Radial Chart\n  // --------------------------------------------------------------------\n  const weeklyExpensesEl = document.querySelector('#expensesOfWeek'),\n    weeklyExpensesConfig = {\n      series: [65],\n      chart: {\n        width: 60,\n        height: 60,\n        type: 'radialBar'\n      },\n      plotOptions: {\n        radialBar: {\n          startAngle: 0,\n          endAngle: 360,\n          strokeWidth: '8',\n          hollow: {\n            margin: 2,\n            size: '45%'\n          },\n          track: {\n            strokeWidth: '50%',\n            background: borderColor\n          },\n          dataLabels: {\n            show: true,\n            name: {\n              show: false\n            },\n            value: {\n              formatter: function (val) {\n                return '$' + parseInt(val);\n              },\n              offsetY: 5,\n              color: '#697a8d',\n              fontSize: '13px',\n              show: true\n            }\n          }\n        }\n      },\n      fill: {\n        type: 'solid',\n        colors: config.colors.primary\n      },\n      stroke: {\n        lineCap: 'round'\n      },\n      grid: {\n        padding: {\n          top: -10,\n          bottom: -15,\n          left: -10,\n          right: -10\n        }\n      },\n      states: {\n        hover: {\n          filter: {\n            type: 'none'\n          }\n        },\n        active: {\n          filter: {\n            type: 'none'\n          }\n        }\n      }\n    };\n  if (typeof weeklyExpensesEl !== undefined && weeklyExpensesEl !== null) {\n    const weeklyExpenses = new ApexCharts(weeklyExpensesEl, weeklyExpensesConfig);\n    weeklyExpenses.render();\n  }\n})();\n"
  },
  {
    "path": "public/assets/js/extended-ui-perfect-scrollbar.js",
    "content": "/**\n * Perfect Scrollbar\n */\n'use strict';\n\ndocument.addEventListener('DOMContentLoaded', function () {\n  (function () {\n    const verticalExample = document.getElementById('vertical-example'),\n      horizontalExample = document.getElementById('horizontal-example'),\n      horizVertExample = document.getElementById('both-scrollbars-example');\n\n    // Vertical Example\n    // --------------------------------------------------------------------\n    if (verticalExample) {\n      new PerfectScrollbar(verticalExample, {\n        wheelPropagation: false\n      });\n    }\n\n    // Horizontal Example\n    // --------------------------------------------------------------------\n    if (horizontalExample) {\n      new PerfectScrollbar(horizontalExample, {\n        wheelPropagation: false,\n        suppressScrollY: true\n      });\n    }\n\n    // Both vertical and Horizontal Example\n    // --------------------------------------------------------------------\n    if (horizVertExample) {\n      new PerfectScrollbar(horizVertExample, {\n        wheelPropagation: false\n      });\n    }\n  })();\n});\n"
  },
  {
    "path": "public/assets/js/form-basic-inputs.js",
    "content": "/**\n * Form Basic Inputs\n */\n\n'use strict';\n\n(function () {\n  // Indeterminate checkbox\n  const checkbox = document.getElementById('defaultCheck2');\n  checkbox.indeterminate = true;\n})();\n"
  },
  {
    "path": "public/assets/js/main.js",
    "content": "/**\n * Main\n */\n\n'use strict';\n\nlet menu, animate;\n\n(function () {\n  // Initialize menu\n  //-----------------\n\n  let layoutMenuEl = document.querySelectorAll('#layout-menu');\n  layoutMenuEl.forEach(function (element) {\n    menu = new Menu(element, {\n      orientation: 'vertical',\n      closeChildren: false\n    });\n    // Change parameter to true if you want scroll animation\n    window.Helpers.scrollToActive((animate = false));\n    window.Helpers.mainMenu = menu;\n  });\n\n  // Initialize menu togglers and bind click on each\n  let menuToggler = document.querySelectorAll('.layout-menu-toggle');\n  menuToggler.forEach(item => {\n    item.addEventListener('click', event => {\n      event.preventDefault();\n      window.Helpers.toggleCollapsed();\n    });\n  });\n\n  // Display menu toggle (layout-menu-toggle) on hover with delay\n  let delay = function (elem, callback) {\n    let timeout = null;\n    elem.onmouseenter = function () {\n      // Set timeout to be a timer which will invoke callback after 300ms (not for small screen)\n      if (!Helpers.isSmallScreen()) {\n        timeout = setTimeout(callback, 300);\n      } else {\n        timeout = setTimeout(callback, 0);\n      }\n    };\n\n    elem.onmouseleave = function () {\n      // Clear any timers set to timeout\n      document.querySelector('.layout-menu-toggle').classList.remove('d-block');\n      clearTimeout(timeout);\n    };\n  };\n  if (document.getElementById('layout-menu')) {\n    delay(document.getElementById('layout-menu'), function () {\n      // not for small screen\n      if (!Helpers.isSmallScreen()) {\n        document.querySelector('.layout-menu-toggle').classList.add('d-block');\n      }\n    });\n  }\n\n  // Display in main menu when menu scrolls\n  let menuInnerContainer = document.getElementsByClassName('menu-inner'),\n    menuInnerShadow = document.getElementsByClassName('menu-inner-shadow')[0];\n  if (menuInnerContainer.length > 0 && menuInnerShadow) {\n    menuInnerContainer[0].addEventListener('ps-scroll-y', function () {\n      if (this.querySelector('.ps__thumb-y').offsetTop) {\n        menuInnerShadow.style.display = 'block';\n      } else {\n        menuInnerShadow.style.display = 'none';\n      }\n    });\n  }\n\n  // Init helpers & misc\n  // --------------------\n\n  // Init BS Tooltip\n  const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'));\n  tooltipTriggerList.map(function (tooltipTriggerEl) {\n    return new bootstrap.Tooltip(tooltipTriggerEl);\n  });\n\n  // Accordion active class\n  const accordionActiveFunction = function (e) {\n    if (e.type == 'show.bs.collapse' || e.type == 'show.bs.collapse') {\n      e.target.closest('.accordion-item').classList.add('active');\n    } else {\n      e.target.closest('.accordion-item').classList.remove('active');\n    }\n  };\n\n  const accordionTriggerList = [].slice.call(document.querySelectorAll('.accordion'));\n  const accordionList = accordionTriggerList.map(function (accordionTriggerEl) {\n    accordionTriggerEl.addEventListener('show.bs.collapse', accordionActiveFunction);\n    accordionTriggerEl.addEventListener('hide.bs.collapse', accordionActiveFunction);\n  });\n\n  // Auto update layout based on screen size\n  window.Helpers.setAutoUpdate(true);\n\n  // Toggle Password Visibility\n  window.Helpers.initPasswordToggle();\n\n  // Speech To Text\n  window.Helpers.initSpeechToText();\n\n  // Manage menu expanded/collapsed with templateCustomizer & local storage\n  //------------------------------------------------------------------\n\n  // If current layout is horizontal OR current window screen is small (overlay menu) than return from here\n  if (window.Helpers.isSmallScreen()) {\n    return;\n  }\n\n  // If current layout is vertical and current window screen is > small\n\n  // Auto update menu collapsed/expanded based on the themeConfig\n  window.Helpers.setCollapsed(true, false);\n})();\n"
  },
  {
    "path": "public/assets/js/pages-account-settings-account.js",
    "content": "/**\n * Account Settings - Account\n */\n\n'use strict';\n\ndocument.addEventListener('DOMContentLoaded', function (e) {\n  (function () {\n    const deactivateAcc = document.querySelector('#formAccountDeactivation');\n\n    // Update/reset user image of account page\n    let accountUserImage = document.getElementById('uploadedAvatar');\n    const fileInput = document.querySelector('.account-file-input'),\n      resetFileInput = document.querySelector('.account-image-reset');\n\n    if (accountUserImage) {\n      const resetImage = accountUserImage.src;\n      fileInput.onchange = () => {\n        if (fileInput.files[0]) {\n          accountUserImage.src = window.URL.createObjectURL(fileInput.files[0]);\n        }\n      };\n      resetFileInput.onclick = () => {\n        fileInput.value = '';\n        accountUserImage.src = resetImage;\n      };\n    }\n  })();\n});\n"
  },
  {
    "path": "public/assets/js/ui-modals.js",
    "content": "/**\n * UI Modals\n */\n\n'use strict';\n\n(function () {\n  // On hiding modal, remove iframe video/audio to stop playing\n  const youTubeModal = document.querySelector('#youTubeModal'),\n    youTubeModalVideo = youTubeModal.querySelector('iframe');\n  youTubeModal.addEventListener('hidden.bs.modal', function () {\n    youTubeModalVideo.setAttribute('src', '');\n  });\n\n  // Function to get and auto play youTube video\n  const autoPlayYouTubeModal = function () {\n    const modalTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"modal\"]'));\n    modalTriggerList.map(function (modalTriggerEl) {\n      modalTriggerEl.onclick = function () {\n        const theModal = this.getAttribute('data-bs-target'),\n          videoSRC = this.getAttribute('data-theVideo'),\n          videoSRCauto = `${videoSRC}?autoplay=1`,\n          modalVideo = document.querySelector(`${theModal} iframe`);\n        if (modalVideo) {\n          modalVideo.setAttribute('src', videoSRCauto);\n        }\n      };\n    });\n  };\n\n  // Calling function on load\n  autoPlayYouTubeModal();\n})();\n"
  },
  {
    "path": "public/assets/js/ui-popover.js",
    "content": "// /**\n//  * UI Tooltips & Popovers\n//  */\n\n'use strict';\n\n(function () {\n  const popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"popover\"]'));\n  const popoverList = popoverTriggerList.map(function (popoverTriggerEl) {\n    // added { html: true, sanitize: false } option to render button in content area of popover\n    return new bootstrap.Popover(popoverTriggerEl, { html: true, sanitize: false });\n  });\n})();\n"
  },
  {
    "path": "public/assets/js/ui-toasts.js",
    "content": "/**\n * UI Toasts\n */\n\n'use strict';\n\n(function () {\n  // Bootstrap toasts example\n  // --------------------------------------------------------------------\n  const toastPlacementExample = document.querySelector('.toast-placement-ex'),\n    toastPlacementBtn = document.querySelector('#showToastPlacement');\n  let selectedType, selectedPlacement, toastPlacement;\n\n  // Dispose toast when open another\n  function toastDispose(toast) {\n    if (toast && toast._element !== null) {\n      if (toastPlacementExample) {\n        toastPlacementExample.classList.remove(selectedType);\n        DOMTokenList.prototype.remove.apply(toastPlacementExample.classList, selectedPlacement);\n      }\n      toast.dispose();\n    }\n  }\n  // Placement Button click\n  if (toastPlacementBtn) {\n    toastPlacementBtn.onclick = function () {\n      if (toastPlacement) {\n        toastDispose(toastPlacement);\n      }\n      selectedType = document.querySelector('#selectTypeOpt').value;\n      selectedPlacement = document.querySelector('#selectPlacement').value.split(' ');\n\n      toastPlacementExample.classList.add(selectedType);\n      DOMTokenList.prototype.add.apply(toastPlacementExample.classList, selectedPlacement);\n      toastPlacement = new bootstrap.Toast(toastPlacementExample);\n      toastPlacement.show();\n    };\n  }\n})();\n"
  },
  {
    "path": "public/assets/notify.js",
    "content": "/* Notify.js - http://notifyjs.com/ Copyright (c) 2015 MIT */\n(function (factory) {\n\t// UMD start\n\t// https://github.com/umdjs/umd/blob/master/jqueryPluginCommonjs.js\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof module === 'object' && module.exports) {\n\t\t// Node/CommonJS\n\t\tmodule.exports = function( root, jQuery ) {\n\t\t\tif ( jQuery === undefined ) {\n\t\t\t\t// require('jQuery') returns a factory that requires window to\n\t\t\t\t// build a jQuery instance, we normalize how we use modules\n\t\t\t\t// that require this pattern but the window provided is a noop\n\t\t\t\t// if it's defined (how jquery works)\n\t\t\t\tif ( typeof window !== 'undefined' ) {\n\t\t\t\t\tjQuery = require('jquery');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tjQuery = require('jquery')(root);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfactory(jQuery);\n\t\t\treturn jQuery;\n\t\t};\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\t//IE8 indexOf polyfill\n\tvar indexOf = [].indexOf || function(item) {\n\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\tif (i in this && this[i] === item) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t};\n\n\tvar pluginName = \"notify\";\n\tvar pluginClassName = pluginName + \"js\";\n\tvar blankFieldName = pluginName + \"!blank\";\n\n\tvar positions = {\n\t\tt: \"top\",\n\t\tm: \"middle\",\n\t\tb: \"bottom\",\n\t\tl: \"left\",\n\t\tc: \"center\",\n\t\tr: \"right\"\n\t};\n\tvar hAligns = [\"l\", \"c\", \"r\"];\n\tvar vAligns = [\"t\", \"m\", \"b\"];\n\tvar mainPositions = [\"t\", \"b\", \"l\", \"r\"];\n\tvar opposites = {\n\t\tt: \"b\",\n\t\tm: null,\n\t\tb: \"t\",\n\t\tl: \"r\",\n\t\tc: null,\n\t\tr: \"l\"\n\t};\n\n\tvar parsePosition = function(str) {\n\t\tvar pos;\n\t\tpos = [];\n\t\t$.each(str.split(/\\W+/), function(i, word) {\n\t\t\tvar w;\n\t\t\tw = word.toLowerCase().charAt(0);\n\t\t\tif (positions[w]) {\n\t\t\t\treturn pos.push(w);\n\t\t\t}\n\t\t});\n\t\treturn pos;\n\t};\n\n\tvar styles = {};\n\n\tvar coreStyle = {\n\t\tname: \"core\",\n\t\thtml: \"<div class=\\\"\" + pluginClassName + \"-wrapper\\\">\\n\t<div class=\\\"\" + pluginClassName + \"-arrow\\\"></div>\\n\t<div class=\\\"\" + pluginClassName + \"-container\\\"></div>\\n</div>\",\n\t\tcss: \".\" + pluginClassName + \"-corner {\\n\tposition: fixed;\\n\tmargin: 5px;\\n\tz-index: 1050;\\n}\\n\\n.\" + pluginClassName + \"-corner .\" + pluginClassName + \"-wrapper,\\n.\" + pluginClassName + \"-corner .\" + pluginClassName + \"-container {\\n\tposition: relative;\\n\tdisplay: block;\\n\theight: inherit;\\n\twidth: inherit;\\n\tmargin: 3px;\\n}\\n\\n.\" + pluginClassName + \"-wrapper {\\n\tz-index: 1;\\n\tposition: absolute;\\n\tdisplay: inline-block;\\n\theight: 0;\\n\twidth: 0;\\n}\\n\\n.\" + pluginClassName + \"-container {\\n\tdisplay: none;\\n\tz-index: 1;\\n\tposition: absolute;\\n}\\n\\n.\" + pluginClassName + \"-hidable {\\n\tcursor: pointer;\\n}\\n\\n[data-notify-text],[data-notify-html] {\\n\tposition: relative;\\n}\\n\\n.\" + pluginClassName + \"-arrow {\\n\tposition: absolute;\\n\tz-index: 2;\\n\twidth: 0;\\n\theight: 0;\\n}\"\n\t};\n\n\tvar stylePrefixes = {\n\t\t\"border-radius\": [\"-webkit-\", \"-moz-\"]\n\t};\n\n\tvar getStyle = function(name) {\n\t\treturn styles[name];\n\t};\n\n\tvar removeStyle = function(name) {\n\t\tif (!name) {\n\t\t\tthrow \"Missing Style name\";\n\t\t}\n\t\tif (styles[name]) {\n\t\t\tdelete styles[name];\n\t\t}\n\t};\n\n\tvar addStyle = function(name, def) {\n\t\tif (!name) {\n\t\t\tthrow \"Missing Style name\";\n\t\t}\n\t\tif (!def) {\n\t\t\tthrow \"Missing Style definition\";\n\t\t}\n\t\tif (!def.html) {\n\t\t\tthrow \"Missing Style HTML\";\n\t\t}\n\t\t//remove existing style\n\t\tvar existing = styles[name];\n\t\tif (existing && existing.cssElem) {\n\t\t\tif (window.console) {\n\t\t\t\tconsole.warn(pluginName + \": overwriting style '\" + name + \"'\");\n\t\t\t}\n\t\t\tstyles[name].cssElem.remove();\n\t\t}\n\t\tdef.name = name;\n\t\tstyles[name] = def;\n\t\tvar cssText = \"\";\n\t\tif (def.classes) {\n\t\t\t$.each(def.classes, function(className, props) {\n\t\t\t\tcssText += \".\" + pluginClassName + \"-\" + def.name + \"-\" + className + \" {\\n\";\n\t\t\t\t$.each(props, function(name, val) {\n\t\t\t\t\tif (stylePrefixes[name]) {\n\t\t\t\t\t\t$.each(stylePrefixes[name], function(i, prefix) {\n\t\t\t\t\t\t\treturn cssText += \"\t\" + prefix + name + \": \" + val + \";\\n\";\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn cssText += \"\t\" + name + \": \" + val + \";\\n\";\n\t\t\t\t});\n\t\t\t\treturn cssText += \"}\\n\";\n\t\t\t});\n\t\t}\n\t\tif (def.css) {\n\t\t\tcssText += \"/* styles for \" + def.name + \" */\\n\" + def.css;\n\t\t}\n\t\tif (cssText) {\n\t\t\tdef.cssElem = insertCSS(cssText);\n\t\t\tdef.cssElem.attr(\"id\", \"notify-\" + def.name);\n\t\t}\n\t\tvar fields = {};\n\t\tvar elem = $(def.html);\n\t\tfindFields(\"html\", elem, fields);\n\t\tfindFields(\"text\", elem, fields);\n\t\tdef.fields = fields;\n\t};\n\n\tvar insertCSS = function(cssText) {\n\t\tvar e, elem, error;\n\t\telem = createElem(\"style\");\n\t\telem.attr(\"type\", 'text/css');\n\t\t$(\"head\").append(elem);\n\t\ttry {\n\t\t\telem.html(cssText);\n\t\t} catch (_) {\n\t\t\telem[0].styleSheet.cssText = cssText;\n\t\t}\n\t\treturn elem;\n\t};\n\n\tvar findFields = function(type, elem, fields) {\n\t\tvar attr;\n\t\tif (type !== \"html\") {\n\t\t\ttype = \"text\";\n\t\t}\n\t\tattr = \"data-notify-\" + type;\n\t\treturn find(elem, \"[\" + attr + \"]\").each(function() {\n\t\t\tvar name;\n\t\t\tname = $(this).attr(attr);\n\t\t\tif (!name) {\n\t\t\t\tname = blankFieldName;\n\t\t\t}\n\t\t\tfields[name] = type;\n\t\t});\n\t};\n\n\tvar find = function(elem, selector) {\n\t\tif (elem.is(selector)) {\n\t\t\treturn elem;\n\t\t} else {\n\t\t\treturn elem.find(selector);\n\t\t}\n\t};\n\n\tvar pluginOptions = {\n\t\tclickToHide: true,\n\t\tautoHide: true,\n\t\tautoHideDelay: 5000,\n\t\tarrowShow: true,\n\t\tarrowSize: 5,\n\t\tbreakNewLines: true,\n\t\telementPosition: \"bottom\",\n\t\tglobalPosition: \"top right\",\n\t\tstyle: \"bootstrap\",\n\t\tclassName: \"error\",\n\t\tshowAnimation: \"slideDown\",\n\t\tshowDuration: 400,\n\t\thideAnimation: \"slideUp\",\n\t\thideDuration: 200,\n\t\tgap: 5\n\t};\n\n\tvar inherit = function(a, b) {\n\t\tvar F;\n\t\tF = function() {};\n\t\tF.prototype = a;\n\t\treturn $.extend(true, new F(), b);\n\t};\n\n\tvar defaults = function(opts) {\n\t\treturn $.extend(pluginOptions, opts);\n\t};\n\n\tvar createElem = function(tag) {\n\t\treturn $(\"<\" + tag + \"></\" + tag + \">\");\n\t};\n\n\tvar globalAnchors = {};\n\n\tvar getAnchorElement = function(element) {\n\t\tvar radios;\n\t\tif (element.is('[type=radio]')) {\n\t\t\tradios = element.parents('form:first').find('[type=radio]').filter(function(i, e) {\n\t\t\t\treturn $(e).attr(\"name\") === element.attr(\"name\");\n\t\t\t});\n\t\t\telement = radios.first();\n\t\t}\n\t\treturn element;\n\t};\n\n\tvar incr = function(obj, pos, val) {\n\t\tvar opp, temp;\n\t\tif (typeof val === \"string\") {\n\t\t\tval = parseInt(val, 10);\n\t\t} else if (typeof val !== \"number\") {\n\t\t\treturn;\n\t\t}\n\t\tif (isNaN(val)) {\n\t\t\treturn;\n\t\t}\n\t\topp = positions[opposites[pos.charAt(0)]];\n\t\ttemp = pos;\n\t\tif (obj[opp] !== undefined) {\n\t\t\tpos = positions[opp.charAt(0)];\n\t\t\tval = -val;\n\t\t}\n\t\tif (obj[pos] === undefined) {\n\t\t\tobj[pos] = val;\n\t\t} else {\n\t\t\tobj[pos] += val;\n\t\t}\n\t\treturn null;\n\t};\n\n\tvar realign = function(alignment, inner, outer) {\n\t\tif (alignment === \"l\" || alignment === \"t\") {\n\t\t\treturn 0;\n\t\t} else if (alignment === \"c\" || alignment === \"m\") {\n\t\t\treturn outer / 2 - inner / 2;\n\t\t} else if (alignment === \"r\" || alignment === \"b\") {\n\t\t\treturn outer - inner;\n\t\t}\n\t\tthrow \"Invalid alignment\";\n\t};\n\n\tvar encode = function(text) {\n\t\tencode.e = encode.e || createElem(\"div\");\n\t\treturn encode.e.text(text).html();\n\t};\n\n\tfunction Notification(elem, data, options) {\n\t\tif (typeof options === \"string\") {\n\t\t\toptions = {\n\t\t\t\tclassName: options\n\t\t\t};\n\t\t}\n\t\tthis.options = inherit(pluginOptions, $.isPlainObject(options) ? options : {});\n\t\tthis.loadHTML();\n\t\tthis.wrapper = $(coreStyle.html);\n\t\tif (this.options.clickToHide) {\n\t\t\tthis.wrapper.addClass(pluginClassName + \"-hidable\");\n\t\t}\n\t\tthis.wrapper.data(pluginClassName, this);\n\t\tthis.arrow = this.wrapper.find(\".\" + pluginClassName + \"-arrow\");\n\t\tthis.container = this.wrapper.find(\".\" + pluginClassName + \"-container\");\n\t\tthis.container.append(this.userContainer);\n\t\tif (elem && elem.length) {\n\t\t\tthis.elementType = elem.attr(\"type\");\n\t\t\tthis.originalElement = elem;\n\t\t\tthis.elem = getAnchorElement(elem);\n\t\t\tthis.elem.data(pluginClassName, this);\n\t\t\tthis.elem.before(this.wrapper);\n\t\t}\n\t\tthis.container.hide();\n\t\tthis.run(data);\n\t}\n\n\tNotification.prototype.loadHTML = function() {\n\t\tvar style;\n\t\tstyle = this.getStyle();\n\t\tthis.userContainer = $(style.html);\n\t\tthis.userFields = style.fields;\n\t};\n\n\tNotification.prototype.show = function(show, userCallback) {\n\t\tvar args, callback, elems, fn, hidden;\n\t\tcallback = (function(_this) {\n\t\t\treturn function() {\n\t\t\t\tif (!show && !_this.elem) {\n\t\t\t\t\t_this.destroy();\n\t\t\t\t}\n\t\t\t\tif (userCallback) {\n\t\t\t\t\treturn userCallback();\n\t\t\t\t}\n\t\t\t};\n\t\t})(this);\n\t\thidden = this.container.parent().parents(':hidden').length > 0;\n\t\telems = this.container.add(this.arrow);\n\t\targs = [];\n\t\tif (hidden && show) {\n\t\t\tfn = \"show\";\n\t\t} else if (hidden && !show) {\n\t\t\tfn = \"hide\";\n\t\t} else if (!hidden && show) {\n\t\t\tfn = this.options.showAnimation;\n\t\t\targs.push(this.options.showDuration);\n\t\t} else if (!hidden && !show) {\n\t\t\tfn = this.options.hideAnimation;\n\t\t\targs.push(this.options.hideDuration);\n\t\t} else {\n\t\t\treturn callback();\n\t\t}\n\t\targs.push(callback);\n\t\treturn elems[fn].apply(elems, args);\n\t};\n\n\tNotification.prototype.setGlobalPosition = function() {\n\t\tvar p = this.getPosition();\n\t\tvar pMain = p[0];\n\t\tvar pAlign = p[1];\n\t\tvar main = positions[pMain];\n\t\tvar align = positions[pAlign];\n\t\tvar key = pMain + \"|\" + pAlign;\n\t\tvar anchor = globalAnchors[key];\n\t\tif (!anchor || !document.body.contains(anchor[0])) {\n\t\t\tanchor = globalAnchors[key] = createElem(\"div\");\n\t\t\tvar css = {};\n\t\t\tcss[main] = 0;\n\t\t\tif (align === \"middle\") {\n\t\t\t\tcss.top = '45%';\n\t\t\t} else if (align === \"center\") {\n\t\t\t\tcss.left = '45%';\n\t\t\t} else {\n\t\t\t\tcss[align] = 0;\n\t\t\t}\n\t\t\tanchor.css(css).addClass(pluginClassName + \"-corner\");\n\t\t\t$(\"body\").append(anchor);\n\t\t}\n\t\treturn anchor.prepend(this.wrapper);\n\t};\n\n\tNotification.prototype.setElementPosition = function() {\n\t\tvar arrowColor, arrowCss, arrowSize, color, contH, contW, css, elemH, elemIH, elemIW, elemPos, elemW, gap, j, k, len, len1, mainFull, margin, opp, oppFull, pAlign, pArrow, pMain, pos, posFull, position, ref, wrapPos;\n\t\tposition = this.getPosition();\n\t\tpMain = position[0];\n\t\tpAlign = position[1];\n\t\tpArrow = position[2];\n\t\telemPos = this.elem.position();\n\t\telemH = this.elem.outerHeight();\n\t\telemW = this.elem.outerWidth();\n\t\telemIH = this.elem.innerHeight();\n\t\telemIW = this.elem.innerWidth();\n\t\twrapPos = this.wrapper.position();\n\t\tcontH = this.container.height();\n\t\tcontW = this.container.width();\n\t\tmainFull = positions[pMain];\n\t\topp = opposites[pMain];\n\t\toppFull = positions[opp];\n\t\tcss = {};\n\t\tcss[oppFull] = pMain === \"b\" ? elemH : pMain === \"r\" ? elemW : 0;\n\t\tincr(css, \"top\", elemPos.top - wrapPos.top);\n\t\tincr(css, \"left\", elemPos.left - wrapPos.left);\n\t\tref = [\"top\", \"left\"];\n\t\tfor (j = 0, len = ref.length; j < len; j++) {\n\t\t\tpos = ref[j];\n\t\t\tmargin = parseInt(this.elem.css(\"margin-\" + pos), 10);\n\t\t\tif (margin) {\n\t\t\t\tincr(css, pos, margin);\n\t\t\t}\n\t\t}\n\t\tgap = Math.max(0, this.options.gap - (this.options.arrowShow ? arrowSize : 0));\n\t\tincr(css, oppFull, gap);\n\t\tif (!this.options.arrowShow) {\n\t\t\tthis.arrow.hide();\n\t\t} else {\n\t\t\tarrowSize = this.options.arrowSize;\n\t\t\tarrowCss = $.extend({}, css);\n\t\t\tarrowColor = this.userContainer.css(\"border-color\") || this.userContainer.css(\"border-top-color\") || this.userContainer.css(\"background-color\") || \"white\";\n\t\t\tfor (k = 0, len1 = mainPositions.length; k < len1; k++) {\n\t\t\t\tpos = mainPositions[k];\n\t\t\t\tposFull = positions[pos];\n\t\t\t\tif (pos === opp) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcolor = posFull === mainFull ? arrowColor : \"transparent\";\n\t\t\t\tarrowCss[\"border-\" + posFull] = arrowSize + \"px solid \" + color;\n\t\t\t}\n\t\t\tincr(css, positions[opp], arrowSize);\n\t\t\tif (indexOf.call(mainPositions, pAlign) >= 0) {\n\t\t\t\tincr(arrowCss, positions[pAlign], arrowSize * 2);\n\t\t\t}\n\t\t}\n\t\tif (indexOf.call(vAligns, pMain) >= 0) {\n\t\t\tincr(css, \"left\", realign(pAlign, contW, elemW));\n\t\t\tif (arrowCss) {\n\t\t\t\tincr(arrowCss, \"left\", realign(pAlign, arrowSize, elemIW));\n\t\t\t}\n\t\t} else if (indexOf.call(hAligns, pMain) >= 0) {\n\t\t\tincr(css, \"top\", realign(pAlign, contH, elemH));\n\t\t\tif (arrowCss) {\n\t\t\t\tincr(arrowCss, \"top\", realign(pAlign, arrowSize, elemIH));\n\t\t\t}\n\t\t}\n\t\tif (this.container.is(\":visible\")) {\n\t\t\tcss.display = \"block\";\n\t\t}\n\t\tthis.container.removeAttr(\"style\").css(css);\n\t\tif (arrowCss) {\n\t\t\treturn this.arrow.removeAttr(\"style\").css(arrowCss);\n\t\t}\n\t};\n\n\tNotification.prototype.getPosition = function() {\n\t\tvar pos, ref, ref1, ref2, ref3, ref4, ref5, text;\n\t\ttext = this.options.position || (this.elem ? this.options.elementPosition : this.options.globalPosition);\n\t\tpos = parsePosition(text);\n\t\tif (pos.length === 0) {\n\t\t\tpos[0] = \"b\";\n\t\t}\n\t\tif (ref = pos[0], indexOf.call(mainPositions, ref) < 0) {\n\t\t\tthrow \"Must be one of [\" + mainPositions + \"]\";\n\t\t}\n\t\tif (pos.length === 1 || ((ref1 = pos[0], indexOf.call(vAligns, ref1) >= 0) && (ref2 = pos[1], indexOf.call(hAligns, ref2) < 0)) || ((ref3 = pos[0], indexOf.call(hAligns, ref3) >= 0) && (ref4 = pos[1], indexOf.call(vAligns, ref4) < 0))) {\n\t\t\tpos[1] = (ref5 = pos[0], indexOf.call(hAligns, ref5) >= 0) ? \"m\" : \"l\";\n\t\t}\n\t\tif (pos.length === 2) {\n\t\t\tpos[2] = pos[1];\n\t\t}\n\t\treturn pos;\n\t};\n\n\tNotification.prototype.getStyle = function(name) {\n\t\tvar style;\n\t\tif (!name) {\n\t\t\tname = this.options.style;\n\t\t}\n\t\tif (!name) {\n\t\t\tname = \"default\";\n\t\t}\n\t\tstyle = styles[name];\n\t\tif (!style) {\n\t\t\tthrow \"Missing style: \" + name;\n\t\t}\n\t\treturn style;\n\t};\n\n\tNotification.prototype.updateClasses = function() {\n\t\tvar classes, style;\n\t\tclasses = [\"base\"];\n\t\tif ($.isArray(this.options.className)) {\n\t\t\tclasses = classes.concat(this.options.className);\n\t\t} else if (this.options.className) {\n\t\t\tclasses.push(this.options.className);\n\t\t}\n\t\tstyle = this.getStyle();\n\t\tclasses = $.map(classes, function(n) {\n\t\t\treturn pluginClassName + \"-\" + style.name + \"-\" + n;\n\t\t}).join(\" \");\n\t\treturn this.userContainer.attr(\"class\", classes);\n\t};\n\n\tNotification.prototype.run = function(data, options) {\n\t\tvar d, datas, name, type, value;\n\t\tif ($.isPlainObject(options)) {\n\t\t\t$.extend(this.options, options);\n\t\t} else if ($.type(options) === \"string\") {\n\t\t\tthis.options.className = options;\n\t\t}\n\t\tif (this.container && !data) {\n\t\t\tthis.show(false);\n\t\t\treturn;\n\t\t} else if (!this.container && !data) {\n\t\t\treturn;\n\t\t}\n\t\tdatas = {};\n\t\tif ($.isPlainObject(data)) {\n\t\t\tdatas = data;\n\t\t} else {\n\t\t\tdatas[blankFieldName] = data;\n\t\t}\n\t\tfor (name in datas) {\n\t\t\td = datas[name];\n\t\t\ttype = this.userFields[name];\n\t\t\tif (!type) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (type === \"text\") {\n\t\t\t\td = encode(d);\n\t\t\t\tif (this.options.breakNewLines) {\n\t\t\t\t\td = d.replace(/\\n/g, '<br/>');\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalue = name === blankFieldName ? '' : '=' + name;\n\t\t\tfind(this.userContainer, \"[data-notify-\" + type + value + \"]\").html(d);\n\t\t}\n\t\tthis.updateClasses();\n\t\tif (this.elem) {\n\t\t\tthis.setElementPosition();\n\t\t} else {\n\t\t\tthis.setGlobalPosition();\n\t\t}\n\t\tthis.show(true);\n\t\tif (this.options.autoHide) {\n\t\t\tclearTimeout(this.autohideTimer);\n\t\t\tthis.autohideTimer = setTimeout(this.show.bind(this, false), this.options.autoHideDelay);\n\t\t}\n\t};\n\n\tNotification.prototype.destroy = function() {\n\t\tthis.wrapper.data(pluginClassName, null);\n\t\tthis.wrapper.remove();\n\t};\n\n\t$[pluginName] = function(elem, data, options) {\n\t\tif ((elem && elem.nodeName) || elem.jquery) {\n\t\t\t$(elem)[pluginName](data, options);\n\t\t} else {\n\t\t\toptions = data;\n\t\t\tdata = elem;\n\t\t\tnew Notification(null, data, options);\n\t\t}\n\t\treturn elem;\n\t};\n\n\t$.fn[pluginName] = function(data, options) {\n\t\t$(this).each(function() {\n\t\t\tvar prev = getAnchorElement($(this)).data(pluginClassName);\n\t\t\tif (prev) {\n\t\t\t\tprev.destroy();\n\t\t\t}\n\t\t\tvar curr = new Notification($(this), data, options);\n\t\t});\n\t\treturn this;\n\t};\n\n\t$.extend($[pluginName], {\n\t\tdefaults: defaults,\n\t\taddStyle: addStyle,\n\t\tremoveStyle: removeStyle,\n\t\tpluginOptions: pluginOptions,\n\t\tgetStyle: getStyle,\n\t\tinsertCSS: insertCSS\n\t});\n\n\t//always include the default bootstrap style\n\taddStyle(\"bootstrap\", {\n\t\thtml: \"<div>\\n<span data-notify-text></span>\\n</div>\",\n\t\tclasses: {\n\t\t\tbase: {\n\t\t\t\t\"font-weight\": \"bold\",\n\t\t\t\t\"padding\": \"8px 15px 8px 14px\",\n\t\t\t\t\"text-shadow\": \"0 1px 0 rgba(255, 255, 255, 0.5)\",\n\t\t\t\t\"background-color\": \"#fcf8e3\",\n\t\t\t\t\"border\": \"1px solid #fbeed5\",\n\t\t\t\t\"border-radius\": \"4px\",\n\t\t\t\t\"white-space\": \"nowrap\",\n\t\t\t\t\"padding-left\": \"25px\",\n\t\t\t\t\"background-repeat\": \"no-repeat\",\n\t\t\t\t\"background-position\": \"3px 7px\"\n\t\t\t},\n\t\t\terror: {\n\t\t\t\t\"color\": \"#B94A48\",\n\t\t\t\t\"background-color\": \"#F2DEDE\",\n\t\t\t\t\"border-color\": \"#EED3D7\",\n\t\t\t\t\"background-image\": \"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtRJREFUeNqkVc1u00AQHq+dOD+0poIQfkIjalW0SEGqRMuRnHos3DjwAH0ArlyQeANOOSMeAA5VjyBxKBQhgSpVUKKQNGloFdw4cWw2jtfMOna6JOUArDTazXi/b3dm55socPqQhFka++aHBsI8GsopRJERNFlY88FCEk9Yiwf8RhgRyaHFQpPHCDmZG5oX2ui2yilkcTT1AcDsbYC1NMAyOi7zTX2Agx7A9luAl88BauiiQ/cJaZQfIpAlngDcvZZMrl8vFPK5+XktrWlx3/ehZ5r9+t6e+WVnp1pxnNIjgBe4/6dAysQc8dsmHwPcW9C0h3fW1hans1ltwJhy0GxK7XZbUlMp5Ww2eyan6+ft/f2FAqXGK4CvQk5HueFz7D6GOZtIrK+srupdx1GRBBqNBtzc2AiMr7nPplRdKhb1q6q6zjFhrklEFOUutoQ50xcX86ZlqaZpQrfbBdu2R6/G19zX6XSgh6RX5ubyHCM8nqSID6ICrGiZjGYYxojEsiw4PDwMSL5VKsC8Yf4VRYFzMzMaxwjlJSlCyAQ9l0CW44PBADzXhe7xMdi9HtTrdYjFYkDQL0cn4Xdq2/EAE+InCnvADTf2eah4Sx9vExQjkqXT6aAERICMewd/UAp/IeYANM2joxt+q5VI+ieq2i0Wg3l6DNzHwTERPgo1ko7XBXj3vdlsT2F+UuhIhYkp7u7CarkcrFOCtR3H5JiwbAIeImjT/YQKKBtGjRFCU5IUgFRe7fF4cCNVIPMYo3VKqxwjyNAXNepuopyqnld602qVsfRpEkkz+GFL1wPj6ySXBpJtWVa5xlhpcyhBNwpZHmtX8AGgfIExo0ZpzkWVTBGiXCSEaHh62/PoR0p/vHaczxXGnj4bSo+G78lELU80h1uogBwWLf5YlsPmgDEd4M236xjm+8nm4IuE/9u+/PH2JXZfbwz4zw1WbO+SQPpXfwG/BBgAhCNZiSb/pOQAAAAASUVORK5CYII=)\"\n\t\t\t},\n\t\t\tsuccess: {\n\t\t\t\t\"color\": \"#468847\",\n\t\t\t\t\"background-color\": \"#DFF0D8\",\n\t\t\t\t\"border-color\": \"#D6E9C6\",\n\t\t\t\t\"background-image\": \"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAutJREFUeNq0lctPE0Ecx38zu/RFS1EryqtgJFA08YCiMZIAQQ4eRG8eDGdPJiYeTIwHTfwPiAcvXIwXLwoXPaDxkWgQ6islKlJLSQWLUraPLTv7Gme32zoF9KSTfLO7v53vZ3d/M7/fIth+IO6INt2jjoA7bjHCJoAlzCRw59YwHYjBnfMPqAKWQYKjGkfCJqAF0xwZjipQtA3MxeSG87VhOOYegVrUCy7UZM9S6TLIdAamySTclZdYhFhRHloGYg7mgZv1Zzztvgud7V1tbQ2twYA34LJmF4p5dXF1KTufnE+SxeJtuCZNsLDCQU0+RyKTF27Unw101l8e6hns3u0PBalORVVVkcaEKBJDgV3+cGM4tKKmI+ohlIGnygKX00rSBfszz/n2uXv81wd6+rt1orsZCHRdr1Imk2F2Kob3hutSxW8thsd8AXNaln9D7CTfA6O+0UgkMuwVvEFFUbbAcrkcTA8+AtOk8E6KiQiDmMFSDqZItAzEVQviRkdDdaFgPp8HSZKAEAL5Qh7Sq2lIJBJwv2scUqkUnKoZgNhcDKhKg5aH+1IkcouCAdFGAQsuWZYhOjwFHQ96oagWgRoUov1T9kRBEODAwxM2QtEUl+Wp+Ln9VRo6BcMw4ErHRYjH4/B26AlQoQQTRdHWwcd9AH57+UAXddvDD37DmrBBV34WfqiXPl61g+vr6xA9zsGeM9gOdsNXkgpEtTwVvwOklXLKm6+/p5ezwk4B+j6droBs2CsGa/gNs6RIxazl4Tc25mpTgw/apPR1LYlNRFAzgsOxkyXYLIM1V8NMwyAkJSctD1eGVKiq5wWjSPdjmeTkiKvVW4f2YPHWl3GAVq6ymcyCTgovM3FzyRiDe2TaKcEKsLpJvNHjZgPNqEtyi6mZIm4SRFyLMUsONSSdkPeFtY1n0mczoY3BHTLhwPRy9/lzcziCw9ACI+yql0VLzcGAZbYSM5CCSZg1/9oc/nn7+i8N9p/8An4JMADxhH+xHfuiKwAAAABJRU5ErkJggg==)\"\n\t\t\t},\n\t\t\tinfo: {\n\t\t\t\t\"color\": \"#3A87AD\",\n\t\t\t\t\"background-color\": \"#D9EDF7\",\n\t\t\t\t\"border-color\": \"#BCE8F1\",\n\t\t\t\t\"background-image\": \"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYFAhkSsdes/QAAA8dJREFUOMvVlGtMW2UYx//POaWHXg6lLaW0ypAtw1UCgbniNOLcVOLmAjHZolOYlxmTGXVZdAnRfXQm+7SoU4mXaOaiZsEpC9FkiQs6Z6bdCnNYruM6KNBw6YWewzl9z+sHImEWv+vz7XmT95f/+3/+7wP814v+efDOV3/SoX3lHAA+6ODeUFfMfjOWMADgdk+eEKz0pF7aQdMAcOKLLjrcVMVX3xdWN29/GhYP7SvnP0cWfS8caSkfHZsPE9Fgnt02JNutQ0QYHB2dDz9/pKX8QjjuO9xUxd/66HdxTeCHZ3rojQObGQBcuNjfplkD3b19Y/6MrimSaKgSMmpGU5WevmE/swa6Oy73tQHA0Rdr2Mmv/6A1n9w9suQ7097Z9lM4FlTgTDrzZTu4StXVfpiI48rVcUDM5cmEksrFnHxfpTtU/3BFQzCQF/2bYVoNbH7zmItbSoMj40JSzmMyX5qDvriA7QdrIIpA+3cdsMpu0nXI8cV0MtKXCPZev+gCEM1S2NHPvWfP/hL+7FSr3+0p5RBEyhEN5JCKYr8XnASMT0xBNyzQGQeI8fjsGD39RMPk7se2bd5ZtTyoFYXftF6y37gx7NeUtJJOTFlAHDZLDuILU3j3+H5oOrD3yWbIztugaAzgnBKJuBLpGfQrS8wO4FZgV+c1IxaLgWVU0tMLEETCos4xMzEIv9cJXQcyagIwigDGwJgOAtHAwAhisQUjy0ORGERiELgG4iakkzo4MYAxcM5hAMi1WWG1yYCJIcMUaBkVRLdGeSU2995TLWzcUAzONJ7J6FBVBYIggMzmFbvdBV44Corg8vjhzC+EJEl8U1kJtgYrhCzgc/vvTwXKSib1paRFVRVORDAJAsw5FuTaJEhWM2SHB3mOAlhkNxwuLzeJsGwqWzf5TFNdKgtY5qHp6ZFf67Y/sAVadCaVY5YACDDb3Oi4NIjLnWMw2QthCBIsVhsUTU9tvXsjeq9+X1d75/KEs4LNOfcdf/+HthMnvwxOD0wmHaXr7ZItn2wuH2SnBzbZAbPJwpPx+VQuzcm7dgRCB57a1uBzUDRL4bfnI0RE0eaXd9W89mpjqHZnUI5Hh2l2dkZZUhOqpi2qSmpOmZ64Tuu9qlz/SEXo6MEHa3wOip46F1n7633eekV8ds8Wxjn37Wl63VVa+ej5oeEZ/82ZBETJjpJ1Rbij2D3Z/1trXUvLsblCK0XfOx0SX2kMsn9dX+d+7Kf6h8o4AIykuffjT8L20LU+w4AZd5VvEPY+XpWqLV327HR7DzXuDnD8r+ovkBehJ8i+y8YAAAAASUVORK5CYII=)\"\n\t\t\t},\n\t\t\twarn: {\n\t\t\t\t\"color\": \"#C09853\",\n\t\t\t\t\"background-color\": \"#FCF8E3\",\n\t\t\t\t\"border-color\": \"#FBEED5\",\n\t\t\t\t\"background-image\": \"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAABJlBMVEXr6eb/2oD/wi7/xjr/0mP/ykf/tQD/vBj/3o7/uQ//vyL/twebhgD/4pzX1K3z8e349vK6tHCilCWbiQymn0jGworr6dXQza3HxcKkn1vWvV/5uRfk4dXZ1bD18+/52YebiAmyr5S9mhCzrWq5t6ufjRH54aLs0oS+qD751XqPhAybhwXsujG3sm+Zk0PTwG6Shg+PhhObhwOPgQL4zV2nlyrf27uLfgCPhRHu7OmLgAafkyiWkD3l49ibiAfTs0C+lgCniwD4sgDJxqOilzDWowWFfAH08uebig6qpFHBvH/aw26FfQTQzsvy8OyEfz20r3jAvaKbhgG9q0nc2LbZxXanoUu/u5WSggCtp1anpJKdmFz/zlX/1nGJiYmuq5Dx7+sAAADoPUZSAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfdBgUBGhh4aah5AAAAlklEQVQY02NgoBIIE8EUcwn1FkIXM1Tj5dDUQhPU502Mi7XXQxGz5uVIjGOJUUUW81HnYEyMi2HVcUOICQZzMMYmxrEyMylJwgUt5BljWRLjmJm4pI1hYp5SQLGYxDgmLnZOVxuooClIDKgXKMbN5ggV1ACLJcaBxNgcoiGCBiZwdWxOETBDrTyEFey0jYJ4eHjMGWgEAIpRFRCUt08qAAAAAElFTkSuQmCC)\"\n\t\t\t}\n\t\t}\n\t});\n\n\t$(function() {\n\t\tinsertCSS(coreStyle.css).attr(\"id\", \"core-notify\");\n\t\t$(document).on(\"click\", \".\" + pluginClassName + \"-hidable\", function(e) {\n\t\t\t$(this).trigger(\"notify-hide\");\n\t\t});\n\t\t$(document).on(\"notify-hide\", \".\" + pluginClassName + \"-wrapper\", function(e) {\n\t\t\tvar elem = $(this).data(pluginClassName);\n\t\t\tif(elem) {\n\t\t\t\telem.show(false);\n\t\t\t}\n\t\t});\n\t});\n\n}));\n"
  },
  {
    "path": "public/assets/vendor/css/core.css",
    "content": "@charset \"UTF-8\";\n/*!\n * Bootstrap  v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n  --bs-blue: #007bff;\n  --bs-indigo: #6610f2;\n  --bs-purple: #696cff;\n  --bs-pink: #e83e8c;\n  --bs-red: #ff3e1d;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ffab00;\n  --bs-green: #71dd37;\n  --bs-teal: #20c997;\n  --bs-cyan: #03c3ec;\n  --bs-black: #435971;\n  --bs-white: #fff;\n  --bs-gray: rgba(67, 89, 113, 0.6);\n  --bs-gray-dark: rgba(67, 89, 113, 0.8);\n  --bs-gray-25: rgba(67, 89, 113, 0.025);\n  --bs-gray-50: rgba(67, 89, 113, 0.05);\n  --bs-primary: #696cff;\n  --bs-secondary: #8592a3;\n  --bs-success: #71dd37;\n  --bs-info: #03c3ec;\n  --bs-warning: #ffab00;\n  --bs-danger: #ff3e1d;\n  --bs-light: #fcfdfd;\n  --bs-dark: #233446;\n  --bs-gray: rgba(67, 89, 113, 0.1);\n  --bs-primary-rgb: 105, 108, 255;\n  --bs-secondary-rgb: 133, 146, 163;\n  --bs-success-rgb: 113, 221, 55;\n  --bs-info-rgb: 3, 195, 236;\n  --bs-warning-rgb: 255, 171, 0;\n  --bs-danger-rgb: 255, 62, 29;\n  --bs-light-rgb: 252, 253, 253;\n  --bs-dark-rgb: 35, 52, 70;\n  --bs-gray-rgb: 67, 89, 113;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 67, 89, 113;\n  --bs-body-color-rgb: 105, 122, 141;\n  --bs-body-bg-rgb: 245, 245, 249;\n  --bs-font-sans-serif: \"Public Sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n  --bs-font-monospace: \"SFMono-Regular\", Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-root-font-size: 16px;\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 0.9375rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.53;\n  --bs-body-color: #697a8d;\n  --bs-body-bg: #f5f5f9;\n  --bs-border-width: 1px;\n  --bs-border-style: solid;\n  --bs-border-color: #d9dee3;\n  --bs-border-color-translucent: rgba(67, 89, 113, 0.175);\n  --bs-border-radius: 0.375rem;\n  --bs-border-radius-sm: 0.25rem;\n  --bs-border-radius-lg: 0.5rem;\n  --bs-border-radius-xl: 0.625rem;\n  --bs-border-radius-2xl: 2rem;\n  --bs-border-radius-pill: 50rem;\n  --bs-link-color: #696cff;\n  --bs-link-hover-color: #5f61e6;\n  --bs-code-color: #e83e8c;\n  --bs-highlight-bg: #ffeecc;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n:root {\n  font-size: var(--bs-root-font-size);\n}\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(67, 89, 113, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: #d9dee3;\n  border: 0;\n  border-top: 1px solid;\n  opacity: 1;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  font-weight: 500;\n  line-height: 1.1;\n  color: #566a7f;\n}\n\nh1, .h1 {\n  font-size: calc(1.3625rem + 1.35vw);\n}\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.375rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.2875rem + 0.45vw);\n}\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.625rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.2625rem + 0.15vw);\n}\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.375rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.125rem;\n}\n\nh6, .h6 {\n  font-size: 0.9375rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title] {\n  text-decoration: underline dotted;\n  cursor: help;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 500;\n}\n\ndd {\n  margin-bottom: 0.5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 85%;\n}\n\nmark, .mark {\n  padding: 0.1875em;\n  background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\na {\n  color: var(--bs-link-color);\n  text-decoration: none;\n}\na:hover {\n  color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 85%;\n}\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 85%;\n  color: var(--bs-code-color);\n  word-wrap: break-word;\n}\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.1875rem 0.375rem;\n  font-size: 85%;\n  color: var(--bs-body-bg);\n  background-color: var(--bs-body-color);\n  border-radius: 0.25rem;\n}\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.625rem;\n  padding-bottom: 0.625rem;\n  color: #a1acb8;\n  text-align: left;\n}\n\nth {\n  font-weight: 500;\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=button] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\nselect:disabled {\n  opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n  display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n  -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=search] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.0546875rem;\n  font-weight: 400;\n}\n\n.display-1 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 500;\n  line-height: 1.1;\n}\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 4rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 500;\n  line-height: 1.1;\n}\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 500;\n  line-height: 1.1;\n}\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 3rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 500;\n  line-height: 1.1;\n}\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 2.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.325rem + 0.9vw);\n  font-weight: 500;\n  line-height: 1.1;\n}\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 2rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.275rem + 0.3vw);\n  font-weight: 500;\n  line-height: 1.1;\n}\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 1.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 85%;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.0546875rem;\n}\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 85%;\n  color: rgba(67, 89, 113, 0.6);\n}\n.blockquote-footer::before {\n  content: \"— \";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0;\n  background-color: transparent;\n  border: 0px solid var(--bs-border-color);\n  border-radius: 0px;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 85%;\n  color: #a1acb8;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n  --bs-gutter-x: 1.625rem;\n  --bs-gutter-y: 0;\n  width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container-sm, .container {\n    max-width: 540px;\n  }\n}\n@media (min-width: 768px) {\n  .container-md, .container-sm, .container {\n    max-width: 720px;\n  }\n}\n@media (min-width: 992px) {\n  .container-lg, .container-md, .container-sm, .container {\n    max-width: 960px;\n  }\n}\n@media (min-width: 1200px) {\n  .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1140px;\n  }\n}\n@media (min-width: 1400px) {\n  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1440px;\n  }\n}\n.row {\n  --bs-gutter-x: 1.625rem;\n  --bs-gutter-y: 0;\n  display: flex;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-0.5 * var(--bs-gutter-x));\n  margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  flex: 0 0 auto;\n  width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  flex: 0 0 auto;\n  width: 16.6666666667%;\n}\n\n.col-auto {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  flex: 0 0 auto;\n  width: 8.33333333%;\n}\n\n.col-2 {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-3 {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.col-5 {\n  flex: 0 0 auto;\n  width: 41.66666667%;\n}\n\n.col-6 {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  flex: 0 0 auto;\n  width: 58.33333333%;\n}\n\n.col-8 {\n  flex: 0 0 auto;\n  width: 66.66666667%;\n}\n\n.col-9 {\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  flex: 0 0 auto;\n  width: 83.33333333%;\n}\n\n.col-11 {\n  flex: 0 0 auto;\n  width: 91.66666667%;\n}\n\n.col-12 {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.33333333%;\n}\n\n.offset-2 {\n  margin-left: 16.66666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.33333333%;\n}\n\n.offset-5 {\n  margin-left: 41.66666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.33333333%;\n}\n\n.offset-8 {\n  margin-left: 66.66666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.33333333%;\n}\n\n.offset-11 {\n  margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n  .row-cols-sm-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n  .col-sm-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-sm-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-sm-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-sm-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-sm-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-sm-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-sm-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-sm-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-sm-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 768px) {\n  .col-md {\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n  .row-cols-md-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n  .col-md-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-md-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-md-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-md-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-md-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-md-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-md-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-md-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-md-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 992px) {\n  .col-lg {\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n  .row-cols-lg-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n  .col-lg-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-lg-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-lg-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-lg-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-lg-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-lg-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-lg-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-lg-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-lg-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1200px) {\n  .col-xl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n  .row-cols-xl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n  .col-xl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1400px) {\n  .col-xxl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n  .row-cols-xxl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n  .col-xxl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xxl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xxl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xxl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xxl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xxl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xxl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xxl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xxl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n.table {\n  --bs-table-color: var(--bs-body-color);\n  --bs-table-bg: transparent;\n  --bs-table-border-color: #d9dee3;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: var(--bs-body-color);\n  --bs-table-striped-bg: #f9fafb;\n  --bs-table-active-color: var(--bs-body-color);\n  --bs-table-active-bg: rgba(67, 89, 113, 0.1);\n  --bs-table-hover-color: var(--bs-body-color);\n  --bs-table-hover-bg: rgba(67, 89, 113, 0.06);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: var(--bs-table-color);\n  vertical-align: middle;\n  border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n  padding: 0.625rem 1.25rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n  vertical-align: inherit;\n}\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table-group-divider {\n  border-top: 2px solid #d9dee3;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.3125rem 0.625rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-color: #435971;\n  --bs-table-bg: #e1e2ff;\n  --bs-table-border-color: #d1d4f1;\n  --bs-table-striped-bg: #dcdefb;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #d1d4f1;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #d8daf6;\n  --bs-table-hover-color: #435971;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n  --bs-table-color: #435971;\n  --bs-table-bg: #e7e9ed;\n  --bs-table-border-color: #d7dbe1;\n  --bs-table-striped-bg: #e2e5e9;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #d7dbe1;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #dde0e6;\n  --bs-table-hover-color: #435971;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n  --bs-table-color: #435971;\n  --bs-table-bg: #e3f8d7;\n  --bs-table-border-color: #d3e8cd;\n  --bs-table-striped-bg: #def3d4;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #d3e8cd;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #d9eed1;\n  --bs-table-hover-color: #435971;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n  --bs-table-color: #435971;\n  --bs-table-bg: #cdf3fb;\n  --bs-table-border-color: #bfe4ed;\n  --bs-table-striped-bg: #c9eef7;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #bfe4ed;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #c5eaf3;\n  --bs-table-hover-color: #435971;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n  --bs-table-color: #435971;\n  --bs-table-bg: #ffeecc;\n  --bs-table-border-color: #ecdfc3;\n  --bs-table-striped-bg: #f9eac9;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #ecdfc3;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #f4e5c7;\n  --bs-table-hover-color: #435971;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n  --bs-table-color: #435971;\n  --bs-table-bg: #ffd8d2;\n  --bs-table-border-color: #eccbc8;\n  --bs-table-striped-bg: #f9d4cf;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #eccbc8;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #f4d0cc;\n  --bs-table-hover-color: #435971;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n  --bs-table-color: #435971;\n  --bs-table-bg: #fcfdfd;\n  --bs-table-border-color: #eaedef;\n  --bs-table-striped-bg: #f6f8f9;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #eaedef;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #f1f3f5;\n  --bs-table-hover-color: #435971;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n  --bs-table-color: #fff;\n  --bs-table-bg: #233446;\n  --bs-table-border-color: #394859;\n  --bs-table-striped-bg: #2a3a4c;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #394859;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #304051;\n  --bs-table-hover-color: #fff;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n.form-label {\n  margin-bottom: 0.5rem;\n  font-size: 0.75rem;\n  font-weight: 500;\n  color: #566a7f;\n}\n\n.col-form-label {\n  padding-top: calc(0.4375rem + 1px);\n  padding-bottom: calc(0.4375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  font-weight: 500;\n  line-height: 1.53;\n  color: #566a7f;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.75rem + 1px);\n  padding-bottom: calc(0.75rem + 1px);\n  font-size: 1rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.75rem;\n}\n\n.form-text {\n  margin-top: 0.3rem;\n  font-size: 85%;\n  color: #b4bdc6;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.4375rem 0.875rem;\n  font-size: 0.9375rem;\n  font-weight: 400;\n  line-height: 1.53;\n  color: #697a8d;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #d9dee3;\n  appearance: none;\n  border-radius: 0.375rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n.form-control[type=file] {\n  overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control:focus {\n  color: #697a8d;\n  background-color: #fff;\n  border-color: rgba(249, 249, 255, 0.54);\n  outline: 0;\n  box-shadow: 0 0 0.25rem 0.05rem rgba(105, 108, 255, 0.1);\n}\n.form-control::-webkit-date-and-time-value {\n  height: 1.53em;\n}\n.form-control::placeholder {\n  color: #b4bdc6;\n  opacity: 1;\n}\n.form-control:disabled {\n  background-color: #eceef1;\n  opacity: 1;\n}\n.form-control::file-selector-button {\n  padding: 0.4375rem 0.875rem;\n  margin: -0.4375rem -0.875rem;\n  margin-inline-end: 0.875rem;\n  color: #697a8d;\n  background-color: #fff;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: all 0.2s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #f2f2f2;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.4375rem 0;\n  margin-bottom: 0;\n  line-height: 1.53;\n  color: #697a8d;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n.form-control-plaintext:focus {\n  outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.53em + 0.5rem + 2px);\n  padding: 0.25rem 0.625rem;\n  font-size: 0.75rem;\n  border-radius: 0.25rem;\n}\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.625rem;\n  margin: -0.25rem -0.625rem;\n  margin-inline-end: 0.625rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.53em + 1.5rem + 2px);\n  padding: 0.75rem 1.25rem;\n  font-size: 1rem;\n  border-radius: 0.5rem;\n}\n.form-control-lg::file-selector-button {\n  padding: 0.75rem 1.25rem;\n  margin: -0.75rem -1.25rem;\n  margin-inline-end: 1.25rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.53em + 0.875rem + 2px);\n}\ntextarea.form-control-sm {\n  min-height: calc(1.53em + 0.5rem + 2px);\n}\ntextarea.form-control-lg {\n  min-height: calc(1.53em + 1.5rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: calc(1.53em + 0.875rem + 2px);\n  padding: 0.4375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n  border: 0 !important;\n  border-radius: 0.375rem;\n}\n.form-control-color::-webkit-color-swatch {\n  border-radius: 0.375rem;\n}\n.form-control-color.form-control-sm {\n  height: calc(1.53em + 0.5rem + 2px);\n}\n.form-control-color.form-control-lg {\n  height: calc(1.53em + 1.5rem + 2px);\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.4375rem 1.875rem 0.4375rem 0.875rem;\n  -moz-padding-start: calc(0.875rem - 3px);\n  font-size: 0.9375rem;\n  font-weight: 400;\n  line-height: 1.53;\n  color: #697a8d;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%2867, 89, 113, 0.6%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.875rem center;\n  background-size: 17px 12px;\n  border: 1px solid #d9dee3;\n  border-radius: 0.375rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n.form-select:focus {\n  border-color: rgba(249, 249, 255, 0.54);\n  outline: 0;\n  box-shadow: 0 0 0.25rem 0.05rem rgba(105, 108, 255, 0.1);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.875rem;\n  background-image: none;\n}\n.form-select:disabled {\n  color: #697a8d;\n  background-color: #eceef1;\n}\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #697a8d;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.625rem;\n  font-size: 0.75rem;\n  border-radius: 0.25rem;\n}\n\n.form-select-lg {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  padding-left: 1.25rem;\n  font-size: 1rem;\n  border-radius: 0.5rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.434375rem;\n  padding-left: 1.7em;\n  margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.7em;\n}\n\n.form-check-reverse {\n  padding-right: 1.7em;\n  padding-left: 0;\n  text-align: right;\n}\n.form-check-reverse .form-check-input {\n  float: right;\n  margin-right: -1.7em;\n  margin-left: 0;\n}\n\n.form-check-input {\n  width: 1.2em;\n  height: 1.2em;\n  margin-top: 0.165em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid #d9dee3;\n  appearance: none;\n  print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n  border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n  border-radius: 50%;\n}\n.form-check-input:active {\n  filter: brightness(90%);\n}\n.form-check-input:focus {\n  border-color: rgba(249, 249, 255, 0.54);\n  outline: 0;\n  box-shadow: 0 0 0.25rem 0.05rem rgba(105, 108, 255, 0.1);\n}\n.form-check-input:checked {\n  background-color: rgba(105, 108, 255, 0.08);\n  border-color: rgba(105, 108, 255, 0.08);\n}\n.form-check-input:checked[type=checkbox] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='1.5' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n  background-color: rgba(105, 108, 255, 0.08);\n  border-color: rgba(105, 108, 255, 0.08);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  cursor: default;\n  opacity: 0.5;\n}\n\n.form-check-label {\n  cursor: pointer;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%2867, 89, 113, 0.3%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28249, 249, 255, 0.54%29'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n  padding-right: 2.5em;\n  padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n  margin-right: -2.5em;\n  margin-left: 0;\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 0.975rem;\n  padding: 0;\n  background-color: transparent;\n  appearance: none;\n}\n.form-range:focus {\n  outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 8px 0px rgba(67, 89, 113, 0.4);\n}\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 8px 0px rgba(67, 89, 113, 0.4);\n}\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n.form-range::-webkit-slider-thumb {\n  width: 0.875rem;\n  height: 0.875rem;\n  margin-top: -0.25rem;\n  background-color: #fff;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    transition: none;\n  }\n}\n.form-range::-webkit-slider-thumb:active {\n  background-color: #fff;\n}\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.375rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #eceef1;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n  width: 0.875rem;\n  height: 0.875rem;\n  background-color: #fff;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    transition: none;\n  }\n}\n.form-range::-moz-range-thumb:active {\n  background-color: #fff;\n}\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.375rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #eceef1;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range:disabled {\n  pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #d9dee3;\n}\n.form-range:disabled::-moz-range-thumb {\n  background-color: #d9dee3;\n}\n\n.form-floating {\n  position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  padding: 1rem 0.875rem;\n  overflow: hidden;\n  text-align: start;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  pointer-events: none;\n  border: 1px solid transparent;\n  transform-origin: 0 0;\n  transition: opacity 0.2s ease-in-out, transform 0.2s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n  padding: 1rem 0.875rem;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n  color: transparent;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.75;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.75;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n  border-width: 1px 0;\n}\n\n.input-group {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: stretch;\n  width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n  position: relative;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n  z-index: 5;\n}\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n.input-group .btn:focus {\n  z-index: 5;\n}\n\n.input-group-text {\n  display: flex;\n  align-items: center;\n  padding: 0.4375rem 0.875rem;\n  font-size: 0.9375rem;\n  font-weight: 400;\n  line-height: 1.53;\n  color: #697a8d;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #fff;\n  border: 1px solid #d9dee3;\n  border-radius: 0.375rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.75rem 1.25rem;\n  font-size: 1rem;\n  border-radius: 0.5rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.625rem;\n  font-size: 0.75rem;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 2.75rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn {\n  --bs-btn-padding-x: 1.25rem;\n  --bs-btn-padding-y: 0.4375rem;\n  --bs-btn-font-family: ;\n  --bs-btn-font-size: 0.9375rem;\n  --bs-btn-font-weight: 400;\n  --bs-btn-line-height: 1.53;\n  --bs-btn-color: #697a8d;\n  --bs-btn-bg: transparent;\n  --bs-btn-border-width: 1px;\n  --bs-btn-border-color: transparent;\n  --bs-btn-border-radius: 0.375rem;\n  --bs-btn-hover-border-color: transparent;\n  --bs-btn-box-shadow: none;\n  --bs-btn-disabled-opacity: 0.65;\n  --bs-btn-focus-box-shadow: 0 0 0 0.05rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n  display: inline-block;\n  padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n  font-family: var(--bs-btn-font-family);\n  font-size: var(--bs-btn-font-size);\n  font-weight: var(--bs-btn-font-weight);\n  line-height: var(--bs-btn-line-height);\n  color: var(--bs-btn-color);\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  user-select: none;\n  border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n  border-radius: var(--bs-btn-border-radius);\n  background-color: var(--bs-btn-bg);\n  transition: all 0.2s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n.btn:hover {\n  color: var(--bs-btn-hover-color);\n  background-color: var(--bs-btn-hover-bg);\n  border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n  color: var(--bs-btn-color);\n  background-color: var(--bs-btn-bg);\n  border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n  color: var(--bs-btn-hover-color);\n  background-color: var(--bs-btn-hover-bg);\n  border-color: var(--bs-btn-hover-border-color);\n  outline: 0;\n  box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n  border-color: var(--bs-btn-hover-border-color);\n  outline: 0;\n  box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n  color: var(--bs-btn-active-color);\n  background-color: var(--bs-btn-active-bg);\n  border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n  box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n  color: var(--bs-btn-disabled-color);\n  pointer-events: none;\n  background-color: var(--bs-btn-disabled-bg);\n  border-color: var(--bs-btn-disabled-border-color);\n  opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-link {\n  --bs-btn-font-weight: 400;\n  --bs-btn-color: var(--bs-link-color);\n  --bs-btn-bg: transparent;\n  --bs-btn-border-color: transparent;\n  --bs-btn-hover-color: var(--bs-link-hover-color);\n  --bs-btn-hover-border-color: transparent;\n  --bs-btn-active-color: var(--bs-link-hover-color);\n  --bs-btn-active-border-color: transparent;\n  --bs-btn-disabled-color: rgba(67, 89, 113, 0.6);\n  --bs-btn-disabled-border-color: transparent;\n  --bs-btn-box-shadow: none;\n  --bs-btn-focus-shadow-rgb: 128, 130, 255;\n  text-decoration: none;\n}\n.btn-link:focus-visible {\n  color: var(--bs-btn-color);\n}\n.btn-link:hover {\n  color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  --bs-btn-padding-y: 0.75rem;\n  --bs-btn-padding-x: 1.5rem;\n  --bs-btn-font-size: 1rem;\n  --bs-btn-border-radius: 0.5rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  --bs-btn-padding-y: 0.25rem;\n  --bs-btn-padding-x: 0.6875rem;\n  --bs-btn-font-size: 0.75rem;\n  --bs-btn-border-radius: 0.25rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.5em;\n  vertical-align: middle;\n  content: \"\";\n  margin-top: -0.28em;\n  width: 0.42em;\n  height: 0.42em;\n  border: 1px solid;\n  border-top: 0;\n  border-left: 0;\n  transform: rotate(45deg);\n}\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  --bs-dropdown-zindex: 1000;\n  --bs-dropdown-min-width: 12rem;\n  --bs-dropdown-padding-x: 0;\n  --bs-dropdown-padding-y: 0.3125rem;\n  --bs-dropdown-spacer: 0.125rem;\n  --bs-dropdown-font-size: 0.9375rem;\n  --bs-dropdown-color: #697a8d;\n  --bs-dropdown-bg: #fff;\n  --bs-dropdown-border-color: transparent;\n  --bs-dropdown-border-radius: 0.375rem;\n  --bs-dropdown-border-width: 1px;\n  --bs-dropdown-inner-border-radius: 0;\n  --bs-dropdown-divider-bg: #d9dee3;\n  --bs-dropdown-divider-margin-y: 0.5rem;\n  --bs-dropdown-box-shadow: 0 0.25rem 1rem rgba(161, 172, 184, 0.45);\n  --bs-dropdown-link-color: #697a8d;\n  --bs-dropdown-link-hover-color: #5f6e7f;\n  --bs-dropdown-link-hover-bg: rgba(67, 89, 113, 0.04);\n  --bs-dropdown-link-active-color: #fff;\n  --bs-dropdown-link-active-bg: rgba(105, 108, 255, 0.08);\n  --bs-dropdown-link-disabled-color: #c7cdd4;\n  --bs-dropdown-item-padding-x: 1.25rem;\n  --bs-dropdown-item-padding-y: 0.532rem;\n  --bs-dropdown-header-color: #a1acb8;\n  --bs-dropdown-header-padding-x: 1.25rem;\n  --bs-dropdown-header-padding-y: 0.3125rem;\n  position: absolute;\n  z-index: var(--bs-dropdown-zindex);\n  display: none;\n  min-width: var(--bs-dropdown-min-width);\n  padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n  margin: 0;\n  font-size: var(--bs-dropdown-font-size);\n  color: var(--bs-dropdown-color);\n  text-align: left;\n  list-style: none;\n  background-color: var(--bs-dropdown-bg);\n  background-clip: padding-box;\n  border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n  border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.5em;\n  vertical-align: middle;\n  content: \"\";\n  margin-top: 0;\n  width: 0.42em;\n  height: 0.42em;\n  border: 1px solid;\n  border-bottom: 0;\n  border-left: 0;\n  transform: rotate(-45deg);\n}\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.5em;\n  vertical-align: middle;\n  content: \"\";\n  border-top: 0.42em solid transparent;\n  border-right: 0;\n  border-bottom: 0.42em solid transparent;\n  border-left: 0.42em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.5em;\n  vertical-align: middle;\n  content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.5em;\n  vertical-align: middle;\n  content: \"\";\n  border-top: 0.42em solid transparent;\n  border-right: 0.42em solid;\n  border-bottom: 0.42em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: var(--bs-dropdown-divider-margin-y) 0;\n  overflow: hidden;\n  border-top: 1px solid var(--bs-dropdown-divider-bg);\n  opacity: 1;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n  clear: both;\n  font-weight: 400;\n  color: var(--bs-dropdown-link-color);\n  text-align: inherit;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n.dropdown-item:hover, .dropdown-item:focus {\n  color: var(--bs-dropdown-link-hover-color);\n  background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n  color: var(--bs-dropdown-link-active-color);\n  text-decoration: none;\n  background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: var(--bs-dropdown-link-disabled-color);\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n  margin-bottom: 0;\n  font-size: 0.75rem;\n  color: var(--bs-dropdown-header-color);\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n  color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n  --bs-dropdown-color: rgba(67, 89, 113, 0.3);\n  --bs-dropdown-bg: rgba(67, 89, 113, 0.8);\n  --bs-dropdown-border-color: transparent;\n  --bs-dropdown-box-shadow: ;\n  --bs-dropdown-link-color: rgba(67, 89, 113, 0.3);\n  --bs-dropdown-link-hover-color: #fff;\n  --bs-dropdown-divider-bg: #d9dee3;\n  --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n  --bs-dropdown-link-active-color: #fff;\n  --bs-dropdown-link-active-bg: rgba(105, 108, 255, 0.08);\n  --bs-dropdown-link-disabled-color: rgba(67, 89, 113, 0.5);\n  --bs-dropdown-header-color: rgba(67, 89, 113, 0.5);\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-flex;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group {\n  border-radius: 0.375rem;\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.9375rem;\n  padding-left: 0.9375rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.515625rem;\n  padding-left: 0.515625rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 1.125rem;\n  padding-left: 1.125rem;\n}\n\n.btn-group-vertical {\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  --bs-nav-link-padding-x: 1.25rem;\n  --bs-nav-link-padding-y: 0.5rem;\n  --bs-nav-link-font-weight: ;\n  --bs-nav-link-color: #8e9baa;\n  --bs-nav-link-hover-color: var(--bs-link-hover-color);\n  --bs-nav-link-disabled-color: #c7cdd4;\n  display: flex;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n  font-size: var(--bs-nav-link-font-size);\n  font-weight: var(--bs-nav-link-font-weight);\n  color: var(--bs-nav-link-color);\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n.nav-link:hover, .nav-link:focus {\n  color: var(--bs-nav-link-hover-color);\n}\n.nav-link.disabled {\n  color: var(--bs-nav-link-disabled-color);\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  --bs-nav-tabs-border-width: 1px;\n  --bs-nav-tabs-border-color: #fff;\n  --bs-nav-tabs-border-radius: 0.375rem;\n  --bs-nav-tabs-link-hover-border-color: rgba(67, 89, 113, 0.1);\n  --bs-nav-tabs-link-active-color: #697a8d;\n  --bs-nav-tabs-link-active-bg: #fff;\n  --bs-nav-tabs-link-active-border-color: #fff;\n  border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n  margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n  background: none;\n  border: var(--bs-nav-tabs-border-width) solid transparent;\n  border-top-left-radius: var(--bs-nav-tabs-border-radius);\n  border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  isolation: isolate;\n  border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {\n  color: var(--bs-nav-link-disabled-color);\n  background-color: transparent;\n  border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: var(--bs-nav-tabs-link-active-color);\n  background-color: var(--bs-nav-tabs-link-active-bg);\n  border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n  margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills {\n  --bs-nav-pills-border-radius: 0.375rem;\n  --bs-nav-pills-link-active-color: #fff;\n  --bs-nav-pills-link-active-bg: transparent;\n}\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link:disabled {\n  color: var(--bs-nav-link-disabled-color);\n  background-color: transparent;\n  border-color: transparent;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: var(--bs-nav-pills-link-active-color);\n  background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  flex-basis: 0;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  --bs-navbar-padding-x: 0;\n  --bs-navbar-padding-y: 0.5rem;\n  --bs-navbar-color: rgba(67, 89, 113, 0.5);\n  --bs-navbar-hover-color: #697a8d;\n  --bs-navbar-disabled-color: rgba(67, 89, 113, 0.3);\n  --bs-navbar-active-color: #697a8d;\n  --bs-navbar-brand-padding-y: 0.4521875rem;\n  --bs-navbar-brand-margin-end: 1rem;\n  --bs-navbar-brand-font-size: 1rem;\n  --bs-navbar-brand-color: #697a8d;\n  --bs-navbar-brand-hover-color: #697a8d;\n  --bs-navbar-nav-link-padding-x: 0.5rem;\n  --bs-navbar-toggler-padding-y: 0;\n  --bs-navbar-toggler-padding-x: 0;\n  --bs-navbar-toggler-font-size: 0.75rem;\n  --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12%29-Navbar' transform='translate%28-1174.000000, -1290.000000%29'%3E%3Cg id='Group' transform='translate%281174.000000, 1288.000000%29'%3E%3Cg id='Icon-Color' transform='translate%280.000000, 2.000000%29'%3E%3Cuse fill='rgba%2867, 89, 113, 0.5%29' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='rgba%2867, 89, 113, 0.5%29' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n  --bs-navbar-toggler-border-color: rgba(67, 89, 113, 0.06);\n  --bs-navbar-toggler-border-radius: 0.375rem;\n  --bs-navbar-toggler-focus-width: 0.05rem;\n  --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n  display: flex;\n  flex-wrap: inherit;\n  align-items: center;\n  justify-content: space-between;\n}\n.navbar-brand {\n  padding-top: var(--bs-navbar-brand-padding-y);\n  padding-bottom: var(--bs-navbar-brand-padding-y);\n  margin-right: var(--bs-navbar-brand-margin-end);\n  font-size: var(--bs-navbar-brand-font-size);\n  color: var(--bs-navbar-brand-color);\n  white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n  color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n  --bs-nav-link-padding-x: 0;\n  --bs-nav-link-padding-y: 0.5rem;\n  --bs-nav-link-font-weight: ;\n  --bs-nav-link-color: var(--bs-navbar-color);\n  --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n  --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.navbar-nav .show > .nav-link,\n.navbar-nav .nav-link.active {\n  color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n  color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n  flex-basis: 100%;\n  flex-grow: 1;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n  font-size: var(--bs-navbar-toggler-font-size);\n  line-height: 1;\n  color: var(--bs-navbar-color);\n  background-color: transparent;\n  border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n  border-radius: var(--bs-navbar-toggler-border-radius);\n  transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-image: var(--bs-navbar-toggler-icon-bg);\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-sm .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-md .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-lg .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-xl .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-xxl .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n.navbar-expand {\n  flex-wrap: nowrap;\n  justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n  flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: var(--bs-navbar-nav-link-padding-x);\n  padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n  display: flex !important;\n  flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n.navbar-expand .offcanvas {\n  position: static;\n  z-index: auto;\n  flex-grow: 1;\n  width: auto !important;\n  height: auto !important;\n  visibility: visible !important;\n  background-color: transparent !important;\n  border: 0 !important;\n  transform: none !important;\n  transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n  display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n  display: flex;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-dark {\n  --bs-navbar-color: rgba(255, 255, 255, 0.8);\n  --bs-navbar-hover-color: #fff;\n  --bs-navbar-disabled-color: rgba(255, 255, 255, 0.4);\n  --bs-navbar-active-color: #fff;\n  --bs-navbar-brand-color: #fff;\n  --bs-navbar-brand-hover-color: #fff;\n  --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n  --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12%29-Navbar' transform='translate%28-1174.000000, -1290.000000%29'%3E%3Cg id='Group' transform='translate%281174.000000, 1288.000000%29'%3E%3Cg id='Icon-Color' transform='translate%280.000000, 2.000000%29'%3E%3Cuse fill='rgba%28255, 255, 255, 0.8%29' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='rgba%28255, 255, 255, 0.8%29' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n\n.card {\n  --bs-card-spacer-y: 1.5rem;\n  --bs-card-spacer-x: 1.5rem;\n  --bs-card-title-spacer-y: 0.875rem;\n  --bs-card-border-width: 0;\n  --bs-card-border-color: #d9dee3;\n  --bs-card-border-radius: 0.5rem;\n  --bs-card-box-shadow: 0 2px 6px 0 rgba(67, 89, 113, 0.12);\n  --bs-card-inner-border-radius: 0.5rem;\n  --bs-card-cap-padding-y: 1.5rem;\n  --bs-card-cap-padding-x: 1.5rem;\n  --bs-card-cap-bg: transparent;\n  --bs-card-cap-color: ;\n  --bs-card-height: ;\n  --bs-card-color: ;\n  --bs-card-bg: #fff;\n  --bs-card-img-overlay-padding: 1.5rem;\n  --bs-card-group-margin: 0.8125rem;\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  height: var(--bs-card-height);\n  word-wrap: break-word;\n  background-color: var(--bs-card-bg);\n  background-clip: border-box;\n  border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n  border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: var(--bs-card-inner-border-radius);\n  border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: var(--bs-card-inner-border-radius);\n  border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  flex: 1 1 auto;\n  padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n  color: var(--bs-card-color);\n}\n\n.card-title {\n  margin-bottom: var(--bs-card-title-spacer-y);\n}\n\n.card-subtitle {\n  margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n  padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n  margin-bottom: 0;\n  color: var(--bs-card-cap-color);\n  background-color: var(--bs-card-cap-bg);\n  border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n  border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n  padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n  color: var(--bs-card-cap-color);\n  background-color: var(--bs-card-cap-bg);\n  border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n  border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n  margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n  margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n  margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n  border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n  background-color: var(--bs-card-bg);\n  border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n  margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n  margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: var(--bs-card-img-overlay-padding);\n  border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: var(--bs-card-inner-border-radius);\n  border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: var(--bs-card-inner-border-radius);\n  border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n  margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n  .card-group {\n    display: flex;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion {\n  --bs-accordion-color: #697a8d;\n  --bs-accordion-bg: #fff;\n  --bs-accordion-transition: all 0.2s ease-in-out, border-radius 0.15s ease;\n  --bs-accordion-border-color: #d9dee3;\n  --bs-accordion-border-width: 0;\n  --bs-accordion-border-radius: 0.375rem;\n  --bs-accordion-inner-border-radius: 0.375rem;\n  --bs-accordion-btn-padding-x: 1.125rem;\n  --bs-accordion-btn-padding-y: 0.79rem;\n  --bs-accordion-btn-color: #566a7f;\n  --bs-accordion-btn-bg: var(--bs-accordion-bg);\n  --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' d='m1.532 12 6.182-6-6.182-6L0 1.487 4.65 6 0 10.513z'/%3E%3C/defs%3E%3Cg transform='translate%282.571%29' fill='none' fill-rule='evenodd'%3E%3Cuse fill='%23435971' xlink:href='%23a'/%3E%3Cuse fill-opacity='.1' fill='%23566a7f' xlink:href='%23a'/%3E%3C/g%3E%3C/svg%3E%0A\");\n  --bs-accordion-btn-icon-width: 0.75rem;\n  --bs-accordion-btn-icon-transform: rotate(90deg);\n  --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n  --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' d='m1.532 12 6.182-6-6.182-6L0 1.487 4.65 6 0 10.513z'/%3E%3C/defs%3E%3Cg transform='translate%282.571%29' fill='none' fill-rule='evenodd'%3E%3Cuse fill='%23435971' xlink:href='%23a'/%3E%3Cuse fill-opacity='.1' fill='%23566a7f' xlink:href='%23a'/%3E%3C/g%3E%3C/svg%3E%0A\");\n  --bs-accordion-btn-focus-border-color: rgba(249, 249, 255, 0.54);\n  --bs-accordion-btn-focus-box-shadow: none;\n  --bs-accordion-body-padding-x: 1.125rem;\n  --bs-accordion-body-padding-y: 0.79rem;\n  --bs-accordion-active-color: #566a7f;\n  --bs-accordion-active-bg: #fff;\n}\n\n.accordion-button {\n  position: relative;\n  display: flex;\n  align-items: center;\n  width: 100%;\n  padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n  font-size: 0.9375rem;\n  color: var(--bs-accordion-btn-color);\n  text-align: left;\n  background-color: var(--bs-accordion-btn-bg);\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n.accordion-button:not(.collapsed) {\n  color: var(--bs-accordion-active-color);\n  background-color: var(--bs-accordion-active-bg);\n  box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n  background-image: var(--bs-accordion-btn-active-icon);\n  transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n  flex-shrink: 0;\n  width: var(--bs-accordion-btn-icon-width);\n  height: var(--bs-accordion-btn-icon-width);\n  margin-left: auto;\n  content: \"\";\n  background-image: var(--bs-accordion-btn-icon);\n  background-repeat: no-repeat;\n  background-size: var(--bs-accordion-btn-icon-width);\n  transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n.accordion-button:hover {\n  z-index: 2;\n}\n.accordion-button:focus {\n  z-index: 3;\n  border-color: var(--bs-accordion-btn-focus-border-color);\n  outline: 0;\n  box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  color: var(--bs-accordion-color);\n  background-color: var(--bs-accordion-bg);\n  border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n  border-top-left-radius: var(--bs-accordion-border-radius);\n  border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: var(--bs-accordion-inner-border-radius);\n  border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n.accordion-item:last-of-type {\n  border-bottom-right-radius: var(--bs-accordion-border-radius);\n  border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n  border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: var(--bs-accordion-border-radius);\n  border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n  padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  --bs-breadcrumb-padding-x: 0;\n  --bs-breadcrumb-padding-y: 0;\n  --bs-breadcrumb-margin-bottom: 1rem;\n  --bs-breadcrumb-bg: transparent;\n  --bs-breadcrumb-border-radius: ;\n  --bs-breadcrumb-divider-color: #a1acb8;\n  --bs-breadcrumb-item-padding-x: 0.5rem;\n  --bs-breadcrumb-item-active-color: #697a8d;\n  display: flex;\n  flex-wrap: wrap;\n  padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n  margin-bottom: var(--bs-breadcrumb-margin-bottom);\n  font-size: var(--bs-breadcrumb-font-size);\n  list-style: none;\n  background-color: var(--bs-breadcrumb-bg);\n  border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: var(--bs-breadcrumb-item-padding-x);\n  color: var(--bs-breadcrumb-divider-color);\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"\\\\\") */;\n}\n.breadcrumb-item.active {\n  color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n  --bs-pagination-padding-x: 0.5125rem;\n  --bs-pagination-padding-y: 0.625rem;\n  --bs-pagination-font-size: 0.9375rem;\n  --bs-pagination-color: #697a8d;\n  --bs-pagination-bg: #f0f2f4;\n  --bs-pagination-border-width: 0px;\n  --bs-pagination-border-color: #d9dee3;\n  --bs-pagination-border-radius: 0.25rem;\n  --bs-pagination-hover-color: #697a8d;\n  --bs-pagination-hover-bg: #e1e4e8;\n  --bs-pagination-hover-border-color: rgba(67, 89, 113, 0.3);\n  --bs-pagination-focus-color: #697a8d;\n  --bs-pagination-focus-bg: #e1e4e8;\n  --bs-pagination-focus-box-shadow: none;\n  --bs-pagination-active-color: #fff;\n  --bs-pagination-active-bg: rgba(105, 108, 255, 0.08);\n  --bs-pagination-active-border-color: rgba(105, 108, 255, 0.08);\n  --bs-pagination-disabled-color: #a1acb8;\n  --bs-pagination-disabled-bg: #f7f8f9;\n  --bs-pagination-disabled-border-color: rgba(67, 89, 113, 0.3);\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n  font-size: var(--bs-pagination-font-size);\n  color: var(--bs-pagination-color);\n  background-color: var(--bs-pagination-bg);\n  border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n.page-link:hover {\n  z-index: 2;\n  color: var(--bs-pagination-hover-color);\n  background-color: var(--bs-pagination-hover-bg);\n  border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n  z-index: 3;\n  color: var(--bs-pagination-focus-color);\n  background-color: var(--bs-pagination-focus-bg);\n  outline: 0;\n  box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n  z-index: 3;\n  color: var(--bs-pagination-active-color);\n  background-color: var(--bs-pagination-active-bg);\n  border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n  color: var(--bs-pagination-disabled-color);\n  pointer-events: none;\n  background-color: var(--bs-pagination-disabled-bg);\n  border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: 0.1875rem;\n}\n.page-item .page-link {\n  border-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n  --bs-pagination-padding-x: 0.5rem;\n  --bs-pagination-padding-y: 0.9375rem;\n  --bs-pagination-font-size: 1rem;\n  --bs-pagination-border-radius: 0.5rem;\n}\n\n.pagination-sm {\n  --bs-pagination-padding-x: 0.25rem;\n  --bs-pagination-padding-y: 0.375rem;\n  --bs-pagination-font-size: 0.75rem;\n  --bs-pagination-border-radius: 0.25rem;\n}\n\n.badge {\n  --bs-badge-padding-x: 0.593em;\n  --bs-badge-padding-y: 0.52em;\n  --bs-badge-font-size: 0.8125em;\n  --bs-badge-font-weight: 500;\n  --bs-badge-color: #fff;\n  --bs-badge-border-radius: 0.25rem;\n  display: inline-block;\n  padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n  font-size: var(--bs-badge-font-size);\n  font-weight: var(--bs-badge-font-weight);\n  line-height: 1;\n  color: var(--bs-badge-color);\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  --bs-alert-bg: transparent;\n  --bs-alert-padding-x: 0.9375rem;\n  --bs-alert-padding-y: 0.9375rem;\n  --bs-alert-margin-bottom: 1rem;\n  --bs-alert-color: inherit;\n  --bs-alert-border-color: transparent;\n  --bs-alert-border: 0 solid var(--bs-alert-border-color);\n  --bs-alert-border-radius: 0.375rem;\n  position: relative;\n  padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n  margin-bottom: var(--bs-alert-margin-bottom);\n  color: var(--bs-alert-color);\n  background-color: var(--bs-alert-bg);\n  border: var(--bs-alert-border);\n  border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 2.8125rem;\n}\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.171875rem 0.9375rem;\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 0.75rem;\n  }\n}\n.progress {\n  --bs-progress-height: 0.75rem;\n  --bs-progress-font-size: 0.625rem;\n  --bs-progress-bg: rgba(67, 89, 113, 0.1);\n  --bs-progress-border-radius: 10rem;\n  --bs-progress-box-shadow: inset 0 1px 2px rgba(67, 89, 113, 0.075);\n  --bs-progress-bar-color: #fff;\n  --bs-progress-bar-bg: #696cff;\n  --bs-progress-bar-transition: width 0.6s ease;\n  display: flex;\n  height: var(--bs-progress-height);\n  overflow: hidden;\n  font-size: var(--bs-progress-font-size);\n  background-color: var(--bs-progress-bg);\n  border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  overflow: hidden;\n  color: var(--bs-progress-bar-color);\n  text-align: center;\n  white-space: nowrap;\n  background-color: var(--bs-progress-bar-bg);\n  transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-bar-animated {\n  animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    animation: none;\n  }\n}\n\n.list-group {\n  --bs-list-group-color: #697a8d;\n  --bs-list-group-bg: transparent;\n  --bs-list-group-border-color: #d9dee3;\n  --bs-list-group-border-width: 1px;\n  --bs-list-group-border-radius: 0.5rem;\n  --bs-list-group-item-padding-x: 0.9375rem;\n  --bs-list-group-item-padding-y: 0.58rem;\n  --bs-list-group-action-color: #8e9baa;\n  --bs-list-group-action-hover-color: #697a8d;\n  --bs-list-group-action-hover-bg: rgba(67, 89, 113, 0.06);\n  --bs-list-group-action-active-color: #697a8d;\n  --bs-list-group-action-active-bg: rgba(67, 89, 113, 0.05);\n  --bs-list-group-disabled-color: #c7cdd4;\n  --bs-list-group-disabled-bg: transparent;\n  --bs-list-group-active-color: #fff;\n  --bs-list-group-active-bg: rgba(105, 108, 255, 0.08);\n  --bs-list-group-active-border-color: rgba(105, 108, 255, 0.08);\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: var(--bs-list-group-action-color);\n  text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: var(--bs-list-group-action-hover-color);\n  text-decoration: none;\n  background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n  color: var(--bs-list-group-action-active-color);\n  background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n  color: var(--bs-list-group-color);\n  background-color: var(--bs-list-group-bg);\n  border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n  color: var(--bs-list-group-disabled-color);\n  pointer-events: none;\n  background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n  z-index: 2;\n  color: var(--bs-list-group-active-color);\n  background-color: var(--bs-list-group-active-bg);\n  border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n  margin-top: calc(-1 * var(--bs-list-group-border-width));\n  border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n  flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n  border-bottom-left-radius: var(--bs-list-group-border-radius);\n  border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n  border-top-right-radius: var(--bs-list-group-border-radius);\n  border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: var(--bs-list-group-border-width);\n  border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: calc(-1 * var(--bs-list-group-border-width));\n  border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n.list-group-flush {\n  border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n  border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 0.8em;\n  height: 0.8em;\n  padding: 0.25em 0.25em;\n  color: #a1acb8;\n  background: transparent url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate%28-225.000000, -250.000000%29'%3E%3Cg id='Icon-Color' transform='translate%28225.000000, 250.500000%29'%3E%3Cuse fill='%23a1acb8' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.5' fill='%23a1acb8' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\") center/0.8em auto no-repeat;\n  border: 0;\n  border-radius: 0.375rem;\n  opacity: 0.95;\n}\n.btn-close:hover {\n  color: #a1acb8;\n  text-decoration: none;\n  opacity: 0.95;\n}\n.btn-close:focus {\n  outline: 0;\n  box-shadow: none;\n  opacity: 0.95;\n}\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  --bs-toast-zindex: 1095;\n  --bs-toast-padding-x: 1.25rem;\n  --bs-toast-padding-y: 1.25rem;\n  --bs-toast-spacing: 1.25rem;\n  --bs-toast-max-width: 350px;\n  --bs-toast-font-size: 0.9375rem;\n  --bs-toast-color: ;\n  --bs-toast-bg: #fff;\n  --bs-toast-border-width: 0;\n  --bs-toast-border-color: rgba(67, 89, 113, 0.1);\n  --bs-toast-border-radius: 0.5rem;\n  --bs-toast-box-shadow: 0 0.25rem 1rem rgba(161, 172, 184, 0.45);\n  --bs-toast-header-color: #697a8d;\n  --bs-toast-header-bg: transparent;\n  --bs-toast-header-border-color: transparent;\n  width: var(--bs-toast-max-width);\n  max-width: 100%;\n  font-size: var(--bs-toast-font-size);\n  color: var(--bs-toast-color);\n  pointer-events: auto;\n  background-color: var(--bs-toast-bg);\n  background-clip: padding-box;\n  border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n  box-shadow: var(--bs-toast-box-shadow);\n  border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n  opacity: 0;\n}\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  --bs-toast-zindex: 1095;\n  position: absolute;\n  z-index: var(--bs-toast-zindex);\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n  margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n  display: flex;\n  align-items: center;\n  padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n  color: var(--bs-toast-header-color);\n  background-color: var(--bs-toast-header-bg);\n  background-clip: padding-box;\n  border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n  border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n  border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n  margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n  margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n  padding: var(--bs-toast-padding-x);\n  word-wrap: break-word;\n}\n\n.modal {\n  --bs-modal-zindex: 1090;\n  --bs-modal-width: 35rem;\n  --bs-modal-padding: 1.5rem;\n  --bs-modal-margin: 1.5rem;\n  --bs-modal-color: ;\n  --bs-modal-bg: #fff;\n  --bs-modal-border-color: var(--bs-border-color-translucent);\n  --bs-modal-border-width: 0px;\n  --bs-modal-border-radius: 0.5rem;\n  --bs-modal-box-shadow: 0 2px 16px 0 rgba(67, 89, 113, 0.45);\n  --bs-modal-inner-border-radius: calc(0.5rem - 0px);\n  --bs-modal-header-padding-x: 1.5rem;\n  --bs-modal-header-padding-y: 0.25rem;\n  --bs-modal-header-padding: 1.5rem 1.5rem 0.25rem;\n  --bs-modal-header-border-color: var(--bs-border-color);\n  --bs-modal-header-border-width: 0px;\n  --bs-modal-title-line-height: 1.53;\n  --bs-modal-footer-gap: 0.5rem;\n  --bs-modal-footer-bg: ;\n  --bs-modal-footer-border-color: var(--bs-border-color);\n  --bs-modal-footer-border-width: 0px;\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: var(--bs-modal-zindex);\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: var(--bs-modal-margin);\n  pointer-events: none;\n}\n.modal.fade .modal-dialog {\n  transition: transform 0.15s ease-out;\n  transform: translateY(-100px) scale(0.8);\n}\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n.modal.show .modal-dialog {\n  transform: translateY(0) scale(1);\n}\n.modal.modal-static .modal-dialog {\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: flex;\n  align-items: center;\n  min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  color: var(--bs-modal-color);\n  pointer-events: auto;\n  background-color: var(--bs-modal-bg);\n  background-clip: padding-box;\n  border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n  border-radius: var(--bs-modal-border-radius);\n  outline: 0;\n}\n\n.modal-backdrop {\n  --bs-backdrop-zindex: 1089;\n  --bs-backdrop-bg: #435971;\n  --bs-backdrop-opacity: 0.5;\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: var(--bs-backdrop-zindex);\n  width: 100vw;\n  height: 100vh;\n  background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n  opacity: 0;\n}\n.modal-backdrop.show {\n  opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  justify-content: space-between;\n  padding: var(--bs-modal-header-padding);\n  border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n  border-top-left-radius: var(--bs-modal-inner-border-radius);\n  border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n  padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n  margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n  position: relative;\n  flex: 1 1 auto;\n  padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n  display: flex;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: flex-end;\n  padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n  background-color: var(--bs-modal-footer-bg);\n  border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n  border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n  border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n  margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n  .modal {\n    --bs-modal-margin: 1.75rem;\n    --bs-modal-box-shadow: 0 2px 20px 0 rgba(67, 89, 113, 0.45);\n  }\n  .modal-dialog {\n    max-width: var(--bs-modal-width);\n    margin-right: auto;\n    margin-left: auto;\n  }\n  .modal-sm {\n    --bs-modal-width: 22.5rem;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    --bs-modal-width: 50rem;\n  }\n}\n@media (min-width: 1200px) {\n  .modal-xl {\n    --bs-modal-width: 1140px;\n  }\n}\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header,\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header,\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header,\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header,\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header,\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n.tooltip {\n  --bs-tooltip-zindex: 1099;\n  --bs-tooltip-max-width: 200px;\n  --bs-tooltip-padding-x: 0.7rem;\n  --bs-tooltip-padding-y: 0.25rem;\n  --bs-tooltip-margin: ;\n  --bs-tooltip-font-size: 0.9375rem;\n  --bs-tooltip-color: #fff;\n  --bs-tooltip-bg: #233446;\n  --bs-tooltip-border-radius: 0.25rem;\n  --bs-tooltip-opacity: 1;\n  --bs-tooltip-arrow-width: 0.8rem;\n  --bs-tooltip-arrow-height: 0.4rem;\n  z-index: var(--bs-tooltip-zindex);\n  display: block;\n  padding: var(--bs-tooltip-arrow-height);\n  margin: var(--bs-tooltip-margin);\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.53;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  white-space: normal;\n  word-spacing: normal;\n  line-break: auto;\n  font-size: var(--bs-tooltip-font-size);\n  word-wrap: break-word;\n  opacity: 0;\n}\n.tooltip.show {\n  opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n  display: block;\n  width: var(--bs-tooltip-arrow-width);\n  height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n  bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n  top: -1px;\n  border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n  border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n  left: 0;\n  width: var(--bs-tooltip-arrow-height);\n  height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n  right: -1px;\n  border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n  border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n  top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n  border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n  right: 0;\n  width: var(--bs-tooltip-arrow-height);\n  height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n  left: -1px;\n  border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n  border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n  max-width: var(--bs-tooltip-max-width);\n  padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n  color: var(--bs-tooltip-color);\n  text-align: center;\n  background-color: var(--bs-tooltip-bg);\n  border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n  --bs-popover-zindex: 1091;\n  --bs-popover-max-width: 276px;\n  --bs-popover-font-size: 0.9375rem;\n  --bs-popover-bg: #fff;\n  --bs-popover-border-width: 0px;\n  --bs-popover-border-color: var(--bs-border-color-translucent);\n  --bs-popover-border-radius: 0.5rem;\n  --bs-popover-inner-border-radius: calc(0.5rem - 0px);\n  --bs-popover-box-shadow: 0 0.25rem 1rem rgba(161, 172, 184, 0.45);\n  --bs-popover-header-padding-x: 1.125rem;\n  --bs-popover-header-padding-y: 0;\n  --bs-popover-header-font-size: 1.125rem;\n  --bs-popover-header-color: #566a7f;\n  --bs-popover-header-bg: transparent;\n  --bs-popover-body-padding-x: 1.125rem;\n  --bs-popover-body-padding-y: 1.125rem;\n  --bs-popover-body-color: #697a8d;\n  --bs-popover-arrow-width: 1rem;\n  --bs-popover-arrow-height: 0.5rem;\n  --bs-popover-arrow-border: var(--bs-popover-border-color);\n  z-index: var(--bs-popover-zindex);\n  display: block;\n  max-width: var(--bs-popover-max-width);\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.53;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  white-space: normal;\n  word-spacing: normal;\n  line-break: auto;\n  font-size: var(--bs-popover-font-size);\n  word-wrap: break-word;\n  background-color: var(--bs-popover-bg);\n  background-clip: padding-box;\n  border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n  border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n  display: block;\n  width: var(--bs-popover-arrow-width);\n  height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n  border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n  bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n  border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n  bottom: 0;\n  border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n  bottom: var(--bs-popover-border-width);\n  border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n  left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n  width: var(--bs-popover-arrow-height);\n  height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n  border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n  left: 0;\n  border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n  left: var(--bs-popover-border-width);\n  border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n  top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n  border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n  top: 0;\n  border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n  top: var(--bs-popover-border-width);\n  border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: var(--bs-popover-arrow-width);\n  margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n  content: \"\";\n  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n  right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n  width: var(--bs-popover-arrow-height);\n  height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n  border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n  right: 0;\n  border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n  right: var(--bs-popover-border-width);\n  border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n  padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n  margin-bottom: 0;\n  font-size: var(--bs-popover-header-font-size);\n  color: var(--bs-popover-header-color);\n  background-color: var(--bs-popover-header-bg);\n  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n  border-top-left-radius: var(--bs-popover-inner-border-radius);\n  border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n  color: var(--bs-popover-body-color);\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  backface-visibility: hidden;\n  transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 14%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 1;\n  transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 1;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2.55rem;\n  height: 2.55rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' style='fill: %23fff;transform: ;msFilter:;'%3E%3Cpath d='M13.293 6.293 7.586 12l5.707 5.707 1.414-1.414L10.414 12l4.293-4.293z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' style='fill: %23fff;transform: ;msFilter:;'%3E%3Cpath d='M10.707 17.707 16.414 12l-5.707-5.707-1.414 1.414L13.586 12l-4.293 4.293z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: flex;\n  justify-content: center;\n  padding: 0;\n  margin-right: 14%;\n  margin-bottom: 1rem;\n  margin-left: 14%;\n  list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #435971;\n}\n.carousel-dark .carousel-caption {\n  color: #435971;\n}\n\n.spinner-grow,\n.spinner-border {\n  display: inline-block;\n  width: var(--bs-spinner-width);\n  height: var(--bs-spinner-height);\n  vertical-align: var(--bs-spinner-vertical-align);\n  border-radius: 50%;\n  animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n  to {\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n.spinner-border {\n  --bs-spinner-width: 2rem;\n  --bs-spinner-height: 2rem;\n  --bs-spinner-vertical-align: -0.125em;\n  --bs-spinner-border-width: 0.25em;\n  --bs-spinner-animation-speed: 0.75s;\n  --bs-spinner-animation-name: spinner-border;\n  border: var(--bs-spinner-border-width) solid currentcolor;\n  border-right-color: transparent;\n}\n\n.spinner-border-sm {\n  --bs-spinner-width: 1rem;\n  --bs-spinner-height: 1rem;\n  --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n  0% {\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    transform: none;\n  }\n}\n.spinner-grow {\n  --bs-spinner-width: 2rem;\n  --bs-spinner-height: 2rem;\n  --bs-spinner-vertical-align: -0.125em;\n  --bs-spinner-animation-speed: 0.75s;\n  --bs-spinner-animation-name: spinner-grow;\n  background-color: currentcolor;\n  opacity: 0;\n}\n\n.spinner-grow-sm {\n  --bs-spinner-width: 1rem;\n  --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    --bs-spinner-animation-speed: 1.5s;\n  }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n  --bs-offcanvas-zindex: 1090;\n  --bs-offcanvas-width: 400px;\n  --bs-offcanvas-height: 30vh;\n  --bs-offcanvas-padding-x: 1.5rem;\n  --bs-offcanvas-padding-y: 1.5rem;\n  --bs-offcanvas-color: ;\n  --bs-offcanvas-bg: #fff;\n  --bs-offcanvas-border-width: 0px;\n  --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n  --bs-offcanvas-box-shadow: 0 2px 16px 0 rgba(67, 89, 113, 0.45);\n}\n\n@media (max-width: 575.98px) {\n  .offcanvas-sm {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: transform 0.25s ease-in-out;\n  }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-sm {\n    transition: none;\n  }\n}\n@media (max-width: 575.98px) {\n  .offcanvas-sm.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-sm.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-sm.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-sm.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 576px) {\n  .offcanvas-sm {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-sm .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-sm .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .offcanvas-md {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: transform 0.25s ease-in-out;\n  }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-md {\n    transition: none;\n  }\n}\n@media (max-width: 767.98px) {\n  .offcanvas-md.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-md.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-md.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-md.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 768px) {\n  .offcanvas-md {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-md .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-md .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .offcanvas-lg {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: transform 0.25s ease-in-out;\n  }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-lg {\n    transition: none;\n  }\n}\n@media (max-width: 991.98px) {\n  .offcanvas-lg.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-lg.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-lg.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-lg.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 992px) {\n  .offcanvas-lg {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-lg .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-lg .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .offcanvas-xl {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: transform 0.25s ease-in-out;\n  }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-xl {\n    transition: none;\n  }\n}\n@media (max-width: 1199.98px) {\n  .offcanvas-xl.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-xl.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-xl.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-xl.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 1200px) {\n  .offcanvas-xl {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-xl .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-xl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .offcanvas-xxl {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: transform 0.25s ease-in-out;\n  }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-xxl {\n    transition: none;\n  }\n}\n@media (max-width: 1399.98px) {\n  .offcanvas-xxl.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-xxl.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-xxl.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-xxl.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 1400px) {\n  .offcanvas-xxl {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-xxl .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-xxl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: var(--bs-offcanvas-zindex);\n  display: flex;\n  flex-direction: column;\n  max-width: 100%;\n  color: var(--bs-offcanvas-color);\n  visibility: hidden;\n  background-color: var(--bs-offcanvas-bg);\n  background-clip: padding-box;\n  outline: 0;\n  transition: transform 0.25s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n.offcanvas.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: var(--bs-offcanvas-width);\n  border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: var(--bs-offcanvas-width);\n  border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: var(--bs-offcanvas-height);\n  max-height: 100%;\n  border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: var(--bs-offcanvas-height);\n  max-height: 100%;\n  border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n  transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n  visibility: visible;\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1089;\n  width: 100vw;\n  height: 100vh;\n  background-color: #435971;\n}\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n  padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n  margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n  margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));\n  margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.53;\n}\n\n.offcanvas-body {\n  flex-grow: 1;\n  padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n  overflow-y: auto;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentcolor;\n  opacity: 0.5;\n}\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: 0.6em;\n}\n\n.placeholder-sm {\n  min-height: 0.8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n.placeholder-wave {\n  mask-image: linear-gradient(130deg, #435971 55%, rgba(0, 0, 0, 0.8) 75%, #435971 95%);\n  mask-size: 200% 100%;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n  100% {\n    mask-position: -200% 0%;\n  }\n}\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.text-bg-primary {\n  color: #fff !important;\n  background-color: RGBA(105, 108, 255, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n  color: #fff !important;\n  background-color: RGBA(133, 146, 163, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n  color: #fff !important;\n  background-color: RGBA(113, 221, 55, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n  color: #fff !important;\n  background-color: RGBA(3, 195, 236, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n  color: #fff !important;\n  background-color: RGBA(255, 171, 0, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n  color: #fff !important;\n  background-color: RGBA(255, 62, 29, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n  color: #435971 !important;\n  background-color: RGBA(252, 253, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n  color: #fff !important;\n  background-color: RGBA(35, 52, 70, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-gray {\n  color: #fff !important;\n  background-color: RGBA(67, 89, 113, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n  color: #696cff !important;\n}\n.link-primary:hover, .link-primary:focus {\n  color: #5f61e6 !important;\n}\n\n.link-secondary {\n  color: #8592a3 !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n  color: #788393 !important;\n}\n\n.link-success {\n  color: #71dd37 !important;\n}\n.link-success:hover, .link-success:focus {\n  color: #66c732 !important;\n}\n\n.link-info {\n  color: #03c3ec !important;\n}\n.link-info:hover, .link-info:focus {\n  color: #03b0d4 !important;\n}\n\n.link-warning {\n  color: #ffab00 !important;\n}\n.link-warning:hover, .link-warning:focus {\n  color: #e69a00 !important;\n}\n\n.link-danger {\n  color: #ff3e1d !important;\n}\n.link-danger:hover, .link-danger:focus {\n  color: #e6381a !important;\n}\n\n.link-light {\n  color: #fcfdfd !important;\n}\n.link-light:hover, .link-light:focus {\n  color: #fcfdfd !important;\n}\n\n.link-dark {\n  color: #233446 !important;\n}\n.link-dark:hover, .link-dark:focus {\n  color: #202f3f !important;\n}\n\n.link-gray {\n  color: rgba(67, 89, 113, 0.1) !important;\n}\n.link-gray:hover, .link-gray:focus {\n  color: rgba(22, 29, 36, 0.19) !important;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n.sticky-bottom {\n  position: sticky;\n  bottom: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-sm-bottom {\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-md-bottom {\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-lg-bottom {\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-xl-bottom {\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-xxl-bottom {\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n.hstack {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  align-self: stretch;\n}\n\n.vstack {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentcolor;\n  opacity: 1;\n}\n\n:root {\n  color-scheme: light;\n}\n\nb,\nstrong {\n  font-weight: 700;\n}\n\na:not([href]) {\n  color: inherit;\n  text-decoration: none;\n}\na:not([href]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\ninput:-webkit-autofill,\ninput:-webkit-autofill:hover,\ninput:-webkit-autofill:focus,\ntextarea:-webkit-autofill,\ntextarea:-webkit-autofill:hover,\ntextarea:-webkit-autofill:focus,\nselect:-webkit-autofill,\nselect:-webkit-autofill:hover,\nselect:-webkit-autofill:focus,\ninput:-internal-autofill-selected {\n  background-clip: text !important;\n  -webkit-background-clip: text !important;\n}\n\n.row-bordered {\n  overflow: hidden;\n}\n.row-bordered > .col,\n.row-bordered > [class^=col-],\n.row-bordered > [class*=\" col-\"],\n.row-bordered > [class^=\"col \"],\n.row-bordered > [class*=\" col \"],\n.row-bordered > [class$=\" col\"],\n.row-bordered > [class=col] {\n  position: relative;\n  padding-top: 1px;\n}\n.row-bordered > .col::before,\n.row-bordered > [class^=col-]::before,\n.row-bordered > [class*=\" col-\"]::before,\n.row-bordered > [class^=\"col \"]::before,\n.row-bordered > [class*=\" col \"]::before,\n.row-bordered > [class$=\" col\"]::before,\n.row-bordered > [class=col]::before {\n  content: \"\";\n  position: absolute;\n  right: 0;\n  bottom: -1px;\n  left: 0;\n  display: block;\n  height: 0;\n  border-top: 1px solid #d9dee3;\n}\n.row-bordered > .col::after,\n.row-bordered > [class^=col-]::after,\n.row-bordered > [class*=\" col-\"]::after,\n.row-bordered > [class^=\"col \"]::after,\n.row-bordered > [class*=\" col \"]::after,\n.row-bordered > [class$=\" col\"]::after,\n.row-bordered > [class=col]::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: -1px;\n  display: block;\n  width: 0;\n  border-left: 1px solid #d9dee3;\n}\n.row-bordered.row-border-light > .col::before, .row-bordered.row-border-light > .col::after,\n.row-bordered.row-border-light > [class^=col-]::before,\n.row-bordered.row-border-light > [class^=col-]::after,\n.row-bordered.row-border-light > [class*=\" col-\"]::before,\n.row-bordered.row-border-light > [class*=\" col-\"]::after,\n.row-bordered.row-border-light > [class^=\"col \"]::before,\n.row-bordered.row-border-light > [class^=\"col \"]::after,\n.row-bordered.row-border-light > [class*=\" col \"]::before,\n.row-bordered.row-border-light > [class*=\" col \"]::after,\n.row-bordered.row-border-light > [class$=\" col\"]::before,\n.row-bordered.row-border-light > [class$=\" col\"]::after,\n.row-bordered.row-border-light > [class=col]::before,\n.row-bordered.row-border-light > [class=col]::after {\n  border-color: rgba(67, 89, 113, 0.1);\n}\n\n.bg-label-secondary {\n  background-color: #ebeef0 !important;\n  color: #8592a3 !important;\n}\n\n.border-label-secondary {\n  border: 3px solid #ced3da !important;\n}\n\n.border-light-secondary {\n  border: 3px solid rgba(133, 146, 163, 0.08);\n}\n\n.bg-label-success {\n  background-color: #e8fadf !important;\n  color: #71dd37 !important;\n}\n\n.border-label-success {\n  border: 3px solid #c6f1af !important;\n}\n\n.border-light-success {\n  border: 3px solid rgba(113, 221, 55, 0.08);\n}\n\n.bg-label-info {\n  background-color: #d7f5fc !important;\n  color: #03c3ec !important;\n}\n\n.border-label-info {\n  border: 3px solid #9ae7f7 !important;\n}\n\n.border-light-info {\n  border: 3px solid rgba(3, 195, 236, 0.08);\n}\n\n.bg-label-warning {\n  background-color: #fff2d6 !important;\n  color: #ffab00 !important;\n}\n\n.border-label-warning {\n  border: 3px solid #ffdd99 !important;\n}\n\n.border-light-warning {\n  border: 3px solid rgba(255, 171, 0, 0.08);\n}\n\n.bg-label-danger {\n  background-color: #ffe0db !important;\n  color: #ff3e1d !important;\n}\n\n.border-label-danger {\n  border: 3px solid #ffb2a5 !important;\n}\n\n.border-light-danger {\n  border: 3px solid rgba(255, 62, 29, 0.08);\n}\n\n.bg-label-light {\n  background-color: white !important;\n  color: #fcfdfd !important;\n}\n\n.border-label-light {\n  border: 3px solid #fefefe !important;\n}\n\n.border-light-light {\n  border: 3px solid rgba(252, 253, 253, 0.08);\n}\n\n.bg-label-dark {\n  background-color: #dcdfe1 !important;\n  color: #233446 !important;\n}\n\n.border-label-dark {\n  border: 3px solid #a7aeb5 !important;\n}\n\n.border-light-dark {\n  border: 3px solid rgba(35, 52, 70, 0.08);\n}\n\n.bg-label-gray {\n  background-color: rgba(253, 253, 254, 0.856) !important;\n  color: rgba(67, 89, 113, 0.1) !important;\n}\n\n.border-label-gray {\n  border: 3px solid rgba(249, 249, 250, 0.64) !important;\n}\n\n.border-light-gray {\n  border: 3px solid rgba(67, 89, 113, 0.08);\n}\n\na.bg-dark:hover, a.bg-dark:focus {\n  background-color: rgba(67, 89, 113, 0.9) !important;\n}\n\na.bg-light:hover, a.bg-light:focus {\n  background-color: rgba(67, 89, 113, 0.2) !important;\n}\n\na.bg-lighter:hover, a.bg-lighter:focus {\n  background-color: rgba(67, 89, 113, 0.1) !important;\n}\n\na.bg-lightest:hover, a.bg-lightest:focus {\n  background-color: rgba(67, 89, 113, 0.05) !important;\n}\n\n.text-muted[href]:hover, .text-muted[href]:focus {\n  color: #8e9baa !important;\n}\n\n.text-light {\n  color: #b4bdc6 !important;\n}\n.text-light[href]:hover, .text-light[href]:focus {\n  color: #8e9baa !important;\n}\n\n.text-lighter {\n  color: #c7cdd4 !important;\n}\n.text-lighter[href]:hover, .text-lighter[href]:focus {\n  color: #8e9baa !important;\n}\n\n.text-lightest {\n  color: #d9dee3 !important;\n}\n.text-lightest[href]:hover, .text-lightest[href]:focus {\n  color: #8e9baa !important;\n}\n\n.invert-text-white {\n  color: #fff !important;\n}\n\n.invert-text-white[href]:hover:hover, .invert-text-white[href]:hover:focus {\n  color: #fff !important;\n}\n\n.invert-text-dark {\n  color: #435971 !important;\n}\n\n.invert-text-dark[href]:hover:hover, .invert-text-dark[href]:hover:focus {\n  color: #435971 !important;\n}\n\n.invert-bg-white {\n  background-color: #fff !important;\n}\n\na.invert-bg-white:hover, a.invert-bg-white:focus {\n  background-color: #fff !important;\n}\n\n.invert-bg-dark {\n  background-color: rgba(67, 89, 113, 0.9) !important;\n}\n\na.invert-bg-dark:hover, a.invert-bg-dark:focus {\n  background-color: rgba(67, 89, 113, 0.9) !important;\n}\n\n.invert-border-dark {\n  border-color: #233446 !important;\n}\n\n.invert-border-white {\n  border-color: #fff !important;\n}\n\n.container-p-x {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n@media (min-width: 992px) {\n  .container-p-x {\n    padding-right: 1.625rem !important;\n    padding-left: 1.625rem !important;\n  }\n}\n\n.container-m-nx {\n  margin-right: -1rem !important;\n  margin-left: -1rem !important;\n}\n@media (min-width: 992px) {\n  .container-m-nx {\n    margin-right: -1.625rem !important;\n    margin-left: -1.625rem !important;\n  }\n}\n\n.container-p-y:not([class^=pt-]):not([class*=\" pt-\"]) {\n  padding-top: 1.625rem !important;\n}\n.container-p-y:not([class^=pb-]):not([class*=\" pb-\"]) {\n  padding-bottom: 1.625rem !important;\n}\n\n.container-m-ny:not([class^=mt-]):not([class*=\" mt-\"]) {\n  margin-top: -1.625rem !important;\n}\n.container-m-ny:not([class^=mb-]):not([class*=\" mb-\"]) {\n  margin-bottom: -1.625rem !important;\n}\n\n.cell-fit {\n  width: 0.1%;\n  white-space: nowrap;\n}\n\n.table-secondary {\n  --bs-table-bg: #e7e9ed;\n  --bs-table-striped-bg: #e2e5e9;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #d7dbe1;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #dde0e6;\n  --bs-table-hover-color: #435971;\n  color: #435971;\n  border-color: #d7dbe1;\n}\n.table-secondary th {\n  border-bottom-color: inherit !important;\n}\n.table-secondary .btn-icon {\n  color: #435971;\n}\n\n.table-success {\n  --bs-table-bg: #e3f8d7;\n  --bs-table-striped-bg: #def3d4;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #d3e8cd;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #d9eed1;\n  --bs-table-hover-color: #435971;\n  color: #435971;\n  border-color: #d3e8cd;\n}\n.table-success th {\n  border-bottom-color: inherit !important;\n}\n.table-success .btn-icon {\n  color: #435971;\n}\n\n.table-info {\n  --bs-table-bg: #cdf3fb;\n  --bs-table-striped-bg: #c9eef7;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #bfe4ed;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #c5eaf3;\n  --bs-table-hover-color: #435971;\n  color: #435971;\n  border-color: #bfe4ed;\n}\n.table-info th {\n  border-bottom-color: inherit !important;\n}\n.table-info .btn-icon {\n  color: #435971;\n}\n\n.table-warning {\n  --bs-table-bg: #ffeecc;\n  --bs-table-striped-bg: #f9eac9;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #ecdfc3;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #f4e5c7;\n  --bs-table-hover-color: #435971;\n  color: #435971;\n  border-color: #ecdfc3;\n}\n.table-warning th {\n  border-bottom-color: inherit !important;\n}\n.table-warning .btn-icon {\n  color: #435971;\n}\n\n.table-danger {\n  --bs-table-bg: #ffd8d2;\n  --bs-table-striped-bg: #f9d4cf;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #eccbc8;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #f4d0cc;\n  --bs-table-hover-color: #435971;\n  color: #435971;\n  border-color: #eccbc8;\n}\n.table-danger th {\n  border-bottom-color: inherit !important;\n}\n.table-danger .btn-icon {\n  color: #435971;\n}\n\n.table-light {\n  --bs-table-bg: #fcfdfd;\n  --bs-table-striped-bg: #f6f8f9;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #eaedef;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #f1f3f5;\n  --bs-table-hover-color: #435971;\n  color: #435971;\n  border-color: #eaedef;\n}\n.table-light th {\n  border-bottom-color: inherit !important;\n}\n.table-light .btn-icon {\n  color: #435971;\n}\n\n.table-dark {\n  --bs-table-bg: #233446;\n  --bs-table-striped-bg: #2a3a4c;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #394859;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #304051;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #394859;\n}\n.table-dark th {\n  border-bottom-color: #394859 !important;\n}\n.table-dark .btn-icon {\n  color: #fff;\n}\n\n.table > :not(caption) > * > * {\n  background-clip: padding-box;\n}\n.table tr > td .dropdown {\n  position: static;\n}\n\n.card .table {\n  margin-bottom: 0;\n}\n\n@supports (-moz-appearance: none) {\n  .table .dropdown-menu.show {\n    display: inline-table;\n  }\n}\n.table th {\n  text-transform: uppercase;\n  font-size: 0.75rem;\n  letter-spacing: 1px;\n}\n.table:not(.table-dark) th {\n  color: #566a7f;\n}\n\n.table-border-bottom-0 tr:last-child td,\n.table-border-bottom-0 tr:last-child th {\n  border-bottom-width: 0;\n}\n\n.table.table-dark .btn.btn-icon {\n  color: #d9dee3;\n}\n\n.table-border-bottom-0 tr:last-child td,\n.table-border-bottom-0 tr:last-child th {\n  border-bottom-width: 0;\n}\n\n.table.table-flush-spacing thead tr > td:first-child,\n.table.table-flush-spacing tbody tr > td:first-child {\n  padding-left: 0;\n}\n.table.table-flush-spacing thead tr > td:last-child,\n.table.table-flush-spacing tbody tr > td:last-child {\n  padding-right: 0;\n}\n\n.nav-align-top .table:not(.table-dark),\n.nav-align-top .table:not(.table-dark) thead:not(.table-dark) th,\n.nav-align-top .table:not(.table-dark) tfoot:not(.table-dark) th,\n.nav-align-top .table:not(.table-dark) td,\n.nav-align-right .table:not(.table-dark),\n.nav-align-right .table:not(.table-dark) thead:not(.table-dark) th,\n.nav-align-right .table:not(.table-dark) tfoot:not(.table-dark) th,\n.nav-align-right .table:not(.table-dark) td,\n.nav-align-bottom .table:not(.table-dark),\n.nav-align-bottom .table:not(.table-dark) thead:not(.table-dark) th,\n.nav-align-bottom .table:not(.table-dark) tfoot:not(.table-dark) th,\n.nav-align-bottom .table:not(.table-dark) td,\n.nav-align-left .table:not(.table-dark),\n.nav-align-left .table:not(.table-dark) thead:not(.table-dark) th,\n.nav-align-left .table:not(.table-dark) tfoot:not(.table-dark) th,\n.nav-align-left .table:not(.table-dark) td {\n  border-color: #d9dee3;\n}\n\n.btn {\n  cursor: pointer;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n}\n.btn .bx {\n  line-height: 1.15;\n}\n.btn.disabled, .btn:disabled {\n  cursor: default;\n}\n\n.btn .badge {\n  transition: all 0.2s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .btn .badge {\n    transition: none;\n  }\n}\n\nlabel.btn {\n  margin-bottom: 0;\n}\n\n.btn-xl, .btn-group-xl > .btn {\n  --bs-btn-padding-y: 0.875rem;\n  --bs-btn-padding-x: 2.125rem;\n  --bs-btn-font-size: 1.25rem;\n  --bs-btn-border-radius: 0.625rem;\n}\n\n.btn-xs, .btn-group-xs > .btn {\n  --bs-btn-padding-y: 0;\n  --bs-btn-padding-x: 0.5rem;\n  --bs-btn-font-size: 0.75rem;\n  --bs-btn-border-radius: 0.125rem;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #8592a3;\n  border-color: #8592a3;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(133, 146, 163, 0.4);\n}\n.btn-secondary:hover {\n  color: #fff !important;\n  background-color: #788393 !important;\n  border-color: #788393 !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-secondary, .btn-secondary:focus, .btn-secondary.focus {\n  color: #fff;\n  background-color: #788393;\n  border-color: #788393;\n  transform: translateY(0);\n  box-shadow: none;\n}\n.btn-check:checked + .btn-secondary, .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, .btn-secondary.show.dropdown-toggle, .show > .btn-secondary.dropdown-toggle {\n  color: #fff !important;\n  background-color: #717c8b !important;\n  border-color: #717c8b !important;\n}\n.btn-check:checked + .btn-secondary:focus, .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, .btn-secondary.show.dropdown-toggle:focus, .show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: none;\n}\n.btn-secondary.disabled, .btn-secondary:disabled {\n  color: #fff !important;\n  background-color: #8592a3 !important;\n  border-color: #8592a3 !important;\n  box-shadow: none !important;\n}\n\n.btn-outline-secondary {\n  color: #8592a3;\n  border-color: #8592a3;\n  background: transparent;\n}\n.btn-outline-secondary:hover {\n  color: #fff !important;\n  background-color: #788393 !important;\n  border-color: #788393 !important;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(133, 146, 163, 0.4) !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  color: #fff;\n  background-color: #788393;\n  border-color: #788393;\n  box-shadow: none;\n  transform: translateY(0);\n}\n.btn-check:checked + .btn-outline-secondary, .btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff !important;\n  background-color: #717c8b !important;\n  border-color: #717c8b !important;\n}\n.btn-check:checked + .btn-outline-secondary:focus, .btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: none;\n}\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n  box-shadow: none !important;\n  color: #8592a3 !important;\n  background-color: transparent !important;\n}\n\n.btn-outline-secondary .badge {\n  background: #8592a3;\n  border-color: #8592a3;\n  color: #fff;\n}\n\n.btn-outline-secondary:hover .badge,\n.btn-outline-secondary:focus:hover .badge,\n.btn-outline-secondary:active .badge,\n.btn-outline-secondary.active .badge,\n.show > .btn-outline-secondary.dropdown-toggle .badge {\n  background: #fff;\n  border-color: #fff;\n  color: #8592a3;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #71dd37;\n  border-color: #71dd37;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(113, 221, 55, 0.4);\n}\n.btn-success:hover {\n  color: #fff !important;\n  background-color: #66c732 !important;\n  border-color: #66c732 !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-success, .btn-success:focus, .btn-success.focus {\n  color: #fff;\n  background-color: #66c732;\n  border-color: #66c732;\n  transform: translateY(0);\n  box-shadow: none;\n}\n.btn-check:checked + .btn-success, .btn-check:active + .btn-success, .btn-success:active, .btn-success.active, .btn-success.show.dropdown-toggle, .show > .btn-success.dropdown-toggle {\n  color: #fff !important;\n  background-color: #60bc2f !important;\n  border-color: #60bc2f !important;\n}\n.btn-check:checked + .btn-success:focus, .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, .btn-success.show.dropdown-toggle:focus, .show > .btn-success.dropdown-toggle:focus {\n  box-shadow: none;\n}\n.btn-success.disabled, .btn-success:disabled {\n  color: #fff !important;\n  background-color: #71dd37 !important;\n  border-color: #71dd37 !important;\n  box-shadow: none !important;\n}\n\n.btn-outline-success {\n  color: #71dd37;\n  border-color: #71dd37;\n  background: transparent;\n}\n.btn-outline-success:hover {\n  color: #fff !important;\n  background-color: #66c732 !important;\n  border-color: #66c732 !important;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(113, 221, 55, 0.4) !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  color: #fff;\n  background-color: #66c732;\n  border-color: #66c732;\n  box-shadow: none;\n  transform: translateY(0);\n}\n.btn-check:checked + .btn-outline-success, .btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff !important;\n  background-color: #60bc2f !important;\n  border-color: #60bc2f !important;\n}\n.btn-check:checked + .btn-outline-success:focus, .btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: none;\n}\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n  box-shadow: none !important;\n  color: #71dd37 !important;\n  background-color: transparent !important;\n}\n\n.btn-outline-success .badge {\n  background: #71dd37;\n  border-color: #71dd37;\n  color: #fff;\n}\n\n.btn-outline-success:hover .badge,\n.btn-outline-success:focus:hover .badge,\n.btn-outline-success:active .badge,\n.btn-outline-success.active .badge,\n.show > .btn-outline-success.dropdown-toggle .badge {\n  background: #fff;\n  border-color: #fff;\n  color: #71dd37;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #03c3ec;\n  border-color: #03c3ec;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(3, 195, 236, 0.4);\n}\n.btn-info:hover {\n  color: #fff !important;\n  background-color: #03b0d4 !important;\n  border-color: #03b0d4 !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-info, .btn-info:focus, .btn-info.focus {\n  color: #fff;\n  background-color: #03b0d4;\n  border-color: #03b0d4;\n  transform: translateY(0);\n  box-shadow: none;\n}\n.btn-check:checked + .btn-info, .btn-check:active + .btn-info, .btn-info:active, .btn-info.active, .btn-info.show.dropdown-toggle, .show > .btn-info.dropdown-toggle {\n  color: #fff !important;\n  background-color: #03a6c9 !important;\n  border-color: #03a6c9 !important;\n}\n.btn-check:checked + .btn-info:focus, .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, .btn-info.show.dropdown-toggle:focus, .show > .btn-info.dropdown-toggle:focus {\n  box-shadow: none;\n}\n.btn-info.disabled, .btn-info:disabled {\n  color: #fff !important;\n  background-color: #03c3ec !important;\n  border-color: #03c3ec !important;\n  box-shadow: none !important;\n}\n\n.btn-outline-info {\n  color: #03c3ec;\n  border-color: #03c3ec;\n  background: transparent;\n}\n.btn-outline-info:hover {\n  color: #fff !important;\n  background-color: #03b0d4 !important;\n  border-color: #03b0d4 !important;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(3, 195, 236, 0.4) !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  color: #fff;\n  background-color: #03b0d4;\n  border-color: #03b0d4;\n  box-shadow: none;\n  transform: translateY(0);\n}\n.btn-check:checked + .btn-outline-info, .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff !important;\n  background-color: #03a6c9 !important;\n  border-color: #03a6c9 !important;\n}\n.btn-check:checked + .btn-outline-info:focus, .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: none;\n}\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n  box-shadow: none !important;\n  color: #03c3ec !important;\n  background-color: transparent !important;\n}\n\n.btn-outline-info .badge {\n  background: #03c3ec;\n  border-color: #03c3ec;\n  color: #fff;\n}\n\n.btn-outline-info:hover .badge,\n.btn-outline-info:focus:hover .badge,\n.btn-outline-info:active .badge,\n.btn-outline-info.active .badge,\n.show > .btn-outline-info.dropdown-toggle .badge {\n  background: #fff;\n  border-color: #fff;\n  color: #03c3ec;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #ffab00;\n  border-color: #ffab00;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(255, 171, 0, 0.4);\n}\n.btn-warning:hover {\n  color: #fff !important;\n  background-color: #e69a00 !important;\n  border-color: #e69a00 !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-warning, .btn-warning:focus, .btn-warning.focus {\n  color: #fff;\n  background-color: #e69a00;\n  border-color: #e69a00;\n  transform: translateY(0);\n  box-shadow: none;\n}\n.btn-check:checked + .btn-warning, .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, .btn-warning.show.dropdown-toggle, .show > .btn-warning.dropdown-toggle {\n  color: #fff !important;\n  background-color: #d99100 !important;\n  border-color: #d99100 !important;\n}\n.btn-check:checked + .btn-warning:focus, .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, .btn-warning.show.dropdown-toggle:focus, .show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: none;\n}\n.btn-warning.disabled, .btn-warning:disabled {\n  color: #fff !important;\n  background-color: #ffab00 !important;\n  border-color: #ffab00 !important;\n  box-shadow: none !important;\n}\n\n.btn-outline-warning {\n  color: #ffab00;\n  border-color: #ffab00;\n  background: transparent;\n}\n.btn-outline-warning:hover {\n  color: #fff !important;\n  background-color: #e69a00 !important;\n  border-color: #e69a00 !important;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(255, 171, 0, 0.4) !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  color: #fff;\n  background-color: #e69a00;\n  border-color: #e69a00;\n  box-shadow: none;\n  transform: translateY(0);\n}\n.btn-check:checked + .btn-outline-warning, .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff !important;\n  background-color: #d99100 !important;\n  border-color: #d99100 !important;\n}\n.btn-check:checked + .btn-outline-warning:focus, .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: none;\n}\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n  box-shadow: none !important;\n  color: #ffab00 !important;\n  background-color: transparent !important;\n}\n\n.btn-outline-warning .badge {\n  background: #ffab00;\n  border-color: #ffab00;\n  color: #fff;\n}\n\n.btn-outline-warning:hover .badge,\n.btn-outline-warning:focus:hover .badge,\n.btn-outline-warning:active .badge,\n.btn-outline-warning.active .badge,\n.show > .btn-outline-warning.dropdown-toggle .badge {\n  background: #fff;\n  border-color: #fff;\n  color: #ffab00;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #ff3e1d;\n  border-color: #ff3e1d;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(255, 62, 29, 0.4);\n}\n.btn-danger:hover {\n  color: #fff !important;\n  background-color: #e6381a !important;\n  border-color: #e6381a !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-danger, .btn-danger:focus, .btn-danger.focus {\n  color: #fff;\n  background-color: #e6381a;\n  border-color: #e6381a;\n  transform: translateY(0);\n  box-shadow: none;\n}\n.btn-check:checked + .btn-danger, .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, .btn-danger.show.dropdown-toggle, .show > .btn-danger.dropdown-toggle {\n  color: #fff !important;\n  background-color: #d93519 !important;\n  border-color: #d93519 !important;\n}\n.btn-check:checked + .btn-danger:focus, .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, .btn-danger.show.dropdown-toggle:focus, .show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: none;\n}\n.btn-danger.disabled, .btn-danger:disabled {\n  color: #fff !important;\n  background-color: #ff3e1d !important;\n  border-color: #ff3e1d !important;\n  box-shadow: none !important;\n}\n\n.btn-outline-danger {\n  color: #ff3e1d;\n  border-color: #ff3e1d;\n  background: transparent;\n}\n.btn-outline-danger:hover {\n  color: #fff !important;\n  background-color: #e6381a !important;\n  border-color: #e6381a !important;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(255, 62, 29, 0.4) !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  color: #fff;\n  background-color: #e6381a;\n  border-color: #e6381a;\n  box-shadow: none;\n  transform: translateY(0);\n}\n.btn-check:checked + .btn-outline-danger, .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff !important;\n  background-color: #d93519 !important;\n  border-color: #d93519 !important;\n}\n.btn-check:checked + .btn-outline-danger:focus, .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: none;\n}\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n  box-shadow: none !important;\n  color: #ff3e1d !important;\n  background-color: transparent !important;\n}\n\n.btn-outline-danger .badge {\n  background: #ff3e1d;\n  border-color: #ff3e1d;\n  color: #fff;\n}\n\n.btn-outline-danger:hover .badge,\n.btn-outline-danger:focus:hover .badge,\n.btn-outline-danger:active .badge,\n.btn-outline-danger.active .badge,\n.show > .btn-outline-danger.dropdown-toggle .badge {\n  background: #fff;\n  border-color: #fff;\n  color: #ff3e1d;\n}\n\n.btn-light {\n  color: #435971;\n  background-color: #fcfdfd;\n  border-color: #fcfdfd;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(252, 253, 253, 0.4);\n}\n.btn-light:hover {\n  color: #435971 !important;\n  background-color: #fcfdfd !important;\n  border-color: #fcfdfd !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-light, .btn-light:focus, .btn-light.focus {\n  color: #435971;\n  background-color: #fcfdfd;\n  border-color: #fcfdfd;\n  transform: translateY(0);\n  box-shadow: none;\n}\n.btn-check:checked + .btn-light, .btn-check:active + .btn-light, .btn-light:active, .btn-light.active, .btn-light.show.dropdown-toggle, .show > .btn-light.dropdown-toggle {\n  color: #435971 !important;\n  background-color: #fcfdfd !important;\n  border-color: #fcfdfd !important;\n}\n.btn-check:checked + .btn-light:focus, .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .btn-light.show.dropdown-toggle:focus, .show > .btn-light.dropdown-toggle:focus {\n  box-shadow: none;\n}\n.btn-light.disabled, .btn-light:disabled {\n  color: #435971 !important;\n  background-color: #fcfdfd !important;\n  border-color: #fcfdfd !important;\n  box-shadow: none !important;\n}\n\n.btn-outline-light {\n  color: #fcfdfd;\n  border-color: #fcfdfd;\n  background: transparent;\n}\n.btn-outline-light:hover {\n  color: #435971 !important;\n  background-color: #fcfdfd !important;\n  border-color: #fcfdfd !important;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(252, 253, 253, 0.4) !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  color: #435971;\n  background-color: #fcfdfd;\n  border-color: #fcfdfd;\n  box-shadow: none;\n  transform: translateY(0);\n}\n.btn-check:checked + .btn-outline-light, .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #435971 !important;\n  background-color: #fcfdfd !important;\n  border-color: #fcfdfd !important;\n}\n.btn-check:checked + .btn-outline-light:focus, .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: none;\n}\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n  box-shadow: none !important;\n  color: #fcfdfd !important;\n  background-color: transparent !important;\n}\n\n.btn-outline-light .badge {\n  background: #fcfdfd;\n  border-color: #fcfdfd;\n  color: #435971;\n}\n\n.btn-outline-light:hover .badge,\n.btn-outline-light:focus:hover .badge,\n.btn-outline-light:active .badge,\n.btn-outline-light.active .badge,\n.show > .btn-outline-light.dropdown-toggle .badge {\n  background: #435971;\n  border-color: #435971;\n  color: #fcfdfd;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #233446;\n  border-color: #233446;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(35, 52, 70, 0.4);\n}\n.btn-dark:hover {\n  color: #fff !important;\n  background-color: #202f3f !important;\n  border-color: #202f3f !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-dark, .btn-dark:focus, .btn-dark.focus {\n  color: #fff;\n  background-color: #202f3f;\n  border-color: #202f3f;\n  transform: translateY(0);\n  box-shadow: none;\n}\n.btn-check:checked + .btn-dark, .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, .btn-dark.show.dropdown-toggle, .show > .btn-dark.dropdown-toggle {\n  color: #fff !important;\n  background-color: #1e2c3c !important;\n  border-color: #1e2c3c !important;\n}\n.btn-check:checked + .btn-dark:focus, .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, .btn-dark.show.dropdown-toggle:focus, .show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: none;\n}\n.btn-dark.disabled, .btn-dark:disabled {\n  color: #fff !important;\n  background-color: #233446 !important;\n  border-color: #233446 !important;\n  box-shadow: none !important;\n}\n\n.btn-outline-dark {\n  color: #233446;\n  border-color: #233446;\n  background: transparent;\n}\n.btn-outline-dark:hover {\n  color: #fff !important;\n  background-color: #202f3f !important;\n  border-color: #202f3f !important;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(35, 52, 70, 0.4) !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  color: #fff;\n  background-color: #202f3f;\n  border-color: #202f3f;\n  box-shadow: none;\n  transform: translateY(0);\n}\n.btn-check:checked + .btn-outline-dark, .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff !important;\n  background-color: #1e2c3c !important;\n  border-color: #1e2c3c !important;\n}\n.btn-check:checked + .btn-outline-dark:focus, .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: none;\n}\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n  box-shadow: none !important;\n  color: #233446 !important;\n  background-color: transparent !important;\n}\n\n.btn-outline-dark .badge {\n  background: #233446;\n  border-color: #233446;\n  color: #fff;\n}\n\n.btn-outline-dark:hover .badge,\n.btn-outline-dark:focus:hover .badge,\n.btn-outline-dark:active .badge,\n.btn-outline-dark.active .badge,\n.show > .btn-outline-dark.dropdown-toggle .badge {\n  background: #fff;\n  border-color: #fff;\n  color: #233446;\n}\n\n.btn-gray {\n  color: #fff;\n  background-color: rgba(67, 89, 113, 0.1);\n  border-color: rgba(67, 89, 113, 0.1);\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(67, 89, 113, 0.4);\n}\n.btn-gray:hover {\n  color: #fff !important;\n  background-color: rgba(22, 29, 36, 0.19) !important;\n  border-color: rgba(22, 29, 36, 0.19) !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-gray, .btn-gray:focus, .btn-gray.focus {\n  color: #fff;\n  background-color: rgba(22, 29, 36, 0.19);\n  border-color: rgba(22, 29, 36, 0.19);\n  transform: translateY(0);\n  box-shadow: none;\n}\n.btn-check:checked + .btn-gray, .btn-check:active + .btn-gray, .btn-gray:active, .btn-gray.active, .btn-gray.show.dropdown-toggle, .show > .btn-gray.dropdown-toggle {\n  color: #fff !important;\n  background-color: rgba(15, 20, 26, 0.235) !important;\n  border-color: rgba(15, 20, 26, 0.235) !important;\n}\n.btn-check:checked + .btn-gray:focus, .btn-check:active + .btn-gray:focus, .btn-gray:active:focus, .btn-gray.active:focus, .btn-gray.show.dropdown-toggle:focus, .show > .btn-gray.dropdown-toggle:focus {\n  box-shadow: none;\n}\n.btn-gray.disabled, .btn-gray:disabled {\n  color: #fff !important;\n  background-color: rgba(67, 89, 113, 0.1) !important;\n  border-color: rgba(67, 89, 113, 0.1) !important;\n  box-shadow: none !important;\n}\n\n.btn-outline-gray {\n  color: rgba(67, 89, 113, 0.1);\n  border-color: rgba(67, 89, 113, 0.1);\n  background: transparent;\n}\n.btn-outline-gray:hover {\n  color: #fff !important;\n  background-color: rgba(22, 29, 36, 0.19) !important;\n  border-color: rgba(22, 29, 36, 0.19) !important;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(67, 89, 113, 0.4) !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-outline-gray, .btn-outline-gray:focus {\n  color: #fff;\n  background-color: rgba(22, 29, 36, 0.19);\n  border-color: rgba(22, 29, 36, 0.19);\n  box-shadow: none;\n  transform: translateY(0);\n}\n.btn-check:checked + .btn-outline-gray, .btn-check:active + .btn-outline-gray, .btn-outline-gray:active, .btn-outline-gray.active, .btn-outline-gray.dropdown-toggle.show {\n  color: #fff !important;\n  background-color: rgba(15, 20, 26, 0.235) !important;\n  border-color: rgba(15, 20, 26, 0.235) !important;\n}\n.btn-check:checked + .btn-outline-gray:focus, .btn-check:active + .btn-outline-gray:focus, .btn-outline-gray:active:focus, .btn-outline-gray.active:focus, .btn-outline-gray.dropdown-toggle.show:focus {\n  box-shadow: none;\n}\n.btn-outline-gray.disabled, .btn-outline-gray:disabled {\n  box-shadow: none !important;\n  color: rgba(67, 89, 113, 0.1) !important;\n  background-color: transparent !important;\n}\n\n.btn-outline-gray .badge {\n  background: rgba(67, 89, 113, 0.1);\n  border-color: rgba(67, 89, 113, 0.1);\n  color: #fff;\n}\n\n.btn-outline-gray:hover .badge,\n.btn-outline-gray:focus:hover .badge,\n.btn-outline-gray:active .badge,\n.btn-outline-gray.active .badge,\n.show > .btn-outline-gray.dropdown-toggle .badge {\n  background: #fff;\n  border-color: #fff;\n  color: #435971;\n}\n\n.btn-icon {\n  --bs-btn-active-border-color: transparent;\n  padding: 0;\n  width: calc(2.309375rem + 2px);\n  height: calc(2.309375rem + 2px);\n  display: inline-flex;\n  flex-shrink: 0;\n  justify-content: center;\n  align-items: center;\n}\n.btn-icon.btn-xl, .btn-group-xl > .btn-icon.btn {\n  width: calc(3.625rem + 2px);\n  height: calc(3.625rem + 2px);\n}\n.btn-icon.btn-xl > span, .btn-group-xl > .btn-icon.btn > span {\n  font-size: 1.25rem;\n}\n.btn-icon.btn-lg, .btn-group-lg > .btn-icon.btn {\n  width: calc(3rem + 2px);\n  height: calc(3rem + 2px);\n  font-size: 1rem;\n}\n.btn-icon.btn-sm, .btn-group-sm > .btn-icon.btn {\n  width: calc(1.625rem + 2px);\n  height: calc(1.625rem + 2px);\n  font-size: 0.75rem;\n}\n.btn-icon.btn-xs, .btn-group-xs > .btn-icon.btn {\n  width: calc(1.125rem + 2px);\n  height: calc(1.125rem + 2px);\n  font-size: 0.75rem;\n}\n\n.btn.borderless:not(.active):not(:active):not(:hover):not(:focus), :not(.show) > .btn.borderless.dropdown-toggle:not(:hover):not(:focus) {\n  border-color: transparent;\n  box-shadow: none;\n}\n\n.btn.btn-link {\n  font-size: inherit;\n}\n\n.btn-pinned {\n  position: absolute;\n  top: 0.75rem;\n  right: 0.75rem;\n}\n\nbutton:focus,\nbutton:focus-visible {\n  outline: none;\n}\n\n.btn:not([class*=btn-]):active,\n.btn:not([class*=btn-]).active,\n.btn:not([class*=btn-]).show,\n.btn:not([class*=btn-]) {\n  border: none;\n}\n\n.dropdown-toggle-split,\n.btn-lg + .dropdown-toggle-split,\n.btn-group-lg > .btn + .dropdown-toggle-split,\n.input-group-lg .btn + .dropdown-toggle-split,\n.btn-xl + .dropdown-toggle-split,\n.btn-group-xl > .btn + .dropdown-toggle-split {\n  padding-right: 0.7em;\n  padding-left: 0.7em;\n}\n\n.btn-sm + .dropdown-toggle-split,\n.btn-group-sm > .btn + .dropdown-toggle-split,\n.input-group-sm .btn + .dropdown-toggle-split {\n  padding-right: 0.6em;\n  padding-left: 0.6em;\n}\n\n.btn-xs + .dropdown-toggle-split,\n.btn-group-xs > .btn + .dropdown-toggle-split {\n  padding-right: 0.5em;\n  padding-left: 0.5em;\n}\n\n.btn-group > .btn-group:first-child > .btn:not([class*=btn-outline-]):first-child,\n.input-group > .btn:not([class*=btn-outline-]):first-child,\n:not(.btn-group):not(.input-group) > .btn-group > .btn:not([class*=btn-outline-]):first-child,\n.input-group > .btn-group:first-child > .btn:not([class*=btn-outline-]):first-child {\n  border-left-color: transparent;\n}\n\n.btn-group > .btn-group:last-child > .btn:not([class*=btn-outline-]):last-of-type,\n.input-group > .btn:not([class*=btn-outline-]):last-of-type,\n:not(.btn-group):not(.input-group) > .btn-group > .btn:not([class*=btn-outline-]):last-of-type,\n.input-group > .btn-group:last-child > .btn:not([class*=btn-outline-]):last-of-type {\n  border-right-color: transparent;\n}\n\n.badge {\n  text-transform: uppercase;\n  line-height: 0.75;\n}\n\n.badge-center {\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  height: 1.5rem;\n  width: 1.5rem;\n  font-size: 0.8125em;\n}\n.badge-center i {\n  font-size: 0.8rem;\n}\n\n[data-trigger=hover] {\n  outline: 0;\n}\n\n.dropdown-menu {\n  box-shadow: 0 0.25rem 1rem rgba(161, 172, 184, 0.45);\n}\n.mega-dropdown > .dropdown-menu {\n  left: 0 !important;\n  right: 0 !important;\n}\n.dropdown-menu .badge[class^=float-],\n.dropdown-menu .badge[class*=\" float-\"] {\n  position: relative;\n  top: 0.071em;\n}\n\n.dropdown-item {\n  line-height: 1.54;\n}\n\n.dropdown-toggle.hide-arrow::before, .dropdown-toggle.hide-arrow::after,\n.dropdown-toggle-hide-arrow > .dropdown-toggle::before,\n.dropdown-toggle-hide-arrow > .dropdown-toggle::after {\n  display: none;\n}\n\n.dropdown-toggle::after {\n  margin-top: -0.28em;\n  width: 0.42em;\n  height: 0.42em;\n  border: 1px solid;\n  border-top: 0;\n  border-left: 0;\n  transform: rotate(45deg);\n}\n\n.dropend .dropdown-toggle::after {\n  margin-top: -0.168em;\n  width: 0.42em;\n  height: 0.42em;\n  border: 1px solid;\n  border-top: 0;\n  border-left: 0;\n  transform: rotate(-45deg);\n}\n\n.dropstart .dropdown-toggle::before {\n  margin-top: -0.168em;\n  width: 0.42em;\n  height: 0.42em;\n  border: 1px solid;\n  border-top: 0;\n  border-right: 0;\n  transform: rotate(45deg);\n}\n\n.dropup .dropdown-toggle::after {\n  margin-top: 0;\n  width: 0.42em;\n  height: 0.42em;\n  border: 1px solid;\n  border-bottom: 0;\n  border-left: 0;\n  transform: rotate(-45deg);\n}\n\n.dropstart .dropdown-toggle::before,\n.dropend .dropdown-toggle::after {\n  vertical-align: middle;\n}\n\n.nav .nav-item,\n.nav .nav-link,\n.tab-pane,\n.tab-pane .card-body {\n  outline: none !important;\n}\n\n.nav-tabs .nav-item .nav-link {\n  color: #566a7f;\n  border: 0;\n  border-radius: 0;\n}\n.nav-tabs .nav-item .nav-link:hover, .nav-tabs .nav-item .nav-link:focus {\n  color: #566a7f;\n}\n.nav-tabs .nav-item .nav-link:not(.active) {\n  background-color: #eceef1;\n}\n.nav-tabs .nav-item .nav-link.disabled {\n  color: #c7cdd4;\n}\n\n.nav-tabs .nav-link,\n.nav-pills .nav-link {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n}\n.nav-tabs .nav-link:not(.active):hover, .nav-tabs .nav-link:not(.active):focus,\n.nav-pills .nav-link:not(.active):hover,\n.nav-pills .nav-link:not(.active):focus {\n  color: #697a8d;\n}\n.nav-tabs:not(.nav-fill):not(.nav-justified) .nav-link,\n.nav-pills:not(.nav-fill):not(.nav-justified) .nav-link {\n  width: 100%;\n}\n\n.nav-pills .nav-link:not(.active, .disabled) {\n  color: #566a7f;\n}\n\n.tab-content {\n  padding: 1.5rem;\n  border-radius: 0.375rem;\n}\n\n.nav-scrollable {\n  display: -webkit-inline-box;\n  display: -moz-inline-box;\n  width: 100%;\n  overflow-y: auto;\n  flex-wrap: nowrap;\n}\n\n.nav-tabs .nav-link {\n  background-clip: padding-box;\n}\n.nav-tabs .nav-link.active {\n  border-bottom-color: #fff;\n}\n.nav-tabs .nav-link.active:hover, .nav-tabs .nav-link.active:focus {\n  border-bottom-color: #fff;\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-bottom-color: transparent;\n}\n\n.nav-sm > .nav .nav-link, .nav-sm.nav .nav-link {\n  padding: 0.3125rem 0.875rem;\n  font-size: 0.75rem;\n  line-height: 1.5;\n}\n\n.nav-lg > .nav .nav-link, .nav-lg.nav .nav-link {\n  padding: 0.875rem 1.3125rem;\n  font-size: 1rem;\n  line-height: 1.5;\n}\n\n.nav-align-top,\n.nav-align-right,\n.nav-align-bottom,\n.nav-align-left {\n  display: flex;\n}\n.nav-align-top > .nav,\n.nav-align-top > div > .nav,\n.nav-align-right > .nav,\n.nav-align-right > div > .nav,\n.nav-align-bottom > .nav,\n.nav-align-bottom > div > .nav,\n.nav-align-left > .nav,\n.nav-align-left > div > .nav {\n  border: 0;\n  z-index: 1;\n  position: relative;\n}\n.nav-align-top > .nav .nav-link:hover, .nav-align-top > .nav .nav-link:focus,\n.nav-align-top > div > .nav .nav-link:hover,\n.nav-align-top > div > .nav .nav-link:focus,\n.nav-align-right > .nav .nav-link:hover,\n.nav-align-right > .nav .nav-link:focus,\n.nav-align-right > div > .nav .nav-link:hover,\n.nav-align-right > div > .nav .nav-link:focus,\n.nav-align-bottom > .nav .nav-link:hover,\n.nav-align-bottom > .nav .nav-link:focus,\n.nav-align-bottom > div > .nav .nav-link:hover,\n.nav-align-bottom > div > .nav .nav-link:focus,\n.nav-align-left > .nav .nav-link:hover,\n.nav-align-left > .nav .nav-link:focus,\n.nav-align-left > div > .nav .nav-link:hover,\n.nav-align-left > div > .nav .nav-link:focus {\n  isolation: auto;\n}\n.nav-align-top .row-bordered > [class^=col-]::before, .nav-align-top .row-bordered > [class^=col-]::after,\n.nav-align-top .row-bordered > [class*=\" col-\"]::before,\n.nav-align-top .row-bordered > [class*=\" col-\"]::after,\n.nav-align-top .row-bordered > [class^=\"col \"]::before,\n.nav-align-top .row-bordered > [class^=\"col \"]::after,\n.nav-align-top .row-bordered > [class*=\" col \"]::before,\n.nav-align-top .row-bordered > [class*=\" col \"]::after,\n.nav-align-top .row-bordered > [class$=\" col\"]::before,\n.nav-align-top .row-bordered > [class$=\" col\"]::after,\n.nav-align-top .row-bordered > [class=col]::before,\n.nav-align-top .row-bordered > [class=col]::after,\n.nav-align-right .row-bordered > [class^=col-]::before,\n.nav-align-right .row-bordered > [class^=col-]::after,\n.nav-align-right .row-bordered > [class*=\" col-\"]::before,\n.nav-align-right .row-bordered > [class*=\" col-\"]::after,\n.nav-align-right .row-bordered > [class^=\"col \"]::before,\n.nav-align-right .row-bordered > [class^=\"col \"]::after,\n.nav-align-right .row-bordered > [class*=\" col \"]::before,\n.nav-align-right .row-bordered > [class*=\" col \"]::after,\n.nav-align-right .row-bordered > [class$=\" col\"]::before,\n.nav-align-right .row-bordered > [class$=\" col\"]::after,\n.nav-align-right .row-bordered > [class=col]::before,\n.nav-align-right .row-bordered > [class=col]::after,\n.nav-align-bottom .row-bordered > [class^=col-]::before,\n.nav-align-bottom .row-bordered > [class^=col-]::after,\n.nav-align-bottom .row-bordered > [class*=\" col-\"]::before,\n.nav-align-bottom .row-bordered > [class*=\" col-\"]::after,\n.nav-align-bottom .row-bordered > [class^=\"col \"]::before,\n.nav-align-bottom .row-bordered > [class^=\"col \"]::after,\n.nav-align-bottom .row-bordered > [class*=\" col \"]::before,\n.nav-align-bottom .row-bordered > [class*=\" col \"]::after,\n.nav-align-bottom .row-bordered > [class$=\" col\"]::before,\n.nav-align-bottom .row-bordered > [class$=\" col\"]::after,\n.nav-align-bottom .row-bordered > [class=col]::before,\n.nav-align-bottom .row-bordered > [class=col]::after,\n.nav-align-left .row-bordered > [class^=col-]::before,\n.nav-align-left .row-bordered > [class^=col-]::after,\n.nav-align-left .row-bordered > [class*=\" col-\"]::before,\n.nav-align-left .row-bordered > [class*=\" col-\"]::after,\n.nav-align-left .row-bordered > [class^=\"col \"]::before,\n.nav-align-left .row-bordered > [class^=\"col \"]::after,\n.nav-align-left .row-bordered > [class*=\" col \"]::before,\n.nav-align-left .row-bordered > [class*=\" col \"]::after,\n.nav-align-left .row-bordered > [class$=\" col\"]::before,\n.nav-align-left .row-bordered > [class$=\" col\"]::after,\n.nav-align-left .row-bordered > [class=col]::before,\n.nav-align-left .row-bordered > [class=col]::after {\n  border-color: #d9dee3;\n}\n\n.nav-align-right,\n.nav-align-left {\n  align-items: stretch;\n}\n.nav-align-right > .nav,\n.nav-align-right > div > .nav,\n.nav-align-left > .nav,\n.nav-align-left > div > .nav {\n  flex-grow: 0;\n  flex-direction: column;\n}\n.nav-align-right > .tab-content,\n.nav-align-left > .tab-content {\n  flex-grow: 1;\n}\n\n.nav-align-top {\n  flex-direction: column;\n}\n.nav-align-top .nav-tabs ~ .tab-content {\n  z-index: 1;\n  box-shadow: 0px 6px 7px -1px rgba(67, 89, 113, 0.12);\n}\n.nav-align-top .nav-tabs .nav-item:first-child .nav-link {\n  border-top-left-radius: 0.375rem;\n}\n.nav-align-top .nav-tabs .nav-item:last-child .nav-link {\n  border-top-right-radius: 0.375rem;\n}\n.nav-align-top .nav-tabs .nav-item:not(:first-child) .nav-link {\n  border-left: 1px solid #fff;\n}\n.nav-align-top .nav-tabs .nav-link.active {\n  box-shadow: 0 2px 6px 0 rgba(67, 89, 113, 0.12);\n}\n\n.nav-align-right {\n  flex-direction: row-reverse;\n}\n.nav-align-right > .nav .nav-item,\n.nav-align-right > div > .nav .nav-item {\n  margin-left: -1px;\n  margin-bottom: 0;\n}\n.nav-align-right .nav-link {\n  text-align: right;\n  justify-content: end;\n}\n.nav-align-right .nav-tabs ~ .tab-content {\n  box-shadow: 0 2px 6px 0 rgba(67, 89, 113, 0.12);\n}\n.nav-align-right .nav-tabs .nav-item:not(:first-child) .nav-link {\n  border-top: 1px solid #fff;\n}\n.nav-align-right .nav-tabs .nav-item:first-child .nav-link {\n  border-top-right-radius: 0.375rem;\n}\n.nav-align-right .nav-tabs .nav-item:last-child .nav-link {\n  border-bottom-right-radius: 0.375rem;\n}\n.nav-align-right .nav-tabs .nav-link.active {\n  box-shadow: 5px 4px 6px 0 rgba(67, 89, 113, 0.12);\n}\n\n.nav-align-bottom {\n  flex-direction: column-reverse;\n}\n.nav-align-bottom > .nav .nav-item,\n.nav-align-bottom > div > .nav .nav-item {\n  margin-bottom: 0;\n  margin-top: -1px;\n}\n.nav-align-bottom .nav-tabs ~ .tab-content {\n  box-shadow: 0 2px 6px 0 rgba(67, 89, 113, 0.12);\n}\n.nav-align-bottom .nav-tabs .nav-item:first-child .nav-link {\n  border-bottom-left-radius: 0.375rem;\n}\n.nav-align-bottom .nav-tabs .nav-item:last-child .nav-link {\n  border-bottom-right-radius: 0.375rem;\n}\n.nav-align-bottom .nav-tabs .nav-item:not(:first-child) .nav-link {\n  border-left: 1px solid #fff;\n}\n.nav-align-bottom .nav-tabs .nav-link.active {\n  box-shadow: 0 4px 6px 0 rgba(67, 89, 113, 0.12);\n}\n\n.nav-align-left > .nav .nav-item,\n.nav-align-left > div > .nav .nav-item {\n  margin-right: -1px;\n  margin-bottom: 0;\n}\n.nav-align-left .nav-link {\n  text-align: left;\n  justify-content: start;\n}\n.nav-align-left .nav-tabs ~ .tab-content {\n  box-shadow: 0 2px 6px 0 rgba(67, 89, 113, 0.12);\n}\n.nav-align-left .nav-tabs .nav-item:not(:first-child) .nav-link {\n  border-top: 1px solid #fff;\n}\n.nav-align-left .nav-tabs .nav-item:first-child .nav-link {\n  border-top-left-radius: 0.375rem;\n}\n.nav-align-left .nav-tabs .nav-item:last-child .nav-link {\n  border-bottom-left-radius: 0.375rem;\n}\n.nav-align-left .nav-tabs .nav-link.active {\n  box-shadow: -5px 2px 6px 0 rgba(67, 89, 113, 0.12);\n}\n\n.nav-align-top > .tab-content,\n.nav-align-right > .tab-content,\n.nav-align-bottom > .tab-content,\n.nav-align-left > .tab-content {\n  flex-shrink: 1;\n  border: 0 solid #d9dee3;\n  box-shadow: 0 2px 6px 0 rgba(67, 89, 113, 0.12);\n  background-clip: padding-box;\n  background: #fff;\n}\n\n.nav-align-top :not(.nav-pills) ~ .tab-content {\n  border-radius: 0 0 0.375rem 0.375rem;\n}\n\n.nav-align-top .nav-tabs:not(.nav-fill) ~ .tab-content {\n  border-top-right-radius: 0.375rem;\n}\n\n.nav-align-right :not(.nav-pills) ~ .tab-content {\n  border-radius: 0.375rem 0 0 0.375rem;\n}\n\n.nav-align-bottom :not(.nav-pills) ~ .tab-content {\n  border-radius: 0.375rem 0.375rem 0 0;\n}\n\n.nav-align-left :not(.nav-pills) ~ .tab-content {\n  border-radius: 0 0.375rem 0.375rem 0;\n}\n\n.nav-align-left > .tab-content {\n  border-radius: 0 0.375rem 0.375rem 0.375rem;\n}\n\n.page-item.first .page-link, .page-item.last .page-link, .page-item.next .page-link, .page-item.prev .page-link, .page-item.previous .page-link {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n.page-item.disabled .page-link {\n  border-color: #d9dee3;\n}\n.page-item.active .page-link {\n  margin: 0 0.1rem 0 0.3rem;\n}\n\n.page-link,\n.page-link > a {\n  border-radius: 0.375rem;\n  line-height: 1;\n  text-align: center;\n  min-width: calc(\n    2.1875rem + 0px\n  );\n}\n.page-link:focus,\n.page-link > a:focus {\n  color: #697a8d;\n}\n\n.page-link.btn-primary {\n  box-shadow: none !important;\n}\n\n.pagination-lg .page-link,\n.pagination-lg > li > a:not(.page-link) {\n  min-width: calc(\n    2.875rem + 0px\n  );\n}\n\n.pagination-lg > .page-item.first .page-link, .pagination-lg > .page-item.last .page-link, .pagination-lg > .page-item.next .page-link, .pagination-lg > .page-item.prev .page-link, .pagination-lg > .page-item.previous .page-link {\n  padding-top: 0.853rem;\n  padding-bottom: 0.853rem;\n}\n\n.pagination-sm .page-link,\n.pagination-sm > li > a:not(.page-link) {\n  min-width: calc(\n    1.5rem + 0px\n  );\n}\n.pagination-sm .page-link .tf-icon,\n.pagination-sm > li > a:not(.page-link) .tf-icon {\n  font-size: 0.9375rem;\n}\n\n.pagination-sm > .page-item.first .page-link, .pagination-sm > .page-item.last .page-link, .pagination-sm > .page-item.next .page-link, .pagination-sm > .page-item.prev .page-link, .pagination-sm > .page-item.previous .page-link {\n  padding-top: 0.3rem;\n  padding-bottom: 0.3rem;\n}\n\n.alert-secondary {\n  background-color: #ebeef0;\n  border-color: #dadee3;\n  color: #8592a3;\n}\n.alert-secondary .btn-close {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%238592a3' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.5' fill='%238592a3' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.alert-secondary .alert-link {\n  color: #8592a3;\n}\n\n.alert-secondary hr {\n  background-color: #8592a3 !important;\n}\n\n.alert-success {\n  background-color: #e8fadf;\n  border-color: #d4f5c3;\n  color: #71dd37;\n}\n.alert-success .btn-close {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%2371dd37' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.5' fill='%2371dd37' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.alert-success .alert-link {\n  color: #71dd37;\n}\n\n.alert-success hr {\n  background-color: #71dd37 !important;\n}\n\n.alert-info {\n  background-color: #d7f5fc;\n  border-color: #b3edf9;\n  color: #03c3ec;\n}\n.alert-info .btn-close {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%2303c3ec' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.5' fill='%2303c3ec' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.alert-info .alert-link {\n  color: #03c3ec;\n}\n\n.alert-info hr {\n  background-color: #03c3ec !important;\n}\n\n.alert-warning {\n  background-color: #fff2d6;\n  border-color: #ffe6b3;\n  color: #ffab00;\n}\n.alert-warning .btn-close {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%23ffab00' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.5' fill='%23ffab00' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.alert-warning .alert-link {\n  color: #ffab00;\n}\n\n.alert-warning hr {\n  background-color: #ffab00 !important;\n}\n\n.alert-danger {\n  background-color: #ffe0db;\n  border-color: #ffc5bb;\n  color: #ff3e1d;\n}\n.alert-danger .btn-close {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%23ff3e1d' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.5' fill='%23ff3e1d' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.alert-danger .alert-link {\n  color: #ff3e1d;\n}\n\n.alert-danger hr {\n  background-color: #ff3e1d !important;\n}\n\n.alert-dark {\n  background-color: #dcdfe1;\n  border-color: #bdc2c8;\n  color: #233446;\n}\n.alert-dark .btn-close {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%23233446' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.5' fill='%23233446' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.alert-dark .alert-link {\n  color: #233446;\n}\n\n.alert-dark hr {\n  background-color: #233446 !important;\n}\n\n.alert-gray {\n  background-color: rgba(253, 253, 254, 0.856);\n  border-color: rgba(251, 251, 252, 0.73);\n  color: rgba(67, 89, 113, 0.1);\n}\n.alert-gray .btn-close {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='rgba(67, 89, 113, 0.1)' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.5' fill='rgba(67, 89, 113, 0.1)' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.alert-gray .alert-link {\n  color: rgba(67, 89, 113, 0.1);\n}\n\n.alert-gray hr {\n  background-color: rgba(67, 89, 113, 0.1) !important;\n}\n\n.modal-open .tooltip {\n  z-index: 1092;\n}\n\n.tooltip-inner {\n  box-shadow: 0 0.125rem 0.25rem rgba(161, 172, 184, 0.4);\n}\n\n.modal-open .popover {\n  z-index: 1091;\n}\n\n.popover {\n  box-shadow: 0 0.25rem 1rem rgba(161, 172, 184, 0.45);\n}\n.popover .popover-arrow {\n  z-index: 1;\n}\n.popover.bs-popover-auto[data-popper-placement=bottom] > .popover-arrow::after {\n  border-bottom-color: white;\n  top: 2px;\n}\n.popover.bs-popover-auto[data-popper-placement=bottom] > .popover-arrow:before {\n  top: 1px;\n}\n\n.popover-header {\n  padding: 1.125rem 1.125rem 0;\n  font-size: 1.125rem;\n}\n\n.form-label,\n.col-form-label {\n  font-size: 0.75rem;\n  text-transform: uppercase;\n  letter-spacing: inherit;\n}\n\n.form-label-lg {\n  font-size: 1rem;\n}\n\n.form-label-sm {\n  font-size: 0.75rem;\n}\n\n.form-control::placeholder, .form-control:focus::placeholder {\n  transition: all 0.25s ease;\n}\n.form-control:hover:not([disabled]):not([focus]) {\n  border-color: #c7cdd4;\n}\n\n.form-select {\n  background-clip: padding-box;\n}\n.form-select:hover:not([disabled]):not([focus]) {\n  border-color: #c7cdd4;\n}\n\n.form-range::-webkit-slider-thumb {\n  box-shadow: 0 0 6px 0 rgba(67, 89, 113, 0.4);\n  transition: transform 0.2s;\n  transform-origin: center;\n}\n.form-range::-webkit-slider-thumb:focus {\n  box-shadow: 0 0 8px 0px rgba(67, 89, 113, 0.4);\n}\n.form-range::-webkit-slider-thumb:active {\n  transform: scale(1.4, 1.4);\n}\n.form-range::-moz-range-thumb {\n  box-shadow: 0 0 6px 0 rgba(67, 89, 113, 0.4);\n  transition: transform 0.2s;\n  transform-origin: center;\n}\n.form-range::-moz-range-thumb:focus {\n  box-shadow: 0 0 8px 0px rgba(67, 89, 113, 0.4);\n}\n.form-range::-moz-range-thumb:active {\n  transform: scale(1.4, 1.4);\n}\n.form-range:disabled::-webkit-slider-runnable-track {\n  background-color: rgba(67, 89, 113, 0.05);\n}\n.form-range:disabled::-moz-range-track {\n  background-color: rgba(67, 89, 113, 0.05);\n  box-shadow: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n  box-shadow: none;\n}\n.form-range:disabled::-moz-range-thumb {\n  box-shadow: none;\n}\n\n.input-group:hover .input-group-text,\n.input-group:hover .form-control {\n  border-color: #c7cdd4;\n}\n.input-group:focus-within {\n  box-shadow: 0 0 0.25rem 0.05rem rgba(105, 108, 255, 0.1);\n}\n.input-group:focus-within .form-control,\n.input-group:focus-within .input-group-text {\n  box-shadow: none;\n}\n.input-group.disabled .input-group-text {\n  background-color: #eceef1;\n}\n\n.input-group-text {\n  background-clip: padding-box;\n}\n.input-group-text i {\n  font-size: 0.9375rem;\n}\n\n.input-group-lg > .input-group-text i {\n  font-size: 1rem;\n}\n\n.input-group-sm > .input-group-text i {\n  font-size: 0.75rem;\n}\n\n.input-group-merge .input-group-text:first-child {\n  border-right: 0;\n}\n.input-group-merge .input-group-text:last-child {\n  border-left: 0;\n}\n.input-group-merge .form-control:not(:first-child) {\n  padding-left: 0;\n  border-left: 0;\n}\n.input-group-merge .form-control:not(:last-child) {\n  padding-right: 0;\n  border-right: 0;\n}\n\n.input-group-text {\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .input-group-text {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control:focus::placeholder,\n.form-floating > .form-control:not(:placeholder-shown)::placeholder {\n  color: #b4bdc6;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.3rem;\n  font-size: 85%;\n  color: #71dd37;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.7rem;\n  margin-top: 0.1rem;\n  font-size: 0.9375rem;\n  color: #fff;\n  background-color: #71dd37;\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #71dd37 !important;\n}\n.dark-style .was-validated .form-control:valid, .dark-style .form-control.is-valid {\n  border-color: #71dd37 !important;\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #71dd37 !important;\n  box-shadow: 0 0 0.25rem 0.05rem rgba(113, 221, 55, 0.1);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #71dd37 !important;\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #71dd37;\n  box-shadow: 0 0 0.25rem 0.05rem rgba(113, 221, 55, 0.1);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #71dd37;\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #71dd37;\n  border-color: #71dd37;\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0.25rem 0.05rem rgba(113, 221, 55, 0.1);\n  border-color: #71dd37;\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #71dd37;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:valid ~ .input-group-text, .input-group .form-control.is-valid ~ .input-group-text {\n  border-color: #71dd37 !important;\n}\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus {\n  border-color: #71dd37 !important;\n  box-shadow: none;\n}\n.was-validated .input-group .form-control:valid:focus ~ .input-group-text, .input-group .form-control.is-valid:focus ~ .input-group-text {\n  border-color: #71dd37;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid,\n.was-validated .input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.3rem;\n  font-size: 85%;\n  color: #ff3e1d;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.7rem;\n  margin-top: 0.1rem;\n  font-size: 0.9375rem;\n  color: #fff;\n  background-color: #ff3e1d;\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #ff3e1d !important;\n}\n.dark-style .was-validated .form-control:invalid, .dark-style .form-control.is-invalid {\n  border-color: #ff3e1d !important;\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #ff3e1d !important;\n  box-shadow: 0 0 0.25rem 0.05rem rgba(255, 62, 29, 0.1);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #ff3e1d !important;\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #ff3e1d;\n  box-shadow: 0 0 0.25rem 0.05rem rgba(255, 62, 29, 0.1);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #ff3e1d;\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #ff3e1d;\n  border-color: #ff3e1d;\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0.25rem 0.05rem rgba(255, 62, 29, 0.1);\n  border-color: #ff3e1d;\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #ff3e1d;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:invalid ~ .input-group-text, .input-group .form-control.is-invalid ~ .input-group-text {\n  border-color: #ff3e1d !important;\n}\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus {\n  border-color: #ff3e1d !important;\n  box-shadow: none;\n}\n.was-validated .input-group .form-control:invalid:focus ~ .input-group-text, .input-group .form-control.is-invalid:focus ~ .input-group-text {\n  border-color: #ff3e1d;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid,\n.was-validated .input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 3;\n}\n\nform .error:not(li):not(input) {\n  color: #ff3e1d;\n  font-size: 85%;\n  margin-top: 0.25rem;\n}\nform .invalid,\nform .is-invalid .invalid:before,\nform .is-invalid::before {\n  border-color: #ff3e1d !important;\n}\nform .form-label.invalid, form .form-label.is-invalid {\n  border-color: #ff3e1d;\n  box-shadow: 0 0 0 2px rgba(255, 62, 29, 0.4) !important;\n}\nform select.invalid ~ .select2 .select2-selection {\n  border-color: #ff3e1d;\n}\nform select.is-invalid ~ .select2 .select2-selection {\n  border-color: #ff3e1d !important;\n}\nform select.selectpicker.is-invalid ~ .btn {\n  border-color: #ff3e1d !important;\n}\n\n.modal-content {\n  box-shadow: 0 2px 16px 0 rgba(67, 89, 113, 0.45);\n}\n\n.modal .btn-close {\n  background-color: #fff;\n  border-radius: 0.5rem;\n  opacity: 1;\n  padding: 0.635rem;\n  box-shadow: 0 0.125rem 0.25rem rgba(161, 172, 184, 0.4);\n  transition: all 0.23s ease 0.1s;\n  transform: translate(23px, -25px);\n}\n.modal .btn-close:hover, .modal .btn-close:focus, .modal .btn-close:active {\n  opacity: 1;\n  outline: none;\n  transform: translate(20px, -20px);\n}\n.modal .modal-header .btn-close {\n  margin-top: -1.25rem;\n}\n\n.modal-footer {\n  padding: 0.25rem 1.5rem 1.5rem;\n}\n\n.modal-dialog-scrollable .btn-close,\n.modal-fullscreen .btn-close,\n.modal-top .btn-close {\n  box-shadow: none;\n  transform: translate(0, 0) !important;\n}\n.modal-dialog-scrollable .btn-close:hover,\n.modal-fullscreen .btn-close:hover,\n.modal-top .btn-close:hover {\n  transform: translate(0, 0) !important;\n}\n\n.modal-top .modal-dialog {\n  margin-top: 0;\n}\n.modal-top .modal-content {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n@media (max-width: 991.98px) {\n  .modal-onboarding .onboarding-horizontal {\n    flex-direction: column;\n  }\n}\n@media (max-width: 767.98px) {\n  .modal .modal-dialog:not(.modal-fullscreen) {\n    padding: 0 0.75rem;\n    padding-left: 0.75rem !important;\n  }\n  .modal .carousel-control-prev,\n  .modal .carousel-control-next {\n    display: none;\n  }\n}\n@media (min-width: 576px) {\n  .modal-content {\n    box-shadow: 0 2px 20px 0 rgba(67, 89, 113, 0.45);\n  }\n  .modal-sm .modal-dialog {\n    max-width: 22.5rem;\n  }\n}\n@media (min-width: 1200px) {\n  .modal-xl .modal-dialog {\n    max-width: 1140px;\n  }\n}\n.progress {\n  overflow: initial;\n}\n\n.progress-bar.bg-secondary {\n  box-shadow: 0 2px 4px 0 rgba(133, 146, 163, 0.4);\n}\n\n.progress-bar.bg-success {\n  box-shadow: 0 2px 4px 0 rgba(113, 221, 55, 0.4);\n}\n\n.progress-bar.bg-info {\n  box-shadow: 0 2px 4px 0 rgba(3, 195, 236, 0.4);\n}\n\n.progress-bar.bg-warning {\n  box-shadow: 0 2px 4px 0 rgba(255, 171, 0, 0.4);\n}\n\n.progress-bar.bg-danger {\n  box-shadow: 0 2px 4px 0 rgba(255, 62, 29, 0.4);\n}\n\n.progress-bar.bg-light {\n  box-shadow: 0 2px 4px 0 rgba(252, 253, 253, 0.4);\n}\n\n.progress-bar.bg-dark {\n  box-shadow: 0 2px 4px 0 rgba(35, 52, 70, 0.4);\n}\n\n.progress-bar.bg-gray {\n  box-shadow: 0 2px 4px 0 rgba(67, 89, 113, 0.4);\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.07) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.07) 50%, rgba(255, 255, 255, 0.07) 75%, transparent 75%, transparent);\n}\n\n.progress .progress-bar:last-child {\n  border-top-right-radius: 10rem;\n  border-bottom-right-radius: 10rem;\n}\n.progress .progress-bar:first-child {\n  border-top-left-radius: 10rem;\n  border-bottom-left-radius: 10rem;\n}\n\n.breadcrumb-item,\n.breadcrumb-item a {\n  color: #697a8d;\n}\n.breadcrumb-item:hover, .breadcrumb-item:focus,\n.breadcrumb-item a:hover,\n.breadcrumb-item a:focus {\n  color: #697a8d;\n}\n.breadcrumb-item.active,\n.breadcrumb-item a.active {\n  font-weight: 500;\n}\n.breadcrumb-item.active::before,\n.breadcrumb-item a.active::before {\n  font-weight: 400;\n}\n\n.breadcrumb-item.active a, .breadcrumb-item.active a:hover, .breadcrumb-item.active a:focus, .breadcrumb-item.active a:active {\n  color: inherit;\n}\n\n.breadcrumb-style1 .breadcrumb-item + .breadcrumb-item::before,\n.breadcrumb-style2 .breadcrumb-item + .breadcrumb-item::before {\n  font-family: boxicons;\n  vertical-align: middle;\n}\n\n.breadcrumb-style1 .breadcrumb-item + .breadcrumb-item::before {\n  content: \"\\ea50\";\n  font-size: 1.125rem;\n  line-height: 1.4;\n}\n\n.breadcrumb-style2 .breadcrumb-item + .breadcrumb-item::before {\n  content: \"\\ebe7\";\n  font-size: 1rem;\n  line-height: 1.35rem;\n}\n\n.list-group-item-secondary {\n  background-color: #e7e9ed;\n  color: #8592a3 !important;\n}\n\na.list-group-item-secondary,\nbutton.list-group-item-secondary {\n  color: #8592a3;\n}\na.list-group-item-secondary:hover, a.list-group-item-secondary:focus,\nbutton.list-group-item-secondary:hover,\nbutton.list-group-item-secondary:focus {\n  background-color: #dbdde1;\n  color: #8592a3;\n}\na.list-group-item-secondary.active,\nbutton.list-group-item-secondary.active {\n  border-color: #8592a3;\n  background-color: #8592a3;\n  color: #8592a3;\n}\n\n.list-group-item-success {\n  background-color: #e3f8d7;\n  color: #71dd37 !important;\n}\n\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #71dd37;\n}\na.list-group-item-success:hover, a.list-group-item-success:focus,\nbutton.list-group-item-success:hover,\nbutton.list-group-item-success:focus {\n  background-color: #d8eccc;\n  color: #71dd37;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active {\n  border-color: #71dd37;\n  background-color: #71dd37;\n  color: #71dd37;\n}\n\n.list-group-item-info {\n  background-color: #cdf3fb;\n  color: #03c3ec !important;\n}\n\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #03c3ec;\n}\na.list-group-item-info:hover, a.list-group-item-info:focus,\nbutton.list-group-item-info:hover,\nbutton.list-group-item-info:focus {\n  background-color: #c3e7ee;\n  color: #03c3ec;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active {\n  border-color: #03c3ec;\n  background-color: #03c3ec;\n  color: #03c3ec;\n}\n\n.list-group-item-warning {\n  background-color: #ffeecc;\n  color: #ffab00 !important;\n}\n\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #ffab00;\n}\na.list-group-item-warning:hover, a.list-group-item-warning:focus,\nbutton.list-group-item-warning:hover,\nbutton.list-group-item-warning:focus {\n  background-color: #f2e2c2;\n  color: #ffab00;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active {\n  border-color: #ffab00;\n  background-color: #ffab00;\n  color: #ffab00;\n}\n\n.list-group-item-danger {\n  background-color: #ffd8d2;\n  color: #ff3e1d !important;\n}\n\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #ff3e1d;\n}\na.list-group-item-danger:hover, a.list-group-item-danger:focus,\nbutton.list-group-item-danger:hover,\nbutton.list-group-item-danger:focus {\n  background-color: #f2cdc8;\n  color: #ff3e1d;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active {\n  border-color: #ff3e1d;\n  background-color: #ff3e1d;\n  color: #ff3e1d;\n}\n\n.list-group-item-dark {\n  background-color: #d3d6da;\n  color: #233446 !important;\n}\n\na.list-group-item-dark,\nbutton.list-group-item-dark {\n  color: #233446;\n}\na.list-group-item-dark:hover, a.list-group-item-dark:focus,\nbutton.list-group-item-dark:hover,\nbutton.list-group-item-dark:focus {\n  background-color: #c8cbcf;\n  color: #233446;\n}\na.list-group-item-dark.active,\nbutton.list-group-item-dark.active {\n  border-color: #233446;\n  background-color: #233446;\n  color: #233446;\n}\n\n.list-group-item-gray {\n  background-color: rgba(253, 253, 253, 0.82);\n  color: rgba(67, 89, 113, 0.1) !important;\n}\n\na.list-group-item-gray,\nbutton.list-group-item-gray {\n  color: rgba(67, 89, 113, 0.1);\n}\na.list-group-item-gray:hover, a.list-group-item-gray:focus,\nbutton.list-group-item-gray:hover,\nbutton.list-group-item-gray:focus {\n  background-color: rgba(235, 235, 235, 0.829);\n  color: rgba(67, 89, 113, 0.1);\n}\na.list-group-item-gray.active,\nbutton.list-group-item-gray.active {\n  border-color: rgba(67, 89, 113, 0.1);\n  background-color: rgba(67, 89, 113, 0.1);\n  color: rgba(67, 89, 113, 0.1);\n}\n\n.list-group.list-group-timeline {\n  position: relative;\n}\n.list-group.list-group-timeline:before {\n  background-color: #d9dee3;\n  position: absolute;\n  content: \"\";\n  width: 1px;\n  height: 100%;\n  top: 0;\n  bottom: 0;\n  left: 0.2rem;\n}\n.list-group.list-group-timeline .list-group-item {\n  border: none;\n  padding-left: 1.25rem;\n}\n.list-group.list-group-timeline .list-group-item:before {\n  position: absolute;\n  display: block;\n  content: \"\";\n  width: 7px;\n  height: 7px;\n  left: 0;\n  top: 50%;\n  margin-top: -3.5px;\n  border-radius: 100%;\n}\n.list-group .list-group-item.active h1,\n.list-group .list-group-item.active .h1,\n.list-group .list-group-item.active h2,\n.list-group .list-group-item.active .h2,\n.list-group .list-group-item.active h3,\n.list-group .list-group-item.active .h3,\n.list-group .list-group-item.active h4,\n.list-group .list-group-item.active .h4,\n.list-group .list-group-item.active h5,\n.list-group .list-group-item.active .h5,\n.list-group .list-group-item.active h6,\n.list-group .list-group-item.active .h6 {\n  color: #fff;\n}\n\n.navbar {\n  z-index: 2;\n}\n.navbar .dropdown:focus,\n.navbar .dropdown-toggle:focus {\n  outline: 0;\n}\n.navbar .navbar-toggler {\n  border: none;\n}\n.navbar .navbar-toggler:focus {\n  box-shadow: none;\n}\n\n.fixed-top {\n  z-index: 1030;\n}\n\n.navbar.navbar-light {\n  color: rgba(67, 89, 113, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(67, 89, 113, 0.3) !important;\n}\n\n.navbar.navbar-dark {\n  color: rgba(255, 255, 255, 0.8);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.4) !important;\n}\n\n.navbar-collapse,\n.navbar-brand,\n.navbar-text {\n  flex-shrink: 1;\n}\n\n.navbar-dark hr {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-light hr {\n  border-color: rgba(67, 89, 113, 0.1);\n}\n\n.card {\n  background-clip: padding-box;\n  box-shadow: 0 2px 6px 0 rgba(67, 89, 113, 0.12);\n}\n.card .card-link {\n  display: inline-block;\n}\n.card .card-header + .card-body,\n.card .card-header + .card-content > .card-body:first-of-type {\n  padding-top: 0;\n}\n\n.card-action.card-fullscreen {\n  display: block;\n  z-index: 9999;\n  position: fixed;\n  width: 100% !important;\n  height: 100% !important;\n  top: 0;\n  right: 0;\n  left: 0;\n  bottom: 0;\n  overflow: auto;\n  border: none;\n  border-radius: 0;\n}\n.card-action .card-alert {\n  position: absolute;\n  width: 100%;\n  z-index: 999;\n}\n.card-action .card-alert .alert {\n  border-bottom-right-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n.card-action .card-header.collapsed {\n  border-bottom: 0;\n}\n.card-action .card-header {\n  display: flex;\n  line-height: 1.54;\n}\n.card-action .card-header .card-action-title {\n  flex-grow: 1;\n  margin-right: 0.5rem;\n}\n.card-action .card-header .card-action-element {\n  flex-shrink: 0;\n  background-color: inherit;\n  top: 1rem;\n  right: 1.5rem;\n  color: #697a8d;\n}\n.card-action .card-header .card-action-element a {\n  color: #697a8d;\n}\n.card-action .card-header .card-action-element a .collapse-icon::after {\n  margin-top: -0.15rem;\n}\n.card-action .blockUI .sk-fold {\n  margin: 0 auto;\n}\n.card-action .blockUI h5, .card-action .blockUI .h5 {\n  color: #697a8d;\n  margin: 1rem 0 0 0;\n}\n\n.card-header,\n.card-footer {\n  border-color: #d9dee3;\n}\n\n.card hr {\n  color: #d9dee3;\n}\n\n.card .row-bordered > [class*=\" col \"] .card .row-bordered > [class$=\" col\"], .card .row-bordered > [class*=\" col \"]::before, .card .row-bordered > [class*=\" col \"]::after,\n.card .row-bordered > [class^=\"col \"] .card .row-bordered > [class$=\" col\"],\n.card .row-bordered > [class^=\"col \"]::before,\n.card .row-bordered > [class^=\"col \"]::after,\n.card .row-bordered > [class*=\" col-\"] .card .row-bordered > [class$=\" col\"],\n.card .row-bordered > [class*=\" col-\"]::before,\n.card .row-bordered > [class*=\" col-\"]::after,\n.card .row-bordered > [class^=col-] .card .row-bordered > [class$=\" col\"],\n.card .row-bordered > [class^=col-]::before,\n.card .row-bordered > [class^=col-]::after,\n.card .row-bordered > [class=col] .card .row-bordered > [class$=\" col\"],\n.card .row-bordered > [class=col]::before,\n.card .row-bordered > [class=col]::after {\n  border-color: #d9dee3;\n}\n\n.card-header.header-elements,\n.card-title.header-elements {\n  display: flex;\n  width: 100%;\n  align-items: center;\n  flex-wrap: wrap;\n}\n\n.card-header.card-header-elements {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n}\n.card-header .card-header-elements {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n}\n\n.card-header-elements,\n.card-title-elements {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n}\n.card-header-elements + .card-header-elements,\n.card-header-elements > * + *,\n.card-header-elements + .card-title-elements,\n.card-title-elements > * + *,\n.card-title-elements + .card-header-elements,\n.card-title-elements + .card-title-elements {\n  margin-left: 0.25rem;\n}\n\n.card-img-left {\n  border-top-left-radius: 0.5rem;\n  border-bottom-left-radius: 0.5rem;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n@media (max-width: 767.98px) {\n  .card-img-left {\n    border-top-left-radius: 0.5rem;\n    border-top-right-radius: 0.5rem;\n    border-bottom-right-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n}\n\n.card-img-right {\n  border-top-right-radius: 0.5rem;\n  border-bottom-right-radius: 0.5rem;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n@media (max-width: 767.98px) {\n  .card-img-right {\n    border-bottom-right-radius: 0.5rem;\n    border-bottom-left-radius: 0.5rem;\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n}\n\n.card > .list-group .list-group-item {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n\n.card .card-separator {\n  border-right: 1px solid #d9dee3;\n}\n\n@media (max-width: 767.98px) {\n  .card .card-separator {\n    border-bottom: 1px solid #d9dee3;\n    padding-bottom: 1.5rem;\n    border-right-width: 0 !important;\n  }\n}\n.accordion-header + .accordion-collapse .accordion-body {\n  padding-top: 0;\n}\n\n.accordion.accordion-without-arrow .accordion-button::after {\n  background-image: none !important;\n}\n.accordion .accordion-item.active {\n  box-shadow: 0 0.25rem 1rem rgba(161, 172, 184, 0.45);\n}\n\n.card.accordion-item {\n  box-shadow: 0 0.125rem 0.25rem rgba(161, 172, 184, 0.4);\n}\n\n.accordion-button.collapsed:focus {\n  box-shadow: none;\n}\n\n.accordion-button {\n  box-shadow: none;\n}\n\n.accordion-header {\n  line-height: 1.54;\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0 solid #d9dee3;\n}\n\n.accordion-button {\n  font-weight: inherit;\n  border-top-left-radius: 0.375rem;\n  border-top-right-radius: 0.375rem;\n}\n.accordion-button.collapsed {\n  border-radius: 0.375rem;\n}\n\n.accordion > .card:not(:last-of-type) {\n  border-radius: 0.375rem !important;\n  margin-bottom: 0.6875rem;\n}\n\n.close:focus {\n  outline: 0;\n}\n\n.bg-secondary.toast, .bg-secondary.bs-toast {\n  color: #fff;\n  background-color: rgba(133, 146, 163, 0.85) !important;\n  box-shadow: 0 0.25rem 1rem rgba(133, 146, 163, 0.4);\n}\n.bg-secondary.toast .toast-header, .bg-secondary.bs-toast .toast-header {\n  color: #fff;\n}\n.bg-secondary.toast .toast-header .btn-close, .bg-secondary.bs-toast .toast-header .btn-close {\n  background-color: #8592a3 !important;\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='1' fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n  box-shadow: 0 0.1875rem 0.375rem 0 rgba(133, 146, 163, 0.4) !important;\n}\n\n.bg-success.toast, .bg-success.bs-toast {\n  color: #fff;\n  background-color: rgba(113, 221, 55, 0.85) !important;\n  box-shadow: 0 0.25rem 1rem rgba(113, 221, 55, 0.4);\n}\n.bg-success.toast .toast-header, .bg-success.bs-toast .toast-header {\n  color: #fff;\n}\n.bg-success.toast .toast-header .btn-close, .bg-success.bs-toast .toast-header .btn-close {\n  background-color: #71dd37 !important;\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='1' fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n  box-shadow: 0 0.1875rem 0.375rem 0 rgba(113, 221, 55, 0.4) !important;\n}\n\n.bg-info.toast, .bg-info.bs-toast {\n  color: #fff;\n  background-color: rgba(3, 195, 236, 0.85) !important;\n  box-shadow: 0 0.25rem 1rem rgba(3, 195, 236, 0.4);\n}\n.bg-info.toast .toast-header, .bg-info.bs-toast .toast-header {\n  color: #fff;\n}\n.bg-info.toast .toast-header .btn-close, .bg-info.bs-toast .toast-header .btn-close {\n  background-color: #03c3ec !important;\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='1' fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n  box-shadow: 0 0.1875rem 0.375rem 0 rgba(3, 195, 236, 0.4) !important;\n}\n\n.bg-warning.toast, .bg-warning.bs-toast {\n  color: #fff;\n  background-color: rgba(255, 171, 0, 0.85) !important;\n  box-shadow: 0 0.25rem 1rem rgba(255, 171, 0, 0.4);\n}\n.bg-warning.toast .toast-header, .bg-warning.bs-toast .toast-header {\n  color: #fff;\n}\n.bg-warning.toast .toast-header .btn-close, .bg-warning.bs-toast .toast-header .btn-close {\n  background-color: #ffab00 !important;\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='1' fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n  box-shadow: 0 0.1875rem 0.375rem 0 rgba(255, 171, 0, 0.4) !important;\n}\n\n.bg-danger.toast, .bg-danger.bs-toast {\n  color: #fff;\n  background-color: rgba(255, 62, 29, 0.85) !important;\n  box-shadow: 0 0.25rem 1rem rgba(255, 62, 29, 0.4);\n}\n.bg-danger.toast .toast-header, .bg-danger.bs-toast .toast-header {\n  color: #fff;\n}\n.bg-danger.toast .toast-header .btn-close, .bg-danger.bs-toast .toast-header .btn-close {\n  background-color: #ff3e1d !important;\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='1' fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n  box-shadow: 0 0.1875rem 0.375rem 0 rgba(255, 62, 29, 0.4) !important;\n}\n\n.bg-light.toast, .bg-light.bs-toast {\n  color: #fff;\n  background-color: rgba(252, 253, 253, 0.85) !important;\n  box-shadow: 0 0.25rem 1rem rgba(252, 253, 253, 0.4);\n}\n.bg-light.toast .toast-header, .bg-light.bs-toast .toast-header {\n  color: #fff;\n}\n.bg-light.toast .toast-header .btn-close, .bg-light.bs-toast .toast-header .btn-close {\n  background-color: #fcfdfd !important;\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='1' fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n  box-shadow: 0 0.1875rem 0.375rem 0 rgba(252, 253, 253, 0.4) !important;\n}\n\n.bg-dark.toast, .bg-dark.bs-toast {\n  color: #fff;\n  background-color: rgba(35, 52, 70, 0.85) !important;\n  box-shadow: 0 0.25rem 1rem rgba(35, 52, 70, 0.4);\n}\n.bg-dark.toast .toast-header, .bg-dark.bs-toast .toast-header {\n  color: #fff;\n}\n.bg-dark.toast .toast-header .btn-close, .bg-dark.bs-toast .toast-header .btn-close {\n  background-color: #233446 !important;\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='1' fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n  box-shadow: 0 0.1875rem 0.375rem 0 rgba(35, 52, 70, 0.4) !important;\n}\n\n.bg-gray.toast, .bg-gray.bs-toast {\n  color: #fff;\n  background-color: rgba(67, 89, 113, 0.85) !important;\n  box-shadow: 0 0.25rem 1rem rgba(67, 89, 113, 0.4);\n}\n.bg-gray.toast .toast-header, .bg-gray.bs-toast .toast-header {\n  color: #fff;\n}\n.bg-gray.toast .toast-header .btn-close, .bg-gray.bs-toast .toast-header .btn-close {\n  background-color: rgba(67, 89, 113, 0.1) !important;\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='1' fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n  box-shadow: 0 0.1875rem 0.375rem 0 rgba(67, 89, 113, 0.4) !important;\n}\n\n.bs-toast[class^=bg-],\n.bs-toast[class*=\" bg-\"] {\n  border: none;\n}\n\n.toast.bs-toast {\n  background-color: rgba(255, 255, 255, 0.85);\n  z-index: 1095;\n}\n.toast.bs-toast .toast-header {\n  padding-bottom: 0.5rem;\n  position: relative;\n}\n.toast.bs-toast .toast-header .btn-close {\n  position: absolute;\n  top: -8px;\n  border-radius: 0.375rem;\n  padding: 0.45rem;\n  background-size: 0.625em;\n  transition: all 0.23s ease 0.1s;\n  background-color: #fff;\n  box-shadow: 0 0.125rem 0.25rem rgba(161, 172, 184, 0.4);\n  right: 2px;\n}\n.toast.bs-toast .toast-header .btn-close:hover, .toast.bs-toast .toast-header .btn-close:focus, .toast.bs-toast .toast-header .btn-close:active {\n  opacity: 1;\n  outline: none;\n}\n.toast.bs-toast .toast-header ~ .toast-body {\n  padding-top: 0;\n}\n\n.toast-container {\n  --bs-toast-zindex: 9;\n}\n\n.toast-ex {\n  position: fixed;\n  top: 4.1rem;\n  right: 2.5rem;\n}\n\n.toast-placement-ex {\n  position: fixed;\n}\n\n.carousel .carousel-item.active h1,\n.carousel .carousel-item.active .h1,\n.carousel .carousel-item.active h2,\n.carousel .carousel-item.active .h2,\n.carousel .carousel-item.active h3,\n.carousel .carousel-item.active .h3,\n.carousel .carousel-item.active h4,\n.carousel .carousel-item.active .h4,\n.carousel .carousel-item.active h5,\n.carousel .carousel-item.active .h5,\n.carousel .carousel-item.active h6,\n.carousel .carousel-item.active .h6,\n.carousel .carousel-item.carousel-item-start h1,\n.carousel .carousel-item.carousel-item-start .h1,\n.carousel .carousel-item.carousel-item-start h2,\n.carousel .carousel-item.carousel-item-start .h2,\n.carousel .carousel-item.carousel-item-start h3,\n.carousel .carousel-item.carousel-item-start .h3,\n.carousel .carousel-item.carousel-item-start h4,\n.carousel .carousel-item.carousel-item-start .h4,\n.carousel .carousel-item.carousel-item-start h5,\n.carousel .carousel-item.carousel-item-start .h5,\n.carousel .carousel-item.carousel-item-start h6,\n.carousel .carousel-item.carousel-item-start .h6 {\n  color: #fff;\n}\n\n.carousel.carousel-dark .carousel-item.active h1,\n.carousel.carousel-dark .carousel-item.active .h1,\n.carousel.carousel-dark .carousel-item.active h2,\n.carousel.carousel-dark .carousel-item.active .h2,\n.carousel.carousel-dark .carousel-item.active h3,\n.carousel.carousel-dark .carousel-item.active .h3,\n.carousel.carousel-dark .carousel-item.active h4,\n.carousel.carousel-dark .carousel-item.active .h4,\n.carousel.carousel-dark .carousel-item.active h5,\n.carousel.carousel-dark .carousel-item.active .h5,\n.carousel.carousel-dark .carousel-item.active h6,\n.carousel.carousel-dark .carousel-item.active .h6,\n.carousel.carousel-dark .carousel-item.carousel-item-start h1,\n.carousel.carousel-dark .carousel-item.carousel-item-start .h1,\n.carousel.carousel-dark .carousel-item.carousel-item-start h2,\n.carousel.carousel-dark .carousel-item.carousel-item-start .h2,\n.carousel.carousel-dark .carousel-item.carousel-item-start h3,\n.carousel.carousel-dark .carousel-item.carousel-item-start .h3,\n.carousel.carousel-dark .carousel-item.carousel-item-start h4,\n.carousel.carousel-dark .carousel-item.carousel-item-start .h4,\n.carousel.carousel-dark .carousel-item.carousel-item-start h5,\n.carousel.carousel-dark .carousel-item.carousel-item-start .h5,\n.carousel.carousel-dark .carousel-item.carousel-item-start h6,\n.carousel.carousel-dark .carousel-item.carousel-item-start .h6 {\n  color: #435971;\n}\n\n.spinner-border-lg {\n  width: 3rem;\n  height: 3rem;\n  border-width: 0.3em;\n}\n\n.spinner-grow-lg {\n  width: 3rem;\n  height: 3rem;\n  border-width: 0.3em;\n}\n\n@-webkit-keyframes spinner-border-rtl {\n  to {\n    transform: rotate(-360deg);\n  }\n}\n@-moz-keyframes spinner-border-rtl {\n  to {\n    transform: rotate(-360deg);\n  }\n}\n@keyframes spinner-border-rtl {\n  to {\n    transform: rotate(-360deg);\n  }\n}\n.offcanvas-header {\n  padding-bottom: 0.75rem;\n}\n\n.offcanvas-body {\n  padding-top: 0.75rem;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.25rem 1rem rgba(161, 172, 184, 0.45) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(161, 172, 184, 0.4) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 0.625rem 1.25rem rgba(161, 172, 184, 0.5) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.zindex-1 {\n  z-index: 1 !important;\n}\n\n.zindex-2 {\n  z-index: 2 !important;\n}\n\n.zindex-3 {\n  z-index: 3 !important;\n}\n\n.zindex-4 {\n  z-index: 4 !important;\n}\n\n.zindex-5 {\n  z-index: 5 !important;\n}\n\n.border {\n  border: 1px solid #d9dee3 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-solid {\n  border-style: solid !important;\n}\n\n.border-dashed {\n  border-style: dashed !important;\n}\n\n.border-none {\n  border-style: none !important;\n}\n\n.border-top {\n  border-top: 1px solid #d9dee3 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #d9dee3 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-primary {\n  border-color: #696cff !important;\n}\n\n.border-secondary {\n  border-color: #8592a3 !important;\n}\n\n.border-success {\n  border-color: #71dd37 !important;\n}\n\n.border-info {\n  border-color: #03c3ec !important;\n}\n\n.border-warning {\n  border-color: #ffab00 !important;\n}\n\n.border-danger {\n  border-color: #ff3e1d !important;\n}\n\n.border-light {\n  border-color: rgba(67, 89, 113, 0.1) !important;\n}\n\n.border-dark {\n  border-color: #233446 !important;\n}\n\n.border-gray {\n  border-color: rgba(67, 89, 113, 0.1) !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-transparent {\n  border-color: transparent !important;\n}\n\n.border-label-primary {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-secondary {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-success {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-info {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-warning {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-danger {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-light {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-dark {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-gray {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-gray-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-white {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-px-20 {\n  width: 20px !important;\n}\n\n.w-px-30 {\n  width: 30px !important;\n}\n\n.w-px-40 {\n  width: 40px !important;\n}\n\n.w-px-50 {\n  width: 50px !important;\n}\n\n.w-px-75 {\n  width: 75px !important;\n}\n\n.w-px-100 {\n  width: 100px !important;\n}\n\n.w-px-150 {\n  width: 150px !important;\n}\n\n.w-px-200 {\n  width: 200px !important;\n}\n\n.w-px-250 {\n  width: 250px !important;\n}\n\n.w-px-300 {\n  width: 300px !important;\n}\n\n.w-px-350 {\n  width: 350px !important;\n}\n\n.w-px-400 {\n  width: 400px !important;\n}\n\n.w-px-500 {\n  width: 500px !important;\n}\n\n.w-px-600 {\n  width: 600px !important;\n}\n\n.w-px-700 {\n  width: 700px !important;\n}\n\n.w-px-800 {\n  width: 800px !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.w-20 {\n  width: 20% !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-60 {\n  width: 60% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-px-20 {\n  height: 20px !important;\n}\n\n.h-px-30 {\n  height: 30px !important;\n}\n\n.h-px-40 {\n  height: 40px !important;\n}\n\n.h-px-50 {\n  height: 50px !important;\n}\n\n.h-px-75 {\n  height: 75px !important;\n}\n\n.h-px-100 {\n  height: 100px !important;\n}\n\n.h-px-150 {\n  height: 150px !important;\n}\n\n.h-px-200 {\n  height: 200px !important;\n}\n\n.h-px-250 {\n  height: 250px !important;\n}\n\n.h-px-300 {\n  height: 300px !important;\n}\n\n.h-px-350 {\n  height: 350px !important;\n}\n\n.h-px-400 {\n  height: 400px !important;\n}\n\n.h-px-500 {\n  height: 500px !important;\n}\n\n.h-px-600 {\n  height: 600px !important;\n}\n\n.h-px-700 {\n  height: 700px !important;\n}\n\n.h-px-800 {\n  height: 800px !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  flex-direction: row !important;\n}\n\n.flex-column {\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  align-content: center !important;\n}\n\n.align-content-between {\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  align-self: auto !important;\n}\n\n.align-self-start {\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  align-self: stretch !important;\n}\n\n.order-first {\n  order: -1 !important;\n}\n\n.order-0 {\n  order: 0 !important;\n}\n\n.order-1 {\n  order: 1 !important;\n}\n\n.order-2 {\n  order: 2 !important;\n}\n\n.order-3 {\n  order: 3 !important;\n}\n\n.order-4 {\n  order: 4 !important;\n}\n\n.order-5 {\n  order: 5 !important;\n}\n\n.order-last {\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.m-n1 {\n  margin: -0.25rem !important;\n}\n\n.m-n2 {\n  margin: -0.5rem !important;\n}\n\n.m-n3 {\n  margin: -1rem !important;\n}\n\n.m-n4 {\n  margin: -1.5rem !important;\n}\n\n.m-n5 {\n  margin: -3rem !important;\n}\n\n.mx-n1 {\n  margin-right: -0.25rem !important;\n  margin-left: -0.25rem !important;\n}\n\n.mx-n2 {\n  margin-right: -0.5rem !important;\n  margin-left: -0.5rem !important;\n}\n\n.mx-n3 {\n  margin-right: -1rem !important;\n  margin-left: -1rem !important;\n}\n\n.mx-n4 {\n  margin-right: -1.5rem !important;\n  margin-left: -1.5rem !important;\n}\n\n.mx-n5 {\n  margin-right: -3rem !important;\n  margin-left: -3rem !important;\n}\n\n.my-n1 {\n  margin-top: -0.25rem !important;\n  margin-bottom: -0.25rem !important;\n}\n\n.my-n2 {\n  margin-top: -0.5rem !important;\n  margin-bottom: -0.5rem !important;\n}\n\n.my-n3 {\n  margin-top: -1rem !important;\n  margin-bottom: -1rem !important;\n}\n\n.my-n4 {\n  margin-top: -1.5rem !important;\n  margin-bottom: -1.5rem !important;\n}\n\n.my-n5 {\n  margin-top: -3rem !important;\n  margin-bottom: -3rem !important;\n}\n\n.mt-n1 {\n  margin-top: -0.25rem !important;\n}\n\n.mt-n2 {\n  margin-top: -0.5rem !important;\n}\n\n.mt-n3 {\n  margin-top: -1rem !important;\n}\n\n.mt-n4 {\n  margin-top: -1.5rem !important;\n}\n\n.mt-n5 {\n  margin-top: -3rem !important;\n}\n\n.mb-n1 {\n  margin-bottom: -0.25rem !important;\n}\n\n.mb-n2 {\n  margin-bottom: -0.5rem !important;\n}\n\n.mb-n3 {\n  margin-bottom: -1rem !important;\n}\n\n.mb-n4 {\n  margin-bottom: -1.5rem !important;\n}\n\n.mb-n5 {\n  margin-bottom: -3rem !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.3625rem + 1.35vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.2875rem + 0.45vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.2625rem + 0.15vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.125rem !important;\n}\n\n.fs-6 {\n  font-size: 0.9375rem !important;\n}\n\n.fs-tiny {\n  font-size: 70% !important;\n}\n\n.fs-big {\n  font-size: 112% !important;\n}\n\n.fs-large {\n  font-size: 150% !important;\n}\n\n.fs-xlarge {\n  font-size: 170% !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-medium {\n  font-weight: 500 !important;\n}\n\n.fw-semibold {\n  font-weight: 600 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-inherit {\n  line-height: inherit !important;\n}\n\n.lh-sm {\n  line-height: 1.5 !important;\n}\n\n.lh-base {\n  line-height: 1.53 !important;\n}\n\n.lh-lg {\n  line-height: 1.5 !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-none {\n  text-transform: none !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: #b4bdc6 !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-gray {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-gray-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: #fff !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: #697a8d !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #a1acb8 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(67, 89, 113, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-heading {\n  --bs-text-opacity: 1;\n  color: #566a7f !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-gray {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-gray-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: #fff !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: #f5f5f9 !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-lighter {\n  --bs-bg-opacity: 1;\n  background-color: rgba(67, 89, 113, 0.05) !important;\n}\n\n.bg-lightest {\n  --bs-bg-opacity: 1;\n  background-color: rgba(67, 89, 113, 0.025) !important;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  user-select: all !important;\n}\n\n.user-select-auto {\n  user-select: auto !important;\n}\n\n.user-select-none {\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.375rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.375rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.5rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.375rem !important;\n  border-top-right-radius: 0.375rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.375rem !important;\n  border-bottom-left-radius: 0.375rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n.cursor-pointer {\n  cursor: pointer !important;\n}\n\n.cursor-move {\n  cursor: move !important;\n}\n\n.cursor-grab {\n  cursor: grab !important;\n}\n\n@media (min-width: 576px) {\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .border-sm-solid {\n    border-style: solid !important;\n  }\n  .border-sm-dashed {\n    border-style: dashed !important;\n  }\n  .border-sm-none {\n    border-style: none !important;\n  }\n  .flex-sm-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    order: 5 !important;\n  }\n  .order-sm-last {\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .m-sm-n1 {\n    margin: -0.25rem !important;\n  }\n  .m-sm-n2 {\n    margin: -0.5rem !important;\n  }\n  .m-sm-n3 {\n    margin: -1rem !important;\n  }\n  .m-sm-n4 {\n    margin: -1.5rem !important;\n  }\n  .m-sm-n5 {\n    margin: -3rem !important;\n  }\n  .mx-sm-n1 {\n    margin-right: -0.25rem !important;\n    margin-left: -0.25rem !important;\n  }\n  .mx-sm-n2 {\n    margin-right: -0.5rem !important;\n    margin-left: -0.5rem !important;\n  }\n  .mx-sm-n3 {\n    margin-right: -1rem !important;\n    margin-left: -1rem !important;\n  }\n  .mx-sm-n4 {\n    margin-right: -1.5rem !important;\n    margin-left: -1.5rem !important;\n  }\n  .mx-sm-n5 {\n    margin-right: -3rem !important;\n    margin-left: -3rem !important;\n  }\n  .my-sm-n1 {\n    margin-top: -0.25rem !important;\n    margin-bottom: -0.25rem !important;\n  }\n  .my-sm-n2 {\n    margin-top: -0.5rem !important;\n    margin-bottom: -0.5rem !important;\n  }\n  .my-sm-n3 {\n    margin-top: -1rem !important;\n    margin-bottom: -1rem !important;\n  }\n  .my-sm-n4 {\n    margin-top: -1.5rem !important;\n    margin-bottom: -1.5rem !important;\n  }\n  .my-sm-n5 {\n    margin-top: -3rem !important;\n    margin-bottom: -3rem !important;\n  }\n  .mt-sm-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mt-sm-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mt-sm-n3 {\n    margin-top: -1rem !important;\n  }\n  .mt-sm-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mt-sm-n5 {\n    margin-top: -3rem !important;\n  }\n  .mb-sm-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .mb-sm-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .mb-sm-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .mb-sm-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .mb-sm-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n}\n@media (min-width: 768px) {\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .border-md-solid {\n    border-style: solid !important;\n  }\n  .border-md-dashed {\n    border-style: dashed !important;\n  }\n  .border-md-none {\n    border-style: none !important;\n  }\n  .flex-md-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    order: -1 !important;\n  }\n  .order-md-0 {\n    order: 0 !important;\n  }\n  .order-md-1 {\n    order: 1 !important;\n  }\n  .order-md-2 {\n    order: 2 !important;\n  }\n  .order-md-3 {\n    order: 3 !important;\n  }\n  .order-md-4 {\n    order: 4 !important;\n  }\n  .order-md-5 {\n    order: 5 !important;\n  }\n  .order-md-last {\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .m-md-n1 {\n    margin: -0.25rem !important;\n  }\n  .m-md-n2 {\n    margin: -0.5rem !important;\n  }\n  .m-md-n3 {\n    margin: -1rem !important;\n  }\n  .m-md-n4 {\n    margin: -1.5rem !important;\n  }\n  .m-md-n5 {\n    margin: -3rem !important;\n  }\n  .mx-md-n1 {\n    margin-right: -0.25rem !important;\n    margin-left: -0.25rem !important;\n  }\n  .mx-md-n2 {\n    margin-right: -0.5rem !important;\n    margin-left: -0.5rem !important;\n  }\n  .mx-md-n3 {\n    margin-right: -1rem !important;\n    margin-left: -1rem !important;\n  }\n  .mx-md-n4 {\n    margin-right: -1.5rem !important;\n    margin-left: -1.5rem !important;\n  }\n  .mx-md-n5 {\n    margin-right: -3rem !important;\n    margin-left: -3rem !important;\n  }\n  .my-md-n1 {\n    margin-top: -0.25rem !important;\n    margin-bottom: -0.25rem !important;\n  }\n  .my-md-n2 {\n    margin-top: -0.5rem !important;\n    margin-bottom: -0.5rem !important;\n  }\n  .my-md-n3 {\n    margin-top: -1rem !important;\n    margin-bottom: -1rem !important;\n  }\n  .my-md-n4 {\n    margin-top: -1.5rem !important;\n    margin-bottom: -1.5rem !important;\n  }\n  .my-md-n5 {\n    margin-top: -3rem !important;\n    margin-bottom: -3rem !important;\n  }\n  .mt-md-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mt-md-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mt-md-n3 {\n    margin-top: -1rem !important;\n  }\n  .mt-md-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mt-md-n5 {\n    margin-top: -3rem !important;\n  }\n  .mb-md-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .mb-md-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .mb-md-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .mb-md-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .mb-md-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n}\n@media (min-width: 992px) {\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .border-lg-solid {\n    border-style: solid !important;\n  }\n  .border-lg-dashed {\n    border-style: dashed !important;\n  }\n  .border-lg-none {\n    border-style: none !important;\n  }\n  .flex-lg-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    order: 5 !important;\n  }\n  .order-lg-last {\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .m-lg-n1 {\n    margin: -0.25rem !important;\n  }\n  .m-lg-n2 {\n    margin: -0.5rem !important;\n  }\n  .m-lg-n3 {\n    margin: -1rem !important;\n  }\n  .m-lg-n4 {\n    margin: -1.5rem !important;\n  }\n  .m-lg-n5 {\n    margin: -3rem !important;\n  }\n  .mx-lg-n1 {\n    margin-right: -0.25rem !important;\n    margin-left: -0.25rem !important;\n  }\n  .mx-lg-n2 {\n    margin-right: -0.5rem !important;\n    margin-left: -0.5rem !important;\n  }\n  .mx-lg-n3 {\n    margin-right: -1rem !important;\n    margin-left: -1rem !important;\n  }\n  .mx-lg-n4 {\n    margin-right: -1.5rem !important;\n    margin-left: -1.5rem !important;\n  }\n  .mx-lg-n5 {\n    margin-right: -3rem !important;\n    margin-left: -3rem !important;\n  }\n  .my-lg-n1 {\n    margin-top: -0.25rem !important;\n    margin-bottom: -0.25rem !important;\n  }\n  .my-lg-n2 {\n    margin-top: -0.5rem !important;\n    margin-bottom: -0.5rem !important;\n  }\n  .my-lg-n3 {\n    margin-top: -1rem !important;\n    margin-bottom: -1rem !important;\n  }\n  .my-lg-n4 {\n    margin-top: -1.5rem !important;\n    margin-bottom: -1.5rem !important;\n  }\n  .my-lg-n5 {\n    margin-top: -3rem !important;\n    margin-bottom: -3rem !important;\n  }\n  .mt-lg-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mt-lg-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mt-lg-n3 {\n    margin-top: -1rem !important;\n  }\n  .mt-lg-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mt-lg-n5 {\n    margin-top: -3rem !important;\n  }\n  .mb-lg-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .mb-lg-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .mb-lg-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .mb-lg-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .mb-lg-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n}\n@media (min-width: 1200px) {\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .border-xl-solid {\n    border-style: solid !important;\n  }\n  .border-xl-dashed {\n    border-style: dashed !important;\n  }\n  .border-xl-none {\n    border-style: none !important;\n  }\n  .flex-xl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    order: 5 !important;\n  }\n  .order-xl-last {\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .m-xl-n1 {\n    margin: -0.25rem !important;\n  }\n  .m-xl-n2 {\n    margin: -0.5rem !important;\n  }\n  .m-xl-n3 {\n    margin: -1rem !important;\n  }\n  .m-xl-n4 {\n    margin: -1.5rem !important;\n  }\n  .m-xl-n5 {\n    margin: -3rem !important;\n  }\n  .mx-xl-n1 {\n    margin-right: -0.25rem !important;\n    margin-left: -0.25rem !important;\n  }\n  .mx-xl-n2 {\n    margin-right: -0.5rem !important;\n    margin-left: -0.5rem !important;\n  }\n  .mx-xl-n3 {\n    margin-right: -1rem !important;\n    margin-left: -1rem !important;\n  }\n  .mx-xl-n4 {\n    margin-right: -1.5rem !important;\n    margin-left: -1.5rem !important;\n  }\n  .mx-xl-n5 {\n    margin-right: -3rem !important;\n    margin-left: -3rem !important;\n  }\n  .my-xl-n1 {\n    margin-top: -0.25rem !important;\n    margin-bottom: -0.25rem !important;\n  }\n  .my-xl-n2 {\n    margin-top: -0.5rem !important;\n    margin-bottom: -0.5rem !important;\n  }\n  .my-xl-n3 {\n    margin-top: -1rem !important;\n    margin-bottom: -1rem !important;\n  }\n  .my-xl-n4 {\n    margin-top: -1.5rem !important;\n    margin-bottom: -1.5rem !important;\n  }\n  .my-xl-n5 {\n    margin-top: -3rem !important;\n    margin-bottom: -3rem !important;\n  }\n  .mt-xl-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mt-xl-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mt-xl-n3 {\n    margin-top: -1rem !important;\n  }\n  .mt-xl-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mt-xl-n5 {\n    margin-top: -3rem !important;\n  }\n  .mb-xl-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .mb-xl-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .mb-xl-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .mb-xl-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .mb-xl-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n}\n@media (min-width: 1400px) {\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .border-xxl-solid {\n    border-style: solid !important;\n  }\n  .border-xxl-dashed {\n    border-style: dashed !important;\n  }\n  .border-xxl-none {\n    border-style: none !important;\n  }\n  .flex-xxl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .m-xxl-n1 {\n    margin: -0.25rem !important;\n  }\n  .m-xxl-n2 {\n    margin: -0.5rem !important;\n  }\n  .m-xxl-n3 {\n    margin: -1rem !important;\n  }\n  .m-xxl-n4 {\n    margin: -1.5rem !important;\n  }\n  .m-xxl-n5 {\n    margin: -3rem !important;\n  }\n  .mx-xxl-n1 {\n    margin-right: -0.25rem !important;\n    margin-left: -0.25rem !important;\n  }\n  .mx-xxl-n2 {\n    margin-right: -0.5rem !important;\n    margin-left: -0.5rem !important;\n  }\n  .mx-xxl-n3 {\n    margin-right: -1rem !important;\n    margin-left: -1rem !important;\n  }\n  .mx-xxl-n4 {\n    margin-right: -1.5rem !important;\n    margin-left: -1.5rem !important;\n  }\n  .mx-xxl-n5 {\n    margin-right: -3rem !important;\n    margin-left: -3rem !important;\n  }\n  .my-xxl-n1 {\n    margin-top: -0.25rem !important;\n    margin-bottom: -0.25rem !important;\n  }\n  .my-xxl-n2 {\n    margin-top: -0.5rem !important;\n    margin-bottom: -0.5rem !important;\n  }\n  .my-xxl-n3 {\n    margin-top: -1rem !important;\n    margin-bottom: -1rem !important;\n  }\n  .my-xxl-n4 {\n    margin-top: -1.5rem !important;\n    margin-bottom: -1.5rem !important;\n  }\n  .my-xxl-n5 {\n    margin-top: -3rem !important;\n    margin-bottom: -3rem !important;\n  }\n  .mt-xxl-n1 {\n    margin-top: -0.25rem !important;\n  }\n  .mt-xxl-n2 {\n    margin-top: -0.5rem !important;\n  }\n  .mt-xxl-n3 {\n    margin-top: -1rem !important;\n  }\n  .mt-xxl-n4 {\n    margin-top: -1.5rem !important;\n  }\n  .mt-xxl-n5 {\n    margin-top: -3rem !important;\n  }\n  .mb-xxl-n1 {\n    margin-bottom: -0.25rem !important;\n  }\n  .mb-xxl-n2 {\n    margin-bottom: -0.5rem !important;\n  }\n  .mb-xxl-n3 {\n    margin-bottom: -1rem !important;\n  }\n  .mb-xxl-n4 {\n    margin-bottom: -1.5rem !important;\n  }\n  .mb-xxl-n5 {\n    margin-bottom: -3rem !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n}\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.375rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.625rem !important;\n  }\n  .fs-4 {\n    font-size: 1.375rem !important;\n  }\n}\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n.zindex-1 {\n  z-index: 1 !important;\n}\n\n.zindex-2 {\n  z-index: 2 !important;\n}\n\n.zindex-3 {\n  z-index: 3 !important;\n}\n\n.zindex-4 {\n  z-index: 4 !important;\n}\n\n.zindex-5 {\n  z-index: 5 !important;\n}\n\n.border-solid {\n  border-style: solid !important;\n}\n\n.border-dashed {\n  border-style: dashed !important;\n}\n\n.border-none {\n  border-style: none !important;\n}\n\n.border-label-primary {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-secondary {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-success {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-info {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-warning {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-danger {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-light {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-dark {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-gray {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-gray-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-label-white {\n  --bs-border-opacity: 0.4;\n  border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.translate-middle {\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  transform: translateY(-50%) !important;\n}\n\n.border-end {\n  border-right: 1px solid #d9dee3 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #d9dee3 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.375rem !important;\n  border-bottom-right-radius: 0.375rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.375rem !important;\n  border-top-left-radius: 0.375rem !important;\n}\n\n.rounded-start-top {\n  border-top-left-radius: 0.375rem !important;\n}\n\n.rounded-start-bottom {\n  border-bottom-left-radius: 0.375rem !important;\n}\n\n.rounded-end-top {\n  border-top-right-radius: 0.375rem !important;\n}\n\n.rounded-end-bottom {\n  border-bottom-right-radius: 0.375rem !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.me-n1 {\n  margin-right: -0.25rem !important;\n}\n\n.me-n2 {\n  margin-right: -0.5rem !important;\n}\n\n.me-n3 {\n  margin-right: -1rem !important;\n}\n\n.me-n4 {\n  margin-right: -1.5rem !important;\n}\n\n.me-n5 {\n  margin-right: -3rem !important;\n}\n\n.ms-n1 {\n  margin-left: -0.25rem !important;\n}\n\n.ms-n2 {\n  margin-left: -0.5rem !important;\n}\n\n.ms-n3 {\n  margin-left: -1rem !important;\n}\n\n.ms-n4 {\n  margin-left: -1.5rem !important;\n}\n\n.ms-n5 {\n  margin-left: -3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.rotate-0 {\n  transform: rotate(0deg) !important;\n}\n\n.rotate-90 {\n  transform: rotate(90deg) !important;\n}\n\n.rotate-180 {\n  transform: rotate(180deg) !important;\n}\n\n.rotate-270 {\n  transform: rotate(270deg) !important;\n}\n\n.rotate-n90 {\n  transform: rotate(-90deg) !important;\n}\n\n.rotate-n180 {\n  transform: rotate(-180deg) !important;\n}\n\n.rotate-n270 {\n  transform: rotate(-270deg) !important;\n}\n\n.scaleX-n1 {\n  transform: scaleX(-1) !important;\n}\n\n.scaleY-n1 {\n  transform: scaleY(-1) !important;\n}\n\n@media (min-width: 576px) {\n  .border-sm-solid {\n    border-style: solid !important;\n  }\n  .border-sm-dashed {\n    border-style: dashed !important;\n  }\n  .border-sm-none {\n    border-style: none !important;\n  }\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .me-sm-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .me-sm-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .me-sm-n3 {\n    margin-right: -1rem !important;\n  }\n  .me-sm-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .me-sm-n5 {\n    margin-right: -3rem !important;\n  }\n  .ms-sm-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .ms-sm-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .ms-sm-n3 {\n    margin-left: -1rem !important;\n  }\n  .ms-sm-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .ms-sm-n5 {\n    margin-left: -3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n}\n@media (min-width: 768px) {\n  .border-md-solid {\n    border-style: solid !important;\n  }\n  .border-md-dashed {\n    border-style: dashed !important;\n  }\n  .border-md-none {\n    border-style: none !important;\n  }\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .me-md-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .me-md-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .me-md-n3 {\n    margin-right: -1rem !important;\n  }\n  .me-md-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .me-md-n5 {\n    margin-right: -3rem !important;\n  }\n  .ms-md-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .ms-md-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .ms-md-n3 {\n    margin-left: -1rem !important;\n  }\n  .ms-md-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .ms-md-n5 {\n    margin-left: -3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n}\n@media (min-width: 992px) {\n  .border-lg-solid {\n    border-style: solid !important;\n  }\n  .border-lg-dashed {\n    border-style: dashed !important;\n  }\n  .border-lg-none {\n    border-style: none !important;\n  }\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .me-lg-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .me-lg-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .me-lg-n3 {\n    margin-right: -1rem !important;\n  }\n  .me-lg-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .me-lg-n5 {\n    margin-right: -3rem !important;\n  }\n  .ms-lg-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .ms-lg-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .ms-lg-n3 {\n    margin-left: -1rem !important;\n  }\n  .ms-lg-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .ms-lg-n5 {\n    margin-left: -3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n}\n@media (min-width: 1200px) {\n  .border-xl-solid {\n    border-style: solid !important;\n  }\n  .border-xl-dashed {\n    border-style: dashed !important;\n  }\n  .border-xl-none {\n    border-style: none !important;\n  }\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .me-xl-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .me-xl-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .me-xl-n3 {\n    margin-right: -1rem !important;\n  }\n  .me-xl-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .me-xl-n5 {\n    margin-right: -3rem !important;\n  }\n  .ms-xl-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .ms-xl-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .ms-xl-n3 {\n    margin-left: -1rem !important;\n  }\n  .ms-xl-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .ms-xl-n5 {\n    margin-left: -3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n}\n@media (min-width: 1400px) {\n  .border-xxl-solid {\n    border-style: solid !important;\n  }\n  .border-xxl-dashed {\n    border-style: dashed !important;\n  }\n  .border-xxl-none {\n    border-style: none !important;\n  }\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .me-xxl-n1 {\n    margin-right: -0.25rem !important;\n  }\n  .me-xxl-n2 {\n    margin-right: -0.5rem !important;\n  }\n  .me-xxl-n3 {\n    margin-right: -1rem !important;\n  }\n  .me-xxl-n4 {\n    margin-right: -1.5rem !important;\n  }\n  .me-xxl-n5 {\n    margin-right: -3rem !important;\n  }\n  .ms-xxl-n1 {\n    margin-left: -0.25rem !important;\n  }\n  .ms-xxl-n2 {\n    margin-left: -0.5rem !important;\n  }\n  .ms-xxl-n3 {\n    margin-left: -1rem !important;\n  }\n  .ms-xxl-n4 {\n    margin-left: -1.5rem !important;\n  }\n  .ms-xxl-n5 {\n    margin-left: -3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n}\nbody {\n  text-rendering: optimizeLegibility;\n  font-smoothing: antialiased;\n  -moz-font-feature-settings: \"liga\" on;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n@media (min-width: 768px) {\n  button.list-group-item {\n    outline: none;\n  }\n}\n.app-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background-color: rgba(67, 89, 113, 0.5);\n  visibility: hidden;\n  z-index: 3;\n  transition: all 0.25s ease;\n}\n.app-overlay.show {\n  visibility: visible;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  padding-right: 1rem;\n  padding-left: 1rem;\n}\n@media (min-width: 992px) {\n  .container,\n  .container-fluid,\n  .container-sm,\n  .container-md,\n  .container-lg,\n  .container-xl,\n  .container-xxl {\n    padding-right: 1.625rem;\n    padding-left: 1.625rem;\n  }\n}\n\n.img-thumbnail {\n  position: relative;\n  display: block;\n}\n.img-thumbnail img {\n  z-index: 1;\n}\n\n.img-thumbnail-content {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  z-index: 3;\n  display: block;\n  opacity: 0;\n  transition: all 0.2s ease-in-out;\n  transform: translate(-50%, -50%);\n}\n.img-thumbnail:hover .img-thumbnail-content, .img-thumbnail:focus .img-thumbnail-content {\n  opacity: 1;\n}\n\n.img-thumbnail-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: block;\n  transition: all 0.2s ease-in-out;\n}\n.img-thumbnail:not(:hover):not(:focus) .img-thumbnail-overlay {\n  opacity: 0 !important;\n}\n\n.img-thumbnail-shadow {\n  transition: box-shadow 0.2s;\n}\n.img-thumbnail-shadow:hover, .img-thumbnail-shadow:focus {\n  box-shadow: 0 5px 20px rgba(67, 89, 113, 0.4);\n}\n\n.img-thumbnail-zoom-in {\n  overflow: hidden;\n}\n.img-thumbnail-zoom-in img {\n  transition: all 0.3s ease-in-out;\n  transform: translate3d(0);\n}\n.img-thumbnail-zoom-in .img-thumbnail-content {\n  transform: translate(-50%, -50%) scale(0.6);\n}\n.img-thumbnail-zoom-in:hover img, .img-thumbnail-zoom-in:focus img {\n  transform: scale(1.1);\n}\n.img-thumbnail-zoom-in:hover .img-thumbnail-content, .img-thumbnail-zoom-in:focus .img-thumbnail-content {\n  transform: translate(-50%, -50%) scale(1);\n}\n\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n  .card,\n  .card-body,\n  .media,\n  .flex-column,\n  .tab-content {\n    min-height: 1px;\n  }\n  img {\n    min-height: 1px;\n    height: auto;\n  }\n}\n.buy-now .btn-buy-now {\n  position: fixed;\n  bottom: 3rem;\n  right: 1.625rem;\n  z-index: 1080;\n  box-shadow: 0 1px 20px 1px #ff3e1d;\n}\n.buy-now .btn-buy-now:hover {\n  box-shadow: none;\n}\n\n.ui-square,\n.ui-rect,\n.ui-rect-30,\n.ui-rect-60,\n.ui-rect-67,\n.ui-rect-75 {\n  position: relative !important;\n  display: block !important;\n  padding-top: 100% !important;\n  width: 100% !important;\n}\n\n.ui-square {\n  padding-top: 100% !important;\n}\n\n.ui-rect {\n  padding-top: 50% !important;\n}\n\n.ui-rect-30 {\n  padding-top: 30% !important;\n}\n\n.ui-rect-60 {\n  padding-top: 60% !important;\n}\n\n.ui-rect-67 {\n  padding-top: 67% !important;\n}\n\n.ui-rect-75 {\n  padding-top: 75% !important;\n}\n\n.ui-square-content,\n.ui-rect-content {\n  position: absolute !important;\n  top: 0 !important;\n  right: 0 !important;\n  bottom: 0 !important;\n  left: 0 !important;\n}\n\n.text-strike-through {\n  text-decoration: line-through;\n}\n\n.line-clamp-1 {\n  overflow: hidden;\n  display: -webkit-box;\n  -webkit-line-clamp: 1;\n  -webkit-box-orient: vertical;\n}\n\n.line-clamp-2 {\n  overflow: hidden;\n  display: -webkit-box;\n  -webkit-line-clamp: 2;\n  -webkit-box-orient: vertical;\n}\n\n.line-clamp-3 {\n  overflow: hidden;\n  display: -webkit-box;\n  -webkit-line-clamp: 3;\n  -webkit-box-orient: vertical;\n}\n\n.ui-stars,\n.ui-star,\n.ui-star > * {\n  height: 1.1em;\n  -webkit-user-drag: none;\n  -khtml-user-drag: none;\n  -moz-user-drag: none;\n  -o-user-drag: none;\n  user-drag: none;\n}\n\n.ui-stars {\n  display: inline-block;\n  vertical-align: middle;\n  white-space: nowrap;\n}\n\n.ui-star {\n  position: relative;\n  display: block;\n  float: left;\n  width: 1.1em;\n  height: 1.1em;\n  text-decoration: none !important;\n  font-size: 1.1em;\n  line-height: 1;\n  user-select: none;\n}\n.ui-star + .ui-star {\n  margin-left: -0.1em;\n}\n.ui-star > *,\n.ui-star > *::before,\n.ui-star > *::after {\n  position: absolute;\n  left: 0.55em;\n  height: 100%;\n  font-size: 1em;\n  line-height: 1;\n  transform: translateX(-50%);\n}\n.ui-star > * {\n  top: 0;\n  width: 100%;\n  text-align: center;\n}\n.ui-star > *:first-child {\n  z-index: 10;\n  display: none;\n  overflow: hidden;\n  color: #ffab00;\n}\n.ui-star > *:last-child {\n  z-index: 5;\n  display: block;\n}\n.ui-star.half-filled > *:first-child {\n  width: 50%;\n  transform: translateX(-100%);\n}\n.ui-star.filled > *:first-child, .ui-star.half-filled > *:first-child {\n  display: block;\n}\n.ui-star.filled > *:last-child {\n  display: none;\n}\n\n.ui-stars.hoverable .ui-star > *:first-child {\n  display: block;\n}\n\n.ui-stars.hoverable .ui-star:first-child:not(.filled) > *:first-child,\n.ui-stars.hoverable .ui-star:first-child:not(.filled) ~ .ui-star > *:first-child,\n.ui-stars.hoverable .ui-star:first-child:not(.half-filled) > *:first-child,\n.ui-stars.hoverable .ui-star:first-child:not(.half-filled) ~ .ui-star > *:first-child {\n  display: none;\n}\n\n.ui-stars.hoverable .ui-star.filled > *:first-child,\n.ui-stars.hoverable .ui-star.half-filled > *:first-child {\n  display: block !important;\n}\n\n.ui-stars.hoverable:hover .ui-star > *:first-child {\n  display: block !important;\n  width: 100% !important;\n  transform: translateX(-50%) !important;\n}\n\n.ui-stars.hoverable .ui-star:hover ~ .ui-star > *:first-child {\n  display: none !important;\n}\n.ui-stars.hoverable .ui-star:hover ~ .ui-star > *:last-child {\n  display: block !important;\n}\n\n.ui-bg-cover {\n  background-color: rgba(0, 0, 0, 0);\n  background-position: center center;\n  background-size: cover;\n}\n\n.ui-bg-overlay-container,\n.ui-bg-video-container {\n  position: relative;\n}\n.ui-bg-overlay-container > *,\n.ui-bg-video-container > * {\n  position: relative;\n}\n\n.ui-bg-overlay-container .ui-bg-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  display: block;\n}\n\n.light-style .ui-bordered {\n  border: 1px solid #d9dee3;\n}\n.light-style .ui-star > *:last-child {\n  color: rgba(67, 89, 113, 0.2);\n}\n\n.menu {\n  display: flex;\n}\n.menu .app-brand {\n  width: 100%;\n}\n.menu .ps__thumb-y,\n.menu .ps__rail-y {\n  width: 0.125rem !important;\n}\n.menu .ps__rail-y {\n  right: 0.25rem !important;\n  left: auto !important;\n  background: none !important;\n}\n.menu .ps__rail-y:hover,\n.menu .ps__rail-y:focus,\n.menu .ps__rail-y.ps--clicking,\n.menu .ps__rail-y:hover > .ps__thumb-y,\n.menu .ps__rail-y:focus > .ps__thumb-y,\n.menu .ps__rail-y.ps--clicking > .ps__thumb-y {\n  width: 0.375rem !important;\n}\n\n.menu-inner {\n  display: flex;\n  align-items: flex-start;\n  justify-content: flex-start;\n  margin: 0;\n  padding: 0;\n  height: 100%;\n}\n\n.menu-inner-shadow {\n  display: none;\n  position: absolute;\n  top: 4.225rem;\n  height: 3rem;\n  width: 100%;\n  pointer-events: none;\n  z-index: 2;\n}\nhtml:not(.layout-menu-fixed) .menu-inner-shadow {\n  display: none !important;\n}\n\n.menu-item {\n  align-items: flex-start;\n  justify-content: flex-start;\n}\n.menu-item.menu-item-animating {\n  transition: height 0.3s ease-in-out;\n}\n\n.menu-item,\n.menu-header,\n.menu-divider,\n.menu-block {\n  flex: 0 0 auto;\n  flex-direction: column;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n.menu-header {\n  opacity: 1;\n  transition: opacity 0.3s ease-in-out;\n}\n\n.menu-icon {\n  flex-grow: 0;\n  flex-shrink: 0;\n  margin-right: 0.5rem;\n  font-size: 1.25rem;\n}\n.menu:not(.menu-no-animation) .menu-icon {\n  transition: margin-right 0.3s ease;\n}\n\n.menu-link {\n  position: relative;\n  display: flex;\n  align-items: center;\n  flex: 0 1 auto;\n  margin: 0;\n}\n.menu-item.disabled .menu-link {\n  cursor: not-allowed !important;\n}\n.menu:not(.menu-no-animation) .menu-link {\n  transition-duration: 0.3s;\n  transition-property: color, background-color, left;\n}\n.menu-link > :not(.menu-icon) {\n  flex: 0 1 auto;\n  opacity: 1;\n}\n.menu:not(.menu-no-animation) .menu-link > :not(.menu-icon) {\n  transition: opacity 0.3s ease-in-out;\n}\n\n.menu-sub {\n  display: none;\n  flex-direction: column;\n  margin: 0;\n  padding: 0;\n}\n.menu:not(.menu-no-animation) .menu-sub {\n  transition: background-color 0.3s;\n}\n.menu-item.open > .menu-sub {\n  display: flex;\n}\n\n.menu-toggle::after {\n  content: \"\";\n  position: absolute;\n  top: 50%;\n  display: block;\n  width: 0.42em;\n  height: 0.42em;\n  border: 1px solid;\n  border-bottom: 0;\n  border-left: 0;\n  transform: translateY(-50%) rotate(45deg);\n}\n.menu-item.open:not(.menu-item-closing) > .menu-toggle::after {\n  transform: translateY(-50%) rotate(135deg);\n}\n.menu:not(.menu-no-animation) .menu-toggle::after {\n  transition-duration: 0.3s;\n  transition-property: -webkit-transform, transform;\n}\n\n.menu-divider {\n  width: 100%;\n  border: 0;\n  border-top: 1px solid;\n}\n\n.menu-vertical {\n  flex-direction: column;\n}\n.menu-vertical:not(.menu-no-animation) {\n  transition: width 0.3s;\n}\n.menu-vertical,\n.menu-vertical .menu-block,\n.menu-vertical .menu-inner > .menu-item,\n.menu-vertical .menu-inner > .menu-header {\n  width: 16.25rem;\n}\n.menu-vertical .menu-inner {\n  flex-direction: column;\n  flex: 1 1 auto;\n}\n.menu-vertical .menu-inner > .menu-item {\n  margin: 0.0625rem 0;\n}\n.menu-vertical .menu-inner > .menu-item .menu-link {\n  margin: 0rem 1rem;\n}\n.menu-vertical .menu-item .menu-link,\n.menu-vertical .menu-block {\n  padding: 0.625rem 1rem;\n}\n.menu-vertical .menu-header {\n  margin: 1rem 0 0.5rem 0;\n  padding: 0.625rem 2rem 0.625rem 2rem;\n}\n.menu-vertical .menu-item .menu-link {\n  font-size: 0.9375rem;\n}\n.menu-vertical .menu-item.active:not(.open) > .menu-link {\n  font-weight: 500;\n}\n.menu-vertical .menu-item .menu-toggle {\n  padding-right: calc(1rem + 1.26em);\n}\n.menu-vertical .menu-item .menu-toggle::after {\n  right: 1rem;\n}\n.menu-vertical .menu-divider {\n  margin-top: 0.625rem;\n  margin-bottom: 0.625rem;\n  padding: 0;\n}\n.menu-vertical .menu-sub {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n}\n.menu-vertical .menu-sub .menu-link {\n  padding-top: 0.625rem;\n  padding-bottom: 0.625rem;\n}\n.menu-vertical .menu-icon {\n  width: 1.5rem;\n}\n.menu-vertical .menu-sub .menu-icon {\n  margin-right: 0;\n}\n@media (max-width: 1199.98px) {\n  .menu-vertical .menu-sub .menu-icon {\n    display: none;\n  }\n}\n.menu-vertical .menu-horizontal-wrapper {\n  flex: none;\n}\n.menu-vertical .menu-sub .menu-link {\n  padding-left: 3rem;\n}\n.menu-vertical .menu-sub .menu-sub .menu-link {\n  padding-left: 3.65rem;\n}\n.menu-vertical .menu-sub .menu-sub .menu-sub .menu-link {\n  padding-left: 4.3rem;\n}\n.menu-vertical .menu-sub .menu-sub .menu-sub .menu-sub .menu-link {\n  padding-left: 4.95rem;\n}\n.menu-vertical .menu-sub .menu-sub .menu-sub .menu-sub .menu-sub .menu-link {\n  padding-left: 5.6rem;\n}\n\n.menu-collapsed:not(:hover) {\n  width: 5.25rem;\n}\n.menu-collapsed:not(:hover) .menu-inner > .menu-item {\n  width: 5.25rem;\n}\n.menu-collapsed:not(:hover) .menu-inner > .menu-item > .menu-link {\n  padding-left: 1rem;\n}\n.menu-collapsed:not(:hover) .menu-inner > .menu-header,\n.menu-collapsed:not(:hover) .menu-block {\n  position: relative;\n  margin-left: 1rem;\n  padding-right: 1.5rem;\n  padding-left: 0.5rem;\n  width: 16.25rem;\n  text-indent: -9999px;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.menu-collapsed:not(:hover) .menu-inner > .menu-header .menu-header-text,\n.menu-collapsed:not(:hover) .menu-block .menu-header-text {\n  overflow: hidden;\n  opacity: 0;\n}\n.menu-collapsed:not(:hover) .menu-inner > .menu-header::before,\n.menu-collapsed:not(:hover) .menu-block::before {\n  content: \"\";\n  position: absolute;\n  left: 1.125rem;\n  display: block;\n  width: 1rem;\n  text-align: center;\n  top: 1.1875rem;\n}\n.menu-collapsed:not(:hover) .menu-block::before {\n  bottom: 0.75rem;\n}\n.menu-collapsed:not(:hover) .menu-inner > .menu-item div:not(.menu-block) {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  opacity: 0;\n}\n.menu-collapsed:not(:hover) .menu-inner > .menu-item > .menu-sub,\n.menu-collapsed:not(:hover) .menu-inner > .menu-item.open > .menu-sub {\n  display: none;\n}\n.menu-collapsed:not(:hover) .menu-inner > .menu-item > .menu-toggle::after {\n  display: none;\n}\n.menu-collapsed:not(:hover) .menu-inner > .menu-item > .menu-link .menu-icon {\n  margin-left: -2rem;\n  width: 5.25rem;\n  text-align: center;\n  margin-right: 0;\n}\n\n.layout-container {\n  min-height: 100vh;\n}\n\n.layout-wrapper,\n.layout-container {\n  width: 100%;\n  display: flex;\n  flex: 1 1 auto;\n  align-items: stretch;\n}\n\n.layout-page,\n.content-wrapper,\n.content-wrapper > *,\n.layout-menu {\n  min-height: 1px;\n}\n\n.layout-navbar,\n.content-footer {\n  flex: 0 0 auto;\n}\n\n.layout-page {\n  display: flex;\n  flex: 1 1 auto;\n  align-items: stretch;\n  padding: 0;\n}\n.layout-without-menu .layout-page {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.content-wrapper {\n  display: flex;\n  align-items: stretch;\n  flex: 1 1 auto;\n  flex-direction: column;\n  justify-content: space-between;\n}\n\n.content-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1;\n  width: 100vw;\n  height: 100vh;\n  background-color: #435971;\n}\n.content-backdrop.fade {\n  opacity: 0;\n}\n.content-backdrop.show {\n  opacity: 0.5;\n}\n.layout-menu-fixed .content-backdrop {\n  z-index: 10;\n}\n.content-backdrop.fade {\n  z-index: -1;\n}\n\n.layout-navbar {\n  position: relative;\n  padding-top: 0.25rem;\n  padding-bottom: 0.2rem;\n  height: 3.875rem;\n  flex-wrap: nowrap;\n  color: #697a8d;\n  z-index: 2;\n}\n.layout-navbar .navbar {\n  transform: translate3d(0, 0, 0);\n}\n.layout-navbar .navbar-nav-right {\n  flex-basis: 100%;\n}\n.layout-navbar .navbar-search-wrapper .search-input,\n.layout-navbar .navbar-search-wrapper .input-group-text {\n  background-color: transparent;\n}\n.layout-navbar.navbar-detached {\n  width: calc(100% - (1.625rem * 2));\n  margin: 0.75rem auto 0;\n  border-radius: 0.375rem;\n  padding: 0 1.5rem;\n}\n.layout-navbar.navbar-detached.container-xxl {\n  max-width: calc(1440px - calc(1.625rem * 2));\n}\n.layout-navbar-fixed .layout-navbar.navbar-detached {\n  width: calc(100% - calc(1.625rem * 2) - 16.25rem);\n}\n@media (max-width: 1199.98px) {\n  .layout-navbar-fixed .layout-navbar.navbar-detached {\n    width: calc(100% - (1.625rem * 2)) !important;\n  }\n}\n@media (max-width: 991.98px) {\n  .layout-navbar-fixed .layout-navbar.navbar-detached {\n    width: calc(100% - (1rem * 2)) !important;\n  }\n}\n.layout-navbar-fixed.layout-menu-collapsed .layout-navbar.navbar-detached {\n  width: calc(100% - calc(1.625rem * 2) - 5.25rem);\n}\n@media (max-width: 1199.98px) {\n  .layout-navbar.navbar-detached {\n    width: calc(100vw - (100vw - 100%) - (1.625rem * 2)) !important;\n  }\n}\n@media (max-width: 991.98px) {\n  .layout-navbar.navbar-detached {\n    width: calc(100vw - (100vw - 100%) - (1rem * 2)) !important;\n  }\n}\n.layout-menu-collapsed .layout-navbar.navbar-detached, .layout-without-menu .layout-navbar.navbar-detached {\n  width: calc(100% - (1.625rem * 2));\n}\n.layout-navbar .search-input-wrapper .search-toggler {\n  position: absolute;\n  top: 1.25rem;\n  right: 1rem;\n  z-index: 1;\n}\n.layout-navbar .search-input-wrapper .search-input {\n  height: 100%;\n  box-shadow: none;\n}\n.layout-navbar[class*=bg-]:not(.bg-navbar-theme) .nav-item .input-group-text,\n.layout-navbar[class*=bg-]:not(.bg-navbar-theme) .nav-item .dropdown-toggle {\n  color: #fff;\n}\n@media (max-width: 1199.98px) {\n  .layout-navbar .navbar-nav .nav-item.dropdown .dropdown-menu {\n    position: absolute;\n  }\n  .layout-navbar .navbar-nav .nav-item.dropdown .dropdown-menu .last-login {\n    white-space: nowrap;\n  }\n}\n@media (max-width: 767.98px) {\n  .layout-navbar .navbar-nav .nav-item.dropdown {\n    position: static;\n    float: left;\n  }\n  .layout-navbar .navbar-nav .nav-item.dropdown .badge-notifications {\n    top: auto;\n  }\n  .layout-navbar .navbar-nav .nav-item.dropdown .dropdown-menu {\n    position: absolute;\n    left: 0.9rem;\n    min-width: auto;\n    width: 92%;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .layout-navbar {\n    z-index: 1080;\n  }\n}\n.layout-menu {\n  position: relative;\n  flex: 1 0 auto;\n}\n.layout-menu a:focus-visible {\n  outline: none;\n}\n.layout-menu .menu {\n  transform: translate3d(0, 0, 0);\n}\n.layout-menu .menu-vertical {\n  height: 100%;\n}\n\n.layout-content-navbar .layout-page {\n  flex-basis: 100%;\n  flex-direction: column;\n  width: 0;\n  min-width: 0;\n  max-width: 100%;\n}\n.layout-content-navbar .content-wrapper {\n  width: 100%;\n}\n\n@media (min-width: 1200px) {\n  .layout-menu-fixed .layout-menu,\n  .layout-menu-fixed-offcanvas .layout-menu {\n    position: fixed;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .layout-menu-fixed:not(.layout-menu-collapsed) .layout-page,\n  .layout-menu-fixed-offcanvas:not(.layout-menu-collapsed) .layout-page {\n    padding-left: 16.25rem;\n  }\n}\nhtml:not(.layout-navbar-fixed):not(.layout-menu-fixed):not(.layout-menu-fixed-offcanvas) .layout-page,\nhtml:not(.layout-navbar-fixed) .layout-content-navbar .layout-page {\n  padding-top: 0 !important;\n}\n\nhtml:not(.layout-footer-fixed) .content-wrapper {\n  padding-bottom: 0 !important;\n}\n\n@media (max-width: 1199.98px) {\n  .layout-menu-fixed .layout-wrapper.layout-navbar-full .layout-menu,\n  .layout-menu-fixed-offcanvas .layout-wrapper.layout-navbar-full .layout-menu {\n    top: 0 !important;\n  }\n  html:not(.layout-navbar-fixed) .layout-navbar-full .layout-page {\n    padding-top: 0 !important;\n  }\n}\n.layout-navbar-fixed .layout-navbar {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n}\n\n@media (min-width: 1200px) {\n  .layout-menu-fixed .layout-navbar-full .layout-navbar,\n  .layout-menu-fixed-offcanvas .layout-navbar-full .layout-navbar {\n    position: fixed;\n    top: 0;\n    right: 0;\n    left: 0;\n  }\n  .layout-navbar-fixed:not(.layout-menu-collapsed) .layout-content-navbar:not(.layout-without-menu) .layout-navbar,\n  .layout-menu-fixed.layout-navbar-fixed:not(.layout-menu-collapsed) .layout-content-navbar:not(.layout-without-menu) .layout-navbar,\n  .layout-menu-fixed-offcanvas.layout-navbar-fixed:not(.layout-menu-collapsed) .layout-content-navbar:not(.layout-without-menu) .layout-navbar {\n    left: 16.25rem;\n  }\n}\n.layout-footer-fixed .content-footer {\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n\n@media (min-width: 1200px) {\n  .layout-footer-fixed:not(.layout-menu-collapsed) .layout-wrapper:not(.layout-without-menu) .content-footer {\n    left: 16.25rem;\n  }\n}\n@media (max-width: 1199.98px) {\n  .layout-menu {\n    position: fixed !important;\n    top: 0 !important;\n    height: 100% !important;\n    left: 0 !important;\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n    transform: translate3d(-100%, 0, 0);\n    will-change: transform, -webkit-transform;\n  }\n  .layout-menu-expanded .layout-menu {\n    transform: translate3d(0, 0, 0) !important;\n  }\n  .layout-menu-expanded body {\n    overflow: hidden;\n  }\n  .layout-overlay {\n    position: fixed;\n    top: 0;\n    right: 0;\n    height: 100% !important;\n    left: 0;\n    display: none;\n    background: #435971;\n    opacity: 0.5;\n    cursor: pointer;\n  }\n  .layout-menu-expanded .layout-overlay {\n    display: block;\n  }\n  .layout-menu-100vh .layout-menu,\n  .layout-menu-100vh .layout-overlay {\n    height: 100vh !important;\n  }\n}\n.layout-navbar-fixed body:not(.modal-open) .layout-navbar-full .layout-navbar,\n.layout-menu-fixed body:not(.modal-open) .layout-navbar-full .layout-navbar,\n.layout-menu-fixed-offcanvas body:not(.modal-open) .layout-navbar-full .layout-navbar {\n  z-index: 1080;\n}\n.layout-navbar-fixed body:not(.modal-open) .layout-content-navbar .layout-navbar,\n.layout-menu-fixed body:not(.modal-open) .layout-content-navbar .layout-navbar,\n.layout-menu-fixed-offcanvas body:not(.modal-open) .layout-content-navbar .layout-navbar {\n  z-index: 1075;\n}\n\n.layout-footer-fixed .content-footer {\n  z-index: 1030;\n}\n\n@media (max-width: 1199.98px) {\n  .layout-menu {\n    z-index: 1100;\n  }\n  .layout-overlay {\n    z-index: 1099;\n  }\n}\n@media (min-width: 1200px) {\n  .layout-navbar-full .layout-navbar {\n    z-index: 10;\n  }\n  .layout-navbar-full .layout-menu {\n    z-index: 9;\n  }\n  .layout-content-navbar .layout-navbar {\n    z-index: 9;\n  }\n  .layout-content-navbar .layout-menu {\n    z-index: 10;\n  }\n  .layout-menu-fixed body:not(.modal-open) .layout-navbar-full .layout-menu,\n  .layout-menu-fixed-offcanvas body:not(.modal-open) .layout-navbar-full .layout-menu {\n    z-index: 1075;\n  }\n  .layout-navbar-fixed body:not(.modal-open) .layout-content-navbar .layout-menu,\n  .layout-menu-fixed body:not(.modal-open) .layout-content-navbar .layout-menu,\n  .layout-menu-fixed-offcanvas body:not(.modal-open) .layout-content-navbar .layout-menu {\n    z-index: 1080;\n  }\n}\n.layout-menu-link-no-transition .layout-menu .menu-link,\n.layout-menu-link-no-transition .layout-menu-horizontal .menu-link {\n  transition: none !important;\n  animation: none !important;\n}\n\n.layout-no-transition .layout-menu, .layout-no-transition .layout-menu .menu, .layout-no-transition .layout-menu .menu-item,\n.layout-no-transition .layout-menu-horizontal,\n.layout-no-transition .layout-menu-horizontal .menu,\n.layout-no-transition .layout-menu-horizontal .menu-item {\n  transition: none !important;\n  animation: none !important;\n}\n\n@media (max-width: 1199.98px) {\n  .layout-transitioning .layout-overlay {\n    animation: menuAnimation 0.3s;\n  }\n  .layout-transitioning .layout-menu {\n    transition-duration: 0.3s;\n    transition-property: transform, -webkit-transform;\n  }\n}\n@media (min-width: 1200px) {\n  .layout-menu-collapsed:not(.layout-transitioning):not(.layout-menu-offcanvas):not(.layout-menu-fixed):not(.layout-menu-fixed-offcanvas) .layout-menu {\n    transition-duration: 0.3s;\n    transition-property: margin-left, margin-right, width;\n  }\n  .layout-transitioning.layout-menu-offcanvas .layout-menu {\n    transition-duration: 0.3s;\n    transition-property: margin-left, margin-right, transform, -webkit-transform;\n  }\n  .layout-transitioning.layout-menu-fixed .layout-page, .layout-transitioning.layout-menu-fixed-offcanvas .layout-page {\n    transition-duration: 0.3s;\n    transition-property: padding-left, padding-right;\n  }\n  .layout-transitioning.layout-menu-fixed .layout-menu {\n    transition: width 0.3s;\n  }\n  .layout-transitioning.layout-menu-fixed-offcanvas .layout-menu {\n    transition-duration: 0.3s;\n    transition-property: transform, -webkit-transform;\n  }\n  .layout-transitioning.layout-navbar-fixed .layout-content-navbar .layout-navbar, .layout-transitioning.layout-footer-fixed .content-footer {\n    transition-duration: 0.3s;\n    transition-property: left, right;\n  }\n  .layout-transitioning:not(.layout-menu-offcanvas):not(.layout-menu-fixed):not(.layout-menu-fixed-offcanvas) .layout-menu {\n    transition-duration: 0.3s;\n    transition-property: margin-left, margin-right, width;\n  }\n}\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n  .menu,\n  .layout-menu,\n  .layout-page,\n  .layout-navbar,\n  .content-footer {\n    transition: none !important;\n    transition-duration: 0s !important;\n  }\n  .layout-overlay {\n    animation: none !important;\n  }\n}\n@-webkit-keyframes menuAnimation {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 0.5;\n  }\n}\n@-moz-keyframes menuAnimation {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 0.5;\n  }\n}\n@keyframes menuAnimation {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 0.5;\n  }\n}\n.app-brand {\n  display: flex;\n  flex-grow: 0;\n  flex-shrink: 0;\n  overflow: hidden;\n  line-height: 1;\n  min-height: 1px;\n  align-items: center;\n}\n\n.app-brand-link {\n  display: flex;\n  align-items: center;\n}\n\n.app-brand-logo {\n  display: block;\n  flex-grow: 0;\n  flex-shrink: 0;\n  overflow: hidden;\n  min-height: 1px;\n}\n.app-brand-logo img,\n.app-brand-logo svg {\n  display: block;\n}\n\n.app-brand-text {\n  flex-shrink: 0;\n  opacity: 1;\n  transition: opacity 0.15s ease-in-out;\n}\n\n.app-brand-img-collapsed {\n  display: none;\n}\n\n.menu-vertical .app-brand {\n  padding-right: 2rem;\n  padding-left: 2rem;\n}\n\n.menu-horizontal .app-brand,\n.menu-horizontal .app-brand + .menu-divider {\n  display: none !important;\n}\n\n:not(.layout-menu) > .menu-vertical.menu-collapsed:not(.layout-menu):not(:hover) .app-brand {\n  width: 5.25rem;\n}\n:not(.layout-menu) > .menu-vertical.menu-collapsed:not(.layout-menu):not(:hover) .app-brand-logo,\n:not(.layout-menu) > .menu-vertical.menu-collapsed:not(.layout-menu):not(:hover) .app-brand-link,\n:not(.layout-menu) > .menu-vertical.menu-collapsed:not(.layout-menu):not(:hover) .app-brand-text {\n  margin-right: auto;\n  margin-left: auto;\n}\n:not(.layout-menu) > .menu-vertical.menu-collapsed:not(.layout-menu):not(:hover) .app-brand-logo ~ .app-brand-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  opacity: 0;\n}\n:not(.layout-menu) > .menu-vertical.menu-collapsed:not(.layout-menu):not(:hover) .app-brand .layout-menu-toggle {\n  opacity: 0;\n  left: calc(5.25rem - 1.5rem);\n}\n:not(.layout-menu) > .menu-vertical.menu-collapsed:not(.layout-menu):not(:hover) .app-brand-img {\n  display: none;\n}\n:not(.layout-menu) > .menu-vertical.menu-collapsed:not(.layout-menu):not(:hover) .app-brand-img-collapsed {\n  display: block;\n}\n\n@media (min-width: 1200px) {\n  .layout-menu-collapsed:not(.layout-menu-hover):not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) .layout-menu .app-brand {\n    width: 5.25rem;\n  }\n  .layout-menu-collapsed:not(.layout-menu-hover):not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) .layout-menu .app-brand-logo,\n  .layout-menu-collapsed:not(.layout-menu-hover):not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) .layout-menu .app-brand-link,\n  .layout-menu-collapsed:not(.layout-menu-hover):not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) .layout-menu .app-brand-text {\n    margin-right: auto;\n    margin-left: auto;\n  }\n  .layout-menu-collapsed:not(.layout-menu-hover):not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) .layout-menu .app-brand-logo ~ .app-brand-text {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    opacity: 0;\n  }\n  .layout-menu-collapsed:not(.layout-menu-hover):not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) .layout-menu .app-brand .layout-menu-toggle {\n    opacity: 0;\n    left: calc(5.25rem - 1.5rem);\n  }\n  .layout-menu-collapsed:not(.layout-menu-hover):not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) .layout-menu .app-brand-img {\n    display: none;\n  }\n  .layout-menu-collapsed:not(.layout-menu-hover):not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) .layout-menu .app-brand-img-collapsed {\n    display: block;\n  }\n}\n.avatar {\n  position: relative;\n  width: 2.375rem;\n  height: 2.375rem;\n  cursor: pointer;\n}\n.avatar img {\n  width: 100%;\n  height: 100%;\n}\n.avatar .avatar-initial {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  text-transform: uppercase;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #fff;\n  background-color: #8592a3;\n  font-weight: 500;\n}\n.avatar.avatar-online:after, .avatar.avatar-offline:after, .avatar.avatar-away:after, .avatar.avatar-busy:after {\n  content: \"\";\n  position: absolute;\n  bottom: 0;\n  right: 3px;\n  width: 8px;\n  height: 8px;\n  border-radius: 100%;\n  box-shadow: 0 0 0 2px #fff;\n}\n.avatar.avatar-online:after {\n  background-color: #71dd37;\n}\n.avatar.avatar-offline:after {\n  background-color: #8592a3;\n}\n.avatar.avatar-away:after {\n  background-color: #ffab00;\n}\n.avatar.avatar-busy:after {\n  background-color: #ff3e1d;\n}\n\n.pull-up {\n  transition: all 0.25s ease;\n}\n.pull-up:hover {\n  transform: translateY(-4px) scale(1.02);\n  box-shadow: 0 0.25rem 1rem rgba(161, 172, 184, 0.45);\n  z-index: 30;\n  border-radius: 50%;\n}\n\n.avatar-xs {\n  width: 1.625rem;\n  height: 1.625rem;\n}\n.avatar-xs .avatar-initial {\n  font-size: 0.625rem;\n}\n.avatar-xs.avatar-online:after, .avatar-xs.avatar-offline:after, .avatar-xs.avatar-away:after, .avatar-xs.avatar-busy:after {\n  width: 0.325rem;\n  height: 0.325rem;\n  right: 1px;\n}\n\n.avatar-sm {\n  width: 2rem;\n  height: 2rem;\n}\n.avatar-sm .avatar-initial {\n  font-size: 0.75rem;\n}\n.avatar-sm.avatar-online:after, .avatar-sm.avatar-offline:after, .avatar-sm.avatar-away:after, .avatar-sm.avatar-busy:after {\n  width: 0.4rem;\n  height: 0.4rem;\n  right: 2px;\n}\n\n.avatar-md {\n  width: 3rem;\n  height: 3rem;\n}\n.avatar-md .avatar-initial {\n  font-size: 1.125rem;\n}\n.avatar-md.avatar-online:after, .avatar-md.avatar-offline:after, .avatar-md.avatar-away:after, .avatar-md.avatar-busy:after {\n  width: 0.6rem;\n  height: 0.6rem;\n  right: 4px;\n}\n\n.avatar-lg {\n  width: 4rem;\n  height: 4rem;\n}\n.avatar-lg .avatar-initial {\n  font-size: 1.5rem;\n}\n.avatar-lg.avatar-online:after, .avatar-lg.avatar-offline:after, .avatar-lg.avatar-away:after, .avatar-lg.avatar-busy:after {\n  width: 0.8rem;\n  height: 0.8rem;\n  right: 5px;\n}\n\n.avatar-xl {\n  width: 4.5rem;\n  height: 4.5rem;\n}\n.avatar-xl .avatar-initial {\n  font-size: 1.875rem;\n}\n.avatar-xl.avatar-online:after, .avatar-xl.avatar-offline:after, .avatar-xl.avatar-away:after, .avatar-xl.avatar-busy:after {\n  width: 0.9rem;\n  height: 0.9rem;\n  right: 6px;\n}\n\n.avatar-group .avatar {\n  transition: all 0.25s ease;\n}\n.avatar-group .avatar img,\n.avatar-group .avatar .avatar-initial {\n  border: 2px solid #fff;\n}\n.avatar-group .avatar .avatar-initial {\n  background-color: #9da8b5;\n}\n.avatar-group .avatar:hover {\n  z-index: 30;\n  transition: all 0.25s ease;\n}\n.avatar-group .avatar {\n  margin-left: -0.8rem;\n}\n.avatar-group .avatar:first-child {\n  margin-left: 0;\n}\n.avatar-group .avatar-xs {\n  margin-left: -0.65rem;\n}\n.avatar-group .avatar-sm {\n  margin-left: -0.75rem;\n}\n.avatar-group .avatar-md {\n  margin-left: -0.9rem;\n}\n.avatar-group .avatar-lg {\n  margin-left: -1.5rem;\n}\n.avatar-group .avatar-xl {\n  margin-left: -1.75rem;\n}\n\n.divider {\n  display: block;\n  text-align: center;\n  margin: 1rem 0;\n  overflow: hidden;\n  white-space: nowrap;\n}\n.divider .divider-text {\n  position: relative;\n  display: inline-block;\n  font-size: 0.8rem;\n  padding: 0rem 1rem;\n}\n.divider .divider-text i {\n  font-size: 1rem;\n}\n.divider .divider-text:before, .divider .divider-text:after {\n  content: \"\";\n  position: absolute;\n  top: 50%;\n  width: 100vw;\n  border-top: 1px solid rgba(67, 89, 113, 0.2);\n}\n.divider .divider-text:before {\n  right: 100%;\n}\n.divider .divider-text:after {\n  left: 100%;\n}\n.divider.text-start .divider-text {\n  padding-left: 0;\n}\n.divider.text-end .divider-text {\n  padding-right: 0;\n}\n.divider.text-start-center .divider-text {\n  left: -25%;\n}\n.divider.text-end-center .divider-text {\n  right: -25%;\n}\n.divider.divider-dotted .divider-text:before, .divider.divider-dotted .divider-text:after {\n  border-style: dotted;\n  border-width: 0 1px 1px;\n  border-color: rgba(67, 89, 113, 0.2);\n}\n.divider.divider-dashed .divider-text:before, .divider.divider-dashed .divider-text:after {\n  border-style: dashed;\n  border-width: 0 1px 1px;\n  border-color: rgba(67, 89, 113, 0.2);\n}\n\n.divider.divider.divider-secondary .divider-text:before, .divider.divider.divider-secondary .divider-text:after {\n  border-color: #8592a3;\n}\n\n.divider.divider.divider-success .divider-text:before, .divider.divider.divider-success .divider-text:after {\n  border-color: #71dd37;\n}\n\n.divider.divider.divider-info .divider-text:before, .divider.divider.divider-info .divider-text:after {\n  border-color: #03c3ec;\n}\n\n.divider.divider.divider-warning .divider-text:before, .divider.divider.divider-warning .divider-text:after {\n  border-color: #ffab00;\n}\n\n.divider.divider.divider-danger .divider-text:before, .divider.divider.divider-danger .divider-text:after {\n  border-color: #ff3e1d;\n}\n\n.divider.divider.divider-dark .divider-text:before, .divider.divider.divider-dark .divider-text:after {\n  border-color: #233446;\n}\n\n.divider.divider.divider-gray .divider-text:before, .divider.divider.divider-gray .divider-text:after {\n  border-color: rgba(67, 89, 113, 0.1);\n}\n\n.footer-link {\n  display: inline-block;\n}\n\n.footer-light {\n  color: rgba(67, 89, 113, 0.5);\n}\n.footer-light .footer-text {\n  color: #697a8d;\n}\n.footer-light .footer-link {\n  color: rgba(67, 89, 113, 0.5);\n}\n.footer-light .footer-link:hover, .footer-light .footer-link:focus {\n  color: #697a8d;\n}\n.footer-light .footer-link.disabled {\n  color: rgba(67, 89, 113, 0.3) !important;\n}\n.footer-light .show > .footer-link,\n.footer-light .active > .footer-link,\n.footer-light .footer-link.show,\n.footer-light .footer-link.active {\n  color: #697a8d;\n}\n.footer-light hr {\n  border-color: rgba(0, 0, 0, 0.06);\n}\n\n.navbar.bg-secondary {\n  background-color: #8592a3 !important;\n  color: #eaecef;\n}\n.navbar.bg-secondary .navbar-brand,\n.navbar.bg-secondary .navbar-brand a {\n  color: #fff;\n}\n.navbar.bg-secondary .navbar-brand:hover, .navbar.bg-secondary .navbar-brand:focus,\n.navbar.bg-secondary .navbar-brand a:hover,\n.navbar.bg-secondary .navbar-brand a:focus {\n  color: #fff;\n}\n.navbar.bg-secondary .navbar-search-wrapper .navbar-search-icon,\n.navbar.bg-secondary .navbar-search-wrapper .search-input {\n  color: #eaecef;\n}\n.navbar.bg-secondary .search-input-wrapper .search-input,\n.navbar.bg-secondary .search-input-wrapper .search-toggler {\n  background-color: #8592a3 !important;\n  color: #eaecef;\n}\n.navbar.bg-secondary .navbar-nav > .nav-link,\n.navbar.bg-secondary .navbar-nav > .nav-item > .nav-link,\n.navbar.bg-secondary .navbar-nav > .nav > .nav-item > .nav-link {\n  color: #eaecef;\n}\n.navbar.bg-secondary .navbar-nav > .nav-link:hover, .navbar.bg-secondary .navbar-nav > .nav-link:focus,\n.navbar.bg-secondary .navbar-nav > .nav-item > .nav-link:hover,\n.navbar.bg-secondary .navbar-nav > .nav-item > .nav-link:focus,\n.navbar.bg-secondary .navbar-nav > .nav > .nav-item > .nav-link:hover,\n.navbar.bg-secondary .navbar-nav > .nav > .nav-item > .nav-link:focus {\n  color: #fff;\n}\n.navbar.bg-secondary .navbar-nav > .nav-link.disabled,\n.navbar.bg-secondary .navbar-nav > .nav-item > .nav-link.disabled,\n.navbar.bg-secondary .navbar-nav > .nav > .nav-item > .nav-link.disabled {\n  color: #c2c8d1 !important;\n}\n.navbar.bg-secondary .navbar-nav .show > .nav-link,\n.navbar.bg-secondary .navbar-nav .active > .nav-link,\n.navbar.bg-secondary .navbar-nav .nav-link.show,\n.navbar.bg-secondary .navbar-nav .nav-link.active {\n  color: #fff;\n}\n.navbar.bg-secondary .navbar-toggler {\n  color: #eaecef;\n  border-color: rgba(255, 255, 255, 0.15);\n}\n.navbar.bg-secondary .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12)-Navbar' transform='translate(-1174.000000, -1290.000000)'%3E%3Cg id='Group' transform='translate(1174.000000, 1288.000000)'%3E%3Cg id='Icon-Color' transform='translate(0.000000, 2.000000)'%3E%3Cuse fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.navbar.bg-secondary .navbar-text {\n  color: #eaecef;\n}\n.navbar.bg-secondary .navbar-text a {\n  color: #fff;\n}\n.navbar.bg-secondary .navbar-text a:hover, .navbar.bg-secondary .navbar-text a:focus {\n  color: #fff;\n}\n.navbar.bg-secondary hr {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n\n.navbar.bg-success {\n  background-color: #71dd37 !important;\n  color: #ecfae4;\n}\n.navbar.bg-success .navbar-brand,\n.navbar.bg-success .navbar-brand a {\n  color: #fff;\n}\n.navbar.bg-success .navbar-brand:hover, .navbar.bg-success .navbar-brand:focus,\n.navbar.bg-success .navbar-brand a:hover,\n.navbar.bg-success .navbar-brand a:focus {\n  color: #fff;\n}\n.navbar.bg-success .navbar-search-wrapper .navbar-search-icon,\n.navbar.bg-success .navbar-search-wrapper .search-input {\n  color: #ecfae4;\n}\n.navbar.bg-success .search-input-wrapper .search-input,\n.navbar.bg-success .search-input-wrapper .search-toggler {\n  background-color: #71dd37 !important;\n  color: #ecfae4;\n}\n.navbar.bg-success .navbar-nav > .nav-link,\n.navbar.bg-success .navbar-nav > .nav-item > .nav-link,\n.navbar.bg-success .navbar-nav > .nav > .nav-item > .nav-link {\n  color: #ecfae4;\n}\n.navbar.bg-success .navbar-nav > .nav-link:hover, .navbar.bg-success .navbar-nav > .nav-link:focus,\n.navbar.bg-success .navbar-nav > .nav-item > .nav-link:hover,\n.navbar.bg-success .navbar-nav > .nav-item > .nav-link:focus,\n.navbar.bg-success .navbar-nav > .nav > .nav-item > .nav-link:hover,\n.navbar.bg-success .navbar-nav > .nav > .nav-item > .nav-link:focus {\n  color: #fff;\n}\n.navbar.bg-success .navbar-nav > .nav-link.disabled,\n.navbar.bg-success .navbar-nav > .nav-item > .nav-link.disabled,\n.navbar.bg-success .navbar-nav > .nav > .nav-item > .nav-link.disabled {\n  color: #bbee9f !important;\n}\n.navbar.bg-success .navbar-nav .show > .nav-link,\n.navbar.bg-success .navbar-nav .active > .nav-link,\n.navbar.bg-success .navbar-nav .nav-link.show,\n.navbar.bg-success .navbar-nav .nav-link.active {\n  color: #fff;\n}\n.navbar.bg-success .navbar-toggler {\n  color: #ecfae4;\n  border-color: rgba(255, 255, 255, 0.15);\n}\n.navbar.bg-success .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12)-Navbar' transform='translate(-1174.000000, -1290.000000)'%3E%3Cg id='Group' transform='translate(1174.000000, 1288.000000)'%3E%3Cg id='Icon-Color' transform='translate(0.000000, 2.000000)'%3E%3Cuse fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.navbar.bg-success .navbar-text {\n  color: #ecfae4;\n}\n.navbar.bg-success .navbar-text a {\n  color: #fff;\n}\n.navbar.bg-success .navbar-text a:hover, .navbar.bg-success .navbar-text a:focus {\n  color: #fff;\n}\n.navbar.bg-success hr {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n\n.navbar.bg-info {\n  background-color: #03c3ec !important;\n  color: #d2f4fc;\n}\n.navbar.bg-info .navbar-brand,\n.navbar.bg-info .navbar-brand a {\n  color: #fff;\n}\n.navbar.bg-info .navbar-brand:hover, .navbar.bg-info .navbar-brand:focus,\n.navbar.bg-info .navbar-brand a:hover,\n.navbar.bg-info .navbar-brand a:focus {\n  color: #fff;\n}\n.navbar.bg-info .navbar-search-wrapper .navbar-search-icon,\n.navbar.bg-info .navbar-search-wrapper .search-input {\n  color: #d2f4fc;\n}\n.navbar.bg-info .search-input-wrapper .search-input,\n.navbar.bg-info .search-input-wrapper .search-toggler {\n  background-color: #03c3ec !important;\n  color: #d2f4fc;\n}\n.navbar.bg-info .navbar-nav > .nav-link,\n.navbar.bg-info .navbar-nav > .nav-item > .nav-link,\n.navbar.bg-info .navbar-nav > .nav > .nav-item > .nav-link {\n  color: #d2f4fc;\n}\n.navbar.bg-info .navbar-nav > .nav-link:hover, .navbar.bg-info .navbar-nav > .nav-link:focus,\n.navbar.bg-info .navbar-nav > .nav-item > .nav-link:hover,\n.navbar.bg-info .navbar-nav > .nav-item > .nav-link:focus,\n.navbar.bg-info .navbar-nav > .nav > .nav-item > .nav-link:hover,\n.navbar.bg-info .navbar-nav > .nav > .nav-item > .nav-link:focus {\n  color: #fff;\n}\n.navbar.bg-info .navbar-nav > .nav-link.disabled,\n.navbar.bg-info .navbar-nav > .nav-item > .nav-link.disabled,\n.navbar.bg-info .navbar-nav > .nav > .nav-item > .nav-link.disabled {\n  color: #7fe0f6 !important;\n}\n.navbar.bg-info .navbar-nav .show > .nav-link,\n.navbar.bg-info .navbar-nav .active > .nav-link,\n.navbar.bg-info .navbar-nav .nav-link.show,\n.navbar.bg-info .navbar-nav .nav-link.active {\n  color: #fff;\n}\n.navbar.bg-info .navbar-toggler {\n  color: #d2f4fc;\n  border-color: rgba(255, 255, 255, 0.15);\n}\n.navbar.bg-info .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12)-Navbar' transform='translate(-1174.000000, -1290.000000)'%3E%3Cg id='Group' transform='translate(1174.000000, 1288.000000)'%3E%3Cg id='Icon-Color' transform='translate(0.000000, 2.000000)'%3E%3Cuse fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.navbar.bg-info .navbar-text {\n  color: #d2f4fc;\n}\n.navbar.bg-info .navbar-text a {\n  color: #fff;\n}\n.navbar.bg-info .navbar-text a:hover, .navbar.bg-info .navbar-text a:focus {\n  color: #fff;\n}\n.navbar.bg-info hr {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n\n.navbar.bg-warning {\n  background-color: #ffab00 !important;\n  color: #fff5e0;\n}\n.navbar.bg-warning .navbar-brand,\n.navbar.bg-warning .navbar-brand a {\n  color: #fff;\n}\n.navbar.bg-warning .navbar-brand:hover, .navbar.bg-warning .navbar-brand:focus,\n.navbar.bg-warning .navbar-brand a:hover,\n.navbar.bg-warning .navbar-brand a:focus {\n  color: #fff;\n}\n.navbar.bg-warning .navbar-search-wrapper .navbar-search-icon,\n.navbar.bg-warning .navbar-search-wrapper .search-input {\n  color: #fff5e0;\n}\n.navbar.bg-warning .search-input-wrapper .search-input,\n.navbar.bg-warning .search-input-wrapper .search-toggler {\n  background-color: #ffab00 !important;\n  color: #fff5e0;\n}\n.navbar.bg-warning .navbar-nav > .nav-link,\n.navbar.bg-warning .navbar-nav > .nav-item > .nav-link,\n.navbar.bg-warning .navbar-nav > .nav > .nav-item > .nav-link {\n  color: #fff5e0;\n}\n.navbar.bg-warning .navbar-nav > .nav-link:hover, .navbar.bg-warning .navbar-nav > .nav-link:focus,\n.navbar.bg-warning .navbar-nav > .nav-item > .nav-link:hover,\n.navbar.bg-warning .navbar-nav > .nav-item > .nav-link:focus,\n.navbar.bg-warning .navbar-nav > .nav > .nav-item > .nav-link:hover,\n.navbar.bg-warning .navbar-nav > .nav > .nav-item > .nav-link:focus {\n  color: #fff;\n}\n.navbar.bg-warning .navbar-nav > .nav-link.disabled,\n.navbar.bg-warning .navbar-nav > .nav-item > .nav-link.disabled,\n.navbar.bg-warning .navbar-nav > .nav > .nav-item > .nav-link.disabled {\n  color: #ffd786 !important;\n}\n.navbar.bg-warning .navbar-nav .show > .nav-link,\n.navbar.bg-warning .navbar-nav .active > .nav-link,\n.navbar.bg-warning .navbar-nav .nav-link.show,\n.navbar.bg-warning .navbar-nav .nav-link.active {\n  color: #fff;\n}\n.navbar.bg-warning .navbar-toggler {\n  color: #fff5e0;\n  border-color: rgba(255, 255, 255, 0.15);\n}\n.navbar.bg-warning .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12)-Navbar' transform='translate(-1174.000000, -1290.000000)'%3E%3Cg id='Group' transform='translate(1174.000000, 1288.000000)'%3E%3Cg id='Icon-Color' transform='translate(0.000000, 2.000000)'%3E%3Cuse fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.navbar.bg-warning .navbar-text {\n  color: #fff5e0;\n}\n.navbar.bg-warning .navbar-text a {\n  color: #fff;\n}\n.navbar.bg-warning .navbar-text a:hover, .navbar.bg-warning .navbar-text a:focus {\n  color: #fff;\n}\n.navbar.bg-warning hr {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n\n.navbar.bg-danger {\n  background-color: #ff3e1d !important;\n  color: #ffd5ce;\n}\n.navbar.bg-danger .navbar-brand,\n.navbar.bg-danger .navbar-brand a {\n  color: #fff;\n}\n.navbar.bg-danger .navbar-brand:hover, .navbar.bg-danger .navbar-brand:focus,\n.navbar.bg-danger .navbar-brand a:hover,\n.navbar.bg-danger .navbar-brand a:focus {\n  color: #fff;\n}\n.navbar.bg-danger .navbar-search-wrapper .navbar-search-icon,\n.navbar.bg-danger .navbar-search-wrapper .search-input {\n  color: #ffd5ce;\n}\n.navbar.bg-danger .search-input-wrapper .search-input,\n.navbar.bg-danger .search-input-wrapper .search-toggler {\n  background-color: #ff3e1d !important;\n  color: #ffd5ce;\n}\n.navbar.bg-danger .navbar-nav > .nav-link,\n.navbar.bg-danger .navbar-nav > .nav-item > .nav-link,\n.navbar.bg-danger .navbar-nav > .nav > .nav-item > .nav-link {\n  color: #ffd5ce;\n}\n.navbar.bg-danger .navbar-nav > .nav-link:hover, .navbar.bg-danger .navbar-nav > .nav-link:focus,\n.navbar.bg-danger .navbar-nav > .nav-item > .nav-link:hover,\n.navbar.bg-danger .navbar-nav > .nav-item > .nav-link:focus,\n.navbar.bg-danger .navbar-nav > .nav > .nav-item > .nav-link:hover,\n.navbar.bg-danger .navbar-nav > .nav > .nav-item > .nav-link:focus {\n  color: #fff;\n}\n.navbar.bg-danger .navbar-nav > .nav-link.disabled,\n.navbar.bg-danger .navbar-nav > .nav-item > .nav-link.disabled,\n.navbar.bg-danger .navbar-nav > .nav > .nav-item > .nav-link.disabled {\n  color: #ff9987 !important;\n}\n.navbar.bg-danger .navbar-nav .show > .nav-link,\n.navbar.bg-danger .navbar-nav .active > .nav-link,\n.navbar.bg-danger .navbar-nav .nav-link.show,\n.navbar.bg-danger .navbar-nav .nav-link.active {\n  color: #fff;\n}\n.navbar.bg-danger .navbar-toggler {\n  color: #ffd5ce;\n  border-color: rgba(255, 255, 255, 0.15);\n}\n.navbar.bg-danger .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12)-Navbar' transform='translate(-1174.000000, -1290.000000)'%3E%3Cg id='Group' transform='translate(1174.000000, 1288.000000)'%3E%3Cg id='Icon-Color' transform='translate(0.000000, 2.000000)'%3E%3Cuse fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.navbar.bg-danger .navbar-text {\n  color: #ffd5ce;\n}\n.navbar.bg-danger .navbar-text a {\n  color: #fff;\n}\n.navbar.bg-danger .navbar-text a:hover, .navbar.bg-danger .navbar-text a:focus {\n  color: #fff;\n}\n.navbar.bg-danger hr {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n\n.navbar.bg-dark {\n  background-color: #233446 !important;\n  color: #e4e6e8;\n}\n.navbar.bg-dark .navbar-brand,\n.navbar.bg-dark .navbar-brand a {\n  color: #fff;\n}\n.navbar.bg-dark .navbar-brand:hover, .navbar.bg-dark .navbar-brand:focus,\n.navbar.bg-dark .navbar-brand a:hover,\n.navbar.bg-dark .navbar-brand a:focus {\n  color: #fff;\n}\n.navbar.bg-dark .navbar-search-wrapper .navbar-search-icon,\n.navbar.bg-dark .navbar-search-wrapper .search-input {\n  color: #e4e6e8;\n}\n.navbar.bg-dark .search-input-wrapper .search-input,\n.navbar.bg-dark .search-input-wrapper .search-toggler {\n  background-color: #233446 !important;\n  color: #e4e6e8;\n}\n.navbar.bg-dark .navbar-nav > .nav-link,\n.navbar.bg-dark .navbar-nav > .nav-item > .nav-link,\n.navbar.bg-dark .navbar-nav > .nav > .nav-item > .nav-link {\n  color: #e4e6e8;\n}\n.navbar.bg-dark .navbar-nav > .nav-link:hover, .navbar.bg-dark .navbar-nav > .nav-link:focus,\n.navbar.bg-dark .navbar-nav > .nav-item > .nav-link:hover,\n.navbar.bg-dark .navbar-nav > .nav-item > .nav-link:focus,\n.navbar.bg-dark .navbar-nav > .nav > .nav-item > .nav-link:hover,\n.navbar.bg-dark .navbar-nav > .nav > .nav-item > .nav-link:focus {\n  color: #fff;\n}\n.navbar.bg-dark .navbar-nav > .nav-link.disabled,\n.navbar.bg-dark .navbar-nav > .nav-item > .nav-link.disabled,\n.navbar.bg-dark .navbar-nav > .nav > .nav-item > .nav-link.disabled {\n  color: #979fa7 !important;\n}\n.navbar.bg-dark .navbar-nav .show > .nav-link,\n.navbar.bg-dark .navbar-nav .active > .nav-link,\n.navbar.bg-dark .navbar-nav .nav-link.show,\n.navbar.bg-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n.navbar.bg-dark .navbar-toggler {\n  color: #e4e6e8;\n  border-color: rgba(255, 255, 255, 0.06);\n}\n.navbar.bg-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12)-Navbar' transform='translate(-1174.000000, -1290.000000)'%3E%3Cg id='Group' transform='translate(1174.000000, 1288.000000)'%3E%3Cg id='Icon-Color' transform='translate(0.000000, 2.000000)'%3E%3Cuse fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.navbar.bg-dark .navbar-text {\n  color: #e4e6e8;\n}\n.navbar.bg-dark .navbar-text a {\n  color: #fff;\n}\n.navbar.bg-dark .navbar-text a:hover, .navbar.bg-dark .navbar-text a:focus {\n  color: #fff;\n}\n.navbar.bg-dark hr {\n  border-color: rgba(255, 255, 255, 0.06);\n}\n\n.navbar.bg-gray {\n  background-color: #eceef1 !important;\n  color: #8291a1;\n}\n.navbar.bg-gray .navbar-brand,\n.navbar.bg-gray .navbar-brand a {\n  color: #435971;\n}\n.navbar.bg-gray .navbar-brand:hover, .navbar.bg-gray .navbar-brand:focus,\n.navbar.bg-gray .navbar-brand a:hover,\n.navbar.bg-gray .navbar-brand a:focus {\n  color: #435971;\n}\n.navbar.bg-gray .navbar-search-wrapper .navbar-search-icon,\n.navbar.bg-gray .navbar-search-wrapper .search-input {\n  color: #8291a1;\n}\n.navbar.bg-gray .search-input-wrapper .search-input,\n.navbar.bg-gray .search-input-wrapper .search-toggler {\n  background-color: rgba(67, 89, 113, 0.1) !important;\n  color: #8291a1;\n}\n.navbar.bg-gray .navbar-nav > .nav-link,\n.navbar.bg-gray .navbar-nav > .nav-item > .nav-link,\n.navbar.bg-gray .navbar-nav > .nav > .nav-item > .nav-link {\n  color: #8291a1;\n}\n.navbar.bg-gray .navbar-nav > .nav-link:hover, .navbar.bg-gray .navbar-nav > .nav-link:focus,\n.navbar.bg-gray .navbar-nav > .nav-item > .nav-link:hover,\n.navbar.bg-gray .navbar-nav > .nav-item > .nav-link:focus,\n.navbar.bg-gray .navbar-nav > .nav > .nav-item > .nav-link:hover,\n.navbar.bg-gray .navbar-nav > .nav > .nav-item > .nav-link:focus {\n  color: #435971;\n}\n.navbar.bg-gray .navbar-nav > .nav-link.disabled,\n.navbar.bg-gray .navbar-nav > .nav-item > .nav-link.disabled,\n.navbar.bg-gray .navbar-nav > .nav > .nav-item > .nav-link.disabled {\n  color: #acb6c1 !important;\n}\n.navbar.bg-gray .navbar-nav .show > .nav-link,\n.navbar.bg-gray .navbar-nav .active > .nav-link,\n.navbar.bg-gray .navbar-nav .nav-link.show,\n.navbar.bg-gray .navbar-nav .nav-link.active {\n  color: #435971;\n}\n.navbar.bg-gray .navbar-toggler {\n  color: #8291a1;\n  border-color: rgba(67, 89, 113, 0.0783835294);\n}\n.navbar.bg-gray .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12)-Navbar' transform='translate(-1174.000000, -1290.000000)'%3E%3Cg id='Group' transform='translate(1174.000000, 1288.000000)'%3E%3Cg id='Icon-Color' transform='translate(0.000000, 2.000000)'%3E%3Cuse fill='rgba(67, 89, 113, 0.5)' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='rgba(67, 89, 113, 0.5)' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.navbar.bg-gray .navbar-text {\n  color: #8291a1;\n}\n.navbar.bg-gray .navbar-text a {\n  color: #435971;\n}\n.navbar.bg-gray .navbar-text a:hover, .navbar.bg-gray .navbar-text a:focus {\n  color: #435971;\n}\n.navbar.bg-gray hr {\n  border-color: rgba(67, 89, 113, 0.0783835294);\n}\n\n.navbar.bg-white {\n  background-color: #fff !important;\n  color: #a1acb8;\n}\n.navbar.bg-white .navbar-brand,\n.navbar.bg-white .navbar-brand a {\n  color: #697a8d;\n}\n.navbar.bg-white .navbar-brand:hover, .navbar.bg-white .navbar-brand:focus,\n.navbar.bg-white .navbar-brand a:hover,\n.navbar.bg-white .navbar-brand a:focus {\n  color: #697a8d;\n}\n.navbar.bg-white .navbar-search-wrapper .navbar-search-icon,\n.navbar.bg-white .navbar-search-wrapper .search-input {\n  color: #a1acb8;\n}\n.navbar.bg-white .search-input-wrapper .search-input,\n.navbar.bg-white .search-input-wrapper .search-toggler {\n  background-color: #fff !important;\n  color: #a1acb8;\n}\n.navbar.bg-white .navbar-nav > .nav-link,\n.navbar.bg-white .navbar-nav > .nav-item > .nav-link,\n.navbar.bg-white .navbar-nav > .nav > .nav-item > .nav-link {\n  color: #a1acb8;\n}\n.navbar.bg-white .navbar-nav > .nav-link:hover, .navbar.bg-white .navbar-nav > .nav-link:focus,\n.navbar.bg-white .navbar-nav > .nav-item > .nav-link:hover,\n.navbar.bg-white .navbar-nav > .nav-item > .nav-link:focus,\n.navbar.bg-white .navbar-nav > .nav > .nav-item > .nav-link:hover,\n.navbar.bg-white .navbar-nav > .nav > .nav-item > .nav-link:focus {\n  color: #697a8d;\n}\n.navbar.bg-white .navbar-nav > .nav-link.disabled,\n.navbar.bg-white .navbar-nav > .nav-item > .nav-link.disabled,\n.navbar.bg-white .navbar-nav > .nav > .nav-item > .nav-link.disabled {\n  color: #c7cdd4 !important;\n}\n.navbar.bg-white .navbar-nav .show > .nav-link,\n.navbar.bg-white .navbar-nav .active > .nav-link,\n.navbar.bg-white .navbar-nav .nav-link.show,\n.navbar.bg-white .navbar-nav .nav-link.active {\n  color: #697a8d;\n}\n.navbar.bg-white .navbar-toggler {\n  color: #a1acb8;\n  border-color: rgba(105, 122, 141, 0.075);\n}\n.navbar.bg-white .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12)-Navbar' transform='translate(-1174.000000, -1290.000000)'%3E%3Cg id='Group' transform='translate(1174.000000, 1288.000000)'%3E%3Cg id='Icon-Color' transform='translate(0.000000, 2.000000)'%3E%3Cuse fill='rgba(67, 89, 113, 0.5)' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='rgba(67, 89, 113, 0.5)' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.navbar.bg-white .navbar-text {\n  color: #a1acb8;\n}\n.navbar.bg-white .navbar-text a {\n  color: #697a8d;\n}\n.navbar.bg-white .navbar-text a:hover, .navbar.bg-white .navbar-text a:focus {\n  color: #697a8d;\n}\n.navbar.bg-white hr {\n  border-color: rgba(105, 122, 141, 0.075);\n}\n\n.navbar.bg-light {\n  background-color: #eceef1 !important;\n  color: #a1acb8;\n}\n.navbar.bg-light .navbar-brand,\n.navbar.bg-light .navbar-brand a {\n  color: #697a8d;\n}\n.navbar.bg-light .navbar-brand:hover, .navbar.bg-light .navbar-brand:focus,\n.navbar.bg-light .navbar-brand a:hover,\n.navbar.bg-light .navbar-brand a:focus {\n  color: #697a8d;\n}\n.navbar.bg-light .navbar-search-wrapper .navbar-search-icon,\n.navbar.bg-light .navbar-search-wrapper .search-input {\n  color: #a1acb8;\n}\n.navbar.bg-light .search-input-wrapper .search-input,\n.navbar.bg-light .search-input-wrapper .search-toggler {\n  background-color: rgba(67, 89, 113, 0.1) !important;\n  color: #a1acb8;\n}\n.navbar.bg-light .navbar-nav > .nav-link,\n.navbar.bg-light .navbar-nav > .nav-item > .nav-link,\n.navbar.bg-light .navbar-nav > .nav > .nav-item > .nav-link {\n  color: #a1acb8;\n}\n.navbar.bg-light .navbar-nav > .nav-link:hover, .navbar.bg-light .navbar-nav > .nav-link:focus,\n.navbar.bg-light .navbar-nav > .nav-item > .nav-link:hover,\n.navbar.bg-light .navbar-nav > .nav-item > .nav-link:focus,\n.navbar.bg-light .navbar-nav > .nav > .nav-item > .nav-link:hover,\n.navbar.bg-light .navbar-nav > .nav > .nav-item > .nav-link:focus {\n  color: #697a8d;\n}\n.navbar.bg-light .navbar-nav > .nav-link.disabled,\n.navbar.bg-light .navbar-nav > .nav-item > .nav-link.disabled,\n.navbar.bg-light .navbar-nav > .nav > .nav-item > .nav-link.disabled {\n  color: #bfc6cf !important;\n}\n.navbar.bg-light .navbar-nav .show > .nav-link,\n.navbar.bg-light .navbar-nav .active > .nav-link,\n.navbar.bg-light .navbar-nav .nav-link.show,\n.navbar.bg-light .navbar-nav .nav-link.active {\n  color: #697a8d;\n}\n.navbar.bg-light .navbar-toggler {\n  color: #a1acb8;\n  border-color: rgba(105, 122, 141, 0.0783835294);\n}\n.navbar.bg-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12)-Navbar' transform='translate(-1174.000000, -1290.000000)'%3E%3Cg id='Group' transform='translate(1174.000000, 1288.000000)'%3E%3Cg id='Icon-Color' transform='translate(0.000000, 2.000000)'%3E%3Cuse fill='rgba(67, 89, 113, 0.5)' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='rgba(67, 89, 113, 0.5)' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.navbar.bg-light .navbar-text {\n  color: #a1acb8;\n}\n.navbar.bg-light .navbar-text a {\n  color: #697a8d;\n}\n.navbar.bg-light .navbar-text a:hover, .navbar.bg-light .navbar-text a:focus {\n  color: #697a8d;\n}\n.navbar.bg-light hr {\n  border-color: rgba(105, 122, 141, 0.0783835294);\n}\n\n.footer.bg-white {\n  background-color: #fff !important;\n  color: #a1acb8;\n}\n.footer.bg-white .footer-link {\n  color: #a1acb8;\n}\n.footer.bg-white .footer-link:hover, .footer.bg-white .footer-link:focus {\n  color: #697a8d;\n}\n.footer.bg-white .footer-link.disabled {\n  color: #c7cdd4 !important;\n}\n.footer.bg-white .footer-text {\n  color: #697a8d;\n}\n.footer.bg-white .show > .footer-link,\n.footer.bg-white .active > .footer-link,\n.footer.bg-white .footer-link.show,\n.footer.bg-white .footer-link.active {\n  color: #697a8d;\n}\n.footer.bg-white hr {\n  border-color: rgba(105, 122, 141, 0.075);\n}\n\n.footer.bg-light {\n  background-color: #eceef1 !important;\n  color: #a1acb8;\n}\n.footer.bg-light .footer-link {\n  color: #a1acb8;\n}\n.footer.bg-light .footer-link:hover, .footer.bg-light .footer-link:focus {\n  color: #697a8d;\n}\n.footer.bg-light .footer-link.disabled {\n  color: #bfc6cf !important;\n}\n.footer.bg-light .footer-text {\n  color: #697a8d;\n}\n.footer.bg-light .show > .footer-link,\n.footer.bg-light .active > .footer-link,\n.footer.bg-light .footer-link.show,\n.footer.bg-light .footer-link.active {\n  color: #697a8d;\n}\n.footer.bg-light hr {\n  border-color: rgba(105, 122, 141, 0.0783835294);\n}\n"
  },
  {
    "path": "public/assets/vendor/css/pages/page-account-settings.css",
    "content": ".api-key-actions {\n  position: absolute !important;\n  top: 0.75rem;\n  right: 0.5rem;\n}\n"
  },
  {
    "path": "public/assets/vendor/css/pages/page-auth.css",
    "content": "@charset \"UTF-8\";\n.authentication-wrapper {\n  display: flex;\n  flex-basis: 100%;\n  min-height: 100vh;\n  width: 100%;\n}\n.authentication-wrapper .authentication-inner {\n  width: 100%;\n}\n.authentication-wrapper.authentication-basic {\n  align-items: center;\n  justify-content: center;\n  overflow: hidden;\n}\n.authentication-wrapper.authentication-cover {\n  align-items: flex-start;\n}\n.authentication-wrapper.authentication-cover .authentication-inner {\n  height: 100vh;\n}\n.authentication-wrapper.authentication-basic .authentication-inner {\n  max-width: 400px;\n  position: relative;\n}\n.authentication-wrapper.authentication-basic .authentication-inner:before {\n  width: 148px;\n  height: 148px;\n  content: \" \";\n  position: absolute;\n  top: -40px;\n  right: -40px;\n  background-image: url(\"data:image/svg+xml,%3Csvg width='148px' height='148px' viewBox='0 0 148 148' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M355,144 C356.104569,144 357,144.895431 357,146 C357,147.104569 356.104569,148 355,148 C353.895431,148 353,147.104569 353,146 C353,144.895431 353.895431,144 355,144 Z M382,144 C383.104569,144 384,144.895431 384,146 C384,147.104569 383.104569,148 382,148 C380.895431,148 380,147.104569 380,146 C380,144.895431 380.895431,144 382,144 Z M412,144 C413.104569,144 414,144.895431 414,146 C414,147.104569 413.104569,148 412,148 C410.895431,148 410,147.104569 410,146 C410,144.895431 410.895431,144 412,144 Z M442,144 C443.104569,144 444,144.895431 444,146 C444,147.104569 443.104569,148 442,148 C440.895431,148 440,147.104569 440,146 C440,144.895431 440.895431,144 442,144 Z M472,144 C473.104569,144 474,144.895431 474,146 C474,147.104569 473.104569,148 472,148 C470.895431,148 470,147.104569 470,146 C470,144.895431 470.895431,144 472,144 Z M499,144 C500.104569,144 501,144.895431 501,146 C501,147.104569 500.104569,148 499,148 C497.895431,148 497,147.104569 497,146 C497,144.895431 497.895431,144 499,144 Z M355,117 C356.104569,117 357,117.895431 357,119 C357,120.104569 356.104569,121 355,121 C353.895431,121 353,120.104569 353,119 C353,117.895431 353.895431,117 355,117 Z M382,117 C383.104569,117 384,117.895431 384,119 C384,120.104569 383.104569,121 382,121 C380.895431,121 380,120.104569 380,119 C380,117.895431 380.895431,117 382,117 Z M412,117 C413.104569,117 414,117.895431 414,119 C414,120.104569 413.104569,121 412,121 C410.895431,121 410,120.104569 410,119 C410,117.895431 410.895431,117 412,117 Z M442,117 C443.104569,117 444,117.895431 444,119 C444,120.104569 443.104569,121 442,121 C440.895431,121 440,120.104569 440,119 C440,117.895431 440.895431,117 442,117 Z M472,117 C473.104569,117 474,117.895431 474,119 C474,120.104569 473.104569,121 472,121 C470.895431,121 470,120.104569 470,119 C470,117.895431 470.895431,117 472,117 Z M499,117 C500.104569,117 501,117.895431 501,119 C501,120.104569 500.104569,121 499,121 C497.895431,121 497,120.104569 497,119 C497,117.895431 497.895431,117 499,117 Z M355,87 C356.104569,87 357,87.8954305 357,89 C357,90.1045695 356.104569,91 355,91 C353.895431,91 353,90.1045695 353,89 C353,87.8954305 353.895431,87 355,87 Z M382,87 C383.104569,87 384,87.8954305 384,89 C384,90.1045695 383.104569,91 382,91 C380.895431,91 380,90.1045695 380,89 C380,87.8954305 380.895431,87 382,87 Z M412,87 C413.104569,87 414,87.8954305 414,89 C414,90.1045695 413.104569,91 412,91 C410.895431,91 410,90.1045695 410,89 C410,87.8954305 410.895431,87 412,87 Z M442,87 C443.104569,87 444,87.8954305 444,89 C444,90.1045695 443.104569,91 442,91 C440.895431,91 440,90.1045695 440,89 C440,87.8954305 440.895431,87 442,87 Z M472,87 C473.104569,87 474,87.8954305 474,89 C474,90.1045695 473.104569,91 472,91 C470.895431,91 470,90.1045695 470,89 C470,87.8954305 470.895431,87 472,87 Z M499,87 C500.104569,87 501,87.8954305 501,89 C501,90.1045695 500.104569,91 499,91 C497.895431,91 497,90.1045695 497,89 C497,87.8954305 497.895431,87 499,87 Z M355,57 C356.104569,57 357,57.8954305 357,59 C357,60.1045695 356.104569,61 355,61 C353.895431,61 353,60.1045695 353,59 C353,57.8954305 353.895431,57 355,57 Z M472,57 C473.104569,57 474,57.8954305 474,59 C474,60.1045695 473.104569,61 472,61 C470.895431,61 470,60.1045695 470,59 C470,57.8954305 470.895431,57 472,57 Z M412,57 C413.104569,57 414,57.8954305 414,59 C414,60.1045695 413.104569,61 412,61 C410.895431,61 410,60.1045695 410,59 C410,57.8954305 410.895431,57 412,57 Z M499,57 C500.104569,57 501,57.8954305 501,59 C501,60.1045695 500.104569,61 499,61 C497.895431,61 497,60.1045695 497,59 C497,57.8954305 497.895431,57 499,57 Z M382,57 C383.104569,57 384,57.8954305 384,59 C384,60.1045695 383.104569,61 382,61 C380.895431,61 380,60.1045695 380,59 C380,57.8954305 380.895431,57 382,57 Z M442,57 C443.104569,57 444,57.8954305 444,59 C444,60.1045695 443.104569,61 442,61 C440.895431,61 440,60.1045695 440,59 C440,57.8954305 440.895431,57 442,57 Z M355,27 C356.104569,27 357,27.8954305 357,29 C357,30.1045695 356.104569,31 355,31 C353.895431,31 353,30.1045695 353,29 C353,27.8954305 353.895431,27 355,27 Z M382,27 C383.104569,27 384,27.8954305 384,29 C384,30.1045695 383.104569,31 382,31 C380.895431,31 380,30.1045695 380,29 C380,27.8954305 380.895431,27 382,27 Z M412,27 C413.104569,27 414,27.8954305 414,29 C414,30.1045695 413.104569,31 412,31 C410.895431,31 410,30.1045695 410,29 C410,27.8954305 410.895431,27 412,27 Z M442,27 C443.104569,27 444,27.8954305 444,29 C444,30.1045695 443.104569,31 442,31 C440.895431,31 440,30.1045695 440,29 C440,27.8954305 440.895431,27 442,27 Z M472,27 C473.104569,27 474,27.8954305 474,29 C474,30.1045695 473.104569,31 472,31 C470.895431,31 470,30.1045695 470,29 C470,27.8954305 470.895431,27 472,27 Z M499,27 C500.104569,27 501,27.8954305 501,29 C501,30.1045695 500.104569,31 499,31 C497.895431,31 497,30.1045695 497,29 C497,27.8954305 497.895431,27 499,27 Z M355,0 C356.104569,0 357,0.8954305 357,2 C357,3.1045695 356.104569,4 355,4 C353.895431,4 353,3.1045695 353,2 C353,0.8954305 353.895431,0 355,0 Z M382,0 C383.104569,0 384,0.8954305 384,2 C384,3.1045695 383.104569,4 382,4 C380.895431,4 380,3.1045695 380,2 C380,0.8954305 380.895431,0 382,0 Z M412,0 C413.104569,0 414,0.8954305 414,2 C414,3.1045695 413.104569,4 412,4 C410.895431,4 410,3.1045695 410,2 C410,0.8954305 410.895431,0 412,0 Z M442,0 C443.104569,0 444,0.8954305 444,2 C444,3.1045695 443.104569,4 442,4 C440.895431,4 440,3.1045695 440,2 C440,0.8954305 440.895431,0 442,0 Z M472,0 C473.104569,0 474,0.8954305 474,2 C474,3.1045695 473.104569,4 472,4 C470.895431,4 470,3.1045695 470,2 C470,0.8954305 470.895431,0 472,0 Z M499,0 C500.104569,0 501,0.8954305 501,2 C501,3.1045695 500.104569,4 499,4 C497.895431,4 497,3.1045695 497,2 C497,0.8954305 497.895431,0 499,0 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='📝-Pages' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Login---V2' transform='translate(-822.000000, -197.000000)'%3E%3Cg id='top-illustration' transform='translate(469.000000, 197.000000)'%3E%3Cuse fill='%23696cff' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.6' fill='%23FFFFFF' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.authentication-wrapper.authentication-basic .authentication-inner:after {\n  width: 243px;\n  height: 240px;\n  content: \" \";\n  position: absolute;\n  bottom: -68px;\n  left: -46px;\n}\n.authentication-wrapper.authentication-basic .authentication-inner .card {\n  z-index: 1;\n}\n.authentication-wrapper.authentication-basic .authentication-inner .card .app-brand {\n  margin-bottom: 2.5rem;\n}\n.authentication-wrapper .auth-input-wrapper .auth-input {\n  max-width: 50px;\n  padding-left: 0.4rem;\n  padding-right: 0.4rem;\n  font-size: 150%;\n}\n\n@media (max-width: 575.98px) {\n  .authentication-wrapper .auth-input-wrapper .auth-input {\n    font-size: 1.125rem;\n  }\n}\n.light-style .authentication-wrapper .authentication-bg {\n  background-color: #fff;\n}\n.light-style .authentication-wrapper.authentication-basic .authentication-inner:after {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='243px' height='240px' viewBox='0 0 243 240' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M34.5,182 C35.8807119,182 37,183.119288 37,184.5 C37,185.880712 35.8807119,187 34.5,187 C33.1192881,187 32,185.880712 32,184.5 C32,183.119288 33.1192881,182 34.5,182 Z M61.5,182 C62.8807119,182 64,183.119288 64,184.5 C64,185.880712 62.8807119,187 61.5,187 C60.1192881,187 59,185.880712 59,184.5 C59,183.119288 60.1192881,182 61.5,182 Z M91.5,182 C92.8807119,182 94,183.119288 94,184.5 C94,185.880712 92.8807119,187 91.5,187 C90.1192881,187 89,185.880712 89,184.5 C89,183.119288 90.1192881,182 91.5,182 Z M123.5,182 C124.880712,182 126,183.119288 126,184.5 C126,185.880712 124.880712,187 123.5,187 C122.119288,187 121,185.880712 121,184.5 C121,183.119288 122.119288,182 123.5,182 Z M153.5,182 C154.880712,182 156,183.119288 156,184.5 C156,185.880712 154.880712,187 153.5,187 C152.119288,187 151,185.880712 151,184.5 C151,183.119288 152.119288,182 153.5,182 Z M180.5,182 C181.880712,182 183,183.119288 183,184.5 C183,185.880712 181.880712,187 180.5,187 C179.119288,187 178,185.880712 178,184.5 C178,183.119288 179.119288,182 180.5,182 Z M34.5,154 C35.8807119,154 37,155.119288 37,156.5 C37,157.880712 35.8807119,159 34.5,159 C33.1192881,159 32,157.880712 32,156.5 C32,155.119288 33.1192881,154 34.5,154 Z M61.5,154 C62.8807119,154 64,155.119288 64,156.5 C64,157.880712 62.8807119,159 61.5,159 C60.1192881,159 59,157.880712 59,156.5 C59,155.119288 60.1192881,154 61.5,154 Z M91.5,154 C92.8807119,154 94,155.119288 94,156.5 C94,157.880712 92.8807119,159 91.5,159 C90.1192881,159 89,157.880712 89,156.5 C89,155.119288 90.1192881,154 91.5,154 Z M123.5,154 C124.880712,154 126,155.119288 126,156.5 C126,157.880712 124.880712,159 123.5,159 C122.119288,159 121,157.880712 121,156.5 C121,155.119288 122.119288,154 123.5,154 Z M153.5,154 C154.880712,154 156,155.119288 156,156.5 C156,157.880712 154.880712,159 153.5,159 C152.119288,159 151,157.880712 151,156.5 C151,155.119288 152.119288,154 153.5,154 Z M180.5,154 C181.880712,154 183,155.119288 183,156.5 C183,157.880712 181.880712,159 180.5,159 C179.119288,159 178,157.880712 178,156.5 C178,155.119288 179.119288,154 180.5,154 Z M34.5,124 C35.8807119,124 37,125.119288 37,126.5 C37,127.880712 35.8807119,129 34.5,129 C33.1192881,129 32,127.880712 32,126.5 C32,125.119288 33.1192881,124 34.5,124 Z M61.5,124 C62.8807119,124 64,125.119288 64,126.5 C64,127.880712 62.8807119,129 61.5,129 C60.1192881,129 59,127.880712 59,126.5 C59,125.119288 60.1192881,124 61.5,124 Z M91.5,124 C92.8807119,124 94,125.119288 94,126.5 C94,127.880712 92.8807119,129 91.5,129 C90.1192881,129 89,127.880712 89,126.5 C89,125.119288 90.1192881,124 91.5,124 Z M123.5,124 C124.880712,124 126,125.119288 126,126.5 C126,127.880712 124.880712,129 123.5,129 C122.119288,129 121,127.880712 121,126.5 C121,125.119288 122.119288,124 123.5,124 Z M153.5,124 C154.880712,124 156,125.119288 156,126.5 C156,127.880712 154.880712,129 153.5,129 C152.119288,129 151,127.880712 151,126.5 C151,125.119288 152.119288,124 153.5,124 Z M180.5,124 C181.880712,124 183,125.119288 183,126.5 C183,127.880712 181.880712,129 180.5,129 C179.119288,129 178,127.880712 178,126.5 C178,125.119288 179.119288,124 180.5,124 Z M34.5,94 C35.8807119,94 37,95.1192881 37,96.5 C37,97.8807119 35.8807119,99 34.5,99 C33.1192881,99 32,97.8807119 32,96.5 C32,95.1192881 33.1192881,94 34.5,94 Z M153.5,94 C154.880712,94 156,95.1192881 156,96.5 C156,97.8807119 154.880712,99 153.5,99 C152.119288,99 151,97.8807119 151,96.5 C151,95.1192881 152.119288,94 153.5,94 Z M91.5,94 C92.8807119,94 94,95.1192881 94,96.5 C94,97.8807119 92.8807119,99 91.5,99 C90.1192881,99 89,97.8807119 89,96.5 C89,95.1192881 90.1192881,94 91.5,94 Z M180.5,94 C181.880712,94 183,95.1192881 183,96.5 C183,97.8807119 181.880712,99 180.5,99 C179.119288,99 178,97.8807119 178,96.5 C178,95.1192881 179.119288,94 180.5,94 Z M61.5,94 C62.8807119,94 64,95.1192881 64,96.5 C64,97.8807119 62.8807119,99 61.5,99 C60.1192881,99 59,97.8807119 59,96.5 C59,95.1192881 60.1192881,94 61.5,94 Z M123.5,94 C124.880712,94 126,95.1192881 126,96.5 C126,97.8807119 124.880712,99 123.5,99 C122.119288,99 121,97.8807119 121,96.5 C121,95.1192881 122.119288,94 123.5,94 Z M34.5,64 C35.8807119,64 37,65.1192881 37,66.5 C37,67.8807119 35.8807119,69 34.5,69 C33.1192881,69 32,67.8807119 32,66.5 C32,65.1192881 33.1192881,64 34.5,64 Z M61.5,64 C62.8807119,64 64,65.1192881 64,66.5 C64,67.8807119 62.8807119,69 61.5,69 C60.1192881,69 59,67.8807119 59,66.5 C59,65.1192881 60.1192881,64 61.5,64 Z M91.5,64 C92.8807119,64 94,65.1192881 94,66.5 C94,67.8807119 92.8807119,69 91.5,69 C90.1192881,69 89,67.8807119 89,66.5 C89,65.1192881 90.1192881,64 91.5,64 Z M123.5,64 C124.880712,64 126,65.1192881 126,66.5 C126,67.8807119 124.880712,69 123.5,69 C122.119288,69 121,67.8807119 121,66.5 C121,65.1192881 122.119288,64 123.5,64 Z M153.5,64 C154.880712,64 156,65.1192881 156,66.5 C156,67.8807119 154.880712,69 153.5,69 C152.119288,69 151,67.8807119 151,66.5 C151,65.1192881 152.119288,64 153.5,64 Z M180.5,64 C181.880712,64 183,65.1192881 183,66.5 C183,67.8807119 181.880712,69 180.5,69 C179.119288,69 178,67.8807119 178,66.5 C178,65.1192881 179.119288,64 180.5,64 Z M34.5,37 C35.8807119,37 37,38.1192881 37,39.5 C37,40.8807119 35.8807119,42 34.5,42 C33.1192881,42 32,40.8807119 32,39.5 C32,38.1192881 33.1192881,37 34.5,37 Z M61.5,37 C62.8807119,37 64,38.1192881 64,39.5 C64,40.8807119 62.8807119,42 61.5,42 C60.1192881,42 59,40.8807119 59,39.5 C59,38.1192881 60.1192881,37 61.5,37 Z M91.5,37 C92.8807119,37 94,38.1192881 94,39.5 C94,40.8807119 92.8807119,42 91.5,42 C90.1192881,42 89,40.8807119 89,39.5 C89,38.1192881 90.1192881,37 91.5,37 Z M123.5,37 C124.880712,37 126,38.1192881 126,39.5 C126,40.8807119 124.880712,42 123.5,42 C122.119288,42 121,40.8807119 121,39.5 C121,38.1192881 122.119288,37 123.5,37 Z M153.5,37 C154.880712,37 156,38.1192881 156,39.5 C156,40.8807119 154.880712,42 153.5,42 C152.119288,42 151,40.8807119 151,39.5 C151,38.1192881 152.119288,37 153.5,37 Z M180.5,37 C181.880712,37 183,38.1192881 183,39.5 C183,40.8807119 181.880712,42 180.5,42 C179.119288,42 178,40.8807119 178,39.5 C178,38.1192881 179.119288,37 180.5,37 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='📝-Pages' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Login---V2' transform='translate(-469.000000, -670.000000)'%3E%3Cg id='Shapes' transform='translate(469.000000, 197.000000)'%3E%3Cg id='bottom-illustration' transform='translate(0.000000, 473.000000)'%3E%3Crect id='Rectangle' fill='%23696cff' opacity='0.04' x='0' y='0' width='215' height='216' rx='10'%3E%3C/rect%3E%3Crect id='Rectangle' stroke='rgba(67, 89, 113, 0.5)' opacity='0.48' x='104.5' y='100.5' width='138' height='139' rx='10'%3E%3C/rect%3E%3Cg id='Dot'%3E%3Cuse fill='%23696cff' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.6' fill='%23FFFFFF' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n"
  },
  {
    "path": "public/assets/vendor/css/pages/page-icons.css",
    "content": "#icons-container .icon-card {\n  width: 128px;\n}\n#icons-container .icon-card i {\n  font-size: 2rem;\n}\n\n@media (max-width: 1024px) {\n  #icons-container .icon-card {\n    width: 126px;\n  }\n}\n@media (max-width: 767.98px) {\n  #icons-container .icon-card {\n    width: 131px;\n  }\n}\n@media (max-width: 414px) {\n  #icons-container .icon-card {\n    width: 110px;\n  }\n}\n@media (max-width: 375px) {\n  #icons-container .icon-card {\n    width: 150px;\n  }\n}\n"
  },
  {
    "path": "public/assets/vendor/css/pages/page-misc.css",
    "content": ".misc-wrapper {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  min-height: calc(100vh - (1.625rem * 2));\n  text-align: center;\n}\n"
  },
  {
    "path": "public/assets/vendor/css/theme-default.css",
    "content": "@charset \"UTF-8\";\n.layout-navbar-fixed .layout-wrapper:not(.layout-horizontal) .layout-page:before {\n  content: \"\";\n  width: 100%;\n  height: 0.75rem;\n  position: fixed;\n  top: 0px;\n  z-index: 1;\n}\n\n.bg-menu-theme .menu-header {\n  position: relative;\n}\n.bg-menu-theme .menu-header:before {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  top: 1.1875rem;\n  width: 1rem;\n  height: 1px;\n  transition: all 0.3s ease-in-out;\n}\n.layout-wrapper:not(.layout-horizontal) .bg-menu-theme .menu-inner .menu-item .menu-link {\n  border-radius: 0.375rem;\n}\n.layout-horizontal .bg-menu-theme .menu-inner > .menu-item > .menu-link {\n  border-radius: 0.375rem;\n}\n@media (min-width: 1200px) {\n  .layout-horizontal .bg-menu-theme .menu-inner > .menu-item {\n    margin: 0.565rem 0;\n  }\n  .layout-horizontal .bg-menu-theme .menu-inner > .menu-item:not(:first-child) {\n    margin-left: 0.0625rem;\n  }\n  .layout-horizontal .bg-menu-theme .menu-inner > .menu-item:not(:last-child) {\n    margin-right: 0.0625rem;\n  }\n  .layout-horizontal .bg-menu-theme .menu-inner > .menu-item .menu-sub {\n    box-shadow: 0 0.25rem 1rem rgba(161, 172, 184, 0.45);\n    z-index: 1;\n  }\n}\n.layout-wrapper:not(.layout-horizontal) .bg-menu-theme .menu-inner > .menu-item.active:before {\n  content: \"\";\n  position: absolute;\n  right: 0;\n  width: 0.25rem;\n  height: 2.6845rem;\n  border-radius: 0.375rem 0 0 0.375rem;\n}\n.bg-menu-theme .menu-sub > .menu-item > .menu-link:before {\n  content: \"\";\n  position: absolute;\n  left: 1.4375rem;\n  width: 0.375rem;\n  height: 0.375rem;\n  border-radius: 50%;\n}\n.layout-horizontal .bg-menu-theme .menu-sub > .menu-item > .menu-link:before {\n  left: 1.3rem;\n}\n.bg-menu-theme .menu-horizontal-wrapper > .menu-inner > .menu-item > .menu-sub > .menu-item > .menu-link:before {\n  display: none;\n}\n.bg-menu-theme .menu-sub > .menu-item.active > .menu-link:not(.menu-toggle):before {\n  left: 1.1875rem;\n  width: 0.875rem;\n  height: 0.875rem;\n}\n.layout-horizontal .bg-menu-theme .menu-sub > .menu-item.active > .menu-link:not(.menu-toggle):before {\n  left: 1.1rem;\n}\n\n.layout-menu-hover .layout-menu {\n  box-shadow: 0 0.625rem 1.25rem rgba(161, 172, 184, 0.5);\n  transition: all 0.3s ease-in-out;\n}\n\n.app-brand .layout-menu-toggle {\n  position: absolute;\n  left: 15rem;\n  border-radius: 50%;\n  opacity: 1;\n}\n.app-brand .layout-menu-toggle i {\n  width: 1.5rem;\n  height: 1.5rem;\n  transition: all 0.3s ease-in-out;\n  line-height: 1.05;\n}\n@media (max-width: 1199.98px) {\n  .app-brand .layout-menu-toggle {\n    display: none !important;\n  }\n  .layout-menu-expanded .app-brand .layout-menu-toggle {\n    display: block !important;\n  }\n}\n\n.menu-vertical .menu-item {\n  position: relative;\n}\n\n.text-primary {\n  color: #696cff !important;\n}\n\n.text-body[href]:hover {\n  color: #5f61e6 !important;\n}\n\n.bg-primary {\n  background-color: #696cff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus {\n  background-color: #6467f2 !important;\n}\n\n.dropdown-notifications-item:not(.mark-as-read) .dropdown-notifications-read span {\n  background-color: #696cff;\n}\n\n.bg-label-primary {\n  background-color: #e7e7ff !important;\n  color: #696cff !important;\n}\n\n.border-label-primary {\n  border: 3px solid #c3c4ff !important;\n}\n\n.border-light-primary {\n  border: 3px solid rgba(105, 108, 255, 0.08);\n}\n\n.page-item.active .page-link, .page-item.active .page-link:hover, .page-item.active .page-link:focus,\n.pagination li.active > a:not(.page-link),\n.pagination li.active > a:not(.page-link):hover,\n.pagination li.active > a:not(.page-link):focus {\n  border-color: #696cff;\n  background-color: #696cff;\n  color: #fff;\n  box-shadow: 0 0.125rem 0.25rem rgba(105, 108, 255, 0.4);\n}\n\n.progress-bar {\n  background-color: #696cff;\n  color: #fff;\n  box-shadow: 0 2px 4px 0 rgba(105, 108, 255, 0.4);\n}\n\n.list-group-item-primary {\n  background-color: #e1e2ff;\n  color: #696cff !important;\n}\n\na.list-group-item-primary,\nbutton.list-group-item-primary {\n  color: #696cff;\n}\na.list-group-item-primary:hover, a.list-group-item-primary:focus,\nbutton.list-group-item-primary:hover,\nbutton.list-group-item-primary:focus {\n  background-color: #d6d7f2;\n  color: #696cff;\n}\na.list-group-item-primary.active,\nbutton.list-group-item-primary.active {\n  border-color: #696cff;\n  background-color: #696cff;\n  color: #696cff;\n}\n\n.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {\n  border-color: #696cff;\n  background-color: #696cff;\n}\n\n.alert-primary {\n  background-color: #e7e7ff;\n  border-color: #d2d3ff;\n  color: #696cff;\n}\n.alert-primary .btn-close {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%23696cff' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.5' fill='%23696cff' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.alert-primary .alert-link {\n  color: #696cff;\n}\n\n.alert-primary hr {\n  background-color: #696cff !important;\n}\n\n.table-primary {\n  --bs-table-bg: #e1e2ff;\n  --bs-table-striped-bg: #dcdefb;\n  --bs-table-striped-color: #435971;\n  --bs-table-active-bg: #d1d4f1;\n  --bs-table-active-color: #435971;\n  --bs-table-hover-bg: #d8daf6;\n  --bs-table-hover-color: #435971;\n  color: #435971;\n  border-color: #d1d4f1;\n}\n.table-primary th {\n  border-bottom-color: inherit !important;\n}\n.table-primary .btn-icon {\n  color: #435971;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #696cff;\n  border-color: #696cff;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(105, 108, 255, 0.4);\n}\n.btn-primary:hover {\n  color: #fff !important;\n  background-color: #5f61e6 !important;\n  border-color: #5f61e6 !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-primary, .btn-primary:focus, .btn-primary.focus {\n  color: #fff;\n  background-color: #5f61e6;\n  border-color: #5f61e6;\n  transform: translateY(0);\n  box-shadow: none;\n}\n.btn-check:checked + .btn-primary, .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, .btn-primary.show.dropdown-toggle, .show > .btn-primary.dropdown-toggle {\n  color: #fff !important;\n  background-color: #595cd9 !important;\n  border-color: #595cd9 !important;\n}\n.btn-check:checked + .btn-primary:focus, .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, .btn-primary.show.dropdown-toggle:focus, .show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: none;\n}\n.btn-primary.disabled, .btn-primary:disabled {\n  color: #fff !important;\n  background-color: #696cff !important;\n  border-color: #696cff !important;\n  box-shadow: none !important;\n}\n\n.btn-outline-primary {\n  color: #696cff;\n  border-color: #696cff;\n  background: transparent;\n}\n.btn-outline-primary:hover {\n  color: #fff !important;\n  background-color: #5f61e6 !important;\n  border-color: #5f61e6 !important;\n  box-shadow: 0 0.125rem 0.25rem 0 rgba(105, 108, 255, 0.4) !important;\n  transform: translateY(-1px) !important;\n}\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  color: #fff;\n  background-color: #5f61e6;\n  border-color: #5f61e6;\n  box-shadow: none;\n  transform: translateY(0);\n}\n.btn-check:checked + .btn-outline-primary, .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff !important;\n  background-color: #595cd9 !important;\n  border-color: #595cd9 !important;\n}\n.btn-check:checked + .btn-outline-primary:focus, .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: none;\n}\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n  box-shadow: none !important;\n  color: #696cff !important;\n  background-color: transparent !important;\n}\n\n.btn-outline-primary .badge {\n  background: #696cff;\n  border-color: #696cff;\n  color: #fff;\n}\n\n.btn-outline-primary:hover .badge,\n.btn-outline-primary:focus:hover .badge,\n.btn-outline-primary:active .badge,\n.btn-outline-primary.active .badge,\n.show > .btn-outline-primary.dropdown-toggle .badge {\n  background: #fff;\n  border-color: #fff;\n  color: #696cff;\n}\n\n.dropdown-item:not(.disabled).active,\n.dropdown-item:not(.disabled):active {\n  background-color: rgba(105, 108, 255, 0.08);\n  color: #696cff !important;\n}\n\n.dropdown-menu > li:not(.disabled) > a:not(.dropdown-item):active,\n.dropdown-menu > li.active:not(.disabled) > a:not(.dropdown-item) {\n  background-color: rgba(105, 108, 255, 0.08);\n  color: #696cff !important;\n}\n\n.dt-button-collection .dropdown-item:not(.disabled):active {\n  background-color: rgba(105, 108, 255, 0.08);\n}\n\n.nav .nav-link:hover, .nav .nav-link:focus {\n  color: #5f61e6;\n}\n\n.nav-pills .nav-link.active, .nav-pills .nav-link.active:hover, .nav-pills .nav-link.active:focus {\n  background-color: #696cff;\n  color: #fff;\n  box-shadow: 0 2px 4px 0 rgba(105, 108, 255, 0.4);\n}\n\n.form-control:focus,\n.form-select:focus {\n  border-color: #696cff !important;\n}\n\n.input-group:focus-within .form-control,\n.input-group:focus-within .input-group-text {\n  border-color: #696cff !important;\n}\n\n.form-check-input:focus {\n  border-color: #696cff;\n  box-shadow: 0 2px 4px 0 rgba(105, 108, 255, 0.4);\n}\n.form-check-input:disabled {\n  background-color: #eceef1;\n}\n.form-check-input:checked, .form-check-input[type=checkbox]:indeterminate {\n  background-color: #696cff;\n  border-color: #696cff;\n  box-shadow: 0 2px 4px 0 rgba(105, 108, 255, 0.4);\n}\n\n.custom-option.checked {\n  border: 1px solid #696cff;\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23696cff'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-control:focus ~ .form-label {\n  border-color: #696cff;\n}\n.form-control:focus ~ .form-label::after {\n  border-color: inherit;\n}\n\n.divider.divider-primary .divider-text:before, .divider.divider-primary .divider-text:after {\n  border-color: #696cff;\n}\n\n.navbar.bg-primary {\n  background-color: #696cff !important;\n  color: #e0e1ff;\n}\n.navbar.bg-primary .navbar-brand,\n.navbar.bg-primary .navbar-brand a {\n  color: #fff;\n}\n.navbar.bg-primary .navbar-brand:hover, .navbar.bg-primary .navbar-brand:focus,\n.navbar.bg-primary .navbar-brand a:hover,\n.navbar.bg-primary .navbar-brand a:focus {\n  color: #fff;\n}\n.navbar.bg-primary .navbar-search-wrapper .navbar-search-icon,\n.navbar.bg-primary .navbar-search-wrapper .search-input {\n  color: #e0e1ff;\n}\n.navbar.bg-primary .search-input-wrapper .search-input,\n.navbar.bg-primary .search-input-wrapper .search-toggler {\n  background-color: #696cff !important;\n  color: #e0e1ff;\n}\n.navbar.bg-primary .navbar-nav > .nav-link,\n.navbar.bg-primary .navbar-nav > .nav-item > .nav-link,\n.navbar.bg-primary .navbar-nav > .nav > .nav-item > .nav-link {\n  color: #e0e1ff;\n}\n.navbar.bg-primary .navbar-nav > .nav-link:hover, .navbar.bg-primary .navbar-nav > .nav-link:focus,\n.navbar.bg-primary .navbar-nav > .nav-item > .nav-link:hover,\n.navbar.bg-primary .navbar-nav > .nav-item > .nav-link:focus,\n.navbar.bg-primary .navbar-nav > .nav > .nav-item > .nav-link:hover,\n.navbar.bg-primary .navbar-nav > .nav > .nav-item > .nav-link:focus {\n  color: #fff;\n}\n.navbar.bg-primary .navbar-nav > .nav-link.disabled,\n.navbar.bg-primary .navbar-nav > .nav-item > .nav-link.disabled,\n.navbar.bg-primary .navbar-nav > .nav > .nav-item > .nav-link.disabled {\n  color: #b0b2ff !important;\n}\n.navbar.bg-primary .navbar-nav .show > .nav-link,\n.navbar.bg-primary .navbar-nav .active > .nav-link,\n.navbar.bg-primary .navbar-nav .nav-link.show,\n.navbar.bg-primary .navbar-nav .nav-link.active {\n  color: #fff;\n}\n.navbar.bg-primary .navbar-toggler {\n  color: #e0e1ff;\n  border-color: rgba(255, 255, 255, 0.15);\n}\n.navbar.bg-primary .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12)-Navbar' transform='translate(-1174.000000, -1290.000000)'%3E%3Cg id='Group' transform='translate(1174.000000, 1288.000000)'%3E%3Cg id='Icon-Color' transform='translate(0.000000, 2.000000)'%3E%3Cuse fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='rgba(255, 255, 255, 0.8)' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.navbar.bg-primary .navbar-text {\n  color: #e0e1ff;\n}\n.navbar.bg-primary .navbar-text a {\n  color: #fff;\n}\n.navbar.bg-primary .navbar-text a:hover, .navbar.bg-primary .navbar-text a:focus {\n  color: #fff;\n}\n.navbar.bg-primary hr {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n\n.menu.bg-primary {\n  background-color: #696cff !important;\n  color: #e0e1ff;\n}\n.menu.bg-primary .menu-link,\n.menu.bg-primary .menu-horizontal-prev,\n.menu.bg-primary .menu-horizontal-next {\n  color: #e0e1ff;\n}\n.menu.bg-primary .menu-link:hover, .menu.bg-primary .menu-link:focus,\n.menu.bg-primary .menu-horizontal-prev:hover,\n.menu.bg-primary .menu-horizontal-prev:focus,\n.menu.bg-primary .menu-horizontal-next:hover,\n.menu.bg-primary .menu-horizontal-next:focus {\n  color: #fff;\n}\n.menu.bg-primary .menu-link.active,\n.menu.bg-primary .menu-horizontal-prev.active,\n.menu.bg-primary .menu-horizontal-next.active {\n  color: #fff;\n}\n.menu.bg-primary .menu-item.disabled .menu-link,\n.menu.bg-primary .menu-horizontal-prev.disabled,\n.menu.bg-primary .menu-horizontal-next.disabled {\n  color: #b0b2ff !important;\n}\n.menu.bg-primary .menu-item.open:not(.menu-item-closing) > .menu-toggle,\n.menu.bg-primary .menu-item.active > .menu-link {\n  color: #fff;\n}\n.menu.bg-primary .menu-item.active > .menu-link:not(.menu-toggle) {\n  background-color: #6d70ff;\n}\n.menu.bg-primary.menu-horizontal .menu-sub > .menu-item.active > .menu-link:not(.menu-toggle) {\n  background-color: #7174ff;\n}\n.menu.bg-primary.menu-horizontal .menu-inner .menu-item:not(.menu-item-closing) > .menu-sub, .menu.bg-primary.menu-horizontal .menu-inner .menu-item.open > .menu-toggle {\n  background: #6d70ff;\n}\n.menu.bg-primary .menu-inner > .menu-item.menu-item-closing .menu-item.open .menu-sub,\n.menu.bg-primary .menu-inner > .menu-item.menu-item-closing .menu-item.open .menu-toggle {\n  background: transparent;\n  color: #e0e1ff;\n}\n.menu.bg-primary .menu-inner-shadow {\n  background: linear-gradient(#696cff 41%, rgba(105, 108, 255, 0.11) 95%, rgba(105, 108, 255, 0));\n}\n.menu.bg-primary .menu-text {\n  color: #fff;\n}\n.menu.bg-primary .menu-header {\n  color: #c2c4ff;\n}\n.menu.bg-primary hr,\n.menu.bg-primary .menu-divider,\n.menu.bg-primary .menu-inner > .menu-item.open > .menu-sub::before {\n  border-color: rgba(255, 255, 255, 0.15) !important;\n}\n.menu.bg-primary .menu-inner > .menu-header::before {\n  background-color: rgba(255, 255, 255, 0.15);\n}\n.menu.bg-primary .menu-block::before {\n  background-color: #c2c4ff;\n}\n.menu.bg-primary .menu-inner > .menu-item.open .menu-item.open > .menu-toggle::before {\n  background-color: #8385ff;\n}\n.menu.bg-primary .menu-inner > .menu-item.open .menu-item.active > .menu-link::before {\n  background-color: #fff;\n}\n.menu.bg-primary .menu-inner > .menu-item.open .menu-item.open > .menu-toggle::before,\n.menu.bg-primary .menu-inner > .menu-item.open .menu-item.active > .menu-link::before {\n  box-shadow: 0 0 0 2px #6d70ff;\n}\n.menu.bg-primary .ps__thumb-y,\n.menu.bg-primary .ps__rail-y.ps--clicking > .ps__thumb-y {\n  background: rgba(255, 255, 255, 0.5942917647) !important;\n}\n\n@media (max-width: 1199.98px) {\n  .app-brand .layout-menu-toggle {\n    border: 7px solid #696cff !important;\n  }\n}\n.footer.bg-primary {\n  background-color: #696cff !important;\n  color: #e0e1ff;\n}\n.footer.bg-primary .footer-link {\n  color: #e0e1ff;\n}\n.footer.bg-primary .footer-link:hover, .footer.bg-primary .footer-link:focus {\n  color: #fff;\n}\n.footer.bg-primary .footer-link.disabled {\n  color: #b0b2ff !important;\n}\n.footer.bg-primary .footer-text {\n  color: #fff;\n}\n.footer.bg-primary .show > .footer-link,\n.footer.bg-primary .active > .footer-link,\n.footer.bg-primary .footer-link.show,\n.footer.bg-primary .footer-link.active {\n  color: #fff;\n}\n.footer.bg-primary hr {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n\n.bg-primary.toast, .bg-primary.bs-toast {\n  color: #fff;\n  background-color: rgba(105, 108, 255, 0.85) !important;\n  box-shadow: 0 0.25rem 1rem rgba(105, 108, 255, 0.4);\n}\n.bg-primary.toast .toast-header, .bg-primary.bs-toast .toast-header {\n  color: #fff;\n}\n.bg-primary.toast .toast-header .btn-close, .bg-primary.bs-toast .toast-header .btn-close {\n  background-color: #696cff !important;\n  background-image: url(\"data:image/svg+xml,%3Csvg width='150px' height='151px' viewBox='0 0 150 151' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpolygon id='path-1' points='131.251657 0 74.9933705 56.25 18.7483426 0 0 18.75 56.2450278 75 0 131.25 18.7483426 150 74.9933705 93.75 131.251657 150 150 131.25 93.7549722 75 150 18.75'%3E%3C/polygon%3E%3C/defs%3E%3Cg id='🎨-%5BSetup%5D:-Colors-&amp;-Shadows' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-225.000000, -250.000000)'%3E%3Cg id='Icon-Color' transform='translate(225.000000, 250.500000)'%3E%3Cuse fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='1' fill='%23fff' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n  box-shadow: 0 0.1875rem 0.375rem 0 rgba(105, 108, 255, 0.4) !important;\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  color: #696cff;\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n  color: #696cff;\n}\n\n.svg-illustration svg {\n  fill: #696cff;\n}\n\nhtml:not([dir=rtl]) .border-primary,\nhtml[dir=rtl] .border-primary {\n  border-color: #696cff !important;\n}\n\na {\n  color: #696cff;\n}\na:hover {\n  color: #787bff;\n}\n\n.fill-primary {\n  fill: #696cff;\n}\n\n.bg-navbar-theme {\n  background-color: #fff !important;\n  color: #697a8d;\n}\n.bg-navbar-theme .navbar-brand,\n.bg-navbar-theme .navbar-brand a {\n  color: #566a7f;\n}\n.bg-navbar-theme .navbar-brand:hover, .bg-navbar-theme .navbar-brand:focus,\n.bg-navbar-theme .navbar-brand a:hover,\n.bg-navbar-theme .navbar-brand a:focus {\n  color: #566a7f;\n}\n.bg-navbar-theme .navbar-search-wrapper .navbar-search-icon,\n.bg-navbar-theme .navbar-search-wrapper .search-input {\n  color: #697a8d;\n}\n.bg-navbar-theme .search-input-wrapper .search-input,\n.bg-navbar-theme .search-input-wrapper .search-toggler {\n  background-color: #fff !important;\n  color: #697a8d;\n}\n.bg-navbar-theme .navbar-nav > .nav-link,\n.bg-navbar-theme .navbar-nav > .nav-item > .nav-link,\n.bg-navbar-theme .navbar-nav > .nav > .nav-item > .nav-link {\n  color: #697a8d;\n}\n.bg-navbar-theme .navbar-nav > .nav-link:hover, .bg-navbar-theme .navbar-nav > .nav-link:focus,\n.bg-navbar-theme .navbar-nav > .nav-item > .nav-link:hover,\n.bg-navbar-theme .navbar-nav > .nav-item > .nav-link:focus,\n.bg-navbar-theme .navbar-nav > .nav > .nav-item > .nav-link:hover,\n.bg-navbar-theme .navbar-nav > .nav > .nav-item > .nav-link:focus {\n  color: #566a7f;\n}\n.bg-navbar-theme .navbar-nav > .nav-link.disabled,\n.bg-navbar-theme .navbar-nav > .nav-item > .nav-link.disabled,\n.bg-navbar-theme .navbar-nav > .nav > .nav-item > .nav-link.disabled {\n  color: #a5afbb !important;\n}\n.bg-navbar-theme .navbar-nav .show > .nav-link,\n.bg-navbar-theme .navbar-nav .active > .nav-link,\n.bg-navbar-theme .navbar-nav .nav-link.show,\n.bg-navbar-theme .navbar-nav .nav-link.active {\n  color: #566a7f;\n}\n.bg-navbar-theme .navbar-toggler {\n  color: #697a8d;\n  border-color: rgba(86, 106, 127, 0.075);\n}\n.bg-navbar-theme .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12)-Navbar' transform='translate(-1174.000000, -1290.000000)'%3E%3Cg id='Group' transform='translate(1174.000000, 1288.000000)'%3E%3Cg id='Icon-Color' transform='translate(0.000000, 2.000000)'%3E%3Cuse fill='rgba(67, 89, 113, 0.5)' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='rgba(67, 89, 113, 0.5)' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\");\n}\n.bg-navbar-theme .navbar-text {\n  color: #697a8d;\n}\n.bg-navbar-theme .navbar-text a {\n  color: #566a7f;\n}\n.bg-navbar-theme .navbar-text a:hover, .bg-navbar-theme .navbar-text a:focus {\n  color: #566a7f;\n}\n.bg-navbar-theme hr {\n  border-color: rgba(86, 106, 127, 0.075);\n}\n\n.layout-navbar {\n  background-color: rgba(255, 255, 255, 0.95) !important;\n  backdrop-filter: saturate(200%) blur(6px);\n}\n\n.navbar-detached {\n  box-shadow: 0 0 0.375rem 0.25rem rgba(161, 172, 184, 0.15);\n}\n\n.layout-navbar-fixed .layout-page:before {\n  backdrop-filter: saturate(200%) blur(10px);\n  background: rgba(245, 245, 249, 0.6);\n}\n\n.bg-menu-theme {\n  background-color: #fff !important;\n  color: #697a8d;\n}\n.bg-menu-theme .menu-link,\n.bg-menu-theme .menu-horizontal-prev,\n.bg-menu-theme .menu-horizontal-next {\n  color: #697a8d;\n}\n.bg-menu-theme .menu-link:hover, .bg-menu-theme .menu-link:focus,\n.bg-menu-theme .menu-horizontal-prev:hover,\n.bg-menu-theme .menu-horizontal-prev:focus,\n.bg-menu-theme .menu-horizontal-next:hover,\n.bg-menu-theme .menu-horizontal-next:focus {\n  color: #566a7f;\n}\n.bg-menu-theme .menu-link.active,\n.bg-menu-theme .menu-horizontal-prev.active,\n.bg-menu-theme .menu-horizontal-next.active {\n  color: #566a7f;\n}\n.bg-menu-theme .menu-item.disabled .menu-link,\n.bg-menu-theme .menu-horizontal-prev.disabled,\n.bg-menu-theme .menu-horizontal-next.disabled {\n  color: #a5afbb !important;\n}\n.bg-menu-theme .menu-item.open:not(.menu-item-closing) > .menu-toggle,\n.bg-menu-theme .menu-item.active > .menu-link {\n  color: #566a7f;\n}\n.bg-menu-theme .menu-item.active > .menu-link:not(.menu-toggle) {\n  background-color: #fff;\n}\n.bg-menu-theme.menu-horizontal .menu-sub > .menu-item.active > .menu-link:not(.menu-toggle) {\n  background-color: white;\n}\n.bg-menu-theme.menu-horizontal .menu-inner .menu-item:not(.menu-item-closing) > .menu-sub, .bg-menu-theme.menu-horizontal .menu-inner .menu-item.open > .menu-toggle {\n  background: #fff;\n}\n.bg-menu-theme .menu-inner > .menu-item.menu-item-closing .menu-item.open .menu-sub,\n.bg-menu-theme .menu-inner > .menu-item.menu-item-closing .menu-item.open .menu-toggle {\n  background: transparent;\n  color: #697a8d;\n}\n.bg-menu-theme .menu-inner-shadow {\n  background: linear-gradient(#fff 41%, rgba(255, 255, 255, 0.11) 95%, rgba(255, 255, 255, 0));\n}\n.bg-menu-theme .menu-text {\n  color: #566a7f;\n}\n.bg-menu-theme .menu-header {\n  color: #8f9baa;\n}\n.bg-menu-theme hr,\n.bg-menu-theme .menu-divider,\n.bg-menu-theme .menu-inner > .menu-item.open > .menu-sub::before {\n  border-color: transparent !important;\n}\n.bg-menu-theme .menu-inner > .menu-header::before {\n  background-color: transparent;\n}\n.bg-menu-theme .menu-block::before {\n  background-color: #8f9baa;\n}\n.bg-menu-theme .menu-inner > .menu-item.open .menu-item.open > .menu-toggle::before {\n  background-color: white;\n}\n.bg-menu-theme .menu-inner > .menu-item.open .menu-item.active > .menu-link::before {\n  background-color: #566a7f;\n}\n.bg-menu-theme .menu-inner > .menu-item.open .menu-item.open > .menu-toggle::before,\n.bg-menu-theme .menu-inner > .menu-item.open .menu-item.active > .menu-link::before {\n  box-shadow: 0 0 0 2px #fff;\n}\n.bg-menu-theme .ps__thumb-y,\n.bg-menu-theme .ps__rail-y.ps--clicking > .ps__thumb-y {\n  background: rgba(86, 106, 127, 0.2) !important;\n}\n\n@media (max-width: 1199.98px) {\n  .app-brand .layout-menu-toggle {\n    border: 7px solid #fff !important;\n  }\n}\n@media (min-width: 1200px) {\n  .bg-menu-theme.menu-vertical {\n    box-shadow: 0 0.125rem 0.375rem 0 rgba(161, 172, 184, 0.12);\n  }\n}\n.bg-menu-theme .menu-header {\n  color: #a1acb8;\n}\n.bg-menu-theme .menu-header:before {\n  background-color: #a1acb8 !important;\n}\n.bg-menu-theme.menu-vertical {\n  box-shadow: 0 0.125rem 0.375rem 0 rgba(161, 172, 184, 0.12);\n}\nhtml:not(.layout-menu-collapsed) .bg-menu-theme .menu-inner .menu-item.open > .menu-link, .layout-menu-hover.layout-menu-collapsed .bg-menu-theme .menu-inner .menu-item.open > .menu-link,\nhtml:not(.layout-menu-collapsed) .bg-menu-theme .menu-inner .menu-item .menu-link:not(.active):hover,\n.layout-menu-hover.layout-menu-collapsed .bg-menu-theme .menu-inner .menu-item .menu-link:not(.active):hover {\n  background-color: rgba(67, 89, 113, 0.04);\n}\n.bg-menu-theme .menu-inner .menu-sub > .menu-item.active > .menu-link.menu-toggle {\n  background-color: rgba(67, 89, 113, 0.04);\n}\n.bg-menu-theme .menu-inner .menu-sub > .menu-item.active .menu-icon {\n  color: #696cff;\n}\n.bg-menu-theme .menu-inner > .menu-item.active > .menu-link {\n  color: #696cff;\n  background-color: rgba(105, 108, 255, 0.16) !important;\n}\n.bg-menu-theme .menu-inner > .menu-item.active:before {\n  background: #696cff;\n}\n.bg-menu-theme .menu-sub > .menu-item > .menu-link:before {\n  background-color: #b4bdc6 !important;\n}\n.bg-menu-theme .menu-sub > .menu-item.active > .menu-link:not(.menu-toggle):before {\n  background-color: #696cff !important;\n  border: 3px solid #e7e7ff !important;\n}\n\n.app-brand .layout-menu-toggle {\n  background-color: #696cff;\n  border: 7px solid #f5f5f9;\n}\n.app-brand .layout-menu-toggle i {\n  color: #fff;\n}\n.app-brand .layout-menu-toggle .menu-inner > .menu-header::before {\n  background-color: #b4bdc6;\n}\n\n.bg-footer-theme {\n  background-color: #f5f5f9 !important;\n  color: #697a8d;\n}\n.bg-footer-theme .footer-link {\n  color: #697a8d;\n}\n.bg-footer-theme .footer-link:hover, .bg-footer-theme .footer-link:focus {\n  color: #566a7f;\n}\n.bg-footer-theme .footer-link.disabled {\n  color: #a1abb8 !important;\n}\n.bg-footer-theme .footer-text {\n  color: #566a7f;\n}\n.bg-footer-theme .show > .footer-link,\n.bg-footer-theme .active > .footer-link,\n.bg-footer-theme .footer-link.show,\n.bg-footer-theme .footer-link.active {\n  color: #566a7f;\n}\n.bg-footer-theme hr {\n  border-color: rgba(86, 106, 127, 0.0768713725);\n}\n\n.layout-footer-fixed .content-footer {\n  box-shadow: 0 0 0.375rem 0.25rem rgba(161, 172, 184, 0.15);\n}\n"
  },
  {
    "path": "public/assets/vendor/fonts/boxicons.css",
    "content": "@font-face {\n  font-family: \"boxicons\";\n  font-weight: normal;\n  font-style: normal;\n  src: url(\"../fonts/boxicons.eot\");\n  src: url(\"../fonts/boxicons.eot\") format(\"embedded-opentype\"), url(\"../fonts/boxicons.woff2\") format(\"woff2\"), url(\"../fonts/boxicons.woff\") format(\"woff\"), url(\"../fonts/boxicons.ttf\") format(\"truetype\"), url(\"../fonts/boxicons.svg?#boxicons\") format(\"svg\");\n}\n.bx {\n  font-family: \"boxicons\" !important;\n  font-weight: normal;\n  font-style: normal;\n  font-variant: normal;\n  line-height: 1;\n  text-rendering: auto;\n  display: inline-block;\n  text-transform: none;\n  speak: none;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.bx-ul {\n  margin-left: 2em;\n  padding-left: 0;\n  list-style: none;\n}\n\n.bx-ul > li {\n  position: relative;\n}\n\n.bx-ul .bx {\n  font-size: inherit;\n  line-height: inherit;\n  position: absolute;\n  left: -2em;\n  width: 2em;\n  text-align: center;\n}\n\n@-webkit-keyframes spin {\n  0% {\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes spin {\n  0% {\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@-webkit-keyframes burst {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n  90% {\n    -webkit-transform: scale(1.5);\n    transform: scale(1.5);\n    opacity: 0;\n  }\n}\n@keyframes burst {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n  90% {\n    -webkit-transform: scale(1.5);\n    transform: scale(1.5);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes flashing {\n  0% {\n    opacity: 1;\n  }\n  45% {\n    opacity: 0;\n  }\n  90% {\n    opacity: 1;\n  }\n}\n@keyframes flashing {\n  0% {\n    opacity: 1;\n  }\n  45% {\n    opacity: 0;\n  }\n  90% {\n    opacity: 1;\n  }\n}\n@-webkit-keyframes fade-left {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1;\n  }\n  75% {\n    -webkit-transform: translateX(-20px);\n    transform: translateX(-20px);\n    opacity: 0;\n  }\n}\n@keyframes fade-left {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1;\n  }\n  75% {\n    -webkit-transform: translateX(-20px);\n    transform: translateX(-20px);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes fade-right {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1;\n  }\n  75% {\n    -webkit-transform: translateX(20px);\n    transform: translateX(20px);\n    opacity: 0;\n  }\n}\n@keyframes fade-right {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1;\n  }\n  75% {\n    -webkit-transform: translateX(20px);\n    transform: translateX(20px);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes fade-up {\n  0% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1;\n  }\n  75% {\n    -webkit-transform: translateY(-20px);\n    transform: translateY(-20px);\n    opacity: 0;\n  }\n}\n@keyframes fade-up {\n  0% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1;\n  }\n  75% {\n    -webkit-transform: translateY(-20px);\n    transform: translateY(-20px);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes fade-down {\n  0% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1;\n  }\n  75% {\n    -webkit-transform: translateY(20px);\n    transform: translateY(20px);\n    opacity: 0;\n  }\n}\n@keyframes fade-down {\n  0% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1;\n  }\n  75% {\n    -webkit-transform: translateY(20px);\n    transform: translateY(20px);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes tada {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n  10%, 20% {\n    -webkit-transform: scale3d(0.95, 0.95, 0.95) rotate3d(0, 0, 1, -10deg);\n    transform: scale3d(0.95, 0.95, 0.95) rotate3d(0, 0, 1, -10deg);\n  }\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);\n    transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);\n  }\n  40%, 60%, 80% {\n    -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg);\n    transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg);\n  }\n  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n@keyframes tada {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n  10%, 20% {\n    -webkit-transform: scale3d(0.95, 0.95, 0.95) rotate3d(0, 0, 1, -10deg);\n    transform: scale3d(0.95, 0.95, 0.95) rotate3d(0, 0, 1, -10deg);\n  }\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);\n    transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);\n  }\n  40%, 60%, 80% {\n    -webkit-transform: rotate3d(0, 0, 1, -10deg);\n    transform: rotate3d(0, 0, 1, -10deg);\n  }\n  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n.bx-spin {\n  -webkit-animation: spin 2s linear infinite;\n  animation: spin 2s linear infinite;\n}\n\n.bx-spin-hover:hover {\n  -webkit-animation: spin 2s linear infinite;\n  animation: spin 2s linear infinite;\n}\n\n.bx-tada {\n  -webkit-animation: tada 1.5s ease infinite;\n  animation: tada 1.5s ease infinite;\n}\n\n.bx-tada-hover:hover {\n  -webkit-animation: tada 1.5s ease infinite;\n  animation: tada 1.5s ease infinite;\n}\n\n.bx-flashing {\n  -webkit-animation: flashing 1.5s infinite linear;\n  animation: flashing 1.5s infinite linear;\n}\n\n.bx-flashing-hover:hover {\n  -webkit-animation: flashing 1.5s infinite linear;\n  animation: flashing 1.5s infinite linear;\n}\n\n.bx-burst {\n  -webkit-animation: burst 1.5s infinite linear;\n  animation: burst 1.5s infinite linear;\n}\n\n.bx-burst-hover:hover {\n  -webkit-animation: burst 1.5s infinite linear;\n  animation: burst 1.5s infinite linear;\n}\n\n.bx-fade-up {\n  -webkit-animation: fade-up 1.5s infinite linear;\n  animation: fade-up 1.5s infinite linear;\n}\n\n.bx-fade-up-hover:hover {\n  -webkit-animation: fade-up 1.5s infinite linear;\n  animation: fade-up 1.5s infinite linear;\n}\n\n.bx-fade-down {\n  -webkit-animation: fade-down 1.5s infinite linear;\n  animation: fade-down 1.5s infinite linear;\n}\n\n.bx-fade-down-hover:hover {\n  -webkit-animation: fade-down 1.5s infinite linear;\n  animation: fade-down 1.5s infinite linear;\n}\n\n.bx-fade-left {\n  -webkit-animation: fade-left 1.5s infinite linear;\n  animation: fade-left 1.5s infinite linear;\n}\n\n.bx-fade-left-hover:hover {\n  -webkit-animation: fade-left 1.5s infinite linear;\n  animation: fade-left 1.5s infinite linear;\n}\n\n.bx-fade-right {\n  -webkit-animation: fade-right 1.5s infinite linear;\n  animation: fade-right 1.5s infinite linear;\n}\n\n.bx-fade-right-hover:hover {\n  -webkit-animation: fade-right 1.5s infinite linear;\n  animation: fade-right 1.5s infinite linear;\n}\n\n.bx-xs {\n  font-size: 1rem !important;\n}\n\n.bx-sm {\n  font-size: 1.55rem !important;\n}\n\n.bx-md {\n  font-size: 2.25rem !important;\n}\n\n.bx-lg {\n  font-size: 3rem !important;\n}\n\n.bx-fw {\n  font-size: 1.2857142857em;\n  line-height: 0.8em;\n  width: 1.2857142857em;\n  height: 0.8em;\n  margin-top: -0.2em !important;\n  vertical-align: middle;\n}\n\n.bx-pull-left {\n  float: left;\n  margin-right: 0.3em !important;\n}\n\n.bx-pull-right {\n  float: right;\n  margin-left: 0.3em !important;\n}\n\n.bx-rotate-90 {\n  transform: rotate(90deg);\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n}\n\n.bx-rotate-180 {\n  transform: rotate(180deg);\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n}\n\n.bx-rotate-270 {\n  transform: rotate(270deg);\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n}\n\n.bx-flip-horizontal {\n  transform: scaleX(-1);\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n}\n\n.bx-flip-vertical {\n  transform: scaleY(-1);\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n}\n\n.bx-border {\n  padding: 0.25em;\n  border: 0.07em solid rgba(0, 0, 0, 0.1);\n  border-radius: 0.25em;\n}\n\n.bx-border-circle {\n  padding: 0.25em;\n  border: 0.07em solid rgba(0, 0, 0, 0.1);\n  border-radius: 50%;\n}\n\n.bxs-balloon:before {\n  content: \"\\eb60\";\n}\n\n.bxs-castle:before {\n  content: \"\\eb79\";\n}\n\n.bxs-coffee-bean:before {\n  content: \"\\eb92\";\n}\n\n.bxs-objects-horizontal-center:before {\n  content: \"\\ebab\";\n}\n\n.bxs-objects-horizontal-left:before {\n  content: \"\\ebc4\";\n}\n\n.bxs-objects-horizontal-right:before {\n  content: \"\\ebdd\";\n}\n\n.bxs-objects-vertical-bottom:before {\n  content: \"\\ebf6\";\n}\n\n.bxs-objects-vertical-center:before {\n  content: \"\\ef40\";\n}\n\n.bxs-objects-vertical-top:before {\n  content: \"\\ef41\";\n}\n\n.bxs-pear:before {\n  content: \"\\ef42\";\n}\n\n.bxs-shield-minus:before {\n  content: \"\\ef43\";\n}\n\n.bxs-shield-plus:before {\n  content: \"\\ef44\";\n}\n\n.bxs-shower:before {\n  content: \"\\ef45\";\n}\n\n.bxs-sushi:before {\n  content: \"\\ef46\";\n}\n\n.bxs-universal-access:before {\n  content: \"\\ef47\";\n}\n\n.bx-child:before {\n  content: \"\\ef48\";\n}\n\n.bx-horizontal-left:before {\n  content: \"\\ef49\";\n}\n\n.bx-horizontal-right:before {\n  content: \"\\ef4a\";\n}\n\n.bx-objects-horizontal-center:before {\n  content: \"\\ef4b\";\n}\n\n.bx-objects-horizontal-left:before {\n  content: \"\\ef4c\";\n}\n\n.bx-objects-horizontal-right:before {\n  content: \"\\ef4d\";\n}\n\n.bx-objects-vertical-bottom:before {\n  content: \"\\ef4e\";\n}\n\n.bx-objects-vertical-center:before {\n  content: \"\\ef4f\";\n}\n\n.bx-objects-vertical-top:before {\n  content: \"\\ef50\";\n}\n\n.bx-rfid:before {\n  content: \"\\ef51\";\n}\n\n.bx-shield-minus:before {\n  content: \"\\ef52\";\n}\n\n.bx-shield-plus:before {\n  content: \"\\ef53\";\n}\n\n.bx-shower:before {\n  content: \"\\ef54\";\n}\n\n.bx-sushi:before {\n  content: \"\\ef55\";\n}\n\n.bx-universal-access:before {\n  content: \"\\ef56\";\n}\n\n.bx-vertical-bottom:before {\n  content: \"\\ef57\";\n}\n\n.bx-vertical-top:before {\n  content: \"\\ef58\";\n}\n\n.bxl-graphql:before {\n  content: \"\\ef59\";\n}\n\n.bxl-typescript:before {\n  content: \"\\ef5a\";\n}\n\n.bxs-color:before {\n  content: \"\\ef39\";\n}\n\n.bx-reflect-horizontal:before {\n  content: \"\\ef3a\";\n}\n\n.bx-reflect-vertical:before {\n  content: \"\\ef3b\";\n}\n\n.bx-color:before {\n  content: \"\\ef3c\";\n}\n\n.bxl-mongodb:before {\n  content: \"\\ef3d\";\n}\n\n.bxl-postgresql:before {\n  content: \"\\ef3e\";\n}\n\n.bxl-deezer:before {\n  content: \"\\ef3f\";\n}\n\n.bxs-hard-hat:before {\n  content: \"\\ef2a\";\n}\n\n.bxs-home-alt-2:before {\n  content: \"\\ef2b\";\n}\n\n.bxs-cheese:before {\n  content: \"\\ef2c\";\n}\n\n.bx-home-alt-2:before {\n  content: \"\\ef2d\";\n}\n\n.bx-hard-hat:before {\n  content: \"\\ef2e\";\n}\n\n.bx-cheese:before {\n  content: \"\\ef2f\";\n}\n\n.bx-cart-add:before {\n  content: \"\\ef30\";\n}\n\n.bx-cart-download:before {\n  content: \"\\ef31\";\n}\n\n.bx-no-signal:before {\n  content: \"\\ef32\";\n}\n\n.bx-signal-1:before {\n  content: \"\\ef33\";\n}\n\n.bx-signal-2:before {\n  content: \"\\ef34\";\n}\n\n.bx-signal-3:before {\n  content: \"\\ef35\";\n}\n\n.bx-signal-4:before {\n  content: \"\\ef36\";\n}\n\n.bx-signal-5:before {\n  content: \"\\ef37\";\n}\n\n.bxl-xing:before {\n  content: \"\\ef38\";\n}\n\n.bxl-meta:before {\n  content: \"\\ef27\";\n}\n\n.bx-lemon:before {\n  content: \"\\ef28\";\n}\n\n.bxs-lemon:before {\n  content: \"\\ef29\";\n}\n\n.bx-cricket-ball:before {\n  content: \"\\ef0c\";\n}\n\n.bx-baguette:before {\n  content: \"\\ef0d\";\n}\n\n.bx-bowl-hot:before {\n  content: \"\\ef0e\";\n}\n\n.bx-bowl-rice:before {\n  content: \"\\ef0f\";\n}\n\n.bx-cable-car:before {\n  content: \"\\ef10\";\n}\n\n.bx-candles:before {\n  content: \"\\ef11\";\n}\n\n.bx-circle-half:before {\n  content: \"\\ef12\";\n}\n\n.bx-circle-quarter:before {\n  content: \"\\ef13\";\n}\n\n.bx-circle-three-quarter:before {\n  content: \"\\ef14\";\n}\n\n.bx-cross:before {\n  content: \"\\ef15\";\n}\n\n.bx-fork:before {\n  content: \"\\ef16\";\n}\n\n.bx-knife:before {\n  content: \"\\ef17\";\n}\n\n.bx-money-withdraw:before {\n  content: \"\\ef18\";\n}\n\n.bx-popsicle:before {\n  content: \"\\ef19\";\n}\n\n.bx-scatter-chart:before {\n  content: \"\\ef1a\";\n}\n\n.bxs-baguette:before {\n  content: \"\\ef1b\";\n}\n\n.bxs-bowl-hot:before {\n  content: \"\\ef1c\";\n}\n\n.bxs-bowl-rice:before {\n  content: \"\\ef1d\";\n}\n\n.bxs-cable-car:before {\n  content: \"\\ef1e\";\n}\n\n.bxs-circle-half:before {\n  content: \"\\ef1f\";\n}\n\n.bxs-circle-quarter:before {\n  content: \"\\ef20\";\n}\n\n.bxs-circle-three-quarter:before {\n  content: \"\\ef21\";\n}\n\n.bxs-cricket-ball:before {\n  content: \"\\ef22\";\n}\n\n.bxs-invader:before {\n  content: \"\\ef23\";\n}\n\n.bx-male-female:before {\n  content: \"\\ef24\";\n}\n\n.bxs-popsicle:before {\n  content: \"\\ef25\";\n}\n\n.bxs-tree-alt:before {\n  content: \"\\ef26\";\n}\n\n.bxl-venmo:before {\n  content: \"\\e900\";\n}\n\n.bxl-upwork:before {\n  content: \"\\e901\";\n}\n\n.bxl-netlify:before {\n  content: \"\\e902\";\n}\n\n.bxl-java:before {\n  content: \"\\e903\";\n}\n\n.bxl-heroku:before {\n  content: \"\\e904\";\n}\n\n.bxl-go-lang:before {\n  content: \"\\e905\";\n}\n\n.bxl-gmail:before {\n  content: \"\\e906\";\n}\n\n.bxl-flask:before {\n  content: \"\\e907\";\n}\n\n.bxl-99designs:before {\n  content: \"\\e908\";\n}\n\n.bxl-500px:before {\n  content: \"\\e909\";\n}\n\n.bxl-adobe:before {\n  content: \"\\e90a\";\n}\n\n.bxl-airbnb:before {\n  content: \"\\e90b\";\n}\n\n.bxl-algolia:before {\n  content: \"\\e90c\";\n}\n\n.bxl-amazon:before {\n  content: \"\\e90d\";\n}\n\n.bxl-android:before {\n  content: \"\\e90e\";\n}\n\n.bxl-angular:before {\n  content: \"\\e90f\";\n}\n\n.bxl-apple:before {\n  content: \"\\e910\";\n}\n\n.bxl-audible:before {\n  content: \"\\e911\";\n}\n\n.bxl-aws:before {\n  content: \"\\e912\";\n}\n\n.bxl-baidu:before {\n  content: \"\\e913\";\n}\n\n.bxl-behance:before {\n  content: \"\\e914\";\n}\n\n.bxl-bing:before {\n  content: \"\\e915\";\n}\n\n.bxl-bitcoin:before {\n  content: \"\\e916\";\n}\n\n.bxl-blender:before {\n  content: \"\\e917\";\n}\n\n.bxl-blogger:before {\n  content: \"\\e918\";\n}\n\n.bxl-bootstrap:before {\n  content: \"\\e919\";\n}\n\n.bxl-chrome:before {\n  content: \"\\e91a\";\n}\n\n.bxl-codepen:before {\n  content: \"\\e91b\";\n}\n\n.bxl-c-plus-plus:before {\n  content: \"\\e91c\";\n}\n\n.bxl-creative-commons:before {\n  content: \"\\e91d\";\n}\n\n.bxl-css3:before {\n  content: \"\\e91e\";\n}\n\n.bxl-dailymotion:before {\n  content: \"\\e91f\";\n}\n\n.bxl-deviantart:before {\n  content: \"\\e920\";\n}\n\n.bxl-dev-to:before {\n  content: \"\\e921\";\n}\n\n.bxl-digg:before {\n  content: \"\\e922\";\n}\n\n.bxl-digitalocean:before {\n  content: \"\\e923\";\n}\n\n.bxl-discord:before {\n  content: \"\\e924\";\n}\n\n.bxl-discord-alt:before {\n  content: \"\\e925\";\n}\n\n.bxl-discourse:before {\n  content: \"\\e926\";\n}\n\n.bxl-django:before {\n  content: \"\\e927\";\n}\n\n.bxl-docker:before {\n  content: \"\\e928\";\n}\n\n.bxl-dribbble:before {\n  content: \"\\e929\";\n}\n\n.bxl-dropbox:before {\n  content: \"\\e92a\";\n}\n\n.bxl-drupal:before {\n  content: \"\\e92b\";\n}\n\n.bxl-ebay:before {\n  content: \"\\e92c\";\n}\n\n.bxl-edge:before {\n  content: \"\\e92d\";\n}\n\n.bxl-etsy:before {\n  content: \"\\e92e\";\n}\n\n.bxl-facebook:before {\n  content: \"\\e92f\";\n}\n\n.bxl-facebook-circle:before {\n  content: \"\\e930\";\n}\n\n.bxl-facebook-square:before {\n  content: \"\\e931\";\n}\n\n.bxl-figma:before {\n  content: \"\\e932\";\n}\n\n.bxl-firebase:before {\n  content: \"\\e933\";\n}\n\n.bxl-firefox:before {\n  content: \"\\e934\";\n}\n\n.bxl-flickr:before {\n  content: \"\\e935\";\n}\n\n.bxl-flickr-square:before {\n  content: \"\\e936\";\n}\n\n.bxl-flutter:before {\n  content: \"\\e937\";\n}\n\n.bxl-foursquare:before {\n  content: \"\\e938\";\n}\n\n.bxl-git:before {\n  content: \"\\e939\";\n}\n\n.bxl-github:before {\n  content: \"\\e93a\";\n}\n\n.bxl-gitlab:before {\n  content: \"\\e93b\";\n}\n\n.bxl-google:before {\n  content: \"\\e93c\";\n}\n\n.bxl-google-cloud:before {\n  content: \"\\e93d\";\n}\n\n.bxl-google-plus:before {\n  content: \"\\e93e\";\n}\n\n.bxl-google-plus-circle:before {\n  content: \"\\e93f\";\n}\n\n.bxl-html5:before {\n  content: \"\\e940\";\n}\n\n.bxl-imdb:before {\n  content: \"\\e941\";\n}\n\n.bxl-instagram:before {\n  content: \"\\e942\";\n}\n\n.bxl-instagram-alt:before {\n  content: \"\\e943\";\n}\n\n.bxl-internet-explorer:before {\n  content: \"\\e944\";\n}\n\n.bxl-invision:before {\n  content: \"\\e945\";\n}\n\n.bxl-javascript:before {\n  content: \"\\e946\";\n}\n\n.bxl-joomla:before {\n  content: \"\\e947\";\n}\n\n.bxl-jquery:before {\n  content: \"\\e948\";\n}\n\n.bxl-jsfiddle:before {\n  content: \"\\e949\";\n}\n\n.bxl-kickstarter:before {\n  content: \"\\e94a\";\n}\n\n.bxl-kubernetes:before {\n  content: \"\\e94b\";\n}\n\n.bxl-less:before {\n  content: \"\\e94c\";\n}\n\n.bxl-linkedin:before {\n  content: \"\\e94d\";\n}\n\n.bxl-linkedin-square:before {\n  content: \"\\e94e\";\n}\n\n.bxl-magento:before {\n  content: \"\\e94f\";\n}\n\n.bxl-mailchimp:before {\n  content: \"\\e950\";\n}\n\n.bxl-markdown:before {\n  content: \"\\e951\";\n}\n\n.bxl-mastercard:before {\n  content: \"\\e952\";\n}\n\n.bxl-mastodon:before {\n  content: \"\\e953\";\n}\n\n.bxl-medium:before {\n  content: \"\\e954\";\n}\n\n.bxl-medium-old:before {\n  content: \"\\e955\";\n}\n\n.bxl-medium-square:before {\n  content: \"\\e956\";\n}\n\n.bxl-messenger:before {\n  content: \"\\e957\";\n}\n\n.bxl-microsoft:before {\n  content: \"\\e958\";\n}\n\n.bxl-microsoft-teams:before {\n  content: \"\\e959\";\n}\n\n.bxl-nodejs:before {\n  content: \"\\e95a\";\n}\n\n.bxl-ok-ru:before {\n  content: \"\\e95b\";\n}\n\n.bxl-opera:before {\n  content: \"\\e95c\";\n}\n\n.bxl-patreon:before {\n  content: \"\\e95d\";\n}\n\n.bxl-paypal:before {\n  content: \"\\e95e\";\n}\n\n.bxl-periscope:before {\n  content: \"\\e95f\";\n}\n\n.bxl-php:before {\n  content: \"\\e960\";\n}\n\n.bxl-pinterest:before {\n  content: \"\\e961\";\n}\n\n.bxl-pinterest-alt:before {\n  content: \"\\e962\";\n}\n\n.bxl-play-store:before {\n  content: \"\\e963\";\n}\n\n.bxl-pocket:before {\n  content: \"\\e964\";\n}\n\n.bxl-product-hunt:before {\n  content: \"\\e965\";\n}\n\n.bxl-python:before {\n  content: \"\\e966\";\n}\n\n.bxl-quora:before {\n  content: \"\\e967\";\n}\n\n.bxl-react:before {\n  content: \"\\e968\";\n}\n\n.bxl-redbubble:before {\n  content: \"\\e969\";\n}\n\n.bxl-reddit:before {\n  content: \"\\e96a\";\n}\n\n.bxl-redux:before {\n  content: \"\\e96b\";\n}\n\n.bxl-sass:before {\n  content: \"\\e96c\";\n}\n\n.bxl-shopify:before {\n  content: \"\\e96d\";\n}\n\n.bxl-sketch:before {\n  content: \"\\e96e\";\n}\n\n.bxl-skype:before {\n  content: \"\\e96f\";\n}\n\n.bxl-slack:before {\n  content: \"\\e970\";\n}\n\n.bxl-slack-old:before {\n  content: \"\\e971\";\n}\n\n.bxl-snapchat:before {\n  content: \"\\e972\";\n}\n\n.bxl-soundcloud:before {\n  content: \"\\e973\";\n}\n\n.bxl-spotify:before {\n  content: \"\\e974\";\n}\n\n.bxl-spring-boot:before {\n  content: \"\\e975\";\n}\n\n.bxl-squarespace:before {\n  content: \"\\e976\";\n}\n\n.bxl-stack-overflow:before {\n  content: \"\\e977\";\n}\n\n.bxl-steam:before {\n  content: \"\\e978\";\n}\n\n.bxl-stripe:before {\n  content: \"\\e979\";\n}\n\n.bxl-tailwind-css:before {\n  content: \"\\e97a\";\n}\n\n.bxl-telegram:before {\n  content: \"\\e97b\";\n}\n\n.bxl-tiktok:before {\n  content: \"\\e97c\";\n}\n\n.bxl-trello:before {\n  content: \"\\e97d\";\n}\n\n.bxl-trip-advisor:before {\n  content: \"\\e97e\";\n}\n\n.bxl-tumblr:before {\n  content: \"\\e97f\";\n}\n\n.bxl-tux:before {\n  content: \"\\e980\";\n}\n\n.bxl-twitch:before {\n  content: \"\\e981\";\n}\n\n.bxl-twitter:before {\n  content: \"\\e982\";\n}\n\n.bxl-unity:before {\n  content: \"\\e983\";\n}\n\n.bxl-unsplash:before {\n  content: \"\\e984\";\n}\n\n.bxl-vimeo:before {\n  content: \"\\e985\";\n}\n\n.bxl-visa:before {\n  content: \"\\e986\";\n}\n\n.bxl-visual-studio:before {\n  content: \"\\e987\";\n}\n\n.bxl-vk:before {\n  content: \"\\e988\";\n}\n\n.bxl-vuejs:before {\n  content: \"\\e989\";\n}\n\n.bxl-whatsapp:before {\n  content: \"\\e98a\";\n}\n\n.bxl-whatsapp-square:before {\n  content: \"\\e98b\";\n}\n\n.bxl-wikipedia:before {\n  content: \"\\e98c\";\n}\n\n.bxl-windows:before {\n  content: \"\\e98d\";\n}\n\n.bxl-wix:before {\n  content: \"\\e98e\";\n}\n\n.bxl-wordpress:before {\n  content: \"\\e98f\";\n}\n\n.bxl-yahoo:before {\n  content: \"\\e990\";\n}\n\n.bxl-yelp:before {\n  content: \"\\e991\";\n}\n\n.bxl-youtube:before {\n  content: \"\\e992\";\n}\n\n.bxl-zoom:before {\n  content: \"\\e993\";\n}\n\n.bx-collapse-alt:before {\n  content: \"\\e994\";\n}\n\n.bx-collapse-horizontal:before {\n  content: \"\\e995\";\n}\n\n.bx-collapse-vertical:before {\n  content: \"\\e996\";\n}\n\n.bx-expand-horizontal:before {\n  content: \"\\e997\";\n}\n\n.bx-expand-vertical:before {\n  content: \"\\e998\";\n}\n\n.bx-injection:before {\n  content: \"\\e999\";\n}\n\n.bx-leaf:before {\n  content: \"\\e99a\";\n}\n\n.bx-math:before {\n  content: \"\\e99b\";\n}\n\n.bx-party:before {\n  content: \"\\e99c\";\n}\n\n.bx-abacus:before {\n  content: \"\\e99d\";\n}\n\n.bx-accessibility:before {\n  content: \"\\e99e\";\n}\n\n.bx-add-to-queue:before {\n  content: \"\\e99f\";\n}\n\n.bx-adjust:before {\n  content: \"\\e9a0\";\n}\n\n.bx-alarm:before {\n  content: \"\\e9a1\";\n}\n\n.bx-alarm-add:before {\n  content: \"\\e9a2\";\n}\n\n.bx-alarm-exclamation:before {\n  content: \"\\e9a3\";\n}\n\n.bx-alarm-off:before {\n  content: \"\\e9a4\";\n}\n\n.bx-alarm-snooze:before {\n  content: \"\\e9a5\";\n}\n\n.bx-album:before {\n  content: \"\\e9a6\";\n}\n\n.bx-align-justify:before {\n  content: \"\\e9a7\";\n}\n\n.bx-align-left:before {\n  content: \"\\e9a8\";\n}\n\n.bx-align-middle:before {\n  content: \"\\e9a9\";\n}\n\n.bx-align-right:before {\n  content: \"\\e9aa\";\n}\n\n.bx-analyse:before {\n  content: \"\\e9ab\";\n}\n\n.bx-anchor:before {\n  content: \"\\e9ac\";\n}\n\n.bx-angry:before {\n  content: \"\\e9ad\";\n}\n\n.bx-aperture:before {\n  content: \"\\e9ae\";\n}\n\n.bx-arch:before {\n  content: \"\\e9af\";\n}\n\n.bx-archive:before {\n  content: \"\\e9b0\";\n}\n\n.bx-archive-in:before {\n  content: \"\\e9b1\";\n}\n\n.bx-archive-out:before {\n  content: \"\\e9b2\";\n}\n\n.bx-area:before {\n  content: \"\\e9b3\";\n}\n\n.bx-arrow-back:before {\n  content: \"\\e9b4\";\n}\n\n.bx-arrow-from-bottom:before {\n  content: \"\\e9b5\";\n}\n\n.bx-arrow-from-left:before {\n  content: \"\\e9b6\";\n}\n\n.bx-arrow-from-right:before {\n  content: \"\\e9b7\";\n}\n\n.bx-arrow-from-top:before {\n  content: \"\\e9b8\";\n}\n\n.bx-arrow-to-bottom:before {\n  content: \"\\e9b9\";\n}\n\n.bx-arrow-to-left:before {\n  content: \"\\e9ba\";\n}\n\n.bx-arrow-to-right:before {\n  content: \"\\e9bb\";\n}\n\n.bx-arrow-to-top:before {\n  content: \"\\e9bc\";\n}\n\n.bx-at:before {\n  content: \"\\e9bd\";\n}\n\n.bx-atom:before {\n  content: \"\\e9be\";\n}\n\n.bx-award:before {\n  content: \"\\e9bf\";\n}\n\n.bx-badge:before {\n  content: \"\\e9c0\";\n}\n\n.bx-badge-check:before {\n  content: \"\\e9c1\";\n}\n\n.bx-ball:before {\n  content: \"\\e9c2\";\n}\n\n.bx-band-aid:before {\n  content: \"\\e9c3\";\n}\n\n.bx-bar-chart:before {\n  content: \"\\e9c4\";\n}\n\n.bx-bar-chart-alt:before {\n  content: \"\\e9c5\";\n}\n\n.bx-bar-chart-alt-2:before {\n  content: \"\\e9c6\";\n}\n\n.bx-bar-chart-square:before {\n  content: \"\\e9c7\";\n}\n\n.bx-barcode:before {\n  content: \"\\e9c8\";\n}\n\n.bx-barcode-reader:before {\n  content: \"\\e9c9\";\n}\n\n.bx-baseball:before {\n  content: \"\\e9ca\";\n}\n\n.bx-basket:before {\n  content: \"\\e9cb\";\n}\n\n.bx-basketball:before {\n  content: \"\\e9cc\";\n}\n\n.bx-bath:before {\n  content: \"\\e9cd\";\n}\n\n.bx-battery:before {\n  content: \"\\e9ce\";\n}\n\n.bx-bed:before {\n  content: \"\\e9cf\";\n}\n\n.bx-been-here:before {\n  content: \"\\e9d0\";\n}\n\n.bx-beer:before {\n  content: \"\\e9d1\";\n}\n\n.bx-bell:before {\n  content: \"\\e9d2\";\n}\n\n.bx-bell-minus:before {\n  content: \"\\e9d3\";\n}\n\n.bx-bell-off:before {\n  content: \"\\e9d4\";\n}\n\n.bx-bell-plus:before {\n  content: \"\\e9d5\";\n}\n\n.bx-bible:before {\n  content: \"\\e9d6\";\n}\n\n.bx-bitcoin:before {\n  content: \"\\e9d7\";\n}\n\n.bx-blanket:before {\n  content: \"\\e9d8\";\n}\n\n.bx-block:before {\n  content: \"\\e9d9\";\n}\n\n.bx-bluetooth:before {\n  content: \"\\e9da\";\n}\n\n.bx-body:before {\n  content: \"\\e9db\";\n}\n\n.bx-bold:before {\n  content: \"\\e9dc\";\n}\n\n.bx-bolt-circle:before {\n  content: \"\\e9dd\";\n}\n\n.bx-bomb:before {\n  content: \"\\e9de\";\n}\n\n.bx-bone:before {\n  content: \"\\e9df\";\n}\n\n.bx-bong:before {\n  content: \"\\e9e0\";\n}\n\n.bx-book:before {\n  content: \"\\e9e1\";\n}\n\n.bx-book-add:before {\n  content: \"\\e9e2\";\n}\n\n.bx-book-alt:before {\n  content: \"\\e9e3\";\n}\n\n.bx-book-bookmark:before {\n  content: \"\\e9e4\";\n}\n\n.bx-book-content:before {\n  content: \"\\e9e5\";\n}\n\n.bx-book-heart:before {\n  content: \"\\e9e6\";\n}\n\n.bx-bookmark:before {\n  content: \"\\e9e7\";\n}\n\n.bx-bookmark-alt:before {\n  content: \"\\e9e8\";\n}\n\n.bx-bookmark-alt-minus:before {\n  content: \"\\e9e9\";\n}\n\n.bx-bookmark-alt-plus:before {\n  content: \"\\e9ea\";\n}\n\n.bx-bookmark-heart:before {\n  content: \"\\e9eb\";\n}\n\n.bx-bookmark-minus:before {\n  content: \"\\e9ec\";\n}\n\n.bx-bookmark-plus:before {\n  content: \"\\e9ed\";\n}\n\n.bx-bookmarks:before {\n  content: \"\\e9ee\";\n}\n\n.bx-book-open:before {\n  content: \"\\e9ef\";\n}\n\n.bx-book-reader:before {\n  content: \"\\e9f0\";\n}\n\n.bx-border-all:before {\n  content: \"\\e9f1\";\n}\n\n.bx-border-bottom:before {\n  content: \"\\e9f2\";\n}\n\n.bx-border-inner:before {\n  content: \"\\e9f3\";\n}\n\n.bx-border-left:before {\n  content: \"\\e9f4\";\n}\n\n.bx-border-none:before {\n  content: \"\\e9f5\";\n}\n\n.bx-border-outer:before {\n  content: \"\\e9f6\";\n}\n\n.bx-border-radius:before {\n  content: \"\\e9f7\";\n}\n\n.bx-border-right:before {\n  content: \"\\e9f8\";\n}\n\n.bx-border-top:before {\n  content: \"\\e9f9\";\n}\n\n.bx-bot:before {\n  content: \"\\e9fa\";\n}\n\n.bx-bowling-ball:before {\n  content: \"\\e9fb\";\n}\n\n.bx-box:before {\n  content: \"\\e9fc\";\n}\n\n.bx-bracket:before {\n  content: \"\\e9fd\";\n}\n\n.bx-braille:before {\n  content: \"\\e9fe\";\n}\n\n.bx-brain:before {\n  content: \"\\e9ff\";\n}\n\n.bx-briefcase:before {\n  content: \"\\ea00\";\n}\n\n.bx-briefcase-alt:before {\n  content: \"\\ea01\";\n}\n\n.bx-briefcase-alt-2:before {\n  content: \"\\ea02\";\n}\n\n.bx-brightness:before {\n  content: \"\\ea03\";\n}\n\n.bx-brightness-half:before {\n  content: \"\\ea04\";\n}\n\n.bx-broadcast:before {\n  content: \"\\ea05\";\n}\n\n.bx-brush:before {\n  content: \"\\ea06\";\n}\n\n.bx-brush-alt:before {\n  content: \"\\ea07\";\n}\n\n.bx-bug:before {\n  content: \"\\ea08\";\n}\n\n.bx-bug-alt:before {\n  content: \"\\ea09\";\n}\n\n.bx-building:before {\n  content: \"\\ea0a\";\n}\n\n.bx-building-house:before {\n  content: \"\\ea0b\";\n}\n\n.bx-buildings:before {\n  content: \"\\ea0c\";\n}\n\n.bx-bulb:before {\n  content: \"\\ea0d\";\n}\n\n.bx-bullseye:before {\n  content: \"\\ea0e\";\n}\n\n.bx-buoy:before {\n  content: \"\\ea0f\";\n}\n\n.bx-bus:before {\n  content: \"\\ea10\";\n}\n\n.bx-bus-school:before {\n  content: \"\\ea11\";\n}\n\n.bx-cabinet:before {\n  content: \"\\ea12\";\n}\n\n.bx-cake:before {\n  content: \"\\ea13\";\n}\n\n.bx-calculator:before {\n  content: \"\\ea14\";\n}\n\n.bx-calendar:before {\n  content: \"\\ea15\";\n}\n\n.bx-calendar-alt:before {\n  content: \"\\ea16\";\n}\n\n.bx-calendar-check:before {\n  content: \"\\ea17\";\n}\n\n.bx-calendar-edit:before {\n  content: \"\\ea18\";\n}\n\n.bx-calendar-event:before {\n  content: \"\\ea19\";\n}\n\n.bx-calendar-exclamation:before {\n  content: \"\\ea1a\";\n}\n\n.bx-calendar-heart:before {\n  content: \"\\ea1b\";\n}\n\n.bx-calendar-minus:before {\n  content: \"\\ea1c\";\n}\n\n.bx-calendar-plus:before {\n  content: \"\\ea1d\";\n}\n\n.bx-calendar-star:before {\n  content: \"\\ea1e\";\n}\n\n.bx-calendar-week:before {\n  content: \"\\ea1f\";\n}\n\n.bx-calendar-x:before {\n  content: \"\\ea20\";\n}\n\n.bx-camera:before {\n  content: \"\\ea21\";\n}\n\n.bx-camera-home:before {\n  content: \"\\ea22\";\n}\n\n.bx-camera-movie:before {\n  content: \"\\ea23\";\n}\n\n.bx-camera-off:before {\n  content: \"\\ea24\";\n}\n\n.bx-capsule:before {\n  content: \"\\ea25\";\n}\n\n.bx-captions:before {\n  content: \"\\ea26\";\n}\n\n.bx-car:before {\n  content: \"\\ea27\";\n}\n\n.bx-card:before {\n  content: \"\\ea28\";\n}\n\n.bx-caret-down:before {\n  content: \"\\ea29\";\n}\n\n.bx-caret-down-circle:before {\n  content: \"\\ea2a\";\n}\n\n.bx-caret-down-square:before {\n  content: \"\\ea2b\";\n}\n\n.bx-caret-left:before {\n  content: \"\\ea2c\";\n}\n\n.bx-caret-left-circle:before {\n  content: \"\\ea2d\";\n}\n\n.bx-caret-left-square:before {\n  content: \"\\ea2e\";\n}\n\n.bx-caret-right:before {\n  content: \"\\ea2f\";\n}\n\n.bx-caret-right-circle:before {\n  content: \"\\ea30\";\n}\n\n.bx-caret-right-square:before {\n  content: \"\\ea31\";\n}\n\n.bx-caret-up:before {\n  content: \"\\ea32\";\n}\n\n.bx-caret-up-circle:before {\n  content: \"\\ea33\";\n}\n\n.bx-caret-up-square:before {\n  content: \"\\ea34\";\n}\n\n.bx-carousel:before {\n  content: \"\\ea35\";\n}\n\n.bx-cart:before {\n  content: \"\\ea36\";\n}\n\n.bx-cart-alt:before {\n  content: \"\\ea37\";\n}\n\n.bx-cast:before {\n  content: \"\\ea38\";\n}\n\n.bx-category:before {\n  content: \"\\ea39\";\n}\n\n.bx-category-alt:before {\n  content: \"\\ea3a\";\n}\n\n.bx-cctv:before {\n  content: \"\\ea3b\";\n}\n\n.bx-certification:before {\n  content: \"\\ea3c\";\n}\n\n.bx-chair:before {\n  content: \"\\ea3d\";\n}\n\n.bx-chalkboard:before {\n  content: \"\\ea3e\";\n}\n\n.bx-chart:before {\n  content: \"\\ea3f\";\n}\n\n.bx-chat:before {\n  content: \"\\ea40\";\n}\n\n.bx-check:before {\n  content: \"\\ea41\";\n}\n\n.bx-checkbox:before {\n  content: \"\\ea42\";\n}\n\n.bx-checkbox-checked:before {\n  content: \"\\ea43\";\n}\n\n.bx-checkbox-minus:before {\n  content: \"\\ea44\";\n}\n\n.bx-checkbox-square:before {\n  content: \"\\ea45\";\n}\n\n.bx-check-circle:before {\n  content: \"\\ea46\";\n}\n\n.bx-check-double:before {\n  content: \"\\ea47\";\n}\n\n.bx-check-shield:before {\n  content: \"\\ea48\";\n}\n\n.bx-check-square:before {\n  content: \"\\ea49\";\n}\n\n.bx-chevron-down:before {\n  content: \"\\ea4a\";\n}\n\n.bx-chevron-down-circle:before {\n  content: \"\\ea4b\";\n}\n\n.bx-chevron-down-square:before {\n  content: \"\\ea4c\";\n}\n\n.bx-chevron-left:before {\n  content: \"\\ea4d\";\n}\n\n.bx-chevron-left-circle:before {\n  content: \"\\ea4e\";\n}\n\n.bx-chevron-left-square:before {\n  content: \"\\ea4f\";\n}\n\n.bx-chevron-right:before {\n  content: \"\\ea50\";\n}\n\n.bx-chevron-right-circle:before {\n  content: \"\\ea51\";\n}\n\n.bx-chevron-right-square:before {\n  content: \"\\ea52\";\n}\n\n.bx-chevrons-down:before {\n  content: \"\\ea53\";\n}\n\n.bx-chevrons-left:before {\n  content: \"\\ea54\";\n}\n\n.bx-chevrons-right:before {\n  content: \"\\ea55\";\n}\n\n.bx-chevrons-up:before {\n  content: \"\\ea56\";\n}\n\n.bx-chevron-up:before {\n  content: \"\\ea57\";\n}\n\n.bx-chevron-up-circle:before {\n  content: \"\\ea58\";\n}\n\n.bx-chevron-up-square:before {\n  content: \"\\ea59\";\n}\n\n.bx-chip:before {\n  content: \"\\ea5a\";\n}\n\n.bx-church:before {\n  content: \"\\ea5b\";\n}\n\n.bx-circle:before {\n  content: \"\\ea5c\";\n}\n\n.bx-clinic:before {\n  content: \"\\ea5d\";\n}\n\n.bx-clipboard:before {\n  content: \"\\ea5e\";\n}\n\n.bx-closet:before {\n  content: \"\\ea5f\";\n}\n\n.bx-cloud:before {\n  content: \"\\ea60\";\n}\n\n.bx-cloud-download:before {\n  content: \"\\ea61\";\n}\n\n.bx-cloud-drizzle:before {\n  content: \"\\ea62\";\n}\n\n.bx-cloud-lightning:before {\n  content: \"\\ea63\";\n}\n\n.bx-cloud-light-rain:before {\n  content: \"\\ea64\";\n}\n\n.bx-cloud-rain:before {\n  content: \"\\ea65\";\n}\n\n.bx-cloud-snow:before {\n  content: \"\\ea66\";\n}\n\n.bx-cloud-upload:before {\n  content: \"\\ea67\";\n}\n\n.bx-code:before {\n  content: \"\\ea68\";\n}\n\n.bx-code-alt:before {\n  content: \"\\ea69\";\n}\n\n.bx-code-block:before {\n  content: \"\\ea6a\";\n}\n\n.bx-code-curly:before {\n  content: \"\\ea6b\";\n}\n\n.bx-coffee:before {\n  content: \"\\ea6c\";\n}\n\n.bx-coffee-togo:before {\n  content: \"\\ea6d\";\n}\n\n.bx-cog:before {\n  content: \"\\ea6e\";\n}\n\n.bx-coin:before {\n  content: \"\\ea6f\";\n}\n\n.bx-coin-stack:before {\n  content: \"\\ea70\";\n}\n\n.bx-collapse:before {\n  content: \"\\ea71\";\n}\n\n.bx-collection:before {\n  content: \"\\ea72\";\n}\n\n.bx-color-fill:before {\n  content: \"\\ea73\";\n}\n\n.bx-columns:before {\n  content: \"\\ea74\";\n}\n\n.bx-command:before {\n  content: \"\\ea75\";\n}\n\n.bx-comment:before {\n  content: \"\\ea76\";\n}\n\n.bx-comment-add:before {\n  content: \"\\ea77\";\n}\n\n.bx-comment-check:before {\n  content: \"\\ea78\";\n}\n\n.bx-comment-detail:before {\n  content: \"\\ea79\";\n}\n\n.bx-comment-dots:before {\n  content: \"\\ea7a\";\n}\n\n.bx-comment-edit:before {\n  content: \"\\ea7b\";\n}\n\n.bx-comment-error:before {\n  content: \"\\ea7c\";\n}\n\n.bx-comment-minus:before {\n  content: \"\\ea7d\";\n}\n\n.bx-comment-x:before {\n  content: \"\\ea7e\";\n}\n\n.bx-compass:before {\n  content: \"\\ea7f\";\n}\n\n.bx-confused:before {\n  content: \"\\ea80\";\n}\n\n.bx-conversation:before {\n  content: \"\\ea81\";\n}\n\n.bx-cookie:before {\n  content: \"\\ea82\";\n}\n\n.bx-cool:before {\n  content: \"\\ea83\";\n}\n\n.bx-copy:before {\n  content: \"\\ea84\";\n}\n\n.bx-copy-alt:before {\n  content: \"\\ea85\";\n}\n\n.bx-copyright:before {\n  content: \"\\ea86\";\n}\n\n.bx-credit-card:before {\n  content: \"\\ea87\";\n}\n\n.bx-credit-card-alt:before {\n  content: \"\\ea88\";\n}\n\n.bx-credit-card-front:before {\n  content: \"\\ea89\";\n}\n\n.bx-crop:before {\n  content: \"\\ea8a\";\n}\n\n.bx-crosshair:before {\n  content: \"\\ea8b\";\n}\n\n.bx-crown:before {\n  content: \"\\ea8c\";\n}\n\n.bx-cube:before {\n  content: \"\\ea8d\";\n}\n\n.bx-cube-alt:before {\n  content: \"\\ea8e\";\n}\n\n.bx-cuboid:before {\n  content: \"\\ea8f\";\n}\n\n.bx-current-location:before {\n  content: \"\\ea90\";\n}\n\n.bx-customize:before {\n  content: \"\\ea91\";\n}\n\n.bx-cut:before {\n  content: \"\\ea92\";\n}\n\n.bx-cycling:before {\n  content: \"\\ea93\";\n}\n\n.bx-cylinder:before {\n  content: \"\\ea94\";\n}\n\n.bx-data:before {\n  content: \"\\ea95\";\n}\n\n.bx-desktop:before {\n  content: \"\\ea96\";\n}\n\n.bx-detail:before {\n  content: \"\\ea97\";\n}\n\n.bx-devices:before {\n  content: \"\\ea98\";\n}\n\n.bx-dialpad:before {\n  content: \"\\ea99\";\n}\n\n.bx-dialpad-alt:before {\n  content: \"\\ea9a\";\n}\n\n.bx-diamond:before {\n  content: \"\\ea9b\";\n}\n\n.bx-dice-1:before {\n  content: \"\\ea9c\";\n}\n\n.bx-dice-2:before {\n  content: \"\\ea9d\";\n}\n\n.bx-dice-3:before {\n  content: \"\\ea9e\";\n}\n\n.bx-dice-4:before {\n  content: \"\\ea9f\";\n}\n\n.bx-dice-5:before {\n  content: \"\\eaa0\";\n}\n\n.bx-dice-6:before {\n  content: \"\\eaa1\";\n}\n\n.bx-directions:before {\n  content: \"\\eaa2\";\n}\n\n.bx-disc:before {\n  content: \"\\eaa3\";\n}\n\n.bx-dish:before {\n  content: \"\\eaa4\";\n}\n\n.bx-dislike:before {\n  content: \"\\eaa5\";\n}\n\n.bx-dizzy:before {\n  content: \"\\eaa6\";\n}\n\n.bx-dna:before {\n  content: \"\\eaa7\";\n}\n\n.bx-dock-bottom:before {\n  content: \"\\eaa8\";\n}\n\n.bx-dock-left:before {\n  content: \"\\eaa9\";\n}\n\n.bx-dock-right:before {\n  content: \"\\eaaa\";\n}\n\n.bx-dock-top:before {\n  content: \"\\eaab\";\n}\n\n.bx-dollar:before {\n  content: \"\\eaac\";\n}\n\n.bx-dollar-circle:before {\n  content: \"\\eaad\";\n}\n\n.bx-donate-blood:before {\n  content: \"\\eaae\";\n}\n\n.bx-donate-heart:before {\n  content: \"\\eaaf\";\n}\n\n.bx-door-open:before {\n  content: \"\\eab0\";\n}\n\n.bx-dots-horizontal:before {\n  content: \"\\eab1\";\n}\n\n.bx-dots-horizontal-rounded:before {\n  content: \"\\eab2\";\n}\n\n.bx-dots-vertical:before {\n  content: \"\\eab3\";\n}\n\n.bx-dots-vertical-rounded:before {\n  content: \"\\eab4\";\n}\n\n.bx-doughnut-chart:before {\n  content: \"\\eab5\";\n}\n\n.bx-down-arrow:before {\n  content: \"\\eab6\";\n}\n\n.bx-down-arrow-alt:before {\n  content: \"\\eab7\";\n}\n\n.bx-down-arrow-circle:before {\n  content: \"\\eab8\";\n}\n\n.bx-download:before {\n  content: \"\\eab9\";\n}\n\n.bx-downvote:before {\n  content: \"\\eaba\";\n}\n\n.bx-drink:before {\n  content: \"\\eabb\";\n}\n\n.bx-droplet:before {\n  content: \"\\eabc\";\n}\n\n.bx-dumbbell:before {\n  content: \"\\eabd\";\n}\n\n.bx-duplicate:before {\n  content: \"\\eabe\";\n}\n\n.bx-edit:before {\n  content: \"\\eabf\";\n}\n\n.bx-edit-alt:before {\n  content: \"\\eac0\";\n}\n\n.bx-envelope:before {\n  content: \"\\eac1\";\n}\n\n.bx-envelope-open:before {\n  content: \"\\eac2\";\n}\n\n.bx-equalizer:before {\n  content: \"\\eac3\";\n}\n\n.bx-eraser:before {\n  content: \"\\eac4\";\n}\n\n.bx-error:before {\n  content: \"\\eac5\";\n}\n\n.bx-error-alt:before {\n  content: \"\\eac6\";\n}\n\n.bx-error-circle:before {\n  content: \"\\eac7\";\n}\n\n.bx-euro:before {\n  content: \"\\eac8\";\n}\n\n.bx-exclude:before {\n  content: \"\\eac9\";\n}\n\n.bx-exit:before {\n  content: \"\\eaca\";\n}\n\n.bx-exit-fullscreen:before {\n  content: \"\\eacb\";\n}\n\n.bx-expand:before {\n  content: \"\\eacc\";\n}\n\n.bx-expand-alt:before {\n  content: \"\\eacd\";\n}\n\n.bx-export:before {\n  content: \"\\eace\";\n}\n\n.bx-extension:before {\n  content: \"\\eacf\";\n}\n\n.bx-face:before {\n  content: \"\\ead0\";\n}\n\n.bx-fast-forward:before {\n  content: \"\\ead1\";\n}\n\n.bx-fast-forward-circle:before {\n  content: \"\\ead2\";\n}\n\n.bx-female:before {\n  content: \"\\ead3\";\n}\n\n.bx-female-sign:before {\n  content: \"\\ead4\";\n}\n\n.bx-file:before {\n  content: \"\\ead5\";\n}\n\n.bx-file-blank:before {\n  content: \"\\ead6\";\n}\n\n.bx-file-find:before {\n  content: \"\\ead7\";\n}\n\n.bx-film:before {\n  content: \"\\ead8\";\n}\n\n.bx-filter:before {\n  content: \"\\ead9\";\n}\n\n.bx-filter-alt:before {\n  content: \"\\eada\";\n}\n\n.bx-fingerprint:before {\n  content: \"\\eadb\";\n}\n\n.bx-first-aid:before {\n  content: \"\\eadc\";\n}\n\n.bx-first-page:before {\n  content: \"\\eadd\";\n}\n\n.bx-flag:before {\n  content: \"\\eade\";\n}\n\n.bx-folder:before {\n  content: \"\\eadf\";\n}\n\n.bx-folder-minus:before {\n  content: \"\\eae0\";\n}\n\n.bx-folder-open:before {\n  content: \"\\eae1\";\n}\n\n.bx-folder-plus:before {\n  content: \"\\eae2\";\n}\n\n.bx-font:before {\n  content: \"\\eae3\";\n}\n\n.bx-font-color:before {\n  content: \"\\eae4\";\n}\n\n.bx-font-family:before {\n  content: \"\\eae5\";\n}\n\n.bx-font-size:before {\n  content: \"\\eae6\";\n}\n\n.bx-food-menu:before {\n  content: \"\\eae7\";\n}\n\n.bx-food-tag:before {\n  content: \"\\eae8\";\n}\n\n.bx-football:before {\n  content: \"\\eae9\";\n}\n\n.bx-fridge:before {\n  content: \"\\eaea\";\n}\n\n.bx-fullscreen:before {\n  content: \"\\eaeb\";\n}\n\n.bx-game:before {\n  content: \"\\eaec\";\n}\n\n.bx-gas-pump:before {\n  content: \"\\eaed\";\n}\n\n.bx-ghost:before {\n  content: \"\\eaee\";\n}\n\n.bx-gift:before {\n  content: \"\\eaef\";\n}\n\n.bx-git-branch:before {\n  content: \"\\eaf0\";\n}\n\n.bx-git-commit:before {\n  content: \"\\eaf1\";\n}\n\n.bx-git-compare:before {\n  content: \"\\eaf2\";\n}\n\n.bx-git-merge:before {\n  content: \"\\eaf3\";\n}\n\n.bx-git-pull-request:before {\n  content: \"\\eaf4\";\n}\n\n.bx-git-repo-forked:before {\n  content: \"\\eaf5\";\n}\n\n.bx-glasses:before {\n  content: \"\\eaf6\";\n}\n\n.bx-glasses-alt:before {\n  content: \"\\eaf7\";\n}\n\n.bx-globe:before {\n  content: \"\\eaf8\";\n}\n\n.bx-globe-alt:before {\n  content: \"\\eaf9\";\n}\n\n.bx-grid:before {\n  content: \"\\eafa\";\n}\n\n.bx-grid-alt:before {\n  content: \"\\eafb\";\n}\n\n.bx-grid-horizontal:before {\n  content: \"\\eafc\";\n}\n\n.bx-grid-small:before {\n  content: \"\\eafd\";\n}\n\n.bx-grid-vertical:before {\n  content: \"\\eafe\";\n}\n\n.bx-group:before {\n  content: \"\\eaff\";\n}\n\n.bx-handicap:before {\n  content: \"\\eb00\";\n}\n\n.bx-happy:before {\n  content: \"\\eb01\";\n}\n\n.bx-happy-alt:before {\n  content: \"\\eb02\";\n}\n\n.bx-happy-beaming:before {\n  content: \"\\eb03\";\n}\n\n.bx-happy-heart-eyes:before {\n  content: \"\\eb04\";\n}\n\n.bx-hash:before {\n  content: \"\\eb05\";\n}\n\n.bx-hdd:before {\n  content: \"\\eb06\";\n}\n\n.bx-heading:before {\n  content: \"\\eb07\";\n}\n\n.bx-headphone:before {\n  content: \"\\eb08\";\n}\n\n.bx-health:before {\n  content: \"\\eb09\";\n}\n\n.bx-heart:before {\n  content: \"\\eb0a\";\n}\n\n.bx-heart-circle:before {\n  content: \"\\eb0b\";\n}\n\n.bx-heart-square:before {\n  content: \"\\eb0c\";\n}\n\n.bx-help-circle:before {\n  content: \"\\eb0d\";\n}\n\n.bx-hide:before {\n  content: \"\\eb0e\";\n}\n\n.bx-highlight:before {\n  content: \"\\eb0f\";\n}\n\n.bx-history:before {\n  content: \"\\eb10\";\n}\n\n.bx-hive:before {\n  content: \"\\eb11\";\n}\n\n.bx-home:before {\n  content: \"\\eb12\";\n}\n\n.bx-home-alt:before {\n  content: \"\\eb13\";\n}\n\n.bx-home-circle:before {\n  content: \"\\eb14\";\n}\n\n.bx-home-heart:before {\n  content: \"\\eb15\";\n}\n\n.bx-home-smile:before {\n  content: \"\\eb16\";\n}\n\n.bx-horizontal-center:before {\n  content: \"\\eb17\";\n}\n\n.bx-hotel:before {\n  content: \"\\eb18\";\n}\n\n.bx-hourglass:before {\n  content: \"\\eb19\";\n}\n\n.bx-id-card:before {\n  content: \"\\eb1a\";\n}\n\n.bx-image:before {\n  content: \"\\eb1b\";\n}\n\n.bx-image-add:before {\n  content: \"\\eb1c\";\n}\n\n.bx-image-alt:before {\n  content: \"\\eb1d\";\n}\n\n.bx-images:before {\n  content: \"\\eb1e\";\n}\n\n.bx-import:before {\n  content: \"\\eb1f\";\n}\n\n.bx-infinite:before {\n  content: \"\\eb20\";\n}\n\n.bx-info-circle:before {\n  content: \"\\eb21\";\n}\n\n.bx-info-square:before {\n  content: \"\\eb22\";\n}\n\n.bx-intersect:before {\n  content: \"\\eb23\";\n}\n\n.bx-italic:before {\n  content: \"\\eb24\";\n}\n\n.bx-joystick:before {\n  content: \"\\eb25\";\n}\n\n.bx-joystick-alt:before {\n  content: \"\\eb26\";\n}\n\n.bx-joystick-button:before {\n  content: \"\\eb27\";\n}\n\n.bx-key:before {\n  content: \"\\eb28\";\n}\n\n.bx-label:before {\n  content: \"\\eb29\";\n}\n\n.bx-landscape:before {\n  content: \"\\eb2a\";\n}\n\n.bx-laptop:before {\n  content: \"\\eb2b\";\n}\n\n.bx-last-page:before {\n  content: \"\\eb2c\";\n}\n\n.bx-laugh:before {\n  content: \"\\eb2d\";\n}\n\n.bx-layer:before {\n  content: \"\\eb2e\";\n}\n\n.bx-layer-minus:before {\n  content: \"\\eb2f\";\n}\n\n.bx-layer-plus:before {\n  content: \"\\eb30\";\n}\n\n.bx-layout:before {\n  content: \"\\eb31\";\n}\n\n.bx-left-arrow:before {\n  content: \"\\eb32\";\n}\n\n.bx-left-arrow-alt:before {\n  content: \"\\eb33\";\n}\n\n.bx-left-arrow-circle:before {\n  content: \"\\eb34\";\n}\n\n.bx-left-down-arrow-circle:before {\n  content: \"\\eb35\";\n}\n\n.bx-left-indent:before {\n  content: \"\\eb36\";\n}\n\n.bx-left-top-arrow-circle:before {\n  content: \"\\eb37\";\n}\n\n.bx-library:before {\n  content: \"\\eb38\";\n}\n\n.bx-like:before {\n  content: \"\\eb39\";\n}\n\n.bx-line-chart:before {\n  content: \"\\eb3a\";\n}\n\n.bx-line-chart-down:before {\n  content: \"\\eb3b\";\n}\n\n.bx-link:before {\n  content: \"\\eb3c\";\n}\n\n.bx-link-alt:before {\n  content: \"\\eb3d\";\n}\n\n.bx-link-external:before {\n  content: \"\\eb3e\";\n}\n\n.bx-lira:before {\n  content: \"\\eb3f\";\n}\n\n.bx-list-check:before {\n  content: \"\\eb40\";\n}\n\n.bx-list-minus:before {\n  content: \"\\eb41\";\n}\n\n.bx-list-ol:before {\n  content: \"\\eb42\";\n}\n\n.bx-list-plus:before {\n  content: \"\\eb43\";\n}\n\n.bx-list-ul:before {\n  content: \"\\eb44\";\n}\n\n.bx-loader:before {\n  content: \"\\eb45\";\n}\n\n.bx-loader-alt:before {\n  content: \"\\eb46\";\n}\n\n.bx-loader-circle:before {\n  content: \"\\eb47\";\n}\n\n.bx-location-plus:before {\n  content: \"\\eb48\";\n}\n\n.bx-lock:before {\n  content: \"\\eb49\";\n}\n\n.bx-lock-alt:before {\n  content: \"\\eb4a\";\n}\n\n.bx-lock-open:before {\n  content: \"\\eb4b\";\n}\n\n.bx-lock-open-alt:before {\n  content: \"\\eb4c\";\n}\n\n.bx-log-in:before {\n  content: \"\\eb4d\";\n}\n\n.bx-log-in-circle:before {\n  content: \"\\eb4e\";\n}\n\n.bx-log-out:before {\n  content: \"\\eb4f\";\n}\n\n.bx-log-out-circle:before {\n  content: \"\\eb50\";\n}\n\n.bx-low-vision:before {\n  content: \"\\eb51\";\n}\n\n.bx-magnet:before {\n  content: \"\\eb52\";\n}\n\n.bx-mail-send:before {\n  content: \"\\eb53\";\n}\n\n.bx-male:before {\n  content: \"\\eb54\";\n}\n\n.bx-male-sign:before {\n  content: \"\\eb55\";\n}\n\n.bx-map:before {\n  content: \"\\eb56\";\n}\n\n.bx-map-alt:before {\n  content: \"\\eb57\";\n}\n\n.bx-map-pin:before {\n  content: \"\\eb58\";\n}\n\n.bx-mask:before {\n  content: \"\\eb59\";\n}\n\n.bx-medal:before {\n  content: \"\\eb5a\";\n}\n\n.bx-meh:before {\n  content: \"\\eb5b\";\n}\n\n.bx-meh-alt:before {\n  content: \"\\eb5c\";\n}\n\n.bx-meh-blank:before {\n  content: \"\\eb5d\";\n}\n\n.bx-memory-card:before {\n  content: \"\\eb5e\";\n}\n\n.bx-menu:before {\n  content: \"\\eb5f\";\n}\n\n.bx-menu-alt-left:before {\n  content: \"\\ef5b\";\n}\n\n.bx-menu-alt-right:before {\n  content: \"\\eb61\";\n}\n\n.bx-merge:before {\n  content: \"\\eb62\";\n}\n\n.bx-message:before {\n  content: \"\\eb63\";\n}\n\n.bx-message-add:before {\n  content: \"\\eb64\";\n}\n\n.bx-message-alt:before {\n  content: \"\\eb65\";\n}\n\n.bx-message-alt-add:before {\n  content: \"\\eb66\";\n}\n\n.bx-message-alt-check:before {\n  content: \"\\eb67\";\n}\n\n.bx-message-alt-detail:before {\n  content: \"\\eb68\";\n}\n\n.bx-message-alt-dots:before {\n  content: \"\\eb69\";\n}\n\n.bx-message-alt-edit:before {\n  content: \"\\eb6a\";\n}\n\n.bx-message-alt-error:before {\n  content: \"\\eb6b\";\n}\n\n.bx-message-alt-minus:before {\n  content: \"\\eb6c\";\n}\n\n.bx-message-alt-x:before {\n  content: \"\\eb6d\";\n}\n\n.bx-message-check:before {\n  content: \"\\eb6e\";\n}\n\n.bx-message-detail:before {\n  content: \"\\eb6f\";\n}\n\n.bx-message-dots:before {\n  content: \"\\eb70\";\n}\n\n.bx-message-edit:before {\n  content: \"\\eb71\";\n}\n\n.bx-message-error:before {\n  content: \"\\eb72\";\n}\n\n.bx-message-minus:before {\n  content: \"\\eb73\";\n}\n\n.bx-message-rounded:before {\n  content: \"\\eb74\";\n}\n\n.bx-message-rounded-add:before {\n  content: \"\\eb75\";\n}\n\n.bx-message-rounded-check:before {\n  content: \"\\eb76\";\n}\n\n.bx-message-rounded-detail:before {\n  content: \"\\eb77\";\n}\n\n.bx-message-rounded-dots:before {\n  content: \"\\eb78\";\n}\n\n.bx-message-rounded-edit:before {\n  content: \"\\ef5c\";\n}\n\n.bx-message-rounded-error:before {\n  content: \"\\eb7a\";\n}\n\n.bx-message-rounded-minus:before {\n  content: \"\\eb7b\";\n}\n\n.bx-message-rounded-x:before {\n  content: \"\\eb7c\";\n}\n\n.bx-message-square:before {\n  content: \"\\eb7d\";\n}\n\n.bx-message-square-add:before {\n  content: \"\\eb7e\";\n}\n\n.bx-message-square-check:before {\n  content: \"\\eb7f\";\n}\n\n.bx-message-square-detail:before {\n  content: \"\\eb80\";\n}\n\n.bx-message-square-dots:before {\n  content: \"\\eb81\";\n}\n\n.bx-message-square-edit:before {\n  content: \"\\eb82\";\n}\n\n.bx-message-square-error:before {\n  content: \"\\eb83\";\n}\n\n.bx-message-square-minus:before {\n  content: \"\\eb84\";\n}\n\n.bx-message-square-x:before {\n  content: \"\\eb85\";\n}\n\n.bx-message-x:before {\n  content: \"\\eb86\";\n}\n\n.bx-meteor:before {\n  content: \"\\eb87\";\n}\n\n.bx-microchip:before {\n  content: \"\\eb88\";\n}\n\n.bx-microphone:before {\n  content: \"\\eb89\";\n}\n\n.bx-microphone-off:before {\n  content: \"\\eb8a\";\n}\n\n.bx-minus:before {\n  content: \"\\eb8b\";\n}\n\n.bx-minus-back:before {\n  content: \"\\eb8c\";\n}\n\n.bx-minus-circle:before {\n  content: \"\\eb8d\";\n}\n\n.bx-minus-front:before {\n  content: \"\\eb8e\";\n}\n\n.bx-mobile:before {\n  content: \"\\eb8f\";\n}\n\n.bx-mobile-alt:before {\n  content: \"\\eb90\";\n}\n\n.bx-mobile-landscape:before {\n  content: \"\\eb91\";\n}\n\n.bx-mobile-vibration:before {\n  content: \"\\ef5d\";\n}\n\n.bx-money:before {\n  content: \"\\eb93\";\n}\n\n.bx-moon:before {\n  content: \"\\eb94\";\n}\n\n.bx-mouse:before {\n  content: \"\\eb95\";\n}\n\n.bx-mouse-alt:before {\n  content: \"\\eb96\";\n}\n\n.bx-move:before {\n  content: \"\\eb97\";\n}\n\n.bx-move-horizontal:before {\n  content: \"\\eb98\";\n}\n\n.bx-move-vertical:before {\n  content: \"\\eb99\";\n}\n\n.bx-movie:before {\n  content: \"\\eb9a\";\n}\n\n.bx-movie-play:before {\n  content: \"\\eb9b\";\n}\n\n.bx-music:before {\n  content: \"\\eb9c\";\n}\n\n.bx-navigation:before {\n  content: \"\\eb9d\";\n}\n\n.bx-network-chart:before {\n  content: \"\\eb9e\";\n}\n\n.bx-news:before {\n  content: \"\\eb9f\";\n}\n\n.bx-no-entry:before {\n  content: \"\\eba0\";\n}\n\n.bx-note:before {\n  content: \"\\eba1\";\n}\n\n.bx-notepad:before {\n  content: \"\\eba2\";\n}\n\n.bx-notification:before {\n  content: \"\\eba3\";\n}\n\n.bx-notification-off:before {\n  content: \"\\eba4\";\n}\n\n.bx-outline:before {\n  content: \"\\eba5\";\n}\n\n.bx-package:before {\n  content: \"\\eba6\";\n}\n\n.bx-paint:before {\n  content: \"\\eba7\";\n}\n\n.bx-paint-roll:before {\n  content: \"\\eba8\";\n}\n\n.bx-palette:before {\n  content: \"\\eba9\";\n}\n\n.bx-paperclip:before {\n  content: \"\\ebaa\";\n}\n\n.bx-paper-plane:before {\n  content: \"\\ef61\";\n}\n\n.bx-paragraph:before {\n  content: \"\\ebac\";\n}\n\n.bx-paste:before {\n  content: \"\\ebad\";\n}\n\n.bx-pause:before {\n  content: \"\\ebae\";\n}\n\n.bx-pause-circle:before {\n  content: \"\\ebaf\";\n}\n\n.bx-pen:before {\n  content: \"\\ebb0\";\n}\n\n.bx-pencil:before {\n  content: \"\\ebb1\";\n}\n\n.bx-phone:before {\n  content: \"\\ebb2\";\n}\n\n.bx-phone-call:before {\n  content: \"\\ebb3\";\n}\n\n.bx-phone-incoming:before {\n  content: \"\\ebb4\";\n}\n\n.bx-phone-off:before {\n  content: \"\\ebb5\";\n}\n\n.bx-phone-outgoing:before {\n  content: \"\\ebb6\";\n}\n\n.bx-photo-album:before {\n  content: \"\\ebb7\";\n}\n\n.bx-pie-chart:before {\n  content: \"\\ebb8\";\n}\n\n.bx-pie-chart-alt:before {\n  content: \"\\ebb9\";\n}\n\n.bx-pie-chart-alt-2:before {\n  content: \"\\ebba\";\n}\n\n.bx-pin:before {\n  content: \"\\ebbb\";\n}\n\n.bx-planet:before {\n  content: \"\\ebbc\";\n}\n\n.bx-play:before {\n  content: \"\\ebbd\";\n}\n\n.bx-play-circle:before {\n  content: \"\\ebbe\";\n}\n\n.bx-plug:before {\n  content: \"\\ebbf\";\n}\n\n.bx-plus:before {\n  content: \"\\ebc0\";\n}\n\n.bx-plus-circle:before {\n  content: \"\\ebc1\";\n}\n\n.bx-plus-medical:before {\n  content: \"\\ebc2\";\n}\n\n.bx-podcast:before {\n  content: \"\\ebc3\";\n}\n\n.bx-pointer:before {\n  content: \"\\ef5e\";\n}\n\n.bx-poll:before {\n  content: \"\\ebc5\";\n}\n\n.bx-polygon:before {\n  content: \"\\ebc6\";\n}\n\n.bx-pound:before {\n  content: \"\\ebc7\";\n}\n\n.bx-power-off:before {\n  content: \"\\ebc8\";\n}\n\n.bx-printer:before {\n  content: \"\\ebc9\";\n}\n\n.bx-pulse:before {\n  content: \"\\ebca\";\n}\n\n.bx-purchase-tag:before {\n  content: \"\\ebcb\";\n}\n\n.bx-purchase-tag-alt:before {\n  content: \"\\ebcc\";\n}\n\n.bx-pyramid:before {\n  content: \"\\ebcd\";\n}\n\n.bx-qr:before {\n  content: \"\\ebce\";\n}\n\n.bx-qr-scan:before {\n  content: \"\\ebcf\";\n}\n\n.bx-question-mark:before {\n  content: \"\\ebd0\";\n}\n\n.bx-radar:before {\n  content: \"\\ebd1\";\n}\n\n.bx-radio:before {\n  content: \"\\ebd2\";\n}\n\n.bx-radio-circle:before {\n  content: \"\\ebd3\";\n}\n\n.bx-radio-circle-marked:before {\n  content: \"\\ebd4\";\n}\n\n.bx-receipt:before {\n  content: \"\\ebd5\";\n}\n\n.bx-rectangle:before {\n  content: \"\\ebd6\";\n}\n\n.bx-recycle:before {\n  content: \"\\ebd7\";\n}\n\n.bx-redo:before {\n  content: \"\\ebd8\";\n}\n\n.bx-refresh:before {\n  content: \"\\ebd9\";\n}\n\n.bx-registered:before {\n  content: \"\\ebda\";\n}\n\n.bx-rename:before {\n  content: \"\\ebdb\";\n}\n\n.bx-repeat:before {\n  content: \"\\ebdc\";\n}\n\n.bx-reply:before {\n  content: \"\\ef5f\";\n}\n\n.bx-reply-all:before {\n  content: \"\\ebde\";\n}\n\n.bx-repost:before {\n  content: \"\\ebdf\";\n}\n\n.bx-reset:before {\n  content: \"\\ebe0\";\n}\n\n.bx-restaurant:before {\n  content: \"\\ebe1\";\n}\n\n.bx-revision:before {\n  content: \"\\ebe2\";\n}\n\n.bx-rewind:before {\n  content: \"\\ebe3\";\n}\n\n.bx-rewind-circle:before {\n  content: \"\\ebe4\";\n}\n\n.bx-right-arrow:before {\n  content: \"\\ebe5\";\n}\n\n.bx-right-arrow-alt:before {\n  content: \"\\ebe6\";\n}\n\n.bx-right-arrow-circle:before {\n  content: \"\\ebe7\";\n}\n\n.bx-right-down-arrow-circle:before {\n  content: \"\\ebe8\";\n}\n\n.bx-right-indent:before {\n  content: \"\\ebe9\";\n}\n\n.bx-right-top-arrow-circle:before {\n  content: \"\\ebea\";\n}\n\n.bx-rocket:before {\n  content: \"\\ebeb\";\n}\n\n.bx-rotate-left:before {\n  content: \"\\ebec\";\n}\n\n.bx-rotate-right:before {\n  content: \"\\ebed\";\n}\n\n.bx-rss:before {\n  content: \"\\ebee\";\n}\n\n.bx-ruble:before {\n  content: \"\\ebef\";\n}\n\n.bx-ruler:before {\n  content: \"\\ebf0\";\n}\n\n.bx-run:before {\n  content: \"\\ebf1\";\n}\n\n.bx-rupee:before {\n  content: \"\\ebf2\";\n}\n\n.bx-sad:before {\n  content: \"\\ebf3\";\n}\n\n.bx-save:before {\n  content: \"\\ebf4\";\n}\n\n.bx-scan:before {\n  content: \"\\ebf5\";\n}\n\n.bx-screenshot:before {\n  content: \"\\ef60\";\n}\n\n.bx-search:before {\n  content: \"\\ebf7\";\n}\n\n.bx-search-alt:before {\n  content: \"\\ebf8\";\n}\n\n.bx-search-alt-2:before {\n  content: \"\\ebf9\";\n}\n\n.bx-selection:before {\n  content: \"\\ebfa\";\n}\n\n.bx-select-multiple:before {\n  content: \"\\ebfb\";\n}\n\n.bx-send:before {\n  content: \"\\ebfc\";\n}\n\n.bx-server:before {\n  content: \"\\ebfd\";\n}\n\n.bx-shape-circle:before {\n  content: \"\\ebfe\";\n}\n\n.bx-shape-polygon:before {\n  content: \"\\ebff\";\n}\n\n.bx-shape-square:before {\n  content: \"\\ec00\";\n}\n\n.bx-shape-triangle:before {\n  content: \"\\ec01\";\n}\n\n.bx-share:before {\n  content: \"\\ec02\";\n}\n\n.bx-share-alt:before {\n  content: \"\\ec03\";\n}\n\n.bx-shekel:before {\n  content: \"\\ec04\";\n}\n\n.bx-shield:before {\n  content: \"\\ec05\";\n}\n\n.bx-shield-alt:before {\n  content: \"\\ec06\";\n}\n\n.bx-shield-alt-2:before {\n  content: \"\\ec07\";\n}\n\n.bx-shield-quarter:before {\n  content: \"\\ec08\";\n}\n\n.bx-shield-x:before {\n  content: \"\\ec09\";\n}\n\n.bx-shocked:before {\n  content: \"\\ec0a\";\n}\n\n.bx-shopping-bag:before {\n  content: \"\\ec0b\";\n}\n\n.bx-show:before {\n  content: \"\\ec0c\";\n}\n\n.bx-show-alt:before {\n  content: \"\\ec0d\";\n}\n\n.bx-shuffle:before {\n  content: \"\\ec0e\";\n}\n\n.bx-sidebar:before {\n  content: \"\\ec0f\";\n}\n\n.bx-sitemap:before {\n  content: \"\\ec10\";\n}\n\n.bx-skip-next:before {\n  content: \"\\ec11\";\n}\n\n.bx-skip-next-circle:before {\n  content: \"\\ec12\";\n}\n\n.bx-skip-previous:before {\n  content: \"\\ec13\";\n}\n\n.bx-skip-previous-circle:before {\n  content: \"\\ec14\";\n}\n\n.bx-sleepy:before {\n  content: \"\\ec15\";\n}\n\n.bx-slider:before {\n  content: \"\\ec16\";\n}\n\n.bx-slider-alt:before {\n  content: \"\\ec17\";\n}\n\n.bx-slideshow:before {\n  content: \"\\ec18\";\n}\n\n.bx-smile:before {\n  content: \"\\ec19\";\n}\n\n.bx-sort:before {\n  content: \"\\ec1a\";\n}\n\n.bx-sort-alt-2:before {\n  content: \"\\ec1b\";\n}\n\n.bx-sort-a-z:before {\n  content: \"\\ec1c\";\n}\n\n.bx-sort-down:before {\n  content: \"\\ec1d\";\n}\n\n.bx-sort-up:before {\n  content: \"\\ec1e\";\n}\n\n.bx-sort-z-a:before {\n  content: \"\\ec1f\";\n}\n\n.bx-spa:before {\n  content: \"\\ec20\";\n}\n\n.bx-space-bar:before {\n  content: \"\\ec21\";\n}\n\n.bx-speaker:before {\n  content: \"\\ec22\";\n}\n\n.bx-spray-can:before {\n  content: \"\\ec23\";\n}\n\n.bx-spreadsheet:before {\n  content: \"\\ec24\";\n}\n\n.bx-square:before {\n  content: \"\\ec25\";\n}\n\n.bx-square-rounded:before {\n  content: \"\\ec26\";\n}\n\n.bx-star:before {\n  content: \"\\ec27\";\n}\n\n.bx-station:before {\n  content: \"\\ec28\";\n}\n\n.bx-stats:before {\n  content: \"\\ec29\";\n}\n\n.bx-sticker:before {\n  content: \"\\ec2a\";\n}\n\n.bx-stop:before {\n  content: \"\\ec2b\";\n}\n\n.bx-stop-circle:before {\n  content: \"\\ec2c\";\n}\n\n.bx-stopwatch:before {\n  content: \"\\ec2d\";\n}\n\n.bx-store:before {\n  content: \"\\ec2e\";\n}\n\n.bx-store-alt:before {\n  content: \"\\ec2f\";\n}\n\n.bx-street-view:before {\n  content: \"\\ec30\";\n}\n\n.bx-strikethrough:before {\n  content: \"\\ec31\";\n}\n\n.bx-subdirectory-left:before {\n  content: \"\\ec32\";\n}\n\n.bx-subdirectory-right:before {\n  content: \"\\ec33\";\n}\n\n.bx-sun:before {\n  content: \"\\ec34\";\n}\n\n.bx-support:before {\n  content: \"\\ec35\";\n}\n\n.bx-swim:before {\n  content: \"\\ec36\";\n}\n\n.bx-sync:before {\n  content: \"\\ec37\";\n}\n\n.bx-tab:before {\n  content: \"\\ec38\";\n}\n\n.bx-table:before {\n  content: \"\\ec39\";\n}\n\n.bx-tachometer:before {\n  content: \"\\ec3a\";\n}\n\n.bx-tag:before {\n  content: \"\\ec3b\";\n}\n\n.bx-tag-alt:before {\n  content: \"\\ec3c\";\n}\n\n.bx-target-lock:before {\n  content: \"\\ec3d\";\n}\n\n.bx-task:before {\n  content: \"\\ec3e\";\n}\n\n.bx-task-x:before {\n  content: \"\\ec3f\";\n}\n\n.bx-taxi:before {\n  content: \"\\ec40\";\n}\n\n.bx-tennis-ball:before {\n  content: \"\\ec41\";\n}\n\n.bx-terminal:before {\n  content: \"\\ec42\";\n}\n\n.bx-test-tube:before {\n  content: \"\\ec43\";\n}\n\n.bx-text:before {\n  content: \"\\ec44\";\n}\n\n.bx-time:before {\n  content: \"\\ec45\";\n}\n\n.bx-time-five:before {\n  content: \"\\ec46\";\n}\n\n.bx-timer:before {\n  content: \"\\ec47\";\n}\n\n.bx-tired:before {\n  content: \"\\ec48\";\n}\n\n.bx-toggle-left:before {\n  content: \"\\ec49\";\n}\n\n.bx-toggle-right:before {\n  content: \"\\ec4a\";\n}\n\n.bx-tone:before {\n  content: \"\\ec4b\";\n}\n\n.bx-traffic-cone:before {\n  content: \"\\ec4c\";\n}\n\n.bx-train:before {\n  content: \"\\ec4d\";\n}\n\n.bx-transfer:before {\n  content: \"\\ec4e\";\n}\n\n.bx-transfer-alt:before {\n  content: \"\\ec4f\";\n}\n\n.bx-trash:before {\n  content: \"\\ec50\";\n}\n\n.bx-trash-alt:before {\n  content: \"\\ec51\";\n}\n\n.bx-trending-down:before {\n  content: \"\\ec52\";\n}\n\n.bx-trending-up:before {\n  content: \"\\ec53\";\n}\n\n.bx-trim:before {\n  content: \"\\ec54\";\n}\n\n.bx-trip:before {\n  content: \"\\ec55\";\n}\n\n.bx-trophy:before {\n  content: \"\\ec56\";\n}\n\n.bx-tv:before {\n  content: \"\\ec57\";\n}\n\n.bx-underline:before {\n  content: \"\\ec58\";\n}\n\n.bx-undo:before {\n  content: \"\\ec59\";\n}\n\n.bx-unite:before {\n  content: \"\\ec5a\";\n}\n\n.bx-unlink:before {\n  content: \"\\ec5b\";\n}\n\n.bx-up-arrow:before {\n  content: \"\\ec5c\";\n}\n\n.bx-up-arrow-alt:before {\n  content: \"\\ec5d\";\n}\n\n.bx-up-arrow-circle:before {\n  content: \"\\ec5e\";\n}\n\n.bx-upload:before {\n  content: \"\\ec5f\";\n}\n\n.bx-upside-down:before {\n  content: \"\\ec60\";\n}\n\n.bx-upvote:before {\n  content: \"\\ec61\";\n}\n\n.bx-usb:before {\n  content: \"\\ec62\";\n}\n\n.bx-user:before {\n  content: \"\\ec63\";\n}\n\n.bx-user-check:before {\n  content: \"\\ec64\";\n}\n\n.bx-user-circle:before {\n  content: \"\\ec65\";\n}\n\n.bx-user-minus:before {\n  content: \"\\ec66\";\n}\n\n.bx-user-pin:before {\n  content: \"\\ec67\";\n}\n\n.bx-user-plus:before {\n  content: \"\\ec68\";\n}\n\n.bx-user-voice:before {\n  content: \"\\ec69\";\n}\n\n.bx-user-x:before {\n  content: \"\\ec6a\";\n}\n\n.bx-vector:before {\n  content: \"\\ec6b\";\n}\n\n.bx-vertical-center:before {\n  content: \"\\ec6c\";\n}\n\n.bx-vial:before {\n  content: \"\\ec6d\";\n}\n\n.bx-video:before {\n  content: \"\\ec6e\";\n}\n\n.bx-video-off:before {\n  content: \"\\ec6f\";\n}\n\n.bx-video-plus:before {\n  content: \"\\ec70\";\n}\n\n.bx-video-recording:before {\n  content: \"\\ec71\";\n}\n\n.bx-voicemail:before {\n  content: \"\\ec72\";\n}\n\n.bx-volume:before {\n  content: \"\\ec73\";\n}\n\n.bx-volume-full:before {\n  content: \"\\ec74\";\n}\n\n.bx-volume-low:before {\n  content: \"\\ec75\";\n}\n\n.bx-volume-mute:before {\n  content: \"\\ec76\";\n}\n\n.bx-walk:before {\n  content: \"\\ec77\";\n}\n\n.bx-wallet:before {\n  content: \"\\ec78\";\n}\n\n.bx-wallet-alt:before {\n  content: \"\\ec79\";\n}\n\n.bx-water:before {\n  content: \"\\ec7a\";\n}\n\n.bx-webcam:before {\n  content: \"\\ec7b\";\n}\n\n.bx-wifi:before {\n  content: \"\\ec7c\";\n}\n\n.bx-wifi-0:before {\n  content: \"\\ec7d\";\n}\n\n.bx-wifi-1:before {\n  content: \"\\ec7e\";\n}\n\n.bx-wifi-2:before {\n  content: \"\\ec7f\";\n}\n\n.bx-wifi-off:before {\n  content: \"\\ec80\";\n}\n\n.bx-wind:before {\n  content: \"\\ec81\";\n}\n\n.bx-window:before {\n  content: \"\\ec82\";\n}\n\n.bx-window-alt:before {\n  content: \"\\ec83\";\n}\n\n.bx-window-close:before {\n  content: \"\\ec84\";\n}\n\n.bx-window-open:before {\n  content: \"\\ec85\";\n}\n\n.bx-windows:before {\n  content: \"\\ec86\";\n}\n\n.bx-wine:before {\n  content: \"\\ec87\";\n}\n\n.bx-wink-smile:before {\n  content: \"\\ec88\";\n}\n\n.bx-wink-tongue:before {\n  content: \"\\ec89\";\n}\n\n.bx-won:before {\n  content: \"\\ec8a\";\n}\n\n.bx-world:before {\n  content: \"\\ec8b\";\n}\n\n.bx-wrench:before {\n  content: \"\\ec8c\";\n}\n\n.bx-x:before {\n  content: \"\\ec8d\";\n}\n\n.bx-x-circle:before {\n  content: \"\\ec8e\";\n}\n\n.bx-yen:before {\n  content: \"\\ec8f\";\n}\n\n.bx-zoom-in:before {\n  content: \"\\ec90\";\n}\n\n.bx-zoom-out:before {\n  content: \"\\ec91\";\n}\n\n.bxs-party:before {\n  content: \"\\ec92\";\n}\n\n.bxs-hot:before {\n  content: \"\\ec93\";\n}\n\n.bxs-droplet:before {\n  content: \"\\ec94\";\n}\n\n.bxs-cat:before {\n  content: \"\\ec95\";\n}\n\n.bxs-dog:before {\n  content: \"\\ec96\";\n}\n\n.bxs-injection:before {\n  content: \"\\ec97\";\n}\n\n.bxs-leaf:before {\n  content: \"\\ec98\";\n}\n\n.bxs-add-to-queue:before {\n  content: \"\\ec99\";\n}\n\n.bxs-adjust:before {\n  content: \"\\ec9a\";\n}\n\n.bxs-adjust-alt:before {\n  content: \"\\ec9b\";\n}\n\n.bxs-alarm:before {\n  content: \"\\ec9c\";\n}\n\n.bxs-alarm-add:before {\n  content: \"\\ec9d\";\n}\n\n.bxs-alarm-exclamation:before {\n  content: \"\\ec9e\";\n}\n\n.bxs-alarm-off:before {\n  content: \"\\ec9f\";\n}\n\n.bxs-alarm-snooze:before {\n  content: \"\\eca0\";\n}\n\n.bxs-album:before {\n  content: \"\\eca1\";\n}\n\n.bxs-ambulance:before {\n  content: \"\\eca2\";\n}\n\n.bxs-analyse:before {\n  content: \"\\eca3\";\n}\n\n.bxs-angry:before {\n  content: \"\\eca4\";\n}\n\n.bxs-arch:before {\n  content: \"\\eca5\";\n}\n\n.bxs-archive:before {\n  content: \"\\eca6\";\n}\n\n.bxs-archive-in:before {\n  content: \"\\eca7\";\n}\n\n.bxs-archive-out:before {\n  content: \"\\eca8\";\n}\n\n.bxs-area:before {\n  content: \"\\eca9\";\n}\n\n.bxs-arrow-from-bottom:before {\n  content: \"\\ecaa\";\n}\n\n.bxs-arrow-from-left:before {\n  content: \"\\ecab\";\n}\n\n.bxs-arrow-from-right:before {\n  content: \"\\ecac\";\n}\n\n.bxs-arrow-from-top:before {\n  content: \"\\ecad\";\n}\n\n.bxs-arrow-to-bottom:before {\n  content: \"\\ecae\";\n}\n\n.bxs-arrow-to-left:before {\n  content: \"\\ecaf\";\n}\n\n.bxs-arrow-to-right:before {\n  content: \"\\ecb0\";\n}\n\n.bxs-arrow-to-top:before {\n  content: \"\\ecb1\";\n}\n\n.bxs-award:before {\n  content: \"\\ecb2\";\n}\n\n.bxs-baby-carriage:before {\n  content: \"\\ecb3\";\n}\n\n.bxs-backpack:before {\n  content: \"\\ecb4\";\n}\n\n.bxs-badge:before {\n  content: \"\\ecb5\";\n}\n\n.bxs-badge-check:before {\n  content: \"\\ecb6\";\n}\n\n.bxs-badge-dollar:before {\n  content: \"\\ecb7\";\n}\n\n.bxs-ball:before {\n  content: \"\\ecb8\";\n}\n\n.bxs-band-aid:before {\n  content: \"\\ecb9\";\n}\n\n.bxs-bank:before {\n  content: \"\\ecba\";\n}\n\n.bxs-bar-chart-alt-2:before {\n  content: \"\\ecbb\";\n}\n\n.bxs-bar-chart-square:before {\n  content: \"\\ecbc\";\n}\n\n.bxs-barcode:before {\n  content: \"\\ecbd\";\n}\n\n.bxs-baseball:before {\n  content: \"\\ecbe\";\n}\n\n.bxs-basket:before {\n  content: \"\\ecbf\";\n}\n\n.bxs-basketball:before {\n  content: \"\\ecc0\";\n}\n\n.bxs-bath:before {\n  content: \"\\ecc1\";\n}\n\n.bxs-battery:before {\n  content: \"\\ecc2\";\n}\n\n.bxs-battery-charging:before {\n  content: \"\\ecc3\";\n}\n\n.bxs-battery-full:before {\n  content: \"\\ecc4\";\n}\n\n.bxs-battery-low:before {\n  content: \"\\ecc5\";\n}\n\n.bxs-bed:before {\n  content: \"\\ecc6\";\n}\n\n.bxs-been-here:before {\n  content: \"\\ecc7\";\n}\n\n.bxs-beer:before {\n  content: \"\\ecc8\";\n}\n\n.bxs-bell:before {\n  content: \"\\ecc9\";\n}\n\n.bxs-bell-minus:before {\n  content: \"\\ecca\";\n}\n\n.bxs-bell-off:before {\n  content: \"\\eccb\";\n}\n\n.bxs-bell-plus:before {\n  content: \"\\eccc\";\n}\n\n.bxs-bell-ring:before {\n  content: \"\\eccd\";\n}\n\n.bxs-bible:before {\n  content: \"\\ecce\";\n}\n\n.bxs-binoculars:before {\n  content: \"\\eccf\";\n}\n\n.bxs-blanket:before {\n  content: \"\\ecd0\";\n}\n\n.bxs-bolt:before {\n  content: \"\\ecd1\";\n}\n\n.bxs-bolt-circle:before {\n  content: \"\\ecd2\";\n}\n\n.bxs-bomb:before {\n  content: \"\\ecd3\";\n}\n\n.bxs-bone:before {\n  content: \"\\ecd4\";\n}\n\n.bxs-bong:before {\n  content: \"\\ecd5\";\n}\n\n.bxs-book:before {\n  content: \"\\ecd6\";\n}\n\n.bxs-book-add:before {\n  content: \"\\ecd7\";\n}\n\n.bxs-book-alt:before {\n  content: \"\\ecd8\";\n}\n\n.bxs-book-bookmark:before {\n  content: \"\\ecd9\";\n}\n\n.bxs-book-content:before {\n  content: \"\\ecda\";\n}\n\n.bxs-book-heart:before {\n  content: \"\\ecdb\";\n}\n\n.bxs-bookmark:before {\n  content: \"\\ecdc\";\n}\n\n.bxs-bookmark-alt:before {\n  content: \"\\ecdd\";\n}\n\n.bxs-bookmark-alt-minus:before {\n  content: \"\\ecde\";\n}\n\n.bxs-bookmark-alt-plus:before {\n  content: \"\\ecdf\";\n}\n\n.bxs-bookmark-heart:before {\n  content: \"\\ece0\";\n}\n\n.bxs-bookmark-minus:before {\n  content: \"\\ece1\";\n}\n\n.bxs-bookmark-plus:before {\n  content: \"\\ece2\";\n}\n\n.bxs-bookmarks:before {\n  content: \"\\ece3\";\n}\n\n.bxs-bookmark-star:before {\n  content: \"\\ece4\";\n}\n\n.bxs-book-open:before {\n  content: \"\\ece5\";\n}\n\n.bxs-book-reader:before {\n  content: \"\\ece6\";\n}\n\n.bxs-bot:before {\n  content: \"\\ece7\";\n}\n\n.bxs-bowling-ball:before {\n  content: \"\\ece8\";\n}\n\n.bxs-box:before {\n  content: \"\\ece9\";\n}\n\n.bxs-brain:before {\n  content: \"\\ecea\";\n}\n\n.bxs-briefcase:before {\n  content: \"\\eceb\";\n}\n\n.bxs-briefcase-alt:before {\n  content: \"\\ecec\";\n}\n\n.bxs-briefcase-alt-2:before {\n  content: \"\\eced\";\n}\n\n.bxs-brightness:before {\n  content: \"\\ecee\";\n}\n\n.bxs-brightness-half:before {\n  content: \"\\ecef\";\n}\n\n.bxs-brush:before {\n  content: \"\\ecf0\";\n}\n\n.bxs-brush-alt:before {\n  content: \"\\ecf1\";\n}\n\n.bxs-bug:before {\n  content: \"\\ecf2\";\n}\n\n.bxs-bug-alt:before {\n  content: \"\\ecf3\";\n}\n\n.bxs-building:before {\n  content: \"\\ecf4\";\n}\n\n.bxs-building-house:before {\n  content: \"\\ecf5\";\n}\n\n.bxs-buildings:before {\n  content: \"\\ecf6\";\n}\n\n.bxs-bulb:before {\n  content: \"\\ecf7\";\n}\n\n.bxs-bullseye:before {\n  content: \"\\ecf8\";\n}\n\n.bxs-buoy:before {\n  content: \"\\ecf9\";\n}\n\n.bxs-bus:before {\n  content: \"\\ecfa\";\n}\n\n.bxs-business:before {\n  content: \"\\ecfb\";\n}\n\n.bxs-bus-school:before {\n  content: \"\\ecfc\";\n}\n\n.bxs-cabinet:before {\n  content: \"\\ecfd\";\n}\n\n.bxs-cake:before {\n  content: \"\\ecfe\";\n}\n\n.bxs-calculator:before {\n  content: \"\\ecff\";\n}\n\n.bxs-calendar:before {\n  content: \"\\ed00\";\n}\n\n.bxs-calendar-alt:before {\n  content: \"\\ed01\";\n}\n\n.bxs-calendar-check:before {\n  content: \"\\ed02\";\n}\n\n.bxs-calendar-edit:before {\n  content: \"\\ed03\";\n}\n\n.bxs-calendar-event:before {\n  content: \"\\ed04\";\n}\n\n.bxs-calendar-exclamation:before {\n  content: \"\\ed05\";\n}\n\n.bxs-calendar-heart:before {\n  content: \"\\ed06\";\n}\n\n.bxs-calendar-minus:before {\n  content: \"\\ed07\";\n}\n\n.bxs-calendar-plus:before {\n  content: \"\\ed08\";\n}\n\n.bxs-calendar-star:before {\n  content: \"\\ed09\";\n}\n\n.bxs-calendar-week:before {\n  content: \"\\ed0a\";\n}\n\n.bxs-calendar-x:before {\n  content: \"\\ed0b\";\n}\n\n.bxs-camera:before {\n  content: \"\\ed0c\";\n}\n\n.bxs-camera-home:before {\n  content: \"\\ed0d\";\n}\n\n.bxs-camera-movie:before {\n  content: \"\\ed0e\";\n}\n\n.bxs-camera-off:before {\n  content: \"\\ed0f\";\n}\n\n.bxs-camera-plus:before {\n  content: \"\\ed10\";\n}\n\n.bxs-capsule:before {\n  content: \"\\ed11\";\n}\n\n.bxs-captions:before {\n  content: \"\\ed12\";\n}\n\n.bxs-car:before {\n  content: \"\\ed13\";\n}\n\n.bxs-car-battery:before {\n  content: \"\\ed14\";\n}\n\n.bxs-car-crash:before {\n  content: \"\\ed15\";\n}\n\n.bxs-card:before {\n  content: \"\\ed16\";\n}\n\n.bxs-caret-down-circle:before {\n  content: \"\\ed17\";\n}\n\n.bxs-caret-down-square:before {\n  content: \"\\ed18\";\n}\n\n.bxs-caret-left-circle:before {\n  content: \"\\ed19\";\n}\n\n.bxs-caret-left-square:before {\n  content: \"\\ed1a\";\n}\n\n.bxs-caret-right-circle:before {\n  content: \"\\ed1b\";\n}\n\n.bxs-caret-right-square:before {\n  content: \"\\ed1c\";\n}\n\n.bxs-caret-up-circle:before {\n  content: \"\\ed1d\";\n}\n\n.bxs-caret-up-square:before {\n  content: \"\\ed1e\";\n}\n\n.bxs-car-garage:before {\n  content: \"\\ed1f\";\n}\n\n.bxs-car-mechanic:before {\n  content: \"\\ed20\";\n}\n\n.bxs-carousel:before {\n  content: \"\\ed21\";\n}\n\n.bxs-cart:before {\n  content: \"\\ed22\";\n}\n\n.bxs-cart-add:before {\n  content: \"\\ed23\";\n}\n\n.bxs-cart-alt:before {\n  content: \"\\ed24\";\n}\n\n.bxs-cart-download:before {\n  content: \"\\ed25\";\n}\n\n.bxs-car-wash:before {\n  content: \"\\ed26\";\n}\n\n.bxs-category:before {\n  content: \"\\ed27\";\n}\n\n.bxs-category-alt:before {\n  content: \"\\ed28\";\n}\n\n.bxs-cctv:before {\n  content: \"\\ed29\";\n}\n\n.bxs-certification:before {\n  content: \"\\ed2a\";\n}\n\n.bxs-chalkboard:before {\n  content: \"\\ed2b\";\n}\n\n.bxs-chart:before {\n  content: \"\\ed2c\";\n}\n\n.bxs-chat:before {\n  content: \"\\ed2d\";\n}\n\n.bxs-checkbox:before {\n  content: \"\\ed2e\";\n}\n\n.bxs-checkbox-checked:before {\n  content: \"\\ed2f\";\n}\n\n.bxs-checkbox-minus:before {\n  content: \"\\ed30\";\n}\n\n.bxs-check-circle:before {\n  content: \"\\ed31\";\n}\n\n.bxs-check-shield:before {\n  content: \"\\ed32\";\n}\n\n.bxs-check-square:before {\n  content: \"\\ed33\";\n}\n\n.bxs-chess:before {\n  content: \"\\ed34\";\n}\n\n.bxs-chevron-down:before {\n  content: \"\\ed35\";\n}\n\n.bxs-chevron-down-circle:before {\n  content: \"\\ed36\";\n}\n\n.bxs-chevron-down-square:before {\n  content: \"\\ed37\";\n}\n\n.bxs-chevron-left:before {\n  content: \"\\ed38\";\n}\n\n.bxs-chevron-left-circle:before {\n  content: \"\\ed39\";\n}\n\n.bxs-chevron-left-square:before {\n  content: \"\\ed3a\";\n}\n\n.bxs-chevron-right:before {\n  content: \"\\ed3b\";\n}\n\n.bxs-chevron-right-circle:before {\n  content: \"\\ed3c\";\n}\n\n.bxs-chevron-right-square:before {\n  content: \"\\ed3d\";\n}\n\n.bxs-chevrons-down:before {\n  content: \"\\ed3e\";\n}\n\n.bxs-chevrons-left:before {\n  content: \"\\ed3f\";\n}\n\n.bxs-chevrons-right:before {\n  content: \"\\ed40\";\n}\n\n.bxs-chevrons-up:before {\n  content: \"\\ed41\";\n}\n\n.bxs-chevron-up:before {\n  content: \"\\ed42\";\n}\n\n.bxs-chevron-up-circle:before {\n  content: \"\\ed43\";\n}\n\n.bxs-chevron-up-square:before {\n  content: \"\\ed44\";\n}\n\n.bxs-chip:before {\n  content: \"\\ed45\";\n}\n\n.bxs-church:before {\n  content: \"\\ed46\";\n}\n\n.bxs-circle:before {\n  content: \"\\ed47\";\n}\n\n.bxs-city:before {\n  content: \"\\ed48\";\n}\n\n.bxs-clinic:before {\n  content: \"\\ed49\";\n}\n\n.bxs-cloud:before {\n  content: \"\\ed4a\";\n}\n\n.bxs-cloud-download:before {\n  content: \"\\ed4b\";\n}\n\n.bxs-cloud-lightning:before {\n  content: \"\\ed4c\";\n}\n\n.bxs-cloud-rain:before {\n  content: \"\\ed4d\";\n}\n\n.bxs-cloud-upload:before {\n  content: \"\\ed4e\";\n}\n\n.bxs-coffee:before {\n  content: \"\\ed4f\";\n}\n\n.bxs-coffee-alt:before {\n  content: \"\\ed50\";\n}\n\n.bxs-coffee-togo:before {\n  content: \"\\ed51\";\n}\n\n.bxs-cog:before {\n  content: \"\\ed52\";\n}\n\n.bxs-coin:before {\n  content: \"\\ed53\";\n}\n\n.bxs-coin-stack:before {\n  content: \"\\ed54\";\n}\n\n.bxs-collection:before {\n  content: \"\\ed55\";\n}\n\n.bxs-color-fill:before {\n  content: \"\\ed56\";\n}\n\n.bxs-comment:before {\n  content: \"\\ed57\";\n}\n\n.bxs-comment-add:before {\n  content: \"\\ed58\";\n}\n\n.bxs-comment-check:before {\n  content: \"\\ed59\";\n}\n\n.bxs-comment-detail:before {\n  content: \"\\ed5a\";\n}\n\n.bxs-comment-dots:before {\n  content: \"\\ed5b\";\n}\n\n.bxs-comment-edit:before {\n  content: \"\\ed5c\";\n}\n\n.bxs-comment-error:before {\n  content: \"\\ed5d\";\n}\n\n.bxs-comment-minus:before {\n  content: \"\\ed5e\";\n}\n\n.bxs-comment-x:before {\n  content: \"\\ed5f\";\n}\n\n.bxs-compass:before {\n  content: \"\\ed60\";\n}\n\n.bxs-component:before {\n  content: \"\\ed61\";\n}\n\n.bxs-confused:before {\n  content: \"\\ed62\";\n}\n\n.bxs-contact:before {\n  content: \"\\ed63\";\n}\n\n.bxs-conversation:before {\n  content: \"\\ed64\";\n}\n\n.bxs-cookie:before {\n  content: \"\\ed65\";\n}\n\n.bxs-cool:before {\n  content: \"\\ed66\";\n}\n\n.bxs-copy:before {\n  content: \"\\ed67\";\n}\n\n.bxs-copy-alt:before {\n  content: \"\\ed68\";\n}\n\n.bxs-copyright:before {\n  content: \"\\ed69\";\n}\n\n.bxs-coupon:before {\n  content: \"\\ed6a\";\n}\n\n.bxs-credit-card:before {\n  content: \"\\ed6b\";\n}\n\n.bxs-credit-card-alt:before {\n  content: \"\\ed6c\";\n}\n\n.bxs-credit-card-front:before {\n  content: \"\\ed6d\";\n}\n\n.bxs-crop:before {\n  content: \"\\ed6e\";\n}\n\n.bxs-crown:before {\n  content: \"\\ed6f\";\n}\n\n.bxs-cube:before {\n  content: \"\\ed70\";\n}\n\n.bxs-cube-alt:before {\n  content: \"\\ed71\";\n}\n\n.bxs-cuboid:before {\n  content: \"\\ed72\";\n}\n\n.bxs-customize:before {\n  content: \"\\ed73\";\n}\n\n.bxs-cylinder:before {\n  content: \"\\ed74\";\n}\n\n.bxs-dashboard:before {\n  content: \"\\ed75\";\n}\n\n.bxs-data:before {\n  content: \"\\ed76\";\n}\n\n.bxs-detail:before {\n  content: \"\\ed77\";\n}\n\n.bxs-devices:before {\n  content: \"\\ed78\";\n}\n\n.bxs-diamond:before {\n  content: \"\\ed79\";\n}\n\n.bxs-dice-1:before {\n  content: \"\\ed7a\";\n}\n\n.bxs-dice-2:before {\n  content: \"\\ed7b\";\n}\n\n.bxs-dice-3:before {\n  content: \"\\ed7c\";\n}\n\n.bxs-dice-4:before {\n  content: \"\\ed7d\";\n}\n\n.bxs-dice-5:before {\n  content: \"\\ed7e\";\n}\n\n.bxs-dice-6:before {\n  content: \"\\ed7f\";\n}\n\n.bxs-direction-left:before {\n  content: \"\\ed80\";\n}\n\n.bxs-direction-right:before {\n  content: \"\\ed81\";\n}\n\n.bxs-directions:before {\n  content: \"\\ed82\";\n}\n\n.bxs-disc:before {\n  content: \"\\ed83\";\n}\n\n.bxs-discount:before {\n  content: \"\\ed84\";\n}\n\n.bxs-dish:before {\n  content: \"\\ed85\";\n}\n\n.bxs-dislike:before {\n  content: \"\\ed86\";\n}\n\n.bxs-dizzy:before {\n  content: \"\\ed87\";\n}\n\n.bxs-dock-bottom:before {\n  content: \"\\ed88\";\n}\n\n.bxs-dock-left:before {\n  content: \"\\ed89\";\n}\n\n.bxs-dock-right:before {\n  content: \"\\ed8a\";\n}\n\n.bxs-dock-top:before {\n  content: \"\\ed8b\";\n}\n\n.bxs-dollar-circle:before {\n  content: \"\\ed8c\";\n}\n\n.bxs-donate-blood:before {\n  content: \"\\ed8d\";\n}\n\n.bxs-donate-heart:before {\n  content: \"\\ed8e\";\n}\n\n.bxs-door-open:before {\n  content: \"\\ed8f\";\n}\n\n.bxs-doughnut-chart:before {\n  content: \"\\ed90\";\n}\n\n.bxs-down-arrow:before {\n  content: \"\\ed91\";\n}\n\n.bxs-down-arrow-alt:before {\n  content: \"\\ed92\";\n}\n\n.bxs-down-arrow-circle:before {\n  content: \"\\ed93\";\n}\n\n.bxs-down-arrow-square:before {\n  content: \"\\ed94\";\n}\n\n.bxs-download:before {\n  content: \"\\ed95\";\n}\n\n.bxs-downvote:before {\n  content: \"\\ed96\";\n}\n\n.bxs-drink:before {\n  content: \"\\ed97\";\n}\n\n.bxs-droplet-half:before {\n  content: \"\\ed98\";\n}\n\n.bxs-dryer:before {\n  content: \"\\ed99\";\n}\n\n.bxs-duplicate:before {\n  content: \"\\ed9a\";\n}\n\n.bxs-edit:before {\n  content: \"\\ed9b\";\n}\n\n.bxs-edit-alt:before {\n  content: \"\\ed9c\";\n}\n\n.bxs-edit-location:before {\n  content: \"\\ed9d\";\n}\n\n.bxs-eject:before {\n  content: \"\\ed9e\";\n}\n\n.bxs-envelope:before {\n  content: \"\\ed9f\";\n}\n\n.bxs-envelope-open:before {\n  content: \"\\eda0\";\n}\n\n.bxs-eraser:before {\n  content: \"\\eda1\";\n}\n\n.bxs-error:before {\n  content: \"\\eda2\";\n}\n\n.bxs-error-alt:before {\n  content: \"\\eda3\";\n}\n\n.bxs-error-circle:before {\n  content: \"\\eda4\";\n}\n\n.bxs-ev-station:before {\n  content: \"\\eda5\";\n}\n\n.bxs-exit:before {\n  content: \"\\eda6\";\n}\n\n.bxs-extension:before {\n  content: \"\\eda7\";\n}\n\n.bxs-eyedropper:before {\n  content: \"\\eda8\";\n}\n\n.bxs-face:before {\n  content: \"\\eda9\";\n}\n\n.bxs-face-mask:before {\n  content: \"\\edaa\";\n}\n\n.bxs-factory:before {\n  content: \"\\edab\";\n}\n\n.bxs-fast-forward-circle:before {\n  content: \"\\edac\";\n}\n\n.bxs-file:before {\n  content: \"\\edad\";\n}\n\n.bxs-file-archive:before {\n  content: \"\\edae\";\n}\n\n.bxs-file-blank:before {\n  content: \"\\edaf\";\n}\n\n.bxs-file-css:before {\n  content: \"\\edb0\";\n}\n\n.bxs-file-doc:before {\n  content: \"\\edb1\";\n}\n\n.bxs-file-export:before {\n  content: \"\\edb2\";\n}\n\n.bxs-file-find:before {\n  content: \"\\edb3\";\n}\n\n.bxs-file-gif:before {\n  content: \"\\edb4\";\n}\n\n.bxs-file-html:before {\n  content: \"\\edb5\";\n}\n\n.bxs-file-image:before {\n  content: \"\\edb6\";\n}\n\n.bxs-file-import:before {\n  content: \"\\edb7\";\n}\n\n.bxs-file-jpg:before {\n  content: \"\\edb8\";\n}\n\n.bxs-file-js:before {\n  content: \"\\edb9\";\n}\n\n.bxs-file-json:before {\n  content: \"\\edba\";\n}\n\n.bxs-file-md:before {\n  content: \"\\edbb\";\n}\n\n.bxs-file-pdf:before {\n  content: \"\\edbc\";\n}\n\n.bxs-file-plus:before {\n  content: \"\\edbd\";\n}\n\n.bxs-file-png:before {\n  content: \"\\edbe\";\n}\n\n.bxs-file-txt:before {\n  content: \"\\edbf\";\n}\n\n.bxs-film:before {\n  content: \"\\edc0\";\n}\n\n.bxs-filter-alt:before {\n  content: \"\\edc1\";\n}\n\n.bxs-first-aid:before {\n  content: \"\\edc2\";\n}\n\n.bxs-flag:before {\n  content: \"\\edc3\";\n}\n\n.bxs-flag-alt:before {\n  content: \"\\edc4\";\n}\n\n.bxs-flag-checkered:before {\n  content: \"\\edc5\";\n}\n\n.bxs-flame:before {\n  content: \"\\edc6\";\n}\n\n.bxs-flask:before {\n  content: \"\\edc7\";\n}\n\n.bxs-florist:before {\n  content: \"\\edc8\";\n}\n\n.bxs-folder:before {\n  content: \"\\edc9\";\n}\n\n.bxs-folder-minus:before {\n  content: \"\\edca\";\n}\n\n.bxs-folder-open:before {\n  content: \"\\edcb\";\n}\n\n.bxs-folder-plus:before {\n  content: \"\\edcc\";\n}\n\n.bxs-food-menu:before {\n  content: \"\\edcd\";\n}\n\n.bxs-fridge:before {\n  content: \"\\edce\";\n}\n\n.bxs-game:before {\n  content: \"\\edcf\";\n}\n\n.bxs-gas-pump:before {\n  content: \"\\edd0\";\n}\n\n.bxs-ghost:before {\n  content: \"\\edd1\";\n}\n\n.bxs-gift:before {\n  content: \"\\edd2\";\n}\n\n.bxs-graduation:before {\n  content: \"\\edd3\";\n}\n\n.bxs-grid:before {\n  content: \"\\edd4\";\n}\n\n.bxs-grid-alt:before {\n  content: \"\\edd5\";\n}\n\n.bxs-group:before {\n  content: \"\\edd6\";\n}\n\n.bxs-guitar-amp:before {\n  content: \"\\edd7\";\n}\n\n.bxs-hand:before {\n  content: \"\\edd8\";\n}\n\n.bxs-hand-down:before {\n  content: \"\\edd9\";\n}\n\n.bxs-hand-left:before {\n  content: \"\\edda\";\n}\n\n.bxs-hand-right:before {\n  content: \"\\eddb\";\n}\n\n.bxs-hand-up:before {\n  content: \"\\eddc\";\n}\n\n.bxs-happy:before {\n  content: \"\\eddd\";\n}\n\n.bxs-happy-alt:before {\n  content: \"\\edde\";\n}\n\n.bxs-happy-beaming:before {\n  content: \"\\eddf\";\n}\n\n.bxs-happy-heart-eyes:before {\n  content: \"\\ede0\";\n}\n\n.bxs-hdd:before {\n  content: \"\\ede1\";\n}\n\n.bxs-heart:before {\n  content: \"\\ede2\";\n}\n\n.bxs-heart-circle:before {\n  content: \"\\ede3\";\n}\n\n.bxs-heart-square:before {\n  content: \"\\ede4\";\n}\n\n.bxs-help-circle:before {\n  content: \"\\ede5\";\n}\n\n.bxs-hide:before {\n  content: \"\\ede6\";\n}\n\n.bxs-home:before {\n  content: \"\\ede7\";\n}\n\n.bxs-home-circle:before {\n  content: \"\\ede8\";\n}\n\n.bxs-home-heart:before {\n  content: \"\\ede9\";\n}\n\n.bxs-home-smile:before {\n  content: \"\\edea\";\n}\n\n.bxs-hotel:before {\n  content: \"\\edeb\";\n}\n\n.bxs-hourglass:before {\n  content: \"\\edec\";\n}\n\n.bxs-hourglass-bottom:before {\n  content: \"\\eded\";\n}\n\n.bxs-hourglass-top:before {\n  content: \"\\edee\";\n}\n\n.bxs-id-card:before {\n  content: \"\\edef\";\n}\n\n.bxs-image:before {\n  content: \"\\edf0\";\n}\n\n.bxs-image-add:before {\n  content: \"\\edf1\";\n}\n\n.bxs-image-alt:before {\n  content: \"\\edf2\";\n}\n\n.bxs-inbox:before {\n  content: \"\\edf3\";\n}\n\n.bxs-info-circle:before {\n  content: \"\\edf4\";\n}\n\n.bxs-info-square:before {\n  content: \"\\edf5\";\n}\n\n.bxs-institution:before {\n  content: \"\\edf6\";\n}\n\n.bxs-joystick:before {\n  content: \"\\edf7\";\n}\n\n.bxs-joystick-alt:before {\n  content: \"\\edf8\";\n}\n\n.bxs-joystick-button:before {\n  content: \"\\edf9\";\n}\n\n.bxs-key:before {\n  content: \"\\edfa\";\n}\n\n.bxs-keyboard:before {\n  content: \"\\edfb\";\n}\n\n.bxs-label:before {\n  content: \"\\edfc\";\n}\n\n.bxs-landmark:before {\n  content: \"\\edfd\";\n}\n\n.bxs-landscape:before {\n  content: \"\\edfe\";\n}\n\n.bxs-laugh:before {\n  content: \"\\edff\";\n}\n\n.bxs-layer:before {\n  content: \"\\ee00\";\n}\n\n.bxs-layer-minus:before {\n  content: \"\\ee01\";\n}\n\n.bxs-layer-plus:before {\n  content: \"\\ee02\";\n}\n\n.bxs-layout:before {\n  content: \"\\ee03\";\n}\n\n.bxs-left-arrow:before {\n  content: \"\\ee04\";\n}\n\n.bxs-left-arrow-alt:before {\n  content: \"\\ee05\";\n}\n\n.bxs-left-arrow-circle:before {\n  content: \"\\ee06\";\n}\n\n.bxs-left-arrow-square:before {\n  content: \"\\ee07\";\n}\n\n.bxs-left-down-arrow-circle:before {\n  content: \"\\ee08\";\n}\n\n.bxs-left-top-arrow-circle:before {\n  content: \"\\ee09\";\n}\n\n.bxs-like:before {\n  content: \"\\ee0a\";\n}\n\n.bxs-location-plus:before {\n  content: \"\\ee0b\";\n}\n\n.bxs-lock:before {\n  content: \"\\ee0c\";\n}\n\n.bxs-lock-alt:before {\n  content: \"\\ee0d\";\n}\n\n.bxs-lock-open:before {\n  content: \"\\ee0e\";\n}\n\n.bxs-lock-open-alt:before {\n  content: \"\\ee0f\";\n}\n\n.bxs-log-in:before {\n  content: \"\\ee10\";\n}\n\n.bxs-log-in-circle:before {\n  content: \"\\ee11\";\n}\n\n.bxs-log-out:before {\n  content: \"\\ee12\";\n}\n\n.bxs-log-out-circle:before {\n  content: \"\\ee13\";\n}\n\n.bxs-low-vision:before {\n  content: \"\\ee14\";\n}\n\n.bxs-magic-wand:before {\n  content: \"\\ee15\";\n}\n\n.bxs-magnet:before {\n  content: \"\\ee16\";\n}\n\n.bxs-map:before {\n  content: \"\\ee17\";\n}\n\n.bxs-map-alt:before {\n  content: \"\\ee18\";\n}\n\n.bxs-map-pin:before {\n  content: \"\\ee19\";\n}\n\n.bxs-mask:before {\n  content: \"\\ee1a\";\n}\n\n.bxs-medal:before {\n  content: \"\\ee1b\";\n}\n\n.bxs-megaphone:before {\n  content: \"\\ee1c\";\n}\n\n.bxs-meh:before {\n  content: \"\\ee1d\";\n}\n\n.bxs-meh-alt:before {\n  content: \"\\ee1e\";\n}\n\n.bxs-meh-blank:before {\n  content: \"\\ee1f\";\n}\n\n.bxs-memory-card:before {\n  content: \"\\ee20\";\n}\n\n.bxs-message:before {\n  content: \"\\ee21\";\n}\n\n.bxs-message-add:before {\n  content: \"\\ee22\";\n}\n\n.bxs-message-alt:before {\n  content: \"\\ee23\";\n}\n\n.bxs-message-alt-add:before {\n  content: \"\\ee24\";\n}\n\n.bxs-message-alt-check:before {\n  content: \"\\ee25\";\n}\n\n.bxs-message-alt-detail:before {\n  content: \"\\ee26\";\n}\n\n.bxs-message-alt-dots:before {\n  content: \"\\ee27\";\n}\n\n.bxs-message-alt-edit:before {\n  content: \"\\ee28\";\n}\n\n.bxs-message-alt-error:before {\n  content: \"\\ee29\";\n}\n\n.bxs-message-alt-minus:before {\n  content: \"\\ee2a\";\n}\n\n.bxs-message-alt-x:before {\n  content: \"\\ee2b\";\n}\n\n.bxs-message-check:before {\n  content: \"\\ee2c\";\n}\n\n.bxs-message-detail:before {\n  content: \"\\ee2d\";\n}\n\n.bxs-message-dots:before {\n  content: \"\\ee2e\";\n}\n\n.bxs-message-edit:before {\n  content: \"\\ee2f\";\n}\n\n.bxs-message-error:before {\n  content: \"\\ee30\";\n}\n\n.bxs-message-minus:before {\n  content: \"\\ee31\";\n}\n\n.bxs-message-rounded:before {\n  content: \"\\ee32\";\n}\n\n.bxs-message-rounded-add:before {\n  content: \"\\ee33\";\n}\n\n.bxs-message-rounded-check:before {\n  content: \"\\ee34\";\n}\n\n.bxs-message-rounded-detail:before {\n  content: \"\\ee35\";\n}\n\n.bxs-message-rounded-dots:before {\n  content: \"\\ee36\";\n}\n\n.bxs-message-rounded-edit:before {\n  content: \"\\ee37\";\n}\n\n.bxs-message-rounded-error:before {\n  content: \"\\ee38\";\n}\n\n.bxs-message-rounded-minus:before {\n  content: \"\\ee39\";\n}\n\n.bxs-message-rounded-x:before {\n  content: \"\\ee3a\";\n}\n\n.bxs-message-square:before {\n  content: \"\\ee3b\";\n}\n\n.bxs-message-square-add:before {\n  content: \"\\ee3c\";\n}\n\n.bxs-message-square-check:before {\n  content: \"\\ee3d\";\n}\n\n.bxs-message-square-detail:before {\n  content: \"\\ee3e\";\n}\n\n.bxs-message-square-dots:before {\n  content: \"\\ee3f\";\n}\n\n.bxs-message-square-edit:before {\n  content: \"\\ee40\";\n}\n\n.bxs-message-square-error:before {\n  content: \"\\ee41\";\n}\n\n.bxs-message-square-minus:before {\n  content: \"\\ee42\";\n}\n\n.bxs-message-square-x:before {\n  content: \"\\ee43\";\n}\n\n.bxs-message-x:before {\n  content: \"\\ee44\";\n}\n\n.bxs-meteor:before {\n  content: \"\\ee45\";\n}\n\n.bxs-microchip:before {\n  content: \"\\ee46\";\n}\n\n.bxs-microphone:before {\n  content: \"\\ee47\";\n}\n\n.bxs-microphone-alt:before {\n  content: \"\\ee48\";\n}\n\n.bxs-microphone-off:before {\n  content: \"\\ee49\";\n}\n\n.bxs-minus-circle:before {\n  content: \"\\ee4a\";\n}\n\n.bxs-minus-square:before {\n  content: \"\\ee4b\";\n}\n\n.bxs-mobile:before {\n  content: \"\\ee4c\";\n}\n\n.bxs-mobile-vibration:before {\n  content: \"\\ee4d\";\n}\n\n.bxs-moon:before {\n  content: \"\\ee4e\";\n}\n\n.bxs-mouse:before {\n  content: \"\\ee4f\";\n}\n\n.bxs-mouse-alt:before {\n  content: \"\\ee50\";\n}\n\n.bxs-movie:before {\n  content: \"\\ee51\";\n}\n\n.bxs-movie-play:before {\n  content: \"\\ee52\";\n}\n\n.bxs-music:before {\n  content: \"\\ee53\";\n}\n\n.bxs-navigation:before {\n  content: \"\\ee54\";\n}\n\n.bxs-network-chart:before {\n  content: \"\\ee55\";\n}\n\n.bxs-news:before {\n  content: \"\\ee56\";\n}\n\n.bxs-no-entry:before {\n  content: \"\\ee57\";\n}\n\n.bxs-note:before {\n  content: \"\\ee58\";\n}\n\n.bxs-notepad:before {\n  content: \"\\ee59\";\n}\n\n.bxs-notification:before {\n  content: \"\\ee5a\";\n}\n\n.bxs-notification-off:before {\n  content: \"\\ee5b\";\n}\n\n.bxs-offer:before {\n  content: \"\\ee5c\";\n}\n\n.bxs-package:before {\n  content: \"\\ee5d\";\n}\n\n.bxs-paint:before {\n  content: \"\\ee5e\";\n}\n\n.bxs-paint-roll:before {\n  content: \"\\ee5f\";\n}\n\n.bxs-palette:before {\n  content: \"\\ee60\";\n}\n\n.bxs-paper-plane:before {\n  content: \"\\ee61\";\n}\n\n.bxs-parking:before {\n  content: \"\\ee62\";\n}\n\n.bxs-paste:before {\n  content: \"\\ee63\";\n}\n\n.bxs-pen:before {\n  content: \"\\ee64\";\n}\n\n.bxs-pencil:before {\n  content: \"\\ee65\";\n}\n\n.bxs-phone:before {\n  content: \"\\ee66\";\n}\n\n.bxs-phone-call:before {\n  content: \"\\ee67\";\n}\n\n.bxs-phone-incoming:before {\n  content: \"\\ee68\";\n}\n\n.bxs-phone-off:before {\n  content: \"\\ee69\";\n}\n\n.bxs-phone-outgoing:before {\n  content: \"\\ee6a\";\n}\n\n.bxs-photo-album:before {\n  content: \"\\ee6b\";\n}\n\n.bxs-piano:before {\n  content: \"\\ee6c\";\n}\n\n.bxs-pie-chart:before {\n  content: \"\\ee6d\";\n}\n\n.bxs-pie-chart-alt:before {\n  content: \"\\ee6e\";\n}\n\n.bxs-pie-chart-alt-2:before {\n  content: \"\\ee6f\";\n}\n\n.bxs-pin:before {\n  content: \"\\ee70\";\n}\n\n.bxs-pizza:before {\n  content: \"\\ee71\";\n}\n\n.bxs-plane:before {\n  content: \"\\ee72\";\n}\n\n.bxs-plane-alt:before {\n  content: \"\\ee73\";\n}\n\n.bxs-plane-land:before {\n  content: \"\\ee74\";\n}\n\n.bxs-planet:before {\n  content: \"\\ee75\";\n}\n\n.bxs-plane-take-off:before {\n  content: \"\\ee76\";\n}\n\n.bxs-playlist:before {\n  content: \"\\ee77\";\n}\n\n.bxs-plug:before {\n  content: \"\\ee78\";\n}\n\n.bxs-plus-circle:before {\n  content: \"\\ee79\";\n}\n\n.bxs-plus-square:before {\n  content: \"\\ee7a\";\n}\n\n.bxs-pointer:before {\n  content: \"\\ee7b\";\n}\n\n.bxs-polygon:before {\n  content: \"\\ee7c\";\n}\n\n.bxs-printer:before {\n  content: \"\\ee7d\";\n}\n\n.bxs-purchase-tag:before {\n  content: \"\\ee7e\";\n}\n\n.bxs-purchase-tag-alt:before {\n  content: \"\\ee7f\";\n}\n\n.bxs-pyramid:before {\n  content: \"\\ee80\";\n}\n\n.bxs-quote-alt-left:before {\n  content: \"\\ee81\";\n}\n\n.bxs-quote-alt-right:before {\n  content: \"\\ee82\";\n}\n\n.bxs-quote-left:before {\n  content: \"\\ee83\";\n}\n\n.bxs-quote-right:before {\n  content: \"\\ee84\";\n}\n\n.bxs-quote-single-left:before {\n  content: \"\\ee85\";\n}\n\n.bxs-quote-single-right:before {\n  content: \"\\ee86\";\n}\n\n.bxs-radiation:before {\n  content: \"\\ee87\";\n}\n\n.bxs-radio:before {\n  content: \"\\ee88\";\n}\n\n.bxs-receipt:before {\n  content: \"\\ee89\";\n}\n\n.bxs-rectangle:before {\n  content: \"\\ee8a\";\n}\n\n.bxs-registered:before {\n  content: \"\\ee8b\";\n}\n\n.bxs-rename:before {\n  content: \"\\ee8c\";\n}\n\n.bxs-report:before {\n  content: \"\\ee8d\";\n}\n\n.bxs-rewind-circle:before {\n  content: \"\\ee8e\";\n}\n\n.bxs-right-arrow:before {\n  content: \"\\ee8f\";\n}\n\n.bxs-right-arrow-alt:before {\n  content: \"\\ee90\";\n}\n\n.bxs-right-arrow-circle:before {\n  content: \"\\ee91\";\n}\n\n.bxs-right-arrow-square:before {\n  content: \"\\ee92\";\n}\n\n.bxs-right-down-arrow-circle:before {\n  content: \"\\ee93\";\n}\n\n.bxs-right-top-arrow-circle:before {\n  content: \"\\ee94\";\n}\n\n.bxs-rocket:before {\n  content: \"\\ee95\";\n}\n\n.bxs-ruler:before {\n  content: \"\\ee96\";\n}\n\n.bxs-sad:before {\n  content: \"\\ee97\";\n}\n\n.bxs-save:before {\n  content: \"\\ee98\";\n}\n\n.bxs-school:before {\n  content: \"\\ee99\";\n}\n\n.bxs-search:before {\n  content: \"\\ee9a\";\n}\n\n.bxs-search-alt-2:before {\n  content: \"\\ee9b\";\n}\n\n.bxs-select-multiple:before {\n  content: \"\\ee9c\";\n}\n\n.bxs-send:before {\n  content: \"\\ee9d\";\n}\n\n.bxs-server:before {\n  content: \"\\ee9e\";\n}\n\n.bxs-shapes:before {\n  content: \"\\ee9f\";\n}\n\n.bxs-share:before {\n  content: \"\\eea0\";\n}\n\n.bxs-share-alt:before {\n  content: \"\\eea1\";\n}\n\n.bxs-shield:before {\n  content: \"\\eea2\";\n}\n\n.bxs-shield-alt-2:before {\n  content: \"\\eea3\";\n}\n\n.bxs-shield-x:before {\n  content: \"\\eea4\";\n}\n\n.bxs-ship:before {\n  content: \"\\eea5\";\n}\n\n.bxs-shocked:before {\n  content: \"\\eea6\";\n}\n\n.bxs-shopping-bag:before {\n  content: \"\\eea7\";\n}\n\n.bxs-shopping-bag-alt:before {\n  content: \"\\eea8\";\n}\n\n.bxs-shopping-bags:before {\n  content: \"\\eea9\";\n}\n\n.bxs-show:before {\n  content: \"\\eeaa\";\n}\n\n.bxs-skip-next-circle:before {\n  content: \"\\eeab\";\n}\n\n.bxs-skip-previous-circle:before {\n  content: \"\\eeac\";\n}\n\n.bxs-skull:before {\n  content: \"\\eead\";\n}\n\n.bxs-sleepy:before {\n  content: \"\\eeae\";\n}\n\n.bxs-slideshow:before {\n  content: \"\\eeaf\";\n}\n\n.bxs-smile:before {\n  content: \"\\eeb0\";\n}\n\n.bxs-sort-alt:before {\n  content: \"\\eeb1\";\n}\n\n.bxs-spa:before {\n  content: \"\\eeb2\";\n}\n\n.bxs-speaker:before {\n  content: \"\\eeb3\";\n}\n\n.bxs-spray-can:before {\n  content: \"\\eeb4\";\n}\n\n.bxs-spreadsheet:before {\n  content: \"\\eeb5\";\n}\n\n.bxs-square:before {\n  content: \"\\eeb6\";\n}\n\n.bxs-square-rounded:before {\n  content: \"\\eeb7\";\n}\n\n.bxs-star:before {\n  content: \"\\eeb8\";\n}\n\n.bxs-star-half:before {\n  content: \"\\eeb9\";\n}\n\n.bxs-sticker:before {\n  content: \"\\eeba\";\n}\n\n.bxs-stopwatch:before {\n  content: \"\\eebb\";\n}\n\n.bxs-store:before {\n  content: \"\\eebc\";\n}\n\n.bxs-store-alt:before {\n  content: \"\\eebd\";\n}\n\n.bxs-sun:before {\n  content: \"\\eebe\";\n}\n\n.bxs-tachometer:before {\n  content: \"\\eebf\";\n}\n\n.bxs-tag:before {\n  content: \"\\eec0\";\n}\n\n.bxs-tag-alt:before {\n  content: \"\\eec1\";\n}\n\n.bxs-tag-x:before {\n  content: \"\\eec2\";\n}\n\n.bxs-taxi:before {\n  content: \"\\eec3\";\n}\n\n.bxs-tennis-ball:before {\n  content: \"\\eec4\";\n}\n\n.bxs-terminal:before {\n  content: \"\\eec5\";\n}\n\n.bxs-thermometer:before {\n  content: \"\\eec6\";\n}\n\n.bxs-time:before {\n  content: \"\\eec7\";\n}\n\n.bxs-time-five:before {\n  content: \"\\eec8\";\n}\n\n.bxs-timer:before {\n  content: \"\\eec9\";\n}\n\n.bxs-tired:before {\n  content: \"\\eeca\";\n}\n\n.bxs-toggle-left:before {\n  content: \"\\eecb\";\n}\n\n.bxs-toggle-right:before {\n  content: \"\\eecc\";\n}\n\n.bxs-tone:before {\n  content: \"\\eecd\";\n}\n\n.bxs-torch:before {\n  content: \"\\eece\";\n}\n\n.bxs-to-top:before {\n  content: \"\\eecf\";\n}\n\n.bxs-traffic:before {\n  content: \"\\eed0\";\n}\n\n.bxs-traffic-barrier:before {\n  content: \"\\eed1\";\n}\n\n.bxs-traffic-cone:before {\n  content: \"\\eed2\";\n}\n\n.bxs-train:before {\n  content: \"\\eed3\";\n}\n\n.bxs-trash:before {\n  content: \"\\eed4\";\n}\n\n.bxs-trash-alt:before {\n  content: \"\\eed5\";\n}\n\n.bxs-tree:before {\n  content: \"\\eed6\";\n}\n\n.bxs-trophy:before {\n  content: \"\\eed7\";\n}\n\n.bxs-truck:before {\n  content: \"\\eed8\";\n}\n\n.bxs-t-shirt:before {\n  content: \"\\eed9\";\n}\n\n.bxs-tv:before {\n  content: \"\\eeda\";\n}\n\n.bxs-up-arrow:before {\n  content: \"\\eedb\";\n}\n\n.bxs-up-arrow-alt:before {\n  content: \"\\eedc\";\n}\n\n.bxs-up-arrow-circle:before {\n  content: \"\\eedd\";\n}\n\n.bxs-up-arrow-square:before {\n  content: \"\\eede\";\n}\n\n.bxs-upside-down:before {\n  content: \"\\eedf\";\n}\n\n.bxs-upvote:before {\n  content: \"\\eee0\";\n}\n\n.bxs-user:before {\n  content: \"\\eee1\";\n}\n\n.bxs-user-account:before {\n  content: \"\\eee2\";\n}\n\n.bxs-user-badge:before {\n  content: \"\\eee3\";\n}\n\n.bxs-user-check:before {\n  content: \"\\eee4\";\n}\n\n.bxs-user-circle:before {\n  content: \"\\eee5\";\n}\n\n.bxs-user-detail:before {\n  content: \"\\eee6\";\n}\n\n.bxs-user-minus:before {\n  content: \"\\eee7\";\n}\n\n.bxs-user-pin:before {\n  content: \"\\eee8\";\n}\n\n.bxs-user-plus:before {\n  content: \"\\eee9\";\n}\n\n.bxs-user-rectangle:before {\n  content: \"\\eeea\";\n}\n\n.bxs-user-voice:before {\n  content: \"\\eeeb\";\n}\n\n.bxs-user-x:before {\n  content: \"\\eeec\";\n}\n\n.bxs-vector:before {\n  content: \"\\eeed\";\n}\n\n.bxs-vial:before {\n  content: \"\\eeee\";\n}\n\n.bxs-video:before {\n  content: \"\\eeef\";\n}\n\n.bxs-video-off:before {\n  content: \"\\eef0\";\n}\n\n.bxs-video-plus:before {\n  content: \"\\eef1\";\n}\n\n.bxs-video-recording:before {\n  content: \"\\eef2\";\n}\n\n.bxs-videos:before {\n  content: \"\\eef3\";\n}\n\n.bxs-virus:before {\n  content: \"\\eef4\";\n}\n\n.bxs-virus-block:before {\n  content: \"\\eef5\";\n}\n\n.bxs-volume:before {\n  content: \"\\eef6\";\n}\n\n.bxs-volume-full:before {\n  content: \"\\eef7\";\n}\n\n.bxs-volume-low:before {\n  content: \"\\eef8\";\n}\n\n.bxs-volume-mute:before {\n  content: \"\\eef9\";\n}\n\n.bxs-wallet:before {\n  content: \"\\eefa\";\n}\n\n.bxs-wallet-alt:before {\n  content: \"\\eefb\";\n}\n\n.bxs-washer:before {\n  content: \"\\eefc\";\n}\n\n.bxs-watch:before {\n  content: \"\\eefd\";\n}\n\n.bxs-watch-alt:before {\n  content: \"\\eefe\";\n}\n\n.bxs-webcam:before {\n  content: \"\\eeff\";\n}\n\n.bxs-widget:before {\n  content: \"\\ef00\";\n}\n\n.bxs-window-alt:before {\n  content: \"\\ef01\";\n}\n\n.bxs-wine:before {\n  content: \"\\ef02\";\n}\n\n.bxs-wink-smile:before {\n  content: \"\\ef03\";\n}\n\n.bxs-wink-tongue:before {\n  content: \"\\ef04\";\n}\n\n.bxs-wrench:before {\n  content: \"\\ef05\";\n}\n\n.bxs-x-circle:before {\n  content: \"\\ef06\";\n}\n\n.bxs-x-square:before {\n  content: \"\\ef07\";\n}\n\n.bxs-yin-yang:before {\n  content: \"\\ef08\";\n}\n\n.bxs-zap:before {\n  content: \"\\ef09\";\n}\n\n.bxs-zoom-in:before {\n  content: \"\\ef0a\";\n}\n\n.bxs-zoom-out:before {\n  content: \"\\ef0b\";\n}\n\n.bx {\n  vertical-align: middle;\n  font-size: 1.15rem;\n  line-height: 1;\n}\n\n@font-face {\n  font-family: \"boxicons\";\n  font-weight: normal;\n  font-style: normal;\n  src: url(\"../fonts/boxicons/boxicons.eot\");\n  src: url(\"../fonts/boxicons/boxicons.eot\") format(\"embedded-opentype\"), url(\"../fonts/boxicons/boxicons.woff2\") format(\"woff2\"), url(\"../fonts/boxicons/boxicons.woff\") format(\"woff\"), url(\"../fonts/boxicons/boxicons.ttf\") format(\"truetype\"), url(\"../fonts/boxicons/boxicons.svg?#boxicons\") format(\"svg\");\n}\n"
  },
  {
    "path": "public/assets/vendor/js/bootstrap.js",
    "content": "/*\n * ATTENTION: The \"eval\" devtool has been used (maybe by default in mode: \"development\").\n * This devtool is neither made for production nor for readable output files.\n * It uses \"eval()\" calls to create a separate source file in the browser devtools.\n * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)\n * or disable the default devtool with \"devtool: false\".\n * If you are looking for production-ready output files, see mode: \"production\" (https://webpack.js.org/configuration/mode/).\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./node_modules/@popperjs/core/lib/createPopper.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/createPopper.js ***!\n  \\*********************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   createPopper: function() { return /* binding */ createPopper; },\\n/* harmony export */   detectOverflow: function() { return /* reexport safe */ _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__[\\\"default\\\"]; },\\n/* harmony export */   popperGenerator: function() { return /* binding */ popperGenerator; }\\n/* harmony export */ });\\n/* harmony import */ var _dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dom-utils/getCompositeRect.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\\\");\\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dom-utils/getLayoutRect.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\\\");\\n/* harmony import */ var _dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom-utils/listScrollParents.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\\\");\\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dom-utils/getOffsetParent.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\\\");\\n/* harmony import */ var _utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/orderModifiers.js */ \\\"./node_modules/@popperjs/core/lib/utils/orderModifiers.js\\\");\\n/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/debounce.js */ \\\"./node_modules/@popperjs/core/lib/utils/debounce.js\\\");\\n/* harmony import */ var _utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/mergeByName.js */ \\\"./node_modules/@popperjs/core/lib/utils/mergeByName.js\\\");\\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/detectOverflow.js */ \\\"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\\\");\\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-utils/instanceOf.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nvar DEFAULT_OPTIONS = {\\n  placement: 'bottom',\\n  modifiers: [],\\n  strategy: 'absolute'\\n};\\n\\nfunction areValidElements() {\\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\\n    args[_key] = arguments[_key];\\n  }\\n\\n  return !args.some(function (element) {\\n    return !(element && typeof element.getBoundingClientRect === 'function');\\n  });\\n}\\n\\nfunction popperGenerator(generatorOptions) {\\n  if (generatorOptions === void 0) {\\n    generatorOptions = {};\\n  }\\n\\n  var _generatorOptions = generatorOptions,\\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\\n  return function createPopper(reference, popper, options) {\\n    if (options === void 0) {\\n      options = defaultOptions;\\n    }\\n\\n    var state = {\\n      placement: 'bottom',\\n      orderedModifiers: [],\\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\\n      modifiersData: {},\\n      elements: {\\n        reference: reference,\\n        popper: popper\\n      },\\n      attributes: {},\\n      styles: {}\\n    };\\n    var effectCleanupFns = [];\\n    var isDestroyed = false;\\n    var instance = {\\n      state: state,\\n      setOptions: function setOptions(setOptionsAction) {\\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\\n        cleanupModifierEffects();\\n        state.options = Object.assign({}, defaultOptions, state.options, options);\\n        state.scrollParents = {\\n          reference: (0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(reference) ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(reference) : reference.contextElement ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(reference.contextElement) : [],\\n          popper: (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(popper)\\n        }; // Orders the modifiers based on their dependencies and `phase`\\n        // properties\\n\\n        var orderedModifiers = (0,_utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])((0,_utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\\n\\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\\n          return m.enabled;\\n        });\\n        runModifierEffects();\\n        return instance.update();\\n      },\\n      // Sync update – it will always be executed, even if not necessary. This\\n      // is useful for low frequency updates where sync behavior simplifies the\\n      // logic.\\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\\n      // prefer the async Popper#update method\\n      forceUpdate: function forceUpdate() {\\n        if (isDestroyed) {\\n          return;\\n        }\\n\\n        var _state$elements = state.elements,\\n            reference = _state$elements.reference,\\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\\n        // anymore\\n\\n        if (!areValidElements(reference, popper)) {\\n          return;\\n        } // Store the reference and popper rects to be read by modifiers\\n\\n\\n        state.rects = {\\n          reference: (0,_dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"])(reference, (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"])(popper), state.options.strategy === 'fixed'),\\n          popper: (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"])(popper)\\n        }; // Modifiers have the ability to reset the current update cycle. The\\n        // most common use case for this is the `flip` modifier changing the\\n        // placement, which then needs to re-run all the modifiers, because the\\n        // logic was previously ran for the previous placement and is therefore\\n        // stale/incorrect\\n\\n        state.reset = false;\\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\\n        // is filled with the initial data specified by the modifier. This means\\n        // it doesn't persist and is fresh on each update.\\n        // To ensure persistent data, use `${name}#persistent`\\n\\n        state.orderedModifiers.forEach(function (modifier) {\\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\\n        });\\n\\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\\n          if (state.reset === true) {\\n            state.reset = false;\\n            index = -1;\\n            continue;\\n          }\\n\\n          var _state$orderedModifie = state.orderedModifiers[index],\\n              fn = _state$orderedModifie.fn,\\n              _state$orderedModifie2 = _state$orderedModifie.options,\\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\\n              name = _state$orderedModifie.name;\\n\\n          if (typeof fn === 'function') {\\n            state = fn({\\n              state: state,\\n              options: _options,\\n              name: name,\\n              instance: instance\\n            }) || state;\\n          }\\n        }\\n      },\\n      // Async and optimistically optimized update – it will not be executed if\\n      // not necessary (debounced to run at most once-per-tick)\\n      update: (0,_utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"])(function () {\\n        return new Promise(function (resolve) {\\n          instance.forceUpdate();\\n          resolve(state);\\n        });\\n      }),\\n      destroy: function destroy() {\\n        cleanupModifierEffects();\\n        isDestroyed = true;\\n      }\\n    };\\n\\n    if (!areValidElements(reference, popper)) {\\n      return instance;\\n    }\\n\\n    instance.setOptions(options).then(function (state) {\\n      if (!isDestroyed && options.onFirstUpdate) {\\n        options.onFirstUpdate(state);\\n      }\\n    }); // Modifiers have the ability to execute arbitrary code before the first\\n    // update cycle runs. They will be executed in the same order as the update\\n    // cycle. This is useful when a modifier adds some persistent data that\\n    // other modifiers need to use, but the modifier is run after the dependent\\n    // one.\\n\\n    function runModifierEffects() {\\n      state.orderedModifiers.forEach(function (_ref) {\\n        var name = _ref.name,\\n            _ref$options = _ref.options,\\n            options = _ref$options === void 0 ? {} : _ref$options,\\n            effect = _ref.effect;\\n\\n        if (typeof effect === 'function') {\\n          var cleanupFn = effect({\\n            state: state,\\n            name: name,\\n            instance: instance,\\n            options: options\\n          });\\n\\n          var noopFn = function noopFn() {};\\n\\n          effectCleanupFns.push(cleanupFn || noopFn);\\n        }\\n      });\\n    }\\n\\n    function cleanupModifierEffects() {\\n      effectCleanupFns.forEach(function (fn) {\\n        return fn();\\n      });\\n      effectCleanupFns = [];\\n    }\\n\\n    return instance;\\n  };\\n}\\nvar createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\\n\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/createPopper.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/contains.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/contains.js ***!\n  \\***************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ contains; }\\n/* harmony export */ });\\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\\\");\\n\\nfunction contains(parent, child) {\\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\\n\\n  if (parent.contains(child)) {\\n    return true;\\n  } // then fallback to custom implementation with Shadow DOM support\\n  else if (rootNode && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode)) {\\n      var next = child;\\n\\n      do {\\n        if (next && parent.isSameNode(next)) {\\n          return true;\\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\\n\\n\\n        next = next.parentNode || next.host;\\n      } while (next);\\n    } // Give up, the result is false\\n\\n\\n  return false;\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/contains.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\":\n/*!****************************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js ***!\n  \\****************************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getBoundingClientRect; }\\n/* harmony export */ });\\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\\\");\\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/math.js */ \\\"./node_modules/@popperjs/core/lib/utils/math.js\\\");\\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindow.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\\\");\\n/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isLayoutViewport.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\\\");\\n\\n\\n\\n\\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy) {\\n  if (includeScale === void 0) {\\n    includeScale = false;\\n  }\\n\\n  if (isFixedStrategy === void 0) {\\n    isFixedStrategy = false;\\n  }\\n\\n  var clientRect = element.getBoundingClientRect();\\n  var scaleX = 1;\\n  var scaleY = 1;\\n\\n  if (includeScale && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {\\n    scaleX = element.offsetWidth > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.width) / element.offsetWidth || 1 : 1;\\n    scaleY = element.offsetHeight > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.height) / element.offsetHeight || 1 : 1;\\n  }\\n\\n  var _ref = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(element) : window,\\n      visualViewport = _ref.visualViewport;\\n\\n  var addVisualOffsets = !(0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])() && isFixedStrategy;\\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\\n  var width = clientRect.width / scaleX;\\n  var height = clientRect.height / scaleY;\\n  return {\\n    width: width,\\n    height: height,\\n    top: y,\\n    right: x + width,\\n    bottom: y + height,\\n    left: x,\\n    x: x,\\n    y: y\\n  };\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\":\n/*!**********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js ***!\n  \\**********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getClippingRect; }\\n/* harmony export */ });\\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \\\"./node_modules/@popperjs/core/lib/enums.js\\\");\\n/* harmony import */ var _getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getViewportRect.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\\\");\\n/* harmony import */ var _getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentRect.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\\\");\\n/* harmony import */ var _listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./listScrollParents.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\\\");\\n/* harmony import */ var _getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./getOffsetParent.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\\\");\\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getDocumentElement.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\\\");\\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getComputedStyle.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\\\");\\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./instanceOf.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\\\");\\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\\\");\\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getParentNode.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\\\");\\n/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./contains.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/contains.js\\\");\\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./getNodeName.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\\\");\\n/* harmony import */ var _utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/rectToClientRect.js */ \\\"./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\\\");\\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/math.js */ \\\"./node_modules/@popperjs/core/lib/utils/math.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nfunction getInnerBoundingClientRect(element, strategy) {\\n  var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(element, false, strategy === 'fixed');\\n  rect.top = rect.top + element.clientTop;\\n  rect.left = rect.left + element.clientLeft;\\n  rect.bottom = rect.top + element.clientHeight;\\n  rect.right = rect.left + element.clientWidth;\\n  rect.width = element.clientWidth;\\n  rect.height = element.clientHeight;\\n  rect.x = rect.left;\\n  rect.y = rect.top;\\n  return rect;\\n}\\n\\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\\n  return clippingParent === _enums_js__WEBPACK_IMPORTED_MODULE_1__.viewport ? (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])((0,_getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(element, strategy)) : (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])((0,_getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"])(element)));\\n} // A \\\"clipping parent\\\" is an overflowable container with the characteristic of\\n// clipping (or hiding) overflowing elements with a position different from\\n// `initial`\\n\\n\\nfunction getClippingParents(element) {\\n  var clippingParents = (0,_listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"])((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_8__[\\\"default\\\"])(element));\\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__[\\\"default\\\"])(element).position) >= 0;\\n  var clipperElement = canEscapeClipping && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isHTMLElement)(element) ? (0,_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__[\\\"default\\\"])(element) : element;\\n\\n  if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clipperElement)) {\\n    return [];\\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\\n\\n\\n  return clippingParents.filter(function (clippingParent) {\\n    return (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) && (0,_contains_js__WEBPACK_IMPORTED_MODULE_11__[\\\"default\\\"])(clippingParent, clipperElement) && (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_12__[\\\"default\\\"])(clippingParent) !== 'body';\\n  });\\n} // Gets the maximum area that the element is visible in due to any number of\\n// clipping parents\\n\\n\\nfunction getClippingRect(element, boundary, rootBoundary, strategy) {\\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\\n  var firstClippingParent = clippingParents[0];\\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\\n    accRect.top = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.top, accRect.top);\\n    accRect.right = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.right, accRect.right);\\n    accRect.bottom = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.bottom, accRect.bottom);\\n    accRect.left = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.left, accRect.left);\\n    return accRect;\\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\\n  clippingRect.width = clippingRect.right - clippingRect.left;\\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\\n  clippingRect.x = clippingRect.left;\\n  clippingRect.y = clippingRect.top;\\n  return clippingRect;\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\":\n/*!***********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js ***!\n  \\***********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getCompositeRect; }\\n/* harmony export */ });\\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\\\");\\n/* harmony import */ var _getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getNodeScroll.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\\\");\\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\\\");\\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\\\");\\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\\\");\\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\\\");\\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isScrollParent.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\\\");\\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ \\\"./node_modules/@popperjs/core/lib/utils/math.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nfunction isElementScaled(element) {\\n  var rect = element.getBoundingClientRect();\\n  var scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.width) / element.offsetWidth || 1;\\n  var scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.height) / element.offsetHeight || 1;\\n  return scaleX !== 1 || scaleY !== 1;\\n} // Returns the composite rect of an element relative to its offsetParent.\\n// Composite means it takes into account transforms as well as layout.\\n\\n\\nfunction getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\\n  if (isFixed === void 0) {\\n    isFixed = false;\\n  }\\n\\n  var isOffsetParentAnElement = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent);\\n  var offsetParentIsScaled = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent) && isElementScaled(offsetParent);\\n  var documentElement = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(offsetParent);\\n  var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(elementOrVirtualElement, offsetParentIsScaled, isFixed);\\n  var scroll = {\\n    scrollLeft: 0,\\n    scrollTop: 0\\n  };\\n  var offsets = {\\n    x: 0,\\n    y: 0\\n  };\\n\\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\\n    if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"])(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\\n    (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"])(documentElement)) {\\n      scroll = (0,_getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"])(offsetParent);\\n    }\\n\\n    if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent)) {\\n      offsets = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(offsetParent, true);\\n      offsets.x += offsetParent.clientLeft;\\n      offsets.y += offsetParent.clientTop;\\n    } else if (documentElement) {\\n      offsets.x = (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"])(documentElement);\\n    }\\n  }\\n\\n  return {\\n    x: rect.left + scroll.scrollLeft - offsets.x,\\n    y: rect.top + scroll.scrollTop - offsets.y,\\n    width: rect.width,\\n    height: rect.height\\n  };\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\":\n/*!***********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js ***!\n  \\***********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getComputedStyle; }\\n/* harmony export */ });\\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\\\");\\n\\nfunction getComputedStyle(element) {\\n  return (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(element).getComputedStyle(element);\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\":\n/*!*************************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js ***!\n  \\*************************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getDocumentElement; }\\n/* harmony export */ });\\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\\\");\\n\\nfunction getDocumentElement(element) {\\n  // $FlowFixMe[incompatible-return]: assume body is always available\\n  return (((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\\n  element.document) || window.document).documentElement;\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\":\n/*!**********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js ***!\n  \\**********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getDocumentRect; }\\n/* harmony export */ });\\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDocumentElement.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\\\");\\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getComputedStyle.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\\\");\\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\\\");\\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindowScroll.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\\\");\\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/math.js */ \\\"./node_modules/@popperjs/core/lib/utils/math.js\\\");\\n\\n\\n\\n\\n // Gets the entire size of the scrollable document area, even extending outside\\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\\n\\nfunction getDocumentRect(element) {\\n  var _element$ownerDocumen;\\n\\n  var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(element);\\n  var winScroll = (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(element);\\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\\n  var width = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\\n  var height = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\\n  var x = -winScroll.scrollLeft + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(element);\\n  var y = -winScroll.scrollTop;\\n\\n  if ((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"])(body || html).direction === 'rtl') {\\n    x += (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.clientWidth, body ? body.clientWidth : 0) - width;\\n  }\\n\\n  return {\\n    width: width,\\n    height: height,\\n    x: x,\\n    y: y\\n  };\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\":\n/*!***************************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js ***!\n  \\***************************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getHTMLElementScroll; }\\n/* harmony export */ });\\nfunction getHTMLElementScroll(element) {\\n  return {\\n    scrollLeft: element.scrollLeft,\\n    scrollTop: element.scrollTop\\n  };\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js ***!\n  \\********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getLayoutRect; }\\n/* harmony export */ });\\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\\\");\\n // Returns the layout rect of an element relative to its offsetParent. Layout\\n// means it doesn't take into account transforms.\\n\\nfunction getLayoutRect(element) {\\n  var clientRect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(element); // Use the clientRect sizes if it's not been transformed.\\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\\n\\n  var width = element.offsetWidth;\\n  var height = element.offsetHeight;\\n\\n  if (Math.abs(clientRect.width - width) <= 1) {\\n    width = clientRect.width;\\n  }\\n\\n  if (Math.abs(clientRect.height - height) <= 1) {\\n    height = clientRect.height;\\n  }\\n\\n  return {\\n    x: element.offsetLeft,\\n    y: element.offsetTop,\\n    width: width,\\n    height: height\\n  };\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\":\n/*!******************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js ***!\n  \\******************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getNodeName; }\\n/* harmony export */ });\\nfunction getNodeName(element) {\\n  return element ? (element.nodeName || '').toLowerCase() : null;\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js ***!\n  \\********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getNodeScroll; }\\n/* harmony export */ });\\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\\\");\\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\\\");\\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\\\");\\n/* harmony import */ var _getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getHTMLElementScroll.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\\\");\\n\\n\\n\\n\\nfunction getNodeScroll(node) {\\n  if (node === (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(node) || !(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node)) {\\n    return (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(node);\\n  } else {\\n    return (0,_getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(node);\\n  }\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\":\n/*!**********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js ***!\n  \\**********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getOffsetParent; }\\n/* harmony export */ });\\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getWindow.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\\\");\\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\\\");\\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getComputedStyle.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\\\");\\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\\\");\\n/* harmony import */ var _isTableElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isTableElement.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\\\");\\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\\\");\\n/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/userAgent.js */ \\\"./node_modules/@popperjs/core/lib/utils/userAgent.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\nfunction getTrueOffsetParent(element) {\\n  if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || // https://github.com/popperjs/popper-core/issues/837\\n  (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(element).position === 'fixed') {\\n    return null;\\n  }\\n\\n  return element.offsetParent;\\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\\n// return the containing block\\n\\n\\nfunction getContainingBlock(element) {\\n  var isFirefox = /firefox/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])());\\n  var isIE = /Trident/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])());\\n\\n  if (isIE && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {\\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\\n    var elementCss = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(element);\\n\\n    if (elementCss.position === 'fixed') {\\n      return null;\\n    }\\n  }\\n\\n  var currentNode = (0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(element);\\n\\n  if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(currentNode)) {\\n    currentNode = currentNode.host;\\n  }\\n\\n  while ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(currentNode) && ['html', 'body'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"])(currentNode)) < 0) {\\n    var css = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(currentNode); // This is non-exhaustive but covers the most common CSS properties that\\n    // create a containing block.\\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\\n\\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\\n      return currentNode;\\n    } else {\\n      currentNode = currentNode.parentNode;\\n    }\\n  }\\n\\n  return null;\\n} // Gets the closest ancestor positioned element. Handles some edge cases,\\n// such as table ancestors and cross browser bugs.\\n\\n\\nfunction getOffsetParent(element) {\\n  var window = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"])(element);\\n  var offsetParent = getTrueOffsetParent(element);\\n\\n  while (offsetParent && (0,_isTableElement_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"])(offsetParent) && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(offsetParent).position === 'static') {\\n    offsetParent = getTrueOffsetParent(offsetParent);\\n  }\\n\\n  if (offsetParent && ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"])(offsetParent) === 'html' || (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"])(offsetParent) === 'body' && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(offsetParent).position === 'static')) {\\n    return window;\\n  }\\n\\n  return offsetParent || getContainingBlock(element) || window;\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js ***!\n  \\********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getParentNode; }\\n/* harmony export */ });\\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\\\");\\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\\\");\\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\\\");\\n\\n\\n\\nfunction getParentNode(element) {\\n  if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(element) === 'html') {\\n    return element;\\n  }\\n\\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\\n    // $FlowFixMe[incompatible-return]\\n    // $FlowFixMe[prop-missing]\\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\\n    element.parentNode || ( // DOM Element detected\\n    (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isShadowRoot)(element) ? element.host : null) || // ShadowRoot detected\\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\\n    (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(element) // fallback\\n\\n  );\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\":\n/*!**********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js ***!\n  \\**********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getScrollParent; }\\n/* harmony export */ });\\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\\\");\\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\\\");\\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\\\");\\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\\\");\\n\\n\\n\\n\\nfunction getScrollParent(node) {\\n  if (['html', 'body', '#document'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(node)) >= 0) {\\n    // $FlowFixMe[incompatible-return]: assume body is always available\\n    return node.ownerDocument.body;\\n  }\\n\\n  if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node) && (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(node)) {\\n    return node;\\n  }\\n\\n  return getScrollParent((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(node));\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\":\n/*!**********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js ***!\n  \\**********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getViewportRect; }\\n/* harmony export */ });\\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\\\");\\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\\\");\\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\\\");\\n/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isLayoutViewport.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\\\");\\n\\n\\n\\n\\nfunction getViewportRect(element, strategy) {\\n  var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(element);\\n  var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(element);\\n  var visualViewport = win.visualViewport;\\n  var width = html.clientWidth;\\n  var height = html.clientHeight;\\n  var x = 0;\\n  var y = 0;\\n\\n  if (visualViewport) {\\n    width = visualViewport.width;\\n    height = visualViewport.height;\\n    var layoutViewport = (0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])();\\n\\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\\n      x = visualViewport.offsetLeft;\\n      y = visualViewport.offsetTop;\\n    }\\n  }\\n\\n  return {\\n    width: width,\\n    height: height,\\n    x: x + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(element),\\n    y: y\\n  };\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js ***!\n  \\****************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getWindow; }\\n/* harmony export */ });\\nfunction getWindow(node) {\\n  if (node == null) {\\n    return window;\\n  }\\n\\n  if (node.toString() !== '[object Window]') {\\n    var ownerDocument = node.ownerDocument;\\n    return ownerDocument ? ownerDocument.defaultView || window : window;\\n  }\\n\\n  return node;\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\":\n/*!**********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js ***!\n  \\**********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getWindowScroll; }\\n/* harmony export */ });\\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\\\");\\n\\nfunction getWindowScroll(node) {\\n  var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(node);\\n  var scrollLeft = win.pageXOffset;\\n  var scrollTop = win.pageYOffset;\\n  return {\\n    scrollLeft: scrollLeft,\\n    scrollTop: scrollTop\\n  };\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\":\n/*!**************************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js ***!\n  \\**************************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getWindowScrollBarX; }\\n/* harmony export */ });\\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\\\");\\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\\\");\\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\\\");\\n\\n\\n\\nfunction getWindowScrollBarX(element) {\\n  // If <html> has a CSS width greater than the viewport, then this will be\\n  // incorrect for RTL.\\n  // Popper 1 is broken in this case and never had a bug report so let's assume\\n  // it's not an issue. I don't think anyone ever specifies width on <html>\\n  // anyway.\\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\\n  // this (e.g. Edge 2019, IE11, Safari)\\n  return (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(element)).left + (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(element).scrollLeft;\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\":\n/*!*****************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js ***!\n  \\*****************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   isElement: function() { return /* binding */ isElement; },\\n/* harmony export */   isHTMLElement: function() { return /* binding */ isHTMLElement; },\\n/* harmony export */   isShadowRoot: function() { return /* binding */ isShadowRoot; }\\n/* harmony export */ });\\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\\\");\\n\\n\\nfunction isElement(node) {\\n  var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(node).Element;\\n  return node instanceof OwnElement || node instanceof Element;\\n}\\n\\nfunction isHTMLElement(node) {\\n  var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(node).HTMLElement;\\n  return node instanceof OwnElement || node instanceof HTMLElement;\\n}\\n\\nfunction isShadowRoot(node) {\\n  // IE 11 has no ShadowRoot\\n  if (typeof ShadowRoot === 'undefined') {\\n    return false;\\n  }\\n\\n  var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(node).ShadowRoot;\\n  return node instanceof OwnElement || node instanceof ShadowRoot;\\n}\\n\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\":\n/*!***********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js ***!\n  \\***********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ isLayoutViewport; }\\n/* harmony export */ });\\n/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/userAgent.js */ \\\"./node_modules/@popperjs/core/lib/utils/userAgent.js\\\");\\n\\nfunction isLayoutViewport() {\\n  return !/^((?!chrome|android).)*safari/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])());\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\":\n/*!*********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js ***!\n  \\*********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ isScrollParent; }\\n/* harmony export */ });\\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getComputedStyle.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\\\");\\n\\nfunction isScrollParent(element) {\\n  // Firefox wants us to check `-x` and `-y` variations as well\\n  var _getComputedStyle = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(element),\\n      overflow = _getComputedStyle.overflow,\\n      overflowX = _getComputedStyle.overflowX,\\n      overflowY = _getComputedStyle.overflowY;\\n\\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\":\n/*!*********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js ***!\n  \\*********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ isTableElement; }\\n/* harmony export */ });\\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\\\");\\n\\nfunction isTableElement(element) {\\n  return ['table', 'td', 'th'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(element)) >= 0;\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\":\n/*!************************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js ***!\n  \\************************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ listScrollParents; }\\n/* harmony export */ });\\n/* harmony import */ var _getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getScrollParent.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\\\");\\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\\\");\\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindow.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\\\");\\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\\\");\\n\\n\\n\\n\\n/*\\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\\nuntil we get to the top window object. This list is what we attach scroll listeners\\nto, because if any of these parent elements scroll, we'll need to re-calculate the\\nreference element's position.\\n*/\\n\\nfunction listScrollParents(element, list) {\\n  var _element$ownerDocumen;\\n\\n  if (list === void 0) {\\n    list = [];\\n  }\\n\\n  var scrollParent = (0,_getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(element);\\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\\n  var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(scrollParent);\\n  var target = isBody ? [win].concat(win.visualViewport || [], (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(scrollParent) ? scrollParent : []) : scrollParent;\\n  var updatedList = list.concat(target);\\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\\n  updatedList.concat(listScrollParents((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(target)));\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/enums.js\":\n/*!**************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/enums.js ***!\n  \\**************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   afterMain: function() { return /* binding */ afterMain; },\\n/* harmony export */   afterRead: function() { return /* binding */ afterRead; },\\n/* harmony export */   afterWrite: function() { return /* binding */ afterWrite; },\\n/* harmony export */   auto: function() { return /* binding */ auto; },\\n/* harmony export */   basePlacements: function() { return /* binding */ basePlacements; },\\n/* harmony export */   beforeMain: function() { return /* binding */ beforeMain; },\\n/* harmony export */   beforeRead: function() { return /* binding */ beforeRead; },\\n/* harmony export */   beforeWrite: function() { return /* binding */ beforeWrite; },\\n/* harmony export */   bottom: function() { return /* binding */ bottom; },\\n/* harmony export */   clippingParents: function() { return /* binding */ clippingParents; },\\n/* harmony export */   end: function() { return /* binding */ end; },\\n/* harmony export */   left: function() { return /* binding */ left; },\\n/* harmony export */   main: function() { return /* binding */ main; },\\n/* harmony export */   modifierPhases: function() { return /* binding */ modifierPhases; },\\n/* harmony export */   placements: function() { return /* binding */ placements; },\\n/* harmony export */   popper: function() { return /* binding */ popper; },\\n/* harmony export */   read: function() { return /* binding */ read; },\\n/* harmony export */   reference: function() { return /* binding */ reference; },\\n/* harmony export */   right: function() { return /* binding */ right; },\\n/* harmony export */   start: function() { return /* binding */ start; },\\n/* harmony export */   top: function() { return /* binding */ top; },\\n/* harmony export */   variationPlacements: function() { return /* binding */ variationPlacements; },\\n/* harmony export */   viewport: function() { return /* binding */ viewport; },\\n/* harmony export */   write: function() { return /* binding */ write; }\\n/* harmony export */ });\\nvar top = 'top';\\nvar bottom = 'bottom';\\nvar right = 'right';\\nvar left = 'left';\\nvar auto = 'auto';\\nvar basePlacements = [top, bottom, right, left];\\nvar start = 'start';\\nvar end = 'end';\\nvar clippingParents = 'clippingParents';\\nvar viewport = 'viewport';\\nvar popper = 'popper';\\nvar reference = 'reference';\\nvar variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\\n  return acc.concat([placement + \\\"-\\\" + start, placement + \\\"-\\\" + end]);\\n}, []);\\nvar placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\\n  return acc.concat([placement, placement + \\\"-\\\" + start, placement + \\\"-\\\" + end]);\\n}, []); // modifiers that need to read the DOM\\n\\nvar beforeRead = 'beforeRead';\\nvar read = 'read';\\nvar afterRead = 'afterRead'; // pure-logic modifiers\\n\\nvar beforeMain = 'beforeMain';\\nvar main = 'main';\\nvar afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\\n\\nvar beforeWrite = 'beforeWrite';\\nvar write = 'write';\\nvar afterWrite = 'afterWrite';\\nvar modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/enums.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/index.js\":\n/*!**************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/index.js ***!\n  \\**************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   afterMain: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterMain; },\\n/* harmony export */   afterRead: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterRead; },\\n/* harmony export */   afterWrite: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterWrite; },\\n/* harmony export */   applyStyles: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.applyStyles; },\\n/* harmony export */   arrow: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.arrow; },\\n/* harmony export */   auto: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.auto; },\\n/* harmony export */   basePlacements: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements; },\\n/* harmony export */   beforeMain: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeMain; },\\n/* harmony export */   beforeRead: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeRead; },\\n/* harmony export */   beforeWrite: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeWrite; },\\n/* harmony export */   bottom: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom; },\\n/* harmony export */   clippingParents: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents; },\\n/* harmony export */   computeStyles: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.computeStyles; },\\n/* harmony export */   createPopper: function() { return /* reexport safe */ _popper_js__WEBPACK_IMPORTED_MODULE_4__.createPopper; },\\n/* harmony export */   createPopperBase: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.createPopper; },\\n/* harmony export */   createPopperLite: function() { return /* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__.createPopper; },\\n/* harmony export */   detectOverflow: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"]; },\\n/* harmony export */   end: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.end; },\\n/* harmony export */   eventListeners: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.eventListeners; },\\n/* harmony export */   flip: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.flip; },\\n/* harmony export */   hide: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.hide; },\\n/* harmony export */   left: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.left; },\\n/* harmony export */   main: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.main; },\\n/* harmony export */   modifierPhases: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases; },\\n/* harmony export */   offset: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.offset; },\\n/* harmony export */   placements: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements; },\\n/* harmony export */   popper: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper; },\\n/* harmony export */   popperGenerator: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.popperGenerator; },\\n/* harmony export */   popperOffsets: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.popperOffsets; },\\n/* harmony export */   preventOverflow: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.preventOverflow; },\\n/* harmony export */   read: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.read; },\\n/* harmony export */   reference: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference; },\\n/* harmony export */   right: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.right; },\\n/* harmony export */   start: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.start; },\\n/* harmony export */   top: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.top; },\\n/* harmony export */   variationPlacements: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements; },\\n/* harmony export */   viewport: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport; },\\n/* harmony export */   write: function() { return /* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.write; }\\n/* harmony export */ });\\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enums.js */ \\\"./node_modules/@popperjs/core/lib/enums.js\\\");\\n/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/index.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/index.js\\\");\\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createPopper.js */ \\\"./node_modules/@popperjs/core/lib/createPopper.js\\\");\\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createPopper.js */ \\\"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\\\");\\n/* harmony import */ var _popper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./popper.js */ \\\"./node_modules/@popperjs/core/lib/popper.js\\\");\\n/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./popper-lite.js */ \\\"./node_modules/@popperjs/core/lib/popper-lite.js\\\");\\n\\n // eslint-disable-next-line import/no-unused-modules\\n\\n // eslint-disable-next-line import/no-unused-modules\\n\\n // eslint-disable-next-line import/no-unused-modules\\n\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\":\n/*!******************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js ***!\n  \\******************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getNodeName.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\\\");\\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\\\");\\n\\n // This modifier takes the styles prepared by the `computeStyles` modifier\\n// and applies them to the HTMLElements such as popper and arrow\\n\\nfunction applyStyles(_ref) {\\n  var state = _ref.state;\\n  Object.keys(state.elements).forEach(function (name) {\\n    var style = state.styles[name] || {};\\n    var attributes = state.attributes[name] || {};\\n    var element = state.elements[name]; // arrow is optional + virtual elements\\n\\n    if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(element)) {\\n      return;\\n    } // Flow doesn't support to extend this property, but it's the most\\n    // effective way to apply styles to an HTMLElement\\n    // $FlowFixMe[cannot-write]\\n\\n\\n    Object.assign(element.style, style);\\n    Object.keys(attributes).forEach(function (name) {\\n      var value = attributes[name];\\n\\n      if (value === false) {\\n        element.removeAttribute(name);\\n      } else {\\n        element.setAttribute(name, value === true ? '' : value);\\n      }\\n    });\\n  });\\n}\\n\\nfunction effect(_ref2) {\\n  var state = _ref2.state;\\n  var initialStyles = {\\n    popper: {\\n      position: state.options.strategy,\\n      left: '0',\\n      top: '0',\\n      margin: '0'\\n    },\\n    arrow: {\\n      position: 'absolute'\\n    },\\n    reference: {}\\n  };\\n  Object.assign(state.elements.popper.style, initialStyles.popper);\\n  state.styles = initialStyles;\\n\\n  if (state.elements.arrow) {\\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\\n  }\\n\\n  return function () {\\n    Object.keys(state.elements).forEach(function (name) {\\n      var element = state.elements[name];\\n      var attributes = state.attributes[name] || {};\\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\\n\\n      var style = styleProperties.reduce(function (style, property) {\\n        style[property] = '';\\n        return style;\\n      }, {}); // arrow is optional + virtual elements\\n\\n      if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(element)) {\\n        return;\\n      }\\n\\n      Object.assign(element.style, style);\\n      Object.keys(attributes).forEach(function (attribute) {\\n        element.removeAttribute(attribute);\\n      });\\n    });\\n  };\\n} // eslint-disable-next-line import/no-unused-modules\\n\\n\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = ({\\n  name: 'applyStyles',\\n  enabled: true,\\n  phase: 'write',\\n  fn: applyStyles,\\n  effect: effect,\\n  requires: ['computeStyles']\\n});\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/modifiers/arrow.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/modifiers/arrow.js ***!\n  \\************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \\\"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\\\");\\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\\\");\\n/* harmony import */ var _dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../dom-utils/contains.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/contains.js\\\");\\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\\\");\\n/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ \\\"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\\\");\\n/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/within.js */ \\\"./node_modules/@popperjs/core/lib/utils/within.js\\\");\\n/* harmony import */ var _utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/mergePaddingObject.js */ \\\"./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\\\");\\n/* harmony import */ var _utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/expandToHashMap.js */ \\\"./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\\\");\\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ \\\"./node_modules/@popperjs/core/lib/enums.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n // eslint-disable-next-line import/no-unused-modules\\n\\nvar toPaddingObject = function toPaddingObject(padding, state) {\\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\\n    placement: state.placement\\n  })) : padding;\\n  return (0,_utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(typeof padding !== 'number' ? padding : (0,_utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_2__.basePlacements));\\n};\\n\\nfunction arrow(_ref) {\\n  var _state$modifiersData$;\\n\\n  var state = _ref.state,\\n      name = _ref.name,\\n      options = _ref.options;\\n  var arrowElement = state.elements.arrow;\\n  var popperOffsets = state.modifiersData.popperOffsets;\\n  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(state.placement);\\n  var axis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"])(basePlacement);\\n  var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_2__.left, _enums_js__WEBPACK_IMPORTED_MODULE_2__.right].indexOf(basePlacement) >= 0;\\n  var len = isVertical ? 'height' : 'width';\\n\\n  if (!arrowElement || !popperOffsets) {\\n    return;\\n  }\\n\\n  var paddingObject = toPaddingObject(options.padding, state);\\n  var arrowRect = (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"])(arrowElement);\\n  var minProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.top : _enums_js__WEBPACK_IMPORTED_MODULE_2__.left;\\n  var maxProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_2__.right;\\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\\n  var arrowOffsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"])(arrowElement);\\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\\n  // outside of the popper bounds\\n\\n  var min = paddingObject[minProp];\\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\\n  var offset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_7__.within)(min, center, max); // Prevents breaking syntax highlighting...\\n\\n  var axisProp = axis;\\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\\n}\\n\\nfunction effect(_ref2) {\\n  var state = _ref2.state,\\n      options = _ref2.options;\\n  var _options$element = options.element,\\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\\n\\n  if (arrowElement == null) {\\n    return;\\n  } // CSS selector\\n\\n\\n  if (typeof arrowElement === 'string') {\\n    arrowElement = state.elements.popper.querySelector(arrowElement);\\n\\n    if (!arrowElement) {\\n      return;\\n    }\\n  }\\n\\n  if (!(0,_dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__[\\\"default\\\"])(state.elements.popper, arrowElement)) {\\n    return;\\n  }\\n\\n  state.elements.arrow = arrowElement;\\n} // eslint-disable-next-line import/no-unused-modules\\n\\n\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = ({\\n  name: 'arrow',\\n  enabled: true,\\n  phase: 'main',\\n  fn: arrow,\\n  effect: effect,\\n  requires: ['popperOffsets'],\\n  requiresIfExists: ['preventOverflow']\\n});\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/modifiers/arrow.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js ***!\n  \\********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   mapToStyles: function() { return /* binding */ mapToStyles; }\\n/* harmony export */ });\\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \\\"./node_modules/@popperjs/core/lib/enums.js\\\");\\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\\\");\\n/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\\\");\\n/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\\\");\\n/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getComputedStyle.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\\\");\\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \\\"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\\\");\\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getVariation.js */ \\\"./node_modules/@popperjs/core/lib/utils/getVariation.js\\\");\\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ \\\"./node_modules/@popperjs/core/lib/utils/math.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n // eslint-disable-next-line import/no-unused-modules\\n\\nvar unsetSides = {\\n  top: 'auto',\\n  right: 'auto',\\n  bottom: 'auto',\\n  left: 'auto'\\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\\n// Zooming can change the DPR, but it seems to report a value that will\\n// cleanly divide the values into the appropriate subpixels.\\n\\nfunction roundOffsetsByDPR(_ref, win) {\\n  var x = _ref.x,\\n      y = _ref.y;\\n  var dpr = win.devicePixelRatio || 1;\\n  return {\\n    x: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(x * dpr) / dpr || 0,\\n    y: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(y * dpr) / dpr || 0\\n  };\\n}\\n\\nfunction mapToStyles(_ref2) {\\n  var _Object$assign2;\\n\\n  var popper = _ref2.popper,\\n      popperRect = _ref2.popperRect,\\n      placement = _ref2.placement,\\n      variation = _ref2.variation,\\n      offsets = _ref2.offsets,\\n      position = _ref2.position,\\n      gpuAcceleration = _ref2.gpuAcceleration,\\n      adaptive = _ref2.adaptive,\\n      roundOffsets = _ref2.roundOffsets,\\n      isFixed = _ref2.isFixed;\\n  var _offsets$x = offsets.x,\\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\\n      _offsets$y = offsets.y,\\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\\n\\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\\n    x: x,\\n    y: y\\n  }) : {\\n    x: x,\\n    y: y\\n  };\\n\\n  x = _ref3.x;\\n  y = _ref3.y;\\n  var hasX = offsets.hasOwnProperty('x');\\n  var hasY = offsets.hasOwnProperty('y');\\n  var sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.left;\\n  var sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.top;\\n  var win = window;\\n\\n  if (adaptive) {\\n    var offsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(popper);\\n    var heightProp = 'clientHeight';\\n    var widthProp = 'clientWidth';\\n\\n    if (offsetParent === (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(popper)) {\\n      offsetParent = (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"])(popper);\\n\\n      if ((0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"])(offsetParent).position !== 'static' && position === 'absolute') {\\n        heightProp = 'scrollHeight';\\n        widthProp = 'scrollWidth';\\n      }\\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\\n\\n\\n    offsetParent = offsetParent;\\n\\n    if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.right) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {\\n      sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom;\\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\\n      offsetParent[heightProp];\\n      y -= offsetY - popperRect.height;\\n      y *= gpuAcceleration ? 1 : -1;\\n    }\\n\\n    if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {\\n      sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.right;\\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\\n      offsetParent[widthProp];\\n      x -= offsetX - popperRect.width;\\n      x *= gpuAcceleration ? 1 : -1;\\n    }\\n  }\\n\\n  var commonStyles = Object.assign({\\n    position: position\\n  }, adaptive && unsetSides);\\n\\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\\n    x: x,\\n    y: y\\n  }, (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(popper)) : {\\n    x: x,\\n    y: y\\n  };\\n\\n  x = _ref4.x;\\n  y = _ref4.y;\\n\\n  if (gpuAcceleration) {\\n    var _Object$assign;\\n\\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \\\"translate(\\\" + x + \\\"px, \\\" + y + \\\"px)\\\" : \\\"translate3d(\\\" + x + \\\"px, \\\" + y + \\\"px, 0)\\\", _Object$assign));\\n  }\\n\\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \\\"px\\\" : '', _Object$assign2[sideX] = hasX ? x + \\\"px\\\" : '', _Object$assign2.transform = '', _Object$assign2));\\n}\\n\\nfunction computeStyles(_ref5) {\\n  var state = _ref5.state,\\n      options = _ref5.options;\\n  var _options$gpuAccelerat = options.gpuAcceleration,\\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\\n      _options$adaptive = options.adaptive,\\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\\n      _options$roundOffsets = options.roundOffsets,\\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\\n  var commonStyles = {\\n    placement: (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"])(state.placement),\\n    variation: (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"])(state.placement),\\n    popper: state.elements.popper,\\n    popperRect: state.rects.popper,\\n    gpuAcceleration: gpuAcceleration,\\n    isFixed: state.options.strategy === 'fixed'\\n  };\\n\\n  if (state.modifiersData.popperOffsets != null) {\\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\\n      offsets: state.modifiersData.popperOffsets,\\n      position: state.options.strategy,\\n      adaptive: adaptive,\\n      roundOffsets: roundOffsets\\n    })));\\n  }\\n\\n  if (state.modifiersData.arrow != null) {\\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\\n      offsets: state.modifiersData.arrow,\\n      position: 'absolute',\\n      adaptive: false,\\n      roundOffsets: roundOffsets\\n    })));\\n  }\\n\\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\\n    'data-popper-placement': state.placement\\n  });\\n} // eslint-disable-next-line import/no-unused-modules\\n\\n\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = ({\\n  name: 'computeStyles',\\n  enabled: true,\\n  phase: 'beforeWrite',\\n  fn: computeStyles,\\n  data: {}\\n});\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\":\n/*!*********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js ***!\n  \\*********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\\\");\\n // eslint-disable-next-line import/no-unused-modules\\n\\nvar passive = {\\n  passive: true\\n};\\n\\nfunction effect(_ref) {\\n  var state = _ref.state,\\n      instance = _ref.instance,\\n      options = _ref.options;\\n  var _options$scroll = options.scroll,\\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\\n      _options$resize = options.resize,\\n      resize = _options$resize === void 0 ? true : _options$resize;\\n  var window = (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(state.elements.popper);\\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\\n\\n  if (scroll) {\\n    scrollParents.forEach(function (scrollParent) {\\n      scrollParent.addEventListener('scroll', instance.update, passive);\\n    });\\n  }\\n\\n  if (resize) {\\n    window.addEventListener('resize', instance.update, passive);\\n  }\\n\\n  return function () {\\n    if (scroll) {\\n      scrollParents.forEach(function (scrollParent) {\\n        scrollParent.removeEventListener('scroll', instance.update, passive);\\n      });\\n    }\\n\\n    if (resize) {\\n      window.removeEventListener('resize', instance.update, passive);\\n    }\\n  };\\n} // eslint-disable-next-line import/no-unused-modules\\n\\n\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = ({\\n  name: 'eventListeners',\\n  enabled: true,\\n  phase: 'write',\\n  fn: function fn() {},\\n  effect: effect,\\n  data: {}\\n});\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/modifiers/flip.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/modifiers/flip.js ***!\n  \\***********************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getOppositePlacement.js */ \\\"./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js\\\");\\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \\\"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\\\");\\n/* harmony import */ var _utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getOppositeVariationPlacement.js */ \\\"./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js\\\");\\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/detectOverflow.js */ \\\"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\\\");\\n/* harmony import */ var _utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/computeAutoPlacement.js */ \\\"./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js\\\");\\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \\\"./node_modules/@popperjs/core/lib/enums.js\\\");\\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/getVariation.js */ \\\"./node_modules/@popperjs/core/lib/utils/getVariation.js\\\");\\n\\n\\n\\n\\n\\n\\n // eslint-disable-next-line import/no-unused-modules\\n\\nfunction getExpandedFallbackPlacements(placement) {\\n  if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto) {\\n    return [];\\n  }\\n\\n  var oppositePlacement = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(placement);\\n  return [(0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(placement), oppositePlacement, (0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(oppositePlacement)];\\n}\\n\\nfunction flip(_ref) {\\n  var state = _ref.state,\\n      options = _ref.options,\\n      name = _ref.name;\\n\\n  if (state.modifiersData[name]._skip) {\\n    return;\\n  }\\n\\n  var _options$mainAxis = options.mainAxis,\\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\\n      _options$altAxis = options.altAxis,\\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\\n      specifiedFallbackPlacements = options.fallbackPlacements,\\n      padding = options.padding,\\n      boundary = options.boundary,\\n      rootBoundary = options.rootBoundary,\\n      altBoundary = options.altBoundary,\\n      _options$flipVariatio = options.flipVariations,\\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\\n      allowedAutoPlacements = options.allowedAutoPlacements;\\n  var preferredPlacement = state.options.placement;\\n  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(preferredPlacement);\\n  var isBasePlacement = basePlacement === preferredPlacement;\\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [(0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\\n    return acc.concat((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto ? (0,_utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"])(state, {\\n      placement: placement,\\n      boundary: boundary,\\n      rootBoundary: rootBoundary,\\n      padding: padding,\\n      flipVariations: flipVariations,\\n      allowedAutoPlacements: allowedAutoPlacements\\n    }) : placement);\\n  }, []);\\n  var referenceRect = state.rects.reference;\\n  var popperRect = state.rects.popper;\\n  var checksMap = new Map();\\n  var makeFallbackChecks = true;\\n  var firstFittingPlacement = placements[0];\\n\\n  for (var i = 0; i < placements.length; i++) {\\n    var placement = placements[i];\\n\\n    var _basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(placement);\\n\\n    var isStartVariation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.start;\\n    var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.top, _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom].indexOf(_basePlacement) >= 0;\\n    var len = isVertical ? 'width' : 'height';\\n    var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"])(state, {\\n      placement: placement,\\n      boundary: boundary,\\n      rootBoundary: rootBoundary,\\n      altBoundary: altBoundary,\\n      padding: padding\\n    });\\n    var mainVariationSide = isVertical ? isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.right : _enums_js__WEBPACK_IMPORTED_MODULE_1__.left : isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_1__.top;\\n\\n    if (referenceRect[len] > popperRect[len]) {\\n      mainVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(mainVariationSide);\\n    }\\n\\n    var altVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(mainVariationSide);\\n    var checks = [];\\n\\n    if (checkMainAxis) {\\n      checks.push(overflow[_basePlacement] <= 0);\\n    }\\n\\n    if (checkAltAxis) {\\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\\n    }\\n\\n    if (checks.every(function (check) {\\n      return check;\\n    })) {\\n      firstFittingPlacement = placement;\\n      makeFallbackChecks = false;\\n      break;\\n    }\\n\\n    checksMap.set(placement, checks);\\n  }\\n\\n  if (makeFallbackChecks) {\\n    // `2` may be desired in some cases – research later\\n    var numberOfChecks = flipVariations ? 3 : 1;\\n\\n    var _loop = function _loop(_i) {\\n      var fittingPlacement = placements.find(function (placement) {\\n        var checks = checksMap.get(placement);\\n\\n        if (checks) {\\n          return checks.slice(0, _i).every(function (check) {\\n            return check;\\n          });\\n        }\\n      });\\n\\n      if (fittingPlacement) {\\n        firstFittingPlacement = fittingPlacement;\\n        return \\\"break\\\";\\n      }\\n    };\\n\\n    for (var _i = numberOfChecks; _i > 0; _i--) {\\n      var _ret = _loop(_i);\\n\\n      if (_ret === \\\"break\\\") break;\\n    }\\n  }\\n\\n  if (state.placement !== firstFittingPlacement) {\\n    state.modifiersData[name]._skip = true;\\n    state.placement = firstFittingPlacement;\\n    state.reset = true;\\n  }\\n} // eslint-disable-next-line import/no-unused-modules\\n\\n\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = ({\\n  name: 'flip',\\n  enabled: true,\\n  phase: 'main',\\n  fn: flip,\\n  requiresIfExists: ['offset'],\\n  data: {\\n    _skip: false\\n  }\\n});\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/modifiers/flip.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/modifiers/hide.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/modifiers/hide.js ***!\n  \\***********************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \\\"./node_modules/@popperjs/core/lib/enums.js\\\");\\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/detectOverflow.js */ \\\"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\\\");\\n\\n\\n\\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\\n  if (preventedOffsets === void 0) {\\n    preventedOffsets = {\\n      x: 0,\\n      y: 0\\n    };\\n  }\\n\\n  return {\\n    top: overflow.top - rect.height - preventedOffsets.y,\\n    right: overflow.right - rect.width + preventedOffsets.x,\\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\\n    left: overflow.left - rect.width - preventedOffsets.x\\n  };\\n}\\n\\nfunction isAnySideFullyClipped(overflow) {\\n  return [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom, _enums_js__WEBPACK_IMPORTED_MODULE_0__.left].some(function (side) {\\n    return overflow[side] >= 0;\\n  });\\n}\\n\\nfunction hide(_ref) {\\n  var state = _ref.state,\\n      name = _ref.name;\\n  var referenceRect = state.rects.reference;\\n  var popperRect = state.rects.popper;\\n  var preventedOffsets = state.modifiersData.preventOverflow;\\n  var referenceOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(state, {\\n    elementContext: 'reference'\\n  });\\n  var popperAltOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(state, {\\n    altBoundary: true\\n  });\\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\\n  state.modifiersData[name] = {\\n    referenceClippingOffsets: referenceClippingOffsets,\\n    popperEscapeOffsets: popperEscapeOffsets,\\n    isReferenceHidden: isReferenceHidden,\\n    hasPopperEscaped: hasPopperEscaped\\n  };\\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\\n    'data-popper-reference-hidden': isReferenceHidden,\\n    'data-popper-escaped': hasPopperEscaped\\n  });\\n} // eslint-disable-next-line import/no-unused-modules\\n\\n\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = ({\\n  name: 'hide',\\n  enabled: true,\\n  phase: 'main',\\n  requiresIfExists: ['preventOverflow'],\\n  fn: hide\\n});\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/modifiers/hide.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/modifiers/index.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/modifiers/index.js ***!\n  \\************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   applyStyles: function() { return /* reexport safe */ _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]; },\\n/* harmony export */   arrow: function() { return /* reexport safe */ _arrow_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"]; },\\n/* harmony export */   computeStyles: function() { return /* reexport safe */ _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"]; },\\n/* harmony export */   eventListeners: function() { return /* reexport safe */ _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"]; },\\n/* harmony export */   flip: function() { return /* reexport safe */ _flip_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"]; },\\n/* harmony export */   hide: function() { return /* reexport safe */ _hide_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"]; },\\n/* harmony export */   offset: function() { return /* reexport safe */ _offset_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"]; },\\n/* harmony export */   popperOffsets: function() { return /* reexport safe */ _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"]; },\\n/* harmony export */   preventOverflow: function() { return /* reexport safe */ _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__[\\\"default\\\"]; }\\n/* harmony export */ });\\n/* harmony import */ var _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyStyles.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\\\");\\n/* harmony import */ var _arrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./arrow.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/arrow.js\\\");\\n/* harmony import */ var _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./computeStyles.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\\\");\\n/* harmony import */ var _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eventListeners.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\\\");\\n/* harmony import */ var _flip_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./flip.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/flip.js\\\");\\n/* harmony import */ var _hide_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hide.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/hide.js\\\");\\n/* harmony import */ var _offset_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./offset.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/offset.js\\\");\\n/* harmony import */ var _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./popperOffsets.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\\\");\\n/* harmony import */ var _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./preventOverflow.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/modifiers/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/modifiers/offset.js\":\n/*!*************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/modifiers/offset.js ***!\n  \\*************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   distanceAndSkiddingToXY: function() { return /* binding */ distanceAndSkiddingToXY; }\\n/* harmony export */ });\\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \\\"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\\\");\\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \\\"./node_modules/@popperjs/core/lib/enums.js\\\");\\n\\n // eslint-disable-next-line import/no-unused-modules\\n\\nfunction distanceAndSkiddingToXY(placement, rects, offset) {\\n  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(placement);\\n  var invertDistance = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.top].indexOf(basePlacement) >= 0 ? -1 : 1;\\n\\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\\n    placement: placement\\n  })) : offset,\\n      skidding = _ref[0],\\n      distance = _ref[1];\\n\\n  skidding = skidding || 0;\\n  distance = (distance || 0) * invertDistance;\\n  return [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.right].indexOf(basePlacement) >= 0 ? {\\n    x: distance,\\n    y: skidding\\n  } : {\\n    x: skidding,\\n    y: distance\\n  };\\n}\\n\\nfunction offset(_ref2) {\\n  var state = _ref2.state,\\n      options = _ref2.options,\\n      name = _ref2.name;\\n  var _options$offset = options.offset,\\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\\n  var data = _enums_js__WEBPACK_IMPORTED_MODULE_1__.placements.reduce(function (acc, placement) {\\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\\n    return acc;\\n  }, {});\\n  var _data$state$placement = data[state.placement],\\n      x = _data$state$placement.x,\\n      y = _data$state$placement.y;\\n\\n  if (state.modifiersData.popperOffsets != null) {\\n    state.modifiersData.popperOffsets.x += x;\\n    state.modifiersData.popperOffsets.y += y;\\n  }\\n\\n  state.modifiersData[name] = data;\\n} // eslint-disable-next-line import/no-unused-modules\\n\\n\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = ({\\n  name: 'offset',\\n  enabled: true,\\n  phase: 'main',\\n  requires: ['popperOffsets'],\\n  fn: offset\\n});\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/modifiers/offset.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js ***!\n  \\********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/computeOffsets.js */ \\\"./node_modules/@popperjs/core/lib/utils/computeOffsets.js\\\");\\n\\n\\nfunction popperOffsets(_ref) {\\n  var state = _ref.state,\\n      name = _ref.name;\\n  // Offsets are the actual position the popper needs to have to be\\n  // properly positioned near its reference element\\n  // This is the most basic placement, and will be adjusted by\\n  // the modifiers in the next step\\n  state.modifiersData[name] = (0,_utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])({\\n    reference: state.rects.reference,\\n    element: state.rects.popper,\\n    strategy: 'absolute',\\n    placement: state.placement\\n  });\\n} // eslint-disable-next-line import/no-unused-modules\\n\\n\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = ({\\n  name: 'popperOffsets',\\n  enabled: true,\\n  phase: 'read',\\n  fn: popperOffsets,\\n  data: {}\\n});\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\":\n/*!**********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js ***!\n  \\**********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ \\\"./node_modules/@popperjs/core/lib/enums.js\\\");\\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \\\"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\\\");\\n/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ \\\"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\\\");\\n/* harmony import */ var _utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getAltAxis.js */ \\\"./node_modules/@popperjs/core/lib/utils/getAltAxis.js\\\");\\n/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/within.js */ \\\"./node_modules/@popperjs/core/lib/utils/within.js\\\");\\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\\\");\\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\\\");\\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/detectOverflow.js */ \\\"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\\\");\\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getVariation.js */ \\\"./node_modules/@popperjs/core/lib/utils/getVariation.js\\\");\\n/* harmony import */ var _utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getFreshSideObject.js */ \\\"./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\\\");\\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/math.js */ \\\"./node_modules/@popperjs/core/lib/utils/math.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nfunction preventOverflow(_ref) {\\n  var state = _ref.state,\\n      options = _ref.options,\\n      name = _ref.name;\\n  var _options$mainAxis = options.mainAxis,\\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\\n      _options$altAxis = options.altAxis,\\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\\n      boundary = options.boundary,\\n      rootBoundary = options.rootBoundary,\\n      altBoundary = options.altBoundary,\\n      padding = options.padding,\\n      _options$tether = options.tether,\\n      tether = _options$tether === void 0 ? true : _options$tether,\\n      _options$tetherOffset = options.tetherOffset,\\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\\n  var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(state, {\\n    boundary: boundary,\\n    rootBoundary: rootBoundary,\\n    padding: padding,\\n    altBoundary: altBoundary\\n  });\\n  var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(state.placement);\\n  var variation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(state.placement);\\n  var isBasePlacement = !variation;\\n  var mainAxis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(basePlacement);\\n  var altAxis = (0,_utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"])(mainAxis);\\n  var popperOffsets = state.modifiersData.popperOffsets;\\n  var referenceRect = state.rects.reference;\\n  var popperRect = state.rects.popper;\\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\\n    placement: state.placement\\n  })) : tetherOffset;\\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\\n    mainAxis: tetherOffsetValue,\\n    altAxis: tetherOffsetValue\\n  } : Object.assign({\\n    mainAxis: 0,\\n    altAxis: 0\\n  }, tetherOffsetValue);\\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\\n  var data = {\\n    x: 0,\\n    y: 0\\n  };\\n\\n  if (!popperOffsets) {\\n    return;\\n  }\\n\\n  if (checkMainAxis) {\\n    var _offsetModifierState$;\\n\\n    var mainSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left;\\n    var altSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right;\\n    var len = mainAxis === 'y' ? 'height' : 'width';\\n    var offset = popperOffsets[mainAxis];\\n    var min = offset + overflow[mainSide];\\n    var max = offset - overflow[altSide];\\n    var additive = tether ? -popperRect[len] / 2 : 0;\\n    var minLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? referenceRect[len] : popperRect[len];\\n    var maxLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\\n    // outside the reference bounds\\n\\n    var arrowElement = state.elements.arrow;\\n    var arrowRect = tether && arrowElement ? (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"])(arrowElement) : {\\n      width: 0,\\n      height: 0\\n    };\\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : (0,_utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"])();\\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\\n    // to include its full size in the calculation. If the reference is small\\n    // and near the edge of a boundary, the popper can overflow even if the\\n    // reference is not overflowing as well (e.g. virtual elements with no\\n    // width or height)\\n\\n    var arrowLen = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(0, referenceRect[len], arrowRect[len]);\\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\\n    var arrowOffsetParent = state.elements.arrow && (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__[\\\"default\\\"])(state.elements.arrow);\\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\\n    var tetherMax = offset + maxOffset - offsetModifierValue;\\n    var preventedOffset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.min)(min, tetherMin) : min, offset, tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.max)(max, tetherMax) : max);\\n    popperOffsets[mainAxis] = preventedOffset;\\n    data[mainAxis] = preventedOffset - offset;\\n  }\\n\\n  if (checkAltAxis) {\\n    var _offsetModifierState$2;\\n\\n    var _mainSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left;\\n\\n    var _altSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right;\\n\\n    var _offset = popperOffsets[altAxis];\\n\\n    var _len = altAxis === 'y' ? 'height' : 'width';\\n\\n    var _min = _offset + overflow[_mainSide];\\n\\n    var _max = _offset - overflow[_altSide];\\n\\n    var isOriginSide = [_enums_js__WEBPACK_IMPORTED_MODULE_5__.top, _enums_js__WEBPACK_IMPORTED_MODULE_5__.left].indexOf(basePlacement) !== -1;\\n\\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\\n\\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\\n\\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\\n\\n    var _preventedOffset = tether && isOriginSide ? (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.withinMaxClamp)(_tetherMin, _offset, _tetherMax) : (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\\n\\n    popperOffsets[altAxis] = _preventedOffset;\\n    data[altAxis] = _preventedOffset - _offset;\\n  }\\n\\n  state.modifiersData[name] = data;\\n} // eslint-disable-next-line import/no-unused-modules\\n\\n\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = ({\\n  name: 'preventOverflow',\\n  enabled: true,\\n  phase: 'main',\\n  fn: preventOverflow,\\n  requiresIfExists: ['offset']\\n});\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/popper-lite.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/popper-lite.js ***!\n  \\********************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   createPopper: function() { return /* binding */ createPopper; },\\n/* harmony export */   defaultModifiers: function() { return /* binding */ defaultModifiers; },\\n/* harmony export */   detectOverflow: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"]; },\\n/* harmony export */   popperGenerator: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator; }\\n/* harmony export */ });\\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createPopper.js */ \\\"./node_modules/@popperjs/core/lib/createPopper.js\\\");\\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createPopper.js */ \\\"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\\\");\\n/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\\\");\\n/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\\\");\\n/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\\\");\\n/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\\\");\\n\\n\\n\\n\\n\\nvar defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"]];\\nvar createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)({\\n  defaultModifiers: defaultModifiers\\n}); // eslint-disable-next-line import/no-unused-modules\\n\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/popper-lite.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/popper.js\":\n/*!***************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/popper.js ***!\n  \\***************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   applyStyles: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.applyStyles; },\\n/* harmony export */   arrow: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.arrow; },\\n/* harmony export */   computeStyles: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.computeStyles; },\\n/* harmony export */   createPopper: function() { return /* binding */ createPopper; },\\n/* harmony export */   createPopperLite: function() { return /* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__.createPopper; },\\n/* harmony export */   defaultModifiers: function() { return /* binding */ defaultModifiers; },\\n/* harmony export */   detectOverflow: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_10__[\\\"default\\\"]; },\\n/* harmony export */   eventListeners: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.eventListeners; },\\n/* harmony export */   flip: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.flip; },\\n/* harmony export */   hide: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.hide; },\\n/* harmony export */   offset: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.offset; },\\n/* harmony export */   popperGenerator: function() { return /* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator; },\\n/* harmony export */   popperOffsets: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.popperOffsets; },\\n/* harmony export */   preventOverflow: function() { return /* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.preventOverflow; }\\n/* harmony export */ });\\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./createPopper.js */ \\\"./node_modules/@popperjs/core/lib/createPopper.js\\\");\\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./createPopper.js */ \\\"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\\\");\\n/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\\\");\\n/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\\\");\\n/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\\\");\\n/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\\\");\\n/* harmony import */ var _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifiers/offset.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/offset.js\\\");\\n/* harmony import */ var _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modifiers/flip.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/flip.js\\\");\\n/* harmony import */ var _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modifiers/preventOverflow.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\\\");\\n/* harmony import */ var _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modifiers/arrow.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/arrow.js\\\");\\n/* harmony import */ var _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modifiers/hide.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/hide.js\\\");\\n/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./popper-lite.js */ \\\"./node_modules/@popperjs/core/lib/popper-lite.js\\\");\\n/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modifiers/index.js */ \\\"./node_modules/@popperjs/core/lib/modifiers/index.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nvar defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"], _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"], _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"], _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"], _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"], _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__[\\\"default\\\"]];\\nvar createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator)({\\n  defaultModifiers: defaultModifiers\\n}); // eslint-disable-next-line import/no-unused-modules\\n\\n // eslint-disable-next-line import/no-unused-modules\\n\\n // eslint-disable-next-line import/no-unused-modules\\n\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/popper.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js\":\n/*!***********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js ***!\n  \\***********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ computeAutoPlacement; }\\n/* harmony export */ });\\n/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ \\\"./node_modules/@popperjs/core/lib/utils/getVariation.js\\\");\\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \\\"./node_modules/@popperjs/core/lib/enums.js\\\");\\n/* harmony import */ var _detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./detectOverflow.js */ \\\"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\\\");\\n/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBasePlacement.js */ \\\"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\\\");\\n\\n\\n\\n\\nfunction computeAutoPlacement(state, options) {\\n  if (options === void 0) {\\n    options = {};\\n  }\\n\\n  var _options = options,\\n      placement = _options.placement,\\n      boundary = _options.boundary,\\n      rootBoundary = _options.rootBoundary,\\n      padding = _options.padding,\\n      flipVariations = _options.flipVariations,\\n      _options$allowedAutoP = _options.allowedAutoPlacements,\\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements : _options$allowedAutoP;\\n  var variation = (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(placement);\\n  var placements = variation ? flipVariations ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements : _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements.filter(function (placement) {\\n    return (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(placement) === variation;\\n  }) : _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements;\\n  var allowedPlacements = placements.filter(function (placement) {\\n    return allowedAutoPlacements.indexOf(placement) >= 0;\\n  });\\n\\n  if (allowedPlacements.length === 0) {\\n    allowedPlacements = placements;\\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\\n\\n\\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\\n    acc[placement] = (0,_detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(state, {\\n      placement: placement,\\n      boundary: boundary,\\n      rootBoundary: rootBoundary,\\n      padding: padding\\n    })[(0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(placement)];\\n    return acc;\\n  }, {});\\n  return Object.keys(overflows).sort(function (a, b) {\\n    return overflows[a] - overflows[b];\\n  });\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/computeOffsets.js\":\n/*!*****************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/computeOffsets.js ***!\n  \\*****************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ computeOffsets; }\\n/* harmony export */ });\\n/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBasePlacement.js */ \\\"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\\\");\\n/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ \\\"./node_modules/@popperjs/core/lib/utils/getVariation.js\\\");\\n/* harmony import */ var _getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getMainAxisFromPlacement.js */ \\\"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\\\");\\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ \\\"./node_modules/@popperjs/core/lib/enums.js\\\");\\n\\n\\n\\n\\nfunction computeOffsets(_ref) {\\n  var reference = _ref.reference,\\n      element = _ref.element,\\n      placement = _ref.placement;\\n  var basePlacement = placement ? (0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(placement) : null;\\n  var variation = placement ? (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(placement) : null;\\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\\n  var offsets;\\n\\n  switch (basePlacement) {\\n    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.top:\\n      offsets = {\\n        x: commonX,\\n        y: reference.y - element.height\\n      };\\n      break;\\n\\n    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom:\\n      offsets = {\\n        x: commonX,\\n        y: reference.y + reference.height\\n      };\\n      break;\\n\\n    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.right:\\n      offsets = {\\n        x: reference.x + reference.width,\\n        y: commonY\\n      };\\n      break;\\n\\n    case _enums_js__WEBPACK_IMPORTED_MODULE_2__.left:\\n      offsets = {\\n        x: reference.x - element.width,\\n        y: commonY\\n      };\\n      break;\\n\\n    default:\\n      offsets = {\\n        x: reference.x,\\n        y: reference.y\\n      };\\n  }\\n\\n  var mainAxis = basePlacement ? (0,_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])(basePlacement) : null;\\n\\n  if (mainAxis != null) {\\n    var len = mainAxis === 'y' ? 'height' : 'width';\\n\\n    switch (variation) {\\n      case _enums_js__WEBPACK_IMPORTED_MODULE_2__.start:\\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\\n        break;\\n\\n      case _enums_js__WEBPACK_IMPORTED_MODULE_2__.end:\\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\\n        break;\\n\\n      default:\\n    }\\n  }\\n\\n  return offsets;\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/computeOffsets.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/debounce.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/debounce.js ***!\n  \\***********************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ debounce; }\\n/* harmony export */ });\\nfunction debounce(fn) {\\n  var pending;\\n  return function () {\\n    if (!pending) {\\n      pending = new Promise(function (resolve) {\\n        Promise.resolve().then(function () {\\n          pending = undefined;\\n          resolve(fn());\\n        });\\n      });\\n    }\\n\\n    return pending;\\n  };\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/debounce.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\":\n/*!*****************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/detectOverflow.js ***!\n  \\*****************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ detectOverflow; }\\n/* harmony export */ });\\n/* harmony import */ var _dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getClippingRect.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\\\");\\n/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\\\");\\n/* harmony import */ var _dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getBoundingClientRect.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\\\");\\n/* harmony import */ var _computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./computeOffsets.js */ \\\"./node_modules/@popperjs/core/lib/utils/computeOffsets.js\\\");\\n/* harmony import */ var _rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rectToClientRect.js */ \\\"./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\\\");\\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \\\"./node_modules/@popperjs/core/lib/enums.js\\\");\\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ \\\"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\\\");\\n/* harmony import */ var _mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergePaddingObject.js */ \\\"./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\\\");\\n/* harmony import */ var _expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./expandToHashMap.js */ \\\"./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n // eslint-disable-next-line import/no-unused-modules\\n\\nfunction detectOverflow(state, options) {\\n  if (options === void 0) {\\n    options = {};\\n  }\\n\\n  var _options = options,\\n      _options$placement = _options.placement,\\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\\n      _options$strategy = _options.strategy,\\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\\n      _options$boundary = _options.boundary,\\n      boundary = _options$boundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents : _options$boundary,\\n      _options$rootBoundary = _options.rootBoundary,\\n      rootBoundary = _options$rootBoundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport : _options$rootBoundary,\\n      _options$elementConte = _options.elementContext,\\n      elementContext = _options$elementConte === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper : _options$elementConte,\\n      _options$altBoundary = _options.altBoundary,\\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\\n      _options$padding = _options.padding,\\n      padding = _options$padding === void 0 ? 0 : _options$padding;\\n  var paddingObject = (0,_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(typeof padding !== 'number' ? padding : (0,_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements));\\n  var altContext = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference : _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper;\\n  var popperRect = state.rects.popper;\\n  var element = state.elements[altBoundary ? altContext : elementContext];\\n  var clippingClientRect = (0,_dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])((0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(element) ? element : element.contextElement || (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"])(state.elements.popper), boundary, rootBoundary, strategy);\\n  var referenceClientRect = (0,_dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"])(state.elements.reference);\\n  var popperOffsets = (0,_computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"])({\\n    reference: referenceClientRect,\\n    element: popperRect,\\n    strategy: 'absolute',\\n    placement: placement\\n  });\\n  var popperClientRect = (0,_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__[\\\"default\\\"])(Object.assign({}, popperRect, popperOffsets));\\n  var elementClientRect = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\\n  // 0 or negative = within the clipping rect\\n\\n  var overflowOffsets = {\\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\\n  };\\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\\n\\n  if (elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper && offsetData) {\\n    var offset = offsetData[placement];\\n    Object.keys(overflowOffsets).forEach(function (key) {\\n      var multiply = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 1 : -1;\\n      var axis = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 'y' : 'x';\\n      overflowOffsets[key] += offset[axis] * multiply;\\n    });\\n  }\\n\\n  return overflowOffsets;\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/detectOverflow.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\":\n/*!******************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js ***!\n  \\******************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ expandToHashMap; }\\n/* harmony export */ });\\nfunction expandToHashMap(value, keys) {\\n  return keys.reduce(function (hashMap, key) {\\n    hashMap[key] = value;\\n    return hashMap;\\n  }, {});\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/getAltAxis.js\":\n/*!*************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/getAltAxis.js ***!\n  \\*************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getAltAxis; }\\n/* harmony export */ });\\nfunction getAltAxis(axis) {\\n  return axis === 'x' ? 'y' : 'x';\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/getAltAxis.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\":\n/*!*******************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js ***!\n  \\*******************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getBasePlacement; }\\n/* harmony export */ });\\n\\nfunction getBasePlacement(placement) {\\n  return placement.split('-')[0];\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\":\n/*!*********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js ***!\n  \\*********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getFreshSideObject; }\\n/* harmony export */ });\\nfunction getFreshSideObject() {\\n  return {\\n    top: 0,\\n    right: 0,\\n    bottom: 0,\\n    left: 0\\n  };\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\":\n/*!***************************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js ***!\n  \\***************************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getMainAxisFromPlacement; }\\n/* harmony export */ });\\nfunction getMainAxisFromPlacement(placement) {\\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js\":\n/*!***********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js ***!\n  \\***********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getOppositePlacement; }\\n/* harmony export */ });\\nvar hash = {\\n  left: 'right',\\n  right: 'left',\\n  bottom: 'top',\\n  top: 'bottom'\\n};\\nfunction getOppositePlacement(placement) {\\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\\n    return hash[matched];\\n  });\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js\":\n/*!********************************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js ***!\n  \\********************************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getOppositeVariationPlacement; }\\n/* harmony export */ });\\nvar hash = {\\n  start: 'end',\\n  end: 'start'\\n};\\nfunction getOppositeVariationPlacement(placement) {\\n  return placement.replace(/start|end/g, function (matched) {\\n    return hash[matched];\\n  });\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/getVariation.js ***!\n  \\***************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getVariation; }\\n/* harmony export */ });\\nfunction getVariation(placement) {\\n  return placement.split('-')[1];\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/getVariation.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/math.js\":\n/*!*******************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/math.js ***!\n  \\*******************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   max: function() { return /* binding */ max; },\\n/* harmony export */   min: function() { return /* binding */ min; },\\n/* harmony export */   round: function() { return /* binding */ round; }\\n/* harmony export */ });\\nvar max = Math.max;\\nvar min = Math.min;\\nvar round = Math.round;\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/math.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/mergeByName.js\":\n/*!**************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/mergeByName.js ***!\n  \\**************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ mergeByName; }\\n/* harmony export */ });\\nfunction mergeByName(modifiers) {\\n  var merged = modifiers.reduce(function (merged, current) {\\n    var existing = merged[current.name];\\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\\n      options: Object.assign({}, existing.options, current.options),\\n      data: Object.assign({}, existing.data, current.data)\\n    }) : current;\\n    return merged;\\n  }, {}); // IE11 does not support Object.values\\n\\n  return Object.keys(merged).map(function (key) {\\n    return merged[key];\\n  });\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/mergeByName.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\":\n/*!*********************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js ***!\n  \\*********************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ mergePaddingObject; }\\n/* harmony export */ });\\n/* harmony import */ var _getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getFreshSideObject.js */ \\\"./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\\\");\\n\\nfunction mergePaddingObject(paddingObject) {\\n  return Object.assign({}, (0,_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(), paddingObject);\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/orderModifiers.js\":\n/*!*****************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/orderModifiers.js ***!\n  \\*****************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ orderModifiers; }\\n/* harmony export */ });\\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \\\"./node_modules/@popperjs/core/lib/enums.js\\\");\\n // source: https://stackoverflow.com/questions/49875255\\n\\nfunction order(modifiers) {\\n  var map = new Map();\\n  var visited = new Set();\\n  var result = [];\\n  modifiers.forEach(function (modifier) {\\n    map.set(modifier.name, modifier);\\n  }); // On visiting object, check for its dependencies and visit them recursively\\n\\n  function sort(modifier) {\\n    visited.add(modifier.name);\\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\\n    requires.forEach(function (dep) {\\n      if (!visited.has(dep)) {\\n        var depModifier = map.get(dep);\\n\\n        if (depModifier) {\\n          sort(depModifier);\\n        }\\n      }\\n    });\\n    result.push(modifier);\\n  }\\n\\n  modifiers.forEach(function (modifier) {\\n    if (!visited.has(modifier.name)) {\\n      // check for visited object\\n      sort(modifier);\\n    }\\n  });\\n  return result;\\n}\\n\\nfunction orderModifiers(modifiers) {\\n  // order based on dependencies\\n  var orderedModifiers = order(modifiers); // order based on phase\\n\\n  return _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases.reduce(function (acc, phase) {\\n    return acc.concat(orderedModifiers.filter(function (modifier) {\\n      return modifier.phase === phase;\\n    }));\\n  }, []);\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/orderModifiers.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\":\n/*!*******************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js ***!\n  \\*******************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ rectToClientRect; }\\n/* harmony export */ });\\nfunction rectToClientRect(rect) {\\n  return Object.assign({}, rect, {\\n    left: rect.x,\\n    top: rect.y,\\n    right: rect.x + rect.width,\\n    bottom: rect.y + rect.height\\n  });\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/userAgent.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/userAgent.js ***!\n  \\************************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": function() { return /* binding */ getUAString; }\\n/* harmony export */ });\\nfunction getUAString() {\\n  var uaData = navigator.userAgentData;\\n\\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\\n    return uaData.brands.map(function (item) {\\n      return item.brand + \\\"/\\\" + item.version;\\n    }).join(' ');\\n  }\\n\\n  return navigator.userAgent;\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/userAgent.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@popperjs/core/lib/utils/within.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/@popperjs/core/lib/utils/within.js ***!\n  \\*********************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   within: function() { return /* binding */ within; },\\n/* harmony export */   withinMaxClamp: function() { return /* binding */ withinMaxClamp; }\\n/* harmony export */ });\\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \\\"./node_modules/@popperjs/core/lib/utils/math.js\\\");\\n\\nfunction within(min, value, max) {\\n  return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(min, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(value, max));\\n}\\nfunction withinMaxClamp(min, value, max) {\\n  var v = within(min, value, max);\\n  return v > max ? max : v;\\n}\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/lib/utils/within.js?\");\n\n/***/ }),\n\n/***/ \"./js/bootstrap.js\":\n/*!*************************!*\\\n  !*** ./js/bootstrap.js ***!\n  \\*************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   bootstrap: function() { return /* reexport module object */ bootstrap__WEBPACK_IMPORTED_MODULE_0__; }\\n/* harmony export */ });\\n/* harmony import */ var bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bootstrap */ \\\"./node_modules/bootstrap/dist/js/bootstrap.esm.js\\\");\\n\\ntry {\\n  window.bootstrap = bootstrap__WEBPACK_IMPORTED_MODULE_0__;\\n} catch (e) {}\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./js/bootstrap.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/bootstrap/dist/js/bootstrap.esm.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/bootstrap/dist/js/bootstrap.esm.js ***!\n  \\*********************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   Alert: function() { return /* binding */ Alert; },\\n/* harmony export */   Button: function() { return /* binding */ Button; },\\n/* harmony export */   Carousel: function() { return /* binding */ Carousel; },\\n/* harmony export */   Collapse: function() { return /* binding */ Collapse; },\\n/* harmony export */   Dropdown: function() { return /* binding */ Dropdown; },\\n/* harmony export */   Modal: function() { return /* binding */ Modal; },\\n/* harmony export */   Offcanvas: function() { return /* binding */ Offcanvas; },\\n/* harmony export */   Popover: function() { return /* binding */ Popover; },\\n/* harmony export */   ScrollSpy: function() { return /* binding */ ScrollSpy; },\\n/* harmony export */   Tab: function() { return /* binding */ Tab; },\\n/* harmony export */   Toast: function() { return /* binding */ Toast; },\\n/* harmony export */   Tooltip: function() { return /* binding */ Tooltip; }\\n/* harmony export */ });\\n/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @popperjs/core */ \\\"./node_modules/@popperjs/core/lib/index.js\\\");\\n/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @popperjs/core */ \\\"./node_modules/@popperjs/core/lib/popper.js\\\");\\nvar _KEY_TO_DIRECTION;\\nfunction _get() { if (typeof Reflect !== \\\"undefined\\\" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\\nfunction _nonIterableSpread() { throw new TypeError(\\\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\\\"); }\\nfunction _iterableToArray(iter) { if (typeof Symbol !== \\\"undefined\\\" && iter[Symbol.iterator] != null || iter[\\\"@@iterator\\\"] != null) return Array.from(iter); }\\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \\\"function\\\" && superClass !== null) { throw new TypeError(\\\"Super expression must either be null or a function\\\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \\\"prototype\\\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \\\"object\\\" || typeof call === \\\"function\\\")) { return call; } else if (call !== void 0) { throw new TypeError(\\\"Derived constructors may only return object or undefined\\\"); } return _assertThisInitialized(self); }\\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\"); } return self; }\\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \\\"undefined\\\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \\\"function\\\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\\"value\\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \\\"prototype\\\", { writable: false }); return Constructor; }\\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \\\"string\\\"); return _typeof(key) === \\\"symbol\\\" ? key : String(key); }\\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \\\"object\\\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \\\"default\\\"); if (_typeof(res) !== \\\"object\\\") return res; throw new TypeError(\\\"@@toPrimitive must return a primitive value.\\\"); } return (hint === \\\"string\\\" ? String : Number)(input); }\\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\\nfunction _nonIterableRest() { throw new TypeError(\\\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\\\"); }\\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \\\"undefined\\\" != typeof Symbol && r[Symbol.iterator] || r[\\\"@@iterator\\\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \\\"undefined\\\" && o[Symbol.iterator] || o[\\\"@@iterator\\\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \\\"number\\\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\\\"Invalid attempt to iterate non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\\\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \\\"string\\\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \\\"Object\\\" && o.constructor) n = o.constructor.name; if (n === \\\"Map\\\" || n === \\\"Set\\\") return Array.from(o); if (n === \\\"Arguments\\\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\\nfunction _typeof(o) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \\\"function\\\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \\\"symbol\\\" : typeof o; }, _typeof(o); }\\n/*!\\n  * Bootstrap v5.2.3 (https://getbootstrap.com/)\\n  * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n  */\\n\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): util/index.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\nvar MAX_UID = 1000000;\\nvar MILLISECONDS_MULTIPLIER = 1000;\\nvar TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp)\\n\\nvar toType = function toType(object) {\\n  if (object === null || object === undefined) {\\n    return \\\"\\\".concat(object);\\n  }\\n  return Object.prototype.toString.call(object).match(/\\\\s([a-z]+)/i)[1].toLowerCase();\\n};\\n/**\\n * Public Util API\\n */\\n\\nvar getUID = function getUID(prefix) {\\n  do {\\n    prefix += Math.floor(Math.random() * MAX_UID);\\n  } while (document.getElementById(prefix));\\n  return prefix;\\n};\\nvar getSelector = function getSelector(element) {\\n  var selector = element.getAttribute('data-bs-target');\\n  if (!selector || selector === '#') {\\n    var hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\\n    // so everything starting with `#` or `.`. If a \\\"real\\\" URL is used as the selector,\\n    // `document.querySelector` will rightfully complain it is invalid.\\n    // See https://github.com/twbs/bootstrap/issues/32273\\n\\n    if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\\n      return null;\\n    } // Just in case some CMS puts out a full URL with the anchor appended\\n\\n    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\\n      hrefAttribute = \\\"#\\\".concat(hrefAttribute.split('#')[1]);\\n    }\\n    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\\n  }\\n  return selector;\\n};\\nvar getSelectorFromElement = function getSelectorFromElement(element) {\\n  var selector = getSelector(element);\\n  if (selector) {\\n    return document.querySelector(selector) ? selector : null;\\n  }\\n  return null;\\n};\\nvar getElementFromSelector = function getElementFromSelector(element) {\\n  var selector = getSelector(element);\\n  return selector ? document.querySelector(selector) : null;\\n};\\nvar getTransitionDurationFromElement = function getTransitionDurationFromElement(element) {\\n  if (!element) {\\n    return 0;\\n  } // Get transition-duration of the element\\n\\n  var _window$getComputedSt = window.getComputedStyle(element),\\n    transitionDuration = _window$getComputedSt.transitionDuration,\\n    transitionDelay = _window$getComputedSt.transitionDelay;\\n  var floatTransitionDuration = Number.parseFloat(transitionDuration);\\n  var floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\\n\\n  if (!floatTransitionDuration && !floatTransitionDelay) {\\n    return 0;\\n  } // If multiple durations are defined, take the first\\n\\n  transitionDuration = transitionDuration.split(',')[0];\\n  transitionDelay = transitionDelay.split(',')[0];\\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\\n};\\nvar triggerTransitionEnd = function triggerTransitionEnd(element) {\\n  element.dispatchEvent(new Event(TRANSITION_END));\\n};\\nvar isElement = function isElement(object) {\\n  if (!object || _typeof(object) !== 'object') {\\n    return false;\\n  }\\n  if (typeof object.jquery !== 'undefined') {\\n    object = object[0];\\n  }\\n  return typeof object.nodeType !== 'undefined';\\n};\\nvar getElement = function getElement(object) {\\n  // it's a jQuery object or a node element\\n  if (isElement(object)) {\\n    return object.jquery ? object[0] : object;\\n  }\\n  if (typeof object === 'string' && object.length > 0) {\\n    return document.querySelector(object);\\n  }\\n  return null;\\n};\\nvar isVisible = function isVisible(element) {\\n  if (!isElement(element) || element.getClientRects().length === 0) {\\n    return false;\\n  }\\n  var elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed\\n\\n  var closedDetails = element.closest('details:not([open])');\\n  if (!closedDetails) {\\n    return elementIsVisible;\\n  }\\n  if (closedDetails !== element) {\\n    var summary = element.closest('summary');\\n    if (summary && summary.parentNode !== closedDetails) {\\n      return false;\\n    }\\n    if (summary === null) {\\n      return false;\\n    }\\n  }\\n  return elementIsVisible;\\n};\\nvar isDisabled = function isDisabled(element) {\\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\\n    return true;\\n  }\\n  if (element.classList.contains('disabled')) {\\n    return true;\\n  }\\n  if (typeof element.disabled !== 'undefined') {\\n    return element.disabled;\\n  }\\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\\n};\\nvar findShadowRoot = function findShadowRoot(element) {\\n  if (!document.documentElement.attachShadow) {\\n    return null;\\n  } // Can find the shadow root otherwise it'll return the document\\n\\n  if (typeof element.getRootNode === 'function') {\\n    var root = element.getRootNode();\\n    return root instanceof ShadowRoot ? root : null;\\n  }\\n  if (element instanceof ShadowRoot) {\\n    return element;\\n  } // when we don't find a shadow root\\n\\n  if (!element.parentNode) {\\n    return null;\\n  }\\n  return findShadowRoot(element.parentNode);\\n};\\nvar noop = function noop() {};\\n/**\\n * Trick to restart an element's animation\\n *\\n * @param {HTMLElement} element\\n * @return void\\n *\\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\\n */\\n\\nvar reflow = function reflow(element) {\\n  element.offsetHeight; // eslint-disable-line no-unused-expressions\\n};\\n\\nvar getjQuery = function getjQuery() {\\n  if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\\n    return window.jQuery;\\n  }\\n  return null;\\n};\\nvar DOMContentLoadedCallbacks = [];\\nvar onDOMContentLoaded = function onDOMContentLoaded(callback) {\\n  if (document.readyState === 'loading') {\\n    // add listener on the first call when the document is in loading state\\n    if (!DOMContentLoadedCallbacks.length) {\\n      document.addEventListener('DOMContentLoaded', function () {\\n        for (var _i = 0, _DOMContentLoadedCall = DOMContentLoadedCallbacks; _i < _DOMContentLoadedCall.length; _i++) {\\n          var _callback = _DOMContentLoadedCall[_i];\\n          _callback();\\n        }\\n      });\\n    }\\n    DOMContentLoadedCallbacks.push(callback);\\n  } else {\\n    callback();\\n  }\\n};\\nvar isRTL = function isRTL() {\\n  return document.documentElement.dir === 'rtl';\\n};\\nvar defineJQueryPlugin = function defineJQueryPlugin(plugin) {\\n  onDOMContentLoaded(function () {\\n    var $ = getjQuery();\\n    /* istanbul ignore if */\\n\\n    if ($) {\\n      var name = plugin.NAME;\\n      var JQUERY_NO_CONFLICT = $.fn[name];\\n      $.fn[name] = plugin.jQueryInterface;\\n      $.fn[name].Constructor = plugin;\\n      $.fn[name].noConflict = function () {\\n        $.fn[name] = JQUERY_NO_CONFLICT;\\n        return plugin.jQueryInterface;\\n      };\\n    }\\n  });\\n};\\nvar execute = function execute(callback) {\\n  if (typeof callback === 'function') {\\n    callback();\\n  }\\n};\\nvar executeAfterTransition = function executeAfterTransition(callback, transitionElement) {\\n  var waitForTransition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\\n  if (!waitForTransition) {\\n    execute(callback);\\n    return;\\n  }\\n  var durationPadding = 5;\\n  var emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\\n  var called = false;\\n  var handler = function handler(_ref) {\\n    var target = _ref.target;\\n    if (target !== transitionElement) {\\n      return;\\n    }\\n    called = true;\\n    transitionElement.removeEventListener(TRANSITION_END, handler);\\n    execute(callback);\\n  };\\n  transitionElement.addEventListener(TRANSITION_END, handler);\\n  setTimeout(function () {\\n    if (!called) {\\n      triggerTransitionEnd(transitionElement);\\n    }\\n  }, emulatedDuration);\\n};\\n/**\\n * Return the previous/next element of a list.\\n *\\n * @param {array} list    The list of elements\\n * @param activeElement   The active element\\n * @param shouldGetNext   Choose to get next or previous element\\n * @param isCycleAllowed\\n * @return {Element|elem} The proper element\\n */\\n\\nvar getNextActiveElement = function getNextActiveElement(list, activeElement, shouldGetNext, isCycleAllowed) {\\n  var listLength = list.length;\\n  var index = list.indexOf(activeElement); // if the element does not exist in the list return an element\\n  // depending on the direction and if cycle is allowed\\n\\n  if (index === -1) {\\n    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\\n  }\\n  index += shouldGetNext ? 1 : -1;\\n  if (isCycleAllowed) {\\n    index = (index + listLength) % listLength;\\n  }\\n  return list[Math.max(0, Math.min(index, listLength - 1))];\\n};\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): dom/event-handler.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar namespaceRegex = /[^.]*(?=\\\\..*)\\\\.|.*/;\\nvar stripNameRegex = /\\\\..*/;\\nvar stripUidRegex = /::\\\\d+$/;\\nvar eventRegistry = {}; // Events storage\\n\\nvar uidEvent = 1;\\nvar customEvents = {\\n  mouseenter: 'mouseover',\\n  mouseleave: 'mouseout'\\n};\\nvar nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\\n/**\\n * Private methods\\n */\\n\\nfunction makeEventUid(element, uid) {\\n  return uid && \\\"\\\".concat(uid, \\\"::\\\").concat(uidEvent++) || element.uidEvent || uidEvent++;\\n}\\nfunction getElementEvents(element) {\\n  var uid = makeEventUid(element);\\n  element.uidEvent = uid;\\n  eventRegistry[uid] = eventRegistry[uid] || {};\\n  return eventRegistry[uid];\\n}\\nfunction bootstrapHandler(element, fn) {\\n  return function handler(event) {\\n    hydrateObj(event, {\\n      delegateTarget: element\\n    });\\n    if (handler.oneOff) {\\n      EventHandler.off(element, event.type, fn);\\n    }\\n    return fn.apply(element, [event]);\\n  };\\n}\\nfunction bootstrapDelegationHandler(element, selector, fn) {\\n  return function handler(event) {\\n    var domElements = element.querySelectorAll(selector);\\n    for (var target = event.target; target && target !== this; target = target.parentNode) {\\n      var _iterator = _createForOfIteratorHelper(domElements),\\n        _step;\\n      try {\\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\\n          var domElement = _step.value;\\n          if (domElement !== target) {\\n            continue;\\n          }\\n          hydrateObj(event, {\\n            delegateTarget: target\\n          });\\n          if (handler.oneOff) {\\n            EventHandler.off(element, event.type, selector, fn);\\n          }\\n          return fn.apply(target, [event]);\\n        }\\n      } catch (err) {\\n        _iterator.e(err);\\n      } finally {\\n        _iterator.f();\\n      }\\n    }\\n  };\\n}\\nfunction findHandler(events, callable) {\\n  var delegationSelector = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\\n  return Object.values(events).find(function (event) {\\n    return event.callable === callable && event.delegationSelector === delegationSelector;\\n  });\\n}\\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\\n  var isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check\\n\\n  var callable = isDelegated ? delegationFunction : handler || delegationFunction;\\n  var typeEvent = getTypeEvent(originalTypeEvent);\\n  if (!nativeEvents.has(typeEvent)) {\\n    typeEvent = originalTypeEvent;\\n  }\\n  return [isDelegated, callable, typeEvent];\\n}\\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\\n  if (typeof originalTypeEvent !== 'string' || !element) {\\n    return;\\n  }\\n  var _normalizeParameters = normalizeParameters(originalTypeEvent, handler, delegationFunction),\\n    _normalizeParameters2 = _slicedToArray(_normalizeParameters, 3),\\n    isDelegated = _normalizeParameters2[0],\\n    callable = _normalizeParameters2[1],\\n    typeEvent = _normalizeParameters2[2]; // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\\n\\n  if (originalTypeEvent in customEvents) {\\n    var wrapFunction = function wrapFunction(fn) {\\n      return function (event) {\\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\\n          return fn.call(this, event);\\n        }\\n      };\\n    };\\n    callable = wrapFunction(callable);\\n  }\\n  var events = getElementEvents(element);\\n  var handlers = events[typeEvent] || (events[typeEvent] = {});\\n  var previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\\n  if (previousFunction) {\\n    previousFunction.oneOff = previousFunction.oneOff && oneOff;\\n    return;\\n  }\\n  var uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\\n  var fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\\n  fn.delegationSelector = isDelegated ? handler : null;\\n  fn.callable = callable;\\n  fn.oneOff = oneOff;\\n  fn.uidEvent = uid;\\n  handlers[uid] = fn;\\n  element.addEventListener(typeEvent, fn, isDelegated);\\n}\\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\\n  var fn = findHandler(events[typeEvent], handler, delegationSelector);\\n  if (!fn) {\\n    return;\\n  }\\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\\n  delete events[typeEvent][fn.uidEvent];\\n}\\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\\n  var storeElementEvent = events[typeEvent] || {};\\n  for (var _i2 = 0, _Object$keys = Object.keys(storeElementEvent); _i2 < _Object$keys.length; _i2++) {\\n    var handlerKey = _Object$keys[_i2];\\n    if (handlerKey.includes(namespace)) {\\n      var event = storeElementEvent[handlerKey];\\n      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\\n    }\\n  }\\n}\\nfunction getTypeEvent(event) {\\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\\n  event = event.replace(stripNameRegex, '');\\n  return customEvents[event] || event;\\n}\\nvar EventHandler = {\\n  on: function on(element, event, handler, delegationFunction) {\\n    addHandler(element, event, handler, delegationFunction, false);\\n  },\\n  one: function one(element, event, handler, delegationFunction) {\\n    addHandler(element, event, handler, delegationFunction, true);\\n  },\\n  off: function off(element, originalTypeEvent, handler, delegationFunction) {\\n    if (typeof originalTypeEvent !== 'string' || !element) {\\n      return;\\n    }\\n    var _normalizeParameters3 = normalizeParameters(originalTypeEvent, handler, delegationFunction),\\n      _normalizeParameters4 = _slicedToArray(_normalizeParameters3, 3),\\n      isDelegated = _normalizeParameters4[0],\\n      callable = _normalizeParameters4[1],\\n      typeEvent = _normalizeParameters4[2];\\n    var inNamespace = typeEvent !== originalTypeEvent;\\n    var events = getElementEvents(element);\\n    var storeElementEvent = events[typeEvent] || {};\\n    var isNamespace = originalTypeEvent.startsWith('.');\\n    if (typeof callable !== 'undefined') {\\n      // Simplest case: handler is passed, remove that listener ONLY.\\n      if (!Object.keys(storeElementEvent).length) {\\n        return;\\n      }\\n      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\\n      return;\\n    }\\n    if (isNamespace) {\\n      for (var _i3 = 0, _Object$keys2 = Object.keys(events); _i3 < _Object$keys2.length; _i3++) {\\n        var elementEvent = _Object$keys2[_i3];\\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\\n      }\\n    }\\n    for (var _i4 = 0, _Object$keys3 = Object.keys(storeElementEvent); _i4 < _Object$keys3.length; _i4++) {\\n      var keyHandlers = _Object$keys3[_i4];\\n      var handlerKey = keyHandlers.replace(stripUidRegex, '');\\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\\n        var event = storeElementEvent[keyHandlers];\\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\\n      }\\n    }\\n  },\\n  trigger: function trigger(element, event, args) {\\n    if (typeof event !== 'string' || !element) {\\n      return null;\\n    }\\n    var $ = getjQuery();\\n    var typeEvent = getTypeEvent(event);\\n    var inNamespace = event !== typeEvent;\\n    var jQueryEvent = null;\\n    var bubbles = true;\\n    var nativeDispatch = true;\\n    var defaultPrevented = false;\\n    if (inNamespace && $) {\\n      jQueryEvent = $.Event(event, args);\\n      $(element).trigger(jQueryEvent);\\n      bubbles = !jQueryEvent.isPropagationStopped();\\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\\n    }\\n    var evt = new Event(event, {\\n      bubbles: bubbles,\\n      cancelable: true\\n    });\\n    evt = hydrateObj(evt, args);\\n    if (defaultPrevented) {\\n      evt.preventDefault();\\n    }\\n    if (nativeDispatch) {\\n      element.dispatchEvent(evt);\\n    }\\n    if (evt.defaultPrevented && jQueryEvent) {\\n      jQueryEvent.preventDefault();\\n    }\\n    return evt;\\n  }\\n};\\nfunction hydrateObj(obj, meta) {\\n  var _loop = function _loop() {\\n      var _ref2 = _Object$entries[_i5];\\n      _ref3 = _slicedToArray(_ref2, 2);\\n      var key = _ref3[0];\\n      var value = _ref3[1];\\n      try {\\n        obj[key] = value;\\n      } catch (_unused) {\\n        Object.defineProperty(obj, key, {\\n          configurable: true,\\n          get: function get() {\\n            return value;\\n          }\\n        });\\n      }\\n    },\\n    _ref3;\\n  for (var _i5 = 0, _Object$entries = Object.entries(meta || {}); _i5 < _Object$entries.length; _i5++) {\\n    _loop();\\n  }\\n  return obj;\\n}\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): dom/data.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n\\n/**\\n * Constants\\n */\\nvar elementMap = new Map();\\nvar Data = {\\n  set: function set(element, key, instance) {\\n    if (!elementMap.has(element)) {\\n      elementMap.set(element, new Map());\\n    }\\n    var instanceMap = elementMap.get(element); // make it clear we only want one instance per element\\n    // can be removed later when multiple key/instances are fine to be used\\n\\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\\n      // eslint-disable-next-line no-console\\n      console.error(\\\"Bootstrap doesn't allow more than one instance per element. Bound instance: \\\".concat(Array.from(instanceMap.keys())[0], \\\".\\\"));\\n      return;\\n    }\\n    instanceMap.set(key, instance);\\n  },\\n  get: function get(element, key) {\\n    if (elementMap.has(element)) {\\n      return elementMap.get(element).get(key) || null;\\n    }\\n    return null;\\n  },\\n  remove: function remove(element, key) {\\n    if (!elementMap.has(element)) {\\n      return;\\n    }\\n    var instanceMap = elementMap.get(element);\\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\\n\\n    if (instanceMap.size === 0) {\\n      elementMap.delete(element);\\n    }\\n  }\\n};\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): dom/manipulator.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\nfunction normalizeData(value) {\\n  if (value === 'true') {\\n    return true;\\n  }\\n  if (value === 'false') {\\n    return false;\\n  }\\n  if (value === Number(value).toString()) {\\n    return Number(value);\\n  }\\n  if (value === '' || value === 'null') {\\n    return null;\\n  }\\n  if (typeof value !== 'string') {\\n    return value;\\n  }\\n  try {\\n    return JSON.parse(decodeURIComponent(value));\\n  } catch (_unused) {\\n    return value;\\n  }\\n}\\nfunction normalizeDataKey(key) {\\n  return key.replace(/[A-Z]/g, function (chr) {\\n    return \\\"-\\\".concat(chr.toLowerCase());\\n  });\\n}\\nvar Manipulator = {\\n  setDataAttribute: function setDataAttribute(element, key, value) {\\n    element.setAttribute(\\\"data-bs-\\\".concat(normalizeDataKey(key)), value);\\n  },\\n  removeDataAttribute: function removeDataAttribute(element, key) {\\n    element.removeAttribute(\\\"data-bs-\\\".concat(normalizeDataKey(key)));\\n  },\\n  getDataAttributes: function getDataAttributes(element) {\\n    if (!element) {\\n      return {};\\n    }\\n    var attributes = {};\\n    var bsKeys = Object.keys(element.dataset).filter(function (key) {\\n      return key.startsWith('bs') && !key.startsWith('bsConfig');\\n    });\\n    var _iterator2 = _createForOfIteratorHelper(bsKeys),\\n      _step2;\\n    try {\\n      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\\n        var key = _step2.value;\\n        var pureKey = key.replace(/^bs/, '');\\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\\n        attributes[pureKey] = normalizeData(element.dataset[key]);\\n      }\\n    } catch (err) {\\n      _iterator2.e(err);\\n    } finally {\\n      _iterator2.f();\\n    }\\n    return attributes;\\n  },\\n  getDataAttribute: function getDataAttribute(element, key) {\\n    return normalizeData(element.getAttribute(\\\"data-bs-\\\".concat(normalizeDataKey(key))));\\n  }\\n};\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): util/config.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Class definition\\n */\\nvar Config = /*#__PURE__*/function () {\\n  function Config() {\\n    _classCallCheck(this, Config);\\n  }\\n  _createClass(Config, [{\\n    key: \\\"_getConfig\\\",\\n    value: function _getConfig(config) {\\n      config = this._mergeConfigObj(config);\\n      config = this._configAfterMerge(config);\\n      this._typeCheckConfig(config);\\n      return config;\\n    }\\n  }, {\\n    key: \\\"_configAfterMerge\\\",\\n    value: function _configAfterMerge(config) {\\n      return config;\\n    }\\n  }, {\\n    key: \\\"_mergeConfigObj\\\",\\n    value: function _mergeConfigObj(config, element) {\\n      var jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\\n\\n      return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, this.constructor.Default), _typeof(jsonConfig) === 'object' ? jsonConfig : {}), isElement(element) ? Manipulator.getDataAttributes(element) : {}), _typeof(config) === 'object' ? config : {});\\n    }\\n  }, {\\n    key: \\\"_typeCheckConfig\\\",\\n    value: function _typeCheckConfig(config) {\\n      var configTypes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.constructor.DefaultType;\\n      for (var _i6 = 0, _Object$keys4 = Object.keys(configTypes); _i6 < _Object$keys4.length; _i6++) {\\n        var property = _Object$keys4[_i6];\\n        var expectedTypes = configTypes[property];\\n        var value = config[property];\\n        var valueType = isElement(value) ? 'element' : toType(value);\\n        if (!new RegExp(expectedTypes).test(valueType)) {\\n          throw new TypeError(\\\"\\\".concat(this.constructor.NAME.toUpperCase(), \\\": Option \\\\\\\"\\\").concat(property, \\\"\\\\\\\" provided type \\\\\\\"\\\").concat(valueType, \\\"\\\\\\\" but expected type \\\\\\\"\\\").concat(expectedTypes, \\\"\\\\\\\".\\\"));\\n        }\\n      }\\n    }\\n  }], [{\\n    key: \\\"Default\\\",\\n    get:\\n    // Getters\\n    function get() {\\n      return {};\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return {};\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      throw new Error('You have to implement the static method \\\"NAME\\\", for each component!');\\n    }\\n  }]);\\n  return Config;\\n}();\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): base-component.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\nvar VERSION = '5.2.3';\\n/**\\n * Class definition\\n */\\nvar BaseComponent = /*#__PURE__*/function (_Config) {\\n  _inherits(BaseComponent, _Config);\\n  var _super = _createSuper(BaseComponent);\\n  function BaseComponent(element, config) {\\n    var _this;\\n    _classCallCheck(this, BaseComponent);\\n    _this = _super.call(this);\\n    element = getElement(element);\\n    if (!element) {\\n      return _possibleConstructorReturn(_this);\\n    }\\n    _this._element = element;\\n    _this._config = _this._getConfig(config);\\n    Data.set(_this._element, _this.constructor.DATA_KEY, _assertThisInitialized(_this));\\n    return _this;\\n  } // Public\\n  _createClass(BaseComponent, [{\\n    key: \\\"dispose\\\",\\n    value: function dispose() {\\n      Data.remove(this._element, this.constructor.DATA_KEY);\\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\\n      var _iterator3 = _createForOfIteratorHelper(Object.getOwnPropertyNames(this)),\\n        _step3;\\n      try {\\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\\n          var propertyName = _step3.value;\\n          this[propertyName] = null;\\n        }\\n      } catch (err) {\\n        _iterator3.e(err);\\n      } finally {\\n        _iterator3.f();\\n      }\\n    }\\n  }, {\\n    key: \\\"_queueCallback\\\",\\n    value: function _queueCallback(callback, element) {\\n      var isAnimated = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\\n      executeAfterTransition(callback, element, isAnimated);\\n    }\\n  }, {\\n    key: \\\"_getConfig\\\",\\n    value: function _getConfig(config) {\\n      config = this._mergeConfigObj(config, this._element);\\n      config = this._configAfterMerge(config);\\n      this._typeCheckConfig(config);\\n      return config;\\n    } // Static\\n  }], [{\\n    key: \\\"getInstance\\\",\\n    value: function getInstance(element) {\\n      return Data.get(getElement(element), this.DATA_KEY);\\n    }\\n  }, {\\n    key: \\\"getOrCreateInstance\\\",\\n    value: function getOrCreateInstance(element) {\\n      var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n      return this.getInstance(element) || new this(element, _typeof(config) === 'object' ? config : null);\\n    }\\n  }, {\\n    key: \\\"VERSION\\\",\\n    get: function get() {\\n      return VERSION;\\n    }\\n  }, {\\n    key: \\\"DATA_KEY\\\",\\n    get: function get() {\\n      return \\\"bs.\\\".concat(this.NAME);\\n    }\\n  }, {\\n    key: \\\"EVENT_KEY\\\",\\n    get: function get() {\\n      return \\\".\\\".concat(this.DATA_KEY);\\n    }\\n  }, {\\n    key: \\\"eventName\\\",\\n    value: function eventName(name) {\\n      return \\\"\\\".concat(name).concat(this.EVENT_KEY);\\n    }\\n  }]);\\n  return BaseComponent;\\n}(Config);\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): util/component-functions.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\nvar enableDismissTrigger = function enableDismissTrigger(component) {\\n  var method = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'hide';\\n  var clickEvent = \\\"click.dismiss\\\".concat(component.EVENT_KEY);\\n  var name = component.NAME;\\n  EventHandler.on(document, clickEvent, \\\"[data-bs-dismiss=\\\\\\\"\\\".concat(name, \\\"\\\\\\\"]\\\"), function (event) {\\n    if (['A', 'AREA'].includes(this.tagName)) {\\n      event.preventDefault();\\n    }\\n    if (isDisabled(this)) {\\n      return;\\n    }\\n    var target = getElementFromSelector(this) || this.closest(\\\".\\\".concat(name));\\n    var instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\\n\\n    instance[method]();\\n  });\\n};\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): alert.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar NAME$f = 'alert';\\nvar DATA_KEY$a = 'bs.alert';\\nvar EVENT_KEY$b = \\\".\\\".concat(DATA_KEY$a);\\nvar EVENT_CLOSE = \\\"close\\\".concat(EVENT_KEY$b);\\nvar EVENT_CLOSED = \\\"closed\\\".concat(EVENT_KEY$b);\\nvar CLASS_NAME_FADE$5 = 'fade';\\nvar CLASS_NAME_SHOW$8 = 'show';\\n/**\\n * Class definition\\n */\\nvar Alert = /*#__PURE__*/function (_BaseComponent) {\\n  _inherits(Alert, _BaseComponent);\\n  var _super2 = _createSuper(Alert);\\n  function Alert() {\\n    _classCallCheck(this, Alert);\\n    return _super2.apply(this, arguments);\\n  }\\n  _createClass(Alert, [{\\n    key: \\\"close\\\",\\n    value:\\n    // Public\\n\\n    function close() {\\n      var _this2 = this;\\n      var closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\\n      if (closeEvent.defaultPrevented) {\\n        return;\\n      }\\n      this._element.classList.remove(CLASS_NAME_SHOW$8);\\n      var isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\\n      this._queueCallback(function () {\\n        return _this2._destroyElement();\\n      }, this._element, isAnimated);\\n    } // Private\\n  }, {\\n    key: \\\"_destroyElement\\\",\\n    value: function _destroyElement() {\\n      this._element.remove();\\n      EventHandler.trigger(this._element, EVENT_CLOSED);\\n      this.dispose();\\n    } // Static\\n  }], [{\\n    key: \\\"NAME\\\",\\n    get:\\n    // Getters\\n    function get() {\\n      return NAME$f;\\n    }\\n  }, {\\n    key: \\\"jQueryInterface\\\",\\n    value: function jQueryInterface(config) {\\n      return this.each(function () {\\n        var data = Alert.getOrCreateInstance(this);\\n        if (typeof config !== 'string') {\\n          return;\\n        }\\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\\n          throw new TypeError(\\\"No method named \\\\\\\"\\\".concat(config, \\\"\\\\\\\"\\\"));\\n        }\\n        data[config](this);\\n      });\\n    }\\n  }]);\\n  return Alert;\\n}(BaseComponent);\\n/**\\n * Data API implementation\\n */\\nenableDismissTrigger(Alert, 'close');\\n/**\\n * jQuery\\n */\\n\\ndefineJQueryPlugin(Alert);\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): button.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar NAME$e = 'button';\\nvar DATA_KEY$9 = 'bs.button';\\nvar EVENT_KEY$a = \\\".\\\".concat(DATA_KEY$9);\\nvar DATA_API_KEY$6 = '.data-api';\\nvar CLASS_NAME_ACTIVE$3 = 'active';\\nvar SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\\\"button\\\"]';\\nvar EVENT_CLICK_DATA_API$6 = \\\"click\\\".concat(EVENT_KEY$a).concat(DATA_API_KEY$6);\\n/**\\n * Class definition\\n */\\nvar Button = /*#__PURE__*/function (_BaseComponent2) {\\n  _inherits(Button, _BaseComponent2);\\n  var _super3 = _createSuper(Button);\\n  function Button() {\\n    _classCallCheck(this, Button);\\n    return _super3.apply(this, arguments);\\n  }\\n  _createClass(Button, [{\\n    key: \\\"toggle\\\",\\n    value:\\n    // Public\\n\\n    function toggle() {\\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\\n    } // Static\\n  }], [{\\n    key: \\\"NAME\\\",\\n    get:\\n    // Getters\\n    function get() {\\n      return NAME$e;\\n    }\\n  }, {\\n    key: \\\"jQueryInterface\\\",\\n    value: function jQueryInterface(config) {\\n      return this.each(function () {\\n        var data = Button.getOrCreateInstance(this);\\n        if (config === 'toggle') {\\n          data[config]();\\n        }\\n      });\\n    }\\n  }]);\\n  return Button;\\n}(BaseComponent);\\n/**\\n * Data API implementation\\n */\\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, function (event) {\\n  event.preventDefault();\\n  var button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\\n  var data = Button.getOrCreateInstance(button);\\n  data.toggle();\\n});\\n/**\\n * jQuery\\n */\\n\\ndefineJQueryPlugin(Button);\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): dom/selector-engine.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar SelectorEngine = {\\n  find: function find(selector) {\\n    var _ref4;\\n    var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.documentElement;\\n    return (_ref4 = []).concat.apply(_ref4, _toConsumableArray(Element.prototype.querySelectorAll.call(element, selector)));\\n  },\\n  findOne: function findOne(selector) {\\n    var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.documentElement;\\n    return Element.prototype.querySelector.call(element, selector);\\n  },\\n  children: function children(element, selector) {\\n    var _ref5;\\n    return (_ref5 = []).concat.apply(_ref5, _toConsumableArray(element.children)).filter(function (child) {\\n      return child.matches(selector);\\n    });\\n  },\\n  parents: function parents(element, selector) {\\n    var parents = [];\\n    var ancestor = element.parentNode.closest(selector);\\n    while (ancestor) {\\n      parents.push(ancestor);\\n      ancestor = ancestor.parentNode.closest(selector);\\n    }\\n    return parents;\\n  },\\n  prev: function prev(element, selector) {\\n    var previous = element.previousElementSibling;\\n    while (previous) {\\n      if (previous.matches(selector)) {\\n        return [previous];\\n      }\\n      previous = previous.previousElementSibling;\\n    }\\n    return [];\\n  },\\n  // TODO: this is now unused; remove later along with prev()\\n  next: function next(element, selector) {\\n    var next = element.nextElementSibling;\\n    while (next) {\\n      if (next.matches(selector)) {\\n        return [next];\\n      }\\n      next = next.nextElementSibling;\\n    }\\n    return [];\\n  },\\n  focusableChildren: function focusableChildren(element) {\\n    var focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\\\"true\\\"]'].map(function (selector) {\\n      return \\\"\\\".concat(selector, \\\":not([tabindex^=\\\\\\\"-\\\\\\\"])\\\");\\n    }).join(',');\\n    return this.find(focusables, element).filter(function (el) {\\n      return !isDisabled(el) && isVisible(el);\\n    });\\n  }\\n};\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): util/swipe.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar NAME$d = 'swipe';\\nvar EVENT_KEY$9 = '.bs.swipe';\\nvar EVENT_TOUCHSTART = \\\"touchstart\\\".concat(EVENT_KEY$9);\\nvar EVENT_TOUCHMOVE = \\\"touchmove\\\".concat(EVENT_KEY$9);\\nvar EVENT_TOUCHEND = \\\"touchend\\\".concat(EVENT_KEY$9);\\nvar EVENT_POINTERDOWN = \\\"pointerdown\\\".concat(EVENT_KEY$9);\\nvar EVENT_POINTERUP = \\\"pointerup\\\".concat(EVENT_KEY$9);\\nvar POINTER_TYPE_TOUCH = 'touch';\\nvar POINTER_TYPE_PEN = 'pen';\\nvar CLASS_NAME_POINTER_EVENT = 'pointer-event';\\nvar SWIPE_THRESHOLD = 40;\\nvar Default$c = {\\n  endCallback: null,\\n  leftCallback: null,\\n  rightCallback: null\\n};\\nvar DefaultType$c = {\\n  endCallback: '(function|null)',\\n  leftCallback: '(function|null)',\\n  rightCallback: '(function|null)'\\n};\\n/**\\n * Class definition\\n */\\nvar Swipe = /*#__PURE__*/function (_Config2) {\\n  _inherits(Swipe, _Config2);\\n  var _super4 = _createSuper(Swipe);\\n  function Swipe(element, config) {\\n    var _this3;\\n    _classCallCheck(this, Swipe);\\n    _this3 = _super4.call(this);\\n    _this3._element = element;\\n    if (!element || !Swipe.isSupported()) {\\n      return _possibleConstructorReturn(_this3);\\n    }\\n    _this3._config = _this3._getConfig(config);\\n    _this3._deltaX = 0;\\n    _this3._supportPointerEvents = Boolean(window.PointerEvent);\\n    _this3._initEvents();\\n    return _this3;\\n  } // Getters\\n  _createClass(Swipe, [{\\n    key: \\\"dispose\\\",\\n    value:\\n    // Public\\n\\n    function dispose() {\\n      EventHandler.off(this._element, EVENT_KEY$9);\\n    } // Private\\n  }, {\\n    key: \\\"_start\\\",\\n    value: function _start(event) {\\n      if (!this._supportPointerEvents) {\\n        this._deltaX = event.touches[0].clientX;\\n        return;\\n      }\\n      if (this._eventIsPointerPenTouch(event)) {\\n        this._deltaX = event.clientX;\\n      }\\n    }\\n  }, {\\n    key: \\\"_end\\\",\\n    value: function _end(event) {\\n      if (this._eventIsPointerPenTouch(event)) {\\n        this._deltaX = event.clientX - this._deltaX;\\n      }\\n      this._handleSwipe();\\n      execute(this._config.endCallback);\\n    }\\n  }, {\\n    key: \\\"_move\\\",\\n    value: function _move(event) {\\n      this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\\n    }\\n  }, {\\n    key: \\\"_handleSwipe\\\",\\n    value: function _handleSwipe() {\\n      var absDeltaX = Math.abs(this._deltaX);\\n      if (absDeltaX <= SWIPE_THRESHOLD) {\\n        return;\\n      }\\n      var direction = absDeltaX / this._deltaX;\\n      this._deltaX = 0;\\n      if (!direction) {\\n        return;\\n      }\\n      execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\\n    }\\n  }, {\\n    key: \\\"_initEvents\\\",\\n    value: function _initEvents() {\\n      var _this4 = this;\\n      if (this._supportPointerEvents) {\\n        EventHandler.on(this._element, EVENT_POINTERDOWN, function (event) {\\n          return _this4._start(event);\\n        });\\n        EventHandler.on(this._element, EVENT_POINTERUP, function (event) {\\n          return _this4._end(event);\\n        });\\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\\n      } else {\\n        EventHandler.on(this._element, EVENT_TOUCHSTART, function (event) {\\n          return _this4._start(event);\\n        });\\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, function (event) {\\n          return _this4._move(event);\\n        });\\n        EventHandler.on(this._element, EVENT_TOUCHEND, function (event) {\\n          return _this4._end(event);\\n        });\\n      }\\n    }\\n  }, {\\n    key: \\\"_eventIsPointerPenTouch\\\",\\n    value: function _eventIsPointerPenTouch(event) {\\n      return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\\n    } // Static\\n  }], [{\\n    key: \\\"Default\\\",\\n    get: function get() {\\n      return Default$c;\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return DefaultType$c;\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME$d;\\n    }\\n  }, {\\n    key: \\\"isSupported\\\",\\n    value: function isSupported() {\\n      return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\\n    }\\n  }]);\\n  return Swipe;\\n}(Config);\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): carousel.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\nvar NAME$c = 'carousel';\\nvar DATA_KEY$8 = 'bs.carousel';\\nvar EVENT_KEY$8 = \\\".\\\".concat(DATA_KEY$8);\\nvar DATA_API_KEY$5 = '.data-api';\\nvar ARROW_LEFT_KEY$1 = 'ArrowLeft';\\nvar ARROW_RIGHT_KEY$1 = 'ArrowRight';\\nvar TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\\n\\nvar ORDER_NEXT = 'next';\\nvar ORDER_PREV = 'prev';\\nvar DIRECTION_LEFT = 'left';\\nvar DIRECTION_RIGHT = 'right';\\nvar EVENT_SLIDE = \\\"slide\\\".concat(EVENT_KEY$8);\\nvar EVENT_SLID = \\\"slid\\\".concat(EVENT_KEY$8);\\nvar EVENT_KEYDOWN$1 = \\\"keydown\\\".concat(EVENT_KEY$8);\\nvar EVENT_MOUSEENTER$1 = \\\"mouseenter\\\".concat(EVENT_KEY$8);\\nvar EVENT_MOUSELEAVE$1 = \\\"mouseleave\\\".concat(EVENT_KEY$8);\\nvar EVENT_DRAG_START = \\\"dragstart\\\".concat(EVENT_KEY$8);\\nvar EVENT_LOAD_DATA_API$3 = \\\"load\\\".concat(EVENT_KEY$8).concat(DATA_API_KEY$5);\\nvar EVENT_CLICK_DATA_API$5 = \\\"click\\\".concat(EVENT_KEY$8).concat(DATA_API_KEY$5);\\nvar CLASS_NAME_CAROUSEL = 'carousel';\\nvar CLASS_NAME_ACTIVE$2 = 'active';\\nvar CLASS_NAME_SLIDE = 'slide';\\nvar CLASS_NAME_END = 'carousel-item-end';\\nvar CLASS_NAME_START = 'carousel-item-start';\\nvar CLASS_NAME_NEXT = 'carousel-item-next';\\nvar CLASS_NAME_PREV = 'carousel-item-prev';\\nvar SELECTOR_ACTIVE = '.active';\\nvar SELECTOR_ITEM = '.carousel-item';\\nvar SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\\nvar SELECTOR_ITEM_IMG = '.carousel-item img';\\nvar SELECTOR_INDICATORS = '.carousel-indicators';\\nvar SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\\nvar SELECTOR_DATA_RIDE = '[data-bs-ride=\\\"carousel\\\"]';\\nvar KEY_TO_DIRECTION = (_KEY_TO_DIRECTION = {}, _defineProperty(_KEY_TO_DIRECTION, ARROW_LEFT_KEY$1, DIRECTION_RIGHT), _defineProperty(_KEY_TO_DIRECTION, ARROW_RIGHT_KEY$1, DIRECTION_LEFT), _KEY_TO_DIRECTION);\\nvar Default$b = {\\n  interval: 5000,\\n  keyboard: true,\\n  pause: 'hover',\\n  ride: false,\\n  touch: true,\\n  wrap: true\\n};\\nvar DefaultType$b = {\\n  interval: '(number|boolean)',\\n  // TODO:v6 remove boolean support\\n  keyboard: 'boolean',\\n  pause: '(string|boolean)',\\n  ride: '(boolean|string)',\\n  touch: 'boolean',\\n  wrap: 'boolean'\\n};\\n/**\\n * Class definition\\n */\\nvar Carousel = /*#__PURE__*/function (_BaseComponent3) {\\n  _inherits(Carousel, _BaseComponent3);\\n  var _super5 = _createSuper(Carousel);\\n  function Carousel(element, config) {\\n    var _this5;\\n    _classCallCheck(this, Carousel);\\n    _this5 = _super5.call(this, element, config);\\n    _this5._interval = null;\\n    _this5._activeElement = null;\\n    _this5._isSliding = false;\\n    _this5.touchTimeout = null;\\n    _this5._swipeHelper = null;\\n    _this5._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, _this5._element);\\n    _this5._addEventListeners();\\n    if (_this5._config.ride === CLASS_NAME_CAROUSEL) {\\n      _this5.cycle();\\n    }\\n    return _this5;\\n  } // Getters\\n  _createClass(Carousel, [{\\n    key: \\\"next\\\",\\n    value:\\n    // Public\\n\\n    function next() {\\n      this._slide(ORDER_NEXT);\\n    }\\n  }, {\\n    key: \\\"nextWhenVisible\\\",\\n    value: function nextWhenVisible() {\\n      // FIXME TODO use `document.visibilityState`\\n      // Don't call next when the page isn't visible\\n      // or the carousel or its parent isn't visible\\n      if (!document.hidden && isVisible(this._element)) {\\n        this.next();\\n      }\\n    }\\n  }, {\\n    key: \\\"prev\\\",\\n    value: function prev() {\\n      this._slide(ORDER_PREV);\\n    }\\n  }, {\\n    key: \\\"pause\\\",\\n    value: function pause() {\\n      if (this._isSliding) {\\n        triggerTransitionEnd(this._element);\\n      }\\n      this._clearInterval();\\n    }\\n  }, {\\n    key: \\\"cycle\\\",\\n    value: function cycle() {\\n      var _this6 = this;\\n      this._clearInterval();\\n      this._updateInterval();\\n      this._interval = setInterval(function () {\\n        return _this6.nextWhenVisible();\\n      }, this._config.interval);\\n    }\\n  }, {\\n    key: \\\"_maybeEnableCycle\\\",\\n    value: function _maybeEnableCycle() {\\n      var _this7 = this;\\n      if (!this._config.ride) {\\n        return;\\n      }\\n      if (this._isSliding) {\\n        EventHandler.one(this._element, EVENT_SLID, function () {\\n          return _this7.cycle();\\n        });\\n        return;\\n      }\\n      this.cycle();\\n    }\\n  }, {\\n    key: \\\"to\\\",\\n    value: function to(index) {\\n      var _this8 = this;\\n      var items = this._getItems();\\n      if (index > items.length - 1 || index < 0) {\\n        return;\\n      }\\n      if (this._isSliding) {\\n        EventHandler.one(this._element, EVENT_SLID, function () {\\n          return _this8.to(index);\\n        });\\n        return;\\n      }\\n      var activeIndex = this._getItemIndex(this._getActive());\\n      if (activeIndex === index) {\\n        return;\\n      }\\n      var order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\\n      this._slide(order, items[index]);\\n    }\\n  }, {\\n    key: \\\"dispose\\\",\\n    value: function dispose() {\\n      if (this._swipeHelper) {\\n        this._swipeHelper.dispose();\\n      }\\n      _get(_getPrototypeOf(Carousel.prototype), \\\"dispose\\\", this).call(this);\\n    } // Private\\n  }, {\\n    key: \\\"_configAfterMerge\\\",\\n    value: function _configAfterMerge(config) {\\n      config.defaultInterval = config.interval;\\n      return config;\\n    }\\n  }, {\\n    key: \\\"_addEventListeners\\\",\\n    value: function _addEventListeners() {\\n      var _this9 = this;\\n      if (this._config.keyboard) {\\n        EventHandler.on(this._element, EVENT_KEYDOWN$1, function (event) {\\n          return _this9._keydown(event);\\n        });\\n      }\\n      if (this._config.pause === 'hover') {\\n        EventHandler.on(this._element, EVENT_MOUSEENTER$1, function () {\\n          return _this9.pause();\\n        });\\n        EventHandler.on(this._element, EVENT_MOUSELEAVE$1, function () {\\n          return _this9._maybeEnableCycle();\\n        });\\n      }\\n      if (this._config.touch && Swipe.isSupported()) {\\n        this._addTouchEventListeners();\\n      }\\n    }\\n  }, {\\n    key: \\\"_addTouchEventListeners\\\",\\n    value: function _addTouchEventListeners() {\\n      var _this10 = this;\\n      var _iterator4 = _createForOfIteratorHelper(SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)),\\n        _step4;\\n      try {\\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\\n          var img = _step4.value;\\n          EventHandler.on(img, EVENT_DRAG_START, function (event) {\\n            return event.preventDefault();\\n          });\\n        }\\n      } catch (err) {\\n        _iterator4.e(err);\\n      } finally {\\n        _iterator4.f();\\n      }\\n      var endCallBack = function endCallBack() {\\n        if (_this10._config.pause !== 'hover') {\\n          return;\\n        } // If it's a touch-enabled device, mouseenter/leave are fired as\\n        // part of the mouse compatibility events on first tap - the carousel\\n        // would stop cycling until user tapped out of it;\\n        // here, we listen for touchend, explicitly pause the carousel\\n        // (as if it's the second time we tap on it, mouseenter compat event\\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\\n        // events to fire) we explicitly restart cycling\\n\\n        _this10.pause();\\n        if (_this10.touchTimeout) {\\n          clearTimeout(_this10.touchTimeout);\\n        }\\n        _this10.touchTimeout = setTimeout(function () {\\n          return _this10._maybeEnableCycle();\\n        }, TOUCHEVENT_COMPAT_WAIT + _this10._config.interval);\\n      };\\n      var swipeConfig = {\\n        leftCallback: function leftCallback() {\\n          return _this10._slide(_this10._directionToOrder(DIRECTION_LEFT));\\n        },\\n        rightCallback: function rightCallback() {\\n          return _this10._slide(_this10._directionToOrder(DIRECTION_RIGHT));\\n        },\\n        endCallback: endCallBack\\n      };\\n      this._swipeHelper = new Swipe(this._element, swipeConfig);\\n    }\\n  }, {\\n    key: \\\"_keydown\\\",\\n    value: function _keydown(event) {\\n      if (/input|textarea/i.test(event.target.tagName)) {\\n        return;\\n      }\\n      var direction = KEY_TO_DIRECTION[event.key];\\n      if (direction) {\\n        event.preventDefault();\\n        this._slide(this._directionToOrder(direction));\\n      }\\n    }\\n  }, {\\n    key: \\\"_getItemIndex\\\",\\n    value: function _getItemIndex(element) {\\n      return this._getItems().indexOf(element);\\n    }\\n  }, {\\n    key: \\\"_setActiveIndicatorElement\\\",\\n    value: function _setActiveIndicatorElement(index) {\\n      if (!this._indicatorsElement) {\\n        return;\\n      }\\n      var activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\\n      activeIndicator.removeAttribute('aria-current');\\n      var newActiveIndicator = SelectorEngine.findOne(\\\"[data-bs-slide-to=\\\\\\\"\\\".concat(index, \\\"\\\\\\\"]\\\"), this._indicatorsElement);\\n      if (newActiveIndicator) {\\n        newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\\n        newActiveIndicator.setAttribute('aria-current', 'true');\\n      }\\n    }\\n  }, {\\n    key: \\\"_updateInterval\\\",\\n    value: function _updateInterval() {\\n      var element = this._activeElement || this._getActive();\\n      if (!element) {\\n        return;\\n      }\\n      var elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\\n      this._config.interval = elementInterval || this._config.defaultInterval;\\n    }\\n  }, {\\n    key: \\\"_slide\\\",\\n    value: function _slide(order) {\\n      var _this11 = this;\\n      var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\\n      if (this._isSliding) {\\n        return;\\n      }\\n      var activeElement = this._getActive();\\n      var isNext = order === ORDER_NEXT;\\n      var nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\\n      if (nextElement === activeElement) {\\n        return;\\n      }\\n      var nextElementIndex = this._getItemIndex(nextElement);\\n      var triggerEvent = function triggerEvent(eventName) {\\n        return EventHandler.trigger(_this11._element, eventName, {\\n          relatedTarget: nextElement,\\n          direction: _this11._orderToDirection(order),\\n          from: _this11._getItemIndex(activeElement),\\n          to: nextElementIndex\\n        });\\n      };\\n      var slideEvent = triggerEvent(EVENT_SLIDE);\\n      if (slideEvent.defaultPrevented) {\\n        return;\\n      }\\n      if (!activeElement || !nextElement) {\\n        // Some weirdness is happening, so we bail\\n        // todo: change tests that use empty divs to avoid this check\\n        return;\\n      }\\n      var isCycling = Boolean(this._interval);\\n      this.pause();\\n      this._isSliding = true;\\n      this._setActiveIndicatorElement(nextElementIndex);\\n      this._activeElement = nextElement;\\n      var directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\\n      var orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\\n      nextElement.classList.add(orderClassName);\\n      reflow(nextElement);\\n      activeElement.classList.add(directionalClassName);\\n      nextElement.classList.add(directionalClassName);\\n      var completeCallBack = function completeCallBack() {\\n        nextElement.classList.remove(directionalClassName, orderClassName);\\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\\n        _this11._isSliding = false;\\n        triggerEvent(EVENT_SLID);\\n      };\\n      this._queueCallback(completeCallBack, activeElement, this._isAnimated());\\n      if (isCycling) {\\n        this.cycle();\\n      }\\n    }\\n  }, {\\n    key: \\\"_isAnimated\\\",\\n    value: function _isAnimated() {\\n      return this._element.classList.contains(CLASS_NAME_SLIDE);\\n    }\\n  }, {\\n    key: \\\"_getActive\\\",\\n    value: function _getActive() {\\n      return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\\n    }\\n  }, {\\n    key: \\\"_getItems\\\",\\n    value: function _getItems() {\\n      return SelectorEngine.find(SELECTOR_ITEM, this._element);\\n    }\\n  }, {\\n    key: \\\"_clearInterval\\\",\\n    value: function _clearInterval() {\\n      if (this._interval) {\\n        clearInterval(this._interval);\\n        this._interval = null;\\n      }\\n    }\\n  }, {\\n    key: \\\"_directionToOrder\\\",\\n    value: function _directionToOrder(direction) {\\n      if (isRTL()) {\\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\\n      }\\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\\n    }\\n  }, {\\n    key: \\\"_orderToDirection\\\",\\n    value: function _orderToDirection(order) {\\n      if (isRTL()) {\\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\\n      }\\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\\n    } // Static\\n  }], [{\\n    key: \\\"Default\\\",\\n    get: function get() {\\n      return Default$b;\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return DefaultType$b;\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME$c;\\n    }\\n  }, {\\n    key: \\\"jQueryInterface\\\",\\n    value: function jQueryInterface(config) {\\n      return this.each(function () {\\n        var data = Carousel.getOrCreateInstance(this, config);\\n        if (typeof config === 'number') {\\n          data.to(config);\\n          return;\\n        }\\n        if (typeof config === 'string') {\\n          if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\\n            throw new TypeError(\\\"No method named \\\\\\\"\\\".concat(config, \\\"\\\\\\\"\\\"));\\n          }\\n          data[config]();\\n        }\\n      });\\n    }\\n  }]);\\n  return Carousel;\\n}(BaseComponent);\\n/**\\n * Data API implementation\\n */\\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\\n  var target = getElementFromSelector(this);\\n  if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\\n    return;\\n  }\\n  event.preventDefault();\\n  var carousel = Carousel.getOrCreateInstance(target);\\n  var slideIndex = this.getAttribute('data-bs-slide-to');\\n  if (slideIndex) {\\n    carousel.to(slideIndex);\\n    carousel._maybeEnableCycle();\\n    return;\\n  }\\n  if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\\n    carousel.next();\\n    carousel._maybeEnableCycle();\\n    return;\\n  }\\n  carousel.prev();\\n  carousel._maybeEnableCycle();\\n});\\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, function () {\\n  var carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\\n  var _iterator5 = _createForOfIteratorHelper(carousels),\\n    _step5;\\n  try {\\n    for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\\n      var carousel = _step5.value;\\n      Carousel.getOrCreateInstance(carousel);\\n    }\\n  } catch (err) {\\n    _iterator5.e(err);\\n  } finally {\\n    _iterator5.f();\\n  }\\n});\\n/**\\n * jQuery\\n */\\n\\ndefineJQueryPlugin(Carousel);\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): collapse.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar NAME$b = 'collapse';\\nvar DATA_KEY$7 = 'bs.collapse';\\nvar EVENT_KEY$7 = \\\".\\\".concat(DATA_KEY$7);\\nvar DATA_API_KEY$4 = '.data-api';\\nvar EVENT_SHOW$6 = \\\"show\\\".concat(EVENT_KEY$7);\\nvar EVENT_SHOWN$6 = \\\"shown\\\".concat(EVENT_KEY$7);\\nvar EVENT_HIDE$6 = \\\"hide\\\".concat(EVENT_KEY$7);\\nvar EVENT_HIDDEN$6 = \\\"hidden\\\".concat(EVENT_KEY$7);\\nvar EVENT_CLICK_DATA_API$4 = \\\"click\\\".concat(EVENT_KEY$7).concat(DATA_API_KEY$4);\\nvar CLASS_NAME_SHOW$7 = 'show';\\nvar CLASS_NAME_COLLAPSE = 'collapse';\\nvar CLASS_NAME_COLLAPSING = 'collapsing';\\nvar CLASS_NAME_COLLAPSED = 'collapsed';\\nvar CLASS_NAME_DEEPER_CHILDREN = \\\":scope .\\\".concat(CLASS_NAME_COLLAPSE, \\\" .\\\").concat(CLASS_NAME_COLLAPSE);\\nvar CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\\nvar WIDTH = 'width';\\nvar HEIGHT = 'height';\\nvar SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\\nvar SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\\\"collapse\\\"]';\\nvar Default$a = {\\n  parent: null,\\n  toggle: true\\n};\\nvar DefaultType$a = {\\n  parent: '(null|element)',\\n  toggle: 'boolean'\\n};\\n/**\\n * Class definition\\n */\\nvar Collapse = /*#__PURE__*/function (_BaseComponent4) {\\n  _inherits(Collapse, _BaseComponent4);\\n  var _super6 = _createSuper(Collapse);\\n  function Collapse(element, config) {\\n    var _this12;\\n    _classCallCheck(this, Collapse);\\n    _this12 = _super6.call(this, element, config);\\n    _this12._isTransitioning = false;\\n    _this12._triggerArray = [];\\n    var toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\\n    var _iterator6 = _createForOfIteratorHelper(toggleList),\\n      _step6;\\n    try {\\n      for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\\n        var elem = _step6.value;\\n        var selector = getSelectorFromElement(elem);\\n        var filterElement = SelectorEngine.find(selector).filter(function (foundElement) {\\n          return foundElement === _this12._element;\\n        });\\n        if (selector !== null && filterElement.length) {\\n          _this12._triggerArray.push(elem);\\n        }\\n      }\\n    } catch (err) {\\n      _iterator6.e(err);\\n    } finally {\\n      _iterator6.f();\\n    }\\n    _this12._initializeChildren();\\n    if (!_this12._config.parent) {\\n      _this12._addAriaAndCollapsedClass(_this12._triggerArray, _this12._isShown());\\n    }\\n    if (_this12._config.toggle) {\\n      _this12.toggle();\\n    }\\n    return _this12;\\n  } // Getters\\n  _createClass(Collapse, [{\\n    key: \\\"toggle\\\",\\n    value:\\n    // Public\\n\\n    function toggle() {\\n      if (this._isShown()) {\\n        this.hide();\\n      } else {\\n        this.show();\\n      }\\n    }\\n  }, {\\n    key: \\\"show\\\",\\n    value: function show() {\\n      var _this13 = this;\\n      if (this._isTransitioning || this._isShown()) {\\n        return;\\n      }\\n      var activeChildren = []; // find active children\\n\\n      if (this._config.parent) {\\n        activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(function (element) {\\n          return element !== _this13._element;\\n        }).map(function (element) {\\n          return Collapse.getOrCreateInstance(element, {\\n            toggle: false\\n          });\\n        });\\n      }\\n      if (activeChildren.length && activeChildren[0]._isTransitioning) {\\n        return;\\n      }\\n      var startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\\n      if (startEvent.defaultPrevented) {\\n        return;\\n      }\\n      var _iterator7 = _createForOfIteratorHelper(activeChildren),\\n        _step7;\\n      try {\\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\\n          var activeInstance = _step7.value;\\n          activeInstance.hide();\\n        }\\n      } catch (err) {\\n        _iterator7.e(err);\\n      } finally {\\n        _iterator7.f();\\n      }\\n      var dimension = this._getDimension();\\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\\n      this._element.style[dimension] = 0;\\n      this._addAriaAndCollapsedClass(this._triggerArray, true);\\n      this._isTransitioning = true;\\n      var complete = function complete() {\\n        _this13._isTransitioning = false;\\n        _this13._element.classList.remove(CLASS_NAME_COLLAPSING);\\n        _this13._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\\n        _this13._element.style[dimension] = '';\\n        EventHandler.trigger(_this13._element, EVENT_SHOWN$6);\\n      };\\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\\n      var scrollSize = \\\"scroll\\\".concat(capitalizedDimension);\\n      this._queueCallback(complete, this._element, true);\\n      this._element.style[dimension] = \\\"\\\".concat(this._element[scrollSize], \\\"px\\\");\\n    }\\n  }, {\\n    key: \\\"hide\\\",\\n    value: function hide() {\\n      var _this14 = this;\\n      if (this._isTransitioning || !this._isShown()) {\\n        return;\\n      }\\n      var startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\\n      if (startEvent.defaultPrevented) {\\n        return;\\n      }\\n      var dimension = this._getDimension();\\n      this._element.style[dimension] = \\\"\\\".concat(this._element.getBoundingClientRect()[dimension], \\\"px\\\");\\n      reflow(this._element);\\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\\n      var _iterator8 = _createForOfIteratorHelper(this._triggerArray),\\n        _step8;\\n      try {\\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\\n          var trigger = _step8.value;\\n          var element = getElementFromSelector(trigger);\\n          if (element && !this._isShown(element)) {\\n            this._addAriaAndCollapsedClass([trigger], false);\\n          }\\n        }\\n      } catch (err) {\\n        _iterator8.e(err);\\n      } finally {\\n        _iterator8.f();\\n      }\\n      this._isTransitioning = true;\\n      var complete = function complete() {\\n        _this14._isTransitioning = false;\\n        _this14._element.classList.remove(CLASS_NAME_COLLAPSING);\\n        _this14._element.classList.add(CLASS_NAME_COLLAPSE);\\n        EventHandler.trigger(_this14._element, EVENT_HIDDEN$6);\\n      };\\n      this._element.style[dimension] = '';\\n      this._queueCallback(complete, this._element, true);\\n    }\\n  }, {\\n    key: \\\"_isShown\\\",\\n    value: function _isShown() {\\n      var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._element;\\n      return element.classList.contains(CLASS_NAME_SHOW$7);\\n    } // Private\\n  }, {\\n    key: \\\"_configAfterMerge\\\",\\n    value: function _configAfterMerge(config) {\\n      config.toggle = Boolean(config.toggle); // Coerce string values\\n\\n      config.parent = getElement(config.parent);\\n      return config;\\n    }\\n  }, {\\n    key: \\\"_getDimension\\\",\\n    value: function _getDimension() {\\n      return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\\n    }\\n  }, {\\n    key: \\\"_initializeChildren\\\",\\n    value: function _initializeChildren() {\\n      if (!this._config.parent) {\\n        return;\\n      }\\n      var children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\\n      var _iterator9 = _createForOfIteratorHelper(children),\\n        _step9;\\n      try {\\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\\n          var element = _step9.value;\\n          var selected = getElementFromSelector(element);\\n          if (selected) {\\n            this._addAriaAndCollapsedClass([element], this._isShown(selected));\\n          }\\n        }\\n      } catch (err) {\\n        _iterator9.e(err);\\n      } finally {\\n        _iterator9.f();\\n      }\\n    }\\n  }, {\\n    key: \\\"_getFirstLevelChildren\\\",\\n    value: function _getFirstLevelChildren(selector) {\\n      var children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth\\n\\n      return SelectorEngine.find(selector, this._config.parent).filter(function (element) {\\n        return !children.includes(element);\\n      });\\n    }\\n  }, {\\n    key: \\\"_addAriaAndCollapsedClass\\\",\\n    value: function _addAriaAndCollapsedClass(triggerArray, isOpen) {\\n      if (!triggerArray.length) {\\n        return;\\n      }\\n      var _iterator10 = _createForOfIteratorHelper(triggerArray),\\n        _step10;\\n      try {\\n        for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\\n          var element = _step10.value;\\n          element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\\n          element.setAttribute('aria-expanded', isOpen);\\n        }\\n      } catch (err) {\\n        _iterator10.e(err);\\n      } finally {\\n        _iterator10.f();\\n      }\\n    } // Static\\n  }], [{\\n    key: \\\"Default\\\",\\n    get: function get() {\\n      return Default$a;\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return DefaultType$a;\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME$b;\\n    }\\n  }, {\\n    key: \\\"jQueryInterface\\\",\\n    value: function jQueryInterface(config) {\\n      var _config = {};\\n      if (typeof config === 'string' && /show|hide/.test(config)) {\\n        _config.toggle = false;\\n      }\\n      return this.each(function () {\\n        var data = Collapse.getOrCreateInstance(this, _config);\\n        if (typeof config === 'string') {\\n          if (typeof data[config] === 'undefined') {\\n            throw new TypeError(\\\"No method named \\\\\\\"\\\".concat(config, \\\"\\\\\\\"\\\"));\\n          }\\n          data[config]();\\n        }\\n      });\\n    }\\n  }]);\\n  return Collapse;\\n}(BaseComponent);\\n/**\\n * Data API implementation\\n */\\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\\n    event.preventDefault();\\n  }\\n  var selector = getSelectorFromElement(this);\\n  var selectorElements = SelectorEngine.find(selector);\\n  var _iterator11 = _createForOfIteratorHelper(selectorElements),\\n    _step11;\\n  try {\\n    for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\\n      var element = _step11.value;\\n      Collapse.getOrCreateInstance(element, {\\n        toggle: false\\n      }).toggle();\\n    }\\n  } catch (err) {\\n    _iterator11.e(err);\\n  } finally {\\n    _iterator11.f();\\n  }\\n});\\n/**\\n * jQuery\\n */\\n\\ndefineJQueryPlugin(Collapse);\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): dropdown.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar NAME$a = 'dropdown';\\nvar DATA_KEY$6 = 'bs.dropdown';\\nvar EVENT_KEY$6 = \\\".\\\".concat(DATA_KEY$6);\\nvar DATA_API_KEY$3 = '.data-api';\\nvar ESCAPE_KEY$2 = 'Escape';\\nvar TAB_KEY$1 = 'Tab';\\nvar ARROW_UP_KEY$1 = 'ArrowUp';\\nvar ARROW_DOWN_KEY$1 = 'ArrowDown';\\nvar RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\\n\\nvar EVENT_HIDE$5 = \\\"hide\\\".concat(EVENT_KEY$6);\\nvar EVENT_HIDDEN$5 = \\\"hidden\\\".concat(EVENT_KEY$6);\\nvar EVENT_SHOW$5 = \\\"show\\\".concat(EVENT_KEY$6);\\nvar EVENT_SHOWN$5 = \\\"shown\\\".concat(EVENT_KEY$6);\\nvar EVENT_CLICK_DATA_API$3 = \\\"click\\\".concat(EVENT_KEY$6).concat(DATA_API_KEY$3);\\nvar EVENT_KEYDOWN_DATA_API = \\\"keydown\\\".concat(EVENT_KEY$6).concat(DATA_API_KEY$3);\\nvar EVENT_KEYUP_DATA_API = \\\"keyup\\\".concat(EVENT_KEY$6).concat(DATA_API_KEY$3);\\nvar CLASS_NAME_SHOW$6 = 'show';\\nvar CLASS_NAME_DROPUP = 'dropup';\\nvar CLASS_NAME_DROPEND = 'dropend';\\nvar CLASS_NAME_DROPSTART = 'dropstart';\\nvar CLASS_NAME_DROPUP_CENTER = 'dropup-center';\\nvar CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\\nvar SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\\\"dropdown\\\"]:not(.disabled):not(:disabled)';\\nvar SELECTOR_DATA_TOGGLE_SHOWN = \\\"\\\".concat(SELECTOR_DATA_TOGGLE$3, \\\".\\\").concat(CLASS_NAME_SHOW$6);\\nvar SELECTOR_MENU = '.dropdown-menu';\\nvar SELECTOR_NAVBAR = '.navbar';\\nvar SELECTOR_NAVBAR_NAV = '.navbar-nav';\\nvar SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\\nvar PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\\nvar PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\\nvar PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\\nvar PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\\nvar PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\\nvar PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\\nvar PLACEMENT_TOPCENTER = 'top';\\nvar PLACEMENT_BOTTOMCENTER = 'bottom';\\nvar Default$9 = {\\n  autoClose: true,\\n  boundary: 'clippingParents',\\n  display: 'dynamic',\\n  offset: [0, 2],\\n  popperConfig: null,\\n  reference: 'toggle'\\n};\\nvar DefaultType$9 = {\\n  autoClose: '(boolean|string)',\\n  boundary: '(string|element)',\\n  display: 'string',\\n  offset: '(array|string|function)',\\n  popperConfig: '(null|object|function)',\\n  reference: '(string|element|object)'\\n};\\n/**\\n * Class definition\\n */\\nvar Dropdown = /*#__PURE__*/function (_BaseComponent5) {\\n  _inherits(Dropdown, _BaseComponent5);\\n  var _super7 = _createSuper(Dropdown);\\n  function Dropdown(element, config) {\\n    var _this15;\\n    _classCallCheck(this, Dropdown);\\n    _this15 = _super7.call(this, element, config);\\n    _this15._popper = null;\\n    _this15._parent = _this15._element.parentNode; // dropdown wrapper\\n    // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\\n\\n    _this15._menu = SelectorEngine.next(_this15._element, SELECTOR_MENU)[0] || SelectorEngine.prev(_this15._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, _this15._parent);\\n    _this15._inNavbar = _this15._detectNavbar();\\n    return _this15;\\n  } // Getters\\n  _createClass(Dropdown, [{\\n    key: \\\"toggle\\\",\\n    value:\\n    // Public\\n\\n    function toggle() {\\n      return this._isShown() ? this.hide() : this.show();\\n    }\\n  }, {\\n    key: \\\"show\\\",\\n    value: function show() {\\n      if (isDisabled(this._element) || this._isShown()) {\\n        return;\\n      }\\n      var relatedTarget = {\\n        relatedTarget: this._element\\n      };\\n      var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\\n      if (showEvent.defaultPrevented) {\\n        return;\\n      }\\n      this._createPopper(); // If this is a touch-enabled device we add extra\\n      // empty mouseover listeners to the body's immediate children;\\n      // only needed because of broken event delegation on iOS\\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\\n\\n      if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\\n        var _ref6;\\n        var _iterator12 = _createForOfIteratorHelper((_ref6 = []).concat.apply(_ref6, _toConsumableArray(document.body.children))),\\n          _step12;\\n        try {\\n          for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\\n            var element = _step12.value;\\n            EventHandler.on(element, 'mouseover', noop);\\n          }\\n        } catch (err) {\\n          _iterator12.e(err);\\n        } finally {\\n          _iterator12.f();\\n        }\\n      }\\n      this._element.focus();\\n      this._element.setAttribute('aria-expanded', true);\\n      this._menu.classList.add(CLASS_NAME_SHOW$6);\\n      this._element.classList.add(CLASS_NAME_SHOW$6);\\n      EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\\n    }\\n  }, {\\n    key: \\\"hide\\\",\\n    value: function hide() {\\n      if (isDisabled(this._element) || !this._isShown()) {\\n        return;\\n      }\\n      var relatedTarget = {\\n        relatedTarget: this._element\\n      };\\n      this._completeHide(relatedTarget);\\n    }\\n  }, {\\n    key: \\\"dispose\\\",\\n    value: function dispose() {\\n      if (this._popper) {\\n        this._popper.destroy();\\n      }\\n      _get(_getPrototypeOf(Dropdown.prototype), \\\"dispose\\\", this).call(this);\\n    }\\n  }, {\\n    key: \\\"update\\\",\\n    value: function update() {\\n      this._inNavbar = this._detectNavbar();\\n      if (this._popper) {\\n        this._popper.update();\\n      }\\n    } // Private\\n  }, {\\n    key: \\\"_completeHide\\\",\\n    value: function _completeHide(relatedTarget) {\\n      var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\\n      if (hideEvent.defaultPrevented) {\\n        return;\\n      } // If this is a touch-enabled device we remove the extra\\n      // empty mouseover listeners we added for iOS support\\n\\n      if ('ontouchstart' in document.documentElement) {\\n        var _ref7;\\n        var _iterator13 = _createForOfIteratorHelper((_ref7 = []).concat.apply(_ref7, _toConsumableArray(document.body.children))),\\n          _step13;\\n        try {\\n          for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\\n            var element = _step13.value;\\n            EventHandler.off(element, 'mouseover', noop);\\n          }\\n        } catch (err) {\\n          _iterator13.e(err);\\n        } finally {\\n          _iterator13.f();\\n        }\\n      }\\n      if (this._popper) {\\n        this._popper.destroy();\\n      }\\n      this._menu.classList.remove(CLASS_NAME_SHOW$6);\\n      this._element.classList.remove(CLASS_NAME_SHOW$6);\\n      this._element.setAttribute('aria-expanded', 'false');\\n      Manipulator.removeDataAttribute(this._menu, 'popper');\\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\\n    }\\n  }, {\\n    key: \\\"_getConfig\\\",\\n    value: function _getConfig(config) {\\n      config = _get(_getPrototypeOf(Dropdown.prototype), \\\"_getConfig\\\", this).call(this, config);\\n      if (_typeof(config.reference) === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\\n        // Popper virtual elements require a getBoundingClientRect method\\n        throw new TypeError(\\\"\\\".concat(NAME$a.toUpperCase(), \\\": Option \\\\\\\"reference\\\\\\\" provided type \\\\\\\"object\\\\\\\" without a required \\\\\\\"getBoundingClientRect\\\\\\\" method.\\\"));\\n      }\\n      return config;\\n    }\\n  }, {\\n    key: \\\"_createPopper\\\",\\n    value: function _createPopper() {\\n      if (typeof _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ === 'undefined') {\\n        throw new TypeError('Bootstrap\\\\'s dropdowns require Popper (https://popper.js.org)');\\n      }\\n      var referenceElement = this._element;\\n      if (this._config.reference === 'parent') {\\n        referenceElement = this._parent;\\n      } else if (isElement(this._config.reference)) {\\n        referenceElement = getElement(this._config.reference);\\n      } else if (_typeof(this._config.reference) === 'object') {\\n        referenceElement = this._config.reference;\\n      }\\n      var popperConfig = this._getPopperConfig();\\n      this._popper = _popperjs_core__WEBPACK_IMPORTED_MODULE_1__.createPopper(referenceElement, this._menu, popperConfig);\\n    }\\n  }, {\\n    key: \\\"_isShown\\\",\\n    value: function _isShown() {\\n      return this._menu.classList.contains(CLASS_NAME_SHOW$6);\\n    }\\n  }, {\\n    key: \\\"_getPlacement\\\",\\n    value: function _getPlacement() {\\n      var parentDropdown = this._parent;\\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\\n        return PLACEMENT_RIGHT;\\n      }\\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\\n        return PLACEMENT_LEFT;\\n      }\\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\\n        return PLACEMENT_TOPCENTER;\\n      }\\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\\n        return PLACEMENT_BOTTOMCENTER;\\n      } // We need to trim the value because custom properties can also include spaces\\n\\n      var isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\\n      }\\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\\n    }\\n  }, {\\n    key: \\\"_detectNavbar\\\",\\n    value: function _detectNavbar() {\\n      return this._element.closest(SELECTOR_NAVBAR) !== null;\\n    }\\n  }, {\\n    key: \\\"_getOffset\\\",\\n    value: function _getOffset() {\\n      var _this16 = this;\\n      var offset = this._config.offset;\\n      if (typeof offset === 'string') {\\n        return offset.split(',').map(function (value) {\\n          return Number.parseInt(value, 10);\\n        });\\n      }\\n      if (typeof offset === 'function') {\\n        return function (popperData) {\\n          return offset(popperData, _this16._element);\\n        };\\n      }\\n      return offset;\\n    }\\n  }, {\\n    key: \\\"_getPopperConfig\\\",\\n    value: function _getPopperConfig() {\\n      var defaultBsPopperConfig = {\\n        placement: this._getPlacement(),\\n        modifiers: [{\\n          name: 'preventOverflow',\\n          options: {\\n            boundary: this._config.boundary\\n          }\\n        }, {\\n          name: 'offset',\\n          options: {\\n            offset: this._getOffset()\\n          }\\n        }]\\n      }; // Disable Popper if we have a static display or Dropdown is in Navbar\\n\\n      if (this._inNavbar || this._config.display === 'static') {\\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove\\n\\n        defaultBsPopperConfig.modifiers = [{\\n          name: 'applyStyles',\\n          enabled: false\\n        }];\\n      }\\n      return _objectSpread(_objectSpread({}, defaultBsPopperConfig), typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig);\\n    }\\n  }, {\\n    key: \\\"_selectMenuItem\\\",\\n    value: function _selectMenuItem(_ref8) {\\n      var key = _ref8.key,\\n        target = _ref8.target;\\n      var items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(function (element) {\\n        return isVisible(element);\\n      });\\n      if (!items.length) {\\n        return;\\n      } // if target isn't included in items (e.g. when expanding the dropdown)\\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\\n\\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\\n    } // Static\\n  }], [{\\n    key: \\\"Default\\\",\\n    get: function get() {\\n      return Default$9;\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return DefaultType$9;\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME$a;\\n    }\\n  }, {\\n    key: \\\"jQueryInterface\\\",\\n    value: function jQueryInterface(config) {\\n      return this.each(function () {\\n        var data = Dropdown.getOrCreateInstance(this, config);\\n        if (typeof config !== 'string') {\\n          return;\\n        }\\n        if (typeof data[config] === 'undefined') {\\n          throw new TypeError(\\\"No method named \\\\\\\"\\\".concat(config, \\\"\\\\\\\"\\\"));\\n        }\\n        data[config]();\\n      });\\n    }\\n  }, {\\n    key: \\\"clearMenus\\\",\\n    value: function clearMenus(event) {\\n      if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\\n        return;\\n      }\\n      var openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\\n      var _iterator14 = _createForOfIteratorHelper(openToggles),\\n        _step14;\\n      try {\\n        for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\\n          var toggle = _step14.value;\\n          var context = Dropdown.getInstance(toggle);\\n          if (!context || context._config.autoClose === false) {\\n            continue;\\n          }\\n          var composedPath = event.composedPath();\\n          var isMenuTarget = composedPath.includes(context._menu);\\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\\n            continue;\\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\\n\\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\\n            continue;\\n          }\\n          var relatedTarget = {\\n            relatedTarget: context._element\\n          };\\n          if (event.type === 'click') {\\n            relatedTarget.clickEvent = event;\\n          }\\n          context._completeHide(relatedTarget);\\n        }\\n      } catch (err) {\\n        _iterator14.e(err);\\n      } finally {\\n        _iterator14.f();\\n      }\\n    }\\n  }, {\\n    key: \\\"dataApiKeydownHandler\\\",\\n    value: function dataApiKeydownHandler(event) {\\n      // If not an UP | DOWN | ESCAPE key => not a dropdown command\\n      // If input/textarea && if key is other than ESCAPE => not a dropdown command\\n      var isInput = /input|textarea/i.test(event.target.tagName);\\n      var isEscapeEvent = event.key === ESCAPE_KEY$2;\\n      var isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\\n      if (!isUpOrDownEvent && !isEscapeEvent) {\\n        return;\\n      }\\n      if (isInput && !isEscapeEvent) {\\n        return;\\n      }\\n      event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\\n\\n      var getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\\n      var instance = Dropdown.getOrCreateInstance(getToggleButton);\\n      if (isUpOrDownEvent) {\\n        event.stopPropagation();\\n        instance.show();\\n        instance._selectMenuItem(event);\\n        return;\\n      }\\n      if (instance._isShown()) {\\n        // else is escape and we check if it is shown\\n        event.stopPropagation();\\n        instance.hide();\\n        getToggleButton.focus();\\n      }\\n    }\\n  }]);\\n  return Dropdown;\\n}(BaseComponent);\\n/**\\n * Data API implementation\\n */\\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\\n  event.preventDefault();\\n  Dropdown.getOrCreateInstance(this).toggle();\\n});\\n/**\\n * jQuery\\n */\\n\\ndefineJQueryPlugin(Dropdown);\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): util/scrollBar.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\\nvar SELECTOR_STICKY_CONTENT = '.sticky-top';\\nvar PROPERTY_PADDING = 'padding-right';\\nvar PROPERTY_MARGIN = 'margin-right';\\n/**\\n * Class definition\\n */\\nvar ScrollBarHelper = /*#__PURE__*/function () {\\n  function ScrollBarHelper() {\\n    _classCallCheck(this, ScrollBarHelper);\\n    this._element = document.body;\\n  } // Public\\n  _createClass(ScrollBarHelper, [{\\n    key: \\\"getWidth\\\",\\n    value: function getWidth() {\\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\\n      var documentWidth = document.documentElement.clientWidth;\\n      return Math.abs(window.innerWidth - documentWidth);\\n    }\\n  }, {\\n    key: \\\"hide\\\",\\n    value: function hide() {\\n      var width = this.getWidth();\\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\\n\\n      this._setElementAttributes(this._element, PROPERTY_PADDING, function (calculatedValue) {\\n        return calculatedValue + width;\\n      }); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\\n\\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, function (calculatedValue) {\\n        return calculatedValue + width;\\n      });\\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, function (calculatedValue) {\\n        return calculatedValue - width;\\n      });\\n    }\\n  }, {\\n    key: \\\"reset\\\",\\n    value: function reset() {\\n      this._resetElementAttributes(this._element, 'overflow');\\n      this._resetElementAttributes(this._element, PROPERTY_PADDING);\\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\\n    }\\n  }, {\\n    key: \\\"isOverflowing\\\",\\n    value: function isOverflowing() {\\n      return this.getWidth() > 0;\\n    } // Private\\n  }, {\\n    key: \\\"_disableOverFlow\\\",\\n    value: function _disableOverFlow() {\\n      this._saveInitialAttribute(this._element, 'overflow');\\n      this._element.style.overflow = 'hidden';\\n    }\\n  }, {\\n    key: \\\"_setElementAttributes\\\",\\n    value: function _setElementAttributes(selector, styleProperty, callback) {\\n      var _this17 = this;\\n      var scrollbarWidth = this.getWidth();\\n      var manipulationCallBack = function manipulationCallBack(element) {\\n        if (element !== _this17._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\\n          return;\\n        }\\n        _this17._saveInitialAttribute(element, styleProperty);\\n        var calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\\n        element.style.setProperty(styleProperty, \\\"\\\".concat(callback(Number.parseFloat(calculatedValue)), \\\"px\\\"));\\n      };\\n      this._applyManipulationCallback(selector, manipulationCallBack);\\n    }\\n  }, {\\n    key: \\\"_saveInitialAttribute\\\",\\n    value: function _saveInitialAttribute(element, styleProperty) {\\n      var actualValue = element.style.getPropertyValue(styleProperty);\\n      if (actualValue) {\\n        Manipulator.setDataAttribute(element, styleProperty, actualValue);\\n      }\\n    }\\n  }, {\\n    key: \\\"_resetElementAttributes\\\",\\n    value: function _resetElementAttributes(selector, styleProperty) {\\n      var manipulationCallBack = function manipulationCallBack(element) {\\n        var value = Manipulator.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero\\n\\n        if (value === null) {\\n          element.style.removeProperty(styleProperty);\\n          return;\\n        }\\n        Manipulator.removeDataAttribute(element, styleProperty);\\n        element.style.setProperty(styleProperty, value);\\n      };\\n      this._applyManipulationCallback(selector, manipulationCallBack);\\n    }\\n  }, {\\n    key: \\\"_applyManipulationCallback\\\",\\n    value: function _applyManipulationCallback(selector, callBack) {\\n      if (isElement(selector)) {\\n        callBack(selector);\\n        return;\\n      }\\n      var _iterator15 = _createForOfIteratorHelper(SelectorEngine.find(selector, this._element)),\\n        _step15;\\n      try {\\n        for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\\n          var sel = _step15.value;\\n          callBack(sel);\\n        }\\n      } catch (err) {\\n        _iterator15.e(err);\\n      } finally {\\n        _iterator15.f();\\n      }\\n    }\\n  }]);\\n  return ScrollBarHelper;\\n}();\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): util/backdrop.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\nvar NAME$9 = 'backdrop';\\nvar CLASS_NAME_FADE$4 = 'fade';\\nvar CLASS_NAME_SHOW$5 = 'show';\\nvar EVENT_MOUSEDOWN = \\\"mousedown.bs.\\\".concat(NAME$9);\\nvar Default$8 = {\\n  className: 'modal-backdrop',\\n  clickCallback: null,\\n  isAnimated: false,\\n  isVisible: true,\\n  // if false, we use the backdrop helper without adding any element to the dom\\n  rootElement: 'body' // give the choice to place backdrop under different elements\\n};\\n\\nvar DefaultType$8 = {\\n  className: 'string',\\n  clickCallback: '(function|null)',\\n  isAnimated: 'boolean',\\n  isVisible: 'boolean',\\n  rootElement: '(element|string)'\\n};\\n/**\\n * Class definition\\n */\\nvar Backdrop = /*#__PURE__*/function (_Config3) {\\n  _inherits(Backdrop, _Config3);\\n  var _super8 = _createSuper(Backdrop);\\n  function Backdrop(config) {\\n    var _this18;\\n    _classCallCheck(this, Backdrop);\\n    _this18 = _super8.call(this);\\n    _this18._config = _this18._getConfig(config);\\n    _this18._isAppended = false;\\n    _this18._element = null;\\n    return _this18;\\n  } // Getters\\n  _createClass(Backdrop, [{\\n    key: \\\"show\\\",\\n    value:\\n    // Public\\n\\n    function show(callback) {\\n      if (!this._config.isVisible) {\\n        execute(callback);\\n        return;\\n      }\\n      this._append();\\n      var element = this._getElement();\\n      if (this._config.isAnimated) {\\n        reflow(element);\\n      }\\n      element.classList.add(CLASS_NAME_SHOW$5);\\n      this._emulateAnimation(function () {\\n        execute(callback);\\n      });\\n    }\\n  }, {\\n    key: \\\"hide\\\",\\n    value: function hide(callback) {\\n      var _this19 = this;\\n      if (!this._config.isVisible) {\\n        execute(callback);\\n        return;\\n      }\\n      this._getElement().classList.remove(CLASS_NAME_SHOW$5);\\n      this._emulateAnimation(function () {\\n        _this19.dispose();\\n        execute(callback);\\n      });\\n    }\\n  }, {\\n    key: \\\"dispose\\\",\\n    value: function dispose() {\\n      if (!this._isAppended) {\\n        return;\\n      }\\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\\n      this._element.remove();\\n      this._isAppended = false;\\n    } // Private\\n  }, {\\n    key: \\\"_getElement\\\",\\n    value: function _getElement() {\\n      if (!this._element) {\\n        var backdrop = document.createElement('div');\\n        backdrop.className = this._config.className;\\n        if (this._config.isAnimated) {\\n          backdrop.classList.add(CLASS_NAME_FADE$4);\\n        }\\n        this._element = backdrop;\\n      }\\n      return this._element;\\n    }\\n  }, {\\n    key: \\\"_configAfterMerge\\\",\\n    value: function _configAfterMerge(config) {\\n      // use getElement() with the default \\\"body\\\" to get a fresh Element on each instantiation\\n      config.rootElement = getElement(config.rootElement);\\n      return config;\\n    }\\n  }, {\\n    key: \\\"_append\\\",\\n    value: function _append() {\\n      var _this20 = this;\\n      if (this._isAppended) {\\n        return;\\n      }\\n      var element = this._getElement();\\n      this._config.rootElement.append(element);\\n      EventHandler.on(element, EVENT_MOUSEDOWN, function () {\\n        execute(_this20._config.clickCallback);\\n      });\\n      this._isAppended = true;\\n    }\\n  }, {\\n    key: \\\"_emulateAnimation\\\",\\n    value: function _emulateAnimation(callback) {\\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\\n    }\\n  }], [{\\n    key: \\\"Default\\\",\\n    get: function get() {\\n      return Default$8;\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return DefaultType$8;\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME$9;\\n    }\\n  }]);\\n  return Backdrop;\\n}(Config);\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): util/focustrap.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\nvar NAME$8 = 'focustrap';\\nvar DATA_KEY$5 = 'bs.focustrap';\\nvar EVENT_KEY$5 = \\\".\\\".concat(DATA_KEY$5);\\nvar EVENT_FOCUSIN$2 = \\\"focusin\\\".concat(EVENT_KEY$5);\\nvar EVENT_KEYDOWN_TAB = \\\"keydown.tab\\\".concat(EVENT_KEY$5);\\nvar TAB_KEY = 'Tab';\\nvar TAB_NAV_FORWARD = 'forward';\\nvar TAB_NAV_BACKWARD = 'backward';\\nvar Default$7 = {\\n  autofocus: true,\\n  trapElement: null // The element to trap focus inside of\\n};\\n\\nvar DefaultType$7 = {\\n  autofocus: 'boolean',\\n  trapElement: 'element'\\n};\\n/**\\n * Class definition\\n */\\nvar FocusTrap = /*#__PURE__*/function (_Config4) {\\n  _inherits(FocusTrap, _Config4);\\n  var _super9 = _createSuper(FocusTrap);\\n  function FocusTrap(config) {\\n    var _this21;\\n    _classCallCheck(this, FocusTrap);\\n    _this21 = _super9.call(this);\\n    _this21._config = _this21._getConfig(config);\\n    _this21._isActive = false;\\n    _this21._lastTabNavDirection = null;\\n    return _this21;\\n  } // Getters\\n  _createClass(FocusTrap, [{\\n    key: \\\"activate\\\",\\n    value:\\n    // Public\\n\\n    function activate() {\\n      var _this22 = this;\\n      if (this._isActive) {\\n        return;\\n      }\\n      if (this._config.autofocus) {\\n        this._config.trapElement.focus();\\n      }\\n      EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\\n\\n      EventHandler.on(document, EVENT_FOCUSIN$2, function (event) {\\n        return _this22._handleFocusin(event);\\n      });\\n      EventHandler.on(document, EVENT_KEYDOWN_TAB, function (event) {\\n        return _this22._handleKeydown(event);\\n      });\\n      this._isActive = true;\\n    }\\n  }, {\\n    key: \\\"deactivate\\\",\\n    value: function deactivate() {\\n      if (!this._isActive) {\\n        return;\\n      }\\n      this._isActive = false;\\n      EventHandler.off(document, EVENT_KEY$5);\\n    } // Private\\n  }, {\\n    key: \\\"_handleFocusin\\\",\\n    value: function _handleFocusin(event) {\\n      var trapElement = this._config.trapElement;\\n      if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\\n        return;\\n      }\\n      var elements = SelectorEngine.focusableChildren(trapElement);\\n      if (elements.length === 0) {\\n        trapElement.focus();\\n      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\\n        elements[elements.length - 1].focus();\\n      } else {\\n        elements[0].focus();\\n      }\\n    }\\n  }, {\\n    key: \\\"_handleKeydown\\\",\\n    value: function _handleKeydown(event) {\\n      if (event.key !== TAB_KEY) {\\n        return;\\n      }\\n      this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\\n    }\\n  }], [{\\n    key: \\\"Default\\\",\\n    get: function get() {\\n      return Default$7;\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return DefaultType$7;\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME$8;\\n    }\\n  }]);\\n  return FocusTrap;\\n}(Config);\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): modal.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\nvar NAME$7 = 'modal';\\nvar DATA_KEY$4 = 'bs.modal';\\nvar EVENT_KEY$4 = \\\".\\\".concat(DATA_KEY$4);\\nvar DATA_API_KEY$2 = '.data-api';\\nvar ESCAPE_KEY$1 = 'Escape';\\nvar EVENT_HIDE$4 = \\\"hide\\\".concat(EVENT_KEY$4);\\nvar EVENT_HIDE_PREVENTED$1 = \\\"hidePrevented\\\".concat(EVENT_KEY$4);\\nvar EVENT_HIDDEN$4 = \\\"hidden\\\".concat(EVENT_KEY$4);\\nvar EVENT_SHOW$4 = \\\"show\\\".concat(EVENT_KEY$4);\\nvar EVENT_SHOWN$4 = \\\"shown\\\".concat(EVENT_KEY$4);\\nvar EVENT_RESIZE$1 = \\\"resize\\\".concat(EVENT_KEY$4);\\nvar EVENT_CLICK_DISMISS = \\\"click.dismiss\\\".concat(EVENT_KEY$4);\\nvar EVENT_MOUSEDOWN_DISMISS = \\\"mousedown.dismiss\\\".concat(EVENT_KEY$4);\\nvar EVENT_KEYDOWN_DISMISS$1 = \\\"keydown.dismiss\\\".concat(EVENT_KEY$4);\\nvar EVENT_CLICK_DATA_API$2 = \\\"click\\\".concat(EVENT_KEY$4).concat(DATA_API_KEY$2);\\nvar CLASS_NAME_OPEN = 'modal-open';\\nvar CLASS_NAME_FADE$3 = 'fade';\\nvar CLASS_NAME_SHOW$4 = 'show';\\nvar CLASS_NAME_STATIC = 'modal-static';\\nvar OPEN_SELECTOR$1 = '.modal.show';\\nvar SELECTOR_DIALOG = '.modal-dialog';\\nvar SELECTOR_MODAL_BODY = '.modal-body';\\nvar SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\\\"modal\\\"]';\\nvar Default$6 = {\\n  backdrop: true,\\n  focus: true,\\n  keyboard: true\\n};\\nvar DefaultType$6 = {\\n  backdrop: '(boolean|string)',\\n  focus: 'boolean',\\n  keyboard: 'boolean'\\n};\\n/**\\n * Class definition\\n */\\nvar Modal = /*#__PURE__*/function (_BaseComponent6) {\\n  _inherits(Modal, _BaseComponent6);\\n  var _super10 = _createSuper(Modal);\\n  function Modal(element, config) {\\n    var _this23;\\n    _classCallCheck(this, Modal);\\n    _this23 = _super10.call(this, element, config);\\n    _this23._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, _this23._element);\\n    _this23._backdrop = _this23._initializeBackDrop();\\n    _this23._focustrap = _this23._initializeFocusTrap();\\n    _this23._isShown = false;\\n    _this23._isTransitioning = false;\\n    _this23._scrollBar = new ScrollBarHelper();\\n    _this23._addEventListeners();\\n    return _this23;\\n  } // Getters\\n  _createClass(Modal, [{\\n    key: \\\"toggle\\\",\\n    value:\\n    // Public\\n\\n    function toggle(relatedTarget) {\\n      return this._isShown ? this.hide() : this.show(relatedTarget);\\n    }\\n  }, {\\n    key: \\\"show\\\",\\n    value: function show(relatedTarget) {\\n      var _this24 = this;\\n      if (this._isShown || this._isTransitioning) {\\n        return;\\n      }\\n      var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\\n        relatedTarget: relatedTarget\\n      });\\n      if (showEvent.defaultPrevented) {\\n        return;\\n      }\\n      this._isShown = true;\\n      this._isTransitioning = true;\\n      this._scrollBar.hide();\\n      document.body.classList.add(CLASS_NAME_OPEN);\\n      this._adjustDialog();\\n      this._backdrop.show(function () {\\n        return _this24._showElement(relatedTarget);\\n      });\\n    }\\n  }, {\\n    key: \\\"hide\\\",\\n    value: function hide() {\\n      var _this25 = this;\\n      if (!this._isShown || this._isTransitioning) {\\n        return;\\n      }\\n      var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\\n      if (hideEvent.defaultPrevented) {\\n        return;\\n      }\\n      this._isShown = false;\\n      this._isTransitioning = true;\\n      this._focustrap.deactivate();\\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\\n      this._queueCallback(function () {\\n        return _this25._hideModal();\\n      }, this._element, this._isAnimated());\\n    }\\n  }, {\\n    key: \\\"dispose\\\",\\n    value: function dispose() {\\n      for (var _i7 = 0, _arr = [window, this._dialog]; _i7 < _arr.length; _i7++) {\\n        var htmlElement = _arr[_i7];\\n        EventHandler.off(htmlElement, EVENT_KEY$4);\\n      }\\n      this._backdrop.dispose();\\n      this._focustrap.deactivate();\\n      _get(_getPrototypeOf(Modal.prototype), \\\"dispose\\\", this).call(this);\\n    }\\n  }, {\\n    key: \\\"handleUpdate\\\",\\n    value: function handleUpdate() {\\n      this._adjustDialog();\\n    } // Private\\n  }, {\\n    key: \\\"_initializeBackDrop\\\",\\n    value: function _initializeBackDrop() {\\n      return new Backdrop({\\n        isVisible: Boolean(this._config.backdrop),\\n        // 'static' option will be translated to true, and booleans will keep their value,\\n        isAnimated: this._isAnimated()\\n      });\\n    }\\n  }, {\\n    key: \\\"_initializeFocusTrap\\\",\\n    value: function _initializeFocusTrap() {\\n      return new FocusTrap({\\n        trapElement: this._element\\n      });\\n    }\\n  }, {\\n    key: \\\"_showElement\\\",\\n    value: function _showElement(relatedTarget) {\\n      var _this26 = this;\\n      // try to append dynamic modal\\n      if (!document.body.contains(this._element)) {\\n        document.body.append(this._element);\\n      }\\n      this._element.style.display = 'block';\\n      this._element.removeAttribute('aria-hidden');\\n      this._element.setAttribute('aria-modal', true);\\n      this._element.setAttribute('role', 'dialog');\\n      this._element.scrollTop = 0;\\n      var modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\\n      if (modalBody) {\\n        modalBody.scrollTop = 0;\\n      }\\n      reflow(this._element);\\n      this._element.classList.add(CLASS_NAME_SHOW$4);\\n      var transitionComplete = function transitionComplete() {\\n        if (_this26._config.focus) {\\n          _this26._focustrap.activate();\\n        }\\n        _this26._isTransitioning = false;\\n        EventHandler.trigger(_this26._element, EVENT_SHOWN$4, {\\n          relatedTarget: relatedTarget\\n        });\\n      };\\n      this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\\n    }\\n  }, {\\n    key: \\\"_addEventListeners\\\",\\n    value: function _addEventListeners() {\\n      var _this27 = this;\\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, function (event) {\\n        if (event.key !== ESCAPE_KEY$1) {\\n          return;\\n        }\\n        if (_this27._config.keyboard) {\\n          event.preventDefault();\\n          _this27.hide();\\n          return;\\n        }\\n        _this27._triggerBackdropTransition();\\n      });\\n      EventHandler.on(window, EVENT_RESIZE$1, function () {\\n        if (_this27._isShown && !_this27._isTransitioning) {\\n          _this27._adjustDialog();\\n        }\\n      });\\n      EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, function (event) {\\n        // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\\n        EventHandler.one(_this27._element, EVENT_CLICK_DISMISS, function (event2) {\\n          if (_this27._element !== event.target || _this27._element !== event2.target) {\\n            return;\\n          }\\n          if (_this27._config.backdrop === 'static') {\\n            _this27._triggerBackdropTransition();\\n            return;\\n          }\\n          if (_this27._config.backdrop) {\\n            _this27.hide();\\n          }\\n        });\\n      });\\n    }\\n  }, {\\n    key: \\\"_hideModal\\\",\\n    value: function _hideModal() {\\n      var _this28 = this;\\n      this._element.style.display = 'none';\\n      this._element.setAttribute('aria-hidden', true);\\n      this._element.removeAttribute('aria-modal');\\n      this._element.removeAttribute('role');\\n      this._isTransitioning = false;\\n      this._backdrop.hide(function () {\\n        document.body.classList.remove(CLASS_NAME_OPEN);\\n        _this28._resetAdjustments();\\n        _this28._scrollBar.reset();\\n        EventHandler.trigger(_this28._element, EVENT_HIDDEN$4);\\n      });\\n    }\\n  }, {\\n    key: \\\"_isAnimated\\\",\\n    value: function _isAnimated() {\\n      return this._element.classList.contains(CLASS_NAME_FADE$3);\\n    }\\n  }, {\\n    key: \\\"_triggerBackdropTransition\\\",\\n    value: function _triggerBackdropTransition() {\\n      var _this29 = this;\\n      var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\\n      if (hideEvent.defaultPrevented) {\\n        return;\\n      }\\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\\n      var initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed\\n\\n      if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\\n        return;\\n      }\\n      if (!isModalOverflowing) {\\n        this._element.style.overflowY = 'hidden';\\n      }\\n      this._element.classList.add(CLASS_NAME_STATIC);\\n      this._queueCallback(function () {\\n        _this29._element.classList.remove(CLASS_NAME_STATIC);\\n        _this29._queueCallback(function () {\\n          _this29._element.style.overflowY = initialOverflowY;\\n        }, _this29._dialog);\\n      }, this._dialog);\\n      this._element.focus();\\n    }\\n    /**\\n     * The following methods are used to handle overflowing modals\\n     */\\n  }, {\\n    key: \\\"_adjustDialog\\\",\\n    value: function _adjustDialog() {\\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\\n      var scrollbarWidth = this._scrollBar.getWidth();\\n      var isBodyOverflowing = scrollbarWidth > 0;\\n      if (isBodyOverflowing && !isModalOverflowing) {\\n        var property = isRTL() ? 'paddingLeft' : 'paddingRight';\\n        this._element.style[property] = \\\"\\\".concat(scrollbarWidth, \\\"px\\\");\\n      }\\n      if (!isBodyOverflowing && isModalOverflowing) {\\n        var _property = isRTL() ? 'paddingRight' : 'paddingLeft';\\n        this._element.style[_property] = \\\"\\\".concat(scrollbarWidth, \\\"px\\\");\\n      }\\n    }\\n  }, {\\n    key: \\\"_resetAdjustments\\\",\\n    value: function _resetAdjustments() {\\n      this._element.style.paddingLeft = '';\\n      this._element.style.paddingRight = '';\\n    } // Static\\n  }], [{\\n    key: \\\"Default\\\",\\n    get: function get() {\\n      return Default$6;\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return DefaultType$6;\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME$7;\\n    }\\n  }, {\\n    key: \\\"jQueryInterface\\\",\\n    value: function jQueryInterface(config, relatedTarget) {\\n      return this.each(function () {\\n        var data = Modal.getOrCreateInstance(this, config);\\n        if (typeof config !== 'string') {\\n          return;\\n        }\\n        if (typeof data[config] === 'undefined') {\\n          throw new TypeError(\\\"No method named \\\\\\\"\\\".concat(config, \\\"\\\\\\\"\\\"));\\n        }\\n        data[config](relatedTarget);\\n      });\\n    }\\n  }]);\\n  return Modal;\\n}(BaseComponent);\\n/**\\n * Data API implementation\\n */\\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\\n  var _this30 = this;\\n  var target = getElementFromSelector(this);\\n  if (['A', 'AREA'].includes(this.tagName)) {\\n    event.preventDefault();\\n  }\\n  EventHandler.one(target, EVENT_SHOW$4, function (showEvent) {\\n    if (showEvent.defaultPrevented) {\\n      // only register focus restorer if modal will actually get shown\\n      return;\\n    }\\n    EventHandler.one(target, EVENT_HIDDEN$4, function () {\\n      if (isVisible(_this30)) {\\n        _this30.focus();\\n      }\\n    });\\n  }); // avoid conflict when clicking modal toggler while another one is open\\n\\n  var alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\\n  if (alreadyOpen) {\\n    Modal.getInstance(alreadyOpen).hide();\\n  }\\n  var data = Modal.getOrCreateInstance(target);\\n  data.toggle(this);\\n});\\nenableDismissTrigger(Modal);\\n/**\\n * jQuery\\n */\\n\\ndefineJQueryPlugin(Modal);\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): offcanvas.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar NAME$6 = 'offcanvas';\\nvar DATA_KEY$3 = 'bs.offcanvas';\\nvar EVENT_KEY$3 = \\\".\\\".concat(DATA_KEY$3);\\nvar DATA_API_KEY$1 = '.data-api';\\nvar EVENT_LOAD_DATA_API$2 = \\\"load\\\".concat(EVENT_KEY$3).concat(DATA_API_KEY$1);\\nvar ESCAPE_KEY = 'Escape';\\nvar CLASS_NAME_SHOW$3 = 'show';\\nvar CLASS_NAME_SHOWING$1 = 'showing';\\nvar CLASS_NAME_HIDING = 'hiding';\\nvar CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\\nvar OPEN_SELECTOR = '.offcanvas.show';\\nvar EVENT_SHOW$3 = \\\"show\\\".concat(EVENT_KEY$3);\\nvar EVENT_SHOWN$3 = \\\"shown\\\".concat(EVENT_KEY$3);\\nvar EVENT_HIDE$3 = \\\"hide\\\".concat(EVENT_KEY$3);\\nvar EVENT_HIDE_PREVENTED = \\\"hidePrevented\\\".concat(EVENT_KEY$3);\\nvar EVENT_HIDDEN$3 = \\\"hidden\\\".concat(EVENT_KEY$3);\\nvar EVENT_RESIZE = \\\"resize\\\".concat(EVENT_KEY$3);\\nvar EVENT_CLICK_DATA_API$1 = \\\"click\\\".concat(EVENT_KEY$3).concat(DATA_API_KEY$1);\\nvar EVENT_KEYDOWN_DISMISS = \\\"keydown.dismiss\\\".concat(EVENT_KEY$3);\\nvar SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\\\"offcanvas\\\"]';\\nvar Default$5 = {\\n  backdrop: true,\\n  keyboard: true,\\n  scroll: false\\n};\\nvar DefaultType$5 = {\\n  backdrop: '(boolean|string)',\\n  keyboard: 'boolean',\\n  scroll: 'boolean'\\n};\\n/**\\n * Class definition\\n */\\nvar Offcanvas = /*#__PURE__*/function (_BaseComponent7) {\\n  _inherits(Offcanvas, _BaseComponent7);\\n  var _super11 = _createSuper(Offcanvas);\\n  function Offcanvas(element, config) {\\n    var _this31;\\n    _classCallCheck(this, Offcanvas);\\n    _this31 = _super11.call(this, element, config);\\n    _this31._isShown = false;\\n    _this31._backdrop = _this31._initializeBackDrop();\\n    _this31._focustrap = _this31._initializeFocusTrap();\\n    _this31._addEventListeners();\\n    return _this31;\\n  } // Getters\\n  _createClass(Offcanvas, [{\\n    key: \\\"toggle\\\",\\n    value:\\n    // Public\\n\\n    function toggle(relatedTarget) {\\n      return this._isShown ? this.hide() : this.show(relatedTarget);\\n    }\\n  }, {\\n    key: \\\"show\\\",\\n    value: function show(relatedTarget) {\\n      var _this32 = this;\\n      if (this._isShown) {\\n        return;\\n      }\\n      var showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\\n        relatedTarget: relatedTarget\\n      });\\n      if (showEvent.defaultPrevented) {\\n        return;\\n      }\\n      this._isShown = true;\\n      this._backdrop.show();\\n      if (!this._config.scroll) {\\n        new ScrollBarHelper().hide();\\n      }\\n      this._element.setAttribute('aria-modal', true);\\n      this._element.setAttribute('role', 'dialog');\\n      this._element.classList.add(CLASS_NAME_SHOWING$1);\\n      var completeCallBack = function completeCallBack() {\\n        if (!_this32._config.scroll || _this32._config.backdrop) {\\n          _this32._focustrap.activate();\\n        }\\n        _this32._element.classList.add(CLASS_NAME_SHOW$3);\\n        _this32._element.classList.remove(CLASS_NAME_SHOWING$1);\\n        EventHandler.trigger(_this32._element, EVENT_SHOWN$3, {\\n          relatedTarget: relatedTarget\\n        });\\n      };\\n      this._queueCallback(completeCallBack, this._element, true);\\n    }\\n  }, {\\n    key: \\\"hide\\\",\\n    value: function hide() {\\n      var _this33 = this;\\n      if (!this._isShown) {\\n        return;\\n      }\\n      var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\\n      if (hideEvent.defaultPrevented) {\\n        return;\\n      }\\n      this._focustrap.deactivate();\\n      this._element.blur();\\n      this._isShown = false;\\n      this._element.classList.add(CLASS_NAME_HIDING);\\n      this._backdrop.hide();\\n      var completeCallback = function completeCallback() {\\n        _this33._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\\n        _this33._element.removeAttribute('aria-modal');\\n        _this33._element.removeAttribute('role');\\n        if (!_this33._config.scroll) {\\n          new ScrollBarHelper().reset();\\n        }\\n        EventHandler.trigger(_this33._element, EVENT_HIDDEN$3);\\n      };\\n      this._queueCallback(completeCallback, this._element, true);\\n    }\\n  }, {\\n    key: \\\"dispose\\\",\\n    value: function dispose() {\\n      this._backdrop.dispose();\\n      this._focustrap.deactivate();\\n      _get(_getPrototypeOf(Offcanvas.prototype), \\\"dispose\\\", this).call(this);\\n    } // Private\\n  }, {\\n    key: \\\"_initializeBackDrop\\\",\\n    value: function _initializeBackDrop() {\\n      var _this34 = this;\\n      var clickCallback = function clickCallback() {\\n        if (_this34._config.backdrop === 'static') {\\n          EventHandler.trigger(_this34._element, EVENT_HIDE_PREVENTED);\\n          return;\\n        }\\n        _this34.hide();\\n      }; // 'static' option will be translated to true, and booleans will keep their value\\n\\n      var isVisible = Boolean(this._config.backdrop);\\n      return new Backdrop({\\n        className: CLASS_NAME_BACKDROP,\\n        isVisible: isVisible,\\n        isAnimated: true,\\n        rootElement: this._element.parentNode,\\n        clickCallback: isVisible ? clickCallback : null\\n      });\\n    }\\n  }, {\\n    key: \\\"_initializeFocusTrap\\\",\\n    value: function _initializeFocusTrap() {\\n      return new FocusTrap({\\n        trapElement: this._element\\n      });\\n    }\\n  }, {\\n    key: \\\"_addEventListeners\\\",\\n    value: function _addEventListeners() {\\n      var _this35 = this;\\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, function (event) {\\n        if (event.key !== ESCAPE_KEY) {\\n          return;\\n        }\\n        if (!_this35._config.keyboard) {\\n          EventHandler.trigger(_this35._element, EVENT_HIDE_PREVENTED);\\n          return;\\n        }\\n        _this35.hide();\\n      });\\n    } // Static\\n  }], [{\\n    key: \\\"Default\\\",\\n    get: function get() {\\n      return Default$5;\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return DefaultType$5;\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME$6;\\n    }\\n  }, {\\n    key: \\\"jQueryInterface\\\",\\n    value: function jQueryInterface(config) {\\n      return this.each(function () {\\n        var data = Offcanvas.getOrCreateInstance(this, config);\\n        if (typeof config !== 'string') {\\n          return;\\n        }\\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\\n          throw new TypeError(\\\"No method named \\\\\\\"\\\".concat(config, \\\"\\\\\\\"\\\"));\\n        }\\n        data[config](this);\\n      });\\n    }\\n  }]);\\n  return Offcanvas;\\n}(BaseComponent);\\n/**\\n * Data API implementation\\n */\\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\\n  var _this36 = this;\\n  var target = getElementFromSelector(this);\\n  if (['A', 'AREA'].includes(this.tagName)) {\\n    event.preventDefault();\\n  }\\n  if (isDisabled(this)) {\\n    return;\\n  }\\n  EventHandler.one(target, EVENT_HIDDEN$3, function () {\\n    // focus on trigger when it is closed\\n    if (isVisible(_this36)) {\\n      _this36.focus();\\n    }\\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\\n\\n  var alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\\n  if (alreadyOpen && alreadyOpen !== target) {\\n    Offcanvas.getInstance(alreadyOpen).hide();\\n  }\\n  var data = Offcanvas.getOrCreateInstance(target);\\n  data.toggle(this);\\n});\\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, function () {\\n  var _iterator16 = _createForOfIteratorHelper(SelectorEngine.find(OPEN_SELECTOR)),\\n    _step16;\\n  try {\\n    for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\\n      var selector = _step16.value;\\n      Offcanvas.getOrCreateInstance(selector).show();\\n    }\\n  } catch (err) {\\n    _iterator16.e(err);\\n  } finally {\\n    _iterator16.f();\\n  }\\n});\\nEventHandler.on(window, EVENT_RESIZE, function () {\\n  var _iterator17 = _createForOfIteratorHelper(SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')),\\n    _step17;\\n  try {\\n    for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\\n      var element = _step17.value;\\n      if (getComputedStyle(element).position !== 'fixed') {\\n        Offcanvas.getOrCreateInstance(element).hide();\\n      }\\n    }\\n  } catch (err) {\\n    _iterator17.e(err);\\n  } finally {\\n    _iterator17.f();\\n  }\\n});\\nenableDismissTrigger(Offcanvas);\\n/**\\n * jQuery\\n */\\n\\ndefineJQueryPlugin(Offcanvas);\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): util/sanitizer.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\nvar uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\\nvar ARIA_ATTRIBUTE_PATTERN = /^aria-[\\\\w-]*$/i;\\n/**\\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\\n *\\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\\n */\\n\\nvar SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\\n/**\\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\\n *\\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\\n */\\n\\nvar DATA_URL_PATTERN = /^data:(?:image\\\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\\\/(?:mpeg|mp4|ogg|webm)|audio\\\\/(?:mp3|oga|ogg|opus));base64,[\\\\d+/a-z]+=*$/i;\\nvar allowedAttribute = function allowedAttribute(attribute, allowedAttributeList) {\\n  var attributeName = attribute.nodeName.toLowerCase();\\n  if (allowedAttributeList.includes(attributeName)) {\\n    if (uriAttributes.has(attributeName)) {\\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));\\n    }\\n    return true;\\n  } // Check if a regular expression validates the attribute.\\n\\n  return allowedAttributeList.filter(function (attributeRegex) {\\n    return attributeRegex instanceof RegExp;\\n  }).some(function (regex) {\\n    return regex.test(attributeName);\\n  });\\n};\\nvar DefaultAllowlist = {\\n  // Global attributes allowed on any supplied element below.\\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\\n  a: ['target', 'href', 'title', 'rel'],\\n  area: [],\\n  b: [],\\n  br: [],\\n  col: [],\\n  code: [],\\n  div: [],\\n  em: [],\\n  hr: [],\\n  h1: [],\\n  h2: [],\\n  h3: [],\\n  h4: [],\\n  h5: [],\\n  h6: [],\\n  i: [],\\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\\n  li: [],\\n  ol: [],\\n  p: [],\\n  pre: [],\\n  s: [],\\n  small: [],\\n  span: [],\\n  sub: [],\\n  sup: [],\\n  strong: [],\\n  u: [],\\n  ul: []\\n};\\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\\n  var _ref9;\\n  if (!unsafeHtml.length) {\\n    return unsafeHtml;\\n  }\\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\\n    return sanitizeFunction(unsafeHtml);\\n  }\\n  var domParser = new window.DOMParser();\\n  var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\\n  var elements = (_ref9 = []).concat.apply(_ref9, _toConsumableArray(createdDocument.body.querySelectorAll('*')));\\n  var _iterator18 = _createForOfIteratorHelper(elements),\\n    _step18;\\n  try {\\n    for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\\n      var _ref10;\\n      var element = _step18.value;\\n      var elementName = element.nodeName.toLowerCase();\\n      if (!Object.keys(allowList).includes(elementName)) {\\n        element.remove();\\n        continue;\\n      }\\n      var attributeList = (_ref10 = []).concat.apply(_ref10, _toConsumableArray(element.attributes));\\n      var allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\\n      var _iterator19 = _createForOfIteratorHelper(attributeList),\\n        _step19;\\n      try {\\n        for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\\n          var attribute = _step19.value;\\n          if (!allowedAttribute(attribute, allowedAttributes)) {\\n            element.removeAttribute(attribute.nodeName);\\n          }\\n        }\\n      } catch (err) {\\n        _iterator19.e(err);\\n      } finally {\\n        _iterator19.f();\\n      }\\n    }\\n  } catch (err) {\\n    _iterator18.e(err);\\n  } finally {\\n    _iterator18.f();\\n  }\\n  return createdDocument.body.innerHTML;\\n}\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): util/template-factory.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar NAME$5 = 'TemplateFactory';\\nvar Default$4 = {\\n  allowList: DefaultAllowlist,\\n  content: {},\\n  // { selector : text ,  selector2 : text2 , }\\n  extraClass: '',\\n  html: false,\\n  sanitize: true,\\n  sanitizeFn: null,\\n  template: '<div></div>'\\n};\\nvar DefaultType$4 = {\\n  allowList: 'object',\\n  content: 'object',\\n  extraClass: '(string|function)',\\n  html: 'boolean',\\n  sanitize: 'boolean',\\n  sanitizeFn: '(null|function)',\\n  template: 'string'\\n};\\nvar DefaultContentType = {\\n  entry: '(string|element|function|null)',\\n  selector: '(string|element)'\\n};\\n/**\\n * Class definition\\n */\\nvar TemplateFactory = /*#__PURE__*/function (_Config5) {\\n  _inherits(TemplateFactory, _Config5);\\n  var _super12 = _createSuper(TemplateFactory);\\n  function TemplateFactory(config) {\\n    var _this37;\\n    _classCallCheck(this, TemplateFactory);\\n    _this37 = _super12.call(this);\\n    _this37._config = _this37._getConfig(config);\\n    return _this37;\\n  } // Getters\\n  _createClass(TemplateFactory, [{\\n    key: \\\"getContent\\\",\\n    value:\\n    // Public\\n\\n    function getContent() {\\n      var _this38 = this;\\n      return Object.values(this._config.content).map(function (config) {\\n        return _this38._resolvePossibleFunction(config);\\n      }).filter(Boolean);\\n    }\\n  }, {\\n    key: \\\"hasContent\\\",\\n    value: function hasContent() {\\n      return this.getContent().length > 0;\\n    }\\n  }, {\\n    key: \\\"changeContent\\\",\\n    value: function changeContent(content) {\\n      this._checkContent(content);\\n      this._config.content = _objectSpread(_objectSpread({}, this._config.content), content);\\n      return this;\\n    }\\n  }, {\\n    key: \\\"toHtml\\\",\\n    value: function toHtml() {\\n      var templateWrapper = document.createElement('div');\\n      templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\\n      for (var _i8 = 0, _Object$entries2 = Object.entries(this._config.content); _i8 < _Object$entries2.length; _i8++) {\\n        var _ref11 = _Object$entries2[_i8];\\n        var _ref12 = _slicedToArray(_ref11, 2);\\n        var selector = _ref12[0];\\n        var text = _ref12[1];\\n        this._setContent(templateWrapper, text, selector);\\n      }\\n      var template = templateWrapper.children[0];\\n      var extraClass = this._resolvePossibleFunction(this._config.extraClass);\\n      if (extraClass) {\\n        var _template$classList;\\n        (_template$classList = template.classList).add.apply(_template$classList, _toConsumableArray(extraClass.split(' ')));\\n      }\\n      return template;\\n    } // Private\\n  }, {\\n    key: \\\"_typeCheckConfig\\\",\\n    value: function _typeCheckConfig(config) {\\n      _get(_getPrototypeOf(TemplateFactory.prototype), \\\"_typeCheckConfig\\\", this).call(this, config);\\n      this._checkContent(config.content);\\n    }\\n  }, {\\n    key: \\\"_checkContent\\\",\\n    value: function _checkContent(arg) {\\n      for (var _i9 = 0, _Object$entries3 = Object.entries(arg); _i9 < _Object$entries3.length; _i9++) {\\n        var _ref13 = _Object$entries3[_i9];\\n        var _ref14 = _slicedToArray(_ref13, 2);\\n        var selector = _ref14[0];\\n        var content = _ref14[1];\\n        _get(_getPrototypeOf(TemplateFactory.prototype), \\\"_typeCheckConfig\\\", this).call(this, {\\n          selector: selector,\\n          entry: content\\n        }, DefaultContentType);\\n      }\\n    }\\n  }, {\\n    key: \\\"_setContent\\\",\\n    value: function _setContent(template, content, selector) {\\n      var templateElement = SelectorEngine.findOne(selector, template);\\n      if (!templateElement) {\\n        return;\\n      }\\n      content = this._resolvePossibleFunction(content);\\n      if (!content) {\\n        templateElement.remove();\\n        return;\\n      }\\n      if (isElement(content)) {\\n        this._putElementInTemplate(getElement(content), templateElement);\\n        return;\\n      }\\n      if (this._config.html) {\\n        templateElement.innerHTML = this._maybeSanitize(content);\\n        return;\\n      }\\n      templateElement.textContent = content;\\n    }\\n  }, {\\n    key: \\\"_maybeSanitize\\\",\\n    value: function _maybeSanitize(arg) {\\n      return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\\n    }\\n  }, {\\n    key: \\\"_resolvePossibleFunction\\\",\\n    value: function _resolvePossibleFunction(arg) {\\n      return typeof arg === 'function' ? arg(this) : arg;\\n    }\\n  }, {\\n    key: \\\"_putElementInTemplate\\\",\\n    value: function _putElementInTemplate(element, templateElement) {\\n      if (this._config.html) {\\n        templateElement.innerHTML = '';\\n        templateElement.append(element);\\n        return;\\n      }\\n      templateElement.textContent = element.textContent;\\n    }\\n  }], [{\\n    key: \\\"Default\\\",\\n    get: function get() {\\n      return Default$4;\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return DefaultType$4;\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME$5;\\n    }\\n  }]);\\n  return TemplateFactory;\\n}(Config);\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): tooltip.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\nvar NAME$4 = 'tooltip';\\nvar DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\\nvar CLASS_NAME_FADE$2 = 'fade';\\nvar CLASS_NAME_MODAL = 'modal';\\nvar CLASS_NAME_SHOW$2 = 'show';\\nvar SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\\nvar SELECTOR_MODAL = \\\".\\\".concat(CLASS_NAME_MODAL);\\nvar EVENT_MODAL_HIDE = 'hide.bs.modal';\\nvar TRIGGER_HOVER = 'hover';\\nvar TRIGGER_FOCUS = 'focus';\\nvar TRIGGER_CLICK = 'click';\\nvar TRIGGER_MANUAL = 'manual';\\nvar EVENT_HIDE$2 = 'hide';\\nvar EVENT_HIDDEN$2 = 'hidden';\\nvar EVENT_SHOW$2 = 'show';\\nvar EVENT_SHOWN$2 = 'shown';\\nvar EVENT_INSERTED = 'inserted';\\nvar EVENT_CLICK$1 = 'click';\\nvar EVENT_FOCUSIN$1 = 'focusin';\\nvar EVENT_FOCUSOUT$1 = 'focusout';\\nvar EVENT_MOUSEENTER = 'mouseenter';\\nvar EVENT_MOUSELEAVE = 'mouseleave';\\nvar AttachmentMap = {\\n  AUTO: 'auto',\\n  TOP: 'top',\\n  RIGHT: isRTL() ? 'left' : 'right',\\n  BOTTOM: 'bottom',\\n  LEFT: isRTL() ? 'right' : 'left'\\n};\\nvar Default$3 = {\\n  allowList: DefaultAllowlist,\\n  animation: true,\\n  boundary: 'clippingParents',\\n  container: false,\\n  customClass: '',\\n  delay: 0,\\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\\n  html: false,\\n  offset: [0, 0],\\n  placement: 'top',\\n  popperConfig: null,\\n  sanitize: true,\\n  sanitizeFn: null,\\n  selector: false,\\n  template: '<div class=\\\"tooltip\\\" role=\\\"tooltip\\\">' + '<div class=\\\"tooltip-arrow\\\"></div>' + '<div class=\\\"tooltip-inner\\\"></div>' + '</div>',\\n  title: '',\\n  trigger: 'hover focus'\\n};\\nvar DefaultType$3 = {\\n  allowList: 'object',\\n  animation: 'boolean',\\n  boundary: '(string|element)',\\n  container: '(string|element|boolean)',\\n  customClass: '(string|function)',\\n  delay: '(number|object)',\\n  fallbackPlacements: 'array',\\n  html: 'boolean',\\n  offset: '(array|string|function)',\\n  placement: '(string|function)',\\n  popperConfig: '(null|object|function)',\\n  sanitize: 'boolean',\\n  sanitizeFn: '(null|function)',\\n  selector: '(string|boolean)',\\n  template: 'string',\\n  title: '(string|element|function)',\\n  trigger: 'string'\\n};\\n/**\\n * Class definition\\n */\\nvar Tooltip = /*#__PURE__*/function (_BaseComponent8) {\\n  _inherits(Tooltip, _BaseComponent8);\\n  var _super13 = _createSuper(Tooltip);\\n  function Tooltip(element, config) {\\n    var _this39;\\n    _classCallCheck(this, Tooltip);\\n    if (typeof _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ === 'undefined') {\\n      throw new TypeError('Bootstrap\\\\'s tooltips require Popper (https://popper.js.org)');\\n    }\\n    _this39 = _super13.call(this, element, config); // Private\\n\\n    _this39._isEnabled = true;\\n    _this39._timeout = 0;\\n    _this39._isHovered = null;\\n    _this39._activeTrigger = {};\\n    _this39._popper = null;\\n    _this39._templateFactory = null;\\n    _this39._newContent = null; // Protected\\n\\n    _this39.tip = null;\\n    _this39._setListeners();\\n    if (!_this39._config.selector) {\\n      _this39._fixTitle();\\n    }\\n    return _this39;\\n  } // Getters\\n  _createClass(Tooltip, [{\\n    key: \\\"enable\\\",\\n    value:\\n    // Public\\n\\n    function enable() {\\n      this._isEnabled = true;\\n    }\\n  }, {\\n    key: \\\"disable\\\",\\n    value: function disable() {\\n      this._isEnabled = false;\\n    }\\n  }, {\\n    key: \\\"toggleEnabled\\\",\\n    value: function toggleEnabled() {\\n      this._isEnabled = !this._isEnabled;\\n    }\\n  }, {\\n    key: \\\"toggle\\\",\\n    value: function toggle() {\\n      if (!this._isEnabled) {\\n        return;\\n      }\\n      this._activeTrigger.click = !this._activeTrigger.click;\\n      if (this._isShown()) {\\n        this._leave();\\n        return;\\n      }\\n      this._enter();\\n    }\\n  }, {\\n    key: \\\"dispose\\\",\\n    value: function dispose() {\\n      clearTimeout(this._timeout);\\n      EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\\n      if (this._element.getAttribute('data-bs-original-title')) {\\n        this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\\n      }\\n      this._disposePopper();\\n      _get(_getPrototypeOf(Tooltip.prototype), \\\"dispose\\\", this).call(this);\\n    }\\n  }, {\\n    key: \\\"show\\\",\\n    value: function show() {\\n      var _this40 = this;\\n      if (this._element.style.display === 'none') {\\n        throw new Error('Please use show on visible elements');\\n      }\\n      if (!(this._isWithContent() && this._isEnabled)) {\\n        return;\\n      }\\n      var showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\\n      var shadowRoot = findShadowRoot(this._element);\\n      var isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\\n      if (showEvent.defaultPrevented || !isInTheDom) {\\n        return;\\n      } // todo v6 remove this OR make it optional\\n\\n      this._disposePopper();\\n      var tip = this._getTipElement();\\n      this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\\n      var container = this._config.container;\\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\\n        container.append(tip);\\n        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\\n      }\\n      this._popper = this._createPopper(tip);\\n      tip.classList.add(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we add extra\\n      // empty mouseover listeners to the body's immediate children;\\n      // only needed because of broken event delegation on iOS\\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\\n\\n      if ('ontouchstart' in document.documentElement) {\\n        var _ref15;\\n        var _iterator20 = _createForOfIteratorHelper((_ref15 = []).concat.apply(_ref15, _toConsumableArray(document.body.children))),\\n          _step20;\\n        try {\\n          for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\\n            var element = _step20.value;\\n            EventHandler.on(element, 'mouseover', noop);\\n          }\\n        } catch (err) {\\n          _iterator20.e(err);\\n        } finally {\\n          _iterator20.f();\\n        }\\n      }\\n      var complete = function complete() {\\n        EventHandler.trigger(_this40._element, _this40.constructor.eventName(EVENT_SHOWN$2));\\n        if (_this40._isHovered === false) {\\n          _this40._leave();\\n        }\\n        _this40._isHovered = false;\\n      };\\n      this._queueCallback(complete, this.tip, this._isAnimated());\\n    }\\n  }, {\\n    key: \\\"hide\\\",\\n    value: function hide() {\\n      var _this41 = this;\\n      if (!this._isShown()) {\\n        return;\\n      }\\n      var hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\\n      if (hideEvent.defaultPrevented) {\\n        return;\\n      }\\n      var tip = this._getTipElement();\\n      tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra\\n      // empty mouseover listeners we added for iOS support\\n\\n      if ('ontouchstart' in document.documentElement) {\\n        var _ref16;\\n        var _iterator21 = _createForOfIteratorHelper((_ref16 = []).concat.apply(_ref16, _toConsumableArray(document.body.children))),\\n          _step21;\\n        try {\\n          for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\\n            var element = _step21.value;\\n            EventHandler.off(element, 'mouseover', noop);\\n          }\\n        } catch (err) {\\n          _iterator21.e(err);\\n        } finally {\\n          _iterator21.f();\\n        }\\n      }\\n      this._activeTrigger[TRIGGER_CLICK] = false;\\n      this._activeTrigger[TRIGGER_FOCUS] = false;\\n      this._activeTrigger[TRIGGER_HOVER] = false;\\n      this._isHovered = null; // it is a trick to support manual triggering\\n\\n      var complete = function complete() {\\n        if (_this41._isWithActiveTrigger()) {\\n          return;\\n        }\\n        if (!_this41._isHovered) {\\n          _this41._disposePopper();\\n        }\\n        _this41._element.removeAttribute('aria-describedby');\\n        EventHandler.trigger(_this41._element, _this41.constructor.eventName(EVENT_HIDDEN$2));\\n      };\\n      this._queueCallback(complete, this.tip, this._isAnimated());\\n    }\\n  }, {\\n    key: \\\"update\\\",\\n    value: function update() {\\n      if (this._popper) {\\n        this._popper.update();\\n      }\\n    } // Protected\\n  }, {\\n    key: \\\"_isWithContent\\\",\\n    value: function _isWithContent() {\\n      return Boolean(this._getTitle());\\n    }\\n  }, {\\n    key: \\\"_getTipElement\\\",\\n    value: function _getTipElement() {\\n      if (!this.tip) {\\n        this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\\n      }\\n      return this.tip;\\n    }\\n  }, {\\n    key: \\\"_createTipElement\\\",\\n    value: function _createTipElement(content) {\\n      var tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6\\n\\n      if (!tip) {\\n        return null;\\n      }\\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); // todo: on v6 the following can be achieved with CSS only\\n\\n      tip.classList.add(\\\"bs-\\\".concat(this.constructor.NAME, \\\"-auto\\\"));\\n      var tipId = getUID(this.constructor.NAME).toString();\\n      tip.setAttribute('id', tipId);\\n      if (this._isAnimated()) {\\n        tip.classList.add(CLASS_NAME_FADE$2);\\n      }\\n      return tip;\\n    }\\n  }, {\\n    key: \\\"setContent\\\",\\n    value: function setContent(content) {\\n      this._newContent = content;\\n      if (this._isShown()) {\\n        this._disposePopper();\\n        this.show();\\n      }\\n    }\\n  }, {\\n    key: \\\"_getTemplateFactory\\\",\\n    value: function _getTemplateFactory(content) {\\n      if (this._templateFactory) {\\n        this._templateFactory.changeContent(content);\\n      } else {\\n        this._templateFactory = new TemplateFactory(_objectSpread(_objectSpread({}, this._config), {}, {\\n          // the `content` var has to be after `this._config`\\n          // to override config.content in case of popover\\n          content: content,\\n          extraClass: this._resolvePossibleFunction(this._config.customClass)\\n        }));\\n      }\\n      return this._templateFactory;\\n    }\\n  }, {\\n    key: \\\"_getContentForTemplate\\\",\\n    value: function _getContentForTemplate() {\\n      return _defineProperty({}, SELECTOR_TOOLTIP_INNER, this._getTitle());\\n    }\\n  }, {\\n    key: \\\"_getTitle\\\",\\n    value: function _getTitle() {\\n      return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\\n    } // Private\\n  }, {\\n    key: \\\"_initializeOnDelegatedTarget\\\",\\n    value: function _initializeOnDelegatedTarget(event) {\\n      return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\\n    }\\n  }, {\\n    key: \\\"_isAnimated\\\",\\n    value: function _isAnimated() {\\n      return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\\n    }\\n  }, {\\n    key: \\\"_isShown\\\",\\n    value: function _isShown() {\\n      return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\\n    }\\n  }, {\\n    key: \\\"_createPopper\\\",\\n    value: function _createPopper(tip) {\\n      var placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\\n      var attachment = AttachmentMap[placement.toUpperCase()];\\n      return _popperjs_core__WEBPACK_IMPORTED_MODULE_1__.createPopper(this._element, tip, this._getPopperConfig(attachment));\\n    }\\n  }, {\\n    key: \\\"_getOffset\\\",\\n    value: function _getOffset() {\\n      var _this42 = this;\\n      var offset = this._config.offset;\\n      if (typeof offset === 'string') {\\n        return offset.split(',').map(function (value) {\\n          return Number.parseInt(value, 10);\\n        });\\n      }\\n      if (typeof offset === 'function') {\\n        return function (popperData) {\\n          return offset(popperData, _this42._element);\\n        };\\n      }\\n      return offset;\\n    }\\n  }, {\\n    key: \\\"_resolvePossibleFunction\\\",\\n    value: function _resolvePossibleFunction(arg) {\\n      return typeof arg === 'function' ? arg.call(this._element) : arg;\\n    }\\n  }, {\\n    key: \\\"_getPopperConfig\\\",\\n    value: function _getPopperConfig(attachment) {\\n      var _this43 = this;\\n      var defaultBsPopperConfig = {\\n        placement: attachment,\\n        modifiers: [{\\n          name: 'flip',\\n          options: {\\n            fallbackPlacements: this._config.fallbackPlacements\\n          }\\n        }, {\\n          name: 'offset',\\n          options: {\\n            offset: this._getOffset()\\n          }\\n        }, {\\n          name: 'preventOverflow',\\n          options: {\\n            boundary: this._config.boundary\\n          }\\n        }, {\\n          name: 'arrow',\\n          options: {\\n            element: \\\".\\\".concat(this.constructor.NAME, \\\"-arrow\\\")\\n          }\\n        }, {\\n          name: 'preSetPlacement',\\n          enabled: true,\\n          phase: 'beforeMain',\\n          fn: function fn(data) {\\n            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\\n            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\\n            _this43._getTipElement().setAttribute('data-popper-placement', data.state.placement);\\n          }\\n        }]\\n      };\\n      return _objectSpread(_objectSpread({}, defaultBsPopperConfig), typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig);\\n    }\\n  }, {\\n    key: \\\"_setListeners\\\",\\n    value: function _setListeners() {\\n      var _this44 = this;\\n      var triggers = this._config.trigger.split(' ');\\n      var _iterator22 = _createForOfIteratorHelper(triggers),\\n        _step22;\\n      try {\\n        for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\\n          var trigger = _step22.value;\\n          if (trigger === 'click') {\\n            EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, function (event) {\\n              var context = _this44._initializeOnDelegatedTarget(event);\\n              context.toggle();\\n            });\\n          } else if (trigger !== TRIGGER_MANUAL) {\\n            var eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\\n            var eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\\n            EventHandler.on(this._element, eventIn, this._config.selector, function (event) {\\n              var context = _this44._initializeOnDelegatedTarget(event);\\n              context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\\n              context._enter();\\n            });\\n            EventHandler.on(this._element, eventOut, this._config.selector, function (event) {\\n              var context = _this44._initializeOnDelegatedTarget(event);\\n              context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\\n              context._leave();\\n            });\\n          }\\n        }\\n      } catch (err) {\\n        _iterator22.e(err);\\n      } finally {\\n        _iterator22.f();\\n      }\\n      this._hideModalHandler = function () {\\n        if (_this44._element) {\\n          _this44.hide();\\n        }\\n      };\\n      EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\\n    }\\n  }, {\\n    key: \\\"_fixTitle\\\",\\n    value: function _fixTitle() {\\n      var title = this._element.getAttribute('title');\\n      if (!title) {\\n        return;\\n      }\\n      if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\\n        this._element.setAttribute('aria-label', title);\\n      }\\n      this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\\n\\n      this._element.removeAttribute('title');\\n    }\\n  }, {\\n    key: \\\"_enter\\\",\\n    value: function _enter() {\\n      var _this45 = this;\\n      if (this._isShown() || this._isHovered) {\\n        this._isHovered = true;\\n        return;\\n      }\\n      this._isHovered = true;\\n      this._setTimeout(function () {\\n        if (_this45._isHovered) {\\n          _this45.show();\\n        }\\n      }, this._config.delay.show);\\n    }\\n  }, {\\n    key: \\\"_leave\\\",\\n    value: function _leave() {\\n      var _this46 = this;\\n      if (this._isWithActiveTrigger()) {\\n        return;\\n      }\\n      this._isHovered = false;\\n      this._setTimeout(function () {\\n        if (!_this46._isHovered) {\\n          _this46.hide();\\n        }\\n      }, this._config.delay.hide);\\n    }\\n  }, {\\n    key: \\\"_setTimeout\\\",\\n    value: function _setTimeout(handler, timeout) {\\n      clearTimeout(this._timeout);\\n      this._timeout = setTimeout(handler, timeout);\\n    }\\n  }, {\\n    key: \\\"_isWithActiveTrigger\\\",\\n    value: function _isWithActiveTrigger() {\\n      return Object.values(this._activeTrigger).includes(true);\\n    }\\n  }, {\\n    key: \\\"_getConfig\\\",\\n    value: function _getConfig(config) {\\n      var dataAttributes = Manipulator.getDataAttributes(this._element);\\n      for (var _i10 = 0, _Object$keys5 = Object.keys(dataAttributes); _i10 < _Object$keys5.length; _i10++) {\\n        var dataAttribute = _Object$keys5[_i10];\\n        if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\\n          delete dataAttributes[dataAttribute];\\n        }\\n      }\\n      config = _objectSpread(_objectSpread({}, dataAttributes), _typeof(config) === 'object' && config ? config : {});\\n      config = this._mergeConfigObj(config);\\n      config = this._configAfterMerge(config);\\n      this._typeCheckConfig(config);\\n      return config;\\n    }\\n  }, {\\n    key: \\\"_configAfterMerge\\\",\\n    value: function _configAfterMerge(config) {\\n      config.container = config.container === false ? document.body : getElement(config.container);\\n      if (typeof config.delay === 'number') {\\n        config.delay = {\\n          show: config.delay,\\n          hide: config.delay\\n        };\\n      }\\n      if (typeof config.title === 'number') {\\n        config.title = config.title.toString();\\n      }\\n      if (typeof config.content === 'number') {\\n        config.content = config.content.toString();\\n      }\\n      return config;\\n    }\\n  }, {\\n    key: \\\"_getDelegateConfig\\\",\\n    value: function _getDelegateConfig() {\\n      var config = {};\\n      for (var key in this._config) {\\n        if (this.constructor.Default[key] !== this._config[key]) {\\n          config[key] = this._config[key];\\n        }\\n      }\\n      config.selector = false;\\n      config.trigger = 'manual'; // In the future can be replaced with:\\n      // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\\n      // `Object.fromEntries(keysWithDifferentValues)`\\n\\n      return config;\\n    }\\n  }, {\\n    key: \\\"_disposePopper\\\",\\n    value: function _disposePopper() {\\n      if (this._popper) {\\n        this._popper.destroy();\\n        this._popper = null;\\n      }\\n      if (this.tip) {\\n        this.tip.remove();\\n        this.tip = null;\\n      }\\n    } // Static\\n  }], [{\\n    key: \\\"Default\\\",\\n    get: function get() {\\n      return Default$3;\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return DefaultType$3;\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME$4;\\n    }\\n  }, {\\n    key: \\\"jQueryInterface\\\",\\n    value: function jQueryInterface(config) {\\n      return this.each(function () {\\n        var data = Tooltip.getOrCreateInstance(this, config);\\n        if (typeof config !== 'string') {\\n          return;\\n        }\\n        if (typeof data[config] === 'undefined') {\\n          throw new TypeError(\\\"No method named \\\\\\\"\\\".concat(config, \\\"\\\\\\\"\\\"));\\n        }\\n        data[config]();\\n      });\\n    }\\n  }]);\\n  return Tooltip;\\n}(BaseComponent);\\n/**\\n * jQuery\\n */\\ndefineJQueryPlugin(Tooltip);\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): popover.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar NAME$3 = 'popover';\\nvar SELECTOR_TITLE = '.popover-header';\\nvar SELECTOR_CONTENT = '.popover-body';\\nvar Default$2 = _objectSpread(_objectSpread({}, Tooltip.Default), {}, {\\n  content: '',\\n  offset: [0, 8],\\n  placement: 'right',\\n  template: '<div class=\\\"popover\\\" role=\\\"tooltip\\\">' + '<div class=\\\"popover-arrow\\\"></div>' + '<h3 class=\\\"popover-header\\\"></h3>' + '<div class=\\\"popover-body\\\"></div>' + '</div>',\\n  trigger: 'click'\\n});\\nvar DefaultType$2 = _objectSpread(_objectSpread({}, Tooltip.DefaultType), {}, {\\n  content: '(null|string|element|function)'\\n});\\n/**\\n * Class definition\\n */\\nvar Popover = /*#__PURE__*/function (_Tooltip) {\\n  _inherits(Popover, _Tooltip);\\n  var _super14 = _createSuper(Popover);\\n  function Popover() {\\n    _classCallCheck(this, Popover);\\n    return _super14.apply(this, arguments);\\n  }\\n  _createClass(Popover, [{\\n    key: \\\"_isWithContent\\\",\\n    value:\\n    // Overrides\\n\\n    function _isWithContent() {\\n      return this._getTitle() || this._getContent();\\n    } // Private\\n  }, {\\n    key: \\\"_getContentForTemplate\\\",\\n    value: function _getContentForTemplate() {\\n      var _ref18;\\n      return _ref18 = {}, _defineProperty(_ref18, SELECTOR_TITLE, this._getTitle()), _defineProperty(_ref18, SELECTOR_CONTENT, this._getContent()), _ref18;\\n    }\\n  }, {\\n    key: \\\"_getContent\\\",\\n    value: function _getContent() {\\n      return this._resolvePossibleFunction(this._config.content);\\n    } // Static\\n  }], [{\\n    key: \\\"Default\\\",\\n    get:\\n    // Getters\\n    function get() {\\n      return Default$2;\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return DefaultType$2;\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME$3;\\n    }\\n  }, {\\n    key: \\\"jQueryInterface\\\",\\n    value: function jQueryInterface(config) {\\n      return this.each(function () {\\n        var data = Popover.getOrCreateInstance(this, config);\\n        if (typeof config !== 'string') {\\n          return;\\n        }\\n        if (typeof data[config] === 'undefined') {\\n          throw new TypeError(\\\"No method named \\\\\\\"\\\".concat(config, \\\"\\\\\\\"\\\"));\\n        }\\n        data[config]();\\n      });\\n    }\\n  }]);\\n  return Popover;\\n}(Tooltip);\\n/**\\n * jQuery\\n */\\ndefineJQueryPlugin(Popover);\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): scrollspy.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar NAME$2 = 'scrollspy';\\nvar DATA_KEY$2 = 'bs.scrollspy';\\nvar EVENT_KEY$2 = \\\".\\\".concat(DATA_KEY$2);\\nvar DATA_API_KEY = '.data-api';\\nvar EVENT_ACTIVATE = \\\"activate\\\".concat(EVENT_KEY$2);\\nvar EVENT_CLICK = \\\"click\\\".concat(EVENT_KEY$2);\\nvar EVENT_LOAD_DATA_API$1 = \\\"load\\\".concat(EVENT_KEY$2).concat(DATA_API_KEY);\\nvar CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\\nvar CLASS_NAME_ACTIVE$1 = 'active';\\nvar SELECTOR_DATA_SPY = '[data-bs-spy=\\\"scroll\\\"]';\\nvar SELECTOR_TARGET_LINKS = '[href]';\\nvar SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\\nvar SELECTOR_NAV_LINKS = '.nav-link';\\nvar SELECTOR_NAV_ITEMS = '.nav-item';\\nvar SELECTOR_LIST_ITEMS = '.list-group-item';\\nvar SELECTOR_LINK_ITEMS = \\\"\\\".concat(SELECTOR_NAV_LINKS, \\\", \\\").concat(SELECTOR_NAV_ITEMS, \\\" > \\\").concat(SELECTOR_NAV_LINKS, \\\", \\\").concat(SELECTOR_LIST_ITEMS);\\nvar SELECTOR_DROPDOWN = '.dropdown';\\nvar SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\\nvar Default$1 = {\\n  offset: null,\\n  // TODO: v6 @deprecated, keep it for backwards compatibility reasons\\n  rootMargin: '0px 0px -25%',\\n  smoothScroll: false,\\n  target: null,\\n  threshold: [0.1, 0.5, 1]\\n};\\nvar DefaultType$1 = {\\n  offset: '(number|null)',\\n  // TODO v6 @deprecated, keep it for backwards compatibility reasons\\n  rootMargin: 'string',\\n  smoothScroll: 'boolean',\\n  target: 'element',\\n  threshold: 'array'\\n};\\n/**\\n * Class definition\\n */\\nvar ScrollSpy = /*#__PURE__*/function (_BaseComponent9) {\\n  _inherits(ScrollSpy, _BaseComponent9);\\n  var _super15 = _createSuper(ScrollSpy);\\n  function ScrollSpy(element, config) {\\n    var _this47;\\n    _classCallCheck(this, ScrollSpy);\\n    _this47 = _super15.call(this, element, config); // this._element is the observablesContainer and config.target the menu links wrapper\\n\\n    _this47._targetLinks = new Map();\\n    _this47._observableSections = new Map();\\n    _this47._rootElement = getComputedStyle(_this47._element).overflowY === 'visible' ? null : _this47._element;\\n    _this47._activeTarget = null;\\n    _this47._observer = null;\\n    _this47._previousScrollData = {\\n      visibleEntryTop: 0,\\n      parentScrollTop: 0\\n    };\\n    _this47.refresh(); // initialize\\n    return _this47;\\n  } // Getters\\n  _createClass(ScrollSpy, [{\\n    key: \\\"refresh\\\",\\n    value:\\n    // Public\\n\\n    function refresh() {\\n      this._initializeTargetsAndObservables();\\n      this._maybeEnableSmoothScroll();\\n      if (this._observer) {\\n        this._observer.disconnect();\\n      } else {\\n        this._observer = this._getNewObserver();\\n      }\\n      var _iterator23 = _createForOfIteratorHelper(this._observableSections.values()),\\n        _step23;\\n      try {\\n        for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {\\n          var section = _step23.value;\\n          this._observer.observe(section);\\n        }\\n      } catch (err) {\\n        _iterator23.e(err);\\n      } finally {\\n        _iterator23.f();\\n      }\\n    }\\n  }, {\\n    key: \\\"dispose\\\",\\n    value: function dispose() {\\n      this._observer.disconnect();\\n      _get(_getPrototypeOf(ScrollSpy.prototype), \\\"dispose\\\", this).call(this);\\n    } // Private\\n  }, {\\n    key: \\\"_configAfterMerge\\\",\\n    value: function _configAfterMerge(config) {\\n      // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\\n      config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\\n\\n      config.rootMargin = config.offset ? \\\"\\\".concat(config.offset, \\\"px 0px -30%\\\") : config.rootMargin;\\n      if (typeof config.threshold === 'string') {\\n        config.threshold = config.threshold.split(',').map(function (value) {\\n          return Number.parseFloat(value);\\n        });\\n      }\\n      return config;\\n    }\\n  }, {\\n    key: \\\"_maybeEnableSmoothScroll\\\",\\n    value: function _maybeEnableSmoothScroll() {\\n      var _this48 = this;\\n      if (!this._config.smoothScroll) {\\n        return;\\n      } // unregister any previous listeners\\n\\n      EventHandler.off(this._config.target, EVENT_CLICK);\\n      EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, function (event) {\\n        var observableSection = _this48._observableSections.get(event.target.hash);\\n        if (observableSection) {\\n          event.preventDefault();\\n          var root = _this48._rootElement || window;\\n          var height = observableSection.offsetTop - _this48._element.offsetTop;\\n          if (root.scrollTo) {\\n            root.scrollTo({\\n              top: height,\\n              behavior: 'smooth'\\n            });\\n            return;\\n          } // Chrome 60 doesn't support `scrollTo`\\n\\n          root.scrollTop = height;\\n        }\\n      });\\n    }\\n  }, {\\n    key: \\\"_getNewObserver\\\",\\n    value: function _getNewObserver() {\\n      var _this49 = this;\\n      var options = {\\n        root: this._rootElement,\\n        threshold: this._config.threshold,\\n        rootMargin: this._config.rootMargin\\n      };\\n      return new IntersectionObserver(function (entries) {\\n        return _this49._observerCallback(entries);\\n      }, options);\\n    } // The logic of selection\\n  }, {\\n    key: \\\"_observerCallback\\\",\\n    value: function _observerCallback(entries) {\\n      var _this50 = this;\\n      var targetElement = function targetElement(entry) {\\n        return _this50._targetLinks.get(\\\"#\\\".concat(entry.target.id));\\n      };\\n      var activate = function activate(entry) {\\n        _this50._previousScrollData.visibleEntryTop = entry.target.offsetTop;\\n        _this50._process(targetElement(entry));\\n      };\\n      var parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\\n      var userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\\n      this._previousScrollData.parentScrollTop = parentScrollTop;\\n      var _iterator24 = _createForOfIteratorHelper(entries),\\n        _step24;\\n      try {\\n        for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {\\n          var entry = _step24.value;\\n          if (!entry.isIntersecting) {\\n            this._activeTarget = null;\\n            this._clearActiveClass(targetElement(entry));\\n            continue;\\n          }\\n          var entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop\\n\\n          if (userScrollsDown && entryIsLowerThanPrevious) {\\n            activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\\n\\n            if (!parentScrollTop) {\\n              return;\\n            }\\n            continue;\\n          } // if we are scrolling up, pick the smallest offsetTop\\n\\n          if (!userScrollsDown && !entryIsLowerThanPrevious) {\\n            activate(entry);\\n          }\\n        }\\n      } catch (err) {\\n        _iterator24.e(err);\\n      } finally {\\n        _iterator24.f();\\n      }\\n    }\\n  }, {\\n    key: \\\"_initializeTargetsAndObservables\\\",\\n    value: function _initializeTargetsAndObservables() {\\n      this._targetLinks = new Map();\\n      this._observableSections = new Map();\\n      var targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\\n      var _iterator25 = _createForOfIteratorHelper(targetLinks),\\n        _step25;\\n      try {\\n        for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {\\n          var anchor = _step25.value;\\n          // ensure that the anchor has an id and is not disabled\\n          if (!anchor.hash || isDisabled(anchor)) {\\n            continue;\\n          }\\n          var observableSection = SelectorEngine.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible\\n\\n          if (isVisible(observableSection)) {\\n            this._targetLinks.set(anchor.hash, anchor);\\n            this._observableSections.set(anchor.hash, observableSection);\\n          }\\n        }\\n      } catch (err) {\\n        _iterator25.e(err);\\n      } finally {\\n        _iterator25.f();\\n      }\\n    }\\n  }, {\\n    key: \\\"_process\\\",\\n    value: function _process(target) {\\n      if (this._activeTarget === target) {\\n        return;\\n      }\\n      this._clearActiveClass(this._config.target);\\n      this._activeTarget = target;\\n      target.classList.add(CLASS_NAME_ACTIVE$1);\\n      this._activateParents(target);\\n      EventHandler.trigger(this._element, EVENT_ACTIVATE, {\\n        relatedTarget: target\\n      });\\n    }\\n  }, {\\n    key: \\\"_activateParents\\\",\\n    value: function _activateParents(target) {\\n      // Activate dropdown parents\\n      if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\\n        return;\\n      }\\n      var _iterator26 = _createForOfIteratorHelper(SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)),\\n        _step26;\\n      try {\\n        for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {\\n          var listGroup = _step26.value;\\n          // Set triggered links parents as active\\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\\n          var _iterator27 = _createForOfIteratorHelper(SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)),\\n            _step27;\\n          try {\\n            for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {\\n              var item = _step27.value;\\n              item.classList.add(CLASS_NAME_ACTIVE$1);\\n            }\\n          } catch (err) {\\n            _iterator27.e(err);\\n          } finally {\\n            _iterator27.f();\\n          }\\n        }\\n      } catch (err) {\\n        _iterator26.e(err);\\n      } finally {\\n        _iterator26.f();\\n      }\\n    }\\n  }, {\\n    key: \\\"_clearActiveClass\\\",\\n    value: function _clearActiveClass(parent) {\\n      parent.classList.remove(CLASS_NAME_ACTIVE$1);\\n      var activeNodes = SelectorEngine.find(\\\"\\\".concat(SELECTOR_TARGET_LINKS, \\\".\\\").concat(CLASS_NAME_ACTIVE$1), parent);\\n      var _iterator28 = _createForOfIteratorHelper(activeNodes),\\n        _step28;\\n      try {\\n        for (_iterator28.s(); !(_step28 = _iterator28.n()).done;) {\\n          var node = _step28.value;\\n          node.classList.remove(CLASS_NAME_ACTIVE$1);\\n        }\\n      } catch (err) {\\n        _iterator28.e(err);\\n      } finally {\\n        _iterator28.f();\\n      }\\n    } // Static\\n  }], [{\\n    key: \\\"Default\\\",\\n    get: function get() {\\n      return Default$1;\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return DefaultType$1;\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME$2;\\n    }\\n  }, {\\n    key: \\\"jQueryInterface\\\",\\n    value: function jQueryInterface(config) {\\n      return this.each(function () {\\n        var data = ScrollSpy.getOrCreateInstance(this, config);\\n        if (typeof config !== 'string') {\\n          return;\\n        }\\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\\n          throw new TypeError(\\\"No method named \\\\\\\"\\\".concat(config, \\\"\\\\\\\"\\\"));\\n        }\\n        data[config]();\\n      });\\n    }\\n  }]);\\n  return ScrollSpy;\\n}(BaseComponent);\\n/**\\n * Data API implementation\\n */\\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, function () {\\n  var _iterator29 = _createForOfIteratorHelper(SelectorEngine.find(SELECTOR_DATA_SPY)),\\n    _step29;\\n  try {\\n    for (_iterator29.s(); !(_step29 = _iterator29.n()).done;) {\\n      var spy = _step29.value;\\n      ScrollSpy.getOrCreateInstance(spy);\\n    }\\n  } catch (err) {\\n    _iterator29.e(err);\\n  } finally {\\n    _iterator29.f();\\n  }\\n});\\n/**\\n * jQuery\\n */\\n\\ndefineJQueryPlugin(ScrollSpy);\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): tab.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar NAME$1 = 'tab';\\nvar DATA_KEY$1 = 'bs.tab';\\nvar EVENT_KEY$1 = \\\".\\\".concat(DATA_KEY$1);\\nvar EVENT_HIDE$1 = \\\"hide\\\".concat(EVENT_KEY$1);\\nvar EVENT_HIDDEN$1 = \\\"hidden\\\".concat(EVENT_KEY$1);\\nvar EVENT_SHOW$1 = \\\"show\\\".concat(EVENT_KEY$1);\\nvar EVENT_SHOWN$1 = \\\"shown\\\".concat(EVENT_KEY$1);\\nvar EVENT_CLICK_DATA_API = \\\"click\\\".concat(EVENT_KEY$1);\\nvar EVENT_KEYDOWN = \\\"keydown\\\".concat(EVENT_KEY$1);\\nvar EVENT_LOAD_DATA_API = \\\"load\\\".concat(EVENT_KEY$1);\\nvar ARROW_LEFT_KEY = 'ArrowLeft';\\nvar ARROW_RIGHT_KEY = 'ArrowRight';\\nvar ARROW_UP_KEY = 'ArrowUp';\\nvar ARROW_DOWN_KEY = 'ArrowDown';\\nvar CLASS_NAME_ACTIVE = 'active';\\nvar CLASS_NAME_FADE$1 = 'fade';\\nvar CLASS_NAME_SHOW$1 = 'show';\\nvar CLASS_DROPDOWN = 'dropdown';\\nvar SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\\nvar SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\\nvar NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)';\\nvar SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\\\"tablist\\\"]';\\nvar SELECTOR_OUTER = '.nav-item, .list-group-item';\\nvar SELECTOR_INNER = \\\".nav-link\\\".concat(NOT_SELECTOR_DROPDOWN_TOGGLE, \\\", .list-group-item\\\").concat(NOT_SELECTOR_DROPDOWN_TOGGLE, \\\", [role=\\\\\\\"tab\\\\\\\"]\\\").concat(NOT_SELECTOR_DROPDOWN_TOGGLE);\\nvar SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\\\"tab\\\"], [data-bs-toggle=\\\"pill\\\"], [data-bs-toggle=\\\"list\\\"]'; // todo:v6: could be only `tab`\\n\\nvar SELECTOR_INNER_ELEM = \\\"\\\".concat(SELECTOR_INNER, \\\", \\\").concat(SELECTOR_DATA_TOGGLE);\\nvar SELECTOR_DATA_TOGGLE_ACTIVE = \\\".\\\".concat(CLASS_NAME_ACTIVE, \\\"[data-bs-toggle=\\\\\\\"tab\\\\\\\"], .\\\").concat(CLASS_NAME_ACTIVE, \\\"[data-bs-toggle=\\\\\\\"pill\\\\\\\"], .\\\").concat(CLASS_NAME_ACTIVE, \\\"[data-bs-toggle=\\\\\\\"list\\\\\\\"]\\\");\\n/**\\n * Class definition\\n */\\nvar Tab = /*#__PURE__*/function (_BaseComponent10) {\\n  _inherits(Tab, _BaseComponent10);\\n  var _super16 = _createSuper(Tab);\\n  function Tab(element) {\\n    var _this51;\\n    _classCallCheck(this, Tab);\\n    _this51 = _super16.call(this, element);\\n    _this51._parent = _this51._element.closest(SELECTOR_TAB_PANEL);\\n    if (!_this51._parent) {\\n      return _possibleConstructorReturn(_this51); // todo: should Throw exception on v6\\n      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\\n    } // Set up initial aria attributes\\n\\n    _this51._setInitialAttributes(_this51._parent, _this51._getChildren());\\n    EventHandler.on(_this51._element, EVENT_KEYDOWN, function (event) {\\n      return _this51._keydown(event);\\n    });\\n    return _this51;\\n  } // Getters\\n  _createClass(Tab, [{\\n    key: \\\"show\\\",\\n    value:\\n    // Public\\n\\n    function show() {\\n      // Shows this elem and deactivate the active sibling if exists\\n      var innerElem = this._element;\\n      if (this._elemIsActive(innerElem)) {\\n        return;\\n      } // Search for active tab on same parent to deactivate it\\n\\n      var active = this._getActiveElem();\\n      var hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\\n        relatedTarget: innerElem\\n      }) : null;\\n      var showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\\n        relatedTarget: active\\n      });\\n      if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\\n        return;\\n      }\\n      this._deactivate(active, innerElem);\\n      this._activate(innerElem, active);\\n    } // Private\\n  }, {\\n    key: \\\"_activate\\\",\\n    value: function _activate(element, relatedElem) {\\n      var _this52 = this;\\n      if (!element) {\\n        return;\\n      }\\n      element.classList.add(CLASS_NAME_ACTIVE);\\n      this._activate(getElementFromSelector(element)); // Search and activate/show the proper section\\n\\n      var complete = function complete() {\\n        if (element.getAttribute('role') !== 'tab') {\\n          element.classList.add(CLASS_NAME_SHOW$1);\\n          return;\\n        }\\n        element.removeAttribute('tabindex');\\n        element.setAttribute('aria-selected', true);\\n        _this52._toggleDropDown(element, true);\\n        EventHandler.trigger(element, EVENT_SHOWN$1, {\\n          relatedTarget: relatedElem\\n        });\\n      };\\n      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\\n    }\\n  }, {\\n    key: \\\"_deactivate\\\",\\n    value: function _deactivate(element, relatedElem) {\\n      var _this53 = this;\\n      if (!element) {\\n        return;\\n      }\\n      element.classList.remove(CLASS_NAME_ACTIVE);\\n      element.blur();\\n      this._deactivate(getElementFromSelector(element)); // Search and deactivate the shown section too\\n\\n      var complete = function complete() {\\n        if (element.getAttribute('role') !== 'tab') {\\n          element.classList.remove(CLASS_NAME_SHOW$1);\\n          return;\\n        }\\n        element.setAttribute('aria-selected', false);\\n        element.setAttribute('tabindex', '-1');\\n        _this53._toggleDropDown(element, false);\\n        EventHandler.trigger(element, EVENT_HIDDEN$1, {\\n          relatedTarget: relatedElem\\n        });\\n      };\\n      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\\n    }\\n  }, {\\n    key: \\\"_keydown\\\",\\n    value: function _keydown(event) {\\n      if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {\\n        return;\\n      }\\n      event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\\n\\n      event.preventDefault();\\n      var isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\\n      var nextActiveElement = getNextActiveElement(this._getChildren().filter(function (element) {\\n        return !isDisabled(element);\\n      }), event.target, isNext, true);\\n      if (nextActiveElement) {\\n        nextActiveElement.focus({\\n          preventScroll: true\\n        });\\n        Tab.getOrCreateInstance(nextActiveElement).show();\\n      }\\n    }\\n  }, {\\n    key: \\\"_getChildren\\\",\\n    value: function _getChildren() {\\n      // collection of inner elements\\n      return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\\n    }\\n  }, {\\n    key: \\\"_getActiveElem\\\",\\n    value: function _getActiveElem() {\\n      var _this54 = this;\\n      return this._getChildren().find(function (child) {\\n        return _this54._elemIsActive(child);\\n      }) || null;\\n    }\\n  }, {\\n    key: \\\"_setInitialAttributes\\\",\\n    value: function _setInitialAttributes(parent, children) {\\n      this._setAttributeIfNotExists(parent, 'role', 'tablist');\\n      var _iterator30 = _createForOfIteratorHelper(children),\\n        _step30;\\n      try {\\n        for (_iterator30.s(); !(_step30 = _iterator30.n()).done;) {\\n          var child = _step30.value;\\n          this._setInitialAttributesOnChild(child);\\n        }\\n      } catch (err) {\\n        _iterator30.e(err);\\n      } finally {\\n        _iterator30.f();\\n      }\\n    }\\n  }, {\\n    key: \\\"_setInitialAttributesOnChild\\\",\\n    value: function _setInitialAttributesOnChild(child) {\\n      child = this._getInnerElement(child);\\n      var isActive = this._elemIsActive(child);\\n      var outerElem = this._getOuterElement(child);\\n      child.setAttribute('aria-selected', isActive);\\n      if (outerElem !== child) {\\n        this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\\n      }\\n      if (!isActive) {\\n        child.setAttribute('tabindex', '-1');\\n      }\\n      this._setAttributeIfNotExists(child, 'role', 'tab'); // set attributes to the related panel too\\n\\n      this._setInitialAttributesOnTargetPanel(child);\\n    }\\n  }, {\\n    key: \\\"_setInitialAttributesOnTargetPanel\\\",\\n    value: function _setInitialAttributesOnTargetPanel(child) {\\n      var target = getElementFromSelector(child);\\n      if (!target) {\\n        return;\\n      }\\n      this._setAttributeIfNotExists(target, 'role', 'tabpanel');\\n      if (child.id) {\\n        this._setAttributeIfNotExists(target, 'aria-labelledby', \\\"#\\\".concat(child.id));\\n      }\\n    }\\n  }, {\\n    key: \\\"_toggleDropDown\\\",\\n    value: function _toggleDropDown(element, open) {\\n      var outerElem = this._getOuterElement(element);\\n      if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\\n        return;\\n      }\\n      var toggle = function toggle(selector, className) {\\n        var element = SelectorEngine.findOne(selector, outerElem);\\n        if (element) {\\n          element.classList.toggle(className, open);\\n        }\\n      };\\n      toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\\n      toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\\n      outerElem.setAttribute('aria-expanded', open);\\n    }\\n  }, {\\n    key: \\\"_setAttributeIfNotExists\\\",\\n    value: function _setAttributeIfNotExists(element, attribute, value) {\\n      if (!element.hasAttribute(attribute)) {\\n        element.setAttribute(attribute, value);\\n      }\\n    }\\n  }, {\\n    key: \\\"_elemIsActive\\\",\\n    value: function _elemIsActive(elem) {\\n      return elem.classList.contains(CLASS_NAME_ACTIVE);\\n    } // Try to get the inner element (usually the .nav-link)\\n  }, {\\n    key: \\\"_getInnerElement\\\",\\n    value: function _getInnerElement(elem) {\\n      return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\\n    } // Try to get the outer element (usually the .nav-item)\\n  }, {\\n    key: \\\"_getOuterElement\\\",\\n    value: function _getOuterElement(elem) {\\n      return elem.closest(SELECTOR_OUTER) || elem;\\n    } // Static\\n  }], [{\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME$1;\\n    }\\n  }, {\\n    key: \\\"jQueryInterface\\\",\\n    value: function jQueryInterface(config) {\\n      return this.each(function () {\\n        var data = Tab.getOrCreateInstance(this);\\n        if (typeof config !== 'string') {\\n          return;\\n        }\\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\\n          throw new TypeError(\\\"No method named \\\\\\\"\\\".concat(config, \\\"\\\\\\\"\\\"));\\n        }\\n        data[config]();\\n      });\\n    }\\n  }]);\\n  return Tab;\\n}(BaseComponent);\\n/**\\n * Data API implementation\\n */\\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\\n  if (['A', 'AREA'].includes(this.tagName)) {\\n    event.preventDefault();\\n  }\\n  if (isDisabled(this)) {\\n    return;\\n  }\\n  Tab.getOrCreateInstance(this).show();\\n});\\n/**\\n * Initialize on focus\\n */\\n\\nEventHandler.on(window, EVENT_LOAD_DATA_API, function () {\\n  var _iterator31 = _createForOfIteratorHelper(SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)),\\n    _step31;\\n  try {\\n    for (_iterator31.s(); !(_step31 = _iterator31.n()).done;) {\\n      var element = _step31.value;\\n      Tab.getOrCreateInstance(element);\\n    }\\n  } catch (err) {\\n    _iterator31.e(err);\\n  } finally {\\n    _iterator31.f();\\n  }\\n});\\n/**\\n * jQuery\\n */\\n\\ndefineJQueryPlugin(Tab);\\n\\n/**\\n * --------------------------------------------------------------------------\\n * Bootstrap (v5.2.3): toast.js\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\\n * --------------------------------------------------------------------------\\n */\\n/**\\n * Constants\\n */\\n\\nvar NAME = 'toast';\\nvar DATA_KEY = 'bs.toast';\\nvar EVENT_KEY = \\\".\\\".concat(DATA_KEY);\\nvar EVENT_MOUSEOVER = \\\"mouseover\\\".concat(EVENT_KEY);\\nvar EVENT_MOUSEOUT = \\\"mouseout\\\".concat(EVENT_KEY);\\nvar EVENT_FOCUSIN = \\\"focusin\\\".concat(EVENT_KEY);\\nvar EVENT_FOCUSOUT = \\\"focusout\\\".concat(EVENT_KEY);\\nvar EVENT_HIDE = \\\"hide\\\".concat(EVENT_KEY);\\nvar EVENT_HIDDEN = \\\"hidden\\\".concat(EVENT_KEY);\\nvar EVENT_SHOW = \\\"show\\\".concat(EVENT_KEY);\\nvar EVENT_SHOWN = \\\"shown\\\".concat(EVENT_KEY);\\nvar CLASS_NAME_FADE = 'fade';\\nvar CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\\n\\nvar CLASS_NAME_SHOW = 'show';\\nvar CLASS_NAME_SHOWING = 'showing';\\nvar DefaultType = {\\n  animation: 'boolean',\\n  autohide: 'boolean',\\n  delay: 'number'\\n};\\nvar Default = {\\n  animation: true,\\n  autohide: true,\\n  delay: 5000\\n};\\n/**\\n * Class definition\\n */\\nvar Toast = /*#__PURE__*/function (_BaseComponent11) {\\n  _inherits(Toast, _BaseComponent11);\\n  var _super17 = _createSuper(Toast);\\n  function Toast(element, config) {\\n    var _this55;\\n    _classCallCheck(this, Toast);\\n    _this55 = _super17.call(this, element, config);\\n    _this55._timeout = null;\\n    _this55._hasMouseInteraction = false;\\n    _this55._hasKeyboardInteraction = false;\\n    _this55._setListeners();\\n    return _this55;\\n  } // Getters\\n  _createClass(Toast, [{\\n    key: \\\"show\\\",\\n    value:\\n    // Public\\n\\n    function show() {\\n      var _this56 = this;\\n      var showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\\n      if (showEvent.defaultPrevented) {\\n        return;\\n      }\\n      this._clearTimeout();\\n      if (this._config.animation) {\\n        this._element.classList.add(CLASS_NAME_FADE);\\n      }\\n      var complete = function complete() {\\n        _this56._element.classList.remove(CLASS_NAME_SHOWING);\\n        EventHandler.trigger(_this56._element, EVENT_SHOWN);\\n        _this56._maybeScheduleHide();\\n      };\\n      this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\\n\\n      reflow(this._element);\\n      this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\\n      this._queueCallback(complete, this._element, this._config.animation);\\n    }\\n  }, {\\n    key: \\\"hide\\\",\\n    value: function hide() {\\n      var _this57 = this;\\n      if (!this.isShown()) {\\n        return;\\n      }\\n      var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\\n      if (hideEvent.defaultPrevented) {\\n        return;\\n      }\\n      var complete = function complete() {\\n        _this57._element.classList.add(CLASS_NAME_HIDE); // @deprecated\\n\\n        _this57._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\\n        EventHandler.trigger(_this57._element, EVENT_HIDDEN);\\n      };\\n      this._element.classList.add(CLASS_NAME_SHOWING);\\n      this._queueCallback(complete, this._element, this._config.animation);\\n    }\\n  }, {\\n    key: \\\"dispose\\\",\\n    value: function dispose() {\\n      this._clearTimeout();\\n      if (this.isShown()) {\\n        this._element.classList.remove(CLASS_NAME_SHOW);\\n      }\\n      _get(_getPrototypeOf(Toast.prototype), \\\"dispose\\\", this).call(this);\\n    }\\n  }, {\\n    key: \\\"isShown\\\",\\n    value: function isShown() {\\n      return this._element.classList.contains(CLASS_NAME_SHOW);\\n    } // Private\\n  }, {\\n    key: \\\"_maybeScheduleHide\\\",\\n    value: function _maybeScheduleHide() {\\n      var _this58 = this;\\n      if (!this._config.autohide) {\\n        return;\\n      }\\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\\n        return;\\n      }\\n      this._timeout = setTimeout(function () {\\n        _this58.hide();\\n      }, this._config.delay);\\n    }\\n  }, {\\n    key: \\\"_onInteraction\\\",\\n    value: function _onInteraction(event, isInteracting) {\\n      switch (event.type) {\\n        case 'mouseover':\\n        case 'mouseout':\\n          {\\n            this._hasMouseInteraction = isInteracting;\\n            break;\\n          }\\n        case 'focusin':\\n        case 'focusout':\\n          {\\n            this._hasKeyboardInteraction = isInteracting;\\n            break;\\n          }\\n      }\\n      if (isInteracting) {\\n        this._clearTimeout();\\n        return;\\n      }\\n      var nextElement = event.relatedTarget;\\n      if (this._element === nextElement || this._element.contains(nextElement)) {\\n        return;\\n      }\\n      this._maybeScheduleHide();\\n    }\\n  }, {\\n    key: \\\"_setListeners\\\",\\n    value: function _setListeners() {\\n      var _this59 = this;\\n      EventHandler.on(this._element, EVENT_MOUSEOVER, function (event) {\\n        return _this59._onInteraction(event, true);\\n      });\\n      EventHandler.on(this._element, EVENT_MOUSEOUT, function (event) {\\n        return _this59._onInteraction(event, false);\\n      });\\n      EventHandler.on(this._element, EVENT_FOCUSIN, function (event) {\\n        return _this59._onInteraction(event, true);\\n      });\\n      EventHandler.on(this._element, EVENT_FOCUSOUT, function (event) {\\n        return _this59._onInteraction(event, false);\\n      });\\n    }\\n  }, {\\n    key: \\\"_clearTimeout\\\",\\n    value: function _clearTimeout() {\\n      clearTimeout(this._timeout);\\n      this._timeout = null;\\n    } // Static\\n  }], [{\\n    key: \\\"Default\\\",\\n    get: function get() {\\n      return Default;\\n    }\\n  }, {\\n    key: \\\"DefaultType\\\",\\n    get: function get() {\\n      return DefaultType;\\n    }\\n  }, {\\n    key: \\\"NAME\\\",\\n    get: function get() {\\n      return NAME;\\n    }\\n  }, {\\n    key: \\\"jQueryInterface\\\",\\n    value: function jQueryInterface(config) {\\n      return this.each(function () {\\n        var data = Toast.getOrCreateInstance(this, config);\\n        if (typeof config === 'string') {\\n          if (typeof data[config] === 'undefined') {\\n            throw new TypeError(\\\"No method named \\\\\\\"\\\".concat(config, \\\"\\\\\\\"\\\"));\\n          }\\n          data[config](this);\\n        }\\n      });\\n    }\\n  }]);\\n  return Toast;\\n}(BaseComponent);\\n/**\\n * Data API implementation\\n */\\nenableDismissTrigger(Toast);\\n/**\\n * jQuery\\n */\\n\\ndefineJQueryPlugin(Toast);\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/bootstrap/dist/js/bootstrap.esm.js?\");\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module can't be inlined because the eval devtool is used.\n/******/ \tvar __webpack_exports__ = __webpack_require__(\"./js/bootstrap.js\");\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"
  },
  {
    "path": "public/assets/vendor/js/helpers.js",
    "content": "/*\n * ATTENTION: The \"eval\" devtool has been used (maybe by default in mode: \"development\").\n * This devtool is neither made for production nor for readable output files.\n * It uses \"eval()\" calls to create a separate source file in the browser devtools.\n * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)\n * or disable the default devtool with \"devtool: false\".\n * If you are looking for production-ready output files, see mode: \"production\" (https://webpack.js.org/configuration/mode/).\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./js/helpers.js\":\n/*!***********************!*\\\n  !*** ./js/helpers.js ***!\n  \\***********************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   Helpers: function() { return /* binding */ Helpers; }\\n/* harmony export */ });\\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }\\nfunction _iterableToArray(iter) { if (typeof Symbol !== \\\"undefined\\\" && iter[Symbol.iterator] != null || iter[\\\"@@iterator\\\"] != null) return Array.from(iter); }\\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\\nfunction _nonIterableRest() { throw new TypeError(\\\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\\\"); }\\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \\\"string\\\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \\\"Object\\\" && o.constructor) n = o.constructor.name; if (n === \\\"Map\\\" || n === \\\"Set\\\") return Array.from(o); if (n === \\\"Arguments\\\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \\\"undefined\\\" != typeof Symbol && r[Symbol.iterator] || r[\\\"@@iterator\\\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\\n// Constants\\nvar TRANS_EVENTS = ['transitionend', 'webkitTransitionEnd', 'oTransitionEnd'];\\nvar TRANS_PROPERTIES = ['transition', 'MozTransition', 'webkitTransition', 'WebkitTransition', 'OTransition'];\\nvar INLINE_STYLES = \\\"\\\\n.layout-menu-fixed .layout-navbar-full .layout-menu,\\\\n.layout-page {\\\\n  padding-top: {navbarHeight}px !important;\\\\n}\\\\n.content-wrapper {\\\\n  padding-bottom: {footerHeight}px !important;\\\\n}\\\";\\n\\n// Guard\\nfunction requiredParam(name) {\\n  throw new Error(\\\"Parameter required\\\".concat(name ? \\\": `\\\".concat(name, \\\"`\\\") : ''));\\n}\\nvar Helpers = {\\n  // Root Element\\n  ROOT_EL: typeof window !== 'undefined' ? document.documentElement : null,\\n  // Large screens breakpoint\\n  LAYOUT_BREAKPOINT: 1200,\\n  // Resize delay in milliseconds\\n  RESIZE_DELAY: 200,\\n  menuPsScroll: null,\\n  mainMenu: null,\\n  // Internal variables\\n  _curStyle: null,\\n  _styleEl: null,\\n  _resizeTimeout: null,\\n  _resizeCallback: null,\\n  _transitionCallback: null,\\n  _transitionCallbackTimeout: null,\\n  _listeners: [],\\n  _initialized: false,\\n  _autoUpdate: false,\\n  _lastWindowHeight: 0,\\n  // *******************************************************************************\\n  // * Utilities\\n  // ---\\n  // Scroll To Active Menu Item\\n  _scrollToActive: function _scrollToActive() {\\n    var animate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\\n    var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\\n    var layoutMenu = this.getLayoutMenu();\\n    if (!layoutMenu) return;\\n    var activeEl = layoutMenu.querySelector('li.menu-item.active:not(.open)');\\n    if (activeEl) {\\n      // t = current time\\n      // b = start value\\n      // c = change in value\\n      // d = duration\\n      var easeInOutQuad = function easeInOutQuad(t, b, c, d) {\\n        t /= d / 2;\\n        if (t < 1) return c / 2 * t * t + b;\\n        t -= 1;\\n        return -c / 2 * (t * (t - 2) - 1) + b;\\n      };\\n      var element = this.getLayoutMenu().querySelector('.menu-inner');\\n      if (typeof activeEl === 'string') {\\n        activeEl = document.querySelector(activeEl);\\n      }\\n      if (typeof activeEl !== 'number') {\\n        activeEl = activeEl.getBoundingClientRect().top + element.scrollTop;\\n      }\\n\\n      // If active element's top position is less than 2/3 (66%) of menu height than do not scroll\\n      if (activeEl < parseInt(element.clientHeight * 2 / 3, 10)) return;\\n      var start = element.scrollTop;\\n      var change = activeEl - start - parseInt(element.clientHeight / 2, 10);\\n      var startDate = +new Date();\\n      if (animate === true) {\\n        var animateScroll = function animateScroll() {\\n          var currentDate = +new Date();\\n          var currentTime = currentDate - startDate;\\n          var val = easeInOutQuad(currentTime, start, change, duration);\\n          element.scrollTop = val;\\n          if (currentTime < duration) {\\n            requestAnimationFrame(animateScroll);\\n          } else {\\n            element.scrollTop = change;\\n          }\\n        };\\n        animateScroll();\\n      } else {\\n        element.scrollTop = change;\\n      }\\n    }\\n  },\\n  // ---\\n  // Add classes\\n  _addClass: function _addClass(cls) {\\n    var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ROOT_EL;\\n    if (el.length !== undefined) {\\n      // Add classes to multiple elements\\n      el.forEach(function (e) {\\n        cls.split(' ').forEach(function (c) {\\n          return e.classList.add(c);\\n        });\\n      });\\n    } else {\\n      // Add classes to single element\\n      cls.split(' ').forEach(function (c) {\\n        return el.classList.add(c);\\n      });\\n    }\\n  },\\n  // ---\\n  // Remove classes\\n  _removeClass: function _removeClass(cls) {\\n    var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ROOT_EL;\\n    if (el.length !== undefined) {\\n      // Remove classes to multiple elements\\n      el.forEach(function (e) {\\n        cls.split(' ').forEach(function (c) {\\n          return e.classList.remove(c);\\n        });\\n      });\\n    } else {\\n      // Remove classes to single element\\n      cls.split(' ').forEach(function (c) {\\n        return el.classList.remove(c);\\n      });\\n    }\\n  },\\n  // Toggle classes\\n  _toggleClass: function _toggleClass() {\\n    var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.ROOT_EL;\\n    var cls1 = arguments.length > 1 ? arguments[1] : undefined;\\n    var cls2 = arguments.length > 2 ? arguments[2] : undefined;\\n    if (el.classList.contains(cls1)) {\\n      el.classList.replace(cls1, cls2);\\n    } else {\\n      el.classList.replace(cls2, cls1);\\n    }\\n  },\\n  // ---\\n  // Has class\\n  _hasClass: function _hasClass(cls) {\\n    var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ROOT_EL;\\n    var result = false;\\n    cls.split(' ').forEach(function (c) {\\n      if (el.classList.contains(c)) result = true;\\n    });\\n    return result;\\n  },\\n  _findParent: function _findParent(el, cls) {\\n    if (el && el.tagName.toUpperCase() === 'BODY' || el.tagName.toUpperCase() === 'HTML') return null;\\n    el = el.parentNode;\\n    while (el && el.tagName.toUpperCase() !== 'BODY' && !el.classList.contains(cls)) {\\n      el = el.parentNode;\\n    }\\n    el = el && el.tagName.toUpperCase() !== 'BODY' ? el : null;\\n    return el;\\n  },\\n  // ---\\n  // Trigger window event\\n  _triggerWindowEvent: function _triggerWindowEvent(name) {\\n    if (typeof window === 'undefined') return;\\n    if (document.createEvent) {\\n      var event;\\n      if (typeof Event === 'function') {\\n        event = new Event(name);\\n      } else {\\n        event = document.createEvent('Event');\\n        event.initEvent(name, false, true);\\n      }\\n      window.dispatchEvent(event);\\n    } else {\\n      window.fireEvent(\\\"on\\\".concat(name), document.createEventObject());\\n    }\\n  },\\n  // ---\\n  // Trigger event\\n  _triggerEvent: function _triggerEvent(name) {\\n    this._triggerWindowEvent(\\\"layout\\\".concat(name));\\n    this._listeners.filter(function (listener) {\\n      return listener.event === name;\\n    }).forEach(function (listener) {\\n      return listener.callback.call(null);\\n    });\\n  },\\n  // ---\\n  // Update style\\n  _updateInlineStyle: function _updateInlineStyle() {\\n    var navbarHeight = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\\n    var footerHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\\n    if (!this._styleEl) {\\n      this._styleEl = document.createElement('style');\\n      this._styleEl.type = 'text/css';\\n      document.head.appendChild(this._styleEl);\\n    }\\n    var newStyle = INLINE_STYLES.replace(/\\\\{navbarHeight\\\\}/gi, navbarHeight).replace(/\\\\{footerHeight\\\\}/gi, footerHeight);\\n    if (this._curStyle !== newStyle) {\\n      this._curStyle = newStyle;\\n      this._styleEl.textContent = newStyle;\\n    }\\n  },\\n  // ---\\n  // Remove style\\n  _removeInlineStyle: function _removeInlineStyle() {\\n    if (this._styleEl) document.head.removeChild(this._styleEl);\\n    this._styleEl = null;\\n    this._curStyle = null;\\n  },\\n  // ---\\n  // Redraw layout menu (Safari bugfix)\\n  _redrawLayoutMenu: function _redrawLayoutMenu() {\\n    var layoutMenu = this.getLayoutMenu();\\n    if (layoutMenu && layoutMenu.querySelector('.menu')) {\\n      var inner = layoutMenu.querySelector('.menu-inner');\\n      var scrollTop = inner.scrollTop;\\n      var pageScrollTop = document.documentElement.scrollTop;\\n      layoutMenu.style.display = 'none';\\n      // layoutMenu.offsetHeight\\n      layoutMenu.style.display = '';\\n      inner.scrollTop = scrollTop;\\n      document.documentElement.scrollTop = pageScrollTop;\\n      return true;\\n    }\\n    return false;\\n  },\\n  // ---\\n  // Check for transition support\\n  _supportsTransitionEnd: function _supportsTransitionEnd() {\\n    if (window.QUnit) return false;\\n    var el = document.body || document.documentElement;\\n    if (!el) return false;\\n    var result = false;\\n    TRANS_PROPERTIES.forEach(function (evnt) {\\n      if (typeof el.style[evnt] !== 'undefined') result = true;\\n    });\\n    return result;\\n  },\\n  // ---\\n  // Calculate current navbar height\\n  _getNavbarHeight: function _getNavbarHeight() {\\n    var _this = this;\\n    var layoutNavbar = this.getLayoutNavbar();\\n    if (!layoutNavbar) return 0;\\n    if (!this.isSmallScreen()) return layoutNavbar.getBoundingClientRect().height;\\n\\n    // Needs some logic to get navbar height on small screens\\n\\n    var clonedEl = layoutNavbar.cloneNode(true);\\n    clonedEl.id = null;\\n    clonedEl.style.visibility = 'hidden';\\n    clonedEl.style.position = 'absolute';\\n    Array.prototype.slice.call(clonedEl.querySelectorAll('.collapse.show')).forEach(function (el) {\\n      return _this._removeClass('show', el);\\n    });\\n    layoutNavbar.parentNode.insertBefore(clonedEl, layoutNavbar);\\n    var navbarHeight = clonedEl.getBoundingClientRect().height;\\n    clonedEl.parentNode.removeChild(clonedEl);\\n    return navbarHeight;\\n  },\\n  // ---\\n  // Get current footer height\\n  _getFooterHeight: function _getFooterHeight() {\\n    var layoutFooter = this.getLayoutFooter();\\n    if (!layoutFooter) return 0;\\n    return layoutFooter.getBoundingClientRect().height;\\n  },\\n  // ---\\n  // Get animation duration of element\\n  _getAnimationDuration: function _getAnimationDuration(el) {\\n    var duration = window.getComputedStyle(el).transitionDuration;\\n    return parseFloat(duration) * (duration.indexOf('ms') !== -1 ? 1 : 1000);\\n  },\\n  // ---\\n  // Set menu hover state\\n  _setMenuHoverState: function _setMenuHoverState(hovered) {\\n    this[hovered ? '_addClass' : '_removeClass']('layout-menu-hover');\\n  },\\n  // ---\\n  // Toggle collapsed\\n  _setCollapsed: function _setCollapsed(collapsed) {\\n    var _this2 = this;\\n    if (this.isSmallScreen()) {\\n      if (collapsed) {\\n        this._removeClass('layout-menu-expanded');\\n      } else {\\n        setTimeout(function () {\\n          _this2._addClass('layout-menu-expanded');\\n        }, this._redrawLayoutMenu() ? 5 : 0);\\n      }\\n    }\\n  },\\n  // ---\\n  // Add layout sivenav toggle animationEnd event\\n  _bindLayoutAnimationEndEvent: function _bindLayoutAnimationEndEvent(modifier, cb) {\\n    var _this3 = this;\\n    var menu = this.getMenu();\\n    var duration = menu ? this._getAnimationDuration(menu) + 50 : 0;\\n    if (!duration) {\\n      modifier.call(this);\\n      cb.call(this);\\n      return;\\n    }\\n    this._transitionCallback = function (e) {\\n      if (e.target !== menu) return;\\n      _this3._unbindLayoutAnimationEndEvent();\\n      cb.call(_this3);\\n    };\\n    TRANS_EVENTS.forEach(function (e) {\\n      menu.addEventListener(e, _this3._transitionCallback, false);\\n    });\\n    modifier.call(this);\\n    this._transitionCallbackTimeout = setTimeout(function () {\\n      _this3._transitionCallback.call(_this3, {\\n        target: menu\\n      });\\n    }, duration);\\n  },\\n  // ---\\n  // Remove layout sivenav toggle animationEnd event\\n  _unbindLayoutAnimationEndEvent: function _unbindLayoutAnimationEndEvent() {\\n    var _this4 = this;\\n    var menu = this.getMenu();\\n    if (this._transitionCallbackTimeout) {\\n      clearTimeout(this._transitionCallbackTimeout);\\n      this._transitionCallbackTimeout = null;\\n    }\\n    if (menu && this._transitionCallback) {\\n      TRANS_EVENTS.forEach(function (e) {\\n        menu.removeEventListener(e, _this4._transitionCallback, false);\\n      });\\n    }\\n    if (this._transitionCallback) {\\n      this._transitionCallback = null;\\n    }\\n  },\\n  // ---\\n  // Bind delayed window resize event\\n  _bindWindowResizeEvent: function _bindWindowResizeEvent() {\\n    var _this5 = this;\\n    this._unbindWindowResizeEvent();\\n    var cb = function cb() {\\n      if (_this5._resizeTimeout) {\\n        clearTimeout(_this5._resizeTimeout);\\n        _this5._resizeTimeout = null;\\n      }\\n      _this5._triggerEvent('resize');\\n    };\\n    this._resizeCallback = function () {\\n      if (_this5._resizeTimeout) clearTimeout(_this5._resizeTimeout);\\n      _this5._resizeTimeout = setTimeout(cb, _this5.RESIZE_DELAY);\\n    };\\n    window.addEventListener('resize', this._resizeCallback, false);\\n  },\\n  // ---\\n  // Unbind delayed window resize event\\n  _unbindWindowResizeEvent: function _unbindWindowResizeEvent() {\\n    if (this._resizeTimeout) {\\n      clearTimeout(this._resizeTimeout);\\n      this._resizeTimeout = null;\\n    }\\n    if (this._resizeCallback) {\\n      window.removeEventListener('resize', this._resizeCallback, false);\\n      this._resizeCallback = null;\\n    }\\n  },\\n  _bindMenuMouseEvents: function _bindMenuMouseEvents() {\\n    var _this6 = this;\\n    if (this._menuMouseEnter && this._menuMouseLeave && this._windowTouchStart) return;\\n    var layoutMenu = this.getLayoutMenu();\\n    if (!layoutMenu) return this._unbindMenuMouseEvents();\\n    if (!this._menuMouseEnter) {\\n      this._menuMouseEnter = function () {\\n        if (_this6.isSmallScreen() || _this6._hasClass('layout-transitioning')) {\\n          return _this6._setMenuHoverState(false);\\n        }\\n        return _this6._setMenuHoverState(false);\\n      };\\n      layoutMenu.addEventListener('mouseenter', this._menuMouseEnter, false);\\n      layoutMenu.addEventListener('touchstart', this._menuMouseEnter, false);\\n    }\\n    if (!this._menuMouseLeave) {\\n      this._menuMouseLeave = function () {\\n        _this6._setMenuHoverState(false);\\n      };\\n      layoutMenu.addEventListener('mouseleave', this._menuMouseLeave, false);\\n    }\\n    if (!this._windowTouchStart) {\\n      this._windowTouchStart = function (e) {\\n        if (!e || !e.target || !_this6._findParent(e.target, '.layout-menu')) {\\n          _this6._setMenuHoverState(false);\\n        }\\n      };\\n      window.addEventListener('touchstart', this._windowTouchStart, true);\\n    }\\n  },\\n  _unbindMenuMouseEvents: function _unbindMenuMouseEvents() {\\n    if (!this._menuMouseEnter && !this._menuMouseLeave && !this._windowTouchStart) return;\\n    var layoutMenu = this.getLayoutMenu();\\n    if (this._menuMouseEnter) {\\n      if (layoutMenu) {\\n        layoutMenu.removeEventListener('mouseenter', this._menuMouseEnter, false);\\n        layoutMenu.removeEventListener('touchstart', this._menuMouseEnter, false);\\n      }\\n      this._menuMouseEnter = null;\\n    }\\n    if (this._menuMouseLeave) {\\n      if (layoutMenu) {\\n        layoutMenu.removeEventListener('mouseleave', this._menuMouseLeave, false);\\n      }\\n      this._menuMouseLeave = null;\\n    }\\n    if (this._windowTouchStart) {\\n      if (layoutMenu) {\\n        window.addEventListener('touchstart', this._windowTouchStart, true);\\n      }\\n      this._windowTouchStart = null;\\n    }\\n    this._setMenuHoverState(false);\\n  },\\n  // *******************************************************************************\\n  // * Methods\\n  scrollToActive: function scrollToActive() {\\n    var animate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\\n    this._scrollToActive(animate);\\n  },\\n  // ---\\n  // Collapse / expand layout\\n  setCollapsed: function setCollapsed() {\\n    var _this7 = this;\\n    var collapsed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('collapsed');\\n    var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\\n    var layoutMenu = this.getLayoutMenu();\\n    if (!layoutMenu) return;\\n    this._unbindLayoutAnimationEndEvent();\\n    if (animate && this._supportsTransitionEnd()) {\\n      this._addClass('layout-transitioning');\\n      if (collapsed) this._setMenuHoverState(false);\\n      this._bindLayoutAnimationEndEvent(function () {\\n        // Collapse / Expand\\n        if (_this7.isSmallScreen) _this7._setCollapsed(collapsed);\\n      }, function () {\\n        _this7._removeClass('layout-transitioning');\\n        _this7._triggerWindowEvent('resize');\\n        _this7._triggerEvent('toggle');\\n        _this7._setMenuHoverState(false);\\n      });\\n    } else {\\n      this._addClass('layout-no-transition');\\n      if (collapsed) this._setMenuHoverState(false);\\n\\n      // Collapse / Expand\\n      this._setCollapsed(collapsed);\\n      setTimeout(function () {\\n        _this7._removeClass('layout-no-transition');\\n        _this7._triggerWindowEvent('resize');\\n        _this7._triggerEvent('toggle');\\n        _this7._setMenuHoverState(false);\\n      }, 1);\\n    }\\n  },\\n  // ---\\n  // Toggle layout\\n  toggleCollapsed: function toggleCollapsed() {\\n    var animate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\\n    this.setCollapsed(!this.isCollapsed(), animate);\\n  },\\n  // ---\\n  // Set layout positioning\\n  setPosition: function setPosition() {\\n    var fixed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('fixed');\\n    var offcanvas = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : requiredParam('offcanvas');\\n    this._removeClass('layout-menu-offcanvas layout-menu-fixed layout-menu-fixed-offcanvas');\\n    if (!fixed && offcanvas) {\\n      this._addClass('layout-menu-offcanvas');\\n    } else if (fixed && !offcanvas) {\\n      this._addClass('layout-menu-fixed');\\n      this._redrawLayoutMenu();\\n    } else if (fixed && offcanvas) {\\n      this._addClass('layout-menu-fixed-offcanvas');\\n      this._redrawLayoutMenu();\\n    }\\n    this.update();\\n  },\\n  // *******************************************************************************\\n  // * Getters\\n  getLayoutMenu: function getLayoutMenu() {\\n    return document.querySelector('.layout-menu');\\n  },\\n  getMenu: function getMenu() {\\n    var layoutMenu = this.getLayoutMenu();\\n    if (!layoutMenu) return null;\\n    return !this._hasClass('menu', layoutMenu) ? layoutMenu.querySelector('.menu') : layoutMenu;\\n  },\\n  getLayoutNavbar: function getLayoutNavbar() {\\n    return document.querySelector('.layout-navbar');\\n  },\\n  getLayoutFooter: function getLayoutFooter() {\\n    return document.querySelector('.content-footer');\\n  },\\n  // *******************************************************************************\\n  // * Update\\n  update: function update() {\\n    if (this.getLayoutNavbar() && (!this.isSmallScreen() && this.isLayoutNavbarFull() && this.isFixed() || this.isNavbarFixed()) || this.getLayoutFooter() && this.isFooterFixed()) {\\n      this._updateInlineStyle(this._getNavbarHeight(), this._getFooterHeight());\\n    }\\n    this._bindMenuMouseEvents();\\n  },\\n  setAutoUpdate: function setAutoUpdate() {\\n    var _this8 = this;\\n    var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('enable');\\n    if (enable && !this._autoUpdate) {\\n      this.on('resize.Helpers:autoUpdate', function () {\\n        return _this8.update();\\n      });\\n      this._autoUpdate = true;\\n    } else if (!enable && this._autoUpdate) {\\n      this.off('resize.Helpers:autoUpdate');\\n      this._autoUpdate = false;\\n    }\\n  },\\n  // *******************************************************************************\\n  // * Tests\\n  isRtl: function isRtl() {\\n    return document.querySelector('body').getAttribute('dir') === 'rtl' || document.querySelector('html').getAttribute('dir') === 'rtl';\\n  },\\n  isMobileDevice: function isMobileDevice() {\\n    return typeof window.orientation !== 'undefined' || navigator.userAgent.indexOf('IEMobile') !== -1;\\n  },\\n  isSmallScreen: function isSmallScreen() {\\n    return (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) < this.LAYOUT_BREAKPOINT;\\n  },\\n  isLayoutNavbarFull: function isLayoutNavbarFull() {\\n    return !!document.querySelector('.layout-wrapper.layout-navbar-full');\\n  },\\n  isCollapsed: function isCollapsed() {\\n    if (this.isSmallScreen()) {\\n      return !this._hasClass('layout-menu-expanded');\\n    }\\n    return this._hasClass('layout-menu-collapsed');\\n  },\\n  isFixed: function isFixed() {\\n    return this._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas');\\n  },\\n  isNavbarFixed: function isNavbarFixed() {\\n    return this._hasClass('layout-navbar-fixed') || !this.isSmallScreen() && this.isFixed() && this.isLayoutNavbarFull();\\n  },\\n  isFooterFixed: function isFooterFixed() {\\n    return this._hasClass('layout-footer-fixed');\\n  },\\n  isLightStyle: function isLightStyle() {\\n    return document.documentElement.classList.contains('light-style');\\n  },\\n  // *******************************************************************************\\n  // * Events\\n  on: function on() {\\n    var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('event');\\n    var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : requiredParam('callback');\\n    var _event$split = event.split('.'),\\n      _event$split2 = _slicedToArray(_event$split, 1),\\n      _event = _event$split2[0];\\n    var _event$split3 = event.split('.'),\\n      _event$split4 = _toArray(_event$split3),\\n      namespace = _event$split4.slice(1);\\n    // let [_event, ...namespace] = event.split('.')\\n    namespace = namespace.join('.') || null;\\n    this._listeners.push({\\n      event: _event,\\n      namespace: namespace,\\n      callback: callback\\n    });\\n  },\\n  off: function off() {\\n    var _this9 = this;\\n    var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : requiredParam('event');\\n    var _event$split5 = event.split('.'),\\n      _event$split6 = _slicedToArray(_event$split5, 1),\\n      _event = _event$split6[0];\\n    var _event$split7 = event.split('.'),\\n      _event$split8 = _toArray(_event$split7),\\n      namespace = _event$split8.slice(1);\\n    namespace = namespace.join('.') || null;\\n    this._listeners.filter(function (listener) {\\n      return listener.event === _event && listener.namespace === namespace;\\n    }).forEach(function (listener) {\\n      return _this9._listeners.splice(_this9._listeners.indexOf(listener), 1);\\n    });\\n  },\\n  // *******************************************************************************\\n  // * Life cycle\\n  init: function init() {\\n    var _this10 = this;\\n    if (this._initialized) return;\\n    this._initialized = true;\\n\\n    // Initialize `style` element\\n    this._updateInlineStyle(0);\\n\\n    // Bind window resize event\\n    this._bindWindowResizeEvent();\\n\\n    // Bind init event\\n    this.off('init._Helpers');\\n    this.on('init._Helpers', function () {\\n      _this10.off('resize._Helpers:redrawMenu');\\n      _this10.on('resize._Helpers:redrawMenu', function () {\\n        // eslint-disable-next-line no-unused-expressions\\n        _this10.isSmallScreen() && !_this10.isCollapsed() && _this10._redrawLayoutMenu();\\n      });\\n\\n      // Force repaint in IE 10\\n      if (typeof document.documentMode === 'number' && document.documentMode < 11) {\\n        _this10.off('resize._Helpers:ie10RepaintBody');\\n        _this10.on('resize._Helpers:ie10RepaintBody', function () {\\n          if (_this10.isFixed()) return;\\n          var scrollTop = document.documentElement.scrollTop;\\n          document.body.style.display = 'none';\\n          // document.body.offsetHeight\\n          document.body.style.display = 'block';\\n          document.documentElement.scrollTop = scrollTop;\\n        });\\n      }\\n    });\\n    this._triggerEvent('init');\\n  },\\n  destroy: function destroy() {\\n    var _this11 = this;\\n    if (!this._initialized) return;\\n    this._initialized = false;\\n    this._removeClass('layout-transitioning');\\n    this._removeInlineStyle();\\n    this._unbindLayoutAnimationEndEvent();\\n    this._unbindWindowResizeEvent();\\n    this._unbindMenuMouseEvents();\\n    this.setAutoUpdate(false);\\n    this.off('init._Helpers');\\n\\n    // Remove all listeners except `init`\\n    this._listeners.filter(function (listener) {\\n      return listener.event !== 'init';\\n    }).forEach(function (listener) {\\n      return _this11._listeners.splice(_this11._listeners.indexOf(listener), 1);\\n    });\\n  },\\n  // ---\\n  // Init Password Toggle\\n  initPasswordToggle: function initPasswordToggle() {\\n    var toggler = document.querySelectorAll('.form-password-toggle i');\\n    if (typeof toggler !== 'undefined' && toggler !== null) {\\n      toggler.forEach(function (el) {\\n        el.addEventListener('click', function (e) {\\n          e.preventDefault();\\n          var formPasswordToggle = el.closest('.form-password-toggle');\\n          var formPasswordToggleIcon = formPasswordToggle.querySelector('i');\\n          var formPasswordToggleInput = formPasswordToggle.querySelector('input');\\n          if (formPasswordToggleInput.getAttribute('type') === 'text') {\\n            formPasswordToggleInput.setAttribute('type', 'password');\\n            formPasswordToggleIcon.classList.replace('bx-show', 'bx-hide');\\n          } else if (formPasswordToggleInput.getAttribute('type') === 'password') {\\n            formPasswordToggleInput.setAttribute('type', 'text');\\n            formPasswordToggleIcon.classList.replace('bx-hide', 'bx-show');\\n          }\\n        });\\n      });\\n    }\\n  },\\n  // ---\\n  // Init Speech To Text\\n  initSpeechToText: function initSpeechToText() {\\n    var SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\\n    var speechToText = document.querySelectorAll('.speech-to-text');\\n    if (SpeechRecognition !== undefined && SpeechRecognition !== null) {\\n      if (typeof speechToText !== 'undefined' && speechToText !== null) {\\n        var recognition = new SpeechRecognition();\\n        var toggler = document.querySelectorAll('.speech-to-text i');\\n        toggler.forEach(function (el) {\\n          var listening = false;\\n          el.addEventListener('click', function () {\\n            el.closest('.input-group').querySelector('.form-control').focus();\\n            recognition.onspeechstart = function () {\\n              listening = true;\\n            };\\n            if (listening === false) {\\n              recognition.start();\\n            }\\n            recognition.onerror = function () {\\n              listening = false;\\n            };\\n            recognition.onresult = function (event) {\\n              el.closest('.input-group').querySelector('.form-control').value = event.results[0][0].transcript;\\n            };\\n            recognition.onspeechend = function () {\\n              listening = false;\\n              recognition.stop();\\n            };\\n          });\\n        });\\n      }\\n    }\\n  },\\n  // Ajax Call Promise\\n  ajaxCall: function ajaxCall(url) {\\n    return new Promise(function (resolve, reject) {\\n      var req = new XMLHttpRequest();\\n      req.open('GET', url);\\n      req.onload = function () {\\n        return req.status === 200 ? resolve(req.response) : reject(Error(req.statusText));\\n      };\\n      req.onerror = function (e) {\\n        return reject(Error(\\\"Network Error: \\\".concat(e)));\\n      };\\n      req.send();\\n    });\\n  },\\n  // ---\\n  // SidebarToggle (Used in Apps)\\n  initSidebarToggle: function initSidebarToggle() {\\n    var sidebarToggler = document.querySelectorAll('[data-bs-toggle=\\\"sidebar\\\"]');\\n    sidebarToggler.forEach(function (el) {\\n      el.addEventListener('click', function () {\\n        var target = el.getAttribute('data-target');\\n        var overlay = el.getAttribute('data-overlay');\\n        var appOverlay = document.querySelectorAll('.app-overlay');\\n        var targetEl = document.querySelectorAll(target);\\n        targetEl.forEach(function (tel) {\\n          tel.classList.toggle('show');\\n          if (typeof overlay !== 'undefined' && overlay !== null && overlay !== false && typeof appOverlay !== 'undefined') {\\n            if (tel.classList.contains('show')) {\\n              appOverlay[0].classList.add('show');\\n            } else {\\n              appOverlay[0].classList.remove('show');\\n            }\\n            appOverlay[0].addEventListener('click', function (e) {\\n              e.currentTarget.classList.remove('show');\\n              tel.classList.remove('show');\\n            });\\n          }\\n        });\\n      });\\n    });\\n  }\\n};\\n\\n// *******************************************************************************\\n// * Initialization\\n\\nif (typeof window !== 'undefined') {\\n  Helpers.init();\\n  if (Helpers.isMobileDevice() && window.chrome) {\\n    document.documentElement.classList.add('layout-menu-100vh');\\n  }\\n\\n  // Update layout after page load\\n  if (document.readyState === 'complete') Helpers.update();else document.addEventListener('DOMContentLoaded', function onContentLoaded() {\\n    Helpers.update();\\n    document.removeEventListener('DOMContentLoaded', onContentLoaded);\\n  });\\n}\\n\\n// ---\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./js/helpers.js?\");\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The require scope\n/******/ \tvar __webpack_require__ = {};\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module can't be inlined because the eval devtool is used.\n/******/ \tvar __webpack_exports__ = {};\n/******/ \t__webpack_modules__[\"./js/helpers.js\"](0, __webpack_exports__, __webpack_require__);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"
  },
  {
    "path": "public/assets/vendor/js/menu.js",
    "content": "/*\n * ATTENTION: The \"eval\" devtool has been used (maybe by default in mode: \"development\").\n * This devtool is neither made for production nor for readable output files.\n * It uses \"eval()\" calls to create a separate source file in the browser devtools.\n * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)\n * or disable the default devtool with \"devtool: false\".\n * If you are looking for production-ready output files, see mode: \"production\" (https://webpack.js.org/configuration/mode/).\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./js/menu.js\":\n/*!********************!*\\\n  !*** ./js/menu.js ***!\n  \\********************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   Menu: function() { return /* binding */ Menu; }\\n/* harmony export */ });\\nfunction _typeof(o) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \\\"function\\\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \\\"symbol\\\" : typeof o; }, _typeof(o); }\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\\"value\\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \\\"prototype\\\", { writable: false }); return Constructor; }\\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \\\"string\\\"); return _typeof(key) === \\\"symbol\\\" ? key : String(key); }\\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \\\"object\\\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \\\"default\\\"); if (_typeof(res) !== \\\"object\\\") return res; throw new TypeError(\\\"@@toPrimitive must return a primitive value.\\\"); } return (hint === \\\"string\\\" ? String : Number)(input); }\\nvar TRANSITION_EVENTS = ['transitionend', 'webkitTransitionEnd', 'oTransitionEnd'];\\n// const TRANSITION_PROPERTIES = ['transition', 'MozTransition', 'webkitTransition', 'WebkitTransition', 'OTransition']\\nvar Menu = /*#__PURE__*/function () {\\n  function Menu(el) {\\n    var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n    var _PS = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\\n    _classCallCheck(this, Menu);\\n    this._el = el;\\n    this._animate = config.animate !== false;\\n    this._accordion = config.accordion !== false;\\n    this._closeChildren = Boolean(config.closeChildren);\\n    this._onOpen = config.onOpen || function () {};\\n    this._onOpened = config.onOpened || function () {};\\n    this._onClose = config.onClose || function () {};\\n    this._onClosed = config.onClosed || function () {};\\n    this._psScroll = null;\\n    this._topParent = null;\\n    this._menuBgClass = null;\\n    el.classList.add('menu');\\n    el.classList[this._animate ? 'remove' : 'add']('menu-no-animation'); // check\\n\\n    el.classList.add('menu-vertical');\\n    var PerfectScrollbarLib = _PS || window.PerfectScrollbar;\\n    if (PerfectScrollbarLib) {\\n      this._scrollbar = new PerfectScrollbarLib(el.querySelector('.menu-inner'), {\\n        suppressScrollX: true,\\n        wheelPropagation: !Menu._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas')\\n      });\\n      window.Helpers.menuPsScroll = this._scrollbar;\\n    } else {\\n      el.querySelector('.menu-inner').classList.add('overflow-auto');\\n    }\\n\\n    // Add data attribute for bg color class of menu\\n    var menuClassList = el.classList;\\n    for (var i = 0; i < menuClassList.length; i++) {\\n      if (menuClassList[i].startsWith('bg-')) {\\n        this._menuBgClass = menuClassList[i];\\n      }\\n    }\\n    el.setAttribute('data-bg-class', this._menuBgClass);\\n    this._bindEvents();\\n\\n    // Link menu instance to element\\n    el.menuInstance = this;\\n  }\\n  _createClass(Menu, [{\\n    key: \\\"_bindEvents\\\",\\n    value: function _bindEvents() {\\n      var _this = this;\\n      // Click Event\\n      this._evntElClick = function (e) {\\n        // Find top parent element\\n        if (e.target.closest('ul') && e.target.closest('ul').classList.contains('menu-inner')) {\\n          var menuItem = Menu._findParent(e.target, 'menu-item', false);\\n\\n          // eslint-disable-next-line prefer-destructuring\\n          if (menuItem) _this._topParent = menuItem.childNodes[0];\\n        }\\n        var toggleLink = e.target.classList.contains('menu-toggle') ? e.target : Menu._findParent(e.target, 'menu-toggle', false);\\n        if (toggleLink) {\\n          e.preventDefault();\\n          if (toggleLink.getAttribute('data-hover') !== 'true') {\\n            _this.toggle(toggleLink);\\n          }\\n        }\\n      };\\n      if (window.Helpers.isMobileDevice) this._el.addEventListener('click', this._evntElClick);\\n      this._evntWindowResize = function () {\\n        _this.update();\\n        if (_this._lastWidth !== window.innerWidth) {\\n          _this._lastWidth = window.innerWidth;\\n          _this.update();\\n        }\\n        var horizontalMenuTemplate = document.querySelector(\\\"[data-template^='horizontal-menu']\\\");\\n        if (!_this._horizontal && !horizontalMenuTemplate) _this.manageScroll();\\n      };\\n      window.addEventListener('resize', this._evntWindowResize);\\n    }\\n  }, {\\n    key: \\\"_unbindEvents\\\",\\n    value: function _unbindEvents() {\\n      if (this._evntElClick) {\\n        this._el.removeEventListener('click', this._evntElClick);\\n        this._evntElClick = null;\\n      }\\n      if (this._evntElMouseOver) {\\n        this._el.removeEventListener('mouseover', this._evntElMouseOver);\\n        this._evntElMouseOver = null;\\n      }\\n      if (this._evntElMouseOut) {\\n        this._el.removeEventListener('mouseout', this._evntElMouseOut);\\n        this._evntElMouseOut = null;\\n      }\\n      if (this._evntWindowResize) {\\n        window.removeEventListener('resize', this._evntWindowResize);\\n        this._evntWindowResize = null;\\n      }\\n      if (this._evntBodyClick) {\\n        document.body.removeEventListener('click', this._evntBodyClick);\\n        this._evntBodyClick = null;\\n      }\\n      if (this._evntInnerMousemove) {\\n        this._inner.removeEventListener('mousemove', this._evntInnerMousemove);\\n        this._evntInnerMousemove = null;\\n      }\\n      if (this._evntInnerMouseleave) {\\n        this._inner.removeEventListener('mouseleave', this._evntInnerMouseleave);\\n        this._evntInnerMouseleave = null;\\n      }\\n    }\\n  }, {\\n    key: \\\"open\\\",\\n    value: function open(el) {\\n      var _this2 = this;\\n      var closeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._closeChildren;\\n      var item = this._findUnopenedParent(Menu._getItem(el, true), closeChildren);\\n      if (!item) return;\\n      var toggleLink = Menu._getLink(item, true);\\n      Menu._promisify(this._onOpen, this, item, toggleLink, Menu._findMenu(item)).then(function () {\\n        if (!_this2._horizontal || !Menu._isRoot(item)) {\\n          if (_this2._animate && !_this2._horizontal) {\\n            window.requestAnimationFrame(function () {\\n              return _this2._toggleAnimation(true, item, false);\\n            });\\n            if (_this2._accordion) _this2._closeOther(item, closeChildren);\\n          } else if (_this2._animate) {\\n            // eslint-disable-next-line no-unused-expressions\\n            _this2._onOpened && _this2._onOpened(_this2, item, toggleLink, Menu._findMenu(item));\\n          } else {\\n            item.classList.add('open');\\n            // eslint-disable-next-line no-unused-expressions\\n            _this2._onOpened && _this2._onOpened(_this2, item, toggleLink, Menu._findMenu(item));\\n            if (_this2._accordion) _this2._closeOther(item, closeChildren);\\n          }\\n        } else {\\n          // eslint-disable-next-line no-unused-expressions\\n          _this2._onOpened && _this2._onOpened(_this2, item, toggleLink, Menu._findMenu(item));\\n        }\\n      }).catch(function () {});\\n    }\\n  }, {\\n    key: \\\"close\\\",\\n    value: function close(el) {\\n      var _this3 = this;\\n      var closeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._closeChildren;\\n      var _autoClose = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\\n      var item = Menu._getItem(el, true);\\n      var toggleLink = Menu._getLink(el, true);\\n      if (!item.classList.contains('open') || item.classList.contains('disabled')) return;\\n      Menu._promisify(this._onClose, this, item, toggleLink, Menu._findMenu(item), _autoClose).then(function () {\\n        if (!_this3._horizontal || !Menu._isRoot(item)) {\\n          if (_this3._animate && !_this3._horizontal) {\\n            window.requestAnimationFrame(function () {\\n              return _this3._toggleAnimation(false, item, closeChildren);\\n            });\\n          } else {\\n            item.classList.remove('open');\\n            if (closeChildren) {\\n              var opened = item.querySelectorAll('.menu-item.open');\\n              for (var i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open');\\n            }\\n\\n            // eslint-disable-next-line no-unused-expressions\\n            _this3._onClosed && _this3._onClosed(_this3, item, toggleLink, Menu._findMenu(item));\\n          }\\n        } else {\\n          // eslint-disable-next-line no-unused-expressions\\n          _this3._onClosed && _this3._onClosed(_this3, item, toggleLink, Menu._findMenu(item));\\n        }\\n      }).catch(function () {});\\n    }\\n  }, {\\n    key: \\\"_closeOther\\\",\\n    value: function _closeOther(item, closeChildren) {\\n      var opened = Menu._findChild(item.parentNode, ['menu-item', 'open']);\\n      for (var i = 0, l = opened.length; i < l; i++) {\\n        if (opened[i] !== item) this.close(opened[i], closeChildren);\\n      }\\n    }\\n  }, {\\n    key: \\\"toggle\\\",\\n    value: function toggle(el) {\\n      var closeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._closeChildren;\\n      var item = Menu._getItem(el, true);\\n      // const toggleLink = Menu._getLink(el, true)\\n\\n      if (item.classList.contains('open')) this.close(item, closeChildren);else this.open(item, closeChildren);\\n    }\\n  }, {\\n    key: \\\"_findUnopenedParent\\\",\\n    value: function _findUnopenedParent(item, closeChildren) {\\n      var tree = [];\\n      var parentItem = null;\\n      while (item) {\\n        if (item.classList.contains('disabled')) {\\n          parentItem = null;\\n          tree = [];\\n        } else {\\n          if (!item.classList.contains('open')) parentItem = item;\\n          tree.push(item);\\n        }\\n        item = Menu._findParent(item, 'menu-item', false);\\n      }\\n      if (!parentItem) return null;\\n      if (tree.length === 1) return parentItem;\\n      tree = tree.slice(0, tree.indexOf(parentItem));\\n      for (var i = 0, l = tree.length; i < l; i++) {\\n        tree[i].classList.add('open');\\n        if (this._accordion) {\\n          var openedItems = Menu._findChild(tree[i].parentNode, ['menu-item', 'open']);\\n          for (var j = 0, k = openedItems.length; j < k; j++) {\\n            if (openedItems[j] !== tree[i]) {\\n              openedItems[j].classList.remove('open');\\n              if (closeChildren) {\\n                var openedChildren = openedItems[j].querySelectorAll('.menu-item.open');\\n                for (var x = 0, z = openedChildren.length; x < z; x++) {\\n                  openedChildren[x].classList.remove('open');\\n                }\\n              }\\n            }\\n          }\\n        }\\n      }\\n      return parentItem;\\n    }\\n  }, {\\n    key: \\\"_toggleAnimation\\\",\\n    value: function _toggleAnimation(open, item, closeChildren) {\\n      var _this4 = this;\\n      var toggleLink = Menu._getLink(item, true);\\n      var menu = Menu._findMenu(item);\\n      Menu._unbindAnimationEndEvent(item);\\n      var linkHeight = Math.round(toggleLink.getBoundingClientRect().height);\\n      item.style.overflow = 'hidden';\\n      var clearItemStyle = function clearItemStyle() {\\n        item.classList.remove('menu-item-animating');\\n        item.classList.remove('menu-item-closing');\\n        item.style.overflow = null;\\n        item.style.height = null;\\n        _this4.update();\\n      };\\n      if (open) {\\n        item.style.height = \\\"\\\".concat(linkHeight, \\\"px\\\");\\n        item.classList.add('menu-item-animating');\\n        item.classList.add('open');\\n        Menu._bindAnimationEndEvent(item, function () {\\n          clearItemStyle();\\n          _this4._onOpened(_this4, item, toggleLink, menu);\\n        });\\n        setTimeout(function () {\\n          item.style.height = \\\"\\\".concat(linkHeight + Math.round(menu.getBoundingClientRect().height), \\\"px\\\");\\n        }, 50);\\n      } else {\\n        item.style.height = \\\"\\\".concat(linkHeight + Math.round(menu.getBoundingClientRect().height), \\\"px\\\");\\n        item.classList.add('menu-item-animating');\\n        item.classList.add('menu-item-closing');\\n        Menu._bindAnimationEndEvent(item, function () {\\n          item.classList.remove('open');\\n          clearItemStyle();\\n          if (closeChildren) {\\n            var opened = item.querySelectorAll('.menu-item.open');\\n            for (var i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open');\\n          }\\n          _this4._onClosed(_this4, item, toggleLink, menu);\\n        });\\n        setTimeout(function () {\\n          item.style.height = \\\"\\\".concat(linkHeight, \\\"px\\\");\\n        }, 50);\\n      }\\n    }\\n  }, {\\n    key: \\\"_getItemOffset\\\",\\n    value: function _getItemOffset(item) {\\n      var curItem = this._inner.childNodes[0];\\n      var left = 0;\\n      while (curItem !== item) {\\n        if (curItem.tagName) {\\n          left += Math.round(curItem.getBoundingClientRect().width);\\n        }\\n        curItem = curItem.nextSibling;\\n      }\\n      return left;\\n    }\\n  }, {\\n    key: \\\"_innerWidth\\\",\\n    get: function get() {\\n      var items = this._inner.childNodes;\\n      var width = 0;\\n      for (var i = 0, l = items.length; i < l; i++) {\\n        if (items[i].tagName) {\\n          width += Math.round(items[i].getBoundingClientRect().width);\\n        }\\n      }\\n      return width;\\n    }\\n  }, {\\n    key: \\\"_innerPosition\\\",\\n    get: function get() {\\n      return parseInt(this._inner.style[this._rtl ? 'marginRight' : 'marginLeft'] || '0px', 10);\\n    },\\n    set: function set(value) {\\n      this._inner.style[this._rtl ? 'marginRight' : 'marginLeft'] = \\\"\\\".concat(value, \\\"px\\\");\\n      return value;\\n    }\\n  }, {\\n    key: \\\"closeAll\\\",\\n    value: function closeAll() {\\n      var closeChildren = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._closeChildren;\\n      var opened = this._el.querySelectorAll('.menu-inner > .menu-item.open');\\n      for (var i = 0, l = opened.length; i < l; i++) this.close(opened[i], closeChildren);\\n    }\\n  }, {\\n    key: \\\"update\\\",\\n    value: function update() {\\n      if (this._scrollbar) {\\n        this._scrollbar.update();\\n      }\\n    }\\n  }, {\\n    key: \\\"manageScroll\\\",\\n    value: function manageScroll() {\\n      var _window = window,\\n        PerfectScrollbar = _window.PerfectScrollbar;\\n      var menuInner = document.querySelector('.menu-inner');\\n      if (window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) {\\n        if (this._scrollbar !== null) {\\n          // window.Helpers.menuPsScroll.destroy()\\n          this._scrollbar.destroy();\\n          this._scrollbar = null;\\n        }\\n        menuInner.classList.add('overflow-auto');\\n      } else {\\n        if (this._scrollbar === null) {\\n          var menuScroll = new PerfectScrollbar(document.querySelector('.menu-inner'), {\\n            suppressScrollX: true,\\n            wheelPropagation: false\\n          });\\n          this._scrollbar = menuScroll;\\n        }\\n        menuInner.classList.remove('overflow-auto');\\n      }\\n    }\\n  }, {\\n    key: \\\"destroy\\\",\\n    value: function destroy() {\\n      if (!this._el) return;\\n      this._unbindEvents();\\n      var items = this._el.querySelectorAll('.menu-item');\\n      for (var i = 0, l = items.length; i < l; i++) {\\n        Menu._unbindAnimationEndEvent(items[i]);\\n        items[i].classList.remove('menu-item-animating');\\n        items[i].classList.remove('open');\\n        items[i].style.overflow = null;\\n        items[i].style.height = null;\\n      }\\n      var menus = this._el.querySelectorAll('.menu-menu');\\n      for (var i2 = 0, l2 = menus.length; i2 < l2; i2++) {\\n        menus[i2].style.marginRight = null;\\n        menus[i2].style.marginLeft = null;\\n      }\\n      this._el.classList.remove('menu-no-animation');\\n      if (this._wrapper) {\\n        this._prevBtn.parentNode.removeChild(this._prevBtn);\\n        this._nextBtn.parentNode.removeChild(this._nextBtn);\\n        this._wrapper.parentNode.insertBefore(this._inner, this._wrapper);\\n        this._wrapper.parentNode.removeChild(this._wrapper);\\n        this._inner.style.marginLeft = null;\\n        this._inner.style.marginRight = null;\\n      }\\n      this._el.menuInstance = null;\\n      delete this._el.menuInstance;\\n      this._el = null;\\n      this._animate = null;\\n      this._accordion = null;\\n      this._closeChildren = null;\\n      this._onOpen = null;\\n      this._onOpened = null;\\n      this._onClose = null;\\n      this._onClosed = null;\\n      if (this._scrollbar) {\\n        this._scrollbar.destroy();\\n        this._scrollbar = null;\\n      }\\n      this._inner = null;\\n      this._prevBtn = null;\\n      this._wrapper = null;\\n      this._nextBtn = null;\\n    }\\n  }], [{\\n    key: \\\"childOf\\\",\\n    value: function childOf( /* child node */c, /* parent node */p) {\\n      // returns boolean\\n      if (c.parentNode) {\\n        while ((c = c.parentNode) && c !== p);\\n        return !!c;\\n      }\\n      return false;\\n    }\\n  }, {\\n    key: \\\"_isRoot\\\",\\n    value: function _isRoot(item) {\\n      return !Menu._findParent(item, 'menu-item', false);\\n    }\\n  }, {\\n    key: \\\"_findParent\\\",\\n    value: function _findParent(el, cls) {\\n      var throwError = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\\n      if (el.tagName.toUpperCase() === 'BODY') return null;\\n      el = el.parentNode;\\n      while (el.tagName.toUpperCase() !== 'BODY' && !el.classList.contains(cls)) {\\n        el = el.parentNode;\\n      }\\n      el = el.tagName.toUpperCase() !== 'BODY' ? el : null;\\n      if (!el && throwError) throw new Error(\\\"Cannot find `.\\\".concat(cls, \\\"` parent element\\\"));\\n      return el;\\n    }\\n  }, {\\n    key: \\\"_findChild\\\",\\n    value: function _findChild(el, cls) {\\n      var items = el.childNodes;\\n      var found = [];\\n      for (var i = 0, l = items.length; i < l; i++) {\\n        if (items[i].classList) {\\n          var passed = 0;\\n          for (var j = 0; j < cls.length; j++) {\\n            if (items[i].classList.contains(cls[j])) passed += 1;\\n          }\\n          if (cls.length === passed) found.push(items[i]);\\n        }\\n      }\\n      return found;\\n    }\\n  }, {\\n    key: \\\"_findMenu\\\",\\n    value: function _findMenu(item) {\\n      var curEl = item.childNodes[0];\\n      var menu = null;\\n      while (curEl && !menu) {\\n        if (curEl.classList && curEl.classList.contains('menu-sub')) menu = curEl;\\n        curEl = curEl.nextSibling;\\n      }\\n      if (!menu) throw new Error('Cannot find `.menu-sub` element for the current `.menu-toggle`');\\n      return menu;\\n    }\\n\\n    // Has class\\n  }, {\\n    key: \\\"_hasClass\\\",\\n    value: function _hasClass(cls) {\\n      var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.Helpers.ROOT_EL;\\n      var result = false;\\n      cls.split(' ').forEach(function (c) {\\n        if (el.classList.contains(c)) result = true;\\n      });\\n      return result;\\n    }\\n  }, {\\n    key: \\\"_getItem\\\",\\n    value: function _getItem(el, toggle) {\\n      var item = null;\\n      var selector = toggle ? 'menu-toggle' : 'menu-link';\\n      if (el.classList.contains('menu-item')) {\\n        if (Menu._findChild(el, [selector]).length) item = el;\\n      } else if (el.classList.contains(selector)) {\\n        item = el.parentNode.classList.contains('menu-item') ? el.parentNode : null;\\n      }\\n      if (!item) {\\n        throw new Error(\\\"\\\".concat(toggle ? 'Toggable ' : '', \\\"`.menu-item` element not found.\\\"));\\n      }\\n      return item;\\n    }\\n  }, {\\n    key: \\\"_getLink\\\",\\n    value: function _getLink(el, toggle) {\\n      var found = [];\\n      var selector = toggle ? 'menu-toggle' : 'menu-link';\\n      if (el.classList.contains(selector)) found = [el];else if (el.classList.contains('menu-item')) found = Menu._findChild(el, [selector]);\\n      if (!found.length) throw new Error(\\\"`\\\".concat(selector, \\\"` element not found.\\\"));\\n      return found[0];\\n    }\\n  }, {\\n    key: \\\"_bindAnimationEndEvent\\\",\\n    value: function _bindAnimationEndEvent(el, handler) {\\n      var cb = function cb(e) {\\n        if (e.target !== el) return;\\n        Menu._unbindAnimationEndEvent(el);\\n        handler(e);\\n      };\\n      var duration = window.getComputedStyle(el).transitionDuration;\\n      duration = parseFloat(duration) * (duration.indexOf('ms') !== -1 ? 1 : 1000);\\n      el._menuAnimationEndEventCb = cb;\\n      TRANSITION_EVENTS.forEach(function (ev) {\\n        return el.addEventListener(ev, el._menuAnimationEndEventCb, false);\\n      });\\n      el._menuAnimationEndEventTimeout = setTimeout(function () {\\n        cb({\\n          target: el\\n        });\\n      }, duration + 50);\\n    }\\n  }, {\\n    key: \\\"_promisify\\\",\\n    value: function _promisify(fn) {\\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n        args[_key - 1] = arguments[_key];\\n      }\\n      var result = fn.apply(void 0, args);\\n      if (result instanceof Promise) {\\n        return result;\\n      }\\n      if (result === false) {\\n        return Promise.reject();\\n      }\\n      return Promise.resolve();\\n    }\\n  }, {\\n    key: \\\"_unbindAnimationEndEvent\\\",\\n    value: function _unbindAnimationEndEvent(el) {\\n      var cb = el._menuAnimationEndEventCb;\\n      if (el._menuAnimationEndEventTimeout) {\\n        clearTimeout(el._menuAnimationEndEventTimeout);\\n        el._menuAnimationEndEventTimeout = null;\\n      }\\n      if (!cb) return;\\n      TRANSITION_EVENTS.forEach(function (ev) {\\n        return el.removeEventListener(ev, cb, false);\\n      });\\n      el._menuAnimationEndEventCb = null;\\n    }\\n  }, {\\n    key: \\\"setDisabled\\\",\\n    value: function setDisabled(el, disabled) {\\n      Menu._getItem(el, false).classList[disabled ? 'add' : 'remove']('disabled');\\n    }\\n  }, {\\n    key: \\\"isActive\\\",\\n    value: function isActive(el) {\\n      return Menu._getItem(el, false).classList.contains('active');\\n    }\\n  }, {\\n    key: \\\"isOpened\\\",\\n    value: function isOpened(el) {\\n      return Menu._getItem(el, false).classList.contains('open');\\n    }\\n  }, {\\n    key: \\\"isDisabled\\\",\\n    value: function isDisabled(el) {\\n      return Menu._getItem(el, false).classList.contains('disabled');\\n    }\\n  }]);\\n  return Menu;\\n}();\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./js/menu.js?\");\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The require scope\n/******/ \tvar __webpack_require__ = {};\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module can't be inlined because the eval devtool is used.\n/******/ \tvar __webpack_exports__ = {};\n/******/ \t__webpack_modules__[\"./js/menu.js\"](0, __webpack_exports__, __webpack_require__);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"
  },
  {
    "path": "public/assets/vendor/libs/apex-charts/apex-charts.css",
    "content": "/**\n* Apex Charts\n*/\n.apexcharts-canvas {\n  position: relative;\n  user-select: none;\n  /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n  -webkit-appearance: none;\n  width: 6px;\n}\n\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n  border-radius: 4px;\n  background-color: rgba(0, 0, 0, 0.5);\n  box-shadow: 0 0 1px rgba(255, 255, 255, 0.5);\n  -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5);\n}\n\n.apexcharts-inner {\n  position: relative;\n}\n\n.apexcharts-text tspan {\n  font-family: inherit;\n}\n\n.legend-mouseover-inactive {\n  transition: 0.15s ease all;\n  opacity: 0.2;\n}\n\n.apexcharts-series-collapsed {\n  opacity: 0;\n}\n\n.apexcharts-tooltip {\n  border-radius: 5px;\n  box-shadow: 2px 2px 6px -4px #999;\n  cursor: default;\n  font-size: 14px;\n  left: 62px;\n  opacity: 0;\n  pointer-events: none;\n  position: absolute;\n  top: 20px;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  white-space: nowrap;\n  z-index: 12;\n  transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip.apexcharts-active {\n  opacity: 1;\n  transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip.apexcharts-theme-light {\n  border: 1px solid #e3e3e3;\n  background: rgba(255, 255, 255, 0.96);\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark {\n  color: #fff;\n  background: rgba(30, 30, 30, 0.8);\n}\n\n.apexcharts-tooltip * {\n  font-family: inherit;\n}\n\n.apexcharts-tooltip-title {\n  padding: 6px;\n  font-size: 15px;\n  margin-bottom: 4px;\n}\n\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {\n  background: #ECEFF1;\n  border-bottom: 1px solid #ddd;\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\n  background: rgba(0, 0, 0, 0.7);\n  border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-y-value,\n.apexcharts-tooltip-text-goals-value,\n.apexcharts-tooltip-text-z-value {\n  display: inline-block;\n  font-weight: 600;\n  margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-y-label:empty,\n.apexcharts-tooltip-text-y-value:empty,\n.apexcharts-tooltip-text-goals-label:empty,\n.apexcharts-tooltip-text-goals-value:empty,\n.apexcharts-tooltip-text-z-value:empty {\n  display: none;\n}\n\n.apexcharts-tooltip-text-y-value,\n.apexcharts-tooltip-text-goals-value,\n.apexcharts-tooltip-text-z-value {\n  font-weight: 600;\n}\n\n.apexcharts-tooltip-text-goals-label,\n.apexcharts-tooltip-text-goals-value {\n  padding: 6px 0 5px;\n}\n\n.apexcharts-tooltip-goals-group,\n.apexcharts-tooltip-text-goals-label,\n.apexcharts-tooltip-text-goals-value {\n  display: flex;\n}\n\n.apexcharts-tooltip-text-goals-label:not(:empty),\n.apexcharts-tooltip-text-goals-value:not(:empty) {\n  margin-top: -6px;\n}\n\n.apexcharts-tooltip-marker {\n  width: 12px;\n  height: 12px;\n  position: relative;\n  top: 0px;\n  margin-right: 10px;\n  border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n  padding: 0 10px;\n  display: none;\n  text-align: left;\n  justify-content: left;\n  align-items: center;\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\n  opacity: 1;\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active,\n.apexcharts-tooltip-series-group:last-child {\n  padding-bottom: 4px;\n}\n\n.apexcharts-tooltip-series-group-hidden {\n  opacity: 0;\n  height: 0;\n  line-height: 0;\n  padding: 0 !important;\n}\n\n.apexcharts-tooltip-y-group {\n  padding: 6px 0 5px;\n}\n\n.apexcharts-tooltip-box, .apexcharts-custom-tooltip {\n  padding: 4px 8px;\n}\n\n.apexcharts-tooltip-boxPlot {\n  display: flex;\n  flex-direction: column-reverse;\n}\n\n.apexcharts-tooltip-box > div {\n  margin: 4px 0;\n}\n\n.apexcharts-tooltip-box span.value {\n  font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n  padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n  font-weight: 600;\n  color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n  font-weight: bold;\n  display: block;\n  margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n  opacity: 0;\n  padding: 9px 10px;\n  pointer-events: none;\n  color: #373d3f;\n  font-size: 13px;\n  text-align: center;\n  border-radius: 2px;\n  position: absolute;\n  z-index: 10;\n  background: #ECEFF1;\n  border: 1px solid #90A4AE;\n  transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.apexcharts-theme-dark {\n  background: rgba(0, 0, 0, 0.7);\n  border: 1px solid rgba(0, 0, 0, 0.5);\n  color: #fff;\n}\n\n.apexcharts-xaxistooltip:after,\n.apexcharts-xaxistooltip:before {\n  left: 50%;\n  border: solid transparent;\n  content: \" \";\n  height: 0;\n  width: 0;\n  position: absolute;\n  pointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n  border-color: rgba(236, 239, 241, 0);\n  border-width: 6px;\n  margin-left: -6px;\n}\n\n.apexcharts-xaxistooltip:before {\n  border-color: rgba(144, 164, 174, 0);\n  border-width: 7px;\n  margin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after,\n.apexcharts-xaxistooltip-bottom:before {\n  bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after,\n.apexcharts-xaxistooltip-top:before {\n  top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n  border-bottom-color: #ECEFF1;\n}\n\n.apexcharts-xaxistooltip-bottom:before {\n  border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after {\n  border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {\n  border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n  border-top-color: #ECEFF1;\n}\n\n.apexcharts-xaxistooltip-top:before {\n  border-top-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after {\n  border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {\n  border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip.apexcharts-active {\n  opacity: 1;\n  transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n  opacity: 0;\n  padding: 4px 10px;\n  pointer-events: none;\n  color: #373d3f;\n  font-size: 13px;\n  text-align: center;\n  border-radius: 2px;\n  position: absolute;\n  z-index: 10;\n  background: #ECEFF1;\n  border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\n  background: rgba(0, 0, 0, 0.7);\n  border: 1px solid rgba(0, 0, 0, 0.5);\n  color: #fff;\n}\n\n.apexcharts-yaxistooltip:after,\n.apexcharts-yaxistooltip:before {\n  top: 50%;\n  border: solid transparent;\n  content: \" \";\n  height: 0;\n  width: 0;\n  position: absolute;\n  pointer-events: none;\n}\n\n.apexcharts-yaxistooltip:after {\n  border-color: rgba(236, 239, 241, 0);\n  border-width: 6px;\n  margin-top: -6px;\n}\n\n.apexcharts-yaxistooltip:before {\n  border-color: rgba(144, 164, 174, 0);\n  border-width: 7px;\n  margin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after,\n.apexcharts-yaxistooltip-left:before {\n  left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after,\n.apexcharts-yaxistooltip-right:before {\n  right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n  border-left-color: #ECEFF1;\n}\n\n.apexcharts-yaxistooltip-left:before {\n  border-left-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after {\n  border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {\n  border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n  border-right-color: #ECEFF1;\n}\n\n.apexcharts-yaxistooltip-right:before {\n  border-right-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after {\n  border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {\n  border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.apexcharts-active {\n  opacity: 1;\n}\n\n.apexcharts-yaxistooltip-hidden {\n  display: none;\n}\n\n.apexcharts-xcrosshairs,\n.apexcharts-ycrosshairs {\n  pointer-events: none;\n  opacity: 0;\n  transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.apexcharts-active,\n.apexcharts-ycrosshairs.apexcharts-active {\n  opacity: 1;\n  transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n  opacity: 0;\n}\n\n.apexcharts-selection-rect {\n  cursor: move;\n}\n\n.svg_select_boundingRect, .svg_select_points_rot {\n  pointer-events: none;\n  opacity: 0;\n  visibility: hidden;\n}\n\n.apexcharts-selection-rect + g .svg_select_boundingRect,\n.apexcharts-selection-rect + g .svg_select_points_rot {\n  opacity: 0;\n  visibility: hidden;\n}\n\n.apexcharts-selection-rect + g .svg_select_points_l,\n.apexcharts-selection-rect + g .svg_select_points_r {\n  cursor: ew-resize;\n  opacity: 1;\n  visibility: visible;\n}\n\n.svg_select_points {\n  fill: #efefef;\n  stroke: #333;\n  rx: 2;\n}\n\n.apexcharts-svg.apexcharts-zoomable.hovering-zoom {\n  cursor: crosshair;\n}\n\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\n  cursor: move;\n}\n\n.apexcharts-zoom-icon,\n.apexcharts-zoomin-icon,\n.apexcharts-zoomout-icon,\n.apexcharts-reset-icon,\n.apexcharts-pan-icon,\n.apexcharts-selection-icon,\n.apexcharts-menu-icon,\n.apexcharts-toolbar-custom-icon {\n  cursor: pointer;\n  width: 20px;\n  height: 20px;\n  line-height: 24px;\n  color: #6E8192;\n  text-align: center;\n}\n\n.apexcharts-zoom-icon svg,\n.apexcharts-zoomin-icon svg,\n.apexcharts-zoomout-icon svg,\n.apexcharts-reset-icon svg,\n.apexcharts-menu-icon svg {\n  fill: #6E8192;\n}\n\n.apexcharts-selection-icon svg {\n  fill: #444;\n  transform: scale(0.76);\n}\n\n.apexcharts-theme-dark .apexcharts-zoom-icon svg,\n.apexcharts-theme-dark .apexcharts-zoomin-icon svg,\n.apexcharts-theme-dark .apexcharts-zoomout-icon svg,\n.apexcharts-theme-dark .apexcharts-reset-icon svg,\n.apexcharts-theme-dark .apexcharts-pan-icon svg,\n.apexcharts-theme-dark .apexcharts-selection-icon svg,\n.apexcharts-theme-dark .apexcharts-menu-icon svg,\n.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg {\n  fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg,\n.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg {\n  fill: #008FFB;\n}\n\n.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,\n.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,\n.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,\n.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg,\n.apexcharts-theme-light .apexcharts-reset-icon:hover svg,\n.apexcharts-theme-light .apexcharts-menu-icon:hover svg {\n  fill: #333;\n}\n\n.apexcharts-selection-icon,\n.apexcharts-menu-icon {\n  position: relative;\n}\n\n.apexcharts-reset-icon {\n  margin-left: 5px;\n}\n\n.apexcharts-zoom-icon,\n.apexcharts-reset-icon,\n.apexcharts-menu-icon {\n  transform: scale(0.85);\n}\n\n.apexcharts-zoomin-icon,\n.apexcharts-zoomout-icon {\n  transform: scale(0.7);\n}\n\n.apexcharts-zoomout-icon {\n  margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n  transform: scale(0.62);\n  position: relative;\n  left: 1px;\n  top: 0px;\n}\n\n.apexcharts-pan-icon svg {\n  fill: #fff;\n  stroke: #6E8192;\n  stroke-width: 2;\n}\n\n.apexcharts-pan-icon.apexcharts-selected svg {\n  stroke: #008FFB;\n}\n\n.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {\n  stroke: #333;\n}\n\n.apexcharts-toolbar {\n  position: absolute;\n  z-index: 11;\n  max-width: 176px;\n  text-align: right;\n  border-radius: 3px;\n  padding: 0px 6px 2px 6px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n.apexcharts-menu {\n  background: #fff;\n  position: absolute;\n  top: 100%;\n  border: 1px solid #ddd;\n  border-radius: 3px;\n  padding: 3px;\n  right: 10px;\n  opacity: 0;\n  min-width: 110px;\n  transition: 0.15s ease all;\n  pointer-events: none;\n}\n\n.apexcharts-menu.apexcharts-menu-open {\n  opacity: 1;\n  pointer-events: all;\n  transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n  padding: 6px 7px;\n  font-size: 12px;\n  cursor: pointer;\n}\n\n.apexcharts-theme-light .apexcharts-menu-item:hover {\n  background: #eee;\n}\n\n.apexcharts-theme-dark .apexcharts-menu {\n  background: rgba(0, 0, 0, 0.7);\n  color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n  .apexcharts-canvas:hover .apexcharts-toolbar {\n    opacity: 1;\n  }\n}\n.apexcharts-datalabel.apexcharts-element-hidden {\n  opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabels,\n.apexcharts-datalabel,\n.apexcharts-datalabel-label,\n.apexcharts-datalabel-value {\n  cursor: default;\n  pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n  opacity: 0;\n  animation-name: opaque;\n  animation-duration: 0.3s;\n  animation-fill-mode: forwards;\n  animation-timing-function: ease;\n}\n\n.apexcharts-canvas .apexcharts-element-hidden {\n  opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n  opacity: 0;\n}\n\n.apexcharts-gridline,\n.apexcharts-annotation-rect,\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line,\n.apexcharts-zoom-rect,\n.apexcharts-toolbar svg,\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-radar-series path,\n.apexcharts-radar-series polygon {\n  pointer-events: none;\n}\n\n/* markers */\n.apexcharts-marker {\n  transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n/* Resize generated styles */\n@keyframes resizeanim {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 0;\n  }\n}\n.resize-triggers {\n  animation: 1ms resizeanim;\n  visibility: hidden;\n  opacity: 0;\n}\n\n.resize-triggers,\n.resize-triggers > div,\n.contract-trigger:before {\n  content: \" \";\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  overflow: hidden;\n}\n\n.resize-triggers > div {\n  background: #eee;\n  overflow: auto;\n}\n\n.contract-trigger:before {\n  width: 200%;\n  height: 200%;\n}\n\n.light-style .apexcharts-canvas .apexcharts-tooltip {\n  background: #fff;\n  border-color: #d9dee3;\n  box-shadow: 0 0.25rem 1rem rgba(161, 172, 184, 0.45);\n}\n.light-style .apexcharts-canvas .apexcharts-tooltip .apexcharts-tooltip-title {\n  background: #fff;\n  border-color: #d9dee3;\n  font-family: var(--bs-font-sans-serif) !important;\n}\n.light-style .apexcharts-canvas .apexcharts-tooltip.apexcharts-theme-light {\n  color: #566a7f;\n}\n.light-style .apexcharts-canvas .apexcharts-tooltip.apexcharts-theme-dark {\n  color: #fff;\n}\n.light-style .apexcharts-canvas .apexcharts-tooltip .apexcharts-tooltip-title {\n  font-weight: 500;\n}\n.light-style .apexcharts-canvas .apexcharts-xaxistooltip,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip {\n  background: #f5f5f9;\n  border-color: #d9dee3;\n  color: #566a7f;\n}\n.light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-xaxistooltip-bottom:after, .light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-yaxistooltip-bottom:after,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-xaxistooltip-bottom:after,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-yaxistooltip-bottom:after {\n  border-bottom-color: #f5f5f9;\n}\n.light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-xaxistooltip-bottom:before, .light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-yaxistooltip-bottom:before,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-xaxistooltip-bottom:before,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-yaxistooltip-bottom:before {\n  border-bottom-color: #d9dee3;\n}\n.light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-xaxistooltip-left:after, .light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-yaxistooltip-left:after,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-xaxistooltip-left:after,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-yaxistooltip-left:after {\n  border-left-color: #f5f5f9;\n}\n.light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-xaxistooltip-left:before, .light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-yaxistooltip-left:before,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-xaxistooltip-left:before,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-yaxistooltip-left:before {\n  border-left-color: #d9dee3;\n}\n.light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-xaxistooltip-right:after, .light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-yaxistooltip-right:after,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-xaxistooltip-right:after,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-yaxistooltip-right:after {\n  border-right-color: #f5f5f9;\n}\n.light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-xaxistooltip-right:before, .light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-yaxistooltip-right:before,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-xaxistooltip-right:before,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-yaxistooltip-right:before {\n  border-right-color: #d9dee3;\n}\n.light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-xaxistooltip-top:after, .light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-yaxistooltip-top:after,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-xaxistooltip-top:after,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-yaxistooltip-top:after {\n  border-top-color: #f5f5f9;\n}\n.light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-xaxistooltip-top:before, .light-style .apexcharts-canvas .apexcharts-xaxistooltip.apexcharts-yaxistooltip-top:before,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-xaxistooltip-top:before,\n.light-style .apexcharts-canvas .apexcharts-yaxistooltip.apexcharts-yaxistooltip-top:before {\n  border-top-color: #d9dee3;\n}\n.light-style .apexcharts-canvas .apexcharts-tooltip-text {\n  font-family: var(--bs-font-sans-serif) !important;\n  filter: none;\n}\n.light-style .apexcharts-canvas .apexcharts-marker {\n  filter: drop-shadow(0 2px 4px rgba(161, 172, 184, 0.4));\n}\n\n#orderStatisticsChart .apexcharts-xcrosshairs.apexcharts-active,\n#orderStatisticsChart .apexcharts-ycrosshairs.apexcharts-active,\n#totalRevenueChart .apexcharts-xcrosshairs.apexcharts-active,\n#totalRevenueChart .apexcharts-ycrosshairs.apexcharts-active,\n#expensesBarChart .apexcharts-xcrosshairs.apexcharts-active,\n#expensesBarChart .apexcharts-ycrosshairs.apexcharts-active {\n  opacity: 0;\n}\n"
  },
  {
    "path": "public/assets/vendor/libs/apex-charts/apexcharts.js",
    "content": "/*\n * ATTENTION: The \"eval\" devtool has been used (maybe by default in mode: \"development\").\n * This devtool is neither made for production nor for readable output files.\n * It uses \"eval()\" calls to create a separate source file in the browser devtools.\n * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)\n * or disable the default devtool with \"devtool: false\".\n * If you are looking for production-ready output files, see mode: \"production\" (https://webpack.js.org/configuration/mode/).\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./node_modules/apexcharts-clevision/dist/apexcharts.common.js\":\n/*!*********************************************************************!*\\\n  !*** ./node_modules/apexcharts-clevision/dist/apexcharts.common.js ***!\n  \\*********************************************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var __WEBPACK_AMD_DEFINE_RESULT__;/*!\\n * ApexCharts v3.28.3\\n * (c) 2018-2022 ApexCharts\\n * Released under the MIT License.\\n */\\nfunction t(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function e(e){for(var i=1;i<arguments.length;i++){var a=null!=arguments[i]?arguments[i]:{};i%2?t(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):t(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(t){return(i=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\\\"function\\\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\\\"symbol\\\":typeof t})(t)}function a(t,e){if(!(t instanceof e))throw new TypeError(\\\"Cannot call a class as a function\\\")}function s(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\\\"value\\\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}function r(t,e,i){return e&&s(t.prototype,e),i&&s(t,i),t}function o(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function n(t,e){if(\\\"function\\\"!=typeof e&&null!==e)throw new TypeError(\\\"Super expression must either be null or a function\\\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&h(t,e)}function l(t){return(l=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function h(t,e){return(h=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function c(t,e){if(e&&(\\\"object\\\"==typeof e||\\\"function\\\"==typeof e))return e;if(void 0!==e)throw new TypeError(\\\"Derived constructors may only return object or undefined\\\");return function(t){if(void 0===t)throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\");return t}(t)}function d(t){var e=function(){if(\\\"undefined\\\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\\\"function\\\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,a=l(t);if(e){var s=l(this).constructor;i=Reflect.construct(a,arguments,s)}else i=a.apply(this,arguments);return c(this,i)}}function g(t){return function(t){if(Array.isArray(t))return u(t)}(t)||function(t){if(\\\"undefined\\\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\\\"@@iterator\\\"])return Array.from(t)}(t)||function(t,e){if(!t)return;if(\\\"string\\\"==typeof t)return u(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);\\\"Object\\\"===i&&t.constructor&&(i=t.constructor.name);if(\\\"Map\\\"===i||\\\"Set\\\"===i)return Array.from(t);if(\\\"Arguments\\\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return u(t,e)}(t)||function(){throw new TypeError(\\\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\\\")}()}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}var p=function(){function t(){a(this,t)}return r(t,[{key:\\\"shadeRGBColor\\\",value:function(t,e){var i=e.split(\\\",\\\"),a=t<0?0:255,s=t<0?-1*t:t,r=parseInt(i[0].slice(4),10),o=parseInt(i[1],10),n=parseInt(i[2],10);return\\\"rgb(\\\"+(Math.round((a-r)*s)+r)+\\\",\\\"+(Math.round((a-o)*s)+o)+\\\",\\\"+(Math.round((a-n)*s)+n)+\\\")\\\"}},{key:\\\"shadeHexColor\\\",value:function(t,e){var i=parseInt(e.slice(1),16),a=t<0?0:255,s=t<0?-1*t:t,r=i>>16,o=i>>8&255,n=255&i;return\\\"#\\\"+(16777216+65536*(Math.round((a-r)*s)+r)+256*(Math.round((a-o)*s)+o)+(Math.round((a-n)*s)+n)).toString(16).slice(1)}},{key:\\\"shadeColor\\\",value:function(e,i){return t.isColorHex(i)?this.shadeHexColor(e,i):this.shadeRGBColor(e,i)}}],[{key:\\\"bind\\\",value:function(t,e){return function(){return t.apply(e,arguments)}}},{key:\\\"isObject\\\",value:function(t){return t&&\\\"object\\\"===i(t)&&!Array.isArray(t)&&null!=t}},{key:\\\"listToArray\\\",value:function(t){var e,i=[];for(e=0;e<t.length;e++)i[e]=t[e];return i}},{key:\\\"extend\\\",value:function(t,e){var i=this;\\\"function\\\"!=typeof Object.assign&&(Object.assign=function(t){if(null==t)throw new TypeError(\\\"Cannot convert undefined or null to object\\\");for(var e=Object(t),i=1;i<arguments.length;i++){var a=arguments[i];if(null!=a)for(var s in a)a.hasOwnProperty(s)&&(e[s]=a[s])}return e});var a=Object.assign({},t);return this.isObject(t)&&this.isObject(e)&&Object.keys(e).forEach((function(s){i.isObject(e[s])&&s in t?a[s]=i.extend(t[s],e[s]):Object.assign(a,o({},s,e[s]))})),a}},{key:\\\"extendArray\\\",value:function(e,i){var a=[];return e.map((function(e){a.push(t.extend(i,e))})),e=a}},{key:\\\"monthMod\\\",value:function(t){return t%12}},{key:\\\"clone\\\",value:function(t){if(\\\"[object Array]\\\"===Object.prototype.toString.call(t)){for(var e=[],a=0;a<t.length;a++)e[a]=this.clone(t[a]);return e}if(\\\"[object Null]\\\"===Object.prototype.toString.call(t))return null;if(\\\"[object Date]\\\"===Object.prototype.toString.call(t))return t;if(\\\"object\\\"===i(t)){var s={};for(var r in t)t.hasOwnProperty(r)&&(s[r]=this.clone(t[r]));return s}return t}},{key:\\\"log10\\\",value:function(t){return Math.log(t)/Math.LN10}},{key:\\\"roundToBase10\\\",value:function(t){return Math.pow(10,Math.floor(Math.log10(t)))}},{key:\\\"roundToBase\\\",value:function(t,e){return Math.pow(e,Math.floor(Math.log(t)/Math.log(e)))}},{key:\\\"parseNumber\\\",value:function(t){return null===t?t:parseFloat(t)}},{key:\\\"randomId\\\",value:function(){return(Math.random()+1).toString(36).substring(4)}},{key:\\\"noExponents\\\",value:function(t){var e=String(t).split(/[eE]/);if(1===e.length)return e[0];var i=\\\"\\\",a=t<0?\\\"-\\\":\\\"\\\",s=e[0].replace(\\\".\\\",\\\"\\\"),r=Number(e[1])+1;if(r<0){for(i=a+\\\"0.\\\";r++;)i+=\\\"0\\\";return i+s.replace(/^-/,\\\"\\\")}for(r-=s.length;r--;)i+=\\\"0\\\";return s+i}},{key:\\\"getDimensions\\\",value:function(t){var e=getComputedStyle(t,null),i=t.clientHeight,a=t.clientWidth;return i-=parseFloat(e.paddingTop)+parseFloat(e.paddingBottom),[a-=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight),i]}},{key:\\\"getBoundingClientRect\\\",value:function(t){var e=t.getBoundingClientRect();return{top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:t.clientWidth,height:t.clientHeight,x:e.left,y:e.top}}},{key:\\\"getLargestStringFromArr\\\",value:function(t){return t.reduce((function(t,e){return Array.isArray(e)&&(e=e.reduce((function(t,e){return t.length>e.length?t:e}))),t.length>e.length?t:e}),0)}},{key:\\\"hexToRgba\\\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\\\"#999999\\\",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.6;\\\"#\\\"!==t.substring(0,1)&&(t=\\\"#999999\\\");var i=t.replace(\\\"#\\\",\\\"\\\");i=i.match(new RegExp(\\\"(.{\\\"+i.length/3+\\\"})\\\",\\\"g\\\"));for(var a=0;a<i.length;a++)i[a]=parseInt(1===i[a].length?i[a]+i[a]:i[a],16);return void 0!==e&&i.push(e),\\\"rgba(\\\"+i.join(\\\",\\\")+\\\")\\\"}},{key:\\\"getOpacityFromRGBA\\\",value:function(t){return parseFloat(t.replace(/^.*,(.+)\\\\)/,\\\"$1\\\"))}},{key:\\\"rgb2hex\\\",value:function(t){return(t=t.match(/^rgba?[\\\\s+]?\\\\([\\\\s+]?(\\\\d+)[\\\\s+]?,[\\\\s+]?(\\\\d+)[\\\\s+]?,[\\\\s+]?(\\\\d+)[\\\\s+]?/i))&&4===t.length?\\\"#\\\"+(\\\"0\\\"+parseInt(t[1],10).toString(16)).slice(-2)+(\\\"0\\\"+parseInt(t[2],10).toString(16)).slice(-2)+(\\\"0\\\"+parseInt(t[3],10).toString(16)).slice(-2):\\\"\\\"}},{key:\\\"isColorHex\\\",value:function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)/i.test(t)}},{key:\\\"getPolygonPos\\\",value:function(t,e){for(var i=[],a=2*Math.PI/e,s=0;s<e;s++){var r={};r.x=t*Math.sin(s*a),r.y=-t*Math.cos(s*a),i.push(r)}return i}},{key:\\\"polarToCartesian\\\",value:function(t,e,i,a){var s=(a-90)*Math.PI/180;return{x:t+i*Math.cos(s),y:e+i*Math.sin(s)}}},{key:\\\"escapeString\\\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\\\"x\\\",i=t.toString().slice();return i=i.replace(/[` ~!@#$%^&*()_|+\\\\-=?;:'\\\",.<>{}[\\\\]\\\\\\\\/]/gi,e)}},{key:\\\"negToZero\\\",value:function(t){return t<0?0:t}},{key:\\\"moveIndexInArray\\\",value:function(t,e,i){if(i>=t.length)for(var a=i-t.length+1;a--;)t.push(void 0);return t.splice(i,0,t.splice(e,1)[0]),t}},{key:\\\"extractNumber\\\",value:function(t){return parseFloat(t.replace(/[^\\\\d.]*/g,\\\"\\\"))}},{key:\\\"findAncestor\\\",value:function(t,e){for(;(t=t.parentElement)&&!t.classList.contains(e););return t}},{key:\\\"setELstyles\\\",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t.style.key=e[i])}},{key:\\\"isNumber\\\",value:function(t){return!isNaN(t)&&parseFloat(Number(t))===t&&!isNaN(parseInt(t,10))}},{key:\\\"isFloat\\\",value:function(t){return Number(t)===t&&t%1!=0}},{key:\\\"isSafari\\\",value:function(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}},{key:\\\"isFirefox\\\",value:function(){return navigator.userAgent.toLowerCase().indexOf(\\\"firefox\\\")>-1}},{key:\\\"isIE11\\\",value:function(){if(-1!==window.navigator.userAgent.indexOf(\\\"MSIE\\\")||window.navigator.appVersion.indexOf(\\\"Trident/\\\")>-1)return!0}},{key:\\\"isIE\\\",value:function(){var t=window.navigator.userAgent,e=t.indexOf(\\\"MSIE \\\");if(e>0)return parseInt(t.substring(e+5,t.indexOf(\\\".\\\",e)),10);if(t.indexOf(\\\"Trident/\\\")>0){var i=t.indexOf(\\\"rv:\\\");return parseInt(t.substring(i+3,t.indexOf(\\\".\\\",i)),10)}var a=t.indexOf(\\\"Edge/\\\");return a>0&&parseInt(t.substring(a+5,t.indexOf(\\\".\\\",a)),10)}}]),t}(),f=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.setEasingFunctions()}return r(t,[{key:\\\"setEasingFunctions\\\",value:function(){var t;if(!this.w.globals.easing){switch(this.w.config.chart.animations.easing){case\\\"linear\\\":t=\\\"-\\\";break;case\\\"easein\\\":t=\\\"<\\\";break;case\\\"easeout\\\":t=\\\">\\\";break;case\\\"easeinout\\\":t=\\\"<>\\\";break;case\\\"swing\\\":t=function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1};break;case\\\"bounce\\\":t=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375};break;case\\\"elastic\\\":t=function(t){return t===!!t?t:Math.pow(2,-10*t)*Math.sin((t-.075)*(2*Math.PI)/.3)+1};break;default:t=\\\"<>\\\"}this.w.globals.easing=t}}},{key:\\\"animateLine\\\",value:function(t,e,i,a){t.attr(e).animate(a).attr(i)}},{key:\\\"animateMarker\\\",value:function(t,e,i,a,s,r){e||(e=0),t.attr({r:e,width:e,height:e}).animate(a,s).attr({r:i,width:i.width,height:i.height}).afterAll((function(){r()}))}},{key:\\\"animateCircle\\\",value:function(t,e,i,a,s){t.attr({r:e.r,cx:e.cx,cy:e.cy}).animate(a,s).attr({r:i.r,cx:i.cx,cy:i.cy})}},{key:\\\"animateRect\\\",value:function(t,e,i,a,s){t.attr(e).animate(a).attr(i).afterAll((function(){return s()}))}},{key:\\\"animatePathsGradually\\\",value:function(t){var e=t.el,i=t.realIndex,a=t.j,s=t.fill,r=t.pathFrom,o=t.pathTo,n=t.speed,l=t.delay,h=this.w,c=0;h.config.chart.animations.animateGradually.enabled&&(c=h.config.chart.animations.animateGradually.delay),h.config.chart.animations.dynamicAnimation.enabled&&h.globals.dataChanged&&\\\"bar\\\"!==h.config.chart.type&&(c=0),this.morphSVG(e,i,a,\\\"line\\\"!==h.config.chart.type||h.globals.comboCharts?s:\\\"stroke\\\",r,o,n,l*c)}},{key:\\\"showDelayedElements\\\",value:function(){this.w.globals.delayedElements.forEach((function(t){t.el.classList.remove(\\\"apexcharts-element-hidden\\\")}))}},{key:\\\"animationCompleted\\\",value:function(t){var e=this.w;e.globals.animationEnded||(e.globals.animationEnded=!0,this.showDelayedElements(),\\\"function\\\"==typeof e.config.chart.events.animationEnd&&e.config.chart.events.animationEnd(this.ctx,{el:t,w:e}))}},{key:\\\"morphSVG\\\",value:function(t,e,i,a,s,r,o,n){var l=this,h=this.w;s||(s=t.attr(\\\"pathFrom\\\")),r||(r=t.attr(\\\"pathTo\\\"));var c=function(t){return\\\"radar\\\"===h.config.chart.type&&(o=1),\\\"M 0 \\\".concat(h.globals.gridHeight)};(!s||s.indexOf(\\\"undefined\\\")>-1||s.indexOf(\\\"NaN\\\")>-1)&&(s=c()),(!r||r.indexOf(\\\"undefined\\\")>-1||r.indexOf(\\\"NaN\\\")>-1)&&(r=c()),h.globals.shouldAnimate||(o=1),t.plot(s).animate(1,h.globals.easing,n).plot(s).animate(o,h.globals.easing,n).plot(r).afterAll((function(){p.isNumber(i)?i===h.globals.series[h.globals.maxValsInArrayIndex].length-2&&h.globals.shouldAnimate&&l.animationCompleted(t):\\\"none\\\"!==a&&h.globals.shouldAnimate&&(!h.globals.comboCharts&&e===h.globals.series.length-1||h.globals.comboCharts)&&l.animationCompleted(t),l.showDelayedElements()}))}}]),t}(),x=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"getDefaultFilter\\\",value:function(t,e){var i=this.w;t.unfilter(!0),(new window.SVG.Filter).size(\\\"120%\\\",\\\"180%\\\",\\\"-5%\\\",\\\"-40%\\\"),\\\"none\\\"!==i.config.states.normal.filter?this.applyFilter(t,e,i.config.states.normal.filter.type,i.config.states.normal.filter.value):i.config.chart.dropShadow.enabled&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:\\\"addNormalFilter\\\",value:function(t,e){var i=this.w;i.config.chart.dropShadow.enabled&&!t.node.classList.contains(\\\"apexcharts-marker\\\")&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:\\\"addLightenFilter\\\",value:function(t,e,i){var a=this,s=this.w,r=i.intensity;t.unfilter(!0);new window.SVG.Filter;t.filter((function(t){var i=s.config.chart.dropShadow;(i.enabled?a.addShadow(t,e,i):t).componentTransfer({rgb:{type:\\\"linear\\\",slope:1.5,intercept:r}})})),t.filterer.node.setAttribute(\\\"filterUnits\\\",\\\"userSpaceOnUse\\\"),this._scaleFilterSize(t.filterer.node)}},{key:\\\"addDarkenFilter\\\",value:function(t,e,i){var a=this,s=this.w,r=i.intensity;t.unfilter(!0);new window.SVG.Filter;t.filter((function(t){var i=s.config.chart.dropShadow;(i.enabled?a.addShadow(t,e,i):t).componentTransfer({rgb:{type:\\\"linear\\\",slope:r}})})),t.filterer.node.setAttribute(\\\"filterUnits\\\",\\\"userSpaceOnUse\\\"),this._scaleFilterSize(t.filterer.node)}},{key:\\\"applyFilter\\\",value:function(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.5;switch(i){case\\\"none\\\":this.addNormalFilter(t,e);break;case\\\"lighten\\\":this.addLightenFilter(t,e,{intensity:a});break;case\\\"darken\\\":this.addDarkenFilter(t,e,{intensity:a})}}},{key:\\\"addShadow\\\",value:function(t,e,i){var a=i.blur,s=i.top,r=i.left,o=i.color,n=i.opacity,l=t.flood(Array.isArray(o)?o[e]:o,n).composite(t.sourceAlpha,\\\"in\\\").offset(r,s).gaussianBlur(a).merge(t.source);return t.blend(t.source,l)}},{key:\\\"dropShadow\\\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=e.top,s=e.left,r=e.blur,o=e.color,n=e.opacity,l=e.noUserSpaceOnUse,h=this.w;return t.unfilter(!0),p.isIE()&&\\\"radialBar\\\"===h.config.chart.type||(o=Array.isArray(o)?o[i]:o,t.filter((function(t){var e=null;e=p.isSafari()||p.isFirefox()||p.isIE()?t.flood(o,n).composite(t.sourceAlpha,\\\"in\\\").offset(s,a).gaussianBlur(r):t.flood(o,n).composite(t.sourceAlpha,\\\"in\\\").offset(s,a).gaussianBlur(r).merge(t.source),t.blend(t.source,e)})),l||t.filterer.node.setAttribute(\\\"filterUnits\\\",\\\"userSpaceOnUse\\\"),this._scaleFilterSize(t.filterer.node)),t}},{key:\\\"setSelectionFilter\\\",value:function(t,e,i){var a=this.w;if(void 0!==a.globals.selectedDataPoints[e]&&a.globals.selectedDataPoints[e].indexOf(i)>-1){t.node.setAttribute(\\\"selected\\\",!0);var s=a.config.states.active.filter;\\\"none\\\"!==s&&this.applyFilter(t,e,s.type,s.value)}}},{key:\\\"_scaleFilterSize\\\",value:function(t){!function(e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}({width:\\\"200%\\\",height:\\\"200%\\\",x:\\\"-50%\\\",y:\\\"-50%\\\"})}}]),t}(),b=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"drawLine\\\",value:function(t,e,i,a){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:\\\"#a8a8a8\\\",r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,n=arguments.length>7&&void 0!==arguments[7]?arguments[7]:\\\"butt\\\",l=this.w,h=l.globals.dom.Paper.line().attr({x1:t,y1:e,x2:i,y2:a,stroke:s,\\\"stroke-dasharray\\\":r,\\\"stroke-width\\\":o,\\\"stroke-linecap\\\":n});return h}},{key:\\\"drawRect\\\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\\\"#fefefe\\\",o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,n=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,l=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,h=arguments.length>9&&void 0!==arguments[9]?arguments[9]:0,c=this.w,d=c.globals.dom.Paper.rect();return d.attr({x:t,y:e,width:i>0?i:0,height:a>0?a:0,rx:s,ry:s,opacity:o,\\\"stroke-width\\\":null!==n?n:0,stroke:null!==l?l:\\\"none\\\",\\\"stroke-dasharray\\\":h}),d.node.setAttribute(\\\"fill\\\",r),d}},{key:\\\"drawPolygon\\\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\\\"#e1e1e1\\\",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\\\"none\\\",s=this.w,r=s.globals.dom.Paper.polygon(t).attr({fill:a,stroke:e,\\\"stroke-width\\\":i});return r}},{key:\\\"drawCircle\\\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w;t<0&&(t=0);var a=i.globals.dom.Paper.circle(2*t);return null!==e&&a.attr(e),a}},{key:\\\"drawPath\\\",value:function(t){var e=t.d,i=void 0===e?\\\"\\\":e,a=t.stroke,s=void 0===a?\\\"#a8a8a8\\\":a,r=t.strokeWidth,o=void 0===r?1:r,n=t.fill,l=t.fillOpacity,h=void 0===l?1:l,c=t.strokeOpacity,d=void 0===c?1:c,g=t.classes,u=t.strokeLinecap,p=void 0===u?null:u,f=t.strokeDashArray,x=void 0===f?0:f,b=this.w;return null===p&&(p=b.config.stroke.lineCap),(i.indexOf(\\\"undefined\\\")>-1||i.indexOf(\\\"NaN\\\")>-1)&&(i=\\\"M 0 \\\".concat(b.globals.gridHeight)),b.globals.dom.Paper.path(i).attr({fill:n,\\\"fill-opacity\\\":h,stroke:s,\\\"stroke-opacity\\\":d,\\\"stroke-linecap\\\":p,\\\"stroke-width\\\":o,\\\"stroke-dasharray\\\":x,class:g})}},{key:\\\"group\\\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w,i=e.globals.dom.Paper.group();return null!==t&&i.attr(t),i}},{key:\\\"move\\\",value:function(t,e){var i=[\\\"M\\\",t,e].join(\\\" \\\");return i}},{key:\\\"line\\\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=null;return null===i?a=[\\\"L\\\",t,e].join(\\\" \\\"):\\\"H\\\"===i?a=[\\\"H\\\",t].join(\\\" \\\"):\\\"V\\\"===i&&(a=[\\\"V\\\",e].join(\\\" \\\")),a}},{key:\\\"curve\\\",value:function(t,e,i,a,s,r){var o=[\\\"C\\\",t,e,i,a,s,r].join(\\\" \\\");return o}},{key:\\\"quadraticCurve\\\",value:function(t,e,i,a){return[\\\"Q\\\",t,e,i,a].join(\\\" \\\")}},{key:\\\"arc\\\",value:function(t,e,i,a,s,r,o){var n=arguments.length>7&&void 0!==arguments[7]&&arguments[7],l=\\\"A\\\";n&&(l=\\\"a\\\");var h=[l,t,e,i,a,s,r,o].join(\\\" \\\");return h}},{key:\\\"renderPaths\\\",value:function(t){var i,a=t.j,s=t.realIndex,r=t.pathFrom,o=t.pathTo,n=t.stroke,l=t.strokeWidth,h=t.strokeLinecap,c=t.fill,d=t.animationDelay,g=t.initialSpeed,u=t.dataChangeSpeed,p=t.className,b=t.shouldClipToGrid,v=void 0===b||b,m=t.bindEventsOnPaths,y=void 0===m||m,w=t.drawShadow,k=void 0===w||w,A=this.w,S=new x(this.ctx),C=new f(this.ctx),L=this.w.config.chart.animations.enabled,P=L&&this.w.config.chart.animations.dynamicAnimation.enabled,T=!!(L&&!A.globals.resized||P&&A.globals.dataChanged&&A.globals.shouldAnimate);T?i=r:(i=o,A.globals.animationEnded=!0);var M=A.config.stroke.dashArray,I=0;I=Array.isArray(M)?M[s]:A.config.stroke.dashArray;var z=this.drawPath({d:i,stroke:n,strokeWidth:l,fill:c,fillOpacity:1,classes:p,strokeLinecap:h,strokeDashArray:I});if(z.attr(\\\"index\\\",s),v&&z.attr({\\\"clip-path\\\":\\\"url(#gridRectMask\\\".concat(A.globals.cuid,\\\")\\\")}),\\\"none\\\"!==A.config.states.normal.filter.type)S.getDefaultFilter(z,s);else if(A.config.chart.dropShadow.enabled&&k&&(!A.config.chart.dropShadow.enabledOnSeries||A.config.chart.dropShadow.enabledOnSeries&&-1!==A.config.chart.dropShadow.enabledOnSeries.indexOf(s))){var X=A.config.chart.dropShadow;S.dropShadow(z,X,s)}y&&(z.node.addEventListener(\\\"mouseenter\\\",this.pathMouseEnter.bind(this,z)),z.node.addEventListener(\\\"mouseleave\\\",this.pathMouseLeave.bind(this,z)),z.node.addEventListener(\\\"mousedown\\\",this.pathMouseDown.bind(this,z))),z.attr({pathTo:o,pathFrom:r});var E={el:z,j:a,realIndex:s,pathFrom:r,pathTo:o,fill:c,strokeWidth:l,delay:d};return!L||A.globals.resized||A.globals.dataChanged?!A.globals.resized&&A.globals.dataChanged||C.showDelayedElements():C.animatePathsGradually(e(e({},E),{},{speed:g})),A.globals.dataChanged&&P&&T&&C.animatePathsGradually(e(e({},E),{},{speed:u})),z}},{key:\\\"drawPattern\\\",value:function(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\\\"#a8a8a8\\\",s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=this.w,o=r.globals.dom.Paper.pattern(e,i,(function(r){\\\"horizontalLines\\\"===t?r.line(0,0,i,0).stroke({color:a,width:s+1}):\\\"verticalLines\\\"===t?r.line(0,0,0,e).stroke({color:a,width:s+1}):\\\"slantedLines\\\"===t?r.line(0,0,e,i).stroke({color:a,width:s}):\\\"squares\\\"===t?r.rect(e,i).fill(\\\"none\\\").stroke({color:a,width:s}):\\\"circles\\\"===t&&r.circle(e).fill(\\\"none\\\").stroke({color:a,width:s})}));return o}},{key:\\\"drawGradient\\\",value:function(t,e,i,a,s){var r,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,n=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,h=arguments.length>8&&void 0!==arguments[8]?arguments[8]:0,c=this.w;e.length<9&&0===e.indexOf(\\\"#\\\")&&(e=p.hexToRgba(e,a)),i.length<9&&0===i.indexOf(\\\"#\\\")&&(i=p.hexToRgba(i,s));var d=0,g=1,u=1,f=null;null!==n&&(d=void 0!==n[0]?n[0]/100:0,g=void 0!==n[1]?n[1]/100:1,u=void 0!==n[2]?n[2]/100:1,f=void 0!==n[3]?n[3]/100:null);var x=!(\\\"donut\\\"!==c.config.chart.type&&\\\"pie\\\"!==c.config.chart.type&&\\\"polarArea\\\"!==c.config.chart.type&&\\\"bubble\\\"!==c.config.chart.type);if(r=null===l||0===l.length?c.globals.dom.Paper.gradient(x?\\\"radial\\\":\\\"linear\\\",(function(t){t.at(d,e,a),t.at(g,i,s),t.at(u,i,s),null!==f&&t.at(f,e,a)})):c.globals.dom.Paper.gradient(x?\\\"radial\\\":\\\"linear\\\",(function(t){(Array.isArray(l[h])?l[h]:l).forEach((function(e){t.at(e.offset/100,e.color,e.opacity)}))})),x){var b=c.globals.gridWidth/2,v=c.globals.gridHeight/2;\\\"bubble\\\"!==c.config.chart.type?r.attr({gradientUnits:\\\"userSpaceOnUse\\\",cx:b,cy:v,r:o}):r.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else\\\"vertical\\\"===t?r.from(0,0).to(0,1):\\\"diagonal\\\"===t?r.from(0,0).to(1,1):\\\"horizontal\\\"===t?r.from(0,1).to(1,1):\\\"diagonal2\\\"===t&&r.from(1,0).to(0,1);return r}},{key:\\\"drawText\\\",value:function(t){var e,i=t.x,a=t.y,s=t.text,r=t.textAnchor,o=t.fontSize,n=t.fontFamily,l=t.fontWeight,h=t.foreColor,c=t.opacity,d=t.cssClass,g=void 0===d?\\\"\\\":d,u=t.isPlainText,p=void 0===u||u,f=this.w;return void 0===s&&(s=\\\"\\\"),r||(r=\\\"start\\\"),h&&h.length||(h=f.config.chart.foreColor),n=n||f.config.chart.fontFamily,l=l||\\\"regular\\\",(e=Array.isArray(s)?f.globals.dom.Paper.text((function(t){for(var e=0;e<s.length;e++)0===e?t.tspan(s[e]):t.tspan(s[e]).newLine()})):p?f.globals.dom.Paper.plain(s):f.globals.dom.Paper.text((function(t){return t.tspan(s)}))).attr({x:i,y:a,\\\"text-anchor\\\":r,\\\"dominant-baseline\\\":\\\"auto\\\",\\\"font-size\\\":o,\\\"font-family\\\":n,\\\"font-weight\\\":l,fill:h,class:\\\"apexcharts-text \\\"+g}),e.node.style.fontFamily=n,e.node.style.opacity=c,e}},{key:\\\"drawMarker\\\",value:function(t,e,i){t=t||0;var a=i.pSize||0,s=null;if(\\\"square\\\"===i.shape||\\\"rect\\\"===i.shape){var r=void 0===i.pRadius?a/2:i.pRadius;null!==e&&a||(a=0,r=0);var o=1.2*a+r,n=this.drawRect(o,o,o,o,r);n.attr({x:t-o/2,y:e-o/2,cx:t,cy:e,class:i.class?i.class:\\\"\\\",fill:i.pointFillColor,\\\"fill-opacity\\\":i.pointFillOpacity?i.pointFillOpacity:1,stroke:i.pointStrokeColor,\\\"stroke-width\\\":i.pointStrokeWidth?i.pointStrokeWidth:0,\\\"stroke-opacity\\\":i.pointStrokeOpacity?i.pointStrokeOpacity:1}),s=n}else\\\"circle\\\"!==i.shape&&i.shape||(p.isNumber(e)||(a=0,e=0),s=this.drawCircle(a,{cx:t,cy:e,class:i.class?i.class:\\\"\\\",stroke:i.pointStrokeColor,fill:i.pointFillColor,\\\"fill-opacity\\\":i.pointFillOpacity?i.pointFillOpacity:1,\\\"stroke-width\\\":i.pointStrokeWidth?i.pointStrokeWidth:0,\\\"stroke-opacity\\\":i.pointStrokeOpacity?i.pointStrokeOpacity:1}));return s}},{key:\\\"pathMouseEnter\\\",value:function(t,e){var i=this.w,a=new x(this.ctx),s=parseInt(t.node.getAttribute(\\\"index\\\"),10),r=parseInt(t.node.getAttribute(\\\"j\\\"),10);if(\\\"function\\\"==typeof i.config.chart.events.dataPointMouseEnter&&i.config.chart.events.dataPointMouseEnter(e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}),this.ctx.events.fireEvent(\\\"dataPointMouseEnter\\\",[e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}]),(\\\"none\\\"===i.config.states.active.filter.type||\\\"true\\\"!==t.node.getAttribute(\\\"selected\\\"))&&\\\"none\\\"!==i.config.states.hover.filter.type&&\\\"none\\\"!==i.config.states.active.filter.type&&!i.globals.isTouchDevice){var o=i.config.states.hover.filter;a.applyFilter(t,s,o.type,o.value)}}},{key:\\\"pathMouseLeave\\\",value:function(t,e){var i=this.w,a=new x(this.ctx),s=parseInt(t.node.getAttribute(\\\"index\\\"),10),r=parseInt(t.node.getAttribute(\\\"j\\\"),10);\\\"function\\\"==typeof i.config.chart.events.dataPointMouseLeave&&i.config.chart.events.dataPointMouseLeave(e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}),this.ctx.events.fireEvent(\\\"dataPointMouseLeave\\\",[e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}]),\\\"none\\\"!==i.config.states.active.filter.type&&\\\"true\\\"===t.node.getAttribute(\\\"selected\\\")||\\\"none\\\"!==i.config.states.hover.filter.type&&a.getDefaultFilter(t,s)}},{key:\\\"pathMouseDown\\\",value:function(t,e){var i=this.w,a=new x(this.ctx),s=parseInt(t.node.getAttribute(\\\"index\\\"),10),r=parseInt(t.node.getAttribute(\\\"j\\\"),10),o=\\\"false\\\";if(\\\"true\\\"===t.node.getAttribute(\\\"selected\\\")){if(t.node.setAttribute(\\\"selected\\\",\\\"false\\\"),i.globals.selectedDataPoints[s].indexOf(r)>-1){var n=i.globals.selectedDataPoints[s].indexOf(r);i.globals.selectedDataPoints[s].splice(n,1)}}else{if(!i.config.states.active.allowMultipleDataPointsSelection&&i.globals.selectedDataPoints.length>0){i.globals.selectedDataPoints=[];var l=i.globals.dom.Paper.select(\\\".apexcharts-series path\\\").members,h=i.globals.dom.Paper.select(\\\".apexcharts-series circle, .apexcharts-series rect\\\").members,c=function(t){Array.prototype.forEach.call(t,(function(t){t.node.setAttribute(\\\"selected\\\",\\\"false\\\"),a.getDefaultFilter(t,s)}))};c(l),c(h)}t.node.setAttribute(\\\"selected\\\",\\\"true\\\"),o=\\\"true\\\",void 0===i.globals.selectedDataPoints[s]&&(i.globals.selectedDataPoints[s]=[]),i.globals.selectedDataPoints[s].push(r)}if(\\\"true\\\"===o){var d=i.config.states.active.filter;\\\"none\\\"!==d&&a.applyFilter(t,s,d.type,d.value)}else\\\"none\\\"!==i.config.states.active.filter.type&&a.getDefaultFilter(t,s);\\\"function\\\"==typeof i.config.chart.events.dataPointSelection&&i.config.chart.events.dataPointSelection(e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}),e&&this.ctx.events.fireEvent(\\\"dataPointSelection\\\",[e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}])}},{key:\\\"rotateAroundCenter\\\",value:function(t){var e=t.getBBox();return{x:e.x+e.width/2,y:e.y+e.height/2}}},{key:\\\"getTextRects\\\",value:function(t,e,i,a){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=this.w,o=this.drawText({x:-200,y:-200,text:t,textAnchor:\\\"start\\\",fontSize:e,fontFamily:i,foreColor:\\\"#fff\\\",opacity:0});a&&o.attr(\\\"transform\\\",a),r.globals.dom.Paper.add(o);var n=o.bbox();return s||(n=o.node.getBoundingClientRect()),o.remove(),{width:n.width,height:n.height}}},{key:\\\"placeTextWithEllipsis\\\",value:function(t,e,i){if(\\\"function\\\"==typeof t.getComputedTextLength&&(t.textContent=e,e.length>0&&t.getComputedTextLength()>=i/1.1)){for(var a=e.length-3;a>0;a-=3)if(t.getSubStringLength(0,a)<=i/1.1)return void(t.textContent=e.substring(0,a)+\\\"...\\\");t.textContent=\\\".\\\"}}}],[{key:\\\"setAttrs\\\",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}}]),t}(),v=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e}return r(t,[{key:\\\"setOrientations\\\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w;if(\\\"vertical\\\"===t.label.orientation){var a=null!==e?e:0,s=i.globals.dom.baseEl.querySelector(\\\".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='\\\".concat(a,\\\"']\\\"));if(null!==s){var r=s.getBoundingClientRect();s.setAttribute(\\\"x\\\",parseFloat(s.getAttribute(\\\"x\\\"))-r.height+4),\\\"top\\\"===t.label.position?s.setAttribute(\\\"y\\\",parseFloat(s.getAttribute(\\\"y\\\"))+r.width):s.setAttribute(\\\"y\\\",parseFloat(s.getAttribute(\\\"y\\\"))-r.width);var o=this.annoCtx.graphics.rotateAroundCenter(s),n=o.x,l=o.y;s.setAttribute(\\\"transform\\\",\\\"rotate(-90 \\\".concat(n,\\\" \\\").concat(l,\\\")\\\"))}}}},{key:\\\"addBackgroundToAnno\\\",value:function(t,e){var i=this.w;if(!t||!e.label.text||e.label.text&&!e.label.text.trim())return null;var a=i.globals.dom.baseEl.querySelector(\\\".apexcharts-grid\\\").getBoundingClientRect(),s=t.getBoundingClientRect(),r=e.label.style.padding.left,o=e.label.style.padding.right,n=e.label.style.padding.top,l=e.label.style.padding.bottom;\\\"vertical\\\"===e.label.orientation&&(n=e.label.style.padding.left,l=e.label.style.padding.right,r=e.label.style.padding.top,o=e.label.style.padding.bottom);var h=s.left-a.left-r,c=s.top-a.top-n,d=this.annoCtx.graphics.drawRect(h-i.globals.barPadForNumericAxis,c,s.width+r+o,s.height+n+l,e.label.borderRadius,e.label.style.background,1,e.label.borderWidth,e.label.borderColor,0);return e.id&&d.node.classList.add(e.id),d}},{key:\\\"annotationsBackground\\\",value:function(){var t=this,e=this.w,i=function(i,a,s){var r=e.globals.dom.baseEl.querySelector(\\\".apexcharts-\\\".concat(s,\\\"-annotations .apexcharts-\\\").concat(s,\\\"-annotation-label[rel='\\\").concat(a,\\\"']\\\"));if(r){var o=r.parentNode,n=t.addBackgroundToAnno(r,i);n&&o.insertBefore(n.node,r)}};e.config.annotations.xaxis.map((function(t,e){i(t,e,\\\"xaxis\\\")})),e.config.annotations.yaxis.map((function(t,e){i(t,e,\\\"yaxis\\\")})),e.config.annotations.points.map((function(t,e){i(t,e,\\\"point\\\")}))}},{key:\\\"getStringX\\\",value:function(t){var e=this.w,i=t;e.config.xaxis.convertedCatToNumeric&&e.globals.categoryLabels.length&&(t=e.globals.categoryLabels.indexOf(t)+1);var a=e.globals.labels.indexOf(t),s=e.globals.dom.baseEl.querySelector(\\\".apexcharts-xaxis-texts-g text:nth-child(\\\"+(a+1)+\\\")\\\");return s&&(i=parseFloat(s.getAttribute(\\\"x\\\"))),i}}]),t}(),m=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e,this.invertAxis=this.annoCtx.invertAxis}return r(t,[{key:\\\"addXaxisAnnotation\\\",value:function(t,e,i){var a=this.w,s=this.invertAxis?a.globals.minY:a.globals.minX,r=this.invertAxis?a.globals.maxY:a.globals.maxX,o=this.invertAxis?a.globals.yRange[0]:a.globals.xRange,n=(t.x-s)/(o/a.globals.gridWidth);this.annoCtx.inversedReversedAxis&&(n=(r-t.x)/(o/a.globals.gridWidth));var l=t.label.text;\\\"category\\\"!==a.config.xaxis.type&&!a.config.xaxis.convertedCatToNumeric||this.invertAxis||a.globals.dataFormatXNumeric||(n=this.annoCtx.helpers.getStringX(t.x));var h=t.strokeDashArray;if(p.isNumber(n)){if(null===t.x2||void 0===t.x2){var c=this.annoCtx.graphics.drawLine(n+t.offsetX,0+t.offsetY,n+t.offsetX,a.globals.gridHeight+t.offsetY,t.borderColor,h,t.borderWidth);e.appendChild(c.node),t.id&&c.node.classList.add(t.id)}else{var d=(t.x2-s)/(o/a.globals.gridWidth);if(this.annoCtx.inversedReversedAxis&&(d=(r-t.x2)/(o/a.globals.gridWidth)),\\\"category\\\"!==a.config.xaxis.type&&!a.config.xaxis.convertedCatToNumeric||this.invertAxis||a.globals.dataFormatXNumeric||(d=this.annoCtx.helpers.getStringX(t.x2)),d<n){var g=n;n=d,d=g}var u=this.annoCtx.graphics.drawRect(n+t.offsetX,0+t.offsetY,d-n,a.globals.gridHeight+t.offsetY,0,t.fillColor,t.opacity,1,t.borderColor,h);u.node.classList.add(\\\"apexcharts-annotation-rect\\\"),u.attr(\\\"clip-path\\\",\\\"url(#gridRectMask\\\".concat(a.globals.cuid,\\\")\\\")),e.appendChild(u.node),t.id&&u.node.classList.add(t.id)}var f=\\\"top\\\"===t.label.position?4:a.globals.gridHeight,x=this.annoCtx.graphics.getTextRects(l,parseFloat(t.label.style.fontSize)),b=this.annoCtx.graphics.drawText({x:n+t.label.offsetX,y:f+t.label.offsetY-(\\\"vertical\\\"===t.label.orientation?\\\"top\\\"===t.label.position?x.width/2-12:-x.width/2:0),text:l,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\\\"apexcharts-xaxis-annotation-label \\\".concat(t.label.style.cssClass,\\\" \\\").concat(t.id?t.id:\\\"\\\")});b.attr({rel:i}),e.appendChild(b.node),this.annoCtx.helpers.setOrientations(t,i)}}},{key:\\\"drawXAxisAnnotations\\\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\\\"apexcharts-xaxis-annotations\\\"});return e.config.annotations.xaxis.map((function(e,a){t.addXaxisAnnotation(e,i.node,a)})),i}}]),t}(),y=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"getStackedSeriesTotals\\\",value:function(){var t=this.w,e=[];if(0===t.globals.series.length)return e;for(var i=0;i<t.globals.series[t.globals.maxValsInArrayIndex].length;i++){for(var a=0,s=0;s<t.globals.series.length;s++)void 0!==t.globals.series[s][i]&&(a+=t.globals.series[s][i]);e.push(a)}return t.globals.stackedSeriesTotals=e,e}},{key:\\\"getSeriesTotalByIndex\\\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null===t?this.w.config.series.reduce((function(t,e){return t+e}),0):this.w.globals.series[t].reduce((function(t,e){return t+e}),0)}},{key:\\\"isSeriesNull\\\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return 0===(null===t?this.w.config.series.filter((function(t){return null!==t})):this.w.config.series[t].data.filter((function(t){return null!==t}))).length}},{key:\\\"seriesHaveSameValues\\\",value:function(t){return this.w.globals.series[t].every((function(t,e,i){return t===i[0]}))}},{key:\\\"getCategoryLabels\\\",value:function(t){var e=this.w,i=t.slice();return e.config.xaxis.convertedCatToNumeric&&(i=t.map((function(t,i){return e.config.xaxis.labels.formatter(t-e.globals.minX+1)}))),i}},{key:\\\"getLargestSeries\\\",value:function(){var t=this.w;t.globals.maxValsInArrayIndex=t.globals.series.map((function(t){return t.length})).indexOf(Math.max.apply(Math,t.globals.series.map((function(t){return t.length}))))}},{key:\\\"getLargestMarkerSize\\\",value:function(){var t=this.w,e=0;return t.globals.markers.size.forEach((function(t){e=Math.max(e,t)})),t.globals.markers.largestSize=e,e}},{key:\\\"getSeriesTotals\\\",value:function(){var t=this.w;t.globals.seriesTotals=t.globals.series.map((function(t,e){var i=0;if(Array.isArray(t))for(var a=0;a<t.length;a++)i+=t[a];else i+=t;return i}))}},{key:\\\"getSeriesTotalsXRange\\\",value:function(t,e){var i=this.w;return i.globals.series.map((function(a,s){for(var r=0,o=0;o<a.length;o++)i.globals.seriesX[s][o]>t&&i.globals.seriesX[s][o]<e&&(r+=a[o]);return r}))}},{key:\\\"getPercentSeries\\\",value:function(){var t=this.w;t.globals.seriesPercent=t.globals.series.map((function(e,i){var a=[];if(Array.isArray(e))for(var s=0;s<e.length;s++){var r=t.globals.stackedSeriesTotals[s],o=0;r&&(o=100*e[s]/r),a.push(o)}else{var n=100*e/t.globals.seriesTotals.reduce((function(t,e){return t+e}),0);a.push(n)}return a}))}},{key:\\\"getCalculatedRatios\\\",value:function(){var t,e,i,a,s=this.w.globals,r=[],o=0,n=[],l=.1,h=0;if(s.yRange=[],s.isMultipleYAxis)for(var c=0;c<s.minYArr.length;c++)s.yRange.push(Math.abs(s.minYArr[c]-s.maxYArr[c])),n.push(0);else s.yRange.push(Math.abs(s.minY-s.maxY));s.xRange=Math.abs(s.maxX-s.minX),s.zRange=Math.abs(s.maxZ-s.minZ);for(var d=0;d<s.yRange.length;d++)r.push(s.yRange[d]/s.gridHeight);if(e=s.xRange/s.gridWidth,i=Math.abs(s.initialMaxX-s.initialMinX)/s.gridWidth,t=s.yRange/s.gridWidth,a=s.xRange/s.gridHeight,(o=s.zRange/s.gridHeight*16)||(o=1),s.minY!==Number.MIN_VALUE&&0!==Math.abs(s.minY)&&(s.hasNegs=!0),s.isMultipleYAxis){n=[];for(var g=0;g<r.length;g++)n.push(-s.minYArr[g]/r[g])}else n.push(-s.minY/r[0]),s.minY!==Number.MIN_VALUE&&0!==Math.abs(s.minY)&&(l=-s.minY/t,h=s.minX/e);return{yRatio:r,invertedYRatio:t,zRatio:o,xRatio:e,initialXRatio:i,invertedXRatio:a,baseLineInvertedY:l,baseLineY:n,baseLineX:h}}},{key:\\\"getLogSeries\\\",value:function(t){var e=this,i=this.w;return i.globals.seriesLog=t.map((function(t,a){return i.config.yaxis[a]&&i.config.yaxis[a].logarithmic?t.map((function(t){return null===t?null:e.getLogVal(t,a)})):t})),i.globals.invalidLogScale?t:i.globals.seriesLog}},{key:\\\"getLogVal\\\",value:function(t,e){var i=this.w;return(Math.log(t)-Math.log(i.globals.minYArr[e]))/(Math.log(i.globals.maxYArr[e])-Math.log(i.globals.minYArr[e]))}},{key:\\\"getLogYRatios\\\",value:function(t){var e=this,i=this.w,a=this.w.globals;return a.yLogRatio=t.slice(),a.logYRange=a.yRange.map((function(t,s){if(i.config.yaxis[s]&&e.w.config.yaxis[s].logarithmic){var r,o=-Number.MAX_VALUE,n=Number.MIN_VALUE;return a.seriesLog.forEach((function(t,e){t.forEach((function(t){i.config.yaxis[e]&&i.config.yaxis[e].logarithmic&&(o=Math.max(t,o),n=Math.min(t,n))}))})),r=Math.pow(a.yRange[s],Math.abs(n-o)/a.yRange[s]),a.yLogRatio[s]=r/a.gridHeight,r}})),a.invalidLogScale?t.slice():a.yLogRatio}}],[{key:\\\"checkComboSeries\\\",value:function(t){var e=!1,i=0,a=0;return t.length&&void 0!==t[0].type&&t.forEach((function(t){\\\"bar\\\"!==t.type&&\\\"column\\\"!==t.type&&\\\"candlestick\\\"!==t.type&&\\\"boxPlot\\\"!==t.type||i++,void 0!==t.type&&a++})),a>1&&(e=!0),{comboBarCount:i,comboCharts:e}}},{key:\\\"extendArrayProps\\\",value:function(t,e,i){return e.yaxis&&(e=t.extendYAxis(e,i)),e.annotations&&(e.annotations.yaxis&&(e=t.extendYAxisAnnotations(e)),e.annotations.xaxis&&(e=t.extendXAxisAnnotations(e)),e.annotations.points&&(e=t.extendPointAnnotations(e))),e}}]),t}(),w=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e}return r(t,[{key:\\\"addYaxisAnnotation\\\",value:function(t,e,i){var a,s=this.w,r=t.strokeDashArray,o=this._getY1Y2(\\\"y1\\\",t),n=t.label.text;if(null===t.y2||void 0===t.y2){var l=this.annoCtx.graphics.drawLine(0+t.offsetX,o+t.offsetY,this._getYAxisAnnotationWidth(t),o+t.offsetY,t.borderColor,r,t.borderWidth);e.appendChild(l.node),t.id&&l.node.classList.add(t.id)}else{if((a=this._getY1Y2(\\\"y2\\\",t))>o){var h=o;o=a,a=h}var c=this.annoCtx.graphics.drawRect(0+t.offsetX,a+t.offsetY,this._getYAxisAnnotationWidth(t),o-a,0,t.fillColor,t.opacity,1,t.borderColor,r);c.node.classList.add(\\\"apexcharts-annotation-rect\\\"),c.attr(\\\"clip-path\\\",\\\"url(#gridRectMask\\\".concat(s.globals.cuid,\\\")\\\")),e.appendChild(c.node),t.id&&c.node.classList.add(t.id)}var d=\\\"right\\\"===t.label.position?s.globals.gridWidth:0,g=this.annoCtx.graphics.drawText({x:d+t.label.offsetX,y:(a||o)+t.label.offsetY-3,text:n,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\\\"apexcharts-yaxis-annotation-label \\\".concat(t.label.style.cssClass,\\\" \\\").concat(t.id?t.id:\\\"\\\")});g.attr({rel:i}),e.appendChild(g.node)}},{key:\\\"_getY1Y2\\\",value:function(t,e){var i,a=\\\"y1\\\"===t?e.y:e.y2,s=this.w;if(this.annoCtx.invertAxis){var r=s.globals.labels.indexOf(a);s.config.xaxis.convertedCatToNumeric&&(r=s.globals.categoryLabels.indexOf(a));var o=s.globals.dom.baseEl.querySelector(\\\".apexcharts-yaxis-texts-g text:nth-child(\\\"+(r+1)+\\\")\\\");o&&(i=parseFloat(o.getAttribute(\\\"y\\\")))}else{var n;if(s.config.yaxis[e.yAxisIndex].logarithmic)n=(a=new y(this.annoCtx.ctx).getLogVal(a,e.yAxisIndex))/s.globals.yLogRatio[e.yAxisIndex];else n=(a-s.globals.minYArr[e.yAxisIndex])/(s.globals.yRange[e.yAxisIndex]/s.globals.gridHeight);i=s.globals.gridHeight-n,s.config.yaxis[e.yAxisIndex]&&s.config.yaxis[e.yAxisIndex].reversed&&(i=n)}return i}},{key:\\\"_getYAxisAnnotationWidth\\\",value:function(t){var e=this.w;e.globals.gridWidth;return(t.width.indexOf(\\\"%\\\")>-1?e.globals.gridWidth*parseInt(t.width,10)/100:parseInt(t.width,10))+t.offsetX}},{key:\\\"drawYAxisAnnotations\\\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\\\"apexcharts-yaxis-annotations\\\"});return e.config.annotations.yaxis.map((function(e,a){t.addYaxisAnnotation(e,i.node,a)})),i}}]),t}(),k=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e}return r(t,[{key:\\\"addPointAnnotation\\\",value:function(t,e,i){var a=this.w,s=0,r=0,o=0;this.annoCtx.invertAxis&&console.warn(\\\"Point annotation is not supported in horizontal bar charts.\\\");var n=parseFloat(t.y);if(\\\"string\\\"==typeof t.x){var l=a.globals.labels.indexOf(t.x);a.config.xaxis.convertedCatToNumeric&&(l=a.globals.categoryLabels.indexOf(t.x)),s=this.annoCtx.helpers.getStringX(t.x),null===t.y&&(n=a.globals.series[t.seriesIndex][l])}else s=(t.x-a.globals.minX)/(a.globals.xRange/a.globals.gridWidth);for(var h,c=[],d=0,g=0;g<=t.seriesIndex;g++){var u=a.config.yaxis[g].seriesName;if(u)for(var f=g+1;f<=t.seriesIndex;f++)a.config.yaxis[f].seriesName===u&&-1===c.indexOf(u)&&(d++,c.push(u))}if(a.config.yaxis[t.yAxisIndex].logarithmic){h=(n=new y(this.annoCtx.ctx).getLogVal(n,t.yAxisIndex))/a.globals.yLogRatio[t.yAxisIndex]}else{var x=t.yAxisIndex+d;h=(n-a.globals.minYArr[x])/(a.globals.yRange[x]/a.globals.gridHeight)}if(r=a.globals.gridHeight-h-parseFloat(t.label.style.fontSize)-t.marker.size,o=a.globals.gridHeight-h,a.config.yaxis[t.yAxisIndex]&&a.config.yaxis[t.yAxisIndex].reversed&&(r=h+parseFloat(t.label.style.fontSize)+t.marker.size,o=h),p.isNumber(s)){var b={pSize:t.marker.size,pointStrokeWidth:t.marker.strokeWidth,pointFillColor:t.marker.fillColor,pointStrokeColor:t.marker.strokeColor,shape:t.marker.shape,pRadius:t.marker.radius,class:\\\"apexcharts-point-annotation-marker \\\".concat(t.marker.cssClass,\\\" \\\").concat(t.id?t.id:\\\"\\\")},v=this.annoCtx.graphics.drawMarker(s+t.marker.offsetX,o+t.marker.offsetY,b);e.appendChild(v.node);var m=t.label.text?t.label.text:\\\"\\\",w=this.annoCtx.graphics.drawText({x:s+t.label.offsetX,y:r+t.label.offsetY,text:m,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\\\"apexcharts-point-annotation-label \\\".concat(t.label.style.cssClass,\\\" \\\").concat(t.id?t.id:\\\"\\\")});if(w.attr({rel:i}),e.appendChild(w.node),t.customSVG.SVG){var k=this.annoCtx.graphics.group({class:\\\"apexcharts-point-annotations-custom-svg \\\"+t.customSVG.cssClass});k.attr({transform:\\\"translate(\\\".concat(s+t.customSVG.offsetX,\\\", \\\").concat(r+t.customSVG.offsetY,\\\")\\\")}),k.node.innerHTML=t.customSVG.SVG,e.appendChild(k.node)}if(t.image.path){var A=t.image.width?t.image.width:20,S=t.image.height?t.image.height:20;this.annoCtx.addImage({x:s+t.image.offsetX-A/2,y:r+t.image.offsetY-S/2,width:A,height:S,path:t.image.path,appendTo:\\\".apexcharts-point-annotations\\\"})}}}},{key:\\\"drawPointAnnotations\\\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\\\"apexcharts-point-annotations\\\"});return e.config.annotations.points.map((function(e,a){t.addPointAnnotation(e,i.node,a)})),i}}]),t}();var A={name:\\\"en\\\",options:{months:[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"],shortMonths:[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"],days:[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],shortDays:[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],toolbar:{exportToSVG:\\\"Download SVG\\\",exportToPNG:\\\"Download PNG\\\",exportToCSV:\\\"Download CSV\\\",menu:\\\"Menu\\\",selection:\\\"Selection\\\",selectionZoom:\\\"Selection Zoom\\\",zoomIn:\\\"Zoom In\\\",zoomOut:\\\"Zoom Out\\\",pan:\\\"Panning\\\",reset:\\\"Reset Zoom\\\"}}},S=function(){function t(){a(this,t),this.yAxis={show:!0,showAlways:!1,showForNullSeries:!0,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,tickAmount:void 0,forceNiceScale:!1,max:void 0,min:void 0,floating:!1,decimalsInFloat:void 0,labels:{show:!0,minWidth:0,maxWidth:160,offsetX:0,offsetY:0,align:void 0,rotate:0,padding:20,style:{colors:[],fontSize:\\\"11px\\\",fontWeight:400,fontFamily:void 0,cssClass:\\\"\\\"},formatter:void 0},axisBorder:{show:!1,color:\\\"#e0e0e0\\\",width:1,offsetX:0,offsetY:0},axisTicks:{show:!1,color:\\\"#e0e0e0\\\",width:6,offsetX:0,offsetY:0},title:{text:void 0,rotate:-90,offsetY:0,offsetX:0,style:{color:void 0,fontSize:\\\"11px\\\",fontWeight:900,fontFamily:void 0,cssClass:\\\"\\\"}},tooltip:{enabled:!1,offsetX:0},crosshairs:{show:!0,position:\\\"front\\\",stroke:{color:\\\"#b6b6b6\\\",width:1,dashArray:0}}},this.pointAnnotation={x:0,y:null,yAxisIndex:0,seriesIndex:0,marker:{size:4,fillColor:\\\"#fff\\\",strokeWidth:2,strokeColor:\\\"#333\\\",shape:\\\"circle\\\",offsetX:0,offsetY:0,radius:2,cssClass:\\\"\\\"},label:{borderColor:\\\"#c2c2c2\\\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\\\"middle\\\",offsetX:0,offsetY:0,style:{background:\\\"#fff\\\",color:void 0,fontSize:\\\"11px\\\",fontFamily:void 0,fontWeight:400,cssClass:\\\"\\\",padding:{left:5,right:5,top:2,bottom:2}}},customSVG:{SVG:void 0,cssClass:void 0,offsetX:0,offsetY:0},image:{path:void 0,width:20,height:20,offsetX:0,offsetY:0}},this.yAxisAnnotation={y:0,y2:null,strokeDashArray:1,fillColor:\\\"#c2c2c2\\\",borderColor:\\\"#c2c2c2\\\",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,width:\\\"100%\\\",yAxisIndex:0,label:{borderColor:\\\"#c2c2c2\\\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\\\"end\\\",position:\\\"right\\\",offsetX:0,offsetY:-3,style:{background:\\\"#fff\\\",color:void 0,fontSize:\\\"11px\\\",fontFamily:void 0,fontWeight:400,cssClass:\\\"\\\",padding:{left:5,right:5,top:2,bottom:2}}}},this.xAxisAnnotation={x:0,x2:null,strokeDashArray:1,fillColor:\\\"#c2c2c2\\\",borderColor:\\\"#c2c2c2\\\",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,label:{borderColor:\\\"#c2c2c2\\\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\\\"middle\\\",orientation:\\\"vertical\\\",position:\\\"top\\\",offsetX:0,offsetY:0,style:{background:\\\"#fff\\\",color:void 0,fontSize:\\\"11px\\\",fontFamily:void 0,fontWeight:400,cssClass:\\\"\\\",padding:{left:5,right:5,top:2,bottom:2}}}},this.text={x:0,y:0,text:\\\"\\\",textAnchor:\\\"start\\\",foreColor:void 0,fontSize:\\\"13px\\\",fontFamily:void 0,fontWeight:400,appendTo:\\\".apexcharts-annotations\\\",backgroundColor:\\\"transparent\\\",borderColor:\\\"#c2c2c2\\\",borderRadius:0,borderWidth:0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2}}return r(t,[{key:\\\"init\\\",value:function(){return{annotations:{position:\\\"front\\\",yaxis:[this.yAxisAnnotation],xaxis:[this.xAxisAnnotation],points:[this.pointAnnotation],texts:[],images:[],shapes:[]},chart:{animations:{enabled:!0,easing:\\\"easeinout\\\",speed:800,animateGradually:{delay:150,enabled:!0},dynamicAnimation:{enabled:!0,speed:350}},background:\\\"transparent\\\",locales:[A],defaultLocale:\\\"en\\\",dropShadow:{enabled:!1,enabledOnSeries:void 0,top:2,left:2,blur:4,color:\\\"#000\\\",opacity:.35},events:{animationEnd:void 0,beforeMount:void 0,mounted:void 0,updated:void 0,click:void 0,mouseMove:void 0,mouseLeave:void 0,legendClick:void 0,markerClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,beforeResetZoom:void 0,zoomed:void 0,scrolled:void 0,brushScrolled:void 0},foreColor:\\\"#373d3f\\\",fontFamily:\\\"Helvetica, Arial, sans-serif\\\",height:\\\"auto\\\",parentHeightOffset:15,redrawOnParentResize:!0,redrawOnWindowResize:!0,id:void 0,group:void 0,offsetX:0,offsetY:0,selection:{enabled:!1,type:\\\"x\\\",fill:{color:\\\"#24292e\\\",opacity:.1},stroke:{width:1,color:\\\"#24292e\\\",opacity:.4,dashArray:3},xaxis:{min:void 0,max:void 0},yaxis:{min:void 0,max:void 0}},sparkline:{enabled:!1},brush:{enabled:!1,autoScaleYaxis:!0,target:void 0},stacked:!1,stackType:\\\"normal\\\",toolbar:{show:!0,offsetX:0,offsetY:0,tools:{download:!0,selection:!0,zoom:!0,zoomin:!0,zoomout:!0,pan:!0,reset:!0,customIcons:[]},export:{csv:{filename:void 0,columnDelimiter:\\\",\\\",headerCategory:\\\"category\\\",headerValue:\\\"value\\\",dateFormatter:function(t){return new Date(t).toDateString()}},png:{filename:void 0},svg:{filename:void 0}},autoSelected:\\\"zoom\\\"},type:\\\"line\\\",width:\\\"100%\\\",zoom:{enabled:!0,type:\\\"x\\\",autoScaleYaxis:!1,zoomedArea:{fill:{color:\\\"#90CAF9\\\",opacity:.4},stroke:{color:\\\"#0D47A1\\\",opacity:.4,width:1}}}},plotOptions:{area:{fillTo:\\\"origin\\\"},bar:{horizontal:!1,columnWidth:\\\"70%\\\",barHeight:\\\"70%\\\",distributed:!1,borderRadius:0,startingShape:\\\"flat\\\",endingShape:\\\"flat\\\",rangeBarOverlap:!0,rangeBarGroupRows:!1,colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1,backgroundBarRadius:0},dataLabels:{position:\\\"top\\\",maxItems:100,hideOverflowingLabels:!0,orientation:\\\"horizontal\\\"}},bubble:{minBubbleRadius:void 0,maxBubbleRadius:void 0},candlestick:{colors:{upward:\\\"#00B746\\\",downward:\\\"#EF403C\\\"},wick:{useFillColor:!0}},boxPlot:{colors:{upper:\\\"#00E396\\\",lower:\\\"#008FFB\\\"}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,reverseNegativeShade:!1,distributed:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},treemap:{enableShades:!0,shadeIntensity:.5,distributed:!1,reverseNegativeShade:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},radialBar:{inverseOrder:!1,startAngle:0,endAngle:360,offsetX:0,offsetY:0,hollow:{margin:5,size:\\\"50%\\\",background:\\\"transparent\\\",image:void 0,imageWidth:150,imageHeight:150,imageOffsetX:0,imageOffsetY:0,imageClipped:!0,position:\\\"front\\\",dropShadow:{enabled:!1,top:0,left:0,blur:3,color:\\\"#000\\\",opacity:.5}},track:{show:!0,startAngle:void 0,endAngle:void 0,background:\\\"#f2f2f2\\\",strokeWidth:\\\"97%\\\",opacity:1,margin:5,dropShadow:{enabled:!1,top:0,left:0,blur:3,color:\\\"#000\\\",opacity:.5}},dataLabels:{show:!0,name:{show:!0,fontSize:\\\"16px\\\",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:0,formatter:function(t){return t}},value:{show:!0,fontSize:\\\"14px\\\",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:16,formatter:function(t){return t+\\\"%\\\"}},total:{show:!1,label:\\\"Total\\\",fontSize:\\\"16px\\\",fontWeight:600,fontFamily:void 0,color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce((function(t,e){return t+e}),0)/t.globals.series.length+\\\"%\\\"}}}},pie:{customScale:1,offsetX:0,offsetY:0,startAngle:0,endAngle:360,expandOnClick:!0,dataLabels:{offset:0,minAngleToShowLabel:10},donut:{size:\\\"65%\\\",background:\\\"transparent\\\",labels:{show:!1,name:{show:!0,fontSize:\\\"16px\\\",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:-10,formatter:function(t){return t}},value:{show:!0,fontSize:\\\"20px\\\",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:10,formatter:function(t){return t}},total:{show:!1,showAlways:!1,label:\\\"Total\\\",fontSize:\\\"16px\\\",fontWeight:400,fontFamily:void 0,color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce((function(t,e){return t+e}),0)}}}}},polarArea:{rings:{strokeWidth:1,strokeColor:\\\"#e8e8e8\\\"},spokes:{strokeWidth:1,connectorColors:\\\"#e8e8e8\\\"}},radar:{size:void 0,offsetX:0,offsetY:0,polygons:{strokeWidth:1,strokeColors:\\\"#e8e8e8\\\",connectorColors:\\\"#e8e8e8\\\",fill:{colors:void 0}}}},colors:void 0,dataLabels:{enabled:!0,enabledOnSeries:void 0,formatter:function(t){return null!==t?t:\\\"\\\"},textAnchor:\\\"middle\\\",distributed:!1,offsetX:0,offsetY:0,style:{fontSize:\\\"12px\\\",fontFamily:void 0,fontWeight:600,colors:void 0},background:{enabled:!0,foreColor:\\\"#fff\\\",borderRadius:2,padding:4,opacity:.9,borderWidth:1,borderColor:\\\"#fff\\\",dropShadow:{enabled:!1,top:1,left:1,blur:1,color:\\\"#000\\\",opacity:.45}},dropShadow:{enabled:!1,top:1,left:1,blur:1,color:\\\"#000\\\",opacity:.45}},fill:{type:\\\"solid\\\",colors:void 0,opacity:.85,gradient:{shade:\\\"dark\\\",type:\\\"horizontal\\\",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},image:{src:[],width:void 0,height:void 0},pattern:{style:\\\"squares\\\",width:6,height:6,strokeWidth:2}},forecastDataPoints:{count:0,fillOpacity:.5,strokeWidth:void 0,dashArray:4},grid:{show:!0,borderColor:\\\"#e0e0e0\\\",strokeDashArray:0,position:\\\"back\\\",xaxis:{lines:{show:!1}},yaxis:{lines:{show:!0}},row:{colors:void 0,opacity:.5},column:{colors:void 0,opacity:.5},padding:{top:0,right:10,bottom:0,left:12}},labels:[],legend:{show:!0,showForSingleSeries:!1,showForNullSeries:!0,showForZeroSeries:!0,floating:!1,position:\\\"bottom\\\",horizontalAlign:\\\"center\\\",inverseOrder:!1,fontSize:\\\"12px\\\",fontFamily:void 0,fontWeight:400,width:void 0,height:void 0,formatter:void 0,tooltipHoverFormatter:void 0,offsetX:-20,offsetY:4,customLegendItems:[],labels:{colors:void 0,useSeriesColors:!1},markers:{width:12,height:12,strokeWidth:0,fillColors:void 0,strokeColor:\\\"#fff\\\",radius:12,customHTML:void 0,offsetX:0,offsetY:0,onClick:void 0},itemMargin:{horizontal:5,vertical:2},onItemClick:{toggleDataSeries:!0},onItemHover:{highlightDataSeries:!0}},markers:{discrete:[],size:0,colors:void 0,strokeColors:\\\"#fff\\\",strokeWidth:2,strokeOpacity:.9,strokeDashArray:0,fillOpacity:1,shape:\\\"circle\\\",width:8,height:8,radius:2,offsetX:0,offsetY:0,onClick:void 0,onDblClick:void 0,showNullDataPoints:!0,hover:{size:void 0,sizeOffset:3}},noData:{text:void 0,align:\\\"center\\\",verticalAlign:\\\"middle\\\",offsetX:0,offsetY:0,style:{color:void 0,fontSize:\\\"14px\\\",fontFamily:void 0}},responsive:[],series:void 0,states:{normal:{filter:{type:\\\"none\\\",value:0}},hover:{filter:{type:\\\"lighten\\\",value:.1}},active:{allowMultipleDataPointsSelection:!1,filter:{type:\\\"darken\\\",value:.5}}},title:{text:void 0,align:\\\"left\\\",margin:5,offsetX:0,offsetY:0,floating:!1,style:{fontSize:\\\"14px\\\",fontWeight:900,fontFamily:void 0,color:void 0}},subtitle:{text:void 0,align:\\\"left\\\",margin:5,offsetX:0,offsetY:30,floating:!1,style:{fontSize:\\\"12px\\\",fontWeight:400,fontFamily:void 0,color:void 0}},stroke:{show:!0,curve:\\\"smooth\\\",lineCap:\\\"butt\\\",width:2,colors:void 0,dashArray:0},tooltip:{enabled:!0,enabledOnSeries:void 0,shared:!0,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:\\\"light\\\",style:{fontSize:\\\"12px\\\",fontFamily:void 0},onDatasetHover:{highlightDataSeries:!1},x:{show:!0,format:\\\"dd MMM\\\",formatter:void 0},y:{formatter:void 0,title:{formatter:function(t){return t?t+\\\": \\\":\\\"\\\"}}},z:{formatter:void 0,title:\\\"Size: \\\"},marker:{show:!0,fillColors:void 0},items:{display:\\\"flex\\\"},fixed:{enabled:!1,position:\\\"topRight\\\",offsetX:0,offsetY:0}},xaxis:{type:\\\"category\\\",categories:[],convertedCatToNumeric:!1,offsetX:0,offsetY:0,overwriteCategories:void 0,labels:{show:!0,rotate:-45,rotateAlways:!1,hideOverlappingLabels:!0,trim:!1,minHeight:void 0,maxHeight:120,showDuplicates:!0,style:{colors:[],fontSize:\\\"12px\\\",fontWeight:400,fontFamily:void 0,cssClass:\\\"\\\"},offsetX:0,offsetY:0,format:void 0,formatter:void 0,datetimeUTC:!0,datetimeFormatter:{year:\\\"yyyy\\\",month:\\\"MMM 'yy\\\",day:\\\"dd MMM\\\",hour:\\\"HH:mm\\\",minute:\\\"HH:mm:ss\\\",second:\\\"HH:mm:ss\\\"}},axisBorder:{show:!0,color:\\\"#e0e0e0\\\",width:\\\"100%\\\",height:1,offsetX:0,offsetY:0},axisTicks:{show:!0,color:\\\"#e0e0e0\\\",height:6,offsetX:0,offsetY:0},tickAmount:void 0,tickPlacement:\\\"on\\\",min:void 0,max:void 0,range:void 0,floating:!1,decimalsInFloat:void 0,position:\\\"bottom\\\",title:{text:void 0,offsetX:0,offsetY:0,style:{color:void 0,fontSize:\\\"12px\\\",fontWeight:900,fontFamily:void 0,cssClass:\\\"\\\"}},crosshairs:{show:!0,width:1,position:\\\"back\\\",opacity:.9,stroke:{color:\\\"#b6b6b6\\\",width:1,dashArray:3},fill:{type:\\\"solid\\\",color:\\\"#B1B9C4\\\",gradient:{colorFrom:\\\"#D8E3F0\\\",colorTo:\\\"#BED1E6\\\",stops:[0,100],opacityFrom:.4,opacityTo:.5}},dropShadow:{enabled:!1,left:0,top:0,blur:1,opacity:.4}},tooltip:{enabled:!0,offsetY:0,formatter:void 0,style:{fontSize:\\\"12px\\\",fontFamily:void 0}}},yaxis:this.yAxis,theme:{mode:\\\"light\\\",palette:\\\"palette1\\\",monochrome:{enabled:!1,color:\\\"#008FFB\\\",shadeTo:\\\"light\\\",shadeIntensity:.65}}}}}]),t}(),C=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.graphics=new b(this.ctx),this.w.globals.isBarHorizontal&&(this.invertAxis=!0),this.helpers=new v(this),this.xAxisAnnotations=new m(this),this.yAxisAnnotations=new w(this),this.pointsAnnotations=new k(this),this.w.globals.isBarHorizontal&&this.w.config.yaxis[0].reversed&&(this.inversedReversedAxis=!0),this.xDivision=this.w.globals.gridWidth/this.w.globals.dataPoints}return r(t,[{key:\\\"drawAxesAnnotations\\\",value:function(){var t=this.w;if(t.globals.axisCharts){for(var e=this.yAxisAnnotations.drawYAxisAnnotations(),i=this.xAxisAnnotations.drawXAxisAnnotations(),a=this.pointsAnnotations.drawPointAnnotations(),s=t.config.chart.animations.enabled,r=[e,i,a],o=[i.node,e.node,a.node],n=0;n<3;n++)t.globals.dom.elGraphical.add(r[n]),!s||t.globals.resized||t.globals.dataChanged||\\\"scatter\\\"!==t.config.chart.type&&\\\"bubble\\\"!==t.config.chart.type&&t.globals.dataPoints>1&&o[n].classList.add(\\\"apexcharts-element-hidden\\\"),t.globals.delayedElements.push({el:o[n],index:0});this.helpers.annotationsBackground()}}},{key:\\\"drawImageAnnos\\\",value:function(){var t=this;this.w.config.annotations.images.map((function(e,i){t.addImage(e,i)}))}},{key:\\\"drawTextAnnos\\\",value:function(){var t=this;this.w.config.annotations.texts.map((function(e,i){t.addText(e,i)}))}},{key:\\\"addXaxisAnnotation\\\",value:function(t,e,i){this.xAxisAnnotations.addXaxisAnnotation(t,e,i)}},{key:\\\"addYaxisAnnotation\\\",value:function(t,e,i){this.yAxisAnnotations.addYaxisAnnotation(t,e,i)}},{key:\\\"addPointAnnotation\\\",value:function(t,e,i){this.pointsAnnotations.addPointAnnotation(t,e,i)}},{key:\\\"addText\\\",value:function(t,e){var i=t.x,a=t.y,s=t.text,r=t.textAnchor,o=t.foreColor,n=t.fontSize,l=t.fontFamily,h=t.fontWeight,c=t.cssClass,d=t.backgroundColor,g=t.borderWidth,u=t.strokeDashArray,p=t.borderRadius,f=t.borderColor,x=t.appendTo,b=void 0===x?\\\".apexcharts-annotations\\\":x,v=t.paddingLeft,m=void 0===v?4:v,y=t.paddingRight,w=void 0===y?4:y,k=t.paddingBottom,A=void 0===k?2:k,S=t.paddingTop,C=void 0===S?2:S,L=this.w,P=this.graphics.drawText({x:i,y:a,text:s,textAnchor:r||\\\"start\\\",fontSize:n||\\\"12px\\\",fontWeight:h||\\\"regular\\\",fontFamily:l||L.config.chart.fontFamily,foreColor:o||L.config.chart.foreColor,cssClass:c}),T=L.globals.dom.baseEl.querySelector(b);T&&T.appendChild(P.node);var M=P.bbox();if(s){var I=this.graphics.drawRect(M.x-m,M.y-C,M.width+m+w,M.height+A+C,p,d||\\\"transparent\\\",1,g,f,u);T.insertBefore(I.node,P.node)}}},{key:\\\"addImage\\\",value:function(t,e){var i=this.w,a=t.path,s=t.x,r=void 0===s?0:s,o=t.y,n=void 0===o?0:o,l=t.width,h=void 0===l?20:l,c=t.height,d=void 0===c?20:c,g=t.appendTo,u=void 0===g?\\\".apexcharts-annotations\\\":g,p=i.globals.dom.Paper.image(a);p.size(h,d).move(r,n);var f=i.globals.dom.baseEl.querySelector(u);f&&f.appendChild(p.node)}},{key:\\\"addXaxisAnnotationExternal\\\",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\\\"xaxis\\\",contextMethod:i.addXaxisAnnotation}),i}},{key:\\\"addYaxisAnnotationExternal\\\",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\\\"yaxis\\\",contextMethod:i.addYaxisAnnotation}),i}},{key:\\\"addPointAnnotationExternal\\\",value:function(t,e,i){return void 0===this.invertAxis&&(this.invertAxis=i.w.globals.isBarHorizontal),this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\\\"point\\\",contextMethod:i.addPointAnnotation}),i}},{key:\\\"addAnnotationExternal\\\",value:function(t){var e=t.params,i=t.pushToMemory,a=t.context,s=t.type,r=t.contextMethod,o=a,n=o.w,l=n.globals.dom.baseEl.querySelector(\\\".apexcharts-\\\".concat(s,\\\"-annotations\\\")),h=l.childNodes.length+1,c=new S,d=Object.assign({},\\\"xaxis\\\"===s?c.xAxisAnnotation:\\\"yaxis\\\"===s?c.yAxisAnnotation:c.pointAnnotation),g=p.extend(d,e);switch(s){case\\\"xaxis\\\":this.addXaxisAnnotation(g,l,h);break;case\\\"yaxis\\\":this.addYaxisAnnotation(g,l,h);break;case\\\"point\\\":this.addPointAnnotation(g,l,h)}var u=n.globals.dom.baseEl.querySelector(\\\".apexcharts-\\\".concat(s,\\\"-annotations .apexcharts-\\\").concat(s,\\\"-annotation-label[rel='\\\").concat(h,\\\"']\\\")),f=this.helpers.addBackgroundToAnno(u,g);return f&&l.insertBefore(f.node,u),i&&n.globals.memory.methodsToExec.push({context:o,id:g.id?g.id:p.randomId(),method:r,label:\\\"addAnnotation\\\",params:e}),a}},{key:\\\"clearAnnotations\\\",value:function(t){var e=t.w,i=e.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations\\\");e.globals.memory.methodsToExec.map((function(t,i){\\\"addText\\\"!==t.label&&\\\"addAnnotation\\\"!==t.label||e.globals.memory.methodsToExec.splice(i,1)})),i=p.listToArray(i),Array.prototype.forEach.call(i,(function(t){for(;t.firstChild;)t.removeChild(t.firstChild)}))}},{key:\\\"removeAnnotation\\\",value:function(t,e){var i=t.w,a=i.globals.dom.baseEl.querySelectorAll(\\\".\\\".concat(e));a&&(i.globals.memory.methodsToExec.map((function(t,a){t.id===e&&i.globals.memory.methodsToExec.splice(a,1)})),Array.prototype.forEach.call(a,(function(t){t.parentElement.removeChild(t)})))}}]),t}(),L=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.opts=null,this.seriesIndex=0}return r(t,[{key:\\\"clippedImgArea\\\",value:function(t){var e=this.w,i=e.config,a=parseInt(e.globals.gridWidth,10),s=parseInt(e.globals.gridHeight,10),r=a>s?a:s,o=t.image,n=0,l=0;void 0===t.width&&void 0===t.height?void 0!==i.fill.image.width&&void 0!==i.fill.image.height?(n=i.fill.image.width+1,l=i.fill.image.height):(n=r+1,l=r):(n=t.width,l=t.height);var h=document.createElementNS(e.globals.SVGNS,\\\"pattern\\\");b.setAttrs(h,{id:t.patternID,patternUnits:t.patternUnits?t.patternUnits:\\\"userSpaceOnUse\\\",width:n+\\\"px\\\",height:l+\\\"px\\\"});var c=document.createElementNS(e.globals.SVGNS,\\\"image\\\");h.appendChild(c),c.setAttributeNS(window.SVG.xlink,\\\"href\\\",o),b.setAttrs(c,{x:0,y:0,preserveAspectRatio:\\\"none\\\",width:n+\\\"px\\\",height:l+\\\"px\\\"}),c.style.opacity=t.opacity,e.globals.dom.elDefs.node.appendChild(h)}},{key:\\\"getSeriesIndex\\\",value:function(t){var e=this.w;return(\\\"bar\\\"===e.config.chart.type||\\\"rangeBar\\\"===e.config.chart.type)&&e.config.plotOptions.bar.distributed||\\\"heatmap\\\"===e.config.chart.type||\\\"treemap\\\"===e.config.chart.type?this.seriesIndex=t.seriesNumber:this.seriesIndex=t.seriesNumber%e.globals.series.length,this.seriesIndex}},{key:\\\"fillPath\\\",value:function(t){var e=this.w;this.opts=t;var i,a,s,r=this.w.config;this.seriesIndex=this.getSeriesIndex(t);var o=this.getFillColors()[this.seriesIndex];void 0!==e.globals.seriesColors[this.seriesIndex]&&(o=e.globals.seriesColors[this.seriesIndex]),\\\"function\\\"==typeof o&&(o=o({seriesIndex:this.seriesIndex,dataPointIndex:t.dataPointIndex,value:t.value,w:e}));var n=this.getFillType(this.seriesIndex),l=Array.isArray(r.fill.opacity)?r.fill.opacity[this.seriesIndex]:r.fill.opacity;t.color&&(o=t.color);var h=o;if(-1===o.indexOf(\\\"rgb\\\")?o.length<9&&(h=p.hexToRgba(o,l)):o.indexOf(\\\"rgba\\\")>-1&&(l=p.getOpacityFromRGBA(o)),t.opacity&&(l=t.opacity),\\\"pattern\\\"===n&&(a=this.handlePatternFill(a,o,l,h)),\\\"gradient\\\"===n&&(s=this.handleGradientFill(o,l,this.seriesIndex)),\\\"image\\\"===n){var c=r.fill.image.src,d=t.patternID?t.patternID:\\\"\\\";this.clippedImgArea({opacity:l,image:Array.isArray(c)?t.seriesNumber<c.length?c[t.seriesNumber]:c[0]:c,width:t.width?t.width:void 0,height:t.height?t.height:void 0,patternUnits:t.patternUnits,patternID:\\\"pattern\\\".concat(e.globals.cuid).concat(t.seriesNumber+1).concat(d)}),i=\\\"url(#pattern\\\".concat(e.globals.cuid).concat(t.seriesNumber+1).concat(d,\\\")\\\")}else i=\\\"gradient\\\"===n?s:\\\"pattern\\\"===n?a:h;return t.solid&&(i=h),i}},{key:\\\"getFillType\\\",value:function(t){var e=this.w;return Array.isArray(e.config.fill.type)?e.config.fill.type[t]:e.config.fill.type}},{key:\\\"getFillColors\\\",value:function(){var t=this.w,e=t.config,i=this.opts,a=[];return t.globals.comboCharts?\\\"line\\\"===t.config.series[this.seriesIndex].type?Array.isArray(t.globals.stroke.colors)?a=t.globals.stroke.colors:a.push(t.globals.stroke.colors):Array.isArray(t.globals.fill.colors)?a=t.globals.fill.colors:a.push(t.globals.fill.colors):\\\"line\\\"===e.chart.type?Array.isArray(t.globals.stroke.colors)?a=t.globals.stroke.colors:a.push(t.globals.stroke.colors):Array.isArray(t.globals.fill.colors)?a=t.globals.fill.colors:a.push(t.globals.fill.colors),void 0!==i.fillColors&&(a=[],Array.isArray(i.fillColors)?a=i.fillColors.slice():a.push(i.fillColors)),a}},{key:\\\"handlePatternFill\\\",value:function(t,e,i,a){var s=this.w.config,r=this.opts,o=new b(this.ctx),n=void 0===s.fill.pattern.strokeWidth?Array.isArray(s.stroke.width)?s.stroke.width[this.seriesIndex]:s.stroke.width:Array.isArray(s.fill.pattern.strokeWidth)?s.fill.pattern.strokeWidth[this.seriesIndex]:s.fill.pattern.strokeWidth,l=e;Array.isArray(s.fill.pattern.style)?t=void 0!==s.fill.pattern.style[r.seriesNumber]?o.drawPattern(s.fill.pattern.style[r.seriesNumber],s.fill.pattern.width,s.fill.pattern.height,l,n,i):a:t=o.drawPattern(s.fill.pattern.style,s.fill.pattern.width,s.fill.pattern.height,l,n,i);return t}},{key:\\\"handleGradientFill\\\",value:function(t,e,i){var a,s=this.w.config,r=this.opts,o=new b(this.ctx),n=new p,l=s.fill.gradient.type,h=t,c=void 0===s.fill.gradient.opacityFrom?e:Array.isArray(s.fill.gradient.opacityFrom)?s.fill.gradient.opacityFrom[i]:s.fill.gradient.opacityFrom;h.indexOf(\\\"rgba\\\")>-1&&(c=p.getOpacityFromRGBA(h));var d=void 0===s.fill.gradient.opacityTo?e:Array.isArray(s.fill.gradient.opacityTo)?s.fill.gradient.opacityTo[i]:s.fill.gradient.opacityTo;if(void 0===s.fill.gradient.gradientToColors||0===s.fill.gradient.gradientToColors.length)a=\\\"dark\\\"===s.fill.gradient.shade?n.shadeColor(-1*parseFloat(s.fill.gradient.shadeIntensity),t.indexOf(\\\"rgb\\\")>-1?p.rgb2hex(t):t):n.shadeColor(parseFloat(s.fill.gradient.shadeIntensity),t.indexOf(\\\"rgb\\\")>-1?p.rgb2hex(t):t);else if(s.fill.gradient.gradientToColors[r.seriesNumber]){var g=s.fill.gradient.gradientToColors[r.seriesNumber];a=g,g.indexOf(\\\"rgba\\\")>-1&&(d=p.getOpacityFromRGBA(g))}else a=t;if(s.fill.gradient.inverseColors){var u=h;h=a,a=u}return h.indexOf(\\\"rgb\\\")>-1&&(h=p.rgb2hex(h)),a.indexOf(\\\"rgb\\\")>-1&&(a=p.rgb2hex(a)),o.drawGradient(l,h,a,c,d,r.size,s.fill.gradient.stops,s.fill.gradient.colorStops,i)}}]),t}(),P=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"setGlobalMarkerSize\\\",value:function(){var t=this.w;if(t.globals.markers.size=Array.isArray(t.config.markers.size)?t.config.markers.size:[t.config.markers.size],t.globals.markers.size.length>0){if(t.globals.markers.size.length<t.globals.series.length+1)for(var e=0;e<=t.globals.series.length;e++)void 0===t.globals.markers.size[e]&&t.globals.markers.size.push(t.globals.markers.size[0])}else t.globals.markers.size=t.config.series.map((function(e){return t.config.markers.size}))}},{key:\\\"plotChartMarkers\\\",value:function(t,e,i,a){var s,r=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=this.w,n=e,l=t,h=null,c=new b(this.ctx);if((o.globals.markers.size[e]>0||r)&&(h=c.group({class:r?\\\"\\\":\\\"apexcharts-series-markers\\\"})).attr(\\\"clip-path\\\",\\\"url(#gridRectMarkerMask\\\".concat(o.globals.cuid,\\\")\\\")),Array.isArray(l.x))for(var d=0;d<l.x.length;d++){var g=i;1===i&&0===d&&(g=0),1===i&&1===d&&(g=1);var u=\\\"apexcharts-marker\\\";\\\"line\\\"!==o.config.chart.type&&\\\"area\\\"!==o.config.chart.type||o.globals.comboCharts||o.config.tooltip.intersect||(u+=\\\" no-pointer-events\\\");var f=Array.isArray(o.config.markers.size)?o.globals.markers.size[e]>0:o.config.markers.size>0;if(f||r){p.isNumber(l.y[d])?u+=\\\" w\\\".concat(p.randomId()):u=\\\"apexcharts-nullpoint\\\";var v=this.getMarkerConfig({cssClass:u,seriesIndex:e,dataPointIndex:g});o.config.series[n].data[g]&&(o.config.series[n].data[g].fillColor&&(v.pointFillColor=o.config.series[n].data[g].fillColor),o.config.series[n].data[g].strokeColor&&(v.pointStrokeColor=o.config.series[n].data[g].strokeColor)),a&&(v.pSize=a),(s=c.drawMarker(l.x[d],l.y[d],v)).attr(\\\"rel\\\",g),s.attr(\\\"j\\\",g),s.attr(\\\"index\\\",e),s.node.setAttribute(\\\"default-marker-size\\\",v.pSize);var m=new x(this.ctx);m.setSelectionFilter(s,e,g),this.addEvents(s),h&&h.add(s)}else void 0===o.globals.pointsArray[e]&&(o.globals.pointsArray[e]=[]),o.globals.pointsArray[e].push([l.x[d],l.y[d]])}return h}},{key:\\\"getMarkerConfig\\\",value:function(t){var e=t.cssClass,i=t.seriesIndex,a=t.dataPointIndex,s=void 0===a?null:a,r=t.finishRadius,o=void 0===r?null:r,n=this.w,l=this.getMarkerStyle(i),h=n.globals.markers.size[i],c=n.config.markers;return null!==s&&c.discrete.length&&c.discrete.map((function(t){t.seriesIndex===i&&t.dataPointIndex===s&&(l.pointStrokeColor=t.strokeColor,l.pointFillColor=t.fillColor,h=t.size,l.pointShape=t.shape)})),{pSize:null===o?h:o,pRadius:c.radius,width:Array.isArray(c.width)?c.width[i]:c.width,height:Array.isArray(c.height)?c.height[i]:c.height,pointStrokeWidth:Array.isArray(c.strokeWidth)?c.strokeWidth[i]:c.strokeWidth,pointStrokeColor:l.pointStrokeColor,pointFillColor:l.pointFillColor,shape:l.pointShape||(Array.isArray(c.shape)?c.shape[i]:c.shape),class:e,pointStrokeOpacity:Array.isArray(c.strokeOpacity)?c.strokeOpacity[i]:c.strokeOpacity,pointStrokeDashArray:Array.isArray(c.strokeDashArray)?c.strokeDashArray[i]:c.strokeDashArray,pointFillOpacity:Array.isArray(c.fillOpacity)?c.fillOpacity[i]:c.fillOpacity,seriesIndex:i}}},{key:\\\"addEvents\\\",value:function(t){var e=this.w,i=new b(this.ctx);t.node.addEventListener(\\\"mouseenter\\\",i.pathMouseEnter.bind(this.ctx,t)),t.node.addEventListener(\\\"mouseleave\\\",i.pathMouseLeave.bind(this.ctx,t)),t.node.addEventListener(\\\"mousedown\\\",i.pathMouseDown.bind(this.ctx,t)),t.node.addEventListener(\\\"click\\\",e.config.markers.onClick),t.node.addEventListener(\\\"dblclick\\\",e.config.markers.onDblClick),t.node.addEventListener(\\\"touchstart\\\",i.pathMouseDown.bind(this.ctx,t),{passive:!0})}},{key:\\\"getMarkerStyle\\\",value:function(t){var e=this.w,i=e.globals.markers.colors,a=e.config.markers.strokeColor||e.config.markers.strokeColors;return{pointStrokeColor:Array.isArray(a)?a[t]:a,pointFillColor:Array.isArray(i)?i[t]:i}}}]),t}(),T=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled}return r(t,[{key:\\\"draw\\\",value:function(t,e,i){var a=this.w,s=new b(this.ctx),r=i.realIndex,o=i.pointsPos,n=i.zRatio,l=i.elParent,h=s.group({class:\\\"apexcharts-series-markers apexcharts-series-\\\".concat(a.config.chart.type)});if(h.attr(\\\"clip-path\\\",\\\"url(#gridRectMarkerMask\\\".concat(a.globals.cuid,\\\")\\\")),Array.isArray(o.x))for(var c=0;c<o.x.length;c++){var d=e+1,g=!0;0===e&&0===c&&(d=0),0===e&&1===c&&(d=1);var u=0,p=a.globals.markers.size[r];if(n!==1/0){p=a.globals.seriesZ[r][d]/n;var f=a.config.plotOptions.bubble;f.minBubbleRadius&&p<f.minBubbleRadius&&(p=f.minBubbleRadius),f.maxBubbleRadius&&p>f.maxBubbleRadius&&(p=f.maxBubbleRadius)}a.config.chart.animations.enabled||(u=p);var x=o.x[c],v=o.y[c];if(u=u||0,null!==v&&void 0!==a.globals.series[r][d]||(g=!1),g){var m=this.drawPoint(x,v,u,p,r,d,e);h.add(m)}l.add(h)}}},{key:\\\"drawPoint\\\",value:function(t,e,i,a,s,r,o){var n=this.w,l=s,h=new f(this.ctx),c=new x(this.ctx),d=new L(this.ctx),g=new P(this.ctx),u=new b(this.ctx),p=g.getMarkerConfig({cssClass:\\\"apexcharts-marker\\\",seriesIndex:l,dataPointIndex:r,finishRadius:\\\"bubble\\\"===n.config.chart.type||n.globals.comboCharts&&n.config.series[s]&&\\\"bubble\\\"===n.config.series[s].type?a:null});a=p.pSize;var v,m=d.fillPath({seriesNumber:s,dataPointIndex:r,color:p.pointFillColor,patternUnits:\\\"objectBoundingBox\\\",value:n.globals.series[s][o]});if(\\\"circle\\\"===p.shape?v=u.drawCircle(i):\\\"square\\\"!==p.shape&&\\\"rect\\\"!==p.shape||(v=u.drawRect(0,0,p.width-p.pointStrokeWidth/2,p.height-p.pointStrokeWidth/2,p.pRadius)),n.config.series[l].data[r]&&n.config.series[l].data[r].fillColor&&(m=n.config.series[l].data[r].fillColor),v.attr({x:t-p.width/2-p.pointStrokeWidth/2,y:e-p.height/2-p.pointStrokeWidth/2,cx:t,cy:e,fill:m,\\\"fill-opacity\\\":p.pointFillOpacity,stroke:p.pointStrokeColor,r:a,\\\"stroke-width\\\":p.pointStrokeWidth,\\\"stroke-dasharray\\\":p.pointStrokeDashArray,\\\"stroke-opacity\\\":p.pointStrokeOpacity}),n.config.chart.dropShadow.enabled){var y=n.config.chart.dropShadow;c.dropShadow(v,y,s)}if(!this.initialAnim||n.globals.dataChanged||n.globals.resized)n.globals.animationEnded=!0;else{var w=n.config.chart.animations.speed;h.animateMarker(v,0,\\\"circle\\\"===p.shape?a:{width:p.width,height:p.height},w,n.globals.easing,(function(){window.setTimeout((function(){h.animationCompleted(v)}),100)}))}if(n.globals.dataChanged&&\\\"circle\\\"===p.shape)if(this.dynamicAnim){var k,A,S,C,T=n.config.chart.animations.dynamicAnimation.speed;null!=(C=n.globals.previousPaths[s]&&n.globals.previousPaths[s][o])&&(k=C.x,A=C.y,S=void 0!==C.r?C.r:a);for(var M=0;M<n.globals.collapsedSeries.length;M++)n.globals.collapsedSeries[M].index===s&&(T=1,a=0);0===t&&0===e&&(a=0),h.animateCircle(v,{cx:k,cy:A,r:S},{cx:t,cy:e,r:a},T,n.globals.easing)}else v.attr({r:a});return v.attr({rel:r,j:r,index:s,\\\"default-marker-size\\\":a}),c.setSelectionFilter(v,s,r),g.addEvents(v),v.node.classList.add(\\\"apexcharts-marker\\\"),v}},{key:\\\"centerTextInBubble\\\",value:function(t){var e=this.w;return{y:t+=parseInt(e.config.dataLabels.style.fontSize,10)/4}}}]),t}(),M=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"dataLabelsCorrection\\\",value:function(t,e,i,a,s,r,o){var n=this.w,l=!1,h=new b(this.ctx).getTextRects(i,o),c=h.width,d=h.height;e<0&&(e=0),e>n.globals.gridHeight+d&&(e=n.globals.gridHeight+d/2),void 0===n.globals.dataLabelsRects[a]&&(n.globals.dataLabelsRects[a]=[]),n.globals.dataLabelsRects[a].push({x:t,y:e,width:c,height:d});var g=n.globals.dataLabelsRects[a].length-2,u=void 0!==n.globals.lastDrawnDataLabelsIndexes[a]?n.globals.lastDrawnDataLabelsIndexes[a][n.globals.lastDrawnDataLabelsIndexes[a].length-1]:0;if(void 0!==n.globals.dataLabelsRects[a][g]){var p=n.globals.dataLabelsRects[a][u];(t>p.x+p.width+2||e>p.y+p.height+2||t+c<p.x)&&(l=!0)}return(0===s||r)&&(l=!0),{x:t,y:e,textRects:h,drawnextLabel:l}}},{key:\\\"drawDataLabel\\\",value:function(t,e,i){var a=this,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:2,r=this.w,o=new b(this.ctx),n=r.config.dataLabels,l=0,h=0,c=i,d=null;if(!n.enabled||!Array.isArray(t.x))return d;d=o.group({class:\\\"apexcharts-data-labels\\\"});for(var g=0;g<t.x.length;g++)if(l=t.x[g]+n.offsetX,h=t.y[g]+n.offsetY+s,!isNaN(l)){1===i&&0===g&&(c=0),1===i&&1===g&&(c=1);var u=r.globals.series[e][c],p=\\\"\\\",f=function(t){return r.config.dataLabels.formatter(t,{ctx:a.ctx,seriesIndex:e,dataPointIndex:c,w:r})};if(\\\"bubble\\\"===r.config.chart.type){p=f(u=r.globals.seriesZ[e][c]),h=t.y[g];var x=new T(this.ctx),v=x.centerTextInBubble(h,e,c);h=v.y}else void 0!==u&&(p=f(u));this.plotDataLabelsText({x:l,y:h,text:p,i:e,j:c,parent:d,offsetCorrection:!0,dataLabelsConfig:r.config.dataLabels})}return d}},{key:\\\"plotDataLabelsText\\\",value:function(t){var e=this.w,i=new b(this.ctx),a=t.x,s=t.y,r=t.i,o=t.j,n=t.text,l=t.textAnchor,h=t.fontSize,c=t.parent,d=t.dataLabelsConfig,g=t.color,u=t.alwaysDrawDataLabel,p=t.offsetCorrection;if(!(Array.isArray(e.config.dataLabels.enabledOnSeries)&&e.config.dataLabels.enabledOnSeries.indexOf(r)<0)){var f={x:a,y:s,drawnextLabel:!0};p&&(f=this.dataLabelsCorrection(a,s,n,r,o,u,parseInt(d.style.fontSize,10))),e.globals.zoomed||(a=f.x,s=f.y),f.textRects&&(a<-10-f.textRects.width||a>e.globals.gridWidth+f.textRects.width+10)&&(n=\\\"\\\");var v=e.globals.dataLabels.style.colors[r];((\\\"bar\\\"===e.config.chart.type||\\\"rangeBar\\\"===e.config.chart.type)&&e.config.plotOptions.bar.distributed||e.config.dataLabels.distributed)&&(v=e.globals.dataLabels.style.colors[o]),\\\"function\\\"==typeof v&&(v=v({series:e.globals.series,seriesIndex:r,dataPointIndex:o,w:e})),g&&(v=g);var m=d.offsetX,y=d.offsetY;if(\\\"bar\\\"!==e.config.chart.type&&\\\"rangeBar\\\"!==e.config.chart.type||(m=0,y=0),f.drawnextLabel){var w=i.drawText({width:100,height:parseInt(d.style.fontSize,10),x:a+m,y:s+y,foreColor:v,textAnchor:l||d.textAnchor,text:n,fontSize:h||d.style.fontSize,fontFamily:d.style.fontFamily,fontWeight:d.style.fontWeight||\\\"normal\\\"});if(w.attr({class:\\\"apexcharts-datalabel\\\",cx:a,cy:s}),d.dropShadow.enabled){var k=d.dropShadow;new x(this.ctx).dropShadow(w,k)}c.add(w),void 0===e.globals.lastDrawnDataLabelsIndexes[r]&&(e.globals.lastDrawnDataLabelsIndexes[r]=[]),e.globals.lastDrawnDataLabelsIndexes[r].push(o)}}}},{key:\\\"addBackgroundToDataLabel\\\",value:function(t,e){var i=this.w,a=i.config.dataLabels.background,s=a.padding,r=a.padding/2,o=e.width,n=e.height,l=new b(this.ctx).drawRect(e.x-s,e.y-r/2,o+2*s,n+r,a.borderRadius,\\\"transparent\\\"===i.config.chart.background?\\\"#fff\\\":i.config.chart.background,a.opacity,a.borderWidth,a.borderColor);a.dropShadow.enabled&&new x(this.ctx).dropShadow(l,a.dropShadow);return l}},{key:\\\"dataLabelsBackground\\\",value:function(){var t=this.w;if(\\\"bubble\\\"!==t.config.chart.type)for(var e=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-datalabels text\\\"),i=0;i<e.length;i++){var a=e[i],s=a.getBBox(),r=null;if(s.width&&s.height&&(r=this.addBackgroundToDataLabel(a,s)),r){a.parentNode.insertBefore(r.node,a);var o=a.getAttribute(\\\"fill\\\");t.config.chart.animations.enabled&&!t.globals.resized&&!t.globals.dataChanged?r.animate().attr({fill:o}):r.attr({fill:o}),a.setAttribute(\\\"fill\\\",t.config.dataLabels.background.foreColor)}}}},{key:\\\"bringForward\\\",value:function(){for(var t=this.w,e=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-datalabels\\\"),i=t.globals.dom.baseEl.querySelector(\\\".apexcharts-plot-series:last-child\\\"),a=0;a<e.length;a++)i&&i.insertBefore(e[a],i.nextSibling)}}]),t}(),I=function(){function t(e){a(this,t),this.w=e.w,this.barCtx=e}return r(t,[{key:\\\"handleBarDataLabels\\\",value:function(t){var e=t.x,i=t.y,a=t.y1,s=t.y2,r=t.i,o=t.j,n=t.realIndex,l=t.series,h=t.barHeight,c=t.barWidth,d=t.barYPosition,g=t.visibleSeries,u=t.renderedPath,p=this.w,f=new b(this.barCtx.ctx),x=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[n]:this.barCtx.strokeWidth,v=e+parseFloat(c*g),m=i+parseFloat(h*g);p.globals.isXNumeric&&!p.globals.isBarHorizontal&&(v=e+parseFloat(c*(g+1)),m=i+parseFloat(h*(g+1))-x);var y=e,w=i,k={},A=p.config.dataLabels,S=this.barCtx.barOptions.dataLabels;void 0!==d&&this.barCtx.isTimelineBar&&(m=d,w=d);var C=A.offsetX,L=A.offsetY,P={width:0,height:0};if(p.config.dataLabels.enabled){var T=this.barCtx.series[r][o];P=f.getTextRects(p.globals.yLabelFormatters[0](T),parseFloat(A.style.fontSize))}var M={x:e,y:i,i:r,j:o,renderedPath:u,bcx:v,bcy:m,barHeight:h,barWidth:c,textRects:P,strokeWidth:x,dataLabelsX:y,dataLabelsY:w,barDataLabelsConfig:S,offX:C,offY:L};return k=this.barCtx.isHorizontal?this.calculateBarsDataLabelsPosition(M):this.calculateColumnsDataLabelsPosition(M),u.attr({cy:k.bcy,cx:k.bcx,j:o,val:l[r][o],barHeight:h,barWidth:c}),this.drawCalculatedDataLabels({x:k.dataLabelsX,y:k.dataLabelsY,val:this.barCtx.isTimelineBar?[a,s]:l[r][o],i:n,j:o,barWidth:c,barHeight:h,textRects:P,dataLabelsConfig:A})}},{key:\\\"calculateColumnsDataLabelsPosition\\\",value:function(t){var e,i=this.w,a=t.i,s=t.j,r=t.y,o=t.bcx,n=t.barWidth,l=t.barHeight,h=t.textRects,c=t.dataLabelsY,d=t.barDataLabelsConfig,g=t.strokeWidth,u=t.offX,p=t.offY;l=Math.abs(l);var f=\\\"vertical\\\"===i.config.plotOptions.bar.dataLabels.orientation;o-=g/2;var x=i.globals.gridWidth/i.globals.dataPoints;if(e=i.globals.isXNumeric?o-n/2+u:o-x+n/2+u,f){e=e+h.height/2-g/2-2}var b=this.barCtx.series[a][s]<0;\\\"rounded\\\"!==i.config.plotOptions.bar.startingShape&&\\\"rounded\\\"!==i.config.plotOptions.bar.endingShape||0===a||(r-=i.config.plotOptions.bar.borderRadius);var v=r;switch(this.barCtx.isReversed&&(v=r-l+(b?2*l:0),r-=l),d.position){case\\\"center\\\":c=f?b?v+l/2+p:v+l/2-p:b?v-l/2+h.height/2+p:v+l/2+h.height/3-p;break;case\\\"bottom\\\":c=f?b?v+l+p:v+l-p:b?v-l+h.height+g+p:v+l-h.height/2+g-p;break;case\\\"top\\\":c=f?b?v+p:v-p:b?v-h.height/2-p:v+h.height+p}return i.config.chart.stacked||(c<0?c=0+g:c+h.height/3>i.globals.gridHeight&&(c=i.globals.gridHeight-g)),{bcx:o,bcy:r,dataLabelsX:e,dataLabelsY:c}}},{key:\\\"calculateBarsDataLabelsPosition\\\",value:function(t){var e=this.w,i=t.x,a=t.i,s=t.j,r=t.bcy,o=t.barHeight,n=t.barWidth,l=t.textRects,h=t.dataLabelsX,c=t.strokeWidth,d=t.barDataLabelsConfig,g=t.offX,u=t.offY,p=e.globals.gridHeight/e.globals.dataPoints;n=Math.abs(n);var f=r-(this.barCtx.isTimelineBar?0:p)+o/2+l.height/2+u-3,x=this.barCtx.series[a][s]<0,b=i;switch(this.barCtx.isReversed&&(b=i+n-(x?2*n:0),i=e.globals.gridWidth-n),d.position){case\\\"center\\\":h=x?b+n/2-g:Math.max(l.width/2,b-n/2)+g;break;case\\\"bottom\\\":h=x?b+n-c-Math.round(l.width/2)-g:b-n+c+Math.round(l.width/2)+g;break;case\\\"top\\\":h=x?b-c+Math.round(l.width/2)-g:b-c-Math.round(l.width/2)+g}return e.config.chart.stacked||(h<0?h=h+l.width+c:h+l.width/2>e.globals.gridWidth&&(h=e.globals.gridWidth-l.width-c)),{bcx:i,bcy:r,dataLabelsX:h,dataLabelsY:f}}},{key:\\\"drawCalculatedDataLabels\\\",value:function(t){var i=t.x,a=t.y,s=t.val,r=t.i,o=t.j,n=t.textRects,l=t.barHeight,h=t.barWidth,c=t.dataLabelsConfig,d=this.w,g=\\\"rotate(0)\\\";\\\"vertical\\\"===d.config.plotOptions.bar.dataLabels.orientation&&(g=\\\"rotate(-90, \\\".concat(i,\\\", \\\").concat(a,\\\")\\\"));var u=new M(this.barCtx.ctx),p=new b(this.barCtx.ctx),f=c.formatter,x=null,v=d.globals.collapsedSeriesIndices.indexOf(r)>-1;if(c.enabled&&!v){x=p.group({class:\\\"apexcharts-data-labels\\\",transform:g});var m=\\\"\\\";void 0!==s&&(m=f(s,{seriesIndex:r,dataPointIndex:o,w:d}));var y=d.globals.series[r][o]<0,w=d.config.plotOptions.bar.dataLabels.position;if(\\\"vertical\\\"===d.config.plotOptions.bar.dataLabels.orientation&&(\\\"top\\\"===w&&(c.textAnchor=y?\\\"end\\\":\\\"start\\\"),\\\"center\\\"===w&&(c.textAnchor=\\\"middle\\\"),\\\"bottom\\\"===w&&(c.textAnchor=y?\\\"end\\\":\\\"start\\\")),this.barCtx.isTimelineBar&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels)h<p.getTextRects(m,parseFloat(c.style.fontSize)).width&&(m=\\\"\\\");d.config.chart.stacked&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels&&(this.barCtx.isHorizontal?n.width/1.6>Math.abs(h)&&(m=\\\"\\\"):n.height/1.6>Math.abs(l)&&(m=\\\"\\\"));var k=e({},c);this.barCtx.isHorizontal&&s<0&&(\\\"start\\\"===c.textAnchor?k.textAnchor=\\\"end\\\":\\\"end\\\"===c.textAnchor&&(k.textAnchor=\\\"start\\\")),u.plotDataLabelsText({x:i,y:a,text:m,i:r,j:o,parent:x,dataLabelsConfig:k,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return x}}]),t}(),z=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.legendInactiveClass=\\\"legend-mouseover-inactive\\\"}return r(t,[{key:\\\"getAllSeriesEls\\\",value:function(){return this.w.globals.dom.baseEl.getElementsByClassName(\\\"apexcharts-series\\\")}},{key:\\\"getSeriesByName\\\",value:function(t){return this.w.globals.dom.baseEl.querySelector(\\\".apexcharts-inner .apexcharts-series[seriesName='\\\".concat(p.escapeString(t),\\\"']\\\"))}},{key:\\\"isSeriesHidden\\\",value:function(t){var e=this.getSeriesByName(t),i=parseInt(e.getAttribute(\\\"data:realIndex\\\"),10);return{isHidden:e.classList.contains(\\\"apexcharts-series-collapsed\\\"),realIndex:i}}},{key:\\\"addCollapsedClassToSeries\\\",value:function(t,e){var i=this.w;function a(i){for(var a=0;a<i.length;a++)i[a].index===e&&t.node.classList.add(\\\"apexcharts-series-collapsed\\\")}a(i.globals.collapsedSeries),a(i.globals.ancillaryCollapsedSeries)}},{key:\\\"toggleSeries\\\",value:function(t){var e=this.isSeriesHidden(t);return this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,e.isHidden),e.isHidden}},{key:\\\"showSeries\\\",value:function(t){var e=this.isSeriesHidden(t);e.isHidden&&this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,!0)}},{key:\\\"hideSeries\\\",value:function(t){var e=this.isSeriesHidden(t);e.isHidden||this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,!1)}},{key:\\\"resetSeries\\\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=this.w,s=p.clone(a.globals.initialSeries);a.globals.previousPaths=[],i?(a.globals.collapsedSeries=[],a.globals.ancillaryCollapsedSeries=[],a.globals.collapsedSeriesIndices=[],a.globals.ancillaryCollapsedSeriesIndices=[]):s=this.emptyCollapsedSeries(s),a.config.series=s,t&&(e&&(a.globals.zoomed=!1,this.ctx.updateHelpers.revertDefaultAxisMinMax()),this.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled))}},{key:\\\"emptyCollapsedSeries\\\",value:function(t){for(var e=this.w,i=0;i<t.length;i++)e.globals.collapsedSeriesIndices.indexOf(i)>-1&&(t[i].data=[]);return t}},{key:\\\"toggleSeriesOnHover\\\",value:function(t,e){var i=this.w,a=i.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-series, .apexcharts-datalabels\\\");if(\\\"mousemove\\\"===t.type){var s=parseInt(e.getAttribute(\\\"rel\\\"),10)-1,r=null,o=null;i.globals.axisCharts||\\\"radialBar\\\"===i.config.chart.type?i.globals.axisCharts?(r=i.globals.dom.baseEl.querySelector(\\\".apexcharts-series[data\\\\\\\\:realIndex='\\\".concat(s,\\\"']\\\")),o=i.globals.dom.baseEl.querySelector(\\\".apexcharts-datalabels[data\\\\\\\\:realIndex='\\\".concat(s,\\\"']\\\"))):r=i.globals.dom.baseEl.querySelector(\\\".apexcharts-series[rel='\\\".concat(s+1,\\\"']\\\")):r=i.globals.dom.baseEl.querySelector(\\\".apexcharts-series[rel='\\\".concat(s+1,\\\"'] path\\\"));for(var n=0;n<a.length;n++)a[n].classList.add(this.legendInactiveClass);null!==r&&(i.globals.axisCharts||r.parentNode.classList.remove(this.legendInactiveClass),r.classList.remove(this.legendInactiveClass),null!==o&&o.classList.remove(this.legendInactiveClass))}else if(\\\"mouseout\\\"===t.type)for(var l=0;l<a.length;l++)a[l].classList.remove(this.legendInactiveClass)}},{key:\\\"highlightRangeInSeries\\\",value:function(t,e){var i=this,a=this.w,s=a.globals.dom.baseEl.getElementsByClassName(\\\"apexcharts-heatmap-rect\\\"),r=function(t){for(var e=0;e<s.length;e++)s[e].classList[t](i.legendInactiveClass)};if(\\\"mousemove\\\"===t.type){var o=parseInt(e.getAttribute(\\\"rel\\\"),10)-1;r(\\\"add\\\"),function(t){for(var e=0;e<s.length;e++){var a=parseInt(s[e].getAttribute(\\\"val\\\"),10);a>=t.from&&a<=t.to&&s[e].classList.remove(i.legendInactiveClass)}}(a.config.plotOptions.heatmap.colorScale.ranges[o])}else\\\"mouseout\\\"===t.type&&r(\\\"remove\\\")}},{key:\\\"getActiveConfigSeriesIndex\\\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\\\"asc\\\",i=this.w,a=0;if(i.config.series.length>1)for(var s=i.config.series.map((function(e,a){var s=!1;return t&&(s=\\\"bar\\\"===i.config.series[a].type||\\\"column\\\"===i.config.series[a].type),e.data&&e.data.length>0&&!s?a:-1})),r=\\\"asc\\\"===e?0:s.length-1;\\\"asc\\\"===e?r<s.length:r>=0;\\\"asc\\\"===e?r++:r--)if(-1!==s[r]){a=s[r];break}return a}},{key:\\\"getPreviousPaths\\\",value:function(){var t=this.w;function e(e,i,a){for(var s=e[i].childNodes,r={type:a,paths:[],realIndex:e[i].getAttribute(\\\"data:realIndex\\\")},o=0;o<s.length;o++)if(s[o].hasAttribute(\\\"pathTo\\\")){var n=s[o].getAttribute(\\\"pathTo\\\");r.paths.push({d:n})}t.globals.previousPaths.push(r)}t.globals.previousPaths=[];[\\\"line\\\",\\\"area\\\",\\\"bar\\\",\\\"rangebar\\\",\\\"candlestick\\\",\\\"radar\\\"].forEach((function(i){for(var a,s=(a=i,t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-\\\".concat(a,\\\"-series .apexcharts-series\\\"))),r=0;r<s.length;r++)e(s,r,i)})),this.handlePrevBubbleScatterPaths(\\\"bubble\\\"),this.handlePrevBubbleScatterPaths(\\\"scatter\\\");var i=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-\\\".concat(t.config.chart.type,\\\" .apexcharts-series\\\"));if(i.length>0)for(var a=function(e){for(var i=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-\\\".concat(t.config.chart.type,\\\" .apexcharts-series[data\\\\\\\\:realIndex='\\\").concat(e,\\\"'] rect\\\")),a=[],s=function(t){var e=function(e){return i[t].getAttribute(e)},s={x:parseFloat(e(\\\"x\\\")),y:parseFloat(e(\\\"y\\\")),width:parseFloat(e(\\\"width\\\")),height:parseFloat(e(\\\"height\\\"))};a.push({rect:s,color:i[t].getAttribute(\\\"color\\\")})},r=0;r<i.length;r++)s(r);t.globals.previousPaths.push(a)},s=0;s<i.length;s++)a(s);t.globals.axisCharts||(t.globals.previousPaths=t.globals.series)}},{key:\\\"handlePrevBubbleScatterPaths\\\",value:function(t){var e=this.w,i=e.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-\\\".concat(t,\\\"-series .apexcharts-series\\\"));if(i.length>0)for(var a=0;a<i.length;a++){for(var s=e.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-\\\".concat(t,\\\"-series .apexcharts-series[data\\\\\\\\:realIndex='\\\").concat(a,\\\"'] circle\\\")),r=[],o=0;o<s.length;o++)r.push({x:s[o].getAttribute(\\\"cx\\\"),y:s[o].getAttribute(\\\"cy\\\"),r:s[o].getAttribute(\\\"r\\\")});e.globals.previousPaths.push(r)}}},{key:\\\"clearPreviousPaths\\\",value:function(){var t=this.w;t.globals.previousPaths=[],t.globals.allSeriesCollapsed=!1}},{key:\\\"handleNoData\\\",value:function(){var t=this.w,e=t.config.noData,i=new b(this.ctx),a=t.globals.svgWidth/2,s=t.globals.svgHeight/2,r=\\\"middle\\\";if(t.globals.noData=!0,t.globals.animationEnded=!0,\\\"left\\\"===e.align?(a=10,r=\\\"start\\\"):\\\"right\\\"===e.align&&(a=t.globals.svgWidth-10,r=\\\"end\\\"),\\\"top\\\"===e.verticalAlign?s=50:\\\"bottom\\\"===e.verticalAlign&&(s=t.globals.svgHeight-50),a+=e.offsetX,s=s+parseInt(e.style.fontSize,10)+2+e.offsetY,void 0!==e.text&&\\\"\\\"!==e.text){var o=i.drawText({x:a,y:s,text:e.text,textAnchor:r,fontSize:e.style.fontSize,fontFamily:e.style.fontFamily,foreColor:e.style.color,opacity:1,class:\\\"apexcharts-text-nodata\\\"});t.globals.dom.Paper.add(o)}}},{key:\\\"setNullSeriesToZeroValues\\\",value:function(t){for(var e=this.w,i=0;i<t.length;i++)if(0===t[i].length)for(var a=0;a<t[e.globals.maxValsInArrayIndex].length;a++)t[i].push(0);return t}},{key:\\\"hasAllSeriesEqualX\\\",value:function(){for(var t=!0,e=this.w,i=this.filteredSeriesX(),a=0;a<i.length-1;a++)if(i[a][0]!==i[a+1][0]){t=!1;break}return e.globals.allSeriesHasEqualX=t,t}},{key:\\\"filteredSeriesX\\\",value:function(){var t=this.w.globals.seriesX.map((function(t){return t.length>0?t:[]}));return t}}]),t}(),X=function(){function t(e){a(this,t),this.w=e.w,this.barCtx=e}return r(t,[{key:\\\"initVariables\\\",value:function(t){var e=this.w;this.barCtx.series=t,this.barCtx.totalItems=0,this.barCtx.seriesLen=0,this.barCtx.visibleI=-1,this.barCtx.visibleItems=1;for(var i=0;i<t.length;i++)if(t[i].length>0&&(this.barCtx.seriesLen=this.barCtx.seriesLen+1,this.barCtx.totalItems+=t[i].length),e.globals.isXNumeric)for(var a=0;a<t[i].length;a++)e.globals.seriesX[i][a]>e.globals.minX&&e.globals.seriesX[i][a]<e.globals.maxX&&this.barCtx.visibleItems++;else this.barCtx.visibleItems=e.globals.dataPoints;0===this.barCtx.seriesLen&&(this.barCtx.seriesLen=1),this.barCtx.zeroSerieses=[],this.barCtx.radiusOnSeriesNumber=t.length-1,e.globals.comboCharts||this.checkZeroSeries({series:t})}},{key:\\\"initialPositions\\\",value:function(){var t,e,i,a,s,r,o,n,l=this.w,h=l.globals.dataPoints;this.barCtx.isTimelineBar&&(h=l.globals.labels.length);var c=this.barCtx.seriesLen;if(l.config.plotOptions.bar.rangeBarGroupRows&&(c=1),this.barCtx.isHorizontal)s=(i=l.globals.gridHeight/h)/c,l.globals.isXNumeric&&(s=(i=l.globals.gridHeight/this.barCtx.totalItems)/this.barCtx.seriesLen),s=s*parseInt(this.barCtx.barOptions.barHeight,10)/100,n=this.barCtx.baseLineInvertedY+l.globals.padHorizontal+(this.barCtx.isReversed?l.globals.gridWidth:0)-(this.barCtx.isReversed?2*this.barCtx.baseLineInvertedY:0),e=(i-s*this.barCtx.seriesLen)/2;else{if(a=l.globals.gridWidth/this.barCtx.visibleItems,l.config.xaxis.convertedCatToNumeric&&(a=l.globals.gridWidth/l.globals.dataPoints),r=a/this.barCtx.seriesLen*parseInt(this.barCtx.barOptions.columnWidth,10)/100,l.globals.isXNumeric){var d=this.barCtx.xRatio;l.config.xaxis.convertedCatToNumeric&&(d=this.barCtx.initialXRatio),l.globals.minXDiff&&.5!==l.globals.minXDiff&&l.globals.minXDiff/d>0&&(a=l.globals.minXDiff/d),(r=a/this.barCtx.seriesLen*parseInt(this.barCtx.barOptions.columnWidth,10)/100)<1&&(r=1)}o=l.globals.gridHeight-this.barCtx.baseLineY[this.barCtx.yaxisIndex]-(this.barCtx.isReversed?l.globals.gridHeight:0)+(this.barCtx.isReversed?2*this.barCtx.baseLineY[this.barCtx.yaxisIndex]:0),t=l.globals.padHorizontal+(a-r*this.barCtx.seriesLen)/2}return{x:t,y:e,yDivision:i,xDivision:a,barHeight:s,barWidth:r,zeroH:o,zeroW:n}}},{key:\\\"getPathFillColor\\\",value:function(t,e,i,a){var s=this.w,r=new L(this.barCtx.ctx),o=null,n=this.barCtx.barOptions.distributed?i:e;this.barCtx.barOptions.colors.ranges.length>0&&this.barCtx.barOptions.colors.ranges.map((function(a){t[e][i]>=a.from&&t[e][i]<=a.to&&(o=a.color)}));return s.config.series[e].data[i]&&s.config.series[e].data[i].fillColor&&(o=s.config.series[e].data[i].fillColor),r.fillPath({seriesNumber:this.barCtx.barOptions.distributed?n:a,dataPointIndex:i,color:o,value:t[e][i]})}},{key:\\\"getStrokeWidth\\\",value:function(t,e,i){var a=0,s=this.w;return void 0===this.barCtx.series[t][e]||null===this.barCtx.series[t][e]?this.barCtx.isNullValue=!0:this.barCtx.isNullValue=!1,s.config.stroke.show&&(this.barCtx.isNullValue||(a=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[i]:this.barCtx.strokeWidth)),a}},{key:\\\"barBackground\\\",value:function(t){var e=t.j,i=t.i,a=t.x1,s=t.x2,r=t.y1,o=t.y2,n=t.elSeries,l=this.w,h=new b(this.barCtx.ctx),c=new z(this.barCtx.ctx).getActiveConfigSeriesIndex();if(this.barCtx.barOptions.colors.backgroundBarColors.length>0&&c===i){e>=this.barCtx.barOptions.colors.backgroundBarColors.length&&(e-=this.barCtx.barOptions.colors.backgroundBarColors.length);var d=this.barCtx.barOptions.colors.backgroundBarColors[e],g=h.drawRect(void 0!==a?a:0,void 0!==r?r:0,void 0!==s?s:l.globals.gridWidth,void 0!==o?o:l.globals.gridHeight,this.barCtx.barOptions.colors.backgroundBarRadius,d,this.barCtx.barOptions.colors.backgroundBarOpacity);n.add(g),g.node.classList.add(\\\"apexcharts-backgroundBar\\\")}}},{key:\\\"getColumnPaths\\\",value:function(t){var e=t.barWidth,i=t.barXPosition,a=t.yRatio,s=t.y1,r=t.y2,o=t.strokeWidth,n=t.series,l=t.realIndex,h=t.i,c=t.j,d=t.w,g=new b(this.barCtx.ctx);(o=Array.isArray(o)?o[l]:o)&&0!==n[h][c]||(o=0),0===n[h][c]&&(e=0);var u={barWidth:e,strokeWidth:o,yRatio:a,barXPosition:i,y1:s,y2:r},p=this.getRoundedBars(d,u,n,h,c),f=i,x=i+e,v=g.move(f,p.y1),m=g.move(f,p.y1),y=g.line(x-o,p.y1);return d.globals.previousPaths.length>0&&(m=this.barCtx.getPreviousPath(l,c,!1)),v=v+g.line(f,p.y2)+p.startingShape+g.line(x-o,p.y2)+y+p.endingShape+\\\"z\\\",m=m+g.line(f,p.y1)+y+y+y+y+y+g.line(f,p.y1),d.config.chart.stacked&&(this.barCtx.yArrj.push(p.y2),this.barCtx.yArrjF.push(Math.abs(s-p.y2)),this.barCtx.yArrjVal.push(this.barCtx.series[h][c])),{pathTo:v,pathFrom:m}}},{key:\\\"getBarpaths\\\",value:function(t){var e=t.barYPosition,i=t.barHeight,a=t.x1,s=t.x2,r=t.strokeWidth,o=t.series,n=t.realIndex,l=t.i,h=t.j,c=t.w,d=new b(this.barCtx.ctx);(r=Array.isArray(r)?r[n]:r)&&!o[l][h]||(r=0),0===o[l][h]&&(i=0);var g={barHeight:i,strokeWidth:r,barYPosition:e,x2:s,x1:a},u=this.getRoundedBars(c,g,o,l,h),p=d.move(u.x1,e),f=d.move(u.x1,e);c.globals.previousPaths.length>0&&(f=this.barCtx.getPreviousPath(n,h,!1));var x=e,v=e+i,m=d.line(u.x1,v-r);return p=p+d.line(u.x2,x)+u.startingShape+d.line(u.x2,v-r)+m+m+u.endingShape+\\\"z\\\",f=f+d.line(u.x1,x)+m+m+m+m+m+d.line(u.x1,x),c.config.chart.stacked&&(this.barCtx.xArrj.push(u.x2),this.barCtx.xArrjF.push(Math.abs(u.x1-u.x2)),this.barCtx.xArrjVal.push(this.barCtx.series[l][h])),{pathTo:p,pathFrom:f}}},{key:\\\"getRoundedBars\\\",value:function(t,e,i,a,s){var r=new b(this.barCtx.ctx),o=0,n=t.config.plotOptions.bar.borderRadius;Array.isArray(n)?o=n[a>n.length-1?n.length-1:a]:o=n;if(this.barCtx.isHorizontal){var l=\\\"\\\",h=\\\"\\\",c=o,d=o,g=e.x1,u=e.x2;if(Math.abs(e.x1-e.x2)<o&&(o=Math.abs(e.x1-e.x2)),void 0!==i[a][s]||null!==i[a][s]){var p=this.barCtx.isReversed?i[a][s]>0:i[a][s]<0;p&&(o*=-1),c=d=o,\\\"flat\\\"===this.barCtx.barOptions.startingShape&&(c=0),\\\"flat\\\"===this.barCtx.barOptions.endingShape&&(d=0),\\\"flat\\\"===this.barCtx.barOptions.startingShape&&\\\"flat\\\"===this.barCtx.barOptions.endingShape&&(o=0),t.config.chart.stacked&&i.length>1&&0!==a?\\\"flat\\\"===this.barCtx.barOptions.endingShape||\\\"flat\\\"===this.barCtx.barOptions.startingShape?g+=o:g+=2*d:(g+=d,u-=c),l=r.quadraticCurve(u+c,e.barYPosition,u+c,e.barYPosition+(p?-1*c:c))+r.line(u+c,e.barYPosition+e.barHeight-e.strokeWidth-(p?-1*c:c))+r.quadraticCurve(u+c,e.barYPosition+e.barHeight-e.strokeWidth,u,e.barYPosition+e.barHeight-e.strokeWidth),h=r.quadraticCurve(g-d,e.barYPosition+e.barHeight-e.strokeWidth,g-d,e.barYPosition+e.barHeight-e.strokeWidth-(p?-1*d:d))+r.line(g-d,e.barYPosition+(p?-1*d:d))+r.quadraticCurve(g-d,e.barYPosition,g,e.barYPosition)}return{startingShape:l,endingShape:h,x1:g,x2:u}}var f=\\\"\\\",x=\\\"\\\",v=o,m=o,y=e.y2,w=e.y1;if(Math.abs(e.y1-e.y2)<o&&(o=Math.abs(e.y1-e.y2)),void 0!==i[a][s]||null!==i[a][s]){var k=i[a][s]<0;k&&(o*=-1),v=m=o,\\\"flat\\\"===this.barCtx.barOptions.startingShape&&(v=0),\\\"flat\\\"===this.barCtx.barOptions.endingShape&&(m=0),\\\"flat\\\"===this.barCtx.barOptions.startingShape&&\\\"flat\\\"===this.barCtx.barOptions.endingShape&&(o=0),t.config.chart.stacked&&i.length>1&&0!==a?\\\"flat\\\"===this.barCtx.barOptions.endingShape||\\\"flat\\\"===this.barCtx.barOptions.startingShape?w-=o:w-=2*m:(w-=m,y+=v),f=r.quadraticCurve(e.barXPosition,y-v,e.barXPosition+(k?-1*v:v),y-v)+r.line(e.barXPosition+e.barWidth-e.strokeWidth-(k?-1*v:v),y-v)+r.quadraticCurve(e.barXPosition+e.barWidth-e.strokeWidth,y-v,e.barXPosition+e.barWidth-e.strokeWidth,y),x=r.quadraticCurve(e.barXPosition+e.barWidth-e.strokeWidth,w+m,e.barXPosition+e.barWidth-e.strokeWidth-(k?-1*m:m),w+m)+r.line(e.barXPosition+(k?-1*m:m),w+m)+r.quadraticCurve(e.barXPosition,w+m,e.barXPosition,w)}return{startingShape:f,endingShape:x,y1:w,y2:y}}},{key:\\\"checkZeroSeries\\\",value:function(t){for(var e=t.series,i=this.w,a=0;a<e.length;a++){for(var s=0,r=0;r<e[i.globals.maxValsInArrayIndex].length;r++)s+=e[a][r];0===s&&this.barCtx.zeroSerieses.push(a)}for(var o=e.length-1;o>=0;o--)this.barCtx.zeroSerieses.indexOf(o)>-1&&o===this.radiusOnSeriesNumber&&(this.barCtx.radiusOnSeriesNumber-=1);for(var n=e.length-1;n>=0;n--)i.globals.collapsedSeriesIndices.indexOf(this.barCtx.radiusOnSeriesNumber)>-1&&(this.barCtx.radiusOnSeriesNumber-=1)}},{key:\\\"getXForValue\\\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=i?e:null;return null!=t&&(a=e+t/this.barCtx.invertedYRatio-2*(this.barCtx.isReversed?t/this.barCtx.invertedYRatio:0)),a}},{key:\\\"getYForValue\\\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=i?e:null;return null!=t&&(a=e-t/this.barCtx.yRatio[this.barCtx.yaxisIndex]+2*(this.barCtx.isReversed?t/this.barCtx.yRatio[this.barCtx.yaxisIndex]:0)),a}},{key:\\\"getGoalValues\\\",value:function(t,e,i,a,s){var r=this,n=this.w,l=[];return n.globals.seriesGoals[a]&&n.globals.seriesGoals[a][s]&&Array.isArray(n.globals.seriesGoals[a][s])&&n.globals.seriesGoals[a][s].forEach((function(a){var s;l.push((o(s={},t,\\\"x\\\"===t?r.getXForValue(a.value,e,!1):r.getYForValue(a.value,i,!1)),o(s,\\\"attrs\\\",a),s))})),l}},{key:\\\"drawGoalLine\\\",value:function(t){var e=t.barXPosition,i=t.barYPosition,a=t.goalX,s=t.goalY,r=t.barWidth,o=t.barHeight,n=new b(this.barCtx.ctx),l=n.group({className:\\\"apexcharts-bar-goals-groups\\\"}),h=null;return this.barCtx.isHorizontal?Array.isArray(a)&&a.forEach((function(t){var e=void 0!==t.attrs.strokeHeight?t.attrs.strokeHeight:o/2,a=i+e+o/2;h=n.drawLine(t.x,a-2*e,t.x,a,t.attrs.strokeColor?t.attrs.strokeColor:void 0,t.attrs.strokeDashArray,t.attrs.strokeWidth?t.attrs.strokeWidth:2,t.attrs.strokeLineCap),l.add(h)})):Array.isArray(s)&&s.forEach((function(t){var i=void 0!==t.attrs.strokeWidth?t.attrs.strokeWidth:r/2,a=e+i+r/2;h=n.drawLine(a-2*i,t.y,a,t.y,t.attrs.strokeColor?t.attrs.strokeColor:void 0,t.attrs.strokeDashArray,t.attrs.strokeHeight?t.attrs.strokeHeight:2,t.attrs.strokeLineCap),l.add(h)})),l}}]),t}(),E=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w;var s=this.w;this.barOptions=s.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=s.config.stroke.width,this.isNullValue=!1,this.isTimelineBar=\\\"datetime\\\"===s.config.xaxis.type&&s.globals.seriesRangeBarTimeline.length,this.xyRatios=i,null!==this.xyRatios&&(this.xRatio=i.xRatio,this.initialXRatio=i.initialXRatio,this.yRatio=i.yRatio,this.invertedXRatio=i.invertedXRatio,this.invertedYRatio=i.invertedYRatio,this.baseLineY=i.baseLineY,this.baseLineInvertedY=i.baseLineInvertedY),this.yaxisIndex=0,this.seriesLen=0,this.barHelpers=new X(this)}return r(t,[{key:\\\"draw\\\",value:function(t,i){var a=this.w,s=new b(this.ctx),r=new y(this.ctx,a);t=r.getLogSeries(t),this.series=t,this.yRatio=r.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t);var o=s.group({class:\\\"apexcharts-bar-series apexcharts-plot-series\\\"});a.config.dataLabels.enabled&&this.totalItems>this.barOptions.dataLabels.maxItems&&console.warn(\\\"WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.\\\");for(var n=0,l=0;n<t.length;n++,l++){var h,c,d,g,u=void 0,f=void 0,x=[],v=[],m=a.globals.comboCharts?i[n]:n,w=s.group({class:\\\"apexcharts-series\\\",rel:n+1,seriesName:p.escapeString(a.globals.seriesNames[m]),\\\"data:realIndex\\\":m});this.ctx.series.addCollapsedClassToSeries(w,m),t[n].length>0&&(this.visibleI=this.visibleI+1);var k=0,A=0;this.yRatio.length>1&&(this.yaxisIndex=m),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed;var S=this.barHelpers.initialPositions();f=S.y,k=S.barHeight,c=S.yDivision,g=S.zeroW,u=S.x,A=S.barWidth,h=S.xDivision,d=S.zeroH,this.horizontal||v.push(u+A/2);for(var C=s.group({class:\\\"apexcharts-datalabels\\\",\\\"data:realIndex\\\":m}),L=s.group({class:\\\"apexcharts-bar-goals-markers\\\",style:\\\"pointer-events: none\\\"}),P=0;P<a.globals.dataPoints;P++){var T=this.barHelpers.getStrokeWidth(n,P,m),M=null,I={indexes:{i:n,j:P,realIndex:m,bc:l},x:u,y:f,strokeWidth:T,elSeries:w};this.isHorizontal?(M=this.drawBarPaths(e(e({},I),{},{barHeight:k,zeroW:g,yDivision:c})),A=this.series[n][P]/this.invertedYRatio):(M=this.drawColumnPaths(e(e({},I),{},{xDivision:h,barWidth:A,zeroH:d})),k=this.series[n][P]/this.yRatio[this.yaxisIndex]);var z=this.barHelpers.drawGoalLine({barXPosition:M.barXPosition,barYPosition:M.barYPosition,goalX:M.goalX,goalY:M.goalY,barHeight:k,barWidth:A});z&&L.add(z),f=M.y,u=M.x,P>0&&v.push(u+A/2),x.push(f);var X=this.barHelpers.getPathFillColor(t,n,P,m);this.renderSeries({realIndex:m,pathFill:X,j:P,i:n,pathFrom:M.pathFrom,pathTo:M.pathTo,strokeWidth:T,elSeries:w,x:u,y:f,series:t,barHeight:k,barWidth:A,elDataLabelsWrap:C,elGoalsMarkers:L,visibleSeries:this.visibleI,type:\\\"bar\\\"})}a.globals.seriesXvalues[m]=v,a.globals.seriesYvalues[m]=x,o.add(w)}return o}},{key:\\\"renderSeries\\\",value:function(t){var e=t.realIndex,i=t.pathFill,a=t.lineFill,s=t.j,r=t.i,o=t.pathFrom,n=t.pathTo,l=t.strokeWidth,h=t.elSeries,c=t.x,d=t.y,g=t.y1,u=t.y2,p=t.series,f=t.barHeight,v=t.barWidth,m=t.barYPosition,y=t.elDataLabelsWrap,w=t.elGoalsMarkers,k=t.visibleSeries,A=t.type,S=this.w,C=new b(this.ctx);a||(a=this.barOptions.distributed?S.globals.stroke.colors[s]:S.globals.stroke.colors[e]),S.config.series[r].data[s]&&S.config.series[r].data[s].strokeColor&&(a=S.config.series[r].data[s].strokeColor),this.isNullValue&&(i=\\\"none\\\");var L=s/S.config.chart.animations.animateGradually.delay*(S.config.chart.animations.speed/S.globals.dataPoints)/2.4,P=C.renderPaths({i:r,j:s,realIndex:e,pathFrom:o,pathTo:n,stroke:a,strokeWidth:l,strokeLineCap:S.config.stroke.lineCap,fill:i,animationDelay:L,initialSpeed:S.config.chart.animations.speed,dataChangeSpeed:S.config.chart.animations.dynamicAnimation.speed,className:\\\"apexcharts-\\\".concat(A,\\\"-area\\\")});P.attr(\\\"clip-path\\\",\\\"url(#gridRectMask\\\".concat(S.globals.cuid,\\\")\\\"));var T=S.config.forecastDataPoints;T.count>0&&s>=S.globals.dataPoints-T.count&&(P.node.setAttribute(\\\"stroke-dasharray\\\",T.dashArray),P.node.setAttribute(\\\"stroke-width\\\",T.strokeWidth),P.node.setAttribute(\\\"fill-opacity\\\",T.fillOpacity)),void 0!==g&&void 0!==u&&(P.attr(\\\"data-range-y1\\\",g),P.attr(\\\"data-range-y2\\\",u)),new x(this.ctx).setSelectionFilter(P,e,s),h.add(P);var M=new I(this).handleBarDataLabels({x:c,y:d,y1:g,y2:u,i:r,j:s,series:p,realIndex:e,barHeight:f,barWidth:v,barYPosition:m,renderedPath:P,visibleSeries:k});return null!==M&&y.add(M),h.add(y),w&&h.add(w),h}},{key:\\\"drawBarPaths\\\",value:function(t){var e=t.indexes,i=t.barHeight,a=t.strokeWidth,s=t.zeroW,r=t.x,o=t.y,n=t.yDivision,l=t.elSeries,h=this.w,c=e.i,d=e.j;h.globals.isXNumeric&&(o=(h.globals.seriesX[c][d]-h.globals.minX)/this.invertedXRatio-i);var g=o+i*this.visibleI;r=this.barHelpers.getXForValue(this.series[c][d],s);var u=this.barHelpers.getBarpaths({barYPosition:g,barHeight:i,x1:s,x2:r,strokeWidth:a,series:this.series,realIndex:e.realIndex,i:c,j:d,w:h});return h.globals.isXNumeric||(o+=n),this.barHelpers.barBackground({j:d,i:c,y1:g-i*this.visibleI,y2:i*this.seriesLen,elSeries:l}),{pathTo:u.pathTo,pathFrom:u.pathFrom,x:r,y:o,goalX:this.barHelpers.getGoalValues(\\\"x\\\",s,null,c,d),barYPosition:g}}},{key:\\\"drawColumnPaths\\\",value:function(t){var e=t.indexes,i=t.x,a=t.y,s=t.xDivision,r=t.barWidth,o=t.zeroH,n=t.strokeWidth,l=t.elSeries,h=this.w,c=e.realIndex,d=e.i,g=e.j,u=e.bc;if(h.globals.isXNumeric){var p=c;h.globals.seriesX[c].length||(p=h.globals.maxValsInArrayIndex),i=(h.globals.seriesX[p][g]-h.globals.minX)/this.xRatio-r*this.seriesLen/2}var f=i+r*this.visibleI;a=this.barHelpers.getYForValue(this.series[d][g],o);var x=this.barHelpers.getColumnPaths({barXPosition:f,barWidth:r,y1:o,y2:a,strokeWidth:n,series:this.series,realIndex:e.realIndex,i:d,j:g,w:h});return h.globals.isXNumeric||(i+=s),this.barHelpers.barBackground({bc:u,j:g,i:d,x1:f-n/2-r*this.visibleI,x2:r*this.seriesLen+n/2,elSeries:l}),{pathTo:x.pathTo,pathFrom:x.pathFrom,x:i,y:a,goalY:this.barHelpers.getGoalValues(\\\"y\\\",null,o,d,g),barXPosition:f}}},{key:\\\"getPreviousPath\\\",value:function(t,e){for(var i,a=this.w,s=0;s<a.globals.previousPaths.length;s++){var r=a.globals.previousPaths[s];r.paths&&r.paths.length>0&&parseInt(r.realIndex,10)===parseInt(t,10)&&void 0!==a.globals.previousPaths[s].paths[e]&&(i=a.globals.previousPaths[s].paths[e].d)}return i}}]),t}(),Y=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.months31=[1,3,5,7,8,10,12],this.months30=[2,4,6,9,11],this.daysCntOfYear=[0,31,59,90,120,151,181,212,243,273,304,334]}return r(t,[{key:\\\"isValidDate\\\",value:function(t){return!isNaN(this.parseDate(t))}},{key:\\\"getTimeStamp\\\",value:function(t){return Date.parse(t)?this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(t).toISOString().substr(0,25)).getTime():new Date(t).getTime():t}},{key:\\\"getDate\\\",value:function(t){return this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(t).toUTCString()):new Date(t)}},{key:\\\"parseDate\\\",value:function(t){var e=Date.parse(t);if(!isNaN(e))return this.getTimeStamp(t);var i=Date.parse(t.replace(/-/g,\\\"/\\\").replace(/[a-z]+/gi,\\\" \\\"));return i=this.getTimeStamp(i)}},{key:\\\"parseDateWithTimezone\\\",value:function(t){return Date.parse(t.replace(/-/g,\\\"/\\\").replace(/[a-z]+/gi,\\\" \\\"))}},{key:\\\"formatDate\\\",value:function(t,e){var i=this.w.globals.locale,a=this.w.config.xaxis.labels.datetimeUTC,s=[\\\"\\\\0\\\"].concat(g(i.months)),r=[\\\"\\\\x01\\\"].concat(g(i.shortMonths)),o=[\\\"\\\\x02\\\"].concat(g(i.days)),n=[\\\"\\\\x03\\\"].concat(g(i.shortDays));function l(t,e){var i=t+\\\"\\\";for(e=e||2;i.length<e;)i=\\\"0\\\"+i;return i}var h=a?t.getUTCFullYear():t.getFullYear();e=(e=(e=e.replace(/(^|[^\\\\\\\\])yyyy+/g,\\\"$1\\\"+h)).replace(/(^|[^\\\\\\\\])yy/g,\\\"$1\\\"+h.toString().substr(2,2))).replace(/(^|[^\\\\\\\\])y/g,\\\"$1\\\"+h);var c=(a?t.getUTCMonth():t.getMonth())+1;e=(e=(e=(e=e.replace(/(^|[^\\\\\\\\])MMMM+/g,\\\"$1\\\"+s[0])).replace(/(^|[^\\\\\\\\])MMM/g,\\\"$1\\\"+r[0])).replace(/(^|[^\\\\\\\\])MM/g,\\\"$1\\\"+l(c))).replace(/(^|[^\\\\\\\\])M/g,\\\"$1\\\"+c);var d=a?t.getUTCDate():t.getDate();e=(e=(e=(e=e.replace(/(^|[^\\\\\\\\])dddd+/g,\\\"$1\\\"+o[0])).replace(/(^|[^\\\\\\\\])ddd/g,\\\"$1\\\"+n[0])).replace(/(^|[^\\\\\\\\])dd/g,\\\"$1\\\"+l(d))).replace(/(^|[^\\\\\\\\])d/g,\\\"$1\\\"+d);var u=a?t.getUTCHours():t.getHours(),p=u>12?u-12:0===u?12:u;e=(e=(e=(e=e.replace(/(^|[^\\\\\\\\])HH+/g,\\\"$1\\\"+l(u))).replace(/(^|[^\\\\\\\\])H/g,\\\"$1\\\"+u)).replace(/(^|[^\\\\\\\\])hh+/g,\\\"$1\\\"+l(p))).replace(/(^|[^\\\\\\\\])h/g,\\\"$1\\\"+p);var f=a?t.getUTCMinutes():t.getMinutes();e=(e=e.replace(/(^|[^\\\\\\\\])mm+/g,\\\"$1\\\"+l(f))).replace(/(^|[^\\\\\\\\])m/g,\\\"$1\\\"+f);var x=a?t.getUTCSeconds():t.getSeconds();e=(e=e.replace(/(^|[^\\\\\\\\])ss+/g,\\\"$1\\\"+l(x))).replace(/(^|[^\\\\\\\\])s/g,\\\"$1\\\"+x);var b=a?t.getUTCMilliseconds():t.getMilliseconds();e=e.replace(/(^|[^\\\\\\\\])fff+/g,\\\"$1\\\"+l(b,3)),b=Math.round(b/10),e=e.replace(/(^|[^\\\\\\\\])ff/g,\\\"$1\\\"+l(b)),b=Math.round(b/10);var v=u<12?\\\"AM\\\":\\\"PM\\\";e=(e=(e=e.replace(/(^|[^\\\\\\\\])f/g,\\\"$1\\\"+b)).replace(/(^|[^\\\\\\\\])TT+/g,\\\"$1\\\"+v)).replace(/(^|[^\\\\\\\\])T/g,\\\"$1\\\"+v.charAt(0));var m=v.toLowerCase();e=(e=e.replace(/(^|[^\\\\\\\\])tt+/g,\\\"$1\\\"+m)).replace(/(^|[^\\\\\\\\])t/g,\\\"$1\\\"+m.charAt(0));var y=-t.getTimezoneOffset(),w=a||!y?\\\"Z\\\":y>0?\\\"+\\\":\\\"-\\\";if(!a){var k=(y=Math.abs(y))%60;w+=l(Math.floor(y/60))+\\\":\\\"+l(k)}e=e.replace(/(^|[^\\\\\\\\])K/g,\\\"$1\\\"+w);var A=(a?t.getUTCDay():t.getDay())+1;return e=(e=(e=(e=(e=e.replace(new RegExp(o[0],\\\"g\\\"),o[A])).replace(new RegExp(n[0],\\\"g\\\"),n[A])).replace(new RegExp(s[0],\\\"g\\\"),s[c])).replace(new RegExp(r[0],\\\"g\\\"),r[c])).replace(/\\\\\\\\(.)/g,\\\"$1\\\")}},{key:\\\"getTimeUnitsfromTimestamp\\\",value:function(t,e,i){var a=this.w;void 0!==a.config.xaxis.min&&(t=a.config.xaxis.min),void 0!==a.config.xaxis.max&&(e=a.config.xaxis.max);var s=this.getDate(t),r=this.getDate(e),o=this.formatDate(s,\\\"yyyy MM dd HH mm ss fff\\\").split(\\\" \\\"),n=this.formatDate(r,\\\"yyyy MM dd HH mm ss fff\\\").split(\\\" \\\");return{minMillisecond:parseInt(o[6],10),maxMillisecond:parseInt(n[6],10),minSecond:parseInt(o[5],10),maxSecond:parseInt(n[5],10),minMinute:parseInt(o[4],10),maxMinute:parseInt(n[4],10),minHour:parseInt(o[3],10),maxHour:parseInt(n[3],10),minDate:parseInt(o[2],10),maxDate:parseInt(n[2],10),minMonth:parseInt(o[1],10)-1,maxMonth:parseInt(n[1],10)-1,minYear:parseInt(o[0],10),maxYear:parseInt(n[0],10)}}},{key:\\\"isLeapYear\\\",value:function(t){return t%4==0&&t%100!=0||t%400==0}},{key:\\\"calculcateLastDaysOfMonth\\\",value:function(t,e,i){return this.determineDaysOfMonths(t,e)-i}},{key:\\\"determineDaysOfYear\\\",value:function(t){var e=365;return this.isLeapYear(t)&&(e=366),e}},{key:\\\"determineRemainingDaysOfYear\\\",value:function(t,e,i){var a=this.daysCntOfYear[e]+i;return e>1&&this.isLeapYear()&&a++,a}},{key:\\\"determineDaysOfMonths\\\",value:function(t,e){var i=30;switch(t=p.monthMod(t),!0){case this.months30.indexOf(t)>-1:2===t&&(i=this.isLeapYear(e)?29:28);break;case this.months31.indexOf(t)>-1:default:i=31}return i}}]),t}(),F=function(t){n(s,E);var i=d(s);function s(){return a(this,s),i.apply(this,arguments)}return r(s,[{key:\\\"draw\\\",value:function(t,i){var a=this.w,s=new b(this.ctx);this.rangeBarOptions=this.w.config.plotOptions.rangeBar,this.series=t,this.seriesRangeStart=a.globals.seriesRangeStart,this.seriesRangeEnd=a.globals.seriesRangeEnd,this.barHelpers.initVariables(t);for(var r=s.group({class:\\\"apexcharts-rangebar-series apexcharts-plot-series\\\"}),o=0;o<t.length;o++){var n,l,h,c=void 0,d=void 0,g=void 0,u=a.globals.comboCharts?i[o]:o,f=s.group({class:\\\"apexcharts-series\\\",seriesName:p.escapeString(a.globals.seriesNames[u]),rel:o+1,\\\"data:realIndex\\\":u});t[o].length>0&&(this.visibleI=this.visibleI+1);var x=0,v=0;this.yRatio.length>1&&(this.yaxisIndex=u);var m=this.barHelpers.initialPositions();d=m.y,h=m.zeroW,c=m.x,v=m.barWidth,n=m.xDivision,l=m.zeroH;for(var y=s.group({class:\\\"apexcharts-datalabels\\\",\\\"data:realIndex\\\":u}),w=s.group({class:\\\"apexcharts-rangebar-goals-markers\\\",style:\\\"pointer-events: none\\\"}),k=0;k<a.globals.dataPoints;k++){var A=this.barHelpers.getStrokeWidth(o,k,u),S=this.seriesRangeStart[o][k],C=this.seriesRangeEnd[o][k],L=null,P=null,T={x:c,y:d,strokeWidth:A,elSeries:f};if(g=m.yDivision,x=m.barHeight,this.isHorizontal){P=d+x*this.visibleI;var M=this.seriesLen;a.config.plotOptions.bar.rangeBarGroupRows&&(M=1);var I=(g-x*M)/2;if(void 0===a.config.series[o].data[k])break;if(this.isTimelineBar&&a.config.series[o].data[k].x){var z=this.detectOverlappingBars({i:o,j:k,barYPosition:P,srty:I,barHeight:x,yDivision:g,initPositions:m});x=z.barHeight,P=z.barYPosition}v=(L=this.drawRangeBarPaths(e({indexes:{i:o,j:k,realIndex:u},barHeight:x,barYPosition:P,zeroW:h,yDivision:g,y1:S,y2:C},T))).barWidth}else x=(L=this.drawRangeColumnPaths(e({indexes:{i:o,j:k,realIndex:u},zeroH:l,barWidth:v,xDivision:n},T))).barHeight;var X=this.barHelpers.drawGoalLine({barXPosition:L.barXPosition,barYPosition:P,goalX:L.goalX,goalY:L.goalY,barHeight:x,barWidth:v});X&&w.add(X),d=L.y,c=L.x;var E=this.barHelpers.getPathFillColor(t,o,k,u),Y=a.globals.stroke.colors[u];this.renderSeries({realIndex:u,pathFill:E,lineFill:Y,j:k,i:o,x:c,y:d,y1:S,y2:C,pathFrom:L.pathFrom,pathTo:L.pathTo,strokeWidth:A,elSeries:f,series:t,barHeight:x,barYPosition:P,barWidth:v,elDataLabelsWrap:y,elGoalsMarkers:w,visibleSeries:this.visibleI,type:\\\"rangebar\\\"})}r.add(f)}return r}},{key:\\\"detectOverlappingBars\\\",value:function(t){var e=t.i,i=t.j,a=t.barYPosition,s=t.srty,r=t.barHeight,o=t.yDivision,n=t.initPositions,l=this.w,h=[],c=l.config.series[e].data[i].rangeName,d=l.config.series[e].data[i].x,g=l.globals.labels.indexOf(d),u=l.globals.seriesRangeBarTimeline[e].findIndex((function(t){return t.x===d&&t.overlaps.length>0}));return a=l.config.plotOptions.bar.rangeBarGroupRows?s+o*g:s+r*this.visibleI+o*g,u>-1&&!l.config.plotOptions.bar.rangeBarOverlap&&(h=l.globals.seriesRangeBarTimeline[e][u].overlaps).indexOf(c)>-1&&(a=(r=n.barHeight/h.length)*this.visibleI+o*(100-parseInt(this.barOptions.barHeight,10))/100/2+r*(this.visibleI+h.indexOf(c))+o*g),{barYPosition:a,barHeight:r}}},{key:\\\"drawRangeColumnPaths\\\",value:function(t){var e=t.indexes,i=t.x;t.strokeWidth;var a=t.xDivision,s=t.barWidth,r=t.zeroH,o=this.w,n=e.i,l=e.j,h=this.yRatio[this.yaxisIndex],c=e.realIndex,d=this.getRangeValue(c,l),g=Math.min(d.start,d.end),u=Math.max(d.start,d.end);o.globals.isXNumeric&&(i=(o.globals.seriesX[n][l]-o.globals.minX)/this.xRatio-s/2);var p=i+s*this.visibleI;void 0===this.series[n][l]||null===this.series[n][l]?g=r:(g=r-g/h,u=r-u/h);var f=Math.abs(u-g),x=this.barHelpers.getColumnPaths({barXPosition:p,barWidth:s,y1:g,y2:u,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,realIndex:e.realIndex,i:c,j:l,w:o});return o.globals.isXNumeric||(i+=a),{pathTo:x.pathTo,pathFrom:x.pathFrom,barHeight:f,x:i,y:u,goalY:this.barHelpers.getGoalValues(\\\"y\\\",null,r,n,l),barXPosition:p}}},{key:\\\"drawRangeBarPaths\\\",value:function(t){var e=t.indexes,i=t.y,a=t.y1,s=t.y2,r=t.yDivision,o=t.barHeight,n=t.barYPosition,l=t.zeroW,h=this.w,c=l+a/this.invertedYRatio,d=l+s/this.invertedYRatio,g=Math.abs(d-c),u=this.barHelpers.getBarpaths({barYPosition:n,barHeight:o,x1:c,x2:d,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,i:e.realIndex,realIndex:e.realIndex,j:e.j,w:h});return h.globals.isXNumeric||(i+=r),{pathTo:u.pathTo,pathFrom:u.pathFrom,barWidth:g,x:d,goalX:this.barHelpers.getGoalValues(\\\"x\\\",l,null,e.realIndex,e.j),y:i}}},{key:\\\"getRangeValue\\\",value:function(t,e){var i=this.w;return{start:i.globals.seriesRangeStart[t][e],end:i.globals.seriesRangeEnd[t][e]}}},{key:\\\"getTooltipValues\\\",value:function(t){var e=t.ctx,i=t.seriesIndex,a=t.dataPointIndex,s=t.y1,r=t.y2,o=t.w,n=o.globals.seriesRangeStart[i][a],l=o.globals.seriesRangeEnd[i][a],h=o.globals.labels[a],c=o.config.series[i].name?o.config.series[i].name:\\\"\\\",d=o.config.tooltip.y.formatter,g=o.config.tooltip.y.title.formatter,u={w:o,seriesIndex:i,dataPointIndex:a,start:n,end:l};\\\"function\\\"==typeof g&&(c=g(c,u)),Number.isFinite(s)&&Number.isFinite(r)&&(n=s,l=r,o.config.series[i].data[a].x&&(h=o.config.series[i].data[a].x+\\\":\\\"),\\\"function\\\"==typeof d&&(h=d(h,u)));var p=\\\"\\\",f=\\\"\\\",x=o.globals.colors[i];if(void 0===o.config.tooltip.x.formatter)if(\\\"datetime\\\"===o.config.xaxis.type){var b=new Y(e);p=b.formatDate(b.getDate(n),o.config.tooltip.x.format),f=b.formatDate(b.getDate(l),o.config.tooltip.x.format)}else p=n,f=l;else p=o.config.tooltip.x.formatter(n),f=o.config.tooltip.x.formatter(l);return{start:n,end:l,startVal:p,endVal:f,ylabel:h,color:x,seriesName:c}}},{key:\\\"buildCustomTooltipHTML\\\",value:function(t){var e=t.color,i=t.seriesName;return'<div class=\\\"apexcharts-tooltip-rangebar\\\"><div> <span class=\\\"series-name\\\" style=\\\"color: '+e+'\\\">'+(i||\\\"\\\")+'</span></div><div> <span class=\\\"category\\\">'+t.ylabel+' </span> <span class=\\\"value start-value\\\">'+t.start+'</span> <span class=\\\"separator\\\">-</span> <span class=\\\"value end-value\\\">'+t.end+\\\"</span></div></div>\\\"}}]),s}(),R=function(){function t(e){a(this,t),this.opts=e}return r(t,[{key:\\\"line\\\",value:function(){return{chart:{animations:{easing:\\\"swing\\\"}},dataLabels:{enabled:!1},stroke:{width:5,curve:\\\"straight\\\"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}},{key:\\\"sparkline\\\",value:function(t){this.opts.yaxis[0].show=!1,this.opts.yaxis[0].title.text=\\\"\\\",this.opts.yaxis[0].axisBorder.show=!1,this.opts.yaxis[0].axisTicks.show=!1,this.opts.yaxis[0].floating=!0;return p.extend(t,{grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}})}},{key:\\\"bar\\\",value:function(){return{chart:{stacked:!1,animations:{easing:\\\"swing\\\"}},plotOptions:{bar:{dataLabels:{position:\\\"center\\\"}}},dataLabels:{style:{colors:[\\\"#fff\\\"]},background:{enabled:!1}},stroke:{width:0,lineCap:\\\"round\\\"},fill:{opacity:.85},legend:{markers:{shape:\\\"square\\\",radius:2,size:8}},tooltip:{shared:!1,intersect:!0},xaxis:{tooltip:{enabled:!1},tickPlacement:\\\"between\\\",crosshairs:{width:\\\"barWidth\\\",position:\\\"back\\\",fill:{type:\\\"gradient\\\"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:\\\"candlestick\\\",value:function(){var t=this;return{stroke:{width:1,colors:[\\\"#333\\\"]},fill:{opacity:1},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(e){var i=e.seriesIndex,a=e.dataPointIndex,s=e.w;return t._getBoxTooltip(s,i,a,[\\\"Open\\\",\\\"High\\\",\\\"\\\",\\\"Low\\\",\\\"Close\\\"],\\\"candlestick\\\")}},states:{active:{filter:{type:\\\"none\\\"}}},xaxis:{crosshairs:{width:1}}}}},{key:\\\"boxPlot\\\",value:function(){var t=this;return{chart:{animations:{dynamicAnimation:{enabled:!1}}},stroke:{width:1,colors:[\\\"#24292e\\\"]},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(e){var i=e.seriesIndex,a=e.dataPointIndex,s=e.w;return t._getBoxTooltip(s,i,a,[\\\"Minimum\\\",\\\"Q1\\\",\\\"Median\\\",\\\"Q3\\\",\\\"Maximum\\\"],\\\"boxPlot\\\")}},markers:{size:5,strokeWidth:1,strokeColors:\\\"#111\\\"},xaxis:{crosshairs:{width:1}}}}},{key:\\\"rangeBar\\\",value:function(){return{stroke:{width:0,lineCap:\\\"square\\\"},plotOptions:{bar:{borderRadius:0,dataLabels:{position:\\\"center\\\"}}},dataLabels:{enabled:!1,formatter:function(t,e){e.ctx;var i=e.seriesIndex,a=e.dataPointIndex,s=e.w,r=s.globals.seriesRangeStart[i][a];return s.globals.seriesRangeEnd[i][a]-r},background:{enabled:!1},style:{colors:[\\\"#fff\\\"]}},tooltip:{shared:!1,followCursor:!0,custom:function(t){return t.w.config.plotOptions&&t.w.config.plotOptions.bar&&t.w.config.plotOptions.bar.horizontal?function(t){var e=new F(t.ctx,null),i=e.getTooltipValues(t),a=i.color,s=i.seriesName,r=i.ylabel,o=i.startVal,n=i.endVal;return e.buildCustomTooltipHTML({color:a,seriesName:s,ylabel:r,start:o,end:n})}(t):function(t){var e=new F(t.ctx,null),i=e.getTooltipValues(t),a=i.color,s=i.seriesName,r=i.ylabel,o=i.start,n=i.end;return e.buildCustomTooltipHTML({color:a,seriesName:s,ylabel:r,start:o,end:n})}(t)}},xaxis:{tickPlacement:\\\"between\\\",tooltip:{enabled:!1},crosshairs:{stroke:{width:0}}}}}},{key:\\\"area\\\",value:function(){return{stroke:{width:4},fill:{type:\\\"gradient\\\",gradient:{inverseColors:!1,shade:\\\"light\\\",type:\\\"vertical\\\",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}},markers:{size:0,hover:{sizeOffset:6}},tooltip:{followCursor:!1}}}},{key:\\\"brush\\\",value:function(t){return p.extend(t,{chart:{toolbar:{autoSelected:\\\"selection\\\",show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1},stroke:{width:1},tooltip:{enabled:!1},xaxis:{tooltip:{enabled:!1}}})}},{key:\\\"stacked100\\\",value:function(t){t.dataLabels=t.dataLabels||{},t.dataLabels.formatter=t.dataLabels.formatter||void 0;var e=t.dataLabels.formatter;return t.yaxis.forEach((function(e,i){t.yaxis[i].min=0,t.yaxis[i].max=100})),\\\"bar\\\"===t.chart.type&&(t.dataLabels.formatter=e||function(t){return\\\"number\\\"==typeof t&&t?t.toFixed(0)+\\\"%\\\":t}),t}},{key:\\\"convertCatToNumeric\\\",value:function(t){return t.xaxis.convertedCatToNumeric=!0,t}},{key:\\\"convertCatToNumericXaxis\\\",value:function(t,e,i){t.xaxis.type=\\\"numeric\\\",t.xaxis.labels=t.xaxis.labels||{},t.xaxis.labels.formatter=t.xaxis.labels.formatter||function(t){return p.isNumber(t)?Math.floor(t):t};var a=t.xaxis.labels.formatter,s=t.xaxis.categories&&t.xaxis.categories.length?t.xaxis.categories:t.labels;return i&&i.length&&(s=i.map((function(t){return Array.isArray(t)?t:String(t)}))),s&&s.length&&(t.xaxis.labels.formatter=function(t){return p.isNumber(t)?a(s[Math.floor(t)-1]):a(t)}),t.xaxis.categories=[],t.labels=[],t.xaxis.tickAmount=t.xaxis.tickAmount||\\\"dataPoints\\\",t}},{key:\\\"bubble\\\",value:function(){return{dataLabels:{style:{colors:[\\\"#fff\\\"]}},tooltip:{shared:!1,intersect:!0},xaxis:{crosshairs:{width:0}},fill:{type:\\\"solid\\\",gradient:{shade:\\\"light\\\",inverse:!0,shadeIntensity:.55,opacityFrom:.4,opacityTo:.8}}}}},{key:\\\"scatter\\\",value:function(){return{dataLabels:{enabled:!1},tooltip:{shared:!1,intersect:!0},markers:{size:6,strokeWidth:1,hover:{sizeOffset:2}}}}},{key:\\\"heatmap\\\",value:function(){return{chart:{stacked:!1},fill:{opacity:1},dataLabels:{style:{colors:[\\\"#fff\\\"]}},stroke:{colors:[\\\"#fff\\\"]},tooltip:{followCursor:!0,marker:{show:!1},x:{show:!1}},legend:{position:\\\"top\\\",markers:{shape:\\\"square\\\",size:10,offsetY:2}},grid:{padding:{right:20}}}}},{key:\\\"treemap\\\",value:function(){return{chart:{zoom:{enabled:!1}},dataLabels:{style:{fontSize:14,fontWeight:600,colors:[\\\"#fff\\\"]}},stroke:{show:!0,width:2,colors:[\\\"#fff\\\"]},legend:{show:!1},fill:{gradient:{stops:[0,100]}},tooltip:{followCursor:!0,x:{show:!1}},grid:{padding:{left:0,right:0}},xaxis:{crosshairs:{show:!1},tooltip:{enabled:!1}}}}},{key:\\\"pie\\\",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(t){return t.toFixed(1)+\\\"%\\\"},style:{colors:[\\\"#fff\\\"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:[\\\"#fff\\\"]},fill:{opacity:1,gradient:{shade:\\\"light\\\",stops:[0,100]}},tooltip:{theme:\\\"dark\\\",fillSeriesColor:!0},legend:{position:\\\"right\\\"}}}},{key:\\\"donut\\\",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+\\\"%\\\"},style:{colors:[\\\"#fff\\\"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:[\\\"#fff\\\"]},fill:{opacity:1,gradient:{shade:\\\"light\\\",shadeIntensity:.35,stops:[80,100],opacityFrom:1,opacityTo:1}},tooltip:{theme:\\\"dark\\\",fillSeriesColor:!0},legend:{position:\\\"right\\\"}}}},{key:\\\"polarArea\\\",value:function(){return this.opts.yaxis[0].tickAmount=this.opts.yaxis[0].tickAmount?this.opts.yaxis[0].tickAmount:6,{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+\\\"%\\\"},enabled:!1},stroke:{show:!0,width:2},fill:{opacity:.7},tooltip:{theme:\\\"dark\\\",fillSeriesColor:!0},legend:{position:\\\"right\\\"}}}},{key:\\\"radar\\\",value:function(){return this.opts.yaxis[0].labels.offsetY=this.opts.yaxis[0].labels.offsetY?this.opts.yaxis[0].labels.offsetY:6,{dataLabels:{enabled:!1,style:{fontSize:\\\"11px\\\"}},stroke:{width:2},markers:{size:3,strokeWidth:1,strokeOpacity:1},fill:{opacity:.2},tooltip:{shared:!1,intersect:!0,followCursor:!0},grid:{show:!1},xaxis:{labels:{formatter:function(t){return t},style:{colors:[\\\"#a8a8a8\\\"],fontSize:\\\"11px\\\"}},tooltip:{enabled:!1},crosshairs:{show:!1}}}}},{key:\\\"radialBar\\\",value:function(){return{chart:{animations:{dynamicAnimation:{enabled:!0,speed:800}},toolbar:{show:!1}},fill:{gradient:{shade:\\\"dark\\\",shadeIntensity:.4,inverseColors:!1,type:\\\"diagonal2\\\",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},legend:{show:!1,position:\\\"right\\\"},tooltip:{enabled:!1,fillSeriesColor:!0}}}},{key:\\\"_getBoxTooltip\\\",value:function(t,e,i,a,s){var r=t.globals.seriesCandleO[e][i],o=t.globals.seriesCandleH[e][i],n=t.globals.seriesCandleM[e][i],l=t.globals.seriesCandleL[e][i],h=t.globals.seriesCandleC[e][i];return t.config.series[e].type&&t.config.series[e].type!==s?'<div class=\\\"apexcharts-custom-tooltip\\\">\\\\n          '.concat(t.config.series[e].name?t.config.series[e].name:\\\"series-\\\"+(e+1),\\\": <strong>\\\").concat(t.globals.series[e][i],\\\"</strong>\\\\n        </div>\\\"):'<div class=\\\"apexcharts-tooltip-box apexcharts-tooltip-'.concat(t.config.chart.type,'\\\">')+\\\"<div>\\\".concat(a[0],': <span class=\\\"value\\\">')+r+\\\"</span></div>\\\"+\\\"<div>\\\".concat(a[1],': <span class=\\\"value\\\">')+o+\\\"</span></div>\\\"+(n?\\\"<div>\\\".concat(a[2],': <span class=\\\"value\\\">')+n+\\\"</span></div>\\\":\\\"\\\")+\\\"<div>\\\".concat(a[3],': <span class=\\\"value\\\">')+l+\\\"</span></div>\\\"+\\\"<div>\\\".concat(a[4],': <span class=\\\"value\\\">')+h+\\\"</span></div></div>\\\"}}]),t}(),H=function(){function t(e){a(this,t),this.opts=e}return r(t,[{key:\\\"init\\\",value:function(t){var e=t.responsiveOverride,a=this.opts,s=new S,r=new R(a);this.chartType=a.chart.type,\\\"histogram\\\"===this.chartType&&(a.chart.type=\\\"bar\\\",a=p.extend({plotOptions:{bar:{columnWidth:\\\"99.99%\\\"}}},a)),a=this.extendYAxis(a),a=this.extendAnnotations(a);var o=s.init(),n={};if(a&&\\\"object\\\"===i(a)){var l={};l=-1!==[\\\"line\\\",\\\"area\\\",\\\"bar\\\",\\\"candlestick\\\",\\\"boxPlot\\\",\\\"rangeBar\\\",\\\"histogram\\\",\\\"bubble\\\",\\\"scatter\\\",\\\"heatmap\\\",\\\"treemap\\\",\\\"pie\\\",\\\"polarArea\\\",\\\"donut\\\",\\\"radar\\\",\\\"radialBar\\\"].indexOf(a.chart.type)?r[a.chart.type]():r.line(),a.chart.brush&&a.chart.brush.enabled&&(l=r.brush(l)),a.chart.stacked&&\\\"100%\\\"===a.chart.stackType&&(a=r.stacked100(a)),this.checkForDarkTheme(window.Apex),this.checkForDarkTheme(a),a.xaxis=a.xaxis||window.Apex.xaxis||{},e||(a.xaxis.convertedCatToNumeric=!1),((a=this.checkForCatToNumericXAxis(this.chartType,l,a)).chart.sparkline&&a.chart.sparkline.enabled||window.Apex.chart&&window.Apex.chart.sparkline&&window.Apex.chart.sparkline.enabled)&&(l=r.sparkline(l)),n=p.extend(o,l)}var h=p.extend(n,window.Apex);return o=p.extend(h,a),o=this.handleUserInputErrors(o)}},{key:\\\"checkForCatToNumericXAxis\\\",value:function(t,e,i){var a=new R(i),s=\\\"bar\\\"===t&&i.plotOptions&&i.plotOptions.bar&&i.plotOptions.bar.horizontal,r=\\\"pie\\\"===t||\\\"polarArea\\\"===t||\\\"donut\\\"===t||\\\"radar\\\"===t||\\\"radialBar\\\"===t||\\\"heatmap\\\"===t,o=\\\"datetime\\\"!==i.xaxis.type&&\\\"numeric\\\"!==i.xaxis.type,n=i.xaxis.tickPlacement?i.xaxis.tickPlacement:e.xaxis&&e.xaxis.tickPlacement;return s||r||!o||\\\"between\\\"===n||(i=a.convertCatToNumeric(i)),i}},{key:\\\"extendYAxis\\\",value:function(t,e){var i=new S;(void 0===t.yaxis||!t.yaxis||Array.isArray(t.yaxis)&&0===t.yaxis.length)&&(t.yaxis={}),t.yaxis.constructor!==Array&&window.Apex.yaxis&&window.Apex.yaxis.constructor!==Array&&(t.yaxis=p.extend(t.yaxis,window.Apex.yaxis)),t.yaxis.constructor!==Array?t.yaxis=[p.extend(i.yAxis,t.yaxis)]:t.yaxis=p.extendArray(t.yaxis,i.yAxis);var a=!1;t.yaxis.forEach((function(t){t.logarithmic&&(a=!0)}));var s=t.series;return e&&!s&&(s=e.config.series),a&&s.length!==t.yaxis.length&&s.length&&(t.yaxis=s.map((function(e,a){if(e.name||(s[a].name=\\\"series-\\\".concat(a+1)),t.yaxis[a])return t.yaxis[a].seriesName=s[a].name,t.yaxis[a];var r=p.extend(i.yAxis,t.yaxis[0]);return r.show=!1,r}))),a&&s.length>1&&s.length!==t.yaxis.length&&console.warn(\\\"A multi-series logarithmic chart should have equal number of series and y-axes. Please make sure to equalize both.\\\"),t}},{key:\\\"extendAnnotations\\\",value:function(t){return void 0===t.annotations&&(t.annotations={},t.annotations.yaxis=[],t.annotations.xaxis=[],t.annotations.points=[]),t=this.extendYAxisAnnotations(t),t=this.extendXAxisAnnotations(t),t=this.extendPointAnnotations(t)}},{key:\\\"extendYAxisAnnotations\\\",value:function(t){var e=new S;return t.annotations.yaxis=p.extendArray(void 0!==t.annotations.yaxis?t.annotations.yaxis:[],e.yAxisAnnotation),t}},{key:\\\"extendXAxisAnnotations\\\",value:function(t){var e=new S;return t.annotations.xaxis=p.extendArray(void 0!==t.annotations.xaxis?t.annotations.xaxis:[],e.xAxisAnnotation),t}},{key:\\\"extendPointAnnotations\\\",value:function(t){var e=new S;return t.annotations.points=p.extendArray(void 0!==t.annotations.points?t.annotations.points:[],e.pointAnnotation),t}},{key:\\\"checkForDarkTheme\\\",value:function(t){t.theme&&\\\"dark\\\"===t.theme.mode&&(t.tooltip||(t.tooltip={}),\\\"light\\\"!==t.tooltip.theme&&(t.tooltip.theme=\\\"dark\\\"),t.chart.foreColor||(t.chart.foreColor=\\\"#f6f7f8\\\"),t.chart.background||(t.chart.background=\\\"#424242\\\"),t.theme.palette||(t.theme.palette=\\\"palette4\\\"))}},{key:\\\"handleUserInputErrors\\\",value:function(t){var e=t;if(e.tooltip.shared&&e.tooltip.intersect)throw new Error(\\\"tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.\\\");if(\\\"bar\\\"===e.chart.type&&e.plotOptions.bar.horizontal){if(e.yaxis.length>1)throw new Error(\\\"Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false\\\");e.yaxis[0].reversed&&(e.yaxis[0].opposite=!0),e.xaxis.tooltip.enabled=!1,e.yaxis[0].tooltip.enabled=!1,e.chart.zoom.enabled=!1}return\\\"bar\\\"!==e.chart.type&&\\\"rangeBar\\\"!==e.chart.type||e.tooltip.shared&&\\\"barWidth\\\"===e.xaxis.crosshairs.width&&e.series.length>1&&(e.xaxis.crosshairs.width=\\\"tickWidth\\\"),\\\"candlestick\\\"!==e.chart.type&&\\\"boxPlot\\\"!==e.chart.type||e.yaxis[0].reversed&&(console.warn(\\\"Reversed y-axis in \\\".concat(e.chart.type,\\\" chart is not supported.\\\")),e.yaxis[0].reversed=!1),e.chart.group&&0===e.yaxis[0].labels.minWidth&&console.warn(\\\"It looks like you have multiple charts in synchronization. You must provide yaxis.labels.minWidth which must be EQUAL for all grouped charts to prevent incorrect behaviour.\\\"),Array.isArray(e.stroke.width)&&\\\"line\\\"!==e.chart.type&&\\\"area\\\"!==e.chart.type&&(console.warn(\\\"stroke.width option accepts array only for line and area charts. Reverted back to Number\\\"),e.stroke.width=e.stroke.width[0]),e}}]),t}(),D=function(){function t(){a(this,t)}return r(t,[{key:\\\"initGlobalVars\\\",value:function(t){t.series=[],t.seriesCandleO=[],t.seriesCandleH=[],t.seriesCandleM=[],t.seriesCandleL=[],t.seriesCandleC=[],t.seriesRangeStart=[],t.seriesRangeEnd=[],t.seriesRangeBarTimeline=[],t.seriesPercent=[],t.seriesGoals=[],t.seriesX=[],t.seriesZ=[],t.seriesNames=[],t.seriesTotals=[],t.seriesLog=[],t.seriesColors=[],t.stackedSeriesTotals=[],t.seriesXvalues=[],t.seriesYvalues=[],t.labels=[],t.categoryLabels=[],t.timescaleLabels=[],t.noLabelsProvided=!1,t.resizeTimer=null,t.selectionResizeTimer=null,t.delayedElements=[],t.pointsArray=[],t.dataLabelsRects=[],t.isXNumeric=!1,t.xaxisLabelsCount=0,t.skipLastTimelinelabel=!1,t.skipFirstTimelinelabel=!1,t.isDataXYZ=!1,t.isMultiLineX=!1,t.isMultipleYAxis=!1,t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE,t.minYArr=[],t.maxYArr=[],t.maxX=-Number.MAX_VALUE,t.minX=Number.MAX_VALUE,t.initialMaxX=-Number.MAX_VALUE,t.initialMinX=Number.MAX_VALUE,t.maxDate=0,t.minDate=Number.MAX_VALUE,t.minZ=Number.MAX_VALUE,t.maxZ=-Number.MAX_VALUE,t.minXDiff=Number.MAX_VALUE,t.yAxisScale=[],t.xAxisScale=null,t.xAxisTicksPositions=[],t.yLabelsCoords=[],t.yTitleCoords=[],t.barPadForNumericAxis=0,t.padHorizontal=0,t.xRange=0,t.yRange=[],t.zRange=0,t.dataPoints=0,t.xTickAmount=0}},{key:\\\"globalVars\\\",value:function(t){return{chartID:null,cuid:null,events:{beforeMount:[],mounted:[],updated:[],clicked:[],selection:[],dataPointSelection:[],zoomed:[],scrolled:[]},colors:[],clientX:null,clientY:null,fill:{colors:[]},stroke:{colors:[]},dataLabels:{style:{colors:[]}},radarPolygons:{fill:{colors:[]}},markers:{colors:[],size:t.markers.size,largestSize:0},animationEnded:!1,isTouchDevice:\\\"ontouchstart\\\"in window||navigator.msMaxTouchPoints,isDirty:!1,isExecCalled:!1,initialConfig:null,initialSeries:[],lastXAxis:[],lastYAxis:[],columnSeries:null,labels:[],timescaleLabels:[],noLabelsProvided:!1,allSeriesCollapsed:!1,collapsedSeries:[],collapsedSeriesIndices:[],ancillaryCollapsedSeries:[],ancillaryCollapsedSeriesIndices:[],risingSeries:[],dataFormatXNumeric:!1,capturedSeriesIndex:-1,capturedDataPointIndex:-1,selectedDataPoints:[],goldenPadding:35,invalidLogScale:!1,ignoreYAxisIndexes:[],yAxisSameScaleIndices:[],maxValsInArrayIndex:0,radialSize:0,selection:void 0,zoomEnabled:\\\"zoom\\\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.zoom&&t.chart.zoom.enabled,panEnabled:\\\"pan\\\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.pan,selectionEnabled:\\\"selection\\\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.selection,yaxis:null,mousedown:!1,lastClientPosition:{},visibleXRange:void 0,yValueDecimal:0,total:0,SVGNS:\\\"http://www.w3.org/2000/svg\\\",svgWidth:0,svgHeight:0,noData:!1,locale:{},dom:{},memory:{methodsToExec:[]},shouldAnimate:!0,skipLastTimelinelabel:!1,skipFirstTimelinelabel:!1,delayedElements:[],axisCharts:!0,isDataXYZ:!1,resized:!1,resizeTimer:null,comboCharts:!1,dataChanged:!1,previousPaths:[],allSeriesHasEqualX:!0,pointsArray:[],dataLabelsRects:[],lastDrawnDataLabelsIndexes:[],hasNullValues:!1,easing:null,zoomed:!1,gridWidth:0,gridHeight:0,rotateXLabels:!1,defaultLabels:!1,xLabelFormatter:void 0,yLabelFormatters:[],xaxisTooltipFormatter:void 0,ttKeyFormatter:void 0,ttVal:void 0,ttZFormatter:void 0,LINE_HEIGHT_RATIO:1.618,xAxisLabelsHeight:0,xAxisLabelsWidth:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null}}},{key:\\\"init\\\",value:function(t){var e=this.globalVars(t);return this.initGlobalVars(e),e.initialConfig=p.extend({},t),e.initialSeries=p.clone(t.series),e.lastXAxis=p.clone(e.initialConfig.xaxis),e.lastYAxis=p.clone(e.initialConfig.yaxis),e}}]),t}(),N=function(){function t(e){a(this,t),this.opts=e}return r(t,[{key:\\\"init\\\",value:function(){var t=new H(this.opts).init({responsiveOverride:!1});return{config:t,globals:(new D).init(t)}}}]),t}(),O=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[],this.seriesGoals=[],this.coreUtils=new y(this.ctx)}return r(t,[{key:\\\"isMultiFormat\\\",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:\\\"isFormatXY\\\",value:function(){var t=this.w.config.series.slice(),e=new z(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&null!==t[this.activeSeriesIndex].data[0]&&void 0!==t[this.activeSeriesIndex].data[0].x&&null!==t[this.activeSeriesIndex].data[0])return!0}},{key:\\\"isFormat2DArray\\\",value:function(){var t=this.w.config.series.slice(),e=new z(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&void 0!==t[this.activeSeriesIndex].data[0]&&null!==t[this.activeSeriesIndex].data[0]&&t[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:\\\"handleFormat2DArray\\\",value:function(t,e){for(var i=this.w.config,a=this.w.globals,s=\\\"boxPlot\\\"===i.chart.type||\\\"boxPlot\\\"===i.series[e].type,r=0;r<t[e].data.length;r++)if(void 0!==t[e].data[r][1]&&(Array.isArray(t[e].data[r][1])&&4===t[e].data[r][1].length&&!s?this.twoDSeries.push(p.parseNumber(t[e].data[r][1][3])):t[e].data[r].length>=5?this.twoDSeries.push(p.parseNumber(t[e].data[r][4])):this.twoDSeries.push(p.parseNumber(t[e].data[r][1])),a.dataFormatXNumeric=!0),\\\"datetime\\\"===i.xaxis.type){var o=new Date(t[e].data[r][0]);o=new Date(o).getTime(),this.twoDSeriesX.push(o)}else this.twoDSeriesX.push(t[e].data[r][0]);for(var n=0;n<t[e].data.length;n++)void 0!==t[e].data[n][2]&&(this.threeDSeries.push(t[e].data[n][2]),a.isDataXYZ=!0)}},{key:\\\"handleFormatXY\\\",value:function(t,e){var i=this.w.config,a=this.w.globals,s=new Y(this.ctx),r=e;a.collapsedSeriesIndices.indexOf(e)>-1&&(r=this.activeSeriesIndex);for(var o=0;o<t[e].data.length;o++)void 0!==t[e].data[o].y&&(Array.isArray(t[e].data[o].y)?this.twoDSeries.push(p.parseNumber(t[e].data[o].y[t[e].data[o].y.length-1])):this.twoDSeries.push(p.parseNumber(t[e].data[o].y))),void 0!==t[e].data[o].goals&&Array.isArray(t[e].data[o].goals)?(void 0===this.seriesGoals[e]&&(this.seriesGoals[e]=[]),this.seriesGoals[e].push(t[e].data[o].goals)):(void 0===this.seriesGoals[e]&&(this.seriesGoals[e]=[]),this.seriesGoals[e].push(null));for(var n=0;n<t[r].data.length;n++){var l=\\\"string\\\"==typeof t[r].data[n].x,h=Array.isArray(t[r].data[n].x),c=!h&&!!s.isValidDate(t[r].data[n].x.toString());if(l||c)if(l||i.xaxis.convertedCatToNumeric){var d=a.isBarHorizontal&&a.isRangeData;\\\"datetime\\\"!==i.xaxis.type||d?(this.fallbackToCategory=!0,this.twoDSeriesX.push(t[r].data[n].x)):this.twoDSeriesX.push(s.parseDate(t[r].data[n].x))}else\\\"datetime\\\"===i.xaxis.type?this.twoDSeriesX.push(s.parseDate(t[r].data[n].x.toString())):(a.dataFormatXNumeric=!0,a.isXNumeric=!0,this.twoDSeriesX.push(parseFloat(t[r].data[n].x)));else h?(this.fallbackToCategory=!0,this.twoDSeriesX.push(t[r].data[n].x)):(a.isXNumeric=!0,a.dataFormatXNumeric=!0,this.twoDSeriesX.push(t[r].data[n].x))}if(t[e].data[0]&&void 0!==t[e].data[0].z){for(var g=0;g<t[e].data.length;g++)this.threeDSeries.push(t[e].data[g].z);a.isDataXYZ=!0}}},{key:\\\"handleRangeData\\\",value:function(t,e){var i=this.w.config,a=this.w.globals,s={};return this.isFormat2DArray()?s=this.handleRangeDataFormat(\\\"array\\\",t,e):this.isFormatXY()&&(s=this.handleRangeDataFormat(\\\"xy\\\",t,e)),a.seriesRangeStart.push(s.start),a.seriesRangeEnd.push(s.end),\\\"datetime\\\"===i.xaxis.type&&a.seriesRangeBarTimeline.push(s.rangeUniques),a.seriesRangeBarTimeline.forEach((function(t,e){t&&t.forEach((function(t,e){t.y.forEach((function(e,i){for(var a=0;a<t.y.length;a++)if(i!==a){var s=e.y1,r=e.y2,o=t.y[a].y1;s<=t.y[a].y2&&o<=r&&(t.overlaps.indexOf(e.rangeName)<0&&t.overlaps.push(e.rangeName),t.overlaps.indexOf(t.y[a].rangeName)<0&&t.overlaps.push(t.y[a].rangeName))}}))}))})),s}},{key:\\\"handleCandleStickBoxData\\\",value:function(t,e){var i=this.w.globals,a={};return this.isFormat2DArray()?a=this.handleCandleStickBoxDataFormat(\\\"array\\\",t,e):this.isFormatXY()&&(a=this.handleCandleStickBoxDataFormat(\\\"xy\\\",t,e)),i.seriesCandleO[e]=a.o,i.seriesCandleH[e]=a.h,i.seriesCandleM[e]=a.m,i.seriesCandleL[e]=a.l,i.seriesCandleC[e]=a.c,a}},{key:\\\"handleRangeDataFormat\\\",value:function(t,e,i){var a=[],s=[],r=e[i].data.filter((function(t,e,i){return e===i.findIndex((function(e){return e.x===t.x}))})).map((function(t,e){return{x:t.x,overlaps:[],y:[]}})),o=\\\"Please provide [Start, End] values in valid format. Read more https://apexcharts.com/docs/series/#rangecharts\\\",n=new z(this.ctx).getActiveConfigSeriesIndex();if(\\\"array\\\"===t){if(2!==e[n].data[0][1].length)throw new Error(o);for(var l=0;l<e[i].data.length;l++)a.push(e[i].data[l][1][0]),s.push(e[i].data[l][1][1])}else if(\\\"xy\\\"===t){if(2!==e[n].data[0].y.length)throw new Error(o);for(var h=function(t){var o=p.randomId(),n=e[i].data[t].x,l={y1:e[i].data[t].y[0],y2:e[i].data[t].y[1],rangeName:o};e[i].data[t].rangeName=o;var h=r.findIndex((function(t){return t.x===n}));r[h].y.push(l),a.push(l.y1),s.push(l.y2)},c=0;c<e[i].data.length;c++)h(c)}return{start:a,end:s,rangeUniques:r}}},{key:\\\"handleCandleStickBoxDataFormat\\\",value:function(t,e,i){var a=this.w,s=\\\"boxPlot\\\"===a.config.chart.type||\\\"boxPlot\\\"===a.config.series[i].type,r=[],o=[],n=[],l=[],h=[];if(\\\"array\\\"===t)if(s&&6===e[i].data[0].length||!s&&5===e[i].data[0].length)for(var c=0;c<e[i].data.length;c++)r.push(e[i].data[c][1]),o.push(e[i].data[c][2]),s?(n.push(e[i].data[c][3]),l.push(e[i].data[c][4]),h.push(e[i].data[c][5])):(l.push(e[i].data[c][3]),h.push(e[i].data[c][4]));else for(var d=0;d<e[i].data.length;d++)Array.isArray(e[i].data[d][1])&&(r.push(e[i].data[d][1][0]),o.push(e[i].data[d][1][1]),s?(n.push(e[i].data[d][1][2]),l.push(e[i].data[d][1][3]),h.push(e[i].data[d][1][4])):(l.push(e[i].data[d][1][2]),h.push(e[i].data[d][1][3])));else if(\\\"xy\\\"===t)for(var g=0;g<e[i].data.length;g++)Array.isArray(e[i].data[g].y)&&(r.push(e[i].data[g].y[0]),o.push(e[i].data[g].y[1]),s?(n.push(e[i].data[g].y[2]),l.push(e[i].data[g].y[3]),h.push(e[i].data[g].y[4])):(l.push(e[i].data[g].y[2]),h.push(e[i].data[g].y[3])));return{o:r,h:o,m:n,l:l,c:h}}},{key:\\\"parseDataAxisCharts\\\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.ctx,a=this.w.config,s=this.w.globals,r=new Y(i),o=a.labels.length>0?a.labels.slice():a.xaxis.categories.slice();s.isTimelineBar=\\\"rangeBar\\\"===a.chart.type&&\\\"datetime\\\"===a.xaxis.type;for(var n=function(){for(var t=0;t<o.length;t++)if(\\\"string\\\"==typeof o[t]){if(!r.isValidDate(o[t]))throw new Error(\\\"You have provided invalid Date format. Please provide a valid JavaScript Date\\\");e.twoDSeriesX.push(r.parseDate(o[t]))}else e.twoDSeriesX.push(o[t])},l=0;l<t.length;l++){if(this.twoDSeries=[],this.twoDSeriesX=[],this.threeDSeries=[],void 0===t[l].data)return void console.error(\\\"It is a possibility that you may have not included 'data' property in series.\\\");if(\\\"rangeBar\\\"!==a.chart.type&&\\\"rangeArea\\\"!==a.chart.type&&\\\"rangeBar\\\"!==t[l].type&&\\\"rangeArea\\\"!==t[l].type||(s.isRangeData=!0,this.handleRangeData(t,l)),this.isMultiFormat())this.isFormat2DArray()?this.handleFormat2DArray(t,l):this.isFormatXY()&&this.handleFormatXY(t,l),\\\"candlestick\\\"!==a.chart.type&&\\\"candlestick\\\"!==t[l].type&&\\\"boxPlot\\\"!==a.chart.type&&\\\"boxPlot\\\"!==t[l].type||this.handleCandleStickBoxData(t,l),s.series.push(this.twoDSeries),s.labels.push(this.twoDSeriesX),s.seriesX.push(this.twoDSeriesX),s.seriesGoals=this.seriesGoals,l!==this.activeSeriesIndex||this.fallbackToCategory||(s.isXNumeric=!0);else{\\\"datetime\\\"===a.xaxis.type?(s.isXNumeric=!0,n(),s.seriesX.push(this.twoDSeriesX)):\\\"numeric\\\"===a.xaxis.type&&(s.isXNumeric=!0,o.length>0&&(this.twoDSeriesX=o,s.seriesX.push(this.twoDSeriesX))),s.labels.push(this.twoDSeriesX);var h=t[l].data.map((function(t){return p.parseNumber(t)}));s.series.push(h)}s.seriesZ.push(this.threeDSeries),void 0!==t[l].name?s.seriesNames.push(t[l].name):s.seriesNames.push(\\\"series-\\\"+parseInt(l+1,10)),void 0!==t[l].color?s.seriesColors.push(t[l].color):s.seriesColors.push(void 0)}return this.w}},{key:\\\"parseDataNonAxisCharts\\\",value:function(t){var e=this.w.globals,i=this.w.config;e.series=t.slice(),e.seriesNames=i.labels.slice();for(var a=0;a<e.series.length;a++)void 0===e.seriesNames[a]&&e.seriesNames.push(\\\"series-\\\"+(a+1));return this.w}},{key:\\\"handleExternalLabelsData\\\",value:function(t){var e=this.w.config,i=this.w.globals;if(e.xaxis.categories.length>0)i.labels=e.xaxis.categories;else if(e.labels.length>0)i.labels=e.labels.slice();else if(this.fallbackToCategory){if(i.labels=i.labels[0],i.seriesRangeBarTimeline.length&&(i.seriesRangeBarTimeline.map((function(t){t.forEach((function(t){i.labels.indexOf(t.x)<0&&t.x&&i.labels.push(t.x)}))})),i.labels=i.labels.filter((function(t,e,i){return i.indexOf(t)===e}))),e.xaxis.convertedCatToNumeric)new R(e).convertCatToNumericXaxis(e,this.ctx,i.seriesX[0]),this._generateExternalLabels(t)}else this._generateExternalLabels(t)}},{key:\\\"_generateExternalLabels\\\",value:function(t){var e=this.w.globals,i=this.w.config,a=[];if(e.axisCharts){if(e.series.length>0)for(var s=0;s<e.series[e.maxValsInArrayIndex].length;s++)a.push(s+1);e.seriesX=[];for(var r=0;r<t.length;r++)e.seriesX.push(a);e.isXNumeric=!0}if(0===a.length){a=e.axisCharts?[]:e.series.map((function(t,e){return e+1}));for(var o=0;o<t.length;o++)e.seriesX.push(a)}e.labels=a,i.xaxis.convertedCatToNumeric&&(e.categoryLabels=a.map((function(t){return i.xaxis.labels.formatter(t)}))),e.noLabelsProvided=!0}},{key:\\\"parseData\\\",value:function(t){var e=this.w,i=e.config,a=e.globals;if(this.excludeCollapsedSeriesInYAxis(),this.fallbackToCategory=!1,this.ctx.core.resetGlobals(),this.ctx.core.isMultipleY(),a.axisCharts?this.parseDataAxisCharts(t):this.parseDataNonAxisCharts(t),this.coreUtils.getLargestSeries(),\\\"bar\\\"===i.chart.type&&i.chart.stacked){var s=new z(this.ctx);a.series=s.setNullSeriesToZeroValues(a.series)}this.coreUtils.getSeriesTotals(),a.axisCharts&&this.coreUtils.getStackedSeriesTotals(),this.coreUtils.getPercentSeries(),a.dataFormatXNumeric||a.isXNumeric&&(\\\"numeric\\\"!==i.xaxis.type||0!==i.labels.length||0!==i.xaxis.categories.length)||this.handleExternalLabelsData(t);for(var r=this.coreUtils.getCategoryLabels(a.labels),o=0;o<r.length;o++)if(Array.isArray(r[o])){a.isMultiLineX=!0;break}}},{key:\\\"excludeCollapsedSeriesInYAxis\\\",value:function(){var t=this,e=this.w;e.globals.ignoreYAxisIndexes=e.globals.collapsedSeries.map((function(i,a){if(t.w.globals.isMultipleYAxis&&!e.config.chart.stacked)return i.index}))}}]),t}(),W=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.tooltipKeyFormat=\\\"dd MMM\\\"}return r(t,[{key:\\\"xLabelFormat\\\",value:function(t,e,i,a){var s=this.w;if(\\\"datetime\\\"===s.config.xaxis.type&&void 0===s.config.xaxis.labels.formatter&&void 0===s.config.tooltip.x.formatter){var r=new Y(this.ctx);return r.formatDate(r.getDate(e),s.config.tooltip.x.format)}return t(e,i,a)}},{key:\\\"defaultGeneralFormatter\\\",value:function(t){return Array.isArray(t)?t.map((function(t){return t})):t}},{key:\\\"defaultYFormatter\\\",value:function(t,e,i){var a=this.w;return p.isNumber(t)&&(t=0!==a.globals.yValueDecimal?t.toFixed(void 0!==e.decimalsInFloat?e.decimalsInFloat:a.globals.yValueDecimal):a.globals.maxYArr[i]-a.globals.minYArr[i]<5?t.toFixed(1):t.toFixed(0)),t}},{key:\\\"setLabelFormatters\\\",value:function(){var t=this,e=this.w;return e.globals.xaxisTooltipFormatter=function(e){return t.defaultGeneralFormatter(e)},e.globals.ttKeyFormatter=function(e){return t.defaultGeneralFormatter(e)},e.globals.ttZFormatter=function(t){return t},e.globals.legendFormatter=function(e){return t.defaultGeneralFormatter(e)},void 0!==e.config.xaxis.labels.formatter?e.globals.xLabelFormatter=e.config.xaxis.labels.formatter:e.globals.xLabelFormatter=function(t){if(p.isNumber(t)){if(!e.config.xaxis.convertedCatToNumeric&&\\\"numeric\\\"===e.config.xaxis.type){if(p.isNumber(e.config.xaxis.decimalsInFloat))return t.toFixed(e.config.xaxis.decimalsInFloat);var i=e.globals.maxX-e.globals.minX;return i>0&&i<100?t.toFixed(1):t.toFixed(0)}if(e.globals.isBarHorizontal)if(e.globals.maxY-e.globals.minYArr<4)return t.toFixed(1);return t.toFixed(0)}return t},\\\"function\\\"==typeof e.config.tooltip.x.formatter?e.globals.ttKeyFormatter=e.config.tooltip.x.formatter:e.globals.ttKeyFormatter=e.globals.xLabelFormatter,\\\"function\\\"==typeof e.config.xaxis.tooltip.formatter&&(e.globals.xaxisTooltipFormatter=e.config.xaxis.tooltip.formatter),(Array.isArray(e.config.tooltip.y)||void 0!==e.config.tooltip.y.formatter)&&(e.globals.ttVal=e.config.tooltip.y),void 0!==e.config.tooltip.z.formatter&&(e.globals.ttZFormatter=e.config.tooltip.z.formatter),void 0!==e.config.legend.formatter&&(e.globals.legendFormatter=e.config.legend.formatter),e.config.yaxis.forEach((function(i,a){void 0!==i.labels.formatter?e.globals.yLabelFormatters[a]=i.labels.formatter:e.globals.yLabelFormatters[a]=function(s){return e.globals.xyCharts?Array.isArray(s)?s.map((function(e){return t.defaultYFormatter(e,i,a)})):t.defaultYFormatter(s,i,a):s}})),e.globals}},{key:\\\"heatmapLabelFormatters\\\",value:function(){var t=this.w;if(\\\"heatmap\\\"===t.config.chart.type){t.globals.yAxisScale[0].result=t.globals.seriesNames.slice();var e=t.globals.seriesNames.reduce((function(t,e){return t.length>e.length?t:e}),0);t.globals.yAxisScale[0].niceMax=e,t.globals.yAxisScale[0].niceMin=e}}}]),t}(),B=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"getLabel\\\",value:function(t,e,i,a){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\\\"12px\\\",o=this.w,n=void 0===t[a]?\\\"\\\":t[a],l=n,h=o.globals.xLabelFormatter,c=o.config.xaxis.labels.formatter,d=!1,g=new W(this.ctx),u=n;l=g.xLabelFormat(h,n,u,{i:a,dateFormatter:new Y(this.ctx).formatDate,w:o}),void 0!==c&&(l=c(n,t[a],{i:a,dateFormatter:new Y(this.ctx).formatDate,w:o}));var p=function(t){var i=null;return e.forEach((function(t){\\\"month\\\"===t.unit?i=\\\"year\\\":\\\"day\\\"===t.unit?i=\\\"month\\\":\\\"hour\\\"===t.unit?i=\\\"day\\\":\\\"minute\\\"===t.unit&&(i=\\\"hour\\\")})),i===t};e.length>0?(d=p(e[a].unit),i=e[a].position,l=e[a].value):\\\"datetime\\\"===o.config.xaxis.type&&void 0===c&&(l=\\\"\\\"),void 0===l&&(l=\\\"\\\"),l=Array.isArray(l)?l:l.toString();var f=new b(this.ctx),x={};x=o.globals.rotateXLabels?f.getTextRects(l,parseInt(r,10),null,\\\"rotate(\\\".concat(o.config.xaxis.labels.rotate,\\\" 0 0)\\\"),!1):f.getTextRects(l,parseInt(r,10));var v=!o.config.xaxis.labels.showDuplicates&&this.ctx.timeScale;return!Array.isArray(l)&&(0===l.indexOf(\\\"NaN\\\")||0===l.toLowerCase().indexOf(\\\"invalid\\\")||l.toLowerCase().indexOf(\\\"infinity\\\")>=0||s.indexOf(l)>=0&&v)&&(l=\\\"\\\"),{x:i,text:l,textRect:x,isBold:d}}},{key:\\\"checkLabelBasedOnTickamount\\\",value:function(t,e,i){var a=this.w,s=a.config.xaxis.tickAmount;return\\\"dataPoints\\\"===s&&(s=Math.round(a.globals.gridWidth/120)),s>i||t%Math.round(i/(s+1))==0||(e.text=\\\"\\\"),e}},{key:\\\"checkForOverflowingLabels\\\",value:function(t,e,i,a,s){var r=this.w;if(0===t&&r.globals.skipFirstTimelinelabel&&(e.text=\\\"\\\"),t===i-1&&r.globals.skipLastTimelinelabel&&(e.text=\\\"\\\"),r.config.xaxis.labels.hideOverlappingLabels&&a.length>0){var o=s[s.length-1];e.x<o.textRect.width/(r.globals.rotateXLabels?Math.abs(r.config.xaxis.labels.rotate)/12:1.01)+o.x&&(e.text=\\\"\\\")}return e}},{key:\\\"checkForReversedLabels\\\",value:function(t,e){var i=this.w;return i.config.yaxis[t]&&i.config.yaxis[t].reversed&&e.reverse(),e}},{key:\\\"isYAxisHidden\\\",value:function(t){var e=this.w,i=new y(this.ctx);return!e.config.yaxis[t].show||!e.config.yaxis[t].showForNullSeries&&i.isSeriesNull(t)&&-1===e.globals.collapsedSeriesIndices.indexOf(t)}},{key:\\\"getYAxisForeColor\\\",value:function(t,e){var i=this.w;return Array.isArray(t)&&i.globals.yAxisScale[e]&&this.ctx.theme.pushExtraColors(t,i.globals.yAxisScale[e].result.length,!1),t}},{key:\\\"drawYAxisTicks\\\",value:function(t,e,i,a,s,r,o){var n=this.w,l=new b(this.ctx),h=n.globals.translateY;if(a.show&&e>0){!0===n.config.yaxis[s].opposite&&(t+=a.width);for(var c=e;c>=0;c--){var d=h+e/10+n.config.yaxis[s].labels.offsetY-1;n.globals.isBarHorizontal&&(d=r*c),\\\"heatmap\\\"===n.config.chart.type&&(d+=r/2);var g=l.drawLine(t+i.offsetX-a.width+a.offsetX,d+a.offsetY,t+i.offsetX+a.offsetX,d+a.offsetY,a.color);o.add(g),h+=r}}}}]),t}(),V=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"scaleSvgNode\\\",value:function(t,e){var i=parseFloat(t.getAttributeNS(null,\\\"width\\\")),a=parseFloat(t.getAttributeNS(null,\\\"height\\\"));t.setAttributeNS(null,\\\"width\\\",i*e),t.setAttributeNS(null,\\\"height\\\",a*e),t.setAttributeNS(null,\\\"viewBox\\\",\\\"0 0 \\\"+i+\\\" \\\"+a)}},{key:\\\"fixSvgStringForIe11\\\",value:function(t){if(!p.isIE11())return t;var e=0,i=t.replace(/xmlns=\\\"http:\\\\/\\\\/www.w3.org\\\\/2000\\\\/svg\\\"/g,(function(t){return 2===++e?'xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" xmlns:svgjs=\\\"http://svgjs.dev\\\"':t}));return i=(i=i.replace(/xmlns:NS\\\\d+=\\\"\\\"/g,\\\"\\\")).replace(/NS\\\\d+:(\\\\w+:\\\\w+=\\\")/g,\\\"$1\\\")}},{key:\\\"getSvgString\\\",value:function(t){var e=this.w.globals.dom.Paper.svg();if(1!==t){var i=this.w.globals.dom.Paper.node.cloneNode(!0);this.scaleSvgNode(i,t),e=(new XMLSerializer).serializeToString(i)}return this.fixSvgStringForIe11(e)}},{key:\\\"cleanup\\\",value:function(){var t=this.w,e=t.globals.dom.baseEl.getElementsByClassName(\\\"apexcharts-xcrosshairs\\\"),i=t.globals.dom.baseEl.getElementsByClassName(\\\"apexcharts-ycrosshairs\\\"),a=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-zoom-rect, .apexcharts-selection-rect\\\");Array.prototype.forEach.call(a,(function(t){t.setAttribute(\\\"width\\\",0)})),e&&e[0]&&(e[0].setAttribute(\\\"x\\\",-500),e[0].setAttribute(\\\"x1\\\",-500),e[0].setAttribute(\\\"x2\\\",-500)),i&&i[0]&&(i[0].setAttribute(\\\"y\\\",-100),i[0].setAttribute(\\\"y1\\\",-100),i[0].setAttribute(\\\"y2\\\",-100))}},{key:\\\"svgUrl\\\",value:function(){this.cleanup();var t=this.getSvgString(),e=new Blob([t],{type:\\\"image/svg+xml;charset=utf-8\\\"});return URL.createObjectURL(e)}},{key:\\\"dataURI\\\",value:function(t){var e=this;return new Promise((function(i){var a=e.w,s=t?t.scale||t.width/a.globals.svgWidth:1;e.cleanup();var r=document.createElement(\\\"canvas\\\");r.width=a.globals.svgWidth*s,r.height=parseInt(a.globals.dom.elWrap.style.height,10)*s;var o=\\\"transparent\\\"===a.config.chart.background?\\\"#fff\\\":a.config.chart.background,n=r.getContext(\\\"2d\\\");n.fillStyle=o,n.fillRect(0,0,r.width*s,r.height*s);var l=e.getSvgString(s);if(window.canvg&&p.isIE11()){var h=window.canvg.Canvg.fromString(n,l,{ignoreClear:!0,ignoreDimensions:!0});h.start();var c=r.msToBlob();h.stop(),i({blob:c})}else{var d=\\\"data:image/svg+xml,\\\"+encodeURIComponent(l),g=new Image;g.crossOrigin=\\\"anonymous\\\",g.onload=function(){if(n.drawImage(g,0,0),r.msToBlob){var t=r.msToBlob();i({blob:t})}else{var e=r.toDataURL(\\\"image/png\\\");i({imgURI:e})}},g.src=d}}))}},{key:\\\"exportToSVG\\\",value:function(){this.triggerDownload(this.svgUrl(),this.w.config.chart.toolbar.export.svg.filename,\\\".svg\\\")}},{key:\\\"exportToPng\\\",value:function(){var t=this;this.dataURI().then((function(e){var i=e.imgURI,a=e.blob;a?navigator.msSaveOrOpenBlob(a,t.w.globals.chartID+\\\".png\\\"):t.triggerDownload(i,t.w.config.chart.toolbar.export.png.filename,\\\".png\\\")}))}},{key:\\\"exportToCSV\\\",value:function(t){var e=this,i=t.series,a=t.columnDelimiter,s=t.lineDelimiter,r=void 0===s?\\\"\\\\n\\\":s,o=this.w,n=[],l=[],h=\\\"data:text/csv;charset=utf-8,\\\\ufeff\\\",c=new O(this.ctx),d=new B(this.ctx),g=function(t){var i=\\\"\\\";if(o.globals.axisCharts){if(\\\"category\\\"===o.config.xaxis.type||o.config.xaxis.convertedCatToNumeric)if(o.globals.isBarHorizontal){var s=o.globals.yLabelFormatters[0],r=new z(e.ctx).getActiveConfigSeriesIndex();i=s(o.globals.labels[t],{seriesIndex:r,dataPointIndex:t,w:o})}else i=d.getLabel(o.globals.labels,o.globals.timescaleLabels,0,t).text;\\\"datetime\\\"===o.config.xaxis.type&&(o.config.xaxis.categories.length?i=o.config.xaxis.categories[t]:o.config.labels.length&&(i=o.config.labels[t]))}else i=o.config.labels[t];return Array.isArray(i)&&(i=i.join(\\\" \\\")),p.isNumber(i)?i:i.split(a).join(\\\"\\\")};n.push(o.config.chart.toolbar.export.csv.headerCategory),i.map((function(t,e){var i=t.name?t.name:\\\"series-\\\".concat(e);o.globals.axisCharts&&n.push(i.split(a).join(\\\"\\\")?i.split(a).join(\\\"\\\"):\\\"series-\\\".concat(e))})),o.globals.axisCharts||(n.push(o.config.chart.toolbar.export.csv.headerValue),l.push(n.join(a))),i.map((function(t,e){o.globals.axisCharts?function(t,e){if(n.length&&0===e&&l.push(n.join(a)),t.data&&t.data.length)for(var s=0;s<t.data.length;s++){n=[];var r=g(s);if(r||(c.isFormatXY()?r=i[e].data[s].x:c.isFormat2DArray()&&(r=i[e].data[s]?i[e].data[s][0]:\\\"\\\")),0===e){n.push((d=r,\\\"datetime\\\"===o.config.xaxis.type&&String(d).length>=10?o.config.chart.toolbar.export.csv.dateFormatter(r):p.isNumber(r)?r:r.split(a).join(\\\"\\\")));for(var h=0;h<o.globals.series.length;h++)n.push(o.globals.series[h][s])}(\\\"candlestick\\\"===o.config.chart.type||t.type&&\\\"candlestick\\\"===t.type)&&(n.pop(),n.push(o.globals.seriesCandleO[e][s]),n.push(o.globals.seriesCandleH[e][s]),n.push(o.globals.seriesCandleL[e][s]),n.push(o.globals.seriesCandleC[e][s])),(\\\"boxPlot\\\"===o.config.chart.type||t.type&&\\\"boxPlot\\\"===t.type)&&(n.pop(),n.push(o.globals.seriesCandleO[e][s]),n.push(o.globals.seriesCandleH[e][s]),n.push(o.globals.seriesCandleM[e][s]),n.push(o.globals.seriesCandleL[e][s]),n.push(o.globals.seriesCandleC[e][s])),\\\"rangeBar\\\"===o.config.chart.type&&(n.pop(),n.push(o.globals.seriesRangeStart[e][s]),n.push(o.globals.seriesRangeEnd[e][s])),n.length&&l.push(n.join(a))}var d}(t,e):((n=[]).push(o.globals.labels[e].split(a).join(\\\"\\\")),n.push(o.globals.series[e]),l.push(n.join(a)))})),h+=l.join(r),this.triggerDownload(encodeURI(h),o.config.chart.toolbar.export.csv.filename,\\\".csv\\\")}},{key:\\\"triggerDownload\\\",value:function(t,e,i){var a=document.createElement(\\\"a\\\");a.href=t,a.download=(e||this.w.globals.chartID)+i,document.body.appendChild(a),a.click(),document.body.removeChild(a)}}]),t}(),G=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.axesUtils=new B(e),this.xaxisLabels=i.globals.labels.slice(),i.globals.timescaleLabels.length>0&&!i.globals.isBarHorizontal&&(this.xaxisLabels=i.globals.timescaleLabels.slice()),i.config.xaxis.overwriteCategories&&(this.xaxisLabels=i.config.xaxis.overwriteCategories),this.drawnLabels=[],this.drawnLabelsRects=[],\\\"top\\\"===i.config.xaxis.position?this.offY=0:this.offY=i.globals.gridHeight+1,this.offY=this.offY+i.config.xaxis.axisBorder.offsetY,this.isCategoryBarHorizontal=\\\"bar\\\"===i.config.chart.type&&i.config.plotOptions.bar.horizontal,this.xaxisFontSize=i.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=i.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=i.config.xaxis.labels.style.colors,this.xaxisBorderWidth=i.config.xaxis.axisBorder.width,this.isCategoryBarHorizontal&&(this.xaxisBorderWidth=i.config.yaxis[0].axisBorder.width.toString()),this.xaxisBorderWidth.indexOf(\\\"%\\\")>-1?this.xaxisBorderWidth=i.globals.gridWidth*parseInt(this.xaxisBorderWidth,10)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth,10),this.xaxisBorderHeight=i.config.xaxis.axisBorder.height,this.yaxis=i.config.yaxis[0]}return r(t,[{key:\\\"drawXaxis\\\",value:function(){var t,e=this,i=this.w,a=new b(this.ctx),s=a.group({class:\\\"apexcharts-xaxis\\\",transform:\\\"translate(\\\".concat(i.config.xaxis.offsetX,\\\", \\\").concat(i.config.xaxis.offsetY,\\\")\\\")}),r=a.group({class:\\\"apexcharts-xaxis-texts-g\\\",transform:\\\"translate(\\\".concat(i.globals.translateXAxisX,\\\", \\\").concat(i.globals.translateXAxisY,\\\")\\\")});s.add(r);for(var o=i.globals.padHorizontal,n=[],l=0;l<this.xaxisLabels.length;l++)n.push(this.xaxisLabels[l]);var h=n.length;if(i.globals.isXNumeric){var c=h>1?h-1:h;t=i.globals.gridWidth/c,o=o+t/2+i.config.xaxis.labels.offsetX}else t=i.globals.gridWidth/n.length,o=o+t+i.config.xaxis.labels.offsetX;for(var d=function(s){var l=o-t/2+i.config.xaxis.labels.offsetX;0===s&&1===h&&t/2===o&&1===i.globals.dataPoints&&(l=i.globals.gridWidth/2);var c=e.axesUtils.getLabel(n,i.globals.timescaleLabels,l,s,e.drawnLabels,e.xaxisFontSize),d=28;i.globals.rotateXLabels&&(d=22);if((c=void 0!==i.config.xaxis.tickAmount&&\\\"dataPoints\\\"!==i.config.xaxis.tickAmount&&\\\"datetime\\\"!==i.config.xaxis.type?e.axesUtils.checkLabelBasedOnTickamount(s,c,h):e.axesUtils.checkForOverflowingLabels(s,c,h,e.drawnLabels,e.drawnLabelsRects)).text&&i.globals.xaxisLabelsCount++,i.config.xaxis.labels.show){var g=a.drawText({x:c.x,y:e.offY+i.config.xaxis.labels.offsetY+d-(\\\"top\\\"===i.config.xaxis.position?i.globals.xAxisHeight+i.config.xaxis.axisTicks.height-2:0),text:c.text,textAnchor:\\\"middle\\\",fontWeight:c.isBold?600:i.config.xaxis.labels.style.fontWeight,fontSize:e.xaxisFontSize,fontFamily:e.xaxisFontFamily,foreColor:Array.isArray(e.xaxisForeColors)?i.config.xaxis.convertedCatToNumeric?e.xaxisForeColors[i.globals.minX+s-1]:e.xaxisForeColors[s]:e.xaxisForeColors,isPlainText:!1,cssClass:\\\"apexcharts-xaxis-label \\\"+i.config.xaxis.labels.style.cssClass});r.add(g);var u=document.createElementNS(i.globals.SVGNS,\\\"title\\\");u.textContent=Array.isArray(c.text)?c.text.join(\\\" \\\"):c.text,g.node.appendChild(u),\\\"\\\"!==c.text&&(e.drawnLabels.push(c.text),e.drawnLabelsRects.push(c))}o+=t},g=0;g<=h-1;g++)d(g);if(void 0!==i.config.xaxis.title.text){var u=a.group({class:\\\"apexcharts-xaxis-title\\\"}),p=a.drawText({x:i.globals.gridWidth/2+i.config.xaxis.title.offsetX,y:this.offY+parseFloat(this.xaxisFontSize)+i.globals.xAxisLabelsHeight+i.config.xaxis.title.offsetY,text:i.config.xaxis.title.text,textAnchor:\\\"middle\\\",fontSize:i.config.xaxis.title.style.fontSize,fontFamily:i.config.xaxis.title.style.fontFamily,fontWeight:i.config.xaxis.title.style.fontWeight,foreColor:i.config.xaxis.title.style.color,cssClass:\\\"apexcharts-xaxis-title-text \\\"+i.config.xaxis.title.style.cssClass});u.add(p),s.add(u)}if(i.config.xaxis.axisBorder.show){var f=i.globals.barPadForNumericAxis,x=a.drawLine(i.globals.padHorizontal+i.config.xaxis.axisBorder.offsetX-f,this.offY,this.xaxisBorderWidth+f,this.offY,i.config.xaxis.axisBorder.color,0,this.xaxisBorderHeight);s.add(x)}return s}},{key:\\\"drawXaxisInversed\\\",value:function(t){var e,i,a=this,s=this.w,r=new b(this.ctx),o=s.config.yaxis[0].opposite?s.globals.translateYAxisX[t]:0,n=r.group({class:\\\"apexcharts-yaxis apexcharts-xaxis-inversed\\\",rel:t}),l=r.group({class:\\\"apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g\\\",transform:\\\"translate(\\\"+o+\\\", 0)\\\"});n.add(l);var h=[];if(s.config.yaxis[t].show)for(var c=0;c<this.xaxisLabels.length;c++)h.push(this.xaxisLabels[c]);e=s.globals.gridHeight/h.length,i=-e/2.2;var d=s.globals.yLabelFormatters[0],g=s.config.yaxis[0].labels;if(g.show)for(var u=function(o){var n=void 0===h[o]?\\\"\\\":h[o];n=d(n,{seriesIndex:t,dataPointIndex:o,w:s});var c=a.axesUtils.getYAxisForeColor(g.style.colors,t),u=0;Array.isArray(n)&&(u=n.length/2*parseInt(g.style.fontSize,10));var p=r.drawText({x:g.offsetX-15,y:i+e+g.offsetY-u,text:n,textAnchor:a.yaxis.opposite?\\\"start\\\":\\\"end\\\",foreColor:Array.isArray(c)?c[o]:c,fontSize:g.style.fontSize,fontFamily:g.style.fontFamily,fontWeight:g.style.fontWeight,isPlainText:!1,cssClass:\\\"apexcharts-yaxis-label \\\"+g.style.cssClass});l.add(p);var f=document.createElementNS(s.globals.SVGNS,\\\"title\\\");if(f.textContent=Array.isArray(n)?n.join(\\\" \\\"):n,p.node.appendChild(f),0!==s.config.yaxis[t].labels.rotate){var x=r.rotateAroundCenter(p.node);p.node.setAttribute(\\\"transform\\\",\\\"rotate(\\\".concat(s.config.yaxis[t].labels.rotate,\\\" 0 \\\").concat(x.y,\\\")\\\"))}i+=e},p=0;p<=h.length-1;p++)u(p);if(void 0!==s.config.yaxis[0].title.text){var f=r.group({class:\\\"apexcharts-yaxis-title apexcharts-xaxis-title-inversed\\\",transform:\\\"translate(\\\"+o+\\\", 0)\\\"}),x=r.drawText({x:0,y:s.globals.gridHeight/2,text:s.config.yaxis[0].title.text,textAnchor:\\\"middle\\\",foreColor:s.config.yaxis[0].title.style.color,fontSize:s.config.yaxis[0].title.style.fontSize,fontWeight:s.config.yaxis[0].title.style.fontWeight,fontFamily:s.config.yaxis[0].title.style.fontFamily,cssClass:\\\"apexcharts-yaxis-title-text \\\"+s.config.yaxis[0].title.style.cssClass});f.add(x),n.add(f)}var v=0;this.isCategoryBarHorizontal&&s.config.yaxis[0].opposite&&(v=s.globals.gridWidth);var m=s.config.xaxis.axisBorder;if(m.show){var y=r.drawLine(s.globals.padHorizontal+m.offsetX+v,1+m.offsetY,s.globals.padHorizontal+m.offsetX+v,s.globals.gridHeight+m.offsetY,m.color,0);n.add(y)}return s.config.yaxis[0].axisTicks.show&&this.axesUtils.drawYAxisTicks(v,h.length,s.config.yaxis[0].axisBorder,s.config.yaxis[0].axisTicks,0,e,n),n}},{key:\\\"drawXaxisTicks\\\",value:function(t,e){var i=this.w,a=t;if(!(t<0||t-2>i.globals.gridWidth)){var s=this.offY+i.config.xaxis.axisTicks.offsetY,r=s+i.config.xaxis.axisTicks.height;if(\\\"top\\\"===i.config.xaxis.position&&(r=s-i.config.xaxis.axisTicks.height),i.config.xaxis.axisTicks.show){var o=new b(this.ctx).drawLine(t+i.config.xaxis.axisTicks.offsetX,s+i.config.xaxis.offsetY,a+i.config.xaxis.axisTicks.offsetX,r+i.config.xaxis.offsetY,i.config.xaxis.axisTicks.color);e.add(o),o.node.classList.add(\\\"apexcharts-xaxis-tick\\\")}}}},{key:\\\"getXAxisTicksPositions\\\",value:function(){var t=this.w,e=[],i=this.xaxisLabels.length,a=t.globals.padHorizontal;if(t.globals.timescaleLabels.length>0)for(var s=0;s<i;s++)a=this.xaxisLabels[s].position,e.push(a);else for(var r=i,o=0;o<r;o++){var n=r;t.globals.isXNumeric&&\\\"bar\\\"!==t.config.chart.type&&(n-=1),a+=t.globals.gridWidth/n,e.push(a)}return e}},{key:\\\"xAxisLabelCorrections\\\",value:function(){var t=this.w,e=new b(this.ctx),i=t.globals.dom.baseEl.querySelector(\\\".apexcharts-xaxis-texts-g\\\"),a=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-xaxis-texts-g text\\\"),s=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-yaxis-inversed text\\\"),r=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-xaxis-inversed-texts-g text tspan\\\");if(t.globals.rotateXLabels||t.config.xaxis.labels.rotateAlways)for(var o=0;o<a.length;o++){var n=e.rotateAroundCenter(a[o]);n.y=n.y-1,n.x=n.x+1,a[o].setAttribute(\\\"transform\\\",\\\"rotate(\\\".concat(t.config.xaxis.labels.rotate,\\\" \\\").concat(n.x,\\\" \\\").concat(n.y,\\\")\\\")),a[o].setAttribute(\\\"text-anchor\\\",\\\"end\\\");i.setAttribute(\\\"transform\\\",\\\"translate(0, \\\".concat(-10,\\\")\\\"));var l=a[o].childNodes;t.config.xaxis.labels.trim&&Array.prototype.forEach.call(l,(function(i){e.placeTextWithEllipsis(i,i.textContent,t.globals.xAxisLabelsHeight-(\\\"bottom\\\"===t.config.legend.position?20:10))}))}else!function(){for(var i=t.globals.gridWidth/(t.globals.labels.length+1),s=0;s<a.length;s++){var r=a[s].childNodes;t.config.xaxis.labels.trim&&\\\"datetime\\\"!==t.config.xaxis.type&&Array.prototype.forEach.call(r,(function(t){e.placeTextWithEllipsis(t,t.textContent,i)}))}}();if(s.length>0){var h=s[s.length-1].getBBox(),c=s[0].getBBox();h.x<-20&&s[s.length-1].parentNode.removeChild(s[s.length-1]),c.x+c.width>t.globals.gridWidth&&!t.globals.isBarHorizontal&&s[0].parentNode.removeChild(s[0]);for(var d=0;d<r.length;d++)e.placeTextWithEllipsis(r[d],r[d].textContent,t.config.yaxis[0].labels.maxWidth-2*parseFloat(t.config.yaxis[0].title.style.fontSize)-20)}}}]),t}(),_=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.xaxisLabels=i.globals.labels.slice(),this.axesUtils=new B(e),this.isTimelineBar=\\\"datetime\\\"===i.config.xaxis.type&&i.globals.seriesRangeBarTimeline.length,i.globals.timescaleLabels.length>0&&(this.xaxisLabels=i.globals.timescaleLabels.slice())}return r(t,[{key:\\\"drawGridArea\\\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w,i=new b(this.ctx);null===t&&(t=i.group({class:\\\"apexcharts-grid\\\"}));var a=i.drawLine(e.globals.padHorizontal,1,e.globals.padHorizontal,e.globals.gridHeight,\\\"transparent\\\"),s=i.drawLine(e.globals.padHorizontal,e.globals.gridHeight,e.globals.gridWidth,e.globals.gridHeight,\\\"transparent\\\");return t.add(s),t.add(a),t}},{key:\\\"drawGrid\\\",value:function(){var t=null;return this.w.globals.axisCharts&&(t=this.renderGrid(),this.drawGridArea(t.el)),t}},{key:\\\"createGridMask\\\",value:function(){var t=this.w,e=t.globals,i=new b(this.ctx),a=Array.isArray(t.config.stroke.width)?0:t.config.stroke.width;if(Array.isArray(t.config.stroke.width)){var s=0;t.config.stroke.width.forEach((function(t){s=Math.max(s,t)})),a=s}e.dom.elGridRectMask=document.createElementNS(e.SVGNS,\\\"clipPath\\\"),e.dom.elGridRectMask.setAttribute(\\\"id\\\",\\\"gridRectMask\\\".concat(e.cuid)),e.dom.elGridRectMarkerMask=document.createElementNS(e.SVGNS,\\\"clipPath\\\"),e.dom.elGridRectMarkerMask.setAttribute(\\\"id\\\",\\\"gridRectMarkerMask\\\".concat(e.cuid)),e.dom.elForecastMask=document.createElementNS(e.SVGNS,\\\"clipPath\\\"),e.dom.elForecastMask.setAttribute(\\\"id\\\",\\\"forecastMask\\\".concat(e.cuid)),e.dom.elNonForecastMask=document.createElementNS(e.SVGNS,\\\"clipPath\\\"),e.dom.elNonForecastMask.setAttribute(\\\"id\\\",\\\"nonForecastMask\\\".concat(e.cuid));var r=t.config.chart.type,o=0,n=0;(\\\"bar\\\"===r||\\\"rangeBar\\\"===r||\\\"candlestick\\\"===r||\\\"boxPlot\\\"===r||t.globals.comboBarCount>0)&&t.globals.isXNumeric&&!t.globals.isBarHorizontal&&(o=t.config.grid.padding.left,n=t.config.grid.padding.right,e.barPadForNumericAxis>o&&(o=e.barPadForNumericAxis,n=e.barPadForNumericAxis)),e.dom.elGridRect=i.drawRect(-a/2-o-2,-a/2,e.gridWidth+a+n+o+4,e.gridHeight+a,0,\\\"#fff\\\"),new y(this).getLargestMarkerSize();var l=t.globals.markers.largestSize+1;e.dom.elGridRectMarker=i.drawRect(2*-l,2*-l,e.gridWidth+4*l,e.gridHeight+4*l,0,\\\"#fff\\\"),e.dom.elGridRectMask.appendChild(e.dom.elGridRect.node),e.dom.elGridRectMarkerMask.appendChild(e.dom.elGridRectMarker.node);var h=e.dom.baseEl.querySelector(\\\"defs\\\");h.appendChild(e.dom.elGridRectMask),h.appendChild(e.dom.elForecastMask),h.appendChild(e.dom.elNonForecastMask),h.appendChild(e.dom.elGridRectMarkerMask)}},{key:\\\"_drawGridLines\\\",value:function(t){var e=t.i,i=t.x1,a=t.y1,s=t.x2,r=t.y2,o=t.xCount,n=t.parent,l=this.w;0===e&&l.globals.skipFirstTimelinelabel||e===o-1&&l.globals.skipLastTimelinelabel&&!l.config.xaxis.labels.formatter||\\\"radar\\\"===l.config.chart.type||(l.config.grid.xaxis.lines.show&&this._drawGridLine({x1:i,y1:a,x2:s,y2:r,parent:n}),new G(this.ctx).drawXaxisTicks(i,this.elg))}},{key:\\\"_drawGridLine\\\",value:function(t){var e=t.x1,i=t.y1,a=t.x2,s=t.y2,r=t.parent,o=this.w,n=r.node.classList.contains(\\\"apexcharts-gridlines-horizontal\\\"),l=o.config.grid.strokeDashArray,h=o.globals.barPadForNumericAxis,c=new b(this).drawLine(e-(n?h:0),i,a+(n?h:0),s,o.config.grid.borderColor,l);c.node.classList.add(\\\"apexcharts-gridline\\\"),r.add(c)}},{key:\\\"_drawGridBandRect\\\",value:function(t){var e=t.c,i=t.x1,a=t.y1,s=t.x2,r=t.y2,o=t.type,n=this.w,l=new b(this.ctx),h=n.globals.barPadForNumericAxis;if(\\\"column\\\"!==o||\\\"datetime\\\"!==n.config.xaxis.type){var c=n.config.grid[o].colors[e],d=l.drawRect(i-(\\\"row\\\"===o?h:0),a,s+(\\\"row\\\"===o?2*h:0),r,0,c,n.config.grid[o].opacity);this.elg.add(d),d.attr(\\\"clip-path\\\",\\\"url(#gridRectMask\\\".concat(n.globals.cuid,\\\")\\\")),d.node.classList.add(\\\"apexcharts-grid-\\\".concat(o))}}},{key:\\\"_drawXYLines\\\",value:function(t){var e=this,i=t.xCount,a=t.tickAmount,s=this.w;if(s.config.grid.xaxis.lines.show||s.config.xaxis.axisTicks.show){var r,o=s.globals.padHorizontal,n=s.globals.gridHeight;s.globals.timescaleLabels.length?function(t){for(var a=t.xC,s=t.x1,r=t.y1,o=t.x2,n=t.y2,l=0;l<a;l++)s=e.xaxisLabels[l].position,o=e.xaxisLabels[l].position,e._drawGridLines({i:l,x1:s,y1:r,x2:o,y2:n,xCount:i,parent:e.elgridLinesV})}({xC:i,x1:o,y1:0,x2:r,y2:n}):(s.globals.isXNumeric&&(i=s.globals.xAxisScale.result.length),s.config.xaxis.convertedCatToNumeric&&(i=s.globals.xaxisLabelsCount),function(t){var a=t.xC,r=t.x1,o=t.y1,n=t.x2,l=t.y2;if(void 0!==s.config.xaxis.tickAmount&&\\\"dataPoints\\\"!==s.config.xaxis.tickAmount)s.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-text.apexcharts-xaxis-label tspan:not(:empty)\\\").forEach((function(t,a){var s=t.getBBox();e._drawGridLines({i:a,x1:s.x+s.width/2,y1:o,x2:s.x+s.width/2,y2:l,xCount:i,parent:e.elgridLinesV})}));else for(var h=0;h<a+(s.globals.isXNumeric?0:1);h++)0===h&&1===a&&1===s.globals.dataPoints&&(n=r=s.globals.gridWidth/2),e._drawGridLines({i:h,x1:r,y1:o,x2:n,y2:l,xCount:i,parent:e.elgridLinesV}),n=r+=s.globals.gridWidth/(s.globals.isXNumeric?a-1:a)}({xC:i,x1:o,y1:0,x2:r,y2:n}))}if(s.config.grid.yaxis.lines.show){var l=0,h=0,c=s.globals.gridWidth,d=a+1;this.isTimelineBar&&(d=s.globals.labels.length);for(var g=0;g<d+(this.isTimelineBar?1:0);g++)this._drawGridLine({x1:0,y1:l,x2:c,y2:h,parent:this.elgridLinesH}),h=l+=s.globals.gridHeight/(this.isTimelineBar?d:a)}}},{key:\\\"_drawInvertedXYLines\\\",value:function(t){var e=t.xCount,i=this.w;if(i.config.grid.xaxis.lines.show||i.config.xaxis.axisTicks.show)for(var a,s=i.globals.padHorizontal,r=i.globals.gridHeight,o=0;o<e+1;o++){i.config.grid.xaxis.lines.show&&this._drawGridLine({x1:s,y1:0,x2:a,y2:r,parent:this.elgridLinesV}),new G(this.ctx).drawXaxisTicks(s,this.elg),a=s=s+i.globals.gridWidth/e+.3}if(i.config.grid.yaxis.lines.show)for(var n=0,l=0,h=i.globals.gridWidth,c=0;c<i.globals.dataPoints+1;c++)this._drawGridLine({x1:0,y1:n,x2:h,y2:l,parent:this.elgridLinesH}),l=n+=i.globals.gridHeight/i.globals.dataPoints}},{key:\\\"renderGrid\\\",value:function(){var t=this.w,e=new b(this.ctx);this.elg=e.group({class:\\\"apexcharts-grid\\\"}),this.elgridLinesH=e.group({class:\\\"apexcharts-gridlines-horizontal\\\"}),this.elgridLinesV=e.group({class:\\\"apexcharts-gridlines-vertical\\\"}),this.elg.add(this.elgridLinesH),this.elg.add(this.elgridLinesV),t.config.grid.show||(this.elgridLinesV.hide(),this.elgridLinesH.hide());for(var i,a=t.globals.yAxisScale.length?t.globals.yAxisScale[0].result.length-1:5,s=0;s<t.globals.series.length&&(void 0!==t.globals.yAxisScale[s]&&(a=t.globals.yAxisScale[s].result.length-1),!(a>2));s++);return!t.globals.isBarHorizontal||this.isTimelineBar?(i=this.xaxisLabels.length,this.isTimelineBar&&(a=t.globals.labels.length,t.config.xaxis.tickAmount&&t.config.xaxis.labels.formatter&&(i=t.config.xaxis.tickAmount)),this._drawXYLines({xCount:i,tickAmount:a})):(i=a,a=t.globals.xTickAmount,this._drawInvertedXYLines({xCount:i,tickAmount:a})),this.drawGridBands(i,a),{el:this.elg,xAxisTickWidth:t.globals.gridWidth/i}}},{key:\\\"drawGridBands\\\",value:function(t,e){var i=this.w;if(void 0!==i.config.grid.row.colors&&i.config.grid.row.colors.length>0)for(var a=0,s=i.globals.gridHeight/e,r=i.globals.gridWidth,o=0,n=0;o<e;o++,n++)n>=i.config.grid.row.colors.length&&(n=0),this._drawGridBandRect({c:n,x1:0,y1:a,x2:r,y2:s,type:\\\"row\\\"}),a+=i.globals.gridHeight/e;if(void 0!==i.config.grid.column.colors&&i.config.grid.column.colors.length>0)for(var l=i.globals.isBarHorizontal||\\\"category\\\"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric?t:t-1,h=i.globals.padHorizontal,c=i.globals.padHorizontal+i.globals.gridWidth/l,d=i.globals.gridHeight,g=0,u=0;g<t;g++,u++)u>=i.config.grid.column.colors.length&&(u=0),this._drawGridBandRect({c:u,x1:h,y1:0,x2:c,y2:d,type:\\\"column\\\"}),h+=i.globals.gridWidth/l}}]),t}(),j=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"niceScale\\\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4?arguments[4]:void 0,r=this.w,o=Math.abs(e-t);if(\\\"dataPoints\\\"===(i=this._adjustTicksForSmallRange(i,a,o))&&(i=r.globals.dataPoints-1),t===Number.MIN_VALUE&&0===e||!p.isNumber(t)&&!p.isNumber(e)||t===Number.MIN_VALUE&&e===-Number.MAX_VALUE){t=0,e=i;var n=this.linearScale(t,e,i);return n}t>e?(console.warn(\\\"axis.min cannot be greater than axis.max\\\"),e=t+.1):t===e&&(t=0===t?0:t-.5,e=0===e?2:e+.5);var l=[];o<1&&s&&(\\\"candlestick\\\"===r.config.chart.type||\\\"candlestick\\\"===r.config.series[a].type||\\\"boxPlot\\\"===r.config.chart.type||\\\"boxPlot\\\"===r.config.series[a].type||r.globals.isRangeData)&&(e*=1.01);var h=i+1;h<2?h=2:h>2&&(h-=2);var c=o/h,d=Math.floor(p.log10(c)),g=Math.pow(10,d),u=Math.round(c/g);u<1&&(u=1);var f=u*g,x=f*Math.floor(t/f),b=f*Math.ceil(e/f),v=x;if(s&&o>2){for(;l.push(v),!((v+=f)>b););return{result:l,niceMin:l[0],niceMax:l[l.length-1]}}var m=t;(l=[]).push(m);for(var y=Math.abs(e-t)/i,w=0;w<=i;w++)m+=y,l.push(m);return l[l.length-2]>=e&&l.pop(),{result:l,niceMin:l[0],niceMax:l[l.length-1]}}},{key:\\\"linearScale\\\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,a=arguments.length>3?arguments[3]:void 0,s=Math.abs(e-t);\\\"dataPoints\\\"===(i=this._adjustTicksForSmallRange(i,a,s))&&(i=this.w.globals.dataPoints-1);var r=s/i;i===Number.MAX_VALUE&&(i=10,r=1);for(var o=[],n=t;i>=0;)o.push(n),n+=r,i-=1;return{result:o,niceMin:o[0],niceMax:o[o.length-1]}}},{key:\\\"logarithmicScale\\\",value:function(t){for(var e=[],i=Math.ceil(Math.log10(t))+1,a=0;a<i;a++)e.push(Math.pow(10,a));return{result:e,niceMin:e[0],niceMax:e[e.length-1]}}},{key:\\\"_adjustTicksForSmallRange\\\",value:function(t,e,i){var a=t;if(void 0!==e&&this.w.config.yaxis[e].labels.formatter&&void 0===this.w.config.yaxis[e].tickAmount){var s=this.w.config.yaxis[e].labels.formatter(1);p.isNumber(Number(s))&&!p.isFloat(s)&&(a=Math.ceil(i))}return a<t?a:t}},{key:\\\"setYScaleForIndex\\\",value:function(t,e,i){var a=this.w.globals,s=this.w.config,r=a.isBarHorizontal?s.xaxis:s.yaxis[t];void 0===a.yAxisScale[t]&&(a.yAxisScale[t]=[]);var o=Math.abs(i-e);if(r.logarithmic&&o<=5&&(a.invalidLogScale=!0),r.logarithmic&&o>5)a.allSeriesCollapsed=!1,a.yAxisScale[t]=this.logarithmicScale(i);else if(i!==-Number.MAX_VALUE&&p.isNumber(i))if(a.allSeriesCollapsed=!1,void 0===r.min&&void 0===r.max||r.forceNiceScale){var n=void 0===s.yaxis[t].max&&void 0===s.yaxis[t].min||s.yaxis[t].forceNiceScale;a.yAxisScale[t]=this.niceScale(e,i,r.tickAmount?r.tickAmount:o<5&&o>1?o+1:5,t,n)}else a.yAxisScale[t]=this.linearScale(e,i,r.tickAmount,t);else a.yAxisScale[t]=this.linearScale(0,5,5)}},{key:\\\"setXScale\\\",value:function(t,e){var i=this.w,a=i.globals,s=i.config.xaxis,r=Math.abs(e-t);return e!==-Number.MAX_VALUE&&p.isNumber(e)?a.xAxisScale=this.linearScale(t,e,s.tickAmount?s.tickAmount:r<5&&r>1?r+1:5,0):a.xAxisScale=this.linearScale(0,5,5),a.xAxisScale}},{key:\\\"setMultipleYScales\\\",value:function(){var t=this,e=this.w.globals,i=this.w.config,a=e.minYArr.concat([]),s=e.maxYArr.concat([]),r=[];i.yaxis.forEach((function(e,o){var n=o;i.series.forEach((function(t,i){t.name===e.seriesName&&(n=i,o!==i?r.push({index:i,similarIndex:o,alreadyExists:!0}):r.push({index:i}))}));var l=a[n],h=s[n];t.setYScaleForIndex(o,l,h)})),this.sameScaleInMultipleAxes(a,s,r)}},{key:\\\"sameScaleInMultipleAxes\\\",value:function(t,e,i){var a=this,s=this.w.config,r=this.w.globals,o=[];i.forEach((function(t){t.alreadyExists&&(void 0===o[t.index]&&(o[t.index]=[]),o[t.index].push(t.index),o[t.index].push(t.similarIndex))})),r.yAxisSameScaleIndices=o,o.forEach((function(t,e){o.forEach((function(i,a){var s,r;e!==a&&(s=t,r=i,s.filter((function(t){return-1!==r.indexOf(t)}))).length>0&&(o[e]=o[e].concat(o[a]))}))}));var n=o.map((function(t){return t.filter((function(e,i){return t.indexOf(e)===i}))})).map((function(t){return t.sort()}));o=o.filter((function(t){return!!t}));var l=n.slice(),h=l.map((function(t){return JSON.stringify(t)}));l=l.filter((function(t,e){return h.indexOf(JSON.stringify(t))===e}));var c=[],d=[];t.forEach((function(t,i){l.forEach((function(a,s){a.indexOf(i)>-1&&(void 0===c[s]&&(c[s]=[],d[s]=[]),c[s].push({key:i,value:t}),d[s].push({key:i,value:e[i]}))}))}));var g=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,Number.MIN_VALUE),u=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,-Number.MAX_VALUE);c.forEach((function(t,e){t.forEach((function(t,i){g[e]=Math.min(t.value,g[e])}))})),d.forEach((function(t,e){t.forEach((function(t,i){u[e]=Math.max(t.value,u[e])}))})),t.forEach((function(t,e){d.forEach((function(t,i){var o=g[i],n=u[i];s.chart.stacked&&(n=0,t.forEach((function(t,e){t.value!==-Number.MAX_VALUE&&(n+=t.value),o!==Number.MIN_VALUE&&(o+=c[i][e].value)}))),t.forEach((function(i,l){t[l].key===e&&(void 0!==s.yaxis[e].min&&(o=\\\"function\\\"==typeof s.yaxis[e].min?s.yaxis[e].min(r.minY):s.yaxis[e].min),void 0!==s.yaxis[e].max&&(n=\\\"function\\\"==typeof s.yaxis[e].max?s.yaxis[e].max(r.maxY):s.yaxis[e].max),a.setYScaleForIndex(e,o,n))}))}))}))}},{key:\\\"autoScaleY\\\",value:function(t,e,i){t||(t=this);var a=t.w;if(a.globals.isMultipleYAxis||a.globals.collapsedSeries.length)return console.warn(\\\"autoScaleYaxis is not supported in a multi-yaxis chart.\\\"),e;var s=a.globals.seriesX[0],r=a.config.chart.stacked;return e.forEach((function(t,o){for(var n=0,l=0;l<s.length;l++)if(s[l]>=i.xaxis.min){n=l;break}var h,c,d=a.globals.minYArr[o],g=a.globals.maxYArr[o],u=a.globals.stackedSeriesTotals;a.globals.series.forEach((function(o,l){var p=o[n];r?(p=u[n],h=c=p,u.forEach((function(t,e){s[e]<=i.xaxis.max&&s[e]>=i.xaxis.min&&(t>c&&null!==t&&(c=t),o[e]<h&&null!==o[e]&&(h=o[e]))}))):(h=c=p,o.forEach((function(t,e){if(s[e]<=i.xaxis.max&&s[e]>=i.xaxis.min){var r=t,o=t;a.globals.series.forEach((function(i,a){null!==t&&(r=Math.min(i[e],r),o=Math.max(i[e],o))})),o>c&&null!==o&&(c=o),r<h&&null!==r&&(h=r)}}))),void 0===h&&void 0===c&&(h=d,c=g),(c*=c<0?.9:1.1)<0&&c<g&&(c=g),(h*=h<0?1.1:.9)<0&&h>d&&(h=d),e.length>1?(e[l].min=void 0===t.min?h:t.min,e[l].max=void 0===t.max?c:t.max):(e[0].min=void 0===t.min?h:t.min,e[0].max=void 0===t.max?c:t.max)}))})),e}}]),t}(),U=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.scales=new j(e)}return r(t,[{key:\\\"init\\\",value:function(){this.setYRange(),this.setXRange(),this.setZRange()}},{key:\\\"getMinYMaxY\\\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-Number.MAX_VALUE,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.w.config,r=this.w.globals,o=-Number.MAX_VALUE,n=Number.MIN_VALUE;null===a&&(a=t+1);var l=r.series,h=l,c=l;\\\"candlestick\\\"===s.chart.type?(h=r.seriesCandleL,c=r.seriesCandleH):\\\"boxPlot\\\"===s.chart.type?(h=r.seriesCandleO,c=r.seriesCandleC):r.isRangeData&&(h=r.seriesRangeStart,c=r.seriesRangeEnd);for(var d=t;d<a;d++){r.dataPoints=Math.max(r.dataPoints,l[d].length);for(var g=0;g<r.series[d].length;g++){var u=l[d][g];null!==u&&p.isNumber(u)?(void 0!==c[d][g]&&(o=Math.max(o,c[d][g])),void 0!==h[d][g]&&(e=Math.min(e,h[d][g]),i=Math.max(i,h[d][g])),\\\"candlestick\\\"!==this.w.config.chart.type&&\\\"boxPlot\\\"!==this.w.config.chart.type||(void 0!==r.seriesCandleC[d][g]&&(o=Math.max(o,r.seriesCandleO[d][g]),o=Math.max(o,r.seriesCandleH[d][g]),o=Math.max(o,r.seriesCandleL[d][g]),o=Math.max(o,r.seriesCandleC[d][g]),\\\"boxPlot\\\"===this.w.config.chart.type&&(o=Math.max(o,r.seriesCandleM[d][g]))),!s.series[d].type||\\\"candlestick\\\"===s.series[d].type&&\\\"boxPlot\\\"===s.series[d].type||(o=Math.max(o,r.series[d][g]),e=Math.min(e,r.series[d][g])),i=o),r.seriesGoals[d]&&r.seriesGoals[d][g]&&Array.isArray(r.seriesGoals[d][g])&&r.seriesGoals[d][g].forEach((function(t){n!==Number.MIN_VALUE&&(n=Math.min(n,t.value),e=n),o=Math.max(o,t.value),i=o})),p.isFloat(u)&&(u=p.noExponents(u),r.yValueDecimal=Math.max(r.yValueDecimal,u.toString().split(\\\".\\\")[1].length)),n>h[d][g]&&h[d][g]<0&&(n=h[d][g])):r.hasNullValues=!0}}return\\\"rangeBar\\\"===s.chart.type&&r.seriesRangeStart.length&&r.isBarHorizontal&&\\\"datetime\\\"===s.xaxis.type&&(n=e),\\\"bar\\\"===s.chart.type&&(n<0&&o<0&&(o=0),n===Number.MIN_VALUE&&(n=0)),{minY:n,maxY:o,lowestY:e,highestY:i}}},{key:\\\"setYRange\\\",value:function(){var t=this.w.globals,e=this.w.config;t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE;var i=Number.MAX_VALUE;if(t.isMultipleYAxis)for(var a=0;a<t.series.length;a++){var s=this.getMinYMaxY(a,i,null,a+1);t.minYArr.push(s.minY),t.maxYArr.push(s.maxY),i=s.lowestY}var r=this.getMinYMaxY(0,i,null,t.series.length);if(t.minY=r.minY,t.maxY=r.maxY,i=r.lowestY,e.chart.stacked&&this._setStackedMinMax(),(\\\"line\\\"===e.chart.type||\\\"area\\\"===e.chart.type||\\\"candlestick\\\"===e.chart.type||\\\"boxPlot\\\"===e.chart.type||\\\"rangeBar\\\"===e.chart.type&&!t.isBarHorizontal)&&t.minY===Number.MIN_VALUE&&i!==-Number.MAX_VALUE&&i!==t.maxY){var o=t.maxY-i;(i>=0&&i<=10||void 0!==e.yaxis[0].min||void 0!==e.yaxis[0].max)&&(o=0),t.minY=i-5*o/100,i>0&&t.minY<0&&(t.minY=0),t.maxY=t.maxY+5*o/100}if(e.yaxis.forEach((function(e,i){void 0!==e.max&&(\\\"number\\\"==typeof e.max?t.maxYArr[i]=e.max:\\\"function\\\"==typeof e.max&&(t.maxYArr[i]=e.max(t.isMultipleYAxis?t.maxYArr[i]:t.maxY)),t.maxY=t.maxYArr[i]),void 0!==e.min&&(\\\"number\\\"==typeof e.min?t.minYArr[i]=e.min:\\\"function\\\"==typeof e.min&&(t.minYArr[i]=e.min(t.isMultipleYAxis?t.minYArr[i]===Number.MIN_VALUE?0:t.minYArr[i]:t.minY)),t.minY=t.minYArr[i])})),t.isBarHorizontal){[\\\"min\\\",\\\"max\\\"].forEach((function(i){void 0!==e.xaxis[i]&&\\\"number\\\"==typeof e.xaxis[i]&&(\\\"min\\\"===i?t.minY=e.xaxis[i]:t.maxY=e.xaxis[i])}))}return t.isMultipleYAxis?(this.scales.setMultipleYScales(),t.minY=i,t.yAxisScale.forEach((function(e,i){t.minYArr[i]=e.niceMin,t.maxYArr[i]=e.niceMax}))):(this.scales.setYScaleForIndex(0,t.minY,t.maxY),t.minY=t.yAxisScale[0].niceMin,t.maxY=t.yAxisScale[0].niceMax,t.minYArr[0]=t.yAxisScale[0].niceMin,t.maxYArr[0]=t.yAxisScale[0].niceMax),{minY:t.minY,maxY:t.maxY,minYArr:t.minYArr,maxYArr:t.maxYArr,yAxisScale:t.yAxisScale}}},{key:\\\"setXRange\\\",value:function(){var t=this.w.globals,e=this.w.config,i=\\\"numeric\\\"===e.xaxis.type||\\\"datetime\\\"===e.xaxis.type||\\\"category\\\"===e.xaxis.type&&!t.noLabelsProvided||t.noLabelsProvided||t.isXNumeric;if(t.isXNumeric&&function(){for(var e=0;e<t.series.length;e++)if(t.labels[e])for(var i=0;i<t.labels[e].length;i++)null!==t.labels[e][i]&&p.isNumber(t.labels[e][i])&&(t.maxX=Math.max(t.maxX,t.labels[e][i]),t.initialMaxX=Math.max(t.maxX,t.labels[e][i]),t.minX=Math.min(t.minX,t.labels[e][i]),t.initialMinX=Math.min(t.minX,t.labels[e][i]))}(),t.noLabelsProvided&&0===e.xaxis.categories.length&&(t.maxX=t.labels[t.labels.length-1],t.initialMaxX=t.labels[t.labels.length-1],t.minX=1,t.initialMinX=1),t.isXNumeric||t.noLabelsProvided||t.dataFormatXNumeric){var a;if(void 0===e.xaxis.tickAmount?(a=Math.round(t.svgWidth/150),\\\"numeric\\\"===e.xaxis.type&&t.dataPoints<30&&(a=t.dataPoints-1),a>t.dataPoints&&0!==t.dataPoints&&(a=t.dataPoints-1)):\\\"dataPoints\\\"===e.xaxis.tickAmount?(t.series.length>1&&(a=t.series[t.maxValsInArrayIndex].length-1),t.isXNumeric&&(a=t.maxX-t.minX-1)):a=e.xaxis.tickAmount,t.xTickAmount=a,void 0!==e.xaxis.max&&\\\"number\\\"==typeof e.xaxis.max&&(t.maxX=e.xaxis.max),void 0!==e.xaxis.min&&\\\"number\\\"==typeof e.xaxis.min&&(t.minX=e.xaxis.min),void 0!==e.xaxis.range&&(t.minX=t.maxX-e.xaxis.range),t.minX!==Number.MAX_VALUE&&t.maxX!==-Number.MAX_VALUE)if(e.xaxis.convertedCatToNumeric&&!t.dataFormatXNumeric){for(var s=[],r=t.minX-1;r<t.maxX;r++)s.push(r+1);t.xAxisScale={result:s,niceMin:s[0],niceMax:s[s.length-1]}}else t.xAxisScale=this.scales.setXScale(t.minX,t.maxX);else t.xAxisScale=this.scales.linearScale(1,a,a),t.noLabelsProvided&&t.labels.length>0&&(t.xAxisScale=this.scales.linearScale(1,t.labels.length,a-1),t.seriesX=t.labels.slice());i&&(t.labels=t.xAxisScale.result.slice())}return t.isBarHorizontal&&t.labels.length&&(t.xTickAmount=t.labels.length),this._handleSingleDataPoint(),this._getMinXDiff(),{minX:t.minX,maxX:t.maxX}}},{key:\\\"setZRange\\\",value:function(){var t=this.w.globals;if(t.isDataXYZ)for(var e=0;e<t.series.length;e++)if(void 0!==t.seriesZ[e])for(var i=0;i<t.seriesZ[e].length;i++)null!==t.seriesZ[e][i]&&p.isNumber(t.seriesZ[e][i])&&(t.maxZ=Math.max(t.maxZ,t.seriesZ[e][i]),t.minZ=Math.min(t.minZ,t.seriesZ[e][i]))}},{key:\\\"_handleSingleDataPoint\\\",value:function(){var t=this.w.globals,e=this.w.config;if(t.minX===t.maxX){var i=new Y(this.ctx);if(\\\"datetime\\\"===e.xaxis.type){var a=i.getDate(t.minX);a.setUTCDate(a.getDate()-2),t.minX=new Date(a).getTime();var s=i.getDate(t.maxX);s.setUTCDate(s.getDate()+2),t.maxX=new Date(s).getTime()}else(\\\"numeric\\\"===e.xaxis.type||\\\"category\\\"===e.xaxis.type&&!t.noLabelsProvided)&&(t.minX=t.minX-2,t.initialMinX=t.minX,t.maxX=t.maxX+2,t.initialMaxX=t.maxX)}}},{key:\\\"_getMinXDiff\\\",value:function(){var t=this.w.globals;t.isXNumeric&&t.seriesX.forEach((function(e,i){1===e.length&&e.push(t.seriesX[t.maxValsInArrayIndex][t.seriesX[t.maxValsInArrayIndex].length-1]);var a=e.slice();a.sort((function(t,e){return t-e})),a.forEach((function(e,i){if(i>0){var s=e-a[i-1];s>0&&(t.minXDiff=Math.min(s,t.minXDiff))}})),1===t.dataPoints&&t.minXDiff===Number.MAX_VALUE&&(t.minXDiff=.5)}))}},{key:\\\"_setStackedMinMax\\\",value:function(){var t=this.w.globals,e=[],i=[];if(t.series.length)for(var a=0;a<t.series[t.maxValsInArrayIndex].length;a++)for(var s=0,r=0,o=0;o<t.series.length;o++)null!==t.series[o][a]&&p.isNumber(t.series[o][a])&&(t.series[o][a]>0?s=s+parseFloat(t.series[o][a])+1e-4:r+=parseFloat(t.series[o][a])),o===t.series.length-1&&(e.push(s),i.push(r));for(var n=0;n<e.length;n++)t.maxY=Math.max(t.maxY,e[n]),t.minY=Math.min(t.minY,i[n])}}]),t}(),q=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.xaxisFontSize=i.config.xaxis.labels.style.fontSize,this.axisFontFamily=i.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=i.config.xaxis.labels.style.colors,this.isCategoryBarHorizontal=\\\"bar\\\"===i.config.chart.type&&i.config.plotOptions.bar.horizontal,this.xAxisoffX=0,\\\"bottom\\\"===i.config.xaxis.position&&(this.xAxisoffX=i.globals.gridHeight),this.drawnLabels=[],this.axesUtils=new B(e)}return r(t,[{key:\\\"drawYaxis\\\",value:function(t){var e=this,i=this.w,a=new b(this.ctx),s=i.config.yaxis[t].labels.style,r=s.fontSize,o=s.fontFamily,n=s.fontWeight,l=a.group({class:\\\"apexcharts-yaxis\\\",rel:t,transform:\\\"translate(\\\"+i.globals.translateYAxisX[t]+\\\", 0)\\\"});if(this.axesUtils.isYAxisHidden(t))return l;var h=a.group({class:\\\"apexcharts-yaxis-texts-g\\\"});l.add(h);var c=i.globals.yAxisScale[t].result.length-1,d=i.globals.gridHeight/c,g=i.globals.translateY,u=i.globals.yLabelFormatters[t],p=i.globals.yAxisScale[t].result.slice();p=this.axesUtils.checkForReversedLabels(t,p);var f=\\\"\\\";if(i.config.yaxis[t].labels.show)for(var x=function(l){var x=p[l];x=u(x,l,i);var b=i.config.yaxis[t].labels.padding;i.config.yaxis[t].opposite&&0!==i.config.yaxis.length&&(b*=-1);var v=e.axesUtils.getYAxisForeColor(s.colors,t),m=a.drawText({x:b,y:g+c/10+i.config.yaxis[t].labels.offsetY+1,text:x,textAnchor:i.config.yaxis[t].opposite?\\\"start\\\":\\\"end\\\",fontSize:r,fontFamily:o,fontWeight:n,foreColor:Array.isArray(v)?v[l]:v,isPlainText:!1,cssClass:\\\"apexcharts-yaxis-label \\\"+s.cssClass});l===c&&(f=m),h.add(m);var y=document.createElementNS(i.globals.SVGNS,\\\"title\\\");if(y.textContent=Array.isArray(x)?x.join(\\\" \\\"):x,m.node.appendChild(y),0!==i.config.yaxis[t].labels.rotate){var w=a.rotateAroundCenter(f.node),k=a.rotateAroundCenter(m.node);m.node.setAttribute(\\\"transform\\\",\\\"rotate(\\\".concat(i.config.yaxis[t].labels.rotate,\\\" \\\").concat(w.x,\\\" \\\").concat(k.y,\\\")\\\"))}g+=d},v=c;v>=0;v--)x(v);if(void 0!==i.config.yaxis[t].title.text){var m=a.group({class:\\\"apexcharts-yaxis-title\\\"}),y=0;i.config.yaxis[t].opposite&&(y=i.globals.translateYAxisX[t]);var w=a.drawText({x:y,y:i.globals.gridHeight/2+i.globals.translateY+i.config.yaxis[t].title.offsetY,text:i.config.yaxis[t].title.text,textAnchor:\\\"end\\\",foreColor:i.config.yaxis[t].title.style.color,fontSize:i.config.yaxis[t].title.style.fontSize,fontWeight:i.config.yaxis[t].title.style.fontWeight,fontFamily:i.config.yaxis[t].title.style.fontFamily,cssClass:\\\"apexcharts-yaxis-title-text \\\"+i.config.yaxis[t].title.style.cssClass});m.add(w),l.add(m)}var k=i.config.yaxis[t].axisBorder,A=31+k.offsetX;if(i.config.yaxis[t].opposite&&(A=-31-k.offsetX),k.show){var S=a.drawLine(A,i.globals.translateY+k.offsetY-2,A,i.globals.gridHeight+i.globals.translateY+k.offsetY+2,k.color,0,k.width);l.add(S)}return i.config.yaxis[t].axisTicks.show&&this.axesUtils.drawYAxisTicks(A,c,k,i.config.yaxis[t].axisTicks,t,d,l),l}},{key:\\\"drawYaxisInversed\\\",value:function(t){var e=this.w,i=new b(this.ctx),a=i.group({class:\\\"apexcharts-xaxis apexcharts-yaxis-inversed\\\"}),s=i.group({class:\\\"apexcharts-xaxis-texts-g\\\",transform:\\\"translate(\\\".concat(e.globals.translateXAxisX,\\\", \\\").concat(e.globals.translateXAxisY,\\\")\\\")});a.add(s);var r=e.globals.yAxisScale[t].result.length-1,o=e.globals.gridWidth/r+.1,n=o+e.config.xaxis.labels.offsetX,l=e.globals.xLabelFormatter,h=e.globals.yAxisScale[t].result.slice(),c=e.globals.timescaleLabels;c.length>0&&(this.xaxisLabels=c.slice(),r=(h=c.slice()).length),h=this.axesUtils.checkForReversedLabels(t,h);var d=c.length;if(e.config.xaxis.labels.show)for(var g=d?0:r;d?g<d:g>=0;d?g++:g--){var u=h[g];u=l(u,g,e);var p=e.globals.gridWidth+e.globals.padHorizontal-(n-o+e.config.xaxis.labels.offsetX);if(c.length){var f=this.axesUtils.getLabel(h,c,p,g,this.drawnLabels,this.xaxisFontSize);p=f.x,u=f.text,this.drawnLabels.push(f.text),0===g&&e.globals.skipFirstTimelinelabel&&(u=\\\"\\\"),g===h.length-1&&e.globals.skipLastTimelinelabel&&(u=\\\"\\\")}var x=i.drawText({x:p,y:this.xAxisoffX+e.config.xaxis.labels.offsetY+30-(\\\"top\\\"===e.config.xaxis.position?e.globals.xAxisHeight+e.config.xaxis.axisTicks.height-2:0),text:u,textAnchor:\\\"middle\\\",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[t]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,fontWeight:e.config.xaxis.labels.style.fontWeight,isPlainText:!1,cssClass:\\\"apexcharts-xaxis-label \\\"+e.config.xaxis.labels.style.cssClass});s.add(x),x.tspan(u);var v=document.createElementNS(e.globals.SVGNS,\\\"title\\\");v.textContent=u,x.node.appendChild(v),n+=o}return this.inversedYAxisTitleText(a),this.inversedYAxisBorder(a),a}},{key:\\\"inversedYAxisBorder\\\",value:function(t){var e=this.w,i=new b(this.ctx),a=e.config.xaxis.axisBorder;if(a.show){var s=0;\\\"bar\\\"===e.config.chart.type&&e.globals.isXNumeric&&(s-=15);var r=i.drawLine(e.globals.padHorizontal+s+a.offsetX,this.xAxisoffX,e.globals.gridWidth,this.xAxisoffX,a.color,0,a.height);t.add(r)}}},{key:\\\"inversedYAxisTitleText\\\",value:function(t){var e=this.w,i=new b(this.ctx);if(void 0!==e.config.xaxis.title.text){var a=i.group({class:\\\"apexcharts-xaxis-title apexcharts-yaxis-title-inversed\\\"}),s=i.drawText({x:e.globals.gridWidth/2+e.config.xaxis.title.offsetX,y:this.xAxisoffX+parseFloat(this.xaxisFontSize)+parseFloat(e.config.xaxis.title.style.fontSize)+e.config.xaxis.title.offsetY+20,text:e.config.xaxis.title.text,textAnchor:\\\"middle\\\",fontSize:e.config.xaxis.title.style.fontSize,fontFamily:e.config.xaxis.title.style.fontFamily,fontWeight:e.config.xaxis.title.style.fontWeight,foreColor:e.config.xaxis.title.style.color,cssClass:\\\"apexcharts-xaxis-title-text \\\"+e.config.xaxis.title.style.cssClass});a.add(s),t.add(a)}}},{key:\\\"yAxisTitleRotate\\\",value:function(t,e){var i=this.w,a=new b(this.ctx),s={width:0,height:0},r={width:0,height:0},o=i.globals.dom.baseEl.querySelector(\\\" .apexcharts-yaxis[rel='\\\".concat(t,\\\"'] .apexcharts-yaxis-texts-g\\\"));null!==o&&(s=o.getBoundingClientRect());var n=i.globals.dom.baseEl.querySelector(\\\".apexcharts-yaxis[rel='\\\".concat(t,\\\"'] .apexcharts-yaxis-title text\\\"));if(null!==n&&(r=n.getBoundingClientRect()),null!==n){var l=this.xPaddingForYAxisTitle(t,s,r,e);n.setAttribute(\\\"x\\\",l.xPos-(e?10:0))}if(null!==n){var h=a.rotateAroundCenter(n);n.setAttribute(\\\"transform\\\",\\\"rotate(\\\".concat(e?-1*i.config.yaxis[t].title.rotate:i.config.yaxis[t].title.rotate,\\\" \\\").concat(h.x,\\\" \\\").concat(h.y,\\\")\\\"))}}},{key:\\\"xPaddingForYAxisTitle\\\",value:function(t,e,i,a){var s=this.w,r=0,o=0,n=10;return void 0===s.config.yaxis[t].title.text||t<0?{xPos:o,padd:0}:(a?(o=e.width+s.config.yaxis[t].title.offsetX+i.width/2+n/2,0===(r+=1)&&(o-=n/2)):(o=-1*e.width+s.config.yaxis[t].title.offsetX+n/2+i.width/2,s.globals.isBarHorizontal&&(n=25,o=-1*e.width-s.config.yaxis[t].title.offsetX-n)),{xPos:o,padd:n})}},{key:\\\"setYAxisXPosition\\\",value:function(t,e){var i=this.w,a=0,s=0,r=18,o=1;i.config.yaxis.length>1&&(this.multipleYs=!0),i.config.yaxis.map((function(n,l){var h=i.globals.ignoreYAxisIndexes.indexOf(l)>-1||!n.show||n.floating||0===t[l].width,c=t[l].width+e[l].width;n.opposite?i.globals.isBarHorizontal?(s=i.globals.gridWidth+i.globals.translateX-1,i.globals.translateYAxisX[l]=s-n.labels.offsetX):(s=i.globals.gridWidth+i.globals.translateX+o,h||(o=o+c+20),i.globals.translateYAxisX[l]=s-n.labels.offsetX+20):(a=i.globals.translateX-r,h||(r=r+c+20),i.globals.translateYAxisX[l]=a+n.labels.offsetX)}))}},{key:\\\"setYAxisTextAlignments\\\",value:function(){var t=this.w,e=t.globals.dom.baseEl.getElementsByClassName(\\\"apexcharts-yaxis\\\");(e=p.listToArray(e)).forEach((function(e,i){var a=t.config.yaxis[i];if(a&&void 0!==a.labels.align){var s=t.globals.dom.baseEl.querySelector(\\\".apexcharts-yaxis[rel='\\\".concat(i,\\\"'] .apexcharts-yaxis-texts-g\\\")),r=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-yaxis[rel='\\\".concat(i,\\\"'] .apexcharts-yaxis-label\\\"));r=p.listToArray(r);var o=s.getBoundingClientRect();\\\"left\\\"===a.labels.align?(r.forEach((function(t,e){t.setAttribute(\\\"text-anchor\\\",\\\"start\\\")})),a.opposite||s.setAttribute(\\\"transform\\\",\\\"translate(-\\\".concat(o.width,\\\", 0)\\\"))):\\\"center\\\"===a.labels.align?(r.forEach((function(t,e){t.setAttribute(\\\"text-anchor\\\",\\\"middle\\\")})),s.setAttribute(\\\"transform\\\",\\\"translate(\\\".concat(o.width/2*(a.opposite?1:-1),\\\", 0)\\\"))):\\\"right\\\"===a.labels.align&&(r.forEach((function(t,e){t.setAttribute(\\\"text-anchor\\\",\\\"end\\\")})),a.opposite&&s.setAttribute(\\\"transform\\\",\\\"translate(\\\".concat(o.width,\\\", 0)\\\")))}}))}}]),t}(),Z=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.documentEvent=p.bind(this.documentEvent,this)}return r(t,[{key:\\\"addEventListener\\\",value:function(t,e){var i=this.w;i.globals.events.hasOwnProperty(t)?i.globals.events[t].push(e):i.globals.events[t]=[e]}},{key:\\\"removeEventListener\\\",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){var a=i.globals.events[t].indexOf(e);-1!==a&&i.globals.events[t].splice(a,1)}}},{key:\\\"fireEvent\\\",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){e&&e.length||(e=[]);for(var a=i.globals.events[t],s=a.length,r=0;r<s;r++)a[r].apply(null,e)}}},{key:\\\"setupEventHandlers\\\",value:function(){var t=this,e=this.w,i=this.ctx,a=e.globals.dom.baseEl.querySelector(e.globals.chartClass);this.ctx.eventList.forEach((function(t){a.addEventListener(t,(function(t){var a=Object.assign({},e,{seriesIndex:e.globals.capturedSeriesIndex,dataPointIndex:e.globals.capturedDataPointIndex});\\\"mousemove\\\"===t.type||\\\"touchmove\\\"===t.type?\\\"function\\\"==typeof e.config.chart.events.mouseMove&&e.config.chart.events.mouseMove(t,i,a):\\\"mouseleave\\\"===t.type||\\\"touchleave\\\"===t.type?\\\"function\\\"==typeof e.config.chart.events.mouseLeave&&e.config.chart.events.mouseLeave(t,i,a):(\\\"mouseup\\\"===t.type&&1===t.which||\\\"touchend\\\"===t.type)&&(\\\"function\\\"==typeof e.config.chart.events.click&&e.config.chart.events.click(t,i,a),i.ctx.events.fireEvent(\\\"click\\\",[t,i,a]))}),{capture:!1,passive:!0})})),this.ctx.eventList.forEach((function(i){e.globals.dom.baseEl.addEventListener(i,t.documentEvent,{passive:!0})})),this.ctx.core.setupBrushHandler()}},{key:\\\"documentEvent\\\",value:function(t){var e=this.w,i=t.target.className;if(\\\"click\\\"===t.type){var a=e.globals.dom.baseEl.querySelector(\\\".apexcharts-menu\\\");a&&a.classList.contains(\\\"apexcharts-menu-open\\\")&&\\\"apexcharts-menu-icon\\\"!==i&&a.classList.remove(\\\"apexcharts-menu-open\\\")}e.globals.clientX=\\\"touchmove\\\"===t.type?t.touches[0].clientX:t.clientX,e.globals.clientY=\\\"touchmove\\\"===t.type?t.touches[0].clientY:t.clientY}}]),t}(),$=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"setCurrentLocaleValues\\\",value:function(t){var e=this.w.config.chart.locales;window.Apex.chart&&window.Apex.chart.locales&&window.Apex.chart.locales.length>0&&(e=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=e.filter((function(e){return e.name===t}))[0];if(!i)throw new Error(\\\"Wrong locale name provided. Please make sure you set the correct locale name in options\\\");var a=p.extend(A,i);this.w.globals.locale=a.options}}]),t}(),J=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"drawAxis\\\",value:function(t,e){var i,a,s=this.w.globals,r=this.w.config,o=new G(this.ctx),n=new q(this.ctx);s.axisCharts&&\\\"radar\\\"!==t&&(s.isBarHorizontal?(a=n.drawYaxisInversed(0),i=o.drawXaxisInversed(0),s.dom.elGraphical.add(i),s.dom.elGraphical.add(a)):(i=o.drawXaxis(),s.dom.elGraphical.add(i),r.yaxis.map((function(t,e){-1===s.ignoreYAxisIndexes.indexOf(e)&&(a=n.drawYaxis(e),s.dom.Paper.add(a))}))))}}]),t}(),Q=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"drawXCrosshairs\\\",value:function(){var t=this.w,e=new b(this.ctx),i=new x(this.ctx),a=t.config.xaxis.crosshairs.fill.gradient,s=t.config.xaxis.crosshairs.dropShadow,r=t.config.xaxis.crosshairs.fill.type,o=a.colorFrom,n=a.colorTo,l=a.opacityFrom,h=a.opacityTo,c=a.stops,d=s.enabled,g=s.left,u=s.top,f=s.blur,v=s.color,m=s.opacity,y=t.config.xaxis.crosshairs.fill.color;if(t.config.xaxis.crosshairs.show){\\\"gradient\\\"===r&&(y=e.drawGradient(\\\"vertical\\\",o,n,l,h,null,c,null));var w=e.drawRect();1===t.config.xaxis.crosshairs.width&&(w=e.drawLine());var k=t.globals.gridHeight;(!p.isNumber(k)||k<0)&&(k=0);var A=t.config.xaxis.crosshairs.width;(!p.isNumber(A)||A<0)&&(A=0),w.attr({class:\\\"apexcharts-xcrosshairs\\\",x:0,y:0,y2:k,width:A,height:k,fill:y,filter:\\\"none\\\",\\\"fill-opacity\\\":t.config.xaxis.crosshairs.opacity,stroke:t.config.xaxis.crosshairs.stroke.color,\\\"stroke-width\\\":t.config.xaxis.crosshairs.stroke.width,\\\"stroke-dasharray\\\":t.config.xaxis.crosshairs.stroke.dashArray}),d&&(w=i.dropShadow(w,{left:g,top:u,blur:f,color:v,opacity:m})),t.globals.dom.elGraphical.add(w)}}},{key:\\\"drawYCrosshairs\\\",value:function(){var t=this.w,e=new b(this.ctx),i=t.config.yaxis[0].crosshairs,a=t.globals.barPadForNumericAxis;if(t.config.yaxis[0].crosshairs.show){var s=e.drawLine(-a,0,t.globals.gridWidth+a,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);s.attr({class:\\\"apexcharts-ycrosshairs\\\"}),t.globals.dom.elGraphical.add(s)}var r=e.drawLine(-a,0,t.globals.gridWidth+a,0,i.stroke.color,0,0);r.attr({class:\\\"apexcharts-ycrosshairs-hidden\\\"}),t.globals.dom.elGraphical.add(r)}}]),t}(),K=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"checkResponsiveConfig\\\",value:function(t){var e=this,i=this.w,a=i.config;if(0!==a.responsive.length){var s=a.responsive.slice();s.sort((function(t,e){return t.breakpoint>e.breakpoint?1:e.breakpoint>t.breakpoint?-1:0})).reverse();var r=new H({}),o=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=s[0].breakpoint,o=window.innerWidth>0?window.innerWidth:screen.width;if(o>a){var n=y.extendArrayProps(r,i.globals.initialConfig,i);t=p.extend(n,t),t=p.extend(i.config,t),e.overrideResponsiveOptions(t)}else for(var l=0;l<s.length;l++)o<s[l].breakpoint&&(t=y.extendArrayProps(r,s[l].options,i),t=p.extend(i.config,t),e.overrideResponsiveOptions(t))};if(t){var n=y.extendArrayProps(r,t,i);n=p.extend(i.config,n),o(n=p.extend(n,t))}else o({})}}},{key:\\\"overrideResponsiveOptions\\\",value:function(t){var e=new H(t).init({responsiveOverride:!0});this.w.config=e}}]),t}(),tt=function(){function t(e){a(this,t),this.ctx=e,this.colors=[],this.w=e.w;var i=this.w;this.isColorFn=!1,this.isHeatmapDistributed=\\\"treemap\\\"===i.config.chart.type&&i.config.plotOptions.treemap.distributed||\\\"heatmap\\\"===i.config.chart.type&&i.config.plotOptions.heatmap.distributed,this.isBarDistributed=i.config.plotOptions.bar.distributed&&(\\\"bar\\\"===i.config.chart.type||\\\"rangeBar\\\"===i.config.chart.type)}return r(t,[{key:\\\"init\\\",value:function(){this.setDefaultColors()}},{key:\\\"setDefaultColors\\\",value:function(){var t=this,e=this.w,i=new p;if(e.globals.dom.elWrap.classList.add(\\\"apexcharts-theme-\\\".concat(e.config.theme.mode)),void 0===e.config.colors?e.globals.colors=this.predefined():(e.globals.colors=e.config.colors,Array.isArray(e.config.colors)&&e.config.colors.length>0&&\\\"function\\\"==typeof e.config.colors[0]&&(e.globals.colors=e.config.series.map((function(i,a){var s=e.config.colors[a];return s||(s=e.config.colors[0]),\\\"function\\\"==typeof s?(t.isColorFn=!0,s({value:e.globals.axisCharts?e.globals.series[a][0]?e.globals.series[a][0]:0:e.globals.series[a],seriesIndex:a,dataPointIndex:a,w:e})):s})))),e.globals.seriesColors.map((function(t,i){t&&(e.globals.colors[i]=t)})),e.config.theme.monochrome.enabled){var a=[],s=e.globals.series.length;(this.isBarDistributed||this.isHeatmapDistributed)&&(s=e.globals.series[0].length*e.globals.series.length);for(var r=e.config.theme.monochrome.color,o=1/(s/e.config.theme.monochrome.shadeIntensity),n=e.config.theme.monochrome.shadeTo,l=0,h=0;h<s;h++){var c=void 0;\\\"dark\\\"===n?(c=i.shadeColor(-1*l,r),l+=o):(c=i.shadeColor(l,r),l+=o),a.push(c)}e.globals.colors=a.slice()}var d=e.globals.colors.slice();this.pushExtraColors(e.globals.colors);[\\\"fill\\\",\\\"stroke\\\"].forEach((function(i){void 0===e.config[i].colors?e.globals[i].colors=t.isColorFn?e.config.colors:d:e.globals[i].colors=e.config[i].colors.slice(),t.pushExtraColors(e.globals[i].colors)})),void 0===e.config.dataLabels.style.colors?e.globals.dataLabels.style.colors=d:e.globals.dataLabels.style.colors=e.config.dataLabels.style.colors.slice(),this.pushExtraColors(e.globals.dataLabels.style.colors,50),void 0===e.config.plotOptions.radar.polygons.fill.colors?e.globals.radarPolygons.fill.colors=[\\\"dark\\\"===e.config.theme.mode?\\\"#424242\\\":\\\"none\\\"]:e.globals.radarPolygons.fill.colors=e.config.plotOptions.radar.polygons.fill.colors.slice(),this.pushExtraColors(e.globals.radarPolygons.fill.colors,20),void 0===e.config.markers.colors?e.globals.markers.colors=d:e.globals.markers.colors=e.config.markers.colors.slice(),this.pushExtraColors(e.globals.markers.colors)}},{key:\\\"pushExtraColors\\\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,s=e||a.globals.series.length;if(null===i&&(i=this.isBarDistributed||this.isHeatmapDistributed||\\\"heatmap\\\"===a.config.chart.type&&a.config.plotOptions.heatmap.colorScale.inverse),i&&a.globals.series.length&&(s=a.globals.series[a.globals.maxValsInArrayIndex].length*a.globals.series.length),t.length<s)for(var r=s-t.length,o=0;o<r;o++)t.push(t[o])}},{key:\\\"updateThemeOptions\\\",value:function(t){t.chart=t.chart||{},t.tooltip=t.tooltip||{};var e=t.theme.mode||\\\"light\\\",i=t.theme.palette?t.theme.palette:\\\"dark\\\"===e?\\\"palette4\\\":\\\"palette1\\\",a=t.chart.foreColor?t.chart.foreColor:\\\"dark\\\"===e?\\\"#f6f7f8\\\":\\\"#373d3f\\\";return t.tooltip.theme=e,t.chart.foreColor=a,t.theme.palette=i,t}},{key:\\\"predefined\\\",value:function(){switch(this.w.config.theme.palette){case\\\"palette1\\\":this.colors=[\\\"#008FFB\\\",\\\"#00E396\\\",\\\"#FEB019\\\",\\\"#FF4560\\\",\\\"#775DD0\\\"];break;case\\\"palette2\\\":this.colors=[\\\"#3f51b5\\\",\\\"#03a9f4\\\",\\\"#4caf50\\\",\\\"#f9ce1d\\\",\\\"#FF9800\\\"];break;case\\\"palette3\\\":this.colors=[\\\"#33b2df\\\",\\\"#546E7A\\\",\\\"#d4526e\\\",\\\"#13d8aa\\\",\\\"#A5978B\\\"];break;case\\\"palette4\\\":this.colors=[\\\"#4ecdc4\\\",\\\"#c7f464\\\",\\\"#81D4FA\\\",\\\"#fd6a6a\\\",\\\"#546E7A\\\"];break;case\\\"palette5\\\":this.colors=[\\\"#2b908f\\\",\\\"#f9a3a4\\\",\\\"#90ee7e\\\",\\\"#fa4443\\\",\\\"#69d2e7\\\"];break;case\\\"palette6\\\":this.colors=[\\\"#449DD1\\\",\\\"#F86624\\\",\\\"#EA3546\\\",\\\"#662E9B\\\",\\\"#C5D86D\\\"];break;case\\\"palette7\\\":this.colors=[\\\"#D7263D\\\",\\\"#1B998B\\\",\\\"#2E294E\\\",\\\"#F46036\\\",\\\"#E2C044\\\"];break;case\\\"palette8\\\":this.colors=[\\\"#662E9B\\\",\\\"#F86624\\\",\\\"#F9C80E\\\",\\\"#EA3546\\\",\\\"#43BCCD\\\"];break;case\\\"palette9\\\":this.colors=[\\\"#5C4742\\\",\\\"#A5978B\\\",\\\"#8D5B4C\\\",\\\"#5A2A27\\\",\\\"#C4BBAF\\\"];break;case\\\"palette10\\\":this.colors=[\\\"#A300D6\\\",\\\"#7D02EB\\\",\\\"#5653FE\\\",\\\"#2983FF\\\",\\\"#00B1F2\\\"];break;default:this.colors=[\\\"#008FFB\\\",\\\"#00E396\\\",\\\"#FEB019\\\",\\\"#FF4560\\\",\\\"#775DD0\\\"]}return this.colors}}]),t}(),et=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"draw\\\",value:function(){this.drawTitleSubtitle(\\\"title\\\"),this.drawTitleSubtitle(\\\"subtitle\\\")}},{key:\\\"drawTitleSubtitle\\\",value:function(t){var e=this.w,i=\\\"title\\\"===t?e.config.title:e.config.subtitle,a=e.globals.svgWidth/2,s=i.offsetY,r=\\\"middle\\\";if(\\\"left\\\"===i.align?(a=10,r=\\\"start\\\"):\\\"right\\\"===i.align&&(a=e.globals.svgWidth-10,r=\\\"end\\\"),a+=i.offsetX,s=s+parseInt(i.style.fontSize,10)+i.margin/2,void 0!==i.text){var o=new b(this.ctx).drawText({x:a,y:s,text:i.text,textAnchor:r,fontSize:i.style.fontSize,fontFamily:i.style.fontFamily,fontWeight:i.style.fontWeight,foreColor:i.style.color,opacity:1});o.node.setAttribute(\\\"class\\\",\\\"apexcharts-\\\".concat(t,\\\"-text\\\")),e.globals.dom.Paper.add(o)}}}]),t}(),it=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\\\"getTitleSubtitleCoords\\\",value:function(t){var e=this.w,i=0,a=0,s=\\\"title\\\"===t?e.config.title.floating:e.config.subtitle.floating,r=e.globals.dom.baseEl.querySelector(\\\".apexcharts-\\\".concat(t,\\\"-text\\\"));if(null!==r&&!s){var o=r.getBoundingClientRect();i=o.width,a=e.globals.axisCharts?o.height+5:o.height}return{width:i,height:a}}},{key:\\\"getLegendsRect\\\",value:function(){var t=this.w,e=t.globals.dom.baseEl.querySelector(\\\".apexcharts-legend\\\");t.config.legend.height||\\\"top\\\"!==t.config.legend.position&&\\\"bottom\\\"!==t.config.legend.position||(e.style.maxHeight=t.globals.svgHeight/2+\\\"px\\\");var i=Object.assign({},p.getBoundingClientRect(e));return null!==e&&!t.config.legend.floating&&t.config.legend.show?this.dCtx.lgRect={x:i.x,y:i.y,height:i.height,width:0===i.height?0:i.width}:this.dCtx.lgRect={x:0,y:0,height:0,width:0},\\\"left\\\"!==t.config.legend.position&&\\\"right\\\"!==t.config.legend.position||1.5*this.dCtx.lgRect.width>t.globals.svgWidth&&(this.dCtx.lgRect.width=t.globals.svgWidth/1.5),this.dCtx.lgRect}},{key:\\\"getLargestStringFromMultiArr\\\",value:function(t,e){var i=t;if(this.w.globals.isMultiLineX){var a=e.map((function(t,e){return Array.isArray(t)?t.length:1})),s=Math.max.apply(Math,g(a));i=e[a.indexOf(s)]}return i}}]),t}(),at=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\\\"getxAxisLabelsCoords\\\",value:function(){var t,e=this.w,i=e.globals.labels.slice();if(e.config.xaxis.convertedCatToNumeric&&0===i.length&&(i=e.globals.categoryLabels),e.globals.timescaleLabels.length>0){var a=this.getxAxisTimeScaleLabelsCoords();t={width:a.width,height:a.height},e.globals.rotateXLabels=!1}else{this.dCtx.lgWidthForSideLegends=\\\"left\\\"!==e.config.legend.position&&\\\"right\\\"!==e.config.legend.position||e.config.legend.floating?0:this.dCtx.lgRect.width;var s=e.globals.xLabelFormatter,r=p.getLargestStringFromArr(i),o=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,i);e.globals.isBarHorizontal&&(o=r=e.globals.yAxisScale[0].result.reduce((function(t,e){return t.length>e.length?t:e}),0));var n=new W(this.dCtx.ctx),l=r;r=n.xLabelFormat(s,r,l,{i:void 0,dateFormatter:new Y(this.dCtx.ctx).formatDate,w:e}),o=n.xLabelFormat(s,o,l,{i:void 0,dateFormatter:new Y(this.dCtx.ctx).formatDate,w:e}),(e.config.xaxis.convertedCatToNumeric&&void 0===r||\\\"\\\"===String(r).trim())&&(o=r=\\\"1\\\");var h=new b(this.dCtx.ctx),c=h.getTextRects(r,e.config.xaxis.labels.style.fontSize),d=c;if(r!==o&&(d=h.getTextRects(o,e.config.xaxis.labels.style.fontSize)),(t={width:c.width>=d.width?c.width:d.width,height:c.height>=d.height?c.height:d.height}).width*i.length>e.globals.svgWidth-this.dCtx.lgWidthForSideLegends-this.dCtx.yAxisWidth-this.dCtx.gridPad.left-this.dCtx.gridPad.right&&0!==e.config.xaxis.labels.rotate||e.config.xaxis.labels.rotateAlways){if(!e.globals.isBarHorizontal){e.globals.rotateXLabels=!0;var g=function(t){return h.getTextRects(t,e.config.xaxis.labels.style.fontSize,e.config.xaxis.labels.style.fontFamily,\\\"rotate(\\\".concat(e.config.xaxis.labels.rotate,\\\" 0 0)\\\"),!1)};c=g(r),r!==o&&(d=g(o)),t.height=(c.height>d.height?c.height:d.height)/1.5,t.width=c.width>d.width?c.width:d.width}}else e.globals.rotateXLabels=!1}return e.config.xaxis.labels.show||(t={width:0,height:0}),{width:t.width,height:t.height}}},{key:\\\"getxAxisTitleCoords\\\",value:function(){var t=this.w,e=0,i=0;if(void 0!==t.config.xaxis.title.text){var a=new b(this.dCtx.ctx).getTextRects(t.config.xaxis.title.text,t.config.xaxis.title.style.fontSize);e=a.width,i=a.height}return{width:e,height:i}}},{key:\\\"getxAxisTimeScaleLabelsCoords\\\",value:function(){var t,e=this.w;this.dCtx.timescaleLabels=e.globals.timescaleLabels.slice();var i=this.dCtx.timescaleLabels.map((function(t){return t.value})),a=i.reduce((function(t,e){return void 0===t?(console.error(\\\"You have possibly supplied invalid Date format. Please supply a valid JavaScript Date\\\"),0):t.length>e.length?t:e}),0);return 1.05*(t=new b(this.dCtx.ctx).getTextRects(a,e.config.xaxis.labels.style.fontSize)).width*i.length>e.globals.gridWidth&&0!==e.config.xaxis.labels.rotate&&(e.globals.overlappingXLabels=!0),t}},{key:\\\"additionalPaddingXLabels\\\",value:function(t){var e=this,i=this.w,a=i.globals,s=i.config,r=s.xaxis.type,o=t.width;a.skipLastTimelinelabel=!1,a.skipFirstTimelinelabel=!1;var n=i.config.yaxis[0].opposite&&i.globals.isBarHorizontal,l=function(t,n){(function(t){return-1!==a.collapsedSeriesIndices.indexOf(t)})(n)||function(t){if(e.dCtx.timescaleLabels&&e.dCtx.timescaleLabels.length){var n=e.dCtx.timescaleLabels[0],l=e.dCtx.timescaleLabels[e.dCtx.timescaleLabels.length-1].position+o/1.75-e.dCtx.yAxisWidthRight,h=n.position-o/1.75+e.dCtx.yAxisWidthLeft,c=\\\"right\\\"===i.config.legend.position&&e.dCtx.lgRect.width>0?e.dCtx.lgRect.width:0;l>a.svgWidth-a.translateX-c&&(a.skipLastTimelinelabel=!0),h<-(t.show&&!t.floating||\\\"bar\\\"!==s.chart.type&&\\\"candlestick\\\"!==s.chart.type&&\\\"rangeBar\\\"!==s.chart.type&&\\\"boxPlot\\\"!==s.chart.type?10:o/1.75)&&(a.skipFirstTimelinelabel=!0)}else\\\"datetime\\\"===r?e.dCtx.gridPad.right<o&&!a.rotateXLabels&&(a.skipLastTimelinelabel=!0):\\\"datetime\\\"!==r&&e.dCtx.gridPad.right<o/2-e.dCtx.yAxisWidthRight&&!a.rotateXLabels&&!i.config.xaxis.labels.trim&&(\\\"between\\\"!==i.config.xaxis.tickPlacement||i.globals.isBarHorizontal)&&(e.dCtx.xPadRight=o/2+1)}(t)};s.yaxis.forEach((function(t,i){n?(e.dCtx.gridPad.left<o&&(e.dCtx.xPadLeft=o/2+1),e.dCtx.xPadRight=o/2+1):l(t,i)}))}}]),t}(),st=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\\\"getyAxisLabelsCoords\\\",value:function(){var t=this,e=this.w,i=[],a=10,s=new B(this.dCtx.ctx);return e.config.yaxis.map((function(r,o){var n=e.globals.yAxisScale[o],l=0;if(!s.isYAxisHidden(o)&&r.labels.show&&void 0!==r.labels.minWidth&&(l=r.labels.minWidth),!s.isYAxisHidden(o)&&r.labels.show&&n.result.length){var h=e.globals.yLabelFormatters[o],c=n.niceMin===Number.MIN_VALUE?0:n.niceMin,d=String(c).length>String(n.niceMax).length?c:n.niceMax,g=h(d,{seriesIndex:o,dataPointIndex:-1,w:e}),u=g;if(void 0!==g&&0!==g.length||(g=d),e.globals.isBarHorizontal){a=0;var f=e.globals.labels.slice();g=h(g=p.getLargestStringFromArr(f),{seriesIndex:o,dataPointIndex:-1,w:e}),u=t.dCtx.dimHelpers.getLargestStringFromMultiArr(g,f)}var x=new b(t.dCtx.ctx),v=\\\"rotate(\\\".concat(r.labels.rotate,\\\" 0 0)\\\"),m=x.getTextRects(g,r.labels.style.fontSize,r.labels.style.fontFamily,v,!1),y=m;g!==u&&(y=x.getTextRects(u,r.labels.style.fontSize,r.labels.style.fontFamily,v,!1)),i.push({width:(l>y.width||l>m.width?l:y.width>m.width?y.width:m.width)+a,height:y.height>m.height?y.height:m.height})}else i.push({width:0,height:0})})),i}},{key:\\\"getyAxisTitleCoords\\\",value:function(){var t=this,e=this.w,i=[];return e.config.yaxis.map((function(e,a){if(e.show&&void 0!==e.title.text){var s=new b(t.dCtx.ctx),r=\\\"rotate(\\\".concat(e.title.rotate,\\\" 0 0)\\\"),o=s.getTextRects(e.title.text,e.title.style.fontSize,e.title.style.fontFamily,r,!1);i.push({width:o.width,height:o.height})}else i.push({width:0,height:0})})),i}},{key:\\\"getTotalYAxisWidth\\\",value:function(){var t=this.w,e=0,i=0,a=0,s=t.globals.yAxisScale.length>1?10:0,r=new B(this.dCtx.ctx),o=function(o,n){var l=t.config.yaxis[n].floating,h=0;o.width>0&&!l?(h=o.width+s,function(e){return t.globals.ignoreYAxisIndexes.indexOf(e)>-1}(n)&&(h=h-o.width-s)):h=l||r.isYAxisHidden(n)?0:5,t.config.yaxis[n].opposite?a+=h:i+=h,e+=h};return t.globals.yLabelsCoords.map((function(t,e){o(t,e)})),t.globals.yTitleCoords.map((function(t,e){o(t,e)})),t.globals.isBarHorizontal&&!t.config.yaxis[0].floating&&(e=t.globals.yLabelsCoords[0].width+t.globals.yTitleCoords[0].width+15),this.dCtx.yAxisWidthLeft=i,this.dCtx.yAxisWidthRight=a,e}}]),t}(),rt=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\\\"gridPadForColumnsInNumericAxis\\\",value:function(t){var e=this.w;if(e.globals.noData||e.globals.allSeriesCollapsed)return 0;var i=function(t){return\\\"bar\\\"===t||\\\"rangeBar\\\"===t||\\\"candlestick\\\"===t||\\\"boxPlot\\\"===t},a=e.config.chart.type,s=0,r=i(a)?e.config.series.length:1;if(e.globals.comboBarCount>0&&(r=e.globals.comboBarCount),e.globals.collapsedSeries.forEach((function(t){i(t.type)&&(r-=1)})),e.config.chart.stacked&&(r=1),(i(a)||e.globals.comboBarCount>0)&&e.globals.isXNumeric&&!e.globals.isBarHorizontal&&r>0){var o,n,l=Math.abs(e.globals.initialMaxX-e.globals.initialMinX);l<=3&&(l=e.globals.dataPoints),o=l/t,e.globals.minXDiff&&e.globals.minXDiff/o>0&&(n=e.globals.minXDiff/o),n>t/2&&(n/=2),(s=n/r*parseInt(e.config.plotOptions.bar.columnWidth,10)/100)<1&&(s=1),s=s/(r>1?1:1.5)+5,e.globals.barPadForNumericAxis=s}return s}},{key:\\\"gridPadFortitleSubtitle\\\",value:function(){var t=this,e=this.w,i=e.globals,a=this.dCtx.isSparkline||!e.globals.axisCharts?0:10;[\\\"title\\\",\\\"subtitle\\\"].forEach((function(i){void 0!==e.config[i].text?a+=e.config[i].margin:a+=t.dCtx.isSparkline||!e.globals.axisCharts?0:5})),!e.config.legend.show||\\\"bottom\\\"!==e.config.legend.position||e.config.legend.floating||e.globals.axisCharts||(a+=10);var s=this.dCtx.dimHelpers.getTitleSubtitleCoords(\\\"title\\\"),r=this.dCtx.dimHelpers.getTitleSubtitleCoords(\\\"subtitle\\\");i.gridHeight=i.gridHeight-s.height-r.height-a,i.translateY=i.translateY+s.height+r.height+a}},{key:\\\"setGridXPosForDualYAxis\\\",value:function(t,e){var i=this.w,a=new B(this.dCtx.ctx);i.config.yaxis.map((function(s,r){-1!==i.globals.ignoreYAxisIndexes.indexOf(r)||s.floating||a.isYAxisHidden(r)||(s.opposite&&(i.globals.translateX=i.globals.translateX-(e[r].width+t[r].width)-parseInt(i.config.yaxis[r].labels.style.fontSize,10)/1.2-12),i.globals.translateX<2&&(i.globals.translateX=2))}))}}]),t}(),ot=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.lgRect={},this.yAxisWidth=0,this.yAxisWidthLeft=0,this.yAxisWidthRight=0,this.xAxisHeight=0,this.isSparkline=this.w.config.chart.sparkline.enabled,this.dimHelpers=new it(this),this.dimYAxis=new st(this),this.dimXAxis=new at(this),this.dimGrid=new rt(this),this.lgWidthForSideLegends=0,this.gridPad=this.w.config.grid.padding,this.xPadRight=0,this.xPadLeft=0}return r(t,[{key:\\\"plotCoords\\\",value:function(){var t=this.w.globals;this.lgRect=this.dimHelpers.getLegendsRect(),t.axisCharts?this.setDimensionsForAxisCharts():this.setDimensionsForNonAxisCharts(),this.dimGrid.gridPadFortitleSubtitle(),t.gridHeight=t.gridHeight-this.gridPad.top-this.gridPad.bottom,t.gridWidth=t.gridWidth-this.gridPad.left-this.gridPad.right-this.xPadRight-this.xPadLeft;var e=this.dimGrid.gridPadForColumnsInNumericAxis(t.gridWidth);t.gridWidth=t.gridWidth-2*e,t.translateX=t.translateX+this.gridPad.left+this.xPadLeft+(e>0?e+4:0),t.translateY=t.translateY+this.gridPad.top}},{key:\\\"setDimensionsForAxisCharts\\\",value:function(){var t=this,e=this.w,i=e.globals,a=this.dimYAxis.getyAxisLabelsCoords(),s=this.dimYAxis.getyAxisTitleCoords();e.globals.yLabelsCoords=[],e.globals.yTitleCoords=[],e.config.yaxis.map((function(t,i){e.globals.yLabelsCoords.push({width:a[i].width,index:i}),e.globals.yTitleCoords.push({width:s[i].width,index:i})})),this.yAxisWidth=this.dimYAxis.getTotalYAxisWidth();var r=this.dimXAxis.getxAxisLabelsCoords(),o=this.dimXAxis.getxAxisTitleCoords();this.conditionalChecksForAxisCoords(r,o),i.translateXAxisY=e.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=e.globals.rotateXLabels&&e.globals.isXNumeric&&e.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,e.globals.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(e.config.xaxis.labels.style.fontSize,10)/1.5*-1),i.translateXAxisY=i.translateXAxisY+e.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+e.config.xaxis.labels.offsetX;var n=this.yAxisWidth,l=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight-o.height,i.xAxisLabelsWidth=this.xAxisWidth,i.xAxisHeight=this.xAxisHeight;var h=10;(\\\"radar\\\"===e.config.chart.type||this.isSparkline)&&(n=0,l=i.goldenPadding),this.isSparkline&&(this.lgRect={height:0,width:0}),(this.isSparkline||\\\"treemap\\\"===e.config.chart.type)&&(n=0,l=0,h=0),this.isSparkline||this.dimXAxis.additionalPaddingXLabels(r);var c=function(){i.translateX=n,i.gridHeight=i.svgHeight-t.lgRect.height-l-(t.isSparkline||\\\"treemap\\\"===e.config.chart.type?0:e.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-n};switch(\\\"top\\\"===e.config.xaxis.position&&(h=i.xAxisHeight-e.config.xaxis.axisTicks.height-5),e.config.legend.position){case\\\"bottom\\\":i.translateY=h,c();break;case\\\"top\\\":i.translateY=this.lgRect.height+h,c();break;case\\\"left\\\":i.translateY=h,i.translateX=this.lgRect.width+n,i.gridHeight=i.svgHeight-l-12,i.gridWidth=i.svgWidth-this.lgRect.width-n;break;case\\\"right\\\":i.translateY=h,i.translateX=n,i.gridHeight=i.svgHeight-l-12,i.gridWidth=i.svgWidth-this.lgRect.width-n-5;break;default:throw new Error(\\\"Legend position not supported\\\")}this.dimGrid.setGridXPosForDualYAxis(s,a),new q(this.ctx).setYAxisXPosition(a,s)}},{key:\\\"setDimensionsForNonAxisCharts\\\",value:function(){var t=this.w,e=t.globals,i=t.config,a=0;t.config.legend.show&&!t.config.legend.floating&&(a=20);var s=\\\"pie\\\"===i.chart.type||\\\"polarArea\\\"===i.chart.type||\\\"donut\\\"===i.chart.type?\\\"pie\\\":\\\"radialBar\\\",r=i.plotOptions[s].offsetY,o=i.plotOptions[s].offsetX;if(!i.legend.show||i.legend.floating)return e.gridHeight=e.svgHeight-i.grid.padding.left+i.grid.padding.right,e.gridWidth=e.gridHeight,e.translateY=r,void(e.translateX=o+(e.svgWidth-e.gridWidth)/2);switch(i.legend.position){case\\\"bottom\\\":e.gridHeight=e.svgHeight-this.lgRect.height-e.goldenPadding,e.gridWidth=e.svgWidth,e.translateY=r-10,e.translateX=o+(e.svgWidth-e.gridWidth)/2;break;case\\\"top\\\":e.gridHeight=e.svgHeight-this.lgRect.height-e.goldenPadding,e.gridWidth=e.svgWidth,e.translateY=this.lgRect.height+r+10,e.translateX=o+(e.svgWidth-e.gridWidth)/2;break;case\\\"left\\\":e.gridWidth=e.svgWidth-this.lgRect.width-a,e.gridHeight=\\\"auto\\\"!==i.chart.height?e.svgHeight:e.gridWidth,e.translateY=r,e.translateX=o+this.lgRect.width+a;break;case\\\"right\\\":e.gridWidth=e.svgWidth-this.lgRect.width-a-5,e.gridHeight=\\\"auto\\\"!==i.chart.height?e.svgHeight:e.gridWidth,e.translateY=r,e.translateX=o+10;break;default:throw new Error(\\\"Legend position not supported\\\")}}},{key:\\\"conditionalChecksForAxisCoords\\\",value:function(t,e){var i=this.w;this.xAxisHeight=(t.height+e.height)*(i.globals.isMultiLineX?1.2:i.globals.LINE_HEIGHT_RATIO)+(i.globals.rotateXLabels?22:10),this.xAxisWidth=t.width,this.xAxisHeight-e.height>i.config.xaxis.labels.maxHeight&&(this.xAxisHeight=i.config.xaxis.labels.maxHeight),i.config.xaxis.labels.minHeight&&this.xAxisHeight<i.config.xaxis.labels.minHeight&&(this.xAxisHeight=i.config.xaxis.labels.minHeight),i.config.xaxis.floating&&(this.xAxisHeight=0);var a=0,s=0;i.config.yaxis.forEach((function(t){a+=t.labels.minWidth,s+=t.labels.maxWidth})),this.yAxisWidth<a&&(this.yAxisWidth=a),this.yAxisWidth>s&&(this.yAxisWidth=s)}}]),t}(),nt=function(){function t(e){a(this,t),this.w=e.w,this.lgCtx=e}return r(t,[{key:\\\"getLegendStyles\\\",value:function(){var t=document.createElement(\\\"style\\\");t.setAttribute(\\\"type\\\",\\\"text/css\\\");var e=document.createTextNode(\\\"\\\\t\\\\n    \\\\t\\\\n      .apexcharts-legend {\\\\t\\\\n        display: flex;\\\\t\\\\n        overflow: auto;\\\\t\\\\n        padding: 0 10px;\\\\t\\\\n      }\\\\t\\\\n      .apexcharts-legend.apx-legend-position-bottom, .apexcharts-legend.apx-legend-position-top {\\\\t\\\\n        flex-wrap: wrap\\\\t\\\\n      }\\\\t\\\\n      .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\\\t\\\\n        flex-direction: column;\\\\t\\\\n        bottom: 0;\\\\t\\\\n      }\\\\t\\\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-left, .apexcharts-legend.apx-legend-position-top.apexcharts-align-left, .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\\\t\\\\n        justify-content: flex-start;\\\\t\\\\n      }\\\\t\\\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-center, .apexcharts-legend.apx-legend-position-top.apexcharts-align-center {\\\\t\\\\n        justify-content: center;  \\\\t\\\\n      }\\\\t\\\\n      .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-right, .apexcharts-legend.apx-legend-position-top.apexcharts-align-right {\\\\t\\\\n        justify-content: flex-end;\\\\t\\\\n      }\\\\t\\\\n      .apexcharts-legend-series {\\\\t\\\\n        cursor: pointer;\\\\t\\\\n        line-height: normal;\\\\t\\\\n      }\\\\t\\\\n      .apexcharts-legend.apx-legend-position-bottom .apexcharts-legend-series, .apexcharts-legend.apx-legend-position-top .apexcharts-legend-series{\\\\t\\\\n        display: flex;\\\\t\\\\n        align-items: center;\\\\t\\\\n      }\\\\t\\\\n      .apexcharts-legend-text {\\\\t\\\\n        position: relative;\\\\t\\\\n        font-size: 14px;\\\\t\\\\n      }\\\\t\\\\n      .apexcharts-legend-text *, .apexcharts-legend-marker * {\\\\t\\\\n        pointer-events: none;\\\\t\\\\n      }\\\\t\\\\n      .apexcharts-legend-marker {\\\\t\\\\n        position: relative;\\\\t\\\\n        display: inline-block;\\\\t\\\\n        cursor: pointer;\\\\t\\\\n        margin-right: 3px;\\\\t\\\\n        border-style: solid;\\\\n      }\\\\t\\\\n      \\\\t\\\\n      .apexcharts-legend.apexcharts-align-right .apexcharts-legend-series, .apexcharts-legend.apexcharts-align-left .apexcharts-legend-series{\\\\t\\\\n        display: inline-block;\\\\t\\\\n      }\\\\t\\\\n      .apexcharts-legend-series.apexcharts-no-click {\\\\t\\\\n        cursor: auto;\\\\t\\\\n      }\\\\t\\\\n      .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\\\\t\\\\n        display: none !important;\\\\t\\\\n      }\\\\t\\\\n      .apexcharts-inactive-legend {\\\\t\\\\n        opacity: 0.45;\\\\t\\\\n      }\\\");return t.appendChild(e),t}},{key:\\\"getLegendBBox\\\",value:function(){var t=this.w.globals.dom.baseEl.querySelector(\\\".apexcharts-legend\\\").getBoundingClientRect(),e=t.width;return{clwh:t.height,clww:e}}},{key:\\\"appendToForeignObject\\\",value:function(){var t=this.w.globals;t.dom.elLegendForeign=document.createElementNS(t.SVGNS,\\\"foreignObject\\\");var e=t.dom.elLegendForeign;e.setAttribute(\\\"x\\\",0),e.setAttribute(\\\"y\\\",0),e.setAttribute(\\\"width\\\",t.svgWidth),e.setAttribute(\\\"height\\\",t.svgHeight),t.dom.elLegendWrap.setAttribute(\\\"xmlns\\\",\\\"http://www.w3.org/1999/xhtml\\\"),e.appendChild(t.dom.elLegendWrap),e.appendChild(this.getLegendStyles()),t.dom.Paper.node.insertBefore(e,t.dom.elGraphical.node)}},{key:\\\"toggleDataSeries\\\",value:function(t,e){var i=this,a=this.w;if(a.globals.axisCharts||\\\"radialBar\\\"===a.config.chart.type){a.globals.resized=!0;var s=null,r=null;if(a.globals.risingSeries=[],a.globals.axisCharts?(s=a.globals.dom.baseEl.querySelector(\\\".apexcharts-series[data\\\\\\\\:realIndex='\\\".concat(t,\\\"']\\\")),r=parseInt(s.getAttribute(\\\"data:realIndex\\\"),10)):(s=a.globals.dom.baseEl.querySelector(\\\".apexcharts-series[rel='\\\".concat(t+1,\\\"']\\\")),r=parseInt(s.getAttribute(\\\"rel\\\"),10)-1),e)[{cs:a.globals.collapsedSeries,csi:a.globals.collapsedSeriesIndices},{cs:a.globals.ancillaryCollapsedSeries,csi:a.globals.ancillaryCollapsedSeriesIndices}].forEach((function(t){i.riseCollapsedSeries(t.cs,t.csi,r)}));else this.hideSeries({seriesEl:s,realIndex:r})}else{var o=a.globals.dom.Paper.select(\\\" .apexcharts-series[rel='\\\".concat(t+1,\\\"'] path\\\")),n=a.config.chart.type;if(\\\"pie\\\"===n||\\\"polarArea\\\"===n||\\\"donut\\\"===n){var l=a.config.plotOptions.pie.donut.labels;new b(this.lgCtx.ctx).pathMouseDown(o.members[0],null),this.lgCtx.ctx.pie.printDataLabelsInner(o.members[0].node,l)}o.fire(\\\"click\\\")}}},{key:\\\"hideSeries\\\",value:function(t){var e=t.seriesEl,i=t.realIndex,a=this.w,s=p.clone(a.config.series);if(a.globals.axisCharts){var r=!1;if(a.config.yaxis[i]&&a.config.yaxis[i].show&&a.config.yaxis[i].showAlways&&(r=!0,a.globals.ancillaryCollapsedSeriesIndices.indexOf(i)<0&&(a.globals.ancillaryCollapsedSeries.push({index:i,data:s[i].data.slice(),type:e.parentNode.className.baseVal.split(\\\"-\\\")[1]}),a.globals.ancillaryCollapsedSeriesIndices.push(i))),!r){a.globals.collapsedSeries.push({index:i,data:s[i].data.slice(),type:e.parentNode.className.baseVal.split(\\\"-\\\")[1]}),a.globals.collapsedSeriesIndices.push(i);var o=a.globals.risingSeries.indexOf(i);a.globals.risingSeries.splice(o,1)}}else a.globals.collapsedSeries.push({index:i,data:s[i]}),a.globals.collapsedSeriesIndices.push(i);for(var n=e.childNodes,l=0;l<n.length;l++)n[l].classList.contains(\\\"apexcharts-series-markers-wrap\\\")&&(n[l].classList.contains(\\\"apexcharts-hide\\\")?n[l].classList.remove(\\\"apexcharts-hide\\\"):n[l].classList.add(\\\"apexcharts-hide\\\"));a.globals.allSeriesCollapsed=a.globals.collapsedSeries.length===a.config.series.length,s=this._getSeriesBasedOnCollapsedState(s),this.lgCtx.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled)}},{key:\\\"riseCollapsedSeries\\\",value:function(t,e,i){var a=this.w,s=p.clone(a.config.series);if(t.length>0){for(var r=0;r<t.length;r++)t[r].index===i&&(a.globals.axisCharts?(s[i].data=t[r].data.slice(),t.splice(r,1),e.splice(r,1),a.globals.risingSeries.push(i)):(s[i]=t[r].data,t.splice(r,1),e.splice(r,1),a.globals.risingSeries.push(i)));s=this._getSeriesBasedOnCollapsedState(s),this.lgCtx.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled)}}},{key:\\\"_getSeriesBasedOnCollapsedState\\\",value:function(t){var e=this.w;return e.globals.axisCharts?t.forEach((function(i,a){e.globals.collapsedSeriesIndices.indexOf(a)>-1&&(t[a].data=[])})):t.forEach((function(i,a){e.globals.collapsedSeriesIndices.indexOf(a)>-1&&(t[a]=0)})),t}}]),t}(),lt=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w,this.onLegendClick=this.onLegendClick.bind(this),this.onLegendHovered=this.onLegendHovered.bind(this),this.isBarsDistributed=\\\"bar\\\"===this.w.config.chart.type&&this.w.config.plotOptions.bar.distributed&&1===this.w.config.series.length,this.legendHelpers=new nt(this)}return r(t,[{key:\\\"init\\\",value:function(){var t=this.w,e=t.globals,i=t.config;if((i.legend.showForSingleSeries&&1===e.series.length||this.isBarsDistributed||e.series.length>1||!e.axisCharts)&&i.legend.show){for(;e.dom.elLegendWrap.firstChild;)e.dom.elLegendWrap.removeChild(e.dom.elLegendWrap.firstChild);this.drawLegends(),p.isIE11()?document.getElementsByTagName(\\\"head\\\")[0].appendChild(this.legendHelpers.getLegendStyles()):this.legendHelpers.appendToForeignObject(),\\\"bottom\\\"===i.legend.position||\\\"top\\\"===i.legend.position?this.legendAlignHorizontal():\\\"right\\\"!==i.legend.position&&\\\"left\\\"!==i.legend.position||this.legendAlignVertical()}}},{key:\\\"drawLegends\\\",value:function(){var t=this,e=this.w,i=e.config.legend.fontFamily,a=e.globals.seriesNames,s=e.globals.colors.slice();if(\\\"heatmap\\\"===e.config.chart.type){var r=e.config.plotOptions.heatmap.colorScale.ranges;a=r.map((function(t){return t.name?t.name:t.from+\\\" - \\\"+t.to})),s=r.map((function(t){return t.color}))}else this.isBarsDistributed&&(a=e.globals.labels.slice());e.config.legend.customLegendItems.length&&(a=e.config.legend.customLegendItems);for(var o=e.globals.legendFormatter,n=e.config.legend.inverseOrder,l=n?a.length-1:0;n?l>=0:l<=a.length-1;n?l--:l++){var h=o(a[l],{seriesIndex:l,w:e}),c=!1,d=!1;if(e.globals.collapsedSeries.length>0)for(var g=0;g<e.globals.collapsedSeries.length;g++)e.globals.collapsedSeries[g].index===l&&(c=!0);if(e.globals.ancillaryCollapsedSeriesIndices.length>0)for(var u=0;u<e.globals.ancillaryCollapsedSeriesIndices.length;u++)e.globals.ancillaryCollapsedSeriesIndices[u]===l&&(d=!0);var f=document.createElement(\\\"span\\\");f.classList.add(\\\"apexcharts-legend-marker\\\");var x=e.config.legend.markers.offsetX,v=e.config.legend.markers.offsetY,m=e.config.legend.markers.height,w=e.config.legend.markers.width,k=e.config.legend.markers.strokeWidth,A=e.config.legend.markers.strokeColor,S=e.config.legend.markers.radius,C=f.style;C.background=s[l],C.color=s[l],C.setProperty(\\\"background\\\",s[l],\\\"important\\\"),e.config.legend.markers.fillColors&&e.config.legend.markers.fillColors[l]&&(C.background=e.config.legend.markers.fillColors[l]),void 0!==e.globals.seriesColors[l]&&(C.background=e.globals.seriesColors[l],C.color=e.globals.seriesColors[l]),C.height=Array.isArray(m)?parseFloat(m[l])+\\\"px\\\":parseFloat(m)+\\\"px\\\",C.width=Array.isArray(w)?parseFloat(w[l])+\\\"px\\\":parseFloat(w)+\\\"px\\\",C.left=(Array.isArray(x)?parseFloat(x[l]):parseFloat(x))+\\\"px\\\",C.top=(Array.isArray(v)?parseFloat(v[l]):parseFloat(v))+\\\"px\\\",C.borderWidth=Array.isArray(k)?k[l]:k,C.borderColor=Array.isArray(A)?A[l]:A,C.borderRadius=Array.isArray(S)?parseFloat(S[l])+\\\"px\\\":parseFloat(S)+\\\"px\\\",e.config.legend.markers.customHTML&&(Array.isArray(e.config.legend.markers.customHTML)?e.config.legend.markers.customHTML[l]&&(f.innerHTML=e.config.legend.markers.customHTML[l]()):f.innerHTML=e.config.legend.markers.customHTML()),b.setAttrs(f,{rel:l+1,\\\"data:collapsed\\\":c||d}),(c||d)&&f.classList.add(\\\"apexcharts-inactive-legend\\\");var L=document.createElement(\\\"div\\\"),P=document.createElement(\\\"span\\\");P.classList.add(\\\"apexcharts-legend-text\\\"),P.innerHTML=Array.isArray(h)?h.join(\\\" \\\"):h;var T=e.config.legend.labels.useSeriesColors?e.globals.colors[l]:e.config.legend.labels.colors;T||(T=e.config.chart.foreColor),P.style.color=T,P.style.fontSize=parseFloat(e.config.legend.fontSize)+\\\"px\\\",P.style.fontWeight=e.config.legend.fontWeight,P.style.fontFamily=i||e.config.chart.fontFamily,b.setAttrs(P,{rel:l+1,i:l,\\\"data:default-text\\\":encodeURIComponent(h),\\\"data:collapsed\\\":c||d}),L.appendChild(f),L.appendChild(P);var M=new y(this.ctx);if(!e.config.legend.showForZeroSeries)0===M.getSeriesTotalByIndex(l)&&M.seriesHaveSameValues(l)&&!M.isSeriesNull(l)&&-1===e.globals.collapsedSeriesIndices.indexOf(l)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(l)&&L.classList.add(\\\"apexcharts-hidden-zero-series\\\");e.config.legend.showForNullSeries||M.isSeriesNull(l)&&-1===e.globals.collapsedSeriesIndices.indexOf(l)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(l)&&L.classList.add(\\\"apexcharts-hidden-null-series\\\"),e.globals.dom.elLegendWrap.appendChild(L),e.globals.dom.elLegendWrap.classList.add(\\\"apexcharts-align-\\\".concat(e.config.legend.horizontalAlign)),e.globals.dom.elLegendWrap.classList.add(\\\"apx-legend-position-\\\"+e.config.legend.position),L.classList.add(\\\"apexcharts-legend-series\\\"),L.style.margin=\\\"\\\".concat(e.config.legend.itemMargin.vertical,\\\"px \\\").concat(e.config.legend.itemMargin.horizontal,\\\"px\\\"),e.globals.dom.elLegendWrap.style.width=e.config.legend.width?e.config.legend.width+\\\"px\\\":\\\"\\\",e.globals.dom.elLegendWrap.style.height=e.config.legend.height?e.config.legend.height+\\\"px\\\":\\\"\\\",b.setAttrs(L,{rel:l+1,seriesName:p.escapeString(a[l]),\\\"data:collapsed\\\":c||d}),(c||d)&&L.classList.add(\\\"apexcharts-inactive-legend\\\"),e.config.legend.onItemClick.toggleDataSeries||L.classList.add(\\\"apexcharts-no-click\\\")}e.globals.dom.elWrap.addEventListener(\\\"click\\\",t.onLegendClick,!0),e.config.legend.onItemHover.highlightDataSeries&&0===e.config.legend.customLegendItems.length&&(e.globals.dom.elWrap.addEventListener(\\\"mousemove\\\",t.onLegendHovered,!0),e.globals.dom.elWrap.addEventListener(\\\"mouseout\\\",t.onLegendHovered,!0))}},{key:\\\"setLegendWrapXY\\\",value:function(t,e){var i=this.w,a=i.globals.dom.baseEl.querySelector(\\\".apexcharts-legend\\\"),s=a.getBoundingClientRect(),r=0,o=0;if(\\\"bottom\\\"===i.config.legend.position)o+=i.globals.svgHeight-s.height/2;else if(\\\"top\\\"===i.config.legend.position){var n=new ot(this.ctx),l=n.dimHelpers.getTitleSubtitleCoords(\\\"title\\\").height,h=n.dimHelpers.getTitleSubtitleCoords(\\\"subtitle\\\").height;o=o+(l>0?l-10:0)+(h>0?h-10:0)}a.style.position=\\\"absolute\\\",r=r+t+i.config.legend.offsetX,o=o+e+i.config.legend.offsetY,a.style.left=r+\\\"px\\\",a.style.top=o+\\\"px\\\",\\\"bottom\\\"===i.config.legend.position?(a.style.top=\\\"auto\\\",a.style.bottom=5-i.config.legend.offsetY+\\\"px\\\"):\\\"right\\\"===i.config.legend.position&&(a.style.left=\\\"auto\\\",a.style.right=25+i.config.legend.offsetX+\\\"px\\\");[\\\"width\\\",\\\"height\\\"].forEach((function(t){a.style[t]&&(a.style[t]=parseInt(i.config.legend[t],10)+\\\"px\\\")}))}},{key:\\\"legendAlignHorizontal\\\",value:function(){var t=this.w;t.globals.dom.baseEl.querySelector(\\\".apexcharts-legend\\\").style.right=0;var e=this.legendHelpers.getLegendBBox(),i=new ot(this.ctx),a=i.dimHelpers.getTitleSubtitleCoords(\\\"title\\\"),s=i.dimHelpers.getTitleSubtitleCoords(\\\"subtitle\\\"),r=0;\\\"bottom\\\"===t.config.legend.position?r=-e.clwh/1.8:\\\"top\\\"===t.config.legend.position&&(r=a.height+s.height+t.config.title.margin+t.config.subtitle.margin-10),this.setLegendWrapXY(20,r)}},{key:\\\"legendAlignVertical\\\",value:function(){var t=this.w,e=this.legendHelpers.getLegendBBox(),i=0;\\\"left\\\"===t.config.legend.position&&(i=20),\\\"right\\\"===t.config.legend.position&&(i=t.globals.svgWidth-e.clww-10),this.setLegendWrapXY(i,20)}},{key:\\\"onLegendHovered\\\",value:function(t){var e=this.w,i=t.target.classList.contains(\\\"apexcharts-legend-text\\\")||t.target.classList.contains(\\\"apexcharts-legend-marker\\\");if(\\\"heatmap\\\"===e.config.chart.type||this.isBarsDistributed){if(i){var a=parseInt(t.target.getAttribute(\\\"rel\\\"),10)-1;this.ctx.events.fireEvent(\\\"legendHover\\\",[this.ctx,a,this.w]),new z(this.ctx).highlightRangeInSeries(t,t.target)}}else!t.target.classList.contains(\\\"apexcharts-inactive-legend\\\")&&i&&new z(this.ctx).toggleSeriesOnHover(t,t.target)}},{key:\\\"onLegendClick\\\",value:function(t){var e=this.w;if(!e.config.legend.customLegendItems.length&&(t.target.classList.contains(\\\"apexcharts-legend-text\\\")||t.target.classList.contains(\\\"apexcharts-legend-marker\\\"))){var i=parseInt(t.target.getAttribute(\\\"rel\\\"),10)-1,a=\\\"true\\\"===t.target.getAttribute(\\\"data:collapsed\\\"),s=this.w.config.chart.events.legendClick;\\\"function\\\"==typeof s&&s(this.ctx,i,this.w),this.ctx.events.fireEvent(\\\"legendClick\\\",[this.ctx,i,this.w]);var r=this.w.config.legend.markers.onClick;\\\"function\\\"==typeof r&&t.target.classList.contains(\\\"apexcharts-legend-marker\\\")&&(r(this.ctx,i,this.w),this.ctx.events.fireEvent(\\\"legendMarkerClick\\\",[this.ctx,i,this.w])),\\\"treemap\\\"!==e.config.chart.type&&\\\"heatmap\\\"!==e.config.chart.type&&!this.isBarsDistributed&&e.config.legend.onItemClick.toggleDataSeries&&this.legendHelpers.toggleDataSeries(i,a)}}}]),t}(),ht=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.ev=this.w.config.chart.events,this.selectedClass=\\\"apexcharts-selected\\\",this.localeValues=this.w.globals.locale.toolbar,this.minX=i.globals.minX,this.maxX=i.globals.maxX}return r(t,[{key:\\\"createToolbar\\\",value:function(){var t=this,e=this.w,i=function(){return document.createElement(\\\"div\\\")},a=i();if(a.setAttribute(\\\"class\\\",\\\"apexcharts-toolbar\\\"),a.style.top=e.config.chart.toolbar.offsetY+\\\"px\\\",a.style.right=3-e.config.chart.toolbar.offsetX+\\\"px\\\",e.globals.dom.elWrap.appendChild(a),this.elZoom=i(),this.elZoomIn=i(),this.elZoomOut=i(),this.elPan=i(),this.elSelection=i(),this.elZoomReset=i(),this.elMenuIcon=i(),this.elMenu=i(),this.elCustomIcons=[],this.t=e.config.chart.toolbar.tools,Array.isArray(this.t.customIcons))for(var s=0;s<this.t.customIcons.length;s++)this.elCustomIcons.push(i());var r=[],o=function(i,a,s){var o=i.toLowerCase();t.t[o]&&e.config.chart.zoom.enabled&&r.push({el:a,icon:\\\"string\\\"==typeof t.t[o]?t.t[o]:s,title:t.localeValues[i],class:\\\"apexcharts-\\\".concat(o,\\\"-icon\\\")})};o(\\\"zoomIn\\\",this.elZoomIn,'<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\">\\\\n    <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/>\\\\n    <path d=\\\"M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\\\"/>\\\\n</svg>\\\\n'),o(\\\"zoomOut\\\",this.elZoomOut,'<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\">\\\\n    <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/>\\\\n    <path d=\\\"M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\\\"/>\\\\n</svg>\\\\n');var n=function(i){t.t[i]&&e.config.chart[i].enabled&&r.push({el:\\\"zoom\\\"===i?t.elZoom:t.elSelection,icon:\\\"string\\\"==typeof t.t[i]?t.t[i]:\\\"zoom\\\"===i?'<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"#000000\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\">\\\\n    <path d=\\\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\\\"/>\\\\n    <path d=\\\"M0 0h24v24H0V0z\\\" fill=\\\"none\\\"/>\\\\n    <path d=\\\"M12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z\\\"/>\\\\n</svg>':'<svg fill=\\\"#6E8192\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\\\n    <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/>\\\\n    <path d=\\\"M3 5h2V3c-1.1 0-2 .9-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2c0-1.1-.9-2-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2z\\\"/>\\\\n</svg>',title:t.localeValues[\\\"zoom\\\"===i?\\\"selectionZoom\\\":\\\"selection\\\"],class:e.globals.isTouchDevice?\\\"apexcharts-element-hidden\\\":\\\"apexcharts-\\\".concat(i,\\\"-icon\\\")})};n(\\\"zoom\\\"),n(\\\"selection\\\"),this.t.pan&&e.config.chart.zoom.enabled&&r.push({el:this.elPan,icon:\\\"string\\\"==typeof this.t.pan?this.t.pan:'<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" fill=\\\"#000000\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\">\\\\n    <defs>\\\\n        <path d=\\\"M0 0h24v24H0z\\\" id=\\\"a\\\"/>\\\\n    </defs>\\\\n    <clipPath id=\\\"b\\\">\\\\n        <use overflow=\\\"visible\\\" xlink:href=\\\"#a\\\"/>\\\\n    </clipPath>\\\\n    <path clip-path=\\\"url(#b)\\\" d=\\\"M23 5.5V20c0 2.2-1.8 4-4 4h-7.3c-1.08 0-2.1-.43-2.85-1.19L1 14.83s1.26-1.23 1.3-1.25c.22-.19.49-.29.79-.29.22 0 .42.06.6.16.04.01 4.31 2.46 4.31 2.46V4c0-.83.67-1.5 1.5-1.5S11 3.17 11 4v7h1V1.5c0-.83.67-1.5 1.5-1.5S15 .67 15 1.5V11h1V2.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V11h1V5.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5z\\\"/>\\\\n</svg>',title:this.localeValues.pan,class:e.globals.isTouchDevice?\\\"apexcharts-element-hidden\\\":\\\"apexcharts-pan-icon\\\"}),o(\\\"reset\\\",this.elZoomReset,'<svg fill=\\\"#000000\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\\\n    <path d=\\\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\\\"/>\\\\n    <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/>\\\\n</svg>'),this.t.download&&r.push({el:this.elMenuIcon,icon:\\\"string\\\"==typeof this.t.download?this.t.download:'<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"none\\\" d=\\\"M0 0h24v24H0V0z\\\"/><path d=\\\"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z\\\"/></svg>',title:this.localeValues.menu,class:\\\"apexcharts-menu-icon\\\"});for(var l=0;l<this.elCustomIcons.length;l++)r.push({el:this.elCustomIcons[l],icon:this.t.customIcons[l].icon,title:this.t.customIcons[l].title,index:this.t.customIcons[l].index,class:\\\"apexcharts-toolbar-custom-icon \\\"+this.t.customIcons[l].class});r.forEach((function(t,e){t.index&&p.moveIndexInArray(r,e,t.index)}));for(var h=0;h<r.length;h++)b.setAttrs(r[h].el,{class:r[h].class,title:r[h].title}),r[h].el.innerHTML=r[h].icon,a.appendChild(r[h].el);this._createHamburgerMenu(a),e.globals.zoomEnabled?this.elZoom.classList.add(this.selectedClass):e.globals.panEnabled?this.elPan.classList.add(this.selectedClass):e.globals.selectionEnabled&&this.elSelection.classList.add(this.selectedClass),this.addToolbarEventListeners()}},{key:\\\"_createHamburgerMenu\\\",value:function(t){this.elMenuItems=[],t.appendChild(this.elMenu),b.setAttrs(this.elMenu,{class:\\\"apexcharts-menu\\\"});var e=[{name:\\\"exportSVG\\\",title:this.localeValues.exportToSVG},{name:\\\"exportPNG\\\",title:this.localeValues.exportToPNG},{name:\\\"exportCSV\\\",title:this.localeValues.exportToCSV}];this.w.globals.allSeriesHasEqualX||e.splice(2,1);for(var i=0;i<e.length;i++)this.elMenuItems.push(document.createElement(\\\"div\\\")),this.elMenuItems[i].innerHTML=e[i].title,b.setAttrs(this.elMenuItems[i],{class:\\\"apexcharts-menu-item \\\".concat(e[i].name),title:e[i].title}),this.elMenu.appendChild(this.elMenuItems[i])}},{key:\\\"addToolbarEventListeners\\\",value:function(){var t=this;this.elZoomReset.addEventListener(\\\"click\\\",this.handleZoomReset.bind(this)),this.elSelection.addEventListener(\\\"click\\\",this.toggleZoomSelection.bind(this,\\\"selection\\\")),this.elZoom.addEventListener(\\\"click\\\",this.toggleZoomSelection.bind(this,\\\"zoom\\\")),this.elZoomIn.addEventListener(\\\"click\\\",this.handleZoomIn.bind(this)),this.elZoomOut.addEventListener(\\\"click\\\",this.handleZoomOut.bind(this)),this.elPan.addEventListener(\\\"click\\\",this.togglePanning.bind(this)),this.elMenuIcon.addEventListener(\\\"click\\\",this.toggleMenu.bind(this)),this.elMenuItems.forEach((function(e){e.classList.contains(\\\"exportSVG\\\")?e.addEventListener(\\\"click\\\",t.handleDownload.bind(t,\\\"svg\\\")):e.classList.contains(\\\"exportPNG\\\")?e.addEventListener(\\\"click\\\",t.handleDownload.bind(t,\\\"png\\\")):e.classList.contains(\\\"exportCSV\\\")&&e.addEventListener(\\\"click\\\",t.handleDownload.bind(t,\\\"csv\\\"))}));for(var e=0;e<this.t.customIcons.length;e++)this.elCustomIcons[e].addEventListener(\\\"click\\\",this.t.customIcons[e].click.bind(this,this.ctx,this.ctx.w))}},{key:\\\"toggleZoomSelection\\\",value:function(t){this.ctx.getSyncedCharts().forEach((function(e){e.ctx.toolbar.toggleOtherControls();var i=\\\"selection\\\"===t?e.ctx.toolbar.elSelection:e.ctx.toolbar.elZoom,a=\\\"selection\\\"===t?\\\"selectionEnabled\\\":\\\"zoomEnabled\\\";e.w.globals[a]=!e.w.globals[a],i.classList.contains(e.ctx.toolbar.selectedClass)?i.classList.remove(e.ctx.toolbar.selectedClass):i.classList.add(e.ctx.toolbar.selectedClass)}))}},{key:\\\"getToolbarIconsReference\\\",value:function(){var t=this.w;this.elZoom||(this.elZoom=t.globals.dom.baseEl.querySelector(\\\".apexcharts-zoom-icon\\\")),this.elPan||(this.elPan=t.globals.dom.baseEl.querySelector(\\\".apexcharts-pan-icon\\\")),this.elSelection||(this.elSelection=t.globals.dom.baseEl.querySelector(\\\".apexcharts-selection-icon\\\"))}},{key:\\\"enableZoomPanFromToolbar\\\",value:function(t){this.toggleOtherControls(),\\\"pan\\\"===t?this.w.globals.panEnabled=!0:this.w.globals.zoomEnabled=!0;var e=\\\"pan\\\"===t?this.elPan:this.elZoom,i=\\\"pan\\\"===t?this.elZoom:this.elPan;e&&e.classList.add(this.selectedClass),i&&i.classList.remove(this.selectedClass)}},{key:\\\"togglePanning\\\",value:function(){this.ctx.getSyncedCharts().forEach((function(t){t.ctx.toolbar.toggleOtherControls(),t.w.globals.panEnabled=!t.w.globals.panEnabled,t.ctx.toolbar.elPan.classList.contains(t.ctx.toolbar.selectedClass)?t.ctx.toolbar.elPan.classList.remove(t.ctx.toolbar.selectedClass):t.ctx.toolbar.elPan.classList.add(t.ctx.toolbar.selectedClass)}))}},{key:\\\"toggleOtherControls\\\",value:function(){var t=this,e=this.w;e.globals.panEnabled=!1,e.globals.zoomEnabled=!1,e.globals.selectionEnabled=!1,this.getToolbarIconsReference(),[this.elPan,this.elSelection,this.elZoom].forEach((function(e){e&&e.classList.remove(t.selectedClass)}))}},{key:\\\"handleZoomIn\\\",value:function(){var t=this.w;t.globals.isTimelineBar&&(this.minX=t.globals.minY,this.maxX=t.globals.maxY);var e=(this.minX+this.maxX)/2,i=(this.minX+e)/2,a=(this.maxX+e)/2,s=this._getNewMinXMaxX(i,a);t.globals.disableZoomIn||this.zoomUpdateOptions(s.minX,s.maxX)}},{key:\\\"handleZoomOut\\\",value:function(){var t=this.w;if(t.globals.isTimelineBar&&(this.minX=t.globals.minY,this.maxX=t.globals.maxY),!(\\\"datetime\\\"===t.config.xaxis.type&&new Date(this.minX).getUTCFullYear()<1e3)){var e=(this.minX+this.maxX)/2,i=this.minX-(e-this.minX),a=this.maxX-(e-this.maxX),s=this._getNewMinXMaxX(i,a);t.globals.disableZoomOut||this.zoomUpdateOptions(s.minX,s.maxX)}}},{key:\\\"_getNewMinXMaxX\\\",value:function(t,e){var i=this.w.config.xaxis.convertedCatToNumeric;return{minX:i?Math.floor(t):t,maxX:i?Math.floor(e):e}}},{key:\\\"zoomUpdateOptions\\\",value:function(t,e){var i=this.w;if(void 0!==t||void 0!==e){if(!(i.config.xaxis.convertedCatToNumeric&&(t<1&&(t=1,e=i.globals.dataPoints),e-t<2))){var a={min:t,max:e},s=this.getBeforeZoomRange(a);s&&(a=s.xaxis);var r={xaxis:a},o=p.clone(i.globals.initialConfig.yaxis);if(i.config.chart.zoom.autoScaleYaxis)o=new j(this.ctx).autoScaleY(this.ctx,o,{xaxis:a});i.config.chart.group||(r.yaxis=o),this.w.globals.zoomed=!0,this.ctx.updateHelpers._updateOptions(r,!1,this.w.config.chart.animations.dynamicAnimation.enabled),this.zoomCallback(a,o)}}else this.handleZoomReset()}},{key:\\\"zoomCallback\\\",value:function(t,e){\\\"function\\\"==typeof this.ev.zoomed&&this.ev.zoomed(this.ctx,{xaxis:t,yaxis:e})}},{key:\\\"getBeforeZoomRange\\\",value:function(t,e){var i=null;return\\\"function\\\"==typeof this.ev.beforeZoom&&(i=this.ev.beforeZoom(this,{xaxis:t,yaxis:e})),i}},{key:\\\"toggleMenu\\\",value:function(){var t=this;window.setTimeout((function(){t.elMenu.classList.contains(\\\"apexcharts-menu-open\\\")?t.elMenu.classList.remove(\\\"apexcharts-menu-open\\\"):t.elMenu.classList.add(\\\"apexcharts-menu-open\\\")}),0)}},{key:\\\"handleDownload\\\",value:function(t){var e=this.w,i=new V(this.ctx);switch(t){case\\\"svg\\\":i.exportToSVG(this.ctx);break;case\\\"png\\\":i.exportToPng(this.ctx);break;case\\\"csv\\\":i.exportToCSV({series:e.config.series,columnDelimiter:e.config.chart.toolbar.export.csv.columnDelimiter})}}},{key:\\\"handleZoomReset\\\",value:function(t){this.ctx.getSyncedCharts().forEach((function(t){var e=t.w;if(e.globals.lastXAxis.min=void 0,e.globals.lastXAxis.max=void 0,t.updateHelpers.revertDefaultAxisMinMax(),\\\"function\\\"==typeof e.config.chart.events.beforeResetZoom){var i=e.config.chart.events.beforeResetZoom(t,e);i&&t.updateHelpers.revertDefaultAxisMinMax(i)}\\\"function\\\"==typeof e.config.chart.events.zoomed&&t.ctx.toolbar.zoomCallback({min:e.config.xaxis.min,max:e.config.xaxis.max}),e.globals.zoomed=!1;var a=t.ctx.series.emptyCollapsedSeries(p.clone(e.globals.initialSeries));t.updateHelpers._updateSeries(a,e.config.chart.animations.dynamicAnimation.enabled)}))}},{key:\\\"destroy\\\",value:function(){this.elZoom=null,this.elZoomIn=null,this.elZoomOut=null,this.elPan=null,this.elSelection=null,this.elZoomReset=null,this.elMenuIcon=null}}]),t}(),ct=function(t){n(i,ht);var e=d(i);function i(t){var s;return a(this,i),(s=e.call(this,t)).ctx=t,s.w=t.w,s.dragged=!1,s.graphics=new b(s.ctx),s.eventList=[\\\"mousedown\\\",\\\"mouseleave\\\",\\\"mousemove\\\",\\\"touchstart\\\",\\\"touchmove\\\",\\\"mouseup\\\",\\\"touchend\\\"],s.clientX=0,s.clientY=0,s.startX=0,s.endX=0,s.dragX=0,s.startY=0,s.endY=0,s.dragY=0,s.moveDirection=\\\"none\\\",s}return r(i,[{key:\\\"init\\\",value:function(t){var e=this,i=t.xyRatios,a=this.w,s=this;this.xyRatios=i,this.zoomRect=this.graphics.drawRect(0,0,0,0),this.selectionRect=this.graphics.drawRect(0,0,0,0),this.gridRect=a.globals.dom.baseEl.querySelector(\\\".apexcharts-grid\\\"),this.zoomRect.node.classList.add(\\\"apexcharts-zoom-rect\\\"),this.selectionRect.node.classList.add(\\\"apexcharts-selection-rect\\\"),a.globals.dom.elGraphical.add(this.zoomRect),a.globals.dom.elGraphical.add(this.selectionRect),\\\"x\\\"===a.config.chart.selection.type?this.slDraggableRect=this.selectionRect.draggable({minX:0,minY:0,maxX:a.globals.gridWidth,maxY:a.globals.gridHeight}).on(\\\"dragmove\\\",this.selectionDragging.bind(this,\\\"dragging\\\")):\\\"y\\\"===a.config.chart.selection.type?this.slDraggableRect=this.selectionRect.draggable({minX:0,maxX:a.globals.gridWidth}).on(\\\"dragmove\\\",this.selectionDragging.bind(this,\\\"dragging\\\")):this.slDraggableRect=this.selectionRect.draggable().on(\\\"dragmove\\\",this.selectionDragging.bind(this,\\\"dragging\\\")),this.preselectedSelection(),this.hoverArea=a.globals.dom.baseEl.querySelector(\\\"\\\".concat(a.globals.chartClass,\\\" .apexcharts-svg\\\")),this.hoverArea.classList.add(\\\"apexcharts-zoomable\\\"),this.eventList.forEach((function(t){e.hoverArea.addEventListener(t,s.svgMouseEvents.bind(s,i),{capture:!1,passive:!0})}))}},{key:\\\"destroy\\\",value:function(){this.slDraggableRect&&(this.slDraggableRect.draggable(!1),this.slDraggableRect.off(),this.selectionRect.off()),this.selectionRect=null,this.zoomRect=null,this.gridRect=null}},{key:\\\"svgMouseEvents\\\",value:function(t,e){var i=this.w,a=this,s=this.ctx.toolbar,r=i.globals.zoomEnabled?i.config.chart.zoom.type:i.config.chart.selection.type,o=i.config.chart.toolbar.autoSelected;e.shiftKey?(this.shiftWasPressed=!0,s.enableZoomPanFromToolbar(\\\"pan\\\"===o?\\\"zoom\\\":\\\"pan\\\")):this.shiftWasPressed&&(s.enableZoomPanFromToolbar(o),this.shiftWasPressed=!1);var n=e.target.classList;if(!(n.contains(\\\"apexcharts-selection-rect\\\")||n.contains(\\\"apexcharts-legend-marker\\\")||n.contains(\\\"apexcharts-legend-text\\\")||e.target.parentNode.classList.contains(\\\"apexcharts-toolbar\\\"))){if(a.clientX=\\\"touchmove\\\"===e.type||\\\"touchstart\\\"===e.type?e.touches[0].clientX:\\\"touchend\\\"===e.type?e.changedTouches[0].clientX:e.clientX,a.clientY=\\\"touchmove\\\"===e.type||\\\"touchstart\\\"===e.type?e.touches[0].clientY:\\\"touchend\\\"===e.type?e.changedTouches[0].clientY:e.clientY,\\\"mousedown\\\"===e.type&&1===e.which){var l=a.gridRect.getBoundingClientRect();a.startX=a.clientX-l.left,a.startY=a.clientY-l.top,a.dragged=!1,a.w.globals.mousedown=!0}if((\\\"mousemove\\\"===e.type&&1===e.which||\\\"touchmove\\\"===e.type)&&(a.dragged=!0,i.globals.panEnabled?(i.globals.selection=null,a.w.globals.mousedown&&a.panDragging({context:a,zoomtype:r,xyRatios:t})):(a.w.globals.mousedown&&i.globals.zoomEnabled||a.w.globals.mousedown&&i.globals.selectionEnabled)&&(a.selection=a.selectionDrawing({context:a,zoomtype:r}))),\\\"mouseup\\\"===e.type||\\\"touchend\\\"===e.type||\\\"mouseleave\\\"===e.type){var h=a.gridRect.getBoundingClientRect();a.w.globals.mousedown&&(a.endX=a.clientX-h.left,a.endY=a.clientY-h.top,a.dragX=Math.abs(a.endX-a.startX),a.dragY=Math.abs(a.endY-a.startY),(i.globals.zoomEnabled||i.globals.selectionEnabled)&&a.selectionDrawn({context:a,zoomtype:r}),i.globals.panEnabled&&i.config.xaxis.convertedCatToNumeric&&a.delayedPanScrolled()),i.globals.zoomEnabled&&a.hideSelectionRect(this.selectionRect),a.dragged=!1,a.w.globals.mousedown=!1}this.makeSelectionRectDraggable()}}},{key:\\\"makeSelectionRectDraggable\\\",value:function(){var t=this.w;if(this.selectionRect){var e=this.selectionRect.node.getBoundingClientRect();e.width>0&&e.height>0&&this.slDraggableRect.selectize({points:\\\"l, r\\\",pointSize:8,pointType:\\\"rect\\\"}).resize({constraint:{minX:0,minY:0,maxX:t.globals.gridWidth,maxY:t.globals.gridHeight}}).on(\\\"resizing\\\",this.selectionDragging.bind(this,\\\"resizing\\\"))}}},{key:\\\"preselectedSelection\\\",value:function(){var t=this.w,e=this.xyRatios;if(!t.globals.zoomEnabled)if(void 0!==t.globals.selection&&null!==t.globals.selection)this.drawSelectionRect(t.globals.selection);else if(void 0!==t.config.chart.selection.xaxis.min&&void 0!==t.config.chart.selection.xaxis.max){var i=(t.config.chart.selection.xaxis.min-t.globals.minX)/e.xRatio,a={x:i,y:0,width:t.globals.gridWidth-(t.globals.maxX-t.config.chart.selection.xaxis.max)/e.xRatio-i,height:t.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(a),this.makeSelectionRectDraggable(),\\\"function\\\"==typeof t.config.chart.events.selection&&t.config.chart.events.selection(this.ctx,{xaxis:{min:t.config.chart.selection.xaxis.min,max:t.config.chart.selection.xaxis.max},yaxis:{}})}}},{key:\\\"drawSelectionRect\\\",value:function(t){var e=t.x,i=t.y,a=t.width,s=t.height,r=t.translateX,o=void 0===r?0:r,n=t.translateY,l=void 0===n?0:n,h=this.w,c=this.zoomRect,d=this.selectionRect;if(this.dragged||null!==h.globals.selection){var g={transform:\\\"translate(\\\"+o+\\\", \\\"+l+\\\")\\\"};h.globals.zoomEnabled&&this.dragged&&(a<0&&(a=1),c.attr({x:e,y:i,width:a,height:s,fill:h.config.chart.zoom.zoomedArea.fill.color,\\\"fill-opacity\\\":h.config.chart.zoom.zoomedArea.fill.opacity,stroke:h.config.chart.zoom.zoomedArea.stroke.color,\\\"stroke-width\\\":h.config.chart.zoom.zoomedArea.stroke.width,\\\"stroke-opacity\\\":h.config.chart.zoom.zoomedArea.stroke.opacity}),b.setAttrs(c.node,g)),h.globals.selectionEnabled&&(d.attr({x:e,y:i,width:a>0?a:0,height:s>0?s:0,fill:h.config.chart.selection.fill.color,\\\"fill-opacity\\\":h.config.chart.selection.fill.opacity,stroke:h.config.chart.selection.stroke.color,\\\"stroke-width\\\":h.config.chart.selection.stroke.width,\\\"stroke-dasharray\\\":h.config.chart.selection.stroke.dashArray,\\\"stroke-opacity\\\":h.config.chart.selection.stroke.opacity}),b.setAttrs(d.node,g))}}},{key:\\\"hideSelectionRect\\\",value:function(t){t&&t.attr({x:0,y:0,width:0,height:0})}},{key:\\\"selectionDrawing\\\",value:function(t){var e=t.context,i=t.zoomtype,a=this.w,s=e,r=this.gridRect.getBoundingClientRect(),o=s.startX-1,n=s.startY,l=!1,h=!1,c=s.clientX-r.left-o,d=s.clientY-r.top-n,g={};return Math.abs(c+o)>a.globals.gridWidth?c=a.globals.gridWidth-o:s.clientX-r.left<0&&(c=o),o>s.clientX-r.left&&(l=!0,c=Math.abs(c)),n>s.clientY-r.top&&(h=!0,d=Math.abs(d)),g=\\\"x\\\"===i?{x:l?o-c:o,y:0,width:c,height:a.globals.gridHeight}:\\\"y\\\"===i?{x:0,y:h?n-d:n,width:a.globals.gridWidth,height:d}:{x:l?o-c:o,y:h?n-d:n,width:c,height:d},s.drawSelectionRect(g),s.selectionDragging(\\\"resizing\\\"),g}},{key:\\\"selectionDragging\\\",value:function(t,e){var i=this,a=this.w,s=this.xyRatios,r=this.selectionRect,o=0;\\\"resizing\\\"===t&&(o=30);var n=function(t){return parseFloat(r.node.getAttribute(t))},l={x:n(\\\"x\\\"),y:n(\\\"y\\\"),width:n(\\\"width\\\"),height:n(\\\"height\\\")};a.globals.selection=l,\\\"function\\\"==typeof a.config.chart.events.selection&&a.globals.selectionEnabled&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout((function(){var t=i.gridRect.getBoundingClientRect(),e=r.node.getBoundingClientRect(),o={xaxis:{min:a.globals.xAxisScale.niceMin+(e.left-t.left)*s.xRatio,max:a.globals.xAxisScale.niceMin+(e.right-t.left)*s.xRatio},yaxis:{min:a.globals.yAxisScale[0].niceMin+(t.bottom-e.bottom)*s.yRatio[0],max:a.globals.yAxisScale[0].niceMax-(e.top-t.top)*s.yRatio[0]}};a.config.chart.events.selection(i.ctx,o),a.config.chart.brush.enabled&&void 0!==a.config.chart.events.brushScrolled&&a.config.chart.events.brushScrolled(i.ctx,o)}),o))}},{key:\\\"selectionDrawn\\\",value:function(t){var e=t.context,i=t.zoomtype,a=this.w,s=e,r=this.xyRatios,o=this.ctx.toolbar;if(s.startX>s.endX){var n=s.startX;s.startX=s.endX,s.endX=n}if(s.startY>s.endY){var l=s.startY;s.startY=s.endY,s.endY=l}var h=void 0,c=void 0;a.globals.isTimelineBar?(h=a.globals.yAxisScale[0].niceMin+s.startX*r.invertedYRatio,c=a.globals.yAxisScale[0].niceMin+s.endX*r.invertedYRatio):(h=a.globals.xAxisScale.niceMin+s.startX*r.xRatio,c=a.globals.xAxisScale.niceMin+s.endX*r.xRatio);var d=[],g=[];if(a.config.yaxis.forEach((function(t,e){d.push(a.globals.yAxisScale[e].niceMax-r.yRatio[e]*s.startY),g.push(a.globals.yAxisScale[e].niceMax-r.yRatio[e]*s.endY)})),s.dragged&&(s.dragX>10||s.dragY>10)&&h!==c)if(a.globals.zoomEnabled){var u=p.clone(a.globals.initialConfig.yaxis),f=p.clone(a.globals.initialConfig.xaxis);if(a.globals.zoomed=!0,a.config.xaxis.convertedCatToNumeric&&(h=Math.floor(h),c=Math.floor(c),h<1&&(h=1,c=a.globals.dataPoints),c-h<2&&(c=h+1)),\\\"xy\\\"!==i&&\\\"x\\\"!==i||(f={min:h,max:c}),\\\"xy\\\"!==i&&\\\"y\\\"!==i||u.forEach((function(t,e){u[e].min=g[e],u[e].max=d[e]})),a.config.chart.zoom.autoScaleYaxis){var x=new j(s.ctx);u=x.autoScaleY(s.ctx,u,{xaxis:f})}if(o){var b=o.getBeforeZoomRange(f,u);b&&(f=b.xaxis?b.xaxis:f,u=b.yaxis?b.yaxis:u)}var v={xaxis:f};a.config.chart.group||(v.yaxis=u),s.ctx.updateHelpers._updateOptions(v,!1,s.w.config.chart.animations.dynamicAnimation.enabled),\\\"function\\\"==typeof a.config.chart.events.zoomed&&o.zoomCallback(f,u)}else if(a.globals.selectionEnabled){var m,y=null;m={min:h,max:c},\\\"xy\\\"!==i&&\\\"y\\\"!==i||(y=p.clone(a.config.yaxis)).forEach((function(t,e){y[e].min=g[e],y[e].max=d[e]})),a.globals.selection=s.selection,\\\"function\\\"==typeof a.config.chart.events.selection&&a.config.chart.events.selection(s.ctx,{xaxis:m,yaxis:y})}}},{key:\\\"panDragging\\\",value:function(t){var e=t.context,i=this.w,a=e;if(void 0!==i.globals.lastClientPosition.x){var s=i.globals.lastClientPosition.x-a.clientX,r=i.globals.lastClientPosition.y-a.clientY;Math.abs(s)>Math.abs(r)&&s>0?this.moveDirection=\\\"left\\\":Math.abs(s)>Math.abs(r)&&s<0?this.moveDirection=\\\"right\\\":Math.abs(r)>Math.abs(s)&&r>0?this.moveDirection=\\\"up\\\":Math.abs(r)>Math.abs(s)&&r<0&&(this.moveDirection=\\\"down\\\")}i.globals.lastClientPosition={x:a.clientX,y:a.clientY};var o=i.globals.isTimelineBar?i.globals.minY:i.globals.minX,n=i.globals.isTimelineBar?i.globals.maxY:i.globals.maxX;i.config.xaxis.convertedCatToNumeric||a.panScrolled(o,n)}},{key:\\\"delayedPanScrolled\\\",value:function(){var t=this.w,e=t.globals.minX,i=t.globals.maxX,a=(t.globals.maxX-t.globals.minX)/2;\\\"left\\\"===this.moveDirection?(e=t.globals.minX+a,i=t.globals.maxX+a):\\\"right\\\"===this.moveDirection&&(e=t.globals.minX-a,i=t.globals.maxX-a),e=Math.floor(e),i=Math.floor(i),this.updateScrolledChart({xaxis:{min:e,max:i}},e,i)}},{key:\\\"panScrolled\\\",value:function(t,e){var i=this.w,a=this.xyRatios,s=p.clone(i.globals.initialConfig.yaxis),r=a.xRatio,o=i.globals.minX,n=i.globals.maxX;i.globals.isTimelineBar&&(r=a.invertedYRatio,o=i.globals.minY,n=i.globals.maxY),\\\"left\\\"===this.moveDirection?(t=o+i.globals.gridWidth/15*r,e=n+i.globals.gridWidth/15*r):\\\"right\\\"===this.moveDirection&&(t=o-i.globals.gridWidth/15*r,e=n-i.globals.gridWidth/15*r),i.globals.isTimelineBar||(t<i.globals.initialMinX||e>i.globals.initialMaxX)&&(t=o,e=n);var l={min:t,max:e};i.config.chart.zoom.autoScaleYaxis&&(s=new j(this.ctx).autoScaleY(this.ctx,s,{xaxis:l}));var h={xaxis:{min:t,max:e}};i.config.chart.group||(h.yaxis=s),this.updateScrolledChart(h,t,e)}},{key:\\\"updateScrolledChart\\\",value:function(t,e,i){var a=this.w;this.ctx.updateHelpers._updateOptions(t,!1,!1),\\\"function\\\"==typeof a.config.chart.events.scrolled&&a.config.chart.events.scrolled(this.ctx,{xaxis:{min:e,max:i}})}}]),i}(),dt=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx}return r(t,[{key:\\\"getNearestValues\\\",value:function(t){var e=t.hoverArea,i=t.elGrid,a=t.clientX,s=t.clientY,r=this.w,o=r.globals.gridWidth,n=r.globals.gridHeight,l=o/(r.globals.dataPoints-1),h=n/r.globals.dataPoints,c=i.getBoundingClientRect(),d=this.hasBars();!r.globals.comboCharts&&!d||r.config.xaxis.convertedCatToNumeric||(l=o/r.globals.dataPoints);var g=a-c.left-r.globals.barPadForNumericAxis,u=s-c.top;g<0||u<0||g>r.globals.gridWidth||u>r.globals.gridHeight?(e.classList.remove(\\\"hovering-zoom\\\"),e.classList.remove(\\\"hovering-pan\\\")):r.globals.zoomEnabled?(e.classList.remove(\\\"hovering-pan\\\"),e.classList.add(\\\"hovering-zoom\\\")):r.globals.panEnabled&&(e.classList.remove(\\\"hovering-zoom\\\"),e.classList.add(\\\"hovering-pan\\\"));var f=Math.round(g/l),x=Math.floor(u/h);d&&!r.config.xaxis.convertedCatToNumeric&&(f=Math.ceil(g/l),f-=1);for(var b,v=null,m=null,y=[],w=0;w<r.globals.seriesXvalues.length;w++)y.push([r.globals.seriesXvalues[w][0]-1e-6].concat(r.globals.seriesXvalues[w]));return y=y.map((function(t){return t.filter((function(t){return t}))})),b=r.globals.seriesYvalues.map((function(t){return t.filter((function(t){return p.isNumber(t)}))})),r.globals.isXNumeric&&(v=(m=this.closestInMultiArray(g,u,y,b)).index,f=m.j,null!==v&&(y=r.globals.seriesXvalues[v],f=(m=this.closestInArray(g,y)).index)),r.globals.capturedSeriesIndex=null===v?-1:v,(!f||f<1)&&(f=0),r.globals.isBarHorizontal?r.globals.capturedDataPointIndex=x:r.globals.capturedDataPointIndex=f,{capturedSeries:v,j:r.globals.isBarHorizontal?x:f,hoverX:g,hoverY:u}}},{key:\\\"closestInMultiArray\\\",value:function(t,e,i,a){var s=this.w,r=0,o=null,n=-1;s.globals.series.length>1?r=this.getFirstActiveXArray(i):o=0;var l=a[r][0],h=i[r][0],c=Math.abs(t-h),d=Math.abs(e-l),g=d+c;return a.map((function(s,r){s.map((function(s,l){var h=Math.abs(e-a[r][l]),u=Math.abs(t-i[r][l]),p=u+h;p<g&&(g=p,c=u,d=h,o=r,n=l)}))})),{index:o,j:n}}},{key:\\\"getFirstActiveXArray\\\",value:function(t){for(var e=0,i=t.map((function(t,e){return t.length>0?e:-1})),a=0;a<i.length;a++)if(-1!==i[a]){e=i[a];break}return e}},{key:\\\"closestInArray\\\",value:function(t,e){for(var i=e[0],a=null,s=Math.abs(t-i),r=0;r<e.length;r++){var o=Math.abs(t-e[r]);o<s&&(s=o,a=r)}return{index:a}}},{key:\\\"isXoverlap\\\",value:function(t){var e=[],i=this.w.globals.seriesX.filter((function(t){return void 0!==t[0]}));if(i.length>0)for(var a=0;a<i.length-1;a++)void 0!==i[a][t]&&void 0!==i[a+1][t]&&i[a][t]!==i[a+1][t]&&e.push(\\\"unEqual\\\");return 0===e.length}},{key:\\\"isInitialSeriesSameLen\\\",value:function(){for(var t=!0,e=this.w.globals.initialSeries,i=0;i<e.length-1;i++)if(e[i].data.length!==e[i+1].data.length){t=!1;break}return t}},{key:\\\"getBarsHeight\\\",value:function(t){return g(t).reduce((function(t,e){return t+e.getBBox().height}),0)}},{key:\\\"getElMarkers\\\",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(\\\" .apexcharts-series-markers\\\")}},{key:\\\"getAllMarkers\\\",value:function(){var t=this.w.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-series-markers-wrap\\\");(t=g(t)).sort((function(t,e){return Number(e.getAttribute(\\\"data:realIndex\\\"))<Number(t.getAttribute(\\\"data:realIndex\\\"))?0:-1}));var e=[];return t.forEach((function(t){e.push(t.querySelector(\\\".apexcharts-marker\\\"))})),e}},{key:\\\"hasMarkers\\\",value:function(){return this.getElMarkers().length>0}},{key:\\\"getElBars\\\",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-bar-series,  .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-rangebar-series\\\")}},{key:\\\"hasBars\\\",value:function(){return this.getElBars().length>0}},{key:\\\"getHoverMarkerSize\\\",value:function(t){var e=this.w,i=e.config.markers.hover.size;return void 0===i&&(i=e.globals.markers.size[t]+e.config.markers.hover.sizeOffset),i}},{key:\\\"toggleAllTooltipSeriesGroups\\\",value:function(t){var e=this.w,i=this.ttCtx;0===i.allTooltipSeriesGroups.length&&(i.allTooltipSeriesGroups=e.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-tooltip-series-group\\\"));for(var a=i.allTooltipSeriesGroups,s=0;s<a.length;s++)\\\"enable\\\"===t?(a[s].classList.add(\\\"apexcharts-active\\\"),a[s].style.display=e.config.tooltip.items.display):(a[s].classList.remove(\\\"apexcharts-active\\\"),a[s].style.display=\\\"none\\\")}}]),t}(),gt=function(){function t(e){a(this,t),this.w=e.w,this.ctx=e.ctx,this.ttCtx=e,this.tooltipUtil=new dt(e)}return r(t,[{key:\\\"drawSeriesTexts\\\",value:function(t){var e=t.shared,i=void 0===e||e,a=t.ttItems,s=t.i,r=void 0===s?0:s,o=t.j,n=void 0===o?null:o,l=t.y1,h=t.y2,c=t.e,d=this.w;void 0!==d.config.tooltip.custom?this.handleCustomTooltip({i:r,j:n,y1:l,y2:h,w:d}):this.toggleActiveInactiveSeries(i);var g=this.getValuesToPrint({i:r,j:n});this.printLabels({i:r,j:n,values:g,ttItems:a,shared:i,e:c});var u=this.ttCtx.getElTooltip();this.ttCtx.tooltipRect.ttWidth=u.getBoundingClientRect().width,this.ttCtx.tooltipRect.ttHeight=u.getBoundingClientRect().height}},{key:\\\"printLabels\\\",value:function(t){var i,a=this,s=t.i,r=t.j,o=t.values,n=t.ttItems,l=t.shared,h=t.e,c=this.w,d=[],g=function(t){return c.globals.seriesGoals[t]&&c.globals.seriesGoals[t][r]&&Array.isArray(c.globals.seriesGoals[t][r])},u=o.xVal,p=o.zVal,f=o.xAxisTTVal,x=\\\"\\\",b=c.globals.colors[s];null!==r&&c.config.plotOptions.bar.distributed&&(b=c.globals.colors[r]);for(var v=function(t,o){var v=a.getFormatters(s);x=a.getSeriesName({fn:v.yLbTitleFormatter,index:s,seriesIndex:s,j:r}),\\\"treemap\\\"===c.config.chart.type&&(x=v.yLbTitleFormatter(String(c.config.series[s].data[r].x),{series:c.globals.series,seriesIndex:s,dataPointIndex:r,w:c}));var m=c.config.tooltip.inverseOrder?o:t;if(c.globals.axisCharts){var y=function(t){return v.yLbFormatter(c.globals.series[t][r],{series:c.globals.series,seriesIndex:t,dataPointIndex:r,w:c})};l?(v=a.getFormatters(m),x=a.getSeriesName({fn:v.yLbTitleFormatter,index:m,seriesIndex:s,j:r}),b=c.globals.colors[m],i=y(m),g(m)&&(d=c.globals.seriesGoals[m][r].map((function(t){return{attrs:t,val:v.yLbFormatter(t.value,{seriesIndex:m,dataPointIndex:r,w:c})}})))):(h&&h.target&&h.target.getAttribute(\\\"fill\\\")&&(b=h.target.getAttribute(\\\"fill\\\")),i=y(s),g(s)&&Array.isArray(c.globals.seriesGoals[s][r])&&(d=c.globals.seriesGoals[s][r].map((function(t){return{attrs:t,val:v.yLbFormatter(t.value,{seriesIndex:s,dataPointIndex:r,w:c})}}))))}null===r&&(i=v.yLbFormatter(c.globals.series[s],e(e({},c),{},{seriesIndex:s,dataPointIndex:s}))),a.DOMHandling({i:s,t:m,j:r,ttItems:n,values:{val:i,goalVals:d,xVal:u,xAxisTTVal:f,zVal:p},seriesName:x,shared:l,pColor:b})},m=0,y=c.globals.series.length-1;m<c.globals.series.length;m++,y--)v(m,y)}},{key:\\\"getFormatters\\\",value:function(t){var e,i=this.w,a=i.globals.yLabelFormatters[t];return void 0!==i.globals.ttVal?Array.isArray(i.globals.ttVal)?(a=i.globals.ttVal[t]&&i.globals.ttVal[t].formatter,e=i.globals.ttVal[t]&&i.globals.ttVal[t].title&&i.globals.ttVal[t].title.formatter):(a=i.globals.ttVal.formatter,\\\"function\\\"==typeof i.globals.ttVal.title.formatter&&(e=i.globals.ttVal.title.formatter)):e=i.config.tooltip.y.title.formatter,\\\"function\\\"!=typeof a&&(a=i.globals.yLabelFormatters[0]?i.globals.yLabelFormatters[0]:function(t){return t}),\\\"function\\\"!=typeof e&&(e=function(t){return t}),{yLbFormatter:a,yLbTitleFormatter:e}}},{key:\\\"getSeriesName\\\",value:function(t){var e=t.fn,i=t.index,a=t.seriesIndex,s=t.j,r=this.w;return e(String(r.globals.seriesNames[i]),{series:r.globals.series,seriesIndex:a,dataPointIndex:s,w:r})}},{key:\\\"DOMHandling\\\",value:function(t){t.i;var e=t.t,i=t.j,a=t.ttItems,s=t.values,r=t.seriesName,o=t.shared,n=t.pColor,l=this.w,h=this.ttCtx,c=s.val,d=s.goalVals,g=s.xVal,u=s.xAxisTTVal,p=s.zVal,f=null;f=a[e].children,l.config.tooltip.fillSeriesColor&&(a[e].style.backgroundColor=n,f[0].style.display=\\\"none\\\"),h.showTooltipTitle&&(null===h.tooltipTitle&&(h.tooltipTitle=l.globals.dom.baseEl.querySelector(\\\".apexcharts-tooltip-title\\\")),h.tooltipTitle.innerHTML=g),h.blxaxisTooltip&&(h.xaxisTooltipText.innerHTML=\\\"\\\"!==u?u:g);var x=a[e].querySelector(\\\".apexcharts-tooltip-text-y-label\\\");x&&(x.innerHTML=r||\\\"\\\");var b=a[e].querySelector(\\\".apexcharts-tooltip-text-y-value\\\");b&&(b.innerHTML=void 0!==c?c:\\\"\\\"),f[0]&&f[0].classList.contains(\\\"apexcharts-tooltip-marker\\\")&&(l.config.tooltip.marker.fillColors&&Array.isArray(l.config.tooltip.marker.fillColors)&&(n=l.config.tooltip.marker.fillColors[e]),f[0].style.backgroundColor=n),l.config.tooltip.marker.show||(f[0].style.display=\\\"none\\\");var v=a[e].querySelector(\\\".apexcharts-tooltip-text-goals-label\\\"),m=a[e].querySelector(\\\".apexcharts-tooltip-text-goals-value\\\");if(d.length&&l.globals.seriesGoals[e]){var y=function(){var t=\\\"<div >\\\",e=\\\"<div>\\\";d.forEach((function(i,a){t+=' <div style=\\\"display: flex\\\"><span class=\\\"apexcharts-tooltip-marker\\\" style=\\\"background-color: '.concat(i.attrs.strokeColor,'; height: 3px; border-radius: 0; top: 5px;\\\"></span> ').concat(i.attrs.name,\\\"</div>\\\"),e+=\\\"<div>\\\".concat(i.val,\\\"</div>\\\")})),v.innerHTML=t+\\\"</div>\\\",m.innerHTML=e+\\\"</div>\\\"};o?l.globals.seriesGoals[e][i]&&Array.isArray(l.globals.seriesGoals[e][i])?y():(v.innerHTML=\\\"\\\",m.innerHTML=\\\"\\\"):y()}else v.innerHTML=\\\"\\\",m.innerHTML=\\\"\\\";null!==p&&(a[e].querySelector(\\\".apexcharts-tooltip-text-z-label\\\").innerHTML=l.config.tooltip.z.title,a[e].querySelector(\\\".apexcharts-tooltip-text-z-value\\\").innerHTML=void 0!==p?p:\\\"\\\");o&&f[0]&&(null==c||l.globals.collapsedSeriesIndices.indexOf(e)>-1?f[0].parentNode.style.display=\\\"none\\\":f[0].parentNode.style.display=l.config.tooltip.items.display)}},{key:\\\"toggleActiveInactiveSeries\\\",value:function(t){var e=this.w;if(t)this.tooltipUtil.toggleAllTooltipSeriesGroups(\\\"enable\\\");else{this.tooltipUtil.toggleAllTooltipSeriesGroups(\\\"disable\\\");var i=e.globals.dom.baseEl.querySelector(\\\".apexcharts-tooltip-series-group\\\");i&&(i.classList.add(\\\"apexcharts-active\\\"),i.style.display=e.config.tooltip.items.display)}}},{key:\\\"getValuesToPrint\\\",value:function(t){var e=t.i,i=t.j,a=this.w,s=this.ctx.series.filteredSeriesX(),r=\\\"\\\",o=\\\"\\\",n=null,l=null,h={series:a.globals.series,seriesIndex:e,dataPointIndex:i,w:a},c=a.globals.ttZFormatter;null===i?l=a.globals.series[e]:a.globals.isXNumeric&&\\\"treemap\\\"!==a.config.chart.type?(r=s[e][i],0===s[e].length&&(r=s[this.tooltipUtil.getFirstActiveXArray(s)][i])):r=void 0!==a.globals.labels[i]?a.globals.labels[i]:\\\"\\\";var d=r;a.globals.isXNumeric&&\\\"datetime\\\"===a.config.xaxis.type?r=new W(this.ctx).xLabelFormat(a.globals.ttKeyFormatter,d,d,{i:void 0,dateFormatter:new Y(this.ctx).formatDate,w:this.w}):r=a.globals.isBarHorizontal?a.globals.yLabelFormatters[0](d,h):a.globals.xLabelFormatter(d,h);return void 0!==a.config.tooltip.x.formatter&&(r=a.globals.ttKeyFormatter(d,h)),a.globals.seriesZ.length>0&&a.globals.seriesZ[e].length>0&&(n=c(a.globals.seriesZ[e][i],a)),o=\\\"function\\\"==typeof a.config.xaxis.tooltip.formatter?a.globals.xaxisTooltipFormatter(d,h):r,{val:Array.isArray(l)?l.join(\\\" \\\"):l,xVal:Array.isArray(r)?r.join(\\\" \\\"):r,xAxisTTVal:Array.isArray(o)?o.join(\\\" \\\"):o,zVal:n}}},{key:\\\"handleCustomTooltip\\\",value:function(t){var e=t.i,i=t.j,a=t.y1,s=t.y2,r=t.w,o=this.ttCtx.getElTooltip(),n=r.config.tooltip.custom;Array.isArray(n)&&n[e]&&(n=n[e]),o.innerHTML=n({ctx:this.ctx,series:r.globals.series,seriesIndex:e,dataPointIndex:i,y1:a,y2:s,w:r})}}]),t}(),ut=function(){function t(e){a(this,t),this.ttCtx=e,this.ctx=e.ctx,this.w=e.w}return r(t,[{key:\\\"moveXCrosshairs\\\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.ttCtx,a=this.w,s=i.getElXCrosshairs(),r=t-i.xcrosshairsWidth/2,o=a.globals.labels.slice().length;if(null!==e&&(r=a.globals.gridWidth/o*e),null!==s&&(s.setAttribute(\\\"x\\\",r),s.setAttribute(\\\"x1\\\",r),s.setAttribute(\\\"x2\\\",r),s.setAttribute(\\\"y2\\\",a.globals.gridHeight),s.classList.add(\\\"apexcharts-active\\\")),r<0&&(r=0),r>a.globals.gridWidth&&(r=a.globals.gridWidth),i.blxaxisTooltip){var n=r;\\\"tickWidth\\\"!==a.config.xaxis.crosshairs.width&&\\\"barWidth\\\"!==a.config.xaxis.crosshairs.width||(n=r+i.xcrosshairsWidth/2),this.moveXAxisTooltip(n)}}},{key:\\\"moveYCrosshairs\\\",value:function(t){var e=this.ttCtx;null!==e.ycrosshairs&&b.setAttrs(e.ycrosshairs,{y1:t,y2:t}),null!==e.ycrosshairsHidden&&b.setAttrs(e.ycrosshairsHidden,{y1:t,y2:t})}},{key:\\\"moveXAxisTooltip\\\",value:function(t){var e=this.w,i=this.ttCtx;if(null!==i.xaxisTooltip){i.xaxisTooltip.classList.add(\\\"apexcharts-active\\\");var a=i.xaxisOffY+e.config.xaxis.tooltip.offsetY+e.globals.translateY+1+e.config.xaxis.offsetY;if(t-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(t)){t+=e.globals.translateX;var s;s=new b(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=s.width+\\\"px\\\",i.xaxisTooltip.style.left=t+\\\"px\\\",i.xaxisTooltip.style.top=a+\\\"px\\\"}}}},{key:\\\"moveYAxisTooltip\\\",value:function(t){var e=this.w,i=this.ttCtx;null===i.yaxisTTEls&&(i.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-yaxistooltip\\\"));var a=parseInt(i.ycrosshairsHidden.getAttribute(\\\"y1\\\"),10),s=e.globals.translateY+a,r=i.yaxisTTEls[t].getBoundingClientRect().height,o=e.globals.translateYAxisX[t]-2;e.config.yaxis[t].opposite&&(o-=26),s-=r/2,-1===e.globals.ignoreYAxisIndexes.indexOf(t)?(i.yaxisTTEls[t].classList.add(\\\"apexcharts-active\\\"),i.yaxisTTEls[t].style.top=s+\\\"px\\\",i.yaxisTTEls[t].style.left=o+e.config.yaxis[t].tooltip.offsetX+\\\"px\\\"):i.yaxisTTEls[t].classList.remove(\\\"apexcharts-active\\\")}},{key:\\\"moveTooltip\\\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,s=this.ttCtx,r=s.getElTooltip(),o=s.tooltipRect,n=null!==i?parseFloat(i):1,l=parseFloat(t)+n+5,h=parseFloat(e)+n/2;if(l>a.globals.gridWidth/2&&(l=l-o.ttWidth-n-15),l>a.globals.gridWidth-o.ttWidth-10&&(l=a.globals.gridWidth-o.ttWidth),l<-20&&(l=-20),a.config.tooltip.followCursor){var c=s.getElGrid(),d=c.getBoundingClientRect();h=s.e.clientY+a.globals.translateY-d.top-o.ttHeight/2}else a.globals.isBarHorizontal?h-=o.ttHeight:(o.ttHeight/2+h>a.globals.gridHeight&&(h=a.globals.gridHeight-o.ttHeight+a.globals.translateY),h<0&&(h=0));isNaN(l)||(l+=a.globals.translateX,r.style.left=l+\\\"px\\\",r.style.top=h+\\\"px\\\")}},{key:\\\"moveMarkers\\\",value:function(t,e){var i=this.w,a=this.ttCtx;if(i.globals.markers.size[t]>0)for(var s=i.globals.dom.baseEl.querySelectorAll(\\\" .apexcharts-series[data\\\\\\\\:realIndex='\\\".concat(t,\\\"'] .apexcharts-marker\\\")),r=0;r<s.length;r++)parseInt(s[r].getAttribute(\\\"rel\\\"),10)===e&&(a.marker.resetPointsSize(),a.marker.enlargeCurrentPoint(e,s[r]));else a.marker.resetPointsSize(),this.moveDynamicPointOnHover(e,t)}},{key:\\\"moveDynamicPointOnHover\\\",value:function(t,e){var i,a,s=this.w,r=this.ttCtx,o=s.globals.pointsArray,n=r.tooltipUtil.getHoverMarkerSize(e),l=s.config.series[e].type;if(!l||\\\"column\\\"!==l&&\\\"candlestick\\\"!==l&&\\\"boxPlot\\\"!==l){i=o[e][t][0],a=o[e][t][1]?o[e][t][1]:0;var h=s.globals.dom.baseEl.querySelector(\\\".apexcharts-series[data\\\\\\\\:realIndex='\\\".concat(e,\\\"'] .apexcharts-series-markers circle\\\"));h&&a<s.globals.gridHeight&&a>0&&(h.setAttribute(\\\"r\\\",n),h.setAttribute(\\\"cx\\\",i),h.setAttribute(\\\"cy\\\",a)),this.moveXCrosshairs(i),r.fixedTooltip||this.moveTooltip(i,a,n)}}},{key:\\\"moveDynamicPointsOnHover\\\",value:function(t){var e,i=this.ttCtx,a=i.w,s=0,r=0,o=a.globals.pointsArray;e=new z(this.ctx).getActiveConfigSeriesIndex(!0);var n=i.tooltipUtil.getHoverMarkerSize(e);o[e]&&(s=o[e][t][0],r=o[e][t][1]);var l=i.tooltipUtil.getAllMarkers();if(null!==l)for(var h=0;h<a.globals.series.length;h++){var c=o[h];if(a.globals.comboCharts&&void 0===c&&l.splice(h,0,null),c&&c.length){var d=o[h][t][1];l[h].setAttribute(\\\"cx\\\",s),null!==d&&!isNaN(d)&&d<a.globals.gridHeight&&d>0?(l[h]&&l[h].setAttribute(\\\"r\\\",n),l[h]&&l[h].setAttribute(\\\"cy\\\",d)):l[h]&&l[h].setAttribute(\\\"r\\\",0)}}if(this.moveXCrosshairs(s),!i.fixedTooltip){var g=r||a.globals.gridHeight;this.moveTooltip(s,g,n)}}},{key:\\\"moveStickyTooltipOverBars\\\",value:function(t){var e=this.w,i=this.ttCtx,a=e.globals.columnSeries?e.globals.columnSeries.length:e.globals.series.length,s=a>=2&&a%2==0?Math.floor(a/2):Math.floor(a/2)+1;e.globals.isBarHorizontal&&(s=new z(this.ctx).getActiveConfigSeriesIndex(!1,\\\"desc\\\")+1);var r=e.globals.dom.baseEl.querySelector(\\\".apexcharts-bar-series .apexcharts-series[rel='\\\".concat(s,\\\"'] path[j='\\\").concat(t,\\\"'], .apexcharts-candlestick-series .apexcharts-series[rel='\\\").concat(s,\\\"'] path[j='\\\").concat(t,\\\"'], .apexcharts-boxPlot-series .apexcharts-series[rel='\\\").concat(s,\\\"'] path[j='\\\").concat(t,\\\"'], .apexcharts-rangebar-series .apexcharts-series[rel='\\\").concat(s,\\\"'] path[j='\\\").concat(t,\\\"']\\\")),o=r?parseFloat(r.getAttribute(\\\"cx\\\")):0,n=r?parseFloat(r.getAttribute(\\\"cy\\\")):0,l=r?parseFloat(r.getAttribute(\\\"barWidth\\\")):0,h=r?parseFloat(r.getAttribute(\\\"barHeight\\\")):0,c=i.getElGrid().getBoundingClientRect();if(e.globals.isXNumeric?(o-=a%2!=0?l/2:0,r&&(r.classList.contains(\\\"apexcharts-candlestick-area\\\")||r.classList.contains(\\\"apexcharts-boxPlot-area\\\"))&&e.globals.comboCharts&&(o-=l/2)):e.globals.isBarHorizontal||(o=i.xAxisTicksPositions[t-1]+i.dataPointsDividedWidth/2,isNaN(o)&&(o=i.xAxisTicksPositions[t]-i.dataPointsDividedWidth/2)),e.globals.isBarHorizontal?n+=h/3:n=i.e.clientY-c.top-i.tooltipRect.ttHeight/2,e.globals.isBarHorizontal||this.moveXCrosshairs(o),!i.fixedTooltip){var d=n||e.globals.gridHeight;this.moveTooltip(o,d)}}}]),t}(),pt=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx,this.tooltipPosition=new ut(e)}return r(t,[{key:\\\"drawDynamicPoints\\\",value:function(){var t=this.w,e=new b(this.ctx),i=new P(this.ctx),a=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-series\\\");a=g(a),t.config.chart.stacked&&a.sort((function(t,e){return parseFloat(t.getAttribute(\\\"data:realIndex\\\"))-parseFloat(e.getAttribute(\\\"data:realIndex\\\"))}));for(var s=0;s<a.length;s++){var r=a[s].querySelector(\\\".apexcharts-series-markers-wrap\\\");if(null!==r){var o=void 0,n=\\\"apexcharts-marker w\\\".concat((Math.random()+1).toString(36).substring(4));\\\"line\\\"!==t.config.chart.type&&\\\"area\\\"!==t.config.chart.type||t.globals.comboCharts||t.config.tooltip.intersect||(n+=\\\" no-pointer-events\\\");var l=i.getMarkerConfig({cssClass:n,seriesIndex:s});(o=e.drawMarker(0,0,l)).node.setAttribute(\\\"default-marker-size\\\",0);var h=document.createElementNS(t.globals.SVGNS,\\\"g\\\");h.classList.add(\\\"apexcharts-series-markers\\\"),h.appendChild(o.node),r.appendChild(h)}}}},{key:\\\"enlargeCurrentPoint\\\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.w;\\\"bubble\\\"!==s.config.chart.type&&this.newPointSize(t,e);var r=e.getAttribute(\\\"cx\\\"),o=e.getAttribute(\\\"cy\\\");if(null!==i&&null!==a&&(r=i,o=a),this.tooltipPosition.moveXCrosshairs(r),!this.fixedTooltip){if(\\\"radar\\\"===s.config.chart.type){var n=this.ttCtx.getElGrid(),l=n.getBoundingClientRect();r=this.ttCtx.e.clientX-l.left}this.tooltipPosition.moveTooltip(r,o,s.config.markers.hover.size)}}},{key:\\\"enlargePoints\\\",value:function(t){for(var e=this.w,i=this,a=this.ttCtx,s=t,r=e.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\\\"),o=e.config.markers.hover.size,n=0;n<r.length;n++){var l=r[n].getAttribute(\\\"rel\\\"),h=r[n].getAttribute(\\\"index\\\");if(void 0===o&&(o=e.globals.markers.size[h]+e.config.markers.hover.sizeOffset),s===parseInt(l,10)){i.newPointSize(s,r[n]);var c=r[n].getAttribute(\\\"cx\\\"),d=r[n].getAttribute(\\\"cy\\\");i.tooltipPosition.moveXCrosshairs(c),a.fixedTooltip||i.tooltipPosition.moveTooltip(c,d,o)}else i.oldPointSize(r[n])}}},{key:\\\"newPointSize\\\",value:function(t,e){var i=this.w,a=i.config.markers.hover.size,s=0===t?e.parentNode.firstChild:e.parentNode.lastChild;if(\\\"0\\\"!==s.getAttribute(\\\"default-marker-size\\\")){var r=parseInt(s.getAttribute(\\\"index\\\"),10);void 0===a&&(a=i.globals.markers.size[r]+i.config.markers.hover.sizeOffset),a<0&&(a=0),s.setAttribute(\\\"r\\\",a)}}},{key:\\\"oldPointSize\\\",value:function(t){var e=parseFloat(t.getAttribute(\\\"default-marker-size\\\"));t.setAttribute(\\\"r\\\",e)}},{key:\\\"resetPointsSize\\\",value:function(){for(var t=this.w.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\\\"),e=0;e<t.length;e++){var i=parseFloat(t[e].getAttribute(\\\"default-marker-size\\\"));p.isNumber(i)&&i>=0?t[e].setAttribute(\\\"r\\\",i):t[e].setAttribute(\\\"r\\\",0)}}}]),t}(),ft=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e}return r(t,[{key:\\\"getAttr\\\",value:function(t,e){return parseFloat(t.target.getAttribute(e))}},{key:\\\"handleHeatTreeTooltip\\\",value:function(t){var e=t.e,i=t.opt,a=t.x,s=t.y,r=t.type,o=this.ttCtx,n=this.w;if(e.target.classList.contains(\\\"apexcharts-\\\".concat(r,\\\"-rect\\\"))){var l=this.getAttr(e,\\\"i\\\"),h=this.getAttr(e,\\\"j\\\"),c=this.getAttr(e,\\\"cx\\\"),d=this.getAttr(e,\\\"cy\\\"),g=this.getAttr(e,\\\"width\\\"),u=this.getAttr(e,\\\"height\\\");if(o.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:l,j:h,shared:!1,e:e}),n.globals.capturedSeriesIndex=l,n.globals.capturedDataPointIndex=h,a=c+o.tooltipRect.ttWidth/2+g,s=d+o.tooltipRect.ttHeight/2-u/2,o.tooltipPosition.moveXCrosshairs(c+g/2),a>n.globals.gridWidth/2&&(a=c-o.tooltipRect.ttWidth/2+g),o.w.config.tooltip.followCursor){var p=n.globals.dom.elWrap.getBoundingClientRect();a=n.globals.clientX-p.left-o.tooltipRect.ttWidth/2,s=n.globals.clientY-p.top-o.tooltipRect.ttHeight-5}}return{x:a,y:s}}},{key:\\\"handleMarkerTooltip\\\",value:function(t){var e,i,a=t.e,s=t.opt,r=t.x,o=t.y,n=this.w,l=this.ttCtx;if(a.target.classList.contains(\\\"apexcharts-marker\\\")){var h=parseInt(s.paths.getAttribute(\\\"cx\\\"),10),c=parseInt(s.paths.getAttribute(\\\"cy\\\"),10),d=parseFloat(s.paths.getAttribute(\\\"val\\\"));if(i=parseInt(s.paths.getAttribute(\\\"rel\\\"),10),e=parseInt(s.paths.parentNode.parentNode.parentNode.getAttribute(\\\"rel\\\"),10)-1,l.intersect){var g=p.findAncestor(s.paths,\\\"apexcharts-series\\\");g&&(e=parseInt(g.getAttribute(\\\"data:realIndex\\\"),10))}if(l.tooltipLabels.drawSeriesTexts({ttItems:s.ttItems,i:e,j:i,shared:!l.showOnIntersect&&n.config.tooltip.shared,e:a}),\\\"mouseup\\\"===a.type&&l.markerClick(a,e,i),n.globals.capturedSeriesIndex=e,n.globals.capturedDataPointIndex=i,r=h,o=c+n.globals.translateY-1.4*l.tooltipRect.ttHeight,l.w.config.tooltip.followCursor){var u=l.getElGrid().getBoundingClientRect();o=l.e.clientY+n.globals.translateY-u.top}d<0&&(o=c),l.marker.enlargeCurrentPoint(i,s.paths,r,o)}return{x:r,y:o}}},{key:\\\"handleBarTooltip\\\",value:function(t){var e,i,a=t.e,s=t.opt,r=this.w,o=this.ttCtx,n=o.getElTooltip(),l=0,h=0,c=0,d=this.getBarTooltipXY({e:a,opt:s});e=d.i;var g=d.barHeight,u=d.j;r.globals.capturedSeriesIndex=e,r.globals.capturedDataPointIndex=u,r.globals.isBarHorizontal&&o.tooltipUtil.hasBars()||!r.config.tooltip.shared?(h=d.x,c=d.y,i=Array.isArray(r.config.stroke.width)?r.config.stroke.width[e]:r.config.stroke.width,l=h):r.globals.comboCharts||r.config.tooltip.shared||(l/=2),isNaN(c)?c=r.globals.svgHeight-o.tooltipRect.ttHeight:c<0&&(c=0);var p=parseInt(s.paths.parentNode.getAttribute(\\\"data:realIndex\\\"),10),f=r.globals.isMultipleYAxis?r.config.yaxis[p]&&r.config.yaxis[p].reversed:r.config.yaxis[0].reversed;if(h+o.tooltipRect.ttWidth>r.globals.gridWidth&&!f?h-=o.tooltipRect.ttWidth:h<0&&(h=0),o.w.config.tooltip.followCursor){var x=o.getElGrid().getBoundingClientRect();c=o.e.clientY-x.top}null===o.tooltip&&(o.tooltip=r.globals.dom.baseEl.querySelector(\\\".apexcharts-tooltip\\\")),r.config.tooltip.shared||(r.globals.comboBarCount>0?o.tooltipPosition.moveXCrosshairs(l+i/2):o.tooltipPosition.moveXCrosshairs(l)),!o.fixedTooltip&&(!r.config.tooltip.shared||r.globals.isBarHorizontal&&o.tooltipUtil.hasBars())&&(f&&(h-=o.tooltipRect.ttWidth)<0&&(h=0),n.style.left=h+r.globals.translateX+\\\"px\\\",!f||r.globals.isBarHorizontal&&o.tooltipUtil.hasBars()||(c=c+g-2*(r.globals.series[e][u]<0?g:0)),o.tooltipRect.ttHeight+c>r.globals.gridHeight?(c=r.globals.gridHeight-o.tooltipRect.ttHeight+r.globals.translateY,n.style.top=c+\\\"px\\\"):n.style.top=c+r.globals.translateY-o.tooltipRect.ttHeight/2+\\\"px\\\")}},{key:\\\"getBarTooltipXY\\\",value:function(t){var e=t.e,i=t.opt,a=this.w,s=null,r=this.ttCtx,o=0,n=0,l=0,h=0,c=0,d=e.target.classList;if(d.contains(\\\"apexcharts-bar-area\\\")||d.contains(\\\"apexcharts-candlestick-area\\\")||d.contains(\\\"apexcharts-boxPlot-area\\\")||d.contains(\\\"apexcharts-rangebar-area\\\")){var g=e.target,u=g.getBoundingClientRect(),p=i.elGrid.getBoundingClientRect(),f=u.height;c=u.height;var x=u.width,b=parseInt(g.getAttribute(\\\"cx\\\"),10),v=parseInt(g.getAttribute(\\\"cy\\\"),10);h=parseFloat(g.getAttribute(\\\"barWidth\\\"));var m=\\\"touchmove\\\"===e.type?e.touches[0].clientX:e.clientX;s=parseInt(g.getAttribute(\\\"j\\\"),10),o=parseInt(g.parentNode.getAttribute(\\\"rel\\\"),10)-1;var y=g.getAttribute(\\\"data-range-y1\\\"),w=g.getAttribute(\\\"data-range-y2\\\");a.globals.comboCharts&&(o=parseInt(g.parentNode.getAttribute(\\\"data:realIndex\\\"),10)),r.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:o,j:s,y1:y?parseInt(y,10):null,y2:w?parseInt(w,10):null,shared:!r.showOnIntersect&&a.config.tooltip.shared,e:e}),a.config.tooltip.followCursor?a.globals.isBarHorizontal?(n=m-p.left+15,l=v-r.dataPointsDividedHeight+f/2-r.tooltipRect.ttHeight/2):(n=a.globals.isXNumeric?b-x/2:b-r.dataPointsDividedWidth+x/2,l=e.clientY-p.top-r.tooltipRect.ttHeight/2-15):a.globals.isBarHorizontal?((n=b)<r.xyRatios.baseLineInvertedY&&(n=b-r.tooltipRect.ttWidth),l=v-r.dataPointsDividedHeight+f/2-r.tooltipRect.ttHeight/2):(n=a.globals.isXNumeric?b-x/2:b-r.dataPointsDividedWidth+x/2,l=v)}return{x:n,y:l,barHeight:c,barWidth:h,i:o,j:s}}}]),t}(),xt=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e}return r(t,[{key:\\\"drawXaxisTooltip\\\",value:function(){var t=this.w,e=this.ttCtx,i=\\\"bottom\\\"===t.config.xaxis.position;e.xaxisOffY=i?t.globals.gridHeight+1:-t.globals.xAxisHeight-t.config.xaxis.axisTicks.height+3;var a=i?\\\"apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom\\\":\\\"apexcharts-xaxistooltip apexcharts-xaxistooltip-top\\\",s=t.globals.dom.elWrap;e.blxaxisTooltip&&(null===t.globals.dom.baseEl.querySelector(\\\".apexcharts-xaxistooltip\\\")&&(e.xaxisTooltip=document.createElement(\\\"div\\\"),e.xaxisTooltip.setAttribute(\\\"class\\\",a+\\\" apexcharts-theme-\\\"+t.config.tooltip.theme),s.appendChild(e.xaxisTooltip),e.xaxisTooltipText=document.createElement(\\\"div\\\"),e.xaxisTooltipText.classList.add(\\\"apexcharts-xaxistooltip-text\\\"),e.xaxisTooltipText.style.fontFamily=t.config.xaxis.tooltip.style.fontFamily||t.config.chart.fontFamily,e.xaxisTooltipText.style.fontSize=t.config.xaxis.tooltip.style.fontSize,e.xaxisTooltip.appendChild(e.xaxisTooltipText)))}},{key:\\\"drawYaxisTooltip\\\",value:function(){for(var t=this.w,e=this.ttCtx,i=function(i){var a=t.config.yaxis[i].opposite||t.config.yaxis[i].crosshairs.opposite;e.yaxisOffX=a?t.globals.gridWidth+1:1;var s=\\\"apexcharts-yaxistooltip apexcharts-yaxistooltip-\\\".concat(i,a?\\\" apexcharts-yaxistooltip-right\\\":\\\" apexcharts-yaxistooltip-left\\\");t.globals.yAxisSameScaleIndices.map((function(e,a){e.map((function(e,a){a===i&&(s+=t.config.yaxis[a].show?\\\" \\\":\\\" apexcharts-yaxistooltip-hidden\\\")}))}));var r=t.globals.dom.elWrap;null===t.globals.dom.baseEl.querySelector(\\\".apexcharts-yaxistooltip apexcharts-yaxistooltip-\\\".concat(i))&&(e.yaxisTooltip=document.createElement(\\\"div\\\"),e.yaxisTooltip.setAttribute(\\\"class\\\",s+\\\" apexcharts-theme-\\\"+t.config.tooltip.theme),r.appendChild(e.yaxisTooltip),0===i&&(e.yaxisTooltipText=[]),e.yaxisTooltipText[i]=document.createElement(\\\"div\\\"),e.yaxisTooltipText[i].classList.add(\\\"apexcharts-yaxistooltip-text\\\"),e.yaxisTooltip.appendChild(e.yaxisTooltipText[i]))},a=0;a<t.config.yaxis.length;a++)i(a)}},{key:\\\"setXCrosshairWidth\\\",value:function(){var t=this.w,e=this.ttCtx,i=e.getElXCrosshairs();if(e.xcrosshairsWidth=parseInt(t.config.xaxis.crosshairs.width,10),t.globals.comboCharts){var a=t.globals.dom.baseEl.querySelector(\\\".apexcharts-bar-area\\\");if(null!==a&&\\\"barWidth\\\"===t.config.xaxis.crosshairs.width){var s=parseFloat(a.getAttribute(\\\"barWidth\\\"));e.xcrosshairsWidth=s}else if(\\\"tickWidth\\\"===t.config.xaxis.crosshairs.width){var r=t.globals.labels.length;e.xcrosshairsWidth=t.globals.gridWidth/r}}else if(\\\"tickWidth\\\"===t.config.xaxis.crosshairs.width){var o=t.globals.labels.length;e.xcrosshairsWidth=t.globals.gridWidth/o}else if(\\\"barWidth\\\"===t.config.xaxis.crosshairs.width){var n=t.globals.dom.baseEl.querySelector(\\\".apexcharts-bar-area\\\");if(null!==n){var l=parseFloat(n.getAttribute(\\\"barWidth\\\"));e.xcrosshairsWidth=l}else e.xcrosshairsWidth=1}t.globals.isBarHorizontal&&(e.xcrosshairsWidth=0),null!==i&&e.xcrosshairsWidth>0&&i.setAttribute(\\\"width\\\",e.xcrosshairsWidth)}},{key:\\\"handleYCrosshair\\\",value:function(){var t=this.w,e=this.ttCtx;e.ycrosshairs=t.globals.dom.baseEl.querySelector(\\\".apexcharts-ycrosshairs\\\"),e.ycrosshairsHidden=t.globals.dom.baseEl.querySelector(\\\".apexcharts-ycrosshairs-hidden\\\")}},{key:\\\"drawYaxisTooltipText\\\",value:function(t,e,i){var a=this.ttCtx,s=this.w,r=s.globals.yLabelFormatters[t];if(a.yaxisTooltips[t]){var o=a.getElGrid().getBoundingClientRect(),n=(e-o.top)*i.yRatio[t],l=s.globals.maxYArr[t]-s.globals.minYArr[t],h=s.globals.minYArr[t]+(l-n);a.tooltipPosition.moveYCrosshairs(e-o.top),a.yaxisTooltipText[t].innerHTML=r(h),a.tooltipPosition.moveYAxisTooltip(t)}}}]),t}(),bt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.tConfig=i.config.tooltip,this.tooltipUtil=new dt(this),this.tooltipLabels=new gt(this),this.tooltipPosition=new ut(this),this.marker=new pt(this),this.intersect=new ft(this),this.axesTooltip=new xt(this),this.showOnIntersect=this.tConfig.intersect,this.showTooltipTitle=this.tConfig.x.show,this.fixedTooltip=this.tConfig.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarShared=!i.globals.isBarHorizontal&&this.tConfig.shared}return r(t,[{key:\\\"getElTooltip\\\",value:function(t){return t||(t=this),t.w.globals.dom.baseEl.querySelector(\\\".apexcharts-tooltip\\\")}},{key:\\\"getElXCrosshairs\\\",value:function(){return this.w.globals.dom.baseEl.querySelector(\\\".apexcharts-xcrosshairs\\\")}},{key:\\\"getElGrid\\\",value:function(){return this.w.globals.dom.baseEl.querySelector(\\\".apexcharts-grid\\\")}},{key:\\\"drawTooltip\\\",value:function(t){var e=this.w;this.xyRatios=t,this.blxaxisTooltip=e.config.xaxis.tooltip.enabled&&e.globals.axisCharts,this.yaxisTooltips=e.config.yaxis.map((function(t,i){return!!(t.show&&t.tooltip.enabled&&e.globals.axisCharts)})),this.allTooltipSeriesGroups=[],e.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement(\\\"div\\\");if(i.classList.add(\\\"apexcharts-tooltip\\\"),i.classList.add(\\\"apexcharts-theme-\\\".concat(this.tConfig.theme)),e.globals.dom.elWrap.appendChild(i),e.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var a=new G(this.ctx);this.xAxisTicksPositions=a.getXAxisTicksPositions()}if(!e.globals.comboCharts&&!this.tConfig.intersect&&\\\"rangeBar\\\"!==e.config.chart.type||this.tConfig.shared||(this.showOnIntersect=!0),0!==e.config.markers.size&&0!==e.globals.markers.largestSize||this.marker.drawDynamicPoints(this),e.globals.collapsedSeries.length!==e.globals.series.length){this.dataPointsDividedHeight=e.globals.gridHeight/e.globals.dataPoints,this.dataPointsDividedWidth=e.globals.gridWidth/e.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement(\\\"div\\\"),this.tooltipTitle.classList.add(\\\"apexcharts-tooltip-title\\\"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||e.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var s=e.globals.series.length;(e.globals.xyCharts||e.globals.comboCharts)&&this.tConfig.shared&&(s=this.showOnIntersect?1:e.globals.series.length),this.legendLabels=e.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-legend-text\\\"),this.ttItems=this.createTTElements(s),this.addSVGEvents()}}},{key:\\\"createTTElements\\\",value:function(t){for(var e=this,i=this.w,a=[],s=this.getElTooltip(),r=function(r){var o=document.createElement(\\\"div\\\");o.classList.add(\\\"apexcharts-tooltip-series-group\\\"),o.style.order=i.config.tooltip.inverseOrder?t-r:r+1,e.tConfig.shared&&e.tConfig.enabledOnSeries&&Array.isArray(e.tConfig.enabledOnSeries)&&e.tConfig.enabledOnSeries.indexOf(r)<0&&o.classList.add(\\\"apexcharts-tooltip-series-group-hidden\\\");var n=document.createElement(\\\"span\\\");n.classList.add(\\\"apexcharts-tooltip-marker\\\"),n.style.backgroundColor=i.globals.colors[r],o.appendChild(n);var l=document.createElement(\\\"div\\\");l.classList.add(\\\"apexcharts-tooltip-text\\\"),l.style.fontFamily=e.tConfig.style.fontFamily||i.config.chart.fontFamily,l.style.fontSize=e.tConfig.style.fontSize,[\\\"y\\\",\\\"goals\\\",\\\"z\\\"].forEach((function(t){var e=document.createElement(\\\"div\\\");e.classList.add(\\\"apexcharts-tooltip-\\\".concat(t,\\\"-group\\\"));var i=document.createElement(\\\"span\\\");i.classList.add(\\\"apexcharts-tooltip-text-\\\".concat(t,\\\"-label\\\")),e.appendChild(i);var a=document.createElement(\\\"span\\\");a.classList.add(\\\"apexcharts-tooltip-text-\\\".concat(t,\\\"-value\\\")),e.appendChild(a),l.appendChild(e)})),o.appendChild(l),s.appendChild(o),a.push(o)},o=0;o<t;o++)r(o);return a}},{key:\\\"addSVGEvents\\\",value:function(){var t=this.w,e=t.config.chart.type,i=this.getElTooltip(),a=!(\\\"bar\\\"!==e&&\\\"candlestick\\\"!==e&&\\\"boxPlot\\\"!==e&&\\\"rangeBar\\\"!==e),s=\\\"area\\\"===e||\\\"line\\\"===e||\\\"scatter\\\"===e||\\\"bubble\\\"===e||\\\"radar\\\"===e,r=t.globals.dom.Paper.node,o=this.getElGrid();o&&(this.seriesBound=o.getBoundingClientRect());var n,l=[],h=[],c={hoverArea:r,elGrid:o,tooltipEl:i,tooltipY:l,tooltipX:h,ttItems:this.ttItems};if(t.globals.axisCharts&&(s?n=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-series[data\\\\\\\\:longestSeries='true'] .apexcharts-marker\\\"):a?n=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-boxPlot-area, .apexcharts-series .apexcharts-rangebar-area\\\"):\\\"heatmap\\\"!==e&&\\\"treemap\\\"!==e||(n=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-series .apexcharts-heatmap, .apexcharts-series .apexcharts-treemap\\\")),n&&n.length))for(var d=0;d<n.length;d++)l.push(n[d].getAttribute(\\\"cy\\\")),h.push(n[d].getAttribute(\\\"cx\\\"));if(t.globals.xyCharts&&!this.showOnIntersect||t.globals.comboCharts&&!this.showOnIntersect||a&&this.tooltipUtil.hasBars()&&this.tConfig.shared)this.addPathsEventListeners([r],c);else if(a&&!t.globals.comboCharts||s&&this.showOnIntersect)this.addDatapointEventsListeners(c);else if(!t.globals.axisCharts||\\\"heatmap\\\"===e||\\\"treemap\\\"===e){var g=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-series\\\");this.addPathsEventListeners(g,c)}if(this.showOnIntersect){var u=t.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-line-series .apexcharts-marker, .apexcharts-area-series .apexcharts-marker\\\");u.length>0&&this.addPathsEventListeners(u,c),this.tooltipUtil.hasBars()&&!this.tConfig.shared&&this.addDatapointEventsListeners(c)}}},{key:\\\"drawFixedTooltipRect\\\",value:function(){var t=this.w,e=this.getElTooltip(),i=e.getBoundingClientRect(),a=i.width+10,s=i.height+10,r=this.tConfig.fixed.offsetX,o=this.tConfig.fixed.offsetY,n=this.tConfig.fixed.position.toLowerCase();return n.indexOf(\\\"right\\\")>-1&&(r=r+t.globals.svgWidth-a+10),n.indexOf(\\\"bottom\\\")>-1&&(o=o+t.globals.svgHeight-s-10),e.style.left=r+\\\"px\\\",e.style.top=o+\\\"px\\\",{x:r,y:o,ttWidth:a,ttHeight:s}}},{key:\\\"addDatapointEventsListeners\\\",value:function(t){var e=this.w.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area\\\");this.addPathsEventListeners(e,t)}},{key:\\\"addPathsEventListeners\\\",value:function(t,e){for(var i=this,a=function(a){var s={paths:t[a],tooltipEl:e.tooltipEl,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:e.ttItems};[\\\"mousemove\\\",\\\"mouseup\\\",\\\"touchmove\\\",\\\"mouseout\\\",\\\"touchend\\\"].map((function(e){return t[a].addEventListener(e,i.seriesHover.bind(i,s),{capture:!1,passive:!0})}))},s=0;s<t.length;s++)a(s)}},{key:\\\"seriesHover\\\",value:function(t,e){var i=this,a=[],s=this.w;s.config.chart.group&&(a=this.ctx.getGroupedCharts()),s.globals.axisCharts&&(s.globals.minX===-1/0&&s.globals.maxX===1/0||0===s.globals.dataPoints)||(a.length?a.forEach((function(a){var s=i.getElTooltip(a),r={paths:t.paths,tooltipEl:s,tooltipY:t.tooltipY,tooltipX:t.tooltipX,elGrid:t.elGrid,hoverArea:t.hoverArea,ttItems:a.w.globals.tooltip.ttItems};a.w.globals.minX===i.w.globals.minX&&a.w.globals.maxX===i.w.globals.maxX&&a.w.globals.tooltip.seriesHoverByContext({chartCtx:a,ttCtx:a.w.globals.tooltip,opt:r,e:e})})):this.seriesHoverByContext({chartCtx:this.ctx,ttCtx:this.w.globals.tooltip,opt:t,e:e}))}},{key:\\\"seriesHoverByContext\\\",value:function(t){var e=t.chartCtx,i=t.ttCtx,a=t.opt,s=t.e,r=e.w,o=this.getElTooltip();(i.tooltipRect={x:0,y:0,ttWidth:o.getBoundingClientRect().width,ttHeight:o.getBoundingClientRect().height},i.e=s,!i.tooltipUtil.hasBars()||r.globals.comboCharts||i.isBarShared)||this.tConfig.onDatasetHover.highlightDataSeries&&new z(e).toggleSeriesOnHover(s,s.target.parentNode);i.fixedTooltip&&i.drawFixedTooltipRect(),r.globals.axisCharts?i.axisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect}):i.nonAxisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect})}},{key:\\\"axisChartsTooltips\\\",value:function(t){var e,i,a=t.e,s=t.opt,r=this.w,o=s.elGrid.getBoundingClientRect(),n=\\\"touchmove\\\"===a.type?a.touches[0].clientX:a.clientX,l=\\\"touchmove\\\"===a.type?a.touches[0].clientY:a.clientY;if(this.clientY=l,this.clientX=n,r.globals.capturedSeriesIndex=-1,r.globals.capturedDataPointIndex=-1,l<o.top||l>o.top+o.height)this.handleMouseOut(s);else{if(Array.isArray(this.tConfig.enabledOnSeries)&&!r.config.tooltip.shared){var h=parseInt(s.paths.getAttribute(\\\"index\\\"),10);if(this.tConfig.enabledOnSeries.indexOf(h)<0)return void this.handleMouseOut(s)}var c=this.getElTooltip(),d=this.getElXCrosshairs(),g=r.globals.xyCharts||\\\"bar\\\"===r.config.chart.type&&!r.globals.isBarHorizontal&&this.tooltipUtil.hasBars()&&this.tConfig.shared||r.globals.comboCharts&&this.tooltipUtil.hasBars();if(\\\"mousemove\\\"===a.type||\\\"touchmove\\\"===a.type||\\\"mouseup\\\"===a.type){null!==d&&d.classList.add(\\\"apexcharts-active\\\");var u=this.yaxisTooltips.filter((function(t){return!0===t}));if(null!==this.ycrosshairs&&u.length&&this.ycrosshairs.classList.add(\\\"apexcharts-active\\\"),g&&!this.showOnIntersect)this.handleStickyTooltip(a,n,l,s);else if(\\\"heatmap\\\"===r.config.chart.type||\\\"treemap\\\"===r.config.chart.type){var p=this.intersect.handleHeatTreeTooltip({e:a,opt:s,x:e,y:i,type:r.config.chart.type});e=p.x,i=p.y,c.style.left=e+\\\"px\\\",c.style.top=i+\\\"px\\\"}else this.tooltipUtil.hasBars()&&this.intersect.handleBarTooltip({e:a,opt:s}),this.tooltipUtil.hasMarkers()&&this.intersect.handleMarkerTooltip({e:a,opt:s,x:e,y:i});if(this.yaxisTooltips.length)for(var f=0;f<r.config.yaxis.length;f++)this.axesTooltip.drawYaxisTooltipText(f,l,this.xyRatios);s.tooltipEl.classList.add(\\\"apexcharts-active\\\")}else\\\"mouseout\\\"!==a.type&&\\\"touchend\\\"!==a.type||this.handleMouseOut(s)}}},{key:\\\"nonAxisChartsTooltips\\\",value:function(t){var e=t.e,i=t.opt,a=t.tooltipRect,s=this.w,r=i.paths.getAttribute(\\\"rel\\\"),o=this.getElTooltip(),n=s.globals.dom.elWrap.getBoundingClientRect();if(\\\"mousemove\\\"===e.type||\\\"touchmove\\\"===e.type){o.classList.add(\\\"apexcharts-active\\\"),this.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:parseInt(r,10)-1,shared:!1});var l=s.globals.clientX-n.left-a.ttWidth/2,h=s.globals.clientY-n.top-a.ttHeight-10;if(o.style.left=l+\\\"px\\\",o.style.top=h+\\\"px\\\",s.config.legend.tooltipHoverFormatter){var c=r-1,d=(0,s.config.legend.tooltipHoverFormatter)(this.legendLabels[c].getAttribute(\\\"data:default-text\\\"),{seriesIndex:c,dataPointIndex:c,w:s});this.legendLabels[c].innerHTML=d}}else\\\"mouseout\\\"!==e.type&&\\\"touchend\\\"!==e.type||(o.classList.remove(\\\"apexcharts-active\\\"),s.config.legend.tooltipHoverFormatter&&this.legendLabels.forEach((function(t){var e=t.getAttribute(\\\"data:default-text\\\");t.innerHTML=decodeURIComponent(e)})))}},{key:\\\"handleStickyTooltip\\\",value:function(t,e,i,a){var s=this.w,r=this.tooltipUtil.getNearestValues({context:this,hoverArea:a.hoverArea,elGrid:a.elGrid,clientX:e,clientY:i}),o=r.j,n=r.capturedSeries;r.hoverX<0||r.hoverX>s.globals.gridWidth?this.handleMouseOut(a):null!==n?this.handleStickyCapturedSeries(t,n,a,o):(this.tooltipUtil.isXoverlap(o)||s.globals.isBarHorizontal)&&this.create(t,this,0,o,a.ttItems)}},{key:\\\"handleStickyCapturedSeries\\\",value:function(t,e,i,a){var s=this.w;null===s.globals.series[e][a]?this.handleMouseOut(i):void 0!==s.globals.series[e][a]?this.tConfig.shared&&this.tooltipUtil.isXoverlap(a)&&this.tooltipUtil.isInitialSeriesSameLen()?this.create(t,this,e,a,i.ttItems):this.create(t,this,e,a,i.ttItems,!1):this.tooltipUtil.isXoverlap(a)&&this.create(t,this,0,a,i.ttItems)}},{key:\\\"deactivateHoverFilter\\\",value:function(){for(var t=this.w,e=new b(this.ctx),i=t.globals.dom.Paper.select(\\\".apexcharts-bar-area\\\"),a=0;a<i.length;a++)e.pathMouseLeave(i[a])}},{key:\\\"handleMouseOut\\\",value:function(t){var e=this.w,i=this.getElXCrosshairs();if(t.tooltipEl.classList.remove(\\\"apexcharts-active\\\"),this.deactivateHoverFilter(),\\\"bubble\\\"!==e.config.chart.type&&this.marker.resetPointsSize(),null!==i&&i.classList.remove(\\\"apexcharts-active\\\"),null!==this.ycrosshairs&&this.ycrosshairs.classList.remove(\\\"apexcharts-active\\\"),this.blxaxisTooltip&&this.xaxisTooltip.classList.remove(\\\"apexcharts-active\\\"),this.yaxisTooltips.length){null===this.yaxisTTEls&&(this.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(\\\".apexcharts-yaxistooltip\\\"));for(var a=0;a<this.yaxisTTEls.length;a++)this.yaxisTTEls[a].classList.remove(\\\"apexcharts-active\\\")}e.config.legend.tooltipHoverFormatter&&this.legendLabels.forEach((function(t){var e=t.getAttribute(\\\"data:default-text\\\");t.innerHTML=decodeURIComponent(e)}))}},{key:\\\"markerClick\\\",value:function(t,e,i){var a=this.w;\\\"function\\\"==typeof a.config.chart.events.markerClick&&a.config.chart.events.markerClick(t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:a}),this.ctx.events.fireEvent(\\\"markerClick\\\",[t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:a}])}},{key:\\\"create\\\",value:function(t,e,i,a,s){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,o=this.w,n=e;\\\"mouseup\\\"===t.type&&this.markerClick(t,i,a),null===r&&(r=this.tConfig.shared);var l=this.tooltipUtil.hasMarkers(),h=this.tooltipUtil.getElBars();if(o.config.legend.tooltipHoverFormatter){var c=o.config.legend.tooltipHoverFormatter,d=Array.from(this.legendLabels);d.forEach((function(t){var e=t.getAttribute(\\\"data:default-text\\\");t.innerHTML=decodeURIComponent(e)}));for(var g=0;g<d.length;g++){var u=d[g],p=parseInt(u.getAttribute(\\\"i\\\"),10),f=decodeURIComponent(u.getAttribute(\\\"data:default-text\\\")),x=c(f,{seriesIndex:r?p:i,dataPointIndex:a,w:o});if(r)u.innerHTML=o.globals.collapsedSeriesIndices.indexOf(p)<0?x:f;else if(u.innerHTML=p===i?x:f,i===p)break}}if(r){if(n.tooltipLabels.drawSeriesTexts({ttItems:s,i:i,j:a,shared:!this.showOnIntersect&&this.tConfig.shared}),l&&(o.globals.markers.largestSize>0?n.marker.enlargePoints(a):n.tooltipPosition.moveDynamicPointsOnHover(a)),this.tooltipUtil.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(h),this.barSeriesHeight>0)){var v=new b(this.ctx),m=o.globals.dom.Paper.select(\\\".apexcharts-bar-area[j='\\\".concat(a,\\\"']\\\"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(a);for(var y=0;y<m.length;y++)v.pathMouseEnter(m[y])}}else n.tooltipLabels.drawSeriesTexts({shared:!1,ttItems:s,i:i,j:a}),this.tooltipUtil.hasBars()&&n.tooltipPosition.moveStickyTooltipOverBars(a),l&&n.tooltipPosition.moveMarkers(i,a)}}]),t}(),vt=function(t){n(s,E);var i=d(s);function s(){return a(this,s),i.apply(this,arguments)}return r(s,[{key:\\\"draw\\\",value:function(t,i){var a=this,s=this.w;this.graphics=new b(this.ctx),this.bar=new E(this.ctx,this.xyRatios);var r=new y(this.ctx,s);t=r.getLogSeries(t),this.yRatio=r.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t),\\\"100%\\\"===s.config.chart.stackType&&(t=s.globals.seriesPercent.slice()),this.series=t,this.totalItems=0,this.prevY=[],this.prevX=[],this.prevYF=[],this.prevXF=[],this.prevYVal=[],this.prevXVal=[],this.xArrj=[],this.xArrjF=[],this.xArrjVal=[],this.yArrj=[],this.yArrjF=[],this.yArrjVal=[];for(var o=0;o<t.length;o++)t[o].length>0&&(this.totalItems+=t[o].length);for(var n=this.graphics.group({class:\\\"apexcharts-bar-series apexcharts-plot-series\\\"}),l=0,h=0,c=function(r,o){var c=void 0,d=void 0,g=void 0,u=void 0,f=[],x=[],b=s.globals.comboCharts?i[r]:r;a.yRatio.length>1&&(a.yaxisIndex=b),a.isReversed=s.config.yaxis[a.yaxisIndex]&&s.config.yaxis[a.yaxisIndex].reversed;var v=a.graphics.group({class:\\\"apexcharts-series\\\",seriesName:p.escapeString(s.globals.seriesNames[b]),rel:r+1,\\\"data:realIndex\\\":b});a.ctx.series.addCollapsedClassToSeries(v,b);var m=a.graphics.group({class:\\\"apexcharts-datalabels\\\",\\\"data:realIndex\\\":b}),y=0,w=0,k=a.initialPositions(l,h,c,d,g,u);h=k.y,y=k.barHeight,d=k.yDivision,u=k.zeroW,l=k.x,w=k.barWidth,c=k.xDivision,g=k.zeroH,a.yArrj=[],a.yArrjF=[],a.yArrjVal=[],a.xArrj=[],a.xArrjF=[],a.xArrjVal=[],1===a.prevY.length&&a.prevY[0].every((function(t){return isNaN(t)}))&&(a.prevY[0]=a.prevY[0].map((function(t){return g})),a.prevYF[0]=a.prevYF[0].map((function(t){return 0})));for(var A=0;A<s.globals.dataPoints;A++){var S=a.barHelpers.getStrokeWidth(r,A,b),C={indexes:{i:r,j:A,realIndex:b,bc:o},strokeWidth:S,x:l,y:h,elSeries:v},L=null;a.isHorizontal?(L=a.drawStackedBarPaths(e(e({},C),{},{zeroW:u,barHeight:y,yDivision:d})),w=a.series[r][A]/a.invertedYRatio):(L=a.drawStackedColumnPaths(e(e({},C),{},{xDivision:c,barWidth:w,zeroH:g})),y=a.series[r][A]/a.yRatio[a.yaxisIndex]),h=L.y,l=L.x,f.push(l),x.push(h);var P=a.barHelpers.getPathFillColor(t,r,A,b);v=a.renderSeries({realIndex:b,pathFill:P,j:A,i:r,pathFrom:L.pathFrom,pathTo:L.pathTo,strokeWidth:S,elSeries:v,x:l,y:h,series:t,barHeight:y,barWidth:w,elDataLabelsWrap:m,type:\\\"bar\\\",visibleSeries:0})}s.globals.seriesXvalues[b]=f,s.globals.seriesYvalues[b]=x,a.prevY.push(a.yArrj),a.prevYF.push(a.yArrjF),a.prevYVal.push(a.yArrjVal),a.prevX.push(a.xArrj),a.prevXF.push(a.xArrjF),a.prevXVal.push(a.xArrjVal),n.add(v)},d=0,g=0;d<t.length;d++,g++)c(d,g);return n}},{key:\\\"initialPositions\\\",value:function(t,e,i,a,s,r){var o,n,l=this.w;return this.isHorizontal?(o=(o=a=l.globals.gridHeight/l.globals.dataPoints)*parseInt(l.config.plotOptions.bar.barHeight,10)/100,r=this.baseLineInvertedY+l.globals.padHorizontal+(this.isReversed?l.globals.gridWidth:0)-(this.isReversed?2*this.baseLineInvertedY:0),e=(a-o)/2):(n=i=l.globals.gridWidth/l.globals.dataPoints,n=l.globals.isXNumeric&&l.globals.dataPoints>1?(i=l.globals.minXDiff/this.xRatio)*parseInt(this.barOptions.columnWidth,10)/100:n*parseInt(l.config.plotOptions.bar.columnWidth,10)/100,s=this.baseLineY[this.yaxisIndex]+(this.isReversed?l.globals.gridHeight:0)-(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),t=l.globals.padHorizontal+(i-n)/2),{x:t,y:e,yDivision:a,xDivision:i,barHeight:o,barWidth:n,zeroH:s,zeroW:r}}},{key:\\\"drawStackedBarPaths\\\",value:function(t){for(var e,i=t.indexes,a=t.barHeight,s=t.strokeWidth,r=t.zeroW,o=t.x,n=t.y,l=t.yDivision,h=t.elSeries,c=this.w,d=n,g=i.i,u=i.j,p=0,f=0;f<this.prevXF.length;f++)p+=this.prevXF[f][u];if(g>0){var x=r;this.prevXVal[g-1][u]<0?x=this.series[g][u]>=0?this.prevX[g-1][u]+p-2*(this.isReversed?p:0):this.prevX[g-1][u]:this.prevXVal[g-1][u]>=0&&(x=this.series[g][u]>=0?this.prevX[g-1][u]:this.prevX[g-1][u]-p+2*(this.isReversed?p:0)),e=x}else e=r;o=null===this.series[g][u]?e:e+this.series[g][u]/this.invertedYRatio-2*(this.isReversed?this.series[g][u]/this.invertedYRatio:0);var b=this.barHelpers.getBarpaths({barYPosition:d,barHeight:a,x1:e,x2:o,strokeWidth:s,series:this.series,realIndex:i.realIndex,i:g,j:u,w:c});return this.barHelpers.barBackground({j:u,i:g,y1:d,y2:a,elSeries:h}),n+=l,{pathTo:b.pathTo,pathFrom:b.pathFrom,x:o,y:n}}},{key:\\\"drawStackedColumnPaths\\\",value:function(t){var e=t.indexes,i=t.x,a=t.y,s=t.xDivision,r=t.barWidth,o=t.zeroH;t.strokeWidth;var n=t.elSeries,l=this.w,h=e.i,c=e.j,d=e.bc;if(l.globals.isXNumeric){var g=l.globals.seriesX[h][c];g||(g=0),i=(g-l.globals.minX)/this.xRatio-r/2}for(var u,p=i,f=0,x=0;x<this.prevYF.length;x++)f+=isNaN(this.prevYF[x][c])?0:this.prevYF[x][c];if(h>0&&!l.globals.isXNumeric||h>0&&l.globals.isXNumeric&&l.globals.seriesX[h-1][c]===l.globals.seriesX[h][c]){var b,v,m=Math.min(this.yRatio.length+1,h+1);if(void 0!==this.prevY[h-1])for(var y=1;y<m;y++)if(!isNaN(this.prevY[h-y][c])){v=this.prevY[h-y][c];break}for(var w=1;w<m;w++){if(this.prevYVal[h-w][c]<0){b=this.series[h][c]>=0?v-f+2*(this.isReversed?f:0):v;break}if(this.prevYVal[h-w][c]>=0){b=this.series[h][c]>=0?v:v+f-2*(this.isReversed?f:0);break}}void 0===b&&(b=l.globals.gridHeight),u=this.prevYF[0].every((function(t){return 0===t}))&&this.prevYF.slice(1,h).every((function(t){return t.every((function(t){return isNaN(t)}))}))?l.globals.gridHeight-o:b}else u=l.globals.gridHeight-o;a=u-this.series[h][c]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[h][c]/this.yRatio[this.yaxisIndex]:0);var k=this.barHelpers.getColumnPaths({barXPosition:p,barWidth:r,y1:u,y2:a,yRatio:this.yRatio[this.yaxisIndex],strokeWidth:this.strokeWidth,series:this.series,realIndex:e.realIndex,i:h,j:c,w:l});return this.barHelpers.barBackground({bc:d,j:c,i:h,x1:p,x2:r,elSeries:n}),i+=s,{pathTo:k.pathTo,pathFrom:k.pathFrom,x:l.globals.isXNumeric?i-s:i,y:a}}}]),s}(),mt=function(t){n(i,E);var e=d(i);function i(){return a(this,i),e.apply(this,arguments)}return r(i,[{key:\\\"draw\\\",value:function(t,e){var i=this,a=this.w,s=new b(this.ctx),r=new L(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick,this.boxOptions=this.w.config.plotOptions.boxPlot;var o=new y(this.ctx,a);t=o.getLogSeries(t),this.series=t,this.yRatio=o.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t);for(var n=s.group({class:\\\"apexcharts-\\\".concat(a.config.chart.type,\\\"-series apexcharts-plot-series\\\")}),l=function(o){i.isBoxPlot=\\\"boxPlot\\\"===a.config.chart.type||\\\"boxPlot\\\"===a.config.series[o].type;var l,h,c=void 0,d=void 0,g=[],u=[],f=a.globals.comboCharts?e[o]:o,x=s.group({class:\\\"apexcharts-series\\\",seriesName:p.escapeString(a.globals.seriesNames[f]),rel:o+1,\\\"data:realIndex\\\":f});t[o].length>0&&(i.visibleI=i.visibleI+1);var b,v;i.yRatio.length>1&&(i.yaxisIndex=f);var m=i.barHelpers.initialPositions();d=m.y,b=m.barHeight,c=m.x,v=m.barWidth,l=m.xDivision,h=m.zeroH,u.push(c+v/2);for(var y=s.group({class:\\\"apexcharts-datalabels\\\",\\\"data:realIndex\\\":f}),w=function(e){var s=i.barHelpers.getStrokeWidth(o,e,f),n=i.drawBoxPaths({indexes:{i:o,j:e,realIndex:f},x:c,y:d,xDivision:l,barWidth:v,zeroH:h,strokeWidth:s,elSeries:x});d=n.y,c=n.x,e>0&&u.push(c+v/2),g.push(d),n.pathTo.forEach((function(l,h){var g=!i.isBoxPlot&&i.candlestickOptions.wick.useFillColor?n.color[h]:a.globals.stroke.colors[o],u=r.fillPath({seriesNumber:f,dataPointIndex:e,color:n.color[h],value:t[o][e]});i.renderSeries({realIndex:f,pathFill:u,lineFill:g,j:e,i:o,pathFrom:n.pathFrom,pathTo:l,strokeWidth:s,elSeries:x,x:c,y:d,series:t,barHeight:b,barWidth:v,elDataLabelsWrap:y,visibleSeries:i.visibleI,type:a.config.chart.type})}))},k=0;k<a.globals.dataPoints;k++)w(k);a.globals.seriesXvalues[f]=u,a.globals.seriesYvalues[f]=g,n.add(x)},h=0;h<t.length;h++)l(h);return n}},{key:\\\"drawBoxPaths\\\",value:function(t){var e=t.indexes,i=t.x;t.y;var a=t.xDivision,s=t.barWidth,r=t.zeroH,o=t.strokeWidth,n=this.w,l=new b(this.ctx),h=e.i,c=e.j,d=!0,g=n.config.plotOptions.candlestick.colors.upward,u=n.config.plotOptions.candlestick.colors.downward,p=\\\"\\\";this.isBoxPlot&&(p=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var f=this.yRatio[this.yaxisIndex],x=e.realIndex,v=this.getOHLCValue(x,c),m=r,y=r;v.o>v.c&&(d=!1);var w=Math.min(v.o,v.c),k=Math.max(v.o,v.c),A=v.m;n.globals.isXNumeric&&(i=(n.globals.seriesX[x][c]-n.globals.minX)/this.xRatio-s/2);var S=i+s*this.visibleI;void 0===this.series[h][c]||null===this.series[h][c]?(w=r,k=r):(w=r-w/f,k=r-k/f,m=r-v.h/f,y=r-v.l/f,A=r-v.m/f);var C=l.move(S,r),L=l.move(S+s/2,w);return n.globals.previousPaths.length>0&&(L=this.getPreviousPath(x,c,!0)),C=this.isBoxPlot?[l.move(S,w)+l.line(S+s/2,w)+l.line(S+s/2,m)+l.line(S+s/4,m)+l.line(S+s-s/4,m)+l.line(S+s/2,m)+l.line(S+s/2,w)+l.line(S+s,w)+l.line(S+s,A)+l.line(S,A)+l.line(S,w+o/2),l.move(S,A)+l.line(S+s,A)+l.line(S+s,k)+l.line(S+s/2,k)+l.line(S+s/2,y)+l.line(S+s-s/4,y)+l.line(S+s/4,y)+l.line(S+s/2,y)+l.line(S+s/2,k)+l.line(S,k)+l.line(S,A)+\\\"z\\\"]:[l.move(S,k)+l.line(S+s/2,k)+l.line(S+s/2,m)+l.line(S+s/2,k)+l.line(S+s,k)+l.line(S+s,w)+l.line(S+s/2,w)+l.line(S+s/2,y)+l.line(S+s/2,w)+l.line(S,w)+l.line(S,k-o/2)],L+=l.move(S,w),n.globals.isXNumeric||(i+=a),{pathTo:C,pathFrom:L,x:i,y:k,barXPosition:S,color:this.isBoxPlot?p:d?[g]:[u]}}},{key:\\\"getOHLCValue\\\",value:function(t,e){var i=this.w;return{o:this.isBoxPlot?i.globals.seriesCandleH[t][e]:i.globals.seriesCandleO[t][e],h:this.isBoxPlot?i.globals.seriesCandleO[t][e]:i.globals.seriesCandleH[t][e],m:i.globals.seriesCandleM[t][e],l:this.isBoxPlot?i.globals.seriesCandleC[t][e]:i.globals.seriesCandleL[t][e],c:this.isBoxPlot?i.globals.seriesCandleL[t][e]:i.globals.seriesCandleC[t][e]}}}]),i}(),yt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"checkColorRange\\\",value:function(){var t=this.w,e=!1,i=t.config.plotOptions[t.config.chart.type];return i.colorScale.ranges.length>0&&i.colorScale.ranges.map((function(t,i){t.from<=0&&(e=!0)})),e}},{key:\\\"getShadeColor\\\",value:function(t,e,i,a){var s=this.w,r=1,o=s.config.plotOptions[t].shadeIntensity,n=this.determineColor(t,e,i);s.globals.hasNegs||a?r=s.config.plotOptions[t].reverseNegativeShade?n.percent<0?n.percent/100*(1.25*o):(1-n.percent/100)*(1.25*o):n.percent<=0?1-(1+n.percent/100)*o:(1-n.percent/100)*o:(r=1-n.percent/100,\\\"treemap\\\"===t&&(r=(1-n.percent/100)*(1.25*o)));var l=n.color,h=new p;return s.config.plotOptions[t].enableShades&&(l=\\\"dark\\\"===this.w.config.theme.mode?p.hexToRgba(h.shadeColor(-1*r,n.color),s.config.fill.opacity):p.hexToRgba(h.shadeColor(r,n.color),s.config.fill.opacity)),{color:l,colorProps:n}}},{key:\\\"determineColor\\\",value:function(t,e,i){var a=this.w,s=a.globals.series[e][i],r=a.config.plotOptions[t],o=r.colorScale.inverse?i:e;a.config.plotOptions[t].distributed&&(o=i);var n=a.globals.colors[o],l=null,h=Math.min.apply(Math,g(a.globals.series[e])),c=Math.max.apply(Math,g(a.globals.series[e]));r.distributed||\\\"heatmap\\\"!==t||(h=a.globals.minY,c=a.globals.maxY),void 0!==r.colorScale.min&&(h=r.colorScale.min<a.globals.minY?r.colorScale.min:a.globals.minY,c=r.colorScale.max>a.globals.maxY?r.colorScale.max:a.globals.maxY);var d=Math.abs(c)+Math.abs(h),u=100*s/(0===d?d-1e-6:d);r.colorScale.ranges.length>0&&r.colorScale.ranges.map((function(t,e){if(s>=t.from&&s<=t.to){n=t.color,l=t.foreColor?t.foreColor:null,h=t.from,c=t.to;var i=Math.abs(c)+Math.abs(h);u=100*s/(0===i?i-1e-6:i)}}));return{color:n,foreColor:l,percent:u}}},{key:\\\"calculateDataLabels\\\",value:function(t){var e=t.text,i=t.x,a=t.y,s=t.i,r=t.j,o=t.colorProps,n=t.fontSize,l=this.w.config.dataLabels,h=new b(this.ctx),c=new M(this.ctx),d=null;if(l.enabled){d=h.group({class:\\\"apexcharts-data-labels\\\"});var g=l.offsetX,u=l.offsetY,p=i+g,f=a+parseFloat(l.style.fontSize)/3+u;c.plotDataLabelsText({x:p,y:f,text:e,i:s,j:r,color:o.foreColor,parent:d,fontSize:n,dataLabelsConfig:l})}return d}},{key:\\\"addListeners\\\",value:function(t){var e=new b(this.ctx);t.node.addEventListener(\\\"mouseenter\\\",e.pathMouseEnter.bind(this,t)),t.node.addEventListener(\\\"mouseleave\\\",e.pathMouseLeave.bind(this,t)),t.node.addEventListener(\\\"mousedown\\\",e.pathMouseDown.bind(this,t))}}]),t}(),wt=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w,this.xRatio=i.xRatio,this.yRatio=i.yRatio,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.helpers=new yt(e),this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.show?this.w.config.stroke.width:0}return r(t,[{key:\\\"draw\\\",value:function(t){var e=this.w,i=new b(this.ctx),a=i.group({class:\\\"apexcharts-heatmap\\\"});a.attr(\\\"clip-path\\\",\\\"url(#gridRectMask\\\".concat(e.globals.cuid,\\\")\\\"));var s=e.globals.gridWidth/e.globals.dataPoints,r=e.globals.gridHeight/e.globals.series.length,o=0,n=!1;this.negRange=this.helpers.checkColorRange();var l=t.slice();e.config.yaxis[0].reversed&&(n=!0,l.reverse());for(var h=n?0:l.length-1;n?h<l.length:h>=0;n?h++:h--){var c=i.group({class:\\\"apexcharts-series apexcharts-heatmap-series\\\",seriesName:p.escapeString(e.globals.seriesNames[h]),rel:h+1,\\\"data:realIndex\\\":h});if(this.ctx.series.addCollapsedClassToSeries(c,h),e.config.chart.dropShadow.enabled){var d=e.config.chart.dropShadow;new x(this.ctx).dropShadow(c,d,h)}for(var g=0,u=e.config.plotOptions.heatmap.shadeIntensity,f=0;f<l[h].length;f++){var v=this.helpers.getShadeColor(e.config.chart.type,h,f,this.negRange),m=v.color,y=v.colorProps;if(\\\"image\\\"===e.config.fill.type)m=new L(this.ctx).fillPath({seriesNumber:h,dataPointIndex:f,opacity:e.globals.hasNegs?y.percent<0?1-(1+y.percent/100):u+y.percent/100:y.percent/100,patternID:p.randomId(),width:e.config.fill.image.width?e.config.fill.image.width:s,height:e.config.fill.image.height?e.config.fill.image.height:r});var w=this.rectRadius,k=i.drawRect(g,o,s,r,w);if(k.attr({cx:g,cy:o}),k.node.classList.add(\\\"apexcharts-heatmap-rect\\\"),c.add(k),k.attr({fill:m,i:h,index:h,j:f,val:l[h][f],\\\"stroke-width\\\":this.strokeWidth,stroke:e.config.plotOptions.heatmap.useFillColorAsStroke?m:e.globals.stroke.colors[0],color:m}),this.helpers.addListeners(k),e.config.chart.animations.enabled&&!e.globals.dataChanged){var A=1;e.globals.resized||(A=e.config.chart.animations.speed),this.animateHeatMap(k,g,o,s,r,A)}if(e.globals.dataChanged){var S=1;if(this.dynamicAnim.enabled&&e.globals.shouldAnimate){S=this.dynamicAnim.speed;var C=e.globals.previousPaths[h]&&e.globals.previousPaths[h][f]&&e.globals.previousPaths[h][f].color;C||(C=\\\"rgba(255, 255, 255, 0)\\\"),this.animateHeatColor(k,p.isColorHex(C)?C:p.rgb2hex(C),p.isColorHex(m)?m:p.rgb2hex(m),S)}}var P=(0,e.config.dataLabels.formatter)(e.globals.series[h][f],{value:e.globals.series[h][f],seriesIndex:h,dataPointIndex:f,w:e}),T=this.helpers.calculateDataLabels({text:P,x:g+s/2,y:o+r/2,i:h,j:f,colorProps:y,series:l});null!==T&&c.add(T),g+=s}o+=r,a.add(c)}var M=e.globals.yAxisScale[0].result.slice();e.config.yaxis[0].reversed?M.unshift(\\\"\\\"):M.push(\\\"\\\"),e.globals.yAxisScale[0].result=M;var I=e.globals.gridHeight/e.globals.series.length;return e.config.yaxis[0].labels.offsetY=-I/2,a}},{key:\\\"animateHeatMap\\\",value:function(t,e,i,a,s,r){var o=new f(this.ctx);o.animateRect(t,{x:e+a/2,y:i+s/2,width:0,height:0},{x:e,y:i,width:a,height:s},r,(function(){o.animationCompleted(t)}))}},{key:\\\"animateHeatColor\\\",value:function(t,e,i,a){t.attr({fill:e}).animate(a).attr({fill:i})}}]),t}(),kt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"drawYAxisTexts\\\",value:function(t,e,i,a){var s=this.w,r=s.config.yaxis[0],o=s.globals.yLabelFormatters[0];return new b(this.ctx).drawText({x:t+r.labels.offsetX,y:e+r.labels.offsetY,text:o(a,i),textAnchor:\\\"middle\\\",fontSize:r.labels.style.fontSize,fontFamily:r.labels.style.fontFamily,foreColor:Array.isArray(r.labels.style.colors)?r.labels.style.colors[i]:r.labels.style.colors})}}]),t}(),At=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animBeginArr=[0],this.animDur=0,this.donutDataLabels=this.w.config.plotOptions.pie.donut.labels,this.lineColorArr=void 0!==i.globals.stroke.colors?i.globals.stroke.colors:i.globals.colors,this.defaultSize=Math.min(i.globals.gridWidth,i.globals.gridHeight),this.centerY=this.defaultSize/2,this.centerX=i.globals.gridWidth/2,\\\"radialBar\\\"===i.config.chart.type?this.fullAngle=360:this.fullAngle=Math.abs(i.config.plotOptions.pie.endAngle-i.config.plotOptions.pie.startAngle),this.initialAngle=i.config.plotOptions.pie.startAngle%this.fullAngle,i.globals.radialSize=this.defaultSize/2.05-i.config.stroke.width-(i.config.chart.sparkline.enabled?0:i.config.chart.dropShadow.blur),this.donutSize=i.globals.radialSize*parseInt(i.config.plotOptions.pie.donut.size,10)/100,this.maxY=0,this.sliceLabels=[],this.sliceSizes=[],this.prevSectorAngleArr=[]}return r(t,[{key:\\\"draw\\\",value:function(t){var e=this,i=this.w,a=new b(this.ctx);if(this.ret=a.group({class:\\\"apexcharts-pie\\\"}),i.globals.noData)return this.ret;for(var s=0,r=0;r<t.length;r++)s+=p.negToZero(t[r]);var o=[],n=a.group();0===s&&(s=1e-5),t.forEach((function(t){e.maxY=Math.max(e.maxY,t)})),i.config.yaxis[0].max&&(this.maxY=i.config.yaxis[0].max),\\\"back\\\"===i.config.grid.position&&\\\"polarArea\\\"===this.chartType&&this.drawPolarElements(this.ret);for(var l=0;l<t.length;l++){var h=this.fullAngle*p.negToZero(t[l])/s;o.push(h),\\\"polarArea\\\"===this.chartType?(o[l]=this.fullAngle/t.length,this.sliceSizes.push(i.globals.radialSize*t[l]/this.maxY)):this.sliceSizes.push(i.globals.radialSize)}if(i.globals.dataChanged){for(var c,d=0,g=0;g<i.globals.previousPaths.length;g++)d+=p.negToZero(i.globals.previousPaths[g]);for(var u=0;u<i.globals.previousPaths.length;u++)c=this.fullAngle*p.negToZero(i.globals.previousPaths[u])/d,this.prevSectorAngleArr.push(c)}this.donutSize<0&&(this.donutSize=0);var f=i.config.plotOptions.pie.customScale,x=i.globals.gridWidth/2,v=i.globals.gridHeight/2,m=x-i.globals.gridWidth/2*f,y=v-i.globals.gridHeight/2*f;if(\\\"donut\\\"===this.chartType){var w=a.drawCircle(this.donutSize);w.attr({cx:this.centerX,cy:this.centerY,fill:i.config.plotOptions.pie.donut.background?i.config.plotOptions.pie.donut.background:\\\"transparent\\\"}),n.add(w)}var k=this.drawArcs(o,t);if(this.sliceLabels.forEach((function(t){k.add(t)})),n.attr({transform:\\\"translate(\\\".concat(m,\\\", \\\").concat(y,\\\") scale(\\\").concat(f,\\\")\\\")}),n.add(k),this.ret.add(n),this.donutDataLabels.show){var A=this.renderInnerDataLabels(this.donutDataLabels,{hollowSize:this.donutSize,centerX:this.centerX,centerY:this.centerY,opacity:this.donutDataLabels.show,translateX:m,translateY:y});this.ret.add(A)}return\\\"front\\\"===i.config.grid.position&&\\\"polarArea\\\"===this.chartType&&this.drawPolarElements(this.ret),this.ret}},{key:\\\"drawArcs\\\",value:function(t,e){var i=this.w,a=new x(this.ctx),s=new b(this.ctx),r=new L(this.ctx),o=s.group({class:\\\"apexcharts-slices\\\"}),n=this.initialAngle,l=this.initialAngle,h=this.initialAngle,c=this.initialAngle;this.strokeWidth=i.config.stroke.show?i.config.stroke.width:0;for(var d=0;d<t.length;d++){var g=s.group({class:\\\"apexcharts-series apexcharts-pie-series\\\",seriesName:p.escapeString(i.globals.seriesNames[d]),rel:d+1,\\\"data:realIndex\\\":d});o.add(g),l=c,h=(n=h)+t[d],c=l+this.prevSectorAngleArr[d];var u=h<n?this.fullAngle+h-n:h-n,f=r.fillPath({seriesNumber:d,size:this.sliceSizes[d],value:e[d]}),v=this.getChangedPath(l,c),m=s.drawPath({d:v,stroke:Array.isArray(this.lineColorArr)?this.lineColorArr[d]:this.lineColorArr,strokeWidth:0,fill:f,fillOpacity:i.config.fill.opacity,classes:\\\"apexcharts-pie-area apexcharts-\\\".concat(this.chartType.toLowerCase(),\\\"-slice-\\\").concat(d)});if(m.attr({index:0,j:d}),a.setSelectionFilter(m,0,d),i.config.chart.dropShadow.enabled){var y=i.config.chart.dropShadow;a.dropShadow(m,y,d)}this.addListeners(m,this.donutDataLabels),b.setAttrs(m.node,{\\\"data:angle\\\":u,\\\"data:startAngle\\\":n,\\\"data:strokeWidth\\\":this.strokeWidth,\\\"data:value\\\":e[d]});var w={x:0,y:0};\\\"pie\\\"===this.chartType||\\\"polarArea\\\"===this.chartType?w=p.polarToCartesian(this.centerX,this.centerY,i.globals.radialSize/1.25+i.config.plotOptions.pie.dataLabels.offset,(n+u/2)%this.fullAngle):\\\"donut\\\"===this.chartType&&(w=p.polarToCartesian(this.centerX,this.centerY,(i.globals.radialSize+this.donutSize)/2+i.config.plotOptions.pie.dataLabels.offset,(n+u/2)%this.fullAngle)),g.add(m);var k=0;if(!this.initialAnim||i.globals.resized||i.globals.dataChanged?this.animBeginArr.push(0):(0===(k=u/this.fullAngle*i.config.chart.animations.speed)&&(k=1),this.animDur=k+this.animDur,this.animBeginArr.push(this.animDur)),this.dynamicAnim&&i.globals.dataChanged?this.animatePaths(m,{size:this.sliceSizes[d],endAngle:h,startAngle:n,prevStartAngle:l,prevEndAngle:c,animateStartingPos:!0,i:d,animBeginArr:this.animBeginArr,shouldSetPrevPaths:!0,dur:i.config.chart.animations.dynamicAnimation.speed}):this.animatePaths(m,{size:this.sliceSizes[d],endAngle:h,startAngle:n,i:d,totalItems:t.length-1,animBeginArr:this.animBeginArr,dur:k}),i.config.plotOptions.pie.expandOnClick&&\\\"polarArea\\\"!==this.chartType&&m.click(this.pieClicked.bind(this,d)),void 0!==i.globals.selectedDataPoints[0]&&i.globals.selectedDataPoints[0].indexOf(d)>-1&&this.pieClicked(d),i.config.dataLabels.enabled){var A=w.x,S=w.y,C=100*u/this.fullAngle+\\\"%\\\";if(0!==u&&i.config.plotOptions.pie.dataLabels.minAngleToShowLabel<t[d]){var P=i.config.dataLabels.formatter;void 0!==P&&(C=P(i.globals.seriesPercent[d][0],{seriesIndex:d,w:i}));var T=i.globals.dataLabels.style.colors[d],M=s.group({class:\\\"apexcharts-datalabels\\\"}),I=s.drawText({x:A,y:S,text:C,textAnchor:\\\"middle\\\",fontSize:i.config.dataLabels.style.fontSize,fontFamily:i.config.dataLabels.style.fontFamily,fontWeight:i.config.dataLabels.style.fontWeight,foreColor:T});if(M.add(I),i.config.dataLabels.dropShadow.enabled){var z=i.config.dataLabels.dropShadow;a.dropShadow(I,z)}I.node.classList.add(\\\"apexcharts-pie-label\\\"),i.config.chart.animations.animate&&!1===i.globals.resized&&(I.node.classList.add(\\\"apexcharts-pie-label-delay\\\"),I.node.style.animationDelay=i.config.chart.animations.speed/940+\\\"s\\\"),this.sliceLabels.push(M)}}}return o}},{key:\\\"addListeners\\\",value:function(t,e){var i=new b(this.ctx);t.node.addEventListener(\\\"mouseenter\\\",i.pathMouseEnter.bind(this,t)),t.node.addEventListener(\\\"mouseleave\\\",i.pathMouseLeave.bind(this,t)),t.node.addEventListener(\\\"mouseleave\\\",this.revertDataLabelsInner.bind(this,t.node,e)),t.node.addEventListener(\\\"mousedown\\\",i.pathMouseDown.bind(this,t)),this.donutDataLabels.total.showAlways||(t.node.addEventListener(\\\"mouseenter\\\",this.printDataLabelsInner.bind(this,t.node,e)),t.node.addEventListener(\\\"mousedown\\\",this.printDataLabelsInner.bind(this,t.node,e)))}},{key:\\\"animatePaths\\\",value:function(t,e){var i=this.w,a=e.endAngle<e.startAngle?this.fullAngle+e.endAngle-e.startAngle:e.endAngle-e.startAngle,s=a,r=e.startAngle,o=e.startAngle;void 0!==e.prevStartAngle&&void 0!==e.prevEndAngle&&(r=e.prevEndAngle,s=e.prevEndAngle<e.prevStartAngle?this.fullAngle+e.prevEndAngle-e.prevStartAngle:e.prevEndAngle-e.prevStartAngle),e.i===i.config.series.length-1&&(a+o>this.fullAngle?e.endAngle=e.endAngle-(a+o):a+o<this.fullAngle&&(e.endAngle=e.endAngle+(this.fullAngle-(a+o)))),a===this.fullAngle&&(a=this.fullAngle-.01),this.animateArc(t,r,o,a,s,e)}},{key:\\\"animateArc\\\",value:function(t,e,i,a,s,r){var o,n=this,l=this.w,h=new f(this.ctx),c=r.size;(isNaN(e)||isNaN(s))&&(e=i,s=a,r.dur=0);var d=a,g=i,u=e<i?this.fullAngle+e-i:e-i;l.globals.dataChanged&&r.shouldSetPrevPaths&&r.prevEndAngle&&(o=n.getPiePath({me:n,startAngle:r.prevStartAngle,angle:r.prevEndAngle<r.prevStartAngle?this.fullAngle+r.prevEndAngle-r.prevStartAngle:r.prevEndAngle-r.prevStartAngle,size:c}),t.attr({d:o})),0!==r.dur?t.animate(r.dur,l.globals.easing,r.animBeginArr[r.i]).afterAll((function(){\\\"pie\\\"!==n.chartType&&\\\"donut\\\"!==n.chartType&&\\\"polarArea\\\"!==n.chartType||this.animate(l.config.chart.animations.dynamicAnimation.speed).attr({\\\"stroke-width\\\":n.strokeWidth}),r.i===l.config.series.length-1&&h.animationCompleted(t)})).during((function(l){d=u+(a-u)*l,r.animateStartingPos&&(d=s+(a-s)*l,g=e-s+(i-(e-s))*l),o=n.getPiePath({me:n,startAngle:g,angle:d,size:c}),t.node.setAttribute(\\\"data:pathOrig\\\",o),t.attr({d:o})})):(o=n.getPiePath({me:n,startAngle:g,angle:a,size:c}),r.isTrack||(l.globals.animationEnded=!0),t.node.setAttribute(\\\"data:pathOrig\\\",o),t.attr({d:o,\\\"stroke-width\\\":n.strokeWidth}))}},{key:\\\"pieClicked\\\",value:function(t){var e,i=this.w,a=this,s=a.sliceSizes[t]+(i.config.plotOptions.pie.expandOnClick?4:0),r=i.globals.dom.Paper.select(\\\".apexcharts-\\\".concat(a.chartType.toLowerCase(),\\\"-slice-\\\").concat(t)).members[0];if(\\\"true\\\"!==r.attr(\\\"data:pieClicked\\\")){var o=i.globals.dom.baseEl.getElementsByClassName(\\\"apexcharts-pie-area\\\");Array.prototype.forEach.call(o,(function(t){t.setAttribute(\\\"data:pieClicked\\\",\\\"false\\\");var e=t.getAttribute(\\\"data:pathOrig\\\");t.setAttribute(\\\"d\\\",e)})),r.attr(\\\"data:pieClicked\\\",\\\"true\\\");var n=parseInt(r.attr(\\\"data:startAngle\\\"),10),l=parseInt(r.attr(\\\"data:angle\\\"),10);e=a.getPiePath({me:a,startAngle:n,angle:l,size:s}),360!==l&&r.plot(e)}else{r.attr({\\\"data:pieClicked\\\":\\\"false\\\"}),this.revertDataLabelsInner(r.node,this.donutDataLabels);var h=r.attr(\\\"data:pathOrig\\\");r.attr({d:h})}}},{key:\\\"getChangedPath\\\",value:function(t,e){var i=\\\"\\\";return this.dynamicAnim&&this.w.globals.dataChanged&&(i=this.getPiePath({me:this,startAngle:t,angle:e-t,size:this.size})),i}},{key:\\\"getPiePath\\\",value:function(t){var e=t.me,i=t.startAngle,a=t.angle,s=t.size,r=i,o=Math.PI*(r-90)/180,n=a+i;Math.ceil(n)>=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle&&(n=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle-.01),Math.ceil(n)>this.fullAngle&&(n-=this.fullAngle);var l=Math.PI*(n-90)/180,h=e.centerX+s*Math.cos(o),c=e.centerY+s*Math.sin(o),d=e.centerX+s*Math.cos(l),g=e.centerY+s*Math.sin(l),u=p.polarToCartesian(e.centerX,e.centerY,e.donutSize,n),f=p.polarToCartesian(e.centerX,e.centerY,e.donutSize,r),x=a>180?1:0,b=[\\\"M\\\",h,c,\\\"A\\\",s,s,0,x,1,d,g];return\\\"donut\\\"===e.chartType?[].concat(b,[\\\"L\\\",u.x,u.y,\\\"A\\\",e.donutSize,e.donutSize,0,x,0,f.x,f.y,\\\"L\\\",h,c,\\\"z\\\"]).join(\\\" \\\"):\\\"pie\\\"===e.chartType||\\\"polarArea\\\"===e.chartType?[].concat(b,[\\\"L\\\",e.centerX,e.centerY,\\\"L\\\",h,c]).join(\\\" \\\"):[].concat(b).join(\\\" \\\")}},{key:\\\"drawPolarElements\\\",value:function(t){var e=this.w,i=new j(this.ctx),a=new b(this.ctx),s=new kt(this.ctx),r=a.group(),o=a.group(),n=i.niceScale(0,Math.ceil(this.maxY),e.config.yaxis[0].tickAmount,0,!0),l=n.result.reverse(),h=n.result.length;this.maxY=n.niceMax;for(var c=e.globals.radialSize,d=c/(h-1),g=0;g<h-1;g++){var u=a.drawCircle(c);if(u.attr({cx:this.centerX,cy:this.centerY,fill:\\\"none\\\",\\\"stroke-width\\\":e.config.plotOptions.polarArea.rings.strokeWidth,stroke:e.config.plotOptions.polarArea.rings.strokeColor}),e.config.yaxis[0].show){var p=s.drawYAxisTexts(this.centerX,this.centerY-c+parseInt(e.config.yaxis[0].labels.style.fontSize,10)/2,g,l[g]);o.add(p)}r.add(u),c-=d}this.drawSpokes(t),t.add(r),t.add(o)}},{key:\\\"renderInnerDataLabels\\\",value:function(t,e){var i=this.w,a=new b(this.ctx),s=a.group({class:\\\"apexcharts-datalabels-group\\\",transform:\\\"translate(\\\".concat(e.translateX?e.translateX:0,\\\", \\\").concat(e.translateY?e.translateY:0,\\\") scale(\\\").concat(i.config.plotOptions.pie.customScale,\\\")\\\")}),r=t.total.show;s.node.style.opacity=e.opacity;var o,n,l=e.centerX,h=e.centerY;o=void 0===t.name.color?i.globals.colors[0]:t.name.color;var c=t.name.fontSize,d=t.name.fontFamily,g=t.value.fontWeight;n=void 0===t.value.color?i.config.chart.foreColor:t.value.color;var u=t.value.formatter,p=\\\"\\\",f=\\\"\\\";if(r?(o=t.total.color,c=t.total.fontSize,d=t.total.fontFamily,g=t.total.fontWeight,f=t.total.label,p=t.total.formatter(i)):1===i.globals.series.length&&(p=u(i.globals.series[0],i),f=i.globals.seriesNames[0]),f&&(f=t.name.formatter(f,t.total.show,i)),t.name.show){var x=a.drawText({x:l,y:h+parseFloat(t.name.offsetY),text:f,textAnchor:\\\"middle\\\",foreColor:o,fontSize:c,fontWeight:g,fontFamily:d});x.node.classList.add(\\\"apexcharts-datalabel-label\\\"),s.add(x)}if(t.value.show){var v=t.name.show?parseFloat(t.value.offsetY)+16:t.value.offsetY,m=a.drawText({x:l,y:h+v,text:p,textAnchor:\\\"middle\\\",foreColor:n,fontWeight:t.value.fontWeight,fontSize:t.value.fontSize,fontFamily:t.value.fontFamily});m.node.classList.add(\\\"apexcharts-datalabel-value\\\"),s.add(m)}return s}},{key:\\\"printInnerLabels\\\",value:function(t,e,i,a){var s,r=this.w;a?s=void 0===t.name.color?r.globals.colors[parseInt(a.parentNode.getAttribute(\\\"rel\\\"),10)-1]:t.name.color:r.globals.series.length>1&&t.total.show&&(s=t.total.color);var o=r.globals.dom.baseEl.querySelector(\\\".apexcharts-datalabel-label\\\"),n=r.globals.dom.baseEl.querySelector(\\\".apexcharts-datalabel-value\\\");i=(0,t.value.formatter)(i,r),a||\\\"function\\\"!=typeof t.total.formatter||(i=t.total.formatter(r));var l=e===t.total.label;e=t.name.formatter(e,l,r),null!==o&&(o.textContent=e),null!==n&&(n.textContent=i),null!==o&&(o.style.fill=s)}},{key:\\\"printDataLabelsInner\\\",value:function(t,e){var i=this.w,a=t.getAttribute(\\\"data:value\\\"),s=i.globals.seriesNames[parseInt(t.parentNode.getAttribute(\\\"rel\\\"),10)-1];i.globals.series.length>1&&this.printInnerLabels(e,s,a,t);var r=i.globals.dom.baseEl.querySelector(\\\".apexcharts-datalabels-group\\\");null!==r&&(r.style.opacity=1)}},{key:\\\"drawSpokes\\\",value:function(t){var e=this,i=this.w,a=new b(this.ctx),s=i.config.plotOptions.polarArea.spokes;if(0!==s.strokeWidth){for(var r=[],o=360/i.globals.series.length,n=0;n<i.globals.series.length;n++)r.push(p.polarToCartesian(this.centerX,this.centerY,i.globals.radialSize,i.config.plotOptions.pie.startAngle+o*n));r.forEach((function(i,r){var o=a.drawLine(i.x,i.y,e.centerX,e.centerY,Array.isArray(s.connectorColors)?s.connectorColors[r]:s.connectorColors);t.add(o)}))}}},{key:\\\"revertDataLabelsInner\\\",value:function(t,e,i){var a=this,s=this.w,r=s.globals.dom.baseEl.querySelector(\\\".apexcharts-datalabels-group\\\"),o=!1,n=s.globals.dom.baseEl.getElementsByClassName(\\\"apexcharts-pie-area\\\"),l=function(t){var i=t.makeSliceOut,s=t.printLabel;Array.prototype.forEach.call(n,(function(t){\\\"true\\\"===t.getAttribute(\\\"data:pieClicked\\\")&&(i&&(o=!0),s&&a.printDataLabelsInner(t,e))}))};if(l({makeSliceOut:!0,printLabel:!1}),e.total.show&&s.globals.series.length>1)o&&!e.total.showAlways?l({makeSliceOut:!1,printLabel:!0}):this.printInnerLabels(e,e.total.label,e.total.formatter(s));else if(l({makeSliceOut:!1,printLabel:!0}),!o)if(s.globals.selectedDataPoints.length&&s.globals.series.length>1)if(s.globals.selectedDataPoints[0].length>0){var h=s.globals.selectedDataPoints[0],c=s.globals.dom.baseEl.querySelector(\\\".apexcharts-\\\".concat(this.chartType.toLowerCase(),\\\"-slice-\\\").concat(h));this.printDataLabelsInner(c,e)}else r&&s.globals.selectedDataPoints.length&&0===s.globals.selectedDataPoints[0].length&&(r.style.opacity=0);else r&&s.globals.series.length>1&&(r.style.opacity=0)}}]),t}(),St=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animDur=0;var i=this.w;this.graphics=new b(this.ctx),this.lineColorArr=void 0!==i.globals.stroke.colors?i.globals.stroke.colors:i.globals.colors,this.defaultSize=i.globals.svgHeight<i.globals.svgWidth?i.globals.gridHeight+1.5*i.globals.goldenPadding:i.globals.gridWidth,this.isLog=i.config.yaxis[0].logarithmic,this.coreUtils=new y(this.ctx),this.maxValue=this.isLog?this.coreUtils.getLogVal(i.globals.maxY,0):i.globals.maxY,this.minValue=this.isLog?this.coreUtils.getLogVal(this.w.globals.minY,0):i.globals.minY,this.polygons=i.config.plotOptions.radar.polygons,this.strokeWidth=i.config.stroke.show?i.config.stroke.width:0,this.size=this.defaultSize/2.1-this.strokeWidth-i.config.chart.dropShadow.blur,i.config.xaxis.labels.show&&(this.size=this.size-i.globals.xAxisLabelsWidth/1.75),void 0!==i.config.plotOptions.radar.size&&(this.size=i.config.plotOptions.radar.size),this.dataRadiusOfPercent=[],this.dataRadius=[],this.angleArr=[],this.yaxisLabelsTextsPos=[]}return r(t,[{key:\\\"draw\\\",value:function(t){var i=this,a=this.w,s=new L(this.ctx),r=[],o=new M(this.ctx);t.length&&(this.dataPointsLen=t[a.globals.maxValsInArrayIndex].length),this.disAngle=2*Math.PI/this.dataPointsLen;var n=a.globals.gridWidth/2,l=a.globals.gridHeight/2,h=n+a.config.plotOptions.radar.offsetX,c=l+a.config.plotOptions.radar.offsetY,d=this.graphics.group({class:\\\"apexcharts-radar-series apexcharts-plot-series\\\",transform:\\\"translate(\\\".concat(h||0,\\\", \\\").concat(c||0,\\\")\\\")}),g=[],u=null,f=null;if(this.yaxisLabels=this.graphics.group({class:\\\"apexcharts-yaxis\\\"}),t.forEach((function(t,n){var l=t.length===a.globals.dataPoints,h=i.graphics.group().attr({class:\\\"apexcharts-series\\\",\\\"data:longestSeries\\\":l,seriesName:p.escapeString(a.globals.seriesNames[n]),rel:n+1,\\\"data:realIndex\\\":n});i.dataRadiusOfPercent[n]=[],i.dataRadius[n]=[],i.angleArr[n]=[],t.forEach((function(t,e){var a=Math.abs(i.maxValue-i.minValue);t+=Math.abs(i.minValue),i.isLog&&(t=i.coreUtils.getLogVal(t,0)),i.dataRadiusOfPercent[n][e]=t/a,i.dataRadius[n][e]=i.dataRadiusOfPercent[n][e]*i.size,i.angleArr[n][e]=e*i.disAngle})),g=i.getDataPointsPos(i.dataRadius[n],i.angleArr[n]);var c=i.createPaths(g,{x:0,y:0});u=i.graphics.group({class:\\\"apexcharts-series-markers-wrap apexcharts-element-hidden\\\"}),f=i.graphics.group({class:\\\"apexcharts-datalabels\\\",\\\"data:realIndex\\\":n}),a.globals.delayedElements.push({el:u.node,index:n});var d={i:n,realIndex:n,animationDelay:n,initialSpeed:a.config.chart.animations.speed,dataChangeSpeed:a.config.chart.animations.dynamicAnimation.speed,className:\\\"apexcharts-radar\\\",shouldClipToGrid:!1,bindEventsOnPaths:!1,stroke:a.globals.stroke.colors[n],strokeLineCap:a.config.stroke.lineCap},b=null;a.globals.previousPaths.length>0&&(b=i.getPreviousPath(n));for(var v=0;v<c.linePathsTo.length;v++){var m=i.graphics.renderPaths(e(e({},d),{},{pathFrom:null===b?c.linePathsFrom[v]:b,pathTo:c.linePathsTo[v],strokeWidth:Array.isArray(i.strokeWidth)?i.strokeWidth[n]:i.strokeWidth,fill:\\\"none\\\",drawShadow:!1}));h.add(m);var y=s.fillPath({seriesNumber:n}),w=i.graphics.renderPaths(e(e({},d),{},{pathFrom:null===b?c.areaPathsFrom[v]:b,pathTo:c.areaPathsTo[v],strokeWidth:0,fill:y,drawShadow:!1}));if(a.config.chart.dropShadow.enabled){var k=new x(i.ctx),A=a.config.chart.dropShadow;k.dropShadow(w,Object.assign({},A,{noUserSpaceOnUse:!0}),n)}h.add(w)}t.forEach((function(t,s){var r=new P(i.ctx).getMarkerConfig({cssClass:\\\"apexcharts-marker\\\",seriesIndex:n,dataPointIndex:s}),l=i.graphics.drawMarker(g[s].x,g[s].y,r);l.attr(\\\"rel\\\",s),l.attr(\\\"j\\\",s),l.attr(\\\"index\\\",n),l.node.setAttribute(\\\"default-marker-size\\\",r.pSize);var c=i.graphics.group({class:\\\"apexcharts-series-markers\\\"});c&&c.add(l),u.add(c),h.add(u);var d=a.config.dataLabels;if(d.enabled){var p=d.formatter(a.globals.series[n][s],{seriesIndex:n,dataPointIndex:s,w:a});o.plotDataLabelsText({x:g[s].x,y:g[s].y,text:p,textAnchor:\\\"middle\\\",i:n,j:n,parent:f,offsetCorrection:!1,dataLabelsConfig:e({},d)})}h.add(f)})),r.push(h)})),this.drawPolygons({parent:d}),a.config.xaxis.labels.show){var b=this.drawXAxisTexts();d.add(b)}return r.forEach((function(t){d.add(t)})),d.add(this.yaxisLabels),d}},{key:\\\"drawPolygons\\\",value:function(t){for(var e=this,i=this.w,a=t.parent,s=new kt(this.ctx),r=i.globals.yAxisScale[0].result.reverse(),o=r.length,n=[],l=this.size/(o-1),h=0;h<o;h++)n[h]=l*h;n.reverse();var c=[],d=[];n.forEach((function(t,i){var a=p.getPolygonPos(t,e.dataPointsLen),s=\\\"\\\";a.forEach((function(t,a){if(0===i){var r=e.graphics.drawLine(t.x,t.y,0,0,Array.isArray(e.polygons.connectorColors)?e.polygons.connectorColors[a]:e.polygons.connectorColors);d.push(r)}0===a&&e.yaxisLabelsTextsPos.push({x:t.x,y:t.y}),s+=t.x+\\\",\\\"+t.y+\\\" \\\"})),c.push(s)})),c.forEach((function(t,s){var r=e.polygons.strokeColors,o=e.polygons.strokeWidth,n=e.graphics.drawPolygon(t,Array.isArray(r)?r[s]:r,Array.isArray(o)?o[s]:o,i.globals.radarPolygons.fill.colors[s]);a.add(n)})),d.forEach((function(t){a.add(t)})),i.config.yaxis[0].show&&this.yaxisLabelsTextsPos.forEach((function(t,i){var a=s.drawYAxisTexts(t.x,t.y,i,r[i]);e.yaxisLabels.add(a)}))}},{key:\\\"drawXAxisTexts\\\",value:function(){var t=this,i=this.w,a=i.config.xaxis.labels,s=this.graphics.group({class:\\\"apexcharts-xaxis\\\"}),r=p.getPolygonPos(this.size,this.dataPointsLen);return i.globals.labels.forEach((function(o,n){var l=i.config.xaxis.labels.formatter,h=new M(t.ctx);if(r[n]){var c=t.getTextPos(r[n],t.size),d=l(o,{seriesIndex:-1,dataPointIndex:n,w:i});h.plotDataLabelsText({x:c.newX,y:c.newY,text:d,textAnchor:c.textAnchor,i:n,j:n,parent:s,color:Array.isArray(a.style.colors)&&a.style.colors[n]?a.style.colors[n]:\\\"#a8a8a8\\\",dataLabelsConfig:e({textAnchor:c.textAnchor,dropShadow:{enabled:!1}},a),offsetCorrection:!1})}})),s}},{key:\\\"createPaths\\\",value:function(t,e){var i=this,a=[],s=[],r=[],o=[];if(t.length){s=[this.graphics.move(e.x,e.y)],o=[this.graphics.move(e.x,e.y)];var n=this.graphics.move(t[0].x,t[0].y),l=this.graphics.move(t[0].x,t[0].y);t.forEach((function(e,a){n+=i.graphics.line(e.x,e.y),l+=i.graphics.line(e.x,e.y),a===t.length-1&&(n+=\\\"Z\\\",l+=\\\"Z\\\")})),a.push(n),r.push(l)}return{linePathsFrom:s,linePathsTo:a,areaPathsFrom:o,areaPathsTo:r}}},{key:\\\"getTextPos\\\",value:function(t,e){var i=\\\"middle\\\",a=t.x,s=t.y;return Math.abs(t.x)>=10?t.x>0?(i=\\\"start\\\",a+=10):t.x<0&&(i=\\\"end\\\",a-=10):i=\\\"middle\\\",Math.abs(t.y)>=e-10&&(t.y<0?s-=10:t.y>0&&(s+=10)),{textAnchor:i,newX:a,newY:s}}},{key:\\\"getPreviousPath\\\",value:function(t){for(var e=this.w,i=null,a=0;a<e.globals.previousPaths.length;a++){var s=e.globals.previousPaths[a];s.paths.length>0&&parseInt(s.realIndex,10)===parseInt(t,10)&&void 0!==e.globals.previousPaths[a].paths[0]&&(i=e.globals.previousPaths[a].paths[0].d)}return i}},{key:\\\"getDataPointsPos\\\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.dataPointsLen;t=t||[],e=e||[];for(var a=[],s=0;s<i;s++){var r={};r.x=t[s]*Math.sin(e[s]),r.y=-t[s]*Math.cos(e[s]),a.push(r)}return a}}]),t}(),Ct=function(t){n(i,At);var e=d(i);function i(t){var s;a(this,i),(s=e.call(this,t)).ctx=t,s.w=t.w,s.animBeginArr=[0],s.animDur=0;var r=s.w;return s.startAngle=r.config.plotOptions.radialBar.startAngle,s.endAngle=r.config.plotOptions.radialBar.endAngle,s.totalAngle=Math.abs(r.config.plotOptions.radialBar.endAngle-r.config.plotOptions.radialBar.startAngle),s.trackStartAngle=r.config.plotOptions.radialBar.track.startAngle,s.trackEndAngle=r.config.plotOptions.radialBar.track.endAngle,s.radialDataLabels=r.config.plotOptions.radialBar.dataLabels,s.trackStartAngle||(s.trackStartAngle=s.startAngle),s.trackEndAngle||(s.trackEndAngle=s.endAngle),360===s.endAngle&&(s.endAngle=359.99),s.margin=parseInt(r.config.plotOptions.radialBar.track.margin,10),s}return r(i,[{key:\\\"draw\\\",value:function(t){var e=this.w,i=new b(this.ctx),a=i.group({class:\\\"apexcharts-radialbar\\\"});if(e.globals.noData)return a;var s=i.group(),r=this.defaultSize/2,o=e.globals.gridWidth/2,n=this.defaultSize/2.05;e.config.chart.sparkline.enabled||(n=n-e.config.stroke.width-e.config.chart.dropShadow.blur);var l=e.globals.fill.colors;if(e.config.plotOptions.radialBar.track.show){var h=this.drawTracks({size:n,centerX:o,centerY:r,colorArr:l,series:t});s.add(h)}var c=this.drawArcs({size:n,centerX:o,centerY:r,colorArr:l,series:t}),d=360;e.config.plotOptions.radialBar.startAngle<0&&(d=this.totalAngle);var g=(360-d)/360;if(e.globals.radialSize=n-n*g,this.radialDataLabels.value.show){var u=Math.max(this.radialDataLabels.value.offsetY,this.radialDataLabels.name.offsetY);e.globals.radialSize+=u*g}return s.add(c.g),\\\"front\\\"===e.config.plotOptions.radialBar.hollow.position&&(c.g.add(c.elHollow),c.dataLabels&&c.g.add(c.dataLabels)),a.add(s),a}},{key:\\\"drawTracks\\\",value:function(t){var e=this.w,i=new b(this.ctx),a=i.group({class:\\\"apexcharts-tracks\\\"}),s=new x(this.ctx),r=new L(this.ctx),o=this.getStrokeWidth(t);t.size=t.size-o/2;for(var n=0;n<t.series.length;n++){var l=i.group({class:\\\"apexcharts-radialbar-track apexcharts-track\\\"});a.add(l),l.attr({rel:n+1}),t.size=t.size-o-this.margin;var h=e.config.plotOptions.radialBar.track,c=r.fillPath({seriesNumber:0,size:t.size,fillColors:Array.isArray(h.background)?h.background[n]:h.background,solid:!0}),d=this.trackStartAngle,g=this.trackEndAngle;Math.abs(g)+Math.abs(d)>=360&&(g=360-Math.abs(this.startAngle)-.1);var u=i.drawPath({d:\\\"\\\",stroke:c,strokeWidth:o*parseInt(h.strokeWidth,10)/100,fill:\\\"none\\\",strokeOpacity:h.opacity,classes:\\\"apexcharts-radialbar-area\\\"});if(h.dropShadow.enabled){var p=h.dropShadow;s.dropShadow(u,p)}l.add(u),u.attr(\\\"id\\\",\\\"apexcharts-radialbarTrack-\\\"+n),this.animatePaths(u,{centerX:t.centerX,centerY:t.centerY,endAngle:g,startAngle:d,size:t.size,i:n,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:e.globals.easing})}return a}},{key:\\\"drawArcs\\\",value:function(t){var e=this.w,i=new b(this.ctx),a=new L(this.ctx),s=new x(this.ctx),r=i.group(),o=this.getStrokeWidth(t);t.size=t.size-o/2;var n=e.config.plotOptions.radialBar.hollow.background,l=t.size-o*t.series.length-this.margin*t.series.length-o*parseInt(e.config.plotOptions.radialBar.track.strokeWidth,10)/100/2,h=l-e.config.plotOptions.radialBar.hollow.margin;void 0!==e.config.plotOptions.radialBar.hollow.image&&(n=this.drawHollowImage(t,r,l,n));var c=this.drawHollow({size:h,centerX:t.centerX,centerY:t.centerY,fill:n||\\\"transparent\\\"});if(e.config.plotOptions.radialBar.hollow.dropShadow.enabled){var d=e.config.plotOptions.radialBar.hollow.dropShadow;s.dropShadow(c,d)}var g=1;!this.radialDataLabels.total.show&&e.globals.series.length>1&&(g=0);var u=null;this.radialDataLabels.show&&(u=this.renderInnerDataLabels(this.radialDataLabels,{hollowSize:l,centerX:t.centerX,centerY:t.centerY,opacity:g})),\\\"back\\\"===e.config.plotOptions.radialBar.hollow.position&&(r.add(c),u&&r.add(u));var f=!1;e.config.plotOptions.radialBar.inverseOrder&&(f=!0);for(var v=f?t.series.length-1:0;f?v>=0:v<t.series.length;f?v--:v++){var m=i.group({class:\\\"apexcharts-series apexcharts-radial-series\\\",seriesName:p.escapeString(e.globals.seriesNames[v])});r.add(m),m.attr({rel:v+1,\\\"data:realIndex\\\":v}),this.ctx.series.addCollapsedClassToSeries(m,v),t.size=t.size-o-this.margin;var y=a.fillPath({seriesNumber:v,size:t.size,value:t.series[v]}),w=this.startAngle,k=void 0,A=p.negToZero(t.series[v]>100?100:t.series[v])/100,S=Math.round(this.totalAngle*A)+this.startAngle,C=void 0;e.globals.dataChanged&&(k=this.startAngle,C=Math.round(this.totalAngle*p.negToZero(e.globals.previousPaths[v])/100)+k),Math.abs(S)+Math.abs(w)>=360&&(S-=.01),Math.abs(C)+Math.abs(k)>=360&&(C-=.01);var P=S-w,T=Array.isArray(e.config.stroke.dashArray)?e.config.stroke.dashArray[v]:e.config.stroke.dashArray,M=i.drawPath({d:\\\"\\\",stroke:y,strokeWidth:o,fill:\\\"none\\\",fillOpacity:e.config.fill.opacity,classes:\\\"apexcharts-radialbar-area apexcharts-radialbar-slice-\\\"+v,strokeDashArray:T});if(b.setAttrs(M.node,{\\\"data:angle\\\":P,\\\"data:value\\\":t.series[v]}),e.config.chart.dropShadow.enabled){var I=e.config.chart.dropShadow;s.dropShadow(M,I,v)}s.setSelectionFilter(M,0,v),this.addListeners(M,this.radialDataLabels),m.add(M),M.attr({index:0,j:v});var z=0;!this.initialAnim||e.globals.resized||e.globals.dataChanged||(z=(S-w)/360*e.config.chart.animations.speed,this.animDur=z/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur)),e.globals.dataChanged&&(z=(S-w)/360*e.config.chart.animations.dynamicAnimation.speed,this.animDur=z/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur)),this.animatePaths(M,{centerX:t.centerX,centerY:t.centerY,endAngle:S,startAngle:w,prevEndAngle:C,prevStartAngle:k,size:t.size,i:v,totalItems:2,animBeginArr:this.animBeginArr,dur:z,shouldSetPrevPaths:!0,easing:e.globals.easing})}return{g:r,elHollow:c,dataLabels:u}}},{key:\\\"drawHollow\\\",value:function(t){var e=new b(this.ctx).drawCircle(2*t.size);return e.attr({class:\\\"apexcharts-radialbar-hollow\\\",cx:t.centerX,cy:t.centerY,r:t.size,fill:t.fill}),e}},{key:\\\"drawHollowImage\\\",value:function(t,e,i,a){var s=this.w,r=new L(this.ctx),o=p.randomId(),n=s.config.plotOptions.radialBar.hollow.image;if(s.config.plotOptions.radialBar.hollow.imageClipped)r.clippedImgArea({width:i,height:i,image:n,patternID:\\\"pattern\\\".concat(s.globals.cuid).concat(o)}),a=\\\"url(#pattern\\\".concat(s.globals.cuid).concat(o,\\\")\\\");else{var l=s.config.plotOptions.radialBar.hollow.imageWidth,h=s.config.plotOptions.radialBar.hollow.imageHeight;if(void 0===l&&void 0===h){var c=s.globals.dom.Paper.image(n).loaded((function(e){this.move(t.centerX-e.width/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-e.height/2+s.config.plotOptions.radialBar.hollow.imageOffsetY)}));e.add(c)}else{var d=s.globals.dom.Paper.image(n).loaded((function(e){this.move(t.centerX-l/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-h/2+s.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(l,h)}));e.add(d)}}return a}},{key:\\\"getStrokeWidth\\\",value:function(t){var e=this.w;return t.size*(100-parseInt(e.config.plotOptions.radialBar.hollow.size,10))/100/(t.series.length+1)-this.margin}}]),i}(),Lt=function(){function t(e){a(this,t),this.w=e.w,this.lineCtx=e}return r(t,[{key:\\\"sameValueSeriesFix\\\",value:function(t,e){var i=this.w;if(\\\"line\\\"===i.config.chart.type&&(\\\"gradient\\\"===i.config.fill.type||\\\"gradient\\\"===i.config.fill.type[t])&&new y(this.lineCtx.ctx,i).seriesHaveSameValues(t)){var a=e[t].slice();a[a.length-1]=a[a.length-1]+1e-6,e[t]=a}return e}},{key:\\\"calculatePoints\\\",value:function(t){var e=t.series,i=t.realIndex,a=t.x,s=t.y,r=t.i,o=t.j,n=t.prevY,l=this.w,h=[],c=[];if(0===o){var d=this.lineCtx.categoryAxisCorrection+l.config.markers.offsetX;l.globals.isXNumeric&&(d=(l.globals.seriesX[i][0]-l.globals.minX)/this.lineCtx.xRatio+l.config.markers.offsetX),h.push(d),c.push(p.isNumber(e[r][0])?n+l.config.markers.offsetY:null),h.push(a+l.config.markers.offsetX),c.push(p.isNumber(e[r][o+1])?s+l.config.markers.offsetY:null)}else h.push(a+l.config.markers.offsetX),c.push(p.isNumber(e[r][o+1])?s+l.config.markers.offsetY:null);return{x:h,y:c}}},{key:\\\"checkPreviousPaths\\\",value:function(t){for(var e=t.pathFromLine,i=t.pathFromArea,a=t.realIndex,s=this.w,r=0;r<s.globals.previousPaths.length;r++){var o=s.globals.previousPaths[r];(\\\"line\\\"===o.type||\\\"area\\\"===o.type)&&o.paths.length>0&&parseInt(o.realIndex,10)===parseInt(a,10)&&(\\\"line\\\"===o.type?(this.lineCtx.appendPathFrom=!1,e=s.globals.previousPaths[r].paths[0].d):\\\"area\\\"===o.type&&(this.lineCtx.appendPathFrom=!1,i=s.globals.previousPaths[r].paths[0].d,s.config.stroke.show&&s.globals.previousPaths[r].paths[1]&&(e=s.globals.previousPaths[r].paths[1].d)))}return{pathFromLine:e,pathFromArea:i}}},{key:\\\"determineFirstPrevY\\\",value:function(t){var e=t.i,i=t.series,a=t.prevY,s=t.lineYPosition,r=this.w;if(void 0!==i[e][0])a=(s=r.config.chart.stacked&&e>0?this.lineCtx.prevSeriesY[e-1][0]:this.lineCtx.zeroY)-i[e][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]+2*(this.lineCtx.isReversed?i[e][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]:0);else if(r.config.chart.stacked&&e>0&&void 0===i[e][0])for(var o=e-1;o>=0;o--)if(null!==i[o][0]&&void 0!==i[o][0]){a=s=this.lineCtx.prevSeriesY[o][0];break}return{prevY:a,lineYPosition:s}}}]),t}(),Pt=function(){function t(e,i,s){a(this,t),this.ctx=e,this.w=e.w,this.xyRatios=i,this.pointsChart=!(\\\"bubble\\\"!==this.w.config.chart.type&&\\\"scatter\\\"!==this.w.config.chart.type)||s,this.scatter=new T(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.lineHelpers=new Lt(this),this.markers=new P(this.ctx),this.prevSeriesY=[],this.categoryAxisCorrection=0,this.yaxisIndex=0}return r(t,[{key:\\\"draw\\\",value:function(t,e,i){var a=this.w,s=new b(this.ctx),r=a.globals.comboCharts?e:a.config.chart.type,o=s.group({class:\\\"apexcharts-\\\".concat(r,\\\"-series apexcharts-plot-series\\\")}),n=new y(this.ctx,a);this.yRatio=this.xyRatios.yRatio,this.zRatio=this.xyRatios.zRatio,this.xRatio=this.xyRatios.xRatio,this.baseLineY=this.xyRatios.baseLineY,t=n.getLogSeries(t),this.yRatio=n.getLogYRatios(this.yRatio);for(var l=[],h=0;h<t.length;h++){t=this.lineHelpers.sameValueSeriesFix(h,t);var c=a.globals.comboCharts?i[h]:h;this._initSerieVariables(t,h,c);var d=[],g=[],u=a.globals.padHorizontal+this.categoryAxisCorrection;this.ctx.series.addCollapsedClassToSeries(this.elSeries,c),a.globals.isXNumeric&&a.globals.seriesX.length>0&&(u=(a.globals.seriesX[c][0]-a.globals.minX)/this.xRatio),g.push(u);var p,f=u,x=f,v=this.zeroY;v=this.lineHelpers.determineFirstPrevY({i:h,series:t,prevY:v,lineYPosition:0}).prevY,d.push(v),p=v;var m=this._calculatePathsFrom({series:t,i:h,realIndex:c,prevX:x,prevY:v}),w=this._iterateOverDataPoints({series:t,realIndex:c,i:h,x:u,y:1,pX:f,pY:p,pathsFrom:m,linePaths:[],areaPaths:[],seriesIndex:i,lineYPosition:0,xArrj:g,yArrj:d});this._handlePaths({type:r,realIndex:c,i:h,paths:w}),this.elSeries.add(this.elPointsMain),this.elSeries.add(this.elDataLabelsWrap),l.push(this.elSeries)}if(a.config.chart.stacked)for(var k=l.length;k>0;k--)o.add(l[k-1]);else for(var A=0;A<l.length;A++)o.add(l[A]);return o}},{key:\\\"_initSerieVariables\\\",value:function(t,e,i){var a=this.w,s=new b(this.ctx);this.xDivision=a.globals.gridWidth/(a.globals.dataPoints-(\\\"on\\\"===a.config.xaxis.tickPlacement?1:0)),this.strokeWidth=Array.isArray(a.config.stroke.width)?a.config.stroke.width[i]:a.config.stroke.width,this.yRatio.length>1&&(this.yaxisIndex=i),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed,this.zeroY=a.globals.gridHeight-this.baseLineY[this.yaxisIndex]-(this.isReversed?a.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),this.areaBottomY=this.zeroY,(this.zeroY>a.globals.gridHeight||\\\"end\\\"===a.config.plotOptions.area.fillTo)&&(this.areaBottomY=a.globals.gridHeight),this.categoryAxisCorrection=this.xDivision/2,this.elSeries=s.group({class:\\\"apexcharts-series\\\",seriesName:p.escapeString(a.globals.seriesNames[i])}),this.elPointsMain=s.group({class:\\\"apexcharts-series-markers-wrap\\\",\\\"data:realIndex\\\":i}),this.elDataLabelsWrap=s.group({class:\\\"apexcharts-datalabels\\\",\\\"data:realIndex\\\":i});var r=t[e].length===a.globals.dataPoints;this.elSeries.attr({\\\"data:longestSeries\\\":r,rel:e+1,\\\"data:realIndex\\\":i}),this.appendPathFrom=!0}},{key:\\\"_calculatePathsFrom\\\",value:function(t){var e,i,a,s,r=t.series,o=t.i,n=t.realIndex,l=t.prevX,h=t.prevY,c=this.w,d=new b(this.ctx);if(null===r[o][0]){for(var g=0;g<r[o].length;g++)if(null!==r[o][g]){l=this.xDivision*g,h=this.zeroY-r[o][g]/this.yRatio[this.yaxisIndex],e=d.move(l,h),i=d.move(l,this.areaBottomY);break}}else e=d.move(l,h),i=d.move(l,this.areaBottomY)+d.line(l,h);if(a=d.move(-1,this.zeroY)+d.line(-1,this.zeroY),s=d.move(-1,this.zeroY)+d.line(-1,this.zeroY),c.globals.previousPaths.length>0){var u=this.lineHelpers.checkPreviousPaths({pathFromLine:a,pathFromArea:s,realIndex:n});a=u.pathFromLine,s=u.pathFromArea}return{prevX:l,prevY:h,linePath:e,areaPath:i,pathFromLine:a,pathFromArea:s}}},{key:\\\"_handlePaths\\\",value:function(t){var i=t.type,a=t.realIndex,s=t.i,r=t.paths,o=this.w,n=new b(this.ctx),l=new L(this.ctx);this.prevSeriesY.push(r.yArrj),o.globals.seriesXvalues[a]=r.xArrj,o.globals.seriesYvalues[a]=r.yArrj;var h=o.config.forecastDataPoints;if(h.count>0){var c=o.globals.seriesXvalues[a][o.globals.seriesXvalues[a].length-h.count-1],d=n.drawRect(c,0,o.globals.gridWidth,o.globals.gridHeight,0);o.globals.dom.elForecastMask.appendChild(d.node);var g=n.drawRect(0,0,c,o.globals.gridHeight,0);o.globals.dom.elNonForecastMask.appendChild(g.node)}this.pointsChart||o.globals.delayedElements.push({el:this.elPointsMain.node,index:a});var u={i:s,realIndex:a,animationDelay:s,initialSpeed:o.config.chart.animations.speed,dataChangeSpeed:o.config.chart.animations.dynamicAnimation.speed,className:\\\"apexcharts-\\\".concat(i)};if(\\\"area\\\"===i)for(var p=l.fillPath({seriesNumber:a}),f=0;f<r.areaPaths.length;f++){var x=n.renderPaths(e(e({},u),{},{pathFrom:r.pathFromArea,pathTo:r.areaPaths[f],stroke:\\\"none\\\",strokeWidth:0,strokeLineCap:null,fill:p}));this.elSeries.add(x)}if(o.config.stroke.show&&!this.pointsChart){var v=null;v=\\\"line\\\"===i?l.fillPath({seriesNumber:a,i:s}):o.globals.stroke.colors[a];for(var m=0;m<r.linePaths.length;m++){var y=e(e({},u),{},{pathFrom:r.pathFromLine,pathTo:r.linePaths[m],stroke:v,strokeWidth:this.strokeWidth,strokeLineCap:o.config.stroke.lineCap,fill:\\\"none\\\"}),w=n.renderPaths(y);if(this.elSeries.add(w),h.count>0){var k=n.renderPaths(y);k.node.setAttribute(\\\"stroke-dasharray\\\",h.dashArray),h.strokeWidth&&k.node.setAttribute(\\\"stroke-width\\\",h.strokeWidth),this.elSeries.add(k),k.attr(\\\"clip-path\\\",\\\"url(#forecastMask\\\".concat(o.globals.cuid,\\\")\\\")),w.attr(\\\"clip-path\\\",\\\"url(#nonForecastMask\\\".concat(o.globals.cuid,\\\")\\\"))}}}}},{key:\\\"_iterateOverDataPoints\\\",value:function(t){for(var e=t.series,i=t.realIndex,a=t.i,s=t.x,r=t.y,o=t.pX,n=t.pY,l=t.pathsFrom,h=t.linePaths,c=t.areaPaths,d=t.seriesIndex,g=t.lineYPosition,u=t.xArrj,f=t.yArrj,x=this.w,v=new b(this.ctx),m=this.yRatio,y=l.prevY,w=l.linePath,k=l.areaPath,A=l.pathFromLine,S=l.pathFromArea,C=p.isNumber(x.globals.minYArr[i])?x.globals.minYArr[i]:x.globals.minY,L=x.globals.dataPoints>1?x.globals.dataPoints-1:x.globals.dataPoints,P=0;P<L;P++){var T=void 0===e[a][P+1]||null===e[a][P+1];if(x.globals.isXNumeric){var M=x.globals.seriesX[i][P+1];void 0===x.globals.seriesX[i][P+1]&&(M=x.globals.seriesX[i][L-1]),s=(M-x.globals.minX)/this.xRatio}else s+=this.xDivision;if(x.config.chart.stacked)if(a>0&&x.globals.collapsedSeries.length<x.config.series.length-1){g=this.prevSeriesY[function(t){for(var e=t,i=0;i<x.globals.series.length;i++)if(x.globals.collapsedSeriesIndices.indexOf(t)>-1){e--;break}return e>=0?e:0}(a-1)][P+1]}else g=this.zeroY;else g=this.zeroY;r=T?g-C/m[this.yaxisIndex]+2*(this.isReversed?C/m[this.yaxisIndex]:0):g-e[a][P+1]/m[this.yaxisIndex]+2*(this.isReversed?e[a][P+1]/m[this.yaxisIndex]:0),u.push(s),f.push(r);var I=this.lineHelpers.calculatePoints({series:e,x:s,y:r,realIndex:i,i:a,j:P,prevY:y}),z=this._createPaths({series:e,i:a,realIndex:i,j:P,x:s,y:r,pX:o,pY:n,linePath:w,areaPath:k,linePaths:h,areaPaths:c,seriesIndex:d});c=z.areaPaths,h=z.linePaths,o=z.pX,n=z.pY,k=z.areaPath,w=z.linePath,this.appendPathFrom&&(A+=v.line(s,this.zeroY),S+=v.line(s,this.zeroY)),this.handleNullDataPoints(e,I,a,P,i),this._handleMarkersAndLabels({pointsPos:I,series:e,x:s,y:r,prevY:y,i:a,j:P,realIndex:i})}return{yArrj:f,xArrj:u,pathFromArea:S,areaPaths:c,pathFromLine:A,linePaths:h}}},{key:\\\"_handleMarkersAndLabels\\\",value:function(t){var e=t.pointsPos;t.series,t.x,t.y,t.prevY;var i=t.i,a=t.j,s=t.realIndex,r=this.w,o=new M(this.ctx);if(this.pointsChart)this.scatter.draw(this.elSeries,a,{realIndex:s,pointsPos:e,zRatio:this.zRatio,elParent:this.elPointsMain});else{r.globals.series[i].length>1&&this.elPointsMain.node.classList.add(\\\"apexcharts-element-hidden\\\");var n=this.markers.plotChartMarkers(e,s,a+1);null!==n&&this.elPointsMain.add(n)}var l=o.drawDataLabel(e,s,a+1,null);null!==l&&this.elDataLabelsWrap.add(l)}},{key:\\\"_createPaths\\\",value:function(t){var e=t.series,i=t.i,a=t.realIndex,s=t.j,r=t.x,o=t.y,n=t.pX,l=t.pY,h=t.linePath,c=t.areaPath,d=t.linePaths,g=t.areaPaths,u=t.seriesIndex,p=this.w,f=new b(this.ctx),x=p.config.stroke.curve,v=this.areaBottomY;if(Array.isArray(p.config.stroke.curve)&&(x=Array.isArray(u)?p.config.stroke.curve[u[i]]:p.config.stroke.curve[i]),\\\"smooth\\\"===x){var m=.35*(r-n);p.globals.hasNullValues?(null!==e[i][s]&&(null!==e[i][s+1]?(h=f.move(n,l)+f.curve(n+m,l,r-m,o,r+1,o),c=f.move(n+1,l)+f.curve(n+m,l,r-m,o,r+1,o)+f.line(r,v)+f.line(n,v)+\\\"z\\\"):(h=f.move(n,l),c=f.move(n,l)+\\\"z\\\")),d.push(h),g.push(c)):(h+=f.curve(n+m,l,r-m,o,r,o),c+=f.curve(n+m,l,r-m,o,r,o)),n=r,l=o,s===e[i].length-2&&(c=c+f.curve(n,l,r,o,r,v)+f.move(r,o)+\\\"z\\\",p.globals.hasNullValues||(d.push(h),g.push(c)))}else{if(null===e[i][s+1]){h+=f.move(r,o);var y=p.globals.isXNumeric?(p.globals.seriesX[a][s]-p.globals.minX)/this.xRatio:r-this.xDivision;c=c+f.line(y,v)+f.move(r,o)+\\\"z\\\"}null===e[i][s]&&(h+=f.move(r,o),c+=f.move(r,v)),\\\"stepline\\\"===x?(h=h+f.line(r,null,\\\"H\\\")+f.line(null,o,\\\"V\\\"),c=c+f.line(r,null,\\\"H\\\")+f.line(null,o,\\\"V\\\")):\\\"straight\\\"===x&&(h+=f.line(r,o),c+=f.line(r,o)),s===e[i].length-2&&(c=c+f.line(r,v)+f.move(r,o)+\\\"z\\\",d.push(h),g.push(c))}return{linePaths:d,areaPaths:g,pX:n,pY:l,linePath:h,areaPath:c}}},{key:\\\"handleNullDataPoints\\\",value:function(t,e,i,a,s){var r=this.w;if(null===t[i][a]&&r.config.markers.showNullDataPoints||1===t[i].length){var o=this.markers.plotChartMarkers(e,s,a+1,this.strokeWidth-r.config.markers.strokeWidth/2,!0);null!==o&&this.elPointsMain.add(o)}}}]),t}();window.TreemapSquared={},window.TreemapSquared.generate=function(){function t(e,i,a,s){this.xoffset=e,this.yoffset=i,this.height=s,this.width=a,this.shortestEdge=function(){return Math.min(this.height,this.width)},this.getCoordinates=function(t){var e,i=[],a=this.xoffset,s=this.yoffset,o=r(t)/this.height,n=r(t)/this.width;if(this.width>=this.height)for(e=0;e<t.length;e++)i.push([a,s,a+o,s+t[e]/o]),s+=t[e]/o;else for(e=0;e<t.length;e++)i.push([a,s,a+t[e]/n,s+n]),a+=t[e]/n;return i},this.cutArea=function(e){var i;if(this.width>=this.height){var a=e/this.height,s=this.width-a;i=new t(this.xoffset+a,this.yoffset,s,this.height)}else{var r=e/this.width,o=this.height-r;i=new t(this.xoffset,this.yoffset+r,this.width,o)}return i}}function e(e,a,s,o,n){return o=void 0===o?0:o,n=void 0===n?0:n,function(t){var e,i,a=[];for(e=0;e<t.length;e++)for(i=0;i<t[e].length;i++)a.push(t[e][i]);return a}(i(function(t,e){var i,a=[],s=e/r(t);for(i=0;i<t.length;i++)a[i]=t[i]*s;return a}(e,a*s),[],new t(o,n,a,s),[]))}function i(t,e,s,o){var n,l,h;if(0!==t.length)return n=s.shortestEdge(),function(t,e,i){var s;if(0===t.length)return!0;(s=t.slice()).push(e);var r=a(t,i),o=a(s,i);return r>=o}(e,l=t[0],n)?(e.push(l),i(t.slice(1),e,s,o)):(h=s.cutArea(r(e),o),o.push(s.getCoordinates(e)),i(t,[],h,o)),o;o.push(s.getCoordinates(e))}function a(t,e){var i=Math.min.apply(Math,t),a=Math.max.apply(Math,t),s=r(t);return Math.max(Math.pow(e,2)*a/Math.pow(s,2),Math.pow(s,2)/(Math.pow(e,2)*i))}function s(t){return t&&t.constructor===Array}function r(t){var e,i=0;for(e=0;e<t.length;e++)i+=t[e];return i}function o(t){var e,i=0;if(s(t[0]))for(e=0;e<t.length;e++)i+=o(t[e]);else i=r(t);return i}return function t(i,a,r,n,l){n=void 0===n?0:n,l=void 0===l?0:l;var h,c,d=[],g=[];if(s(i[0])){for(c=0;c<i.length;c++)d[c]=o(i[c]);for(h=e(d,a,r,n,l),c=0;c<i.length;c++)g.push(t(i[c],h[c][2]-h[c][0],h[c][3]-h[c][1],h[c][0],h[c][1]))}else g=e(i,a,r,n,l);return g}}();var Tt,Mt,It=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w,this.strokeWidth=this.w.config.stroke.width,this.helpers=new yt(e),this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.labels=[]}return r(t,[{key:\\\"draw\\\",value:function(t){var e=this,i=this.w,a=new b(this.ctx),s=new L(this.ctx),r=a.group({class:\\\"apexcharts-treemap\\\"});if(i.globals.noData)return r;var o=[];return t.forEach((function(t){var e=t.map((function(t){return Math.abs(t)}));o.push(e)})),this.negRange=this.helpers.checkColorRange(),i.config.series.forEach((function(t,i){t.data.forEach((function(t){Array.isArray(e.labels[i])||(e.labels[i]=[]),e.labels[i].push(t.x)}))})),window.TreemapSquared.generate(o,i.globals.gridWidth,i.globals.gridHeight).forEach((function(o,n){var l=a.group({class:\\\"apexcharts-series apexcharts-treemap-series\\\",seriesName:p.escapeString(i.globals.seriesNames[n]),rel:n+1,\\\"data:realIndex\\\":n});if(i.config.chart.dropShadow.enabled){var h=i.config.chart.dropShadow;new x(e.ctx).dropShadow(r,h,n)}var c=a.group({class:\\\"apexcharts-data-labels\\\"});o.forEach((function(r,o){var h=r[0],c=r[1],d=r[2],g=r[3],u=a.drawRect(h,c,d-h,g-c,0,\\\"#fff\\\",1,e.strokeWidth,i.config.plotOptions.treemap.useFillColorAsStroke?f:i.globals.stroke.colors[n]);u.attr({cx:h,cy:c,index:n,i:n,j:o,width:d-h,height:g-c});var p=e.helpers.getShadeColor(i.config.chart.type,n,o,e.negRange),f=p.color;void 0!==i.config.series[n].data[o]&&i.config.series[n].data[o].fillColor&&(f=i.config.series[n].data[o].fillColor);var x=s.fillPath({color:f,seriesNumber:n,dataPointIndex:o});u.node.classList.add(\\\"apexcharts-treemap-rect\\\"),u.attr({fill:x}),e.helpers.addListeners(u);var b={x:h+(d-h)/2,y:c+(g-c)/2,width:0,height:0},v={x:h,y:c,width:d-h,height:g-c};if(i.config.chart.animations.enabled&&!i.globals.dataChanged){var m=1;i.globals.resized||(m=i.config.chart.animations.speed),e.animateTreemap(u,b,v,m)}if(i.globals.dataChanged){var y=1;e.dynamicAnim.enabled&&i.globals.shouldAnimate&&(y=e.dynamicAnim.speed,i.globals.previousPaths[n]&&i.globals.previousPaths[n][o]&&i.globals.previousPaths[n][o].rect&&(b=i.globals.previousPaths[n][o].rect),e.animateTreemap(u,b,v,y))}var w=e.getFontSize(r),k=i.config.dataLabels.formatter(e.labels[n][o],{value:i.globals.series[n][o],seriesIndex:n,dataPointIndex:o,w:i}),A=e.helpers.calculateDataLabels({text:k,x:(h+d)/2,y:(c+g)/2+e.strokeWidth/2+w/3,i:n,j:o,colorProps:p,fontSize:w,series:t});i.config.dataLabels.enabled&&A&&e.rotateToFitLabel(A,k,h,c,d,g),l.add(u),null!==A&&l.add(A)})),l.add(c),r.add(l)})),r}},{key:\\\"getFontSize\\\",value:function(t){var e=this.w;var i,a,s,r,o=function t(e){var i,a=0;if(Array.isArray(e[0]))for(i=0;i<e.length;i++)a+=t(e[i]);else for(i=0;i<e.length;i++)a+=e[i].length;return a}(this.labels)/function t(e){var i,a=0;if(Array.isArray(e[0]))for(i=0;i<e.length;i++)a+=t(e[i]);else for(i=0;i<e.length;i++)a+=1;return a}(this.labels);return i=t[2]-t[0],a=t[3]-t[1],s=i*a,r=Math.pow(s,.5),Math.min(r/o,parseInt(e.config.dataLabels.style.fontSize,10))}},{key:\\\"rotateToFitLabel\\\",value:function(t,e,i,a,s,r){var o=new b(this.ctx),n=o.getTextRects(e);if(n.width+5>s-i&&n.width<=r-a){var l=o.rotateAroundCenter(t.node);t.node.setAttribute(\\\"transform\\\",\\\"rotate(-90 \\\".concat(l.x,\\\" \\\").concat(l.y,\\\")\\\"))}}},{key:\\\"animateTreemap\\\",value:function(t,e,i,a){var s=new f(this.ctx);s.animateRect(t,{x:e.x,y:e.y,width:e.width,height:e.height},{x:i.x,y:i.y,width:i.width,height:i.height},a,(function(){s.animationCompleted(t)}))}}]),t}(),zt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.timeScaleArray=[],this.utc=this.w.config.xaxis.labels.datetimeUTC}return r(t,[{key:\\\"calculateTimeScaleTicks\\\",value:function(t,i){var a=this,s=this.w;if(s.globals.allSeriesCollapsed)return s.globals.labels=[],s.globals.timescaleLabels=[],[];var r=new Y(this.ctx),o=(i-t)/864e5;this.determineInterval(o),s.globals.disableZoomIn=!1,s.globals.disableZoomOut=!1,o<.00011574074074074075?s.globals.disableZoomIn=!0:o>5e4&&(s.globals.disableZoomOut=!0);var n=r.getTimeUnitsfromTimestamp(t,i,this.utc),l=s.globals.gridWidth/o,h=l/24,c=h/60,d=c/60,g=Math.floor(24*o),u=Math.floor(1440*o),p=Math.floor(86400*o),f=Math.floor(o),x=Math.floor(o/30),b=Math.floor(o/365),v={minMillisecond:n.minMillisecond,minSecond:n.minSecond,minMinute:n.minMinute,minHour:n.minHour,minDate:n.minDate,minMonth:n.minMonth,minYear:n.minYear},m={firstVal:v,currentMillisecond:v.minMillisecond,currentSecond:v.minSecond,currentMinute:v.minMinute,currentHour:v.minHour,currentMonthDate:v.minDate,currentDate:v.minDate,currentMonth:v.minMonth,currentYear:v.minYear,daysWidthOnXAxis:l,hoursWidthOnXAxis:h,minutesWidthOnXAxis:c,secondsWidthOnXAxis:d,numberOfSeconds:p,numberOfMinutes:u,numberOfHours:g,numberOfDays:f,numberOfMonths:x,numberOfYears:b};switch(this.tickInterval){case\\\"years\\\":this.generateYearScale(m);break;case\\\"months\\\":case\\\"half_year\\\":this.generateMonthScale(m);break;case\\\"months_days\\\":case\\\"months_fortnight\\\":case\\\"days\\\":case\\\"week_days\\\":this.generateDayScale(m);break;case\\\"hours\\\":this.generateHourScale(m);break;case\\\"minutes_fives\\\":case\\\"minutes\\\":this.generateMinuteScale(m);break;case\\\"seconds_tens\\\":case\\\"seconds_fives\\\":case\\\"seconds\\\":this.generateSecondScale(m)}var y=this.timeScaleArray.map((function(t){var i={position:t.position,unit:t.unit,year:t.year,day:t.day?t.day:1,hour:t.hour?t.hour:0,month:t.month+1};return\\\"month\\\"===t.unit?e(e({},i),{},{day:1,value:t.value+1}):\\\"day\\\"===t.unit||\\\"hour\\\"===t.unit?e(e({},i),{},{value:t.value}):\\\"minute\\\"===t.unit?e(e({},i),{},{value:t.value,minute:t.value}):\\\"second\\\"===t.unit?e(e({},i),{},{value:t.value,minute:t.minute,second:t.second}):t}));return y.filter((function(t){var e=1,i=Math.ceil(s.globals.gridWidth/120),r=t.value;void 0!==s.config.xaxis.tickAmount&&(i=s.config.xaxis.tickAmount),y.length>i&&(e=Math.floor(y.length/i));var o=!1,n=!1;switch(a.tickInterval){case\\\"years\\\":\\\"year\\\"===t.unit&&(o=!0);break;case\\\"half_year\\\":e=7,\\\"year\\\"===t.unit&&(o=!0);break;case\\\"months\\\":e=1,\\\"year\\\"===t.unit&&(o=!0);break;case\\\"months_fortnight\\\":e=15,\\\"year\\\"!==t.unit&&\\\"month\\\"!==t.unit||(o=!0),30===r&&(n=!0);break;case\\\"months_days\\\":e=10,\\\"month\\\"===t.unit&&(o=!0),30===r&&(n=!0);break;case\\\"week_days\\\":e=8,\\\"month\\\"===t.unit&&(o=!0);break;case\\\"days\\\":e=1,\\\"month\\\"===t.unit&&(o=!0);break;case\\\"hours\\\":\\\"day\\\"===t.unit&&(o=!0);break;case\\\"minutes_fives\\\":r%5!=0&&(n=!0);break;case\\\"seconds_tens\\\":r%10!=0&&(n=!0);break;case\\\"seconds_fives\\\":r%5!=0&&(n=!0)}if(\\\"hours\\\"===a.tickInterval||\\\"minutes_fives\\\"===a.tickInterval||\\\"seconds_tens\\\"===a.tickInterval||\\\"seconds_fives\\\"===a.tickInterval){if(!n)return!0}else if((r%e==0||o)&&!n)return!0}))}},{key:\\\"recalcDimensionsBasedOnFormat\\\",value:function(t,e){var i=this.w,a=this.formatDates(t),s=this.removeOverlappingTS(a);i.globals.timescaleLabels=s.slice(),new ot(this.ctx).plotCoords()}},{key:\\\"determineInterval\\\",value:function(t){var e=24*t,i=60*e;switch(!0){case t/365>5:this.tickInterval=\\\"years\\\";break;case t>800:this.tickInterval=\\\"half_year\\\";break;case t>180:this.tickInterval=\\\"months\\\";break;case t>90:this.tickInterval=\\\"months_fortnight\\\";break;case t>60:this.tickInterval=\\\"months_days\\\";break;case t>30:this.tickInterval=\\\"week_days\\\";break;case t>2:this.tickInterval=\\\"days\\\";break;case e>2.4:this.tickInterval=\\\"hours\\\";break;case i>15:this.tickInterval=\\\"minutes_fives\\\";break;case i>5:this.tickInterval=\\\"minutes\\\";break;case i>1:this.tickInterval=\\\"seconds_tens\\\";break;case 60*i>20:this.tickInterval=\\\"seconds_fives\\\";break;default:this.tickInterval=\\\"seconds\\\"}}},{key:\\\"generateYearScale\\\",value:function(t){var e=t.firstVal,i=t.currentMonth,a=t.currentYear,s=t.daysWidthOnXAxis,r=t.numberOfYears,o=e.minYear,n=0,l=new Y(this.ctx),h=\\\"year\\\";if(e.minDate>1||e.minMonth>0){var c=l.determineRemainingDaysOfYear(e.minYear,e.minMonth,e.minDate);n=(l.determineDaysOfYear(e.minYear)-c+1)*s,o=e.minYear+1,this.timeScaleArray.push({position:n,value:o,unit:h,year:o,month:p.monthMod(i+1)})}else 1===e.minDate&&0===e.minMonth&&this.timeScaleArray.push({position:n,value:o,unit:h,year:a,month:p.monthMod(i+1)});for(var d=o,g=n,u=0;u<r;u++)d++,g=l.determineDaysOfYear(d-1)*s+g,this.timeScaleArray.push({position:g,value:d,unit:h,year:d,month:1})}},{key:\\\"generateMonthScale\\\",value:function(t){var e=t.firstVal,i=t.currentMonthDate,a=t.currentMonth,s=t.currentYear,r=t.daysWidthOnXAxis,o=t.numberOfMonths,n=a,l=0,h=new Y(this.ctx),c=\\\"month\\\",d=0;if(e.minDate>1){l=(h.determineDaysOfMonths(a+1,e.minYear)-i+1)*r,n=p.monthMod(a+1);var g=s+d,u=p.monthMod(n),f=n;0===n&&(c=\\\"year\\\",f=g,u=1,g+=d+=1),this.timeScaleArray.push({position:l,value:f,unit:c,year:g,month:u})}else this.timeScaleArray.push({position:l,value:n,unit:c,year:s,month:p.monthMod(a)});for(var x=n+1,b=l,v=0,m=1;v<o;v++,m++){0===(x=p.monthMod(x))?(c=\\\"year\\\",d+=1):c=\\\"month\\\";var y=this._getYear(s,x,d);b=h.determineDaysOfMonths(x,y)*r+b;var w=0===x?y:x;this.timeScaleArray.push({position:b,value:w,unit:c,year:y,month:0===x?1:x}),x++}}},{key:\\\"generateDayScale\\\",value:function(t){var e=t.firstVal,i=t.currentMonth,a=t.currentYear,s=t.hoursWidthOnXAxis,r=t.numberOfDays,o=new Y(this.ctx),n=\\\"day\\\",l=e.minDate+1,h=l,c=function(t,e,i){return t>o.determineDaysOfMonths(e+1,i)?(h=1,n=\\\"month\\\",g=e+=1,e):e},d=(24-e.minHour)*s,g=l,u=c(h,i,a);0===e.minHour&&1===e.minDate?(d=0,g=p.monthMod(e.minMonth),n=\\\"month\\\",h=e.minDate,r++):1!==e.minDate&&0===e.minHour&&0===e.minMinute&&(d=0,l=e.minDate,g=l,u=c(h=l,i,a)),this.timeScaleArray.push({position:d,value:g,unit:n,year:this._getYear(a,u,0),month:p.monthMod(u),day:h});for(var f=d,x=0;x<r;x++){n=\\\"day\\\",u=c(h+=1,u,this._getYear(a,u,0));var b=this._getYear(a,u,0);f=24*s+f;var v=1===h?p.monthMod(u):h;this.timeScaleArray.push({position:f,value:v,unit:n,year:b,month:p.monthMod(u),day:v})}}},{key:\\\"generateHourScale\\\",value:function(t){var e=t.firstVal,i=t.currentDate,a=t.currentMonth,s=t.currentYear,r=t.minutesWidthOnXAxis,o=t.numberOfHours,n=new Y(this.ctx),l=\\\"hour\\\",h=function(t,e){return t>n.determineDaysOfMonths(e+1,s)&&(x=1,e+=1),{month:e,date:x}},c=function(t,e){return t>n.determineDaysOfMonths(e+1,s)?e+=1:e},d=60-(e.minMinute+e.minSecond/60),g=d*r,u=e.minHour+1,f=u+1;60===d&&(g=0,f=(u=e.minHour)+1);var x=i,b=c(x,a);this.timeScaleArray.push({position:g,value:u,unit:l,day:x,hour:f,year:s,month:p.monthMod(b)});for(var v=g,m=0;m<o;m++){if(l=\\\"hour\\\",f>=24)f=0,l=\\\"day\\\",b=h(x+=1,b).month,b=c(x,b);var y=this._getYear(s,b,0);v=0===f&&0===m?d*r:60*r+v;var w=0===f?x:f;this.timeScaleArray.push({position:v,value:w,unit:l,hour:f,day:x,year:y,month:p.monthMod(b)}),f++}}},{key:\\\"generateMinuteScale\\\",value:function(t){for(var e=t.currentMillisecond,i=t.currentSecond,a=t.currentMinute,s=t.currentHour,r=t.currentDate,o=t.currentMonth,n=t.currentYear,l=t.minutesWidthOnXAxis,h=t.secondsWidthOnXAxis,c=t.numberOfMinutes,d=a+1,g=r,u=o,f=n,x=s,b=(60-i-e/1e3)*h,v=0;v<c;v++)d>=60&&(d=0,24===(x+=1)&&(x=0)),this.timeScaleArray.push({position:b,value:d,unit:\\\"minute\\\",hour:x,minute:d,day:g,year:this._getYear(f,u,0),month:p.monthMod(u)}),b+=l,d++}},{key:\\\"generateSecondScale\\\",value:function(t){for(var e=t.currentMillisecond,i=t.currentSecond,a=t.currentMinute,s=t.currentHour,r=t.currentDate,o=t.currentMonth,n=t.currentYear,l=t.secondsWidthOnXAxis,h=t.numberOfSeconds,c=i+1,d=a,g=r,u=o,f=n,x=s,b=(1e3-e)/1e3*l,v=0;v<h;v++)c>=60&&(c=0,++d>=60&&(d=0,24===++x&&(x=0))),this.timeScaleArray.push({position:b,value:c,unit:\\\"second\\\",hour:x,minute:d,second:c,day:g,year:this._getYear(f,u,0),month:p.monthMod(u)}),b+=l,c++}},{key:\\\"createRawDateString\\\",value:function(t,e){var i=t.year;return 0===t.month&&(t.month=1),i+=\\\"-\\\"+(\\\"0\\\"+t.month.toString()).slice(-2),\\\"day\\\"===t.unit?i+=\\\"day\\\"===t.unit?\\\"-\\\"+(\\\"0\\\"+e).slice(-2):\\\"-01\\\":i+=\\\"-\\\"+(\\\"0\\\"+(t.day?t.day:\\\"1\\\")).slice(-2),\\\"hour\\\"===t.unit?i+=\\\"hour\\\"===t.unit?\\\"T\\\"+(\\\"0\\\"+e).slice(-2):\\\"T00\\\":i+=\\\"T\\\"+(\\\"0\\\"+(t.hour?t.hour:\\\"0\\\")).slice(-2),\\\"minute\\\"===t.unit?i+=\\\":\\\"+(\\\"0\\\"+e).slice(-2):i+=\\\":\\\"+(t.minute?(\\\"0\\\"+t.minute).slice(-2):\\\"00\\\"),\\\"second\\\"===t.unit?i+=\\\":\\\"+(\\\"0\\\"+e).slice(-2):i+=\\\":00\\\",this.utc&&(i+=\\\".000Z\\\"),i}},{key:\\\"formatDates\\\",value:function(t){var e=this,i=this.w;return t.map((function(t){var a=t.value.toString(),s=new Y(e.ctx),r=e.createRawDateString(t,a),o=s.getDate(s.parseDate(r));if(e.utc||(o=s.getDate(s.parseDateWithTimezone(r))),void 0===i.config.xaxis.labels.format){var n=\\\"dd MMM\\\",l=i.config.xaxis.labels.datetimeFormatter;\\\"year\\\"===t.unit&&(n=l.year),\\\"month\\\"===t.unit&&(n=l.month),\\\"day\\\"===t.unit&&(n=l.day),\\\"hour\\\"===t.unit&&(n=l.hour),\\\"minute\\\"===t.unit&&(n=l.minute),\\\"second\\\"===t.unit&&(n=l.second),a=s.formatDate(o,n)}else a=s.formatDate(o,i.config.xaxis.labels.format);return{dateString:r,position:t.position,value:a,unit:t.unit,year:t.year,month:t.month}}))}},{key:\\\"removeOverlappingTS\\\",value:function(t){var e,i=this,a=new b(this.ctx),s=!1;t.length>0&&t[0].value&&t.every((function(e){return e.value.length===t[0].value.length}))&&(s=!0,e=a.getTextRects(t[0].value).width);var r=0,o=t.map((function(o,n){if(n>0&&i.w.config.xaxis.labels.hideOverlappingLabels){var l=s?e:a.getTextRects(t[r].value).width,h=t[r].position;return o.position>h+l+10?(r=n,o):null}return o}));return o=o.filter((function(t){return null!==t}))}},{key:\\\"_getYear\\\",value:function(t,e,i){return t+Math.floor(e/12)+i}}]),t}(),Xt=function(){function t(e,i){a(this,t),this.ctx=i,this.w=i.w,this.el=e}return r(t,[{key:\\\"setupElements\\\",value:function(){var t=this.w.globals,e=this.w.config,i=e.chart.type;t.axisCharts=[\\\"line\\\",\\\"area\\\",\\\"bar\\\",\\\"rangeBar\\\",\\\"candlestick\\\",\\\"boxPlot\\\",\\\"scatter\\\",\\\"bubble\\\",\\\"radar\\\",\\\"heatmap\\\",\\\"treemap\\\"].indexOf(i)>-1,t.xyCharts=[\\\"line\\\",\\\"area\\\",\\\"bar\\\",\\\"rangeBar\\\",\\\"candlestick\\\",\\\"boxPlot\\\",\\\"scatter\\\",\\\"bubble\\\"].indexOf(i)>-1,t.isBarHorizontal=(\\\"bar\\\"===e.chart.type||\\\"rangeBar\\\"===e.chart.type)&&e.plotOptions.bar.horizontal,t.chartClass=\\\".apexcharts\\\"+t.chartID,t.dom.baseEl=this.el,t.dom.elWrap=document.createElement(\\\"div\\\"),b.setAttrs(t.dom.elWrap,{id:t.chartClass.substring(1),class:\\\"apexcharts-canvas \\\"+t.chartClass.substring(1)}),this.el.appendChild(t.dom.elWrap),t.dom.Paper=new window.SVG.Doc(t.dom.elWrap),t.dom.Paper.attr({class:\\\"apexcharts-svg\\\",\\\"xmlns:data\\\":\\\"ApexChartsNS\\\",transform:\\\"translate(\\\".concat(e.chart.offsetX,\\\", \\\").concat(e.chart.offsetY,\\\")\\\")}),t.dom.Paper.node.style.background=e.chart.background,this.setSVGDimensions(),t.dom.elGraphical=t.dom.Paper.group().attr({class:\\\"apexcharts-inner apexcharts-graphical\\\"}),t.dom.elAnnotations=t.dom.Paper.group().attr({class:\\\"apexcharts-annotations\\\"}),t.dom.elDefs=t.dom.Paper.defs(),t.dom.elLegendWrap=document.createElement(\\\"div\\\"),t.dom.elLegendWrap.classList.add(\\\"apexcharts-legend\\\"),t.dom.elWrap.appendChild(t.dom.elLegendWrap),t.dom.Paper.add(t.dom.elGraphical),t.dom.elGraphical.add(t.dom.elDefs)}},{key:\\\"plotChartType\\\",value:function(t,e){var i=this.w,a=i.config,s=i.globals,r={series:[],i:[]},o={series:[],i:[]},n={series:[],i:[]},l={series:[],i:[]},h={series:[],i:[]},c={series:[],i:[]},d={series:[],i:[]};s.series.map((function(e,g){var u=0;void 0!==t[g].type?(\\\"column\\\"===t[g].type||\\\"bar\\\"===t[g].type?(s.series.length>1&&a.plotOptions.bar.horizontal&&console.warn(\\\"Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`\\\"),h.series.push(e),h.i.push(g),u++,i.globals.columnSeries=h.series):\\\"area\\\"===t[g].type?(o.series.push(e),o.i.push(g),u++):\\\"line\\\"===t[g].type?(r.series.push(e),r.i.push(g),u++):\\\"scatter\\\"===t[g].type?(n.series.push(e),n.i.push(g)):\\\"bubble\\\"===t[g].type?(l.series.push(e),l.i.push(g),u++):\\\"candlestick\\\"===t[g].type?(c.series.push(e),c.i.push(g),u++):\\\"boxPlot\\\"===t[g].type?(d.series.push(e),d.i.push(g),u++):console.warn(\\\"You have specified an unrecognized chart type. Available types for this property are line/area/column/bar/scatter/bubble\\\"),u>1&&(s.comboCharts=!0)):(r.series.push(e),r.i.push(g))}));var g=new Pt(this.ctx,e),u=new mt(this.ctx,e);this.ctx.pie=new At(this.ctx);var p=new Ct(this.ctx);this.ctx.rangeBar=new F(this.ctx,e);var f=new St(this.ctx),x=[];if(s.comboCharts){if(o.series.length>0&&x.push(g.draw(o.series,\\\"area\\\",o.i)),h.series.length>0)if(i.config.chart.stacked){var b=new vt(this.ctx,e);x.push(b.draw(h.series,h.i))}else this.ctx.bar=new E(this.ctx,e),x.push(this.ctx.bar.draw(h.series,h.i));if(r.series.length>0&&x.push(g.draw(r.series,\\\"line\\\",r.i)),c.series.length>0&&x.push(u.draw(c.series,c.i)),d.series.length>0&&x.push(u.draw(d.series,d.i)),n.series.length>0){var v=new Pt(this.ctx,e,!0);x.push(v.draw(n.series,\\\"scatter\\\",n.i))}if(l.series.length>0){var m=new Pt(this.ctx,e,!0);x.push(m.draw(l.series,\\\"bubble\\\",l.i))}}else switch(a.chart.type){case\\\"line\\\":x=g.draw(s.series,\\\"line\\\");break;case\\\"area\\\":x=g.draw(s.series,\\\"area\\\");break;case\\\"bar\\\":if(a.chart.stacked)x=new vt(this.ctx,e).draw(s.series);else this.ctx.bar=new E(this.ctx,e),x=this.ctx.bar.draw(s.series);break;case\\\"candlestick\\\":x=new mt(this.ctx,e).draw(s.series);break;case\\\"boxPlot\\\":x=new mt(this.ctx,e).draw(s.series);break;case\\\"rangeBar\\\":x=this.ctx.rangeBar.draw(s.series);break;case\\\"heatmap\\\":x=new wt(this.ctx,e).draw(s.series);break;case\\\"treemap\\\":x=new It(this.ctx,e).draw(s.series);break;case\\\"pie\\\":case\\\"donut\\\":case\\\"polarArea\\\":x=this.ctx.pie.draw(s.series);break;case\\\"radialBar\\\":x=p.draw(s.series);break;case\\\"radar\\\":x=f.draw(s.series);break;default:x=g.draw(s.series)}return x}},{key:\\\"setSVGDimensions\\\",value:function(){var t=this.w.globals,e=this.w.config;t.svgWidth=e.chart.width,t.svgHeight=e.chart.height;var i=p.getDimensions(this.el),a=e.chart.width.toString().split(/[0-9]+/g).pop();\\\"%\\\"===a?p.isNumber(i[0])&&(0===i[0].width&&(i=p.getDimensions(this.el.parentNode)),t.svgWidth=i[0]*parseInt(e.chart.width,10)/100):\\\"px\\\"!==a&&\\\"\\\"!==a||(t.svgWidth=parseInt(e.chart.width,10));var s=e.chart.height.toString().split(/[0-9]+/g).pop();if(\\\"auto\\\"!==t.svgHeight&&\\\"\\\"!==t.svgHeight)if(\\\"%\\\"===s){var r=p.getDimensions(this.el.parentNode);t.svgHeight=r[1]*parseInt(e.chart.height,10)/100}else t.svgHeight=parseInt(e.chart.height,10);else t.axisCharts?t.svgHeight=t.svgWidth/1.61:t.svgHeight=t.svgWidth/1.2;if(t.svgWidth<0&&(t.svgWidth=0),t.svgHeight<0&&(t.svgHeight=0),b.setAttrs(t.dom.Paper.node,{width:t.svgWidth,height:t.svgHeight}),\\\"%\\\"!==s){var o=e.chart.sparkline.enabled?0:t.axisCharts?e.chart.parentHeightOffset:0;t.dom.Paper.node.parentNode.parentNode.style.minHeight=t.svgHeight+o+\\\"px\\\"}t.dom.elWrap.style.width=t.svgWidth+\\\"px\\\",t.dom.elWrap.style.height=t.svgHeight+\\\"px\\\"}},{key:\\\"shiftGraphPosition\\\",value:function(){var t=this.w.globals,e=t.translateY,i={transform:\\\"translate(\\\"+t.translateX+\\\", \\\"+e+\\\")\\\"};b.setAttrs(t.dom.elGraphical.node,i)}},{key:\\\"resizeNonAxisCharts\\\",value:function(){var t=this.w,e=t.globals,i=0,a=t.config.chart.sparkline.enabled?1:15;a+=t.config.grid.padding.bottom,\\\"top\\\"!==t.config.legend.position&&\\\"bottom\\\"!==t.config.legend.position||!t.config.legend.show||t.config.legend.floating||(i=new lt(this.ctx).legendHelpers.getLegendBBox().clwh+10);var s=t.globals.dom.baseEl.querySelector(\\\".apexcharts-radialbar, .apexcharts-pie\\\"),r=2.05*t.globals.radialSize;if(s&&!t.config.chart.sparkline.enabled){var o=p.getBoundingClientRect(s);r=o.bottom;var n=o.bottom-o.top;r=Math.max(2.05*t.globals.radialSize,n)}var l=r+e.translateY+i+a;e.dom.elLegendForeign&&e.dom.elLegendForeign.setAttribute(\\\"height\\\",l),e.dom.elWrap.style.height=l+\\\"px\\\",b.setAttrs(e.dom.Paper.node,{height:l}),e.dom.Paper.node.parentNode.parentNode.style.minHeight=l+\\\"px\\\"}},{key:\\\"coreCalculations\\\",value:function(){new U(this.ctx).init()}},{key:\\\"resetGlobals\\\",value:function(){var t=this,e=function(){return t.w.config.series.map((function(t){return[]}))},i=new D,a=this.w.globals;i.initGlobalVars(a),a.seriesXvalues=e(),a.seriesYvalues=e()}},{key:\\\"isMultipleY\\\",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.globals.isMultipleYAxis=!0,!0}},{key:\\\"xySettings\\\",value:function(){var t=null,e=this.w;if(e.globals.axisCharts){if(\\\"back\\\"===e.config.xaxis.crosshairs.position)new Q(this.ctx).drawXCrosshairs();if(\\\"back\\\"===e.config.yaxis[0].crosshairs.position)new Q(this.ctx).drawYCrosshairs();if(\\\"datetime\\\"===e.config.xaxis.type&&void 0===e.config.xaxis.labels.formatter){this.ctx.timeScale=new zt(this.ctx);var i=[];isFinite(e.globals.minX)&&isFinite(e.globals.maxX)&&!e.globals.isBarHorizontal?i=this.ctx.timeScale.calculateTimeScaleTicks(e.globals.minX,e.globals.maxX):e.globals.isBarHorizontal&&(i=this.ctx.timeScale.calculateTimeScaleTicks(e.globals.minY,e.globals.maxY)),this.ctx.timeScale.recalcDimensionsBasedOnFormat(i)}t=new y(this.ctx).getCalculatedRatios()}return t}},{key:\\\"updateSourceChart\\\",value:function(t){this.ctx.w.globals.selection=void 0,this.ctx.updateHelpers._updateOptions({chart:{selection:{xaxis:{min:t.w.globals.minX,max:t.w.globals.maxX}}}},!1,!1)}},{key:\\\"setupBrushHandler\\\",value:function(){var t=this,i=this.w;if(i.config.chart.brush.enabled&&\\\"function\\\"!=typeof i.config.chart.events.selection){var a=i.config.chart.brush.targets||[i.config.chart.brush.target];a.forEach((function(e){var i=ApexCharts.getChartByID(e);i.w.globals.brushSource=t.ctx,\\\"function\\\"!=typeof i.w.config.chart.events.zoomed&&(i.w.config.chart.events.zoomed=function(){t.updateSourceChart(i)}),\\\"function\\\"!=typeof i.w.config.chart.events.scrolled&&(i.w.config.chart.events.scrolled=function(){t.updateSourceChart(i)})})),i.config.chart.events.selection=function(t,s){a.forEach((function(t){var a=ApexCharts.getChartByID(t),r=p.clone(i.config.yaxis);if(i.config.chart.brush.autoScaleYaxis&&1===a.w.globals.series.length){var o=new j(a);r=o.autoScaleY(a,r,s)}var n=a.w.config.yaxis.reduce((function(t,i,s){return[].concat(g(t),[e(e({},a.w.config.yaxis[s]),{},{min:r[0].min,max:r[0].max})])}),[]);a.ctx.updateHelpers._updateOptions({xaxis:{min:s.xaxis.min,max:s.xaxis.max},yaxis:n},!1,!1,!1,!1)}))}}}}]),t}(),Et=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"_updateOptions\\\",value:function(t){var e=this,a=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],n=[this.ctx];r&&(n=this.ctx.getSyncedCharts()),this.ctx.w.globals.isExecCalled&&(n=[this.ctx],this.ctx.w.globals.isExecCalled=!1),n.forEach((function(r){var n=r.w;return n.globals.shouldAnimate=s,a||(n.globals.resized=!0,n.globals.dataChanged=!0,s&&r.series.getPreviousPaths()),t&&\\\"object\\\"===i(t)&&(r.config=new H(t),t=y.extendArrayProps(r.config,t,n),r.w.globals.chartID!==e.ctx.w.globals.chartID&&delete t.series,n.config=p.extend(n.config,t),o&&(n.globals.lastXAxis=t.xaxis?p.clone(t.xaxis):[],n.globals.lastYAxis=t.yaxis?p.clone(t.yaxis):[],n.globals.initialConfig=p.extend({},n.config),n.globals.initialSeries=p.clone(n.config.series))),r.update(t)}))}},{key:\\\"_updateSeries\\\",value:function(t,e){var i,a=this,s=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=this.w;return r.globals.shouldAnimate=e,r.globals.dataChanged=!0,e&&this.ctx.series.getPreviousPaths(),r.globals.axisCharts?(0===(i=t.map((function(t,e){return a._extendSeries(t,e)}))).length&&(i=[{data:[]}]),r.config.series=i):r.config.series=t.slice(),s&&(r.globals.initialSeries=p.clone(r.config.series)),this.ctx.update()}},{key:\\\"_extendSeries\\\",value:function(t,i){var a=this.w,s=a.config.series[i];return e(e({},a.config.series[i]),{},{name:t.name?t.name:s&&s.name,color:t.color?t.color:s&&s.color,type:t.type?t.type:s&&s.type,data:t.data?t.data:s&&s.data})}},{key:\\\"toggleDataPointSelection\\\",value:function(t,e){var i=this.w,a=null,s=\\\".apexcharts-series[data\\\\\\\\:realIndex='\\\".concat(t,\\\"']\\\");return i.globals.axisCharts?a=i.globals.dom.Paper.select(\\\"\\\".concat(s,\\\" path[j='\\\").concat(e,\\\"'], \\\").concat(s,\\\" circle[j='\\\").concat(e,\\\"'], \\\").concat(s,\\\" rect[j='\\\").concat(e,\\\"']\\\")).members[0]:void 0===e&&(a=i.globals.dom.Paper.select(\\\"\\\".concat(s,\\\" path[j='\\\").concat(t,\\\"']\\\")).members[0],\\\"pie\\\"!==i.config.chart.type&&\\\"polarArea\\\"!==i.config.chart.type&&\\\"donut\\\"!==i.config.chart.type||this.ctx.pie.pieClicked(t)),a?(new b(this.ctx).pathMouseDown(a,null),a.node?a.node:null):(console.warn(\\\"toggleDataPointSelection: Element not found\\\"),null)}},{key:\\\"forceXAxisUpdate\\\",value:function(t){var e=this.w;if([\\\"min\\\",\\\"max\\\"].forEach((function(i){void 0!==t.xaxis[i]&&(e.config.xaxis[i]=t.xaxis[i],e.globals.lastXAxis[i]=t.xaxis[i])})),t.xaxis.categories&&t.xaxis.categories.length&&(e.config.xaxis.categories=t.xaxis.categories),e.config.xaxis.convertedCatToNumeric){var i=new R(t);t=i.convertCatToNumericXaxis(t,this.ctx)}return t}},{key:\\\"forceYAxisUpdate\\\",value:function(t){var e=this.w;return e.config.chart.stacked&&\\\"100%\\\"===e.config.chart.stackType&&(Array.isArray(t.yaxis)?t.yaxis.forEach((function(e,i){t.yaxis[i].min=0,t.yaxis[i].max=100})):(t.yaxis.min=0,t.yaxis.max=100)),t}},{key:\\\"revertDefaultAxisMinMax\\\",value:function(t){var e=this,i=this.w,a=i.globals.lastXAxis,s=i.globals.lastYAxis;t&&t.xaxis&&(a=t.xaxis),t&&t.yaxis&&(s=t.yaxis),i.config.xaxis.min=a.min,i.config.xaxis.max=a.max;var r=function(t){void 0!==s[t]&&(i.config.yaxis[t].min=s[t].min,i.config.yaxis[t].max=s[t].max)};i.config.yaxis.map((function(t,a){i.globals.zoomed||void 0!==s[a]?r(a):void 0!==e.ctx.opts.yaxis[a]&&(t.min=e.ctx.opts.yaxis[a].min,t.max=e.ctx.opts.yaxis[a].max)}))}}]),t}();Tt=\\\"undefined\\\"!=typeof window?window:void 0,Mt=function(t,e){var a=(void 0!==this?this:t).SVG=function(t){if(a.supported)return t=new a.Doc(t),a.parser.draw||a.prepare(),t};if(a.ns=\\\"http://www.w3.org/2000/svg\\\",a.xmlns=\\\"http://www.w3.org/2000/xmlns/\\\",a.xlink=\\\"http://www.w3.org/1999/xlink\\\",a.svgjs=\\\"http://svgjs.dev\\\",a.supported=!0,!a.supported)return!1;a.did=1e3,a.eid=function(t){return\\\"Svgjs\\\"+d(t)+a.did++},a.create=function(t){var i=e.createElementNS(this.ns,t);return i.setAttribute(\\\"id\\\",this.eid(t)),i},a.extend=function(){var t,e;e=(t=[].slice.call(arguments)).pop();for(var i=t.length-1;i>=0;i--)if(t[i])for(var s in e)t[i].prototype[s]=e[s];a.Set&&a.Set.inherit&&a.Set.inherit()},a.invent=function(t){var e=\\\"function\\\"==typeof t.create?t.create:function(){this.constructor.call(this,a.create(t.create))};return t.inherit&&(e.prototype=new t.inherit),t.extend&&a.extend(e,t.extend),t.construct&&a.extend(t.parent||a.Container,t.construct),e},a.adopt=function(e){return e?e.instance?e.instance:((i=\\\"svg\\\"==e.nodeName?e.parentNode instanceof t.SVGElement?new a.Nested:new a.Doc:\\\"linearGradient\\\"==e.nodeName?new a.Gradient(\\\"linear\\\"):\\\"radialGradient\\\"==e.nodeName?new a.Gradient(\\\"radial\\\"):a[d(e.nodeName)]?new(a[d(e.nodeName)]):new a.Element(e)).type=e.nodeName,i.node=e,e.instance=i,i instanceof a.Doc&&i.namespace().defs(),i.setData(JSON.parse(e.getAttribute(\\\"svgjs:data\\\"))||{}),i):null;var i},a.prepare=function(){var t=e.getElementsByTagName(\\\"body\\\")[0],i=(t?new a.Doc(t):a.adopt(e.documentElement).nested()).size(2,0);a.parser={body:t||e.documentElement,draw:i.style(\\\"opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden\\\").node,poly:i.polyline().node,path:i.path().node,native:a.create(\\\"svg\\\")}},a.parser={native:a.create(\\\"svg\\\")},e.addEventListener(\\\"DOMContentLoaded\\\",(function(){a.parser.draw||a.prepare()}),!1),a.regex={numberAndUnit:/^([+-]?(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)(e[+-]?\\\\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\\\\d]{2})([a-f\\\\d]{2})([a-f\\\\d]{2})$/i,rgb:/rgb\\\\((\\\\d+),(\\\\d+),(\\\\d+)\\\\)/,reference:/#([a-z0-9\\\\-_]+)/i,transforms:/\\\\)\\\\s*,?\\\\s*/,whitespace:/\\\\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\\\\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\\\\s+)?$/,isNumber:/^[+-]?(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)(e[+-]?\\\\d+)?$/i,isPercent:/^-?[\\\\d\\\\.]+%$/,isImage:/\\\\.(jpg|jpeg|png|gif|svg)(\\\\?[^=]+.*)?/i,delimiter:/[\\\\s,]+/,hyphen:/([^e])\\\\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\\\\d?\\\\.\\\\d+(?:e[+-]?\\\\d+)?)((?:\\\\.\\\\d+(?:e[+-]?\\\\d+)?)+))+/gi,dots:/\\\\./g},a.utils={map:function(t,e){for(var i=t.length,a=[],s=0;s<i;s++)a.push(e(t[s]));return a},filter:function(t,e){for(var i=t.length,a=[],s=0;s<i;s++)e(t[s])&&a.push(t[s]);return a},filterSVGElements:function(e){return this.filter(e,(function(e){return e instanceof t.SVGElement}))}},a.defaults={attrs:{\\\"fill-opacity\\\":1,\\\"stroke-opacity\\\":1,\\\"stroke-width\\\":0,\\\"stroke-linejoin\\\":\\\"miter\\\",\\\"stroke-linecap\\\":\\\"butt\\\",fill:\\\"#000000\\\",stroke:\\\"#000000\\\",opacity:1,x:0,y:0,cx:0,cy:0,width:0,height:0,r:0,rx:0,ry:0,offset:0,\\\"stop-opacity\\\":1,\\\"stop-color\\\":\\\"#000000\\\",\\\"font-size\\\":16,\\\"font-family\\\":\\\"Helvetica, Arial, sans-serif\\\",\\\"text-anchor\\\":\\\"start\\\"}},a.Color=function(t){var e,s;this.r=0,this.g=0,this.b=0,t&&(\\\"string\\\"==typeof t?a.regex.isRgb.test(t)?(e=a.regex.rgb.exec(t.replace(a.regex.whitespace,\\\"\\\")),this.r=parseInt(e[1]),this.g=parseInt(e[2]),this.b=parseInt(e[3])):a.regex.isHex.test(t)&&(e=a.regex.hex.exec(4==(s=t).length?[\\\"#\\\",s.substring(1,2),s.substring(1,2),s.substring(2,3),s.substring(2,3),s.substring(3,4),s.substring(3,4)].join(\\\"\\\"):s),this.r=parseInt(e[1],16),this.g=parseInt(e[2],16),this.b=parseInt(e[3],16)):\\\"object\\\"===i(t)&&(this.r=t.r,this.g=t.g,this.b=t.b))},a.extend(a.Color,{toString:function(){return this.toHex()},toHex:function(){return\\\"#\\\"+g(this.r)+g(this.g)+g(this.b)},toRgb:function(){return\\\"rgb(\\\"+[this.r,this.g,this.b].join()+\\\")\\\"},brightness:function(){return this.r/255*.3+this.g/255*.59+this.b/255*.11},morph:function(t){return this.destination=new a.Color(t),this},at:function(t){return this.destination?(t=t<0?0:t>1?1:t,new a.Color({r:~~(this.r+(this.destination.r-this.r)*t),g:~~(this.g+(this.destination.g-this.g)*t),b:~~(this.b+(this.destination.b-this.b)*t)})):this}}),a.Color.test=function(t){return t+=\\\"\\\",a.regex.isHex.test(t)||a.regex.isRgb.test(t)},a.Color.isRgb=function(t){return t&&\\\"number\\\"==typeof t.r&&\\\"number\\\"==typeof t.g&&\\\"number\\\"==typeof t.b},a.Color.isColor=function(t){return a.Color.isRgb(t)||a.Color.test(t)},a.Array=function(t,e){0==(t=(t||[]).valueOf()).length&&e&&(t=e.valueOf()),this.value=this.parse(t)},a.extend(a.Array,{toString:function(){return this.value.join(\\\" \\\")},valueOf:function(){return this.value},parse:function(t){return t=t.valueOf(),Array.isArray(t)?t:this.split(t)}}),a.PointArray=function(t,e){a.Array.call(this,t,e||[[0,0]])},a.PointArray.prototype=new a.Array,a.PointArray.prototype.constructor=a.PointArray;for(var s={M:function(t,e,i){return e.x=i.x=t[0],e.y=i.y=t[1],[\\\"M\\\",e.x,e.y]},L:function(t,e){return e.x=t[0],e.y=t[1],[\\\"L\\\",t[0],t[1]]},H:function(t,e){return e.x=t[0],[\\\"H\\\",t[0]]},V:function(t,e){return e.y=t[0],[\\\"V\\\",t[0]]},C:function(t,e){return e.x=t[4],e.y=t[5],[\\\"C\\\",t[0],t[1],t[2],t[3],t[4],t[5]]},Q:function(t,e){return e.x=t[2],e.y=t[3],[\\\"Q\\\",t[0],t[1],t[2],t[3]]},Z:function(t,e,i){return e.x=i.x,e.y=i.y,[\\\"Z\\\"]}},r=\\\"mlhvqtcsaz\\\".split(\\\"\\\"),o=0,n=r.length;o<n;++o)s[r[o]]=function(t){return function(e,i,a){if(\\\"H\\\"==t)e[0]=e[0]+i.x;else if(\\\"V\\\"==t)e[0]=e[0]+i.y;else if(\\\"A\\\"==t)e[5]=e[5]+i.x,e[6]=e[6]+i.y;else for(var r=0,o=e.length;r<o;++r)e[r]=e[r]+(r%2?i.y:i.x);return s[t](e,i,a)}}(r[o].toUpperCase());a.PathArray=function(t,e){a.Array.call(this,t,e||[[\\\"M\\\",0,0]])},a.PathArray.prototype=new a.Array,a.PathArray.prototype.constructor=a.PathArray,a.extend(a.PathArray,{toString:function(){return function(t){for(var e=0,i=t.length,a=\\\"\\\";e<i;e++)a+=t[e][0],null!=t[e][1]&&(a+=t[e][1],null!=t[e][2]&&(a+=\\\" \\\",a+=t[e][2],null!=t[e][3]&&(a+=\\\" \\\",a+=t[e][3],a+=\\\" \\\",a+=t[e][4],null!=t[e][5]&&(a+=\\\" \\\",a+=t[e][5],a+=\\\" \\\",a+=t[e][6],null!=t[e][7]&&(a+=\\\" \\\",a+=t[e][7])))));return a+\\\" \\\"}(this.value)},move:function(t,e){var i=this.bbox();return i.x,i.y,this},at:function(t){if(!this.destination)return this;for(var e=this.value,i=this.destination.value,s=[],r=new a.PathArray,o=0,n=e.length;o<n;o++){s[o]=[e[o][0]];for(var l=1,h=e[o].length;l<h;l++)s[o][l]=e[o][l]+(i[o][l]-e[o][l])*t;\\\"A\\\"===s[o][0]&&(s[o][4]=+(0!=s[o][4]),s[o][5]=+(0!=s[o][5]))}return r.value=s,r},parse:function(t){if(t instanceof a.PathArray)return t.valueOf();var e,i={M:2,L:2,H:1,V:1,C:6,S:4,Q:4,T:2,A:7,Z:0};t=\\\"string\\\"==typeof t?t.replace(a.regex.numbersWithDots,h).replace(a.regex.pathLetters,\\\" $& \\\").replace(a.regex.hyphen,\\\"$1 -\\\").trim().split(a.regex.delimiter):t.reduce((function(t,e){return[].concat.call(t,e)}),[]);var r=[],o=new a.Point,n=new a.Point,l=0,c=t.length;do{a.regex.isPathLetter.test(t[l])?(e=t[l],++l):\\\"M\\\"==e?e=\\\"L\\\":\\\"m\\\"==e&&(e=\\\"l\\\"),r.push(s[e].call(null,t.slice(l,l+=i[e.toUpperCase()]).map(parseFloat),o,n))}while(c>l);return r},bbox:function(){return a.parser.draw||a.prepare(),a.parser.path.setAttribute(\\\"d\\\",this.toString()),a.parser.path.getBBox()}}),a.Number=a.invent({create:function(t,e){this.value=0,this.unit=e||\\\"\\\",\\\"number\\\"==typeof t?this.value=isNaN(t)?0:isFinite(t)?t:t<0?-34e37:34e37:\\\"string\\\"==typeof t?(e=t.match(a.regex.numberAndUnit))&&(this.value=parseFloat(e[1]),\\\"%\\\"==e[5]?this.value/=100:\\\"s\\\"==e[5]&&(this.value*=1e3),this.unit=e[5]):t instanceof a.Number&&(this.value=t.valueOf(),this.unit=t.unit)},extend:{toString:function(){return(\\\"%\\\"==this.unit?~~(1e8*this.value)/1e6:\\\"s\\\"==this.unit?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(t){return t=new a.Number(t),new a.Number(this+t,this.unit||t.unit)},minus:function(t){return t=new a.Number(t),new a.Number(this-t,this.unit||t.unit)},times:function(t){return t=new a.Number(t),new a.Number(this*t,this.unit||t.unit)},divide:function(t){return t=new a.Number(t),new a.Number(this/t,this.unit||t.unit)},to:function(t){var e=new a.Number(this);return\\\"string\\\"==typeof t&&(e.unit=t),e},morph:function(t){return this.destination=new a.Number(t),t.relative&&(this.destination.value+=this.value),this},at:function(t){return this.destination?new a.Number(this.destination).minus(this).times(t).plus(this):this}}}),a.Element=a.invent({create:function(t){this._stroke=a.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=t)&&(this.type=t.nodeName,this.node.instance=this,this._stroke=t.getAttribute(\\\"stroke\\\")||this._stroke)},extend:{x:function(t){return this.attr(\\\"x\\\",t)},y:function(t){return this.attr(\\\"y\\\",t)},cx:function(t){return null==t?this.x()+this.width()/2:this.x(t-this.width()/2)},cy:function(t){return null==t?this.y()+this.height()/2:this.y(t-this.height()/2)},move:function(t,e){return this.x(t).y(e)},center:function(t,e){return this.cx(t).cy(e)},width:function(t){return this.attr(\\\"width\\\",t)},height:function(t){return this.attr(\\\"height\\\",t)},size:function(t,e){var i=u(this,t,e);return this.width(new a.Number(i.width)).height(new a.Number(i.height))},clone:function(t){this.writeDataToDom();var e=x(this.node.cloneNode(!0));return t?t.add(e):this.after(e),e},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(t){return this.after(t).remove(),t},addTo:function(t){return t.put(this)},putIn:function(t){return t.add(this)},id:function(t){return this.attr(\\\"id\\\",t)},show:function(){return this.style(\\\"display\\\",\\\"\\\")},hide:function(){return this.style(\\\"display\\\",\\\"none\\\")},visible:function(){return\\\"none\\\"!=this.style(\\\"display\\\")},toString:function(){return this.attr(\\\"id\\\")},classes:function(){var t=this.attr(\\\"class\\\");return null==t?[]:t.trim().split(a.regex.delimiter)},hasClass:function(t){return-1!=this.classes().indexOf(t)},addClass:function(t){if(!this.hasClass(t)){var e=this.classes();e.push(t),this.attr(\\\"class\\\",e.join(\\\" \\\"))}return this},removeClass:function(t){return this.hasClass(t)&&this.attr(\\\"class\\\",this.classes().filter((function(e){return e!=t})).join(\\\" \\\")),this},toggleClass:function(t){return this.hasClass(t)?this.removeClass(t):this.addClass(t)},reference:function(t){return a.get(this.attr(t))},parent:function(e){var i=this;if(!i.node.parentNode)return null;if(i=a.adopt(i.node.parentNode),!e)return i;for(;i&&i.node instanceof t.SVGElement;){if(\\\"string\\\"==typeof e?i.matches(e):i instanceof e)return i;if(!i.node.parentNode||\\\"#document\\\"==i.node.parentNode.nodeName)return null;i=a.adopt(i.node.parentNode)}},doc:function(){return this instanceof a.Doc?this:this.parent(a.Doc)},parents:function(t){var e=[],i=this;do{if(!(i=i.parent(t))||!i.node)break;e.push(i)}while(i.parent);return e},matches:function(t){return function(t,e){return(t.matches||t.matchesSelector||t.msMatchesSelector||t.mozMatchesSelector||t.webkitMatchesSelector||t.oMatchesSelector).call(t,e)}(this.node,t)},native:function(){return this.node},svg:function(t){var i=e.createElement(\\\"svg\\\");if(!(t&&this instanceof a.Parent))return i.appendChild(t=e.createElement(\\\"svg\\\")),this.writeDataToDom(),t.appendChild(this.node.cloneNode(!0)),i.innerHTML.replace(/^<svg>/,\\\"\\\").replace(/<\\\\/svg>$/,\\\"\\\");i.innerHTML=\\\"<svg>\\\"+t.replace(/\\\\n/,\\\"\\\").replace(/<([\\\\w:-]+)([^<]+?)\\\\/>/g,\\\"<$1$2></$1>\\\")+\\\"</svg>\\\";for(var s=0,r=i.firstChild.childNodes.length;s<r;s++)this.node.appendChild(i.firstChild.firstChild);return this},writeDataToDom:function(){return(this.each||this.lines)&&(this.each?this:this.lines()).each((function(){this.writeDataToDom()})),this.node.removeAttribute(\\\"svgjs:data\\\"),Object.keys(this.dom).length&&this.node.setAttribute(\\\"svgjs:data\\\",JSON.stringify(this.dom)),this},setData:function(t){return this.dom=t,this},is:function(t){return function(t,e){return t instanceof e}(this,t)}}}),a.easing={\\\"-\\\":function(t){return t},\\\"<>\\\":function(t){return-Math.cos(t*Math.PI)/2+.5},\\\">\\\":function(t){return Math.sin(t*Math.PI/2)},\\\"<\\\":function(t){return 1-Math.cos(t*Math.PI/2)}},a.morph=function(t){return function(e,i){return new a.MorphObj(e,i).at(t)}},a.Situation=a.invent({create:function(t){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new a.Number(t.duration).valueOf(),this.delay=new a.Number(t.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=t.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),a.FX=a.invent({create:function(t){this._target=t,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(t,e,s){\\\"object\\\"===i(t)&&(e=t.ease,s=t.delay,t=t.duration);var r=new a.Situation({duration:t||1e3,delay:s||0,ease:a.easing[e||\\\"-\\\"]||e});return this.queue(r),this},target:function(t){return t&&t instanceof a.Element?(this._target=t,this):this._target},timeToAbsPos:function(t){return(t-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(t){return this.situation.duration/this._speed*t+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=t.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){t.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(t){return(\\\"function\\\"==typeof t||t instanceof a.Situation)&&this.situations.push(t),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof a.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var t,e=this.situation;if(e.init)return this;for(var i in e.animations){t=this.target()[i](),Array.isArray(t)||(t=[t]),Array.isArray(e.animations[i])||(e.animations[i]=[e.animations[i]]);for(var s=t.length;s--;)e.animations[i][s]instanceof a.Number&&(t[s]=new a.Number(t[s])),e.animations[i][s]=t[s].morph(e.animations[i][s])}for(var i in e.attrs)e.attrs[i]=new a.MorphObj(this.target().attr(i),e.attrs[i]);for(var i in e.styles)e.styles[i]=new a.MorphObj(this.target().style(i),e.styles[i]);return e.initialTransformation=this.target().matrixify(),e.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(t,e){var i=this.active;return this.active=!1,e&&this.clearQueue(),t&&this.situation&&(!i&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},after:function(t){var e=this.last();return this.target().on(\\\"finished.fx\\\",(function i(a){a.detail.situation==e&&(t.call(this,e),this.off(\\\"finished.fx\\\",i))})),this._callStart()},during:function(t){var e=this.last(),i=function(i){i.detail.situation==e&&t.call(this,i.detail.pos,a.morph(i.detail.pos),i.detail.eased,e)};return this.target().off(\\\"during.fx\\\",i).on(\\\"during.fx\\\",i),this.after((function(){this.off(\\\"during.fx\\\",i)})),this._callStart()},afterAll:function(t){var e=function e(i){t.call(this),this.off(\\\"allfinished.fx\\\",e)};return this.target().off(\\\"allfinished.fx\\\",e).on(\\\"allfinished.fx\\\",e),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(t,e,i){return this.last()[i||\\\"animations\\\"][t]=e,this._callStart()},step:function(t){var e,i,a;t||(this.absPos=this.timeToAbsPos(+new Date)),!1!==this.situation.loops?(e=Math.max(this.absPos,0),i=Math.floor(e),!0===this.situation.loops||i<this.situation.loops?(this.pos=e-i,a=this.situation.loop,this.situation.loop=i):(this.absPos=this.situation.loops,this.pos=1,a=this.situation.loop-1,this.situation.loop=this.situation.loops),this.situation.reversing&&(this.situation.reversed=this.situation.reversed!=Boolean((this.situation.loop-a)%2))):(this.absPos=Math.min(this.absPos,1),this.pos=this.absPos),this.pos<0&&(this.pos=0),this.situation.reversed&&(this.pos=1-this.pos);var s=this.situation.ease(this.pos);for(var r in this.situation.once)r>this.lastPos&&r<=s&&(this.situation.once[r].call(this.target(),this.pos,s),delete this.situation.once[r]);return this.active&&this.target().fire(\\\"during\\\",{pos:this.pos,eased:s,fx:this,situation:this.situation}),this.situation?(this.eachAt(),1==this.pos&&!this.situation.reversed||this.situation.reversed&&0==this.pos?(this.stopAnimFrame(),this.target().fire(\\\"finished\\\",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire(\\\"allfinished\\\"),this.situations.length||(this.target().off(\\\".fx\\\"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=s,this):this},eachAt:function(){var t,e=this,i=this.target(),s=this.situation;for(var r in s.animations)t=[].concat(s.animations[r]).map((function(t){return\\\"string\\\"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i[r].apply(i,t);for(var r in s.attrs)t=[r].concat(s.attrs[r]).map((function(t){return\\\"string\\\"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i.attr.apply(i,t);for(var r in s.styles)t=[r].concat(s.styles[r]).map((function(t){return\\\"string\\\"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i.style.apply(i,t);if(s.transforms.length){t=s.initialTransformation,r=0;for(var o=s.transforms.length;r<o;r++){var n=s.transforms[r];n instanceof a.Matrix?t=n.relative?t.multiply((new a.Matrix).morph(n).at(s.ease(this.pos))):t.morph(n).at(s.ease(this.pos)):(n.relative||n.undo(t.extract()),t=t.multiply(n.at(s.ease(this.pos))))}i.matrix(t)}return this},once:function(t,e,i){var a=this.last();return i||(t=a.ease(t)),a.once[t]=e,this},_callStart:function(){return setTimeout(function(){this.start()}.bind(this),0),this}},parent:a.Element,construct:{animate:function(t,e,i){return(this.fx||(this.fx=new a.FX(this))).animate(t,e,i)},delay:function(t){return(this.fx||(this.fx=new a.FX(this))).delay(t)},stop:function(t,e){return this.fx&&this.fx.stop(t,e),this},finish:function(){return this.fx&&this.fx.finish(),this}}}),a.MorphObj=a.invent({create:function(t,e){return a.Color.isColor(e)?new a.Color(t).morph(e):a.regex.delimiter.test(t)?a.regex.pathLetters.test(t)?new a.PathArray(t).morph(e):new a.Array(t).morph(e):a.regex.numberAndUnit.test(e)?new a.Number(t).morph(e):(this.value=t,void(this.destination=e))},extend:{at:function(t,e){return e<1?this.value:this.destination},valueOf:function(){return this.value}}}),a.extend(a.FX,{attr:function(t,e,a){if(\\\"object\\\"===i(t))for(var s in t)this.attr(s,t[s]);else this.add(t,e,\\\"attrs\\\");return this},plot:function(t,e,i,a){return 4==arguments.length?this.plot([t,e,i,a]):this.add(\\\"plot\\\",new(this.target().morphArray)(t))}}),a.Box=a.invent({create:function(t,e,s,r){if(!(\\\"object\\\"!==i(t)||t instanceof a.Element))return a.Box.call(this,null!=t.left?t.left:t.x,null!=t.top?t.top:t.y,t.width,t.height);4==arguments.length&&(this.x=t,this.y=e,this.width=s,this.height=r),b(this)}}),a.BBox=a.invent({create:function(t){if(a.Box.apply(this,[].slice.call(arguments)),t instanceof a.Element){var i;try{if(!e.documentElement.contains){for(var s=t.node;s.parentNode;)s=s.parentNode;if(s!=e)throw new Error(\\\"Element not in the dom\\\")}i=t.node.getBBox()}catch(e){if(t instanceof a.Shape){a.parser.draw||a.prepare();var r=t.clone(a.parser.draw.instance).show();i=r.node.getBBox(),r.remove()}else i={x:t.node.clientLeft,y:t.node.clientTop,width:t.node.clientWidth,height:t.node.clientHeight}}a.Box.call(this,i)}},inherit:a.Box,parent:a.Element,construct:{bbox:function(){return new a.BBox(this)}}}),a.BBox.prototype.constructor=a.BBox,a.Matrix=a.invent({create:function(t){var e=f([1,0,0,1,0,0]);t=null===t?e:t instanceof a.Element?t.matrixify():\\\"string\\\"==typeof t?f(t.split(a.regex.delimiter).map(parseFloat)):6==arguments.length?f([].slice.call(arguments)):Array.isArray(t)?f(t):t&&\\\"object\\\"===i(t)?t:e;for(var s=m.length-1;s>=0;--s)this[m[s]]=null!=t[m[s]]?t[m[s]]:e[m[s]]},extend:{extract:function(){var t=p(this,0,1);p(this,1,0);var e=180/Math.PI*Math.atan2(t.y,t.x)-90;return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(e*Math.PI/180)+this.f*Math.sin(e*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(e*Math.PI/180)+this.e*Math.sin(-e*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),rotation:e,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new a.Matrix(this)}},clone:function(){return new a.Matrix(this)},morph:function(t){return this.destination=new a.Matrix(t),this},multiply:function(t){return new a.Matrix(this.native().multiply(function(t){return t instanceof a.Matrix||(t=new a.Matrix(t)),t}(t).native()))},inverse:function(){return new a.Matrix(this.native().inverse())},translate:function(t,e){return new a.Matrix(this.native().translate(t||0,e||0))},native:function(){for(var t=a.parser.native.createSVGMatrix(),e=m.length-1;e>=0;e--)t[m[e]]=this[m[e]];return t},toString:function(){return\\\"matrix(\\\"+v(this.a)+\\\",\\\"+v(this.b)+\\\",\\\"+v(this.c)+\\\",\\\"+v(this.d)+\\\",\\\"+v(this.e)+\\\",\\\"+v(this.f)+\\\")\\\"}},parent:a.Element,construct:{ctm:function(){return new a.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof a.Nested){var t=this.rect(1,1),e=t.node.getScreenCTM();return t.remove(),new a.Matrix(e)}return new a.Matrix(this.node.getScreenCTM())}}}),a.Point=a.invent({create:function(t,e){var a;a=Array.isArray(t)?{x:t[0],y:t[1]}:\\\"object\\\"===i(t)?{x:t.x,y:t.y}:null!=t?{x:t,y:null!=e?e:t}:{x:0,y:0},this.x=a.x,this.y=a.y},extend:{clone:function(){return new a.Point(this)},morph:function(t,e){return this.destination=new a.Point(t,e),this}}}),a.extend(a.Element,{point:function(t,e){return new a.Point(t,e).transform(this.screenCTM().inverse())}}),a.extend(a.Element,{attr:function(t,e,s){if(null==t){for(t={},s=(e=this.node.attributes).length-1;s>=0;s--)t[e[s].nodeName]=a.regex.isNumber.test(e[s].nodeValue)?parseFloat(e[s].nodeValue):e[s].nodeValue;return t}if(\\\"object\\\"===i(t))for(var r in t)this.attr(r,t[r]);else if(null===e)this.node.removeAttribute(t);else{if(null==e)return null==(e=this.node.getAttribute(t))?a.defaults.attrs[t]:a.regex.isNumber.test(e)?parseFloat(e):e;\\\"stroke-width\\\"==t?this.attr(\\\"stroke\\\",parseFloat(e)>0?this._stroke:null):\\\"stroke\\\"==t&&(this._stroke=e),\\\"fill\\\"!=t&&\\\"stroke\\\"!=t||(a.regex.isImage.test(e)&&(e=this.doc().defs().image(e,0,0)),e instanceof a.Image&&(e=this.doc().defs().pattern(0,0,(function(){this.add(e)})))),\\\"number\\\"==typeof e?e=new a.Number(e):a.Color.isColor(e)?e=new a.Color(e):Array.isArray(e)&&(e=new a.Array(e)),\\\"leading\\\"==t?this.leading&&this.leading(e):\\\"string\\\"==typeof s?this.node.setAttributeNS(s,t,e.toString()):this.node.setAttribute(t,e.toString()),!this.rebuild||\\\"font-size\\\"!=t&&\\\"x\\\"!=t||this.rebuild(t,e)}return this}}),a.extend(a.Element,{transform:function(t,e){var s;return\\\"object\\\"!==i(t)?(s=new a.Matrix(this).extract(),\\\"string\\\"==typeof t?s[t]:s):(s=new a.Matrix(this),e=!!e||!!t.relative,null!=t.a&&(s=e?s.multiply(new a.Matrix(t)):new a.Matrix(t)),this.attr(\\\"transform\\\",s))}}),a.extend(a.Element,{untransform:function(){return this.attr(\\\"transform\\\",null)},matrixify:function(){return(this.attr(\\\"transform\\\")||\\\"\\\").split(a.regex.transforms).slice(0,-1).map((function(t){var e=t.trim().split(\\\"(\\\");return[e[0],e[1].split(a.regex.delimiter).map((function(t){return parseFloat(t)}))]})).reduce((function(t,e){return\\\"matrix\\\"==e[0]?t.multiply(f(e[1])):t[e[0]].apply(t,e[1])}),new a.Matrix)},toParent:function(t){if(this==t)return this;var e=this.screenCTM(),i=t.screenCTM().inverse();return this.addTo(t).untransform().transform(i.multiply(e)),this},toDoc:function(){return this.toParent(this.doc())}}),a.Transformation=a.invent({create:function(t,e){if(arguments.length>1&&\\\"boolean\\\"!=typeof e)return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(t))for(var a=0,s=this.arguments.length;a<s;++a)this[this.arguments[a]]=t[a];else if(t&&\\\"object\\\"===i(t))for(a=0,s=this.arguments.length;a<s;++a)this[this.arguments[a]]=t[this.arguments[a]];this.inversed=!1,!0===e&&(this.inversed=!0)}}),a.Translate=a.invent({parent:a.Matrix,inherit:a.Transformation,create:function(t,e){this.constructor.apply(this,[].slice.call(arguments))},extend:{arguments:[\\\"transformedX\\\",\\\"transformedY\\\"],method:\\\"translate\\\"}}),a.extend(a.Element,{style:function(t,e){if(0==arguments.length)return this.node.style.cssText||\\\"\\\";if(arguments.length<2)if(\\\"object\\\"===i(t))for(var s in t)this.style(s,t[s]);else{if(!a.regex.isCss.test(t))return this.node.style[c(t)];for(t=t.split(/\\\\s*;\\\\s*/).filter((function(t){return!!t})).map((function(t){return t.split(/\\\\s*:\\\\s*/)}));e=t.pop();)this.style(e[0],e[1])}else this.node.style[c(t)]=null===e||a.regex.isBlank.test(e)?\\\"\\\":e;return this}}),a.Parent=a.invent({create:function(t){this.constructor.call(this,t)},inherit:a.Element,extend:{children:function(){return a.utils.map(a.utils.filterSVGElements(this.node.childNodes),(function(t){return a.adopt(t)}))},add:function(t,e){return null==e?this.node.appendChild(t.node):t.node!=this.node.childNodes[e]&&this.node.insertBefore(t.node,this.node.childNodes[e]),this},put:function(t,e){return this.add(t,e),t},has:function(t){return this.index(t)>=0},index:function(t){return[].slice.call(this.node.childNodes).indexOf(t.node)},get:function(t){return a.adopt(this.node.childNodes[t])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(t,e){for(var i=this.children(),s=0,r=i.length;s<r;s++)i[s]instanceof a.Element&&t.apply(i[s],[s,i]),e&&i[s]instanceof a.Container&&i[s].each(t,e);return this},removeElement:function(t){return this.node.removeChild(t.node),this},clear:function(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return delete this._defs,this},defs:function(){return this.doc().defs()}}}),a.extend(a.Parent,{ungroup:function(t,e){return 0===e||this instanceof a.Defs||this.node==a.parser.draw||(t=t||(this instanceof a.Doc?this:this.parent(a.Parent)),e=e||1/0,this.each((function(){return this instanceof a.Defs?this:this instanceof a.Parent?this.ungroup(t,e-1):this.toParent(t)})),this.node.firstChild||this.remove()),this},flatten:function(t,e){return this.ungroup(t,e)}}),a.Container=a.invent({create:function(t){this.constructor.call(this,t)},inherit:a.Parent}),a.ViewBox=a.invent({parent:a.Container,construct:{}}),[\\\"click\\\",\\\"dblclick\\\",\\\"mousedown\\\",\\\"mouseup\\\",\\\"mouseover\\\",\\\"mouseout\\\",\\\"mousemove\\\",\\\"touchstart\\\",\\\"touchmove\\\",\\\"touchleave\\\",\\\"touchend\\\",\\\"touchcancel\\\"].forEach((function(t){a.Element.prototype[t]=function(e){return a.on(this.node,t,e),this}})),a.listeners=[],a.handlerMap=[],a.listenerId=0,a.on=function(t,e,i,s,r){var o=i.bind(s||t.instance||t),n=(a.handlerMap.indexOf(t)+1||a.handlerMap.push(t))-1,l=e.split(\\\".\\\")[0],h=e.split(\\\".\\\")[1]||\\\"*\\\";a.listeners[n]=a.listeners[n]||{},a.listeners[n][l]=a.listeners[n][l]||{},a.listeners[n][l][h]=a.listeners[n][l][h]||{},i._svgjsListenerId||(i._svgjsListenerId=++a.listenerId),a.listeners[n][l][h][i._svgjsListenerId]=o,t.addEventListener(l,o,r||{passive:!0})},a.off=function(t,e,i){var s=a.handlerMap.indexOf(t),r=e&&e.split(\\\".\\\")[0],o=e&&e.split(\\\".\\\")[1],n=\\\"\\\";if(-1!=s)if(i){if(\\\"function\\\"==typeof i&&(i=i._svgjsListenerId),!i)return;a.listeners[s][r]&&a.listeners[s][r][o||\\\"*\\\"]&&(t.removeEventListener(r,a.listeners[s][r][o||\\\"*\\\"][i],!1),delete a.listeners[s][r][o||\\\"*\\\"][i])}else if(o&&r){if(a.listeners[s][r]&&a.listeners[s][r][o]){for(var l in a.listeners[s][r][o])a.off(t,[r,o].join(\\\".\\\"),l);delete a.listeners[s][r][o]}}else if(o)for(var h in a.listeners[s])for(var n in a.listeners[s][h])o===n&&a.off(t,[h,o].join(\\\".\\\"));else if(r){if(a.listeners[s][r]){for(var n in a.listeners[s][r])a.off(t,[r,n].join(\\\".\\\"));delete a.listeners[s][r]}}else{for(var h in a.listeners[s])a.off(t,h);delete a.listeners[s],delete a.handlerMap[s]}},a.extend(a.Element,{on:function(t,e,i,s){return a.on(this.node,t,e,i,s),this},off:function(t,e){return a.off(this.node,t,e),this},fire:function(e,i){return e instanceof t.Event?this.node.dispatchEvent(e):this.node.dispatchEvent(e=new a.CustomEvent(e,{detail:i,cancelable:!0})),this._event=e,this},event:function(){return this._event}}),a.Defs=a.invent({create:\\\"defs\\\",inherit:a.Container}),a.G=a.invent({create:\\\"g\\\",inherit:a.Container,extend:{x:function(t){return null==t?this.transform(\\\"x\\\"):this.transform({x:t-this.x()},!0)}},construct:{group:function(){return this.put(new a.G)}}}),a.Doc=a.invent({create:function(t){t&&(\\\"svg\\\"==(t=\\\"string\\\"==typeof t?e.getElementById(t):t).nodeName?this.constructor.call(this,t):(this.constructor.call(this,a.create(\\\"svg\\\")),t.appendChild(this.node),this.size(\\\"100%\\\",\\\"100%\\\")),this.namespace().defs())},inherit:a.Container,extend:{namespace:function(){return this.attr({xmlns:a.ns,version:\\\"1.1\\\"}).attr(\\\"xmlns:xlink\\\",a.xlink,a.xmlns).attr(\\\"xmlns:svgjs\\\",a.svgjs,a.xmlns)},defs:function(){var t;return this._defs||((t=this.node.getElementsByTagName(\\\"defs\\\")[0])?this._defs=a.adopt(t):this._defs=new a.Defs,this.node.appendChild(this._defs.node)),this._defs},parent:function(){return this.node.parentNode&&\\\"#document\\\"!=this.node.parentNode.nodeName?this.node.parentNode:null},remove:function(){return this.parent()&&this.parent().removeChild(this.node),this},clear:function(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return delete this._defs,a.parser.draw&&!a.parser.draw.parentNode&&this.node.appendChild(a.parser.draw),this},clone:function(t){this.writeDataToDom();var e=this.node,i=x(e.cloneNode(!0));return t?(t.node||t).appendChild(i.node):e.parentNode.insertBefore(i.node,e.nextSibling),i}}}),a.extend(a.Element,{}),a.Gradient=a.invent({create:function(t){this.constructor.call(this,a.create(t+\\\"Gradient\\\")),this.type=t},inherit:a.Container,extend:{at:function(t,e,i){return this.put(new a.Stop).update(t,e,i)},update:function(t){return this.clear(),\\\"function\\\"==typeof t&&t.call(this,this),this},fill:function(){return\\\"url(#\\\"+this.id()+\\\")\\\"},toString:function(){return this.fill()},attr:function(t,e,i){return\\\"transform\\\"==t&&(t=\\\"gradientTransform\\\"),a.Container.prototype.attr.call(this,t,e,i)}},construct:{gradient:function(t,e){return this.defs().gradient(t,e)}}}),a.extend(a.Gradient,a.FX,{from:function(t,e){return\\\"radial\\\"==(this._target||this).type?this.attr({fx:new a.Number(t),fy:new a.Number(e)}):this.attr({x1:new a.Number(t),y1:new a.Number(e)})},to:function(t,e){return\\\"radial\\\"==(this._target||this).type?this.attr({cx:new a.Number(t),cy:new a.Number(e)}):this.attr({x2:new a.Number(t),y2:new a.Number(e)})}}),a.extend(a.Defs,{gradient:function(t,e){return this.put(new a.Gradient(t)).update(e)}}),a.Stop=a.invent({create:\\\"stop\\\",inherit:a.Element,extend:{update:function(t){return(\\\"number\\\"==typeof t||t instanceof a.Number)&&(t={offset:arguments[0],color:arguments[1],opacity:arguments[2]}),null!=t.opacity&&this.attr(\\\"stop-opacity\\\",t.opacity),null!=t.color&&this.attr(\\\"stop-color\\\",t.color),null!=t.offset&&this.attr(\\\"offset\\\",new a.Number(t.offset)),this}}}),a.Pattern=a.invent({create:\\\"pattern\\\",inherit:a.Container,extend:{fill:function(){return\\\"url(#\\\"+this.id()+\\\")\\\"},update:function(t){return this.clear(),\\\"function\\\"==typeof t&&t.call(this,this),this},toString:function(){return this.fill()},attr:function(t,e,i){return\\\"transform\\\"==t&&(t=\\\"patternTransform\\\"),a.Container.prototype.attr.call(this,t,e,i)}},construct:{pattern:function(t,e,i){return this.defs().pattern(t,e,i)}}}),a.extend(a.Defs,{pattern:function(t,e,i){return this.put(new a.Pattern).update(i).attr({x:0,y:0,width:t,height:e,patternUnits:\\\"userSpaceOnUse\\\"})}}),a.Shape=a.invent({create:function(t){this.constructor.call(this,t)},inherit:a.Element}),a.Symbol=a.invent({create:\\\"symbol\\\",inherit:a.Container,construct:{symbol:function(){return this.put(new a.Symbol)}}}),a.Use=a.invent({create:\\\"use\\\",inherit:a.Shape,extend:{element:function(t,e){return this.attr(\\\"href\\\",(e||\\\"\\\")+\\\"#\\\"+t,a.xlink)}},construct:{use:function(t,e){return this.put(new a.Use).element(t,e)}}}),a.Rect=a.invent({create:\\\"rect\\\",inherit:a.Shape,construct:{rect:function(t,e){return this.put(new a.Rect).size(t,e)}}}),a.Circle=a.invent({create:\\\"circle\\\",inherit:a.Shape,construct:{circle:function(t){return this.put(new a.Circle).rx(new a.Number(t).divide(2)).move(0,0)}}}),a.extend(a.Circle,a.FX,{rx:function(t){return this.attr(\\\"r\\\",t)},ry:function(t){return this.rx(t)}}),a.Ellipse=a.invent({create:\\\"ellipse\\\",inherit:a.Shape,construct:{ellipse:function(t,e){return this.put(new a.Ellipse).size(t,e).move(0,0)}}}),a.extend(a.Ellipse,a.Rect,a.FX,{rx:function(t){return this.attr(\\\"rx\\\",t)},ry:function(t){return this.attr(\\\"ry\\\",t)}}),a.extend(a.Circle,a.Ellipse,{x:function(t){return null==t?this.cx()-this.rx():this.cx(t+this.rx())},y:function(t){return null==t?this.cy()-this.ry():this.cy(t+this.ry())},cx:function(t){return null==t?this.attr(\\\"cx\\\"):this.attr(\\\"cx\\\",t)},cy:function(t){return null==t?this.attr(\\\"cy\\\"):this.attr(\\\"cy\\\",t)},width:function(t){return null==t?2*this.rx():this.rx(new a.Number(t).divide(2))},height:function(t){return null==t?2*this.ry():this.ry(new a.Number(t).divide(2))},size:function(t,e){var i=u(this,t,e);return this.rx(new a.Number(i.width).divide(2)).ry(new a.Number(i.height).divide(2))}}),a.Line=a.invent({create:\\\"line\\\",inherit:a.Shape,extend:{array:function(){return new a.PointArray([[this.attr(\\\"x1\\\"),this.attr(\\\"y1\\\")],[this.attr(\\\"x2\\\"),this.attr(\\\"y2\\\")]])},plot:function(t,e,i,s){return null==t?this.array():(t=void 0!==e?{x1:t,y1:e,x2:i,y2:s}:new a.PointArray(t).toLine(),this.attr(t))},move:function(t,e){return this.attr(this.array().move(t,e).toLine())},size:function(t,e){var i=u(this,t,e);return this.attr(this.array().size(i.width,i.height).toLine())}},construct:{line:function(t,e,i,s){return a.Line.prototype.plot.apply(this.put(new a.Line),null!=t?[t,e,i,s]:[0,0,0,0])}}}),a.Polyline=a.invent({create:\\\"polyline\\\",inherit:a.Shape,construct:{polyline:function(t){return this.put(new a.Polyline).plot(t||new a.PointArray)}}}),a.Polygon=a.invent({create:\\\"polygon\\\",inherit:a.Shape,construct:{polygon:function(t){return this.put(new a.Polygon).plot(t||new a.PointArray)}}}),a.extend(a.Polyline,a.Polygon,{array:function(){return this._array||(this._array=new a.PointArray(this.attr(\\\"points\\\")))},plot:function(t){return null==t?this.array():this.clear().attr(\\\"points\\\",\\\"string\\\"==typeof t?t:this._array=new a.PointArray(t))},clear:function(){return delete this._array,this},move:function(t,e){return this.attr(\\\"points\\\",this.array().move(t,e))},size:function(t,e){var i=u(this,t,e);return this.attr(\\\"points\\\",this.array().size(i.width,i.height))}}),a.extend(a.Line,a.Polyline,a.Polygon,{morphArray:a.PointArray,x:function(t){return null==t?this.bbox().x:this.move(t,this.bbox().y)},y:function(t){return null==t?this.bbox().y:this.move(this.bbox().x,t)},width:function(t){var e=this.bbox();return null==t?e.width:this.size(t,e.height)},height:function(t){var e=this.bbox();return null==t?e.height:this.size(e.width,t)}}),a.Path=a.invent({create:\\\"path\\\",inherit:a.Shape,extend:{morphArray:a.PathArray,array:function(){return this._array||(this._array=new a.PathArray(this.attr(\\\"d\\\")))},plot:function(t){return null==t?this.array():this.clear().attr(\\\"d\\\",\\\"string\\\"==typeof t?t:this._array=new a.PathArray(t))},clear:function(){return delete this._array,this}},construct:{path:function(t){return this.put(new a.Path).plot(t||new a.PathArray)}}}),a.Image=a.invent({create:\\\"image\\\",inherit:a.Shape,extend:{load:function(e){if(!e)return this;var i=this,s=new t.Image;return a.on(s,\\\"load\\\",(function(){a.off(s);var t=i.parent(a.Pattern);null!==t&&(0==i.width()&&0==i.height()&&i.size(s.width,s.height),t&&0==t.width()&&0==t.height()&&t.size(i.width(),i.height()),\\\"function\\\"==typeof i._loaded&&i._loaded.call(i,{width:s.width,height:s.height,ratio:s.width/s.height,url:e}))})),a.on(s,\\\"error\\\",(function(t){a.off(s),\\\"function\\\"==typeof i._error&&i._error.call(i,t)})),this.attr(\\\"href\\\",s.src=this.src=e,a.xlink)},loaded:function(t){return this._loaded=t,this},error:function(t){return this._error=t,this}},construct:{image:function(t,e,i){return this.put(new a.Image).load(t).size(e||0,i||e||0)}}}),a.Text=a.invent({create:function(){this.constructor.call(this,a.create(\\\"text\\\")),this.dom.leading=new a.Number(1.3),this._rebuild=!0,this._build=!1,this.attr(\\\"font-family\\\",a.defaults.attrs[\\\"font-family\\\"])},inherit:a.Shape,extend:{x:function(t){return null==t?this.attr(\\\"x\\\"):this.attr(\\\"x\\\",t)},text:function(t){if(void 0===t){t=\\\"\\\";for(var e=this.node.childNodes,i=0,s=e.length;i<s;++i)0!=i&&3!=e[i].nodeType&&1==a.adopt(e[i]).dom.newLined&&(t+=\\\"\\\\n\\\"),t+=e[i].textContent;return t}if(this.clear().build(!0),\\\"function\\\"==typeof t)t.call(this,this);else{i=0;for(var r=(t=t.split(\\\"\\\\n\\\")).length;i<r;i++)this.tspan(t[i]).newLine()}return this.build(!1).rebuild()},size:function(t){return this.attr(\\\"font-size\\\",t).rebuild()},leading:function(t){return null==t?this.dom.leading:(this.dom.leading=new a.Number(t),this.rebuild())},lines:function(){var t=(this.textPath&&this.textPath()||this).node,e=a.utils.map(a.utils.filterSVGElements(t.childNodes),(function(t){return a.adopt(t)}));return new a.Set(e)},rebuild:function(t){if(\\\"boolean\\\"==typeof t&&(this._rebuild=t),this._rebuild){var e=this,i=0,s=this.dom.leading*new a.Number(this.attr(\\\"font-size\\\"));this.lines().each((function(){this.dom.newLined&&(e.textPath()||this.attr(\\\"x\\\",e.attr(\\\"x\\\")),\\\"\\\\n\\\"==this.text()?i+=s:(this.attr(\\\"dy\\\",s+i),i=0))})),this.fire(\\\"rebuild\\\")}return this},build:function(t){return this._build=!!t,this},setData:function(t){return this.dom=t,this.dom.leading=new a.Number(t.leading||1.3),this}},construct:{text:function(t){return this.put(new a.Text).text(t)},plain:function(t){return this.put(new a.Text).plain(t)}}}),a.Tspan=a.invent({create:\\\"tspan\\\",inherit:a.Shape,extend:{text:function(t){return null==t?this.node.textContent+(this.dom.newLined?\\\"\\\\n\\\":\\\"\\\"):(\\\"function\\\"==typeof t?t.call(this,this):this.plain(t),this)},dx:function(t){return this.attr(\\\"dx\\\",t)},dy:function(t){return this.attr(\\\"dy\\\",t)},newLine:function(){var t=this.parent(a.Text);return this.dom.newLined=!0,this.dy(t.dom.leading*t.attr(\\\"font-size\\\")).attr(\\\"x\\\",t.x())}}}),a.extend(a.Text,a.Tspan,{plain:function(t){return!1===this._build&&this.clear(),this.node.appendChild(e.createTextNode(t)),this},tspan:function(t){var e=(this.textPath&&this.textPath()||this).node,i=new a.Tspan;return!1===this._build&&this.clear(),e.appendChild(i.node),i.text(t)},clear:function(){for(var t=(this.textPath&&this.textPath()||this).node;t.hasChildNodes();)t.removeChild(t.lastChild);return this},length:function(){return this.node.getComputedTextLength()}}),a.TextPath=a.invent({create:\\\"textPath\\\",inherit:a.Parent,parent:a.Text,construct:{morphArray:a.PathArray,array:function(){var t=this.track();return t?t.array():null},plot:function(t){var e=this.track(),i=null;return e&&(i=e.plot(t)),null==t?i:this},track:function(){var t=this.textPath();if(t)return t.reference(\\\"href\\\")},textPath:function(){if(this.node.firstChild&&\\\"textPath\\\"==this.node.firstChild.nodeName)return a.adopt(this.node.firstChild)}}}),a.Nested=a.invent({create:function(){this.constructor.call(this,a.create(\\\"svg\\\")),this.style(\\\"overflow\\\",\\\"visible\\\")},inherit:a.Container,construct:{nested:function(){return this.put(new a.Nested)}}});var l={stroke:[\\\"color\\\",\\\"width\\\",\\\"opacity\\\",\\\"linecap\\\",\\\"linejoin\\\",\\\"miterlimit\\\",\\\"dasharray\\\",\\\"dashoffset\\\"],fill:[\\\"color\\\",\\\"opacity\\\",\\\"rule\\\"],prefix:function(t,e){return\\\"color\\\"==e?t:t+\\\"-\\\"+e}};function h(t,e,i,s){return i+s.replace(a.regex.dots,\\\" .\\\")}function c(t){return t.toLowerCase().replace(/-(.)/g,(function(t,e){return e.toUpperCase()}))}function d(t){return t.charAt(0).toUpperCase()+t.slice(1)}function g(t){var e=t.toString(16);return 1==e.length?\\\"0\\\"+e:e}function u(t,e,i){if(null==e||null==i){var a=t.bbox();null==e?e=a.width/a.height*i:null==i&&(i=a.height/a.width*e)}return{width:e,height:i}}function p(t,e,i){return{x:e*t.a+i*t.c+0,y:e*t.b+i*t.d+0}}function f(t){return{a:t[0],b:t[1],c:t[2],d:t[3],e:t[4],f:t[5]}}function x(e){for(var i=e.childNodes.length-1;i>=0;i--)e.childNodes[i]instanceof t.SVGElement&&x(e.childNodes[i]);return a.adopt(e).id(a.eid(e.nodeName))}function b(t){return null==t.x&&(t.x=0,t.y=0,t.width=0,t.height=0),t.w=t.width,t.h=t.height,t.x2=t.x+t.width,t.y2=t.y+t.height,t.cx=t.x+t.width/2,t.cy=t.y+t.height/2,t}function v(t){return Math.abs(t)>1e-37?t:0}[\\\"fill\\\",\\\"stroke\\\"].forEach((function(t){var e={};e[t]=function(e){if(void 0===e)return this;if(\\\"string\\\"==typeof e||a.Color.isRgb(e)||e&&\\\"function\\\"==typeof e.fill)this.attr(t,e);else for(var i=l[t].length-1;i>=0;i--)null!=e[l[t][i]]&&this.attr(l.prefix(t,l[t][i]),e[l[t][i]]);return this},a.extend(a.Element,a.FX,e)})),a.extend(a.Element,a.FX,{translate:function(t,e){return this.transform({x:t,y:e})},matrix:function(t){return this.attr(\\\"transform\\\",new a.Matrix(6==arguments.length?[].slice.call(arguments):t))},opacity:function(t){return this.attr(\\\"opacity\\\",t)},dx:function(t){return this.x(new a.Number(t).plus(this instanceof a.FX?0:this.x()),!0)},dy:function(t){return this.y(new a.Number(t).plus(this instanceof a.FX?0:this.y()),!0)}}),a.extend(a.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(t){return this.node.getPointAtLength(t)}}),a.Set=a.invent({create:function(t){Array.isArray(t)?this.members=t:this.clear()},extend:{add:function(){for(var t=[].slice.call(arguments),e=0,i=t.length;e<i;e++)this.members.push(t[e]);return this},remove:function(t){var e=this.index(t);return e>-1&&this.members.splice(e,1),this},each:function(t){for(var e=0,i=this.members.length;e<i;e++)t.apply(this.members[e],[e,this.members]);return this},clear:function(){return this.members=[],this},length:function(){return this.members.length},has:function(t){return this.index(t)>=0},index:function(t){return this.members.indexOf(t)},get:function(t){return this.members[t]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members}},construct:{set:function(t){return new a.Set(t)}}}),a.FX.Set=a.invent({create:function(t){this.set=t}}),a.Set.inherit=function(){var t=[];for(var e in a.Shape.prototype)\\\"function\\\"==typeof a.Shape.prototype[e]&&\\\"function\\\"!=typeof a.Set.prototype[e]&&t.push(e);for(var e in t.forEach((function(t){a.Set.prototype[t]=function(){for(var e=0,i=this.members.length;e<i;e++)this.members[e]&&\\\"function\\\"==typeof this.members[e][t]&&this.members[e][t].apply(this.members[e],arguments);return\\\"animate\\\"==t?this.fx||(this.fx=new a.FX.Set(this)):this}})),t=[],a.FX.prototype)\\\"function\\\"==typeof a.FX.prototype[e]&&\\\"function\\\"!=typeof a.FX.Set.prototype[e]&&t.push(e);t.forEach((function(t){a.FX.Set.prototype[t]=function(){for(var e=0,i=this.set.members.length;e<i;e++)this.set.members[e].fx[t].apply(this.set.members[e].fx,arguments);return this}}))},a.extend(a.Element,{}),a.extend(a.Element,{remember:function(t,e){if(\\\"object\\\"===i(arguments[0]))for(var a in t)this.remember(a,t[a]);else{if(1==arguments.length)return this.memory()[t];this.memory()[t]=e}return this},forget:function(){if(0==arguments.length)this._memory={};else for(var t=arguments.length-1;t>=0;t--)delete this.memory()[arguments[t]];return this},memory:function(){return this._memory||(this._memory={})}}),a.get=function(t){var i=e.getElementById(function(t){var e=(t||\\\"\\\").toString().match(a.regex.reference);if(e)return e[1]}(t)||t);return a.adopt(i)},a.select=function(t,i){return new a.Set(a.utils.map((i||e).querySelectorAll(t),(function(t){return a.adopt(t)})))},a.extend(a.Parent,{select:function(t){return a.select(t,this.node)}});var m=\\\"abcdef\\\".split(\\\"\\\");if(\\\"function\\\"!=typeof t.CustomEvent){var y=function(t,i){i=i||{bubbles:!1,cancelable:!1,detail:void 0};var a=e.createEvent(\\\"CustomEvent\\\");return a.initCustomEvent(t,i.bubbles,i.cancelable,i.detail),a};y.prototype=t.Event.prototype,a.CustomEvent=y}else a.CustomEvent=t.CustomEvent;return a}, true?!(__WEBPACK_AMD_DEFINE_RESULT__ = (function(){return Mt(Tt,Tt.document)}).call(exports, __webpack_require__, exports, module),\\n\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):0,\\n/*! svg.filter.js - v2.0.2 - 2016-02-24\\n* https://github.com/wout/svg.filter.js\\n* Copyright (c) 2016 Wout Fierens; Licensed MIT */\\nfunction(){SVG.Filter=SVG.invent({create:\\\"filter\\\",inherit:SVG.Parent,extend:{source:\\\"SourceGraphic\\\",sourceAlpha:\\\"SourceAlpha\\\",background:\\\"BackgroundImage\\\",backgroundAlpha:\\\"BackgroundAlpha\\\",fill:\\\"FillPaint\\\",stroke:\\\"StrokePaint\\\",autoSetIn:!0,put:function(t,e){return this.add(t,e),!t.attr(\\\"in\\\")&&this.autoSetIn&&t.attr(\\\"in\\\",this.source),t.attr(\\\"result\\\")||t.attr(\\\"result\\\",t),t},blend:function(t,e,i){return this.put(new SVG.BlendEffect(t,e,i))},colorMatrix:function(t,e){return this.put(new SVG.ColorMatrixEffect(t,e))},convolveMatrix:function(t){return this.put(new SVG.ConvolveMatrixEffect(t))},componentTransfer:function(t){return this.put(new SVG.ComponentTransferEffect(t))},composite:function(t,e,i){return this.put(new SVG.CompositeEffect(t,e,i))},flood:function(t,e){return this.put(new SVG.FloodEffect(t,e))},offset:function(t,e){return this.put(new SVG.OffsetEffect(t,e))},image:function(t){return this.put(new SVG.ImageEffect(t))},merge:function(){var t=[void 0];for(var e in arguments)t.push(arguments[e]);return this.put(new(SVG.MergeEffect.bind.apply(SVG.MergeEffect,t)))},gaussianBlur:function(t,e){return this.put(new SVG.GaussianBlurEffect(t,e))},morphology:function(t,e){return this.put(new SVG.MorphologyEffect(t,e))},diffuseLighting:function(t,e,i){return this.put(new SVG.DiffuseLightingEffect(t,e,i))},displacementMap:function(t,e,i,a,s){return this.put(new SVG.DisplacementMapEffect(t,e,i,a,s))},specularLighting:function(t,e,i,a){return this.put(new SVG.SpecularLightingEffect(t,e,i,a))},tile:function(){return this.put(new SVG.TileEffect)},turbulence:function(t,e,i,a,s){return this.put(new SVG.TurbulenceEffect(t,e,i,a,s))},toString:function(){return\\\"url(#\\\"+this.attr(\\\"id\\\")+\\\")\\\"}}}),SVG.extend(SVG.Defs,{filter:function(t){var e=this.put(new SVG.Filter);return\\\"function\\\"==typeof t&&t.call(e,e),e}}),SVG.extend(SVG.Container,{filter:function(t){return this.defs().filter(t)}}),SVG.extend(SVG.Element,SVG.G,SVG.Nested,{filter:function(t){return this.filterer=t instanceof SVG.Element?t:this.doc().filter(t),this.doc()&&this.filterer.doc()!==this.doc()&&this.doc().defs().add(this.filterer),this.attr(\\\"filter\\\",this.filterer),this.filterer},unfilter:function(t){return this.filterer&&!0===t&&this.filterer.remove(),delete this.filterer,this.attr(\\\"filter\\\",null)}}),SVG.Effect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result=\\\"'+this.attr(\\\"in\\\")+'\\\"]').get(0)||this.attr(\\\"in\\\"):this.attr(\\\"in\\\",t)},result:function(t){return null==t?this.attr(\\\"result\\\"):this.attr(\\\"result\\\",t)},toString:function(){return this.result()}}}),SVG.ParentEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Parent,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result=\\\"'+this.attr(\\\"in\\\")+'\\\"]').get(0)||this.attr(\\\"in\\\"):this.attr(\\\"in\\\",t)},result:function(t){return null==t?this.attr(\\\"result\\\"):this.attr(\\\"result\\\",t)},toString:function(){return this.result()}}});var t={blend:function(t,e){return this.parent()&&this.parent().blend(this,t,e)},colorMatrix:function(t,e){return this.parent()&&this.parent().colorMatrix(t,e).in(this)},convolveMatrix:function(t){return this.parent()&&this.parent().convolveMatrix(t).in(this)},componentTransfer:function(t){return this.parent()&&this.parent().componentTransfer(t).in(this)},composite:function(t,e){return this.parent()&&this.parent().composite(this,t,e)},flood:function(t,e){return this.parent()&&this.parent().flood(t,e)},offset:function(t,e){return this.parent()&&this.parent().offset(t,e).in(this)},image:function(t){return this.parent()&&this.parent().image(t)},merge:function(){return this.parent()&&this.parent().merge.apply(this.parent(),[this].concat(arguments))},gaussianBlur:function(t,e){return this.parent()&&this.parent().gaussianBlur(t,e).in(this)},morphology:function(t,e){return this.parent()&&this.parent().morphology(t,e).in(this)},diffuseLighting:function(t,e,i){return this.parent()&&this.parent().diffuseLighting(t,e,i).in(this)},displacementMap:function(t,e,i,a){return this.parent()&&this.parent().displacementMap(this,t,e,i,a)},specularLighting:function(t,e,i,a){return this.parent()&&this.parent().specularLighting(t,e,i,a).in(this)},tile:function(){return this.parent()&&this.parent().tile().in(this)},turbulence:function(t,e,i,a,s){return this.parent()&&this.parent().turbulence(t,e,i,a,s).in(this)}};SVG.extend(SVG.Effect,t),SVG.extend(SVG.ParentEffect,t),SVG.ChildEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){this.attr(\\\"in\\\",t)}}});var e={blend:function(t,e,i){this.attr({in:t,in2:e,mode:i||\\\"normal\\\"})},colorMatrix:function(t,e){\\\"matrix\\\"==t&&(e=s(e)),this.attr({type:t,values:void 0===e?null:e})},convolveMatrix:function(t){t=s(t),this.attr({order:Math.sqrt(t.split(\\\" \\\").length),kernelMatrix:t})},composite:function(t,e,i){this.attr({in:t,in2:e,operator:i})},flood:function(t,e){this.attr(\\\"flood-color\\\",t),null!=e&&this.attr(\\\"flood-opacity\\\",e)},offset:function(t,e){this.attr({dx:t,dy:e})},image:function(t){this.attr(\\\"href\\\",t,SVG.xlink)},displacementMap:function(t,e,i,a,s){this.attr({in:t,in2:e,scale:i,xChannelSelector:a,yChannelSelector:s})},gaussianBlur:function(t,e){null!=t||null!=e?this.attr(\\\"stdDeviation\\\",r(Array.prototype.slice.call(arguments))):this.attr(\\\"stdDeviation\\\",\\\"0 0\\\")},morphology:function(t,e){this.attr({operator:t,radius:e})},tile:function(){},turbulence:function(t,e,i,a,s){this.attr({numOctaves:e,seed:i,stitchTiles:a,baseFrequency:t,type:s})}},i={merge:function(){var t;if(arguments[0]instanceof SVG.Set){var e=this;arguments[0].each((function(t){this instanceof SVG.MergeNode?e.put(this):(this instanceof SVG.Effect||this instanceof SVG.ParentEffect)&&e.put(new SVG.MergeNode(this))}))}else{t=Array.isArray(arguments[0])?arguments[0]:arguments;for(var i=0;i<t.length;i++)t[i]instanceof SVG.MergeNode?this.put(t[i]):this.put(new SVG.MergeNode(t[i]))}},componentTransfer:function(t){if(this.rgb=new SVG.Set,[\\\"r\\\",\\\"g\\\",\\\"b\\\",\\\"a\\\"].forEach(function(t){this[t]=new(SVG[\\\"Func\\\"+t.toUpperCase()])(\\\"identity\\\"),this.rgb.add(this[t]),this.node.appendChild(this[t].node)}.bind(this)),t)for(var e in t.rgb&&([\\\"r\\\",\\\"g\\\",\\\"b\\\"].forEach(function(e){this[e].attr(t.rgb)}.bind(this)),delete t.rgb),t)this[e].attr(t[e])},diffuseLighting:function(t,e,i){this.attr({surfaceScale:t,diffuseConstant:e,kernelUnitLength:i})},specularLighting:function(t,e,i,a){this.attr({surfaceScale:t,diffuseConstant:e,specularExponent:i,kernelUnitLength:a})}},a={distantLight:function(t,e){this.attr({azimuth:t,elevation:e})},pointLight:function(t,e,i){this.attr({x:t,y:e,z:i})},spotLight:function(t,e,i,a,s,r){this.attr({x:t,y:e,z:i,pointsAtX:a,pointsAtY:s,pointsAtZ:r})},mergeNode:function(t){this.attr(\\\"in\\\",t)}};function s(t){return Array.isArray(t)&&(t=new SVG.Array(t)),t.toString().replace(/^\\\\s+/,\\\"\\\").replace(/\\\\s+$/,\\\"\\\").replace(/\\\\s+/g,\\\" \\\")}function r(t){if(!Array.isArray(t))return t;for(var e=0,i=t.length,a=[];e<i;e++)a.push(t[e]);return a.join(\\\" \\\")}function o(){var t=function(){};for(var e in\\\"function\\\"==typeof arguments[arguments.length-1]&&(t=arguments[arguments.length-1],Array.prototype.splice.call(arguments,arguments.length-1,1)),arguments)for(var i in arguments[e])t(arguments[e][i],i,arguments[e])}[\\\"r\\\",\\\"g\\\",\\\"b\\\",\\\"a\\\"].forEach((function(t){a[\\\"Func\\\"+t.toUpperCase()]=function(t){switch(this.attr(\\\"type\\\",t),t){case\\\"table\\\":this.attr(\\\"tableValues\\\",arguments[1]);break;case\\\"linear\\\":this.attr(\\\"slope\\\",arguments[1]),this.attr(\\\"intercept\\\",arguments[2]);break;case\\\"gamma\\\":this.attr(\\\"amplitude\\\",arguments[1]),this.attr(\\\"exponent\\\",arguments[2]),this.attr(\\\"offset\\\",arguments[2])}}})),o(e,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i+\\\"Effect\\\"]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\\\"fe\\\"+i)),t.apply(this,arguments),this.result(this.attr(\\\"id\\\")+\\\"Out\\\")},inherit:SVG.Effect,extend:{}})})),o(i,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i+\\\"Effect\\\"]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\\\"fe\\\"+i)),t.apply(this,arguments),this.result(this.attr(\\\"id\\\")+\\\"Out\\\")},inherit:SVG.ParentEffect,extend:{}})})),o(a,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\\\"fe\\\"+i)),t.apply(this,arguments)},inherit:SVG.ChildEffect,extend:{}})})),SVG.extend(SVG.MergeEffect,{in:function(t){return t instanceof SVG.MergeNode?this.add(t,0):this.add(new SVG.MergeNode(t),0),this}}),SVG.extend(SVG.CompositeEffect,SVG.BlendEffect,SVG.DisplacementMapEffect,{in2:function(t){return null==t?this.parent()&&this.parent().select('[result=\\\"'+this.attr(\\\"in2\\\")+'\\\"]').get(0)||this.attr(\\\"in2\\\"):this.attr(\\\"in2\\\",t)}}),SVG.filter={sepiatone:[.343,.669,.119,0,0,.249,.626,.13,0,0,.172,.334,.111,0,0,0,0,0,1,0]}}.call(void 0),function(){function t(t,s,r,o,n,l,h){for(var c=t.slice(s,r||h),d=o.slice(n,l||h),g=0,u={pos:[0,0],start:[0,0]},p={pos:[0,0],start:[0,0]};;){if(c[g]=e.call(u,c[g]),d[g]=e.call(p,d[g]),c[g][0]!=d[g][0]||\\\"M\\\"==c[g][0]||\\\"A\\\"==c[g][0]&&(c[g][4]!=d[g][4]||c[g][5]!=d[g][5])?(Array.prototype.splice.apply(c,[g,1].concat(a.call(u,c[g]))),Array.prototype.splice.apply(d,[g,1].concat(a.call(p,d[g])))):(c[g]=i.call(u,c[g]),d[g]=i.call(p,d[g])),++g==c.length&&g==d.length)break;g==c.length&&c.push([\\\"C\\\",u.pos[0],u.pos[1],u.pos[0],u.pos[1],u.pos[0],u.pos[1]]),g==d.length&&d.push([\\\"C\\\",p.pos[0],p.pos[1],p.pos[0],p.pos[1],p.pos[0],p.pos[1]])}return{start:c,dest:d}}function e(t){switch(t[0]){case\\\"z\\\":case\\\"Z\\\":t[0]=\\\"L\\\",t[1]=this.start[0],t[2]=this.start[1];break;case\\\"H\\\":t[0]=\\\"L\\\",t[2]=this.pos[1];break;case\\\"V\\\":t[0]=\\\"L\\\",t[2]=t[1],t[1]=this.pos[0];break;case\\\"T\\\":t[0]=\\\"Q\\\",t[3]=t[1],t[4]=t[2],t[1]=this.reflection[1],t[2]=this.reflection[0];break;case\\\"S\\\":t[0]=\\\"C\\\",t[6]=t[4],t[5]=t[3],t[4]=t[2],t[3]=t[1],t[2]=this.reflection[1],t[1]=this.reflection[0]}return t}function i(t){var e=t.length;return this.pos=[t[e-2],t[e-1]],-1!=\\\"SCQT\\\".indexOf(t[0])&&(this.reflection=[2*this.pos[0]-t[e-4],2*this.pos[1]-t[e-3]]),t}function a(t){var e=[t];switch(t[0]){case\\\"M\\\":return this.pos=this.start=[t[1],t[2]],e;case\\\"L\\\":t[5]=t[3]=t[1],t[6]=t[4]=t[2],t[1]=this.pos[0],t[2]=this.pos[1];break;case\\\"Q\\\":t[6]=t[4],t[5]=t[3],t[4]=1*t[4]/3+2*t[2]/3,t[3]=1*t[3]/3+2*t[1]/3,t[2]=1*this.pos[1]/3+2*t[2]/3,t[1]=1*this.pos[0]/3+2*t[1]/3;break;case\\\"A\\\":t=(e=function(t,e){var i,a,s,r,o,n,l,h,c,d,g,u,p,f,x,b,v,m,y,w,k,A,S,C,L,P,T=Math.abs(e[1]),M=Math.abs(e[2]),I=e[3]%360,z=e[4],X=e[5],E=e[6],Y=e[7],F=new SVG.Point(t),R=new SVG.Point(E,Y),H=[];if(0===T||0===M||F.x===R.x&&F.y===R.y)return[[\\\"C\\\",F.x,F.y,R.x,R.y,R.x,R.y]];i=new SVG.Point((F.x-R.x)/2,(F.y-R.y)/2).transform((new SVG.Matrix).rotate(I)),(a=i.x*i.x/(T*T)+i.y*i.y/(M*M))>1&&(T*=a=Math.sqrt(a),M*=a);s=(new SVG.Matrix).rotate(I).scale(1/T,1/M).rotate(-I),F=F.transform(s),R=R.transform(s),r=[R.x-F.x,R.y-F.y],n=r[0]*r[0]+r[1]*r[1],o=Math.sqrt(n),r[0]/=o,r[1]/=o,l=n<4?Math.sqrt(1-n/4):0,z===X&&(l*=-1);h=new SVG.Point((R.x+F.x)/2+l*-r[1],(R.y+F.y)/2+l*r[0]),c=new SVG.Point(F.x-h.x,F.y-h.y),d=new SVG.Point(R.x-h.x,R.y-h.y),g=Math.acos(c.x/Math.sqrt(c.x*c.x+c.y*c.y)),c.y<0&&(g*=-1);u=Math.acos(d.x/Math.sqrt(d.x*d.x+d.y*d.y)),d.y<0&&(u*=-1);X&&g>u&&(u+=2*Math.PI);!X&&g<u&&(u-=2*Math.PI);for(f=Math.ceil(2*Math.abs(g-u)/Math.PI),b=[],v=g,p=(u-g)/f,x=4*Math.tan(p/4)/3,k=0;k<=f;k++)y=Math.cos(v),m=Math.sin(v),w=new SVG.Point(h.x+y,h.y+m),b[k]=[new SVG.Point(w.x+x*m,w.y-x*y),w,new SVG.Point(w.x-x*m,w.y+x*y)],v+=p;for(b[0][0]=b[0][1].clone(),b[b.length-1][2]=b[b.length-1][1].clone(),s=(new SVG.Matrix).rotate(I).scale(T,M).rotate(-I),k=0,A=b.length;k<A;k++)b[k][0]=b[k][0].transform(s),b[k][1]=b[k][1].transform(s),b[k][2]=b[k][2].transform(s);for(k=1,A=b.length;k<A;k++)S=(w=b[k-1][2]).x,C=w.y,L=(w=b[k][0]).x,P=w.y,E=(w=b[k][1]).x,Y=w.y,H.push([\\\"C\\\",S,C,L,P,E,Y]);return H}(this.pos,t))[0]}return t[0]=\\\"C\\\",this.pos=[t[5],t[6]],this.reflection=[2*t[5]-t[3],2*t[6]-t[4]],e}function s(t,e){if(!1===e)return!1;for(var i=e,a=t.length;i<a;++i)if(\\\"M\\\"==t[i][0])return i;return!1}SVG.extend(SVG.PathArray,{morph:function(e){for(var i=this.value,a=this.parse(e),r=0,o=0,n=!1,l=!1;!1!==r||!1!==o;){var h;n=s(i,!1!==r&&r+1),l=s(a,!1!==o&&o+1),!1===r&&(r=0==(h=new SVG.PathArray(c.start).bbox()).height||0==h.width?i.push(i[0])-1:i.push([\\\"M\\\",h.x+h.width/2,h.y+h.height/2])-1),!1===o&&(o=0==(h=new SVG.PathArray(c.dest).bbox()).height||0==h.width?a.push(a[0])-1:a.push([\\\"M\\\",h.x+h.width/2,h.y+h.height/2])-1);var c=t(i,r,n,a,o,l);i=i.slice(0,r).concat(c.start,!1===n?[]:i.slice(n)),a=a.slice(0,o).concat(c.dest,!1===l?[]:a.slice(l)),r=!1!==n&&r+c.start.length,o=!1!==l&&o+c.dest.length}return this.value=i,this.destination=new SVG.PathArray,this.destination.value=a,this}})}(),\\n/*! svg.draggable.js - v2.2.2 - 2019-01-08\\n* https://github.com/svgdotjs/svg.draggable.js\\n* Copyright (c) 2019 Wout Fierens; Licensed MIT */\\nfunction(){function t(t){t.remember(\\\"_draggable\\\",this),this.el=t}t.prototype.init=function(t,e){var i=this;this.constraint=t,this.value=e,this.el.on(\\\"mousedown.drag\\\",(function(t){i.start(t)})),this.el.on(\\\"touchstart.drag\\\",(function(t){i.start(t)}))},t.prototype.transformPoint=function(t,e){var i=(t=t||window.event).changedTouches&&t.changedTouches[0]||t;return this.p.x=i.clientX-(e||0),this.p.y=i.clientY,this.p.matrixTransform(this.m)},t.prototype.getBBox=function(){var t=this.el.bbox();return this.el instanceof SVG.Nested&&(t=this.el.rbox()),(this.el instanceof SVG.G||this.el instanceof SVG.Use||this.el instanceof SVG.Nested)&&(t.x=this.el.x(),t.y=this.el.y()),t},t.prototype.start=function(t){if(\\\"click\\\"!=t.type&&\\\"mousedown\\\"!=t.type&&\\\"mousemove\\\"!=t.type||1==(t.which||t.buttons)){var e=this;if(this.el.fire(\\\"beforedrag\\\",{event:t,handler:this}),!this.el.event().defaultPrevented){t.preventDefault(),t.stopPropagation(),this.parent=this.parent||this.el.parent(SVG.Nested)||this.el.parent(SVG.Doc),this.p=this.parent.node.createSVGPoint(),this.m=this.el.node.getScreenCTM().inverse();var i,a=this.getBBox();if(this.el instanceof SVG.Text)switch(i=this.el.node.getComputedTextLength(),this.el.attr(\\\"text-anchor\\\")){case\\\"middle\\\":i/=2;break;case\\\"start\\\":i=0}this.startPoints={point:this.transformPoint(t,i),box:a,transform:this.el.transform()},SVG.on(window,\\\"mousemove.drag\\\",(function(t){e.drag(t)})),SVG.on(window,\\\"touchmove.drag\\\",(function(t){e.drag(t)})),SVG.on(window,\\\"mouseup.drag\\\",(function(t){e.end(t)})),SVG.on(window,\\\"touchend.drag\\\",(function(t){e.end(t)})),this.el.fire(\\\"dragstart\\\",{event:t,p:this.startPoints.point,m:this.m,handler:this})}}},t.prototype.drag=function(t){var e=this.getBBox(),i=this.transformPoint(t),a=this.startPoints.box.x+i.x-this.startPoints.point.x,s=this.startPoints.box.y+i.y-this.startPoints.point.y,r=this.constraint,o=i.x-this.startPoints.point.x,n=i.y-this.startPoints.point.y;if(this.el.fire(\\\"dragmove\\\",{event:t,p:i,m:this.m,handler:this}),this.el.event().defaultPrevented)return i;if(\\\"function\\\"==typeof r){var l=r.call(this.el,a,s,this.m);\\\"boolean\\\"==typeof l&&(l={x:l,y:l}),!0===l.x?this.el.x(a):!1!==l.x&&this.el.x(l.x),!0===l.y?this.el.y(s):!1!==l.y&&this.el.y(l.y)}else\\\"object\\\"==typeof r&&(null!=r.minX&&a<r.minX?o=(a=r.minX)-this.startPoints.box.x:null!=r.maxX&&a>r.maxX-e.width&&(o=(a=r.maxX-e.width)-this.startPoints.box.x),null!=r.minY&&s<r.minY?n=(s=r.minY)-this.startPoints.box.y:null!=r.maxY&&s>r.maxY-e.height&&(n=(s=r.maxY-e.height)-this.startPoints.box.y),null!=r.snapToGrid&&(a-=a%r.snapToGrid,s-=s%r.snapToGrid,o-=o%r.snapToGrid,n-=n%r.snapToGrid),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:o,y:n},!0):this.el.move(a,s));return i},t.prototype.end=function(t){var e=this.drag(t);this.el.fire(\\\"dragend\\\",{event:t,p:e,m:this.m,handler:this}),SVG.off(window,\\\"mousemove.drag\\\"),SVG.off(window,\\\"touchmove.drag\\\"),SVG.off(window,\\\"mouseup.drag\\\"),SVG.off(window,\\\"touchend.drag\\\")},SVG.extend(SVG.Element,{draggable:function(e,i){\\\"function\\\"!=typeof e&&\\\"object\\\"!=typeof e||(i=e,e=!0);var a=this.remember(\\\"_draggable\\\")||new t(this);return(e=void 0===e||e)?a.init(i||{},e):(this.off(\\\"mousedown.drag\\\"),this.off(\\\"touchstart.drag\\\")),this}})}.call(void 0),function(){function t(t){this.el=t,t.remember(\\\"_selectHandler\\\",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1},this.pointsList={lt:[0,0],rt:[\\\"width\\\",0],rb:[\\\"width\\\",\\\"height\\\"],lb:[0,\\\"height\\\"],t:[\\\"width\\\",0],r:[\\\"width\\\",\\\"height\\\"],b:[\\\"width\\\",\\\"height\\\"],l:[0,\\\"height\\\"]},this.pointCoord=function(t,e,i){var a=\\\"string\\\"!=typeof t?t:e[t];return i?a/2:a},this.pointCoords=function(t,e){var i=this.pointsList[t];return{x:this.pointCoord(i[0],e,\\\"t\\\"===t||\\\"b\\\"===t),y:this.pointCoord(i[1],e,\\\"r\\\"===t||\\\"l\\\"===t)}}}t.prototype.init=function(t,e){var i=this.el.bbox();this.options={};var a=this.el.selectize.defaults.points;for(var s in this.el.selectize.defaults)this.options[s]=this.el.selectize.defaults[s],void 0!==e[s]&&(this.options[s]=e[s]);var r=[\\\"points\\\",\\\"pointsExclude\\\"];for(var s in r){var o=this.options[r[s]];\\\"string\\\"==typeof o?o=o.length>0?o.split(/\\\\s*,\\\\s*/i):[]:\\\"boolean\\\"==typeof o&&\\\"points\\\"===r[s]&&(o=o?a:[]),this.options[r[s]]=o}this.options.points=[a,this.options.points].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)>-1}))})),this.options.points=[this.options.points,this.options.pointsExclude].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)<0}))})),this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&-1!==[\\\"line\\\",\\\"polyline\\\",\\\"polygon\\\"].indexOf(this.el.type)?this.selectPoints(t):this.selectRect(t),this.observe(),this.cleanup()},t.prototype.selectPoints=function(t){return this.pointSelection.isSelected=t,this.pointSelection.set||(this.pointSelection.set=this.parent.set(),this.drawPoints()),this},t.prototype.getPointArray=function(){var t=this.el.bbox();return this.el.array().valueOf().map((function(e){return[e[0]-t.x,e[1]-t.y]}))},t.prototype.drawPoints=function(){for(var t=this,e=this.getPointArray(),i=0,a=e.length;i<a;++i){var s=function(e){return function(i){(i=i||window.event).preventDefault?i.preventDefault():i.returnValue=!1,i.stopPropagation();var a=i.pageX||i.touches[0].pageX,s=i.pageY||i.touches[0].pageY;t.el.fire(\\\"point\\\",{x:a,y:s,i:e,event:i})}}(i),r=this.drawPoint(e[i][0],e[i][1]).addClass(this.options.classPoints).addClass(this.options.classPoints+\\\"_point\\\").on(\\\"touchstart\\\",s).on(\\\"mousedown\\\",s);this.pointSelection.set.add(r)}},t.prototype.drawPoint=function(t,e){var i=this.options.pointType;switch(i){case\\\"circle\\\":return this.drawCircle(t,e);case\\\"rect\\\":return this.drawRect(t,e);default:if(\\\"function\\\"==typeof i)return i.call(this,t,e);throw new Error(\\\"Unknown \\\"+i+\\\" point type!\\\")}},t.prototype.drawCircle=function(t,e){return this.nested.circle(this.options.pointSize).center(t,e)},t.prototype.drawRect=function(t,e){return this.nested.rect(this.options.pointSize,this.options.pointSize).center(t,e)},t.prototype.updatePointSelection=function(){var t=this.getPointArray();this.pointSelection.set.each((function(e){this.cx()===t[e][0]&&this.cy()===t[e][1]||this.center(t[e][0],t[e][1])}))},t.prototype.updateRectSelection=function(){var t=this,e=this.el.bbox();if(this.rectSelection.set.get(0).attr({width:e.width,height:e.height}),this.options.points.length&&this.options.points.map((function(i,a){var s=t.pointCoords(i,e);t.rectSelection.set.get(a+1).center(s.x,s.y)})),this.options.rotationPoint){var i=this.rectSelection.set.length();this.rectSelection.set.get(i-1).center(e.width/2,20)}},t.prototype.selectRect=function(t){var e=this,i=this.el.bbox();function a(t){return function(i){(i=i||window.event).preventDefault?i.preventDefault():i.returnValue=!1,i.stopPropagation();var a=i.pageX||i.touches[0].pageX,s=i.pageY||i.touches[0].pageY;e.el.fire(t,{x:a,y:s,event:i})}}if(this.rectSelection.isSelected=t,this.rectSelection.set=this.rectSelection.set||this.parent.set(),this.rectSelection.set.get(0)||this.rectSelection.set.add(this.nested.rect(i.width,i.height).addClass(this.options.classRect)),this.options.points.length&&this.rectSelection.set.length()<2){this.options.points.map((function(t,s){var r=e.pointCoords(t,i),o=e.drawPoint(r.x,r.y).attr(\\\"class\\\",e.options.classPoints+\\\"_\\\"+t).on(\\\"mousedown\\\",a(t)).on(\\\"touchstart\\\",a(t));e.rectSelection.set.add(o)})),this.rectSelection.set.each((function(){this.addClass(e.options.classPoints)}))}if(this.options.rotationPoint&&(this.options.points&&!this.rectSelection.set.get(9)||!this.options.points&&!this.rectSelection.set.get(1))){var s=function(t){(t=t||window.event).preventDefault?t.preventDefault():t.returnValue=!1,t.stopPropagation();var i=t.pageX||t.touches[0].pageX,a=t.pageY||t.touches[0].pageY;e.el.fire(\\\"rot\\\",{x:i,y:a,event:t})},r=this.drawPoint(i.width/2,20).attr(\\\"class\\\",this.options.classPoints+\\\"_rot\\\").on(\\\"touchstart\\\",s).on(\\\"mousedown\\\",s);this.rectSelection.set.add(r)}},t.prototype.handler=function(){var t=this.el.bbox();this.nested.matrix(new SVG.Matrix(this.el).translate(t.x,t.y)),this.rectSelection.isSelected&&this.updateRectSelection(),this.pointSelection.isSelected&&this.updatePointSelection()},t.prototype.observe=function(){var t=this;if(MutationObserver)if(this.rectSelection.isSelected||this.pointSelection.isSelected)this.observerInst=this.observerInst||new MutationObserver((function(){t.handler()})),this.observerInst.observe(this.el.node,{attributes:!0});else try{this.observerInst.disconnect(),delete this.observerInst}catch(t){}else this.el.off(\\\"DOMAttrModified.select\\\"),(this.rectSelection.isSelected||this.pointSelection.isSelected)&&this.el.on(\\\"DOMAttrModified.select\\\",(function(){t.handler()}))},t.prototype.cleanup=function(){!this.rectSelection.isSelected&&this.rectSelection.set&&(this.rectSelection.set.each((function(){this.remove()})),this.rectSelection.set.clear(),delete this.rectSelection.set),!this.pointSelection.isSelected&&this.pointSelection.set&&(this.pointSelection.set.each((function(){this.remove()})),this.pointSelection.set.clear(),delete this.pointSelection.set),this.pointSelection.isSelected||this.rectSelection.isSelected||(this.nested.remove(),delete this.nested)},SVG.extend(SVG.Element,{selectize:function(e,i){return\\\"object\\\"==typeof e&&(i=e,e=!0),(this.remember(\\\"_selectHandler\\\")||new t(this)).init(void 0===e||e,i||{}),this}}),SVG.Element.prototype.selectize.defaults={points:[\\\"lt\\\",\\\"rt\\\",\\\"rb\\\",\\\"lb\\\",\\\"t\\\",\\\"r\\\",\\\"b\\\",\\\"l\\\"],pointsExclude:[],classRect:\\\"svg_select_boundingRect\\\",classPoints:\\\"svg_select_points\\\",pointSize:7,rotationPoint:!0,deepSelect:!1,pointType:\\\"circle\\\"}}(),function(){(function(){function t(t){t.remember(\\\"_resizeHandler\\\",this),this.el=t,this.parameters={},this.lastUpdateCall=null,this.p=t.doc().node.createSVGPoint()}t.prototype.transformPoint=function(t,e,i){return this.p.x=t-(this.offset.x-window.pageXOffset),this.p.y=e-(this.offset.y-window.pageYOffset),this.p.matrixTransform(i||this.m)},t.prototype._extractPosition=function(t){return{x:null!=t.clientX?t.clientX:t.touches[0].clientX,y:null!=t.clientY?t.clientY:t.touches[0].clientY}},t.prototype.init=function(t){var e=this;if(this.stop(),\\\"stop\\\"!==t){for(var i in this.options={},this.el.resize.defaults)this.options[i]=this.el.resize.defaults[i],void 0!==t[i]&&(this.options[i]=t[i]);this.el.on(\\\"lt.resize\\\",(function(t){e.resize(t||window.event)})),this.el.on(\\\"rt.resize\\\",(function(t){e.resize(t||window.event)})),this.el.on(\\\"rb.resize\\\",(function(t){e.resize(t||window.event)})),this.el.on(\\\"lb.resize\\\",(function(t){e.resize(t||window.event)})),this.el.on(\\\"t.resize\\\",(function(t){e.resize(t||window.event)})),this.el.on(\\\"r.resize\\\",(function(t){e.resize(t||window.event)})),this.el.on(\\\"b.resize\\\",(function(t){e.resize(t||window.event)})),this.el.on(\\\"l.resize\\\",(function(t){e.resize(t||window.event)})),this.el.on(\\\"rot.resize\\\",(function(t){e.resize(t||window.event)})),this.el.on(\\\"point.resize\\\",(function(t){e.resize(t||window.event)})),this.update()}},t.prototype.stop=function(){return this.el.off(\\\"lt.resize\\\"),this.el.off(\\\"rt.resize\\\"),this.el.off(\\\"rb.resize\\\"),this.el.off(\\\"lb.resize\\\"),this.el.off(\\\"t.resize\\\"),this.el.off(\\\"r.resize\\\"),this.el.off(\\\"b.resize\\\"),this.el.off(\\\"l.resize\\\"),this.el.off(\\\"rot.resize\\\"),this.el.off(\\\"point.resize\\\"),this},t.prototype.resize=function(t){var e=this;this.m=this.el.node.getScreenCTM().inverse(),this.offset={x:window.pageXOffset,y:window.pageYOffset};var i=this._extractPosition(t.detail.event);if(this.parameters={type:this.el.type,p:this.transformPoint(i.x,i.y),x:t.detail.x,y:t.detail.y,box:this.el.bbox(),rotation:this.el.transform().rotation},\\\"text\\\"===this.el.type&&(this.parameters.fontSize=this.el.attr()[\\\"font-size\\\"]),void 0!==t.detail.i){var a=this.el.array().valueOf();this.parameters.i=t.detail.i,this.parameters.pointCoords=[a[t.detail.i][0],a[t.detail.i][1]]}switch(t.type){case\\\"lt\\\":this.calc=function(t,e){var i=this.snapToGrid(t,e);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height-i[1]>0){if(\\\"text\\\"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr(\\\"font-size\\\",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y+i[1]).size(this.parameters.box.width-i[0],this.parameters.box.height-i[1])}};break;case\\\"rt\\\":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height-i[1]>0){if(\\\"text\\\"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr(\\\"font-size\\\",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).size(this.parameters.box.width+i[0],this.parameters.box.height-i[1])}};break;case\\\"rb\\\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height+i[1]>0){if(\\\"text\\\"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr(\\\"font-size\\\",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+i[0],this.parameters.box.height+i[1])}};break;case\\\"lb\\\":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height+i[1]>0){if(\\\"text\\\"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr(\\\"font-size\\\",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).size(this.parameters.box.width-i[0],this.parameters.box.height+i[1])}};break;case\\\"t\\\":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.height-i[1]>0){if(\\\"text\\\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).height(this.parameters.box.height-i[1])}};break;case\\\"r\\\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0){if(\\\"text\\\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+i[0])}};break;case\\\"b\\\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.height+i[1]>0){if(\\\"text\\\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+i[1])}};break;case\\\"l\\\":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0){if(\\\"text\\\"===this.parameters.type)return;this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).width(this.parameters.box.width-i[0])}};break;case\\\"rot\\\":this.calc=function(t,e){var i=t+this.parameters.p.x,a=e+this.parameters.p.y,s=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),r=Math.atan2(a-this.parameters.box.y-this.parameters.box.height/2,i-this.parameters.box.x-this.parameters.box.width/2),o=this.parameters.rotation+180*(r-s)/Math.PI+this.options.snapToAngle/2;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(o-o%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case\\\"point\\\":this.calc=function(t,e){var i=this.snapToGrid(t,e,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),a=this.el.array().valueOf();a[this.parameters.i][0]=this.parameters.pointCoords[0]+i[0],a[this.parameters.i][1]=this.parameters.pointCoords[1]+i[1],this.el.plot(a)}}this.el.fire(\\\"resizestart\\\",{dx:this.parameters.x,dy:this.parameters.y,event:t}),SVG.on(window,\\\"touchmove.resize\\\",(function(t){e.update(t||window.event)})),SVG.on(window,\\\"touchend.resize\\\",(function(){e.done()})),SVG.on(window,\\\"mousemove.resize\\\",(function(t){e.update(t||window.event)})),SVG.on(window,\\\"mouseup.resize\\\",(function(){e.done()}))},t.prototype.update=function(t){if(t){var e=this._extractPosition(t),i=this.transformPoint(e.x,e.y),a=i.x-this.parameters.p.x,s=i.y-this.parameters.p.y;this.lastUpdateCall=[a,s],this.calc(a,s),this.el.fire(\\\"resizing\\\",{dx:a,dy:s,event:t})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},t.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,\\\"mousemove.resize\\\"),SVG.off(window,\\\"mouseup.resize\\\"),SVG.off(window,\\\"touchmove.resize\\\"),SVG.off(window,\\\"touchend.resize\\\"),this.el.fire(\\\"resizedone\\\")},t.prototype.snapToGrid=function(t,e,i,a){var s;return void 0!==a?s=[(i+t)%this.options.snapToGrid,(a+e)%this.options.snapToGrid]:(i=null==i?3:i,s=[(this.parameters.box.x+t+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+e+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),t<0&&(s[0]-=this.options.snapToGrid),e<0&&(s[1]-=this.options.snapToGrid),t-=Math.abs(s[0])<this.options.snapToGrid/2?s[0]:s[0]-(t<0?-this.options.snapToGrid:this.options.snapToGrid),e-=Math.abs(s[1])<this.options.snapToGrid/2?s[1]:s[1]-(e<0?-this.options.snapToGrid:this.options.snapToGrid),this.constraintToBox(t,e,i,a)},t.prototype.constraintToBox=function(t,e,i,a){var s,r,o=this.options.constraint||{};return void 0!==a?(s=i,r=a):(s=this.parameters.box.x+(1&i?0:this.parameters.box.width),r=this.parameters.box.y+(2&i?0:this.parameters.box.height)),void 0!==o.minX&&s+t<o.minX&&(t=o.minX-s),void 0!==o.maxX&&s+t>o.maxX&&(t=o.maxX-s),void 0!==o.minY&&r+e<o.minY&&(e=o.minY-r),void 0!==o.maxY&&r+e>o.maxY&&(e=o.maxY-r),[t,e]},t.prototype.checkAspectRatio=function(t,e){if(!this.options.saveAspectRatio)return t;var i=t.slice(),a=this.parameters.box.width/this.parameters.box.height,s=this.parameters.box.width+t[0],r=this.parameters.box.height-t[1],o=s/r;return o<a?(i[1]=s/a-this.parameters.box.height,e&&(i[1]=-i[1])):o>a&&(i[0]=this.parameters.box.width-r*a,e&&(i[0]=-i[0])),i},SVG.extend(SVG.Element,{resize:function(e){return(this.remember(\\\"_resizeHandler\\\")||new t(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}();!function(t,e){void 0===e&&(e={});var i=e.insertAt;if(t&&\\\"undefined\\\"!=typeof document){var a=document.head||document.getElementsByTagName(\\\"head\\\")[0],s=document.createElement(\\\"style\\\");s.type=\\\"text/css\\\",\\\"top\\\"===i&&a.firstChild?a.insertBefore(s,a.firstChild):a.appendChild(s),s.styleSheet?s.styleSheet.cssText=t:s.appendChild(document.createTextNode(t))}}('.apexcharts-canvas {\\\\n  position: relative;\\\\n  user-select: none;\\\\n  /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\\\\n}\\\\n\\\\n\\\\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\\\\n.apexcharts-canvas ::-webkit-scrollbar {\\\\n  -webkit-appearance: none;\\\\n  width: 6px;\\\\n}\\\\n\\\\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\\\\n  border-radius: 4px;\\\\n  background-color: rgba(0, 0, 0, .5);\\\\n  box-shadow: 0 0 1px rgba(255, 255, 255, .5);\\\\n  -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5);\\\\n}\\\\n\\\\n\\\\n.apexcharts-inner {\\\\n  position: relative;\\\\n}\\\\n\\\\n.apexcharts-text tspan {\\\\n  font-family: inherit;\\\\n}\\\\n\\\\n.legend-mouseover-inactive {\\\\n  transition: 0.15s ease all;\\\\n  opacity: 0.20;\\\\n}\\\\n\\\\n.apexcharts-series-collapsed {\\\\n  opacity: 0;\\\\n}\\\\n\\\\n.apexcharts-tooltip {\\\\n  border-radius: 5px;\\\\n  box-shadow: 2px 2px 6px -4px #999;\\\\n  cursor: default;\\\\n  font-size: 14px;\\\\n  left: 62px;\\\\n  opacity: 0;\\\\n  pointer-events: none;\\\\n  position: absolute;\\\\n  top: 20px;\\\\n  display: flex;\\\\n  flex-direction: column;\\\\n  overflow: hidden;\\\\n  white-space: nowrap;\\\\n  z-index: 12;\\\\n  transition: 0.15s ease all;\\\\n}\\\\n\\\\n.apexcharts-tooltip.apexcharts-active {\\\\n  opacity: 1;\\\\n  transition: 0.15s ease all;\\\\n}\\\\n\\\\n.apexcharts-tooltip.apexcharts-theme-light {\\\\n  border: 1px solid #e3e3e3;\\\\n  background: rgba(255, 255, 255, 0.96);\\\\n}\\\\n\\\\n.apexcharts-tooltip.apexcharts-theme-dark {\\\\n  color: #fff;\\\\n  background: rgba(30, 30, 30, 0.8);\\\\n}\\\\n\\\\n.apexcharts-tooltip * {\\\\n  font-family: inherit;\\\\n}\\\\n\\\\n\\\\n.apexcharts-tooltip-title {\\\\n  padding: 6px;\\\\n  font-size: 15px;\\\\n  margin-bottom: 4px;\\\\n}\\\\n\\\\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {\\\\n  background: #ECEFF1;\\\\n  border-bottom: 1px solid #ddd;\\\\n}\\\\n\\\\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\\\\n  background: rgba(0, 0, 0, 0.7);\\\\n  border-bottom: 1px solid #333;\\\\n}\\\\n\\\\n.apexcharts-tooltip-text-y-value,\\\\n.apexcharts-tooltip-text-goals-value,\\\\n.apexcharts-tooltip-text-z-value {\\\\n  display: inline-block;\\\\n  font-weight: 600;\\\\n  margin-left: 5px;\\\\n}\\\\n\\\\n.apexcharts-tooltip-text-y-label:empty,\\\\n.apexcharts-tooltip-text-y-value:empty,\\\\n.apexcharts-tooltip-text-goals-label:empty,\\\\n.apexcharts-tooltip-text-goals-value:empty,\\\\n.apexcharts-tooltip-text-z-value:empty {\\\\n  display: none;\\\\n}\\\\n\\\\n.apexcharts-tooltip-text-y-value,\\\\n.apexcharts-tooltip-text-goals-value,\\\\n.apexcharts-tooltip-text-z-value {\\\\n  font-weight: 600;\\\\n}\\\\n\\\\n.apexcharts-tooltip-text-goals-label, \\\\n.apexcharts-tooltip-text-goals-value {\\\\n  padding: 6px 0 5px;\\\\n}\\\\n\\\\n.apexcharts-tooltip-goals-group, \\\\n.apexcharts-tooltip-text-goals-label, \\\\n.apexcharts-tooltip-text-goals-value {\\\\n  display: flex;\\\\n}\\\\n.apexcharts-tooltip-text-goals-label:not(:empty),\\\\n.apexcharts-tooltip-text-goals-value:not(:empty) {\\\\n  margin-top: -6px;\\\\n}\\\\n\\\\n.apexcharts-tooltip-marker {\\\\n  width: 12px;\\\\n  height: 12px;\\\\n  position: relative;\\\\n  top: 0px;\\\\n  margin-right: 10px;\\\\n  border-radius: 50%;\\\\n}\\\\n\\\\n.apexcharts-tooltip-series-group {\\\\n  padding: 0 10px;\\\\n  display: none;\\\\n  text-align: left;\\\\n  justify-content: left;\\\\n  align-items: center;\\\\n}\\\\n\\\\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\\\\n  opacity: 1;\\\\n}\\\\n\\\\n.apexcharts-tooltip-series-group.apexcharts-active,\\\\n.apexcharts-tooltip-series-group:last-child {\\\\n  padding-bottom: 4px;\\\\n}\\\\n\\\\n.apexcharts-tooltip-series-group-hidden {\\\\n  opacity: 0;\\\\n  height: 0;\\\\n  line-height: 0;\\\\n  padding: 0 !important;\\\\n}\\\\n\\\\n.apexcharts-tooltip-y-group {\\\\n  padding: 6px 0 5px;\\\\n}\\\\n\\\\n.apexcharts-tooltip-box, .apexcharts-custom-tooltip {\\\\n  padding: 4px 8px;\\\\n}\\\\n\\\\n.apexcharts-tooltip-boxPlot {\\\\n  display: flex;\\\\n  flex-direction: column-reverse;\\\\n}\\\\n\\\\n.apexcharts-tooltip-box>div {\\\\n  margin: 4px 0;\\\\n}\\\\n\\\\n.apexcharts-tooltip-box span.value {\\\\n  font-weight: bold;\\\\n}\\\\n\\\\n.apexcharts-tooltip-rangebar {\\\\n  padding: 5px 8px;\\\\n}\\\\n\\\\n.apexcharts-tooltip-rangebar .category {\\\\n  font-weight: 600;\\\\n  color: #777;\\\\n}\\\\n\\\\n.apexcharts-tooltip-rangebar .series-name {\\\\n  font-weight: bold;\\\\n  display: block;\\\\n  margin-bottom: 5px;\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip {\\\\n  opacity: 0;\\\\n  padding: 9px 10px;\\\\n  pointer-events: none;\\\\n  color: #373d3f;\\\\n  font-size: 13px;\\\\n  text-align: center;\\\\n  border-radius: 2px;\\\\n  position: absolute;\\\\n  z-index: 10;\\\\n  background: #ECEFF1;\\\\n  border: 1px solid #90A4AE;\\\\n  transition: 0.15s ease all;\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip.apexcharts-theme-dark {\\\\n  background: rgba(0, 0, 0, 0.7);\\\\n  border: 1px solid rgba(0, 0, 0, 0.5);\\\\n  color: #fff;\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip:after,\\\\n.apexcharts-xaxistooltip:before {\\\\n  left: 50%;\\\\n  border: solid transparent;\\\\n  content: \\\" \\\";\\\\n  height: 0;\\\\n  width: 0;\\\\n  position: absolute;\\\\n  pointer-events: none;\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip:after {\\\\n  border-color: rgba(236, 239, 241, 0);\\\\n  border-width: 6px;\\\\n  margin-left: -6px;\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip:before {\\\\n  border-color: rgba(144, 164, 174, 0);\\\\n  border-width: 7px;\\\\n  margin-left: -7px;\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip-bottom:after,\\\\n.apexcharts-xaxistooltip-bottom:before {\\\\n  bottom: 100%;\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip-top:after,\\\\n.apexcharts-xaxistooltip-top:before {\\\\n  top: 100%;\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip-bottom:after {\\\\n  border-bottom-color: #ECEFF1;\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip-bottom:before {\\\\n  border-bottom-color: #90A4AE;\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after {\\\\n  border-bottom-color: rgba(0, 0, 0, 0.5);\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {\\\\n  border-bottom-color: rgba(0, 0, 0, 0.5);\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip-top:after {\\\\n  border-top-color: #ECEFF1\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip-top:before {\\\\n  border-top-color: #90A4AE;\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after {\\\\n  border-top-color: rgba(0, 0, 0, 0.5);\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {\\\\n  border-top-color: rgba(0, 0, 0, 0.5);\\\\n}\\\\n\\\\n.apexcharts-xaxistooltip.apexcharts-active {\\\\n  opacity: 1;\\\\n  transition: 0.15s ease all;\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip {\\\\n  opacity: 0;\\\\n  padding: 4px 10px;\\\\n  pointer-events: none;\\\\n  color: #373d3f;\\\\n  font-size: 13px;\\\\n  text-align: center;\\\\n  border-radius: 2px;\\\\n  position: absolute;\\\\n  z-index: 10;\\\\n  background: #ECEFF1;\\\\n  border: 1px solid #90A4AE;\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\\\\n  background: rgba(0, 0, 0, 0.7);\\\\n  border: 1px solid rgba(0, 0, 0, 0.5);\\\\n  color: #fff;\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip:after,\\\\n.apexcharts-yaxistooltip:before {\\\\n  top: 50%;\\\\n  border: solid transparent;\\\\n  content: \\\" \\\";\\\\n  height: 0;\\\\n  width: 0;\\\\n  position: absolute;\\\\n  pointer-events: none;\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip:after {\\\\n  border-color: rgba(236, 239, 241, 0);\\\\n  border-width: 6px;\\\\n  margin-top: -6px;\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip:before {\\\\n  border-color: rgba(144, 164, 174, 0);\\\\n  border-width: 7px;\\\\n  margin-top: -7px;\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip-left:after,\\\\n.apexcharts-yaxistooltip-left:before {\\\\n  left: 100%;\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip-right:after,\\\\n.apexcharts-yaxistooltip-right:before {\\\\n  right: 100%;\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip-left:after {\\\\n  border-left-color: #ECEFF1;\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip-left:before {\\\\n  border-left-color: #90A4AE;\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after {\\\\n  border-left-color: rgba(0, 0, 0, 0.5);\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {\\\\n  border-left-color: rgba(0, 0, 0, 0.5);\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip-right:after {\\\\n  border-right-color: #ECEFF1;\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip-right:before {\\\\n  border-right-color: #90A4AE;\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after {\\\\n  border-right-color: rgba(0, 0, 0, 0.5);\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {\\\\n  border-right-color: rgba(0, 0, 0, 0.5);\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip.apexcharts-active {\\\\n  opacity: 1;\\\\n}\\\\n\\\\n.apexcharts-yaxistooltip-hidden {\\\\n  display: none;\\\\n}\\\\n\\\\n.apexcharts-xcrosshairs,\\\\n.apexcharts-ycrosshairs {\\\\n  pointer-events: none;\\\\n  opacity: 0;\\\\n  transition: 0.15s ease all;\\\\n}\\\\n\\\\n.apexcharts-xcrosshairs.apexcharts-active,\\\\n.apexcharts-ycrosshairs.apexcharts-active {\\\\n  opacity: 1;\\\\n  transition: 0.15s ease all;\\\\n}\\\\n\\\\n.apexcharts-ycrosshairs-hidden {\\\\n  opacity: 0;\\\\n}\\\\n\\\\n.apexcharts-selection-rect {\\\\n  cursor: move;\\\\n}\\\\n\\\\n.svg_select_boundingRect, .svg_select_points_rot {\\\\n  pointer-events: none;\\\\n  opacity: 0;\\\\n  visibility: hidden;\\\\n}\\\\n.apexcharts-selection-rect + g .svg_select_boundingRect,\\\\n.apexcharts-selection-rect + g .svg_select_points_rot {\\\\n  opacity: 0;\\\\n  visibility: hidden;\\\\n}\\\\n\\\\n.apexcharts-selection-rect + g .svg_select_points_l,\\\\n.apexcharts-selection-rect + g .svg_select_points_r {\\\\n  cursor: ew-resize;\\\\n  opacity: 1;\\\\n  visibility: visible;\\\\n}\\\\n\\\\n.svg_select_points {\\\\n  fill: #efefef;\\\\n  stroke: #333;\\\\n  rx: 2;\\\\n}\\\\n\\\\n.apexcharts-svg.apexcharts-zoomable.hovering-zoom {\\\\n  cursor: crosshair\\\\n}\\\\n\\\\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\\\\n  cursor: move\\\\n}\\\\n\\\\n.apexcharts-zoom-icon,\\\\n.apexcharts-zoomin-icon,\\\\n.apexcharts-zoomout-icon,\\\\n.apexcharts-reset-icon,\\\\n.apexcharts-pan-icon,\\\\n.apexcharts-selection-icon,\\\\n.apexcharts-menu-icon,\\\\n.apexcharts-toolbar-custom-icon {\\\\n  cursor: pointer;\\\\n  width: 20px;\\\\n  height: 20px;\\\\n  line-height: 24px;\\\\n  color: #6E8192;\\\\n  text-align: center;\\\\n}\\\\n\\\\n.apexcharts-zoom-icon svg,\\\\n.apexcharts-zoomin-icon svg,\\\\n.apexcharts-zoomout-icon svg,\\\\n.apexcharts-reset-icon svg,\\\\n.apexcharts-menu-icon svg {\\\\n  fill: #6E8192;\\\\n}\\\\n\\\\n.apexcharts-selection-icon svg {\\\\n  fill: #444;\\\\n  transform: scale(0.76)\\\\n}\\\\n\\\\n.apexcharts-theme-dark .apexcharts-zoom-icon svg,\\\\n.apexcharts-theme-dark .apexcharts-zoomin-icon svg,\\\\n.apexcharts-theme-dark .apexcharts-zoomout-icon svg,\\\\n.apexcharts-theme-dark .apexcharts-reset-icon svg,\\\\n.apexcharts-theme-dark .apexcharts-pan-icon svg,\\\\n.apexcharts-theme-dark .apexcharts-selection-icon svg,\\\\n.apexcharts-theme-dark .apexcharts-menu-icon svg,\\\\n.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg {\\\\n  fill: #f3f4f5;\\\\n}\\\\n\\\\n.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg,\\\\n.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,\\\\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg {\\\\n  fill: #008FFB;\\\\n}\\\\n\\\\n.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,\\\\n.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,\\\\n.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,\\\\n.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg,\\\\n.apexcharts-theme-light .apexcharts-reset-icon:hover svg,\\\\n.apexcharts-theme-light .apexcharts-menu-icon:hover svg {\\\\n  fill: #333;\\\\n}\\\\n\\\\n.apexcharts-selection-icon,\\\\n.apexcharts-menu-icon {\\\\n  position: relative;\\\\n}\\\\n\\\\n.apexcharts-reset-icon {\\\\n  margin-left: 5px;\\\\n}\\\\n\\\\n.apexcharts-zoom-icon,\\\\n.apexcharts-reset-icon,\\\\n.apexcharts-menu-icon {\\\\n  transform: scale(0.85);\\\\n}\\\\n\\\\n.apexcharts-zoomin-icon,\\\\n.apexcharts-zoomout-icon {\\\\n  transform: scale(0.7)\\\\n}\\\\n\\\\n.apexcharts-zoomout-icon {\\\\n  margin-right: 3px;\\\\n}\\\\n\\\\n.apexcharts-pan-icon {\\\\n  transform: scale(0.62);\\\\n  position: relative;\\\\n  left: 1px;\\\\n  top: 0px;\\\\n}\\\\n\\\\n.apexcharts-pan-icon svg {\\\\n  fill: #fff;\\\\n  stroke: #6E8192;\\\\n  stroke-width: 2;\\\\n}\\\\n\\\\n.apexcharts-pan-icon.apexcharts-selected svg {\\\\n  stroke: #008FFB;\\\\n}\\\\n\\\\n.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {\\\\n  stroke: #333;\\\\n}\\\\n\\\\n.apexcharts-toolbar {\\\\n  position: absolute;\\\\n  z-index: 11;\\\\n  max-width: 176px;\\\\n  text-align: right;\\\\n  border-radius: 3px;\\\\n  padding: 0px 6px 2px 6px;\\\\n  display: flex;\\\\n  justify-content: space-between;\\\\n  align-items: center;\\\\n}\\\\n\\\\n.apexcharts-menu {\\\\n  background: #fff;\\\\n  position: absolute;\\\\n  top: 100%;\\\\n  border: 1px solid #ddd;\\\\n  border-radius: 3px;\\\\n  padding: 3px;\\\\n  right: 10px;\\\\n  opacity: 0;\\\\n  min-width: 110px;\\\\n  transition: 0.15s ease all;\\\\n  pointer-events: none;\\\\n}\\\\n\\\\n.apexcharts-menu.apexcharts-menu-open {\\\\n  opacity: 1;\\\\n  pointer-events: all;\\\\n  transition: 0.15s ease all;\\\\n}\\\\n\\\\n.apexcharts-menu-item {\\\\n  padding: 6px 7px;\\\\n  font-size: 12px;\\\\n  cursor: pointer;\\\\n}\\\\n\\\\n.apexcharts-theme-light .apexcharts-menu-item:hover {\\\\n  background: #eee;\\\\n}\\\\n\\\\n.apexcharts-theme-dark .apexcharts-menu {\\\\n  background: rgba(0, 0, 0, 0.7);\\\\n  color: #fff;\\\\n}\\\\n\\\\n@media screen and (min-width: 768px) {\\\\n  .apexcharts-canvas:hover .apexcharts-toolbar {\\\\n    opacity: 1;\\\\n  }\\\\n}\\\\n\\\\n.apexcharts-datalabel.apexcharts-element-hidden {\\\\n  opacity: 0;\\\\n}\\\\n\\\\n.apexcharts-pie-label,\\\\n.apexcharts-datalabels,\\\\n.apexcharts-datalabel,\\\\n.apexcharts-datalabel-label,\\\\n.apexcharts-datalabel-value {\\\\n  cursor: default;\\\\n  pointer-events: none;\\\\n}\\\\n\\\\n.apexcharts-pie-label-delay {\\\\n  opacity: 0;\\\\n  animation-name: opaque;\\\\n  animation-duration: 0.3s;\\\\n  animation-fill-mode: forwards;\\\\n  animation-timing-function: ease;\\\\n}\\\\n\\\\n.apexcharts-canvas .apexcharts-element-hidden {\\\\n  opacity: 0;\\\\n}\\\\n\\\\n.apexcharts-hide .apexcharts-series-points {\\\\n  opacity: 0;\\\\n}\\\\n\\\\n.apexcharts-gridline,\\\\n.apexcharts-annotation-rect,\\\\n.apexcharts-tooltip .apexcharts-marker,\\\\n.apexcharts-area-series .apexcharts-area,\\\\n.apexcharts-line,\\\\n.apexcharts-zoom-rect,\\\\n.apexcharts-toolbar svg,\\\\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\\\\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\\\\n.apexcharts-radar-series path,\\\\n.apexcharts-radar-series polygon {\\\\n  pointer-events: none;\\\\n}\\\\n\\\\n\\\\n/* markers */\\\\n\\\\n.apexcharts-marker {\\\\n  transition: 0.15s ease all;\\\\n}\\\\n\\\\n@keyframes opaque {\\\\n  0% {\\\\n    opacity: 0;\\\\n  }\\\\n  100% {\\\\n    opacity: 1;\\\\n  }\\\\n}\\\\n\\\\n\\\\n/* Resize generated styles */\\\\n\\\\n@keyframes resizeanim {\\\\n  from {\\\\n    opacity: 0;\\\\n  }\\\\n  to {\\\\n    opacity: 0;\\\\n  }\\\\n}\\\\n\\\\n.resize-triggers {\\\\n  animation: 1ms resizeanim;\\\\n  visibility: hidden;\\\\n  opacity: 0;\\\\n}\\\\n\\\\n.resize-triggers,\\\\n.resize-triggers>div,\\\\n.contract-trigger:before {\\\\n  content: \\\" \\\";\\\\n  display: block;\\\\n  position: absolute;\\\\n  top: 0;\\\\n  left: 0;\\\\n  height: 100%;\\\\n  width: 100%;\\\\n  overflow: hidden;\\\\n}\\\\n\\\\n.resize-triggers>div {\\\\n  background: #eee;\\\\n  overflow: auto;\\\\n}\\\\n\\\\n.contract-trigger:before {\\\\n  width: 200%;\\\\n  height: 200%;\\\\n}'),function(){function t(t){var e=t.__resizeTriggers__,i=e.firstElementChild,a=e.lastElementChild,s=i?i.firstElementChild:null;a&&(a.scrollLeft=a.scrollWidth,a.scrollTop=a.scrollHeight),s&&(s.style.width=i.offsetWidth+1+\\\"px\\\",s.style.height=i.offsetHeight+1+\\\"px\\\"),i&&(i.scrollLeft=i.scrollWidth,i.scrollTop=i.scrollHeight)}function e(e){var i=this;t(this),this.__resizeRAF__&&r(this.__resizeRAF__),this.__resizeRAF__=s((function(){(function(t){return t.offsetWidth!=t.__resizeLast__.width||t.offsetHeight!=t.__resizeLast__.height})(i)&&(i.__resizeLast__.width=i.offsetWidth,i.__resizeLast__.height=i.offsetHeight,i.__resizeListeners__.forEach((function(t){t.call(e)})))}))}var i,a,s=(i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(t){return window.setTimeout(t,20)},function(t){return i(t)}),r=(a=window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.clearTimeout,function(t){return a(t)}),o=!1,n=\\\"animationstart\\\",l=\\\"Webkit Moz O ms\\\".split(\\\" \\\"),h=\\\"webkitAnimationStart animationstart oAnimationStart MSAnimationStart\\\".split(\\\" \\\"),c=document.createElement(\\\"fakeelement\\\");if(void 0!==c.style.animationName&&(o=!0),!1===o)for(var d=0;d<l.length;d++)if(void 0!==c.style[l[d]+\\\"AnimationName\\\"]){n=h[d];break}window.addResizeListener=function(i,a){i.__resizeTriggers__||(\\\"static\\\"==getComputedStyle(i).position&&(i.style.position=\\\"relative\\\"),i.__resizeLast__={},i.__resizeListeners__=[],(i.__resizeTriggers__=document.createElement(\\\"div\\\")).className=\\\"resize-triggers\\\",i.__resizeTriggers__.innerHTML='<div class=\\\"expand-trigger\\\"><div></div></div><div class=\\\"contract-trigger\\\"></div>',i.appendChild(i.__resizeTriggers__),t(i),i.addEventListener(\\\"scroll\\\",e,!0),n&&i.__resizeTriggers__.addEventListener(n,(function(e){\\\"resizeanim\\\"==e.animationName&&t(i)}))),i.__resizeListeners__.push(a)},window.removeResizeListener=function(t,i){t&&(t.__resizeListeners__.splice(t.__resizeListeners__.indexOf(i),1),t.__resizeListeners__.length||(t.removeEventListener(\\\"scroll\\\",e),t.__resizeTriggers__.parentNode&&(t.__resizeTriggers__=!t.removeChild(t.__resizeTriggers__))))}}(),void 0===window.Apex&&(window.Apex={});var Yt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"initModules\\\",value:function(){this.ctx.publicMethods=[\\\"updateOptions\\\",\\\"updateSeries\\\",\\\"appendData\\\",\\\"appendSeries\\\",\\\"toggleSeries\\\",\\\"showSeries\\\",\\\"hideSeries\\\",\\\"setLocale\\\",\\\"resetSeries\\\",\\\"zoomX\\\",\\\"toggleDataPointSelection\\\",\\\"dataURI\\\",\\\"addXaxisAnnotation\\\",\\\"addYaxisAnnotation\\\",\\\"addPointAnnotation\\\",\\\"clearAnnotations\\\",\\\"removeAnnotation\\\",\\\"paper\\\",\\\"destroy\\\"],this.ctx.eventList=[\\\"click\\\",\\\"mousedown\\\",\\\"mousemove\\\",\\\"mouseleave\\\",\\\"touchstart\\\",\\\"touchmove\\\",\\\"touchleave\\\",\\\"mouseup\\\",\\\"touchend\\\"],this.ctx.animations=new f(this.ctx),this.ctx.axes=new J(this.ctx),this.ctx.core=new Xt(this.ctx.el,this.ctx),this.ctx.config=new H({}),this.ctx.data=new O(this.ctx),this.ctx.grid=new _(this.ctx),this.ctx.graphics=new b(this.ctx),this.ctx.coreUtils=new y(this.ctx),this.ctx.crosshairs=new Q(this.ctx),this.ctx.events=new Z(this.ctx),this.ctx.exports=new V(this.ctx),this.ctx.localization=new $(this.ctx),this.ctx.options=new S,this.ctx.responsive=new K(this.ctx),this.ctx.series=new z(this.ctx),this.ctx.theme=new tt(this.ctx),this.ctx.formatters=new W(this.ctx),this.ctx.titleSubtitle=new et(this.ctx),this.ctx.legend=new lt(this.ctx),this.ctx.toolbar=new ht(this.ctx),this.ctx.dimensions=new ot(this.ctx),this.ctx.updateHelpers=new Et(this.ctx),this.ctx.zoomPanSelection=new ct(this.ctx),this.ctx.w.globals.tooltip=new bt(this.ctx)}}]),t}(),Ft=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\\\"clear\\\",value:function(t){var e=t.isUpdating;this.ctx.zoomPanSelection&&this.ctx.zoomPanSelection.destroy(),this.ctx.toolbar&&this.ctx.toolbar.destroy(),this.ctx.animations=null,this.ctx.axes=null,this.ctx.annotations=null,this.ctx.core=null,this.ctx.data=null,this.ctx.grid=null,this.ctx.series=null,this.ctx.responsive=null,this.ctx.theme=null,this.ctx.formatters=null,this.ctx.titleSubtitle=null,this.ctx.legend=null,this.ctx.dimensions=null,this.ctx.options=null,this.ctx.crosshairs=null,this.ctx.zoomPanSelection=null,this.ctx.updateHelpers=null,this.ctx.toolbar=null,this.ctx.localization=null,this.ctx.w.globals.tooltip=null,this.clearDomElements({isUpdating:e})}},{key:\\\"killSVG\\\",value:function(t){t.each((function(t,e){this.removeClass(\\\"*\\\"),this.off(),this.stop()}),!0),t.ungroup(),t.clear()}},{key:\\\"clearDomElements\\\",value:function(t){var e=this,i=t.isUpdating,a=this.w.globals.dom.Paper.node;a.parentNode&&a.parentNode.parentNode&&!i&&(a.parentNode.parentNode.style.minHeight=\\\"unset\\\");var s=this.w.globals.dom.baseEl;s&&this.ctx.eventList.forEach((function(t){s.removeEventListener(t,e.ctx.events.documentEvent)}));var r=this.w.globals.dom;if(null!==this.ctx.el)for(;this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild);this.killSVG(r.Paper),r.Paper.remove(),r.elWrap=null,r.elGraphical=null,r.elAnnotations=null,r.elLegendWrap=null,r.baseEl=null,r.elGridRect=null,r.elGridRectMask=null,r.elGridRectMarkerMask=null,r.elForecastMask=null,r.elNonForecastMask=null,r.elDefs=null}}]),t}(),Rt=function(){function t(e,i){a(this,t),this.opts=i,this.ctx=this,this.w=new N(i).init(),this.el=e,this.w.globals.cuid=p.randomId(),this.w.globals.chartID=this.w.config.chart.id?p.escapeString(this.w.config.chart.id):this.w.globals.cuid,new Yt(this).initModules(),this.create=p.bind(this.create,this),this.windowResizeHandler=this._windowResizeHandler.bind(this),this.parentResizeHandler=this._parentResizeCallback.bind(this)}return r(t,[{key:\\\"render\\\",value:function(){var t=this;return new Promise((function(e,i){if(null!==t.el){void 0===Apex._chartInstances&&(Apex._chartInstances=[]),t.w.config.chart.id&&Apex._chartInstances.push({id:t.w.globals.chartID,group:t.w.config.chart.group,chart:t}),t.setLocale(t.w.config.chart.defaultLocale);var a=t.w.config.chart.events.beforeMount;\\\"function\\\"==typeof a&&a(t,t.w),t.events.fireEvent(\\\"beforeMount\\\",[t,t.w]),window.addEventListener(\\\"resize\\\",t.windowResizeHandler),window.addResizeListener(t.el.parentNode,t.parentResizeHandler);var s=t.create(t.w.config.series,{});if(!s)return e(t);t.mount(s).then((function(){\\\"function\\\"==typeof t.w.config.chart.events.mounted&&t.w.config.chart.events.mounted(t,t.w),t.events.fireEvent(\\\"mounted\\\",[t,t.w]),e(s)})).catch((function(t){i(t)}))}else i(new Error(\\\"Element not found\\\"))}))}},{key:\\\"create\\\",value:function(t,e){var i=this.w;new Yt(this).initModules();var a=this.w.globals;(a.noData=!1,a.animationEnded=!1,this.responsive.checkResponsiveConfig(e),i.config.xaxis.convertedCatToNumeric)&&new R(i.config).convertCatToNumericXaxis(i.config,this.ctx);if(null===this.el)return a.animationEnded=!0,null;if(this.core.setupElements(),\\\"treemap\\\"===i.config.chart.type&&(i.config.grid.show=!1,i.config.yaxis[0].show=!1),0===a.svgWidth)return a.animationEnded=!0,null;var s=y.checkComboSeries(t);a.comboCharts=s.comboCharts,a.comboBarCount=s.comboBarCount;var r=t.every((function(t){return t.data&&0===t.data.length}));(0===t.length||r)&&this.series.handleNoData(),this.events.setupEventHandlers(),this.data.parseData(t),this.theme.init(),new P(this).setGlobalMarkerSize(),this.formatters.setLabelFormatters(),this.titleSubtitle.draw(),a.noData&&a.collapsedSeries.length!==a.series.length&&!i.config.legend.showForSingleSeries||this.legend.init(),this.series.hasAllSeriesEqualX(),a.axisCharts&&(this.core.coreCalculations(),\\\"category\\\"!==i.config.xaxis.type&&this.formatters.setLabelFormatters(),this.ctx.toolbar.minX=i.globals.minX,this.ctx.toolbar.maxX=i.globals.maxX),this.formatters.heatmapLabelFormatters(),this.dimensions.plotCoords();var o=this.core.xySettings();this.grid.createGridMask();var n=this.core.plotChartType(t,o),l=new M(this);l.bringForward(),i.config.dataLabels.background.enabled&&l.dataLabelsBackground(),this.core.shiftGraphPosition();var h={plot:{left:i.globals.translateX,top:i.globals.translateY,width:i.globals.gridWidth,height:i.globals.gridHeight}};return{elGraph:n,xyRatios:o,elInner:i.globals.dom.elGraphical,dimensions:h}}},{key:\\\"mount\\\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=this,a=i.w;return new Promise((function(s,r){if(null===i.el)return r(new Error(\\\"Not enough data to display or target element not found\\\"));(null===e||a.globals.allSeriesCollapsed)&&i.series.handleNoData(),\\\"treemap\\\"!==a.config.chart.type&&i.axes.drawAxis(a.config.chart.type,e.xyRatios),i.grid=new _(i);var o=i.grid.drawGrid();i.annotations=new C(i),i.annotations.drawImageAnnos(),i.annotations.drawTextAnnos(),\\\"back\\\"===a.config.grid.position&&o&&a.globals.dom.elGraphical.add(o.el);var n=new G(t.ctx),l=new q(t.ctx);if(null!==o&&(n.xAxisLabelCorrections(o.xAxisTickWidth),l.setYAxisTextAlignments(),a.config.yaxis.map((function(t,e){-1===a.globals.ignoreYAxisIndexes.indexOf(e)&&l.yAxisTitleRotate(e,t.opposite)}))),\\\"back\\\"===a.config.annotations.position&&(a.globals.dom.Paper.add(a.globals.dom.elAnnotations),i.annotations.drawAxesAnnotations()),Array.isArray(e.elGraph))for(var h=0;h<e.elGraph.length;h++)a.globals.dom.elGraphical.add(e.elGraph[h]);else a.globals.dom.elGraphical.add(e.elGraph);if(\\\"front\\\"===a.config.grid.position&&o&&a.globals.dom.elGraphical.add(o.el),\\\"front\\\"===a.config.xaxis.crosshairs.position&&i.crosshairs.drawXCrosshairs(),\\\"front\\\"===a.config.yaxis[0].crosshairs.position&&i.crosshairs.drawYCrosshairs(),\\\"front\\\"===a.config.annotations.position&&(a.globals.dom.Paper.add(a.globals.dom.elAnnotations),i.annotations.drawAxesAnnotations()),!a.globals.noData){if(a.config.tooltip.enabled&&!a.globals.noData&&i.w.globals.tooltip.drawTooltip(e.xyRatios),a.globals.axisCharts&&(a.globals.isXNumeric||a.config.xaxis.convertedCatToNumeric||a.globals.isTimelineBar))(a.config.chart.zoom.enabled||a.config.chart.selection&&a.config.chart.selection.enabled||a.config.chart.pan&&a.config.chart.pan.enabled)&&i.zoomPanSelection.init({xyRatios:e.xyRatios});else{var c=a.config.chart.toolbar.tools;[\\\"zoom\\\",\\\"zoomin\\\",\\\"zoomout\\\",\\\"selection\\\",\\\"pan\\\",\\\"reset\\\"].forEach((function(t){c[t]=!1}))}a.config.chart.toolbar.show&&!a.globals.allSeriesCollapsed&&i.toolbar.createToolbar()}a.globals.memory.methodsToExec.length>0&&a.globals.memory.methodsToExec.forEach((function(t){t.method(t.params,!1,t.context)})),a.globals.axisCharts||a.globals.noData||i.core.resizeNonAxisCharts(),s(i)}))}},{key:\\\"destroy\\\",value:function(){window.removeEventListener(\\\"resize\\\",this.windowResizeHandler),window.removeResizeListener(this.el.parentNode,this.parentResizeHandler);var t=this.w.config.chart.id;t&&Apex._chartInstances.forEach((function(e,i){e.id===p.escapeString(t)&&Apex._chartInstances.splice(i,1)})),new Ft(this.ctx).clear({isUpdating:!1})}},{key:\\\"updateOptions\\\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=this.w;return o.globals.selection=void 0,t.series&&(this.series.resetSeries(!1,!0,!1),t.series.length&&t.series[0].data&&(t.series=t.series.map((function(t,i){return e.updateHelpers._extendSeries(t,i)}))),this.updateHelpers.revertDefaultAxisMinMax()),t.xaxis&&(t=this.updateHelpers.forceXAxisUpdate(t)),t.yaxis&&(t=this.updateHelpers.forceYAxisUpdate(t)),o.globals.collapsedSeriesIndices.length>0&&this.series.clearPreviousPaths(),t.theme&&(t=this.theme.updateThemeOptions(t)),this.updateHelpers._updateOptions(t,i,a,s,r)}},{key:\\\"updateSeries\\\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(t,e,i)}},{key:\\\"appendSeries\\\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=this.w.config.series.slice();return a.push(t),this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(a,e,i)}},{key:\\\"appendData\\\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var a=i.w.config.series.slice(),s=0;s<a.length;s++)if(null!==t[s]&&void 0!==t[s])for(var r=0;r<t[s].data.length;r++)a[s].data.push(t[s].data[r]);return i.w.config.series=a,e&&(i.w.globals.initialSeries=p.clone(i.w.config.series)),this.update()}},{key:\\\"update\\\",value:function(t){var e=this;return new Promise((function(i,a){new Ft(e.ctx).clear({isUpdating:!0});var s=e.create(e.w.config.series,t);if(!s)return i(e);e.mount(s).then((function(){\\\"function\\\"==typeof e.w.config.chart.events.updated&&e.w.config.chart.events.updated(e,e.w),e.events.fireEvent(\\\"updated\\\",[e,e.w]),e.w.globals.isDirty=!0,i(e)})).catch((function(t){a(t)}))}))}},{key:\\\"getSyncedCharts\\\",value:function(){var t=this.getGroupedCharts(),e=[this];return t.length&&(e=[],t.forEach((function(t){e.push(t)}))),e}},{key:\\\"getGroupedCharts\\\",value:function(){var t=this;return Apex._chartInstances.filter((function(t){if(t.group)return!0})).map((function(e){return t.w.config.chart.group===e.group?e.chart:t}))}},{key:\\\"toggleSeries\\\",value:function(t){return this.series.toggleSeries(t)}},{key:\\\"showSeries\\\",value:function(t){this.series.showSeries(t)}},{key:\\\"hideSeries\\\",value:function(t){this.series.hideSeries(t)}},{key:\\\"resetSeries\\\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.series.resetSeries(t,e)}},{key:\\\"addEventListener\\\",value:function(t,e){this.events.addEventListener(t,e)}},{key:\\\"removeEventListener\\\",value:function(t,e){this.events.removeEventListener(t,e)}},{key:\\\"addXaxisAnnotation\\\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addXaxisAnnotationExternal(t,e,a)}},{key:\\\"addYaxisAnnotation\\\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addYaxisAnnotationExternal(t,e,a)}},{key:\\\"addPointAnnotation\\\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addPointAnnotationExternal(t,e,a)}},{key:\\\"clearAnnotations\\\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,e=this;t&&(e=t),e.annotations.clearAnnotations(e)}},{key:\\\"removeAnnotation\\\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,i=this;e&&(i=e),i.annotations.removeAnnotation(i,t)}},{key:\\\"getChartArea\\\",value:function(){return this.w.globals.dom.baseEl.querySelector(\\\".apexcharts-inner\\\")}},{key:\\\"getSeriesTotalXRange\\\",value:function(t,e){return this.coreUtils.getSeriesTotalsXRange(t,e)}},{key:\\\"getHighestValueInSeries\\\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=new U(this.ctx);return e.getMinYMaxY(t).highestY}},{key:\\\"getLowestValueInSeries\\\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=new U(this.ctx);return e.getMinYMaxY(t).lowestY}},{key:\\\"getSeriesTotal\\\",value:function(){return this.w.globals.seriesTotals}},{key:\\\"toggleDataPointSelection\\\",value:function(t,e){return this.updateHelpers.toggleDataPointSelection(t,e)}},{key:\\\"zoomX\\\",value:function(t,e){this.ctx.toolbar.zoomUpdateOptions(t,e)}},{key:\\\"setLocale\\\",value:function(t){this.localization.setCurrentLocaleValues(t)}},{key:\\\"dataURI\\\",value:function(t){return new V(this.ctx).dataURI(t)}},{key:\\\"paper\\\",value:function(){return this.w.globals.dom.Paper}},{key:\\\"_parentResizeCallback\\\",value:function(){this.w.globals.animationEnded&&this.w.config.chart.redrawOnParentResize&&this._windowResize()}},{key:\\\"_windowResize\\\",value:function(){var t=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout((function(){t.w.globals.resized=!0,t.w.globals.dataChanged=!1,t.ctx.update()}),150)}},{key:\\\"_windowResizeHandler\\\",value:function(){var t=this.w.config.chart.redrawOnWindowResize;\\\"function\\\"==typeof t&&(t=t()),t&&this._windowResize()}}],[{key:\\\"getChartByID\\\",value:function(t){var e=p.escapeString(t),i=Apex._chartInstances.filter((function(t){return t.id===e}))[0];return i&&i.chart}},{key:\\\"initOnLoad\\\",value:function(){for(var e=document.querySelectorAll(\\\"[data-apexcharts]\\\"),i=0;i<e.length;i++){new t(e[i],JSON.parse(e[i].getAttribute(\\\"data-options\\\"))).render()}}},{key:\\\"exec\\\",value:function(t,e){var i=this.getChartByID(t);if(i){i.w.globals.isExecCalled=!0;var a=null;if(-1!==i.publicMethods.indexOf(e)){for(var s=arguments.length,r=new Array(s>2?s-2:0),o=2;o<s;o++)r[o-2]=arguments[o];a=i[e].apply(i,r)}return a}}},{key:\\\"merge\\\",value:function(t,e){return p.extend(t,e)}}]),t}();module.exports=Rt;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/apexcharts-clevision/dist/apexcharts.common.js?\");\n\n/***/ }),\n\n/***/ \"./libs/apex-charts/apexcharts.js\":\n/*!****************************************!*\\\n  !*** ./libs/apex-charts/apexcharts.js ***!\n  \\****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   ApexCharts: function() { return /* reexport default from dynamic */ apexcharts_clevision__WEBPACK_IMPORTED_MODULE_0___default.a; }\\n/* harmony export */ });\\n/* harmony import */ var apexcharts_clevision__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! apexcharts-clevision */ \\\"./node_modules/apexcharts-clevision/dist/apexcharts.common.js\\\");\\n/* harmony import */ var apexcharts_clevision__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(apexcharts_clevision__WEBPACK_IMPORTED_MODULE_0__);\\n\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./libs/apex-charts/apexcharts.js?\");\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module can't be inlined because the eval devtool is used.\n/******/ \tvar __webpack_exports__ = __webpack_require__(\"./libs/apex-charts/apexcharts.js\");\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"
  },
  {
    "path": "public/assets/vendor/libs/highlight/highlight-github.css",
    "content": "@import '../../node_modules/highlight.js/styles/github.css';\n"
  },
  {
    "path": "public/assets/vendor/libs/highlight/highlight.css",
    "content": "pre code.hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 1em;\n}\n\ncode.hljs {\n  padding: 3px 5px;\n}\n\n.hljs {\n  color: #383a42;\n  background: #fafafa;\n}\n\n.hljs-comment, .hljs-quote {\n  color: #a0a1a7;\n  font-style: italic;\n}\n\n.hljs-doctag, .hljs-formula, .hljs-keyword {\n  color: #a626a4;\n}\n\n.hljs-deletion, .hljs-name, .hljs-section, .hljs-selector-tag, .hljs-subst {\n  color: #e45649;\n}\n\n.hljs-literal {\n  color: #0184bb;\n}\n\n.hljs-addition, .hljs-attribute, .hljs-meta .hljs-string, .hljs-regexp, .hljs-string {\n  color: #50a14f;\n}\n\n.hljs-attr, .hljs-number, .hljs-selector-attr, .hljs-selector-class, .hljs-selector-pseudo, .hljs-template-variable, .hljs-type, .hljs-variable {\n  color: #986801;\n}\n\n.hljs-bullet, .hljs-link, .hljs-meta, .hljs-selector-id, .hljs-symbol, .hljs-title {\n  color: #4078f2;\n}\n\n.hljs-built_in, .hljs-class .hljs-title, .hljs-title.class_ {\n  color: #c18401;\n}\n\n.hljs-emphasis {\n  font-style: italic;\n}\n\n.hljs-strong {\n  font-weight: 700;\n}\n\n.hljs-link {\n  text-decoration: underline;\n}\n"
  },
  {
    "path": "public/assets/vendor/libs/highlight/highlight.js",
    "content": "/*\n * ATTENTION: The \"eval\" devtool has been used (maybe by default in mode: \"development\").\n * This devtool is neither made for production nor for readable output files.\n * It uses \"eval()\" calls to create a separate source file in the browser devtools.\n * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)\n * or disable the default devtool with \"devtool: false\".\n * If you are looking for production-ready output files, see mode: \"production\" (https://webpack.js.org/configuration/mode/).\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./libs/highlight/highlight.js\":\n/*!*************************************!*\\\n  !*** ./libs/highlight/highlight.js ***!\n  \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   hljs: function() { return /* reexport safe */ highlight_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]; }\\n/* harmony export */ });\\n/* harmony import */ var highlight_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! highlight.js */ \\\"./node_modules/highlight.js/es/index.js\\\");\\n\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./libs/highlight/highlight.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/core.js\":\n/*!***********************************************!*\\\n  !*** ./node_modules/highlight.js/lib/core.js ***!\n  \\***********************************************/\n/***/ (function(module) {\n\neval(\"/* eslint-disable no-multi-assign */\\n\\nfunction deepFreeze(obj) {\\n  if (obj instanceof Map) {\\n    obj.clear =\\n      obj.delete =\\n      obj.set =\\n        function () {\\n          throw new Error('map is read-only');\\n        };\\n  } else if (obj instanceof Set) {\\n    obj.add =\\n      obj.clear =\\n      obj.delete =\\n        function () {\\n          throw new Error('set is read-only');\\n        };\\n  }\\n\\n  // Freeze self\\n  Object.freeze(obj);\\n\\n  Object.getOwnPropertyNames(obj).forEach((name) => {\\n    const prop = obj[name];\\n    const type = typeof prop;\\n\\n    // Freeze prop if it is an object or function and also not already frozen\\n    if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\\n      deepFreeze(prop);\\n    }\\n  });\\n\\n  return obj;\\n}\\n\\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\\n/** @implements CallbackResponse */\\n\\nclass Response {\\n  /**\\n   * @param {CompiledMode} mode\\n   */\\n  constructor(mode) {\\n    // eslint-disable-next-line no-undefined\\n    if (mode.data === undefined) mode.data = {};\\n\\n    this.data = mode.data;\\n    this.isMatchIgnored = false;\\n  }\\n\\n  ignoreMatch() {\\n    this.isMatchIgnored = true;\\n  }\\n}\\n\\n/**\\n * @param {string} value\\n * @returns {string}\\n */\\nfunction escapeHTML(value) {\\n  return value\\n    .replace(/&/g, '&amp;')\\n    .replace(/</g, '&lt;')\\n    .replace(/>/g, '&gt;')\\n    .replace(/\\\"/g, '&quot;')\\n    .replace(/'/g, '&#x27;');\\n}\\n\\n/**\\n * performs a shallow merge of multiple objects into one\\n *\\n * @template T\\n * @param {T} original\\n * @param {Record<string,any>[]} objects\\n * @returns {T} a single new object\\n */\\nfunction inherit$1(original, ...objects) {\\n  /** @type Record<string,any> */\\n  const result = Object.create(null);\\n\\n  for (const key in original) {\\n    result[key] = original[key];\\n  }\\n  objects.forEach(function(obj) {\\n    for (const key in obj) {\\n      result[key] = obj[key];\\n    }\\n  });\\n  return /** @type {T} */ (result);\\n}\\n\\n/**\\n * @typedef {object} Renderer\\n * @property {(text: string) => void} addText\\n * @property {(node: Node) => void} openNode\\n * @property {(node: Node) => void} closeNode\\n * @property {() => string} value\\n */\\n\\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\\n/** */\\n\\nconst SPAN_CLOSE = '</span>';\\n\\n/**\\n * Determines if a node needs to be wrapped in <span>\\n *\\n * @param {Node} node */\\nconst emitsWrappingTags = (node) => {\\n  // rarely we can have a sublanguage where language is undefined\\n  // TODO: track down why\\n  return !!node.scope;\\n};\\n\\n/**\\n *\\n * @param {string} name\\n * @param {{prefix:string}} options\\n */\\nconst scopeToCSSClass = (name, { prefix }) => {\\n  // sub-language\\n  if (name.startsWith(\\\"language:\\\")) {\\n    return name.replace(\\\"language:\\\", \\\"language-\\\");\\n  }\\n  // tiered scope: comment.line\\n  if (name.includes(\\\".\\\")) {\\n    const pieces = name.split(\\\".\\\");\\n    return [\\n      `${prefix}${pieces.shift()}`,\\n      ...(pieces.map((x, i) => `${x}${\\\"_\\\".repeat(i + 1)}`))\\n    ].join(\\\" \\\");\\n  }\\n  // simple scope\\n  return `${prefix}${name}`;\\n};\\n\\n/** @type {Renderer} */\\nclass HTMLRenderer {\\n  /**\\n   * Creates a new HTMLRenderer\\n   *\\n   * @param {Tree} parseTree - the parse tree (must support `walk` API)\\n   * @param {{classPrefix: string}} options\\n   */\\n  constructor(parseTree, options) {\\n    this.buffer = \\\"\\\";\\n    this.classPrefix = options.classPrefix;\\n    parseTree.walk(this);\\n  }\\n\\n  /**\\n   * Adds texts to the output stream\\n   *\\n   * @param {string} text */\\n  addText(text) {\\n    this.buffer += escapeHTML(text);\\n  }\\n\\n  /**\\n   * Adds a node open to the output stream (if needed)\\n   *\\n   * @param {Node} node */\\n  openNode(node) {\\n    if (!emitsWrappingTags(node)) return;\\n\\n    const className = scopeToCSSClass(node.scope,\\n      { prefix: this.classPrefix });\\n    this.span(className);\\n  }\\n\\n  /**\\n   * Adds a node close to the output stream (if needed)\\n   *\\n   * @param {Node} node */\\n  closeNode(node) {\\n    if (!emitsWrappingTags(node)) return;\\n\\n    this.buffer += SPAN_CLOSE;\\n  }\\n\\n  /**\\n   * returns the accumulated buffer\\n  */\\n  value() {\\n    return this.buffer;\\n  }\\n\\n  // helpers\\n\\n  /**\\n   * Builds a span element\\n   *\\n   * @param {string} className */\\n  span(className) {\\n    this.buffer += `<span class=\\\"${className}\\\">`;\\n  }\\n}\\n\\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean, children: Node[]} | string} Node */\\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean, children: Node[]} } DataNode */\\n/** @typedef {import('highlight.js').Emitter} Emitter */\\n/**  */\\n\\n/** @returns {DataNode} */\\nconst newNode = (opts = {}) => {\\n  /** @type DataNode */\\n  const result = { children: [] };\\n  Object.assign(result, opts);\\n  return result;\\n};\\n\\nclass TokenTree {\\n  constructor() {\\n    /** @type DataNode */\\n    this.rootNode = newNode();\\n    this.stack = [this.rootNode];\\n  }\\n\\n  get top() {\\n    return this.stack[this.stack.length - 1];\\n  }\\n\\n  get root() { return this.rootNode; }\\n\\n  /** @param {Node} node */\\n  add(node) {\\n    this.top.children.push(node);\\n  }\\n\\n  /** @param {string} scope */\\n  openNode(scope) {\\n    /** @type Node */\\n    const node = newNode({ scope });\\n    this.add(node);\\n    this.stack.push(node);\\n  }\\n\\n  closeNode() {\\n    if (this.stack.length > 1) {\\n      return this.stack.pop();\\n    }\\n    // eslint-disable-next-line no-undefined\\n    return undefined;\\n  }\\n\\n  closeAllNodes() {\\n    while (this.closeNode());\\n  }\\n\\n  toJSON() {\\n    return JSON.stringify(this.rootNode, null, 4);\\n  }\\n\\n  /**\\n   * @typedef { import(\\\"./html_renderer\\\").Renderer } Renderer\\n   * @param {Renderer} builder\\n   */\\n  walk(builder) {\\n    // this does not\\n    return this.constructor._walk(builder, this.rootNode);\\n    // this works\\n    // return TokenTree._walk(builder, this.rootNode);\\n  }\\n\\n  /**\\n   * @param {Renderer} builder\\n   * @param {Node} node\\n   */\\n  static _walk(builder, node) {\\n    if (typeof node === \\\"string\\\") {\\n      builder.addText(node);\\n    } else if (node.children) {\\n      builder.openNode(node);\\n      node.children.forEach((child) => this._walk(builder, child));\\n      builder.closeNode(node);\\n    }\\n    return builder;\\n  }\\n\\n  /**\\n   * @param {Node} node\\n   */\\n  static _collapse(node) {\\n    if (typeof node === \\\"string\\\") return;\\n    if (!node.children) return;\\n\\n    if (node.children.every(el => typeof el === \\\"string\\\")) {\\n      // node.text = node.children.join(\\\"\\\");\\n      // delete node.children;\\n      node.children = [node.children.join(\\\"\\\")];\\n    } else {\\n      node.children.forEach((child) => {\\n        TokenTree._collapse(child);\\n      });\\n    }\\n  }\\n}\\n\\n/**\\n  Currently this is all private API, but this is the minimal API necessary\\n  that an Emitter must implement to fully support the parser.\\n\\n  Minimal interface:\\n\\n  - addText(text)\\n  - __addSublanguage(emitter, subLanguageName)\\n  - startScope(scope)\\n  - endScope()\\n  - finalize()\\n  - toHTML()\\n\\n*/\\n\\n/**\\n * @implements {Emitter}\\n */\\nclass TokenTreeEmitter extends TokenTree {\\n  /**\\n   * @param {*} options\\n   */\\n  constructor(options) {\\n    super();\\n    this.options = options;\\n  }\\n\\n  /**\\n   * @param {string} text\\n   */\\n  addText(text) {\\n    if (text === \\\"\\\") { return; }\\n\\n    this.add(text);\\n  }\\n\\n  /** @param {string} scope */\\n  startScope(scope) {\\n    this.openNode(scope);\\n  }\\n\\n  endScope() {\\n    this.closeNode();\\n  }\\n\\n  /**\\n   * @param {Emitter & {root: DataNode}} emitter\\n   * @param {string} name\\n   */\\n  __addSublanguage(emitter, name) {\\n    /** @type DataNode */\\n    const node = emitter.root;\\n    if (name) node.scope = `language:${name}`;\\n\\n    this.add(node);\\n  }\\n\\n  toHTML() {\\n    const renderer = new HTMLRenderer(this, this.options);\\n    return renderer.value();\\n  }\\n\\n  finalize() {\\n    this.closeAllNodes();\\n    return true;\\n  }\\n}\\n\\n/**\\n * @param {string} value\\n * @returns {RegExp}\\n * */\\n\\n/**\\n * @param {RegExp | string } re\\n * @returns {string}\\n */\\nfunction source(re) {\\n  if (!re) return null;\\n  if (typeof re === \\\"string\\\") return re;\\n\\n  return re.source;\\n}\\n\\n/**\\n * @param {RegExp | string } re\\n * @returns {string}\\n */\\nfunction lookahead(re) {\\n  return concat('(?=', re, ')');\\n}\\n\\n/**\\n * @param {RegExp | string } re\\n * @returns {string}\\n */\\nfunction anyNumberOfTimes(re) {\\n  return concat('(?:', re, ')*');\\n}\\n\\n/**\\n * @param {RegExp | string } re\\n * @returns {string}\\n */\\nfunction optional(re) {\\n  return concat('(?:', re, ')?');\\n}\\n\\n/**\\n * @param {...(RegExp | string) } args\\n * @returns {string}\\n */\\nfunction concat(...args) {\\n  const joined = args.map((x) => source(x)).join(\\\"\\\");\\n  return joined;\\n}\\n\\n/**\\n * @param { Array<string | RegExp | Object> } args\\n * @returns {object}\\n */\\nfunction stripOptionsFromArgs(args) {\\n  const opts = args[args.length - 1];\\n\\n  if (typeof opts === 'object' && opts.constructor === Object) {\\n    args.splice(args.length - 1, 1);\\n    return opts;\\n  } else {\\n    return {};\\n  }\\n}\\n\\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\\n\\n/**\\n * Any of the passed expresssions may match\\n *\\n * Creates a huge this | this | that | that match\\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\\n * @returns {string}\\n */\\nfunction either(...args) {\\n  /** @type { object & {capture?: boolean} }  */\\n  const opts = stripOptionsFromArgs(args);\\n  const joined = '('\\n    + (opts.capture ? \\\"\\\" : \\\"?:\\\")\\n    + args.map((x) => source(x)).join(\\\"|\\\") + \\\")\\\";\\n  return joined;\\n}\\n\\n/**\\n * @param {RegExp | string} re\\n * @returns {number}\\n */\\nfunction countMatchGroups(re) {\\n  return (new RegExp(re.toString() + '|')).exec('').length - 1;\\n}\\n\\n/**\\n * Does lexeme start with a regular expression match at the beginning\\n * @param {RegExp} re\\n * @param {string} lexeme\\n */\\nfunction startsWith(re, lexeme) {\\n  const match = re && re.exec(lexeme);\\n  return match && match.index === 0;\\n}\\n\\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\\n// an incorrect parse, it additionally matches the following:\\n// - [...] elements, where the meaning of parentheses and escapes change\\n// - other escape sequences, so we do not misparse escape sequences as\\n//   interesting elements\\n// - non-matching or lookahead parentheses, which do not capture. These\\n//   follow the '(' with a '?'.\\nconst BACKREF_RE = /\\\\[(?:[^\\\\\\\\\\\\]]|\\\\\\\\.)*\\\\]|\\\\(\\\\??|\\\\\\\\([1-9][0-9]*)|\\\\\\\\./;\\n\\n// **INTERNAL** Not intended for outside usage\\n// join logically computes regexps.join(separator), but fixes the\\n// backreferences so they continue to match.\\n// it also places each individual regular expression into it's own\\n// match group, keeping track of the sequencing of those match groups\\n// is currently an exercise for the caller. :-)\\n/**\\n * @param {(string | RegExp)[]} regexps\\n * @param {{joinWith: string}} opts\\n * @returns {string}\\n */\\nfunction _rewriteBackreferences(regexps, { joinWith }) {\\n  let numCaptures = 0;\\n\\n  return regexps.map((regex) => {\\n    numCaptures += 1;\\n    const offset = numCaptures;\\n    let re = source(regex);\\n    let out = '';\\n\\n    while (re.length > 0) {\\n      const match = BACKREF_RE.exec(re);\\n      if (!match) {\\n        out += re;\\n        break;\\n      }\\n      out += re.substring(0, match.index);\\n      re = re.substring(match.index + match[0].length);\\n      if (match[0][0] === '\\\\\\\\' && match[1]) {\\n        // Adjust the backreference.\\n        out += '\\\\\\\\' + String(Number(match[1]) + offset);\\n      } else {\\n        out += match[0];\\n        if (match[0] === '(') {\\n          numCaptures++;\\n        }\\n      }\\n    }\\n    return out;\\n  }).map(re => `(${re})`).join(joinWith);\\n}\\n\\n/** @typedef {import('highlight.js').Mode} Mode */\\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\\n\\n// Common regexps\\nconst MATCH_NOTHING_RE = /\\\\b\\\\B/;\\nconst IDENT_RE = '[a-zA-Z]\\\\\\\\w*';\\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\\\\\w*';\\nconst NUMBER_RE = '\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+)?';\\nconst C_NUMBER_RE = '(-?)(\\\\\\\\b0[xX][a-fA-F0-9]+|(\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d*)?|\\\\\\\\.\\\\\\\\d+)([eE][-+]?\\\\\\\\d+)?)'; // 0x..., 0..., decimal, float\\nconst BINARY_NUMBER_RE = '\\\\\\\\b(0b[01]+)'; // 0b...\\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\\\\\*|\\\\\\\\*=|\\\\\\\\+|\\\\\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\\\\\?|\\\\\\\\[|\\\\\\\\{|\\\\\\\\(|\\\\\\\\^|\\\\\\\\^=|\\\\\\\\||\\\\\\\\|=|\\\\\\\\|\\\\\\\\||~';\\n\\n/**\\n* @param { Partial<Mode> & {binary?: string | RegExp} } opts\\n*/\\nconst SHEBANG = (opts = {}) => {\\n  const beginShebang = /^#![ ]*\\\\//;\\n  if (opts.binary) {\\n    opts.begin = concat(\\n      beginShebang,\\n      /.*\\\\b/,\\n      opts.binary,\\n      /\\\\b.*/);\\n  }\\n  return inherit$1({\\n    scope: 'meta',\\n    begin: beginShebang,\\n    end: /$/,\\n    relevance: 0,\\n    /** @type {ModeCallback} */\\n    \\\"on:begin\\\": (m, resp) => {\\n      if (m.index !== 0) resp.ignoreMatch();\\n    }\\n  }, opts);\\n};\\n\\n// Common modes\\nconst BACKSLASH_ESCAPE = {\\n  begin: '\\\\\\\\\\\\\\\\[\\\\\\\\s\\\\\\\\S]', relevance: 0\\n};\\nconst APOS_STRING_MODE = {\\n  scope: 'string',\\n  begin: '\\\\'',\\n  end: '\\\\'',\\n  illegal: '\\\\\\\\n',\\n  contains: [BACKSLASH_ESCAPE]\\n};\\nconst QUOTE_STRING_MODE = {\\n  scope: 'string',\\n  begin: '\\\"',\\n  end: '\\\"',\\n  illegal: '\\\\\\\\n',\\n  contains: [BACKSLASH_ESCAPE]\\n};\\nconst PHRASAL_WORDS_MODE = {\\n  begin: /\\\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\\\b/\\n};\\n/**\\n * Creates a comment mode\\n *\\n * @param {string | RegExp} begin\\n * @param {string | RegExp} end\\n * @param {Mode | {}} [modeOptions]\\n * @returns {Partial<Mode>}\\n */\\nconst COMMENT = function(begin, end, modeOptions = {}) {\\n  const mode = inherit$1(\\n    {\\n      scope: 'comment',\\n      begin,\\n      end,\\n      contains: []\\n    },\\n    modeOptions\\n  );\\n  mode.contains.push({\\n    scope: 'doctag',\\n    // hack to avoid the space from being included. the space is necessary to\\n    // match here to prevent the plain text rule below from gobbling up doctags\\n    begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\\n    end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\\n    excludeBegin: true,\\n    relevance: 0\\n  });\\n  const ENGLISH_WORD = either(\\n    // list of common 1 and 2 letter words in English\\n    \\\"I\\\",\\n    \\\"a\\\",\\n    \\\"is\\\",\\n    \\\"so\\\",\\n    \\\"us\\\",\\n    \\\"to\\\",\\n    \\\"at\\\",\\n    \\\"if\\\",\\n    \\\"in\\\",\\n    \\\"it\\\",\\n    \\\"on\\\",\\n    // note: this is not an exhaustive list of contractions, just popular ones\\n    /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\\n    /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\\n    /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\\n  );\\n  // looking like plain text, more likely to be a comment\\n  mode.contains.push(\\n    {\\n      // TODO: how to include \\\", (, ) without breaking grammars that use these for\\n      // comment delimiters?\\n      // begin: /[ ]+([()\\\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\\\":]?([.][ ]|[ ]|\\\\))){3}/\\n      // ---\\n\\n      // this tries to find sequences of 3 english words in a row (without any\\n      // \\\"programming\\\" type syntax) this gives us a strong signal that we've\\n      // TRULY found a comment - vs perhaps scanning with the wrong language.\\n      // It's possible to find something that LOOKS like the start of the\\n      // comment - but then if there is no readable text - good chance it is a\\n      // false match and not a comment.\\n      //\\n      // for a visual example please see:\\n      // https://github.com/highlightjs/highlight.js/issues/2827\\n\\n      begin: concat(\\n        /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\\n        '(',\\n        ENGLISH_WORD,\\n        /[.]?[:]?([.][ ]|[ ])/,\\n        '){3}') // look for 3 words in a row\\n    }\\n  );\\n  return mode;\\n};\\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\\\\\*', '\\\\\\\\*/');\\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\\nconst NUMBER_MODE = {\\n  scope: 'number',\\n  begin: NUMBER_RE,\\n  relevance: 0\\n};\\nconst C_NUMBER_MODE = {\\n  scope: 'number',\\n  begin: C_NUMBER_RE,\\n  relevance: 0\\n};\\nconst BINARY_NUMBER_MODE = {\\n  scope: 'number',\\n  begin: BINARY_NUMBER_RE,\\n  relevance: 0\\n};\\nconst REGEXP_MODE = {\\n  // this outer rule makes sure we actually have a WHOLE regex and not simply\\n  // an expression such as:\\n  //\\n  //     3 / something\\n  //\\n  // (which will then blow up when regex's `illegal` sees the newline)\\n  begin: /(?=\\\\/[^/\\\\n]*\\\\/)/,\\n  contains: [{\\n    scope: 'regexp',\\n    begin: /\\\\//,\\n    end: /\\\\/[gimuy]*/,\\n    illegal: /\\\\n/,\\n    contains: [\\n      BACKSLASH_ESCAPE,\\n      {\\n        begin: /\\\\[/,\\n        end: /\\\\]/,\\n        relevance: 0,\\n        contains: [BACKSLASH_ESCAPE]\\n      }\\n    ]\\n  }]\\n};\\nconst TITLE_MODE = {\\n  scope: 'title',\\n  begin: IDENT_RE,\\n  relevance: 0\\n};\\nconst UNDERSCORE_TITLE_MODE = {\\n  scope: 'title',\\n  begin: UNDERSCORE_IDENT_RE,\\n  relevance: 0\\n};\\nconst METHOD_GUARD = {\\n  // excludes method names from keyword processing\\n  begin: '\\\\\\\\.\\\\\\\\s*' + UNDERSCORE_IDENT_RE,\\n  relevance: 0\\n};\\n\\n/**\\n * Adds end same as begin mechanics to a mode\\n *\\n * Your mode must include at least a single () match group as that first match\\n * group is what is used for comparison\\n * @param {Partial<Mode>} mode\\n */\\nconst END_SAME_AS_BEGIN = function(mode) {\\n  return Object.assign(mode,\\n    {\\n      /** @type {ModeCallback} */\\n      'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\\n      /** @type {ModeCallback} */\\n      'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\\n    });\\n};\\n\\nvar MODES = /*#__PURE__*/Object.freeze({\\n  __proto__: null,\\n  MATCH_NOTHING_RE: MATCH_NOTHING_RE,\\n  IDENT_RE: IDENT_RE,\\n  UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\\n  NUMBER_RE: NUMBER_RE,\\n  C_NUMBER_RE: C_NUMBER_RE,\\n  BINARY_NUMBER_RE: BINARY_NUMBER_RE,\\n  RE_STARTERS_RE: RE_STARTERS_RE,\\n  SHEBANG: SHEBANG,\\n  BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\\n  APOS_STRING_MODE: APOS_STRING_MODE,\\n  QUOTE_STRING_MODE: QUOTE_STRING_MODE,\\n  PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\\n  COMMENT: COMMENT,\\n  C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\\n  C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\\n  HASH_COMMENT_MODE: HASH_COMMENT_MODE,\\n  NUMBER_MODE: NUMBER_MODE,\\n  C_NUMBER_MODE: C_NUMBER_MODE,\\n  BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\\n  REGEXP_MODE: REGEXP_MODE,\\n  TITLE_MODE: TITLE_MODE,\\n  UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE,\\n  METHOD_GUARD: METHOD_GUARD,\\n  END_SAME_AS_BEGIN: END_SAME_AS_BEGIN\\n});\\n\\n/**\\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\\n@typedef {import('highlight.js').CompilerExt} CompilerExt\\n*/\\n\\n// Grammar extensions / plugins\\n// See: https://github.com/highlightjs/highlight.js/issues/2833\\n\\n// Grammar extensions allow \\\"syntactic sugar\\\" to be added to the grammar modes\\n// without requiring any underlying changes to the compiler internals.\\n\\n// `compileMatch` being the perfect small example of now allowing a grammar\\n// author to write `match` when they desire to match a single expression rather\\n// than being forced to use `begin`.  The extension then just moves `match` into\\n// `begin` when it runs.  Ie, no features have been added, but we've just made\\n// the experience of writing (and reading grammars) a little bit nicer.\\n\\n// ------\\n\\n// TODO: We need negative look-behind support to do this properly\\n/**\\n * Skip a match if it has a preceding dot\\n *\\n * This is used for `beginKeywords` to prevent matching expressions such as\\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\\n * @param {RegExpMatchArray} match\\n * @param {CallbackResponse} response\\n */\\nfunction skipIfHasPrecedingDot(match, response) {\\n  const before = match.input[match.index - 1];\\n  if (before === \\\".\\\") {\\n    response.ignoreMatch();\\n  }\\n}\\n\\n/**\\n *\\n * @type {CompilerExt}\\n */\\nfunction scopeClassName(mode, _parent) {\\n  // eslint-disable-next-line no-undefined\\n  if (mode.className !== undefined) {\\n    mode.scope = mode.className;\\n    delete mode.className;\\n  }\\n}\\n\\n/**\\n * `beginKeywords` syntactic sugar\\n * @type {CompilerExt}\\n */\\nfunction beginKeywords(mode, parent) {\\n  if (!parent) return;\\n  if (!mode.beginKeywords) return;\\n\\n  // for languages with keywords that include non-word characters checking for\\n  // a word boundary is not sufficient, so instead we check for a word boundary\\n  // or whitespace - this does no harm in any case since our keyword engine\\n  // doesn't allow spaces in keywords anyways and we still check for the boundary\\n  // first\\n  mode.begin = '\\\\\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\\\\\.)(?=\\\\\\\\b|\\\\\\\\s)';\\n  mode.__beforeBegin = skipIfHasPrecedingDot;\\n  mode.keywords = mode.keywords || mode.beginKeywords;\\n  delete mode.beginKeywords;\\n\\n  // prevents double relevance, the keywords themselves provide\\n  // relevance, the mode doesn't need to double it\\n  // eslint-disable-next-line no-undefined\\n  if (mode.relevance === undefined) mode.relevance = 0;\\n}\\n\\n/**\\n * Allow `illegal` to contain an array of illegal values\\n * @type {CompilerExt}\\n */\\nfunction compileIllegal(mode, _parent) {\\n  if (!Array.isArray(mode.illegal)) return;\\n\\n  mode.illegal = either(...mode.illegal);\\n}\\n\\n/**\\n * `match` to match a single expression for readability\\n * @type {CompilerExt}\\n */\\nfunction compileMatch(mode, _parent) {\\n  if (!mode.match) return;\\n  if (mode.begin || mode.end) throw new Error(\\\"begin & end are not supported with match\\\");\\n\\n  mode.begin = mode.match;\\n  delete mode.match;\\n}\\n\\n/**\\n * provides the default 1 relevance to all modes\\n * @type {CompilerExt}\\n */\\nfunction compileRelevance(mode, _parent) {\\n  // eslint-disable-next-line no-undefined\\n  if (mode.relevance === undefined) mode.relevance = 1;\\n}\\n\\n// allow beforeMatch to act as a \\\"qualifier\\\" for the match\\n// the full match begin must be [beforeMatch][begin]\\nconst beforeMatchExt = (mode, parent) => {\\n  if (!mode.beforeMatch) return;\\n  // starts conflicts with endsParent which we need to make sure the child\\n  // rule is not matched multiple times\\n  if (mode.starts) throw new Error(\\\"beforeMatch cannot be used with starts\\\");\\n\\n  const originalMode = Object.assign({}, mode);\\n  Object.keys(mode).forEach((key) => { delete mode[key]; });\\n\\n  mode.keywords = originalMode.keywords;\\n  mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\\n  mode.starts = {\\n    relevance: 0,\\n    contains: [\\n      Object.assign(originalMode, { endsParent: true })\\n    ]\\n  };\\n  mode.relevance = 0;\\n\\n  delete originalMode.beforeMatch;\\n};\\n\\n// keywords that should have no default relevance value\\nconst COMMON_KEYWORDS = [\\n  'of',\\n  'and',\\n  'for',\\n  'in',\\n  'not',\\n  'or',\\n  'if',\\n  'then',\\n  'parent', // common variable name\\n  'list', // common variable name\\n  'value' // common variable name\\n];\\n\\nconst DEFAULT_KEYWORD_SCOPE = \\\"keyword\\\";\\n\\n/**\\n * Given raw keywords from a language definition, compile them.\\n *\\n * @param {string | Record<string,string|string[]> | Array<string>} rawKeywords\\n * @param {boolean} caseInsensitive\\n */\\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\\n  /** @type {import(\\\"highlight.js/private\\\").KeywordDict} */\\n  const compiledKeywords = Object.create(null);\\n\\n  // input can be a string of keywords, an array of keywords, or a object with\\n  // named keys representing scopeName (which can then point to a string or array)\\n  if (typeof rawKeywords === 'string') {\\n    compileList(scopeName, rawKeywords.split(\\\" \\\"));\\n  } else if (Array.isArray(rawKeywords)) {\\n    compileList(scopeName, rawKeywords);\\n  } else {\\n    Object.keys(rawKeywords).forEach(function(scopeName) {\\n      // collapse all our objects back into the parent object\\n      Object.assign(\\n        compiledKeywords,\\n        compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\\n      );\\n    });\\n  }\\n  return compiledKeywords;\\n\\n  // ---\\n\\n  /**\\n   * Compiles an individual list of keywords\\n   *\\n   * Ex: \\\"for if when while|5\\\"\\n   *\\n   * @param {string} scopeName\\n   * @param {Array<string>} keywordList\\n   */\\n  function compileList(scopeName, keywordList) {\\n    if (caseInsensitive) {\\n      keywordList = keywordList.map(x => x.toLowerCase());\\n    }\\n    keywordList.forEach(function(keyword) {\\n      const pair = keyword.split('|');\\n      compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\\n    });\\n  }\\n}\\n\\n/**\\n * Returns the proper score for a given keyword\\n *\\n * Also takes into account comment keywords, which will be scored 0 UNLESS\\n * another score has been manually assigned.\\n * @param {string} keyword\\n * @param {string} [providedScore]\\n */\\nfunction scoreForKeyword(keyword, providedScore) {\\n  // manual scores always win over common keywords\\n  // so you can force a score of 1 if you really insist\\n  if (providedScore) {\\n    return Number(providedScore);\\n  }\\n\\n  return commonKeyword(keyword) ? 0 : 1;\\n}\\n\\n/**\\n * Determines if a given keyword is common or not\\n *\\n * @param {string} keyword */\\nfunction commonKeyword(keyword) {\\n  return COMMON_KEYWORDS.includes(keyword.toLowerCase());\\n}\\n\\n/*\\n\\nFor the reasoning behind this please see:\\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\\n\\n*/\\n\\n/**\\n * @type {Record<string, boolean>}\\n */\\nconst seenDeprecations = {};\\n\\n/**\\n * @param {string} message\\n */\\nconst error = (message) => {\\n  console.error(message);\\n};\\n\\n/**\\n * @param {string} message\\n * @param {any} args\\n */\\nconst warn = (message, ...args) => {\\n  console.log(`WARN: ${message}`, ...args);\\n};\\n\\n/**\\n * @param {string} version\\n * @param {string} message\\n */\\nconst deprecated = (version, message) => {\\n  if (seenDeprecations[`${version}/${message}`]) return;\\n\\n  console.log(`Deprecated as of ${version}. ${message}`);\\n  seenDeprecations[`${version}/${message}`] = true;\\n};\\n\\n/* eslint-disable no-throw-literal */\\n\\n/**\\n@typedef {import('highlight.js').CompiledMode} CompiledMode\\n*/\\n\\nconst MultiClassError = new Error();\\n\\n/**\\n * Renumbers labeled scope names to account for additional inner match\\n * groups that otherwise would break everything.\\n *\\n * Lets say we 3 match scopes:\\n *\\n *   { 1 => ..., 2 => ..., 3 => ... }\\n *\\n * So what we need is a clean match like this:\\n *\\n *   (a)(b)(c) => [ \\\"a\\\", \\\"b\\\", \\\"c\\\" ]\\n *\\n * But this falls apart with inner match groups:\\n *\\n * (a)(((b)))(c) => [\\\"a\\\", \\\"b\\\", \\\"b\\\", \\\"b\\\", \\\"c\\\" ]\\n *\\n * Our scopes are now \\\"out of alignment\\\" and we're repeating `b` 3 times.\\n * What needs to happen is the numbers are remapped:\\n *\\n *   { 1 => ..., 2 => ..., 5 => ... }\\n *\\n * We also need to know that the ONLY groups that should be output\\n * are 1, 2, and 5.  This function handles this behavior.\\n *\\n * @param {CompiledMode} mode\\n * @param {Array<RegExp | string>} regexes\\n * @param {{key: \\\"beginScope\\\"|\\\"endScope\\\"}} opts\\n */\\nfunction remapScopeNames(mode, regexes, { key }) {\\n  let offset = 0;\\n  const scopeNames = mode[key];\\n  /** @type Record<number,boolean> */\\n  const emit = {};\\n  /** @type Record<number,string> */\\n  const positions = {};\\n\\n  for (let i = 1; i <= regexes.length; i++) {\\n    positions[i + offset] = scopeNames[i];\\n    emit[i + offset] = true;\\n    offset += countMatchGroups(regexes[i - 1]);\\n  }\\n  // we use _emit to keep track of which match groups are \\\"top-level\\\" to avoid double\\n  // output from inside match groups\\n  mode[key] = positions;\\n  mode[key]._emit = emit;\\n  mode[key]._multi = true;\\n}\\n\\n/**\\n * @param {CompiledMode} mode\\n */\\nfunction beginMultiClass(mode) {\\n  if (!Array.isArray(mode.begin)) return;\\n\\n  if (mode.skip || mode.excludeBegin || mode.returnBegin) {\\n    error(\\\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\\\");\\n    throw MultiClassError;\\n  }\\n\\n  if (typeof mode.beginScope !== \\\"object\\\" || mode.beginScope === null) {\\n    error(\\\"beginScope must be object\\\");\\n    throw MultiClassError;\\n  }\\n\\n  remapScopeNames(mode, mode.begin, { key: \\\"beginScope\\\" });\\n  mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \\\"\\\" });\\n}\\n\\n/**\\n * @param {CompiledMode} mode\\n */\\nfunction endMultiClass(mode) {\\n  if (!Array.isArray(mode.end)) return;\\n\\n  if (mode.skip || mode.excludeEnd || mode.returnEnd) {\\n    error(\\\"skip, excludeEnd, returnEnd not compatible with endScope: {}\\\");\\n    throw MultiClassError;\\n  }\\n\\n  if (typeof mode.endScope !== \\\"object\\\" || mode.endScope === null) {\\n    error(\\\"endScope must be object\\\");\\n    throw MultiClassError;\\n  }\\n\\n  remapScopeNames(mode, mode.end, { key: \\\"endScope\\\" });\\n  mode.end = _rewriteBackreferences(mode.end, { joinWith: \\\"\\\" });\\n}\\n\\n/**\\n * this exists only to allow `scope: {}` to be used beside `match:`\\n * Otherwise `beginScope` would necessary and that would look weird\\n\\n  {\\n    match: [ /def/, /\\\\w+/ ]\\n    scope: { 1: \\\"keyword\\\" , 2: \\\"title\\\" }\\n  }\\n\\n * @param {CompiledMode} mode\\n */\\nfunction scopeSugar(mode) {\\n  if (mode.scope && typeof mode.scope === \\\"object\\\" && mode.scope !== null) {\\n    mode.beginScope = mode.scope;\\n    delete mode.scope;\\n  }\\n}\\n\\n/**\\n * @param {CompiledMode} mode\\n */\\nfunction MultiClass(mode) {\\n  scopeSugar(mode);\\n\\n  if (typeof mode.beginScope === \\\"string\\\") {\\n    mode.beginScope = { _wrap: mode.beginScope };\\n  }\\n  if (typeof mode.endScope === \\\"string\\\") {\\n    mode.endScope = { _wrap: mode.endScope };\\n  }\\n\\n  beginMultiClass(mode);\\n  endMultiClass(mode);\\n}\\n\\n/**\\n@typedef {import('highlight.js').Mode} Mode\\n@typedef {import('highlight.js').CompiledMode} CompiledMode\\n@typedef {import('highlight.js').Language} Language\\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\\n*/\\n\\n// compilation\\n\\n/**\\n * Compiles a language definition result\\n *\\n * Given the raw result of a language definition (Language), compiles this so\\n * that it is ready for highlighting code.\\n * @param {Language} language\\n * @returns {CompiledLanguage}\\n */\\nfunction compileLanguage(language) {\\n  /**\\n   * Builds a regex with the case sensitivity of the current language\\n   *\\n   * @param {RegExp | string} value\\n   * @param {boolean} [global]\\n   */\\n  function langRe(value, global) {\\n    return new RegExp(\\n      source(value),\\n      'm'\\n      + (language.case_insensitive ? 'i' : '')\\n      + (language.unicodeRegex ? 'u' : '')\\n      + (global ? 'g' : '')\\n    );\\n  }\\n\\n  /**\\n    Stores multiple regular expressions and allows you to quickly search for\\n    them all in a string simultaneously - returning the first match.  It does\\n    this by creating a huge (a|b|c) regex - each individual item wrapped with ()\\n    and joined by `|` - using match groups to track position.  When a match is\\n    found checking which position in the array has content allows us to figure\\n    out which of the original regexes / match groups triggered the match.\\n\\n    The match object itself (the result of `Regex.exec`) is returned but also\\n    enhanced by merging in any meta-data that was registered with the regex.\\n    This is how we keep track of which mode matched, and what type of rule\\n    (`illegal`, `begin`, end, etc).\\n  */\\n  class MultiRegex {\\n    constructor() {\\n      this.matchIndexes = {};\\n      // @ts-ignore\\n      this.regexes = [];\\n      this.matchAt = 1;\\n      this.position = 0;\\n    }\\n\\n    // @ts-ignore\\n    addRule(re, opts) {\\n      opts.position = this.position++;\\n      // @ts-ignore\\n      this.matchIndexes[this.matchAt] = opts;\\n      this.regexes.push([opts, re]);\\n      this.matchAt += countMatchGroups(re) + 1;\\n    }\\n\\n    compile() {\\n      if (this.regexes.length === 0) {\\n        // avoids the need to check length every time exec is called\\n        // @ts-ignore\\n        this.exec = () => null;\\n      }\\n      const terminators = this.regexes.map(el => el[1]);\\n      this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\\n      this.lastIndex = 0;\\n    }\\n\\n    /** @param {string} s */\\n    exec(s) {\\n      this.matcherRe.lastIndex = this.lastIndex;\\n      const match = this.matcherRe.exec(s);\\n      if (!match) { return null; }\\n\\n      // eslint-disable-next-line no-undefined\\n      const i = match.findIndex((el, i) => i > 0 && el !== undefined);\\n      // @ts-ignore\\n      const matchData = this.matchIndexes[i];\\n      // trim off any earlier non-relevant match groups (ie, the other regex\\n      // match groups that make up the multi-matcher)\\n      match.splice(0, i);\\n\\n      return Object.assign(match, matchData);\\n    }\\n  }\\n\\n  /*\\n    Created to solve the key deficiently with MultiRegex - there is no way to\\n    test for multiple matches at a single location.  Why would we need to do\\n    that?  In the future a more dynamic engine will allow certain matches to be\\n    ignored.  An example: if we matched say the 3rd regex in a large group but\\n    decided to ignore it - we'd need to started testing again at the 4th\\n    regex... but MultiRegex itself gives us no real way to do that.\\n\\n    So what this class creates MultiRegexs on the fly for whatever search\\n    position they are needed.\\n\\n    NOTE: These additional MultiRegex objects are created dynamically.  For most\\n    grammars most of the time we will never actually need anything more than the\\n    first MultiRegex - so this shouldn't have too much overhead.\\n\\n    Say this is our search group, and we match regex3, but wish to ignore it.\\n\\n      regex1 | regex2 | regex3 | regex4 | regex5    ' ie, startAt = 0\\n\\n    What we need is a new MultiRegex that only includes the remaining\\n    possibilities:\\n\\n      regex4 | regex5                               ' ie, startAt = 3\\n\\n    This class wraps all that complexity up in a simple API... `startAt` decides\\n    where in the array of expressions to start doing the matching. It\\n    auto-increments, so if a match is found at position 2, then startAt will be\\n    set to 3.  If the end is reached startAt will return to 0.\\n\\n    MOST of the time the parser will be setting startAt manually to 0.\\n  */\\n  class ResumableMultiRegex {\\n    constructor() {\\n      // @ts-ignore\\n      this.rules = [];\\n      // @ts-ignore\\n      this.multiRegexes = [];\\n      this.count = 0;\\n\\n      this.lastIndex = 0;\\n      this.regexIndex = 0;\\n    }\\n\\n    // @ts-ignore\\n    getMatcher(index) {\\n      if (this.multiRegexes[index]) return this.multiRegexes[index];\\n\\n      const matcher = new MultiRegex();\\n      this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\\n      matcher.compile();\\n      this.multiRegexes[index] = matcher;\\n      return matcher;\\n    }\\n\\n    resumingScanAtSamePosition() {\\n      return this.regexIndex !== 0;\\n    }\\n\\n    considerAll() {\\n      this.regexIndex = 0;\\n    }\\n\\n    // @ts-ignore\\n    addRule(re, opts) {\\n      this.rules.push([re, opts]);\\n      if (opts.type === \\\"begin\\\") this.count++;\\n    }\\n\\n    /** @param {string} s */\\n    exec(s) {\\n      const m = this.getMatcher(this.regexIndex);\\n      m.lastIndex = this.lastIndex;\\n      let result = m.exec(s);\\n\\n      // The following is because we have no easy way to say \\\"resume scanning at the\\n      // existing position but also skip the current rule ONLY\\\". What happens is\\n      // all prior rules are also skipped which can result in matching the wrong\\n      // thing. Example of matching \\\"booger\\\":\\n\\n      // our matcher is [string, \\\"booger\\\", number]\\n      //\\n      // ....booger....\\n\\n      // if \\\"booger\\\" is ignored then we'd really need a regex to scan from the\\n      // SAME position for only: [string, number] but ignoring \\\"booger\\\" (if it\\n      // was the first match), a simple resume would scan ahead who knows how\\n      // far looking only for \\\"number\\\", ignoring potential string matches (or\\n      // future \\\"booger\\\" matches that might be valid.)\\n\\n      // So what we do: We execute two matchers, one resuming at the same\\n      // position, but the second full matcher starting at the position after:\\n\\n      //     /--- resume first regex match here (for [number])\\n      //     |/---- full match here for [string, \\\"booger\\\", number]\\n      //     vv\\n      // ....booger....\\n\\n      // Which ever results in a match first is then used. So this 3-4 step\\n      // process essentially allows us to say \\\"match at this position, excluding\\n      // a prior rule that was ignored\\\".\\n      //\\n      // 1. Match \\\"booger\\\" first, ignore. Also proves that [string] does non match.\\n      // 2. Resume matching for [number]\\n      // 3. Match at index + 1 for [string, \\\"booger\\\", number]\\n      // 4. If #2 and #3 result in matches, which came first?\\n      if (this.resumingScanAtSamePosition()) {\\n        if (result && result.index === this.lastIndex) ; else { // use the second matcher result\\n          const m2 = this.getMatcher(0);\\n          m2.lastIndex = this.lastIndex + 1;\\n          result = m2.exec(s);\\n        }\\n      }\\n\\n      if (result) {\\n        this.regexIndex += result.position + 1;\\n        if (this.regexIndex === this.count) {\\n          // wrap-around to considering all matches again\\n          this.considerAll();\\n        }\\n      }\\n\\n      return result;\\n    }\\n  }\\n\\n  /**\\n   * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\\n   * the content and find matches.\\n   *\\n   * @param {CompiledMode} mode\\n   * @returns {ResumableMultiRegex}\\n   */\\n  function buildModeRegex(mode) {\\n    const mm = new ResumableMultiRegex();\\n\\n    mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \\\"begin\\\" }));\\n\\n    if (mode.terminatorEnd) {\\n      mm.addRule(mode.terminatorEnd, { type: \\\"end\\\" });\\n    }\\n    if (mode.illegal) {\\n      mm.addRule(mode.illegal, { type: \\\"illegal\\\" });\\n    }\\n\\n    return mm;\\n  }\\n\\n  /** skip vs abort vs ignore\\n   *\\n   * @skip   - The mode is still entered and exited normally (and contains rules apply),\\n   *           but all content is held and added to the parent buffer rather than being\\n   *           output when the mode ends.  Mostly used with `sublanguage` to build up\\n   *           a single large buffer than can be parsed by sublanguage.\\n   *\\n   *             - The mode begin ands ends normally.\\n   *             - Content matched is added to the parent mode buffer.\\n   *             - The parser cursor is moved forward normally.\\n   *\\n   * @abort  - A hack placeholder until we have ignore.  Aborts the mode (as if it\\n   *           never matched) but DOES NOT continue to match subsequent `contains`\\n   *           modes.  Abort is bad/suboptimal because it can result in modes\\n   *           farther down not getting applied because an earlier rule eats the\\n   *           content but then aborts.\\n   *\\n   *             - The mode does not begin.\\n   *             - Content matched by `begin` is added to the mode buffer.\\n   *             - The parser cursor is moved forward accordingly.\\n   *\\n   * @ignore - Ignores the mode (as if it never matched) and continues to match any\\n   *           subsequent `contains` modes.  Ignore isn't technically possible with\\n   *           the current parser implementation.\\n   *\\n   *             - The mode does not begin.\\n   *             - Content matched by `begin` is ignored.\\n   *             - The parser cursor is not moved forward.\\n   */\\n\\n  /**\\n   * Compiles an individual mode\\n   *\\n   * This can raise an error if the mode contains certain detectable known logic\\n   * issues.\\n   * @param {Mode} mode\\n   * @param {CompiledMode | null} [parent]\\n   * @returns {CompiledMode | never}\\n   */\\n  function compileMode(mode, parent) {\\n    const cmode = /** @type CompiledMode */ (mode);\\n    if (mode.isCompiled) return cmode;\\n\\n    [\\n      scopeClassName,\\n      // do this early so compiler extensions generally don't have to worry about\\n      // the distinction between match/begin\\n      compileMatch,\\n      MultiClass,\\n      beforeMatchExt\\n    ].forEach(ext => ext(mode, parent));\\n\\n    language.compilerExtensions.forEach(ext => ext(mode, parent));\\n\\n    // __beforeBegin is considered private API, internal use only\\n    mode.__beforeBegin = null;\\n\\n    [\\n      beginKeywords,\\n      // do this later so compiler extensions that come earlier have access to the\\n      // raw array if they wanted to perhaps manipulate it, etc.\\n      compileIllegal,\\n      // default to 1 relevance if not specified\\n      compileRelevance\\n    ].forEach(ext => ext(mode, parent));\\n\\n    mode.isCompiled = true;\\n\\n    let keywordPattern = null;\\n    if (typeof mode.keywords === \\\"object\\\" && mode.keywords.$pattern) {\\n      // we need a copy because keywords might be compiled multiple times\\n      // so we can't go deleting $pattern from the original on the first\\n      // pass\\n      mode.keywords = Object.assign({}, mode.keywords);\\n      keywordPattern = mode.keywords.$pattern;\\n      delete mode.keywords.$pattern;\\n    }\\n    keywordPattern = keywordPattern || /\\\\w+/;\\n\\n    if (mode.keywords) {\\n      mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\\n    }\\n\\n    cmode.keywordPatternRe = langRe(keywordPattern, true);\\n\\n    if (parent) {\\n      if (!mode.begin) mode.begin = /\\\\B|\\\\b/;\\n      cmode.beginRe = langRe(cmode.begin);\\n      if (!mode.end && !mode.endsWithParent) mode.end = /\\\\B|\\\\b/;\\n      if (mode.end) cmode.endRe = langRe(cmode.end);\\n      cmode.terminatorEnd = source(cmode.end) || '';\\n      if (mode.endsWithParent && parent.terminatorEnd) {\\n        cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\\n      }\\n    }\\n    if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\\n    if (!mode.contains) mode.contains = [];\\n\\n    mode.contains = [].concat(...mode.contains.map(function(c) {\\n      return expandOrCloneMode(c === 'self' ? mode : c);\\n    }));\\n    mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\\n\\n    if (mode.starts) {\\n      compileMode(mode.starts, parent);\\n    }\\n\\n    cmode.matcher = buildModeRegex(cmode);\\n    return cmode;\\n  }\\n\\n  if (!language.compilerExtensions) language.compilerExtensions = [];\\n\\n  // self is not valid at the top-level\\n  if (language.contains && language.contains.includes('self')) {\\n    throw new Error(\\\"ERR: contains `self` is not supported at the top-level of a language.  See documentation.\\\");\\n  }\\n\\n  // we need a null object, which inherit will guarantee\\n  language.classNameAliases = inherit$1(language.classNameAliases || {});\\n\\n  return compileMode(/** @type Mode */ (language));\\n}\\n\\n/**\\n * Determines if a mode has a dependency on it's parent or not\\n *\\n * If a mode does have a parent dependency then often we need to clone it if\\n * it's used in multiple places so that each copy points to the correct parent,\\n * where-as modes without a parent can often safely be re-used at the bottom of\\n * a mode chain.\\n *\\n * @param {Mode | null} mode\\n * @returns {boolean} - is there a dependency on the parent?\\n * */\\nfunction dependencyOnParent(mode) {\\n  if (!mode) return false;\\n\\n  return mode.endsWithParent || dependencyOnParent(mode.starts);\\n}\\n\\n/**\\n * Expands a mode or clones it if necessary\\n *\\n * This is necessary for modes with parental dependenceis (see notes on\\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\\n * exploded into their own individual modes at compile time.\\n *\\n * @param {Mode} mode\\n * @returns {Mode | Mode[]}\\n * */\\nfunction expandOrCloneMode(mode) {\\n  if (mode.variants && !mode.cachedVariants) {\\n    mode.cachedVariants = mode.variants.map(function(variant) {\\n      return inherit$1(mode, { variants: null }, variant);\\n    });\\n  }\\n\\n  // EXPAND\\n  // if we have variants then essentially \\\"replace\\\" the mode with the variants\\n  // this happens in compileMode, where this function is called from\\n  if (mode.cachedVariants) {\\n    return mode.cachedVariants;\\n  }\\n\\n  // CLONE\\n  // if we have dependencies on parents then we need a unique\\n  // instance of ourselves, so we can be reused with many\\n  // different parents without issue\\n  if (dependencyOnParent(mode)) {\\n    return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\\n  }\\n\\n  if (Object.isFrozen(mode)) {\\n    return inherit$1(mode);\\n  }\\n\\n  // no special dependency issues, just return ourselves\\n  return mode;\\n}\\n\\nvar version = \\\"11.8.0\\\";\\n\\nclass HTMLInjectionError extends Error {\\n  constructor(reason, html) {\\n    super(reason);\\n    this.name = \\\"HTMLInjectionError\\\";\\n    this.html = html;\\n  }\\n}\\n\\n/*\\nSyntax highlighting with language autodetection.\\nhttps://highlightjs.org/\\n*/\\n\\n\\n/**\\n@typedef {import('highlight.js').Mode} Mode\\n@typedef {import('highlight.js').CompiledMode} CompiledMode\\n@typedef {import('highlight.js').CompiledScope} CompiledScope\\n@typedef {import('highlight.js').Language} Language\\n@typedef {import('highlight.js').HLJSApi} HLJSApi\\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\\n@typedef {import('highlight.js').PluginEvent} PluginEvent\\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\\n@typedef {import('highlight.js').LanguageFn} LanguageFn\\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\\n@typedef {import('highlight.js/private').MatchType} MatchType\\n@typedef {import('highlight.js/private').KeywordData} KeywordData\\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\\n@typedef {import('highlight.js').HighlightResult} HighlightResult\\n*/\\n\\n\\nconst escape = escapeHTML;\\nconst inherit = inherit$1;\\nconst NO_MATCH = Symbol(\\\"nomatch\\\");\\nconst MAX_KEYWORD_HITS = 7;\\n\\n/**\\n * @param {any} hljs - object that is extended (legacy)\\n * @returns {HLJSApi}\\n */\\nconst HLJS = function(hljs) {\\n  // Global internal variables used within the highlight.js library.\\n  /** @type {Record<string, Language>} */\\n  const languages = Object.create(null);\\n  /** @type {Record<string, string>} */\\n  const aliases = Object.create(null);\\n  /** @type {HLJSPlugin[]} */\\n  const plugins = [];\\n\\n  // safe/production mode - swallows more errors, tries to keep running\\n  // even if a single syntax or parse hits a fatal error\\n  let SAFE_MODE = true;\\n  const LANGUAGE_NOT_FOUND = \\\"Could not find the language '{}', did you forget to load/include a language module?\\\";\\n  /** @type {Language} */\\n  const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\\n\\n  // Global options used when within external APIs. This is modified when\\n  // calling the `hljs.configure` function.\\n  /** @type HLJSOptions */\\n  let options = {\\n    ignoreUnescapedHTML: false,\\n    throwUnescapedHTML: false,\\n    noHighlightRe: /^(no-?highlight)$/i,\\n    languageDetectRe: /\\\\blang(?:uage)?-([\\\\w-]+)\\\\b/i,\\n    classPrefix: 'hljs-',\\n    cssSelector: 'pre code',\\n    languages: null,\\n    // beta configuration options, subject to change, welcome to discuss\\n    // https://github.com/highlightjs/highlight.js/issues/1086\\n    __emitter: TokenTreeEmitter\\n  };\\n\\n  /* Utility functions */\\n\\n  /**\\n   * Tests a language name to see if highlighting should be skipped\\n   * @param {string} languageName\\n   */\\n  function shouldNotHighlight(languageName) {\\n    return options.noHighlightRe.test(languageName);\\n  }\\n\\n  /**\\n   * @param {HighlightedHTMLElement} block - the HTML element to determine language for\\n   */\\n  function blockLanguage(block) {\\n    let classes = block.className + ' ';\\n\\n    classes += block.parentNode ? block.parentNode.className : '';\\n\\n    // language-* takes precedence over non-prefixed class names.\\n    const match = options.languageDetectRe.exec(classes);\\n    if (match) {\\n      const language = getLanguage(match[1]);\\n      if (!language) {\\n        warn(LANGUAGE_NOT_FOUND.replace(\\\"{}\\\", match[1]));\\n        warn(\\\"Falling back to no-highlight mode for this block.\\\", block);\\n      }\\n      return language ? match[1] : 'no-highlight';\\n    }\\n\\n    return classes\\n      .split(/\\\\s+/)\\n      .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\\n  }\\n\\n  /**\\n   * Core highlighting function.\\n   *\\n   * OLD API\\n   * highlight(lang, code, ignoreIllegals, continuation)\\n   *\\n   * NEW API\\n   * highlight(code, {lang, ignoreIllegals})\\n   *\\n   * @param {string} codeOrLanguageName - the language to use for highlighting\\n   * @param {string | HighlightOptions} optionsOrCode - the code to highlight\\n   * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\\n   *\\n   * @returns {HighlightResult} Result - an object that represents the result\\n   * @property {string} language - the language name\\n   * @property {number} relevance - the relevance score\\n   * @property {string} value - the highlighted HTML code\\n   * @property {string} code - the original raw code\\n   * @property {CompiledMode} top - top of the current mode stack\\n   * @property {boolean} illegal - indicates whether any illegal matches were found\\n  */\\n  function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\\n    let code = \\\"\\\";\\n    let languageName = \\\"\\\";\\n    if (typeof optionsOrCode === \\\"object\\\") {\\n      code = codeOrLanguageName;\\n      ignoreIllegals = optionsOrCode.ignoreIllegals;\\n      languageName = optionsOrCode.language;\\n    } else {\\n      // old API\\n      deprecated(\\\"10.7.0\\\", \\\"highlight(lang, code, ...args) has been deprecated.\\\");\\n      deprecated(\\\"10.7.0\\\", \\\"Please use highlight(code, options) instead.\\\\nhttps://github.com/highlightjs/highlight.js/issues/2277\\\");\\n      languageName = codeOrLanguageName;\\n      code = optionsOrCode;\\n    }\\n\\n    // https://github.com/highlightjs/highlight.js/issues/3149\\n    // eslint-disable-next-line no-undefined\\n    if (ignoreIllegals === undefined) { ignoreIllegals = true; }\\n\\n    /** @type {BeforeHighlightContext} */\\n    const context = {\\n      code,\\n      language: languageName\\n    };\\n    // the plugin can change the desired language or the code to be highlighted\\n    // just be changing the object it was passed\\n    fire(\\\"before:highlight\\\", context);\\n\\n    // a before plugin can usurp the result completely by providing it's own\\n    // in which case we don't even need to call highlight\\n    const result = context.result\\n      ? context.result\\n      : _highlight(context.language, context.code, ignoreIllegals);\\n\\n    result.code = context.code;\\n    // the plugin can change anything in result to suite it\\n    fire(\\\"after:highlight\\\", result);\\n\\n    return result;\\n  }\\n\\n  /**\\n   * private highlight that's used internally and does not fire callbacks\\n   *\\n   * @param {string} languageName - the language to use for highlighting\\n   * @param {string} codeToHighlight - the code to highlight\\n   * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\\n   * @param {CompiledMode?} [continuation] - current continuation mode, if any\\n   * @returns {HighlightResult} - result of the highlight operation\\n  */\\n  function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\\n    const keywordHits = Object.create(null);\\n\\n    /**\\n     * Return keyword data if a match is a keyword\\n     * @param {CompiledMode} mode - current mode\\n     * @param {string} matchText - the textual match\\n     * @returns {KeywordData | false}\\n     */\\n    function keywordData(mode, matchText) {\\n      return mode.keywords[matchText];\\n    }\\n\\n    function processKeywords() {\\n      if (!top.keywords) {\\n        emitter.addText(modeBuffer);\\n        return;\\n      }\\n\\n      let lastIndex = 0;\\n      top.keywordPatternRe.lastIndex = 0;\\n      let match = top.keywordPatternRe.exec(modeBuffer);\\n      let buf = \\\"\\\";\\n\\n      while (match) {\\n        buf += modeBuffer.substring(lastIndex, match.index);\\n        const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\\n        const data = keywordData(top, word);\\n        if (data) {\\n          const [kind, keywordRelevance] = data;\\n          emitter.addText(buf);\\n          buf = \\\"\\\";\\n\\n          keywordHits[word] = (keywordHits[word] || 0) + 1;\\n          if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\\n          if (kind.startsWith(\\\"_\\\")) {\\n            // _ implied for relevance only, do not highlight\\n            // by applying a class name\\n            buf += match[0];\\n          } else {\\n            const cssClass = language.classNameAliases[kind] || kind;\\n            emitKeyword(match[0], cssClass);\\n          }\\n        } else {\\n          buf += match[0];\\n        }\\n        lastIndex = top.keywordPatternRe.lastIndex;\\n        match = top.keywordPatternRe.exec(modeBuffer);\\n      }\\n      buf += modeBuffer.substring(lastIndex);\\n      emitter.addText(buf);\\n    }\\n\\n    function processSubLanguage() {\\n      if (modeBuffer === \\\"\\\") return;\\n      /** @type HighlightResult */\\n      let result = null;\\n\\n      if (typeof top.subLanguage === 'string') {\\n        if (!languages[top.subLanguage]) {\\n          emitter.addText(modeBuffer);\\n          return;\\n        }\\n        result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\\n        continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\\n      } else {\\n        result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\\n      }\\n\\n      // Counting embedded language score towards the host language may be disabled\\n      // with zeroing the containing mode relevance. Use case in point is Markdown that\\n      // allows XML everywhere and makes every XML snippet to have a much larger Markdown\\n      // score.\\n      if (top.relevance > 0) {\\n        relevance += result.relevance;\\n      }\\n      emitter.__addSublanguage(result._emitter, result.language);\\n    }\\n\\n    function processBuffer() {\\n      if (top.subLanguage != null) {\\n        processSubLanguage();\\n      } else {\\n        processKeywords();\\n      }\\n      modeBuffer = '';\\n    }\\n\\n    /**\\n     * @param {string} text\\n     * @param {string} scope\\n     */\\n    function emitKeyword(keyword, scope) {\\n      if (keyword === \\\"\\\") return;\\n\\n      emitter.startScope(scope);\\n      emitter.addText(keyword);\\n      emitter.endScope();\\n    }\\n\\n    /**\\n     * @param {CompiledScope} scope\\n     * @param {RegExpMatchArray} match\\n     */\\n    function emitMultiClass(scope, match) {\\n      let i = 1;\\n      const max = match.length - 1;\\n      while (i <= max) {\\n        if (!scope._emit[i]) { i++; continue; }\\n        const klass = language.classNameAliases[scope[i]] || scope[i];\\n        const text = match[i];\\n        if (klass) {\\n          emitKeyword(text, klass);\\n        } else {\\n          modeBuffer = text;\\n          processKeywords();\\n          modeBuffer = \\\"\\\";\\n        }\\n        i++;\\n      }\\n    }\\n\\n    /**\\n     * @param {CompiledMode} mode - new mode to start\\n     * @param {RegExpMatchArray} match\\n     */\\n    function startNewMode(mode, match) {\\n      if (mode.scope && typeof mode.scope === \\\"string\\\") {\\n        emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\\n      }\\n      if (mode.beginScope) {\\n        // beginScope just wraps the begin match itself in a scope\\n        if (mode.beginScope._wrap) {\\n          emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\\n          modeBuffer = \\\"\\\";\\n        } else if (mode.beginScope._multi) {\\n          // at this point modeBuffer should just be the match\\n          emitMultiClass(mode.beginScope, match);\\n          modeBuffer = \\\"\\\";\\n        }\\n      }\\n\\n      top = Object.create(mode, { parent: { value: top } });\\n      return top;\\n    }\\n\\n    /**\\n     * @param {CompiledMode } mode - the mode to potentially end\\n     * @param {RegExpMatchArray} match - the latest match\\n     * @param {string} matchPlusRemainder - match plus remainder of content\\n     * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\\n     */\\n    function endOfMode(mode, match, matchPlusRemainder) {\\n      let matched = startsWith(mode.endRe, matchPlusRemainder);\\n\\n      if (matched) {\\n        if (mode[\\\"on:end\\\"]) {\\n          const resp = new Response(mode);\\n          mode[\\\"on:end\\\"](match, resp);\\n          if (resp.isMatchIgnored) matched = false;\\n        }\\n\\n        if (matched) {\\n          while (mode.endsParent && mode.parent) {\\n            mode = mode.parent;\\n          }\\n          return mode;\\n        }\\n      }\\n      // even if on:end fires an `ignore` it's still possible\\n      // that we might trigger the end node because of a parent mode\\n      if (mode.endsWithParent) {\\n        return endOfMode(mode.parent, match, matchPlusRemainder);\\n      }\\n    }\\n\\n    /**\\n     * Handle matching but then ignoring a sequence of text\\n     *\\n     * @param {string} lexeme - string containing full match text\\n     */\\n    function doIgnore(lexeme) {\\n      if (top.matcher.regexIndex === 0) {\\n        // no more regexes to potentially match here, so we move the cursor forward one\\n        // space\\n        modeBuffer += lexeme[0];\\n        return 1;\\n      } else {\\n        // no need to move the cursor, we still have additional regexes to try and\\n        // match at this very spot\\n        resumeScanAtSamePosition = true;\\n        return 0;\\n      }\\n    }\\n\\n    /**\\n     * Handle the start of a new potential mode match\\n     *\\n     * @param {EnhancedMatch} match - the current match\\n     * @returns {number} how far to advance the parse cursor\\n     */\\n    function doBeginMatch(match) {\\n      const lexeme = match[0];\\n      const newMode = match.rule;\\n\\n      const resp = new Response(newMode);\\n      // first internal before callbacks, then the public ones\\n      const beforeCallbacks = [newMode.__beforeBegin, newMode[\\\"on:begin\\\"]];\\n      for (const cb of beforeCallbacks) {\\n        if (!cb) continue;\\n        cb(match, resp);\\n        if (resp.isMatchIgnored) return doIgnore(lexeme);\\n      }\\n\\n      if (newMode.skip) {\\n        modeBuffer += lexeme;\\n      } else {\\n        if (newMode.excludeBegin) {\\n          modeBuffer += lexeme;\\n        }\\n        processBuffer();\\n        if (!newMode.returnBegin && !newMode.excludeBegin) {\\n          modeBuffer = lexeme;\\n        }\\n      }\\n      startNewMode(newMode, match);\\n      return newMode.returnBegin ? 0 : lexeme.length;\\n    }\\n\\n    /**\\n     * Handle the potential end of mode\\n     *\\n     * @param {RegExpMatchArray} match - the current match\\n     */\\n    function doEndMatch(match) {\\n      const lexeme = match[0];\\n      const matchPlusRemainder = codeToHighlight.substring(match.index);\\n\\n      const endMode = endOfMode(top, match, matchPlusRemainder);\\n      if (!endMode) { return NO_MATCH; }\\n\\n      const origin = top;\\n      if (top.endScope && top.endScope._wrap) {\\n        processBuffer();\\n        emitKeyword(lexeme, top.endScope._wrap);\\n      } else if (top.endScope && top.endScope._multi) {\\n        processBuffer();\\n        emitMultiClass(top.endScope, match);\\n      } else if (origin.skip) {\\n        modeBuffer += lexeme;\\n      } else {\\n        if (!(origin.returnEnd || origin.excludeEnd)) {\\n          modeBuffer += lexeme;\\n        }\\n        processBuffer();\\n        if (origin.excludeEnd) {\\n          modeBuffer = lexeme;\\n        }\\n      }\\n      do {\\n        if (top.scope) {\\n          emitter.closeNode();\\n        }\\n        if (!top.skip && !top.subLanguage) {\\n          relevance += top.relevance;\\n        }\\n        top = top.parent;\\n      } while (top !== endMode.parent);\\n      if (endMode.starts) {\\n        startNewMode(endMode.starts, match);\\n      }\\n      return origin.returnEnd ? 0 : lexeme.length;\\n    }\\n\\n    function processContinuations() {\\n      const list = [];\\n      for (let current = top; current !== language; current = current.parent) {\\n        if (current.scope) {\\n          list.unshift(current.scope);\\n        }\\n      }\\n      list.forEach(item => emitter.openNode(item));\\n    }\\n\\n    /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\\n    let lastMatch = {};\\n\\n    /**\\n     *  Process an individual match\\n     *\\n     * @param {string} textBeforeMatch - text preceding the match (since the last match)\\n     * @param {EnhancedMatch} [match] - the match itself\\n     */\\n    function processLexeme(textBeforeMatch, match) {\\n      const lexeme = match && match[0];\\n\\n      // add non-matched text to the current mode buffer\\n      modeBuffer += textBeforeMatch;\\n\\n      if (lexeme == null) {\\n        processBuffer();\\n        return 0;\\n      }\\n\\n      // we've found a 0 width match and we're stuck, so we need to advance\\n      // this happens when we have badly behaved rules that have optional matchers to the degree that\\n      // sometimes they can end up matching nothing at all\\n      // Ref: https://github.com/highlightjs/highlight.js/issues/2140\\n      if (lastMatch.type === \\\"begin\\\" && match.type === \\\"end\\\" && lastMatch.index === match.index && lexeme === \\\"\\\") {\\n        // spit the \\\"skipped\\\" character that our regex choked on back into the output sequence\\n        modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\\n        if (!SAFE_MODE) {\\n          /** @type {AnnotatedError} */\\n          const err = new Error(`0 width match regex (${languageName})`);\\n          err.languageName = languageName;\\n          err.badRule = lastMatch.rule;\\n          throw err;\\n        }\\n        return 1;\\n      }\\n      lastMatch = match;\\n\\n      if (match.type === \\\"begin\\\") {\\n        return doBeginMatch(match);\\n      } else if (match.type === \\\"illegal\\\" && !ignoreIllegals) {\\n        // illegal match, we do not continue processing\\n        /** @type {AnnotatedError} */\\n        const err = new Error('Illegal lexeme \\\"' + lexeme + '\\\" for mode \\\"' + (top.scope || '<unnamed>') + '\\\"');\\n        err.mode = top;\\n        throw err;\\n      } else if (match.type === \\\"end\\\") {\\n        const processed = doEndMatch(match);\\n        if (processed !== NO_MATCH) {\\n          return processed;\\n        }\\n      }\\n\\n      // edge case for when illegal matches $ (end of line) which is technically\\n      // a 0 width match but not a begin/end match so it's not caught by the\\n      // first handler (when ignoreIllegals is true)\\n      if (match.type === \\\"illegal\\\" && lexeme === \\\"\\\") {\\n        // advance so we aren't stuck in an infinite loop\\n        return 1;\\n      }\\n\\n      // infinite loops are BAD, this is a last ditch catch all. if we have a\\n      // decent number of iterations yet our index (cursor position in our\\n      // parsing) still 3x behind our index then something is very wrong\\n      // so we bail\\n      if (iterations > 100000 && iterations > match.index * 3) {\\n        const err = new Error('potential infinite loop, way more iterations than matches');\\n        throw err;\\n      }\\n\\n      /*\\n      Why might be find ourselves here?  An potential end match that was\\n      triggered but could not be completed.  IE, `doEndMatch` returned NO_MATCH.\\n      (this could be because a callback requests the match be ignored, etc)\\n\\n      This causes no real harm other than stopping a few times too many.\\n      */\\n\\n      modeBuffer += lexeme;\\n      return lexeme.length;\\n    }\\n\\n    const language = getLanguage(languageName);\\n    if (!language) {\\n      error(LANGUAGE_NOT_FOUND.replace(\\\"{}\\\", languageName));\\n      throw new Error('Unknown language: \\\"' + languageName + '\\\"');\\n    }\\n\\n    const md = compileLanguage(language);\\n    let result = '';\\n    /** @type {CompiledMode} */\\n    let top = continuation || md;\\n    /** @type Record<string,CompiledMode> */\\n    const continuations = {}; // keep continuations for sub-languages\\n    const emitter = new options.__emitter(options);\\n    processContinuations();\\n    let modeBuffer = '';\\n    let relevance = 0;\\n    let index = 0;\\n    let iterations = 0;\\n    let resumeScanAtSamePosition = false;\\n\\n    try {\\n      if (!language.__emitTokens) {\\n        top.matcher.considerAll();\\n\\n        for (;;) {\\n          iterations++;\\n          if (resumeScanAtSamePosition) {\\n            // only regexes not matched previously will now be\\n            // considered for a potential match\\n            resumeScanAtSamePosition = false;\\n          } else {\\n            top.matcher.considerAll();\\n          }\\n          top.matcher.lastIndex = index;\\n\\n          const match = top.matcher.exec(codeToHighlight);\\n          // console.log(\\\"match\\\", match[0], match.rule && match.rule.begin)\\n\\n          if (!match) break;\\n\\n          const beforeMatch = codeToHighlight.substring(index, match.index);\\n          const processedCount = processLexeme(beforeMatch, match);\\n          index = match.index + processedCount;\\n        }\\n        processLexeme(codeToHighlight.substring(index));\\n      } else {\\n        language.__emitTokens(codeToHighlight, emitter);\\n      }\\n\\n      emitter.finalize();\\n      result = emitter.toHTML();\\n\\n      return {\\n        language: languageName,\\n        value: result,\\n        relevance,\\n        illegal: false,\\n        _emitter: emitter,\\n        _top: top\\n      };\\n    } catch (err) {\\n      if (err.message && err.message.includes('Illegal')) {\\n        return {\\n          language: languageName,\\n          value: escape(codeToHighlight),\\n          illegal: true,\\n          relevance: 0,\\n          _illegalBy: {\\n            message: err.message,\\n            index,\\n            context: codeToHighlight.slice(index - 100, index + 100),\\n            mode: err.mode,\\n            resultSoFar: result\\n          },\\n          _emitter: emitter\\n        };\\n      } else if (SAFE_MODE) {\\n        return {\\n          language: languageName,\\n          value: escape(codeToHighlight),\\n          illegal: false,\\n          relevance: 0,\\n          errorRaised: err,\\n          _emitter: emitter,\\n          _top: top\\n        };\\n      } else {\\n        throw err;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * returns a valid highlight result, without actually doing any actual work,\\n   * auto highlight starts with this and it's possible for small snippets that\\n   * auto-detection may not find a better match\\n   * @param {string} code\\n   * @returns {HighlightResult}\\n   */\\n  function justTextHighlightResult(code) {\\n    const result = {\\n      value: escape(code),\\n      illegal: false,\\n      relevance: 0,\\n      _top: PLAINTEXT_LANGUAGE,\\n      _emitter: new options.__emitter(options)\\n    };\\n    result._emitter.addText(code);\\n    return result;\\n  }\\n\\n  /**\\n  Highlighting with language detection. Accepts a string with the code to\\n  highlight. Returns an object with the following properties:\\n\\n  - language (detected language)\\n  - relevance (int)\\n  - value (an HTML string with highlighting markup)\\n  - secondBest (object with the same structure for second-best heuristically\\n    detected language, may be absent)\\n\\n    @param {string} code\\n    @param {Array<string>} [languageSubset]\\n    @returns {AutoHighlightResult}\\n  */\\n  function highlightAuto(code, languageSubset) {\\n    languageSubset = languageSubset || options.languages || Object.keys(languages);\\n    const plaintext = justTextHighlightResult(code);\\n\\n    const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\\n      _highlight(name, code, false)\\n    );\\n    results.unshift(plaintext); // plaintext is always an option\\n\\n    const sorted = results.sort((a, b) => {\\n      // sort base on relevance\\n      if (a.relevance !== b.relevance) return b.relevance - a.relevance;\\n\\n      // always award the tie to the base language\\n      // ie if C++ and Arduino are tied, it's more likely to be C++\\n      if (a.language && b.language) {\\n        if (getLanguage(a.language).supersetOf === b.language) {\\n          return 1;\\n        } else if (getLanguage(b.language).supersetOf === a.language) {\\n          return -1;\\n        }\\n      }\\n\\n      // otherwise say they are equal, which has the effect of sorting on\\n      // relevance while preserving the original ordering - which is how ties\\n      // have historically been settled, ie the language that comes first always\\n      // wins in the case of a tie\\n      return 0;\\n    });\\n\\n    const [best, secondBest] = sorted;\\n\\n    /** @type {AutoHighlightResult} */\\n    const result = best;\\n    result.secondBest = secondBest;\\n\\n    return result;\\n  }\\n\\n  /**\\n   * Builds new class name for block given the language name\\n   *\\n   * @param {HTMLElement} element\\n   * @param {string} [currentLang]\\n   * @param {string} [resultLang]\\n   */\\n  function updateClassName(element, currentLang, resultLang) {\\n    const language = (currentLang && aliases[currentLang]) || resultLang;\\n\\n    element.classList.add(\\\"hljs\\\");\\n    element.classList.add(`language-${language}`);\\n  }\\n\\n  /**\\n   * Applies highlighting to a DOM node containing code.\\n   *\\n   * @param {HighlightedHTMLElement} element - the HTML element to highlight\\n  */\\n  function highlightElement(element) {\\n    /** @type HTMLElement */\\n    let node = null;\\n    const language = blockLanguage(element);\\n\\n    if (shouldNotHighlight(language)) return;\\n\\n    fire(\\\"before:highlightElement\\\",\\n      { el: element, language });\\n\\n    // we should be all text, no child nodes (unescaped HTML) - this is possibly\\n    // an HTML injection attack - it's likely too late if this is already in\\n    // production (the code has likely already done its damage by the time\\n    // we're seeing it)... but we yell loudly about this so that hopefully it's\\n    // more likely to be caught in development before making it to production\\n    if (element.children.length > 0) {\\n      if (!options.ignoreUnescapedHTML) {\\n        console.warn(\\\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\\\");\\n        console.warn(\\\"https://github.com/highlightjs/highlight.js/wiki/security\\\");\\n        console.warn(\\\"The element with unescaped HTML:\\\");\\n        console.warn(element);\\n      }\\n      if (options.throwUnescapedHTML) {\\n        const err = new HTMLInjectionError(\\n          \\\"One of your code blocks includes unescaped HTML.\\\",\\n          element.innerHTML\\n        );\\n        throw err;\\n      }\\n    }\\n\\n    node = element;\\n    const text = node.textContent;\\n    const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\\n\\n    element.innerHTML = result.value;\\n    updateClassName(element, language, result.language);\\n    element.result = {\\n      language: result.language,\\n      // TODO: remove with version 11.0\\n      re: result.relevance,\\n      relevance: result.relevance\\n    };\\n    if (result.secondBest) {\\n      element.secondBest = {\\n        language: result.secondBest.language,\\n        relevance: result.secondBest.relevance\\n      };\\n    }\\n\\n    fire(\\\"after:highlightElement\\\", { el: element, result, text });\\n  }\\n\\n  /**\\n   * Updates highlight.js global options with the passed options\\n   *\\n   * @param {Partial<HLJSOptions>} userOptions\\n   */\\n  function configure(userOptions) {\\n    options = inherit(options, userOptions);\\n  }\\n\\n  // TODO: remove v12, deprecated\\n  const initHighlighting = () => {\\n    highlightAll();\\n    deprecated(\\\"10.6.0\\\", \\\"initHighlighting() deprecated.  Use highlightAll() now.\\\");\\n  };\\n\\n  // TODO: remove v12, deprecated\\n  function initHighlightingOnLoad() {\\n    highlightAll();\\n    deprecated(\\\"10.6.0\\\", \\\"initHighlightingOnLoad() deprecated.  Use highlightAll() now.\\\");\\n  }\\n\\n  let wantsHighlight = false;\\n\\n  /**\\n   * auto-highlights all pre>code elements on the page\\n   */\\n  function highlightAll() {\\n    // if we are called too early in the loading process\\n    if (document.readyState === \\\"loading\\\") {\\n      wantsHighlight = true;\\n      return;\\n    }\\n\\n    const blocks = document.querySelectorAll(options.cssSelector);\\n    blocks.forEach(highlightElement);\\n  }\\n\\n  function boot() {\\n    // if a highlight was requested before DOM was loaded, do now\\n    if (wantsHighlight) highlightAll();\\n  }\\n\\n  // make sure we are in the browser environment\\n  if (typeof window !== 'undefined' && window.addEventListener) {\\n    window.addEventListener('DOMContentLoaded', boot, false);\\n  }\\n\\n  /**\\n   * Register a language grammar module\\n   *\\n   * @param {string} languageName\\n   * @param {LanguageFn} languageDefinition\\n   */\\n  function registerLanguage(languageName, languageDefinition) {\\n    let lang = null;\\n    try {\\n      lang = languageDefinition(hljs);\\n    } catch (error$1) {\\n      error(\\\"Language definition for '{}' could not be registered.\\\".replace(\\\"{}\\\", languageName));\\n      // hard or soft error\\n      if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\\n      // languages that have serious errors are replaced with essentially a\\n      // \\\"plaintext\\\" stand-in so that the code blocks will still get normal\\n      // css classes applied to them - and one bad language won't break the\\n      // entire highlighter\\n      lang = PLAINTEXT_LANGUAGE;\\n    }\\n    // give it a temporary name if it doesn't have one in the meta-data\\n    if (!lang.name) lang.name = languageName;\\n    languages[languageName] = lang;\\n    lang.rawDefinition = languageDefinition.bind(null, hljs);\\n\\n    if (lang.aliases) {\\n      registerAliases(lang.aliases, { languageName });\\n    }\\n  }\\n\\n  /**\\n   * Remove a language grammar module\\n   *\\n   * @param {string} languageName\\n   */\\n  function unregisterLanguage(languageName) {\\n    delete languages[languageName];\\n    for (const alias of Object.keys(aliases)) {\\n      if (aliases[alias] === languageName) {\\n        delete aliases[alias];\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @returns {string[]} List of language internal names\\n   */\\n  function listLanguages() {\\n    return Object.keys(languages);\\n  }\\n\\n  /**\\n   * @param {string} name - name of the language to retrieve\\n   * @returns {Language | undefined}\\n   */\\n  function getLanguage(name) {\\n    name = (name || '').toLowerCase();\\n    return languages[name] || languages[aliases[name]];\\n  }\\n\\n  /**\\n   *\\n   * @param {string|string[]} aliasList - single alias or list of aliases\\n   * @param {{languageName: string}} opts\\n   */\\n  function registerAliases(aliasList, { languageName }) {\\n    if (typeof aliasList === 'string') {\\n      aliasList = [aliasList];\\n    }\\n    aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\\n  }\\n\\n  /**\\n   * Determines if a given language has auto-detection enabled\\n   * @param {string} name - name of the language\\n   */\\n  function autoDetection(name) {\\n    const lang = getLanguage(name);\\n    return lang && !lang.disableAutodetect;\\n  }\\n\\n  /**\\n   * Upgrades the old highlightBlock plugins to the new\\n   * highlightElement API\\n   * @param {HLJSPlugin} plugin\\n   */\\n  function upgradePluginAPI(plugin) {\\n    // TODO: remove with v12\\n    if (plugin[\\\"before:highlightBlock\\\"] && !plugin[\\\"before:highlightElement\\\"]) {\\n      plugin[\\\"before:highlightElement\\\"] = (data) => {\\n        plugin[\\\"before:highlightBlock\\\"](\\n          Object.assign({ block: data.el }, data)\\n        );\\n      };\\n    }\\n    if (plugin[\\\"after:highlightBlock\\\"] && !plugin[\\\"after:highlightElement\\\"]) {\\n      plugin[\\\"after:highlightElement\\\"] = (data) => {\\n        plugin[\\\"after:highlightBlock\\\"](\\n          Object.assign({ block: data.el }, data)\\n        );\\n      };\\n    }\\n  }\\n\\n  /**\\n   * @param {HLJSPlugin} plugin\\n   */\\n  function addPlugin(plugin) {\\n    upgradePluginAPI(plugin);\\n    plugins.push(plugin);\\n  }\\n\\n  /**\\n   * @param {HLJSPlugin} plugin\\n   */\\n  function removePlugin(plugin) {\\n    const index = plugins.indexOf(plugin);\\n    if (index !== -1) {\\n      plugins.splice(index, 1);\\n    }\\n  }\\n\\n  /**\\n   *\\n   * @param {PluginEvent} event\\n   * @param {any} args\\n   */\\n  function fire(event, args) {\\n    const cb = event;\\n    plugins.forEach(function(plugin) {\\n      if (plugin[cb]) {\\n        plugin[cb](args);\\n      }\\n    });\\n  }\\n\\n  /**\\n   * DEPRECATED\\n   * @param {HighlightedHTMLElement} el\\n   */\\n  function deprecateHighlightBlock(el) {\\n    deprecated(\\\"10.7.0\\\", \\\"highlightBlock will be removed entirely in v12.0\\\");\\n    deprecated(\\\"10.7.0\\\", \\\"Please use highlightElement now.\\\");\\n\\n    return highlightElement(el);\\n  }\\n\\n  /* Interface definition */\\n  Object.assign(hljs, {\\n    highlight,\\n    highlightAuto,\\n    highlightAll,\\n    highlightElement,\\n    // TODO: Remove with v12 API\\n    highlightBlock: deprecateHighlightBlock,\\n    configure,\\n    initHighlighting,\\n    initHighlightingOnLoad,\\n    registerLanguage,\\n    unregisterLanguage,\\n    listLanguages,\\n    getLanguage,\\n    registerAliases,\\n    autoDetection,\\n    inherit,\\n    addPlugin,\\n    removePlugin\\n  });\\n\\n  hljs.debugMode = function() { SAFE_MODE = false; };\\n  hljs.safeMode = function() { SAFE_MODE = true; };\\n  hljs.versionString = version;\\n\\n  hljs.regex = {\\n    concat: concat,\\n    lookahead: lookahead,\\n    either: either,\\n    optional: optional,\\n    anyNumberOfTimes: anyNumberOfTimes\\n  };\\n\\n  for (const key in MODES) {\\n    // @ts-ignore\\n    if (typeof MODES[key] === \\\"object\\\") {\\n      // @ts-ignore\\n      deepFreeze(MODES[key]);\\n    }\\n  }\\n\\n  // merge all the modes/regexes into our main object\\n  Object.assign(hljs, MODES);\\n\\n  return hljs;\\n};\\n\\n// Other names for the variable may break build script\\nconst highlight = HLJS({});\\n\\n// returns a new instance of the highlighter to be used for extensions\\n// check https://github.com/wooorm/lowlight/issues/47\\nhighlight.newInstance = () => HLJS({});\\n\\nmodule.exports = highlight;\\nhighlight.HighlightJS = highlight;\\nhighlight.default = highlight;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/core.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/index.js\":\n/*!************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/index.js ***!\n  \\************************************************/\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\neval(\"var hljs = __webpack_require__(/*! ./core */ \\\"./node_modules/highlight.js/lib/core.js\\\");\\n\\nhljs.registerLanguage('1c', __webpack_require__(/*! ./languages/1c */ \\\"./node_modules/highlight.js/lib/languages/1c.js\\\"));\\nhljs.registerLanguage('abnf', __webpack_require__(/*! ./languages/abnf */ \\\"./node_modules/highlight.js/lib/languages/abnf.js\\\"));\\nhljs.registerLanguage('accesslog', __webpack_require__(/*! ./languages/accesslog */ \\\"./node_modules/highlight.js/lib/languages/accesslog.js\\\"));\\nhljs.registerLanguage('actionscript', __webpack_require__(/*! ./languages/actionscript */ \\\"./node_modules/highlight.js/lib/languages/actionscript.js\\\"));\\nhljs.registerLanguage('ada', __webpack_require__(/*! ./languages/ada */ \\\"./node_modules/highlight.js/lib/languages/ada.js\\\"));\\nhljs.registerLanguage('angelscript', __webpack_require__(/*! ./languages/angelscript */ \\\"./node_modules/highlight.js/lib/languages/angelscript.js\\\"));\\nhljs.registerLanguage('apache', __webpack_require__(/*! ./languages/apache */ \\\"./node_modules/highlight.js/lib/languages/apache.js\\\"));\\nhljs.registerLanguage('applescript', __webpack_require__(/*! ./languages/applescript */ \\\"./node_modules/highlight.js/lib/languages/applescript.js\\\"));\\nhljs.registerLanguage('arcade', __webpack_require__(/*! ./languages/arcade */ \\\"./node_modules/highlight.js/lib/languages/arcade.js\\\"));\\nhljs.registerLanguage('arduino', __webpack_require__(/*! ./languages/arduino */ \\\"./node_modules/highlight.js/lib/languages/arduino.js\\\"));\\nhljs.registerLanguage('armasm', __webpack_require__(/*! ./languages/armasm */ \\\"./node_modules/highlight.js/lib/languages/armasm.js\\\"));\\nhljs.registerLanguage('xml', __webpack_require__(/*! ./languages/xml */ \\\"./node_modules/highlight.js/lib/languages/xml.js\\\"));\\nhljs.registerLanguage('asciidoc', __webpack_require__(/*! ./languages/asciidoc */ \\\"./node_modules/highlight.js/lib/languages/asciidoc.js\\\"));\\nhljs.registerLanguage('aspectj', __webpack_require__(/*! ./languages/aspectj */ \\\"./node_modules/highlight.js/lib/languages/aspectj.js\\\"));\\nhljs.registerLanguage('autohotkey', __webpack_require__(/*! ./languages/autohotkey */ \\\"./node_modules/highlight.js/lib/languages/autohotkey.js\\\"));\\nhljs.registerLanguage('autoit', __webpack_require__(/*! ./languages/autoit */ \\\"./node_modules/highlight.js/lib/languages/autoit.js\\\"));\\nhljs.registerLanguage('avrasm', __webpack_require__(/*! ./languages/avrasm */ \\\"./node_modules/highlight.js/lib/languages/avrasm.js\\\"));\\nhljs.registerLanguage('awk', __webpack_require__(/*! ./languages/awk */ \\\"./node_modules/highlight.js/lib/languages/awk.js\\\"));\\nhljs.registerLanguage('axapta', __webpack_require__(/*! ./languages/axapta */ \\\"./node_modules/highlight.js/lib/languages/axapta.js\\\"));\\nhljs.registerLanguage('bash', __webpack_require__(/*! ./languages/bash */ \\\"./node_modules/highlight.js/lib/languages/bash.js\\\"));\\nhljs.registerLanguage('basic', __webpack_require__(/*! ./languages/basic */ \\\"./node_modules/highlight.js/lib/languages/basic.js\\\"));\\nhljs.registerLanguage('bnf', __webpack_require__(/*! ./languages/bnf */ \\\"./node_modules/highlight.js/lib/languages/bnf.js\\\"));\\nhljs.registerLanguage('brainfuck', __webpack_require__(/*! ./languages/brainfuck */ \\\"./node_modules/highlight.js/lib/languages/brainfuck.js\\\"));\\nhljs.registerLanguage('c', __webpack_require__(/*! ./languages/c */ \\\"./node_modules/highlight.js/lib/languages/c.js\\\"));\\nhljs.registerLanguage('cal', __webpack_require__(/*! ./languages/cal */ \\\"./node_modules/highlight.js/lib/languages/cal.js\\\"));\\nhljs.registerLanguage('capnproto', __webpack_require__(/*! ./languages/capnproto */ \\\"./node_modules/highlight.js/lib/languages/capnproto.js\\\"));\\nhljs.registerLanguage('ceylon', __webpack_require__(/*! ./languages/ceylon */ \\\"./node_modules/highlight.js/lib/languages/ceylon.js\\\"));\\nhljs.registerLanguage('clean', __webpack_require__(/*! ./languages/clean */ \\\"./node_modules/highlight.js/lib/languages/clean.js\\\"));\\nhljs.registerLanguage('clojure', __webpack_require__(/*! ./languages/clojure */ \\\"./node_modules/highlight.js/lib/languages/clojure.js\\\"));\\nhljs.registerLanguage('clojure-repl', __webpack_require__(/*! ./languages/clojure-repl */ \\\"./node_modules/highlight.js/lib/languages/clojure-repl.js\\\"));\\nhljs.registerLanguage('cmake', __webpack_require__(/*! ./languages/cmake */ \\\"./node_modules/highlight.js/lib/languages/cmake.js\\\"));\\nhljs.registerLanguage('coffeescript', __webpack_require__(/*! ./languages/coffeescript */ \\\"./node_modules/highlight.js/lib/languages/coffeescript.js\\\"));\\nhljs.registerLanguage('coq', __webpack_require__(/*! ./languages/coq */ \\\"./node_modules/highlight.js/lib/languages/coq.js\\\"));\\nhljs.registerLanguage('cos', __webpack_require__(/*! ./languages/cos */ \\\"./node_modules/highlight.js/lib/languages/cos.js\\\"));\\nhljs.registerLanguage('cpp', __webpack_require__(/*! ./languages/cpp */ \\\"./node_modules/highlight.js/lib/languages/cpp.js\\\"));\\nhljs.registerLanguage('crmsh', __webpack_require__(/*! ./languages/crmsh */ \\\"./node_modules/highlight.js/lib/languages/crmsh.js\\\"));\\nhljs.registerLanguage('crystal', __webpack_require__(/*! ./languages/crystal */ \\\"./node_modules/highlight.js/lib/languages/crystal.js\\\"));\\nhljs.registerLanguage('csharp', __webpack_require__(/*! ./languages/csharp */ \\\"./node_modules/highlight.js/lib/languages/csharp.js\\\"));\\nhljs.registerLanguage('csp', __webpack_require__(/*! ./languages/csp */ \\\"./node_modules/highlight.js/lib/languages/csp.js\\\"));\\nhljs.registerLanguage('css', __webpack_require__(/*! ./languages/css */ \\\"./node_modules/highlight.js/lib/languages/css.js\\\"));\\nhljs.registerLanguage('d', __webpack_require__(/*! ./languages/d */ \\\"./node_modules/highlight.js/lib/languages/d.js\\\"));\\nhljs.registerLanguage('markdown', __webpack_require__(/*! ./languages/markdown */ \\\"./node_modules/highlight.js/lib/languages/markdown.js\\\"));\\nhljs.registerLanguage('dart', __webpack_require__(/*! ./languages/dart */ \\\"./node_modules/highlight.js/lib/languages/dart.js\\\"));\\nhljs.registerLanguage('delphi', __webpack_require__(/*! ./languages/delphi */ \\\"./node_modules/highlight.js/lib/languages/delphi.js\\\"));\\nhljs.registerLanguage('diff', __webpack_require__(/*! ./languages/diff */ \\\"./node_modules/highlight.js/lib/languages/diff.js\\\"));\\nhljs.registerLanguage('django', __webpack_require__(/*! ./languages/django */ \\\"./node_modules/highlight.js/lib/languages/django.js\\\"));\\nhljs.registerLanguage('dns', __webpack_require__(/*! ./languages/dns */ \\\"./node_modules/highlight.js/lib/languages/dns.js\\\"));\\nhljs.registerLanguage('dockerfile', __webpack_require__(/*! ./languages/dockerfile */ \\\"./node_modules/highlight.js/lib/languages/dockerfile.js\\\"));\\nhljs.registerLanguage('dos', __webpack_require__(/*! ./languages/dos */ \\\"./node_modules/highlight.js/lib/languages/dos.js\\\"));\\nhljs.registerLanguage('dsconfig', __webpack_require__(/*! ./languages/dsconfig */ \\\"./node_modules/highlight.js/lib/languages/dsconfig.js\\\"));\\nhljs.registerLanguage('dts', __webpack_require__(/*! ./languages/dts */ \\\"./node_modules/highlight.js/lib/languages/dts.js\\\"));\\nhljs.registerLanguage('dust', __webpack_require__(/*! ./languages/dust */ \\\"./node_modules/highlight.js/lib/languages/dust.js\\\"));\\nhljs.registerLanguage('ebnf', __webpack_require__(/*! ./languages/ebnf */ \\\"./node_modules/highlight.js/lib/languages/ebnf.js\\\"));\\nhljs.registerLanguage('elixir', __webpack_require__(/*! ./languages/elixir */ \\\"./node_modules/highlight.js/lib/languages/elixir.js\\\"));\\nhljs.registerLanguage('elm', __webpack_require__(/*! ./languages/elm */ \\\"./node_modules/highlight.js/lib/languages/elm.js\\\"));\\nhljs.registerLanguage('ruby', __webpack_require__(/*! ./languages/ruby */ \\\"./node_modules/highlight.js/lib/languages/ruby.js\\\"));\\nhljs.registerLanguage('erb', __webpack_require__(/*! ./languages/erb */ \\\"./node_modules/highlight.js/lib/languages/erb.js\\\"));\\nhljs.registerLanguage('erlang-repl', __webpack_require__(/*! ./languages/erlang-repl */ \\\"./node_modules/highlight.js/lib/languages/erlang-repl.js\\\"));\\nhljs.registerLanguage('erlang', __webpack_require__(/*! ./languages/erlang */ \\\"./node_modules/highlight.js/lib/languages/erlang.js\\\"));\\nhljs.registerLanguage('excel', __webpack_require__(/*! ./languages/excel */ \\\"./node_modules/highlight.js/lib/languages/excel.js\\\"));\\nhljs.registerLanguage('fix', __webpack_require__(/*! ./languages/fix */ \\\"./node_modules/highlight.js/lib/languages/fix.js\\\"));\\nhljs.registerLanguage('flix', __webpack_require__(/*! ./languages/flix */ \\\"./node_modules/highlight.js/lib/languages/flix.js\\\"));\\nhljs.registerLanguage('fortran', __webpack_require__(/*! ./languages/fortran */ \\\"./node_modules/highlight.js/lib/languages/fortran.js\\\"));\\nhljs.registerLanguage('fsharp', __webpack_require__(/*! ./languages/fsharp */ \\\"./node_modules/highlight.js/lib/languages/fsharp.js\\\"));\\nhljs.registerLanguage('gams', __webpack_require__(/*! ./languages/gams */ \\\"./node_modules/highlight.js/lib/languages/gams.js\\\"));\\nhljs.registerLanguage('gauss', __webpack_require__(/*! ./languages/gauss */ \\\"./node_modules/highlight.js/lib/languages/gauss.js\\\"));\\nhljs.registerLanguage('gcode', __webpack_require__(/*! ./languages/gcode */ \\\"./node_modules/highlight.js/lib/languages/gcode.js\\\"));\\nhljs.registerLanguage('gherkin', __webpack_require__(/*! ./languages/gherkin */ \\\"./node_modules/highlight.js/lib/languages/gherkin.js\\\"));\\nhljs.registerLanguage('glsl', __webpack_require__(/*! ./languages/glsl */ \\\"./node_modules/highlight.js/lib/languages/glsl.js\\\"));\\nhljs.registerLanguage('gml', __webpack_require__(/*! ./languages/gml */ \\\"./node_modules/highlight.js/lib/languages/gml.js\\\"));\\nhljs.registerLanguage('go', __webpack_require__(/*! ./languages/go */ \\\"./node_modules/highlight.js/lib/languages/go.js\\\"));\\nhljs.registerLanguage('golo', __webpack_require__(/*! ./languages/golo */ \\\"./node_modules/highlight.js/lib/languages/golo.js\\\"));\\nhljs.registerLanguage('gradle', __webpack_require__(/*! ./languages/gradle */ \\\"./node_modules/highlight.js/lib/languages/gradle.js\\\"));\\nhljs.registerLanguage('graphql', __webpack_require__(/*! ./languages/graphql */ \\\"./node_modules/highlight.js/lib/languages/graphql.js\\\"));\\nhljs.registerLanguage('groovy', __webpack_require__(/*! ./languages/groovy */ \\\"./node_modules/highlight.js/lib/languages/groovy.js\\\"));\\nhljs.registerLanguage('haml', __webpack_require__(/*! ./languages/haml */ \\\"./node_modules/highlight.js/lib/languages/haml.js\\\"));\\nhljs.registerLanguage('handlebars', __webpack_require__(/*! ./languages/handlebars */ \\\"./node_modules/highlight.js/lib/languages/handlebars.js\\\"));\\nhljs.registerLanguage('haskell', __webpack_require__(/*! ./languages/haskell */ \\\"./node_modules/highlight.js/lib/languages/haskell.js\\\"));\\nhljs.registerLanguage('haxe', __webpack_require__(/*! ./languages/haxe */ \\\"./node_modules/highlight.js/lib/languages/haxe.js\\\"));\\nhljs.registerLanguage('hsp', __webpack_require__(/*! ./languages/hsp */ \\\"./node_modules/highlight.js/lib/languages/hsp.js\\\"));\\nhljs.registerLanguage('http', __webpack_require__(/*! ./languages/http */ \\\"./node_modules/highlight.js/lib/languages/http.js\\\"));\\nhljs.registerLanguage('hy', __webpack_require__(/*! ./languages/hy */ \\\"./node_modules/highlight.js/lib/languages/hy.js\\\"));\\nhljs.registerLanguage('inform7', __webpack_require__(/*! ./languages/inform7 */ \\\"./node_modules/highlight.js/lib/languages/inform7.js\\\"));\\nhljs.registerLanguage('ini', __webpack_require__(/*! ./languages/ini */ \\\"./node_modules/highlight.js/lib/languages/ini.js\\\"));\\nhljs.registerLanguage('irpf90', __webpack_require__(/*! ./languages/irpf90 */ \\\"./node_modules/highlight.js/lib/languages/irpf90.js\\\"));\\nhljs.registerLanguage('isbl', __webpack_require__(/*! ./languages/isbl */ \\\"./node_modules/highlight.js/lib/languages/isbl.js\\\"));\\nhljs.registerLanguage('java', __webpack_require__(/*! ./languages/java */ \\\"./node_modules/highlight.js/lib/languages/java.js\\\"));\\nhljs.registerLanguage('javascript', __webpack_require__(/*! ./languages/javascript */ \\\"./node_modules/highlight.js/lib/languages/javascript.js\\\"));\\nhljs.registerLanguage('jboss-cli', __webpack_require__(/*! ./languages/jboss-cli */ \\\"./node_modules/highlight.js/lib/languages/jboss-cli.js\\\"));\\nhljs.registerLanguage('json', __webpack_require__(/*! ./languages/json */ \\\"./node_modules/highlight.js/lib/languages/json.js\\\"));\\nhljs.registerLanguage('julia', __webpack_require__(/*! ./languages/julia */ \\\"./node_modules/highlight.js/lib/languages/julia.js\\\"));\\nhljs.registerLanguage('julia-repl', __webpack_require__(/*! ./languages/julia-repl */ \\\"./node_modules/highlight.js/lib/languages/julia-repl.js\\\"));\\nhljs.registerLanguage('kotlin', __webpack_require__(/*! ./languages/kotlin */ \\\"./node_modules/highlight.js/lib/languages/kotlin.js\\\"));\\nhljs.registerLanguage('lasso', __webpack_require__(/*! ./languages/lasso */ \\\"./node_modules/highlight.js/lib/languages/lasso.js\\\"));\\nhljs.registerLanguage('latex', __webpack_require__(/*! ./languages/latex */ \\\"./node_modules/highlight.js/lib/languages/latex.js\\\"));\\nhljs.registerLanguage('ldif', __webpack_require__(/*! ./languages/ldif */ \\\"./node_modules/highlight.js/lib/languages/ldif.js\\\"));\\nhljs.registerLanguage('leaf', __webpack_require__(/*! ./languages/leaf */ \\\"./node_modules/highlight.js/lib/languages/leaf.js\\\"));\\nhljs.registerLanguage('less', __webpack_require__(/*! ./languages/less */ \\\"./node_modules/highlight.js/lib/languages/less.js\\\"));\\nhljs.registerLanguage('lisp', __webpack_require__(/*! ./languages/lisp */ \\\"./node_modules/highlight.js/lib/languages/lisp.js\\\"));\\nhljs.registerLanguage('livecodeserver', __webpack_require__(/*! ./languages/livecodeserver */ \\\"./node_modules/highlight.js/lib/languages/livecodeserver.js\\\"));\\nhljs.registerLanguage('livescript', __webpack_require__(/*! ./languages/livescript */ \\\"./node_modules/highlight.js/lib/languages/livescript.js\\\"));\\nhljs.registerLanguage('llvm', __webpack_require__(/*! ./languages/llvm */ \\\"./node_modules/highlight.js/lib/languages/llvm.js\\\"));\\nhljs.registerLanguage('lsl', __webpack_require__(/*! ./languages/lsl */ \\\"./node_modules/highlight.js/lib/languages/lsl.js\\\"));\\nhljs.registerLanguage('lua', __webpack_require__(/*! ./languages/lua */ \\\"./node_modules/highlight.js/lib/languages/lua.js\\\"));\\nhljs.registerLanguage('makefile', __webpack_require__(/*! ./languages/makefile */ \\\"./node_modules/highlight.js/lib/languages/makefile.js\\\"));\\nhljs.registerLanguage('mathematica', __webpack_require__(/*! ./languages/mathematica */ \\\"./node_modules/highlight.js/lib/languages/mathematica.js\\\"));\\nhljs.registerLanguage('matlab', __webpack_require__(/*! ./languages/matlab */ \\\"./node_modules/highlight.js/lib/languages/matlab.js\\\"));\\nhljs.registerLanguage('maxima', __webpack_require__(/*! ./languages/maxima */ \\\"./node_modules/highlight.js/lib/languages/maxima.js\\\"));\\nhljs.registerLanguage('mel', __webpack_require__(/*! ./languages/mel */ \\\"./node_modules/highlight.js/lib/languages/mel.js\\\"));\\nhljs.registerLanguage('mercury', __webpack_require__(/*! ./languages/mercury */ \\\"./node_modules/highlight.js/lib/languages/mercury.js\\\"));\\nhljs.registerLanguage('mipsasm', __webpack_require__(/*! ./languages/mipsasm */ \\\"./node_modules/highlight.js/lib/languages/mipsasm.js\\\"));\\nhljs.registerLanguage('mizar', __webpack_require__(/*! ./languages/mizar */ \\\"./node_modules/highlight.js/lib/languages/mizar.js\\\"));\\nhljs.registerLanguage('perl', __webpack_require__(/*! ./languages/perl */ \\\"./node_modules/highlight.js/lib/languages/perl.js\\\"));\\nhljs.registerLanguage('mojolicious', __webpack_require__(/*! ./languages/mojolicious */ \\\"./node_modules/highlight.js/lib/languages/mojolicious.js\\\"));\\nhljs.registerLanguage('monkey', __webpack_require__(/*! ./languages/monkey */ \\\"./node_modules/highlight.js/lib/languages/monkey.js\\\"));\\nhljs.registerLanguage('moonscript', __webpack_require__(/*! ./languages/moonscript */ \\\"./node_modules/highlight.js/lib/languages/moonscript.js\\\"));\\nhljs.registerLanguage('n1ql', __webpack_require__(/*! ./languages/n1ql */ \\\"./node_modules/highlight.js/lib/languages/n1ql.js\\\"));\\nhljs.registerLanguage('nestedtext', __webpack_require__(/*! ./languages/nestedtext */ \\\"./node_modules/highlight.js/lib/languages/nestedtext.js\\\"));\\nhljs.registerLanguage('nginx', __webpack_require__(/*! ./languages/nginx */ \\\"./node_modules/highlight.js/lib/languages/nginx.js\\\"));\\nhljs.registerLanguage('nim', __webpack_require__(/*! ./languages/nim */ \\\"./node_modules/highlight.js/lib/languages/nim.js\\\"));\\nhljs.registerLanguage('nix', __webpack_require__(/*! ./languages/nix */ \\\"./node_modules/highlight.js/lib/languages/nix.js\\\"));\\nhljs.registerLanguage('node-repl', __webpack_require__(/*! ./languages/node-repl */ \\\"./node_modules/highlight.js/lib/languages/node-repl.js\\\"));\\nhljs.registerLanguage('nsis', __webpack_require__(/*! ./languages/nsis */ \\\"./node_modules/highlight.js/lib/languages/nsis.js\\\"));\\nhljs.registerLanguage('objectivec', __webpack_require__(/*! ./languages/objectivec */ \\\"./node_modules/highlight.js/lib/languages/objectivec.js\\\"));\\nhljs.registerLanguage('ocaml', __webpack_require__(/*! ./languages/ocaml */ \\\"./node_modules/highlight.js/lib/languages/ocaml.js\\\"));\\nhljs.registerLanguage('openscad', __webpack_require__(/*! ./languages/openscad */ \\\"./node_modules/highlight.js/lib/languages/openscad.js\\\"));\\nhljs.registerLanguage('oxygene', __webpack_require__(/*! ./languages/oxygene */ \\\"./node_modules/highlight.js/lib/languages/oxygene.js\\\"));\\nhljs.registerLanguage('parser3', __webpack_require__(/*! ./languages/parser3 */ \\\"./node_modules/highlight.js/lib/languages/parser3.js\\\"));\\nhljs.registerLanguage('pf', __webpack_require__(/*! ./languages/pf */ \\\"./node_modules/highlight.js/lib/languages/pf.js\\\"));\\nhljs.registerLanguage('pgsql', __webpack_require__(/*! ./languages/pgsql */ \\\"./node_modules/highlight.js/lib/languages/pgsql.js\\\"));\\nhljs.registerLanguage('php', __webpack_require__(/*! ./languages/php */ \\\"./node_modules/highlight.js/lib/languages/php.js\\\"));\\nhljs.registerLanguage('php-template', __webpack_require__(/*! ./languages/php-template */ \\\"./node_modules/highlight.js/lib/languages/php-template.js\\\"));\\nhljs.registerLanguage('plaintext', __webpack_require__(/*! ./languages/plaintext */ \\\"./node_modules/highlight.js/lib/languages/plaintext.js\\\"));\\nhljs.registerLanguage('pony', __webpack_require__(/*! ./languages/pony */ \\\"./node_modules/highlight.js/lib/languages/pony.js\\\"));\\nhljs.registerLanguage('powershell', __webpack_require__(/*! ./languages/powershell */ \\\"./node_modules/highlight.js/lib/languages/powershell.js\\\"));\\nhljs.registerLanguage('processing', __webpack_require__(/*! ./languages/processing */ \\\"./node_modules/highlight.js/lib/languages/processing.js\\\"));\\nhljs.registerLanguage('profile', __webpack_require__(/*! ./languages/profile */ \\\"./node_modules/highlight.js/lib/languages/profile.js\\\"));\\nhljs.registerLanguage('prolog', __webpack_require__(/*! ./languages/prolog */ \\\"./node_modules/highlight.js/lib/languages/prolog.js\\\"));\\nhljs.registerLanguage('properties', __webpack_require__(/*! ./languages/properties */ \\\"./node_modules/highlight.js/lib/languages/properties.js\\\"));\\nhljs.registerLanguage('protobuf', __webpack_require__(/*! ./languages/protobuf */ \\\"./node_modules/highlight.js/lib/languages/protobuf.js\\\"));\\nhljs.registerLanguage('puppet', __webpack_require__(/*! ./languages/puppet */ \\\"./node_modules/highlight.js/lib/languages/puppet.js\\\"));\\nhljs.registerLanguage('purebasic', __webpack_require__(/*! ./languages/purebasic */ \\\"./node_modules/highlight.js/lib/languages/purebasic.js\\\"));\\nhljs.registerLanguage('python', __webpack_require__(/*! ./languages/python */ \\\"./node_modules/highlight.js/lib/languages/python.js\\\"));\\nhljs.registerLanguage('python-repl', __webpack_require__(/*! ./languages/python-repl */ \\\"./node_modules/highlight.js/lib/languages/python-repl.js\\\"));\\nhljs.registerLanguage('q', __webpack_require__(/*! ./languages/q */ \\\"./node_modules/highlight.js/lib/languages/q.js\\\"));\\nhljs.registerLanguage('qml', __webpack_require__(/*! ./languages/qml */ \\\"./node_modules/highlight.js/lib/languages/qml.js\\\"));\\nhljs.registerLanguage('r', __webpack_require__(/*! ./languages/r */ \\\"./node_modules/highlight.js/lib/languages/r.js\\\"));\\nhljs.registerLanguage('reasonml', __webpack_require__(/*! ./languages/reasonml */ \\\"./node_modules/highlight.js/lib/languages/reasonml.js\\\"));\\nhljs.registerLanguage('rib', __webpack_require__(/*! ./languages/rib */ \\\"./node_modules/highlight.js/lib/languages/rib.js\\\"));\\nhljs.registerLanguage('roboconf', __webpack_require__(/*! ./languages/roboconf */ \\\"./node_modules/highlight.js/lib/languages/roboconf.js\\\"));\\nhljs.registerLanguage('routeros', __webpack_require__(/*! ./languages/routeros */ \\\"./node_modules/highlight.js/lib/languages/routeros.js\\\"));\\nhljs.registerLanguage('rsl', __webpack_require__(/*! ./languages/rsl */ \\\"./node_modules/highlight.js/lib/languages/rsl.js\\\"));\\nhljs.registerLanguage('ruleslanguage', __webpack_require__(/*! ./languages/ruleslanguage */ \\\"./node_modules/highlight.js/lib/languages/ruleslanguage.js\\\"));\\nhljs.registerLanguage('rust', __webpack_require__(/*! ./languages/rust */ \\\"./node_modules/highlight.js/lib/languages/rust.js\\\"));\\nhljs.registerLanguage('sas', __webpack_require__(/*! ./languages/sas */ \\\"./node_modules/highlight.js/lib/languages/sas.js\\\"));\\nhljs.registerLanguage('scala', __webpack_require__(/*! ./languages/scala */ \\\"./node_modules/highlight.js/lib/languages/scala.js\\\"));\\nhljs.registerLanguage('scheme', __webpack_require__(/*! ./languages/scheme */ \\\"./node_modules/highlight.js/lib/languages/scheme.js\\\"));\\nhljs.registerLanguage('scilab', __webpack_require__(/*! ./languages/scilab */ \\\"./node_modules/highlight.js/lib/languages/scilab.js\\\"));\\nhljs.registerLanguage('scss', __webpack_require__(/*! ./languages/scss */ \\\"./node_modules/highlight.js/lib/languages/scss.js\\\"));\\nhljs.registerLanguage('shell', __webpack_require__(/*! ./languages/shell */ \\\"./node_modules/highlight.js/lib/languages/shell.js\\\"));\\nhljs.registerLanguage('smali', __webpack_require__(/*! ./languages/smali */ \\\"./node_modules/highlight.js/lib/languages/smali.js\\\"));\\nhljs.registerLanguage('smalltalk', __webpack_require__(/*! ./languages/smalltalk */ \\\"./node_modules/highlight.js/lib/languages/smalltalk.js\\\"));\\nhljs.registerLanguage('sml', __webpack_require__(/*! ./languages/sml */ \\\"./node_modules/highlight.js/lib/languages/sml.js\\\"));\\nhljs.registerLanguage('sqf', __webpack_require__(/*! ./languages/sqf */ \\\"./node_modules/highlight.js/lib/languages/sqf.js\\\"));\\nhljs.registerLanguage('sql', __webpack_require__(/*! ./languages/sql */ \\\"./node_modules/highlight.js/lib/languages/sql.js\\\"));\\nhljs.registerLanguage('stan', __webpack_require__(/*! ./languages/stan */ \\\"./node_modules/highlight.js/lib/languages/stan.js\\\"));\\nhljs.registerLanguage('stata', __webpack_require__(/*! ./languages/stata */ \\\"./node_modules/highlight.js/lib/languages/stata.js\\\"));\\nhljs.registerLanguage('step21', __webpack_require__(/*! ./languages/step21 */ \\\"./node_modules/highlight.js/lib/languages/step21.js\\\"));\\nhljs.registerLanguage('stylus', __webpack_require__(/*! ./languages/stylus */ \\\"./node_modules/highlight.js/lib/languages/stylus.js\\\"));\\nhljs.registerLanguage('subunit', __webpack_require__(/*! ./languages/subunit */ \\\"./node_modules/highlight.js/lib/languages/subunit.js\\\"));\\nhljs.registerLanguage('swift', __webpack_require__(/*! ./languages/swift */ \\\"./node_modules/highlight.js/lib/languages/swift.js\\\"));\\nhljs.registerLanguage('taggerscript', __webpack_require__(/*! ./languages/taggerscript */ \\\"./node_modules/highlight.js/lib/languages/taggerscript.js\\\"));\\nhljs.registerLanguage('yaml', __webpack_require__(/*! ./languages/yaml */ \\\"./node_modules/highlight.js/lib/languages/yaml.js\\\"));\\nhljs.registerLanguage('tap', __webpack_require__(/*! ./languages/tap */ \\\"./node_modules/highlight.js/lib/languages/tap.js\\\"));\\nhljs.registerLanguage('tcl', __webpack_require__(/*! ./languages/tcl */ \\\"./node_modules/highlight.js/lib/languages/tcl.js\\\"));\\nhljs.registerLanguage('thrift', __webpack_require__(/*! ./languages/thrift */ \\\"./node_modules/highlight.js/lib/languages/thrift.js\\\"));\\nhljs.registerLanguage('tp', __webpack_require__(/*! ./languages/tp */ \\\"./node_modules/highlight.js/lib/languages/tp.js\\\"));\\nhljs.registerLanguage('twig', __webpack_require__(/*! ./languages/twig */ \\\"./node_modules/highlight.js/lib/languages/twig.js\\\"));\\nhljs.registerLanguage('typescript', __webpack_require__(/*! ./languages/typescript */ \\\"./node_modules/highlight.js/lib/languages/typescript.js\\\"));\\nhljs.registerLanguage('vala', __webpack_require__(/*! ./languages/vala */ \\\"./node_modules/highlight.js/lib/languages/vala.js\\\"));\\nhljs.registerLanguage('vbnet', __webpack_require__(/*! ./languages/vbnet */ \\\"./node_modules/highlight.js/lib/languages/vbnet.js\\\"));\\nhljs.registerLanguage('vbscript', __webpack_require__(/*! ./languages/vbscript */ \\\"./node_modules/highlight.js/lib/languages/vbscript.js\\\"));\\nhljs.registerLanguage('vbscript-html', __webpack_require__(/*! ./languages/vbscript-html */ \\\"./node_modules/highlight.js/lib/languages/vbscript-html.js\\\"));\\nhljs.registerLanguage('verilog', __webpack_require__(/*! ./languages/verilog */ \\\"./node_modules/highlight.js/lib/languages/verilog.js\\\"));\\nhljs.registerLanguage('vhdl', __webpack_require__(/*! ./languages/vhdl */ \\\"./node_modules/highlight.js/lib/languages/vhdl.js\\\"));\\nhljs.registerLanguage('vim', __webpack_require__(/*! ./languages/vim */ \\\"./node_modules/highlight.js/lib/languages/vim.js\\\"));\\nhljs.registerLanguage('wasm', __webpack_require__(/*! ./languages/wasm */ \\\"./node_modules/highlight.js/lib/languages/wasm.js\\\"));\\nhljs.registerLanguage('wren', __webpack_require__(/*! ./languages/wren */ \\\"./node_modules/highlight.js/lib/languages/wren.js\\\"));\\nhljs.registerLanguage('x86asm', __webpack_require__(/*! ./languages/x86asm */ \\\"./node_modules/highlight.js/lib/languages/x86asm.js\\\"));\\nhljs.registerLanguage('xl', __webpack_require__(/*! ./languages/xl */ \\\"./node_modules/highlight.js/lib/languages/xl.js\\\"));\\nhljs.registerLanguage('xquery', __webpack_require__(/*! ./languages/xquery */ \\\"./node_modules/highlight.js/lib/languages/xquery.js\\\"));\\nhljs.registerLanguage('zephir', __webpack_require__(/*! ./languages/zephir */ \\\"./node_modules/highlight.js/lib/languages/zephir.js\\\"));\\n\\nhljs.HighlightJS = hljs\\nhljs.default = hljs\\nmodule.exports = hljs;\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/1c.js\":\n/*!*******************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/1c.js ***!\n  \\*******************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: 1C:Enterprise\\nAuthor: Stanislav Belov <stbelov@gmail.com>\\nDescription: built-in language 1C:Enterprise (v7, v8)\\nCategory: enterprise\\n*/\\n\\nfunction _1c(hljs) {\\n  // общий паттерн для определения идентификаторов\\n  const UNDERSCORE_IDENT_RE = '[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]+';\\n\\n  // v7 уникальные ключевые слова, отсутствующие в v8 ==> keyword\\n  const v7_keywords =\\n  'далее ';\\n\\n  // v8 ключевые слова ==> keyword\\n  const v8_keywords =\\n  'возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли '\\n  + 'конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт ';\\n\\n  // keyword : ключевые слова\\n  const KEYWORD = v7_keywords + v8_keywords;\\n\\n  // v7 уникальные директивы, отсутствующие в v8 ==> meta-keyword\\n  const v7_meta_keywords =\\n  'загрузитьизфайла ';\\n\\n  // v8 ключевые слова в инструкциях препроцессора, директивах компиляции, аннотациях ==> meta-keyword\\n  const v8_meta_keywords =\\n  'вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер '\\n  + 'наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед '\\n  + 'после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент ';\\n\\n  // meta-keyword : ключевые слова в инструкциях препроцессора, директивах компиляции, аннотациях\\n  const METAKEYWORD = v7_meta_keywords + v8_meta_keywords;\\n\\n  // v7 системные константы ==> built_in\\n  const v7_system_constants =\\n  'разделительстраниц разделительстрок символтабуляции ';\\n\\n  // v7 уникальные методы глобального контекста, отсутствующие в v8 ==> built_in\\n  const v7_global_context_methods =\\n  'ansitooem oemtoansi ввестивидсубконто ввестиперечисление ввестипериод ввестиплансчетов выбранныйплансчетов '\\n  + 'датагод датамесяц датачисло заголовоксистемы значениевстроку значениеизстроки каталогиб каталогпользователя '\\n  + 'кодсимв конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца '\\n  + 'коннедели лог лог10 максимальноеколичествосубконто названиеинтерфейса названиенабораправ назначитьвид '\\n  + 'назначитьсчет найтиссылки началопериодаби началостандартногоинтервала начгода начквартала начмесяца '\\n  + 'начнедели номерднягода номерднянедели номернеделигода обработкаожидания основнойжурналрасчетов '\\n  + 'основнойплансчетов основнойязык очиститьокносообщений периодстр получитьвремята получитьдатута '\\n  + 'получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта '\\n  + 'префиксавтонумерации пропись пустоезначение разм разобратьпозициюдокумента рассчитатьрегистрына '\\n  + 'рассчитатьрегистрыпо симв создатьобъект статусвозврата стрколичествострок сформироватьпозициюдокумента '\\n  + 'счетпокоду текущеевремя типзначения типзначениястр установитьтана установитьтапо фиксшаблон шаблон ';\\n\\n  // v8 методы глобального контекста ==> built_in\\n  const v8_global_context_methods =\\n  'acos asin atan base64значение base64строка cos exp log log10 pow sin sqrt tan xmlзначение xmlстрока '\\n  + 'xmlтип xmlтипзнч активноеокно безопасныйрежим безопасныйрежимразделенияданных булево ввестидату ввестизначение '\\n  + 'ввестистроку ввестичисло возможностьчтенияxml вопрос восстановитьзначение врег выгрузитьжурналрегистрации '\\n  + 'выполнитьобработкуоповещения выполнитьпроверкуправдоступа вычислить год данныеформывзначение дата день деньгода '\\n  + 'деньнедели добавитьмесяц заблокироватьданныедляредактирования заблокироватьработупользователя завершитьработусистемы '\\n  + 'загрузитьвнешнююкомпоненту закрытьсправку записатьjson записатьxml записатьдатуjson записьжурналарегистрации '\\n  + 'заполнитьзначениясвойств запроситьразрешениепользователя запуститьприложение запуститьсистему зафиксироватьтранзакцию '\\n  + 'значениевданныеформы значениевстрокувнутр значениевфайл значениезаполнено значениеизстрокивнутр значениеизфайла '\\n  + 'изxmlтипа импортмоделиxdto имякомпьютера имяпользователя инициализироватьпредопределенныеданные информацияобошибке '\\n  + 'каталогбиблиотекимобильногоустройства каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьстроку '\\n  + 'кодлокализацииинформационнойбазы кодсимвола командасистемы конецгода конецдня конецквартала конецмесяца конецминуты '\\n  + 'конецнедели конецчаса конфигурациябазыданныхизмененадинамически конфигурацияизменена копироватьданныеформы '\\n  + 'копироватьфайл краткоепредставлениеошибки лев макс местноевремя месяц мин минута монопольныйрежим найти '\\n  + 'найтинедопустимыесимволыxml найтиокнопонавигационнойссылке найтипомеченныенаудаление найтипоссылкам найтифайлы '\\n  + 'началогода началодня началоквартала началомесяца началоминуты началонедели началочаса начатьзапросразрешенияпользователя '\\n  + 'начатьзапускприложения начатькопированиефайла начатьперемещениефайла начатьподключениевнешнейкомпоненты '\\n  + 'начатьподключениерасширенияработыскриптографией начатьподключениерасширенияработысфайлами начатьпоискфайлов '\\n  + 'начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов начатьполучениерабочегокаталогаданныхпользователя '\\n  + 'начатьполучениефайлов начатьпомещениефайла начатьпомещениефайлов начатьсозданиедвоичныхданныхизфайла начатьсозданиекаталога '\\n  + 'начатьтранзакцию начатьудалениефайлов начатьустановкувнешнейкомпоненты начатьустановкурасширенияработыскриптографией '\\n  + 'начатьустановкурасширенияработысфайлами неделягода необходимостьзавершениясоединения номерсеансаинформационнойбазы '\\n  + 'номерсоединенияинформационнойбазы нрег нстр обновитьинтерфейс обновитьнумерациюобъектов обновитьповторноиспользуемыезначения '\\n  + 'обработкапрерыванияпользователя объединитьфайлы окр описаниеошибки оповестить оповеститьобизменении '\\n  + 'отключитьобработчикзапросанастроекклиенталицензирования отключитьобработчикожидания отключитьобработчикоповещения '\\n  + 'открытьзначение открытьиндекссправки открытьсодержаниесправки открытьсправку открытьформу открытьформумодально '\\n  + 'отменитьтранзакцию очиститьжурналрегистрации очиститьнастройкипользователя очиститьсообщения параметрыдоступа '\\n  + 'перейтипонавигационнойссылке переместитьфайл подключитьвнешнююкомпоненту '\\n  + 'подключитьобработчикзапросанастроекклиенталицензирования подключитьобработчикожидания подключитьобработчикоповещения '\\n  + 'подключитьрасширениеработыскриптографией подключитьрасширениеработысфайлами подробноепредставлениеошибки '\\n  + 'показатьвводдаты показатьвводзначения показатьвводстроки показатьвводчисла показатьвопрос показатьзначение '\\n  + 'показатьинформациюобошибке показатьнакарте показатьоповещениепользователя показатьпредупреждение полноеимяпользователя '\\n  + 'получитьcomобъект получитьxmlтип получитьадреспоместоположению получитьблокировкусеансов получитьвремязавершенияспящегосеанса '\\n  + 'получитьвремязасыпанияпассивногосеанса получитьвремяожиданияблокировкиданных получитьданныевыбора '\\n  + 'получитьдополнительныйпараметрклиенталицензирования получитьдопустимыекодылокализации получитьдопустимыечасовыепояса '\\n  + 'получитьзаголовокклиентскогоприложения получитьзаголовоксистемы получитьзначенияотборажурналарегистрации '\\n  + 'получитьидентификаторконфигурации получитьизвременногохранилища получитьимявременногофайла '\\n  + 'получитьимяклиенталицензирования получитьинформациюэкрановклиента получитьиспользованиежурналарегистрации '\\n  + 'получитьиспользованиесобытияжурналарегистрации получитькраткийзаголовокприложения получитьмакетоформления '\\n  + 'получитьмаскувсефайлы получитьмаскувсефайлыклиента получитьмаскувсефайлысервера получитьместоположениепоадресу '\\n  + 'получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюссылку получитьнавигационнуюссылкуинформационнойбазы '\\n  + 'получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет '\\n  + 'получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопасногорежима '\\n  + 'получитьпараметрыфункциональныхопцийинтерфейса получитьполноеимяпредопределенногозначения '\\n  + 'получитьпредставлениянавигационныхссылок получитьпроверкусложностипаролейпользователей получитьразделительпути '\\n  + 'получитьразделительпутиклиента получитьразделительпутисервера получитьсеансыинформационнойбазы '\\n  + 'получитьскоростьклиентскогосоединения получитьсоединенияинформационнойбазы получитьсообщенияпользователю '\\n  + 'получитьсоответствиеобъектаиформы получитьсоставстандартногоинтерфейсаodata получитьструктурухранениябазыданных '\\n  + 'получитьтекущийсеансинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию '\\n  + 'получитьфункциональнуюопциюинтерфейса получитьчасовойпоясинформационнойбазы пользователиос поместитьвовременноехранилище '\\n  + 'поместитьфайл поместитьфайлы прав праводоступа предопределенноезначение представлениекодалокализации представлениепериода '\\n  + 'представлениеправа представлениеприложения представлениесобытияжурналарегистрации представлениечасовогопояса предупреждение '\\n  + 'прекратитьработусистемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пустаястрока '\\n  + 'рабочийкаталогданныхпользователя разблокироватьданныедляредактирования разделитьфайл разорватьсоединениесвнешнимисточникомданных '\\n  + 'раскодироватьстроку рольдоступна секунда сигнал символ скопироватьжурналрегистрации смещениелетнеговремени '\\n  + 'смещениестандартноговремени соединитьбуферыдвоичныхданных создатькаталог создатьфабрикуxdto сокрл сокрлп сокрп сообщить '\\n  + 'состояние сохранитьзначение сохранитьнастройкипользователя сред стрдлина стрзаканчиваетсяна стрзаменить стрнайти стрначинаетсяс '\\n  + 'строка строкасоединенияинформационнойбазы стрполучитьстроку стрразделить стрсоединить стрсравнить стрчисловхождений '\\n  + 'стрчислострок стршаблон текущаядата текущаядатасеанса текущаяуниверсальнаядата текущаяуниверсальнаядатавмиллисекундах '\\n  + 'текущийвариантинтерфейсаклиентскогоприложения текущийвариантосновногошрифтаклиентскогоприложения текущийкодлокализации '\\n  + 'текущийрежимзапуска текущийязык текущийязыксистемы тип типзнч транзакцияактивна трег удалитьданныеинформационнойбазы '\\n  + 'удалитьизвременногохранилища удалитьобъекты удалитьфайлы универсальноевремя установитьбезопасныйрежим '\\n  + 'установитьбезопасныйрежимразделенияданных установитьблокировкусеансов установитьвнешнююкомпоненту '\\n  + 'установитьвремязавершенияспящегосеанса установитьвремязасыпанияпассивногосеанса установитьвремяожиданияблокировкиданных '\\n  + 'установитьзаголовокклиентскогоприложения установитьзаголовоксистемы установитьиспользованиежурналарегистрации '\\n  + 'установитьиспользованиесобытияжурналарегистрации установитькраткийзаголовокприложения '\\n  + 'установитьминимальнуюдлинупаролейпользователей установитьмонопольныйрежим установитьнастройкиклиенталицензирования '\\n  + 'установитьобновлениепредопределенныхданныхинформационнойбазы установитьотключениебезопасногорежима '\\n  + 'установитьпараметрыфункциональныхопцийинтерфейса установитьпривилегированныйрежим '\\n  + 'установитьпроверкусложностипаролейпользователей установитьрасширениеработыскриптографией '\\n  + 'установитьрасширениеработысфайлами установитьсоединениесвнешнимисточникомданных установитьсоответствиеобъектаиформы '\\n  + 'установитьсоставстандартногоинтерфейсаodata установитьчасовойпоясинформационнойбазы установитьчасовойпояссеанса '\\n  + 'формат цел час часовойпояс часовойпояссеанса число числопрописью этоадресвременногохранилища ';\\n\\n  // v8 свойства глобального контекста ==> built_in\\n  const v8_global_context_property =\\n  'wsссылки библиотекакартинок библиотекамакетовоформлениякомпоновкиданных библиотекастилей бизнеспроцессы '\\n  + 'внешниеисточникиданных внешниеобработки внешниеотчеты встроенныепокупки главныйинтерфейс главныйстиль '\\n  + 'документы доставляемыеуведомления журналыдокументов задачи информацияобинтернетсоединении использованиерабочейдаты '\\n  + 'историяработыпользователя константы критерииотбора метаданные обработки отображениерекламы отправкадоставляемыхуведомлений '\\n  + 'отчеты панельзадачос параметрзапуска параметрысеанса перечисления планывидоврасчета планывидовхарактеристик '\\n  + 'планыобмена планысчетов полнотекстовыйпоиск пользователиинформационнойбазы последовательности проверкавстроенныхпокупок '\\n  + 'рабочаядата расширенияконфигурации регистрыбухгалтерии регистрынакопления регистрырасчета регистрысведений '\\n  + 'регламентныезадания сериализаторxdto справочники средствагеопозиционирования средствакриптографии средствамультимедиа '\\n  + 'средстваотображениярекламы средствапочты средствателефонии фабрикаxdto файловыепотоки фоновыезадания хранилищанастроек '\\n  + 'хранилищевариантовотчетов хранилищенастроекданныхформ хранилищеобщихнастроек хранилищепользовательскихнастроекдинамическихсписков '\\n  + 'хранилищепользовательскихнастроекотчетов хранилищесистемныхнастроек ';\\n\\n  // built_in : встроенные или библиотечные объекты (константы, классы, функции)\\n  const BUILTIN =\\n  v7_system_constants\\n  + v7_global_context_methods + v8_global_context_methods\\n  + v8_global_context_property;\\n\\n  // v8 системные наборы значений ==> class\\n  const v8_system_sets_of_values =\\n  'webцвета windowsцвета windowsшрифты библиотекакартинок рамкистиля символы цветастиля шрифтыстиля ';\\n\\n  // v8 системные перечисления - интерфейсные ==> class\\n  const v8_system_enums_interface =\\n  'автоматическоесохранениеданныхформывнастройках автонумерациявформе автораздвижениесерий '\\n  + 'анимациядиаграммы вариантвыравниванияэлементовизаголовков вариантуправлениявысотойтаблицы '\\n  + 'вертикальнаяпрокруткаформы вертикальноеположение вертикальноеположениеэлемента видгруппыформы '\\n  + 'виддекорацииформы виддополненияэлементаформы видизмененияданных видкнопкиформы видпереключателя '\\n  + 'видподписейкдиаграмме видполяформы видфлажка влияниеразмеранапузырекдиаграммы горизонтальноеположение '\\n  + 'горизонтальноеположениеэлемента группировкаколонок группировкаподчиненныхэлементовформы '\\n  + 'группыиэлементы действиеперетаскивания дополнительныйрежимотображения допустимыедействияперетаскивания '\\n  + 'интервалмеждуэлементамиформы использованиевывода использованиеполосыпрокрутки '\\n  + 'используемоезначениеточкибиржевойдиаграммы историявыборапривводе источникзначенийоситочекдиаграммы '\\n  + 'источникзначенияразмерапузырькадиаграммы категориягруппыкоманд максимумсерий начальноеотображениедерева '\\n  + 'начальноеотображениесписка обновлениетекстаредактирования ориентациядендрограммы ориентациядиаграммы '\\n  + 'ориентацияметокдиаграммы ориентацияметоксводнойдиаграммы ориентацияэлементаформы отображениевдиаграмме '\\n  + 'отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы '\\n  + 'отображениезначенийсводнойдиаграммы отображениезначенияизмерительнойдиаграммы '\\n  + 'отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобсужденийформы '\\n  + 'отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиска '\\n  + 'отображениеподсказки отображениепредупрежденияприредактировании отображениеразметкиполосырегулирования '\\n  + 'отображениестраницформы отображениетаблицы отображениетекстазначениядиаграммыганта '\\n  + 'отображениеуправленияобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы '\\n  + 'поддержкамасштабадендрограммы поддержкамасштабадиаграммыганта поддержкамасштабасводнойдиаграммы '\\n  + 'поисквтаблицепривводе положениезаголовкаэлементаформы положениекартинкикнопкиформы '\\n  + 'положениекартинкиэлементаграфическойсхемы положениекоманднойпанелиформы положениекоманднойпанелиэлементаформы '\\n  + 'положениеопорнойточкиотрисовки положениеподписейкдиаграмме положениеподписейшкалызначенийизмерительнойдиаграммы '\\n  + 'положениесостоянияпросмотра положениестрокипоиска положениетекстасоединительнойлинии положениеуправленияпоиском '\\n  + 'положениешкалывремени порядокотображенияточекгоризонтальнойгистограммы порядоксерийвлегендедиаграммы '\\n  + 'размеркартинки расположениезаголовкашкалыдиаграммы растягиваниеповертикалидиаграммыганта '\\n  + 'режимавтоотображениясостояния режимвводастроктаблицы режимвыборанезаполненного режимвыделениядаты '\\n  + 'режимвыделениястрокитаблицы режимвыделениятаблицы режимизмененияразмера режимизменениясвязанногозначения '\\n  + 'режимиспользованиядиалогапечати режимиспользованияпараметракоманды режиммасштабированияпросмотра '\\n  + 'режимосновногоокнаклиентскогоприложения режимоткрытияокнаформы режимотображениявыделения '\\n  + 'режимотображениягеографическойсхемы режимотображениязначенийсерии режимотрисовкисеткиграфическойсхемы '\\n  + 'режимполупрозрачностидиаграммы режимпробеловдиаграммы режимразмещениянастранице режимредактированияколонки '\\n  + 'режимсглаживаниядиаграммы режимсглаживанияиндикатора режимсписказадач сквозноевыравнивание '\\n  + 'сохранениеданныхформывнастройках способзаполнениятекстазаголовкашкалыдиаграммы '\\n  + 'способопределенияограничивающегозначениядиаграммы стандартнаягруппакоманд стандартноеоформление '\\n  + 'статусоповещенияпользователя стильстрелки типаппроксимациилиниитрендадиаграммы типдиаграммы '\\n  + 'типединицышкалывремени типимпортасерийслоягеографическойсхемы типлиниигеографическойсхемы типлиниидиаграммы '\\n  + 'типмаркерагеографическойсхемы типмаркерадиаграммы типобластиоформления '\\n  + 'типорганизацииисточникаданныхгеографическойсхемы типотображениясериислоягеографическойсхемы '\\n  + 'типотображенияточечногообъектагеографическойсхемы типотображенияшкалыэлементалегендыгеографическойсхемы '\\n  + 'типпоискаобъектовгеографическойсхемы типпроекциигеографическойсхемы типразмещенияизмерений '\\n  + 'типразмещенияреквизитовизмерений типрамкиэлементауправления типсводнойдиаграммы '\\n  + 'типсвязидиаграммыганта типсоединениязначенийпосериямдиаграммы типсоединенияточекдиаграммы '\\n  + 'типсоединительнойлинии типстороныэлементаграфическойсхемы типформыотчета типшкалырадарнойдиаграммы '\\n  + 'факторлиниитрендадиаграммы фигуракнопки фигурыграфическойсхемы фиксациявтаблице форматдняшкалывремени '\\n  + 'форматкартинки ширинаподчиненныхэлементовформы ';\\n\\n  // v8 системные перечисления - свойства прикладных объектов ==> class\\n  const v8_system_enums_objects_properties =\\n  'виддвижениябухгалтерии виддвижениянакопления видпериодарегистрарасчета видсчета видточкимаршрутабизнеспроцесса '\\n  + 'использованиеагрегатарегистранакопления использованиегруппиэлементов использованиережимапроведения '\\n  + 'использованиесреза периодичностьагрегатарегистранакопления режимавтовремя режимзаписидокумента режимпроведениядокумента ';\\n\\n  // v8 системные перечисления - планы обмена ==> class\\n  const v8_system_enums_exchange_plans =\\n  'авторегистрацияизменений допустимыйномерсообщения отправкаэлементаданных получениеэлементаданных ';\\n\\n  // v8 системные перечисления - табличный документ ==> class\\n  const v8_system_enums_tabular_document =\\n  'использованиерасшифровкитабличногодокумента ориентациястраницы положениеитоговколоноксводнойтаблицы '\\n  + 'положениеитоговстроксводнойтаблицы положениетекстаотносительнокартинки расположениезаголовкагруппировкитабличногодокумента '\\n  + 'способчтениязначенийтабличногодокумента типдвустороннейпечати типзаполненияобластитабличногодокумента '\\n  + 'типкурсоровтабличногодокумента типлиниирисункатабличногодокумента типлинииячейкитабличногодокумента '\\n  + 'типнаправленияпереходатабличногодокумента типотображениявыделениятабличногодокумента типотображениялинийсводнойтаблицы '\\n  + 'типразмещениятекстатабличногодокумента типрисункатабличногодокумента типсмещениятабличногодокумента '\\n  + 'типузоратабличногодокумента типфайлатабличногодокумента точностьпечати чередованиерасположениястраниц ';\\n\\n  // v8 системные перечисления - планировщик ==> class\\n  const v8_system_enums_sheduler =\\n  'отображениевремениэлементовпланировщика ';\\n\\n  // v8 системные перечисления - форматированный документ ==> class\\n  const v8_system_enums_formatted_document =\\n  'типфайлаформатированногодокумента ';\\n\\n  // v8 системные перечисления - запрос ==> class\\n  const v8_system_enums_query =\\n  'обходрезультатазапроса типзаписизапроса ';\\n\\n  // v8 системные перечисления - построитель отчета ==> class\\n  const v8_system_enums_report_builder =\\n  'видзаполнениярасшифровкипостроителяотчета типдобавленияпредставлений типизмеренияпостроителяотчета типразмещенияитогов ';\\n\\n  // v8 системные перечисления - работа с файлами ==> class\\n  const v8_system_enums_files =\\n  'доступкфайлу режимдиалогавыборафайла режимоткрытияфайла ';\\n\\n  // v8 системные перечисления - построитель запроса ==> class\\n  const v8_system_enums_query_builder =\\n  'типизмеренияпостроителязапроса ';\\n\\n  // v8 системные перечисления - анализ данных ==> class\\n  const v8_system_enums_data_analysis =\\n  'видданныханализа методкластеризации типединицыинтервалавременианализаданных типзаполнениятаблицырезультатаанализаданных '\\n  + 'типиспользованиячисловыхзначенийанализаданных типисточникаданныхпоискаассоциаций типколонкианализаданныхдереворешений '\\n  + 'типколонкианализаданныхкластеризация типколонкианализаданныхобщаястатистика типколонкианализаданныхпоискассоциаций '\\n  + 'типколонкианализаданныхпоискпоследовательностей типколонкимоделипрогноза типмерырасстоянияанализаданных '\\n  + 'типотсеченияправилассоциации типполяанализаданных типстандартизациианализаданных типупорядочиванияправилассоциациианализаданных '\\n  + 'типупорядочиванияшаблоновпоследовательностейанализаданных типупрощениядереварешений ';\\n\\n  // v8 системные перечисления - xml, json, xs, dom, xdto, web-сервисы ==> class\\n  const v8_system_enums_xml_json_xs_dom_xdto_ws =\\n  'wsнаправлениепараметра вариантxpathxs вариантзаписидатыjson вариантпростоготипаxs видгруппымоделиxs видфасетаxdto '\\n  + 'действиепостроителяdom завершенностьпростоготипаxs завершенностьсоставноготипаxs завершенностьсхемыxs запрещенныеподстановкиxs '\\n  + 'исключениягруппподстановкиxs категорияиспользованияатрибутаxs категорияограниченияидентичностиxs категорияограниченияпространствименxs '\\n  + 'методнаследованияxs модельсодержимогоxs назначениетипаxml недопустимыеподстановкиxs обработкапробельныхсимволовxs обработкасодержимогоxs '\\n  + 'ограничениезначенияxs параметрыотбораузловdom переносстрокjson позициявдокументеdom пробельныесимволыxml типатрибутаxml типзначенияjson '\\n  + 'типканоническогоxml типкомпонентыxs типпроверкиxml типрезультатаdomxpath типузлаdom типузлаxml формаxml формапредставленияxs '\\n  + 'форматдатыjson экранированиесимволовjson ';\\n\\n  // v8 системные перечисления - система компоновки данных ==> class\\n  const v8_system_enums_data_composition_system =\\n  'видсравнениякомпоновкиданных действиеобработкирасшифровкикомпоновкиданных направлениесортировкикомпоновкиданных '\\n  + 'расположениевложенныхэлементоврезультатакомпоновкиданных расположениеитоговкомпоновкиданных расположениегруппировкикомпоновкиданных '\\n  + 'расположениеполейгруппировкикомпоновкиданных расположениеполякомпоновкиданных расположениереквизитовкомпоновкиданных '\\n  + 'расположениересурсовкомпоновкиданных типбухгалтерскогоостаткакомпоновкиданных типвыводатекстакомпоновкиданных '\\n  + 'типгруппировкикомпоновкиданных типгруппыэлементовотборакомпоновкиданных типдополненияпериодакомпоновкиданных '\\n  + 'типзаголовкаполейкомпоновкиданных типмакетагруппировкикомпоновкиданных типмакетаобластикомпоновкиданных типостаткакомпоновкиданных '\\n  + 'типпериодакомпоновкиданных типразмещениятекстакомпоновкиданных типсвязинаборовданныхкомпоновкиданных типэлементарезультатакомпоновкиданных '\\n  + 'расположениелегендыдиаграммыкомпоновкиданных типпримененияотборакомпоновкиданных режимотображенияэлементанастройкикомпоновкиданных '\\n  + 'режимотображениянастроеккомпоновкиданных состояниеэлементанастройкикомпоновкиданных способвосстановлениянастроеккомпоновкиданных '\\n  + 'режимкомпоновкирезультата использованиепараметракомпоновкиданных автопозицияресурсовкомпоновкиданных '\\n  + 'вариантиспользованиягруппировкикомпоновкиданных расположениересурсоввдиаграммекомпоновкиданных фиксациякомпоновкиданных '\\n  + 'использованиеусловногооформлениякомпоновкиданных ';\\n\\n  // v8 системные перечисления - почта ==> class\\n  const v8_system_enums_email =\\n  'важностьинтернетпочтовогосообщения обработкатекстаинтернетпочтовогосообщения способкодированияинтернетпочтовоговложения '\\n  + 'способкодированиянеasciiсимволовинтернетпочтовогосообщения типтекстапочтовогосообщения протоколинтернетпочты '\\n  + 'статусразборапочтовогосообщения ';\\n\\n  // v8 системные перечисления - журнал регистрации ==> class\\n  const v8_system_enums_logbook =\\n  'режимтранзакциизаписижурналарегистрации статустранзакциизаписижурналарегистрации уровеньжурналарегистрации ';\\n\\n  // v8 системные перечисления - криптография ==> class\\n  const v8_system_enums_cryptography =\\n  'расположениехранилищасертификатовкриптографии режимвключениясертификатовкриптографии режимпроверкисертификатакриптографии '\\n  + 'типхранилищасертификатовкриптографии ';\\n\\n  // v8 системные перечисления - ZIP ==> class\\n  const v8_system_enums_zip =\\n  'кодировкаименфайловвzipфайле методсжатияzip методшифрованияzip режимвосстановленияпутейфайловzip режимобработкиподкаталоговzip '\\n  + 'режимсохраненияпутейzip уровеньсжатияzip ';\\n\\n  // v8 системные перечисления -\\n  // Блокировка данных, Фоновые задания, Автоматизированное тестирование,\\n  // Доставляемые уведомления, Встроенные покупки, Интернет, Работа с двоичными данными ==> class\\n  const v8_system_enums_other =\\n  'звуковоеоповещение направлениепереходакстроке позициявпотоке порядокбайтов режимблокировкиданных режимуправленияблокировкойданных '\\n  + 'сервисвстроенныхпокупок состояниефоновогозадания типподписчикадоставляемыхуведомлений уровеньиспользованиязащищенногосоединенияftp ';\\n\\n  // v8 системные перечисления - схема запроса ==> class\\n  const v8_system_enums_request_schema =\\n  'направлениепорядкасхемызапроса типдополненияпериодамисхемызапроса типконтрольнойточкисхемызапроса типобъединениясхемызапроса '\\n  + 'типпараметрадоступнойтаблицысхемызапроса типсоединениясхемызапроса ';\\n\\n  // v8 системные перечисления - свойства объектов метаданных ==> class\\n  const v8_system_enums_properties_of_metadata_objects =\\n  'httpметод автоиспользованиеобщегореквизита автопрефиксномеразадачи вариантвстроенногоязыка видиерархии видрегистранакопления '\\n  + 'видтаблицывнешнегоисточникаданных записьдвиженийприпроведении заполнениепоследовательностей индексирование '\\n  + 'использованиебазыпланавидоврасчета использованиебыстроговыбора использованиеобщегореквизита использованиеподчинения '\\n  + 'использованиеполнотекстовогопоиска использованиеразделяемыхданныхобщегореквизита использованиереквизита '\\n  + 'назначениеиспользованияприложения назначениерасширенияконфигурации направлениепередачи обновлениепредопределенныхданных '\\n  + 'оперативноепроведение основноепредставлениевидарасчета основноепредставлениевидахарактеристики основноепредставлениезадачи '\\n  + 'основноепредставлениепланаобмена основноепредставлениесправочника основноепредставлениесчета перемещениеграницыприпроведении '\\n  + 'периодичностьномерабизнеспроцесса периодичностьномерадокумента периодичностьрегистрарасчета периодичностьрегистрасведений '\\n  + 'повторноеиспользованиевозвращаемыхзначений полнотекстовыйпоискпривводепостроке принадлежностьобъекта проведение '\\n  + 'разделениеаутентификацииобщегореквизита разделениеданныхобщегореквизита разделениерасширенийконфигурацииобщегореквизита '\\n  + 'режимавтонумерацииобъектов режимзаписирегистра режимиспользованиямодальности '\\n  + 'режимиспользованиясинхронныхвызововрасширенийплатформыивнешнихкомпонент режимповторногоиспользованиясеансов '\\n  + 'режимполученияданныхвыборапривводепостроке режимсовместимости режимсовместимостиинтерфейса '\\n  + 'режимуправленияблокировкойданныхпоумолчанию сериикодовпланавидовхарактеристик сериикодовпланасчетов '\\n  + 'сериикодовсправочника созданиепривводе способвыбора способпоискастрокипривводепостроке способредактирования '\\n  + 'типданныхтаблицывнешнегоисточникаданных типкодапланавидоврасчета типкодасправочника типмакета типномерабизнеспроцесса '\\n  + 'типномерадокумента типномеразадачи типформы удалениедвижений ';\\n\\n  // v8 системные перечисления - разные ==> class\\n  const v8_system_enums_differents =\\n  'важностьпроблемыприменениярасширенияконфигурации вариантинтерфейсаклиентскогоприложения вариантмасштабаформклиентскогоприложения '\\n  + 'вариантосновногошрифтаклиентскогоприложения вариантстандартногопериода вариантстандартнойдатыначала видграницы видкартинки '\\n  + 'видотображенияполнотекстовогопоиска видрамки видсравнения видцвета видчисловогозначения видшрифта допустимаядлина допустимыйзнак '\\n  + 'использованиеbyteordermark использованиеметаданныхполнотекстовогопоиска источникрасширенийконфигурации клавиша кодвозвратадиалога '\\n  + 'кодировкаxbase кодировкатекста направлениепоиска направлениесортировки обновлениепредопределенныхданных обновлениеприизмененииданных '\\n  + 'отображениепанелиразделов проверказаполнения режимдиалогавопрос режимзапускаклиентскогоприложения режимокругления режимоткрытияформприложения '\\n  + 'режимполнотекстовогопоиска скоростьклиентскогосоединения состояниевнешнегоисточникаданных состояниеобновленияконфигурациибазыданных '\\n  + 'способвыборасертификатаwindows способкодированиястроки статуссообщения типвнешнейкомпоненты типплатформы типповеденияклавишиenter '\\n  + 'типэлементаинформацииовыполненииобновленияконфигурациибазыданных уровеньизоляциитранзакций хешфункция частидаты';\\n\\n  // class: встроенные наборы значений, системные перечисления (содержат дочерние значения, обращения к которым через разыменование)\\n  const CLASS =\\n  v8_system_sets_of_values\\n  + v8_system_enums_interface\\n  + v8_system_enums_objects_properties\\n  + v8_system_enums_exchange_plans\\n  + v8_system_enums_tabular_document\\n  + v8_system_enums_sheduler\\n  + v8_system_enums_formatted_document\\n  + v8_system_enums_query\\n  + v8_system_enums_report_builder\\n  + v8_system_enums_files\\n  + v8_system_enums_query_builder\\n  + v8_system_enums_data_analysis\\n  + v8_system_enums_xml_json_xs_dom_xdto_ws\\n  + v8_system_enums_data_composition_system\\n  + v8_system_enums_email\\n  + v8_system_enums_logbook\\n  + v8_system_enums_cryptography\\n  + v8_system_enums_zip\\n  + v8_system_enums_other\\n  + v8_system_enums_request_schema\\n  + v8_system_enums_properties_of_metadata_objects\\n  + v8_system_enums_differents;\\n\\n  // v8 общие объекты (у объектов есть конструктор, экземпляры создаются методом НОВЫЙ) ==> type\\n  const v8_shared_object =\\n  'comобъект ftpсоединение httpзапрос httpсервисответ httpсоединение wsопределения wsпрокси xbase анализданных аннотацияxs '\\n  + 'блокировкаданных буфердвоичныхданных включениеxs выражениекомпоновкиданных генераторслучайныхчисел географическаясхема '\\n  + 'географическиекоординаты графическаясхема группамоделиxs данныерасшифровкикомпоновкиданных двоичныеданные дендрограмма '\\n  + 'диаграмма диаграммаганта диалогвыборафайла диалогвыборацвета диалогвыборашрифта диалограсписаниярегламентногозадания '\\n  + 'диалогредактированиястандартногопериода диапазон документdom документhtml документацияxs доставляемоеуведомление '\\n  + 'записьdom записьfastinfoset записьhtml записьjson записьxml записьzipфайла записьданных записьтекста записьузловdom '\\n  + 'запрос защищенноесоединениеopenssl значенияполейрасшифровкикомпоновкиданных извлечениетекста импортxs интернетпочта '\\n  + 'интернетпочтовоесообщение интернетпочтовыйпрофиль интернетпрокси интернетсоединение информациядляприложенияxs '\\n  + 'использованиеатрибутаxs использованиесобытияжурналарегистрации источникдоступныхнастроеккомпоновкиданных '\\n  + 'итераторузловdom картинка квалификаторыдаты квалификаторыдвоичныхданных квалификаторыстроки квалификаторычисла '\\n  + 'компоновщикмакетакомпоновкиданных компоновщикнастроеккомпоновкиданных конструктормакетаоформлениякомпоновкиданных '\\n  + 'конструкторнастроеккомпоновкиданных конструкторформатнойстроки линия макеткомпоновкиданных макетобластикомпоновкиданных '\\n  + 'макетоформлениякомпоновкиданных маскаxs менеджеркриптографии наборсхемxml настройкикомпоновкиданных настройкисериализацииjson '\\n  + 'обработкакартинок обработкарасшифровкикомпоновкиданных обходдереваdom объявлениеатрибутаxs объявлениенотацииxs '\\n  + 'объявлениеэлементаxs описаниеиспользованиясобытиядоступжурналарегистрации '\\n  + 'описаниеиспользованиясобытияотказвдоступежурналарегистрации описаниеобработкирасшифровкикомпоновкиданных '\\n  + 'описаниепередаваемогофайла описаниетипов определениегруппыатрибутовxs определениегруппымоделиxs '\\n  + 'определениеограниченияидентичностиxs определениепростоготипаxs определениесоставноготипаxs определениетипадокументаdom '\\n  + 'определенияxpathxs отборкомпоновкиданных пакетотображаемыхдокументов параметрвыбора параметркомпоновкиданных '\\n  + 'параметрызаписиjson параметрызаписиxml параметрычтенияxml переопределениеxs планировщик полеанализаданных '\\n  + 'полекомпоновкиданных построительdom построительзапроса построительотчета построительотчетаанализаданных '\\n  + 'построительсхемxml поток потоквпамяти почта почтовоесообщение преобразованиеxsl преобразованиекканоническомуxml '\\n  + 'процессорвыводарезультатакомпоновкиданныхвколлекциюзначений процессорвыводарезультатакомпоновкиданныхвтабличныйдокумент '\\n  + 'процессоркомпоновкиданных разыменовательпространствименdom рамка расписаниерегламентногозадания расширенноеимяxml '\\n  + 'результатчтенияданных своднаядиаграмма связьпараметравыбора связьпотипу связьпотипукомпоновкиданных сериализаторxdto '\\n  + 'сертификатклиентаwindows сертификатклиентафайл сертификаткриптографии сертификатыудостоверяющихцентровwindows '\\n  + 'сертификатыудостоверяющихцентровфайл сжатиеданных системнаяинформация сообщениепользователю сочетаниеклавиш '\\n  + 'сравнениезначений стандартнаядатаначала стандартныйпериод схемаxml схемакомпоновкиданных табличныйдокумент '\\n  + 'текстовыйдокумент тестируемоеприложение типданныхxml уникальныйидентификатор фабрикаxdto файл файловыйпоток '\\n  + 'фасетдлиныxs фасетколичестваразрядовдробнойчастиxs фасетмаксимальноговключающегозначенияxs '\\n  + 'фасетмаксимальногоисключающегозначенияxs фасетмаксимальнойдлиныxs фасетминимальноговключающегозначенияxs '\\n  + 'фасетминимальногоисключающегозначенияxs фасетминимальнойдлиныxs фасетобразцаxs фасетобщегоколичестваразрядовxs '\\n  + 'фасетперечисленияxs фасетпробельныхсимволовxs фильтрузловdom форматированнаястрока форматированныйдокумент '\\n  + 'фрагментxs хешированиеданных хранилищезначения цвет чтениеfastinfoset чтениеhtml чтениеjson чтениеxml чтениеzipфайла '\\n  + 'чтениеданных чтениетекста чтениеузловdom шрифт элементрезультатакомпоновкиданных ';\\n\\n  // v8 универсальные коллекции значений ==> type\\n  const v8_universal_collection =\\n  'comsafearray деревозначений массив соответствие списокзначений структура таблицазначений фиксированнаяструктура '\\n  + 'фиксированноесоответствие фиксированныймассив ';\\n\\n  // type : встроенные типы\\n  const TYPE =\\n  v8_shared_object\\n  + v8_universal_collection;\\n\\n  // literal : примитивные типы\\n  const LITERAL = 'null истина ложь неопределено';\\n\\n  // number : числа\\n  const NUMBERS = hljs.inherit(hljs.NUMBER_MODE);\\n\\n  // string : строки\\n  const STRINGS = {\\n    className: 'string',\\n    begin: '\\\"|\\\\\\\\|',\\n    end: '\\\"|$',\\n    contains: [ { begin: '\\\"\\\"' } ]\\n  };\\n\\n  // number : даты\\n  const DATE = {\\n    begin: \\\"'\\\",\\n    end: \\\"'\\\",\\n    excludeBegin: true,\\n    excludeEnd: true,\\n    contains: [\\n      {\\n        className: 'number',\\n        begin: '\\\\\\\\d{4}([\\\\\\\\.\\\\\\\\\\\\\\\\/:-]?\\\\\\\\d{2}){0,5}'\\n      }\\n    ]\\n  };\\n\\n  // comment : комментарии\\n  const COMMENTS = hljs.inherit(hljs.C_LINE_COMMENT_MODE);\\n\\n  // meta : инструкции препроцессора, директивы компиляции\\n  const META = {\\n    className: 'meta',\\n\\n    begin: '#|&',\\n    end: '$',\\n    keywords: {\\n      $pattern: UNDERSCORE_IDENT_RE,\\n      keyword: KEYWORD + METAKEYWORD\\n    },\\n    contains: [ COMMENTS ]\\n  };\\n\\n  // symbol : метка goto\\n  const SYMBOL = {\\n    className: 'symbol',\\n    begin: '~',\\n    end: ';|:',\\n    excludeEnd: true\\n  };\\n\\n  // function : объявление процедур и функций\\n  const FUNCTION = {\\n    className: 'function',\\n    variants: [\\n      {\\n        begin: 'процедура|функция',\\n        end: '\\\\\\\\)',\\n        keywords: 'процедура функция'\\n      },\\n      {\\n        begin: 'конецпроцедуры|конецфункции',\\n        keywords: 'конецпроцедуры конецфункции'\\n      }\\n    ],\\n    contains: [\\n      {\\n        begin: '\\\\\\\\(',\\n        end: '\\\\\\\\)',\\n        endsParent: true,\\n        contains: [\\n          {\\n            className: 'params',\\n            begin: UNDERSCORE_IDENT_RE,\\n            end: ',',\\n            excludeEnd: true,\\n            endsWithParent: true,\\n            keywords: {\\n              $pattern: UNDERSCORE_IDENT_RE,\\n              keyword: 'знач',\\n              literal: LITERAL\\n            },\\n            contains: [\\n              NUMBERS,\\n              STRINGS,\\n              DATE\\n            ]\\n          },\\n          COMMENTS\\n        ]\\n      },\\n      hljs.inherit(hljs.TITLE_MODE, { begin: UNDERSCORE_IDENT_RE })\\n    ]\\n  };\\n\\n  return {\\n    name: '1C:Enterprise',\\n    case_insensitive: true,\\n    keywords: {\\n      $pattern: UNDERSCORE_IDENT_RE,\\n      keyword: KEYWORD,\\n      built_in: BUILTIN,\\n      class: CLASS,\\n      type: TYPE,\\n      literal: LITERAL\\n    },\\n    contains: [\\n      META,\\n      FUNCTION,\\n      COMMENTS,\\n      SYMBOL,\\n      NUMBERS,\\n      STRINGS,\\n      DATE\\n    ]\\n  };\\n}\\n\\nmodule.exports = _1c;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/1c.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/abnf.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/abnf.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Augmented Backus-Naur Form\\nAuthor: Alex McKibben <alex@nullscope.net>\\nWebsite: https://tools.ietf.org/html/rfc5234\\nAudit: 2020\\n*/\\n\\n/** @type LanguageFn */\\nfunction abnf(hljs) {\\n  const regex = hljs.regex;\\n  const IDENT = /^[a-zA-Z][a-zA-Z0-9-]*/;\\n\\n  const KEYWORDS = [\\n    \\\"ALPHA\\\",\\n    \\\"BIT\\\",\\n    \\\"CHAR\\\",\\n    \\\"CR\\\",\\n    \\\"CRLF\\\",\\n    \\\"CTL\\\",\\n    \\\"DIGIT\\\",\\n    \\\"DQUOTE\\\",\\n    \\\"HEXDIG\\\",\\n    \\\"HTAB\\\",\\n    \\\"LF\\\",\\n    \\\"LWSP\\\",\\n    \\\"OCTET\\\",\\n    \\\"SP\\\",\\n    \\\"VCHAR\\\",\\n    \\\"WSP\\\"\\n  ];\\n\\n  const COMMENT = hljs.COMMENT(/;/, /$/);\\n\\n  const TERMINAL_BINARY = {\\n    scope: \\\"symbol\\\",\\n    match: /%b[0-1]+(-[0-1]+|(\\\\.[0-1]+)+)?/\\n  };\\n\\n  const TERMINAL_DECIMAL = {\\n    scope: \\\"symbol\\\",\\n    match: /%d[0-9]+(-[0-9]+|(\\\\.[0-9]+)+)?/\\n  };\\n\\n  const TERMINAL_HEXADECIMAL = {\\n    scope: \\\"symbol\\\",\\n    match: /%x[0-9A-F]+(-[0-9A-F]+|(\\\\.[0-9A-F]+)+)?/\\n  };\\n\\n  const CASE_SENSITIVITY = {\\n    scope: \\\"symbol\\\",\\n    match: /%[si](?=\\\".*\\\")/\\n  };\\n\\n  const RULE_DECLARATION = {\\n    scope: \\\"attribute\\\",\\n    match: regex.concat(IDENT, /(?=\\\\s*=)/)\\n  };\\n\\n  const ASSIGNMENT = {\\n    scope: \\\"operator\\\",\\n    match: /=\\\\/?/\\n  };\\n\\n  return {\\n    name: 'Augmented Backus-Naur Form',\\n    illegal: /[!@#$^&',?+~`|:]/,\\n    keywords: KEYWORDS,\\n    contains: [\\n      ASSIGNMENT,\\n      RULE_DECLARATION,\\n      COMMENT,\\n      TERMINAL_BINARY,\\n      TERMINAL_DECIMAL,\\n      TERMINAL_HEXADECIMAL,\\n      CASE_SENSITIVITY,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.NUMBER_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = abnf;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/abnf.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/accesslog.js\":\n/*!**************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/accesslog.js ***!\n  \\**************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\n Language: Apache Access Log\\n Author: Oleg Efimov <efimovov@gmail.com>\\n Description: Apache/Nginx Access Logs\\n Website: https://httpd.apache.org/docs/2.4/logs.html#accesslog\\n Category: web, logs\\n Audit: 2020\\n */\\n\\n/** @type LanguageFn */\\nfunction accesslog(hljs) {\\n  const regex = hljs.regex;\\n  // https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods\\n  const HTTP_VERBS = [\\n    \\\"GET\\\",\\n    \\\"POST\\\",\\n    \\\"HEAD\\\",\\n    \\\"PUT\\\",\\n    \\\"DELETE\\\",\\n    \\\"CONNECT\\\",\\n    \\\"OPTIONS\\\",\\n    \\\"PATCH\\\",\\n    \\\"TRACE\\\"\\n  ];\\n  return {\\n    name: 'Apache Access Log',\\n    contains: [\\n      // IP\\n      {\\n        className: 'number',\\n        begin: /^\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b/,\\n        relevance: 5\\n      },\\n      // Other numbers\\n      {\\n        className: 'number',\\n        begin: /\\\\b\\\\d+\\\\b/,\\n        relevance: 0\\n      },\\n      // Requests\\n      {\\n        className: 'string',\\n        begin: regex.concat(/\\\"/, regex.either(...HTTP_VERBS)),\\n        end: /\\\"/,\\n        keywords: HTTP_VERBS,\\n        illegal: /\\\\n/,\\n        relevance: 5,\\n        contains: [\\n          {\\n            begin: /HTTP\\\\/[12]\\\\.\\\\d'/,\\n            relevance: 5\\n          }\\n        ]\\n      },\\n      // Dates\\n      {\\n        className: 'string',\\n        // dates must have a certain length, this prevents matching\\n        // simple array accesses a[123] and [] and other common patterns\\n        // found in other languages\\n        begin: /\\\\[\\\\d[^\\\\]\\\\n]{8,}\\\\]/,\\n        illegal: /\\\\n/,\\n        relevance: 1\\n      },\\n      {\\n        className: 'string',\\n        begin: /\\\\[/,\\n        end: /\\\\]/,\\n        illegal: /\\\\n/,\\n        relevance: 0\\n      },\\n      // User agent / relevance boost\\n      {\\n        className: 'string',\\n        begin: /\\\"Mozilla\\\\/\\\\d\\\\.\\\\d \\\\(/,\\n        end: /\\\"/,\\n        illegal: /\\\\n/,\\n        relevance: 3\\n      },\\n      // Strings\\n      {\\n        className: 'string',\\n        begin: /\\\"/,\\n        end: /\\\"/,\\n        illegal: /\\\\n/,\\n        relevance: 0\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = accesslog;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/accesslog.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/actionscript.js\":\n/*!*****************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/actionscript.js ***!\n  \\*****************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: ActionScript\\nAuthor: Alexander Myadzel <myadzel@gmail.com>\\nCategory: scripting\\nAudit: 2020\\n*/\\n\\n/** @type LanguageFn */\\nfunction actionscript(hljs) {\\n  const regex = hljs.regex;\\n  const IDENT_RE = /[a-zA-Z_$][a-zA-Z0-9_$]*/;\\n  const PKG_NAME_RE = regex.concat(\\n    IDENT_RE,\\n    regex.concat(\\\"(\\\\\\\\.\\\", IDENT_RE, \\\")*\\\")\\n  );\\n  const IDENT_FUNC_RETURN_TYPE_RE = /([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)/;\\n\\n  const AS3_REST_ARG_MODE = {\\n    className: 'rest_arg',\\n    begin: /[.]{3}/,\\n    end: IDENT_RE,\\n    relevance: 10\\n  };\\n\\n  const KEYWORDS = [\\n    \\\"as\\\",\\n    \\\"break\\\",\\n    \\\"case\\\",\\n    \\\"catch\\\",\\n    \\\"class\\\",\\n    \\\"const\\\",\\n    \\\"continue\\\",\\n    \\\"default\\\",\\n    \\\"delete\\\",\\n    \\\"do\\\",\\n    \\\"dynamic\\\",\\n    \\\"each\\\",\\n    \\\"else\\\",\\n    \\\"extends\\\",\\n    \\\"final\\\",\\n    \\\"finally\\\",\\n    \\\"for\\\",\\n    \\\"function\\\",\\n    \\\"get\\\",\\n    \\\"if\\\",\\n    \\\"implements\\\",\\n    \\\"import\\\",\\n    \\\"in\\\",\\n    \\\"include\\\",\\n    \\\"instanceof\\\",\\n    \\\"interface\\\",\\n    \\\"internal\\\",\\n    \\\"is\\\",\\n    \\\"namespace\\\",\\n    \\\"native\\\",\\n    \\\"new\\\",\\n    \\\"override\\\",\\n    \\\"package\\\",\\n    \\\"private\\\",\\n    \\\"protected\\\",\\n    \\\"public\\\",\\n    \\\"return\\\",\\n    \\\"set\\\",\\n    \\\"static\\\",\\n    \\\"super\\\",\\n    \\\"switch\\\",\\n    \\\"this\\\",\\n    \\\"throw\\\",\\n    \\\"try\\\",\\n    \\\"typeof\\\",\\n    \\\"use\\\",\\n    \\\"var\\\",\\n    \\\"void\\\",\\n    \\\"while\\\",\\n    \\\"with\\\"\\n  ];\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    \\\"null\\\",\\n    \\\"undefined\\\"\\n  ];\\n\\n  return {\\n    name: 'ActionScript',\\n    aliases: [ 'as' ],\\n    keywords: {\\n      keyword: KEYWORDS,\\n      literal: LITERALS\\n    },\\n    contains: [\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.C_NUMBER_MODE,\\n      {\\n        match: [\\n          /\\\\bpackage/,\\n          /\\\\s+/,\\n          PKG_NAME_RE\\n        ],\\n        className: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title.class\\\"\\n        }\\n      },\\n      {\\n        match: [\\n          /\\\\b(?:class|interface|extends|implements)/,\\n          /\\\\s+/,\\n          IDENT_RE\\n        ],\\n        className: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title.class\\\"\\n        }\\n      },\\n      {\\n        className: 'meta',\\n        beginKeywords: 'import include',\\n        end: /;/,\\n        keywords: { keyword: 'import include' }\\n      },\\n      {\\n        beginKeywords: 'function',\\n        end: /[{;]/,\\n        excludeEnd: true,\\n        illegal: /\\\\S/,\\n        contains: [\\n          hljs.inherit(hljs.TITLE_MODE, { className: \\\"title.function\\\" }),\\n          {\\n            className: 'params',\\n            begin: /\\\\(/,\\n            end: /\\\\)/,\\n            contains: [\\n              hljs.APOS_STRING_MODE,\\n              hljs.QUOTE_STRING_MODE,\\n              hljs.C_LINE_COMMENT_MODE,\\n              hljs.C_BLOCK_COMMENT_MODE,\\n              AS3_REST_ARG_MODE\\n            ]\\n          },\\n          { begin: regex.concat(/:\\\\s*/, IDENT_FUNC_RETURN_TYPE_RE) }\\n        ]\\n      },\\n      hljs.METHOD_GUARD\\n    ],\\n    illegal: /#/\\n  };\\n}\\n\\nmodule.exports = actionscript;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/actionscript.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/ada.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/ada.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Ada\\nAuthor: Lars Schulna <kartoffelbrei.mit.muskatnuss@gmail.org>\\nDescription: Ada is a general-purpose programming language that has great support for saftey critical and real-time applications.\\n             It has been developed by the DoD and thus has been used in military and safety-critical applications (like civil aviation).\\n             The first version appeared in the 80s, but it's still actively developed today with\\n             the newest standard being Ada2012.\\n*/\\n\\n// We try to support full Ada2012\\n//\\n// We highlight all appearances of types, keywords, literals (string, char, number, bool)\\n// and titles (user defined function/procedure/package)\\n// CSS classes are set accordingly\\n//\\n// Languages causing problems for language detection:\\n// xml (broken by Foo : Bar type), elm (broken by Foo : Bar type), vbscript-html (broken by body keyword)\\n// sql (ada default.txt has a lot of sql keywords)\\n\\n/** @type LanguageFn */\\nfunction ada(hljs) {\\n  // Regular expression for Ada numeric literals.\\n  // stolen form the VHDL highlighter\\n\\n  // Decimal literal:\\n  const INTEGER_RE = '\\\\\\\\d(_|\\\\\\\\d)*';\\n  const EXPONENT_RE = '[eE][-+]?' + INTEGER_RE;\\n  const DECIMAL_LITERAL_RE = INTEGER_RE + '(\\\\\\\\.' + INTEGER_RE + ')?' + '(' + EXPONENT_RE + ')?';\\n\\n  // Based literal:\\n  const BASED_INTEGER_RE = '\\\\\\\\w+';\\n  const BASED_LITERAL_RE = INTEGER_RE + '#' + BASED_INTEGER_RE + '(\\\\\\\\.' + BASED_INTEGER_RE + ')?' + '#' + '(' + EXPONENT_RE + ')?';\\n\\n  const NUMBER_RE = '\\\\\\\\b(' + BASED_LITERAL_RE + '|' + DECIMAL_LITERAL_RE + ')';\\n\\n  // Identifier regex\\n  const ID_REGEX = '[A-Za-z](_?[A-Za-z0-9.])*';\\n\\n  // bad chars, only allowed in literals\\n  const BAD_CHARS = `[]\\\\\\\\{\\\\\\\\}%#'\\\"`;\\n\\n  // Ada doesn't have block comments, only line comments\\n  const COMMENTS = hljs.COMMENT('--', '$');\\n\\n  // variable declarations of the form\\n  // Foo : Bar := Baz;\\n  // where only Bar will be highlighted\\n  const VAR_DECLS = {\\n    // TODO: These spaces are not required by the Ada syntax\\n    // however, I have yet to see handwritten Ada code where\\n    // someone does not put spaces around :\\n    begin: '\\\\\\\\s+:\\\\\\\\s+',\\n    end: '\\\\\\\\s*(:=|;|\\\\\\\\)|=>|$)',\\n    // endsWithParent: true,\\n    // returnBegin: true,\\n    illegal: BAD_CHARS,\\n    contains: [\\n      {\\n        // workaround to avoid highlighting\\n        // named loops and declare blocks\\n        beginKeywords: 'loop for declare others',\\n        endsParent: true\\n      },\\n      {\\n        // properly highlight all modifiers\\n        className: 'keyword',\\n        beginKeywords: 'not null constant access function procedure in out aliased exception'\\n      },\\n      {\\n        className: 'type',\\n        begin: ID_REGEX,\\n        endsParent: true,\\n        relevance: 0\\n      }\\n    ]\\n  };\\n\\n  const KEYWORDS = [\\n    \\\"abort\\\",\\n    \\\"else\\\",\\n    \\\"new\\\",\\n    \\\"return\\\",\\n    \\\"abs\\\",\\n    \\\"elsif\\\",\\n    \\\"not\\\",\\n    \\\"reverse\\\",\\n    \\\"abstract\\\",\\n    \\\"end\\\",\\n    \\\"accept\\\",\\n    \\\"entry\\\",\\n    \\\"select\\\",\\n    \\\"access\\\",\\n    \\\"exception\\\",\\n    \\\"of\\\",\\n    \\\"separate\\\",\\n    \\\"aliased\\\",\\n    \\\"exit\\\",\\n    \\\"or\\\",\\n    \\\"some\\\",\\n    \\\"all\\\",\\n    \\\"others\\\",\\n    \\\"subtype\\\",\\n    \\\"and\\\",\\n    \\\"for\\\",\\n    \\\"out\\\",\\n    \\\"synchronized\\\",\\n    \\\"array\\\",\\n    \\\"function\\\",\\n    \\\"overriding\\\",\\n    \\\"at\\\",\\n    \\\"tagged\\\",\\n    \\\"generic\\\",\\n    \\\"package\\\",\\n    \\\"task\\\",\\n    \\\"begin\\\",\\n    \\\"goto\\\",\\n    \\\"pragma\\\",\\n    \\\"terminate\\\",\\n    \\\"body\\\",\\n    \\\"private\\\",\\n    \\\"then\\\",\\n    \\\"if\\\",\\n    \\\"procedure\\\",\\n    \\\"type\\\",\\n    \\\"case\\\",\\n    \\\"in\\\",\\n    \\\"protected\\\",\\n    \\\"constant\\\",\\n    \\\"interface\\\",\\n    \\\"is\\\",\\n    \\\"raise\\\",\\n    \\\"use\\\",\\n    \\\"declare\\\",\\n    \\\"range\\\",\\n    \\\"delay\\\",\\n    \\\"limited\\\",\\n    \\\"record\\\",\\n    \\\"when\\\",\\n    \\\"delta\\\",\\n    \\\"loop\\\",\\n    \\\"rem\\\",\\n    \\\"while\\\",\\n    \\\"digits\\\",\\n    \\\"renames\\\",\\n    \\\"with\\\",\\n    \\\"do\\\",\\n    \\\"mod\\\",\\n    \\\"requeue\\\",\\n    \\\"xor\\\"\\n  ];\\n\\n  return {\\n    name: 'Ada',\\n    case_insensitive: true,\\n    keywords: {\\n      keyword: KEYWORDS,\\n      literal: [\\n        \\\"True\\\",\\n        \\\"False\\\"\\n      ]\\n    },\\n    contains: [\\n      COMMENTS,\\n      // strings \\\"foobar\\\"\\n      {\\n        className: 'string',\\n        begin: /\\\"/,\\n        end: /\\\"/,\\n        contains: [\\n          {\\n            begin: /\\\"\\\"/,\\n            relevance: 0\\n          }\\n        ]\\n      },\\n      // characters ''\\n      {\\n        // character literals always contain one char\\n        className: 'string',\\n        begin: /'.'/\\n      },\\n      {\\n        // number literals\\n        className: 'number',\\n        begin: NUMBER_RE,\\n        relevance: 0\\n      },\\n      {\\n        // Attributes\\n        className: 'symbol',\\n        begin: \\\"'\\\" + ID_REGEX\\n      },\\n      {\\n        // package definition, maybe inside generic\\n        className: 'title',\\n        begin: '(\\\\\\\\bwith\\\\\\\\s+)?(\\\\\\\\bprivate\\\\\\\\s+)?\\\\\\\\bpackage\\\\\\\\s+(\\\\\\\\bbody\\\\\\\\s+)?',\\n        end: '(is|$)',\\n        keywords: 'package body',\\n        excludeBegin: true,\\n        excludeEnd: true,\\n        illegal: BAD_CHARS\\n      },\\n      {\\n        // function/procedure declaration/definition\\n        // maybe inside generic\\n        begin: '(\\\\\\\\b(with|overriding)\\\\\\\\s+)?\\\\\\\\b(function|procedure)\\\\\\\\s+',\\n        end: '(\\\\\\\\bis|\\\\\\\\bwith|\\\\\\\\brenames|\\\\\\\\)\\\\\\\\s*;)',\\n        keywords: 'overriding function procedure with is renames return',\\n        // we need to re-match the 'function' keyword, so that\\n        // the title mode below matches only exactly once\\n        returnBegin: true,\\n        contains:\\n                [\\n                  COMMENTS,\\n                  {\\n                    // name of the function/procedure\\n                    className: 'title',\\n                    begin: '(\\\\\\\\bwith\\\\\\\\s+)?\\\\\\\\b(function|procedure)\\\\\\\\s+',\\n                    end: '(\\\\\\\\(|\\\\\\\\s+|$)',\\n                    excludeBegin: true,\\n                    excludeEnd: true,\\n                    illegal: BAD_CHARS\\n                  },\\n                  // 'self'\\n                  // // parameter types\\n                  VAR_DECLS,\\n                  {\\n                    // return type\\n                    className: 'type',\\n                    begin: '\\\\\\\\breturn\\\\\\\\s+',\\n                    end: '(\\\\\\\\s+|;|$)',\\n                    keywords: 'return',\\n                    excludeBegin: true,\\n                    excludeEnd: true,\\n                    // we are done with functions\\n                    endsParent: true,\\n                    illegal: BAD_CHARS\\n\\n                  }\\n                ]\\n      },\\n      {\\n        // new type declarations\\n        // maybe inside generic\\n        className: 'type',\\n        begin: '\\\\\\\\b(sub)?type\\\\\\\\s+',\\n        end: '\\\\\\\\s+',\\n        keywords: 'type',\\n        excludeBegin: true,\\n        illegal: BAD_CHARS\\n      },\\n\\n      // see comment above the definition\\n      VAR_DECLS\\n\\n      // no markup\\n      // relevance boosters for small snippets\\n      // {begin: '\\\\\\\\s*=>\\\\\\\\s*'},\\n      // {begin: '\\\\\\\\s*:=\\\\\\\\s*'},\\n      // {begin: '\\\\\\\\s+:=\\\\\\\\s+'},\\n    ]\\n  };\\n}\\n\\nmodule.exports = ada;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/ada.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/angelscript.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/angelscript.js ***!\n  \\****************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: AngelScript\\nAuthor: Melissa Geels <melissa@nimble.tools>\\nCategory: scripting\\nWebsite: https://www.angelcode.com/angelscript/\\n*/\\n\\n/** @type LanguageFn */\\nfunction angelscript(hljs) {\\n  const builtInTypeMode = {\\n    className: 'built_in',\\n    begin: '\\\\\\\\b(void|bool|int8|int16|int32|int64|int|uint8|uint16|uint32|uint64|uint|string|ref|array|double|float|auto|dictionary)'\\n  };\\n\\n  const objectHandleMode = {\\n    className: 'symbol',\\n    begin: '[a-zA-Z0-9_]+@'\\n  };\\n\\n  const genericMode = {\\n    className: 'keyword',\\n    begin: '<',\\n    end: '>',\\n    contains: [\\n      builtInTypeMode,\\n      objectHandleMode\\n    ]\\n  };\\n\\n  builtInTypeMode.contains = [ genericMode ];\\n  objectHandleMode.contains = [ genericMode ];\\n\\n  const KEYWORDS = [\\n    \\\"for\\\",\\n    \\\"in|0\\\",\\n    \\\"break\\\",\\n    \\\"continue\\\",\\n    \\\"while\\\",\\n    \\\"do|0\\\",\\n    \\\"return\\\",\\n    \\\"if\\\",\\n    \\\"else\\\",\\n    \\\"case\\\",\\n    \\\"switch\\\",\\n    \\\"namespace\\\",\\n    \\\"is\\\",\\n    \\\"cast\\\",\\n    \\\"or\\\",\\n    \\\"and\\\",\\n    \\\"xor\\\",\\n    \\\"not\\\",\\n    \\\"get|0\\\",\\n    \\\"in\\\",\\n    \\\"inout|10\\\",\\n    \\\"out\\\",\\n    \\\"override\\\",\\n    \\\"set|0\\\",\\n    \\\"private\\\",\\n    \\\"public\\\",\\n    \\\"const\\\",\\n    \\\"default|0\\\",\\n    \\\"final\\\",\\n    \\\"shared\\\",\\n    \\\"external\\\",\\n    \\\"mixin|10\\\",\\n    \\\"enum\\\",\\n    \\\"typedef\\\",\\n    \\\"funcdef\\\",\\n    \\\"this\\\",\\n    \\\"super\\\",\\n    \\\"import\\\",\\n    \\\"from\\\",\\n    \\\"interface\\\",\\n    \\\"abstract|0\\\",\\n    \\\"try\\\",\\n    \\\"catch\\\",\\n    \\\"protected\\\",\\n    \\\"explicit\\\",\\n    \\\"property\\\"\\n  ];\\n\\n  return {\\n    name: 'AngelScript',\\n    aliases: [ 'asc' ],\\n\\n    keywords: KEYWORDS,\\n\\n    // avoid close detection with C# and JS\\n    illegal: '(^using\\\\\\\\s+[A-Za-z0-9_\\\\\\\\.]+;$|\\\\\\\\bfunction\\\\\\\\s*[^\\\\\\\\(])',\\n\\n    contains: [\\n      { // 'strings'\\n        className: 'string',\\n        begin: '\\\\'',\\n        end: '\\\\'',\\n        illegal: '\\\\\\\\n',\\n        contains: [ hljs.BACKSLASH_ESCAPE ],\\n        relevance: 0\\n      },\\n\\n      // \\\"\\\"\\\"heredoc strings\\\"\\\"\\\"\\n      {\\n        className: 'string',\\n        begin: '\\\"\\\"\\\"',\\n        end: '\\\"\\\"\\\"'\\n      },\\n\\n      { // \\\"strings\\\"\\n        className: 'string',\\n        begin: '\\\"',\\n        end: '\\\"',\\n        illegal: '\\\\\\\\n',\\n        contains: [ hljs.BACKSLASH_ESCAPE ],\\n        relevance: 0\\n      },\\n\\n      hljs.C_LINE_COMMENT_MODE, // single-line comments\\n      hljs.C_BLOCK_COMMENT_MODE, // comment blocks\\n\\n      { // metadata\\n        className: 'string',\\n        begin: '^\\\\\\\\s*\\\\\\\\[',\\n        end: '\\\\\\\\]'\\n      },\\n\\n      { // interface or namespace declaration\\n        beginKeywords: 'interface namespace',\\n        end: /\\\\{/,\\n        illegal: '[;.\\\\\\\\-]',\\n        contains: [\\n          { // interface or namespace name\\n            className: 'symbol',\\n            begin: '[a-zA-Z0-9_]+'\\n          }\\n        ]\\n      },\\n\\n      { // class declaration\\n        beginKeywords: 'class',\\n        end: /\\\\{/,\\n        illegal: '[;.\\\\\\\\-]',\\n        contains: [\\n          { // class name\\n            className: 'symbol',\\n            begin: '[a-zA-Z0-9_]+',\\n            contains: [\\n              {\\n                begin: '[:,]\\\\\\\\s*',\\n                contains: [\\n                  {\\n                    className: 'symbol',\\n                    begin: '[a-zA-Z0-9_]+'\\n                  }\\n                ]\\n              }\\n            ]\\n          }\\n        ]\\n      },\\n\\n      builtInTypeMode, // built-in types\\n      objectHandleMode, // object handles\\n\\n      { // literals\\n        className: 'literal',\\n        begin: '\\\\\\\\b(null|true|false)'\\n      },\\n\\n      { // numbers\\n        className: 'number',\\n        relevance: 0,\\n        begin: '(-?)(\\\\\\\\b0[xXbBoOdD][a-fA-F0-9]+|(\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d*)?f?|\\\\\\\\.\\\\\\\\d+f?)([eE][-+]?\\\\\\\\d+f?)?)'\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = angelscript;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/angelscript.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/apache.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/apache.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Apache config\\nAuthor: Ruslan Keba <rukeba@gmail.com>\\nContributors: Ivan Sagalaev <maniac@softwaremaniacs.org>\\nWebsite: https://httpd.apache.org\\nDescription: language definition for Apache configuration files (httpd.conf & .htaccess)\\nCategory: config, web\\nAudit: 2020\\n*/\\n\\n/** @type LanguageFn */\\nfunction apache(hljs) {\\n  const NUMBER_REF = {\\n    className: 'number',\\n    begin: /[$%]\\\\d+/\\n  };\\n  const NUMBER = {\\n    className: 'number',\\n    begin: /\\\\b\\\\d+/\\n  };\\n  const IP_ADDRESS = {\\n    className: \\\"number\\\",\\n    begin: /\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?/\\n  };\\n  const PORT_NUMBER = {\\n    className: \\\"number\\\",\\n    begin: /:\\\\d{1,5}/\\n  };\\n  return {\\n    name: 'Apache config',\\n    aliases: [ 'apacheconf' ],\\n    case_insensitive: true,\\n    contains: [\\n      hljs.HASH_COMMENT_MODE,\\n      {\\n        className: 'section',\\n        begin: /<\\\\/?/,\\n        end: />/,\\n        contains: [\\n          IP_ADDRESS,\\n          PORT_NUMBER,\\n          // low relevance prevents us from claming XML/HTML where this rule would\\n          // match strings inside of XML tags\\n          hljs.inherit(hljs.QUOTE_STRING_MODE, { relevance: 0 })\\n        ]\\n      },\\n      {\\n        className: 'attribute',\\n        begin: /\\\\w+/,\\n        relevance: 0,\\n        // keywords aren’t needed for highlighting per se, they only boost relevance\\n        // for a very generally defined mode (starts with a word, ends with line-end\\n        keywords: { _: [\\n          \\\"order\\\",\\n          \\\"deny\\\",\\n          \\\"allow\\\",\\n          \\\"setenv\\\",\\n          \\\"rewriterule\\\",\\n          \\\"rewriteengine\\\",\\n          \\\"rewritecond\\\",\\n          \\\"documentroot\\\",\\n          \\\"sethandler\\\",\\n          \\\"errordocument\\\",\\n          \\\"loadmodule\\\",\\n          \\\"options\\\",\\n          \\\"header\\\",\\n          \\\"listen\\\",\\n          \\\"serverroot\\\",\\n          \\\"servername\\\"\\n        ] },\\n        starts: {\\n          end: /$/,\\n          relevance: 0,\\n          keywords: { literal: 'on off all deny allow' },\\n          contains: [\\n            {\\n              className: 'meta',\\n              begin: /\\\\s\\\\[/,\\n              end: /\\\\]$/\\n            },\\n            {\\n              className: 'variable',\\n              begin: /[\\\\$%]\\\\{/,\\n              end: /\\\\}/,\\n              contains: [\\n                'self',\\n                NUMBER_REF\\n              ]\\n            },\\n            IP_ADDRESS,\\n            NUMBER,\\n            hljs.QUOTE_STRING_MODE\\n          ]\\n        }\\n      }\\n    ],\\n    illegal: /\\\\S/\\n  };\\n}\\n\\nmodule.exports = apache;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/apache.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/applescript.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/applescript.js ***!\n  \\****************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: AppleScript\\nAuthors: Nathan Grigg <nathan@nathanamy.org>, Dr. Drang <drdrang@gmail.com>\\nCategory: scripting\\nWebsite: https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html\\nAudit: 2020\\n*/\\n\\n/** @type LanguageFn */\\nfunction applescript(hljs) {\\n  const regex = hljs.regex;\\n  const STRING = hljs.inherit(\\n    hljs.QUOTE_STRING_MODE, { illegal: null });\\n  const PARAMS = {\\n    className: 'params',\\n    begin: /\\\\(/,\\n    end: /\\\\)/,\\n    contains: [\\n      'self',\\n      hljs.C_NUMBER_MODE,\\n      STRING\\n    ]\\n  };\\n  const COMMENT_MODE_1 = hljs.COMMENT(/--/, /$/);\\n  const COMMENT_MODE_2 = hljs.COMMENT(\\n    /\\\\(\\\\*/,\\n    /\\\\*\\\\)/,\\n    { contains: [\\n      'self', // allow nesting\\n      COMMENT_MODE_1\\n    ] }\\n  );\\n  const COMMENTS = [\\n    COMMENT_MODE_1,\\n    COMMENT_MODE_2,\\n    hljs.HASH_COMMENT_MODE\\n  ];\\n\\n  const KEYWORD_PATTERNS = [\\n    /apart from/,\\n    /aside from/,\\n    /instead of/,\\n    /out of/,\\n    /greater than/,\\n    /isn't|(doesn't|does not) (equal|come before|come after|contain)/,\\n    /(greater|less) than( or equal)?/,\\n    /(starts?|ends|begins?) with/,\\n    /contained by/,\\n    /comes (before|after)/,\\n    /a (ref|reference)/,\\n    /POSIX (file|path)/,\\n    /(date|time) string/,\\n    /quoted form/\\n  ];\\n\\n  const BUILT_IN_PATTERNS = [\\n    /clipboard info/,\\n    /the clipboard/,\\n    /info for/,\\n    /list (disks|folder)/,\\n    /mount volume/,\\n    /path to/,\\n    /(close|open for) access/,\\n    /(get|set) eof/,\\n    /current date/,\\n    /do shell script/,\\n    /get volume settings/,\\n    /random number/,\\n    /set volume/,\\n    /system attribute/,\\n    /system info/,\\n    /time to GMT/,\\n    /(load|run|store) script/,\\n    /scripting components/,\\n    /ASCII (character|number)/,\\n    /localized string/,\\n    /choose (application|color|file|file name|folder|from list|remote application|URL)/,\\n    /display (alert|dialog)/\\n  ];\\n\\n  return {\\n    name: 'AppleScript',\\n    aliases: [ 'osascript' ],\\n    keywords: {\\n      keyword:\\n        'about above after against and around as at back before beginning '\\n        + 'behind below beneath beside between but by considering '\\n        + 'contain contains continue copy div does eighth else end equal '\\n        + 'equals error every exit fifth first for fourth from front '\\n        + 'get given global if ignoring in into is it its last local me '\\n        + 'middle mod my ninth not of on onto or over prop property put ref '\\n        + 'reference repeat returning script second set seventh since '\\n        + 'sixth some tell tenth that the|0 then third through thru '\\n        + 'timeout times to transaction try until where while whose with '\\n        + 'without',\\n      literal:\\n        'AppleScript false linefeed return pi quote result space tab true',\\n      built_in:\\n        'alias application boolean class constant date file integer list '\\n        + 'number real record string text '\\n        + 'activate beep count delay launch log offset read round '\\n        + 'run say summarize write '\\n        + 'character characters contents day frontmost id item length '\\n        + 'month name|0 paragraph paragraphs rest reverse running time version '\\n        + 'weekday word words year'\\n    },\\n    contains: [\\n      STRING,\\n      hljs.C_NUMBER_MODE,\\n      {\\n        className: 'built_in',\\n        begin: regex.concat(\\n          /\\\\b/,\\n          regex.either(...BUILT_IN_PATTERNS),\\n          /\\\\b/\\n        )\\n      },\\n      {\\n        className: 'built_in',\\n        begin: /^\\\\s*return\\\\b/\\n      },\\n      {\\n        className: 'literal',\\n        begin:\\n          /\\\\b(text item delimiters|current application|missing value)\\\\b/\\n      },\\n      {\\n        className: 'keyword',\\n        begin: regex.concat(\\n          /\\\\b/,\\n          regex.either(...KEYWORD_PATTERNS),\\n          /\\\\b/\\n        )\\n      },\\n      {\\n        beginKeywords: 'on',\\n        illegal: /[${=;\\\\n]/,\\n        contains: [\\n          hljs.UNDERSCORE_TITLE_MODE,\\n          PARAMS\\n        ]\\n      },\\n      ...COMMENTS\\n    ],\\n    illegal: /\\\\/\\\\/|->|=>|\\\\[\\\\[/\\n  };\\n}\\n\\nmodule.exports = applescript;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/applescript.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/arcade.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/arcade.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\n Language: ArcGIS Arcade\\n Category: scripting\\n Author: John Foster <jfoster@esri.com>\\n Website: https://developers.arcgis.com/arcade/\\n Description: ArcGIS Arcade is an expression language used in many Esri ArcGIS products such as Pro, Online, Server, Runtime, JavaScript, and Python\\n*/\\n\\n/** @type LanguageFn */\\nfunction arcade(hljs) {\\n  const IDENT_RE = '[A-Za-z_][0-9A-Za-z_]*';\\n  const KEYWORDS = {\\n    keyword: [\\n      \\\"if\\\",\\n      \\\"for\\\",\\n      \\\"while\\\",\\n      \\\"var\\\",\\n      \\\"new\\\",\\n      \\\"function\\\",\\n      \\\"do\\\",\\n      \\\"return\\\",\\n      \\\"void\\\",\\n      \\\"else\\\",\\n      \\\"break\\\"\\n    ],\\n    literal: [\\n      \\\"BackSlash\\\",\\n      \\\"DoubleQuote\\\",\\n      \\\"false\\\",\\n      \\\"ForwardSlash\\\",\\n      \\\"Infinity\\\",\\n      \\\"NaN\\\",\\n      \\\"NewLine\\\",\\n      \\\"null\\\",\\n      \\\"PI\\\",\\n      \\\"SingleQuote\\\",\\n      \\\"Tab\\\",\\n      \\\"TextFormatting\\\",\\n      \\\"true\\\",\\n      \\\"undefined\\\"\\n    ],\\n    built_in: [\\n      \\\"Abs\\\",\\n      \\\"Acos\\\",\\n      \\\"All\\\",\\n      \\\"Angle\\\",\\n      \\\"Any\\\",\\n      \\\"Area\\\",\\n      \\\"AreaGeodetic\\\",\\n      \\\"Array\\\",\\n      \\\"Asin\\\",\\n      \\\"Atan\\\",\\n      \\\"Atan2\\\",\\n      \\\"Attachments\\\",\\n      \\\"Average\\\",\\n      \\\"Back\\\",\\n      \\\"Bearing\\\",\\n      \\\"Boolean\\\",\\n      \\\"Buffer\\\",\\n      \\\"BufferGeodetic\\\",\\n      \\\"Ceil\\\",\\n      \\\"Centroid\\\",\\n      \\\"Clip\\\",\\n      \\\"Concatenate\\\",\\n      \\\"Console\\\",\\n      \\\"Constrain\\\",\\n      \\\"Contains\\\",\\n      \\\"ConvertDirection\\\",\\n      \\\"Cos\\\",\\n      \\\"Count\\\",\\n      \\\"Crosses\\\",\\n      \\\"Cut\\\",\\n      \\\"Date\\\",\\n      \\\"DateAdd\\\",\\n      \\\"DateDiff\\\",\\n      \\\"Day\\\",\\n      \\\"Decode\\\",\\n      \\\"DefaultValue\\\",\\n      \\\"Densify\\\",\\n      \\\"DensifyGeodetic\\\",\\n      \\\"Dictionary\\\",\\n      \\\"Difference\\\",\\n      \\\"Disjoint\\\",\\n      \\\"Distance\\\",\\n      \\\"DistanceGeodetic\\\",\\n      \\\"Distinct\\\",\\n      \\\"Domain\\\",\\n      \\\"DomainCode\\\",\\n      \\\"DomainName\\\",\\n      \\\"EnvelopeIntersects\\\",\\n      \\\"Equals\\\",\\n      \\\"Erase\\\",\\n      \\\"Exp\\\",\\n      \\\"Expects\\\",\\n      \\\"Extent\\\",\\n      \\\"Feature\\\",\\n      \\\"FeatureSet\\\",\\n      \\\"FeatureSetByAssociation\\\",\\n      \\\"FeatureSetById\\\",\\n      \\\"FeatureSetByName\\\",\\n      \\\"FeatureSetByPortalItem\\\",\\n      \\\"FeatureSetByRelationshipName\\\",\\n      \\\"Filter\\\",\\n      \\\"Find\\\",\\n      \\\"First\\\",\\n      \\\"Floor\\\",\\n      \\\"FromCharCode\\\",\\n      \\\"FromCodePoint\\\",\\n      \\\"FromJSON\\\",\\n      \\\"GdbVersion\\\",\\n      \\\"Generalize\\\",\\n      \\\"Geometry\\\",\\n      \\\"GetFeatureSet\\\",\\n      \\\"GetUser\\\",\\n      \\\"GroupBy\\\",\\n      \\\"Guid\\\",\\n      \\\"Hash\\\",\\n      \\\"HasKey\\\",\\n      \\\"Hour\\\",\\n      \\\"IIf\\\",\\n      \\\"Includes\\\",\\n      \\\"IndexOf\\\",\\n      \\\"Insert\\\",\\n      \\\"Intersection\\\",\\n      \\\"Intersects\\\",\\n      \\\"IsEmpty\\\",\\n      \\\"IsNan\\\",\\n      \\\"ISOMonth\\\",\\n      \\\"ISOWeek\\\",\\n      \\\"ISOWeekday\\\",\\n      \\\"ISOYear\\\",\\n      \\\"IsSelfIntersecting\\\",\\n      \\\"IsSimple\\\",\\n      \\\"Left|0\\\",\\n      \\\"Length\\\",\\n      \\\"Length3D\\\",\\n      \\\"LengthGeodetic\\\",\\n      \\\"Log\\\",\\n      \\\"Lower\\\",\\n      \\\"Map\\\",\\n      \\\"Max\\\",\\n      \\\"Mean\\\",\\n      \\\"Mid\\\",\\n      \\\"Millisecond\\\",\\n      \\\"Min\\\",\\n      \\\"Minute\\\",\\n      \\\"Month\\\",\\n      \\\"MultiPartToSinglePart\\\",\\n      \\\"Multipoint\\\",\\n      \\\"NextSequenceValue\\\",\\n      \\\"None\\\",\\n      \\\"Now\\\",\\n      \\\"Number\\\",\\n      \\\"Offset|0\\\",\\n      \\\"OrderBy\\\",\\n      \\\"Overlaps\\\",\\n      \\\"Point\\\",\\n      \\\"Polygon\\\",\\n      \\\"Polyline\\\",\\n      \\\"Pop\\\",\\n      \\\"Portal\\\",\\n      \\\"Pow\\\",\\n      \\\"Proper\\\",\\n      \\\"Push\\\",\\n      \\\"Random\\\",\\n      \\\"Reduce\\\",\\n      \\\"Relate\\\",\\n      \\\"Replace\\\",\\n      \\\"Resize\\\",\\n      \\\"Reverse\\\",\\n      \\\"Right|0\\\",\\n      \\\"RingIsClockwise\\\",\\n      \\\"Rotate\\\",\\n      \\\"Round\\\",\\n      \\\"Schema\\\",\\n      \\\"Second\\\",\\n      \\\"SetGeometry\\\",\\n      \\\"Simplify\\\",\\n      \\\"Sin\\\",\\n      \\\"Slice\\\",\\n      \\\"Sort\\\",\\n      \\\"Splice\\\",\\n      \\\"Split\\\",\\n      \\\"Sqrt\\\",\\n      \\\"Stdev\\\",\\n      \\\"SubtypeCode\\\",\\n      \\\"SubtypeName\\\",\\n      \\\"Subtypes\\\",\\n      \\\"Sum\\\",\\n      \\\"SymmetricDifference\\\",\\n      \\\"Tan\\\",\\n      \\\"Text\\\",\\n      \\\"Timestamp\\\",\\n      \\\"ToCharCode\\\",\\n      \\\"ToCodePoint\\\",\\n      \\\"Today\\\",\\n      \\\"ToHex\\\",\\n      \\\"ToLocal\\\",\\n      \\\"Top|0\\\",\\n      \\\"Touches\\\",\\n      \\\"ToUTC\\\",\\n      \\\"TrackAccelerationAt\\\",\\n      \\\"TrackAccelerationWindow\\\",\\n      \\\"TrackCurrentAcceleration\\\",\\n      \\\"TrackCurrentDistance\\\",\\n      \\\"TrackCurrentSpeed\\\",\\n      \\\"TrackCurrentTime\\\",\\n      \\\"TrackDistanceAt\\\",\\n      \\\"TrackDistanceWindow\\\",\\n      \\\"TrackDuration\\\",\\n      \\\"TrackFieldWindow\\\",\\n      \\\"TrackGeometryWindow\\\",\\n      \\\"TrackIndex\\\",\\n      \\\"TrackSpeedAt\\\",\\n      \\\"TrackSpeedWindow\\\",\\n      \\\"TrackStartTime\\\",\\n      \\\"TrackWindow\\\",\\n      \\\"Trim\\\",\\n      \\\"TypeOf\\\",\\n      \\\"Union\\\",\\n      \\\"Upper\\\",\\n      \\\"UrlEncode\\\",\\n      \\\"Variance\\\",\\n      \\\"Week\\\",\\n      \\\"Weekday\\\",\\n      \\\"When\\\",\\n      \\\"Within\\\",\\n      \\\"Year\\\"\\n    ]\\n  };\\n  const SYMBOL = {\\n    className: 'symbol',\\n    begin: '\\\\\\\\$[datastore|feature|layer|map|measure|sourcefeature|sourcelayer|targetfeature|targetlayer|value|view]+'\\n  };\\n  const NUMBER = {\\n    className: 'number',\\n    variants: [\\n      { begin: '\\\\\\\\b(0[bB][01]+)' },\\n      { begin: '\\\\\\\\b(0[oO][0-7]+)' },\\n      { begin: hljs.C_NUMBER_RE }\\n    ],\\n    relevance: 0\\n  };\\n  const SUBST = {\\n    className: 'subst',\\n    begin: '\\\\\\\\$\\\\\\\\{',\\n    end: '\\\\\\\\}',\\n    keywords: KEYWORDS,\\n    contains: [] // defined later\\n  };\\n  const TEMPLATE_STRING = {\\n    className: 'string',\\n    begin: '`',\\n    end: '`',\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      SUBST\\n    ]\\n  };\\n  SUBST.contains = [\\n    hljs.APOS_STRING_MODE,\\n    hljs.QUOTE_STRING_MODE,\\n    TEMPLATE_STRING,\\n    NUMBER,\\n    hljs.REGEXP_MODE\\n  ];\\n  const PARAMS_CONTAINS = SUBST.contains.concat([\\n    hljs.C_BLOCK_COMMENT_MODE,\\n    hljs.C_LINE_COMMENT_MODE\\n  ]);\\n\\n  return {\\n    name: 'ArcGIS Arcade',\\n    case_insensitive: true,\\n    keywords: KEYWORDS,\\n    contains: [\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      TEMPLATE_STRING,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      SYMBOL,\\n      NUMBER,\\n      { // object attr container\\n        begin: /[{,]\\\\s*/,\\n        relevance: 0,\\n        contains: [\\n          {\\n            begin: IDENT_RE + '\\\\\\\\s*:',\\n            returnBegin: true,\\n            relevance: 0,\\n            contains: [\\n              {\\n                className: 'attr',\\n                begin: IDENT_RE,\\n                relevance: 0\\n              }\\n            ]\\n          }\\n        ]\\n      },\\n      { // \\\"value\\\" container\\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\\\\\b(return)\\\\\\\\b)\\\\\\\\s*',\\n        keywords: 'return',\\n        contains: [\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE,\\n          hljs.REGEXP_MODE,\\n          {\\n            className: 'function',\\n            begin: '(\\\\\\\\(.*?\\\\\\\\)|' + IDENT_RE + ')\\\\\\\\s*=>',\\n            returnBegin: true,\\n            end: '\\\\\\\\s*=>',\\n            contains: [\\n              {\\n                className: 'params',\\n                variants: [\\n                  { begin: IDENT_RE },\\n                  { begin: /\\\\(\\\\s*\\\\)/ },\\n                  {\\n                    begin: /\\\\(/,\\n                    end: /\\\\)/,\\n                    excludeBegin: true,\\n                    excludeEnd: true,\\n                    keywords: KEYWORDS,\\n                    contains: PARAMS_CONTAINS\\n                  }\\n                ]\\n              }\\n            ]\\n          }\\n        ],\\n        relevance: 0\\n      },\\n      {\\n        beginKeywords: 'function',\\n        end: /\\\\{/,\\n        excludeEnd: true,\\n        contains: [\\n          hljs.inherit(hljs.TITLE_MODE, {\\n            className: \\\"title.function\\\",\\n            begin: IDENT_RE\\n          }),\\n          {\\n            className: 'params',\\n            begin: /\\\\(/,\\n            end: /\\\\)/,\\n            excludeBegin: true,\\n            excludeEnd: true,\\n            contains: PARAMS_CONTAINS\\n          }\\n        ],\\n        illegal: /\\\\[|%/\\n      },\\n      { begin: /\\\\$[(.]/ }\\n    ],\\n    illegal: /#(?!!)/\\n  };\\n}\\n\\nmodule.exports = arcade;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/arcade.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/arduino.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/arduino.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: C++\\nCategory: common, system\\nWebsite: https://isocpp.org\\n*/\\n\\n/** @type LanguageFn */\\nfunction cPlusPlus(hljs) {\\n  const regex = hljs.regex;\\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\\n  // not include such support nor can we be sure all the grammars depending\\n  // on it would desire this behavior\\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\\\\\\\n/ } ] });\\n  const DECLTYPE_AUTO_RE = 'decltype\\\\\\\\(auto\\\\\\\\)';\\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\\\\\w*::';\\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\\n  const FUNCTION_TYPE_RE = '(?!struct)('\\n    + DECLTYPE_AUTO_RE + '|'\\n    + regex.optional(NAMESPACE_RE)\\n    + '[a-zA-Z_]\\\\\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\\n  + ')';\\n\\n  const CPP_PRIMITIVE_TYPES = {\\n    className: 'type',\\n    begin: '\\\\\\\\b[a-z\\\\\\\\d_]*_t\\\\\\\\b'\\n  };\\n\\n  // https://en.cppreference.com/w/cpp/language/escape\\n  // \\\\\\\\ \\\\x \\\\xFF \\\\u2837 \\\\u00323747 \\\\374\\n  const CHARACTER_ESCAPES = '\\\\\\\\\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\\\\\S)';\\n  const STRINGS = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: '(u8?|U|L)?\\\"',\\n        end: '\\\"',\\n        illegal: '\\\\\\\\n',\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      },\\n      {\\n        begin: '(u8?|U|L)?\\\\'(' + CHARACTER_ESCAPES + '|.)',\\n        end: '\\\\'',\\n        illegal: '.'\\n      },\\n      hljs.END_SAME_AS_BEGIN({\\n        begin: /(?:u8?|U|L)?R\\\"([^()\\\\\\\\ ]{0,16})\\\\(/,\\n        end: /\\\\)([^()\\\\\\\\ ]{0,16})\\\"/\\n      })\\n    ]\\n  };\\n\\n  const NUMBERS = {\\n    className: 'number',\\n    variants: [\\n      { begin: '\\\\\\\\b(0b[01\\\\']+)' },\\n      { begin: '(-?)\\\\\\\\b([\\\\\\\\d\\\\']+(\\\\\\\\.[\\\\\\\\d\\\\']*)?|\\\\\\\\.[\\\\\\\\d\\\\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },\\n      { begin: '(-?)(\\\\\\\\b0[xX][a-fA-F0-9\\\\']+|(\\\\\\\\b[\\\\\\\\d\\\\']+(\\\\\\\\.[\\\\\\\\d\\\\']*)?|\\\\\\\\.[\\\\\\\\d\\\\']+)([eE][-+]?[\\\\\\\\d\\\\']+)?)' }\\n    ],\\n    relevance: 0\\n  };\\n\\n  const PREPROCESSOR = {\\n    className: 'meta',\\n    begin: /#\\\\s*[a-z]+\\\\b/,\\n    end: /$/,\\n    keywords: { keyword:\\n        'if else elif endif define undef warning error line '\\n        + 'pragma _Pragma ifdef ifndef include' },\\n    contains: [\\n      {\\n        begin: /\\\\\\\\\\\\n/,\\n        relevance: 0\\n      },\\n      hljs.inherit(STRINGS, { className: 'string' }),\\n      {\\n        className: 'string',\\n        begin: /<.*?>/\\n      },\\n      C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE\\n    ]\\n  };\\n\\n  const TITLE_MODE = {\\n    className: 'title',\\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\\n    relevance: 0\\n  };\\n\\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\\\\\s*\\\\\\\\(';\\n\\n  // https://en.cppreference.com/w/cpp/keyword\\n  const RESERVED_KEYWORDS = [\\n    'alignas',\\n    'alignof',\\n    'and',\\n    'and_eq',\\n    'asm',\\n    'atomic_cancel',\\n    'atomic_commit',\\n    'atomic_noexcept',\\n    'auto',\\n    'bitand',\\n    'bitor',\\n    'break',\\n    'case',\\n    'catch',\\n    'class',\\n    'co_await',\\n    'co_return',\\n    'co_yield',\\n    'compl',\\n    'concept',\\n    'const_cast|10',\\n    'consteval',\\n    'constexpr',\\n    'constinit',\\n    'continue',\\n    'decltype',\\n    'default',\\n    'delete',\\n    'do',\\n    'dynamic_cast|10',\\n    'else',\\n    'enum',\\n    'explicit',\\n    'export',\\n    'extern',\\n    'false',\\n    'final',\\n    'for',\\n    'friend',\\n    'goto',\\n    'if',\\n    'import',\\n    'inline',\\n    'module',\\n    'mutable',\\n    'namespace',\\n    'new',\\n    'noexcept',\\n    'not',\\n    'not_eq',\\n    'nullptr',\\n    'operator',\\n    'or',\\n    'or_eq',\\n    'override',\\n    'private',\\n    'protected',\\n    'public',\\n    'reflexpr',\\n    'register',\\n    'reinterpret_cast|10',\\n    'requires',\\n    'return',\\n    'sizeof',\\n    'static_assert',\\n    'static_cast|10',\\n    'struct',\\n    'switch',\\n    'synchronized',\\n    'template',\\n    'this',\\n    'thread_local',\\n    'throw',\\n    'transaction_safe',\\n    'transaction_safe_dynamic',\\n    'true',\\n    'try',\\n    'typedef',\\n    'typeid',\\n    'typename',\\n    'union',\\n    'using',\\n    'virtual',\\n    'volatile',\\n    'while',\\n    'xor',\\n    'xor_eq'\\n  ];\\n\\n  // https://en.cppreference.com/w/cpp/keyword\\n  const RESERVED_TYPES = [\\n    'bool',\\n    'char',\\n    'char16_t',\\n    'char32_t',\\n    'char8_t',\\n    'double',\\n    'float',\\n    'int',\\n    'long',\\n    'short',\\n    'void',\\n    'wchar_t',\\n    'unsigned',\\n    'signed',\\n    'const',\\n    'static'\\n  ];\\n\\n  const TYPE_HINTS = [\\n    'any',\\n    'auto_ptr',\\n    'barrier',\\n    'binary_semaphore',\\n    'bitset',\\n    'complex',\\n    'condition_variable',\\n    'condition_variable_any',\\n    'counting_semaphore',\\n    'deque',\\n    'false_type',\\n    'future',\\n    'imaginary',\\n    'initializer_list',\\n    'istringstream',\\n    'jthread',\\n    'latch',\\n    'lock_guard',\\n    'multimap',\\n    'multiset',\\n    'mutex',\\n    'optional',\\n    'ostringstream',\\n    'packaged_task',\\n    'pair',\\n    'promise',\\n    'priority_queue',\\n    'queue',\\n    'recursive_mutex',\\n    'recursive_timed_mutex',\\n    'scoped_lock',\\n    'set',\\n    'shared_future',\\n    'shared_lock',\\n    'shared_mutex',\\n    'shared_timed_mutex',\\n    'shared_ptr',\\n    'stack',\\n    'string_view',\\n    'stringstream',\\n    'timed_mutex',\\n    'thread',\\n    'true_type',\\n    'tuple',\\n    'unique_lock',\\n    'unique_ptr',\\n    'unordered_map',\\n    'unordered_multimap',\\n    'unordered_multiset',\\n    'unordered_set',\\n    'variant',\\n    'vector',\\n    'weak_ptr',\\n    'wstring',\\n    'wstring_view'\\n  ];\\n\\n  const FUNCTION_HINTS = [\\n    'abort',\\n    'abs',\\n    'acos',\\n    'apply',\\n    'as_const',\\n    'asin',\\n    'atan',\\n    'atan2',\\n    'calloc',\\n    'ceil',\\n    'cerr',\\n    'cin',\\n    'clog',\\n    'cos',\\n    'cosh',\\n    'cout',\\n    'declval',\\n    'endl',\\n    'exchange',\\n    'exit',\\n    'exp',\\n    'fabs',\\n    'floor',\\n    'fmod',\\n    'forward',\\n    'fprintf',\\n    'fputs',\\n    'free',\\n    'frexp',\\n    'fscanf',\\n    'future',\\n    'invoke',\\n    'isalnum',\\n    'isalpha',\\n    'iscntrl',\\n    'isdigit',\\n    'isgraph',\\n    'islower',\\n    'isprint',\\n    'ispunct',\\n    'isspace',\\n    'isupper',\\n    'isxdigit',\\n    'labs',\\n    'launder',\\n    'ldexp',\\n    'log',\\n    'log10',\\n    'make_pair',\\n    'make_shared',\\n    'make_shared_for_overwrite',\\n    'make_tuple',\\n    'make_unique',\\n    'malloc',\\n    'memchr',\\n    'memcmp',\\n    'memcpy',\\n    'memset',\\n    'modf',\\n    'move',\\n    'pow',\\n    'printf',\\n    'putchar',\\n    'puts',\\n    'realloc',\\n    'scanf',\\n    'sin',\\n    'sinh',\\n    'snprintf',\\n    'sprintf',\\n    'sqrt',\\n    'sscanf',\\n    'std',\\n    'stderr',\\n    'stdin',\\n    'stdout',\\n    'strcat',\\n    'strchr',\\n    'strcmp',\\n    'strcpy',\\n    'strcspn',\\n    'strlen',\\n    'strncat',\\n    'strncmp',\\n    'strncpy',\\n    'strpbrk',\\n    'strrchr',\\n    'strspn',\\n    'strstr',\\n    'swap',\\n    'tan',\\n    'tanh',\\n    'terminate',\\n    'to_underlying',\\n    'tolower',\\n    'toupper',\\n    'vfprintf',\\n    'visit',\\n    'vprintf',\\n    'vsprintf'\\n  ];\\n\\n  const LITERALS = [\\n    'NULL',\\n    'false',\\n    'nullopt',\\n    'nullptr',\\n    'true'\\n  ];\\n\\n  // https://en.cppreference.com/w/cpp/keyword\\n  const BUILT_IN = [ '_Pragma' ];\\n\\n  const CPP_KEYWORDS = {\\n    type: RESERVED_TYPES,\\n    keyword: RESERVED_KEYWORDS,\\n    literal: LITERALS,\\n    built_in: BUILT_IN,\\n    _type_hints: TYPE_HINTS\\n  };\\n\\n  const FUNCTION_DISPATCH = {\\n    className: 'function.dispatch',\\n    relevance: 0,\\n    keywords: {\\n      // Only for relevance, not highlighting.\\n      _hint: FUNCTION_HINTS },\\n    begin: regex.concat(\\n      /\\\\b/,\\n      /(?!decltype)/,\\n      /(?!if)/,\\n      /(?!for)/,\\n      /(?!switch)/,\\n      /(?!while)/,\\n      hljs.IDENT_RE,\\n      regex.lookahead(/(<[^<>]+>|)\\\\s*\\\\(/))\\n  };\\n\\n  const EXPRESSION_CONTAINS = [\\n    FUNCTION_DISPATCH,\\n    PREPROCESSOR,\\n    CPP_PRIMITIVE_TYPES,\\n    C_LINE_COMMENT_MODE,\\n    hljs.C_BLOCK_COMMENT_MODE,\\n    NUMBERS,\\n    STRINGS\\n  ];\\n\\n  const EXPRESSION_CONTEXT = {\\n    // This mode covers expression context where we can't expect a function\\n    // definition and shouldn't highlight anything that looks like one:\\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\\n    variants: [\\n      {\\n        begin: /=/,\\n        end: /;/\\n      },\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/\\n      },\\n      {\\n        beginKeywords: 'new throw return else',\\n        end: /;/\\n      }\\n    ],\\n    keywords: CPP_KEYWORDS,\\n    contains: EXPRESSION_CONTAINS.concat([\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        keywords: CPP_KEYWORDS,\\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\\n        relevance: 0\\n      }\\n    ]),\\n    relevance: 0\\n  };\\n\\n  const FUNCTION_DECLARATION = {\\n    className: 'function',\\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\\\\\*&\\\\\\\\s]+)+' + FUNCTION_TITLE,\\n    returnBegin: true,\\n    end: /[{;=]/,\\n    excludeEnd: true,\\n    keywords: CPP_KEYWORDS,\\n    illegal: /[^\\\\w\\\\s\\\\*&:<>.]/,\\n    contains: [\\n      { // to prevent it from being confused as the function title\\n        begin: DECLTYPE_AUTO_RE,\\n        keywords: CPP_KEYWORDS,\\n        relevance: 0\\n      },\\n      {\\n        begin: FUNCTION_TITLE,\\n        returnBegin: true,\\n        contains: [ TITLE_MODE ],\\n        relevance: 0\\n      },\\n      // needed because we do not have look-behind on the below rule\\n      // to prevent it from grabbing the final : in a :: pair\\n      {\\n        begin: /::/,\\n        relevance: 0\\n      },\\n      // initializers\\n      {\\n        begin: /:/,\\n        endsWithParent: true,\\n        contains: [\\n          STRINGS,\\n          NUMBERS\\n        ]\\n      },\\n      // allow for multiple declarations, e.g.:\\n      // extern void f(int), g(char);\\n      {\\n        relevance: 0,\\n        match: /,/\\n      },\\n      {\\n        className: 'params',\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        keywords: CPP_KEYWORDS,\\n        relevance: 0,\\n        contains: [\\n          C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE,\\n          STRINGS,\\n          NUMBERS,\\n          CPP_PRIMITIVE_TYPES,\\n          // Count matching parentheses.\\n          {\\n            begin: /\\\\(/,\\n            end: /\\\\)/,\\n            keywords: CPP_KEYWORDS,\\n            relevance: 0,\\n            contains: [\\n              'self',\\n              C_LINE_COMMENT_MODE,\\n              hljs.C_BLOCK_COMMENT_MODE,\\n              STRINGS,\\n              NUMBERS,\\n              CPP_PRIMITIVE_TYPES\\n            ]\\n          }\\n        ]\\n      },\\n      CPP_PRIMITIVE_TYPES,\\n      C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      PREPROCESSOR\\n    ]\\n  };\\n\\n  return {\\n    name: 'C++',\\n    aliases: [\\n      'cc',\\n      'c++',\\n      'h++',\\n      'hpp',\\n      'hh',\\n      'hxx',\\n      'cxx'\\n    ],\\n    keywords: CPP_KEYWORDS,\\n    illegal: '</',\\n    classNameAliases: { 'function.dispatch': 'built_in' },\\n    contains: [].concat(\\n      EXPRESSION_CONTEXT,\\n      FUNCTION_DECLARATION,\\n      FUNCTION_DISPATCH,\\n      EXPRESSION_CONTAINS,\\n      [\\n        PREPROCESSOR,\\n        { // containers: ie, `vector <int> rooms (9);`\\n          begin: '\\\\\\\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\\\\\\\s*<(?!<)',\\n          end: '>',\\n          keywords: CPP_KEYWORDS,\\n          contains: [\\n            'self',\\n            CPP_PRIMITIVE_TYPES\\n          ]\\n        },\\n        {\\n          begin: hljs.IDENT_RE + '::',\\n          keywords: CPP_KEYWORDS\\n        },\\n        {\\n          match: [\\n            // extra complexity to deal with `enum class` and `enum struct`\\n            /\\\\b(?:enum(?:\\\\s+(?:class|struct))?|class|struct|union)/,\\n            /\\\\s+/,\\n            /\\\\w+/\\n          ],\\n          className: {\\n            1: 'keyword',\\n            3: 'title.class'\\n          }\\n        }\\n      ])\\n  };\\n}\\n\\n/*\\nLanguage: Arduino\\nAuthor: Stefania Mellai <s.mellai@arduino.cc>\\nDescription: The Arduino® Language is a superset of C++. This rules are designed to highlight the Arduino® source code. For info about language see http://www.arduino.cc.\\nWebsite: https://www.arduino.cc\\n*/\\n\\n/** @type LanguageFn */\\nfunction arduino(hljs) {\\n  const ARDUINO_KW = {\\n    type: [\\n      \\\"boolean\\\",\\n      \\\"byte\\\",\\n      \\\"word\\\",\\n      \\\"String\\\"\\n    ],\\n    built_in: [\\n      \\\"KeyboardController\\\",\\n      \\\"MouseController\\\",\\n      \\\"SoftwareSerial\\\",\\n      \\\"EthernetServer\\\",\\n      \\\"EthernetClient\\\",\\n      \\\"LiquidCrystal\\\",\\n      \\\"RobotControl\\\",\\n      \\\"GSMVoiceCall\\\",\\n      \\\"EthernetUDP\\\",\\n      \\\"EsploraTFT\\\",\\n      \\\"HttpClient\\\",\\n      \\\"RobotMotor\\\",\\n      \\\"WiFiClient\\\",\\n      \\\"GSMScanner\\\",\\n      \\\"FileSystem\\\",\\n      \\\"Scheduler\\\",\\n      \\\"GSMServer\\\",\\n      \\\"YunClient\\\",\\n      \\\"YunServer\\\",\\n      \\\"IPAddress\\\",\\n      \\\"GSMClient\\\",\\n      \\\"GSMModem\\\",\\n      \\\"Keyboard\\\",\\n      \\\"Ethernet\\\",\\n      \\\"Console\\\",\\n      \\\"GSMBand\\\",\\n      \\\"Esplora\\\",\\n      \\\"Stepper\\\",\\n      \\\"Process\\\",\\n      \\\"WiFiUDP\\\",\\n      \\\"GSM_SMS\\\",\\n      \\\"Mailbox\\\",\\n      \\\"USBHost\\\",\\n      \\\"Firmata\\\",\\n      \\\"PImage\\\",\\n      \\\"Client\\\",\\n      \\\"Server\\\",\\n      \\\"GSMPIN\\\",\\n      \\\"FileIO\\\",\\n      \\\"Bridge\\\",\\n      \\\"Serial\\\",\\n      \\\"EEPROM\\\",\\n      \\\"Stream\\\",\\n      \\\"Mouse\\\",\\n      \\\"Audio\\\",\\n      \\\"Servo\\\",\\n      \\\"File\\\",\\n      \\\"Task\\\",\\n      \\\"GPRS\\\",\\n      \\\"WiFi\\\",\\n      \\\"Wire\\\",\\n      \\\"TFT\\\",\\n      \\\"GSM\\\",\\n      \\\"SPI\\\",\\n      \\\"SD\\\"\\n    ],\\n    _hints: [\\n      \\\"setup\\\",\\n      \\\"loop\\\",\\n      \\\"runShellCommandAsynchronously\\\",\\n      \\\"analogWriteResolution\\\",\\n      \\\"retrieveCallingNumber\\\",\\n      \\\"printFirmwareVersion\\\",\\n      \\\"analogReadResolution\\\",\\n      \\\"sendDigitalPortPair\\\",\\n      \\\"noListenOnLocalhost\\\",\\n      \\\"readJoystickButton\\\",\\n      \\\"setFirmwareVersion\\\",\\n      \\\"readJoystickSwitch\\\",\\n      \\\"scrollDisplayRight\\\",\\n      \\\"getVoiceCallStatus\\\",\\n      \\\"scrollDisplayLeft\\\",\\n      \\\"writeMicroseconds\\\",\\n      \\\"delayMicroseconds\\\",\\n      \\\"beginTransmission\\\",\\n      \\\"getSignalStrength\\\",\\n      \\\"runAsynchronously\\\",\\n      \\\"getAsynchronously\\\",\\n      \\\"listenOnLocalhost\\\",\\n      \\\"getCurrentCarrier\\\",\\n      \\\"readAccelerometer\\\",\\n      \\\"messageAvailable\\\",\\n      \\\"sendDigitalPorts\\\",\\n      \\\"lineFollowConfig\\\",\\n      \\\"countryNameWrite\\\",\\n      \\\"runShellCommand\\\",\\n      \\\"readStringUntil\\\",\\n      \\\"rewindDirectory\\\",\\n      \\\"readTemperature\\\",\\n      \\\"setClockDivider\\\",\\n      \\\"readLightSensor\\\",\\n      \\\"endTransmission\\\",\\n      \\\"analogReference\\\",\\n      \\\"detachInterrupt\\\",\\n      \\\"countryNameRead\\\",\\n      \\\"attachInterrupt\\\",\\n      \\\"encryptionType\\\",\\n      \\\"readBytesUntil\\\",\\n      \\\"robotNameWrite\\\",\\n      \\\"readMicrophone\\\",\\n      \\\"robotNameRead\\\",\\n      \\\"cityNameWrite\\\",\\n      \\\"userNameWrite\\\",\\n      \\\"readJoystickY\\\",\\n      \\\"readJoystickX\\\",\\n      \\\"mouseReleased\\\",\\n      \\\"openNextFile\\\",\\n      \\\"scanNetworks\\\",\\n      \\\"noInterrupts\\\",\\n      \\\"digitalWrite\\\",\\n      \\\"beginSpeaker\\\",\\n      \\\"mousePressed\\\",\\n      \\\"isActionDone\\\",\\n      \\\"mouseDragged\\\",\\n      \\\"displayLogos\\\",\\n      \\\"noAutoscroll\\\",\\n      \\\"addParameter\\\",\\n      \\\"remoteNumber\\\",\\n      \\\"getModifiers\\\",\\n      \\\"keyboardRead\\\",\\n      \\\"userNameRead\\\",\\n      \\\"waitContinue\\\",\\n      \\\"processInput\\\",\\n      \\\"parseCommand\\\",\\n      \\\"printVersion\\\",\\n      \\\"readNetworks\\\",\\n      \\\"writeMessage\\\",\\n      \\\"blinkVersion\\\",\\n      \\\"cityNameRead\\\",\\n      \\\"readMessage\\\",\\n      \\\"setDataMode\\\",\\n      \\\"parsePacket\\\",\\n      \\\"isListening\\\",\\n      \\\"setBitOrder\\\",\\n      \\\"beginPacket\\\",\\n      \\\"isDirectory\\\",\\n      \\\"motorsWrite\\\",\\n      \\\"drawCompass\\\",\\n      \\\"digitalRead\\\",\\n      \\\"clearScreen\\\",\\n      \\\"serialEvent\\\",\\n      \\\"rightToLeft\\\",\\n      \\\"setTextSize\\\",\\n      \\\"leftToRight\\\",\\n      \\\"requestFrom\\\",\\n      \\\"keyReleased\\\",\\n      \\\"compassRead\\\",\\n      \\\"analogWrite\\\",\\n      \\\"interrupts\\\",\\n      \\\"WiFiServer\\\",\\n      \\\"disconnect\\\",\\n      \\\"playMelody\\\",\\n      \\\"parseFloat\\\",\\n      \\\"autoscroll\\\",\\n      \\\"getPINUsed\\\",\\n      \\\"setPINUsed\\\",\\n      \\\"setTimeout\\\",\\n      \\\"sendAnalog\\\",\\n      \\\"readSlider\\\",\\n      \\\"analogRead\\\",\\n      \\\"beginWrite\\\",\\n      \\\"createChar\\\",\\n      \\\"motorsStop\\\",\\n      \\\"keyPressed\\\",\\n      \\\"tempoWrite\\\",\\n      \\\"readButton\\\",\\n      \\\"subnetMask\\\",\\n      \\\"debugPrint\\\",\\n      \\\"macAddress\\\",\\n      \\\"writeGreen\\\",\\n      \\\"randomSeed\\\",\\n      \\\"attachGPRS\\\",\\n      \\\"readString\\\",\\n      \\\"sendString\\\",\\n      \\\"remotePort\\\",\\n      \\\"releaseAll\\\",\\n      \\\"mouseMoved\\\",\\n      \\\"background\\\",\\n      \\\"getXChange\\\",\\n      \\\"getYChange\\\",\\n      \\\"answerCall\\\",\\n      \\\"getResult\\\",\\n      \\\"voiceCall\\\",\\n      \\\"endPacket\\\",\\n      \\\"constrain\\\",\\n      \\\"getSocket\\\",\\n      \\\"writeJSON\\\",\\n      \\\"getButton\\\",\\n      \\\"available\\\",\\n      \\\"connected\\\",\\n      \\\"findUntil\\\",\\n      \\\"readBytes\\\",\\n      \\\"exitValue\\\",\\n      \\\"readGreen\\\",\\n      \\\"writeBlue\\\",\\n      \\\"startLoop\\\",\\n      \\\"IPAddress\\\",\\n      \\\"isPressed\\\",\\n      \\\"sendSysex\\\",\\n      \\\"pauseMode\\\",\\n      \\\"gatewayIP\\\",\\n      \\\"setCursor\\\",\\n      \\\"getOemKey\\\",\\n      \\\"tuneWrite\\\",\\n      \\\"noDisplay\\\",\\n      \\\"loadImage\\\",\\n      \\\"switchPIN\\\",\\n      \\\"onRequest\\\",\\n      \\\"onReceive\\\",\\n      \\\"changePIN\\\",\\n      \\\"playFile\\\",\\n      \\\"noBuffer\\\",\\n      \\\"parseInt\\\",\\n      \\\"overflow\\\",\\n      \\\"checkPIN\\\",\\n      \\\"knobRead\\\",\\n      \\\"beginTFT\\\",\\n      \\\"bitClear\\\",\\n      \\\"updateIR\\\",\\n      \\\"bitWrite\\\",\\n      \\\"position\\\",\\n      \\\"writeRGB\\\",\\n      \\\"highByte\\\",\\n      \\\"writeRed\\\",\\n      \\\"setSpeed\\\",\\n      \\\"readBlue\\\",\\n      \\\"noStroke\\\",\\n      \\\"remoteIP\\\",\\n      \\\"transfer\\\",\\n      \\\"shutdown\\\",\\n      \\\"hangCall\\\",\\n      \\\"beginSMS\\\",\\n      \\\"endWrite\\\",\\n      \\\"attached\\\",\\n      \\\"maintain\\\",\\n      \\\"noCursor\\\",\\n      \\\"checkReg\\\",\\n      \\\"checkPUK\\\",\\n      \\\"shiftOut\\\",\\n      \\\"isValid\\\",\\n      \\\"shiftIn\\\",\\n      \\\"pulseIn\\\",\\n      \\\"connect\\\",\\n      \\\"println\\\",\\n      \\\"localIP\\\",\\n      \\\"pinMode\\\",\\n      \\\"getIMEI\\\",\\n      \\\"display\\\",\\n      \\\"noBlink\\\",\\n      \\\"process\\\",\\n      \\\"getBand\\\",\\n      \\\"running\\\",\\n      \\\"beginSD\\\",\\n      \\\"drawBMP\\\",\\n      \\\"lowByte\\\",\\n      \\\"setBand\\\",\\n      \\\"release\\\",\\n      \\\"bitRead\\\",\\n      \\\"prepare\\\",\\n      \\\"pointTo\\\",\\n      \\\"readRed\\\",\\n      \\\"setMode\\\",\\n      \\\"noFill\\\",\\n      \\\"remove\\\",\\n      \\\"listen\\\",\\n      \\\"stroke\\\",\\n      \\\"detach\\\",\\n      \\\"attach\\\",\\n      \\\"noTone\\\",\\n      \\\"exists\\\",\\n      \\\"buffer\\\",\\n      \\\"height\\\",\\n      \\\"bitSet\\\",\\n      \\\"circle\\\",\\n      \\\"config\\\",\\n      \\\"cursor\\\",\\n      \\\"random\\\",\\n      \\\"IRread\\\",\\n      \\\"setDNS\\\",\\n      \\\"endSMS\\\",\\n      \\\"getKey\\\",\\n      \\\"micros\\\",\\n      \\\"millis\\\",\\n      \\\"begin\\\",\\n      \\\"print\\\",\\n      \\\"write\\\",\\n      \\\"ready\\\",\\n      \\\"flush\\\",\\n      \\\"width\\\",\\n      \\\"isPIN\\\",\\n      \\\"blink\\\",\\n      \\\"clear\\\",\\n      \\\"press\\\",\\n      \\\"mkdir\\\",\\n      \\\"rmdir\\\",\\n      \\\"close\\\",\\n      \\\"point\\\",\\n      \\\"yield\\\",\\n      \\\"image\\\",\\n      \\\"BSSID\\\",\\n      \\\"click\\\",\\n      \\\"delay\\\",\\n      \\\"read\\\",\\n      \\\"text\\\",\\n      \\\"move\\\",\\n      \\\"peek\\\",\\n      \\\"beep\\\",\\n      \\\"rect\\\",\\n      \\\"line\\\",\\n      \\\"open\\\",\\n      \\\"seek\\\",\\n      \\\"fill\\\",\\n      \\\"size\\\",\\n      \\\"turn\\\",\\n      \\\"stop\\\",\\n      \\\"home\\\",\\n      \\\"find\\\",\\n      \\\"step\\\",\\n      \\\"tone\\\",\\n      \\\"sqrt\\\",\\n      \\\"RSSI\\\",\\n      \\\"SSID\\\",\\n      \\\"end\\\",\\n      \\\"bit\\\",\\n      \\\"tan\\\",\\n      \\\"cos\\\",\\n      \\\"sin\\\",\\n      \\\"pow\\\",\\n      \\\"map\\\",\\n      \\\"abs\\\",\\n      \\\"max\\\",\\n      \\\"min\\\",\\n      \\\"get\\\",\\n      \\\"run\\\",\\n      \\\"put\\\"\\n    ],\\n    literal: [\\n      \\\"DIGITAL_MESSAGE\\\",\\n      \\\"FIRMATA_STRING\\\",\\n      \\\"ANALOG_MESSAGE\\\",\\n      \\\"REPORT_DIGITAL\\\",\\n      \\\"REPORT_ANALOG\\\",\\n      \\\"INPUT_PULLUP\\\",\\n      \\\"SET_PIN_MODE\\\",\\n      \\\"INTERNAL2V56\\\",\\n      \\\"SYSTEM_RESET\\\",\\n      \\\"LED_BUILTIN\\\",\\n      \\\"INTERNAL1V1\\\",\\n      \\\"SYSEX_START\\\",\\n      \\\"INTERNAL\\\",\\n      \\\"EXTERNAL\\\",\\n      \\\"DEFAULT\\\",\\n      \\\"OUTPUT\\\",\\n      \\\"INPUT\\\",\\n      \\\"HIGH\\\",\\n      \\\"LOW\\\"\\n    ]\\n  };\\n\\n  const ARDUINO = cPlusPlus(hljs);\\n\\n  const kws = /** @type {Record<string,any>} */ (ARDUINO.keywords);\\n\\n  kws.type = [\\n    ...kws.type,\\n    ...ARDUINO_KW.type\\n  ];\\n  kws.literal = [\\n    ...kws.literal,\\n    ...ARDUINO_KW.literal\\n  ];\\n  kws.built_in = [\\n    ...kws.built_in,\\n    ...ARDUINO_KW.built_in\\n  ];\\n  kws._hints = ARDUINO_KW._hints;\\n\\n  ARDUINO.name = 'Arduino';\\n  ARDUINO.aliases = [ 'ino' ];\\n  ARDUINO.supersetOf = \\\"cpp\\\";\\n\\n  return ARDUINO;\\n}\\n\\nmodule.exports = arduino;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/arduino.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/armasm.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/armasm.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: ARM Assembly\\nAuthor: Dan Panzarella <alsoelp@gmail.com>\\nDescription: ARM Assembly including Thumb and Thumb2 instructions\\nCategory: assembler\\n*/\\n\\n/** @type LanguageFn */\\nfunction armasm(hljs) {\\n  // local labels: %?[FB]?[AT]?\\\\d{1,2}\\\\w+\\n\\n  const COMMENT = { variants: [\\n    hljs.COMMENT('^[ \\\\\\\\t]*(?=#)', '$', {\\n      relevance: 0,\\n      excludeBegin: true\\n    }),\\n    hljs.COMMENT('[;@]', '$', { relevance: 0 }),\\n    hljs.C_LINE_COMMENT_MODE,\\n    hljs.C_BLOCK_COMMENT_MODE\\n  ] };\\n\\n  return {\\n    name: 'ARM Assembly',\\n    case_insensitive: true,\\n    aliases: [ 'arm' ],\\n    keywords: {\\n      $pattern: '\\\\\\\\.?' + hljs.IDENT_RE,\\n      meta:\\n        // GNU preprocs\\n        '.2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg '\\n        // ARM directives\\n        + 'ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ',\\n      built_in:\\n        'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 ' // standard registers\\n        + 'pc lr sp ip sl sb fp ' // typical regs plus backward compatibility\\n        + 'a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 ' // more regs and fp\\n        + 'p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 ' // coprocessor regs\\n        + 'c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 ' // more coproc\\n        + 'q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 ' // advanced SIMD NEON regs\\n\\n        // program status registers\\n        + 'cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf '\\n        + 'spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf '\\n\\n        // NEON and VFP registers\\n        + 's0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 '\\n        + 's16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 '\\n        + 'd0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 '\\n        + 'd16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 '\\n\\n        + '{PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @'\\n    },\\n    contains: [\\n      {\\n        className: 'keyword',\\n        begin: '\\\\\\\\b(' // mnemonics\\n            + 'adc|'\\n            + '(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|'\\n            + 'and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|'\\n            + 'bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|'\\n            + 'setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|'\\n            + 'ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|'\\n            + 'mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|'\\n            + 'mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|'\\n            + 'mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|'\\n            + 'rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|'\\n            + 'stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|'\\n            + '[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|'\\n            + 'wfe|wfi|yield'\\n        + ')'\\n        + '(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?' // condition codes\\n        + '[sptrx]?' // legal postfixes\\n        + '(?=\\\\\\\\s)' // followed by space\\n      },\\n      COMMENT,\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'string',\\n        begin: '\\\\'',\\n        end: '[^\\\\\\\\\\\\\\\\]\\\\'',\\n        relevance: 0\\n      },\\n      {\\n        className: 'title',\\n        begin: '\\\\\\\\|',\\n        end: '\\\\\\\\|',\\n        illegal: '\\\\\\\\n',\\n        relevance: 0\\n      },\\n      {\\n        className: 'number',\\n        variants: [\\n          { // hex\\n            begin: '[#$=]?0x[0-9a-f]+' },\\n          { // bin\\n            begin: '[#$=]?0b[01]+' },\\n          { // literal\\n            begin: '[#$=]\\\\\\\\d+' },\\n          { // bare number\\n            begin: '\\\\\\\\b\\\\\\\\d+' }\\n        ],\\n        relevance: 0\\n      },\\n      {\\n        className: 'symbol',\\n        variants: [\\n          { // GNU ARM syntax\\n            begin: '^[ \\\\\\\\t]*[a-z_\\\\\\\\.\\\\\\\\$][a-z0-9_\\\\\\\\.\\\\\\\\$]+:' },\\n          { // ARM syntax\\n            begin: '^[a-z_\\\\\\\\.\\\\\\\\$][a-z0-9_\\\\\\\\.\\\\\\\\$]+' },\\n          { // label reference\\n            begin: '[=#]\\\\\\\\w+' }\\n        ],\\n        relevance: 0\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = armasm;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/armasm.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/asciidoc.js\":\n/*!*************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/asciidoc.js ***!\n  \\*************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: AsciiDoc\\nRequires: xml.js\\nAuthor: Dan Allen <dan.j.allen@gmail.com>\\nWebsite: http://asciidoc.org\\nDescription: A semantic, text-based document format that can be exported to HTML, DocBook and other backends.\\nCategory: markup\\n*/\\n\\n/** @type LanguageFn */\\nfunction asciidoc(hljs) {\\n  const regex = hljs.regex;\\n  const HORIZONTAL_RULE = {\\n    begin: '^\\\\'{3,}[ \\\\\\\\t]*$',\\n    relevance: 10\\n  };\\n  const ESCAPED_FORMATTING = [\\n    // escaped constrained formatting marks (i.e., \\\\* \\\\_ or \\\\`)\\n    { begin: /\\\\\\\\[*_`]/ },\\n    // escaped unconstrained formatting marks (i.e., \\\\\\\\** \\\\\\\\__ or \\\\\\\\``)\\n    // must ignore until the next formatting marks\\n    // this rule might not be 100% compliant with Asciidoctor 2.0 but we are entering undefined behavior territory...\\n    { begin: /\\\\\\\\\\\\\\\\\\\\*{2}[^\\\\n]*?\\\\*{2}/ },\\n    { begin: /\\\\\\\\\\\\\\\\_{2}[^\\\\n]*_{2}/ },\\n    { begin: /\\\\\\\\\\\\\\\\`{2}[^\\\\n]*`{2}/ },\\n    // guard: constrained formatting mark may not be preceded by \\\":\\\", \\\";\\\" or\\n    // \\\"}\\\". match these so the constrained rule doesn't see them\\n    { begin: /[:;}][*_`](?![*_`])/ }\\n  ];\\n  const STRONG = [\\n    // inline unconstrained strong (single line)\\n    {\\n      className: 'strong',\\n      begin: /\\\\*{2}([^\\\\n]+?)\\\\*{2}/\\n    },\\n    // inline unconstrained strong (multi-line)\\n    {\\n      className: 'strong',\\n      begin: regex.concat(\\n        /\\\\*\\\\*/,\\n        /((\\\\*(?!\\\\*)|\\\\\\\\[^\\\\n]|[^*\\\\n\\\\\\\\])+\\\\n)+/,\\n        /(\\\\*(?!\\\\*)|\\\\\\\\[^\\\\n]|[^*\\\\n\\\\\\\\])*/,\\n        /\\\\*\\\\*/\\n      ),\\n      relevance: 0\\n    },\\n    // inline constrained strong (single line)\\n    {\\n      className: 'strong',\\n      // must not precede or follow a word character\\n      begin: /\\\\B\\\\*(\\\\S|\\\\S[^\\\\n]*?\\\\S)\\\\*(?!\\\\w)/\\n    },\\n    // inline constrained strong (multi-line)\\n    {\\n      className: 'strong',\\n      // must not precede or follow a word character\\n      begin: /\\\\*[^\\\\s]([^\\\\n]+\\\\n)+([^\\\\n]+)\\\\*/\\n    }\\n  ];\\n  const EMPHASIS = [\\n    // inline unconstrained emphasis (single line)\\n    {\\n      className: 'emphasis',\\n      begin: /_{2}([^\\\\n]+?)_{2}/\\n    },\\n    // inline unconstrained emphasis (multi-line)\\n    {\\n      className: 'emphasis',\\n      begin: regex.concat(\\n        /__/,\\n        /((_(?!_)|\\\\\\\\[^\\\\n]|[^_\\\\n\\\\\\\\])+\\\\n)+/,\\n        /(_(?!_)|\\\\\\\\[^\\\\n]|[^_\\\\n\\\\\\\\])*/,\\n        /__/\\n      ),\\n      relevance: 0\\n    },\\n    // inline constrained emphasis (single line)\\n    {\\n      className: 'emphasis',\\n      // must not precede or follow a word character\\n      begin: /\\\\b_(\\\\S|\\\\S[^\\\\n]*?\\\\S)_(?!\\\\w)/\\n    },\\n    // inline constrained emphasis (multi-line)\\n    {\\n      className: 'emphasis',\\n      // must not precede or follow a word character\\n      begin: /_[^\\\\s]([^\\\\n]+\\\\n)+([^\\\\n]+)_/\\n    },\\n    // inline constrained emphasis using single quote (legacy)\\n    {\\n      className: 'emphasis',\\n      // must not follow a word character or be followed by a single quote or space\\n      begin: '\\\\\\\\B\\\\'(?![\\\\'\\\\\\\\s])',\\n      end: '(\\\\\\\\n{2}|\\\\')',\\n      // allow escaped single quote followed by word char\\n      contains: [\\n        {\\n          begin: '\\\\\\\\\\\\\\\\\\\\'\\\\\\\\w',\\n          relevance: 0\\n        }\\n      ],\\n      relevance: 0\\n    }\\n  ];\\n  const ADMONITION = {\\n    className: 'symbol',\\n    begin: '^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\\\\\\\s+',\\n    relevance: 10\\n  };\\n  const BULLET_LIST = {\\n    className: 'bullet',\\n    begin: '^(\\\\\\\\*+|-+|\\\\\\\\.+|[^\\\\\\\\n]+?::)\\\\\\\\s+'\\n  };\\n\\n  return {\\n    name: 'AsciiDoc',\\n    aliases: [ 'adoc' ],\\n    contains: [\\n      // block comment\\n      hljs.COMMENT(\\n        '^/{4,}\\\\\\\\n',\\n        '\\\\\\\\n/{4,}$',\\n        // can also be done as...\\n        // '^/{4,}$',\\n        // '^/{4,}$',\\n        { relevance: 10 }\\n      ),\\n      // line comment\\n      hljs.COMMENT(\\n        '^//',\\n        '$',\\n        { relevance: 0 }\\n      ),\\n      // title\\n      {\\n        className: 'title',\\n        begin: '^\\\\\\\\.\\\\\\\\w.*$'\\n      },\\n      // example, admonition & sidebar blocks\\n      {\\n        begin: '^[=\\\\\\\\*]{4,}\\\\\\\\n',\\n        end: '\\\\\\\\n^[=\\\\\\\\*]{4,}$',\\n        relevance: 10\\n      },\\n      // headings\\n      {\\n        className: 'section',\\n        relevance: 10,\\n        variants: [\\n          { begin: '^(={1,6})[ \\\\t].+?([ \\\\t]\\\\\\\\1)?$' },\\n          { begin: '^[^\\\\\\\\[\\\\\\\\]\\\\\\\\n]+?\\\\\\\\n[=\\\\\\\\-~\\\\\\\\^\\\\\\\\+]{2,}$' }\\n        ]\\n      },\\n      // document attributes\\n      {\\n        className: 'meta',\\n        begin: '^:.+?:',\\n        end: '\\\\\\\\s',\\n        excludeEnd: true,\\n        relevance: 10\\n      },\\n      // block attributes\\n      {\\n        className: 'meta',\\n        begin: '^\\\\\\\\[.+?\\\\\\\\]$',\\n        relevance: 0\\n      },\\n      // quoteblocks\\n      {\\n        className: 'quote',\\n        begin: '^_{4,}\\\\\\\\n',\\n        end: '\\\\\\\\n_{4,}$',\\n        relevance: 10\\n      },\\n      // listing and literal blocks\\n      {\\n        className: 'code',\\n        begin: '^[\\\\\\\\-\\\\\\\\.]{4,}\\\\\\\\n',\\n        end: '\\\\\\\\n[\\\\\\\\-\\\\\\\\.]{4,}$',\\n        relevance: 10\\n      },\\n      // passthrough blocks\\n      {\\n        begin: '^\\\\\\\\+{4,}\\\\\\\\n',\\n        end: '\\\\\\\\n\\\\\\\\+{4,}$',\\n        contains: [\\n          {\\n            begin: '<',\\n            end: '>',\\n            subLanguage: 'xml',\\n            relevance: 0\\n          }\\n        ],\\n        relevance: 10\\n      },\\n\\n      BULLET_LIST,\\n      ADMONITION,\\n      ...ESCAPED_FORMATTING,\\n      ...STRONG,\\n      ...EMPHASIS,\\n\\n      // inline smart quotes\\n      {\\n        className: 'string',\\n        variants: [\\n          { begin: \\\"``.+?''\\\" },\\n          { begin: \\\"`.+?'\\\" }\\n        ]\\n      },\\n      // inline unconstrained emphasis\\n      {\\n        className: 'code',\\n        begin: /`{2}/,\\n        end: /(\\\\n{2}|`{2})/\\n      },\\n      // inline code snippets (TODO should get same treatment as strong and emphasis)\\n      {\\n        className: 'code',\\n        begin: '(`.+?`|\\\\\\\\+.+?\\\\\\\\+)',\\n        relevance: 0\\n      },\\n      // indented literal block\\n      {\\n        className: 'code',\\n        begin: '^[ \\\\\\\\t]',\\n        end: '$',\\n        relevance: 0\\n      },\\n      HORIZONTAL_RULE,\\n      // images and links\\n      {\\n        begin: '(link:)?(http|https|ftp|file|irc|image:?):\\\\\\\\S+?\\\\\\\\[[^[]*?\\\\\\\\]',\\n        returnBegin: true,\\n        contains: [\\n          {\\n            begin: '(link|image:?):',\\n            relevance: 0\\n          },\\n          {\\n            className: 'link',\\n            begin: '\\\\\\\\w',\\n            end: '[^\\\\\\\\[]+',\\n            relevance: 0\\n          },\\n          {\\n            className: 'string',\\n            begin: '\\\\\\\\[',\\n            end: '\\\\\\\\]',\\n            excludeBegin: true,\\n            excludeEnd: true,\\n            relevance: 0\\n          }\\n        ],\\n        relevance: 10\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = asciidoc;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/asciidoc.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/aspectj.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/aspectj.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: AspectJ\\nAuthor: Hakan Ozler <ozler.hakan@gmail.com>\\nWebsite: https://www.eclipse.org/aspectj/\\nDescription: Syntax Highlighting for the AspectJ Language which is a general-purpose aspect-oriented extension to the Java programming language.\\nAudit: 2020\\n*/\\n\\n/** @type LanguageFn */\\nfunction aspectj(hljs) {\\n  const regex = hljs.regex;\\n  const KEYWORDS = [\\n    \\\"false\\\",\\n    \\\"synchronized\\\",\\n    \\\"int\\\",\\n    \\\"abstract\\\",\\n    \\\"float\\\",\\n    \\\"private\\\",\\n    \\\"char\\\",\\n    \\\"boolean\\\",\\n    \\\"static\\\",\\n    \\\"null\\\",\\n    \\\"if\\\",\\n    \\\"const\\\",\\n    \\\"for\\\",\\n    \\\"true\\\",\\n    \\\"while\\\",\\n    \\\"long\\\",\\n    \\\"throw\\\",\\n    \\\"strictfp\\\",\\n    \\\"finally\\\",\\n    \\\"protected\\\",\\n    \\\"import\\\",\\n    \\\"native\\\",\\n    \\\"final\\\",\\n    \\\"return\\\",\\n    \\\"void\\\",\\n    \\\"enum\\\",\\n    \\\"else\\\",\\n    \\\"extends\\\",\\n    \\\"implements\\\",\\n    \\\"break\\\",\\n    \\\"transient\\\",\\n    \\\"new\\\",\\n    \\\"catch\\\",\\n    \\\"instanceof\\\",\\n    \\\"byte\\\",\\n    \\\"super\\\",\\n    \\\"volatile\\\",\\n    \\\"case\\\",\\n    \\\"assert\\\",\\n    \\\"short\\\",\\n    \\\"package\\\",\\n    \\\"default\\\",\\n    \\\"double\\\",\\n    \\\"public\\\",\\n    \\\"try\\\",\\n    \\\"this\\\",\\n    \\\"switch\\\",\\n    \\\"continue\\\",\\n    \\\"throws\\\",\\n    \\\"privileged\\\",\\n    \\\"aspectOf\\\",\\n    \\\"adviceexecution\\\",\\n    \\\"proceed\\\",\\n    \\\"cflowbelow\\\",\\n    \\\"cflow\\\",\\n    \\\"initialization\\\",\\n    \\\"preinitialization\\\",\\n    \\\"staticinitialization\\\",\\n    \\\"withincode\\\",\\n    \\\"target\\\",\\n    \\\"within\\\",\\n    \\\"execution\\\",\\n    \\\"getWithinTypeName\\\",\\n    \\\"handler\\\",\\n    \\\"thisJoinPoint\\\",\\n    \\\"thisJoinPointStaticPart\\\",\\n    \\\"thisEnclosingJoinPointStaticPart\\\",\\n    \\\"declare\\\",\\n    \\\"parents\\\",\\n    \\\"warning\\\",\\n    \\\"error\\\",\\n    \\\"soft\\\",\\n    \\\"precedence\\\",\\n    \\\"thisAspectInstance\\\"\\n  ];\\n  const SHORTKEYS = [\\n    \\\"get\\\",\\n    \\\"set\\\",\\n    \\\"args\\\",\\n    \\\"call\\\"\\n  ];\\n\\n  return {\\n    name: 'AspectJ',\\n    keywords: KEYWORDS,\\n    illegal: /<\\\\/|#/,\\n    contains: [\\n      hljs.COMMENT(\\n        /\\\\/\\\\*\\\\*/,\\n        /\\\\*\\\\//,\\n        {\\n          relevance: 0,\\n          contains: [\\n            {\\n              // eat up @'s in emails to prevent them to be recognized as doctags\\n              begin: /\\\\w+@/,\\n              relevance: 0\\n            },\\n            {\\n              className: 'doctag',\\n              begin: /@[A-Za-z]+/\\n            }\\n          ]\\n        }\\n      ),\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'class',\\n        beginKeywords: 'aspect',\\n        end: /[{;=]/,\\n        excludeEnd: true,\\n        illegal: /[:;\\\"\\\\[\\\\]]/,\\n        contains: [\\n          { beginKeywords: 'extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton' },\\n          hljs.UNDERSCORE_TITLE_MODE,\\n          {\\n            begin: /\\\\([^\\\\)]*/,\\n            end: /[)]+/,\\n            keywords: KEYWORDS.concat(SHORTKEYS),\\n            excludeEnd: false\\n          }\\n        ]\\n      },\\n      {\\n        className: 'class',\\n        beginKeywords: 'class interface',\\n        end: /[{;=]/,\\n        excludeEnd: true,\\n        relevance: 0,\\n        keywords: 'class interface',\\n        illegal: /[:\\\"\\\\[\\\\]]/,\\n        contains: [\\n          { beginKeywords: 'extends implements' },\\n          hljs.UNDERSCORE_TITLE_MODE\\n        ]\\n      },\\n      {\\n        // AspectJ Constructs\\n        beginKeywords: 'pointcut after before around throwing returning',\\n        end: /[)]/,\\n        excludeEnd: false,\\n        illegal: /[\\\"\\\\[\\\\]]/,\\n        contains: [\\n          {\\n            begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\\\\s*\\\\(/),\\n            returnBegin: true,\\n            contains: [ hljs.UNDERSCORE_TITLE_MODE ]\\n          }\\n        ]\\n      },\\n      {\\n        begin: /[:]/,\\n        returnBegin: true,\\n        end: /[{;]/,\\n        relevance: 0,\\n        excludeEnd: false,\\n        keywords: KEYWORDS,\\n        illegal: /[\\\"\\\\[\\\\]]/,\\n        contains: [\\n          {\\n            begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\\\\s*\\\\(/),\\n            keywords: KEYWORDS.concat(SHORTKEYS),\\n            relevance: 0\\n          },\\n          hljs.QUOTE_STRING_MODE\\n        ]\\n      },\\n      {\\n        // this prevents 'new Name(...), or throw ...' from being recognized as a function definition\\n        beginKeywords: 'new throw',\\n        relevance: 0\\n      },\\n      {\\n        // the function class is a bit different for AspectJ compared to the Java language\\n        className: 'function',\\n        begin: /\\\\w+ +\\\\w+(\\\\.\\\\w+)?\\\\s*\\\\([^\\\\)]*\\\\)\\\\s*((throws)[\\\\w\\\\s,]+)?[\\\\{;]/,\\n        returnBegin: true,\\n        end: /[{;=]/,\\n        keywords: KEYWORDS,\\n        excludeEnd: true,\\n        contains: [\\n          {\\n            begin: regex.concat(hljs.UNDERSCORE_IDENT_RE, /\\\\s*\\\\(/),\\n            returnBegin: true,\\n            relevance: 0,\\n            contains: [ hljs.UNDERSCORE_TITLE_MODE ]\\n          },\\n          {\\n            className: 'params',\\n            begin: /\\\\(/,\\n            end: /\\\\)/,\\n            relevance: 0,\\n            keywords: KEYWORDS,\\n            contains: [\\n              hljs.APOS_STRING_MODE,\\n              hljs.QUOTE_STRING_MODE,\\n              hljs.C_NUMBER_MODE,\\n              hljs.C_BLOCK_COMMENT_MODE\\n            ]\\n          },\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE\\n        ]\\n      },\\n      hljs.C_NUMBER_MODE,\\n      {\\n        // annotation is also used in this language\\n        className: 'meta',\\n        begin: /@[A-Za-z]+/\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = aspectj;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/aspectj.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/autohotkey.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/autohotkey.js ***!\n  \\***************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: AutoHotkey\\nAuthor: Seongwon Lee <dlimpid@gmail.com>\\nDescription: AutoHotkey language definition\\nCategory: scripting\\n*/\\n\\n/** @type LanguageFn */\\nfunction autohotkey(hljs) {\\n  const BACKTICK_ESCAPE = { begin: '`[\\\\\\\\s\\\\\\\\S]' };\\n\\n  return {\\n    name: 'AutoHotkey',\\n    case_insensitive: true,\\n    aliases: [ 'ahk' ],\\n    keywords: {\\n      keyword: 'Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group',\\n      literal: 'true false NOT AND OR',\\n      built_in: 'ComSpec Clipboard ClipboardAll ErrorLevel'\\n    },\\n    contains: [\\n      BACKTICK_ESCAPE,\\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { contains: [ BACKTICK_ESCAPE ] }),\\n      hljs.COMMENT(';', '$', { relevance: 0 }),\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      {\\n        className: 'number',\\n        begin: hljs.NUMBER_RE,\\n        relevance: 0\\n      },\\n      {\\n        // subst would be the most accurate however fails the point of\\n        // highlighting. variable is comparably the most accurate that actually\\n        // has some effect\\n        className: 'variable',\\n        begin: '%[a-zA-Z0-9#_$@]+%'\\n      },\\n      {\\n        className: 'built_in',\\n        begin: '^\\\\\\\\s*\\\\\\\\w+\\\\\\\\s*(,|%)'\\n        // I don't really know if this is totally relevant\\n      },\\n      {\\n        // symbol would be most accurate however is highlighted just like\\n        // built_in and that makes up a lot of AutoHotkey code meaning that it\\n        // would fail to highlight anything\\n        className: 'title',\\n        variants: [\\n          { begin: '^[^\\\\\\\\n\\\";]+::(?!=)' },\\n          {\\n            begin: '^[^\\\\\\\\n\\\";]+:(?!=)',\\n            // zero relevance as it catches a lot of things\\n            // followed by a single ':' in many languages\\n            relevance: 0\\n          }\\n        ]\\n      },\\n      {\\n        className: 'meta',\\n        begin: '^\\\\\\\\s*#\\\\\\\\w+',\\n        end: '$',\\n        relevance: 0\\n      },\\n      {\\n        className: 'built_in',\\n        begin: 'A_[a-zA-Z0-9]+'\\n      },\\n      {\\n        // consecutive commas, not for highlighting but just for relevance\\n        begin: ',\\\\\\\\s*,' }\\n    ]\\n  };\\n}\\n\\nmodule.exports = autohotkey;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/autohotkey.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/autoit.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/autoit.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: AutoIt\\nAuthor: Manh Tuan <junookyo@gmail.com>\\nDescription: AutoIt language definition\\nCategory: scripting\\n*/\\n\\n/** @type LanguageFn */\\nfunction autoit(hljs) {\\n  const KEYWORDS = 'ByRef Case Const ContinueCase ContinueLoop '\\n        + 'Dim Do Else ElseIf EndFunc EndIf EndSelect '\\n        + 'EndSwitch EndWith Enum Exit ExitLoop For Func '\\n        + 'Global If In Local Next ReDim Return Select Static '\\n        + 'Step Switch Then To Until Volatile WEnd While With';\\n\\n  const DIRECTIVES = [\\n    \\\"EndRegion\\\",\\n    \\\"forcedef\\\",\\n    \\\"forceref\\\",\\n    \\\"ignorefunc\\\",\\n    \\\"include\\\",\\n    \\\"include-once\\\",\\n    \\\"NoTrayIcon\\\",\\n    \\\"OnAutoItStartRegister\\\",\\n    \\\"pragma\\\",\\n    \\\"Region\\\",\\n    \\\"RequireAdmin\\\",\\n    \\\"Tidy_Off\\\",\\n    \\\"Tidy_On\\\",\\n    \\\"Tidy_Parameters\\\"\\n  ];\\n\\n  const LITERAL = 'True False And Null Not Or Default';\\n\\n  const BUILT_IN =\\n          'Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp StringRegExpReplace StringReplace StringReverse StringRight StringSplit StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown, UDPShutdown TCPStartup, UDPStartup TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv UDPSend VarGetType WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait WinWaitActive WinWaitClose WinWaitNotActive';\\n\\n  const COMMENT = { variants: [\\n    hljs.COMMENT(';', '$', { relevance: 0 }),\\n    hljs.COMMENT('#cs', '#ce'),\\n    hljs.COMMENT('#comments-start', '#comments-end')\\n  ] };\\n\\n  const VARIABLE = { begin: '\\\\\\\\$[A-z0-9_]+' };\\n\\n  const STRING = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: /\\\"/,\\n        end: /\\\"/,\\n        contains: [\\n          {\\n            begin: /\\\"\\\"/,\\n            relevance: 0\\n          }\\n        ]\\n      },\\n      {\\n        begin: /'/,\\n        end: /'/,\\n        contains: [\\n          {\\n            begin: /''/,\\n            relevance: 0\\n          }\\n        ]\\n      }\\n    ]\\n  };\\n\\n  const NUMBER = { variants: [\\n    hljs.BINARY_NUMBER_MODE,\\n    hljs.C_NUMBER_MODE\\n  ] };\\n\\n  const PREPROCESSOR = {\\n    className: 'meta',\\n    begin: '#',\\n    end: '$',\\n    keywords: { keyword: DIRECTIVES },\\n    contains: [\\n      {\\n        begin: /\\\\\\\\\\\\n/,\\n        relevance: 0\\n      },\\n      {\\n        beginKeywords: 'include',\\n        keywords: { keyword: 'include' },\\n        end: '$',\\n        contains: [\\n          STRING,\\n          {\\n            className: 'string',\\n            variants: [\\n              {\\n                begin: '<',\\n                end: '>'\\n              },\\n              {\\n                begin: /\\\"/,\\n                end: /\\\"/,\\n                contains: [\\n                  {\\n                    begin: /\\\"\\\"/,\\n                    relevance: 0\\n                  }\\n                ]\\n              },\\n              {\\n                begin: /'/,\\n                end: /'/,\\n                contains: [\\n                  {\\n                    begin: /''/,\\n                    relevance: 0\\n                  }\\n                ]\\n              }\\n            ]\\n          }\\n        ]\\n      },\\n      STRING,\\n      COMMENT\\n    ]\\n  };\\n\\n  const CONSTANT = {\\n    className: 'symbol',\\n    // begin: '@',\\n    // end: '$',\\n    // keywords: 'AppDataCommonDir AppDataDir AutoItExe AutoItPID AutoItVersion AutoItX64 COM_EventObj CommonFilesDir Compiled ComputerName ComSpec CPUArch CR CRLF DesktopCommonDir DesktopDepth DesktopDir DesktopHeight DesktopRefresh DesktopWidth DocumentsCommonDir error exitCode exitMethod extended FavoritesCommonDir FavoritesDir GUI_CtrlHandle GUI_CtrlId GUI_DragFile GUI_DragId GUI_DropId GUI_WinHandle HomeDrive HomePath HomeShare HotKeyPressed HOUR IPAddress1 IPAddress2 IPAddress3 IPAddress4 KBLayout LF LocalAppDataDir LogonDNSDomain LogonDomain LogonServer MDAY MIN MON MSEC MUILang MyDocumentsDir NumParams OSArch OSBuild OSLang OSServicePack OSType OSVersion ProgramFilesDir ProgramsCommonDir ProgramsDir ScriptDir ScriptFullPath ScriptLineNumber ScriptName SEC StartMenuCommonDir StartMenuDir StartupCommonDir StartupDir SW_DISABLE SW_ENABLE SW_HIDE SW_LOCK SW_MAXIMIZE SW_MINIMIZE SW_RESTORE SW_SHOW SW_SHOWDEFAULT SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWMINNOACTIVE SW_SHOWNA SW_SHOWNOACTIVATE SW_SHOWNORMAL SW_UNLOCK SystemDir TAB TempDir TRAY_ID TrayIconFlashing TrayIconVisible UserName UserProfileDir WDAY WindowsDir WorkingDir YDAY YEAR',\\n    // relevance: 5\\n    begin: '@[A-z0-9_]+'\\n  };\\n\\n  const FUNCTION = {\\n    beginKeywords: 'Func',\\n    end: '$',\\n    illegal: '\\\\\\\\$|\\\\\\\\[|%',\\n    contains: [\\n      hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, { className: \\\"title.function\\\" }),\\n      {\\n        className: 'params',\\n        begin: '\\\\\\\\(',\\n        end: '\\\\\\\\)',\\n        contains: [\\n          VARIABLE,\\n          STRING,\\n          NUMBER\\n        ]\\n      }\\n    ]\\n  };\\n\\n  return {\\n    name: 'AutoIt',\\n    case_insensitive: true,\\n    illegal: /\\\\/\\\\*/,\\n    keywords: {\\n      keyword: KEYWORDS,\\n      built_in: BUILT_IN,\\n      literal: LITERAL\\n    },\\n    contains: [\\n      COMMENT,\\n      VARIABLE,\\n      STRING,\\n      NUMBER,\\n      PREPROCESSOR,\\n      CONSTANT,\\n      FUNCTION\\n    ]\\n  };\\n}\\n\\nmodule.exports = autoit;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/autoit.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/avrasm.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/avrasm.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: AVR Assembly\\nAuthor: Vladimir Ermakov <vooon341@gmail.com>\\nCategory: assembler\\nWebsite: https://www.microchip.com/webdoc/avrassembler/avrassembler.wb_instruction_list.html\\n*/\\n\\n/** @type LanguageFn */\\nfunction avrasm(hljs) {\\n  return {\\n    name: 'AVR Assembly',\\n    case_insensitive: true,\\n    keywords: {\\n      $pattern: '\\\\\\\\.?' + hljs.IDENT_RE,\\n      keyword:\\n        /* mnemonic */\\n        'adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs '\\n        + 'brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr '\\n        + 'clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor '\\n        + 'fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul '\\n        + 'muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs '\\n        + 'sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub '\\n        + 'subi swap tst wdr',\\n      built_in:\\n        /* general purpose registers */\\n        'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 '\\n        + 'r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl '\\n        /* IO Registers (ATMega128) */\\n        + 'ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h '\\n        + 'tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c '\\n        + 'ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg '\\n        + 'ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk '\\n        + 'tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al '\\n        + 'ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr '\\n        + 'porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 '\\n        + 'ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf',\\n      meta:\\n        '.byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list '\\n        + '.listmac .macro .nolist .org .set'\\n    },\\n    contains: [\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.COMMENT(\\n        ';',\\n        '$',\\n        { relevance: 0 }\\n      ),\\n      hljs.C_NUMBER_MODE, // 0x..., decimal, float\\n      hljs.BINARY_NUMBER_MODE, // 0b...\\n      {\\n        className: 'number',\\n        begin: '\\\\\\\\b(\\\\\\\\$[a-zA-Z0-9]+|0o[0-7]+)' // $..., 0o...\\n      },\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'string',\\n        begin: '\\\\'',\\n        end: '[^\\\\\\\\\\\\\\\\]\\\\'',\\n        illegal: '[^\\\\\\\\\\\\\\\\][^\\\\']'\\n      },\\n      {\\n        className: 'symbol',\\n        begin: '^[A-Za-z0-9_.$]+:'\\n      },\\n      {\\n        className: 'meta',\\n        begin: '#',\\n        end: '$'\\n      },\\n      { // substitution within a macro\\n        className: 'subst',\\n        begin: '@[0-9]+'\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = avrasm;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/avrasm.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/awk.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/awk.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Awk\\nAuthor: Matthew Daly <matthewbdaly@gmail.com>\\nWebsite: https://www.gnu.org/software/gawk/manual/gawk.html\\nDescription: language definition for Awk scripts\\n*/\\n\\n/** @type LanguageFn */\\nfunction awk(hljs) {\\n  const VARIABLE = {\\n    className: 'variable',\\n    variants: [\\n      { begin: /\\\\$[\\\\w\\\\d#@][\\\\w\\\\d_]*/ },\\n      { begin: /\\\\$\\\\{(.*?)\\\\}/ }\\n    ]\\n  };\\n  const KEYWORDS = 'BEGIN END if else while do for in break continue delete next nextfile function func exit|10';\\n  const STRING = {\\n    className: 'string',\\n    contains: [ hljs.BACKSLASH_ESCAPE ],\\n    variants: [\\n      {\\n        begin: /(u|b)?r?'''/,\\n        end: /'''/,\\n        relevance: 10\\n      },\\n      {\\n        begin: /(u|b)?r?\\\"\\\"\\\"/,\\n        end: /\\\"\\\"\\\"/,\\n        relevance: 10\\n      },\\n      {\\n        begin: /(u|r|ur)'/,\\n        end: /'/,\\n        relevance: 10\\n      },\\n      {\\n        begin: /(u|r|ur)\\\"/,\\n        end: /\\\"/,\\n        relevance: 10\\n      },\\n      {\\n        begin: /(b|br)'/,\\n        end: /'/\\n      },\\n      {\\n        begin: /(b|br)\\\"/,\\n        end: /\\\"/\\n      },\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE\\n    ]\\n  };\\n  return {\\n    name: 'Awk',\\n    keywords: { keyword: KEYWORDS },\\n    contains: [\\n      VARIABLE,\\n      STRING,\\n      hljs.REGEXP_MODE,\\n      hljs.HASH_COMMENT_MODE,\\n      hljs.NUMBER_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = awk;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/awk.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/axapta.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/axapta.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Microsoft X++\\nDescription: X++ is a language used in Microsoft Dynamics 365, Dynamics AX, and Axapta.\\nAuthor: Dmitri Roudakov <dmitri@roudakov.ru>\\nWebsite: https://dynamics.microsoft.com/en-us/ax-overview/\\nCategory: enterprise\\n*/\\n\\n/** @type LanguageFn */\\nfunction axapta(hljs) {\\n  const IDENT_RE = hljs.UNDERSCORE_IDENT_RE;\\n  const BUILT_IN_KEYWORDS = [\\n    'anytype',\\n    'boolean',\\n    'byte',\\n    'char',\\n    'container',\\n    'date',\\n    'double',\\n    'enum',\\n    'guid',\\n    'int',\\n    'int64',\\n    'long',\\n    'real',\\n    'short',\\n    'str',\\n    'utcdatetime',\\n    'var'\\n  ];\\n\\n  const LITERAL_KEYWORDS = [\\n    'default',\\n    'false',\\n    'null',\\n    'true'\\n  ];\\n\\n  const NORMAL_KEYWORDS = [\\n    'abstract',\\n    'as',\\n    'asc',\\n    'avg',\\n    'break',\\n    'breakpoint',\\n    'by',\\n    'byref',\\n    'case',\\n    'catch',\\n    'changecompany',\\n    'class',\\n    'client',\\n    'client',\\n    'common',\\n    'const',\\n    'continue',\\n    'count',\\n    'crosscompany',\\n    'delegate',\\n    'delete_from',\\n    'desc',\\n    'display',\\n    'div',\\n    'do',\\n    'edit',\\n    'else',\\n    'eventhandler',\\n    'exists',\\n    'extends',\\n    'final',\\n    'finally',\\n    'firstfast',\\n    'firstonly',\\n    'firstonly1',\\n    'firstonly10',\\n    'firstonly100',\\n    'firstonly1000',\\n    'flush',\\n    'for',\\n    'forceliterals',\\n    'forcenestedloop',\\n    'forceplaceholders',\\n    'forceselectorder',\\n    'forupdate',\\n    'from',\\n    'generateonly',\\n    'group',\\n    'hint',\\n    'if',\\n    'implements',\\n    'in',\\n    'index',\\n    'insert_recordset',\\n    'interface',\\n    'internal',\\n    'is',\\n    'join',\\n    'like',\\n    'maxof',\\n    'minof',\\n    'mod',\\n    'namespace',\\n    'new',\\n    'next',\\n    'nofetch',\\n    'notexists',\\n    'optimisticlock',\\n    'order',\\n    'outer',\\n    'pessimisticlock',\\n    'print',\\n    'private',\\n    'protected',\\n    'public',\\n    'readonly',\\n    'repeatableread',\\n    'retry',\\n    'return',\\n    'reverse',\\n    'select',\\n    'server',\\n    'setting',\\n    'static',\\n    'sum',\\n    'super',\\n    'switch',\\n    'this',\\n    'throw',\\n    'try',\\n    'ttsabort',\\n    'ttsbegin',\\n    'ttscommit',\\n    'unchecked',\\n    'update_recordset',\\n    'using',\\n    'validtimestate',\\n    'void',\\n    'where',\\n    'while'\\n  ];\\n\\n  const KEYWORDS = {\\n    keyword: NORMAL_KEYWORDS,\\n    built_in: BUILT_IN_KEYWORDS,\\n    literal: LITERAL_KEYWORDS\\n  };\\n\\n  const CLASS_DEFINITION = {\\n    variants: [\\n      { match: [\\n        /(class|interface)\\\\s+/,\\n        IDENT_RE,\\n        /\\\\s+(extends|implements)\\\\s+/,\\n        IDENT_RE\\n      ] },\\n      { match: [\\n        /class\\\\s+/,\\n        IDENT_RE\\n      ] }\\n    ],\\n    scope: {\\n      2: \\\"title.class\\\",\\n      4: \\\"title.class.inherited\\\"\\n    },\\n    keywords: KEYWORDS\\n  };\\n\\n  return {\\n    name: 'X++',\\n    aliases: [ 'x++' ],\\n    keywords: KEYWORDS,\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.C_NUMBER_MODE,\\n      {\\n        className: 'meta',\\n        begin: '#',\\n        end: '$'\\n      },\\n      CLASS_DEFINITION\\n    ]\\n  };\\n}\\n\\nmodule.exports = axapta;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/axapta.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/bash.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/bash.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Bash\\nAuthor: vah <vahtenberg@gmail.com>\\nContributrors: Benjamin Pannell <contact@sierrasoftworks.com>\\nWebsite: https://www.gnu.org/software/bash/\\nCategory: common\\n*/\\n\\n/** @type LanguageFn */\\nfunction bash(hljs) {\\n  const regex = hljs.regex;\\n  const VAR = {};\\n  const BRACED_VAR = {\\n    begin: /\\\\$\\\\{/,\\n    end: /\\\\}/,\\n    contains: [\\n      \\\"self\\\",\\n      {\\n        begin: /:-/,\\n        contains: [ VAR ]\\n      } // default values\\n    ]\\n  };\\n  Object.assign(VAR, {\\n    className: 'variable',\\n    variants: [\\n      { begin: regex.concat(/\\\\$[\\\\w\\\\d#@][\\\\w\\\\d_]*/,\\n        // negative look-ahead tries to avoid matching patterns that are not\\n        // Perl at all like $ident$, @ident@, etc.\\n        `(?![\\\\\\\\w\\\\\\\\d])(?![$])`) },\\n      BRACED_VAR\\n    ]\\n  });\\n\\n  const SUBST = {\\n    className: 'subst',\\n    begin: /\\\\$\\\\(/,\\n    end: /\\\\)/,\\n    contains: [ hljs.BACKSLASH_ESCAPE ]\\n  };\\n  const HERE_DOC = {\\n    begin: /<<-?\\\\s*(?=\\\\w+)/,\\n    starts: { contains: [\\n      hljs.END_SAME_AS_BEGIN({\\n        begin: /(\\\\w+)/,\\n        end: /(\\\\w+)/,\\n        className: 'string'\\n      })\\n    ] }\\n  };\\n  const QUOTE_STRING = {\\n    className: 'string',\\n    begin: /\\\"/,\\n    end: /\\\"/,\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      VAR,\\n      SUBST\\n    ]\\n  };\\n  SUBST.contains.push(QUOTE_STRING);\\n  const ESCAPED_QUOTE = {\\n    className: '',\\n    begin: /\\\\\\\\\\\"/\\n\\n  };\\n  const APOS_STRING = {\\n    className: 'string',\\n    begin: /'/,\\n    end: /'/\\n  };\\n  const ARITHMETIC = {\\n    begin: /\\\\$?\\\\(\\\\(/,\\n    end: /\\\\)\\\\)/,\\n    contains: [\\n      {\\n        begin: /\\\\d+#[0-9a-f]+/,\\n        className: \\\"number\\\"\\n      },\\n      hljs.NUMBER_MODE,\\n      VAR\\n    ]\\n  };\\n  const SH_LIKE_SHELLS = [\\n    \\\"fish\\\",\\n    \\\"bash\\\",\\n    \\\"zsh\\\",\\n    \\\"sh\\\",\\n    \\\"csh\\\",\\n    \\\"ksh\\\",\\n    \\\"tcsh\\\",\\n    \\\"dash\\\",\\n    \\\"scsh\\\",\\n  ];\\n  const KNOWN_SHEBANG = hljs.SHEBANG({\\n    binary: `(${SH_LIKE_SHELLS.join(\\\"|\\\")})`,\\n    relevance: 10\\n  });\\n  const FUNCTION = {\\n    className: 'function',\\n    begin: /\\\\w[\\\\w\\\\d_]*\\\\s*\\\\(\\\\s*\\\\)\\\\s*\\\\{/,\\n    returnBegin: true,\\n    contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\\\\w[\\\\w\\\\d_]*/ }) ],\\n    relevance: 0\\n  };\\n\\n  const KEYWORDS = [\\n    \\\"if\\\",\\n    \\\"then\\\",\\n    \\\"else\\\",\\n    \\\"elif\\\",\\n    \\\"fi\\\",\\n    \\\"for\\\",\\n    \\\"while\\\",\\n    \\\"until\\\",\\n    \\\"in\\\",\\n    \\\"do\\\",\\n    \\\"done\\\",\\n    \\\"case\\\",\\n    \\\"esac\\\",\\n    \\\"function\\\",\\n    \\\"select\\\"\\n  ];\\n\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\"\\n  ];\\n\\n  // to consume paths to prevent keyword matches inside them\\n  const PATH_MODE = { match: /(\\\\/[a-z._-]+)+/ };\\n\\n  // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\\n  const SHELL_BUILT_INS = [\\n    \\\"break\\\",\\n    \\\"cd\\\",\\n    \\\"continue\\\",\\n    \\\"eval\\\",\\n    \\\"exec\\\",\\n    \\\"exit\\\",\\n    \\\"export\\\",\\n    \\\"getopts\\\",\\n    \\\"hash\\\",\\n    \\\"pwd\\\",\\n    \\\"readonly\\\",\\n    \\\"return\\\",\\n    \\\"shift\\\",\\n    \\\"test\\\",\\n    \\\"times\\\",\\n    \\\"trap\\\",\\n    \\\"umask\\\",\\n    \\\"unset\\\"\\n  ];\\n\\n  const BASH_BUILT_INS = [\\n    \\\"alias\\\",\\n    \\\"bind\\\",\\n    \\\"builtin\\\",\\n    \\\"caller\\\",\\n    \\\"command\\\",\\n    \\\"declare\\\",\\n    \\\"echo\\\",\\n    \\\"enable\\\",\\n    \\\"help\\\",\\n    \\\"let\\\",\\n    \\\"local\\\",\\n    \\\"logout\\\",\\n    \\\"mapfile\\\",\\n    \\\"printf\\\",\\n    \\\"read\\\",\\n    \\\"readarray\\\",\\n    \\\"source\\\",\\n    \\\"type\\\",\\n    \\\"typeset\\\",\\n    \\\"ulimit\\\",\\n    \\\"unalias\\\"\\n  ];\\n\\n  const ZSH_BUILT_INS = [\\n    \\\"autoload\\\",\\n    \\\"bg\\\",\\n    \\\"bindkey\\\",\\n    \\\"bye\\\",\\n    \\\"cap\\\",\\n    \\\"chdir\\\",\\n    \\\"clone\\\",\\n    \\\"comparguments\\\",\\n    \\\"compcall\\\",\\n    \\\"compctl\\\",\\n    \\\"compdescribe\\\",\\n    \\\"compfiles\\\",\\n    \\\"compgroups\\\",\\n    \\\"compquote\\\",\\n    \\\"comptags\\\",\\n    \\\"comptry\\\",\\n    \\\"compvalues\\\",\\n    \\\"dirs\\\",\\n    \\\"disable\\\",\\n    \\\"disown\\\",\\n    \\\"echotc\\\",\\n    \\\"echoti\\\",\\n    \\\"emulate\\\",\\n    \\\"fc\\\",\\n    \\\"fg\\\",\\n    \\\"float\\\",\\n    \\\"functions\\\",\\n    \\\"getcap\\\",\\n    \\\"getln\\\",\\n    \\\"history\\\",\\n    \\\"integer\\\",\\n    \\\"jobs\\\",\\n    \\\"kill\\\",\\n    \\\"limit\\\",\\n    \\\"log\\\",\\n    \\\"noglob\\\",\\n    \\\"popd\\\",\\n    \\\"print\\\",\\n    \\\"pushd\\\",\\n    \\\"pushln\\\",\\n    \\\"rehash\\\",\\n    \\\"sched\\\",\\n    \\\"setcap\\\",\\n    \\\"setopt\\\",\\n    \\\"stat\\\",\\n    \\\"suspend\\\",\\n    \\\"ttyctl\\\",\\n    \\\"unfunction\\\",\\n    \\\"unhash\\\",\\n    \\\"unlimit\\\",\\n    \\\"unsetopt\\\",\\n    \\\"vared\\\",\\n    \\\"wait\\\",\\n    \\\"whence\\\",\\n    \\\"where\\\",\\n    \\\"which\\\",\\n    \\\"zcompile\\\",\\n    \\\"zformat\\\",\\n    \\\"zftp\\\",\\n    \\\"zle\\\",\\n    \\\"zmodload\\\",\\n    \\\"zparseopts\\\",\\n    \\\"zprof\\\",\\n    \\\"zpty\\\",\\n    \\\"zregexparse\\\",\\n    \\\"zsocket\\\",\\n    \\\"zstyle\\\",\\n    \\\"ztcp\\\"\\n  ];\\n\\n  const GNU_CORE_UTILS = [\\n    \\\"chcon\\\",\\n    \\\"chgrp\\\",\\n    \\\"chown\\\",\\n    \\\"chmod\\\",\\n    \\\"cp\\\",\\n    \\\"dd\\\",\\n    \\\"df\\\",\\n    \\\"dir\\\",\\n    \\\"dircolors\\\",\\n    \\\"ln\\\",\\n    \\\"ls\\\",\\n    \\\"mkdir\\\",\\n    \\\"mkfifo\\\",\\n    \\\"mknod\\\",\\n    \\\"mktemp\\\",\\n    \\\"mv\\\",\\n    \\\"realpath\\\",\\n    \\\"rm\\\",\\n    \\\"rmdir\\\",\\n    \\\"shred\\\",\\n    \\\"sync\\\",\\n    \\\"touch\\\",\\n    \\\"truncate\\\",\\n    \\\"vdir\\\",\\n    \\\"b2sum\\\",\\n    \\\"base32\\\",\\n    \\\"base64\\\",\\n    \\\"cat\\\",\\n    \\\"cksum\\\",\\n    \\\"comm\\\",\\n    \\\"csplit\\\",\\n    \\\"cut\\\",\\n    \\\"expand\\\",\\n    \\\"fmt\\\",\\n    \\\"fold\\\",\\n    \\\"head\\\",\\n    \\\"join\\\",\\n    \\\"md5sum\\\",\\n    \\\"nl\\\",\\n    \\\"numfmt\\\",\\n    \\\"od\\\",\\n    \\\"paste\\\",\\n    \\\"ptx\\\",\\n    \\\"pr\\\",\\n    \\\"sha1sum\\\",\\n    \\\"sha224sum\\\",\\n    \\\"sha256sum\\\",\\n    \\\"sha384sum\\\",\\n    \\\"sha512sum\\\",\\n    \\\"shuf\\\",\\n    \\\"sort\\\",\\n    \\\"split\\\",\\n    \\\"sum\\\",\\n    \\\"tac\\\",\\n    \\\"tail\\\",\\n    \\\"tr\\\",\\n    \\\"tsort\\\",\\n    \\\"unexpand\\\",\\n    \\\"uniq\\\",\\n    \\\"wc\\\",\\n    \\\"arch\\\",\\n    \\\"basename\\\",\\n    \\\"chroot\\\",\\n    \\\"date\\\",\\n    \\\"dirname\\\",\\n    \\\"du\\\",\\n    \\\"echo\\\",\\n    \\\"env\\\",\\n    \\\"expr\\\",\\n    \\\"factor\\\",\\n    // \\\"false\\\", // keyword literal already\\n    \\\"groups\\\",\\n    \\\"hostid\\\",\\n    \\\"id\\\",\\n    \\\"link\\\",\\n    \\\"logname\\\",\\n    \\\"nice\\\",\\n    \\\"nohup\\\",\\n    \\\"nproc\\\",\\n    \\\"pathchk\\\",\\n    \\\"pinky\\\",\\n    \\\"printenv\\\",\\n    \\\"printf\\\",\\n    \\\"pwd\\\",\\n    \\\"readlink\\\",\\n    \\\"runcon\\\",\\n    \\\"seq\\\",\\n    \\\"sleep\\\",\\n    \\\"stat\\\",\\n    \\\"stdbuf\\\",\\n    \\\"stty\\\",\\n    \\\"tee\\\",\\n    \\\"test\\\",\\n    \\\"timeout\\\",\\n    // \\\"true\\\", // keyword literal already\\n    \\\"tty\\\",\\n    \\\"uname\\\",\\n    \\\"unlink\\\",\\n    \\\"uptime\\\",\\n    \\\"users\\\",\\n    \\\"who\\\",\\n    \\\"whoami\\\",\\n    \\\"yes\\\"\\n  ];\\n\\n  return {\\n    name: 'Bash',\\n    aliases: [ 'sh' ],\\n    keywords: {\\n      $pattern: /\\\\b[a-z][a-z0-9._-]+\\\\b/,\\n      keyword: KEYWORDS,\\n      literal: LITERALS,\\n      built_in: [\\n        ...SHELL_BUILT_INS,\\n        ...BASH_BUILT_INS,\\n        // Shell modifiers\\n        \\\"set\\\",\\n        \\\"shopt\\\",\\n        ...ZSH_BUILT_INS,\\n        ...GNU_CORE_UTILS\\n      ]\\n    },\\n    contains: [\\n      KNOWN_SHEBANG, // to catch known shells and boost relevancy\\n      hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang\\n      FUNCTION,\\n      ARITHMETIC,\\n      hljs.HASH_COMMENT_MODE,\\n      HERE_DOC,\\n      PATH_MODE,\\n      QUOTE_STRING,\\n      ESCAPED_QUOTE,\\n      APOS_STRING,\\n      VAR\\n    ]\\n  };\\n}\\n\\nmodule.exports = bash;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/bash.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/basic.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/basic.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: BASIC\\nAuthor: Raphaël Assénat <raph@raphnet.net>\\nDescription: Based on the BASIC reference from the Tandy 1000 guide\\nWebsite: https://en.wikipedia.org/wiki/Tandy_1000\\n*/\\n\\n/** @type LanguageFn */\\nfunction basic(hljs) {\\n  const KEYWORDS = [\\n    \\\"ABS\\\",\\n    \\\"ASC\\\",\\n    \\\"AND\\\",\\n    \\\"ATN\\\",\\n    \\\"AUTO|0\\\",\\n    \\\"BEEP\\\",\\n    \\\"BLOAD|10\\\",\\n    \\\"BSAVE|10\\\",\\n    \\\"CALL\\\",\\n    \\\"CALLS\\\",\\n    \\\"CDBL\\\",\\n    \\\"CHAIN\\\",\\n    \\\"CHDIR\\\",\\n    \\\"CHR$|10\\\",\\n    \\\"CINT\\\",\\n    \\\"CIRCLE\\\",\\n    \\\"CLEAR\\\",\\n    \\\"CLOSE\\\",\\n    \\\"CLS\\\",\\n    \\\"COLOR\\\",\\n    \\\"COM\\\",\\n    \\\"COMMON\\\",\\n    \\\"CONT\\\",\\n    \\\"COS\\\",\\n    \\\"CSNG\\\",\\n    \\\"CSRLIN\\\",\\n    \\\"CVD\\\",\\n    \\\"CVI\\\",\\n    \\\"CVS\\\",\\n    \\\"DATA\\\",\\n    \\\"DATE$\\\",\\n    \\\"DEFDBL\\\",\\n    \\\"DEFINT\\\",\\n    \\\"DEFSNG\\\",\\n    \\\"DEFSTR\\\",\\n    \\\"DEF|0\\\",\\n    \\\"SEG\\\",\\n    \\\"USR\\\",\\n    \\\"DELETE\\\",\\n    \\\"DIM\\\",\\n    \\\"DRAW\\\",\\n    \\\"EDIT\\\",\\n    \\\"END\\\",\\n    \\\"ENVIRON\\\",\\n    \\\"ENVIRON$\\\",\\n    \\\"EOF\\\",\\n    \\\"EQV\\\",\\n    \\\"ERASE\\\",\\n    \\\"ERDEV\\\",\\n    \\\"ERDEV$\\\",\\n    \\\"ERL\\\",\\n    \\\"ERR\\\",\\n    \\\"ERROR\\\",\\n    \\\"EXP\\\",\\n    \\\"FIELD\\\",\\n    \\\"FILES\\\",\\n    \\\"FIX\\\",\\n    \\\"FOR|0\\\",\\n    \\\"FRE\\\",\\n    \\\"GET\\\",\\n    \\\"GOSUB|10\\\",\\n    \\\"GOTO\\\",\\n    \\\"HEX$\\\",\\n    \\\"IF\\\",\\n    \\\"THEN\\\",\\n    \\\"ELSE|0\\\",\\n    \\\"INKEY$\\\",\\n    \\\"INP\\\",\\n    \\\"INPUT\\\",\\n    \\\"INPUT#\\\",\\n    \\\"INPUT$\\\",\\n    \\\"INSTR\\\",\\n    \\\"IMP\\\",\\n    \\\"INT\\\",\\n    \\\"IOCTL\\\",\\n    \\\"IOCTL$\\\",\\n    \\\"KEY\\\",\\n    \\\"ON\\\",\\n    \\\"OFF\\\",\\n    \\\"LIST\\\",\\n    \\\"KILL\\\",\\n    \\\"LEFT$\\\",\\n    \\\"LEN\\\",\\n    \\\"LET\\\",\\n    \\\"LINE\\\",\\n    \\\"LLIST\\\",\\n    \\\"LOAD\\\",\\n    \\\"LOC\\\",\\n    \\\"LOCATE\\\",\\n    \\\"LOF\\\",\\n    \\\"LOG\\\",\\n    \\\"LPRINT\\\",\\n    \\\"USING\\\",\\n    \\\"LSET\\\",\\n    \\\"MERGE\\\",\\n    \\\"MID$\\\",\\n    \\\"MKDIR\\\",\\n    \\\"MKD$\\\",\\n    \\\"MKI$\\\",\\n    \\\"MKS$\\\",\\n    \\\"MOD\\\",\\n    \\\"NAME\\\",\\n    \\\"NEW\\\",\\n    \\\"NEXT\\\",\\n    \\\"NOISE\\\",\\n    \\\"NOT\\\",\\n    \\\"OCT$\\\",\\n    \\\"ON\\\",\\n    \\\"OR\\\",\\n    \\\"PEN\\\",\\n    \\\"PLAY\\\",\\n    \\\"STRIG\\\",\\n    \\\"OPEN\\\",\\n    \\\"OPTION\\\",\\n    \\\"BASE\\\",\\n    \\\"OUT\\\",\\n    \\\"PAINT\\\",\\n    \\\"PALETTE\\\",\\n    \\\"PCOPY\\\",\\n    \\\"PEEK\\\",\\n    \\\"PMAP\\\",\\n    \\\"POINT\\\",\\n    \\\"POKE\\\",\\n    \\\"POS\\\",\\n    \\\"PRINT\\\",\\n    \\\"PRINT]\\\",\\n    \\\"PSET\\\",\\n    \\\"PRESET\\\",\\n    \\\"PUT\\\",\\n    \\\"RANDOMIZE\\\",\\n    \\\"READ\\\",\\n    \\\"REM\\\",\\n    \\\"RENUM\\\",\\n    \\\"RESET|0\\\",\\n    \\\"RESTORE\\\",\\n    \\\"RESUME\\\",\\n    \\\"RETURN|0\\\",\\n    \\\"RIGHT$\\\",\\n    \\\"RMDIR\\\",\\n    \\\"RND\\\",\\n    \\\"RSET\\\",\\n    \\\"RUN\\\",\\n    \\\"SAVE\\\",\\n    \\\"SCREEN\\\",\\n    \\\"SGN\\\",\\n    \\\"SHELL\\\",\\n    \\\"SIN\\\",\\n    \\\"SOUND\\\",\\n    \\\"SPACE$\\\",\\n    \\\"SPC\\\",\\n    \\\"SQR\\\",\\n    \\\"STEP\\\",\\n    \\\"STICK\\\",\\n    \\\"STOP\\\",\\n    \\\"STR$\\\",\\n    \\\"STRING$\\\",\\n    \\\"SWAP\\\",\\n    \\\"SYSTEM\\\",\\n    \\\"TAB\\\",\\n    \\\"TAN\\\",\\n    \\\"TIME$\\\",\\n    \\\"TIMER\\\",\\n    \\\"TROFF\\\",\\n    \\\"TRON\\\",\\n    \\\"TO\\\",\\n    \\\"USR\\\",\\n    \\\"VAL\\\",\\n    \\\"VARPTR\\\",\\n    \\\"VARPTR$\\\",\\n    \\\"VIEW\\\",\\n    \\\"WAIT\\\",\\n    \\\"WHILE\\\",\\n    \\\"WEND\\\",\\n    \\\"WIDTH\\\",\\n    \\\"WINDOW\\\",\\n    \\\"WRITE\\\",\\n    \\\"XOR\\\"\\n  ];\\n\\n  return {\\n    name: 'BASIC',\\n    case_insensitive: true,\\n    illegal: '^\\\\.',\\n    // Support explicitly typed variables that end with $%! or #.\\n    keywords: {\\n      $pattern: '[a-zA-Z][a-zA-Z0-9_$%!#]*',\\n      keyword: KEYWORDS\\n    },\\n    contains: [\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.COMMENT('REM', '$', { relevance: 10 }),\\n      hljs.COMMENT('\\\\'', '$', { relevance: 0 }),\\n      {\\n        // Match line numbers\\n        className: 'symbol',\\n        begin: '^[0-9]+ ',\\n        relevance: 10\\n      },\\n      {\\n        // Match typed numeric constants (1000, 12.34!, 1.2e5, 1.5#, 1.2D2)\\n        className: 'number',\\n        begin: '\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+)?([edED]\\\\\\\\d+)?[#\\\\!]?',\\n        relevance: 0\\n      },\\n      {\\n        // Match hexadecimal numbers (&Hxxxx)\\n        className: 'number',\\n        begin: '(&[hH][0-9a-fA-F]{1,4})'\\n      },\\n      {\\n        // Match octal numbers (&Oxxxxxx)\\n        className: 'number',\\n        begin: '(&[oO][0-7]{1,6})'\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = basic;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/basic.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/bnf.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/bnf.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Backus–Naur Form\\nWebsite: https://en.wikipedia.org/wiki/Backus–Naur_form\\nAuthor: Oleg Efimov <efimovov@gmail.com>\\n*/\\n\\n/** @type LanguageFn */\\nfunction bnf(hljs) {\\n  return {\\n    name: 'Backus–Naur Form',\\n    contains: [\\n      // Attribute\\n      {\\n        className: 'attribute',\\n        begin: /</,\\n        end: />/\\n      },\\n      // Specific\\n      {\\n        begin: /::=/,\\n        end: /$/,\\n        contains: [\\n          {\\n            begin: /</,\\n            end: />/\\n          },\\n          // Common\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE,\\n          hljs.APOS_STRING_MODE,\\n          hljs.QUOTE_STRING_MODE\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = bnf;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/bnf.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/brainfuck.js\":\n/*!**************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/brainfuck.js ***!\n  \\**************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Brainfuck\\nAuthor: Evgeny Stepanischev <imbolk@gmail.com>\\nWebsite: https://esolangs.org/wiki/Brainfuck\\n*/\\n\\n/** @type LanguageFn */\\nfunction brainfuck(hljs) {\\n  const LITERAL = {\\n    className: 'literal',\\n    begin: /[+-]+/,\\n    relevance: 0\\n  };\\n  return {\\n    name: 'Brainfuck',\\n    aliases: [ 'bf' ],\\n    contains: [\\n      hljs.COMMENT(\\n        /[^\\\\[\\\\]\\\\.,\\\\+\\\\-<> \\\\r\\\\n]/,\\n        /[\\\\[\\\\]\\\\.,\\\\+\\\\-<> \\\\r\\\\n]/,\\n        {\\n          contains: [\\n            {\\n              match: /[ ]+[^\\\\[\\\\]\\\\.,\\\\+\\\\-<> \\\\r\\\\n]/,\\n              relevance: 0\\n            }\\n          ],\\n          returnEnd: true,\\n          relevance: 0\\n        }\\n      ),\\n      {\\n        className: 'title',\\n        begin: '[\\\\\\\\[\\\\\\\\]]',\\n        relevance: 0\\n      },\\n      {\\n        className: 'string',\\n        begin: '[\\\\\\\\.,]',\\n        relevance: 0\\n      },\\n      {\\n        // this mode works as the only relevance counter\\n        // it looks ahead to find the start of a run of literals\\n        // so only the runs are counted as relevant\\n        begin: /(?=\\\\+\\\\+|--)/,\\n        contains: [ LITERAL ]\\n      },\\n      LITERAL\\n    ]\\n  };\\n}\\n\\nmodule.exports = brainfuck;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/brainfuck.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/c.js\":\n/*!******************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/c.js ***!\n  \\******************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: C\\nCategory: common, system\\nWebsite: https://en.wikipedia.org/wiki/C_(programming_language)\\n*/\\n\\n/** @type LanguageFn */\\nfunction c(hljs) {\\n  const regex = hljs.regex;\\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\\n  // not include such support nor can we be sure all the grammars depending\\n  // on it would desire this behavior\\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\\\\\\\n/ } ] });\\n  const DECLTYPE_AUTO_RE = 'decltype\\\\\\\\(auto\\\\\\\\)';\\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\\\\\w*::';\\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\\n  const FUNCTION_TYPE_RE = '('\\n    + DECLTYPE_AUTO_RE + '|'\\n    + regex.optional(NAMESPACE_RE)\\n    + '[a-zA-Z_]\\\\\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\\n  + ')';\\n\\n\\n  const TYPES = {\\n    className: 'type',\\n    variants: [\\n      { begin: '\\\\\\\\b[a-z\\\\\\\\d_]*_t\\\\\\\\b' },\\n      { match: /\\\\batomic_[a-z]{3,6}\\\\b/ }\\n    ]\\n\\n  };\\n\\n  // https://en.cppreference.com/w/cpp/language/escape\\n  // \\\\\\\\ \\\\x \\\\xFF \\\\u2837 \\\\u00323747 \\\\374\\n  const CHARACTER_ESCAPES = '\\\\\\\\\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\\\\\S)';\\n  const STRINGS = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: '(u8?|U|L)?\\\"',\\n        end: '\\\"',\\n        illegal: '\\\\\\\\n',\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      },\\n      {\\n        begin: '(u8?|U|L)?\\\\'(' + CHARACTER_ESCAPES + \\\"|.)\\\",\\n        end: '\\\\'',\\n        illegal: '.'\\n      },\\n      hljs.END_SAME_AS_BEGIN({\\n        begin: /(?:u8?|U|L)?R\\\"([^()\\\\\\\\ ]{0,16})\\\\(/,\\n        end: /\\\\)([^()\\\\\\\\ ]{0,16})\\\"/\\n      })\\n    ]\\n  };\\n\\n  const NUMBERS = {\\n    className: 'number',\\n    variants: [\\n      { begin: '\\\\\\\\b(0b[01\\\\']+)' },\\n      { begin: '(-?)\\\\\\\\b([\\\\\\\\d\\\\']+(\\\\\\\\.[\\\\\\\\d\\\\']*)?|\\\\\\\\.[\\\\\\\\d\\\\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },\\n      { begin: '(-?)(\\\\\\\\b0[xX][a-fA-F0-9\\\\']+|(\\\\\\\\b[\\\\\\\\d\\\\']+(\\\\\\\\.[\\\\\\\\d\\\\']*)?|\\\\\\\\.[\\\\\\\\d\\\\']+)([eE][-+]?[\\\\\\\\d\\\\']+)?)' }\\n    ],\\n    relevance: 0\\n  };\\n\\n  const PREPROCESSOR = {\\n    className: 'meta',\\n    begin: /#\\\\s*[a-z]+\\\\b/,\\n    end: /$/,\\n    keywords: { keyword:\\n        'if else elif endif define undef warning error line '\\n        + 'pragma _Pragma ifdef ifndef include' },\\n    contains: [\\n      {\\n        begin: /\\\\\\\\\\\\n/,\\n        relevance: 0\\n      },\\n      hljs.inherit(STRINGS, { className: 'string' }),\\n      {\\n        className: 'string',\\n        begin: /<.*?>/\\n      },\\n      C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE\\n    ]\\n  };\\n\\n  const TITLE_MODE = {\\n    className: 'title',\\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\\n    relevance: 0\\n  };\\n\\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\\\\\s*\\\\\\\\(';\\n\\n  const C_KEYWORDS = [\\n    \\\"asm\\\",\\n    \\\"auto\\\",\\n    \\\"break\\\",\\n    \\\"case\\\",\\n    \\\"continue\\\",\\n    \\\"default\\\",\\n    \\\"do\\\",\\n    \\\"else\\\",\\n    \\\"enum\\\",\\n    \\\"extern\\\",\\n    \\\"for\\\",\\n    \\\"fortran\\\",\\n    \\\"goto\\\",\\n    \\\"if\\\",\\n    \\\"inline\\\",\\n    \\\"register\\\",\\n    \\\"restrict\\\",\\n    \\\"return\\\",\\n    \\\"sizeof\\\",\\n    \\\"struct\\\",\\n    \\\"switch\\\",\\n    \\\"typedef\\\",\\n    \\\"union\\\",\\n    \\\"volatile\\\",\\n    \\\"while\\\",\\n    \\\"_Alignas\\\",\\n    \\\"_Alignof\\\",\\n    \\\"_Atomic\\\",\\n    \\\"_Generic\\\",\\n    \\\"_Noreturn\\\",\\n    \\\"_Static_assert\\\",\\n    \\\"_Thread_local\\\",\\n    // aliases\\n    \\\"alignas\\\",\\n    \\\"alignof\\\",\\n    \\\"noreturn\\\",\\n    \\\"static_assert\\\",\\n    \\\"thread_local\\\",\\n    // not a C keyword but is, for all intents and purposes, treated exactly like one.\\n    \\\"_Pragma\\\"\\n  ];\\n\\n  const C_TYPES = [\\n    \\\"float\\\",\\n    \\\"double\\\",\\n    \\\"signed\\\",\\n    \\\"unsigned\\\",\\n    \\\"int\\\",\\n    \\\"short\\\",\\n    \\\"long\\\",\\n    \\\"char\\\",\\n    \\\"void\\\",\\n    \\\"_Bool\\\",\\n    \\\"_Complex\\\",\\n    \\\"_Imaginary\\\",\\n    \\\"_Decimal32\\\",\\n    \\\"_Decimal64\\\",\\n    \\\"_Decimal128\\\",\\n    // modifiers\\n    \\\"const\\\",\\n    \\\"static\\\",\\n    // aliases\\n    \\\"complex\\\",\\n    \\\"bool\\\",\\n    \\\"imaginary\\\"\\n  ];\\n\\n  const KEYWORDS = {\\n    keyword: C_KEYWORDS,\\n    type: C_TYPES,\\n    literal: 'true false NULL',\\n    // TODO: apply hinting work similar to what was done in cpp.js\\n    built_in: 'std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream '\\n      + 'auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set '\\n      + 'unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos '\\n      + 'asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp '\\n      + 'fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper '\\n      + 'isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow '\\n      + 'printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp '\\n      + 'strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan '\\n      + 'vfprintf vprintf vsprintf endl initializer_list unique_ptr',\\n  };\\n\\n  const EXPRESSION_CONTAINS = [\\n    PREPROCESSOR,\\n    TYPES,\\n    C_LINE_COMMENT_MODE,\\n    hljs.C_BLOCK_COMMENT_MODE,\\n    NUMBERS,\\n    STRINGS\\n  ];\\n\\n  const EXPRESSION_CONTEXT = {\\n    // This mode covers expression context where we can't expect a function\\n    // definition and shouldn't highlight anything that looks like one:\\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\\n    variants: [\\n      {\\n        begin: /=/,\\n        end: /;/\\n      },\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/\\n      },\\n      {\\n        beginKeywords: 'new throw return else',\\n        end: /;/\\n      }\\n    ],\\n    keywords: KEYWORDS,\\n    contains: EXPRESSION_CONTAINS.concat([\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        keywords: KEYWORDS,\\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\\n        relevance: 0\\n      }\\n    ]),\\n    relevance: 0\\n  };\\n\\n  const FUNCTION_DECLARATION = {\\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\\\\\*&\\\\\\\\s]+)+' + FUNCTION_TITLE,\\n    returnBegin: true,\\n    end: /[{;=]/,\\n    excludeEnd: true,\\n    keywords: KEYWORDS,\\n    illegal: /[^\\\\w\\\\s\\\\*&:<>.]/,\\n    contains: [\\n      { // to prevent it from being confused as the function title\\n        begin: DECLTYPE_AUTO_RE,\\n        keywords: KEYWORDS,\\n        relevance: 0\\n      },\\n      {\\n        begin: FUNCTION_TITLE,\\n        returnBegin: true,\\n        contains: [ hljs.inherit(TITLE_MODE, { className: \\\"title.function\\\" }) ],\\n        relevance: 0\\n      },\\n      // allow for multiple declarations, e.g.:\\n      // extern void f(int), g(char);\\n      {\\n        relevance: 0,\\n        match: /,/\\n      },\\n      {\\n        className: 'params',\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        keywords: KEYWORDS,\\n        relevance: 0,\\n        contains: [\\n          C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE,\\n          STRINGS,\\n          NUMBERS,\\n          TYPES,\\n          // Count matching parentheses.\\n          {\\n            begin: /\\\\(/,\\n            end: /\\\\)/,\\n            keywords: KEYWORDS,\\n            relevance: 0,\\n            contains: [\\n              'self',\\n              C_LINE_COMMENT_MODE,\\n              hljs.C_BLOCK_COMMENT_MODE,\\n              STRINGS,\\n              NUMBERS,\\n              TYPES\\n            ]\\n          }\\n        ]\\n      },\\n      TYPES,\\n      C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      PREPROCESSOR\\n    ]\\n  };\\n\\n  return {\\n    name: \\\"C\\\",\\n    aliases: [ 'h' ],\\n    keywords: KEYWORDS,\\n    // Until differentiations are added between `c` and `cpp`, `c` will\\n    // not be auto-detected to avoid auto-detect conflicts between C and C++\\n    disableAutodetect: true,\\n    illegal: '</',\\n    contains: [].concat(\\n      EXPRESSION_CONTEXT,\\n      FUNCTION_DECLARATION,\\n      EXPRESSION_CONTAINS,\\n      [\\n        PREPROCESSOR,\\n        {\\n          begin: hljs.IDENT_RE + '::',\\n          keywords: KEYWORDS\\n        },\\n        {\\n          className: 'class',\\n          beginKeywords: 'enum class struct union',\\n          end: /[{;:<>=]/,\\n          contains: [\\n            { beginKeywords: \\\"final class struct\\\" },\\n            hljs.TITLE_MODE\\n          ]\\n        }\\n      ]),\\n    exports: {\\n      preprocessor: PREPROCESSOR,\\n      strings: STRINGS,\\n      keywords: KEYWORDS\\n    }\\n  };\\n}\\n\\nmodule.exports = c;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/c.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/cal.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/cal.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: C/AL\\nAuthor: Kenneth Fuglsang Christensen <kfuglsang@gmail.com>\\nDescription: Provides highlighting of Microsoft Dynamics NAV C/AL code files\\nWebsite: https://docs.microsoft.com/en-us/dynamics-nav/programming-in-c-al\\n*/\\n\\n/** @type LanguageFn */\\nfunction cal(hljs) {\\n  const regex = hljs.regex;\\n  const KEYWORDS = [\\n    \\\"div\\\",\\n    \\\"mod\\\",\\n    \\\"in\\\",\\n    \\\"and\\\",\\n    \\\"or\\\",\\n    \\\"not\\\",\\n    \\\"xor\\\",\\n    \\\"asserterror\\\",\\n    \\\"begin\\\",\\n    \\\"case\\\",\\n    \\\"do\\\",\\n    \\\"downto\\\",\\n    \\\"else\\\",\\n    \\\"end\\\",\\n    \\\"exit\\\",\\n    \\\"for\\\",\\n    \\\"local\\\",\\n    \\\"if\\\",\\n    \\\"of\\\",\\n    \\\"repeat\\\",\\n    \\\"then\\\",\\n    \\\"to\\\",\\n    \\\"until\\\",\\n    \\\"while\\\",\\n    \\\"with\\\",\\n    \\\"var\\\"\\n  ];\\n  const LITERALS = 'false true';\\n  const COMMENT_MODES = [\\n    hljs.C_LINE_COMMENT_MODE,\\n    hljs.COMMENT(\\n      /\\\\{/,\\n      /\\\\}/,\\n      { relevance: 0 }\\n    ),\\n    hljs.COMMENT(\\n      /\\\\(\\\\*/,\\n      /\\\\*\\\\)/,\\n      { relevance: 10 }\\n    )\\n  ];\\n  const STRING = {\\n    className: 'string',\\n    begin: /'/,\\n    end: /'/,\\n    contains: [ { begin: /''/ } ]\\n  };\\n  const CHAR_STRING = {\\n    className: 'string',\\n    begin: /(#\\\\d+)+/\\n  };\\n  const DATE = {\\n    className: 'number',\\n    begin: '\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+)?(DT|D|T)',\\n    relevance: 0\\n  };\\n  const DBL_QUOTED_VARIABLE = {\\n    className: 'string', // not a string technically but makes sense to be highlighted in the same style\\n    begin: '\\\"',\\n    end: '\\\"'\\n  };\\n\\n  const PROCEDURE = {\\n    match: [\\n      /procedure/,\\n      /\\\\s+/,\\n      /[a-zA-Z_][\\\\w@]*/,\\n      /\\\\s*/\\n    ],\\n    scope: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.function\\\"\\n    },\\n    contains: [\\n      {\\n        className: 'params',\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        keywords: KEYWORDS,\\n        contains: [\\n          STRING,\\n          CHAR_STRING,\\n          hljs.NUMBER_MODE\\n        ]\\n      },\\n      ...COMMENT_MODES\\n    ]\\n  };\\n\\n  const OBJECT_TYPES = [\\n    \\\"Table\\\",\\n    \\\"Form\\\",\\n    \\\"Report\\\",\\n    \\\"Dataport\\\",\\n    \\\"Codeunit\\\",\\n    \\\"XMLport\\\",\\n    \\\"MenuSuite\\\",\\n    \\\"Page\\\",\\n    \\\"Query\\\"\\n  ];\\n  const OBJECT = {\\n    match: [\\n      /OBJECT/,\\n      /\\\\s+/,\\n      regex.either(...OBJECT_TYPES),\\n      /\\\\s+/,\\n      /\\\\d+/,\\n      /\\\\s+(?=[^\\\\s])/,\\n      /.*/,\\n      /$/\\n    ],\\n    relevance: 3,\\n    scope: {\\n      1: \\\"keyword\\\",\\n      3: \\\"type\\\",\\n      5: \\\"number\\\",\\n      7: \\\"title\\\"\\n    }\\n  };\\n\\n  const PROPERTY = {\\n    match: /[\\\\w]+(?=\\\\=)/,\\n    scope: \\\"attribute\\\",\\n    relevance: 0\\n  };\\n\\n  return {\\n    name: 'C/AL',\\n    case_insensitive: true,\\n    keywords: {\\n      keyword: KEYWORDS,\\n      literal: LITERALS\\n    },\\n    illegal: /\\\\/\\\\*/,\\n    contains: [\\n      PROPERTY,\\n      STRING,\\n      CHAR_STRING,\\n      DATE,\\n      DBL_QUOTED_VARIABLE,\\n      hljs.NUMBER_MODE,\\n      OBJECT,\\n      PROCEDURE\\n    ]\\n  };\\n}\\n\\nmodule.exports = cal;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/cal.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/capnproto.js\":\n/*!**************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/capnproto.js ***!\n  \\**************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Cap’n Proto\\nAuthor: Oleg Efimov <efimovov@gmail.com>\\nDescription: Cap’n Proto message definition format\\nWebsite: https://capnproto.org/capnp-tool.html\\nCategory: protocols\\n*/\\n\\n/** @type LanguageFn */\\nfunction capnproto(hljs) {\\n  const KEYWORDS = [\\n    \\\"struct\\\",\\n    \\\"enum\\\",\\n    \\\"interface\\\",\\n    \\\"union\\\",\\n    \\\"group\\\",\\n    \\\"import\\\",\\n    \\\"using\\\",\\n    \\\"const\\\",\\n    \\\"annotation\\\",\\n    \\\"extends\\\",\\n    \\\"in\\\",\\n    \\\"of\\\",\\n    \\\"on\\\",\\n    \\\"as\\\",\\n    \\\"with\\\",\\n    \\\"from\\\",\\n    \\\"fixed\\\"\\n  ];\\n  const TYPES = [\\n    \\\"Void\\\",\\n    \\\"Bool\\\",\\n    \\\"Int8\\\",\\n    \\\"Int16\\\",\\n    \\\"Int32\\\",\\n    \\\"Int64\\\",\\n    \\\"UInt8\\\",\\n    \\\"UInt16\\\",\\n    \\\"UInt32\\\",\\n    \\\"UInt64\\\",\\n    \\\"Float32\\\",\\n    \\\"Float64\\\",\\n    \\\"Text\\\",\\n    \\\"Data\\\",\\n    \\\"AnyPointer\\\",\\n    \\\"AnyStruct\\\",\\n    \\\"Capability\\\",\\n    \\\"List\\\"\\n  ];\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\"\\n  ];\\n  const CLASS_DEFINITION = {\\n    variants: [\\n      { match: [\\n        /(struct|enum|interface)/,\\n        /\\\\s+/,\\n        hljs.IDENT_RE\\n      ] },\\n      { match: [\\n        /extends/,\\n        /\\\\s*\\\\(/,\\n        hljs.IDENT_RE,\\n        /\\\\s*\\\\)/\\n      ] }\\n    ],\\n    scope: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.class\\\"\\n    }\\n  };\\n  return {\\n    name: 'Cap’n Proto',\\n    aliases: [ 'capnp' ],\\n    keywords: {\\n      keyword: KEYWORDS,\\n      type: TYPES,\\n      literal: LITERALS\\n    },\\n    contains: [\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.NUMBER_MODE,\\n      hljs.HASH_COMMENT_MODE,\\n      {\\n        className: 'meta',\\n        begin: /@0x[\\\\w\\\\d]{16};/,\\n        illegal: /\\\\n/\\n      },\\n      {\\n        className: 'symbol',\\n        begin: /@\\\\d+\\\\b/\\n      },\\n      CLASS_DEFINITION\\n    ]\\n  };\\n}\\n\\nmodule.exports = capnproto;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/capnproto.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/ceylon.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/ceylon.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Ceylon\\nAuthor: Lucas Werkmeister <mail@lucaswerkmeister.de>\\nWebsite: https://ceylon-lang.org\\n*/\\n\\n/** @type LanguageFn */\\nfunction ceylon(hljs) {\\n  // 2.3. Identifiers and keywords\\n  const KEYWORDS = [\\n    \\\"assembly\\\",\\n    \\\"module\\\",\\n    \\\"package\\\",\\n    \\\"import\\\",\\n    \\\"alias\\\",\\n    \\\"class\\\",\\n    \\\"interface\\\",\\n    \\\"object\\\",\\n    \\\"given\\\",\\n    \\\"value\\\",\\n    \\\"assign\\\",\\n    \\\"void\\\",\\n    \\\"function\\\",\\n    \\\"new\\\",\\n    \\\"of\\\",\\n    \\\"extends\\\",\\n    \\\"satisfies\\\",\\n    \\\"abstracts\\\",\\n    \\\"in\\\",\\n    \\\"out\\\",\\n    \\\"return\\\",\\n    \\\"break\\\",\\n    \\\"continue\\\",\\n    \\\"throw\\\",\\n    \\\"assert\\\",\\n    \\\"dynamic\\\",\\n    \\\"if\\\",\\n    \\\"else\\\",\\n    \\\"switch\\\",\\n    \\\"case\\\",\\n    \\\"for\\\",\\n    \\\"while\\\",\\n    \\\"try\\\",\\n    \\\"catch\\\",\\n    \\\"finally\\\",\\n    \\\"then\\\",\\n    \\\"let\\\",\\n    \\\"this\\\",\\n    \\\"outer\\\",\\n    \\\"super\\\",\\n    \\\"is\\\",\\n    \\\"exists\\\",\\n    \\\"nonempty\\\"\\n  ];\\n  // 7.4.1 Declaration Modifiers\\n  const DECLARATION_MODIFIERS = [\\n    \\\"shared\\\",\\n    \\\"abstract\\\",\\n    \\\"formal\\\",\\n    \\\"default\\\",\\n    \\\"actual\\\",\\n    \\\"variable\\\",\\n    \\\"late\\\",\\n    \\\"native\\\",\\n    \\\"deprecated\\\",\\n    \\\"final\\\",\\n    \\\"sealed\\\",\\n    \\\"annotation\\\",\\n    \\\"suppressWarnings\\\",\\n    \\\"small\\\"\\n  ];\\n  // 7.4.2 Documentation\\n  const DOCUMENTATION = [\\n    \\\"doc\\\",\\n    \\\"by\\\",\\n    \\\"license\\\",\\n    \\\"see\\\",\\n    \\\"throws\\\",\\n    \\\"tagged\\\"\\n  ];\\n  const SUBST = {\\n    className: 'subst',\\n    excludeBegin: true,\\n    excludeEnd: true,\\n    begin: /``/,\\n    end: /``/,\\n    keywords: KEYWORDS,\\n    relevance: 10\\n  };\\n  const EXPRESSIONS = [\\n    {\\n      // verbatim string\\n      className: 'string',\\n      begin: '\\\"\\\"\\\"',\\n      end: '\\\"\\\"\\\"',\\n      relevance: 10\\n    },\\n    {\\n      // string literal or template\\n      className: 'string',\\n      begin: '\\\"',\\n      end: '\\\"',\\n      contains: [ SUBST ]\\n    },\\n    {\\n      // character literal\\n      className: 'string',\\n      begin: \\\"'\\\",\\n      end: \\\"'\\\"\\n    },\\n    {\\n      // numeric literal\\n      className: 'number',\\n      begin: '#[0-9a-fA-F_]+|\\\\\\\\$[01_]+|[0-9_]+(?:\\\\\\\\.[0-9_](?:[eE][+-]?\\\\\\\\d+)?)?[kMGTPmunpf]?',\\n      relevance: 0\\n    }\\n  ];\\n  SUBST.contains = EXPRESSIONS;\\n\\n  return {\\n    name: 'Ceylon',\\n    keywords: {\\n      keyword: KEYWORDS.concat(DECLARATION_MODIFIERS),\\n      meta: DOCUMENTATION\\n    },\\n    illegal: '\\\\\\\\$[^01]|#[^0-9a-fA-F]',\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.COMMENT('/\\\\\\\\*', '\\\\\\\\*/', { contains: [ 'self' ] }),\\n      {\\n        // compiler annotation\\n        className: 'meta',\\n        begin: '@[a-z]\\\\\\\\w*(?::\\\"[^\\\"]*\\\")?'\\n      }\\n    ].concat(EXPRESSIONS)\\n  };\\n}\\n\\nmodule.exports = ceylon;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/ceylon.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/clean.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/clean.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Clean\\nAuthor: Camil Staps <info@camilstaps.nl>\\nCategory: functional\\nWebsite: http://clean.cs.ru.nl\\n*/\\n\\n/** @type LanguageFn */\\nfunction clean(hljs) {\\n  const KEYWORDS = [\\n    \\\"if\\\",\\n    \\\"let\\\",\\n    \\\"in\\\",\\n    \\\"with\\\",\\n    \\\"where\\\",\\n    \\\"case\\\",\\n    \\\"of\\\",\\n    \\\"class\\\",\\n    \\\"instance\\\",\\n    \\\"otherwise\\\",\\n    \\\"implementation\\\",\\n    \\\"definition\\\",\\n    \\\"system\\\",\\n    \\\"module\\\",\\n    \\\"from\\\",\\n    \\\"import\\\",\\n    \\\"qualified\\\",\\n    \\\"as\\\",\\n    \\\"special\\\",\\n    \\\"code\\\",\\n    \\\"inline\\\",\\n    \\\"foreign\\\",\\n    \\\"export\\\",\\n    \\\"ccall\\\",\\n    \\\"stdcall\\\",\\n    \\\"generic\\\",\\n    \\\"derive\\\",\\n    \\\"infix\\\",\\n    \\\"infixl\\\",\\n    \\\"infixr\\\"\\n  ];\\n  return {\\n    name: 'Clean',\\n    aliases: [\\n      'icl',\\n      'dcl'\\n    ],\\n    keywords: {\\n      keyword: KEYWORDS,\\n      built_in:\\n        'Int Real Char Bool',\\n      literal:\\n        'True False'\\n    },\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.C_NUMBER_MODE,\\n      { // relevance booster\\n        begin: '->|<-[|:]?|#!?|>>=|\\\\\\\\{\\\\\\\\||\\\\\\\\|\\\\\\\\}|:==|=:|<>' }\\n    ]\\n  };\\n}\\n\\nmodule.exports = clean;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/clean.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/clojure-repl.js\":\n/*!*****************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/clojure-repl.js ***!\n  \\*****************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Clojure REPL\\nDescription: Clojure REPL sessions\\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\\nRequires: clojure.js\\nWebsite: https://clojure.org\\nCategory: lisp\\n*/\\n\\n/** @type LanguageFn */\\nfunction clojureRepl(hljs) {\\n  return {\\n    name: 'Clojure REPL',\\n    contains: [\\n      {\\n        className: 'meta.prompt',\\n        begin: /^([\\\\w.-]+|\\\\s*#_)?=>/,\\n        starts: {\\n          end: /$/,\\n          subLanguage: 'clojure'\\n        }\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = clojureRepl;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/clojure-repl.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/clojure.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/clojure.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Clojure\\nDescription: Clojure syntax (based on lisp.js)\\nAuthor: mfornos\\nWebsite: https://clojure.org\\nCategory: lisp\\n*/\\n\\n/** @type LanguageFn */\\nfunction clojure(hljs) {\\n  const SYMBOLSTART = 'a-zA-Z_\\\\\\\\-!.?+*=<>&\\\\'';\\n  const SYMBOL_RE = '[#]?[' + SYMBOLSTART + '][' + SYMBOLSTART + '0-9/;:$#]*';\\n  const globals = 'def defonce defprotocol defstruct defmulti defmethod defn- defn defmacro deftype defrecord';\\n  const keywords = {\\n    $pattern: SYMBOL_RE,\\n    built_in:\\n      // Clojure keywords\\n      globals + ' '\\n      + 'cond apply if-not if-let if not not= =|0 <|0 >|0 <=|0 >=|0 ==|0 +|0 /|0 *|0 -|0 rem '\\n      + 'quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? '\\n      + 'set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? '\\n      + 'class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? '\\n      + 'string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . '\\n      + 'inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last '\\n      + 'drop-while while intern condp case reduced cycle split-at split-with repeat replicate '\\n      + 'iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext '\\n      + 'nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends '\\n      + 'add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler '\\n      + 'set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter '\\n      + 'monitor-exit macroexpand macroexpand-1 for dosync and or '\\n      + 'when when-not when-let comp juxt partial sequence memoize constantly complement identity assert '\\n      + 'peek pop doto proxy first rest cons cast coll last butlast '\\n      + 'sigs reify second ffirst fnext nfirst nnext meta with-meta ns in-ns create-ns import '\\n      + 'refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! '\\n      + 'assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger '\\n      + 'bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline '\\n      + 'flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking '\\n      + 'assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! '\\n      + 'reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! '\\n      + 'new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty '\\n      + 'hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list '\\n      + 'disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer '\\n      + 'chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate '\\n      + 'unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta '\\n      + 'lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize'\\n  };\\n\\n  const SYMBOL = {\\n    begin: SYMBOL_RE,\\n    relevance: 0\\n  };\\n  const NUMBER = {\\n    scope: 'number',\\n    relevance: 0,\\n    variants: [\\n      { match: /[-+]?0[xX][0-9a-fA-F]+N?/ }, // hexadecimal                 // 0x2a\\n      { match: /[-+]?0[0-7]+N?/ }, // octal                       // 052\\n      { match: /[-+]?[1-9][0-9]?[rR][0-9a-zA-Z]+N?/ }, // variable radix from 2 to 36 // 2r101010, 8r52, 36r16\\n      { match: /[-+]?[0-9]+\\\\/[0-9]+N?/ }, // ratio                       // 1/2\\n      { match: /[-+]?[0-9]+((\\\\.[0-9]*([eE][+-]?[0-9]+)?M?)|([eE][+-]?[0-9]+M?|M))/ }, // float        // 0.42 4.2E-1M 42E1 42M\\n      { match: /[-+]?([1-9][0-9]*|0)N?/ }, // int (don't match leading 0) // 42 42N\\n    ]\\n  };\\n  const CHARACTER = {\\n    scope: 'character',\\n    variants: [\\n      { match: /\\\\\\\\o[0-3]?[0-7]{1,2}/ }, // Unicode Octal 0 - 377\\n      { match: /\\\\\\\\u[0-9a-fA-F]{4}/ }, // Unicode Hex 0000 - FFFF\\n      { match: /\\\\\\\\(newline|space|tab|formfeed|backspace|return)/ }, // special characters\\n      {\\n        match: /\\\\\\\\\\\\S/,\\n        relevance: 0\\n      } // any non-whitespace char\\n    ]\\n  };\\n  const REGEX = {\\n    scope: 'regex',\\n    begin: /#\\\"/,\\n    end: /\\\"/,\\n    contains: [ hljs.BACKSLASH_ESCAPE ]\\n  };\\n  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });\\n  const COMMA = {\\n    scope: 'punctuation',\\n    match: /,/,\\n    relevance: 0\\n  };\\n  const COMMENT = hljs.COMMENT(\\n    ';',\\n    '$',\\n    { relevance: 0 }\\n  );\\n  const LITERAL = {\\n    className: 'literal',\\n    begin: /\\\\b(true|false|nil)\\\\b/\\n  };\\n  const COLLECTION = {\\n    begin: \\\"\\\\\\\\[|(#::?\\\" + SYMBOL_RE + \\\")?\\\\\\\\{\\\",\\n    end: '[\\\\\\\\]\\\\\\\\}]',\\n    relevance: 0\\n  };\\n  const KEY = {\\n    className: 'symbol',\\n    begin: '[:]{1,2}' + SYMBOL_RE\\n  };\\n  const LIST = {\\n    begin: '\\\\\\\\(',\\n    end: '\\\\\\\\)'\\n  };\\n  const BODY = {\\n    endsWithParent: true,\\n    relevance: 0\\n  };\\n  const NAME = {\\n    keywords: keywords,\\n    className: 'name',\\n    begin: SYMBOL_RE,\\n    relevance: 0,\\n    starts: BODY\\n  };\\n  const DEFAULT_CONTAINS = [\\n    COMMA,\\n    LIST,\\n    CHARACTER,\\n    REGEX,\\n    STRING,\\n    COMMENT,\\n    KEY,\\n    COLLECTION,\\n    NUMBER,\\n    LITERAL,\\n    SYMBOL\\n  ];\\n\\n  const GLOBAL = {\\n    beginKeywords: globals,\\n    keywords: {\\n      $pattern: SYMBOL_RE,\\n      keyword: globals\\n    },\\n    end: '(\\\\\\\\[|#|\\\\\\\\d|\\\"|:|\\\\\\\\{|\\\\\\\\)|\\\\\\\\(|$)',\\n    contains: [\\n      {\\n        className: 'title',\\n        begin: SYMBOL_RE,\\n        relevance: 0,\\n        excludeEnd: true,\\n        // we can only have a single title\\n        endsParent: true\\n      }\\n    ].concat(DEFAULT_CONTAINS)\\n  };\\n\\n  LIST.contains = [\\n    GLOBAL,\\n    NAME,\\n    BODY\\n  ];\\n  BODY.contains = DEFAULT_CONTAINS;\\n  COLLECTION.contains = DEFAULT_CONTAINS;\\n\\n  return {\\n    name: 'Clojure',\\n    aliases: [\\n      'clj',\\n      'edn'\\n    ],\\n    illegal: /\\\\S/,\\n    contains: [\\n      COMMA,\\n      LIST,\\n      CHARACTER,\\n      REGEX,\\n      STRING,\\n      COMMENT,\\n      KEY,\\n      COLLECTION,\\n      NUMBER,\\n      LITERAL\\n    ]\\n  };\\n}\\n\\nmodule.exports = clojure;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/clojure.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/cmake.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/cmake.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: CMake\\nDescription: CMake is an open-source cross-platform system for build automation.\\nAuthor: Igor Kalnitsky <igor@kalnitsky.org>\\nWebsite: https://cmake.org\\n*/\\n\\n/** @type LanguageFn */\\nfunction cmake(hljs) {\\n  return {\\n    name: 'CMake',\\n    aliases: [ 'cmake.in' ],\\n    case_insensitive: true,\\n    keywords: { keyword:\\n        // scripting commands\\n        'break cmake_host_system_information cmake_minimum_required cmake_parse_arguments '\\n        + 'cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro '\\n        + 'endwhile execute_process file find_file find_library find_package find_path '\\n        + 'find_program foreach function get_cmake_property get_directory_property '\\n        + 'get_filename_component get_property if include include_guard list macro '\\n        + 'mark_as_advanced math message option return separate_arguments '\\n        + 'set_directory_properties set_property set site_name string unset variable_watch while '\\n        // project commands\\n        + 'add_compile_definitions add_compile_options add_custom_command add_custom_target '\\n        + 'add_definitions add_dependencies add_executable add_library add_link_options '\\n        + 'add_subdirectory add_test aux_source_directory build_command create_test_sourcelist '\\n        + 'define_property enable_language enable_testing export fltk_wrap_ui '\\n        + 'get_source_file_property get_target_property get_test_property include_directories '\\n        + 'include_external_msproject include_regular_expression install link_directories '\\n        + 'link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions '\\n        + 'set_source_files_properties set_target_properties set_tests_properties source_group '\\n        + 'target_compile_definitions target_compile_features target_compile_options '\\n        + 'target_include_directories target_link_directories target_link_libraries '\\n        + 'target_link_options target_sources try_compile try_run '\\n        // CTest commands\\n        + 'ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck '\\n        + 'ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit '\\n        + 'ctest_test ctest_update ctest_upload '\\n        // deprecated commands\\n        + 'build_name exec_program export_library_dependencies install_files install_programs '\\n        + 'install_targets load_command make_directory output_required_files remove '\\n        + 'subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file '\\n        + 'qt5_use_modules qt5_use_package qt5_wrap_cpp '\\n        // core keywords\\n        + 'on off true false and or not command policy target test exists is_newer_than '\\n        + 'is_directory is_symlink is_absolute matches less greater equal less_equal '\\n        + 'greater_equal strless strgreater strequal strless_equal strgreater_equal version_less '\\n        + 'version_greater version_equal version_less_equal version_greater_equal in_list defined' },\\n    contains: [\\n      {\\n        className: 'variable',\\n        begin: /\\\\$\\\\{/,\\n        end: /\\\\}/\\n      },\\n      hljs.COMMENT(/#\\\\[\\\\[/, /]]/),\\n      hljs.HASH_COMMENT_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.NUMBER_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = cmake;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/cmake.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/coffeescript.js\":\n/*!*****************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/coffeescript.js ***!\n  \\*****************************************************************/\n/***/ (function(module) {\n\neval(\"const KEYWORDS = [\\n  \\\"as\\\", // for exports\\n  \\\"in\\\",\\n  \\\"of\\\",\\n  \\\"if\\\",\\n  \\\"for\\\",\\n  \\\"while\\\",\\n  \\\"finally\\\",\\n  \\\"var\\\",\\n  \\\"new\\\",\\n  \\\"function\\\",\\n  \\\"do\\\",\\n  \\\"return\\\",\\n  \\\"void\\\",\\n  \\\"else\\\",\\n  \\\"break\\\",\\n  \\\"catch\\\",\\n  \\\"instanceof\\\",\\n  \\\"with\\\",\\n  \\\"throw\\\",\\n  \\\"case\\\",\\n  \\\"default\\\",\\n  \\\"try\\\",\\n  \\\"switch\\\",\\n  \\\"continue\\\",\\n  \\\"typeof\\\",\\n  \\\"delete\\\",\\n  \\\"let\\\",\\n  \\\"yield\\\",\\n  \\\"const\\\",\\n  \\\"class\\\",\\n  // JS handles these with a special rule\\n  // \\\"get\\\",\\n  // \\\"set\\\",\\n  \\\"debugger\\\",\\n  \\\"async\\\",\\n  \\\"await\\\",\\n  \\\"static\\\",\\n  \\\"import\\\",\\n  \\\"from\\\",\\n  \\\"export\\\",\\n  \\\"extends\\\"\\n];\\nconst LITERALS = [\\n  \\\"true\\\",\\n  \\\"false\\\",\\n  \\\"null\\\",\\n  \\\"undefined\\\",\\n  \\\"NaN\\\",\\n  \\\"Infinity\\\"\\n];\\n\\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\\nconst TYPES = [\\n  // Fundamental objects\\n  \\\"Object\\\",\\n  \\\"Function\\\",\\n  \\\"Boolean\\\",\\n  \\\"Symbol\\\",\\n  // numbers and dates\\n  \\\"Math\\\",\\n  \\\"Date\\\",\\n  \\\"Number\\\",\\n  \\\"BigInt\\\",\\n  // text\\n  \\\"String\\\",\\n  \\\"RegExp\\\",\\n  // Indexed collections\\n  \\\"Array\\\",\\n  \\\"Float32Array\\\",\\n  \\\"Float64Array\\\",\\n  \\\"Int8Array\\\",\\n  \\\"Uint8Array\\\",\\n  \\\"Uint8ClampedArray\\\",\\n  \\\"Int16Array\\\",\\n  \\\"Int32Array\\\",\\n  \\\"Uint16Array\\\",\\n  \\\"Uint32Array\\\",\\n  \\\"BigInt64Array\\\",\\n  \\\"BigUint64Array\\\",\\n  // Keyed collections\\n  \\\"Set\\\",\\n  \\\"Map\\\",\\n  \\\"WeakSet\\\",\\n  \\\"WeakMap\\\",\\n  // Structured data\\n  \\\"ArrayBuffer\\\",\\n  \\\"SharedArrayBuffer\\\",\\n  \\\"Atomics\\\",\\n  \\\"DataView\\\",\\n  \\\"JSON\\\",\\n  // Control abstraction objects\\n  \\\"Promise\\\",\\n  \\\"Generator\\\",\\n  \\\"GeneratorFunction\\\",\\n  \\\"AsyncFunction\\\",\\n  // Reflection\\n  \\\"Reflect\\\",\\n  \\\"Proxy\\\",\\n  // Internationalization\\n  \\\"Intl\\\",\\n  // WebAssembly\\n  \\\"WebAssembly\\\"\\n];\\n\\nconst ERROR_TYPES = [\\n  \\\"Error\\\",\\n  \\\"EvalError\\\",\\n  \\\"InternalError\\\",\\n  \\\"RangeError\\\",\\n  \\\"ReferenceError\\\",\\n  \\\"SyntaxError\\\",\\n  \\\"TypeError\\\",\\n  \\\"URIError\\\"\\n];\\n\\nconst BUILT_IN_GLOBALS = [\\n  \\\"setInterval\\\",\\n  \\\"setTimeout\\\",\\n  \\\"clearInterval\\\",\\n  \\\"clearTimeout\\\",\\n\\n  \\\"require\\\",\\n  \\\"exports\\\",\\n\\n  \\\"eval\\\",\\n  \\\"isFinite\\\",\\n  \\\"isNaN\\\",\\n  \\\"parseFloat\\\",\\n  \\\"parseInt\\\",\\n  \\\"decodeURI\\\",\\n  \\\"decodeURIComponent\\\",\\n  \\\"encodeURI\\\",\\n  \\\"encodeURIComponent\\\",\\n  \\\"escape\\\",\\n  \\\"unescape\\\"\\n];\\n\\nconst BUILT_INS = [].concat(\\n  BUILT_IN_GLOBALS,\\n  TYPES,\\n  ERROR_TYPES\\n);\\n\\n/*\\nLanguage: CoffeeScript\\nAuthor: Dmytrii Nagirniak <dnagir@gmail.com>\\nContributors: Oleg Efimov <efimovov@gmail.com>, Cédric Néhémie <cedric.nehemie@gmail.com>\\nDescription: CoffeeScript is a programming language that transcompiles to JavaScript. For info about language see http://coffeescript.org/\\nCategory: scripting\\nWebsite: https://coffeescript.org\\n*/\\n\\n/** @type LanguageFn */\\nfunction coffeescript(hljs) {\\n  const COFFEE_BUILT_INS = [\\n    'npm',\\n    'print'\\n  ];\\n  const COFFEE_LITERALS = [\\n    'yes',\\n    'no',\\n    'on',\\n    'off'\\n  ];\\n  const COFFEE_KEYWORDS = [\\n    'then',\\n    'unless',\\n    'until',\\n    'loop',\\n    'by',\\n    'when',\\n    'and',\\n    'or',\\n    'is',\\n    'isnt',\\n    'not'\\n  ];\\n  const NOT_VALID_KEYWORDS = [\\n    \\\"var\\\",\\n    \\\"const\\\",\\n    \\\"let\\\",\\n    \\\"function\\\",\\n    \\\"static\\\"\\n  ];\\n  const excluding = (list) =>\\n    (kw) => !list.includes(kw);\\n  const KEYWORDS$1 = {\\n    keyword: KEYWORDS.concat(COFFEE_KEYWORDS).filter(excluding(NOT_VALID_KEYWORDS)),\\n    literal: LITERALS.concat(COFFEE_LITERALS),\\n    built_in: BUILT_INS.concat(COFFEE_BUILT_INS)\\n  };\\n  const JS_IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\\n  const SUBST = {\\n    className: 'subst',\\n    begin: /#\\\\{/,\\n    end: /\\\\}/,\\n    keywords: KEYWORDS$1\\n  };\\n  const EXPRESSIONS = [\\n    hljs.BINARY_NUMBER_MODE,\\n    hljs.inherit(hljs.C_NUMBER_MODE, { starts: {\\n      end: '(\\\\\\\\s*/)?',\\n      relevance: 0\\n    } }), // a number tries to eat the following slash to prevent treating it as a regexp\\n    {\\n      className: 'string',\\n      variants: [\\n        {\\n          begin: /'''/,\\n          end: /'''/,\\n          contains: [ hljs.BACKSLASH_ESCAPE ]\\n        },\\n        {\\n          begin: /'/,\\n          end: /'/,\\n          contains: [ hljs.BACKSLASH_ESCAPE ]\\n        },\\n        {\\n          begin: /\\\"\\\"\\\"/,\\n          end: /\\\"\\\"\\\"/,\\n          contains: [\\n            hljs.BACKSLASH_ESCAPE,\\n            SUBST\\n          ]\\n        },\\n        {\\n          begin: /\\\"/,\\n          end: /\\\"/,\\n          contains: [\\n            hljs.BACKSLASH_ESCAPE,\\n            SUBST\\n          ]\\n        }\\n      ]\\n    },\\n    {\\n      className: 'regexp',\\n      variants: [\\n        {\\n          begin: '///',\\n          end: '///',\\n          contains: [\\n            SUBST,\\n            hljs.HASH_COMMENT_MODE\\n          ]\\n        },\\n        {\\n          begin: '//[gim]{0,3}(?=\\\\\\\\W)',\\n          relevance: 0\\n        },\\n        {\\n          // regex can't start with space to parse x / 2 / 3 as two divisions\\n          // regex can't start with *, and it supports an \\\"illegal\\\" in the main mode\\n          begin: /\\\\/(?![ *]).*?(?![\\\\\\\\]).\\\\/[gim]{0,3}(?=\\\\W)/ }\\n      ]\\n    },\\n    { begin: '@' + JS_IDENT_RE // relevance booster\\n    },\\n    {\\n      subLanguage: 'javascript',\\n      excludeBegin: true,\\n      excludeEnd: true,\\n      variants: [\\n        {\\n          begin: '```',\\n          end: '```'\\n        },\\n        {\\n          begin: '`',\\n          end: '`'\\n        }\\n      ]\\n    }\\n  ];\\n  SUBST.contains = EXPRESSIONS;\\n\\n  const TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE });\\n  const POSSIBLE_PARAMS_RE = '(\\\\\\\\(.*\\\\\\\\)\\\\\\\\s*)?\\\\\\\\B[-=]>';\\n  const PARAMS = {\\n    className: 'params',\\n    begin: '\\\\\\\\([^\\\\\\\\(]',\\n    returnBegin: true,\\n    /* We need another contained nameless mode to not have every nested\\n    pair of parens to be called \\\"params\\\" */\\n    contains: [\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        keywords: KEYWORDS$1,\\n        contains: [ 'self' ].concat(EXPRESSIONS)\\n      }\\n    ]\\n  };\\n\\n  const CLASS_DEFINITION = {\\n    variants: [\\n      { match: [\\n        /class\\\\s+/,\\n        JS_IDENT_RE,\\n        /\\\\s+extends\\\\s+/,\\n        JS_IDENT_RE\\n      ] },\\n      { match: [\\n        /class\\\\s+/,\\n        JS_IDENT_RE\\n      ] }\\n    ],\\n    scope: {\\n      2: \\\"title.class\\\",\\n      4: \\\"title.class.inherited\\\"\\n    },\\n    keywords: KEYWORDS$1\\n  };\\n\\n  return {\\n    name: 'CoffeeScript',\\n    aliases: [\\n      'coffee',\\n      'cson',\\n      'iced'\\n    ],\\n    keywords: KEYWORDS$1,\\n    illegal: /\\\\/\\\\*/,\\n    contains: [\\n      ...EXPRESSIONS,\\n      hljs.COMMENT('###', '###'),\\n      hljs.HASH_COMMENT_MODE,\\n      {\\n        className: 'function',\\n        begin: '^\\\\\\\\s*' + JS_IDENT_RE + '\\\\\\\\s*=\\\\\\\\s*' + POSSIBLE_PARAMS_RE,\\n        end: '[-=]>',\\n        returnBegin: true,\\n        contains: [\\n          TITLE,\\n          PARAMS\\n        ]\\n      },\\n      {\\n        // anonymous function start\\n        begin: /[:\\\\(,=]\\\\s*/,\\n        relevance: 0,\\n        contains: [\\n          {\\n            className: 'function',\\n            begin: POSSIBLE_PARAMS_RE,\\n            end: '[-=]>',\\n            returnBegin: true,\\n            contains: [ PARAMS ]\\n          }\\n        ]\\n      },\\n      CLASS_DEFINITION,\\n      {\\n        begin: JS_IDENT_RE + ':',\\n        end: ':',\\n        returnBegin: true,\\n        returnEnd: true,\\n        relevance: 0\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = coffeescript;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/coffeescript.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/coq.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/coq.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Coq\\nAuthor: Stephan Boyer <stephan@stephanboyer.com>\\nCategory: functional\\nWebsite: https://coq.inria.fr\\n*/\\n\\n/** @type LanguageFn */\\nfunction coq(hljs) {\\n  const KEYWORDS = [\\n    \\\"_|0\\\",\\n    \\\"as\\\",\\n    \\\"at\\\",\\n    \\\"cofix\\\",\\n    \\\"else\\\",\\n    \\\"end\\\",\\n    \\\"exists\\\",\\n    \\\"exists2\\\",\\n    \\\"fix\\\",\\n    \\\"for\\\",\\n    \\\"forall\\\",\\n    \\\"fun\\\",\\n    \\\"if\\\",\\n    \\\"IF\\\",\\n    \\\"in\\\",\\n    \\\"let\\\",\\n    \\\"match\\\",\\n    \\\"mod\\\",\\n    \\\"Prop\\\",\\n    \\\"return\\\",\\n    \\\"Set\\\",\\n    \\\"then\\\",\\n    \\\"Type\\\",\\n    \\\"using\\\",\\n    \\\"where\\\",\\n    \\\"with\\\",\\n    \\\"Abort\\\",\\n    \\\"About\\\",\\n    \\\"Add\\\",\\n    \\\"Admit\\\",\\n    \\\"Admitted\\\",\\n    \\\"All\\\",\\n    \\\"Arguments\\\",\\n    \\\"Assumptions\\\",\\n    \\\"Axiom\\\",\\n    \\\"Back\\\",\\n    \\\"BackTo\\\",\\n    \\\"Backtrack\\\",\\n    \\\"Bind\\\",\\n    \\\"Blacklist\\\",\\n    \\\"Canonical\\\",\\n    \\\"Cd\\\",\\n    \\\"Check\\\",\\n    \\\"Class\\\",\\n    \\\"Classes\\\",\\n    \\\"Close\\\",\\n    \\\"Coercion\\\",\\n    \\\"Coercions\\\",\\n    \\\"CoFixpoint\\\",\\n    \\\"CoInductive\\\",\\n    \\\"Collection\\\",\\n    \\\"Combined\\\",\\n    \\\"Compute\\\",\\n    \\\"Conjecture\\\",\\n    \\\"Conjectures\\\",\\n    \\\"Constant\\\",\\n    \\\"constr\\\",\\n    \\\"Constraint\\\",\\n    \\\"Constructors\\\",\\n    \\\"Context\\\",\\n    \\\"Corollary\\\",\\n    \\\"CreateHintDb\\\",\\n    \\\"Cut\\\",\\n    \\\"Declare\\\",\\n    \\\"Defined\\\",\\n    \\\"Definition\\\",\\n    \\\"Delimit\\\",\\n    \\\"Dependencies\\\",\\n    \\\"Dependent\\\",\\n    \\\"Derive\\\",\\n    \\\"Drop\\\",\\n    \\\"eauto\\\",\\n    \\\"End\\\",\\n    \\\"Equality\\\",\\n    \\\"Eval\\\",\\n    \\\"Example\\\",\\n    \\\"Existential\\\",\\n    \\\"Existentials\\\",\\n    \\\"Existing\\\",\\n    \\\"Export\\\",\\n    \\\"exporting\\\",\\n    \\\"Extern\\\",\\n    \\\"Extract\\\",\\n    \\\"Extraction\\\",\\n    \\\"Fact\\\",\\n    \\\"Field\\\",\\n    \\\"Fields\\\",\\n    \\\"File\\\",\\n    \\\"Fixpoint\\\",\\n    \\\"Focus\\\",\\n    \\\"for\\\",\\n    \\\"From\\\",\\n    \\\"Function\\\",\\n    \\\"Functional\\\",\\n    \\\"Generalizable\\\",\\n    \\\"Global\\\",\\n    \\\"Goal\\\",\\n    \\\"Grab\\\",\\n    \\\"Grammar\\\",\\n    \\\"Graph\\\",\\n    \\\"Guarded\\\",\\n    \\\"Heap\\\",\\n    \\\"Hint\\\",\\n    \\\"HintDb\\\",\\n    \\\"Hints\\\",\\n    \\\"Hypotheses\\\",\\n    \\\"Hypothesis\\\",\\n    \\\"ident\\\",\\n    \\\"Identity\\\",\\n    \\\"If\\\",\\n    \\\"Immediate\\\",\\n    \\\"Implicit\\\",\\n    \\\"Import\\\",\\n    \\\"Include\\\",\\n    \\\"Inductive\\\",\\n    \\\"Infix\\\",\\n    \\\"Info\\\",\\n    \\\"Initial\\\",\\n    \\\"Inline\\\",\\n    \\\"Inspect\\\",\\n    \\\"Instance\\\",\\n    \\\"Instances\\\",\\n    \\\"Intro\\\",\\n    \\\"Intros\\\",\\n    \\\"Inversion\\\",\\n    \\\"Inversion_clear\\\",\\n    \\\"Language\\\",\\n    \\\"Left\\\",\\n    \\\"Lemma\\\",\\n    \\\"Let\\\",\\n    \\\"Libraries\\\",\\n    \\\"Library\\\",\\n    \\\"Load\\\",\\n    \\\"LoadPath\\\",\\n    \\\"Local\\\",\\n    \\\"Locate\\\",\\n    \\\"Ltac\\\",\\n    \\\"ML\\\",\\n    \\\"Mode\\\",\\n    \\\"Module\\\",\\n    \\\"Modules\\\",\\n    \\\"Monomorphic\\\",\\n    \\\"Morphism\\\",\\n    \\\"Next\\\",\\n    \\\"NoInline\\\",\\n    \\\"Notation\\\",\\n    \\\"Obligation\\\",\\n    \\\"Obligations\\\",\\n    \\\"Opaque\\\",\\n    \\\"Open\\\",\\n    \\\"Optimize\\\",\\n    \\\"Options\\\",\\n    \\\"Parameter\\\",\\n    \\\"Parameters\\\",\\n    \\\"Parametric\\\",\\n    \\\"Path\\\",\\n    \\\"Paths\\\",\\n    \\\"pattern\\\",\\n    \\\"Polymorphic\\\",\\n    \\\"Preterm\\\",\\n    \\\"Print\\\",\\n    \\\"Printing\\\",\\n    \\\"Program\\\",\\n    \\\"Projections\\\",\\n    \\\"Proof\\\",\\n    \\\"Proposition\\\",\\n    \\\"Pwd\\\",\\n    \\\"Qed\\\",\\n    \\\"Quit\\\",\\n    \\\"Rec\\\",\\n    \\\"Record\\\",\\n    \\\"Recursive\\\",\\n    \\\"Redirect\\\",\\n    \\\"Relation\\\",\\n    \\\"Remark\\\",\\n    \\\"Remove\\\",\\n    \\\"Require\\\",\\n    \\\"Reserved\\\",\\n    \\\"Reset\\\",\\n    \\\"Resolve\\\",\\n    \\\"Restart\\\",\\n    \\\"Rewrite\\\",\\n    \\\"Right\\\",\\n    \\\"Ring\\\",\\n    \\\"Rings\\\",\\n    \\\"Save\\\",\\n    \\\"Scheme\\\",\\n    \\\"Scope\\\",\\n    \\\"Scopes\\\",\\n    \\\"Script\\\",\\n    \\\"Search\\\",\\n    \\\"SearchAbout\\\",\\n    \\\"SearchHead\\\",\\n    \\\"SearchPattern\\\",\\n    \\\"SearchRewrite\\\",\\n    \\\"Section\\\",\\n    \\\"Separate\\\",\\n    \\\"Set\\\",\\n    \\\"Setoid\\\",\\n    \\\"Show\\\",\\n    \\\"Solve\\\",\\n    \\\"Sorted\\\",\\n    \\\"Step\\\",\\n    \\\"Strategies\\\",\\n    \\\"Strategy\\\",\\n    \\\"Structure\\\",\\n    \\\"SubClass\\\",\\n    \\\"Table\\\",\\n    \\\"Tables\\\",\\n    \\\"Tactic\\\",\\n    \\\"Term\\\",\\n    \\\"Test\\\",\\n    \\\"Theorem\\\",\\n    \\\"Time\\\",\\n    \\\"Timeout\\\",\\n    \\\"Transparent\\\",\\n    \\\"Type\\\",\\n    \\\"Typeclasses\\\",\\n    \\\"Types\\\",\\n    \\\"Undelimit\\\",\\n    \\\"Undo\\\",\\n    \\\"Unfocus\\\",\\n    \\\"Unfocused\\\",\\n    \\\"Unfold\\\",\\n    \\\"Universe\\\",\\n    \\\"Universes\\\",\\n    \\\"Unset\\\",\\n    \\\"Unshelve\\\",\\n    \\\"using\\\",\\n    \\\"Variable\\\",\\n    \\\"Variables\\\",\\n    \\\"Variant\\\",\\n    \\\"Verbose\\\",\\n    \\\"Visibility\\\",\\n    \\\"where\\\",\\n    \\\"with\\\"\\n  ];\\n  const BUILT_INS = [\\n    \\\"abstract\\\",\\n    \\\"absurd\\\",\\n    \\\"admit\\\",\\n    \\\"after\\\",\\n    \\\"apply\\\",\\n    \\\"as\\\",\\n    \\\"assert\\\",\\n    \\\"assumption\\\",\\n    \\\"at\\\",\\n    \\\"auto\\\",\\n    \\\"autorewrite\\\",\\n    \\\"autounfold\\\",\\n    \\\"before\\\",\\n    \\\"bottom\\\",\\n    \\\"btauto\\\",\\n    \\\"by\\\",\\n    \\\"case\\\",\\n    \\\"case_eq\\\",\\n    \\\"cbn\\\",\\n    \\\"cbv\\\",\\n    \\\"change\\\",\\n    \\\"classical_left\\\",\\n    \\\"classical_right\\\",\\n    \\\"clear\\\",\\n    \\\"clearbody\\\",\\n    \\\"cofix\\\",\\n    \\\"compare\\\",\\n    \\\"compute\\\",\\n    \\\"congruence\\\",\\n    \\\"constr_eq\\\",\\n    \\\"constructor\\\",\\n    \\\"contradict\\\",\\n    \\\"contradiction\\\",\\n    \\\"cut\\\",\\n    \\\"cutrewrite\\\",\\n    \\\"cycle\\\",\\n    \\\"decide\\\",\\n    \\\"decompose\\\",\\n    \\\"dependent\\\",\\n    \\\"destruct\\\",\\n    \\\"destruction\\\",\\n    \\\"dintuition\\\",\\n    \\\"discriminate\\\",\\n    \\\"discrR\\\",\\n    \\\"do\\\",\\n    \\\"double\\\",\\n    \\\"dtauto\\\",\\n    \\\"eapply\\\",\\n    \\\"eassumption\\\",\\n    \\\"eauto\\\",\\n    \\\"ecase\\\",\\n    \\\"econstructor\\\",\\n    \\\"edestruct\\\",\\n    \\\"ediscriminate\\\",\\n    \\\"eelim\\\",\\n    \\\"eexact\\\",\\n    \\\"eexists\\\",\\n    \\\"einduction\\\",\\n    \\\"einjection\\\",\\n    \\\"eleft\\\",\\n    \\\"elim\\\",\\n    \\\"elimtype\\\",\\n    \\\"enough\\\",\\n    \\\"equality\\\",\\n    \\\"erewrite\\\",\\n    \\\"eright\\\",\\n    \\\"esimplify_eq\\\",\\n    \\\"esplit\\\",\\n    \\\"evar\\\",\\n    \\\"exact\\\",\\n    \\\"exactly_once\\\",\\n    \\\"exfalso\\\",\\n    \\\"exists\\\",\\n    \\\"f_equal\\\",\\n    \\\"fail\\\",\\n    \\\"field\\\",\\n    \\\"field_simplify\\\",\\n    \\\"field_simplify_eq\\\",\\n    \\\"first\\\",\\n    \\\"firstorder\\\",\\n    \\\"fix\\\",\\n    \\\"fold\\\",\\n    \\\"fourier\\\",\\n    \\\"functional\\\",\\n    \\\"generalize\\\",\\n    \\\"generalizing\\\",\\n    \\\"gfail\\\",\\n    \\\"give_up\\\",\\n    \\\"has_evar\\\",\\n    \\\"hnf\\\",\\n    \\\"idtac\\\",\\n    \\\"in\\\",\\n    \\\"induction\\\",\\n    \\\"injection\\\",\\n    \\\"instantiate\\\",\\n    \\\"intro\\\",\\n    \\\"intro_pattern\\\",\\n    \\\"intros\\\",\\n    \\\"intuition\\\",\\n    \\\"inversion\\\",\\n    \\\"inversion_clear\\\",\\n    \\\"is_evar\\\",\\n    \\\"is_var\\\",\\n    \\\"lapply\\\",\\n    \\\"lazy\\\",\\n    \\\"left\\\",\\n    \\\"lia\\\",\\n    \\\"lra\\\",\\n    \\\"move\\\",\\n    \\\"native_compute\\\",\\n    \\\"nia\\\",\\n    \\\"nsatz\\\",\\n    \\\"omega\\\",\\n    \\\"once\\\",\\n    \\\"pattern\\\",\\n    \\\"pose\\\",\\n    \\\"progress\\\",\\n    \\\"proof\\\",\\n    \\\"psatz\\\",\\n    \\\"quote\\\",\\n    \\\"record\\\",\\n    \\\"red\\\",\\n    \\\"refine\\\",\\n    \\\"reflexivity\\\",\\n    \\\"remember\\\",\\n    \\\"rename\\\",\\n    \\\"repeat\\\",\\n    \\\"replace\\\",\\n    \\\"revert\\\",\\n    \\\"revgoals\\\",\\n    \\\"rewrite\\\",\\n    \\\"rewrite_strat\\\",\\n    \\\"right\\\",\\n    \\\"ring\\\",\\n    \\\"ring_simplify\\\",\\n    \\\"rtauto\\\",\\n    \\\"set\\\",\\n    \\\"setoid_reflexivity\\\",\\n    \\\"setoid_replace\\\",\\n    \\\"setoid_rewrite\\\",\\n    \\\"setoid_symmetry\\\",\\n    \\\"setoid_transitivity\\\",\\n    \\\"shelve\\\",\\n    \\\"shelve_unifiable\\\",\\n    \\\"simpl\\\",\\n    \\\"simple\\\",\\n    \\\"simplify_eq\\\",\\n    \\\"solve\\\",\\n    \\\"specialize\\\",\\n    \\\"split\\\",\\n    \\\"split_Rabs\\\",\\n    \\\"split_Rmult\\\",\\n    \\\"stepl\\\",\\n    \\\"stepr\\\",\\n    \\\"subst\\\",\\n    \\\"sum\\\",\\n    \\\"swap\\\",\\n    \\\"symmetry\\\",\\n    \\\"tactic\\\",\\n    \\\"tauto\\\",\\n    \\\"time\\\",\\n    \\\"timeout\\\",\\n    \\\"top\\\",\\n    \\\"transitivity\\\",\\n    \\\"trivial\\\",\\n    \\\"try\\\",\\n    \\\"tryif\\\",\\n    \\\"unfold\\\",\\n    \\\"unify\\\",\\n    \\\"until\\\",\\n    \\\"using\\\",\\n    \\\"vm_compute\\\",\\n    \\\"with\\\"\\n  ];\\n  return {\\n    name: 'Coq',\\n    keywords: {\\n      keyword: KEYWORDS,\\n      built_in: BUILT_INS\\n    },\\n    contains: [\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.COMMENT('\\\\\\\\(\\\\\\\\*', '\\\\\\\\*\\\\\\\\)'),\\n      hljs.C_NUMBER_MODE,\\n      {\\n        className: 'type',\\n        excludeBegin: true,\\n        begin: '\\\\\\\\|\\\\\\\\s*',\\n        end: '\\\\\\\\w+'\\n      },\\n      { // relevance booster\\n        begin: /[-=]>/ }\\n    ]\\n  };\\n}\\n\\nmodule.exports = coq;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/coq.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/cos.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/cos.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Caché Object Script\\nAuthor: Nikita Savchenko <zitros.lab@gmail.com>\\nCategory: enterprise, scripting\\nWebsite: https://cedocs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls\\n*/\\n\\n/** @type LanguageFn */\\nfunction cos(hljs) {\\n  const STRINGS = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: '\\\"',\\n        end: '\\\"',\\n        contains: [\\n          { // escaped\\n            begin: \\\"\\\\\\\"\\\\\\\"\\\",\\n            relevance: 0\\n          }\\n        ]\\n      }\\n    ]\\n  };\\n\\n  const NUMBERS = {\\n    className: \\\"number\\\",\\n    begin: \\\"\\\\\\\\b(\\\\\\\\d+(\\\\\\\\.\\\\\\\\d*)?|\\\\\\\\.\\\\\\\\d+)\\\",\\n    relevance: 0\\n  };\\n\\n  const COS_KEYWORDS =\\n    'property parameter class classmethod clientmethod extends as break '\\n    + 'catch close continue do d|0 else elseif for goto halt hang h|0 if job '\\n    + 'j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 '\\n    + 'tcommit throw trollback try tstart use view while write w|0 xecute x|0 '\\n    + 'zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert '\\n    + 'zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit '\\n    + 'zsync ascii';\\n\\n  // registered function - no need in them due to all functions are highlighted,\\n  // but I'll just leave this here.\\n\\n  // \\\"$bit\\\", \\\"$bitcount\\\",\\n  // \\\"$bitfind\\\", \\\"$bitlogic\\\", \\\"$case\\\", \\\"$char\\\", \\\"$classmethod\\\", \\\"$classname\\\",\\n  // \\\"$compile\\\", \\\"$data\\\", \\\"$decimal\\\", \\\"$double\\\", \\\"$extract\\\", \\\"$factor\\\",\\n  // \\\"$find\\\", \\\"$fnumber\\\", \\\"$get\\\", \\\"$increment\\\", \\\"$inumber\\\", \\\"$isobject\\\",\\n  // \\\"$isvaliddouble\\\", \\\"$isvalidnum\\\", \\\"$justify\\\", \\\"$length\\\", \\\"$list\\\",\\n  // \\\"$listbuild\\\", \\\"$listdata\\\", \\\"$listfind\\\", \\\"$listfromstring\\\", \\\"$listget\\\",\\n  // \\\"$listlength\\\", \\\"$listnext\\\", \\\"$listsame\\\", \\\"$listtostring\\\", \\\"$listvalid\\\",\\n  // \\\"$locate\\\", \\\"$match\\\", \\\"$method\\\", \\\"$name\\\", \\\"$nconvert\\\", \\\"$next\\\",\\n  // \\\"$normalize\\\", \\\"$now\\\", \\\"$number\\\", \\\"$order\\\", \\\"$parameter\\\", \\\"$piece\\\",\\n  // \\\"$prefetchoff\\\", \\\"$prefetchon\\\", \\\"$property\\\", \\\"$qlength\\\", \\\"$qsubscript\\\",\\n  // \\\"$query\\\", \\\"$random\\\", \\\"$replace\\\", \\\"$reverse\\\", \\\"$sconvert\\\", \\\"$select\\\",\\n  // \\\"$sortbegin\\\", \\\"$sortend\\\", \\\"$stack\\\", \\\"$text\\\", \\\"$translate\\\", \\\"$view\\\",\\n  // \\\"$wascii\\\", \\\"$wchar\\\", \\\"$wextract\\\", \\\"$wfind\\\", \\\"$wiswide\\\", \\\"$wlength\\\",\\n  // \\\"$wreverse\\\", \\\"$xecute\\\", \\\"$zabs\\\", \\\"$zarccos\\\", \\\"$zarcsin\\\", \\\"$zarctan\\\",\\n  // \\\"$zcos\\\", \\\"$zcot\\\", \\\"$zcsc\\\", \\\"$zdate\\\", \\\"$zdateh\\\", \\\"$zdatetime\\\",\\n  // \\\"$zdatetimeh\\\", \\\"$zexp\\\", \\\"$zhex\\\", \\\"$zln\\\", \\\"$zlog\\\", \\\"$zpower\\\", \\\"$zsec\\\",\\n  // \\\"$zsin\\\", \\\"$zsqr\\\", \\\"$ztan\\\", \\\"$ztime\\\", \\\"$ztimeh\\\", \\\"$zboolean\\\",\\n  // \\\"$zconvert\\\", \\\"$zcrc\\\", \\\"$zcyc\\\", \\\"$zdascii\\\", \\\"$zdchar\\\", \\\"$zf\\\",\\n  // \\\"$ziswide\\\", \\\"$zlascii\\\", \\\"$zlchar\\\", \\\"$zname\\\", \\\"$zposition\\\", \\\"$zqascii\\\",\\n  // \\\"$zqchar\\\", \\\"$zsearch\\\", \\\"$zseek\\\", \\\"$zstrip\\\", \\\"$zwascii\\\", \\\"$zwchar\\\",\\n  // \\\"$zwidth\\\", \\\"$zwpack\\\", \\\"$zwbpack\\\", \\\"$zwunpack\\\", \\\"$zwbunpack\\\", \\\"$zzenkaku\\\",\\n  // \\\"$change\\\", \\\"$mv\\\", \\\"$mvat\\\", \\\"$mvfmt\\\", \\\"$mvfmts\\\", \\\"$mviconv\\\",\\n  // \\\"$mviconvs\\\", \\\"$mvinmat\\\", \\\"$mvlover\\\", \\\"$mvoconv\\\", \\\"$mvoconvs\\\", \\\"$mvraise\\\",\\n  // \\\"$mvtrans\\\", \\\"$mvv\\\", \\\"$mvname\\\", \\\"$zbitand\\\", \\\"$zbitcount\\\", \\\"$zbitfind\\\",\\n  // \\\"$zbitget\\\", \\\"$zbitlen\\\", \\\"$zbitnot\\\", \\\"$zbitor\\\", \\\"$zbitset\\\", \\\"$zbitstr\\\",\\n  // \\\"$zbitxor\\\", \\\"$zincrement\\\", \\\"$znext\\\", \\\"$zorder\\\", \\\"$zprevious\\\", \\\"$zsort\\\",\\n  // \\\"device\\\", \\\"$ecode\\\", \\\"$estack\\\", \\\"$etrap\\\", \\\"$halt\\\", \\\"$horolog\\\",\\n  // \\\"$io\\\", \\\"$job\\\", \\\"$key\\\", \\\"$namespace\\\", \\\"$principal\\\", \\\"$quit\\\", \\\"$roles\\\",\\n  // \\\"$storage\\\", \\\"$system\\\", \\\"$test\\\", \\\"$this\\\", \\\"$tlevel\\\", \\\"$username\\\",\\n  // \\\"$x\\\", \\\"$y\\\", \\\"$za\\\", \\\"$zb\\\", \\\"$zchild\\\", \\\"$zeof\\\", \\\"$zeos\\\", \\\"$zerror\\\",\\n  // \\\"$zhorolog\\\", \\\"$zio\\\", \\\"$zjob\\\", \\\"$zmode\\\", \\\"$znspace\\\", \\\"$zparent\\\", \\\"$zpi\\\",\\n  // \\\"$zpos\\\", \\\"$zreference\\\", \\\"$zstorage\\\", \\\"$ztimestamp\\\", \\\"$ztimezone\\\",\\n  // \\\"$ztrap\\\", \\\"$zversion\\\"\\n\\n  return {\\n    name: 'Caché Object Script',\\n    case_insensitive: true,\\n    aliases: [ \\\"cls\\\" ],\\n    keywords: COS_KEYWORDS,\\n    contains: [\\n      NUMBERS,\\n      STRINGS,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      {\\n        className: \\\"comment\\\",\\n        begin: /;/,\\n        end: \\\"$\\\",\\n        relevance: 0\\n      },\\n      { // Functions and user-defined functions: write $ztime(60*60*3), $$myFunc(10), $$^Val(1)\\n        className: \\\"built_in\\\",\\n        begin: /(?:\\\\$\\\\$?|\\\\.\\\\.)\\\\^?[a-zA-Z]+/\\n      },\\n      { // Macro command: quit $$$OK\\n        className: \\\"built_in\\\",\\n        begin: /\\\\$\\\\$\\\\$[a-zA-Z]+/\\n      },\\n      { // Special (global) variables: write %request.Content; Built-in classes: %Library.Integer\\n        className: \\\"built_in\\\",\\n        begin: /%[a-z]+(?:\\\\.[a-z]+)*/\\n      },\\n      { // Global variable: set ^globalName = 12 write ^globalName\\n        className: \\\"symbol\\\",\\n        begin: /\\\\^%?[a-zA-Z][\\\\w]*/\\n      },\\n      { // Some control constructions: do ##class(Package.ClassName).Method(), ##super()\\n        className: \\\"keyword\\\",\\n        begin: /##class|##super|#define|#dim/\\n      },\\n      // sub-languages: are not fully supported by hljs by 11/15/2015\\n      // left for the future implementation.\\n      {\\n        begin: /&sql\\\\(/,\\n        end: /\\\\)/,\\n        excludeBegin: true,\\n        excludeEnd: true,\\n        subLanguage: \\\"sql\\\"\\n      },\\n      {\\n        begin: /&(js|jscript|javascript)</,\\n        end: />/,\\n        excludeBegin: true,\\n        excludeEnd: true,\\n        subLanguage: \\\"javascript\\\"\\n      },\\n      {\\n        // this brakes first and last tag, but this is the only way to embed a valid html\\n        begin: /&html<\\\\s*</,\\n        end: />\\\\s*>/,\\n        subLanguage: \\\"xml\\\"\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = cos;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/cos.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/cpp.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/cpp.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: C++\\nCategory: common, system\\nWebsite: https://isocpp.org\\n*/\\n\\n/** @type LanguageFn */\\nfunction cpp(hljs) {\\n  const regex = hljs.regex;\\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\\n  // not include such support nor can we be sure all the grammars depending\\n  // on it would desire this behavior\\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\\\\\\\n/ } ] });\\n  const DECLTYPE_AUTO_RE = 'decltype\\\\\\\\(auto\\\\\\\\)';\\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\\\\\w*::';\\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\\n  const FUNCTION_TYPE_RE = '(?!struct)('\\n    + DECLTYPE_AUTO_RE + '|'\\n    + regex.optional(NAMESPACE_RE)\\n    + '[a-zA-Z_]\\\\\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\\n  + ')';\\n\\n  const CPP_PRIMITIVE_TYPES = {\\n    className: 'type',\\n    begin: '\\\\\\\\b[a-z\\\\\\\\d_]*_t\\\\\\\\b'\\n  };\\n\\n  // https://en.cppreference.com/w/cpp/language/escape\\n  // \\\\\\\\ \\\\x \\\\xFF \\\\u2837 \\\\u00323747 \\\\374\\n  const CHARACTER_ESCAPES = '\\\\\\\\\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\\\\\S)';\\n  const STRINGS = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: '(u8?|U|L)?\\\"',\\n        end: '\\\"',\\n        illegal: '\\\\\\\\n',\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      },\\n      {\\n        begin: '(u8?|U|L)?\\\\'(' + CHARACTER_ESCAPES + '|.)',\\n        end: '\\\\'',\\n        illegal: '.'\\n      },\\n      hljs.END_SAME_AS_BEGIN({\\n        begin: /(?:u8?|U|L)?R\\\"([^()\\\\\\\\ ]{0,16})\\\\(/,\\n        end: /\\\\)([^()\\\\\\\\ ]{0,16})\\\"/\\n      })\\n    ]\\n  };\\n\\n  const NUMBERS = {\\n    className: 'number',\\n    variants: [\\n      { begin: '\\\\\\\\b(0b[01\\\\']+)' },\\n      { begin: '(-?)\\\\\\\\b([\\\\\\\\d\\\\']+(\\\\\\\\.[\\\\\\\\d\\\\']*)?|\\\\\\\\.[\\\\\\\\d\\\\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },\\n      { begin: '(-?)(\\\\\\\\b0[xX][a-fA-F0-9\\\\']+|(\\\\\\\\b[\\\\\\\\d\\\\']+(\\\\\\\\.[\\\\\\\\d\\\\']*)?|\\\\\\\\.[\\\\\\\\d\\\\']+)([eE][-+]?[\\\\\\\\d\\\\']+)?)' }\\n    ],\\n    relevance: 0\\n  };\\n\\n  const PREPROCESSOR = {\\n    className: 'meta',\\n    begin: /#\\\\s*[a-z]+\\\\b/,\\n    end: /$/,\\n    keywords: { keyword:\\n        'if else elif endif define undef warning error line '\\n        + 'pragma _Pragma ifdef ifndef include' },\\n    contains: [\\n      {\\n        begin: /\\\\\\\\\\\\n/,\\n        relevance: 0\\n      },\\n      hljs.inherit(STRINGS, { className: 'string' }),\\n      {\\n        className: 'string',\\n        begin: /<.*?>/\\n      },\\n      C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE\\n    ]\\n  };\\n\\n  const TITLE_MODE = {\\n    className: 'title',\\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\\n    relevance: 0\\n  };\\n\\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\\\\\s*\\\\\\\\(';\\n\\n  // https://en.cppreference.com/w/cpp/keyword\\n  const RESERVED_KEYWORDS = [\\n    'alignas',\\n    'alignof',\\n    'and',\\n    'and_eq',\\n    'asm',\\n    'atomic_cancel',\\n    'atomic_commit',\\n    'atomic_noexcept',\\n    'auto',\\n    'bitand',\\n    'bitor',\\n    'break',\\n    'case',\\n    'catch',\\n    'class',\\n    'co_await',\\n    'co_return',\\n    'co_yield',\\n    'compl',\\n    'concept',\\n    'const_cast|10',\\n    'consteval',\\n    'constexpr',\\n    'constinit',\\n    'continue',\\n    'decltype',\\n    'default',\\n    'delete',\\n    'do',\\n    'dynamic_cast|10',\\n    'else',\\n    'enum',\\n    'explicit',\\n    'export',\\n    'extern',\\n    'false',\\n    'final',\\n    'for',\\n    'friend',\\n    'goto',\\n    'if',\\n    'import',\\n    'inline',\\n    'module',\\n    'mutable',\\n    'namespace',\\n    'new',\\n    'noexcept',\\n    'not',\\n    'not_eq',\\n    'nullptr',\\n    'operator',\\n    'or',\\n    'or_eq',\\n    'override',\\n    'private',\\n    'protected',\\n    'public',\\n    'reflexpr',\\n    'register',\\n    'reinterpret_cast|10',\\n    'requires',\\n    'return',\\n    'sizeof',\\n    'static_assert',\\n    'static_cast|10',\\n    'struct',\\n    'switch',\\n    'synchronized',\\n    'template',\\n    'this',\\n    'thread_local',\\n    'throw',\\n    'transaction_safe',\\n    'transaction_safe_dynamic',\\n    'true',\\n    'try',\\n    'typedef',\\n    'typeid',\\n    'typename',\\n    'union',\\n    'using',\\n    'virtual',\\n    'volatile',\\n    'while',\\n    'xor',\\n    'xor_eq'\\n  ];\\n\\n  // https://en.cppreference.com/w/cpp/keyword\\n  const RESERVED_TYPES = [\\n    'bool',\\n    'char',\\n    'char16_t',\\n    'char32_t',\\n    'char8_t',\\n    'double',\\n    'float',\\n    'int',\\n    'long',\\n    'short',\\n    'void',\\n    'wchar_t',\\n    'unsigned',\\n    'signed',\\n    'const',\\n    'static'\\n  ];\\n\\n  const TYPE_HINTS = [\\n    'any',\\n    'auto_ptr',\\n    'barrier',\\n    'binary_semaphore',\\n    'bitset',\\n    'complex',\\n    'condition_variable',\\n    'condition_variable_any',\\n    'counting_semaphore',\\n    'deque',\\n    'false_type',\\n    'future',\\n    'imaginary',\\n    'initializer_list',\\n    'istringstream',\\n    'jthread',\\n    'latch',\\n    'lock_guard',\\n    'multimap',\\n    'multiset',\\n    'mutex',\\n    'optional',\\n    'ostringstream',\\n    'packaged_task',\\n    'pair',\\n    'promise',\\n    'priority_queue',\\n    'queue',\\n    'recursive_mutex',\\n    'recursive_timed_mutex',\\n    'scoped_lock',\\n    'set',\\n    'shared_future',\\n    'shared_lock',\\n    'shared_mutex',\\n    'shared_timed_mutex',\\n    'shared_ptr',\\n    'stack',\\n    'string_view',\\n    'stringstream',\\n    'timed_mutex',\\n    'thread',\\n    'true_type',\\n    'tuple',\\n    'unique_lock',\\n    'unique_ptr',\\n    'unordered_map',\\n    'unordered_multimap',\\n    'unordered_multiset',\\n    'unordered_set',\\n    'variant',\\n    'vector',\\n    'weak_ptr',\\n    'wstring',\\n    'wstring_view'\\n  ];\\n\\n  const FUNCTION_HINTS = [\\n    'abort',\\n    'abs',\\n    'acos',\\n    'apply',\\n    'as_const',\\n    'asin',\\n    'atan',\\n    'atan2',\\n    'calloc',\\n    'ceil',\\n    'cerr',\\n    'cin',\\n    'clog',\\n    'cos',\\n    'cosh',\\n    'cout',\\n    'declval',\\n    'endl',\\n    'exchange',\\n    'exit',\\n    'exp',\\n    'fabs',\\n    'floor',\\n    'fmod',\\n    'forward',\\n    'fprintf',\\n    'fputs',\\n    'free',\\n    'frexp',\\n    'fscanf',\\n    'future',\\n    'invoke',\\n    'isalnum',\\n    'isalpha',\\n    'iscntrl',\\n    'isdigit',\\n    'isgraph',\\n    'islower',\\n    'isprint',\\n    'ispunct',\\n    'isspace',\\n    'isupper',\\n    'isxdigit',\\n    'labs',\\n    'launder',\\n    'ldexp',\\n    'log',\\n    'log10',\\n    'make_pair',\\n    'make_shared',\\n    'make_shared_for_overwrite',\\n    'make_tuple',\\n    'make_unique',\\n    'malloc',\\n    'memchr',\\n    'memcmp',\\n    'memcpy',\\n    'memset',\\n    'modf',\\n    'move',\\n    'pow',\\n    'printf',\\n    'putchar',\\n    'puts',\\n    'realloc',\\n    'scanf',\\n    'sin',\\n    'sinh',\\n    'snprintf',\\n    'sprintf',\\n    'sqrt',\\n    'sscanf',\\n    'std',\\n    'stderr',\\n    'stdin',\\n    'stdout',\\n    'strcat',\\n    'strchr',\\n    'strcmp',\\n    'strcpy',\\n    'strcspn',\\n    'strlen',\\n    'strncat',\\n    'strncmp',\\n    'strncpy',\\n    'strpbrk',\\n    'strrchr',\\n    'strspn',\\n    'strstr',\\n    'swap',\\n    'tan',\\n    'tanh',\\n    'terminate',\\n    'to_underlying',\\n    'tolower',\\n    'toupper',\\n    'vfprintf',\\n    'visit',\\n    'vprintf',\\n    'vsprintf'\\n  ];\\n\\n  const LITERALS = [\\n    'NULL',\\n    'false',\\n    'nullopt',\\n    'nullptr',\\n    'true'\\n  ];\\n\\n  // https://en.cppreference.com/w/cpp/keyword\\n  const BUILT_IN = [ '_Pragma' ];\\n\\n  const CPP_KEYWORDS = {\\n    type: RESERVED_TYPES,\\n    keyword: RESERVED_KEYWORDS,\\n    literal: LITERALS,\\n    built_in: BUILT_IN,\\n    _type_hints: TYPE_HINTS\\n  };\\n\\n  const FUNCTION_DISPATCH = {\\n    className: 'function.dispatch',\\n    relevance: 0,\\n    keywords: {\\n      // Only for relevance, not highlighting.\\n      _hint: FUNCTION_HINTS },\\n    begin: regex.concat(\\n      /\\\\b/,\\n      /(?!decltype)/,\\n      /(?!if)/,\\n      /(?!for)/,\\n      /(?!switch)/,\\n      /(?!while)/,\\n      hljs.IDENT_RE,\\n      regex.lookahead(/(<[^<>]+>|)\\\\s*\\\\(/))\\n  };\\n\\n  const EXPRESSION_CONTAINS = [\\n    FUNCTION_DISPATCH,\\n    PREPROCESSOR,\\n    CPP_PRIMITIVE_TYPES,\\n    C_LINE_COMMENT_MODE,\\n    hljs.C_BLOCK_COMMENT_MODE,\\n    NUMBERS,\\n    STRINGS\\n  ];\\n\\n  const EXPRESSION_CONTEXT = {\\n    // This mode covers expression context where we can't expect a function\\n    // definition and shouldn't highlight anything that looks like one:\\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\\n    variants: [\\n      {\\n        begin: /=/,\\n        end: /;/\\n      },\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/\\n      },\\n      {\\n        beginKeywords: 'new throw return else',\\n        end: /;/\\n      }\\n    ],\\n    keywords: CPP_KEYWORDS,\\n    contains: EXPRESSION_CONTAINS.concat([\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        keywords: CPP_KEYWORDS,\\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\\n        relevance: 0\\n      }\\n    ]),\\n    relevance: 0\\n  };\\n\\n  const FUNCTION_DECLARATION = {\\n    className: 'function',\\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\\\\\*&\\\\\\\\s]+)+' + FUNCTION_TITLE,\\n    returnBegin: true,\\n    end: /[{;=]/,\\n    excludeEnd: true,\\n    keywords: CPP_KEYWORDS,\\n    illegal: /[^\\\\w\\\\s\\\\*&:<>.]/,\\n    contains: [\\n      { // to prevent it from being confused as the function title\\n        begin: DECLTYPE_AUTO_RE,\\n        keywords: CPP_KEYWORDS,\\n        relevance: 0\\n      },\\n      {\\n        begin: FUNCTION_TITLE,\\n        returnBegin: true,\\n        contains: [ TITLE_MODE ],\\n        relevance: 0\\n      },\\n      // needed because we do not have look-behind on the below rule\\n      // to prevent it from grabbing the final : in a :: pair\\n      {\\n        begin: /::/,\\n        relevance: 0\\n      },\\n      // initializers\\n      {\\n        begin: /:/,\\n        endsWithParent: true,\\n        contains: [\\n          STRINGS,\\n          NUMBERS\\n        ]\\n      },\\n      // allow for multiple declarations, e.g.:\\n      // extern void f(int), g(char);\\n      {\\n        relevance: 0,\\n        match: /,/\\n      },\\n      {\\n        className: 'params',\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        keywords: CPP_KEYWORDS,\\n        relevance: 0,\\n        contains: [\\n          C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE,\\n          STRINGS,\\n          NUMBERS,\\n          CPP_PRIMITIVE_TYPES,\\n          // Count matching parentheses.\\n          {\\n            begin: /\\\\(/,\\n            end: /\\\\)/,\\n            keywords: CPP_KEYWORDS,\\n            relevance: 0,\\n            contains: [\\n              'self',\\n              C_LINE_COMMENT_MODE,\\n              hljs.C_BLOCK_COMMENT_MODE,\\n              STRINGS,\\n              NUMBERS,\\n              CPP_PRIMITIVE_TYPES\\n            ]\\n          }\\n        ]\\n      },\\n      CPP_PRIMITIVE_TYPES,\\n      C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      PREPROCESSOR\\n    ]\\n  };\\n\\n  return {\\n    name: 'C++',\\n    aliases: [\\n      'cc',\\n      'c++',\\n      'h++',\\n      'hpp',\\n      'hh',\\n      'hxx',\\n      'cxx'\\n    ],\\n    keywords: CPP_KEYWORDS,\\n    illegal: '</',\\n    classNameAliases: { 'function.dispatch': 'built_in' },\\n    contains: [].concat(\\n      EXPRESSION_CONTEXT,\\n      FUNCTION_DECLARATION,\\n      FUNCTION_DISPATCH,\\n      EXPRESSION_CONTAINS,\\n      [\\n        PREPROCESSOR,\\n        { // containers: ie, `vector <int> rooms (9);`\\n          begin: '\\\\\\\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\\\\\\\s*<(?!<)',\\n          end: '>',\\n          keywords: CPP_KEYWORDS,\\n          contains: [\\n            'self',\\n            CPP_PRIMITIVE_TYPES\\n          ]\\n        },\\n        {\\n          begin: hljs.IDENT_RE + '::',\\n          keywords: CPP_KEYWORDS\\n        },\\n        {\\n          match: [\\n            // extra complexity to deal with `enum class` and `enum struct`\\n            /\\\\b(?:enum(?:\\\\s+(?:class|struct))?|class|struct|union)/,\\n            /\\\\s+/,\\n            /\\\\w+/\\n          ],\\n          className: {\\n            1: 'keyword',\\n            3: 'title.class'\\n          }\\n        }\\n      ])\\n  };\\n}\\n\\nmodule.exports = cpp;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/cpp.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/crmsh.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/crmsh.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: crmsh\\nAuthor: Kristoffer Gronlund <kgronlund@suse.com>\\nWebsite: http://crmsh.github.io\\nDescription: Syntax Highlighting for the crmsh DSL\\nCategory: config\\n*/\\n\\n/** @type LanguageFn */\\nfunction crmsh(hljs) {\\n  const RESOURCES = 'primitive rsc_template';\\n  const COMMANDS = 'group clone ms master location colocation order fencing_topology '\\n      + 'rsc_ticket acl_target acl_group user role '\\n      + 'tag xml';\\n  const PROPERTY_SETS = 'property rsc_defaults op_defaults';\\n  const KEYWORDS = 'params meta operations op rule attributes utilization';\\n  const OPERATORS = 'read write deny defined not_defined in_range date spec in '\\n      + 'ref reference attribute type xpath version and or lt gt tag '\\n      + 'lte gte eq ne \\\\\\\\';\\n  const TYPES = 'number string';\\n  const LITERALS = 'Master Started Slave Stopped start promote demote stop monitor true false';\\n\\n  return {\\n    name: 'crmsh',\\n    aliases: [\\n      'crm',\\n      'pcmk'\\n    ],\\n    case_insensitive: true,\\n    keywords: {\\n      keyword: KEYWORDS + ' ' + OPERATORS + ' ' + TYPES,\\n      literal: LITERALS\\n    },\\n    contains: [\\n      hljs.HASH_COMMENT_MODE,\\n      {\\n        beginKeywords: 'node',\\n        starts: {\\n          end: '\\\\\\\\s*([\\\\\\\\w_-]+:)?',\\n          starts: {\\n            className: 'title',\\n            end: '\\\\\\\\s*[\\\\\\\\$\\\\\\\\w_][\\\\\\\\w_-]*'\\n          }\\n        }\\n      },\\n      {\\n        beginKeywords: RESOURCES,\\n        starts: {\\n          className: 'title',\\n          end: '\\\\\\\\s*[\\\\\\\\$\\\\\\\\w_][\\\\\\\\w_-]*',\\n          starts: { end: '\\\\\\\\s*@?[\\\\\\\\w_][\\\\\\\\w_\\\\\\\\.:-]*' }\\n        }\\n      },\\n      {\\n        begin: '\\\\\\\\b(' + COMMANDS.split(' ').join('|') + ')\\\\\\\\s+',\\n        keywords: COMMANDS,\\n        starts: {\\n          className: 'title',\\n          end: '[\\\\\\\\$\\\\\\\\w_][\\\\\\\\w_-]*'\\n        }\\n      },\\n      {\\n        beginKeywords: PROPERTY_SETS,\\n        starts: {\\n          className: 'title',\\n          end: '\\\\\\\\s*([\\\\\\\\w_-]+:)?'\\n        }\\n      },\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'meta',\\n        begin: '(ocf|systemd|service|lsb):[\\\\\\\\w_:-]+',\\n        relevance: 0\\n      },\\n      {\\n        className: 'number',\\n        begin: '\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+)?(ms|s|h|m)?',\\n        relevance: 0\\n      },\\n      {\\n        className: 'literal',\\n        begin: '[-]?(infinity|inf)',\\n        relevance: 0\\n      },\\n      {\\n        className: 'attr',\\n        begin: /([A-Za-z$_#][\\\\w_-]+)=/,\\n        relevance: 0\\n      },\\n      {\\n        className: 'tag',\\n        begin: '</?',\\n        end: '/?>',\\n        relevance: 0\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = crmsh;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/crmsh.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/crystal.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/crystal.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Crystal\\nAuthor: TSUYUSATO Kitsune <make.just.on@gmail.com>\\nWebsite: https://crystal-lang.org\\n*/\\n\\n/** @type LanguageFn */\\nfunction crystal(hljs) {\\n  const INT_SUFFIX = '(_?[ui](8|16|32|64|128))?';\\n  const FLOAT_SUFFIX = '(_?f(32|64))?';\\n  const CRYSTAL_IDENT_RE = '[a-zA-Z_]\\\\\\\\w*[!?=]?';\\n  const CRYSTAL_METHOD_RE = '[a-zA-Z_]\\\\\\\\w*[!?=]?|[-+~]@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\\\\\\\*\\\\\\\\*|[-/+%^&*~|]|//|//=|&[-+*]=?|&\\\\\\\\*\\\\\\\\*|\\\\\\\\[\\\\\\\\][=?]?';\\n  const CRYSTAL_PATH_RE = '[A-Za-z_]\\\\\\\\w*(::\\\\\\\\w+)*(\\\\\\\\?|!)?';\\n  const CRYSTAL_KEYWORDS = {\\n    $pattern: CRYSTAL_IDENT_RE,\\n    keyword:\\n      'abstract alias annotation as as? asm begin break case class def do else elsif end ensure enum extend for fun if '\\n      + 'include instance_sizeof is_a? lib macro module next nil? of out pointerof private protected rescue responds_to? '\\n      + 'return require select self sizeof struct super then type typeof union uninitialized unless until verbatim when while with yield '\\n      + '__DIR__ __END_LINE__ __FILE__ __LINE__',\\n    literal: 'false nil true'\\n  };\\n  const SUBST = {\\n    className: 'subst',\\n    begin: /#\\\\{/,\\n    end: /\\\\}/,\\n    keywords: CRYSTAL_KEYWORDS\\n  };\\n  // borrowed from Ruby\\n  const VARIABLE = {\\n    // negative-look forward attemps to prevent false matches like:\\n    // @ident@ or $ident$ that might indicate this is not ruby at all\\n    className: \\\"variable\\\",\\n    begin: '(\\\\\\\\$\\\\\\\\W)|((\\\\\\\\$|@@?)(\\\\\\\\w+))(?=[^@$?])' + `(?![A-Za-z])(?![@$?'])`\\n  };\\n  const EXPANSION = {\\n    className: 'template-variable',\\n    variants: [\\n      {\\n        begin: '\\\\\\\\{\\\\\\\\{',\\n        end: '\\\\\\\\}\\\\\\\\}'\\n      },\\n      {\\n        begin: '\\\\\\\\{%',\\n        end: '%\\\\\\\\}'\\n      }\\n    ],\\n    keywords: CRYSTAL_KEYWORDS\\n  };\\n\\n  function recursiveParen(begin, end) {\\n    const\\n        contains = [\\n          {\\n            begin: begin,\\n            end: end\\n          }\\n        ];\\n    contains[0].contains = contains;\\n    return contains;\\n  }\\n  const STRING = {\\n    className: 'string',\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      SUBST\\n    ],\\n    variants: [\\n      {\\n        begin: /'/,\\n        end: /'/\\n      },\\n      {\\n        begin: /\\\"/,\\n        end: /\\\"/\\n      },\\n      {\\n        begin: /`/,\\n        end: /`/\\n      },\\n      {\\n        begin: '%[Qwi]?\\\\\\\\(',\\n        end: '\\\\\\\\)',\\n        contains: recursiveParen('\\\\\\\\(', '\\\\\\\\)')\\n      },\\n      {\\n        begin: '%[Qwi]?\\\\\\\\[',\\n        end: '\\\\\\\\]',\\n        contains: recursiveParen('\\\\\\\\[', '\\\\\\\\]')\\n      },\\n      {\\n        begin: '%[Qwi]?\\\\\\\\{',\\n        end: /\\\\}/,\\n        contains: recursiveParen(/\\\\{/, /\\\\}/)\\n      },\\n      {\\n        begin: '%[Qwi]?<',\\n        end: '>',\\n        contains: recursiveParen('<', '>')\\n      },\\n      {\\n        begin: '%[Qwi]?\\\\\\\\|',\\n        end: '\\\\\\\\|'\\n      },\\n      {\\n        begin: /<<-\\\\w+$/,\\n        end: /^\\\\s*\\\\w+$/\\n      }\\n    ],\\n    relevance: 0\\n  };\\n  const Q_STRING = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: '%q\\\\\\\\(',\\n        end: '\\\\\\\\)',\\n        contains: recursiveParen('\\\\\\\\(', '\\\\\\\\)')\\n      },\\n      {\\n        begin: '%q\\\\\\\\[',\\n        end: '\\\\\\\\]',\\n        contains: recursiveParen('\\\\\\\\[', '\\\\\\\\]')\\n      },\\n      {\\n        begin: '%q\\\\\\\\{',\\n        end: /\\\\}/,\\n        contains: recursiveParen(/\\\\{/, /\\\\}/)\\n      },\\n      {\\n        begin: '%q<',\\n        end: '>',\\n        contains: recursiveParen('<', '>')\\n      },\\n      {\\n        begin: '%q\\\\\\\\|',\\n        end: '\\\\\\\\|'\\n      },\\n      {\\n        begin: /<<-'\\\\w+'$/,\\n        end: /^\\\\s*\\\\w+$/\\n      }\\n    ],\\n    relevance: 0\\n  };\\n  const REGEXP = {\\n    begin: '(?!%\\\\\\\\})(' + hljs.RE_STARTERS_RE + '|\\\\\\\\n|\\\\\\\\b(case|if|select|unless|until|when|while)\\\\\\\\b)\\\\\\\\s*',\\n    keywords: 'case if select unless until when while',\\n    contains: [\\n      {\\n        className: 'regexp',\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          SUBST\\n        ],\\n        variants: [\\n          {\\n            begin: '//[a-z]*',\\n            relevance: 0\\n          },\\n          {\\n            begin: '/(?!\\\\\\\\/)',\\n            end: '/[a-z]*'\\n          }\\n        ]\\n      }\\n    ],\\n    relevance: 0\\n  };\\n  const REGEXP2 = {\\n    className: 'regexp',\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      SUBST\\n    ],\\n    variants: [\\n      {\\n        begin: '%r\\\\\\\\(',\\n        end: '\\\\\\\\)',\\n        contains: recursiveParen('\\\\\\\\(', '\\\\\\\\)')\\n      },\\n      {\\n        begin: '%r\\\\\\\\[',\\n        end: '\\\\\\\\]',\\n        contains: recursiveParen('\\\\\\\\[', '\\\\\\\\]')\\n      },\\n      {\\n        begin: '%r\\\\\\\\{',\\n        end: /\\\\}/,\\n        contains: recursiveParen(/\\\\{/, /\\\\}/)\\n      },\\n      {\\n        begin: '%r<',\\n        end: '>',\\n        contains: recursiveParen('<', '>')\\n      },\\n      {\\n        begin: '%r\\\\\\\\|',\\n        end: '\\\\\\\\|'\\n      }\\n    ],\\n    relevance: 0\\n  };\\n  const ATTRIBUTE = {\\n    className: 'meta',\\n    begin: '@\\\\\\\\[',\\n    end: '\\\\\\\\]',\\n    contains: [ hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' }) ]\\n  };\\n  const CRYSTAL_DEFAULT_CONTAINS = [\\n    EXPANSION,\\n    STRING,\\n    Q_STRING,\\n    REGEXP2,\\n    REGEXP,\\n    ATTRIBUTE,\\n    VARIABLE,\\n    hljs.HASH_COMMENT_MODE,\\n    {\\n      className: 'class',\\n      beginKeywords: 'class module struct',\\n      end: '$|;',\\n      illegal: /=/,\\n      contains: [\\n        hljs.HASH_COMMENT_MODE,\\n        hljs.inherit(hljs.TITLE_MODE, { begin: CRYSTAL_PATH_RE }),\\n        { // relevance booster for inheritance\\n          begin: '<' }\\n      ]\\n    },\\n    {\\n      className: 'class',\\n      beginKeywords: 'lib enum union',\\n      end: '$|;',\\n      illegal: /=/,\\n      contains: [\\n        hljs.HASH_COMMENT_MODE,\\n        hljs.inherit(hljs.TITLE_MODE, { begin: CRYSTAL_PATH_RE })\\n      ]\\n    },\\n    {\\n      beginKeywords: 'annotation',\\n      end: '$|;',\\n      illegal: /=/,\\n      contains: [\\n        hljs.HASH_COMMENT_MODE,\\n        hljs.inherit(hljs.TITLE_MODE, { begin: CRYSTAL_PATH_RE })\\n      ],\\n      relevance: 2\\n    },\\n    {\\n      className: 'function',\\n      beginKeywords: 'def',\\n      end: /\\\\B\\\\b/,\\n      contains: [\\n        hljs.inherit(hljs.TITLE_MODE, {\\n          begin: CRYSTAL_METHOD_RE,\\n          endsParent: true\\n        })\\n      ]\\n    },\\n    {\\n      className: 'function',\\n      beginKeywords: 'fun macro',\\n      end: /\\\\B\\\\b/,\\n      contains: [\\n        hljs.inherit(hljs.TITLE_MODE, {\\n          begin: CRYSTAL_METHOD_RE,\\n          endsParent: true\\n        })\\n      ],\\n      relevance: 2\\n    },\\n    {\\n      className: 'symbol',\\n      begin: hljs.UNDERSCORE_IDENT_RE + '(!|\\\\\\\\?)?:',\\n      relevance: 0\\n    },\\n    {\\n      className: 'symbol',\\n      begin: ':',\\n      contains: [\\n        STRING,\\n        { begin: CRYSTAL_METHOD_RE }\\n      ],\\n      relevance: 0\\n    },\\n    {\\n      className: 'number',\\n      variants: [\\n        { begin: '\\\\\\\\b0b([01_]+)' + INT_SUFFIX },\\n        { begin: '\\\\\\\\b0o([0-7_]+)' + INT_SUFFIX },\\n        { begin: '\\\\\\\\b0x([A-Fa-f0-9_]+)' + INT_SUFFIX },\\n        { begin: '\\\\\\\\b([1-9][0-9_]*[0-9]|[0-9])(\\\\\\\\.[0-9][0-9_]*)?([eE]_?[-+]?[0-9_]*)?' + FLOAT_SUFFIX + '(?!_)' },\\n        { begin: '\\\\\\\\b([1-9][0-9_]*|0)' + INT_SUFFIX }\\n      ],\\n      relevance: 0\\n    }\\n  ];\\n  SUBST.contains = CRYSTAL_DEFAULT_CONTAINS;\\n  EXPANSION.contains = CRYSTAL_DEFAULT_CONTAINS.slice(1); // without EXPANSION\\n\\n  return {\\n    name: 'Crystal',\\n    aliases: [ 'cr' ],\\n    keywords: CRYSTAL_KEYWORDS,\\n    contains: CRYSTAL_DEFAULT_CONTAINS\\n  };\\n}\\n\\nmodule.exports = crystal;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/crystal.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/csharp.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/csharp.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: C#\\nAuthor: Jason Diamond <jason@diamond.name>\\nContributor: Nicolas LLOBERA <nllobera@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>, David Pine <david.pine@microsoft.com>\\nWebsite: https://docs.microsoft.com/dotnet/csharp/\\nCategory: common\\n*/\\n\\n/** @type LanguageFn */\\nfunction csharp(hljs) {\\n  const BUILT_IN_KEYWORDS = [\\n    'bool',\\n    'byte',\\n    'char',\\n    'decimal',\\n    'delegate',\\n    'double',\\n    'dynamic',\\n    'enum',\\n    'float',\\n    'int',\\n    'long',\\n    'nint',\\n    'nuint',\\n    'object',\\n    'sbyte',\\n    'short',\\n    'string',\\n    'ulong',\\n    'uint',\\n    'ushort'\\n  ];\\n  const FUNCTION_MODIFIERS = [\\n    'public',\\n    'private',\\n    'protected',\\n    'static',\\n    'internal',\\n    'protected',\\n    'abstract',\\n    'async',\\n    'extern',\\n    'override',\\n    'unsafe',\\n    'virtual',\\n    'new',\\n    'sealed',\\n    'partial'\\n  ];\\n  const LITERAL_KEYWORDS = [\\n    'default',\\n    'false',\\n    'null',\\n    'true'\\n  ];\\n  const NORMAL_KEYWORDS = [\\n    'abstract',\\n    'as',\\n    'base',\\n    'break',\\n    'case',\\n    'catch',\\n    'class',\\n    'const',\\n    'continue',\\n    'do',\\n    'else',\\n    'event',\\n    'explicit',\\n    'extern',\\n    'finally',\\n    'fixed',\\n    'for',\\n    'foreach',\\n    'goto',\\n    'if',\\n    'implicit',\\n    'in',\\n    'interface',\\n    'internal',\\n    'is',\\n    'lock',\\n    'namespace',\\n    'new',\\n    'operator',\\n    'out',\\n    'override',\\n    'params',\\n    'private',\\n    'protected',\\n    'public',\\n    'readonly',\\n    'record',\\n    'ref',\\n    'return',\\n    'scoped',\\n    'sealed',\\n    'sizeof',\\n    'stackalloc',\\n    'static',\\n    'struct',\\n    'switch',\\n    'this',\\n    'throw',\\n    'try',\\n    'typeof',\\n    'unchecked',\\n    'unsafe',\\n    'using',\\n    'virtual',\\n    'void',\\n    'volatile',\\n    'while'\\n  ];\\n  const CONTEXTUAL_KEYWORDS = [\\n    'add',\\n    'alias',\\n    'and',\\n    'ascending',\\n    'async',\\n    'await',\\n    'by',\\n    'descending',\\n    'equals',\\n    'from',\\n    'get',\\n    'global',\\n    'group',\\n    'init',\\n    'into',\\n    'join',\\n    'let',\\n    'nameof',\\n    'not',\\n    'notnull',\\n    'on',\\n    'or',\\n    'orderby',\\n    'partial',\\n    'remove',\\n    'select',\\n    'set',\\n    'unmanaged',\\n    'value|0',\\n    'var',\\n    'when',\\n    'where',\\n    'with',\\n    'yield'\\n  ];\\n\\n  const KEYWORDS = {\\n    keyword: NORMAL_KEYWORDS.concat(CONTEXTUAL_KEYWORDS),\\n    built_in: BUILT_IN_KEYWORDS,\\n    literal: LITERAL_KEYWORDS\\n  };\\n  const TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, { begin: '[a-zA-Z](\\\\\\\\.?\\\\\\\\w)*' });\\n  const NUMBERS = {\\n    className: 'number',\\n    variants: [\\n      { begin: '\\\\\\\\b(0b[01\\\\']+)' },\\n      { begin: '(-?)\\\\\\\\b([\\\\\\\\d\\\\']+(\\\\\\\\.[\\\\\\\\d\\\\']*)?|\\\\\\\\.[\\\\\\\\d\\\\']+)(u|U|l|L|ul|UL|f|F|b|B)' },\\n      { begin: '(-?)(\\\\\\\\b0[xX][a-fA-F0-9\\\\']+|(\\\\\\\\b[\\\\\\\\d\\\\']+(\\\\\\\\.[\\\\\\\\d\\\\']*)?|\\\\\\\\.[\\\\\\\\d\\\\']+)([eE][-+]?[\\\\\\\\d\\\\']+)?)' }\\n    ],\\n    relevance: 0\\n  };\\n  const VERBATIM_STRING = {\\n    className: 'string',\\n    begin: '@\\\"',\\n    end: '\\\"',\\n    contains: [ { begin: '\\\"\\\"' } ]\\n  };\\n  const VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, { illegal: /\\\\n/ });\\n  const SUBST = {\\n    className: 'subst',\\n    begin: /\\\\{/,\\n    end: /\\\\}/,\\n    keywords: KEYWORDS\\n  };\\n  const SUBST_NO_LF = hljs.inherit(SUBST, { illegal: /\\\\n/ });\\n  const INTERPOLATED_STRING = {\\n    className: 'string',\\n    begin: /\\\\$\\\"/,\\n    end: '\\\"',\\n    illegal: /\\\\n/,\\n    contains: [\\n      { begin: /\\\\{\\\\{/ },\\n      { begin: /\\\\}\\\\}/ },\\n      hljs.BACKSLASH_ESCAPE,\\n      SUBST_NO_LF\\n    ]\\n  };\\n  const INTERPOLATED_VERBATIM_STRING = {\\n    className: 'string',\\n    begin: /\\\\$@\\\"/,\\n    end: '\\\"',\\n    contains: [\\n      { begin: /\\\\{\\\\{/ },\\n      { begin: /\\\\}\\\\}/ },\\n      { begin: '\\\"\\\"' },\\n      SUBST\\n    ]\\n  };\\n  const INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {\\n    illegal: /\\\\n/,\\n    contains: [\\n      { begin: /\\\\{\\\\{/ },\\n      { begin: /\\\\}\\\\}/ },\\n      { begin: '\\\"\\\"' },\\n      SUBST_NO_LF\\n    ]\\n  });\\n  SUBST.contains = [\\n    INTERPOLATED_VERBATIM_STRING,\\n    INTERPOLATED_STRING,\\n    VERBATIM_STRING,\\n    hljs.APOS_STRING_MODE,\\n    hljs.QUOTE_STRING_MODE,\\n    NUMBERS,\\n    hljs.C_BLOCK_COMMENT_MODE\\n  ];\\n  SUBST_NO_LF.contains = [\\n    INTERPOLATED_VERBATIM_STRING_NO_LF,\\n    INTERPOLATED_STRING,\\n    VERBATIM_STRING_NO_LF,\\n    hljs.APOS_STRING_MODE,\\n    hljs.QUOTE_STRING_MODE,\\n    NUMBERS,\\n    hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, { illegal: /\\\\n/ })\\n  ];\\n  const STRING = { variants: [\\n    INTERPOLATED_VERBATIM_STRING,\\n    INTERPOLATED_STRING,\\n    VERBATIM_STRING,\\n    hljs.APOS_STRING_MODE,\\n    hljs.QUOTE_STRING_MODE\\n  ] };\\n\\n  const GENERIC_MODIFIER = {\\n    begin: \\\"<\\\",\\n    end: \\\">\\\",\\n    contains: [\\n      { beginKeywords: \\\"in out\\\" },\\n      TITLE_MODE\\n    ]\\n  };\\n  const TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\\\\\\\s*,\\\\\\\\s*' + hljs.IDENT_RE + ')*>)?(\\\\\\\\[\\\\\\\\])?';\\n  const AT_IDENTIFIER = {\\n    // prevents expressions like `@class` from incorrect flagging\\n    // `class` as a keyword\\n    begin: \\\"@\\\" + hljs.IDENT_RE,\\n    relevance: 0\\n  };\\n\\n  return {\\n    name: 'C#',\\n    aliases: [\\n      'cs',\\n      'c#'\\n    ],\\n    keywords: KEYWORDS,\\n    illegal: /::/,\\n    contains: [\\n      hljs.COMMENT(\\n        '///',\\n        '$',\\n        {\\n          returnBegin: true,\\n          contains: [\\n            {\\n              className: 'doctag',\\n              variants: [\\n                {\\n                  begin: '///',\\n                  relevance: 0\\n                },\\n                { begin: '<!--|-->' },\\n                {\\n                  begin: '</?',\\n                  end: '>'\\n                }\\n              ]\\n            }\\n          ]\\n        }\\n      ),\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      {\\n        className: 'meta',\\n        begin: '#',\\n        end: '$',\\n        keywords: { keyword: 'if else elif endif define undef warning error line region endregion pragma checksum' }\\n      },\\n      STRING,\\n      NUMBERS,\\n      {\\n        beginKeywords: 'class interface',\\n        relevance: 0,\\n        end: /[{;=]/,\\n        illegal: /[^\\\\s:,]/,\\n        contains: [\\n          { beginKeywords: \\\"where class\\\" },\\n          TITLE_MODE,\\n          GENERIC_MODIFIER,\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE\\n        ]\\n      },\\n      {\\n        beginKeywords: 'namespace',\\n        relevance: 0,\\n        end: /[{;=]/,\\n        illegal: /[^\\\\s:]/,\\n        contains: [\\n          TITLE_MODE,\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE\\n        ]\\n      },\\n      {\\n        beginKeywords: 'record',\\n        relevance: 0,\\n        end: /[{;=]/,\\n        illegal: /[^\\\\s:]/,\\n        contains: [\\n          TITLE_MODE,\\n          GENERIC_MODIFIER,\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE\\n        ]\\n      },\\n      {\\n        // [Attributes(\\\"\\\")]\\n        className: 'meta',\\n        begin: '^\\\\\\\\s*\\\\\\\\[(?=[\\\\\\\\w])',\\n        excludeBegin: true,\\n        end: '\\\\\\\\]',\\n        excludeEnd: true,\\n        contains: [\\n          {\\n            className: 'string',\\n            begin: /\\\"/,\\n            end: /\\\"/\\n          }\\n        ]\\n      },\\n      {\\n        // Expression keywords prevent 'keyword Name(...)' from being\\n        // recognized as a function definition\\n        beginKeywords: 'new return throw await else',\\n        relevance: 0\\n      },\\n      {\\n        className: 'function',\\n        begin: '(' + TYPE_IDENT_RE + '\\\\\\\\s+)+' + hljs.IDENT_RE + '\\\\\\\\s*(<[^=]+>\\\\\\\\s*)?\\\\\\\\(',\\n        returnBegin: true,\\n        end: /\\\\s*[{;=]/,\\n        excludeEnd: true,\\n        keywords: KEYWORDS,\\n        contains: [\\n          // prevents these from being highlighted `title`\\n          {\\n            beginKeywords: FUNCTION_MODIFIERS.join(\\\" \\\"),\\n            relevance: 0\\n          },\\n          {\\n            begin: hljs.IDENT_RE + '\\\\\\\\s*(<[^=]+>\\\\\\\\s*)?\\\\\\\\(',\\n            returnBegin: true,\\n            contains: [\\n              hljs.TITLE_MODE,\\n              GENERIC_MODIFIER\\n            ],\\n            relevance: 0\\n          },\\n          { match: /\\\\(\\\\)/ },\\n          {\\n            className: 'params',\\n            begin: /\\\\(/,\\n            end: /\\\\)/,\\n            excludeBegin: true,\\n            excludeEnd: true,\\n            keywords: KEYWORDS,\\n            relevance: 0,\\n            contains: [\\n              STRING,\\n              NUMBERS,\\n              hljs.C_BLOCK_COMMENT_MODE\\n            ]\\n          },\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE\\n        ]\\n      },\\n      AT_IDENTIFIER\\n    ]\\n  };\\n}\\n\\nmodule.exports = csharp;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/csharp.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/csp.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/csp.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: CSP\\nDescription: Content Security Policy definition highlighting\\nAuthor: Taras <oxdef@oxdef.info>\\nWebsite: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP\\n\\nvim: ts=2 sw=2 st=2\\n*/\\n\\n/** @type LanguageFn */\\nfunction csp(hljs) {\\n  const KEYWORDS = [\\n    \\\"base-uri\\\",\\n    \\\"child-src\\\",\\n    \\\"connect-src\\\",\\n    \\\"default-src\\\",\\n    \\\"font-src\\\",\\n    \\\"form-action\\\",\\n    \\\"frame-ancestors\\\",\\n    \\\"frame-src\\\",\\n    \\\"img-src\\\",\\n    \\\"manifest-src\\\",\\n    \\\"media-src\\\",\\n    \\\"object-src\\\",\\n    \\\"plugin-types\\\",\\n    \\\"report-uri\\\",\\n    \\\"sandbox\\\",\\n    \\\"script-src\\\",\\n    \\\"style-src\\\",\\n    \\\"trusted-types\\\",\\n    \\\"unsafe-hashes\\\",\\n    \\\"worker-src\\\"\\n  ];\\n  return {\\n    name: 'CSP',\\n    case_insensitive: false,\\n    keywords: {\\n      $pattern: '[a-zA-Z][a-zA-Z0-9_-]*',\\n      keyword: KEYWORDS\\n    },\\n    contains: [\\n      {\\n        className: 'string',\\n        begin: \\\"'\\\",\\n        end: \\\"'\\\"\\n      },\\n      {\\n        className: 'attribute',\\n        begin: '^Content',\\n        end: ':',\\n        excludeEnd: true\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = csp;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/csp.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/css.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/css.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"const MODES = (hljs) => {\\n  return {\\n    IMPORTANT: {\\n      scope: 'meta',\\n      begin: '!important'\\n    },\\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\\n    HEXCOLOR: {\\n      scope: 'number',\\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\\\b/\\n    },\\n    FUNCTION_DISPATCH: {\\n      className: \\\"built_in\\\",\\n      begin: /[\\\\w-]+(?=\\\\()/\\n    },\\n    ATTRIBUTE_SELECTOR_MODE: {\\n      scope: 'selector-attr',\\n      begin: /\\\\[/,\\n      end: /\\\\]/,\\n      illegal: '$',\\n      contains: [\\n        hljs.APOS_STRING_MODE,\\n        hljs.QUOTE_STRING_MODE\\n      ]\\n    },\\n    CSS_NUMBER_MODE: {\\n      scope: 'number',\\n      begin: hljs.NUMBER_RE + '(' +\\n        '%|em|ex|ch|rem' +\\n        '|vw|vh|vmin|vmax' +\\n        '|cm|mm|in|pt|pc|px' +\\n        '|deg|grad|rad|turn' +\\n        '|s|ms' +\\n        '|Hz|kHz' +\\n        '|dpi|dpcm|dppx' +\\n        ')?',\\n      relevance: 0\\n    },\\n    CSS_VARIABLE: {\\n      className: \\\"attr\\\",\\n      begin: /--[A-Za-z][A-Za-z0-9_-]*/\\n    }\\n  };\\n};\\n\\nconst TAGS = [\\n  'a',\\n  'abbr',\\n  'address',\\n  'article',\\n  'aside',\\n  'audio',\\n  'b',\\n  'blockquote',\\n  'body',\\n  'button',\\n  'canvas',\\n  'caption',\\n  'cite',\\n  'code',\\n  'dd',\\n  'del',\\n  'details',\\n  'dfn',\\n  'div',\\n  'dl',\\n  'dt',\\n  'em',\\n  'fieldset',\\n  'figcaption',\\n  'figure',\\n  'footer',\\n  'form',\\n  'h1',\\n  'h2',\\n  'h3',\\n  'h4',\\n  'h5',\\n  'h6',\\n  'header',\\n  'hgroup',\\n  'html',\\n  'i',\\n  'iframe',\\n  'img',\\n  'input',\\n  'ins',\\n  'kbd',\\n  'label',\\n  'legend',\\n  'li',\\n  'main',\\n  'mark',\\n  'menu',\\n  'nav',\\n  'object',\\n  'ol',\\n  'p',\\n  'q',\\n  'quote',\\n  'samp',\\n  'section',\\n  'span',\\n  'strong',\\n  'summary',\\n  'sup',\\n  'table',\\n  'tbody',\\n  'td',\\n  'textarea',\\n  'tfoot',\\n  'th',\\n  'thead',\\n  'time',\\n  'tr',\\n  'ul',\\n  'var',\\n  'video'\\n];\\n\\nconst MEDIA_FEATURES = [\\n  'any-hover',\\n  'any-pointer',\\n  'aspect-ratio',\\n  'color',\\n  'color-gamut',\\n  'color-index',\\n  'device-aspect-ratio',\\n  'device-height',\\n  'device-width',\\n  'display-mode',\\n  'forced-colors',\\n  'grid',\\n  'height',\\n  'hover',\\n  'inverted-colors',\\n  'monochrome',\\n  'orientation',\\n  'overflow-block',\\n  'overflow-inline',\\n  'pointer',\\n  'prefers-color-scheme',\\n  'prefers-contrast',\\n  'prefers-reduced-motion',\\n  'prefers-reduced-transparency',\\n  'resolution',\\n  'scan',\\n  'scripting',\\n  'update',\\n  'width',\\n  // TODO: find a better solution?\\n  'min-width',\\n  'max-width',\\n  'min-height',\\n  'max-height'\\n];\\n\\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\\nconst PSEUDO_CLASSES = [\\n  'active',\\n  'any-link',\\n  'blank',\\n  'checked',\\n  'current',\\n  'default',\\n  'defined',\\n  'dir', // dir()\\n  'disabled',\\n  'drop',\\n  'empty',\\n  'enabled',\\n  'first',\\n  'first-child',\\n  'first-of-type',\\n  'fullscreen',\\n  'future',\\n  'focus',\\n  'focus-visible',\\n  'focus-within',\\n  'has', // has()\\n  'host', // host or host()\\n  'host-context', // host-context()\\n  'hover',\\n  'indeterminate',\\n  'in-range',\\n  'invalid',\\n  'is', // is()\\n  'lang', // lang()\\n  'last-child',\\n  'last-of-type',\\n  'left',\\n  'link',\\n  'local-link',\\n  'not', // not()\\n  'nth-child', // nth-child()\\n  'nth-col', // nth-col()\\n  'nth-last-child', // nth-last-child()\\n  'nth-last-col', // nth-last-col()\\n  'nth-last-of-type', //nth-last-of-type()\\n  'nth-of-type', //nth-of-type()\\n  'only-child',\\n  'only-of-type',\\n  'optional',\\n  'out-of-range',\\n  'past',\\n  'placeholder-shown',\\n  'read-only',\\n  'read-write',\\n  'required',\\n  'right',\\n  'root',\\n  'scope',\\n  'target',\\n  'target-within',\\n  'user-invalid',\\n  'valid',\\n  'visited',\\n  'where' // where()\\n];\\n\\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\\nconst PSEUDO_ELEMENTS = [\\n  'after',\\n  'backdrop',\\n  'before',\\n  'cue',\\n  'cue-region',\\n  'first-letter',\\n  'first-line',\\n  'grammar-error',\\n  'marker',\\n  'part',\\n  'placeholder',\\n  'selection',\\n  'slotted',\\n  'spelling-error'\\n];\\n\\nconst ATTRIBUTES = [\\n  'align-content',\\n  'align-items',\\n  'align-self',\\n  'all',\\n  'animation',\\n  'animation-delay',\\n  'animation-direction',\\n  'animation-duration',\\n  'animation-fill-mode',\\n  'animation-iteration-count',\\n  'animation-name',\\n  'animation-play-state',\\n  'animation-timing-function',\\n  'backface-visibility',\\n  'background',\\n  'background-attachment',\\n  'background-blend-mode',\\n  'background-clip',\\n  'background-color',\\n  'background-image',\\n  'background-origin',\\n  'background-position',\\n  'background-repeat',\\n  'background-size',\\n  'block-size',\\n  'border',\\n  'border-block',\\n  'border-block-color',\\n  'border-block-end',\\n  'border-block-end-color',\\n  'border-block-end-style',\\n  'border-block-end-width',\\n  'border-block-start',\\n  'border-block-start-color',\\n  'border-block-start-style',\\n  'border-block-start-width',\\n  'border-block-style',\\n  'border-block-width',\\n  'border-bottom',\\n  'border-bottom-color',\\n  'border-bottom-left-radius',\\n  'border-bottom-right-radius',\\n  'border-bottom-style',\\n  'border-bottom-width',\\n  'border-collapse',\\n  'border-color',\\n  'border-image',\\n  'border-image-outset',\\n  'border-image-repeat',\\n  'border-image-slice',\\n  'border-image-source',\\n  'border-image-width',\\n  'border-inline',\\n  'border-inline-color',\\n  'border-inline-end',\\n  'border-inline-end-color',\\n  'border-inline-end-style',\\n  'border-inline-end-width',\\n  'border-inline-start',\\n  'border-inline-start-color',\\n  'border-inline-start-style',\\n  'border-inline-start-width',\\n  'border-inline-style',\\n  'border-inline-width',\\n  'border-left',\\n  'border-left-color',\\n  'border-left-style',\\n  'border-left-width',\\n  'border-radius',\\n  'border-right',\\n  'border-right-color',\\n  'border-right-style',\\n  'border-right-width',\\n  'border-spacing',\\n  'border-style',\\n  'border-top',\\n  'border-top-color',\\n  'border-top-left-radius',\\n  'border-top-right-radius',\\n  'border-top-style',\\n  'border-top-width',\\n  'border-width',\\n  'bottom',\\n  'box-decoration-break',\\n  'box-shadow',\\n  'box-sizing',\\n  'break-after',\\n  'break-before',\\n  'break-inside',\\n  'caption-side',\\n  'caret-color',\\n  'clear',\\n  'clip',\\n  'clip-path',\\n  'clip-rule',\\n  'color',\\n  'column-count',\\n  'column-fill',\\n  'column-gap',\\n  'column-rule',\\n  'column-rule-color',\\n  'column-rule-style',\\n  'column-rule-width',\\n  'column-span',\\n  'column-width',\\n  'columns',\\n  'contain',\\n  'content',\\n  'content-visibility',\\n  'counter-increment',\\n  'counter-reset',\\n  'cue',\\n  'cue-after',\\n  'cue-before',\\n  'cursor',\\n  'direction',\\n  'display',\\n  'empty-cells',\\n  'filter',\\n  'flex',\\n  'flex-basis',\\n  'flex-direction',\\n  'flex-flow',\\n  'flex-grow',\\n  'flex-shrink',\\n  'flex-wrap',\\n  'float',\\n  'flow',\\n  'font',\\n  'font-display',\\n  'font-family',\\n  'font-feature-settings',\\n  'font-kerning',\\n  'font-language-override',\\n  'font-size',\\n  'font-size-adjust',\\n  'font-smoothing',\\n  'font-stretch',\\n  'font-style',\\n  'font-synthesis',\\n  'font-variant',\\n  'font-variant-caps',\\n  'font-variant-east-asian',\\n  'font-variant-ligatures',\\n  'font-variant-numeric',\\n  'font-variant-position',\\n  'font-variation-settings',\\n  'font-weight',\\n  'gap',\\n  'glyph-orientation-vertical',\\n  'grid',\\n  'grid-area',\\n  'grid-auto-columns',\\n  'grid-auto-flow',\\n  'grid-auto-rows',\\n  'grid-column',\\n  'grid-column-end',\\n  'grid-column-start',\\n  'grid-gap',\\n  'grid-row',\\n  'grid-row-end',\\n  'grid-row-start',\\n  'grid-template',\\n  'grid-template-areas',\\n  'grid-template-columns',\\n  'grid-template-rows',\\n  'hanging-punctuation',\\n  'height',\\n  'hyphens',\\n  'icon',\\n  'image-orientation',\\n  'image-rendering',\\n  'image-resolution',\\n  'ime-mode',\\n  'inline-size',\\n  'isolation',\\n  'justify-content',\\n  'left',\\n  'letter-spacing',\\n  'line-break',\\n  'line-height',\\n  'list-style',\\n  'list-style-image',\\n  'list-style-position',\\n  'list-style-type',\\n  'margin',\\n  'margin-block',\\n  'margin-block-end',\\n  'margin-block-start',\\n  'margin-bottom',\\n  'margin-inline',\\n  'margin-inline-end',\\n  'margin-inline-start',\\n  'margin-left',\\n  'margin-right',\\n  'margin-top',\\n  'marks',\\n  'mask',\\n  'mask-border',\\n  'mask-border-mode',\\n  'mask-border-outset',\\n  'mask-border-repeat',\\n  'mask-border-slice',\\n  'mask-border-source',\\n  'mask-border-width',\\n  'mask-clip',\\n  'mask-composite',\\n  'mask-image',\\n  'mask-mode',\\n  'mask-origin',\\n  'mask-position',\\n  'mask-repeat',\\n  'mask-size',\\n  'mask-type',\\n  'max-block-size',\\n  'max-height',\\n  'max-inline-size',\\n  'max-width',\\n  'min-block-size',\\n  'min-height',\\n  'min-inline-size',\\n  'min-width',\\n  'mix-blend-mode',\\n  'nav-down',\\n  'nav-index',\\n  'nav-left',\\n  'nav-right',\\n  'nav-up',\\n  'none',\\n  'normal',\\n  'object-fit',\\n  'object-position',\\n  'opacity',\\n  'order',\\n  'orphans',\\n  'outline',\\n  'outline-color',\\n  'outline-offset',\\n  'outline-style',\\n  'outline-width',\\n  'overflow',\\n  'overflow-wrap',\\n  'overflow-x',\\n  'overflow-y',\\n  'padding',\\n  'padding-block',\\n  'padding-block-end',\\n  'padding-block-start',\\n  'padding-bottom',\\n  'padding-inline',\\n  'padding-inline-end',\\n  'padding-inline-start',\\n  'padding-left',\\n  'padding-right',\\n  'padding-top',\\n  'page-break-after',\\n  'page-break-before',\\n  'page-break-inside',\\n  'pause',\\n  'pause-after',\\n  'pause-before',\\n  'perspective',\\n  'perspective-origin',\\n  'pointer-events',\\n  'position',\\n  'quotes',\\n  'resize',\\n  'rest',\\n  'rest-after',\\n  'rest-before',\\n  'right',\\n  'row-gap',\\n  'scroll-margin',\\n  'scroll-margin-block',\\n  'scroll-margin-block-end',\\n  'scroll-margin-block-start',\\n  'scroll-margin-bottom',\\n  'scroll-margin-inline',\\n  'scroll-margin-inline-end',\\n  'scroll-margin-inline-start',\\n  'scroll-margin-left',\\n  'scroll-margin-right',\\n  'scroll-margin-top',\\n  'scroll-padding',\\n  'scroll-padding-block',\\n  'scroll-padding-block-end',\\n  'scroll-padding-block-start',\\n  'scroll-padding-bottom',\\n  'scroll-padding-inline',\\n  'scroll-padding-inline-end',\\n  'scroll-padding-inline-start',\\n  'scroll-padding-left',\\n  'scroll-padding-right',\\n  'scroll-padding-top',\\n  'scroll-snap-align',\\n  'scroll-snap-stop',\\n  'scroll-snap-type',\\n  'scrollbar-color',\\n  'scrollbar-gutter',\\n  'scrollbar-width',\\n  'shape-image-threshold',\\n  'shape-margin',\\n  'shape-outside',\\n  'speak',\\n  'speak-as',\\n  'src', // @font-face\\n  'tab-size',\\n  'table-layout',\\n  'text-align',\\n  'text-align-all',\\n  'text-align-last',\\n  'text-combine-upright',\\n  'text-decoration',\\n  'text-decoration-color',\\n  'text-decoration-line',\\n  'text-decoration-style',\\n  'text-emphasis',\\n  'text-emphasis-color',\\n  'text-emphasis-position',\\n  'text-emphasis-style',\\n  'text-indent',\\n  'text-justify',\\n  'text-orientation',\\n  'text-overflow',\\n  'text-rendering',\\n  'text-shadow',\\n  'text-transform',\\n  'text-underline-position',\\n  'top',\\n  'transform',\\n  'transform-box',\\n  'transform-origin',\\n  'transform-style',\\n  'transition',\\n  'transition-delay',\\n  'transition-duration',\\n  'transition-property',\\n  'transition-timing-function',\\n  'unicode-bidi',\\n  'vertical-align',\\n  'visibility',\\n  'voice-balance',\\n  'voice-duration',\\n  'voice-family',\\n  'voice-pitch',\\n  'voice-range',\\n  'voice-rate',\\n  'voice-stress',\\n  'voice-volume',\\n  'white-space',\\n  'widows',\\n  'width',\\n  'will-change',\\n  'word-break',\\n  'word-spacing',\\n  'word-wrap',\\n  'writing-mode',\\n  'z-index'\\n  // reverse makes sure longer attributes `font-weight` are matched fully\\n  // instead of getting false positives on say `font`\\n].reverse();\\n\\n/*\\nLanguage: CSS\\nCategory: common, css, web\\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\\n*/\\n\\n/** @type LanguageFn */\\nfunction css(hljs) {\\n  const regex = hljs.regex;\\n  const modes = MODES(hljs);\\n  const VENDOR_PREFIX = { begin: /-(webkit|moz|ms|o)-(?=[a-z])/ };\\n  const AT_MODIFIERS = \\\"and or not only\\\";\\n  const AT_PROPERTY_RE = /@-?\\\\w[\\\\w]*(-\\\\w+)*/; // @-webkit-keyframes\\n  const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\\n  const STRINGS = [\\n    hljs.APOS_STRING_MODE,\\n    hljs.QUOTE_STRING_MODE\\n  ];\\n\\n  return {\\n    name: 'CSS',\\n    case_insensitive: true,\\n    illegal: /[=|'\\\\$]/,\\n    keywords: { keyframePosition: \\\"from to\\\" },\\n    classNameAliases: {\\n      // for visual continuity with `tag {}` and because we\\n      // don't have a great class for this?\\n      keyframePosition: \\\"selector-tag\\\" },\\n    contains: [\\n      modes.BLOCK_COMMENT,\\n      VENDOR_PREFIX,\\n      // to recognize keyframe 40% etc which are outside the scope of our\\n      // attribute value mode\\n      modes.CSS_NUMBER_MODE,\\n      {\\n        className: 'selector-id',\\n        begin: /#[A-Za-z0-9_-]+/,\\n        relevance: 0\\n      },\\n      {\\n        className: 'selector-class',\\n        begin: '\\\\\\\\.' + IDENT_RE,\\n        relevance: 0\\n      },\\n      modes.ATTRIBUTE_SELECTOR_MODE,\\n      {\\n        className: 'selector-pseudo',\\n        variants: [\\n          { begin: ':(' + PSEUDO_CLASSES.join('|') + ')' },\\n          { begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' }\\n        ]\\n      },\\n      // we may actually need this (12/2020)\\n      // { // pseudo-selector params\\n      //   begin: /\\\\(/,\\n      //   end: /\\\\)/,\\n      //   contains: [ hljs.CSS_NUMBER_MODE ]\\n      // },\\n      modes.CSS_VARIABLE,\\n      {\\n        className: 'attribute',\\n        begin: '\\\\\\\\b(' + ATTRIBUTES.join('|') + ')\\\\\\\\b'\\n      },\\n      // attribute values\\n      {\\n        begin: /:/,\\n        end: /[;}{]/,\\n        contains: [\\n          modes.BLOCK_COMMENT,\\n          modes.HEXCOLOR,\\n          modes.IMPORTANT,\\n          modes.CSS_NUMBER_MODE,\\n          ...STRINGS,\\n          // needed to highlight these as strings and to avoid issues with\\n          // illegal characters that might be inside urls that would tigger the\\n          // languages illegal stack\\n          {\\n            begin: /(url|data-uri)\\\\(/,\\n            end: /\\\\)/,\\n            relevance: 0, // from keywords\\n            keywords: { built_in: \\\"url data-uri\\\" },\\n            contains: [\\n              ...STRINGS,\\n              {\\n                className: \\\"string\\\",\\n                // any character other than `)` as in `url()` will be the start\\n                // of a string, which ends with `)` (from the parent mode)\\n                begin: /[^)]/,\\n                endsWithParent: true,\\n                excludeEnd: true\\n              }\\n            ]\\n          },\\n          modes.FUNCTION_DISPATCH\\n        ]\\n      },\\n      {\\n        begin: regex.lookahead(/@/),\\n        end: '[{;]',\\n        relevance: 0,\\n        illegal: /:/, // break on Less variables @var: ...\\n        contains: [\\n          {\\n            className: 'keyword',\\n            begin: AT_PROPERTY_RE\\n          },\\n          {\\n            begin: /\\\\s/,\\n            endsWithParent: true,\\n            excludeEnd: true,\\n            relevance: 0,\\n            keywords: {\\n              $pattern: /[a-z-]+/,\\n              keyword: AT_MODIFIERS,\\n              attribute: MEDIA_FEATURES.join(\\\" \\\")\\n            },\\n            contains: [\\n              {\\n                begin: /[a-z-]+(?=:)/,\\n                className: \\\"attribute\\\"\\n              },\\n              ...STRINGS,\\n              modes.CSS_NUMBER_MODE\\n            ]\\n          }\\n        ]\\n      },\\n      {\\n        className: 'selector-tag',\\n        begin: '\\\\\\\\b(' + TAGS.join('|') + ')\\\\\\\\b'\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = css;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/css.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/d.js\":\n/*!******************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/d.js ***!\n  \\******************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: D\\nAuthor: Aleksandar Ruzicic <aleksandar@ruzicic.info>\\nDescription: D is a language with C-like syntax and static typing. It pragmatically combines efficiency, control, and modeling power, with safety and programmer productivity.\\nVersion: 1.0a\\nWebsite: https://dlang.org\\nDate: 2012-04-08\\n*/\\n\\n/**\\n * Known issues:\\n *\\n * - invalid hex string literals will be recognized as a double quoted strings\\n *   but 'x' at the beginning of string will not be matched\\n *\\n * - delimited string literals are not checked for matching end delimiter\\n *   (not possible to do with js regexp)\\n *\\n * - content of token string is colored as a string (i.e. no keyword coloring inside a token string)\\n *   also, content of token string is not validated to contain only valid D tokens\\n *\\n * - special token sequence rule is not strictly following D grammar (anything following #line\\n *   up to the end of line is matched as special token sequence)\\n */\\n\\n/** @type LanguageFn */\\nfunction d(hljs) {\\n  /**\\n   * Language keywords\\n   *\\n   * @type {Object}\\n   */\\n  const D_KEYWORDS = {\\n    $pattern: hljs.UNDERSCORE_IDENT_RE,\\n    keyword:\\n      'abstract alias align asm assert auto body break byte case cast catch class '\\n      + 'const continue debug default delete deprecated do else enum export extern final '\\n      + 'finally for foreach foreach_reverse|10 goto if immutable import in inout int '\\n      + 'interface invariant is lazy macro mixin module new nothrow out override package '\\n      + 'pragma private protected public pure ref return scope shared static struct '\\n      + 'super switch synchronized template this throw try typedef typeid typeof union '\\n      + 'unittest version void volatile while with __FILE__ __LINE__ __gshared|10 '\\n      + '__thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__',\\n    built_in:\\n      'bool cdouble cent cfloat char creal dchar delegate double dstring float function '\\n      + 'idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar '\\n      + 'wstring',\\n    literal:\\n      'false null true'\\n  };\\n\\n  /**\\n   * Number literal regexps\\n   *\\n   * @type {String}\\n   */\\n  const decimal_integer_re = '(0|[1-9][\\\\\\\\d_]*)';\\n  const decimal_integer_nosus_re = '(0|[1-9][\\\\\\\\d_]*|\\\\\\\\d[\\\\\\\\d_]*|[\\\\\\\\d_]+?\\\\\\\\d)';\\n  const binary_integer_re = '0[bB][01_]+';\\n  const hexadecimal_digits_re = '([\\\\\\\\da-fA-F][\\\\\\\\da-fA-F_]*|_[\\\\\\\\da-fA-F][\\\\\\\\da-fA-F_]*)';\\n  const hexadecimal_integer_re = '0[xX]' + hexadecimal_digits_re;\\n\\n  const decimal_exponent_re = '([eE][+-]?' + decimal_integer_nosus_re + ')';\\n  const decimal_float_re = '(' + decimal_integer_nosus_re + '(\\\\\\\\.\\\\\\\\d*|' + decimal_exponent_re + ')|'\\n                + '\\\\\\\\d+\\\\\\\\.' + decimal_integer_nosus_re + '|'\\n                + '\\\\\\\\.' + decimal_integer_re + decimal_exponent_re + '?'\\n              + ')';\\n  const hexadecimal_float_re = '(0[xX]('\\n                  + hexadecimal_digits_re + '\\\\\\\\.' + hexadecimal_digits_re + '|'\\n                  + '\\\\\\\\.?' + hexadecimal_digits_re\\n                 + ')[pP][+-]?' + decimal_integer_nosus_re + ')';\\n\\n  const integer_re = '('\\n      + decimal_integer_re + '|'\\n      + binary_integer_re + '|'\\n       + hexadecimal_integer_re\\n    + ')';\\n\\n  const float_re = '('\\n      + hexadecimal_float_re + '|'\\n      + decimal_float_re\\n    + ')';\\n\\n  /**\\n   * Escape sequence supported in D string and character literals\\n   *\\n   * @type {String}\\n   */\\n  const escape_sequence_re = '\\\\\\\\\\\\\\\\('\\n              + '[\\\\'\\\"\\\\\\\\?\\\\\\\\\\\\\\\\abfnrtv]|' // common escapes\\n              + 'u[\\\\\\\\dA-Fa-f]{4}|' // four hex digit unicode codepoint\\n              + '[0-7]{1,3}|' // one to three octal digit ascii char code\\n              + 'x[\\\\\\\\dA-Fa-f]{2}|' // two hex digit ascii char code\\n              + 'U[\\\\\\\\dA-Fa-f]{8}' // eight hex digit unicode codepoint\\n              + ')|'\\n              + '&[a-zA-Z\\\\\\\\d]{2,};'; // named character entity\\n\\n  /**\\n   * D integer number literals\\n   *\\n   * @type {Object}\\n   */\\n  const D_INTEGER_MODE = {\\n    className: 'number',\\n    begin: '\\\\\\\\b' + integer_re + '(L|u|U|Lu|LU|uL|UL)?',\\n    relevance: 0\\n  };\\n\\n  /**\\n   * [D_FLOAT_MODE description]\\n   * @type {Object}\\n   */\\n  const D_FLOAT_MODE = {\\n    className: 'number',\\n    begin: '\\\\\\\\b('\\n        + float_re + '([fF]|L|i|[fF]i|Li)?|'\\n        + integer_re + '(i|[fF]i|Li)'\\n      + ')',\\n    relevance: 0\\n  };\\n\\n  /**\\n   * D character literal\\n   *\\n   * @type {Object}\\n   */\\n  const D_CHARACTER_MODE = {\\n    className: 'string',\\n    begin: '\\\\'(' + escape_sequence_re + '|.)',\\n    end: '\\\\'',\\n    illegal: '.'\\n  };\\n\\n  /**\\n   * D string escape sequence\\n   *\\n   * @type {Object}\\n   */\\n  const D_ESCAPE_SEQUENCE = {\\n    begin: escape_sequence_re,\\n    relevance: 0\\n  };\\n\\n  /**\\n   * D double quoted string literal\\n   *\\n   * @type {Object}\\n   */\\n  const D_STRING_MODE = {\\n    className: 'string',\\n    begin: '\\\"',\\n    contains: [ D_ESCAPE_SEQUENCE ],\\n    end: '\\\"[cwd]?'\\n  };\\n\\n  /**\\n   * D wysiwyg and delimited string literals\\n   *\\n   * @type {Object}\\n   */\\n  const D_WYSIWYG_DELIMITED_STRING_MODE = {\\n    className: 'string',\\n    begin: '[rq]\\\"',\\n    end: '\\\"[cwd]?',\\n    relevance: 5\\n  };\\n\\n  /**\\n   * D alternate wysiwyg string literal\\n   *\\n   * @type {Object}\\n   */\\n  const D_ALTERNATE_WYSIWYG_STRING_MODE = {\\n    className: 'string',\\n    begin: '`',\\n    end: '`[cwd]?'\\n  };\\n\\n  /**\\n   * D hexadecimal string literal\\n   *\\n   * @type {Object}\\n   */\\n  const D_HEX_STRING_MODE = {\\n    className: 'string',\\n    begin: 'x\\\"[\\\\\\\\da-fA-F\\\\\\\\s\\\\\\\\n\\\\\\\\r]*\\\"[cwd]?',\\n    relevance: 10\\n  };\\n\\n  /**\\n   * D delimited string literal\\n   *\\n   * @type {Object}\\n   */\\n  const D_TOKEN_STRING_MODE = {\\n    className: 'string',\\n    begin: 'q\\\"\\\\\\\\{',\\n    end: '\\\\\\\\}\\\"'\\n  };\\n\\n  /**\\n   * Hashbang support\\n   *\\n   * @type {Object}\\n   */\\n  const D_HASHBANG_MODE = {\\n    className: 'meta',\\n    begin: '^#!',\\n    end: '$',\\n    relevance: 5\\n  };\\n\\n  /**\\n   * D special token sequence\\n   *\\n   * @type {Object}\\n   */\\n  const D_SPECIAL_TOKEN_SEQUENCE_MODE = {\\n    className: 'meta',\\n    begin: '#(line)',\\n    end: '$',\\n    relevance: 5\\n  };\\n\\n  /**\\n   * D attributes\\n   *\\n   * @type {Object}\\n   */\\n  const D_ATTRIBUTE_MODE = {\\n    className: 'keyword',\\n    begin: '@[a-zA-Z_][a-zA-Z_\\\\\\\\d]*'\\n  };\\n\\n  /**\\n   * D nesting comment\\n   *\\n   * @type {Object}\\n   */\\n  const D_NESTING_COMMENT_MODE = hljs.COMMENT(\\n    '\\\\\\\\/\\\\\\\\+',\\n    '\\\\\\\\+\\\\\\\\/',\\n    {\\n      contains: [ 'self' ],\\n      relevance: 10\\n    }\\n  );\\n\\n  return {\\n    name: 'D',\\n    keywords: D_KEYWORDS,\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      D_NESTING_COMMENT_MODE,\\n      D_HEX_STRING_MODE,\\n      D_STRING_MODE,\\n      D_WYSIWYG_DELIMITED_STRING_MODE,\\n      D_ALTERNATE_WYSIWYG_STRING_MODE,\\n      D_TOKEN_STRING_MODE,\\n      D_FLOAT_MODE,\\n      D_INTEGER_MODE,\\n      D_CHARACTER_MODE,\\n      D_HASHBANG_MODE,\\n      D_SPECIAL_TOKEN_SEQUENCE_MODE,\\n      D_ATTRIBUTE_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = d;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/d.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/dart.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/dart.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Dart\\nRequires: markdown.js\\nAuthor: Maxim Dikun <dikmax@gmail.com>\\nDescription: Dart a modern, object-oriented language developed by Google. For more information see https://www.dartlang.org/\\nWebsite: https://dart.dev\\nCategory: scripting\\n*/\\n\\n/** @type LanguageFn */\\nfunction dart(hljs) {\\n  const SUBST = {\\n    className: 'subst',\\n    variants: [ { begin: '\\\\\\\\$[A-Za-z0-9_]+' } ]\\n  };\\n\\n  const BRACED_SUBST = {\\n    className: 'subst',\\n    variants: [\\n      {\\n        begin: /\\\\$\\\\{/,\\n        end: /\\\\}/\\n      }\\n    ],\\n    keywords: 'true false null this is new super'\\n  };\\n\\n  const STRING = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: 'r\\\\'\\\\'\\\\'',\\n        end: '\\\\'\\\\'\\\\''\\n      },\\n      {\\n        begin: 'r\\\"\\\"\\\"',\\n        end: '\\\"\\\"\\\"'\\n      },\\n      {\\n        begin: 'r\\\\'',\\n        end: '\\\\'',\\n        illegal: '\\\\\\\\n'\\n      },\\n      {\\n        begin: 'r\\\"',\\n        end: '\\\"',\\n        illegal: '\\\\\\\\n'\\n      },\\n      {\\n        begin: '\\\\'\\\\'\\\\'',\\n        end: '\\\\'\\\\'\\\\'',\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          SUBST,\\n          BRACED_SUBST\\n        ]\\n      },\\n      {\\n        begin: '\\\"\\\"\\\"',\\n        end: '\\\"\\\"\\\"',\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          SUBST,\\n          BRACED_SUBST\\n        ]\\n      },\\n      {\\n        begin: '\\\\'',\\n        end: '\\\\'',\\n        illegal: '\\\\\\\\n',\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          SUBST,\\n          BRACED_SUBST\\n        ]\\n      },\\n      {\\n        begin: '\\\"',\\n        end: '\\\"',\\n        illegal: '\\\\\\\\n',\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          SUBST,\\n          BRACED_SUBST\\n        ]\\n      }\\n    ]\\n  };\\n  BRACED_SUBST.contains = [\\n    hljs.C_NUMBER_MODE,\\n    STRING\\n  ];\\n\\n  const BUILT_IN_TYPES = [\\n    // dart:core\\n    'Comparable',\\n    'DateTime',\\n    'Duration',\\n    'Function',\\n    'Iterable',\\n    'Iterator',\\n    'List',\\n    'Map',\\n    'Match',\\n    'Object',\\n    'Pattern',\\n    'RegExp',\\n    'Set',\\n    'Stopwatch',\\n    'String',\\n    'StringBuffer',\\n    'StringSink',\\n    'Symbol',\\n    'Type',\\n    'Uri',\\n    'bool',\\n    'double',\\n    'int',\\n    'num',\\n    // dart:html\\n    'Element',\\n    'ElementList'\\n  ];\\n  const NULLABLE_BUILT_IN_TYPES = BUILT_IN_TYPES.map((e) => `${e}?`);\\n\\n  const BASIC_KEYWORDS = [\\n    \\\"abstract\\\",\\n    \\\"as\\\",\\n    \\\"assert\\\",\\n    \\\"async\\\",\\n    \\\"await\\\",\\n    \\\"base\\\",\\n    \\\"break\\\",\\n    \\\"case\\\",\\n    \\\"catch\\\",\\n    \\\"class\\\",\\n    \\\"const\\\",\\n    \\\"continue\\\",\\n    \\\"covariant\\\",\\n    \\\"default\\\",\\n    \\\"deferred\\\",\\n    \\\"do\\\",\\n    \\\"dynamic\\\",\\n    \\\"else\\\",\\n    \\\"enum\\\",\\n    \\\"export\\\",\\n    \\\"extends\\\",\\n    \\\"extension\\\",\\n    \\\"external\\\",\\n    \\\"factory\\\",\\n    \\\"false\\\",\\n    \\\"final\\\",\\n    \\\"finally\\\",\\n    \\\"for\\\",\\n    \\\"Function\\\",\\n    \\\"get\\\",\\n    \\\"hide\\\",\\n    \\\"if\\\",\\n    \\\"implements\\\",\\n    \\\"import\\\",\\n    \\\"in\\\",\\n    \\\"interface\\\",\\n    \\\"is\\\",\\n    \\\"late\\\",\\n    \\\"library\\\",\\n    \\\"mixin\\\",\\n    \\\"new\\\",\\n    \\\"null\\\",\\n    \\\"on\\\",\\n    \\\"operator\\\",\\n    \\\"part\\\",\\n    \\\"required\\\",\\n    \\\"rethrow\\\",\\n    \\\"return\\\",\\n    \\\"sealed\\\",\\n    \\\"set\\\",\\n    \\\"show\\\",\\n    \\\"static\\\",\\n    \\\"super\\\",\\n    \\\"switch\\\",\\n    \\\"sync\\\",\\n    \\\"this\\\",\\n    \\\"throw\\\",\\n    \\\"true\\\",\\n    \\\"try\\\",\\n    \\\"typedef\\\",\\n    \\\"var\\\",\\n    \\\"void\\\",\\n    \\\"when\\\",\\n    \\\"while\\\",\\n    \\\"with\\\",\\n    \\\"yield\\\"\\n  ];\\n\\n  const KEYWORDS = {\\n    keyword: BASIC_KEYWORDS,\\n    built_in:\\n      BUILT_IN_TYPES\\n        .concat(NULLABLE_BUILT_IN_TYPES)\\n        .concat([\\n          // dart:core\\n          'Never',\\n          'Null',\\n          'dynamic',\\n          'print',\\n          // dart:html\\n          'document',\\n          'querySelector',\\n          'querySelectorAll',\\n          'window'\\n        ]),\\n    $pattern: /[A-Za-z][A-Za-z0-9_]*\\\\??/\\n  };\\n\\n  return {\\n    name: 'Dart',\\n    keywords: KEYWORDS,\\n    contains: [\\n      STRING,\\n      hljs.COMMENT(\\n        /\\\\/\\\\*\\\\*(?!\\\\/)/,\\n        /\\\\*\\\\//,\\n        {\\n          subLanguage: 'markdown',\\n          relevance: 0\\n        }\\n      ),\\n      hljs.COMMENT(\\n        /\\\\/{3,} ?/,\\n        /$/, { contains: [\\n          {\\n            subLanguage: 'markdown',\\n            begin: '.',\\n            end: '$',\\n            relevance: 0\\n          }\\n        ] }\\n      ),\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      {\\n        className: 'class',\\n        beginKeywords: 'class interface',\\n        end: /\\\\{/,\\n        excludeEnd: true,\\n        contains: [\\n          { beginKeywords: 'extends implements' },\\n          hljs.UNDERSCORE_TITLE_MODE\\n        ]\\n      },\\n      hljs.C_NUMBER_MODE,\\n      {\\n        className: 'meta',\\n        begin: '@[A-Za-z]+'\\n      },\\n      { begin: '=>' // No markup, just a relevance booster\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = dart;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/dart.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/delphi.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/delphi.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Delphi\\nWebsite: https://www.embarcadero.com/products/delphi\\n*/\\n\\n/** @type LanguageFn */\\nfunction delphi(hljs) {\\n  const KEYWORDS = [\\n    \\\"exports\\\",\\n    \\\"register\\\",\\n    \\\"file\\\",\\n    \\\"shl\\\",\\n    \\\"array\\\",\\n    \\\"record\\\",\\n    \\\"property\\\",\\n    \\\"for\\\",\\n    \\\"mod\\\",\\n    \\\"while\\\",\\n    \\\"set\\\",\\n    \\\"ally\\\",\\n    \\\"label\\\",\\n    \\\"uses\\\",\\n    \\\"raise\\\",\\n    \\\"not\\\",\\n    \\\"stored\\\",\\n    \\\"class\\\",\\n    \\\"safecall\\\",\\n    \\\"var\\\",\\n    \\\"interface\\\",\\n    \\\"or\\\",\\n    \\\"private\\\",\\n    \\\"static\\\",\\n    \\\"exit\\\",\\n    \\\"index\\\",\\n    \\\"inherited\\\",\\n    \\\"to\\\",\\n    \\\"else\\\",\\n    \\\"stdcall\\\",\\n    \\\"override\\\",\\n    \\\"shr\\\",\\n    \\\"asm\\\",\\n    \\\"far\\\",\\n    \\\"resourcestring\\\",\\n    \\\"finalization\\\",\\n    \\\"packed\\\",\\n    \\\"virtual\\\",\\n    \\\"out\\\",\\n    \\\"and\\\",\\n    \\\"protected\\\",\\n    \\\"library\\\",\\n    \\\"do\\\",\\n    \\\"xorwrite\\\",\\n    \\\"goto\\\",\\n    \\\"near\\\",\\n    \\\"function\\\",\\n    \\\"end\\\",\\n    \\\"div\\\",\\n    \\\"overload\\\",\\n    \\\"object\\\",\\n    \\\"unit\\\",\\n    \\\"begin\\\",\\n    \\\"string\\\",\\n    \\\"on\\\",\\n    \\\"inline\\\",\\n    \\\"repeat\\\",\\n    \\\"until\\\",\\n    \\\"destructor\\\",\\n    \\\"write\\\",\\n    \\\"message\\\",\\n    \\\"program\\\",\\n    \\\"with\\\",\\n    \\\"read\\\",\\n    \\\"initialization\\\",\\n    \\\"except\\\",\\n    \\\"default\\\",\\n    \\\"nil\\\",\\n    \\\"if\\\",\\n    \\\"case\\\",\\n    \\\"cdecl\\\",\\n    \\\"in\\\",\\n    \\\"downto\\\",\\n    \\\"threadvar\\\",\\n    \\\"of\\\",\\n    \\\"try\\\",\\n    \\\"pascal\\\",\\n    \\\"const\\\",\\n    \\\"external\\\",\\n    \\\"constructor\\\",\\n    \\\"type\\\",\\n    \\\"public\\\",\\n    \\\"then\\\",\\n    \\\"implementation\\\",\\n    \\\"finally\\\",\\n    \\\"published\\\",\\n    \\\"procedure\\\",\\n    \\\"absolute\\\",\\n    \\\"reintroduce\\\",\\n    \\\"operator\\\",\\n    \\\"as\\\",\\n    \\\"is\\\",\\n    \\\"abstract\\\",\\n    \\\"alias\\\",\\n    \\\"assembler\\\",\\n    \\\"bitpacked\\\",\\n    \\\"break\\\",\\n    \\\"continue\\\",\\n    \\\"cppdecl\\\",\\n    \\\"cvar\\\",\\n    \\\"enumerator\\\",\\n    \\\"experimental\\\",\\n    \\\"platform\\\",\\n    \\\"deprecated\\\",\\n    \\\"unimplemented\\\",\\n    \\\"dynamic\\\",\\n    \\\"export\\\",\\n    \\\"far16\\\",\\n    \\\"forward\\\",\\n    \\\"generic\\\",\\n    \\\"helper\\\",\\n    \\\"implements\\\",\\n    \\\"interrupt\\\",\\n    \\\"iochecks\\\",\\n    \\\"local\\\",\\n    \\\"name\\\",\\n    \\\"nodefault\\\",\\n    \\\"noreturn\\\",\\n    \\\"nostackframe\\\",\\n    \\\"oldfpccall\\\",\\n    \\\"otherwise\\\",\\n    \\\"saveregisters\\\",\\n    \\\"softfloat\\\",\\n    \\\"specialize\\\",\\n    \\\"strict\\\",\\n    \\\"unaligned\\\",\\n    \\\"varargs\\\"\\n  ];\\n  const COMMENT_MODES = [\\n    hljs.C_LINE_COMMENT_MODE,\\n    hljs.COMMENT(/\\\\{/, /\\\\}/, { relevance: 0 }),\\n    hljs.COMMENT(/\\\\(\\\\*/, /\\\\*\\\\)/, { relevance: 10 })\\n  ];\\n  const DIRECTIVE = {\\n    className: 'meta',\\n    variants: [\\n      {\\n        begin: /\\\\{\\\\$/,\\n        end: /\\\\}/\\n      },\\n      {\\n        begin: /\\\\(\\\\*\\\\$/,\\n        end: /\\\\*\\\\)/\\n      }\\n    ]\\n  };\\n  const STRING = {\\n    className: 'string',\\n    begin: /'/,\\n    end: /'/,\\n    contains: [ { begin: /''/ } ]\\n  };\\n  const NUMBER = {\\n    className: 'number',\\n    relevance: 0,\\n    // Source: https://www.freepascal.org/docs-html/ref/refse6.html\\n    variants: [\\n      {\\n        // Hexadecimal notation, e.g., $7F.\\n        begin: '\\\\\\\\$[0-9A-Fa-f]+' },\\n      {\\n        // Octal notation, e.g., &42.\\n        begin: '&[0-7]+' },\\n      {\\n        // Binary notation, e.g., %1010.\\n        begin: '%[01]+' }\\n    ]\\n  };\\n  const CHAR_STRING = {\\n    className: 'string',\\n    begin: /(#\\\\d+)+/\\n  };\\n  const CLASS = {\\n    begin: hljs.IDENT_RE + '\\\\\\\\s*=\\\\\\\\s*class\\\\\\\\s*\\\\\\\\(',\\n    returnBegin: true,\\n    contains: [ hljs.TITLE_MODE ]\\n  };\\n  const FUNCTION = {\\n    className: 'function',\\n    beginKeywords: 'function constructor destructor procedure',\\n    end: /[:;]/,\\n    keywords: 'function constructor|10 destructor|10 procedure|10',\\n    contains: [\\n      hljs.TITLE_MODE,\\n      {\\n        className: 'params',\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        keywords: KEYWORDS,\\n        contains: [\\n          STRING,\\n          CHAR_STRING,\\n          DIRECTIVE\\n        ].concat(COMMENT_MODES)\\n      },\\n      DIRECTIVE\\n    ].concat(COMMENT_MODES)\\n  };\\n  return {\\n    name: 'Delphi',\\n    aliases: [\\n      'dpr',\\n      'dfm',\\n      'pas',\\n      'pascal'\\n    ],\\n    case_insensitive: true,\\n    keywords: KEYWORDS,\\n    illegal: /\\\"|\\\\$[G-Zg-z]|\\\\/\\\\*|<\\\\/|\\\\|/,\\n    contains: [\\n      STRING,\\n      CHAR_STRING,\\n      hljs.NUMBER_MODE,\\n      NUMBER,\\n      CLASS,\\n      FUNCTION,\\n      DIRECTIVE\\n    ].concat(COMMENT_MODES)\\n  };\\n}\\n\\nmodule.exports = delphi;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/delphi.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/diff.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/diff.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Diff\\nDescription: Unified and context diff\\nAuthor: Vasily Polovnyov <vast@whiteants.net>\\nWebsite: https://www.gnu.org/software/diffutils/\\nCategory: common\\n*/\\n\\n/** @type LanguageFn */\\nfunction diff(hljs) {\\n  const regex = hljs.regex;\\n  return {\\n    name: 'Diff',\\n    aliases: [ 'patch' ],\\n    contains: [\\n      {\\n        className: 'meta',\\n        relevance: 10,\\n        match: regex.either(\\n          /^@@ +-\\\\d+,\\\\d+ +\\\\+\\\\d+,\\\\d+ +@@/,\\n          /^\\\\*\\\\*\\\\* +\\\\d+,\\\\d+ +\\\\*\\\\*\\\\*\\\\*$/,\\n          /^--- +\\\\d+,\\\\d+ +----$/\\n        )\\n      },\\n      {\\n        className: 'comment',\\n        variants: [\\n          {\\n            begin: regex.either(\\n              /Index: /,\\n              /^index/,\\n              /={3,}/,\\n              /^-{3}/,\\n              /^\\\\*{3} /,\\n              /^\\\\+{3}/,\\n              /^diff --git/\\n            ),\\n            end: /$/\\n          },\\n          { match: /^\\\\*{15}$/ }\\n        ]\\n      },\\n      {\\n        className: 'addition',\\n        begin: /^\\\\+/,\\n        end: /$/\\n      },\\n      {\\n        className: 'deletion',\\n        begin: /^-/,\\n        end: /$/\\n      },\\n      {\\n        className: 'addition',\\n        begin: /^!/,\\n        end: /$/\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = diff;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/diff.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/django.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/django.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Django\\nDescription: Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.\\nRequires: xml.js\\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\\nContributors: Ilya Baryshev <baryshev@gmail.com>\\nWebsite: https://www.djangoproject.com\\nCategory: template\\n*/\\n\\n/** @type LanguageFn */\\nfunction django(hljs) {\\n  const FILTER = {\\n    begin: /\\\\|[A-Za-z]+:?/,\\n    keywords: { name:\\n        'truncatewords removetags linebreaksbr yesno get_digit timesince random striptags '\\n        + 'filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands '\\n        + 'title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode '\\n        + 'timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort '\\n        + 'dictsortreversed default_if_none pluralize lower join center default '\\n        + 'truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first '\\n        + 'escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize '\\n        + 'localtime utc timezone' },\\n    contains: [\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.APOS_STRING_MODE\\n    ]\\n  };\\n\\n  return {\\n    name: 'Django',\\n    aliases: [ 'jinja' ],\\n    case_insensitive: true,\\n    subLanguage: 'xml',\\n    contains: [\\n      hljs.COMMENT(/\\\\{%\\\\s*comment\\\\s*%\\\\}/, /\\\\{%\\\\s*endcomment\\\\s*%\\\\}/),\\n      hljs.COMMENT(/\\\\{#/, /#\\\\}/),\\n      {\\n        className: 'template-tag',\\n        begin: /\\\\{%/,\\n        end: /%\\\\}/,\\n        contains: [\\n          {\\n            className: 'name',\\n            begin: /\\\\w+/,\\n            keywords: { name:\\n                'comment endcomment load templatetag ifchanged endifchanged if endif firstof for '\\n                + 'endfor ifnotequal endifnotequal widthratio extends include spaceless '\\n                + 'endspaceless regroup ifequal endifequal ssi now with cycle url filter '\\n                + 'endfilter debug block endblock else autoescape endautoescape csrf_token empty elif '\\n                + 'endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix '\\n                + 'plural get_current_language language get_available_languages '\\n                + 'get_current_language_bidi get_language_info get_language_info_list localize '\\n                + 'endlocalize localtime endlocaltime timezone endtimezone get_current_timezone '\\n                + 'verbatim' },\\n            starts: {\\n              endsWithParent: true,\\n              keywords: 'in by as',\\n              contains: [ FILTER ],\\n              relevance: 0\\n            }\\n          }\\n        ]\\n      },\\n      {\\n        className: 'template-variable',\\n        begin: /\\\\{\\\\{/,\\n        end: /\\\\}\\\\}/,\\n        contains: [ FILTER ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = django;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/django.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/dns.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/dns.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: DNS Zone\\nAuthor: Tim Schumacher <tim@datenknoten.me>\\nCategory: config\\nWebsite: https://en.wikipedia.org/wiki/Zone_file\\n*/\\n\\n/** @type LanguageFn */\\nfunction dns(hljs) {\\n  const KEYWORDS = [\\n    \\\"IN\\\",\\n    \\\"A\\\",\\n    \\\"AAAA\\\",\\n    \\\"AFSDB\\\",\\n    \\\"APL\\\",\\n    \\\"CAA\\\",\\n    \\\"CDNSKEY\\\",\\n    \\\"CDS\\\",\\n    \\\"CERT\\\",\\n    \\\"CNAME\\\",\\n    \\\"DHCID\\\",\\n    \\\"DLV\\\",\\n    \\\"DNAME\\\",\\n    \\\"DNSKEY\\\",\\n    \\\"DS\\\",\\n    \\\"HIP\\\",\\n    \\\"IPSECKEY\\\",\\n    \\\"KEY\\\",\\n    \\\"KX\\\",\\n    \\\"LOC\\\",\\n    \\\"MX\\\",\\n    \\\"NAPTR\\\",\\n    \\\"NS\\\",\\n    \\\"NSEC\\\",\\n    \\\"NSEC3\\\",\\n    \\\"NSEC3PARAM\\\",\\n    \\\"PTR\\\",\\n    \\\"RRSIG\\\",\\n    \\\"RP\\\",\\n    \\\"SIG\\\",\\n    \\\"SOA\\\",\\n    \\\"SRV\\\",\\n    \\\"SSHFP\\\",\\n    \\\"TA\\\",\\n    \\\"TKEY\\\",\\n    \\\"TLSA\\\",\\n    \\\"TSIG\\\",\\n    \\\"TXT\\\"\\n  ];\\n  return {\\n    name: 'DNS Zone',\\n    aliases: [\\n      'bind',\\n      'zone'\\n    ],\\n    keywords: KEYWORDS,\\n    contains: [\\n      hljs.COMMENT(';', '$', { relevance: 0 }),\\n      {\\n        className: 'meta',\\n        begin: /^\\\\$(TTL|GENERATE|INCLUDE|ORIGIN)\\\\b/\\n      },\\n      // IPv6\\n      {\\n        className: 'number',\\n        begin: '((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)(\\\\\\\\.(25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)(\\\\\\\\.(25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)(\\\\\\\\.(25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)(\\\\\\\\.(25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)(\\\\\\\\.(25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)(\\\\\\\\.(25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)(\\\\\\\\.(25[0-5]|2[0-4]\\\\\\\\d|1\\\\\\\\d\\\\\\\\d|[1-9]?\\\\\\\\d)){3}))|:)))\\\\\\\\b'\\n      },\\n      // IPv4\\n      {\\n        className: 'number',\\n        begin: '((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\\\\\\\b'\\n      },\\n      hljs.inherit(hljs.NUMBER_MODE, { begin: /\\\\b\\\\d+[dhwm]?/ })\\n    ]\\n  };\\n}\\n\\nmodule.exports = dns;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/dns.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/dockerfile.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/dockerfile.js ***!\n  \\***************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Dockerfile\\nRequires: bash.js\\nAuthor: Alexis Hénaut <alexis@henaut.net>\\nDescription: language definition for Dockerfile files\\nWebsite: https://docs.docker.com/engine/reference/builder/\\nCategory: config\\n*/\\n\\n/** @type LanguageFn */\\nfunction dockerfile(hljs) {\\n  const KEYWORDS = [\\n    \\\"from\\\",\\n    \\\"maintainer\\\",\\n    \\\"expose\\\",\\n    \\\"env\\\",\\n    \\\"arg\\\",\\n    \\\"user\\\",\\n    \\\"onbuild\\\",\\n    \\\"stopsignal\\\"\\n  ];\\n  return {\\n    name: 'Dockerfile',\\n    aliases: [ 'docker' ],\\n    case_insensitive: true,\\n    keywords: KEYWORDS,\\n    contains: [\\n      hljs.HASH_COMMENT_MODE,\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.NUMBER_MODE,\\n      {\\n        beginKeywords: 'run cmd entrypoint volume add copy workdir label healthcheck shell',\\n        starts: {\\n          end: /[^\\\\\\\\]$/,\\n          subLanguage: 'bash'\\n        }\\n      }\\n    ],\\n    illegal: '</'\\n  };\\n}\\n\\nmodule.exports = dockerfile;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/dockerfile.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/dos.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/dos.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Batch file (DOS)\\nAuthor: Alexander Makarov <sam@rmcreative.ru>\\nContributors: Anton Kochkov <anton.kochkov@gmail.com>\\nWebsite: https://en.wikipedia.org/wiki/Batch_file\\n*/\\n\\n/** @type LanguageFn */\\nfunction dos(hljs) {\\n  const COMMENT = hljs.COMMENT(\\n    /^\\\\s*@?rem\\\\b/, /$/,\\n    { relevance: 10 }\\n  );\\n  const LABEL = {\\n    className: 'symbol',\\n    begin: '^\\\\\\\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\\\\\\\s+label)',\\n    relevance: 0\\n  };\\n  const KEYWORDS = [\\n    \\\"if\\\",\\n    \\\"else\\\",\\n    \\\"goto\\\",\\n    \\\"for\\\",\\n    \\\"in\\\",\\n    \\\"do\\\",\\n    \\\"call\\\",\\n    \\\"exit\\\",\\n    \\\"not\\\",\\n    \\\"exist\\\",\\n    \\\"errorlevel\\\",\\n    \\\"defined\\\",\\n    \\\"equ\\\",\\n    \\\"neq\\\",\\n    \\\"lss\\\",\\n    \\\"leq\\\",\\n    \\\"gtr\\\",\\n    \\\"geq\\\"\\n  ];\\n  const BUILT_INS = [\\n    \\\"prn\\\",\\n    \\\"nul\\\",\\n    \\\"lpt3\\\",\\n    \\\"lpt2\\\",\\n    \\\"lpt1\\\",\\n    \\\"con\\\",\\n    \\\"com4\\\",\\n    \\\"com3\\\",\\n    \\\"com2\\\",\\n    \\\"com1\\\",\\n    \\\"aux\\\",\\n    \\\"shift\\\",\\n    \\\"cd\\\",\\n    \\\"dir\\\",\\n    \\\"echo\\\",\\n    \\\"setlocal\\\",\\n    \\\"endlocal\\\",\\n    \\\"set\\\",\\n    \\\"pause\\\",\\n    \\\"copy\\\",\\n    \\\"append\\\",\\n    \\\"assoc\\\",\\n    \\\"at\\\",\\n    \\\"attrib\\\",\\n    \\\"break\\\",\\n    \\\"cacls\\\",\\n    \\\"cd\\\",\\n    \\\"chcp\\\",\\n    \\\"chdir\\\",\\n    \\\"chkdsk\\\",\\n    \\\"chkntfs\\\",\\n    \\\"cls\\\",\\n    \\\"cmd\\\",\\n    \\\"color\\\",\\n    \\\"comp\\\",\\n    \\\"compact\\\",\\n    \\\"convert\\\",\\n    \\\"date\\\",\\n    \\\"dir\\\",\\n    \\\"diskcomp\\\",\\n    \\\"diskcopy\\\",\\n    \\\"doskey\\\",\\n    \\\"erase\\\",\\n    \\\"fs\\\",\\n    \\\"find\\\",\\n    \\\"findstr\\\",\\n    \\\"format\\\",\\n    \\\"ftype\\\",\\n    \\\"graftabl\\\",\\n    \\\"help\\\",\\n    \\\"keyb\\\",\\n    \\\"label\\\",\\n    \\\"md\\\",\\n    \\\"mkdir\\\",\\n    \\\"mode\\\",\\n    \\\"more\\\",\\n    \\\"move\\\",\\n    \\\"path\\\",\\n    \\\"pause\\\",\\n    \\\"print\\\",\\n    \\\"popd\\\",\\n    \\\"pushd\\\",\\n    \\\"promt\\\",\\n    \\\"rd\\\",\\n    \\\"recover\\\",\\n    \\\"rem\\\",\\n    \\\"rename\\\",\\n    \\\"replace\\\",\\n    \\\"restore\\\",\\n    \\\"rmdir\\\",\\n    \\\"shift\\\",\\n    \\\"sort\\\",\\n    \\\"start\\\",\\n    \\\"subst\\\",\\n    \\\"time\\\",\\n    \\\"title\\\",\\n    \\\"tree\\\",\\n    \\\"type\\\",\\n    \\\"ver\\\",\\n    \\\"verify\\\",\\n    \\\"vol\\\",\\n    // winutils\\n    \\\"ping\\\",\\n    \\\"net\\\",\\n    \\\"ipconfig\\\",\\n    \\\"taskkill\\\",\\n    \\\"xcopy\\\",\\n    \\\"ren\\\",\\n    \\\"del\\\"\\n  ];\\n  return {\\n    name: 'Batch file (DOS)',\\n    aliases: [\\n      'bat',\\n      'cmd'\\n    ],\\n    case_insensitive: true,\\n    illegal: /\\\\/\\\\*/,\\n    keywords: {\\n      keyword: KEYWORDS,\\n      built_in: BUILT_INS\\n    },\\n    contains: [\\n      {\\n        className: 'variable',\\n        begin: /%%[^ ]|%[^ ]+?%|![^ ]+?!/\\n      },\\n      {\\n        className: 'function',\\n        begin: LABEL.begin,\\n        end: 'goto:eof',\\n        contains: [\\n          hljs.inherit(hljs.TITLE_MODE, { begin: '([_a-zA-Z]\\\\\\\\w*\\\\\\\\.)*([_a-zA-Z]\\\\\\\\w*:)?[_a-zA-Z]\\\\\\\\w*' }),\\n          COMMENT\\n        ]\\n      },\\n      {\\n        className: 'number',\\n        begin: '\\\\\\\\b\\\\\\\\d+',\\n        relevance: 0\\n      },\\n      COMMENT\\n    ]\\n  };\\n}\\n\\nmodule.exports = dos;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/dos.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/dsconfig.js\":\n/*!*************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/dsconfig.js ***!\n  \\*************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\n Language: dsconfig\\n Description: dsconfig batch configuration language for LDAP directory servers\\n Contributors: Jacob Childress <jacobc@gmail.com>\\n Category: enterprise, config\\n */\\n\\n/** @type LanguageFn */\\nfunction dsconfig(hljs) {\\n  const QUOTED_PROPERTY = {\\n    className: 'string',\\n    begin: /\\\"/,\\n    end: /\\\"/\\n  };\\n  const APOS_PROPERTY = {\\n    className: 'string',\\n    begin: /'/,\\n    end: /'/\\n  };\\n  const UNQUOTED_PROPERTY = {\\n    className: 'string',\\n    begin: /[\\\\w\\\\-?]+:\\\\w+/,\\n    end: /\\\\W/,\\n    relevance: 0\\n  };\\n  const VALUELESS_PROPERTY = {\\n    className: 'string',\\n    begin: /\\\\w+(\\\\-\\\\w+)*/,\\n    end: /(?=\\\\W)/,\\n    relevance: 0\\n  };\\n\\n  return {\\n    keywords: 'dsconfig',\\n    contains: [\\n      {\\n        className: 'keyword',\\n        begin: '^dsconfig',\\n        end: /\\\\s/,\\n        excludeEnd: true,\\n        relevance: 10\\n      },\\n      {\\n        className: 'built_in',\\n        begin: /(list|create|get|set|delete)-(\\\\w+)/,\\n        end: /\\\\s/,\\n        excludeEnd: true,\\n        illegal: '!@#$%^&*()',\\n        relevance: 10\\n      },\\n      {\\n        className: 'built_in',\\n        begin: /--(\\\\w+)/,\\n        end: /\\\\s/,\\n        excludeEnd: true\\n      },\\n      QUOTED_PROPERTY,\\n      APOS_PROPERTY,\\n      UNQUOTED_PROPERTY,\\n      VALUELESS_PROPERTY,\\n      hljs.HASH_COMMENT_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = dsconfig;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/dsconfig.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/dts.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/dts.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Device Tree\\nDescription: *.dts files used in the Linux kernel\\nAuthor: Martin Braun <martin.braun@ettus.com>, Moritz Fischer <moritz.fischer@ettus.com>\\nWebsite: https://elinux.org/Device_Tree_Reference\\nCategory: config\\n*/\\n\\n/** @type LanguageFn */\\nfunction dts(hljs) {\\n  const STRINGS = {\\n    className: 'string',\\n    variants: [\\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { begin: '((u8?|U)|L)?\\\"' }),\\n      {\\n        begin: '(u8?|U)?R\\\"',\\n        end: '\\\"',\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      },\\n      {\\n        begin: '\\\\'\\\\\\\\\\\\\\\\?.',\\n        end: '\\\\'',\\n        illegal: '.'\\n      }\\n    ]\\n  };\\n\\n  const NUMBERS = {\\n    className: 'number',\\n    variants: [\\n      { begin: '\\\\\\\\b(\\\\\\\\d+(\\\\\\\\.\\\\\\\\d*)?|\\\\\\\\.\\\\\\\\d+)(u|U|l|L|ul|UL|f|F)' },\\n      { begin: hljs.C_NUMBER_RE }\\n    ],\\n    relevance: 0\\n  };\\n\\n  const PREPROCESSOR = {\\n    className: 'meta',\\n    begin: '#',\\n    end: '$',\\n    keywords: { keyword: 'if else elif endif define undef ifdef ifndef' },\\n    contains: [\\n      {\\n        begin: /\\\\\\\\\\\\n/,\\n        relevance: 0\\n      },\\n      {\\n        beginKeywords: 'include',\\n        end: '$',\\n        keywords: { keyword: 'include' },\\n        contains: [\\n          hljs.inherit(STRINGS, { className: 'string' }),\\n          {\\n            className: 'string',\\n            begin: '<',\\n            end: '>',\\n            illegal: '\\\\\\\\n'\\n          }\\n        ]\\n      },\\n      STRINGS,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE\\n    ]\\n  };\\n\\n  const REFERENCE = {\\n    className: 'variable',\\n    begin: /&[a-z\\\\d_]*\\\\b/\\n  };\\n\\n  const KEYWORD = {\\n    className: 'keyword',\\n    begin: '/[a-z][a-z\\\\\\\\d-]*/'\\n  };\\n\\n  const LABEL = {\\n    className: 'symbol',\\n    begin: '^\\\\\\\\s*[a-zA-Z_][a-zA-Z\\\\\\\\d_]*:'\\n  };\\n\\n  const CELL_PROPERTY = {\\n    className: 'params',\\n    relevance: 0,\\n    begin: '<',\\n    end: '>',\\n    contains: [\\n      NUMBERS,\\n      REFERENCE\\n    ]\\n  };\\n\\n  const NODE = {\\n    className: 'title.class',\\n    begin: /[a-zA-Z_][a-zA-Z\\\\d_@-]*(?=\\\\s\\\\{)/,\\n    relevance: 0.2\\n  };\\n\\n  const ROOT_NODE = {\\n    className: 'title.class',\\n    begin: /^\\\\/(?=\\\\s*\\\\{)/,\\n    relevance: 10\\n  };\\n\\n  // TODO: `attribute` might be the right scope here, unsure\\n  // I'm not sure if all these key names have semantic meaning or not\\n  const ATTR_NO_VALUE = {\\n    match: /[a-z][a-z-,]+(?=;)/,\\n    relevance: 0,\\n    scope: \\\"attr\\\"\\n  };\\n  const ATTR = {\\n    relevance: 0,\\n    match: [\\n      /[a-z][a-z-,]+/,\\n      /\\\\s*/,\\n      /=/\\n    ],\\n    scope: {\\n      1: \\\"attr\\\",\\n      3: \\\"operator\\\"\\n    }\\n  };\\n\\n  const PUNC = {\\n    scope: \\\"punctuation\\\",\\n    relevance: 0,\\n    // `};` combined is just to avoid tons of useless punctuation nodes\\n    match: /\\\\};|[;{}]/\\n  };\\n\\n  return {\\n    name: 'Device Tree',\\n    contains: [\\n      ROOT_NODE,\\n      REFERENCE,\\n      KEYWORD,\\n      LABEL,\\n      NODE,\\n      ATTR,\\n      ATTR_NO_VALUE,\\n      CELL_PROPERTY,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      NUMBERS,\\n      STRINGS,\\n      PREPROCESSOR,\\n      PUNC,\\n      {\\n        begin: hljs.IDENT_RE + '::',\\n        keywords: \\\"\\\"\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = dts;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/dts.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/dust.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/dust.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Dust\\nRequires: xml.js\\nAuthor: Michael Allen <michael.allen@benefitfocus.com>\\nDescription: Matcher for dust.js templates.\\nWebsite: https://www.dustjs.com\\nCategory: template\\n*/\\n\\n/** @type LanguageFn */\\nfunction dust(hljs) {\\n  const EXPRESSION_KEYWORDS = 'if eq ne lt lte gt gte select default math sep';\\n  return {\\n    name: 'Dust',\\n    aliases: [ 'dst' ],\\n    case_insensitive: true,\\n    subLanguage: 'xml',\\n    contains: [\\n      {\\n        className: 'template-tag',\\n        begin: /\\\\{[#\\\\/]/,\\n        end: /\\\\}/,\\n        illegal: /;/,\\n        contains: [\\n          {\\n            className: 'name',\\n            begin: /[a-zA-Z\\\\.-]+/,\\n            starts: {\\n              endsWithParent: true,\\n              relevance: 0,\\n              contains: [ hljs.QUOTE_STRING_MODE ]\\n            }\\n          }\\n        ]\\n      },\\n      {\\n        className: 'template-variable',\\n        begin: /\\\\{/,\\n        end: /\\\\}/,\\n        illegal: /;/,\\n        keywords: EXPRESSION_KEYWORDS\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = dust;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/dust.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/ebnf.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/ebnf.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Extended Backus-Naur Form\\nAuthor: Alex McKibben <alex@nullscope.net>\\nWebsite: https://en.wikipedia.org/wiki/Extended_Backus–Naur_form\\n*/\\n\\n/** @type LanguageFn */\\nfunction ebnf(hljs) {\\n  const commentMode = hljs.COMMENT(/\\\\(\\\\*/, /\\\\*\\\\)/);\\n\\n  const nonTerminalMode = {\\n    className: \\\"attribute\\\",\\n    begin: /^[ ]*[a-zA-Z]+([\\\\s_-]+[a-zA-Z]+)*/\\n  };\\n\\n  const specialSequenceMode = {\\n    className: \\\"meta\\\",\\n    begin: /\\\\?.*\\\\?/\\n  };\\n\\n  const ruleBodyMode = {\\n    begin: /=/,\\n    end: /[.;]/,\\n    contains: [\\n      commentMode,\\n      specialSequenceMode,\\n      {\\n        // terminals\\n        className: 'string',\\n        variants: [\\n          hljs.APOS_STRING_MODE,\\n          hljs.QUOTE_STRING_MODE,\\n          {\\n            begin: '`',\\n            end: '`'\\n          }\\n        ]\\n      }\\n    ]\\n  };\\n\\n  return {\\n    name: 'Extended Backus-Naur Form',\\n    illegal: /\\\\S/,\\n    contains: [\\n      commentMode,\\n      nonTerminalMode,\\n      ruleBodyMode\\n    ]\\n  };\\n}\\n\\nmodule.exports = ebnf;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/ebnf.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/elixir.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/elixir.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Elixir\\nAuthor: Josh Adams <josh@isotope11.com>\\nDescription: language definition for Elixir source code files (.ex and .exs).  Based on ruby language support.\\nCategory: functional\\nWebsite: https://elixir-lang.org\\n*/\\n\\n/** @type LanguageFn */\\nfunction elixir(hljs) {\\n  const regex = hljs.regex;\\n  const ELIXIR_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_.]*(!|\\\\\\\\?)?';\\n  const ELIXIR_METHOD_RE = '[a-zA-Z_]\\\\\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\\\\\*\\\\\\\\*|[-/+%^&*~`|]|\\\\\\\\[\\\\\\\\]=?';\\n  const KEYWORDS = [\\n    \\\"after\\\",\\n    \\\"alias\\\",\\n    \\\"and\\\",\\n    \\\"case\\\",\\n    \\\"catch\\\",\\n    \\\"cond\\\",\\n    \\\"defstruct\\\",\\n    \\\"defguard\\\",\\n    \\\"do\\\",\\n    \\\"else\\\",\\n    \\\"end\\\",\\n    \\\"fn\\\",\\n    \\\"for\\\",\\n    \\\"if\\\",\\n    \\\"import\\\",\\n    \\\"in\\\",\\n    \\\"not\\\",\\n    \\\"or\\\",\\n    \\\"quote\\\",\\n    \\\"raise\\\",\\n    \\\"receive\\\",\\n    \\\"require\\\",\\n    \\\"reraise\\\",\\n    \\\"rescue\\\",\\n    \\\"try\\\",\\n    \\\"unless\\\",\\n    \\\"unquote\\\",\\n    \\\"unquote_splicing\\\",\\n    \\\"use\\\",\\n    \\\"when\\\",\\n    \\\"with|0\\\"\\n  ];\\n  const LITERALS = [\\n    \\\"false\\\",\\n    \\\"nil\\\",\\n    \\\"true\\\"\\n  ];\\n  const KWS = {\\n    $pattern: ELIXIR_IDENT_RE,\\n    keyword: KEYWORDS,\\n    literal: LITERALS\\n  };\\n  const SUBST = {\\n    className: 'subst',\\n    begin: /#\\\\{/,\\n    end: /\\\\}/,\\n    keywords: KWS\\n  };\\n  const NUMBER = {\\n    className: 'number',\\n    begin: '(\\\\\\\\b0o[0-7_]+)|(\\\\\\\\b0b[01_]+)|(\\\\\\\\b0x[0-9a-fA-F_]+)|(-?\\\\\\\\b[0-9][0-9_]*(\\\\\\\\.[0-9_]+([eE][-+]?[0-9]+)?)?)',\\n    relevance: 0\\n  };\\n  // TODO: could be tightened\\n  // https://elixir-lang.readthedocs.io/en/latest/intro/18.html\\n  // but you also need to include closing delemeters in the escape list per\\n  // individual sigil mode from what I can tell,\\n  // ie: \\\\} might or might not be an escape depending on the sigil used\\n  const ESCAPES_RE = /\\\\\\\\[\\\\s\\\\S]/;\\n  // const ESCAPES_RE = /\\\\\\\\[\\\"'\\\\\\\\abdefnrstv0]/;\\n  const BACKSLASH_ESCAPE = {\\n    match: ESCAPES_RE,\\n    scope: \\\"char.escape\\\",\\n    relevance: 0\\n  };\\n  const SIGIL_DELIMITERS = '[/|([{<\\\"\\\\']';\\n  const SIGIL_DELIMITER_MODES = [\\n    {\\n      begin: /\\\"/,\\n      end: /\\\"/\\n    },\\n    {\\n      begin: /'/,\\n      end: /'/\\n    },\\n    {\\n      begin: /\\\\//,\\n      end: /\\\\//\\n    },\\n    {\\n      begin: /\\\\|/,\\n      end: /\\\\|/\\n    },\\n    {\\n      begin: /\\\\(/,\\n      end: /\\\\)/\\n    },\\n    {\\n      begin: /\\\\[/,\\n      end: /\\\\]/\\n    },\\n    {\\n      begin: /\\\\{/,\\n      end: /\\\\}/\\n    },\\n    {\\n      begin: /</,\\n      end: />/\\n    }\\n  ];\\n  const escapeSigilEnd = (end) => {\\n    return {\\n      scope: \\\"char.escape\\\",\\n      begin: regex.concat(/\\\\\\\\/, end),\\n      relevance: 0\\n    };\\n  };\\n  const LOWERCASE_SIGIL = {\\n    className: 'string',\\n    begin: '~[a-z]' + '(?=' + SIGIL_DELIMITERS + ')',\\n    contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\\n      { contains: [\\n        escapeSigilEnd(x.end),\\n        BACKSLASH_ESCAPE,\\n        SUBST\\n      ] }\\n    ))\\n  };\\n\\n  const UPCASE_SIGIL = {\\n    className: 'string',\\n    begin: '~[A-Z]' + '(?=' + SIGIL_DELIMITERS + ')',\\n    contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\\n      { contains: [ escapeSigilEnd(x.end) ] }\\n    ))\\n  };\\n\\n  const REGEX_SIGIL = {\\n    className: 'regex',\\n    variants: [\\n      {\\n        begin: '~r' + '(?=' + SIGIL_DELIMITERS + ')',\\n        contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\\n          {\\n            end: regex.concat(x.end, /[uismxfU]{0,7}/),\\n            contains: [\\n              escapeSigilEnd(x.end),\\n              BACKSLASH_ESCAPE,\\n              SUBST\\n            ]\\n          }\\n        ))\\n      },\\n      {\\n        begin: '~R' + '(?=' + SIGIL_DELIMITERS + ')',\\n        contains: SIGIL_DELIMITER_MODES.map(x => hljs.inherit(x,\\n          {\\n            end: regex.concat(x.end, /[uismxfU]{0,7}/),\\n            contains: [ escapeSigilEnd(x.end) ]\\n          })\\n        )\\n      }\\n    ]\\n  };\\n\\n  const STRING = {\\n    className: 'string',\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      SUBST\\n    ],\\n    variants: [\\n      {\\n        begin: /\\\"\\\"\\\"/,\\n        end: /\\\"\\\"\\\"/\\n      },\\n      {\\n        begin: /'''/,\\n        end: /'''/\\n      },\\n      {\\n        begin: /~S\\\"\\\"\\\"/,\\n        end: /\\\"\\\"\\\"/,\\n        contains: [] // override default\\n      },\\n      {\\n        begin: /~S\\\"/,\\n        end: /\\\"/,\\n        contains: [] // override default\\n      },\\n      {\\n        begin: /~S'''/,\\n        end: /'''/,\\n        contains: [] // override default\\n      },\\n      {\\n        begin: /~S'/,\\n        end: /'/,\\n        contains: [] // override default\\n      },\\n      {\\n        begin: /'/,\\n        end: /'/\\n      },\\n      {\\n        begin: /\\\"/,\\n        end: /\\\"/\\n      }\\n    ]\\n  };\\n  const FUNCTION = {\\n    className: 'function',\\n    beginKeywords: 'def defp defmacro defmacrop',\\n    end: /\\\\B\\\\b/, // the mode is ended by the title\\n    contains: [\\n      hljs.inherit(hljs.TITLE_MODE, {\\n        begin: ELIXIR_IDENT_RE,\\n        endsParent: true\\n      })\\n    ]\\n  };\\n  const CLASS = hljs.inherit(FUNCTION, {\\n    className: 'class',\\n    beginKeywords: 'defimpl defmodule defprotocol defrecord',\\n    end: /\\\\bdo\\\\b|$|;/\\n  });\\n  const ELIXIR_DEFAULT_CONTAINS = [\\n    STRING,\\n    REGEX_SIGIL,\\n    UPCASE_SIGIL,\\n    LOWERCASE_SIGIL,\\n    hljs.HASH_COMMENT_MODE,\\n    CLASS,\\n    FUNCTION,\\n    { begin: '::' },\\n    {\\n      className: 'symbol',\\n      begin: ':(?![\\\\\\\\s:])',\\n      contains: [\\n        STRING,\\n        { begin: ELIXIR_METHOD_RE }\\n      ],\\n      relevance: 0\\n    },\\n    {\\n      className: 'symbol',\\n      begin: ELIXIR_IDENT_RE + ':(?!:)',\\n      relevance: 0\\n    },\\n    { // Usage of a module, struct, etc.\\n      className: 'title.class',\\n      begin: /(\\\\b[A-Z][a-zA-Z0-9_]+)/,\\n      relevance: 0\\n    },\\n    NUMBER,\\n    {\\n      className: 'variable',\\n      begin: '(\\\\\\\\$\\\\\\\\W)|((\\\\\\\\$|@@?)(\\\\\\\\w+))'\\n    }\\n    // -> has been removed, capnproto always uses this grammar construct\\n  ];\\n  SUBST.contains = ELIXIR_DEFAULT_CONTAINS;\\n\\n  return {\\n    name: 'Elixir',\\n    aliases: [\\n      'ex',\\n      'exs'\\n    ],\\n    keywords: KWS,\\n    contains: ELIXIR_DEFAULT_CONTAINS\\n  };\\n}\\n\\nmodule.exports = elixir;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/elixir.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/elm.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/elm.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Elm\\nAuthor: Janis Voigtlaender <janis.voigtlaender@gmail.com>\\nWebsite: https://elm-lang.org\\nCategory: functional\\n*/\\n\\n/** @type LanguageFn */\\nfunction elm(hljs) {\\n  const COMMENT = { variants: [\\n    hljs.COMMENT('--', '$'),\\n    hljs.COMMENT(\\n      /\\\\{-/,\\n      /-\\\\}/,\\n      { contains: [ 'self' ] }\\n    )\\n  ] };\\n\\n  const CONSTRUCTOR = {\\n    className: 'type',\\n    begin: '\\\\\\\\b[A-Z][\\\\\\\\w\\\\']*', // TODO: other constructors (built-in, infix).\\n    relevance: 0\\n  };\\n\\n  const LIST = {\\n    begin: '\\\\\\\\(',\\n    end: '\\\\\\\\)',\\n    illegal: '\\\"',\\n    contains: [\\n      {\\n        className: 'type',\\n        begin: '\\\\\\\\b[A-Z][\\\\\\\\w]*(\\\\\\\\((\\\\\\\\.\\\\\\\\.|,|\\\\\\\\w+)\\\\\\\\))?'\\n      },\\n      COMMENT\\n    ]\\n  };\\n\\n  const RECORD = {\\n    begin: /\\\\{/,\\n    end: /\\\\}/,\\n    contains: LIST.contains\\n  };\\n\\n  const CHARACTER = {\\n    className: 'string',\\n    begin: '\\\\'\\\\\\\\\\\\\\\\?.',\\n    end: '\\\\'',\\n    illegal: '.'\\n  };\\n\\n  const KEYWORDS = [\\n    \\\"let\\\",\\n    \\\"in\\\",\\n    \\\"if\\\",\\n    \\\"then\\\",\\n    \\\"else\\\",\\n    \\\"case\\\",\\n    \\\"of\\\",\\n    \\\"where\\\",\\n    \\\"module\\\",\\n    \\\"import\\\",\\n    \\\"exposing\\\",\\n    \\\"type\\\",\\n    \\\"alias\\\",\\n    \\\"as\\\",\\n    \\\"infix\\\",\\n    \\\"infixl\\\",\\n    \\\"infixr\\\",\\n    \\\"port\\\",\\n    \\\"effect\\\",\\n    \\\"command\\\",\\n    \\\"subscription\\\"\\n  ];\\n\\n  return {\\n    name: 'Elm',\\n    keywords: KEYWORDS,\\n    contains: [\\n\\n      // Top-level constructions.\\n\\n      {\\n        beginKeywords: 'port effect module',\\n        end: 'exposing',\\n        keywords: 'port effect module where command subscription exposing',\\n        contains: [\\n          LIST,\\n          COMMENT\\n        ],\\n        illegal: '\\\\\\\\W\\\\\\\\.|;'\\n      },\\n      {\\n        begin: 'import',\\n        end: '$',\\n        keywords: 'import as exposing',\\n        contains: [\\n          LIST,\\n          COMMENT\\n        ],\\n        illegal: '\\\\\\\\W\\\\\\\\.|;'\\n      },\\n      {\\n        begin: 'type',\\n        end: '$',\\n        keywords: 'type alias',\\n        contains: [\\n          CONSTRUCTOR,\\n          LIST,\\n          RECORD,\\n          COMMENT\\n        ]\\n      },\\n      {\\n        beginKeywords: 'infix infixl infixr',\\n        end: '$',\\n        contains: [\\n          hljs.C_NUMBER_MODE,\\n          COMMENT\\n        ]\\n      },\\n      {\\n        begin: 'port',\\n        end: '$',\\n        keywords: 'port',\\n        contains: [ COMMENT ]\\n      },\\n\\n      // Literals and names.\\n      CHARACTER,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.C_NUMBER_MODE,\\n      CONSTRUCTOR,\\n      hljs.inherit(hljs.TITLE_MODE, { begin: '^[_a-z][\\\\\\\\w\\\\']*' }),\\n      COMMENT,\\n\\n      { // No markup, relevance booster\\n        begin: '->|<-' }\\n    ],\\n    illegal: /;/\\n  };\\n}\\n\\nmodule.exports = elm;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/elm.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/erb.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/erb.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: ERB (Embedded Ruby)\\nRequires: xml.js, ruby.js\\nAuthor: Lucas Mazza <lucastmazza@gmail.com>\\nContributors: Kassio Borges <kassioborgesm@gmail.com>\\nDescription: \\\"Bridge\\\" language defining fragments of Ruby in HTML within <% .. %>\\nWebsite: https://ruby-doc.org/stdlib-2.6.5/libdoc/erb/rdoc/ERB.html\\nCategory: template\\n*/\\n\\n/** @type LanguageFn */\\nfunction erb(hljs) {\\n  return {\\n    name: 'ERB',\\n    subLanguage: 'xml',\\n    contains: [\\n      hljs.COMMENT('<%#', '%>'),\\n      {\\n        begin: '<%[%=-]?',\\n        end: '[%-]?%>',\\n        subLanguage: 'ruby',\\n        excludeBegin: true,\\n        excludeEnd: true\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = erb;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/erb.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/erlang-repl.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/erlang-repl.js ***!\n  \\****************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Erlang REPL\\nAuthor: Sergey Ignatov <sergey@ignatov.spb.su>\\nWebsite: https://www.erlang.org\\nCategory: functional\\n*/\\n\\n/** @type LanguageFn */\\nfunction erlangRepl(hljs) {\\n  const regex = hljs.regex;\\n  return {\\n    name: 'Erlang REPL',\\n    keywords: {\\n      built_in:\\n        'spawn spawn_link self',\\n      keyword:\\n        'after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if '\\n        + 'let not of or orelse|10 query receive rem try when xor'\\n    },\\n    contains: [\\n      {\\n        className: 'meta.prompt',\\n        begin: '^[0-9]+> ',\\n        relevance: 10\\n      },\\n      hljs.COMMENT('%', '$'),\\n      {\\n        className: 'number',\\n        begin: '\\\\\\\\b(\\\\\\\\d+(_\\\\\\\\d+)*#[a-fA-F0-9]+(_[a-fA-F0-9]+)*|\\\\\\\\d+(_\\\\\\\\d+)*(\\\\\\\\.\\\\\\\\d+(_\\\\\\\\d+)*)?([eE][-+]?\\\\\\\\d+)?)',\\n        relevance: 0\\n      },\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      { begin: regex.concat(\\n        /\\\\?(::)?/,\\n        /([A-Z]\\\\w*)/, // at least one identifier\\n        /((::)[A-Z]\\\\w*)*/ // perhaps more\\n      ) },\\n      { begin: '->' },\\n      { begin: 'ok' },\\n      { begin: '!' },\\n      {\\n        begin: '(\\\\\\\\b[a-z\\\\'][a-zA-Z0-9_\\\\']*:[a-z\\\\'][a-zA-Z0-9_\\\\']*)|(\\\\\\\\b[a-z\\\\'][a-zA-Z0-9_\\\\']*)',\\n        relevance: 0\\n      },\\n      {\\n        begin: '[A-Z][a-zA-Z0-9_\\\\']*',\\n        relevance: 0\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = erlangRepl;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/erlang-repl.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/erlang.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/erlang.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Erlang\\nDescription: Erlang is a general-purpose functional language, with strict evaluation, single assignment, and dynamic typing.\\nAuthor: Nikolay Zakharov <nikolay.desh@gmail.com>, Dmitry Kovega <arhibot@gmail.com>\\nWebsite: https://www.erlang.org\\nCategory: functional\\n*/\\n\\n/** @type LanguageFn */\\nfunction erlang(hljs) {\\n  const BASIC_ATOM_RE = '[a-z\\\\'][a-zA-Z0-9_\\\\']*';\\n  const FUNCTION_NAME_RE = '(' + BASIC_ATOM_RE + ':' + BASIC_ATOM_RE + '|' + BASIC_ATOM_RE + ')';\\n  const ERLANG_RESERVED = {\\n    keyword:\\n      'after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if '\\n      + 'let not of orelse|10 query receive rem try when xor',\\n    literal:\\n      'false true'\\n  };\\n\\n  const COMMENT = hljs.COMMENT('%', '$');\\n  const NUMBER = {\\n    className: 'number',\\n    begin: '\\\\\\\\b(\\\\\\\\d+(_\\\\\\\\d+)*#[a-fA-F0-9]+(_[a-fA-F0-9]+)*|\\\\\\\\d+(_\\\\\\\\d+)*(\\\\\\\\.\\\\\\\\d+(_\\\\\\\\d+)*)?([eE][-+]?\\\\\\\\d+)?)',\\n    relevance: 0\\n  };\\n  const NAMED_FUN = { begin: 'fun\\\\\\\\s+' + BASIC_ATOM_RE + '/\\\\\\\\d+' };\\n  const FUNCTION_CALL = {\\n    begin: FUNCTION_NAME_RE + '\\\\\\\\(',\\n    end: '\\\\\\\\)',\\n    returnBegin: true,\\n    relevance: 0,\\n    contains: [\\n      {\\n        begin: FUNCTION_NAME_RE,\\n        relevance: 0\\n      },\\n      {\\n        begin: '\\\\\\\\(',\\n        end: '\\\\\\\\)',\\n        endsWithParent: true,\\n        returnEnd: true,\\n        relevance: 0\\n        // \\\"contains\\\" defined later\\n      }\\n    ]\\n  };\\n  const TUPLE = {\\n    begin: /\\\\{/,\\n    end: /\\\\}/,\\n    relevance: 0\\n    // \\\"contains\\\" defined later\\n  };\\n  const VAR1 = {\\n    begin: '\\\\\\\\b_([A-Z][A-Za-z0-9_]*)?',\\n    relevance: 0\\n  };\\n  const VAR2 = {\\n    begin: '[A-Z][a-zA-Z0-9_]*',\\n    relevance: 0\\n  };\\n  const RECORD_ACCESS = {\\n    begin: '#' + hljs.UNDERSCORE_IDENT_RE,\\n    relevance: 0,\\n    returnBegin: true,\\n    contains: [\\n      {\\n        begin: '#' + hljs.UNDERSCORE_IDENT_RE,\\n        relevance: 0\\n      },\\n      {\\n        begin: /\\\\{/,\\n        end: /\\\\}/,\\n        relevance: 0\\n        // \\\"contains\\\" defined later\\n      }\\n    ]\\n  };\\n\\n  const BLOCK_STATEMENTS = {\\n    beginKeywords: 'fun receive if try case',\\n    end: 'end',\\n    keywords: ERLANG_RESERVED\\n  };\\n  BLOCK_STATEMENTS.contains = [\\n    COMMENT,\\n    NAMED_FUN,\\n    hljs.inherit(hljs.APOS_STRING_MODE, { className: '' }),\\n    BLOCK_STATEMENTS,\\n    FUNCTION_CALL,\\n    hljs.QUOTE_STRING_MODE,\\n    NUMBER,\\n    TUPLE,\\n    VAR1,\\n    VAR2,\\n    RECORD_ACCESS\\n  ];\\n\\n  const BASIC_MODES = [\\n    COMMENT,\\n    NAMED_FUN,\\n    BLOCK_STATEMENTS,\\n    FUNCTION_CALL,\\n    hljs.QUOTE_STRING_MODE,\\n    NUMBER,\\n    TUPLE,\\n    VAR1,\\n    VAR2,\\n    RECORD_ACCESS\\n  ];\\n  FUNCTION_CALL.contains[1].contains = BASIC_MODES;\\n  TUPLE.contains = BASIC_MODES;\\n  RECORD_ACCESS.contains[1].contains = BASIC_MODES;\\n\\n  const DIRECTIVES = [\\n    \\\"-module\\\",\\n    \\\"-record\\\",\\n    \\\"-undef\\\",\\n    \\\"-export\\\",\\n    \\\"-ifdef\\\",\\n    \\\"-ifndef\\\",\\n    \\\"-author\\\",\\n    \\\"-copyright\\\",\\n    \\\"-doc\\\",\\n    \\\"-vsn\\\",\\n    \\\"-import\\\",\\n    \\\"-include\\\",\\n    \\\"-include_lib\\\",\\n    \\\"-compile\\\",\\n    \\\"-define\\\",\\n    \\\"-else\\\",\\n    \\\"-endif\\\",\\n    \\\"-file\\\",\\n    \\\"-behaviour\\\",\\n    \\\"-behavior\\\",\\n    \\\"-spec\\\"\\n  ];\\n\\n  const PARAMS = {\\n    className: 'params',\\n    begin: '\\\\\\\\(',\\n    end: '\\\\\\\\)',\\n    contains: BASIC_MODES\\n  };\\n  return {\\n    name: 'Erlang',\\n    aliases: [ 'erl' ],\\n    keywords: ERLANG_RESERVED,\\n    illegal: '(</|\\\\\\\\*=|\\\\\\\\+=|-=|/\\\\\\\\*|\\\\\\\\*/|\\\\\\\\(\\\\\\\\*|\\\\\\\\*\\\\\\\\))',\\n    contains: [\\n      {\\n        className: 'function',\\n        begin: '^' + BASIC_ATOM_RE + '\\\\\\\\s*\\\\\\\\(',\\n        end: '->',\\n        returnBegin: true,\\n        illegal: '\\\\\\\\(|#|//|/\\\\\\\\*|\\\\\\\\\\\\\\\\|:|;',\\n        contains: [\\n          PARAMS,\\n          hljs.inherit(hljs.TITLE_MODE, { begin: BASIC_ATOM_RE })\\n        ],\\n        starts: {\\n          end: ';|\\\\\\\\.',\\n          keywords: ERLANG_RESERVED,\\n          contains: BASIC_MODES\\n        }\\n      },\\n      COMMENT,\\n      {\\n        begin: '^-',\\n        end: '\\\\\\\\.',\\n        relevance: 0,\\n        excludeEnd: true,\\n        returnBegin: true,\\n        keywords: {\\n          $pattern: '-' + hljs.IDENT_RE,\\n          keyword: DIRECTIVES.map(x => `${x}|1.5`).join(\\\" \\\")\\n        },\\n        contains: [ PARAMS ]\\n      },\\n      NUMBER,\\n      hljs.QUOTE_STRING_MODE,\\n      RECORD_ACCESS,\\n      VAR1,\\n      VAR2,\\n      TUPLE,\\n      { begin: /\\\\.$/ } // relevance booster\\n    ]\\n  };\\n}\\n\\nmodule.exports = erlang;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/erlang.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/excel.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/excel.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Excel formulae\\nAuthor: Victor Zhou <OiCMudkips@users.noreply.github.com>\\nDescription: Excel formulae\\nWebsite: https://products.office.com/en-us/excel/\\n*/\\n\\n/** @type LanguageFn */\\nfunction excel(hljs) {\\n  // built-in functions imported from https://web.archive.org/web/20160513042710/https://support.office.com/en-us/article/Excel-functions-alphabetical-b3944572-255d-4efb-bb96-c6d90033e188\\n  const BUILT_INS = [\\n    \\\"ABS\\\",\\n    \\\"ACCRINT\\\",\\n    \\\"ACCRINTM\\\",\\n    \\\"ACOS\\\",\\n    \\\"ACOSH\\\",\\n    \\\"ACOT\\\",\\n    \\\"ACOTH\\\",\\n    \\\"AGGREGATE\\\",\\n    \\\"ADDRESS\\\",\\n    \\\"AMORDEGRC\\\",\\n    \\\"AMORLINC\\\",\\n    \\\"AND\\\",\\n    \\\"ARABIC\\\",\\n    \\\"AREAS\\\",\\n    \\\"ASC\\\",\\n    \\\"ASIN\\\",\\n    \\\"ASINH\\\",\\n    \\\"ATAN\\\",\\n    \\\"ATAN2\\\",\\n    \\\"ATANH\\\",\\n    \\\"AVEDEV\\\",\\n    \\\"AVERAGE\\\",\\n    \\\"AVERAGEA\\\",\\n    \\\"AVERAGEIF\\\",\\n    \\\"AVERAGEIFS\\\",\\n    \\\"BAHTTEXT\\\",\\n    \\\"BASE\\\",\\n    \\\"BESSELI\\\",\\n    \\\"BESSELJ\\\",\\n    \\\"BESSELK\\\",\\n    \\\"BESSELY\\\",\\n    \\\"BETADIST\\\",\\n    \\\"BETA.DIST\\\",\\n    \\\"BETAINV\\\",\\n    \\\"BETA.INV\\\",\\n    \\\"BIN2DEC\\\",\\n    \\\"BIN2HEX\\\",\\n    \\\"BIN2OCT\\\",\\n    \\\"BINOMDIST\\\",\\n    \\\"BINOM.DIST\\\",\\n    \\\"BINOM.DIST.RANGE\\\",\\n    \\\"BINOM.INV\\\",\\n    \\\"BITAND\\\",\\n    \\\"BITLSHIFT\\\",\\n    \\\"BITOR\\\",\\n    \\\"BITRSHIFT\\\",\\n    \\\"BITXOR\\\",\\n    \\\"CALL\\\",\\n    \\\"CEILING\\\",\\n    \\\"CEILING.MATH\\\",\\n    \\\"CEILING.PRECISE\\\",\\n    \\\"CELL\\\",\\n    \\\"CHAR\\\",\\n    \\\"CHIDIST\\\",\\n    \\\"CHIINV\\\",\\n    \\\"CHITEST\\\",\\n    \\\"CHISQ.DIST\\\",\\n    \\\"CHISQ.DIST.RT\\\",\\n    \\\"CHISQ.INV\\\",\\n    \\\"CHISQ.INV.RT\\\",\\n    \\\"CHISQ.TEST\\\",\\n    \\\"CHOOSE\\\",\\n    \\\"CLEAN\\\",\\n    \\\"CODE\\\",\\n    \\\"COLUMN\\\",\\n    \\\"COLUMNS\\\",\\n    \\\"COMBIN\\\",\\n    \\\"COMBINA\\\",\\n    \\\"COMPLEX\\\",\\n    \\\"CONCAT\\\",\\n    \\\"CONCATENATE\\\",\\n    \\\"CONFIDENCE\\\",\\n    \\\"CONFIDENCE.NORM\\\",\\n    \\\"CONFIDENCE.T\\\",\\n    \\\"CONVERT\\\",\\n    \\\"CORREL\\\",\\n    \\\"COS\\\",\\n    \\\"COSH\\\",\\n    \\\"COT\\\",\\n    \\\"COTH\\\",\\n    \\\"COUNT\\\",\\n    \\\"COUNTA\\\",\\n    \\\"COUNTBLANK\\\",\\n    \\\"COUNTIF\\\",\\n    \\\"COUNTIFS\\\",\\n    \\\"COUPDAYBS\\\",\\n    \\\"COUPDAYS\\\",\\n    \\\"COUPDAYSNC\\\",\\n    \\\"COUPNCD\\\",\\n    \\\"COUPNUM\\\",\\n    \\\"COUPPCD\\\",\\n    \\\"COVAR\\\",\\n    \\\"COVARIANCE.P\\\",\\n    \\\"COVARIANCE.S\\\",\\n    \\\"CRITBINOM\\\",\\n    \\\"CSC\\\",\\n    \\\"CSCH\\\",\\n    \\\"CUBEKPIMEMBER\\\",\\n    \\\"CUBEMEMBER\\\",\\n    \\\"CUBEMEMBERPROPERTY\\\",\\n    \\\"CUBERANKEDMEMBER\\\",\\n    \\\"CUBESET\\\",\\n    \\\"CUBESETCOUNT\\\",\\n    \\\"CUBEVALUE\\\",\\n    \\\"CUMIPMT\\\",\\n    \\\"CUMPRINC\\\",\\n    \\\"DATE\\\",\\n    \\\"DATEDIF\\\",\\n    \\\"DATEVALUE\\\",\\n    \\\"DAVERAGE\\\",\\n    \\\"DAY\\\",\\n    \\\"DAYS\\\",\\n    \\\"DAYS360\\\",\\n    \\\"DB\\\",\\n    \\\"DBCS\\\",\\n    \\\"DCOUNT\\\",\\n    \\\"DCOUNTA\\\",\\n    \\\"DDB\\\",\\n    \\\"DEC2BIN\\\",\\n    \\\"DEC2HEX\\\",\\n    \\\"DEC2OCT\\\",\\n    \\\"DECIMAL\\\",\\n    \\\"DEGREES\\\",\\n    \\\"DELTA\\\",\\n    \\\"DEVSQ\\\",\\n    \\\"DGET\\\",\\n    \\\"DISC\\\",\\n    \\\"DMAX\\\",\\n    \\\"DMIN\\\",\\n    \\\"DOLLAR\\\",\\n    \\\"DOLLARDE\\\",\\n    \\\"DOLLARFR\\\",\\n    \\\"DPRODUCT\\\",\\n    \\\"DSTDEV\\\",\\n    \\\"DSTDEVP\\\",\\n    \\\"DSUM\\\",\\n    \\\"DURATION\\\",\\n    \\\"DVAR\\\",\\n    \\\"DVARP\\\",\\n    \\\"EDATE\\\",\\n    \\\"EFFECT\\\",\\n    \\\"ENCODEURL\\\",\\n    \\\"EOMONTH\\\",\\n    \\\"ERF\\\",\\n    \\\"ERF.PRECISE\\\",\\n    \\\"ERFC\\\",\\n    \\\"ERFC.PRECISE\\\",\\n    \\\"ERROR.TYPE\\\",\\n    \\\"EUROCONVERT\\\",\\n    \\\"EVEN\\\",\\n    \\\"EXACT\\\",\\n    \\\"EXP\\\",\\n    \\\"EXPON.DIST\\\",\\n    \\\"EXPONDIST\\\",\\n    \\\"FACT\\\",\\n    \\\"FACTDOUBLE\\\",\\n    \\\"FALSE|0\\\",\\n    \\\"F.DIST\\\",\\n    \\\"FDIST\\\",\\n    \\\"F.DIST.RT\\\",\\n    \\\"FILTERXML\\\",\\n    \\\"FIND\\\",\\n    \\\"FINDB\\\",\\n    \\\"F.INV\\\",\\n    \\\"F.INV.RT\\\",\\n    \\\"FINV\\\",\\n    \\\"FISHER\\\",\\n    \\\"FISHERINV\\\",\\n    \\\"FIXED\\\",\\n    \\\"FLOOR\\\",\\n    \\\"FLOOR.MATH\\\",\\n    \\\"FLOOR.PRECISE\\\",\\n    \\\"FORECAST\\\",\\n    \\\"FORECAST.ETS\\\",\\n    \\\"FORECAST.ETS.CONFINT\\\",\\n    \\\"FORECAST.ETS.SEASONALITY\\\",\\n    \\\"FORECAST.ETS.STAT\\\",\\n    \\\"FORECAST.LINEAR\\\",\\n    \\\"FORMULATEXT\\\",\\n    \\\"FREQUENCY\\\",\\n    \\\"F.TEST\\\",\\n    \\\"FTEST\\\",\\n    \\\"FV\\\",\\n    \\\"FVSCHEDULE\\\",\\n    \\\"GAMMA\\\",\\n    \\\"GAMMA.DIST\\\",\\n    \\\"GAMMADIST\\\",\\n    \\\"GAMMA.INV\\\",\\n    \\\"GAMMAINV\\\",\\n    \\\"GAMMALN\\\",\\n    \\\"GAMMALN.PRECISE\\\",\\n    \\\"GAUSS\\\",\\n    \\\"GCD\\\",\\n    \\\"GEOMEAN\\\",\\n    \\\"GESTEP\\\",\\n    \\\"GETPIVOTDATA\\\",\\n    \\\"GROWTH\\\",\\n    \\\"HARMEAN\\\",\\n    \\\"HEX2BIN\\\",\\n    \\\"HEX2DEC\\\",\\n    \\\"HEX2OCT\\\",\\n    \\\"HLOOKUP\\\",\\n    \\\"HOUR\\\",\\n    \\\"HYPERLINK\\\",\\n    \\\"HYPGEOM.DIST\\\",\\n    \\\"HYPGEOMDIST\\\",\\n    \\\"IF\\\",\\n    \\\"IFERROR\\\",\\n    \\\"IFNA\\\",\\n    \\\"IFS\\\",\\n    \\\"IMABS\\\",\\n    \\\"IMAGINARY\\\",\\n    \\\"IMARGUMENT\\\",\\n    \\\"IMCONJUGATE\\\",\\n    \\\"IMCOS\\\",\\n    \\\"IMCOSH\\\",\\n    \\\"IMCOT\\\",\\n    \\\"IMCSC\\\",\\n    \\\"IMCSCH\\\",\\n    \\\"IMDIV\\\",\\n    \\\"IMEXP\\\",\\n    \\\"IMLN\\\",\\n    \\\"IMLOG10\\\",\\n    \\\"IMLOG2\\\",\\n    \\\"IMPOWER\\\",\\n    \\\"IMPRODUCT\\\",\\n    \\\"IMREAL\\\",\\n    \\\"IMSEC\\\",\\n    \\\"IMSECH\\\",\\n    \\\"IMSIN\\\",\\n    \\\"IMSINH\\\",\\n    \\\"IMSQRT\\\",\\n    \\\"IMSUB\\\",\\n    \\\"IMSUM\\\",\\n    \\\"IMTAN\\\",\\n    \\\"INDEX\\\",\\n    \\\"INDIRECT\\\",\\n    \\\"INFO\\\",\\n    \\\"INT\\\",\\n    \\\"INTERCEPT\\\",\\n    \\\"INTRATE\\\",\\n    \\\"IPMT\\\",\\n    \\\"IRR\\\",\\n    \\\"ISBLANK\\\",\\n    \\\"ISERR\\\",\\n    \\\"ISERROR\\\",\\n    \\\"ISEVEN\\\",\\n    \\\"ISFORMULA\\\",\\n    \\\"ISLOGICAL\\\",\\n    \\\"ISNA\\\",\\n    \\\"ISNONTEXT\\\",\\n    \\\"ISNUMBER\\\",\\n    \\\"ISODD\\\",\\n    \\\"ISREF\\\",\\n    \\\"ISTEXT\\\",\\n    \\\"ISO.CEILING\\\",\\n    \\\"ISOWEEKNUM\\\",\\n    \\\"ISPMT\\\",\\n    \\\"JIS\\\",\\n    \\\"KURT\\\",\\n    \\\"LARGE\\\",\\n    \\\"LCM\\\",\\n    \\\"LEFT\\\",\\n    \\\"LEFTB\\\",\\n    \\\"LEN\\\",\\n    \\\"LENB\\\",\\n    \\\"LINEST\\\",\\n    \\\"LN\\\",\\n    \\\"LOG\\\",\\n    \\\"LOG10\\\",\\n    \\\"LOGEST\\\",\\n    \\\"LOGINV\\\",\\n    \\\"LOGNORM.DIST\\\",\\n    \\\"LOGNORMDIST\\\",\\n    \\\"LOGNORM.INV\\\",\\n    \\\"LOOKUP\\\",\\n    \\\"LOWER\\\",\\n    \\\"MATCH\\\",\\n    \\\"MAX\\\",\\n    \\\"MAXA\\\",\\n    \\\"MAXIFS\\\",\\n    \\\"MDETERM\\\",\\n    \\\"MDURATION\\\",\\n    \\\"MEDIAN\\\",\\n    \\\"MID\\\",\\n    \\\"MIDBs\\\",\\n    \\\"MIN\\\",\\n    \\\"MINIFS\\\",\\n    \\\"MINA\\\",\\n    \\\"MINUTE\\\",\\n    \\\"MINVERSE\\\",\\n    \\\"MIRR\\\",\\n    \\\"MMULT\\\",\\n    \\\"MOD\\\",\\n    \\\"MODE\\\",\\n    \\\"MODE.MULT\\\",\\n    \\\"MODE.SNGL\\\",\\n    \\\"MONTH\\\",\\n    \\\"MROUND\\\",\\n    \\\"MULTINOMIAL\\\",\\n    \\\"MUNIT\\\",\\n    \\\"N\\\",\\n    \\\"NA\\\",\\n    \\\"NEGBINOM.DIST\\\",\\n    \\\"NEGBINOMDIST\\\",\\n    \\\"NETWORKDAYS\\\",\\n    \\\"NETWORKDAYS.INTL\\\",\\n    \\\"NOMINAL\\\",\\n    \\\"NORM.DIST\\\",\\n    \\\"NORMDIST\\\",\\n    \\\"NORMINV\\\",\\n    \\\"NORM.INV\\\",\\n    \\\"NORM.S.DIST\\\",\\n    \\\"NORMSDIST\\\",\\n    \\\"NORM.S.INV\\\",\\n    \\\"NORMSINV\\\",\\n    \\\"NOT\\\",\\n    \\\"NOW\\\",\\n    \\\"NPER\\\",\\n    \\\"NPV\\\",\\n    \\\"NUMBERVALUE\\\",\\n    \\\"OCT2BIN\\\",\\n    \\\"OCT2DEC\\\",\\n    \\\"OCT2HEX\\\",\\n    \\\"ODD\\\",\\n    \\\"ODDFPRICE\\\",\\n    \\\"ODDFYIELD\\\",\\n    \\\"ODDLPRICE\\\",\\n    \\\"ODDLYIELD\\\",\\n    \\\"OFFSET\\\",\\n    \\\"OR\\\",\\n    \\\"PDURATION\\\",\\n    \\\"PEARSON\\\",\\n    \\\"PERCENTILE.EXC\\\",\\n    \\\"PERCENTILE.INC\\\",\\n    \\\"PERCENTILE\\\",\\n    \\\"PERCENTRANK.EXC\\\",\\n    \\\"PERCENTRANK.INC\\\",\\n    \\\"PERCENTRANK\\\",\\n    \\\"PERMUT\\\",\\n    \\\"PERMUTATIONA\\\",\\n    \\\"PHI\\\",\\n    \\\"PHONETIC\\\",\\n    \\\"PI\\\",\\n    \\\"PMT\\\",\\n    \\\"POISSON.DIST\\\",\\n    \\\"POISSON\\\",\\n    \\\"POWER\\\",\\n    \\\"PPMT\\\",\\n    \\\"PRICE\\\",\\n    \\\"PRICEDISC\\\",\\n    \\\"PRICEMAT\\\",\\n    \\\"PROB\\\",\\n    \\\"PRODUCT\\\",\\n    \\\"PROPER\\\",\\n    \\\"PV\\\",\\n    \\\"QUARTILE\\\",\\n    \\\"QUARTILE.EXC\\\",\\n    \\\"QUARTILE.INC\\\",\\n    \\\"QUOTIENT\\\",\\n    \\\"RADIANS\\\",\\n    \\\"RAND\\\",\\n    \\\"RANDBETWEEN\\\",\\n    \\\"RANK.AVG\\\",\\n    \\\"RANK.EQ\\\",\\n    \\\"RANK\\\",\\n    \\\"RATE\\\",\\n    \\\"RECEIVED\\\",\\n    \\\"REGISTER.ID\\\",\\n    \\\"REPLACE\\\",\\n    \\\"REPLACEB\\\",\\n    \\\"REPT\\\",\\n    \\\"RIGHT\\\",\\n    \\\"RIGHTB\\\",\\n    \\\"ROMAN\\\",\\n    \\\"ROUND\\\",\\n    \\\"ROUNDDOWN\\\",\\n    \\\"ROUNDUP\\\",\\n    \\\"ROW\\\",\\n    \\\"ROWS\\\",\\n    \\\"RRI\\\",\\n    \\\"RSQ\\\",\\n    \\\"RTD\\\",\\n    \\\"SEARCH\\\",\\n    \\\"SEARCHB\\\",\\n    \\\"SEC\\\",\\n    \\\"SECH\\\",\\n    \\\"SECOND\\\",\\n    \\\"SERIESSUM\\\",\\n    \\\"SHEET\\\",\\n    \\\"SHEETS\\\",\\n    \\\"SIGN\\\",\\n    \\\"SIN\\\",\\n    \\\"SINH\\\",\\n    \\\"SKEW\\\",\\n    \\\"SKEW.P\\\",\\n    \\\"SLN\\\",\\n    \\\"SLOPE\\\",\\n    \\\"SMALL\\\",\\n    \\\"SQL.REQUEST\\\",\\n    \\\"SQRT\\\",\\n    \\\"SQRTPI\\\",\\n    \\\"STANDARDIZE\\\",\\n    \\\"STDEV\\\",\\n    \\\"STDEV.P\\\",\\n    \\\"STDEV.S\\\",\\n    \\\"STDEVA\\\",\\n    \\\"STDEVP\\\",\\n    \\\"STDEVPA\\\",\\n    \\\"STEYX\\\",\\n    \\\"SUBSTITUTE\\\",\\n    \\\"SUBTOTAL\\\",\\n    \\\"SUM\\\",\\n    \\\"SUMIF\\\",\\n    \\\"SUMIFS\\\",\\n    \\\"SUMPRODUCT\\\",\\n    \\\"SUMSQ\\\",\\n    \\\"SUMX2MY2\\\",\\n    \\\"SUMX2PY2\\\",\\n    \\\"SUMXMY2\\\",\\n    \\\"SWITCH\\\",\\n    \\\"SYD\\\",\\n    \\\"T\\\",\\n    \\\"TAN\\\",\\n    \\\"TANH\\\",\\n    \\\"TBILLEQ\\\",\\n    \\\"TBILLPRICE\\\",\\n    \\\"TBILLYIELD\\\",\\n    \\\"T.DIST\\\",\\n    \\\"T.DIST.2T\\\",\\n    \\\"T.DIST.RT\\\",\\n    \\\"TDIST\\\",\\n    \\\"TEXT\\\",\\n    \\\"TEXTJOIN\\\",\\n    \\\"TIME\\\",\\n    \\\"TIMEVALUE\\\",\\n    \\\"T.INV\\\",\\n    \\\"T.INV.2T\\\",\\n    \\\"TINV\\\",\\n    \\\"TODAY\\\",\\n    \\\"TRANSPOSE\\\",\\n    \\\"TREND\\\",\\n    \\\"TRIM\\\",\\n    \\\"TRIMMEAN\\\",\\n    \\\"TRUE|0\\\",\\n    \\\"TRUNC\\\",\\n    \\\"T.TEST\\\",\\n    \\\"TTEST\\\",\\n    \\\"TYPE\\\",\\n    \\\"UNICHAR\\\",\\n    \\\"UNICODE\\\",\\n    \\\"UPPER\\\",\\n    \\\"VALUE\\\",\\n    \\\"VAR\\\",\\n    \\\"VAR.P\\\",\\n    \\\"VAR.S\\\",\\n    \\\"VARA\\\",\\n    \\\"VARP\\\",\\n    \\\"VARPA\\\",\\n    \\\"VDB\\\",\\n    \\\"VLOOKUP\\\",\\n    \\\"WEBSERVICE\\\",\\n    \\\"WEEKDAY\\\",\\n    \\\"WEEKNUM\\\",\\n    \\\"WEIBULL\\\",\\n    \\\"WEIBULL.DIST\\\",\\n    \\\"WORKDAY\\\",\\n    \\\"WORKDAY.INTL\\\",\\n    \\\"XIRR\\\",\\n    \\\"XNPV\\\",\\n    \\\"XOR\\\",\\n    \\\"YEAR\\\",\\n    \\\"YEARFRAC\\\",\\n    \\\"YIELD\\\",\\n    \\\"YIELDDISC\\\",\\n    \\\"YIELDMAT\\\",\\n    \\\"Z.TEST\\\",\\n    \\\"ZTEST\\\"\\n  ];\\n  return {\\n    name: 'Excel formulae',\\n    aliases: [\\n      'xlsx',\\n      'xls'\\n    ],\\n    case_insensitive: true,\\n    keywords: {\\n      $pattern: /[a-zA-Z][\\\\w\\\\.]*/,\\n      built_in: BUILT_INS\\n    },\\n    contains: [\\n      {\\n        /* matches a beginning equal sign found in Excel formula examples */\\n        begin: /^=/,\\n        end: /[^=]/,\\n        returnEnd: true,\\n        illegal: /=/, /* only allow single equal sign at front of line */\\n        relevance: 10\\n      },\\n      /* technically, there can be more than 2 letters in column names, but this prevents conflict with some keywords */\\n      {\\n        /* matches a reference to a single cell */\\n        className: 'symbol',\\n        begin: /\\\\b[A-Z]{1,2}\\\\d+\\\\b/,\\n        end: /[^\\\\d]/,\\n        excludeEnd: true,\\n        relevance: 0\\n      },\\n      {\\n        /* matches a reference to a range of cells */\\n        className: 'symbol',\\n        begin: /[A-Z]{0,2}\\\\d*:[A-Z]{0,2}\\\\d*/,\\n        relevance: 0\\n      },\\n      hljs.BACKSLASH_ESCAPE,\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'number',\\n        begin: hljs.NUMBER_RE + '(%)?',\\n        relevance: 0\\n      },\\n      /* Excel formula comments are done by putting the comment in a function call to N() */\\n      hljs.COMMENT(/\\\\bN\\\\(/, /\\\\)/,\\n        {\\n          excludeBegin: true,\\n          excludeEnd: true,\\n          illegal: /\\\\n/\\n        })\\n    ]\\n  };\\n}\\n\\nmodule.exports = excel;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/excel.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/fix.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/fix.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: FIX\\nAuthor: Brent Bradbury <brent@brentium.com>\\n*/\\n\\n/** @type LanguageFn */\\nfunction fix(hljs) {\\n  return {\\n    name: 'FIX',\\n    contains: [\\n      {\\n        begin: /[^\\\\u2401\\\\u0001]+/,\\n        end: /[\\\\u2401\\\\u0001]/,\\n        excludeEnd: true,\\n        returnBegin: true,\\n        returnEnd: false,\\n        contains: [\\n          {\\n            begin: /([^\\\\u2401\\\\u0001=]+)/,\\n            end: /=([^\\\\u2401\\\\u0001=]+)/,\\n            returnEnd: true,\\n            returnBegin: false,\\n            className: 'attr'\\n          },\\n          {\\n            begin: /=/,\\n            end: /([\\\\u2401\\\\u0001])/,\\n            excludeEnd: true,\\n            excludeBegin: true,\\n            className: 'string'\\n          }\\n        ]\\n      }\\n    ],\\n    case_insensitive: true\\n  };\\n}\\n\\nmodule.exports = fix;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/fix.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/flix.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/flix.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\n Language: Flix\\n Category: functional\\n Author: Magnus Madsen <mmadsen@uwaterloo.ca>\\n Website: https://flix.dev/\\n */\\n\\n/** @type LanguageFn */\\nfunction flix(hljs) {\\n  const CHAR = {\\n    className: 'string',\\n    begin: /'(.|\\\\\\\\[xXuU][a-zA-Z0-9]+)'/\\n  };\\n\\n  const STRING = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: '\\\"',\\n        end: '\\\"'\\n      }\\n    ]\\n  };\\n\\n  const NAME = {\\n    className: 'title',\\n    relevance: 0,\\n    begin: /[^0-9\\\\n\\\\t \\\"'(),.`{}\\\\[\\\\]:;][^\\\\n\\\\t \\\"'(),.`{}\\\\[\\\\]:;]+|[^0-9\\\\n\\\\t \\\"'(),.`{}\\\\[\\\\]:;=]/\\n  };\\n\\n  const METHOD = {\\n    className: 'function',\\n    beginKeywords: 'def',\\n    end: /[:={\\\\[(\\\\n;]/,\\n    excludeEnd: true,\\n    contains: [ NAME ]\\n  };\\n\\n  return {\\n    name: 'Flix',\\n    keywords: {\\n      keyword: [\\n        \\\"case\\\",\\n        \\\"class\\\",\\n        \\\"def\\\",\\n        \\\"else\\\",\\n        \\\"enum\\\",\\n        \\\"if\\\",\\n        \\\"impl\\\",\\n        \\\"import\\\",\\n        \\\"in\\\",\\n        \\\"lat\\\",\\n        \\\"rel\\\",\\n        \\\"index\\\",\\n        \\\"let\\\",\\n        \\\"match\\\",\\n        \\\"namespace\\\",\\n        \\\"switch\\\",\\n        \\\"type\\\",\\n        \\\"yield\\\",\\n        \\\"with\\\"\\n      ],\\n      literal: [\\n        \\\"true\\\",\\n        \\\"false\\\"\\n      ]\\n    },\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      CHAR,\\n      STRING,\\n      METHOD,\\n      hljs.C_NUMBER_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = flix;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/flix.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/fortran.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/fortran.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Fortran\\nAuthor: Anthony Scemama <scemama@irsamc.ups-tlse.fr>\\nWebsite: https://en.wikipedia.org/wiki/Fortran\\nCategory: scientific\\n*/\\n\\n/** @type LanguageFn */\\nfunction fortran(hljs) {\\n  const regex = hljs.regex;\\n  const PARAMS = {\\n    className: 'params',\\n    begin: '\\\\\\\\(',\\n    end: '\\\\\\\\)'\\n  };\\n\\n  const COMMENT = { variants: [\\n    hljs.COMMENT('!', '$', { relevance: 0 }),\\n    // allow FORTRAN 77 style comments\\n    hljs.COMMENT('^C[ ]', '$', { relevance: 0 }),\\n    hljs.COMMENT('^C$', '$', { relevance: 0 })\\n  ] };\\n\\n  // regex in both fortran and irpf90 should match\\n  const OPTIONAL_NUMBER_SUFFIX = /(_[a-z_\\\\d]+)?/;\\n  const OPTIONAL_NUMBER_EXP = /([de][+-]?\\\\d+)?/;\\n  const NUMBER = {\\n    className: 'number',\\n    variants: [\\n      { begin: regex.concat(/\\\\b\\\\d+/, /\\\\.(\\\\d*)/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },\\n      { begin: regex.concat(/\\\\b\\\\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },\\n      { begin: regex.concat(/\\\\.\\\\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) }\\n    ],\\n    relevance: 0\\n  };\\n\\n  const FUNCTION_DEF = {\\n    className: 'function',\\n    beginKeywords: 'subroutine function program',\\n    illegal: '[${=\\\\\\\\n]',\\n    contains: [\\n      hljs.UNDERSCORE_TITLE_MODE,\\n      PARAMS\\n    ]\\n  };\\n\\n  const STRING = {\\n    className: 'string',\\n    relevance: 0,\\n    variants: [\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE\\n    ]\\n  };\\n\\n  const KEYWORDS = [\\n    \\\"kind\\\",\\n    \\\"do\\\",\\n    \\\"concurrent\\\",\\n    \\\"local\\\",\\n    \\\"shared\\\",\\n    \\\"while\\\",\\n    \\\"private\\\",\\n    \\\"call\\\",\\n    \\\"intrinsic\\\",\\n    \\\"where\\\",\\n    \\\"elsewhere\\\",\\n    \\\"type\\\",\\n    \\\"endtype\\\",\\n    \\\"endmodule\\\",\\n    \\\"endselect\\\",\\n    \\\"endinterface\\\",\\n    \\\"end\\\",\\n    \\\"enddo\\\",\\n    \\\"endif\\\",\\n    \\\"if\\\",\\n    \\\"forall\\\",\\n    \\\"endforall\\\",\\n    \\\"only\\\",\\n    \\\"contains\\\",\\n    \\\"default\\\",\\n    \\\"return\\\",\\n    \\\"stop\\\",\\n    \\\"then\\\",\\n    \\\"block\\\",\\n    \\\"endblock\\\",\\n    \\\"endassociate\\\",\\n    \\\"public\\\",\\n    \\\"subroutine|10\\\",\\n    \\\"function\\\",\\n    \\\"program\\\",\\n    \\\".and.\\\",\\n    \\\".or.\\\",\\n    \\\".not.\\\",\\n    \\\".le.\\\",\\n    \\\".eq.\\\",\\n    \\\".ge.\\\",\\n    \\\".gt.\\\",\\n    \\\".lt.\\\",\\n    \\\"goto\\\",\\n    \\\"save\\\",\\n    \\\"else\\\",\\n    \\\"use\\\",\\n    \\\"module\\\",\\n    \\\"select\\\",\\n    \\\"case\\\",\\n    \\\"access\\\",\\n    \\\"blank\\\",\\n    \\\"direct\\\",\\n    \\\"exist\\\",\\n    \\\"file\\\",\\n    \\\"fmt\\\",\\n    \\\"form\\\",\\n    \\\"formatted\\\",\\n    \\\"iostat\\\",\\n    \\\"name\\\",\\n    \\\"named\\\",\\n    \\\"nextrec\\\",\\n    \\\"number\\\",\\n    \\\"opened\\\",\\n    \\\"rec\\\",\\n    \\\"recl\\\",\\n    \\\"sequential\\\",\\n    \\\"status\\\",\\n    \\\"unformatted\\\",\\n    \\\"unit\\\",\\n    \\\"continue\\\",\\n    \\\"format\\\",\\n    \\\"pause\\\",\\n    \\\"cycle\\\",\\n    \\\"exit\\\",\\n    \\\"c_null_char\\\",\\n    \\\"c_alert\\\",\\n    \\\"c_backspace\\\",\\n    \\\"c_form_feed\\\",\\n    \\\"flush\\\",\\n    \\\"wait\\\",\\n    \\\"decimal\\\",\\n    \\\"round\\\",\\n    \\\"iomsg\\\",\\n    \\\"synchronous\\\",\\n    \\\"nopass\\\",\\n    \\\"non_overridable\\\",\\n    \\\"pass\\\",\\n    \\\"protected\\\",\\n    \\\"volatile\\\",\\n    \\\"abstract\\\",\\n    \\\"extends\\\",\\n    \\\"import\\\",\\n    \\\"non_intrinsic\\\",\\n    \\\"value\\\",\\n    \\\"deferred\\\",\\n    \\\"generic\\\",\\n    \\\"final\\\",\\n    \\\"enumerator\\\",\\n    \\\"class\\\",\\n    \\\"associate\\\",\\n    \\\"bind\\\",\\n    \\\"enum\\\",\\n    \\\"c_int\\\",\\n    \\\"c_short\\\",\\n    \\\"c_long\\\",\\n    \\\"c_long_long\\\",\\n    \\\"c_signed_char\\\",\\n    \\\"c_size_t\\\",\\n    \\\"c_int8_t\\\",\\n    \\\"c_int16_t\\\",\\n    \\\"c_int32_t\\\",\\n    \\\"c_int64_t\\\",\\n    \\\"c_int_least8_t\\\",\\n    \\\"c_int_least16_t\\\",\\n    \\\"c_int_least32_t\\\",\\n    \\\"c_int_least64_t\\\",\\n    \\\"c_int_fast8_t\\\",\\n    \\\"c_int_fast16_t\\\",\\n    \\\"c_int_fast32_t\\\",\\n    \\\"c_int_fast64_t\\\",\\n    \\\"c_intmax_t\\\",\\n    \\\"C_intptr_t\\\",\\n    \\\"c_float\\\",\\n    \\\"c_double\\\",\\n    \\\"c_long_double\\\",\\n    \\\"c_float_complex\\\",\\n    \\\"c_double_complex\\\",\\n    \\\"c_long_double_complex\\\",\\n    \\\"c_bool\\\",\\n    \\\"c_char\\\",\\n    \\\"c_null_ptr\\\",\\n    \\\"c_null_funptr\\\",\\n    \\\"c_new_line\\\",\\n    \\\"c_carriage_return\\\",\\n    \\\"c_horizontal_tab\\\",\\n    \\\"c_vertical_tab\\\",\\n    \\\"iso_c_binding\\\",\\n    \\\"c_loc\\\",\\n    \\\"c_funloc\\\",\\n    \\\"c_associated\\\",\\n    \\\"c_f_pointer\\\",\\n    \\\"c_ptr\\\",\\n    \\\"c_funptr\\\",\\n    \\\"iso_fortran_env\\\",\\n    \\\"character_storage_size\\\",\\n    \\\"error_unit\\\",\\n    \\\"file_storage_size\\\",\\n    \\\"input_unit\\\",\\n    \\\"iostat_end\\\",\\n    \\\"iostat_eor\\\",\\n    \\\"numeric_storage_size\\\",\\n    \\\"output_unit\\\",\\n    \\\"c_f_procpointer\\\",\\n    \\\"ieee_arithmetic\\\",\\n    \\\"ieee_support_underflow_control\\\",\\n    \\\"ieee_get_underflow_mode\\\",\\n    \\\"ieee_set_underflow_mode\\\",\\n    \\\"newunit\\\",\\n    \\\"contiguous\\\",\\n    \\\"recursive\\\",\\n    \\\"pad\\\",\\n    \\\"position\\\",\\n    \\\"action\\\",\\n    \\\"delim\\\",\\n    \\\"readwrite\\\",\\n    \\\"eor\\\",\\n    \\\"advance\\\",\\n    \\\"nml\\\",\\n    \\\"interface\\\",\\n    \\\"procedure\\\",\\n    \\\"namelist\\\",\\n    \\\"include\\\",\\n    \\\"sequence\\\",\\n    \\\"elemental\\\",\\n    \\\"pure\\\",\\n    \\\"impure\\\",\\n    \\\"integer\\\",\\n    \\\"real\\\",\\n    \\\"character\\\",\\n    \\\"complex\\\",\\n    \\\"logical\\\",\\n    \\\"codimension\\\",\\n    \\\"dimension\\\",\\n    \\\"allocatable|10\\\",\\n    \\\"parameter\\\",\\n    \\\"external\\\",\\n    \\\"implicit|10\\\",\\n    \\\"none\\\",\\n    \\\"double\\\",\\n    \\\"precision\\\",\\n    \\\"assign\\\",\\n    \\\"intent\\\",\\n    \\\"optional\\\",\\n    \\\"pointer\\\",\\n    \\\"target\\\",\\n    \\\"in\\\",\\n    \\\"out\\\",\\n    \\\"common\\\",\\n    \\\"equivalence\\\",\\n    \\\"data\\\"\\n  ];\\n  const LITERALS = [\\n    \\\".False.\\\",\\n    \\\".True.\\\"\\n  ];\\n  const BUILT_INS = [\\n    \\\"alog\\\",\\n    \\\"alog10\\\",\\n    \\\"amax0\\\",\\n    \\\"amax1\\\",\\n    \\\"amin0\\\",\\n    \\\"amin1\\\",\\n    \\\"amod\\\",\\n    \\\"cabs\\\",\\n    \\\"ccos\\\",\\n    \\\"cexp\\\",\\n    \\\"clog\\\",\\n    \\\"csin\\\",\\n    \\\"csqrt\\\",\\n    \\\"dabs\\\",\\n    \\\"dacos\\\",\\n    \\\"dasin\\\",\\n    \\\"datan\\\",\\n    \\\"datan2\\\",\\n    \\\"dcos\\\",\\n    \\\"dcosh\\\",\\n    \\\"ddim\\\",\\n    \\\"dexp\\\",\\n    \\\"dint\\\",\\n    \\\"dlog\\\",\\n    \\\"dlog10\\\",\\n    \\\"dmax1\\\",\\n    \\\"dmin1\\\",\\n    \\\"dmod\\\",\\n    \\\"dnint\\\",\\n    \\\"dsign\\\",\\n    \\\"dsin\\\",\\n    \\\"dsinh\\\",\\n    \\\"dsqrt\\\",\\n    \\\"dtan\\\",\\n    \\\"dtanh\\\",\\n    \\\"float\\\",\\n    \\\"iabs\\\",\\n    \\\"idim\\\",\\n    \\\"idint\\\",\\n    \\\"idnint\\\",\\n    \\\"ifix\\\",\\n    \\\"isign\\\",\\n    \\\"max0\\\",\\n    \\\"max1\\\",\\n    \\\"min0\\\",\\n    \\\"min1\\\",\\n    \\\"sngl\\\",\\n    \\\"algama\\\",\\n    \\\"cdabs\\\",\\n    \\\"cdcos\\\",\\n    \\\"cdexp\\\",\\n    \\\"cdlog\\\",\\n    \\\"cdsin\\\",\\n    \\\"cdsqrt\\\",\\n    \\\"cqabs\\\",\\n    \\\"cqcos\\\",\\n    \\\"cqexp\\\",\\n    \\\"cqlog\\\",\\n    \\\"cqsin\\\",\\n    \\\"cqsqrt\\\",\\n    \\\"dcmplx\\\",\\n    \\\"dconjg\\\",\\n    \\\"derf\\\",\\n    \\\"derfc\\\",\\n    \\\"dfloat\\\",\\n    \\\"dgamma\\\",\\n    \\\"dimag\\\",\\n    \\\"dlgama\\\",\\n    \\\"iqint\\\",\\n    \\\"qabs\\\",\\n    \\\"qacos\\\",\\n    \\\"qasin\\\",\\n    \\\"qatan\\\",\\n    \\\"qatan2\\\",\\n    \\\"qcmplx\\\",\\n    \\\"qconjg\\\",\\n    \\\"qcos\\\",\\n    \\\"qcosh\\\",\\n    \\\"qdim\\\",\\n    \\\"qerf\\\",\\n    \\\"qerfc\\\",\\n    \\\"qexp\\\",\\n    \\\"qgamma\\\",\\n    \\\"qimag\\\",\\n    \\\"qlgama\\\",\\n    \\\"qlog\\\",\\n    \\\"qlog10\\\",\\n    \\\"qmax1\\\",\\n    \\\"qmin1\\\",\\n    \\\"qmod\\\",\\n    \\\"qnint\\\",\\n    \\\"qsign\\\",\\n    \\\"qsin\\\",\\n    \\\"qsinh\\\",\\n    \\\"qsqrt\\\",\\n    \\\"qtan\\\",\\n    \\\"qtanh\\\",\\n    \\\"abs\\\",\\n    \\\"acos\\\",\\n    \\\"aimag\\\",\\n    \\\"aint\\\",\\n    \\\"anint\\\",\\n    \\\"asin\\\",\\n    \\\"atan\\\",\\n    \\\"atan2\\\",\\n    \\\"char\\\",\\n    \\\"cmplx\\\",\\n    \\\"conjg\\\",\\n    \\\"cos\\\",\\n    \\\"cosh\\\",\\n    \\\"exp\\\",\\n    \\\"ichar\\\",\\n    \\\"index\\\",\\n    \\\"int\\\",\\n    \\\"log\\\",\\n    \\\"log10\\\",\\n    \\\"max\\\",\\n    \\\"min\\\",\\n    \\\"nint\\\",\\n    \\\"sign\\\",\\n    \\\"sin\\\",\\n    \\\"sinh\\\",\\n    \\\"sqrt\\\",\\n    \\\"tan\\\",\\n    \\\"tanh\\\",\\n    \\\"print\\\",\\n    \\\"write\\\",\\n    \\\"dim\\\",\\n    \\\"lge\\\",\\n    \\\"lgt\\\",\\n    \\\"lle\\\",\\n    \\\"llt\\\",\\n    \\\"mod\\\",\\n    \\\"nullify\\\",\\n    \\\"allocate\\\",\\n    \\\"deallocate\\\",\\n    \\\"adjustl\\\",\\n    \\\"adjustr\\\",\\n    \\\"all\\\",\\n    \\\"allocated\\\",\\n    \\\"any\\\",\\n    \\\"associated\\\",\\n    \\\"bit_size\\\",\\n    \\\"btest\\\",\\n    \\\"ceiling\\\",\\n    \\\"count\\\",\\n    \\\"cshift\\\",\\n    \\\"date_and_time\\\",\\n    \\\"digits\\\",\\n    \\\"dot_product\\\",\\n    \\\"eoshift\\\",\\n    \\\"epsilon\\\",\\n    \\\"exponent\\\",\\n    \\\"floor\\\",\\n    \\\"fraction\\\",\\n    \\\"huge\\\",\\n    \\\"iand\\\",\\n    \\\"ibclr\\\",\\n    \\\"ibits\\\",\\n    \\\"ibset\\\",\\n    \\\"ieor\\\",\\n    \\\"ior\\\",\\n    \\\"ishft\\\",\\n    \\\"ishftc\\\",\\n    \\\"lbound\\\",\\n    \\\"len_trim\\\",\\n    \\\"matmul\\\",\\n    \\\"maxexponent\\\",\\n    \\\"maxloc\\\",\\n    \\\"maxval\\\",\\n    \\\"merge\\\",\\n    \\\"minexponent\\\",\\n    \\\"minloc\\\",\\n    \\\"minval\\\",\\n    \\\"modulo\\\",\\n    \\\"mvbits\\\",\\n    \\\"nearest\\\",\\n    \\\"pack\\\",\\n    \\\"present\\\",\\n    \\\"product\\\",\\n    \\\"radix\\\",\\n    \\\"random_number\\\",\\n    \\\"random_seed\\\",\\n    \\\"range\\\",\\n    \\\"repeat\\\",\\n    \\\"reshape\\\",\\n    \\\"rrspacing\\\",\\n    \\\"scale\\\",\\n    \\\"scan\\\",\\n    \\\"selected_int_kind\\\",\\n    \\\"selected_real_kind\\\",\\n    \\\"set_exponent\\\",\\n    \\\"shape\\\",\\n    \\\"size\\\",\\n    \\\"spacing\\\",\\n    \\\"spread\\\",\\n    \\\"sum\\\",\\n    \\\"system_clock\\\",\\n    \\\"tiny\\\",\\n    \\\"transpose\\\",\\n    \\\"trim\\\",\\n    \\\"ubound\\\",\\n    \\\"unpack\\\",\\n    \\\"verify\\\",\\n    \\\"achar\\\",\\n    \\\"iachar\\\",\\n    \\\"transfer\\\",\\n    \\\"dble\\\",\\n    \\\"entry\\\",\\n    \\\"dprod\\\",\\n    \\\"cpu_time\\\",\\n    \\\"command_argument_count\\\",\\n    \\\"get_command\\\",\\n    \\\"get_command_argument\\\",\\n    \\\"get_environment_variable\\\",\\n    \\\"is_iostat_end\\\",\\n    \\\"ieee_arithmetic\\\",\\n    \\\"ieee_support_underflow_control\\\",\\n    \\\"ieee_get_underflow_mode\\\",\\n    \\\"ieee_set_underflow_mode\\\",\\n    \\\"is_iostat_eor\\\",\\n    \\\"move_alloc\\\",\\n    \\\"new_line\\\",\\n    \\\"selected_char_kind\\\",\\n    \\\"same_type_as\\\",\\n    \\\"extends_type_of\\\",\\n    \\\"acosh\\\",\\n    \\\"asinh\\\",\\n    \\\"atanh\\\",\\n    \\\"bessel_j0\\\",\\n    \\\"bessel_j1\\\",\\n    \\\"bessel_jn\\\",\\n    \\\"bessel_y0\\\",\\n    \\\"bessel_y1\\\",\\n    \\\"bessel_yn\\\",\\n    \\\"erf\\\",\\n    \\\"erfc\\\",\\n    \\\"erfc_scaled\\\",\\n    \\\"gamma\\\",\\n    \\\"log_gamma\\\",\\n    \\\"hypot\\\",\\n    \\\"norm2\\\",\\n    \\\"atomic_define\\\",\\n    \\\"atomic_ref\\\",\\n    \\\"execute_command_line\\\",\\n    \\\"leadz\\\",\\n    \\\"trailz\\\",\\n    \\\"storage_size\\\",\\n    \\\"merge_bits\\\",\\n    \\\"bge\\\",\\n    \\\"bgt\\\",\\n    \\\"ble\\\",\\n    \\\"blt\\\",\\n    \\\"dshiftl\\\",\\n    \\\"dshiftr\\\",\\n    \\\"findloc\\\",\\n    \\\"iall\\\",\\n    \\\"iany\\\",\\n    \\\"iparity\\\",\\n    \\\"image_index\\\",\\n    \\\"lcobound\\\",\\n    \\\"ucobound\\\",\\n    \\\"maskl\\\",\\n    \\\"maskr\\\",\\n    \\\"num_images\\\",\\n    \\\"parity\\\",\\n    \\\"popcnt\\\",\\n    \\\"poppar\\\",\\n    \\\"shifta\\\",\\n    \\\"shiftl\\\",\\n    \\\"shiftr\\\",\\n    \\\"this_image\\\",\\n    \\\"sync\\\",\\n    \\\"change\\\",\\n    \\\"team\\\",\\n    \\\"co_broadcast\\\",\\n    \\\"co_max\\\",\\n    \\\"co_min\\\",\\n    \\\"co_sum\\\",\\n    \\\"co_reduce\\\"\\n  ];\\n  return {\\n    name: 'Fortran',\\n    case_insensitive: true,\\n    aliases: [\\n      'f90',\\n      'f95'\\n    ],\\n    keywords: {\\n      keyword: KEYWORDS,\\n      literal: LITERALS,\\n      built_in: BUILT_INS\\n    },\\n    illegal: /\\\\/\\\\*/,\\n    contains: [\\n      STRING,\\n      FUNCTION_DEF,\\n      // allow `C = value` for assignments so they aren't misdetected\\n      // as Fortran 77 style comments\\n      {\\n        begin: /^C\\\\s*=(?!=)/,\\n        relevance: 0\\n      },\\n      COMMENT,\\n      NUMBER\\n    ]\\n  };\\n}\\n\\nmodule.exports = fortran;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/fortran.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/fsharp.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/fsharp.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/**\\n * @param {string} value\\n * @returns {RegExp}\\n * */\\nfunction escape(value) {\\n  return new RegExp(value.replace(/[-/\\\\\\\\^$*+?.()|[\\\\]{}]/g, '\\\\\\\\$&'), 'm');\\n}\\n\\n/**\\n * @param {RegExp | string } re\\n * @returns {string}\\n */\\nfunction source(re) {\\n  if (!re) return null;\\n  if (typeof re === \\\"string\\\") return re;\\n\\n  return re.source;\\n}\\n\\n/**\\n * @param {RegExp | string } re\\n * @returns {string}\\n */\\nfunction lookahead(re) {\\n  return concat('(?=', re, ')');\\n}\\n\\n/**\\n * @param {...(RegExp | string) } args\\n * @returns {string}\\n */\\nfunction concat(...args) {\\n  const joined = args.map((x) => source(x)).join(\\\"\\\");\\n  return joined;\\n}\\n\\n/**\\n * @param { Array<string | RegExp | Object> } args\\n * @returns {object}\\n */\\nfunction stripOptionsFromArgs(args) {\\n  const opts = args[args.length - 1];\\n\\n  if (typeof opts === 'object' && opts.constructor === Object) {\\n    args.splice(args.length - 1, 1);\\n    return opts;\\n  } else {\\n    return {};\\n  }\\n}\\n\\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\\n\\n/**\\n * Any of the passed expresssions may match\\n *\\n * Creates a huge this | this | that | that match\\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\\n * @returns {string}\\n */\\nfunction either(...args) {\\n  /** @type { object & {capture?: boolean} }  */\\n  const opts = stripOptionsFromArgs(args);\\n  const joined = '('\\n    + (opts.capture ? \\\"\\\" : \\\"?:\\\")\\n    + args.map((x) => source(x)).join(\\\"|\\\") + \\\")\\\";\\n  return joined;\\n}\\n\\n/*\\nLanguage: F#\\nAuthor: Jonas Follesø <jonas@follesoe.no>\\nContributors: Troy Kershaw <hello@troykershaw.com>, Henrik Feldt <henrik@haf.se>, Melvyn Laïly <melvyn.laily@gmail.com>\\nWebsite: https://docs.microsoft.com/en-us/dotnet/fsharp/\\nCategory: functional\\n*/\\n\\n/** @type LanguageFn */\\nfunction fsharp(hljs) {\\n  const KEYWORDS = [\\n    \\\"abstract\\\",\\n    \\\"and\\\",\\n    \\\"as\\\",\\n    \\\"assert\\\",\\n    \\\"base\\\",\\n    \\\"begin\\\",\\n    \\\"class\\\",\\n    \\\"default\\\",\\n    \\\"delegate\\\",\\n    \\\"do\\\",\\n    \\\"done\\\",\\n    \\\"downcast\\\",\\n    \\\"downto\\\",\\n    \\\"elif\\\",\\n    \\\"else\\\",\\n    \\\"end\\\",\\n    \\\"exception\\\",\\n    \\\"extern\\\",\\n    // \\\"false\\\", // literal\\n    \\\"finally\\\",\\n    \\\"fixed\\\",\\n    \\\"for\\\",\\n    \\\"fun\\\",\\n    \\\"function\\\",\\n    \\\"global\\\",\\n    \\\"if\\\",\\n    \\\"in\\\",\\n    \\\"inherit\\\",\\n    \\\"inline\\\",\\n    \\\"interface\\\",\\n    \\\"internal\\\",\\n    \\\"lazy\\\",\\n    \\\"let\\\",\\n    \\\"match\\\",\\n    \\\"member\\\",\\n    \\\"module\\\",\\n    \\\"mutable\\\",\\n    \\\"namespace\\\",\\n    \\\"new\\\",\\n    // \\\"not\\\", // built_in\\n    // \\\"null\\\", // literal\\n    \\\"of\\\",\\n    \\\"open\\\",\\n    \\\"or\\\",\\n    \\\"override\\\",\\n    \\\"private\\\",\\n    \\\"public\\\",\\n    \\\"rec\\\",\\n    \\\"return\\\",\\n    \\\"static\\\",\\n    \\\"struct\\\",\\n    \\\"then\\\",\\n    \\\"to\\\",\\n    // \\\"true\\\", // literal\\n    \\\"try\\\",\\n    \\\"type\\\",\\n    \\\"upcast\\\",\\n    \\\"use\\\",\\n    \\\"val\\\",\\n    \\\"void\\\",\\n    \\\"when\\\",\\n    \\\"while\\\",\\n    \\\"with\\\",\\n    \\\"yield\\\"\\n  ];\\n\\n  const BANG_KEYWORD_MODE = {\\n    // monad builder keywords (matches before non-bang keywords)\\n    scope: 'keyword',\\n    match: /\\\\b(yield|return|let|do|match|use)!/\\n  };\\n\\n  const PREPROCESSOR_KEYWORDS = [\\n    \\\"if\\\",\\n    \\\"else\\\",\\n    \\\"endif\\\",\\n    \\\"line\\\",\\n    \\\"nowarn\\\",\\n    \\\"light\\\",\\n    \\\"r\\\",\\n    \\\"i\\\",\\n    \\\"I\\\",\\n    \\\"load\\\",\\n    \\\"time\\\",\\n    \\\"help\\\",\\n    \\\"quit\\\"\\n  ];\\n\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    \\\"null\\\",\\n    \\\"Some\\\",\\n    \\\"None\\\",\\n    \\\"Ok\\\",\\n    \\\"Error\\\",\\n    \\\"infinity\\\",\\n    \\\"infinityf\\\",\\n    \\\"nan\\\",\\n    \\\"nanf\\\"\\n  ];\\n\\n  const SPECIAL_IDENTIFIERS = [\\n    \\\"__LINE__\\\",\\n    \\\"__SOURCE_DIRECTORY__\\\",\\n    \\\"__SOURCE_FILE__\\\"\\n  ];\\n\\n  // Since it's possible to re-bind/shadow names (e.g. let char = 'c'),\\n  // these builtin types should only be matched when a type name is expected.\\n  const KNOWN_TYPES = [\\n    // basic types\\n    \\\"bool\\\",\\n    \\\"byte\\\",\\n    \\\"sbyte\\\",\\n    \\\"int8\\\",\\n    \\\"int16\\\",\\n    \\\"int32\\\",\\n    \\\"uint8\\\",\\n    \\\"uint16\\\",\\n    \\\"uint32\\\",\\n    \\\"int\\\",\\n    \\\"uint\\\",\\n    \\\"int64\\\",\\n    \\\"uint64\\\",\\n    \\\"nativeint\\\",\\n    \\\"unativeint\\\",\\n    \\\"decimal\\\",\\n    \\\"float\\\",\\n    \\\"double\\\",\\n    \\\"float32\\\",\\n    \\\"single\\\",\\n    \\\"char\\\",\\n    \\\"string\\\",\\n    \\\"unit\\\",\\n    \\\"bigint\\\",\\n    // other native types or lowercase aliases\\n    \\\"option\\\",\\n    \\\"voption\\\",\\n    \\\"list\\\",\\n    \\\"array\\\",\\n    \\\"seq\\\",\\n    \\\"byref\\\",\\n    \\\"exn\\\",\\n    \\\"inref\\\",\\n    \\\"nativeptr\\\",\\n    \\\"obj\\\",\\n    \\\"outref\\\",\\n    \\\"voidptr\\\",\\n    // other important FSharp types\\n    \\\"Result\\\"\\n  ];\\n\\n  const BUILTINS = [\\n    // Somewhat arbitrary list of builtin functions and values.\\n    // Most of them are declared in Microsoft.FSharp.Core\\n    // I tried to stay relevant by adding only the most idiomatic\\n    // and most used symbols that are not already declared as types.\\n    \\\"not\\\",\\n    \\\"ref\\\",\\n    \\\"raise\\\",\\n    \\\"reraise\\\",\\n    \\\"dict\\\",\\n    \\\"readOnlyDict\\\",\\n    \\\"set\\\",\\n    \\\"get\\\",\\n    \\\"enum\\\",\\n    \\\"sizeof\\\",\\n    \\\"typeof\\\",\\n    \\\"typedefof\\\",\\n    \\\"nameof\\\",\\n    \\\"nullArg\\\",\\n    \\\"invalidArg\\\",\\n    \\\"invalidOp\\\",\\n    \\\"id\\\",\\n    \\\"fst\\\",\\n    \\\"snd\\\",\\n    \\\"ignore\\\",\\n    \\\"lock\\\",\\n    \\\"using\\\",\\n    \\\"box\\\",\\n    \\\"unbox\\\",\\n    \\\"tryUnbox\\\",\\n    \\\"printf\\\",\\n    \\\"printfn\\\",\\n    \\\"sprintf\\\",\\n    \\\"eprintf\\\",\\n    \\\"eprintfn\\\",\\n    \\\"fprintf\\\",\\n    \\\"fprintfn\\\",\\n    \\\"failwith\\\",\\n    \\\"failwithf\\\"\\n  ];\\n\\n  const ALL_KEYWORDS = {\\n    keyword: KEYWORDS,\\n    literal: LITERALS,\\n    built_in: BUILTINS,\\n    'variable.constant': SPECIAL_IDENTIFIERS\\n  };\\n\\n  // (* potentially multi-line Meta Language style comment *)\\n  const ML_COMMENT =\\n    hljs.COMMENT(/\\\\(\\\\*(?!\\\\))/, /\\\\*\\\\)/, {\\n      contains: [\\\"self\\\"]\\n    });\\n  // Either a multi-line (* Meta Language style comment *) or a single line // C style comment.\\n  const COMMENT = {\\n    variants: [\\n      ML_COMMENT,\\n      hljs.C_LINE_COMMENT_MODE,\\n    ]\\n  };\\n\\n  // Most identifiers can contain apostrophes\\n  const IDENTIFIER_RE = /[a-zA-Z_](\\\\w|')*/;\\n\\n  const QUOTED_IDENTIFIER = {\\n    scope: 'variable',\\n    begin: /``/,\\n    end: /``/\\n  };\\n\\n  // 'a or ^a where a can be a ``quoted identifier``\\n  const BEGIN_GENERIC_TYPE_SYMBOL_RE = /\\\\B('|\\\\^)/;\\n  const GENERIC_TYPE_SYMBOL = {\\n    scope: 'symbol',\\n    variants: [\\n      // the type name is a quoted identifier:\\n      { match: concat(BEGIN_GENERIC_TYPE_SYMBOL_RE, /``.*?``/) },\\n      // the type name is a normal identifier (we don't use IDENTIFIER_RE because there cannot be another apostrophe here):\\n      { match: concat(BEGIN_GENERIC_TYPE_SYMBOL_RE, hljs.UNDERSCORE_IDENT_RE) }\\n    ],\\n    relevance: 0\\n  };\\n\\n  const makeOperatorMode = function({ includeEqual }) {\\n    // List or symbolic operator characters from the FSharp Spec 4.1, minus the dot, and with `?` added, used for nullable operators.\\n    let allOperatorChars;\\n    if (includeEqual)\\n      allOperatorChars = \\\"!%&*+-/<=>@^|~?\\\";\\n    else\\n      allOperatorChars = \\\"!%&*+-/<>@^|~?\\\";\\n    const OPERATOR_CHARS = Array.from(allOperatorChars);\\n    const OPERATOR_CHAR_RE = concat('[', ...OPERATOR_CHARS.map(escape), ']');\\n    // The lone dot operator is special. It cannot be redefined, and we don't want to highlight it. It can be used as part of a multi-chars operator though.\\n    const OPERATOR_CHAR_OR_DOT_RE = either(OPERATOR_CHAR_RE, /\\\\./);\\n    // When a dot is present, it must be followed by another operator char:\\n    const OPERATOR_FIRST_CHAR_OF_MULTIPLE_RE = concat(OPERATOR_CHAR_OR_DOT_RE, lookahead(OPERATOR_CHAR_OR_DOT_RE));\\n    const SYMBOLIC_OPERATOR_RE = either(\\n      concat(OPERATOR_FIRST_CHAR_OF_MULTIPLE_RE, OPERATOR_CHAR_OR_DOT_RE, '*'), // Matches at least 2 chars operators\\n      concat(OPERATOR_CHAR_RE, '+'), // Matches at least one char operators\\n    );\\n    return {\\n      scope: 'operator',\\n      match: either(\\n        // symbolic operators:\\n        SYMBOLIC_OPERATOR_RE,\\n        // other symbolic keywords:\\n        // Type casting and conversion operators:\\n        /:\\\\?>/,\\n        /:\\\\?/,\\n        /:>/,\\n        /:=/, // Reference cell assignment\\n        /::?/, // : or ::\\n        /\\\\$/), // A single $ can be used as an operator\\n      relevance: 0\\n    };\\n  };\\n\\n  const OPERATOR = makeOperatorMode({ includeEqual: true });\\n  // This variant is used when matching '=' should end a parent mode:\\n  const OPERATOR_WITHOUT_EQUAL = makeOperatorMode({ includeEqual: false });\\n\\n  const makeTypeAnnotationMode = function(prefix, prefixScope) {\\n    return {\\n      begin: concat( // a type annotation is a\\n        prefix,            // should be a colon or the 'of' keyword\\n        lookahead(   // that has to be followed by\\n          concat(\\n            /\\\\s*/,         // optional space\\n            either(  // then either of:\\n              /\\\\w/,        // word\\n              /'/,         // generic type name\\n              /\\\\^/,        // generic type name\\n              /#/,         // flexible type name\\n              /``/,        // quoted type name\\n              /\\\\(/,        // parens type expression\\n              /{\\\\|/,       // anonymous type annotation\\n      )))),\\n      beginScope: prefixScope,\\n      // BUG: because ending with \\\\n is necessary for some cases, multi-line type annotations are not properly supported.\\n      // Examples where \\\\n is required at the end:\\n      // - abstract member definitions in classes: abstract Property : int * string\\n      // - return type annotations: let f f' = f' () : returnTypeAnnotation\\n      // - record fields definitions: { A : int \\\\n B : string }\\n      end: lookahead(\\n        either(\\n          /\\\\n/,\\n          /=/)),\\n      relevance: 0,\\n      // we need the known types, and we need the type constraint keywords and literals. e.g.: when 'a : null\\n      keywords: hljs.inherit(ALL_KEYWORDS, { type: KNOWN_TYPES }),\\n      contains: [\\n        COMMENT,\\n        GENERIC_TYPE_SYMBOL,\\n        hljs.inherit(QUOTED_IDENTIFIER, { scope: null }), // match to avoid strange patterns inside that may break the parsing\\n        OPERATOR_WITHOUT_EQUAL\\n      ]\\n    };\\n  };\\n\\n  const TYPE_ANNOTATION = makeTypeAnnotationMode(/:/, 'operator');\\n  const DISCRIMINATED_UNION_TYPE_ANNOTATION = makeTypeAnnotationMode(/\\\\bof\\\\b/, 'keyword');\\n\\n  // type MyType<'a> = ...\\n  const TYPE_DECLARATION = {\\n    begin: [\\n      /(^|\\\\s+)/, // prevents matching the following: `match s.stype with`\\n      /type/,\\n      /\\\\s+/,\\n      IDENTIFIER_RE\\n    ],\\n    beginScope: {\\n      2: 'keyword',\\n      4: 'title.class'\\n    },\\n    end: lookahead(/\\\\(|=|$/),\\n    keywords: ALL_KEYWORDS, // match keywords in type constraints. e.g.: when 'a : null\\n    contains: [\\n      COMMENT,\\n      hljs.inherit(QUOTED_IDENTIFIER, { scope: null }), // match to avoid strange patterns inside that may break the parsing\\n      GENERIC_TYPE_SYMBOL,\\n      {\\n        // For visual consistency, highlight type brackets as operators.\\n        scope: 'operator',\\n        match: /<|>/\\n      },\\n      TYPE_ANNOTATION // generic types can have constraints, which are type annotations. e.g. type MyType<'T when 'T : delegate<obj * string>> =\\n    ]\\n  };\\n\\n  const COMPUTATION_EXPRESSION = {\\n    // computation expressions:\\n    scope: 'computation-expression',\\n    // BUG: might conflict with record deconstruction. e.g. let f { Name = name } = name // will highlight f\\n    match: /\\\\b[_a-z]\\\\w*(?=\\\\s*\\\\{)/\\n  };\\n\\n  const PREPROCESSOR = {\\n    // preprocessor directives and fsi commands:\\n    begin: [\\n      /^\\\\s*/,\\n      concat(/#/, either(...PREPROCESSOR_KEYWORDS)),\\n      /\\\\b/\\n    ],\\n    beginScope: { 2: 'meta' },\\n    end: lookahead(/\\\\s|$/)\\n  };\\n\\n  // TODO: this definition is missing support for type suffixes and octal notation.\\n  // BUG: range operator without any space is wrongly interpreted as a single number (e.g. 1..10 )\\n  const NUMBER = {\\n    variants: [\\n      hljs.BINARY_NUMBER_MODE,\\n      hljs.C_NUMBER_MODE\\n    ]\\n  };\\n\\n  // All the following string definitions are potentially multi-line.\\n  // BUG: these definitions are missing support for byte strings (suffixed with B)\\n\\n  // \\\"...\\\"\\n  const QUOTED_STRING = {\\n    scope: 'string',\\n    begin: /\\\"/,\\n    end: /\\\"/,\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE\\n    ]\\n  };\\n  // @\\\"...\\\"\\n  const VERBATIM_STRING = {\\n    scope: 'string',\\n    begin: /@\\\"/,\\n    end: /\\\"/,\\n    contains: [\\n      {\\n        match: /\\\"\\\"/ // escaped \\\"\\n      },\\n      hljs.BACKSLASH_ESCAPE\\n    ]\\n  };\\n  // \\\"\\\"\\\"...\\\"\\\"\\\"\\n  const TRIPLE_QUOTED_STRING = {\\n    scope: 'string',\\n    begin: /\\\"\\\"\\\"/,\\n    end: /\\\"\\\"\\\"/,\\n    relevance: 2\\n  };\\n  const SUBST = {\\n    scope: 'subst',\\n    begin: /\\\\{/,\\n    end: /\\\\}/,\\n    keywords: ALL_KEYWORDS\\n  };\\n  // $\\\"...{1+1}...\\\"\\n  const INTERPOLATED_STRING = {\\n    scope: 'string',\\n    begin: /\\\\$\\\"/,\\n    end: /\\\"/,\\n    contains: [\\n      {\\n        match: /\\\\{\\\\{/ // escaped {\\n      },\\n      {\\n        match: /\\\\}\\\\}/ // escaped }\\n      },\\n      hljs.BACKSLASH_ESCAPE,\\n      SUBST\\n    ]\\n  };\\n  // $@\\\"...{1+1}...\\\"\\n  const INTERPOLATED_VERBATIM_STRING = {\\n    scope: 'string',\\n    begin: /(\\\\$@|@\\\\$)\\\"/,\\n    end: /\\\"/,\\n    contains: [\\n      {\\n        match: /\\\\{\\\\{/ // escaped {\\n      },\\n      {\\n        match: /\\\\}\\\\}/ // escaped }\\n      },\\n      {\\n        match: /\\\"\\\"/\\n      },\\n      hljs.BACKSLASH_ESCAPE,\\n      SUBST\\n    ]\\n  };\\n  // $\\\"\\\"\\\"...{1+1}...\\\"\\\"\\\"\\n  const INTERPOLATED_TRIPLE_QUOTED_STRING = {\\n    scope: 'string',\\n    begin: /\\\\$\\\"\\\"\\\"/,\\n    end: /\\\"\\\"\\\"/,\\n    contains: [\\n      {\\n        match: /\\\\{\\\\{/ // escaped {\\n      },\\n      {\\n        match: /\\\\}\\\\}/ // escaped }\\n      },\\n      SUBST\\n    ],\\n    relevance: 2\\n  };\\n  // '.'\\n  const CHAR_LITERAL = {\\n    scope: 'string',\\n    match: concat(\\n      /'/,\\n      either(\\n        /[^\\\\\\\\']/, // either a single non escaped char...\\n        /\\\\\\\\(?:.|\\\\d{3}|x[a-fA-F\\\\d]{2}|u[a-fA-F\\\\d]{4}|U[a-fA-F\\\\d]{8})/ // ...or an escape sequence\\n      ),\\n      /'/\\n    )\\n  };\\n  // F# allows a lot of things inside string placeholders.\\n  // Things that don't currently seem allowed by the compiler: types definition, attributes usage.\\n  // (Strictly speaking, some of the followings are only allowed inside triple quoted interpolated strings...)\\n  SUBST.contains = [\\n    INTERPOLATED_VERBATIM_STRING,\\n    INTERPOLATED_STRING,\\n    VERBATIM_STRING,\\n    QUOTED_STRING,\\n    CHAR_LITERAL,\\n    BANG_KEYWORD_MODE,\\n    COMMENT,\\n    QUOTED_IDENTIFIER,\\n    TYPE_ANNOTATION,\\n    COMPUTATION_EXPRESSION,\\n    PREPROCESSOR,\\n    NUMBER,\\n    GENERIC_TYPE_SYMBOL,\\n    OPERATOR\\n  ];\\n  const STRING = {\\n    variants: [\\n      INTERPOLATED_TRIPLE_QUOTED_STRING,\\n      INTERPOLATED_VERBATIM_STRING,\\n      INTERPOLATED_STRING,\\n      TRIPLE_QUOTED_STRING,\\n      VERBATIM_STRING,\\n      QUOTED_STRING,\\n      CHAR_LITERAL\\n    ]\\n  };\\n\\n  return {\\n    name: 'F#',\\n    aliases: [\\n      'fs',\\n      'f#'\\n    ],\\n    keywords: ALL_KEYWORDS,\\n    illegal: /\\\\/\\\\*/,\\n    classNameAliases: {\\n      'computation-expression': 'keyword'\\n    },\\n    contains: [\\n      BANG_KEYWORD_MODE,\\n      STRING,\\n      COMMENT,\\n      QUOTED_IDENTIFIER,\\n      TYPE_DECLARATION,\\n      {\\n        // e.g. [<Attributes(\\\"\\\")>] or [<``module``: MyCustomAttributeThatWorksOnModules>]\\n        // or [<Sealed; NoEquality; NoComparison; CompiledName(\\\"FSharpAsync`1\\\")>]\\n        scope: 'meta',\\n        begin: /\\\\[</,\\n        end: />\\\\]/,\\n        relevance: 2,\\n        contains: [\\n          QUOTED_IDENTIFIER,\\n          // can contain any constant value\\n          TRIPLE_QUOTED_STRING,\\n          VERBATIM_STRING,\\n          QUOTED_STRING,\\n          CHAR_LITERAL,\\n          NUMBER\\n        ]\\n      },\\n      DISCRIMINATED_UNION_TYPE_ANNOTATION,\\n      TYPE_ANNOTATION,\\n      COMPUTATION_EXPRESSION,\\n      PREPROCESSOR,\\n      NUMBER,\\n      GENERIC_TYPE_SYMBOL,\\n      OPERATOR\\n    ]\\n  };\\n}\\n\\nmodule.exports = fsharp;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/fsharp.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/gams.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/gams.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\n Language: GAMS\\n Author: Stefan Bechert <stefan.bechert@gmx.net>\\n Contributors: Oleg Efimov <efimovov@gmail.com>, Mikko Kouhia <mikko.kouhia@iki.fi>\\n Description: The General Algebraic Modeling System language\\n Website: https://www.gams.com\\n Category: scientific\\n */\\n\\n/** @type LanguageFn */\\nfunction gams(hljs) {\\n  const regex = hljs.regex;\\n  const KEYWORDS = {\\n    keyword:\\n      'abort acronym acronyms alias all and assign binary card diag display '\\n      + 'else eq file files for free ge gt if integer le loop lt maximizing '\\n      + 'minimizing model models ne negative no not option options or ord '\\n      + 'positive prod put putpage puttl repeat sameas semicont semiint smax '\\n      + 'smin solve sos1 sos2 sum system table then until using while xor yes',\\n    literal:\\n      'eps inf na',\\n    built_in:\\n      'abs arccos arcsin arctan arctan2 Beta betaReg binomial ceil centropy '\\n      + 'cos cosh cvPower div div0 eDist entropy errorf execSeed exp fact '\\n      + 'floor frac gamma gammaReg log logBeta logGamma log10 log2 mapVal max '\\n      + 'min mod ncpCM ncpF ncpVUpow ncpVUsin normal pi poly power '\\n      + 'randBinomial randLinear randTriangle round rPower sigmoid sign '\\n      + 'signPower sin sinh slexp sllog10 slrec sqexp sqlog10 sqr sqrec sqrt '\\n      + 'tan tanh trunc uniform uniformInt vcPower bool_and bool_eqv bool_imp '\\n      + 'bool_not bool_or bool_xor ifThen rel_eq rel_ge rel_gt rel_le rel_lt '\\n      + 'rel_ne gday gdow ghour gleap gmillisec gminute gmonth gsecond gyear '\\n      + 'jdate jnow jstart jtime errorLevel execError gamsRelease gamsVersion '\\n      + 'handleCollect handleDelete handleStatus handleSubmit heapFree '\\n      + 'heapLimit heapSize jobHandle jobKill jobStatus jobTerminate '\\n      + 'licenseLevel licenseStatus maxExecError sleep timeClose timeComp '\\n      + 'timeElapsed timeExec timeStart'\\n  };\\n  const PARAMS = {\\n    className: 'params',\\n    begin: /\\\\(/,\\n    end: /\\\\)/,\\n    excludeBegin: true,\\n    excludeEnd: true\\n  };\\n  const SYMBOLS = {\\n    className: 'symbol',\\n    variants: [\\n      { begin: /=[lgenxc]=/ },\\n      { begin: /\\\\$/ }\\n    ]\\n  };\\n  const QSTR = { // One-line quoted comment string\\n    className: 'comment',\\n    variants: [\\n      {\\n        begin: '\\\\'',\\n        end: '\\\\''\\n      },\\n      {\\n        begin: '\\\"',\\n        end: '\\\"'\\n      }\\n    ],\\n    illegal: '\\\\\\\\n',\\n    contains: [ hljs.BACKSLASH_ESCAPE ]\\n  };\\n  const ASSIGNMENT = {\\n    begin: '/',\\n    end: '/',\\n    keywords: KEYWORDS,\\n    contains: [\\n      QSTR,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.APOS_STRING_MODE,\\n      hljs.C_NUMBER_MODE\\n    ]\\n  };\\n  const COMMENT_WORD = /[a-z0-9&#*=?@\\\\\\\\><:,()$[\\\\]_.{}!+%^-]+/;\\n  const DESCTEXT = { // Parameter/set/variable description text\\n    begin: /[a-z][a-z0-9_]*(\\\\([a-z0-9_, ]*\\\\))?[ \\\\t]+/,\\n    excludeBegin: true,\\n    end: '$',\\n    endsWithParent: true,\\n    contains: [\\n      QSTR,\\n      ASSIGNMENT,\\n      {\\n        className: 'comment',\\n        // one comment word, then possibly more\\n        begin: regex.concat(\\n          COMMENT_WORD,\\n          // [ ] because \\\\s would be too broad (matching newlines)\\n          regex.anyNumberOfTimes(regex.concat(/[ ]+/, COMMENT_WORD))\\n        ),\\n        relevance: 0\\n      }\\n    ]\\n  };\\n\\n  return {\\n    name: 'GAMS',\\n    aliases: [ 'gms' ],\\n    case_insensitive: true,\\n    keywords: KEYWORDS,\\n    contains: [\\n      hljs.COMMENT(/^\\\\$ontext/, /^\\\\$offtext/),\\n      {\\n        className: 'meta',\\n        begin: '^\\\\\\\\$[a-z0-9]+',\\n        end: '$',\\n        returnBegin: true,\\n        contains: [\\n          {\\n            className: 'keyword',\\n            begin: '^\\\\\\\\$[a-z0-9]+'\\n          }\\n        ]\\n      },\\n      hljs.COMMENT('^\\\\\\\\*', '$'),\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.APOS_STRING_MODE,\\n      // Declarations\\n      {\\n        beginKeywords:\\n          'set sets parameter parameters variable variables '\\n          + 'scalar scalars equation equations',\\n        end: ';',\\n        contains: [\\n          hljs.COMMENT('^\\\\\\\\*', '$'),\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE,\\n          hljs.QUOTE_STRING_MODE,\\n          hljs.APOS_STRING_MODE,\\n          ASSIGNMENT,\\n          DESCTEXT\\n        ]\\n      },\\n      { // table environment\\n        beginKeywords: 'table',\\n        end: ';',\\n        returnBegin: true,\\n        contains: [\\n          { // table header row\\n            beginKeywords: 'table',\\n            end: '$',\\n            contains: [ DESCTEXT ]\\n          },\\n          hljs.COMMENT('^\\\\\\\\*', '$'),\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE,\\n          hljs.QUOTE_STRING_MODE,\\n          hljs.APOS_STRING_MODE,\\n          hljs.C_NUMBER_MODE\\n          // Table does not contain DESCTEXT or ASSIGNMENT\\n        ]\\n      },\\n      // Function definitions\\n      {\\n        className: 'function',\\n        begin: /^[a-z][a-z0-9_,\\\\-+' ()$]+\\\\.{2}/,\\n        returnBegin: true,\\n        contains: [\\n          { // Function title\\n            className: 'title',\\n            begin: /^[a-z0-9_]+/\\n          },\\n          PARAMS,\\n          SYMBOLS\\n        ]\\n      },\\n      hljs.C_NUMBER_MODE,\\n      SYMBOLS\\n    ]\\n  };\\n}\\n\\nmodule.exports = gams;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/gams.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/gauss.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/gauss.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: GAUSS\\nAuthor: Matt Evans <matt@aptech.com>\\nDescription: GAUSS Mathematical and Statistical language\\nWebsite: https://www.aptech.com\\nCategory: scientific\\n*/\\nfunction gauss(hljs) {\\n  const KEYWORDS = {\\n    keyword: 'bool break call callexe checkinterrupt clear clearg closeall cls comlog compile '\\n              + 'continue create debug declare delete disable dlibrary dllcall do dos ed edit else '\\n              + 'elseif enable end endfor endif endp endo errorlog errorlogat expr external fn '\\n              + 'for format goto gosub graph if keyword let lib library line load loadarray loadexe '\\n              + 'loadf loadk loadm loadp loads loadx local locate loopnextindex lprint lpwidth lshow '\\n              + 'matrix msym ndpclex new open output outwidth plot plotsym pop prcsn print '\\n              + 'printdos proc push retp return rndcon rndmod rndmult rndseed run save saveall screen '\\n              + 'scroll setarray show sparse stop string struct system trace trap threadfor '\\n              + 'threadendfor threadbegin threadjoin threadstat threadend until use while winprint '\\n              + 'ne ge le gt lt and xor or not eq eqv',\\n    built_in: 'abs acf aconcat aeye amax amean AmericanBinomCall AmericanBinomCall_Greeks AmericanBinomCall_ImpVol '\\n              + 'AmericanBinomPut AmericanBinomPut_Greeks AmericanBinomPut_ImpVol AmericanBSCall AmericanBSCall_Greeks '\\n              + 'AmericanBSCall_ImpVol AmericanBSPut AmericanBSPut_Greeks AmericanBSPut_ImpVol amin amult annotationGetDefaults '\\n              + 'annotationSetBkd annotationSetFont annotationSetLineColor annotationSetLineStyle annotationSetLineThickness '\\n              + 'annualTradingDays arccos arcsin areshape arrayalloc arrayindex arrayinit arraytomat asciiload asclabel astd '\\n              + 'astds asum atan atan2 atranspose axmargin balance band bandchol bandcholsol bandltsol bandrv bandsolpd bar '\\n              + 'base10 begwind besselj bessely beta box boxcox cdfBeta cdfBetaInv cdfBinomial cdfBinomialInv cdfBvn cdfBvn2 '\\n              + 'cdfBvn2e cdfCauchy cdfCauchyInv cdfChic cdfChii cdfChinc cdfChincInv cdfExp cdfExpInv cdfFc cdfFnc cdfFncInv '\\n              + 'cdfGam cdfGenPareto cdfHyperGeo cdfLaplace cdfLaplaceInv cdfLogistic cdfLogisticInv cdfmControlCreate cdfMvn '\\n              + 'cdfMvn2e cdfMvnce cdfMvne cdfMvt2e cdfMvtce cdfMvte cdfN cdfN2 cdfNc cdfNegBinomial cdfNegBinomialInv cdfNi '\\n              + 'cdfPoisson cdfPoissonInv cdfRayleigh cdfRayleighInv cdfTc cdfTci cdfTnc cdfTvn cdfWeibull cdfWeibullInv cdir '\\n              + 'ceil ChangeDir chdir chiBarSquare chol choldn cholsol cholup chrs close code cols colsf combinate combinated '\\n              + 'complex con cond conj cons ConScore contour conv convertsatostr convertstrtosa corrm corrms corrvc corrx corrxs '\\n              + 'cos cosh counts countwts crossprd crout croutp csrcol csrlin csvReadM csvReadSA cumprodc cumsumc curve cvtos '\\n              + 'datacreate datacreatecomplex datalist dataload dataloop dataopen datasave date datestr datestring datestrymd '\\n              + 'dayinyr dayofweek dbAddDatabase dbClose dbCommit dbCreateQuery dbExecQuery dbGetConnectOptions dbGetDatabaseName '\\n              + 'dbGetDriverName dbGetDrivers dbGetHostName dbGetLastErrorNum dbGetLastErrorText dbGetNumericalPrecPolicy '\\n              + 'dbGetPassword dbGetPort dbGetTableHeaders dbGetTables dbGetUserName dbHasFeature dbIsDriverAvailable dbIsOpen '\\n              + 'dbIsOpenError dbOpen dbQueryBindValue dbQueryClear dbQueryCols dbQueryExecPrepared dbQueryFetchAllM dbQueryFetchAllSA '\\n              + 'dbQueryFetchOneM dbQueryFetchOneSA dbQueryFinish dbQueryGetBoundValue dbQueryGetBoundValues dbQueryGetField '\\n              + 'dbQueryGetLastErrorNum dbQueryGetLastErrorText dbQueryGetLastInsertID dbQueryGetLastQuery dbQueryGetPosition '\\n              + 'dbQueryIsActive dbQueryIsForwardOnly dbQueryIsNull dbQueryIsSelect dbQueryIsValid dbQueryPrepare dbQueryRows '\\n              + 'dbQuerySeek dbQuerySeekFirst dbQuerySeekLast dbQuerySeekNext dbQuerySeekPrevious dbQuerySetForwardOnly '\\n              + 'dbRemoveDatabase dbRollback dbSetConnectOptions dbSetDatabaseName dbSetHostName dbSetNumericalPrecPolicy '\\n              + 'dbSetPort dbSetUserName dbTransaction DeleteFile delif delrows denseToSp denseToSpRE denToZero design det detl '\\n              + 'dfft dffti diag diagrv digamma doswin DOSWinCloseall DOSWinOpen dotfeq dotfeqmt dotfge dotfgemt dotfgt dotfgtmt '\\n              + 'dotfle dotflemt dotflt dotfltmt dotfne dotfnemt draw drop dsCreate dstat dstatmt dstatmtControlCreate dtdate dtday '\\n              + 'dttime dttodtv dttostr dttoutc dtvnormal dtvtodt dtvtoutc dummy dummybr dummydn eig eigh eighv eigv elapsedTradingDays '\\n              + 'endwind envget eof eqSolve eqSolvemt eqSolvemtControlCreate eqSolvemtOutCreate eqSolveset erf erfc erfccplx erfcplx error '\\n              + 'etdays ethsec etstr EuropeanBinomCall EuropeanBinomCall_Greeks EuropeanBinomCall_ImpVol EuropeanBinomPut '\\n              + 'EuropeanBinomPut_Greeks EuropeanBinomPut_ImpVol EuropeanBSCall EuropeanBSCall_Greeks EuropeanBSCall_ImpVol '\\n              + 'EuropeanBSPut EuropeanBSPut_Greeks EuropeanBSPut_ImpVol exctsmpl exec execbg exp extern eye fcheckerr fclearerr feq '\\n              + 'feqmt fflush fft ffti fftm fftmi fftn fge fgemt fgets fgetsa fgetsat fgetst fgt fgtmt fileinfo filesa fle flemt '\\n              + 'floor flt fltmt fmod fne fnemt fonts fopen formatcv formatnv fputs fputst fseek fstrerror ftell ftocv ftos ftostrC '\\n              + 'gamma gammacplx gammaii gausset gdaAppend gdaCreate gdaDStat gdaDStatMat gdaGetIndex gdaGetName gdaGetNames gdaGetOrders '\\n              + 'gdaGetType gdaGetTypes gdaGetVarInfo gdaIsCplx gdaLoad gdaPack gdaRead gdaReadByIndex gdaReadSome gdaReadSparse '\\n              + 'gdaReadStruct gdaReportVarInfo gdaSave gdaUpdate gdaUpdateAndPack gdaVars gdaWrite gdaWrite32 gdaWriteSome getarray '\\n              + 'getdims getf getGAUSShome getmatrix getmatrix4D getname getnamef getNextTradingDay getNextWeekDay getnr getorders '\\n              + 'getpath getPreviousTradingDay getPreviousWeekDay getRow getscalar3D getscalar4D getTrRow getwind glm gradcplx gradMT '\\n              + 'gradMTm gradMTT gradMTTm gradp graphprt graphset hasimag header headermt hess hessMT hessMTg hessMTgw hessMTm '\\n              + 'hessMTmw hessMTT hessMTTg hessMTTgw hessMTTm hessMTw hessp hist histf histp hsec imag indcv indexcat indices indices2 '\\n              + 'indicesf indicesfn indnv indsav integrate1d integrateControlCreate intgrat2 intgrat3 inthp1 inthp2 inthp3 inthp4 '\\n              + 'inthpControlCreate intquad1 intquad2 intquad3 intrleav intrleavsa intrsect intsimp inv invpd invswp iscplx iscplxf '\\n              + 'isden isinfnanmiss ismiss key keyav keyw lag lag1 lagn lapEighb lapEighi lapEighvb lapEighvi lapgEig lapgEigh lapgEighv '\\n              + 'lapgEigv lapgSchur lapgSvdcst lapgSvds lapgSvdst lapSvdcusv lapSvds lapSvdusv ldlp ldlsol linSolve listwise ln lncdfbvn '\\n              + 'lncdfbvn2 lncdfmvn lncdfn lncdfn2 lncdfnc lnfact lngammacplx lnpdfmvn lnpdfmvt lnpdfn lnpdft loadd loadstruct loadwind '\\n              + 'loess loessmt loessmtControlCreate log loglog logx logy lower lowmat lowmat1 ltrisol lu lusol machEpsilon make makevars '\\n              + 'makewind margin matalloc matinit mattoarray maxbytes maxc maxindc maxv maxvec mbesselei mbesselei0 mbesselei1 mbesseli '\\n              + 'mbesseli0 mbesseli1 meanc median mergeby mergevar minc minindc minv miss missex missrv moment momentd movingave '\\n              + 'movingaveExpwgt movingaveWgt nextindex nextn nextnevn nextwind ntos null null1 numCombinations ols olsmt olsmtControlCreate '\\n              + 'olsqr olsqr2 olsqrmt ones optn optnevn orth outtyp pacf packedToSp packr parse pause pdfCauchy pdfChi pdfExp pdfGenPareto '\\n              + 'pdfHyperGeo pdfLaplace pdfLogistic pdfn pdfPoisson pdfRayleigh pdfWeibull pi pinv pinvmt plotAddArrow plotAddBar plotAddBox '\\n              + 'plotAddHist plotAddHistF plotAddHistP plotAddPolar plotAddScatter plotAddShape plotAddTextbox plotAddTS plotAddXY plotArea '\\n              + 'plotBar plotBox plotClearLayout plotContour plotCustomLayout plotGetDefaults plotHist plotHistF plotHistP plotLayout '\\n              + 'plotLogLog plotLogX plotLogY plotOpenWindow plotPolar plotSave plotScatter plotSetAxesPen plotSetBar plotSetBarFill '\\n              + 'plotSetBarStacked plotSetBkdColor plotSetFill plotSetGrid plotSetLegend plotSetLineColor plotSetLineStyle plotSetLineSymbol '\\n              + 'plotSetLineThickness plotSetNewWindow plotSetTitle plotSetWhichYAxis plotSetXAxisShow plotSetXLabel plotSetXRange '\\n              + 'plotSetXTicInterval plotSetXTicLabel plotSetYAxisShow plotSetYLabel plotSetYRange plotSetZAxisShow plotSetZLabel '\\n              + 'plotSurface plotTS plotXY polar polychar polyeval polygamma polyint polymake polymat polymroot polymult polyroot '\\n              + 'pqgwin previousindex princomp printfm printfmt prodc psi putarray putf putvals pvCreate pvGetIndex pvGetParNames '\\n              + 'pvGetParVector pvLength pvList pvPack pvPacki pvPackm pvPackmi pvPacks pvPacksi pvPacksm pvPacksmi pvPutParVector '\\n              + 'pvTest pvUnpack QNewton QNewtonmt QNewtonmtControlCreate QNewtonmtOutCreate QNewtonSet QProg QProgmt QProgmtInCreate '\\n              + 'qqr qqre qqrep qr qre qrep qrsol qrtsol qtyr qtyre qtyrep quantile quantiled qyr qyre qyrep qz rank rankindx readr '\\n              + 'real reclassify reclassifyCuts recode recserar recsercp recserrc rerun rescale reshape rets rev rfft rffti rfftip rfftn '\\n              + 'rfftnp rfftp rndBernoulli rndBeta rndBinomial rndCauchy rndChiSquare rndCon rndCreateState rndExp rndGamma rndGeo rndGumbel '\\n              + 'rndHyperGeo rndi rndKMbeta rndKMgam rndKMi rndKMn rndKMnb rndKMp rndKMu rndKMvm rndLaplace rndLCbeta rndLCgam rndLCi rndLCn '\\n              + 'rndLCnb rndLCp rndLCu rndLCvm rndLogNorm rndMTu rndMVn rndMVt rndn rndnb rndNegBinomial rndp rndPoisson rndRayleigh '\\n              + 'rndStateSkip rndu rndvm rndWeibull rndWishart rotater round rows rowsf rref sampleData satostrC saved saveStruct savewind '\\n              + 'scale scale3d scalerr scalinfnanmiss scalmiss schtoc schur searchsourcepath seekr select selif seqa seqm setdif setdifsa '\\n              + 'setvars setvwrmode setwind shell shiftr sin singleindex sinh sleep solpd sortc sortcc sortd sorthc sorthcc sortind '\\n              + 'sortindc sortmc sortr sortrc spBiconjGradSol spChol spConjGradSol spCreate spDenseSubmat spDiagRvMat spEigv spEye spLDL '\\n              + 'spline spLU spNumNZE spOnes spreadSheetReadM spreadSheetReadSA spreadSheetWrite spScale spSubmat spToDense spTrTDense '\\n              + 'spTScalar spZeros sqpSolve sqpSolveMT sqpSolveMTControlCreate sqpSolveMTlagrangeCreate sqpSolveMToutCreate sqpSolveSet '\\n              + 'sqrt statements stdc stdsc stocv stof strcombine strindx strlen strput strrindx strsect strsplit strsplitPad strtodt '\\n              + 'strtof strtofcplx strtriml strtrimr strtrunc strtruncl strtruncpad strtruncr submat subscat substute subvec sumc sumr '\\n              + 'surface svd svd1 svd2 svdcusv svds svdusv sysstate tab tan tanh tempname '\\n              + 'time timedt timestr timeutc title tkf2eps tkf2ps tocart todaydt toeplitz token topolar trapchk '\\n              + 'trigamma trimr trunc type typecv typef union unionsa uniqindx uniqindxsa unique uniquesa upmat upmat1 upper utctodt '\\n              + 'utctodtv utrisol vals varCovMS varCovXS varget vargetl varmall varmares varput varputl vartypef vcm vcms vcx vcxs '\\n              + 'vec vech vecr vector vget view viewxyz vlist vnamecv volume vput vread vtypecv wait waitc walkindex where window '\\n              + 'writer xlabel xlsGetSheetCount xlsGetSheetSize xlsGetSheetTypes xlsMakeRange xlsReadM xlsReadSA xlsWrite xlsWriteM '\\n              + 'xlsWriteSA xpnd xtics xy xyz ylabel ytics zeros zeta zlabel ztics cdfEmpirical dot h5create h5open h5read h5readAttribute '\\n              + 'h5write h5writeAttribute ldl plotAddErrorBar plotAddSurface plotCDFEmpirical plotSetColormap plotSetContourLabels '\\n              + 'plotSetLegendFont plotSetTextInterpreter plotSetXTicCount plotSetYTicCount plotSetZLevels powerm strjoin sylvester '\\n              + 'strtrim',\\n    literal: 'DB_AFTER_LAST_ROW DB_ALL_TABLES DB_BATCH_OPERATIONS DB_BEFORE_FIRST_ROW DB_BLOB DB_EVENT_NOTIFICATIONS '\\n             + 'DB_FINISH_QUERY DB_HIGH_PRECISION DB_LAST_INSERT_ID DB_LOW_PRECISION_DOUBLE DB_LOW_PRECISION_INT32 '\\n             + 'DB_LOW_PRECISION_INT64 DB_LOW_PRECISION_NUMBERS DB_MULTIPLE_RESULT_SETS DB_NAMED_PLACEHOLDERS '\\n             + 'DB_POSITIONAL_PLACEHOLDERS DB_PREPARED_QUERIES DB_QUERY_SIZE DB_SIMPLE_LOCKING DB_SYSTEM_TABLES DB_TABLES '\\n             + 'DB_TRANSACTIONS DB_UNICODE DB_VIEWS __STDIN __STDOUT __STDERR __FILE_DIR'\\n  };\\n\\n  const AT_COMMENT_MODE = hljs.COMMENT('@', '@');\\n\\n  const PREPROCESSOR =\\n  {\\n    className: 'meta',\\n    begin: '#',\\n    end: '$',\\n    keywords: { keyword: 'define definecs|10 undef ifdef ifndef iflight ifdllcall ifmac ifos2win ifunix else endif lineson linesoff srcfile srcline' },\\n    contains: [\\n      {\\n        begin: /\\\\\\\\\\\\n/,\\n        relevance: 0\\n      },\\n      {\\n        beginKeywords: 'include',\\n        end: '$',\\n        keywords: { keyword: 'include' },\\n        contains: [\\n          {\\n            className: 'string',\\n            begin: '\\\"',\\n            end: '\\\"',\\n            illegal: '\\\\\\\\n'\\n          }\\n        ]\\n      },\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      AT_COMMENT_MODE\\n    ]\\n  };\\n\\n  const STRUCT_TYPE =\\n  {\\n    begin: /\\\\bstruct\\\\s+/,\\n    end: /\\\\s/,\\n    keywords: \\\"struct\\\",\\n    contains: [\\n      {\\n        className: \\\"type\\\",\\n        begin: hljs.UNDERSCORE_IDENT_RE,\\n        relevance: 0\\n      }\\n    ]\\n  };\\n\\n  // only for definitions\\n  const PARSE_PARAMS = [\\n    {\\n      className: 'params',\\n      begin: /\\\\(/,\\n      end: /\\\\)/,\\n      excludeBegin: true,\\n      excludeEnd: true,\\n      endsWithParent: true,\\n      relevance: 0,\\n      contains: [\\n        { // dots\\n          className: 'literal',\\n          begin: /\\\\.\\\\.\\\\./\\n        },\\n        hljs.C_NUMBER_MODE,\\n        hljs.C_BLOCK_COMMENT_MODE,\\n        AT_COMMENT_MODE,\\n        STRUCT_TYPE\\n      ]\\n    }\\n  ];\\n\\n  const FUNCTION_DEF =\\n  {\\n    className: \\\"title\\\",\\n    begin: hljs.UNDERSCORE_IDENT_RE,\\n    relevance: 0\\n  };\\n\\n  const DEFINITION = function(beginKeywords, end, inherits) {\\n    const mode = hljs.inherit(\\n      {\\n        className: \\\"function\\\",\\n        beginKeywords: beginKeywords,\\n        end: end,\\n        excludeEnd: true,\\n        contains: [].concat(PARSE_PARAMS)\\n      },\\n      inherits || {}\\n    );\\n    mode.contains.push(FUNCTION_DEF);\\n    mode.contains.push(hljs.C_NUMBER_MODE);\\n    mode.contains.push(hljs.C_BLOCK_COMMENT_MODE);\\n    mode.contains.push(AT_COMMENT_MODE);\\n    return mode;\\n  };\\n\\n  const BUILT_IN_REF =\\n  { // these are explicitly named internal function calls\\n    className: 'built_in',\\n    begin: '\\\\\\\\b(' + KEYWORDS.built_in.split(' ').join('|') + ')\\\\\\\\b'\\n  };\\n\\n  const STRING_REF =\\n  {\\n    className: 'string',\\n    begin: '\\\"',\\n    end: '\\\"',\\n    contains: [ hljs.BACKSLASH_ESCAPE ],\\n    relevance: 0\\n  };\\n\\n  const FUNCTION_REF =\\n  {\\n    // className: \\\"fn_ref\\\",\\n    begin: hljs.UNDERSCORE_IDENT_RE + '\\\\\\\\s*\\\\\\\\(',\\n    returnBegin: true,\\n    keywords: KEYWORDS,\\n    relevance: 0,\\n    contains: [\\n      { beginKeywords: KEYWORDS.keyword },\\n      BUILT_IN_REF,\\n      { // ambiguously named function calls get a relevance of 0\\n        className: 'built_in',\\n        begin: hljs.UNDERSCORE_IDENT_RE,\\n        relevance: 0\\n      }\\n    ]\\n  };\\n\\n  const FUNCTION_REF_PARAMS =\\n  {\\n    // className: \\\"fn_ref_params\\\",\\n    begin: /\\\\(/,\\n    end: /\\\\)/,\\n    relevance: 0,\\n    keywords: {\\n      built_in: KEYWORDS.built_in,\\n      literal: KEYWORDS.literal\\n    },\\n    contains: [\\n      hljs.C_NUMBER_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      AT_COMMENT_MODE,\\n      BUILT_IN_REF,\\n      FUNCTION_REF,\\n      STRING_REF,\\n      'self'\\n    ]\\n  };\\n\\n  FUNCTION_REF.contains.push(FUNCTION_REF_PARAMS);\\n\\n  return {\\n    name: 'GAUSS',\\n    aliases: [ 'gss' ],\\n    case_insensitive: true, // language is case-insensitive\\n    keywords: KEYWORDS,\\n    illegal: /(\\\\{[%#]|[%#]\\\\}| <- )/,\\n    contains: [\\n      hljs.C_NUMBER_MODE,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      AT_COMMENT_MODE,\\n      STRING_REF,\\n      PREPROCESSOR,\\n      {\\n        className: 'keyword',\\n        begin: /\\\\bexternal (matrix|string|array|sparse matrix|struct|proc|keyword|fn)/\\n      },\\n      DEFINITION('proc keyword', ';'),\\n      DEFINITION('fn', '='),\\n      {\\n        beginKeywords: 'for threadfor',\\n        end: /;/,\\n        // end: /\\\\(/,\\n        relevance: 0,\\n        contains: [\\n          hljs.C_BLOCK_COMMENT_MODE,\\n          AT_COMMENT_MODE,\\n          FUNCTION_REF_PARAMS\\n        ]\\n      },\\n      { // custom method guard\\n        // excludes method names from keyword processing\\n        variants: [\\n          { begin: hljs.UNDERSCORE_IDENT_RE + '\\\\\\\\.' + hljs.UNDERSCORE_IDENT_RE },\\n          { begin: hljs.UNDERSCORE_IDENT_RE + '\\\\\\\\s*=' }\\n        ],\\n        relevance: 0\\n      },\\n      FUNCTION_REF,\\n      STRUCT_TYPE\\n    ]\\n  };\\n}\\n\\nmodule.exports = gauss;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/gauss.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/gcode.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/gcode.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\n Language: G-code (ISO 6983)\\n Contributors: Adam Joseph Cook <adam.joseph.cook@gmail.com>\\n Description: G-code syntax highlighter for Fanuc and other common CNC machine tool controls.\\n Website: https://www.sis.se/api/document/preview/911952/\\n */\\n\\nfunction gcode(hljs) {\\n  const GCODE_IDENT_RE = '[A-Z_][A-Z0-9_.]*';\\n  const GCODE_CLOSE_RE = '%';\\n  const GCODE_KEYWORDS = {\\n    $pattern: GCODE_IDENT_RE,\\n    keyword: 'IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT '\\n      + 'EQ LT GT NE GE LE OR XOR'\\n  };\\n  const GCODE_START = {\\n    className: 'meta',\\n    begin: '([O])([0-9]+)'\\n  };\\n  const NUMBER = hljs.inherit(hljs.C_NUMBER_MODE, { begin: '([-+]?((\\\\\\\\.\\\\\\\\d+)|(\\\\\\\\d+)(\\\\\\\\.\\\\\\\\d*)?))|' + hljs.C_NUMBER_RE });\\n  const GCODE_CODE = [\\n    hljs.C_LINE_COMMENT_MODE,\\n    hljs.C_BLOCK_COMMENT_MODE,\\n    hljs.COMMENT(/\\\\(/, /\\\\)/),\\n    NUMBER,\\n    hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }),\\n    hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),\\n    {\\n      className: 'name',\\n      begin: '([G])([0-9]+\\\\\\\\.?[0-9]?)'\\n    },\\n    {\\n      className: 'name',\\n      begin: '([M])([0-9]+\\\\\\\\.?[0-9]?)'\\n    },\\n    {\\n      className: 'attr',\\n      begin: '(VC|VS|#)',\\n      end: '(\\\\\\\\d+)'\\n    },\\n    {\\n      className: 'attr',\\n      begin: '(VZOFX|VZOFY|VZOFZ)'\\n    },\\n    {\\n      className: 'built_in',\\n      begin: '(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\\\\\\\[)',\\n      contains: [ NUMBER ],\\n      end: '\\\\\\\\]'\\n    },\\n    {\\n      className: 'symbol',\\n      variants: [\\n        {\\n          begin: 'N',\\n          end: '\\\\\\\\d+',\\n          illegal: '\\\\\\\\W'\\n        }\\n      ]\\n    }\\n  ];\\n\\n  return {\\n    name: 'G-code (ISO 6983)',\\n    aliases: [ 'nc' ],\\n    // Some implementations (CNC controls) of G-code are interoperable with uppercase and lowercase letters seamlessly.\\n    // However, most prefer all uppercase and uppercase is customary.\\n    case_insensitive: true,\\n    keywords: GCODE_KEYWORDS,\\n    contains: [\\n      {\\n        className: 'meta',\\n        begin: GCODE_CLOSE_RE\\n      },\\n      GCODE_START\\n    ].concat(GCODE_CODE)\\n  };\\n}\\n\\nmodule.exports = gcode;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/gcode.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/gherkin.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/gherkin.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\n Language: Gherkin\\n Author: Sam Pikesley (@pikesley) <sam.pikesley@theodi.org>\\n Description: Gherkin is the format for cucumber specifications. It is a domain specific language which helps you to describe business behavior without the need to go into detail of implementation.\\n Website: https://cucumber.io/docs/gherkin/\\n */\\n\\nfunction gherkin(hljs) {\\n  return {\\n    name: 'Gherkin',\\n    aliases: [ 'feature' ],\\n    keywords: 'Feature Background Ability Business\\\\ Need Scenario Scenarios Scenario\\\\ Outline Scenario\\\\ Template Examples Given And Then But When',\\n    contains: [\\n      {\\n        className: 'symbol',\\n        begin: '\\\\\\\\*',\\n        relevance: 0\\n      },\\n      {\\n        className: 'meta',\\n        begin: '@[^@\\\\\\\\s]+'\\n      },\\n      {\\n        begin: '\\\\\\\\|',\\n        end: '\\\\\\\\|\\\\\\\\w*$',\\n        contains: [\\n          {\\n            className: 'string',\\n            begin: '[^|]+'\\n          }\\n        ]\\n      },\\n      {\\n        className: 'variable',\\n        begin: '<',\\n        end: '>'\\n      },\\n      hljs.HASH_COMMENT_MODE,\\n      {\\n        className: 'string',\\n        begin: '\\\"\\\"\\\"',\\n        end: '\\\"\\\"\\\"'\\n      },\\n      hljs.QUOTE_STRING_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = gherkin;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/gherkin.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/glsl.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/glsl.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: GLSL\\nDescription: OpenGL Shading Language\\nAuthor: Sergey Tikhomirov <sergey@tikhomirov.io>\\nWebsite: https://en.wikipedia.org/wiki/OpenGL_Shading_Language\\nCategory: graphics\\n*/\\n\\nfunction glsl(hljs) {\\n  return {\\n    name: 'GLSL',\\n    keywords: {\\n      keyword:\\n        // Statements\\n        'break continue discard do else for if return while switch case default '\\n        // Qualifiers\\n        + 'attribute binding buffer ccw centroid centroid varying coherent column_major const cw '\\n        + 'depth_any depth_greater depth_less depth_unchanged early_fragment_tests equal_spacing '\\n        + 'flat fractional_even_spacing fractional_odd_spacing highp in index inout invariant '\\n        + 'invocations isolines layout line_strip lines lines_adjacency local_size_x local_size_y '\\n        + 'local_size_z location lowp max_vertices mediump noperspective offset origin_upper_left '\\n        + 'out packed patch pixel_center_integer point_mode points precise precision quads r11f_g11f_b10f '\\n        + 'r16 r16_snorm r16f r16i r16ui r32f r32i r32ui r8 r8_snorm r8i r8ui readonly restrict '\\n        + 'rg16 rg16_snorm rg16f rg16i rg16ui rg32f rg32i rg32ui rg8 rg8_snorm rg8i rg8ui rgb10_a2 '\\n        + 'rgb10_a2ui rgba16 rgba16_snorm rgba16f rgba16i rgba16ui rgba32f rgba32i rgba32ui rgba8 '\\n        + 'rgba8_snorm rgba8i rgba8ui row_major sample shared smooth std140 std430 stream triangle_strip '\\n        + 'triangles triangles_adjacency uniform varying vertices volatile writeonly',\\n      type:\\n        'atomic_uint bool bvec2 bvec3 bvec4 dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 '\\n        + 'dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 double dvec2 dvec3 dvec4 float iimage1D iimage1DArray '\\n        + 'iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer '\\n        + 'iimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray '\\n        + 'image2DRect image3D imageBuffer imageCube imageCubeArray int isampler1D isampler1DArray '\\n        + 'isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D '\\n        + 'isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 mat2 mat2x2 mat2x3 '\\n        + 'mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 sampler1D sampler1DArray '\\n        + 'sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow '\\n        + 'sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D '\\n        + 'samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow '\\n        + 'image1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect '\\n        + 'uimage3D uimageBuffer uimageCube uimageCubeArray uint usampler1D usampler1DArray '\\n        + 'usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D '\\n        + 'samplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 vec2 vec3 vec4 void',\\n      built_in:\\n        // Constants\\n        'gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes '\\n        + 'gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms '\\n        + 'gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxComputeAtomicCounterBuffers '\\n        + 'gl_MaxComputeAtomicCounters gl_MaxComputeImageUniforms gl_MaxComputeTextureImageUnits '\\n        + 'gl_MaxComputeUniformComponents gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize '\\n        + 'gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters '\\n        + 'gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentInputVectors '\\n        + 'gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers '\\n        + 'gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents '\\n        + 'gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits '\\n        + 'gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents '\\n        + 'gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset '\\n        + 'gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms '\\n        + 'gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits '\\n        + 'gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents '\\n        + 'gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters '\\n        + 'gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents '\\n        + 'gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents '\\n        + 'gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits '\\n        + 'gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors '\\n        + 'gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms '\\n        + 'gl_MaxVertexOutputComponents gl_MaxVertexOutputVectors gl_MaxVertexTextureImageUnits '\\n        + 'gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset '\\n        // Variables\\n        + 'gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial '\\n        + 'gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color '\\n        + 'gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord '\\n        + 'gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor '\\n        + 'gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial '\\n        + 'gl_FrontSecondaryColor gl_GlobalInvocationID gl_InstanceID gl_InvocationID gl_Layer gl_LightModel '\\n        + 'gl_LightSource gl_LocalInvocationID gl_LocalInvocationIndex gl_ModelViewMatrix '\\n        + 'gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose '\\n        + 'gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose '\\n        + 'gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 '\\n        + 'gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 '\\n        + 'gl_Normal gl_NormalMatrix gl_NormalScale gl_NumSamples gl_NumWorkGroups gl_ObjectPlaneQ '\\n        + 'gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_Point gl_PointCoord '\\n        + 'gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse '\\n        + 'gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask '\\n        + 'gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter '\\n        + 'gl_TexCoord gl_TextureEnvColor gl_TextureMatrix gl_TextureMatrixInverse gl_TextureMatrixInverseTranspose '\\n        + 'gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_WorkGroupID gl_WorkGroupSize gl_in gl_out '\\n        // Functions\\n        + 'EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin '\\n        + 'asinh atan atanh atomicAdd atomicAnd atomicCompSwap atomicCounter atomicCounterDecrement '\\n        + 'atomicCounterIncrement atomicExchange atomicMax atomicMin atomicOr atomicXor barrier '\\n        + 'bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross '\\n        + 'dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB '\\n        + 'floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan '\\n        + 'greaterThanEqual groupMemoryBarrier imageAtomicAdd imageAtomicAnd imageAtomicCompSwap '\\n        + 'imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad '\\n        + 'imageSize imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset '\\n        + 'interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log '\\n        + 'log2 matrixCompMult max memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer '\\n        + 'memoryBarrierImage memoryBarrierShared min mix mod modf noise1 noise2 noise3 noise4 '\\n        + 'normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 '\\n        + 'packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod '\\n        + 'shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh '\\n        + 'smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod '\\n        + 'texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod '\\n        + 'texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod '\\n        + 'textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset '\\n        + 'textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset '\\n        + 'textureProjLod textureProjLodOffset textureProjOffset textureQueryLevels textureQueryLod '\\n        + 'textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 '\\n        + 'unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow',\\n      literal: 'true false'\\n    },\\n    illegal: '\\\"',\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.C_NUMBER_MODE,\\n      {\\n        className: 'meta',\\n        begin: '#',\\n        end: '$'\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = glsl;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/glsl.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/gml.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/gml.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: GML\\nAuthor: Meseta <meseta@gmail.com>\\nDescription: Game Maker Language for GameMaker Studio 2\\nWebsite: https://docs2.yoyogames.com\\nCategory: scripting\\n*/\\n\\nfunction gml(hljs) {\\n  const KEYWORDS = [\\n    \\\"#endregion\\\",\\n    \\\"#macro\\\",\\n    \\\"#region\\\",\\n    \\\"and\\\",\\n    \\\"begin\\\",\\n    \\\"break\\\",\\n    \\\"case\\\",\\n    \\\"constructor\\\",\\n    \\\"continue\\\",\\n    \\\"default\\\",\\n    \\\"delete\\\",\\n    \\\"div\\\",\\n    \\\"do\\\",\\n    \\\"else\\\",\\n    \\\"end\\\",\\n    \\\"enum\\\",\\n    \\\"exit\\\",\\n    \\\"for\\\",\\n    \\\"function\\\",\\n    \\\"globalvar\\\",\\n    \\\"if\\\",\\n    \\\"mod\\\",\\n    \\\"not\\\",\\n    \\\"or\\\",\\n    \\\"repeat\\\",\\n    \\\"return\\\",\\n    \\\"switch\\\",\\n    \\\"then\\\",\\n    \\\"until\\\",\\n    \\\"var\\\",\\n    \\\"while\\\",\\n    \\\"with\\\",\\n    \\\"xor\\\"\\n  ];\\n  const BUILT_INS = [\\n    \\\"abs\\\",\\n    \\\"achievement_available\\\",\\n    \\\"achievement_event\\\",\\n    \\\"achievement_get_challenges\\\",\\n    \\\"achievement_get_info\\\",\\n    \\\"achievement_get_pic\\\",\\n    \\\"achievement_increment\\\",\\n    \\\"achievement_load_friends\\\",\\n    \\\"achievement_load_leaderboard\\\",\\n    \\\"achievement_load_progress\\\",\\n    \\\"achievement_login\\\",\\n    \\\"achievement_login_status\\\",\\n    \\\"achievement_logout\\\",\\n    \\\"achievement_post\\\",\\n    \\\"achievement_post_score\\\",\\n    \\\"achievement_reset\\\",\\n    \\\"achievement_send_challenge\\\",\\n    \\\"achievement_show\\\",\\n    \\\"achievement_show_achievements\\\",\\n    \\\"achievement_show_challenge_notifications\\\",\\n    \\\"achievement_show_leaderboards\\\",\\n    \\\"action_inherited\\\",\\n    \\\"action_kill_object\\\",\\n    \\\"ads_disable\\\",\\n    \\\"ads_enable\\\",\\n    \\\"ads_engagement_active\\\",\\n    \\\"ads_engagement_available\\\",\\n    \\\"ads_engagement_launch\\\",\\n    \\\"ads_event\\\",\\n    \\\"ads_event_preload\\\",\\n    \\\"ads_get_display_height\\\",\\n    \\\"ads_get_display_width\\\",\\n    \\\"ads_interstitial_available\\\",\\n    \\\"ads_interstitial_display\\\",\\n    \\\"ads_move\\\",\\n    \\\"ads_set_reward_callback\\\",\\n    \\\"ads_setup\\\",\\n    \\\"alarm_get\\\",\\n    \\\"alarm_set\\\",\\n    \\\"analytics_event\\\",\\n    \\\"analytics_event_ext\\\",\\n    \\\"angle_difference\\\",\\n    \\\"ansi_char\\\",\\n    \\\"application_get_position\\\",\\n    \\\"application_surface_draw_enable\\\",\\n    \\\"application_surface_enable\\\",\\n    \\\"application_surface_is_enabled\\\",\\n    \\\"arccos\\\",\\n    \\\"arcsin\\\",\\n    \\\"arctan\\\",\\n    \\\"arctan2\\\",\\n    \\\"array_copy\\\",\\n    \\\"array_create\\\",\\n    \\\"array_delete\\\",\\n    \\\"array_equals\\\",\\n    \\\"array_height_2d\\\",\\n    \\\"array_insert\\\",\\n    \\\"array_length\\\",\\n    \\\"array_length_1d\\\",\\n    \\\"array_length_2d\\\",\\n    \\\"array_pop\\\",\\n    \\\"array_push\\\",\\n    \\\"array_resize\\\",\\n    \\\"array_sort\\\",\\n    \\\"asset_get_index\\\",\\n    \\\"asset_get_type\\\",\\n    \\\"audio_channel_num\\\",\\n    \\\"audio_create_buffer_sound\\\",\\n    \\\"audio_create_play_queue\\\",\\n    \\\"audio_create_stream\\\",\\n    \\\"audio_create_sync_group\\\",\\n    \\\"audio_debug\\\",\\n    \\\"audio_destroy_stream\\\",\\n    \\\"audio_destroy_sync_group\\\",\\n    \\\"audio_emitter_create\\\",\\n    \\\"audio_emitter_exists\\\",\\n    \\\"audio_emitter_falloff\\\",\\n    \\\"audio_emitter_free\\\",\\n    \\\"audio_emitter_gain\\\",\\n    \\\"audio_emitter_get_gain\\\",\\n    \\\"audio_emitter_get_listener_mask\\\",\\n    \\\"audio_emitter_get_pitch\\\",\\n    \\\"audio_emitter_get_vx\\\",\\n    \\\"audio_emitter_get_vy\\\",\\n    \\\"audio_emitter_get_vz\\\",\\n    \\\"audio_emitter_get_x\\\",\\n    \\\"audio_emitter_get_y\\\",\\n    \\\"audio_emitter_get_z\\\",\\n    \\\"audio_emitter_pitch\\\",\\n    \\\"audio_emitter_position\\\",\\n    \\\"audio_emitter_set_listener_mask\\\",\\n    \\\"audio_emitter_velocity\\\",\\n    \\\"audio_exists\\\",\\n    \\\"audio_falloff_set_model\\\",\\n    \\\"audio_free_buffer_sound\\\",\\n    \\\"audio_free_play_queue\\\",\\n    \\\"audio_get_listener_count\\\",\\n    \\\"audio_get_listener_info\\\",\\n    \\\"audio_get_listener_mask\\\",\\n    \\\"audio_get_master_gain\\\",\\n    \\\"audio_get_name\\\",\\n    \\\"audio_get_recorder_count\\\",\\n    \\\"audio_get_recorder_info\\\",\\n    \\\"audio_get_type\\\",\\n    \\\"audio_group_is_loaded\\\",\\n    \\\"audio_group_load\\\",\\n    \\\"audio_group_load_progress\\\",\\n    \\\"audio_group_name\\\",\\n    \\\"audio_group_set_gain\\\",\\n    \\\"audio_group_stop_all\\\",\\n    \\\"audio_group_unload\\\",\\n    \\\"audio_is_paused\\\",\\n    \\\"audio_is_playing\\\",\\n    \\\"audio_listener_get_data\\\",\\n    \\\"audio_listener_orientation\\\",\\n    \\\"audio_listener_position\\\",\\n    \\\"audio_listener_set_orientation\\\",\\n    \\\"audio_listener_set_position\\\",\\n    \\\"audio_listener_set_velocity\\\",\\n    \\\"audio_listener_velocity\\\",\\n    \\\"audio_master_gain\\\",\\n    \\\"audio_music_gain\\\",\\n    \\\"audio_music_is_playing\\\",\\n    \\\"audio_pause_all\\\",\\n    \\\"audio_pause_music\\\",\\n    \\\"audio_pause_sound\\\",\\n    \\\"audio_pause_sync_group\\\",\\n    \\\"audio_play_in_sync_group\\\",\\n    \\\"audio_play_music\\\",\\n    \\\"audio_play_sound\\\",\\n    \\\"audio_play_sound_at\\\",\\n    \\\"audio_play_sound_on\\\",\\n    \\\"audio_queue_sound\\\",\\n    \\\"audio_resume_all\\\",\\n    \\\"audio_resume_music\\\",\\n    \\\"audio_resume_sound\\\",\\n    \\\"audio_resume_sync_group\\\",\\n    \\\"audio_set_listener_mask\\\",\\n    \\\"audio_set_master_gain\\\",\\n    \\\"audio_sound_gain\\\",\\n    \\\"audio_sound_get_gain\\\",\\n    \\\"audio_sound_get_listener_mask\\\",\\n    \\\"audio_sound_get_pitch\\\",\\n    \\\"audio_sound_get_track_position\\\",\\n    \\\"audio_sound_length\\\",\\n    \\\"audio_sound_pitch\\\",\\n    \\\"audio_sound_set_listener_mask\\\",\\n    \\\"audio_sound_set_track_position\\\",\\n    \\\"audio_start_recording\\\",\\n    \\\"audio_start_sync_group\\\",\\n    \\\"audio_stop_all\\\",\\n    \\\"audio_stop_music\\\",\\n    \\\"audio_stop_recording\\\",\\n    \\\"audio_stop_sound\\\",\\n    \\\"audio_stop_sync_group\\\",\\n    \\\"audio_sync_group_debug\\\",\\n    \\\"audio_sync_group_get_track_pos\\\",\\n    \\\"audio_sync_group_is_playing\\\",\\n    \\\"audio_system\\\",\\n    \\\"background_get_height\\\",\\n    \\\"background_get_width\\\",\\n    \\\"base64_decode\\\",\\n    \\\"base64_encode\\\",\\n    \\\"browser_input_capture\\\",\\n    \\\"buffer_async_group_begin\\\",\\n    \\\"buffer_async_group_end\\\",\\n    \\\"buffer_async_group_option\\\",\\n    \\\"buffer_base64_decode\\\",\\n    \\\"buffer_base64_decode_ext\\\",\\n    \\\"buffer_base64_encode\\\",\\n    \\\"buffer_copy\\\",\\n    \\\"buffer_copy_from_vertex_buffer\\\",\\n    \\\"buffer_create\\\",\\n    \\\"buffer_create_from_vertex_buffer\\\",\\n    \\\"buffer_create_from_vertex_buffer_ext\\\",\\n    \\\"buffer_delete\\\",\\n    \\\"buffer_exists\\\",\\n    \\\"buffer_fill\\\",\\n    \\\"buffer_get_address\\\",\\n    \\\"buffer_get_alignment\\\",\\n    \\\"buffer_get_size\\\",\\n    \\\"buffer_get_surface\\\",\\n    \\\"buffer_get_type\\\",\\n    \\\"buffer_load\\\",\\n    \\\"buffer_load_async\\\",\\n    \\\"buffer_load_ext\\\",\\n    \\\"buffer_load_partial\\\",\\n    \\\"buffer_md5\\\",\\n    \\\"buffer_peek\\\",\\n    \\\"buffer_poke\\\",\\n    \\\"buffer_read\\\",\\n    \\\"buffer_resize\\\",\\n    \\\"buffer_save\\\",\\n    \\\"buffer_save_async\\\",\\n    \\\"buffer_save_ext\\\",\\n    \\\"buffer_seek\\\",\\n    \\\"buffer_set_surface\\\",\\n    \\\"buffer_sha1\\\",\\n    \\\"buffer_sizeof\\\",\\n    \\\"buffer_tell\\\",\\n    \\\"buffer_write\\\",\\n    \\\"camera_apply\\\",\\n    \\\"camera_create\\\",\\n    \\\"camera_create_view\\\",\\n    \\\"camera_destroy\\\",\\n    \\\"camera_get_active\\\",\\n    \\\"camera_get_begin_script\\\",\\n    \\\"camera_get_default\\\",\\n    \\\"camera_get_end_script\\\",\\n    \\\"camera_get_proj_mat\\\",\\n    \\\"camera_get_update_script\\\",\\n    \\\"camera_get_view_angle\\\",\\n    \\\"camera_get_view_border_x\\\",\\n    \\\"camera_get_view_border_y\\\",\\n    \\\"camera_get_view_height\\\",\\n    \\\"camera_get_view_mat\\\",\\n    \\\"camera_get_view_speed_x\\\",\\n    \\\"camera_get_view_speed_y\\\",\\n    \\\"camera_get_view_target\\\",\\n    \\\"camera_get_view_width\\\",\\n    \\\"camera_get_view_x\\\",\\n    \\\"camera_get_view_y\\\",\\n    \\\"camera_set_begin_script\\\",\\n    \\\"camera_set_default\\\",\\n    \\\"camera_set_end_script\\\",\\n    \\\"camera_set_proj_mat\\\",\\n    \\\"camera_set_update_script\\\",\\n    \\\"camera_set_view_angle\\\",\\n    \\\"camera_set_view_border\\\",\\n    \\\"camera_set_view_mat\\\",\\n    \\\"camera_set_view_pos\\\",\\n    \\\"camera_set_view_size\\\",\\n    \\\"camera_set_view_speed\\\",\\n    \\\"camera_set_view_target\\\",\\n    \\\"ceil\\\",\\n    \\\"choose\\\",\\n    \\\"chr\\\",\\n    \\\"clamp\\\",\\n    \\\"clickable_add\\\",\\n    \\\"clickable_add_ext\\\",\\n    \\\"clickable_change\\\",\\n    \\\"clickable_change_ext\\\",\\n    \\\"clickable_delete\\\",\\n    \\\"clickable_exists\\\",\\n    \\\"clickable_set_style\\\",\\n    \\\"clipboard_get_text\\\",\\n    \\\"clipboard_has_text\\\",\\n    \\\"clipboard_set_text\\\",\\n    \\\"cloud_file_save\\\",\\n    \\\"cloud_string_save\\\",\\n    \\\"cloud_synchronise\\\",\\n    \\\"code_is_compiled\\\",\\n    \\\"collision_circle\\\",\\n    \\\"collision_circle_list\\\",\\n    \\\"collision_ellipse\\\",\\n    \\\"collision_ellipse_list\\\",\\n    \\\"collision_line\\\",\\n    \\\"collision_line_list\\\",\\n    \\\"collision_point\\\",\\n    \\\"collision_point_list\\\",\\n    \\\"collision_rectangle\\\",\\n    \\\"collision_rectangle_list\\\",\\n    \\\"color_get_blue\\\",\\n    \\\"color_get_green\\\",\\n    \\\"color_get_hue\\\",\\n    \\\"color_get_red\\\",\\n    \\\"color_get_saturation\\\",\\n    \\\"color_get_value\\\",\\n    \\\"colour_get_blue\\\",\\n    \\\"colour_get_green\\\",\\n    \\\"colour_get_hue\\\",\\n    \\\"colour_get_red\\\",\\n    \\\"colour_get_saturation\\\",\\n    \\\"colour_get_value\\\",\\n    \\\"cos\\\",\\n    \\\"darccos\\\",\\n    \\\"darcsin\\\",\\n    \\\"darctan\\\",\\n    \\\"darctan2\\\",\\n    \\\"date_compare_date\\\",\\n    \\\"date_compare_datetime\\\",\\n    \\\"date_compare_time\\\",\\n    \\\"date_create_datetime\\\",\\n    \\\"date_current_datetime\\\",\\n    \\\"date_date_of\\\",\\n    \\\"date_date_string\\\",\\n    \\\"date_datetime_string\\\",\\n    \\\"date_day_span\\\",\\n    \\\"date_days_in_month\\\",\\n    \\\"date_days_in_year\\\",\\n    \\\"date_get_day\\\",\\n    \\\"date_get_day_of_year\\\",\\n    \\\"date_get_hour\\\",\\n    \\\"date_get_hour_of_year\\\",\\n    \\\"date_get_minute\\\",\\n    \\\"date_get_minute_of_year\\\",\\n    \\\"date_get_month\\\",\\n    \\\"date_get_second\\\",\\n    \\\"date_get_second_of_year\\\",\\n    \\\"date_get_timezone\\\",\\n    \\\"date_get_week\\\",\\n    \\\"date_get_weekday\\\",\\n    \\\"date_get_year\\\",\\n    \\\"date_hour_span\\\",\\n    \\\"date_inc_day\\\",\\n    \\\"date_inc_hour\\\",\\n    \\\"date_inc_minute\\\",\\n    \\\"date_inc_month\\\",\\n    \\\"date_inc_second\\\",\\n    \\\"date_inc_week\\\",\\n    \\\"date_inc_year\\\",\\n    \\\"date_is_today\\\",\\n    \\\"date_leap_year\\\",\\n    \\\"date_minute_span\\\",\\n    \\\"date_month_span\\\",\\n    \\\"date_second_span\\\",\\n    \\\"date_set_timezone\\\",\\n    \\\"date_time_of\\\",\\n    \\\"date_time_string\\\",\\n    \\\"date_valid_datetime\\\",\\n    \\\"date_week_span\\\",\\n    \\\"date_year_span\\\",\\n    \\\"dcos\\\",\\n    \\\"debug_event\\\",\\n    \\\"debug_get_callstack\\\",\\n    \\\"degtorad\\\",\\n    \\\"device_get_tilt_x\\\",\\n    \\\"device_get_tilt_y\\\",\\n    \\\"device_get_tilt_z\\\",\\n    \\\"device_is_keypad_open\\\",\\n    \\\"device_mouse_check_button\\\",\\n    \\\"device_mouse_check_button_pressed\\\",\\n    \\\"device_mouse_check_button_released\\\",\\n    \\\"device_mouse_dbclick_enable\\\",\\n    \\\"device_mouse_raw_x\\\",\\n    \\\"device_mouse_raw_y\\\",\\n    \\\"device_mouse_x\\\",\\n    \\\"device_mouse_x_to_gui\\\",\\n    \\\"device_mouse_y\\\",\\n    \\\"device_mouse_y_to_gui\\\",\\n    \\\"directory_create\\\",\\n    \\\"directory_destroy\\\",\\n    \\\"directory_exists\\\",\\n    \\\"display_get_dpi_x\\\",\\n    \\\"display_get_dpi_y\\\",\\n    \\\"display_get_gui_height\\\",\\n    \\\"display_get_gui_width\\\",\\n    \\\"display_get_height\\\",\\n    \\\"display_get_orientation\\\",\\n    \\\"display_get_sleep_margin\\\",\\n    \\\"display_get_timing_method\\\",\\n    \\\"display_get_width\\\",\\n    \\\"display_mouse_get_x\\\",\\n    \\\"display_mouse_get_y\\\",\\n    \\\"display_mouse_set\\\",\\n    \\\"display_reset\\\",\\n    \\\"display_set_gui_maximise\\\",\\n    \\\"display_set_gui_maximize\\\",\\n    \\\"display_set_gui_size\\\",\\n    \\\"display_set_sleep_margin\\\",\\n    \\\"display_set_timing_method\\\",\\n    \\\"display_set_ui_visibility\\\",\\n    \\\"distance_to_object\\\",\\n    \\\"distance_to_point\\\",\\n    \\\"dot_product\\\",\\n    \\\"dot_product_3d\\\",\\n    \\\"dot_product_3d_normalised\\\",\\n    \\\"dot_product_3d_normalized\\\",\\n    \\\"dot_product_normalised\\\",\\n    \\\"dot_product_normalized\\\",\\n    \\\"draw_arrow\\\",\\n    \\\"draw_background\\\",\\n    \\\"draw_background_ext\\\",\\n    \\\"draw_background_part_ext\\\",\\n    \\\"draw_background_tiled\\\",\\n    \\\"draw_button\\\",\\n    \\\"draw_circle\\\",\\n    \\\"draw_circle_color\\\",\\n    \\\"draw_circle_colour\\\",\\n    \\\"draw_clear\\\",\\n    \\\"draw_clear_alpha\\\",\\n    \\\"draw_ellipse\\\",\\n    \\\"draw_ellipse_color\\\",\\n    \\\"draw_ellipse_colour\\\",\\n    \\\"draw_enable_alphablend\\\",\\n    \\\"draw_enable_drawevent\\\",\\n    \\\"draw_enable_swf_aa\\\",\\n    \\\"draw_flush\\\",\\n    \\\"draw_get_alpha\\\",\\n    \\\"draw_get_color\\\",\\n    \\\"draw_get_colour\\\",\\n    \\\"draw_get_lighting\\\",\\n    \\\"draw_get_swf_aa_level\\\",\\n    \\\"draw_getpixel\\\",\\n    \\\"draw_getpixel_ext\\\",\\n    \\\"draw_healthbar\\\",\\n    \\\"draw_highscore\\\",\\n    \\\"draw_light_define_ambient\\\",\\n    \\\"draw_light_define_direction\\\",\\n    \\\"draw_light_define_point\\\",\\n    \\\"draw_light_enable\\\",\\n    \\\"draw_light_get\\\",\\n    \\\"draw_light_get_ambient\\\",\\n    \\\"draw_line\\\",\\n    \\\"draw_line_color\\\",\\n    \\\"draw_line_colour\\\",\\n    \\\"draw_line_width\\\",\\n    \\\"draw_line_width_color\\\",\\n    \\\"draw_line_width_colour\\\",\\n    \\\"draw_path\\\",\\n    \\\"draw_point\\\",\\n    \\\"draw_point_color\\\",\\n    \\\"draw_point_colour\\\",\\n    \\\"draw_primitive_begin\\\",\\n    \\\"draw_primitive_begin_texture\\\",\\n    \\\"draw_primitive_end\\\",\\n    \\\"draw_rectangle\\\",\\n    \\\"draw_rectangle_color\\\",\\n    \\\"draw_rectangle_colour\\\",\\n    \\\"draw_roundrect\\\",\\n    \\\"draw_roundrect_color\\\",\\n    \\\"draw_roundrect_color_ext\\\",\\n    \\\"draw_roundrect_colour\\\",\\n    \\\"draw_roundrect_colour_ext\\\",\\n    \\\"draw_roundrect_ext\\\",\\n    \\\"draw_self\\\",\\n    \\\"draw_set_alpha\\\",\\n    \\\"draw_set_alpha_test\\\",\\n    \\\"draw_set_alpha_test_ref_value\\\",\\n    \\\"draw_set_blend_mode\\\",\\n    \\\"draw_set_blend_mode_ext\\\",\\n    \\\"draw_set_circle_precision\\\",\\n    \\\"draw_set_color\\\",\\n    \\\"draw_set_color_write_enable\\\",\\n    \\\"draw_set_colour\\\",\\n    \\\"draw_set_font\\\",\\n    \\\"draw_set_halign\\\",\\n    \\\"draw_set_lighting\\\",\\n    \\\"draw_set_swf_aa_level\\\",\\n    \\\"draw_set_valign\\\",\\n    \\\"draw_skeleton\\\",\\n    \\\"draw_skeleton_collision\\\",\\n    \\\"draw_skeleton_instance\\\",\\n    \\\"draw_skeleton_time\\\",\\n    \\\"draw_sprite\\\",\\n    \\\"draw_sprite_ext\\\",\\n    \\\"draw_sprite_general\\\",\\n    \\\"draw_sprite_part\\\",\\n    \\\"draw_sprite_part_ext\\\",\\n    \\\"draw_sprite_pos\\\",\\n    \\\"draw_sprite_stretched\\\",\\n    \\\"draw_sprite_stretched_ext\\\",\\n    \\\"draw_sprite_tiled\\\",\\n    \\\"draw_sprite_tiled_ext\\\",\\n    \\\"draw_surface\\\",\\n    \\\"draw_surface_ext\\\",\\n    \\\"draw_surface_general\\\",\\n    \\\"draw_surface_part\\\",\\n    \\\"draw_surface_part_ext\\\",\\n    \\\"draw_surface_stretched\\\",\\n    \\\"draw_surface_stretched_ext\\\",\\n    \\\"draw_surface_tiled\\\",\\n    \\\"draw_surface_tiled_ext\\\",\\n    \\\"draw_text\\\",\\n    \\\"draw_text_color\\\",\\n    \\\"draw_text_colour\\\",\\n    \\\"draw_text_ext\\\",\\n    \\\"draw_text_ext_color\\\",\\n    \\\"draw_text_ext_colour\\\",\\n    \\\"draw_text_ext_transformed\\\",\\n    \\\"draw_text_ext_transformed_color\\\",\\n    \\\"draw_text_ext_transformed_colour\\\",\\n    \\\"draw_text_transformed\\\",\\n    \\\"draw_text_transformed_color\\\",\\n    \\\"draw_text_transformed_colour\\\",\\n    \\\"draw_texture_flush\\\",\\n    \\\"draw_tile\\\",\\n    \\\"draw_tilemap\\\",\\n    \\\"draw_triangle\\\",\\n    \\\"draw_triangle_color\\\",\\n    \\\"draw_triangle_colour\\\",\\n    \\\"draw_vertex\\\",\\n    \\\"draw_vertex_color\\\",\\n    \\\"draw_vertex_colour\\\",\\n    \\\"draw_vertex_texture\\\",\\n    \\\"draw_vertex_texture_color\\\",\\n    \\\"draw_vertex_texture_colour\\\",\\n    \\\"ds_exists\\\",\\n    \\\"ds_grid_add\\\",\\n    \\\"ds_grid_add_disk\\\",\\n    \\\"ds_grid_add_grid_region\\\",\\n    \\\"ds_grid_add_region\\\",\\n    \\\"ds_grid_clear\\\",\\n    \\\"ds_grid_copy\\\",\\n    \\\"ds_grid_create\\\",\\n    \\\"ds_grid_destroy\\\",\\n    \\\"ds_grid_get\\\",\\n    \\\"ds_grid_get_disk_max\\\",\\n    \\\"ds_grid_get_disk_mean\\\",\\n    \\\"ds_grid_get_disk_min\\\",\\n    \\\"ds_grid_get_disk_sum\\\",\\n    \\\"ds_grid_get_max\\\",\\n    \\\"ds_grid_get_mean\\\",\\n    \\\"ds_grid_get_min\\\",\\n    \\\"ds_grid_get_sum\\\",\\n    \\\"ds_grid_height\\\",\\n    \\\"ds_grid_multiply\\\",\\n    \\\"ds_grid_multiply_disk\\\",\\n    \\\"ds_grid_multiply_grid_region\\\",\\n    \\\"ds_grid_multiply_region\\\",\\n    \\\"ds_grid_read\\\",\\n    \\\"ds_grid_resize\\\",\\n    \\\"ds_grid_set\\\",\\n    \\\"ds_grid_set_disk\\\",\\n    \\\"ds_grid_set_grid_region\\\",\\n    \\\"ds_grid_set_region\\\",\\n    \\\"ds_grid_shuffle\\\",\\n    \\\"ds_grid_sort\\\",\\n    \\\"ds_grid_value_disk_exists\\\",\\n    \\\"ds_grid_value_disk_x\\\",\\n    \\\"ds_grid_value_disk_y\\\",\\n    \\\"ds_grid_value_exists\\\",\\n    \\\"ds_grid_value_x\\\",\\n    \\\"ds_grid_value_y\\\",\\n    \\\"ds_grid_width\\\",\\n    \\\"ds_grid_write\\\",\\n    \\\"ds_list_add\\\",\\n    \\\"ds_list_clear\\\",\\n    \\\"ds_list_copy\\\",\\n    \\\"ds_list_create\\\",\\n    \\\"ds_list_delete\\\",\\n    \\\"ds_list_destroy\\\",\\n    \\\"ds_list_empty\\\",\\n    \\\"ds_list_find_index\\\",\\n    \\\"ds_list_find_value\\\",\\n    \\\"ds_list_insert\\\",\\n    \\\"ds_list_mark_as_list\\\",\\n    \\\"ds_list_mark_as_map\\\",\\n    \\\"ds_list_read\\\",\\n    \\\"ds_list_replace\\\",\\n    \\\"ds_list_set\\\",\\n    \\\"ds_list_shuffle\\\",\\n    \\\"ds_list_size\\\",\\n    \\\"ds_list_sort\\\",\\n    \\\"ds_list_write\\\",\\n    \\\"ds_map_add\\\",\\n    \\\"ds_map_add_list\\\",\\n    \\\"ds_map_add_map\\\",\\n    \\\"ds_map_clear\\\",\\n    \\\"ds_map_copy\\\",\\n    \\\"ds_map_create\\\",\\n    \\\"ds_map_delete\\\",\\n    \\\"ds_map_destroy\\\",\\n    \\\"ds_map_empty\\\",\\n    \\\"ds_map_exists\\\",\\n    \\\"ds_map_find_first\\\",\\n    \\\"ds_map_find_last\\\",\\n    \\\"ds_map_find_next\\\",\\n    \\\"ds_map_find_previous\\\",\\n    \\\"ds_map_find_value\\\",\\n    \\\"ds_map_read\\\",\\n    \\\"ds_map_replace\\\",\\n    \\\"ds_map_replace_list\\\",\\n    \\\"ds_map_replace_map\\\",\\n    \\\"ds_map_secure_load\\\",\\n    \\\"ds_map_secure_load_buffer\\\",\\n    \\\"ds_map_secure_save\\\",\\n    \\\"ds_map_secure_save_buffer\\\",\\n    \\\"ds_map_set\\\",\\n    \\\"ds_map_size\\\",\\n    \\\"ds_map_write\\\",\\n    \\\"ds_priority_add\\\",\\n    \\\"ds_priority_change_priority\\\",\\n    \\\"ds_priority_clear\\\",\\n    \\\"ds_priority_copy\\\",\\n    \\\"ds_priority_create\\\",\\n    \\\"ds_priority_delete_max\\\",\\n    \\\"ds_priority_delete_min\\\",\\n    \\\"ds_priority_delete_value\\\",\\n    \\\"ds_priority_destroy\\\",\\n    \\\"ds_priority_empty\\\",\\n    \\\"ds_priority_find_max\\\",\\n    \\\"ds_priority_find_min\\\",\\n    \\\"ds_priority_find_priority\\\",\\n    \\\"ds_priority_read\\\",\\n    \\\"ds_priority_size\\\",\\n    \\\"ds_priority_write\\\",\\n    \\\"ds_queue_clear\\\",\\n    \\\"ds_queue_copy\\\",\\n    \\\"ds_queue_create\\\",\\n    \\\"ds_queue_dequeue\\\",\\n    \\\"ds_queue_destroy\\\",\\n    \\\"ds_queue_empty\\\",\\n    \\\"ds_queue_enqueue\\\",\\n    \\\"ds_queue_head\\\",\\n    \\\"ds_queue_read\\\",\\n    \\\"ds_queue_size\\\",\\n    \\\"ds_queue_tail\\\",\\n    \\\"ds_queue_write\\\",\\n    \\\"ds_set_precision\\\",\\n    \\\"ds_stack_clear\\\",\\n    \\\"ds_stack_copy\\\",\\n    \\\"ds_stack_create\\\",\\n    \\\"ds_stack_destroy\\\",\\n    \\\"ds_stack_empty\\\",\\n    \\\"ds_stack_pop\\\",\\n    \\\"ds_stack_push\\\",\\n    \\\"ds_stack_read\\\",\\n    \\\"ds_stack_size\\\",\\n    \\\"ds_stack_top\\\",\\n    \\\"ds_stack_write\\\",\\n    \\\"dsin\\\",\\n    \\\"dtan\\\",\\n    \\\"effect_clear\\\",\\n    \\\"effect_create_above\\\",\\n    \\\"effect_create_below\\\",\\n    \\\"environment_get_variable\\\",\\n    \\\"event_inherited\\\",\\n    \\\"event_perform\\\",\\n    \\\"event_perform_object\\\",\\n    \\\"event_user\\\",\\n    \\\"exp\\\",\\n    \\\"external_call\\\",\\n    \\\"external_define\\\",\\n    \\\"external_free\\\",\\n    \\\"facebook_accesstoken\\\",\\n    \\\"facebook_check_permission\\\",\\n    \\\"facebook_dialog\\\",\\n    \\\"facebook_graph_request\\\",\\n    \\\"facebook_init\\\",\\n    \\\"facebook_launch_offerwall\\\",\\n    \\\"facebook_login\\\",\\n    \\\"facebook_logout\\\",\\n    \\\"facebook_post_message\\\",\\n    \\\"facebook_request_publish_permissions\\\",\\n    \\\"facebook_request_read_permissions\\\",\\n    \\\"facebook_send_invite\\\",\\n    \\\"facebook_status\\\",\\n    \\\"facebook_user_id\\\",\\n    \\\"file_attributes\\\",\\n    \\\"file_bin_close\\\",\\n    \\\"file_bin_open\\\",\\n    \\\"file_bin_position\\\",\\n    \\\"file_bin_read_byte\\\",\\n    \\\"file_bin_rewrite\\\",\\n    \\\"file_bin_seek\\\",\\n    \\\"file_bin_size\\\",\\n    \\\"file_bin_write_byte\\\",\\n    \\\"file_copy\\\",\\n    \\\"file_delete\\\",\\n    \\\"file_exists\\\",\\n    \\\"file_find_close\\\",\\n    \\\"file_find_first\\\",\\n    \\\"file_find_next\\\",\\n    \\\"file_rename\\\",\\n    \\\"file_text_close\\\",\\n    \\\"file_text_eof\\\",\\n    \\\"file_text_eoln\\\",\\n    \\\"file_text_open_append\\\",\\n    \\\"file_text_open_from_string\\\",\\n    \\\"file_text_open_read\\\",\\n    \\\"file_text_open_write\\\",\\n    \\\"file_text_read_real\\\",\\n    \\\"file_text_read_string\\\",\\n    \\\"file_text_readln\\\",\\n    \\\"file_text_write_real\\\",\\n    \\\"file_text_write_string\\\",\\n    \\\"file_text_writeln\\\",\\n    \\\"filename_change_ext\\\",\\n    \\\"filename_dir\\\",\\n    \\\"filename_drive\\\",\\n    \\\"filename_ext\\\",\\n    \\\"filename_name\\\",\\n    \\\"filename_path\\\",\\n    \\\"floor\\\",\\n    \\\"font_add\\\",\\n    \\\"font_add_enable_aa\\\",\\n    \\\"font_add_get_enable_aa\\\",\\n    \\\"font_add_sprite\\\",\\n    \\\"font_add_sprite_ext\\\",\\n    \\\"font_delete\\\",\\n    \\\"font_exists\\\",\\n    \\\"font_get_bold\\\",\\n    \\\"font_get_first\\\",\\n    \\\"font_get_fontname\\\",\\n    \\\"font_get_italic\\\",\\n    \\\"font_get_last\\\",\\n    \\\"font_get_name\\\",\\n    \\\"font_get_size\\\",\\n    \\\"font_get_texture\\\",\\n    \\\"font_get_uvs\\\",\\n    \\\"font_replace\\\",\\n    \\\"font_replace_sprite\\\",\\n    \\\"font_replace_sprite_ext\\\",\\n    \\\"font_set_cache_size\\\",\\n    \\\"font_texture_page_size\\\",\\n    \\\"frac\\\",\\n    \\\"game_end\\\",\\n    \\\"game_get_speed\\\",\\n    \\\"game_load\\\",\\n    \\\"game_load_buffer\\\",\\n    \\\"game_restart\\\",\\n    \\\"game_save\\\",\\n    \\\"game_save_buffer\\\",\\n    \\\"game_set_speed\\\",\\n    \\\"gamepad_axis_count\\\",\\n    \\\"gamepad_axis_value\\\",\\n    \\\"gamepad_button_check\\\",\\n    \\\"gamepad_button_check_pressed\\\",\\n    \\\"gamepad_button_check_released\\\",\\n    \\\"gamepad_button_count\\\",\\n    \\\"gamepad_button_value\\\",\\n    \\\"gamepad_get_axis_deadzone\\\",\\n    \\\"gamepad_get_button_threshold\\\",\\n    \\\"gamepad_get_description\\\",\\n    \\\"gamepad_get_device_count\\\",\\n    \\\"gamepad_is_connected\\\",\\n    \\\"gamepad_is_supported\\\",\\n    \\\"gamepad_set_axis_deadzone\\\",\\n    \\\"gamepad_set_button_threshold\\\",\\n    \\\"gamepad_set_color\\\",\\n    \\\"gamepad_set_colour\\\",\\n    \\\"gamepad_set_vibration\\\",\\n    \\\"gesture_double_tap_distance\\\",\\n    \\\"gesture_double_tap_time\\\",\\n    \\\"gesture_drag_distance\\\",\\n    \\\"gesture_drag_time\\\",\\n    \\\"gesture_flick_speed\\\",\\n    \\\"gesture_get_double_tap_distance\\\",\\n    \\\"gesture_get_double_tap_time\\\",\\n    \\\"gesture_get_drag_distance\\\",\\n    \\\"gesture_get_drag_time\\\",\\n    \\\"gesture_get_flick_speed\\\",\\n    \\\"gesture_get_pinch_angle_away\\\",\\n    \\\"gesture_get_pinch_angle_towards\\\",\\n    \\\"gesture_get_pinch_distance\\\",\\n    \\\"gesture_get_rotate_angle\\\",\\n    \\\"gesture_get_rotate_time\\\",\\n    \\\"gesture_get_tap_count\\\",\\n    \\\"gesture_pinch_angle_away\\\",\\n    \\\"gesture_pinch_angle_towards\\\",\\n    \\\"gesture_pinch_distance\\\",\\n    \\\"gesture_rotate_angle\\\",\\n    \\\"gesture_rotate_time\\\",\\n    \\\"gesture_tap_count\\\",\\n    \\\"get_integer\\\",\\n    \\\"get_integer_async\\\",\\n    \\\"get_login_async\\\",\\n    \\\"get_open_filename\\\",\\n    \\\"get_open_filename_ext\\\",\\n    \\\"get_save_filename\\\",\\n    \\\"get_save_filename_ext\\\",\\n    \\\"get_string\\\",\\n    \\\"get_string_async\\\",\\n    \\\"get_timer\\\",\\n    \\\"gml_pragma\\\",\\n    \\\"gml_release_mode\\\",\\n    \\\"gpu_get_alphatestenable\\\",\\n    \\\"gpu_get_alphatestfunc\\\",\\n    \\\"gpu_get_alphatestref\\\",\\n    \\\"gpu_get_blendenable\\\",\\n    \\\"gpu_get_blendmode\\\",\\n    \\\"gpu_get_blendmode_dest\\\",\\n    \\\"gpu_get_blendmode_destalpha\\\",\\n    \\\"gpu_get_blendmode_ext\\\",\\n    \\\"gpu_get_blendmode_ext_sepalpha\\\",\\n    \\\"gpu_get_blendmode_src\\\",\\n    \\\"gpu_get_blendmode_srcalpha\\\",\\n    \\\"gpu_get_colorwriteenable\\\",\\n    \\\"gpu_get_colourwriteenable\\\",\\n    \\\"gpu_get_cullmode\\\",\\n    \\\"gpu_get_fog\\\",\\n    \\\"gpu_get_lightingenable\\\",\\n    \\\"gpu_get_state\\\",\\n    \\\"gpu_get_tex_filter\\\",\\n    \\\"gpu_get_tex_filter_ext\\\",\\n    \\\"gpu_get_tex_max_aniso\\\",\\n    \\\"gpu_get_tex_max_aniso_ext\\\",\\n    \\\"gpu_get_tex_max_mip\\\",\\n    \\\"gpu_get_tex_max_mip_ext\\\",\\n    \\\"gpu_get_tex_min_mip\\\",\\n    \\\"gpu_get_tex_min_mip_ext\\\",\\n    \\\"gpu_get_tex_mip_bias\\\",\\n    \\\"gpu_get_tex_mip_bias_ext\\\",\\n    \\\"gpu_get_tex_mip_enable\\\",\\n    \\\"gpu_get_tex_mip_enable_ext\\\",\\n    \\\"gpu_get_tex_mip_filter\\\",\\n    \\\"gpu_get_tex_mip_filter_ext\\\",\\n    \\\"gpu_get_tex_repeat\\\",\\n    \\\"gpu_get_tex_repeat_ext\\\",\\n    \\\"gpu_get_texfilter\\\",\\n    \\\"gpu_get_texfilter_ext\\\",\\n    \\\"gpu_get_texrepeat\\\",\\n    \\\"gpu_get_texrepeat_ext\\\",\\n    \\\"gpu_get_zfunc\\\",\\n    \\\"gpu_get_ztestenable\\\",\\n    \\\"gpu_get_zwriteenable\\\",\\n    \\\"gpu_pop_state\\\",\\n    \\\"gpu_push_state\\\",\\n    \\\"gpu_set_alphatestenable\\\",\\n    \\\"gpu_set_alphatestfunc\\\",\\n    \\\"gpu_set_alphatestref\\\",\\n    \\\"gpu_set_blendenable\\\",\\n    \\\"gpu_set_blendmode\\\",\\n    \\\"gpu_set_blendmode_ext\\\",\\n    \\\"gpu_set_blendmode_ext_sepalpha\\\",\\n    \\\"gpu_set_colorwriteenable\\\",\\n    \\\"gpu_set_colourwriteenable\\\",\\n    \\\"gpu_set_cullmode\\\",\\n    \\\"gpu_set_fog\\\",\\n    \\\"gpu_set_lightingenable\\\",\\n    \\\"gpu_set_state\\\",\\n    \\\"gpu_set_tex_filter\\\",\\n    \\\"gpu_set_tex_filter_ext\\\",\\n    \\\"gpu_set_tex_max_aniso\\\",\\n    \\\"gpu_set_tex_max_aniso_ext\\\",\\n    \\\"gpu_set_tex_max_mip\\\",\\n    \\\"gpu_set_tex_max_mip_ext\\\",\\n    \\\"gpu_set_tex_min_mip\\\",\\n    \\\"gpu_set_tex_min_mip_ext\\\",\\n    \\\"gpu_set_tex_mip_bias\\\",\\n    \\\"gpu_set_tex_mip_bias_ext\\\",\\n    \\\"gpu_set_tex_mip_enable\\\",\\n    \\\"gpu_set_tex_mip_enable_ext\\\",\\n    \\\"gpu_set_tex_mip_filter\\\",\\n    \\\"gpu_set_tex_mip_filter_ext\\\",\\n    \\\"gpu_set_tex_repeat\\\",\\n    \\\"gpu_set_tex_repeat_ext\\\",\\n    \\\"gpu_set_texfilter\\\",\\n    \\\"gpu_set_texfilter_ext\\\",\\n    \\\"gpu_set_texrepeat\\\",\\n    \\\"gpu_set_texrepeat_ext\\\",\\n    \\\"gpu_set_zfunc\\\",\\n    \\\"gpu_set_ztestenable\\\",\\n    \\\"gpu_set_zwriteenable\\\",\\n    \\\"highscore_add\\\",\\n    \\\"highscore_clear\\\",\\n    \\\"highscore_name\\\",\\n    \\\"highscore_value\\\",\\n    \\\"http_get\\\",\\n    \\\"http_get_file\\\",\\n    \\\"http_post_string\\\",\\n    \\\"http_request\\\",\\n    \\\"iap_acquire\\\",\\n    \\\"iap_activate\\\",\\n    \\\"iap_consume\\\",\\n    \\\"iap_enumerate_products\\\",\\n    \\\"iap_product_details\\\",\\n    \\\"iap_purchase_details\\\",\\n    \\\"iap_restore_all\\\",\\n    \\\"iap_status\\\",\\n    \\\"ini_close\\\",\\n    \\\"ini_key_delete\\\",\\n    \\\"ini_key_exists\\\",\\n    \\\"ini_open\\\",\\n    \\\"ini_open_from_string\\\",\\n    \\\"ini_read_real\\\",\\n    \\\"ini_read_string\\\",\\n    \\\"ini_section_delete\\\",\\n    \\\"ini_section_exists\\\",\\n    \\\"ini_write_real\\\",\\n    \\\"ini_write_string\\\",\\n    \\\"instance_activate_all\\\",\\n    \\\"instance_activate_layer\\\",\\n    \\\"instance_activate_object\\\",\\n    \\\"instance_activate_region\\\",\\n    \\\"instance_change\\\",\\n    \\\"instance_copy\\\",\\n    \\\"instance_create\\\",\\n    \\\"instance_create_depth\\\",\\n    \\\"instance_create_layer\\\",\\n    \\\"instance_deactivate_all\\\",\\n    \\\"instance_deactivate_layer\\\",\\n    \\\"instance_deactivate_object\\\",\\n    \\\"instance_deactivate_region\\\",\\n    \\\"instance_destroy\\\",\\n    \\\"instance_exists\\\",\\n    \\\"instance_find\\\",\\n    \\\"instance_furthest\\\",\\n    \\\"instance_id_get\\\",\\n    \\\"instance_nearest\\\",\\n    \\\"instance_number\\\",\\n    \\\"instance_place\\\",\\n    \\\"instance_place_list\\\",\\n    \\\"instance_position\\\",\\n    \\\"instance_position_list\\\",\\n    \\\"int64\\\",\\n    \\\"io_clear\\\",\\n    \\\"irandom\\\",\\n    \\\"irandom_range\\\",\\n    \\\"is_array\\\",\\n    \\\"is_bool\\\",\\n    \\\"is_infinity\\\",\\n    \\\"is_int32\\\",\\n    \\\"is_int64\\\",\\n    \\\"is_matrix\\\",\\n    \\\"is_method\\\",\\n    \\\"is_nan\\\",\\n    \\\"is_numeric\\\",\\n    \\\"is_ptr\\\",\\n    \\\"is_real\\\",\\n    \\\"is_string\\\",\\n    \\\"is_struct\\\",\\n    \\\"is_undefined\\\",\\n    \\\"is_vec3\\\",\\n    \\\"is_vec4\\\",\\n    \\\"json_decode\\\",\\n    \\\"json_encode\\\",\\n    \\\"keyboard_check\\\",\\n    \\\"keyboard_check_direct\\\",\\n    \\\"keyboard_check_pressed\\\",\\n    \\\"keyboard_check_released\\\",\\n    \\\"keyboard_clear\\\",\\n    \\\"keyboard_get_map\\\",\\n    \\\"keyboard_get_numlock\\\",\\n    \\\"keyboard_key_press\\\",\\n    \\\"keyboard_key_release\\\",\\n    \\\"keyboard_set_map\\\",\\n    \\\"keyboard_set_numlock\\\",\\n    \\\"keyboard_unset_map\\\",\\n    \\\"keyboard_virtual_height\\\",\\n    \\\"keyboard_virtual_hide\\\",\\n    \\\"keyboard_virtual_show\\\",\\n    \\\"keyboard_virtual_status\\\",\\n    \\\"layer_add_instance\\\",\\n    \\\"layer_background_alpha\\\",\\n    \\\"layer_background_blend\\\",\\n    \\\"layer_background_change\\\",\\n    \\\"layer_background_create\\\",\\n    \\\"layer_background_destroy\\\",\\n    \\\"layer_background_exists\\\",\\n    \\\"layer_background_get_alpha\\\",\\n    \\\"layer_background_get_blend\\\",\\n    \\\"layer_background_get_htiled\\\",\\n    \\\"layer_background_get_id\\\",\\n    \\\"layer_background_get_index\\\",\\n    \\\"layer_background_get_speed\\\",\\n    \\\"layer_background_get_sprite\\\",\\n    \\\"layer_background_get_stretch\\\",\\n    \\\"layer_background_get_visible\\\",\\n    \\\"layer_background_get_vtiled\\\",\\n    \\\"layer_background_get_xscale\\\",\\n    \\\"layer_background_get_yscale\\\",\\n    \\\"layer_background_htiled\\\",\\n    \\\"layer_background_index\\\",\\n    \\\"layer_background_speed\\\",\\n    \\\"layer_background_sprite\\\",\\n    \\\"layer_background_stretch\\\",\\n    \\\"layer_background_visible\\\",\\n    \\\"layer_background_vtiled\\\",\\n    \\\"layer_background_xscale\\\",\\n    \\\"layer_background_yscale\\\",\\n    \\\"layer_create\\\",\\n    \\\"layer_depth\\\",\\n    \\\"layer_destroy\\\",\\n    \\\"layer_destroy_instances\\\",\\n    \\\"layer_element_move\\\",\\n    \\\"layer_exists\\\",\\n    \\\"layer_force_draw_depth\\\",\\n    \\\"layer_get_all\\\",\\n    \\\"layer_get_all_elements\\\",\\n    \\\"layer_get_depth\\\",\\n    \\\"layer_get_element_layer\\\",\\n    \\\"layer_get_element_type\\\",\\n    \\\"layer_get_forced_depth\\\",\\n    \\\"layer_get_hspeed\\\",\\n    \\\"layer_get_id\\\",\\n    \\\"layer_get_id_at_depth\\\",\\n    \\\"layer_get_name\\\",\\n    \\\"layer_get_script_begin\\\",\\n    \\\"layer_get_script_end\\\",\\n    \\\"layer_get_shader\\\",\\n    \\\"layer_get_target_room\\\",\\n    \\\"layer_get_visible\\\",\\n    \\\"layer_get_vspeed\\\",\\n    \\\"layer_get_x\\\",\\n    \\\"layer_get_y\\\",\\n    \\\"layer_has_instance\\\",\\n    \\\"layer_hspeed\\\",\\n    \\\"layer_instance_get_instance\\\",\\n    \\\"layer_is_draw_depth_forced\\\",\\n    \\\"layer_reset_target_room\\\",\\n    \\\"layer_script_begin\\\",\\n    \\\"layer_script_end\\\",\\n    \\\"layer_set_target_room\\\",\\n    \\\"layer_set_visible\\\",\\n    \\\"layer_shader\\\",\\n    \\\"layer_sprite_alpha\\\",\\n    \\\"layer_sprite_angle\\\",\\n    \\\"layer_sprite_blend\\\",\\n    \\\"layer_sprite_change\\\",\\n    \\\"layer_sprite_create\\\",\\n    \\\"layer_sprite_destroy\\\",\\n    \\\"layer_sprite_exists\\\",\\n    \\\"layer_sprite_get_alpha\\\",\\n    \\\"layer_sprite_get_angle\\\",\\n    \\\"layer_sprite_get_blend\\\",\\n    \\\"layer_sprite_get_id\\\",\\n    \\\"layer_sprite_get_index\\\",\\n    \\\"layer_sprite_get_speed\\\",\\n    \\\"layer_sprite_get_sprite\\\",\\n    \\\"layer_sprite_get_x\\\",\\n    \\\"layer_sprite_get_xscale\\\",\\n    \\\"layer_sprite_get_y\\\",\\n    \\\"layer_sprite_get_yscale\\\",\\n    \\\"layer_sprite_index\\\",\\n    \\\"layer_sprite_speed\\\",\\n    \\\"layer_sprite_x\\\",\\n    \\\"layer_sprite_xscale\\\",\\n    \\\"layer_sprite_y\\\",\\n    \\\"layer_sprite_yscale\\\",\\n    \\\"layer_tile_alpha\\\",\\n    \\\"layer_tile_blend\\\",\\n    \\\"layer_tile_change\\\",\\n    \\\"layer_tile_create\\\",\\n    \\\"layer_tile_destroy\\\",\\n    \\\"layer_tile_exists\\\",\\n    \\\"layer_tile_get_alpha\\\",\\n    \\\"layer_tile_get_blend\\\",\\n    \\\"layer_tile_get_region\\\",\\n    \\\"layer_tile_get_sprite\\\",\\n    \\\"layer_tile_get_visible\\\",\\n    \\\"layer_tile_get_x\\\",\\n    \\\"layer_tile_get_xscale\\\",\\n    \\\"layer_tile_get_y\\\",\\n    \\\"layer_tile_get_yscale\\\",\\n    \\\"layer_tile_region\\\",\\n    \\\"layer_tile_visible\\\",\\n    \\\"layer_tile_x\\\",\\n    \\\"layer_tile_xscale\\\",\\n    \\\"layer_tile_y\\\",\\n    \\\"layer_tile_yscale\\\",\\n    \\\"layer_tilemap_create\\\",\\n    \\\"layer_tilemap_destroy\\\",\\n    \\\"layer_tilemap_exists\\\",\\n    \\\"layer_tilemap_get_id\\\",\\n    \\\"layer_vspeed\\\",\\n    \\\"layer_x\\\",\\n    \\\"layer_y\\\",\\n    \\\"lengthdir_x\\\",\\n    \\\"lengthdir_y\\\",\\n    \\\"lerp\\\",\\n    \\\"ln\\\",\\n    \\\"load_csv\\\",\\n    \\\"log10\\\",\\n    \\\"log2\\\",\\n    \\\"logn\\\",\\n    \\\"make_color_hsv\\\",\\n    \\\"make_color_rgb\\\",\\n    \\\"make_colour_hsv\\\",\\n    \\\"make_colour_rgb\\\",\\n    \\\"math_get_epsilon\\\",\\n    \\\"math_set_epsilon\\\",\\n    \\\"matrix_build\\\",\\n    \\\"matrix_build_identity\\\",\\n    \\\"matrix_build_lookat\\\",\\n    \\\"matrix_build_projection_ortho\\\",\\n    \\\"matrix_build_projection_perspective\\\",\\n    \\\"matrix_build_projection_perspective_fov\\\",\\n    \\\"matrix_get\\\",\\n    \\\"matrix_multiply\\\",\\n    \\\"matrix_set\\\",\\n    \\\"matrix_stack_clear\\\",\\n    \\\"matrix_stack_is_empty\\\",\\n    \\\"matrix_stack_multiply\\\",\\n    \\\"matrix_stack_pop\\\",\\n    \\\"matrix_stack_push\\\",\\n    \\\"matrix_stack_set\\\",\\n    \\\"matrix_stack_top\\\",\\n    \\\"matrix_transform_vertex\\\",\\n    \\\"max\\\",\\n    \\\"md5_file\\\",\\n    \\\"md5_string_unicode\\\",\\n    \\\"md5_string_utf8\\\",\\n    \\\"mean\\\",\\n    \\\"median\\\",\\n    \\\"merge_color\\\",\\n    \\\"merge_colour\\\",\\n    \\\"min\\\",\\n    \\\"motion_add\\\",\\n    \\\"motion_set\\\",\\n    \\\"mouse_check_button\\\",\\n    \\\"mouse_check_button_pressed\\\",\\n    \\\"mouse_check_button_released\\\",\\n    \\\"mouse_clear\\\",\\n    \\\"mouse_wheel_down\\\",\\n    \\\"mouse_wheel_up\\\",\\n    \\\"move_bounce_all\\\",\\n    \\\"move_bounce_solid\\\",\\n    \\\"move_contact_all\\\",\\n    \\\"move_contact_solid\\\",\\n    \\\"move_outside_all\\\",\\n    \\\"move_outside_solid\\\",\\n    \\\"move_random\\\",\\n    \\\"move_snap\\\",\\n    \\\"move_towards_point\\\",\\n    \\\"move_wrap\\\",\\n    \\\"mp_grid_add_cell\\\",\\n    \\\"mp_grid_add_instances\\\",\\n    \\\"mp_grid_add_rectangle\\\",\\n    \\\"mp_grid_clear_all\\\",\\n    \\\"mp_grid_clear_cell\\\",\\n    \\\"mp_grid_clear_rectangle\\\",\\n    \\\"mp_grid_create\\\",\\n    \\\"mp_grid_destroy\\\",\\n    \\\"mp_grid_draw\\\",\\n    \\\"mp_grid_get_cell\\\",\\n    \\\"mp_grid_path\\\",\\n    \\\"mp_grid_to_ds_grid\\\",\\n    \\\"mp_linear_path\\\",\\n    \\\"mp_linear_path_object\\\",\\n    \\\"mp_linear_step\\\",\\n    \\\"mp_linear_step_object\\\",\\n    \\\"mp_potential_path\\\",\\n    \\\"mp_potential_path_object\\\",\\n    \\\"mp_potential_settings\\\",\\n    \\\"mp_potential_step\\\",\\n    \\\"mp_potential_step_object\\\",\\n    \\\"network_connect\\\",\\n    \\\"network_connect_raw\\\",\\n    \\\"network_create_server\\\",\\n    \\\"network_create_server_raw\\\",\\n    \\\"network_create_socket\\\",\\n    \\\"network_create_socket_ext\\\",\\n    \\\"network_destroy\\\",\\n    \\\"network_resolve\\\",\\n    \\\"network_send_broadcast\\\",\\n    \\\"network_send_packet\\\",\\n    \\\"network_send_raw\\\",\\n    \\\"network_send_udp\\\",\\n    \\\"network_send_udp_raw\\\",\\n    \\\"network_set_config\\\",\\n    \\\"network_set_timeout\\\",\\n    \\\"object_exists\\\",\\n    \\\"object_get_depth\\\",\\n    \\\"object_get_mask\\\",\\n    \\\"object_get_name\\\",\\n    \\\"object_get_parent\\\",\\n    \\\"object_get_persistent\\\",\\n    \\\"object_get_physics\\\",\\n    \\\"object_get_solid\\\",\\n    \\\"object_get_sprite\\\",\\n    \\\"object_get_visible\\\",\\n    \\\"object_is_ancestor\\\",\\n    \\\"object_set_mask\\\",\\n    \\\"object_set_persistent\\\",\\n    \\\"object_set_solid\\\",\\n    \\\"object_set_sprite\\\",\\n    \\\"object_set_visible\\\",\\n    \\\"ord\\\",\\n    \\\"os_get_config\\\",\\n    \\\"os_get_info\\\",\\n    \\\"os_get_language\\\",\\n    \\\"os_get_region\\\",\\n    \\\"os_is_network_connected\\\",\\n    \\\"os_is_paused\\\",\\n    \\\"os_lock_orientation\\\",\\n    \\\"os_powersave_enable\\\",\\n    \\\"parameter_count\\\",\\n    \\\"parameter_string\\\",\\n    \\\"part_emitter_burst\\\",\\n    \\\"part_emitter_clear\\\",\\n    \\\"part_emitter_create\\\",\\n    \\\"part_emitter_destroy\\\",\\n    \\\"part_emitter_destroy_all\\\",\\n    \\\"part_emitter_exists\\\",\\n    \\\"part_emitter_region\\\",\\n    \\\"part_emitter_stream\\\",\\n    \\\"part_particles_clear\\\",\\n    \\\"part_particles_count\\\",\\n    \\\"part_particles_create\\\",\\n    \\\"part_particles_create_color\\\",\\n    \\\"part_particles_create_colour\\\",\\n    \\\"part_system_automatic_draw\\\",\\n    \\\"part_system_automatic_update\\\",\\n    \\\"part_system_clear\\\",\\n    \\\"part_system_create\\\",\\n    \\\"part_system_create_layer\\\",\\n    \\\"part_system_depth\\\",\\n    \\\"part_system_destroy\\\",\\n    \\\"part_system_draw_order\\\",\\n    \\\"part_system_drawit\\\",\\n    \\\"part_system_exists\\\",\\n    \\\"part_system_get_layer\\\",\\n    \\\"part_system_layer\\\",\\n    \\\"part_system_position\\\",\\n    \\\"part_system_update\\\",\\n    \\\"part_type_alpha1\\\",\\n    \\\"part_type_alpha2\\\",\\n    \\\"part_type_alpha3\\\",\\n    \\\"part_type_blend\\\",\\n    \\\"part_type_clear\\\",\\n    \\\"part_type_color1\\\",\\n    \\\"part_type_color2\\\",\\n    \\\"part_type_color3\\\",\\n    \\\"part_type_color_hsv\\\",\\n    \\\"part_type_color_mix\\\",\\n    \\\"part_type_color_rgb\\\",\\n    \\\"part_type_colour1\\\",\\n    \\\"part_type_colour2\\\",\\n    \\\"part_type_colour3\\\",\\n    \\\"part_type_colour_hsv\\\",\\n    \\\"part_type_colour_mix\\\",\\n    \\\"part_type_colour_rgb\\\",\\n    \\\"part_type_create\\\",\\n    \\\"part_type_death\\\",\\n    \\\"part_type_destroy\\\",\\n    \\\"part_type_direction\\\",\\n    \\\"part_type_exists\\\",\\n    \\\"part_type_gravity\\\",\\n    \\\"part_type_life\\\",\\n    \\\"part_type_orientation\\\",\\n    \\\"part_type_scale\\\",\\n    \\\"part_type_shape\\\",\\n    \\\"part_type_size\\\",\\n    \\\"part_type_speed\\\",\\n    \\\"part_type_sprite\\\",\\n    \\\"part_type_step\\\",\\n    \\\"path_add\\\",\\n    \\\"path_add_point\\\",\\n    \\\"path_append\\\",\\n    \\\"path_assign\\\",\\n    \\\"path_change_point\\\",\\n    \\\"path_clear_points\\\",\\n    \\\"path_delete\\\",\\n    \\\"path_delete_point\\\",\\n    \\\"path_duplicate\\\",\\n    \\\"path_end\\\",\\n    \\\"path_exists\\\",\\n    \\\"path_flip\\\",\\n    \\\"path_get_closed\\\",\\n    \\\"path_get_kind\\\",\\n    \\\"path_get_length\\\",\\n    \\\"path_get_name\\\",\\n    \\\"path_get_number\\\",\\n    \\\"path_get_point_speed\\\",\\n    \\\"path_get_point_x\\\",\\n    \\\"path_get_point_y\\\",\\n    \\\"path_get_precision\\\",\\n    \\\"path_get_speed\\\",\\n    \\\"path_get_time\\\",\\n    \\\"path_get_x\\\",\\n    \\\"path_get_y\\\",\\n    \\\"path_insert_point\\\",\\n    \\\"path_mirror\\\",\\n    \\\"path_rescale\\\",\\n    \\\"path_reverse\\\",\\n    \\\"path_rotate\\\",\\n    \\\"path_set_closed\\\",\\n    \\\"path_set_kind\\\",\\n    \\\"path_set_precision\\\",\\n    \\\"path_shift\\\",\\n    \\\"path_start\\\",\\n    \\\"physics_apply_angular_impulse\\\",\\n    \\\"physics_apply_force\\\",\\n    \\\"physics_apply_impulse\\\",\\n    \\\"physics_apply_local_force\\\",\\n    \\\"physics_apply_local_impulse\\\",\\n    \\\"physics_apply_torque\\\",\\n    \\\"physics_draw_debug\\\",\\n    \\\"physics_fixture_add_point\\\",\\n    \\\"physics_fixture_bind\\\",\\n    \\\"physics_fixture_bind_ext\\\",\\n    \\\"physics_fixture_create\\\",\\n    \\\"physics_fixture_delete\\\",\\n    \\\"physics_fixture_set_angular_damping\\\",\\n    \\\"physics_fixture_set_awake\\\",\\n    \\\"physics_fixture_set_box_shape\\\",\\n    \\\"physics_fixture_set_chain_shape\\\",\\n    \\\"physics_fixture_set_circle_shape\\\",\\n    \\\"physics_fixture_set_collision_group\\\",\\n    \\\"physics_fixture_set_density\\\",\\n    \\\"physics_fixture_set_edge_shape\\\",\\n    \\\"physics_fixture_set_friction\\\",\\n    \\\"physics_fixture_set_kinematic\\\",\\n    \\\"physics_fixture_set_linear_damping\\\",\\n    \\\"physics_fixture_set_polygon_shape\\\",\\n    \\\"physics_fixture_set_restitution\\\",\\n    \\\"physics_fixture_set_sensor\\\",\\n    \\\"physics_get_density\\\",\\n    \\\"physics_get_friction\\\",\\n    \\\"physics_get_restitution\\\",\\n    \\\"physics_joint_delete\\\",\\n    \\\"physics_joint_distance_create\\\",\\n    \\\"physics_joint_enable_motor\\\",\\n    \\\"physics_joint_friction_create\\\",\\n    \\\"physics_joint_gear_create\\\",\\n    \\\"physics_joint_get_value\\\",\\n    \\\"physics_joint_prismatic_create\\\",\\n    \\\"physics_joint_pulley_create\\\",\\n    \\\"physics_joint_revolute_create\\\",\\n    \\\"physics_joint_rope_create\\\",\\n    \\\"physics_joint_set_value\\\",\\n    \\\"physics_joint_weld_create\\\",\\n    \\\"physics_joint_wheel_create\\\",\\n    \\\"physics_mass_properties\\\",\\n    \\\"physics_particle_count\\\",\\n    \\\"physics_particle_create\\\",\\n    \\\"physics_particle_delete\\\",\\n    \\\"physics_particle_delete_region_box\\\",\\n    \\\"physics_particle_delete_region_circle\\\",\\n    \\\"physics_particle_delete_region_poly\\\",\\n    \\\"physics_particle_draw\\\",\\n    \\\"physics_particle_draw_ext\\\",\\n    \\\"physics_particle_get_damping\\\",\\n    \\\"physics_particle_get_data\\\",\\n    \\\"physics_particle_get_data_particle\\\",\\n    \\\"physics_particle_get_density\\\",\\n    \\\"physics_particle_get_gravity_scale\\\",\\n    \\\"physics_particle_get_group_flags\\\",\\n    \\\"physics_particle_get_max_count\\\",\\n    \\\"physics_particle_get_radius\\\",\\n    \\\"physics_particle_group_add_point\\\",\\n    \\\"physics_particle_group_begin\\\",\\n    \\\"physics_particle_group_box\\\",\\n    \\\"physics_particle_group_circle\\\",\\n    \\\"physics_particle_group_count\\\",\\n    \\\"physics_particle_group_delete\\\",\\n    \\\"physics_particle_group_end\\\",\\n    \\\"physics_particle_group_get_ang_vel\\\",\\n    \\\"physics_particle_group_get_angle\\\",\\n    \\\"physics_particle_group_get_centre_x\\\",\\n    \\\"physics_particle_group_get_centre_y\\\",\\n    \\\"physics_particle_group_get_data\\\",\\n    \\\"physics_particle_group_get_inertia\\\",\\n    \\\"physics_particle_group_get_mass\\\",\\n    \\\"physics_particle_group_get_vel_x\\\",\\n    \\\"physics_particle_group_get_vel_y\\\",\\n    \\\"physics_particle_group_get_x\\\",\\n    \\\"physics_particle_group_get_y\\\",\\n    \\\"physics_particle_group_join\\\",\\n    \\\"physics_particle_group_polygon\\\",\\n    \\\"physics_particle_set_category_flags\\\",\\n    \\\"physics_particle_set_damping\\\",\\n    \\\"physics_particle_set_density\\\",\\n    \\\"physics_particle_set_flags\\\",\\n    \\\"physics_particle_set_gravity_scale\\\",\\n    \\\"physics_particle_set_group_flags\\\",\\n    \\\"physics_particle_set_max_count\\\",\\n    \\\"physics_particle_set_radius\\\",\\n    \\\"physics_pause_enable\\\",\\n    \\\"physics_remove_fixture\\\",\\n    \\\"physics_set_density\\\",\\n    \\\"physics_set_friction\\\",\\n    \\\"physics_set_restitution\\\",\\n    \\\"physics_test_overlap\\\",\\n    \\\"physics_world_create\\\",\\n    \\\"physics_world_draw_debug\\\",\\n    \\\"physics_world_gravity\\\",\\n    \\\"physics_world_update_iterations\\\",\\n    \\\"physics_world_update_speed\\\",\\n    \\\"place_empty\\\",\\n    \\\"place_free\\\",\\n    \\\"place_meeting\\\",\\n    \\\"place_snapped\\\",\\n    \\\"point_direction\\\",\\n    \\\"point_distance\\\",\\n    \\\"point_distance_3d\\\",\\n    \\\"point_in_circle\\\",\\n    \\\"point_in_rectangle\\\",\\n    \\\"point_in_triangle\\\",\\n    \\\"position_change\\\",\\n    \\\"position_destroy\\\",\\n    \\\"position_empty\\\",\\n    \\\"position_meeting\\\",\\n    \\\"power\\\",\\n    \\\"ptr\\\",\\n    \\\"push_cancel_local_notification\\\",\\n    \\\"push_get_first_local_notification\\\",\\n    \\\"push_get_next_local_notification\\\",\\n    \\\"push_local_notification\\\",\\n    \\\"radtodeg\\\",\\n    \\\"random\\\",\\n    \\\"random_get_seed\\\",\\n    \\\"random_range\\\",\\n    \\\"random_set_seed\\\",\\n    \\\"randomise\\\",\\n    \\\"randomize\\\",\\n    \\\"real\\\",\\n    \\\"rectangle_in_circle\\\",\\n    \\\"rectangle_in_rectangle\\\",\\n    \\\"rectangle_in_triangle\\\",\\n    \\\"room_add\\\",\\n    \\\"room_assign\\\",\\n    \\\"room_duplicate\\\",\\n    \\\"room_exists\\\",\\n    \\\"room_get_camera\\\",\\n    \\\"room_get_name\\\",\\n    \\\"room_get_viewport\\\",\\n    \\\"room_goto\\\",\\n    \\\"room_goto_next\\\",\\n    \\\"room_goto_previous\\\",\\n    \\\"room_instance_add\\\",\\n    \\\"room_instance_clear\\\",\\n    \\\"room_next\\\",\\n    \\\"room_previous\\\",\\n    \\\"room_restart\\\",\\n    \\\"room_set_background_color\\\",\\n    \\\"room_set_background_colour\\\",\\n    \\\"room_set_camera\\\",\\n    \\\"room_set_height\\\",\\n    \\\"room_set_persistent\\\",\\n    \\\"room_set_view\\\",\\n    \\\"room_set_view_enabled\\\",\\n    \\\"room_set_viewport\\\",\\n    \\\"room_set_width\\\",\\n    \\\"round\\\",\\n    \\\"screen_save\\\",\\n    \\\"screen_save_part\\\",\\n    \\\"script_execute\\\",\\n    \\\"script_exists\\\",\\n    \\\"script_get_name\\\",\\n    \\\"sha1_file\\\",\\n    \\\"sha1_string_unicode\\\",\\n    \\\"sha1_string_utf8\\\",\\n    \\\"shader_current\\\",\\n    \\\"shader_enable_corner_id\\\",\\n    \\\"shader_get_name\\\",\\n    \\\"shader_get_sampler_index\\\",\\n    \\\"shader_get_uniform\\\",\\n    \\\"shader_is_compiled\\\",\\n    \\\"shader_reset\\\",\\n    \\\"shader_set\\\",\\n    \\\"shader_set_uniform_f\\\",\\n    \\\"shader_set_uniform_f_array\\\",\\n    \\\"shader_set_uniform_i\\\",\\n    \\\"shader_set_uniform_i_array\\\",\\n    \\\"shader_set_uniform_matrix\\\",\\n    \\\"shader_set_uniform_matrix_array\\\",\\n    \\\"shaders_are_supported\\\",\\n    \\\"shop_leave_rating\\\",\\n    \\\"show_debug_message\\\",\\n    \\\"show_debug_overlay\\\",\\n    \\\"show_error\\\",\\n    \\\"show_message\\\",\\n    \\\"show_message_async\\\",\\n    \\\"show_question\\\",\\n    \\\"show_question_async\\\",\\n    \\\"sign\\\",\\n    \\\"sin\\\",\\n    \\\"skeleton_animation_clear\\\",\\n    \\\"skeleton_animation_get\\\",\\n    \\\"skeleton_animation_get_duration\\\",\\n    \\\"skeleton_animation_get_ext\\\",\\n    \\\"skeleton_animation_get_frame\\\",\\n    \\\"skeleton_animation_get_frames\\\",\\n    \\\"skeleton_animation_list\\\",\\n    \\\"skeleton_animation_mix\\\",\\n    \\\"skeleton_animation_set\\\",\\n    \\\"skeleton_animation_set_ext\\\",\\n    \\\"skeleton_animation_set_frame\\\",\\n    \\\"skeleton_attachment_create\\\",\\n    \\\"skeleton_attachment_get\\\",\\n    \\\"skeleton_attachment_set\\\",\\n    \\\"skeleton_bone_data_get\\\",\\n    \\\"skeleton_bone_data_set\\\",\\n    \\\"skeleton_bone_state_get\\\",\\n    \\\"skeleton_bone_state_set\\\",\\n    \\\"skeleton_collision_draw_set\\\",\\n    \\\"skeleton_get_bounds\\\",\\n    \\\"skeleton_get_minmax\\\",\\n    \\\"skeleton_get_num_bounds\\\",\\n    \\\"skeleton_skin_get\\\",\\n    \\\"skeleton_skin_list\\\",\\n    \\\"skeleton_skin_set\\\",\\n    \\\"skeleton_slot_data\\\",\\n    \\\"sprite_add\\\",\\n    \\\"sprite_add_from_surface\\\",\\n    \\\"sprite_assign\\\",\\n    \\\"sprite_collision_mask\\\",\\n    \\\"sprite_create_from_surface\\\",\\n    \\\"sprite_delete\\\",\\n    \\\"sprite_duplicate\\\",\\n    \\\"sprite_exists\\\",\\n    \\\"sprite_flush\\\",\\n    \\\"sprite_flush_multi\\\",\\n    \\\"sprite_get_bbox_bottom\\\",\\n    \\\"sprite_get_bbox_left\\\",\\n    \\\"sprite_get_bbox_right\\\",\\n    \\\"sprite_get_bbox_top\\\",\\n    \\\"sprite_get_height\\\",\\n    \\\"sprite_get_name\\\",\\n    \\\"sprite_get_number\\\",\\n    \\\"sprite_get_speed\\\",\\n    \\\"sprite_get_speed_type\\\",\\n    \\\"sprite_get_texture\\\",\\n    \\\"sprite_get_tpe\\\",\\n    \\\"sprite_get_uvs\\\",\\n    \\\"sprite_get_width\\\",\\n    \\\"sprite_get_xoffset\\\",\\n    \\\"sprite_get_yoffset\\\",\\n    \\\"sprite_merge\\\",\\n    \\\"sprite_prefetch\\\",\\n    \\\"sprite_prefetch_multi\\\",\\n    \\\"sprite_replace\\\",\\n    \\\"sprite_save\\\",\\n    \\\"sprite_save_strip\\\",\\n    \\\"sprite_set_alpha_from_sprite\\\",\\n    \\\"sprite_set_cache_size\\\",\\n    \\\"sprite_set_cache_size_ext\\\",\\n    \\\"sprite_set_offset\\\",\\n    \\\"sprite_set_speed\\\",\\n    \\\"sqr\\\",\\n    \\\"sqrt\\\",\\n    \\\"steam_activate_overlay\\\",\\n    \\\"steam_activate_overlay_browser\\\",\\n    \\\"steam_activate_overlay_store\\\",\\n    \\\"steam_activate_overlay_user\\\",\\n    \\\"steam_available_languages\\\",\\n    \\\"steam_clear_achievement\\\",\\n    \\\"steam_create_leaderboard\\\",\\n    \\\"steam_current_game_language\\\",\\n    \\\"steam_download_friends_scores\\\",\\n    \\\"steam_download_scores\\\",\\n    \\\"steam_download_scores_around_user\\\",\\n    \\\"steam_file_delete\\\",\\n    \\\"steam_file_exists\\\",\\n    \\\"steam_file_persisted\\\",\\n    \\\"steam_file_read\\\",\\n    \\\"steam_file_share\\\",\\n    \\\"steam_file_size\\\",\\n    \\\"steam_file_write\\\",\\n    \\\"steam_file_write_file\\\",\\n    \\\"steam_get_achievement\\\",\\n    \\\"steam_get_app_id\\\",\\n    \\\"steam_get_persona_name\\\",\\n    \\\"steam_get_quota_free\\\",\\n    \\\"steam_get_quota_total\\\",\\n    \\\"steam_get_stat_avg_rate\\\",\\n    \\\"steam_get_stat_float\\\",\\n    \\\"steam_get_stat_int\\\",\\n    \\\"steam_get_user_account_id\\\",\\n    \\\"steam_get_user_persona_name\\\",\\n    \\\"steam_get_user_steam_id\\\",\\n    \\\"steam_initialised\\\",\\n    \\\"steam_is_cloud_enabled_for_account\\\",\\n    \\\"steam_is_cloud_enabled_for_app\\\",\\n    \\\"steam_is_overlay_activated\\\",\\n    \\\"steam_is_overlay_enabled\\\",\\n    \\\"steam_is_screenshot_requested\\\",\\n    \\\"steam_is_user_logged_on\\\",\\n    \\\"steam_reset_all_stats\\\",\\n    \\\"steam_reset_all_stats_achievements\\\",\\n    \\\"steam_send_screenshot\\\",\\n    \\\"steam_set_achievement\\\",\\n    \\\"steam_set_stat_avg_rate\\\",\\n    \\\"steam_set_stat_float\\\",\\n    \\\"steam_set_stat_int\\\",\\n    \\\"steam_stats_ready\\\",\\n    \\\"steam_ugc_create_item\\\",\\n    \\\"steam_ugc_create_query_all\\\",\\n    \\\"steam_ugc_create_query_all_ex\\\",\\n    \\\"steam_ugc_create_query_user\\\",\\n    \\\"steam_ugc_create_query_user_ex\\\",\\n    \\\"steam_ugc_download\\\",\\n    \\\"steam_ugc_get_item_install_info\\\",\\n    \\\"steam_ugc_get_item_update_info\\\",\\n    \\\"steam_ugc_get_item_update_progress\\\",\\n    \\\"steam_ugc_get_subscribed_items\\\",\\n    \\\"steam_ugc_num_subscribed_items\\\",\\n    \\\"steam_ugc_query_add_excluded_tag\\\",\\n    \\\"steam_ugc_query_add_required_tag\\\",\\n    \\\"steam_ugc_query_set_allow_cached_response\\\",\\n    \\\"steam_ugc_query_set_cloud_filename_filter\\\",\\n    \\\"steam_ugc_query_set_match_any_tag\\\",\\n    \\\"steam_ugc_query_set_ranked_by_trend_days\\\",\\n    \\\"steam_ugc_query_set_return_long_description\\\",\\n    \\\"steam_ugc_query_set_return_total_only\\\",\\n    \\\"steam_ugc_query_set_search_text\\\",\\n    \\\"steam_ugc_request_item_details\\\",\\n    \\\"steam_ugc_send_query\\\",\\n    \\\"steam_ugc_set_item_content\\\",\\n    \\\"steam_ugc_set_item_description\\\",\\n    \\\"steam_ugc_set_item_preview\\\",\\n    \\\"steam_ugc_set_item_tags\\\",\\n    \\\"steam_ugc_set_item_title\\\",\\n    \\\"steam_ugc_set_item_visibility\\\",\\n    \\\"steam_ugc_start_item_update\\\",\\n    \\\"steam_ugc_submit_item_update\\\",\\n    \\\"steam_ugc_subscribe_item\\\",\\n    \\\"steam_ugc_unsubscribe_item\\\",\\n    \\\"steam_upload_score\\\",\\n    \\\"steam_upload_score_buffer\\\",\\n    \\\"steam_upload_score_buffer_ext\\\",\\n    \\\"steam_upload_score_ext\\\",\\n    \\\"steam_user_installed_dlc\\\",\\n    \\\"steam_user_owns_dlc\\\",\\n    \\\"string\\\",\\n    \\\"string_byte_at\\\",\\n    \\\"string_byte_length\\\",\\n    \\\"string_char_at\\\",\\n    \\\"string_copy\\\",\\n    \\\"string_count\\\",\\n    \\\"string_delete\\\",\\n    \\\"string_digits\\\",\\n    \\\"string_format\\\",\\n    \\\"string_hash_to_newline\\\",\\n    \\\"string_height\\\",\\n    \\\"string_height_ext\\\",\\n    \\\"string_insert\\\",\\n    \\\"string_length\\\",\\n    \\\"string_letters\\\",\\n    \\\"string_lettersdigits\\\",\\n    \\\"string_lower\\\",\\n    \\\"string_ord_at\\\",\\n    \\\"string_pos\\\",\\n    \\\"string_repeat\\\",\\n    \\\"string_replace\\\",\\n    \\\"string_replace_all\\\",\\n    \\\"string_set_byte_at\\\",\\n    \\\"string_upper\\\",\\n    \\\"string_width\\\",\\n    \\\"string_width_ext\\\",\\n    \\\"surface_copy\\\",\\n    \\\"surface_copy_part\\\",\\n    \\\"surface_create\\\",\\n    \\\"surface_create_ext\\\",\\n    \\\"surface_depth_disable\\\",\\n    \\\"surface_exists\\\",\\n    \\\"surface_free\\\",\\n    \\\"surface_get_depth_disable\\\",\\n    \\\"surface_get_height\\\",\\n    \\\"surface_get_texture\\\",\\n    \\\"surface_get_width\\\",\\n    \\\"surface_getpixel\\\",\\n    \\\"surface_getpixel_ext\\\",\\n    \\\"surface_reset_target\\\",\\n    \\\"surface_resize\\\",\\n    \\\"surface_save\\\",\\n    \\\"surface_save_part\\\",\\n    \\\"surface_set_target\\\",\\n    \\\"surface_set_target_ext\\\",\\n    \\\"tan\\\",\\n    \\\"texture_get_height\\\",\\n    \\\"texture_get_texel_height\\\",\\n    \\\"texture_get_texel_width\\\",\\n    \\\"texture_get_uvs\\\",\\n    \\\"texture_get_width\\\",\\n    \\\"texture_global_scale\\\",\\n    \\\"texture_set_stage\\\",\\n    \\\"tile_get_empty\\\",\\n    \\\"tile_get_flip\\\",\\n    \\\"tile_get_index\\\",\\n    \\\"tile_get_mirror\\\",\\n    \\\"tile_get_rotate\\\",\\n    \\\"tile_set_empty\\\",\\n    \\\"tile_set_flip\\\",\\n    \\\"tile_set_index\\\",\\n    \\\"tile_set_mirror\\\",\\n    \\\"tile_set_rotate\\\",\\n    \\\"tilemap_clear\\\",\\n    \\\"tilemap_get\\\",\\n    \\\"tilemap_get_at_pixel\\\",\\n    \\\"tilemap_get_cell_x_at_pixel\\\",\\n    \\\"tilemap_get_cell_y_at_pixel\\\",\\n    \\\"tilemap_get_frame\\\",\\n    \\\"tilemap_get_global_mask\\\",\\n    \\\"tilemap_get_height\\\",\\n    \\\"tilemap_get_mask\\\",\\n    \\\"tilemap_get_tile_height\\\",\\n    \\\"tilemap_get_tile_width\\\",\\n    \\\"tilemap_get_tileset\\\",\\n    \\\"tilemap_get_width\\\",\\n    \\\"tilemap_get_x\\\",\\n    \\\"tilemap_get_y\\\",\\n    \\\"tilemap_set\\\",\\n    \\\"tilemap_set_at_pixel\\\",\\n    \\\"tilemap_set_global_mask\\\",\\n    \\\"tilemap_set_mask\\\",\\n    \\\"tilemap_tileset\\\",\\n    \\\"tilemap_x\\\",\\n    \\\"tilemap_y\\\",\\n    \\\"timeline_add\\\",\\n    \\\"timeline_clear\\\",\\n    \\\"timeline_delete\\\",\\n    \\\"timeline_exists\\\",\\n    \\\"timeline_get_name\\\",\\n    \\\"timeline_max_moment\\\",\\n    \\\"timeline_moment_add_script\\\",\\n    \\\"timeline_moment_clear\\\",\\n    \\\"timeline_size\\\",\\n    \\\"typeof\\\",\\n    \\\"url_get_domain\\\",\\n    \\\"url_open\\\",\\n    \\\"url_open_ext\\\",\\n    \\\"url_open_full\\\",\\n    \\\"variable_global_exists\\\",\\n    \\\"variable_global_get\\\",\\n    \\\"variable_global_set\\\",\\n    \\\"variable_instance_exists\\\",\\n    \\\"variable_instance_get\\\",\\n    \\\"variable_instance_get_names\\\",\\n    \\\"variable_instance_set\\\",\\n    \\\"variable_struct_exists\\\",\\n    \\\"variable_struct_get\\\",\\n    \\\"variable_struct_get_names\\\",\\n    \\\"variable_struct_names_count\\\",\\n    \\\"variable_struct_remove\\\",\\n    \\\"variable_struct_set\\\",\\n    \\\"vertex_argb\\\",\\n    \\\"vertex_begin\\\",\\n    \\\"vertex_color\\\",\\n    \\\"vertex_colour\\\",\\n    \\\"vertex_create_buffer\\\",\\n    \\\"vertex_create_buffer_ext\\\",\\n    \\\"vertex_create_buffer_from_buffer\\\",\\n    \\\"vertex_create_buffer_from_buffer_ext\\\",\\n    \\\"vertex_delete_buffer\\\",\\n    \\\"vertex_end\\\",\\n    \\\"vertex_float1\\\",\\n    \\\"vertex_float2\\\",\\n    \\\"vertex_float3\\\",\\n    \\\"vertex_float4\\\",\\n    \\\"vertex_format_add_color\\\",\\n    \\\"vertex_format_add_colour\\\",\\n    \\\"vertex_format_add_custom\\\",\\n    \\\"vertex_format_add_normal\\\",\\n    \\\"vertex_format_add_position\\\",\\n    \\\"vertex_format_add_position_3d\\\",\\n    \\\"vertex_format_add_texcoord\\\",\\n    \\\"vertex_format_add_textcoord\\\",\\n    \\\"vertex_format_begin\\\",\\n    \\\"vertex_format_delete\\\",\\n    \\\"vertex_format_end\\\",\\n    \\\"vertex_freeze\\\",\\n    \\\"vertex_get_buffer_size\\\",\\n    \\\"vertex_get_number\\\",\\n    \\\"vertex_normal\\\",\\n    \\\"vertex_position\\\",\\n    \\\"vertex_position_3d\\\",\\n    \\\"vertex_submit\\\",\\n    \\\"vertex_texcoord\\\",\\n    \\\"vertex_ubyte4\\\",\\n    \\\"view_get_camera\\\",\\n    \\\"view_get_hport\\\",\\n    \\\"view_get_surface_id\\\",\\n    \\\"view_get_visible\\\",\\n    \\\"view_get_wport\\\",\\n    \\\"view_get_xport\\\",\\n    \\\"view_get_yport\\\",\\n    \\\"view_set_camera\\\",\\n    \\\"view_set_hport\\\",\\n    \\\"view_set_surface_id\\\",\\n    \\\"view_set_visible\\\",\\n    \\\"view_set_wport\\\",\\n    \\\"view_set_xport\\\",\\n    \\\"view_set_yport\\\",\\n    \\\"virtual_key_add\\\",\\n    \\\"virtual_key_delete\\\",\\n    \\\"virtual_key_hide\\\",\\n    \\\"virtual_key_show\\\",\\n    \\\"win8_appbar_add_element\\\",\\n    \\\"win8_appbar_enable\\\",\\n    \\\"win8_appbar_remove_element\\\",\\n    \\\"win8_device_touchscreen_available\\\",\\n    \\\"win8_license_initialize_sandbox\\\",\\n    \\\"win8_license_trial_version\\\",\\n    \\\"win8_livetile_badge_clear\\\",\\n    \\\"win8_livetile_badge_notification\\\",\\n    \\\"win8_livetile_notification_begin\\\",\\n    \\\"win8_livetile_notification_end\\\",\\n    \\\"win8_livetile_notification_expiry\\\",\\n    \\\"win8_livetile_notification_image_add\\\",\\n    \\\"win8_livetile_notification_secondary_begin\\\",\\n    \\\"win8_livetile_notification_tag\\\",\\n    \\\"win8_livetile_notification_text_add\\\",\\n    \\\"win8_livetile_queue_enable\\\",\\n    \\\"win8_livetile_tile_clear\\\",\\n    \\\"win8_livetile_tile_notification\\\",\\n    \\\"win8_search_add_suggestions\\\",\\n    \\\"win8_search_disable\\\",\\n    \\\"win8_search_enable\\\",\\n    \\\"win8_secondarytile_badge_notification\\\",\\n    \\\"win8_secondarytile_delete\\\",\\n    \\\"win8_secondarytile_pin\\\",\\n    \\\"win8_settingscharm_add_entry\\\",\\n    \\\"win8_settingscharm_add_html_entry\\\",\\n    \\\"win8_settingscharm_add_xaml_entry\\\",\\n    \\\"win8_settingscharm_get_xaml_property\\\",\\n    \\\"win8_settingscharm_remove_entry\\\",\\n    \\\"win8_settingscharm_set_xaml_property\\\",\\n    \\\"win8_share_file\\\",\\n    \\\"win8_share_image\\\",\\n    \\\"win8_share_screenshot\\\",\\n    \\\"win8_share_text\\\",\\n    \\\"win8_share_url\\\",\\n    \\\"window_center\\\",\\n    \\\"window_device\\\",\\n    \\\"window_get_caption\\\",\\n    \\\"window_get_color\\\",\\n    \\\"window_get_colour\\\",\\n    \\\"window_get_cursor\\\",\\n    \\\"window_get_fullscreen\\\",\\n    \\\"window_get_height\\\",\\n    \\\"window_get_visible_rects\\\",\\n    \\\"window_get_width\\\",\\n    \\\"window_get_x\\\",\\n    \\\"window_get_y\\\",\\n    \\\"window_handle\\\",\\n    \\\"window_has_focus\\\",\\n    \\\"window_mouse_get_x\\\",\\n    \\\"window_mouse_get_y\\\",\\n    \\\"window_mouse_set\\\",\\n    \\\"window_set_caption\\\",\\n    \\\"window_set_color\\\",\\n    \\\"window_set_colour\\\",\\n    \\\"window_set_cursor\\\",\\n    \\\"window_set_fullscreen\\\",\\n    \\\"window_set_max_height\\\",\\n    \\\"window_set_max_width\\\",\\n    \\\"window_set_min_height\\\",\\n    \\\"window_set_min_width\\\",\\n    \\\"window_set_position\\\",\\n    \\\"window_set_rectangle\\\",\\n    \\\"window_set_size\\\",\\n    \\\"window_view_mouse_get_x\\\",\\n    \\\"window_view_mouse_get_y\\\",\\n    \\\"window_views_mouse_get_x\\\",\\n    \\\"window_views_mouse_get_y\\\",\\n    \\\"winphone_license_trial_version\\\",\\n    \\\"winphone_tile_back_content\\\",\\n    \\\"winphone_tile_back_content_wide\\\",\\n    \\\"winphone_tile_back_image\\\",\\n    \\\"winphone_tile_back_image_wide\\\",\\n    \\\"winphone_tile_back_title\\\",\\n    \\\"winphone_tile_background_color\\\",\\n    \\\"winphone_tile_background_colour\\\",\\n    \\\"winphone_tile_count\\\",\\n    \\\"winphone_tile_cycle_images\\\",\\n    \\\"winphone_tile_front_image\\\",\\n    \\\"winphone_tile_front_image_small\\\",\\n    \\\"winphone_tile_front_image_wide\\\",\\n    \\\"winphone_tile_icon_image\\\",\\n    \\\"winphone_tile_small_background_image\\\",\\n    \\\"winphone_tile_small_icon_image\\\",\\n    \\\"winphone_tile_title\\\",\\n    \\\"winphone_tile_wide_content\\\",\\n    \\\"zip_unzip\\\"\\n  ];\\n  const LITERALS = [\\n    \\\"all\\\",\\n    \\\"false\\\",\\n    \\\"noone\\\",\\n    \\\"pointer_invalid\\\",\\n    \\\"pointer_null\\\",\\n    \\\"true\\\",\\n    \\\"undefined\\\"\\n  ];\\n  // many of these look like enumerables to me (see comments below)\\n  const SYMBOLS = [\\n    \\\"ANSI_CHARSET\\\",\\n    \\\"ARABIC_CHARSET\\\",\\n    \\\"BALTIC_CHARSET\\\",\\n    \\\"CHINESEBIG5_CHARSET\\\",\\n    \\\"DEFAULT_CHARSET\\\",\\n    \\\"EASTEUROPE_CHARSET\\\",\\n    \\\"GB2312_CHARSET\\\",\\n    \\\"GM_build_date\\\",\\n    \\\"GM_runtime_version\\\",\\n    \\\"GM_version\\\",\\n    \\\"GREEK_CHARSET\\\",\\n    \\\"HANGEUL_CHARSET\\\",\\n    \\\"HEBREW_CHARSET\\\",\\n    \\\"JOHAB_CHARSET\\\",\\n    \\\"MAC_CHARSET\\\",\\n    \\\"OEM_CHARSET\\\",\\n    \\\"RUSSIAN_CHARSET\\\",\\n    \\\"SHIFTJIS_CHARSET\\\",\\n    \\\"SYMBOL_CHARSET\\\",\\n    \\\"THAI_CHARSET\\\",\\n    \\\"TURKISH_CHARSET\\\",\\n    \\\"VIETNAMESE_CHARSET\\\",\\n    \\\"achievement_achievement_info\\\",\\n    \\\"achievement_filter_all_players\\\",\\n    \\\"achievement_filter_favorites_only\\\",\\n    \\\"achievement_filter_friends_only\\\",\\n    \\\"achievement_friends_info\\\",\\n    \\\"achievement_leaderboard_info\\\",\\n    \\\"achievement_our_info\\\",\\n    \\\"achievement_pic_loaded\\\",\\n    \\\"achievement_show_achievement\\\",\\n    \\\"achievement_show_bank\\\",\\n    \\\"achievement_show_friend_picker\\\",\\n    \\\"achievement_show_leaderboard\\\",\\n    \\\"achievement_show_profile\\\",\\n    \\\"achievement_show_purchase_prompt\\\",\\n    \\\"achievement_show_ui\\\",\\n    \\\"achievement_type_achievement_challenge\\\",\\n    \\\"achievement_type_score_challenge\\\",\\n    \\\"asset_font\\\",\\n    \\\"asset_object\\\",\\n    \\\"asset_path\\\",\\n    \\\"asset_room\\\",\\n    \\\"asset_script\\\",\\n    \\\"asset_shader\\\",\\n    \\\"asset_sound\\\",\\n    \\\"asset_sprite\\\",\\n    \\\"asset_tiles\\\",\\n    \\\"asset_timeline\\\",\\n    \\\"asset_unknown\\\",\\n    \\\"audio_3d\\\",\\n    \\\"audio_falloff_exponent_distance\\\",\\n    \\\"audio_falloff_exponent_distance_clamped\\\",\\n    \\\"audio_falloff_inverse_distance\\\",\\n    \\\"audio_falloff_inverse_distance_clamped\\\",\\n    \\\"audio_falloff_linear_distance\\\",\\n    \\\"audio_falloff_linear_distance_clamped\\\",\\n    \\\"audio_falloff_none\\\",\\n    \\\"audio_mono\\\",\\n    \\\"audio_new_system\\\",\\n    \\\"audio_old_system\\\",\\n    \\\"audio_stereo\\\",\\n    \\\"bm_add\\\",\\n    \\\"bm_complex\\\",\\n    \\\"bm_dest_alpha\\\",\\n    \\\"bm_dest_color\\\",\\n    \\\"bm_dest_colour\\\",\\n    \\\"bm_inv_dest_alpha\\\",\\n    \\\"bm_inv_dest_color\\\",\\n    \\\"bm_inv_dest_colour\\\",\\n    \\\"bm_inv_src_alpha\\\",\\n    \\\"bm_inv_src_color\\\",\\n    \\\"bm_inv_src_colour\\\",\\n    \\\"bm_max\\\",\\n    \\\"bm_normal\\\",\\n    \\\"bm_one\\\",\\n    \\\"bm_src_alpha\\\",\\n    \\\"bm_src_alpha_sat\\\",\\n    \\\"bm_src_color\\\",\\n    \\\"bm_src_colour\\\",\\n    \\\"bm_subtract\\\",\\n    \\\"bm_zero\\\",\\n    \\\"browser_chrome\\\",\\n    \\\"browser_edge\\\",\\n    \\\"browser_firefox\\\",\\n    \\\"browser_ie\\\",\\n    \\\"browser_ie_mobile\\\",\\n    \\\"browser_not_a_browser\\\",\\n    \\\"browser_opera\\\",\\n    \\\"browser_safari\\\",\\n    \\\"browser_safari_mobile\\\",\\n    \\\"browser_tizen\\\",\\n    \\\"browser_unknown\\\",\\n    \\\"browser_windows_store\\\",\\n    \\\"buffer_bool\\\",\\n    \\\"buffer_f16\\\",\\n    \\\"buffer_f32\\\",\\n    \\\"buffer_f64\\\",\\n    \\\"buffer_fast\\\",\\n    \\\"buffer_fixed\\\",\\n    \\\"buffer_generalerror\\\",\\n    \\\"buffer_grow\\\",\\n    \\\"buffer_invalidtype\\\",\\n    \\\"buffer_network\\\",\\n    \\\"buffer_outofbounds\\\",\\n    \\\"buffer_outofspace\\\",\\n    \\\"buffer_s16\\\",\\n    \\\"buffer_s32\\\",\\n    \\\"buffer_s8\\\",\\n    \\\"buffer_seek_end\\\",\\n    \\\"buffer_seek_relative\\\",\\n    \\\"buffer_seek_start\\\",\\n    \\\"buffer_string\\\",\\n    \\\"buffer_surface_copy\\\",\\n    \\\"buffer_text\\\",\\n    \\\"buffer_u16\\\",\\n    \\\"buffer_u32\\\",\\n    \\\"buffer_u64\\\",\\n    \\\"buffer_u8\\\",\\n    \\\"buffer_vbuffer\\\",\\n    \\\"buffer_wrap\\\",\\n    \\\"button_type\\\",\\n    \\\"c_aqua\\\",\\n    \\\"c_black\\\",\\n    \\\"c_blue\\\",\\n    \\\"c_dkgray\\\",\\n    \\\"c_fuchsia\\\",\\n    \\\"c_gray\\\",\\n    \\\"c_green\\\",\\n    \\\"c_lime\\\",\\n    \\\"c_ltgray\\\",\\n    \\\"c_maroon\\\",\\n    \\\"c_navy\\\",\\n    \\\"c_olive\\\",\\n    \\\"c_orange\\\",\\n    \\\"c_purple\\\",\\n    \\\"c_red\\\",\\n    \\\"c_silver\\\",\\n    \\\"c_teal\\\",\\n    \\\"c_white\\\",\\n    \\\"c_yellow\\\",\\n    \\\"cmpfunc_always\\\",\\n    \\\"cmpfunc_equal\\\",\\n    \\\"cmpfunc_greater\\\",\\n    \\\"cmpfunc_greaterequal\\\",\\n    \\\"cmpfunc_less\\\",\\n    \\\"cmpfunc_lessequal\\\",\\n    \\\"cmpfunc_never\\\",\\n    \\\"cmpfunc_notequal\\\",\\n    \\\"cr_appstart\\\",\\n    \\\"cr_arrow\\\",\\n    \\\"cr_beam\\\",\\n    \\\"cr_cross\\\",\\n    \\\"cr_default\\\",\\n    \\\"cr_drag\\\",\\n    \\\"cr_handpoint\\\",\\n    \\\"cr_hourglass\\\",\\n    \\\"cr_none\\\",\\n    \\\"cr_size_all\\\",\\n    \\\"cr_size_nesw\\\",\\n    \\\"cr_size_ns\\\",\\n    \\\"cr_size_nwse\\\",\\n    \\\"cr_size_we\\\",\\n    \\\"cr_uparrow\\\",\\n    \\\"cull_clockwise\\\",\\n    \\\"cull_counterclockwise\\\",\\n    \\\"cull_noculling\\\",\\n    \\\"device_emulator\\\",\\n    \\\"device_ios_ipad\\\",\\n    \\\"device_ios_ipad_retina\\\",\\n    \\\"device_ios_iphone\\\",\\n    \\\"device_ios_iphone5\\\",\\n    \\\"device_ios_iphone6\\\",\\n    \\\"device_ios_iphone6plus\\\",\\n    \\\"device_ios_iphone_retina\\\",\\n    \\\"device_ios_unknown\\\",\\n    \\\"device_tablet\\\",\\n    \\\"display_landscape\\\",\\n    \\\"display_landscape_flipped\\\",\\n    \\\"display_portrait\\\",\\n    \\\"display_portrait_flipped\\\",\\n    \\\"dll_cdecl\\\",\\n    \\\"dll_stdcall\\\",\\n    \\\"ds_type_grid\\\",\\n    \\\"ds_type_list\\\",\\n    \\\"ds_type_map\\\",\\n    \\\"ds_type_priority\\\",\\n    \\\"ds_type_queue\\\",\\n    \\\"ds_type_stack\\\",\\n    \\\"ef_cloud\\\",\\n    \\\"ef_ellipse\\\",\\n    \\\"ef_explosion\\\",\\n    \\\"ef_firework\\\",\\n    \\\"ef_flare\\\",\\n    \\\"ef_rain\\\",\\n    \\\"ef_ring\\\",\\n    \\\"ef_smoke\\\",\\n    \\\"ef_smokeup\\\",\\n    \\\"ef_snow\\\",\\n    \\\"ef_spark\\\",\\n    \\\"ef_star\\\",\\n    // for example ev_ are types of events\\n    \\\"ev_alarm\\\",\\n    \\\"ev_animation_end\\\",\\n    \\\"ev_boundary\\\",\\n    \\\"ev_cleanup\\\",\\n    \\\"ev_close_button\\\",\\n    \\\"ev_collision\\\",\\n    \\\"ev_create\\\",\\n    \\\"ev_destroy\\\",\\n    \\\"ev_draw\\\",\\n    \\\"ev_draw_begin\\\",\\n    \\\"ev_draw_end\\\",\\n    \\\"ev_draw_post\\\",\\n    \\\"ev_draw_pre\\\",\\n    \\\"ev_end_of_path\\\",\\n    \\\"ev_game_end\\\",\\n    \\\"ev_game_start\\\",\\n    \\\"ev_gesture\\\",\\n    \\\"ev_gesture_double_tap\\\",\\n    \\\"ev_gesture_drag_end\\\",\\n    \\\"ev_gesture_drag_start\\\",\\n    \\\"ev_gesture_dragging\\\",\\n    \\\"ev_gesture_flick\\\",\\n    \\\"ev_gesture_pinch_end\\\",\\n    \\\"ev_gesture_pinch_in\\\",\\n    \\\"ev_gesture_pinch_out\\\",\\n    \\\"ev_gesture_pinch_start\\\",\\n    \\\"ev_gesture_rotate_end\\\",\\n    \\\"ev_gesture_rotate_start\\\",\\n    \\\"ev_gesture_rotating\\\",\\n    \\\"ev_gesture_tap\\\",\\n    \\\"ev_global_gesture_double_tap\\\",\\n    \\\"ev_global_gesture_drag_end\\\",\\n    \\\"ev_global_gesture_drag_start\\\",\\n    \\\"ev_global_gesture_dragging\\\",\\n    \\\"ev_global_gesture_flick\\\",\\n    \\\"ev_global_gesture_pinch_end\\\",\\n    \\\"ev_global_gesture_pinch_in\\\",\\n    \\\"ev_global_gesture_pinch_out\\\",\\n    \\\"ev_global_gesture_pinch_start\\\",\\n    \\\"ev_global_gesture_rotate_end\\\",\\n    \\\"ev_global_gesture_rotate_start\\\",\\n    \\\"ev_global_gesture_rotating\\\",\\n    \\\"ev_global_gesture_tap\\\",\\n    \\\"ev_global_left_button\\\",\\n    \\\"ev_global_left_press\\\",\\n    \\\"ev_global_left_release\\\",\\n    \\\"ev_global_middle_button\\\",\\n    \\\"ev_global_middle_press\\\",\\n    \\\"ev_global_middle_release\\\",\\n    \\\"ev_global_right_button\\\",\\n    \\\"ev_global_right_press\\\",\\n    \\\"ev_global_right_release\\\",\\n    \\\"ev_gui\\\",\\n    \\\"ev_gui_begin\\\",\\n    \\\"ev_gui_end\\\",\\n    \\\"ev_joystick1_button1\\\",\\n    \\\"ev_joystick1_button2\\\",\\n    \\\"ev_joystick1_button3\\\",\\n    \\\"ev_joystick1_button4\\\",\\n    \\\"ev_joystick1_button5\\\",\\n    \\\"ev_joystick1_button6\\\",\\n    \\\"ev_joystick1_button7\\\",\\n    \\\"ev_joystick1_button8\\\",\\n    \\\"ev_joystick1_down\\\",\\n    \\\"ev_joystick1_left\\\",\\n    \\\"ev_joystick1_right\\\",\\n    \\\"ev_joystick1_up\\\",\\n    \\\"ev_joystick2_button1\\\",\\n    \\\"ev_joystick2_button2\\\",\\n    \\\"ev_joystick2_button3\\\",\\n    \\\"ev_joystick2_button4\\\",\\n    \\\"ev_joystick2_button5\\\",\\n    \\\"ev_joystick2_button6\\\",\\n    \\\"ev_joystick2_button7\\\",\\n    \\\"ev_joystick2_button8\\\",\\n    \\\"ev_joystick2_down\\\",\\n    \\\"ev_joystick2_left\\\",\\n    \\\"ev_joystick2_right\\\",\\n    \\\"ev_joystick2_up\\\",\\n    \\\"ev_keyboard\\\",\\n    \\\"ev_keypress\\\",\\n    \\\"ev_keyrelease\\\",\\n    \\\"ev_left_button\\\",\\n    \\\"ev_left_press\\\",\\n    \\\"ev_left_release\\\",\\n    \\\"ev_middle_button\\\",\\n    \\\"ev_middle_press\\\",\\n    \\\"ev_middle_release\\\",\\n    \\\"ev_mouse\\\",\\n    \\\"ev_mouse_enter\\\",\\n    \\\"ev_mouse_leave\\\",\\n    \\\"ev_mouse_wheel_down\\\",\\n    \\\"ev_mouse_wheel_up\\\",\\n    \\\"ev_no_button\\\",\\n    \\\"ev_no_more_health\\\",\\n    \\\"ev_no_more_lives\\\",\\n    \\\"ev_other\\\",\\n    \\\"ev_outside\\\",\\n    \\\"ev_right_button\\\",\\n    \\\"ev_right_press\\\",\\n    \\\"ev_right_release\\\",\\n    \\\"ev_room_end\\\",\\n    \\\"ev_room_start\\\",\\n    \\\"ev_step\\\",\\n    \\\"ev_step_begin\\\",\\n    \\\"ev_step_end\\\",\\n    \\\"ev_step_normal\\\",\\n    \\\"ev_trigger\\\",\\n    \\\"ev_user0\\\",\\n    \\\"ev_user1\\\",\\n    \\\"ev_user2\\\",\\n    \\\"ev_user3\\\",\\n    \\\"ev_user4\\\",\\n    \\\"ev_user5\\\",\\n    \\\"ev_user6\\\",\\n    \\\"ev_user7\\\",\\n    \\\"ev_user8\\\",\\n    \\\"ev_user9\\\",\\n    \\\"ev_user10\\\",\\n    \\\"ev_user11\\\",\\n    \\\"ev_user12\\\",\\n    \\\"ev_user13\\\",\\n    \\\"ev_user14\\\",\\n    \\\"ev_user15\\\",\\n    \\\"fa_archive\\\",\\n    \\\"fa_bottom\\\",\\n    \\\"fa_center\\\",\\n    \\\"fa_directory\\\",\\n    \\\"fa_hidden\\\",\\n    \\\"fa_left\\\",\\n    \\\"fa_middle\\\",\\n    \\\"fa_readonly\\\",\\n    \\\"fa_right\\\",\\n    \\\"fa_sysfile\\\",\\n    \\\"fa_top\\\",\\n    \\\"fa_volumeid\\\",\\n    \\\"fb_login_default\\\",\\n    \\\"fb_login_fallback_to_webview\\\",\\n    \\\"fb_login_forcing_safari\\\",\\n    \\\"fb_login_forcing_webview\\\",\\n    \\\"fb_login_no_fallback_to_webview\\\",\\n    \\\"fb_login_use_system_account\\\",\\n    \\\"gamespeed_fps\\\",\\n    \\\"gamespeed_microseconds\\\",\\n    \\\"ge_lose\\\",\\n    \\\"global\\\",\\n    \\\"gp_axislh\\\",\\n    \\\"gp_axislv\\\",\\n    \\\"gp_axisrh\\\",\\n    \\\"gp_axisrv\\\",\\n    \\\"gp_face1\\\",\\n    \\\"gp_face2\\\",\\n    \\\"gp_face3\\\",\\n    \\\"gp_face4\\\",\\n    \\\"gp_padd\\\",\\n    \\\"gp_padl\\\",\\n    \\\"gp_padr\\\",\\n    \\\"gp_padu\\\",\\n    \\\"gp_select\\\",\\n    \\\"gp_shoulderl\\\",\\n    \\\"gp_shoulderlb\\\",\\n    \\\"gp_shoulderr\\\",\\n    \\\"gp_shoulderrb\\\",\\n    \\\"gp_start\\\",\\n    \\\"gp_stickl\\\",\\n    \\\"gp_stickr\\\",\\n    \\\"iap_available\\\",\\n    \\\"iap_canceled\\\",\\n    \\\"iap_ev_consume\\\",\\n    \\\"iap_ev_product\\\",\\n    \\\"iap_ev_purchase\\\",\\n    \\\"iap_ev_restore\\\",\\n    \\\"iap_ev_storeload\\\",\\n    \\\"iap_failed\\\",\\n    \\\"iap_purchased\\\",\\n    \\\"iap_refunded\\\",\\n    \\\"iap_status_available\\\",\\n    \\\"iap_status_loading\\\",\\n    \\\"iap_status_processing\\\",\\n    \\\"iap_status_restoring\\\",\\n    \\\"iap_status_unavailable\\\",\\n    \\\"iap_status_uninitialised\\\",\\n    \\\"iap_storeload_failed\\\",\\n    \\\"iap_storeload_ok\\\",\\n    \\\"iap_unavailable\\\",\\n    \\\"input_type\\\",\\n    \\\"kbv_autocapitalize_characters\\\",\\n    \\\"kbv_autocapitalize_none\\\",\\n    \\\"kbv_autocapitalize_sentences\\\",\\n    \\\"kbv_autocapitalize_words\\\",\\n    \\\"kbv_returnkey_continue\\\",\\n    \\\"kbv_returnkey_default\\\",\\n    \\\"kbv_returnkey_done\\\",\\n    \\\"kbv_returnkey_emergency\\\",\\n    \\\"kbv_returnkey_go\\\",\\n    \\\"kbv_returnkey_google\\\",\\n    \\\"kbv_returnkey_join\\\",\\n    \\\"kbv_returnkey_next\\\",\\n    \\\"kbv_returnkey_route\\\",\\n    \\\"kbv_returnkey_search\\\",\\n    \\\"kbv_returnkey_send\\\",\\n    \\\"kbv_returnkey_yahoo\\\",\\n    \\\"kbv_type_ascii\\\",\\n    \\\"kbv_type_default\\\",\\n    \\\"kbv_type_email\\\",\\n    \\\"kbv_type_numbers\\\",\\n    \\\"kbv_type_phone\\\",\\n    \\\"kbv_type_phone_name\\\",\\n    \\\"kbv_type_url\\\",\\n    \\\"layerelementtype_background\\\",\\n    \\\"layerelementtype_instance\\\",\\n    \\\"layerelementtype_oldtilemap\\\",\\n    \\\"layerelementtype_particlesystem\\\",\\n    \\\"layerelementtype_sprite\\\",\\n    \\\"layerelementtype_tile\\\",\\n    \\\"layerelementtype_tilemap\\\",\\n    \\\"layerelementtype_undefined\\\",\\n    \\\"lb_disp_none\\\",\\n    \\\"lb_disp_numeric\\\",\\n    \\\"lb_disp_time_ms\\\",\\n    \\\"lb_disp_time_sec\\\",\\n    \\\"lb_sort_ascending\\\",\\n    \\\"lb_sort_descending\\\",\\n    \\\"lb_sort_none\\\",\\n    \\\"leaderboard_type_number\\\",\\n    \\\"leaderboard_type_time_mins_secs\\\",\\n    \\\"lighttype_dir\\\",\\n    \\\"lighttype_point\\\",\\n    \\\"local\\\",\\n    \\\"matrix_projection\\\",\\n    \\\"matrix_view\\\",\\n    \\\"matrix_world\\\",\\n    \\\"mb_any\\\",\\n    \\\"mb_left\\\",\\n    \\\"mb_middle\\\",\\n    \\\"mb_none\\\",\\n    \\\"mb_right\\\",\\n    \\\"mip_markedonly\\\",\\n    \\\"mip_off\\\",\\n    \\\"mip_on\\\",\\n    \\\"network_config_connect_timeout\\\",\\n    \\\"network_config_disable_reliable_udp\\\",\\n    \\\"network_config_enable_reliable_udp\\\",\\n    \\\"network_config_use_non_blocking_socket\\\",\\n    \\\"network_socket_bluetooth\\\",\\n    \\\"network_socket_tcp\\\",\\n    \\\"network_socket_udp\\\",\\n    \\\"network_type_connect\\\",\\n    \\\"network_type_data\\\",\\n    \\\"network_type_disconnect\\\",\\n    \\\"network_type_non_blocking_connect\\\",\\n    \\\"of_challen\\\",\\n    \\\"of_challenge_tie\\\",\\n    \\\"of_challenge_win\\\",\\n    \\\"os_3ds\\\",\\n    \\\"os_android\\\",\\n    \\\"os_bb10\\\",\\n    \\\"os_ios\\\",\\n    \\\"os_linux\\\",\\n    \\\"os_macosx\\\",\\n    \\\"os_ps3\\\",\\n    \\\"os_ps4\\\",\\n    \\\"os_psvita\\\",\\n    \\\"os_switch\\\",\\n    \\\"os_symbian\\\",\\n    \\\"os_tizen\\\",\\n    \\\"os_tvos\\\",\\n    \\\"os_unknown\\\",\\n    \\\"os_uwp\\\",\\n    \\\"os_wiiu\\\",\\n    \\\"os_win32\\\",\\n    \\\"os_win8native\\\",\\n    \\\"os_windows\\\",\\n    \\\"os_winphone\\\",\\n    \\\"os_xbox360\\\",\\n    \\\"os_xboxone\\\",\\n    \\\"other\\\",\\n    \\\"ov_achievements\\\",\\n    \\\"ov_community\\\",\\n    \\\"ov_friends\\\",\\n    \\\"ov_gamegroup\\\",\\n    \\\"ov_players\\\",\\n    \\\"ov_settings\\\",\\n    \\\"path_action_continue\\\",\\n    \\\"path_action_restart\\\",\\n    \\\"path_action_reverse\\\",\\n    \\\"path_action_stop\\\",\\n    \\\"phy_debug_render_aabb\\\",\\n    \\\"phy_debug_render_collision_pairs\\\",\\n    \\\"phy_debug_render_coms\\\",\\n    \\\"phy_debug_render_core_shapes\\\",\\n    \\\"phy_debug_render_joints\\\",\\n    \\\"phy_debug_render_obb\\\",\\n    \\\"phy_debug_render_shapes\\\",\\n    \\\"phy_joint_anchor_1_x\\\",\\n    \\\"phy_joint_anchor_1_y\\\",\\n    \\\"phy_joint_anchor_2_x\\\",\\n    \\\"phy_joint_anchor_2_y\\\",\\n    \\\"phy_joint_angle\\\",\\n    \\\"phy_joint_angle_limits\\\",\\n    \\\"phy_joint_damping_ratio\\\",\\n    \\\"phy_joint_frequency\\\",\\n    \\\"phy_joint_length_1\\\",\\n    \\\"phy_joint_length_2\\\",\\n    \\\"phy_joint_lower_angle_limit\\\",\\n    \\\"phy_joint_max_force\\\",\\n    \\\"phy_joint_max_length\\\",\\n    \\\"phy_joint_max_motor_force\\\",\\n    \\\"phy_joint_max_motor_torque\\\",\\n    \\\"phy_joint_max_torque\\\",\\n    \\\"phy_joint_motor_force\\\",\\n    \\\"phy_joint_motor_speed\\\",\\n    \\\"phy_joint_motor_torque\\\",\\n    \\\"phy_joint_reaction_force_x\\\",\\n    \\\"phy_joint_reaction_force_y\\\",\\n    \\\"phy_joint_reaction_torque\\\",\\n    \\\"phy_joint_speed\\\",\\n    \\\"phy_joint_translation\\\",\\n    \\\"phy_joint_upper_angle_limit\\\",\\n    \\\"phy_particle_data_flag_category\\\",\\n    \\\"phy_particle_data_flag_color\\\",\\n    \\\"phy_particle_data_flag_colour\\\",\\n    \\\"phy_particle_data_flag_position\\\",\\n    \\\"phy_particle_data_flag_typeflags\\\",\\n    \\\"phy_particle_data_flag_velocity\\\",\\n    \\\"phy_particle_flag_colormixing\\\",\\n    \\\"phy_particle_flag_colourmixing\\\",\\n    \\\"phy_particle_flag_elastic\\\",\\n    \\\"phy_particle_flag_powder\\\",\\n    \\\"phy_particle_flag_spring\\\",\\n    \\\"phy_particle_flag_tensile\\\",\\n    \\\"phy_particle_flag_viscous\\\",\\n    \\\"phy_particle_flag_wall\\\",\\n    \\\"phy_particle_flag_water\\\",\\n    \\\"phy_particle_flag_zombie\\\",\\n    \\\"phy_particle_group_flag_rigid\\\",\\n    \\\"phy_particle_group_flag_solid\\\",\\n    \\\"pi\\\",\\n    \\\"pr_linelist\\\",\\n    \\\"pr_linestrip\\\",\\n    \\\"pr_pointlist\\\",\\n    \\\"pr_trianglefan\\\",\\n    \\\"pr_trianglelist\\\",\\n    \\\"pr_trianglestrip\\\",\\n    \\\"ps_distr_gaussian\\\",\\n    \\\"ps_distr_invgaussian\\\",\\n    \\\"ps_distr_linear\\\",\\n    \\\"ps_shape_diamond\\\",\\n    \\\"ps_shape_ellipse\\\",\\n    \\\"ps_shape_line\\\",\\n    \\\"ps_shape_rectangle\\\",\\n    \\\"pt_shape_circle\\\",\\n    \\\"pt_shape_cloud\\\",\\n    \\\"pt_shape_disk\\\",\\n    \\\"pt_shape_explosion\\\",\\n    \\\"pt_shape_flare\\\",\\n    \\\"pt_shape_line\\\",\\n    \\\"pt_shape_pixel\\\",\\n    \\\"pt_shape_ring\\\",\\n    \\\"pt_shape_smoke\\\",\\n    \\\"pt_shape_snow\\\",\\n    \\\"pt_shape_spark\\\",\\n    \\\"pt_shape_sphere\\\",\\n    \\\"pt_shape_square\\\",\\n    \\\"pt_shape_star\\\",\\n    \\\"spritespeed_framespergameframe\\\",\\n    \\\"spritespeed_framespersecond\\\",\\n    \\\"text_type\\\",\\n    \\\"tf_anisotropic\\\",\\n    \\\"tf_linear\\\",\\n    \\\"tf_point\\\",\\n    \\\"tile_flip\\\",\\n    \\\"tile_index_mask\\\",\\n    \\\"tile_mirror\\\",\\n    \\\"tile_rotate\\\",\\n    \\\"timezone_local\\\",\\n    \\\"timezone_utc\\\",\\n    \\\"tm_countvsyncs\\\",\\n    \\\"tm_sleep\\\",\\n    \\\"ty_real\\\",\\n    \\\"ty_string\\\",\\n    \\\"ugc_filetype_community\\\",\\n    \\\"ugc_filetype_microtrans\\\",\\n    \\\"ugc_list_Favorited\\\",\\n    \\\"ugc_list_Followed\\\",\\n    \\\"ugc_list_Published\\\",\\n    \\\"ugc_list_Subscribed\\\",\\n    \\\"ugc_list_UsedOrPlayed\\\",\\n    \\\"ugc_list_VotedDown\\\",\\n    \\\"ugc_list_VotedOn\\\",\\n    \\\"ugc_list_VotedUp\\\",\\n    \\\"ugc_list_WillVoteLater\\\",\\n    \\\"ugc_match_AllGuides\\\",\\n    \\\"ugc_match_Artwork\\\",\\n    \\\"ugc_match_Collections\\\",\\n    \\\"ugc_match_ControllerBindings\\\",\\n    \\\"ugc_match_IntegratedGuides\\\",\\n    \\\"ugc_match_Items\\\",\\n    \\\"ugc_match_Items_Mtx\\\",\\n    \\\"ugc_match_Items_ReadyToUse\\\",\\n    \\\"ugc_match_Screenshots\\\",\\n    \\\"ugc_match_UsableInGame\\\",\\n    \\\"ugc_match_Videos\\\",\\n    \\\"ugc_match_WebGuides\\\",\\n    \\\"ugc_query_AcceptedForGameRankedByAcceptanceDate\\\",\\n    \\\"ugc_query_CreatedByFollowedUsersRankedByPublicationDate\\\",\\n    \\\"ugc_query_CreatedByFriendsRankedByPublicationDate\\\",\\n    \\\"ugc_query_FavoritedByFriendsRankedByPublicationDate\\\",\\n    \\\"ugc_query_NotYetRated\\\",\\n    \\\"ugc_query_RankedByNumTimesReported\\\",\\n    \\\"ugc_query_RankedByPublicationDate\\\",\\n    \\\"ugc_query_RankedByTextSearch\\\",\\n    \\\"ugc_query_RankedByTotalVotesAsc\\\",\\n    \\\"ugc_query_RankedByTrend\\\",\\n    \\\"ugc_query_RankedByVote\\\",\\n    \\\"ugc_query_RankedByVotesUp\\\",\\n    \\\"ugc_result_success\\\",\\n    \\\"ugc_sortorder_CreationOrderAsc\\\",\\n    \\\"ugc_sortorder_CreationOrderDesc\\\",\\n    \\\"ugc_sortorder_ForModeration\\\",\\n    \\\"ugc_sortorder_LastUpdatedDesc\\\",\\n    \\\"ugc_sortorder_SubscriptionDateDesc\\\",\\n    \\\"ugc_sortorder_TitleAsc\\\",\\n    \\\"ugc_sortorder_VoteScoreDesc\\\",\\n    \\\"ugc_visibility_friends_only\\\",\\n    \\\"ugc_visibility_private\\\",\\n    \\\"ugc_visibility_public\\\",\\n    \\\"vertex_type_color\\\",\\n    \\\"vertex_type_colour\\\",\\n    \\\"vertex_type_float1\\\",\\n    \\\"vertex_type_float2\\\",\\n    \\\"vertex_type_float3\\\",\\n    \\\"vertex_type_float4\\\",\\n    \\\"vertex_type_ubyte4\\\",\\n    \\\"vertex_usage_binormal\\\",\\n    \\\"vertex_usage_blendindices\\\",\\n    \\\"vertex_usage_blendweight\\\",\\n    \\\"vertex_usage_color\\\",\\n    \\\"vertex_usage_colour\\\",\\n    \\\"vertex_usage_depth\\\",\\n    \\\"vertex_usage_fog\\\",\\n    \\\"vertex_usage_normal\\\",\\n    \\\"vertex_usage_position\\\",\\n    \\\"vertex_usage_psize\\\",\\n    \\\"vertex_usage_sample\\\",\\n    \\\"vertex_usage_tangent\\\",\\n    \\\"vertex_usage_texcoord\\\",\\n    \\\"vertex_usage_textcoord\\\",\\n    \\\"vk_add\\\",\\n    \\\"vk_alt\\\",\\n    \\\"vk_anykey\\\",\\n    \\\"vk_backspace\\\",\\n    \\\"vk_control\\\",\\n    \\\"vk_decimal\\\",\\n    \\\"vk_delete\\\",\\n    \\\"vk_divide\\\",\\n    \\\"vk_down\\\",\\n    \\\"vk_end\\\",\\n    \\\"vk_enter\\\",\\n    \\\"vk_escape\\\",\\n    \\\"vk_f1\\\",\\n    \\\"vk_f2\\\",\\n    \\\"vk_f3\\\",\\n    \\\"vk_f4\\\",\\n    \\\"vk_f5\\\",\\n    \\\"vk_f6\\\",\\n    \\\"vk_f7\\\",\\n    \\\"vk_f8\\\",\\n    \\\"vk_f9\\\",\\n    \\\"vk_f10\\\",\\n    \\\"vk_f11\\\",\\n    \\\"vk_f12\\\",\\n    \\\"vk_home\\\",\\n    \\\"vk_insert\\\",\\n    \\\"vk_lalt\\\",\\n    \\\"vk_lcontrol\\\",\\n    \\\"vk_left\\\",\\n    \\\"vk_lshift\\\",\\n    \\\"vk_multiply\\\",\\n    \\\"vk_nokey\\\",\\n    \\\"vk_numpad0\\\",\\n    \\\"vk_numpad1\\\",\\n    \\\"vk_numpad2\\\",\\n    \\\"vk_numpad3\\\",\\n    \\\"vk_numpad4\\\",\\n    \\\"vk_numpad5\\\",\\n    \\\"vk_numpad6\\\",\\n    \\\"vk_numpad7\\\",\\n    \\\"vk_numpad8\\\",\\n    \\\"vk_numpad9\\\",\\n    \\\"vk_pagedown\\\",\\n    \\\"vk_pageup\\\",\\n    \\\"vk_pause\\\",\\n    \\\"vk_printscreen\\\",\\n    \\\"vk_ralt\\\",\\n    \\\"vk_rcontrol\\\",\\n    \\\"vk_return\\\",\\n    \\\"vk_right\\\",\\n    \\\"vk_rshift\\\",\\n    \\\"vk_shift\\\",\\n    \\\"vk_space\\\",\\n    \\\"vk_subtract\\\",\\n    \\\"vk_tab\\\",\\n    \\\"vk_up\\\"\\n  ];\\n  const LANGUAGE_VARIABLES = [\\n    \\\"alarm\\\",\\n    \\\"application_surface\\\",\\n    \\\"argument\\\",\\n    \\\"argument0\\\",\\n    \\\"argument1\\\",\\n    \\\"argument2\\\",\\n    \\\"argument3\\\",\\n    \\\"argument4\\\",\\n    \\\"argument5\\\",\\n    \\\"argument6\\\",\\n    \\\"argument7\\\",\\n    \\\"argument8\\\",\\n    \\\"argument9\\\",\\n    \\\"argument10\\\",\\n    \\\"argument11\\\",\\n    \\\"argument12\\\",\\n    \\\"argument13\\\",\\n    \\\"argument14\\\",\\n    \\\"argument15\\\",\\n    \\\"argument_count\\\",\\n    \\\"argument_relative\\\",\\n    \\\"async_load\\\",\\n    \\\"background_color\\\",\\n    \\\"background_colour\\\",\\n    \\\"background_showcolor\\\",\\n    \\\"background_showcolour\\\",\\n    \\\"bbox_bottom\\\",\\n    \\\"bbox_left\\\",\\n    \\\"bbox_right\\\",\\n    \\\"bbox_top\\\",\\n    \\\"browser_height\\\",\\n    \\\"browser_width\\\",\\n    \\\"caption_health\\\",\\n    \\\"caption_lives\\\",\\n    \\\"caption_score\\\",\\n    \\\"current_day\\\",\\n    \\\"current_hour\\\",\\n    \\\"current_minute\\\",\\n    \\\"current_month\\\",\\n    \\\"current_second\\\",\\n    \\\"current_time\\\",\\n    \\\"current_weekday\\\",\\n    \\\"current_year\\\",\\n    \\\"cursor_sprite\\\",\\n    \\\"debug_mode\\\",\\n    \\\"delta_time\\\",\\n    \\\"depth\\\",\\n    \\\"direction\\\",\\n    \\\"display_aa\\\",\\n    \\\"error_last\\\",\\n    \\\"error_occurred\\\",\\n    \\\"event_action\\\",\\n    \\\"event_data\\\",\\n    \\\"event_number\\\",\\n    \\\"event_object\\\",\\n    \\\"event_type\\\",\\n    \\\"fps\\\",\\n    \\\"fps_real\\\",\\n    \\\"friction\\\",\\n    \\\"game_display_name\\\",\\n    \\\"game_id\\\",\\n    \\\"game_project_name\\\",\\n    \\\"game_save_id\\\",\\n    \\\"gamemaker_pro\\\",\\n    \\\"gamemaker_registered\\\",\\n    \\\"gamemaker_version\\\",\\n    \\\"gravity\\\",\\n    \\\"gravity_direction\\\",\\n    \\\"health\\\",\\n    \\\"hspeed\\\",\\n    \\\"iap_data\\\",\\n    \\\"id|0\\\",\\n    \\\"image_alpha\\\",\\n    \\\"image_angle\\\",\\n    \\\"image_blend\\\",\\n    \\\"image_index\\\",\\n    \\\"image_number\\\",\\n    \\\"image_speed\\\",\\n    \\\"image_xscale\\\",\\n    \\\"image_yscale\\\",\\n    \\\"instance_count\\\",\\n    \\\"instance_id\\\",\\n    \\\"keyboard_key\\\",\\n    \\\"keyboard_lastchar\\\",\\n    \\\"keyboard_lastkey\\\",\\n    \\\"keyboard_string\\\",\\n    \\\"layer\\\",\\n    \\\"lives\\\",\\n    \\\"mask_index\\\",\\n    \\\"mouse_button\\\",\\n    \\\"mouse_lastbutton\\\",\\n    \\\"mouse_x\\\",\\n    \\\"mouse_y\\\",\\n    \\\"object_index\\\",\\n    \\\"os_browser\\\",\\n    \\\"os_device\\\",\\n    \\\"os_type\\\",\\n    \\\"os_version\\\",\\n    \\\"path_endaction\\\",\\n    \\\"path_index\\\",\\n    \\\"path_orientation\\\",\\n    \\\"path_position\\\",\\n    \\\"path_positionprevious\\\",\\n    \\\"path_scale\\\",\\n    \\\"path_speed\\\",\\n    \\\"persistent\\\",\\n    \\\"phy_active\\\",\\n    \\\"phy_angular_damping\\\",\\n    \\\"phy_angular_velocity\\\",\\n    \\\"phy_bullet\\\",\\n    \\\"phy_col_normal_x\\\",\\n    \\\"phy_col_normal_y\\\",\\n    \\\"phy_collision_points\\\",\\n    \\\"phy_collision_x\\\",\\n    \\\"phy_collision_y\\\",\\n    \\\"phy_com_x\\\",\\n    \\\"phy_com_y\\\",\\n    \\\"phy_dynamic\\\",\\n    \\\"phy_fixed_rotation\\\",\\n    \\\"phy_inertia\\\",\\n    \\\"phy_kinematic\\\",\\n    \\\"phy_linear_damping\\\",\\n    \\\"phy_linear_velocity_x\\\",\\n    \\\"phy_linear_velocity_y\\\",\\n    \\\"phy_mass\\\",\\n    \\\"phy_position_x\\\",\\n    \\\"phy_position_xprevious\\\",\\n    \\\"phy_position_y\\\",\\n    \\\"phy_position_yprevious\\\",\\n    \\\"phy_rotation\\\",\\n    \\\"phy_sleeping\\\",\\n    \\\"phy_speed\\\",\\n    \\\"phy_speed_x\\\",\\n    \\\"phy_speed_y\\\",\\n    \\\"program_directory\\\",\\n    \\\"room\\\",\\n    \\\"room_caption\\\",\\n    \\\"room_first\\\",\\n    \\\"room_height\\\",\\n    \\\"room_last\\\",\\n    \\\"room_persistent\\\",\\n    \\\"room_speed\\\",\\n    \\\"room_width\\\",\\n    \\\"score\\\",\\n    \\\"self\\\",\\n    \\\"show_health\\\",\\n    \\\"show_lives\\\",\\n    \\\"show_score\\\",\\n    \\\"solid\\\",\\n    \\\"speed\\\",\\n    \\\"sprite_height\\\",\\n    \\\"sprite_index\\\",\\n    \\\"sprite_width\\\",\\n    \\\"sprite_xoffset\\\",\\n    \\\"sprite_yoffset\\\",\\n    \\\"temp_directory\\\",\\n    \\\"timeline_index\\\",\\n    \\\"timeline_loop\\\",\\n    \\\"timeline_position\\\",\\n    \\\"timeline_running\\\",\\n    \\\"timeline_speed\\\",\\n    \\\"view_angle\\\",\\n    \\\"view_camera\\\",\\n    \\\"view_current\\\",\\n    \\\"view_enabled\\\",\\n    \\\"view_hborder\\\",\\n    \\\"view_hport\\\",\\n    \\\"view_hspeed\\\",\\n    \\\"view_hview\\\",\\n    \\\"view_object\\\",\\n    \\\"view_surface_id\\\",\\n    \\\"view_vborder\\\",\\n    \\\"view_visible\\\",\\n    \\\"view_vspeed\\\",\\n    \\\"view_wport\\\",\\n    \\\"view_wview\\\",\\n    \\\"view_xport\\\",\\n    \\\"view_xview\\\",\\n    \\\"view_yport\\\",\\n    \\\"view_yview\\\",\\n    \\\"visible\\\",\\n    \\\"vspeed\\\",\\n    \\\"webgl_enabled\\\",\\n    \\\"working_directory\\\",\\n    \\\"xprevious\\\",\\n    \\\"xstart\\\",\\n    \\\"x|0\\\",\\n    \\\"yprevious\\\",\\n    \\\"ystart\\\",\\n    \\\"y|0\\\"\\n  ];\\n\\n  return {\\n    name: 'GML',\\n    case_insensitive: false, // language is case-insensitive\\n    keywords: {\\n      keyword: KEYWORDS,\\n      built_in: BUILT_INS,\\n      literal: LITERALS,\\n      symbol: SYMBOLS,\\n      \\\"variable.language\\\": LANGUAGE_VARIABLES\\n    },\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.C_NUMBER_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = gml;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/gml.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/go.js\":\n/*!*******************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/go.js ***!\n  \\*******************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Go\\nAuthor: Stephan Kountso aka StepLg <steplg@gmail.com>\\nContributors: Evgeny Stepanischev <imbolk@gmail.com>\\nDescription: Google go language (golang). For info about language\\nWebsite: http://golang.org/\\nCategory: common, system\\n*/\\n\\nfunction go(hljs) {\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    \\\"iota\\\",\\n    \\\"nil\\\"\\n  ];\\n  const BUILT_INS = [\\n    \\\"append\\\",\\n    \\\"cap\\\",\\n    \\\"close\\\",\\n    \\\"complex\\\",\\n    \\\"copy\\\",\\n    \\\"imag\\\",\\n    \\\"len\\\",\\n    \\\"make\\\",\\n    \\\"new\\\",\\n    \\\"panic\\\",\\n    \\\"print\\\",\\n    \\\"println\\\",\\n    \\\"real\\\",\\n    \\\"recover\\\",\\n    \\\"delete\\\"\\n  ];\\n  const TYPES = [\\n    \\\"bool\\\",\\n    \\\"byte\\\",\\n    \\\"complex64\\\",\\n    \\\"complex128\\\",\\n    \\\"error\\\",\\n    \\\"float32\\\",\\n    \\\"float64\\\",\\n    \\\"int8\\\",\\n    \\\"int16\\\",\\n    \\\"int32\\\",\\n    \\\"int64\\\",\\n    \\\"string\\\",\\n    \\\"uint8\\\",\\n    \\\"uint16\\\",\\n    \\\"uint32\\\",\\n    \\\"uint64\\\",\\n    \\\"int\\\",\\n    \\\"uint\\\",\\n    \\\"uintptr\\\",\\n    \\\"rune\\\"\\n  ];\\n  const KWS = [\\n    \\\"break\\\",\\n    \\\"case\\\",\\n    \\\"chan\\\",\\n    \\\"const\\\",\\n    \\\"continue\\\",\\n    \\\"default\\\",\\n    \\\"defer\\\",\\n    \\\"else\\\",\\n    \\\"fallthrough\\\",\\n    \\\"for\\\",\\n    \\\"func\\\",\\n    \\\"go\\\",\\n    \\\"goto\\\",\\n    \\\"if\\\",\\n    \\\"import\\\",\\n    \\\"interface\\\",\\n    \\\"map\\\",\\n    \\\"package\\\",\\n    \\\"range\\\",\\n    \\\"return\\\",\\n    \\\"select\\\",\\n    \\\"struct\\\",\\n    \\\"switch\\\",\\n    \\\"type\\\",\\n    \\\"var\\\",\\n  ];\\n  const KEYWORDS = {\\n    keyword: KWS,\\n    type: TYPES,\\n    literal: LITERALS,\\n    built_in: BUILT_INS\\n  };\\n  return {\\n    name: 'Go',\\n    aliases: [ 'golang' ],\\n    keywords: KEYWORDS,\\n    illegal: '</',\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      {\\n        className: 'string',\\n        variants: [\\n          hljs.QUOTE_STRING_MODE,\\n          hljs.APOS_STRING_MODE,\\n          {\\n            begin: '`',\\n            end: '`'\\n          }\\n        ]\\n      },\\n      {\\n        className: 'number',\\n        variants: [\\n          {\\n            begin: hljs.C_NUMBER_RE + '[i]',\\n            relevance: 1\\n          },\\n          hljs.C_NUMBER_MODE\\n        ]\\n      },\\n      { begin: /:=/ // relevance booster\\n      },\\n      {\\n        className: 'function',\\n        beginKeywords: 'func',\\n        end: '\\\\\\\\s*(\\\\\\\\{|$)',\\n        excludeEnd: true,\\n        contains: [\\n          hljs.TITLE_MODE,\\n          {\\n            className: 'params',\\n            begin: /\\\\(/,\\n            end: /\\\\)/,\\n            endsParent: true,\\n            keywords: KEYWORDS,\\n            illegal: /[\\\"']/\\n          }\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = go;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/go.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/golo.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/golo.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Golo\\nAuthor: Philippe Charriere <ph.charriere@gmail.com>\\nDescription: a lightweight dynamic language for the JVM\\nWebsite: http://golo-lang.org/\\n*/\\n\\nfunction golo(hljs) {\\n  const KEYWORDS = [\\n    \\\"println\\\",\\n    \\\"readln\\\",\\n    \\\"print\\\",\\n    \\\"import\\\",\\n    \\\"module\\\",\\n    \\\"function\\\",\\n    \\\"local\\\",\\n    \\\"return\\\",\\n    \\\"let\\\",\\n    \\\"var\\\",\\n    \\\"while\\\",\\n    \\\"for\\\",\\n    \\\"foreach\\\",\\n    \\\"times\\\",\\n    \\\"in\\\",\\n    \\\"case\\\",\\n    \\\"when\\\",\\n    \\\"match\\\",\\n    \\\"with\\\",\\n    \\\"break\\\",\\n    \\\"continue\\\",\\n    \\\"augment\\\",\\n    \\\"augmentation\\\",\\n    \\\"each\\\",\\n    \\\"find\\\",\\n    \\\"filter\\\",\\n    \\\"reduce\\\",\\n    \\\"if\\\",\\n    \\\"then\\\",\\n    \\\"else\\\",\\n    \\\"otherwise\\\",\\n    \\\"try\\\",\\n    \\\"catch\\\",\\n    \\\"finally\\\",\\n    \\\"raise\\\",\\n    \\\"throw\\\",\\n    \\\"orIfNull\\\",\\n    \\\"DynamicObject|10\\\",\\n    \\\"DynamicVariable\\\",\\n    \\\"struct\\\",\\n    \\\"Observable\\\",\\n    \\\"map\\\",\\n    \\\"set\\\",\\n    \\\"vector\\\",\\n    \\\"list\\\",\\n    \\\"array\\\"\\n  ];\\n\\n  return {\\n    name: 'Golo',\\n    keywords: {\\n      keyword: KEYWORDS,\\n      literal: [\\n        \\\"true\\\",\\n        \\\"false\\\",\\n        \\\"null\\\"\\n      ]\\n    },\\n    contains: [\\n      hljs.HASH_COMMENT_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.C_NUMBER_MODE,\\n      {\\n        className: 'meta',\\n        begin: '@[A-Za-z]+'\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = golo;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/golo.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/gradle.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/gradle.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Gradle\\nDescription: Gradle is an open-source build automation tool focused on flexibility and performance.\\nWebsite: https://gradle.org\\nAuthor: Damian Mee <mee.damian@gmail.com>\\n*/\\n\\nfunction gradle(hljs) {\\n  const KEYWORDS = [\\n    \\\"task\\\",\\n    \\\"project\\\",\\n    \\\"allprojects\\\",\\n    \\\"subprojects\\\",\\n    \\\"artifacts\\\",\\n    \\\"buildscript\\\",\\n    \\\"configurations\\\",\\n    \\\"dependencies\\\",\\n    \\\"repositories\\\",\\n    \\\"sourceSets\\\",\\n    \\\"description\\\",\\n    \\\"delete\\\",\\n    \\\"from\\\",\\n    \\\"into\\\",\\n    \\\"include\\\",\\n    \\\"exclude\\\",\\n    \\\"source\\\",\\n    \\\"classpath\\\",\\n    \\\"destinationDir\\\",\\n    \\\"includes\\\",\\n    \\\"options\\\",\\n    \\\"sourceCompatibility\\\",\\n    \\\"targetCompatibility\\\",\\n    \\\"group\\\",\\n    \\\"flatDir\\\",\\n    \\\"doLast\\\",\\n    \\\"doFirst\\\",\\n    \\\"flatten\\\",\\n    \\\"todir\\\",\\n    \\\"fromdir\\\",\\n    \\\"ant\\\",\\n    \\\"def\\\",\\n    \\\"abstract\\\",\\n    \\\"break\\\",\\n    \\\"case\\\",\\n    \\\"catch\\\",\\n    \\\"continue\\\",\\n    \\\"default\\\",\\n    \\\"do\\\",\\n    \\\"else\\\",\\n    \\\"extends\\\",\\n    \\\"final\\\",\\n    \\\"finally\\\",\\n    \\\"for\\\",\\n    \\\"if\\\",\\n    \\\"implements\\\",\\n    \\\"instanceof\\\",\\n    \\\"native\\\",\\n    \\\"new\\\",\\n    \\\"private\\\",\\n    \\\"protected\\\",\\n    \\\"public\\\",\\n    \\\"return\\\",\\n    \\\"static\\\",\\n    \\\"switch\\\",\\n    \\\"synchronized\\\",\\n    \\\"throw\\\",\\n    \\\"throws\\\",\\n    \\\"transient\\\",\\n    \\\"try\\\",\\n    \\\"volatile\\\",\\n    \\\"while\\\",\\n    \\\"strictfp\\\",\\n    \\\"package\\\",\\n    \\\"import\\\",\\n    \\\"false\\\",\\n    \\\"null\\\",\\n    \\\"super\\\",\\n    \\\"this\\\",\\n    \\\"true\\\",\\n    \\\"antlrtask\\\",\\n    \\\"checkstyle\\\",\\n    \\\"codenarc\\\",\\n    \\\"copy\\\",\\n    \\\"boolean\\\",\\n    \\\"byte\\\",\\n    \\\"char\\\",\\n    \\\"class\\\",\\n    \\\"double\\\",\\n    \\\"float\\\",\\n    \\\"int\\\",\\n    \\\"interface\\\",\\n    \\\"long\\\",\\n    \\\"short\\\",\\n    \\\"void\\\",\\n    \\\"compile\\\",\\n    \\\"runTime\\\",\\n    \\\"file\\\",\\n    \\\"fileTree\\\",\\n    \\\"abs\\\",\\n    \\\"any\\\",\\n    \\\"append\\\",\\n    \\\"asList\\\",\\n    \\\"asWritable\\\",\\n    \\\"call\\\",\\n    \\\"collect\\\",\\n    \\\"compareTo\\\",\\n    \\\"count\\\",\\n    \\\"div\\\",\\n    \\\"dump\\\",\\n    \\\"each\\\",\\n    \\\"eachByte\\\",\\n    \\\"eachFile\\\",\\n    \\\"eachLine\\\",\\n    \\\"every\\\",\\n    \\\"find\\\",\\n    \\\"findAll\\\",\\n    \\\"flatten\\\",\\n    \\\"getAt\\\",\\n    \\\"getErr\\\",\\n    \\\"getIn\\\",\\n    \\\"getOut\\\",\\n    \\\"getText\\\",\\n    \\\"grep\\\",\\n    \\\"immutable\\\",\\n    \\\"inject\\\",\\n    \\\"inspect\\\",\\n    \\\"intersect\\\",\\n    \\\"invokeMethods\\\",\\n    \\\"isCase\\\",\\n    \\\"join\\\",\\n    \\\"leftShift\\\",\\n    \\\"minus\\\",\\n    \\\"multiply\\\",\\n    \\\"newInputStream\\\",\\n    \\\"newOutputStream\\\",\\n    \\\"newPrintWriter\\\",\\n    \\\"newReader\\\",\\n    \\\"newWriter\\\",\\n    \\\"next\\\",\\n    \\\"plus\\\",\\n    \\\"pop\\\",\\n    \\\"power\\\",\\n    \\\"previous\\\",\\n    \\\"print\\\",\\n    \\\"println\\\",\\n    \\\"push\\\",\\n    \\\"putAt\\\",\\n    \\\"read\\\",\\n    \\\"readBytes\\\",\\n    \\\"readLines\\\",\\n    \\\"reverse\\\",\\n    \\\"reverseEach\\\",\\n    \\\"round\\\",\\n    \\\"size\\\",\\n    \\\"sort\\\",\\n    \\\"splitEachLine\\\",\\n    \\\"step\\\",\\n    \\\"subMap\\\",\\n    \\\"times\\\",\\n    \\\"toInteger\\\",\\n    \\\"toList\\\",\\n    \\\"tokenize\\\",\\n    \\\"upto\\\",\\n    \\\"waitForOrKill\\\",\\n    \\\"withPrintWriter\\\",\\n    \\\"withReader\\\",\\n    \\\"withStream\\\",\\n    \\\"withWriter\\\",\\n    \\\"withWriterAppend\\\",\\n    \\\"write\\\",\\n    \\\"writeLine\\\"\\n  ];\\n  return {\\n    name: 'Gradle',\\n    case_insensitive: true,\\n    keywords: KEYWORDS,\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.NUMBER_MODE,\\n      hljs.REGEXP_MODE\\n\\n    ]\\n  };\\n}\\n\\nmodule.exports = gradle;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/gradle.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/graphql.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/graphql.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\n Language: GraphQL\\n Author: John Foster (GH jf990), and others\\n Description: GraphQL is a query language for APIs\\n Category: web, common\\n*/\\n\\n/** @type LanguageFn */\\nfunction graphql(hljs) {\\n  const regex = hljs.regex;\\n  const GQL_NAME = /[_A-Za-z][_0-9A-Za-z]*/;\\n  return {\\n    name: \\\"GraphQL\\\",\\n    aliases: [ \\\"gql\\\" ],\\n    case_insensitive: true,\\n    disableAutodetect: false,\\n    keywords: {\\n      keyword: [\\n        \\\"query\\\",\\n        \\\"mutation\\\",\\n        \\\"subscription\\\",\\n        \\\"type\\\",\\n        \\\"input\\\",\\n        \\\"schema\\\",\\n        \\\"directive\\\",\\n        \\\"interface\\\",\\n        \\\"union\\\",\\n        \\\"scalar\\\",\\n        \\\"fragment\\\",\\n        \\\"enum\\\",\\n        \\\"on\\\"\\n      ],\\n      literal: [\\n        \\\"true\\\",\\n        \\\"false\\\",\\n        \\\"null\\\"\\n      ]\\n    },\\n    contains: [\\n      hljs.HASH_COMMENT_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.NUMBER_MODE,\\n      {\\n        scope: \\\"punctuation\\\",\\n        match: /[.]{3}/,\\n        relevance: 0\\n      },\\n      {\\n        scope: \\\"punctuation\\\",\\n        begin: /[\\\\!\\\\(\\\\)\\\\:\\\\=\\\\[\\\\]\\\\{\\\\|\\\\}]{1}/,\\n        relevance: 0\\n      },\\n      {\\n        scope: \\\"variable\\\",\\n        begin: /\\\\$/,\\n        end: /\\\\W/,\\n        excludeEnd: true,\\n        relevance: 0\\n      },\\n      {\\n        scope: \\\"meta\\\",\\n        match: /@\\\\w+/,\\n        excludeEnd: true\\n      },\\n      {\\n        scope: \\\"symbol\\\",\\n        begin: regex.concat(GQL_NAME, regex.lookahead(/\\\\s*:/)),\\n        relevance: 0\\n      }\\n    ],\\n    illegal: [\\n      /[;<']/,\\n      /BEGIN/\\n    ]\\n  };\\n}\\n\\nmodule.exports = graphql;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/graphql.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/groovy.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/groovy.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\n Language: Groovy\\n Author: Guillaume Laforge <glaforge@gmail.com>\\n Description: Groovy programming language implementation inspired from Vsevolod's Java mode\\n Website: https://groovy-lang.org\\n */\\n\\nfunction variants(variants, obj = {}) {\\n  obj.variants = variants;\\n  return obj;\\n}\\n\\nfunction groovy(hljs) {\\n  const regex = hljs.regex;\\n  const IDENT_RE = '[A-Za-z0-9_$]+';\\n  const COMMENT = variants([\\n    hljs.C_LINE_COMMENT_MODE,\\n    hljs.C_BLOCK_COMMENT_MODE,\\n    hljs.COMMENT(\\n      '/\\\\\\\\*\\\\\\\\*',\\n      '\\\\\\\\*/',\\n      {\\n        relevance: 0,\\n        contains: [\\n          {\\n            // eat up @'s in emails to prevent them to be recognized as doctags\\n            begin: /\\\\w+@/,\\n            relevance: 0\\n          },\\n          {\\n            className: 'doctag',\\n            begin: '@[A-Za-z]+'\\n          }\\n        ]\\n      }\\n    )\\n  ]);\\n  const REGEXP = {\\n    className: 'regexp',\\n    begin: /~?\\\\/[^\\\\/\\\\n]+\\\\//,\\n    contains: [ hljs.BACKSLASH_ESCAPE ]\\n  };\\n  const NUMBER = variants([\\n    hljs.BINARY_NUMBER_MODE,\\n    hljs.C_NUMBER_MODE\\n  ]);\\n  const STRING = variants([\\n    {\\n      begin: /\\\"\\\"\\\"/,\\n      end: /\\\"\\\"\\\"/\\n    },\\n    {\\n      begin: /'''/,\\n      end: /'''/\\n    },\\n    {\\n      begin: \\\"\\\\\\\\$/\\\",\\n      end: \\\"/\\\\\\\\$\\\",\\n      relevance: 10\\n    },\\n    hljs.APOS_STRING_MODE,\\n    hljs.QUOTE_STRING_MODE\\n  ],\\n  { className: \\\"string\\\" }\\n  );\\n\\n  const CLASS_DEFINITION = {\\n    match: [\\n      /(class|interface|trait|enum|extends|implements)/,\\n      /\\\\s+/,\\n      hljs.UNDERSCORE_IDENT_RE\\n    ],\\n    scope: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.class\\\",\\n    }\\n  };\\n  const TYPES = [\\n    \\\"byte\\\",\\n    \\\"short\\\",\\n    \\\"char\\\",\\n    \\\"int\\\",\\n    \\\"long\\\",\\n    \\\"boolean\\\",\\n    \\\"float\\\",\\n    \\\"double\\\",\\n    \\\"void\\\"\\n  ];\\n  const KEYWORDS = [\\n    // groovy specific keywords\\n    \\\"def\\\",\\n    \\\"as\\\",\\n    \\\"in\\\",\\n    \\\"assert\\\",\\n    \\\"trait\\\",\\n    // common keywords with Java\\n    \\\"abstract\\\",\\n    \\\"static\\\",\\n    \\\"volatile\\\",\\n    \\\"transient\\\",\\n    \\\"public\\\",\\n    \\\"private\\\",\\n    \\\"protected\\\",\\n    \\\"synchronized\\\",\\n    \\\"final\\\",\\n    \\\"class\\\",\\n    \\\"interface\\\",\\n    \\\"enum\\\",\\n    \\\"if\\\",\\n    \\\"else\\\",\\n    \\\"for\\\",\\n    \\\"while\\\",\\n    \\\"switch\\\",\\n    \\\"case\\\",\\n    \\\"break\\\",\\n    \\\"default\\\",\\n    \\\"continue\\\",\\n    \\\"throw\\\",\\n    \\\"throws\\\",\\n    \\\"try\\\",\\n    \\\"catch\\\",\\n    \\\"finally\\\",\\n    \\\"implements\\\",\\n    \\\"extends\\\",\\n    \\\"new\\\",\\n    \\\"import\\\",\\n    \\\"package\\\",\\n    \\\"return\\\",\\n    \\\"instanceof\\\"\\n  ];\\n\\n  return {\\n    name: 'Groovy',\\n    keywords: {\\n      \\\"variable.language\\\": 'this super',\\n      literal: 'true false null',\\n      type: TYPES,\\n      keyword: KEYWORDS\\n    },\\n    contains: [\\n      hljs.SHEBANG({\\n        binary: \\\"groovy\\\",\\n        relevance: 10\\n      }),\\n      COMMENT,\\n      STRING,\\n      REGEXP,\\n      NUMBER,\\n      CLASS_DEFINITION,\\n      {\\n        className: 'meta',\\n        begin: '@[A-Za-z]+',\\n        relevance: 0\\n      },\\n      {\\n        // highlight map keys and named parameters as attrs\\n        className: 'attr',\\n        begin: IDENT_RE + '[ \\\\t]*:',\\n        relevance: 0\\n      },\\n      {\\n        // catch middle element of the ternary operator\\n        // to avoid highlight it as a label, named parameter, or map key\\n        begin: /\\\\?/,\\n        end: /:/,\\n        relevance: 0,\\n        contains: [\\n          COMMENT,\\n          STRING,\\n          REGEXP,\\n          NUMBER,\\n          'self'\\n        ]\\n      },\\n      {\\n        // highlight labeled statements\\n        className: 'symbol',\\n        begin: '^[ \\\\t]*' + regex.lookahead(IDENT_RE + ':'),\\n        excludeBegin: true,\\n        end: IDENT_RE + ':',\\n        relevance: 0\\n      }\\n    ],\\n    illegal: /#|<\\\\//\\n  };\\n}\\n\\nmodule.exports = groovy;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/groovy.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/haml.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/haml.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: HAML\\nRequires: ruby.js\\nAuthor: Dan Allen <dan.j.allen@gmail.com>\\nWebsite: http://haml.info\\nCategory: template\\n*/\\n\\n// TODO support filter tags like :javascript, support inline HTML\\nfunction haml(hljs) {\\n  return {\\n    name: 'HAML',\\n    case_insensitive: true,\\n    contains: [\\n      {\\n        className: 'meta',\\n        begin: '^!!!( (5|1\\\\\\\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\\\\\\\b.*))?$',\\n        relevance: 10\\n      },\\n      // FIXME these comments should be allowed to span indented lines\\n      hljs.COMMENT(\\n        '^\\\\\\\\s*(!=#|=#|-#|/).*$',\\n        null,\\n        { relevance: 0 }\\n      ),\\n      {\\n        begin: '^\\\\\\\\s*(-|=|!=)(?!#)',\\n        end: /$/,\\n        subLanguage: 'ruby',\\n        excludeBegin: true,\\n        excludeEnd: true\\n      },\\n      {\\n        className: 'tag',\\n        begin: '^\\\\\\\\s*%',\\n        contains: [\\n          {\\n            className: 'selector-tag',\\n            begin: '\\\\\\\\w+'\\n          },\\n          {\\n            className: 'selector-id',\\n            begin: '#[\\\\\\\\w-]+'\\n          },\\n          {\\n            className: 'selector-class',\\n            begin: '\\\\\\\\.[\\\\\\\\w-]+'\\n          },\\n          {\\n            begin: /\\\\{\\\\s*/,\\n            end: /\\\\s*\\\\}/,\\n            contains: [\\n              {\\n                begin: ':\\\\\\\\w+\\\\\\\\s*=>',\\n                end: ',\\\\\\\\s+',\\n                returnBegin: true,\\n                endsWithParent: true,\\n                contains: [\\n                  {\\n                    className: 'attr',\\n                    begin: ':\\\\\\\\w+'\\n                  },\\n                  hljs.APOS_STRING_MODE,\\n                  hljs.QUOTE_STRING_MODE,\\n                  {\\n                    begin: '\\\\\\\\w+',\\n                    relevance: 0\\n                  }\\n                ]\\n              }\\n            ]\\n          },\\n          {\\n            begin: '\\\\\\\\(\\\\\\\\s*',\\n            end: '\\\\\\\\s*\\\\\\\\)',\\n            excludeEnd: true,\\n            contains: [\\n              {\\n                begin: '\\\\\\\\w+\\\\\\\\s*=',\\n                end: '\\\\\\\\s+',\\n                returnBegin: true,\\n                endsWithParent: true,\\n                contains: [\\n                  {\\n                    className: 'attr',\\n                    begin: '\\\\\\\\w+',\\n                    relevance: 0\\n                  },\\n                  hljs.APOS_STRING_MODE,\\n                  hljs.QUOTE_STRING_MODE,\\n                  {\\n                    begin: '\\\\\\\\w+',\\n                    relevance: 0\\n                  }\\n                ]\\n              }\\n            ]\\n          }\\n        ]\\n      },\\n      { begin: '^\\\\\\\\s*[=~]\\\\\\\\s*' },\\n      {\\n        begin: /#\\\\{/,\\n        end: /\\\\}/,\\n        subLanguage: 'ruby',\\n        excludeBegin: true,\\n        excludeEnd: true\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = haml;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/haml.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/handlebars.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/handlebars.js ***!\n  \\***************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Handlebars\\nRequires: xml.js\\nAuthor: Robin Ward <robin.ward@gmail.com>\\nDescription: Matcher for Handlebars as well as EmberJS additions.\\nWebsite: https://handlebarsjs.com\\nCategory: template\\n*/\\n\\nfunction handlebars(hljs) {\\n  const regex = hljs.regex;\\n  const BUILT_INS = {\\n    $pattern: /[\\\\w.\\\\/]+/,\\n    built_in: [\\n      'action',\\n      'bindattr',\\n      'collection',\\n      'component',\\n      'concat',\\n      'debugger',\\n      'each',\\n      'each-in',\\n      'get',\\n      'hash',\\n      'if',\\n      'in',\\n      'input',\\n      'link-to',\\n      'loc',\\n      'log',\\n      'lookup',\\n      'mut',\\n      'outlet',\\n      'partial',\\n      'query-params',\\n      'render',\\n      'template',\\n      'textarea',\\n      'unbound',\\n      'unless',\\n      'view',\\n      'with',\\n      'yield'\\n    ]\\n  };\\n\\n  const LITERALS = {\\n    $pattern: /[\\\\w.\\\\/]+/,\\n    literal: [\\n      'true',\\n      'false',\\n      'undefined',\\n      'null'\\n    ]\\n  };\\n\\n  // as defined in https://handlebarsjs.com/guide/expressions.html#literal-segments\\n  // this regex matches literal segments like ' abc ' or [ abc ] as well as helpers and paths\\n  // like a/b, ./abc/cde, and abc.bcd\\n\\n  const DOUBLE_QUOTED_ID_REGEX = /\\\"\\\"|\\\"[^\\\"]+\\\"/;\\n  const SINGLE_QUOTED_ID_REGEX = /''|'[^']+'/;\\n  const BRACKET_QUOTED_ID_REGEX = /\\\\[\\\\]|\\\\[[^\\\\]]+\\\\]/;\\n  const PLAIN_ID_REGEX = /[^\\\\s!\\\"#%&'()*+,.\\\\/;<=>@\\\\[\\\\\\\\\\\\]^`{|}~]+/;\\n  const PATH_DELIMITER_REGEX = /(\\\\.|\\\\/)/;\\n  const ANY_ID = regex.either(\\n    DOUBLE_QUOTED_ID_REGEX,\\n    SINGLE_QUOTED_ID_REGEX,\\n    BRACKET_QUOTED_ID_REGEX,\\n    PLAIN_ID_REGEX\\n  );\\n\\n  const IDENTIFIER_REGEX = regex.concat(\\n    regex.optional(/\\\\.|\\\\.\\\\/|\\\\//), // relative or absolute path\\n    ANY_ID,\\n    regex.anyNumberOfTimes(regex.concat(\\n      PATH_DELIMITER_REGEX,\\n      ANY_ID\\n    ))\\n  );\\n\\n  // identifier followed by a equal-sign (without the equal sign)\\n  const HASH_PARAM_REGEX = regex.concat(\\n    '(',\\n    BRACKET_QUOTED_ID_REGEX, '|',\\n    PLAIN_ID_REGEX,\\n    ')(?==)'\\n  );\\n\\n  const HELPER_NAME_OR_PATH_EXPRESSION = { begin: IDENTIFIER_REGEX };\\n\\n  const HELPER_PARAMETER = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, { keywords: LITERALS });\\n\\n  const SUB_EXPRESSION = {\\n    begin: /\\\\(/,\\n    end: /\\\\)/\\n    // the \\\"contains\\\" is added below when all necessary sub-modes are defined\\n  };\\n\\n  const HASH = {\\n    // fka \\\"attribute-assignment\\\", parameters of the form 'key=value'\\n    className: 'attr',\\n    begin: HASH_PARAM_REGEX,\\n    relevance: 0,\\n    starts: {\\n      begin: /=/,\\n      end: /=/,\\n      starts: { contains: [\\n        hljs.NUMBER_MODE,\\n        hljs.QUOTE_STRING_MODE,\\n        hljs.APOS_STRING_MODE,\\n        HELPER_PARAMETER,\\n        SUB_EXPRESSION\\n      ] }\\n    }\\n  };\\n\\n  const BLOCK_PARAMS = {\\n    // parameters of the form '{{#with x as | y |}}...{{/with}}'\\n    begin: /as\\\\s+\\\\|/,\\n    keywords: { keyword: 'as' },\\n    end: /\\\\|/,\\n    contains: [\\n      {\\n        // define sub-mode in order to prevent highlighting of block-parameter named \\\"as\\\"\\n        begin: /\\\\w+/ }\\n    ]\\n  };\\n\\n  const HELPER_PARAMETERS = {\\n    contains: [\\n      hljs.NUMBER_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.APOS_STRING_MODE,\\n      BLOCK_PARAMS,\\n      HASH,\\n      HELPER_PARAMETER,\\n      SUB_EXPRESSION\\n    ],\\n    returnEnd: true\\n    // the property \\\"end\\\" is defined through inheritance when the mode is used. If depends\\n    // on the surrounding mode, but \\\"endsWithParent\\\" does not work here (i.e. it includes the\\n    // end-token of the surrounding mode)\\n  };\\n\\n  const SUB_EXPRESSION_CONTENTS = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, {\\n    className: 'name',\\n    keywords: BUILT_INS,\\n    starts: hljs.inherit(HELPER_PARAMETERS, { end: /\\\\)/ })\\n  });\\n\\n  SUB_EXPRESSION.contains = [ SUB_EXPRESSION_CONTENTS ];\\n\\n  const OPENING_BLOCK_MUSTACHE_CONTENTS = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, {\\n    keywords: BUILT_INS,\\n    className: 'name',\\n    starts: hljs.inherit(HELPER_PARAMETERS, { end: /\\\\}\\\\}/ })\\n  });\\n\\n  const CLOSING_BLOCK_MUSTACHE_CONTENTS = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, {\\n    keywords: BUILT_INS,\\n    className: 'name'\\n  });\\n\\n  const BASIC_MUSTACHE_CONTENTS = hljs.inherit(HELPER_NAME_OR_PATH_EXPRESSION, {\\n    className: 'name',\\n    keywords: BUILT_INS,\\n    starts: hljs.inherit(HELPER_PARAMETERS, { end: /\\\\}\\\\}/ })\\n  });\\n\\n  const ESCAPE_MUSTACHE_WITH_PRECEEDING_BACKSLASH = {\\n    begin: /\\\\\\\\\\\\{\\\\{/,\\n    skip: true\\n  };\\n  const PREVENT_ESCAPE_WITH_ANOTHER_PRECEEDING_BACKSLASH = {\\n    begin: /\\\\\\\\\\\\\\\\(?=\\\\{\\\\{)/,\\n    skip: true\\n  };\\n\\n  return {\\n    name: 'Handlebars',\\n    aliases: [\\n      'hbs',\\n      'html.hbs',\\n      'html.handlebars',\\n      'htmlbars'\\n    ],\\n    case_insensitive: true,\\n    subLanguage: 'xml',\\n    contains: [\\n      ESCAPE_MUSTACHE_WITH_PRECEEDING_BACKSLASH,\\n      PREVENT_ESCAPE_WITH_ANOTHER_PRECEEDING_BACKSLASH,\\n      hljs.COMMENT(/\\\\{\\\\{!--/, /--\\\\}\\\\}/),\\n      hljs.COMMENT(/\\\\{\\\\{!/, /\\\\}\\\\}/),\\n      {\\n        // open raw block \\\"{{{{raw}}}} content not evaluated {{{{/raw}}}}\\\"\\n        className: 'template-tag',\\n        begin: /\\\\{\\\\{\\\\{\\\\{(?!\\\\/)/,\\n        end: /\\\\}\\\\}\\\\}\\\\}/,\\n        contains: [ OPENING_BLOCK_MUSTACHE_CONTENTS ],\\n        starts: {\\n          end: /\\\\{\\\\{\\\\{\\\\{\\\\//,\\n          returnEnd: true,\\n          subLanguage: 'xml'\\n        }\\n      },\\n      {\\n        // close raw block\\n        className: 'template-tag',\\n        begin: /\\\\{\\\\{\\\\{\\\\{\\\\//,\\n        end: /\\\\}\\\\}\\\\}\\\\}/,\\n        contains: [ CLOSING_BLOCK_MUSTACHE_CONTENTS ]\\n      },\\n      {\\n        // open block statement\\n        className: 'template-tag',\\n        begin: /\\\\{\\\\{#/,\\n        end: /\\\\}\\\\}/,\\n        contains: [ OPENING_BLOCK_MUSTACHE_CONTENTS ]\\n      },\\n      {\\n        className: 'template-tag',\\n        begin: /\\\\{\\\\{(?=else\\\\}\\\\})/,\\n        end: /\\\\}\\\\}/,\\n        keywords: 'else'\\n      },\\n      {\\n        className: 'template-tag',\\n        begin: /\\\\{\\\\{(?=else if)/,\\n        end: /\\\\}\\\\}/,\\n        keywords: 'else if'\\n      },\\n      {\\n        // closing block statement\\n        className: 'template-tag',\\n        begin: /\\\\{\\\\{\\\\//,\\n        end: /\\\\}\\\\}/,\\n        contains: [ CLOSING_BLOCK_MUSTACHE_CONTENTS ]\\n      },\\n      {\\n        // template variable or helper-call that is NOT html-escaped\\n        className: 'template-variable',\\n        begin: /\\\\{\\\\{\\\\{/,\\n        end: /\\\\}\\\\}\\\\}/,\\n        contains: [ BASIC_MUSTACHE_CONTENTS ]\\n      },\\n      {\\n        // template variable or helper-call that is html-escaped\\n        className: 'template-variable',\\n        begin: /\\\\{\\\\{/,\\n        end: /\\\\}\\\\}/,\\n        contains: [ BASIC_MUSTACHE_CONTENTS ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = handlebars;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/handlebars.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/haskell.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/haskell.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Haskell\\nAuthor: Jeremy Hull <sourdrums@gmail.com>\\nContributors: Zena Treep <zena.treep@gmail.com>\\nWebsite: https://www.haskell.org\\nCategory: functional\\n*/\\n\\nfunction haskell(hljs) {\\n  const COMMENT = { variants: [\\n    hljs.COMMENT('--', '$'),\\n    hljs.COMMENT(\\n      /\\\\{-/,\\n      /-\\\\}/,\\n      { contains: [ 'self' ] }\\n    )\\n  ] };\\n\\n  const PRAGMA = {\\n    className: 'meta',\\n    begin: /\\\\{-#/,\\n    end: /#-\\\\}/\\n  };\\n\\n  const PREPROCESSOR = {\\n    className: 'meta',\\n    begin: '^#',\\n    end: '$'\\n  };\\n\\n  const CONSTRUCTOR = {\\n    className: 'type',\\n    begin: '\\\\\\\\b[A-Z][\\\\\\\\w\\\\']*', // TODO: other constructors (build-in, infix).\\n    relevance: 0\\n  };\\n\\n  const LIST = {\\n    begin: '\\\\\\\\(',\\n    end: '\\\\\\\\)',\\n    illegal: '\\\"',\\n    contains: [\\n      PRAGMA,\\n      PREPROCESSOR,\\n      {\\n        className: 'type',\\n        begin: '\\\\\\\\b[A-Z][\\\\\\\\w]*(\\\\\\\\((\\\\\\\\.\\\\\\\\.|,|\\\\\\\\w+)\\\\\\\\))?'\\n      },\\n      hljs.inherit(hljs.TITLE_MODE, { begin: '[_a-z][\\\\\\\\w\\\\']*' }),\\n      COMMENT\\n    ]\\n  };\\n\\n  const RECORD = {\\n    begin: /\\\\{/,\\n    end: /\\\\}/,\\n    contains: LIST.contains\\n  };\\n\\n  /* See:\\n\\n     - https://www.haskell.org/onlinereport/lexemes.html\\n     - https://downloads.haskell.org/ghc/9.0.1/docs/html/users_guide/exts/binary_literals.html\\n     - https://downloads.haskell.org/ghc/9.0.1/docs/html/users_guide/exts/numeric_underscores.html\\n     - https://downloads.haskell.org/ghc/9.0.1/docs/html/users_guide/exts/hex_float_literals.html\\n\\n  */\\n  const decimalDigits = '([0-9]_*)+';\\n  const hexDigits = '([0-9a-fA-F]_*)+';\\n  const binaryDigits = '([01]_*)+';\\n  const octalDigits = '([0-7]_*)+';\\n\\n  const NUMBER = {\\n    className: 'number',\\n    relevance: 0,\\n    variants: [\\n      // decimal floating-point-literal (subsumes decimal-literal)\\n      { match: `\\\\\\\\b(${decimalDigits})(\\\\\\\\.(${decimalDigits}))?` + `([eE][+-]?(${decimalDigits}))?\\\\\\\\b` },\\n      // hexadecimal floating-point-literal (subsumes hexadecimal-literal)\\n      { match: `\\\\\\\\b0[xX]_*(${hexDigits})(\\\\\\\\.(${hexDigits}))?` + `([pP][+-]?(${decimalDigits}))?\\\\\\\\b` },\\n      // octal-literal\\n      { match: `\\\\\\\\b0[oO](${octalDigits})\\\\\\\\b` },\\n      // binary-literal\\n      { match: `\\\\\\\\b0[bB](${binaryDigits})\\\\\\\\b` }\\n    ]\\n  };\\n\\n  return {\\n    name: 'Haskell',\\n    aliases: [ 'hs' ],\\n    keywords:\\n      'let in if then else case of where do module import hiding '\\n      + 'qualified type data newtype deriving class instance as default '\\n      + 'infix infixl infixr foreign export ccall stdcall cplusplus '\\n      + 'jvm dotnet safe unsafe family forall mdo proc rec',\\n    contains: [\\n      // Top-level constructions.\\n      {\\n        beginKeywords: 'module',\\n        end: 'where',\\n        keywords: 'module where',\\n        contains: [\\n          LIST,\\n          COMMENT\\n        ],\\n        illegal: '\\\\\\\\W\\\\\\\\.|;'\\n      },\\n      {\\n        begin: '\\\\\\\\bimport\\\\\\\\b',\\n        end: '$',\\n        keywords: 'import qualified as hiding',\\n        contains: [\\n          LIST,\\n          COMMENT\\n        ],\\n        illegal: '\\\\\\\\W\\\\\\\\.|;'\\n      },\\n      {\\n        className: 'class',\\n        begin: '^(\\\\\\\\s*)?(class|instance)\\\\\\\\b',\\n        end: 'where',\\n        keywords: 'class family instance where',\\n        contains: [\\n          CONSTRUCTOR,\\n          LIST,\\n          COMMENT\\n        ]\\n      },\\n      {\\n        className: 'class',\\n        begin: '\\\\\\\\b(data|(new)?type)\\\\\\\\b',\\n        end: '$',\\n        keywords: 'data family type newtype deriving',\\n        contains: [\\n          PRAGMA,\\n          CONSTRUCTOR,\\n          LIST,\\n          RECORD,\\n          COMMENT\\n        ]\\n      },\\n      {\\n        beginKeywords: 'default',\\n        end: '$',\\n        contains: [\\n          CONSTRUCTOR,\\n          LIST,\\n          COMMENT\\n        ]\\n      },\\n      {\\n        beginKeywords: 'infix infixl infixr',\\n        end: '$',\\n        contains: [\\n          hljs.C_NUMBER_MODE,\\n          COMMENT\\n        ]\\n      },\\n      {\\n        begin: '\\\\\\\\bforeign\\\\\\\\b',\\n        end: '$',\\n        keywords: 'foreign import export ccall stdcall cplusplus jvm '\\n                  + 'dotnet safe unsafe',\\n        contains: [\\n          CONSTRUCTOR,\\n          hljs.QUOTE_STRING_MODE,\\n          COMMENT\\n        ]\\n      },\\n      {\\n        className: 'meta',\\n        begin: '#!\\\\\\\\/usr\\\\\\\\/bin\\\\\\\\/env\\\\ runhaskell',\\n        end: '$'\\n      },\\n      // \\\"Whitespaces\\\".\\n      PRAGMA,\\n      PREPROCESSOR,\\n\\n      // Literals and names.\\n\\n      // Single characters.\\n      {\\n        scope: 'string',\\n        begin: /'(?=\\\\\\\\?.')/,\\n        end: /'/,\\n        contains: [\\n          {\\n            scope: 'char.escape',\\n            match: /\\\\\\\\./,\\n          },\\n        ]\\n      },\\n      hljs.QUOTE_STRING_MODE,\\n      NUMBER,\\n      CONSTRUCTOR,\\n      hljs.inherit(hljs.TITLE_MODE, { begin: '^[_a-z][\\\\\\\\w\\\\']*' }),\\n      COMMENT,\\n      { // No markup, relevance booster\\n        begin: '->|<-' }\\n    ]\\n  };\\n}\\n\\nmodule.exports = haskell;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/haskell.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/haxe.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/haxe.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Haxe\\nDescription: Haxe is an open source toolkit based on a modern, high level, strictly typed programming language.\\nAuthor: Christopher Kaster <ikasoki@gmail.com> (Based on the actionscript.js language file by Alexander Myadzel)\\nContributors: Kenton Hamaluik <kentonh@gmail.com>\\nWebsite: https://haxe.org\\n*/\\n\\nfunction haxe(hljs) {\\n\\n  const HAXE_BASIC_TYPES = 'Int Float String Bool Dynamic Void Array ';\\n\\n  return {\\n    name: 'Haxe',\\n    aliases: [ 'hx' ],\\n    keywords: {\\n      keyword: 'break case cast catch continue default do dynamic else enum extern '\\n               + 'for function here if import in inline never new override package private get set '\\n               + 'public return static super switch this throw trace try typedef untyped using var while '\\n               + HAXE_BASIC_TYPES,\\n      built_in:\\n        'trace this',\\n      literal:\\n        'true false null _'\\n    },\\n    contains: [\\n      {\\n        className: 'string', // interpolate-able strings\\n        begin: '\\\\'',\\n        end: '\\\\'',\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          {\\n            className: 'subst', // interpolation\\n            begin: '\\\\\\\\$\\\\\\\\{',\\n            end: '\\\\\\\\}'\\n          },\\n          {\\n            className: 'subst', // interpolation\\n            begin: '\\\\\\\\$',\\n            end: /\\\\W\\\\}/\\n          }\\n        ]\\n      },\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.C_NUMBER_MODE,\\n      {\\n        className: 'meta', // compiler meta\\n        begin: '@:',\\n        end: '$'\\n      },\\n      {\\n        className: 'meta', // compiler conditionals\\n        begin: '#',\\n        end: '$',\\n        keywords: { keyword: 'if else elseif end error' }\\n      },\\n      {\\n        className: 'type', // function types\\n        begin: ':[ \\\\t]*',\\n        end: '[^A-Za-z0-9_ \\\\t\\\\\\\\->]',\\n        excludeBegin: true,\\n        excludeEnd: true,\\n        relevance: 0\\n      },\\n      {\\n        className: 'type', // types\\n        begin: ':[ \\\\t]*',\\n        end: '\\\\\\\\W',\\n        excludeBegin: true,\\n        excludeEnd: true\\n      },\\n      {\\n        className: 'type', // instantiation\\n        begin: 'new *',\\n        end: '\\\\\\\\W',\\n        excludeBegin: true,\\n        excludeEnd: true\\n      },\\n      {\\n        className: 'class', // enums\\n        beginKeywords: 'enum',\\n        end: '\\\\\\\\{',\\n        contains: [ hljs.TITLE_MODE ]\\n      },\\n      {\\n        className: 'class', // abstracts\\n        beginKeywords: 'abstract',\\n        end: '[\\\\\\\\{$]',\\n        contains: [\\n          {\\n            className: 'type',\\n            begin: '\\\\\\\\(',\\n            end: '\\\\\\\\)',\\n            excludeBegin: true,\\n            excludeEnd: true\\n          },\\n          {\\n            className: 'type',\\n            begin: 'from +',\\n            end: '\\\\\\\\W',\\n            excludeBegin: true,\\n            excludeEnd: true\\n          },\\n          {\\n            className: 'type',\\n            begin: 'to +',\\n            end: '\\\\\\\\W',\\n            excludeBegin: true,\\n            excludeEnd: true\\n          },\\n          hljs.TITLE_MODE\\n        ],\\n        keywords: { keyword: 'abstract from to' }\\n      },\\n      {\\n        className: 'class', // classes\\n        begin: '\\\\\\\\b(class|interface) +',\\n        end: '[\\\\\\\\{$]',\\n        excludeEnd: true,\\n        keywords: 'class interface',\\n        contains: [\\n          {\\n            className: 'keyword',\\n            begin: '\\\\\\\\b(extends|implements) +',\\n            keywords: 'extends implements',\\n            contains: [\\n              {\\n                className: 'type',\\n                begin: hljs.IDENT_RE,\\n                relevance: 0\\n              }\\n            ]\\n          },\\n          hljs.TITLE_MODE\\n        ]\\n      },\\n      {\\n        className: 'function',\\n        beginKeywords: 'function',\\n        end: '\\\\\\\\(',\\n        excludeEnd: true,\\n        illegal: '\\\\\\\\S',\\n        contains: [ hljs.TITLE_MODE ]\\n      }\\n    ],\\n    illegal: /<\\\\//\\n  };\\n}\\n\\nmodule.exports = haxe;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/haxe.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/hsp.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/hsp.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: HSP\\nAuthor: prince <MC.prince.0203@gmail.com>\\nWebsite: https://en.wikipedia.org/wiki/Hot_Soup_Processor\\nCategory: scripting\\n*/\\n\\nfunction hsp(hljs) {\\n  return {\\n    name: 'HSP',\\n    case_insensitive: true,\\n    keywords: {\\n      $pattern: /[\\\\w._]+/,\\n      keyword: 'goto gosub return break repeat loop continue wait await dim sdim foreach dimtype dup dupptr end stop newmod delmod mref run exgoto on mcall assert logmes newlab resume yield onexit onerror onkey onclick oncmd exist delete mkdir chdir dirlist bload bsave bcopy memfile if else poke wpoke lpoke getstr chdpm memexpand memcpy memset notesel noteadd notedel noteload notesave randomize noteunsel noteget split strrep setease button chgdisp exec dialog mmload mmplay mmstop mci pset pget syscolor mes print title pos circle cls font sysfont objsize picload color palcolor palette redraw width gsel gcopy gzoom gmode bmpsave hsvcolor getkey listbox chkbox combox input mesbox buffer screen bgscr mouse objsel groll line clrobj boxf objprm objmode stick grect grotate gsquare gradf objimage objskip objenable celload celdiv celput newcom querycom delcom cnvstow comres axobj winobj sendmsg comevent comevarg sarrayconv callfunc cnvwtos comevdisp libptr system hspstat hspver stat cnt err strsize looplev sublev iparam wparam lparam refstr refdval int rnd strlen length length2 length3 length4 vartype gettime peek wpeek lpeek varptr varuse noteinfo instr abs limit getease str strmid strf getpath strtrim sin cos tan atan sqrt double absf expf logf limitf powf geteasef mousex mousey mousew hwnd hinstance hdc ginfo objinfo dirinfo sysinfo thismod __hspver__ __hsp30__ __date__ __time__ __line__ __file__ _debug __hspdef__ and or xor not screen_normal screen_palette screen_hide screen_fixedsize screen_tool screen_frame gmode_gdi gmode_mem gmode_rgb0 gmode_alpha gmode_rgb0alpha gmode_add gmode_sub gmode_pixela ginfo_mx ginfo_my ginfo_act ginfo_sel ginfo_wx1 ginfo_wy1 ginfo_wx2 ginfo_wy2 ginfo_vx ginfo_vy ginfo_sizex ginfo_sizey ginfo_winx ginfo_winy ginfo_mesx ginfo_mesy ginfo_r ginfo_g ginfo_b ginfo_paluse ginfo_dispx ginfo_dispy ginfo_cx ginfo_cy ginfo_intid ginfo_newid ginfo_sx ginfo_sy objinfo_mode objinfo_bmscr objinfo_hwnd notemax notesize dir_cur dir_exe dir_win dir_sys dir_cmdline dir_desktop dir_mydoc dir_tv font_normal font_bold font_italic font_underline font_strikeout font_antialias objmode_normal objmode_guifont objmode_usefont gsquare_grad msgothic msmincho do until while wend for next _break _continue switch case default swbreak swend ddim ldim alloc m_pi rad2deg deg2rad ease_linear ease_quad_in ease_quad_out ease_quad_inout ease_cubic_in ease_cubic_out ease_cubic_inout ease_quartic_in ease_quartic_out ease_quartic_inout ease_bounce_in ease_bounce_out ease_bounce_inout ease_shake_in ease_shake_out ease_shake_inout ease_loop'\\n    },\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.APOS_STRING_MODE,\\n\\n      {\\n        // multi-line string\\n        className: 'string',\\n        begin: /\\\\{\\\"/,\\n        end: /\\\"\\\\}/,\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      },\\n\\n      hljs.COMMENT(';', '$', { relevance: 0 }),\\n\\n      {\\n        // pre-processor\\n        className: 'meta',\\n        begin: '#',\\n        end: '$',\\n        keywords: { keyword: 'addion cfunc cmd cmpopt comfunc const defcfunc deffunc define else endif enum epack func global if ifdef ifndef include modcfunc modfunc modinit modterm module pack packopt regcmd runtime undef usecom uselib' },\\n        contains: [\\n          hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' }),\\n          hljs.NUMBER_MODE,\\n          hljs.C_NUMBER_MODE,\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE\\n        ]\\n      },\\n\\n      {\\n        // label\\n        className: 'symbol',\\n        begin: '^\\\\\\\\*(\\\\\\\\w+|@)'\\n      },\\n\\n      hljs.NUMBER_MODE,\\n      hljs.C_NUMBER_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = hsp;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/hsp.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/http.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/http.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: HTTP\\nDescription: HTTP request and response headers with automatic body highlighting\\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\\nCategory: protocols, web\\nWebsite: https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview\\n*/\\n\\nfunction http(hljs) {\\n  const regex = hljs.regex;\\n  const VERSION = 'HTTP/([32]|1\\\\\\\\.[01])';\\n  const HEADER_NAME = /[A-Za-z][A-Za-z0-9-]*/;\\n  const HEADER = {\\n    className: 'attribute',\\n    begin: regex.concat('^', HEADER_NAME, '(?=\\\\\\\\:\\\\\\\\s)'),\\n    starts: { contains: [\\n      {\\n        className: \\\"punctuation\\\",\\n        begin: /: /,\\n        relevance: 0,\\n        starts: {\\n          end: '$',\\n          relevance: 0\\n        }\\n      }\\n    ] }\\n  };\\n  const HEADERS_AND_BODY = [\\n    HEADER,\\n    {\\n      begin: '\\\\\\\\n\\\\\\\\n',\\n      starts: {\\n        subLanguage: [],\\n        endsWithParent: true\\n      }\\n    }\\n  ];\\n\\n  return {\\n    name: 'HTTP',\\n    aliases: [ 'https' ],\\n    illegal: /\\\\S/,\\n    contains: [\\n      // response\\n      {\\n        begin: '^(?=' + VERSION + \\\" \\\\\\\\d{3})\\\",\\n        end: /$/,\\n        contains: [\\n          {\\n            className: \\\"meta\\\",\\n            begin: VERSION\\n          },\\n          {\\n            className: 'number',\\n            begin: '\\\\\\\\b\\\\\\\\d{3}\\\\\\\\b'\\n          }\\n        ],\\n        starts: {\\n          end: /\\\\b\\\\B/,\\n          illegal: /\\\\S/,\\n          contains: HEADERS_AND_BODY\\n        }\\n      },\\n      // request\\n      {\\n        begin: '(?=^[A-Z]+ (.*?) ' + VERSION + '$)',\\n        end: /$/,\\n        contains: [\\n          {\\n            className: 'string',\\n            begin: ' ',\\n            end: ' ',\\n            excludeBegin: true,\\n            excludeEnd: true\\n          },\\n          {\\n            className: \\\"meta\\\",\\n            begin: VERSION\\n          },\\n          {\\n            className: 'keyword',\\n            begin: '[A-Z]+'\\n          }\\n        ],\\n        starts: {\\n          end: /\\\\b\\\\B/,\\n          illegal: /\\\\S/,\\n          contains: HEADERS_AND_BODY\\n        }\\n      },\\n      // to allow headers to work even without a preamble\\n      hljs.inherit(HEADER, { relevance: 0 })\\n    ]\\n  };\\n}\\n\\nmodule.exports = http;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/http.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/hy.js\":\n/*!*******************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/hy.js ***!\n  \\*******************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Hy\\nDescription: Hy is a wonderful dialect of Lisp that’s embedded in Python.\\nAuthor: Sergey Sobko <s.sobko@profitware.ru>\\nWebsite: http://docs.hylang.org/en/stable/\\nCategory: lisp\\n*/\\n\\nfunction hy(hljs) {\\n  const SYMBOLSTART = 'a-zA-Z_\\\\\\\\-!.?+*=<>&#\\\\'';\\n  const SYMBOL_RE = '[' + SYMBOLSTART + '][' + SYMBOLSTART + '0-9/;:]*';\\n  const keywords = {\\n    $pattern: SYMBOL_RE,\\n    built_in:\\n      // keywords\\n      '!= % %= & &= * ** **= *= *map '\\n      + '+ += , --build-class-- --import-- -= . / // //= '\\n      + '/= < << <<= <= = > >= >> >>= '\\n      + '@ @= ^ ^= abs accumulate all and any ap-compose '\\n      + 'ap-dotimes ap-each ap-each-while ap-filter ap-first ap-if ap-last ap-map ap-map-when ap-pipe '\\n      + 'ap-reduce ap-reject apply as-> ascii assert assoc bin break butlast '\\n      + 'callable calling-module-name car case cdr chain chr coll? combinations compile '\\n      + 'compress cond cons cons? continue count curry cut cycle dec '\\n      + 'def default-method defclass defmacro defmacro-alias defmacro/g! defmain defmethod defmulti defn '\\n      + 'defn-alias defnc defnr defreader defseq del delattr delete-route dict-comp dir '\\n      + 'disassemble dispatch-reader-macro distinct divmod do doto drop drop-last drop-while empty? '\\n      + 'end-sequence eval eval-and-compile eval-when-compile even? every? except exec filter first '\\n      + 'flatten float? fn fnc fnr for for* format fraction genexpr '\\n      + 'gensym get getattr global globals group-by hasattr hash hex id '\\n      + 'identity if if* if-not if-python2 import in inc input instance? '\\n      + 'integer integer-char? integer? interleave interpose is is-coll is-cons is-empty is-even '\\n      + 'is-every is-float is-instance is-integer is-integer-char is-iterable is-iterator is-keyword is-neg is-none '\\n      + 'is-not is-numeric is-odd is-pos is-string is-symbol is-zero isinstance islice issubclass '\\n      + 'iter iterable? iterate iterator? keyword keyword? lambda last len let '\\n      + 'lif lif-not list* list-comp locals loop macro-error macroexpand macroexpand-1 macroexpand-all '\\n      + 'map max merge-with method-decorator min multi-decorator multicombinations name neg? next '\\n      + 'none? nonlocal not not-in not? nth numeric? oct odd? open '\\n      + 'or ord partition permutations pos? post-route postwalk pow prewalk print '\\n      + 'product profile/calls profile/cpu put-route quasiquote quote raise range read read-str '\\n      + 'recursive-replace reduce remove repeat repeatedly repr require rest round route '\\n      + 'route-with-methods rwm second seq set-comp setattr setv some sorted string '\\n      + 'string? sum switch symbol? take take-nth take-while tee try unless '\\n      + 'unquote unquote-splicing vars walk when while with with* with-decorator with-gensyms '\\n      + 'xi xor yield yield-from zero? zip zip-longest | |= ~'\\n  };\\n\\n  const SIMPLE_NUMBER_RE = '[-+]?\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+)?';\\n\\n  const SYMBOL = {\\n    begin: SYMBOL_RE,\\n    relevance: 0\\n  };\\n  const NUMBER = {\\n    className: 'number',\\n    begin: SIMPLE_NUMBER_RE,\\n    relevance: 0\\n  };\\n  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });\\n  const COMMENT = hljs.COMMENT(\\n    ';',\\n    '$',\\n    { relevance: 0 }\\n  );\\n  const LITERAL = {\\n    className: 'literal',\\n    begin: /\\\\b([Tt]rue|[Ff]alse|nil|None)\\\\b/\\n  };\\n  const COLLECTION = {\\n    begin: '[\\\\\\\\[\\\\\\\\{]',\\n    end: '[\\\\\\\\]\\\\\\\\}]',\\n    relevance: 0\\n  };\\n  const HINT = {\\n    className: 'comment',\\n    begin: '\\\\\\\\^' + SYMBOL_RE\\n  };\\n  const HINT_COL = hljs.COMMENT('\\\\\\\\^\\\\\\\\{', '\\\\\\\\}');\\n  const KEY = {\\n    className: 'symbol',\\n    begin: '[:]{1,2}' + SYMBOL_RE\\n  };\\n  const LIST = {\\n    begin: '\\\\\\\\(',\\n    end: '\\\\\\\\)'\\n  };\\n  const BODY = {\\n    endsWithParent: true,\\n    relevance: 0\\n  };\\n  const NAME = {\\n    className: 'name',\\n    relevance: 0,\\n    keywords: keywords,\\n    begin: SYMBOL_RE,\\n    starts: BODY\\n  };\\n  const DEFAULT_CONTAINS = [\\n    LIST,\\n    STRING,\\n    HINT,\\n    HINT_COL,\\n    COMMENT,\\n    KEY,\\n    COLLECTION,\\n    NUMBER,\\n    LITERAL,\\n    SYMBOL\\n  ];\\n\\n  LIST.contains = [\\n    hljs.COMMENT('comment', ''),\\n    NAME,\\n    BODY\\n  ];\\n  BODY.contains = DEFAULT_CONTAINS;\\n  COLLECTION.contains = DEFAULT_CONTAINS;\\n\\n  return {\\n    name: 'Hy',\\n    aliases: [ 'hylang' ],\\n    illegal: /\\\\S/,\\n    contains: [\\n      hljs.SHEBANG(),\\n      LIST,\\n      STRING,\\n      HINT,\\n      HINT_COL,\\n      COMMENT,\\n      KEY,\\n      COLLECTION,\\n      NUMBER,\\n      LITERAL\\n    ]\\n  };\\n}\\n\\nmodule.exports = hy;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/hy.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/inform7.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/inform7.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Inform 7\\nAuthor: Bruno Dias <bruno.r.dias@gmail.com>\\nDescription: Language definition for Inform 7, a DSL for writing parser interactive fiction.\\nWebsite: http://inform7.com\\n*/\\n\\nfunction inform7(hljs) {\\n  const START_BRACKET = '\\\\\\\\[';\\n  const END_BRACKET = '\\\\\\\\]';\\n  return {\\n    name: 'Inform 7',\\n    aliases: [ 'i7' ],\\n    case_insensitive: true,\\n    keywords: {\\n      // Some keywords more or less unique to I7, for relevance.\\n      keyword:\\n        // kind:\\n        'thing room person man woman animal container '\\n        + 'supporter backdrop door '\\n        // characteristic:\\n        + 'scenery open closed locked inside gender '\\n        // verb:\\n        + 'is are say understand '\\n        // misc keyword:\\n        + 'kind of rule' },\\n    contains: [\\n      {\\n        className: 'string',\\n        begin: '\\\"',\\n        end: '\\\"',\\n        relevance: 0,\\n        contains: [\\n          {\\n            className: 'subst',\\n            begin: START_BRACKET,\\n            end: END_BRACKET\\n          }\\n        ]\\n      },\\n      {\\n        className: 'section',\\n        begin: /^(Volume|Book|Part|Chapter|Section|Table)\\\\b/,\\n        end: '$'\\n      },\\n      {\\n        // Rule definition\\n        // This is here for relevance.\\n        begin: /^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\\\\b/,\\n        end: ':',\\n        contains: [\\n          {\\n            // Rule name\\n            begin: '\\\\\\\\(This',\\n            end: '\\\\\\\\)'\\n          }\\n        ]\\n      },\\n      {\\n        className: 'comment',\\n        begin: START_BRACKET,\\n        end: END_BRACKET,\\n        contains: [ 'self' ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = inform7;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/inform7.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/ini.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/ini.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: TOML, also INI\\nDescription: TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics.\\nContributors: Guillaume Gomez <guillaume1.gomez@gmail.com>\\nCategory: common, config\\nWebsite: https://github.com/toml-lang/toml\\n*/\\n\\nfunction ini(hljs) {\\n  const regex = hljs.regex;\\n  const NUMBERS = {\\n    className: 'number',\\n    relevance: 0,\\n    variants: [\\n      { begin: /([+-]+)?[\\\\d]+_[\\\\d_]+/ },\\n      { begin: hljs.NUMBER_RE }\\n    ]\\n  };\\n  const COMMENTS = hljs.COMMENT();\\n  COMMENTS.variants = [\\n    {\\n      begin: /;/,\\n      end: /$/\\n    },\\n    {\\n      begin: /#/,\\n      end: /$/\\n    }\\n  ];\\n  const VARIABLES = {\\n    className: 'variable',\\n    variants: [\\n      { begin: /\\\\$[\\\\w\\\\d\\\"][\\\\w\\\\d_]*/ },\\n      { begin: /\\\\$\\\\{(.*?)\\\\}/ }\\n    ]\\n  };\\n  const LITERALS = {\\n    className: 'literal',\\n    begin: /\\\\bon|off|true|false|yes|no\\\\b/\\n  };\\n  const STRINGS = {\\n    className: \\\"string\\\",\\n    contains: [ hljs.BACKSLASH_ESCAPE ],\\n    variants: [\\n      {\\n        begin: \\\"'''\\\",\\n        end: \\\"'''\\\",\\n        relevance: 10\\n      },\\n      {\\n        begin: '\\\"\\\"\\\"',\\n        end: '\\\"\\\"\\\"',\\n        relevance: 10\\n      },\\n      {\\n        begin: '\\\"',\\n        end: '\\\"'\\n      },\\n      {\\n        begin: \\\"'\\\",\\n        end: \\\"'\\\"\\n      }\\n    ]\\n  };\\n  const ARRAY = {\\n    begin: /\\\\[/,\\n    end: /\\\\]/,\\n    contains: [\\n      COMMENTS,\\n      LITERALS,\\n      VARIABLES,\\n      STRINGS,\\n      NUMBERS,\\n      'self'\\n    ],\\n    relevance: 0\\n  };\\n\\n  const BARE_KEY = /[A-Za-z0-9_-]+/;\\n  const QUOTED_KEY_DOUBLE_QUOTE = /\\\"(\\\\\\\\\\\"|[^\\\"])*\\\"/;\\n  const QUOTED_KEY_SINGLE_QUOTE = /'[^']*'/;\\n  const ANY_KEY = regex.either(\\n    BARE_KEY, QUOTED_KEY_DOUBLE_QUOTE, QUOTED_KEY_SINGLE_QUOTE\\n  );\\n  const DOTTED_KEY = regex.concat(\\n    ANY_KEY, '(\\\\\\\\s*\\\\\\\\.\\\\\\\\s*', ANY_KEY, ')*',\\n    regex.lookahead(/\\\\s*=\\\\s*[^#\\\\s]/)\\n  );\\n\\n  return {\\n    name: 'TOML, also INI',\\n    aliases: [ 'toml' ],\\n    case_insensitive: true,\\n    illegal: /\\\\S/,\\n    contains: [\\n      COMMENTS,\\n      {\\n        className: 'section',\\n        begin: /\\\\[+/,\\n        end: /\\\\]+/\\n      },\\n      {\\n        begin: DOTTED_KEY,\\n        className: 'attr',\\n        starts: {\\n          end: /$/,\\n          contains: [\\n            COMMENTS,\\n            ARRAY,\\n            LITERALS,\\n            VARIABLES,\\n            STRINGS,\\n            NUMBERS\\n          ]\\n        }\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = ini;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/ini.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/irpf90.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/irpf90.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: IRPF90\\nAuthor: Anthony Scemama <scemama@irsamc.ups-tlse.fr>\\nDescription: IRPF90 is an open-source Fortran code generator\\nWebsite: http://irpf90.ups-tlse.fr\\nCategory: scientific\\n*/\\n\\n/** @type LanguageFn */\\nfunction irpf90(hljs) {\\n  const regex = hljs.regex;\\n  const PARAMS = {\\n    className: 'params',\\n    begin: '\\\\\\\\(',\\n    end: '\\\\\\\\)'\\n  };\\n\\n  // regex in both fortran and irpf90 should match\\n  const OPTIONAL_NUMBER_SUFFIX = /(_[a-z_\\\\d]+)?/;\\n  const OPTIONAL_NUMBER_EXP = /([de][+-]?\\\\d+)?/;\\n  const NUMBER = {\\n    className: 'number',\\n    variants: [\\n      { begin: regex.concat(/\\\\b\\\\d+/, /\\\\.(\\\\d*)/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },\\n      { begin: regex.concat(/\\\\b\\\\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) },\\n      { begin: regex.concat(/\\\\.\\\\d+/, OPTIONAL_NUMBER_EXP, OPTIONAL_NUMBER_SUFFIX) }\\n    ],\\n    relevance: 0\\n  };\\n\\n  const F_KEYWORDS = {\\n    literal: '.False. .True.',\\n    keyword: 'kind do while private call intrinsic where elsewhere '\\n      + 'type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then '\\n      + 'public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. '\\n      + 'goto save else use module select case '\\n      + 'access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit '\\n      + 'continue format pause cycle exit '\\n      + 'c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg '\\n      + 'synchronous nopass non_overridable pass protected volatile abstract extends import '\\n      + 'non_intrinsic value deferred generic final enumerator class associate bind enum '\\n      + 'c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t '\\n      + 'c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double '\\n      + 'c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr '\\n      + 'c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated  c_f_pointer '\\n      + 'c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor '\\n      + 'numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control '\\n      + 'ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive '\\n      + 'pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure '\\n      + 'integer real character complex logical dimension allocatable|10 parameter '\\n      + 'external implicit|10 none double precision assign intent optional pointer '\\n      + 'target in out common equivalence data '\\n      // IRPF90 special keywords\\n      + 'begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch '\\n      + 'soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read',\\n    built_in: 'alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint '\\n      + 'dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl '\\n      + 'algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama '\\n      + 'iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod '\\n      + 'qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log '\\n      + 'log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate '\\n      + 'adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product '\\n      + 'eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul '\\n      + 'maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product '\\n      + 'radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind '\\n      + 'set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer '\\n      + 'dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end '\\n      + 'ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode '\\n      + 'is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of '\\n      + 'acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 '\\n      + 'atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits '\\n      + 'bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr '\\n      + 'num_images parity popcnt poppar shifta shiftl shiftr this_image '\\n      // IRPF90 special built_ins\\n      + 'IRP_ALIGN irp_here'\\n  };\\n  return {\\n    name: 'IRPF90',\\n    case_insensitive: true,\\n    keywords: F_KEYWORDS,\\n    illegal: /\\\\/\\\\*/,\\n    contains: [\\n      hljs.inherit(hljs.APOS_STRING_MODE, {\\n        className: 'string',\\n        relevance: 0\\n      }),\\n      hljs.inherit(hljs.QUOTE_STRING_MODE, {\\n        className: 'string',\\n        relevance: 0\\n      }),\\n      {\\n        className: 'function',\\n        beginKeywords: 'subroutine function program',\\n        illegal: '[${=\\\\\\\\n]',\\n        contains: [\\n          hljs.UNDERSCORE_TITLE_MODE,\\n          PARAMS\\n        ]\\n      },\\n      hljs.COMMENT('!', '$', { relevance: 0 }),\\n      hljs.COMMENT('begin_doc', 'end_doc', { relevance: 10 }),\\n      NUMBER\\n    ]\\n  };\\n}\\n\\nmodule.exports = irpf90;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/irpf90.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/isbl.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/isbl.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: ISBL\\nAuthor: Dmitriy Tarasov <dimatar@gmail.com>\\nDescription: built-in language DIRECTUM\\nCategory: enterprise\\n*/\\n\\nfunction isbl(hljs) {\\n  // Определение идентификаторов\\n  const UNDERSCORE_IDENT_RE = \\\"[A-Za-zА-Яа-яёЁ_!][A-Za-zА-Яа-яёЁ_0-9]*\\\";\\n\\n  // Определение имен функций\\n  const FUNCTION_NAME_IDENT_RE = \\\"[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]*\\\";\\n\\n  // keyword : ключевые слова\\n  const KEYWORD =\\n    \\\"and и else иначе endexcept endfinally endforeach конецвсе endif конецесли endwhile конецпока \\\"\\n    + \\\"except exitfor finally foreach все if если in в not не or или try while пока \\\";\\n\\n  // SYSRES Constants\\n  const sysres_constants =\\n    \\\"SYSRES_CONST_ACCES_RIGHT_TYPE_EDIT \\\"\\n    + \\\"SYSRES_CONST_ACCES_RIGHT_TYPE_FULL \\\"\\n    + \\\"SYSRES_CONST_ACCES_RIGHT_TYPE_VIEW \\\"\\n    + \\\"SYSRES_CONST_ACCESS_MODE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_NO_ACCESS_VIEW \\\"\\n    + \\\"SYSRES_CONST_ACCESS_NO_ACCESS_VIEW_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_YES_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_YES_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_YES_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_YES_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_YES_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_YES_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_VIEW \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_VIEW_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_YES_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_TYPE_CHANGE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_TYPE_CHANGE_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_TYPE_EXISTS \\\"\\n    + \\\"SYSRES_CONST_ACCESS_TYPE_EXISTS_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_TYPE_FULL \\\"\\n    + \\\"SYSRES_CONST_ACCESS_TYPE_FULL_CODE \\\"\\n    + \\\"SYSRES_CONST_ACCESS_TYPE_VIEW \\\"\\n    + \\\"SYSRES_CONST_ACCESS_TYPE_VIEW_CODE \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_ABORT \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_ACCEPT \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_ACCESS_RIGHTS \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_ADD_ATTACHMENT \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_CHANGE_CARD \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_CHANGE_KIND \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_CHANGE_STORAGE \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_CONTINUE \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_COPY \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_CREATE \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_CREATE_VERSION \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_DELETE \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_DELETE_ATTACHMENT \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_DELETE_VERSION \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_DISABLE_DELEGATE_ACCESS_RIGHTS \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_ENABLE_DELEGATE_ACCESS_RIGHTS \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE_AND_PASSWORD \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_PASSWORD \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_EXPORT_WITH_LOCK \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_EXPORT_WITHOUT_LOCK \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_IMPORT_WITH_UNLOCK \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_IMPORT_WITHOUT_UNLOCK \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_LIFE_CYCLE_STAGE \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_LOCK \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_LOCK_FOR_SERVER \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_LOCK_MODIFY \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_MARK_AS_READED \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_MARK_AS_UNREADED \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_MODIFY \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_MODIFY_CARD \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_MOVE_TO_ARCHIVE \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_OFF_ENCRYPTION \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_PASSWORD_CHANGE \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_PERFORM \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_RECOVER_FROM_LOCAL_COPY \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_RESTART \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_RESTORE_FROM_ARCHIVE \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_REVISION \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_SEND_BY_MAIL \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_SIGN \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_START \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_UNLOCK \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_UNLOCK_FROM_SERVER \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_VERSION_STATE \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_VERSION_VISIBILITY \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_VIEW \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_VIEW_SHADOW_COPY \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_WORKFLOW_DESCRIPTION_MODIFY \\\"\\n    + \\\"SYSRES_CONST_ACTION_TYPE_WRITE_HISTORY \\\"\\n    + \\\"SYSRES_CONST_ACTIVE_VERSION_STATE_PICK_VALUE \\\"\\n    + \\\"SYSRES_CONST_ADD_REFERENCE_MODE_NAME \\\"\\n    + \\\"SYSRES_CONST_ADDITION_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_ADDITIONAL_PARAMS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_ADITIONAL_JOB_END_DATE_REQUISITE_NAME \\\"\\n    + \\\"SYSRES_CONST_ADITIONAL_JOB_READ_REQUISITE_NAME \\\"\\n    + \\\"SYSRES_CONST_ADITIONAL_JOB_START_DATE_REQUISITE_NAME \\\"\\n    + \\\"SYSRES_CONST_ADITIONAL_JOB_STATE_REQUISITE_NAME \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE \\\"\\n    + \\\"SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE_ACTION \\\"\\n    + \\\"SYSRES_CONST_ALL_ACCEPT_CONDITION_RUS \\\"\\n    + \\\"SYSRES_CONST_ALL_USERS_GROUP \\\"\\n    + \\\"SYSRES_CONST_ALL_USERS_GROUP_NAME \\\"\\n    + \\\"SYSRES_CONST_ALL_USERS_SERVER_GROUP_NAME \\\"\\n    + \\\"SYSRES_CONST_ALLOWED_ACCESS_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_ALLOWED_ACCESS_TYPE_NAME \\\"\\n    + \\\"SYSRES_CONST_APP_VIEWER_TYPE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_APPROVING_SIGNATURE_NAME \\\"\\n    + \\\"SYSRES_CONST_APPROVING_SIGNATURE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE \\\"\\n    + \\\"SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_ATTACH_TYPE_COMPONENT_TOKEN \\\"\\n    + \\\"SYSRES_CONST_ATTACH_TYPE_DOC \\\"\\n    + \\\"SYSRES_CONST_ATTACH_TYPE_EDOC \\\"\\n    + \\\"SYSRES_CONST_ATTACH_TYPE_FOLDER \\\"\\n    + \\\"SYSRES_CONST_ATTACH_TYPE_JOB \\\"\\n    + \\\"SYSRES_CONST_ATTACH_TYPE_REFERENCE \\\"\\n    + \\\"SYSRES_CONST_ATTACH_TYPE_TASK \\\"\\n    + \\\"SYSRES_CONST_AUTH_ENCODED_PASSWORD \\\"\\n    + \\\"SYSRES_CONST_AUTH_ENCODED_PASSWORD_CODE \\\"\\n    + \\\"SYSRES_CONST_AUTH_NOVELL \\\"\\n    + \\\"SYSRES_CONST_AUTH_PASSWORD \\\"\\n    + \\\"SYSRES_CONST_AUTH_PASSWORD_CODE \\\"\\n    + \\\"SYSRES_CONST_AUTH_WINDOWS \\\"\\n    + \\\"SYSRES_CONST_AUTHENTICATING_SIGNATURE_NAME \\\"\\n    + \\\"SYSRES_CONST_AUTHENTICATING_SIGNATURE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_AUTO_ENUM_METHOD_FLAG \\\"\\n    + \\\"SYSRES_CONST_AUTO_NUMERATION_CODE \\\"\\n    + \\\"SYSRES_CONST_AUTO_STRONG_ENUM_METHOD_FLAG \\\"\\n    + \\\"SYSRES_CONST_AUTOTEXT_NAME_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_AUTOTEXT_TEXT_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_AUTOTEXT_USAGE_ALL \\\"\\n    + \\\"SYSRES_CONST_AUTOTEXT_USAGE_ALL_CODE \\\"\\n    + \\\"SYSRES_CONST_AUTOTEXT_USAGE_SIGN \\\"\\n    + \\\"SYSRES_CONST_AUTOTEXT_USAGE_SIGN_CODE \\\"\\n    + \\\"SYSRES_CONST_AUTOTEXT_USAGE_WORK \\\"\\n    + \\\"SYSRES_CONST_AUTOTEXT_USAGE_WORK_CODE \\\"\\n    + \\\"SYSRES_CONST_AUTOTEXT_USE_ANYWHERE_CODE \\\"\\n    + \\\"SYSRES_CONST_AUTOTEXT_USE_ON_SIGNING_CODE \\\"\\n    + \\\"SYSRES_CONST_AUTOTEXT_USE_ON_WORK_CODE \\\"\\n    + \\\"SYSRES_CONST_BEGIN_DATE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_BLACK_LIFE_CYCLE_STAGE_FONT_COLOR \\\"\\n    + \\\"SYSRES_CONST_BLUE_LIFE_CYCLE_STAGE_FONT_COLOR \\\"\\n    + \\\"SYSRES_CONST_BTN_PART \\\"\\n    + \\\"SYSRES_CONST_CALCULATED_ROLE_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_CALL_TYPE_VARIABLE_BUTTON_VALUE \\\"\\n    + \\\"SYSRES_CONST_CALL_TYPE_VARIABLE_PROGRAM_VALUE \\\"\\n    + \\\"SYSRES_CONST_CANCEL_MESSAGE_FUNCTION_RESULT \\\"\\n    + \\\"SYSRES_CONST_CARD_PART \\\"\\n    + \\\"SYSRES_CONST_CARD_REFERENCE_MODE_NAME \\\"\\n    + \\\"SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_ENCRYPT_VALUE \\\"\\n    + \\\"SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_AND_ENCRYPT_VALUE \\\"\\n    + \\\"SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_VALUE \\\"\\n    + \\\"SYSRES_CONST_CHECK_PARAM_VALUE_DATE_PARAM_TYPE \\\"\\n    + \\\"SYSRES_CONST_CHECK_PARAM_VALUE_FLOAT_PARAM_TYPE \\\"\\n    + \\\"SYSRES_CONST_CHECK_PARAM_VALUE_INTEGER_PARAM_TYPE \\\"\\n    + \\\"SYSRES_CONST_CHECK_PARAM_VALUE_PICK_PARAM_TYPE \\\"\\n    + \\\"SYSRES_CONST_CHECK_PARAM_VALUE_REEFRENCE_PARAM_TYPE \\\"\\n    + \\\"SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_FEMININE \\\"\\n    + \\\"SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_MASCULINE \\\"\\n    + \\\"SYSRES_CONST_CODE_COMPONENT_TYPE_ADMIN \\\"\\n    + \\\"SYSRES_CONST_CODE_COMPONENT_TYPE_DEVELOPER \\\"\\n    + \\\"SYSRES_CONST_CODE_COMPONENT_TYPE_DOCS \\\"\\n    + \\\"SYSRES_CONST_CODE_COMPONENT_TYPE_EDOC_CARDS \\\"\\n    + \\\"SYSRES_CONST_CODE_COMPONENT_TYPE_EXTERNAL_EXECUTABLE \\\"\\n    + \\\"SYSRES_CONST_CODE_COMPONENT_TYPE_OTHER \\\"\\n    + \\\"SYSRES_CONST_CODE_COMPONENT_TYPE_REFERENCE \\\"\\n    + \\\"SYSRES_CONST_CODE_COMPONENT_TYPE_REPORT \\\"\\n    + \\\"SYSRES_CONST_CODE_COMPONENT_TYPE_SCRIPT \\\"\\n    + \\\"SYSRES_CONST_CODE_COMPONENT_TYPE_URL \\\"\\n    + \\\"SYSRES_CONST_CODE_REQUISITE_ACCESS \\\"\\n    + \\\"SYSRES_CONST_CODE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_CODE_REQUISITE_COMPONENT \\\"\\n    + \\\"SYSRES_CONST_CODE_REQUISITE_DESCRIPTION \\\"\\n    + \\\"SYSRES_CONST_CODE_REQUISITE_EXCLUDE_COMPONENT \\\"\\n    + \\\"SYSRES_CONST_CODE_REQUISITE_RECORD \\\"\\n    + \\\"SYSRES_CONST_COMMENT_REQ_CODE \\\"\\n    + \\\"SYSRES_CONST_COMMON_SETTINGS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_COMP_CODE_GRD \\\"\\n    + \\\"SYSRES_CONST_COMPONENT_GROUP_TYPE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_COMPONENT_TYPE_ADMIN_COMPONENTS \\\"\\n    + \\\"SYSRES_CONST_COMPONENT_TYPE_DEVELOPER_COMPONENTS \\\"\\n    + \\\"SYSRES_CONST_COMPONENT_TYPE_DOCS \\\"\\n    + \\\"SYSRES_CONST_COMPONENT_TYPE_EDOC_CARDS \\\"\\n    + \\\"SYSRES_CONST_COMPONENT_TYPE_EDOCS \\\"\\n    + \\\"SYSRES_CONST_COMPONENT_TYPE_EXTERNAL_EXECUTABLE \\\"\\n    + \\\"SYSRES_CONST_COMPONENT_TYPE_OTHER \\\"\\n    + \\\"SYSRES_CONST_COMPONENT_TYPE_REFERENCE_TYPES \\\"\\n    + \\\"SYSRES_CONST_COMPONENT_TYPE_REFERENCES \\\"\\n    + \\\"SYSRES_CONST_COMPONENT_TYPE_REPORTS \\\"\\n    + \\\"SYSRES_CONST_COMPONENT_TYPE_SCRIPTS \\\"\\n    + \\\"SYSRES_CONST_COMPONENT_TYPE_URL \\\"\\n    + \\\"SYSRES_CONST_COMPONENTS_REMOTE_SERVERS_VIEW_CODE \\\"\\n    + \\\"SYSRES_CONST_CONDITION_BLOCK_DESCRIPTION \\\"\\n    + \\\"SYSRES_CONST_CONST_FIRM_STATUS_COMMON \\\"\\n    + \\\"SYSRES_CONST_CONST_FIRM_STATUS_INDIVIDUAL \\\"\\n    + \\\"SYSRES_CONST_CONST_NEGATIVE_VALUE \\\"\\n    + \\\"SYSRES_CONST_CONST_POSITIVE_VALUE \\\"\\n    + \\\"SYSRES_CONST_CONST_SERVER_STATUS_DONT_REPLICATE \\\"\\n    + \\\"SYSRES_CONST_CONST_SERVER_STATUS_REPLICATE \\\"\\n    + \\\"SYSRES_CONST_CONTENTS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_DATA_TYPE_BOOLEAN \\\"\\n    + \\\"SYSRES_CONST_DATA_TYPE_DATE \\\"\\n    + \\\"SYSRES_CONST_DATA_TYPE_FLOAT \\\"\\n    + \\\"SYSRES_CONST_DATA_TYPE_INTEGER \\\"\\n    + \\\"SYSRES_CONST_DATA_TYPE_PICK \\\"\\n    + \\\"SYSRES_CONST_DATA_TYPE_REFERENCE \\\"\\n    + \\\"SYSRES_CONST_DATA_TYPE_STRING \\\"\\n    + \\\"SYSRES_CONST_DATA_TYPE_TEXT \\\"\\n    + \\\"SYSRES_CONST_DATA_TYPE_VARIANT \\\"\\n    + \\\"SYSRES_CONST_DATE_CLOSE_REQ_CODE \\\"\\n    + \\\"SYSRES_CONST_DATE_FORMAT_DATE_ONLY_CHAR \\\"\\n    + \\\"SYSRES_CONST_DATE_OPEN_REQ_CODE \\\"\\n    + \\\"SYSRES_CONST_DATE_REQUISITE \\\"\\n    + \\\"SYSRES_CONST_DATE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_DATE_REQUISITE_NAME \\\"\\n    + \\\"SYSRES_CONST_DATE_REQUISITE_TYPE \\\"\\n    + \\\"SYSRES_CONST_DATE_TYPE_CHAR \\\"\\n    + \\\"SYSRES_CONST_DATETIME_FORMAT_VALUE \\\"\\n    + \\\"SYSRES_CONST_DEA_ACCESS_RIGHTS_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_DESCRIPTION_LOCALIZE_ID_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_DESCRIPTION_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_DET1_PART \\\"\\n    + \\\"SYSRES_CONST_DET2_PART \\\"\\n    + \\\"SYSRES_CONST_DET3_PART \\\"\\n    + \\\"SYSRES_CONST_DET4_PART \\\"\\n    + \\\"SYSRES_CONST_DET5_PART \\\"\\n    + \\\"SYSRES_CONST_DET6_PART \\\"\\n    + \\\"SYSRES_CONST_DETAIL_DATASET_KEY_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_DETAIL_PICK_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_DETAIL_REQ_CODE \\\"\\n    + \\\"SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_NAME \\\"\\n    + \\\"SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_NAME \\\"\\n    + \\\"SYSRES_CONST_DOCUMENT_STORAGES_CODE \\\"\\n    + \\\"SYSRES_CONST_DOCUMENT_TEMPLATES_TYPE_NAME \\\"\\n    + \\\"SYSRES_CONST_DOUBLE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDITOR_CLOSE_FILE_OBSERV_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDITOR_CLOSE_PROCESS_OBSERV_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDITOR_TYPE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDITORS_APPLICATION_NAME_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDITORS_CREATE_SEVERAL_PROCESSES_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDITORS_EXTENSION_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDITORS_OBSERVER_BY_PROCESS_TYPE \\\"\\n    + \\\"SYSRES_CONST_EDITORS_REFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDITORS_REPLACE_SPEC_CHARS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDITORS_USE_PLUGINS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDITORS_VIEW_DOCUMENT_OPENED_TO_EDIT_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_CARD_TYPE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_CARD_TYPES_LINK_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_CERTIFICATE_AND_PASSWORD_ENCODE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_CERTIFICATE_ENCODE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_DATE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_KIND_REFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_KINDS_BY_TEMPLATE_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_MANAGE_ACCESS_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_NONE_ENCODE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_NUMBER_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_PASSWORD_ENCODE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_READONLY_ACCESS_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_SHELL_LIFE_TYPE_VIEW_VALUE \\\"\\n    + \\\"SYSRES_CONST_EDOC_SIZE_RESTRICTION_PRIORITY_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_STORAGE_CHECK_ACCESS_RIGHTS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_STORAGE_COMPUTER_NAME_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_STORAGE_DATABASE_NAME_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_STORAGE_EDIT_IN_STORAGE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_STORAGE_LOCAL_PATH_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_STORAGE_SHARED_SOURCE_NAME_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_TEMPLATE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_TYPES_REFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_VERSION_ACTIVE_STAGE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_VERSION_DESIGN_STAGE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_VERSION_OBSOLETE_STAGE_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOC_WRITE_ACCES_CODE \\\"\\n    + \\\"SYSRES_CONST_EDOCUMENT_CARD_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE \\\"\\n    + \\\"SYSRES_CONST_ENCODE_CERTIFICATE_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_END_DATE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_ENUMERATION_TYPE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_EXECUTE_ACCESS_RIGHTS_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_EXECUTIVE_FILE_STORAGE_TYPE \\\"\\n    + \\\"SYSRES_CONST_EXIST_CONST \\\"\\n    + \\\"SYSRES_CONST_EXIST_VALUE \\\"\\n    + \\\"SYSRES_CONST_EXPORT_LOCK_TYPE_ASK \\\"\\n    + \\\"SYSRES_CONST_EXPORT_LOCK_TYPE_WITH_LOCK \\\"\\n    + \\\"SYSRES_CONST_EXPORT_LOCK_TYPE_WITHOUT_LOCK \\\"\\n    + \\\"SYSRES_CONST_EXPORT_VERSION_TYPE_ASK \\\"\\n    + \\\"SYSRES_CONST_EXPORT_VERSION_TYPE_LAST \\\"\\n    + \\\"SYSRES_CONST_EXPORT_VERSION_TYPE_LAST_ACTIVE \\\"\\n    + \\\"SYSRES_CONST_EXTENSION_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_FILTER_NAME_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_FILTER_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_FILTER_TYPE_COMMON_CODE \\\"\\n    + \\\"SYSRES_CONST_FILTER_TYPE_COMMON_NAME \\\"\\n    + \\\"SYSRES_CONST_FILTER_TYPE_USER_CODE \\\"\\n    + \\\"SYSRES_CONST_FILTER_TYPE_USER_NAME \\\"\\n    + \\\"SYSRES_CONST_FILTER_VALUE_REQUISITE_NAME \\\"\\n    + \\\"SYSRES_CONST_FLOAT_NUMBER_FORMAT_CHAR \\\"\\n    + \\\"SYSRES_CONST_FLOAT_REQUISITE_TYPE \\\"\\n    + \\\"SYSRES_CONST_FOLDER_AUTHOR_VALUE \\\"\\n    + \\\"SYSRES_CONST_FOLDER_KIND_ANY_OBJECTS \\\"\\n    + \\\"SYSRES_CONST_FOLDER_KIND_COMPONENTS \\\"\\n    + \\\"SYSRES_CONST_FOLDER_KIND_EDOCS \\\"\\n    + \\\"SYSRES_CONST_FOLDER_KIND_JOBS \\\"\\n    + \\\"SYSRES_CONST_FOLDER_KIND_TASKS \\\"\\n    + \\\"SYSRES_CONST_FOLDER_TYPE_COMMON \\\"\\n    + \\\"SYSRES_CONST_FOLDER_TYPE_COMPONENT \\\"\\n    + \\\"SYSRES_CONST_FOLDER_TYPE_FAVORITES \\\"\\n    + \\\"SYSRES_CONST_FOLDER_TYPE_INBOX \\\"\\n    + \\\"SYSRES_CONST_FOLDER_TYPE_OUTBOX \\\"\\n    + \\\"SYSRES_CONST_FOLDER_TYPE_QUICK_LAUNCH \\\"\\n    + \\\"SYSRES_CONST_FOLDER_TYPE_SEARCH \\\"\\n    + \\\"SYSRES_CONST_FOLDER_TYPE_SHORTCUTS \\\"\\n    + \\\"SYSRES_CONST_FOLDER_TYPE_USER \\\"\\n    + \\\"SYSRES_CONST_FROM_DICTIONARY_ENUM_METHOD_FLAG \\\"\\n    + \\\"SYSRES_CONST_FULL_SUBSTITUTE_TYPE \\\"\\n    + \\\"SYSRES_CONST_FULL_SUBSTITUTE_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_FUNCTION_CANCEL_RESULT \\\"\\n    + \\\"SYSRES_CONST_FUNCTION_CATEGORY_SYSTEM \\\"\\n    + \\\"SYSRES_CONST_FUNCTION_CATEGORY_USER \\\"\\n    + \\\"SYSRES_CONST_FUNCTION_FAILURE_RESULT \\\"\\n    + \\\"SYSRES_CONST_FUNCTION_SAVE_RESULT \\\"\\n    + \\\"SYSRES_CONST_GENERATED_REQUISITE \\\"\\n    + \\\"SYSRES_CONST_GREEN_LIFE_CYCLE_STAGE_FONT_COLOR \\\"\\n    + \\\"SYSRES_CONST_GROUP_ACCOUNT_TYPE_VALUE_CODE \\\"\\n    + \\\"SYSRES_CONST_GROUP_CATEGORY_NORMAL_CODE \\\"\\n    + \\\"SYSRES_CONST_GROUP_CATEGORY_NORMAL_NAME \\\"\\n    + \\\"SYSRES_CONST_GROUP_CATEGORY_SERVICE_CODE \\\"\\n    + \\\"SYSRES_CONST_GROUP_CATEGORY_SERVICE_NAME \\\"\\n    + \\\"SYSRES_CONST_GROUP_COMMON_CATEGORY_FIELD_VALUE \\\"\\n    + \\\"SYSRES_CONST_GROUP_FULL_NAME_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_GROUP_NAME_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_GROUP_RIGHTS_T_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_GROUP_SERVER_CODES_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_GROUP_SERVER_NAME_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_GROUP_SERVICE_CATEGORY_FIELD_VALUE \\\"\\n    + \\\"SYSRES_CONST_GROUP_USER_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_GROUPS_REFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_GROUPS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_HIDDEN_MODE_NAME \\\"\\n    + \\\"SYSRES_CONST_HIGH_LVL_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_HISTORY_ACTION_CREATE_CODE \\\"\\n    + \\\"SYSRES_CONST_HISTORY_ACTION_DELETE_CODE \\\"\\n    + \\\"SYSRES_CONST_HISTORY_ACTION_EDIT_CODE \\\"\\n    + \\\"SYSRES_CONST_HOUR_CHAR \\\"\\n    + \\\"SYSRES_CONST_ID_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_IDSPS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_IMAGE_MODE_COLOR \\\"\\n    + \\\"SYSRES_CONST_IMAGE_MODE_GREYSCALE \\\"\\n    + \\\"SYSRES_CONST_IMAGE_MODE_MONOCHROME \\\"\\n    + \\\"SYSRES_CONST_IMPORTANCE_HIGH \\\"\\n    + \\\"SYSRES_CONST_IMPORTANCE_LOW \\\"\\n    + \\\"SYSRES_CONST_IMPORTANCE_NORMAL \\\"\\n    + \\\"SYSRES_CONST_IN_DESIGN_VERSION_STATE_PICK_VALUE \\\"\\n    + \\\"SYSRES_CONST_INCOMING_WORK_RULE_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_INT_REQUISITE \\\"\\n    + \\\"SYSRES_CONST_INT_REQUISITE_TYPE \\\"\\n    + \\\"SYSRES_CONST_INTEGER_NUMBER_FORMAT_CHAR \\\"\\n    + \\\"SYSRES_CONST_INTEGER_TYPE_CHAR \\\"\\n    + \\\"SYSRES_CONST_IS_GENERATED_REQUISITE_NEGATIVE_VALUE \\\"\\n    + \\\"SYSRES_CONST_IS_PUBLIC_ROLE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_IS_REMOTE_USER_NEGATIVE_VALUE \\\"\\n    + \\\"SYSRES_CONST_IS_REMOTE_USER_POSITIVE_VALUE \\\"\\n    + \\\"SYSRES_CONST_IS_STORED_REQUISITE_NEGATIVE_VALUE \\\"\\n    + \\\"SYSRES_CONST_IS_STORED_REQUISITE_STORED_VALUE \\\"\\n    + \\\"SYSRES_CONST_ITALIC_LIFE_CYCLE_STAGE_DRAW_STYLE \\\"\\n    + \\\"SYSRES_CONST_JOB_BLOCK_DESCRIPTION \\\"\\n    + \\\"SYSRES_CONST_JOB_KIND_CONTROL_JOB \\\"\\n    + \\\"SYSRES_CONST_JOB_KIND_JOB \\\"\\n    + \\\"SYSRES_CONST_JOB_KIND_NOTICE \\\"\\n    + \\\"SYSRES_CONST_JOB_STATE_ABORTED \\\"\\n    + \\\"SYSRES_CONST_JOB_STATE_COMPLETE \\\"\\n    + \\\"SYSRES_CONST_JOB_STATE_WORKING \\\"\\n    + \\\"SYSRES_CONST_KIND_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_KIND_REQUISITE_NAME \\\"\\n    + \\\"SYSRES_CONST_KINDS_CREATE_SHADOW_COPIES_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_KINDS_DEFAULT_EDOC_LIFE_STAGE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_KINDS_EDOC_ALL_TEPLATES_ALLOWED_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_KINDS_EDOC_ALLOW_LIFE_CYCLE_STAGE_CHANGING_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_KINDS_EDOC_ALLOW_MULTIPLE_ACTIVE_VERSIONS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_KINDS_EDOC_SHARE_ACCES_RIGHTS_BY_DEFAULT_CODE \\\"\\n    + \\\"SYSRES_CONST_KINDS_EDOC_TEMPLATE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_KINDS_EDOC_TYPE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_KINDS_SIGNERS_REQUISITES_CODE \\\"\\n    + \\\"SYSRES_CONST_KOD_INPUT_TYPE \\\"\\n    + \\\"SYSRES_CONST_LAST_UPDATE_DATE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_LIFE_CYCLE_START_STAGE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_LILAC_LIFE_CYCLE_STAGE_FONT_COLOR \\\"\\n    + \\\"SYSRES_CONST_LINK_OBJECT_KIND_COMPONENT \\\"\\n    + \\\"SYSRES_CONST_LINK_OBJECT_KIND_DOCUMENT \\\"\\n    + \\\"SYSRES_CONST_LINK_OBJECT_KIND_EDOC \\\"\\n    + \\\"SYSRES_CONST_LINK_OBJECT_KIND_FOLDER \\\"\\n    + \\\"SYSRES_CONST_LINK_OBJECT_KIND_JOB \\\"\\n    + \\\"SYSRES_CONST_LINK_OBJECT_KIND_REFERENCE \\\"\\n    + \\\"SYSRES_CONST_LINK_OBJECT_KIND_TASK \\\"\\n    + \\\"SYSRES_CONST_LINK_REF_TYPE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_LIST_REFERENCE_MODE_NAME \\\"\\n    + \\\"SYSRES_CONST_LOCALIZATION_DICTIONARY_MAIN_VIEW_CODE \\\"\\n    + \\\"SYSRES_CONST_MAIN_VIEW_CODE \\\"\\n    + \\\"SYSRES_CONST_MANUAL_ENUM_METHOD_FLAG \\\"\\n    + \\\"SYSRES_CONST_MASTER_COMP_TYPE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_MASTER_TABLE_REC_ID_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_MAXIMIZED_MODE_NAME \\\"\\n    + \\\"SYSRES_CONST_ME_VALUE \\\"\\n    + \\\"SYSRES_CONST_MESSAGE_ATTENTION_CAPTION \\\"\\n    + \\\"SYSRES_CONST_MESSAGE_CONFIRMATION_CAPTION \\\"\\n    + \\\"SYSRES_CONST_MESSAGE_ERROR_CAPTION \\\"\\n    + \\\"SYSRES_CONST_MESSAGE_INFORMATION_CAPTION \\\"\\n    + \\\"SYSRES_CONST_MINIMIZED_MODE_NAME \\\"\\n    + \\\"SYSRES_CONST_MINUTE_CHAR \\\"\\n    + \\\"SYSRES_CONST_MODULE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_MONITORING_BLOCK_DESCRIPTION \\\"\\n    + \\\"SYSRES_CONST_MONTH_FORMAT_VALUE \\\"\\n    + \\\"SYSRES_CONST_NAME_LOCALIZE_ID_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_NAME_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_NAME_SINGULAR_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_NAMEAN_INPUT_TYPE \\\"\\n    + \\\"SYSRES_CONST_NEGATIVE_PICK_VALUE \\\"\\n    + \\\"SYSRES_CONST_NEGATIVE_VALUE \\\"\\n    + \\\"SYSRES_CONST_NO \\\"\\n    + \\\"SYSRES_CONST_NO_PICK_VALUE \\\"\\n    + \\\"SYSRES_CONST_NO_SIGNATURE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_NO_VALUE \\\"\\n    + \\\"SYSRES_CONST_NONE_ACCESS_RIGHTS_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE \\\"\\n    + \\\"SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE_MASCULINE \\\"\\n    + \\\"SYSRES_CONST_NORMAL_ACCESS_RIGHTS_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_NORMAL_LIFE_CYCLE_STAGE_DRAW_STYLE \\\"\\n    + \\\"SYSRES_CONST_NORMAL_MODE_NAME \\\"\\n    + \\\"SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_NAME \\\"\\n    + \\\"SYSRES_CONST_NOTE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_NOTICE_BLOCK_DESCRIPTION \\\"\\n    + \\\"SYSRES_CONST_NUM_REQUISITE \\\"\\n    + \\\"SYSRES_CONST_NUM_STR_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_NUMERATION_AUTO_NOT_STRONG \\\"\\n    + \\\"SYSRES_CONST_NUMERATION_AUTO_STRONG \\\"\\n    + \\\"SYSRES_CONST_NUMERATION_FROM_DICTONARY \\\"\\n    + \\\"SYSRES_CONST_NUMERATION_MANUAL \\\"\\n    + \\\"SYSRES_CONST_NUMERIC_TYPE_CHAR \\\"\\n    + \\\"SYSRES_CONST_NUMREQ_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_OBSOLETE_VERSION_STATE_PICK_VALUE \\\"\\n    + \\\"SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE \\\"\\n    + \\\"SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_CODE \\\"\\n    + \\\"SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_FEMININE \\\"\\n    + \\\"SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_MASCULINE \\\"\\n    + \\\"SYSRES_CONST_OPTIONAL_FORM_COMP_REQCODE_PREFIX \\\"\\n    + \\\"SYSRES_CONST_ORANGE_LIFE_CYCLE_STAGE_FONT_COLOR \\\"\\n    + \\\"SYSRES_CONST_ORIGINALREF_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_OURFIRM_REF_CODE \\\"\\n    + \\\"SYSRES_CONST_OURFIRM_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_OURFIRM_VAR \\\"\\n    + \\\"SYSRES_CONST_OUTGOING_WORK_RULE_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_PICK_NEGATIVE_RESULT \\\"\\n    + \\\"SYSRES_CONST_PICK_POSITIVE_RESULT \\\"\\n    + \\\"SYSRES_CONST_PICK_REQUISITE \\\"\\n    + \\\"SYSRES_CONST_PICK_REQUISITE_TYPE \\\"\\n    + \\\"SYSRES_CONST_PICK_TYPE_CHAR \\\"\\n    + \\\"SYSRES_CONST_PLAN_STATUS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_PLATFORM_VERSION_COMMENT \\\"\\n    + \\\"SYSRES_CONST_PLUGINS_SETTINGS_DESCRIPTION_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_POSITIVE_PICK_VALUE \\\"\\n    + \\\"SYSRES_CONST_POWER_TO_CREATE_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_POWER_TO_SIGN_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_PRIORITY_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_QUALIFIED_TASK_TYPE \\\"\\n    + \\\"SYSRES_CONST_QUALIFIED_TASK_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_RECSTAT_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_RED_LIFE_CYCLE_STAGE_FONT_COLOR \\\"\\n    + \\\"SYSRES_CONST_REF_ID_T_REF_TYPE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_REF_REQUISITE \\\"\\n    + \\\"SYSRES_CONST_REF_REQUISITE_TYPE \\\"\\n    + \\\"SYSRES_CONST_REF_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE \\\"\\n    + \\\"SYSRES_CONST_REFERENCE_RECORD_HISTORY_CREATE_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_REFERENCE_RECORD_HISTORY_DELETE_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_REFERENCE_RECORD_HISTORY_MODIFY_ACTION_CODE \\\"\\n    + \\\"SYSRES_CONST_REFERENCE_TYPE_CHAR \\\"\\n    + \\\"SYSRES_CONST_REFERENCE_TYPE_REQUISITE_NAME \\\"\\n    + \\\"SYSRES_CONST_REFERENCES_ADD_PARAMS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_REFERENCES_DISPLAY_REQUISITE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_REMOTE_SERVER_STATUS_WORKING \\\"\\n    + \\\"SYSRES_CONST_REMOTE_SERVER_TYPE_MAIN \\\"\\n    + \\\"SYSRES_CONST_REMOTE_SERVER_TYPE_SECONDARY \\\"\\n    + \\\"SYSRES_CONST_REMOTE_USER_FLAG_VALUE_CODE \\\"\\n    + \\\"SYSRES_CONST_REPORT_APP_EDITOR_INTERNAL \\\"\\n    + \\\"SYSRES_CONST_REPORT_BASE_REPORT_ID_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_REPORT_BASE_REPORT_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_REPORT_SCRIPT_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_REPORT_TEMPLATE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_REPORT_VIEWER_CODE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_REQ_ALLOW_COMPONENT_DEFAULT_VALUE \\\"\\n    + \\\"SYSRES_CONST_REQ_ALLOW_RECORD_DEFAULT_VALUE \\\"\\n    + \\\"SYSRES_CONST_REQ_ALLOW_SERVER_COMPONENT_DEFAULT_VALUE \\\"\\n    + \\\"SYSRES_CONST_REQ_MODE_AVAILABLE_CODE \\\"\\n    + \\\"SYSRES_CONST_REQ_MODE_EDIT_CODE \\\"\\n    + \\\"SYSRES_CONST_REQ_MODE_HIDDEN_CODE \\\"\\n    + \\\"SYSRES_CONST_REQ_MODE_NOT_AVAILABLE_CODE \\\"\\n    + \\\"SYSRES_CONST_REQ_MODE_VIEW_CODE \\\"\\n    + \\\"SYSRES_CONST_REQ_NUMBER_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_REQ_SECTION_VALUE \\\"\\n    + \\\"SYSRES_CONST_REQ_TYPE_VALUE \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_FORMAT_BY_UNIT \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_FORMAT_DATE_FULL \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_FORMAT_DATE_TIME \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_FORMAT_LEFT \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_FORMAT_RIGHT \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_FORMAT_WITHOUT_UNIT \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_NUMBER_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_ACTIONS \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_BUTTON \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_BUTTONS \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_CARD \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE10 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE11 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE12 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE13 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE14 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE15 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE16 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE17 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE18 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE19 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE2 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE20 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE21 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE22 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE23 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE24 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE3 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE4 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE5 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE6 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE7 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE8 \\\"\\n    + \\\"SYSRES_CONST_REQUISITE_SECTION_TABLE9 \\\"\\n    + \\\"SYSRES_CONST_REQUISITES_PSEUDOREFERENCE_REQUISITE_NUMBER_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_RIGHT_ALIGNMENT_CODE \\\"\\n    + \\\"SYSRES_CONST_ROLES_REFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_ROUTE_STEP_AFTER_RUS \\\"\\n    + \\\"SYSRES_CONST_ROUTE_STEP_AND_CONDITION_RUS \\\"\\n    + \\\"SYSRES_CONST_ROUTE_STEP_OR_CONDITION_RUS \\\"\\n    + \\\"SYSRES_CONST_ROUTE_TYPE_COMPLEX \\\"\\n    + \\\"SYSRES_CONST_ROUTE_TYPE_PARALLEL \\\"\\n    + \\\"SYSRES_CONST_ROUTE_TYPE_SERIAL \\\"\\n    + \\\"SYSRES_CONST_SBDATASETDESC_NEGATIVE_VALUE \\\"\\n    + \\\"SYSRES_CONST_SBDATASETDESC_POSITIVE_VALUE \\\"\\n    + \\\"SYSRES_CONST_SBVIEWSDESC_POSITIVE_VALUE \\\"\\n    + \\\"SYSRES_CONST_SCRIPT_BLOCK_DESCRIPTION \\\"\\n    + \\\"SYSRES_CONST_SEARCH_BY_TEXT_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_SEARCHES_COMPONENT_CONTENT \\\"\\n    + \\\"SYSRES_CONST_SEARCHES_CRITERIA_ACTION_NAME \\\"\\n    + \\\"SYSRES_CONST_SEARCHES_EDOC_CONTENT \\\"\\n    + \\\"SYSRES_CONST_SEARCHES_FOLDER_CONTENT \\\"\\n    + \\\"SYSRES_CONST_SEARCHES_JOB_CONTENT \\\"\\n    + \\\"SYSRES_CONST_SEARCHES_REFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_SEARCHES_TASK_CONTENT \\\"\\n    + \\\"SYSRES_CONST_SECOND_CHAR \\\"\\n    + \\\"SYSRES_CONST_SECTION_REQUISITE_ACTIONS_VALUE \\\"\\n    + \\\"SYSRES_CONST_SECTION_REQUISITE_CARD_VALUE \\\"\\n    + \\\"SYSRES_CONST_SECTION_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_SECTION_REQUISITE_DETAIL_1_VALUE \\\"\\n    + \\\"SYSRES_CONST_SECTION_REQUISITE_DETAIL_2_VALUE \\\"\\n    + \\\"SYSRES_CONST_SECTION_REQUISITE_DETAIL_3_VALUE \\\"\\n    + \\\"SYSRES_CONST_SECTION_REQUISITE_DETAIL_4_VALUE \\\"\\n    + \\\"SYSRES_CONST_SECTION_REQUISITE_DETAIL_5_VALUE \\\"\\n    + \\\"SYSRES_CONST_SECTION_REQUISITE_DETAIL_6_VALUE \\\"\\n    + \\\"SYSRES_CONST_SELECT_REFERENCE_MODE_NAME \\\"\\n    + \\\"SYSRES_CONST_SELECT_TYPE_SELECTABLE \\\"\\n    + \\\"SYSRES_CONST_SELECT_TYPE_SELECTABLE_ONLY_CHILD \\\"\\n    + \\\"SYSRES_CONST_SELECT_TYPE_SELECTABLE_WITH_CHILD \\\"\\n    + \\\"SYSRES_CONST_SELECT_TYPE_UNSLECTABLE \\\"\\n    + \\\"SYSRES_CONST_SERVER_TYPE_MAIN \\\"\\n    + \\\"SYSRES_CONST_SERVICE_USER_CATEGORY_FIELD_VALUE \\\"\\n    + \\\"SYSRES_CONST_SETTINGS_USER_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_SIGNATURE_AND_ENCODE_CERTIFICATE_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_SIGNATURE_CERTIFICATE_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_SINGULAR_TITLE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_SQL_SERVER_AUTHENTIFICATION_FLAG_VALUE_CODE \\\"\\n    + \\\"SYSRES_CONST_SQL_SERVER_ENCODE_AUTHENTIFICATION_FLAG_VALUE_CODE \\\"\\n    + \\\"SYSRES_CONST_STANDART_ROUTE_REFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_STANDART_ROUTE_REFERENCE_COMMENT_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_STANDART_ROUTES_GROUPS_REFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_STATE_REQ_NAME \\\"\\n    + \\\"SYSRES_CONST_STATE_REQUISITE_ACTIVE_VALUE \\\"\\n    + \\\"SYSRES_CONST_STATE_REQUISITE_CLOSED_VALUE \\\"\\n    + \\\"SYSRES_CONST_STATE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_STATIC_ROLE_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_STATUS_PLAN_DEFAULT_VALUE \\\"\\n    + \\\"SYSRES_CONST_STATUS_VALUE_AUTOCLEANING \\\"\\n    + \\\"SYSRES_CONST_STATUS_VALUE_BLUE_SQUARE \\\"\\n    + \\\"SYSRES_CONST_STATUS_VALUE_COMPLETE \\\"\\n    + \\\"SYSRES_CONST_STATUS_VALUE_GREEN_SQUARE \\\"\\n    + \\\"SYSRES_CONST_STATUS_VALUE_ORANGE_SQUARE \\\"\\n    + \\\"SYSRES_CONST_STATUS_VALUE_PURPLE_SQUARE \\\"\\n    + \\\"SYSRES_CONST_STATUS_VALUE_RED_SQUARE \\\"\\n    + \\\"SYSRES_CONST_STATUS_VALUE_SUSPEND \\\"\\n    + \\\"SYSRES_CONST_STATUS_VALUE_YELLOW_SQUARE \\\"\\n    + \\\"SYSRES_CONST_STDROUTE_SHOW_TO_USERS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_STORAGE_TYPE_FILE \\\"\\n    + \\\"SYSRES_CONST_STORAGE_TYPE_SQL_SERVER \\\"\\n    + \\\"SYSRES_CONST_STR_REQUISITE \\\"\\n    + \\\"SYSRES_CONST_STRIKEOUT_LIFE_CYCLE_STAGE_DRAW_STYLE \\\"\\n    + \\\"SYSRES_CONST_STRING_FORMAT_LEFT_ALIGN_CHAR \\\"\\n    + \\\"SYSRES_CONST_STRING_FORMAT_RIGHT_ALIGN_CHAR \\\"\\n    + \\\"SYSRES_CONST_STRING_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_STRING_REQUISITE_TYPE \\\"\\n    + \\\"SYSRES_CONST_STRING_TYPE_CHAR \\\"\\n    + \\\"SYSRES_CONST_SUBSTITUTES_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_SUBTASK_BLOCK_DESCRIPTION \\\"\\n    + \\\"SYSRES_CONST_SYSTEM_SETTING_CURRENT_USER_PARAM_VALUE \\\"\\n    + \\\"SYSRES_CONST_SYSTEM_SETTING_EMPTY_VALUE_PARAM_VALUE \\\"\\n    + \\\"SYSRES_CONST_SYSTEM_VERSION_COMMENT \\\"\\n    + \\\"SYSRES_CONST_TASK_ACCESS_TYPE_ALL \\\"\\n    + \\\"SYSRES_CONST_TASK_ACCESS_TYPE_ALL_MEMBERS \\\"\\n    + \\\"SYSRES_CONST_TASK_ACCESS_TYPE_MANUAL \\\"\\n    + \\\"SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION \\\"\\n    + \\\"SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION_AND_PASSWORD \\\"\\n    + \\\"SYSRES_CONST_TASK_ENCODE_TYPE_NONE \\\"\\n    + \\\"SYSRES_CONST_TASK_ENCODE_TYPE_PASSWORD \\\"\\n    + \\\"SYSRES_CONST_TASK_ROUTE_ALL_CONDITION \\\"\\n    + \\\"SYSRES_CONST_TASK_ROUTE_AND_CONDITION \\\"\\n    + \\\"SYSRES_CONST_TASK_ROUTE_OR_CONDITION \\\"\\n    + \\\"SYSRES_CONST_TASK_STATE_ABORTED \\\"\\n    + \\\"SYSRES_CONST_TASK_STATE_COMPLETE \\\"\\n    + \\\"SYSRES_CONST_TASK_STATE_CONTINUED \\\"\\n    + \\\"SYSRES_CONST_TASK_STATE_CONTROL \\\"\\n    + \\\"SYSRES_CONST_TASK_STATE_INIT \\\"\\n    + \\\"SYSRES_CONST_TASK_STATE_WORKING \\\"\\n    + \\\"SYSRES_CONST_TASK_TITLE \\\"\\n    + \\\"SYSRES_CONST_TASK_TYPES_GROUPS_REFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_TASK_TYPES_REFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_TEMPLATES_REFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_TEST_DATE_REQUISITE_NAME \\\"\\n    + \\\"SYSRES_CONST_TEST_DEV_DATABASE_NAME \\\"\\n    + \\\"SYSRES_CONST_TEST_DEV_SYSTEM_CODE \\\"\\n    + \\\"SYSRES_CONST_TEST_EDMS_DATABASE_NAME \\\"\\n    + \\\"SYSRES_CONST_TEST_EDMS_MAIN_CODE \\\"\\n    + \\\"SYSRES_CONST_TEST_EDMS_MAIN_DB_NAME \\\"\\n    + \\\"SYSRES_CONST_TEST_EDMS_SECOND_CODE \\\"\\n    + \\\"SYSRES_CONST_TEST_EDMS_SECOND_DB_NAME \\\"\\n    + \\\"SYSRES_CONST_TEST_EDMS_SYSTEM_CODE \\\"\\n    + \\\"SYSRES_CONST_TEST_NUMERIC_REQUISITE_NAME \\\"\\n    + \\\"SYSRES_CONST_TEXT_REQUISITE \\\"\\n    + \\\"SYSRES_CONST_TEXT_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_TEXT_REQUISITE_TYPE \\\"\\n    + \\\"SYSRES_CONST_TEXT_TYPE_CHAR \\\"\\n    + \\\"SYSRES_CONST_TYPE_CODE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_TYPE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_UNDEFINED_LIFE_CYCLE_STAGE_FONT_COLOR \\\"\\n    + \\\"SYSRES_CONST_UNITS_SECTION_ID_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_UNITS_SECTION_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_UNOPERATING_RECORD_FLAG_VALUE_CODE \\\"\\n    + \\\"SYSRES_CONST_UNSTORED_DATA_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_UNSTORED_DATA_REQUISITE_NAME \\\"\\n    + \\\"SYSRES_CONST_USE_ACCESS_TYPE_CODE \\\"\\n    + \\\"SYSRES_CONST_USE_ACCESS_TYPE_NAME \\\"\\n    + \\\"SYSRES_CONST_USER_ACCOUNT_TYPE_VALUE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_ADDITIONAL_INFORMATION_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_AND_GROUP_ID_FROM_PSEUDOREFERENCE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_CATEGORY_NORMAL \\\"\\n    + \\\"SYSRES_CONST_USER_CERTIFICATE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_CERTIFICATE_STATE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_CERTIFICATE_SUBJECT_NAME_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_CERTIFICATE_THUMBPRINT_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_COMMON_CATEGORY \\\"\\n    + \\\"SYSRES_CONST_USER_COMMON_CATEGORY_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_FULL_NAME_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_GROUP_TYPE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_LOGIN_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_REMOTE_CONTROLLER_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_REMOTE_SYSTEM_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_RIGHTS_T_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_SERVER_NAME_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_SERVICE_CATEGORY \\\"\\n    + \\\"SYSRES_CONST_USER_SERVICE_CATEGORY_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_STATUS_ADMINISTRATOR_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_STATUS_ADMINISTRATOR_NAME \\\"\\n    + \\\"SYSRES_CONST_USER_STATUS_DEVELOPER_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_STATUS_DEVELOPER_NAME \\\"\\n    + \\\"SYSRES_CONST_USER_STATUS_DISABLED_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_STATUS_DISABLED_NAME \\\"\\n    + \\\"SYSRES_CONST_USER_STATUS_SYSTEM_DEVELOPER_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_STATUS_USER_CODE \\\"\\n    + \\\"SYSRES_CONST_USER_STATUS_USER_NAME \\\"\\n    + \\\"SYSRES_CONST_USER_STATUS_USER_NAME_DEPRECATED \\\"\\n    + \\\"SYSRES_CONST_USER_TYPE_FIELD_VALUE_USER \\\"\\n    + \\\"SYSRES_CONST_USER_TYPE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USERS_CONTROLLER_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USERS_IS_MAIN_SERVER_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USERS_REFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_USERS_REGISTRATION_CERTIFICATES_ACTION_NAME \\\"\\n    + \\\"SYSRES_CONST_USERS_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USERS_SYSTEM_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USERS_USER_ACCESS_RIGHTS_TYPR_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USERS_USER_AUTHENTICATION_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USERS_USER_COMPONENT_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USERS_USER_GROUP_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_USERS_VIEW_CERTIFICATES_ACTION_NAME \\\"\\n    + \\\"SYSRES_CONST_VIEW_DEFAULT_CODE \\\"\\n    + \\\"SYSRES_CONST_VIEW_DEFAULT_NAME \\\"\\n    + \\\"SYSRES_CONST_VIEWER_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_WAITING_BLOCK_DESCRIPTION \\\"\\n    + \\\"SYSRES_CONST_WIZARD_FORM_LABEL_TEST_STRING  \\\"\\n    + \\\"SYSRES_CONST_WIZARD_QUERY_PARAM_HEIGHT_ETALON_STRING \\\"\\n    + \\\"SYSRES_CONST_WIZARD_REFERENCE_COMMENT_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_WORK_RULES_DESCRIPTION_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_WORK_TIME_CALENDAR_REFERENCE_CODE \\\"\\n    + \\\"SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE \\\"\\n    + \\\"SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE \\\"\\n    + \\\"SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE_RUS \\\"\\n    + \\\"SYSRES_CONST_WORK_WORKFLOW_SOFT_ROUTE_TYPE_VALUE_CODE_RUS \\\"\\n    + \\\"SYSRES_CONST_WORKFLOW_ROUTE_TYPR_HARD \\\"\\n    + \\\"SYSRES_CONST_WORKFLOW_ROUTE_TYPR_SOFT \\\"\\n    + \\\"SYSRES_CONST_XML_ENCODING \\\"\\n    + \\\"SYSRES_CONST_XREC_STAT_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_XRECID_FIELD_NAME \\\"\\n    + \\\"SYSRES_CONST_YES \\\"\\n    + \\\"SYSRES_CONST_YES_NO_2_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_YES_NO_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_YES_NO_T_REF_TYPE_REQUISITE_CODE \\\"\\n    + \\\"SYSRES_CONST_YES_PICK_VALUE \\\"\\n    + \\\"SYSRES_CONST_YES_VALUE \\\";\\n\\n  // Base constant\\n  const base_constants = \\\"CR FALSE nil NO_VALUE NULL TAB TRUE YES_VALUE \\\";\\n\\n  // Base group name\\n  const base_group_name_constants =\\n    \\\"ADMINISTRATORS_GROUP_NAME CUSTOMIZERS_GROUP_NAME DEVELOPERS_GROUP_NAME SERVICE_USERS_GROUP_NAME \\\";\\n\\n  // Decision block properties\\n  const decision_block_properties_constants =\\n    \\\"DECISION_BLOCK_FIRST_OPERAND_PROPERTY DECISION_BLOCK_NAME_PROPERTY DECISION_BLOCK_OPERATION_PROPERTY \\\"\\n    + \\\"DECISION_BLOCK_RESULT_TYPE_PROPERTY DECISION_BLOCK_SECOND_OPERAND_PROPERTY \\\";\\n\\n  // File extension\\n  const file_extension_constants =\\n    \\\"ANY_FILE_EXTENTION COMPRESSED_DOCUMENT_EXTENSION EXTENDED_DOCUMENT_EXTENSION \\\"\\n    + \\\"SHORT_COMPRESSED_DOCUMENT_EXTENSION SHORT_EXTENDED_DOCUMENT_EXTENSION \\\";\\n\\n  // Job block properties\\n  const job_block_properties_constants =\\n    \\\"JOB_BLOCK_ABORT_DEADLINE_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_AFTER_FINISH_EVENT \\\"\\n    + \\\"JOB_BLOCK_AFTER_QUERY_PARAMETERS_EVENT \\\"\\n    + \\\"JOB_BLOCK_ATTACHMENT_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_BEFORE_QUERY_PARAMETERS_EVENT \\\"\\n    + \\\"JOB_BLOCK_BEFORE_START_EVENT \\\"\\n    + \\\"JOB_BLOCK_CREATED_JOBS_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_DEADLINE_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_EXECUTION_RESULTS_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_IS_PARALLEL_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_JOB_TEXT_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_NAME_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_NEED_SIGN_ON_PERFORM_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_PERFORMER_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY \\\"\\n    + \\\"JOB_BLOCK_SUBJECT_PROPERTY \\\";\\n\\n  // Language code\\n  const language_code_constants = \\\"ENGLISH_LANGUAGE_CODE RUSSIAN_LANGUAGE_CODE \\\";\\n\\n  // Launching external applications\\n  const launching_external_applications_constants =\\n    \\\"smHidden smMaximized smMinimized smNormal wmNo wmYes \\\";\\n\\n  // Link kind\\n  const link_kind_constants =\\n    \\\"COMPONENT_TOKEN_LINK_KIND \\\"\\n    + \\\"DOCUMENT_LINK_KIND \\\"\\n    + \\\"EDOCUMENT_LINK_KIND \\\"\\n    + \\\"FOLDER_LINK_KIND \\\"\\n    + \\\"JOB_LINK_KIND \\\"\\n    + \\\"REFERENCE_LINK_KIND \\\"\\n    + \\\"TASK_LINK_KIND \\\";\\n\\n  // Lock type\\n  const lock_type_constants =\\n    \\\"COMPONENT_TOKEN_LOCK_TYPE EDOCUMENT_VERSION_LOCK_TYPE \\\";\\n\\n  // Monitor block properties\\n  const monitor_block_properties_constants =\\n    \\\"MONITOR_BLOCK_AFTER_FINISH_EVENT \\\"\\n    + \\\"MONITOR_BLOCK_BEFORE_START_EVENT \\\"\\n    + \\\"MONITOR_BLOCK_DEADLINE_PROPERTY \\\"\\n    + \\\"MONITOR_BLOCK_INTERVAL_PROPERTY \\\"\\n    + \\\"MONITOR_BLOCK_INTERVAL_TYPE_PROPERTY \\\"\\n    + \\\"MONITOR_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY \\\"\\n    + \\\"MONITOR_BLOCK_NAME_PROPERTY \\\"\\n    + \\\"MONITOR_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY \\\"\\n    + \\\"MONITOR_BLOCK_SEARCH_SCRIPT_PROPERTY \\\";\\n\\n  // Notice block properties\\n  const notice_block_properties_constants =\\n    \\\"NOTICE_BLOCK_AFTER_FINISH_EVENT \\\"\\n    + \\\"NOTICE_BLOCK_ATTACHMENT_PROPERTY \\\"\\n    + \\\"NOTICE_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY \\\"\\n    + \\\"NOTICE_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY \\\"\\n    + \\\"NOTICE_BLOCK_BEFORE_START_EVENT \\\"\\n    + \\\"NOTICE_BLOCK_CREATED_NOTICES_PROPERTY \\\"\\n    + \\\"NOTICE_BLOCK_DEADLINE_PROPERTY \\\"\\n    + \\\"NOTICE_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY \\\"\\n    + \\\"NOTICE_BLOCK_NAME_PROPERTY \\\"\\n    + \\\"NOTICE_BLOCK_NOTICE_TEXT_PROPERTY \\\"\\n    + \\\"NOTICE_BLOCK_PERFORMER_PROPERTY \\\"\\n    + \\\"NOTICE_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY \\\"\\n    + \\\"NOTICE_BLOCK_SUBJECT_PROPERTY \\\";\\n\\n  // Object events\\n  const object_events_constants =\\n    \\\"dseAfterCancel \\\"\\n    + \\\"dseAfterClose \\\"\\n    + \\\"dseAfterDelete \\\"\\n    + \\\"dseAfterDeleteOutOfTransaction \\\"\\n    + \\\"dseAfterInsert \\\"\\n    + \\\"dseAfterOpen \\\"\\n    + \\\"dseAfterScroll \\\"\\n    + \\\"dseAfterUpdate \\\"\\n    + \\\"dseAfterUpdateOutOfTransaction \\\"\\n    + \\\"dseBeforeCancel \\\"\\n    + \\\"dseBeforeClose \\\"\\n    + \\\"dseBeforeDelete \\\"\\n    + \\\"dseBeforeDetailUpdate \\\"\\n    + \\\"dseBeforeInsert \\\"\\n    + \\\"dseBeforeOpen \\\"\\n    + \\\"dseBeforeUpdate \\\"\\n    + \\\"dseOnAnyRequisiteChange \\\"\\n    + \\\"dseOnCloseRecord \\\"\\n    + \\\"dseOnDeleteError \\\"\\n    + \\\"dseOnOpenRecord \\\"\\n    + \\\"dseOnPrepareUpdate \\\"\\n    + \\\"dseOnUpdateError \\\"\\n    + \\\"dseOnUpdateRatifiedRecord \\\"\\n    + \\\"dseOnValidDelete \\\"\\n    + \\\"dseOnValidUpdate \\\"\\n    + \\\"reOnChange \\\"\\n    + \\\"reOnChangeValues \\\"\\n    + \\\"SELECTION_BEGIN_ROUTE_EVENT \\\"\\n    + \\\"SELECTION_END_ROUTE_EVENT \\\";\\n\\n  // Object params\\n  const object_params_constants =\\n    \\\"CURRENT_PERIOD_IS_REQUIRED \\\"\\n    + \\\"PREVIOUS_CARD_TYPE_NAME \\\"\\n    + \\\"SHOW_RECORD_PROPERTIES_FORM \\\";\\n\\n  // Other\\n  const other_constants =\\n    \\\"ACCESS_RIGHTS_SETTING_DIALOG_CODE \\\"\\n    + \\\"ADMINISTRATOR_USER_CODE \\\"\\n    + \\\"ANALYTIC_REPORT_TYPE \\\"\\n    + \\\"asrtHideLocal \\\"\\n    + \\\"asrtHideRemote \\\"\\n    + \\\"CALCULATED_ROLE_TYPE_CODE \\\"\\n    + \\\"COMPONENTS_REFERENCE_DEVELOPER_VIEW_CODE \\\"\\n    + \\\"DCTS_TEST_PROTOCOLS_FOLDER_PATH \\\"\\n    + \\\"E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED \\\"\\n    + \\\"E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED_BY_USER \\\"\\n    + \\\"E_EDOC_VERSION_ALREDY_SIGNED \\\"\\n    + \\\"E_EDOC_VERSION_ALREDY_SIGNED_BY_USER \\\"\\n    + \\\"EDOC_TYPES_CODE_REQUISITE_FIELD_NAME \\\"\\n    + \\\"EDOCUMENTS_ALIAS_NAME \\\"\\n    + \\\"FILES_FOLDER_PATH \\\"\\n    + \\\"FILTER_OPERANDS_DELIMITER \\\"\\n    + \\\"FILTER_OPERATIONS_DELIMITER \\\"\\n    + \\\"FORMCARD_NAME \\\"\\n    + \\\"FORMLIST_NAME \\\"\\n    + \\\"GET_EXTENDED_DOCUMENT_EXTENSION_CREATION_MODE \\\"\\n    + \\\"GET_EXTENDED_DOCUMENT_EXTENSION_IMPORT_MODE \\\"\\n    + \\\"INTEGRATED_REPORT_TYPE \\\"\\n    + \\\"IS_BUILDER_APPLICATION_ROLE \\\"\\n    + \\\"IS_BUILDER_APPLICATION_ROLE2 \\\"\\n    + \\\"IS_BUILDER_USERS \\\"\\n    + \\\"ISBSYSDEV \\\"\\n    + \\\"LOG_FOLDER_PATH \\\"\\n    + \\\"mbCancel \\\"\\n    + \\\"mbNo \\\"\\n    + \\\"mbNoToAll \\\"\\n    + \\\"mbOK \\\"\\n    + \\\"mbYes \\\"\\n    + \\\"mbYesToAll \\\"\\n    + \\\"MEMORY_DATASET_DESRIPTIONS_FILENAME \\\"\\n    + \\\"mrNo \\\"\\n    + \\\"mrNoToAll \\\"\\n    + \\\"mrYes \\\"\\n    + \\\"mrYesToAll \\\"\\n    + \\\"MULTIPLE_SELECT_DIALOG_CODE \\\"\\n    + \\\"NONOPERATING_RECORD_FLAG_FEMININE \\\"\\n    + \\\"NONOPERATING_RECORD_FLAG_MASCULINE \\\"\\n    + \\\"OPERATING_RECORD_FLAG_FEMININE \\\"\\n    + \\\"OPERATING_RECORD_FLAG_MASCULINE \\\"\\n    + \\\"PROFILING_SETTINGS_COMMON_SETTINGS_CODE_VALUE \\\"\\n    + \\\"PROGRAM_INITIATED_LOOKUP_ACTION \\\"\\n    + \\\"ratDelete \\\"\\n    + \\\"ratEdit \\\"\\n    + \\\"ratInsert \\\"\\n    + \\\"REPORT_TYPE \\\"\\n    + \\\"REQUIRED_PICK_VALUES_VARIABLE \\\"\\n    + \\\"rmCard \\\"\\n    + \\\"rmList \\\"\\n    + \\\"SBRTE_PROGID_DEV \\\"\\n    + \\\"SBRTE_PROGID_RELEASE \\\"\\n    + \\\"STATIC_ROLE_TYPE_CODE \\\"\\n    + \\\"SUPPRESS_EMPTY_TEMPLATE_CREATION \\\"\\n    + \\\"SYSTEM_USER_CODE \\\"\\n    + \\\"UPDATE_DIALOG_DATASET \\\"\\n    + \\\"USED_IN_OBJECT_HINT_PARAM \\\"\\n    + \\\"USER_INITIATED_LOOKUP_ACTION \\\"\\n    + \\\"USER_NAME_FORMAT \\\"\\n    + \\\"USER_SELECTION_RESTRICTIONS \\\"\\n    + \\\"WORKFLOW_TEST_PROTOCOLS_FOLDER_PATH \\\"\\n    + \\\"ELS_SUBTYPE_CONTROL_NAME \\\"\\n    + \\\"ELS_FOLDER_KIND_CONTROL_NAME \\\"\\n    + \\\"REPEAT_PROCESS_CURRENT_OBJECT_EXCEPTION_NAME \\\";\\n\\n  // Privileges\\n  const privileges_constants =\\n    \\\"PRIVILEGE_COMPONENT_FULL_ACCESS \\\"\\n    + \\\"PRIVILEGE_DEVELOPMENT_EXPORT \\\"\\n    + \\\"PRIVILEGE_DEVELOPMENT_IMPORT \\\"\\n    + \\\"PRIVILEGE_DOCUMENT_DELETE \\\"\\n    + \\\"PRIVILEGE_ESD \\\"\\n    + \\\"PRIVILEGE_FOLDER_DELETE \\\"\\n    + \\\"PRIVILEGE_MANAGE_ACCESS_RIGHTS \\\"\\n    + \\\"PRIVILEGE_MANAGE_REPLICATION \\\"\\n    + \\\"PRIVILEGE_MANAGE_SESSION_SERVER \\\"\\n    + \\\"PRIVILEGE_OBJECT_FULL_ACCESS \\\"\\n    + \\\"PRIVILEGE_OBJECT_VIEW \\\"\\n    + \\\"PRIVILEGE_RESERVE_LICENSE \\\"\\n    + \\\"PRIVILEGE_SYSTEM_CUSTOMIZE \\\"\\n    + \\\"PRIVILEGE_SYSTEM_DEVELOP \\\"\\n    + \\\"PRIVILEGE_SYSTEM_INSTALL \\\"\\n    + \\\"PRIVILEGE_TASK_DELETE \\\"\\n    + \\\"PRIVILEGE_USER_PLUGIN_SETTINGS_CUSTOMIZE \\\"\\n    + \\\"PRIVILEGES_PSEUDOREFERENCE_CODE \\\";\\n\\n  // Pseudoreference code\\n  const pseudoreference_code_constants =\\n    \\\"ACCESS_TYPES_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"ALL_AVAILABLE_COMPONENTS_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"ALL_AVAILABLE_PRIVILEGES_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"ALL_REPLICATE_COMPONENTS_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"AVAILABLE_DEVELOPERS_COMPONENTS_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"COMPONENTS_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"FILTRATER_SETTINGS_CONFLICTS_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"GROUPS_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"RECEIVE_PROTOCOL_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"REFERENCE_REQUISITE_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"REFERENCE_REQUISITES_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"REFTYPES_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"REPLICATION_SEANCES_DIARY_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"SEND_PROTOCOL_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"SUBSTITUTES_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"SYSTEM_SETTINGS_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"UNITS_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"USERS_PSEUDOREFERENCE_CODE \\\"\\n    + \\\"VIEWERS_PSEUDOREFERENCE_CODE \\\";\\n\\n  // Requisite ISBCertificateType values\\n  const requisite_ISBCertificateType_values_constants =\\n    \\\"CERTIFICATE_TYPE_ENCRYPT \\\"\\n    + \\\"CERTIFICATE_TYPE_SIGN \\\"\\n    + \\\"CERTIFICATE_TYPE_SIGN_AND_ENCRYPT \\\";\\n\\n  // Requisite ISBEDocStorageType values\\n  const requisite_ISBEDocStorageType_values_constants =\\n    \\\"STORAGE_TYPE_FILE \\\"\\n    + \\\"STORAGE_TYPE_NAS_CIFS \\\"\\n    + \\\"STORAGE_TYPE_SAPERION \\\"\\n    + \\\"STORAGE_TYPE_SQL_SERVER \\\";\\n\\n  // Requisite CompType2 values\\n  const requisite_compType2_values_constants =\\n    \\\"COMPTYPE2_REQUISITE_DOCUMENTS_VALUE \\\"\\n    + \\\"COMPTYPE2_REQUISITE_TASKS_VALUE \\\"\\n    + \\\"COMPTYPE2_REQUISITE_FOLDERS_VALUE \\\"\\n    + \\\"COMPTYPE2_REQUISITE_REFERENCES_VALUE \\\";\\n\\n  // Requisite name\\n  const requisite_name_constants =\\n    \\\"SYSREQ_CODE \\\"\\n    + \\\"SYSREQ_COMPTYPE2 \\\"\\n    + \\\"SYSREQ_CONST_AVAILABLE_FOR_WEB \\\"\\n    + \\\"SYSREQ_CONST_COMMON_CODE \\\"\\n    + \\\"SYSREQ_CONST_COMMON_VALUE \\\"\\n    + \\\"SYSREQ_CONST_FIRM_CODE \\\"\\n    + \\\"SYSREQ_CONST_FIRM_STATUS \\\"\\n    + \\\"SYSREQ_CONST_FIRM_VALUE \\\"\\n    + \\\"SYSREQ_CONST_SERVER_STATUS \\\"\\n    + \\\"SYSREQ_CONTENTS \\\"\\n    + \\\"SYSREQ_DATE_OPEN \\\"\\n    + \\\"SYSREQ_DATE_CLOSE \\\"\\n    + \\\"SYSREQ_DESCRIPTION \\\"\\n    + \\\"SYSREQ_DESCRIPTION_LOCALIZE_ID \\\"\\n    + \\\"SYSREQ_DOUBLE \\\"\\n    + \\\"SYSREQ_EDOC_ACCESS_TYPE \\\"\\n    + \\\"SYSREQ_EDOC_AUTHOR \\\"\\n    + \\\"SYSREQ_EDOC_CREATED \\\"\\n    + \\\"SYSREQ_EDOC_DELEGATE_RIGHTS_REQUISITE_CODE \\\"\\n    + \\\"SYSREQ_EDOC_EDITOR \\\"\\n    + \\\"SYSREQ_EDOC_ENCODE_TYPE \\\"\\n    + \\\"SYSREQ_EDOC_ENCRYPTION_PLUGIN_NAME \\\"\\n    + \\\"SYSREQ_EDOC_ENCRYPTION_PLUGIN_VERSION \\\"\\n    + \\\"SYSREQ_EDOC_EXPORT_DATE \\\"\\n    + \\\"SYSREQ_EDOC_EXPORTER \\\"\\n    + \\\"SYSREQ_EDOC_KIND \\\"\\n    + \\\"SYSREQ_EDOC_LIFE_STAGE_NAME \\\"\\n    + \\\"SYSREQ_EDOC_LOCKED_FOR_SERVER_CODE \\\"\\n    + \\\"SYSREQ_EDOC_MODIFIED \\\"\\n    + \\\"SYSREQ_EDOC_NAME \\\"\\n    + \\\"SYSREQ_EDOC_NOTE \\\"\\n    + \\\"SYSREQ_EDOC_QUALIFIED_ID \\\"\\n    + \\\"SYSREQ_EDOC_SESSION_KEY \\\"\\n    + \\\"SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_NAME \\\"\\n    + \\\"SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_VERSION \\\"\\n    + \\\"SYSREQ_EDOC_SIGNATURE_TYPE \\\"\\n    + \\\"SYSREQ_EDOC_SIGNED \\\"\\n    + \\\"SYSREQ_EDOC_STORAGE \\\"\\n    + \\\"SYSREQ_EDOC_STORAGES_ARCHIVE_STORAGE \\\"\\n    + \\\"SYSREQ_EDOC_STORAGES_CHECK_RIGHTS \\\"\\n    + \\\"SYSREQ_EDOC_STORAGES_COMPUTER_NAME \\\"\\n    + \\\"SYSREQ_EDOC_STORAGES_EDIT_IN_STORAGE \\\"\\n    + \\\"SYSREQ_EDOC_STORAGES_EXECUTIVE_STORAGE \\\"\\n    + \\\"SYSREQ_EDOC_STORAGES_FUNCTION \\\"\\n    + \\\"SYSREQ_EDOC_STORAGES_INITIALIZED \\\"\\n    + \\\"SYSREQ_EDOC_STORAGES_LOCAL_PATH \\\"\\n    + \\\"SYSREQ_EDOC_STORAGES_SAPERION_DATABASE_NAME \\\"\\n    + \\\"SYSREQ_EDOC_STORAGES_SEARCH_BY_TEXT \\\"\\n    + \\\"SYSREQ_EDOC_STORAGES_SERVER_NAME \\\"\\n    + \\\"SYSREQ_EDOC_STORAGES_SHARED_SOURCE_NAME \\\"\\n    + \\\"SYSREQ_EDOC_STORAGES_TYPE \\\"\\n    + \\\"SYSREQ_EDOC_TEXT_MODIFIED \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_ACT_CODE \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_ACT_DESCRIPTION \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_ACT_DESCRIPTION_LOCALIZE_ID \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE_EXISTS \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_ACT_SECTION \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_ADD_PARAMS \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_COMMENT \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_EVENT_TEXT \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_NAME_LOCALIZE_ID \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_NUMERATION_METHOD \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_PSEUDO_REQUISITE_CODE \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_REQ_CODE \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_REQ_DESCRIPTION \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_REQ_DESCRIPTION_LOCALIZE_ID \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_REQ_IS_LEADING \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_REQ_IS_REQUIRED \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_REQ_NUMBER \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_REQ_ON_CHANGE \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_REQ_ON_CHANGE_EXISTS \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_REQ_ON_SELECT \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_REQ_ON_SELECT_KIND \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_REQ_SECTION \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_VIEW_CARD \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_VIEW_CODE \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_VIEW_COMMENT \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_VIEW_IS_MAIN \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_VIEW_NAME \\\"\\n    + \\\"SYSREQ_EDOC_TYPE_VIEW_NAME_LOCALIZE_ID \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_AUTHOR \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_CRC \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_DATA \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_EDITOR \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_EXPORT_DATE \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_EXPORTER \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_HIDDEN \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_LIFE_STAGE \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_MODIFIED \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_NOTE \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_SIGNATURE_TYPE \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_SIGNED \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_SIZE \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_SOURCE \\\"\\n    + \\\"SYSREQ_EDOC_VERSION_TEXT_MODIFIED \\\"\\n    + \\\"SYSREQ_EDOCKIND_DEFAULT_VERSION_STATE_CODE \\\"\\n    + \\\"SYSREQ_FOLDER_KIND \\\"\\n    + \\\"SYSREQ_FUNC_CATEGORY \\\"\\n    + \\\"SYSREQ_FUNC_COMMENT \\\"\\n    + \\\"SYSREQ_FUNC_GROUP \\\"\\n    + \\\"SYSREQ_FUNC_GROUP_COMMENT \\\"\\n    + \\\"SYSREQ_FUNC_GROUP_NUMBER \\\"\\n    + \\\"SYSREQ_FUNC_HELP \\\"\\n    + \\\"SYSREQ_FUNC_PARAM_DEF_VALUE \\\"\\n    + \\\"SYSREQ_FUNC_PARAM_IDENT \\\"\\n    + \\\"SYSREQ_FUNC_PARAM_NUMBER \\\"\\n    + \\\"SYSREQ_FUNC_PARAM_TYPE \\\"\\n    + \\\"SYSREQ_FUNC_TEXT \\\"\\n    + \\\"SYSREQ_GROUP_CATEGORY \\\"\\n    + \\\"SYSREQ_ID \\\"\\n    + \\\"SYSREQ_LAST_UPDATE \\\"\\n    + \\\"SYSREQ_LEADER_REFERENCE \\\"\\n    + \\\"SYSREQ_LINE_NUMBER \\\"\\n    + \\\"SYSREQ_MAIN_RECORD_ID \\\"\\n    + \\\"SYSREQ_NAME \\\"\\n    + \\\"SYSREQ_NAME_LOCALIZE_ID \\\"\\n    + \\\"SYSREQ_NOTE \\\"\\n    + \\\"SYSREQ_ORIGINAL_RECORD \\\"\\n    + \\\"SYSREQ_OUR_FIRM \\\"\\n    + \\\"SYSREQ_PROFILING_SETTINGS_BATCH_LOGING \\\"\\n    + \\\"SYSREQ_PROFILING_SETTINGS_BATCH_SIZE \\\"\\n    + \\\"SYSREQ_PROFILING_SETTINGS_PROFILING_ENABLED \\\"\\n    + \\\"SYSREQ_PROFILING_SETTINGS_SQL_PROFILING_ENABLED \\\"\\n    + \\\"SYSREQ_PROFILING_SETTINGS_START_LOGGED \\\"\\n    + \\\"SYSREQ_RECORD_STATUS \\\"\\n    + \\\"SYSREQ_REF_REQ_FIELD_NAME \\\"\\n    + \\\"SYSREQ_REF_REQ_FORMAT \\\"\\n    + \\\"SYSREQ_REF_REQ_GENERATED \\\"\\n    + \\\"SYSREQ_REF_REQ_LENGTH \\\"\\n    + \\\"SYSREQ_REF_REQ_PRECISION \\\"\\n    + \\\"SYSREQ_REF_REQ_REFERENCE \\\"\\n    + \\\"SYSREQ_REF_REQ_SECTION \\\"\\n    + \\\"SYSREQ_REF_REQ_STORED \\\"\\n    + \\\"SYSREQ_REF_REQ_TOKENS \\\"\\n    + \\\"SYSREQ_REF_REQ_TYPE \\\"\\n    + \\\"SYSREQ_REF_REQ_VIEW \\\"\\n    + \\\"SYSREQ_REF_TYPE_ACT_CODE \\\"\\n    + \\\"SYSREQ_REF_TYPE_ACT_DESCRIPTION \\\"\\n    + \\\"SYSREQ_REF_TYPE_ACT_DESCRIPTION_LOCALIZE_ID \\\"\\n    + \\\"SYSREQ_REF_TYPE_ACT_ON_EXECUTE \\\"\\n    + \\\"SYSREQ_REF_TYPE_ACT_ON_EXECUTE_EXISTS \\\"\\n    + \\\"SYSREQ_REF_TYPE_ACT_SECTION \\\"\\n    + \\\"SYSREQ_REF_TYPE_ADD_PARAMS \\\"\\n    + \\\"SYSREQ_REF_TYPE_COMMENT \\\"\\n    + \\\"SYSREQ_REF_TYPE_COMMON_SETTINGS \\\"\\n    + \\\"SYSREQ_REF_TYPE_DISPLAY_REQUISITE_NAME \\\"\\n    + \\\"SYSREQ_REF_TYPE_EVENT_TEXT \\\"\\n    + \\\"SYSREQ_REF_TYPE_MAIN_LEADING_REF \\\"\\n    + \\\"SYSREQ_REF_TYPE_NAME_IN_SINGULAR \\\"\\n    + \\\"SYSREQ_REF_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID \\\"\\n    + \\\"SYSREQ_REF_TYPE_NAME_LOCALIZE_ID \\\"\\n    + \\\"SYSREQ_REF_TYPE_NUMERATION_METHOD \\\"\\n    + \\\"SYSREQ_REF_TYPE_REQ_CODE \\\"\\n    + \\\"SYSREQ_REF_TYPE_REQ_DESCRIPTION \\\"\\n    + \\\"SYSREQ_REF_TYPE_REQ_DESCRIPTION_LOCALIZE_ID \\\"\\n    + \\\"SYSREQ_REF_TYPE_REQ_IS_CONTROL \\\"\\n    + \\\"SYSREQ_REF_TYPE_REQ_IS_FILTER \\\"\\n    + \\\"SYSREQ_REF_TYPE_REQ_IS_LEADING \\\"\\n    + \\\"SYSREQ_REF_TYPE_REQ_IS_REQUIRED \\\"\\n    + \\\"SYSREQ_REF_TYPE_REQ_NUMBER \\\"\\n    + \\\"SYSREQ_REF_TYPE_REQ_ON_CHANGE \\\"\\n    + \\\"SYSREQ_REF_TYPE_REQ_ON_CHANGE_EXISTS \\\"\\n    + \\\"SYSREQ_REF_TYPE_REQ_ON_SELECT \\\"\\n    + \\\"SYSREQ_REF_TYPE_REQ_ON_SELECT_KIND \\\"\\n    + \\\"SYSREQ_REF_TYPE_REQ_SECTION \\\"\\n    + \\\"SYSREQ_REF_TYPE_VIEW_CARD \\\"\\n    + \\\"SYSREQ_REF_TYPE_VIEW_CODE \\\"\\n    + \\\"SYSREQ_REF_TYPE_VIEW_COMMENT \\\"\\n    + \\\"SYSREQ_REF_TYPE_VIEW_IS_MAIN \\\"\\n    + \\\"SYSREQ_REF_TYPE_VIEW_NAME \\\"\\n    + \\\"SYSREQ_REF_TYPE_VIEW_NAME_LOCALIZE_ID \\\"\\n    + \\\"SYSREQ_REFERENCE_TYPE_ID \\\"\\n    + \\\"SYSREQ_STATE \\\"\\n    + \\\"SYSREQ_STATЕ \\\"\\n    + \\\"SYSREQ_SYSTEM_SETTINGS_VALUE \\\"\\n    + \\\"SYSREQ_TYPE \\\"\\n    + \\\"SYSREQ_UNIT \\\"\\n    + \\\"SYSREQ_UNIT_ID \\\"\\n    + \\\"SYSREQ_USER_GROUPS_GROUP_FULL_NAME \\\"\\n    + \\\"SYSREQ_USER_GROUPS_GROUP_NAME \\\"\\n    + \\\"SYSREQ_USER_GROUPS_GROUP_SERVER_NAME \\\"\\n    + \\\"SYSREQ_USERS_ACCESS_RIGHTS \\\"\\n    + \\\"SYSREQ_USERS_AUTHENTICATION \\\"\\n    + \\\"SYSREQ_USERS_CATEGORY \\\"\\n    + \\\"SYSREQ_USERS_COMPONENT \\\"\\n    + \\\"SYSREQ_USERS_COMPONENT_USER_IS_PUBLIC \\\"\\n    + \\\"SYSREQ_USERS_DOMAIN \\\"\\n    + \\\"SYSREQ_USERS_FULL_USER_NAME \\\"\\n    + \\\"SYSREQ_USERS_GROUP \\\"\\n    + \\\"SYSREQ_USERS_IS_MAIN_SERVER \\\"\\n    + \\\"SYSREQ_USERS_LOGIN \\\"\\n    + \\\"SYSREQ_USERS_REFERENCE_USER_IS_PUBLIC \\\"\\n    + \\\"SYSREQ_USERS_STATUS \\\"\\n    + \\\"SYSREQ_USERS_USER_CERTIFICATE \\\"\\n    + \\\"SYSREQ_USERS_USER_CERTIFICATE_INFO \\\"\\n    + \\\"SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_NAME \\\"\\n    + \\\"SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_VERSION \\\"\\n    + \\\"SYSREQ_USERS_USER_CERTIFICATE_STATE \\\"\\n    + \\\"SYSREQ_USERS_USER_CERTIFICATE_SUBJECT_NAME \\\"\\n    + \\\"SYSREQ_USERS_USER_CERTIFICATE_THUMBPRINT \\\"\\n    + \\\"SYSREQ_USERS_USER_DEFAULT_CERTIFICATE \\\"\\n    + \\\"SYSREQ_USERS_USER_DESCRIPTION \\\"\\n    + \\\"SYSREQ_USERS_USER_GLOBAL_NAME \\\"\\n    + \\\"SYSREQ_USERS_USER_LOGIN \\\"\\n    + \\\"SYSREQ_USERS_USER_MAIN_SERVER \\\"\\n    + \\\"SYSREQ_USERS_USER_TYPE \\\"\\n    + \\\"SYSREQ_WORK_RULES_FOLDER_ID \\\";\\n\\n  // Result\\n  const result_constants = \\\"RESULT_VAR_NAME RESULT_VAR_NAME_ENG \\\";\\n\\n  // Rule identification\\n  const rule_identification_constants =\\n    \\\"AUTO_NUMERATION_RULE_ID \\\"\\n    + \\\"CANT_CHANGE_ID_REQUISITE_RULE_ID \\\"\\n    + \\\"CANT_CHANGE_OURFIRM_REQUISITE_RULE_ID \\\"\\n    + \\\"CHECK_CHANGING_REFERENCE_RECORD_USE_RULE_ID \\\"\\n    + \\\"CHECK_CODE_REQUISITE_RULE_ID \\\"\\n    + \\\"CHECK_DELETING_REFERENCE_RECORD_USE_RULE_ID \\\"\\n    + \\\"CHECK_FILTRATER_CHANGES_RULE_ID \\\"\\n    + \\\"CHECK_RECORD_INTERVAL_RULE_ID \\\"\\n    + \\\"CHECK_REFERENCE_INTERVAL_RULE_ID \\\"\\n    + \\\"CHECK_REQUIRED_DATA_FULLNESS_RULE_ID \\\"\\n    + \\\"CHECK_REQUIRED_REQUISITES_FULLNESS_RULE_ID \\\"\\n    + \\\"MAKE_RECORD_UNRATIFIED_RULE_ID \\\"\\n    + \\\"RESTORE_AUTO_NUMERATION_RULE_ID \\\"\\n    + \\\"SET_FIRM_CONTEXT_FROM_RECORD_RULE_ID \\\"\\n    + \\\"SET_FIRST_RECORD_IN_LIST_FORM_RULE_ID \\\"\\n    + \\\"SET_IDSPS_VALUE_RULE_ID \\\"\\n    + \\\"SET_NEXT_CODE_VALUE_RULE_ID \\\"\\n    + \\\"SET_OURFIRM_BOUNDS_RULE_ID \\\"\\n    + \\\"SET_OURFIRM_REQUISITE_RULE_ID \\\";\\n\\n  // Script block properties\\n  const script_block_properties_constants =\\n    \\\"SCRIPT_BLOCK_AFTER_FINISH_EVENT \\\"\\n    + \\\"SCRIPT_BLOCK_BEFORE_START_EVENT \\\"\\n    + \\\"SCRIPT_BLOCK_EXECUTION_RESULTS_PROPERTY \\\"\\n    + \\\"SCRIPT_BLOCK_NAME_PROPERTY \\\"\\n    + \\\"SCRIPT_BLOCK_SCRIPT_PROPERTY \\\";\\n\\n  // Subtask block properties\\n  const subtask_block_properties_constants =\\n    \\\"SUBTASK_BLOCK_ABORT_DEADLINE_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_AFTER_FINISH_EVENT \\\"\\n    + \\\"SUBTASK_BLOCK_ASSIGN_PARAMS_EVENT \\\"\\n    + \\\"SUBTASK_BLOCK_ATTACHMENTS_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_BEFORE_START_EVENT \\\"\\n    + \\\"SUBTASK_BLOCK_CREATED_TASK_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_CREATION_EVENT \\\"\\n    + \\\"SUBTASK_BLOCK_DEADLINE_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_IMPORTANCE_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_INITIATOR_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_JOBS_TYPE_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_NAME_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_PARALLEL_ROUTE_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_PERFORMERS_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_REQUIRE_SIGN_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_STANDARD_ROUTE_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_START_EVENT \\\"\\n    + \\\"SUBTASK_BLOCK_STEP_CONTROL_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_SUBJECT_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_TASK_CONTROL_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_TEXT_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_UNLOCK_ATTACHMENTS_ON_STOP_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_USE_STANDARD_ROUTE_PROPERTY \\\"\\n    + \\\"SUBTASK_BLOCK_WAIT_FOR_TASK_COMPLETE_PROPERTY \\\";\\n\\n  // System component\\n  const system_component_constants =\\n    \\\"SYSCOMP_CONTROL_JOBS \\\"\\n    + \\\"SYSCOMP_FOLDERS \\\"\\n    + \\\"SYSCOMP_JOBS \\\"\\n    + \\\"SYSCOMP_NOTICES \\\"\\n    + \\\"SYSCOMP_TASKS \\\";\\n\\n  // System dialogs\\n  const system_dialogs_constants =\\n    \\\"SYSDLG_CREATE_EDOCUMENT \\\"\\n    + \\\"SYSDLG_CREATE_EDOCUMENT_VERSION \\\"\\n    + \\\"SYSDLG_CURRENT_PERIOD \\\"\\n    + \\\"SYSDLG_EDIT_FUNCTION_HELP \\\"\\n    + \\\"SYSDLG_EDOCUMENT_KINDS_FOR_TEMPLATE \\\"\\n    + \\\"SYSDLG_EXPORT_MULTIPLE_EDOCUMENTS \\\"\\n    + \\\"SYSDLG_EXPORT_SINGLE_EDOCUMENT \\\"\\n    + \\\"SYSDLG_IMPORT_EDOCUMENT \\\"\\n    + \\\"SYSDLG_MULTIPLE_SELECT \\\"\\n    + \\\"SYSDLG_SETUP_ACCESS_RIGHTS \\\"\\n    + \\\"SYSDLG_SETUP_DEFAULT_RIGHTS \\\"\\n    + \\\"SYSDLG_SETUP_FILTER_CONDITION \\\"\\n    + \\\"SYSDLG_SETUP_SIGN_RIGHTS \\\"\\n    + \\\"SYSDLG_SETUP_TASK_OBSERVERS \\\"\\n    + \\\"SYSDLG_SETUP_TASK_ROUTE \\\"\\n    + \\\"SYSDLG_SETUP_USERS_LIST \\\"\\n    + \\\"SYSDLG_SIGN_EDOCUMENT \\\"\\n    + \\\"SYSDLG_SIGN_MULTIPLE_EDOCUMENTS \\\";\\n\\n  // System reference names\\n  const system_reference_names_constants =\\n    \\\"SYSREF_ACCESS_RIGHTS_TYPES \\\"\\n    + \\\"SYSREF_ADMINISTRATION_HISTORY \\\"\\n    + \\\"SYSREF_ALL_AVAILABLE_COMPONENTS \\\"\\n    + \\\"SYSREF_ALL_AVAILABLE_PRIVILEGES \\\"\\n    + \\\"SYSREF_ALL_REPLICATING_COMPONENTS \\\"\\n    + \\\"SYSREF_AVAILABLE_DEVELOPERS_COMPONENTS \\\"\\n    + \\\"SYSREF_CALENDAR_EVENTS \\\"\\n    + \\\"SYSREF_COMPONENT_TOKEN_HISTORY \\\"\\n    + \\\"SYSREF_COMPONENT_TOKENS \\\"\\n    + \\\"SYSREF_COMPONENTS \\\"\\n    + \\\"SYSREF_CONSTANTS \\\"\\n    + \\\"SYSREF_DATA_RECEIVE_PROTOCOL \\\"\\n    + \\\"SYSREF_DATA_SEND_PROTOCOL \\\"\\n    + \\\"SYSREF_DIALOGS \\\"\\n    + \\\"SYSREF_DIALOGS_REQUISITES \\\"\\n    + \\\"SYSREF_EDITORS \\\"\\n    + \\\"SYSREF_EDOC_CARDS \\\"\\n    + \\\"SYSREF_EDOC_TYPES \\\"\\n    + \\\"SYSREF_EDOCUMENT_CARD_REQUISITES \\\"\\n    + \\\"SYSREF_EDOCUMENT_CARD_TYPES \\\"\\n    + \\\"SYSREF_EDOCUMENT_CARD_TYPES_REFERENCE \\\"\\n    + \\\"SYSREF_EDOCUMENT_CARDS \\\"\\n    + \\\"SYSREF_EDOCUMENT_HISTORY \\\"\\n    + \\\"SYSREF_EDOCUMENT_KINDS \\\"\\n    + \\\"SYSREF_EDOCUMENT_REQUISITES \\\"\\n    + \\\"SYSREF_EDOCUMENT_SIGNATURES \\\"\\n    + \\\"SYSREF_EDOCUMENT_TEMPLATES \\\"\\n    + \\\"SYSREF_EDOCUMENT_TEXT_STORAGES \\\"\\n    + \\\"SYSREF_EDOCUMENT_VIEWS \\\"\\n    + \\\"SYSREF_FILTERER_SETUP_CONFLICTS \\\"\\n    + \\\"SYSREF_FILTRATER_SETTING_CONFLICTS \\\"\\n    + \\\"SYSREF_FOLDER_HISTORY \\\"\\n    + \\\"SYSREF_FOLDERS \\\"\\n    + \\\"SYSREF_FUNCTION_GROUPS \\\"\\n    + \\\"SYSREF_FUNCTION_PARAMS \\\"\\n    + \\\"SYSREF_FUNCTIONS \\\"\\n    + \\\"SYSREF_JOB_HISTORY \\\"\\n    + \\\"SYSREF_LINKS \\\"\\n    + \\\"SYSREF_LOCALIZATION_DICTIONARY \\\"\\n    + \\\"SYSREF_LOCALIZATION_LANGUAGES \\\"\\n    + \\\"SYSREF_MODULES \\\"\\n    + \\\"SYSREF_PRIVILEGES \\\"\\n    + \\\"SYSREF_RECORD_HISTORY \\\"\\n    + \\\"SYSREF_REFERENCE_REQUISITES \\\"\\n    + \\\"SYSREF_REFERENCE_TYPE_VIEWS \\\"\\n    + \\\"SYSREF_REFERENCE_TYPES \\\"\\n    + \\\"SYSREF_REFERENCES \\\"\\n    + \\\"SYSREF_REFERENCES_REQUISITES \\\"\\n    + \\\"SYSREF_REMOTE_SERVERS \\\"\\n    + \\\"SYSREF_REPLICATION_SESSIONS_LOG \\\"\\n    + \\\"SYSREF_REPLICATION_SESSIONS_PROTOCOL \\\"\\n    + \\\"SYSREF_REPORTS \\\"\\n    + \\\"SYSREF_ROLES \\\"\\n    + \\\"SYSREF_ROUTE_BLOCK_GROUPS \\\"\\n    + \\\"SYSREF_ROUTE_BLOCKS \\\"\\n    + \\\"SYSREF_SCRIPTS \\\"\\n    + \\\"SYSREF_SEARCHES \\\"\\n    + \\\"SYSREF_SERVER_EVENTS \\\"\\n    + \\\"SYSREF_SERVER_EVENTS_HISTORY \\\"\\n    + \\\"SYSREF_STANDARD_ROUTE_GROUPS \\\"\\n    + \\\"SYSREF_STANDARD_ROUTES \\\"\\n    + \\\"SYSREF_STATUSES \\\"\\n    + \\\"SYSREF_SYSTEM_SETTINGS \\\"\\n    + \\\"SYSREF_TASK_HISTORY \\\"\\n    + \\\"SYSREF_TASK_KIND_GROUPS \\\"\\n    + \\\"SYSREF_TASK_KINDS \\\"\\n    + \\\"SYSREF_TASK_RIGHTS \\\"\\n    + \\\"SYSREF_TASK_SIGNATURES \\\"\\n    + \\\"SYSREF_TASKS \\\"\\n    + \\\"SYSREF_UNITS \\\"\\n    + \\\"SYSREF_USER_GROUPS \\\"\\n    + \\\"SYSREF_USER_GROUPS_REFERENCE \\\"\\n    + \\\"SYSREF_USER_SUBSTITUTION \\\"\\n    + \\\"SYSREF_USERS \\\"\\n    + \\\"SYSREF_USERS_REFERENCE \\\"\\n    + \\\"SYSREF_VIEWERS \\\"\\n    + \\\"SYSREF_WORKING_TIME_CALENDARS \\\";\\n\\n  // Table name\\n  const table_name_constants =\\n    \\\"ACCESS_RIGHTS_TABLE_NAME \\\"\\n    + \\\"EDMS_ACCESS_TABLE_NAME \\\"\\n    + \\\"EDOC_TYPES_TABLE_NAME \\\";\\n\\n  // Test\\n  const test_constants =\\n    \\\"TEST_DEV_DB_NAME \\\"\\n    + \\\"TEST_DEV_SYSTEM_CODE \\\"\\n    + \\\"TEST_EDMS_DB_NAME \\\"\\n    + \\\"TEST_EDMS_MAIN_CODE \\\"\\n    + \\\"TEST_EDMS_MAIN_DB_NAME \\\"\\n    + \\\"TEST_EDMS_SECOND_CODE \\\"\\n    + \\\"TEST_EDMS_SECOND_DB_NAME \\\"\\n    + \\\"TEST_EDMS_SYSTEM_CODE \\\"\\n    + \\\"TEST_ISB5_MAIN_CODE \\\"\\n    + \\\"TEST_ISB5_SECOND_CODE \\\"\\n    + \\\"TEST_SQL_SERVER_2005_NAME \\\"\\n    + \\\"TEST_SQL_SERVER_NAME \\\";\\n\\n  // Using the dialog windows\\n  const using_the_dialog_windows_constants =\\n    \\\"ATTENTION_CAPTION \\\"\\n    + \\\"cbsCommandLinks \\\"\\n    + \\\"cbsDefault \\\"\\n    + \\\"CONFIRMATION_CAPTION \\\"\\n    + \\\"ERROR_CAPTION \\\"\\n    + \\\"INFORMATION_CAPTION \\\"\\n    + \\\"mrCancel \\\"\\n    + \\\"mrOk \\\";\\n\\n  // Using the document\\n  const using_the_document_constants =\\n    \\\"EDOC_VERSION_ACTIVE_STAGE_CODE \\\"\\n    + \\\"EDOC_VERSION_DESIGN_STAGE_CODE \\\"\\n    + \\\"EDOC_VERSION_OBSOLETE_STAGE_CODE \\\";\\n\\n  // Using the EA and encryption\\n  const using_the_EA_and_encryption_constants =\\n    \\\"cpDataEnciphermentEnabled \\\"\\n    + \\\"cpDigitalSignatureEnabled \\\"\\n    + \\\"cpID \\\"\\n    + \\\"cpIssuer \\\"\\n    + \\\"cpPluginVersion \\\"\\n    + \\\"cpSerial \\\"\\n    + \\\"cpSubjectName \\\"\\n    + \\\"cpSubjSimpleName \\\"\\n    + \\\"cpValidFromDate \\\"\\n    + \\\"cpValidToDate \\\";\\n\\n  // Using the ISBL-editor\\n  const using_the_ISBL_editor_constants =\\n    \\\"ISBL_SYNTAX \\\" + \\\"NO_SYNTAX \\\" + \\\"XML_SYNTAX \\\";\\n\\n  // Wait block properties\\n  const wait_block_properties_constants =\\n    \\\"WAIT_BLOCK_AFTER_FINISH_EVENT \\\"\\n    + \\\"WAIT_BLOCK_BEFORE_START_EVENT \\\"\\n    + \\\"WAIT_BLOCK_DEADLINE_PROPERTY \\\"\\n    + \\\"WAIT_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY \\\"\\n    + \\\"WAIT_BLOCK_NAME_PROPERTY \\\"\\n    + \\\"WAIT_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY \\\";\\n\\n  // SYSRES Common\\n  const sysres_common_constants =\\n    \\\"SYSRES_COMMON \\\"\\n    + \\\"SYSRES_CONST \\\"\\n    + \\\"SYSRES_MBFUNC \\\"\\n    + \\\"SYSRES_SBDATA \\\"\\n    + \\\"SYSRES_SBGUI \\\"\\n    + \\\"SYSRES_SBINTF \\\"\\n    + \\\"SYSRES_SBREFDSC \\\"\\n    + \\\"SYSRES_SQLERRORS \\\"\\n    + \\\"SYSRES_SYSCOMP \\\";\\n\\n  // Константы ==> built_in\\n  const CONSTANTS =\\n    sysres_constants\\n    + base_constants\\n    + base_group_name_constants\\n    + decision_block_properties_constants\\n    + file_extension_constants\\n    + job_block_properties_constants\\n    + language_code_constants\\n    + launching_external_applications_constants\\n    + link_kind_constants\\n    + lock_type_constants\\n    + monitor_block_properties_constants\\n    + notice_block_properties_constants\\n    + object_events_constants\\n    + object_params_constants\\n    + other_constants\\n    + privileges_constants\\n    + pseudoreference_code_constants\\n    + requisite_ISBCertificateType_values_constants\\n    + requisite_ISBEDocStorageType_values_constants\\n    + requisite_compType2_values_constants\\n    + requisite_name_constants\\n    + result_constants\\n    + rule_identification_constants\\n    + script_block_properties_constants\\n    + subtask_block_properties_constants\\n    + system_component_constants\\n    + system_dialogs_constants\\n    + system_reference_names_constants\\n    + table_name_constants\\n    + test_constants\\n    + using_the_dialog_windows_constants\\n    + using_the_document_constants\\n    + using_the_EA_and_encryption_constants\\n    + using_the_ISBL_editor_constants\\n    + wait_block_properties_constants\\n    + sysres_common_constants;\\n\\n  // enum TAccountType\\n  const TAccountType = \\\"atUser atGroup atRole \\\";\\n\\n  // enum TActionEnabledMode\\n  const TActionEnabledMode =\\n    \\\"aemEnabledAlways \\\"\\n    + \\\"aemDisabledAlways \\\"\\n    + \\\"aemEnabledOnBrowse \\\"\\n    + \\\"aemEnabledOnEdit \\\"\\n    + \\\"aemDisabledOnBrowseEmpty \\\";\\n\\n  // enum TAddPosition\\n  const TAddPosition = \\\"apBegin apEnd \\\";\\n\\n  // enum TAlignment\\n  const TAlignment = \\\"alLeft alRight \\\";\\n\\n  // enum TAreaShowMode\\n  const TAreaShowMode =\\n    \\\"asmNever \\\"\\n    + \\\"asmNoButCustomize \\\"\\n    + \\\"asmAsLastTime \\\"\\n    + \\\"asmYesButCustomize \\\"\\n    + \\\"asmAlways \\\";\\n\\n  // enum TCertificateInvalidationReason\\n  const TCertificateInvalidationReason = \\\"cirCommon cirRevoked \\\";\\n\\n  // enum TCertificateType\\n  const TCertificateType = \\\"ctSignature ctEncode ctSignatureEncode \\\";\\n\\n  // enum TCheckListBoxItemState\\n  const TCheckListBoxItemState = \\\"clbUnchecked clbChecked clbGrayed \\\";\\n\\n  // enum TCloseOnEsc\\n  const TCloseOnEsc = \\\"ceISB ceAlways ceNever \\\";\\n\\n  // enum TCompType\\n  const TCompType =\\n    \\\"ctDocument \\\"\\n    + \\\"ctReference \\\"\\n    + \\\"ctScript \\\"\\n    + \\\"ctUnknown \\\"\\n    + \\\"ctReport \\\"\\n    + \\\"ctDialog \\\"\\n    + \\\"ctFunction \\\"\\n    + \\\"ctFolder \\\"\\n    + \\\"ctEDocument \\\"\\n    + \\\"ctTask \\\"\\n    + \\\"ctJob \\\"\\n    + \\\"ctNotice \\\"\\n    + \\\"ctControlJob \\\";\\n\\n  // enum TConditionFormat\\n  const TConditionFormat = \\\"cfInternal cfDisplay \\\";\\n\\n  // enum TConnectionIntent\\n  const TConnectionIntent = \\\"ciUnspecified ciWrite ciRead \\\";\\n\\n  // enum TContentKind\\n  const TContentKind =\\n    \\\"ckFolder \\\"\\n    + \\\"ckEDocument \\\"\\n    + \\\"ckTask \\\"\\n    + \\\"ckJob \\\"\\n    + \\\"ckComponentToken \\\"\\n    + \\\"ckAny \\\"\\n    + \\\"ckReference \\\"\\n    + \\\"ckScript \\\"\\n    + \\\"ckReport \\\"\\n    + \\\"ckDialog \\\";\\n\\n  // enum TControlType\\n  const TControlType =\\n    \\\"ctISBLEditor \\\"\\n    + \\\"ctBevel \\\"\\n    + \\\"ctButton \\\"\\n    + \\\"ctCheckListBox \\\"\\n    + \\\"ctComboBox \\\"\\n    + \\\"ctComboEdit \\\"\\n    + \\\"ctGrid \\\"\\n    + \\\"ctDBCheckBox \\\"\\n    + \\\"ctDBComboBox \\\"\\n    + \\\"ctDBEdit \\\"\\n    + \\\"ctDBEllipsis \\\"\\n    + \\\"ctDBMemo \\\"\\n    + \\\"ctDBNavigator \\\"\\n    + \\\"ctDBRadioGroup \\\"\\n    + \\\"ctDBStatusLabel \\\"\\n    + \\\"ctEdit \\\"\\n    + \\\"ctGroupBox \\\"\\n    + \\\"ctInplaceHint \\\"\\n    + \\\"ctMemo \\\"\\n    + \\\"ctPanel \\\"\\n    + \\\"ctListBox \\\"\\n    + \\\"ctRadioButton \\\"\\n    + \\\"ctRichEdit \\\"\\n    + \\\"ctTabSheet \\\"\\n    + \\\"ctWebBrowser \\\"\\n    + \\\"ctImage \\\"\\n    + \\\"ctHyperLink \\\"\\n    + \\\"ctLabel \\\"\\n    + \\\"ctDBMultiEllipsis \\\"\\n    + \\\"ctRibbon \\\"\\n    + \\\"ctRichView \\\"\\n    + \\\"ctInnerPanel \\\"\\n    + \\\"ctPanelGroup \\\"\\n    + \\\"ctBitButton \\\";\\n\\n  // enum TCriterionContentType\\n  const TCriterionContentType =\\n    \\\"cctDate \\\"\\n    + \\\"cctInteger \\\"\\n    + \\\"cctNumeric \\\"\\n    + \\\"cctPick \\\"\\n    + \\\"cctReference \\\"\\n    + \\\"cctString \\\"\\n    + \\\"cctText \\\";\\n\\n  // enum TCultureType\\n  const TCultureType = \\\"cltInternal cltPrimary cltGUI \\\";\\n\\n  // enum TDataSetEventType\\n  const TDataSetEventType =\\n    \\\"dseBeforeOpen \\\"\\n    + \\\"dseAfterOpen \\\"\\n    + \\\"dseBeforeClose \\\"\\n    + \\\"dseAfterClose \\\"\\n    + \\\"dseOnValidDelete \\\"\\n    + \\\"dseBeforeDelete \\\"\\n    + \\\"dseAfterDelete \\\"\\n    + \\\"dseAfterDeleteOutOfTransaction \\\"\\n    + \\\"dseOnDeleteError \\\"\\n    + \\\"dseBeforeInsert \\\"\\n    + \\\"dseAfterInsert \\\"\\n    + \\\"dseOnValidUpdate \\\"\\n    + \\\"dseBeforeUpdate \\\"\\n    + \\\"dseOnUpdateRatifiedRecord \\\"\\n    + \\\"dseAfterUpdate \\\"\\n    + \\\"dseAfterUpdateOutOfTransaction \\\"\\n    + \\\"dseOnUpdateError \\\"\\n    + \\\"dseAfterScroll \\\"\\n    + \\\"dseOnOpenRecord \\\"\\n    + \\\"dseOnCloseRecord \\\"\\n    + \\\"dseBeforeCancel \\\"\\n    + \\\"dseAfterCancel \\\"\\n    + \\\"dseOnUpdateDeadlockError \\\"\\n    + \\\"dseBeforeDetailUpdate \\\"\\n    + \\\"dseOnPrepareUpdate \\\"\\n    + \\\"dseOnAnyRequisiteChange \\\";\\n\\n  // enum TDataSetState\\n  const TDataSetState = \\\"dssEdit dssInsert dssBrowse dssInActive \\\";\\n\\n  // enum TDateFormatType\\n  const TDateFormatType = \\\"dftDate dftShortDate dftDateTime dftTimeStamp \\\";\\n\\n  // enum TDateOffsetType\\n  const TDateOffsetType = \\\"dotDays dotHours dotMinutes dotSeconds \\\";\\n\\n  // enum TDateTimeKind\\n  const TDateTimeKind = \\\"dtkndLocal dtkndUTC \\\";\\n\\n  // enum TDeaAccessRights\\n  const TDeaAccessRights = \\\"arNone arView arEdit arFull \\\";\\n\\n  // enum TDocumentDefaultAction\\n  const TDocumentDefaultAction = \\\"ddaView ddaEdit \\\";\\n\\n  // enum TEditMode\\n  const TEditMode =\\n    \\\"emLock \\\"\\n    + \\\"emEdit \\\"\\n    + \\\"emSign \\\"\\n    + \\\"emExportWithLock \\\"\\n    + \\\"emImportWithUnlock \\\"\\n    + \\\"emChangeVersionNote \\\"\\n    + \\\"emOpenForModify \\\"\\n    + \\\"emChangeLifeStage \\\"\\n    + \\\"emDelete \\\"\\n    + \\\"emCreateVersion \\\"\\n    + \\\"emImport \\\"\\n    + \\\"emUnlockExportedWithLock \\\"\\n    + \\\"emStart \\\"\\n    + \\\"emAbort \\\"\\n    + \\\"emReInit \\\"\\n    + \\\"emMarkAsReaded \\\"\\n    + \\\"emMarkAsUnreaded \\\"\\n    + \\\"emPerform \\\"\\n    + \\\"emAccept \\\"\\n    + \\\"emResume \\\"\\n    + \\\"emChangeRights \\\"\\n    + \\\"emEditRoute \\\"\\n    + \\\"emEditObserver \\\"\\n    + \\\"emRecoveryFromLocalCopy \\\"\\n    + \\\"emChangeWorkAccessType \\\"\\n    + \\\"emChangeEncodeTypeToCertificate \\\"\\n    + \\\"emChangeEncodeTypeToPassword \\\"\\n    + \\\"emChangeEncodeTypeToNone \\\"\\n    + \\\"emChangeEncodeTypeToCertificatePassword \\\"\\n    + \\\"emChangeStandardRoute \\\"\\n    + \\\"emGetText \\\"\\n    + \\\"emOpenForView \\\"\\n    + \\\"emMoveToStorage \\\"\\n    + \\\"emCreateObject \\\"\\n    + \\\"emChangeVersionHidden \\\"\\n    + \\\"emDeleteVersion \\\"\\n    + \\\"emChangeLifeCycleStage \\\"\\n    + \\\"emApprovingSign \\\"\\n    + \\\"emExport \\\"\\n    + \\\"emContinue \\\"\\n    + \\\"emLockFromEdit \\\"\\n    + \\\"emUnLockForEdit \\\"\\n    + \\\"emLockForServer \\\"\\n    + \\\"emUnlockFromServer \\\"\\n    + \\\"emDelegateAccessRights \\\"\\n    + \\\"emReEncode \\\";\\n\\n  // enum TEditorCloseObservType\\n  const TEditorCloseObservType = \\\"ecotFile ecotProcess \\\";\\n\\n  // enum TEdmsApplicationAction\\n  const TEdmsApplicationAction = \\\"eaGet eaCopy eaCreate eaCreateStandardRoute \\\";\\n\\n  // enum TEDocumentLockType\\n  const TEDocumentLockType = \\\"edltAll edltNothing edltQuery \\\";\\n\\n  // enum TEDocumentStepShowMode\\n  const TEDocumentStepShowMode = \\\"essmText essmCard \\\";\\n\\n  // enum TEDocumentStepVersionType\\n  const TEDocumentStepVersionType = \\\"esvtLast esvtLastActive esvtSpecified \\\";\\n\\n  // enum TEDocumentStorageFunction\\n  const TEDocumentStorageFunction = \\\"edsfExecutive edsfArchive \\\";\\n\\n  // enum TEDocumentStorageType\\n  const TEDocumentStorageType = \\\"edstSQLServer edstFile \\\";\\n\\n  // enum TEDocumentVersionSourceType\\n  const TEDocumentVersionSourceType =\\n    \\\"edvstNone edvstEDocumentVersionCopy edvstFile edvstTemplate edvstScannedFile \\\";\\n\\n  // enum TEDocumentVersionState\\n  const TEDocumentVersionState = \\\"vsDefault vsDesign vsActive vsObsolete \\\";\\n\\n  // enum TEncodeType\\n  const TEncodeType = \\\"etNone etCertificate etPassword etCertificatePassword \\\";\\n\\n  // enum TExceptionCategory\\n  const TExceptionCategory = \\\"ecException ecWarning ecInformation \\\";\\n\\n  // enum TExportedSignaturesType\\n  const TExportedSignaturesType = \\\"estAll estApprovingOnly \\\";\\n\\n  // enum TExportedVersionType\\n  const TExportedVersionType = \\\"evtLast evtLastActive evtQuery \\\";\\n\\n  // enum TFieldDataType\\n  const TFieldDataType =\\n    \\\"fdtString \\\"\\n    + \\\"fdtNumeric \\\"\\n    + \\\"fdtInteger \\\"\\n    + \\\"fdtDate \\\"\\n    + \\\"fdtText \\\"\\n    + \\\"fdtUnknown \\\"\\n    + \\\"fdtWideString \\\"\\n    + \\\"fdtLargeInteger \\\";\\n\\n  // enum TFolderType\\n  const TFolderType =\\n    \\\"ftInbox \\\"\\n    + \\\"ftOutbox \\\"\\n    + \\\"ftFavorites \\\"\\n    + \\\"ftCommonFolder \\\"\\n    + \\\"ftUserFolder \\\"\\n    + \\\"ftComponents \\\"\\n    + \\\"ftQuickLaunch \\\"\\n    + \\\"ftShortcuts \\\"\\n    + \\\"ftSearch \\\";\\n\\n  // enum TGridRowHeight\\n  const TGridRowHeight = \\\"grhAuto \\\" + \\\"grhX1 \\\" + \\\"grhX2 \\\" + \\\"grhX3 \\\";\\n\\n  // enum THyperlinkType\\n  const THyperlinkType = \\\"hltText \\\" + \\\"hltRTF \\\" + \\\"hltHTML \\\";\\n\\n  // enum TImageFileFormat\\n  const TImageFileFormat =\\n    \\\"iffBMP \\\"\\n    + \\\"iffJPEG \\\"\\n    + \\\"iffMultiPageTIFF \\\"\\n    + \\\"iffSinglePageTIFF \\\"\\n    + \\\"iffTIFF \\\"\\n    + \\\"iffPNG \\\";\\n\\n  // enum TImageMode\\n  const TImageMode = \\\"im8bGrayscale \\\" + \\\"im24bRGB \\\" + \\\"im1bMonochrome \\\";\\n\\n  // enum TImageType\\n  const TImageType = \\\"itBMP \\\" + \\\"itJPEG \\\" + \\\"itWMF \\\" + \\\"itPNG \\\";\\n\\n  // enum TInplaceHintKind\\n  const TInplaceHintKind =\\n    \\\"ikhInformation \\\" + \\\"ikhWarning \\\" + \\\"ikhError \\\" + \\\"ikhNoIcon \\\";\\n\\n  // enum TISBLContext\\n  const TISBLContext =\\n    \\\"icUnknown \\\"\\n    + \\\"icScript \\\"\\n    + \\\"icFunction \\\"\\n    + \\\"icIntegratedReport \\\"\\n    + \\\"icAnalyticReport \\\"\\n    + \\\"icDataSetEventHandler \\\"\\n    + \\\"icActionHandler \\\"\\n    + \\\"icFormEventHandler \\\"\\n    + \\\"icLookUpEventHandler \\\"\\n    + \\\"icRequisiteChangeEventHandler \\\"\\n    + \\\"icBeforeSearchEventHandler \\\"\\n    + \\\"icRoleCalculation \\\"\\n    + \\\"icSelectRouteEventHandler \\\"\\n    + \\\"icBlockPropertyCalculation \\\"\\n    + \\\"icBlockQueryParamsEventHandler \\\"\\n    + \\\"icChangeSearchResultEventHandler \\\"\\n    + \\\"icBlockEventHandler \\\"\\n    + \\\"icSubTaskInitEventHandler \\\"\\n    + \\\"icEDocDataSetEventHandler \\\"\\n    + \\\"icEDocLookUpEventHandler \\\"\\n    + \\\"icEDocActionHandler \\\"\\n    + \\\"icEDocFormEventHandler \\\"\\n    + \\\"icEDocRequisiteChangeEventHandler \\\"\\n    + \\\"icStructuredConversionRule \\\"\\n    + \\\"icStructuredConversionEventBefore \\\"\\n    + \\\"icStructuredConversionEventAfter \\\"\\n    + \\\"icWizardEventHandler \\\"\\n    + \\\"icWizardFinishEventHandler \\\"\\n    + \\\"icWizardStepEventHandler \\\"\\n    + \\\"icWizardStepFinishEventHandler \\\"\\n    + \\\"icWizardActionEnableEventHandler \\\"\\n    + \\\"icWizardActionExecuteEventHandler \\\"\\n    + \\\"icCreateJobsHandler \\\"\\n    + \\\"icCreateNoticesHandler \\\"\\n    + \\\"icBeforeLookUpEventHandler \\\"\\n    + \\\"icAfterLookUpEventHandler \\\"\\n    + \\\"icTaskAbortEventHandler \\\"\\n    + \\\"icWorkflowBlockActionHandler \\\"\\n    + \\\"icDialogDataSetEventHandler \\\"\\n    + \\\"icDialogActionHandler \\\"\\n    + \\\"icDialogLookUpEventHandler \\\"\\n    + \\\"icDialogRequisiteChangeEventHandler \\\"\\n    + \\\"icDialogFormEventHandler \\\"\\n    + \\\"icDialogValidCloseEventHandler \\\"\\n    + \\\"icBlockFormEventHandler \\\"\\n    + \\\"icTaskFormEventHandler \\\"\\n    + \\\"icReferenceMethod \\\"\\n    + \\\"icEDocMethod \\\"\\n    + \\\"icDialogMethod \\\"\\n    + \\\"icProcessMessageHandler \\\";\\n\\n  // enum TItemShow\\n  const TItemShow = \\\"isShow \\\" + \\\"isHide \\\" + \\\"isByUserSettings \\\";\\n\\n  // enum TJobKind\\n  const TJobKind = \\\"jkJob \\\" + \\\"jkNotice \\\" + \\\"jkControlJob \\\";\\n\\n  // enum TJoinType\\n  const TJoinType = \\\"jtInner \\\" + \\\"jtLeft \\\" + \\\"jtRight \\\" + \\\"jtFull \\\" + \\\"jtCross \\\";\\n\\n  // enum TLabelPos\\n  const TLabelPos = \\\"lbpAbove \\\" + \\\"lbpBelow \\\" + \\\"lbpLeft \\\" + \\\"lbpRight \\\";\\n\\n  // enum TLicensingType\\n  const TLicensingType = \\\"eltPerConnection \\\" + \\\"eltPerUser \\\";\\n\\n  // enum TLifeCycleStageFontColor\\n  const TLifeCycleStageFontColor =\\n    \\\"sfcUndefined \\\"\\n    + \\\"sfcBlack \\\"\\n    + \\\"sfcGreen \\\"\\n    + \\\"sfcRed \\\"\\n    + \\\"sfcBlue \\\"\\n    + \\\"sfcOrange \\\"\\n    + \\\"sfcLilac \\\";\\n\\n  // enum TLifeCycleStageFontStyle\\n  const TLifeCycleStageFontStyle = \\\"sfsItalic \\\" + \\\"sfsStrikeout \\\" + \\\"sfsNormal \\\";\\n\\n  // enum TLockableDevelopmentComponentType\\n  const TLockableDevelopmentComponentType =\\n    \\\"ldctStandardRoute \\\"\\n    + \\\"ldctWizard \\\"\\n    + \\\"ldctScript \\\"\\n    + \\\"ldctFunction \\\"\\n    + \\\"ldctRouteBlock \\\"\\n    + \\\"ldctIntegratedReport \\\"\\n    + \\\"ldctAnalyticReport \\\"\\n    + \\\"ldctReferenceType \\\"\\n    + \\\"ldctEDocumentType \\\"\\n    + \\\"ldctDialog \\\"\\n    + \\\"ldctServerEvents \\\";\\n\\n  // enum TMaxRecordCountRestrictionType\\n  const TMaxRecordCountRestrictionType =\\n    \\\"mrcrtNone \\\" + \\\"mrcrtUser \\\" + \\\"mrcrtMaximal \\\" + \\\"mrcrtCustom \\\";\\n\\n  // enum TRangeValueType\\n  const TRangeValueType =\\n    \\\"vtEqual \\\" + \\\"vtGreaterOrEqual \\\" + \\\"vtLessOrEqual \\\" + \\\"vtRange \\\";\\n\\n  // enum TRelativeDate\\n  const TRelativeDate =\\n    \\\"rdYesterday \\\"\\n    + \\\"rdToday \\\"\\n    + \\\"rdTomorrow \\\"\\n    + \\\"rdThisWeek \\\"\\n    + \\\"rdThisMonth \\\"\\n    + \\\"rdThisYear \\\"\\n    + \\\"rdNextMonth \\\"\\n    + \\\"rdNextWeek \\\"\\n    + \\\"rdLastWeek \\\"\\n    + \\\"rdLastMonth \\\";\\n\\n  // enum TReportDestination\\n  const TReportDestination = \\\"rdWindow \\\" + \\\"rdFile \\\" + \\\"rdPrinter \\\";\\n\\n  // enum TReqDataType\\n  const TReqDataType =\\n    \\\"rdtString \\\"\\n    + \\\"rdtNumeric \\\"\\n    + \\\"rdtInteger \\\"\\n    + \\\"rdtDate \\\"\\n    + \\\"rdtReference \\\"\\n    + \\\"rdtAccount \\\"\\n    + \\\"rdtText \\\"\\n    + \\\"rdtPick \\\"\\n    + \\\"rdtUnknown \\\"\\n    + \\\"rdtLargeInteger \\\"\\n    + \\\"rdtDocument \\\";\\n\\n  // enum TRequisiteEventType\\n  const TRequisiteEventType = \\\"reOnChange \\\" + \\\"reOnChangeValues \\\";\\n\\n  // enum TSBTimeType\\n  const TSBTimeType = \\\"ttGlobal \\\" + \\\"ttLocal \\\" + \\\"ttUser \\\" + \\\"ttSystem \\\";\\n\\n  // enum TSearchShowMode\\n  const TSearchShowMode =\\n    \\\"ssmBrowse \\\" + \\\"ssmSelect \\\" + \\\"ssmMultiSelect \\\" + \\\"ssmBrowseModal \\\";\\n\\n  // enum TSelectMode\\n  const TSelectMode = \\\"smSelect \\\" + \\\"smLike \\\" + \\\"smCard \\\";\\n\\n  // enum TSignatureType\\n  const TSignatureType = \\\"stNone \\\" + \\\"stAuthenticating \\\" + \\\"stApproving \\\";\\n\\n  // enum TSignerContentType\\n  const TSignerContentType = \\\"sctString \\\" + \\\"sctStream \\\";\\n\\n  // enum TStringsSortType\\n  const TStringsSortType = \\\"sstAnsiSort \\\" + \\\"sstNaturalSort \\\";\\n\\n  // enum TStringValueType\\n  const TStringValueType = \\\"svtEqual \\\" + \\\"svtContain \\\";\\n\\n  // enum TStructuredObjectAttributeType\\n  const TStructuredObjectAttributeType =\\n    \\\"soatString \\\"\\n    + \\\"soatNumeric \\\"\\n    + \\\"soatInteger \\\"\\n    + \\\"soatDatetime \\\"\\n    + \\\"soatReferenceRecord \\\"\\n    + \\\"soatText \\\"\\n    + \\\"soatPick \\\"\\n    + \\\"soatBoolean \\\"\\n    + \\\"soatEDocument \\\"\\n    + \\\"soatAccount \\\"\\n    + \\\"soatIntegerCollection \\\"\\n    + \\\"soatNumericCollection \\\"\\n    + \\\"soatStringCollection \\\"\\n    + \\\"soatPickCollection \\\"\\n    + \\\"soatDatetimeCollection \\\"\\n    + \\\"soatBooleanCollection \\\"\\n    + \\\"soatReferenceRecordCollection \\\"\\n    + \\\"soatEDocumentCollection \\\"\\n    + \\\"soatAccountCollection \\\"\\n    + \\\"soatContents \\\"\\n    + \\\"soatUnknown \\\";\\n\\n  // enum TTaskAbortReason\\n  const TTaskAbortReason = \\\"tarAbortByUser \\\" + \\\"tarAbortByWorkflowException \\\";\\n\\n  // enum TTextValueType\\n  const TTextValueType = \\\"tvtAllWords \\\" + \\\"tvtExactPhrase \\\" + \\\"tvtAnyWord \\\";\\n\\n  // enum TUserObjectStatus\\n  const TUserObjectStatus =\\n    \\\"usNone \\\"\\n    + \\\"usCompleted \\\"\\n    + \\\"usRedSquare \\\"\\n    + \\\"usBlueSquare \\\"\\n    + \\\"usYellowSquare \\\"\\n    + \\\"usGreenSquare \\\"\\n    + \\\"usOrangeSquare \\\"\\n    + \\\"usPurpleSquare \\\"\\n    + \\\"usFollowUp \\\";\\n\\n  // enum TUserType\\n  const TUserType =\\n    \\\"utUnknown \\\"\\n    + \\\"utUser \\\"\\n    + \\\"utDeveloper \\\"\\n    + \\\"utAdministrator \\\"\\n    + \\\"utSystemDeveloper \\\"\\n    + \\\"utDisconnected \\\";\\n\\n  // enum TValuesBuildType\\n  const TValuesBuildType =\\n    \\\"btAnd \\\" + \\\"btDetailAnd \\\" + \\\"btOr \\\" + \\\"btNotOr \\\" + \\\"btOnly \\\";\\n\\n  // enum TViewMode\\n  const TViewMode = \\\"vmView \\\" + \\\"vmSelect \\\" + \\\"vmNavigation \\\";\\n\\n  // enum TViewSelectionMode\\n  const TViewSelectionMode =\\n    \\\"vsmSingle \\\" + \\\"vsmMultiple \\\" + \\\"vsmMultipleCheck \\\" + \\\"vsmNoSelection \\\";\\n\\n  // enum TWizardActionType\\n  const TWizardActionType =\\n    \\\"wfatPrevious \\\" + \\\"wfatNext \\\" + \\\"wfatCancel \\\" + \\\"wfatFinish \\\";\\n\\n  // enum TWizardFormElementProperty\\n  const TWizardFormElementProperty =\\n    \\\"wfepUndefined \\\"\\n    + \\\"wfepText3 \\\"\\n    + \\\"wfepText6 \\\"\\n    + \\\"wfepText9 \\\"\\n    + \\\"wfepSpinEdit \\\"\\n    + \\\"wfepDropDown \\\"\\n    + \\\"wfepRadioGroup \\\"\\n    + \\\"wfepFlag \\\"\\n    + \\\"wfepText12 \\\"\\n    + \\\"wfepText15 \\\"\\n    + \\\"wfepText18 \\\"\\n    + \\\"wfepText21 \\\"\\n    + \\\"wfepText24 \\\"\\n    + \\\"wfepText27 \\\"\\n    + \\\"wfepText30 \\\"\\n    + \\\"wfepRadioGroupColumn1 \\\"\\n    + \\\"wfepRadioGroupColumn2 \\\"\\n    + \\\"wfepRadioGroupColumn3 \\\";\\n\\n  // enum TWizardFormElementType\\n  const TWizardFormElementType =\\n    \\\"wfetQueryParameter \\\" + \\\"wfetText \\\" + \\\"wfetDelimiter \\\" + \\\"wfetLabel \\\";\\n\\n  // enum TWizardParamType\\n  const TWizardParamType =\\n    \\\"wptString \\\"\\n    + \\\"wptInteger \\\"\\n    + \\\"wptNumeric \\\"\\n    + \\\"wptBoolean \\\"\\n    + \\\"wptDateTime \\\"\\n    + \\\"wptPick \\\"\\n    + \\\"wptText \\\"\\n    + \\\"wptUser \\\"\\n    + \\\"wptUserList \\\"\\n    + \\\"wptEDocumentInfo \\\"\\n    + \\\"wptEDocumentInfoList \\\"\\n    + \\\"wptReferenceRecordInfo \\\"\\n    + \\\"wptReferenceRecordInfoList \\\"\\n    + \\\"wptFolderInfo \\\"\\n    + \\\"wptTaskInfo \\\"\\n    + \\\"wptContents \\\"\\n    + \\\"wptFileName \\\"\\n    + \\\"wptDate \\\";\\n\\n  // enum TWizardStepResult\\n  const TWizardStepResult =\\n    \\\"wsrComplete \\\"\\n    + \\\"wsrGoNext \\\"\\n    + \\\"wsrGoPrevious \\\"\\n    + \\\"wsrCustom \\\"\\n    + \\\"wsrCancel \\\"\\n    + \\\"wsrGoFinal \\\";\\n\\n  // enum TWizardStepType\\n  const TWizardStepType =\\n    \\\"wstForm \\\"\\n    + \\\"wstEDocument \\\"\\n    + \\\"wstTaskCard \\\"\\n    + \\\"wstReferenceRecordCard \\\"\\n    + \\\"wstFinal \\\";\\n\\n  // enum TWorkAccessType\\n  const TWorkAccessType = \\\"waAll \\\" + \\\"waPerformers \\\" + \\\"waManual \\\";\\n\\n  // enum TWorkflowBlockType\\n  const TWorkflowBlockType =\\n    \\\"wsbStart \\\"\\n    + \\\"wsbFinish \\\"\\n    + \\\"wsbNotice \\\"\\n    + \\\"wsbStep \\\"\\n    + \\\"wsbDecision \\\"\\n    + \\\"wsbWait \\\"\\n    + \\\"wsbMonitor \\\"\\n    + \\\"wsbScript \\\"\\n    + \\\"wsbConnector \\\"\\n    + \\\"wsbSubTask \\\"\\n    + \\\"wsbLifeCycleStage \\\"\\n    + \\\"wsbPause \\\";\\n\\n  // enum TWorkflowDataType\\n  const TWorkflowDataType =\\n    \\\"wdtInteger \\\"\\n    + \\\"wdtFloat \\\"\\n    + \\\"wdtString \\\"\\n    + \\\"wdtPick \\\"\\n    + \\\"wdtDateTime \\\"\\n    + \\\"wdtBoolean \\\"\\n    + \\\"wdtTask \\\"\\n    + \\\"wdtJob \\\"\\n    + \\\"wdtFolder \\\"\\n    + \\\"wdtEDocument \\\"\\n    + \\\"wdtReferenceRecord \\\"\\n    + \\\"wdtUser \\\"\\n    + \\\"wdtGroup \\\"\\n    + \\\"wdtRole \\\"\\n    + \\\"wdtIntegerCollection \\\"\\n    + \\\"wdtFloatCollection \\\"\\n    + \\\"wdtStringCollection \\\"\\n    + \\\"wdtPickCollection \\\"\\n    + \\\"wdtDateTimeCollection \\\"\\n    + \\\"wdtBooleanCollection \\\"\\n    + \\\"wdtTaskCollection \\\"\\n    + \\\"wdtJobCollection \\\"\\n    + \\\"wdtFolderCollection \\\"\\n    + \\\"wdtEDocumentCollection \\\"\\n    + \\\"wdtReferenceRecordCollection \\\"\\n    + \\\"wdtUserCollection \\\"\\n    + \\\"wdtGroupCollection \\\"\\n    + \\\"wdtRoleCollection \\\"\\n    + \\\"wdtContents \\\"\\n    + \\\"wdtUserList \\\"\\n    + \\\"wdtSearchDescription \\\"\\n    + \\\"wdtDeadLine \\\"\\n    + \\\"wdtPickSet \\\"\\n    + \\\"wdtAccountCollection \\\";\\n\\n  // enum TWorkImportance\\n  const TWorkImportance = \\\"wiLow \\\" + \\\"wiNormal \\\" + \\\"wiHigh \\\";\\n\\n  // enum TWorkRouteType\\n  const TWorkRouteType = \\\"wrtSoft \\\" + \\\"wrtHard \\\";\\n\\n  // enum TWorkState\\n  const TWorkState =\\n    \\\"wsInit \\\"\\n    + \\\"wsRunning \\\"\\n    + \\\"wsDone \\\"\\n    + \\\"wsControlled \\\"\\n    + \\\"wsAborted \\\"\\n    + \\\"wsContinued \\\";\\n\\n  // enum TWorkTextBuildingMode\\n  const TWorkTextBuildingMode =\\n    \\\"wtmFull \\\" + \\\"wtmFromCurrent \\\" + \\\"wtmOnlyCurrent \\\";\\n\\n  // Перечисления\\n  const ENUMS =\\n    TAccountType\\n    + TActionEnabledMode\\n    + TAddPosition\\n    + TAlignment\\n    + TAreaShowMode\\n    + TCertificateInvalidationReason\\n    + TCertificateType\\n    + TCheckListBoxItemState\\n    + TCloseOnEsc\\n    + TCompType\\n    + TConditionFormat\\n    + TConnectionIntent\\n    + TContentKind\\n    + TControlType\\n    + TCriterionContentType\\n    + TCultureType\\n    + TDataSetEventType\\n    + TDataSetState\\n    + TDateFormatType\\n    + TDateOffsetType\\n    + TDateTimeKind\\n    + TDeaAccessRights\\n    + TDocumentDefaultAction\\n    + TEditMode\\n    + TEditorCloseObservType\\n    + TEdmsApplicationAction\\n    + TEDocumentLockType\\n    + TEDocumentStepShowMode\\n    + TEDocumentStepVersionType\\n    + TEDocumentStorageFunction\\n    + TEDocumentStorageType\\n    + TEDocumentVersionSourceType\\n    + TEDocumentVersionState\\n    + TEncodeType\\n    + TExceptionCategory\\n    + TExportedSignaturesType\\n    + TExportedVersionType\\n    + TFieldDataType\\n    + TFolderType\\n    + TGridRowHeight\\n    + THyperlinkType\\n    + TImageFileFormat\\n    + TImageMode\\n    + TImageType\\n    + TInplaceHintKind\\n    + TISBLContext\\n    + TItemShow\\n    + TJobKind\\n    + TJoinType\\n    + TLabelPos\\n    + TLicensingType\\n    + TLifeCycleStageFontColor\\n    + TLifeCycleStageFontStyle\\n    + TLockableDevelopmentComponentType\\n    + TMaxRecordCountRestrictionType\\n    + TRangeValueType\\n    + TRelativeDate\\n    + TReportDestination\\n    + TReqDataType\\n    + TRequisiteEventType\\n    + TSBTimeType\\n    + TSearchShowMode\\n    + TSelectMode\\n    + TSignatureType\\n    + TSignerContentType\\n    + TStringsSortType\\n    + TStringValueType\\n    + TStructuredObjectAttributeType\\n    + TTaskAbortReason\\n    + TTextValueType\\n    + TUserObjectStatus\\n    + TUserType\\n    + TValuesBuildType\\n    + TViewMode\\n    + TViewSelectionMode\\n    + TWizardActionType\\n    + TWizardFormElementProperty\\n    + TWizardFormElementType\\n    + TWizardParamType\\n    + TWizardStepResult\\n    + TWizardStepType\\n    + TWorkAccessType\\n    + TWorkflowBlockType\\n    + TWorkflowDataType\\n    + TWorkImportance\\n    + TWorkRouteType\\n    + TWorkState\\n    + TWorkTextBuildingMode;\\n\\n  // Системные функции ==> SYSFUNCTIONS\\n  const system_functions =\\n    \\\"AddSubString \\\"\\n    + \\\"AdjustLineBreaks \\\"\\n    + \\\"AmountInWords \\\"\\n    + \\\"Analysis \\\"\\n    + \\\"ArrayDimCount \\\"\\n    + \\\"ArrayHighBound \\\"\\n    + \\\"ArrayLowBound \\\"\\n    + \\\"ArrayOf \\\"\\n    + \\\"ArrayReDim \\\"\\n    + \\\"Assert \\\"\\n    + \\\"Assigned \\\"\\n    + \\\"BeginOfMonth \\\"\\n    + \\\"BeginOfPeriod \\\"\\n    + \\\"BuildProfilingOperationAnalysis \\\"\\n    + \\\"CallProcedure \\\"\\n    + \\\"CanReadFile \\\"\\n    + \\\"CArrayElement \\\"\\n    + \\\"CDataSetRequisite \\\"\\n    + \\\"ChangeDate \\\"\\n    + \\\"ChangeReferenceDataset \\\"\\n    + \\\"Char \\\"\\n    + \\\"CharPos \\\"\\n    + \\\"CheckParam \\\"\\n    + \\\"CheckParamValue \\\"\\n    + \\\"CompareStrings \\\"\\n    + \\\"ConstantExists \\\"\\n    + \\\"ControlState \\\"\\n    + \\\"ConvertDateStr \\\"\\n    + \\\"Copy \\\"\\n    + \\\"CopyFile \\\"\\n    + \\\"CreateArray \\\"\\n    + \\\"CreateCachedReference \\\"\\n    + \\\"CreateConnection \\\"\\n    + \\\"CreateDialog \\\"\\n    + \\\"CreateDualListDialog \\\"\\n    + \\\"CreateEditor \\\"\\n    + \\\"CreateException \\\"\\n    + \\\"CreateFile \\\"\\n    + \\\"CreateFolderDialog \\\"\\n    + \\\"CreateInputDialog \\\"\\n    + \\\"CreateLinkFile \\\"\\n    + \\\"CreateList \\\"\\n    + \\\"CreateLock \\\"\\n    + \\\"CreateMemoryDataSet \\\"\\n    + \\\"CreateObject \\\"\\n    + \\\"CreateOpenDialog \\\"\\n    + \\\"CreateProgress \\\"\\n    + \\\"CreateQuery \\\"\\n    + \\\"CreateReference \\\"\\n    + \\\"CreateReport \\\"\\n    + \\\"CreateSaveDialog \\\"\\n    + \\\"CreateScript \\\"\\n    + \\\"CreateSQLPivotFunction \\\"\\n    + \\\"CreateStringList \\\"\\n    + \\\"CreateTreeListSelectDialog \\\"\\n    + \\\"CSelectSQL \\\"\\n    + \\\"CSQL \\\"\\n    + \\\"CSubString \\\"\\n    + \\\"CurrentUserID \\\"\\n    + \\\"CurrentUserName \\\"\\n    + \\\"CurrentVersion \\\"\\n    + \\\"DataSetLocateEx \\\"\\n    + \\\"DateDiff \\\"\\n    + \\\"DateTimeDiff \\\"\\n    + \\\"DateToStr \\\"\\n    + \\\"DayOfWeek \\\"\\n    + \\\"DeleteFile \\\"\\n    + \\\"DirectoryExists \\\"\\n    + \\\"DisableCheckAccessRights \\\"\\n    + \\\"DisableCheckFullShowingRestriction \\\"\\n    + \\\"DisableMassTaskSendingRestrictions \\\"\\n    + \\\"DropTable \\\"\\n    + \\\"DupeString \\\"\\n    + \\\"EditText \\\"\\n    + \\\"EnableCheckAccessRights \\\"\\n    + \\\"EnableCheckFullShowingRestriction \\\"\\n    + \\\"EnableMassTaskSendingRestrictions \\\"\\n    + \\\"EndOfMonth \\\"\\n    + \\\"EndOfPeriod \\\"\\n    + \\\"ExceptionExists \\\"\\n    + \\\"ExceptionsOff \\\"\\n    + \\\"ExceptionsOn \\\"\\n    + \\\"Execute \\\"\\n    + \\\"ExecuteProcess \\\"\\n    + \\\"Exit \\\"\\n    + \\\"ExpandEnvironmentVariables \\\"\\n    + \\\"ExtractFileDrive \\\"\\n    + \\\"ExtractFileExt \\\"\\n    + \\\"ExtractFileName \\\"\\n    + \\\"ExtractFilePath \\\"\\n    + \\\"ExtractParams \\\"\\n    + \\\"FileExists \\\"\\n    + \\\"FileSize \\\"\\n    + \\\"FindFile \\\"\\n    + \\\"FindSubString \\\"\\n    + \\\"FirmContext \\\"\\n    + \\\"ForceDirectories \\\"\\n    + \\\"Format \\\"\\n    + \\\"FormatDate \\\"\\n    + \\\"FormatNumeric \\\"\\n    + \\\"FormatSQLDate \\\"\\n    + \\\"FormatString \\\"\\n    + \\\"FreeException \\\"\\n    + \\\"GetComponent \\\"\\n    + \\\"GetComponentLaunchParam \\\"\\n    + \\\"GetConstant \\\"\\n    + \\\"GetLastException \\\"\\n    + \\\"GetReferenceRecord \\\"\\n    + \\\"GetRefTypeByRefID \\\"\\n    + \\\"GetTableID \\\"\\n    + \\\"GetTempFolder \\\"\\n    + \\\"IfThen \\\"\\n    + \\\"In \\\"\\n    + \\\"IndexOf \\\"\\n    + \\\"InputDialog \\\"\\n    + \\\"InputDialogEx \\\"\\n    + \\\"InteractiveMode \\\"\\n    + \\\"IsFileLocked \\\"\\n    + \\\"IsGraphicFile \\\"\\n    + \\\"IsNumeric \\\"\\n    + \\\"Length \\\"\\n    + \\\"LoadString \\\"\\n    + \\\"LoadStringFmt \\\"\\n    + \\\"LocalTimeToUTC \\\"\\n    + \\\"LowerCase \\\"\\n    + \\\"Max \\\"\\n    + \\\"MessageBox \\\"\\n    + \\\"MessageBoxEx \\\"\\n    + \\\"MimeDecodeBinary \\\"\\n    + \\\"MimeDecodeString \\\"\\n    + \\\"MimeEncodeBinary \\\"\\n    + \\\"MimeEncodeString \\\"\\n    + \\\"Min \\\"\\n    + \\\"MoneyInWords \\\"\\n    + \\\"MoveFile \\\"\\n    + \\\"NewID \\\"\\n    + \\\"Now \\\"\\n    + \\\"OpenFile \\\"\\n    + \\\"Ord \\\"\\n    + \\\"Precision \\\"\\n    + \\\"Raise \\\"\\n    + \\\"ReadCertificateFromFile \\\"\\n    + \\\"ReadFile \\\"\\n    + \\\"ReferenceCodeByID \\\"\\n    + \\\"ReferenceNumber \\\"\\n    + \\\"ReferenceRequisiteMode \\\"\\n    + \\\"ReferenceRequisiteValue \\\"\\n    + \\\"RegionDateSettings \\\"\\n    + \\\"RegionNumberSettings \\\"\\n    + \\\"RegionTimeSettings \\\"\\n    + \\\"RegRead \\\"\\n    + \\\"RegWrite \\\"\\n    + \\\"RenameFile \\\"\\n    + \\\"Replace \\\"\\n    + \\\"Round \\\"\\n    + \\\"SelectServerCode \\\"\\n    + \\\"SelectSQL \\\"\\n    + \\\"ServerDateTime \\\"\\n    + \\\"SetConstant \\\"\\n    + \\\"SetManagedFolderFieldsState \\\"\\n    + \\\"ShowConstantsInputDialog \\\"\\n    + \\\"ShowMessage \\\"\\n    + \\\"Sleep \\\"\\n    + \\\"Split \\\"\\n    + \\\"SQL \\\"\\n    + \\\"SQL2XLSTAB \\\"\\n    + \\\"SQLProfilingSendReport \\\"\\n    + \\\"StrToDate \\\"\\n    + \\\"SubString \\\"\\n    + \\\"SubStringCount \\\"\\n    + \\\"SystemSetting \\\"\\n    + \\\"Time \\\"\\n    + \\\"TimeDiff \\\"\\n    + \\\"Today \\\"\\n    + \\\"Transliterate \\\"\\n    + \\\"Trim \\\"\\n    + \\\"UpperCase \\\"\\n    + \\\"UserStatus \\\"\\n    + \\\"UTCToLocalTime \\\"\\n    + \\\"ValidateXML \\\"\\n    + \\\"VarIsClear \\\"\\n    + \\\"VarIsEmpty \\\"\\n    + \\\"VarIsNull \\\"\\n    + \\\"WorkTimeDiff \\\"\\n    + \\\"WriteFile \\\"\\n    + \\\"WriteFileEx \\\"\\n    + \\\"WriteObjectHistory \\\"\\n    + \\\"Анализ \\\"\\n    + \\\"БазаДанных \\\"\\n    + \\\"БлокЕсть \\\"\\n    + \\\"БлокЕстьРасш \\\"\\n    + \\\"БлокИнфо \\\"\\n    + \\\"БлокСнять \\\"\\n    + \\\"БлокСнятьРасш \\\"\\n    + \\\"БлокУстановить \\\"\\n    + \\\"Ввод \\\"\\n    + \\\"ВводМеню \\\"\\n    + \\\"ВедС \\\"\\n    + \\\"ВедСпр \\\"\\n    + \\\"ВерхняяГраницаМассива \\\"\\n    + \\\"ВнешПрогр \\\"\\n    + \\\"Восст \\\"\\n    + \\\"ВременнаяПапка \\\"\\n    + \\\"Время \\\"\\n    + \\\"ВыборSQL \\\"\\n    + \\\"ВыбратьЗапись \\\"\\n    + \\\"ВыделитьСтр \\\"\\n    + \\\"Вызвать \\\"\\n    + \\\"Выполнить \\\"\\n    + \\\"ВыпПрогр \\\"\\n    + \\\"ГрафическийФайл \\\"\\n    + \\\"ГруппаДополнительно \\\"\\n    + \\\"ДатаВремяСерв \\\"\\n    + \\\"ДеньНедели \\\"\\n    + \\\"ДиалогДаНет \\\"\\n    + \\\"ДлинаСтр \\\"\\n    + \\\"ДобПодстр \\\"\\n    + \\\"ЕПусто \\\"\\n    + \\\"ЕслиТо \\\"\\n    + \\\"ЕЧисло \\\"\\n    + \\\"ЗамПодстр \\\"\\n    + \\\"ЗаписьСправочника \\\"\\n    + \\\"ЗначПоляСпр \\\"\\n    + \\\"ИДТипСпр \\\"\\n    + \\\"ИзвлечьДиск \\\"\\n    + \\\"ИзвлечьИмяФайла \\\"\\n    + \\\"ИзвлечьПуть \\\"\\n    + \\\"ИзвлечьРасширение \\\"\\n    + \\\"ИзмДат \\\"\\n    + \\\"ИзменитьРазмерМассива \\\"\\n    + \\\"ИзмеренийМассива \\\"\\n    + \\\"ИмяОрг \\\"\\n    + \\\"ИмяПоляСпр \\\"\\n    + \\\"Индекс \\\"\\n    + \\\"ИндикаторЗакрыть \\\"\\n    + \\\"ИндикаторОткрыть \\\"\\n    + \\\"ИндикаторШаг \\\"\\n    + \\\"ИнтерактивныйРежим \\\"\\n    + \\\"ИтогТблСпр \\\"\\n    + \\\"КодВидВедСпр \\\"\\n    + \\\"КодВидСпрПоИД \\\"\\n    + \\\"КодПоAnalit \\\"\\n    + \\\"КодСимвола \\\"\\n    + \\\"КодСпр \\\"\\n    + \\\"КолПодстр \\\"\\n    + \\\"КолПроп \\\"\\n    + \\\"КонМес \\\"\\n    + \\\"Конст \\\"\\n    + \\\"КонстЕсть \\\"\\n    + \\\"КонстЗнач \\\"\\n    + \\\"КонТран \\\"\\n    + \\\"КопироватьФайл \\\"\\n    + \\\"КопияСтр \\\"\\n    + \\\"КПериод \\\"\\n    + \\\"КСтрТблСпр \\\"\\n    + \\\"Макс \\\"\\n    + \\\"МаксСтрТблСпр \\\"\\n    + \\\"Массив \\\"\\n    + \\\"Меню \\\"\\n    + \\\"МенюРасш \\\"\\n    + \\\"Мин \\\"\\n    + \\\"НаборДанныхНайтиРасш \\\"\\n    + \\\"НаимВидСпр \\\"\\n    + \\\"НаимПоAnalit \\\"\\n    + \\\"НаимСпр \\\"\\n    + \\\"НастроитьПереводыСтрок \\\"\\n    + \\\"НачМес \\\"\\n    + \\\"НачТран \\\"\\n    + \\\"НижняяГраницаМассива \\\"\\n    + \\\"НомерСпр \\\"\\n    + \\\"НПериод \\\"\\n    + \\\"Окно \\\"\\n    + \\\"Окр \\\"\\n    + \\\"Окружение \\\"\\n    + \\\"ОтлИнфДобавить \\\"\\n    + \\\"ОтлИнфУдалить \\\"\\n    + \\\"Отчет \\\"\\n    + \\\"ОтчетАнал \\\"\\n    + \\\"ОтчетИнт \\\"\\n    + \\\"ПапкаСуществует \\\"\\n    + \\\"Пауза \\\"\\n    + \\\"ПВыборSQL \\\"\\n    + \\\"ПереименоватьФайл \\\"\\n    + \\\"Переменные \\\"\\n    + \\\"ПереместитьФайл \\\"\\n    + \\\"Подстр \\\"\\n    + \\\"ПоискПодстр \\\"\\n    + \\\"ПоискСтр \\\"\\n    + \\\"ПолучитьИДТаблицы \\\"\\n    + \\\"ПользовательДополнительно \\\"\\n    + \\\"ПользовательИД \\\"\\n    + \\\"ПользовательИмя \\\"\\n    + \\\"ПользовательСтатус \\\"\\n    + \\\"Прервать \\\"\\n    + \\\"ПроверитьПараметр \\\"\\n    + \\\"ПроверитьПараметрЗнач \\\"\\n    + \\\"ПроверитьУсловие \\\"\\n    + \\\"РазбСтр \\\"\\n    + \\\"РазнВремя \\\"\\n    + \\\"РазнДат \\\"\\n    + \\\"РазнДатаВремя \\\"\\n    + \\\"РазнРабВремя \\\"\\n    + \\\"РегУстВрем \\\"\\n    + \\\"РегУстДат \\\"\\n    + \\\"РегУстЧсл \\\"\\n    + \\\"РедТекст \\\"\\n    + \\\"РеестрЗапись \\\"\\n    + \\\"РеестрСписокИменПарам \\\"\\n    + \\\"РеестрЧтение \\\"\\n    + \\\"РеквСпр \\\"\\n    + \\\"РеквСпрПр \\\"\\n    + \\\"Сегодня \\\"\\n    + \\\"Сейчас \\\"\\n    + \\\"Сервер \\\"\\n    + \\\"СерверПроцессИД \\\"\\n    + \\\"СертификатФайлСчитать \\\"\\n    + \\\"СжПроб \\\"\\n    + \\\"Символ \\\"\\n    + \\\"СистемаДиректумКод \\\"\\n    + \\\"СистемаИнформация \\\"\\n    + \\\"СистемаКод \\\"\\n    + \\\"Содержит \\\"\\n    + \\\"СоединениеЗакрыть \\\"\\n    + \\\"СоединениеОткрыть \\\"\\n    + \\\"СоздатьДиалог \\\"\\n    + \\\"СоздатьДиалогВыбораИзДвухСписков \\\"\\n    + \\\"СоздатьДиалогВыбораПапки \\\"\\n    + \\\"СоздатьДиалогОткрытияФайла \\\"\\n    + \\\"СоздатьДиалогСохраненияФайла \\\"\\n    + \\\"СоздатьЗапрос \\\"\\n    + \\\"СоздатьИндикатор \\\"\\n    + \\\"СоздатьИсключение \\\"\\n    + \\\"СоздатьКэшированныйСправочник \\\"\\n    + \\\"СоздатьМассив \\\"\\n    + \\\"СоздатьНаборДанных \\\"\\n    + \\\"СоздатьОбъект \\\"\\n    + \\\"СоздатьОтчет \\\"\\n    + \\\"СоздатьПапку \\\"\\n    + \\\"СоздатьРедактор \\\"\\n    + \\\"СоздатьСоединение \\\"\\n    + \\\"СоздатьСписок \\\"\\n    + \\\"СоздатьСписокСтрок \\\"\\n    + \\\"СоздатьСправочник \\\"\\n    + \\\"СоздатьСценарий \\\"\\n    + \\\"СоздСпр \\\"\\n    + \\\"СостСпр \\\"\\n    + \\\"Сохр \\\"\\n    + \\\"СохрСпр \\\"\\n    + \\\"СписокСистем \\\"\\n    + \\\"Спр \\\"\\n    + \\\"Справочник \\\"\\n    + \\\"СпрБлокЕсть \\\"\\n    + \\\"СпрБлокСнять \\\"\\n    + \\\"СпрБлокСнятьРасш \\\"\\n    + \\\"СпрБлокУстановить \\\"\\n    + \\\"СпрИзмНабДан \\\"\\n    + \\\"СпрКод \\\"\\n    + \\\"СпрНомер \\\"\\n    + \\\"СпрОбновить \\\"\\n    + \\\"СпрОткрыть \\\"\\n    + \\\"СпрОтменить \\\"\\n    + \\\"СпрПарам \\\"\\n    + \\\"СпрПолеЗнач \\\"\\n    + \\\"СпрПолеИмя \\\"\\n    + \\\"СпрРекв \\\"\\n    + \\\"СпрРеквВведЗн \\\"\\n    + \\\"СпрРеквНовые \\\"\\n    + \\\"СпрРеквПр \\\"\\n    + \\\"СпрРеквПредЗн \\\"\\n    + \\\"СпрРеквРежим \\\"\\n    + \\\"СпрРеквТипТекст \\\"\\n    + \\\"СпрСоздать \\\"\\n    + \\\"СпрСост \\\"\\n    + \\\"СпрСохранить \\\"\\n    + \\\"СпрТблИтог \\\"\\n    + \\\"СпрТблСтр \\\"\\n    + \\\"СпрТблСтрКол \\\"\\n    + \\\"СпрТблСтрМакс \\\"\\n    + \\\"СпрТблСтрМин \\\"\\n    + \\\"СпрТблСтрПред \\\"\\n    + \\\"СпрТблСтрСлед \\\"\\n    + \\\"СпрТблСтрСозд \\\"\\n    + \\\"СпрТблСтрУд \\\"\\n    + \\\"СпрТекПредст \\\"\\n    + \\\"СпрУдалить \\\"\\n    + \\\"СравнитьСтр \\\"\\n    + \\\"СтрВерхРегистр \\\"\\n    + \\\"СтрНижнРегистр \\\"\\n    + \\\"СтрТблСпр \\\"\\n    + \\\"СумПроп \\\"\\n    + \\\"Сценарий \\\"\\n    + \\\"СценарийПарам \\\"\\n    + \\\"ТекВерсия \\\"\\n    + \\\"ТекОрг \\\"\\n    + \\\"Точн \\\"\\n    + \\\"Тран \\\"\\n    + \\\"Транслитерация \\\"\\n    + \\\"УдалитьТаблицу \\\"\\n    + \\\"УдалитьФайл \\\"\\n    + \\\"УдСпр \\\"\\n    + \\\"УдСтрТблСпр \\\"\\n    + \\\"Уст \\\"\\n    + \\\"УстановкиКонстант \\\"\\n    + \\\"ФайлАтрибутСчитать \\\"\\n    + \\\"ФайлАтрибутУстановить \\\"\\n    + \\\"ФайлВремя \\\"\\n    + \\\"ФайлВремяУстановить \\\"\\n    + \\\"ФайлВыбрать \\\"\\n    + \\\"ФайлЗанят \\\"\\n    + \\\"ФайлЗаписать \\\"\\n    + \\\"ФайлИскать \\\"\\n    + \\\"ФайлКопировать \\\"\\n    + \\\"ФайлМожноЧитать \\\"\\n    + \\\"ФайлОткрыть \\\"\\n    + \\\"ФайлПереименовать \\\"\\n    + \\\"ФайлПерекодировать \\\"\\n    + \\\"ФайлПереместить \\\"\\n    + \\\"ФайлПросмотреть \\\"\\n    + \\\"ФайлРазмер \\\"\\n    + \\\"ФайлСоздать \\\"\\n    + \\\"ФайлСсылкаСоздать \\\"\\n    + \\\"ФайлСуществует \\\"\\n    + \\\"ФайлСчитать \\\"\\n    + \\\"ФайлУдалить \\\"\\n    + \\\"ФмтSQLДат \\\"\\n    + \\\"ФмтДат \\\"\\n    + \\\"ФмтСтр \\\"\\n    + \\\"ФмтЧсл \\\"\\n    + \\\"Формат \\\"\\n    + \\\"ЦМассивЭлемент \\\"\\n    + \\\"ЦНаборДанныхРеквизит \\\"\\n    + \\\"ЦПодстр \\\";\\n\\n  // Предопределенные переменные ==> built_in\\n  const predefined_variables =\\n    \\\"AltState \\\"\\n    + \\\"Application \\\"\\n    + \\\"CallType \\\"\\n    + \\\"ComponentTokens \\\"\\n    + \\\"CreatedJobs \\\"\\n    + \\\"CreatedNotices \\\"\\n    + \\\"ControlState \\\"\\n    + \\\"DialogResult \\\"\\n    + \\\"Dialogs \\\"\\n    + \\\"EDocuments \\\"\\n    + \\\"EDocumentVersionSource \\\"\\n    + \\\"Folders \\\"\\n    + \\\"GlobalIDs \\\"\\n    + \\\"Job \\\"\\n    + \\\"Jobs \\\"\\n    + \\\"InputValue \\\"\\n    + \\\"LookUpReference \\\"\\n    + \\\"LookUpRequisiteNames \\\"\\n    + \\\"LookUpSearch \\\"\\n    + \\\"Object \\\"\\n    + \\\"ParentComponent \\\"\\n    + \\\"Processes \\\"\\n    + \\\"References \\\"\\n    + \\\"Requisite \\\"\\n    + \\\"ReportName \\\"\\n    + \\\"Reports \\\"\\n    + \\\"Result \\\"\\n    + \\\"Scripts \\\"\\n    + \\\"Searches \\\"\\n    + \\\"SelectedAttachments \\\"\\n    + \\\"SelectedItems \\\"\\n    + \\\"SelectMode \\\"\\n    + \\\"Sender \\\"\\n    + \\\"ServerEvents \\\"\\n    + \\\"ServiceFactory \\\"\\n    + \\\"ShiftState \\\"\\n    + \\\"SubTask \\\"\\n    + \\\"SystemDialogs \\\"\\n    + \\\"Tasks \\\"\\n    + \\\"Wizard \\\"\\n    + \\\"Wizards \\\"\\n    + \\\"Work \\\"\\n    + \\\"ВызовСпособ \\\"\\n    + \\\"ИмяОтчета \\\"\\n    + \\\"РеквЗнач \\\";\\n\\n  // Интерфейсы ==> type\\n  const interfaces =\\n    \\\"IApplication \\\"\\n    + \\\"IAccessRights \\\"\\n    + \\\"IAccountRepository \\\"\\n    + \\\"IAccountSelectionRestrictions \\\"\\n    + \\\"IAction \\\"\\n    + \\\"IActionList \\\"\\n    + \\\"IAdministrationHistoryDescription \\\"\\n    + \\\"IAnchors \\\"\\n    + \\\"IApplication \\\"\\n    + \\\"IArchiveInfo \\\"\\n    + \\\"IAttachment \\\"\\n    + \\\"IAttachmentList \\\"\\n    + \\\"ICheckListBox \\\"\\n    + \\\"ICheckPointedList \\\"\\n    + \\\"IColumn \\\"\\n    + \\\"IComponent \\\"\\n    + \\\"IComponentDescription \\\"\\n    + \\\"IComponentToken \\\"\\n    + \\\"IComponentTokenFactory \\\"\\n    + \\\"IComponentTokenInfo \\\"\\n    + \\\"ICompRecordInfo \\\"\\n    + \\\"IConnection \\\"\\n    + \\\"IContents \\\"\\n    + \\\"IControl \\\"\\n    + \\\"IControlJob \\\"\\n    + \\\"IControlJobInfo \\\"\\n    + \\\"IControlList \\\"\\n    + \\\"ICrypto \\\"\\n    + \\\"ICrypto2 \\\"\\n    + \\\"ICustomJob \\\"\\n    + \\\"ICustomJobInfo \\\"\\n    + \\\"ICustomListBox \\\"\\n    + \\\"ICustomObjectWizardStep \\\"\\n    + \\\"ICustomWork \\\"\\n    + \\\"ICustomWorkInfo \\\"\\n    + \\\"IDataSet \\\"\\n    + \\\"IDataSetAccessInfo \\\"\\n    + \\\"IDataSigner \\\"\\n    + \\\"IDateCriterion \\\"\\n    + \\\"IDateRequisite \\\"\\n    + \\\"IDateRequisiteDescription \\\"\\n    + \\\"IDateValue \\\"\\n    + \\\"IDeaAccessRights \\\"\\n    + \\\"IDeaObjectInfo \\\"\\n    + \\\"IDevelopmentComponentLock \\\"\\n    + \\\"IDialog \\\"\\n    + \\\"IDialogFactory \\\"\\n    + \\\"IDialogPickRequisiteItems \\\"\\n    + \\\"IDialogsFactory \\\"\\n    + \\\"IDICSFactory \\\"\\n    + \\\"IDocRequisite \\\"\\n    + \\\"IDocumentInfo \\\"\\n    + \\\"IDualListDialog \\\"\\n    + \\\"IECertificate \\\"\\n    + \\\"IECertificateInfo \\\"\\n    + \\\"IECertificates \\\"\\n    + \\\"IEditControl \\\"\\n    + \\\"IEditorForm \\\"\\n    + \\\"IEdmsExplorer \\\"\\n    + \\\"IEdmsObject \\\"\\n    + \\\"IEdmsObjectDescription \\\"\\n    + \\\"IEdmsObjectFactory \\\"\\n    + \\\"IEdmsObjectInfo \\\"\\n    + \\\"IEDocument \\\"\\n    + \\\"IEDocumentAccessRights \\\"\\n    + \\\"IEDocumentDescription \\\"\\n    + \\\"IEDocumentEditor \\\"\\n    + \\\"IEDocumentFactory \\\"\\n    + \\\"IEDocumentInfo \\\"\\n    + \\\"IEDocumentStorage \\\"\\n    + \\\"IEDocumentVersion \\\"\\n    + \\\"IEDocumentVersionListDialog \\\"\\n    + \\\"IEDocumentVersionSource \\\"\\n    + \\\"IEDocumentWizardStep \\\"\\n    + \\\"IEDocVerSignature \\\"\\n    + \\\"IEDocVersionState \\\"\\n    + \\\"IEnabledMode \\\"\\n    + \\\"IEncodeProvider \\\"\\n    + \\\"IEncrypter \\\"\\n    + \\\"IEvent \\\"\\n    + \\\"IEventList \\\"\\n    + \\\"IException \\\"\\n    + \\\"IExternalEvents \\\"\\n    + \\\"IExternalHandler \\\"\\n    + \\\"IFactory \\\"\\n    + \\\"IField \\\"\\n    + \\\"IFileDialog \\\"\\n    + \\\"IFolder \\\"\\n    + \\\"IFolderDescription \\\"\\n    + \\\"IFolderDialog \\\"\\n    + \\\"IFolderFactory \\\"\\n    + \\\"IFolderInfo \\\"\\n    + \\\"IForEach \\\"\\n    + \\\"IForm \\\"\\n    + \\\"IFormTitle \\\"\\n    + \\\"IFormWizardStep \\\"\\n    + \\\"IGlobalIDFactory \\\"\\n    + \\\"IGlobalIDInfo \\\"\\n    + \\\"IGrid \\\"\\n    + \\\"IHasher \\\"\\n    + \\\"IHistoryDescription \\\"\\n    + \\\"IHyperLinkControl \\\"\\n    + \\\"IImageButton \\\"\\n    + \\\"IImageControl \\\"\\n    + \\\"IInnerPanel \\\"\\n    + \\\"IInplaceHint \\\"\\n    + \\\"IIntegerCriterion \\\"\\n    + \\\"IIntegerList \\\"\\n    + \\\"IIntegerRequisite \\\"\\n    + \\\"IIntegerValue \\\"\\n    + \\\"IISBLEditorForm \\\"\\n    + \\\"IJob \\\"\\n    + \\\"IJobDescription \\\"\\n    + \\\"IJobFactory \\\"\\n    + \\\"IJobForm \\\"\\n    + \\\"IJobInfo \\\"\\n    + \\\"ILabelControl \\\"\\n    + \\\"ILargeIntegerCriterion \\\"\\n    + \\\"ILargeIntegerRequisite \\\"\\n    + \\\"ILargeIntegerValue \\\"\\n    + \\\"ILicenseInfo \\\"\\n    + \\\"ILifeCycleStage \\\"\\n    + \\\"IList \\\"\\n    + \\\"IListBox \\\"\\n    + \\\"ILocalIDInfo \\\"\\n    + \\\"ILocalization \\\"\\n    + \\\"ILock \\\"\\n    + \\\"IMemoryDataSet \\\"\\n    + \\\"IMessagingFactory \\\"\\n    + \\\"IMetadataRepository \\\"\\n    + \\\"INotice \\\"\\n    + \\\"INoticeInfo \\\"\\n    + \\\"INumericCriterion \\\"\\n    + \\\"INumericRequisite \\\"\\n    + \\\"INumericValue \\\"\\n    + \\\"IObject \\\"\\n    + \\\"IObjectDescription \\\"\\n    + \\\"IObjectImporter \\\"\\n    + \\\"IObjectInfo \\\"\\n    + \\\"IObserver \\\"\\n    + \\\"IPanelGroup \\\"\\n    + \\\"IPickCriterion \\\"\\n    + \\\"IPickProperty \\\"\\n    + \\\"IPickRequisite \\\"\\n    + \\\"IPickRequisiteDescription \\\"\\n    + \\\"IPickRequisiteItem \\\"\\n    + \\\"IPickRequisiteItems \\\"\\n    + \\\"IPickValue \\\"\\n    + \\\"IPrivilege \\\"\\n    + \\\"IPrivilegeList \\\"\\n    + \\\"IProcess \\\"\\n    + \\\"IProcessFactory \\\"\\n    + \\\"IProcessMessage \\\"\\n    + \\\"IProgress \\\"\\n    + \\\"IProperty \\\"\\n    + \\\"IPropertyChangeEvent \\\"\\n    + \\\"IQuery \\\"\\n    + \\\"IReference \\\"\\n    + \\\"IReferenceCriterion \\\"\\n    + \\\"IReferenceEnabledMode \\\"\\n    + \\\"IReferenceFactory \\\"\\n    + \\\"IReferenceHistoryDescription \\\"\\n    + \\\"IReferenceInfo \\\"\\n    + \\\"IReferenceRecordCardWizardStep \\\"\\n    + \\\"IReferenceRequisiteDescription \\\"\\n    + \\\"IReferencesFactory \\\"\\n    + \\\"IReferenceValue \\\"\\n    + \\\"IRefRequisite \\\"\\n    + \\\"IReport \\\"\\n    + \\\"IReportFactory \\\"\\n    + \\\"IRequisite \\\"\\n    + \\\"IRequisiteDescription \\\"\\n    + \\\"IRequisiteDescriptionList \\\"\\n    + \\\"IRequisiteFactory \\\"\\n    + \\\"IRichEdit \\\"\\n    + \\\"IRouteStep \\\"\\n    + \\\"IRule \\\"\\n    + \\\"IRuleList \\\"\\n    + \\\"ISchemeBlock \\\"\\n    + \\\"IScript \\\"\\n    + \\\"IScriptFactory \\\"\\n    + \\\"ISearchCriteria \\\"\\n    + \\\"ISearchCriterion \\\"\\n    + \\\"ISearchDescription \\\"\\n    + \\\"ISearchFactory \\\"\\n    + \\\"ISearchFolderInfo \\\"\\n    + \\\"ISearchForObjectDescription \\\"\\n    + \\\"ISearchResultRestrictions \\\"\\n    + \\\"ISecuredContext \\\"\\n    + \\\"ISelectDialog \\\"\\n    + \\\"IServerEvent \\\"\\n    + \\\"IServerEventFactory \\\"\\n    + \\\"IServiceDialog \\\"\\n    + \\\"IServiceFactory \\\"\\n    + \\\"ISignature \\\"\\n    + \\\"ISignProvider \\\"\\n    + \\\"ISignProvider2 \\\"\\n    + \\\"ISignProvider3 \\\"\\n    + \\\"ISimpleCriterion \\\"\\n    + \\\"IStringCriterion \\\"\\n    + \\\"IStringList \\\"\\n    + \\\"IStringRequisite \\\"\\n    + \\\"IStringRequisiteDescription \\\"\\n    + \\\"IStringValue \\\"\\n    + \\\"ISystemDialogsFactory \\\"\\n    + \\\"ISystemInfo \\\"\\n    + \\\"ITabSheet \\\"\\n    + \\\"ITask \\\"\\n    + \\\"ITaskAbortReasonInfo \\\"\\n    + \\\"ITaskCardWizardStep \\\"\\n    + \\\"ITaskDescription \\\"\\n    + \\\"ITaskFactory \\\"\\n    + \\\"ITaskInfo \\\"\\n    + \\\"ITaskRoute \\\"\\n    + \\\"ITextCriterion \\\"\\n    + \\\"ITextRequisite \\\"\\n    + \\\"ITextValue \\\"\\n    + \\\"ITreeListSelectDialog \\\"\\n    + \\\"IUser \\\"\\n    + \\\"IUserList \\\"\\n    + \\\"IValue \\\"\\n    + \\\"IView \\\"\\n    + \\\"IWebBrowserControl \\\"\\n    + \\\"IWizard \\\"\\n    + \\\"IWizardAction \\\"\\n    + \\\"IWizardFactory \\\"\\n    + \\\"IWizardFormElement \\\"\\n    + \\\"IWizardParam \\\"\\n    + \\\"IWizardPickParam \\\"\\n    + \\\"IWizardReferenceParam \\\"\\n    + \\\"IWizardStep \\\"\\n    + \\\"IWorkAccessRights \\\"\\n    + \\\"IWorkDescription \\\"\\n    + \\\"IWorkflowAskableParam \\\"\\n    + \\\"IWorkflowAskableParams \\\"\\n    + \\\"IWorkflowBlock \\\"\\n    + \\\"IWorkflowBlockResult \\\"\\n    + \\\"IWorkflowEnabledMode \\\"\\n    + \\\"IWorkflowParam \\\"\\n    + \\\"IWorkflowPickParam \\\"\\n    + \\\"IWorkflowReferenceParam \\\"\\n    + \\\"IWorkState \\\"\\n    + \\\"IWorkTreeCustomNode \\\"\\n    + \\\"IWorkTreeJobNode \\\"\\n    + \\\"IWorkTreeTaskNode \\\"\\n    + \\\"IXMLEditorForm \\\"\\n    + \\\"SBCrypto \\\";\\n\\n  // built_in : встроенные или библиотечные объекты (константы, перечисления)\\n  const BUILTIN = CONSTANTS + ENUMS;\\n\\n  // class: встроенные наборы значений, системные объекты, фабрики\\n  const CLASS = predefined_variables;\\n\\n  // literal : примитивные типы\\n  const LITERAL = \\\"null true false nil \\\";\\n\\n  // number : числа\\n  const NUMBERS = {\\n    className: \\\"number\\\",\\n    begin: hljs.NUMBER_RE,\\n    relevance: 0\\n  };\\n\\n  // string : строки\\n  const STRINGS = {\\n    className: \\\"string\\\",\\n    variants: [\\n      {\\n        begin: '\\\"',\\n        end: '\\\"'\\n      },\\n      {\\n        begin: \\\"'\\\",\\n        end: \\\"'\\\"\\n      }\\n    ]\\n  };\\n\\n  // Токены\\n  const DOCTAGS = {\\n    className: \\\"doctag\\\",\\n    begin: \\\"\\\\\\\\b(?:TODO|DONE|BEGIN|END|STUB|CHG|FIXME|NOTE|BUG|XXX)\\\\\\\\b\\\",\\n    relevance: 0\\n  };\\n\\n  // Однострочный комментарий\\n  const ISBL_LINE_COMMENT_MODE = {\\n    className: \\\"comment\\\",\\n    begin: \\\"//\\\",\\n    end: \\\"$\\\",\\n    relevance: 0,\\n    contains: [\\n      hljs.PHRASAL_WORDS_MODE,\\n      DOCTAGS\\n    ]\\n  };\\n\\n  // Многострочный комментарий\\n  const ISBL_BLOCK_COMMENT_MODE = {\\n    className: \\\"comment\\\",\\n    begin: \\\"/\\\\\\\\*\\\",\\n    end: \\\"\\\\\\\\*/\\\",\\n    relevance: 0,\\n    contains: [\\n      hljs.PHRASAL_WORDS_MODE,\\n      DOCTAGS\\n    ]\\n  };\\n\\n  // comment : комментарии\\n  const COMMENTS = { variants: [\\n    ISBL_LINE_COMMENT_MODE,\\n    ISBL_BLOCK_COMMENT_MODE\\n  ] };\\n\\n  // keywords : ключевые слова\\n  const KEYWORDS = {\\n    $pattern: UNDERSCORE_IDENT_RE,\\n    keyword: KEYWORD,\\n    built_in: BUILTIN,\\n    class: CLASS,\\n    literal: LITERAL\\n  };\\n\\n  // methods : методы\\n  const METHODS = {\\n    begin: \\\"\\\\\\\\.\\\\\\\\s*\\\" + hljs.UNDERSCORE_IDENT_RE,\\n    keywords: KEYWORDS,\\n    relevance: 0\\n  };\\n\\n  // type : встроенные типы\\n  const TYPES = {\\n    className: \\\"type\\\",\\n    begin: \\\":[ \\\\\\\\t]*(\\\" + interfaces.trim().replace(/\\\\s/g, \\\"|\\\") + \\\")\\\",\\n    end: \\\"[ \\\\\\\\t]*=\\\",\\n    excludeEnd: true\\n  };\\n\\n  // variables : переменные\\n  const VARIABLES = {\\n    className: \\\"variable\\\",\\n    keywords: KEYWORDS,\\n    begin: UNDERSCORE_IDENT_RE,\\n    relevance: 0,\\n    contains: [\\n      TYPES,\\n      METHODS\\n    ]\\n  };\\n\\n  // Имена функций\\n  const FUNCTION_TITLE = FUNCTION_NAME_IDENT_RE + \\\"\\\\\\\\(\\\";\\n\\n  const TITLE_MODE = {\\n    className: \\\"title\\\",\\n    keywords: {\\n      $pattern: UNDERSCORE_IDENT_RE,\\n      built_in: system_functions\\n    },\\n    begin: FUNCTION_TITLE,\\n    end: \\\"\\\\\\\\(\\\",\\n    returnBegin: true,\\n    excludeEnd: true\\n  };\\n\\n  // function : функции\\n  const FUNCTIONS = {\\n    className: \\\"function\\\",\\n    begin: FUNCTION_TITLE,\\n    end: \\\"\\\\\\\\)$\\\",\\n    returnBegin: true,\\n    keywords: KEYWORDS,\\n    illegal: \\\"[\\\\\\\\[\\\\\\\\]\\\\\\\\|\\\\\\\\$\\\\\\\\?%,~#@]\\\",\\n    contains: [\\n      TITLE_MODE,\\n      METHODS,\\n      VARIABLES,\\n      STRINGS,\\n      NUMBERS,\\n      COMMENTS\\n    ]\\n  };\\n\\n  return {\\n    name: 'ISBL',\\n    case_insensitive: true,\\n    keywords: KEYWORDS,\\n    illegal: \\\"\\\\\\\\$|\\\\\\\\?|%|,|;$|~|#|@|</\\\",\\n    contains: [\\n      FUNCTIONS,\\n      TYPES,\\n      METHODS,\\n      VARIABLES,\\n      STRINGS,\\n      NUMBERS,\\n      COMMENTS\\n    ]\\n  };\\n}\\n\\nmodule.exports = isbl;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/isbl.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/java.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/java.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\\nvar decimalDigits = '[0-9](_*[0-9])*';\\nvar frac = `\\\\\\\\.(${decimalDigits})`;\\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\\nvar NUMERIC = {\\n  className: 'number',\\n  variants: [\\n    // DecimalFloatingPointLiteral\\n    // including ExponentPart\\n    { begin: `(\\\\\\\\b(${decimalDigits})((${frac})|\\\\\\\\.)?|(${frac}))` +\\n      `[eE][+-]?(${decimalDigits})[fFdD]?\\\\\\\\b` },\\n    // excluding ExponentPart\\n    { begin: `\\\\\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\\\\\b|\\\\\\\\.([fFdD]\\\\\\\\b)?)` },\\n    { begin: `(${frac})[fFdD]?\\\\\\\\b` },\\n    { begin: `\\\\\\\\b(${decimalDigits})[fFdD]\\\\\\\\b` },\\n\\n    // HexadecimalFloatingPointLiteral\\n    { begin: `\\\\\\\\b0[xX]((${hexDigits})\\\\\\\\.?|(${hexDigits})?\\\\\\\\.(${hexDigits}))` +\\n      `[pP][+-]?(${decimalDigits})[fFdD]?\\\\\\\\b` },\\n\\n    // DecimalIntegerLiteral\\n    { begin: '\\\\\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\\\\\b' },\\n\\n    // HexIntegerLiteral\\n    { begin: `\\\\\\\\b0[xX](${hexDigits})[lL]?\\\\\\\\b` },\\n\\n    // OctalIntegerLiteral\\n    { begin: '\\\\\\\\b0(_*[0-7])*[lL]?\\\\\\\\b' },\\n\\n    // BinaryIntegerLiteral\\n    { begin: '\\\\\\\\b0[bB][01](_*[01])*[lL]?\\\\\\\\b' },\\n  ],\\n  relevance: 0\\n};\\n\\n/*\\nLanguage: Java\\nAuthor: Vsevolod Solovyov <vsevolod.solovyov@gmail.com>\\nCategory: common, enterprise\\nWebsite: https://www.java.com/\\n*/\\n\\n/**\\n * Allows recursive regex expressions to a given depth\\n *\\n * ie: recurRegex(\\\"(abc~~~)\\\", /~~~/g, 2) becomes:\\n * (abc(abc(abc)))\\n *\\n * @param {string} re\\n * @param {RegExp} substitution (should be a g mode regex)\\n * @param {number} depth\\n * @returns {string}``\\n */\\nfunction recurRegex(re, substitution, depth) {\\n  if (depth === -1) return \\\"\\\";\\n\\n  return re.replace(substitution, _ => {\\n    return recurRegex(re, substitution, depth - 1);\\n  });\\n}\\n\\n/** @type LanguageFn */\\nfunction java(hljs) {\\n  const regex = hljs.regex;\\n  const JAVA_IDENT_RE = '[\\\\u00C0-\\\\u02B8a-zA-Z_$][\\\\u00C0-\\\\u02B8a-zA-Z_$0-9]*';\\n  const GENERIC_IDENT_RE = JAVA_IDENT_RE\\n    + recurRegex('(?:<' + JAVA_IDENT_RE + '~~~(?:\\\\\\\\s*,\\\\\\\\s*' + JAVA_IDENT_RE + '~~~)*>)?', /~~~/g, 2);\\n  const MAIN_KEYWORDS = [\\n    'synchronized',\\n    'abstract',\\n    'private',\\n    'var',\\n    'static',\\n    'if',\\n    'const ',\\n    'for',\\n    'while',\\n    'strictfp',\\n    'finally',\\n    'protected',\\n    'import',\\n    'native',\\n    'final',\\n    'void',\\n    'enum',\\n    'else',\\n    'break',\\n    'transient',\\n    'catch',\\n    'instanceof',\\n    'volatile',\\n    'case',\\n    'assert',\\n    'package',\\n    'default',\\n    'public',\\n    'try',\\n    'switch',\\n    'continue',\\n    'throws',\\n    'protected',\\n    'public',\\n    'private',\\n    'module',\\n    'requires',\\n    'exports',\\n    'do',\\n    'sealed',\\n    'yield',\\n    'permits'\\n  ];\\n\\n  const BUILT_INS = [\\n    'super',\\n    'this'\\n  ];\\n\\n  const LITERALS = [\\n    'false',\\n    'true',\\n    'null'\\n  ];\\n\\n  const TYPES = [\\n    'char',\\n    'boolean',\\n    'long',\\n    'float',\\n    'int',\\n    'byte',\\n    'short',\\n    'double'\\n  ];\\n\\n  const KEYWORDS = {\\n    keyword: MAIN_KEYWORDS,\\n    literal: LITERALS,\\n    type: TYPES,\\n    built_in: BUILT_INS\\n  };\\n\\n  const ANNOTATION = {\\n    className: 'meta',\\n    begin: '@' + JAVA_IDENT_RE,\\n    contains: [\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        contains: [ \\\"self\\\" ] // allow nested () inside our annotation\\n      }\\n    ]\\n  };\\n  const PARAMS = {\\n    className: 'params',\\n    begin: /\\\\(/,\\n    end: /\\\\)/,\\n    keywords: KEYWORDS,\\n    relevance: 0,\\n    contains: [ hljs.C_BLOCK_COMMENT_MODE ],\\n    endsParent: true\\n  };\\n\\n  return {\\n    name: 'Java',\\n    aliases: [ 'jsp' ],\\n    keywords: KEYWORDS,\\n    illegal: /<\\\\/|#/,\\n    contains: [\\n      hljs.COMMENT(\\n        '/\\\\\\\\*\\\\\\\\*',\\n        '\\\\\\\\*/',\\n        {\\n          relevance: 0,\\n          contains: [\\n            {\\n              // eat up @'s in emails to prevent them to be recognized as doctags\\n              begin: /\\\\w+@/,\\n              relevance: 0\\n            },\\n            {\\n              className: 'doctag',\\n              begin: '@[A-Za-z]+'\\n            }\\n          ]\\n        }\\n      ),\\n      // relevance boost\\n      {\\n        begin: /import java\\\\.[a-z]+\\\\./,\\n        keywords: \\\"import\\\",\\n        relevance: 2\\n      },\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      {\\n        begin: /\\\"\\\"\\\"/,\\n        end: /\\\"\\\"\\\"/,\\n        className: \\\"string\\\",\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      },\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        match: [\\n          /\\\\b(?:class|interface|enum|extends|implements|new)/,\\n          /\\\\s+/,\\n          JAVA_IDENT_RE\\n        ],\\n        className: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title.class\\\"\\n        }\\n      },\\n      {\\n        // Exceptions for hyphenated keywords\\n        match: /non-sealed/,\\n        scope: \\\"keyword\\\"\\n      },\\n      {\\n        begin: [\\n          regex.concat(/(?!else)/, JAVA_IDENT_RE),\\n          /\\\\s+/,\\n          JAVA_IDENT_RE,\\n          /\\\\s+/,\\n          /=(?!=)/\\n        ],\\n        className: {\\n          1: \\\"type\\\",\\n          3: \\\"variable\\\",\\n          5: \\\"operator\\\"\\n        }\\n      },\\n      {\\n        begin: [\\n          /record/,\\n          /\\\\s+/,\\n          JAVA_IDENT_RE\\n        ],\\n        className: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title.class\\\"\\n        },\\n        contains: [\\n          PARAMS,\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE\\n        ]\\n      },\\n      {\\n        // Expression keywords prevent 'keyword Name(...)' from being\\n        // recognized as a function definition\\n        beginKeywords: 'new throw return else',\\n        relevance: 0\\n      },\\n      {\\n        begin: [\\n          '(?:' + GENERIC_IDENT_RE + '\\\\\\\\s+)',\\n          hljs.UNDERSCORE_IDENT_RE,\\n          /\\\\s*(?=\\\\()/\\n        ],\\n        className: { 2: \\\"title.function\\\" },\\n        keywords: KEYWORDS,\\n        contains: [\\n          {\\n            className: 'params',\\n            begin: /\\\\(/,\\n            end: /\\\\)/,\\n            keywords: KEYWORDS,\\n            relevance: 0,\\n            contains: [\\n              ANNOTATION,\\n              hljs.APOS_STRING_MODE,\\n              hljs.QUOTE_STRING_MODE,\\n              NUMERIC,\\n              hljs.C_BLOCK_COMMENT_MODE\\n            ]\\n          },\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE\\n        ]\\n      },\\n      NUMERIC,\\n      ANNOTATION\\n    ]\\n  };\\n}\\n\\nmodule.exports = java;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/java.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/javascript.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/javascript.js ***!\n  \\***************************************************************/\n/***/ (function(module) {\n\neval(\"const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\\nconst KEYWORDS = [\\n  \\\"as\\\", // for exports\\n  \\\"in\\\",\\n  \\\"of\\\",\\n  \\\"if\\\",\\n  \\\"for\\\",\\n  \\\"while\\\",\\n  \\\"finally\\\",\\n  \\\"var\\\",\\n  \\\"new\\\",\\n  \\\"function\\\",\\n  \\\"do\\\",\\n  \\\"return\\\",\\n  \\\"void\\\",\\n  \\\"else\\\",\\n  \\\"break\\\",\\n  \\\"catch\\\",\\n  \\\"instanceof\\\",\\n  \\\"with\\\",\\n  \\\"throw\\\",\\n  \\\"case\\\",\\n  \\\"default\\\",\\n  \\\"try\\\",\\n  \\\"switch\\\",\\n  \\\"continue\\\",\\n  \\\"typeof\\\",\\n  \\\"delete\\\",\\n  \\\"let\\\",\\n  \\\"yield\\\",\\n  \\\"const\\\",\\n  \\\"class\\\",\\n  // JS handles these with a special rule\\n  // \\\"get\\\",\\n  // \\\"set\\\",\\n  \\\"debugger\\\",\\n  \\\"async\\\",\\n  \\\"await\\\",\\n  \\\"static\\\",\\n  \\\"import\\\",\\n  \\\"from\\\",\\n  \\\"export\\\",\\n  \\\"extends\\\"\\n];\\nconst LITERALS = [\\n  \\\"true\\\",\\n  \\\"false\\\",\\n  \\\"null\\\",\\n  \\\"undefined\\\",\\n  \\\"NaN\\\",\\n  \\\"Infinity\\\"\\n];\\n\\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\\nconst TYPES = [\\n  // Fundamental objects\\n  \\\"Object\\\",\\n  \\\"Function\\\",\\n  \\\"Boolean\\\",\\n  \\\"Symbol\\\",\\n  // numbers and dates\\n  \\\"Math\\\",\\n  \\\"Date\\\",\\n  \\\"Number\\\",\\n  \\\"BigInt\\\",\\n  // text\\n  \\\"String\\\",\\n  \\\"RegExp\\\",\\n  // Indexed collections\\n  \\\"Array\\\",\\n  \\\"Float32Array\\\",\\n  \\\"Float64Array\\\",\\n  \\\"Int8Array\\\",\\n  \\\"Uint8Array\\\",\\n  \\\"Uint8ClampedArray\\\",\\n  \\\"Int16Array\\\",\\n  \\\"Int32Array\\\",\\n  \\\"Uint16Array\\\",\\n  \\\"Uint32Array\\\",\\n  \\\"BigInt64Array\\\",\\n  \\\"BigUint64Array\\\",\\n  // Keyed collections\\n  \\\"Set\\\",\\n  \\\"Map\\\",\\n  \\\"WeakSet\\\",\\n  \\\"WeakMap\\\",\\n  // Structured data\\n  \\\"ArrayBuffer\\\",\\n  \\\"SharedArrayBuffer\\\",\\n  \\\"Atomics\\\",\\n  \\\"DataView\\\",\\n  \\\"JSON\\\",\\n  // Control abstraction objects\\n  \\\"Promise\\\",\\n  \\\"Generator\\\",\\n  \\\"GeneratorFunction\\\",\\n  \\\"AsyncFunction\\\",\\n  // Reflection\\n  \\\"Reflect\\\",\\n  \\\"Proxy\\\",\\n  // Internationalization\\n  \\\"Intl\\\",\\n  // WebAssembly\\n  \\\"WebAssembly\\\"\\n];\\n\\nconst ERROR_TYPES = [\\n  \\\"Error\\\",\\n  \\\"EvalError\\\",\\n  \\\"InternalError\\\",\\n  \\\"RangeError\\\",\\n  \\\"ReferenceError\\\",\\n  \\\"SyntaxError\\\",\\n  \\\"TypeError\\\",\\n  \\\"URIError\\\"\\n];\\n\\nconst BUILT_IN_GLOBALS = [\\n  \\\"setInterval\\\",\\n  \\\"setTimeout\\\",\\n  \\\"clearInterval\\\",\\n  \\\"clearTimeout\\\",\\n\\n  \\\"require\\\",\\n  \\\"exports\\\",\\n\\n  \\\"eval\\\",\\n  \\\"isFinite\\\",\\n  \\\"isNaN\\\",\\n  \\\"parseFloat\\\",\\n  \\\"parseInt\\\",\\n  \\\"decodeURI\\\",\\n  \\\"decodeURIComponent\\\",\\n  \\\"encodeURI\\\",\\n  \\\"encodeURIComponent\\\",\\n  \\\"escape\\\",\\n  \\\"unescape\\\"\\n];\\n\\nconst BUILT_IN_VARIABLES = [\\n  \\\"arguments\\\",\\n  \\\"this\\\",\\n  \\\"super\\\",\\n  \\\"console\\\",\\n  \\\"window\\\",\\n  \\\"document\\\",\\n  \\\"localStorage\\\",\\n  \\\"sessionStorage\\\",\\n  \\\"module\\\",\\n  \\\"global\\\" // Node.js\\n];\\n\\nconst BUILT_INS = [].concat(\\n  BUILT_IN_GLOBALS,\\n  TYPES,\\n  ERROR_TYPES\\n);\\n\\n/*\\nLanguage: JavaScript\\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\\nCategory: common, scripting, web\\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\\n*/\\n\\n/** @type LanguageFn */\\nfunction javascript(hljs) {\\n  const regex = hljs.regex;\\n  /**\\n   * Takes a string like \\\"<Booger\\\" and checks to see\\n   * if we can find a matching \\\"</Booger\\\" later in the\\n   * content.\\n   * @param {RegExpMatchArray} match\\n   * @param {{after:number}} param1\\n   */\\n  const hasClosingTag = (match, { after }) => {\\n    const tag = \\\"</\\\" + match[0].slice(1);\\n    const pos = match.input.indexOf(tag, after);\\n    return pos !== -1;\\n  };\\n\\n  const IDENT_RE$1 = IDENT_RE;\\n  const FRAGMENT = {\\n    begin: '<>',\\n    end: '</>'\\n  };\\n  // to avoid some special cases inside isTrulyOpeningTag\\n  const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\\\\\._:-]+\\\\s*\\\\/>/;\\n  const XML_TAG = {\\n    begin: /<[A-Za-z0-9\\\\\\\\._:-]+/,\\n    end: /\\\\/[A-Za-z0-9\\\\\\\\._:-]+>|\\\\/>/,\\n    /**\\n     * @param {RegExpMatchArray} match\\n     * @param {CallbackResponse} response\\n     */\\n    isTrulyOpeningTag: (match, response) => {\\n      const afterMatchIndex = match[0].length + match.index;\\n      const nextChar = match.input[afterMatchIndex];\\n      if (\\n        // HTML should not include another raw `<` inside a tag\\n        // nested type?\\n        // `<Array<Array<number>>`, etc.\\n        nextChar === \\\"<\\\" ||\\n        // the , gives away that this is not HTML\\n        // `<T, A extends keyof T, V>`\\n        nextChar === \\\",\\\"\\n        ) {\\n        response.ignoreMatch();\\n        return;\\n      }\\n\\n      // `<something>`\\n      // Quite possibly a tag, lets look for a matching closing tag...\\n      if (nextChar === \\\">\\\") {\\n        // if we cannot find a matching closing tag, then we\\n        // will ignore it\\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\\n          response.ignoreMatch();\\n        }\\n      }\\n\\n      // `<blah />` (self-closing)\\n      // handled by simpleSelfClosing rule\\n\\n      let m;\\n      const afterMatch = match.input.substring(afterMatchIndex);\\n\\n      // some more template typing stuff\\n      //  <T = any>(key?: string) => Modify<\\n      if ((m = afterMatch.match(/^\\\\s*=/))) {\\n        response.ignoreMatch();\\n        return;\\n      }\\n\\n      // `<From extends string>`\\n      // technically this could be HTML, but it smells like a type\\n      // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\\n      if ((m = afterMatch.match(/^\\\\s+extends\\\\s+/))) {\\n        if (m.index === 0) {\\n          response.ignoreMatch();\\n          // eslint-disable-next-line no-useless-return\\n          return;\\n        }\\n      }\\n    }\\n  };\\n  const KEYWORDS$1 = {\\n    $pattern: IDENT_RE,\\n    keyword: KEYWORDS,\\n    literal: LITERALS,\\n    built_in: BUILT_INS,\\n    \\\"variable.language\\\": BUILT_IN_VARIABLES\\n  };\\n\\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\\n  const decimalDigits = '[0-9](_?[0-9])*';\\n  const frac = `\\\\\\\\.(${decimalDigits})`;\\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\\n  const NUMBER = {\\n    className: 'number',\\n    variants: [\\n      // DecimalLiteral\\n      { begin: `(\\\\\\\\b(${decimalInteger})((${frac})|\\\\\\\\.)?|(${frac}))` +\\n        `[eE][+-]?(${decimalDigits})\\\\\\\\b` },\\n      { begin: `\\\\\\\\b(${decimalInteger})\\\\\\\\b((${frac})\\\\\\\\b|\\\\\\\\.)?|(${frac})\\\\\\\\b` },\\n\\n      // DecimalBigIntegerLiteral\\n      { begin: `\\\\\\\\b(0|[1-9](_?[0-9])*)n\\\\\\\\b` },\\n\\n      // NonDecimalIntegerLiteral\\n      { begin: \\\"\\\\\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\\\\\b\\\" },\\n      { begin: \\\"\\\\\\\\b0[bB][0-1](_?[0-1])*n?\\\\\\\\b\\\" },\\n      { begin: \\\"\\\\\\\\b0[oO][0-7](_?[0-7])*n?\\\\\\\\b\\\" },\\n\\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\\n      { begin: \\\"\\\\\\\\b0[0-7]+n?\\\\\\\\b\\\" },\\n    ],\\n    relevance: 0\\n  };\\n\\n  const SUBST = {\\n    className: 'subst',\\n    begin: '\\\\\\\\$\\\\\\\\{',\\n    end: '\\\\\\\\}',\\n    keywords: KEYWORDS$1,\\n    contains: [] // defined later\\n  };\\n  const HTML_TEMPLATE = {\\n    begin: 'html`',\\n    end: '',\\n    starts: {\\n      end: '`',\\n      returnEnd: false,\\n      contains: [\\n        hljs.BACKSLASH_ESCAPE,\\n        SUBST\\n      ],\\n      subLanguage: 'xml'\\n    }\\n  };\\n  const CSS_TEMPLATE = {\\n    begin: 'css`',\\n    end: '',\\n    starts: {\\n      end: '`',\\n      returnEnd: false,\\n      contains: [\\n        hljs.BACKSLASH_ESCAPE,\\n        SUBST\\n      ],\\n      subLanguage: 'css'\\n    }\\n  };\\n  const GRAPHQL_TEMPLATE = {\\n    begin: 'gql`',\\n    end: '',\\n    starts: {\\n      end: '`',\\n      returnEnd: false,\\n      contains: [\\n        hljs.BACKSLASH_ESCAPE,\\n        SUBST\\n      ],\\n      subLanguage: 'graphql'\\n    }\\n  };\\n  const TEMPLATE_STRING = {\\n    className: 'string',\\n    begin: '`',\\n    end: '`',\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      SUBST\\n    ]\\n  };\\n  const JSDOC_COMMENT = hljs.COMMENT(\\n    /\\\\/\\\\*\\\\*(?!\\\\/)/,\\n    '\\\\\\\\*/',\\n    {\\n      relevance: 0,\\n      contains: [\\n        {\\n          begin: '(?=@[A-Za-z]+)',\\n          relevance: 0,\\n          contains: [\\n            {\\n              className: 'doctag',\\n              begin: '@[A-Za-z]+'\\n            },\\n            {\\n              className: 'type',\\n              begin: '\\\\\\\\{',\\n              end: '\\\\\\\\}',\\n              excludeEnd: true,\\n              excludeBegin: true,\\n              relevance: 0\\n            },\\n            {\\n              className: 'variable',\\n              begin: IDENT_RE$1 + '(?=\\\\\\\\s*(-)|$)',\\n              endsParent: true,\\n              relevance: 0\\n            },\\n            // eat spaces (not newlines) so we can find\\n            // types or variables\\n            {\\n              begin: /(?=[^\\\\n])\\\\s/,\\n              relevance: 0\\n            }\\n          ]\\n        }\\n      ]\\n    }\\n  );\\n  const COMMENT = {\\n    className: \\\"comment\\\",\\n    variants: [\\n      JSDOC_COMMENT,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.C_LINE_COMMENT_MODE\\n    ]\\n  };\\n  const SUBST_INTERNALS = [\\n    hljs.APOS_STRING_MODE,\\n    hljs.QUOTE_STRING_MODE,\\n    HTML_TEMPLATE,\\n    CSS_TEMPLATE,\\n    GRAPHQL_TEMPLATE,\\n    TEMPLATE_STRING,\\n    // Skip numbers when they are part of a variable name\\n    { match: /\\\\$\\\\d+/ },\\n    NUMBER,\\n    // This is intentional:\\n    // See https://github.com/highlightjs/highlight.js/issues/3288\\n    // hljs.REGEXP_MODE\\n  ];\\n  SUBST.contains = SUBST_INTERNALS\\n    .concat({\\n      // we need to pair up {} inside our subst to prevent\\n      // it from ending too early by matching another }\\n      begin: /\\\\{/,\\n      end: /\\\\}/,\\n      keywords: KEYWORDS$1,\\n      contains: [\\n        \\\"self\\\"\\n      ].concat(SUBST_INTERNALS)\\n    });\\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\\n    // eat recursive parens in sub expressions\\n    {\\n      begin: /\\\\(/,\\n      end: /\\\\)/,\\n      keywords: KEYWORDS$1,\\n      contains: [\\\"self\\\"].concat(SUBST_AND_COMMENTS)\\n    }\\n  ]);\\n  const PARAMS = {\\n    className: 'params',\\n    begin: /\\\\(/,\\n    end: /\\\\)/,\\n    excludeBegin: true,\\n    excludeEnd: true,\\n    keywords: KEYWORDS$1,\\n    contains: PARAMS_CONTAINS\\n  };\\n\\n  // ES6 classes\\n  const CLASS_OR_EXTENDS = {\\n    variants: [\\n      // class Car extends vehicle\\n      {\\n        match: [\\n          /class/,\\n          /\\\\s+/,\\n          IDENT_RE$1,\\n          /\\\\s+/,\\n          /extends/,\\n          /\\\\s+/,\\n          regex.concat(IDENT_RE$1, \\\"(\\\", regex.concat(/\\\\./, IDENT_RE$1), \\\")*\\\")\\n        ],\\n        scope: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title.class\\\",\\n          5: \\\"keyword\\\",\\n          7: \\\"title.class.inherited\\\"\\n        }\\n      },\\n      // class Car\\n      {\\n        match: [\\n          /class/,\\n          /\\\\s+/,\\n          IDENT_RE$1\\n        ],\\n        scope: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title.class\\\"\\n        }\\n      },\\n\\n    ]\\n  };\\n\\n  const CLASS_REFERENCE = {\\n    relevance: 0,\\n    match:\\n    regex.either(\\n      // Hard coded exceptions\\n      /\\\\bJSON/,\\n      // Float32Array, OutT\\n      /\\\\b[A-Z][a-z]+([A-Z][a-z]*|\\\\d)*/,\\n      // CSSFactory, CSSFactoryT\\n      /\\\\b[A-Z]{2,}([A-Z][a-z]+|\\\\d)+([A-Z][a-z]*)*/,\\n      // FPs, FPsT\\n      /\\\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\\\d)*([A-Z][a-z]*)*/,\\n      // P\\n      // single letters are not highlighted\\n      // BLAH\\n      // this will be flagged as a UPPER_CASE_CONSTANT instead\\n    ),\\n    className: \\\"title.class\\\",\\n    keywords: {\\n      _: [\\n        // se we still get relevance credit for JS library classes\\n        ...TYPES,\\n        ...ERROR_TYPES\\n      ]\\n    }\\n  };\\n\\n  const USE_STRICT = {\\n    label: \\\"use_strict\\\",\\n    className: 'meta',\\n    relevance: 10,\\n    begin: /^\\\\s*['\\\"]use (strict|asm)['\\\"]/\\n  };\\n\\n  const FUNCTION_DEFINITION = {\\n    variants: [\\n      {\\n        match: [\\n          /function/,\\n          /\\\\s+/,\\n          IDENT_RE$1,\\n          /(?=\\\\s*\\\\()/\\n        ]\\n      },\\n      // anonymous function\\n      {\\n        match: [\\n          /function/,\\n          /\\\\s*(?=\\\\()/\\n        ]\\n      }\\n    ],\\n    className: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.function\\\"\\n    },\\n    label: \\\"func.def\\\",\\n    contains: [ PARAMS ],\\n    illegal: /%/\\n  };\\n\\n  const UPPER_CASE_CONSTANT = {\\n    relevance: 0,\\n    match: /\\\\b[A-Z][A-Z_0-9]+\\\\b/,\\n    className: \\\"variable.constant\\\"\\n  };\\n\\n  function noneOf(list) {\\n    return regex.concat(\\\"(?!\\\", list.join(\\\"|\\\"), \\\")\\\");\\n  }\\n\\n  const FUNCTION_CALL = {\\n    match: regex.concat(\\n      /\\\\b/,\\n      noneOf([\\n        ...BUILT_IN_GLOBALS,\\n        \\\"super\\\",\\n        \\\"import\\\"\\n      ]),\\n      IDENT_RE$1, regex.lookahead(/\\\\(/)),\\n    className: \\\"title.function\\\",\\n    relevance: 0\\n  };\\n\\n  const PROPERTY_ACCESS = {\\n    begin: regex.concat(/\\\\./, regex.lookahead(\\n      regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\\n    )),\\n    end: IDENT_RE$1,\\n    excludeBegin: true,\\n    keywords: \\\"prototype\\\",\\n    className: \\\"property\\\",\\n    relevance: 0\\n  };\\n\\n  const GETTER_OR_SETTER = {\\n    match: [\\n      /get|set/,\\n      /\\\\s+/,\\n      IDENT_RE$1,\\n      /(?=\\\\()/\\n    ],\\n    className: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.function\\\"\\n    },\\n    contains: [\\n      { // eat to avoid empty params\\n        begin: /\\\\(\\\\)/\\n      },\\n      PARAMS\\n    ]\\n  };\\n\\n  const FUNC_LEAD_IN_RE = '(\\\\\\\\(' +\\n    '[^()]*(\\\\\\\\(' +\\n    '[^()]*(\\\\\\\\(' +\\n    '[^()]*' +\\n    '\\\\\\\\)[^()]*)*' +\\n    '\\\\\\\\)[^()]*)*' +\\n    '\\\\\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\\\\\s*=>';\\n\\n  const FUNCTION_VARIABLE = {\\n    match: [\\n      /const|var|let/, /\\\\s+/,\\n      IDENT_RE$1, /\\\\s*/,\\n      /=\\\\s*/,\\n      /(async\\\\s*)?/, // async is optional\\n      regex.lookahead(FUNC_LEAD_IN_RE)\\n    ],\\n    keywords: \\\"async\\\",\\n    className: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.function\\\"\\n    },\\n    contains: [\\n      PARAMS\\n    ]\\n  };\\n\\n  return {\\n    name: 'JavaScript',\\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\\n    keywords: KEYWORDS$1,\\n    // this will be extended by TypeScript\\n    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\\n    illegal: /#(?![$_A-z])/,\\n    contains: [\\n      hljs.SHEBANG({\\n        label: \\\"shebang\\\",\\n        binary: \\\"node\\\",\\n        relevance: 5\\n      }),\\n      USE_STRICT,\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      HTML_TEMPLATE,\\n      CSS_TEMPLATE,\\n      GRAPHQL_TEMPLATE,\\n      TEMPLATE_STRING,\\n      COMMENT,\\n      // Skip numbers when they are part of a variable name\\n      { match: /\\\\$\\\\d+/ },\\n      NUMBER,\\n      CLASS_REFERENCE,\\n      {\\n        className: 'attr',\\n        begin: IDENT_RE$1 + regex.lookahead(':'),\\n        relevance: 0\\n      },\\n      FUNCTION_VARIABLE,\\n      { // \\\"value\\\" container\\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\\\\\b(case|return|throw)\\\\\\\\b)\\\\\\\\s*',\\n        keywords: 'return throw case',\\n        relevance: 0,\\n        contains: [\\n          COMMENT,\\n          hljs.REGEXP_MODE,\\n          {\\n            className: 'function',\\n            // we have to count the parens to make sure we actually have the\\n            // correct bounding ( ) before the =>.  There could be any number of\\n            // sub-expressions inside also surrounded by parens.\\n            begin: FUNC_LEAD_IN_RE,\\n            returnBegin: true,\\n            end: '\\\\\\\\s*=>',\\n            contains: [\\n              {\\n                className: 'params',\\n                variants: [\\n                  {\\n                    begin: hljs.UNDERSCORE_IDENT_RE,\\n                    relevance: 0\\n                  },\\n                  {\\n                    className: null,\\n                    begin: /\\\\(\\\\s*\\\\)/,\\n                    skip: true\\n                  },\\n                  {\\n                    begin: /\\\\(/,\\n                    end: /\\\\)/,\\n                    excludeBegin: true,\\n                    excludeEnd: true,\\n                    keywords: KEYWORDS$1,\\n                    contains: PARAMS_CONTAINS\\n                  }\\n                ]\\n              }\\n            ]\\n          },\\n          { // could be a comma delimited list of params to a function call\\n            begin: /,/,\\n            relevance: 0\\n          },\\n          {\\n            match: /\\\\s+/,\\n            relevance: 0\\n          },\\n          { // JSX\\n            variants: [\\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\\n              { match: XML_SELF_CLOSING },\\n              {\\n                begin: XML_TAG.begin,\\n                // we carefully check the opening tag to see if it truly\\n                // is a tag and not a false positive\\n                'on:begin': XML_TAG.isTrulyOpeningTag,\\n                end: XML_TAG.end\\n              }\\n            ],\\n            subLanguage: 'xml',\\n            contains: [\\n              {\\n                begin: XML_TAG.begin,\\n                end: XML_TAG.end,\\n                skip: true,\\n                contains: ['self']\\n              }\\n            ]\\n          }\\n        ],\\n      },\\n      FUNCTION_DEFINITION,\\n      {\\n        // prevent this from getting swallowed up by function\\n        // since they appear \\\"function like\\\"\\n        beginKeywords: \\\"while if switch catch for\\\"\\n      },\\n      {\\n        // we have to count the parens to make sure we actually have the correct\\n        // bounding ( ).  There could be any number of sub-expressions inside\\n        // also surrounded by parens.\\n        begin: '\\\\\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\\n          '\\\\\\\\(' + // first parens\\n          '[^()]*(\\\\\\\\(' +\\n            '[^()]*(\\\\\\\\(' +\\n              '[^()]*' +\\n            '\\\\\\\\)[^()]*)*' +\\n          '\\\\\\\\)[^()]*)*' +\\n          '\\\\\\\\)\\\\\\\\s*\\\\\\\\{', // end parens\\n        returnBegin:true,\\n        label: \\\"func.def\\\",\\n        contains: [\\n          PARAMS,\\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \\\"title.function\\\" })\\n        ]\\n      },\\n      // catch ... so it won't trigger the property rule below\\n      {\\n        match: /\\\\.\\\\.\\\\./,\\n        relevance: 0\\n      },\\n      PROPERTY_ACCESS,\\n      // hack: prevents detection of keywords in some circumstances\\n      // .keyword()\\n      // $keyword = x\\n      {\\n        match: '\\\\\\\\$' + IDENT_RE$1,\\n        relevance: 0\\n      },\\n      {\\n        match: [ /\\\\bconstructor(?=\\\\s*\\\\()/ ],\\n        className: { 1: \\\"title.function\\\" },\\n        contains: [ PARAMS ]\\n      },\\n      FUNCTION_CALL,\\n      UPPER_CASE_CONSTANT,\\n      CLASS_OR_EXTENDS,\\n      GETTER_OR_SETTER,\\n      {\\n        match: /\\\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = javascript;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/javascript.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/jboss-cli.js\":\n/*!**************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/jboss-cli.js ***!\n  \\**************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\n Language: JBoss CLI\\n Author: Raphaël Parrëe <rparree@edc4it.com>\\n Description: language definition jboss cli\\n Website: https://docs.jboss.org/author/display/WFLY/Command+Line+Interface\\n Category: config\\n */\\n\\nfunction jbossCli(hljs) {\\n  const PARAM = {\\n    begin: /[\\\\w-]+ *=/,\\n    returnBegin: true,\\n    relevance: 0,\\n    contains: [\\n      {\\n        className: 'attr',\\n        begin: /[\\\\w-]+/\\n      }\\n    ]\\n  };\\n  const PARAMSBLOCK = {\\n    className: 'params',\\n    begin: /\\\\(/,\\n    end: /\\\\)/,\\n    contains: [ PARAM ],\\n    relevance: 0\\n  };\\n  const OPERATION = {\\n    className: 'function',\\n    begin: /:[\\\\w\\\\-.]+/,\\n    relevance: 0\\n  };\\n  const PATH = {\\n    className: 'string',\\n    begin: /\\\\B([\\\\/.])[\\\\w\\\\-.\\\\/=]+/\\n  };\\n  const COMMAND_PARAMS = {\\n    className: 'params',\\n    begin: /--[\\\\w\\\\-=\\\\/]+/\\n  };\\n  return {\\n    name: 'JBoss CLI',\\n    aliases: [ 'wildfly-cli' ],\\n    keywords: {\\n      $pattern: '[a-z\\\\-]+',\\n      keyword: 'alias batch cd clear command connect connection-factory connection-info data-source deploy '\\n      + 'deployment-info deployment-overlay echo echo-dmr help history if jdbc-driver-info jms-queue|20 jms-topic|20 ls '\\n      + 'patch pwd quit read-attribute read-operation reload rollout-plan run-batch set shutdown try unalias '\\n      + 'undeploy unset version xa-data-source', // module\\n      literal: 'true false'\\n    },\\n    contains: [\\n      hljs.HASH_COMMENT_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      COMMAND_PARAMS,\\n      OPERATION,\\n      PATH,\\n      PARAMSBLOCK\\n    ]\\n  };\\n}\\n\\nmodule.exports = jbossCli;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/jboss-cli.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/json.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/json.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: JSON\\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\\nWebsite: http://www.json.org\\nCategory: common, protocols, web\\n*/\\n\\nfunction json(hljs) {\\n  const ATTRIBUTE = {\\n    className: 'attr',\\n    begin: /\\\"(\\\\\\\\.|[^\\\\\\\\\\\"\\\\r\\\\n])*\\\"(?=\\\\s*:)/,\\n    relevance: 1.01\\n  };\\n  const PUNCTUATION = {\\n    match: /[{}[\\\\],:]/,\\n    className: \\\"punctuation\\\",\\n    relevance: 0\\n  };\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    \\\"null\\\"\\n  ];\\n  // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\\n  // - to use the very tight `illegal: \\\\S` rule later to flag any other character\\n  // - as illegal indicating that despite looking like JSON we do not truly have\\n  // - JSON and thus improve false-positively greatly since JSON will try and claim\\n  // - all sorts of JSON looking stuff\\n  const LITERALS_MODE = {\\n    scope: \\\"literal\\\",\\n    beginKeywords: LITERALS.join(\\\" \\\"),\\n  };\\n\\n  return {\\n    name: 'JSON',\\n    keywords:{\\n      literal: LITERALS,\\n    },\\n    contains: [\\n      ATTRIBUTE,\\n      PUNCTUATION,\\n      hljs.QUOTE_STRING_MODE,\\n      LITERALS_MODE,\\n      hljs.C_NUMBER_MODE,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE\\n    ],\\n    illegal: '\\\\\\\\S'\\n  };\\n}\\n\\nmodule.exports = json;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/json.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/julia-repl.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/julia-repl.js ***!\n  \\***************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Julia REPL\\nDescription: Julia REPL sessions\\nAuthor: Morten Piibeleht <morten.piibeleht@gmail.com>\\nWebsite: https://julialang.org\\nRequires: julia.js\\n\\nThe Julia REPL code blocks look something like the following:\\n\\n  julia> function foo(x)\\n             x + 1\\n         end\\n  foo (generic function with 1 method)\\n\\nThey start on a new line with \\\"julia>\\\". Usually there should also be a space after this, but\\nwe also allow the code to start right after the > character. The code may run over multiple\\nlines, but the additional lines must start with six spaces (i.e. be indented to match\\n\\\"julia>\\\"). The rest of the code is assumed to be output from the executed code and will be\\nleft un-highlighted.\\n\\nUsing simply spaces to identify line continuations may get a false-positive if the output\\nalso prints out six spaces, but such cases should be rare.\\n*/\\n\\nfunction juliaRepl(hljs) {\\n  return {\\n    name: 'Julia REPL',\\n    contains: [\\n      {\\n        className: 'meta.prompt',\\n        begin: /^julia>/,\\n        relevance: 10,\\n        starts: {\\n          // end the highlighting if we are on a new line and the line does not have at\\n          // least six spaces in the beginning\\n          end: /^(?![ ]{6})/,\\n          subLanguage: 'julia'\\n        },\\n      },\\n    ],\\n    // jldoctest Markdown blocks are used in the Julia manual and package docs indicate\\n    // code snippets that should be verified when the documentation is built. They can be\\n    // either REPL-like or script-like, but are usually REPL-like and therefore we apply\\n    // julia-repl highlighting to them. More information can be found in Documenter's\\n    // manual: https://juliadocs.github.io/Documenter.jl/latest/man/doctests.html\\n    aliases: [ 'jldoctest' ],\\n  };\\n}\\n\\nmodule.exports = juliaRepl;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/julia-repl.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/julia.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/julia.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Julia\\nDescription: Julia is a high-level, high-performance, dynamic programming language.\\nAuthor: Kenta Sato <bicycle1885@gmail.com>\\nContributors: Alex Arslan <ararslan@comcast.net>, Fredrik Ekre <ekrefredrik@gmail.com>\\nWebsite: https://julialang.org\\n*/\\n\\nfunction julia(hljs) {\\n  // Since there are numerous special names in Julia, it is too much trouble\\n  // to maintain them by hand. Hence these names (i.e. keywords, literals and\\n  // built-ins) are automatically generated from Julia 1.5.2 itself through\\n  // the following scripts for each.\\n\\n  // ref: https://docs.julialang.org/en/v1/manual/variables/#Allowed-Variable-Names\\n  const VARIABLE_NAME_RE = '[A-Za-z_\\\\\\\\u00A1-\\\\\\\\uFFFF][A-Za-z_0-9\\\\\\\\u00A1-\\\\\\\\uFFFF]*';\\n\\n  // # keyword generator, multi-word keywords handled manually below (Julia 1.5.2)\\n  // import REPL.REPLCompletions\\n  // res = String[\\\"in\\\", \\\"isa\\\", \\\"where\\\"]\\n  // for kw in collect(x.keyword for x in REPLCompletions.complete_keyword(\\\"\\\"))\\n  //     if !(contains(kw, \\\" \\\") || kw == \\\"struct\\\")\\n  //         push!(res, kw)\\n  //     end\\n  // end\\n  // sort!(unique!(res))\\n  // foreach(x -> println(\\\"\\\\'\\\", x, \\\"\\\\',\\\"), res)\\n  const KEYWORD_LIST = [\\n    'baremodule',\\n    'begin',\\n    'break',\\n    'catch',\\n    'ccall',\\n    'const',\\n    'continue',\\n    'do',\\n    'else',\\n    'elseif',\\n    'end',\\n    'export',\\n    'false',\\n    'finally',\\n    'for',\\n    'function',\\n    'global',\\n    'if',\\n    'import',\\n    'in',\\n    'isa',\\n    'let',\\n    'local',\\n    'macro',\\n    'module',\\n    'quote',\\n    'return',\\n    'true',\\n    'try',\\n    'using',\\n    'where',\\n    'while',\\n  ];\\n\\n  // # literal generator (Julia 1.5.2)\\n  // import REPL.REPLCompletions\\n  // res = String[\\\"true\\\", \\\"false\\\"]\\n  // for compl in filter!(x -> isa(x, REPLCompletions.ModuleCompletion) && (x.parent === Base || x.parent === Core),\\n  //                     REPLCompletions.completions(\\\"\\\", 0)[1])\\n  //     try\\n  //         v = eval(Symbol(compl.mod))\\n  //         if !(v isa Function || v isa Type || v isa TypeVar || v isa Module || v isa Colon)\\n  //             push!(res, compl.mod)\\n  //         end\\n  //     catch e\\n  //     end\\n  // end\\n  // sort!(unique!(res))\\n  // foreach(x -> println(\\\"\\\\'\\\", x, \\\"\\\\',\\\"), res)\\n  const LITERAL_LIST = [\\n    'ARGS',\\n    'C_NULL',\\n    'DEPOT_PATH',\\n    'ENDIAN_BOM',\\n    'ENV',\\n    'Inf',\\n    'Inf16',\\n    'Inf32',\\n    'Inf64',\\n    'InsertionSort',\\n    'LOAD_PATH',\\n    'MergeSort',\\n    'NaN',\\n    'NaN16',\\n    'NaN32',\\n    'NaN64',\\n    'PROGRAM_FILE',\\n    'QuickSort',\\n    'RoundDown',\\n    'RoundFromZero',\\n    'RoundNearest',\\n    'RoundNearestTiesAway',\\n    'RoundNearestTiesUp',\\n    'RoundToZero',\\n    'RoundUp',\\n    'VERSION|0',\\n    'devnull',\\n    'false',\\n    'im',\\n    'missing',\\n    'nothing',\\n    'pi',\\n    'stderr',\\n    'stdin',\\n    'stdout',\\n    'true',\\n    'undef',\\n    'π',\\n    'ℯ',\\n  ];\\n\\n  // # built_in generator (Julia 1.5.2)\\n  // import REPL.REPLCompletions\\n  // res = String[]\\n  // for compl in filter!(x -> isa(x, REPLCompletions.ModuleCompletion) && (x.parent === Base || x.parent === Core),\\n  //                     REPLCompletions.completions(\\\"\\\", 0)[1])\\n  //     try\\n  //         v = eval(Symbol(compl.mod))\\n  //         if (v isa Type || v isa TypeVar) && (compl.mod != \\\"=>\\\")\\n  //             push!(res, compl.mod)\\n  //         end\\n  //     catch e\\n  //     end\\n  // end\\n  // sort!(unique!(res))\\n  // foreach(x -> println(\\\"\\\\'\\\", x, \\\"\\\\',\\\"), res)\\n  const BUILT_IN_LIST = [\\n    'AbstractArray',\\n    'AbstractChannel',\\n    'AbstractChar',\\n    'AbstractDict',\\n    'AbstractDisplay',\\n    'AbstractFloat',\\n    'AbstractIrrational',\\n    'AbstractMatrix',\\n    'AbstractRange',\\n    'AbstractSet',\\n    'AbstractString',\\n    'AbstractUnitRange',\\n    'AbstractVecOrMat',\\n    'AbstractVector',\\n    'Any',\\n    'ArgumentError',\\n    'Array',\\n    'AssertionError',\\n    'BigFloat',\\n    'BigInt',\\n    'BitArray',\\n    'BitMatrix',\\n    'BitSet',\\n    'BitVector',\\n    'Bool',\\n    'BoundsError',\\n    'CapturedException',\\n    'CartesianIndex',\\n    'CartesianIndices',\\n    'Cchar',\\n    'Cdouble',\\n    'Cfloat',\\n    'Channel',\\n    'Char',\\n    'Cint',\\n    'Cintmax_t',\\n    'Clong',\\n    'Clonglong',\\n    'Cmd',\\n    'Colon',\\n    'Complex',\\n    'ComplexF16',\\n    'ComplexF32',\\n    'ComplexF64',\\n    'CompositeException',\\n    'Condition',\\n    'Cptrdiff_t',\\n    'Cshort',\\n    'Csize_t',\\n    'Cssize_t',\\n    'Cstring',\\n    'Cuchar',\\n    'Cuint',\\n    'Cuintmax_t',\\n    'Culong',\\n    'Culonglong',\\n    'Cushort',\\n    'Cvoid',\\n    'Cwchar_t',\\n    'Cwstring',\\n    'DataType',\\n    'DenseArray',\\n    'DenseMatrix',\\n    'DenseVecOrMat',\\n    'DenseVector',\\n    'Dict',\\n    'DimensionMismatch',\\n    'Dims',\\n    'DivideError',\\n    'DomainError',\\n    'EOFError',\\n    'Enum',\\n    'ErrorException',\\n    'Exception',\\n    'ExponentialBackOff',\\n    'Expr',\\n    'Float16',\\n    'Float32',\\n    'Float64',\\n    'Function',\\n    'GlobalRef',\\n    'HTML',\\n    'IO',\\n    'IOBuffer',\\n    'IOContext',\\n    'IOStream',\\n    'IdDict',\\n    'IndexCartesian',\\n    'IndexLinear',\\n    'IndexStyle',\\n    'InexactError',\\n    'InitError',\\n    'Int',\\n    'Int128',\\n    'Int16',\\n    'Int32',\\n    'Int64',\\n    'Int8',\\n    'Integer',\\n    'InterruptException',\\n    'InvalidStateException',\\n    'Irrational',\\n    'KeyError',\\n    'LinRange',\\n    'LineNumberNode',\\n    'LinearIndices',\\n    'LoadError',\\n    'MIME',\\n    'Matrix',\\n    'Method',\\n    'MethodError',\\n    'Missing',\\n    'MissingException',\\n    'Module',\\n    'NTuple',\\n    'NamedTuple',\\n    'Nothing',\\n    'Number',\\n    'OrdinalRange',\\n    'OutOfMemoryError',\\n    'OverflowError',\\n    'Pair',\\n    'PartialQuickSort',\\n    'PermutedDimsArray',\\n    'Pipe',\\n    'ProcessFailedException',\\n    'Ptr',\\n    'QuoteNode',\\n    'Rational',\\n    'RawFD',\\n    'ReadOnlyMemoryError',\\n    'Real',\\n    'ReentrantLock',\\n    'Ref',\\n    'Regex',\\n    'RegexMatch',\\n    'RoundingMode',\\n    'SegmentationFault',\\n    'Set',\\n    'Signed',\\n    'Some',\\n    'StackOverflowError',\\n    'StepRange',\\n    'StepRangeLen',\\n    'StridedArray',\\n    'StridedMatrix',\\n    'StridedVecOrMat',\\n    'StridedVector',\\n    'String',\\n    'StringIndexError',\\n    'SubArray',\\n    'SubString',\\n    'SubstitutionString',\\n    'Symbol',\\n    'SystemError',\\n    'Task',\\n    'TaskFailedException',\\n    'Text',\\n    'TextDisplay',\\n    'Timer',\\n    'Tuple',\\n    'Type',\\n    'TypeError',\\n    'TypeVar',\\n    'UInt',\\n    'UInt128',\\n    'UInt16',\\n    'UInt32',\\n    'UInt64',\\n    'UInt8',\\n    'UndefInitializer',\\n    'UndefKeywordError',\\n    'UndefRefError',\\n    'UndefVarError',\\n    'Union',\\n    'UnionAll',\\n    'UnitRange',\\n    'Unsigned',\\n    'Val',\\n    'Vararg',\\n    'VecElement',\\n    'VecOrMat',\\n    'Vector',\\n    'VersionNumber',\\n    'WeakKeyDict',\\n    'WeakRef',\\n  ];\\n\\n  const KEYWORDS = {\\n    $pattern: VARIABLE_NAME_RE,\\n    keyword: KEYWORD_LIST,\\n    literal: LITERAL_LIST,\\n    built_in: BUILT_IN_LIST,\\n  };\\n\\n  // placeholder for recursive self-reference\\n  const DEFAULT = {\\n    keywords: KEYWORDS,\\n    illegal: /<\\\\//\\n  };\\n\\n  // ref: https://docs.julialang.org/en/v1/manual/integers-and-floating-point-numbers/\\n  const NUMBER = {\\n    className: 'number',\\n    // supported numeric literals:\\n    //  * binary literal (e.g. 0x10)\\n    //  * octal literal (e.g. 0o76543210)\\n    //  * hexadecimal literal (e.g. 0xfedcba876543210)\\n    //  * hexadecimal floating point literal (e.g. 0x1p0, 0x1.2p2)\\n    //  * decimal literal (e.g. 9876543210, 100_000_000)\\n    //  * floating pointe literal (e.g. 1.2, 1.2f, .2, 1., 1.2e10, 1.2e-10)\\n    begin: /(\\\\b0x[\\\\d_]*(\\\\.[\\\\d_]*)?|0x\\\\.\\\\d[\\\\d_]*)p[-+]?\\\\d+|\\\\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\\\\b\\\\d[\\\\d_]*(\\\\.[\\\\d_]*)?|\\\\.\\\\d[\\\\d_]*)([eEfF][-+]?\\\\d+)?/,\\n    relevance: 0\\n  };\\n\\n  const CHAR = {\\n    className: 'string',\\n    begin: /'(.|\\\\\\\\[xXuU][a-zA-Z0-9]+)'/\\n  };\\n\\n  const INTERPOLATION = {\\n    className: 'subst',\\n    begin: /\\\\$\\\\(/,\\n    end: /\\\\)/,\\n    keywords: KEYWORDS\\n  };\\n\\n  const INTERPOLATED_VARIABLE = {\\n    className: 'variable',\\n    begin: '\\\\\\\\$' + VARIABLE_NAME_RE\\n  };\\n\\n  // TODO: neatly escape normal code in string literal\\n  const STRING = {\\n    className: 'string',\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      INTERPOLATION,\\n      INTERPOLATED_VARIABLE\\n    ],\\n    variants: [\\n      {\\n        begin: /\\\\w*\\\"\\\"\\\"/,\\n        end: /\\\"\\\"\\\"\\\\w*/,\\n        relevance: 10\\n      },\\n      {\\n        begin: /\\\\w*\\\"/,\\n        end: /\\\"\\\\w*/\\n      }\\n    ]\\n  };\\n\\n  const COMMAND = {\\n    className: 'string',\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      INTERPOLATION,\\n      INTERPOLATED_VARIABLE\\n    ],\\n    begin: '`',\\n    end: '`'\\n  };\\n\\n  const MACROCALL = {\\n    className: 'meta',\\n    begin: '@' + VARIABLE_NAME_RE\\n  };\\n\\n  const COMMENT = {\\n    className: 'comment',\\n    variants: [\\n      {\\n        begin: '#=',\\n        end: '=#',\\n        relevance: 10\\n      },\\n      {\\n        begin: '#',\\n        end: '$'\\n      }\\n    ]\\n  };\\n\\n  DEFAULT.name = 'Julia';\\n  DEFAULT.contains = [\\n    NUMBER,\\n    CHAR,\\n    STRING,\\n    COMMAND,\\n    MACROCALL,\\n    COMMENT,\\n    hljs.HASH_COMMENT_MODE,\\n    {\\n      className: 'keyword',\\n      begin:\\n        '\\\\\\\\b(((abstract|primitive)\\\\\\\\s+)type|(mutable\\\\\\\\s+)?struct)\\\\\\\\b'\\n    },\\n    { begin: /<:/ } // relevance booster\\n  ];\\n  INTERPOLATION.contains = DEFAULT.contains;\\n\\n  return DEFAULT;\\n}\\n\\nmodule.exports = julia;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/julia.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/kotlin.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/kotlin.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\\nvar decimalDigits = '[0-9](_*[0-9])*';\\nvar frac = `\\\\\\\\.(${decimalDigits})`;\\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\\nvar NUMERIC = {\\n  className: 'number',\\n  variants: [\\n    // DecimalFloatingPointLiteral\\n    // including ExponentPart\\n    { begin: `(\\\\\\\\b(${decimalDigits})((${frac})|\\\\\\\\.)?|(${frac}))` +\\n      `[eE][+-]?(${decimalDigits})[fFdD]?\\\\\\\\b` },\\n    // excluding ExponentPart\\n    { begin: `\\\\\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\\\\\b|\\\\\\\\.([fFdD]\\\\\\\\b)?)` },\\n    { begin: `(${frac})[fFdD]?\\\\\\\\b` },\\n    { begin: `\\\\\\\\b(${decimalDigits})[fFdD]\\\\\\\\b` },\\n\\n    // HexadecimalFloatingPointLiteral\\n    { begin: `\\\\\\\\b0[xX]((${hexDigits})\\\\\\\\.?|(${hexDigits})?\\\\\\\\.(${hexDigits}))` +\\n      `[pP][+-]?(${decimalDigits})[fFdD]?\\\\\\\\b` },\\n\\n    // DecimalIntegerLiteral\\n    { begin: '\\\\\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\\\\\b' },\\n\\n    // HexIntegerLiteral\\n    { begin: `\\\\\\\\b0[xX](${hexDigits})[lL]?\\\\\\\\b` },\\n\\n    // OctalIntegerLiteral\\n    { begin: '\\\\\\\\b0(_*[0-7])*[lL]?\\\\\\\\b' },\\n\\n    // BinaryIntegerLiteral\\n    { begin: '\\\\\\\\b0[bB][01](_*[01])*[lL]?\\\\\\\\b' },\\n  ],\\n  relevance: 0\\n};\\n\\n/*\\n Language: Kotlin\\n Description: Kotlin is an OSS statically typed programming language that targets the JVM, Android, JavaScript and Native.\\n Author: Sergey Mashkov <cy6erGn0m@gmail.com>\\n Website: https://kotlinlang.org\\n Category: common\\n */\\n\\nfunction kotlin(hljs) {\\n  const KEYWORDS = {\\n    keyword:\\n      'abstract as val var vararg get set class object open private protected public noinline '\\n      + 'crossinline dynamic final enum if else do while for when throw try catch finally '\\n      + 'import package is in fun override companion reified inline lateinit init '\\n      + 'interface annotation data sealed internal infix operator out by constructor super '\\n      + 'tailrec where const inner suspend typealias external expect actual',\\n    built_in:\\n      'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',\\n    literal:\\n      'true false null'\\n  };\\n  const KEYWORDS_WITH_LABEL = {\\n    className: 'keyword',\\n    begin: /\\\\b(break|continue|return|this)\\\\b/,\\n    starts: { contains: [\\n      {\\n        className: 'symbol',\\n        begin: /@\\\\w+/\\n      }\\n    ] }\\n  };\\n  const LABEL = {\\n    className: 'symbol',\\n    begin: hljs.UNDERSCORE_IDENT_RE + '@'\\n  };\\n\\n  // for string templates\\n  const SUBST = {\\n    className: 'subst',\\n    begin: /\\\\$\\\\{/,\\n    end: /\\\\}/,\\n    contains: [ hljs.C_NUMBER_MODE ]\\n  };\\n  const VARIABLE = {\\n    className: 'variable',\\n    begin: '\\\\\\\\$' + hljs.UNDERSCORE_IDENT_RE\\n  };\\n  const STRING = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: '\\\"\\\"\\\"',\\n        end: '\\\"\\\"\\\"(?=[^\\\"])',\\n        contains: [\\n          VARIABLE,\\n          SUBST\\n        ]\\n      },\\n      // Can't use built-in modes easily, as we want to use STRING in the meta\\n      // context as 'meta-string' and there's no syntax to remove explicitly set\\n      // classNames in built-in modes.\\n      {\\n        begin: '\\\\'',\\n        end: '\\\\'',\\n        illegal: /\\\\n/,\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      },\\n      {\\n        begin: '\\\"',\\n        end: '\\\"',\\n        illegal: /\\\\n/,\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          VARIABLE,\\n          SUBST\\n        ]\\n      }\\n    ]\\n  };\\n  SUBST.contains.push(STRING);\\n\\n  const ANNOTATION_USE_SITE = {\\n    className: 'meta',\\n    begin: '@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\\\\\s*:(?:\\\\\\\\s*' + hljs.UNDERSCORE_IDENT_RE + ')?'\\n  };\\n  const ANNOTATION = {\\n    className: 'meta',\\n    begin: '@' + hljs.UNDERSCORE_IDENT_RE,\\n    contains: [\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        contains: [\\n          hljs.inherit(STRING, { className: 'string' }),\\n          \\\"self\\\"\\n        ]\\n      }\\n    ]\\n  };\\n\\n  // https://kotlinlang.org/docs/reference/whatsnew11.html#underscores-in-numeric-literals\\n  // According to the doc above, the number mode of kotlin is the same as java 8,\\n  // so the code below is copied from java.js\\n  const KOTLIN_NUMBER_MODE = NUMERIC;\\n  const KOTLIN_NESTED_COMMENT = hljs.COMMENT(\\n    '/\\\\\\\\*', '\\\\\\\\*/',\\n    { contains: [ hljs.C_BLOCK_COMMENT_MODE ] }\\n  );\\n  const KOTLIN_PAREN_TYPE = { variants: [\\n    {\\n      className: 'type',\\n      begin: hljs.UNDERSCORE_IDENT_RE\\n    },\\n    {\\n      begin: /\\\\(/,\\n      end: /\\\\)/,\\n      contains: [] // defined later\\n    }\\n  ] };\\n  const KOTLIN_PAREN_TYPE2 = KOTLIN_PAREN_TYPE;\\n  KOTLIN_PAREN_TYPE2.variants[1].contains = [ KOTLIN_PAREN_TYPE ];\\n  KOTLIN_PAREN_TYPE.variants[1].contains = [ KOTLIN_PAREN_TYPE2 ];\\n\\n  return {\\n    name: 'Kotlin',\\n    aliases: [\\n      'kt',\\n      'kts'\\n    ],\\n    keywords: KEYWORDS,\\n    contains: [\\n      hljs.COMMENT(\\n        '/\\\\\\\\*\\\\\\\\*',\\n        '\\\\\\\\*/',\\n        {\\n          relevance: 0,\\n          contains: [\\n            {\\n              className: 'doctag',\\n              begin: '@[A-Za-z]+'\\n            }\\n          ]\\n        }\\n      ),\\n      hljs.C_LINE_COMMENT_MODE,\\n      KOTLIN_NESTED_COMMENT,\\n      KEYWORDS_WITH_LABEL,\\n      LABEL,\\n      ANNOTATION_USE_SITE,\\n      ANNOTATION,\\n      {\\n        className: 'function',\\n        beginKeywords: 'fun',\\n        end: '[(]|$',\\n        returnBegin: true,\\n        excludeEnd: true,\\n        keywords: KEYWORDS,\\n        relevance: 5,\\n        contains: [\\n          {\\n            begin: hljs.UNDERSCORE_IDENT_RE + '\\\\\\\\s*\\\\\\\\(',\\n            returnBegin: true,\\n            relevance: 0,\\n            contains: [ hljs.UNDERSCORE_TITLE_MODE ]\\n          },\\n          {\\n            className: 'type',\\n            begin: /</,\\n            end: />/,\\n            keywords: 'reified',\\n            relevance: 0\\n          },\\n          {\\n            className: 'params',\\n            begin: /\\\\(/,\\n            end: /\\\\)/,\\n            endsParent: true,\\n            keywords: KEYWORDS,\\n            relevance: 0,\\n            contains: [\\n              {\\n                begin: /:/,\\n                end: /[=,\\\\/]/,\\n                endsWithParent: true,\\n                contains: [\\n                  KOTLIN_PAREN_TYPE,\\n                  hljs.C_LINE_COMMENT_MODE,\\n                  KOTLIN_NESTED_COMMENT\\n                ],\\n                relevance: 0\\n              },\\n              hljs.C_LINE_COMMENT_MODE,\\n              KOTLIN_NESTED_COMMENT,\\n              ANNOTATION_USE_SITE,\\n              ANNOTATION,\\n              STRING,\\n              hljs.C_NUMBER_MODE\\n            ]\\n          },\\n          KOTLIN_NESTED_COMMENT\\n        ]\\n      },\\n      {\\n        begin: [\\n          /class|interface|trait/,\\n          /\\\\s+/,\\n          hljs.UNDERSCORE_IDENT_RE\\n        ],\\n        beginScope: {\\n          3: \\\"title.class\\\"\\n        },\\n        keywords: 'class interface trait',\\n        end: /[:\\\\{(]|$/,\\n        excludeEnd: true,\\n        illegal: 'extends implements',\\n        contains: [\\n          { beginKeywords: 'public protected internal private constructor' },\\n          hljs.UNDERSCORE_TITLE_MODE,\\n          {\\n            className: 'type',\\n            begin: /</,\\n            end: />/,\\n            excludeBegin: true,\\n            excludeEnd: true,\\n            relevance: 0\\n          },\\n          {\\n            className: 'type',\\n            begin: /[,:]\\\\s*/,\\n            end: /[<\\\\(,){\\\\s]|$/,\\n            excludeBegin: true,\\n            returnEnd: true\\n          },\\n          ANNOTATION_USE_SITE,\\n          ANNOTATION\\n        ]\\n      },\\n      STRING,\\n      {\\n        className: 'meta',\\n        begin: \\\"^#!/usr/bin/env\\\",\\n        end: '$',\\n        illegal: '\\\\n'\\n      },\\n      KOTLIN_NUMBER_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = kotlin;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/kotlin.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/lasso.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/lasso.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Lasso\\nAuthor: Eric Knibbe <eric@lassosoft.com>\\nDescription: Lasso is a language and server platform for database-driven web applications. This definition handles Lasso 9 syntax and LassoScript for Lasso 8.6 and earlier.\\nWebsite: http://www.lassosoft.com/What-Is-Lasso\\n*/\\n\\nfunction lasso(hljs) {\\n  const LASSO_IDENT_RE = '[a-zA-Z_][\\\\\\\\w.]*';\\n  const LASSO_ANGLE_RE = '<\\\\\\\\?(lasso(script)?|=)';\\n  const LASSO_CLOSE_RE = '\\\\\\\\]|\\\\\\\\?>';\\n  const LASSO_KEYWORDS = {\\n    $pattern: LASSO_IDENT_RE + '|&[lg]t;',\\n    literal:\\n      'true false none minimal full all void and or not '\\n      + 'bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft',\\n    built_in:\\n      'array date decimal duration integer map pair string tag xml null '\\n      + 'boolean bytes keyword list locale queue set stack staticarray '\\n      + 'local var variable global data self inherited currentcapture givenblock',\\n    keyword:\\n      'cache database_names database_schemanames database_tablenames '\\n      + 'define_tag define_type email_batch encode_set html_comment handle '\\n      + 'handle_error header if inline iterate ljax_target link '\\n      + 'link_currentaction link_currentgroup link_currentrecord link_detail '\\n      + 'link_firstgroup link_firstrecord link_lastgroup link_lastrecord '\\n      + 'link_nextgroup link_nextrecord link_prevgroup link_prevrecord log '\\n      + 'loop namespace_using output_none portal private protect records '\\n      + 'referer referrer repeating resultset rows search_args '\\n      + 'search_arguments select sort_args sort_arguments thread_atomic '\\n      + 'value_list while abort case else fail_if fail_ifnot fail if_empty '\\n      + 'if_false if_null if_true loop_abort loop_continue loop_count params '\\n      + 'params_up return return_value run_children soap_definetag '\\n      + 'soap_lastrequest soap_lastresponse tag_name ascending average by '\\n      + 'define descending do equals frozen group handle_failure import in '\\n      + 'into join let match max min on order parent protected provide public '\\n      + 'require returnhome skip split_thread sum take thread to trait type '\\n      + 'where with yield yieldhome'\\n  };\\n  const HTML_COMMENT = hljs.COMMENT(\\n    '<!--',\\n    '-->',\\n    { relevance: 0 }\\n  );\\n  const LASSO_NOPROCESS = {\\n    className: 'meta',\\n    begin: '\\\\\\\\[noprocess\\\\\\\\]',\\n    starts: {\\n      end: '\\\\\\\\[/noprocess\\\\\\\\]',\\n      returnEnd: true,\\n      contains: [ HTML_COMMENT ]\\n    }\\n  };\\n  const LASSO_START = {\\n    className: 'meta',\\n    begin: '\\\\\\\\[/noprocess|' + LASSO_ANGLE_RE\\n  };\\n  const LASSO_DATAMEMBER = {\\n    className: 'symbol',\\n    begin: '\\\\'' + LASSO_IDENT_RE + '\\\\''\\n  };\\n  const LASSO_CODE = [\\n    hljs.C_LINE_COMMENT_MODE,\\n    hljs.C_BLOCK_COMMENT_MODE,\\n    hljs.inherit(hljs.C_NUMBER_MODE, { begin: hljs.C_NUMBER_RE + '|(-?infinity|NaN)\\\\\\\\b' }),\\n    hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }),\\n    hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),\\n    {\\n      className: 'string',\\n      begin: '`',\\n      end: '`'\\n    },\\n    { // variables\\n      variants: [\\n        { begin: '[#$]' + LASSO_IDENT_RE },\\n        {\\n          begin: '#',\\n          end: '\\\\\\\\d+',\\n          illegal: '\\\\\\\\W'\\n        }\\n      ] },\\n    {\\n      className: 'type',\\n      begin: '::\\\\\\\\s*',\\n      end: LASSO_IDENT_RE,\\n      illegal: '\\\\\\\\W'\\n    },\\n    {\\n      className: 'params',\\n      variants: [\\n        {\\n          begin: '-(?!infinity)' + LASSO_IDENT_RE,\\n          relevance: 0\\n        },\\n        { begin: '(\\\\\\\\.\\\\\\\\.\\\\\\\\.)' }\\n      ]\\n    },\\n    {\\n      begin: /(->|\\\\.)\\\\s*/,\\n      relevance: 0,\\n      contains: [ LASSO_DATAMEMBER ]\\n    },\\n    {\\n      className: 'class',\\n      beginKeywords: 'define',\\n      returnEnd: true,\\n      end: '\\\\\\\\(|=>',\\n      contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: LASSO_IDENT_RE + '(=(?!>))?|[-+*/%](?!>)' }) ]\\n    }\\n  ];\\n  return {\\n    name: 'Lasso',\\n    aliases: [\\n      'ls',\\n      'lassoscript'\\n    ],\\n    case_insensitive: true,\\n    keywords: LASSO_KEYWORDS,\\n    contains: [\\n      {\\n        className: 'meta',\\n        begin: LASSO_CLOSE_RE,\\n        relevance: 0,\\n        starts: { // markup\\n          end: '\\\\\\\\[|' + LASSO_ANGLE_RE,\\n          returnEnd: true,\\n          relevance: 0,\\n          contains: [ HTML_COMMENT ]\\n        }\\n      },\\n      LASSO_NOPROCESS,\\n      LASSO_START,\\n      {\\n        className: 'meta',\\n        begin: '\\\\\\\\[no_square_brackets',\\n        starts: {\\n          end: '\\\\\\\\[/no_square_brackets\\\\\\\\]', // not implemented in the language\\n          keywords: LASSO_KEYWORDS,\\n          contains: [\\n            {\\n              className: 'meta',\\n              begin: LASSO_CLOSE_RE,\\n              relevance: 0,\\n              starts: {\\n                end: '\\\\\\\\[noprocess\\\\\\\\]|' + LASSO_ANGLE_RE,\\n                returnEnd: true,\\n                contains: [ HTML_COMMENT ]\\n              }\\n            },\\n            LASSO_NOPROCESS,\\n            LASSO_START\\n          ].concat(LASSO_CODE)\\n        }\\n      },\\n      {\\n        className: 'meta',\\n        begin: '\\\\\\\\[',\\n        relevance: 0\\n      },\\n      {\\n        className: 'meta',\\n        begin: '^#!',\\n        end: 'lasso9$',\\n        relevance: 10\\n      }\\n    ].concat(LASSO_CODE)\\n  };\\n}\\n\\nmodule.exports = lasso;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/lasso.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/latex.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/latex.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: LaTeX\\nAuthor: Benedikt Wilde <bwilde@posteo.de>\\nWebsite: https://www.latex-project.org\\nCategory: markup\\n*/\\n\\n/** @type LanguageFn */\\nfunction latex(hljs) {\\n  const regex = hljs.regex;\\n  const KNOWN_CONTROL_WORDS = regex.either(...[\\n    '(?:NeedsTeXFormat|RequirePackage|GetIdInfo)',\\n    'Provides(?:Expl)?(?:Package|Class|File)',\\n    '(?:DeclareOption|ProcessOptions)',\\n    '(?:documentclass|usepackage|input|include)',\\n    'makeat(?:letter|other)',\\n    'ExplSyntax(?:On|Off)',\\n    '(?:new|renew|provide)?command',\\n    '(?:re)newenvironment',\\n    '(?:New|Renew|Provide|Declare)(?:Expandable)?DocumentCommand',\\n    '(?:New|Renew|Provide|Declare)DocumentEnvironment',\\n    '(?:(?:e|g|x)?def|let)',\\n    '(?:begin|end)',\\n    '(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph)',\\n    'caption',\\n    '(?:label|(?:eq|page|name)?ref|(?:paren|foot|super)?cite)',\\n    '(?:alpha|beta|[Gg]amma|[Dd]elta|(?:var)?epsilon|zeta|eta|[Tt]heta|vartheta)',\\n    '(?:iota|(?:var)?kappa|[Ll]ambda|mu|nu|[Xx]i|[Pp]i|varpi|(?:var)rho)',\\n    '(?:[Ss]igma|varsigma|tau|[Uu]psilon|[Pp]hi|varphi|chi|[Pp]si|[Oo]mega)',\\n    '(?:frac|sum|prod|lim|infty|times|sqrt|leq|geq|left|right|middle|[bB]igg?)',\\n    '(?:[lr]angle|q?quad|[lcvdi]?dots|d?dot|hat|tilde|bar)'\\n  ].map(word => word + '(?![a-zA-Z@:_])'));\\n  const L3_REGEX = new RegExp([\\n    // A function \\\\module_function_name:signature or \\\\__module_function_name:signature,\\n    // where both module and function_name need at least two characters and\\n    // function_name may contain single underscores.\\n    '(?:__)?[a-zA-Z]{2,}_[a-zA-Z](?:_?[a-zA-Z])+:[a-zA-Z]*',\\n    // A variable \\\\scope_module_and_name_type or \\\\scope__module_ane_name_type,\\n    // where scope is one of l, g or c, type needs at least two characters\\n    // and module_and_name may contain single underscores.\\n    '[lgc]__?[a-zA-Z](?:_?[a-zA-Z])*_[a-zA-Z]{2,}',\\n    // A quark \\\\q_the_name or \\\\q__the_name or\\n    // scan mark \\\\s_the_name or \\\\s__vthe_name,\\n    // where variable_name needs at least two characters and\\n    // may contain single underscores.\\n    '[qs]__?[a-zA-Z](?:_?[a-zA-Z])+',\\n    // Other LaTeX3 macro names that are not covered by the three rules above.\\n    'use(?:_i)?:[a-zA-Z]*',\\n    '(?:else|fi|or):',\\n    '(?:if|cs|exp):w',\\n    '(?:hbox|vbox):n',\\n    '::[a-zA-Z]_unbraced',\\n    '::[a-zA-Z:]'\\n  ].map(pattern => pattern + '(?![a-zA-Z:_])').join('|'));\\n  const L2_VARIANTS = [\\n    { begin: /[a-zA-Z@]+/ }, // control word\\n    { begin: /[^a-zA-Z@]?/ } // control symbol\\n  ];\\n  const DOUBLE_CARET_VARIANTS = [\\n    { begin: /\\\\^{6}[0-9a-f]{6}/ },\\n    { begin: /\\\\^{5}[0-9a-f]{5}/ },\\n    { begin: /\\\\^{4}[0-9a-f]{4}/ },\\n    { begin: /\\\\^{3}[0-9a-f]{3}/ },\\n    { begin: /\\\\^{2}[0-9a-f]{2}/ },\\n    { begin: /\\\\^{2}[\\\\u0000-\\\\u007f]/ }\\n  ];\\n  const CONTROL_SEQUENCE = {\\n    className: 'keyword',\\n    begin: /\\\\\\\\/,\\n    relevance: 0,\\n    contains: [\\n      {\\n        endsParent: true,\\n        begin: KNOWN_CONTROL_WORDS\\n      },\\n      {\\n        endsParent: true,\\n        begin: L3_REGEX\\n      },\\n      {\\n        endsParent: true,\\n        variants: DOUBLE_CARET_VARIANTS\\n      },\\n      {\\n        endsParent: true,\\n        relevance: 0,\\n        variants: L2_VARIANTS\\n      }\\n    ]\\n  };\\n  const MACRO_PARAM = {\\n    className: 'params',\\n    relevance: 0,\\n    begin: /#+\\\\d?/\\n  };\\n  const DOUBLE_CARET_CHAR = {\\n    // relevance: 1\\n    variants: DOUBLE_CARET_VARIANTS };\\n  const SPECIAL_CATCODE = {\\n    className: 'built_in',\\n    relevance: 0,\\n    begin: /[$&^_]/\\n  };\\n  const MAGIC_COMMENT = {\\n    className: 'meta',\\n    begin: /% ?!(T[eE]X|tex|BIB|bib)/,\\n    end: '$',\\n    relevance: 10\\n  };\\n  const COMMENT = hljs.COMMENT(\\n    '%',\\n    '$',\\n    { relevance: 0 }\\n  );\\n  const EVERYTHING_BUT_VERBATIM = [\\n    CONTROL_SEQUENCE,\\n    MACRO_PARAM,\\n    DOUBLE_CARET_CHAR,\\n    SPECIAL_CATCODE,\\n    MAGIC_COMMENT,\\n    COMMENT\\n  ];\\n  const BRACE_GROUP_NO_VERBATIM = {\\n    begin: /\\\\{/,\\n    end: /\\\\}/,\\n    relevance: 0,\\n    contains: [\\n      'self',\\n      ...EVERYTHING_BUT_VERBATIM\\n    ]\\n  };\\n  const ARGUMENT_BRACES = hljs.inherit(\\n    BRACE_GROUP_NO_VERBATIM,\\n    {\\n      relevance: 0,\\n      endsParent: true,\\n      contains: [\\n        BRACE_GROUP_NO_VERBATIM,\\n        ...EVERYTHING_BUT_VERBATIM\\n      ]\\n    }\\n  );\\n  const ARGUMENT_BRACKETS = {\\n    begin: /\\\\[/,\\n    end: /\\\\]/,\\n    endsParent: true,\\n    relevance: 0,\\n    contains: [\\n      BRACE_GROUP_NO_VERBATIM,\\n      ...EVERYTHING_BUT_VERBATIM\\n    ]\\n  };\\n  const SPACE_GOBBLER = {\\n    begin: /\\\\s+/,\\n    relevance: 0\\n  };\\n  const ARGUMENT_M = [ ARGUMENT_BRACES ];\\n  const ARGUMENT_O = [ ARGUMENT_BRACKETS ];\\n  const ARGUMENT_AND_THEN = function(arg, starts_mode) {\\n    return {\\n      contains: [ SPACE_GOBBLER ],\\n      starts: {\\n        relevance: 0,\\n        contains: arg,\\n        starts: starts_mode\\n      }\\n    };\\n  };\\n  const CSNAME = function(csname, starts_mode) {\\n    return {\\n      begin: '\\\\\\\\\\\\\\\\' + csname + '(?![a-zA-Z@:_])',\\n      keywords: {\\n        $pattern: /\\\\\\\\[a-zA-Z]+/,\\n        keyword: '\\\\\\\\' + csname\\n      },\\n      relevance: 0,\\n      contains: [ SPACE_GOBBLER ],\\n      starts: starts_mode\\n    };\\n  };\\n  const BEGIN_ENV = function(envname, starts_mode) {\\n    return hljs.inherit(\\n      {\\n        begin: '\\\\\\\\\\\\\\\\begin(?=[ \\\\t]*(\\\\\\\\r?\\\\\\\\n[ \\\\t]*)?\\\\\\\\{' + envname + '\\\\\\\\})',\\n        keywords: {\\n          $pattern: /\\\\\\\\[a-zA-Z]+/,\\n          keyword: '\\\\\\\\begin'\\n        },\\n        relevance: 0,\\n      },\\n      ARGUMENT_AND_THEN(ARGUMENT_M, starts_mode)\\n    );\\n  };\\n  const VERBATIM_DELIMITED_EQUAL = (innerName = \\\"string\\\") => {\\n    return hljs.END_SAME_AS_BEGIN({\\n      className: innerName,\\n      begin: /(.|\\\\r?\\\\n)/,\\n      end: /(.|\\\\r?\\\\n)/,\\n      excludeBegin: true,\\n      excludeEnd: true,\\n      endsParent: true\\n    });\\n  };\\n  const VERBATIM_DELIMITED_ENV = function(envname) {\\n    return {\\n      className: 'string',\\n      end: '(?=\\\\\\\\\\\\\\\\end\\\\\\\\{' + envname + '\\\\\\\\})'\\n    };\\n  };\\n\\n  const VERBATIM_DELIMITED_BRACES = (innerName = \\\"string\\\") => {\\n    return {\\n      relevance: 0,\\n      begin: /\\\\{/,\\n      starts: {\\n        endsParent: true,\\n        contains: [\\n          {\\n            className: innerName,\\n            end: /(?=\\\\})/,\\n            endsParent: true,\\n            contains: [\\n              {\\n                begin: /\\\\{/,\\n                end: /\\\\}/,\\n                relevance: 0,\\n                contains: [ \\\"self\\\" ]\\n              }\\n            ],\\n          }\\n        ]\\n      }\\n    };\\n  };\\n  const VERBATIM = [\\n    ...[\\n      'verb',\\n      'lstinline'\\n    ].map(csname => CSNAME(csname, { contains: [ VERBATIM_DELIMITED_EQUAL() ] })),\\n    CSNAME('mint', ARGUMENT_AND_THEN(ARGUMENT_M, { contains: [ VERBATIM_DELIMITED_EQUAL() ] })),\\n    CSNAME('mintinline', ARGUMENT_AND_THEN(ARGUMENT_M, { contains: [\\n      VERBATIM_DELIMITED_BRACES(),\\n      VERBATIM_DELIMITED_EQUAL()\\n    ] })),\\n    CSNAME('url', { contains: [\\n      VERBATIM_DELIMITED_BRACES(\\\"link\\\"),\\n      VERBATIM_DELIMITED_BRACES(\\\"link\\\")\\n    ] }),\\n    CSNAME('hyperref', { contains: [ VERBATIM_DELIMITED_BRACES(\\\"link\\\") ] }),\\n    CSNAME('href', ARGUMENT_AND_THEN(ARGUMENT_O, { contains: [ VERBATIM_DELIMITED_BRACES(\\\"link\\\") ] })),\\n    ...[].concat(...[\\n      '',\\n      '\\\\\\\\*'\\n    ].map(suffix => [\\n      BEGIN_ENV('verbatim' + suffix, VERBATIM_DELIMITED_ENV('verbatim' + suffix)),\\n      BEGIN_ENV('filecontents' + suffix, ARGUMENT_AND_THEN(ARGUMENT_M, VERBATIM_DELIMITED_ENV('filecontents' + suffix))),\\n      ...[\\n        '',\\n        'B',\\n        'L'\\n      ].map(prefix =>\\n        BEGIN_ENV(prefix + 'Verbatim' + suffix, ARGUMENT_AND_THEN(ARGUMENT_O, VERBATIM_DELIMITED_ENV(prefix + 'Verbatim' + suffix)))\\n      )\\n    ])),\\n    BEGIN_ENV('minted', ARGUMENT_AND_THEN(ARGUMENT_O, ARGUMENT_AND_THEN(ARGUMENT_M, VERBATIM_DELIMITED_ENV('minted')))),\\n  ];\\n\\n  return {\\n    name: 'LaTeX',\\n    aliases: [ 'tex' ],\\n    contains: [\\n      ...VERBATIM,\\n      ...EVERYTHING_BUT_VERBATIM\\n    ]\\n  };\\n}\\n\\nmodule.exports = latex;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/latex.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/ldif.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/ldif.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: LDIF\\nContributors: Jacob Childress <jacobc@gmail.com>\\nCategory: enterprise, config\\nWebsite: https://en.wikipedia.org/wiki/LDAP_Data_Interchange_Format\\n*/\\n\\n/** @type LanguageFn */\\nfunction ldif(hljs) {\\n  return {\\n    name: 'LDIF',\\n    contains: [\\n      {\\n        className: 'attribute',\\n        match: '^dn(?=:)',\\n        relevance: 10\\n      },\\n      {\\n        className: 'attribute',\\n        match: '^\\\\\\\\w+(?=:)'\\n      },\\n      {\\n        className: 'literal',\\n        match: '^-'\\n      },\\n      hljs.HASH_COMMENT_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = ldif;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/ldif.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/leaf.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/leaf.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Leaf\\nAuthor: Hale Chan <halechan@qq.com>\\nDescription: Based on the Leaf reference from https://vapor.github.io/documentation/guide/leaf.html.\\n*/\\n\\nfunction leaf(hljs) {\\n  return {\\n    name: 'Leaf',\\n    contains: [\\n      {\\n        className: 'function',\\n        begin: '#+' + '[A-Za-z_0-9]*' + '\\\\\\\\(',\\n        end: / \\\\{/,\\n        returnBegin: true,\\n        excludeEnd: true,\\n        contains: [\\n          {\\n            className: 'keyword',\\n            begin: '#+'\\n          },\\n          {\\n            className: 'title',\\n            begin: '[A-Za-z_][A-Za-z_0-9]*'\\n          },\\n          {\\n            className: 'params',\\n            begin: '\\\\\\\\(',\\n            end: '\\\\\\\\)',\\n            endsParent: true,\\n            contains: [\\n              {\\n                className: 'string',\\n                begin: '\\\"',\\n                end: '\\\"'\\n              },\\n              {\\n                className: 'variable',\\n                begin: '[A-Za-z_][A-Za-z_0-9]*'\\n              }\\n            ]\\n          }\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = leaf;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/leaf.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/less.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/less.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"const MODES = (hljs) => {\\n  return {\\n    IMPORTANT: {\\n      scope: 'meta',\\n      begin: '!important'\\n    },\\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\\n    HEXCOLOR: {\\n      scope: 'number',\\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\\\b/\\n    },\\n    FUNCTION_DISPATCH: {\\n      className: \\\"built_in\\\",\\n      begin: /[\\\\w-]+(?=\\\\()/\\n    },\\n    ATTRIBUTE_SELECTOR_MODE: {\\n      scope: 'selector-attr',\\n      begin: /\\\\[/,\\n      end: /\\\\]/,\\n      illegal: '$',\\n      contains: [\\n        hljs.APOS_STRING_MODE,\\n        hljs.QUOTE_STRING_MODE\\n      ]\\n    },\\n    CSS_NUMBER_MODE: {\\n      scope: 'number',\\n      begin: hljs.NUMBER_RE + '(' +\\n        '%|em|ex|ch|rem' +\\n        '|vw|vh|vmin|vmax' +\\n        '|cm|mm|in|pt|pc|px' +\\n        '|deg|grad|rad|turn' +\\n        '|s|ms' +\\n        '|Hz|kHz' +\\n        '|dpi|dpcm|dppx' +\\n        ')?',\\n      relevance: 0\\n    },\\n    CSS_VARIABLE: {\\n      className: \\\"attr\\\",\\n      begin: /--[A-Za-z][A-Za-z0-9_-]*/\\n    }\\n  };\\n};\\n\\nconst TAGS = [\\n  'a',\\n  'abbr',\\n  'address',\\n  'article',\\n  'aside',\\n  'audio',\\n  'b',\\n  'blockquote',\\n  'body',\\n  'button',\\n  'canvas',\\n  'caption',\\n  'cite',\\n  'code',\\n  'dd',\\n  'del',\\n  'details',\\n  'dfn',\\n  'div',\\n  'dl',\\n  'dt',\\n  'em',\\n  'fieldset',\\n  'figcaption',\\n  'figure',\\n  'footer',\\n  'form',\\n  'h1',\\n  'h2',\\n  'h3',\\n  'h4',\\n  'h5',\\n  'h6',\\n  'header',\\n  'hgroup',\\n  'html',\\n  'i',\\n  'iframe',\\n  'img',\\n  'input',\\n  'ins',\\n  'kbd',\\n  'label',\\n  'legend',\\n  'li',\\n  'main',\\n  'mark',\\n  'menu',\\n  'nav',\\n  'object',\\n  'ol',\\n  'p',\\n  'q',\\n  'quote',\\n  'samp',\\n  'section',\\n  'span',\\n  'strong',\\n  'summary',\\n  'sup',\\n  'table',\\n  'tbody',\\n  'td',\\n  'textarea',\\n  'tfoot',\\n  'th',\\n  'thead',\\n  'time',\\n  'tr',\\n  'ul',\\n  'var',\\n  'video'\\n];\\n\\nconst MEDIA_FEATURES = [\\n  'any-hover',\\n  'any-pointer',\\n  'aspect-ratio',\\n  'color',\\n  'color-gamut',\\n  'color-index',\\n  'device-aspect-ratio',\\n  'device-height',\\n  'device-width',\\n  'display-mode',\\n  'forced-colors',\\n  'grid',\\n  'height',\\n  'hover',\\n  'inverted-colors',\\n  'monochrome',\\n  'orientation',\\n  'overflow-block',\\n  'overflow-inline',\\n  'pointer',\\n  'prefers-color-scheme',\\n  'prefers-contrast',\\n  'prefers-reduced-motion',\\n  'prefers-reduced-transparency',\\n  'resolution',\\n  'scan',\\n  'scripting',\\n  'update',\\n  'width',\\n  // TODO: find a better solution?\\n  'min-width',\\n  'max-width',\\n  'min-height',\\n  'max-height'\\n];\\n\\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\\nconst PSEUDO_CLASSES = [\\n  'active',\\n  'any-link',\\n  'blank',\\n  'checked',\\n  'current',\\n  'default',\\n  'defined',\\n  'dir', // dir()\\n  'disabled',\\n  'drop',\\n  'empty',\\n  'enabled',\\n  'first',\\n  'first-child',\\n  'first-of-type',\\n  'fullscreen',\\n  'future',\\n  'focus',\\n  'focus-visible',\\n  'focus-within',\\n  'has', // has()\\n  'host', // host or host()\\n  'host-context', // host-context()\\n  'hover',\\n  'indeterminate',\\n  'in-range',\\n  'invalid',\\n  'is', // is()\\n  'lang', // lang()\\n  'last-child',\\n  'last-of-type',\\n  'left',\\n  'link',\\n  'local-link',\\n  'not', // not()\\n  'nth-child', // nth-child()\\n  'nth-col', // nth-col()\\n  'nth-last-child', // nth-last-child()\\n  'nth-last-col', // nth-last-col()\\n  'nth-last-of-type', //nth-last-of-type()\\n  'nth-of-type', //nth-of-type()\\n  'only-child',\\n  'only-of-type',\\n  'optional',\\n  'out-of-range',\\n  'past',\\n  'placeholder-shown',\\n  'read-only',\\n  'read-write',\\n  'required',\\n  'right',\\n  'root',\\n  'scope',\\n  'target',\\n  'target-within',\\n  'user-invalid',\\n  'valid',\\n  'visited',\\n  'where' // where()\\n];\\n\\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\\nconst PSEUDO_ELEMENTS = [\\n  'after',\\n  'backdrop',\\n  'before',\\n  'cue',\\n  'cue-region',\\n  'first-letter',\\n  'first-line',\\n  'grammar-error',\\n  'marker',\\n  'part',\\n  'placeholder',\\n  'selection',\\n  'slotted',\\n  'spelling-error'\\n];\\n\\nconst ATTRIBUTES = [\\n  'align-content',\\n  'align-items',\\n  'align-self',\\n  'all',\\n  'animation',\\n  'animation-delay',\\n  'animation-direction',\\n  'animation-duration',\\n  'animation-fill-mode',\\n  'animation-iteration-count',\\n  'animation-name',\\n  'animation-play-state',\\n  'animation-timing-function',\\n  'backface-visibility',\\n  'background',\\n  'background-attachment',\\n  'background-blend-mode',\\n  'background-clip',\\n  'background-color',\\n  'background-image',\\n  'background-origin',\\n  'background-position',\\n  'background-repeat',\\n  'background-size',\\n  'block-size',\\n  'border',\\n  'border-block',\\n  'border-block-color',\\n  'border-block-end',\\n  'border-block-end-color',\\n  'border-block-end-style',\\n  'border-block-end-width',\\n  'border-block-start',\\n  'border-block-start-color',\\n  'border-block-start-style',\\n  'border-block-start-width',\\n  'border-block-style',\\n  'border-block-width',\\n  'border-bottom',\\n  'border-bottom-color',\\n  'border-bottom-left-radius',\\n  'border-bottom-right-radius',\\n  'border-bottom-style',\\n  'border-bottom-width',\\n  'border-collapse',\\n  'border-color',\\n  'border-image',\\n  'border-image-outset',\\n  'border-image-repeat',\\n  'border-image-slice',\\n  'border-image-source',\\n  'border-image-width',\\n  'border-inline',\\n  'border-inline-color',\\n  'border-inline-end',\\n  'border-inline-end-color',\\n  'border-inline-end-style',\\n  'border-inline-end-width',\\n  'border-inline-start',\\n  'border-inline-start-color',\\n  'border-inline-start-style',\\n  'border-inline-start-width',\\n  'border-inline-style',\\n  'border-inline-width',\\n  'border-left',\\n  'border-left-color',\\n  'border-left-style',\\n  'border-left-width',\\n  'border-radius',\\n  'border-right',\\n  'border-right-color',\\n  'border-right-style',\\n  'border-right-width',\\n  'border-spacing',\\n  'border-style',\\n  'border-top',\\n  'border-top-color',\\n  'border-top-left-radius',\\n  'border-top-right-radius',\\n  'border-top-style',\\n  'border-top-width',\\n  'border-width',\\n  'bottom',\\n  'box-decoration-break',\\n  'box-shadow',\\n  'box-sizing',\\n  'break-after',\\n  'break-before',\\n  'break-inside',\\n  'caption-side',\\n  'caret-color',\\n  'clear',\\n  'clip',\\n  'clip-path',\\n  'clip-rule',\\n  'color',\\n  'column-count',\\n  'column-fill',\\n  'column-gap',\\n  'column-rule',\\n  'column-rule-color',\\n  'column-rule-style',\\n  'column-rule-width',\\n  'column-span',\\n  'column-width',\\n  'columns',\\n  'contain',\\n  'content',\\n  'content-visibility',\\n  'counter-increment',\\n  'counter-reset',\\n  'cue',\\n  'cue-after',\\n  'cue-before',\\n  'cursor',\\n  'direction',\\n  'display',\\n  'empty-cells',\\n  'filter',\\n  'flex',\\n  'flex-basis',\\n  'flex-direction',\\n  'flex-flow',\\n  'flex-grow',\\n  'flex-shrink',\\n  'flex-wrap',\\n  'float',\\n  'flow',\\n  'font',\\n  'font-display',\\n  'font-family',\\n  'font-feature-settings',\\n  'font-kerning',\\n  'font-language-override',\\n  'font-size',\\n  'font-size-adjust',\\n  'font-smoothing',\\n  'font-stretch',\\n  'font-style',\\n  'font-synthesis',\\n  'font-variant',\\n  'font-variant-caps',\\n  'font-variant-east-asian',\\n  'font-variant-ligatures',\\n  'font-variant-numeric',\\n  'font-variant-position',\\n  'font-variation-settings',\\n  'font-weight',\\n  'gap',\\n  'glyph-orientation-vertical',\\n  'grid',\\n  'grid-area',\\n  'grid-auto-columns',\\n  'grid-auto-flow',\\n  'grid-auto-rows',\\n  'grid-column',\\n  'grid-column-end',\\n  'grid-column-start',\\n  'grid-gap',\\n  'grid-row',\\n  'grid-row-end',\\n  'grid-row-start',\\n  'grid-template',\\n  'grid-template-areas',\\n  'grid-template-columns',\\n  'grid-template-rows',\\n  'hanging-punctuation',\\n  'height',\\n  'hyphens',\\n  'icon',\\n  'image-orientation',\\n  'image-rendering',\\n  'image-resolution',\\n  'ime-mode',\\n  'inline-size',\\n  'isolation',\\n  'justify-content',\\n  'left',\\n  'letter-spacing',\\n  'line-break',\\n  'line-height',\\n  'list-style',\\n  'list-style-image',\\n  'list-style-position',\\n  'list-style-type',\\n  'margin',\\n  'margin-block',\\n  'margin-block-end',\\n  'margin-block-start',\\n  'margin-bottom',\\n  'margin-inline',\\n  'margin-inline-end',\\n  'margin-inline-start',\\n  'margin-left',\\n  'margin-right',\\n  'margin-top',\\n  'marks',\\n  'mask',\\n  'mask-border',\\n  'mask-border-mode',\\n  'mask-border-outset',\\n  'mask-border-repeat',\\n  'mask-border-slice',\\n  'mask-border-source',\\n  'mask-border-width',\\n  'mask-clip',\\n  'mask-composite',\\n  'mask-image',\\n  'mask-mode',\\n  'mask-origin',\\n  'mask-position',\\n  'mask-repeat',\\n  'mask-size',\\n  'mask-type',\\n  'max-block-size',\\n  'max-height',\\n  'max-inline-size',\\n  'max-width',\\n  'min-block-size',\\n  'min-height',\\n  'min-inline-size',\\n  'min-width',\\n  'mix-blend-mode',\\n  'nav-down',\\n  'nav-index',\\n  'nav-left',\\n  'nav-right',\\n  'nav-up',\\n  'none',\\n  'normal',\\n  'object-fit',\\n  'object-position',\\n  'opacity',\\n  'order',\\n  'orphans',\\n  'outline',\\n  'outline-color',\\n  'outline-offset',\\n  'outline-style',\\n  'outline-width',\\n  'overflow',\\n  'overflow-wrap',\\n  'overflow-x',\\n  'overflow-y',\\n  'padding',\\n  'padding-block',\\n  'padding-block-end',\\n  'padding-block-start',\\n  'padding-bottom',\\n  'padding-inline',\\n  'padding-inline-end',\\n  'padding-inline-start',\\n  'padding-left',\\n  'padding-right',\\n  'padding-top',\\n  'page-break-after',\\n  'page-break-before',\\n  'page-break-inside',\\n  'pause',\\n  'pause-after',\\n  'pause-before',\\n  'perspective',\\n  'perspective-origin',\\n  'pointer-events',\\n  'position',\\n  'quotes',\\n  'resize',\\n  'rest',\\n  'rest-after',\\n  'rest-before',\\n  'right',\\n  'row-gap',\\n  'scroll-margin',\\n  'scroll-margin-block',\\n  'scroll-margin-block-end',\\n  'scroll-margin-block-start',\\n  'scroll-margin-bottom',\\n  'scroll-margin-inline',\\n  'scroll-margin-inline-end',\\n  'scroll-margin-inline-start',\\n  'scroll-margin-left',\\n  'scroll-margin-right',\\n  'scroll-margin-top',\\n  'scroll-padding',\\n  'scroll-padding-block',\\n  'scroll-padding-block-end',\\n  'scroll-padding-block-start',\\n  'scroll-padding-bottom',\\n  'scroll-padding-inline',\\n  'scroll-padding-inline-end',\\n  'scroll-padding-inline-start',\\n  'scroll-padding-left',\\n  'scroll-padding-right',\\n  'scroll-padding-top',\\n  'scroll-snap-align',\\n  'scroll-snap-stop',\\n  'scroll-snap-type',\\n  'scrollbar-color',\\n  'scrollbar-gutter',\\n  'scrollbar-width',\\n  'shape-image-threshold',\\n  'shape-margin',\\n  'shape-outside',\\n  'speak',\\n  'speak-as',\\n  'src', // @font-face\\n  'tab-size',\\n  'table-layout',\\n  'text-align',\\n  'text-align-all',\\n  'text-align-last',\\n  'text-combine-upright',\\n  'text-decoration',\\n  'text-decoration-color',\\n  'text-decoration-line',\\n  'text-decoration-style',\\n  'text-emphasis',\\n  'text-emphasis-color',\\n  'text-emphasis-position',\\n  'text-emphasis-style',\\n  'text-indent',\\n  'text-justify',\\n  'text-orientation',\\n  'text-overflow',\\n  'text-rendering',\\n  'text-shadow',\\n  'text-transform',\\n  'text-underline-position',\\n  'top',\\n  'transform',\\n  'transform-box',\\n  'transform-origin',\\n  'transform-style',\\n  'transition',\\n  'transition-delay',\\n  'transition-duration',\\n  'transition-property',\\n  'transition-timing-function',\\n  'unicode-bidi',\\n  'vertical-align',\\n  'visibility',\\n  'voice-balance',\\n  'voice-duration',\\n  'voice-family',\\n  'voice-pitch',\\n  'voice-range',\\n  'voice-rate',\\n  'voice-stress',\\n  'voice-volume',\\n  'white-space',\\n  'widows',\\n  'width',\\n  'will-change',\\n  'word-break',\\n  'word-spacing',\\n  'word-wrap',\\n  'writing-mode',\\n  'z-index'\\n  // reverse makes sure longer attributes `font-weight` are matched fully\\n  // instead of getting false positives on say `font`\\n].reverse();\\n\\n// some grammars use them all as a single group\\nconst PSEUDO_SELECTORS = PSEUDO_CLASSES.concat(PSEUDO_ELEMENTS);\\n\\n/*\\nLanguage: Less\\nDescription: It's CSS, with just a little more.\\nAuthor:   Max Mikhailov <seven.phases.max@gmail.com>\\nWebsite: http://lesscss.org\\nCategory: common, css, web\\n*/\\n\\n/** @type LanguageFn */\\nfunction less(hljs) {\\n  const modes = MODES(hljs);\\n  const PSEUDO_SELECTORS$1 = PSEUDO_SELECTORS;\\n\\n  const AT_MODIFIERS = \\\"and or not only\\\";\\n  const IDENT_RE = '[\\\\\\\\w-]+'; // yes, Less identifiers may begin with a digit\\n  const INTERP_IDENT_RE = '(' + IDENT_RE + '|@\\\\\\\\{' + IDENT_RE + '\\\\\\\\})';\\n\\n  /* Generic Modes */\\n\\n  const RULES = []; const VALUE_MODES = []; // forward def. for recursive modes\\n\\n  const STRING_MODE = function(c) {\\n    return {\\n    // Less strings are not multiline (also include '~' for more consistent coloring of \\\"escaped\\\" strings)\\n      className: 'string',\\n      begin: '~?' + c + '.*?' + c\\n    };\\n  };\\n\\n  const IDENT_MODE = function(name, begin, relevance) {\\n    return {\\n      className: name,\\n      begin: begin,\\n      relevance: relevance\\n    };\\n  };\\n\\n  const AT_KEYWORDS = {\\n    $pattern: /[a-z-]+/,\\n    keyword: AT_MODIFIERS,\\n    attribute: MEDIA_FEATURES.join(\\\" \\\")\\n  };\\n\\n  const PARENS_MODE = {\\n    // used only to properly balance nested parens inside mixin call, def. arg list\\n    begin: '\\\\\\\\(',\\n    end: '\\\\\\\\)',\\n    contains: VALUE_MODES,\\n    keywords: AT_KEYWORDS,\\n    relevance: 0\\n  };\\n\\n  // generic Less highlighter (used almost everywhere except selectors):\\n  VALUE_MODES.push(\\n    hljs.C_LINE_COMMENT_MODE,\\n    hljs.C_BLOCK_COMMENT_MODE,\\n    STRING_MODE(\\\"'\\\"),\\n    STRING_MODE('\\\"'),\\n    modes.CSS_NUMBER_MODE, // fixme: it does not include dot for numbers like .5em :(\\n    {\\n      begin: '(url|data-uri)\\\\\\\\(',\\n      starts: {\\n        className: 'string',\\n        end: '[\\\\\\\\)\\\\\\\\n]',\\n        excludeEnd: true\\n      }\\n    },\\n    modes.HEXCOLOR,\\n    PARENS_MODE,\\n    IDENT_MODE('variable', '@@?' + IDENT_RE, 10),\\n    IDENT_MODE('variable', '@\\\\\\\\{' + IDENT_RE + '\\\\\\\\}'),\\n    IDENT_MODE('built_in', '~?`[^`]*?`'), // inline javascript (or whatever host language) *multiline* string\\n    { // @media features (it’s here to not duplicate things in AT_RULE_MODE with extra PARENS_MODE overriding):\\n      className: 'attribute',\\n      begin: IDENT_RE + '\\\\\\\\s*:',\\n      end: ':',\\n      returnBegin: true,\\n      excludeEnd: true\\n    },\\n    modes.IMPORTANT,\\n    { beginKeywords: 'and not' },\\n    modes.FUNCTION_DISPATCH\\n  );\\n\\n  const VALUE_WITH_RULESETS = VALUE_MODES.concat({\\n    begin: /\\\\{/,\\n    end: /\\\\}/,\\n    contains: RULES\\n  });\\n\\n  const MIXIN_GUARD_MODE = {\\n    beginKeywords: 'when',\\n    endsWithParent: true,\\n    contains: [ { beginKeywords: 'and not' } ].concat(VALUE_MODES) // using this form to override VALUE’s 'function' match\\n  };\\n\\n  /* Rule-Level Modes */\\n\\n  const RULE_MODE = {\\n    begin: INTERP_IDENT_RE + '\\\\\\\\s*:',\\n    returnBegin: true,\\n    end: /[;}]/,\\n    relevance: 0,\\n    contains: [\\n      { begin: /-(webkit|moz|ms|o)-/ },\\n      modes.CSS_VARIABLE,\\n      {\\n        className: 'attribute',\\n        begin: '\\\\\\\\b(' + ATTRIBUTES.join('|') + ')\\\\\\\\b',\\n        end: /(?=:)/,\\n        starts: {\\n          endsWithParent: true,\\n          illegal: '[<=$]',\\n          relevance: 0,\\n          contains: VALUE_MODES\\n        }\\n      }\\n    ]\\n  };\\n\\n  const AT_RULE_MODE = {\\n    className: 'keyword',\\n    begin: '@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\\\\\b',\\n    starts: {\\n      end: '[;{}]',\\n      keywords: AT_KEYWORDS,\\n      returnEnd: true,\\n      contains: VALUE_MODES,\\n      relevance: 0\\n    }\\n  };\\n\\n  // variable definitions and calls\\n  const VAR_RULE_MODE = {\\n    className: 'variable',\\n    variants: [\\n      // using more strict pattern for higher relevance to increase chances of Less detection.\\n      // this is *the only* Less specific statement used in most of the sources, so...\\n      // (we’ll still often loose to the css-parser unless there's '//' comment,\\n      // simply because 1 variable just can't beat 99 properties :)\\n      {\\n        begin: '@' + IDENT_RE + '\\\\\\\\s*:',\\n        relevance: 15\\n      },\\n      { begin: '@' + IDENT_RE }\\n    ],\\n    starts: {\\n      end: '[;}]',\\n      returnEnd: true,\\n      contains: VALUE_WITH_RULESETS\\n    }\\n  };\\n\\n  const SELECTOR_MODE = {\\n    // first parse unambiguous selectors (i.e. those not starting with tag)\\n    // then fall into the scary lookahead-discriminator variant.\\n    // this mode also handles mixin definitions and calls\\n    variants: [\\n      {\\n        begin: '[\\\\\\\\.#:&\\\\\\\\[>]',\\n        end: '[;{}]' // mixin calls end with ';'\\n      },\\n      {\\n        begin: INTERP_IDENT_RE,\\n        end: /\\\\{/\\n      }\\n    ],\\n    returnBegin: true,\\n    returnEnd: true,\\n    illegal: '[<=\\\\'$\\\"]',\\n    relevance: 0,\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      MIXIN_GUARD_MODE,\\n      IDENT_MODE('keyword', 'all\\\\\\\\b'),\\n      IDENT_MODE('variable', '@\\\\\\\\{' + IDENT_RE + '\\\\\\\\}'), // otherwise it’s identified as tag\\n      \\n      {\\n        begin: '\\\\\\\\b(' + TAGS.join('|') + ')\\\\\\\\b',\\n        className: 'selector-tag'\\n      },\\n      modes.CSS_NUMBER_MODE,\\n      IDENT_MODE('selector-tag', INTERP_IDENT_RE, 0),\\n      IDENT_MODE('selector-id', '#' + INTERP_IDENT_RE),\\n      IDENT_MODE('selector-class', '\\\\\\\\.' + INTERP_IDENT_RE, 0),\\n      IDENT_MODE('selector-tag', '&', 0),\\n      modes.ATTRIBUTE_SELECTOR_MODE,\\n      {\\n        className: 'selector-pseudo',\\n        begin: ':(' + PSEUDO_CLASSES.join('|') + ')'\\n      },\\n      {\\n        className: 'selector-pseudo',\\n        begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')'\\n      },\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        relevance: 0,\\n        contains: VALUE_WITH_RULESETS\\n      }, // argument list of parametric mixins\\n      { begin: '!important' }, // eat !important after mixin call or it will be colored as tag\\n      modes.FUNCTION_DISPATCH\\n    ]\\n  };\\n\\n  const PSEUDO_SELECTOR_MODE = {\\n    begin: IDENT_RE + ':(:)?' + `(${PSEUDO_SELECTORS$1.join('|')})`,\\n    returnBegin: true,\\n    contains: [ SELECTOR_MODE ]\\n  };\\n\\n  RULES.push(\\n    hljs.C_LINE_COMMENT_MODE,\\n    hljs.C_BLOCK_COMMENT_MODE,\\n    AT_RULE_MODE,\\n    VAR_RULE_MODE,\\n    PSEUDO_SELECTOR_MODE,\\n    RULE_MODE,\\n    SELECTOR_MODE,\\n    MIXIN_GUARD_MODE,\\n    modes.FUNCTION_DISPATCH\\n  );\\n\\n  return {\\n    name: 'Less',\\n    case_insensitive: true,\\n    illegal: '[=>\\\\'/<($\\\"]',\\n    contains: RULES\\n  };\\n}\\n\\nmodule.exports = less;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/less.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/lisp.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/lisp.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Lisp\\nDescription: Generic lisp syntax\\nAuthor: Vasily Polovnyov <vast@whiteants.net>\\nCategory: lisp\\n*/\\n\\nfunction lisp(hljs) {\\n  const LISP_IDENT_RE = '[a-zA-Z_\\\\\\\\-+\\\\\\\\*\\\\\\\\/<=>&#][a-zA-Z0-9_\\\\\\\\-+*\\\\\\\\/<=>&#!]*';\\n  const MEC_RE = '\\\\\\\\|[^]*?\\\\\\\\|';\\n  const LISP_SIMPLE_NUMBER_RE = '(-|\\\\\\\\+)?\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+|\\\\\\\\/\\\\\\\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\\\\\\\+|-)?\\\\\\\\d+)?';\\n  const LITERAL = {\\n    className: 'literal',\\n    begin: '\\\\\\\\b(t{1}|nil)\\\\\\\\b'\\n  };\\n  const NUMBER = {\\n    className: 'number',\\n    variants: [\\n      {\\n        begin: LISP_SIMPLE_NUMBER_RE,\\n        relevance: 0\\n      },\\n      { begin: '#(b|B)[0-1]+(/[0-1]+)?' },\\n      { begin: '#(o|O)[0-7]+(/[0-7]+)?' },\\n      { begin: '#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?' },\\n      {\\n        begin: '#(c|C)\\\\\\\\(' + LISP_SIMPLE_NUMBER_RE + ' +' + LISP_SIMPLE_NUMBER_RE,\\n        end: '\\\\\\\\)'\\n      }\\n    ]\\n  };\\n  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });\\n  const COMMENT = hljs.COMMENT(\\n    ';', '$',\\n    { relevance: 0 }\\n  );\\n  const VARIABLE = {\\n    begin: '\\\\\\\\*',\\n    end: '\\\\\\\\*'\\n  };\\n  const KEYWORD = {\\n    className: 'symbol',\\n    begin: '[:&]' + LISP_IDENT_RE\\n  };\\n  const IDENT = {\\n    begin: LISP_IDENT_RE,\\n    relevance: 0\\n  };\\n  const MEC = { begin: MEC_RE };\\n  const QUOTED_LIST = {\\n    begin: '\\\\\\\\(',\\n    end: '\\\\\\\\)',\\n    contains: [\\n      'self',\\n      LITERAL,\\n      STRING,\\n      NUMBER,\\n      IDENT\\n    ]\\n  };\\n  const QUOTED = {\\n    contains: [\\n      NUMBER,\\n      STRING,\\n      VARIABLE,\\n      KEYWORD,\\n      QUOTED_LIST,\\n      IDENT\\n    ],\\n    variants: [\\n      {\\n        begin: '[\\\\'`]\\\\\\\\(',\\n        end: '\\\\\\\\)'\\n      },\\n      {\\n        begin: '\\\\\\\\(quote ',\\n        end: '\\\\\\\\)',\\n        keywords: { name: 'quote' }\\n      },\\n      { begin: '\\\\'' + MEC_RE }\\n    ]\\n  };\\n  const QUOTED_ATOM = { variants: [\\n    { begin: '\\\\'' + LISP_IDENT_RE },\\n    { begin: '#\\\\'' + LISP_IDENT_RE + '(::' + LISP_IDENT_RE + ')*' }\\n  ] };\\n  const LIST = {\\n    begin: '\\\\\\\\(\\\\\\\\s*',\\n    end: '\\\\\\\\)'\\n  };\\n  const BODY = {\\n    endsWithParent: true,\\n    relevance: 0\\n  };\\n  LIST.contains = [\\n    {\\n      className: 'name',\\n      variants: [\\n        {\\n          begin: LISP_IDENT_RE,\\n          relevance: 0,\\n        },\\n        { begin: MEC_RE }\\n      ]\\n    },\\n    BODY\\n  ];\\n  BODY.contains = [\\n    QUOTED,\\n    QUOTED_ATOM,\\n    LIST,\\n    LITERAL,\\n    NUMBER,\\n    STRING,\\n    COMMENT,\\n    VARIABLE,\\n    KEYWORD,\\n    MEC,\\n    IDENT\\n  ];\\n\\n  return {\\n    name: 'Lisp',\\n    illegal: /\\\\S/,\\n    contains: [\\n      NUMBER,\\n      hljs.SHEBANG(),\\n      LITERAL,\\n      STRING,\\n      COMMENT,\\n      QUOTED,\\n      QUOTED_ATOM,\\n      LIST,\\n      IDENT\\n    ]\\n  };\\n}\\n\\nmodule.exports = lisp;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/lisp.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/livecodeserver.js\":\n/*!*******************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/livecodeserver.js ***!\n  \\*******************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: LiveCode\\nAuthor: Ralf Bitter <rabit@revigniter.com>\\nDescription: Language definition for LiveCode server accounting for revIgniter (a web application framework) characteristics.\\nVersion: 1.1\\nDate: 2019-04-17\\nCategory: enterprise\\n*/\\n\\nfunction livecodeserver(hljs) {\\n  const VARIABLE = {\\n    className: 'variable',\\n    variants: [\\n      { begin: '\\\\\\\\b([gtps][A-Z]{1}[a-zA-Z0-9]*)(\\\\\\\\[.+\\\\\\\\])?(?:\\\\\\\\s*?)' },\\n      { begin: '\\\\\\\\$_[A-Z]+' }\\n    ],\\n    relevance: 0\\n  };\\n  const COMMENT_MODES = [\\n    hljs.C_BLOCK_COMMENT_MODE,\\n    hljs.HASH_COMMENT_MODE,\\n    hljs.COMMENT('--', '$'),\\n    hljs.COMMENT('[^:]//', '$')\\n  ];\\n  const TITLE1 = hljs.inherit(hljs.TITLE_MODE, { variants: [\\n    { begin: '\\\\\\\\b_*rig[A-Z][A-Za-z0-9_\\\\\\\\-]*' },\\n    { begin: '\\\\\\\\b_[a-z0-9\\\\\\\\-]+' }\\n  ] });\\n  const TITLE2 = hljs.inherit(hljs.TITLE_MODE, { begin: '\\\\\\\\b([A-Za-z0-9_\\\\\\\\-]+)\\\\\\\\b' });\\n  return {\\n    name: 'LiveCode',\\n    case_insensitive: false,\\n    keywords: {\\n      keyword:\\n        '$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER '\\n        + 'codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph '\\n        + 'after byte bytes english the until http forever descending using line real8 with seventh '\\n        + 'for stdout finally element word words fourth before black ninth sixth characters chars stderr '\\n        + 'uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid '\\n        + 'at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 '\\n        + 'int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat '\\n        + 'end repeat URL in try into switch to words https token binfile each tenth as ticks tick '\\n        + 'system real4 by dateItems without char character ascending eighth whole dateTime numeric short '\\n        + 'first ftp integer abbreviated abbr abbrev private case while if '\\n        + 'div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within '\\n        + 'contains ends with begins the keys of keys',\\n      literal:\\n        'SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE '\\n        + 'QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO '\\n        + 'six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five '\\n        + 'quote empty one true return cr linefeed right backslash null seven tab three two '\\n        + 'RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK '\\n        + 'FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK',\\n      built_in:\\n        'put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode '\\n        + 'base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum '\\n        + 'cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress '\\n        + 'constantNames cos date dateFormat decompress difference directories '\\n        + 'diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global '\\n        + 'globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset '\\n        + 'keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders '\\n        + 'libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 '\\n        + 'longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge messageAuthenticationCode messageDigest millisec '\\n        + 'millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar '\\n        + 'numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets '\\n        + 'paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation '\\n        + 'populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile '\\n        + 'revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull '\\n        + 'revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered '\\n        + 'revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames '\\n        + 'revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull '\\n        + 'revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections '\\n        + 'revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype '\\n        + 'revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext '\\n        + 'revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames '\\n        + 'revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase '\\n        + 'revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute '\\n        + 'revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces '\\n        + 'revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode '\\n        + 'revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling '\\n        + 'revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error '\\n        + 'revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute '\\n        + 'revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort '\\n        + 'revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree '\\n        + 'revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance '\\n        + 'sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound '\\n        + 'stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper '\\n        + 'transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames '\\n        + 'variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet '\\n        + 'xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process '\\n        + 'combine constant convert create new alias folder directory decrypt delete variable word line folder '\\n        + 'directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile '\\n        + 'libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback libURLSetDriver '\\n        + 'libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime '\\n        + 'libURLSetStatusCallback load extension loadedExtensions multiply socket prepare process post seek rel relative read from process rename '\\n        + 'replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase '\\n        + 'revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees '\\n        + 'revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord '\\n        + 'revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase '\\n        + 'revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD '\\n        + 'revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost '\\n        + 'revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData '\\n        + 'revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel '\\n        + 'revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback '\\n        + 'revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop '\\n        + 'subtract symmetric union unload vectorDotProduct wait write'\\n    },\\n    contains: [\\n      VARIABLE,\\n      {\\n        className: 'keyword',\\n        begin: '\\\\\\\\bend\\\\\\\\sif\\\\\\\\b'\\n      },\\n      {\\n        className: 'function',\\n        beginKeywords: 'function',\\n        end: '$',\\n        contains: [\\n          VARIABLE,\\n          TITLE2,\\n          hljs.APOS_STRING_MODE,\\n          hljs.QUOTE_STRING_MODE,\\n          hljs.BINARY_NUMBER_MODE,\\n          hljs.C_NUMBER_MODE,\\n          TITLE1\\n        ]\\n      },\\n      {\\n        className: 'function',\\n        begin: '\\\\\\\\bend\\\\\\\\s+',\\n        end: '$',\\n        keywords: 'end',\\n        contains: [\\n          TITLE2,\\n          TITLE1\\n        ],\\n        relevance: 0\\n      },\\n      {\\n        beginKeywords: 'command on',\\n        end: '$',\\n        contains: [\\n          VARIABLE,\\n          TITLE2,\\n          hljs.APOS_STRING_MODE,\\n          hljs.QUOTE_STRING_MODE,\\n          hljs.BINARY_NUMBER_MODE,\\n          hljs.C_NUMBER_MODE,\\n          TITLE1\\n        ]\\n      },\\n      {\\n        className: 'meta',\\n        variants: [\\n          {\\n            begin: '<\\\\\\\\?(rev|lc|livecode)',\\n            relevance: 10\\n          },\\n          { begin: '<\\\\\\\\?' },\\n          { begin: '\\\\\\\\?>' }\\n        ]\\n      },\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.BINARY_NUMBER_MODE,\\n      hljs.C_NUMBER_MODE,\\n      TITLE1\\n    ].concat(COMMENT_MODES),\\n    illegal: ';$|^\\\\\\\\[|^=|&|\\\\\\\\{'\\n  };\\n}\\n\\nmodule.exports = livecodeserver;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/livecodeserver.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/livescript.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/livescript.js ***!\n  \\***************************************************************/\n/***/ (function(module) {\n\neval(\"const KEYWORDS = [\\n  \\\"as\\\", // for exports\\n  \\\"in\\\",\\n  \\\"of\\\",\\n  \\\"if\\\",\\n  \\\"for\\\",\\n  \\\"while\\\",\\n  \\\"finally\\\",\\n  \\\"var\\\",\\n  \\\"new\\\",\\n  \\\"function\\\",\\n  \\\"do\\\",\\n  \\\"return\\\",\\n  \\\"void\\\",\\n  \\\"else\\\",\\n  \\\"break\\\",\\n  \\\"catch\\\",\\n  \\\"instanceof\\\",\\n  \\\"with\\\",\\n  \\\"throw\\\",\\n  \\\"case\\\",\\n  \\\"default\\\",\\n  \\\"try\\\",\\n  \\\"switch\\\",\\n  \\\"continue\\\",\\n  \\\"typeof\\\",\\n  \\\"delete\\\",\\n  \\\"let\\\",\\n  \\\"yield\\\",\\n  \\\"const\\\",\\n  \\\"class\\\",\\n  // JS handles these with a special rule\\n  // \\\"get\\\",\\n  // \\\"set\\\",\\n  \\\"debugger\\\",\\n  \\\"async\\\",\\n  \\\"await\\\",\\n  \\\"static\\\",\\n  \\\"import\\\",\\n  \\\"from\\\",\\n  \\\"export\\\",\\n  \\\"extends\\\"\\n];\\nconst LITERALS = [\\n  \\\"true\\\",\\n  \\\"false\\\",\\n  \\\"null\\\",\\n  \\\"undefined\\\",\\n  \\\"NaN\\\",\\n  \\\"Infinity\\\"\\n];\\n\\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\\nconst TYPES = [\\n  // Fundamental objects\\n  \\\"Object\\\",\\n  \\\"Function\\\",\\n  \\\"Boolean\\\",\\n  \\\"Symbol\\\",\\n  // numbers and dates\\n  \\\"Math\\\",\\n  \\\"Date\\\",\\n  \\\"Number\\\",\\n  \\\"BigInt\\\",\\n  // text\\n  \\\"String\\\",\\n  \\\"RegExp\\\",\\n  // Indexed collections\\n  \\\"Array\\\",\\n  \\\"Float32Array\\\",\\n  \\\"Float64Array\\\",\\n  \\\"Int8Array\\\",\\n  \\\"Uint8Array\\\",\\n  \\\"Uint8ClampedArray\\\",\\n  \\\"Int16Array\\\",\\n  \\\"Int32Array\\\",\\n  \\\"Uint16Array\\\",\\n  \\\"Uint32Array\\\",\\n  \\\"BigInt64Array\\\",\\n  \\\"BigUint64Array\\\",\\n  // Keyed collections\\n  \\\"Set\\\",\\n  \\\"Map\\\",\\n  \\\"WeakSet\\\",\\n  \\\"WeakMap\\\",\\n  // Structured data\\n  \\\"ArrayBuffer\\\",\\n  \\\"SharedArrayBuffer\\\",\\n  \\\"Atomics\\\",\\n  \\\"DataView\\\",\\n  \\\"JSON\\\",\\n  // Control abstraction objects\\n  \\\"Promise\\\",\\n  \\\"Generator\\\",\\n  \\\"GeneratorFunction\\\",\\n  \\\"AsyncFunction\\\",\\n  // Reflection\\n  \\\"Reflect\\\",\\n  \\\"Proxy\\\",\\n  // Internationalization\\n  \\\"Intl\\\",\\n  // WebAssembly\\n  \\\"WebAssembly\\\"\\n];\\n\\nconst ERROR_TYPES = [\\n  \\\"Error\\\",\\n  \\\"EvalError\\\",\\n  \\\"InternalError\\\",\\n  \\\"RangeError\\\",\\n  \\\"ReferenceError\\\",\\n  \\\"SyntaxError\\\",\\n  \\\"TypeError\\\",\\n  \\\"URIError\\\"\\n];\\n\\nconst BUILT_IN_GLOBALS = [\\n  \\\"setInterval\\\",\\n  \\\"setTimeout\\\",\\n  \\\"clearInterval\\\",\\n  \\\"clearTimeout\\\",\\n\\n  \\\"require\\\",\\n  \\\"exports\\\",\\n\\n  \\\"eval\\\",\\n  \\\"isFinite\\\",\\n  \\\"isNaN\\\",\\n  \\\"parseFloat\\\",\\n  \\\"parseInt\\\",\\n  \\\"decodeURI\\\",\\n  \\\"decodeURIComponent\\\",\\n  \\\"encodeURI\\\",\\n  \\\"encodeURIComponent\\\",\\n  \\\"escape\\\",\\n  \\\"unescape\\\"\\n];\\n\\nconst BUILT_INS = [].concat(\\n  BUILT_IN_GLOBALS,\\n  TYPES,\\n  ERROR_TYPES\\n);\\n\\n/*\\nLanguage: LiveScript\\nAuthor: Taneli Vatanen <taneli.vatanen@gmail.com>\\nContributors: Jen Evers-Corvina <jen@sevvie.net>\\nOrigin: coffeescript.js\\nDescription: LiveScript is a programming language that transcompiles to JavaScript. For info about language see http://livescript.net/\\nWebsite: https://livescript.net\\nCategory: scripting\\n*/\\n\\nfunction livescript(hljs) {\\n  const LIVESCRIPT_BUILT_INS = [\\n    'npm',\\n    'print'\\n  ];\\n  const LIVESCRIPT_LITERALS = [\\n    'yes',\\n    'no',\\n    'on',\\n    'off',\\n    'it',\\n    'that',\\n    'void'\\n  ];\\n  const LIVESCRIPT_KEYWORDS = [\\n    'then',\\n    'unless',\\n    'until',\\n    'loop',\\n    'of',\\n    'by',\\n    'when',\\n    'and',\\n    'or',\\n    'is',\\n    'isnt',\\n    'not',\\n    'it',\\n    'that',\\n    'otherwise',\\n    'from',\\n    'to',\\n    'til',\\n    'fallthrough',\\n    'case',\\n    'enum',\\n    'native',\\n    'list',\\n    'map',\\n    '__hasProp',\\n    '__extends',\\n    '__slice',\\n    '__bind',\\n    '__indexOf'\\n  ];\\n  const KEYWORDS$1 = {\\n    keyword: KEYWORDS.concat(LIVESCRIPT_KEYWORDS),\\n    literal: LITERALS.concat(LIVESCRIPT_LITERALS),\\n    built_in: BUILT_INS.concat(LIVESCRIPT_BUILT_INS)\\n  };\\n  const JS_IDENT_RE = '[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*';\\n  const TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE });\\n  const SUBST = {\\n    className: 'subst',\\n    begin: /#\\\\{/,\\n    end: /\\\\}/,\\n    keywords: KEYWORDS$1\\n  };\\n  const SUBST_SIMPLE = {\\n    className: 'subst',\\n    begin: /#[A-Za-z$_]/,\\n    end: /(?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,\\n    keywords: KEYWORDS$1\\n  };\\n  const EXPRESSIONS = [\\n    hljs.BINARY_NUMBER_MODE,\\n    {\\n      className: 'number',\\n      begin: '(\\\\\\\\b0[xX][a-fA-F0-9_]+)|(\\\\\\\\b\\\\\\\\d(\\\\\\\\d|_\\\\\\\\d)*(\\\\\\\\.(\\\\\\\\d(\\\\\\\\d|_\\\\\\\\d)*)?)?(_*[eE]([-+]\\\\\\\\d(_\\\\\\\\d|\\\\\\\\d)*)?)?[_a-z]*)',\\n      relevance: 0,\\n      starts: {\\n        end: '(\\\\\\\\s*/)?',\\n        relevance: 0\\n      } // a number tries to eat the following slash to prevent treating it as a regexp\\n    },\\n    {\\n      className: 'string',\\n      variants: [\\n        {\\n          begin: /'''/,\\n          end: /'''/,\\n          contains: [ hljs.BACKSLASH_ESCAPE ]\\n        },\\n        {\\n          begin: /'/,\\n          end: /'/,\\n          contains: [ hljs.BACKSLASH_ESCAPE ]\\n        },\\n        {\\n          begin: /\\\"\\\"\\\"/,\\n          end: /\\\"\\\"\\\"/,\\n          contains: [\\n            hljs.BACKSLASH_ESCAPE,\\n            SUBST,\\n            SUBST_SIMPLE\\n          ]\\n        },\\n        {\\n          begin: /\\\"/,\\n          end: /\\\"/,\\n          contains: [\\n            hljs.BACKSLASH_ESCAPE,\\n            SUBST,\\n            SUBST_SIMPLE\\n          ]\\n        },\\n        {\\n          begin: /\\\\\\\\/,\\n          end: /(\\\\s|$)/,\\n          excludeEnd: true\\n        }\\n      ]\\n    },\\n    {\\n      className: 'regexp',\\n      variants: [\\n        {\\n          begin: '//',\\n          end: '//[gim]*',\\n          contains: [\\n            SUBST,\\n            hljs.HASH_COMMENT_MODE\\n          ]\\n        },\\n        {\\n          // regex can't start with space to parse x / 2 / 3 as two divisions\\n          // regex can't start with *, and it supports an \\\"illegal\\\" in the main mode\\n          begin: /\\\\/(?![ *])(\\\\\\\\.|[^\\\\\\\\\\\\n])*?\\\\/[gim]*(?=\\\\W)/ }\\n      ]\\n    },\\n    { begin: '@' + JS_IDENT_RE },\\n    {\\n      begin: '``',\\n      end: '``',\\n      excludeBegin: true,\\n      excludeEnd: true,\\n      subLanguage: 'javascript'\\n    }\\n  ];\\n  SUBST.contains = EXPRESSIONS;\\n\\n  const PARAMS = {\\n    className: 'params',\\n    begin: '\\\\\\\\(',\\n    returnBegin: true,\\n    /* We need another contained nameless mode to not have every nested\\n    pair of parens to be called \\\"params\\\" */\\n    contains: [\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        keywords: KEYWORDS$1,\\n        contains: [ 'self' ].concat(EXPRESSIONS)\\n      }\\n    ]\\n  };\\n\\n  const SYMBOLS = { begin: '(#=>|=>|\\\\\\\\|>>|-?->|!->)' };\\n\\n  const CLASS_DEFINITION = {\\n    variants: [\\n      { match: [\\n        /class\\\\s+/,\\n        JS_IDENT_RE,\\n        /\\\\s+extends\\\\s+/,\\n        JS_IDENT_RE\\n      ] },\\n      { match: [\\n        /class\\\\s+/,\\n        JS_IDENT_RE\\n      ] }\\n    ],\\n    scope: {\\n      2: \\\"title.class\\\",\\n      4: \\\"title.class.inherited\\\"\\n    },\\n    keywords: KEYWORDS$1\\n  };\\n\\n  return {\\n    name: 'LiveScript',\\n    aliases: [ 'ls' ],\\n    keywords: KEYWORDS$1,\\n    illegal: /\\\\/\\\\*/,\\n    contains: EXPRESSIONS.concat([\\n      hljs.COMMENT('\\\\\\\\/\\\\\\\\*', '\\\\\\\\*\\\\\\\\/'),\\n      hljs.HASH_COMMENT_MODE,\\n      SYMBOLS, // relevance booster\\n      {\\n        className: 'function',\\n        contains: [\\n          TITLE,\\n          PARAMS\\n        ],\\n        returnBegin: true,\\n        variants: [\\n          {\\n            begin: '(' + JS_IDENT_RE + '\\\\\\\\s*(?:=|:=)\\\\\\\\s*)?(\\\\\\\\(.*\\\\\\\\)\\\\\\\\s*)?\\\\\\\\B->\\\\\\\\*?',\\n            end: '->\\\\\\\\*?'\\n          },\\n          {\\n            begin: '(' + JS_IDENT_RE + '\\\\\\\\s*(?:=|:=)\\\\\\\\s*)?!?(\\\\\\\\(.*\\\\\\\\)\\\\\\\\s*)?\\\\\\\\B[-~]{1,2}>\\\\\\\\*?',\\n            end: '[-~]{1,2}>\\\\\\\\*?'\\n          },\\n          {\\n            begin: '(' + JS_IDENT_RE + '\\\\\\\\s*(?:=|:=)\\\\\\\\s*)?(\\\\\\\\(.*\\\\\\\\)\\\\\\\\s*)?\\\\\\\\B!?[-~]{1,2}>\\\\\\\\*?',\\n            end: '!?[-~]{1,2}>\\\\\\\\*?'\\n          }\\n        ]\\n      },\\n      CLASS_DEFINITION,\\n      {\\n        begin: JS_IDENT_RE + ':',\\n        end: ':',\\n        returnBegin: true,\\n        returnEnd: true,\\n        relevance: 0\\n      }\\n    ])\\n  };\\n}\\n\\nmodule.exports = livescript;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/livescript.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/llvm.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/llvm.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: LLVM IR\\nAuthor: Michael Rodler <contact@f0rki.at>\\nDescription: language used as intermediate representation in the LLVM compiler framework\\nWebsite: https://llvm.org/docs/LangRef.html\\nCategory: assembler\\nAudit: 2020\\n*/\\n\\n/** @type LanguageFn */\\nfunction llvm(hljs) {\\n  const regex = hljs.regex;\\n  const IDENT_RE = /([-a-zA-Z$._][\\\\w$.-]*)/;\\n  const TYPE = {\\n    className: 'type',\\n    begin: /\\\\bi\\\\d+(?=\\\\s|\\\\b)/\\n  };\\n  const OPERATOR = {\\n    className: 'operator',\\n    relevance: 0,\\n    begin: /=/\\n  };\\n  const PUNCTUATION = {\\n    className: 'punctuation',\\n    relevance: 0,\\n    begin: /,/\\n  };\\n  const NUMBER = {\\n    className: 'number',\\n    variants: [\\n      { begin: /[su]?0[xX][KMLHR]?[a-fA-F0-9]+/ },\\n      { begin: /[-+]?\\\\d+(?:[.]\\\\d+)?(?:[eE][-+]?\\\\d+(?:[.]\\\\d+)?)?/ }\\n    ],\\n    relevance: 0\\n  };\\n  const LABEL = {\\n    className: 'symbol',\\n    variants: [ { begin: /^\\\\s*[a-z]+:/ }, // labels\\n    ],\\n    relevance: 0\\n  };\\n  const VARIABLE = {\\n    className: 'variable',\\n    variants: [\\n      { begin: regex.concat(/%/, IDENT_RE) },\\n      { begin: /%\\\\d+/ },\\n      { begin: /#\\\\d+/ },\\n    ]\\n  };\\n  const FUNCTION = {\\n    className: 'title',\\n    variants: [\\n      { begin: regex.concat(/@/, IDENT_RE) },\\n      { begin: /@\\\\d+/ },\\n      { begin: regex.concat(/!/, IDENT_RE) },\\n      { begin: regex.concat(/!\\\\d+/, IDENT_RE) },\\n      // https://llvm.org/docs/LangRef.html#namedmetadatastructure\\n      // obviously a single digit can also be used in this fashion\\n      { begin: /!\\\\d+/ }\\n    ]\\n  };\\n\\n  return {\\n    name: 'LLVM IR',\\n    // TODO: split into different categories of keywords\\n    keywords:\\n      'begin end true false declare define global '\\n      + 'constant private linker_private internal '\\n      + 'available_externally linkonce linkonce_odr weak '\\n      + 'weak_odr appending dllimport dllexport common '\\n      + 'default hidden protected extern_weak external '\\n      + 'thread_local zeroinitializer undef null to tail '\\n      + 'target triple datalayout volatile nuw nsw nnan '\\n      + 'ninf nsz arcp fast exact inbounds align '\\n      + 'addrspace section alias module asm sideeffect '\\n      + 'gc dbg linker_private_weak attributes blockaddress '\\n      + 'initialexec localdynamic localexec prefix unnamed_addr '\\n      + 'ccc fastcc coldcc x86_stdcallcc x86_fastcallcc '\\n      + 'arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device '\\n      + 'ptx_kernel intel_ocl_bicc msp430_intrcc spir_func '\\n      + 'spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc '\\n      + 'cc c signext zeroext inreg sret nounwind '\\n      + 'noreturn noalias nocapture byval nest readnone '\\n      + 'readonly inlinehint noinline alwaysinline optsize ssp '\\n      + 'sspreq noredzone noimplicitfloat naked builtin cold '\\n      + 'nobuiltin noduplicate nonlazybind optnone returns_twice '\\n      + 'sanitize_address sanitize_memory sanitize_thread sspstrong '\\n      + 'uwtable returned type opaque eq ne slt sgt '\\n      + 'sle sge ult ugt ule uge oeq one olt ogt '\\n      + 'ole oge ord uno ueq une x acq_rel acquire '\\n      + 'alignstack atomic catch cleanup filter inteldialect '\\n      + 'max min monotonic nand personality release seq_cst '\\n      + 'singlethread umax umin unordered xchg add fadd '\\n      + 'sub fsub mul fmul udiv sdiv fdiv urem srem '\\n      + 'frem shl lshr ashr and or xor icmp fcmp '\\n      + 'phi call trunc zext sext fptrunc fpext uitofp '\\n      + 'sitofp fptoui fptosi inttoptr ptrtoint bitcast '\\n      + 'addrspacecast select va_arg ret br switch invoke '\\n      + 'unwind unreachable indirectbr landingpad resume '\\n      + 'malloc alloca free load store getelementptr '\\n      + 'extractelement insertelement shufflevector getresult '\\n      + 'extractvalue insertvalue atomicrmw cmpxchg fence '\\n      + 'argmemonly double',\\n    contains: [\\n      TYPE,\\n      // this matches \\\"empty comments\\\"...\\n      // ...because it's far more likely this is a statement terminator in\\n      // another language than an actual comment\\n      hljs.COMMENT(/;\\\\s*$/, null, { relevance: 0 }),\\n      hljs.COMMENT(/;/, /$/),\\n      {\\n        className: 'string',\\n        begin: /\\\"/,\\n        end: /\\\"/,\\n        contains: [\\n          {\\n            className: 'char.escape',\\n            match: /\\\\\\\\\\\\d\\\\d/\\n          }\\n        ]\\n      },\\n      FUNCTION,\\n      PUNCTUATION,\\n      OPERATOR,\\n      VARIABLE,\\n      LABEL,\\n      NUMBER\\n    ]\\n  };\\n}\\n\\nmodule.exports = llvm;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/llvm.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/lsl.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/lsl.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: LSL (Linden Scripting Language)\\nDescription: The Linden Scripting Language is used in Second Life by Linden Labs.\\nAuthor: Builder's Brewery <buildersbrewery@gmail.com>\\nWebsite: http://wiki.secondlife.com/wiki/LSL_Portal\\nCategory: scripting\\n*/\\n\\nfunction lsl(hljs) {\\n  const LSL_STRING_ESCAPE_CHARS = {\\n    className: 'subst',\\n    begin: /\\\\\\\\[tn\\\"\\\\\\\\]/\\n  };\\n\\n  const LSL_STRINGS = {\\n    className: 'string',\\n    begin: '\\\"',\\n    end: '\\\"',\\n    contains: [ LSL_STRING_ESCAPE_CHARS ]\\n  };\\n\\n  const LSL_NUMBERS = {\\n    className: 'number',\\n    relevance: 0,\\n    begin: hljs.C_NUMBER_RE\\n  };\\n\\n  const LSL_CONSTANTS = {\\n    className: 'literal',\\n    variants: [\\n      { begin: '\\\\\\\\b(PI|TWO_PI|PI_BY_TWO|DEG_TO_RAD|RAD_TO_DEG|SQRT2)\\\\\\\\b' },\\n      { begin: '\\\\\\\\b(XP_ERROR_(EXPERIENCES_DISABLED|EXPERIENCE_(DISABLED|SUSPENDED)|INVALID_(EXPERIENCE|PARAMETERS)|KEY_NOT_FOUND|MATURITY_EXCEEDED|NONE|NOT_(FOUND|PERMITTED(_LAND)?)|NO_EXPERIENCE|QUOTA_EXCEEDED|RETRY_UPDATE|STORAGE_EXCEPTION|STORE_DISABLED|THROTTLED|UNKNOWN_ERROR)|JSON_APPEND|STATUS_(PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(_OBJECT)?|(DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(FOUND|SUPPORTED)|INTERNAL_ERROR|WHITELIST_FAILED)|AGENT(_(BY_(LEGACY_|USER)NAME|FLYING|ATTACHMENTS|SCRIPTED|MOUSELOOK|SITTING|ON_OBJECT|AWAY|WALKING|IN_AIR|TYPING|CROUCHING|BUSY|ALWAYS_RUN|AUTOPILOT|LIST_(PARCEL(_OWNER)?|REGION)))?|CAMERA_(PITCH|DISTANCE|BEHINDNESS_(ANGLE|LAG)|(FOCUS|POSITION)(_(THRESHOLD|LOCKED|LAG))?|FOCUS_OFFSET|ACTIVE)|ANIM_ON|LOOP|REVERSE|PING_PONG|SMOOTH|ROTATE|SCALE|ALL_SIDES|LINK_(ROOT|SET|ALL_(OTHERS|CHILDREN)|THIS)|ACTIVE|PASS(IVE|_(ALWAYS|IF_NOT_HANDLED|NEVER))|SCRIPTED|CONTROL_(FWD|BACK|(ROT_)?(LEFT|RIGHT)|UP|DOWN|(ML_)?LBUTTON)|PERMISSION_(RETURN_OBJECTS|DEBIT|OVERRIDE_ANIMATIONS|SILENT_ESTATE_MANAGEMENT|TAKE_CONTROLS|TRIGGER_ANIMATION|ATTACH|CHANGE_LINKS|(CONTROL|TRACK)_CAMERA|TELEPORT)|INVENTORY_(TEXTURE|SOUND|OBJECT|SCRIPT|LANDMARK|CLOTHING|NOTECARD|BODYPART|ANIMATION|GESTURE|ALL|NONE)|CHANGED_(INVENTORY|COLOR|SHAPE|SCALE|TEXTURE|LINK|ALLOWED_DROP|OWNER|REGION(_START)?|TELEPORT|MEDIA)|OBJECT_(CLICK_ACTION|HOVER_HEIGHT|LAST_OWNER_ID|(PHYSICS|SERVER|STREAMING)_COST|UNKNOWN_DETAIL|CHARACTER_TIME|PHANTOM|PHYSICS|TEMP_(ATTACHED|ON_REZ)|NAME|DESC|POS|PRIM_(COUNT|EQUIVALENCE)|RETURN_(PARCEL(_OWNER)?|REGION)|REZZER_KEY|ROO?T|VELOCITY|OMEGA|OWNER|GROUP(_TAG)?|CREATOR|ATTACHED_(POINT|SLOTS_AVAILABLE)|RENDER_WEIGHT|(BODY_SHAPE|PATHFINDING)_TYPE|(RUNNING|TOTAL)_SCRIPT_COUNT|TOTAL_INVENTORY_COUNT|SCRIPT_(MEMORY|TIME))|TYPE_(INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|(DEBUG|PUBLIC)_CHANNEL|ATTACH_(AVATAR_CENTER|CHEST|HEAD|BACK|PELVIS|MOUTH|CHIN|NECK|NOSE|BELLY|[LR](SHOULDER|HAND|FOOT|EAR|EYE|[UL](ARM|LEG)|HIP)|(LEFT|RIGHT)_PEC|HUD_(CENTER_[12]|TOP_(RIGHT|CENTER|LEFT)|BOTTOM(_(RIGHT|LEFT))?)|[LR]HAND_RING1|TAIL_(BASE|TIP)|[LR]WING|FACE_(JAW|[LR]EAR|[LR]EYE|TOUNGE)|GROIN|HIND_[LR]FOOT)|LAND_(LEVEL|RAISE|LOWER|SMOOTH|NOISE|REVERT)|DATA_(ONLINE|NAME|BORN|SIM_(POS|STATUS|RATING)|PAYINFO)|PAYMENT_INFO_(ON_FILE|USED)|REMOTE_DATA_(CHANNEL|REQUEST|REPLY)|PSYS_(PART_(BF_(ZERO|ONE(_MINUS_(DEST_COLOR|SOURCE_(ALPHA|COLOR)))?|DEST_COLOR|SOURCE_(ALPHA|COLOR))|BLEND_FUNC_(DEST|SOURCE)|FLAGS|(START|END)_(COLOR|ALPHA|SCALE|GLOW)|MAX_AGE|(RIBBON|WIND|INTERP_(COLOR|SCALE)|BOUNCE|FOLLOW_(SRC|VELOCITY)|TARGET_(POS|LINEAR)|EMISSIVE)_MASK)|SRC_(MAX_AGE|PATTERN|ANGLE_(BEGIN|END)|BURST_(RATE|PART_COUNT|RADIUS|SPEED_(MIN|MAX))|ACCEL|TEXTURE|TARGET_KEY|OMEGA|PATTERN_(DROP|EXPLODE|ANGLE(_CONE(_EMPTY)?)?)))|VEHICLE_(REFERENCE_FRAME|TYPE_(NONE|SLED|CAR|BOAT|AIRPLANE|BALLOON)|(LINEAR|ANGULAR)_(FRICTION_TIMESCALE|MOTOR_DIRECTION)|LINEAR_MOTOR_OFFSET|HOVER_(HEIGHT|EFFICIENCY|TIMESCALE)|BUOYANCY|(LINEAR|ANGULAR)_(DEFLECTION_(EFFICIENCY|TIMESCALE)|MOTOR_(DECAY_)?TIMESCALE)|VERTICAL_ATTRACTION_(EFFICIENCY|TIMESCALE)|BANKING_(EFFICIENCY|MIX|TIMESCALE)|FLAG_(NO_DEFLECTION_UP|LIMIT_(ROLL_ONLY|MOTOR_UP)|HOVER_((WATER|TERRAIN|UP)_ONLY|GLOBAL_HEIGHT)|MOUSELOOK_(STEER|BANK)|CAMERA_DECOUPLED))|PRIM_(ALLOW_UNSIT|ALPHA_MODE(_(BLEND|EMISSIVE|MASK|NONE))?|NORMAL|SPECULAR|TYPE(_(BOX|CYLINDER|PRISM|SPHERE|TORUS|TUBE|RING|SCULPT))?|HOLE_(DEFAULT|CIRCLE|SQUARE|TRIANGLE)|MATERIAL(_(STONE|METAL|GLASS|WOOD|FLESH|PLASTIC|RUBBER))?|SHINY_(NONE|LOW|MEDIUM|HIGH)|BUMP_(NONE|BRIGHT|DARK|WOOD|BARK|BRICKS|CHECKER|CONCRETE|TILE|STONE|DISKS|GRAVEL|BLOBS|SIDING|LARGETILE|STUCCO|SUCTION|WEAVE)|TEXGEN_(DEFAULT|PLANAR)|SCRIPTED_SIT_ONLY|SCULPT_(TYPE_(SPHERE|TORUS|PLANE|CYLINDER|MASK)|FLAG_(MIRROR|INVERT))|PHYSICS(_(SHAPE_(CONVEX|NONE|PRIM|TYPE)))?|(POS|ROT)_LOCAL|SLICE|TEXT|FLEXIBLE|POINT_LIGHT|TEMP_ON_REZ|PHANTOM|POSITION|SIT_TARGET|SIZE|ROTATION|TEXTURE|NAME|OMEGA|DESC|LINK_TARGET|COLOR|BUMP_SHINY|FULLBRIGHT|TEXGEN|GLOW|MEDIA_(ALT_IMAGE_ENABLE|CONTROLS|(CURRENT|HOME)_URL|AUTO_(LOOP|PLAY|SCALE|ZOOM)|FIRST_CLICK_INTERACT|(WIDTH|HEIGHT)_PIXELS|WHITELIST(_ENABLE)?|PERMS_(INTERACT|CONTROL)|PARAM_MAX|CONTROLS_(STANDARD|MINI)|PERM_(NONE|OWNER|GROUP|ANYONE)|MAX_(URL_LENGTH|WHITELIST_(SIZE|COUNT)|(WIDTH|HEIGHT)_PIXELS)))|MASK_(BASE|OWNER|GROUP|EVERYONE|NEXT)|PERM_(TRANSFER|MODIFY|COPY|MOVE|ALL)|PARCEL_(MEDIA_COMMAND_(STOP|PAUSE|PLAY|LOOP|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC|LOOP_SET)|FLAG_(ALLOW_(FLY|(GROUP_)?SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|CREATE_(GROUP_)?OBJECTS)|USE_(ACCESS_(GROUP|LIST)|BAN_LIST|LAND_PASS_LIST)|LOCAL_SOUND_ONLY|RESTRICT_PUSHOBJECT|ALLOW_(GROUP|ALL)_OBJECT_ENTRY)|COUNT_(TOTAL|OWNER|GROUP|OTHER|SELECTED|TEMP)|DETAILS_(NAME|DESC|OWNER|GROUP|AREA|ID|SEE_AVATARS))|LIST_STAT_(MAX|MIN|MEAN|MEDIAN|STD_DEV|SUM(_SQUARES)?|NUM_COUNT|GEOMETRIC_MEAN|RANGE)|PAY_(HIDE|DEFAULT)|REGION_FLAG_(ALLOW_DAMAGE|FIXED_SUN|BLOCK_TERRAFORM|SANDBOX|DISABLE_(COLLISIONS|PHYSICS)|BLOCK_FLY|ALLOW_DIRECT_TELEPORT|RESTRICT_PUSHOBJECT)|HTTP_(METHOD|MIMETYPE|BODY_(MAXLENGTH|TRUNCATED)|CUSTOM_HEADER|PRAGMA_NO_CACHE|VERBOSE_THROTTLE|VERIFY_CERT)|SIT_(INVALID_(AGENT|LINK_OBJECT)|NO(T_EXPERIENCE|_(ACCESS|EXPERIENCE_PERMISSION|SIT_TARGET)))|STRING_(TRIM(_(HEAD|TAIL))?)|CLICK_ACTION_(NONE|TOUCH|SIT|BUY|PAY|OPEN(_MEDIA)?|PLAY|ZOOM)|TOUCH_INVALID_FACE|PROFILE_(NONE|SCRIPT_MEMORY)|RC_(DATA_FLAGS|DETECT_PHANTOM|GET_(LINK_NUM|NORMAL|ROOT_KEY)|MAX_HITS|REJECT_(TYPES|AGENTS|(NON)?PHYSICAL|LAND))|RCERR_(CAST_TIME_EXCEEDED|SIM_PERF_LOW|UNKNOWN)|ESTATE_ACCESS_(ALLOWED_(AGENT|GROUP)_(ADD|REMOVE)|BANNED_AGENT_(ADD|REMOVE))|DENSITY|FRICTION|RESTITUTION|GRAVITY_MULTIPLIER|KFM_(COMMAND|CMD_(PLAY|STOP|PAUSE)|MODE|FORWARD|LOOP|PING_PONG|REVERSE|DATA|ROTATION|TRANSLATION)|ERR_(GENERIC|PARCEL_PERMISSIONS|MALFORMED_PARAMS|RUNTIME_PERMISSIONS|THROTTLED)|CHARACTER_(CMD_((SMOOTH_)?STOP|JUMP)|DESIRED_(TURN_)?SPEED|RADIUS|STAY_WITHIN_PARCEL|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(_([ABCD]|NONE))?|MAX_(DECEL|TURN_RADIUS|(ACCEL|SPEED)))|PURSUIT_(OFFSET|FUZZ_FACTOR|GOAL_TOLERANCE|INTERCEPT)|REQUIRE_LINE_OF_SIGHT|FORCE_DIRECT_PATH|VERTICAL|HORIZONTAL|AVOID_(CHARACTERS|DYNAMIC_OBSTACLES|NONE)|PU_(EVADE_(HIDDEN|SPOTTED)|FAILURE_(DYNAMIC_PATHFINDING_DISABLED|INVALID_(GOAL|START)|NO_(NAVMESH|VALID_DESTINATION)|OTHER|TARGET_GONE|(PARCEL_)?UNREACHABLE)|(GOAL|SLOWDOWN_DISTANCE)_REACHED)|TRAVERSAL_TYPE(_(FAST|NONE|SLOW))?|CONTENT_TYPE_(ATOM|FORM|HTML|JSON|LLSD|RSS|TEXT|XHTML|XML)|GCNP_(RADIUS|STATIC)|(PATROL|WANDER)_PAUSE_AT_WAYPOINTS|OPT_(AVATAR|CHARACTER|EXCLUSION_VOLUME|LEGACY_LINKSET|MATERIAL_VOLUME|OTHER|STATIC_OBSTACLE|WALKABLE)|SIM_STAT_PCT_CHARS_STEPPED)\\\\\\\\b' },\\n      { begin: '\\\\\\\\b(FALSE|TRUE)\\\\\\\\b' },\\n      { begin: '\\\\\\\\b(ZERO_ROTATION)\\\\\\\\b' },\\n      { begin: '\\\\\\\\b(EOF|JSON_(ARRAY|DELETE|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)|NULL_KEY|TEXTURE_(BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|URL_REQUEST_(GRANTED|DENIED))\\\\\\\\b' },\\n      { begin: '\\\\\\\\b(ZERO_VECTOR|TOUCH_INVALID_(TEXCOORD|VECTOR))\\\\\\\\b' }\\n    ]\\n  };\\n\\n  const LSL_FUNCTIONS = {\\n    className: 'built_in',\\n    begin: '\\\\\\\\b(ll(AgentInExperience|(Create|DataSize|Delete|KeyCount|Keys|Read|Update)KeyValue|GetExperience(Details|ErrorMessage)|ReturnObjectsBy(ID|Owner)|Json(2List|[GS]etValue|ValueType)|Sin|Cos|Tan|Atan2|Sqrt|Pow|Abs|Fabs|Frand|Floor|Ceil|Round|Vec(Mag|Norm|Dist)|Rot(Between|2(Euler|Fwd|Left|Up))|(Euler|Axes)2Rot|Whisper|(Region|Owner)?Say|Shout|Listen(Control|Remove)?|Sensor(Repeat|Remove)?|Detected(Name|Key|Owner|Type|Pos|Vel|Grab|Rot|Group|LinkNumber)|Die|Ground|Wind|([GS]et)(AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(Desc|Name)|PhysicsMaterial|Status|Scale|Color|Alpha|Texture|Pos|Rot|Force|Torque)|ResetAnimationOverride|(Scale|Offset|Rotate)Texture|(Rot)?Target(Remove)?|(Stop)?MoveToTarget|Apply(Rotational)?Impulse|Set(KeyframedMotion|ContentType|RegionPos|(Angular)?Velocity|Buoyancy|HoverHeight|ForceAndTorque|TimerEvent|ScriptState|Damage|TextureAnim|Sound(Queueing|Radius)|Vehicle(Type|(Float|Vector|Rotation)Param)|(Touch|Sit)?Text|Camera(Eye|At)Offset|PrimitiveParams|ClickAction|Link(Alpha|Color|PrimitiveParams(Fast)?|Texture(Anim)?|Camera|Media)|RemoteScriptAccessPin|PayPrice|LocalRot)|ScaleByFactor|Get((Max|Min)ScaleFactor|ClosestNavPoint|StaticPath|SimStats|Env|PrimitiveParams|Link(PrimitiveParams|Number(OfSides)?|Key|Name|Media)|HTTPHeader|FreeURLs|Object(Details|PermMask|PrimCount)|Parcel(MaxPrims|Details|Prim(Count|Owners))|Attached(List)?|(SPMax|Free|Used)Memory|Region(Name|TimeDilation|FPS|Corner|AgentCount)|Root(Position|Rotation)|UnixTime|(Parcel|Region)Flags|(Wall|GMT)clock|SimulatorHostname|BoundingBox|GeometricCenter|Creator|NumberOf(Prims|NotecardLines|Sides)|Animation(List)?|(Camera|Local)(Pos|Rot)|Vel|Accel|Omega|Time(stamp|OfDay)|(Object|CenterOf)?Mass|MassMKS|Energy|Owner|(Owner)?Key|SunDirection|Texture(Offset|Scale|Rot)|Inventory(Number|Name|Key|Type|Creator|PermMask)|Permissions(Key)?|StartParameter|List(Length|EntryType)|Date|Agent(Size|Info|Language|List)|LandOwnerAt|NotecardLine|Script(Name|State))|(Get|Reset|GetAndReset)Time|PlaySound(Slave)?|LoopSound(Master|Slave)?|(Trigger|Stop|Preload)Sound|((Get|Delete)Sub|Insert)String|To(Upper|Lower)|Give(InventoryList|Money)|RezObject|(Stop)?LookAt|Sleep|CollisionFilter|(Take|Release)Controls|DetachFromAvatar|AttachToAvatar(Temp)?|InstantMessage|(GetNext)?Email|StopHover|MinEventDelay|RotLookAt|String(Length|Trim)|(Start|Stop)Animation|TargetOmega|Request(Experience)?Permissions|(Create|Break)Link|BreakAllLinks|(Give|Remove)Inventory|Water|PassTouches|Request(Agent|Inventory)Data|TeleportAgent(Home|GlobalCoords)?|ModifyLand|CollisionSound|ResetScript|MessageLinked|PushObject|PassCollisions|AxisAngle2Rot|Rot2(Axis|Angle)|A(cos|sin)|AngleBetween|AllowInventoryDrop|SubStringIndex|List2(CSV|Integer|Json|Float|String|Key|Vector|Rot|List(Strided)?)|DeleteSubList|List(Statistics|Sort|Randomize|(Insert|Find|Replace)List)|EdgeOfWorld|AdjustSoundVolume|Key2Name|TriggerSoundLimited|EjectFromLand|(CSV|ParseString)2List|OverMyLand|SameGroup|UnSit|Ground(Slope|Normal|Contour)|GroundRepel|(Set|Remove)VehicleFlags|SitOnLink|(AvatarOn)?(Link)?SitTarget|Script(Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(Integer|String)ToBase64|XorBase64|Log(10)?|Base64To(String|Integer)|ParseStringKeepNulls|RezAtRoot|RequestSimulatorData|ForceMouselook|(Load|Release|(E|Une)scape)URL|ParcelMedia(CommandList|Query)|ModPow|MapDestination|(RemoveFrom|AddTo|Reset)Land(Pass|Ban)List|(Set|Clear)CameraParams|HTTP(Request|Response)|TextBox|DetectedTouch(UV|Face|Pos|(N|Bin)ormal|ST)|(MD5|SHA1|DumpList2)String|Request(Secure)?URL|Clear(Prim|Link)Media|(Link)?ParticleSystem|(Get|Request)(Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin))\\\\\\\\b'\\n  };\\n\\n  return {\\n    name: 'LSL (Linden Scripting Language)',\\n    illegal: ':',\\n    contains: [\\n      LSL_STRINGS,\\n      {\\n        className: 'comment',\\n        variants: [\\n          hljs.COMMENT('//', '$'),\\n          hljs.COMMENT('/\\\\\\\\*', '\\\\\\\\*/')\\n        ],\\n        relevance: 0\\n      },\\n      LSL_NUMBERS,\\n      {\\n        className: 'section',\\n        variants: [\\n          { begin: '\\\\\\\\b(state|default)\\\\\\\\b' },\\n          { begin: '\\\\\\\\b(state_(entry|exit)|touch(_(start|end))?|(land_)?collision(_(start|end))?|timer|listen|(no_)?sensor|control|(not_)?at_(rot_)?target|money|email|experience_permissions(_denied)?|run_time_permissions|changed|attach|dataserver|moving_(start|end)|link_message|(on|object)_rez|remote_data|http_re(sponse|quest)|path_update|transaction_result)\\\\\\\\b' }\\n        ]\\n      },\\n      LSL_FUNCTIONS,\\n      LSL_CONSTANTS,\\n      {\\n        className: 'type',\\n        begin: '\\\\\\\\b(integer|float|string|key|vector|quaternion|rotation|list)\\\\\\\\b'\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = lsl;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/lsl.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/lua.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/lua.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Lua\\nDescription: Lua is a powerful, efficient, lightweight, embeddable scripting language.\\nAuthor: Andrew Fedorov <dmmdrs@mail.ru>\\nCategory: common, scripting\\nWebsite: https://www.lua.org\\n*/\\n\\nfunction lua(hljs) {\\n  const OPENING_LONG_BRACKET = '\\\\\\\\[=*\\\\\\\\[';\\n  const CLOSING_LONG_BRACKET = '\\\\\\\\]=*\\\\\\\\]';\\n  const LONG_BRACKETS = {\\n    begin: OPENING_LONG_BRACKET,\\n    end: CLOSING_LONG_BRACKET,\\n    contains: [ 'self' ]\\n  };\\n  const COMMENTS = [\\n    hljs.COMMENT('--(?!' + OPENING_LONG_BRACKET + ')', '$'),\\n    hljs.COMMENT(\\n      '--' + OPENING_LONG_BRACKET,\\n      CLOSING_LONG_BRACKET,\\n      {\\n        contains: [ LONG_BRACKETS ],\\n        relevance: 10\\n      }\\n    )\\n  ];\\n  return {\\n    name: 'Lua',\\n    keywords: {\\n      $pattern: hljs.UNDERSCORE_IDENT_RE,\\n      literal: \\\"true false nil\\\",\\n      keyword: \\\"and break do else elseif end for goto if in local not or repeat return then until while\\\",\\n      built_in:\\n        // Metatags and globals:\\n        '_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len '\\n        + '__gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert '\\n        // Standard methods and properties:\\n        + 'collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring '\\n        + 'module next pairs pcall print rawequal rawget rawset require select setfenv '\\n        + 'setmetatable tonumber tostring type unpack xpcall arg self '\\n        // Library methods and properties (one line per library):\\n        + 'coroutine resume yield status wrap create running debug getupvalue '\\n        + 'debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv '\\n        + 'io lines write close flush open output type read stderr stdin input stdout popen tmpfile '\\n        + 'math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan '\\n        + 'os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall '\\n        + 'string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower '\\n        + 'table setn insert getn foreachi maxn foreach concat sort remove'\\n    },\\n    contains: COMMENTS.concat([\\n      {\\n        className: 'function',\\n        beginKeywords: 'function',\\n        end: '\\\\\\\\)',\\n        contains: [\\n          hljs.inherit(hljs.TITLE_MODE, { begin: '([_a-zA-Z]\\\\\\\\w*\\\\\\\\.)*([_a-zA-Z]\\\\\\\\w*:)?[_a-zA-Z]\\\\\\\\w*' }),\\n          {\\n            className: 'params',\\n            begin: '\\\\\\\\(',\\n            endsWithParent: true,\\n            contains: COMMENTS\\n          }\\n        ].concat(COMMENTS)\\n      },\\n      hljs.C_NUMBER_MODE,\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'string',\\n        begin: OPENING_LONG_BRACKET,\\n        end: CLOSING_LONG_BRACKET,\\n        contains: [ LONG_BRACKETS ],\\n        relevance: 5\\n      }\\n    ])\\n  };\\n}\\n\\nmodule.exports = lua;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/lua.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/makefile.js\":\n/*!*************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/makefile.js ***!\n  \\*************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Makefile\\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\\nContributors: Joël Porquet <joel@porquet.org>\\nWebsite: https://www.gnu.org/software/make/manual/html_node/Introduction.html\\nCategory: common\\n*/\\n\\nfunction makefile(hljs) {\\n  /* Variables: simple (eg $(var)) and special (eg $@) */\\n  const VARIABLE = {\\n    className: 'variable',\\n    variants: [\\n      {\\n        begin: '\\\\\\\\$\\\\\\\\(' + hljs.UNDERSCORE_IDENT_RE + '\\\\\\\\)',\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      },\\n      { begin: /\\\\$[@%<?\\\\^\\\\+\\\\*]/ }\\n    ]\\n  };\\n  /* Quoted string with variables inside */\\n  const QUOTE_STRING = {\\n    className: 'string',\\n    begin: /\\\"/,\\n    end: /\\\"/,\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      VARIABLE\\n    ]\\n  };\\n  /* Function: $(func arg,...) */\\n  const FUNC = {\\n    className: 'variable',\\n    begin: /\\\\$\\\\([\\\\w-]+\\\\s/,\\n    end: /\\\\)/,\\n    keywords: { built_in:\\n        'subst patsubst strip findstring filter filter-out sort '\\n        + 'word wordlist firstword lastword dir notdir suffix basename '\\n        + 'addsuffix addprefix join wildcard realpath abspath error warning '\\n        + 'shell origin flavor foreach if or and call eval file value' },\\n    contains: [ VARIABLE ]\\n  };\\n  /* Variable assignment */\\n  const ASSIGNMENT = { begin: '^' + hljs.UNDERSCORE_IDENT_RE + '\\\\\\\\s*(?=[:+?]?=)' };\\n  /* Meta targets (.PHONY) */\\n  const META = {\\n    className: 'meta',\\n    begin: /^\\\\.PHONY:/,\\n    end: /$/,\\n    keywords: {\\n      $pattern: /[\\\\.\\\\w]+/,\\n      keyword: '.PHONY'\\n    }\\n  };\\n  /* Targets */\\n  const TARGET = {\\n    className: 'section',\\n    begin: /^[^\\\\s]+:/,\\n    end: /$/,\\n    contains: [ VARIABLE ]\\n  };\\n  return {\\n    name: 'Makefile',\\n    aliases: [\\n      'mk',\\n      'mak',\\n      'make',\\n    ],\\n    keywords: {\\n      $pattern: /[\\\\w-]+/,\\n      keyword: 'define endef undefine ifdef ifndef ifeq ifneq else endif '\\n      + 'include -include sinclude override export unexport private vpath'\\n    },\\n    contains: [\\n      hljs.HASH_COMMENT_MODE,\\n      VARIABLE,\\n      QUOTE_STRING,\\n      FUNC,\\n      ASSIGNMENT,\\n      META,\\n      TARGET\\n    ]\\n  };\\n}\\n\\nmodule.exports = makefile;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/makefile.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/markdown.js\":\n/*!*************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/markdown.js ***!\n  \\*************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Markdown\\nRequires: xml.js\\nAuthor: John Crepezzi <john.crepezzi@gmail.com>\\nWebsite: https://daringfireball.net/projects/markdown/\\nCategory: common, markup\\n*/\\n\\nfunction markdown(hljs) {\\n  const regex = hljs.regex;\\n  const INLINE_HTML = {\\n    begin: /<\\\\/?[A-Za-z_]/,\\n    end: '>',\\n    subLanguage: 'xml',\\n    relevance: 0\\n  };\\n  const HORIZONTAL_RULE = {\\n    begin: '^[-\\\\\\\\*]{3,}',\\n    end: '$'\\n  };\\n  const CODE = {\\n    className: 'code',\\n    variants: [\\n      // TODO: fix to allow these to work with sublanguage also\\n      { begin: '(`{3,})[^`](.|\\\\\\\\n)*?\\\\\\\\1`*[ ]*' },\\n      { begin: '(~{3,})[^~](.|\\\\\\\\n)*?\\\\\\\\1~*[ ]*' },\\n      // needed to allow markdown as a sublanguage to work\\n      {\\n        begin: '```',\\n        end: '```+[ ]*$'\\n      },\\n      {\\n        begin: '~~~',\\n        end: '~~~+[ ]*$'\\n      },\\n      { begin: '`.+?`' },\\n      {\\n        begin: '(?=^( {4}|\\\\\\\\t))',\\n        // use contains to gobble up multiple lines to allow the block to be whatever size\\n        // but only have a single open/close tag vs one per line\\n        contains: [\\n          {\\n            begin: '^( {4}|\\\\\\\\t)',\\n            end: '(\\\\\\\\n)$'\\n          }\\n        ],\\n        relevance: 0\\n      }\\n    ]\\n  };\\n  const LIST = {\\n    className: 'bullet',\\n    begin: '^[ \\\\t]*([*+-]|(\\\\\\\\d+\\\\\\\\.))(?=\\\\\\\\s+)',\\n    end: '\\\\\\\\s+',\\n    excludeEnd: true\\n  };\\n  const LINK_REFERENCE = {\\n    begin: /^\\\\[[^\\\\n]+\\\\]:/,\\n    returnBegin: true,\\n    contains: [\\n      {\\n        className: 'symbol',\\n        begin: /\\\\[/,\\n        end: /\\\\]/,\\n        excludeBegin: true,\\n        excludeEnd: true\\n      },\\n      {\\n        className: 'link',\\n        begin: /:\\\\s*/,\\n        end: /$/,\\n        excludeBegin: true\\n      }\\n    ]\\n  };\\n  const URL_SCHEME = /[A-Za-z][A-Za-z0-9+.-]*/;\\n  const LINK = {\\n    variants: [\\n      // too much like nested array access in so many languages\\n      // to have any real relevance\\n      {\\n        begin: /\\\\[.+?\\\\]\\\\[.*?\\\\]/,\\n        relevance: 0\\n      },\\n      // popular internet URLs\\n      {\\n        begin: /\\\\[.+?\\\\]\\\\(((data|javascript|mailto):|(?:http|ftp)s?:\\\\/\\\\/).*?\\\\)/,\\n        relevance: 2\\n      },\\n      {\\n        begin: regex.concat(/\\\\[.+?\\\\]\\\\(/, URL_SCHEME, /:\\\\/\\\\/.*?\\\\)/),\\n        relevance: 2\\n      },\\n      // relative urls\\n      {\\n        begin: /\\\\[.+?\\\\]\\\\([./?&#].*?\\\\)/,\\n        relevance: 1\\n      },\\n      // whatever else, lower relevance (might not be a link at all)\\n      {\\n        begin: /\\\\[.*?\\\\]\\\\(.*?\\\\)/,\\n        relevance: 0\\n      }\\n    ],\\n    returnBegin: true,\\n    contains: [\\n      {\\n        // empty strings for alt or link text\\n        match: /\\\\[(?=\\\\])/ },\\n      {\\n        className: 'string',\\n        relevance: 0,\\n        begin: '\\\\\\\\[',\\n        end: '\\\\\\\\]',\\n        excludeBegin: true,\\n        returnEnd: true\\n      },\\n      {\\n        className: 'link',\\n        relevance: 0,\\n        begin: '\\\\\\\\]\\\\\\\\(',\\n        end: '\\\\\\\\)',\\n        excludeBegin: true,\\n        excludeEnd: true\\n      },\\n      {\\n        className: 'symbol',\\n        relevance: 0,\\n        begin: '\\\\\\\\]\\\\\\\\[',\\n        end: '\\\\\\\\]',\\n        excludeBegin: true,\\n        excludeEnd: true\\n      }\\n    ]\\n  };\\n  const BOLD = {\\n    className: 'strong',\\n    contains: [], // defined later\\n    variants: [\\n      {\\n        begin: /_{2}(?!\\\\s)/,\\n        end: /_{2}/\\n      },\\n      {\\n        begin: /\\\\*{2}(?!\\\\s)/,\\n        end: /\\\\*{2}/\\n      }\\n    ]\\n  };\\n  const ITALIC = {\\n    className: 'emphasis',\\n    contains: [], // defined later\\n    variants: [\\n      {\\n        begin: /\\\\*(?![*\\\\s])/,\\n        end: /\\\\*/\\n      },\\n      {\\n        begin: /_(?![_\\\\s])/,\\n        end: /_/,\\n        relevance: 0\\n      }\\n    ]\\n  };\\n\\n  // 3 level deep nesting is not allowed because it would create confusion\\n  // in cases like `***testing***` because where we don't know if the last\\n  // `***` is starting a new bold/italic or finishing the last one\\n  const BOLD_WITHOUT_ITALIC = hljs.inherit(BOLD, { contains: [] });\\n  const ITALIC_WITHOUT_BOLD = hljs.inherit(ITALIC, { contains: [] });\\n  BOLD.contains.push(ITALIC_WITHOUT_BOLD);\\n  ITALIC.contains.push(BOLD_WITHOUT_ITALIC);\\n\\n  let CONTAINABLE = [\\n    INLINE_HTML,\\n    LINK\\n  ];\\n\\n  [\\n    BOLD,\\n    ITALIC,\\n    BOLD_WITHOUT_ITALIC,\\n    ITALIC_WITHOUT_BOLD\\n  ].forEach(m => {\\n    m.contains = m.contains.concat(CONTAINABLE);\\n  });\\n\\n  CONTAINABLE = CONTAINABLE.concat(BOLD, ITALIC);\\n\\n  const HEADER = {\\n    className: 'section',\\n    variants: [\\n      {\\n        begin: '^#{1,6}',\\n        end: '$',\\n        contains: CONTAINABLE\\n      },\\n      {\\n        begin: '(?=^.+?\\\\\\\\n[=-]{2,}$)',\\n        contains: [\\n          { begin: '^[=-]*$' },\\n          {\\n            begin: '^',\\n            end: \\\"\\\\\\\\n\\\",\\n            contains: CONTAINABLE\\n          }\\n        ]\\n      }\\n    ]\\n  };\\n\\n  const BLOCKQUOTE = {\\n    className: 'quote',\\n    begin: '^>\\\\\\\\s+',\\n    contains: CONTAINABLE,\\n    end: '$'\\n  };\\n\\n  return {\\n    name: 'Markdown',\\n    aliases: [\\n      'md',\\n      'mkdown',\\n      'mkd'\\n    ],\\n    contains: [\\n      HEADER,\\n      INLINE_HTML,\\n      LIST,\\n      BOLD,\\n      ITALIC,\\n      BLOCKQUOTE,\\n      CODE,\\n      HORIZONTAL_RULE,\\n      LINK,\\n      LINK_REFERENCE\\n    ]\\n  };\\n}\\n\\nmodule.exports = markdown;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/markdown.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/mathematica.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/mathematica.js ***!\n  \\****************************************************************/\n/***/ (function(module) {\n\neval(\"const SYSTEM_SYMBOLS = [\\n  \\\"AASTriangle\\\",\\n  \\\"AbelianGroup\\\",\\n  \\\"Abort\\\",\\n  \\\"AbortKernels\\\",\\n  \\\"AbortProtect\\\",\\n  \\\"AbortScheduledTask\\\",\\n  \\\"Above\\\",\\n  \\\"Abs\\\",\\n  \\\"AbsArg\\\",\\n  \\\"AbsArgPlot\\\",\\n  \\\"Absolute\\\",\\n  \\\"AbsoluteCorrelation\\\",\\n  \\\"AbsoluteCorrelationFunction\\\",\\n  \\\"AbsoluteCurrentValue\\\",\\n  \\\"AbsoluteDashing\\\",\\n  \\\"AbsoluteFileName\\\",\\n  \\\"AbsoluteOptions\\\",\\n  \\\"AbsolutePointSize\\\",\\n  \\\"AbsoluteThickness\\\",\\n  \\\"AbsoluteTime\\\",\\n  \\\"AbsoluteTiming\\\",\\n  \\\"AcceptanceThreshold\\\",\\n  \\\"AccountingForm\\\",\\n  \\\"Accumulate\\\",\\n  \\\"Accuracy\\\",\\n  \\\"AccuracyGoal\\\",\\n  \\\"AcousticAbsorbingValue\\\",\\n  \\\"AcousticImpedanceValue\\\",\\n  \\\"AcousticNormalVelocityValue\\\",\\n  \\\"AcousticPDEComponent\\\",\\n  \\\"AcousticPressureCondition\\\",\\n  \\\"AcousticRadiationValue\\\",\\n  \\\"AcousticSoundHardValue\\\",\\n  \\\"AcousticSoundSoftCondition\\\",\\n  \\\"ActionDelay\\\",\\n  \\\"ActionMenu\\\",\\n  \\\"ActionMenuBox\\\",\\n  \\\"ActionMenuBoxOptions\\\",\\n  \\\"Activate\\\",\\n  \\\"Active\\\",\\n  \\\"ActiveClassification\\\",\\n  \\\"ActiveClassificationObject\\\",\\n  \\\"ActiveItem\\\",\\n  \\\"ActivePrediction\\\",\\n  \\\"ActivePredictionObject\\\",\\n  \\\"ActiveStyle\\\",\\n  \\\"AcyclicGraphQ\\\",\\n  \\\"AddOnHelpPath\\\",\\n  \\\"AddSides\\\",\\n  \\\"AddTo\\\",\\n  \\\"AddToSearchIndex\\\",\\n  \\\"AddUsers\\\",\\n  \\\"AdjacencyGraph\\\",\\n  \\\"AdjacencyList\\\",\\n  \\\"AdjacencyMatrix\\\",\\n  \\\"AdjacentMeshCells\\\",\\n  \\\"Adjugate\\\",\\n  \\\"AdjustmentBox\\\",\\n  \\\"AdjustmentBoxOptions\\\",\\n  \\\"AdjustTimeSeriesForecast\\\",\\n  \\\"AdministrativeDivisionData\\\",\\n  \\\"AffineHalfSpace\\\",\\n  \\\"AffineSpace\\\",\\n  \\\"AffineStateSpaceModel\\\",\\n  \\\"AffineTransform\\\",\\n  \\\"After\\\",\\n  \\\"AggregatedEntityClass\\\",\\n  \\\"AggregationLayer\\\",\\n  \\\"AircraftData\\\",\\n  \\\"AirportData\\\",\\n  \\\"AirPressureData\\\",\\n  \\\"AirSoundAttenuation\\\",\\n  \\\"AirTemperatureData\\\",\\n  \\\"AiryAi\\\",\\n  \\\"AiryAiPrime\\\",\\n  \\\"AiryAiZero\\\",\\n  \\\"AiryBi\\\",\\n  \\\"AiryBiPrime\\\",\\n  \\\"AiryBiZero\\\",\\n  \\\"AlgebraicIntegerQ\\\",\\n  \\\"AlgebraicNumber\\\",\\n  \\\"AlgebraicNumberDenominator\\\",\\n  \\\"AlgebraicNumberNorm\\\",\\n  \\\"AlgebraicNumberPolynomial\\\",\\n  \\\"AlgebraicNumberTrace\\\",\\n  \\\"AlgebraicRules\\\",\\n  \\\"AlgebraicRulesData\\\",\\n  \\\"Algebraics\\\",\\n  \\\"AlgebraicUnitQ\\\",\\n  \\\"Alignment\\\",\\n  \\\"AlignmentMarker\\\",\\n  \\\"AlignmentPoint\\\",\\n  \\\"All\\\",\\n  \\\"AllowAdultContent\\\",\\n  \\\"AllowChatServices\\\",\\n  \\\"AllowedCloudExtraParameters\\\",\\n  \\\"AllowedCloudParameterExtensions\\\",\\n  \\\"AllowedDimensions\\\",\\n  \\\"AllowedFrequencyRange\\\",\\n  \\\"AllowedHeads\\\",\\n  \\\"AllowGroupClose\\\",\\n  \\\"AllowIncomplete\\\",\\n  \\\"AllowInlineCells\\\",\\n  \\\"AllowKernelInitialization\\\",\\n  \\\"AllowLooseGrammar\\\",\\n  \\\"AllowReverseGroupClose\\\",\\n  \\\"AllowScriptLevelChange\\\",\\n  \\\"AllowVersionUpdate\\\",\\n  \\\"AllTrue\\\",\\n  \\\"Alphabet\\\",\\n  \\\"AlphabeticOrder\\\",\\n  \\\"AlphabeticSort\\\",\\n  \\\"AlphaChannel\\\",\\n  \\\"AlternateImage\\\",\\n  \\\"AlternatingFactorial\\\",\\n  \\\"AlternatingGroup\\\",\\n  \\\"AlternativeHypothesis\\\",\\n  \\\"Alternatives\\\",\\n  \\\"AltitudeMethod\\\",\\n  \\\"AmbientLight\\\",\\n  \\\"AmbiguityFunction\\\",\\n  \\\"AmbiguityList\\\",\\n  \\\"Analytic\\\",\\n  \\\"AnatomyData\\\",\\n  \\\"AnatomyForm\\\",\\n  \\\"AnatomyPlot3D\\\",\\n  \\\"AnatomySkinStyle\\\",\\n  \\\"AnatomyStyling\\\",\\n  \\\"AnchoredSearch\\\",\\n  \\\"And\\\",\\n  \\\"AndersonDarlingTest\\\",\\n  \\\"AngerJ\\\",\\n  \\\"AngleBisector\\\",\\n  \\\"AngleBracket\\\",\\n  \\\"AnglePath\\\",\\n  \\\"AnglePath3D\\\",\\n  \\\"AngleVector\\\",\\n  \\\"AngularGauge\\\",\\n  \\\"Animate\\\",\\n  \\\"AnimatedImage\\\",\\n  \\\"AnimationCycleOffset\\\",\\n  \\\"AnimationCycleRepetitions\\\",\\n  \\\"AnimationDirection\\\",\\n  \\\"AnimationDisplayTime\\\",\\n  \\\"AnimationRate\\\",\\n  \\\"AnimationRepetitions\\\",\\n  \\\"AnimationRunning\\\",\\n  \\\"AnimationRunTime\\\",\\n  \\\"AnimationTimeIndex\\\",\\n  \\\"AnimationVideo\\\",\\n  \\\"Animator\\\",\\n  \\\"AnimatorBox\\\",\\n  \\\"AnimatorBoxOptions\\\",\\n  \\\"AnimatorElements\\\",\\n  \\\"Annotate\\\",\\n  \\\"Annotation\\\",\\n  \\\"AnnotationDelete\\\",\\n  \\\"AnnotationKeys\\\",\\n  \\\"AnnotationRules\\\",\\n  \\\"AnnotationValue\\\",\\n  \\\"Annuity\\\",\\n  \\\"AnnuityDue\\\",\\n  \\\"Annulus\\\",\\n  \\\"AnomalyDetection\\\",\\n  \\\"AnomalyDetector\\\",\\n  \\\"AnomalyDetectorFunction\\\",\\n  \\\"Anonymous\\\",\\n  \\\"Antialiasing\\\",\\n  \\\"Antihermitian\\\",\\n  \\\"AntihermitianMatrixQ\\\",\\n  \\\"Antisymmetric\\\",\\n  \\\"AntisymmetricMatrixQ\\\",\\n  \\\"Antonyms\\\",\\n  \\\"AnyOrder\\\",\\n  \\\"AnySubset\\\",\\n  \\\"AnyTrue\\\",\\n  \\\"Apart\\\",\\n  \\\"ApartSquareFree\\\",\\n  \\\"APIFunction\\\",\\n  \\\"Appearance\\\",\\n  \\\"AppearanceElements\\\",\\n  \\\"AppearanceRules\\\",\\n  \\\"AppellF1\\\",\\n  \\\"Append\\\",\\n  \\\"AppendCheck\\\",\\n  \\\"AppendLayer\\\",\\n  \\\"AppendTo\\\",\\n  \\\"Application\\\",\\n  \\\"Apply\\\",\\n  \\\"ApplyReaction\\\",\\n  \\\"ApplySides\\\",\\n  \\\"ApplyTo\\\",\\n  \\\"ArcCos\\\",\\n  \\\"ArcCosh\\\",\\n  \\\"ArcCot\\\",\\n  \\\"ArcCoth\\\",\\n  \\\"ArcCsc\\\",\\n  \\\"ArcCsch\\\",\\n  \\\"ArcCurvature\\\",\\n  \\\"ARCHProcess\\\",\\n  \\\"ArcLength\\\",\\n  \\\"ArcSec\\\",\\n  \\\"ArcSech\\\",\\n  \\\"ArcSin\\\",\\n  \\\"ArcSinDistribution\\\",\\n  \\\"ArcSinh\\\",\\n  \\\"ArcTan\\\",\\n  \\\"ArcTanh\\\",\\n  \\\"Area\\\",\\n  \\\"Arg\\\",\\n  \\\"ArgMax\\\",\\n  \\\"ArgMin\\\",\\n  \\\"ArgumentCountQ\\\",\\n  \\\"ArgumentsOptions\\\",\\n  \\\"ARIMAProcess\\\",\\n  \\\"ArithmeticGeometricMean\\\",\\n  \\\"ARMAProcess\\\",\\n  \\\"Around\\\",\\n  \\\"AroundReplace\\\",\\n  \\\"ARProcess\\\",\\n  \\\"Array\\\",\\n  \\\"ArrayComponents\\\",\\n  \\\"ArrayDepth\\\",\\n  \\\"ArrayFilter\\\",\\n  \\\"ArrayFlatten\\\",\\n  \\\"ArrayMesh\\\",\\n  \\\"ArrayPad\\\",\\n  \\\"ArrayPlot\\\",\\n  \\\"ArrayPlot3D\\\",\\n  \\\"ArrayQ\\\",\\n  \\\"ArrayReduce\\\",\\n  \\\"ArrayResample\\\",\\n  \\\"ArrayReshape\\\",\\n  \\\"ArrayRules\\\",\\n  \\\"Arrays\\\",\\n  \\\"Arrow\\\",\\n  \\\"Arrow3DBox\\\",\\n  \\\"ArrowBox\\\",\\n  \\\"Arrowheads\\\",\\n  \\\"ASATriangle\\\",\\n  \\\"Ask\\\",\\n  \\\"AskAppend\\\",\\n  \\\"AskConfirm\\\",\\n  \\\"AskDisplay\\\",\\n  \\\"AskedQ\\\",\\n  \\\"AskedValue\\\",\\n  \\\"AskFunction\\\",\\n  \\\"AskState\\\",\\n  \\\"AskTemplateDisplay\\\",\\n  \\\"AspectRatio\\\",\\n  \\\"AspectRatioFixed\\\",\\n  \\\"Assert\\\",\\n  \\\"AssessmentFunction\\\",\\n  \\\"AssessmentResultObject\\\",\\n  \\\"AssociateTo\\\",\\n  \\\"Association\\\",\\n  \\\"AssociationFormat\\\",\\n  \\\"AssociationMap\\\",\\n  \\\"AssociationQ\\\",\\n  \\\"AssociationThread\\\",\\n  \\\"AssumeDeterministic\\\",\\n  \\\"Assuming\\\",\\n  \\\"Assumptions\\\",\\n  \\\"AstroAngularSeparation\\\",\\n  \\\"AstroBackground\\\",\\n  \\\"AstroCenter\\\",\\n  \\\"AstroDistance\\\",\\n  \\\"AstroGraphics\\\",\\n  \\\"AstroGridLines\\\",\\n  \\\"AstroGridLinesStyle\\\",\\n  \\\"AstronomicalData\\\",\\n  \\\"AstroPosition\\\",\\n  \\\"AstroProjection\\\",\\n  \\\"AstroRange\\\",\\n  \\\"AstroRangePadding\\\",\\n  \\\"AstroReferenceFrame\\\",\\n  \\\"AstroStyling\\\",\\n  \\\"AstroZoomLevel\\\",\\n  \\\"Asymptotic\\\",\\n  \\\"AsymptoticDSolveValue\\\",\\n  \\\"AsymptoticEqual\\\",\\n  \\\"AsymptoticEquivalent\\\",\\n  \\\"AsymptoticExpectation\\\",\\n  \\\"AsymptoticGreater\\\",\\n  \\\"AsymptoticGreaterEqual\\\",\\n  \\\"AsymptoticIntegrate\\\",\\n  \\\"AsymptoticLess\\\",\\n  \\\"AsymptoticLessEqual\\\",\\n  \\\"AsymptoticOutputTracker\\\",\\n  \\\"AsymptoticProbability\\\",\\n  \\\"AsymptoticProduct\\\",\\n  \\\"AsymptoticRSolveValue\\\",\\n  \\\"AsymptoticSolve\\\",\\n  \\\"AsymptoticSum\\\",\\n  \\\"Asynchronous\\\",\\n  \\\"AsynchronousTaskObject\\\",\\n  \\\"AsynchronousTasks\\\",\\n  \\\"Atom\\\",\\n  \\\"AtomCoordinates\\\",\\n  \\\"AtomCount\\\",\\n  \\\"AtomDiagramCoordinates\\\",\\n  \\\"AtomLabels\\\",\\n  \\\"AtomLabelStyle\\\",\\n  \\\"AtomList\\\",\\n  \\\"AtomQ\\\",\\n  \\\"AttachCell\\\",\\n  \\\"AttachedCell\\\",\\n  \\\"AttentionLayer\\\",\\n  \\\"Attributes\\\",\\n  \\\"Audio\\\",\\n  \\\"AudioAmplify\\\",\\n  \\\"AudioAnnotate\\\",\\n  \\\"AudioAnnotationLookup\\\",\\n  \\\"AudioBlockMap\\\",\\n  \\\"AudioCapture\\\",\\n  \\\"AudioChannelAssignment\\\",\\n  \\\"AudioChannelCombine\\\",\\n  \\\"AudioChannelMix\\\",\\n  \\\"AudioChannels\\\",\\n  \\\"AudioChannelSeparate\\\",\\n  \\\"AudioData\\\",\\n  \\\"AudioDelay\\\",\\n  \\\"AudioDelete\\\",\\n  \\\"AudioDevice\\\",\\n  \\\"AudioDistance\\\",\\n  \\\"AudioEncoding\\\",\\n  \\\"AudioFade\\\",\\n  \\\"AudioFrequencyShift\\\",\\n  \\\"AudioGenerator\\\",\\n  \\\"AudioIdentify\\\",\\n  \\\"AudioInputDevice\\\",\\n  \\\"AudioInsert\\\",\\n  \\\"AudioInstanceQ\\\",\\n  \\\"AudioIntervals\\\",\\n  \\\"AudioJoin\\\",\\n  \\\"AudioLabel\\\",\\n  \\\"AudioLength\\\",\\n  \\\"AudioLocalMeasurements\\\",\\n  \\\"AudioLooping\\\",\\n  \\\"AudioLoudness\\\",\\n  \\\"AudioMeasurements\\\",\\n  \\\"AudioNormalize\\\",\\n  \\\"AudioOutputDevice\\\",\\n  \\\"AudioOverlay\\\",\\n  \\\"AudioPad\\\",\\n  \\\"AudioPan\\\",\\n  \\\"AudioPartition\\\",\\n  \\\"AudioPause\\\",\\n  \\\"AudioPitchShift\\\",\\n  \\\"AudioPlay\\\",\\n  \\\"AudioPlot\\\",\\n  \\\"AudioQ\\\",\\n  \\\"AudioRecord\\\",\\n  \\\"AudioReplace\\\",\\n  \\\"AudioResample\\\",\\n  \\\"AudioReverb\\\",\\n  \\\"AudioReverse\\\",\\n  \\\"AudioSampleRate\\\",\\n  \\\"AudioSpectralMap\\\",\\n  \\\"AudioSpectralTransformation\\\",\\n  \\\"AudioSplit\\\",\\n  \\\"AudioStop\\\",\\n  \\\"AudioStream\\\",\\n  \\\"AudioStreams\\\",\\n  \\\"AudioTimeStretch\\\",\\n  \\\"AudioTrackApply\\\",\\n  \\\"AudioTrackSelection\\\",\\n  \\\"AudioTrim\\\",\\n  \\\"AudioType\\\",\\n  \\\"AugmentedPolyhedron\\\",\\n  \\\"AugmentedSymmetricPolynomial\\\",\\n  \\\"Authenticate\\\",\\n  \\\"Authentication\\\",\\n  \\\"AuthenticationDialog\\\",\\n  \\\"AutoAction\\\",\\n  \\\"Autocomplete\\\",\\n  \\\"AutocompletionFunction\\\",\\n  \\\"AutoCopy\\\",\\n  \\\"AutocorrelationTest\\\",\\n  \\\"AutoDelete\\\",\\n  \\\"AutoEvaluateEvents\\\",\\n  \\\"AutoGeneratedPackage\\\",\\n  \\\"AutoIndent\\\",\\n  \\\"AutoIndentSpacings\\\",\\n  \\\"AutoItalicWords\\\",\\n  \\\"AutoloadPath\\\",\\n  \\\"AutoMatch\\\",\\n  \\\"Automatic\\\",\\n  \\\"AutomaticImageSize\\\",\\n  \\\"AutoMultiplicationSymbol\\\",\\n  \\\"AutoNumberFormatting\\\",\\n  \\\"AutoOpenNotebooks\\\",\\n  \\\"AutoOpenPalettes\\\",\\n  \\\"AutoOperatorRenderings\\\",\\n  \\\"AutoQuoteCharacters\\\",\\n  \\\"AutoRefreshed\\\",\\n  \\\"AutoRemove\\\",\\n  \\\"AutorunSequencing\\\",\\n  \\\"AutoScaling\\\",\\n  \\\"AutoScroll\\\",\\n  \\\"AutoSpacing\\\",\\n  \\\"AutoStyleOptions\\\",\\n  \\\"AutoStyleWords\\\",\\n  \\\"AutoSubmitting\\\",\\n  \\\"Axes\\\",\\n  \\\"AxesEdge\\\",\\n  \\\"AxesLabel\\\",\\n  \\\"AxesOrigin\\\",\\n  \\\"AxesStyle\\\",\\n  \\\"AxiomaticTheory\\\",\\n  \\\"Axis\\\",\\n  \\\"Axis3DBox\\\",\\n  \\\"Axis3DBoxOptions\\\",\\n  \\\"AxisBox\\\",\\n  \\\"AxisBoxOptions\\\",\\n  \\\"AxisLabel\\\",\\n  \\\"AxisObject\\\",\\n  \\\"AxisStyle\\\",\\n  \\\"BabyMonsterGroupB\\\",\\n  \\\"Back\\\",\\n  \\\"BackFaceColor\\\",\\n  \\\"BackFaceGlowColor\\\",\\n  \\\"BackFaceOpacity\\\",\\n  \\\"BackFaceSpecularColor\\\",\\n  \\\"BackFaceSpecularExponent\\\",\\n  \\\"BackFaceSurfaceAppearance\\\",\\n  \\\"BackFaceTexture\\\",\\n  \\\"Background\\\",\\n  \\\"BackgroundAppearance\\\",\\n  \\\"BackgroundTasksSettings\\\",\\n  \\\"Backslash\\\",\\n  \\\"Backsubstitution\\\",\\n  \\\"Backward\\\",\\n  \\\"Ball\\\",\\n  \\\"Band\\\",\\n  \\\"BandpassFilter\\\",\\n  \\\"BandstopFilter\\\",\\n  \\\"BarabasiAlbertGraphDistribution\\\",\\n  \\\"BarChart\\\",\\n  \\\"BarChart3D\\\",\\n  \\\"BarcodeImage\\\",\\n  \\\"BarcodeRecognize\\\",\\n  \\\"BaringhausHenzeTest\\\",\\n  \\\"BarLegend\\\",\\n  \\\"BarlowProschanImportance\\\",\\n  \\\"BarnesG\\\",\\n  \\\"BarOrigin\\\",\\n  \\\"BarSpacing\\\",\\n  \\\"BartlettHannWindow\\\",\\n  \\\"BartlettWindow\\\",\\n  \\\"BaseDecode\\\",\\n  \\\"BaseEncode\\\",\\n  \\\"BaseForm\\\",\\n  \\\"Baseline\\\",\\n  \\\"BaselinePosition\\\",\\n  \\\"BaseStyle\\\",\\n  \\\"BasicRecurrentLayer\\\",\\n  \\\"BatchNormalizationLayer\\\",\\n  \\\"BatchSize\\\",\\n  \\\"BatesDistribution\\\",\\n  \\\"BattleLemarieWavelet\\\",\\n  \\\"BayesianMaximization\\\",\\n  \\\"BayesianMaximizationObject\\\",\\n  \\\"BayesianMinimization\\\",\\n  \\\"BayesianMinimizationObject\\\",\\n  \\\"Because\\\",\\n  \\\"BeckmannDistribution\\\",\\n  \\\"Beep\\\",\\n  \\\"Before\\\",\\n  \\\"Begin\\\",\\n  \\\"BeginDialogPacket\\\",\\n  \\\"BeginPackage\\\",\\n  \\\"BellB\\\",\\n  \\\"BellY\\\",\\n  \\\"Below\\\",\\n  \\\"BenfordDistribution\\\",\\n  \\\"BeniniDistribution\\\",\\n  \\\"BenktanderGibratDistribution\\\",\\n  \\\"BenktanderWeibullDistribution\\\",\\n  \\\"BernoulliB\\\",\\n  \\\"BernoulliDistribution\\\",\\n  \\\"BernoulliGraphDistribution\\\",\\n  \\\"BernoulliProcess\\\",\\n  \\\"BernsteinBasis\\\",\\n  \\\"BesagL\\\",\\n  \\\"BesselFilterModel\\\",\\n  \\\"BesselI\\\",\\n  \\\"BesselJ\\\",\\n  \\\"BesselJZero\\\",\\n  \\\"BesselK\\\",\\n  \\\"BesselY\\\",\\n  \\\"BesselYZero\\\",\\n  \\\"Beta\\\",\\n  \\\"BetaBinomialDistribution\\\",\\n  \\\"BetaDistribution\\\",\\n  \\\"BetaNegativeBinomialDistribution\\\",\\n  \\\"BetaPrimeDistribution\\\",\\n  \\\"BetaRegularized\\\",\\n  \\\"Between\\\",\\n  \\\"BetweennessCentrality\\\",\\n  \\\"Beveled\\\",\\n  \\\"BeveledPolyhedron\\\",\\n  \\\"BezierCurve\\\",\\n  \\\"BezierCurve3DBox\\\",\\n  \\\"BezierCurve3DBoxOptions\\\",\\n  \\\"BezierCurveBox\\\",\\n  \\\"BezierCurveBoxOptions\\\",\\n  \\\"BezierFunction\\\",\\n  \\\"BilateralFilter\\\",\\n  \\\"BilateralLaplaceTransform\\\",\\n  \\\"BilateralZTransform\\\",\\n  \\\"Binarize\\\",\\n  \\\"BinaryDeserialize\\\",\\n  \\\"BinaryDistance\\\",\\n  \\\"BinaryFormat\\\",\\n  \\\"BinaryImageQ\\\",\\n  \\\"BinaryRead\\\",\\n  \\\"BinaryReadList\\\",\\n  \\\"BinarySerialize\\\",\\n  \\\"BinaryWrite\\\",\\n  \\\"BinCounts\\\",\\n  \\\"BinLists\\\",\\n  \\\"BinnedVariogramList\\\",\\n  \\\"Binomial\\\",\\n  \\\"BinomialDistribution\\\",\\n  \\\"BinomialPointProcess\\\",\\n  \\\"BinomialProcess\\\",\\n  \\\"BinormalDistribution\\\",\\n  \\\"BiorthogonalSplineWavelet\\\",\\n  \\\"BioSequence\\\",\\n  \\\"BioSequenceBackTranslateList\\\",\\n  \\\"BioSequenceComplement\\\",\\n  \\\"BioSequenceInstances\\\",\\n  \\\"BioSequenceModify\\\",\\n  \\\"BioSequencePlot\\\",\\n  \\\"BioSequenceQ\\\",\\n  \\\"BioSequenceReverseComplement\\\",\\n  \\\"BioSequenceTranscribe\\\",\\n  \\\"BioSequenceTranslate\\\",\\n  \\\"BipartiteGraphQ\\\",\\n  \\\"BiquadraticFilterModel\\\",\\n  \\\"BirnbaumImportance\\\",\\n  \\\"BirnbaumSaundersDistribution\\\",\\n  \\\"BitAnd\\\",\\n  \\\"BitClear\\\",\\n  \\\"BitGet\\\",\\n  \\\"BitLength\\\",\\n  \\\"BitNot\\\",\\n  \\\"BitOr\\\",\\n  \\\"BitRate\\\",\\n  \\\"BitSet\\\",\\n  \\\"BitShiftLeft\\\",\\n  \\\"BitShiftRight\\\",\\n  \\\"BitXor\\\",\\n  \\\"BiweightLocation\\\",\\n  \\\"BiweightMidvariance\\\",\\n  \\\"Black\\\",\\n  \\\"BlackmanHarrisWindow\\\",\\n  \\\"BlackmanNuttallWindow\\\",\\n  \\\"BlackmanWindow\\\",\\n  \\\"Blank\\\",\\n  \\\"BlankForm\\\",\\n  \\\"BlankNullSequence\\\",\\n  \\\"BlankSequence\\\",\\n  \\\"Blend\\\",\\n  \\\"Block\\\",\\n  \\\"BlockchainAddressData\\\",\\n  \\\"BlockchainBase\\\",\\n  \\\"BlockchainBlockData\\\",\\n  \\\"BlockchainContractValue\\\",\\n  \\\"BlockchainData\\\",\\n  \\\"BlockchainGet\\\",\\n  \\\"BlockchainKeyEncode\\\",\\n  \\\"BlockchainPut\\\",\\n  \\\"BlockchainTokenData\\\",\\n  \\\"BlockchainTransaction\\\",\\n  \\\"BlockchainTransactionData\\\",\\n  \\\"BlockchainTransactionSign\\\",\\n  \\\"BlockchainTransactionSubmit\\\",\\n  \\\"BlockDiagonalMatrix\\\",\\n  \\\"BlockLowerTriangularMatrix\\\",\\n  \\\"BlockMap\\\",\\n  \\\"BlockRandom\\\",\\n  \\\"BlockUpperTriangularMatrix\\\",\\n  \\\"BlomqvistBeta\\\",\\n  \\\"BlomqvistBetaTest\\\",\\n  \\\"Blue\\\",\\n  \\\"Blur\\\",\\n  \\\"Blurring\\\",\\n  \\\"BodePlot\\\",\\n  \\\"BohmanWindow\\\",\\n  \\\"Bold\\\",\\n  \\\"Bond\\\",\\n  \\\"BondCount\\\",\\n  \\\"BondLabels\\\",\\n  \\\"BondLabelStyle\\\",\\n  \\\"BondList\\\",\\n  \\\"BondQ\\\",\\n  \\\"Bookmarks\\\",\\n  \\\"Boole\\\",\\n  \\\"BooleanConsecutiveFunction\\\",\\n  \\\"BooleanConvert\\\",\\n  \\\"BooleanCountingFunction\\\",\\n  \\\"BooleanFunction\\\",\\n  \\\"BooleanGraph\\\",\\n  \\\"BooleanMaxterms\\\",\\n  \\\"BooleanMinimize\\\",\\n  \\\"BooleanMinterms\\\",\\n  \\\"BooleanQ\\\",\\n  \\\"BooleanRegion\\\",\\n  \\\"Booleans\\\",\\n  \\\"BooleanStrings\\\",\\n  \\\"BooleanTable\\\",\\n  \\\"BooleanVariables\\\",\\n  \\\"BorderDimensions\\\",\\n  \\\"BorelTannerDistribution\\\",\\n  \\\"Bottom\\\",\\n  \\\"BottomHatTransform\\\",\\n  \\\"BoundaryDiscretizeGraphics\\\",\\n  \\\"BoundaryDiscretizeRegion\\\",\\n  \\\"BoundaryMesh\\\",\\n  \\\"BoundaryMeshRegion\\\",\\n  \\\"BoundaryMeshRegionQ\\\",\\n  \\\"BoundaryStyle\\\",\\n  \\\"BoundedRegionQ\\\",\\n  \\\"BoundingRegion\\\",\\n  \\\"Bounds\\\",\\n  \\\"Box\\\",\\n  \\\"BoxBaselineShift\\\",\\n  \\\"BoxData\\\",\\n  \\\"BoxDimensions\\\",\\n  \\\"Boxed\\\",\\n  \\\"Boxes\\\",\\n  \\\"BoxForm\\\",\\n  \\\"BoxFormFormatTypes\\\",\\n  \\\"BoxFrame\\\",\\n  \\\"BoxID\\\",\\n  \\\"BoxMargins\\\",\\n  \\\"BoxMatrix\\\",\\n  \\\"BoxObject\\\",\\n  \\\"BoxRatios\\\",\\n  \\\"BoxRotation\\\",\\n  \\\"BoxRotationPoint\\\",\\n  \\\"BoxStyle\\\",\\n  \\\"BoxWhiskerChart\\\",\\n  \\\"Bra\\\",\\n  \\\"BracketingBar\\\",\\n  \\\"BraKet\\\",\\n  \\\"BrayCurtisDistance\\\",\\n  \\\"BreadthFirstScan\\\",\\n  \\\"Break\\\",\\n  \\\"BridgeData\\\",\\n  \\\"BrightnessEqualize\\\",\\n  \\\"BroadcastStationData\\\",\\n  \\\"Brown\\\",\\n  \\\"BrownForsytheTest\\\",\\n  \\\"BrownianBridgeProcess\\\",\\n  \\\"BrowserCategory\\\",\\n  \\\"BSplineBasis\\\",\\n  \\\"BSplineCurve\\\",\\n  \\\"BSplineCurve3DBox\\\",\\n  \\\"BSplineCurve3DBoxOptions\\\",\\n  \\\"BSplineCurveBox\\\",\\n  \\\"BSplineCurveBoxOptions\\\",\\n  \\\"BSplineFunction\\\",\\n  \\\"BSplineSurface\\\",\\n  \\\"BSplineSurface3DBox\\\",\\n  \\\"BSplineSurface3DBoxOptions\\\",\\n  \\\"BubbleChart\\\",\\n  \\\"BubbleChart3D\\\",\\n  \\\"BubbleScale\\\",\\n  \\\"BubbleSizes\\\",\\n  \\\"BuckyballGraph\\\",\\n  \\\"BuildCompiledComponent\\\",\\n  \\\"BuildingData\\\",\\n  \\\"BulletGauge\\\",\\n  \\\"BusinessDayQ\\\",\\n  \\\"ButterflyGraph\\\",\\n  \\\"ButterworthFilterModel\\\",\\n  \\\"Button\\\",\\n  \\\"ButtonBar\\\",\\n  \\\"ButtonBox\\\",\\n  \\\"ButtonBoxOptions\\\",\\n  \\\"ButtonCell\\\",\\n  \\\"ButtonContents\\\",\\n  \\\"ButtonData\\\",\\n  \\\"ButtonEvaluator\\\",\\n  \\\"ButtonExpandable\\\",\\n  \\\"ButtonFrame\\\",\\n  \\\"ButtonFunction\\\",\\n  \\\"ButtonMargins\\\",\\n  \\\"ButtonMinHeight\\\",\\n  \\\"ButtonNote\\\",\\n  \\\"ButtonNotebook\\\",\\n  \\\"ButtonSource\\\",\\n  \\\"ButtonStyle\\\",\\n  \\\"ButtonStyleMenuListing\\\",\\n  \\\"Byte\\\",\\n  \\\"ByteArray\\\",\\n  \\\"ByteArrayFormat\\\",\\n  \\\"ByteArrayFormatQ\\\",\\n  \\\"ByteArrayQ\\\",\\n  \\\"ByteArrayToString\\\",\\n  \\\"ByteCount\\\",\\n  \\\"ByteOrdering\\\",\\n  \\\"C\\\",\\n  \\\"CachedValue\\\",\\n  \\\"CacheGraphics\\\",\\n  \\\"CachePersistence\\\",\\n  \\\"CalendarConvert\\\",\\n  \\\"CalendarData\\\",\\n  \\\"CalendarType\\\",\\n  \\\"Callout\\\",\\n  \\\"CalloutMarker\\\",\\n  \\\"CalloutStyle\\\",\\n  \\\"CallPacket\\\",\\n  \\\"CanberraDistance\\\",\\n  \\\"Cancel\\\",\\n  \\\"CancelButton\\\",\\n  \\\"CandlestickChart\\\",\\n  \\\"CanonicalGraph\\\",\\n  \\\"CanonicalizePolygon\\\",\\n  \\\"CanonicalizePolyhedron\\\",\\n  \\\"CanonicalizeRegion\\\",\\n  \\\"CanonicalName\\\",\\n  \\\"CanonicalWarpingCorrespondence\\\",\\n  \\\"CanonicalWarpingDistance\\\",\\n  \\\"CantorMesh\\\",\\n  \\\"CantorStaircase\\\",\\n  \\\"Canvas\\\",\\n  \\\"Cap\\\",\\n  \\\"CapForm\\\",\\n  \\\"CapitalDifferentialD\\\",\\n  \\\"Capitalize\\\",\\n  \\\"CapsuleShape\\\",\\n  \\\"CaptureRunning\\\",\\n  \\\"CaputoD\\\",\\n  \\\"CardinalBSplineBasis\\\",\\n  \\\"CarlemanLinearize\\\",\\n  \\\"CarlsonRC\\\",\\n  \\\"CarlsonRD\\\",\\n  \\\"CarlsonRE\\\",\\n  \\\"CarlsonRF\\\",\\n  \\\"CarlsonRG\\\",\\n  \\\"CarlsonRJ\\\",\\n  \\\"CarlsonRK\\\",\\n  \\\"CarlsonRM\\\",\\n  \\\"CarmichaelLambda\\\",\\n  \\\"CaseOrdering\\\",\\n  \\\"Cases\\\",\\n  \\\"CaseSensitive\\\",\\n  \\\"Cashflow\\\",\\n  \\\"Casoratian\\\",\\n  \\\"Cast\\\",\\n  \\\"Catalan\\\",\\n  \\\"CatalanNumber\\\",\\n  \\\"Catch\\\",\\n  \\\"CategoricalDistribution\\\",\\n  \\\"Catenate\\\",\\n  \\\"CatenateLayer\\\",\\n  \\\"CauchyDistribution\\\",\\n  \\\"CauchyMatrix\\\",\\n  \\\"CauchyPointProcess\\\",\\n  \\\"CauchyWindow\\\",\\n  \\\"CayleyGraph\\\",\\n  \\\"CDF\\\",\\n  \\\"CDFDeploy\\\",\\n  \\\"CDFInformation\\\",\\n  \\\"CDFWavelet\\\",\\n  \\\"Ceiling\\\",\\n  \\\"CelestialSystem\\\",\\n  \\\"Cell\\\",\\n  \\\"CellAutoOverwrite\\\",\\n  \\\"CellBaseline\\\",\\n  \\\"CellBoundingBox\\\",\\n  \\\"CellBracketOptions\\\",\\n  \\\"CellChangeTimes\\\",\\n  \\\"CellContents\\\",\\n  \\\"CellContext\\\",\\n  \\\"CellDingbat\\\",\\n  \\\"CellDingbatMargin\\\",\\n  \\\"CellDynamicExpression\\\",\\n  \\\"CellEditDuplicate\\\",\\n  \\\"CellElementsBoundingBox\\\",\\n  \\\"CellElementSpacings\\\",\\n  \\\"CellEpilog\\\",\\n  \\\"CellEvaluationDuplicate\\\",\\n  \\\"CellEvaluationFunction\\\",\\n  \\\"CellEvaluationLanguage\\\",\\n  \\\"CellEventActions\\\",\\n  \\\"CellFrame\\\",\\n  \\\"CellFrameColor\\\",\\n  \\\"CellFrameLabelMargins\\\",\\n  \\\"CellFrameLabels\\\",\\n  \\\"CellFrameMargins\\\",\\n  \\\"CellFrameStyle\\\",\\n  \\\"CellGroup\\\",\\n  \\\"CellGroupData\\\",\\n  \\\"CellGrouping\\\",\\n  \\\"CellGroupingRules\\\",\\n  \\\"CellHorizontalScrolling\\\",\\n  \\\"CellID\\\",\\n  \\\"CellInsertionPointCell\\\",\\n  \\\"CellLabel\\\",\\n  \\\"CellLabelAutoDelete\\\",\\n  \\\"CellLabelMargins\\\",\\n  \\\"CellLabelPositioning\\\",\\n  \\\"CellLabelStyle\\\",\\n  \\\"CellLabelTemplate\\\",\\n  \\\"CellMargins\\\",\\n  \\\"CellObject\\\",\\n  \\\"CellOpen\\\",\\n  \\\"CellPrint\\\",\\n  \\\"CellProlog\\\",\\n  \\\"Cells\\\",\\n  \\\"CellSize\\\",\\n  \\\"CellStyle\\\",\\n  \\\"CellTags\\\",\\n  \\\"CellTrayPosition\\\",\\n  \\\"CellTrayWidgets\\\",\\n  \\\"CellularAutomaton\\\",\\n  \\\"CensoredDistribution\\\",\\n  \\\"Censoring\\\",\\n  \\\"Center\\\",\\n  \\\"CenterArray\\\",\\n  \\\"CenterDot\\\",\\n  \\\"CenteredInterval\\\",\\n  \\\"CentralFeature\\\",\\n  \\\"CentralMoment\\\",\\n  \\\"CentralMomentGeneratingFunction\\\",\\n  \\\"Cepstrogram\\\",\\n  \\\"CepstrogramArray\\\",\\n  \\\"CepstrumArray\\\",\\n  \\\"CForm\\\",\\n  \\\"ChampernowneNumber\\\",\\n  \\\"ChangeOptions\\\",\\n  \\\"ChannelBase\\\",\\n  \\\"ChannelBrokerAction\\\",\\n  \\\"ChannelDatabin\\\",\\n  \\\"ChannelHistoryLength\\\",\\n  \\\"ChannelListen\\\",\\n  \\\"ChannelListener\\\",\\n  \\\"ChannelListeners\\\",\\n  \\\"ChannelListenerWait\\\",\\n  \\\"ChannelObject\\\",\\n  \\\"ChannelPreSendFunction\\\",\\n  \\\"ChannelReceiverFunction\\\",\\n  \\\"ChannelSend\\\",\\n  \\\"ChannelSubscribers\\\",\\n  \\\"ChanVeseBinarize\\\",\\n  \\\"Character\\\",\\n  \\\"CharacterCounts\\\",\\n  \\\"CharacterEncoding\\\",\\n  \\\"CharacterEncodingsPath\\\",\\n  \\\"CharacteristicFunction\\\",\\n  \\\"CharacteristicPolynomial\\\",\\n  \\\"CharacterName\\\",\\n  \\\"CharacterNormalize\\\",\\n  \\\"CharacterRange\\\",\\n  \\\"Characters\\\",\\n  \\\"ChartBaseStyle\\\",\\n  \\\"ChartElementData\\\",\\n  \\\"ChartElementDataFunction\\\",\\n  \\\"ChartElementFunction\\\",\\n  \\\"ChartElements\\\",\\n  \\\"ChartLabels\\\",\\n  \\\"ChartLayout\\\",\\n  \\\"ChartLegends\\\",\\n  \\\"ChartStyle\\\",\\n  \\\"Chebyshev1FilterModel\\\",\\n  \\\"Chebyshev2FilterModel\\\",\\n  \\\"ChebyshevDistance\\\",\\n  \\\"ChebyshevT\\\",\\n  \\\"ChebyshevU\\\",\\n  \\\"Check\\\",\\n  \\\"CheckAbort\\\",\\n  \\\"CheckAll\\\",\\n  \\\"CheckArguments\\\",\\n  \\\"Checkbox\\\",\\n  \\\"CheckboxBar\\\",\\n  \\\"CheckboxBox\\\",\\n  \\\"CheckboxBoxOptions\\\",\\n  \\\"ChemicalConvert\\\",\\n  \\\"ChemicalData\\\",\\n  \\\"ChemicalFormula\\\",\\n  \\\"ChemicalInstance\\\",\\n  \\\"ChemicalReaction\\\",\\n  \\\"ChessboardDistance\\\",\\n  \\\"ChiDistribution\\\",\\n  \\\"ChineseRemainder\\\",\\n  \\\"ChiSquareDistribution\\\",\\n  \\\"ChoiceButtons\\\",\\n  \\\"ChoiceDialog\\\",\\n  \\\"CholeskyDecomposition\\\",\\n  \\\"Chop\\\",\\n  \\\"ChromaticityPlot\\\",\\n  \\\"ChromaticityPlot3D\\\",\\n  \\\"ChromaticPolynomial\\\",\\n  \\\"Circle\\\",\\n  \\\"CircleBox\\\",\\n  \\\"CircleDot\\\",\\n  \\\"CircleMinus\\\",\\n  \\\"CirclePlus\\\",\\n  \\\"CirclePoints\\\",\\n  \\\"CircleThrough\\\",\\n  \\\"CircleTimes\\\",\\n  \\\"CirculantGraph\\\",\\n  \\\"CircularArcThrough\\\",\\n  \\\"CircularOrthogonalMatrixDistribution\\\",\\n  \\\"CircularQuaternionMatrixDistribution\\\",\\n  \\\"CircularRealMatrixDistribution\\\",\\n  \\\"CircularSymplecticMatrixDistribution\\\",\\n  \\\"CircularUnitaryMatrixDistribution\\\",\\n  \\\"Circumsphere\\\",\\n  \\\"CityData\\\",\\n  \\\"ClassifierFunction\\\",\\n  \\\"ClassifierInformation\\\",\\n  \\\"ClassifierMeasurements\\\",\\n  \\\"ClassifierMeasurementsObject\\\",\\n  \\\"Classify\\\",\\n  \\\"ClassPriors\\\",\\n  \\\"Clear\\\",\\n  \\\"ClearAll\\\",\\n  \\\"ClearAttributes\\\",\\n  \\\"ClearCookies\\\",\\n  \\\"ClearPermissions\\\",\\n  \\\"ClearSystemCache\\\",\\n  \\\"ClebschGordan\\\",\\n  \\\"ClickPane\\\",\\n  \\\"ClickToCopy\\\",\\n  \\\"ClickToCopyEnabled\\\",\\n  \\\"Clip\\\",\\n  \\\"ClipboardNotebook\\\",\\n  \\\"ClipFill\\\",\\n  \\\"ClippingStyle\\\",\\n  \\\"ClipPlanes\\\",\\n  \\\"ClipPlanesStyle\\\",\\n  \\\"ClipRange\\\",\\n  \\\"Clock\\\",\\n  \\\"ClockGauge\\\",\\n  \\\"ClockwiseContourIntegral\\\",\\n  \\\"Close\\\",\\n  \\\"Closed\\\",\\n  \\\"CloseKernels\\\",\\n  \\\"ClosenessCentrality\\\",\\n  \\\"Closing\\\",\\n  \\\"ClosingAutoSave\\\",\\n  \\\"ClosingEvent\\\",\\n  \\\"CloudAccountData\\\",\\n  \\\"CloudBase\\\",\\n  \\\"CloudConnect\\\",\\n  \\\"CloudConnections\\\",\\n  \\\"CloudDeploy\\\",\\n  \\\"CloudDirectory\\\",\\n  \\\"CloudDisconnect\\\",\\n  \\\"CloudEvaluate\\\",\\n  \\\"CloudExport\\\",\\n  \\\"CloudExpression\\\",\\n  \\\"CloudExpressions\\\",\\n  \\\"CloudFunction\\\",\\n  \\\"CloudGet\\\",\\n  \\\"CloudImport\\\",\\n  \\\"CloudLoggingData\\\",\\n  \\\"CloudObject\\\",\\n  \\\"CloudObjectInformation\\\",\\n  \\\"CloudObjectInformationData\\\",\\n  \\\"CloudObjectNameFormat\\\",\\n  \\\"CloudObjects\\\",\\n  \\\"CloudObjectURLType\\\",\\n  \\\"CloudPublish\\\",\\n  \\\"CloudPut\\\",\\n  \\\"CloudRenderingMethod\\\",\\n  \\\"CloudSave\\\",\\n  \\\"CloudShare\\\",\\n  \\\"CloudSubmit\\\",\\n  \\\"CloudSymbol\\\",\\n  \\\"CloudUnshare\\\",\\n  \\\"CloudUserID\\\",\\n  \\\"ClusterClassify\\\",\\n  \\\"ClusterDissimilarityFunction\\\",\\n  \\\"ClusteringComponents\\\",\\n  \\\"ClusteringMeasurements\\\",\\n  \\\"ClusteringTree\\\",\\n  \\\"CMYKColor\\\",\\n  \\\"Coarse\\\",\\n  \\\"CodeAssistOptions\\\",\\n  \\\"Coefficient\\\",\\n  \\\"CoefficientArrays\\\",\\n  \\\"CoefficientDomain\\\",\\n  \\\"CoefficientList\\\",\\n  \\\"CoefficientRules\\\",\\n  \\\"CoifletWavelet\\\",\\n  \\\"Collect\\\",\\n  \\\"CollinearPoints\\\",\\n  \\\"Colon\\\",\\n  \\\"ColonForm\\\",\\n  \\\"ColorBalance\\\",\\n  \\\"ColorCombine\\\",\\n  \\\"ColorConvert\\\",\\n  \\\"ColorCoverage\\\",\\n  \\\"ColorData\\\",\\n  \\\"ColorDataFunction\\\",\\n  \\\"ColorDetect\\\",\\n  \\\"ColorDistance\\\",\\n  \\\"ColorFunction\\\",\\n  \\\"ColorFunctionBinning\\\",\\n  \\\"ColorFunctionScaling\\\",\\n  \\\"Colorize\\\",\\n  \\\"ColorNegate\\\",\\n  \\\"ColorOutput\\\",\\n  \\\"ColorProfileData\\\",\\n  \\\"ColorQ\\\",\\n  \\\"ColorQuantize\\\",\\n  \\\"ColorReplace\\\",\\n  \\\"ColorRules\\\",\\n  \\\"ColorSelectorSettings\\\",\\n  \\\"ColorSeparate\\\",\\n  \\\"ColorSetter\\\",\\n  \\\"ColorSetterBox\\\",\\n  \\\"ColorSetterBoxOptions\\\",\\n  \\\"ColorSlider\\\",\\n  \\\"ColorsNear\\\",\\n  \\\"ColorSpace\\\",\\n  \\\"ColorToneMapping\\\",\\n  \\\"Column\\\",\\n  \\\"ColumnAlignments\\\",\\n  \\\"ColumnBackgrounds\\\",\\n  \\\"ColumnForm\\\",\\n  \\\"ColumnLines\\\",\\n  \\\"ColumnsEqual\\\",\\n  \\\"ColumnSpacings\\\",\\n  \\\"ColumnWidths\\\",\\n  \\\"CombinatorB\\\",\\n  \\\"CombinatorC\\\",\\n  \\\"CombinatorI\\\",\\n  \\\"CombinatorK\\\",\\n  \\\"CombinatorS\\\",\\n  \\\"CombinatorW\\\",\\n  \\\"CombinatorY\\\",\\n  \\\"CombinedEntityClass\\\",\\n  \\\"CombinerFunction\\\",\\n  \\\"CometData\\\",\\n  \\\"CommonDefaultFormatTypes\\\",\\n  \\\"Commonest\\\",\\n  \\\"CommonestFilter\\\",\\n  \\\"CommonName\\\",\\n  \\\"CommonUnits\\\",\\n  \\\"CommunityBoundaryStyle\\\",\\n  \\\"CommunityGraphPlot\\\",\\n  \\\"CommunityLabels\\\",\\n  \\\"CommunityRegionStyle\\\",\\n  \\\"CompanyData\\\",\\n  \\\"CompatibleUnitQ\\\",\\n  \\\"CompilationOptions\\\",\\n  \\\"CompilationTarget\\\",\\n  \\\"Compile\\\",\\n  \\\"Compiled\\\",\\n  \\\"CompiledCodeFunction\\\",\\n  \\\"CompiledComponent\\\",\\n  \\\"CompiledExpressionDeclaration\\\",\\n  \\\"CompiledFunction\\\",\\n  \\\"CompiledLayer\\\",\\n  \\\"CompilerCallback\\\",\\n  \\\"CompilerEnvironment\\\",\\n  \\\"CompilerEnvironmentAppend\\\",\\n  \\\"CompilerEnvironmentAppendTo\\\",\\n  \\\"CompilerEnvironmentObject\\\",\\n  \\\"CompilerOptions\\\",\\n  \\\"Complement\\\",\\n  \\\"ComplementedEntityClass\\\",\\n  \\\"CompleteGraph\\\",\\n  \\\"CompleteGraphQ\\\",\\n  \\\"CompleteIntegral\\\",\\n  \\\"CompleteKaryTree\\\",\\n  \\\"CompletionsListPacket\\\",\\n  \\\"Complex\\\",\\n  \\\"ComplexArrayPlot\\\",\\n  \\\"ComplexContourPlot\\\",\\n  \\\"Complexes\\\",\\n  \\\"ComplexExpand\\\",\\n  \\\"ComplexInfinity\\\",\\n  \\\"ComplexityFunction\\\",\\n  \\\"ComplexListPlot\\\",\\n  \\\"ComplexPlot\\\",\\n  \\\"ComplexPlot3D\\\",\\n  \\\"ComplexRegionPlot\\\",\\n  \\\"ComplexStreamPlot\\\",\\n  \\\"ComplexVectorPlot\\\",\\n  \\\"ComponentMeasurements\\\",\\n  \\\"ComponentwiseContextMenu\\\",\\n  \\\"Compose\\\",\\n  \\\"ComposeList\\\",\\n  \\\"ComposeSeries\\\",\\n  \\\"CompositeQ\\\",\\n  \\\"Composition\\\",\\n  \\\"CompoundElement\\\",\\n  \\\"CompoundExpression\\\",\\n  \\\"CompoundPoissonDistribution\\\",\\n  \\\"CompoundPoissonProcess\\\",\\n  \\\"CompoundRenewalProcess\\\",\\n  \\\"Compress\\\",\\n  \\\"CompressedData\\\",\\n  \\\"CompressionLevel\\\",\\n  \\\"ComputeUncertainty\\\",\\n  \\\"ConcaveHullMesh\\\",\\n  \\\"Condition\\\",\\n  \\\"ConditionalExpression\\\",\\n  \\\"Conditioned\\\",\\n  \\\"Cone\\\",\\n  \\\"ConeBox\\\",\\n  \\\"ConfidenceLevel\\\",\\n  \\\"ConfidenceRange\\\",\\n  \\\"ConfidenceTransform\\\",\\n  \\\"ConfigurationPath\\\",\\n  \\\"Confirm\\\",\\n  \\\"ConfirmAssert\\\",\\n  \\\"ConfirmBy\\\",\\n  \\\"ConfirmMatch\\\",\\n  \\\"ConfirmQuiet\\\",\\n  \\\"ConformationMethod\\\",\\n  \\\"ConformAudio\\\",\\n  \\\"ConformImages\\\",\\n  \\\"Congruent\\\",\\n  \\\"ConicGradientFilling\\\",\\n  \\\"ConicHullRegion\\\",\\n  \\\"ConicHullRegion3DBox\\\",\\n  \\\"ConicHullRegion3DBoxOptions\\\",\\n  \\\"ConicHullRegionBox\\\",\\n  \\\"ConicHullRegionBoxOptions\\\",\\n  \\\"ConicOptimization\\\",\\n  \\\"Conjugate\\\",\\n  \\\"ConjugateTranspose\\\",\\n  \\\"Conjunction\\\",\\n  \\\"Connect\\\",\\n  \\\"ConnectedComponents\\\",\\n  \\\"ConnectedGraphComponents\\\",\\n  \\\"ConnectedGraphQ\\\",\\n  \\\"ConnectedMeshComponents\\\",\\n  \\\"ConnectedMoleculeComponents\\\",\\n  \\\"ConnectedMoleculeQ\\\",\\n  \\\"ConnectionSettings\\\",\\n  \\\"ConnectLibraryCallbackFunction\\\",\\n  \\\"ConnectSystemModelComponents\\\",\\n  \\\"ConnectSystemModelController\\\",\\n  \\\"ConnesWindow\\\",\\n  \\\"ConoverTest\\\",\\n  \\\"ConservativeConvectionPDETerm\\\",\\n  \\\"ConsoleMessage\\\",\\n  \\\"Constant\\\",\\n  \\\"ConstantArray\\\",\\n  \\\"ConstantArrayLayer\\\",\\n  \\\"ConstantImage\\\",\\n  \\\"ConstantPlusLayer\\\",\\n  \\\"ConstantRegionQ\\\",\\n  \\\"Constants\\\",\\n  \\\"ConstantTimesLayer\\\",\\n  \\\"ConstellationData\\\",\\n  \\\"ConstrainedMax\\\",\\n  \\\"ConstrainedMin\\\",\\n  \\\"Construct\\\",\\n  \\\"Containing\\\",\\n  \\\"ContainsAll\\\",\\n  \\\"ContainsAny\\\",\\n  \\\"ContainsExactly\\\",\\n  \\\"ContainsNone\\\",\\n  \\\"ContainsOnly\\\",\\n  \\\"ContentDetectorFunction\\\",\\n  \\\"ContentFieldOptions\\\",\\n  \\\"ContentLocationFunction\\\",\\n  \\\"ContentObject\\\",\\n  \\\"ContentPadding\\\",\\n  \\\"ContentsBoundingBox\\\",\\n  \\\"ContentSelectable\\\",\\n  \\\"ContentSize\\\",\\n  \\\"Context\\\",\\n  \\\"ContextMenu\\\",\\n  \\\"Contexts\\\",\\n  \\\"ContextToFileName\\\",\\n  \\\"Continuation\\\",\\n  \\\"Continue\\\",\\n  \\\"ContinuedFraction\\\",\\n  \\\"ContinuedFractionK\\\",\\n  \\\"ContinuousAction\\\",\\n  \\\"ContinuousMarkovProcess\\\",\\n  \\\"ContinuousTask\\\",\\n  \\\"ContinuousTimeModelQ\\\",\\n  \\\"ContinuousWaveletData\\\",\\n  \\\"ContinuousWaveletTransform\\\",\\n  \\\"ContourDetect\\\",\\n  \\\"ContourGraphics\\\",\\n  \\\"ContourIntegral\\\",\\n  \\\"ContourLabels\\\",\\n  \\\"ContourLines\\\",\\n  \\\"ContourPlot\\\",\\n  \\\"ContourPlot3D\\\",\\n  \\\"Contours\\\",\\n  \\\"ContourShading\\\",\\n  \\\"ContourSmoothing\\\",\\n  \\\"ContourStyle\\\",\\n  \\\"ContraharmonicMean\\\",\\n  \\\"ContrastiveLossLayer\\\",\\n  \\\"Control\\\",\\n  \\\"ControlActive\\\",\\n  \\\"ControlAlignment\\\",\\n  \\\"ControlGroupContentsBox\\\",\\n  \\\"ControllabilityGramian\\\",\\n  \\\"ControllabilityMatrix\\\",\\n  \\\"ControllableDecomposition\\\",\\n  \\\"ControllableModelQ\\\",\\n  \\\"ControllerDuration\\\",\\n  \\\"ControllerInformation\\\",\\n  \\\"ControllerInformationData\\\",\\n  \\\"ControllerLinking\\\",\\n  \\\"ControllerManipulate\\\",\\n  \\\"ControllerMethod\\\",\\n  \\\"ControllerPath\\\",\\n  \\\"ControllerState\\\",\\n  \\\"ControlPlacement\\\",\\n  \\\"ControlsRendering\\\",\\n  \\\"ControlType\\\",\\n  \\\"ConvectionPDETerm\\\",\\n  \\\"Convergents\\\",\\n  \\\"ConversionOptions\\\",\\n  \\\"ConversionRules\\\",\\n  \\\"ConvertToPostScript\\\",\\n  \\\"ConvertToPostScriptPacket\\\",\\n  \\\"ConvexHullMesh\\\",\\n  \\\"ConvexHullRegion\\\",\\n  \\\"ConvexOptimization\\\",\\n  \\\"ConvexPolygonQ\\\",\\n  \\\"ConvexPolyhedronQ\\\",\\n  \\\"ConvexRegionQ\\\",\\n  \\\"ConvolutionLayer\\\",\\n  \\\"Convolve\\\",\\n  \\\"ConwayGroupCo1\\\",\\n  \\\"ConwayGroupCo2\\\",\\n  \\\"ConwayGroupCo3\\\",\\n  \\\"CookieFunction\\\",\\n  \\\"Cookies\\\",\\n  \\\"CoordinateBoundingBox\\\",\\n  \\\"CoordinateBoundingBoxArray\\\",\\n  \\\"CoordinateBounds\\\",\\n  \\\"CoordinateBoundsArray\\\",\\n  \\\"CoordinateChartData\\\",\\n  \\\"CoordinatesToolOptions\\\",\\n  \\\"CoordinateTransform\\\",\\n  \\\"CoordinateTransformData\\\",\\n  \\\"CoplanarPoints\\\",\\n  \\\"CoprimeQ\\\",\\n  \\\"Coproduct\\\",\\n  \\\"CopulaDistribution\\\",\\n  \\\"Copyable\\\",\\n  \\\"CopyDatabin\\\",\\n  \\\"CopyDirectory\\\",\\n  \\\"CopyFile\\\",\\n  \\\"CopyFunction\\\",\\n  \\\"CopyTag\\\",\\n  \\\"CopyToClipboard\\\",\\n  \\\"CoreNilpotentDecomposition\\\",\\n  \\\"CornerFilter\\\",\\n  \\\"CornerNeighbors\\\",\\n  \\\"Correlation\\\",\\n  \\\"CorrelationDistance\\\",\\n  \\\"CorrelationFunction\\\",\\n  \\\"CorrelationTest\\\",\\n  \\\"Cos\\\",\\n  \\\"Cosh\\\",\\n  \\\"CoshIntegral\\\",\\n  \\\"CosineDistance\\\",\\n  \\\"CosineWindow\\\",\\n  \\\"CosIntegral\\\",\\n  \\\"Cot\\\",\\n  \\\"Coth\\\",\\n  \\\"CoulombF\\\",\\n  \\\"CoulombG\\\",\\n  \\\"CoulombH1\\\",\\n  \\\"CoulombH2\\\",\\n  \\\"Count\\\",\\n  \\\"CountDistinct\\\",\\n  \\\"CountDistinctBy\\\",\\n  \\\"CounterAssignments\\\",\\n  \\\"CounterBox\\\",\\n  \\\"CounterBoxOptions\\\",\\n  \\\"CounterClockwiseContourIntegral\\\",\\n  \\\"CounterEvaluator\\\",\\n  \\\"CounterFunction\\\",\\n  \\\"CounterIncrements\\\",\\n  \\\"CounterStyle\\\",\\n  \\\"CounterStyleMenuListing\\\",\\n  \\\"CountRoots\\\",\\n  \\\"CountryData\\\",\\n  \\\"Counts\\\",\\n  \\\"CountsBy\\\",\\n  \\\"Covariance\\\",\\n  \\\"CovarianceEstimatorFunction\\\",\\n  \\\"CovarianceFunction\\\",\\n  \\\"CoxianDistribution\\\",\\n  \\\"CoxIngersollRossProcess\\\",\\n  \\\"CoxModel\\\",\\n  \\\"CoxModelFit\\\",\\n  \\\"CramerVonMisesTest\\\",\\n  \\\"CreateArchive\\\",\\n  \\\"CreateCellID\\\",\\n  \\\"CreateChannel\\\",\\n  \\\"CreateCloudExpression\\\",\\n  \\\"CreateCompilerEnvironment\\\",\\n  \\\"CreateDatabin\\\",\\n  \\\"CreateDataStructure\\\",\\n  \\\"CreateDataSystemModel\\\",\\n  \\\"CreateDialog\\\",\\n  \\\"CreateDirectory\\\",\\n  \\\"CreateDocument\\\",\\n  \\\"CreateFile\\\",\\n  \\\"CreateIntermediateDirectories\\\",\\n  \\\"CreateLicenseEntitlement\\\",\\n  \\\"CreateManagedLibraryExpression\\\",\\n  \\\"CreateNotebook\\\",\\n  \\\"CreatePacletArchive\\\",\\n  \\\"CreatePalette\\\",\\n  \\\"CreatePermissionsGroup\\\",\\n  \\\"CreateScheduledTask\\\",\\n  \\\"CreateSearchIndex\\\",\\n  \\\"CreateSystemModel\\\",\\n  \\\"CreateTemporary\\\",\\n  \\\"CreateTypeInstance\\\",\\n  \\\"CreateUUID\\\",\\n  \\\"CreateWindow\\\",\\n  \\\"CriterionFunction\\\",\\n  \\\"CriticalityFailureImportance\\\",\\n  \\\"CriticalitySuccessImportance\\\",\\n  \\\"CriticalSection\\\",\\n  \\\"Cross\\\",\\n  \\\"CrossEntropyLossLayer\\\",\\n  \\\"CrossingCount\\\",\\n  \\\"CrossingDetect\\\",\\n  \\\"CrossingPolygon\\\",\\n  \\\"CrossMatrix\\\",\\n  \\\"Csc\\\",\\n  \\\"Csch\\\",\\n  \\\"CSGRegion\\\",\\n  \\\"CSGRegionQ\\\",\\n  \\\"CSGRegionTree\\\",\\n  \\\"CTCLossLayer\\\",\\n  \\\"Cube\\\",\\n  \\\"CubeRoot\\\",\\n  \\\"Cubics\\\",\\n  \\\"Cuboid\\\",\\n  \\\"CuboidBox\\\",\\n  \\\"CuboidBoxOptions\\\",\\n  \\\"Cumulant\\\",\\n  \\\"CumulantGeneratingFunction\\\",\\n  \\\"CumulativeFeatureImpactPlot\\\",\\n  \\\"Cup\\\",\\n  \\\"CupCap\\\",\\n  \\\"Curl\\\",\\n  \\\"CurlyDoubleQuote\\\",\\n  \\\"CurlyQuote\\\",\\n  \\\"CurrencyConvert\\\",\\n  \\\"CurrentDate\\\",\\n  \\\"CurrentImage\\\",\\n  \\\"CurrentNotebookImage\\\",\\n  \\\"CurrentScreenImage\\\",\\n  \\\"CurrentValue\\\",\\n  \\\"Curry\\\",\\n  \\\"CurryApplied\\\",\\n  \\\"CurvatureFlowFilter\\\",\\n  \\\"CurveClosed\\\",\\n  \\\"Cyan\\\",\\n  \\\"CycleGraph\\\",\\n  \\\"CycleIndexPolynomial\\\",\\n  \\\"Cycles\\\",\\n  \\\"CyclicGroup\\\",\\n  \\\"Cyclotomic\\\",\\n  \\\"Cylinder\\\",\\n  \\\"CylinderBox\\\",\\n  \\\"CylinderBoxOptions\\\",\\n  \\\"CylindricalDecomposition\\\",\\n  \\\"CylindricalDecompositionFunction\\\",\\n  \\\"D\\\",\\n  \\\"DagumDistribution\\\",\\n  \\\"DamData\\\",\\n  \\\"DamerauLevenshteinDistance\\\",\\n  \\\"DampingFactor\\\",\\n  \\\"Darker\\\",\\n  \\\"Dashed\\\",\\n  \\\"Dashing\\\",\\n  \\\"DatabaseConnect\\\",\\n  \\\"DatabaseDisconnect\\\",\\n  \\\"DatabaseReference\\\",\\n  \\\"Databin\\\",\\n  \\\"DatabinAdd\\\",\\n  \\\"DatabinRemove\\\",\\n  \\\"Databins\\\",\\n  \\\"DatabinSubmit\\\",\\n  \\\"DatabinUpload\\\",\\n  \\\"DataCompression\\\",\\n  \\\"DataDistribution\\\",\\n  \\\"DataRange\\\",\\n  \\\"DataReversed\\\",\\n  \\\"Dataset\\\",\\n  \\\"DatasetDisplayPanel\\\",\\n  \\\"DatasetTheme\\\",\\n  \\\"DataStructure\\\",\\n  \\\"DataStructureQ\\\",\\n  \\\"Date\\\",\\n  \\\"DateBounds\\\",\\n  \\\"Dated\\\",\\n  \\\"DateDelimiters\\\",\\n  \\\"DateDifference\\\",\\n  \\\"DatedUnit\\\",\\n  \\\"DateFormat\\\",\\n  \\\"DateFunction\\\",\\n  \\\"DateGranularity\\\",\\n  \\\"DateHistogram\\\",\\n  \\\"DateInterval\\\",\\n  \\\"DateList\\\",\\n  \\\"DateListLogPlot\\\",\\n  \\\"DateListPlot\\\",\\n  \\\"DateListStepPlot\\\",\\n  \\\"DateObject\\\",\\n  \\\"DateObjectQ\\\",\\n  \\\"DateOverlapsQ\\\",\\n  \\\"DatePattern\\\",\\n  \\\"DatePlus\\\",\\n  \\\"DateRange\\\",\\n  \\\"DateReduction\\\",\\n  \\\"DateScale\\\",\\n  \\\"DateSelect\\\",\\n  \\\"DateString\\\",\\n  \\\"DateTicksFormat\\\",\\n  \\\"DateValue\\\",\\n  \\\"DateWithinQ\\\",\\n  \\\"DaubechiesWavelet\\\",\\n  \\\"DavisDistribution\\\",\\n  \\\"DawsonF\\\",\\n  \\\"DayCount\\\",\\n  \\\"DayCountConvention\\\",\\n  \\\"DayHemisphere\\\",\\n  \\\"DaylightQ\\\",\\n  \\\"DayMatchQ\\\",\\n  \\\"DayName\\\",\\n  \\\"DayNightTerminator\\\",\\n  \\\"DayPlus\\\",\\n  \\\"DayRange\\\",\\n  \\\"DayRound\\\",\\n  \\\"DeBruijnGraph\\\",\\n  \\\"DeBruijnSequence\\\",\\n  \\\"Debug\\\",\\n  \\\"DebugTag\\\",\\n  \\\"Decapitalize\\\",\\n  \\\"Decimal\\\",\\n  \\\"DecimalForm\\\",\\n  \\\"DeclareCompiledComponent\\\",\\n  \\\"DeclareKnownSymbols\\\",\\n  \\\"DeclarePackage\\\",\\n  \\\"Decompose\\\",\\n  \\\"DeconvolutionLayer\\\",\\n  \\\"Decrement\\\",\\n  \\\"Decrypt\\\",\\n  \\\"DecryptFile\\\",\\n  \\\"DedekindEta\\\",\\n  \\\"DeepSpaceProbeData\\\",\\n  \\\"Default\\\",\\n  \\\"Default2DTool\\\",\\n  \\\"Default3DTool\\\",\\n  \\\"DefaultAttachedCellStyle\\\",\\n  \\\"DefaultAxesStyle\\\",\\n  \\\"DefaultBaseStyle\\\",\\n  \\\"DefaultBoxStyle\\\",\\n  \\\"DefaultButton\\\",\\n  \\\"DefaultColor\\\",\\n  \\\"DefaultControlPlacement\\\",\\n  \\\"DefaultDockedCellStyle\\\",\\n  \\\"DefaultDuplicateCellStyle\\\",\\n  \\\"DefaultDuration\\\",\\n  \\\"DefaultElement\\\",\\n  \\\"DefaultFaceGridsStyle\\\",\\n  \\\"DefaultFieldHintStyle\\\",\\n  \\\"DefaultFont\\\",\\n  \\\"DefaultFontProperties\\\",\\n  \\\"DefaultFormatType\\\",\\n  \\\"DefaultFrameStyle\\\",\\n  \\\"DefaultFrameTicksStyle\\\",\\n  \\\"DefaultGridLinesStyle\\\",\\n  \\\"DefaultInlineFormatType\\\",\\n  \\\"DefaultInputFormatType\\\",\\n  \\\"DefaultLabelStyle\\\",\\n  \\\"DefaultMenuStyle\\\",\\n  \\\"DefaultNaturalLanguage\\\",\\n  \\\"DefaultNewCellStyle\\\",\\n  \\\"DefaultNewInlineCellStyle\\\",\\n  \\\"DefaultNotebook\\\",\\n  \\\"DefaultOptions\\\",\\n  \\\"DefaultOutputFormatType\\\",\\n  \\\"DefaultPrintPrecision\\\",\\n  \\\"DefaultStyle\\\",\\n  \\\"DefaultStyleDefinitions\\\",\\n  \\\"DefaultTextFormatType\\\",\\n  \\\"DefaultTextInlineFormatType\\\",\\n  \\\"DefaultTicksStyle\\\",\\n  \\\"DefaultTooltipStyle\\\",\\n  \\\"DefaultValue\\\",\\n  \\\"DefaultValues\\\",\\n  \\\"Defer\\\",\\n  \\\"DefineExternal\\\",\\n  \\\"DefineInputStreamMethod\\\",\\n  \\\"DefineOutputStreamMethod\\\",\\n  \\\"DefineResourceFunction\\\",\\n  \\\"Definition\\\",\\n  \\\"Degree\\\",\\n  \\\"DegreeCentrality\\\",\\n  \\\"DegreeGraphDistribution\\\",\\n  \\\"DegreeLexicographic\\\",\\n  \\\"DegreeReverseLexicographic\\\",\\n  \\\"DEigensystem\\\",\\n  \\\"DEigenvalues\\\",\\n  \\\"Deinitialization\\\",\\n  \\\"Del\\\",\\n  \\\"DelaunayMesh\\\",\\n  \\\"Delayed\\\",\\n  \\\"Deletable\\\",\\n  \\\"Delete\\\",\\n  \\\"DeleteAdjacentDuplicates\\\",\\n  \\\"DeleteAnomalies\\\",\\n  \\\"DeleteBorderComponents\\\",\\n  \\\"DeleteCases\\\",\\n  \\\"DeleteChannel\\\",\\n  \\\"DeleteCloudExpression\\\",\\n  \\\"DeleteContents\\\",\\n  \\\"DeleteDirectory\\\",\\n  \\\"DeleteDuplicates\\\",\\n  \\\"DeleteDuplicatesBy\\\",\\n  \\\"DeleteElements\\\",\\n  \\\"DeleteFile\\\",\\n  \\\"DeleteMissing\\\",\\n  \\\"DeleteObject\\\",\\n  \\\"DeletePermissionsKey\\\",\\n  \\\"DeleteSearchIndex\\\",\\n  \\\"DeleteSmallComponents\\\",\\n  \\\"DeleteStopwords\\\",\\n  \\\"DeleteWithContents\\\",\\n  \\\"DeletionWarning\\\",\\n  \\\"DelimitedArray\\\",\\n  \\\"DelimitedSequence\\\",\\n  \\\"Delimiter\\\",\\n  \\\"DelimiterAutoMatching\\\",\\n  \\\"DelimiterFlashTime\\\",\\n  \\\"DelimiterMatching\\\",\\n  \\\"Delimiters\\\",\\n  \\\"DeliveryFunction\\\",\\n  \\\"Dendrogram\\\",\\n  \\\"Denominator\\\",\\n  \\\"DensityGraphics\\\",\\n  \\\"DensityHistogram\\\",\\n  \\\"DensityPlot\\\",\\n  \\\"DensityPlot3D\\\",\\n  \\\"DependentVariables\\\",\\n  \\\"Deploy\\\",\\n  \\\"Deployed\\\",\\n  \\\"Depth\\\",\\n  \\\"DepthFirstScan\\\",\\n  \\\"Derivative\\\",\\n  \\\"DerivativeFilter\\\",\\n  \\\"DerivativePDETerm\\\",\\n  \\\"DerivedKey\\\",\\n  \\\"DescriptorStateSpace\\\",\\n  \\\"DesignMatrix\\\",\\n  \\\"DestroyAfterEvaluation\\\",\\n  \\\"Det\\\",\\n  \\\"DeviceClose\\\",\\n  \\\"DeviceConfigure\\\",\\n  \\\"DeviceExecute\\\",\\n  \\\"DeviceExecuteAsynchronous\\\",\\n  \\\"DeviceObject\\\",\\n  \\\"DeviceOpen\\\",\\n  \\\"DeviceOpenQ\\\",\\n  \\\"DeviceRead\\\",\\n  \\\"DeviceReadBuffer\\\",\\n  \\\"DeviceReadLatest\\\",\\n  \\\"DeviceReadList\\\",\\n  \\\"DeviceReadTimeSeries\\\",\\n  \\\"Devices\\\",\\n  \\\"DeviceStreams\\\",\\n  \\\"DeviceWrite\\\",\\n  \\\"DeviceWriteBuffer\\\",\\n  \\\"DGaussianWavelet\\\",\\n  \\\"DiacriticalPositioning\\\",\\n  \\\"Diagonal\\\",\\n  \\\"DiagonalizableMatrixQ\\\",\\n  \\\"DiagonalMatrix\\\",\\n  \\\"DiagonalMatrixQ\\\",\\n  \\\"Dialog\\\",\\n  \\\"DialogIndent\\\",\\n  \\\"DialogInput\\\",\\n  \\\"DialogLevel\\\",\\n  \\\"DialogNotebook\\\",\\n  \\\"DialogProlog\\\",\\n  \\\"DialogReturn\\\",\\n  \\\"DialogSymbols\\\",\\n  \\\"Diamond\\\",\\n  \\\"DiamondMatrix\\\",\\n  \\\"DiceDissimilarity\\\",\\n  \\\"DictionaryLookup\\\",\\n  \\\"DictionaryWordQ\\\",\\n  \\\"DifferenceDelta\\\",\\n  \\\"DifferenceOrder\\\",\\n  \\\"DifferenceQuotient\\\",\\n  \\\"DifferenceRoot\\\",\\n  \\\"DifferenceRootReduce\\\",\\n  \\\"Differences\\\",\\n  \\\"DifferentialD\\\",\\n  \\\"DifferentialRoot\\\",\\n  \\\"DifferentialRootReduce\\\",\\n  \\\"DifferentiatorFilter\\\",\\n  \\\"DiffusionPDETerm\\\",\\n  \\\"DiggleGatesPointProcess\\\",\\n  \\\"DiggleGrattonPointProcess\\\",\\n  \\\"DigitalSignature\\\",\\n  \\\"DigitBlock\\\",\\n  \\\"DigitBlockMinimum\\\",\\n  \\\"DigitCharacter\\\",\\n  \\\"DigitCount\\\",\\n  \\\"DigitQ\\\",\\n  \\\"DihedralAngle\\\",\\n  \\\"DihedralGroup\\\",\\n  \\\"Dilation\\\",\\n  \\\"DimensionalCombinations\\\",\\n  \\\"DimensionalMeshComponents\\\",\\n  \\\"DimensionReduce\\\",\\n  \\\"DimensionReducerFunction\\\",\\n  \\\"DimensionReduction\\\",\\n  \\\"Dimensions\\\",\\n  \\\"DiracComb\\\",\\n  \\\"DiracDelta\\\",\\n  \\\"DirectedEdge\\\",\\n  \\\"DirectedEdges\\\",\\n  \\\"DirectedGraph\\\",\\n  \\\"DirectedGraphQ\\\",\\n  \\\"DirectedInfinity\\\",\\n  \\\"Direction\\\",\\n  \\\"DirectionalLight\\\",\\n  \\\"Directive\\\",\\n  \\\"Directory\\\",\\n  \\\"DirectoryName\\\",\\n  \\\"DirectoryQ\\\",\\n  \\\"DirectoryStack\\\",\\n  \\\"DirichletBeta\\\",\\n  \\\"DirichletCharacter\\\",\\n  \\\"DirichletCondition\\\",\\n  \\\"DirichletConvolve\\\",\\n  \\\"DirichletDistribution\\\",\\n  \\\"DirichletEta\\\",\\n  \\\"DirichletL\\\",\\n  \\\"DirichletLambda\\\",\\n  \\\"DirichletTransform\\\",\\n  \\\"DirichletWindow\\\",\\n  \\\"DisableConsolePrintPacket\\\",\\n  \\\"DisableFormatting\\\",\\n  \\\"DiscreteAsymptotic\\\",\\n  \\\"DiscreteChirpZTransform\\\",\\n  \\\"DiscreteConvolve\\\",\\n  \\\"DiscreteDelta\\\",\\n  \\\"DiscreteHadamardTransform\\\",\\n  \\\"DiscreteIndicator\\\",\\n  \\\"DiscreteInputOutputModel\\\",\\n  \\\"DiscreteLimit\\\",\\n  \\\"DiscreteLQEstimatorGains\\\",\\n  \\\"DiscreteLQRegulatorGains\\\",\\n  \\\"DiscreteLyapunovSolve\\\",\\n  \\\"DiscreteMarkovProcess\\\",\\n  \\\"DiscreteMaxLimit\\\",\\n  \\\"DiscreteMinLimit\\\",\\n  \\\"DiscretePlot\\\",\\n  \\\"DiscretePlot3D\\\",\\n  \\\"DiscreteRatio\\\",\\n  \\\"DiscreteRiccatiSolve\\\",\\n  \\\"DiscreteShift\\\",\\n  \\\"DiscreteTimeModelQ\\\",\\n  \\\"DiscreteUniformDistribution\\\",\\n  \\\"DiscreteVariables\\\",\\n  \\\"DiscreteWaveletData\\\",\\n  \\\"DiscreteWaveletPacketTransform\\\",\\n  \\\"DiscreteWaveletTransform\\\",\\n  \\\"DiscretizeGraphics\\\",\\n  \\\"DiscretizeRegion\\\",\\n  \\\"Discriminant\\\",\\n  \\\"DisjointQ\\\",\\n  \\\"Disjunction\\\",\\n  \\\"Disk\\\",\\n  \\\"DiskBox\\\",\\n  \\\"DiskBoxOptions\\\",\\n  \\\"DiskMatrix\\\",\\n  \\\"DiskSegment\\\",\\n  \\\"Dispatch\\\",\\n  \\\"DispatchQ\\\",\\n  \\\"DispersionEstimatorFunction\\\",\\n  \\\"Display\\\",\\n  \\\"DisplayAllSteps\\\",\\n  \\\"DisplayEndPacket\\\",\\n  \\\"DisplayForm\\\",\\n  \\\"DisplayFunction\\\",\\n  \\\"DisplayPacket\\\",\\n  \\\"DisplayRules\\\",\\n  \\\"DisplayString\\\",\\n  \\\"DisplayTemporary\\\",\\n  \\\"DisplayWith\\\",\\n  \\\"DisplayWithRef\\\",\\n  \\\"DisplayWithVariable\\\",\\n  \\\"DistanceFunction\\\",\\n  \\\"DistanceMatrix\\\",\\n  \\\"DistanceTransform\\\",\\n  \\\"Distribute\\\",\\n  \\\"Distributed\\\",\\n  \\\"DistributedContexts\\\",\\n  \\\"DistributeDefinitions\\\",\\n  \\\"DistributionChart\\\",\\n  \\\"DistributionDomain\\\",\\n  \\\"DistributionFitTest\\\",\\n  \\\"DistributionParameterAssumptions\\\",\\n  \\\"DistributionParameterQ\\\",\\n  \\\"Dithering\\\",\\n  \\\"Div\\\",\\n  \\\"Divergence\\\",\\n  \\\"Divide\\\",\\n  \\\"DivideBy\\\",\\n  \\\"Dividers\\\",\\n  \\\"DivideSides\\\",\\n  \\\"Divisible\\\",\\n  \\\"Divisors\\\",\\n  \\\"DivisorSigma\\\",\\n  \\\"DivisorSum\\\",\\n  \\\"DMSList\\\",\\n  \\\"DMSString\\\",\\n  \\\"Do\\\",\\n  \\\"DockedCell\\\",\\n  \\\"DockedCells\\\",\\n  \\\"DocumentGenerator\\\",\\n  \\\"DocumentGeneratorInformation\\\",\\n  \\\"DocumentGeneratorInformationData\\\",\\n  \\\"DocumentGenerators\\\",\\n  \\\"DocumentNotebook\\\",\\n  \\\"DocumentWeightingRules\\\",\\n  \\\"Dodecahedron\\\",\\n  \\\"DomainRegistrationInformation\\\",\\n  \\\"DominantColors\\\",\\n  \\\"DominatorTreeGraph\\\",\\n  \\\"DominatorVertexList\\\",\\n  \\\"DOSTextFormat\\\",\\n  \\\"Dot\\\",\\n  \\\"DotDashed\\\",\\n  \\\"DotEqual\\\",\\n  \\\"DotLayer\\\",\\n  \\\"DotPlusLayer\\\",\\n  \\\"Dotted\\\",\\n  \\\"DoubleBracketingBar\\\",\\n  \\\"DoubleContourIntegral\\\",\\n  \\\"DoubleDownArrow\\\",\\n  \\\"DoubleLeftArrow\\\",\\n  \\\"DoubleLeftRightArrow\\\",\\n  \\\"DoubleLeftTee\\\",\\n  \\\"DoubleLongLeftArrow\\\",\\n  \\\"DoubleLongLeftRightArrow\\\",\\n  \\\"DoubleLongRightArrow\\\",\\n  \\\"DoubleRightArrow\\\",\\n  \\\"DoubleRightTee\\\",\\n  \\\"DoubleUpArrow\\\",\\n  \\\"DoubleUpDownArrow\\\",\\n  \\\"DoubleVerticalBar\\\",\\n  \\\"DoublyInfinite\\\",\\n  \\\"Down\\\",\\n  \\\"DownArrow\\\",\\n  \\\"DownArrowBar\\\",\\n  \\\"DownArrowUpArrow\\\",\\n  \\\"DownLeftRightVector\\\",\\n  \\\"DownLeftTeeVector\\\",\\n  \\\"DownLeftVector\\\",\\n  \\\"DownLeftVectorBar\\\",\\n  \\\"DownRightTeeVector\\\",\\n  \\\"DownRightVector\\\",\\n  \\\"DownRightVectorBar\\\",\\n  \\\"Downsample\\\",\\n  \\\"DownTee\\\",\\n  \\\"DownTeeArrow\\\",\\n  \\\"DownValues\\\",\\n  \\\"DownValuesFunction\\\",\\n  \\\"DragAndDrop\\\",\\n  \\\"DrawBackFaces\\\",\\n  \\\"DrawEdges\\\",\\n  \\\"DrawFrontFaces\\\",\\n  \\\"DrawHighlighted\\\",\\n  \\\"DrazinInverse\\\",\\n  \\\"Drop\\\",\\n  \\\"DropoutLayer\\\",\\n  \\\"DropShadowing\\\",\\n  \\\"DSolve\\\",\\n  \\\"DSolveChangeVariables\\\",\\n  \\\"DSolveValue\\\",\\n  \\\"Dt\\\",\\n  \\\"DualLinearProgramming\\\",\\n  \\\"DualPlanarGraph\\\",\\n  \\\"DualPolyhedron\\\",\\n  \\\"DualSystemsModel\\\",\\n  \\\"DumpGet\\\",\\n  \\\"DumpSave\\\",\\n  \\\"DuplicateFreeQ\\\",\\n  \\\"Duration\\\",\\n  \\\"Dynamic\\\",\\n  \\\"DynamicBox\\\",\\n  \\\"DynamicBoxOptions\\\",\\n  \\\"DynamicEvaluationTimeout\\\",\\n  \\\"DynamicGeoGraphics\\\",\\n  \\\"DynamicImage\\\",\\n  \\\"DynamicLocation\\\",\\n  \\\"DynamicModule\\\",\\n  \\\"DynamicModuleBox\\\",\\n  \\\"DynamicModuleBoxOptions\\\",\\n  \\\"DynamicModuleParent\\\",\\n  \\\"DynamicModuleValues\\\",\\n  \\\"DynamicName\\\",\\n  \\\"DynamicNamespace\\\",\\n  \\\"DynamicReference\\\",\\n  \\\"DynamicSetting\\\",\\n  \\\"DynamicUpdating\\\",\\n  \\\"DynamicWrapper\\\",\\n  \\\"DynamicWrapperBox\\\",\\n  \\\"DynamicWrapperBoxOptions\\\",\\n  \\\"E\\\",\\n  \\\"EarthImpactData\\\",\\n  \\\"EarthquakeData\\\",\\n  \\\"EccentricityCentrality\\\",\\n  \\\"Echo\\\",\\n  \\\"EchoEvaluation\\\",\\n  \\\"EchoFunction\\\",\\n  \\\"EchoLabel\\\",\\n  \\\"EchoTiming\\\",\\n  \\\"EclipseType\\\",\\n  \\\"EdgeAdd\\\",\\n  \\\"EdgeBetweennessCentrality\\\",\\n  \\\"EdgeCapacity\\\",\\n  \\\"EdgeCapForm\\\",\\n  \\\"EdgeChromaticNumber\\\",\\n  \\\"EdgeColor\\\",\\n  \\\"EdgeConnectivity\\\",\\n  \\\"EdgeContract\\\",\\n  \\\"EdgeCost\\\",\\n  \\\"EdgeCount\\\",\\n  \\\"EdgeCoverQ\\\",\\n  \\\"EdgeCycleMatrix\\\",\\n  \\\"EdgeDashing\\\",\\n  \\\"EdgeDelete\\\",\\n  \\\"EdgeDetect\\\",\\n  \\\"EdgeForm\\\",\\n  \\\"EdgeIndex\\\",\\n  \\\"EdgeJoinForm\\\",\\n  \\\"EdgeLabeling\\\",\\n  \\\"EdgeLabels\\\",\\n  \\\"EdgeLabelStyle\\\",\\n  \\\"EdgeList\\\",\\n  \\\"EdgeOpacity\\\",\\n  \\\"EdgeQ\\\",\\n  \\\"EdgeRenderingFunction\\\",\\n  \\\"EdgeRules\\\",\\n  \\\"EdgeShapeFunction\\\",\\n  \\\"EdgeStyle\\\",\\n  \\\"EdgeTaggedGraph\\\",\\n  \\\"EdgeTaggedGraphQ\\\",\\n  \\\"EdgeTags\\\",\\n  \\\"EdgeThickness\\\",\\n  \\\"EdgeTransitiveGraphQ\\\",\\n  \\\"EdgeValueRange\\\",\\n  \\\"EdgeValueSizes\\\",\\n  \\\"EdgeWeight\\\",\\n  \\\"EdgeWeightedGraphQ\\\",\\n  \\\"Editable\\\",\\n  \\\"EditButtonSettings\\\",\\n  \\\"EditCellTagsSettings\\\",\\n  \\\"EditDistance\\\",\\n  \\\"EffectiveInterest\\\",\\n  \\\"Eigensystem\\\",\\n  \\\"Eigenvalues\\\",\\n  \\\"EigenvectorCentrality\\\",\\n  \\\"Eigenvectors\\\",\\n  \\\"Element\\\",\\n  \\\"ElementData\\\",\\n  \\\"ElementwiseLayer\\\",\\n  \\\"ElidedForms\\\",\\n  \\\"Eliminate\\\",\\n  \\\"EliminationOrder\\\",\\n  \\\"Ellipsoid\\\",\\n  \\\"EllipticE\\\",\\n  \\\"EllipticExp\\\",\\n  \\\"EllipticExpPrime\\\",\\n  \\\"EllipticF\\\",\\n  \\\"EllipticFilterModel\\\",\\n  \\\"EllipticK\\\",\\n  \\\"EllipticLog\\\",\\n  \\\"EllipticNomeQ\\\",\\n  \\\"EllipticPi\\\",\\n  \\\"EllipticReducedHalfPeriods\\\",\\n  \\\"EllipticTheta\\\",\\n  \\\"EllipticThetaPrime\\\",\\n  \\\"EmbedCode\\\",\\n  \\\"EmbeddedHTML\\\",\\n  \\\"EmbeddedService\\\",\\n  \\\"EmbeddedSQLEntityClass\\\",\\n  \\\"EmbeddedSQLExpression\\\",\\n  \\\"EmbeddingLayer\\\",\\n  \\\"EmbeddingObject\\\",\\n  \\\"EmitSound\\\",\\n  \\\"EmphasizeSyntaxErrors\\\",\\n  \\\"EmpiricalDistribution\\\",\\n  \\\"Empty\\\",\\n  \\\"EmptyGraphQ\\\",\\n  \\\"EmptyRegion\\\",\\n  \\\"EmptySpaceF\\\",\\n  \\\"EnableConsolePrintPacket\\\",\\n  \\\"Enabled\\\",\\n  \\\"Enclose\\\",\\n  \\\"Encode\\\",\\n  \\\"Encrypt\\\",\\n  \\\"EncryptedObject\\\",\\n  \\\"EncryptFile\\\",\\n  \\\"End\\\",\\n  \\\"EndAdd\\\",\\n  \\\"EndDialogPacket\\\",\\n  \\\"EndOfBuffer\\\",\\n  \\\"EndOfFile\\\",\\n  \\\"EndOfLine\\\",\\n  \\\"EndOfString\\\",\\n  \\\"EndPackage\\\",\\n  \\\"EngineEnvironment\\\",\\n  \\\"EngineeringForm\\\",\\n  \\\"Enter\\\",\\n  \\\"EnterExpressionPacket\\\",\\n  \\\"EnterTextPacket\\\",\\n  \\\"Entity\\\",\\n  \\\"EntityClass\\\",\\n  \\\"EntityClassList\\\",\\n  \\\"EntityCopies\\\",\\n  \\\"EntityFunction\\\",\\n  \\\"EntityGroup\\\",\\n  \\\"EntityInstance\\\",\\n  \\\"EntityList\\\",\\n  \\\"EntityPrefetch\\\",\\n  \\\"EntityProperties\\\",\\n  \\\"EntityProperty\\\",\\n  \\\"EntityPropertyClass\\\",\\n  \\\"EntityRegister\\\",\\n  \\\"EntityStore\\\",\\n  \\\"EntityStores\\\",\\n  \\\"EntityTypeName\\\",\\n  \\\"EntityUnregister\\\",\\n  \\\"EntityValue\\\",\\n  \\\"Entropy\\\",\\n  \\\"EntropyFilter\\\",\\n  \\\"Environment\\\",\\n  \\\"Epilog\\\",\\n  \\\"EpilogFunction\\\",\\n  \\\"Equal\\\",\\n  \\\"EqualColumns\\\",\\n  \\\"EqualRows\\\",\\n  \\\"EqualTilde\\\",\\n  \\\"EqualTo\\\",\\n  \\\"EquatedTo\\\",\\n  \\\"Equilibrium\\\",\\n  \\\"EquirippleFilterKernel\\\",\\n  \\\"Equivalent\\\",\\n  \\\"Erf\\\",\\n  \\\"Erfc\\\",\\n  \\\"Erfi\\\",\\n  \\\"ErlangB\\\",\\n  \\\"ErlangC\\\",\\n  \\\"ErlangDistribution\\\",\\n  \\\"Erosion\\\",\\n  \\\"ErrorBox\\\",\\n  \\\"ErrorBoxOptions\\\",\\n  \\\"ErrorNorm\\\",\\n  \\\"ErrorPacket\\\",\\n  \\\"ErrorsDialogSettings\\\",\\n  \\\"EscapeRadius\\\",\\n  \\\"EstimatedBackground\\\",\\n  \\\"EstimatedDistribution\\\",\\n  \\\"EstimatedPointNormals\\\",\\n  \\\"EstimatedPointProcess\\\",\\n  \\\"EstimatedProcess\\\",\\n  \\\"EstimatedVariogramModel\\\",\\n  \\\"EstimatorGains\\\",\\n  \\\"EstimatorRegulator\\\",\\n  \\\"EuclideanDistance\\\",\\n  \\\"EulerAngles\\\",\\n  \\\"EulerCharacteristic\\\",\\n  \\\"EulerE\\\",\\n  \\\"EulerGamma\\\",\\n  \\\"EulerianGraphQ\\\",\\n  \\\"EulerMatrix\\\",\\n  \\\"EulerPhi\\\",\\n  \\\"Evaluatable\\\",\\n  \\\"Evaluate\\\",\\n  \\\"Evaluated\\\",\\n  \\\"EvaluatePacket\\\",\\n  \\\"EvaluateScheduledTask\\\",\\n  \\\"EvaluationBox\\\",\\n  \\\"EvaluationCell\\\",\\n  \\\"EvaluationCompletionAction\\\",\\n  \\\"EvaluationData\\\",\\n  \\\"EvaluationElements\\\",\\n  \\\"EvaluationEnvironment\\\",\\n  \\\"EvaluationMode\\\",\\n  \\\"EvaluationMonitor\\\",\\n  \\\"EvaluationNotebook\\\",\\n  \\\"EvaluationObject\\\",\\n  \\\"EvaluationOrder\\\",\\n  \\\"EvaluationPrivileges\\\",\\n  \\\"EvaluationRateLimit\\\",\\n  \\\"Evaluator\\\",\\n  \\\"EvaluatorNames\\\",\\n  \\\"EvenQ\\\",\\n  \\\"EventData\\\",\\n  \\\"EventEvaluator\\\",\\n  \\\"EventHandler\\\",\\n  \\\"EventHandlerTag\\\",\\n  \\\"EventLabels\\\",\\n  \\\"EventSeries\\\",\\n  \\\"ExactBlackmanWindow\\\",\\n  \\\"ExactNumberQ\\\",\\n  \\\"ExactRootIsolation\\\",\\n  \\\"ExampleData\\\",\\n  \\\"Except\\\",\\n  \\\"ExcludedContexts\\\",\\n  \\\"ExcludedForms\\\",\\n  \\\"ExcludedLines\\\",\\n  \\\"ExcludedPhysicalQuantities\\\",\\n  \\\"ExcludePods\\\",\\n  \\\"Exclusions\\\",\\n  \\\"ExclusionsStyle\\\",\\n  \\\"Exists\\\",\\n  \\\"Exit\\\",\\n  \\\"ExitDialog\\\",\\n  \\\"ExoplanetData\\\",\\n  \\\"Exp\\\",\\n  \\\"Expand\\\",\\n  \\\"ExpandAll\\\",\\n  \\\"ExpandDenominator\\\",\\n  \\\"ExpandFileName\\\",\\n  \\\"ExpandNumerator\\\",\\n  \\\"Expectation\\\",\\n  \\\"ExpectationE\\\",\\n  \\\"ExpectedValue\\\",\\n  \\\"ExpGammaDistribution\\\",\\n  \\\"ExpIntegralE\\\",\\n  \\\"ExpIntegralEi\\\",\\n  \\\"ExpirationDate\\\",\\n  \\\"Exponent\\\",\\n  \\\"ExponentFunction\\\",\\n  \\\"ExponentialDistribution\\\",\\n  \\\"ExponentialFamily\\\",\\n  \\\"ExponentialGeneratingFunction\\\",\\n  \\\"ExponentialMovingAverage\\\",\\n  \\\"ExponentialPowerDistribution\\\",\\n  \\\"ExponentPosition\\\",\\n  \\\"ExponentStep\\\",\\n  \\\"Export\\\",\\n  \\\"ExportAutoReplacements\\\",\\n  \\\"ExportByteArray\\\",\\n  \\\"ExportForm\\\",\\n  \\\"ExportPacket\\\",\\n  \\\"ExportString\\\",\\n  \\\"Expression\\\",\\n  \\\"ExpressionCell\\\",\\n  \\\"ExpressionGraph\\\",\\n  \\\"ExpressionPacket\\\",\\n  \\\"ExpressionTree\\\",\\n  \\\"ExpressionUUID\\\",\\n  \\\"ExpToTrig\\\",\\n  \\\"ExtendedEntityClass\\\",\\n  \\\"ExtendedGCD\\\",\\n  \\\"Extension\\\",\\n  \\\"ExtentElementFunction\\\",\\n  \\\"ExtentMarkers\\\",\\n  \\\"ExtentSize\\\",\\n  \\\"ExternalBundle\\\",\\n  \\\"ExternalCall\\\",\\n  \\\"ExternalDataCharacterEncoding\\\",\\n  \\\"ExternalEvaluate\\\",\\n  \\\"ExternalFunction\\\",\\n  \\\"ExternalFunctionName\\\",\\n  \\\"ExternalIdentifier\\\",\\n  \\\"ExternalObject\\\",\\n  \\\"ExternalOptions\\\",\\n  \\\"ExternalSessionObject\\\",\\n  \\\"ExternalSessions\\\",\\n  \\\"ExternalStorageBase\\\",\\n  \\\"ExternalStorageDownload\\\",\\n  \\\"ExternalStorageGet\\\",\\n  \\\"ExternalStorageObject\\\",\\n  \\\"ExternalStoragePut\\\",\\n  \\\"ExternalStorageUpload\\\",\\n  \\\"ExternalTypeSignature\\\",\\n  \\\"ExternalValue\\\",\\n  \\\"Extract\\\",\\n  \\\"ExtractArchive\\\",\\n  \\\"ExtractLayer\\\",\\n  \\\"ExtractPacletArchive\\\",\\n  \\\"ExtremeValueDistribution\\\",\\n  \\\"FaceAlign\\\",\\n  \\\"FaceForm\\\",\\n  \\\"FaceGrids\\\",\\n  \\\"FaceGridsStyle\\\",\\n  \\\"FaceRecognize\\\",\\n  \\\"FacialFeatures\\\",\\n  \\\"Factor\\\",\\n  \\\"FactorComplete\\\",\\n  \\\"Factorial\\\",\\n  \\\"Factorial2\\\",\\n  \\\"FactorialMoment\\\",\\n  \\\"FactorialMomentGeneratingFunction\\\",\\n  \\\"FactorialPower\\\",\\n  \\\"FactorInteger\\\",\\n  \\\"FactorList\\\",\\n  \\\"FactorSquareFree\\\",\\n  \\\"FactorSquareFreeList\\\",\\n  \\\"FactorTerms\\\",\\n  \\\"FactorTermsList\\\",\\n  \\\"Fail\\\",\\n  \\\"Failure\\\",\\n  \\\"FailureAction\\\",\\n  \\\"FailureDistribution\\\",\\n  \\\"FailureQ\\\",\\n  \\\"False\\\",\\n  \\\"FareySequence\\\",\\n  \\\"FARIMAProcess\\\",\\n  \\\"FeatureDistance\\\",\\n  \\\"FeatureExtract\\\",\\n  \\\"FeatureExtraction\\\",\\n  \\\"FeatureExtractor\\\",\\n  \\\"FeatureExtractorFunction\\\",\\n  \\\"FeatureImpactPlot\\\",\\n  \\\"FeatureNames\\\",\\n  \\\"FeatureNearest\\\",\\n  \\\"FeatureSpacePlot\\\",\\n  \\\"FeatureSpacePlot3D\\\",\\n  \\\"FeatureTypes\\\",\\n  \\\"FeatureValueDependencyPlot\\\",\\n  \\\"FeatureValueImpactPlot\\\",\\n  \\\"FEDisableConsolePrintPacket\\\",\\n  \\\"FeedbackLinearize\\\",\\n  \\\"FeedbackSector\\\",\\n  \\\"FeedbackSectorStyle\\\",\\n  \\\"FeedbackType\\\",\\n  \\\"FEEnableConsolePrintPacket\\\",\\n  \\\"FetalGrowthData\\\",\\n  \\\"Fibonacci\\\",\\n  \\\"Fibonorial\\\",\\n  \\\"FieldCompletionFunction\\\",\\n  \\\"FieldHint\\\",\\n  \\\"FieldHintStyle\\\",\\n  \\\"FieldMasked\\\",\\n  \\\"FieldSize\\\",\\n  \\\"File\\\",\\n  \\\"FileBaseName\\\",\\n  \\\"FileByteCount\\\",\\n  \\\"FileConvert\\\",\\n  \\\"FileDate\\\",\\n  \\\"FileExistsQ\\\",\\n  \\\"FileExtension\\\",\\n  \\\"FileFormat\\\",\\n  \\\"FileFormatProperties\\\",\\n  \\\"FileFormatQ\\\",\\n  \\\"FileHandler\\\",\\n  \\\"FileHash\\\",\\n  \\\"FileInformation\\\",\\n  \\\"FileName\\\",\\n  \\\"FileNameDepth\\\",\\n  \\\"FileNameDialogSettings\\\",\\n  \\\"FileNameDrop\\\",\\n  \\\"FileNameForms\\\",\\n  \\\"FileNameJoin\\\",\\n  \\\"FileNames\\\",\\n  \\\"FileNameSetter\\\",\\n  \\\"FileNameSplit\\\",\\n  \\\"FileNameTake\\\",\\n  \\\"FileNameToFormatList\\\",\\n  \\\"FilePrint\\\",\\n  \\\"FileSize\\\",\\n  \\\"FileSystemMap\\\",\\n  \\\"FileSystemScan\\\",\\n  \\\"FileSystemTree\\\",\\n  \\\"FileTemplate\\\",\\n  \\\"FileTemplateApply\\\",\\n  \\\"FileType\\\",\\n  \\\"FilledCurve\\\",\\n  \\\"FilledCurveBox\\\",\\n  \\\"FilledCurveBoxOptions\\\",\\n  \\\"FilledTorus\\\",\\n  \\\"FillForm\\\",\\n  \\\"Filling\\\",\\n  \\\"FillingStyle\\\",\\n  \\\"FillingTransform\\\",\\n  \\\"FilteredEntityClass\\\",\\n  \\\"FilterRules\\\",\\n  \\\"FinancialBond\\\",\\n  \\\"FinancialData\\\",\\n  \\\"FinancialDerivative\\\",\\n  \\\"FinancialIndicator\\\",\\n  \\\"Find\\\",\\n  \\\"FindAnomalies\\\",\\n  \\\"FindArgMax\\\",\\n  \\\"FindArgMin\\\",\\n  \\\"FindChannels\\\",\\n  \\\"FindClique\\\",\\n  \\\"FindClusters\\\",\\n  \\\"FindCookies\\\",\\n  \\\"FindCurvePath\\\",\\n  \\\"FindCycle\\\",\\n  \\\"FindDevices\\\",\\n  \\\"FindDistribution\\\",\\n  \\\"FindDistributionParameters\\\",\\n  \\\"FindDivisions\\\",\\n  \\\"FindEdgeColoring\\\",\\n  \\\"FindEdgeCover\\\",\\n  \\\"FindEdgeCut\\\",\\n  \\\"FindEdgeIndependentPaths\\\",\\n  \\\"FindEquationalProof\\\",\\n  \\\"FindEulerianCycle\\\",\\n  \\\"FindExternalEvaluators\\\",\\n  \\\"FindFaces\\\",\\n  \\\"FindFile\\\",\\n  \\\"FindFit\\\",\\n  \\\"FindFormula\\\",\\n  \\\"FindFundamentalCycles\\\",\\n  \\\"FindGeneratingFunction\\\",\\n  \\\"FindGeoLocation\\\",\\n  \\\"FindGeometricConjectures\\\",\\n  \\\"FindGeometricTransform\\\",\\n  \\\"FindGraphCommunities\\\",\\n  \\\"FindGraphIsomorphism\\\",\\n  \\\"FindGraphPartition\\\",\\n  \\\"FindHamiltonianCycle\\\",\\n  \\\"FindHamiltonianPath\\\",\\n  \\\"FindHiddenMarkovStates\\\",\\n  \\\"FindImageText\\\",\\n  \\\"FindIndependentEdgeSet\\\",\\n  \\\"FindIndependentVertexSet\\\",\\n  \\\"FindInstance\\\",\\n  \\\"FindIntegerNullVector\\\",\\n  \\\"FindIsomers\\\",\\n  \\\"FindIsomorphicSubgraph\\\",\\n  \\\"FindKClan\\\",\\n  \\\"FindKClique\\\",\\n  \\\"FindKClub\\\",\\n  \\\"FindKPlex\\\",\\n  \\\"FindLibrary\\\",\\n  \\\"FindLinearRecurrence\\\",\\n  \\\"FindList\\\",\\n  \\\"FindMatchingColor\\\",\\n  \\\"FindMaximum\\\",\\n  \\\"FindMaximumCut\\\",\\n  \\\"FindMaximumFlow\\\",\\n  \\\"FindMaxValue\\\",\\n  \\\"FindMeshDefects\\\",\\n  \\\"FindMinimum\\\",\\n  \\\"FindMinimumCostFlow\\\",\\n  \\\"FindMinimumCut\\\",\\n  \\\"FindMinValue\\\",\\n  \\\"FindMoleculeSubstructure\\\",\\n  \\\"FindPath\\\",\\n  \\\"FindPeaks\\\",\\n  \\\"FindPermutation\\\",\\n  \\\"FindPlanarColoring\\\",\\n  \\\"FindPointProcessParameters\\\",\\n  \\\"FindPostmanTour\\\",\\n  \\\"FindProcessParameters\\\",\\n  \\\"FindRegionTransform\\\",\\n  \\\"FindRepeat\\\",\\n  \\\"FindRoot\\\",\\n  \\\"FindSequenceFunction\\\",\\n  \\\"FindSettings\\\",\\n  \\\"FindShortestPath\\\",\\n  \\\"FindShortestTour\\\",\\n  \\\"FindSpanningTree\\\",\\n  \\\"FindSubgraphIsomorphism\\\",\\n  \\\"FindSystemModelEquilibrium\\\",\\n  \\\"FindTextualAnswer\\\",\\n  \\\"FindThreshold\\\",\\n  \\\"FindTransientRepeat\\\",\\n  \\\"FindVertexColoring\\\",\\n  \\\"FindVertexCover\\\",\\n  \\\"FindVertexCut\\\",\\n  \\\"FindVertexIndependentPaths\\\",\\n  \\\"Fine\\\",\\n  \\\"FinishDynamic\\\",\\n  \\\"FiniteAbelianGroupCount\\\",\\n  \\\"FiniteGroupCount\\\",\\n  \\\"FiniteGroupData\\\",\\n  \\\"First\\\",\\n  \\\"FirstCase\\\",\\n  \\\"FirstPassageTimeDistribution\\\",\\n  \\\"FirstPosition\\\",\\n  \\\"FischerGroupFi22\\\",\\n  \\\"FischerGroupFi23\\\",\\n  \\\"FischerGroupFi24Prime\\\",\\n  \\\"FisherHypergeometricDistribution\\\",\\n  \\\"FisherRatioTest\\\",\\n  \\\"FisherZDistribution\\\",\\n  \\\"Fit\\\",\\n  \\\"FitAll\\\",\\n  \\\"FitRegularization\\\",\\n  \\\"FittedModel\\\",\\n  \\\"FixedOrder\\\",\\n  \\\"FixedPoint\\\",\\n  \\\"FixedPointList\\\",\\n  \\\"FlashSelection\\\",\\n  \\\"Flat\\\",\\n  \\\"FlatShading\\\",\\n  \\\"Flatten\\\",\\n  \\\"FlattenAt\\\",\\n  \\\"FlattenLayer\\\",\\n  \\\"FlatTopWindow\\\",\\n  \\\"FlightData\\\",\\n  \\\"FlipView\\\",\\n  \\\"Floor\\\",\\n  \\\"FlowPolynomial\\\",\\n  \\\"Fold\\\",\\n  \\\"FoldList\\\",\\n  \\\"FoldPair\\\",\\n  \\\"FoldPairList\\\",\\n  \\\"FoldWhile\\\",\\n  \\\"FoldWhileList\\\",\\n  \\\"FollowRedirects\\\",\\n  \\\"Font\\\",\\n  \\\"FontColor\\\",\\n  \\\"FontFamily\\\",\\n  \\\"FontForm\\\",\\n  \\\"FontName\\\",\\n  \\\"FontOpacity\\\",\\n  \\\"FontPostScriptName\\\",\\n  \\\"FontProperties\\\",\\n  \\\"FontReencoding\\\",\\n  \\\"FontSize\\\",\\n  \\\"FontSlant\\\",\\n  \\\"FontSubstitutions\\\",\\n  \\\"FontTracking\\\",\\n  \\\"FontVariations\\\",\\n  \\\"FontWeight\\\",\\n  \\\"For\\\",\\n  \\\"ForAll\\\",\\n  \\\"ForAllType\\\",\\n  \\\"ForceVersionInstall\\\",\\n  \\\"Format\\\",\\n  \\\"FormatRules\\\",\\n  \\\"FormatType\\\",\\n  \\\"FormatTypeAutoConvert\\\",\\n  \\\"FormatValues\\\",\\n  \\\"FormBox\\\",\\n  \\\"FormBoxOptions\\\",\\n  \\\"FormControl\\\",\\n  \\\"FormFunction\\\",\\n  \\\"FormLayoutFunction\\\",\\n  \\\"FormObject\\\",\\n  \\\"FormPage\\\",\\n  \\\"FormProtectionMethod\\\",\\n  \\\"FormTheme\\\",\\n  \\\"FormulaData\\\",\\n  \\\"FormulaLookup\\\",\\n  \\\"FortranForm\\\",\\n  \\\"Forward\\\",\\n  \\\"ForwardBackward\\\",\\n  \\\"ForwardCloudCredentials\\\",\\n  \\\"Fourier\\\",\\n  \\\"FourierCoefficient\\\",\\n  \\\"FourierCosCoefficient\\\",\\n  \\\"FourierCosSeries\\\",\\n  \\\"FourierCosTransform\\\",\\n  \\\"FourierDCT\\\",\\n  \\\"FourierDCTFilter\\\",\\n  \\\"FourierDCTMatrix\\\",\\n  \\\"FourierDST\\\",\\n  \\\"FourierDSTMatrix\\\",\\n  \\\"FourierMatrix\\\",\\n  \\\"FourierParameters\\\",\\n  \\\"FourierSequenceTransform\\\",\\n  \\\"FourierSeries\\\",\\n  \\\"FourierSinCoefficient\\\",\\n  \\\"FourierSinSeries\\\",\\n  \\\"FourierSinTransform\\\",\\n  \\\"FourierTransform\\\",\\n  \\\"FourierTrigSeries\\\",\\n  \\\"FoxH\\\",\\n  \\\"FoxHReduce\\\",\\n  \\\"FractionalBrownianMotionProcess\\\",\\n  \\\"FractionalD\\\",\\n  \\\"FractionalGaussianNoiseProcess\\\",\\n  \\\"FractionalPart\\\",\\n  \\\"FractionBox\\\",\\n  \\\"FractionBoxOptions\\\",\\n  \\\"FractionLine\\\",\\n  \\\"Frame\\\",\\n  \\\"FrameBox\\\",\\n  \\\"FrameBoxOptions\\\",\\n  \\\"Framed\\\",\\n  \\\"FrameInset\\\",\\n  \\\"FrameLabel\\\",\\n  \\\"Frameless\\\",\\n  \\\"FrameListVideo\\\",\\n  \\\"FrameMargins\\\",\\n  \\\"FrameRate\\\",\\n  \\\"FrameStyle\\\",\\n  \\\"FrameTicks\\\",\\n  \\\"FrameTicksStyle\\\",\\n  \\\"FRatioDistribution\\\",\\n  \\\"FrechetDistribution\\\",\\n  \\\"FreeQ\\\",\\n  \\\"FrenetSerretSystem\\\",\\n  \\\"FrequencySamplingFilterKernel\\\",\\n  \\\"FresnelC\\\",\\n  \\\"FresnelF\\\",\\n  \\\"FresnelG\\\",\\n  \\\"FresnelS\\\",\\n  \\\"Friday\\\",\\n  \\\"FrobeniusNumber\\\",\\n  \\\"FrobeniusSolve\\\",\\n  \\\"FromAbsoluteTime\\\",\\n  \\\"FromCharacterCode\\\",\\n  \\\"FromCoefficientRules\\\",\\n  \\\"FromContinuedFraction\\\",\\n  \\\"FromDate\\\",\\n  \\\"FromDateString\\\",\\n  \\\"FromDigits\\\",\\n  \\\"FromDMS\\\",\\n  \\\"FromEntity\\\",\\n  \\\"FromJulianDate\\\",\\n  \\\"FromLetterNumber\\\",\\n  \\\"FromPolarCoordinates\\\",\\n  \\\"FromRawPointer\\\",\\n  \\\"FromRomanNumeral\\\",\\n  \\\"FromSphericalCoordinates\\\",\\n  \\\"FromUnixTime\\\",\\n  \\\"Front\\\",\\n  \\\"FrontEndDynamicExpression\\\",\\n  \\\"FrontEndEventActions\\\",\\n  \\\"FrontEndExecute\\\",\\n  \\\"FrontEndObject\\\",\\n  \\\"FrontEndResource\\\",\\n  \\\"FrontEndResourceString\\\",\\n  \\\"FrontEndStackSize\\\",\\n  \\\"FrontEndToken\\\",\\n  \\\"FrontEndTokenExecute\\\",\\n  \\\"FrontEndValueCache\\\",\\n  \\\"FrontEndVersion\\\",\\n  \\\"FrontFaceColor\\\",\\n  \\\"FrontFaceGlowColor\\\",\\n  \\\"FrontFaceOpacity\\\",\\n  \\\"FrontFaceSpecularColor\\\",\\n  \\\"FrontFaceSpecularExponent\\\",\\n  \\\"FrontFaceSurfaceAppearance\\\",\\n  \\\"FrontFaceTexture\\\",\\n  \\\"Full\\\",\\n  \\\"FullAxes\\\",\\n  \\\"FullDefinition\\\",\\n  \\\"FullForm\\\",\\n  \\\"FullGraphics\\\",\\n  \\\"FullInformationOutputRegulator\\\",\\n  \\\"FullOptions\\\",\\n  \\\"FullRegion\\\",\\n  \\\"FullSimplify\\\",\\n  \\\"Function\\\",\\n  \\\"FunctionAnalytic\\\",\\n  \\\"FunctionBijective\\\",\\n  \\\"FunctionCompile\\\",\\n  \\\"FunctionCompileExport\\\",\\n  \\\"FunctionCompileExportByteArray\\\",\\n  \\\"FunctionCompileExportLibrary\\\",\\n  \\\"FunctionCompileExportString\\\",\\n  \\\"FunctionContinuous\\\",\\n  \\\"FunctionConvexity\\\",\\n  \\\"FunctionDeclaration\\\",\\n  \\\"FunctionDiscontinuities\\\",\\n  \\\"FunctionDomain\\\",\\n  \\\"FunctionExpand\\\",\\n  \\\"FunctionInjective\\\",\\n  \\\"FunctionInterpolation\\\",\\n  \\\"FunctionLayer\\\",\\n  \\\"FunctionMeromorphic\\\",\\n  \\\"FunctionMonotonicity\\\",\\n  \\\"FunctionPeriod\\\",\\n  \\\"FunctionPoles\\\",\\n  \\\"FunctionRange\\\",\\n  \\\"FunctionSign\\\",\\n  \\\"FunctionSingularities\\\",\\n  \\\"FunctionSpace\\\",\\n  \\\"FunctionSurjective\\\",\\n  \\\"FussellVeselyImportance\\\",\\n  \\\"GaborFilter\\\",\\n  \\\"GaborMatrix\\\",\\n  \\\"GaborWavelet\\\",\\n  \\\"GainMargins\\\",\\n  \\\"GainPhaseMargins\\\",\\n  \\\"GalaxyData\\\",\\n  \\\"GalleryView\\\",\\n  \\\"Gamma\\\",\\n  \\\"GammaDistribution\\\",\\n  \\\"GammaRegularized\\\",\\n  \\\"GapPenalty\\\",\\n  \\\"GARCHProcess\\\",\\n  \\\"GatedRecurrentLayer\\\",\\n  \\\"Gather\\\",\\n  \\\"GatherBy\\\",\\n  \\\"GaugeFaceElementFunction\\\",\\n  \\\"GaugeFaceStyle\\\",\\n  \\\"GaugeFrameElementFunction\\\",\\n  \\\"GaugeFrameSize\\\",\\n  \\\"GaugeFrameStyle\\\",\\n  \\\"GaugeLabels\\\",\\n  \\\"GaugeMarkers\\\",\\n  \\\"GaugeStyle\\\",\\n  \\\"GaussianFilter\\\",\\n  \\\"GaussianIntegers\\\",\\n  \\\"GaussianMatrix\\\",\\n  \\\"GaussianOrthogonalMatrixDistribution\\\",\\n  \\\"GaussianSymplecticMatrixDistribution\\\",\\n  \\\"GaussianUnitaryMatrixDistribution\\\",\\n  \\\"GaussianWindow\\\",\\n  \\\"GCD\\\",\\n  \\\"GegenbauerC\\\",\\n  \\\"General\\\",\\n  \\\"GeneralizedLinearModelFit\\\",\\n  \\\"GenerateAsymmetricKeyPair\\\",\\n  \\\"GenerateConditions\\\",\\n  \\\"GeneratedAssetFormat\\\",\\n  \\\"GeneratedAssetLocation\\\",\\n  \\\"GeneratedCell\\\",\\n  \\\"GeneratedCellStyles\\\",\\n  \\\"GeneratedDocumentBinding\\\",\\n  \\\"GenerateDerivedKey\\\",\\n  \\\"GenerateDigitalSignature\\\",\\n  \\\"GenerateDocument\\\",\\n  \\\"GeneratedParameters\\\",\\n  \\\"GeneratedQuantityMagnitudes\\\",\\n  \\\"GenerateFileSignature\\\",\\n  \\\"GenerateHTTPResponse\\\",\\n  \\\"GenerateSecuredAuthenticationKey\\\",\\n  \\\"GenerateSymmetricKey\\\",\\n  \\\"GeneratingFunction\\\",\\n  \\\"GeneratorDescription\\\",\\n  \\\"GeneratorHistoryLength\\\",\\n  \\\"GeneratorOutputType\\\",\\n  \\\"Generic\\\",\\n  \\\"GenericCylindricalDecomposition\\\",\\n  \\\"GenomeData\\\",\\n  \\\"GenomeLookup\\\",\\n  \\\"GeoAntipode\\\",\\n  \\\"GeoArea\\\",\\n  \\\"GeoArraySize\\\",\\n  \\\"GeoBackground\\\",\\n  \\\"GeoBoundary\\\",\\n  \\\"GeoBoundingBox\\\",\\n  \\\"GeoBounds\\\",\\n  \\\"GeoBoundsRegion\\\",\\n  \\\"GeoBoundsRegionBoundary\\\",\\n  \\\"GeoBubbleChart\\\",\\n  \\\"GeoCenter\\\",\\n  \\\"GeoCircle\\\",\\n  \\\"GeoContourPlot\\\",\\n  \\\"GeoDensityPlot\\\",\\n  \\\"GeodesicClosing\\\",\\n  \\\"GeodesicDilation\\\",\\n  \\\"GeodesicErosion\\\",\\n  \\\"GeodesicOpening\\\",\\n  \\\"GeodesicPolyhedron\\\",\\n  \\\"GeoDestination\\\",\\n  \\\"GeodesyData\\\",\\n  \\\"GeoDirection\\\",\\n  \\\"GeoDisk\\\",\\n  \\\"GeoDisplacement\\\",\\n  \\\"GeoDistance\\\",\\n  \\\"GeoDistanceList\\\",\\n  \\\"GeoElevationData\\\",\\n  \\\"GeoEntities\\\",\\n  \\\"GeoGraphics\\\",\\n  \\\"GeoGraphPlot\\\",\\n  \\\"GeoGraphValuePlot\\\",\\n  \\\"GeogravityModelData\\\",\\n  \\\"GeoGridDirectionDifference\\\",\\n  \\\"GeoGridLines\\\",\\n  \\\"GeoGridLinesStyle\\\",\\n  \\\"GeoGridPosition\\\",\\n  \\\"GeoGridRange\\\",\\n  \\\"GeoGridRangePadding\\\",\\n  \\\"GeoGridUnitArea\\\",\\n  \\\"GeoGridUnitDistance\\\",\\n  \\\"GeoGridVector\\\",\\n  \\\"GeoGroup\\\",\\n  \\\"GeoHemisphere\\\",\\n  \\\"GeoHemisphereBoundary\\\",\\n  \\\"GeoHistogram\\\",\\n  \\\"GeoIdentify\\\",\\n  \\\"GeoImage\\\",\\n  \\\"GeoLabels\\\",\\n  \\\"GeoLength\\\",\\n  \\\"GeoListPlot\\\",\\n  \\\"GeoLocation\\\",\\n  \\\"GeologicalPeriodData\\\",\\n  \\\"GeomagneticModelData\\\",\\n  \\\"GeoMarker\\\",\\n  \\\"GeometricAssertion\\\",\\n  \\\"GeometricBrownianMotionProcess\\\",\\n  \\\"GeometricDistribution\\\",\\n  \\\"GeometricMean\\\",\\n  \\\"GeometricMeanFilter\\\",\\n  \\\"GeometricOptimization\\\",\\n  \\\"GeometricScene\\\",\\n  \\\"GeometricStep\\\",\\n  \\\"GeometricStylingRules\\\",\\n  \\\"GeometricTest\\\",\\n  \\\"GeometricTransformation\\\",\\n  \\\"GeometricTransformation3DBox\\\",\\n  \\\"GeometricTransformation3DBoxOptions\\\",\\n  \\\"GeometricTransformationBox\\\",\\n  \\\"GeometricTransformationBoxOptions\\\",\\n  \\\"GeoModel\\\",\\n  \\\"GeoNearest\\\",\\n  \\\"GeoOrientationData\\\",\\n  \\\"GeoPath\\\",\\n  \\\"GeoPolygon\\\",\\n  \\\"GeoPosition\\\",\\n  \\\"GeoPositionENU\\\",\\n  \\\"GeoPositionXYZ\\\",\\n  \\\"GeoProjection\\\",\\n  \\\"GeoProjectionData\\\",\\n  \\\"GeoRange\\\",\\n  \\\"GeoRangePadding\\\",\\n  \\\"GeoRegionValuePlot\\\",\\n  \\\"GeoResolution\\\",\\n  \\\"GeoScaleBar\\\",\\n  \\\"GeoServer\\\",\\n  \\\"GeoSmoothHistogram\\\",\\n  \\\"GeoStreamPlot\\\",\\n  \\\"GeoStyling\\\",\\n  \\\"GeoStylingImageFunction\\\",\\n  \\\"GeoVariant\\\",\\n  \\\"GeoVector\\\",\\n  \\\"GeoVectorENU\\\",\\n  \\\"GeoVectorPlot\\\",\\n  \\\"GeoVectorXYZ\\\",\\n  \\\"GeoVisibleRegion\\\",\\n  \\\"GeoVisibleRegionBoundary\\\",\\n  \\\"GeoWithinQ\\\",\\n  \\\"GeoZoomLevel\\\",\\n  \\\"GestureHandler\\\",\\n  \\\"GestureHandlerTag\\\",\\n  \\\"Get\\\",\\n  \\\"GetContext\\\",\\n  \\\"GetEnvironment\\\",\\n  \\\"GetFileName\\\",\\n  \\\"GetLinebreakInformationPacket\\\",\\n  \\\"GibbsPointProcess\\\",\\n  \\\"Glaisher\\\",\\n  \\\"GlobalClusteringCoefficient\\\",\\n  \\\"GlobalPreferences\\\",\\n  \\\"GlobalSession\\\",\\n  \\\"Glow\\\",\\n  \\\"GoldenAngle\\\",\\n  \\\"GoldenRatio\\\",\\n  \\\"GompertzMakehamDistribution\\\",\\n  \\\"GoochShading\\\",\\n  \\\"GoodmanKruskalGamma\\\",\\n  \\\"GoodmanKruskalGammaTest\\\",\\n  \\\"Goto\\\",\\n  \\\"GouraudShading\\\",\\n  \\\"Grad\\\",\\n  \\\"Gradient\\\",\\n  \\\"GradientFilter\\\",\\n  \\\"GradientFittedMesh\\\",\\n  \\\"GradientOrientationFilter\\\",\\n  \\\"GrammarApply\\\",\\n  \\\"GrammarRules\\\",\\n  \\\"GrammarToken\\\",\\n  \\\"Graph\\\",\\n  \\\"Graph3D\\\",\\n  \\\"GraphAssortativity\\\",\\n  \\\"GraphAutomorphismGroup\\\",\\n  \\\"GraphCenter\\\",\\n  \\\"GraphComplement\\\",\\n  \\\"GraphData\\\",\\n  \\\"GraphDensity\\\",\\n  \\\"GraphDiameter\\\",\\n  \\\"GraphDifference\\\",\\n  \\\"GraphDisjointUnion\\\",\\n  \\\"GraphDistance\\\",\\n  \\\"GraphDistanceMatrix\\\",\\n  \\\"GraphEmbedding\\\",\\n  \\\"GraphHighlight\\\",\\n  \\\"GraphHighlightStyle\\\",\\n  \\\"GraphHub\\\",\\n  \\\"Graphics\\\",\\n  \\\"Graphics3D\\\",\\n  \\\"Graphics3DBox\\\",\\n  \\\"Graphics3DBoxOptions\\\",\\n  \\\"GraphicsArray\\\",\\n  \\\"GraphicsBaseline\\\",\\n  \\\"GraphicsBox\\\",\\n  \\\"GraphicsBoxOptions\\\",\\n  \\\"GraphicsColor\\\",\\n  \\\"GraphicsColumn\\\",\\n  \\\"GraphicsComplex\\\",\\n  \\\"GraphicsComplex3DBox\\\",\\n  \\\"GraphicsComplex3DBoxOptions\\\",\\n  \\\"GraphicsComplexBox\\\",\\n  \\\"GraphicsComplexBoxOptions\\\",\\n  \\\"GraphicsContents\\\",\\n  \\\"GraphicsData\\\",\\n  \\\"GraphicsGrid\\\",\\n  \\\"GraphicsGridBox\\\",\\n  \\\"GraphicsGroup\\\",\\n  \\\"GraphicsGroup3DBox\\\",\\n  \\\"GraphicsGroup3DBoxOptions\\\",\\n  \\\"GraphicsGroupBox\\\",\\n  \\\"GraphicsGroupBoxOptions\\\",\\n  \\\"GraphicsGrouping\\\",\\n  \\\"GraphicsHighlightColor\\\",\\n  \\\"GraphicsRow\\\",\\n  \\\"GraphicsSpacing\\\",\\n  \\\"GraphicsStyle\\\",\\n  \\\"GraphIntersection\\\",\\n  \\\"GraphJoin\\\",\\n  \\\"GraphLayerLabels\\\",\\n  \\\"GraphLayers\\\",\\n  \\\"GraphLayerStyle\\\",\\n  \\\"GraphLayout\\\",\\n  \\\"GraphLinkEfficiency\\\",\\n  \\\"GraphPeriphery\\\",\\n  \\\"GraphPlot\\\",\\n  \\\"GraphPlot3D\\\",\\n  \\\"GraphPower\\\",\\n  \\\"GraphProduct\\\",\\n  \\\"GraphPropertyDistribution\\\",\\n  \\\"GraphQ\\\",\\n  \\\"GraphRadius\\\",\\n  \\\"GraphReciprocity\\\",\\n  \\\"GraphRoot\\\",\\n  \\\"GraphStyle\\\",\\n  \\\"GraphSum\\\",\\n  \\\"GraphTree\\\",\\n  \\\"GraphUnion\\\",\\n  \\\"Gray\\\",\\n  \\\"GrayLevel\\\",\\n  \\\"Greater\\\",\\n  \\\"GreaterEqual\\\",\\n  \\\"GreaterEqualLess\\\",\\n  \\\"GreaterEqualThan\\\",\\n  \\\"GreaterFullEqual\\\",\\n  \\\"GreaterGreater\\\",\\n  \\\"GreaterLess\\\",\\n  \\\"GreaterSlantEqual\\\",\\n  \\\"GreaterThan\\\",\\n  \\\"GreaterTilde\\\",\\n  \\\"GreekStyle\\\",\\n  \\\"Green\\\",\\n  \\\"GreenFunction\\\",\\n  \\\"Grid\\\",\\n  \\\"GridBaseline\\\",\\n  \\\"GridBox\\\",\\n  \\\"GridBoxAlignment\\\",\\n  \\\"GridBoxBackground\\\",\\n  \\\"GridBoxDividers\\\",\\n  \\\"GridBoxFrame\\\",\\n  \\\"GridBoxItemSize\\\",\\n  \\\"GridBoxItemStyle\\\",\\n  \\\"GridBoxOptions\\\",\\n  \\\"GridBoxSpacings\\\",\\n  \\\"GridCreationSettings\\\",\\n  \\\"GridDefaultElement\\\",\\n  \\\"GridElementStyleOptions\\\",\\n  \\\"GridFrame\\\",\\n  \\\"GridFrameMargins\\\",\\n  \\\"GridGraph\\\",\\n  \\\"GridLines\\\",\\n  \\\"GridLinesStyle\\\",\\n  \\\"GridVideo\\\",\\n  \\\"GroebnerBasis\\\",\\n  \\\"GroupActionBase\\\",\\n  \\\"GroupBy\\\",\\n  \\\"GroupCentralizer\\\",\\n  \\\"GroupElementFromWord\\\",\\n  \\\"GroupElementPosition\\\",\\n  \\\"GroupElementQ\\\",\\n  \\\"GroupElements\\\",\\n  \\\"GroupElementToWord\\\",\\n  \\\"GroupGenerators\\\",\\n  \\\"Groupings\\\",\\n  \\\"GroupMultiplicationTable\\\",\\n  \\\"GroupOpenerColor\\\",\\n  \\\"GroupOpenerInsideFrame\\\",\\n  \\\"GroupOrbits\\\",\\n  \\\"GroupOrder\\\",\\n  \\\"GroupPageBreakWithin\\\",\\n  \\\"GroupSetwiseStabilizer\\\",\\n  \\\"GroupStabilizer\\\",\\n  \\\"GroupStabilizerChain\\\",\\n  \\\"GroupTogetherGrouping\\\",\\n  \\\"GroupTogetherNestedGrouping\\\",\\n  \\\"GrowCutComponents\\\",\\n  \\\"Gudermannian\\\",\\n  \\\"GuidedFilter\\\",\\n  \\\"GumbelDistribution\\\",\\n  \\\"HaarWavelet\\\",\\n  \\\"HadamardMatrix\\\",\\n  \\\"HalfLine\\\",\\n  \\\"HalfNormalDistribution\\\",\\n  \\\"HalfPlane\\\",\\n  \\\"HalfSpace\\\",\\n  \\\"HalftoneShading\\\",\\n  \\\"HamiltonianGraphQ\\\",\\n  \\\"HammingDistance\\\",\\n  \\\"HammingWindow\\\",\\n  \\\"HandlerFunctions\\\",\\n  \\\"HandlerFunctionsKeys\\\",\\n  \\\"HankelH1\\\",\\n  \\\"HankelH2\\\",\\n  \\\"HankelMatrix\\\",\\n  \\\"HankelTransform\\\",\\n  \\\"HannPoissonWindow\\\",\\n  \\\"HannWindow\\\",\\n  \\\"HaradaNortonGroupHN\\\",\\n  \\\"HararyGraph\\\",\\n  \\\"HardcorePointProcess\\\",\\n  \\\"HarmonicMean\\\",\\n  \\\"HarmonicMeanFilter\\\",\\n  \\\"HarmonicNumber\\\",\\n  \\\"Hash\\\",\\n  \\\"HatchFilling\\\",\\n  \\\"HatchShading\\\",\\n  \\\"Haversine\\\",\\n  \\\"HazardFunction\\\",\\n  \\\"Head\\\",\\n  \\\"HeadCompose\\\",\\n  \\\"HeaderAlignment\\\",\\n  \\\"HeaderBackground\\\",\\n  \\\"HeaderDisplayFunction\\\",\\n  \\\"HeaderLines\\\",\\n  \\\"Headers\\\",\\n  \\\"HeaderSize\\\",\\n  \\\"HeaderStyle\\\",\\n  \\\"Heads\\\",\\n  \\\"HeatFluxValue\\\",\\n  \\\"HeatInsulationValue\\\",\\n  \\\"HeatOutflowValue\\\",\\n  \\\"HeatRadiationValue\\\",\\n  \\\"HeatSymmetryValue\\\",\\n  \\\"HeatTemperatureCondition\\\",\\n  \\\"HeatTransferPDEComponent\\\",\\n  \\\"HeatTransferValue\\\",\\n  \\\"HeavisideLambda\\\",\\n  \\\"HeavisidePi\\\",\\n  \\\"HeavisideTheta\\\",\\n  \\\"HeldGroupHe\\\",\\n  \\\"HeldPart\\\",\\n  \\\"HelmholtzPDEComponent\\\",\\n  \\\"HelpBrowserLookup\\\",\\n  \\\"HelpBrowserNotebook\\\",\\n  \\\"HelpBrowserSettings\\\",\\n  \\\"HelpViewerSettings\\\",\\n  \\\"Here\\\",\\n  \\\"HermiteDecomposition\\\",\\n  \\\"HermiteH\\\",\\n  \\\"Hermitian\\\",\\n  \\\"HermitianMatrixQ\\\",\\n  \\\"HessenbergDecomposition\\\",\\n  \\\"Hessian\\\",\\n  \\\"HeunB\\\",\\n  \\\"HeunBPrime\\\",\\n  \\\"HeunC\\\",\\n  \\\"HeunCPrime\\\",\\n  \\\"HeunD\\\",\\n  \\\"HeunDPrime\\\",\\n  \\\"HeunG\\\",\\n  \\\"HeunGPrime\\\",\\n  \\\"HeunT\\\",\\n  \\\"HeunTPrime\\\",\\n  \\\"HexadecimalCharacter\\\",\\n  \\\"Hexahedron\\\",\\n  \\\"HexahedronBox\\\",\\n  \\\"HexahedronBoxOptions\\\",\\n  \\\"HiddenItems\\\",\\n  \\\"HiddenMarkovProcess\\\",\\n  \\\"HiddenSurface\\\",\\n  \\\"Highlighted\\\",\\n  \\\"HighlightGraph\\\",\\n  \\\"HighlightImage\\\",\\n  \\\"HighlightMesh\\\",\\n  \\\"HighlightString\\\",\\n  \\\"HighpassFilter\\\",\\n  \\\"HigmanSimsGroupHS\\\",\\n  \\\"HilbertCurve\\\",\\n  \\\"HilbertFilter\\\",\\n  \\\"HilbertMatrix\\\",\\n  \\\"Histogram\\\",\\n  \\\"Histogram3D\\\",\\n  \\\"HistogramDistribution\\\",\\n  \\\"HistogramList\\\",\\n  \\\"HistogramPointDensity\\\",\\n  \\\"HistogramTransform\\\",\\n  \\\"HistogramTransformInterpolation\\\",\\n  \\\"HistoricalPeriodData\\\",\\n  \\\"HitMissTransform\\\",\\n  \\\"HITSCentrality\\\",\\n  \\\"HjorthDistribution\\\",\\n  \\\"HodgeDual\\\",\\n  \\\"HoeffdingD\\\",\\n  \\\"HoeffdingDTest\\\",\\n  \\\"Hold\\\",\\n  \\\"HoldAll\\\",\\n  \\\"HoldAllComplete\\\",\\n  \\\"HoldComplete\\\",\\n  \\\"HoldFirst\\\",\\n  \\\"HoldForm\\\",\\n  \\\"HoldPattern\\\",\\n  \\\"HoldRest\\\",\\n  \\\"HolidayCalendar\\\",\\n  \\\"HomeDirectory\\\",\\n  \\\"HomePage\\\",\\n  \\\"Horizontal\\\",\\n  \\\"HorizontalForm\\\",\\n  \\\"HorizontalGauge\\\",\\n  \\\"HorizontalScrollPosition\\\",\\n  \\\"HornerForm\\\",\\n  \\\"HostLookup\\\",\\n  \\\"HotellingTSquareDistribution\\\",\\n  \\\"HoytDistribution\\\",\\n  \\\"HTMLSave\\\",\\n  \\\"HTTPErrorResponse\\\",\\n  \\\"HTTPRedirect\\\",\\n  \\\"HTTPRequest\\\",\\n  \\\"HTTPRequestData\\\",\\n  \\\"HTTPResponse\\\",\\n  \\\"Hue\\\",\\n  \\\"HumanGrowthData\\\",\\n  \\\"HumpDownHump\\\",\\n  \\\"HumpEqual\\\",\\n  \\\"HurwitzLerchPhi\\\",\\n  \\\"HurwitzZeta\\\",\\n  \\\"HyperbolicDistribution\\\",\\n  \\\"HypercubeGraph\\\",\\n  \\\"HyperexponentialDistribution\\\",\\n  \\\"Hyperfactorial\\\",\\n  \\\"Hypergeometric0F1\\\",\\n  \\\"Hypergeometric0F1Regularized\\\",\\n  \\\"Hypergeometric1F1\\\",\\n  \\\"Hypergeometric1F1Regularized\\\",\\n  \\\"Hypergeometric2F1\\\",\\n  \\\"Hypergeometric2F1Regularized\\\",\\n  \\\"HypergeometricDistribution\\\",\\n  \\\"HypergeometricPFQ\\\",\\n  \\\"HypergeometricPFQRegularized\\\",\\n  \\\"HypergeometricU\\\",\\n  \\\"Hyperlink\\\",\\n  \\\"HyperlinkAction\\\",\\n  \\\"HyperlinkCreationSettings\\\",\\n  \\\"Hyperplane\\\",\\n  \\\"Hyphenation\\\",\\n  \\\"HyphenationOptions\\\",\\n  \\\"HypoexponentialDistribution\\\",\\n  \\\"HypothesisTestData\\\",\\n  \\\"I\\\",\\n  \\\"IconData\\\",\\n  \\\"Iconize\\\",\\n  \\\"IconizedObject\\\",\\n  \\\"IconRules\\\",\\n  \\\"Icosahedron\\\",\\n  \\\"Identity\\\",\\n  \\\"IdentityMatrix\\\",\\n  \\\"If\\\",\\n  \\\"IfCompiled\\\",\\n  \\\"IgnoreCase\\\",\\n  \\\"IgnoreDiacritics\\\",\\n  \\\"IgnoreIsotopes\\\",\\n  \\\"IgnorePunctuation\\\",\\n  \\\"IgnoreSpellCheck\\\",\\n  \\\"IgnoreStereochemistry\\\",\\n  \\\"IgnoringInactive\\\",\\n  \\\"Im\\\",\\n  \\\"Image\\\",\\n  \\\"Image3D\\\",\\n  \\\"Image3DProjection\\\",\\n  \\\"Image3DSlices\\\",\\n  \\\"ImageAccumulate\\\",\\n  \\\"ImageAdd\\\",\\n  \\\"ImageAdjust\\\",\\n  \\\"ImageAlign\\\",\\n  \\\"ImageApply\\\",\\n  \\\"ImageApplyIndexed\\\",\\n  \\\"ImageAspectRatio\\\",\\n  \\\"ImageAssemble\\\",\\n  \\\"ImageAugmentationLayer\\\",\\n  \\\"ImageBoundingBoxes\\\",\\n  \\\"ImageCache\\\",\\n  \\\"ImageCacheValid\\\",\\n  \\\"ImageCapture\\\",\\n  \\\"ImageCaptureFunction\\\",\\n  \\\"ImageCases\\\",\\n  \\\"ImageChannels\\\",\\n  \\\"ImageClip\\\",\\n  \\\"ImageCollage\\\",\\n  \\\"ImageColorSpace\\\",\\n  \\\"ImageCompose\\\",\\n  \\\"ImageContainsQ\\\",\\n  \\\"ImageContents\\\",\\n  \\\"ImageConvolve\\\",\\n  \\\"ImageCooccurrence\\\",\\n  \\\"ImageCorners\\\",\\n  \\\"ImageCorrelate\\\",\\n  \\\"ImageCorrespondingPoints\\\",\\n  \\\"ImageCrop\\\",\\n  \\\"ImageData\\\",\\n  \\\"ImageDeconvolve\\\",\\n  \\\"ImageDemosaic\\\",\\n  \\\"ImageDifference\\\",\\n  \\\"ImageDimensions\\\",\\n  \\\"ImageDisplacements\\\",\\n  \\\"ImageDistance\\\",\\n  \\\"ImageEditMode\\\",\\n  \\\"ImageEffect\\\",\\n  \\\"ImageExposureCombine\\\",\\n  \\\"ImageFeatureTrack\\\",\\n  \\\"ImageFileApply\\\",\\n  \\\"ImageFileFilter\\\",\\n  \\\"ImageFileScan\\\",\\n  \\\"ImageFilter\\\",\\n  \\\"ImageFocusCombine\\\",\\n  \\\"ImageForestingComponents\\\",\\n  \\\"ImageFormattingWidth\\\",\\n  \\\"ImageForwardTransformation\\\",\\n  \\\"ImageGraphics\\\",\\n  \\\"ImageHistogram\\\",\\n  \\\"ImageIdentify\\\",\\n  \\\"ImageInstanceQ\\\",\\n  \\\"ImageKeypoints\\\",\\n  \\\"ImageLabels\\\",\\n  \\\"ImageLegends\\\",\\n  \\\"ImageLevels\\\",\\n  \\\"ImageLines\\\",\\n  \\\"ImageMargins\\\",\\n  \\\"ImageMarker\\\",\\n  \\\"ImageMarkers\\\",\\n  \\\"ImageMeasurements\\\",\\n  \\\"ImageMesh\\\",\\n  \\\"ImageMultiply\\\",\\n  \\\"ImageOffset\\\",\\n  \\\"ImagePad\\\",\\n  \\\"ImagePadding\\\",\\n  \\\"ImagePartition\\\",\\n  \\\"ImagePeriodogram\\\",\\n  \\\"ImagePerspectiveTransformation\\\",\\n  \\\"ImagePosition\\\",\\n  \\\"ImagePreviewFunction\\\",\\n  \\\"ImagePyramid\\\",\\n  \\\"ImagePyramidApply\\\",\\n  \\\"ImageQ\\\",\\n  \\\"ImageRangeCache\\\",\\n  \\\"ImageRecolor\\\",\\n  \\\"ImageReflect\\\",\\n  \\\"ImageRegion\\\",\\n  \\\"ImageResize\\\",\\n  \\\"ImageResolution\\\",\\n  \\\"ImageRestyle\\\",\\n  \\\"ImageRotate\\\",\\n  \\\"ImageRotated\\\",\\n  \\\"ImageSaliencyFilter\\\",\\n  \\\"ImageScaled\\\",\\n  \\\"ImageScan\\\",\\n  \\\"ImageSize\\\",\\n  \\\"ImageSizeAction\\\",\\n  \\\"ImageSizeCache\\\",\\n  \\\"ImageSizeMultipliers\\\",\\n  \\\"ImageSizeRaw\\\",\\n  \\\"ImageStitch\\\",\\n  \\\"ImageSubtract\\\",\\n  \\\"ImageTake\\\",\\n  \\\"ImageTransformation\\\",\\n  \\\"ImageTrim\\\",\\n  \\\"ImageType\\\",\\n  \\\"ImageValue\\\",\\n  \\\"ImageValuePositions\\\",\\n  \\\"ImageVectorscopePlot\\\",\\n  \\\"ImageWaveformPlot\\\",\\n  \\\"ImagingDevice\\\",\\n  \\\"ImplicitD\\\",\\n  \\\"ImplicitRegion\\\",\\n  \\\"Implies\\\",\\n  \\\"Import\\\",\\n  \\\"ImportAutoReplacements\\\",\\n  \\\"ImportByteArray\\\",\\n  \\\"ImportedObject\\\",\\n  \\\"ImportOptions\\\",\\n  \\\"ImportString\\\",\\n  \\\"ImprovementImportance\\\",\\n  \\\"In\\\",\\n  \\\"Inactivate\\\",\\n  \\\"Inactive\\\",\\n  \\\"InactiveStyle\\\",\\n  \\\"IncidenceGraph\\\",\\n  \\\"IncidenceList\\\",\\n  \\\"IncidenceMatrix\\\",\\n  \\\"IncludeAromaticBonds\\\",\\n  \\\"IncludeConstantBasis\\\",\\n  \\\"IncludedContexts\\\",\\n  \\\"IncludeDefinitions\\\",\\n  \\\"IncludeDirectories\\\",\\n  \\\"IncludeFileExtension\\\",\\n  \\\"IncludeGeneratorTasks\\\",\\n  \\\"IncludeHydrogens\\\",\\n  \\\"IncludeInflections\\\",\\n  \\\"IncludeMetaInformation\\\",\\n  \\\"IncludePods\\\",\\n  \\\"IncludeQuantities\\\",\\n  \\\"IncludeRelatedTables\\\",\\n  \\\"IncludeSingularSolutions\\\",\\n  \\\"IncludeSingularTerm\\\",\\n  \\\"IncludeWindowTimes\\\",\\n  \\\"Increment\\\",\\n  \\\"IndefiniteMatrixQ\\\",\\n  \\\"Indent\\\",\\n  \\\"IndentingNewlineSpacings\\\",\\n  \\\"IndentMaxFraction\\\",\\n  \\\"IndependenceTest\\\",\\n  \\\"IndependentEdgeSetQ\\\",\\n  \\\"IndependentPhysicalQuantity\\\",\\n  \\\"IndependentUnit\\\",\\n  \\\"IndependentUnitDimension\\\",\\n  \\\"IndependentVertexSetQ\\\",\\n  \\\"Indeterminate\\\",\\n  \\\"IndeterminateThreshold\\\",\\n  \\\"IndexCreationOptions\\\",\\n  \\\"Indexed\\\",\\n  \\\"IndexEdgeTaggedGraph\\\",\\n  \\\"IndexGraph\\\",\\n  \\\"IndexTag\\\",\\n  \\\"Inequality\\\",\\n  \\\"InertEvaluate\\\",\\n  \\\"InertExpression\\\",\\n  \\\"InexactNumberQ\\\",\\n  \\\"InexactNumbers\\\",\\n  \\\"InfiniteFuture\\\",\\n  \\\"InfiniteLine\\\",\\n  \\\"InfiniteLineThrough\\\",\\n  \\\"InfinitePast\\\",\\n  \\\"InfinitePlane\\\",\\n  \\\"Infinity\\\",\\n  \\\"Infix\\\",\\n  \\\"InflationAdjust\\\",\\n  \\\"InflationMethod\\\",\\n  \\\"Information\\\",\\n  \\\"InformationData\\\",\\n  \\\"InformationDataGrid\\\",\\n  \\\"Inherited\\\",\\n  \\\"InheritScope\\\",\\n  \\\"InhomogeneousPoissonPointProcess\\\",\\n  \\\"InhomogeneousPoissonProcess\\\",\\n  \\\"InitialEvaluationHistory\\\",\\n  \\\"Initialization\\\",\\n  \\\"InitializationCell\\\",\\n  \\\"InitializationCellEvaluation\\\",\\n  \\\"InitializationCellWarning\\\",\\n  \\\"InitializationObject\\\",\\n  \\\"InitializationObjects\\\",\\n  \\\"InitializationValue\\\",\\n  \\\"Initialize\\\",\\n  \\\"InitialSeeding\\\",\\n  \\\"InlineCounterAssignments\\\",\\n  \\\"InlineCounterIncrements\\\",\\n  \\\"InlineRules\\\",\\n  \\\"Inner\\\",\\n  \\\"InnerPolygon\\\",\\n  \\\"InnerPolyhedron\\\",\\n  \\\"Inpaint\\\",\\n  \\\"Input\\\",\\n  \\\"InputAliases\\\",\\n  \\\"InputAssumptions\\\",\\n  \\\"InputAutoReplacements\\\",\\n  \\\"InputField\\\",\\n  \\\"InputFieldBox\\\",\\n  \\\"InputFieldBoxOptions\\\",\\n  \\\"InputForm\\\",\\n  \\\"InputGrouping\\\",\\n  \\\"InputNamePacket\\\",\\n  \\\"InputNotebook\\\",\\n  \\\"InputPacket\\\",\\n  \\\"InputPorts\\\",\\n  \\\"InputSettings\\\",\\n  \\\"InputStream\\\",\\n  \\\"InputString\\\",\\n  \\\"InputStringPacket\\\",\\n  \\\"InputToBoxFormPacket\\\",\\n  \\\"Insert\\\",\\n  \\\"InsertionFunction\\\",\\n  \\\"InsertionPointObject\\\",\\n  \\\"InsertLinebreaks\\\",\\n  \\\"InsertResults\\\",\\n  \\\"Inset\\\",\\n  \\\"Inset3DBox\\\",\\n  \\\"Inset3DBoxOptions\\\",\\n  \\\"InsetBox\\\",\\n  \\\"InsetBoxOptions\\\",\\n  \\\"Insphere\\\",\\n  \\\"Install\\\",\\n  \\\"InstallService\\\",\\n  \\\"InstanceNormalizationLayer\\\",\\n  \\\"InString\\\",\\n  \\\"Integer\\\",\\n  \\\"IntegerDigits\\\",\\n  \\\"IntegerExponent\\\",\\n  \\\"IntegerLength\\\",\\n  \\\"IntegerName\\\",\\n  \\\"IntegerPart\\\",\\n  \\\"IntegerPartitions\\\",\\n  \\\"IntegerQ\\\",\\n  \\\"IntegerReverse\\\",\\n  \\\"Integers\\\",\\n  \\\"IntegerString\\\",\\n  \\\"Integral\\\",\\n  \\\"Integrate\\\",\\n  \\\"IntegrateChangeVariables\\\",\\n  \\\"Interactive\\\",\\n  \\\"InteractiveTradingChart\\\",\\n  \\\"InterfaceSwitched\\\",\\n  \\\"Interlaced\\\",\\n  \\\"Interleaving\\\",\\n  \\\"InternallyBalancedDecomposition\\\",\\n  \\\"InterpolatingFunction\\\",\\n  \\\"InterpolatingPolynomial\\\",\\n  \\\"Interpolation\\\",\\n  \\\"InterpolationOrder\\\",\\n  \\\"InterpolationPoints\\\",\\n  \\\"InterpolationPrecision\\\",\\n  \\\"Interpretation\\\",\\n  \\\"InterpretationBox\\\",\\n  \\\"InterpretationBoxOptions\\\",\\n  \\\"InterpretationFunction\\\",\\n  \\\"Interpreter\\\",\\n  \\\"InterpretTemplate\\\",\\n  \\\"InterquartileRange\\\",\\n  \\\"Interrupt\\\",\\n  \\\"InterruptSettings\\\",\\n  \\\"IntersectedEntityClass\\\",\\n  \\\"IntersectingQ\\\",\\n  \\\"Intersection\\\",\\n  \\\"Interval\\\",\\n  \\\"IntervalIntersection\\\",\\n  \\\"IntervalMarkers\\\",\\n  \\\"IntervalMarkersStyle\\\",\\n  \\\"IntervalMemberQ\\\",\\n  \\\"IntervalSlider\\\",\\n  \\\"IntervalUnion\\\",\\n  \\\"Into\\\",\\n  \\\"Inverse\\\",\\n  \\\"InverseBetaRegularized\\\",\\n  \\\"InverseBilateralLaplaceTransform\\\",\\n  \\\"InverseBilateralZTransform\\\",\\n  \\\"InverseCDF\\\",\\n  \\\"InverseChiSquareDistribution\\\",\\n  \\\"InverseContinuousWaveletTransform\\\",\\n  \\\"InverseDistanceTransform\\\",\\n  \\\"InverseEllipticNomeQ\\\",\\n  \\\"InverseErf\\\",\\n  \\\"InverseErfc\\\",\\n  \\\"InverseFourier\\\",\\n  \\\"InverseFourierCosTransform\\\",\\n  \\\"InverseFourierSequenceTransform\\\",\\n  \\\"InverseFourierSinTransform\\\",\\n  \\\"InverseFourierTransform\\\",\\n  \\\"InverseFunction\\\",\\n  \\\"InverseFunctions\\\",\\n  \\\"InverseGammaDistribution\\\",\\n  \\\"InverseGammaRegularized\\\",\\n  \\\"InverseGaussianDistribution\\\",\\n  \\\"InverseGudermannian\\\",\\n  \\\"InverseHankelTransform\\\",\\n  \\\"InverseHaversine\\\",\\n  \\\"InverseImagePyramid\\\",\\n  \\\"InverseJacobiCD\\\",\\n  \\\"InverseJacobiCN\\\",\\n  \\\"InverseJacobiCS\\\",\\n  \\\"InverseJacobiDC\\\",\\n  \\\"InverseJacobiDN\\\",\\n  \\\"InverseJacobiDS\\\",\\n  \\\"InverseJacobiNC\\\",\\n  \\\"InverseJacobiND\\\",\\n  \\\"InverseJacobiNS\\\",\\n  \\\"InverseJacobiSC\\\",\\n  \\\"InverseJacobiSD\\\",\\n  \\\"InverseJacobiSN\\\",\\n  \\\"InverseLaplaceTransform\\\",\\n  \\\"InverseMellinTransform\\\",\\n  \\\"InversePermutation\\\",\\n  \\\"InverseRadon\\\",\\n  \\\"InverseRadonTransform\\\",\\n  \\\"InverseSeries\\\",\\n  \\\"InverseShortTimeFourier\\\",\\n  \\\"InverseSpectrogram\\\",\\n  \\\"InverseSurvivalFunction\\\",\\n  \\\"InverseTransformedRegion\\\",\\n  \\\"InverseWaveletTransform\\\",\\n  \\\"InverseWeierstrassP\\\",\\n  \\\"InverseWishartMatrixDistribution\\\",\\n  \\\"InverseZTransform\\\",\\n  \\\"Invisible\\\",\\n  \\\"InvisibleApplication\\\",\\n  \\\"InvisibleTimes\\\",\\n  \\\"IPAddress\\\",\\n  \\\"IrreduciblePolynomialQ\\\",\\n  \\\"IslandData\\\",\\n  \\\"IsolatingInterval\\\",\\n  \\\"IsomorphicGraphQ\\\",\\n  \\\"IsomorphicSubgraphQ\\\",\\n  \\\"IsotopeData\\\",\\n  \\\"Italic\\\",\\n  \\\"Item\\\",\\n  \\\"ItemAspectRatio\\\",\\n  \\\"ItemBox\\\",\\n  \\\"ItemBoxOptions\\\",\\n  \\\"ItemDisplayFunction\\\",\\n  \\\"ItemSize\\\",\\n  \\\"ItemStyle\\\",\\n  \\\"ItoProcess\\\",\\n  \\\"JaccardDissimilarity\\\",\\n  \\\"JacobiAmplitude\\\",\\n  \\\"Jacobian\\\",\\n  \\\"JacobiCD\\\",\\n  \\\"JacobiCN\\\",\\n  \\\"JacobiCS\\\",\\n  \\\"JacobiDC\\\",\\n  \\\"JacobiDN\\\",\\n  \\\"JacobiDS\\\",\\n  \\\"JacobiEpsilon\\\",\\n  \\\"JacobiNC\\\",\\n  \\\"JacobiND\\\",\\n  \\\"JacobiNS\\\",\\n  \\\"JacobiP\\\",\\n  \\\"JacobiSC\\\",\\n  \\\"JacobiSD\\\",\\n  \\\"JacobiSN\\\",\\n  \\\"JacobiSymbol\\\",\\n  \\\"JacobiZeta\\\",\\n  \\\"JacobiZN\\\",\\n  \\\"JankoGroupJ1\\\",\\n  \\\"JankoGroupJ2\\\",\\n  \\\"JankoGroupJ3\\\",\\n  \\\"JankoGroupJ4\\\",\\n  \\\"JarqueBeraALMTest\\\",\\n  \\\"JohnsonDistribution\\\",\\n  \\\"Join\\\",\\n  \\\"JoinAcross\\\",\\n  \\\"Joined\\\",\\n  \\\"JoinedCurve\\\",\\n  \\\"JoinedCurveBox\\\",\\n  \\\"JoinedCurveBoxOptions\\\",\\n  \\\"JoinForm\\\",\\n  \\\"JordanDecomposition\\\",\\n  \\\"JordanModelDecomposition\\\",\\n  \\\"JulianDate\\\",\\n  \\\"JuliaSetBoettcher\\\",\\n  \\\"JuliaSetIterationCount\\\",\\n  \\\"JuliaSetPlot\\\",\\n  \\\"JuliaSetPoints\\\",\\n  \\\"K\\\",\\n  \\\"KagiChart\\\",\\n  \\\"KaiserBesselWindow\\\",\\n  \\\"KaiserWindow\\\",\\n  \\\"KalmanEstimator\\\",\\n  \\\"KalmanFilter\\\",\\n  \\\"KarhunenLoeveDecomposition\\\",\\n  \\\"KaryTree\\\",\\n  \\\"KatzCentrality\\\",\\n  \\\"KCoreComponents\\\",\\n  \\\"KDistribution\\\",\\n  \\\"KEdgeConnectedComponents\\\",\\n  \\\"KEdgeConnectedGraphQ\\\",\\n  \\\"KeepExistingVersion\\\",\\n  \\\"KelvinBei\\\",\\n  \\\"KelvinBer\\\",\\n  \\\"KelvinKei\\\",\\n  \\\"KelvinKer\\\",\\n  \\\"KendallTau\\\",\\n  \\\"KendallTauTest\\\",\\n  \\\"KernelConfiguration\\\",\\n  \\\"KernelExecute\\\",\\n  \\\"KernelFunction\\\",\\n  \\\"KernelMixtureDistribution\\\",\\n  \\\"KernelObject\\\",\\n  \\\"Kernels\\\",\\n  \\\"Ket\\\",\\n  \\\"Key\\\",\\n  \\\"KeyCollisionFunction\\\",\\n  \\\"KeyComplement\\\",\\n  \\\"KeyDrop\\\",\\n  \\\"KeyDropFrom\\\",\\n  \\\"KeyExistsQ\\\",\\n  \\\"KeyFreeQ\\\",\\n  \\\"KeyIntersection\\\",\\n  \\\"KeyMap\\\",\\n  \\\"KeyMemberQ\\\",\\n  \\\"KeypointStrength\\\",\\n  \\\"Keys\\\",\\n  \\\"KeySelect\\\",\\n  \\\"KeySort\\\",\\n  \\\"KeySortBy\\\",\\n  \\\"KeyTake\\\",\\n  \\\"KeyUnion\\\",\\n  \\\"KeyValueMap\\\",\\n  \\\"KeyValuePattern\\\",\\n  \\\"Khinchin\\\",\\n  \\\"KillProcess\\\",\\n  \\\"KirchhoffGraph\\\",\\n  \\\"KirchhoffMatrix\\\",\\n  \\\"KleinInvariantJ\\\",\\n  \\\"KnapsackSolve\\\",\\n  \\\"KnightTourGraph\\\",\\n  \\\"KnotData\\\",\\n  \\\"KnownUnitQ\\\",\\n  \\\"KochCurve\\\",\\n  \\\"KolmogorovSmirnovTest\\\",\\n  \\\"KroneckerDelta\\\",\\n  \\\"KroneckerModelDecomposition\\\",\\n  \\\"KroneckerProduct\\\",\\n  \\\"KroneckerSymbol\\\",\\n  \\\"KuiperTest\\\",\\n  \\\"KumaraswamyDistribution\\\",\\n  \\\"Kurtosis\\\",\\n  \\\"KuwaharaFilter\\\",\\n  \\\"KVertexConnectedComponents\\\",\\n  \\\"KVertexConnectedGraphQ\\\",\\n  \\\"LABColor\\\",\\n  \\\"Label\\\",\\n  \\\"Labeled\\\",\\n  \\\"LabeledSlider\\\",\\n  \\\"LabelingFunction\\\",\\n  \\\"LabelingSize\\\",\\n  \\\"LabelStyle\\\",\\n  \\\"LabelVisibility\\\",\\n  \\\"LaguerreL\\\",\\n  \\\"LakeData\\\",\\n  \\\"LambdaComponents\\\",\\n  \\\"LambertW\\\",\\n  \\\"LameC\\\",\\n  \\\"LameCPrime\\\",\\n  \\\"LameEigenvalueA\\\",\\n  \\\"LameEigenvalueB\\\",\\n  \\\"LameS\\\",\\n  \\\"LameSPrime\\\",\\n  \\\"LaminaData\\\",\\n  \\\"LanczosWindow\\\",\\n  \\\"LandauDistribution\\\",\\n  \\\"Language\\\",\\n  \\\"LanguageCategory\\\",\\n  \\\"LanguageData\\\",\\n  \\\"LanguageIdentify\\\",\\n  \\\"LanguageOptions\\\",\\n  \\\"LaplaceDistribution\\\",\\n  \\\"LaplaceTransform\\\",\\n  \\\"Laplacian\\\",\\n  \\\"LaplacianFilter\\\",\\n  \\\"LaplacianGaussianFilter\\\",\\n  \\\"LaplacianPDETerm\\\",\\n  \\\"Large\\\",\\n  \\\"Larger\\\",\\n  \\\"Last\\\",\\n  \\\"Latitude\\\",\\n  \\\"LatitudeLongitude\\\",\\n  \\\"LatticeData\\\",\\n  \\\"LatticeReduce\\\",\\n  \\\"Launch\\\",\\n  \\\"LaunchKernels\\\",\\n  \\\"LayeredGraphPlot\\\",\\n  \\\"LayeredGraphPlot3D\\\",\\n  \\\"LayerSizeFunction\\\",\\n  \\\"LayoutInformation\\\",\\n  \\\"LCHColor\\\",\\n  \\\"LCM\\\",\\n  \\\"LeaderSize\\\",\\n  \\\"LeafCount\\\",\\n  \\\"LeapVariant\\\",\\n  \\\"LeapYearQ\\\",\\n  \\\"LearnDistribution\\\",\\n  \\\"LearnedDistribution\\\",\\n  \\\"LearningRate\\\",\\n  \\\"LearningRateMultipliers\\\",\\n  \\\"LeastSquares\\\",\\n  \\\"LeastSquaresFilterKernel\\\",\\n  \\\"Left\\\",\\n  \\\"LeftArrow\\\",\\n  \\\"LeftArrowBar\\\",\\n  \\\"LeftArrowRightArrow\\\",\\n  \\\"LeftDownTeeVector\\\",\\n  \\\"LeftDownVector\\\",\\n  \\\"LeftDownVectorBar\\\",\\n  \\\"LeftRightArrow\\\",\\n  \\\"LeftRightVector\\\",\\n  \\\"LeftTee\\\",\\n  \\\"LeftTeeArrow\\\",\\n  \\\"LeftTeeVector\\\",\\n  \\\"LeftTriangle\\\",\\n  \\\"LeftTriangleBar\\\",\\n  \\\"LeftTriangleEqual\\\",\\n  \\\"LeftUpDownVector\\\",\\n  \\\"LeftUpTeeVector\\\",\\n  \\\"LeftUpVector\\\",\\n  \\\"LeftUpVectorBar\\\",\\n  \\\"LeftVector\\\",\\n  \\\"LeftVectorBar\\\",\\n  \\\"LegendAppearance\\\",\\n  \\\"Legended\\\",\\n  \\\"LegendFunction\\\",\\n  \\\"LegendLabel\\\",\\n  \\\"LegendLayout\\\",\\n  \\\"LegendMargins\\\",\\n  \\\"LegendMarkers\\\",\\n  \\\"LegendMarkerSize\\\",\\n  \\\"LegendreP\\\",\\n  \\\"LegendreQ\\\",\\n  \\\"LegendreType\\\",\\n  \\\"Length\\\",\\n  \\\"LengthWhile\\\",\\n  \\\"LerchPhi\\\",\\n  \\\"Less\\\",\\n  \\\"LessEqual\\\",\\n  \\\"LessEqualGreater\\\",\\n  \\\"LessEqualThan\\\",\\n  \\\"LessFullEqual\\\",\\n  \\\"LessGreater\\\",\\n  \\\"LessLess\\\",\\n  \\\"LessSlantEqual\\\",\\n  \\\"LessThan\\\",\\n  \\\"LessTilde\\\",\\n  \\\"LetterCharacter\\\",\\n  \\\"LetterCounts\\\",\\n  \\\"LetterNumber\\\",\\n  \\\"LetterQ\\\",\\n  \\\"Level\\\",\\n  \\\"LeveneTest\\\",\\n  \\\"LeviCivitaTensor\\\",\\n  \\\"LevyDistribution\\\",\\n  \\\"Lexicographic\\\",\\n  \\\"LexicographicOrder\\\",\\n  \\\"LexicographicSort\\\",\\n  \\\"LibraryDataType\\\",\\n  \\\"LibraryFunction\\\",\\n  \\\"LibraryFunctionDeclaration\\\",\\n  \\\"LibraryFunctionError\\\",\\n  \\\"LibraryFunctionInformation\\\",\\n  \\\"LibraryFunctionLoad\\\",\\n  \\\"LibraryFunctionUnload\\\",\\n  \\\"LibraryLoad\\\",\\n  \\\"LibraryUnload\\\",\\n  \\\"LicenseEntitlementObject\\\",\\n  \\\"LicenseEntitlements\\\",\\n  \\\"LicenseID\\\",\\n  \\\"LicensingSettings\\\",\\n  \\\"LiftingFilterData\\\",\\n  \\\"LiftingWaveletTransform\\\",\\n  \\\"LightBlue\\\",\\n  \\\"LightBrown\\\",\\n  \\\"LightCyan\\\",\\n  \\\"Lighter\\\",\\n  \\\"LightGray\\\",\\n  \\\"LightGreen\\\",\\n  \\\"Lighting\\\",\\n  \\\"LightingAngle\\\",\\n  \\\"LightMagenta\\\",\\n  \\\"LightOrange\\\",\\n  \\\"LightPink\\\",\\n  \\\"LightPurple\\\",\\n  \\\"LightRed\\\",\\n  \\\"LightSources\\\",\\n  \\\"LightYellow\\\",\\n  \\\"Likelihood\\\",\\n  \\\"Limit\\\",\\n  \\\"LimitsPositioning\\\",\\n  \\\"LimitsPositioningTokens\\\",\\n  \\\"LindleyDistribution\\\",\\n  \\\"Line\\\",\\n  \\\"Line3DBox\\\",\\n  \\\"Line3DBoxOptions\\\",\\n  \\\"LinearFilter\\\",\\n  \\\"LinearFractionalOptimization\\\",\\n  \\\"LinearFractionalTransform\\\",\\n  \\\"LinearGradientFilling\\\",\\n  \\\"LinearGradientImage\\\",\\n  \\\"LinearizingTransformationData\\\",\\n  \\\"LinearLayer\\\",\\n  \\\"LinearModelFit\\\",\\n  \\\"LinearOffsetFunction\\\",\\n  \\\"LinearOptimization\\\",\\n  \\\"LinearProgramming\\\",\\n  \\\"LinearRecurrence\\\",\\n  \\\"LinearSolve\\\",\\n  \\\"LinearSolveFunction\\\",\\n  \\\"LineBox\\\",\\n  \\\"LineBoxOptions\\\",\\n  \\\"LineBreak\\\",\\n  \\\"LinebreakAdjustments\\\",\\n  \\\"LineBreakChart\\\",\\n  \\\"LinebreakSemicolonWeighting\\\",\\n  \\\"LineBreakWithin\\\",\\n  \\\"LineColor\\\",\\n  \\\"LineGraph\\\",\\n  \\\"LineIndent\\\",\\n  \\\"LineIndentMaxFraction\\\",\\n  \\\"LineIntegralConvolutionPlot\\\",\\n  \\\"LineIntegralConvolutionScale\\\",\\n  \\\"LineLegend\\\",\\n  \\\"LineOpacity\\\",\\n  \\\"LineSpacing\\\",\\n  \\\"LineWrapParts\\\",\\n  \\\"LinkActivate\\\",\\n  \\\"LinkClose\\\",\\n  \\\"LinkConnect\\\",\\n  \\\"LinkConnectedQ\\\",\\n  \\\"LinkCreate\\\",\\n  \\\"LinkError\\\",\\n  \\\"LinkFlush\\\",\\n  \\\"LinkFunction\\\",\\n  \\\"LinkHost\\\",\\n  \\\"LinkInterrupt\\\",\\n  \\\"LinkLaunch\\\",\\n  \\\"LinkMode\\\",\\n  \\\"LinkObject\\\",\\n  \\\"LinkOpen\\\",\\n  \\\"LinkOptions\\\",\\n  \\\"LinkPatterns\\\",\\n  \\\"LinkProtocol\\\",\\n  \\\"LinkRankCentrality\\\",\\n  \\\"LinkRead\\\",\\n  \\\"LinkReadHeld\\\",\\n  \\\"LinkReadyQ\\\",\\n  \\\"Links\\\",\\n  \\\"LinkService\\\",\\n  \\\"LinkWrite\\\",\\n  \\\"LinkWriteHeld\\\",\\n  \\\"LiouvilleLambda\\\",\\n  \\\"List\\\",\\n  \\\"Listable\\\",\\n  \\\"ListAnimate\\\",\\n  \\\"ListContourPlot\\\",\\n  \\\"ListContourPlot3D\\\",\\n  \\\"ListConvolve\\\",\\n  \\\"ListCorrelate\\\",\\n  \\\"ListCurvePathPlot\\\",\\n  \\\"ListDeconvolve\\\",\\n  \\\"ListDensityPlot\\\",\\n  \\\"ListDensityPlot3D\\\",\\n  \\\"Listen\\\",\\n  \\\"ListFormat\\\",\\n  \\\"ListFourierSequenceTransform\\\",\\n  \\\"ListInterpolation\\\",\\n  \\\"ListLineIntegralConvolutionPlot\\\",\\n  \\\"ListLinePlot\\\",\\n  \\\"ListLinePlot3D\\\",\\n  \\\"ListLogLinearPlot\\\",\\n  \\\"ListLogLogPlot\\\",\\n  \\\"ListLogPlot\\\",\\n  \\\"ListPicker\\\",\\n  \\\"ListPickerBox\\\",\\n  \\\"ListPickerBoxBackground\\\",\\n  \\\"ListPickerBoxOptions\\\",\\n  \\\"ListPlay\\\",\\n  \\\"ListPlot\\\",\\n  \\\"ListPlot3D\\\",\\n  \\\"ListPointPlot3D\\\",\\n  \\\"ListPolarPlot\\\",\\n  \\\"ListQ\\\",\\n  \\\"ListSliceContourPlot3D\\\",\\n  \\\"ListSliceDensityPlot3D\\\",\\n  \\\"ListSliceVectorPlot3D\\\",\\n  \\\"ListStepPlot\\\",\\n  \\\"ListStreamDensityPlot\\\",\\n  \\\"ListStreamPlot\\\",\\n  \\\"ListStreamPlot3D\\\",\\n  \\\"ListSurfacePlot3D\\\",\\n  \\\"ListVectorDensityPlot\\\",\\n  \\\"ListVectorDisplacementPlot\\\",\\n  \\\"ListVectorDisplacementPlot3D\\\",\\n  \\\"ListVectorPlot\\\",\\n  \\\"ListVectorPlot3D\\\",\\n  \\\"ListZTransform\\\",\\n  \\\"Literal\\\",\\n  \\\"LiteralSearch\\\",\\n  \\\"LiteralType\\\",\\n  \\\"LoadCompiledComponent\\\",\\n  \\\"LocalAdaptiveBinarize\\\",\\n  \\\"LocalCache\\\",\\n  \\\"LocalClusteringCoefficient\\\",\\n  \\\"LocalEvaluate\\\",\\n  \\\"LocalizeDefinitions\\\",\\n  \\\"LocalizeVariables\\\",\\n  \\\"LocalObject\\\",\\n  \\\"LocalObjects\\\",\\n  \\\"LocalResponseNormalizationLayer\\\",\\n  \\\"LocalSubmit\\\",\\n  \\\"LocalSymbol\\\",\\n  \\\"LocalTime\\\",\\n  \\\"LocalTimeZone\\\",\\n  \\\"LocationEquivalenceTest\\\",\\n  \\\"LocationTest\\\",\\n  \\\"Locator\\\",\\n  \\\"LocatorAutoCreate\\\",\\n  \\\"LocatorBox\\\",\\n  \\\"LocatorBoxOptions\\\",\\n  \\\"LocatorCentering\\\",\\n  \\\"LocatorPane\\\",\\n  \\\"LocatorPaneBox\\\",\\n  \\\"LocatorPaneBoxOptions\\\",\\n  \\\"LocatorRegion\\\",\\n  \\\"Locked\\\",\\n  \\\"Log\\\",\\n  \\\"Log10\\\",\\n  \\\"Log2\\\",\\n  \\\"LogBarnesG\\\",\\n  \\\"LogGamma\\\",\\n  \\\"LogGammaDistribution\\\",\\n  \\\"LogicalExpand\\\",\\n  \\\"LogIntegral\\\",\\n  \\\"LogisticDistribution\\\",\\n  \\\"LogisticSigmoid\\\",\\n  \\\"LogitModelFit\\\",\\n  \\\"LogLikelihood\\\",\\n  \\\"LogLinearPlot\\\",\\n  \\\"LogLogisticDistribution\\\",\\n  \\\"LogLogPlot\\\",\\n  \\\"LogMultinormalDistribution\\\",\\n  \\\"LogNormalDistribution\\\",\\n  \\\"LogPlot\\\",\\n  \\\"LogRankTest\\\",\\n  \\\"LogSeriesDistribution\\\",\\n  \\\"LongEqual\\\",\\n  \\\"Longest\\\",\\n  \\\"LongestCommonSequence\\\",\\n  \\\"LongestCommonSequencePositions\\\",\\n  \\\"LongestCommonSubsequence\\\",\\n  \\\"LongestCommonSubsequencePositions\\\",\\n  \\\"LongestMatch\\\",\\n  \\\"LongestOrderedSequence\\\",\\n  \\\"LongForm\\\",\\n  \\\"Longitude\\\",\\n  \\\"LongLeftArrow\\\",\\n  \\\"LongLeftRightArrow\\\",\\n  \\\"LongRightArrow\\\",\\n  \\\"LongShortTermMemoryLayer\\\",\\n  \\\"Lookup\\\",\\n  \\\"Loopback\\\",\\n  \\\"LoopFreeGraphQ\\\",\\n  \\\"Looping\\\",\\n  \\\"LossFunction\\\",\\n  \\\"LowerCaseQ\\\",\\n  \\\"LowerLeftArrow\\\",\\n  \\\"LowerRightArrow\\\",\\n  \\\"LowerTriangularize\\\",\\n  \\\"LowerTriangularMatrix\\\",\\n  \\\"LowerTriangularMatrixQ\\\",\\n  \\\"LowpassFilter\\\",\\n  \\\"LQEstimatorGains\\\",\\n  \\\"LQGRegulator\\\",\\n  \\\"LQOutputRegulatorGains\\\",\\n  \\\"LQRegulatorGains\\\",\\n  \\\"LUBackSubstitution\\\",\\n  \\\"LucasL\\\",\\n  \\\"LuccioSamiComponents\\\",\\n  \\\"LUDecomposition\\\",\\n  \\\"LunarEclipse\\\",\\n  \\\"LUVColor\\\",\\n  \\\"LyapunovSolve\\\",\\n  \\\"LyonsGroupLy\\\",\\n  \\\"MachineID\\\",\\n  \\\"MachineName\\\",\\n  \\\"MachineNumberQ\\\",\\n  \\\"MachinePrecision\\\",\\n  \\\"MacintoshSystemPageSetup\\\",\\n  \\\"Magenta\\\",\\n  \\\"Magnification\\\",\\n  \\\"Magnify\\\",\\n  \\\"MailAddressValidation\\\",\\n  \\\"MailExecute\\\",\\n  \\\"MailFolder\\\",\\n  \\\"MailItem\\\",\\n  \\\"MailReceiverFunction\\\",\\n  \\\"MailResponseFunction\\\",\\n  \\\"MailSearch\\\",\\n  \\\"MailServerConnect\\\",\\n  \\\"MailServerConnection\\\",\\n  \\\"MailSettings\\\",\\n  \\\"MainSolve\\\",\\n  \\\"MaintainDynamicCaches\\\",\\n  \\\"Majority\\\",\\n  \\\"MakeBoxes\\\",\\n  \\\"MakeExpression\\\",\\n  \\\"MakeRules\\\",\\n  \\\"ManagedLibraryExpressionID\\\",\\n  \\\"ManagedLibraryExpressionQ\\\",\\n  \\\"MandelbrotSetBoettcher\\\",\\n  \\\"MandelbrotSetDistance\\\",\\n  \\\"MandelbrotSetIterationCount\\\",\\n  \\\"MandelbrotSetMemberQ\\\",\\n  \\\"MandelbrotSetPlot\\\",\\n  \\\"MangoldtLambda\\\",\\n  \\\"ManhattanDistance\\\",\\n  \\\"Manipulate\\\",\\n  \\\"Manipulator\\\",\\n  \\\"MannedSpaceMissionData\\\",\\n  \\\"MannWhitneyTest\\\",\\n  \\\"MantissaExponent\\\",\\n  \\\"Manual\\\",\\n  \\\"Map\\\",\\n  \\\"MapAll\\\",\\n  \\\"MapApply\\\",\\n  \\\"MapAt\\\",\\n  \\\"MapIndexed\\\",\\n  \\\"MAProcess\\\",\\n  \\\"MapThread\\\",\\n  \\\"MarchenkoPasturDistribution\\\",\\n  \\\"MarcumQ\\\",\\n  \\\"MardiaCombinedTest\\\",\\n  \\\"MardiaKurtosisTest\\\",\\n  \\\"MardiaSkewnessTest\\\",\\n  \\\"MarginalDistribution\\\",\\n  \\\"MarkovProcessProperties\\\",\\n  \\\"Masking\\\",\\n  \\\"MassConcentrationCondition\\\",\\n  \\\"MassFluxValue\\\",\\n  \\\"MassImpermeableBoundaryValue\\\",\\n  \\\"MassOutflowValue\\\",\\n  \\\"MassSymmetryValue\\\",\\n  \\\"MassTransferValue\\\",\\n  \\\"MassTransportPDEComponent\\\",\\n  \\\"MatchingDissimilarity\\\",\\n  \\\"MatchLocalNameQ\\\",\\n  \\\"MatchLocalNames\\\",\\n  \\\"MatchQ\\\",\\n  \\\"Material\\\",\\n  \\\"MaterialShading\\\",\\n  \\\"MaternPointProcess\\\",\\n  \\\"MathematicalFunctionData\\\",\\n  \\\"MathematicaNotation\\\",\\n  \\\"MathieuC\\\",\\n  \\\"MathieuCharacteristicA\\\",\\n  \\\"MathieuCharacteristicB\\\",\\n  \\\"MathieuCharacteristicExponent\\\",\\n  \\\"MathieuCPrime\\\",\\n  \\\"MathieuGroupM11\\\",\\n  \\\"MathieuGroupM12\\\",\\n  \\\"MathieuGroupM22\\\",\\n  \\\"MathieuGroupM23\\\",\\n  \\\"MathieuGroupM24\\\",\\n  \\\"MathieuS\\\",\\n  \\\"MathieuSPrime\\\",\\n  \\\"MathMLForm\\\",\\n  \\\"MathMLText\\\",\\n  \\\"Matrices\\\",\\n  \\\"MatrixExp\\\",\\n  \\\"MatrixForm\\\",\\n  \\\"MatrixFunction\\\",\\n  \\\"MatrixLog\\\",\\n  \\\"MatrixNormalDistribution\\\",\\n  \\\"MatrixPlot\\\",\\n  \\\"MatrixPower\\\",\\n  \\\"MatrixPropertyDistribution\\\",\\n  \\\"MatrixQ\\\",\\n  \\\"MatrixRank\\\",\\n  \\\"MatrixTDistribution\\\",\\n  \\\"Max\\\",\\n  \\\"MaxBend\\\",\\n  \\\"MaxCellMeasure\\\",\\n  \\\"MaxColorDistance\\\",\\n  \\\"MaxDate\\\",\\n  \\\"MaxDetect\\\",\\n  \\\"MaxDisplayedChildren\\\",\\n  \\\"MaxDuration\\\",\\n  \\\"MaxExtraBandwidths\\\",\\n  \\\"MaxExtraConditions\\\",\\n  \\\"MaxFeatureDisplacement\\\",\\n  \\\"MaxFeatures\\\",\\n  \\\"MaxFilter\\\",\\n  \\\"MaximalBy\\\",\\n  \\\"Maximize\\\",\\n  \\\"MaxItems\\\",\\n  \\\"MaxIterations\\\",\\n  \\\"MaxLimit\\\",\\n  \\\"MaxMemoryUsed\\\",\\n  \\\"MaxMixtureKernels\\\",\\n  \\\"MaxOverlapFraction\\\",\\n  \\\"MaxPlotPoints\\\",\\n  \\\"MaxPoints\\\",\\n  \\\"MaxRecursion\\\",\\n  \\\"MaxStableDistribution\\\",\\n  \\\"MaxStepFraction\\\",\\n  \\\"MaxSteps\\\",\\n  \\\"MaxStepSize\\\",\\n  \\\"MaxTrainingRounds\\\",\\n  \\\"MaxValue\\\",\\n  \\\"MaxwellDistribution\\\",\\n  \\\"MaxWordGap\\\",\\n  \\\"McLaughlinGroupMcL\\\",\\n  \\\"Mean\\\",\\n  \\\"MeanAbsoluteLossLayer\\\",\\n  \\\"MeanAround\\\",\\n  \\\"MeanClusteringCoefficient\\\",\\n  \\\"MeanDegreeConnectivity\\\",\\n  \\\"MeanDeviation\\\",\\n  \\\"MeanFilter\\\",\\n  \\\"MeanGraphDistance\\\",\\n  \\\"MeanNeighborDegree\\\",\\n  \\\"MeanPointDensity\\\",\\n  \\\"MeanShift\\\",\\n  \\\"MeanShiftFilter\\\",\\n  \\\"MeanSquaredLossLayer\\\",\\n  \\\"Median\\\",\\n  \\\"MedianDeviation\\\",\\n  \\\"MedianFilter\\\",\\n  \\\"MedicalTestData\\\",\\n  \\\"Medium\\\",\\n  \\\"MeijerG\\\",\\n  \\\"MeijerGReduce\\\",\\n  \\\"MeixnerDistribution\\\",\\n  \\\"MellinConvolve\\\",\\n  \\\"MellinTransform\\\",\\n  \\\"MemberQ\\\",\\n  \\\"MemoryAvailable\\\",\\n  \\\"MemoryConstrained\\\",\\n  \\\"MemoryConstraint\\\",\\n  \\\"MemoryInUse\\\",\\n  \\\"MengerMesh\\\",\\n  \\\"Menu\\\",\\n  \\\"MenuAppearance\\\",\\n  \\\"MenuCommandKey\\\",\\n  \\\"MenuEvaluator\\\",\\n  \\\"MenuItem\\\",\\n  \\\"MenuList\\\",\\n  \\\"MenuPacket\\\",\\n  \\\"MenuSortingValue\\\",\\n  \\\"MenuStyle\\\",\\n  \\\"MenuView\\\",\\n  \\\"Merge\\\",\\n  \\\"MergeDifferences\\\",\\n  \\\"MergingFunction\\\",\\n  \\\"MersennePrimeExponent\\\",\\n  \\\"MersennePrimeExponentQ\\\",\\n  \\\"Mesh\\\",\\n  \\\"MeshCellCentroid\\\",\\n  \\\"MeshCellCount\\\",\\n  \\\"MeshCellHighlight\\\",\\n  \\\"MeshCellIndex\\\",\\n  \\\"MeshCellLabel\\\",\\n  \\\"MeshCellMarker\\\",\\n  \\\"MeshCellMeasure\\\",\\n  \\\"MeshCellQuality\\\",\\n  \\\"MeshCells\\\",\\n  \\\"MeshCellShapeFunction\\\",\\n  \\\"MeshCellStyle\\\",\\n  \\\"MeshConnectivityGraph\\\",\\n  \\\"MeshCoordinates\\\",\\n  \\\"MeshFunctions\\\",\\n  \\\"MeshPrimitives\\\",\\n  \\\"MeshQualityGoal\\\",\\n  \\\"MeshRange\\\",\\n  \\\"MeshRefinementFunction\\\",\\n  \\\"MeshRegion\\\",\\n  \\\"MeshRegionQ\\\",\\n  \\\"MeshShading\\\",\\n  \\\"MeshStyle\\\",\\n  \\\"Message\\\",\\n  \\\"MessageDialog\\\",\\n  \\\"MessageList\\\",\\n  \\\"MessageName\\\",\\n  \\\"MessageObject\\\",\\n  \\\"MessageOptions\\\",\\n  \\\"MessagePacket\\\",\\n  \\\"Messages\\\",\\n  \\\"MessagesNotebook\\\",\\n  \\\"MetaCharacters\\\",\\n  \\\"MetaInformation\\\",\\n  \\\"MeteorShowerData\\\",\\n  \\\"Method\\\",\\n  \\\"MethodOptions\\\",\\n  \\\"MexicanHatWavelet\\\",\\n  \\\"MeyerWavelet\\\",\\n  \\\"Midpoint\\\",\\n  \\\"MIMETypeToFormatList\\\",\\n  \\\"Min\\\",\\n  \\\"MinColorDistance\\\",\\n  \\\"MinDate\\\",\\n  \\\"MinDetect\\\",\\n  \\\"MineralData\\\",\\n  \\\"MinFilter\\\",\\n  \\\"MinimalBy\\\",\\n  \\\"MinimalPolynomial\\\",\\n  \\\"MinimalStateSpaceModel\\\",\\n  \\\"Minimize\\\",\\n  \\\"MinimumTimeIncrement\\\",\\n  \\\"MinIntervalSize\\\",\\n  \\\"MinkowskiQuestionMark\\\",\\n  \\\"MinLimit\\\",\\n  \\\"MinMax\\\",\\n  \\\"MinorPlanetData\\\",\\n  \\\"Minors\\\",\\n  \\\"MinPointSeparation\\\",\\n  \\\"MinRecursion\\\",\\n  \\\"MinSize\\\",\\n  \\\"MinStableDistribution\\\",\\n  \\\"Minus\\\",\\n  \\\"MinusPlus\\\",\\n  \\\"MinValue\\\",\\n  \\\"Missing\\\",\\n  \\\"MissingBehavior\\\",\\n  \\\"MissingDataMethod\\\",\\n  \\\"MissingDataRules\\\",\\n  \\\"MissingQ\\\",\\n  \\\"MissingString\\\",\\n  \\\"MissingStyle\\\",\\n  \\\"MissingValuePattern\\\",\\n  \\\"MissingValueSynthesis\\\",\\n  \\\"MittagLefflerE\\\",\\n  \\\"MixedFractionParts\\\",\\n  \\\"MixedGraphQ\\\",\\n  \\\"MixedMagnitude\\\",\\n  \\\"MixedRadix\\\",\\n  \\\"MixedRadixQuantity\\\",\\n  \\\"MixedUnit\\\",\\n  \\\"MixtureDistribution\\\",\\n  \\\"Mod\\\",\\n  \\\"Modal\\\",\\n  \\\"Mode\\\",\\n  \\\"ModelPredictiveController\\\",\\n  \\\"Modular\\\",\\n  \\\"ModularInverse\\\",\\n  \\\"ModularLambda\\\",\\n  \\\"Module\\\",\\n  \\\"Modulus\\\",\\n  \\\"MoebiusMu\\\",\\n  \\\"Molecule\\\",\\n  \\\"MoleculeAlign\\\",\\n  \\\"MoleculeContainsQ\\\",\\n  \\\"MoleculeDraw\\\",\\n  \\\"MoleculeEquivalentQ\\\",\\n  \\\"MoleculeFreeQ\\\",\\n  \\\"MoleculeGraph\\\",\\n  \\\"MoleculeMatchQ\\\",\\n  \\\"MoleculeMaximumCommonSubstructure\\\",\\n  \\\"MoleculeModify\\\",\\n  \\\"MoleculeName\\\",\\n  \\\"MoleculePattern\\\",\\n  \\\"MoleculePlot\\\",\\n  \\\"MoleculePlot3D\\\",\\n  \\\"MoleculeProperty\\\",\\n  \\\"MoleculeQ\\\",\\n  \\\"MoleculeRecognize\\\",\\n  \\\"MoleculeSubstructureCount\\\",\\n  \\\"MoleculeValue\\\",\\n  \\\"Moment\\\",\\n  \\\"MomentConvert\\\",\\n  \\\"MomentEvaluate\\\",\\n  \\\"MomentGeneratingFunction\\\",\\n  \\\"MomentOfInertia\\\",\\n  \\\"Monday\\\",\\n  \\\"Monitor\\\",\\n  \\\"MonomialList\\\",\\n  \\\"MonomialOrder\\\",\\n  \\\"MonsterGroupM\\\",\\n  \\\"MoonPhase\\\",\\n  \\\"MoonPosition\\\",\\n  \\\"MorletWavelet\\\",\\n  \\\"MorphologicalBinarize\\\",\\n  \\\"MorphologicalBranchPoints\\\",\\n  \\\"MorphologicalComponents\\\",\\n  \\\"MorphologicalEulerNumber\\\",\\n  \\\"MorphologicalGraph\\\",\\n  \\\"MorphologicalPerimeter\\\",\\n  \\\"MorphologicalTransform\\\",\\n  \\\"MortalityData\\\",\\n  \\\"Most\\\",\\n  \\\"MountainData\\\",\\n  \\\"MouseAnnotation\\\",\\n  \\\"MouseAppearance\\\",\\n  \\\"MouseAppearanceTag\\\",\\n  \\\"MouseButtons\\\",\\n  \\\"Mouseover\\\",\\n  \\\"MousePointerNote\\\",\\n  \\\"MousePosition\\\",\\n  \\\"MovieData\\\",\\n  \\\"MovingAverage\\\",\\n  \\\"MovingMap\\\",\\n  \\\"MovingMedian\\\",\\n  \\\"MoyalDistribution\\\",\\n  \\\"MultiaxisArrangement\\\",\\n  \\\"Multicolumn\\\",\\n  \\\"MultiedgeStyle\\\",\\n  \\\"MultigraphQ\\\",\\n  \\\"MultilaunchWarning\\\",\\n  \\\"MultiLetterItalics\\\",\\n  \\\"MultiLetterStyle\\\",\\n  \\\"MultilineFunction\\\",\\n  \\\"Multinomial\\\",\\n  \\\"MultinomialDistribution\\\",\\n  \\\"MultinormalDistribution\\\",\\n  \\\"MultiplicativeOrder\\\",\\n  \\\"Multiplicity\\\",\\n  \\\"MultiplySides\\\",\\n  \\\"MultiscriptBoxOptions\\\",\\n  \\\"Multiselection\\\",\\n  \\\"MultivariateHypergeometricDistribution\\\",\\n  \\\"MultivariatePoissonDistribution\\\",\\n  \\\"MultivariateTDistribution\\\",\\n  \\\"N\\\",\\n  \\\"NakagamiDistribution\\\",\\n  \\\"NameQ\\\",\\n  \\\"Names\\\",\\n  \\\"NamespaceBox\\\",\\n  \\\"NamespaceBoxOptions\\\",\\n  \\\"Nand\\\",\\n  \\\"NArgMax\\\",\\n  \\\"NArgMin\\\",\\n  \\\"NBernoulliB\\\",\\n  \\\"NBodySimulation\\\",\\n  \\\"NBodySimulationData\\\",\\n  \\\"NCache\\\",\\n  \\\"NCaputoD\\\",\\n  \\\"NDEigensystem\\\",\\n  \\\"NDEigenvalues\\\",\\n  \\\"NDSolve\\\",\\n  \\\"NDSolveValue\\\",\\n  \\\"Nearest\\\",\\n  \\\"NearestFunction\\\",\\n  \\\"NearestMeshCells\\\",\\n  \\\"NearestNeighborG\\\",\\n  \\\"NearestNeighborGraph\\\",\\n  \\\"NearestTo\\\",\\n  \\\"NebulaData\\\",\\n  \\\"NeedlemanWunschSimilarity\\\",\\n  \\\"Needs\\\",\\n  \\\"Negative\\\",\\n  \\\"NegativeBinomialDistribution\\\",\\n  \\\"NegativeDefiniteMatrixQ\\\",\\n  \\\"NegativeIntegers\\\",\\n  \\\"NegativelyOrientedPoints\\\",\\n  \\\"NegativeMultinomialDistribution\\\",\\n  \\\"NegativeRationals\\\",\\n  \\\"NegativeReals\\\",\\n  \\\"NegativeSemidefiniteMatrixQ\\\",\\n  \\\"NeighborhoodData\\\",\\n  \\\"NeighborhoodGraph\\\",\\n  \\\"Nest\\\",\\n  \\\"NestedGreaterGreater\\\",\\n  \\\"NestedLessLess\\\",\\n  \\\"NestedScriptRules\\\",\\n  \\\"NestGraph\\\",\\n  \\\"NestList\\\",\\n  \\\"NestTree\\\",\\n  \\\"NestWhile\\\",\\n  \\\"NestWhileList\\\",\\n  \\\"NetAppend\\\",\\n  \\\"NetArray\\\",\\n  \\\"NetArrayLayer\\\",\\n  \\\"NetBidirectionalOperator\\\",\\n  \\\"NetChain\\\",\\n  \\\"NetDecoder\\\",\\n  \\\"NetDelete\\\",\\n  \\\"NetDrop\\\",\\n  \\\"NetEncoder\\\",\\n  \\\"NetEvaluationMode\\\",\\n  \\\"NetExternalObject\\\",\\n  \\\"NetExtract\\\",\\n  \\\"NetFlatten\\\",\\n  \\\"NetFoldOperator\\\",\\n  \\\"NetGANOperator\\\",\\n  \\\"NetGraph\\\",\\n  \\\"NetInformation\\\",\\n  \\\"NetInitialize\\\",\\n  \\\"NetInsert\\\",\\n  \\\"NetInsertSharedArrays\\\",\\n  \\\"NetJoin\\\",\\n  \\\"NetMapOperator\\\",\\n  \\\"NetMapThreadOperator\\\",\\n  \\\"NetMeasurements\\\",\\n  \\\"NetModel\\\",\\n  \\\"NetNestOperator\\\",\\n  \\\"NetPairEmbeddingOperator\\\",\\n  \\\"NetPort\\\",\\n  \\\"NetPortGradient\\\",\\n  \\\"NetPrepend\\\",\\n  \\\"NetRename\\\",\\n  \\\"NetReplace\\\",\\n  \\\"NetReplacePart\\\",\\n  \\\"NetSharedArray\\\",\\n  \\\"NetStateObject\\\",\\n  \\\"NetTake\\\",\\n  \\\"NetTrain\\\",\\n  \\\"NetTrainResultsObject\\\",\\n  \\\"NetUnfold\\\",\\n  \\\"NetworkPacketCapture\\\",\\n  \\\"NetworkPacketRecording\\\",\\n  \\\"NetworkPacketRecordingDuring\\\",\\n  \\\"NetworkPacketTrace\\\",\\n  \\\"NeumannValue\\\",\\n  \\\"NevilleThetaC\\\",\\n  \\\"NevilleThetaD\\\",\\n  \\\"NevilleThetaN\\\",\\n  \\\"NevilleThetaS\\\",\\n  \\\"NewPrimitiveStyle\\\",\\n  \\\"NExpectation\\\",\\n  \\\"Next\\\",\\n  \\\"NextCell\\\",\\n  \\\"NextDate\\\",\\n  \\\"NextPrime\\\",\\n  \\\"NextScheduledTaskTime\\\",\\n  \\\"NeymanScottPointProcess\\\",\\n  \\\"NFractionalD\\\",\\n  \\\"NHoldAll\\\",\\n  \\\"NHoldFirst\\\",\\n  \\\"NHoldRest\\\",\\n  \\\"NicholsGridLines\\\",\\n  \\\"NicholsPlot\\\",\\n  \\\"NightHemisphere\\\",\\n  \\\"NIntegrate\\\",\\n  \\\"NMaximize\\\",\\n  \\\"NMaxValue\\\",\\n  \\\"NMinimize\\\",\\n  \\\"NMinValue\\\",\\n  \\\"NominalScale\\\",\\n  \\\"NominalVariables\\\",\\n  \\\"NonAssociative\\\",\\n  \\\"NoncentralBetaDistribution\\\",\\n  \\\"NoncentralChiSquareDistribution\\\",\\n  \\\"NoncentralFRatioDistribution\\\",\\n  \\\"NoncentralStudentTDistribution\\\",\\n  \\\"NonCommutativeMultiply\\\",\\n  \\\"NonConstants\\\",\\n  \\\"NondimensionalizationTransform\\\",\\n  \\\"None\\\",\\n  \\\"NoneTrue\\\",\\n  \\\"NonlinearModelFit\\\",\\n  \\\"NonlinearStateSpaceModel\\\",\\n  \\\"NonlocalMeansFilter\\\",\\n  \\\"NonNegative\\\",\\n  \\\"NonNegativeIntegers\\\",\\n  \\\"NonNegativeRationals\\\",\\n  \\\"NonNegativeReals\\\",\\n  \\\"NonPositive\\\",\\n  \\\"NonPositiveIntegers\\\",\\n  \\\"NonPositiveRationals\\\",\\n  \\\"NonPositiveReals\\\",\\n  \\\"Nor\\\",\\n  \\\"NorlundB\\\",\\n  \\\"Norm\\\",\\n  \\\"Normal\\\",\\n  \\\"NormalDistribution\\\",\\n  \\\"NormalGrouping\\\",\\n  \\\"NormalizationLayer\\\",\\n  \\\"Normalize\\\",\\n  \\\"Normalized\\\",\\n  \\\"NormalizedSquaredEuclideanDistance\\\",\\n  \\\"NormalMatrixQ\\\",\\n  \\\"NormalsFunction\\\",\\n  \\\"NormFunction\\\",\\n  \\\"Not\\\",\\n  \\\"NotCongruent\\\",\\n  \\\"NotCupCap\\\",\\n  \\\"NotDoubleVerticalBar\\\",\\n  \\\"Notebook\\\",\\n  \\\"NotebookApply\\\",\\n  \\\"NotebookAutoSave\\\",\\n  \\\"NotebookBrowseDirectory\\\",\\n  \\\"NotebookClose\\\",\\n  \\\"NotebookConvertSettings\\\",\\n  \\\"NotebookCreate\\\",\\n  \\\"NotebookDefault\\\",\\n  \\\"NotebookDelete\\\",\\n  \\\"NotebookDirectory\\\",\\n  \\\"NotebookDynamicExpression\\\",\\n  \\\"NotebookEvaluate\\\",\\n  \\\"NotebookEventActions\\\",\\n  \\\"NotebookFileName\\\",\\n  \\\"NotebookFind\\\",\\n  \\\"NotebookGet\\\",\\n  \\\"NotebookImport\\\",\\n  \\\"NotebookInformation\\\",\\n  \\\"NotebookInterfaceObject\\\",\\n  \\\"NotebookLocate\\\",\\n  \\\"NotebookObject\\\",\\n  \\\"NotebookOpen\\\",\\n  \\\"NotebookPath\\\",\\n  \\\"NotebookPrint\\\",\\n  \\\"NotebookPut\\\",\\n  \\\"NotebookRead\\\",\\n  \\\"Notebooks\\\",\\n  \\\"NotebookSave\\\",\\n  \\\"NotebookSelection\\\",\\n  \\\"NotebooksMenu\\\",\\n  \\\"NotebookTemplate\\\",\\n  \\\"NotebookWrite\\\",\\n  \\\"NotElement\\\",\\n  \\\"NotEqualTilde\\\",\\n  \\\"NotExists\\\",\\n  \\\"NotGreater\\\",\\n  \\\"NotGreaterEqual\\\",\\n  \\\"NotGreaterFullEqual\\\",\\n  \\\"NotGreaterGreater\\\",\\n  \\\"NotGreaterLess\\\",\\n  \\\"NotGreaterSlantEqual\\\",\\n  \\\"NotGreaterTilde\\\",\\n  \\\"Nothing\\\",\\n  \\\"NotHumpDownHump\\\",\\n  \\\"NotHumpEqual\\\",\\n  \\\"NotificationFunction\\\",\\n  \\\"NotLeftTriangle\\\",\\n  \\\"NotLeftTriangleBar\\\",\\n  \\\"NotLeftTriangleEqual\\\",\\n  \\\"NotLess\\\",\\n  \\\"NotLessEqual\\\",\\n  \\\"NotLessFullEqual\\\",\\n  \\\"NotLessGreater\\\",\\n  \\\"NotLessLess\\\",\\n  \\\"NotLessSlantEqual\\\",\\n  \\\"NotLessTilde\\\",\\n  \\\"NotNestedGreaterGreater\\\",\\n  \\\"NotNestedLessLess\\\",\\n  \\\"NotPrecedes\\\",\\n  \\\"NotPrecedesEqual\\\",\\n  \\\"NotPrecedesSlantEqual\\\",\\n  \\\"NotPrecedesTilde\\\",\\n  \\\"NotReverseElement\\\",\\n  \\\"NotRightTriangle\\\",\\n  \\\"NotRightTriangleBar\\\",\\n  \\\"NotRightTriangleEqual\\\",\\n  \\\"NotSquareSubset\\\",\\n  \\\"NotSquareSubsetEqual\\\",\\n  \\\"NotSquareSuperset\\\",\\n  \\\"NotSquareSupersetEqual\\\",\\n  \\\"NotSubset\\\",\\n  \\\"NotSubsetEqual\\\",\\n  \\\"NotSucceeds\\\",\\n  \\\"NotSucceedsEqual\\\",\\n  \\\"NotSucceedsSlantEqual\\\",\\n  \\\"NotSucceedsTilde\\\",\\n  \\\"NotSuperset\\\",\\n  \\\"NotSupersetEqual\\\",\\n  \\\"NotTilde\\\",\\n  \\\"NotTildeEqual\\\",\\n  \\\"NotTildeFullEqual\\\",\\n  \\\"NotTildeTilde\\\",\\n  \\\"NotVerticalBar\\\",\\n  \\\"Now\\\",\\n  \\\"NoWhitespace\\\",\\n  \\\"NProbability\\\",\\n  \\\"NProduct\\\",\\n  \\\"NProductFactors\\\",\\n  \\\"NRoots\\\",\\n  \\\"NSolve\\\",\\n  \\\"NSolveValues\\\",\\n  \\\"NSum\\\",\\n  \\\"NSumTerms\\\",\\n  \\\"NuclearExplosionData\\\",\\n  \\\"NuclearReactorData\\\",\\n  \\\"Null\\\",\\n  \\\"NullRecords\\\",\\n  \\\"NullSpace\\\",\\n  \\\"NullWords\\\",\\n  \\\"Number\\\",\\n  \\\"NumberCompose\\\",\\n  \\\"NumberDecompose\\\",\\n  \\\"NumberDigit\\\",\\n  \\\"NumberExpand\\\",\\n  \\\"NumberFieldClassNumber\\\",\\n  \\\"NumberFieldDiscriminant\\\",\\n  \\\"NumberFieldFundamentalUnits\\\",\\n  \\\"NumberFieldIntegralBasis\\\",\\n  \\\"NumberFieldNormRepresentatives\\\",\\n  \\\"NumberFieldRegulator\\\",\\n  \\\"NumberFieldRootsOfUnity\\\",\\n  \\\"NumberFieldSignature\\\",\\n  \\\"NumberForm\\\",\\n  \\\"NumberFormat\\\",\\n  \\\"NumberLinePlot\\\",\\n  \\\"NumberMarks\\\",\\n  \\\"NumberMultiplier\\\",\\n  \\\"NumberPadding\\\",\\n  \\\"NumberPoint\\\",\\n  \\\"NumberQ\\\",\\n  \\\"NumberSeparator\\\",\\n  \\\"NumberSigns\\\",\\n  \\\"NumberString\\\",\\n  \\\"Numerator\\\",\\n  \\\"NumeratorDenominator\\\",\\n  \\\"NumericalOrder\\\",\\n  \\\"NumericalSort\\\",\\n  \\\"NumericArray\\\",\\n  \\\"NumericArrayQ\\\",\\n  \\\"NumericArrayType\\\",\\n  \\\"NumericFunction\\\",\\n  \\\"NumericQ\\\",\\n  \\\"NuttallWindow\\\",\\n  \\\"NValues\\\",\\n  \\\"NyquistGridLines\\\",\\n  \\\"NyquistPlot\\\",\\n  \\\"O\\\",\\n  \\\"ObjectExistsQ\\\",\\n  \\\"ObservabilityGramian\\\",\\n  \\\"ObservabilityMatrix\\\",\\n  \\\"ObservableDecomposition\\\",\\n  \\\"ObservableModelQ\\\",\\n  \\\"OceanData\\\",\\n  \\\"Octahedron\\\",\\n  \\\"OddQ\\\",\\n  \\\"Off\\\",\\n  \\\"Offset\\\",\\n  \\\"OLEData\\\",\\n  \\\"On\\\",\\n  \\\"ONanGroupON\\\",\\n  \\\"Once\\\",\\n  \\\"OneIdentity\\\",\\n  \\\"Opacity\\\",\\n  \\\"OpacityFunction\\\",\\n  \\\"OpacityFunctionScaling\\\",\\n  \\\"Open\\\",\\n  \\\"OpenAppend\\\",\\n  \\\"Opener\\\",\\n  \\\"OpenerBox\\\",\\n  \\\"OpenerBoxOptions\\\",\\n  \\\"OpenerView\\\",\\n  \\\"OpenFunctionInspectorPacket\\\",\\n  \\\"Opening\\\",\\n  \\\"OpenRead\\\",\\n  \\\"OpenSpecialOptions\\\",\\n  \\\"OpenTemporary\\\",\\n  \\\"OpenWrite\\\",\\n  \\\"Operate\\\",\\n  \\\"OperatingSystem\\\",\\n  \\\"OperatorApplied\\\",\\n  \\\"OptimumFlowData\\\",\\n  \\\"Optional\\\",\\n  \\\"OptionalElement\\\",\\n  \\\"OptionInspectorSettings\\\",\\n  \\\"OptionQ\\\",\\n  \\\"Options\\\",\\n  \\\"OptionsPacket\\\",\\n  \\\"OptionsPattern\\\",\\n  \\\"OptionValue\\\",\\n  \\\"OptionValueBox\\\",\\n  \\\"OptionValueBoxOptions\\\",\\n  \\\"Or\\\",\\n  \\\"Orange\\\",\\n  \\\"Order\\\",\\n  \\\"OrderDistribution\\\",\\n  \\\"OrderedQ\\\",\\n  \\\"Ordering\\\",\\n  \\\"OrderingBy\\\",\\n  \\\"OrderingLayer\\\",\\n  \\\"Orderless\\\",\\n  \\\"OrderlessPatternSequence\\\",\\n  \\\"OrdinalScale\\\",\\n  \\\"OrnsteinUhlenbeckProcess\\\",\\n  \\\"Orthogonalize\\\",\\n  \\\"OrthogonalMatrixQ\\\",\\n  \\\"Out\\\",\\n  \\\"Outer\\\",\\n  \\\"OuterPolygon\\\",\\n  \\\"OuterPolyhedron\\\",\\n  \\\"OutputAutoOverwrite\\\",\\n  \\\"OutputControllabilityMatrix\\\",\\n  \\\"OutputControllableModelQ\\\",\\n  \\\"OutputForm\\\",\\n  \\\"OutputFormData\\\",\\n  \\\"OutputGrouping\\\",\\n  \\\"OutputMathEditExpression\\\",\\n  \\\"OutputNamePacket\\\",\\n  \\\"OutputPorts\\\",\\n  \\\"OutputResponse\\\",\\n  \\\"OutputSizeLimit\\\",\\n  \\\"OutputStream\\\",\\n  \\\"Over\\\",\\n  \\\"OverBar\\\",\\n  \\\"OverDot\\\",\\n  \\\"Overflow\\\",\\n  \\\"OverHat\\\",\\n  \\\"Overlaps\\\",\\n  \\\"Overlay\\\",\\n  \\\"OverlayBox\\\",\\n  \\\"OverlayBoxOptions\\\",\\n  \\\"OverlayVideo\\\",\\n  \\\"Overscript\\\",\\n  \\\"OverscriptBox\\\",\\n  \\\"OverscriptBoxOptions\\\",\\n  \\\"OverTilde\\\",\\n  \\\"OverVector\\\",\\n  \\\"OverwriteTarget\\\",\\n  \\\"OwenT\\\",\\n  \\\"OwnValues\\\",\\n  \\\"Package\\\",\\n  \\\"PackingMethod\\\",\\n  \\\"PackPaclet\\\",\\n  \\\"PacletDataRebuild\\\",\\n  \\\"PacletDirectoryAdd\\\",\\n  \\\"PacletDirectoryLoad\\\",\\n  \\\"PacletDirectoryRemove\\\",\\n  \\\"PacletDirectoryUnload\\\",\\n  \\\"PacletDisable\\\",\\n  \\\"PacletEnable\\\",\\n  \\\"PacletFind\\\",\\n  \\\"PacletFindRemote\\\",\\n  \\\"PacletInformation\\\",\\n  \\\"PacletInstall\\\",\\n  \\\"PacletInstallSubmit\\\",\\n  \\\"PacletNewerQ\\\",\\n  \\\"PacletObject\\\",\\n  \\\"PacletObjectQ\\\",\\n  \\\"PacletSite\\\",\\n  \\\"PacletSiteObject\\\",\\n  \\\"PacletSiteRegister\\\",\\n  \\\"PacletSites\\\",\\n  \\\"PacletSiteUnregister\\\",\\n  \\\"PacletSiteUpdate\\\",\\n  \\\"PacletSymbol\\\",\\n  \\\"PacletUninstall\\\",\\n  \\\"PacletUpdate\\\",\\n  \\\"PaddedForm\\\",\\n  \\\"Padding\\\",\\n  \\\"PaddingLayer\\\",\\n  \\\"PaddingSize\\\",\\n  \\\"PadeApproximant\\\",\\n  \\\"PadLeft\\\",\\n  \\\"PadRight\\\",\\n  \\\"PageBreakAbove\\\",\\n  \\\"PageBreakBelow\\\",\\n  \\\"PageBreakWithin\\\",\\n  \\\"PageFooterLines\\\",\\n  \\\"PageFooters\\\",\\n  \\\"PageHeaderLines\\\",\\n  \\\"PageHeaders\\\",\\n  \\\"PageHeight\\\",\\n  \\\"PageRankCentrality\\\",\\n  \\\"PageTheme\\\",\\n  \\\"PageWidth\\\",\\n  \\\"Pagination\\\",\\n  \\\"PairCorrelationG\\\",\\n  \\\"PairedBarChart\\\",\\n  \\\"PairedHistogram\\\",\\n  \\\"PairedSmoothHistogram\\\",\\n  \\\"PairedTTest\\\",\\n  \\\"PairedZTest\\\",\\n  \\\"PaletteNotebook\\\",\\n  \\\"PalettePath\\\",\\n  \\\"PalettesMenuSettings\\\",\\n  \\\"PalindromeQ\\\",\\n  \\\"Pane\\\",\\n  \\\"PaneBox\\\",\\n  \\\"PaneBoxOptions\\\",\\n  \\\"Panel\\\",\\n  \\\"PanelBox\\\",\\n  \\\"PanelBoxOptions\\\",\\n  \\\"Paneled\\\",\\n  \\\"PaneSelector\\\",\\n  \\\"PaneSelectorBox\\\",\\n  \\\"PaneSelectorBoxOptions\\\",\\n  \\\"PaperWidth\\\",\\n  \\\"ParabolicCylinderD\\\",\\n  \\\"ParagraphIndent\\\",\\n  \\\"ParagraphSpacing\\\",\\n  \\\"ParallelArray\\\",\\n  \\\"ParallelAxisPlot\\\",\\n  \\\"ParallelCombine\\\",\\n  \\\"ParallelDo\\\",\\n  \\\"Parallelepiped\\\",\\n  \\\"ParallelEvaluate\\\",\\n  \\\"Parallelization\\\",\\n  \\\"Parallelize\\\",\\n  \\\"ParallelKernels\\\",\\n  \\\"ParallelMap\\\",\\n  \\\"ParallelNeeds\\\",\\n  \\\"Parallelogram\\\",\\n  \\\"ParallelProduct\\\",\\n  \\\"ParallelSubmit\\\",\\n  \\\"ParallelSum\\\",\\n  \\\"ParallelTable\\\",\\n  \\\"ParallelTry\\\",\\n  \\\"Parameter\\\",\\n  \\\"ParameterEstimator\\\",\\n  \\\"ParameterMixtureDistribution\\\",\\n  \\\"ParameterVariables\\\",\\n  \\\"ParametricConvexOptimization\\\",\\n  \\\"ParametricFunction\\\",\\n  \\\"ParametricNDSolve\\\",\\n  \\\"ParametricNDSolveValue\\\",\\n  \\\"ParametricPlot\\\",\\n  \\\"ParametricPlot3D\\\",\\n  \\\"ParametricRampLayer\\\",\\n  \\\"ParametricRegion\\\",\\n  \\\"ParentBox\\\",\\n  \\\"ParentCell\\\",\\n  \\\"ParentConnect\\\",\\n  \\\"ParentDirectory\\\",\\n  \\\"ParentEdgeLabel\\\",\\n  \\\"ParentEdgeLabelFunction\\\",\\n  \\\"ParentEdgeLabelStyle\\\",\\n  \\\"ParentEdgeShapeFunction\\\",\\n  \\\"ParentEdgeStyle\\\",\\n  \\\"ParentEdgeStyleFunction\\\",\\n  \\\"ParentForm\\\",\\n  \\\"Parenthesize\\\",\\n  \\\"ParentList\\\",\\n  \\\"ParentNotebook\\\",\\n  \\\"ParetoDistribution\\\",\\n  \\\"ParetoPickandsDistribution\\\",\\n  \\\"ParkData\\\",\\n  \\\"Part\\\",\\n  \\\"PartBehavior\\\",\\n  \\\"PartialCorrelationFunction\\\",\\n  \\\"PartialD\\\",\\n  \\\"ParticleAcceleratorData\\\",\\n  \\\"ParticleData\\\",\\n  \\\"Partition\\\",\\n  \\\"PartitionGranularity\\\",\\n  \\\"PartitionsP\\\",\\n  \\\"PartitionsQ\\\",\\n  \\\"PartLayer\\\",\\n  \\\"PartOfSpeech\\\",\\n  \\\"PartProtection\\\",\\n  \\\"ParzenWindow\\\",\\n  \\\"PascalDistribution\\\",\\n  \\\"PassEventsDown\\\",\\n  \\\"PassEventsUp\\\",\\n  \\\"Paste\\\",\\n  \\\"PasteAutoQuoteCharacters\\\",\\n  \\\"PasteBoxFormInlineCells\\\",\\n  \\\"PasteButton\\\",\\n  \\\"Path\\\",\\n  \\\"PathGraph\\\",\\n  \\\"PathGraphQ\\\",\\n  \\\"Pattern\\\",\\n  \\\"PatternFilling\\\",\\n  \\\"PatternReaction\\\",\\n  \\\"PatternSequence\\\",\\n  \\\"PatternTest\\\",\\n  \\\"PauliMatrix\\\",\\n  \\\"PaulWavelet\\\",\\n  \\\"Pause\\\",\\n  \\\"PausedTime\\\",\\n  \\\"PDF\\\",\\n  \\\"PeakDetect\\\",\\n  \\\"PeanoCurve\\\",\\n  \\\"PearsonChiSquareTest\\\",\\n  \\\"PearsonCorrelationTest\\\",\\n  \\\"PearsonDistribution\\\",\\n  \\\"PenttinenPointProcess\\\",\\n  \\\"PercentForm\\\",\\n  \\\"PerfectNumber\\\",\\n  \\\"PerfectNumberQ\\\",\\n  \\\"PerformanceGoal\\\",\\n  \\\"Perimeter\\\",\\n  \\\"PeriodicBoundaryCondition\\\",\\n  \\\"PeriodicInterpolation\\\",\\n  \\\"Periodogram\\\",\\n  \\\"PeriodogramArray\\\",\\n  \\\"Permanent\\\",\\n  \\\"Permissions\\\",\\n  \\\"PermissionsGroup\\\",\\n  \\\"PermissionsGroupMemberQ\\\",\\n  \\\"PermissionsGroups\\\",\\n  \\\"PermissionsKey\\\",\\n  \\\"PermissionsKeys\\\",\\n  \\\"PermutationCycles\\\",\\n  \\\"PermutationCyclesQ\\\",\\n  \\\"PermutationGroup\\\",\\n  \\\"PermutationLength\\\",\\n  \\\"PermutationList\\\",\\n  \\\"PermutationListQ\\\",\\n  \\\"PermutationMatrix\\\",\\n  \\\"PermutationMax\\\",\\n  \\\"PermutationMin\\\",\\n  \\\"PermutationOrder\\\",\\n  \\\"PermutationPower\\\",\\n  \\\"PermutationProduct\\\",\\n  \\\"PermutationReplace\\\",\\n  \\\"Permutations\\\",\\n  \\\"PermutationSupport\\\",\\n  \\\"Permute\\\",\\n  \\\"PeronaMalikFilter\\\",\\n  \\\"Perpendicular\\\",\\n  \\\"PerpendicularBisector\\\",\\n  \\\"PersistenceLocation\\\",\\n  \\\"PersistenceTime\\\",\\n  \\\"PersistentObject\\\",\\n  \\\"PersistentObjects\\\",\\n  \\\"PersistentSymbol\\\",\\n  \\\"PersistentValue\\\",\\n  \\\"PersonData\\\",\\n  \\\"PERTDistribution\\\",\\n  \\\"PetersenGraph\\\",\\n  \\\"PhaseMargins\\\",\\n  \\\"PhaseRange\\\",\\n  \\\"PhongShading\\\",\\n  \\\"PhysicalSystemData\\\",\\n  \\\"Pi\\\",\\n  \\\"Pick\\\",\\n  \\\"PickedElements\\\",\\n  \\\"PickMode\\\",\\n  \\\"PIDData\\\",\\n  \\\"PIDDerivativeFilter\\\",\\n  \\\"PIDFeedforward\\\",\\n  \\\"PIDTune\\\",\\n  \\\"Piecewise\\\",\\n  \\\"PiecewiseExpand\\\",\\n  \\\"PieChart\\\",\\n  \\\"PieChart3D\\\",\\n  \\\"PillaiTrace\\\",\\n  \\\"PillaiTraceTest\\\",\\n  \\\"PingTime\\\",\\n  \\\"Pink\\\",\\n  \\\"PitchRecognize\\\",\\n  \\\"Pivoting\\\",\\n  \\\"PixelConstrained\\\",\\n  \\\"PixelValue\\\",\\n  \\\"PixelValuePositions\\\",\\n  \\\"Placed\\\",\\n  \\\"Placeholder\\\",\\n  \\\"PlaceholderLayer\\\",\\n  \\\"PlaceholderReplace\\\",\\n  \\\"Plain\\\",\\n  \\\"PlanarAngle\\\",\\n  \\\"PlanarFaceList\\\",\\n  \\\"PlanarGraph\\\",\\n  \\\"PlanarGraphQ\\\",\\n  \\\"PlanckRadiationLaw\\\",\\n  \\\"PlaneCurveData\\\",\\n  \\\"PlanetaryMoonData\\\",\\n  \\\"PlanetData\\\",\\n  \\\"PlantData\\\",\\n  \\\"Play\\\",\\n  \\\"PlaybackSettings\\\",\\n  \\\"PlayRange\\\",\\n  \\\"Plot\\\",\\n  \\\"Plot3D\\\",\\n  \\\"Plot3Matrix\\\",\\n  \\\"PlotDivision\\\",\\n  \\\"PlotJoined\\\",\\n  \\\"PlotLabel\\\",\\n  \\\"PlotLabels\\\",\\n  \\\"PlotLayout\\\",\\n  \\\"PlotLegends\\\",\\n  \\\"PlotMarkers\\\",\\n  \\\"PlotPoints\\\",\\n  \\\"PlotRange\\\",\\n  \\\"PlotRangeClipping\\\",\\n  \\\"PlotRangeClipPlanesStyle\\\",\\n  \\\"PlotRangePadding\\\",\\n  \\\"PlotRegion\\\",\\n  \\\"PlotStyle\\\",\\n  \\\"PlotTheme\\\",\\n  \\\"Pluralize\\\",\\n  \\\"Plus\\\",\\n  \\\"PlusMinus\\\",\\n  \\\"Pochhammer\\\",\\n  \\\"PodStates\\\",\\n  \\\"PodWidth\\\",\\n  \\\"Point\\\",\\n  \\\"Point3DBox\\\",\\n  \\\"Point3DBoxOptions\\\",\\n  \\\"PointBox\\\",\\n  \\\"PointBoxOptions\\\",\\n  \\\"PointCountDistribution\\\",\\n  \\\"PointDensity\\\",\\n  \\\"PointDensityFunction\\\",\\n  \\\"PointFigureChart\\\",\\n  \\\"PointLegend\\\",\\n  \\\"PointLight\\\",\\n  \\\"PointProcessEstimator\\\",\\n  \\\"PointProcessFitTest\\\",\\n  \\\"PointProcessParameterAssumptions\\\",\\n  \\\"PointProcessParameterQ\\\",\\n  \\\"PointSize\\\",\\n  \\\"PointStatisticFunction\\\",\\n  \\\"PointValuePlot\\\",\\n  \\\"PoissonConsulDistribution\\\",\\n  \\\"PoissonDistribution\\\",\\n  \\\"PoissonPDEComponent\\\",\\n  \\\"PoissonPointProcess\\\",\\n  \\\"PoissonProcess\\\",\\n  \\\"PoissonWindow\\\",\\n  \\\"PolarAxes\\\",\\n  \\\"PolarAxesOrigin\\\",\\n  \\\"PolarGridLines\\\",\\n  \\\"PolarPlot\\\",\\n  \\\"PolarTicks\\\",\\n  \\\"PoleZeroMarkers\\\",\\n  \\\"PolyaAeppliDistribution\\\",\\n  \\\"PolyGamma\\\",\\n  \\\"Polygon\\\",\\n  \\\"Polygon3DBox\\\",\\n  \\\"Polygon3DBoxOptions\\\",\\n  \\\"PolygonalNumber\\\",\\n  \\\"PolygonAngle\\\",\\n  \\\"PolygonBox\\\",\\n  \\\"PolygonBoxOptions\\\",\\n  \\\"PolygonCoordinates\\\",\\n  \\\"PolygonDecomposition\\\",\\n  \\\"PolygonHoleScale\\\",\\n  \\\"PolygonIntersections\\\",\\n  \\\"PolygonScale\\\",\\n  \\\"Polyhedron\\\",\\n  \\\"PolyhedronAngle\\\",\\n  \\\"PolyhedronBox\\\",\\n  \\\"PolyhedronBoxOptions\\\",\\n  \\\"PolyhedronCoordinates\\\",\\n  \\\"PolyhedronData\\\",\\n  \\\"PolyhedronDecomposition\\\",\\n  \\\"PolyhedronGenus\\\",\\n  \\\"PolyLog\\\",\\n  \\\"PolynomialExpressionQ\\\",\\n  \\\"PolynomialExtendedGCD\\\",\\n  \\\"PolynomialForm\\\",\\n  \\\"PolynomialGCD\\\",\\n  \\\"PolynomialLCM\\\",\\n  \\\"PolynomialMod\\\",\\n  \\\"PolynomialQ\\\",\\n  \\\"PolynomialQuotient\\\",\\n  \\\"PolynomialQuotientRemainder\\\",\\n  \\\"PolynomialReduce\\\",\\n  \\\"PolynomialRemainder\\\",\\n  \\\"Polynomials\\\",\\n  \\\"PolynomialSumOfSquaresList\\\",\\n  \\\"PoolingLayer\\\",\\n  \\\"PopupMenu\\\",\\n  \\\"PopupMenuBox\\\",\\n  \\\"PopupMenuBoxOptions\\\",\\n  \\\"PopupView\\\",\\n  \\\"PopupWindow\\\",\\n  \\\"Position\\\",\\n  \\\"PositionIndex\\\",\\n  \\\"PositionLargest\\\",\\n  \\\"PositionSmallest\\\",\\n  \\\"Positive\\\",\\n  \\\"PositiveDefiniteMatrixQ\\\",\\n  \\\"PositiveIntegers\\\",\\n  \\\"PositivelyOrientedPoints\\\",\\n  \\\"PositiveRationals\\\",\\n  \\\"PositiveReals\\\",\\n  \\\"PositiveSemidefiniteMatrixQ\\\",\\n  \\\"PossibleZeroQ\\\",\\n  \\\"Postfix\\\",\\n  \\\"PostScript\\\",\\n  \\\"Power\\\",\\n  \\\"PowerDistribution\\\",\\n  \\\"PowerExpand\\\",\\n  \\\"PowerMod\\\",\\n  \\\"PowerModList\\\",\\n  \\\"PowerRange\\\",\\n  \\\"PowerSpectralDensity\\\",\\n  \\\"PowersRepresentations\\\",\\n  \\\"PowerSymmetricPolynomial\\\",\\n  \\\"Precedence\\\",\\n  \\\"PrecedenceForm\\\",\\n  \\\"Precedes\\\",\\n  \\\"PrecedesEqual\\\",\\n  \\\"PrecedesSlantEqual\\\",\\n  \\\"PrecedesTilde\\\",\\n  \\\"Precision\\\",\\n  \\\"PrecisionGoal\\\",\\n  \\\"PreDecrement\\\",\\n  \\\"Predict\\\",\\n  \\\"PredictionRoot\\\",\\n  \\\"PredictorFunction\\\",\\n  \\\"PredictorInformation\\\",\\n  \\\"PredictorMeasurements\\\",\\n  \\\"PredictorMeasurementsObject\\\",\\n  \\\"PreemptProtect\\\",\\n  \\\"PreferencesPath\\\",\\n  \\\"PreferencesSettings\\\",\\n  \\\"Prefix\\\",\\n  \\\"PreIncrement\\\",\\n  \\\"Prepend\\\",\\n  \\\"PrependLayer\\\",\\n  \\\"PrependTo\\\",\\n  \\\"PreprocessingRules\\\",\\n  \\\"PreserveColor\\\",\\n  \\\"PreserveImageOptions\\\",\\n  \\\"Previous\\\",\\n  \\\"PreviousCell\\\",\\n  \\\"PreviousDate\\\",\\n  \\\"PriceGraphDistribution\\\",\\n  \\\"PrimaryPlaceholder\\\",\\n  \\\"Prime\\\",\\n  \\\"PrimeNu\\\",\\n  \\\"PrimeOmega\\\",\\n  \\\"PrimePi\\\",\\n  \\\"PrimePowerQ\\\",\\n  \\\"PrimeQ\\\",\\n  \\\"Primes\\\",\\n  \\\"PrimeZetaP\\\",\\n  \\\"PrimitivePolynomialQ\\\",\\n  \\\"PrimitiveRoot\\\",\\n  \\\"PrimitiveRootList\\\",\\n  \\\"PrincipalComponents\\\",\\n  \\\"PrincipalValue\\\",\\n  \\\"Print\\\",\\n  \\\"PrintableASCIIQ\\\",\\n  \\\"PrintAction\\\",\\n  \\\"PrintForm\\\",\\n  \\\"PrintingCopies\\\",\\n  \\\"PrintingOptions\\\",\\n  \\\"PrintingPageRange\\\",\\n  \\\"PrintingStartingPageNumber\\\",\\n  \\\"PrintingStyleEnvironment\\\",\\n  \\\"Printout3D\\\",\\n  \\\"Printout3DPreviewer\\\",\\n  \\\"PrintPrecision\\\",\\n  \\\"PrintTemporary\\\",\\n  \\\"Prism\\\",\\n  \\\"PrismBox\\\",\\n  \\\"PrismBoxOptions\\\",\\n  \\\"PrivateCellOptions\\\",\\n  \\\"PrivateEvaluationOptions\\\",\\n  \\\"PrivateFontOptions\\\",\\n  \\\"PrivateFrontEndOptions\\\",\\n  \\\"PrivateKey\\\",\\n  \\\"PrivateNotebookOptions\\\",\\n  \\\"PrivatePaths\\\",\\n  \\\"Probability\\\",\\n  \\\"ProbabilityDistribution\\\",\\n  \\\"ProbabilityPlot\\\",\\n  \\\"ProbabilityPr\\\",\\n  \\\"ProbabilityScalePlot\\\",\\n  \\\"ProbitModelFit\\\",\\n  \\\"ProcessConnection\\\",\\n  \\\"ProcessDirectory\\\",\\n  \\\"ProcessEnvironment\\\",\\n  \\\"Processes\\\",\\n  \\\"ProcessEstimator\\\",\\n  \\\"ProcessInformation\\\",\\n  \\\"ProcessObject\\\",\\n  \\\"ProcessParameterAssumptions\\\",\\n  \\\"ProcessParameterQ\\\",\\n  \\\"ProcessStateDomain\\\",\\n  \\\"ProcessStatus\\\",\\n  \\\"ProcessTimeDomain\\\",\\n  \\\"Product\\\",\\n  \\\"ProductDistribution\\\",\\n  \\\"ProductLog\\\",\\n  \\\"ProgressIndicator\\\",\\n  \\\"ProgressIndicatorBox\\\",\\n  \\\"ProgressIndicatorBoxOptions\\\",\\n  \\\"ProgressReporting\\\",\\n  \\\"Projection\\\",\\n  \\\"Prolog\\\",\\n  \\\"PromptForm\\\",\\n  \\\"ProofObject\\\",\\n  \\\"PropagateAborts\\\",\\n  \\\"Properties\\\",\\n  \\\"Property\\\",\\n  \\\"PropertyList\\\",\\n  \\\"PropertyValue\\\",\\n  \\\"Proportion\\\",\\n  \\\"Proportional\\\",\\n  \\\"Protect\\\",\\n  \\\"Protected\\\",\\n  \\\"ProteinData\\\",\\n  \\\"Pruning\\\",\\n  \\\"PseudoInverse\\\",\\n  \\\"PsychrometricPropertyData\\\",\\n  \\\"PublicKey\\\",\\n  \\\"PublisherID\\\",\\n  \\\"PulsarData\\\",\\n  \\\"PunctuationCharacter\\\",\\n  \\\"Purple\\\",\\n  \\\"Put\\\",\\n  \\\"PutAppend\\\",\\n  \\\"Pyramid\\\",\\n  \\\"PyramidBox\\\",\\n  \\\"PyramidBoxOptions\\\",\\n  \\\"QBinomial\\\",\\n  \\\"QFactorial\\\",\\n  \\\"QGamma\\\",\\n  \\\"QHypergeometricPFQ\\\",\\n  \\\"QnDispersion\\\",\\n  \\\"QPochhammer\\\",\\n  \\\"QPolyGamma\\\",\\n  \\\"QRDecomposition\\\",\\n  \\\"QuadraticIrrationalQ\\\",\\n  \\\"QuadraticOptimization\\\",\\n  \\\"Quantile\\\",\\n  \\\"QuantilePlot\\\",\\n  \\\"Quantity\\\",\\n  \\\"QuantityArray\\\",\\n  \\\"QuantityDistribution\\\",\\n  \\\"QuantityForm\\\",\\n  \\\"QuantityMagnitude\\\",\\n  \\\"QuantityQ\\\",\\n  \\\"QuantityUnit\\\",\\n  \\\"QuantityVariable\\\",\\n  \\\"QuantityVariableCanonicalUnit\\\",\\n  \\\"QuantityVariableDimensions\\\",\\n  \\\"QuantityVariableIdentifier\\\",\\n  \\\"QuantityVariablePhysicalQuantity\\\",\\n  \\\"Quartics\\\",\\n  \\\"QuartileDeviation\\\",\\n  \\\"Quartiles\\\",\\n  \\\"QuartileSkewness\\\",\\n  \\\"Query\\\",\\n  \\\"QuestionGenerator\\\",\\n  \\\"QuestionInterface\\\",\\n  \\\"QuestionObject\\\",\\n  \\\"QuestionSelector\\\",\\n  \\\"QueueingNetworkProcess\\\",\\n  \\\"QueueingProcess\\\",\\n  \\\"QueueProperties\\\",\\n  \\\"Quiet\\\",\\n  \\\"QuietEcho\\\",\\n  \\\"Quit\\\",\\n  \\\"Quotient\\\",\\n  \\\"QuotientRemainder\\\",\\n  \\\"RadialAxisPlot\\\",\\n  \\\"RadialGradientFilling\\\",\\n  \\\"RadialGradientImage\\\",\\n  \\\"RadialityCentrality\\\",\\n  \\\"RadicalBox\\\",\\n  \\\"RadicalBoxOptions\\\",\\n  \\\"RadioButton\\\",\\n  \\\"RadioButtonBar\\\",\\n  \\\"RadioButtonBox\\\",\\n  \\\"RadioButtonBoxOptions\\\",\\n  \\\"Radon\\\",\\n  \\\"RadonTransform\\\",\\n  \\\"RamanujanTau\\\",\\n  \\\"RamanujanTauL\\\",\\n  \\\"RamanujanTauTheta\\\",\\n  \\\"RamanujanTauZ\\\",\\n  \\\"Ramp\\\",\\n  \\\"Random\\\",\\n  \\\"RandomArrayLayer\\\",\\n  \\\"RandomChoice\\\",\\n  \\\"RandomColor\\\",\\n  \\\"RandomComplex\\\",\\n  \\\"RandomDate\\\",\\n  \\\"RandomEntity\\\",\\n  \\\"RandomFunction\\\",\\n  \\\"RandomGeneratorState\\\",\\n  \\\"RandomGeoPosition\\\",\\n  \\\"RandomGraph\\\",\\n  \\\"RandomImage\\\",\\n  \\\"RandomInstance\\\",\\n  \\\"RandomInteger\\\",\\n  \\\"RandomPermutation\\\",\\n  \\\"RandomPoint\\\",\\n  \\\"RandomPointConfiguration\\\",\\n  \\\"RandomPolygon\\\",\\n  \\\"RandomPolyhedron\\\",\\n  \\\"RandomPrime\\\",\\n  \\\"RandomReal\\\",\\n  \\\"RandomSample\\\",\\n  \\\"RandomSeed\\\",\\n  \\\"RandomSeeding\\\",\\n  \\\"RandomTime\\\",\\n  \\\"RandomTree\\\",\\n  \\\"RandomVariate\\\",\\n  \\\"RandomWalkProcess\\\",\\n  \\\"RandomWord\\\",\\n  \\\"Range\\\",\\n  \\\"RangeFilter\\\",\\n  \\\"RangeSpecification\\\",\\n  \\\"RankedMax\\\",\\n  \\\"RankedMin\\\",\\n  \\\"RarerProbability\\\",\\n  \\\"Raster\\\",\\n  \\\"Raster3D\\\",\\n  \\\"Raster3DBox\\\",\\n  \\\"Raster3DBoxOptions\\\",\\n  \\\"RasterArray\\\",\\n  \\\"RasterBox\\\",\\n  \\\"RasterBoxOptions\\\",\\n  \\\"Rasterize\\\",\\n  \\\"RasterSize\\\",\\n  \\\"Rational\\\",\\n  \\\"RationalExpressionQ\\\",\\n  \\\"RationalFunctions\\\",\\n  \\\"Rationalize\\\",\\n  \\\"Rationals\\\",\\n  \\\"Ratios\\\",\\n  \\\"RawArray\\\",\\n  \\\"RawBoxes\\\",\\n  \\\"RawData\\\",\\n  \\\"RawMedium\\\",\\n  \\\"RayleighDistribution\\\",\\n  \\\"Re\\\",\\n  \\\"ReactionBalance\\\",\\n  \\\"ReactionBalancedQ\\\",\\n  \\\"ReactionPDETerm\\\",\\n  \\\"Read\\\",\\n  \\\"ReadByteArray\\\",\\n  \\\"ReadLine\\\",\\n  \\\"ReadList\\\",\\n  \\\"ReadProtected\\\",\\n  \\\"ReadString\\\",\\n  \\\"Real\\\",\\n  \\\"RealAbs\\\",\\n  \\\"RealBlockDiagonalForm\\\",\\n  \\\"RealDigits\\\",\\n  \\\"RealExponent\\\",\\n  \\\"Reals\\\",\\n  \\\"RealSign\\\",\\n  \\\"Reap\\\",\\n  \\\"RebuildPacletData\\\",\\n  \\\"RecalibrationFunction\\\",\\n  \\\"RecognitionPrior\\\",\\n  \\\"RecognitionThreshold\\\",\\n  \\\"ReconstructionMesh\\\",\\n  \\\"Record\\\",\\n  \\\"RecordLists\\\",\\n  \\\"RecordSeparators\\\",\\n  \\\"Rectangle\\\",\\n  \\\"RectangleBox\\\",\\n  \\\"RectangleBoxOptions\\\",\\n  \\\"RectangleChart\\\",\\n  \\\"RectangleChart3D\\\",\\n  \\\"RectangularRepeatingElement\\\",\\n  \\\"RecurrenceFilter\\\",\\n  \\\"RecurrenceTable\\\",\\n  \\\"RecurringDigitsForm\\\",\\n  \\\"Red\\\",\\n  \\\"Reduce\\\",\\n  \\\"RefBox\\\",\\n  \\\"ReferenceLineStyle\\\",\\n  \\\"ReferenceMarkers\\\",\\n  \\\"ReferenceMarkerStyle\\\",\\n  \\\"Refine\\\",\\n  \\\"ReflectionMatrix\\\",\\n  \\\"ReflectionTransform\\\",\\n  \\\"Refresh\\\",\\n  \\\"RefreshRate\\\",\\n  \\\"Region\\\",\\n  \\\"RegionBinarize\\\",\\n  \\\"RegionBoundary\\\",\\n  \\\"RegionBoundaryStyle\\\",\\n  \\\"RegionBounds\\\",\\n  \\\"RegionCentroid\\\",\\n  \\\"RegionCongruent\\\",\\n  \\\"RegionConvert\\\",\\n  \\\"RegionDifference\\\",\\n  \\\"RegionDilation\\\",\\n  \\\"RegionDimension\\\",\\n  \\\"RegionDisjoint\\\",\\n  \\\"RegionDistance\\\",\\n  \\\"RegionDistanceFunction\\\",\\n  \\\"RegionEmbeddingDimension\\\",\\n  \\\"RegionEqual\\\",\\n  \\\"RegionErosion\\\",\\n  \\\"RegionFillingStyle\\\",\\n  \\\"RegionFit\\\",\\n  \\\"RegionFunction\\\",\\n  \\\"RegionImage\\\",\\n  \\\"RegionIntersection\\\",\\n  \\\"RegionMeasure\\\",\\n  \\\"RegionMember\\\",\\n  \\\"RegionMemberFunction\\\",\\n  \\\"RegionMoment\\\",\\n  \\\"RegionNearest\\\",\\n  \\\"RegionNearestFunction\\\",\\n  \\\"RegionPlot\\\",\\n  \\\"RegionPlot3D\\\",\\n  \\\"RegionProduct\\\",\\n  \\\"RegionQ\\\",\\n  \\\"RegionResize\\\",\\n  \\\"RegionSimilar\\\",\\n  \\\"RegionSize\\\",\\n  \\\"RegionSymmetricDifference\\\",\\n  \\\"RegionUnion\\\",\\n  \\\"RegionWithin\\\",\\n  \\\"RegisterExternalEvaluator\\\",\\n  \\\"RegularExpression\\\",\\n  \\\"Regularization\\\",\\n  \\\"RegularlySampledQ\\\",\\n  \\\"RegularPolygon\\\",\\n  \\\"ReIm\\\",\\n  \\\"ReImLabels\\\",\\n  \\\"ReImPlot\\\",\\n  \\\"ReImStyle\\\",\\n  \\\"Reinstall\\\",\\n  \\\"RelationalDatabase\\\",\\n  \\\"RelationGraph\\\",\\n  \\\"Release\\\",\\n  \\\"ReleaseHold\\\",\\n  \\\"ReliabilityDistribution\\\",\\n  \\\"ReliefImage\\\",\\n  \\\"ReliefPlot\\\",\\n  \\\"RemoteAuthorizationCaching\\\",\\n  \\\"RemoteBatchJobAbort\\\",\\n  \\\"RemoteBatchJobObject\\\",\\n  \\\"RemoteBatchJobs\\\",\\n  \\\"RemoteBatchMapSubmit\\\",\\n  \\\"RemoteBatchSubmissionEnvironment\\\",\\n  \\\"RemoteBatchSubmit\\\",\\n  \\\"RemoteConnect\\\",\\n  \\\"RemoteConnectionObject\\\",\\n  \\\"RemoteEvaluate\\\",\\n  \\\"RemoteFile\\\",\\n  \\\"RemoteInputFiles\\\",\\n  \\\"RemoteKernelObject\\\",\\n  \\\"RemoteProviderSettings\\\",\\n  \\\"RemoteRun\\\",\\n  \\\"RemoteRunProcess\\\",\\n  \\\"RemovalConditions\\\",\\n  \\\"Remove\\\",\\n  \\\"RemoveAlphaChannel\\\",\\n  \\\"RemoveAsynchronousTask\\\",\\n  \\\"RemoveAudioStream\\\",\\n  \\\"RemoveBackground\\\",\\n  \\\"RemoveChannelListener\\\",\\n  \\\"RemoveChannelSubscribers\\\",\\n  \\\"Removed\\\",\\n  \\\"RemoveDiacritics\\\",\\n  \\\"RemoveInputStreamMethod\\\",\\n  \\\"RemoveOutputStreamMethod\\\",\\n  \\\"RemoveProperty\\\",\\n  \\\"RemoveScheduledTask\\\",\\n  \\\"RemoveUsers\\\",\\n  \\\"RemoveVideoStream\\\",\\n  \\\"RenameDirectory\\\",\\n  \\\"RenameFile\\\",\\n  \\\"RenderAll\\\",\\n  \\\"RenderingOptions\\\",\\n  \\\"RenewalProcess\\\",\\n  \\\"RenkoChart\\\",\\n  \\\"RepairMesh\\\",\\n  \\\"Repeated\\\",\\n  \\\"RepeatedNull\\\",\\n  \\\"RepeatedString\\\",\\n  \\\"RepeatedTiming\\\",\\n  \\\"RepeatingElement\\\",\\n  \\\"Replace\\\",\\n  \\\"ReplaceAll\\\",\\n  \\\"ReplaceAt\\\",\\n  \\\"ReplaceHeldPart\\\",\\n  \\\"ReplaceImageValue\\\",\\n  \\\"ReplaceList\\\",\\n  \\\"ReplacePart\\\",\\n  \\\"ReplacePixelValue\\\",\\n  \\\"ReplaceRepeated\\\",\\n  \\\"ReplicateLayer\\\",\\n  \\\"RequiredPhysicalQuantities\\\",\\n  \\\"Resampling\\\",\\n  \\\"ResamplingAlgorithmData\\\",\\n  \\\"ResamplingMethod\\\",\\n  \\\"Rescale\\\",\\n  \\\"RescalingTransform\\\",\\n  \\\"ResetDirectory\\\",\\n  \\\"ResetScheduledTask\\\",\\n  \\\"ReshapeLayer\\\",\\n  \\\"Residue\\\",\\n  \\\"ResidueSum\\\",\\n  \\\"ResizeLayer\\\",\\n  \\\"Resolve\\\",\\n  \\\"ResolveContextAliases\\\",\\n  \\\"ResourceAcquire\\\",\\n  \\\"ResourceData\\\",\\n  \\\"ResourceFunction\\\",\\n  \\\"ResourceObject\\\",\\n  \\\"ResourceRegister\\\",\\n  \\\"ResourceRemove\\\",\\n  \\\"ResourceSearch\\\",\\n  \\\"ResourceSubmissionObject\\\",\\n  \\\"ResourceSubmit\\\",\\n  \\\"ResourceSystemBase\\\",\\n  \\\"ResourceSystemPath\\\",\\n  \\\"ResourceUpdate\\\",\\n  \\\"ResourceVersion\\\",\\n  \\\"ResponseForm\\\",\\n  \\\"Rest\\\",\\n  \\\"RestartInterval\\\",\\n  \\\"Restricted\\\",\\n  \\\"Resultant\\\",\\n  \\\"ResumePacket\\\",\\n  \\\"Return\\\",\\n  \\\"ReturnCreatesNewCell\\\",\\n  \\\"ReturnEntersInput\\\",\\n  \\\"ReturnExpressionPacket\\\",\\n  \\\"ReturnInputFormPacket\\\",\\n  \\\"ReturnPacket\\\",\\n  \\\"ReturnReceiptFunction\\\",\\n  \\\"ReturnTextPacket\\\",\\n  \\\"Reverse\\\",\\n  \\\"ReverseApplied\\\",\\n  \\\"ReverseBiorthogonalSplineWavelet\\\",\\n  \\\"ReverseElement\\\",\\n  \\\"ReverseEquilibrium\\\",\\n  \\\"ReverseGraph\\\",\\n  \\\"ReverseSort\\\",\\n  \\\"ReverseSortBy\\\",\\n  \\\"ReverseUpEquilibrium\\\",\\n  \\\"RevolutionAxis\\\",\\n  \\\"RevolutionPlot3D\\\",\\n  \\\"RGBColor\\\",\\n  \\\"RiccatiSolve\\\",\\n  \\\"RiceDistribution\\\",\\n  \\\"RidgeFilter\\\",\\n  \\\"RiemannR\\\",\\n  \\\"RiemannSiegelTheta\\\",\\n  \\\"RiemannSiegelZ\\\",\\n  \\\"RiemannXi\\\",\\n  \\\"Riffle\\\",\\n  \\\"Right\\\",\\n  \\\"RightArrow\\\",\\n  \\\"RightArrowBar\\\",\\n  \\\"RightArrowLeftArrow\\\",\\n  \\\"RightComposition\\\",\\n  \\\"RightCosetRepresentative\\\",\\n  \\\"RightDownTeeVector\\\",\\n  \\\"RightDownVector\\\",\\n  \\\"RightDownVectorBar\\\",\\n  \\\"RightTee\\\",\\n  \\\"RightTeeArrow\\\",\\n  \\\"RightTeeVector\\\",\\n  \\\"RightTriangle\\\",\\n  \\\"RightTriangleBar\\\",\\n  \\\"RightTriangleEqual\\\",\\n  \\\"RightUpDownVector\\\",\\n  \\\"RightUpTeeVector\\\",\\n  \\\"RightUpVector\\\",\\n  \\\"RightUpVectorBar\\\",\\n  \\\"RightVector\\\",\\n  \\\"RightVectorBar\\\",\\n  \\\"RipleyK\\\",\\n  \\\"RipleyRassonRegion\\\",\\n  \\\"RiskAchievementImportance\\\",\\n  \\\"RiskReductionImportance\\\",\\n  \\\"RobustConvexOptimization\\\",\\n  \\\"RogersTanimotoDissimilarity\\\",\\n  \\\"RollPitchYawAngles\\\",\\n  \\\"RollPitchYawMatrix\\\",\\n  \\\"RomanNumeral\\\",\\n  \\\"Root\\\",\\n  \\\"RootApproximant\\\",\\n  \\\"RootIntervals\\\",\\n  \\\"RootLocusPlot\\\",\\n  \\\"RootMeanSquare\\\",\\n  \\\"RootOfUnityQ\\\",\\n  \\\"RootReduce\\\",\\n  \\\"Roots\\\",\\n  \\\"RootSum\\\",\\n  \\\"RootTree\\\",\\n  \\\"Rotate\\\",\\n  \\\"RotateLabel\\\",\\n  \\\"RotateLeft\\\",\\n  \\\"RotateRight\\\",\\n  \\\"RotationAction\\\",\\n  \\\"RotationBox\\\",\\n  \\\"RotationBoxOptions\\\",\\n  \\\"RotationMatrix\\\",\\n  \\\"RotationTransform\\\",\\n  \\\"Round\\\",\\n  \\\"RoundImplies\\\",\\n  \\\"RoundingRadius\\\",\\n  \\\"Row\\\",\\n  \\\"RowAlignments\\\",\\n  \\\"RowBackgrounds\\\",\\n  \\\"RowBox\\\",\\n  \\\"RowHeights\\\",\\n  \\\"RowLines\\\",\\n  \\\"RowMinHeight\\\",\\n  \\\"RowReduce\\\",\\n  \\\"RowsEqual\\\",\\n  \\\"RowSpacings\\\",\\n  \\\"RSolve\\\",\\n  \\\"RSolveValue\\\",\\n  \\\"RudinShapiro\\\",\\n  \\\"RudvalisGroupRu\\\",\\n  \\\"Rule\\\",\\n  \\\"RuleCondition\\\",\\n  \\\"RuleDelayed\\\",\\n  \\\"RuleForm\\\",\\n  \\\"RulePlot\\\",\\n  \\\"RulerUnits\\\",\\n  \\\"RulesTree\\\",\\n  \\\"Run\\\",\\n  \\\"RunProcess\\\",\\n  \\\"RunScheduledTask\\\",\\n  \\\"RunThrough\\\",\\n  \\\"RuntimeAttributes\\\",\\n  \\\"RuntimeOptions\\\",\\n  \\\"RussellRaoDissimilarity\\\",\\n  \\\"SameAs\\\",\\n  \\\"SameQ\\\",\\n  \\\"SameTest\\\",\\n  \\\"SameTestProperties\\\",\\n  \\\"SampledEntityClass\\\",\\n  \\\"SampleDepth\\\",\\n  \\\"SampledSoundFunction\\\",\\n  \\\"SampledSoundList\\\",\\n  \\\"SampleRate\\\",\\n  \\\"SamplingPeriod\\\",\\n  \\\"SARIMAProcess\\\",\\n  \\\"SARMAProcess\\\",\\n  \\\"SASTriangle\\\",\\n  \\\"SatelliteData\\\",\\n  \\\"SatisfiabilityCount\\\",\\n  \\\"SatisfiabilityInstances\\\",\\n  \\\"SatisfiableQ\\\",\\n  \\\"Saturday\\\",\\n  \\\"Save\\\",\\n  \\\"Saveable\\\",\\n  \\\"SaveAutoDelete\\\",\\n  \\\"SaveConnection\\\",\\n  \\\"SaveDefinitions\\\",\\n  \\\"SavitzkyGolayMatrix\\\",\\n  \\\"SawtoothWave\\\",\\n  \\\"Scale\\\",\\n  \\\"Scaled\\\",\\n  \\\"ScaleDivisions\\\",\\n  \\\"ScaledMousePosition\\\",\\n  \\\"ScaleOrigin\\\",\\n  \\\"ScalePadding\\\",\\n  \\\"ScaleRanges\\\",\\n  \\\"ScaleRangeStyle\\\",\\n  \\\"ScalingFunctions\\\",\\n  \\\"ScalingMatrix\\\",\\n  \\\"ScalingTransform\\\",\\n  \\\"Scan\\\",\\n  \\\"ScheduledTask\\\",\\n  \\\"ScheduledTaskActiveQ\\\",\\n  \\\"ScheduledTaskInformation\\\",\\n  \\\"ScheduledTaskInformationData\\\",\\n  \\\"ScheduledTaskObject\\\",\\n  \\\"ScheduledTasks\\\",\\n  \\\"SchurDecomposition\\\",\\n  \\\"ScientificForm\\\",\\n  \\\"ScientificNotationThreshold\\\",\\n  \\\"ScorerGi\\\",\\n  \\\"ScorerGiPrime\\\",\\n  \\\"ScorerHi\\\",\\n  \\\"ScorerHiPrime\\\",\\n  \\\"ScreenRectangle\\\",\\n  \\\"ScreenStyleEnvironment\\\",\\n  \\\"ScriptBaselineShifts\\\",\\n  \\\"ScriptForm\\\",\\n  \\\"ScriptLevel\\\",\\n  \\\"ScriptMinSize\\\",\\n  \\\"ScriptRules\\\",\\n  \\\"ScriptSizeMultipliers\\\",\\n  \\\"Scrollbars\\\",\\n  \\\"ScrollingOptions\\\",\\n  \\\"ScrollPosition\\\",\\n  \\\"SearchAdjustment\\\",\\n  \\\"SearchIndexObject\\\",\\n  \\\"SearchIndices\\\",\\n  \\\"SearchQueryString\\\",\\n  \\\"SearchResultObject\\\",\\n  \\\"Sec\\\",\\n  \\\"Sech\\\",\\n  \\\"SechDistribution\\\",\\n  \\\"SecondOrderConeOptimization\\\",\\n  \\\"SectionGrouping\\\",\\n  \\\"SectorChart\\\",\\n  \\\"SectorChart3D\\\",\\n  \\\"SectorOrigin\\\",\\n  \\\"SectorSpacing\\\",\\n  \\\"SecuredAuthenticationKey\\\",\\n  \\\"SecuredAuthenticationKeys\\\",\\n  \\\"SecurityCertificate\\\",\\n  \\\"SeedRandom\\\",\\n  \\\"Select\\\",\\n  \\\"Selectable\\\",\\n  \\\"SelectComponents\\\",\\n  \\\"SelectedCells\\\",\\n  \\\"SelectedNotebook\\\",\\n  \\\"SelectFirst\\\",\\n  \\\"Selection\\\",\\n  \\\"SelectionAnimate\\\",\\n  \\\"SelectionCell\\\",\\n  \\\"SelectionCellCreateCell\\\",\\n  \\\"SelectionCellDefaultStyle\\\",\\n  \\\"SelectionCellParentStyle\\\",\\n  \\\"SelectionCreateCell\\\",\\n  \\\"SelectionDebuggerTag\\\",\\n  \\\"SelectionEvaluate\\\",\\n  \\\"SelectionEvaluateCreateCell\\\",\\n  \\\"SelectionMove\\\",\\n  \\\"SelectionPlaceholder\\\",\\n  \\\"SelectWithContents\\\",\\n  \\\"SelfLoops\\\",\\n  \\\"SelfLoopStyle\\\",\\n  \\\"SemanticImport\\\",\\n  \\\"SemanticImportString\\\",\\n  \\\"SemanticInterpretation\\\",\\n  \\\"SemialgebraicComponentInstances\\\",\\n  \\\"SemidefiniteOptimization\\\",\\n  \\\"SendMail\\\",\\n  \\\"SendMessage\\\",\\n  \\\"Sequence\\\",\\n  \\\"SequenceAlignment\\\",\\n  \\\"SequenceAttentionLayer\\\",\\n  \\\"SequenceCases\\\",\\n  \\\"SequenceCount\\\",\\n  \\\"SequenceFold\\\",\\n  \\\"SequenceFoldList\\\",\\n  \\\"SequenceForm\\\",\\n  \\\"SequenceHold\\\",\\n  \\\"SequenceIndicesLayer\\\",\\n  \\\"SequenceLastLayer\\\",\\n  \\\"SequenceMostLayer\\\",\\n  \\\"SequencePosition\\\",\\n  \\\"SequencePredict\\\",\\n  \\\"SequencePredictorFunction\\\",\\n  \\\"SequenceReplace\\\",\\n  \\\"SequenceRestLayer\\\",\\n  \\\"SequenceReverseLayer\\\",\\n  \\\"SequenceSplit\\\",\\n  \\\"Series\\\",\\n  \\\"SeriesCoefficient\\\",\\n  \\\"SeriesData\\\",\\n  \\\"SeriesTermGoal\\\",\\n  \\\"ServiceConnect\\\",\\n  \\\"ServiceDisconnect\\\",\\n  \\\"ServiceExecute\\\",\\n  \\\"ServiceObject\\\",\\n  \\\"ServiceRequest\\\",\\n  \\\"ServiceResponse\\\",\\n  \\\"ServiceSubmit\\\",\\n  \\\"SessionSubmit\\\",\\n  \\\"SessionTime\\\",\\n  \\\"Set\\\",\\n  \\\"SetAccuracy\\\",\\n  \\\"SetAlphaChannel\\\",\\n  \\\"SetAttributes\\\",\\n  \\\"Setbacks\\\",\\n  \\\"SetCloudDirectory\\\",\\n  \\\"SetCookies\\\",\\n  \\\"SetDelayed\\\",\\n  \\\"SetDirectory\\\",\\n  \\\"SetEnvironment\\\",\\n  \\\"SetFileDate\\\",\\n  \\\"SetFileFormatProperties\\\",\\n  \\\"SetOptions\\\",\\n  \\\"SetOptionsPacket\\\",\\n  \\\"SetPermissions\\\",\\n  \\\"SetPrecision\\\",\\n  \\\"SetProperty\\\",\\n  \\\"SetSecuredAuthenticationKey\\\",\\n  \\\"SetSelectedNotebook\\\",\\n  \\\"SetSharedFunction\\\",\\n  \\\"SetSharedVariable\\\",\\n  \\\"SetStreamPosition\\\",\\n  \\\"SetSystemModel\\\",\\n  \\\"SetSystemOptions\\\",\\n  \\\"Setter\\\",\\n  \\\"SetterBar\\\",\\n  \\\"SetterBox\\\",\\n  \\\"SetterBoxOptions\\\",\\n  \\\"Setting\\\",\\n  \\\"SetUsers\\\",\\n  \\\"Shading\\\",\\n  \\\"Shallow\\\",\\n  \\\"ShannonWavelet\\\",\\n  \\\"ShapiroWilkTest\\\",\\n  \\\"Share\\\",\\n  \\\"SharingList\\\",\\n  \\\"Sharpen\\\",\\n  \\\"ShearingMatrix\\\",\\n  \\\"ShearingTransform\\\",\\n  \\\"ShellRegion\\\",\\n  \\\"ShenCastanMatrix\\\",\\n  \\\"ShiftedGompertzDistribution\\\",\\n  \\\"ShiftRegisterSequence\\\",\\n  \\\"Short\\\",\\n  \\\"ShortDownArrow\\\",\\n  \\\"Shortest\\\",\\n  \\\"ShortestMatch\\\",\\n  \\\"ShortestPathFunction\\\",\\n  \\\"ShortLeftArrow\\\",\\n  \\\"ShortRightArrow\\\",\\n  \\\"ShortTimeFourier\\\",\\n  \\\"ShortTimeFourierData\\\",\\n  \\\"ShortUpArrow\\\",\\n  \\\"Show\\\",\\n  \\\"ShowAutoConvert\\\",\\n  \\\"ShowAutoSpellCheck\\\",\\n  \\\"ShowAutoStyles\\\",\\n  \\\"ShowCellBracket\\\",\\n  \\\"ShowCellLabel\\\",\\n  \\\"ShowCellTags\\\",\\n  \\\"ShowClosedCellArea\\\",\\n  \\\"ShowCodeAssist\\\",\\n  \\\"ShowContents\\\",\\n  \\\"ShowControls\\\",\\n  \\\"ShowCursorTracker\\\",\\n  \\\"ShowGroupOpenCloseIcon\\\",\\n  \\\"ShowGroupOpener\\\",\\n  \\\"ShowInvisibleCharacters\\\",\\n  \\\"ShowPageBreaks\\\",\\n  \\\"ShowPredictiveInterface\\\",\\n  \\\"ShowSelection\\\",\\n  \\\"ShowShortBoxForm\\\",\\n  \\\"ShowSpecialCharacters\\\",\\n  \\\"ShowStringCharacters\\\",\\n  \\\"ShowSyntaxStyles\\\",\\n  \\\"ShrinkingDelay\\\",\\n  \\\"ShrinkWrapBoundingBox\\\",\\n  \\\"SiderealTime\\\",\\n  \\\"SiegelTheta\\\",\\n  \\\"SiegelTukeyTest\\\",\\n  \\\"SierpinskiCurve\\\",\\n  \\\"SierpinskiMesh\\\",\\n  \\\"Sign\\\",\\n  \\\"Signature\\\",\\n  \\\"SignedRankTest\\\",\\n  \\\"SignedRegionDistance\\\",\\n  \\\"SignificanceLevel\\\",\\n  \\\"SignPadding\\\",\\n  \\\"SignTest\\\",\\n  \\\"SimilarityRules\\\",\\n  \\\"SimpleGraph\\\",\\n  \\\"SimpleGraphQ\\\",\\n  \\\"SimplePolygonQ\\\",\\n  \\\"SimplePolyhedronQ\\\",\\n  \\\"Simplex\\\",\\n  \\\"Simplify\\\",\\n  \\\"Sin\\\",\\n  \\\"Sinc\\\",\\n  \\\"SinghMaddalaDistribution\\\",\\n  \\\"SingleEvaluation\\\",\\n  \\\"SingleLetterItalics\\\",\\n  \\\"SingleLetterStyle\\\",\\n  \\\"SingularValueDecomposition\\\",\\n  \\\"SingularValueList\\\",\\n  \\\"SingularValuePlot\\\",\\n  \\\"SingularValues\\\",\\n  \\\"Sinh\\\",\\n  \\\"SinhIntegral\\\",\\n  \\\"SinIntegral\\\",\\n  \\\"SixJSymbol\\\",\\n  \\\"Skeleton\\\",\\n  \\\"SkeletonTransform\\\",\\n  \\\"SkellamDistribution\\\",\\n  \\\"Skewness\\\",\\n  \\\"SkewNormalDistribution\\\",\\n  \\\"SkinStyle\\\",\\n  \\\"Skip\\\",\\n  \\\"SliceContourPlot3D\\\",\\n  \\\"SliceDensityPlot3D\\\",\\n  \\\"SliceDistribution\\\",\\n  \\\"SliceVectorPlot3D\\\",\\n  \\\"Slider\\\",\\n  \\\"Slider2D\\\",\\n  \\\"Slider2DBox\\\",\\n  \\\"Slider2DBoxOptions\\\",\\n  \\\"SliderBox\\\",\\n  \\\"SliderBoxOptions\\\",\\n  \\\"SlideShowVideo\\\",\\n  \\\"SlideView\\\",\\n  \\\"Slot\\\",\\n  \\\"SlotSequence\\\",\\n  \\\"Small\\\",\\n  \\\"SmallCircle\\\",\\n  \\\"Smaller\\\",\\n  \\\"SmithDecomposition\\\",\\n  \\\"SmithDelayCompensator\\\",\\n  \\\"SmithWatermanSimilarity\\\",\\n  \\\"SmoothDensityHistogram\\\",\\n  \\\"SmoothHistogram\\\",\\n  \\\"SmoothHistogram3D\\\",\\n  \\\"SmoothKernelDistribution\\\",\\n  \\\"SmoothPointDensity\\\",\\n  \\\"SnDispersion\\\",\\n  \\\"Snippet\\\",\\n  \\\"SnippetsVideo\\\",\\n  \\\"SnubPolyhedron\\\",\\n  \\\"SocialMediaData\\\",\\n  \\\"Socket\\\",\\n  \\\"SocketConnect\\\",\\n  \\\"SocketListen\\\",\\n  \\\"SocketListener\\\",\\n  \\\"SocketObject\\\",\\n  \\\"SocketOpen\\\",\\n  \\\"SocketReadMessage\\\",\\n  \\\"SocketReadyQ\\\",\\n  \\\"Sockets\\\",\\n  \\\"SocketWaitAll\\\",\\n  \\\"SocketWaitNext\\\",\\n  \\\"SoftmaxLayer\\\",\\n  \\\"SokalSneathDissimilarity\\\",\\n  \\\"SolarEclipse\\\",\\n  \\\"SolarSystemFeatureData\\\",\\n  \\\"SolarTime\\\",\\n  \\\"SolidAngle\\\",\\n  \\\"SolidBoundaryLoadValue\\\",\\n  \\\"SolidData\\\",\\n  \\\"SolidDisplacementCondition\\\",\\n  \\\"SolidFixedCondition\\\",\\n  \\\"SolidMechanicsPDEComponent\\\",\\n  \\\"SolidMechanicsStrain\\\",\\n  \\\"SolidMechanicsStress\\\",\\n  \\\"SolidRegionQ\\\",\\n  \\\"Solve\\\",\\n  \\\"SolveAlways\\\",\\n  \\\"SolveDelayed\\\",\\n  \\\"SolveValues\\\",\\n  \\\"Sort\\\",\\n  \\\"SortBy\\\",\\n  \\\"SortedBy\\\",\\n  \\\"SortedEntityClass\\\",\\n  \\\"Sound\\\",\\n  \\\"SoundAndGraphics\\\",\\n  \\\"SoundNote\\\",\\n  \\\"SoundVolume\\\",\\n  \\\"SourceLink\\\",\\n  \\\"SourcePDETerm\\\",\\n  \\\"Sow\\\",\\n  \\\"Space\\\",\\n  \\\"SpaceCurveData\\\",\\n  \\\"SpaceForm\\\",\\n  \\\"Spacer\\\",\\n  \\\"Spacings\\\",\\n  \\\"Span\\\",\\n  \\\"SpanAdjustments\\\",\\n  \\\"SpanCharacterRounding\\\",\\n  \\\"SpanFromAbove\\\",\\n  \\\"SpanFromBoth\\\",\\n  \\\"SpanFromLeft\\\",\\n  \\\"SpanLineThickness\\\",\\n  \\\"SpanMaxSize\\\",\\n  \\\"SpanMinSize\\\",\\n  \\\"SpanningCharacters\\\",\\n  \\\"SpanSymmetric\\\",\\n  \\\"SparseArray\\\",\\n  \\\"SparseArrayQ\\\",\\n  \\\"SpatialBinnedPointData\\\",\\n  \\\"SpatialBoundaryCorrection\\\",\\n  \\\"SpatialEstimate\\\",\\n  \\\"SpatialEstimatorFunction\\\",\\n  \\\"SpatialGraphDistribution\\\",\\n  \\\"SpatialJ\\\",\\n  \\\"SpatialMedian\\\",\\n  \\\"SpatialNoiseLevel\\\",\\n  \\\"SpatialObservationRegionQ\\\",\\n  \\\"SpatialPointData\\\",\\n  \\\"SpatialPointSelect\\\",\\n  \\\"SpatialRandomnessTest\\\",\\n  \\\"SpatialTransformationLayer\\\",\\n  \\\"SpatialTrendFunction\\\",\\n  \\\"Speak\\\",\\n  \\\"SpeakerMatchQ\\\",\\n  \\\"SpearmanRankTest\\\",\\n  \\\"SpearmanRho\\\",\\n  \\\"SpeciesData\\\",\\n  \\\"SpecificityGoal\\\",\\n  \\\"SpectralLineData\\\",\\n  \\\"Spectrogram\\\",\\n  \\\"SpectrogramArray\\\",\\n  \\\"Specularity\\\",\\n  \\\"SpeechCases\\\",\\n  \\\"SpeechInterpreter\\\",\\n  \\\"SpeechRecognize\\\",\\n  \\\"SpeechSynthesize\\\",\\n  \\\"SpellingCorrection\\\",\\n  \\\"SpellingCorrectionList\\\",\\n  \\\"SpellingDictionaries\\\",\\n  \\\"SpellingDictionariesPath\\\",\\n  \\\"SpellingOptions\\\",\\n  \\\"Sphere\\\",\\n  \\\"SphereBox\\\",\\n  \\\"SphereBoxOptions\\\",\\n  \\\"SpherePoints\\\",\\n  \\\"SphericalBesselJ\\\",\\n  \\\"SphericalBesselY\\\",\\n  \\\"SphericalHankelH1\\\",\\n  \\\"SphericalHankelH2\\\",\\n  \\\"SphericalHarmonicY\\\",\\n  \\\"SphericalPlot3D\\\",\\n  \\\"SphericalRegion\\\",\\n  \\\"SphericalShell\\\",\\n  \\\"SpheroidalEigenvalue\\\",\\n  \\\"SpheroidalJoiningFactor\\\",\\n  \\\"SpheroidalPS\\\",\\n  \\\"SpheroidalPSPrime\\\",\\n  \\\"SpheroidalQS\\\",\\n  \\\"SpheroidalQSPrime\\\",\\n  \\\"SpheroidalRadialFactor\\\",\\n  \\\"SpheroidalS1\\\",\\n  \\\"SpheroidalS1Prime\\\",\\n  \\\"SpheroidalS2\\\",\\n  \\\"SpheroidalS2Prime\\\",\\n  \\\"Splice\\\",\\n  \\\"SplicedDistribution\\\",\\n  \\\"SplineClosed\\\",\\n  \\\"SplineDegree\\\",\\n  \\\"SplineKnots\\\",\\n  \\\"SplineWeights\\\",\\n  \\\"Split\\\",\\n  \\\"SplitBy\\\",\\n  \\\"SpokenString\\\",\\n  \\\"SpotLight\\\",\\n  \\\"Sqrt\\\",\\n  \\\"SqrtBox\\\",\\n  \\\"SqrtBoxOptions\\\",\\n  \\\"Square\\\",\\n  \\\"SquaredEuclideanDistance\\\",\\n  \\\"SquareFreeQ\\\",\\n  \\\"SquareIntersection\\\",\\n  \\\"SquareMatrixQ\\\",\\n  \\\"SquareRepeatingElement\\\",\\n  \\\"SquaresR\\\",\\n  \\\"SquareSubset\\\",\\n  \\\"SquareSubsetEqual\\\",\\n  \\\"SquareSuperset\\\",\\n  \\\"SquareSupersetEqual\\\",\\n  \\\"SquareUnion\\\",\\n  \\\"SquareWave\\\",\\n  \\\"SSSTriangle\\\",\\n  \\\"StabilityMargins\\\",\\n  \\\"StabilityMarginsStyle\\\",\\n  \\\"StableDistribution\\\",\\n  \\\"Stack\\\",\\n  \\\"StackBegin\\\",\\n  \\\"StackComplete\\\",\\n  \\\"StackedDateListPlot\\\",\\n  \\\"StackedListPlot\\\",\\n  \\\"StackInhibit\\\",\\n  \\\"StadiumShape\\\",\\n  \\\"StandardAtmosphereData\\\",\\n  \\\"StandardDeviation\\\",\\n  \\\"StandardDeviationFilter\\\",\\n  \\\"StandardForm\\\",\\n  \\\"Standardize\\\",\\n  \\\"Standardized\\\",\\n  \\\"StandardOceanData\\\",\\n  \\\"StandbyDistribution\\\",\\n  \\\"Star\\\",\\n  \\\"StarClusterData\\\",\\n  \\\"StarData\\\",\\n  \\\"StarGraph\\\",\\n  \\\"StartAsynchronousTask\\\",\\n  \\\"StartExternalSession\\\",\\n  \\\"StartingStepSize\\\",\\n  \\\"StartOfLine\\\",\\n  \\\"StartOfString\\\",\\n  \\\"StartProcess\\\",\\n  \\\"StartScheduledTask\\\",\\n  \\\"StartupSound\\\",\\n  \\\"StartWebSession\\\",\\n  \\\"StateDimensions\\\",\\n  \\\"StateFeedbackGains\\\",\\n  \\\"StateOutputEstimator\\\",\\n  \\\"StateResponse\\\",\\n  \\\"StateSpaceModel\\\",\\n  \\\"StateSpaceRealization\\\",\\n  \\\"StateSpaceTransform\\\",\\n  \\\"StateTransformationLinearize\\\",\\n  \\\"StationaryDistribution\\\",\\n  \\\"StationaryWaveletPacketTransform\\\",\\n  \\\"StationaryWaveletTransform\\\",\\n  \\\"StatusArea\\\",\\n  \\\"StatusCentrality\\\",\\n  \\\"StepMonitor\\\",\\n  \\\"StereochemistryElements\\\",\\n  \\\"StieltjesGamma\\\",\\n  \\\"StippleShading\\\",\\n  \\\"StirlingS1\\\",\\n  \\\"StirlingS2\\\",\\n  \\\"StopAsynchronousTask\\\",\\n  \\\"StoppingPowerData\\\",\\n  \\\"StopScheduledTask\\\",\\n  \\\"StrataVariables\\\",\\n  \\\"StratonovichProcess\\\",\\n  \\\"StraussHardcorePointProcess\\\",\\n  \\\"StraussPointProcess\\\",\\n  \\\"StreamColorFunction\\\",\\n  \\\"StreamColorFunctionScaling\\\",\\n  \\\"StreamDensityPlot\\\",\\n  \\\"StreamMarkers\\\",\\n  \\\"StreamPlot\\\",\\n  \\\"StreamPlot3D\\\",\\n  \\\"StreamPoints\\\",\\n  \\\"StreamPosition\\\",\\n  \\\"Streams\\\",\\n  \\\"StreamScale\\\",\\n  \\\"StreamStyle\\\",\\n  \\\"StrictInequalities\\\",\\n  \\\"String\\\",\\n  \\\"StringBreak\\\",\\n  \\\"StringByteCount\\\",\\n  \\\"StringCases\\\",\\n  \\\"StringContainsQ\\\",\\n  \\\"StringCount\\\",\\n  \\\"StringDelete\\\",\\n  \\\"StringDrop\\\",\\n  \\\"StringEndsQ\\\",\\n  \\\"StringExpression\\\",\\n  \\\"StringExtract\\\",\\n  \\\"StringForm\\\",\\n  \\\"StringFormat\\\",\\n  \\\"StringFormatQ\\\",\\n  \\\"StringFreeQ\\\",\\n  \\\"StringInsert\\\",\\n  \\\"StringJoin\\\",\\n  \\\"StringLength\\\",\\n  \\\"StringMatchQ\\\",\\n  \\\"StringPadLeft\\\",\\n  \\\"StringPadRight\\\",\\n  \\\"StringPart\\\",\\n  \\\"StringPartition\\\",\\n  \\\"StringPosition\\\",\\n  \\\"StringQ\\\",\\n  \\\"StringRepeat\\\",\\n  \\\"StringReplace\\\",\\n  \\\"StringReplaceList\\\",\\n  \\\"StringReplacePart\\\",\\n  \\\"StringReverse\\\",\\n  \\\"StringRiffle\\\",\\n  \\\"StringRotateLeft\\\",\\n  \\\"StringRotateRight\\\",\\n  \\\"StringSkeleton\\\",\\n  \\\"StringSplit\\\",\\n  \\\"StringStartsQ\\\",\\n  \\\"StringTake\\\",\\n  \\\"StringTakeDrop\\\",\\n  \\\"StringTemplate\\\",\\n  \\\"StringToByteArray\\\",\\n  \\\"StringToStream\\\",\\n  \\\"StringTrim\\\",\\n  \\\"StripBoxes\\\",\\n  \\\"StripOnInput\\\",\\n  \\\"StripStyleOnPaste\\\",\\n  \\\"StripWrapperBoxes\\\",\\n  \\\"StrokeForm\\\",\\n  \\\"Struckthrough\\\",\\n  \\\"StructuralImportance\\\",\\n  \\\"StructuredArray\\\",\\n  \\\"StructuredArrayHeadQ\\\",\\n  \\\"StructuredSelection\\\",\\n  \\\"StruveH\\\",\\n  \\\"StruveL\\\",\\n  \\\"Stub\\\",\\n  \\\"StudentTDistribution\\\",\\n  \\\"Style\\\",\\n  \\\"StyleBox\\\",\\n  \\\"StyleBoxAutoDelete\\\",\\n  \\\"StyleData\\\",\\n  \\\"StyleDefinitions\\\",\\n  \\\"StyleForm\\\",\\n  \\\"StyleHints\\\",\\n  \\\"StyleKeyMapping\\\",\\n  \\\"StyleMenuListing\\\",\\n  \\\"StyleNameDialogSettings\\\",\\n  \\\"StyleNames\\\",\\n  \\\"StylePrint\\\",\\n  \\\"StyleSheetPath\\\",\\n  \\\"Subdivide\\\",\\n  \\\"Subfactorial\\\",\\n  \\\"Subgraph\\\",\\n  \\\"SubMinus\\\",\\n  \\\"SubPlus\\\",\\n  \\\"SubresultantPolynomialRemainders\\\",\\n  \\\"SubresultantPolynomials\\\",\\n  \\\"Subresultants\\\",\\n  \\\"Subscript\\\",\\n  \\\"SubscriptBox\\\",\\n  \\\"SubscriptBoxOptions\\\",\\n  \\\"Subscripted\\\",\\n  \\\"Subsequences\\\",\\n  \\\"Subset\\\",\\n  \\\"SubsetCases\\\",\\n  \\\"SubsetCount\\\",\\n  \\\"SubsetEqual\\\",\\n  \\\"SubsetMap\\\",\\n  \\\"SubsetPosition\\\",\\n  \\\"SubsetQ\\\",\\n  \\\"SubsetReplace\\\",\\n  \\\"Subsets\\\",\\n  \\\"SubStar\\\",\\n  \\\"SubstitutionSystem\\\",\\n  \\\"Subsuperscript\\\",\\n  \\\"SubsuperscriptBox\\\",\\n  \\\"SubsuperscriptBoxOptions\\\",\\n  \\\"SubtitleEncoding\\\",\\n  \\\"SubtitleTrackSelection\\\",\\n  \\\"Subtract\\\",\\n  \\\"SubtractFrom\\\",\\n  \\\"SubtractSides\\\",\\n  \\\"SubValues\\\",\\n  \\\"Succeeds\\\",\\n  \\\"SucceedsEqual\\\",\\n  \\\"SucceedsSlantEqual\\\",\\n  \\\"SucceedsTilde\\\",\\n  \\\"Success\\\",\\n  \\\"SuchThat\\\",\\n  \\\"Sum\\\",\\n  \\\"SumConvergence\\\",\\n  \\\"SummationLayer\\\",\\n  \\\"Sunday\\\",\\n  \\\"SunPosition\\\",\\n  \\\"Sunrise\\\",\\n  \\\"Sunset\\\",\\n  \\\"SuperDagger\\\",\\n  \\\"SuperMinus\\\",\\n  \\\"SupernovaData\\\",\\n  \\\"SuperPlus\\\",\\n  \\\"Superscript\\\",\\n  \\\"SuperscriptBox\\\",\\n  \\\"SuperscriptBoxOptions\\\",\\n  \\\"Superset\\\",\\n  \\\"SupersetEqual\\\",\\n  \\\"SuperStar\\\",\\n  \\\"Surd\\\",\\n  \\\"SurdForm\\\",\\n  \\\"SurfaceAppearance\\\",\\n  \\\"SurfaceArea\\\",\\n  \\\"SurfaceColor\\\",\\n  \\\"SurfaceData\\\",\\n  \\\"SurfaceGraphics\\\",\\n  \\\"SurvivalDistribution\\\",\\n  \\\"SurvivalFunction\\\",\\n  \\\"SurvivalModel\\\",\\n  \\\"SurvivalModelFit\\\",\\n  \\\"SuspendPacket\\\",\\n  \\\"SuzukiDistribution\\\",\\n  \\\"SuzukiGroupSuz\\\",\\n  \\\"SwatchLegend\\\",\\n  \\\"Switch\\\",\\n  \\\"Symbol\\\",\\n  \\\"SymbolName\\\",\\n  \\\"SymletWavelet\\\",\\n  \\\"Symmetric\\\",\\n  \\\"SymmetricDifference\\\",\\n  \\\"SymmetricGroup\\\",\\n  \\\"SymmetricKey\\\",\\n  \\\"SymmetricMatrixQ\\\",\\n  \\\"SymmetricPolynomial\\\",\\n  \\\"SymmetricReduction\\\",\\n  \\\"Symmetrize\\\",\\n  \\\"SymmetrizedArray\\\",\\n  \\\"SymmetrizedArrayRules\\\",\\n  \\\"SymmetrizedDependentComponents\\\",\\n  \\\"SymmetrizedIndependentComponents\\\",\\n  \\\"SymmetrizedReplacePart\\\",\\n  \\\"SynchronousInitialization\\\",\\n  \\\"SynchronousUpdating\\\",\\n  \\\"Synonyms\\\",\\n  \\\"Syntax\\\",\\n  \\\"SyntaxForm\\\",\\n  \\\"SyntaxInformation\\\",\\n  \\\"SyntaxLength\\\",\\n  \\\"SyntaxPacket\\\",\\n  \\\"SyntaxQ\\\",\\n  \\\"SynthesizeMissingValues\\\",\\n  \\\"SystemCredential\\\",\\n  \\\"SystemCredentialData\\\",\\n  \\\"SystemCredentialKey\\\",\\n  \\\"SystemCredentialKeys\\\",\\n  \\\"SystemCredentialStoreObject\\\",\\n  \\\"SystemDialogInput\\\",\\n  \\\"SystemException\\\",\\n  \\\"SystemGet\\\",\\n  \\\"SystemHelpPath\\\",\\n  \\\"SystemInformation\\\",\\n  \\\"SystemInformationData\\\",\\n  \\\"SystemInstall\\\",\\n  \\\"SystemModel\\\",\\n  \\\"SystemModeler\\\",\\n  \\\"SystemModelExamples\\\",\\n  \\\"SystemModelLinearize\\\",\\n  \\\"SystemModelMeasurements\\\",\\n  \\\"SystemModelParametricSimulate\\\",\\n  \\\"SystemModelPlot\\\",\\n  \\\"SystemModelProgressReporting\\\",\\n  \\\"SystemModelReliability\\\",\\n  \\\"SystemModels\\\",\\n  \\\"SystemModelSimulate\\\",\\n  \\\"SystemModelSimulateSensitivity\\\",\\n  \\\"SystemModelSimulationData\\\",\\n  \\\"SystemOpen\\\",\\n  \\\"SystemOptions\\\",\\n  \\\"SystemProcessData\\\",\\n  \\\"SystemProcesses\\\",\\n  \\\"SystemsConnectionsModel\\\",\\n  \\\"SystemsModelControllerData\\\",\\n  \\\"SystemsModelDelay\\\",\\n  \\\"SystemsModelDelayApproximate\\\",\\n  \\\"SystemsModelDelete\\\",\\n  \\\"SystemsModelDimensions\\\",\\n  \\\"SystemsModelExtract\\\",\\n  \\\"SystemsModelFeedbackConnect\\\",\\n  \\\"SystemsModelLabels\\\",\\n  \\\"SystemsModelLinearity\\\",\\n  \\\"SystemsModelMerge\\\",\\n  \\\"SystemsModelOrder\\\",\\n  \\\"SystemsModelParallelConnect\\\",\\n  \\\"SystemsModelSeriesConnect\\\",\\n  \\\"SystemsModelStateFeedbackConnect\\\",\\n  \\\"SystemsModelVectorRelativeOrders\\\",\\n  \\\"SystemStub\\\",\\n  \\\"SystemTest\\\",\\n  \\\"Tab\\\",\\n  \\\"TabFilling\\\",\\n  \\\"Table\\\",\\n  \\\"TableAlignments\\\",\\n  \\\"TableDepth\\\",\\n  \\\"TableDirections\\\",\\n  \\\"TableForm\\\",\\n  \\\"TableHeadings\\\",\\n  \\\"TableSpacing\\\",\\n  \\\"TableView\\\",\\n  \\\"TableViewBox\\\",\\n  \\\"TableViewBoxAlignment\\\",\\n  \\\"TableViewBoxBackground\\\",\\n  \\\"TableViewBoxHeaders\\\",\\n  \\\"TableViewBoxItemSize\\\",\\n  \\\"TableViewBoxItemStyle\\\",\\n  \\\"TableViewBoxOptions\\\",\\n  \\\"TabSpacings\\\",\\n  \\\"TabView\\\",\\n  \\\"TabViewBox\\\",\\n  \\\"TabViewBoxOptions\\\",\\n  \\\"TagBox\\\",\\n  \\\"TagBoxNote\\\",\\n  \\\"TagBoxOptions\\\",\\n  \\\"TaggingRules\\\",\\n  \\\"TagSet\\\",\\n  \\\"TagSetDelayed\\\",\\n  \\\"TagStyle\\\",\\n  \\\"TagUnset\\\",\\n  \\\"Take\\\",\\n  \\\"TakeDrop\\\",\\n  \\\"TakeLargest\\\",\\n  \\\"TakeLargestBy\\\",\\n  \\\"TakeList\\\",\\n  \\\"TakeSmallest\\\",\\n  \\\"TakeSmallestBy\\\",\\n  \\\"TakeWhile\\\",\\n  \\\"Tally\\\",\\n  \\\"Tan\\\",\\n  \\\"Tanh\\\",\\n  \\\"TargetDevice\\\",\\n  \\\"TargetFunctions\\\",\\n  \\\"TargetSystem\\\",\\n  \\\"TargetUnits\\\",\\n  \\\"TaskAbort\\\",\\n  \\\"TaskExecute\\\",\\n  \\\"TaskObject\\\",\\n  \\\"TaskRemove\\\",\\n  \\\"TaskResume\\\",\\n  \\\"Tasks\\\",\\n  \\\"TaskSuspend\\\",\\n  \\\"TaskWait\\\",\\n  \\\"TautologyQ\\\",\\n  \\\"TelegraphProcess\\\",\\n  \\\"TemplateApply\\\",\\n  \\\"TemplateArgBox\\\",\\n  \\\"TemplateBox\\\",\\n  \\\"TemplateBoxOptions\\\",\\n  \\\"TemplateEvaluate\\\",\\n  \\\"TemplateExpression\\\",\\n  \\\"TemplateIf\\\",\\n  \\\"TemplateObject\\\",\\n  \\\"TemplateSequence\\\",\\n  \\\"TemplateSlot\\\",\\n  \\\"TemplateSlotSequence\\\",\\n  \\\"TemplateUnevaluated\\\",\\n  \\\"TemplateVerbatim\\\",\\n  \\\"TemplateWith\\\",\\n  \\\"TemporalData\\\",\\n  \\\"TemporalRegularity\\\",\\n  \\\"Temporary\\\",\\n  \\\"TemporaryVariable\\\",\\n  \\\"TensorContract\\\",\\n  \\\"TensorDimensions\\\",\\n  \\\"TensorExpand\\\",\\n  \\\"TensorProduct\\\",\\n  \\\"TensorQ\\\",\\n  \\\"TensorRank\\\",\\n  \\\"TensorReduce\\\",\\n  \\\"TensorSymmetry\\\",\\n  \\\"TensorTranspose\\\",\\n  \\\"TensorWedge\\\",\\n  \\\"TerminatedEvaluation\\\",\\n  \\\"TernaryListPlot\\\",\\n  \\\"TernaryPlotCorners\\\",\\n  \\\"TestID\\\",\\n  \\\"TestReport\\\",\\n  \\\"TestReportObject\\\",\\n  \\\"TestResultObject\\\",\\n  \\\"Tetrahedron\\\",\\n  \\\"TetrahedronBox\\\",\\n  \\\"TetrahedronBoxOptions\\\",\\n  \\\"TeXForm\\\",\\n  \\\"TeXSave\\\",\\n  \\\"Text\\\",\\n  \\\"Text3DBox\\\",\\n  \\\"Text3DBoxOptions\\\",\\n  \\\"TextAlignment\\\",\\n  \\\"TextBand\\\",\\n  \\\"TextBoundingBox\\\",\\n  \\\"TextBox\\\",\\n  \\\"TextCases\\\",\\n  \\\"TextCell\\\",\\n  \\\"TextClipboardType\\\",\\n  \\\"TextContents\\\",\\n  \\\"TextData\\\",\\n  \\\"TextElement\\\",\\n  \\\"TextForm\\\",\\n  \\\"TextGrid\\\",\\n  \\\"TextJustification\\\",\\n  \\\"TextLine\\\",\\n  \\\"TextPacket\\\",\\n  \\\"TextParagraph\\\",\\n  \\\"TextPosition\\\",\\n  \\\"TextRecognize\\\",\\n  \\\"TextSearch\\\",\\n  \\\"TextSearchReport\\\",\\n  \\\"TextSentences\\\",\\n  \\\"TextString\\\",\\n  \\\"TextStructure\\\",\\n  \\\"TextStyle\\\",\\n  \\\"TextTranslation\\\",\\n  \\\"Texture\\\",\\n  \\\"TextureCoordinateFunction\\\",\\n  \\\"TextureCoordinateScaling\\\",\\n  \\\"TextWords\\\",\\n  \\\"Therefore\\\",\\n  \\\"ThermodynamicData\\\",\\n  \\\"ThermometerGauge\\\",\\n  \\\"Thick\\\",\\n  \\\"Thickness\\\",\\n  \\\"Thin\\\",\\n  \\\"Thinning\\\",\\n  \\\"ThisLink\\\",\\n  \\\"ThomasPointProcess\\\",\\n  \\\"ThompsonGroupTh\\\",\\n  \\\"Thread\\\",\\n  \\\"Threaded\\\",\\n  \\\"ThreadingLayer\\\",\\n  \\\"ThreeJSymbol\\\",\\n  \\\"Threshold\\\",\\n  \\\"Through\\\",\\n  \\\"Throw\\\",\\n  \\\"ThueMorse\\\",\\n  \\\"Thumbnail\\\",\\n  \\\"Thursday\\\",\\n  \\\"TickDirection\\\",\\n  \\\"TickLabelOrientation\\\",\\n  \\\"TickLabelPositioning\\\",\\n  \\\"TickLabels\\\",\\n  \\\"TickLengths\\\",\\n  \\\"TickPositions\\\",\\n  \\\"Ticks\\\",\\n  \\\"TicksStyle\\\",\\n  \\\"TideData\\\",\\n  \\\"Tilde\\\",\\n  \\\"TildeEqual\\\",\\n  \\\"TildeFullEqual\\\",\\n  \\\"TildeTilde\\\",\\n  \\\"TimeConstrained\\\",\\n  \\\"TimeConstraint\\\",\\n  \\\"TimeDirection\\\",\\n  \\\"TimeFormat\\\",\\n  \\\"TimeGoal\\\",\\n  \\\"TimelinePlot\\\",\\n  \\\"TimeObject\\\",\\n  \\\"TimeObjectQ\\\",\\n  \\\"TimeRemaining\\\",\\n  \\\"Times\\\",\\n  \\\"TimesBy\\\",\\n  \\\"TimeSeries\\\",\\n  \\\"TimeSeriesAggregate\\\",\\n  \\\"TimeSeriesForecast\\\",\\n  \\\"TimeSeriesInsert\\\",\\n  \\\"TimeSeriesInvertibility\\\",\\n  \\\"TimeSeriesMap\\\",\\n  \\\"TimeSeriesMapThread\\\",\\n  \\\"TimeSeriesModel\\\",\\n  \\\"TimeSeriesModelFit\\\",\\n  \\\"TimeSeriesResample\\\",\\n  \\\"TimeSeriesRescale\\\",\\n  \\\"TimeSeriesShift\\\",\\n  \\\"TimeSeriesThread\\\",\\n  \\\"TimeSeriesWindow\\\",\\n  \\\"TimeSystem\\\",\\n  \\\"TimeSystemConvert\\\",\\n  \\\"TimeUsed\\\",\\n  \\\"TimeValue\\\",\\n  \\\"TimeWarpingCorrespondence\\\",\\n  \\\"TimeWarpingDistance\\\",\\n  \\\"TimeZone\\\",\\n  \\\"TimeZoneConvert\\\",\\n  \\\"TimeZoneOffset\\\",\\n  \\\"Timing\\\",\\n  \\\"Tiny\\\",\\n  \\\"TitleGrouping\\\",\\n  \\\"TitsGroupT\\\",\\n  \\\"ToBoxes\\\",\\n  \\\"ToCharacterCode\\\",\\n  \\\"ToColor\\\",\\n  \\\"ToContinuousTimeModel\\\",\\n  \\\"ToDate\\\",\\n  \\\"Today\\\",\\n  \\\"ToDiscreteTimeModel\\\",\\n  \\\"ToEntity\\\",\\n  \\\"ToeplitzMatrix\\\",\\n  \\\"ToExpression\\\",\\n  \\\"ToFileName\\\",\\n  \\\"Together\\\",\\n  \\\"Toggle\\\",\\n  \\\"ToggleFalse\\\",\\n  \\\"Toggler\\\",\\n  \\\"TogglerBar\\\",\\n  \\\"TogglerBox\\\",\\n  \\\"TogglerBoxOptions\\\",\\n  \\\"ToHeldExpression\\\",\\n  \\\"ToInvertibleTimeSeries\\\",\\n  \\\"TokenWords\\\",\\n  \\\"Tolerance\\\",\\n  \\\"ToLowerCase\\\",\\n  \\\"Tomorrow\\\",\\n  \\\"ToNumberField\\\",\\n  \\\"TooBig\\\",\\n  \\\"Tooltip\\\",\\n  \\\"TooltipBox\\\",\\n  \\\"TooltipBoxOptions\\\",\\n  \\\"TooltipDelay\\\",\\n  \\\"TooltipStyle\\\",\\n  \\\"ToonShading\\\",\\n  \\\"Top\\\",\\n  \\\"TopHatTransform\\\",\\n  \\\"ToPolarCoordinates\\\",\\n  \\\"TopologicalSort\\\",\\n  \\\"ToRadicals\\\",\\n  \\\"ToRawPointer\\\",\\n  \\\"ToRules\\\",\\n  \\\"Torus\\\",\\n  \\\"TorusGraph\\\",\\n  \\\"ToSphericalCoordinates\\\",\\n  \\\"ToString\\\",\\n  \\\"Total\\\",\\n  \\\"TotalHeight\\\",\\n  \\\"TotalLayer\\\",\\n  \\\"TotalVariationFilter\\\",\\n  \\\"TotalWidth\\\",\\n  \\\"TouchPosition\\\",\\n  \\\"TouchscreenAutoZoom\\\",\\n  \\\"TouchscreenControlPlacement\\\",\\n  \\\"ToUpperCase\\\",\\n  \\\"TourVideo\\\",\\n  \\\"Tr\\\",\\n  \\\"Trace\\\",\\n  \\\"TraceAbove\\\",\\n  \\\"TraceAction\\\",\\n  \\\"TraceBackward\\\",\\n  \\\"TraceDepth\\\",\\n  \\\"TraceDialog\\\",\\n  \\\"TraceForward\\\",\\n  \\\"TraceInternal\\\",\\n  \\\"TraceLevel\\\",\\n  \\\"TraceOff\\\",\\n  \\\"TraceOn\\\",\\n  \\\"TraceOriginal\\\",\\n  \\\"TracePrint\\\",\\n  \\\"TraceScan\\\",\\n  \\\"TrackCellChangeTimes\\\",\\n  \\\"TrackedSymbols\\\",\\n  \\\"TrackingFunction\\\",\\n  \\\"TracyWidomDistribution\\\",\\n  \\\"TradingChart\\\",\\n  \\\"TraditionalForm\\\",\\n  \\\"TraditionalFunctionNotation\\\",\\n  \\\"TraditionalNotation\\\",\\n  \\\"TraditionalOrder\\\",\\n  \\\"TrainImageContentDetector\\\",\\n  \\\"TrainingProgressCheckpointing\\\",\\n  \\\"TrainingProgressFunction\\\",\\n  \\\"TrainingProgressMeasurements\\\",\\n  \\\"TrainingProgressReporting\\\",\\n  \\\"TrainingStoppingCriterion\\\",\\n  \\\"TrainingUpdateSchedule\\\",\\n  \\\"TrainTextContentDetector\\\",\\n  \\\"TransferFunctionCancel\\\",\\n  \\\"TransferFunctionExpand\\\",\\n  \\\"TransferFunctionFactor\\\",\\n  \\\"TransferFunctionModel\\\",\\n  \\\"TransferFunctionPoles\\\",\\n  \\\"TransferFunctionTransform\\\",\\n  \\\"TransferFunctionZeros\\\",\\n  \\\"TransformationClass\\\",\\n  \\\"TransformationFunction\\\",\\n  \\\"TransformationFunctions\\\",\\n  \\\"TransformationMatrix\\\",\\n  \\\"TransformedDistribution\\\",\\n  \\\"TransformedField\\\",\\n  \\\"TransformedProcess\\\",\\n  \\\"TransformedRegion\\\",\\n  \\\"TransitionDirection\\\",\\n  \\\"TransitionDuration\\\",\\n  \\\"TransitionEffect\\\",\\n  \\\"TransitiveClosureGraph\\\",\\n  \\\"TransitiveReductionGraph\\\",\\n  \\\"Translate\\\",\\n  \\\"TranslationOptions\\\",\\n  \\\"TranslationTransform\\\",\\n  \\\"Transliterate\\\",\\n  \\\"Transparent\\\",\\n  \\\"TransparentColor\\\",\\n  \\\"Transpose\\\",\\n  \\\"TransposeLayer\\\",\\n  \\\"TrapEnterKey\\\",\\n  \\\"TrapSelection\\\",\\n  \\\"TravelDirections\\\",\\n  \\\"TravelDirectionsData\\\",\\n  \\\"TravelDistance\\\",\\n  \\\"TravelDistanceList\\\",\\n  \\\"TravelMethod\\\",\\n  \\\"TravelTime\\\",\\n  \\\"Tree\\\",\\n  \\\"TreeCases\\\",\\n  \\\"TreeChildren\\\",\\n  \\\"TreeCount\\\",\\n  \\\"TreeData\\\",\\n  \\\"TreeDelete\\\",\\n  \\\"TreeDepth\\\",\\n  \\\"TreeElementCoordinates\\\",\\n  \\\"TreeElementLabel\\\",\\n  \\\"TreeElementLabelFunction\\\",\\n  \\\"TreeElementLabelStyle\\\",\\n  \\\"TreeElementShape\\\",\\n  \\\"TreeElementShapeFunction\\\",\\n  \\\"TreeElementSize\\\",\\n  \\\"TreeElementSizeFunction\\\",\\n  \\\"TreeElementStyle\\\",\\n  \\\"TreeElementStyleFunction\\\",\\n  \\\"TreeExpression\\\",\\n  \\\"TreeExtract\\\",\\n  \\\"TreeFold\\\",\\n  \\\"TreeForm\\\",\\n  \\\"TreeGraph\\\",\\n  \\\"TreeGraphQ\\\",\\n  \\\"TreeInsert\\\",\\n  \\\"TreeLayout\\\",\\n  \\\"TreeLeafCount\\\",\\n  \\\"TreeLeafQ\\\",\\n  \\\"TreeLeaves\\\",\\n  \\\"TreeLevel\\\",\\n  \\\"TreeMap\\\",\\n  \\\"TreeMapAt\\\",\\n  \\\"TreeOutline\\\",\\n  \\\"TreePlot\\\",\\n  \\\"TreePosition\\\",\\n  \\\"TreeQ\\\",\\n  \\\"TreeReplacePart\\\",\\n  \\\"TreeRules\\\",\\n  \\\"TreeScan\\\",\\n  \\\"TreeSelect\\\",\\n  \\\"TreeSize\\\",\\n  \\\"TreeTraversalOrder\\\",\\n  \\\"TrendStyle\\\",\\n  \\\"Triangle\\\",\\n  \\\"TriangleCenter\\\",\\n  \\\"TriangleConstruct\\\",\\n  \\\"TriangleMeasurement\\\",\\n  \\\"TriangleWave\\\",\\n  \\\"TriangularDistribution\\\",\\n  \\\"TriangulateMesh\\\",\\n  \\\"Trig\\\",\\n  \\\"TrigExpand\\\",\\n  \\\"TrigFactor\\\",\\n  \\\"TrigFactorList\\\",\\n  \\\"Trigger\\\",\\n  \\\"TrigReduce\\\",\\n  \\\"TrigToExp\\\",\\n  \\\"TrimmedMean\\\",\\n  \\\"TrimmedVariance\\\",\\n  \\\"TropicalStormData\\\",\\n  \\\"True\\\",\\n  \\\"TrueQ\\\",\\n  \\\"TruncatedDistribution\\\",\\n  \\\"TruncatedPolyhedron\\\",\\n  \\\"TsallisQExponentialDistribution\\\",\\n  \\\"TsallisQGaussianDistribution\\\",\\n  \\\"TTest\\\",\\n  \\\"Tube\\\",\\n  \\\"TubeBezierCurveBox\\\",\\n  \\\"TubeBezierCurveBoxOptions\\\",\\n  \\\"TubeBox\\\",\\n  \\\"TubeBoxOptions\\\",\\n  \\\"TubeBSplineCurveBox\\\",\\n  \\\"TubeBSplineCurveBoxOptions\\\",\\n  \\\"Tuesday\\\",\\n  \\\"TukeyLambdaDistribution\\\",\\n  \\\"TukeyWindow\\\",\\n  \\\"TunnelData\\\",\\n  \\\"Tuples\\\",\\n  \\\"TuranGraph\\\",\\n  \\\"TuringMachine\\\",\\n  \\\"TuttePolynomial\\\",\\n  \\\"TwoWayRule\\\",\\n  \\\"Typed\\\",\\n  \\\"TypeDeclaration\\\",\\n  \\\"TypeEvaluate\\\",\\n  \\\"TypeHint\\\",\\n  \\\"TypeOf\\\",\\n  \\\"TypeSpecifier\\\",\\n  \\\"UnateQ\\\",\\n  \\\"Uncompress\\\",\\n  \\\"UnconstrainedParameters\\\",\\n  \\\"Undefined\\\",\\n  \\\"UnderBar\\\",\\n  \\\"Underflow\\\",\\n  \\\"Underlined\\\",\\n  \\\"Underoverscript\\\",\\n  \\\"UnderoverscriptBox\\\",\\n  \\\"UnderoverscriptBoxOptions\\\",\\n  \\\"Underscript\\\",\\n  \\\"UnderscriptBox\\\",\\n  \\\"UnderscriptBoxOptions\\\",\\n  \\\"UnderseaFeatureData\\\",\\n  \\\"UndirectedEdge\\\",\\n  \\\"UndirectedGraph\\\",\\n  \\\"UndirectedGraphQ\\\",\\n  \\\"UndoOptions\\\",\\n  \\\"UndoTrackedVariables\\\",\\n  \\\"Unequal\\\",\\n  \\\"UnequalTo\\\",\\n  \\\"Unevaluated\\\",\\n  \\\"UniformDistribution\\\",\\n  \\\"UniformGraphDistribution\\\",\\n  \\\"UniformPolyhedron\\\",\\n  \\\"UniformSumDistribution\\\",\\n  \\\"Uninstall\\\",\\n  \\\"Union\\\",\\n  \\\"UnionedEntityClass\\\",\\n  \\\"UnionPlus\\\",\\n  \\\"Unique\\\",\\n  \\\"UniqueElements\\\",\\n  \\\"UnitaryMatrixQ\\\",\\n  \\\"UnitBox\\\",\\n  \\\"UnitConvert\\\",\\n  \\\"UnitDimensions\\\",\\n  \\\"Unitize\\\",\\n  \\\"UnitRootTest\\\",\\n  \\\"UnitSimplify\\\",\\n  \\\"UnitStep\\\",\\n  \\\"UnitSystem\\\",\\n  \\\"UnitTriangle\\\",\\n  \\\"UnitVector\\\",\\n  \\\"UnitVectorLayer\\\",\\n  \\\"UnityDimensions\\\",\\n  \\\"UniverseModelData\\\",\\n  \\\"UniversityData\\\",\\n  \\\"UnixTime\\\",\\n  \\\"UnlabeledTree\\\",\\n  \\\"UnmanageObject\\\",\\n  \\\"Unprotect\\\",\\n  \\\"UnregisterExternalEvaluator\\\",\\n  \\\"UnsameQ\\\",\\n  \\\"UnsavedVariables\\\",\\n  \\\"Unset\\\",\\n  \\\"UnsetShared\\\",\\n  \\\"Until\\\",\\n  \\\"UntrackedVariables\\\",\\n  \\\"Up\\\",\\n  \\\"UpArrow\\\",\\n  \\\"UpArrowBar\\\",\\n  \\\"UpArrowDownArrow\\\",\\n  \\\"Update\\\",\\n  \\\"UpdateDynamicObjects\\\",\\n  \\\"UpdateDynamicObjectsSynchronous\\\",\\n  \\\"UpdateInterval\\\",\\n  \\\"UpdatePacletSites\\\",\\n  \\\"UpdateSearchIndex\\\",\\n  \\\"UpDownArrow\\\",\\n  \\\"UpEquilibrium\\\",\\n  \\\"UpperCaseQ\\\",\\n  \\\"UpperLeftArrow\\\",\\n  \\\"UpperRightArrow\\\",\\n  \\\"UpperTriangularize\\\",\\n  \\\"UpperTriangularMatrix\\\",\\n  \\\"UpperTriangularMatrixQ\\\",\\n  \\\"Upsample\\\",\\n  \\\"UpSet\\\",\\n  \\\"UpSetDelayed\\\",\\n  \\\"UpTee\\\",\\n  \\\"UpTeeArrow\\\",\\n  \\\"UpTo\\\",\\n  \\\"UpValues\\\",\\n  \\\"URL\\\",\\n  \\\"URLBuild\\\",\\n  \\\"URLDecode\\\",\\n  \\\"URLDispatcher\\\",\\n  \\\"URLDownload\\\",\\n  \\\"URLDownloadSubmit\\\",\\n  \\\"URLEncode\\\",\\n  \\\"URLExecute\\\",\\n  \\\"URLExpand\\\",\\n  \\\"URLFetch\\\",\\n  \\\"URLFetchAsynchronous\\\",\\n  \\\"URLParse\\\",\\n  \\\"URLQueryDecode\\\",\\n  \\\"URLQueryEncode\\\",\\n  \\\"URLRead\\\",\\n  \\\"URLResponseTime\\\",\\n  \\\"URLSave\\\",\\n  \\\"URLSaveAsynchronous\\\",\\n  \\\"URLShorten\\\",\\n  \\\"URLSubmit\\\",\\n  \\\"UseEmbeddedLibrary\\\",\\n  \\\"UseGraphicsRange\\\",\\n  \\\"UserDefinedWavelet\\\",\\n  \\\"Using\\\",\\n  \\\"UsingFrontEnd\\\",\\n  \\\"UtilityFunction\\\",\\n  \\\"V2Get\\\",\\n  \\\"ValenceErrorHandling\\\",\\n  \\\"ValenceFilling\\\",\\n  \\\"ValidationLength\\\",\\n  \\\"ValidationSet\\\",\\n  \\\"ValueBox\\\",\\n  \\\"ValueBoxOptions\\\",\\n  \\\"ValueDimensions\\\",\\n  \\\"ValueForm\\\",\\n  \\\"ValuePreprocessingFunction\\\",\\n  \\\"ValueQ\\\",\\n  \\\"Values\\\",\\n  \\\"ValuesData\\\",\\n  \\\"VandermondeMatrix\\\",\\n  \\\"Variables\\\",\\n  \\\"Variance\\\",\\n  \\\"VarianceEquivalenceTest\\\",\\n  \\\"VarianceEstimatorFunction\\\",\\n  \\\"VarianceGammaDistribution\\\",\\n  \\\"VarianceGammaPointProcess\\\",\\n  \\\"VarianceTest\\\",\\n  \\\"VariogramFunction\\\",\\n  \\\"VariogramModel\\\",\\n  \\\"VectorAngle\\\",\\n  \\\"VectorAround\\\",\\n  \\\"VectorAspectRatio\\\",\\n  \\\"VectorColorFunction\\\",\\n  \\\"VectorColorFunctionScaling\\\",\\n  \\\"VectorDensityPlot\\\",\\n  \\\"VectorDisplacementPlot\\\",\\n  \\\"VectorDisplacementPlot3D\\\",\\n  \\\"VectorGlyphData\\\",\\n  \\\"VectorGreater\\\",\\n  \\\"VectorGreaterEqual\\\",\\n  \\\"VectorLess\\\",\\n  \\\"VectorLessEqual\\\",\\n  \\\"VectorMarkers\\\",\\n  \\\"VectorPlot\\\",\\n  \\\"VectorPlot3D\\\",\\n  \\\"VectorPoints\\\",\\n  \\\"VectorQ\\\",\\n  \\\"VectorRange\\\",\\n  \\\"Vectors\\\",\\n  \\\"VectorScale\\\",\\n  \\\"VectorScaling\\\",\\n  \\\"VectorSizes\\\",\\n  \\\"VectorStyle\\\",\\n  \\\"Vee\\\",\\n  \\\"Verbatim\\\",\\n  \\\"Verbose\\\",\\n  \\\"VerificationTest\\\",\\n  \\\"VerifyConvergence\\\",\\n  \\\"VerifyDerivedKey\\\",\\n  \\\"VerifyDigitalSignature\\\",\\n  \\\"VerifyFileSignature\\\",\\n  \\\"VerifyInterpretation\\\",\\n  \\\"VerifySecurityCertificates\\\",\\n  \\\"VerifySolutions\\\",\\n  \\\"VerifyTestAssumptions\\\",\\n  \\\"VersionedPreferences\\\",\\n  \\\"VertexAdd\\\",\\n  \\\"VertexCapacity\\\",\\n  \\\"VertexChromaticNumber\\\",\\n  \\\"VertexColors\\\",\\n  \\\"VertexComponent\\\",\\n  \\\"VertexConnectivity\\\",\\n  \\\"VertexContract\\\",\\n  \\\"VertexCoordinateRules\\\",\\n  \\\"VertexCoordinates\\\",\\n  \\\"VertexCorrelationSimilarity\\\",\\n  \\\"VertexCosineSimilarity\\\",\\n  \\\"VertexCount\\\",\\n  \\\"VertexCoverQ\\\",\\n  \\\"VertexDataCoordinates\\\",\\n  \\\"VertexDegree\\\",\\n  \\\"VertexDelete\\\",\\n  \\\"VertexDiceSimilarity\\\",\\n  \\\"VertexEccentricity\\\",\\n  \\\"VertexInComponent\\\",\\n  \\\"VertexInComponentGraph\\\",\\n  \\\"VertexInDegree\\\",\\n  \\\"VertexIndex\\\",\\n  \\\"VertexJaccardSimilarity\\\",\\n  \\\"VertexLabeling\\\",\\n  \\\"VertexLabels\\\",\\n  \\\"VertexLabelStyle\\\",\\n  \\\"VertexList\\\",\\n  \\\"VertexNormals\\\",\\n  \\\"VertexOutComponent\\\",\\n  \\\"VertexOutComponentGraph\\\",\\n  \\\"VertexOutDegree\\\",\\n  \\\"VertexQ\\\",\\n  \\\"VertexRenderingFunction\\\",\\n  \\\"VertexReplace\\\",\\n  \\\"VertexShape\\\",\\n  \\\"VertexShapeFunction\\\",\\n  \\\"VertexSize\\\",\\n  \\\"VertexStyle\\\",\\n  \\\"VertexTextureCoordinates\\\",\\n  \\\"VertexTransitiveGraphQ\\\",\\n  \\\"VertexWeight\\\",\\n  \\\"VertexWeightedGraphQ\\\",\\n  \\\"Vertical\\\",\\n  \\\"VerticalBar\\\",\\n  \\\"VerticalForm\\\",\\n  \\\"VerticalGauge\\\",\\n  \\\"VerticalSeparator\\\",\\n  \\\"VerticalSlider\\\",\\n  \\\"VerticalTilde\\\",\\n  \\\"Video\\\",\\n  \\\"VideoCapture\\\",\\n  \\\"VideoCombine\\\",\\n  \\\"VideoDelete\\\",\\n  \\\"VideoEncoding\\\",\\n  \\\"VideoExtractFrames\\\",\\n  \\\"VideoFrameList\\\",\\n  \\\"VideoFrameMap\\\",\\n  \\\"VideoGenerator\\\",\\n  \\\"VideoInsert\\\",\\n  \\\"VideoIntervals\\\",\\n  \\\"VideoJoin\\\",\\n  \\\"VideoMap\\\",\\n  \\\"VideoMapList\\\",\\n  \\\"VideoMapTimeSeries\\\",\\n  \\\"VideoPadding\\\",\\n  \\\"VideoPause\\\",\\n  \\\"VideoPlay\\\",\\n  \\\"VideoQ\\\",\\n  \\\"VideoRecord\\\",\\n  \\\"VideoReplace\\\",\\n  \\\"VideoScreenCapture\\\",\\n  \\\"VideoSplit\\\",\\n  \\\"VideoStop\\\",\\n  \\\"VideoStream\\\",\\n  \\\"VideoStreams\\\",\\n  \\\"VideoTimeStretch\\\",\\n  \\\"VideoTrackSelection\\\",\\n  \\\"VideoTranscode\\\",\\n  \\\"VideoTransparency\\\",\\n  \\\"VideoTrim\\\",\\n  \\\"ViewAngle\\\",\\n  \\\"ViewCenter\\\",\\n  \\\"ViewMatrix\\\",\\n  \\\"ViewPoint\\\",\\n  \\\"ViewPointSelectorSettings\\\",\\n  \\\"ViewPort\\\",\\n  \\\"ViewProjection\\\",\\n  \\\"ViewRange\\\",\\n  \\\"ViewVector\\\",\\n  \\\"ViewVertical\\\",\\n  \\\"VirtualGroupData\\\",\\n  \\\"Visible\\\",\\n  \\\"VisibleCell\\\",\\n  \\\"VoiceStyleData\\\",\\n  \\\"VoigtDistribution\\\",\\n  \\\"VolcanoData\\\",\\n  \\\"Volume\\\",\\n  \\\"VonMisesDistribution\\\",\\n  \\\"VoronoiMesh\\\",\\n  \\\"WaitAll\\\",\\n  \\\"WaitAsynchronousTask\\\",\\n  \\\"WaitNext\\\",\\n  \\\"WaitUntil\\\",\\n  \\\"WakebyDistribution\\\",\\n  \\\"WalleniusHypergeometricDistribution\\\",\\n  \\\"WaringYuleDistribution\\\",\\n  \\\"WarpingCorrespondence\\\",\\n  \\\"WarpingDistance\\\",\\n  \\\"WatershedComponents\\\",\\n  \\\"WatsonUSquareTest\\\",\\n  \\\"WattsStrogatzGraphDistribution\\\",\\n  \\\"WaveletBestBasis\\\",\\n  \\\"WaveletFilterCoefficients\\\",\\n  \\\"WaveletImagePlot\\\",\\n  \\\"WaveletListPlot\\\",\\n  \\\"WaveletMapIndexed\\\",\\n  \\\"WaveletMatrixPlot\\\",\\n  \\\"WaveletPhi\\\",\\n  \\\"WaveletPsi\\\",\\n  \\\"WaveletScale\\\",\\n  \\\"WaveletScalogram\\\",\\n  \\\"WaveletThreshold\\\",\\n  \\\"WavePDEComponent\\\",\\n  \\\"WeaklyConnectedComponents\\\",\\n  \\\"WeaklyConnectedGraphComponents\\\",\\n  \\\"WeaklyConnectedGraphQ\\\",\\n  \\\"WeakStationarity\\\",\\n  \\\"WeatherData\\\",\\n  \\\"WeatherForecastData\\\",\\n  \\\"WebAudioSearch\\\",\\n  \\\"WebColumn\\\",\\n  \\\"WebElementObject\\\",\\n  \\\"WeberE\\\",\\n  \\\"WebExecute\\\",\\n  \\\"WebImage\\\",\\n  \\\"WebImageSearch\\\",\\n  \\\"WebItem\\\",\\n  \\\"WebPageMetaInformation\\\",\\n  \\\"WebRow\\\",\\n  \\\"WebSearch\\\",\\n  \\\"WebSessionObject\\\",\\n  \\\"WebSessions\\\",\\n  \\\"WebWindowObject\\\",\\n  \\\"Wedge\\\",\\n  \\\"Wednesday\\\",\\n  \\\"WeibullDistribution\\\",\\n  \\\"WeierstrassE1\\\",\\n  \\\"WeierstrassE2\\\",\\n  \\\"WeierstrassE3\\\",\\n  \\\"WeierstrassEta1\\\",\\n  \\\"WeierstrassEta2\\\",\\n  \\\"WeierstrassEta3\\\",\\n  \\\"WeierstrassHalfPeriods\\\",\\n  \\\"WeierstrassHalfPeriodW1\\\",\\n  \\\"WeierstrassHalfPeriodW2\\\",\\n  \\\"WeierstrassHalfPeriodW3\\\",\\n  \\\"WeierstrassInvariantG2\\\",\\n  \\\"WeierstrassInvariantG3\\\",\\n  \\\"WeierstrassInvariants\\\",\\n  \\\"WeierstrassP\\\",\\n  \\\"WeierstrassPPrime\\\",\\n  \\\"WeierstrassSigma\\\",\\n  \\\"WeierstrassZeta\\\",\\n  \\\"WeightedAdjacencyGraph\\\",\\n  \\\"WeightedAdjacencyMatrix\\\",\\n  \\\"WeightedData\\\",\\n  \\\"WeightedGraphQ\\\",\\n  \\\"Weights\\\",\\n  \\\"WelchWindow\\\",\\n  \\\"WheelGraph\\\",\\n  \\\"WhenEvent\\\",\\n  \\\"Which\\\",\\n  \\\"While\\\",\\n  \\\"White\\\",\\n  \\\"WhiteNoiseProcess\\\",\\n  \\\"WhitePoint\\\",\\n  \\\"Whitespace\\\",\\n  \\\"WhitespaceCharacter\\\",\\n  \\\"WhittakerM\\\",\\n  \\\"WhittakerW\\\",\\n  \\\"WholeCellGroupOpener\\\",\\n  \\\"WienerFilter\\\",\\n  \\\"WienerProcess\\\",\\n  \\\"WignerD\\\",\\n  \\\"WignerSemicircleDistribution\\\",\\n  \\\"WikidataData\\\",\\n  \\\"WikidataSearch\\\",\\n  \\\"WikipediaData\\\",\\n  \\\"WikipediaSearch\\\",\\n  \\\"WilksW\\\",\\n  \\\"WilksWTest\\\",\\n  \\\"WindDirectionData\\\",\\n  \\\"WindingCount\\\",\\n  \\\"WindingPolygon\\\",\\n  \\\"WindowClickSelect\\\",\\n  \\\"WindowElements\\\",\\n  \\\"WindowFloating\\\",\\n  \\\"WindowFrame\\\",\\n  \\\"WindowFrameElements\\\",\\n  \\\"WindowMargins\\\",\\n  \\\"WindowMovable\\\",\\n  \\\"WindowOpacity\\\",\\n  \\\"WindowPersistentStyles\\\",\\n  \\\"WindowSelected\\\",\\n  \\\"WindowSize\\\",\\n  \\\"WindowStatusArea\\\",\\n  \\\"WindowTitle\\\",\\n  \\\"WindowToolbars\\\",\\n  \\\"WindowWidth\\\",\\n  \\\"WindSpeedData\\\",\\n  \\\"WindVectorData\\\",\\n  \\\"WinsorizedMean\\\",\\n  \\\"WinsorizedVariance\\\",\\n  \\\"WishartMatrixDistribution\\\",\\n  \\\"With\\\",\\n  \\\"WithCleanup\\\",\\n  \\\"WithLock\\\",\\n  \\\"WolframAlpha\\\",\\n  \\\"WolframAlphaDate\\\",\\n  \\\"WolframAlphaQuantity\\\",\\n  \\\"WolframAlphaResult\\\",\\n  \\\"WolframCloudSettings\\\",\\n  \\\"WolframLanguageData\\\",\\n  \\\"Word\\\",\\n  \\\"WordBoundary\\\",\\n  \\\"WordCharacter\\\",\\n  \\\"WordCloud\\\",\\n  \\\"WordCount\\\",\\n  \\\"WordCounts\\\",\\n  \\\"WordData\\\",\\n  \\\"WordDefinition\\\",\\n  \\\"WordFrequency\\\",\\n  \\\"WordFrequencyData\\\",\\n  \\\"WordList\\\",\\n  \\\"WordOrientation\\\",\\n  \\\"WordSearch\\\",\\n  \\\"WordSelectionFunction\\\",\\n  \\\"WordSeparators\\\",\\n  \\\"WordSpacings\\\",\\n  \\\"WordStem\\\",\\n  \\\"WordTranslation\\\",\\n  \\\"WorkingPrecision\\\",\\n  \\\"WrapAround\\\",\\n  \\\"Write\\\",\\n  \\\"WriteLine\\\",\\n  \\\"WriteString\\\",\\n  \\\"Wronskian\\\",\\n  \\\"XMLElement\\\",\\n  \\\"XMLObject\\\",\\n  \\\"XMLTemplate\\\",\\n  \\\"Xnor\\\",\\n  \\\"Xor\\\",\\n  \\\"XYZColor\\\",\\n  \\\"Yellow\\\",\\n  \\\"Yesterday\\\",\\n  \\\"YuleDissimilarity\\\",\\n  \\\"ZernikeR\\\",\\n  \\\"ZeroSymmetric\\\",\\n  \\\"ZeroTest\\\",\\n  \\\"ZeroWidthTimes\\\",\\n  \\\"Zeta\\\",\\n  \\\"ZetaZero\\\",\\n  \\\"ZIPCodeData\\\",\\n  \\\"ZipfDistribution\\\",\\n  \\\"ZoomCenter\\\",\\n  \\\"ZoomFactor\\\",\\n  \\\"ZTest\\\",\\n  \\\"ZTransform\\\",\\n  \\\"$Aborted\\\",\\n  \\\"$ActivationGroupID\\\",\\n  \\\"$ActivationKey\\\",\\n  \\\"$ActivationUserRegistered\\\",\\n  \\\"$AddOnsDirectory\\\",\\n  \\\"$AllowDataUpdates\\\",\\n  \\\"$AllowExternalChannelFunctions\\\",\\n  \\\"$AllowInternet\\\",\\n  \\\"$AssertFunction\\\",\\n  \\\"$Assumptions\\\",\\n  \\\"$AsynchronousTask\\\",\\n  \\\"$AudioDecoders\\\",\\n  \\\"$AudioEncoders\\\",\\n  \\\"$AudioInputDevices\\\",\\n  \\\"$AudioOutputDevices\\\",\\n  \\\"$BaseDirectory\\\",\\n  \\\"$BasePacletsDirectory\\\",\\n  \\\"$BatchInput\\\",\\n  \\\"$BatchOutput\\\",\\n  \\\"$BlockchainBase\\\",\\n  \\\"$BoxForms\\\",\\n  \\\"$ByteOrdering\\\",\\n  \\\"$CacheBaseDirectory\\\",\\n  \\\"$Canceled\\\",\\n  \\\"$ChannelBase\\\",\\n  \\\"$CharacterEncoding\\\",\\n  \\\"$CharacterEncodings\\\",\\n  \\\"$CloudAccountName\\\",\\n  \\\"$CloudBase\\\",\\n  \\\"$CloudConnected\\\",\\n  \\\"$CloudConnection\\\",\\n  \\\"$CloudCreditsAvailable\\\",\\n  \\\"$CloudEvaluation\\\",\\n  \\\"$CloudExpressionBase\\\",\\n  \\\"$CloudObjectNameFormat\\\",\\n  \\\"$CloudObjectURLType\\\",\\n  \\\"$CloudRootDirectory\\\",\\n  \\\"$CloudSymbolBase\\\",\\n  \\\"$CloudUserID\\\",\\n  \\\"$CloudUserUUID\\\",\\n  \\\"$CloudVersion\\\",\\n  \\\"$CloudVersionNumber\\\",\\n  \\\"$CloudWolframEngineVersionNumber\\\",\\n  \\\"$CommandLine\\\",\\n  \\\"$CompilationTarget\\\",\\n  \\\"$CompilerEnvironment\\\",\\n  \\\"$ConditionHold\\\",\\n  \\\"$ConfiguredKernels\\\",\\n  \\\"$Context\\\",\\n  \\\"$ContextAliases\\\",\\n  \\\"$ContextPath\\\",\\n  \\\"$ControlActiveSetting\\\",\\n  \\\"$Cookies\\\",\\n  \\\"$CookieStore\\\",\\n  \\\"$CreationDate\\\",\\n  \\\"$CryptographicEllipticCurveNames\\\",\\n  \\\"$CurrentLink\\\",\\n  \\\"$CurrentTask\\\",\\n  \\\"$CurrentWebSession\\\",\\n  \\\"$DataStructures\\\",\\n  \\\"$DateStringFormat\\\",\\n  \\\"$DefaultAudioInputDevice\\\",\\n  \\\"$DefaultAudioOutputDevice\\\",\\n  \\\"$DefaultFont\\\",\\n  \\\"$DefaultFrontEnd\\\",\\n  \\\"$DefaultImagingDevice\\\",\\n  \\\"$DefaultKernels\\\",\\n  \\\"$DefaultLocalBase\\\",\\n  \\\"$DefaultLocalKernel\\\",\\n  \\\"$DefaultMailbox\\\",\\n  \\\"$DefaultNetworkInterface\\\",\\n  \\\"$DefaultPath\\\",\\n  \\\"$DefaultProxyRules\\\",\\n  \\\"$DefaultRemoteBatchSubmissionEnvironment\\\",\\n  \\\"$DefaultRemoteKernel\\\",\\n  \\\"$DefaultSystemCredentialStore\\\",\\n  \\\"$Display\\\",\\n  \\\"$DisplayFunction\\\",\\n  \\\"$DistributedContexts\\\",\\n  \\\"$DynamicEvaluation\\\",\\n  \\\"$Echo\\\",\\n  \\\"$EmbedCodeEnvironments\\\",\\n  \\\"$EmbeddableServices\\\",\\n  \\\"$EntityStores\\\",\\n  \\\"$Epilog\\\",\\n  \\\"$EvaluationCloudBase\\\",\\n  \\\"$EvaluationCloudObject\\\",\\n  \\\"$EvaluationEnvironment\\\",\\n  \\\"$ExportFormats\\\",\\n  \\\"$ExternalIdentifierTypes\\\",\\n  \\\"$ExternalStorageBase\\\",\\n  \\\"$Failed\\\",\\n  \\\"$FinancialDataSource\\\",\\n  \\\"$FontFamilies\\\",\\n  \\\"$FormatType\\\",\\n  \\\"$FrontEnd\\\",\\n  \\\"$FrontEndSession\\\",\\n  \\\"$GeneratedAssetLocation\\\",\\n  \\\"$GeoEntityTypes\\\",\\n  \\\"$GeoLocation\\\",\\n  \\\"$GeoLocationCity\\\",\\n  \\\"$GeoLocationCountry\\\",\\n  \\\"$GeoLocationPrecision\\\",\\n  \\\"$GeoLocationSource\\\",\\n  \\\"$HistoryLength\\\",\\n  \\\"$HomeDirectory\\\",\\n  \\\"$HTMLExportRules\\\",\\n  \\\"$HTTPCookies\\\",\\n  \\\"$HTTPRequest\\\",\\n  \\\"$IgnoreEOF\\\",\\n  \\\"$ImageFormattingWidth\\\",\\n  \\\"$ImageResolution\\\",\\n  \\\"$ImagingDevice\\\",\\n  \\\"$ImagingDevices\\\",\\n  \\\"$ImportFormats\\\",\\n  \\\"$IncomingMailSettings\\\",\\n  \\\"$InitialDirectory\\\",\\n  \\\"$Initialization\\\",\\n  \\\"$InitializationContexts\\\",\\n  \\\"$Input\\\",\\n  \\\"$InputFileName\\\",\\n  \\\"$InputStreamMethods\\\",\\n  \\\"$Inspector\\\",\\n  \\\"$InstallationDate\\\",\\n  \\\"$InstallationDirectory\\\",\\n  \\\"$InterfaceEnvironment\\\",\\n  \\\"$InterpreterTypes\\\",\\n  \\\"$IterationLimit\\\",\\n  \\\"$KernelCount\\\",\\n  \\\"$KernelID\\\",\\n  \\\"$Language\\\",\\n  \\\"$LaunchDirectory\\\",\\n  \\\"$LibraryPath\\\",\\n  \\\"$LicenseExpirationDate\\\",\\n  \\\"$LicenseID\\\",\\n  \\\"$LicenseProcesses\\\",\\n  \\\"$LicenseServer\\\",\\n  \\\"$LicenseSubprocesses\\\",\\n  \\\"$LicenseType\\\",\\n  \\\"$Line\\\",\\n  \\\"$Linked\\\",\\n  \\\"$LinkSupported\\\",\\n  \\\"$LoadedFiles\\\",\\n  \\\"$LocalBase\\\",\\n  \\\"$LocalSymbolBase\\\",\\n  \\\"$MachineAddresses\\\",\\n  \\\"$MachineDomain\\\",\\n  \\\"$MachineDomains\\\",\\n  \\\"$MachineEpsilon\\\",\\n  \\\"$MachineID\\\",\\n  \\\"$MachineName\\\",\\n  \\\"$MachinePrecision\\\",\\n  \\\"$MachineType\\\",\\n  \\\"$MaxDisplayedChildren\\\",\\n  \\\"$MaxExtraPrecision\\\",\\n  \\\"$MaxLicenseProcesses\\\",\\n  \\\"$MaxLicenseSubprocesses\\\",\\n  \\\"$MaxMachineNumber\\\",\\n  \\\"$MaxNumber\\\",\\n  \\\"$MaxPiecewiseCases\\\",\\n  \\\"$MaxPrecision\\\",\\n  \\\"$MaxRootDegree\\\",\\n  \\\"$MessageGroups\\\",\\n  \\\"$MessageList\\\",\\n  \\\"$MessagePrePrint\\\",\\n  \\\"$Messages\\\",\\n  \\\"$MinMachineNumber\\\",\\n  \\\"$MinNumber\\\",\\n  \\\"$MinorReleaseNumber\\\",\\n  \\\"$MinPrecision\\\",\\n  \\\"$MobilePhone\\\",\\n  \\\"$ModuleNumber\\\",\\n  \\\"$NetworkConnected\\\",\\n  \\\"$NetworkInterfaces\\\",\\n  \\\"$NetworkLicense\\\",\\n  \\\"$NewMessage\\\",\\n  \\\"$NewSymbol\\\",\\n  \\\"$NotebookInlineStorageLimit\\\",\\n  \\\"$Notebooks\\\",\\n  \\\"$NoValue\\\",\\n  \\\"$NumberMarks\\\",\\n  \\\"$Off\\\",\\n  \\\"$OperatingSystem\\\",\\n  \\\"$Output\\\",\\n  \\\"$OutputForms\\\",\\n  \\\"$OutputSizeLimit\\\",\\n  \\\"$OutputStreamMethods\\\",\\n  \\\"$Packages\\\",\\n  \\\"$ParentLink\\\",\\n  \\\"$ParentProcessID\\\",\\n  \\\"$PasswordFile\\\",\\n  \\\"$PatchLevelID\\\",\\n  \\\"$Path\\\",\\n  \\\"$PathnameSeparator\\\",\\n  \\\"$PerformanceGoal\\\",\\n  \\\"$Permissions\\\",\\n  \\\"$PermissionsGroupBase\\\",\\n  \\\"$PersistenceBase\\\",\\n  \\\"$PersistencePath\\\",\\n  \\\"$PipeSupported\\\",\\n  \\\"$PlotTheme\\\",\\n  \\\"$Post\\\",\\n  \\\"$Pre\\\",\\n  \\\"$PreferencesDirectory\\\",\\n  \\\"$PreInitialization\\\",\\n  \\\"$PrePrint\\\",\\n  \\\"$PreRead\\\",\\n  \\\"$PrintForms\\\",\\n  \\\"$PrintLiteral\\\",\\n  \\\"$Printout3DPreviewer\\\",\\n  \\\"$ProcessID\\\",\\n  \\\"$ProcessorCount\\\",\\n  \\\"$ProcessorType\\\",\\n  \\\"$ProductInformation\\\",\\n  \\\"$ProgramName\\\",\\n  \\\"$ProgressReporting\\\",\\n  \\\"$PublisherID\\\",\\n  \\\"$RandomGeneratorState\\\",\\n  \\\"$RandomState\\\",\\n  \\\"$RecursionLimit\\\",\\n  \\\"$RegisteredDeviceClasses\\\",\\n  \\\"$RegisteredUserName\\\",\\n  \\\"$ReleaseNumber\\\",\\n  \\\"$RequesterAddress\\\",\\n  \\\"$RequesterCloudUserID\\\",\\n  \\\"$RequesterCloudUserUUID\\\",\\n  \\\"$RequesterWolframID\\\",\\n  \\\"$RequesterWolframUUID\\\",\\n  \\\"$ResourceSystemBase\\\",\\n  \\\"$ResourceSystemPath\\\",\\n  \\\"$RootDirectory\\\",\\n  \\\"$ScheduledTask\\\",\\n  \\\"$ScriptCommandLine\\\",\\n  \\\"$ScriptInputString\\\",\\n  \\\"$SecuredAuthenticationKeyTokens\\\",\\n  \\\"$ServiceCreditsAvailable\\\",\\n  \\\"$Services\\\",\\n  \\\"$SessionID\\\",\\n  \\\"$SetParentLink\\\",\\n  \\\"$SharedFunctions\\\",\\n  \\\"$SharedVariables\\\",\\n  \\\"$SoundDisplay\\\",\\n  \\\"$SoundDisplayFunction\\\",\\n  \\\"$SourceLink\\\",\\n  \\\"$SSHAuthentication\\\",\\n  \\\"$SubtitleDecoders\\\",\\n  \\\"$SubtitleEncoders\\\",\\n  \\\"$SummaryBoxDataSizeLimit\\\",\\n  \\\"$SuppressInputFormHeads\\\",\\n  \\\"$SynchronousEvaluation\\\",\\n  \\\"$SyntaxHandler\\\",\\n  \\\"$System\\\",\\n  \\\"$SystemCharacterEncoding\\\",\\n  \\\"$SystemCredentialStore\\\",\\n  \\\"$SystemID\\\",\\n  \\\"$SystemMemory\\\",\\n  \\\"$SystemShell\\\",\\n  \\\"$SystemTimeZone\\\",\\n  \\\"$SystemWordLength\\\",\\n  \\\"$TargetSystems\\\",\\n  \\\"$TemplatePath\\\",\\n  \\\"$TemporaryDirectory\\\",\\n  \\\"$TemporaryPrefix\\\",\\n  \\\"$TestFileName\\\",\\n  \\\"$TextStyle\\\",\\n  \\\"$TimedOut\\\",\\n  \\\"$TimeUnit\\\",\\n  \\\"$TimeZone\\\",\\n  \\\"$TimeZoneEntity\\\",\\n  \\\"$TopDirectory\\\",\\n  \\\"$TraceOff\\\",\\n  \\\"$TraceOn\\\",\\n  \\\"$TracePattern\\\",\\n  \\\"$TracePostAction\\\",\\n  \\\"$TracePreAction\\\",\\n  \\\"$UnitSystem\\\",\\n  \\\"$Urgent\\\",\\n  \\\"$UserAddOnsDirectory\\\",\\n  \\\"$UserAgentLanguages\\\",\\n  \\\"$UserAgentMachine\\\",\\n  \\\"$UserAgentName\\\",\\n  \\\"$UserAgentOperatingSystem\\\",\\n  \\\"$UserAgentString\\\",\\n  \\\"$UserAgentVersion\\\",\\n  \\\"$UserBaseDirectory\\\",\\n  \\\"$UserBasePacletsDirectory\\\",\\n  \\\"$UserDocumentsDirectory\\\",\\n  \\\"$Username\\\",\\n  \\\"$UserName\\\",\\n  \\\"$UserURLBase\\\",\\n  \\\"$Version\\\",\\n  \\\"$VersionNumber\\\",\\n  \\\"$VideoDecoders\\\",\\n  \\\"$VideoEncoders\\\",\\n  \\\"$VoiceStyles\\\",\\n  \\\"$WolframDocumentsDirectory\\\",\\n  \\\"$WolframID\\\",\\n  \\\"$WolframUUID\\\"\\n];\\n\\n/*\\nLanguage: Wolfram Language\\nDescription: The Wolfram Language is the programming language used in Wolfram Mathematica, a modern technical computing system spanning most areas of technical computing.\\nAuthors: Patrick Scheibe <patrick@halirutan.de>, Robert Jacobson <robertjacobson@acm.org>\\nWebsite: https://www.wolfram.com/mathematica/\\nCategory: scientific\\n*/\\n\\n/** @type LanguageFn */\\nfunction mathematica(hljs) {\\n  const regex = hljs.regex;\\n  /*\\n  This rather scary looking matching of Mathematica numbers is carefully explained by Robert Jacobson here:\\n  https://wltools.github.io/LanguageSpec/Specification/Syntax/Number-representations/\\n   */\\n  const BASE_RE = /([2-9]|[1-2]\\\\d|[3][0-5])\\\\^\\\\^/;\\n  const BASE_DIGITS_RE = /(\\\\w*\\\\.\\\\w+|\\\\w+\\\\.\\\\w*|\\\\w+)/;\\n  const NUMBER_RE = /(\\\\d*\\\\.\\\\d+|\\\\d+\\\\.\\\\d*|\\\\d+)/;\\n  const BASE_NUMBER_RE = regex.either(regex.concat(BASE_RE, BASE_DIGITS_RE), NUMBER_RE);\\n\\n  const ACCURACY_RE = /``[+-]?(\\\\d*\\\\.\\\\d+|\\\\d+\\\\.\\\\d*|\\\\d+)/;\\n  const PRECISION_RE = /`([+-]?(\\\\d*\\\\.\\\\d+|\\\\d+\\\\.\\\\d*|\\\\d+))?/;\\n  const APPROXIMATE_NUMBER_RE = regex.either(ACCURACY_RE, PRECISION_RE);\\n\\n  const SCIENTIFIC_NOTATION_RE = /\\\\*\\\\^[+-]?\\\\d+/;\\n\\n  const MATHEMATICA_NUMBER_RE = regex.concat(\\n    BASE_NUMBER_RE,\\n    regex.optional(APPROXIMATE_NUMBER_RE),\\n    regex.optional(SCIENTIFIC_NOTATION_RE)\\n  );\\n\\n  const NUMBERS = {\\n    className: 'number',\\n    relevance: 0,\\n    begin: MATHEMATICA_NUMBER_RE\\n  };\\n\\n  const SYMBOL_RE = /[a-zA-Z$][a-zA-Z0-9$]*/;\\n  const SYSTEM_SYMBOLS_SET = new Set(SYSTEM_SYMBOLS);\\n  /** @type {Mode} */\\n  const SYMBOLS = { variants: [\\n    {\\n      className: 'builtin-symbol',\\n      begin: SYMBOL_RE,\\n      // for performance out of fear of regex.either(...Mathematica.SYSTEM_SYMBOLS)\\n      \\\"on:begin\\\": (match, response) => {\\n        if (!SYSTEM_SYMBOLS_SET.has(match[0])) response.ignoreMatch();\\n      }\\n    },\\n    {\\n      className: 'symbol',\\n      relevance: 0,\\n      begin: SYMBOL_RE\\n    }\\n  ] };\\n\\n  const NAMED_CHARACTER = {\\n    className: 'named-character',\\n    begin: /\\\\\\\\\\\\[[$a-zA-Z][$a-zA-Z0-9]+\\\\]/\\n  };\\n\\n  const OPERATORS = {\\n    className: 'operator',\\n    relevance: 0,\\n    begin: /[+\\\\-*/,;.:@~=><&|_`'^?!%]+/\\n  };\\n  const PATTERNS = {\\n    className: 'pattern',\\n    relevance: 0,\\n    begin: /([a-zA-Z$][a-zA-Z0-9$]*)?_+([a-zA-Z$][a-zA-Z0-9$]*)?/\\n  };\\n\\n  const SLOTS = {\\n    className: 'slot',\\n    relevance: 0,\\n    begin: /#[a-zA-Z$][a-zA-Z0-9$]*|#+[0-9]?/\\n  };\\n\\n  const BRACES = {\\n    className: 'brace',\\n    relevance: 0,\\n    begin: /[[\\\\](){}]/\\n  };\\n\\n  const MESSAGES = {\\n    className: 'message-name',\\n    relevance: 0,\\n    begin: regex.concat(\\\"::\\\", SYMBOL_RE)\\n  };\\n\\n  return {\\n    name: 'Mathematica',\\n    aliases: [\\n      'mma',\\n      'wl'\\n    ],\\n    classNameAliases: {\\n      brace: 'punctuation',\\n      pattern: 'type',\\n      slot: 'type',\\n      symbol: 'variable',\\n      'named-character': 'variable',\\n      'builtin-symbol': 'built_in',\\n      'message-name': 'string'\\n    },\\n    contains: [\\n      hljs.COMMENT(/\\\\(\\\\*/, /\\\\*\\\\)/, { contains: [ 'self' ] }),\\n      PATTERNS,\\n      SLOTS,\\n      MESSAGES,\\n      SYMBOLS,\\n      NAMED_CHARACTER,\\n      hljs.QUOTE_STRING_MODE,\\n      NUMBERS,\\n      OPERATORS,\\n      BRACES\\n    ]\\n  };\\n}\\n\\nmodule.exports = mathematica;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/mathematica.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/matlab.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/matlab.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Matlab\\nAuthor: Denis Bardadym <bardadymchik@gmail.com>\\nContributors: Eugene Nizhibitsky <nizhibitsky@ya.ru>, Egor Rogov <e.rogov@postgrespro.ru>\\nWebsite: https://www.mathworks.com/products/matlab.html\\nCategory: scientific\\n*/\\n\\n/*\\n  Formal syntax is not published, helpful link:\\n  https://github.com/kornilova-l/matlab-IntelliJ-plugin/blob/master/src/main/grammar/Matlab.bnf\\n*/\\nfunction matlab(hljs) {\\n  const TRANSPOSE_RE = '(\\\\'|\\\\\\\\.\\\\')+';\\n  const TRANSPOSE = {\\n    relevance: 0,\\n    contains: [ { begin: TRANSPOSE_RE } ]\\n  };\\n\\n  return {\\n    name: 'Matlab',\\n    keywords: {\\n      keyword:\\n        'arguments break case catch classdef continue else elseif end enumeration events for function '\\n        + 'global if methods otherwise parfor persistent properties return spmd switch try while',\\n      built_in:\\n        'sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan '\\n        + 'atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot '\\n        + 'cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog '\\n        + 'realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal '\\n        + 'cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli '\\n        + 'besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma '\\n        + 'gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms '\\n        + 'nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones '\\n        + 'eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length '\\n        + 'ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril '\\n        + 'triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute '\\n        + 'shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i|0 inf nan '\\n        + 'isnan isinf isfinite j|0 why compan gallery hadamard hankel hilb invhilb magic pascal '\\n        + 'rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table '\\n        + 'readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun '\\n        + 'legend intersect ismember procrustes hold num2cell '\\n    },\\n    illegal: '(//|\\\"|#|/\\\\\\\\*|\\\\\\\\s+/\\\\\\\\w+)',\\n    contains: [\\n      {\\n        className: 'function',\\n        beginKeywords: 'function',\\n        end: '$',\\n        contains: [\\n          hljs.UNDERSCORE_TITLE_MODE,\\n          {\\n            className: 'params',\\n            variants: [\\n              {\\n                begin: '\\\\\\\\(',\\n                end: '\\\\\\\\)'\\n              },\\n              {\\n                begin: '\\\\\\\\[',\\n                end: '\\\\\\\\]'\\n              }\\n            ]\\n          }\\n        ]\\n      },\\n      {\\n        className: 'built_in',\\n        begin: /true|false/,\\n        relevance: 0,\\n        starts: TRANSPOSE\\n      },\\n      {\\n        begin: '[a-zA-Z][a-zA-Z_0-9]*' + TRANSPOSE_RE,\\n        relevance: 0\\n      },\\n      {\\n        className: 'number',\\n        begin: hljs.C_NUMBER_RE,\\n        relevance: 0,\\n        starts: TRANSPOSE\\n      },\\n      {\\n        className: 'string',\\n        begin: '\\\\'',\\n        end: '\\\\'',\\n        contains: [ { begin: '\\\\'\\\\'' } ]\\n      },\\n      {\\n        begin: /\\\\]|\\\\}|\\\\)/,\\n        relevance: 0,\\n        starts: TRANSPOSE\\n      },\\n      {\\n        className: 'string',\\n        begin: '\\\"',\\n        end: '\\\"',\\n        contains: [ { begin: '\\\"\\\"' } ],\\n        starts: TRANSPOSE\\n      },\\n      hljs.COMMENT('^\\\\\\\\s*%\\\\\\\\{\\\\\\\\s*$', '^\\\\\\\\s*%\\\\\\\\}\\\\\\\\s*$'),\\n      hljs.COMMENT('%', '$')\\n    ]\\n  };\\n}\\n\\nmodule.exports = matlab;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/matlab.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/maxima.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/maxima.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Maxima\\nAuthor: Robert Dodier <robert.dodier@gmail.com>\\nWebsite: http://maxima.sourceforge.net\\nCategory: scientific\\n*/\\n\\nfunction maxima(hljs) {\\n  const KEYWORDS =\\n    'if then else elseif for thru do while unless step in and or not';\\n  const LITERALS =\\n    'true false unknown inf minf ind und %e %i %pi %phi %gamma';\\n  const BUILTIN_FUNCTIONS =\\n    ' abasep abs absint absolute_real_time acos acosh acot acoth acsc acsch activate'\\n    + ' addcol add_edge add_edges addmatrices addrow add_vertex add_vertices adjacency_matrix'\\n    + ' adjoin adjoint af agd airy airy_ai airy_bi airy_dai airy_dbi algsys alg_type'\\n    + ' alias allroots alphacharp alphanumericp amortization %and annuity_fv'\\n    + ' annuity_pv antid antidiff AntiDifference append appendfile apply apply1 apply2'\\n    + ' applyb1 apropos args arit_amortization arithmetic arithsum array arrayapply'\\n    + ' arrayinfo arraymake arraysetapply ascii asec asech asin asinh askinteger'\\n    + ' asksign assoc assoc_legendre_p assoc_legendre_q assume assume_external_byte_order'\\n    + ' asympa at atan atan2 atanh atensimp atom atvalue augcoefmatrix augmented_lagrangian_method'\\n    + ' av average_degree backtrace bars barsplot barsplot_description base64 base64_decode'\\n    + ' bashindices batch batchload bc2 bdvac belln benefit_cost bern bernpoly bernstein_approx'\\n    + ' bernstein_expand bernstein_poly bessel bessel_i bessel_j bessel_k bessel_simplify'\\n    + ' bessel_y beta beta_incomplete beta_incomplete_generalized beta_incomplete_regularized'\\n    + ' bezout bfallroots bffac bf_find_root bf_fmin_cobyla bfhzeta bfloat bfloatp'\\n    + ' bfpsi bfpsi0 bfzeta biconnected_components bimetric binomial bipartition'\\n    + ' block blockmatrixp bode_gain bode_phase bothcoef box boxplot boxplot_description'\\n    + ' break bug_report build_info|10 buildq build_sample burn cabs canform canten'\\n    + ' cardinality carg cartan cartesian_product catch cauchy_matrix cbffac cdf_bernoulli'\\n    + ' cdf_beta cdf_binomial cdf_cauchy cdf_chi2 cdf_continuous_uniform cdf_discrete_uniform'\\n    + ' cdf_exp cdf_f cdf_gamma cdf_general_finite_discrete cdf_geometric cdf_gumbel'\\n    + ' cdf_hypergeometric cdf_laplace cdf_logistic cdf_lognormal cdf_negative_binomial'\\n    + ' cdf_noncentral_chi2 cdf_noncentral_student_t cdf_normal cdf_pareto cdf_poisson'\\n    + ' cdf_rank_sum cdf_rayleigh cdf_signed_rank cdf_student_t cdf_weibull cdisplay'\\n    + ' ceiling central_moment cequal cequalignore cf cfdisrep cfexpand cgeodesic'\\n    + ' cgreaterp cgreaterpignore changename changevar chaosgame charat charfun charfun2'\\n    + ' charlist charp charpoly chdir chebyshev_t chebyshev_u checkdiv check_overlaps'\\n    + ' chinese cholesky christof chromatic_index chromatic_number cint circulant_graph'\\n    + ' clear_edge_weight clear_rules clear_vertex_label clebsch_gordan clebsch_graph'\\n    + ' clessp clesspignore close closefile cmetric coeff coefmatrix cograd col collapse'\\n    + ' collectterms columnop columnspace columnswap columnvector combination combine'\\n    + ' comp2pui compare compfile compile compile_file complement_graph complete_bipartite_graph'\\n    + ' complete_graph complex_number_p components compose_functions concan concat'\\n    + ' conjugate conmetderiv connected_components connect_vertices cons constant'\\n    + ' constantp constituent constvalue cont2part content continuous_freq contortion'\\n    + ' contour_plot contract contract_edge contragrad contrib_ode convert coord'\\n    + ' copy copy_file copy_graph copylist copymatrix cor cos cosh cot coth cov cov1'\\n    + ' covdiff covect covers crc24sum create_graph create_list csc csch csetup cspline'\\n    + ' ctaylor ct_coordsys ctransform ctranspose cube_graph cuboctahedron_graph'\\n    + ' cunlisp cv cycle_digraph cycle_graph cylindrical days360 dblint deactivate'\\n    + ' declare declare_constvalue declare_dimensions declare_fundamental_dimensions'\\n    + ' declare_fundamental_units declare_qty declare_translated declare_unit_conversion'\\n    + ' declare_units declare_weights decsym defcon define define_alt_display define_variable'\\n    + ' defint defmatch defrule defstruct deftaylor degree_sequence del delete deleten'\\n    + ' delta demo demoivre denom depends derivdegree derivlist describe desolve'\\n    + ' determinant dfloat dgauss_a dgauss_b dgeev dgemm dgeqrf dgesv dgesvd diag'\\n    + ' diagmatrix diag_matrix diagmatrixp diameter diff digitcharp dimacs_export'\\n    + ' dimacs_import dimension dimensionless dimensions dimensions_as_list direct'\\n    + ' directory discrete_freq disjoin disjointp disolate disp dispcon dispform'\\n    + ' dispfun dispJordan display disprule dispterms distrib divide divisors divsum'\\n    + ' dkummer_m dkummer_u dlange dodecahedron_graph dotproduct dotsimp dpart'\\n    + ' draw draw2d draw3d drawdf draw_file draw_graph dscalar echelon edge_coloring'\\n    + ' edge_connectivity edges eigens_by_jacobi eigenvalues eigenvectors eighth'\\n    + ' einstein eivals eivects elapsed_real_time elapsed_run_time ele2comp ele2polynome'\\n    + ' ele2pui elem elementp elevation_grid elim elim_allbut eliminate eliminate_using'\\n    + ' ellipse elliptic_e elliptic_ec elliptic_eu elliptic_f elliptic_kc elliptic_pi'\\n    + ' ematrix empty_graph emptyp endcons entermatrix entertensor entier equal equalp'\\n    + ' equiv_classes erf erfc erf_generalized erfi errcatch error errormsg errors'\\n    + ' euler ev eval_string evenp every evolution evolution2d evundiff example exp'\\n    + ' expand expandwrt expandwrt_factored expint expintegral_chi expintegral_ci'\\n    + ' expintegral_e expintegral_e1 expintegral_ei expintegral_e_simplify expintegral_li'\\n    + ' expintegral_shi expintegral_si explicit explose exponentialize express expt'\\n    + ' exsec extdiff extract_linear_equations extremal_subset ezgcd %f f90 facsum'\\n    + ' factcomb factor factorfacsum factorial factorout factorsum facts fast_central_elements'\\n    + ' fast_linsolve fasttimes featurep fernfale fft fib fibtophi fifth filename_merge'\\n    + ' file_search file_type fillarray findde find_root find_root_abs find_root_error'\\n    + ' find_root_rel first fix flatten flength float floatnump floor flower_snark'\\n    + ' flush flush1deriv flushd flushnd flush_output fmin_cobyla forget fortran'\\n    + ' fourcos fourexpand fourier fourier_elim fourint fourintcos fourintsin foursimp'\\n    + ' foursin fourth fposition frame_bracket freeof freshline fresnel_c fresnel_s'\\n    + ' from_adjacency_matrix frucht_graph full_listify fullmap fullmapl fullratsimp'\\n    + ' fullratsubst fullsetify funcsolve fundamental_dimensions fundamental_units'\\n    + ' fundef funmake funp fv g0 g1 gamma gamma_greek gamma_incomplete gamma_incomplete_generalized'\\n    + ' gamma_incomplete_regularized gauss gauss_a gauss_b gaussprob gcd gcdex gcdivide'\\n    + ' gcfac gcfactor gd generalized_lambert_w genfact gen_laguerre genmatrix gensym'\\n    + ' geo_amortization geo_annuity_fv geo_annuity_pv geomap geometric geometric_mean'\\n    + ' geosum get getcurrentdirectory get_edge_weight getenv get_lu_factors get_output_stream_string'\\n    + ' get_pixel get_plot_option get_tex_environment get_tex_environment_default'\\n    + ' get_vertex_label gfactor gfactorsum ggf girth global_variances gn gnuplot_close'\\n    + ' gnuplot_replot gnuplot_reset gnuplot_restart gnuplot_start go Gosper GosperSum'\\n    + ' gr2d gr3d gradef gramschmidt graph6_decode graph6_encode graph6_export graph6_import'\\n    + ' graph_center graph_charpoly graph_eigenvalues graph_flow graph_order graph_periphery'\\n    + ' graph_product graph_size graph_union great_rhombicosidodecahedron_graph great_rhombicuboctahedron_graph'\\n    + ' grid_graph grind grobner_basis grotzch_graph hamilton_cycle hamilton_path'\\n    + ' hankel hankel_1 hankel_2 harmonic harmonic_mean hav heawood_graph hermite'\\n    + ' hessian hgfred hilbertmap hilbert_matrix hipow histogram histogram_description'\\n    + ' hodge horner hypergeometric i0 i1 %ibes ic1 ic2 ic_convert ichr1 ichr2 icosahedron_graph'\\n    + ' icosidodecahedron_graph icurvature ident identfor identity idiff idim idummy'\\n    + ' ieqn %if ifactors iframes ifs igcdex igeodesic_coords ilt image imagpart'\\n    + ' imetric implicit implicit_derivative implicit_plot indexed_tensor indices'\\n    + ' induced_subgraph inferencep inference_result infix info_display init_atensor'\\n    + ' init_ctensor in_neighbors innerproduct inpart inprod inrt integerp integer_partitions'\\n    + ' integrate intersect intersection intervalp intopois intosum invariant1 invariant2'\\n    + ' inverse_fft inverse_jacobi_cd inverse_jacobi_cn inverse_jacobi_cs inverse_jacobi_dc'\\n    + ' inverse_jacobi_dn inverse_jacobi_ds inverse_jacobi_nc inverse_jacobi_nd inverse_jacobi_ns'\\n    + ' inverse_jacobi_sc inverse_jacobi_sd inverse_jacobi_sn invert invert_by_adjoint'\\n    + ' invert_by_lu inv_mod irr is is_biconnected is_bipartite is_connected is_digraph'\\n    + ' is_edge_in_graph is_graph is_graph_or_digraph ishow is_isomorphic isolate'\\n    + ' isomorphism is_planar isqrt isreal_p is_sconnected is_tree is_vertex_in_graph'\\n    + ' items_inference %j j0 j1 jacobi jacobian jacobi_cd jacobi_cn jacobi_cs jacobi_dc'\\n    + ' jacobi_dn jacobi_ds jacobi_nc jacobi_nd jacobi_ns jacobi_p jacobi_sc jacobi_sd'\\n    + ' jacobi_sn JF jn join jordan julia julia_set julia_sin %k kdels kdelta kill'\\n    + ' killcontext kostka kron_delta kronecker_product kummer_m kummer_u kurtosis'\\n    + ' kurtosis_bernoulli kurtosis_beta kurtosis_binomial kurtosis_chi2 kurtosis_continuous_uniform'\\n    + ' kurtosis_discrete_uniform kurtosis_exp kurtosis_f kurtosis_gamma kurtosis_general_finite_discrete'\\n    + ' kurtosis_geometric kurtosis_gumbel kurtosis_hypergeometric kurtosis_laplace'\\n    + ' kurtosis_logistic kurtosis_lognormal kurtosis_negative_binomial kurtosis_noncentral_chi2'\\n    + ' kurtosis_noncentral_student_t kurtosis_normal kurtosis_pareto kurtosis_poisson'\\n    + ' kurtosis_rayleigh kurtosis_student_t kurtosis_weibull label labels lagrange'\\n    + ' laguerre lambda lambert_w laplace laplacian_matrix last lbfgs lc2kdt lcharp'\\n    + ' lc_l lcm lc_u ldefint ldisp ldisplay legendre_p legendre_q leinstein length'\\n    + ' let letrules letsimp levi_civita lfreeof lgtreillis lhs li liediff limit'\\n    + ' Lindstedt linear linearinterpol linear_program linear_regression line_graph'\\n    + ' linsolve listarray list_correlations listify list_matrix_entries list_nc_monomials'\\n    + ' listoftens listofvars listp lmax lmin load loadfile local locate_matrix_entry'\\n    + ' log logcontract log_gamma lopow lorentz_gauge lowercasep lpart lratsubst'\\n    + ' lreduce lriemann lsquares_estimates lsquares_estimates_approximate lsquares_estimates_exact'\\n    + ' lsquares_mse lsquares_residual_mse lsquares_residuals lsum ltreillis lu_backsub'\\n    + ' lucas lu_factor %m macroexpand macroexpand1 make_array makebox makefact makegamma'\\n    + ' make_graph make_level_picture makelist makeOrders make_poly_continent make_poly_country'\\n    + ' make_polygon make_random_state make_rgb_picture makeset make_string_input_stream'\\n    + ' make_string_output_stream make_transform mandelbrot mandelbrot_set map mapatom'\\n    + ' maplist matchdeclare matchfix mat_cond mat_fullunblocker mat_function mathml_display'\\n    + ' mat_norm matrix matrixmap matrixp matrix_size mattrace mat_trace mat_unblocker'\\n    + ' max max_clique max_degree max_flow maximize_lp max_independent_set max_matching'\\n    + ' maybe md5sum mean mean_bernoulli mean_beta mean_binomial mean_chi2 mean_continuous_uniform'\\n    + ' mean_deviation mean_discrete_uniform mean_exp mean_f mean_gamma mean_general_finite_discrete'\\n    + ' mean_geometric mean_gumbel mean_hypergeometric mean_laplace mean_logistic'\\n    + ' mean_lognormal mean_negative_binomial mean_noncentral_chi2 mean_noncentral_student_t'\\n    + ' mean_normal mean_pareto mean_poisson mean_rayleigh mean_student_t mean_weibull'\\n    + ' median median_deviation member mesh metricexpandall mgf1_sha1 min min_degree'\\n    + ' min_edge_cut minfactorial minimalPoly minimize_lp minimum_spanning_tree minor'\\n    + ' minpack_lsquares minpack_solve min_vertex_cover min_vertex_cut mkdir mnewton'\\n    + ' mod mode_declare mode_identity ModeMatrix moebius mon2schur mono monomial_dimensions'\\n    + ' multibernstein_poly multi_display_for_texinfo multi_elem multinomial multinomial_coeff'\\n    + ' multi_orbit multiplot_mode multi_pui multsym multthru mycielski_graph nary'\\n    + ' natural_unit nc_degree ncexpt ncharpoly negative_picture neighbors new newcontext'\\n    + ' newdet new_graph newline newton new_variable next_prime nicedummies niceindices'\\n    + ' ninth nofix nonarray noncentral_moment nonmetricity nonnegintegerp nonscalarp'\\n    + ' nonzeroandfreeof notequal nounify nptetrad npv nroots nterms ntermst'\\n    + ' nthroot nullity nullspace num numbered_boundaries numberp number_to_octets'\\n    + ' num_distinct_partitions numerval numfactor num_partitions nusum nzeta nzetai'\\n    + ' nzetar octets_to_number octets_to_oid odd_girth oddp ode2 ode_check odelin'\\n    + ' oid_to_octets op opena opena_binary openr openr_binary openw openw_binary'\\n    + ' operatorp opsubst optimize %or orbit orbits ordergreat ordergreatp orderless'\\n    + ' orderlessp orthogonal_complement orthopoly_recur orthopoly_weight outermap'\\n    + ' out_neighbors outofpois pade parabolic_cylinder_d parametric parametric_surface'\\n    + ' parg parGosper parse_string parse_timedate part part2cont partfrac partition'\\n    + ' partition_set partpol path_digraph path_graph pathname_directory pathname_name'\\n    + ' pathname_type pdf_bernoulli pdf_beta pdf_binomial pdf_cauchy pdf_chi2 pdf_continuous_uniform'\\n    + ' pdf_discrete_uniform pdf_exp pdf_f pdf_gamma pdf_general_finite_discrete'\\n    + ' pdf_geometric pdf_gumbel pdf_hypergeometric pdf_laplace pdf_logistic pdf_lognormal'\\n    + ' pdf_negative_binomial pdf_noncentral_chi2 pdf_noncentral_student_t pdf_normal'\\n    + ' pdf_pareto pdf_poisson pdf_rank_sum pdf_rayleigh pdf_signed_rank pdf_student_t'\\n    + ' pdf_weibull pearson_skewness permanent permut permutation permutations petersen_graph'\\n    + ' petrov pickapart picture_equalp picturep piechart piechart_description planar_embedding'\\n    + ' playback plog plot2d plot3d plotdf ploteq plsquares pochhammer points poisdiff'\\n    + ' poisexpt poisint poismap poisplus poissimp poissubst poistimes poistrim polar'\\n    + ' polarform polartorect polar_to_xy poly_add poly_buchberger poly_buchberger_criterion'\\n    + ' poly_colon_ideal poly_content polydecomp poly_depends_p poly_elimination_ideal'\\n    + ' poly_exact_divide poly_expand poly_expt poly_gcd polygon poly_grobner poly_grobner_equal'\\n    + ' poly_grobner_member poly_grobner_subsetp poly_ideal_intersection poly_ideal_polysaturation'\\n    + ' poly_ideal_polysaturation1 poly_ideal_saturation poly_ideal_saturation1 poly_lcm'\\n    + ' poly_minimization polymod poly_multiply polynome2ele polynomialp poly_normal_form'\\n    + ' poly_normalize poly_normalize_list poly_polysaturation_extension poly_primitive_part'\\n    + ' poly_pseudo_divide poly_reduced_grobner poly_reduction poly_saturation_extension'\\n    + ' poly_s_polynomial poly_subtract polytocompanion pop postfix potential power_mod'\\n    + ' powerseries powerset prefix prev_prime primep primes principal_components'\\n    + ' print printf printfile print_graph printpois printprops prodrac product properties'\\n    + ' propvars psi psubst ptriangularize pui pui2comp pui2ele pui2polynome pui_direct'\\n    + ' puireduc push put pv qput qrange qty quad_control quad_qag quad_qagi quad_qagp'\\n    + ' quad_qags quad_qawc quad_qawf quad_qawo quad_qaws quadrilateral quantile'\\n    + ' quantile_bernoulli quantile_beta quantile_binomial quantile_cauchy quantile_chi2'\\n    + ' quantile_continuous_uniform quantile_discrete_uniform quantile_exp quantile_f'\\n    + ' quantile_gamma quantile_general_finite_discrete quantile_geometric quantile_gumbel'\\n    + ' quantile_hypergeometric quantile_laplace quantile_logistic quantile_lognormal'\\n    + ' quantile_negative_binomial quantile_noncentral_chi2 quantile_noncentral_student_t'\\n    + ' quantile_normal quantile_pareto quantile_poisson quantile_rayleigh quantile_student_t'\\n    + ' quantile_weibull quartile_skewness quit qunit quotient racah_v racah_w radcan'\\n    + ' radius random random_bernoulli random_beta random_binomial random_bipartite_graph'\\n    + ' random_cauchy random_chi2 random_continuous_uniform random_digraph random_discrete_uniform'\\n    + ' random_exp random_f random_gamma random_general_finite_discrete random_geometric'\\n    + ' random_graph random_graph1 random_gumbel random_hypergeometric random_laplace'\\n    + ' random_logistic random_lognormal random_negative_binomial random_network'\\n    + ' random_noncentral_chi2 random_noncentral_student_t random_normal random_pareto'\\n    + ' random_permutation random_poisson random_rayleigh random_regular_graph random_student_t'\\n    + ' random_tournament random_tree random_weibull range rank rat ratcoef ratdenom'\\n    + ' ratdiff ratdisrep ratexpand ratinterpol rational rationalize ratnumer ratnump'\\n    + ' ratp ratsimp ratsubst ratvars ratweight read read_array read_binary_array'\\n    + ' read_binary_list read_binary_matrix readbyte readchar read_hashed_array readline'\\n    + ' read_list read_matrix read_nested_list readonly read_xpm real_imagpart_to_conjugate'\\n    + ' realpart realroots rearray rectangle rectform rectform_log_if_constant recttopolar'\\n    + ' rediff reduce_consts reduce_order region region_boundaries region_boundaries_plus'\\n    + ' rem remainder remarray rembox remcomps remcon remcoord remfun remfunction'\\n    + ' remlet remove remove_constvalue remove_dimensions remove_edge remove_fundamental_dimensions'\\n    + ' remove_fundamental_units remove_plot_option remove_vertex rempart remrule'\\n    + ' remsym remvalue rename rename_file reset reset_displays residue resolvante'\\n    + ' resolvante_alternee1 resolvante_bipartite resolvante_diedrale resolvante_klein'\\n    + ' resolvante_klein3 resolvante_produit_sym resolvante_unitaire resolvante_vierer'\\n    + ' rest resultant return reveal reverse revert revert2 rgb2level rhs ricci riemann'\\n    + ' rinvariant risch rk rmdir rncombine romberg room rootscontract round row'\\n    + ' rowop rowswap rreduce run_testsuite %s save saving scalarp scaled_bessel_i'\\n    + ' scaled_bessel_i0 scaled_bessel_i1 scalefactors scanmap scatterplot scatterplot_description'\\n    + ' scene schur2comp sconcat scopy scsimp scurvature sdowncase sec sech second'\\n    + ' sequal sequalignore set_alt_display setdifference set_draw_defaults set_edge_weight'\\n    + ' setelmx setequalp setify setp set_partitions set_plot_option set_prompt set_random_state'\\n    + ' set_tex_environment set_tex_environment_default setunits setup_autoload set_up_dot_simplifications'\\n    + ' set_vertex_label seventh sexplode sf sha1sum sha256sum shortest_path shortest_weighted_path'\\n    + ' show showcomps showratvars sierpinskiale sierpinskimap sign signum similaritytransform'\\n    + ' simp_inequality simplify_sum simplode simpmetderiv simtran sin sinh sinsert'\\n    + ' sinvertcase sixth skewness skewness_bernoulli skewness_beta skewness_binomial'\\n    + ' skewness_chi2 skewness_continuous_uniform skewness_discrete_uniform skewness_exp'\\n    + ' skewness_f skewness_gamma skewness_general_finite_discrete skewness_geometric'\\n    + ' skewness_gumbel skewness_hypergeometric skewness_laplace skewness_logistic'\\n    + ' skewness_lognormal skewness_negative_binomial skewness_noncentral_chi2 skewness_noncentral_student_t'\\n    + ' skewness_normal skewness_pareto skewness_poisson skewness_rayleigh skewness_student_t'\\n    + ' skewness_weibull slength smake small_rhombicosidodecahedron_graph small_rhombicuboctahedron_graph'\\n    + ' smax smin smismatch snowmap snub_cube_graph snub_dodecahedron_graph solve'\\n    + ' solve_rec solve_rec_rat some somrac sort sparse6_decode sparse6_encode sparse6_export'\\n    + ' sparse6_import specint spherical spherical_bessel_j spherical_bessel_y spherical_hankel1'\\n    + ' spherical_hankel2 spherical_harmonic spherical_to_xyz splice split sposition'\\n    + ' sprint sqfr sqrt sqrtdenest sremove sremovefirst sreverse ssearch ssort sstatus'\\n    + ' ssubst ssubstfirst staircase standardize standardize_inverse_trig starplot'\\n    + ' starplot_description status std std1 std_bernoulli std_beta std_binomial'\\n    + ' std_chi2 std_continuous_uniform std_discrete_uniform std_exp std_f std_gamma'\\n    + ' std_general_finite_discrete std_geometric std_gumbel std_hypergeometric std_laplace'\\n    + ' std_logistic std_lognormal std_negative_binomial std_noncentral_chi2 std_noncentral_student_t'\\n    + ' std_normal std_pareto std_poisson std_rayleigh std_student_t std_weibull'\\n    + ' stemplot stirling stirling1 stirling2 strim striml strimr string stringout'\\n    + ' stringp strong_components struve_h struve_l sublis sublist sublist_indices'\\n    + ' submatrix subsample subset subsetp subst substinpart subst_parallel substpart'\\n    + ' substring subvar subvarp sum sumcontract summand_to_rec supcase supcontext'\\n    + ' symbolp symmdifference symmetricp system take_channel take_inference tan'\\n    + ' tanh taylor taylorinfo taylorp taylor_simplifier taytorat tcl_output tcontract'\\n    + ' tellrat tellsimp tellsimpafter tentex tenth test_mean test_means_difference'\\n    + ' test_normality test_proportion test_proportions_difference test_rank_sum'\\n    + ' test_sign test_signed_rank test_variance test_variance_ratio tex tex1 tex_display'\\n    + ' texput %th third throw time timedate timer timer_info tldefint tlimit todd_coxeter'\\n    + ' toeplitz tokens to_lisp topological_sort to_poly to_poly_solve totaldisrep'\\n    + ' totalfourier totient tpartpol trace tracematrix trace_options transform_sample'\\n    + ' translate translate_file transpose treefale tree_reduce treillis treinat'\\n    + ' triangle triangularize trigexpand trigrat trigreduce trigsimp trunc truncate'\\n    + ' truncated_cube_graph truncated_dodecahedron_graph truncated_icosahedron_graph'\\n    + ' truncated_tetrahedron_graph tr_warnings_get tube tutte_graph ueivects uforget'\\n    + ' ultraspherical underlying_graph undiff union unique uniteigenvectors unitp'\\n    + ' units unit_step unitvector unorder unsum untellrat untimer'\\n    + ' untrace uppercasep uricci uriemann uvect vandermonde_matrix var var1 var_bernoulli'\\n    + ' var_beta var_binomial var_chi2 var_continuous_uniform var_discrete_uniform'\\n    + ' var_exp var_f var_gamma var_general_finite_discrete var_geometric var_gumbel'\\n    + ' var_hypergeometric var_laplace var_logistic var_lognormal var_negative_binomial'\\n    + ' var_noncentral_chi2 var_noncentral_student_t var_normal var_pareto var_poisson'\\n    + ' var_rayleigh var_student_t var_weibull vector vectorpotential vectorsimp'\\n    + ' verbify vers vertex_coloring vertex_connectivity vertex_degree vertex_distance'\\n    + ' vertex_eccentricity vertex_in_degree vertex_out_degree vertices vertices_to_cycle'\\n    + ' vertices_to_path %w weyl wheel_graph wiener_index wigner_3j wigner_6j'\\n    + ' wigner_9j with_stdout write_binary_data writebyte write_data writefile wronskian'\\n    + ' xreduce xthru %y Zeilberger zeroequiv zerofor zeromatrix zeromatrixp zeta'\\n    + ' zgeev zheev zlange zn_add_table zn_carmichael_lambda zn_characteristic_factors'\\n    + ' zn_determinant zn_factor_generators zn_invert_by_lu zn_log zn_mult_table'\\n    + ' absboxchar activecontexts adapt_depth additive adim aform algebraic'\\n    + ' algepsilon algexact aliases allbut all_dotsimp_denoms allocation allsym alphabetic'\\n    + ' animation antisymmetric arrays askexp assume_pos assume_pos_pred assumescalar'\\n    + ' asymbol atomgrad atrig1 axes axis_3d axis_bottom axis_left axis_right axis_top'\\n    + ' azimuth background background_color backsubst berlefact bernstein_explicit'\\n    + ' besselexpand beta_args_sum_to_integer beta_expand bftorat bftrunc bindtest'\\n    + ' border boundaries_array box boxchar breakup %c capping cauchysum cbrange'\\n    + ' cbtics center cflength cframe_flag cnonmet_flag color color_bar color_bar_tics'\\n    + ' colorbox columns commutative complex cone context contexts contour contour_levels'\\n    + ' cosnpiflag ctaypov ctaypt ctayswitch ctayvar ct_coords ctorsion_flag ctrgsimp'\\n    + ' cube current_let_rule_package cylinder data_file_name debugmode decreasing'\\n    + ' default_let_rule_package delay dependencies derivabbrev derivsubst detout'\\n    + ' diagmetric diff dim dimensions dispflag display2d|10 display_format_internal'\\n    + ' distribute_over doallmxops domain domxexpt domxmxops domxnctimes dontfactor'\\n    + ' doscmxops doscmxplus dot0nscsimp dot0simp dot1simp dotassoc dotconstrules'\\n    + ' dotdistrib dotexptsimp dotident dotscrules draw_graph_program draw_realpart'\\n    + ' edge_color edge_coloring edge_partition edge_type edge_width %edispflag'\\n    + ' elevation %emode endphi endtheta engineering_format_floats enhanced3d %enumer'\\n    + ' epsilon_lp erfflag erf_representation errormsg error_size error_syms error_type'\\n    + ' %e_to_numlog eval even evenfun evflag evfun ev_point expandwrt_denom expintexpand'\\n    + ' expintrep expon expop exptdispflag exptisolate exptsubst facexpand facsum_combine'\\n    + ' factlim factorflag factorial_expand factors_only fb feature features'\\n    + ' file_name file_output_append file_search_demo file_search_lisp file_search_maxima|10'\\n    + ' file_search_tests file_search_usage file_type_lisp file_type_maxima|10 fill_color'\\n    + ' fill_density filled_func fixed_vertices flipflag float2bf font font_size'\\n    + ' fortindent fortspaces fpprec fpprintprec functions gamma_expand gammalim'\\n    + ' gdet genindex gensumnum GGFCFMAX GGFINFINITY globalsolve gnuplot_command'\\n    + ' gnuplot_curve_styles gnuplot_curve_titles gnuplot_default_term_command gnuplot_dumb_term_command'\\n    + ' gnuplot_file_args gnuplot_file_name gnuplot_out_file gnuplot_pdf_term_command'\\n    + ' gnuplot_pm3d gnuplot_png_term_command gnuplot_postamble gnuplot_preamble'\\n    + ' gnuplot_ps_term_command gnuplot_svg_term_command gnuplot_term gnuplot_view_args'\\n    + ' Gosper_in_Zeilberger gradefs grid grid2d grind halfangles head_angle head_both'\\n    + ' head_length head_type height hypergeometric_representation %iargs ibase'\\n    + ' icc1 icc2 icounter idummyx ieqnprint ifb ifc1 ifc2 ifg ifgi ifr iframe_bracket_form'\\n    + ' ifri igeowedge_flag ikt1 ikt2 imaginary inchar increasing infeval'\\n    + ' infinity inflag infolists inm inmc1 inmc2 intanalysis integer integervalued'\\n    + ' integrate_use_rootsof integration_constant integration_constant_counter interpolate_color'\\n    + ' intfaclim ip_grid ip_grid_in irrational isolate_wrt_times iterations itr'\\n    + ' julia_parameter %k1 %k2 keepfloat key key_pos kinvariant kt label label_alignment'\\n    + ' label_orientation labels lassociative lbfgs_ncorrections lbfgs_nfeval_max'\\n    + ' leftjust legend letrat let_rule_packages lfg lg lhospitallim limsubst linear'\\n    + ' linear_solver linechar linel|10 linenum line_type linewidth line_width linsolve_params'\\n    + ' linsolvewarn lispdisp listarith listconstvars listdummyvars lmxchar load_pathname'\\n    + ' loadprint logabs logarc logcb logconcoeffp logexpand lognegint logsimp logx'\\n    + ' logx_secondary logy logy_secondary logz lriem m1pbranch macroexpansion macros'\\n    + ' mainvar manual_demo maperror mapprint matrix_element_add matrix_element_mult'\\n    + ' matrix_element_transpose maxapplydepth maxapplyheight maxima_tempdir|10 maxima_userdir|10'\\n    + ' maxnegex MAX_ORD maxposex maxpsifracdenom maxpsifracnum maxpsinegint maxpsiposint'\\n    + ' maxtayorder mesh_lines_color method mod_big_prime mode_check_errorp'\\n    + ' mode_checkp mode_check_warnp mod_test mod_threshold modular_linear_solver'\\n    + ' modulus multiplicative multiplicities myoptions nary negdistrib negsumdispflag'\\n    + ' newline newtonepsilon newtonmaxiter nextlayerfactor niceindicespref nm nmc'\\n    + ' noeval nolabels nonegative_lp noninteger nonscalar noun noundisp nouns np'\\n    + ' npi nticks ntrig numer numer_pbranch obase odd oddfun opacity opproperties'\\n    + ' opsubst optimprefix optionset orientation origin orthopoly_returns_intervals'\\n    + ' outative outchar packagefile palette partswitch pdf_file pfeformat phiresolution'\\n    + ' %piargs piece pivot_count_sx pivot_max_sx plot_format plot_options plot_realpart'\\n    + ' png_file pochhammer_max_index points pointsize point_size points_joined point_type'\\n    + ' poislim poisson poly_coefficient_ring poly_elimination_order polyfactor poly_grobner_algorithm'\\n    + ' poly_grobner_debug poly_monomial_order poly_primary_elimination_order poly_return_term_list'\\n    + ' poly_secondary_elimination_order poly_top_reduction_only posfun position'\\n    + ' powerdisp pred prederror primep_number_of_tests product_use_gamma program'\\n    + ' programmode promote_float_to_bigfloat prompt proportional_axes props psexpand'\\n    + ' ps_file radexpand radius radsubstflag rassociative ratalgdenom ratchristof'\\n    + ' ratdenomdivide rateinstein ratepsilon ratfac rational ratmx ratprint ratriemann'\\n    + ' ratsimpexpons ratvarswitch ratweights ratweyl ratwtlvl real realonly redraw'\\n    + ' refcheck resolution restart resultant ric riem rmxchar %rnum_list rombergabs'\\n    + ' rombergit rombergmin rombergtol rootsconmode rootsepsilon run_viewer same_xy'\\n    + ' same_xyz savedef savefactors scalar scalarmatrixp scale scale_lp setcheck'\\n    + ' setcheckbreak setval show_edge_color show_edges show_edge_type show_edge_width'\\n    + ' show_id show_label showtime show_vertex_color show_vertex_size show_vertex_type'\\n    + ' show_vertices show_weight simp simplified_output simplify_products simpproduct'\\n    + ' simpsum sinnpiflag solvedecomposes solveexplicit solvefactors solvenullwarn'\\n    + ' solveradcan solvetrigwarn space sparse sphere spring_embedding_depth sqrtdispflag'\\n    + ' stardisp startphi starttheta stats_numer stringdisp structures style sublis_apply_lambda'\\n    + ' subnumsimp sumexpand sumsplitfact surface surface_hide svg_file symmetric'\\n    + ' tab taylordepth taylor_logexpand taylor_order_coefficients taylor_truncate_polynomials'\\n    + ' tensorkill terminal testsuite_files thetaresolution timer_devalue title tlimswitch'\\n    + ' tr track transcompile transform transform_xy translate_fast_arrays transparent'\\n    + ' transrun tr_array_as_ref tr_bound_function_applyp tr_file_tty_messagesp tr_float_can_branch_complex'\\n    + ' tr_function_call_default trigexpandplus trigexpandtimes triginverses trigsign'\\n    + ' trivial_solutions tr_numer tr_optimize_max_loop tr_semicompile tr_state_vars'\\n    + ' tr_warn_bad_function_calls tr_warn_fexpr tr_warn_meval tr_warn_mode'\\n    + ' tr_warn_undeclared tr_warn_undefined_variable tstep ttyoff tube_extremes'\\n    + ' ufg ug %unitexpand unit_vectors uric uriem use_fast_arrays user_preamble'\\n    + ' usersetunits values vect_cross verbose vertex_color vertex_coloring vertex_partition'\\n    + ' vertex_size vertex_type view warnings weyl width windowname windowtitle wired_surface'\\n    + ' wireframe xaxis xaxis_color xaxis_secondary xaxis_type xaxis_width xlabel'\\n    + ' xlabel_secondary xlength xrange xrange_secondary xtics xtics_axis xtics_rotate'\\n    + ' xtics_rotate_secondary xtics_secondary xtics_secondary_axis xu_grid x_voxel'\\n    + ' xy_file xyplane xy_scale yaxis yaxis_color yaxis_secondary yaxis_type yaxis_width'\\n    + ' ylabel ylabel_secondary ylength yrange yrange_secondary ytics ytics_axis'\\n    + ' ytics_rotate ytics_rotate_secondary ytics_secondary ytics_secondary_axis'\\n    + ' yv_grid y_voxel yx_ratio zaxis zaxis_color zaxis_type zaxis_width zeroa zerob'\\n    + ' zerobern zeta%pi zlabel zlabel_rotate zlength zmin zn_primroot_limit zn_primroot_pretest';\\n  const SYMBOLS = '_ __ %|0 %%|0';\\n\\n  return {\\n    name: 'Maxima',\\n    keywords: {\\n      $pattern: '[A-Za-z_%][0-9A-Za-z_%]*',\\n      keyword: KEYWORDS,\\n      literal: LITERALS,\\n      built_in: BUILTIN_FUNCTIONS,\\n      symbol: SYMBOLS\\n    },\\n    contains: [\\n      {\\n        className: 'comment',\\n        begin: '/\\\\\\\\*',\\n        end: '\\\\\\\\*/',\\n        contains: [ 'self' ]\\n      },\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'number',\\n        relevance: 0,\\n        variants: [\\n          {\\n            // float number w/ exponent\\n            // hmm, I wonder if we ought to include other exponent markers?\\n            begin: '\\\\\\\\b(\\\\\\\\d+|\\\\\\\\d+\\\\\\\\.|\\\\\\\\.\\\\\\\\d+|\\\\\\\\d+\\\\\\\\.\\\\\\\\d+)[Ee][-+]?\\\\\\\\d+\\\\\\\\b' },\\n          {\\n            // bigfloat number\\n            begin: '\\\\\\\\b(\\\\\\\\d+|\\\\\\\\d+\\\\\\\\.|\\\\\\\\.\\\\\\\\d+|\\\\\\\\d+\\\\\\\\.\\\\\\\\d+)[Bb][-+]?\\\\\\\\d+\\\\\\\\b',\\n            relevance: 10\\n          },\\n          {\\n            // float number w/out exponent\\n            // Doesn't seem to recognize floats which start with '.'\\n            begin: '\\\\\\\\b(\\\\\\\\.\\\\\\\\d+|\\\\\\\\d+\\\\\\\\.\\\\\\\\d+)\\\\\\\\b' },\\n          {\\n            // integer in base up to 36\\n            // Doesn't seem to recognize integers which end with '.'\\n            begin: '\\\\\\\\b(\\\\\\\\d+|0[0-9A-Za-z]+)\\\\\\\\.?\\\\\\\\b' }\\n        ]\\n      }\\n    ],\\n    illegal: /@/\\n  };\\n}\\n\\nmodule.exports = maxima;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/maxima.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/mel.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/mel.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: MEL\\nDescription: Maya Embedded Language\\nAuthor: Shuen-Huei Guan <drake.guan@gmail.com>\\nWebsite: http://www.autodesk.com/products/autodesk-maya/overview\\nCategory: graphics\\n*/\\n\\nfunction mel(hljs) {\\n  return {\\n    name: 'MEL',\\n    keywords:\\n      'int float string vector matrix if else switch case default while do for in break '\\n      + 'continue global proc return about abs addAttr addAttributeEditorNodeHelp addDynamic '\\n      + 'addNewShelfTab addPP addPanelCategory addPrefixToName advanceToNextDrivenKey '\\n      + 'affectedNet affects aimConstraint air alias aliasAttr align alignCtx alignCurve '\\n      + 'alignSurface allViewFit ambientLight angle angleBetween animCone animCurveEditor '\\n      + 'animDisplay animView annotate appendStringArray applicationName applyAttrPreset '\\n      + 'applyTake arcLenDimContext arcLengthDimension arclen arrayMapper art3dPaintCtx '\\n      + 'artAttrCtx artAttrPaintVertexCtx artAttrSkinPaintCtx artAttrTool artBuildPaintMenu '\\n      + 'artFluidAttrCtx artPuttyCtx artSelectCtx artSetPaintCtx artUserPaintCtx assignCommand '\\n      + 'assignInputDevice assignViewportFactories attachCurve attachDeviceAttr attachSurface '\\n      + 'attrColorSliderGrp attrCompatibility attrControlGrp attrEnumOptionMenu '\\n      + 'attrEnumOptionMenuGrp attrFieldGrp attrFieldSliderGrp attrNavigationControlGrp '\\n      + 'attrPresetEditWin attributeExists attributeInfo attributeMenu attributeQuery '\\n      + 'autoKeyframe autoPlace bakeClip bakeFluidShading bakePartialHistory bakeResults '\\n      + 'bakeSimulation basename basenameEx batchRender bessel bevel bevelPlus binMembership '\\n      + 'bindSkin blend2 blendShape blendShapeEditor blendShapePanel blendTwoAttr blindDataType '\\n      + 'boneLattice boundary boxDollyCtx boxZoomCtx bufferCurve buildBookmarkMenu '\\n      + 'buildKeyframeMenu button buttonManip CBG cacheFile cacheFileCombine cacheFileMerge '\\n      + 'cacheFileTrack camera cameraView canCreateManip canvas capitalizeString catch '\\n      + 'catchQuiet ceil changeSubdivComponentDisplayLevel changeSubdivRegion channelBox '\\n      + 'character characterMap characterOutlineEditor characterize chdir checkBox checkBoxGrp '\\n      + 'checkDefaultRenderGlobals choice circle circularFillet clamp clear clearCache clip '\\n      + 'clipEditor clipEditorCurrentTimeCtx clipSchedule clipSchedulerOutliner clipTrimBefore '\\n      + 'closeCurve closeSurface cluster cmdFileOutput cmdScrollFieldExecuter '\\n      + 'cmdScrollFieldReporter cmdShell coarsenSubdivSelectionList collision color '\\n      + 'colorAtPoint colorEditor colorIndex colorIndexSliderGrp colorSliderButtonGrp '\\n      + 'colorSliderGrp columnLayout commandEcho commandLine commandPort compactHairSystem '\\n      + 'componentEditor compositingInterop computePolysetVolume condition cone confirmDialog '\\n      + 'connectAttr connectControl connectDynamic connectJoint connectionInfo constrain '\\n      + 'constrainValue constructionHistory container containsMultibyte contextInfo control '\\n      + 'convertFromOldLayers convertIffToPsd convertLightmap convertSolidTx convertTessellation '\\n      + 'convertUnit copyArray copyFlexor copyKey copySkinWeights cos cpButton cpCache '\\n      + 'cpClothSet cpCollision cpConstraint cpConvClothToMesh cpForces cpGetSolverAttr cpPanel '\\n      + 'cpProperty cpRigidCollisionFilter cpSeam cpSetEdit cpSetSolverAttr cpSolver '\\n      + 'cpSolverTypes cpTool cpUpdateClothUVs createDisplayLayer createDrawCtx createEditor '\\n      + 'createLayeredPsdFile createMotionField createNewShelf createNode createRenderLayer '\\n      + 'createSubdivRegion cross crossProduct ctxAbort ctxCompletion ctxEditMode ctxTraverse '\\n      + 'currentCtx currentTime currentTimeCtx currentUnit curve curveAddPtCtx '\\n      + 'curveCVCtx curveEPCtx curveEditorCtx curveIntersect curveMoveEPCtx curveOnSurface '\\n      + 'curveSketchCtx cutKey cycleCheck cylinder dagPose date defaultLightListCheckBox '\\n      + 'defaultNavigation defineDataServer defineVirtualDevice deformer deg_to_rad delete '\\n      + 'deleteAttr deleteShadingGroupsAndMaterials deleteShelfTab deleteUI deleteUnusedBrushes '\\n      + 'delrandstr detachCurve detachDeviceAttr detachSurface deviceEditor devicePanel dgInfo '\\n      + 'dgdirty dgeval dgtimer dimWhen directKeyCtx directionalLight dirmap dirname disable '\\n      + 'disconnectAttr disconnectJoint diskCache displacementToPoly displayAffected '\\n      + 'displayColor displayCull displayLevelOfDetail displayPref displayRGBColor '\\n      + 'displaySmoothness displayStats displayString displaySurface distanceDimContext '\\n      + 'distanceDimension doBlur dolly dollyCtx dopeSheetEditor dot dotProduct '\\n      + 'doubleProfileBirailSurface drag dragAttrContext draggerContext dropoffLocator '\\n      + 'duplicate duplicateCurve duplicateSurface dynCache dynControl dynExport dynExpression '\\n      + 'dynGlobals dynPaintEditor dynParticleCtx dynPref dynRelEdPanel dynRelEditor '\\n      + 'dynamicLoad editAttrLimits editDisplayLayerGlobals editDisplayLayerMembers '\\n      + 'editRenderLayerAdjustment editRenderLayerGlobals editRenderLayerMembers editor '\\n      + 'editorTemplate effector emit emitter enableDevice encodeString endString endsWith env '\\n      + 'equivalent equivalentTol erf error eval evalDeferred evalEcho event '\\n      + 'exactWorldBoundingBox exclusiveLightCheckBox exec executeForEachObject exists exp '\\n      + 'expression expressionEditorListen extendCurve extendSurface extrude fcheck fclose feof '\\n      + 'fflush fgetline fgetword file fileBrowserDialog fileDialog fileExtension fileInfo '\\n      + 'filetest filletCurve filter filterCurve filterExpand filterStudioImport '\\n      + 'findAllIntersections findAnimCurves findKeyframe findMenuItem findRelatedSkinCluster '\\n      + 'finder firstParentOf fitBspline flexor floatEq floatField floatFieldGrp floatScrollBar '\\n      + 'floatSlider floatSlider2 floatSliderButtonGrp floatSliderGrp floor flow fluidCacheInfo '\\n      + 'fluidEmitter fluidVoxelInfo flushUndo fmod fontDialog fopen formLayout format fprint '\\n      + 'frameLayout fread freeFormFillet frewind fromNativePath fwrite gamma gauss '\\n      + 'geometryConstraint getApplicationVersionAsFloat getAttr getClassification '\\n      + 'getDefaultBrush getFileList getFluidAttr getInputDeviceRange getMayaPanelTypes '\\n      + 'getModifiers getPanel getParticleAttr getPluginResource getenv getpid glRender '\\n      + 'glRenderEditor globalStitch gmatch goal gotoBindPose grabColor gradientControl '\\n      + 'gradientControlNoAttr graphDollyCtx graphSelectContext graphTrackCtx gravity grid '\\n      + 'gridLayout group groupObjectsByName HfAddAttractorToAS HfAssignAS HfBuildEqualMap '\\n      + 'HfBuildFurFiles HfBuildFurImages HfCancelAFR HfConnectASToHF HfCreateAttractor '\\n      + 'HfDeleteAS HfEditAS HfPerformCreateAS HfRemoveAttractorFromAS HfSelectAttached '\\n      + 'HfSelectAttractors HfUnAssignAS hardenPointCurve hardware hardwareRenderPanel '\\n      + 'headsUpDisplay headsUpMessage help helpLine hermite hide hilite hitTest hotBox hotkey '\\n      + 'hotkeyCheck hsv_to_rgb hudButton hudSlider hudSliderButton hwReflectionMap hwRender '\\n      + 'hwRenderLoad hyperGraph hyperPanel hyperShade hypot iconTextButton iconTextCheckBox '\\n      + 'iconTextRadioButton iconTextRadioCollection iconTextScrollList iconTextStaticLabel '\\n      + 'ikHandle ikHandleCtx ikHandleDisplayScale ikSolver ikSplineHandleCtx ikSystem '\\n      + 'ikSystemInfo ikfkDisplayMethod illustratorCurves image imfPlugins inheritTransform '\\n      + 'insertJoint insertJointCtx insertKeyCtx insertKnotCurve insertKnotSurface instance '\\n      + 'instanceable instancer intField intFieldGrp intScrollBar intSlider intSliderGrp '\\n      + 'interToUI internalVar intersect iprEngine isAnimCurve isConnected isDirty isParentOf '\\n      + 'isSameObject isTrue isValidObjectName isValidString isValidUiName isolateSelect '\\n      + 'itemFilter itemFilterAttr itemFilterRender itemFilterType joint jointCluster jointCtx '\\n      + 'jointDisplayScale jointLattice keyTangent keyframe keyframeOutliner '\\n      + 'keyframeRegionCurrentTimeCtx keyframeRegionDirectKeyCtx keyframeRegionDollyCtx '\\n      + 'keyframeRegionInsertKeyCtx keyframeRegionMoveKeyCtx keyframeRegionScaleKeyCtx '\\n      + 'keyframeRegionSelectKeyCtx keyframeRegionSetKeyCtx keyframeRegionTrackCtx '\\n      + 'keyframeStats lassoContext lattice latticeDeformKeyCtx launch launchImageEditor '\\n      + 'layerButton layeredShaderPort layeredTexturePort layout layoutDialog lightList '\\n      + 'lightListEditor lightListPanel lightlink lineIntersection linearPrecision linstep '\\n      + 'listAnimatable listAttr listCameras listConnections listDeviceAttachments listHistory '\\n      + 'listInputDeviceAxes listInputDeviceButtons listInputDevices listMenuAnnotation '\\n      + 'listNodeTypes listPanelCategories listRelatives listSets listTransforms '\\n      + 'listUnselected listerEditor loadFluid loadNewShelf loadPlugin '\\n      + 'loadPluginLanguageResources loadPrefObjects localizedPanelLabel lockNode loft log '\\n      + 'longNameOf lookThru ls lsThroughFilter lsType lsUI Mayatomr mag makeIdentity makeLive '\\n      + 'makePaintable makeRoll makeSingleSurface makeTubeOn makebot manipMoveContext '\\n      + 'manipMoveLimitsCtx manipOptions manipRotateContext manipRotateLimitsCtx '\\n      + 'manipScaleContext manipScaleLimitsCtx marker match max memory menu menuBarLayout '\\n      + 'menuEditor menuItem menuItemToShelf menuSet menuSetPref messageLine min minimizeApp '\\n      + 'mirrorJoint modelCurrentTimeCtx modelEditor modelPanel mouse movIn movOut move '\\n      + 'moveIKtoFK moveKeyCtx moveVertexAlongDirection multiProfileBirailSurface mute '\\n      + 'nParticle nameCommand nameField namespace namespaceInfo newPanelItems newton nodeCast '\\n      + 'nodeIconButton nodeOutliner nodePreset nodeType noise nonLinear normalConstraint '\\n      + 'normalize nurbsBoolean nurbsCopyUVSet nurbsCube nurbsEditUV nurbsPlane nurbsSelect '\\n      + 'nurbsSquare nurbsToPoly nurbsToPolygonsPref nurbsToSubdiv nurbsToSubdivPref '\\n      + 'nurbsUVSet nurbsViewDirectionVector objExists objectCenter objectLayer objectType '\\n      + 'objectTypeUI obsoleteProc oceanNurbsPreviewPlane offsetCurve offsetCurveOnSurface '\\n      + 'offsetSurface openGLExtension openMayaPref optionMenu optionMenuGrp optionVar orbit '\\n      + 'orbitCtx orientConstraint outlinerEditor outlinerPanel overrideModifier '\\n      + 'paintEffectsDisplay pairBlend palettePort paneLayout panel panelConfiguration '\\n      + 'panelHistory paramDimContext paramDimension paramLocator parent parentConstraint '\\n      + 'particle particleExists particleInstancer particleRenderInfo partition pasteKey '\\n      + 'pathAnimation pause pclose percent performanceOptions pfxstrokes pickWalk picture '\\n      + 'pixelMove planarSrf plane play playbackOptions playblast plugAttr plugNode pluginInfo '\\n      + 'pluginResourceUtil pointConstraint pointCurveConstraint pointLight pointMatrixMult '\\n      + 'pointOnCurve pointOnSurface pointPosition poleVectorConstraint polyAppend '\\n      + 'polyAppendFacetCtx polyAppendVertex polyAutoProjection polyAverageNormal '\\n      + 'polyAverageVertex polyBevel polyBlendColor polyBlindData polyBoolOp polyBridgeEdge '\\n      + 'polyCacheMonitor polyCheck polyChipOff polyClipboard polyCloseBorder polyCollapseEdge '\\n      + 'polyCollapseFacet polyColorBlindData polyColorDel polyColorPerVertex polyColorSet '\\n      + 'polyCompare polyCone polyCopyUV polyCrease polyCreaseCtx polyCreateFacet '\\n      + 'polyCreateFacetCtx polyCube polyCut polyCutCtx polyCylinder polyCylindricalProjection '\\n      + 'polyDelEdge polyDelFacet polyDelVertex polyDuplicateAndConnect polyDuplicateEdge '\\n      + 'polyEditUV polyEditUVShell polyEvaluate polyExtrudeEdge polyExtrudeFacet '\\n      + 'polyExtrudeVertex polyFlipEdge polyFlipUV polyForceUV polyGeoSampler polyHelix '\\n      + 'polyInfo polyInstallAction polyLayoutUV polyListComponentConversion polyMapCut '\\n      + 'polyMapDel polyMapSew polyMapSewMove polyMergeEdge polyMergeEdgeCtx polyMergeFacet '\\n      + 'polyMergeFacetCtx polyMergeUV polyMergeVertex polyMirrorFace polyMoveEdge '\\n      + 'polyMoveFacet polyMoveFacetUV polyMoveUV polyMoveVertex polyNormal polyNormalPerVertex '\\n      + 'polyNormalizeUV polyOptUvs polyOptions polyOutput polyPipe polyPlanarProjection '\\n      + 'polyPlane polyPlatonicSolid polyPoke polyPrimitive polyPrism polyProjection '\\n      + 'polyPyramid polyQuad polyQueryBlindData polyReduce polySelect polySelectConstraint '\\n      + 'polySelectConstraintMonitor polySelectCtx polySelectEditCtx polySeparate '\\n      + 'polySetToFaceNormal polySewEdge polyShortestPathCtx polySmooth polySoftEdge '\\n      + 'polySphere polySphericalProjection polySplit polySplitCtx polySplitEdge polySplitRing '\\n      + 'polySplitVertex polyStraightenUVBorder polySubdivideEdge polySubdivideFacet '\\n      + 'polyToSubdiv polyTorus polyTransfer polyTriangulate polyUVSet polyUnite polyWedgeFace '\\n      + 'popen popupMenu pose pow preloadRefEd print progressBar progressWindow projFileViewer '\\n      + 'projectCurve projectTangent projectionContext projectionManip promptDialog propModCtx '\\n      + 'propMove psdChannelOutliner psdEditTextureFile psdExport psdTextureFile putenv pwd '\\n      + 'python querySubdiv quit rad_to_deg radial radioButton radioButtonGrp radioCollection '\\n      + 'radioMenuItemCollection rampColorPort rand randomizeFollicles randstate rangeControl '\\n      + 'readTake rebuildCurve rebuildSurface recordAttr recordDevice redo reference '\\n      + 'referenceEdit referenceQuery refineSubdivSelectionList refresh refreshAE '\\n      + 'registerPluginResource rehash reloadImage removeJoint removeMultiInstance '\\n      + 'removePanelCategory rename renameAttr renameSelectionList renameUI render '\\n      + 'renderGlobalsNode renderInfo renderLayerButton renderLayerParent '\\n      + 'renderLayerPostProcess renderLayerUnparent renderManip renderPartition '\\n      + 'renderQualityNode renderSettings renderThumbnailUpdate renderWindowEditor '\\n      + 'renderWindowSelectContext renderer reorder reorderDeformers requires reroot '\\n      + 'resampleFluid resetAE resetPfxToPolyCamera resetTool resolutionNode retarget '\\n      + 'reverseCurve reverseSurface revolve rgb_to_hsv rigidBody rigidSolver roll rollCtx '\\n      + 'rootOf rot rotate rotationInterpolation roundConstantRadius rowColumnLayout rowLayout '\\n      + 'runTimeCommand runup sampleImage saveAllShelves saveAttrPreset saveFluid saveImage '\\n      + 'saveInitialState saveMenu savePrefObjects savePrefs saveShelf saveToolSettings scale '\\n      + 'scaleBrushBrightness scaleComponents scaleConstraint scaleKey scaleKeyCtx sceneEditor '\\n      + 'sceneUIReplacement scmh scriptCtx scriptEditorInfo scriptJob scriptNode scriptTable '\\n      + 'scriptToShelf scriptedPanel scriptedPanelType scrollField scrollLayout sculpt '\\n      + 'searchPathArray seed selLoadSettings select selectContext selectCurveCV selectKey '\\n      + 'selectKeyCtx selectKeyframeRegionCtx selectMode selectPref selectPriority selectType '\\n      + 'selectedNodes selectionConnection separator setAttr setAttrEnumResource '\\n      + 'setAttrMapping setAttrNiceNameResource setConstraintRestPosition '\\n      + 'setDefaultShadingGroup setDrivenKeyframe setDynamic setEditCtx setEditor setFluidAttr '\\n      + 'setFocus setInfinity setInputDeviceMapping setKeyCtx setKeyPath setKeyframe '\\n      + 'setKeyframeBlendshapeTargetWts setMenuMode setNodeNiceNameResource setNodeTypeFlag '\\n      + 'setParent setParticleAttr setPfxToPolyCamera setPluginResource setProject '\\n      + 'setStampDensity setStartupMessage setState setToolTo setUITemplate setXformManip sets '\\n      + 'shadingConnection shadingGeometryRelCtx shadingLightRelCtx shadingNetworkCompare '\\n      + 'shadingNode shapeCompare shelfButton shelfLayout shelfTabLayout shellField '\\n      + 'shortNameOf showHelp showHidden showManipCtx showSelectionInTitle '\\n      + 'showShadingGroupAttrEditor showWindow sign simplify sin singleProfileBirailSurface '\\n      + 'size sizeBytes skinCluster skinPercent smoothCurve smoothTangentSurface smoothstep '\\n      + 'snap2to2 snapKey snapMode snapTogetherCtx snapshot soft softMod softModCtx sort sound '\\n      + 'soundControl source spaceLocator sphere sphrand spotLight spotLightPreviewPort '\\n      + 'spreadSheetEditor spring sqrt squareSurface srtContext stackTrace startString '\\n      + 'startsWith stitchAndExplodeShell stitchSurface stitchSurfacePoints strcmp '\\n      + 'stringArrayCatenate stringArrayContains stringArrayCount stringArrayInsertAtIndex '\\n      + 'stringArrayIntersector stringArrayRemove stringArrayRemoveAtIndex '\\n      + 'stringArrayRemoveDuplicates stringArrayRemoveExact stringArrayToString '\\n      + 'stringToStringArray strip stripPrefixFromName stroke subdAutoProjection '\\n      + 'subdCleanTopology subdCollapse subdDuplicateAndConnect subdEditUV '\\n      + 'subdListComponentConversion subdMapCut subdMapSewMove subdMatchTopology subdMirror '\\n      + 'subdToBlind subdToPoly subdTransferUVsToCache subdiv subdivCrease '\\n      + 'subdivDisplaySmoothness substitute substituteAllString substituteGeometry substring '\\n      + 'surface surfaceSampler surfaceShaderList swatchDisplayPort switchTable symbolButton '\\n      + 'symbolCheckBox sysFile system tabLayout tan tangentConstraint texLatticeDeformContext '\\n      + 'texManipContext texMoveContext texMoveUVShellContext texRotateContext texScaleContext '\\n      + 'texSelectContext texSelectShortestPathCtx texSmudgeUVContext texWinToolCtx text '\\n      + 'textCurves textField textFieldButtonGrp textFieldGrp textManip textScrollList '\\n      + 'textToShelf textureDisplacePlane textureHairColor texturePlacementContext '\\n      + 'textureWindow threadCount threePointArcCtx timeControl timePort timerX toNativePath '\\n      + 'toggle toggleAxis toggleWindowVisibility tokenize tokenizeList tolerance tolower '\\n      + 'toolButton toolCollection toolDropped toolHasOptions toolPropertyWindow torus toupper '\\n      + 'trace track trackCtx transferAttributes transformCompare transformLimits translator '\\n      + 'trim trunc truncateFluidCache truncateHairCache tumble tumbleCtx turbulence '\\n      + 'twoPointArcCtx uiRes uiTemplate unassignInputDevice undo undoInfo ungroup uniform unit '\\n      + 'unloadPlugin untangleUV untitledFileName untrim upAxis updateAE userCtx uvLink '\\n      + 'uvSnapshot validateShelfName vectorize view2dToolCtx viewCamera viewClipPlane '\\n      + 'viewFit viewHeadOn viewLookAt viewManip viewPlace viewSet visor volumeAxis vortex '\\n      + 'waitCursor warning webBrowser webBrowserPrefs whatIs window windowPref wire '\\n      + 'wireContext workspace wrinkle wrinkleContext writeTake xbmLangPathList xform',\\n    illegal: '</',\\n    contains: [\\n      hljs.C_NUMBER_MODE,\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'string',\\n        begin: '`',\\n        end: '`',\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      },\\n      { // eats variables\\n        begin: /[$%@](\\\\^\\\\w\\\\b|#\\\\w+|[^\\\\s\\\\w{]|\\\\{\\\\w+\\\\}|\\\\w+)/ },\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = mel;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/mel.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/mercury.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/mercury.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Mercury\\nAuthor: mucaho <mkucko@gmail.com>\\nDescription: Mercury is a logic/functional programming language which combines the clarity and expressiveness of declarative programming with advanced static analysis and error detection features.\\nWebsite: https://www.mercurylang.org\\n*/\\n\\nfunction mercury(hljs) {\\n  const KEYWORDS = {\\n    keyword:\\n      'module use_module import_module include_module end_module initialise '\\n      + 'mutable initialize finalize finalise interface implementation pred '\\n      + 'mode func type inst solver any_pred any_func is semidet det nondet '\\n      + 'multi erroneous failure cc_nondet cc_multi typeclass instance where '\\n      + 'pragma promise external trace atomic or_else require_complete_switch '\\n      + 'require_det require_semidet require_multi require_nondet '\\n      + 'require_cc_multi require_cc_nondet require_erroneous require_failure',\\n    meta:\\n      // pragma\\n      'inline no_inline type_spec source_file fact_table obsolete memo '\\n      + 'loop_check minimal_model terminates does_not_terminate '\\n      + 'check_termination promise_equivalent_clauses '\\n      // preprocessor\\n      + 'foreign_proc foreign_decl foreign_code foreign_type '\\n      + 'foreign_import_module foreign_export_enum foreign_export '\\n      + 'foreign_enum may_call_mercury will_not_call_mercury thread_safe '\\n      + 'not_thread_safe maybe_thread_safe promise_pure promise_semipure '\\n      + 'tabled_for_io local untrailed trailed attach_to_io_state '\\n      + 'can_pass_as_mercury_type stable will_not_throw_exception '\\n      + 'may_modify_trail will_not_modify_trail may_duplicate '\\n      + 'may_not_duplicate affects_liveness does_not_affect_liveness '\\n      + 'doesnt_affect_liveness no_sharing unknown_sharing sharing',\\n    built_in:\\n      'some all not if then else true fail false try catch catch_any '\\n      + 'semidet_true semidet_false semidet_fail impure_true impure semipure'\\n  };\\n\\n  const COMMENT = hljs.COMMENT('%', '$');\\n\\n  const NUMCODE = {\\n    className: 'number',\\n    begin: \\\"0'.\\\\\\\\|0[box][0-9a-fA-F]*\\\"\\n  };\\n\\n  const ATOM = hljs.inherit(hljs.APOS_STRING_MODE, { relevance: 0 });\\n  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { relevance: 0 });\\n  const STRING_FMT = {\\n    className: 'subst',\\n    begin: '\\\\\\\\\\\\\\\\[abfnrtv]\\\\\\\\|\\\\\\\\\\\\\\\\x[0-9a-fA-F]*\\\\\\\\\\\\\\\\\\\\\\\\|%[-+# *.0-9]*[dioxXucsfeEgGp]',\\n    relevance: 0\\n  };\\n  STRING.contains = STRING.contains.slice(); // we need our own copy of contains\\n  STRING.contains.push(STRING_FMT);\\n\\n  const IMPLICATION = {\\n    className: 'built_in',\\n    variants: [\\n      { begin: '<=>' },\\n      {\\n        begin: '<=',\\n        relevance: 0\\n      },\\n      {\\n        begin: '=>',\\n        relevance: 0\\n      },\\n      { begin: '/\\\\\\\\\\\\\\\\' },\\n      { begin: '\\\\\\\\\\\\\\\\/' }\\n    ]\\n  };\\n\\n  const HEAD_BODY_CONJUNCTION = {\\n    className: 'built_in',\\n    variants: [\\n      { begin: ':-\\\\\\\\|-->' },\\n      {\\n        begin: '=',\\n        relevance: 0\\n      }\\n    ]\\n  };\\n\\n  return {\\n    name: 'Mercury',\\n    aliases: [\\n      'm',\\n      'moo'\\n    ],\\n    keywords: KEYWORDS,\\n    contains: [\\n      IMPLICATION,\\n      HEAD_BODY_CONJUNCTION,\\n      COMMENT,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      NUMCODE,\\n      hljs.NUMBER_MODE,\\n      ATOM,\\n      STRING,\\n      { // relevance booster\\n        begin: /:-/ },\\n      { // relevance booster\\n        begin: /\\\\.$/ }\\n    ]\\n  };\\n}\\n\\nmodule.exports = mercury;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/mercury.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/mipsasm.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/mipsasm.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: MIPS Assembly\\nAuthor: Nebuleon Fumika <nebuleon.fumika@gmail.com>\\nDescription: MIPS Assembly (up to MIPS32R2)\\nWebsite: https://en.wikipedia.org/wiki/MIPS_architecture\\nCategory: assembler\\n*/\\n\\nfunction mipsasm(hljs) {\\n  // local labels: %?[FB]?[AT]?\\\\d{1,2}\\\\w+\\n  return {\\n    name: 'MIPS Assembly',\\n    case_insensitive: true,\\n    aliases: [ 'mips' ],\\n    keywords: {\\n      $pattern: '\\\\\\\\.?' + hljs.IDENT_RE,\\n      meta:\\n        // GNU preprocs\\n        '.2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .ltorg ',\\n      built_in:\\n        '$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 ' // integer registers\\n        + '$16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 ' // integer registers\\n        + 'zero at v0 v1 a0 a1 a2 a3 a4 a5 a6 a7 ' // integer register aliases\\n        + 't0 t1 t2 t3 t4 t5 t6 t7 t8 t9 s0 s1 s2 s3 s4 s5 s6 s7 s8 ' // integer register aliases\\n        + 'k0 k1 gp sp fp ra ' // integer register aliases\\n        + '$f0 $f1 $f2 $f2 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15 ' // floating-point registers\\n        + '$f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 ' // floating-point registers\\n        + 'Context Random EntryLo0 EntryLo1 Context PageMask Wired EntryHi ' // Coprocessor 0 registers\\n        + 'HWREna BadVAddr Count Compare SR IntCtl SRSCtl SRSMap Cause EPC PRId ' // Coprocessor 0 registers\\n        + 'EBase Config Config1 Config2 Config3 LLAddr Debug DEPC DESAVE CacheErr ' // Coprocessor 0 registers\\n        + 'ECC ErrorEPC TagLo DataLo TagHi DataHi WatchLo WatchHi PerfCtl PerfCnt ' // Coprocessor 0 registers\\n    },\\n    contains: [\\n      {\\n        className: 'keyword',\\n        begin: '\\\\\\\\b(' // mnemonics\\n            // 32-bit integer instructions\\n            + 'addi?u?|andi?|b(al)?|beql?|bgez(al)?l?|bgtzl?|blezl?|bltz(al)?l?|'\\n            + 'bnel?|cl[oz]|divu?|ext|ins|j(al)?|jalr(\\\\\\\\.hb)?|jr(\\\\\\\\.hb)?|lbu?|lhu?|'\\n            + 'll|lui|lw[lr]?|maddu?|mfhi|mflo|movn|movz|move|msubu?|mthi|mtlo|mul|'\\n            + 'multu?|nop|nor|ori?|rotrv?|sb|sc|se[bh]|sh|sllv?|slti?u?|srav?|'\\n            + 'srlv?|subu?|sw[lr]?|xori?|wsbh|'\\n            // floating-point instructions\\n            + 'abs\\\\\\\\.[sd]|add\\\\\\\\.[sd]|alnv.ps|bc1[ft]l?|'\\n            + 'c\\\\\\\\.(s?f|un|u?eq|[ou]lt|[ou]le|ngle?|seq|l[et]|ng[et])\\\\\\\\.[sd]|'\\n            + '(ceil|floor|round|trunc)\\\\\\\\.[lw]\\\\\\\\.[sd]|cfc1|cvt\\\\\\\\.d\\\\\\\\.[lsw]|'\\n            + 'cvt\\\\\\\\.l\\\\\\\\.[dsw]|cvt\\\\\\\\.ps\\\\\\\\.s|cvt\\\\\\\\.s\\\\\\\\.[dlw]|cvt\\\\\\\\.s\\\\\\\\.p[lu]|cvt\\\\\\\\.w\\\\\\\\.[dls]|'\\n            + 'div\\\\\\\\.[ds]|ldx?c1|luxc1|lwx?c1|madd\\\\\\\\.[sd]|mfc1|mov[fntz]?\\\\\\\\.[ds]|'\\n            + 'msub\\\\\\\\.[sd]|mth?c1|mul\\\\\\\\.[ds]|neg\\\\\\\\.[ds]|nmadd\\\\\\\\.[ds]|nmsub\\\\\\\\.[ds]|'\\n            + 'p[lu][lu]\\\\\\\\.ps|recip\\\\\\\\.fmt|r?sqrt\\\\\\\\.[ds]|sdx?c1|sub\\\\\\\\.[ds]|suxc1|'\\n            + 'swx?c1|'\\n            // system control instructions\\n            + 'break|cache|d?eret|[de]i|ehb|mfc0|mtc0|pause|prefx?|rdhwr|'\\n            + 'rdpgpr|sdbbp|ssnop|synci?|syscall|teqi?|tgei?u?|tlb(p|r|w[ir])|'\\n            + 'tlti?u?|tnei?|wait|wrpgpr'\\n        + ')',\\n        end: '\\\\\\\\s'\\n      },\\n      // lines ending with ; or # aren't really comments, probably auto-detect fail\\n      hljs.COMMENT('[;#](?!\\\\\\\\s*$)', '$'),\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'string',\\n        begin: '\\\\'',\\n        end: '[^\\\\\\\\\\\\\\\\]\\\\'',\\n        relevance: 0\\n      },\\n      {\\n        className: 'title',\\n        begin: '\\\\\\\\|',\\n        end: '\\\\\\\\|',\\n        illegal: '\\\\\\\\n',\\n        relevance: 0\\n      },\\n      {\\n        className: 'number',\\n        variants: [\\n          { // hex\\n            begin: '0x[0-9a-f]+' },\\n          { // bare number\\n            begin: '\\\\\\\\b-?\\\\\\\\d+' }\\n        ],\\n        relevance: 0\\n      },\\n      {\\n        className: 'symbol',\\n        variants: [\\n          { // GNU MIPS syntax\\n            begin: '^\\\\\\\\s*[a-z_\\\\\\\\.\\\\\\\\$][a-z0-9_\\\\\\\\.\\\\\\\\$]+:' },\\n          { // numbered local labels\\n            begin: '^\\\\\\\\s*[0-9]+:' },\\n          { // number local label reference (backwards, forwards)\\n            begin: '[0-9]+[bf]' }\\n        ],\\n        relevance: 0\\n      }\\n    ],\\n    // forward slashes are not allowed\\n    illegal: /\\\\//\\n  };\\n}\\n\\nmodule.exports = mipsasm;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/mipsasm.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/mizar.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/mizar.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Mizar\\nDescription: The Mizar Language is a formal language derived from the mathematical vernacular.\\nAuthor: Kelley van Evert <kelleyvanevert@gmail.com>\\nWebsite: http://mizar.org/language/\\nCategory: scientific\\n*/\\n\\nfunction mizar(hljs) {\\n  return {\\n    name: 'Mizar',\\n    keywords:\\n      'environ vocabularies notations constructors definitions '\\n      + 'registrations theorems schemes requirements begin end definition '\\n      + 'registration cluster existence pred func defpred deffunc theorem '\\n      + 'proof let take assume then thus hence ex for st holds consider '\\n      + 'reconsider such that and in provided of as from be being by means '\\n      + 'equals implies iff redefine define now not or attr is mode '\\n      + 'suppose per cases set thesis contradiction scheme reserve struct '\\n      + 'correctness compatibility coherence symmetry assymetry '\\n      + 'reflexivity irreflexivity connectedness uniqueness commutativity '\\n      + 'idempotence involutiveness projectivity',\\n    contains: [ hljs.COMMENT('::', '$') ]\\n  };\\n}\\n\\nmodule.exports = mizar;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/mizar.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/mojolicious.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/mojolicious.js ***!\n  \\****************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Mojolicious\\nRequires: xml.js, perl.js\\nAuthor: Dotan Dimet <dotan@corky.net>\\nDescription: Mojolicious .ep (Embedded Perl) templates\\nWebsite: https://mojolicious.org\\nCategory: template\\n*/\\nfunction mojolicious(hljs) {\\n  return {\\n    name: 'Mojolicious',\\n    subLanguage: 'xml',\\n    contains: [\\n      {\\n        className: 'meta',\\n        begin: '^__(END|DATA)__$'\\n      },\\n      // mojolicious line\\n      {\\n        begin: \\\"^\\\\\\\\s*%{1,2}={0,2}\\\",\\n        end: '$',\\n        subLanguage: 'perl'\\n      },\\n      // mojolicious block\\n      {\\n        begin: \\\"<%{1,2}={0,2}\\\",\\n        end: \\\"={0,1}%>\\\",\\n        subLanguage: 'perl',\\n        excludeBegin: true,\\n        excludeEnd: true\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = mojolicious;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/mojolicious.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/monkey.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/monkey.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Monkey\\nDescription: Monkey2 is an easy to use, cross platform, games oriented programming language from Blitz Research.\\nAuthor: Arthur Bikmullin <devolonter@gmail.com>\\nWebsite: https://blitzresearch.itch.io/monkey2\\n*/\\n\\nfunction monkey(hljs) {\\n  const NUMBER = {\\n    className: 'number',\\n    relevance: 0,\\n    variants: [\\n      { begin: '[$][a-fA-F0-9]+' },\\n      hljs.NUMBER_MODE\\n    ]\\n  };\\n  const FUNC_DEFINITION = {\\n    variants: [\\n      { match: [\\n        /(function|method)/,\\n        /\\\\s+/,\\n        hljs.UNDERSCORE_IDENT_RE,\\n      ] },\\n    ],\\n    scope: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.function\\\"\\n    }\\n  };\\n  const CLASS_DEFINITION = {\\n    variants: [\\n      { match: [\\n        /(class|interface|extends|implements)/,\\n        /\\\\s+/,\\n        hljs.UNDERSCORE_IDENT_RE,\\n      ] },\\n    ],\\n    scope: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.class\\\"\\n    }\\n  };\\n  const BUILT_INS = [\\n    \\\"DebugLog\\\",\\n    \\\"DebugStop\\\",\\n    \\\"Error\\\",\\n    \\\"Print\\\",\\n    \\\"ACos\\\",\\n    \\\"ACosr\\\",\\n    \\\"ASin\\\",\\n    \\\"ASinr\\\",\\n    \\\"ATan\\\",\\n    \\\"ATan2\\\",\\n    \\\"ATan2r\\\",\\n    \\\"ATanr\\\",\\n    \\\"Abs\\\",\\n    \\\"Abs\\\",\\n    \\\"Ceil\\\",\\n    \\\"Clamp\\\",\\n    \\\"Clamp\\\",\\n    \\\"Cos\\\",\\n    \\\"Cosr\\\",\\n    \\\"Exp\\\",\\n    \\\"Floor\\\",\\n    \\\"Log\\\",\\n    \\\"Max\\\",\\n    \\\"Max\\\",\\n    \\\"Min\\\",\\n    \\\"Min\\\",\\n    \\\"Pow\\\",\\n    \\\"Sgn\\\",\\n    \\\"Sgn\\\",\\n    \\\"Sin\\\",\\n    \\\"Sinr\\\",\\n    \\\"Sqrt\\\",\\n    \\\"Tan\\\",\\n    \\\"Tanr\\\",\\n    \\\"Seed\\\",\\n    \\\"PI\\\",\\n    \\\"HALFPI\\\",\\n    \\\"TWOPI\\\"\\n  ];\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    \\\"null\\\"\\n  ];\\n  const KEYWORDS = [\\n    \\\"public\\\",\\n    \\\"private\\\",\\n    \\\"property\\\",\\n    \\\"continue\\\",\\n    \\\"exit\\\",\\n    \\\"extern\\\",\\n    \\\"new\\\",\\n    \\\"try\\\",\\n    \\\"catch\\\",\\n    \\\"eachin\\\",\\n    \\\"not\\\",\\n    \\\"abstract\\\",\\n    \\\"final\\\",\\n    \\\"select\\\",\\n    \\\"case\\\",\\n    \\\"default\\\",\\n    \\\"const\\\",\\n    \\\"local\\\",\\n    \\\"global\\\",\\n    \\\"field\\\",\\n    \\\"end\\\",\\n    \\\"if\\\",\\n    \\\"then\\\",\\n    \\\"else\\\",\\n    \\\"elseif\\\",\\n    \\\"endif\\\",\\n    \\\"while\\\",\\n    \\\"wend\\\",\\n    \\\"repeat\\\",\\n    \\\"until\\\",\\n    \\\"forever\\\",\\n    \\\"for\\\",\\n    \\\"to\\\",\\n    \\\"step\\\",\\n    \\\"next\\\",\\n    \\\"return\\\",\\n    \\\"module\\\",\\n    \\\"inline\\\",\\n    \\\"throw\\\",\\n    \\\"import\\\",\\n    // not positive, but these are not literals\\n    \\\"and\\\",\\n    \\\"or\\\",\\n    \\\"shl\\\",\\n    \\\"shr\\\",\\n    \\\"mod\\\"\\n  ];\\n\\n  return {\\n    name: 'Monkey',\\n    case_insensitive: true,\\n    keywords: {\\n      keyword: KEYWORDS,\\n      built_in: BUILT_INS,\\n      literal: LITERALS\\n    },\\n    illegal: /\\\\/\\\\*/,\\n    contains: [\\n      hljs.COMMENT('#rem', '#end'),\\n      hljs.COMMENT(\\n        \\\"'\\\",\\n        '$',\\n        { relevance: 0 }\\n      ),\\n      FUNC_DEFINITION,\\n      CLASS_DEFINITION,\\n      {\\n        className: 'variable.language',\\n        begin: /\\\\b(self|super)\\\\b/\\n      },\\n      {\\n        className: 'meta',\\n        begin: /\\\\s*#/,\\n        end: '$',\\n        keywords: { keyword: 'if else elseif endif end then' }\\n      },\\n      {\\n        match: [\\n          /^\\\\s*/,\\n          /strict\\\\b/\\n        ],\\n        scope: { 2: \\\"meta\\\" }\\n      },\\n      {\\n        beginKeywords: 'alias',\\n        end: '=',\\n        contains: [ hljs.UNDERSCORE_TITLE_MODE ]\\n      },\\n      hljs.QUOTE_STRING_MODE,\\n      NUMBER\\n    ]\\n  };\\n}\\n\\nmodule.exports = monkey;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/monkey.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/moonscript.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/moonscript.js ***!\n  \\***************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: MoonScript\\nAuthor: Billy Quith <chinbillybilbo@gmail.com>\\nDescription: MoonScript is a programming language that transcompiles to Lua.\\nOrigin: coffeescript.js\\nWebsite: http://moonscript.org/\\nCategory: scripting\\n*/\\n\\nfunction moonscript(hljs) {\\n  const KEYWORDS = {\\n    keyword:\\n      // Moonscript keywords\\n      'if then not for in while do return else elseif break continue switch and or '\\n      + 'unless when class extends super local import export from using',\\n    literal:\\n      'true false nil',\\n    built_in:\\n      '_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load '\\n      + 'loadfile loadstring module next pairs pcall print rawequal rawget rawset require '\\n      + 'select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug '\\n      + 'io math os package string table'\\n  };\\n  const JS_IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\\n  const SUBST = {\\n    className: 'subst',\\n    begin: /#\\\\{/,\\n    end: /\\\\}/,\\n    keywords: KEYWORDS\\n  };\\n  const EXPRESSIONS = [\\n    hljs.inherit(hljs.C_NUMBER_MODE,\\n      { starts: {\\n        end: '(\\\\\\\\s*/)?',\\n        relevance: 0\\n      } }), // a number tries to eat the following slash to prevent treating it as a regexp\\n    {\\n      className: 'string',\\n      variants: [\\n        {\\n          begin: /'/,\\n          end: /'/,\\n          contains: [ hljs.BACKSLASH_ESCAPE ]\\n        },\\n        {\\n          begin: /\\\"/,\\n          end: /\\\"/,\\n          contains: [\\n            hljs.BACKSLASH_ESCAPE,\\n            SUBST\\n          ]\\n        }\\n      ]\\n    },\\n    {\\n      className: 'built_in',\\n      begin: '@__' + hljs.IDENT_RE\\n    },\\n    { begin: '@' + hljs.IDENT_RE // relevance booster on par with CoffeeScript\\n    },\\n    { begin: hljs.IDENT_RE + '\\\\\\\\\\\\\\\\' + hljs.IDENT_RE // inst\\\\method\\n    }\\n  ];\\n  SUBST.contains = EXPRESSIONS;\\n\\n  const TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE });\\n  const POSSIBLE_PARAMS_RE = '(\\\\\\\\(.*\\\\\\\\)\\\\\\\\s*)?\\\\\\\\B[-=]>';\\n  const PARAMS = {\\n    className: 'params',\\n    begin: '\\\\\\\\([^\\\\\\\\(]',\\n    returnBegin: true,\\n    /* We need another contained nameless mode to not have every nested\\n    pair of parens to be called \\\"params\\\" */\\n    contains: [\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        keywords: KEYWORDS,\\n        contains: [ 'self' ].concat(EXPRESSIONS)\\n      }\\n    ]\\n  };\\n\\n  return {\\n    name: 'MoonScript',\\n    aliases: [ 'moon' ],\\n    keywords: KEYWORDS,\\n    illegal: /\\\\/\\\\*/,\\n    contains: EXPRESSIONS.concat([\\n      hljs.COMMENT('--', '$'),\\n      {\\n        className: 'function', // function: -> =>\\n        begin: '^\\\\\\\\s*' + JS_IDENT_RE + '\\\\\\\\s*=\\\\\\\\s*' + POSSIBLE_PARAMS_RE,\\n        end: '[-=]>',\\n        returnBegin: true,\\n        contains: [\\n          TITLE,\\n          PARAMS\\n        ]\\n      },\\n      {\\n        begin: /[\\\\(,:=]\\\\s*/, // anonymous function start\\n        relevance: 0,\\n        contains: [\\n          {\\n            className: 'function',\\n            begin: POSSIBLE_PARAMS_RE,\\n            end: '[-=]>',\\n            returnBegin: true,\\n            contains: [ PARAMS ]\\n          }\\n        ]\\n      },\\n      {\\n        className: 'class',\\n        beginKeywords: 'class',\\n        end: '$',\\n        illegal: /[:=\\\"\\\\[\\\\]]/,\\n        contains: [\\n          {\\n            beginKeywords: 'extends',\\n            endsWithParent: true,\\n            illegal: /[:=\\\"\\\\[\\\\]]/,\\n            contains: [ TITLE ]\\n          },\\n          TITLE\\n        ]\\n      },\\n      {\\n        className: 'name', // table\\n        begin: JS_IDENT_RE + ':',\\n        end: ':',\\n        returnBegin: true,\\n        returnEnd: true,\\n        relevance: 0\\n      }\\n    ])\\n  };\\n}\\n\\nmodule.exports = moonscript;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/moonscript.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/n1ql.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/n1ql.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\n Language: N1QL\\n Author: Andres Täht <andres.taht@gmail.com>\\n Contributors: Rene Saarsoo <nene@triin.net>\\n Description: Couchbase query language\\n Website: https://www.couchbase.com/products/n1ql\\n */\\n\\nfunction n1ql(hljs) {\\n  // Taken from http://developer.couchbase.com/documentation/server/current/n1ql/n1ql-language-reference/reservedwords.html\\n  const KEYWORDS = [\\n    \\\"all\\\",\\n    \\\"alter\\\",\\n    \\\"analyze\\\",\\n    \\\"and\\\",\\n    \\\"any\\\",\\n    \\\"array\\\",\\n    \\\"as\\\",\\n    \\\"asc\\\",\\n    \\\"begin\\\",\\n    \\\"between\\\",\\n    \\\"binary\\\",\\n    \\\"boolean\\\",\\n    \\\"break\\\",\\n    \\\"bucket\\\",\\n    \\\"build\\\",\\n    \\\"by\\\",\\n    \\\"call\\\",\\n    \\\"case\\\",\\n    \\\"cast\\\",\\n    \\\"cluster\\\",\\n    \\\"collate\\\",\\n    \\\"collection\\\",\\n    \\\"commit\\\",\\n    \\\"connect\\\",\\n    \\\"continue\\\",\\n    \\\"correlate\\\",\\n    \\\"cover\\\",\\n    \\\"create\\\",\\n    \\\"database\\\",\\n    \\\"dataset\\\",\\n    \\\"datastore\\\",\\n    \\\"declare\\\",\\n    \\\"decrement\\\",\\n    \\\"delete\\\",\\n    \\\"derived\\\",\\n    \\\"desc\\\",\\n    \\\"describe\\\",\\n    \\\"distinct\\\",\\n    \\\"do\\\",\\n    \\\"drop\\\",\\n    \\\"each\\\",\\n    \\\"element\\\",\\n    \\\"else\\\",\\n    \\\"end\\\",\\n    \\\"every\\\",\\n    \\\"except\\\",\\n    \\\"exclude\\\",\\n    \\\"execute\\\",\\n    \\\"exists\\\",\\n    \\\"explain\\\",\\n    \\\"fetch\\\",\\n    \\\"first\\\",\\n    \\\"flatten\\\",\\n    \\\"for\\\",\\n    \\\"force\\\",\\n    \\\"from\\\",\\n    \\\"function\\\",\\n    \\\"grant\\\",\\n    \\\"group\\\",\\n    \\\"gsi\\\",\\n    \\\"having\\\",\\n    \\\"if\\\",\\n    \\\"ignore\\\",\\n    \\\"ilike\\\",\\n    \\\"in\\\",\\n    \\\"include\\\",\\n    \\\"increment\\\",\\n    \\\"index\\\",\\n    \\\"infer\\\",\\n    \\\"inline\\\",\\n    \\\"inner\\\",\\n    \\\"insert\\\",\\n    \\\"intersect\\\",\\n    \\\"into\\\",\\n    \\\"is\\\",\\n    \\\"join\\\",\\n    \\\"key\\\",\\n    \\\"keys\\\",\\n    \\\"keyspace\\\",\\n    \\\"known\\\",\\n    \\\"last\\\",\\n    \\\"left\\\",\\n    \\\"let\\\",\\n    \\\"letting\\\",\\n    \\\"like\\\",\\n    \\\"limit\\\",\\n    \\\"lsm\\\",\\n    \\\"map\\\",\\n    \\\"mapping\\\",\\n    \\\"matched\\\",\\n    \\\"materialized\\\",\\n    \\\"merge\\\",\\n    \\\"minus\\\",\\n    \\\"namespace\\\",\\n    \\\"nest\\\",\\n    \\\"not\\\",\\n    \\\"number\\\",\\n    \\\"object\\\",\\n    \\\"offset\\\",\\n    \\\"on\\\",\\n    \\\"option\\\",\\n    \\\"or\\\",\\n    \\\"order\\\",\\n    \\\"outer\\\",\\n    \\\"over\\\",\\n    \\\"parse\\\",\\n    \\\"partition\\\",\\n    \\\"password\\\",\\n    \\\"path\\\",\\n    \\\"pool\\\",\\n    \\\"prepare\\\",\\n    \\\"primary\\\",\\n    \\\"private\\\",\\n    \\\"privilege\\\",\\n    \\\"procedure\\\",\\n    \\\"public\\\",\\n    \\\"raw\\\",\\n    \\\"realm\\\",\\n    \\\"reduce\\\",\\n    \\\"rename\\\",\\n    \\\"return\\\",\\n    \\\"returning\\\",\\n    \\\"revoke\\\",\\n    \\\"right\\\",\\n    \\\"role\\\",\\n    \\\"rollback\\\",\\n    \\\"satisfies\\\",\\n    \\\"schema\\\",\\n    \\\"select\\\",\\n    \\\"self\\\",\\n    \\\"semi\\\",\\n    \\\"set\\\",\\n    \\\"show\\\",\\n    \\\"some\\\",\\n    \\\"start\\\",\\n    \\\"statistics\\\",\\n    \\\"string\\\",\\n    \\\"system\\\",\\n    \\\"then\\\",\\n    \\\"to\\\",\\n    \\\"transaction\\\",\\n    \\\"trigger\\\",\\n    \\\"truncate\\\",\\n    \\\"under\\\",\\n    \\\"union\\\",\\n    \\\"unique\\\",\\n    \\\"unknown\\\",\\n    \\\"unnest\\\",\\n    \\\"unset\\\",\\n    \\\"update\\\",\\n    \\\"upsert\\\",\\n    \\\"use\\\",\\n    \\\"user\\\",\\n    \\\"using\\\",\\n    \\\"validate\\\",\\n    \\\"value\\\",\\n    \\\"valued\\\",\\n    \\\"values\\\",\\n    \\\"via\\\",\\n    \\\"view\\\",\\n    \\\"when\\\",\\n    \\\"where\\\",\\n    \\\"while\\\",\\n    \\\"with\\\",\\n    \\\"within\\\",\\n    \\\"work\\\",\\n    \\\"xor\\\"\\n  ];\\n  // Taken from http://developer.couchbase.com/documentation/server/4.5/n1ql/n1ql-language-reference/literals.html\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    \\\"null\\\",\\n    \\\"missing|5\\\"\\n  ];\\n  // Taken from http://developer.couchbase.com/documentation/server/4.5/n1ql/n1ql-language-reference/functions.html\\n  const BUILT_INS = [\\n    \\\"array_agg\\\",\\n    \\\"array_append\\\",\\n    \\\"array_concat\\\",\\n    \\\"array_contains\\\",\\n    \\\"array_count\\\",\\n    \\\"array_distinct\\\",\\n    \\\"array_ifnull\\\",\\n    \\\"array_length\\\",\\n    \\\"array_max\\\",\\n    \\\"array_min\\\",\\n    \\\"array_position\\\",\\n    \\\"array_prepend\\\",\\n    \\\"array_put\\\",\\n    \\\"array_range\\\",\\n    \\\"array_remove\\\",\\n    \\\"array_repeat\\\",\\n    \\\"array_replace\\\",\\n    \\\"array_reverse\\\",\\n    \\\"array_sort\\\",\\n    \\\"array_sum\\\",\\n    \\\"avg\\\",\\n    \\\"count\\\",\\n    \\\"max\\\",\\n    \\\"min\\\",\\n    \\\"sum\\\",\\n    \\\"greatest\\\",\\n    \\\"least\\\",\\n    \\\"ifmissing\\\",\\n    \\\"ifmissingornull\\\",\\n    \\\"ifnull\\\",\\n    \\\"missingif\\\",\\n    \\\"nullif\\\",\\n    \\\"ifinf\\\",\\n    \\\"ifnan\\\",\\n    \\\"ifnanorinf\\\",\\n    \\\"naninf\\\",\\n    \\\"neginfif\\\",\\n    \\\"posinfif\\\",\\n    \\\"clock_millis\\\",\\n    \\\"clock_str\\\",\\n    \\\"date_add_millis\\\",\\n    \\\"date_add_str\\\",\\n    \\\"date_diff_millis\\\",\\n    \\\"date_diff_str\\\",\\n    \\\"date_part_millis\\\",\\n    \\\"date_part_str\\\",\\n    \\\"date_trunc_millis\\\",\\n    \\\"date_trunc_str\\\",\\n    \\\"duration_to_str\\\",\\n    \\\"millis\\\",\\n    \\\"str_to_millis\\\",\\n    \\\"millis_to_str\\\",\\n    \\\"millis_to_utc\\\",\\n    \\\"millis_to_zone_name\\\",\\n    \\\"now_millis\\\",\\n    \\\"now_str\\\",\\n    \\\"str_to_duration\\\",\\n    \\\"str_to_utc\\\",\\n    \\\"str_to_zone_name\\\",\\n    \\\"decode_json\\\",\\n    \\\"encode_json\\\",\\n    \\\"encoded_size\\\",\\n    \\\"poly_length\\\",\\n    \\\"base64\\\",\\n    \\\"base64_encode\\\",\\n    \\\"base64_decode\\\",\\n    \\\"meta\\\",\\n    \\\"uuid\\\",\\n    \\\"abs\\\",\\n    \\\"acos\\\",\\n    \\\"asin\\\",\\n    \\\"atan\\\",\\n    \\\"atan2\\\",\\n    \\\"ceil\\\",\\n    \\\"cos\\\",\\n    \\\"degrees\\\",\\n    \\\"e\\\",\\n    \\\"exp\\\",\\n    \\\"ln\\\",\\n    \\\"log\\\",\\n    \\\"floor\\\",\\n    \\\"pi\\\",\\n    \\\"power\\\",\\n    \\\"radians\\\",\\n    \\\"random\\\",\\n    \\\"round\\\",\\n    \\\"sign\\\",\\n    \\\"sin\\\",\\n    \\\"sqrt\\\",\\n    \\\"tan\\\",\\n    \\\"trunc\\\",\\n    \\\"object_length\\\",\\n    \\\"object_names\\\",\\n    \\\"object_pairs\\\",\\n    \\\"object_inner_pairs\\\",\\n    \\\"object_values\\\",\\n    \\\"object_inner_values\\\",\\n    \\\"object_add\\\",\\n    \\\"object_put\\\",\\n    \\\"object_remove\\\",\\n    \\\"object_unwrap\\\",\\n    \\\"regexp_contains\\\",\\n    \\\"regexp_like\\\",\\n    \\\"regexp_position\\\",\\n    \\\"regexp_replace\\\",\\n    \\\"contains\\\",\\n    \\\"initcap\\\",\\n    \\\"length\\\",\\n    \\\"lower\\\",\\n    \\\"ltrim\\\",\\n    \\\"position\\\",\\n    \\\"repeat\\\",\\n    \\\"replace\\\",\\n    \\\"rtrim\\\",\\n    \\\"split\\\",\\n    \\\"substr\\\",\\n    \\\"title\\\",\\n    \\\"trim\\\",\\n    \\\"upper\\\",\\n    \\\"isarray\\\",\\n    \\\"isatom\\\",\\n    \\\"isboolean\\\",\\n    \\\"isnumber\\\",\\n    \\\"isobject\\\",\\n    \\\"isstring\\\",\\n    \\\"type\\\",\\n    \\\"toarray\\\",\\n    \\\"toatom\\\",\\n    \\\"toboolean\\\",\\n    \\\"tonumber\\\",\\n    \\\"toobject\\\",\\n    \\\"tostring\\\"\\n  ];\\n\\n  return {\\n    name: 'N1QL',\\n    case_insensitive: true,\\n    contains: [\\n      {\\n        beginKeywords:\\n          'build create index delete drop explain infer|10 insert merge prepare select update upsert|10',\\n        end: /;/,\\n        keywords: {\\n          keyword: KEYWORDS,\\n          literal: LITERALS,\\n          built_in: BUILT_INS\\n        },\\n        contains: [\\n          {\\n            className: 'string',\\n            begin: '\\\\'',\\n            end: '\\\\'',\\n            contains: [ hljs.BACKSLASH_ESCAPE ]\\n          },\\n          {\\n            className: 'string',\\n            begin: '\\\"',\\n            end: '\\\"',\\n            contains: [ hljs.BACKSLASH_ESCAPE ]\\n          },\\n          {\\n            className: 'symbol',\\n            begin: '`',\\n            end: '`',\\n            contains: [ hljs.BACKSLASH_ESCAPE ]\\n          },\\n          hljs.C_NUMBER_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE\\n        ]\\n      },\\n      hljs.C_BLOCK_COMMENT_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = n1ql;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/n1ql.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/nestedtext.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/nestedtext.js ***!\n  \\***************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: NestedText\\nDescription: NestedText is a file format for holding data that is to be entered, edited, or viewed by people.\\nWebsite: https://nestedtext.org/\\nCategory: config\\n*/\\n\\n/** @type LanguageFn */\\nfunction nestedtext(hljs) {\\n  const NESTED = {\\n    match: [\\n      /^\\\\s*(?=\\\\S)/, // have to look forward here to avoid polynomial backtracking\\n      /[^:]+/,\\n      /:\\\\s*/,\\n      /$/\\n    ],\\n    className: {\\n      2: \\\"attribute\\\",\\n      3: \\\"punctuation\\\"\\n    }\\n  };\\n  const DICTIONARY_ITEM = {\\n    match: [\\n      /^\\\\s*(?=\\\\S)/, // have to look forward here to avoid polynomial backtracking\\n      /[^:]*[^: ]/,\\n      /[ ]*:/,\\n      /[ ]/,\\n      /.*$/\\n    ],\\n    className: {\\n      2: \\\"attribute\\\",\\n      3: \\\"punctuation\\\",\\n      5: \\\"string\\\"\\n    }\\n  };\\n  const STRING = {\\n    match: [\\n      /^\\\\s*/,\\n      />/,\\n      /[ ]/,\\n      /.*$/\\n    ],\\n    className: {\\n      2: \\\"punctuation\\\",\\n      4: \\\"string\\\"\\n    }\\n  };\\n  const LIST_ITEM = {\\n    variants: [\\n      { match: [\\n        /^\\\\s*/,\\n        /-/,\\n        /[ ]/,\\n        /.*$/\\n      ] },\\n      { match: [\\n        /^\\\\s*/,\\n        /-$/\\n      ] }\\n    ],\\n    className: {\\n      2: \\\"bullet\\\",\\n      4: \\\"string\\\"\\n    }\\n  };\\n\\n  return {\\n    name: 'Nested Text',\\n    aliases: [ 'nt' ],\\n    contains: [\\n      hljs.inherit(hljs.HASH_COMMENT_MODE, {\\n        begin: /^\\\\s*(?=#)/,\\n        excludeBegin: true\\n      }),\\n      LIST_ITEM,\\n      STRING,\\n      NESTED,\\n      DICTIONARY_ITEM\\n    ]\\n  };\\n}\\n\\nmodule.exports = nestedtext;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/nestedtext.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/nginx.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/nginx.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Nginx config\\nAuthor: Peter Leonov <gojpeg@yandex.ru>\\nContributors: Ivan Sagalaev <maniac@softwaremaniacs.org>\\nCategory: config, web\\nWebsite: https://www.nginx.com\\n*/\\n\\n/** @type LanguageFn */\\nfunction nginx(hljs) {\\n  const regex = hljs.regex;\\n  const VAR = {\\n    className: 'variable',\\n    variants: [\\n      { begin: /\\\\$\\\\d+/ },\\n      { begin: /\\\\$\\\\{\\\\w+\\\\}/ },\\n      { begin: regex.concat(/[$@]/, hljs.UNDERSCORE_IDENT_RE) }\\n    ]\\n  };\\n  const LITERALS = [\\n    \\\"on\\\",\\n    \\\"off\\\",\\n    \\\"yes\\\",\\n    \\\"no\\\",\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    \\\"none\\\",\\n    \\\"blocked\\\",\\n    \\\"debug\\\",\\n    \\\"info\\\",\\n    \\\"notice\\\",\\n    \\\"warn\\\",\\n    \\\"error\\\",\\n    \\\"crit\\\",\\n    \\\"select\\\",\\n    \\\"break\\\",\\n    \\\"last\\\",\\n    \\\"permanent\\\",\\n    \\\"redirect\\\",\\n    \\\"kqueue\\\",\\n    \\\"rtsig\\\",\\n    \\\"epoll\\\",\\n    \\\"poll\\\",\\n    \\\"/dev/poll\\\"\\n  ];\\n  const DEFAULT = {\\n    endsWithParent: true,\\n    keywords: {\\n      $pattern: /[a-z_]{2,}|\\\\/dev\\\\/poll/,\\n      literal: LITERALS\\n    },\\n    relevance: 0,\\n    illegal: '=>',\\n    contains: [\\n      hljs.HASH_COMMENT_MODE,\\n      {\\n        className: 'string',\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          VAR\\n        ],\\n        variants: [\\n          {\\n            begin: /\\\"/,\\n            end: /\\\"/\\n          },\\n          {\\n            begin: /'/,\\n            end: /'/\\n          }\\n        ]\\n      },\\n      // this swallows entire URLs to avoid detecting numbers within\\n      {\\n        begin: '([a-z]+):/',\\n        end: '\\\\\\\\s',\\n        endsWithParent: true,\\n        excludeEnd: true,\\n        contains: [ VAR ]\\n      },\\n      {\\n        className: 'regexp',\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          VAR\\n        ],\\n        variants: [\\n          {\\n            begin: \\\"\\\\\\\\s\\\\\\\\^\\\",\\n            end: \\\"\\\\\\\\s|\\\\\\\\{|;\\\",\\n            returnEnd: true\\n          },\\n          // regexp locations (~, ~*)\\n          {\\n            begin: \\\"~\\\\\\\\*?\\\\\\\\s+\\\",\\n            end: \\\"\\\\\\\\s|\\\\\\\\{|;\\\",\\n            returnEnd: true\\n          },\\n          // *.example.com\\n          { begin: \\\"\\\\\\\\*(\\\\\\\\.[a-z\\\\\\\\-]+)+\\\" },\\n          // sub.example.*\\n          { begin: \\\"([a-z\\\\\\\\-]+\\\\\\\\.)+\\\\\\\\*\\\" }\\n        ]\\n      },\\n      // IP\\n      {\\n        className: 'number',\\n        begin: '\\\\\\\\b\\\\\\\\d{1,3}\\\\\\\\.\\\\\\\\d{1,3}\\\\\\\\.\\\\\\\\d{1,3}\\\\\\\\.\\\\\\\\d{1,3}(:\\\\\\\\d{1,5})?\\\\\\\\b'\\n      },\\n      // units\\n      {\\n        className: 'number',\\n        begin: '\\\\\\\\b\\\\\\\\d+[kKmMgGdshdwy]?\\\\\\\\b',\\n        relevance: 0\\n      },\\n      VAR\\n    ]\\n  };\\n\\n  return {\\n    name: 'Nginx config',\\n    aliases: [ 'nginxconf' ],\\n    contains: [\\n      hljs.HASH_COMMENT_MODE,\\n      {\\n        beginKeywords: \\\"upstream location\\\",\\n        end: /;|\\\\{/,\\n        contains: DEFAULT.contains,\\n        keywords: { section: \\\"upstream location\\\" }\\n      },\\n      {\\n        className: 'section',\\n        begin: regex.concat(hljs.UNDERSCORE_IDENT_RE + regex.lookahead(/\\\\s+\\\\{/)),\\n        relevance: 0\\n      },\\n      {\\n        begin: regex.lookahead(hljs.UNDERSCORE_IDENT_RE + '\\\\\\\\s'),\\n        end: ';|\\\\\\\\{',\\n        contains: [\\n          {\\n            className: 'attribute',\\n            begin: hljs.UNDERSCORE_IDENT_RE,\\n            starts: DEFAULT\\n          }\\n        ],\\n        relevance: 0\\n      }\\n    ],\\n    illegal: '[^\\\\\\\\s\\\\\\\\}\\\\\\\\{]'\\n  };\\n}\\n\\nmodule.exports = nginx;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/nginx.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/nim.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/nim.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Nim\\nDescription: Nim is a statically typed compiled systems programming language.\\nWebsite: https://nim-lang.org\\nCategory: system\\n*/\\n\\nfunction nim(hljs) {\\n  const TYPES = [\\n    \\\"int\\\",\\n    \\\"int8\\\",\\n    \\\"int16\\\",\\n    \\\"int32\\\",\\n    \\\"int64\\\",\\n    \\\"uint\\\",\\n    \\\"uint8\\\",\\n    \\\"uint16\\\",\\n    \\\"uint32\\\",\\n    \\\"uint64\\\",\\n    \\\"float\\\",\\n    \\\"float32\\\",\\n    \\\"float64\\\",\\n    \\\"bool\\\",\\n    \\\"char\\\",\\n    \\\"string\\\",\\n    \\\"cstring\\\",\\n    \\\"pointer\\\",\\n    \\\"expr\\\",\\n    \\\"stmt\\\",\\n    \\\"void\\\",\\n    \\\"auto\\\",\\n    \\\"any\\\",\\n    \\\"range\\\",\\n    \\\"array\\\",\\n    \\\"openarray\\\",\\n    \\\"varargs\\\",\\n    \\\"seq\\\",\\n    \\\"set\\\",\\n    \\\"clong\\\",\\n    \\\"culong\\\",\\n    \\\"cchar\\\",\\n    \\\"cschar\\\",\\n    \\\"cshort\\\",\\n    \\\"cint\\\",\\n    \\\"csize\\\",\\n    \\\"clonglong\\\",\\n    \\\"cfloat\\\",\\n    \\\"cdouble\\\",\\n    \\\"clongdouble\\\",\\n    \\\"cuchar\\\",\\n    \\\"cushort\\\",\\n    \\\"cuint\\\",\\n    \\\"culonglong\\\",\\n    \\\"cstringarray\\\",\\n    \\\"semistatic\\\"\\n  ];\\n  const KEYWORDS = [\\n    \\\"addr\\\",\\n    \\\"and\\\",\\n    \\\"as\\\",\\n    \\\"asm\\\",\\n    \\\"bind\\\",\\n    \\\"block\\\",\\n    \\\"break\\\",\\n    \\\"case\\\",\\n    \\\"cast\\\",\\n    \\\"const\\\",\\n    \\\"continue\\\",\\n    \\\"converter\\\",\\n    \\\"discard\\\",\\n    \\\"distinct\\\",\\n    \\\"div\\\",\\n    \\\"do\\\",\\n    \\\"elif\\\",\\n    \\\"else\\\",\\n    \\\"end\\\",\\n    \\\"enum\\\",\\n    \\\"except\\\",\\n    \\\"export\\\",\\n    \\\"finally\\\",\\n    \\\"for\\\",\\n    \\\"from\\\",\\n    \\\"func\\\",\\n    \\\"generic\\\",\\n    \\\"guarded\\\",\\n    \\\"if\\\",\\n    \\\"import\\\",\\n    \\\"in\\\",\\n    \\\"include\\\",\\n    \\\"interface\\\",\\n    \\\"is\\\",\\n    \\\"isnot\\\",\\n    \\\"iterator\\\",\\n    \\\"let\\\",\\n    \\\"macro\\\",\\n    \\\"method\\\",\\n    \\\"mixin\\\",\\n    \\\"mod\\\",\\n    \\\"nil\\\",\\n    \\\"not\\\",\\n    \\\"notin\\\",\\n    \\\"object\\\",\\n    \\\"of\\\",\\n    \\\"or\\\",\\n    \\\"out\\\",\\n    \\\"proc\\\",\\n    \\\"ptr\\\",\\n    \\\"raise\\\",\\n    \\\"ref\\\",\\n    \\\"return\\\",\\n    \\\"shared\\\",\\n    \\\"shl\\\",\\n    \\\"shr\\\",\\n    \\\"static\\\",\\n    \\\"template\\\",\\n    \\\"try\\\",\\n    \\\"tuple\\\",\\n    \\\"type\\\",\\n    \\\"using\\\",\\n    \\\"var\\\",\\n    \\\"when\\\",\\n    \\\"while\\\",\\n    \\\"with\\\",\\n    \\\"without\\\",\\n    \\\"xor\\\",\\n    \\\"yield\\\"\\n  ];\\n  const BUILT_INS = [\\n    \\\"stdin\\\",\\n    \\\"stdout\\\",\\n    \\\"stderr\\\",\\n    \\\"result\\\"\\n  ];\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\"\\n  ];\\n  return {\\n    name: 'Nim',\\n    keywords: {\\n      keyword: KEYWORDS,\\n      literal: LITERALS,\\n      type: TYPES,\\n      built_in: BUILT_INS\\n    },\\n    contains: [\\n      {\\n        className: 'meta', // Actually pragma\\n        begin: /\\\\{\\\\./,\\n        end: /\\\\.\\\\}/,\\n        relevance: 10\\n      },\\n      {\\n        className: 'string',\\n        begin: /[a-zA-Z]\\\\w*\\\"/,\\n        end: /\\\"/,\\n        contains: [ { begin: /\\\"\\\"/ } ]\\n      },\\n      {\\n        className: 'string',\\n        begin: /([a-zA-Z]\\\\w*)?\\\"\\\"\\\"/,\\n        end: /\\\"\\\"\\\"/\\n      },\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'type',\\n        begin: /\\\\b[A-Z]\\\\w+\\\\b/,\\n        relevance: 0\\n      },\\n      {\\n        className: 'number',\\n        relevance: 0,\\n        variants: [\\n          { begin: /\\\\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/ },\\n          { begin: /\\\\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/ },\\n          { begin: /\\\\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/ },\\n          { begin: /\\\\b(\\\\d[_\\\\d]*)('?[iIuUfF](8|16|32|64))?/ }\\n        ]\\n      },\\n      hljs.HASH_COMMENT_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = nim;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/nim.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/nix.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/nix.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Nix\\nAuthor: Domen Kožar <domen@dev.si>\\nDescription: Nix functional language\\nWebsite: http://nixos.org/nix\\n*/\\n\\nfunction nix(hljs) {\\n  const KEYWORDS = {\\n    keyword: [\\n      \\\"rec\\\",\\n      \\\"with\\\",\\n      \\\"let\\\",\\n      \\\"in\\\",\\n      \\\"inherit\\\",\\n      \\\"assert\\\",\\n      \\\"if\\\",\\n      \\\"else\\\",\\n      \\\"then\\\"\\n    ],\\n    literal: [\\n      \\\"true\\\",\\n      \\\"false\\\",\\n      \\\"or\\\",\\n      \\\"and\\\",\\n      \\\"null\\\"\\n    ],\\n    built_in: [\\n      \\\"import\\\",\\n      \\\"abort\\\",\\n      \\\"baseNameOf\\\",\\n      \\\"dirOf\\\",\\n      \\\"isNull\\\",\\n      \\\"builtins\\\",\\n      \\\"map\\\",\\n      \\\"removeAttrs\\\",\\n      \\\"throw\\\",\\n      \\\"toString\\\",\\n      \\\"derivation\\\"\\n    ]\\n  };\\n  const ANTIQUOTE = {\\n    className: 'subst',\\n    begin: /\\\\$\\\\{/,\\n    end: /\\\\}/,\\n    keywords: KEYWORDS\\n  };\\n  const ESCAPED_DOLLAR = {\\n    className: 'char.escape',\\n    begin: /''\\\\$/,\\n  };\\n  const ATTRS = {\\n    begin: /[a-zA-Z0-9-_]+(\\\\s*=)/,\\n    returnBegin: true,\\n    relevance: 0,\\n    contains: [\\n      {\\n        className: 'attr',\\n        begin: /\\\\S+/,\\n        relevance: 0.2\\n      }\\n    ]\\n  };\\n  const STRING = {\\n    className: 'string',\\n    contains: [ ESCAPED_DOLLAR, ANTIQUOTE ],\\n    variants: [\\n      {\\n        begin: \\\"''\\\",\\n        end: \\\"''\\\"\\n      },\\n      {\\n        begin: '\\\"',\\n        end: '\\\"'\\n      }\\n    ]\\n  };\\n  const EXPRESSIONS = [\\n    hljs.NUMBER_MODE,\\n    hljs.HASH_COMMENT_MODE,\\n    hljs.C_BLOCK_COMMENT_MODE,\\n    STRING,\\n    ATTRS\\n  ];\\n  ANTIQUOTE.contains = EXPRESSIONS;\\n  return {\\n    name: 'Nix',\\n    aliases: [ \\\"nixos\\\" ],\\n    keywords: KEYWORDS,\\n    contains: EXPRESSIONS\\n  };\\n}\\n\\nmodule.exports = nix;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/nix.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/node-repl.js\":\n/*!**************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/node-repl.js ***!\n  \\**************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Node REPL\\nRequires: javascript.js\\nAuthor: Marat Nagayev <nagaevmt@yandex.ru>\\nCategory: scripting\\n*/\\n\\n/** @type LanguageFn */\\nfunction nodeRepl(hljs) {\\n  return {\\n    name: 'Node REPL',\\n    contains: [\\n      {\\n        className: 'meta.prompt',\\n        starts: {\\n          // a space separates the REPL prefix from the actual code\\n          // this is purely for cleaner HTML output\\n          end: / |$/,\\n          starts: {\\n            end: '$',\\n            subLanguage: 'javascript'\\n          }\\n        },\\n        variants: [\\n          { begin: /^>(?=[ ]|$)/ },\\n          { begin: /^\\\\.\\\\.\\\\.(?=[ ]|$)/ }\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = nodeRepl;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/node-repl.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/nsis.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/nsis.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: NSIS\\nDescription: Nullsoft Scriptable Install System\\nAuthor: Jan T. Sott <jan.sott@gmail.com>\\nWebsite: https://nsis.sourceforge.io/Main_Page\\n*/\\n\\nfunction nsis(hljs) {\\n  const regex = hljs.regex;\\n  const LANGUAGE_CONSTANTS = [\\n    \\\"ADMINTOOLS\\\",\\n    \\\"APPDATA\\\",\\n    \\\"CDBURN_AREA\\\",\\n    \\\"CMDLINE\\\",\\n    \\\"COMMONFILES32\\\",\\n    \\\"COMMONFILES64\\\",\\n    \\\"COMMONFILES\\\",\\n    \\\"COOKIES\\\",\\n    \\\"DESKTOP\\\",\\n    \\\"DOCUMENTS\\\",\\n    \\\"EXEDIR\\\",\\n    \\\"EXEFILE\\\",\\n    \\\"EXEPATH\\\",\\n    \\\"FAVORITES\\\",\\n    \\\"FONTS\\\",\\n    \\\"HISTORY\\\",\\n    \\\"HWNDPARENT\\\",\\n    \\\"INSTDIR\\\",\\n    \\\"INTERNET_CACHE\\\",\\n    \\\"LANGUAGE\\\",\\n    \\\"LOCALAPPDATA\\\",\\n    \\\"MUSIC\\\",\\n    \\\"NETHOOD\\\",\\n    \\\"OUTDIR\\\",\\n    \\\"PICTURES\\\",\\n    \\\"PLUGINSDIR\\\",\\n    \\\"PRINTHOOD\\\",\\n    \\\"PROFILE\\\",\\n    \\\"PROGRAMFILES32\\\",\\n    \\\"PROGRAMFILES64\\\",\\n    \\\"PROGRAMFILES\\\",\\n    \\\"QUICKLAUNCH\\\",\\n    \\\"RECENT\\\",\\n    \\\"RESOURCES_LOCALIZED\\\",\\n    \\\"RESOURCES\\\",\\n    \\\"SENDTO\\\",\\n    \\\"SMPROGRAMS\\\",\\n    \\\"SMSTARTUP\\\",\\n    \\\"STARTMENU\\\",\\n    \\\"SYSDIR\\\",\\n    \\\"TEMP\\\",\\n    \\\"TEMPLATES\\\",\\n    \\\"VIDEOS\\\",\\n    \\\"WINDIR\\\"\\n  ];\\n\\n  const PARAM_NAMES = [\\n    \\\"ARCHIVE\\\",\\n    \\\"FILE_ATTRIBUTE_ARCHIVE\\\",\\n    \\\"FILE_ATTRIBUTE_NORMAL\\\",\\n    \\\"FILE_ATTRIBUTE_OFFLINE\\\",\\n    \\\"FILE_ATTRIBUTE_READONLY\\\",\\n    \\\"FILE_ATTRIBUTE_SYSTEM\\\",\\n    \\\"FILE_ATTRIBUTE_TEMPORARY\\\",\\n    \\\"HKCR\\\",\\n    \\\"HKCU\\\",\\n    \\\"HKDD\\\",\\n    \\\"HKEY_CLASSES_ROOT\\\",\\n    \\\"HKEY_CURRENT_CONFIG\\\",\\n    \\\"HKEY_CURRENT_USER\\\",\\n    \\\"HKEY_DYN_DATA\\\",\\n    \\\"HKEY_LOCAL_MACHINE\\\",\\n    \\\"HKEY_PERFORMANCE_DATA\\\",\\n    \\\"HKEY_USERS\\\",\\n    \\\"HKLM\\\",\\n    \\\"HKPD\\\",\\n    \\\"HKU\\\",\\n    \\\"IDABORT\\\",\\n    \\\"IDCANCEL\\\",\\n    \\\"IDIGNORE\\\",\\n    \\\"IDNO\\\",\\n    \\\"IDOK\\\",\\n    \\\"IDRETRY\\\",\\n    \\\"IDYES\\\",\\n    \\\"MB_ABORTRETRYIGNORE\\\",\\n    \\\"MB_DEFBUTTON1\\\",\\n    \\\"MB_DEFBUTTON2\\\",\\n    \\\"MB_DEFBUTTON3\\\",\\n    \\\"MB_DEFBUTTON4\\\",\\n    \\\"MB_ICONEXCLAMATION\\\",\\n    \\\"MB_ICONINFORMATION\\\",\\n    \\\"MB_ICONQUESTION\\\",\\n    \\\"MB_ICONSTOP\\\",\\n    \\\"MB_OK\\\",\\n    \\\"MB_OKCANCEL\\\",\\n    \\\"MB_RETRYCANCEL\\\",\\n    \\\"MB_RIGHT\\\",\\n    \\\"MB_RTLREADING\\\",\\n    \\\"MB_SETFOREGROUND\\\",\\n    \\\"MB_TOPMOST\\\",\\n    \\\"MB_USERICON\\\",\\n    \\\"MB_YESNO\\\",\\n    \\\"NORMAL\\\",\\n    \\\"OFFLINE\\\",\\n    \\\"READONLY\\\",\\n    \\\"SHCTX\\\",\\n    \\\"SHELL_CONTEXT\\\",\\n    \\\"SYSTEM|TEMPORARY\\\",\\n  ];\\n\\n  const COMPILER_FLAGS = [\\n    \\\"addincludedir\\\",\\n    \\\"addplugindir\\\",\\n    \\\"appendfile\\\",\\n    \\\"cd\\\",\\n    \\\"define\\\",\\n    \\\"delfile\\\",\\n    \\\"echo\\\",\\n    \\\"else\\\",\\n    \\\"endif\\\",\\n    \\\"error\\\",\\n    \\\"execute\\\",\\n    \\\"finalize\\\",\\n    \\\"getdllversion\\\",\\n    \\\"gettlbversion\\\",\\n    \\\"if\\\",\\n    \\\"ifdef\\\",\\n    \\\"ifmacrodef\\\",\\n    \\\"ifmacrondef\\\",\\n    \\\"ifndef\\\",\\n    \\\"include\\\",\\n    \\\"insertmacro\\\",\\n    \\\"macro\\\",\\n    \\\"macroend\\\",\\n    \\\"makensis\\\",\\n    \\\"packhdr\\\",\\n    \\\"searchparse\\\",\\n    \\\"searchreplace\\\",\\n    \\\"system\\\",\\n    \\\"tempfile\\\",\\n    \\\"undef\\\",\\n    \\\"uninstfinalize\\\",\\n    \\\"verbose\\\",\\n    \\\"warning\\\",\\n  ];\\n\\n  const CONSTANTS = {\\n    className: 'variable.constant',\\n    begin: regex.concat(/\\\\$/, regex.either(...LANGUAGE_CONSTANTS))\\n  };\\n\\n  const DEFINES = {\\n    // ${defines}\\n    className: 'variable',\\n    begin: /\\\\$+\\\\{[\\\\!\\\\w.:-]+\\\\}/\\n  };\\n\\n  const VARIABLES = {\\n    // $variables\\n    className: 'variable',\\n    begin: /\\\\$+\\\\w[\\\\w\\\\.]*/,\\n    illegal: /\\\\(\\\\)\\\\{\\\\}/\\n  };\\n\\n  const LANGUAGES = {\\n    // $(language_strings)\\n    className: 'variable',\\n    begin: /\\\\$+\\\\([\\\\w^.:!-]+\\\\)/\\n  };\\n\\n  const PARAMETERS = {\\n    // command parameters\\n    className: 'params',\\n    begin: regex.either(...PARAM_NAMES)\\n  };\\n\\n  const COMPILER = {\\n    // !compiler_flags\\n    className: 'keyword',\\n    begin: regex.concat(\\n      /!/,\\n      regex.either(...COMPILER_FLAGS)\\n    )\\n  };\\n\\n  const ESCAPE_CHARS = {\\n    // $\\\\n, $\\\\r, $\\\\t, $$\\n    className: 'char.escape',\\n    begin: /\\\\$(\\\\\\\\[nrt]|\\\\$)/\\n  };\\n\\n  const PLUGINS = {\\n    // plug::ins\\n    className: 'title.function',\\n    begin: /\\\\w+::\\\\w+/\\n  };\\n\\n  const STRING = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: '\\\"',\\n        end: '\\\"'\\n      },\\n      {\\n        begin: '\\\\'',\\n        end: '\\\\''\\n      },\\n      {\\n        begin: '`',\\n        end: '`'\\n      }\\n    ],\\n    illegal: /\\\\n/,\\n    contains: [\\n      ESCAPE_CHARS,\\n      CONSTANTS,\\n      DEFINES,\\n      VARIABLES,\\n      LANGUAGES\\n    ]\\n  };\\n\\n  const KEYWORDS = [\\n    \\\"Abort\\\",\\n    \\\"AddBrandingImage\\\",\\n    \\\"AddSize\\\",\\n    \\\"AllowRootDirInstall\\\",\\n    \\\"AllowSkipFiles\\\",\\n    \\\"AutoCloseWindow\\\",\\n    \\\"BGFont\\\",\\n    \\\"BGGradient\\\",\\n    \\\"BrandingText\\\",\\n    \\\"BringToFront\\\",\\n    \\\"Call\\\",\\n    \\\"CallInstDLL\\\",\\n    \\\"Caption\\\",\\n    \\\"ChangeUI\\\",\\n    \\\"CheckBitmap\\\",\\n    \\\"ClearErrors\\\",\\n    \\\"CompletedText\\\",\\n    \\\"ComponentText\\\",\\n    \\\"CopyFiles\\\",\\n    \\\"CRCCheck\\\",\\n    \\\"CreateDirectory\\\",\\n    \\\"CreateFont\\\",\\n    \\\"CreateShortCut\\\",\\n    \\\"Delete\\\",\\n    \\\"DeleteINISec\\\",\\n    \\\"DeleteINIStr\\\",\\n    \\\"DeleteRegKey\\\",\\n    \\\"DeleteRegValue\\\",\\n    \\\"DetailPrint\\\",\\n    \\\"DetailsButtonText\\\",\\n    \\\"DirText\\\",\\n    \\\"DirVar\\\",\\n    \\\"DirVerify\\\",\\n    \\\"EnableWindow\\\",\\n    \\\"EnumRegKey\\\",\\n    \\\"EnumRegValue\\\",\\n    \\\"Exch\\\",\\n    \\\"Exec\\\",\\n    \\\"ExecShell\\\",\\n    \\\"ExecShellWait\\\",\\n    \\\"ExecWait\\\",\\n    \\\"ExpandEnvStrings\\\",\\n    \\\"File\\\",\\n    \\\"FileBufSize\\\",\\n    \\\"FileClose\\\",\\n    \\\"FileErrorText\\\",\\n    \\\"FileOpen\\\",\\n    \\\"FileRead\\\",\\n    \\\"FileReadByte\\\",\\n    \\\"FileReadUTF16LE\\\",\\n    \\\"FileReadWord\\\",\\n    \\\"FileWriteUTF16LE\\\",\\n    \\\"FileSeek\\\",\\n    \\\"FileWrite\\\",\\n    \\\"FileWriteByte\\\",\\n    \\\"FileWriteWord\\\",\\n    \\\"FindClose\\\",\\n    \\\"FindFirst\\\",\\n    \\\"FindNext\\\",\\n    \\\"FindWindow\\\",\\n    \\\"FlushINI\\\",\\n    \\\"GetCurInstType\\\",\\n    \\\"GetCurrentAddress\\\",\\n    \\\"GetDlgItem\\\",\\n    \\\"GetDLLVersion\\\",\\n    \\\"GetDLLVersionLocal\\\",\\n    \\\"GetErrorLevel\\\",\\n    \\\"GetFileTime\\\",\\n    \\\"GetFileTimeLocal\\\",\\n    \\\"GetFullPathName\\\",\\n    \\\"GetFunctionAddress\\\",\\n    \\\"GetInstDirError\\\",\\n    \\\"GetKnownFolderPath\\\",\\n    \\\"GetLabelAddress\\\",\\n    \\\"GetTempFileName\\\",\\n    \\\"GetWinVer\\\",\\n    \\\"Goto\\\",\\n    \\\"HideWindow\\\",\\n    \\\"Icon\\\",\\n    \\\"IfAbort\\\",\\n    \\\"IfErrors\\\",\\n    \\\"IfFileExists\\\",\\n    \\\"IfRebootFlag\\\",\\n    \\\"IfRtlLanguage\\\",\\n    \\\"IfShellVarContextAll\\\",\\n    \\\"IfSilent\\\",\\n    \\\"InitPluginsDir\\\",\\n    \\\"InstallButtonText\\\",\\n    \\\"InstallColors\\\",\\n    \\\"InstallDir\\\",\\n    \\\"InstallDirRegKey\\\",\\n    \\\"InstProgressFlags\\\",\\n    \\\"InstType\\\",\\n    \\\"InstTypeGetText\\\",\\n    \\\"InstTypeSetText\\\",\\n    \\\"Int64Cmp\\\",\\n    \\\"Int64CmpU\\\",\\n    \\\"Int64Fmt\\\",\\n    \\\"IntCmp\\\",\\n    \\\"IntCmpU\\\",\\n    \\\"IntFmt\\\",\\n    \\\"IntOp\\\",\\n    \\\"IntPtrCmp\\\",\\n    \\\"IntPtrCmpU\\\",\\n    \\\"IntPtrOp\\\",\\n    \\\"IsWindow\\\",\\n    \\\"LangString\\\",\\n    \\\"LicenseBkColor\\\",\\n    \\\"LicenseData\\\",\\n    \\\"LicenseForceSelection\\\",\\n    \\\"LicenseLangString\\\",\\n    \\\"LicenseText\\\",\\n    \\\"LoadAndSetImage\\\",\\n    \\\"LoadLanguageFile\\\",\\n    \\\"LockWindow\\\",\\n    \\\"LogSet\\\",\\n    \\\"LogText\\\",\\n    \\\"ManifestDPIAware\\\",\\n    \\\"ManifestLongPathAware\\\",\\n    \\\"ManifestMaxVersionTested\\\",\\n    \\\"ManifestSupportedOS\\\",\\n    \\\"MessageBox\\\",\\n    \\\"MiscButtonText\\\",\\n    \\\"Name|0\\\",\\n    \\\"Nop\\\",\\n    \\\"OutFile\\\",\\n    \\\"Page\\\",\\n    \\\"PageCallbacks\\\",\\n    \\\"PEAddResource\\\",\\n    \\\"PEDllCharacteristics\\\",\\n    \\\"PERemoveResource\\\",\\n    \\\"PESubsysVer\\\",\\n    \\\"Pop\\\",\\n    \\\"Push\\\",\\n    \\\"Quit\\\",\\n    \\\"ReadEnvStr\\\",\\n    \\\"ReadINIStr\\\",\\n    \\\"ReadRegDWORD\\\",\\n    \\\"ReadRegStr\\\",\\n    \\\"Reboot\\\",\\n    \\\"RegDLL\\\",\\n    \\\"Rename\\\",\\n    \\\"RequestExecutionLevel\\\",\\n    \\\"ReserveFile\\\",\\n    \\\"Return\\\",\\n    \\\"RMDir\\\",\\n    \\\"SearchPath\\\",\\n    \\\"SectionGetFlags\\\",\\n    \\\"SectionGetInstTypes\\\",\\n    \\\"SectionGetSize\\\",\\n    \\\"SectionGetText\\\",\\n    \\\"SectionIn\\\",\\n    \\\"SectionSetFlags\\\",\\n    \\\"SectionSetInstTypes\\\",\\n    \\\"SectionSetSize\\\",\\n    \\\"SectionSetText\\\",\\n    \\\"SendMessage\\\",\\n    \\\"SetAutoClose\\\",\\n    \\\"SetBrandingImage\\\",\\n    \\\"SetCompress\\\",\\n    \\\"SetCompressor\\\",\\n    \\\"SetCompressorDictSize\\\",\\n    \\\"SetCtlColors\\\",\\n    \\\"SetCurInstType\\\",\\n    \\\"SetDatablockOptimize\\\",\\n    \\\"SetDateSave\\\",\\n    \\\"SetDetailsPrint\\\",\\n    \\\"SetDetailsView\\\",\\n    \\\"SetErrorLevel\\\",\\n    \\\"SetErrors\\\",\\n    \\\"SetFileAttributes\\\",\\n    \\\"SetFont\\\",\\n    \\\"SetOutPath\\\",\\n    \\\"SetOverwrite\\\",\\n    \\\"SetRebootFlag\\\",\\n    \\\"SetRegView\\\",\\n    \\\"SetShellVarContext\\\",\\n    \\\"SetSilent\\\",\\n    \\\"ShowInstDetails\\\",\\n    \\\"ShowUninstDetails\\\",\\n    \\\"ShowWindow\\\",\\n    \\\"SilentInstall\\\",\\n    \\\"SilentUnInstall\\\",\\n    \\\"Sleep\\\",\\n    \\\"SpaceTexts\\\",\\n    \\\"StrCmp\\\",\\n    \\\"StrCmpS\\\",\\n    \\\"StrCpy\\\",\\n    \\\"StrLen\\\",\\n    \\\"SubCaption\\\",\\n    \\\"Unicode\\\",\\n    \\\"UninstallButtonText\\\",\\n    \\\"UninstallCaption\\\",\\n    \\\"UninstallIcon\\\",\\n    \\\"UninstallSubCaption\\\",\\n    \\\"UninstallText\\\",\\n    \\\"UninstPage\\\",\\n    \\\"UnRegDLL\\\",\\n    \\\"Var\\\",\\n    \\\"VIAddVersionKey\\\",\\n    \\\"VIFileVersion\\\",\\n    \\\"VIProductVersion\\\",\\n    \\\"WindowIcon\\\",\\n    \\\"WriteINIStr\\\",\\n    \\\"WriteRegBin\\\",\\n    \\\"WriteRegDWORD\\\",\\n    \\\"WriteRegExpandStr\\\",\\n    \\\"WriteRegMultiStr\\\",\\n    \\\"WriteRegNone\\\",\\n    \\\"WriteRegStr\\\",\\n    \\\"WriteUninstaller\\\",\\n    \\\"XPStyle\\\"\\n  ];\\n\\n  const LITERALS = [\\n    \\\"admin\\\",\\n    \\\"all\\\",\\n    \\\"auto\\\",\\n    \\\"both\\\",\\n    \\\"bottom\\\",\\n    \\\"bzip2\\\",\\n    \\\"colored\\\",\\n    \\\"components\\\",\\n    \\\"current\\\",\\n    \\\"custom\\\",\\n    \\\"directory\\\",\\n    \\\"false\\\",\\n    \\\"force\\\",\\n    \\\"hide\\\",\\n    \\\"highest\\\",\\n    \\\"ifdiff\\\",\\n    \\\"ifnewer\\\",\\n    \\\"instfiles\\\",\\n    \\\"lastused\\\",\\n    \\\"leave\\\",\\n    \\\"left\\\",\\n    \\\"license\\\",\\n    \\\"listonly\\\",\\n    \\\"lzma\\\",\\n    \\\"nevershow\\\",\\n    \\\"none\\\",\\n    \\\"normal\\\",\\n    \\\"notset\\\",\\n    \\\"off\\\",\\n    \\\"on\\\",\\n    \\\"open\\\",\\n    \\\"print\\\",\\n    \\\"right\\\",\\n    \\\"show\\\",\\n    \\\"silent\\\",\\n    \\\"silentlog\\\",\\n    \\\"smooth\\\",\\n    \\\"textonly\\\",\\n    \\\"top\\\",\\n    \\\"true\\\",\\n    \\\"try\\\",\\n    \\\"un.components\\\",\\n    \\\"un.custom\\\",\\n    \\\"un.directory\\\",\\n    \\\"un.instfiles\\\",\\n    \\\"un.license\\\",\\n    \\\"uninstConfirm\\\",\\n    \\\"user\\\",\\n    \\\"Win10\\\",\\n    \\\"Win7\\\",\\n    \\\"Win8\\\",\\n    \\\"WinVista\\\",\\n    \\\"zlib\\\"\\n  ];\\n\\n  const FUNCTION_DEFINITION = {\\n    match: [\\n      /Function/,\\n      /\\\\s+/,\\n      regex.concat(/(\\\\.)?/, hljs.IDENT_RE)\\n    ],\\n    scope: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.function\\\"\\n    }\\n  };\\n\\n  // Var Custom.Variable.Name.Item\\n  // Var /GLOBAL Custom.Variable.Name.Item\\n  const VARIABLE_NAME_RE = /[A-Za-z][\\\\w.]*/;\\n  const VARIABLE_DEFINITION = {\\n    match: [\\n      /Var/,\\n      /\\\\s+/,\\n      /(?:\\\\/GLOBAL\\\\s+)?/,\\n      VARIABLE_NAME_RE\\n    ],\\n    scope: {\\n      1: \\\"keyword\\\",\\n      3: \\\"params\\\",\\n      4: \\\"variable\\\"\\n    }\\n  };\\n\\n  return {\\n    name: 'NSIS',\\n    case_insensitive: true,\\n    keywords: {\\n      keyword: KEYWORDS,\\n      literal: LITERALS\\n    },\\n    contains: [\\n      hljs.HASH_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.COMMENT(\\n        ';',\\n        '$',\\n        { relevance: 0 }\\n      ),\\n      VARIABLE_DEFINITION,\\n      FUNCTION_DEFINITION,\\n      { beginKeywords: 'Function PageEx Section SectionGroup FunctionEnd SectionEnd', },\\n      STRING,\\n      COMPILER,\\n      DEFINES,\\n      VARIABLES,\\n      LANGUAGES,\\n      PARAMETERS,\\n      PLUGINS,\\n      hljs.NUMBER_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = nsis;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/nsis.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/objectivec.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/objectivec.js ***!\n  \\***************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Objective-C\\nAuthor: Valerii Hiora <valerii.hiora@gmail.com>\\nContributors: Angel G. Olloqui <angelgarcia.mail@gmail.com>, Matt Diephouse <matt@diephouse.com>, Andrew Farmer <ahfarmer@gmail.com>, Minh Nguyễn <mxn@1ec5.org>\\nWebsite: https://developer.apple.com/documentation/objectivec\\nCategory: common\\n*/\\n\\nfunction objectivec(hljs) {\\n  const API_CLASS = {\\n    className: 'built_in',\\n    begin: '\\\\\\\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\\\\\\\w+'\\n  };\\n  const IDENTIFIER_RE = /[a-zA-Z@][a-zA-Z0-9_]*/;\\n  const TYPES = [\\n    \\\"int\\\",\\n    \\\"float\\\",\\n    \\\"char\\\",\\n    \\\"unsigned\\\",\\n    \\\"signed\\\",\\n    \\\"short\\\",\\n    \\\"long\\\",\\n    \\\"double\\\",\\n    \\\"wchar_t\\\",\\n    \\\"unichar\\\",\\n    \\\"void\\\",\\n    \\\"bool\\\",\\n    \\\"BOOL\\\",\\n    \\\"id|0\\\",\\n    \\\"_Bool\\\"\\n  ];\\n  const KWS = [\\n    \\\"while\\\",\\n    \\\"export\\\",\\n    \\\"sizeof\\\",\\n    \\\"typedef\\\",\\n    \\\"const\\\",\\n    \\\"struct\\\",\\n    \\\"for\\\",\\n    \\\"union\\\",\\n    \\\"volatile\\\",\\n    \\\"static\\\",\\n    \\\"mutable\\\",\\n    \\\"if\\\",\\n    \\\"do\\\",\\n    \\\"return\\\",\\n    \\\"goto\\\",\\n    \\\"enum\\\",\\n    \\\"else\\\",\\n    \\\"break\\\",\\n    \\\"extern\\\",\\n    \\\"asm\\\",\\n    \\\"case\\\",\\n    \\\"default\\\",\\n    \\\"register\\\",\\n    \\\"explicit\\\",\\n    \\\"typename\\\",\\n    \\\"switch\\\",\\n    \\\"continue\\\",\\n    \\\"inline\\\",\\n    \\\"readonly\\\",\\n    \\\"assign\\\",\\n    \\\"readwrite\\\",\\n    \\\"self\\\",\\n    \\\"@synchronized\\\",\\n    \\\"id\\\",\\n    \\\"typeof\\\",\\n    \\\"nonatomic\\\",\\n    \\\"IBOutlet\\\",\\n    \\\"IBAction\\\",\\n    \\\"strong\\\",\\n    \\\"weak\\\",\\n    \\\"copy\\\",\\n    \\\"in\\\",\\n    \\\"out\\\",\\n    \\\"inout\\\",\\n    \\\"bycopy\\\",\\n    \\\"byref\\\",\\n    \\\"oneway\\\",\\n    \\\"__strong\\\",\\n    \\\"__weak\\\",\\n    \\\"__block\\\",\\n    \\\"__autoreleasing\\\",\\n    \\\"@private\\\",\\n    \\\"@protected\\\",\\n    \\\"@public\\\",\\n    \\\"@try\\\",\\n    \\\"@property\\\",\\n    \\\"@end\\\",\\n    \\\"@throw\\\",\\n    \\\"@catch\\\",\\n    \\\"@finally\\\",\\n    \\\"@autoreleasepool\\\",\\n    \\\"@synthesize\\\",\\n    \\\"@dynamic\\\",\\n    \\\"@selector\\\",\\n    \\\"@optional\\\",\\n    \\\"@required\\\",\\n    \\\"@encode\\\",\\n    \\\"@package\\\",\\n    \\\"@import\\\",\\n    \\\"@defs\\\",\\n    \\\"@compatibility_alias\\\",\\n    \\\"__bridge\\\",\\n    \\\"__bridge_transfer\\\",\\n    \\\"__bridge_retained\\\",\\n    \\\"__bridge_retain\\\",\\n    \\\"__covariant\\\",\\n    \\\"__contravariant\\\",\\n    \\\"__kindof\\\",\\n    \\\"_Nonnull\\\",\\n    \\\"_Nullable\\\",\\n    \\\"_Null_unspecified\\\",\\n    \\\"__FUNCTION__\\\",\\n    \\\"__PRETTY_FUNCTION__\\\",\\n    \\\"__attribute__\\\",\\n    \\\"getter\\\",\\n    \\\"setter\\\",\\n    \\\"retain\\\",\\n    \\\"unsafe_unretained\\\",\\n    \\\"nonnull\\\",\\n    \\\"nullable\\\",\\n    \\\"null_unspecified\\\",\\n    \\\"null_resettable\\\",\\n    \\\"class\\\",\\n    \\\"instancetype\\\",\\n    \\\"NS_DESIGNATED_INITIALIZER\\\",\\n    \\\"NS_UNAVAILABLE\\\",\\n    \\\"NS_REQUIRES_SUPER\\\",\\n    \\\"NS_RETURNS_INNER_POINTER\\\",\\n    \\\"NS_INLINE\\\",\\n    \\\"NS_AVAILABLE\\\",\\n    \\\"NS_DEPRECATED\\\",\\n    \\\"NS_ENUM\\\",\\n    \\\"NS_OPTIONS\\\",\\n    \\\"NS_SWIFT_UNAVAILABLE\\\",\\n    \\\"NS_ASSUME_NONNULL_BEGIN\\\",\\n    \\\"NS_ASSUME_NONNULL_END\\\",\\n    \\\"NS_REFINED_FOR_SWIFT\\\",\\n    \\\"NS_SWIFT_NAME\\\",\\n    \\\"NS_SWIFT_NOTHROW\\\",\\n    \\\"NS_DURING\\\",\\n    \\\"NS_HANDLER\\\",\\n    \\\"NS_ENDHANDLER\\\",\\n    \\\"NS_VALUERETURN\\\",\\n    \\\"NS_VOIDRETURN\\\"\\n  ];\\n  const LITERALS = [\\n    \\\"false\\\",\\n    \\\"true\\\",\\n    \\\"FALSE\\\",\\n    \\\"TRUE\\\",\\n    \\\"nil\\\",\\n    \\\"YES\\\",\\n    \\\"NO\\\",\\n    \\\"NULL\\\"\\n  ];\\n  const BUILT_INS = [\\n    \\\"dispatch_once_t\\\",\\n    \\\"dispatch_queue_t\\\",\\n    \\\"dispatch_sync\\\",\\n    \\\"dispatch_async\\\",\\n    \\\"dispatch_once\\\"\\n  ];\\n  const KEYWORDS = {\\n    \\\"variable.language\\\": [\\n      \\\"this\\\",\\n      \\\"super\\\"\\n    ],\\n    $pattern: IDENTIFIER_RE,\\n    keyword: KWS,\\n    literal: LITERALS,\\n    built_in: BUILT_INS,\\n    type: TYPES\\n  };\\n  const CLASS_KEYWORDS = {\\n    $pattern: IDENTIFIER_RE,\\n    keyword: [\\n      \\\"@interface\\\",\\n      \\\"@class\\\",\\n      \\\"@protocol\\\",\\n      \\\"@implementation\\\"\\n    ]\\n  };\\n  return {\\n    name: 'Objective-C',\\n    aliases: [\\n      'mm',\\n      'objc',\\n      'obj-c',\\n      'obj-c++',\\n      'objective-c++'\\n    ],\\n    keywords: KEYWORDS,\\n    illegal: '</',\\n    contains: [\\n      API_CLASS,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.C_NUMBER_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.APOS_STRING_MODE,\\n      {\\n        className: 'string',\\n        variants: [\\n          {\\n            begin: '@\\\"',\\n            end: '\\\"',\\n            illegal: '\\\\\\\\n',\\n            contains: [ hljs.BACKSLASH_ESCAPE ]\\n          }\\n        ]\\n      },\\n      {\\n        className: 'meta',\\n        begin: /#\\\\s*[a-z]+\\\\b/,\\n        end: /$/,\\n        keywords: { keyword:\\n            'if else elif endif define undef warning error line '\\n            + 'pragma ifdef ifndef include' },\\n        contains: [\\n          {\\n            begin: /\\\\\\\\\\\\n/,\\n            relevance: 0\\n          },\\n          hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' }),\\n          {\\n            className: 'string',\\n            begin: /<.*?>/,\\n            end: /$/,\\n            illegal: '\\\\\\\\n'\\n          },\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE\\n        ]\\n      },\\n      {\\n        className: 'class',\\n        begin: '(' + CLASS_KEYWORDS.keyword.join('|') + ')\\\\\\\\b',\\n        end: /(\\\\{|$)/,\\n        excludeEnd: true,\\n        keywords: CLASS_KEYWORDS,\\n        contains: [ hljs.UNDERSCORE_TITLE_MODE ]\\n      },\\n      {\\n        begin: '\\\\\\\\.' + hljs.UNDERSCORE_IDENT_RE,\\n        relevance: 0\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = objectivec;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/objectivec.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/ocaml.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/ocaml.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: OCaml\\nAuthor: Mehdi Dogguy <mehdi@dogguy.org>\\nContributors: Nicolas Braud-Santoni <nicolas.braud-santoni@ens-cachan.fr>, Mickael Delahaye <mickael.delahaye@gmail.com>\\nDescription: OCaml language definition.\\nWebsite: https://ocaml.org\\nCategory: functional\\n*/\\n\\nfunction ocaml(hljs) {\\n  /* missing support for heredoc-like string (OCaml 4.0.2+) */\\n  return {\\n    name: 'OCaml',\\n    aliases: [ 'ml' ],\\n    keywords: {\\n      $pattern: '[a-z_]\\\\\\\\w*!?',\\n      keyword:\\n        'and as assert asr begin class constraint do done downto else end '\\n        + 'exception external for fun function functor if in include '\\n        + 'inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method '\\n        + 'mod module mutable new object of open! open or private rec sig struct '\\n        + 'then to try type val! val virtual when while with '\\n        /* camlp4 */\\n        + 'parser value',\\n      built_in:\\n        /* built-in types */\\n        'array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit '\\n        /* (some) types in Pervasives */\\n        + 'in_channel out_channel ref',\\n      literal:\\n        'true false'\\n    },\\n    illegal: /\\\\/\\\\/|>>/,\\n    contains: [\\n      {\\n        className: 'literal',\\n        begin: '\\\\\\\\[(\\\\\\\\|\\\\\\\\|)?\\\\\\\\]|\\\\\\\\(\\\\\\\\)',\\n        relevance: 0\\n      },\\n      hljs.COMMENT(\\n        '\\\\\\\\(\\\\\\\\*',\\n        '\\\\\\\\*\\\\\\\\)',\\n        { contains: [ 'self' ] }\\n      ),\\n      { /* type variable */\\n        className: 'symbol',\\n        begin: '\\\\'[A-Za-z_](?!\\\\')[\\\\\\\\w\\\\']*'\\n        /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */\\n      },\\n      { /* polymorphic variant */\\n        className: 'type',\\n        begin: '`[A-Z][\\\\\\\\w\\\\']*'\\n      },\\n      { /* module or constructor */\\n        className: 'type',\\n        begin: '\\\\\\\\b[A-Z][\\\\\\\\w\\\\']*',\\n        relevance: 0\\n      },\\n      { /* don't color identifiers, but safely catch all identifiers with ' */\\n        begin: '[a-z_]\\\\\\\\w*\\\\'[\\\\\\\\w\\\\']*',\\n        relevance: 0\\n      },\\n      hljs.inherit(hljs.APOS_STRING_MODE, {\\n        className: 'string',\\n        relevance: 0\\n      }),\\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),\\n      {\\n        className: 'number',\\n        begin:\\n          '\\\\\\\\b(0[xX][a-fA-F0-9_]+[Lln]?|'\\n          + '0[oO][0-7_]+[Lln]?|'\\n          + '0[bB][01_]+[Lln]?|'\\n          + '[0-9][0-9_]*([Lln]|(\\\\\\\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)',\\n        relevance: 0\\n      },\\n      { begin: /->/ // relevance booster\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = ocaml;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/ocaml.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/openscad.js\":\n/*!*************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/openscad.js ***!\n  \\*************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: OpenSCAD\\nAuthor: Dan Panzarella <alsoelp@gmail.com>\\nDescription: OpenSCAD is a language for the 3D CAD modeling software of the same name.\\nWebsite: https://www.openscad.org\\nCategory: scientific\\n*/\\n\\nfunction openscad(hljs) {\\n  const SPECIAL_VARS = {\\n    className: 'keyword',\\n    begin: '\\\\\\\\$(f[asn]|t|vp[rtd]|children)'\\n  };\\n  const LITERALS = {\\n    className: 'literal',\\n    begin: 'false|true|PI|undef'\\n  };\\n  const NUMBERS = {\\n    className: 'number',\\n    begin: '\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+)?(e-?\\\\\\\\d+)?', // adds 1e5, 1e-10\\n    relevance: 0\\n  };\\n  const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });\\n  const PREPRO = {\\n    className: 'meta',\\n    keywords: { keyword: 'include use' },\\n    begin: 'include|use <',\\n    end: '>'\\n  };\\n  const PARAMS = {\\n    className: 'params',\\n    begin: '\\\\\\\\(',\\n    end: '\\\\\\\\)',\\n    contains: [\\n      'self',\\n      NUMBERS,\\n      STRING,\\n      SPECIAL_VARS,\\n      LITERALS\\n    ]\\n  };\\n  const MODIFIERS = {\\n    begin: '[*!#%]',\\n    relevance: 0\\n  };\\n  const FUNCTIONS = {\\n    className: 'function',\\n    beginKeywords: 'module function',\\n    end: /=|\\\\{/,\\n    contains: [\\n      PARAMS,\\n      hljs.UNDERSCORE_TITLE_MODE\\n    ]\\n  };\\n\\n  return {\\n    name: 'OpenSCAD',\\n    aliases: [ 'scad' ],\\n    keywords: {\\n      keyword: 'function module include use for intersection_for if else \\\\\\\\%',\\n      literal: 'false true PI undef',\\n      built_in: 'circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign'\\n    },\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      NUMBERS,\\n      PREPRO,\\n      STRING,\\n      SPECIAL_VARS,\\n      MODIFIERS,\\n      FUNCTIONS\\n    ]\\n  };\\n}\\n\\nmodule.exports = openscad;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/openscad.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/oxygene.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/oxygene.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Oxygene\\nAuthor: Carlo Kok <ck@remobjects.com>\\nDescription: Oxygene is built on the foundation of Object Pascal, revamped and extended to be a modern language for the twenty-first century.\\nWebsite: https://www.elementscompiler.com/elements/default.aspx\\n*/\\n\\nfunction oxygene(hljs) {\\n  const OXYGENE_KEYWORDS = {\\n    $pattern: /\\\\.?\\\\w+/,\\n    keyword:\\n      'abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue '\\n      + 'create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false '\\n      + 'final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited '\\n      + 'inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of '\\n      + 'old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly '\\n      + 'record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple '\\n      + 'type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal '\\n      + 'register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained'\\n  };\\n  const CURLY_COMMENT = hljs.COMMENT(\\n    /\\\\{/,\\n    /\\\\}/,\\n    { relevance: 0 }\\n  );\\n  const PAREN_COMMENT = hljs.COMMENT(\\n    '\\\\\\\\(\\\\\\\\*',\\n    '\\\\\\\\*\\\\\\\\)',\\n    { relevance: 10 }\\n  );\\n  const STRING = {\\n    className: 'string',\\n    begin: '\\\\'',\\n    end: '\\\\'',\\n    contains: [ { begin: '\\\\'\\\\'' } ]\\n  };\\n  const CHAR_STRING = {\\n    className: 'string',\\n    begin: '(#\\\\\\\\d+)+'\\n  };\\n  const FUNCTION = {\\n    beginKeywords: 'function constructor destructor procedure method',\\n    end: '[:;]',\\n    keywords: 'function constructor|10 destructor|10 procedure|10 method|10',\\n    contains: [\\n      hljs.inherit(hljs.TITLE_MODE, { scope: \\\"title.function\\\" }),\\n      {\\n        className: 'params',\\n        begin: '\\\\\\\\(',\\n        end: '\\\\\\\\)',\\n        keywords: OXYGENE_KEYWORDS,\\n        contains: [\\n          STRING,\\n          CHAR_STRING\\n        ]\\n      },\\n      CURLY_COMMENT,\\n      PAREN_COMMENT\\n    ]\\n  };\\n\\n  const SEMICOLON = {\\n    scope: \\\"punctuation\\\",\\n    match: /;/,\\n    relevance: 0\\n  };\\n\\n  return {\\n    name: 'Oxygene',\\n    case_insensitive: true,\\n    keywords: OXYGENE_KEYWORDS,\\n    illegal: '(\\\"|\\\\\\\\$[G-Zg-z]|\\\\\\\\/\\\\\\\\*|</|=>|->)',\\n    contains: [\\n      CURLY_COMMENT,\\n      PAREN_COMMENT,\\n      hljs.C_LINE_COMMENT_MODE,\\n      STRING,\\n      CHAR_STRING,\\n      hljs.NUMBER_MODE,\\n      FUNCTION,\\n      SEMICOLON\\n    ]\\n  };\\n}\\n\\nmodule.exports = oxygene;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/oxygene.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/parser3.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/parser3.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Parser3\\nRequires: xml.js\\nAuthor: Oleg Volchkov <oleg@volchkov.net>\\nWebsite: https://www.parser.ru/en/\\nCategory: template\\n*/\\n\\nfunction parser3(hljs) {\\n  const CURLY_SUBCOMMENT = hljs.COMMENT(\\n    /\\\\{/,\\n    /\\\\}/,\\n    { contains: [ 'self' ] }\\n  );\\n  return {\\n    name: 'Parser3',\\n    subLanguage: 'xml',\\n    relevance: 0,\\n    contains: [\\n      hljs.COMMENT('^#', '$'),\\n      hljs.COMMENT(\\n        /\\\\^rem\\\\{/,\\n        /\\\\}/,\\n        {\\n          relevance: 10,\\n          contains: [ CURLY_SUBCOMMENT ]\\n        }\\n      ),\\n      {\\n        className: 'meta',\\n        begin: '^@(?:BASE|USE|CLASS|OPTIONS)$',\\n        relevance: 10\\n      },\\n      {\\n        className: 'title',\\n        begin: '@[\\\\\\\\w\\\\\\\\-]+\\\\\\\\[[\\\\\\\\w^;\\\\\\\\-]*\\\\\\\\](?:\\\\\\\\[[\\\\\\\\w^;\\\\\\\\-]*\\\\\\\\])?(?:.*)$'\\n      },\\n      {\\n        className: 'variable',\\n        begin: /\\\\$\\\\{?[\\\\w\\\\-.:]+\\\\}?/\\n      },\\n      {\\n        className: 'keyword',\\n        begin: /\\\\^[\\\\w\\\\-.:]+/\\n      },\\n      {\\n        className: 'number',\\n        begin: '\\\\\\\\^#[0-9a-fA-F]+'\\n      },\\n      hljs.C_NUMBER_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = parser3;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/parser3.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/perl.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/perl.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Perl\\nAuthor: Peter Leonov <gojpeg@yandex.ru>\\nWebsite: https://www.perl.org\\nCategory: common\\n*/\\n\\n/** @type LanguageFn */\\nfunction perl(hljs) {\\n  const regex = hljs.regex;\\n  const KEYWORDS = [\\n    'abs',\\n    'accept',\\n    'alarm',\\n    'and',\\n    'atan2',\\n    'bind',\\n    'binmode',\\n    'bless',\\n    'break',\\n    'caller',\\n    'chdir',\\n    'chmod',\\n    'chomp',\\n    'chop',\\n    'chown',\\n    'chr',\\n    'chroot',\\n    'close',\\n    'closedir',\\n    'connect',\\n    'continue',\\n    'cos',\\n    'crypt',\\n    'dbmclose',\\n    'dbmopen',\\n    'defined',\\n    'delete',\\n    'die',\\n    'do',\\n    'dump',\\n    'each',\\n    'else',\\n    'elsif',\\n    'endgrent',\\n    'endhostent',\\n    'endnetent',\\n    'endprotoent',\\n    'endpwent',\\n    'endservent',\\n    'eof',\\n    'eval',\\n    'exec',\\n    'exists',\\n    'exit',\\n    'exp',\\n    'fcntl',\\n    'fileno',\\n    'flock',\\n    'for',\\n    'foreach',\\n    'fork',\\n    'format',\\n    'formline',\\n    'getc',\\n    'getgrent',\\n    'getgrgid',\\n    'getgrnam',\\n    'gethostbyaddr',\\n    'gethostbyname',\\n    'gethostent',\\n    'getlogin',\\n    'getnetbyaddr',\\n    'getnetbyname',\\n    'getnetent',\\n    'getpeername',\\n    'getpgrp',\\n    'getpriority',\\n    'getprotobyname',\\n    'getprotobynumber',\\n    'getprotoent',\\n    'getpwent',\\n    'getpwnam',\\n    'getpwuid',\\n    'getservbyname',\\n    'getservbyport',\\n    'getservent',\\n    'getsockname',\\n    'getsockopt',\\n    'given',\\n    'glob',\\n    'gmtime',\\n    'goto',\\n    'grep',\\n    'gt',\\n    'hex',\\n    'if',\\n    'index',\\n    'int',\\n    'ioctl',\\n    'join',\\n    'keys',\\n    'kill',\\n    'last',\\n    'lc',\\n    'lcfirst',\\n    'length',\\n    'link',\\n    'listen',\\n    'local',\\n    'localtime',\\n    'log',\\n    'lstat',\\n    'lt',\\n    'ma',\\n    'map',\\n    'mkdir',\\n    'msgctl',\\n    'msgget',\\n    'msgrcv',\\n    'msgsnd',\\n    'my',\\n    'ne',\\n    'next',\\n    'no',\\n    'not',\\n    'oct',\\n    'open',\\n    'opendir',\\n    'or',\\n    'ord',\\n    'our',\\n    'pack',\\n    'package',\\n    'pipe',\\n    'pop',\\n    'pos',\\n    'print',\\n    'printf',\\n    'prototype',\\n    'push',\\n    'q|0',\\n    'qq',\\n    'quotemeta',\\n    'qw',\\n    'qx',\\n    'rand',\\n    'read',\\n    'readdir',\\n    'readline',\\n    'readlink',\\n    'readpipe',\\n    'recv',\\n    'redo',\\n    'ref',\\n    'rename',\\n    'require',\\n    'reset',\\n    'return',\\n    'reverse',\\n    'rewinddir',\\n    'rindex',\\n    'rmdir',\\n    'say',\\n    'scalar',\\n    'seek',\\n    'seekdir',\\n    'select',\\n    'semctl',\\n    'semget',\\n    'semop',\\n    'send',\\n    'setgrent',\\n    'sethostent',\\n    'setnetent',\\n    'setpgrp',\\n    'setpriority',\\n    'setprotoent',\\n    'setpwent',\\n    'setservent',\\n    'setsockopt',\\n    'shift',\\n    'shmctl',\\n    'shmget',\\n    'shmread',\\n    'shmwrite',\\n    'shutdown',\\n    'sin',\\n    'sleep',\\n    'socket',\\n    'socketpair',\\n    'sort',\\n    'splice',\\n    'split',\\n    'sprintf',\\n    'sqrt',\\n    'srand',\\n    'stat',\\n    'state',\\n    'study',\\n    'sub',\\n    'substr',\\n    'symlink',\\n    'syscall',\\n    'sysopen',\\n    'sysread',\\n    'sysseek',\\n    'system',\\n    'syswrite',\\n    'tell',\\n    'telldir',\\n    'tie',\\n    'tied',\\n    'time',\\n    'times',\\n    'tr',\\n    'truncate',\\n    'uc',\\n    'ucfirst',\\n    'umask',\\n    'undef',\\n    'unless',\\n    'unlink',\\n    'unpack',\\n    'unshift',\\n    'untie',\\n    'until',\\n    'use',\\n    'utime',\\n    'values',\\n    'vec',\\n    'wait',\\n    'waitpid',\\n    'wantarray',\\n    'warn',\\n    'when',\\n    'while',\\n    'write',\\n    'x|0',\\n    'xor',\\n    'y|0'\\n  ];\\n\\n  // https://perldoc.perl.org/perlre#Modifiers\\n  const REGEX_MODIFIERS = /[dualxmsipngr]{0,12}/; // aa and xx are valid, making max length 12\\n  const PERL_KEYWORDS = {\\n    $pattern: /[\\\\w.]+/,\\n    keyword: KEYWORDS.join(\\\" \\\")\\n  };\\n  const SUBST = {\\n    className: 'subst',\\n    begin: '[$@]\\\\\\\\{',\\n    end: '\\\\\\\\}',\\n    keywords: PERL_KEYWORDS\\n  };\\n  const METHOD = {\\n    begin: /->\\\\{/,\\n    end: /\\\\}/\\n    // contains defined later\\n  };\\n  const VAR = { variants: [\\n    { begin: /\\\\$\\\\d/ },\\n    { begin: regex.concat(\\n      /[$%@](\\\\^\\\\w\\\\b|#\\\\w+(::\\\\w+)*|\\\\{\\\\w+\\\\}|\\\\w+(::\\\\w*)*)/,\\n      // negative look-ahead tries to avoid matching patterns that are not\\n      // Perl at all like $ident$, @ident@, etc.\\n      `(?![A-Za-z])(?![@$%])`\\n    ) },\\n    {\\n      begin: /[$%@][^\\\\s\\\\w{]/,\\n      relevance: 0\\n    }\\n  ] };\\n  const STRING_CONTAINS = [\\n    hljs.BACKSLASH_ESCAPE,\\n    SUBST,\\n    VAR\\n  ];\\n  const REGEX_DELIMS = [\\n    /!/,\\n    /\\\\//,\\n    /\\\\|/,\\n    /\\\\?/,\\n    /'/,\\n    /\\\"/, // valid but infrequent and weird\\n    /#/ // valid but infrequent and weird\\n  ];\\n  /**\\n   * @param {string|RegExp} prefix\\n   * @param {string|RegExp} open\\n   * @param {string|RegExp} close\\n   */\\n  const PAIRED_DOUBLE_RE = (prefix, open, close = '\\\\\\\\1') => {\\n    const middle = (close === '\\\\\\\\1')\\n      ? close\\n      : regex.concat(close, open);\\n    return regex.concat(\\n      regex.concat(\\\"(?:\\\", prefix, \\\")\\\"),\\n      open,\\n      /(?:\\\\\\\\.|[^\\\\\\\\\\\\/])*?/,\\n      middle,\\n      /(?:\\\\\\\\.|[^\\\\\\\\\\\\/])*?/,\\n      close,\\n      REGEX_MODIFIERS\\n    );\\n  };\\n  /**\\n   * @param {string|RegExp} prefix\\n   * @param {string|RegExp} open\\n   * @param {string|RegExp} close\\n   */\\n  const PAIRED_RE = (prefix, open, close) => {\\n    return regex.concat(\\n      regex.concat(\\\"(?:\\\", prefix, \\\")\\\"),\\n      open,\\n      /(?:\\\\\\\\.|[^\\\\\\\\\\\\/])*?/,\\n      close,\\n      REGEX_MODIFIERS\\n    );\\n  };\\n  const PERL_DEFAULT_CONTAINS = [\\n    VAR,\\n    hljs.HASH_COMMENT_MODE,\\n    hljs.COMMENT(\\n      /^=\\\\w/,\\n      /=cut/,\\n      { endsWithParent: true }\\n    ),\\n    METHOD,\\n    {\\n      className: 'string',\\n      contains: STRING_CONTAINS,\\n      variants: [\\n        {\\n          begin: 'q[qwxr]?\\\\\\\\s*\\\\\\\\(',\\n          end: '\\\\\\\\)',\\n          relevance: 5\\n        },\\n        {\\n          begin: 'q[qwxr]?\\\\\\\\s*\\\\\\\\[',\\n          end: '\\\\\\\\]',\\n          relevance: 5\\n        },\\n        {\\n          begin: 'q[qwxr]?\\\\\\\\s*\\\\\\\\{',\\n          end: '\\\\\\\\}',\\n          relevance: 5\\n        },\\n        {\\n          begin: 'q[qwxr]?\\\\\\\\s*\\\\\\\\|',\\n          end: '\\\\\\\\|',\\n          relevance: 5\\n        },\\n        {\\n          begin: 'q[qwxr]?\\\\\\\\s*<',\\n          end: '>',\\n          relevance: 5\\n        },\\n        {\\n          begin: 'qw\\\\\\\\s+q',\\n          end: 'q',\\n          relevance: 5\\n        },\\n        {\\n          begin: '\\\\'',\\n          end: '\\\\'',\\n          contains: [ hljs.BACKSLASH_ESCAPE ]\\n        },\\n        {\\n          begin: '\\\"',\\n          end: '\\\"'\\n        },\\n        {\\n          begin: '`',\\n          end: '`',\\n          contains: [ hljs.BACKSLASH_ESCAPE ]\\n        },\\n        {\\n          begin: /\\\\{\\\\w+\\\\}/,\\n          relevance: 0\\n        },\\n        {\\n          begin: '-?\\\\\\\\w+\\\\\\\\s*=>',\\n          relevance: 0\\n        }\\n      ]\\n    },\\n    {\\n      className: 'number',\\n      begin: '(\\\\\\\\b0[0-7_]+)|(\\\\\\\\b0x[0-9a-fA-F_]+)|(\\\\\\\\b[1-9][0-9_]*(\\\\\\\\.[0-9_]+)?)|[0_]\\\\\\\\b',\\n      relevance: 0\\n    },\\n    { // regexp container\\n      begin: '(\\\\\\\\/\\\\\\\\/|' + hljs.RE_STARTERS_RE + '|\\\\\\\\b(split|return|print|reverse|grep)\\\\\\\\b)\\\\\\\\s*',\\n      keywords: 'split return print reverse grep',\\n      relevance: 0,\\n      contains: [\\n        hljs.HASH_COMMENT_MODE,\\n        {\\n          className: 'regexp',\\n          variants: [\\n            // allow matching common delimiters\\n            { begin: PAIRED_DOUBLE_RE(\\\"s|tr|y\\\", regex.either(...REGEX_DELIMS, { capture: true })) },\\n            // and then paired delmis\\n            { begin: PAIRED_DOUBLE_RE(\\\"s|tr|y\\\", \\\"\\\\\\\\(\\\", \\\"\\\\\\\\)\\\") },\\n            { begin: PAIRED_DOUBLE_RE(\\\"s|tr|y\\\", \\\"\\\\\\\\[\\\", \\\"\\\\\\\\]\\\") },\\n            { begin: PAIRED_DOUBLE_RE(\\\"s|tr|y\\\", \\\"\\\\\\\\{\\\", \\\"\\\\\\\\}\\\") }\\n          ],\\n          relevance: 2\\n        },\\n        {\\n          className: 'regexp',\\n          variants: [\\n            {\\n              // could be a comment in many languages so do not count\\n              // as relevant\\n              begin: /(m|qr)\\\\/\\\\//,\\n              relevance: 0\\n            },\\n            // prefix is optional with /regex/\\n            { begin: PAIRED_RE(\\\"(?:m|qr)?\\\", /\\\\//, /\\\\//) },\\n            // allow matching common delimiters\\n            { begin: PAIRED_RE(\\\"m|qr\\\", regex.either(...REGEX_DELIMS, { capture: true }), /\\\\1/) },\\n            // allow common paired delmins\\n            { begin: PAIRED_RE(\\\"m|qr\\\", /\\\\(/, /\\\\)/) },\\n            { begin: PAIRED_RE(\\\"m|qr\\\", /\\\\[/, /\\\\]/) },\\n            { begin: PAIRED_RE(\\\"m|qr\\\", /\\\\{/, /\\\\}/) }\\n          ]\\n        }\\n      ]\\n    },\\n    {\\n      className: 'function',\\n      beginKeywords: 'sub',\\n      end: '(\\\\\\\\s*\\\\\\\\(.*?\\\\\\\\))?[;{]',\\n      excludeEnd: true,\\n      relevance: 5,\\n      contains: [ hljs.TITLE_MODE ]\\n    },\\n    {\\n      begin: '-\\\\\\\\w\\\\\\\\b',\\n      relevance: 0\\n    },\\n    {\\n      begin: \\\"^__DATA__$\\\",\\n      end: \\\"^__END__$\\\",\\n      subLanguage: 'mojolicious',\\n      contains: [\\n        {\\n          begin: \\\"^@@.*\\\",\\n          end: \\\"$\\\",\\n          className: \\\"comment\\\"\\n        }\\n      ]\\n    }\\n  ];\\n  SUBST.contains = PERL_DEFAULT_CONTAINS;\\n  METHOD.contains = PERL_DEFAULT_CONTAINS;\\n\\n  return {\\n    name: 'Perl',\\n    aliases: [\\n      'pl',\\n      'pm'\\n    ],\\n    keywords: PERL_KEYWORDS,\\n    contains: PERL_DEFAULT_CONTAINS\\n  };\\n}\\n\\nmodule.exports = perl;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/perl.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/pf.js\":\n/*!*******************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/pf.js ***!\n  \\*******************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Packet Filter config\\nDescription: pf.conf — packet filter configuration file (OpenBSD)\\nAuthor: Peter Piwowarski <oldlaptop654@aol.com>\\nWebsite: http://man.openbsd.org/pf.conf\\nCategory: config\\n*/\\n\\nfunction pf(hljs) {\\n  const MACRO = {\\n    className: 'variable',\\n    begin: /\\\\$[\\\\w\\\\d#@][\\\\w\\\\d_]*/,\\n    relevance: 0\\n  };\\n  const TABLE = {\\n    className: 'variable',\\n    begin: /<(?!\\\\/)/,\\n    end: />/\\n  };\\n\\n  return {\\n    name: 'Packet Filter config',\\n    aliases: [ 'pf.conf' ],\\n    keywords: {\\n      $pattern: /[a-z0-9_<>-]+/,\\n      built_in: /* block match pass are \\\"actions\\\" in pf.conf(5), the rest are\\n                 * lexically similar top-level commands.\\n                 */\\n        'block match pass load anchor|5 antispoof|10 set table',\\n      keyword:\\n        'in out log quick on rdomain inet inet6 proto from port os to route '\\n        + 'allow-opts divert-packet divert-reply divert-to flags group icmp-type '\\n        + 'icmp6-type label once probability recieved-on rtable prio queue '\\n        + 'tos tag tagged user keep fragment for os drop '\\n        + 'af-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robin '\\n        + 'source-hash static-port '\\n        + 'dup-to reply-to route-to '\\n        + 'parent bandwidth default min max qlimit '\\n        + 'block-policy debug fingerprints hostid limit loginterface optimization '\\n        + 'reassemble ruleset-optimization basic none profile skip state-defaults '\\n        + 'state-policy timeout '\\n        + 'const counters persist '\\n        + 'no modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppy '\\n        + 'source-track global rule max-src-nodes max-src-states max-src-conn '\\n        + 'max-src-conn-rate overload flush '\\n        + 'scrub|5 max-mss min-ttl no-df|10 random-id',\\n      literal:\\n        'all any no-route self urpf-failed egress|5 unknown'\\n    },\\n    contains: [\\n      hljs.HASH_COMMENT_MODE,\\n      hljs.NUMBER_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      MACRO,\\n      TABLE\\n    ]\\n  };\\n}\\n\\nmodule.exports = pf;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/pf.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/pgsql.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/pgsql.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: PostgreSQL and PL/pgSQL\\nAuthor: Egor Rogov (e.rogov@postgrespro.ru)\\nWebsite: https://www.postgresql.org/docs/11/sql.html\\nDescription:\\n    This language incorporates both PostgreSQL SQL dialect and PL/pgSQL language.\\n    It is based on PostgreSQL version 11. Some notes:\\n    - Text in double-dollar-strings is _always_ interpreted as some programming code. Text\\n      in ordinary quotes is _never_ interpreted that way and highlighted just as a string.\\n    - There are quite a bit \\\"special cases\\\". That's because many keywords are not strictly\\n      they are keywords in some contexts and ordinary identifiers in others. Only some\\n      of such cases are handled; you still can get some of your identifiers highlighted\\n      wrong way.\\n    - Function names deliberately are not highlighted. There is no way to tell function\\n      call from other constructs, hence we can't highlight _all_ function names. And\\n      some names highlighted while others not looks ugly.\\n*/\\n\\nfunction pgsql(hljs) {\\n  const COMMENT_MODE = hljs.COMMENT('--', '$');\\n  const UNQUOTED_IDENT = '[a-zA-Z_][a-zA-Z_0-9$]*';\\n  const DOLLAR_STRING = '\\\\\\\\$([a-zA-Z_]?|[a-zA-Z_][a-zA-Z_0-9]*)\\\\\\\\$';\\n  const LABEL = '<<\\\\\\\\s*' + UNQUOTED_IDENT + '\\\\\\\\s*>>';\\n\\n  const SQL_KW =\\n    // https://www.postgresql.org/docs/11/static/sql-keywords-appendix.html\\n    // https://www.postgresql.org/docs/11/static/sql-commands.html\\n    // SQL commands (starting words)\\n    'ABORT ALTER ANALYZE BEGIN CALL CHECKPOINT|10 CLOSE CLUSTER COMMENT COMMIT COPY CREATE DEALLOCATE DECLARE '\\n    + 'DELETE DISCARD DO DROP END EXECUTE EXPLAIN FETCH GRANT IMPORT INSERT LISTEN LOAD LOCK MOVE NOTIFY '\\n    + 'PREPARE REASSIGN|10 REFRESH REINDEX RELEASE RESET REVOKE ROLLBACK SAVEPOINT SECURITY SELECT SET SHOW '\\n    + 'START TRUNCATE UNLISTEN|10 UPDATE VACUUM|10 VALUES '\\n    // SQL commands (others)\\n    + 'AGGREGATE COLLATION CONVERSION|10 DATABASE DEFAULT PRIVILEGES DOMAIN TRIGGER EXTENSION FOREIGN '\\n    + 'WRAPPER|10 TABLE FUNCTION GROUP LANGUAGE LARGE OBJECT MATERIALIZED VIEW OPERATOR CLASS '\\n    + 'FAMILY POLICY PUBLICATION|10 ROLE RULE SCHEMA SEQUENCE SERVER STATISTICS SUBSCRIPTION SYSTEM '\\n    + 'TABLESPACE CONFIGURATION DICTIONARY PARSER TEMPLATE TYPE USER MAPPING PREPARED ACCESS '\\n    + 'METHOD CAST AS TRANSFORM TRANSACTION OWNED TO INTO SESSION AUTHORIZATION '\\n    + 'INDEX PROCEDURE ASSERTION '\\n    // additional reserved key words\\n    + 'ALL ANALYSE AND ANY ARRAY ASC ASYMMETRIC|10 BOTH CASE CHECK '\\n    + 'COLLATE COLUMN CONCURRENTLY|10 CONSTRAINT CROSS '\\n    + 'DEFERRABLE RANGE '\\n    + 'DESC DISTINCT ELSE EXCEPT FOR FREEZE|10 FROM FULL HAVING '\\n    + 'ILIKE IN INITIALLY INNER INTERSECT IS ISNULL JOIN LATERAL LEADING LIKE LIMIT '\\n    + 'NATURAL NOT NOTNULL NULL OFFSET ON ONLY OR ORDER OUTER OVERLAPS PLACING PRIMARY '\\n    + 'REFERENCES RETURNING SIMILAR SOME SYMMETRIC TABLESAMPLE THEN '\\n    + 'TRAILING UNION UNIQUE USING VARIADIC|10 VERBOSE WHEN WHERE WINDOW WITH '\\n    // some of non-reserved (which are used in clauses or as PL/pgSQL keyword)\\n    + 'BY RETURNS INOUT OUT SETOF|10 IF STRICT CURRENT CONTINUE OWNER LOCATION OVER PARTITION WITHIN '\\n    + 'BETWEEN ESCAPE EXTERNAL INVOKER DEFINER WORK RENAME VERSION CONNECTION CONNECT '\\n    + 'TABLES TEMP TEMPORARY FUNCTIONS SEQUENCES TYPES SCHEMAS OPTION CASCADE RESTRICT ADD ADMIN '\\n    + 'EXISTS VALID VALIDATE ENABLE DISABLE REPLICA|10 ALWAYS PASSING COLUMNS PATH '\\n    + 'REF VALUE OVERRIDING IMMUTABLE STABLE VOLATILE BEFORE AFTER EACH ROW PROCEDURAL '\\n    + 'ROUTINE NO HANDLER VALIDATOR OPTIONS STORAGE OIDS|10 WITHOUT INHERIT DEPENDS CALLED '\\n    + 'INPUT LEAKPROOF|10 COST ROWS NOWAIT SEARCH UNTIL ENCRYPTED|10 PASSWORD CONFLICT|10 '\\n    + 'INSTEAD INHERITS CHARACTERISTICS WRITE CURSOR ALSO STATEMENT SHARE EXCLUSIVE INLINE '\\n    + 'ISOLATION REPEATABLE READ COMMITTED SERIALIZABLE UNCOMMITTED LOCAL GLOBAL SQL PROCEDURES '\\n    + 'RECURSIVE SNAPSHOT ROLLUP CUBE TRUSTED|10 INCLUDE FOLLOWING PRECEDING UNBOUNDED RANGE GROUPS '\\n    + 'UNENCRYPTED|10 SYSID FORMAT DELIMITER HEADER QUOTE ENCODING FILTER OFF '\\n    // some parameters of VACUUM/ANALYZE/EXPLAIN\\n    + 'FORCE_QUOTE FORCE_NOT_NULL FORCE_NULL COSTS BUFFERS TIMING SUMMARY DISABLE_PAGE_SKIPPING '\\n    //\\n    + 'RESTART CYCLE GENERATED IDENTITY DEFERRED IMMEDIATE LEVEL LOGGED UNLOGGED '\\n    + 'OF NOTHING NONE EXCLUDE ATTRIBUTE '\\n    // from GRANT (not keywords actually)\\n    + 'USAGE ROUTINES '\\n    // actually literals, but look better this way (due to IS TRUE, IS FALSE, ISNULL etc)\\n    + 'TRUE FALSE NAN INFINITY ';\\n\\n  const ROLE_ATTRS = // only those not in keywrods already\\n    'SUPERUSER NOSUPERUSER CREATEDB NOCREATEDB CREATEROLE NOCREATEROLE INHERIT NOINHERIT '\\n    + 'LOGIN NOLOGIN REPLICATION NOREPLICATION BYPASSRLS NOBYPASSRLS ';\\n\\n  const PLPGSQL_KW =\\n    'ALIAS BEGIN CONSTANT DECLARE END EXCEPTION RETURN PERFORM|10 RAISE GET DIAGNOSTICS '\\n    + 'STACKED|10 FOREACH LOOP ELSIF EXIT WHILE REVERSE SLICE DEBUG LOG INFO NOTICE WARNING ASSERT '\\n    + 'OPEN ';\\n\\n  const TYPES =\\n    // https://www.postgresql.org/docs/11/static/datatype.html\\n    'BIGINT INT8 BIGSERIAL SERIAL8 BIT VARYING VARBIT BOOLEAN BOOL BOX BYTEA CHARACTER CHAR VARCHAR '\\n    + 'CIDR CIRCLE DATE DOUBLE PRECISION FLOAT8 FLOAT INET INTEGER INT INT4 INTERVAL JSON JSONB LINE LSEG|10 '\\n    + 'MACADDR MACADDR8 MONEY NUMERIC DEC DECIMAL PATH POINT POLYGON REAL FLOAT4 SMALLINT INT2 '\\n    + 'SMALLSERIAL|10 SERIAL2|10 SERIAL|10 SERIAL4|10 TEXT TIME ZONE TIMETZ|10 TIMESTAMP TIMESTAMPTZ|10 TSQUERY|10 TSVECTOR|10 '\\n    + 'TXID_SNAPSHOT|10 UUID XML NATIONAL NCHAR '\\n    + 'INT4RANGE|10 INT8RANGE|10 NUMRANGE|10 TSRANGE|10 TSTZRANGE|10 DATERANGE|10 '\\n    // pseudotypes\\n    + 'ANYELEMENT ANYARRAY ANYNONARRAY ANYENUM ANYRANGE CSTRING INTERNAL '\\n    + 'RECORD PG_DDL_COMMAND VOID UNKNOWN OPAQUE REFCURSOR '\\n    // spec. type\\n    + 'NAME '\\n    // OID-types\\n    + 'OID REGPROC|10 REGPROCEDURE|10 REGOPER|10 REGOPERATOR|10 REGCLASS|10 REGTYPE|10 REGROLE|10 '\\n    + 'REGNAMESPACE|10 REGCONFIG|10 REGDICTIONARY|10 ';// +\\n\\n  const TYPES_RE =\\n    TYPES.trim()\\n      .split(' ')\\n      .map(function(val) { return val.split('|')[0]; })\\n      .join('|');\\n\\n  const SQL_BI =\\n    'CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURRENT_CATALOG|10 CURRENT_DATE LOCALTIME LOCALTIMESTAMP '\\n    + 'CURRENT_ROLE|10 CURRENT_SCHEMA|10 SESSION_USER PUBLIC ';\\n\\n  const PLPGSQL_BI =\\n    'FOUND NEW OLD TG_NAME|10 TG_WHEN|10 TG_LEVEL|10 TG_OP|10 TG_RELID|10 TG_RELNAME|10 '\\n    + 'TG_TABLE_NAME|10 TG_TABLE_SCHEMA|10 TG_NARGS|10 TG_ARGV|10 TG_EVENT|10 TG_TAG|10 '\\n    // get diagnostics\\n    + 'ROW_COUNT RESULT_OID|10 PG_CONTEXT|10 RETURNED_SQLSTATE COLUMN_NAME CONSTRAINT_NAME '\\n    + 'PG_DATATYPE_NAME|10 MESSAGE_TEXT TABLE_NAME SCHEMA_NAME PG_EXCEPTION_DETAIL|10 '\\n    + 'PG_EXCEPTION_HINT|10 PG_EXCEPTION_CONTEXT|10 ';\\n\\n  const PLPGSQL_EXCEPTIONS =\\n    // exceptions https://www.postgresql.org/docs/current/static/errcodes-appendix.html\\n    'SQLSTATE SQLERRM|10 '\\n    + 'SUCCESSFUL_COMPLETION WARNING DYNAMIC_RESULT_SETS_RETURNED IMPLICIT_ZERO_BIT_PADDING '\\n    + 'NULL_VALUE_ELIMINATED_IN_SET_FUNCTION PRIVILEGE_NOT_GRANTED PRIVILEGE_NOT_REVOKED '\\n    + 'STRING_DATA_RIGHT_TRUNCATION DEPRECATED_FEATURE NO_DATA NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED '\\n    + 'SQL_STATEMENT_NOT_YET_COMPLETE CONNECTION_EXCEPTION CONNECTION_DOES_NOT_EXIST CONNECTION_FAILURE '\\n    + 'SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION '\\n    + 'TRANSACTION_RESOLUTION_UNKNOWN PROTOCOL_VIOLATION TRIGGERED_ACTION_EXCEPTION FEATURE_NOT_SUPPORTED '\\n    + 'INVALID_TRANSACTION_INITIATION LOCATOR_EXCEPTION INVALID_LOCATOR_SPECIFICATION INVALID_GRANTOR '\\n    + 'INVALID_GRANT_OPERATION INVALID_ROLE_SPECIFICATION DIAGNOSTICS_EXCEPTION '\\n    + 'STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER CASE_NOT_FOUND CARDINALITY_VIOLATION '\\n    + 'DATA_EXCEPTION ARRAY_SUBSCRIPT_ERROR CHARACTER_NOT_IN_REPERTOIRE DATETIME_FIELD_OVERFLOW '\\n    + 'DIVISION_BY_ZERO ERROR_IN_ASSIGNMENT ESCAPE_CHARACTER_CONFLICT INDICATOR_OVERFLOW '\\n    + 'INTERVAL_FIELD_OVERFLOW INVALID_ARGUMENT_FOR_LOGARITHM INVALID_ARGUMENT_FOR_NTILE_FUNCTION '\\n    + 'INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION INVALID_ARGUMENT_FOR_POWER_FUNCTION '\\n    + 'INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION INVALID_CHARACTER_VALUE_FOR_CAST '\\n    + 'INVALID_DATETIME_FORMAT INVALID_ESCAPE_CHARACTER INVALID_ESCAPE_OCTET INVALID_ESCAPE_SEQUENCE '\\n    + 'NONSTANDARD_USE_OF_ESCAPE_CHARACTER INVALID_INDICATOR_PARAMETER_VALUE INVALID_PARAMETER_VALUE '\\n    + 'INVALID_REGULAR_EXPRESSION INVALID_ROW_COUNT_IN_LIMIT_CLAUSE '\\n    + 'INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE INVALID_TABLESAMPLE_ARGUMENT INVALID_TABLESAMPLE_REPEAT '\\n    + 'INVALID_TIME_ZONE_DISPLACEMENT_VALUE INVALID_USE_OF_ESCAPE_CHARACTER MOST_SPECIFIC_TYPE_MISMATCH '\\n    + 'NULL_VALUE_NOT_ALLOWED NULL_VALUE_NO_INDICATOR_PARAMETER NUMERIC_VALUE_OUT_OF_RANGE '\\n    + 'SEQUENCE_GENERATOR_LIMIT_EXCEEDED STRING_DATA_LENGTH_MISMATCH STRING_DATA_RIGHT_TRUNCATION '\\n    + 'SUBSTRING_ERROR TRIM_ERROR UNTERMINATED_C_STRING ZERO_LENGTH_CHARACTER_STRING '\\n    + 'FLOATING_POINT_EXCEPTION INVALID_TEXT_REPRESENTATION INVALID_BINARY_REPRESENTATION '\\n    + 'BAD_COPY_FILE_FORMAT UNTRANSLATABLE_CHARACTER NOT_AN_XML_DOCUMENT INVALID_XML_DOCUMENT '\\n    + 'INVALID_XML_CONTENT INVALID_XML_COMMENT INVALID_XML_PROCESSING_INSTRUCTION '\\n    + 'INTEGRITY_CONSTRAINT_VIOLATION RESTRICT_VIOLATION NOT_NULL_VIOLATION FOREIGN_KEY_VIOLATION '\\n    + 'UNIQUE_VIOLATION CHECK_VIOLATION EXCLUSION_VIOLATION INVALID_CURSOR_STATE '\\n    + 'INVALID_TRANSACTION_STATE ACTIVE_SQL_TRANSACTION BRANCH_TRANSACTION_ALREADY_ACTIVE '\\n    + 'HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION '\\n    + 'INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION '\\n    + 'NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION READ_ONLY_SQL_TRANSACTION '\\n    + 'SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED NO_ACTIVE_SQL_TRANSACTION '\\n    + 'IN_FAILED_SQL_TRANSACTION IDLE_IN_TRANSACTION_SESSION_TIMEOUT INVALID_SQL_STATEMENT_NAME '\\n    + 'TRIGGERED_DATA_CHANGE_VIOLATION INVALID_AUTHORIZATION_SPECIFICATION INVALID_PASSWORD '\\n    + 'DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST DEPENDENT_OBJECTS_STILL_EXIST '\\n    + 'INVALID_TRANSACTION_TERMINATION SQL_ROUTINE_EXCEPTION FUNCTION_EXECUTED_NO_RETURN_STATEMENT '\\n    + 'MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED '\\n    + 'READING_SQL_DATA_NOT_PERMITTED INVALID_CURSOR_NAME EXTERNAL_ROUTINE_EXCEPTION '\\n    + 'CONTAINING_SQL_NOT_PERMITTED MODIFYING_SQL_DATA_NOT_PERMITTED '\\n    + 'PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED '\\n    + 'EXTERNAL_ROUTINE_INVOCATION_EXCEPTION INVALID_SQLSTATE_RETURNED NULL_VALUE_NOT_ALLOWED '\\n    + 'TRIGGER_PROTOCOL_VIOLATED SRF_PROTOCOL_VIOLATED EVENT_TRIGGER_PROTOCOL_VIOLATED '\\n    + 'SAVEPOINT_EXCEPTION INVALID_SAVEPOINT_SPECIFICATION INVALID_CATALOG_NAME '\\n    + 'INVALID_SCHEMA_NAME TRANSACTION_ROLLBACK TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION '\\n    + 'SERIALIZATION_FAILURE STATEMENT_COMPLETION_UNKNOWN DEADLOCK_DETECTED '\\n    + 'SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION SYNTAX_ERROR INSUFFICIENT_PRIVILEGE CANNOT_COERCE '\\n    + 'GROUPING_ERROR WINDOWING_ERROR INVALID_RECURSION INVALID_FOREIGN_KEY INVALID_NAME '\\n    + 'NAME_TOO_LONG RESERVED_NAME DATATYPE_MISMATCH INDETERMINATE_DATATYPE COLLATION_MISMATCH '\\n    + 'INDETERMINATE_COLLATION WRONG_OBJECT_TYPE GENERATED_ALWAYS UNDEFINED_COLUMN '\\n    + 'UNDEFINED_FUNCTION UNDEFINED_TABLE UNDEFINED_PARAMETER UNDEFINED_OBJECT '\\n    + 'DUPLICATE_COLUMN DUPLICATE_CURSOR DUPLICATE_DATABASE DUPLICATE_FUNCTION '\\n    + 'DUPLICATE_PREPARED_STATEMENT DUPLICATE_SCHEMA DUPLICATE_TABLE DUPLICATE_ALIAS '\\n    + 'DUPLICATE_OBJECT AMBIGUOUS_COLUMN AMBIGUOUS_FUNCTION AMBIGUOUS_PARAMETER AMBIGUOUS_ALIAS '\\n    + 'INVALID_COLUMN_REFERENCE INVALID_COLUMN_DEFINITION INVALID_CURSOR_DEFINITION '\\n    + 'INVALID_DATABASE_DEFINITION INVALID_FUNCTION_DEFINITION '\\n    + 'INVALID_PREPARED_STATEMENT_DEFINITION INVALID_SCHEMA_DEFINITION INVALID_TABLE_DEFINITION '\\n    + 'INVALID_OBJECT_DEFINITION WITH_CHECK_OPTION_VIOLATION INSUFFICIENT_RESOURCES DISK_FULL '\\n    + 'OUT_OF_MEMORY TOO_MANY_CONNECTIONS CONFIGURATION_LIMIT_EXCEEDED PROGRAM_LIMIT_EXCEEDED '\\n    + 'STATEMENT_TOO_COMPLEX TOO_MANY_COLUMNS TOO_MANY_ARGUMENTS OBJECT_NOT_IN_PREREQUISITE_STATE '\\n    + 'OBJECT_IN_USE CANT_CHANGE_RUNTIME_PARAM LOCK_NOT_AVAILABLE OPERATOR_INTERVENTION '\\n    + 'QUERY_CANCELED ADMIN_SHUTDOWN CRASH_SHUTDOWN CANNOT_CONNECT_NOW DATABASE_DROPPED '\\n    + 'SYSTEM_ERROR IO_ERROR UNDEFINED_FILE DUPLICATE_FILE SNAPSHOT_TOO_OLD CONFIG_FILE_ERROR '\\n    + 'LOCK_FILE_EXISTS FDW_ERROR FDW_COLUMN_NAME_NOT_FOUND FDW_DYNAMIC_PARAMETER_VALUE_NEEDED '\\n    + 'FDW_FUNCTION_SEQUENCE_ERROR FDW_INCONSISTENT_DESCRIPTOR_INFORMATION '\\n    + 'FDW_INVALID_ATTRIBUTE_VALUE FDW_INVALID_COLUMN_NAME FDW_INVALID_COLUMN_NUMBER '\\n    + 'FDW_INVALID_DATA_TYPE FDW_INVALID_DATA_TYPE_DESCRIPTORS '\\n    + 'FDW_INVALID_DESCRIPTOR_FIELD_IDENTIFIER FDW_INVALID_HANDLE FDW_INVALID_OPTION_INDEX '\\n    + 'FDW_INVALID_OPTION_NAME FDW_INVALID_STRING_LENGTH_OR_BUFFER_LENGTH '\\n    + 'FDW_INVALID_STRING_FORMAT FDW_INVALID_USE_OF_NULL_POINTER FDW_TOO_MANY_HANDLES '\\n    + 'FDW_OUT_OF_MEMORY FDW_NO_SCHEMAS FDW_OPTION_NAME_NOT_FOUND FDW_REPLY_HANDLE '\\n    + 'FDW_SCHEMA_NOT_FOUND FDW_TABLE_NOT_FOUND FDW_UNABLE_TO_CREATE_EXECUTION '\\n    + 'FDW_UNABLE_TO_CREATE_REPLY FDW_UNABLE_TO_ESTABLISH_CONNECTION PLPGSQL_ERROR '\\n    + 'RAISE_EXCEPTION NO_DATA_FOUND TOO_MANY_ROWS ASSERT_FAILURE INTERNAL_ERROR DATA_CORRUPTED '\\n    + 'INDEX_CORRUPTED ';\\n\\n  const FUNCTIONS =\\n    // https://www.postgresql.org/docs/11/static/functions-aggregate.html\\n    'ARRAY_AGG AVG BIT_AND BIT_OR BOOL_AND BOOL_OR COUNT EVERY JSON_AGG JSONB_AGG JSON_OBJECT_AGG '\\n    + 'JSONB_OBJECT_AGG MAX MIN MODE STRING_AGG SUM XMLAGG '\\n    + 'CORR COVAR_POP COVAR_SAMP REGR_AVGX REGR_AVGY REGR_COUNT REGR_INTERCEPT REGR_R2 REGR_SLOPE '\\n    + 'REGR_SXX REGR_SXY REGR_SYY STDDEV STDDEV_POP STDDEV_SAMP VARIANCE VAR_POP VAR_SAMP '\\n    + 'PERCENTILE_CONT PERCENTILE_DISC '\\n    // https://www.postgresql.org/docs/11/static/functions-window.html\\n    + 'ROW_NUMBER RANK DENSE_RANK PERCENT_RANK CUME_DIST NTILE LAG LEAD FIRST_VALUE LAST_VALUE NTH_VALUE '\\n    // https://www.postgresql.org/docs/11/static/functions-comparison.html\\n    + 'NUM_NONNULLS NUM_NULLS '\\n    // https://www.postgresql.org/docs/11/static/functions-math.html\\n    + 'ABS CBRT CEIL CEILING DEGREES DIV EXP FLOOR LN LOG MOD PI POWER RADIANS ROUND SCALE SIGN SQRT '\\n    + 'TRUNC WIDTH_BUCKET '\\n    + 'RANDOM SETSEED '\\n    + 'ACOS ACOSD ASIN ASIND ATAN ATAND ATAN2 ATAN2D COS COSD COT COTD SIN SIND TAN TAND '\\n    // https://www.postgresql.org/docs/11/static/functions-string.html\\n    + 'BIT_LENGTH CHAR_LENGTH CHARACTER_LENGTH LOWER OCTET_LENGTH OVERLAY POSITION SUBSTRING TREAT TRIM UPPER '\\n    + 'ASCII BTRIM CHR CONCAT CONCAT_WS CONVERT CONVERT_FROM CONVERT_TO DECODE ENCODE INITCAP '\\n    + 'LEFT LENGTH LPAD LTRIM MD5 PARSE_IDENT PG_CLIENT_ENCODING QUOTE_IDENT|10 QUOTE_LITERAL|10 '\\n    + 'QUOTE_NULLABLE|10 REGEXP_MATCH REGEXP_MATCHES REGEXP_REPLACE REGEXP_SPLIT_TO_ARRAY '\\n    + 'REGEXP_SPLIT_TO_TABLE REPEAT REPLACE REVERSE RIGHT RPAD RTRIM SPLIT_PART STRPOS SUBSTR '\\n    + 'TO_ASCII TO_HEX TRANSLATE '\\n    // https://www.postgresql.org/docs/11/static/functions-binarystring.html\\n    + 'OCTET_LENGTH GET_BIT GET_BYTE SET_BIT SET_BYTE '\\n    // https://www.postgresql.org/docs/11/static/functions-formatting.html\\n    + 'TO_CHAR TO_DATE TO_NUMBER TO_TIMESTAMP '\\n    // https://www.postgresql.org/docs/11/static/functions-datetime.html\\n    + 'AGE CLOCK_TIMESTAMP|10 DATE_PART DATE_TRUNC ISFINITE JUSTIFY_DAYS JUSTIFY_HOURS JUSTIFY_INTERVAL '\\n    + 'MAKE_DATE MAKE_INTERVAL|10 MAKE_TIME MAKE_TIMESTAMP|10 MAKE_TIMESTAMPTZ|10 NOW STATEMENT_TIMESTAMP|10 '\\n    + 'TIMEOFDAY TRANSACTION_TIMESTAMP|10 '\\n    // https://www.postgresql.org/docs/11/static/functions-enum.html\\n    + 'ENUM_FIRST ENUM_LAST ENUM_RANGE '\\n    // https://www.postgresql.org/docs/11/static/functions-geometry.html\\n    + 'AREA CENTER DIAMETER HEIGHT ISCLOSED ISOPEN NPOINTS PCLOSE POPEN RADIUS WIDTH '\\n    + 'BOX BOUND_BOX CIRCLE LINE LSEG PATH POLYGON '\\n    // https://www.postgresql.org/docs/11/static/functions-net.html\\n    + 'ABBREV BROADCAST HOST HOSTMASK MASKLEN NETMASK NETWORK SET_MASKLEN TEXT INET_SAME_FAMILY '\\n    + 'INET_MERGE MACADDR8_SET7BIT '\\n    // https://www.postgresql.org/docs/11/static/functions-textsearch.html\\n    + 'ARRAY_TO_TSVECTOR GET_CURRENT_TS_CONFIG NUMNODE PLAINTO_TSQUERY PHRASETO_TSQUERY WEBSEARCH_TO_TSQUERY '\\n    + 'QUERYTREE SETWEIGHT STRIP TO_TSQUERY TO_TSVECTOR JSON_TO_TSVECTOR JSONB_TO_TSVECTOR TS_DELETE '\\n    + 'TS_FILTER TS_HEADLINE TS_RANK TS_RANK_CD TS_REWRITE TSQUERY_PHRASE TSVECTOR_TO_ARRAY '\\n    + 'TSVECTOR_UPDATE_TRIGGER TSVECTOR_UPDATE_TRIGGER_COLUMN '\\n    // https://www.postgresql.org/docs/11/static/functions-xml.html\\n    + 'XMLCOMMENT XMLCONCAT XMLELEMENT XMLFOREST XMLPI XMLROOT '\\n    + 'XMLEXISTS XML_IS_WELL_FORMED XML_IS_WELL_FORMED_DOCUMENT XML_IS_WELL_FORMED_CONTENT '\\n    + 'XPATH XPATH_EXISTS XMLTABLE XMLNAMESPACES '\\n    + 'TABLE_TO_XML TABLE_TO_XMLSCHEMA TABLE_TO_XML_AND_XMLSCHEMA '\\n    + 'QUERY_TO_XML QUERY_TO_XMLSCHEMA QUERY_TO_XML_AND_XMLSCHEMA '\\n    + 'CURSOR_TO_XML CURSOR_TO_XMLSCHEMA '\\n    + 'SCHEMA_TO_XML SCHEMA_TO_XMLSCHEMA SCHEMA_TO_XML_AND_XMLSCHEMA '\\n    + 'DATABASE_TO_XML DATABASE_TO_XMLSCHEMA DATABASE_TO_XML_AND_XMLSCHEMA '\\n    + 'XMLATTRIBUTES '\\n    // https://www.postgresql.org/docs/11/static/functions-json.html\\n    + 'TO_JSON TO_JSONB ARRAY_TO_JSON ROW_TO_JSON JSON_BUILD_ARRAY JSONB_BUILD_ARRAY JSON_BUILD_OBJECT '\\n    + 'JSONB_BUILD_OBJECT JSON_OBJECT JSONB_OBJECT JSON_ARRAY_LENGTH JSONB_ARRAY_LENGTH JSON_EACH '\\n    + 'JSONB_EACH JSON_EACH_TEXT JSONB_EACH_TEXT JSON_EXTRACT_PATH JSONB_EXTRACT_PATH '\\n    + 'JSON_OBJECT_KEYS JSONB_OBJECT_KEYS JSON_POPULATE_RECORD JSONB_POPULATE_RECORD JSON_POPULATE_RECORDSET '\\n    + 'JSONB_POPULATE_RECORDSET JSON_ARRAY_ELEMENTS JSONB_ARRAY_ELEMENTS JSON_ARRAY_ELEMENTS_TEXT '\\n    + 'JSONB_ARRAY_ELEMENTS_TEXT JSON_TYPEOF JSONB_TYPEOF JSON_TO_RECORD JSONB_TO_RECORD JSON_TO_RECORDSET '\\n    + 'JSONB_TO_RECORDSET JSON_STRIP_NULLS JSONB_STRIP_NULLS JSONB_SET JSONB_INSERT JSONB_PRETTY '\\n    // https://www.postgresql.org/docs/11/static/functions-sequence.html\\n    + 'CURRVAL LASTVAL NEXTVAL SETVAL '\\n    // https://www.postgresql.org/docs/11/static/functions-conditional.html\\n    + 'COALESCE NULLIF GREATEST LEAST '\\n    // https://www.postgresql.org/docs/11/static/functions-array.html\\n    + 'ARRAY_APPEND ARRAY_CAT ARRAY_NDIMS ARRAY_DIMS ARRAY_FILL ARRAY_LENGTH ARRAY_LOWER ARRAY_POSITION '\\n    + 'ARRAY_POSITIONS ARRAY_PREPEND ARRAY_REMOVE ARRAY_REPLACE ARRAY_TO_STRING ARRAY_UPPER CARDINALITY '\\n    + 'STRING_TO_ARRAY UNNEST '\\n    // https://www.postgresql.org/docs/11/static/functions-range.html\\n    + 'ISEMPTY LOWER_INC UPPER_INC LOWER_INF UPPER_INF RANGE_MERGE '\\n    // https://www.postgresql.org/docs/11/static/functions-srf.html\\n    + 'GENERATE_SERIES GENERATE_SUBSCRIPTS '\\n    // https://www.postgresql.org/docs/11/static/functions-info.html\\n    + 'CURRENT_DATABASE CURRENT_QUERY CURRENT_SCHEMA|10 CURRENT_SCHEMAS|10 INET_CLIENT_ADDR INET_CLIENT_PORT '\\n    + 'INET_SERVER_ADDR INET_SERVER_PORT ROW_SECURITY_ACTIVE FORMAT_TYPE '\\n    + 'TO_REGCLASS TO_REGPROC TO_REGPROCEDURE TO_REGOPER TO_REGOPERATOR TO_REGTYPE TO_REGNAMESPACE TO_REGROLE '\\n    + 'COL_DESCRIPTION OBJ_DESCRIPTION SHOBJ_DESCRIPTION '\\n    + 'TXID_CURRENT TXID_CURRENT_IF_ASSIGNED TXID_CURRENT_SNAPSHOT TXID_SNAPSHOT_XIP TXID_SNAPSHOT_XMAX '\\n    + 'TXID_SNAPSHOT_XMIN TXID_VISIBLE_IN_SNAPSHOT TXID_STATUS '\\n    // https://www.postgresql.org/docs/11/static/functions-admin.html\\n    + 'CURRENT_SETTING SET_CONFIG BRIN_SUMMARIZE_NEW_VALUES BRIN_SUMMARIZE_RANGE BRIN_DESUMMARIZE_RANGE '\\n    + 'GIN_CLEAN_PENDING_LIST '\\n    // https://www.postgresql.org/docs/11/static/functions-trigger.html\\n    + 'SUPPRESS_REDUNDANT_UPDATES_TRIGGER '\\n    // ihttps://www.postgresql.org/docs/devel/static/lo-funcs.html\\n    + 'LO_FROM_BYTEA LO_PUT LO_GET LO_CREAT LO_CREATE LO_UNLINK LO_IMPORT LO_EXPORT LOREAD LOWRITE '\\n    //\\n    + 'GROUPING CAST ';\\n\\n  const FUNCTIONS_RE =\\n      FUNCTIONS.trim()\\n        .split(' ')\\n        .map(function(val) { return val.split('|')[0]; })\\n        .join('|');\\n\\n  return {\\n    name: 'PostgreSQL',\\n    aliases: [\\n      'postgres',\\n      'postgresql'\\n    ],\\n    supersetOf: \\\"sql\\\",\\n    case_insensitive: true,\\n    keywords: {\\n      keyword:\\n            SQL_KW + PLPGSQL_KW + ROLE_ATTRS,\\n      built_in:\\n            SQL_BI + PLPGSQL_BI + PLPGSQL_EXCEPTIONS\\n    },\\n    // Forbid some cunstructs from other languages to improve autodetect. In fact\\n    // \\\"[a-z]:\\\" is legal (as part of array slice), but improbabal.\\n    illegal: /:==|\\\\W\\\\s*\\\\(\\\\*|(^|\\\\s)\\\\$[a-z]|\\\\{\\\\{|[a-z]:\\\\s*$|\\\\.\\\\.\\\\.|TO:|DO:/,\\n    contains: [\\n      // special handling of some words, which are reserved only in some contexts\\n      {\\n        className: 'keyword',\\n        variants: [\\n          { begin: /\\\\bTEXT\\\\s*SEARCH\\\\b/ },\\n          { begin: /\\\\b(PRIMARY|FOREIGN|FOR(\\\\s+NO)?)\\\\s+KEY\\\\b/ },\\n          { begin: /\\\\bPARALLEL\\\\s+(UNSAFE|RESTRICTED|SAFE)\\\\b/ },\\n          { begin: /\\\\bSTORAGE\\\\s+(PLAIN|EXTERNAL|EXTENDED|MAIN)\\\\b/ },\\n          { begin: /\\\\bMATCH\\\\s+(FULL|PARTIAL|SIMPLE)\\\\b/ },\\n          { begin: /\\\\bNULLS\\\\s+(FIRST|LAST)\\\\b/ },\\n          { begin: /\\\\bEVENT\\\\s+TRIGGER\\\\b/ },\\n          { begin: /\\\\b(MAPPING|OR)\\\\s+REPLACE\\\\b/ },\\n          { begin: /\\\\b(FROM|TO)\\\\s+(PROGRAM|STDIN|STDOUT)\\\\b/ },\\n          { begin: /\\\\b(SHARE|EXCLUSIVE)\\\\s+MODE\\\\b/ },\\n          { begin: /\\\\b(LEFT|RIGHT)\\\\s+(OUTER\\\\s+)?JOIN\\\\b/ },\\n          { begin: /\\\\b(FETCH|MOVE)\\\\s+(NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE|FORWARD|BACKWARD)\\\\b/ },\\n          { begin: /\\\\bPRESERVE\\\\s+ROWS\\\\b/ },\\n          { begin: /\\\\bDISCARD\\\\s+PLANS\\\\b/ },\\n          { begin: /\\\\bREFERENCING\\\\s+(OLD|NEW)\\\\b/ },\\n          { begin: /\\\\bSKIP\\\\s+LOCKED\\\\b/ },\\n          { begin: /\\\\bGROUPING\\\\s+SETS\\\\b/ },\\n          { begin: /\\\\b(BINARY|INSENSITIVE|SCROLL|NO\\\\s+SCROLL)\\\\s+(CURSOR|FOR)\\\\b/ },\\n          { begin: /\\\\b(WITH|WITHOUT)\\\\s+HOLD\\\\b/ },\\n          { begin: /\\\\bWITH\\\\s+(CASCADED|LOCAL)\\\\s+CHECK\\\\s+OPTION\\\\b/ },\\n          { begin: /\\\\bEXCLUDE\\\\s+(TIES|NO\\\\s+OTHERS)\\\\b/ },\\n          { begin: /\\\\bFORMAT\\\\s+(TEXT|XML|JSON|YAML)\\\\b/ },\\n          { begin: /\\\\bSET\\\\s+((SESSION|LOCAL)\\\\s+)?NAMES\\\\b/ },\\n          { begin: /\\\\bIS\\\\s+(NOT\\\\s+)?UNKNOWN\\\\b/ },\\n          { begin: /\\\\bSECURITY\\\\s+LABEL\\\\b/ },\\n          { begin: /\\\\bSTANDALONE\\\\s+(YES|NO|NO\\\\s+VALUE)\\\\b/ },\\n          { begin: /\\\\bWITH\\\\s+(NO\\\\s+)?DATA\\\\b/ },\\n          { begin: /\\\\b(FOREIGN|SET)\\\\s+DATA\\\\b/ },\\n          { begin: /\\\\bSET\\\\s+(CATALOG|CONSTRAINTS)\\\\b/ },\\n          { begin: /\\\\b(WITH|FOR)\\\\s+ORDINALITY\\\\b/ },\\n          { begin: /\\\\bIS\\\\s+(NOT\\\\s+)?DOCUMENT\\\\b/ },\\n          { begin: /\\\\bXML\\\\s+OPTION\\\\s+(DOCUMENT|CONTENT)\\\\b/ },\\n          { begin: /\\\\b(STRIP|PRESERVE)\\\\s+WHITESPACE\\\\b/ },\\n          { begin: /\\\\bNO\\\\s+(ACTION|MAXVALUE|MINVALUE)\\\\b/ },\\n          { begin: /\\\\bPARTITION\\\\s+BY\\\\s+(RANGE|LIST|HASH)\\\\b/ },\\n          { begin: /\\\\bAT\\\\s+TIME\\\\s+ZONE\\\\b/ },\\n          { begin: /\\\\bGRANTED\\\\s+BY\\\\b/ },\\n          { begin: /\\\\bRETURN\\\\s+(QUERY|NEXT)\\\\b/ },\\n          { begin: /\\\\b(ATTACH|DETACH)\\\\s+PARTITION\\\\b/ },\\n          { begin: /\\\\bFORCE\\\\s+ROW\\\\s+LEVEL\\\\s+SECURITY\\\\b/ },\\n          { begin: /\\\\b(INCLUDING|EXCLUDING)\\\\s+(COMMENTS|CONSTRAINTS|DEFAULTS|IDENTITY|INDEXES|STATISTICS|STORAGE|ALL)\\\\b/ },\\n          { begin: /\\\\bAS\\\\s+(ASSIGNMENT|IMPLICIT|PERMISSIVE|RESTRICTIVE|ENUM|RANGE)\\\\b/ }\\n        ]\\n      },\\n      // functions named as keywords, followed by '('\\n      { begin: /\\\\b(FORMAT|FAMILY|VERSION)\\\\s*\\\\(/\\n        // keywords: { built_in: 'FORMAT FAMILY VERSION' }\\n      },\\n      // INCLUDE ( ... ) in index_parameters in CREATE TABLE\\n      {\\n        begin: /\\\\bINCLUDE\\\\s*\\\\(/,\\n        keywords: 'INCLUDE'\\n      },\\n      // not highlight RANGE if not in frame_clause (not 100% correct, but seems satisfactory)\\n      { begin: /\\\\bRANGE(?!\\\\s*(BETWEEN|UNBOUNDED|CURRENT|[-0-9]+))/ },\\n      // disable highlighting in commands CREATE AGGREGATE/COLLATION/DATABASE/OPERTOR/TEXT SEARCH .../TYPE\\n      // and in PL/pgSQL RAISE ... USING\\n      { begin: /\\\\b(VERSION|OWNER|TEMPLATE|TABLESPACE|CONNECTION\\\\s+LIMIT|PROCEDURE|RESTRICT|JOIN|PARSER|COPY|START|END|COLLATION|INPUT|ANALYZE|STORAGE|LIKE|DEFAULT|DELIMITER|ENCODING|COLUMN|CONSTRAINT|TABLE|SCHEMA)\\\\s*=/ },\\n      // PG_smth; HAS_some_PRIVILEGE\\n      {\\n        // className: 'built_in',\\n        begin: /\\\\b(PG_\\\\w+?|HAS_[A-Z_]+_PRIVILEGE)\\\\b/,\\n        relevance: 10\\n      },\\n      // extract\\n      {\\n        begin: /\\\\bEXTRACT\\\\s*\\\\(/,\\n        end: /\\\\bFROM\\\\b/,\\n        returnEnd: true,\\n        keywords: {\\n          // built_in: 'EXTRACT',\\n          type: 'CENTURY DAY DECADE DOW DOY EPOCH HOUR ISODOW ISOYEAR MICROSECONDS '\\n                        + 'MILLENNIUM MILLISECONDS MINUTE MONTH QUARTER SECOND TIMEZONE TIMEZONE_HOUR '\\n                        + 'TIMEZONE_MINUTE WEEK YEAR' }\\n      },\\n      // xmlelement, xmlpi - special NAME\\n      {\\n        begin: /\\\\b(XMLELEMENT|XMLPI)\\\\s*\\\\(\\\\s*NAME/,\\n        keywords: {\\n          // built_in: 'XMLELEMENT XMLPI',\\n          keyword: 'NAME' }\\n      },\\n      // xmlparse, xmlserialize\\n      {\\n        begin: /\\\\b(XMLPARSE|XMLSERIALIZE)\\\\s*\\\\(\\\\s*(DOCUMENT|CONTENT)/,\\n        keywords: {\\n          // built_in: 'XMLPARSE XMLSERIALIZE',\\n          keyword: 'DOCUMENT CONTENT' }\\n      },\\n      // Sequences. We actually skip everything between CACHE|INCREMENT|MAXVALUE|MINVALUE and\\n      // nearest following numeric constant. Without with trick we find a lot of \\\"keywords\\\"\\n      // in 'avrasm' autodetection test...\\n      {\\n        beginKeywords: 'CACHE INCREMENT MAXVALUE MINVALUE',\\n        end: hljs.C_NUMBER_RE,\\n        returnEnd: true,\\n        keywords: 'BY CACHE INCREMENT MAXVALUE MINVALUE'\\n      },\\n      // WITH|WITHOUT TIME ZONE as part of datatype\\n      {\\n        className: 'type',\\n        begin: /\\\\b(WITH|WITHOUT)\\\\s+TIME\\\\s+ZONE\\\\b/\\n      },\\n      // INTERVAL optional fields\\n      {\\n        className: 'type',\\n        begin: /\\\\bINTERVAL\\\\s+(YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)(\\\\s+TO\\\\s+(MONTH|HOUR|MINUTE|SECOND))?\\\\b/\\n      },\\n      // Pseudo-types which allowed only as return type\\n      {\\n        begin: /\\\\bRETURNS\\\\s+(LANGUAGE_HANDLER|TRIGGER|EVENT_TRIGGER|FDW_HANDLER|INDEX_AM_HANDLER|TSM_HANDLER)\\\\b/,\\n        keywords: {\\n          keyword: 'RETURNS',\\n          type: 'LANGUAGE_HANDLER TRIGGER EVENT_TRIGGER FDW_HANDLER INDEX_AM_HANDLER TSM_HANDLER'\\n        }\\n      },\\n      // Known functions - only when followed by '('\\n      { begin: '\\\\\\\\b(' + FUNCTIONS_RE + ')\\\\\\\\s*\\\\\\\\('\\n        // keywords: { built_in: FUNCTIONS }\\n      },\\n      // Types\\n      { begin: '\\\\\\\\.(' + TYPES_RE + ')\\\\\\\\b' // prevent highlight as type, say, 'oid' in 'pgclass.oid'\\n      },\\n      {\\n        begin: '\\\\\\\\b(' + TYPES_RE + ')\\\\\\\\s+PATH\\\\\\\\b', // in XMLTABLE\\n        keywords: {\\n          keyword: 'PATH', // hopefully no one would use PATH type in XMLTABLE...\\n          type: TYPES.replace('PATH ', '')\\n        }\\n      },\\n      {\\n        className: 'type',\\n        begin: '\\\\\\\\b(' + TYPES_RE + ')\\\\\\\\b'\\n      },\\n      // Strings, see https://www.postgresql.org/docs/11/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS\\n      {\\n        className: 'string',\\n        begin: '\\\\'',\\n        end: '\\\\'',\\n        contains: [ { begin: '\\\\'\\\\'' } ]\\n      },\\n      {\\n        className: 'string',\\n        begin: '(e|E|u&|U&)\\\\'',\\n        end: '\\\\'',\\n        contains: [ { begin: '\\\\\\\\\\\\\\\\.' } ],\\n        relevance: 10\\n      },\\n      hljs.END_SAME_AS_BEGIN({\\n        begin: DOLLAR_STRING,\\n        end: DOLLAR_STRING,\\n        contains: [\\n          {\\n            // actually we want them all except SQL; listed are those with known implementations\\n            // and XML + JSON just in case\\n            subLanguage: [\\n              'pgsql',\\n              'perl',\\n              'python',\\n              'tcl',\\n              'r',\\n              'lua',\\n              'java',\\n              'php',\\n              'ruby',\\n              'bash',\\n              'scheme',\\n              'xml',\\n              'json'\\n            ],\\n            endsWithParent: true\\n          }\\n        ]\\n      }),\\n      // identifiers in quotes\\n      {\\n        begin: '\\\"',\\n        end: '\\\"',\\n        contains: [ { begin: '\\\"\\\"' } ]\\n      },\\n      // numbers\\n      hljs.C_NUMBER_MODE,\\n      // comments\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      COMMENT_MODE,\\n      // PL/pgSQL staff\\n      // %ROWTYPE, %TYPE, $n\\n      {\\n        className: 'meta',\\n        variants: [\\n          { // %TYPE, %ROWTYPE\\n            begin: '%(ROW)?TYPE',\\n            relevance: 10\\n          },\\n          { // $n\\n            begin: '\\\\\\\\$\\\\\\\\d+' },\\n          { // #compiler option\\n            begin: '^#\\\\\\\\w',\\n            end: '$'\\n          }\\n        ]\\n      },\\n      // <<labeles>>\\n      {\\n        className: 'symbol',\\n        begin: LABEL,\\n        relevance: 10\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = pgsql;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/pgsql.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/php-template.js\":\n/*!*****************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/php-template.js ***!\n  \\*****************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: PHP Template\\nRequires: xml.js, php.js\\nAuthor: Josh Goebel <hello@joshgoebel.com>\\nWebsite: https://www.php.net\\nCategory: common\\n*/\\n\\nfunction phpTemplate(hljs) {\\n  return {\\n    name: \\\"PHP template\\\",\\n    subLanguage: 'xml',\\n    contains: [\\n      {\\n        begin: /<\\\\?(php|=)?/,\\n        end: /\\\\?>/,\\n        subLanguage: 'php',\\n        contains: [\\n          // We don't want the php closing tag ?> to close the PHP block when\\n          // inside any of the following blocks:\\n          {\\n            begin: '/\\\\\\\\*',\\n            end: '\\\\\\\\*/',\\n            skip: true\\n          },\\n          {\\n            begin: 'b\\\"',\\n            end: '\\\"',\\n            skip: true\\n          },\\n          {\\n            begin: 'b\\\\'',\\n            end: '\\\\'',\\n            skip: true\\n          },\\n          hljs.inherit(hljs.APOS_STRING_MODE, {\\n            illegal: null,\\n            className: null,\\n            contains: null,\\n            skip: true\\n          }),\\n          hljs.inherit(hljs.QUOTE_STRING_MODE, {\\n            illegal: null,\\n            className: null,\\n            contains: null,\\n            skip: true\\n          })\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = phpTemplate;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/php-template.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/php.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/php.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: PHP\\nAuthor: Victor Karamzin <Victor.Karamzin@enterra-inc.com>\\nContributors: Evgeny Stepanischev <imbolk@gmail.com>, Ivan Sagalaev <maniac@softwaremaniacs.org>\\nWebsite: https://www.php.net\\nCategory: common\\n*/\\n\\n/**\\n * @param {HLJSApi} hljs\\n * @returns {LanguageDetail}\\n * */\\nfunction php(hljs) {\\n  const regex = hljs.regex;\\n  // negative look-ahead tries to avoid matching patterns that are not\\n  // Perl at all like $ident$, @ident@, etc.\\n  const NOT_PERL_ETC = /(?![A-Za-z0-9])(?![$])/;\\n  const IDENT_RE = regex.concat(\\n    /[a-zA-Z_\\\\x7f-\\\\xff][a-zA-Z0-9_\\\\x7f-\\\\xff]*/,\\n    NOT_PERL_ETC);\\n  // Will not detect camelCase classes\\n  const PASCAL_CASE_CLASS_NAME_RE = regex.concat(\\n    /(\\\\\\\\?[A-Z][a-z0-9_\\\\x7f-\\\\xff]+|\\\\\\\\?[A-Z]+(?=[A-Z][a-z0-9_\\\\x7f-\\\\xff])){1,}/,\\n    NOT_PERL_ETC);\\n  const VARIABLE = {\\n    scope: 'variable',\\n    match: '\\\\\\\\$+' + IDENT_RE,\\n  };\\n  const PREPROCESSOR = {\\n    scope: 'meta',\\n    variants: [\\n      { begin: /<\\\\?php/, relevance: 10 }, // boost for obvious PHP\\n      { begin: /<\\\\?=/ },\\n      // less relevant per PSR-1 which says not to use short-tags\\n      { begin: /<\\\\?/, relevance: 0.1 },\\n      { begin: /\\\\?>/ } // end php tag\\n    ]\\n  };\\n  const SUBST = {\\n    scope: 'subst',\\n    variants: [\\n      { begin: /\\\\$\\\\w+/ },\\n      {\\n        begin: /\\\\{\\\\$/,\\n        end: /\\\\}/\\n      }\\n    ]\\n  };\\n  const SINGLE_QUOTED = hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null, });\\n  const DOUBLE_QUOTED = hljs.inherit(hljs.QUOTE_STRING_MODE, {\\n    illegal: null,\\n    contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\\n  });\\n\\n  const HEREDOC = {\\n    begin: /<<<[ \\\\t]*(?:(\\\\w+)|\\\"(\\\\w+)\\\")\\\\n/,\\n    end: /[ \\\\t]*(\\\\w+)\\\\b/,\\n    contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\\n    'on:begin': (m, resp) => { resp.data._beginMatch = m[1] || m[2]; },\\n    'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); },\\n  };\\n\\n  const NOWDOC = hljs.END_SAME_AS_BEGIN({\\n    begin: /<<<[ \\\\t]*'(\\\\w+)'\\\\n/,\\n    end: /[ \\\\t]*(\\\\w+)\\\\b/,\\n  });\\n  // list of valid whitespaces because non-breaking space might be part of a IDENT_RE\\n  const WHITESPACE = '[ \\\\t\\\\n]';\\n  const STRING = {\\n    scope: 'string',\\n    variants: [\\n      DOUBLE_QUOTED,\\n      SINGLE_QUOTED,\\n      HEREDOC,\\n      NOWDOC\\n    ]\\n  };\\n  const NUMBER = {\\n    scope: 'number',\\n    variants: [\\n      { begin: `\\\\\\\\b0[bB][01]+(?:_[01]+)*\\\\\\\\b` }, // Binary w/ underscore support\\n      { begin: `\\\\\\\\b0[oO][0-7]+(?:_[0-7]+)*\\\\\\\\b` }, // Octals w/ underscore support\\n      { begin: `\\\\\\\\b0[xX][\\\\\\\\da-fA-F]+(?:_[\\\\\\\\da-fA-F]+)*\\\\\\\\b` }, // Hex w/ underscore support\\n      // Decimals w/ underscore support, with optional fragments and scientific exponent (e) suffix.\\n      { begin: `(?:\\\\\\\\b\\\\\\\\d+(?:_\\\\\\\\d+)*(\\\\\\\\.(?:\\\\\\\\d+(?:_\\\\\\\\d+)*))?|\\\\\\\\B\\\\\\\\.\\\\\\\\d+)(?:[eE][+-]?\\\\\\\\d+)?` }\\n    ],\\n    relevance: 0\\n  };\\n  const LITERALS = [\\n    \\\"false\\\",\\n    \\\"null\\\",\\n    \\\"true\\\"\\n  ];\\n  const KWS = [\\n    // Magic constants:\\n    // <https://www.php.net/manual/en/language.constants.predefined.php>\\n    \\\"__CLASS__\\\",\\n    \\\"__DIR__\\\",\\n    \\\"__FILE__\\\",\\n    \\\"__FUNCTION__\\\",\\n    \\\"__COMPILER_HALT_OFFSET__\\\",\\n    \\\"__LINE__\\\",\\n    \\\"__METHOD__\\\",\\n    \\\"__NAMESPACE__\\\",\\n    \\\"__TRAIT__\\\",\\n    // Function that look like language construct or language construct that look like function:\\n    // List of keywords that may not require parenthesis\\n    \\\"die\\\",\\n    \\\"echo\\\",\\n    \\\"exit\\\",\\n    \\\"include\\\",\\n    \\\"include_once\\\",\\n    \\\"print\\\",\\n    \\\"require\\\",\\n    \\\"require_once\\\",\\n    // These are not language construct (function) but operate on the currently-executing function and can access the current symbol table\\n    // 'compact extract func_get_arg func_get_args func_num_args get_called_class get_parent_class ' +\\n    // Other keywords:\\n    // <https://www.php.net/manual/en/reserved.php>\\n    // <https://www.php.net/manual/en/language.types.type-juggling.php>\\n    \\\"array\\\",\\n    \\\"abstract\\\",\\n    \\\"and\\\",\\n    \\\"as\\\",\\n    \\\"binary\\\",\\n    \\\"bool\\\",\\n    \\\"boolean\\\",\\n    \\\"break\\\",\\n    \\\"callable\\\",\\n    \\\"case\\\",\\n    \\\"catch\\\",\\n    \\\"class\\\",\\n    \\\"clone\\\",\\n    \\\"const\\\",\\n    \\\"continue\\\",\\n    \\\"declare\\\",\\n    \\\"default\\\",\\n    \\\"do\\\",\\n    \\\"double\\\",\\n    \\\"else\\\",\\n    \\\"elseif\\\",\\n    \\\"empty\\\",\\n    \\\"enddeclare\\\",\\n    \\\"endfor\\\",\\n    \\\"endforeach\\\",\\n    \\\"endif\\\",\\n    \\\"endswitch\\\",\\n    \\\"endwhile\\\",\\n    \\\"enum\\\",\\n    \\\"eval\\\",\\n    \\\"extends\\\",\\n    \\\"final\\\",\\n    \\\"finally\\\",\\n    \\\"float\\\",\\n    \\\"for\\\",\\n    \\\"foreach\\\",\\n    \\\"from\\\",\\n    \\\"global\\\",\\n    \\\"goto\\\",\\n    \\\"if\\\",\\n    \\\"implements\\\",\\n    \\\"instanceof\\\",\\n    \\\"insteadof\\\",\\n    \\\"int\\\",\\n    \\\"integer\\\",\\n    \\\"interface\\\",\\n    \\\"isset\\\",\\n    \\\"iterable\\\",\\n    \\\"list\\\",\\n    \\\"match|0\\\",\\n    \\\"mixed\\\",\\n    \\\"new\\\",\\n    \\\"never\\\",\\n    \\\"object\\\",\\n    \\\"or\\\",\\n    \\\"private\\\",\\n    \\\"protected\\\",\\n    \\\"public\\\",\\n    \\\"readonly\\\",\\n    \\\"real\\\",\\n    \\\"return\\\",\\n    \\\"string\\\",\\n    \\\"switch\\\",\\n    \\\"throw\\\",\\n    \\\"trait\\\",\\n    \\\"try\\\",\\n    \\\"unset\\\",\\n    \\\"use\\\",\\n    \\\"var\\\",\\n    \\\"void\\\",\\n    \\\"while\\\",\\n    \\\"xor\\\",\\n    \\\"yield\\\"\\n  ];\\n\\n  const BUILT_INS = [\\n    // Standard PHP library:\\n    // <https://www.php.net/manual/en/book.spl.php>\\n    \\\"Error|0\\\",\\n    \\\"AppendIterator\\\",\\n    \\\"ArgumentCountError\\\",\\n    \\\"ArithmeticError\\\",\\n    \\\"ArrayIterator\\\",\\n    \\\"ArrayObject\\\",\\n    \\\"AssertionError\\\",\\n    \\\"BadFunctionCallException\\\",\\n    \\\"BadMethodCallException\\\",\\n    \\\"CachingIterator\\\",\\n    \\\"CallbackFilterIterator\\\",\\n    \\\"CompileError\\\",\\n    \\\"Countable\\\",\\n    \\\"DirectoryIterator\\\",\\n    \\\"DivisionByZeroError\\\",\\n    \\\"DomainException\\\",\\n    \\\"EmptyIterator\\\",\\n    \\\"ErrorException\\\",\\n    \\\"Exception\\\",\\n    \\\"FilesystemIterator\\\",\\n    \\\"FilterIterator\\\",\\n    \\\"GlobIterator\\\",\\n    \\\"InfiniteIterator\\\",\\n    \\\"InvalidArgumentException\\\",\\n    \\\"IteratorIterator\\\",\\n    \\\"LengthException\\\",\\n    \\\"LimitIterator\\\",\\n    \\\"LogicException\\\",\\n    \\\"MultipleIterator\\\",\\n    \\\"NoRewindIterator\\\",\\n    \\\"OutOfBoundsException\\\",\\n    \\\"OutOfRangeException\\\",\\n    \\\"OuterIterator\\\",\\n    \\\"OverflowException\\\",\\n    \\\"ParentIterator\\\",\\n    \\\"ParseError\\\",\\n    \\\"RangeException\\\",\\n    \\\"RecursiveArrayIterator\\\",\\n    \\\"RecursiveCachingIterator\\\",\\n    \\\"RecursiveCallbackFilterIterator\\\",\\n    \\\"RecursiveDirectoryIterator\\\",\\n    \\\"RecursiveFilterIterator\\\",\\n    \\\"RecursiveIterator\\\",\\n    \\\"RecursiveIteratorIterator\\\",\\n    \\\"RecursiveRegexIterator\\\",\\n    \\\"RecursiveTreeIterator\\\",\\n    \\\"RegexIterator\\\",\\n    \\\"RuntimeException\\\",\\n    \\\"SeekableIterator\\\",\\n    \\\"SplDoublyLinkedList\\\",\\n    \\\"SplFileInfo\\\",\\n    \\\"SplFileObject\\\",\\n    \\\"SplFixedArray\\\",\\n    \\\"SplHeap\\\",\\n    \\\"SplMaxHeap\\\",\\n    \\\"SplMinHeap\\\",\\n    \\\"SplObjectStorage\\\",\\n    \\\"SplObserver\\\",\\n    \\\"SplPriorityQueue\\\",\\n    \\\"SplQueue\\\",\\n    \\\"SplStack\\\",\\n    \\\"SplSubject\\\",\\n    \\\"SplTempFileObject\\\",\\n    \\\"TypeError\\\",\\n    \\\"UnderflowException\\\",\\n    \\\"UnexpectedValueException\\\",\\n    \\\"UnhandledMatchError\\\",\\n    // Reserved interfaces:\\n    // <https://www.php.net/manual/en/reserved.interfaces.php>\\n    \\\"ArrayAccess\\\",\\n    \\\"BackedEnum\\\",\\n    \\\"Closure\\\",\\n    \\\"Fiber\\\",\\n    \\\"Generator\\\",\\n    \\\"Iterator\\\",\\n    \\\"IteratorAggregate\\\",\\n    \\\"Serializable\\\",\\n    \\\"Stringable\\\",\\n    \\\"Throwable\\\",\\n    \\\"Traversable\\\",\\n    \\\"UnitEnum\\\",\\n    \\\"WeakReference\\\",\\n    \\\"WeakMap\\\",\\n    // Reserved classes:\\n    // <https://www.php.net/manual/en/reserved.classes.php>\\n    \\\"Directory\\\",\\n    \\\"__PHP_Incomplete_Class\\\",\\n    \\\"parent\\\",\\n    \\\"php_user_filter\\\",\\n    \\\"self\\\",\\n    \\\"static\\\",\\n    \\\"stdClass\\\"\\n  ];\\n\\n  /** Dual-case keywords\\n   *\\n   * [\\\"then\\\",\\\"FILE\\\"] =>\\n   *     [\\\"then\\\", \\\"THEN\\\", \\\"FILE\\\", \\\"file\\\"]\\n   *\\n   * @param {string[]} items */\\n  const dualCase = (items) => {\\n    /** @type string[] */\\n    const result = [];\\n    items.forEach(item => {\\n      result.push(item);\\n      if (item.toLowerCase() === item) {\\n        result.push(item.toUpperCase());\\n      } else {\\n        result.push(item.toLowerCase());\\n      }\\n    });\\n    return result;\\n  };\\n\\n  const KEYWORDS = {\\n    keyword: KWS,\\n    literal: dualCase(LITERALS),\\n    built_in: BUILT_INS,\\n  };\\n\\n  /**\\n   * @param {string[]} items */\\n  const normalizeKeywords = (items) => {\\n    return items.map(item => {\\n      return item.replace(/\\\\|\\\\d+$/, \\\"\\\");\\n    });\\n  };\\n\\n  const CONSTRUCTOR_CALL = { variants: [\\n    {\\n      match: [\\n        /new/,\\n        regex.concat(WHITESPACE, \\\"+\\\"),\\n        // to prevent built ins from being confused as the class constructor call\\n        regex.concat(\\\"(?!\\\", normalizeKeywords(BUILT_INS).join(\\\"\\\\\\\\b|\\\"), \\\"\\\\\\\\b)\\\"),\\n        PASCAL_CASE_CLASS_NAME_RE,\\n      ],\\n      scope: {\\n        1: \\\"keyword\\\",\\n        4: \\\"title.class\\\",\\n      },\\n    }\\n  ] };\\n\\n  const CONSTANT_REFERENCE = regex.concat(IDENT_RE, \\\"\\\\\\\\b(?!\\\\\\\\()\\\");\\n\\n  const LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON = { variants: [\\n    {\\n      match: [\\n        regex.concat(\\n          /::/,\\n          regex.lookahead(/(?!class\\\\b)/)\\n        ),\\n        CONSTANT_REFERENCE,\\n      ],\\n      scope: { 2: \\\"variable.constant\\\", },\\n    },\\n    {\\n      match: [\\n        /::/,\\n        /class/,\\n      ],\\n      scope: { 2: \\\"variable.language\\\", },\\n    },\\n    {\\n      match: [\\n        PASCAL_CASE_CLASS_NAME_RE,\\n        regex.concat(\\n          /::/,\\n          regex.lookahead(/(?!class\\\\b)/)\\n        ),\\n        CONSTANT_REFERENCE,\\n      ],\\n      scope: {\\n        1: \\\"title.class\\\",\\n        3: \\\"variable.constant\\\",\\n      },\\n    },\\n    {\\n      match: [\\n        PASCAL_CASE_CLASS_NAME_RE,\\n        regex.concat(\\n          \\\"::\\\",\\n          regex.lookahead(/(?!class\\\\b)/)\\n        ),\\n      ],\\n      scope: { 1: \\\"title.class\\\", },\\n    },\\n    {\\n      match: [\\n        PASCAL_CASE_CLASS_NAME_RE,\\n        /::/,\\n        /class/,\\n      ],\\n      scope: {\\n        1: \\\"title.class\\\",\\n        3: \\\"variable.language\\\",\\n      },\\n    }\\n  ] };\\n\\n  const NAMED_ARGUMENT = {\\n    scope: 'attr',\\n    match: regex.concat(IDENT_RE, regex.lookahead(':'), regex.lookahead(/(?!::)/)),\\n  };\\n  const PARAMS_MODE = {\\n    relevance: 0,\\n    begin: /\\\\(/,\\n    end: /\\\\)/,\\n    keywords: KEYWORDS,\\n    contains: [\\n      NAMED_ARGUMENT,\\n      VARIABLE,\\n      LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      STRING,\\n      NUMBER,\\n      CONSTRUCTOR_CALL,\\n    ],\\n  };\\n  const FUNCTION_INVOKE = {\\n    relevance: 0,\\n    match: [\\n      /\\\\b/,\\n      // to prevent keywords from being confused as the function title\\n      regex.concat(\\\"(?!fn\\\\\\\\b|function\\\\\\\\b|\\\", normalizeKeywords(KWS).join(\\\"\\\\\\\\b|\\\"), \\\"|\\\", normalizeKeywords(BUILT_INS).join(\\\"\\\\\\\\b|\\\"), \\\"\\\\\\\\b)\\\"),\\n      IDENT_RE,\\n      regex.concat(WHITESPACE, \\\"*\\\"),\\n      regex.lookahead(/(?=\\\\()/)\\n    ],\\n    scope: { 3: \\\"title.function.invoke\\\", },\\n    contains: [ PARAMS_MODE ]\\n  };\\n  PARAMS_MODE.contains.push(FUNCTION_INVOKE);\\n\\n  const ATTRIBUTE_CONTAINS = [\\n    NAMED_ARGUMENT,\\n    LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\\n    hljs.C_BLOCK_COMMENT_MODE,\\n    STRING,\\n    NUMBER,\\n    CONSTRUCTOR_CALL,\\n  ];\\n\\n  const ATTRIBUTES = {\\n    begin: regex.concat(/#\\\\[\\\\s*/, PASCAL_CASE_CLASS_NAME_RE),\\n    beginScope: \\\"meta\\\",\\n    end: /]/,\\n    endScope: \\\"meta\\\",\\n    keywords: {\\n      literal: LITERALS,\\n      keyword: [\\n        'new',\\n        'array',\\n      ]\\n    },\\n    contains: [\\n      {\\n        begin: /\\\\[/,\\n        end: /]/,\\n        keywords: {\\n          literal: LITERALS,\\n          keyword: [\\n            'new',\\n            'array',\\n          ]\\n        },\\n        contains: [\\n          'self',\\n          ...ATTRIBUTE_CONTAINS,\\n        ]\\n      },\\n      ...ATTRIBUTE_CONTAINS,\\n      {\\n        scope: 'meta',\\n        match: PASCAL_CASE_CLASS_NAME_RE\\n      }\\n    ]\\n  };\\n\\n  return {\\n    case_insensitive: false,\\n    keywords: KEYWORDS,\\n    contains: [\\n      ATTRIBUTES,\\n      hljs.HASH_COMMENT_MODE,\\n      hljs.COMMENT('//', '$'),\\n      hljs.COMMENT(\\n        '/\\\\\\\\*',\\n        '\\\\\\\\*/',\\n        { contains: [\\n          {\\n            scope: 'doctag',\\n            match: '@[A-Za-z]+'\\n          }\\n        ] }\\n      ),\\n      {\\n        match: /__halt_compiler\\\\(\\\\);/,\\n        keywords: '__halt_compiler',\\n        starts: {\\n          scope: \\\"comment\\\",\\n          end: hljs.MATCH_NOTHING_RE,\\n          contains: [\\n            {\\n              match: /\\\\?>/,\\n              scope: \\\"meta\\\",\\n              endsParent: true\\n            }\\n          ]\\n        }\\n      },\\n      PREPROCESSOR,\\n      {\\n        scope: 'variable.language',\\n        match: /\\\\$this\\\\b/\\n      },\\n      VARIABLE,\\n      FUNCTION_INVOKE,\\n      LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\\n      {\\n        match: [\\n          /const/,\\n          /\\\\s/,\\n          IDENT_RE,\\n        ],\\n        scope: {\\n          1: \\\"keyword\\\",\\n          3: \\\"variable.constant\\\",\\n        },\\n      },\\n      CONSTRUCTOR_CALL,\\n      {\\n        scope: 'function',\\n        relevance: 0,\\n        beginKeywords: 'fn function',\\n        end: /[;{]/,\\n        excludeEnd: true,\\n        illegal: '[$%\\\\\\\\[]',\\n        contains: [\\n          { beginKeywords: 'use', },\\n          hljs.UNDERSCORE_TITLE_MODE,\\n          {\\n            begin: '=>', // No markup, just a relevance booster\\n            endsParent: true\\n          },\\n          {\\n            scope: 'params',\\n            begin: '\\\\\\\\(',\\n            end: '\\\\\\\\)',\\n            excludeBegin: true,\\n            excludeEnd: true,\\n            keywords: KEYWORDS,\\n            contains: [\\n              'self',\\n              VARIABLE,\\n              LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\\n              hljs.C_BLOCK_COMMENT_MODE,\\n              STRING,\\n              NUMBER\\n            ]\\n          },\\n        ]\\n      },\\n      {\\n        scope: 'class',\\n        variants: [\\n          {\\n            beginKeywords: \\\"enum\\\",\\n            illegal: /[($\\\"]/\\n          },\\n          {\\n            beginKeywords: \\\"class interface trait\\\",\\n            illegal: /[:($\\\"]/\\n          }\\n        ],\\n        relevance: 0,\\n        end: /\\\\{/,\\n        excludeEnd: true,\\n        contains: [\\n          { beginKeywords: 'extends implements' },\\n          hljs.UNDERSCORE_TITLE_MODE\\n        ]\\n      },\\n      // both use and namespace still use \\\"old style\\\" rules (vs multi-match)\\n      // because the namespace name can include `\\\\` and we still want each\\n      // element to be treated as its own *individual* title\\n      {\\n        beginKeywords: 'namespace',\\n        relevance: 0,\\n        end: ';',\\n        illegal: /[.']/,\\n        contains: [ hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, { scope: \\\"title.class\\\" }) ]\\n      },\\n      {\\n        beginKeywords: 'use',\\n        relevance: 0,\\n        end: ';',\\n        contains: [\\n          // TODO: title.function vs title.class\\n          {\\n            match: /\\\\b(as|const|function)\\\\b/,\\n            scope: \\\"keyword\\\"\\n          },\\n          // TODO: could be title.class or title.function\\n          hljs.UNDERSCORE_TITLE_MODE\\n        ]\\n      },\\n      STRING,\\n      NUMBER,\\n    ]\\n  };\\n}\\n\\nmodule.exports = php;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/php.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/plaintext.js\":\n/*!**************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/plaintext.js ***!\n  \\**************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Plain text\\nAuthor: Egor Rogov (e.rogov@postgrespro.ru)\\nDescription: Plain text without any highlighting.\\nCategory: common\\n*/\\n\\nfunction plaintext(hljs) {\\n  return {\\n    name: 'Plain text',\\n    aliases: [\\n      'text',\\n      'txt'\\n    ],\\n    disableAutodetect: true\\n  };\\n}\\n\\nmodule.exports = plaintext;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/plaintext.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/pony.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/pony.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Pony\\nAuthor: Joe Eli McIlvain <joe.eli.mac@gmail.com>\\nDescription: Pony is an open-source, object-oriented, actor-model,\\n             capabilities-secure, high performance programming language.\\nWebsite: https://www.ponylang.io\\n*/\\n\\nfunction pony(hljs) {\\n  const KEYWORDS = {\\n    keyword:\\n      'actor addressof and as be break class compile_error compile_intrinsic '\\n      + 'consume continue delegate digestof do else elseif embed end error '\\n      + 'for fun if ifdef in interface is isnt lambda let match new not object '\\n      + 'or primitive recover repeat return struct then trait try type until '\\n      + 'use var where while with xor',\\n    meta:\\n      'iso val tag trn box ref',\\n    literal:\\n      'this false true'\\n  };\\n\\n  const TRIPLE_QUOTE_STRING_MODE = {\\n    className: 'string',\\n    begin: '\\\"\\\"\\\"',\\n    end: '\\\"\\\"\\\"',\\n    relevance: 10\\n  };\\n\\n  const QUOTE_STRING_MODE = {\\n    className: 'string',\\n    begin: '\\\"',\\n    end: '\\\"',\\n    contains: [ hljs.BACKSLASH_ESCAPE ]\\n  };\\n\\n  const SINGLE_QUOTE_CHAR_MODE = {\\n    className: 'string',\\n    begin: '\\\\'',\\n    end: '\\\\'',\\n    contains: [ hljs.BACKSLASH_ESCAPE ],\\n    relevance: 0\\n  };\\n\\n  const TYPE_NAME = {\\n    className: 'type',\\n    begin: '\\\\\\\\b_?[A-Z][\\\\\\\\w]*',\\n    relevance: 0\\n  };\\n\\n  const PRIMED_NAME = {\\n    begin: hljs.IDENT_RE + '\\\\'',\\n    relevance: 0\\n  };\\n\\n  const NUMBER_MODE = {\\n    className: 'number',\\n    begin: '(-?)(\\\\\\\\b0[xX][a-fA-F0-9]+|\\\\\\\\b0[bB][01]+|(\\\\\\\\b\\\\\\\\d+(_\\\\\\\\d+)?(\\\\\\\\.\\\\\\\\d*)?|\\\\\\\\.\\\\\\\\d+)([eE][-+]?\\\\\\\\d+)?)',\\n    relevance: 0\\n  };\\n\\n  /**\\n   * The `FUNCTION` and `CLASS` modes were intentionally removed to simplify\\n   * highlighting and fix cases like\\n   * ```\\n   * interface Iterator[A: A]\\n   *   fun has_next(): Bool\\n   *   fun next(): A?\\n   * ```\\n   * where it is valid to have a function head without a body\\n   */\\n\\n  return {\\n    name: 'Pony',\\n    keywords: KEYWORDS,\\n    contains: [\\n      TYPE_NAME,\\n      TRIPLE_QUOTE_STRING_MODE,\\n      QUOTE_STRING_MODE,\\n      SINGLE_QUOTE_CHAR_MODE,\\n      PRIMED_NAME,\\n      NUMBER_MODE,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = pony;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/pony.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/powershell.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/powershell.js ***!\n  \\***************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: PowerShell\\nDescription: PowerShell is a task-based command-line shell and scripting language built on .NET.\\nAuthor: David Mohundro <david@mohundro.com>\\nContributors: Nicholas Blumhardt <nblumhardt@nblumhardt.com>, Victor Zhou <OiCMudkips@users.noreply.github.com>, Nicolas Le Gall <contact@nlegall.fr>\\nWebsite: https://docs.microsoft.com/en-us/powershell/\\n*/\\n\\nfunction powershell(hljs) {\\n  const TYPES = [\\n    \\\"string\\\",\\n    \\\"char\\\",\\n    \\\"byte\\\",\\n    \\\"int\\\",\\n    \\\"long\\\",\\n    \\\"bool\\\",\\n    \\\"decimal\\\",\\n    \\\"single\\\",\\n    \\\"double\\\",\\n    \\\"DateTime\\\",\\n    \\\"xml\\\",\\n    \\\"array\\\",\\n    \\\"hashtable\\\",\\n    \\\"void\\\"\\n  ];\\n\\n  // https://docs.microsoft.com/en-us/powershell/scripting/developer/cmdlet/approved-verbs-for-windows-powershell-commands\\n  const VALID_VERBS =\\n    'Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|'\\n    + 'Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|'\\n    + 'Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|'\\n    + 'Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|'\\n    + 'ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|'\\n    + 'Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|'\\n    + 'Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|'\\n    + 'Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|'\\n    + 'Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|'\\n    + 'Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|'\\n    + 'Unprotect|Use|ForEach|Sort|Tee|Where';\\n\\n  const COMPARISON_OPERATORS =\\n    '-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|'\\n    + '-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|'\\n    + '-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|'\\n    + '-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|'\\n    + '-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|'\\n    + '-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|'\\n    + '-split|-wildcard|-xor';\\n\\n  const KEYWORDS = {\\n    $pattern: /-?[A-z\\\\.\\\\-]+\\\\b/,\\n    keyword:\\n      'if else foreach return do while until elseif begin for trap data dynamicparam '\\n      + 'end break throw param continue finally in switch exit filter try process catch '\\n      + 'hidden static parameter',\\n    // \\\"echo\\\" relevance has been set to 0 to avoid auto-detect conflicts with shell transcripts\\n    built_in:\\n      'ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp '\\n      + 'cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx '\\n      + 'fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group '\\n      + 'gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi '\\n      + 'iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh '\\n      + 'popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp '\\n      + 'rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp '\\n      + 'spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write'\\n    // TODO: 'validate[A-Z]+' can't work in keywords\\n  };\\n\\n  const TITLE_NAME_RE = /\\\\w[\\\\w\\\\d]*((-)[\\\\w\\\\d]+)*/;\\n\\n  const BACKTICK_ESCAPE = {\\n    begin: '`[\\\\\\\\s\\\\\\\\S]',\\n    relevance: 0\\n  };\\n\\n  const VAR = {\\n    className: 'variable',\\n    variants: [\\n      { begin: /\\\\$\\\\B/ },\\n      {\\n        className: 'keyword',\\n        begin: /\\\\$this/\\n      },\\n      { begin: /\\\\$[\\\\w\\\\d][\\\\w\\\\d_:]*/ }\\n    ]\\n  };\\n\\n  const LITERAL = {\\n    className: 'literal',\\n    begin: /\\\\$(null|true|false)\\\\b/\\n  };\\n\\n  const QUOTE_STRING = {\\n    className: \\\"string\\\",\\n    variants: [\\n      {\\n        begin: /\\\"/,\\n        end: /\\\"/\\n      },\\n      {\\n        begin: /@\\\"/,\\n        end: /^\\\"@/\\n      }\\n    ],\\n    contains: [\\n      BACKTICK_ESCAPE,\\n      VAR,\\n      {\\n        className: 'variable',\\n        begin: /\\\\$[A-z]/,\\n        end: /[^A-z]/\\n      }\\n    ]\\n  };\\n\\n  const APOS_STRING = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: /'/,\\n        end: /'/\\n      },\\n      {\\n        begin: /@'/,\\n        end: /^'@/\\n      }\\n    ]\\n  };\\n\\n  const PS_HELPTAGS = {\\n    className: \\\"doctag\\\",\\n    variants: [\\n      /* no paramater help tags */\\n      { begin: /\\\\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/ },\\n      /* one parameter help tags */\\n      { begin: /\\\\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\\\\s+\\\\S+/ }\\n    ]\\n  };\\n\\n  const PS_COMMENT = hljs.inherit(\\n    hljs.COMMENT(null, null),\\n    {\\n      variants: [\\n        /* single-line comment */\\n        {\\n          begin: /#/,\\n          end: /$/\\n        },\\n        /* multi-line comment */\\n        {\\n          begin: /<#/,\\n          end: /#>/\\n        }\\n      ],\\n      contains: [ PS_HELPTAGS ]\\n    }\\n  );\\n\\n  const CMDLETS = {\\n    className: 'built_in',\\n    variants: [ { begin: '('.concat(VALID_VERBS, ')+(-)[\\\\\\\\w\\\\\\\\d]+') } ]\\n  };\\n\\n  const PS_CLASS = {\\n    className: 'class',\\n    beginKeywords: 'class enum',\\n    end: /\\\\s*[{]/,\\n    excludeEnd: true,\\n    relevance: 0,\\n    contains: [ hljs.TITLE_MODE ]\\n  };\\n\\n  const PS_FUNCTION = {\\n    className: 'function',\\n    begin: /function\\\\s+/,\\n    end: /\\\\s*\\\\{|$/,\\n    excludeEnd: true,\\n    returnBegin: true,\\n    relevance: 0,\\n    contains: [\\n      {\\n        begin: \\\"function\\\",\\n        relevance: 0,\\n        className: \\\"keyword\\\"\\n      },\\n      {\\n        className: \\\"title\\\",\\n        begin: TITLE_NAME_RE,\\n        relevance: 0\\n      },\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        className: \\\"params\\\",\\n        relevance: 0,\\n        contains: [ VAR ]\\n      }\\n      // CMDLETS\\n    ]\\n  };\\n\\n  // Using statment, plus type, plus assembly name.\\n  const PS_USING = {\\n    begin: /using\\\\s/,\\n    end: /$/,\\n    returnBegin: true,\\n    contains: [\\n      QUOTE_STRING,\\n      APOS_STRING,\\n      {\\n        className: 'keyword',\\n        begin: /(using|assembly|command|module|namespace|type)/\\n      }\\n    ]\\n  };\\n\\n  // Comperison operators & function named parameters.\\n  const PS_ARGUMENTS = { variants: [\\n    // PS literals are pretty verbose so it's a good idea to accent them a bit.\\n    {\\n      className: 'operator',\\n      begin: '('.concat(COMPARISON_OPERATORS, ')\\\\\\\\b')\\n    },\\n    {\\n      className: 'literal',\\n      begin: /(-){1,2}[\\\\w\\\\d-]+/,\\n      relevance: 0\\n    }\\n  ] };\\n\\n  const HASH_SIGNS = {\\n    className: 'selector-tag',\\n    begin: /@\\\\B/,\\n    relevance: 0\\n  };\\n\\n  // It's a very general rule so I'll narrow it a bit with some strict boundaries\\n  // to avoid any possible false-positive collisions!\\n  const PS_METHODS = {\\n    className: 'function',\\n    begin: /\\\\[.*\\\\]\\\\s*[\\\\w]+[ ]??\\\\(/,\\n    end: /$/,\\n    returnBegin: true,\\n    relevance: 0,\\n    contains: [\\n      {\\n        className: 'keyword',\\n        begin: '('.concat(\\n          KEYWORDS.keyword.toString().replace(/\\\\s/g, '|'\\n          ), ')\\\\\\\\b'),\\n        endsParent: true,\\n        relevance: 0\\n      },\\n      hljs.inherit(hljs.TITLE_MODE, { endsParent: true })\\n    ]\\n  };\\n\\n  const GENTLEMANS_SET = [\\n    // STATIC_MEMBER,\\n    PS_METHODS,\\n    PS_COMMENT,\\n    BACKTICK_ESCAPE,\\n    hljs.NUMBER_MODE,\\n    QUOTE_STRING,\\n    APOS_STRING,\\n    // PS_NEW_OBJECT_TYPE,\\n    CMDLETS,\\n    VAR,\\n    LITERAL,\\n    HASH_SIGNS\\n  ];\\n\\n  const PS_TYPE = {\\n    begin: /\\\\[/,\\n    end: /\\\\]/,\\n    excludeBegin: true,\\n    excludeEnd: true,\\n    relevance: 0,\\n    contains: [].concat(\\n      'self',\\n      GENTLEMANS_SET,\\n      {\\n        begin: \\\"(\\\" + TYPES.join(\\\"|\\\") + \\\")\\\",\\n        className: \\\"built_in\\\",\\n        relevance: 0\\n      },\\n      {\\n        className: 'type',\\n        begin: /[\\\\.\\\\w\\\\d]+/,\\n        relevance: 0\\n      }\\n    )\\n  };\\n\\n  PS_METHODS.contains.unshift(PS_TYPE);\\n\\n  return {\\n    name: 'PowerShell',\\n    aliases: [\\n      \\\"pwsh\\\",\\n      \\\"ps\\\",\\n      \\\"ps1\\\"\\n    ],\\n    case_insensitive: true,\\n    keywords: KEYWORDS,\\n    contains: GENTLEMANS_SET.concat(\\n      PS_CLASS,\\n      PS_FUNCTION,\\n      PS_USING,\\n      PS_ARGUMENTS,\\n      PS_TYPE\\n    )\\n  };\\n}\\n\\nmodule.exports = powershell;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/powershell.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/processing.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/processing.js ***!\n  \\***************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Processing\\nDescription: Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts.\\nAuthor: Erik Paluka <erik.paluka@gmail.com>\\nWebsite: https://processing.org\\nCategory: graphics\\n*/\\n\\nfunction processing(hljs) {\\n  const regex = hljs.regex;\\n  const BUILT_INS = [\\n    \\\"displayHeight\\\",\\n    \\\"displayWidth\\\",\\n    \\\"mouseY\\\",\\n    \\\"mouseX\\\",\\n    \\\"mousePressed\\\",\\n    \\\"pmouseX\\\",\\n    \\\"pmouseY\\\",\\n    \\\"key\\\",\\n    \\\"keyCode\\\",\\n    \\\"pixels\\\",\\n    \\\"focused\\\",\\n    \\\"frameCount\\\",\\n    \\\"frameRate\\\",\\n    \\\"height\\\",\\n    \\\"width\\\",\\n    \\\"size\\\",\\n    \\\"createGraphics\\\",\\n    \\\"beginDraw\\\",\\n    \\\"createShape\\\",\\n    \\\"loadShape\\\",\\n    \\\"PShape\\\",\\n    \\\"arc\\\",\\n    \\\"ellipse\\\",\\n    \\\"line\\\",\\n    \\\"point\\\",\\n    \\\"quad\\\",\\n    \\\"rect\\\",\\n    \\\"triangle\\\",\\n    \\\"bezier\\\",\\n    \\\"bezierDetail\\\",\\n    \\\"bezierPoint\\\",\\n    \\\"bezierTangent\\\",\\n    \\\"curve\\\",\\n    \\\"curveDetail\\\",\\n    \\\"curvePoint\\\",\\n    \\\"curveTangent\\\",\\n    \\\"curveTightness\\\",\\n    \\\"shape\\\",\\n    \\\"shapeMode\\\",\\n    \\\"beginContour\\\",\\n    \\\"beginShape\\\",\\n    \\\"bezierVertex\\\",\\n    \\\"curveVertex\\\",\\n    \\\"endContour\\\",\\n    \\\"endShape\\\",\\n    \\\"quadraticVertex\\\",\\n    \\\"vertex\\\",\\n    \\\"ellipseMode\\\",\\n    \\\"noSmooth\\\",\\n    \\\"rectMode\\\",\\n    \\\"smooth\\\",\\n    \\\"strokeCap\\\",\\n    \\\"strokeJoin\\\",\\n    \\\"strokeWeight\\\",\\n    \\\"mouseClicked\\\",\\n    \\\"mouseDragged\\\",\\n    \\\"mouseMoved\\\",\\n    \\\"mousePressed\\\",\\n    \\\"mouseReleased\\\",\\n    \\\"mouseWheel\\\",\\n    \\\"keyPressed\\\",\\n    \\\"keyPressedkeyReleased\\\",\\n    \\\"keyTyped\\\",\\n    \\\"print\\\",\\n    \\\"println\\\",\\n    \\\"save\\\",\\n    \\\"saveFrame\\\",\\n    \\\"day\\\",\\n    \\\"hour\\\",\\n    \\\"millis\\\",\\n    \\\"minute\\\",\\n    \\\"month\\\",\\n    \\\"second\\\",\\n    \\\"year\\\",\\n    \\\"background\\\",\\n    \\\"clear\\\",\\n    \\\"colorMode\\\",\\n    \\\"fill\\\",\\n    \\\"noFill\\\",\\n    \\\"noStroke\\\",\\n    \\\"stroke\\\",\\n    \\\"alpha\\\",\\n    \\\"blue\\\",\\n    \\\"brightness\\\",\\n    \\\"color\\\",\\n    \\\"green\\\",\\n    \\\"hue\\\",\\n    \\\"lerpColor\\\",\\n    \\\"red\\\",\\n    \\\"saturation\\\",\\n    \\\"modelX\\\",\\n    \\\"modelY\\\",\\n    \\\"modelZ\\\",\\n    \\\"screenX\\\",\\n    \\\"screenY\\\",\\n    \\\"screenZ\\\",\\n    \\\"ambient\\\",\\n    \\\"emissive\\\",\\n    \\\"shininess\\\",\\n    \\\"specular\\\",\\n    \\\"add\\\",\\n    \\\"createImage\\\",\\n    \\\"beginCamera\\\",\\n    \\\"camera\\\",\\n    \\\"endCamera\\\",\\n    \\\"frustum\\\",\\n    \\\"ortho\\\",\\n    \\\"perspective\\\",\\n    \\\"printCamera\\\",\\n    \\\"printProjection\\\",\\n    \\\"cursor\\\",\\n    \\\"frameRate\\\",\\n    \\\"noCursor\\\",\\n    \\\"exit\\\",\\n    \\\"loop\\\",\\n    \\\"noLoop\\\",\\n    \\\"popStyle\\\",\\n    \\\"pushStyle\\\",\\n    \\\"redraw\\\",\\n    \\\"binary\\\",\\n    \\\"boolean\\\",\\n    \\\"byte\\\",\\n    \\\"char\\\",\\n    \\\"float\\\",\\n    \\\"hex\\\",\\n    \\\"int\\\",\\n    \\\"str\\\",\\n    \\\"unbinary\\\",\\n    \\\"unhex\\\",\\n    \\\"join\\\",\\n    \\\"match\\\",\\n    \\\"matchAll\\\",\\n    \\\"nf\\\",\\n    \\\"nfc\\\",\\n    \\\"nfp\\\",\\n    \\\"nfs\\\",\\n    \\\"split\\\",\\n    \\\"splitTokens\\\",\\n    \\\"trim\\\",\\n    \\\"append\\\",\\n    \\\"arrayCopy\\\",\\n    \\\"concat\\\",\\n    \\\"expand\\\",\\n    \\\"reverse\\\",\\n    \\\"shorten\\\",\\n    \\\"sort\\\",\\n    \\\"splice\\\",\\n    \\\"subset\\\",\\n    \\\"box\\\",\\n    \\\"sphere\\\",\\n    \\\"sphereDetail\\\",\\n    \\\"createInput\\\",\\n    \\\"createReader\\\",\\n    \\\"loadBytes\\\",\\n    \\\"loadJSONArray\\\",\\n    \\\"loadJSONObject\\\",\\n    \\\"loadStrings\\\",\\n    \\\"loadTable\\\",\\n    \\\"loadXML\\\",\\n    \\\"open\\\",\\n    \\\"parseXML\\\",\\n    \\\"saveTable\\\",\\n    \\\"selectFolder\\\",\\n    \\\"selectInput\\\",\\n    \\\"beginRaw\\\",\\n    \\\"beginRecord\\\",\\n    \\\"createOutput\\\",\\n    \\\"createWriter\\\",\\n    \\\"endRaw\\\",\\n    \\\"endRecord\\\",\\n    \\\"PrintWritersaveBytes\\\",\\n    \\\"saveJSONArray\\\",\\n    \\\"saveJSONObject\\\",\\n    \\\"saveStream\\\",\\n    \\\"saveStrings\\\",\\n    \\\"saveXML\\\",\\n    \\\"selectOutput\\\",\\n    \\\"popMatrix\\\",\\n    \\\"printMatrix\\\",\\n    \\\"pushMatrix\\\",\\n    \\\"resetMatrix\\\",\\n    \\\"rotate\\\",\\n    \\\"rotateX\\\",\\n    \\\"rotateY\\\",\\n    \\\"rotateZ\\\",\\n    \\\"scale\\\",\\n    \\\"shearX\\\",\\n    \\\"shearY\\\",\\n    \\\"translate\\\",\\n    \\\"ambientLight\\\",\\n    \\\"directionalLight\\\",\\n    \\\"lightFalloff\\\",\\n    \\\"lights\\\",\\n    \\\"lightSpecular\\\",\\n    \\\"noLights\\\",\\n    \\\"normal\\\",\\n    \\\"pointLight\\\",\\n    \\\"spotLight\\\",\\n    \\\"image\\\",\\n    \\\"imageMode\\\",\\n    \\\"loadImage\\\",\\n    \\\"noTint\\\",\\n    \\\"requestImage\\\",\\n    \\\"tint\\\",\\n    \\\"texture\\\",\\n    \\\"textureMode\\\",\\n    \\\"textureWrap\\\",\\n    \\\"blend\\\",\\n    \\\"copy\\\",\\n    \\\"filter\\\",\\n    \\\"get\\\",\\n    \\\"loadPixels\\\",\\n    \\\"set\\\",\\n    \\\"updatePixels\\\",\\n    \\\"blendMode\\\",\\n    \\\"loadShader\\\",\\n    \\\"PShaderresetShader\\\",\\n    \\\"shader\\\",\\n    \\\"createFont\\\",\\n    \\\"loadFont\\\",\\n    \\\"text\\\",\\n    \\\"textFont\\\",\\n    \\\"textAlign\\\",\\n    \\\"textLeading\\\",\\n    \\\"textMode\\\",\\n    \\\"textSize\\\",\\n    \\\"textWidth\\\",\\n    \\\"textAscent\\\",\\n    \\\"textDescent\\\",\\n    \\\"abs\\\",\\n    \\\"ceil\\\",\\n    \\\"constrain\\\",\\n    \\\"dist\\\",\\n    \\\"exp\\\",\\n    \\\"floor\\\",\\n    \\\"lerp\\\",\\n    \\\"log\\\",\\n    \\\"mag\\\",\\n    \\\"map\\\",\\n    \\\"max\\\",\\n    \\\"min\\\",\\n    \\\"norm\\\",\\n    \\\"pow\\\",\\n    \\\"round\\\",\\n    \\\"sq\\\",\\n    \\\"sqrt\\\",\\n    \\\"acos\\\",\\n    \\\"asin\\\",\\n    \\\"atan\\\",\\n    \\\"atan2\\\",\\n    \\\"cos\\\",\\n    \\\"degrees\\\",\\n    \\\"radians\\\",\\n    \\\"sin\\\",\\n    \\\"tan\\\",\\n    \\\"noise\\\",\\n    \\\"noiseDetail\\\",\\n    \\\"noiseSeed\\\",\\n    \\\"random\\\",\\n    \\\"randomGaussian\\\",\\n    \\\"randomSeed\\\"\\n  ];\\n  const IDENT = hljs.IDENT_RE;\\n  const FUNC_NAME = { variants: [\\n    {\\n      match: regex.concat(regex.either(...BUILT_INS), regex.lookahead(/\\\\s*\\\\(/)),\\n      className: \\\"built_in\\\"\\n    },\\n    {\\n      relevance: 0,\\n      match: regex.concat(\\n        /\\\\b(?!for|if|while)/,\\n        IDENT, regex.lookahead(/\\\\s*\\\\(/)),\\n      className: \\\"title.function\\\"\\n    }\\n  ] };\\n  const NEW_CLASS = {\\n    match: [\\n      /new\\\\s+/,\\n      IDENT\\n    ],\\n    className: {\\n      1: \\\"keyword\\\",\\n      2: \\\"class.title\\\"\\n    }\\n  };\\n  const PROPERTY = {\\n    relevance: 0,\\n    match: [\\n      /\\\\./,\\n      IDENT\\n    ],\\n    className: { 2: \\\"property\\\" }\\n  };\\n  const CLASS = {\\n    variants: [\\n      { match: [\\n        /class/,\\n        /\\\\s+/,\\n        IDENT,\\n        /\\\\s+/,\\n        /extends/,\\n        /\\\\s+/,\\n        IDENT\\n      ] },\\n      { match: [\\n        /class/,\\n        /\\\\s+/,\\n        IDENT\\n      ] }\\n    ],\\n    className: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.class\\\",\\n      5: \\\"keyword\\\",\\n      7: \\\"title.class.inherited\\\"\\n    }\\n  };\\n\\n  const TYPES = [\\n    \\\"boolean\\\",\\n    \\\"byte\\\",\\n    \\\"char\\\",\\n    \\\"color\\\",\\n    \\\"double\\\",\\n    \\\"float\\\",\\n    \\\"int\\\",\\n    \\\"long\\\",\\n    \\\"short\\\",\\n  ];\\n  const CLASSES = [\\n    \\\"BufferedReader\\\",\\n    \\\"PVector\\\",\\n    \\\"PFont\\\",\\n    \\\"PImage\\\",\\n    \\\"PGraphics\\\",\\n    \\\"HashMap\\\",\\n    \\\"String\\\",\\n    \\\"Array\\\",\\n    \\\"FloatDict\\\",\\n    \\\"ArrayList\\\",\\n    \\\"FloatList\\\",\\n    \\\"IntDict\\\",\\n    \\\"IntList\\\",\\n    \\\"JSONArray\\\",\\n    \\\"JSONObject\\\",\\n    \\\"Object\\\",\\n    \\\"StringDict\\\",\\n    \\\"StringList\\\",\\n    \\\"Table\\\",\\n    \\\"TableRow\\\",\\n    \\\"XML\\\"\\n  ];\\n  const JAVA_KEYWORDS = [\\n    \\\"abstract\\\",\\n    \\\"assert\\\",\\n    \\\"break\\\",\\n    \\\"case\\\",\\n    \\\"catch\\\",\\n    \\\"const\\\",\\n    \\\"continue\\\",\\n    \\\"default\\\",\\n    \\\"else\\\",\\n    \\\"enum\\\",\\n    \\\"final\\\",\\n    \\\"finally\\\",\\n    \\\"for\\\",\\n    \\\"if\\\",\\n    \\\"import\\\",\\n    \\\"instanceof\\\",\\n    \\\"long\\\",\\n    \\\"native\\\",\\n    \\\"new\\\",\\n    \\\"package\\\",\\n    \\\"private\\\",\\n    \\\"private\\\",\\n    \\\"protected\\\",\\n    \\\"protected\\\",\\n    \\\"public\\\",\\n    \\\"public\\\",\\n    \\\"return\\\",\\n    \\\"static\\\",\\n    \\\"strictfp\\\",\\n    \\\"switch\\\",\\n    \\\"synchronized\\\",\\n    \\\"throw\\\",\\n    \\\"throws\\\",\\n    \\\"transient\\\",\\n    \\\"try\\\",\\n    \\\"void\\\",\\n    \\\"volatile\\\",\\n    \\\"while\\\"\\n  ];\\n\\n  return {\\n    name: 'Processing',\\n    aliases: [ 'pde' ],\\n    keywords: {\\n      keyword: [ ...JAVA_KEYWORDS ],\\n      literal: 'P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI null true false',\\n      title: 'setup draw',\\n      variable: \\\"super this\\\",\\n      built_in: [\\n        ...BUILT_INS,\\n        ...CLASSES\\n      ],\\n      type: TYPES\\n    },\\n    contains: [\\n      CLASS,\\n      NEW_CLASS,\\n      FUNC_NAME,\\n      PROPERTY,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.C_NUMBER_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = processing;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/processing.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/profile.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/profile.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Python profiler\\nDescription: Python profiler results\\nAuthor: Brian Beck <exogen@gmail.com>\\n*/\\n\\nfunction profile(hljs) {\\n  return {\\n    name: 'Python profiler',\\n    contains: [\\n      hljs.C_NUMBER_MODE,\\n      {\\n        begin: '[a-zA-Z_][\\\\\\\\da-zA-Z_]+\\\\\\\\.[\\\\\\\\da-zA-Z_]{1,3}',\\n        end: ':',\\n        excludeEnd: true\\n      },\\n      {\\n        begin: '(ncalls|tottime|cumtime)',\\n        end: '$',\\n        keywords: 'ncalls tottime|10 cumtime|10 filename',\\n        relevance: 10\\n      },\\n      {\\n        begin: 'function calls',\\n        end: '$',\\n        contains: [ hljs.C_NUMBER_MODE ],\\n        relevance: 10\\n      },\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'string',\\n        begin: '\\\\\\\\(',\\n        end: '\\\\\\\\)$',\\n        excludeBegin: true,\\n        excludeEnd: true,\\n        relevance: 0\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = profile;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/profile.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/prolog.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/prolog.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Prolog\\nDescription: Prolog is a general purpose logic programming language associated with artificial intelligence and computational linguistics.\\nAuthor: Raivo Laanemets <raivo@infdot.com>\\nWebsite: https://en.wikipedia.org/wiki/Prolog\\n*/\\n\\nfunction prolog(hljs) {\\n  const ATOM = {\\n\\n    begin: /[a-z][A-Za-z0-9_]*/,\\n    relevance: 0\\n  };\\n\\n  const VAR = {\\n\\n    className: 'symbol',\\n    variants: [\\n      { begin: /[A-Z][a-zA-Z0-9_]*/ },\\n      { begin: /_[A-Za-z0-9_]*/ }\\n    ],\\n    relevance: 0\\n  };\\n\\n  const PARENTED = {\\n\\n    begin: /\\\\(/,\\n    end: /\\\\)/,\\n    relevance: 0\\n  };\\n\\n  const LIST = {\\n\\n    begin: /\\\\[/,\\n    end: /\\\\]/\\n  };\\n\\n  const LINE_COMMENT = {\\n\\n    className: 'comment',\\n    begin: /%/,\\n    end: /$/,\\n    contains: [ hljs.PHRASAL_WORDS_MODE ]\\n  };\\n\\n  const BACKTICK_STRING = {\\n\\n    className: 'string',\\n    begin: /`/,\\n    end: /`/,\\n    contains: [ hljs.BACKSLASH_ESCAPE ]\\n  };\\n\\n  const CHAR_CODE = {\\n    className: 'string', // 0'a etc.\\n    begin: /0'(\\\\\\\\'|.)/\\n  };\\n\\n  const SPACE_CODE = {\\n    className: 'string',\\n    begin: /0'\\\\\\\\s/ // 0'\\\\s\\n  };\\n\\n  const PRED_OP = { // relevance booster\\n    begin: /:-/ };\\n\\n  const inner = [\\n\\n    ATOM,\\n    VAR,\\n    PARENTED,\\n    PRED_OP,\\n    LIST,\\n    LINE_COMMENT,\\n    hljs.C_BLOCK_COMMENT_MODE,\\n    hljs.QUOTE_STRING_MODE,\\n    hljs.APOS_STRING_MODE,\\n    BACKTICK_STRING,\\n    CHAR_CODE,\\n    SPACE_CODE,\\n    hljs.C_NUMBER_MODE\\n  ];\\n\\n  PARENTED.contains = inner;\\n  LIST.contains = inner;\\n\\n  return {\\n    name: 'Prolog',\\n    contains: inner.concat([\\n      { // relevance booster\\n        begin: /\\\\.$/ }\\n    ])\\n  };\\n}\\n\\nmodule.exports = prolog;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/prolog.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/properties.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/properties.js ***!\n  \\***************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: .properties\\nContributors: Valentin Aitken <valentin@nalisbg.com>, Egor Rogov <e.rogov@postgrespro.ru>\\nWebsite: https://en.wikipedia.org/wiki/.properties\\nCategory: config\\n*/\\n\\n/** @type LanguageFn */\\nfunction properties(hljs) {\\n  // whitespaces: space, tab, formfeed\\n  const WS0 = '[ \\\\\\\\t\\\\\\\\f]*';\\n  const WS1 = '[ \\\\\\\\t\\\\\\\\f]+';\\n  // delimiter\\n  const EQUAL_DELIM = WS0 + '[:=]' + WS0;\\n  const WS_DELIM = WS1;\\n  const DELIM = '(' + EQUAL_DELIM + '|' + WS_DELIM + ')';\\n  const KEY = '([^\\\\\\\\\\\\\\\\:= \\\\\\\\t\\\\\\\\f\\\\\\\\n]|\\\\\\\\\\\\\\\\.)+';\\n\\n  const DELIM_AND_VALUE = {\\n    // skip DELIM\\n    end: DELIM,\\n    relevance: 0,\\n    starts: {\\n      // value: everything until end of line (again, taking into account backslashes)\\n      className: 'string',\\n      end: /$/,\\n      relevance: 0,\\n      contains: [\\n        { begin: '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' },\\n        { begin: '\\\\\\\\\\\\\\\\\\\\\\\\n' }\\n      ]\\n    }\\n  };\\n\\n  return {\\n    name: '.properties',\\n    disableAutodetect: true,\\n    case_insensitive: true,\\n    illegal: /\\\\S/,\\n    contains: [\\n      hljs.COMMENT('^\\\\\\\\s*[!#]', '$'),\\n      // key: everything until whitespace or = or : (taking into account backslashes)\\n      // case of a key-value pair\\n      {\\n        returnBegin: true,\\n        variants: [\\n          { begin: KEY + EQUAL_DELIM },\\n          { begin: KEY + WS_DELIM }\\n        ],\\n        contains: [\\n          {\\n            className: 'attr',\\n            begin: KEY,\\n            endsParent: true\\n          }\\n        ],\\n        starts: DELIM_AND_VALUE\\n      },\\n      // case of an empty key\\n      {\\n        className: 'attr',\\n        begin: KEY + WS0 + '$'\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = properties;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/properties.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/protobuf.js\":\n/*!*************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/protobuf.js ***!\n  \\*************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Protocol Buffers\\nAuthor: Dan Tao <daniel.tao@gmail.com>\\nDescription: Protocol buffer message definition format\\nWebsite: https://developers.google.com/protocol-buffers/docs/proto3\\nCategory: protocols\\n*/\\n\\nfunction protobuf(hljs) {\\n  const KEYWORDS = [\\n    \\\"package\\\",\\n    \\\"import\\\",\\n    \\\"option\\\",\\n    \\\"optional\\\",\\n    \\\"required\\\",\\n    \\\"repeated\\\",\\n    \\\"group\\\",\\n    \\\"oneof\\\"\\n  ];\\n  const TYPES = [\\n    \\\"double\\\",\\n    \\\"float\\\",\\n    \\\"int32\\\",\\n    \\\"int64\\\",\\n    \\\"uint32\\\",\\n    \\\"uint64\\\",\\n    \\\"sint32\\\",\\n    \\\"sint64\\\",\\n    \\\"fixed32\\\",\\n    \\\"fixed64\\\",\\n    \\\"sfixed32\\\",\\n    \\\"sfixed64\\\",\\n    \\\"bool\\\",\\n    \\\"string\\\",\\n    \\\"bytes\\\"\\n  ];\\n  const CLASS_DEFINITION = {\\n    match: [\\n      /(message|enum|service)\\\\s+/,\\n      hljs.IDENT_RE\\n    ],\\n    scope: {\\n      1: \\\"keyword\\\",\\n      2: \\\"title.class\\\"\\n    }\\n  };\\n\\n  return {\\n    name: 'Protocol Buffers',\\n    aliases: ['proto'],\\n    keywords: {\\n      keyword: KEYWORDS,\\n      type: TYPES,\\n      literal: [\\n        'true',\\n        'false'\\n      ]\\n    },\\n    contains: [\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.NUMBER_MODE,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      CLASS_DEFINITION,\\n      {\\n        className: 'function',\\n        beginKeywords: 'rpc',\\n        end: /[{;]/,\\n        excludeEnd: true,\\n        keywords: 'rpc returns'\\n      },\\n      { // match enum items (relevance)\\n        // BLAH = ...;\\n        begin: /^\\\\s*[A-Z_]+(?=\\\\s*=[^\\\\n]+;$)/ }\\n    ]\\n  };\\n}\\n\\nmodule.exports = protobuf;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/protobuf.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/puppet.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/puppet.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Puppet\\nAuthor: Jose Molina Colmenero <gaudy41@gmail.com>\\nWebsite: https://puppet.com/docs\\nCategory: config\\n*/\\n\\nfunction puppet(hljs) {\\n  const PUPPET_KEYWORDS = {\\n    keyword:\\n    /* language keywords */\\n      'and case default else elsif false if in import enherits node or true undef unless main settings $string ',\\n    literal:\\n    /* metaparameters */\\n      'alias audit before loglevel noop require subscribe tag '\\n      /* normal attributes */\\n      + 'owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check '\\n      + 'en_address ip_address realname command environment hour monute month monthday special target weekday '\\n      + 'creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore '\\n      + 'links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source '\\n      + 'souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid '\\n      + 'ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel '\\n      + 'native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options '\\n      + 'device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use '\\n      + 'message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform '\\n      + 'responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running '\\n      + 'start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age '\\n      + 'password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled '\\n      + 'enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist '\\n      + 'priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey '\\n      + 'sslverify mounted',\\n    built_in:\\n    /* core facts */\\n      'architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers '\\n      + 'domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces '\\n      + 'ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion '\\n      + 'kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease '\\n      + 'lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major '\\n      + 'macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease '\\n      + 'operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion '\\n      + 'rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced '\\n      + 'selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime '\\n      + 'uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version'\\n  };\\n\\n  const COMMENT = hljs.COMMENT('#', '$');\\n\\n  const IDENT_RE = '([A-Za-z_]|::)(\\\\\\\\w|::)*';\\n\\n  const TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE });\\n\\n  const VARIABLE = {\\n    className: 'variable',\\n    begin: '\\\\\\\\$' + IDENT_RE\\n  };\\n\\n  const STRING = {\\n    className: 'string',\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      VARIABLE\\n    ],\\n    variants: [\\n      {\\n        begin: /'/,\\n        end: /'/\\n      },\\n      {\\n        begin: /\\\"/,\\n        end: /\\\"/\\n      }\\n    ]\\n  };\\n\\n  return {\\n    name: 'Puppet',\\n    aliases: [ 'pp' ],\\n    contains: [\\n      COMMENT,\\n      VARIABLE,\\n      STRING,\\n      {\\n        beginKeywords: 'class',\\n        end: '\\\\\\\\{|;',\\n        illegal: /=/,\\n        contains: [\\n          TITLE,\\n          COMMENT\\n        ]\\n      },\\n      {\\n        beginKeywords: 'define',\\n        end: /\\\\{/,\\n        contains: [\\n          {\\n            className: 'section',\\n            begin: hljs.IDENT_RE,\\n            endsParent: true\\n          }\\n        ]\\n      },\\n      {\\n        begin: hljs.IDENT_RE + '\\\\\\\\s+\\\\\\\\{',\\n        returnBegin: true,\\n        end: /\\\\S/,\\n        contains: [\\n          {\\n            className: 'keyword',\\n            begin: hljs.IDENT_RE,\\n            relevance: 0.2\\n          },\\n          {\\n            begin: /\\\\{/,\\n            end: /\\\\}/,\\n            keywords: PUPPET_KEYWORDS,\\n            relevance: 0,\\n            contains: [\\n              STRING,\\n              COMMENT,\\n              {\\n                begin: '[a-zA-Z_]+\\\\\\\\s*=>',\\n                returnBegin: true,\\n                end: '=>',\\n                contains: [\\n                  {\\n                    className: 'attr',\\n                    begin: hljs.IDENT_RE\\n                  }\\n                ]\\n              },\\n              {\\n                className: 'number',\\n                begin: '(\\\\\\\\b0[0-7_]+)|(\\\\\\\\b0x[0-9a-fA-F_]+)|(\\\\\\\\b[1-9][0-9_]*(\\\\\\\\.[0-9_]+)?)|[0_]\\\\\\\\b',\\n                relevance: 0\\n              },\\n              VARIABLE\\n            ]\\n          }\\n        ],\\n        relevance: 0\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = puppet;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/puppet.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/purebasic.js\":\n/*!**************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/purebasic.js ***!\n  \\**************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: PureBASIC\\nAuthor: Tristano Ajmone <tajmone@gmail.com>\\nDescription: Syntax highlighting for PureBASIC (v.5.00-5.60). No inline ASM highlighting. (v.1.2, May 2017)\\nCredits: I've taken inspiration from the PureBasic language file for GeSHi, created by Gustavo Julio Fiorenza (GuShH).\\nWebsite: https://www.purebasic.com\\n*/\\n\\n// Base deafult colors in PB IDE: background: #FFFFDF; foreground: #000000;\\n\\nfunction purebasic(hljs) {\\n  const STRINGS = { // PB IDE color: #0080FF (Azure Radiance)\\n    className: 'string',\\n    begin: '(~)?\\\"',\\n    end: '\\\"',\\n    illegal: '\\\\\\\\n'\\n  };\\n  const CONSTANTS = { // PB IDE color: #924B72 (Cannon Pink)\\n    //  \\\"#\\\" + a letter or underscore + letters, digits or underscores + (optional) \\\"$\\\"\\n    className: 'symbol',\\n    begin: '#[a-zA-Z_]\\\\\\\\w*\\\\\\\\$?'\\n  };\\n\\n  return {\\n    name: 'PureBASIC',\\n    aliases: [\\n      'pb',\\n      'pbi'\\n    ],\\n    keywords: // PB IDE color: #006666 (Blue Stone) + Bold\\n      // Keywords from all version of PureBASIC 5.00 upward ...\\n      'Align And Array As Break CallDebugger Case CompilerCase CompilerDefault '\\n      + 'CompilerElse CompilerElseIf CompilerEndIf CompilerEndSelect CompilerError '\\n      + 'CompilerIf CompilerSelect CompilerWarning Continue Data DataSection Debug '\\n      + 'DebugLevel Declare DeclareC DeclareCDLL DeclareDLL DeclareModule Default '\\n      + 'Define Dim DisableASM DisableDebugger DisableExplicit Else ElseIf EnableASM '\\n      + 'EnableDebugger EnableExplicit End EndDataSection EndDeclareModule EndEnumeration '\\n      + 'EndIf EndImport EndInterface EndMacro EndModule EndProcedure EndSelect '\\n      + 'EndStructure EndStructureUnion EndWith Enumeration EnumerationBinary Extends '\\n      + 'FakeReturn For ForEach ForEver Global Gosub Goto If Import ImportC '\\n      + 'IncludeBinary IncludeFile IncludePath Interface List Macro MacroExpandedCount '\\n      + 'Map Module NewList NewMap Next Not Or Procedure ProcedureC '\\n      + 'ProcedureCDLL ProcedureDLL ProcedureReturn Protected Prototype PrototypeC ReDim '\\n      + 'Read Repeat Restore Return Runtime Select Shared Static Step Structure '\\n      + 'StructureUnion Swap Threaded To UndefineMacro Until Until  UnuseModule '\\n      + 'UseModule Wend While With XIncludeFile XOr',\\n    contains: [\\n      // COMMENTS | PB IDE color: #00AAAA (Persian Green)\\n      hljs.COMMENT(';', '$', { relevance: 0 }),\\n\\n      { // PROCEDURES DEFINITIONS\\n        className: 'function',\\n        begin: '\\\\\\\\b(Procedure|Declare)(C|CDLL|DLL)?\\\\\\\\b',\\n        end: '\\\\\\\\(',\\n        excludeEnd: true,\\n        returnBegin: true,\\n        contains: [\\n          { // PROCEDURE KEYWORDS | PB IDE color: #006666 (Blue Stone) + Bold\\n            className: 'keyword',\\n            begin: '(Procedure|Declare)(C|CDLL|DLL)?',\\n            excludeEnd: true\\n          },\\n          { // PROCEDURE RETURN TYPE SETTING | PB IDE color: #000000 (Black)\\n            className: 'type',\\n            begin: '\\\\\\\\.\\\\\\\\w*'\\n            // end: ' ',\\n          },\\n          hljs.UNDERSCORE_TITLE_MODE // PROCEDURE NAME | PB IDE color: #006666 (Blue Stone)\\n        ]\\n      },\\n      STRINGS,\\n      CONSTANTS\\n    ]\\n  };\\n}\\n\\n/*  ==============================================================================\\n                                      CHANGELOG\\n    ==============================================================================\\n    - v.1.2 (2017-05-12)\\n        -- BUG-FIX: Some keywords were accidentally joyned together. Now fixed.\\n    - v.1.1 (2017-04-30)\\n        -- Updated to PureBASIC 5.60.\\n        -- Keywords list now built by extracting them from the PureBASIC SDK's\\n           \\\"SyntaxHilighting.dll\\\" (from each PureBASIC version). Tokens from each\\n           version are added to the list, and renamed or removed tokens are kept\\n           for the sake of covering all versions of the language from PureBASIC\\n           v5.00 upward. (NOTE: currently, there are no renamed or deprecated\\n           tokens in the keywords list). For more info, see:\\n           -- http://www.purebasic.fr/english/viewtopic.php?&p=506269\\n           -- https://github.com/tajmone/purebasic-archives/tree/master/syntax-highlighting/guidelines\\n    - v.1.0 (April 2016)\\n        -- First release\\n        -- Keywords list taken and adapted from GuShH's (Gustavo Julio Fiorenza)\\n           PureBasic language file for GeSHi:\\n           -- https://github.com/easybook/geshi/blob/master/geshi/purebasic.php\\n*/\\n\\nmodule.exports = purebasic;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/purebasic.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/python-repl.js\":\n/*!****************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/python-repl.js ***!\n  \\****************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Python REPL\\nRequires: python.js\\nAuthor: Josh Goebel <hello@joshgoebel.com>\\nCategory: common\\n*/\\n\\nfunction pythonRepl(hljs) {\\n  return {\\n    aliases: [ 'pycon' ],\\n    contains: [\\n      {\\n        className: 'meta.prompt',\\n        starts: {\\n          // a space separates the REPL prefix from the actual code\\n          // this is purely for cleaner HTML output\\n          end: / |$/,\\n          starts: {\\n            end: '$',\\n            subLanguage: 'python'\\n          }\\n        },\\n        variants: [\\n          { begin: /^>>>(?=[ ]|$)/ },\\n          { begin: /^\\\\.\\\\.\\\\.(?=[ ]|$)/ }\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = pythonRepl;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/python-repl.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/python.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/python.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Python\\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\\nWebsite: https://www.python.org\\nCategory: common\\n*/\\n\\nfunction python(hljs) {\\n  const regex = hljs.regex;\\n  const IDENT_RE = /[\\\\p{XID_Start}_]\\\\p{XID_Continue}*/u;\\n  const RESERVED_WORDS = [\\n    'and',\\n    'as',\\n    'assert',\\n    'async',\\n    'await',\\n    'break',\\n    'case',\\n    'class',\\n    'continue',\\n    'def',\\n    'del',\\n    'elif',\\n    'else',\\n    'except',\\n    'finally',\\n    'for',\\n    'from',\\n    'global',\\n    'if',\\n    'import',\\n    'in',\\n    'is',\\n    'lambda',\\n    'match',\\n    'nonlocal|10',\\n    'not',\\n    'or',\\n    'pass',\\n    'raise',\\n    'return',\\n    'try',\\n    'while',\\n    'with',\\n    'yield'\\n  ];\\n\\n  const BUILT_INS = [\\n    '__import__',\\n    'abs',\\n    'all',\\n    'any',\\n    'ascii',\\n    'bin',\\n    'bool',\\n    'breakpoint',\\n    'bytearray',\\n    'bytes',\\n    'callable',\\n    'chr',\\n    'classmethod',\\n    'compile',\\n    'complex',\\n    'delattr',\\n    'dict',\\n    'dir',\\n    'divmod',\\n    'enumerate',\\n    'eval',\\n    'exec',\\n    'filter',\\n    'float',\\n    'format',\\n    'frozenset',\\n    'getattr',\\n    'globals',\\n    'hasattr',\\n    'hash',\\n    'help',\\n    'hex',\\n    'id',\\n    'input',\\n    'int',\\n    'isinstance',\\n    'issubclass',\\n    'iter',\\n    'len',\\n    'list',\\n    'locals',\\n    'map',\\n    'max',\\n    'memoryview',\\n    'min',\\n    'next',\\n    'object',\\n    'oct',\\n    'open',\\n    'ord',\\n    'pow',\\n    'print',\\n    'property',\\n    'range',\\n    'repr',\\n    'reversed',\\n    'round',\\n    'set',\\n    'setattr',\\n    'slice',\\n    'sorted',\\n    'staticmethod',\\n    'str',\\n    'sum',\\n    'super',\\n    'tuple',\\n    'type',\\n    'vars',\\n    'zip'\\n  ];\\n\\n  const LITERALS = [\\n    '__debug__',\\n    'Ellipsis',\\n    'False',\\n    'None',\\n    'NotImplemented',\\n    'True'\\n  ];\\n\\n  // https://docs.python.org/3/library/typing.html\\n  // TODO: Could these be supplemented by a CamelCase matcher in certain\\n  // contexts, leaving these remaining only for relevance hinting?\\n  const TYPES = [\\n    \\\"Any\\\",\\n    \\\"Callable\\\",\\n    \\\"Coroutine\\\",\\n    \\\"Dict\\\",\\n    \\\"List\\\",\\n    \\\"Literal\\\",\\n    \\\"Generic\\\",\\n    \\\"Optional\\\",\\n    \\\"Sequence\\\",\\n    \\\"Set\\\",\\n    \\\"Tuple\\\",\\n    \\\"Type\\\",\\n    \\\"Union\\\"\\n  ];\\n\\n  const KEYWORDS = {\\n    $pattern: /[A-Za-z]\\\\w+|__\\\\w+__/,\\n    keyword: RESERVED_WORDS,\\n    built_in: BUILT_INS,\\n    literal: LITERALS,\\n    type: TYPES\\n  };\\n\\n  const PROMPT = {\\n    className: 'meta',\\n    begin: /^(>>>|\\\\.\\\\.\\\\.) /\\n  };\\n\\n  const SUBST = {\\n    className: 'subst',\\n    begin: /\\\\{/,\\n    end: /\\\\}/,\\n    keywords: KEYWORDS,\\n    illegal: /#/\\n  };\\n\\n  const LITERAL_BRACKET = {\\n    begin: /\\\\{\\\\{/,\\n    relevance: 0\\n  };\\n\\n  const STRING = {\\n    className: 'string',\\n    contains: [ hljs.BACKSLASH_ESCAPE ],\\n    variants: [\\n      {\\n        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\\n        end: /'''/,\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          PROMPT\\n        ],\\n        relevance: 10\\n      },\\n      {\\n        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\\\"\\\"\\\"/,\\n        end: /\\\"\\\"\\\"/,\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          PROMPT\\n        ],\\n        relevance: 10\\n      },\\n      {\\n        begin: /([fF][rR]|[rR][fF]|[fF])'''/,\\n        end: /'''/,\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          PROMPT,\\n          LITERAL_BRACKET,\\n          SUBST\\n        ]\\n      },\\n      {\\n        begin: /([fF][rR]|[rR][fF]|[fF])\\\"\\\"\\\"/,\\n        end: /\\\"\\\"\\\"/,\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          PROMPT,\\n          LITERAL_BRACKET,\\n          SUBST\\n        ]\\n      },\\n      {\\n        begin: /([uU]|[rR])'/,\\n        end: /'/,\\n        relevance: 10\\n      },\\n      {\\n        begin: /([uU]|[rR])\\\"/,\\n        end: /\\\"/,\\n        relevance: 10\\n      },\\n      {\\n        begin: /([bB]|[bB][rR]|[rR][bB])'/,\\n        end: /'/\\n      },\\n      {\\n        begin: /([bB]|[bB][rR]|[rR][bB])\\\"/,\\n        end: /\\\"/\\n      },\\n      {\\n        begin: /([fF][rR]|[rR][fF]|[fF])'/,\\n        end: /'/,\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          LITERAL_BRACKET,\\n          SUBST\\n        ]\\n      },\\n      {\\n        begin: /([fF][rR]|[rR][fF]|[fF])\\\"/,\\n        end: /\\\"/,\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          LITERAL_BRACKET,\\n          SUBST\\n        ]\\n      },\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE\\n    ]\\n  };\\n\\n  // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\\n  const digitpart = '[0-9](_?[0-9])*';\\n  const pointfloat = `(\\\\\\\\b(${digitpart}))?\\\\\\\\.(${digitpart})|\\\\\\\\b(${digitpart})\\\\\\\\.`;\\n  // Whitespace after a number (or any lexical token) is needed only if its absence\\n  // would change the tokenization\\n  // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\\n  // We deviate slightly, requiring a word boundary or a keyword\\n  // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\\n  const lookahead = `\\\\\\\\b|${RESERVED_WORDS.join('|')}`;\\n  const NUMBER = {\\n    className: 'number',\\n    relevance: 0,\\n    variants: [\\n      // exponentfloat, pointfloat\\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\\n      // optionally imaginary\\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\\n      // Note: no leading \\\\b because floats can start with a decimal point\\n      // and we don't want to mishandle e.g. `fn(.5)`,\\n      // no trailing \\\\b for pointfloat because it can end with a decimal point\\n      // and we don't want to mishandle e.g. `0..hex()`; this should be safe\\n      // because both MUST contain a decimal point and so cannot be confused with\\n      // the interior part of an identifier\\n      {\\n        begin: `(\\\\\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\\n      },\\n      {\\n        begin: `(${pointfloat})[jJ]?`\\n      },\\n\\n      // decinteger, bininteger, octinteger, hexinteger\\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\\n      // optionally \\\"long\\\" in Python 2\\n      // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\\n      // decinteger is optionally imaginary\\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\\n      {\\n        begin: `\\\\\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\\n      },\\n      {\\n        begin: `\\\\\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\\n      },\\n      {\\n        begin: `\\\\\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\\n      },\\n      {\\n        begin: `\\\\\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\\n      },\\n\\n      // imagnumber (digitpart-based)\\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\\n      {\\n        begin: `\\\\\\\\b(${digitpart})[jJ](?=${lookahead})`\\n      }\\n    ]\\n  };\\n  const COMMENT_TYPE = {\\n    className: \\\"comment\\\",\\n    begin: regex.lookahead(/# type:/),\\n    end: /$/,\\n    keywords: KEYWORDS,\\n    contains: [\\n      { // prevent keywords from coloring `type`\\n        begin: /# type:/\\n      },\\n      // comment within a datatype comment includes no keywords\\n      {\\n        begin: /#/,\\n        end: /\\\\b\\\\B/,\\n        endsWithParent: true\\n      }\\n    ]\\n  };\\n  const PARAMS = {\\n    className: 'params',\\n    variants: [\\n      // Exclude params in functions without params\\n      {\\n        className: \\\"\\\",\\n        begin: /\\\\(\\\\s*\\\\)/,\\n        skip: true\\n      },\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        excludeBegin: true,\\n        excludeEnd: true,\\n        keywords: KEYWORDS,\\n        contains: [\\n          'self',\\n          PROMPT,\\n          NUMBER,\\n          STRING,\\n          hljs.HASH_COMMENT_MODE\\n        ]\\n      }\\n    ]\\n  };\\n  SUBST.contains = [\\n    STRING,\\n    NUMBER,\\n    PROMPT\\n  ];\\n\\n  return {\\n    name: 'Python',\\n    aliases: [\\n      'py',\\n      'gyp',\\n      'ipython'\\n    ],\\n    unicodeRegex: true,\\n    keywords: KEYWORDS,\\n    illegal: /(<\\\\/|\\\\?)|=>/,\\n    contains: [\\n      PROMPT,\\n      NUMBER,\\n      {\\n        // very common convention\\n        begin: /\\\\bself\\\\b/\\n      },\\n      {\\n        // eat \\\"if\\\" prior to string so that it won't accidentally be\\n        // labeled as an f-string\\n        beginKeywords: \\\"if\\\",\\n        relevance: 0\\n      },\\n      STRING,\\n      COMMENT_TYPE,\\n      hljs.HASH_COMMENT_MODE,\\n      {\\n        match: [\\n          /\\\\bdef/, /\\\\s+/,\\n          IDENT_RE,\\n        ],\\n        scope: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title.function\\\"\\n        },\\n        contains: [ PARAMS ]\\n      },\\n      {\\n        variants: [\\n          {\\n            match: [\\n              /\\\\bclass/, /\\\\s+/,\\n              IDENT_RE, /\\\\s*/,\\n              /\\\\(\\\\s*/, IDENT_RE,/\\\\s*\\\\)/\\n            ],\\n          },\\n          {\\n            match: [\\n              /\\\\bclass/, /\\\\s+/,\\n              IDENT_RE\\n            ],\\n          }\\n        ],\\n        scope: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title.class\\\",\\n          6: \\\"title.class.inherited\\\",\\n        }\\n      },\\n      {\\n        className: 'meta',\\n        begin: /^[\\\\t ]*@/,\\n        end: /(?=#)|$/,\\n        contains: [\\n          NUMBER,\\n          PARAMS,\\n          STRING\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = python;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/python.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/q.js\":\n/*!******************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/q.js ***!\n  \\******************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Q\\nDescription: Q is a vector-based functional paradigm programming language built into the kdb+ database.\\n             (K/Q/Kdb+ from Kx Systems)\\nAuthor: Sergey Vidyuk <svidyuk@gmail.com>\\nWebsite: https://kx.com/connect-with-us/developers/\\n*/\\n\\nfunction q(hljs) {\\n  const KEYWORDS = {\\n    $pattern: /(`?)[A-Za-z0-9_]+\\\\b/,\\n    keyword:\\n      'do while select delete by update from',\\n    literal:\\n      '0b 1b',\\n    built_in:\\n      'neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum',\\n    type:\\n      '`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid'\\n  };\\n\\n  return {\\n    name: 'Q',\\n    aliases: [\\n      'k',\\n      'kdb'\\n    ],\\n    keywords: KEYWORDS,\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.C_NUMBER_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = q;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/q.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/qml.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/qml.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: QML\\nRequires: javascript.js, xml.js\\nAuthor: John Foster <jfoster@esri.com>\\nDescription: Syntax highlighting for the Qt Quick QML scripting language, based mostly off\\n             the JavaScript parser.\\nWebsite: https://doc.qt.io/qt-5/qmlapplications.html\\nCategory: scripting\\n*/\\n\\nfunction qml(hljs) {\\n  const regex = hljs.regex;\\n  const KEYWORDS = {\\n    keyword:\\n      'in of on if for while finally var new function do return void else break catch '\\n      + 'instanceof with throw case default try this switch continue typeof delete '\\n      + 'let yield const export super debugger as async await import',\\n    literal:\\n      'true false null undefined NaN Infinity',\\n    built_in:\\n      'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent '\\n      + 'encodeURI encodeURIComponent escape unescape Object Function Boolean Error '\\n      + 'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError '\\n      + 'TypeError URIError Number Math Date String RegExp Array Float32Array '\\n      + 'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array '\\n      + 'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require '\\n      + 'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect '\\n      + 'Behavior bool color coordinate date double enumeration font geocircle georectangle '\\n      + 'geoshape int list matrix4x4 parent point quaternion real rect '\\n      + 'size string url variant vector2d vector3d vector4d '\\n      + 'Promise'\\n  };\\n\\n  const QML_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9\\\\\\\\._]*';\\n\\n  // Isolate property statements. Ends at a :, =, ;, ,, a comment or end of line.\\n  // Use property class.\\n  const PROPERTY = {\\n    className: 'keyword',\\n    begin: '\\\\\\\\bproperty\\\\\\\\b',\\n    starts: {\\n      className: 'string',\\n      end: '(:|=|;|,|//|/\\\\\\\\*|$)',\\n      returnEnd: true\\n    }\\n  };\\n\\n  // Isolate signal statements. Ends at a ) a comment or end of line.\\n  // Use property class.\\n  const SIGNAL = {\\n    className: 'keyword',\\n    begin: '\\\\\\\\bsignal\\\\\\\\b',\\n    starts: {\\n      className: 'string',\\n      end: '(\\\\\\\\(|:|=|;|,|//|/\\\\\\\\*|$)',\\n      returnEnd: true\\n    }\\n  };\\n\\n  // id: is special in QML. When we see id: we want to mark the id: as attribute and\\n  // emphasize the token following.\\n  const ID_ID = {\\n    className: 'attribute',\\n    begin: '\\\\\\\\bid\\\\\\\\s*:',\\n    starts: {\\n      className: 'string',\\n      end: QML_IDENT_RE,\\n      returnEnd: false\\n    }\\n  };\\n\\n  // Find QML object attribute. An attribute is a QML identifier followed by :.\\n  // Unfortunately it's hard to know where it ends, as it may contain scalars,\\n  // objects, object definitions, or javascript. The true end is either when the parent\\n  // ends or the next attribute is detected.\\n  const QML_ATTRIBUTE = {\\n    begin: QML_IDENT_RE + '\\\\\\\\s*:',\\n    returnBegin: true,\\n    contains: [\\n      {\\n        className: 'attribute',\\n        begin: QML_IDENT_RE,\\n        end: '\\\\\\\\s*:',\\n        excludeEnd: true,\\n        relevance: 0\\n      }\\n    ],\\n    relevance: 0\\n  };\\n\\n  // Find QML object. A QML object is a QML identifier followed by { and ends at the matching }.\\n  // All we really care about is finding IDENT followed by { and just mark up the IDENT and ignore the {.\\n  const QML_OBJECT = {\\n    begin: regex.concat(QML_IDENT_RE, /\\\\s*\\\\{/),\\n    end: /\\\\{/,\\n    returnBegin: true,\\n    relevance: 0,\\n    contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: QML_IDENT_RE }) ]\\n  };\\n\\n  return {\\n    name: 'QML',\\n    aliases: [ 'qt' ],\\n    case_insensitive: false,\\n    keywords: KEYWORDS,\\n    contains: [\\n      {\\n        className: 'meta',\\n        begin: /^\\\\s*['\\\"]use (strict|asm)['\\\"]/\\n      },\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      { // template string\\n        className: 'string',\\n        begin: '`',\\n        end: '`',\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          {\\n            className: 'subst',\\n            begin: '\\\\\\\\$\\\\\\\\{',\\n            end: '\\\\\\\\}'\\n          }\\n        ]\\n      },\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      {\\n        className: 'number',\\n        variants: [\\n          { begin: '\\\\\\\\b(0[bB][01]+)' },\\n          { begin: '\\\\\\\\b(0[oO][0-7]+)' },\\n          { begin: hljs.C_NUMBER_RE }\\n        ],\\n        relevance: 0\\n      },\\n      { // \\\"value\\\" container\\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\\\\\b(case|return|throw)\\\\\\\\b)\\\\\\\\s*',\\n        keywords: 'return throw case',\\n        contains: [\\n          hljs.C_LINE_COMMENT_MODE,\\n          hljs.C_BLOCK_COMMENT_MODE,\\n          hljs.REGEXP_MODE,\\n          { // E4X / JSX\\n            begin: /</,\\n            end: />\\\\s*[);\\\\]]/,\\n            relevance: 0,\\n            subLanguage: 'xml'\\n          }\\n        ],\\n        relevance: 0\\n      },\\n      SIGNAL,\\n      PROPERTY,\\n      {\\n        className: 'function',\\n        beginKeywords: 'function',\\n        end: /\\\\{/,\\n        excludeEnd: true,\\n        contains: [\\n          hljs.inherit(hljs.TITLE_MODE, { begin: /[A-Za-z$_][0-9A-Za-z$_]*/ }),\\n          {\\n            className: 'params',\\n            begin: /\\\\(/,\\n            end: /\\\\)/,\\n            excludeBegin: true,\\n            excludeEnd: true,\\n            contains: [\\n              hljs.C_LINE_COMMENT_MODE,\\n              hljs.C_BLOCK_COMMENT_MODE\\n            ]\\n          }\\n        ],\\n        illegal: /\\\\[|%/\\n      },\\n      {\\n        // hack: prevents detection of keywords after dots\\n        begin: '\\\\\\\\.' + hljs.IDENT_RE,\\n        relevance: 0\\n      },\\n      ID_ID,\\n      QML_ATTRIBUTE,\\n      QML_OBJECT\\n    ],\\n    illegal: /#/\\n  };\\n}\\n\\nmodule.exports = qml;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/qml.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/r.js\":\n/*!******************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/r.js ***!\n  \\******************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: R\\nDescription: R is a free software environment for statistical computing and graphics.\\nAuthor: Joe Cheng <joe@rstudio.org>\\nContributors: Konrad Rudolph <konrad.rudolph@gmail.com>\\nWebsite: https://www.r-project.org\\nCategory: common,scientific\\n*/\\n\\n/** @type LanguageFn */\\nfunction r(hljs) {\\n  const regex = hljs.regex;\\n  // Identifiers in R cannot start with `_`, but they can start with `.` if it\\n  // is not immediately followed by a digit.\\n  // R also supports quoted identifiers, which are near-arbitrary sequences\\n  // delimited by backticks (`…`), which may contain escape sequences. These are\\n  // handled in a separate mode. See `test/markup/r/names.txt` for examples.\\n  // FIXME: Support Unicode identifiers.\\n  const IDENT_RE = /(?:(?:[a-zA-Z]|\\\\.[._a-zA-Z])[._a-zA-Z0-9]*)|\\\\.(?!\\\\d)/;\\n  const NUMBER_TYPES_RE = regex.either(\\n    // Special case: only hexadecimal binary powers can contain fractions\\n    /0[xX][0-9a-fA-F]+\\\\.[0-9a-fA-F]*[pP][+-]?\\\\d+i?/,\\n    // Hexadecimal numbers without fraction and optional binary power\\n    /0[xX][0-9a-fA-F]+(?:[pP][+-]?\\\\d+)?[Li]?/,\\n    // Decimal numbers\\n    /(?:\\\\d+(?:\\\\.\\\\d*)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?[Li]?/\\n  );\\n  const OPERATORS_RE = /[=!<>:]=|\\\\|\\\\||&&|:::?|<-|<<-|->>|->|\\\\|>|[-+*\\\\/?!$&|:<=>@^~]|\\\\*\\\\*/;\\n  const PUNCTUATION_RE = regex.either(\\n    /[()]/,\\n    /[{}]/,\\n    /\\\\[\\\\[/,\\n    /[[\\\\]]/,\\n    /\\\\\\\\/,\\n    /,/\\n  );\\n\\n  return {\\n    name: 'R',\\n\\n    keywords: {\\n      $pattern: IDENT_RE,\\n      keyword:\\n        'function if in break next repeat else for while',\\n      literal:\\n        'NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 '\\n        + 'NA_character_|10 NA_complex_|10',\\n      built_in:\\n        // Builtin constants\\n        'LETTERS letters month.abb month.name pi T F '\\n        // Primitive functions\\n        // These are all the functions in `base` that are implemented as a\\n        // `.Primitive`, minus those functions that are also keywords.\\n        + 'abs acos acosh all any anyNA Arg as.call as.character '\\n        + 'as.complex as.double as.environment as.integer as.logical '\\n        + 'as.null.default as.numeric as.raw asin asinh atan atanh attr '\\n        + 'attributes baseenv browser c call ceiling class Conj cos cosh '\\n        + 'cospi cummax cummin cumprod cumsum digamma dim dimnames '\\n        + 'emptyenv exp expression floor forceAndCall gamma gc.time '\\n        + 'globalenv Im interactive invisible is.array is.atomic is.call '\\n        + 'is.character is.complex is.double is.environment is.expression '\\n        + 'is.finite is.function is.infinite is.integer is.language '\\n        + 'is.list is.logical is.matrix is.na is.name is.nan is.null '\\n        + 'is.numeric is.object is.pairlist is.raw is.recursive is.single '\\n        + 'is.symbol lazyLoadDBfetch length lgamma list log max min '\\n        + 'missing Mod names nargs nzchar oldClass on.exit pos.to.env '\\n        + 'proc.time prod quote range Re rep retracemem return round '\\n        + 'seq_along seq_len seq.int sign signif sin sinh sinpi sqrt '\\n        + 'standardGeneric substitute sum switch tan tanh tanpi tracemem '\\n        + 'trigamma trunc unclass untracemem UseMethod xtfrm',\\n    },\\n\\n    contains: [\\n      // Roxygen comments\\n      hljs.COMMENT(\\n        /#'/,\\n        /$/,\\n        { contains: [\\n          {\\n            // Handle `@examples` separately to cause all subsequent code\\n            // until the next `@`-tag on its own line to be kept as-is,\\n            // preventing highlighting. This code is example R code, so nested\\n            // doctags shouldn’t be treated as such. See\\n            // `test/markup/r/roxygen.txt` for an example.\\n            scope: 'doctag',\\n            match: /@examples/,\\n            starts: {\\n              end: regex.lookahead(regex.either(\\n                // end if another doc comment\\n                /\\\\n^#'\\\\s*(?=@[a-zA-Z]+)/,\\n                // or a line with no comment\\n                /\\\\n^(?!#')/\\n              )),\\n              endsParent: true\\n            }\\n          },\\n          {\\n            // Handle `@param` to highlight the parameter name following\\n            // after.\\n            scope: 'doctag',\\n            begin: '@param',\\n            end: /$/,\\n            contains: [\\n              {\\n                scope: 'variable',\\n                variants: [\\n                  { match: IDENT_RE },\\n                  { match: /`(?:\\\\\\\\.|[^`\\\\\\\\])+`/ }\\n                ],\\n                endsParent: true\\n              }\\n            ]\\n          },\\n          {\\n            scope: 'doctag',\\n            match: /@[a-zA-Z]+/\\n          },\\n          {\\n            scope: 'keyword',\\n            match: /\\\\\\\\[a-zA-Z]+/\\n          }\\n        ] }\\n      ),\\n\\n      hljs.HASH_COMMENT_MODE,\\n\\n      {\\n        scope: 'string',\\n        contains: [ hljs.BACKSLASH_ESCAPE ],\\n        variants: [\\n          hljs.END_SAME_AS_BEGIN({\\n            begin: /[rR]\\\"(-*)\\\\(/,\\n            end: /\\\\)(-*)\\\"/\\n          }),\\n          hljs.END_SAME_AS_BEGIN({\\n            begin: /[rR]\\\"(-*)\\\\{/,\\n            end: /\\\\}(-*)\\\"/\\n          }),\\n          hljs.END_SAME_AS_BEGIN({\\n            begin: /[rR]\\\"(-*)\\\\[/,\\n            end: /\\\\](-*)\\\"/\\n          }),\\n          hljs.END_SAME_AS_BEGIN({\\n            begin: /[rR]'(-*)\\\\(/,\\n            end: /\\\\)(-*)'/\\n          }),\\n          hljs.END_SAME_AS_BEGIN({\\n            begin: /[rR]'(-*)\\\\{/,\\n            end: /\\\\}(-*)'/\\n          }),\\n          hljs.END_SAME_AS_BEGIN({\\n            begin: /[rR]'(-*)\\\\[/,\\n            end: /\\\\](-*)'/\\n          }),\\n          {\\n            begin: '\\\"',\\n            end: '\\\"',\\n            relevance: 0\\n          },\\n          {\\n            begin: \\\"'\\\",\\n            end: \\\"'\\\",\\n            relevance: 0\\n          }\\n        ],\\n      },\\n\\n      // Matching numbers immediately following punctuation and operators is\\n      // tricky since we need to look at the character ahead of a number to\\n      // ensure the number is not part of an identifier, and we cannot use\\n      // negative look-behind assertions. So instead we explicitly handle all\\n      // possible combinations of (operator|punctuation), number.\\n      // TODO: replace with negative look-behind when available\\n      // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+\\\\.[0-9a-fA-F]*[pP][+-]?\\\\d+i?/ },\\n      // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+([pP][+-]?\\\\d+)?[Li]?/ },\\n      // { begin: /(?<![a-zA-Z0-9._])(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][+-]?\\\\d+)?[Li]?/ }\\n      {\\n        relevance: 0,\\n        variants: [\\n          {\\n            scope: {\\n              1: 'operator',\\n              2: 'number'\\n            },\\n            match: [\\n              OPERATORS_RE,\\n              NUMBER_TYPES_RE\\n            ]\\n          },\\n          {\\n            scope: {\\n              1: 'operator',\\n              2: 'number'\\n            },\\n            match: [\\n              /%[^%]*%/,\\n              NUMBER_TYPES_RE\\n            ]\\n          },\\n          {\\n            scope: {\\n              1: 'punctuation',\\n              2: 'number'\\n            },\\n            match: [\\n              PUNCTUATION_RE,\\n              NUMBER_TYPES_RE\\n            ]\\n          },\\n          {\\n            scope: { 2: 'number' },\\n            match: [\\n              /[^a-zA-Z0-9._]|^/, // not part of an identifier, or start of document\\n              NUMBER_TYPES_RE\\n            ]\\n          }\\n        ]\\n      },\\n\\n      // Operators/punctuation when they're not directly followed by numbers\\n      {\\n        // Relevance boost for the most common assignment form.\\n        scope: { 3: 'operator' },\\n        match: [\\n          IDENT_RE,\\n          /\\\\s+/,\\n          /<-/,\\n          /\\\\s+/\\n        ]\\n      },\\n\\n      {\\n        scope: 'operator',\\n        relevance: 0,\\n        variants: [\\n          { match: OPERATORS_RE },\\n          { match: /%[^%]*%/ }\\n        ]\\n      },\\n\\n      {\\n        scope: 'punctuation',\\n        relevance: 0,\\n        match: PUNCTUATION_RE\\n      },\\n\\n      {\\n        // Escaped identifier\\n        begin: '`',\\n        end: '`',\\n        contains: [ { begin: /\\\\\\\\./ } ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = r;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/r.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/reasonml.js\":\n/*!*************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/reasonml.js ***!\n  \\*************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: ReasonML\\nDescription: Reason lets you write simple, fast and quality type safe code while leveraging both the JavaScript & OCaml ecosystems.\\nWebsite: https://reasonml.github.io\\nAuthor: Gidi Meir Morris <oss@gidi.io>\\nCategory: functional\\n*/\\nfunction reasonml(hljs) {\\n  function orReValues(ops) {\\n    return ops\\n      .map(function(op) {\\n        return op\\n          .split('')\\n          .map(function(char) {\\n            return '\\\\\\\\' + char;\\n          })\\n          .join('');\\n      })\\n      .join('|');\\n  }\\n\\n  const RE_IDENT = '~?[a-z$_][0-9a-zA-Z$_]*';\\n  const RE_MODULE_IDENT = '`?[A-Z$_][0-9a-zA-Z$_]*';\\n\\n  const RE_PARAM_TYPEPARAM = '\\\\'?[a-z$_][0-9a-z$_]*';\\n  const RE_PARAM_TYPE = '\\\\\\\\s*:\\\\\\\\s*[a-z$_][0-9a-z$_]*(\\\\\\\\(\\\\\\\\s*(' + RE_PARAM_TYPEPARAM + '\\\\\\\\s*(,' + RE_PARAM_TYPEPARAM + '\\\\\\\\s*)*)?\\\\\\\\))?';\\n  const RE_PARAM = RE_IDENT + '(' + RE_PARAM_TYPE + '){0,2}';\\n  const RE_OPERATOR = \\\"(\\\" + orReValues([\\n    '||',\\n    '++',\\n    '**',\\n    '+.',\\n    '*',\\n    '/',\\n    '*.',\\n    '/.',\\n    '...'\\n  ]) + \\\"|\\\\\\\\|>|&&|==|===)\\\";\\n  const RE_OPERATOR_SPACED = \\\"\\\\\\\\s+\\\" + RE_OPERATOR + \\\"\\\\\\\\s+\\\";\\n\\n  const KEYWORDS = {\\n    keyword:\\n      'and as asr assert begin class constraint do done downto else end exception external '\\n      + 'for fun function functor if in include inherit initializer '\\n      + 'land lazy let lor lsl lsr lxor match method mod module mutable new nonrec '\\n      + 'object of open or private rec sig struct then to try type val virtual when while with',\\n    built_in:\\n      'array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 ref string unit ',\\n    literal:\\n      'true false'\\n  };\\n\\n  const RE_NUMBER = '\\\\\\\\b(0[xX][a-fA-F0-9_]+[Lln]?|'\\n    + '0[oO][0-7_]+[Lln]?|'\\n    + '0[bB][01_]+[Lln]?|'\\n    + '[0-9][0-9_]*([Lln]|(\\\\\\\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)';\\n\\n  const NUMBER_MODE = {\\n    className: 'number',\\n    relevance: 0,\\n    variants: [\\n      { begin: RE_NUMBER },\\n      { begin: '\\\\\\\\(-' + RE_NUMBER + '\\\\\\\\)' }\\n    ]\\n  };\\n\\n  const OPERATOR_MODE = {\\n    className: 'operator',\\n    relevance: 0,\\n    begin: RE_OPERATOR\\n  };\\n  const LIST_CONTENTS_MODES = [\\n    {\\n      className: 'identifier',\\n      relevance: 0,\\n      begin: RE_IDENT\\n    },\\n    OPERATOR_MODE,\\n    NUMBER_MODE\\n  ];\\n\\n  const MODULE_ACCESS_CONTENTS = [\\n    hljs.QUOTE_STRING_MODE,\\n    OPERATOR_MODE,\\n    {\\n      className: 'module',\\n      begin: \\\"\\\\\\\\b\\\" + RE_MODULE_IDENT,\\n      returnBegin: true,\\n      relevance: 0,\\n      end: \\\"\\\\.\\\",\\n      contains: [\\n        {\\n          className: 'identifier',\\n          begin: RE_MODULE_IDENT,\\n          relevance: 0\\n        }\\n      ]\\n    }\\n  ];\\n\\n  const PARAMS_CONTENTS = [\\n    {\\n      className: 'module',\\n      begin: \\\"\\\\\\\\b\\\" + RE_MODULE_IDENT,\\n      returnBegin: true,\\n      end: \\\"\\\\.\\\",\\n      relevance: 0,\\n      contains: [\\n        {\\n          className: 'identifier',\\n          begin: RE_MODULE_IDENT,\\n          relevance: 0\\n        }\\n      ]\\n    }\\n  ];\\n\\n  const PARAMS_MODE = {\\n    begin: RE_IDENT,\\n    end: '(,|\\\\\\\\n|\\\\\\\\))',\\n    relevance: 0,\\n    contains: [\\n      OPERATOR_MODE,\\n      {\\n        className: 'typing',\\n        begin: ':',\\n        end: '(,|\\\\\\\\n)',\\n        returnBegin: true,\\n        relevance: 0,\\n        contains: PARAMS_CONTENTS\\n      }\\n    ]\\n  };\\n\\n  const FUNCTION_BLOCK_MODE = {\\n    className: 'function',\\n    relevance: 0,\\n    keywords: KEYWORDS,\\n    variants: [\\n      {\\n        begin: '\\\\\\\\s(\\\\\\\\(\\\\\\\\.?.*?\\\\\\\\)|' + RE_IDENT + ')\\\\\\\\s*=>',\\n        end: '\\\\\\\\s*=>',\\n        returnBegin: true,\\n        relevance: 0,\\n        contains: [\\n          {\\n            className: 'params',\\n            variants: [\\n              { begin: RE_IDENT },\\n              { begin: RE_PARAM },\\n              { begin: /\\\\(\\\\s*\\\\)/ }\\n            ]\\n          }\\n        ]\\n      },\\n      {\\n        begin: '\\\\\\\\s\\\\\\\\(\\\\\\\\.?[^;\\\\\\\\|]*\\\\\\\\)\\\\\\\\s*=>',\\n        end: '\\\\\\\\s=>',\\n        returnBegin: true,\\n        relevance: 0,\\n        contains: [\\n          {\\n            className: 'params',\\n            relevance: 0,\\n            variants: [ PARAMS_MODE ]\\n          }\\n        ]\\n      },\\n      { begin: '\\\\\\\\(\\\\\\\\.\\\\\\\\s' + RE_IDENT + '\\\\\\\\)\\\\\\\\s*=>' }\\n    ]\\n  };\\n  MODULE_ACCESS_CONTENTS.push(FUNCTION_BLOCK_MODE);\\n\\n  const CONSTRUCTOR_MODE = {\\n    className: 'constructor',\\n    begin: RE_MODULE_IDENT + '\\\\\\\\(',\\n    end: '\\\\\\\\)',\\n    illegal: '\\\\\\\\n',\\n    keywords: KEYWORDS,\\n    contains: [\\n      hljs.QUOTE_STRING_MODE,\\n      OPERATOR_MODE,\\n      {\\n        className: 'params',\\n        begin: '\\\\\\\\b' + RE_IDENT\\n      }\\n    ]\\n  };\\n\\n  const PATTERN_MATCH_BLOCK_MODE = {\\n    className: 'pattern-match',\\n    begin: '\\\\\\\\|',\\n    returnBegin: true,\\n    keywords: KEYWORDS,\\n    end: '=>',\\n    relevance: 0,\\n    contains: [\\n      CONSTRUCTOR_MODE,\\n      OPERATOR_MODE,\\n      {\\n        relevance: 0,\\n        className: 'constructor',\\n        begin: RE_MODULE_IDENT\\n      }\\n    ]\\n  };\\n\\n  const MODULE_ACCESS_MODE = {\\n    className: 'module-access',\\n    keywords: KEYWORDS,\\n    returnBegin: true,\\n    variants: [\\n      { begin: \\\"\\\\\\\\b(\\\" + RE_MODULE_IDENT + \\\"\\\\\\\\.)+\\\" + RE_IDENT },\\n      {\\n        begin: \\\"\\\\\\\\b(\\\" + RE_MODULE_IDENT + \\\"\\\\\\\\.)+\\\\\\\\(\\\",\\n        end: \\\"\\\\\\\\)\\\",\\n        returnBegin: true,\\n        contains: [\\n          FUNCTION_BLOCK_MODE,\\n          {\\n            begin: '\\\\\\\\(',\\n            end: '\\\\\\\\)',\\n            relevance: 0,\\n            skip: true\\n          }\\n        ].concat(MODULE_ACCESS_CONTENTS)\\n      },\\n      {\\n        begin: \\\"\\\\\\\\b(\\\" + RE_MODULE_IDENT + \\\"\\\\\\\\.)+\\\\\\\\{\\\",\\n        end: /\\\\}/\\n      }\\n    ],\\n    contains: MODULE_ACCESS_CONTENTS\\n  };\\n\\n  PARAMS_CONTENTS.push(MODULE_ACCESS_MODE);\\n\\n  return {\\n    name: 'ReasonML',\\n    aliases: [ 're' ],\\n    keywords: KEYWORDS,\\n    illegal: '(:-|:=|\\\\\\\\$\\\\\\\\{|\\\\\\\\+=)',\\n    contains: [\\n      hljs.COMMENT('/\\\\\\\\*', '\\\\\\\\*/', { illegal: '^(#,\\\\\\\\/\\\\\\\\/)' }),\\n      {\\n        className: 'character',\\n        begin: '\\\\'(\\\\\\\\\\\\\\\\[^\\\\']+|[^\\\\'])\\\\'',\\n        illegal: '\\\\\\\\n',\\n        relevance: 0\\n      },\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'literal',\\n        begin: '\\\\\\\\(\\\\\\\\)',\\n        relevance: 0\\n      },\\n      {\\n        className: 'literal',\\n        begin: '\\\\\\\\[\\\\\\\\|',\\n        end: '\\\\\\\\|\\\\\\\\]',\\n        relevance: 0,\\n        contains: LIST_CONTENTS_MODES\\n      },\\n      {\\n        className: 'literal',\\n        begin: '\\\\\\\\[',\\n        end: '\\\\\\\\]',\\n        relevance: 0,\\n        contains: LIST_CONTENTS_MODES\\n      },\\n      CONSTRUCTOR_MODE,\\n      {\\n        className: 'operator',\\n        begin: RE_OPERATOR_SPACED,\\n        illegal: '-->',\\n        relevance: 0\\n      },\\n      NUMBER_MODE,\\n      hljs.C_LINE_COMMENT_MODE,\\n      PATTERN_MATCH_BLOCK_MODE,\\n      FUNCTION_BLOCK_MODE,\\n      {\\n        className: 'module-def',\\n        begin: \\\"\\\\\\\\bmodule\\\\\\\\s+\\\" + RE_IDENT + \\\"\\\\\\\\s+\\\" + RE_MODULE_IDENT + \\\"\\\\\\\\s+=\\\\\\\\s+\\\\\\\\{\\\",\\n        end: /\\\\}/,\\n        returnBegin: true,\\n        keywords: KEYWORDS,\\n        relevance: 0,\\n        contains: [\\n          {\\n            className: 'module',\\n            relevance: 0,\\n            begin: RE_MODULE_IDENT\\n          },\\n          {\\n            begin: /\\\\{/,\\n            end: /\\\\}/,\\n            relevance: 0,\\n            skip: true\\n          }\\n        ].concat(MODULE_ACCESS_CONTENTS)\\n      },\\n      MODULE_ACCESS_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = reasonml;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/reasonml.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/rib.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/rib.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: RenderMan RIB\\nAuthor: Konstantin Evdokimenko <qewerty@gmail.com>\\nContributors: Shuen-Huei Guan <drake.guan@gmail.com>\\nWebsite: https://renderman.pixar.com/resources/RenderMan_20/ribBinding.html\\nCategory: graphics\\n*/\\n\\nfunction rib(hljs) {\\n  return {\\n    name: 'RenderMan RIB',\\n    keywords:\\n      'ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis '\\n      + 'Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone '\\n      + 'CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail '\\n      + 'DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format '\\n      + 'FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry '\\n      + 'Hider Hyperboloid Identity Illuminate Imager Interior LightSource '\\n      + 'MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte '\\n      + 'MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option '\\n      + 'Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples '\\n      + 'PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection '\\n      + 'Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow '\\n      + 'ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere '\\n      + 'SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd '\\n      + 'TransformPoints Translate TrimCurve WorldBegin WorldEnd',\\n    illegal: '</',\\n    contains: [\\n      hljs.HASH_COMMENT_MODE,\\n      hljs.C_NUMBER_MODE,\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = rib;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/rib.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/roboconf.js\":\n/*!*************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/roboconf.js ***!\n  \\*************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Roboconf\\nAuthor: Vincent Zurczak <vzurczak@linagora.com>\\nDescription: Syntax highlighting for Roboconf's DSL\\nWebsite: http://roboconf.net\\nCategory: config\\n*/\\n\\nfunction roboconf(hljs) {\\n  const IDENTIFIER = '[a-zA-Z-_][^\\\\\\\\n{]+\\\\\\\\{';\\n\\n  const PROPERTY = {\\n    className: 'attribute',\\n    begin: /[a-zA-Z-_]+/,\\n    end: /\\\\s*:/,\\n    excludeEnd: true,\\n    starts: {\\n      end: ';',\\n      relevance: 0,\\n      contains: [\\n        {\\n          className: 'variable',\\n          begin: /\\\\.[a-zA-Z-_]+/\\n        },\\n        {\\n          className: 'keyword',\\n          begin: /\\\\(optional\\\\)/\\n        }\\n      ]\\n    }\\n  };\\n\\n  return {\\n    name: 'Roboconf',\\n    aliases: [\\n      'graph',\\n      'instances'\\n    ],\\n    case_insensitive: true,\\n    keywords: 'import',\\n    contains: [\\n      // Facet sections\\n      {\\n        begin: '^facet ' + IDENTIFIER,\\n        end: /\\\\}/,\\n        keywords: 'facet',\\n        contains: [\\n          PROPERTY,\\n          hljs.HASH_COMMENT_MODE\\n        ]\\n      },\\n\\n      // Instance sections\\n      {\\n        begin: '^\\\\\\\\s*instance of ' + IDENTIFIER,\\n        end: /\\\\}/,\\n        keywords: 'name count channels instance-data instance-state instance of',\\n        illegal: /\\\\S/,\\n        contains: [\\n          'self',\\n          PROPERTY,\\n          hljs.HASH_COMMENT_MODE\\n        ]\\n      },\\n\\n      // Component sections\\n      {\\n        begin: '^' + IDENTIFIER,\\n        end: /\\\\}/,\\n        contains: [\\n          PROPERTY,\\n          hljs.HASH_COMMENT_MODE\\n        ]\\n      },\\n\\n      // Comments\\n      hljs.HASH_COMMENT_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = roboconf;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/roboconf.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/routeros.js\":\n/*!*************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/routeros.js ***!\n  \\*************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: MikroTik RouterOS script\\nAuthor: Ivan Dementev <ivan_div@mail.ru>\\nDescription: Scripting host provides a way to automate some router maintenance tasks by means of executing user-defined scripts bounded to some event occurrence\\nWebsite: https://wiki.mikrotik.com/wiki/Manual:Scripting\\n*/\\n\\n// Colors from RouterOS terminal:\\n//   green        - #0E9A00\\n//   teal         - #0C9A9A\\n//   purple       - #99069A\\n//   light-brown  - #9A9900\\n\\nfunction routeros(hljs) {\\n  const STATEMENTS = 'foreach do while for if from to step else on-error and or not in';\\n\\n  // Global commands: Every global command should start with \\\":\\\" token, otherwise it will be treated as variable.\\n  const GLOBAL_COMMANDS = 'global local beep delay put len typeof pick log time set find environment terminal error execute parse resolve toarray tobool toid toip toip6 tonum tostr totime';\\n\\n  // Common commands: Following commands available from most sub-menus:\\n  const COMMON_COMMANDS = 'add remove enable disable set get print export edit find run debug error info warning';\\n\\n  const LITERALS = 'true false yes no nothing nil null';\\n\\n  const OBJECTS = 'traffic-flow traffic-generator firewall scheduler aaa accounting address-list address align area bandwidth-server bfd bgp bridge client clock community config connection console customer default dhcp-client dhcp-server discovery dns e-mail ethernet filter firmware gps graphing group hardware health hotspot identity igmp-proxy incoming instance interface ip ipsec ipv6 irq l2tp-server lcd ldp logging mac-server mac-winbox mangle manual mirror mme mpls nat nd neighbor network note ntp ospf ospf-v3 ovpn-server page peer pim ping policy pool port ppp pppoe-client pptp-server prefix profile proposal proxy queue radius resource rip ripng route routing screen script security-profiles server service service-port settings shares smb sms sniffer snmp snooper socks sstp-server system tool tracking type upgrade upnp user-manager users user vlan secret vrrp watchdog web-access wireless pptp pppoe lan wan layer7-protocol lease simple raw';\\n\\n  const VAR = {\\n    className: 'variable',\\n    variants: [\\n      { begin: /\\\\$[\\\\w\\\\d#@][\\\\w\\\\d_]*/ },\\n      { begin: /\\\\$\\\\{(.*?)\\\\}/ }\\n    ]\\n  };\\n\\n  const QUOTE_STRING = {\\n    className: 'string',\\n    begin: /\\\"/,\\n    end: /\\\"/,\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      VAR,\\n      {\\n        className: 'variable',\\n        begin: /\\\\$\\\\(/,\\n        end: /\\\\)/,\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      }\\n    ]\\n  };\\n\\n  const APOS_STRING = {\\n    className: 'string',\\n    begin: /'/,\\n    end: /'/\\n  };\\n\\n  return {\\n    name: 'MikroTik RouterOS script',\\n    aliases: [ 'mikrotik' ],\\n    case_insensitive: true,\\n    keywords: {\\n      $pattern: /:?[\\\\w-]+/,\\n      literal: LITERALS,\\n      keyword: STATEMENTS + ' :' + STATEMENTS.split(' ').join(' :') + ' :' + GLOBAL_COMMANDS.split(' ').join(' :')\\n    },\\n    contains: [\\n      { // illegal syntax\\n        variants: [\\n          { // -- comment\\n            begin: /\\\\/\\\\*/,\\n            end: /\\\\*\\\\//\\n          },\\n          { // Stan comment\\n            begin: /\\\\/\\\\//,\\n            end: /$/\\n          },\\n          { // HTML tags\\n            begin: /<\\\\//,\\n            end: />/\\n          }\\n        ],\\n        illegal: /./\\n      },\\n      hljs.COMMENT('^#', '$'),\\n      QUOTE_STRING,\\n      APOS_STRING,\\n      VAR,\\n      // attribute=value\\n      {\\n        // > is to avoid matches with => in other grammars\\n        begin: /[\\\\w-]+=([^\\\\s{}[\\\\]()>]+)/,\\n        relevance: 0,\\n        returnBegin: true,\\n        contains: [\\n          {\\n            className: 'attribute',\\n            begin: /[^=]+/\\n          },\\n          {\\n            begin: /=/,\\n            endsWithParent: true,\\n            relevance: 0,\\n            contains: [\\n              QUOTE_STRING,\\n              APOS_STRING,\\n              VAR,\\n              {\\n                className: 'literal',\\n                begin: '\\\\\\\\b(' + LITERALS.split(' ').join('|') + ')\\\\\\\\b'\\n              },\\n              {\\n                // Do not format unclassified values. Needed to exclude highlighting of values as built_in.\\n                begin: /(\\\"[^\\\"]*\\\"|[^\\\\s{}[\\\\]]+)/ }\\n              /*\\n              {\\n                // IPv4 addresses and subnets\\n                className: 'number',\\n                variants: [\\n                  {begin: IPADDR_wBITMASK+'(,'+IPADDR_wBITMASK+')*'}, //192.168.0.0/24,1.2.3.0/24\\n                  {begin: IPADDR+'-'+IPADDR},       // 192.168.0.1-192.168.0.3\\n                  {begin: IPADDR+'(,'+IPADDR+')*'}, // 192.168.0.1,192.168.0.34,192.168.24.1,192.168.0.1\\n                ]\\n              },\\n              {\\n                // MAC addresses and DHCP Client IDs\\n                className: 'number',\\n                begin: /\\\\b(1:)?([0-9A-Fa-f]{1,2}[:-]){5}([0-9A-Fa-f]){1,2}\\\\b/,\\n              },\\n              */\\n            ]\\n          }\\n        ]\\n      },\\n      {\\n        // HEX values\\n        className: 'number',\\n        begin: /\\\\*[0-9a-fA-F]+/\\n      },\\n      {\\n        begin: '\\\\\\\\b(' + COMMON_COMMANDS.split(' ').join('|') + ')([\\\\\\\\s[(\\\\\\\\]|])',\\n        returnBegin: true,\\n        contains: [\\n          {\\n            className: 'built_in', // 'function',\\n            begin: /\\\\w+/\\n          }\\n        ]\\n      },\\n      {\\n        className: 'built_in',\\n        variants: [\\n          { begin: '(\\\\\\\\.\\\\\\\\./|/|\\\\\\\\s)((' + OBJECTS.split(' ').join('|') + ');?\\\\\\\\s)+' },\\n          {\\n            begin: /\\\\.\\\\./,\\n            relevance: 0\\n          }\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = routeros;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/routeros.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/rsl.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/rsl.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: RenderMan RSL\\nAuthor: Konstantin Evdokimenko <qewerty@gmail.com>\\nContributors: Shuen-Huei Guan <drake.guan@gmail.com>\\nWebsite: https://renderman.pixar.com/resources/RenderMan_20/shadingLanguage.html\\nCategory: graphics\\n*/\\n\\nfunction rsl(hljs) {\\n  const BUILT_INS = [\\n    \\\"abs\\\",\\n    \\\"acos\\\",\\n    \\\"ambient\\\",\\n    \\\"area\\\",\\n    \\\"asin\\\",\\n    \\\"atan\\\",\\n    \\\"atmosphere\\\",\\n    \\\"attribute\\\",\\n    \\\"calculatenormal\\\",\\n    \\\"ceil\\\",\\n    \\\"cellnoise\\\",\\n    \\\"clamp\\\",\\n    \\\"comp\\\",\\n    \\\"concat\\\",\\n    \\\"cos\\\",\\n    \\\"degrees\\\",\\n    \\\"depth\\\",\\n    \\\"Deriv\\\",\\n    \\\"diffuse\\\",\\n    \\\"distance\\\",\\n    \\\"Du\\\",\\n    \\\"Dv\\\",\\n    \\\"environment\\\",\\n    \\\"exp\\\",\\n    \\\"faceforward\\\",\\n    \\\"filterstep\\\",\\n    \\\"floor\\\",\\n    \\\"format\\\",\\n    \\\"fresnel\\\",\\n    \\\"incident\\\",\\n    \\\"length\\\",\\n    \\\"lightsource\\\",\\n    \\\"log\\\",\\n    \\\"match\\\",\\n    \\\"max\\\",\\n    \\\"min\\\",\\n    \\\"mod\\\",\\n    \\\"noise\\\",\\n    \\\"normalize\\\",\\n    \\\"ntransform\\\",\\n    \\\"opposite\\\",\\n    \\\"option\\\",\\n    \\\"phong\\\",\\n    \\\"pnoise\\\",\\n    \\\"pow\\\",\\n    \\\"printf\\\",\\n    \\\"ptlined\\\",\\n    \\\"radians\\\",\\n    \\\"random\\\",\\n    \\\"reflect\\\",\\n    \\\"refract\\\",\\n    \\\"renderinfo\\\",\\n    \\\"round\\\",\\n    \\\"setcomp\\\",\\n    \\\"setxcomp\\\",\\n    \\\"setycomp\\\",\\n    \\\"setzcomp\\\",\\n    \\\"shadow\\\",\\n    \\\"sign\\\",\\n    \\\"sin\\\",\\n    \\\"smoothstep\\\",\\n    \\\"specular\\\",\\n    \\\"specularbrdf\\\",\\n    \\\"spline\\\",\\n    \\\"sqrt\\\",\\n    \\\"step\\\",\\n    \\\"tan\\\",\\n    \\\"texture\\\",\\n    \\\"textureinfo\\\",\\n    \\\"trace\\\",\\n    \\\"transform\\\",\\n    \\\"vtransform\\\",\\n    \\\"xcomp\\\",\\n    \\\"ycomp\\\",\\n    \\\"zcomp\\\"\\n  ];\\n\\n  const TYPES = [\\n    \\\"matrix\\\",\\n    \\\"float\\\",\\n    \\\"color\\\",\\n    \\\"point\\\",\\n    \\\"normal\\\",\\n    \\\"vector\\\"\\n  ];\\n\\n  const KEYWORDS = [\\n    \\\"while\\\",\\n    \\\"for\\\",\\n    \\\"if\\\",\\n    \\\"do\\\",\\n    \\\"return\\\",\\n    \\\"else\\\",\\n    \\\"break\\\",\\n    \\\"extern\\\",\\n    \\\"continue\\\"\\n  ];\\n\\n  const CLASS_DEFINITION = {\\n    match: [\\n      /(surface|displacement|light|volume|imager)/,\\n      /\\\\s+/,\\n      hljs.IDENT_RE,\\n    ],\\n    scope: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.class\\\",\\n    }\\n  };\\n\\n  return {\\n    name: 'RenderMan RSL',\\n    keywords: {\\n      keyword: KEYWORDS,\\n      built_in: BUILT_INS,\\n      type: TYPES\\n    },\\n    illegal: '</',\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.APOS_STRING_MODE,\\n      hljs.C_NUMBER_MODE,\\n      {\\n        className: 'meta',\\n        begin: '#',\\n        end: '$'\\n      },\\n      CLASS_DEFINITION,\\n      {\\n        beginKeywords: 'illuminate illuminance gather',\\n        end: '\\\\\\\\('\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = rsl;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/rsl.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/ruby.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/ruby.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Ruby\\nDescription: Ruby is a dynamic, open source programming language with a focus on simplicity and productivity.\\nWebsite: https://www.ruby-lang.org/\\nAuthor: Anton Kovalyov <anton@kovalyov.net>\\nContributors: Peter Leonov <gojpeg@yandex.ru>, Vasily Polovnyov <vast@whiteants.net>, Loren Segal <lsegal@soen.ca>, Pascal Hurni <phi@ruby-reactive.org>, Cedric Sohrauer <sohrauer@googlemail.com>\\nCategory: common\\n*/\\n\\nfunction ruby(hljs) {\\n  const regex = hljs.regex;\\n  const RUBY_METHOD_RE = '([a-zA-Z_]\\\\\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\\\\\*\\\\\\\\*|[-/+%^&*~`|]|\\\\\\\\[\\\\\\\\]=?)';\\n  // TODO: move concepts like CAMEL_CASE into `modes.js`\\n  const CLASS_NAME_RE = regex.either(\\n    /\\\\b([A-Z]+[a-z0-9]+)+/,\\n    // ends in caps\\n    /\\\\b([A-Z]+[a-z0-9]+)+[A-Z]+/,\\n  )\\n  ;\\n  const CLASS_NAME_WITH_NAMESPACE_RE = regex.concat(CLASS_NAME_RE, /(::\\\\w+)*/);\\n  // very popular ruby built-ins that one might even assume\\n  // are actual keywords (despite that not being the case)\\n  const PSEUDO_KWS = [\\n    \\\"include\\\",\\n    \\\"extend\\\",\\n    \\\"prepend\\\",\\n    \\\"public\\\",\\n    \\\"private\\\",\\n    \\\"protected\\\",\\n    \\\"raise\\\",\\n    \\\"throw\\\"\\n  ];\\n  const RUBY_KEYWORDS = {\\n    \\\"variable.constant\\\": [\\n      \\\"__FILE__\\\",\\n      \\\"__LINE__\\\",\\n      \\\"__ENCODING__\\\"\\n    ],\\n    \\\"variable.language\\\": [\\n      \\\"self\\\",\\n      \\\"super\\\",\\n    ],\\n    keyword: [\\n      \\\"alias\\\",\\n      \\\"and\\\",\\n      \\\"begin\\\",\\n      \\\"BEGIN\\\",\\n      \\\"break\\\",\\n      \\\"case\\\",\\n      \\\"class\\\",\\n      \\\"defined\\\",\\n      \\\"do\\\",\\n      \\\"else\\\",\\n      \\\"elsif\\\",\\n      \\\"end\\\",\\n      \\\"END\\\",\\n      \\\"ensure\\\",\\n      \\\"for\\\",\\n      \\\"if\\\",\\n      \\\"in\\\",\\n      \\\"module\\\",\\n      \\\"next\\\",\\n      \\\"not\\\",\\n      \\\"or\\\",\\n      \\\"redo\\\",\\n      \\\"require\\\",\\n      \\\"rescue\\\",\\n      \\\"retry\\\",\\n      \\\"return\\\",\\n      \\\"then\\\",\\n      \\\"undef\\\",\\n      \\\"unless\\\",\\n      \\\"until\\\",\\n      \\\"when\\\",\\n      \\\"while\\\",\\n      \\\"yield\\\",\\n      ...PSEUDO_KWS\\n    ],\\n    built_in: [\\n      \\\"proc\\\",\\n      \\\"lambda\\\",\\n      \\\"attr_accessor\\\",\\n      \\\"attr_reader\\\",\\n      \\\"attr_writer\\\",\\n      \\\"define_method\\\",\\n      \\\"private_constant\\\",\\n      \\\"module_function\\\"\\n    ],\\n    literal: [\\n      \\\"true\\\",\\n      \\\"false\\\",\\n      \\\"nil\\\"\\n    ]\\n  };\\n  const YARDOCTAG = {\\n    className: 'doctag',\\n    begin: '@[A-Za-z]+'\\n  };\\n  const IRB_OBJECT = {\\n    begin: '#<',\\n    end: '>'\\n  };\\n  const COMMENT_MODES = [\\n    hljs.COMMENT(\\n      '#',\\n      '$',\\n      { contains: [ YARDOCTAG ] }\\n    ),\\n    hljs.COMMENT(\\n      '^=begin',\\n      '^=end',\\n      {\\n        contains: [ YARDOCTAG ],\\n        relevance: 10\\n      }\\n    ),\\n    hljs.COMMENT('^__END__', hljs.MATCH_NOTHING_RE)\\n  ];\\n  const SUBST = {\\n    className: 'subst',\\n    begin: /#\\\\{/,\\n    end: /\\\\}/,\\n    keywords: RUBY_KEYWORDS\\n  };\\n  const STRING = {\\n    className: 'string',\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      SUBST\\n    ],\\n    variants: [\\n      {\\n        begin: /'/,\\n        end: /'/\\n      },\\n      {\\n        begin: /\\\"/,\\n        end: /\\\"/\\n      },\\n      {\\n        begin: /`/,\\n        end: /`/\\n      },\\n      {\\n        begin: /%[qQwWx]?\\\\(/,\\n        end: /\\\\)/\\n      },\\n      {\\n        begin: /%[qQwWx]?\\\\[/,\\n        end: /\\\\]/\\n      },\\n      {\\n        begin: /%[qQwWx]?\\\\{/,\\n        end: /\\\\}/\\n      },\\n      {\\n        begin: /%[qQwWx]?</,\\n        end: />/\\n      },\\n      {\\n        begin: /%[qQwWx]?\\\\//,\\n        end: /\\\\//\\n      },\\n      {\\n        begin: /%[qQwWx]?%/,\\n        end: /%/\\n      },\\n      {\\n        begin: /%[qQwWx]?-/,\\n        end: /-/\\n      },\\n      {\\n        begin: /%[qQwWx]?\\\\|/,\\n        end: /\\\\|/\\n      },\\n      // in the following expressions, \\\\B in the beginning suppresses recognition of ?-sequences\\n      // where ? is the last character of a preceding identifier, as in: `func?4`\\n      { begin: /\\\\B\\\\?(\\\\\\\\\\\\d{1,3})/ },\\n      { begin: /\\\\B\\\\?(\\\\\\\\x[A-Fa-f0-9]{1,2})/ },\\n      { begin: /\\\\B\\\\?(\\\\\\\\u\\\\{?[A-Fa-f0-9]{1,6}\\\\}?)/ },\\n      { begin: /\\\\B\\\\?(\\\\\\\\M-\\\\\\\\C-|\\\\\\\\M-\\\\\\\\c|\\\\\\\\c\\\\\\\\M-|\\\\\\\\M-|\\\\\\\\C-\\\\\\\\M-)[\\\\x20-\\\\x7e]/ },\\n      { begin: /\\\\B\\\\?\\\\\\\\(c|C-)[\\\\x20-\\\\x7e]/ },\\n      { begin: /\\\\B\\\\?\\\\\\\\?\\\\S/ },\\n      // heredocs\\n      {\\n        // this guard makes sure that we have an entire heredoc and not a false\\n        // positive (auto-detect, etc.)\\n        begin: regex.concat(\\n          /<<[-~]?'?/,\\n          regex.lookahead(/(\\\\w+)(?=\\\\W)[^\\\\n]*\\\\n(?:[^\\\\n]*\\\\n)*?\\\\s*\\\\1\\\\b/)\\n        ),\\n        contains: [\\n          hljs.END_SAME_AS_BEGIN({\\n            begin: /(\\\\w+)/,\\n            end: /(\\\\w+)/,\\n            contains: [\\n              hljs.BACKSLASH_ESCAPE,\\n              SUBST\\n            ]\\n          })\\n        ]\\n      }\\n    ]\\n  };\\n\\n  // Ruby syntax is underdocumented, but this grammar seems to be accurate\\n  // as of version 2.7.2 (confirmed with (irb and `Ripper.sexp(...)`)\\n  // https://docs.ruby-lang.org/en/2.7.0/doc/syntax/literals_rdoc.html#label-Numbers\\n  const decimal = '[1-9](_?[0-9])*|0';\\n  const digits = '[0-9](_?[0-9])*';\\n  const NUMBER = {\\n    className: 'number',\\n    relevance: 0,\\n    variants: [\\n      // decimal integer/float, optionally exponential or rational, optionally imaginary\\n      { begin: `\\\\\\\\b(${decimal})(\\\\\\\\.(${digits}))?([eE][+-]?(${digits})|r)?i?\\\\\\\\b` },\\n\\n      // explicit decimal/binary/octal/hexadecimal integer,\\n      // optionally rational and/or imaginary\\n      { begin: \\\"\\\\\\\\b0[dD][0-9](_?[0-9])*r?i?\\\\\\\\b\\\" },\\n      { begin: \\\"\\\\\\\\b0[bB][0-1](_?[0-1])*r?i?\\\\\\\\b\\\" },\\n      { begin: \\\"\\\\\\\\b0[oO][0-7](_?[0-7])*r?i?\\\\\\\\b\\\" },\\n      { begin: \\\"\\\\\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\\\\\\\b\\\" },\\n\\n      // 0-prefixed implicit octal integer, optionally rational and/or imaginary\\n      { begin: \\\"\\\\\\\\b0(_?[0-7])+r?i?\\\\\\\\b\\\" }\\n    ]\\n  };\\n\\n  const PARAMS = {\\n    variants: [\\n      {\\n        match: /\\\\(\\\\)/,\\n      },\\n      {\\n        className: 'params',\\n        begin: /\\\\(/,\\n        end: /(?=\\\\))/,\\n        excludeBegin: true,\\n        endsParent: true,\\n        keywords: RUBY_KEYWORDS,\\n      }\\n    ]\\n  };\\n\\n  const INCLUDE_EXTEND = {\\n    match: [\\n      /(include|extend)\\\\s+/,\\n      CLASS_NAME_WITH_NAMESPACE_RE\\n    ],\\n    scope: {\\n      2: \\\"title.class\\\"\\n    },\\n    keywords: RUBY_KEYWORDS\\n  };\\n\\n  const CLASS_DEFINITION = {\\n    variants: [\\n      {\\n        match: [\\n          /class\\\\s+/,\\n          CLASS_NAME_WITH_NAMESPACE_RE,\\n          /\\\\s+<\\\\s+/,\\n          CLASS_NAME_WITH_NAMESPACE_RE\\n        ]\\n      },\\n      {\\n        match: [\\n          /\\\\b(class|module)\\\\s+/,\\n          CLASS_NAME_WITH_NAMESPACE_RE\\n        ]\\n      }\\n    ],\\n    scope: {\\n      2: \\\"title.class\\\",\\n      4: \\\"title.class.inherited\\\"\\n    },\\n    keywords: RUBY_KEYWORDS\\n  };\\n\\n  const UPPER_CASE_CONSTANT = {\\n    relevance: 0,\\n    match: /\\\\b[A-Z][A-Z_0-9]+\\\\b/,\\n    className: \\\"variable.constant\\\"\\n  };\\n\\n  const METHOD_DEFINITION = {\\n    match: [\\n      /def/, /\\\\s+/,\\n      RUBY_METHOD_RE\\n    ],\\n    scope: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.function\\\"\\n    },\\n    contains: [\\n      PARAMS\\n    ]\\n  };\\n\\n  const OBJECT_CREATION = {\\n    relevance: 0,\\n    match: [\\n      CLASS_NAME_WITH_NAMESPACE_RE,\\n      /\\\\.new[. (]/\\n    ],\\n    scope: {\\n      1: \\\"title.class\\\"\\n    }\\n  };\\n\\n  // CamelCase\\n  const CLASS_REFERENCE = {\\n    relevance: 0,\\n    match: CLASS_NAME_RE,\\n    scope: \\\"title.class\\\"\\n  };\\n\\n  const RUBY_DEFAULT_CONTAINS = [\\n    STRING,\\n    CLASS_DEFINITION,\\n    INCLUDE_EXTEND,\\n    OBJECT_CREATION,\\n    UPPER_CASE_CONSTANT,\\n    CLASS_REFERENCE,\\n    METHOD_DEFINITION,\\n    {\\n      // swallow namespace qualifiers before symbols\\n      begin: hljs.IDENT_RE + '::' },\\n    {\\n      className: 'symbol',\\n      begin: hljs.UNDERSCORE_IDENT_RE + '(!|\\\\\\\\?)?:',\\n      relevance: 0\\n    },\\n    {\\n      className: 'symbol',\\n      begin: ':(?!\\\\\\\\s)',\\n      contains: [\\n        STRING,\\n        { begin: RUBY_METHOD_RE }\\n      ],\\n      relevance: 0\\n    },\\n    NUMBER,\\n    {\\n      // negative-look forward attempts to prevent false matches like:\\n      // @ident@ or $ident$ that might indicate this is not ruby at all\\n      className: \\\"variable\\\",\\n      begin: '(\\\\\\\\$\\\\\\\\W)|((\\\\\\\\$|@@?)(\\\\\\\\w+))(?=[^@$?])' + `(?![A-Za-z])(?![@$?'])`\\n    },\\n    {\\n      className: 'params',\\n      begin: /\\\\|/,\\n      end: /\\\\|/,\\n      excludeBegin: true,\\n      excludeEnd: true,\\n      relevance: 0, // this could be a lot of things (in other languages) other than params\\n      keywords: RUBY_KEYWORDS\\n    },\\n    { // regexp container\\n      begin: '(' + hljs.RE_STARTERS_RE + '|unless)\\\\\\\\s*',\\n      keywords: 'unless',\\n      contains: [\\n        {\\n          className: 'regexp',\\n          contains: [\\n            hljs.BACKSLASH_ESCAPE,\\n            SUBST\\n          ],\\n          illegal: /\\\\n/,\\n          variants: [\\n            {\\n              begin: '/',\\n              end: '/[a-z]*'\\n            },\\n            {\\n              begin: /%r\\\\{/,\\n              end: /\\\\}[a-z]*/\\n            },\\n            {\\n              begin: '%r\\\\\\\\(',\\n              end: '\\\\\\\\)[a-z]*'\\n            },\\n            {\\n              begin: '%r!',\\n              end: '![a-z]*'\\n            },\\n            {\\n              begin: '%r\\\\\\\\[',\\n              end: '\\\\\\\\][a-z]*'\\n            }\\n          ]\\n        }\\n      ].concat(IRB_OBJECT, COMMENT_MODES),\\n      relevance: 0\\n    }\\n  ].concat(IRB_OBJECT, COMMENT_MODES);\\n\\n  SUBST.contains = RUBY_DEFAULT_CONTAINS;\\n  PARAMS.contains = RUBY_DEFAULT_CONTAINS;\\n\\n  // >>\\n  // ?>\\n  const SIMPLE_PROMPT = \\\"[>?]>\\\";\\n  // irb(main):001:0>\\n  const DEFAULT_PROMPT = \\\"[\\\\\\\\w#]+\\\\\\\\(\\\\\\\\w+\\\\\\\\):\\\\\\\\d+:\\\\\\\\d+[>*]\\\";\\n  const RVM_PROMPT = \\\"(\\\\\\\\w+-)?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+(p\\\\\\\\d+)?[^\\\\\\\\d][^>]+>\\\";\\n\\n  const IRB_DEFAULT = [\\n    {\\n      begin: /^\\\\s*=>/,\\n      starts: {\\n        end: '$',\\n        contains: RUBY_DEFAULT_CONTAINS\\n      }\\n    },\\n    {\\n      className: 'meta.prompt',\\n      begin: '^(' + SIMPLE_PROMPT + \\\"|\\\" + DEFAULT_PROMPT + '|' + RVM_PROMPT + ')(?=[ ])',\\n      starts: {\\n        end: '$',\\n        keywords: RUBY_KEYWORDS,\\n        contains: RUBY_DEFAULT_CONTAINS\\n      }\\n    }\\n  ];\\n\\n  COMMENT_MODES.unshift(IRB_OBJECT);\\n\\n  return {\\n    name: 'Ruby',\\n    aliases: [\\n      'rb',\\n      'gemspec',\\n      'podspec',\\n      'thor',\\n      'irb'\\n    ],\\n    keywords: RUBY_KEYWORDS,\\n    illegal: /\\\\/\\\\*/,\\n    contains: [ hljs.SHEBANG({ binary: \\\"ruby\\\" }) ]\\n      .concat(IRB_DEFAULT)\\n      .concat(COMMENT_MODES)\\n      .concat(RUBY_DEFAULT_CONTAINS)\\n  };\\n}\\n\\nmodule.exports = ruby;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/ruby.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/ruleslanguage.js\":\n/*!******************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/ruleslanguage.js ***!\n  \\******************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Oracle Rules Language\\nAuthor: Jason Jacobson <jason.a.jacobson@gmail.com>\\nDescription: The Oracle Utilities Rules Language is used to program the Oracle Utilities Applications acquired from LODESTAR Corporation.  The products include Billing Component, LPSS, Pricing Component etc. through version 1.6.1.\\nWebsite: https://docs.oracle.com/cd/E17904_01/dev.1111/e10227/rlref.htm\\nCategory: enterprise\\n*/\\n\\nfunction ruleslanguage(hljs) {\\n  return {\\n    name: 'Oracle Rules Language',\\n    keywords: {\\n      keyword:\\n        'BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE '\\n        + 'INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 '\\n        + 'INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 '\\n        + 'INTDCREATEHANDLE|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 '\\n        + 'INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 '\\n        + 'INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 '\\n        + 'INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 '\\n        + 'INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 '\\n        + 'INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 '\\n        + 'INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 '\\n        + 'INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 '\\n        + 'INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 '\\n        + 'INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 '\\n        + 'INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 '\\n        + 'INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 '\\n        + 'MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER '\\n        + 'OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE '\\n        + 'NOVALUE SECTION WARN SAVE_UPDATE DETERMINANT LABEL REPORT REVENUE EACH '\\n        + 'IN FROM TOTAL CHARGE BLOCK AND OR CSV_FILE RATE_CODE AUXILIARY_DEMAND '\\n        + 'UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME '\\n        + 'ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE '\\n        + 'GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE '\\n        + 'SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING '\\n        + 'DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF '\\n        + 'MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY '\\n        + 'YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE '\\n        + 'COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR '\\n        + 'READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES '\\n        + 'ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE '\\n        + 'EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE '\\n        + 'SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL '\\n        + 'COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN '\\n        + 'MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING '\\n        + 'FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM '\\n        + 'NUMDAYS READ_DATE STAGING',\\n      built_in:\\n        'IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML '\\n        + 'DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT '\\n        + 'DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE '\\n        + 'DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT '\\n        + 'DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME'\\n    },\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.C_NUMBER_MODE,\\n      {\\n        className: 'literal',\\n        variants: [\\n          { // looks like #-comment\\n            begin: '#\\\\\\\\s+',\\n            relevance: 0\\n          },\\n          { begin: '#[a-zA-Z .]+' }\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = ruleslanguage;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/ruleslanguage.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/rust.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/rust.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Rust\\nAuthor: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>\\nContributors: Roman Shmatov <romanshmatov@gmail.com>, Kasper Andersen <kma_untrusted@protonmail.com>\\nWebsite: https://www.rust-lang.org\\nCategory: common, system\\n*/\\n\\n/** @type LanguageFn */\\nfunction rust(hljs) {\\n  const regex = hljs.regex;\\n  const FUNCTION_INVOKE = {\\n    className: \\\"title.function.invoke\\\",\\n    relevance: 0,\\n    begin: regex.concat(\\n      /\\\\b/,\\n      /(?!let\\\\b)/,\\n      hljs.IDENT_RE,\\n      regex.lookahead(/\\\\s*\\\\(/))\\n  };\\n  const NUMBER_SUFFIX = '([ui](8|16|32|64|128|size)|f(32|64))\\\\?';\\n  const KEYWORDS = [\\n    \\\"abstract\\\",\\n    \\\"as\\\",\\n    \\\"async\\\",\\n    \\\"await\\\",\\n    \\\"become\\\",\\n    \\\"box\\\",\\n    \\\"break\\\",\\n    \\\"const\\\",\\n    \\\"continue\\\",\\n    \\\"crate\\\",\\n    \\\"do\\\",\\n    \\\"dyn\\\",\\n    \\\"else\\\",\\n    \\\"enum\\\",\\n    \\\"extern\\\",\\n    \\\"false\\\",\\n    \\\"final\\\",\\n    \\\"fn\\\",\\n    \\\"for\\\",\\n    \\\"if\\\",\\n    \\\"impl\\\",\\n    \\\"in\\\",\\n    \\\"let\\\",\\n    \\\"loop\\\",\\n    \\\"macro\\\",\\n    \\\"match\\\",\\n    \\\"mod\\\",\\n    \\\"move\\\",\\n    \\\"mut\\\",\\n    \\\"override\\\",\\n    \\\"priv\\\",\\n    \\\"pub\\\",\\n    \\\"ref\\\",\\n    \\\"return\\\",\\n    \\\"self\\\",\\n    \\\"Self\\\",\\n    \\\"static\\\",\\n    \\\"struct\\\",\\n    \\\"super\\\",\\n    \\\"trait\\\",\\n    \\\"true\\\",\\n    \\\"try\\\",\\n    \\\"type\\\",\\n    \\\"typeof\\\",\\n    \\\"unsafe\\\",\\n    \\\"unsized\\\",\\n    \\\"use\\\",\\n    \\\"virtual\\\",\\n    \\\"where\\\",\\n    \\\"while\\\",\\n    \\\"yield\\\"\\n  ];\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    \\\"Some\\\",\\n    \\\"None\\\",\\n    \\\"Ok\\\",\\n    \\\"Err\\\"\\n  ];\\n  const BUILTINS = [\\n    // functions\\n    'drop ',\\n    // traits\\n    \\\"Copy\\\",\\n    \\\"Send\\\",\\n    \\\"Sized\\\",\\n    \\\"Sync\\\",\\n    \\\"Drop\\\",\\n    \\\"Fn\\\",\\n    \\\"FnMut\\\",\\n    \\\"FnOnce\\\",\\n    \\\"ToOwned\\\",\\n    \\\"Clone\\\",\\n    \\\"Debug\\\",\\n    \\\"PartialEq\\\",\\n    \\\"PartialOrd\\\",\\n    \\\"Eq\\\",\\n    \\\"Ord\\\",\\n    \\\"AsRef\\\",\\n    \\\"AsMut\\\",\\n    \\\"Into\\\",\\n    \\\"From\\\",\\n    \\\"Default\\\",\\n    \\\"Iterator\\\",\\n    \\\"Extend\\\",\\n    \\\"IntoIterator\\\",\\n    \\\"DoubleEndedIterator\\\",\\n    \\\"ExactSizeIterator\\\",\\n    \\\"SliceConcatExt\\\",\\n    \\\"ToString\\\",\\n    // macros\\n    \\\"assert!\\\",\\n    \\\"assert_eq!\\\",\\n    \\\"bitflags!\\\",\\n    \\\"bytes!\\\",\\n    \\\"cfg!\\\",\\n    \\\"col!\\\",\\n    \\\"concat!\\\",\\n    \\\"concat_idents!\\\",\\n    \\\"debug_assert!\\\",\\n    \\\"debug_assert_eq!\\\",\\n    \\\"env!\\\",\\n    \\\"panic!\\\",\\n    \\\"file!\\\",\\n    \\\"format!\\\",\\n    \\\"format_args!\\\",\\n    \\\"include_bytes!\\\",\\n    \\\"include_str!\\\",\\n    \\\"line!\\\",\\n    \\\"local_data_key!\\\",\\n    \\\"module_path!\\\",\\n    \\\"option_env!\\\",\\n    \\\"print!\\\",\\n    \\\"println!\\\",\\n    \\\"select!\\\",\\n    \\\"stringify!\\\",\\n    \\\"try!\\\",\\n    \\\"unimplemented!\\\",\\n    \\\"unreachable!\\\",\\n    \\\"vec!\\\",\\n    \\\"write!\\\",\\n    \\\"writeln!\\\",\\n    \\\"macro_rules!\\\",\\n    \\\"assert_ne!\\\",\\n    \\\"debug_assert_ne!\\\"\\n  ];\\n  const TYPES = [\\n    \\\"i8\\\",\\n    \\\"i16\\\",\\n    \\\"i32\\\",\\n    \\\"i64\\\",\\n    \\\"i128\\\",\\n    \\\"isize\\\",\\n    \\\"u8\\\",\\n    \\\"u16\\\",\\n    \\\"u32\\\",\\n    \\\"u64\\\",\\n    \\\"u128\\\",\\n    \\\"usize\\\",\\n    \\\"f32\\\",\\n    \\\"f64\\\",\\n    \\\"str\\\",\\n    \\\"char\\\",\\n    \\\"bool\\\",\\n    \\\"Box\\\",\\n    \\\"Option\\\",\\n    \\\"Result\\\",\\n    \\\"String\\\",\\n    \\\"Vec\\\"\\n  ];\\n  return {\\n    name: 'Rust',\\n    aliases: [ 'rs' ],\\n    keywords: {\\n      $pattern: hljs.IDENT_RE + '!?',\\n      type: TYPES,\\n      keyword: KEYWORDS,\\n      literal: LITERALS,\\n      built_in: BUILTINS\\n    },\\n    illegal: '</',\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.COMMENT('/\\\\\\\\*', '\\\\\\\\*/', { contains: [ 'self' ] }),\\n      hljs.inherit(hljs.QUOTE_STRING_MODE, {\\n        begin: /b?\\\"/,\\n        illegal: null\\n      }),\\n      {\\n        className: 'string',\\n        variants: [\\n          { begin: /b?r(#*)\\\"(.|\\\\n)*?\\\"\\\\1(?!#)/ },\\n          { begin: /b?'\\\\\\\\?(x\\\\w{2}|u\\\\w{4}|U\\\\w{8}|.)'/ }\\n        ]\\n      },\\n      {\\n        className: 'symbol',\\n        begin: /'[a-zA-Z_][a-zA-Z0-9_]*/\\n      },\\n      {\\n        className: 'number',\\n        variants: [\\n          { begin: '\\\\\\\\b0b([01_]+)' + NUMBER_SUFFIX },\\n          { begin: '\\\\\\\\b0o([0-7_]+)' + NUMBER_SUFFIX },\\n          { begin: '\\\\\\\\b0x([A-Fa-f0-9_]+)' + NUMBER_SUFFIX },\\n          { begin: '\\\\\\\\b(\\\\\\\\d[\\\\\\\\d_]*(\\\\\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)'\\n                   + NUMBER_SUFFIX }\\n        ],\\n        relevance: 0\\n      },\\n      {\\n        begin: [\\n          /fn/,\\n          /\\\\s+/,\\n          hljs.UNDERSCORE_IDENT_RE\\n        ],\\n        className: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title.function\\\"\\n        }\\n      },\\n      {\\n        className: 'meta',\\n        begin: '#!?\\\\\\\\[',\\n        end: '\\\\\\\\]',\\n        contains: [\\n          {\\n            className: 'string',\\n            begin: /\\\"/,\\n            end: /\\\"/\\n          }\\n        ]\\n      },\\n      {\\n        begin: [\\n          /let/,\\n          /\\\\s+/,\\n          /(?:mut\\\\s+)?/,\\n          hljs.UNDERSCORE_IDENT_RE\\n        ],\\n        className: {\\n          1: \\\"keyword\\\",\\n          3: \\\"keyword\\\",\\n          4: \\\"variable\\\"\\n        }\\n      },\\n      // must come before impl/for rule later\\n      {\\n        begin: [\\n          /for/,\\n          /\\\\s+/,\\n          hljs.UNDERSCORE_IDENT_RE,\\n          /\\\\s+/,\\n          /in/\\n        ],\\n        className: {\\n          1: \\\"keyword\\\",\\n          3: \\\"variable\\\",\\n          5: \\\"keyword\\\"\\n        }\\n      },\\n      {\\n        begin: [\\n          /type/,\\n          /\\\\s+/,\\n          hljs.UNDERSCORE_IDENT_RE\\n        ],\\n        className: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title.class\\\"\\n        }\\n      },\\n      {\\n        begin: [\\n          /(?:trait|enum|struct|union|impl|for)/,\\n          /\\\\s+/,\\n          hljs.UNDERSCORE_IDENT_RE\\n        ],\\n        className: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title.class\\\"\\n        }\\n      },\\n      {\\n        begin: hljs.IDENT_RE + '::',\\n        keywords: {\\n          keyword: \\\"Self\\\",\\n          built_in: BUILTINS,\\n          type: TYPES\\n        }\\n      },\\n      {\\n        className: \\\"punctuation\\\",\\n        begin: '->'\\n      },\\n      FUNCTION_INVOKE\\n    ]\\n  };\\n}\\n\\nmodule.exports = rust;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/rust.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/sas.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/sas.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: SAS\\nAuthor: Mauricio Caceres <mauricio.caceres.bravo@gmail.com>\\nDescription: Syntax Highlighting for SAS\\n*/\\n\\n/** @type LanguageFn */\\nfunction sas(hljs) {\\n  const regex = hljs.regex;\\n  // Data step and PROC SQL statements\\n  const SAS_KEYWORDS = [\\n    \\\"do\\\",\\n    \\\"if\\\",\\n    \\\"then\\\",\\n    \\\"else\\\",\\n    \\\"end\\\",\\n    \\\"until\\\",\\n    \\\"while\\\",\\n    \\\"abort\\\",\\n    \\\"array\\\",\\n    \\\"attrib\\\",\\n    \\\"by\\\",\\n    \\\"call\\\",\\n    \\\"cards\\\",\\n    \\\"cards4\\\",\\n    \\\"catname\\\",\\n    \\\"continue\\\",\\n    \\\"datalines\\\",\\n    \\\"datalines4\\\",\\n    \\\"delete\\\",\\n    \\\"delim\\\",\\n    \\\"delimiter\\\",\\n    \\\"display\\\",\\n    \\\"dm\\\",\\n    \\\"drop\\\",\\n    \\\"endsas\\\",\\n    \\\"error\\\",\\n    \\\"file\\\",\\n    \\\"filename\\\",\\n    \\\"footnote\\\",\\n    \\\"format\\\",\\n    \\\"goto\\\",\\n    \\\"in\\\",\\n    \\\"infile\\\",\\n    \\\"informat\\\",\\n    \\\"input\\\",\\n    \\\"keep\\\",\\n    \\\"label\\\",\\n    \\\"leave\\\",\\n    \\\"length\\\",\\n    \\\"libname\\\",\\n    \\\"link\\\",\\n    \\\"list\\\",\\n    \\\"lostcard\\\",\\n    \\\"merge\\\",\\n    \\\"missing\\\",\\n    \\\"modify\\\",\\n    \\\"options\\\",\\n    \\\"output\\\",\\n    \\\"out\\\",\\n    \\\"page\\\",\\n    \\\"put\\\",\\n    \\\"redirect\\\",\\n    \\\"remove\\\",\\n    \\\"rename\\\",\\n    \\\"replace\\\",\\n    \\\"retain\\\",\\n    \\\"return\\\",\\n    \\\"select\\\",\\n    \\\"set\\\",\\n    \\\"skip\\\",\\n    \\\"startsas\\\",\\n    \\\"stop\\\",\\n    \\\"title\\\",\\n    \\\"update\\\",\\n    \\\"waitsas\\\",\\n    \\\"where\\\",\\n    \\\"window\\\",\\n    \\\"x|0\\\",\\n    \\\"systask\\\",\\n    \\\"add\\\",\\n    \\\"and\\\",\\n    \\\"alter\\\",\\n    \\\"as\\\",\\n    \\\"cascade\\\",\\n    \\\"check\\\",\\n    \\\"create\\\",\\n    \\\"delete\\\",\\n    \\\"describe\\\",\\n    \\\"distinct\\\",\\n    \\\"drop\\\",\\n    \\\"foreign\\\",\\n    \\\"from\\\",\\n    \\\"group\\\",\\n    \\\"having\\\",\\n    \\\"index\\\",\\n    \\\"insert\\\",\\n    \\\"into\\\",\\n    \\\"in\\\",\\n    \\\"key\\\",\\n    \\\"like\\\",\\n    \\\"message\\\",\\n    \\\"modify\\\",\\n    \\\"msgtype\\\",\\n    \\\"not\\\",\\n    \\\"null\\\",\\n    \\\"on\\\",\\n    \\\"or\\\",\\n    \\\"order\\\",\\n    \\\"primary\\\",\\n    \\\"references\\\",\\n    \\\"reset\\\",\\n    \\\"restrict\\\",\\n    \\\"select\\\",\\n    \\\"set\\\",\\n    \\\"table\\\",\\n    \\\"unique\\\",\\n    \\\"update\\\",\\n    \\\"validate\\\",\\n    \\\"view\\\",\\n    \\\"where\\\"\\n  ];\\n\\n  // Built-in SAS functions\\n  const FUNCTIONS = [\\n    \\\"abs\\\",\\n    \\\"addr\\\",\\n    \\\"airy\\\",\\n    \\\"arcos\\\",\\n    \\\"arsin\\\",\\n    \\\"atan\\\",\\n    \\\"attrc\\\",\\n    \\\"attrn\\\",\\n    \\\"band\\\",\\n    \\\"betainv\\\",\\n    \\\"blshift\\\",\\n    \\\"bnot\\\",\\n    \\\"bor\\\",\\n    \\\"brshift\\\",\\n    \\\"bxor\\\",\\n    \\\"byte\\\",\\n    \\\"cdf\\\",\\n    \\\"ceil\\\",\\n    \\\"cexist\\\",\\n    \\\"cinv\\\",\\n    \\\"close\\\",\\n    \\\"cnonct\\\",\\n    \\\"collate\\\",\\n    \\\"compbl\\\",\\n    \\\"compound\\\",\\n    \\\"compress\\\",\\n    \\\"cos\\\",\\n    \\\"cosh\\\",\\n    \\\"css\\\",\\n    \\\"curobs\\\",\\n    \\\"cv\\\",\\n    \\\"daccdb\\\",\\n    \\\"daccdbsl\\\",\\n    \\\"daccsl\\\",\\n    \\\"daccsyd\\\",\\n    \\\"dacctab\\\",\\n    \\\"dairy\\\",\\n    \\\"date\\\",\\n    \\\"datejul\\\",\\n    \\\"datepart\\\",\\n    \\\"datetime\\\",\\n    \\\"day\\\",\\n    \\\"dclose\\\",\\n    \\\"depdb\\\",\\n    \\\"depdbsl\\\",\\n    \\\"depdbsl\\\",\\n    \\\"depsl\\\",\\n    \\\"depsl\\\",\\n    \\\"depsyd\\\",\\n    \\\"depsyd\\\",\\n    \\\"deptab\\\",\\n    \\\"deptab\\\",\\n    \\\"dequote\\\",\\n    \\\"dhms\\\",\\n    \\\"dif\\\",\\n    \\\"digamma\\\",\\n    \\\"dim\\\",\\n    \\\"dinfo\\\",\\n    \\\"dnum\\\",\\n    \\\"dopen\\\",\\n    \\\"doptname\\\",\\n    \\\"doptnum\\\",\\n    \\\"dread\\\",\\n    \\\"dropnote\\\",\\n    \\\"dsname\\\",\\n    \\\"erf\\\",\\n    \\\"erfc\\\",\\n    \\\"exist\\\",\\n    \\\"exp\\\",\\n    \\\"fappend\\\",\\n    \\\"fclose\\\",\\n    \\\"fcol\\\",\\n    \\\"fdelete\\\",\\n    \\\"fetch\\\",\\n    \\\"fetchobs\\\",\\n    \\\"fexist\\\",\\n    \\\"fget\\\",\\n    \\\"fileexist\\\",\\n    \\\"filename\\\",\\n    \\\"fileref\\\",\\n    \\\"finfo\\\",\\n    \\\"finv\\\",\\n    \\\"fipname\\\",\\n    \\\"fipnamel\\\",\\n    \\\"fipstate\\\",\\n    \\\"floor\\\",\\n    \\\"fnonct\\\",\\n    \\\"fnote\\\",\\n    \\\"fopen\\\",\\n    \\\"foptname\\\",\\n    \\\"foptnum\\\",\\n    \\\"fpoint\\\",\\n    \\\"fpos\\\",\\n    \\\"fput\\\",\\n    \\\"fread\\\",\\n    \\\"frewind\\\",\\n    \\\"frlen\\\",\\n    \\\"fsep\\\",\\n    \\\"fuzz\\\",\\n    \\\"fwrite\\\",\\n    \\\"gaminv\\\",\\n    \\\"gamma\\\",\\n    \\\"getoption\\\",\\n    \\\"getvarc\\\",\\n    \\\"getvarn\\\",\\n    \\\"hbound\\\",\\n    \\\"hms\\\",\\n    \\\"hosthelp\\\",\\n    \\\"hour\\\",\\n    \\\"ibessel\\\",\\n    \\\"index\\\",\\n    \\\"indexc\\\",\\n    \\\"indexw\\\",\\n    \\\"input\\\",\\n    \\\"inputc\\\",\\n    \\\"inputn\\\",\\n    \\\"int\\\",\\n    \\\"intck\\\",\\n    \\\"intnx\\\",\\n    \\\"intrr\\\",\\n    \\\"irr\\\",\\n    \\\"jbessel\\\",\\n    \\\"juldate\\\",\\n    \\\"kurtosis\\\",\\n    \\\"lag\\\",\\n    \\\"lbound\\\",\\n    \\\"left\\\",\\n    \\\"length\\\",\\n    \\\"lgamma\\\",\\n    \\\"libname\\\",\\n    \\\"libref\\\",\\n    \\\"log\\\",\\n    \\\"log10\\\",\\n    \\\"log2\\\",\\n    \\\"logpdf\\\",\\n    \\\"logpmf\\\",\\n    \\\"logsdf\\\",\\n    \\\"lowcase\\\",\\n    \\\"max\\\",\\n    \\\"mdy\\\",\\n    \\\"mean\\\",\\n    \\\"min\\\",\\n    \\\"minute\\\",\\n    \\\"mod\\\",\\n    \\\"month\\\",\\n    \\\"mopen\\\",\\n    \\\"mort\\\",\\n    \\\"n\\\",\\n    \\\"netpv\\\",\\n    \\\"nmiss\\\",\\n    \\\"normal\\\",\\n    \\\"note\\\",\\n    \\\"npv\\\",\\n    \\\"open\\\",\\n    \\\"ordinal\\\",\\n    \\\"pathname\\\",\\n    \\\"pdf\\\",\\n    \\\"peek\\\",\\n    \\\"peekc\\\",\\n    \\\"pmf\\\",\\n    \\\"point\\\",\\n    \\\"poisson\\\",\\n    \\\"poke\\\",\\n    \\\"probbeta\\\",\\n    \\\"probbnml\\\",\\n    \\\"probchi\\\",\\n    \\\"probf\\\",\\n    \\\"probgam\\\",\\n    \\\"probhypr\\\",\\n    \\\"probit\\\",\\n    \\\"probnegb\\\",\\n    \\\"probnorm\\\",\\n    \\\"probt\\\",\\n    \\\"put\\\",\\n    \\\"putc\\\",\\n    \\\"putn\\\",\\n    \\\"qtr\\\",\\n    \\\"quote\\\",\\n    \\\"ranbin\\\",\\n    \\\"rancau\\\",\\n    \\\"ranexp\\\",\\n    \\\"rangam\\\",\\n    \\\"range\\\",\\n    \\\"rank\\\",\\n    \\\"rannor\\\",\\n    \\\"ranpoi\\\",\\n    \\\"rantbl\\\",\\n    \\\"rantri\\\",\\n    \\\"ranuni\\\",\\n    \\\"repeat\\\",\\n    \\\"resolve\\\",\\n    \\\"reverse\\\",\\n    \\\"rewind\\\",\\n    \\\"right\\\",\\n    \\\"round\\\",\\n    \\\"saving\\\",\\n    \\\"scan\\\",\\n    \\\"sdf\\\",\\n    \\\"second\\\",\\n    \\\"sign\\\",\\n    \\\"sin\\\",\\n    \\\"sinh\\\",\\n    \\\"skewness\\\",\\n    \\\"soundex\\\",\\n    \\\"spedis\\\",\\n    \\\"sqrt\\\",\\n    \\\"std\\\",\\n    \\\"stderr\\\",\\n    \\\"stfips\\\",\\n    \\\"stname\\\",\\n    \\\"stnamel\\\",\\n    \\\"substr\\\",\\n    \\\"sum\\\",\\n    \\\"symget\\\",\\n    \\\"sysget\\\",\\n    \\\"sysmsg\\\",\\n    \\\"sysprod\\\",\\n    \\\"sysrc\\\",\\n    \\\"system\\\",\\n    \\\"tan\\\",\\n    \\\"tanh\\\",\\n    \\\"time\\\",\\n    \\\"timepart\\\",\\n    \\\"tinv\\\",\\n    \\\"tnonct\\\",\\n    \\\"today\\\",\\n    \\\"translate\\\",\\n    \\\"tranwrd\\\",\\n    \\\"trigamma\\\",\\n    \\\"trim\\\",\\n    \\\"trimn\\\",\\n    \\\"trunc\\\",\\n    \\\"uniform\\\",\\n    \\\"upcase\\\",\\n    \\\"uss\\\",\\n    \\\"var\\\",\\n    \\\"varfmt\\\",\\n    \\\"varinfmt\\\",\\n    \\\"varlabel\\\",\\n    \\\"varlen\\\",\\n    \\\"varname\\\",\\n    \\\"varnum\\\",\\n    \\\"varray\\\",\\n    \\\"varrayx\\\",\\n    \\\"vartype\\\",\\n    \\\"verify\\\",\\n    \\\"vformat\\\",\\n    \\\"vformatd\\\",\\n    \\\"vformatdx\\\",\\n    \\\"vformatn\\\",\\n    \\\"vformatnx\\\",\\n    \\\"vformatw\\\",\\n    \\\"vformatwx\\\",\\n    \\\"vformatx\\\",\\n    \\\"vinarray\\\",\\n    \\\"vinarrayx\\\",\\n    \\\"vinformat\\\",\\n    \\\"vinformatd\\\",\\n    \\\"vinformatdx\\\",\\n    \\\"vinformatn\\\",\\n    \\\"vinformatnx\\\",\\n    \\\"vinformatw\\\",\\n    \\\"vinformatwx\\\",\\n    \\\"vinformatx\\\",\\n    \\\"vlabel\\\",\\n    \\\"vlabelx\\\",\\n    \\\"vlength\\\",\\n    \\\"vlengthx\\\",\\n    \\\"vname\\\",\\n    \\\"vnamex\\\",\\n    \\\"vtype\\\",\\n    \\\"vtypex\\\",\\n    \\\"weekday\\\",\\n    \\\"year\\\",\\n    \\\"yyq\\\",\\n    \\\"zipfips\\\",\\n    \\\"zipname\\\",\\n    \\\"zipnamel\\\",\\n    \\\"zipstate\\\"\\n  ];\\n\\n  // Built-in macro functions\\n  const MACRO_FUNCTIONS = [\\n    \\\"bquote\\\",\\n    \\\"nrbquote\\\",\\n    \\\"cmpres\\\",\\n    \\\"qcmpres\\\",\\n    \\\"compstor\\\",\\n    \\\"datatyp\\\",\\n    \\\"display\\\",\\n    \\\"do\\\",\\n    \\\"else\\\",\\n    \\\"end\\\",\\n    \\\"eval\\\",\\n    \\\"global\\\",\\n    \\\"goto\\\",\\n    \\\"if\\\",\\n    \\\"index\\\",\\n    \\\"input\\\",\\n    \\\"keydef\\\",\\n    \\\"label\\\",\\n    \\\"left\\\",\\n    \\\"length\\\",\\n    \\\"let\\\",\\n    \\\"local\\\",\\n    \\\"lowcase\\\",\\n    \\\"macro\\\",\\n    \\\"mend\\\",\\n    \\\"nrbquote\\\",\\n    \\\"nrquote\\\",\\n    \\\"nrstr\\\",\\n    \\\"put\\\",\\n    \\\"qcmpres\\\",\\n    \\\"qleft\\\",\\n    \\\"qlowcase\\\",\\n    \\\"qscan\\\",\\n    \\\"qsubstr\\\",\\n    \\\"qsysfunc\\\",\\n    \\\"qtrim\\\",\\n    \\\"quote\\\",\\n    \\\"qupcase\\\",\\n    \\\"scan\\\",\\n    \\\"str\\\",\\n    \\\"substr\\\",\\n    \\\"superq\\\",\\n    \\\"syscall\\\",\\n    \\\"sysevalf\\\",\\n    \\\"sysexec\\\",\\n    \\\"sysfunc\\\",\\n    \\\"sysget\\\",\\n    \\\"syslput\\\",\\n    \\\"sysprod\\\",\\n    \\\"sysrc\\\",\\n    \\\"sysrput\\\",\\n    \\\"then\\\",\\n    \\\"to\\\",\\n    \\\"trim\\\",\\n    \\\"unquote\\\",\\n    \\\"until\\\",\\n    \\\"upcase\\\",\\n    \\\"verify\\\",\\n    \\\"while\\\",\\n    \\\"window\\\"\\n  ];\\n\\n  const LITERALS = [\\n    \\\"null\\\",\\n    \\\"missing\\\",\\n    \\\"_all_\\\",\\n    \\\"_automatic_\\\",\\n    \\\"_character_\\\",\\n    \\\"_infile_\\\",\\n    \\\"_n_\\\",\\n    \\\"_name_\\\",\\n    \\\"_null_\\\",\\n    \\\"_numeric_\\\",\\n    \\\"_user_\\\",\\n    \\\"_webout_\\\"\\n  ];\\n\\n  return {\\n    name: 'SAS',\\n    case_insensitive: true,\\n    keywords: {\\n      literal: LITERALS,\\n      keyword: SAS_KEYWORDS\\n    },\\n    contains: [\\n      {\\n        // Distinct highlight for proc <proc>, data, run, quit\\n        className: 'keyword',\\n        begin: /^\\\\s*(proc [\\\\w\\\\d_]+|data|run|quit)[\\\\s;]/\\n      },\\n      {\\n        // Macro variables\\n        className: 'variable',\\n        begin: /&[a-zA-Z_&][a-zA-Z0-9_]*\\\\.?/\\n      },\\n      {\\n        begin: [\\n          /^\\\\s*/,\\n          /datalines;|cards;/,\\n          /(?:.*\\\\n)+/,\\n          /^\\\\s*;\\\\s*$/\\n        ],\\n        className: {\\n          2: \\\"keyword\\\",\\n          3: \\\"string\\\"\\n        }\\n      },\\n      {\\n        begin: [\\n          /%mend|%macro/,\\n          /\\\\s+/,\\n          /[a-zA-Z_&][a-zA-Z0-9_]*/\\n        ],\\n        className: {\\n          1: \\\"built_in\\\",\\n          3: \\\"title.function\\\"\\n        }\\n      },\\n      { // Built-in macro variables\\n        className: 'built_in',\\n        begin: '%' + regex.either(...MACRO_FUNCTIONS)\\n      },\\n      {\\n        // User-defined macro functions\\n        className: 'title.function',\\n        begin: /%[a-zA-Z_][a-zA-Z_0-9]*/\\n      },\\n      {\\n        // TODO: this is most likely an incorrect classification\\n        // built_in may need more nuance\\n        // https://github.com/highlightjs/highlight.js/issues/2521\\n        className: 'meta',\\n        begin: regex.either(...FUNCTIONS) + '(?=\\\\\\\\()'\\n      },\\n      {\\n        className: 'string',\\n        variants: [\\n          hljs.APOS_STRING_MODE,\\n          hljs.QUOTE_STRING_MODE\\n        ]\\n      },\\n      hljs.COMMENT('\\\\\\\\*', ';'),\\n      hljs.C_BLOCK_COMMENT_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = sas;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/sas.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/scala.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/scala.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Scala\\nCategory: functional\\nAuthor: Jan Berkel <jan.berkel@gmail.com>\\nContributors: Erik Osheim <d_m@plastic-idolatry.com>\\nWebsite: https://www.scala-lang.org\\n*/\\n\\nfunction scala(hljs) {\\n  const regex = hljs.regex;\\n  const ANNOTATION = {\\n    className: 'meta',\\n    begin: '@[A-Za-z]+'\\n  };\\n\\n  // used in strings for escaping/interpolation/substitution\\n  const SUBST = {\\n    className: 'subst',\\n    variants: [\\n      { begin: '\\\\\\\\$[A-Za-z0-9_]+' },\\n      {\\n        begin: /\\\\$\\\\{/,\\n        end: /\\\\}/\\n      }\\n    ]\\n  };\\n\\n  const STRING = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: '\\\"\\\"\\\"',\\n        end: '\\\"\\\"\\\"'\\n      },\\n      {\\n        begin: '\\\"',\\n        end: '\\\"',\\n        illegal: '\\\\\\\\n',\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      },\\n      {\\n        begin: '[a-z]+\\\"',\\n        end: '\\\"',\\n        illegal: '\\\\\\\\n',\\n        contains: [\\n          hljs.BACKSLASH_ESCAPE,\\n          SUBST\\n        ]\\n      },\\n      {\\n        className: 'string',\\n        begin: '[a-z]+\\\"\\\"\\\"',\\n        end: '\\\"\\\"\\\"',\\n        contains: [ SUBST ],\\n        relevance: 10\\n      }\\n    ]\\n\\n  };\\n\\n  const TYPE = {\\n    className: 'type',\\n    begin: '\\\\\\\\b[A-Z][A-Za-z0-9_]*',\\n    relevance: 0\\n  };\\n\\n  const NAME = {\\n    className: 'title',\\n    begin: /[^0-9\\\\n\\\\t \\\"'(),.`{}\\\\[\\\\]:;][^\\\\n\\\\t \\\"'(),.`{}\\\\[\\\\]:;]+|[^0-9\\\\n\\\\t \\\"'(),.`{}\\\\[\\\\]:;=]/,\\n    relevance: 0\\n  };\\n\\n  const CLASS = {\\n    className: 'class',\\n    beginKeywords: 'class object trait type',\\n    end: /[:={\\\\[\\\\n;]/,\\n    excludeEnd: true,\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      {\\n        beginKeywords: 'extends with',\\n        relevance: 10\\n      },\\n      {\\n        begin: /\\\\[/,\\n        end: /\\\\]/,\\n        excludeBegin: true,\\n        excludeEnd: true,\\n        relevance: 0,\\n        contains: [ TYPE ]\\n      },\\n      {\\n        className: 'params',\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        excludeBegin: true,\\n        excludeEnd: true,\\n        relevance: 0,\\n        contains: [ TYPE ]\\n      },\\n      NAME\\n    ]\\n  };\\n\\n  const METHOD = {\\n    className: 'function',\\n    beginKeywords: 'def',\\n    end: regex.lookahead(/[:={\\\\[(\\\\n;]/),\\n    contains: [ NAME ]\\n  };\\n\\n  const EXTENSION = {\\n    begin: [\\n      /^\\\\s*/, // Is first token on the line\\n      'extension',\\n      /\\\\s+(?=[[(])/, // followed by at least one space and `[` or `(`\\n    ],\\n    beginScope: { 2: \\\"keyword\\\", }\\n  };\\n\\n  const END = {\\n    begin: [\\n      /^\\\\s*/, // Is first token on the line\\n      /end/,\\n      /\\\\s+/,\\n      /(extension\\\\b)?/, // `extension` is the only marker that follows an `end` that cannot be captured by another rule.\\n    ],\\n    beginScope: {\\n      2: \\\"keyword\\\",\\n      4: \\\"keyword\\\",\\n    }\\n  };\\n\\n  // TODO: use negative look-behind in future\\n  //       /(?<!\\\\.)\\\\binline(?=\\\\s)/\\n  const INLINE_MODES = [\\n    { match: /\\\\.inline\\\\b/ },\\n    {\\n      begin: /\\\\binline(?=\\\\s)/,\\n      keywords: 'inline'\\n    }\\n  ];\\n\\n  const USING_PARAM_CLAUSE = {\\n    begin: [\\n      /\\\\(\\\\s*/, // Opening `(` of a parameter or argument list\\n      /using/,\\n      /\\\\s+(?!\\\\))/, // Spaces not followed by `)`\\n    ],\\n    beginScope: { 2: \\\"keyword\\\", }\\n  };\\n\\n  return {\\n    name: 'Scala',\\n    keywords: {\\n      literal: 'true false null',\\n      keyword: 'type yield lazy override def with val var sealed abstract private trait object if then forSome for while do throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit export enum given transparent'\\n    },\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      STRING,\\n      TYPE,\\n      METHOD,\\n      CLASS,\\n      hljs.C_NUMBER_MODE,\\n      EXTENSION,\\n      END,\\n      ...INLINE_MODES,\\n      USING_PARAM_CLAUSE,\\n      ANNOTATION\\n    ]\\n  };\\n}\\n\\nmodule.exports = scala;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/scala.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/scheme.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/scheme.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Scheme\\nDescription: Scheme is a programming language in the Lisp family.\\n             (keywords based on http://community.schemewiki.org/?scheme-keywords)\\nAuthor: JP Verkamp <me@jverkamp.com>\\nContributors: Ivan Sagalaev <maniac@softwaremaniacs.org>\\nOrigin: clojure.js\\nWebsite: http://community.schemewiki.org/?what-is-scheme\\nCategory: lisp\\n*/\\n\\nfunction scheme(hljs) {\\n  const SCHEME_IDENT_RE = '[^\\\\\\\\(\\\\\\\\)\\\\\\\\[\\\\\\\\]\\\\\\\\{\\\\\\\\}\\\",\\\\'`;#|\\\\\\\\\\\\\\\\\\\\\\\\s]+';\\n  const SCHEME_SIMPLE_NUMBER_RE = '(-|\\\\\\\\+)?\\\\\\\\d+([./]\\\\\\\\d+)?';\\n  const SCHEME_COMPLEX_NUMBER_RE = SCHEME_SIMPLE_NUMBER_RE + '[+\\\\\\\\-]' + SCHEME_SIMPLE_NUMBER_RE + 'i';\\n  const KEYWORDS = {\\n    $pattern: SCHEME_IDENT_RE,\\n    built_in:\\n      'case-lambda call/cc class define-class exit-handler field import '\\n      + 'inherit init-field interface let*-values let-values let/ec mixin '\\n      + 'opt-lambda override protect provide public rename require '\\n      + 'require-for-syntax syntax syntax-case syntax-error unit/sig unless '\\n      + 'when with-syntax and begin call-with-current-continuation '\\n      + 'call-with-input-file call-with-output-file case cond define '\\n      + 'define-syntax delay do dynamic-wind else for-each if lambda let let* '\\n      + 'let-syntax letrec letrec-syntax map or syntax-rules \\\\' * + , ,@ - ... / '\\n      + '; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan '\\n      + 'boolean? caar cadr call-with-input-file call-with-output-file '\\n      + 'call-with-values car cdddar cddddr cdr ceiling char->integer '\\n      + 'char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? '\\n      + 'char-downcase char-lower-case? char-numeric? char-ready? char-upcase '\\n      + 'char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? '\\n      + 'char? close-input-port close-output-port complex? cons cos '\\n      + 'current-input-port current-output-port denominator display eof-object? '\\n      + 'eq? equal? eqv? eval even? exact->inexact exact? exp expt floor '\\n      + 'force gcd imag-part inexact->exact inexact? input-port? integer->char '\\n      + 'integer? interaction-environment lcm length list list->string '\\n      + 'list->vector list-ref list-tail list? load log magnitude make-polar '\\n      + 'make-rectangular make-string make-vector max member memq memv min '\\n      + 'modulo negative? newline not null-environment null? number->string '\\n      + 'number? numerator odd? open-input-file open-output-file output-port? '\\n      + 'pair? peek-char port? positive? procedure? quasiquote quote quotient '\\n      + 'rational? rationalize read read-char real-part real? remainder reverse '\\n      + 'round scheme-report-environment set! set-car! set-cdr! sin sqrt string '\\n      + 'string->list string->number string->symbol string-append string-ci<=? '\\n      + 'string-ci<? string-ci=? string-ci>=? string-ci>? string-copy '\\n      + 'string-fill! string-length string-ref string-set! string<=? string<? '\\n      + 'string=? string>=? string>? string? substring symbol->string symbol? '\\n      + 'tan transcript-off transcript-on truncate values vector '\\n      + 'vector->list vector-fill! vector-length vector-ref vector-set! '\\n      + 'with-input-from-file with-output-to-file write write-char zero?'\\n  };\\n\\n  const LITERAL = {\\n    className: 'literal',\\n    begin: '(#t|#f|#\\\\\\\\\\\\\\\\' + SCHEME_IDENT_RE + '|#\\\\\\\\\\\\\\\\.)'\\n  };\\n\\n  const NUMBER = {\\n    className: 'number',\\n    variants: [\\n      {\\n        begin: SCHEME_SIMPLE_NUMBER_RE,\\n        relevance: 0\\n      },\\n      {\\n        begin: SCHEME_COMPLEX_NUMBER_RE,\\n        relevance: 0\\n      },\\n      { begin: '#b[0-1]+(/[0-1]+)?' },\\n      { begin: '#o[0-7]+(/[0-7]+)?' },\\n      { begin: '#x[0-9a-f]+(/[0-9a-f]+)?' }\\n    ]\\n  };\\n\\n  const STRING = hljs.QUOTE_STRING_MODE;\\n\\n  const COMMENT_MODES = [\\n    hljs.COMMENT(\\n      ';',\\n      '$',\\n      { relevance: 0 }\\n    ),\\n    hljs.COMMENT('#\\\\\\\\|', '\\\\\\\\|#')\\n  ];\\n\\n  const IDENT = {\\n    begin: SCHEME_IDENT_RE,\\n    relevance: 0\\n  };\\n\\n  const QUOTED_IDENT = {\\n    className: 'symbol',\\n    begin: '\\\\'' + SCHEME_IDENT_RE\\n  };\\n\\n  const BODY = {\\n    endsWithParent: true,\\n    relevance: 0\\n  };\\n\\n  const QUOTED_LIST = {\\n    variants: [\\n      { begin: /'/ },\\n      { begin: '`' }\\n    ],\\n    contains: [\\n      {\\n        begin: '\\\\\\\\(',\\n        end: '\\\\\\\\)',\\n        contains: [\\n          'self',\\n          LITERAL,\\n          STRING,\\n          NUMBER,\\n          IDENT,\\n          QUOTED_IDENT\\n        ]\\n      }\\n    ]\\n  };\\n\\n  const NAME = {\\n    className: 'name',\\n    relevance: 0,\\n    begin: SCHEME_IDENT_RE,\\n    keywords: KEYWORDS\\n  };\\n\\n  const LAMBDA = {\\n    begin: /lambda/,\\n    endsWithParent: true,\\n    returnBegin: true,\\n    contains: [\\n      NAME,\\n      {\\n        endsParent: true,\\n        variants: [\\n          {\\n            begin: /\\\\(/,\\n            end: /\\\\)/\\n          },\\n          {\\n            begin: /\\\\[/,\\n            end: /\\\\]/\\n          }\\n        ],\\n        contains: [ IDENT ]\\n      }\\n    ]\\n  };\\n\\n  const LIST = {\\n    variants: [\\n      {\\n        begin: '\\\\\\\\(',\\n        end: '\\\\\\\\)'\\n      },\\n      {\\n        begin: '\\\\\\\\[',\\n        end: '\\\\\\\\]'\\n      }\\n    ],\\n    contains: [\\n      LAMBDA,\\n      NAME,\\n      BODY\\n    ]\\n  };\\n\\n  BODY.contains = [\\n    LITERAL,\\n    NUMBER,\\n    STRING,\\n    IDENT,\\n    QUOTED_IDENT,\\n    QUOTED_LIST,\\n    LIST\\n  ].concat(COMMENT_MODES);\\n\\n  return {\\n    name: 'Scheme',\\n    aliases: ['scm'],\\n    illegal: /\\\\S/,\\n    contains: [\\n      hljs.SHEBANG(),\\n      NUMBER,\\n      STRING,\\n      QUOTED_IDENT,\\n      QUOTED_LIST,\\n      LIST\\n    ].concat(COMMENT_MODES)\\n  };\\n}\\n\\nmodule.exports = scheme;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/scheme.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/scilab.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/scilab.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Scilab\\nAuthor: Sylvestre Ledru <sylvestre.ledru@scilab-enterprises.com>\\nOrigin: matlab.js\\nDescription: Scilab is a port from Matlab\\nWebsite: https://www.scilab.org\\nCategory: scientific\\n*/\\n\\nfunction scilab(hljs) {\\n  const COMMON_CONTAINS = [\\n    hljs.C_NUMBER_MODE,\\n    {\\n      className: 'string',\\n      begin: '\\\\'|\\\\\\\"',\\n      end: '\\\\'|\\\\\\\"',\\n      contains: [\\n        hljs.BACKSLASH_ESCAPE,\\n        { begin: '\\\\'\\\\'' }\\n      ]\\n    }\\n  ];\\n\\n  return {\\n    name: 'Scilab',\\n    aliases: [ 'sci' ],\\n    keywords: {\\n      $pattern: /%?\\\\w+/,\\n      keyword: 'abort break case clear catch continue do elseif else endfunction end for function '\\n        + 'global if pause return resume select try then while',\\n      literal:\\n        '%f %F %t %T %pi %eps %inf %nan %e %i %z %s',\\n      built_in: // Scilab has more than 2000 functions. Just list the most commons\\n       'abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error '\\n       + 'exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty '\\n       + 'isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log '\\n       + 'max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real '\\n       + 'round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan '\\n       + 'type typename warning zeros matrix'\\n    },\\n    illegal: '(\\\"|#|/\\\\\\\\*|\\\\\\\\s+/\\\\\\\\w+)',\\n    contains: [\\n      {\\n        className: 'function',\\n        beginKeywords: 'function',\\n        end: '$',\\n        contains: [\\n          hljs.UNDERSCORE_TITLE_MODE,\\n          {\\n            className: 'params',\\n            begin: '\\\\\\\\(',\\n            end: '\\\\\\\\)'\\n          }\\n        ]\\n      },\\n      // seems to be a guard against [ident]' or [ident].\\n      // perhaps to prevent attributes from flagging as keywords?\\n      {\\n        begin: '[a-zA-Z_][a-zA-Z_0-9]*[\\\\\\\\.\\\\']+',\\n        relevance: 0\\n      },\\n      {\\n        begin: '\\\\\\\\[',\\n        end: '\\\\\\\\][\\\\\\\\.\\\\']*',\\n        relevance: 0,\\n        contains: COMMON_CONTAINS\\n      },\\n      hljs.COMMENT('//', '$')\\n    ].concat(COMMON_CONTAINS)\\n  };\\n}\\n\\nmodule.exports = scilab;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/scilab.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/scss.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/scss.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"const MODES = (hljs) => {\\n  return {\\n    IMPORTANT: {\\n      scope: 'meta',\\n      begin: '!important'\\n    },\\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\\n    HEXCOLOR: {\\n      scope: 'number',\\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\\\b/\\n    },\\n    FUNCTION_DISPATCH: {\\n      className: \\\"built_in\\\",\\n      begin: /[\\\\w-]+(?=\\\\()/\\n    },\\n    ATTRIBUTE_SELECTOR_MODE: {\\n      scope: 'selector-attr',\\n      begin: /\\\\[/,\\n      end: /\\\\]/,\\n      illegal: '$',\\n      contains: [\\n        hljs.APOS_STRING_MODE,\\n        hljs.QUOTE_STRING_MODE\\n      ]\\n    },\\n    CSS_NUMBER_MODE: {\\n      scope: 'number',\\n      begin: hljs.NUMBER_RE + '(' +\\n        '%|em|ex|ch|rem' +\\n        '|vw|vh|vmin|vmax' +\\n        '|cm|mm|in|pt|pc|px' +\\n        '|deg|grad|rad|turn' +\\n        '|s|ms' +\\n        '|Hz|kHz' +\\n        '|dpi|dpcm|dppx' +\\n        ')?',\\n      relevance: 0\\n    },\\n    CSS_VARIABLE: {\\n      className: \\\"attr\\\",\\n      begin: /--[A-Za-z][A-Za-z0-9_-]*/\\n    }\\n  };\\n};\\n\\nconst TAGS = [\\n  'a',\\n  'abbr',\\n  'address',\\n  'article',\\n  'aside',\\n  'audio',\\n  'b',\\n  'blockquote',\\n  'body',\\n  'button',\\n  'canvas',\\n  'caption',\\n  'cite',\\n  'code',\\n  'dd',\\n  'del',\\n  'details',\\n  'dfn',\\n  'div',\\n  'dl',\\n  'dt',\\n  'em',\\n  'fieldset',\\n  'figcaption',\\n  'figure',\\n  'footer',\\n  'form',\\n  'h1',\\n  'h2',\\n  'h3',\\n  'h4',\\n  'h5',\\n  'h6',\\n  'header',\\n  'hgroup',\\n  'html',\\n  'i',\\n  'iframe',\\n  'img',\\n  'input',\\n  'ins',\\n  'kbd',\\n  'label',\\n  'legend',\\n  'li',\\n  'main',\\n  'mark',\\n  'menu',\\n  'nav',\\n  'object',\\n  'ol',\\n  'p',\\n  'q',\\n  'quote',\\n  'samp',\\n  'section',\\n  'span',\\n  'strong',\\n  'summary',\\n  'sup',\\n  'table',\\n  'tbody',\\n  'td',\\n  'textarea',\\n  'tfoot',\\n  'th',\\n  'thead',\\n  'time',\\n  'tr',\\n  'ul',\\n  'var',\\n  'video'\\n];\\n\\nconst MEDIA_FEATURES = [\\n  'any-hover',\\n  'any-pointer',\\n  'aspect-ratio',\\n  'color',\\n  'color-gamut',\\n  'color-index',\\n  'device-aspect-ratio',\\n  'device-height',\\n  'device-width',\\n  'display-mode',\\n  'forced-colors',\\n  'grid',\\n  'height',\\n  'hover',\\n  'inverted-colors',\\n  'monochrome',\\n  'orientation',\\n  'overflow-block',\\n  'overflow-inline',\\n  'pointer',\\n  'prefers-color-scheme',\\n  'prefers-contrast',\\n  'prefers-reduced-motion',\\n  'prefers-reduced-transparency',\\n  'resolution',\\n  'scan',\\n  'scripting',\\n  'update',\\n  'width',\\n  // TODO: find a better solution?\\n  'min-width',\\n  'max-width',\\n  'min-height',\\n  'max-height'\\n];\\n\\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\\nconst PSEUDO_CLASSES = [\\n  'active',\\n  'any-link',\\n  'blank',\\n  'checked',\\n  'current',\\n  'default',\\n  'defined',\\n  'dir', // dir()\\n  'disabled',\\n  'drop',\\n  'empty',\\n  'enabled',\\n  'first',\\n  'first-child',\\n  'first-of-type',\\n  'fullscreen',\\n  'future',\\n  'focus',\\n  'focus-visible',\\n  'focus-within',\\n  'has', // has()\\n  'host', // host or host()\\n  'host-context', // host-context()\\n  'hover',\\n  'indeterminate',\\n  'in-range',\\n  'invalid',\\n  'is', // is()\\n  'lang', // lang()\\n  'last-child',\\n  'last-of-type',\\n  'left',\\n  'link',\\n  'local-link',\\n  'not', // not()\\n  'nth-child', // nth-child()\\n  'nth-col', // nth-col()\\n  'nth-last-child', // nth-last-child()\\n  'nth-last-col', // nth-last-col()\\n  'nth-last-of-type', //nth-last-of-type()\\n  'nth-of-type', //nth-of-type()\\n  'only-child',\\n  'only-of-type',\\n  'optional',\\n  'out-of-range',\\n  'past',\\n  'placeholder-shown',\\n  'read-only',\\n  'read-write',\\n  'required',\\n  'right',\\n  'root',\\n  'scope',\\n  'target',\\n  'target-within',\\n  'user-invalid',\\n  'valid',\\n  'visited',\\n  'where' // where()\\n];\\n\\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\\nconst PSEUDO_ELEMENTS = [\\n  'after',\\n  'backdrop',\\n  'before',\\n  'cue',\\n  'cue-region',\\n  'first-letter',\\n  'first-line',\\n  'grammar-error',\\n  'marker',\\n  'part',\\n  'placeholder',\\n  'selection',\\n  'slotted',\\n  'spelling-error'\\n];\\n\\nconst ATTRIBUTES = [\\n  'align-content',\\n  'align-items',\\n  'align-self',\\n  'all',\\n  'animation',\\n  'animation-delay',\\n  'animation-direction',\\n  'animation-duration',\\n  'animation-fill-mode',\\n  'animation-iteration-count',\\n  'animation-name',\\n  'animation-play-state',\\n  'animation-timing-function',\\n  'backface-visibility',\\n  'background',\\n  'background-attachment',\\n  'background-blend-mode',\\n  'background-clip',\\n  'background-color',\\n  'background-image',\\n  'background-origin',\\n  'background-position',\\n  'background-repeat',\\n  'background-size',\\n  'block-size',\\n  'border',\\n  'border-block',\\n  'border-block-color',\\n  'border-block-end',\\n  'border-block-end-color',\\n  'border-block-end-style',\\n  'border-block-end-width',\\n  'border-block-start',\\n  'border-block-start-color',\\n  'border-block-start-style',\\n  'border-block-start-width',\\n  'border-block-style',\\n  'border-block-width',\\n  'border-bottom',\\n  'border-bottom-color',\\n  'border-bottom-left-radius',\\n  'border-bottom-right-radius',\\n  'border-bottom-style',\\n  'border-bottom-width',\\n  'border-collapse',\\n  'border-color',\\n  'border-image',\\n  'border-image-outset',\\n  'border-image-repeat',\\n  'border-image-slice',\\n  'border-image-source',\\n  'border-image-width',\\n  'border-inline',\\n  'border-inline-color',\\n  'border-inline-end',\\n  'border-inline-end-color',\\n  'border-inline-end-style',\\n  'border-inline-end-width',\\n  'border-inline-start',\\n  'border-inline-start-color',\\n  'border-inline-start-style',\\n  'border-inline-start-width',\\n  'border-inline-style',\\n  'border-inline-width',\\n  'border-left',\\n  'border-left-color',\\n  'border-left-style',\\n  'border-left-width',\\n  'border-radius',\\n  'border-right',\\n  'border-right-color',\\n  'border-right-style',\\n  'border-right-width',\\n  'border-spacing',\\n  'border-style',\\n  'border-top',\\n  'border-top-color',\\n  'border-top-left-radius',\\n  'border-top-right-radius',\\n  'border-top-style',\\n  'border-top-width',\\n  'border-width',\\n  'bottom',\\n  'box-decoration-break',\\n  'box-shadow',\\n  'box-sizing',\\n  'break-after',\\n  'break-before',\\n  'break-inside',\\n  'caption-side',\\n  'caret-color',\\n  'clear',\\n  'clip',\\n  'clip-path',\\n  'clip-rule',\\n  'color',\\n  'column-count',\\n  'column-fill',\\n  'column-gap',\\n  'column-rule',\\n  'column-rule-color',\\n  'column-rule-style',\\n  'column-rule-width',\\n  'column-span',\\n  'column-width',\\n  'columns',\\n  'contain',\\n  'content',\\n  'content-visibility',\\n  'counter-increment',\\n  'counter-reset',\\n  'cue',\\n  'cue-after',\\n  'cue-before',\\n  'cursor',\\n  'direction',\\n  'display',\\n  'empty-cells',\\n  'filter',\\n  'flex',\\n  'flex-basis',\\n  'flex-direction',\\n  'flex-flow',\\n  'flex-grow',\\n  'flex-shrink',\\n  'flex-wrap',\\n  'float',\\n  'flow',\\n  'font',\\n  'font-display',\\n  'font-family',\\n  'font-feature-settings',\\n  'font-kerning',\\n  'font-language-override',\\n  'font-size',\\n  'font-size-adjust',\\n  'font-smoothing',\\n  'font-stretch',\\n  'font-style',\\n  'font-synthesis',\\n  'font-variant',\\n  'font-variant-caps',\\n  'font-variant-east-asian',\\n  'font-variant-ligatures',\\n  'font-variant-numeric',\\n  'font-variant-position',\\n  'font-variation-settings',\\n  'font-weight',\\n  'gap',\\n  'glyph-orientation-vertical',\\n  'grid',\\n  'grid-area',\\n  'grid-auto-columns',\\n  'grid-auto-flow',\\n  'grid-auto-rows',\\n  'grid-column',\\n  'grid-column-end',\\n  'grid-column-start',\\n  'grid-gap',\\n  'grid-row',\\n  'grid-row-end',\\n  'grid-row-start',\\n  'grid-template',\\n  'grid-template-areas',\\n  'grid-template-columns',\\n  'grid-template-rows',\\n  'hanging-punctuation',\\n  'height',\\n  'hyphens',\\n  'icon',\\n  'image-orientation',\\n  'image-rendering',\\n  'image-resolution',\\n  'ime-mode',\\n  'inline-size',\\n  'isolation',\\n  'justify-content',\\n  'left',\\n  'letter-spacing',\\n  'line-break',\\n  'line-height',\\n  'list-style',\\n  'list-style-image',\\n  'list-style-position',\\n  'list-style-type',\\n  'margin',\\n  'margin-block',\\n  'margin-block-end',\\n  'margin-block-start',\\n  'margin-bottom',\\n  'margin-inline',\\n  'margin-inline-end',\\n  'margin-inline-start',\\n  'margin-left',\\n  'margin-right',\\n  'margin-top',\\n  'marks',\\n  'mask',\\n  'mask-border',\\n  'mask-border-mode',\\n  'mask-border-outset',\\n  'mask-border-repeat',\\n  'mask-border-slice',\\n  'mask-border-source',\\n  'mask-border-width',\\n  'mask-clip',\\n  'mask-composite',\\n  'mask-image',\\n  'mask-mode',\\n  'mask-origin',\\n  'mask-position',\\n  'mask-repeat',\\n  'mask-size',\\n  'mask-type',\\n  'max-block-size',\\n  'max-height',\\n  'max-inline-size',\\n  'max-width',\\n  'min-block-size',\\n  'min-height',\\n  'min-inline-size',\\n  'min-width',\\n  'mix-blend-mode',\\n  'nav-down',\\n  'nav-index',\\n  'nav-left',\\n  'nav-right',\\n  'nav-up',\\n  'none',\\n  'normal',\\n  'object-fit',\\n  'object-position',\\n  'opacity',\\n  'order',\\n  'orphans',\\n  'outline',\\n  'outline-color',\\n  'outline-offset',\\n  'outline-style',\\n  'outline-width',\\n  'overflow',\\n  'overflow-wrap',\\n  'overflow-x',\\n  'overflow-y',\\n  'padding',\\n  'padding-block',\\n  'padding-block-end',\\n  'padding-block-start',\\n  'padding-bottom',\\n  'padding-inline',\\n  'padding-inline-end',\\n  'padding-inline-start',\\n  'padding-left',\\n  'padding-right',\\n  'padding-top',\\n  'page-break-after',\\n  'page-break-before',\\n  'page-break-inside',\\n  'pause',\\n  'pause-after',\\n  'pause-before',\\n  'perspective',\\n  'perspective-origin',\\n  'pointer-events',\\n  'position',\\n  'quotes',\\n  'resize',\\n  'rest',\\n  'rest-after',\\n  'rest-before',\\n  'right',\\n  'row-gap',\\n  'scroll-margin',\\n  'scroll-margin-block',\\n  'scroll-margin-block-end',\\n  'scroll-margin-block-start',\\n  'scroll-margin-bottom',\\n  'scroll-margin-inline',\\n  'scroll-margin-inline-end',\\n  'scroll-margin-inline-start',\\n  'scroll-margin-left',\\n  'scroll-margin-right',\\n  'scroll-margin-top',\\n  'scroll-padding',\\n  'scroll-padding-block',\\n  'scroll-padding-block-end',\\n  'scroll-padding-block-start',\\n  'scroll-padding-bottom',\\n  'scroll-padding-inline',\\n  'scroll-padding-inline-end',\\n  'scroll-padding-inline-start',\\n  'scroll-padding-left',\\n  'scroll-padding-right',\\n  'scroll-padding-top',\\n  'scroll-snap-align',\\n  'scroll-snap-stop',\\n  'scroll-snap-type',\\n  'scrollbar-color',\\n  'scrollbar-gutter',\\n  'scrollbar-width',\\n  'shape-image-threshold',\\n  'shape-margin',\\n  'shape-outside',\\n  'speak',\\n  'speak-as',\\n  'src', // @font-face\\n  'tab-size',\\n  'table-layout',\\n  'text-align',\\n  'text-align-all',\\n  'text-align-last',\\n  'text-combine-upright',\\n  'text-decoration',\\n  'text-decoration-color',\\n  'text-decoration-line',\\n  'text-decoration-style',\\n  'text-emphasis',\\n  'text-emphasis-color',\\n  'text-emphasis-position',\\n  'text-emphasis-style',\\n  'text-indent',\\n  'text-justify',\\n  'text-orientation',\\n  'text-overflow',\\n  'text-rendering',\\n  'text-shadow',\\n  'text-transform',\\n  'text-underline-position',\\n  'top',\\n  'transform',\\n  'transform-box',\\n  'transform-origin',\\n  'transform-style',\\n  'transition',\\n  'transition-delay',\\n  'transition-duration',\\n  'transition-property',\\n  'transition-timing-function',\\n  'unicode-bidi',\\n  'vertical-align',\\n  'visibility',\\n  'voice-balance',\\n  'voice-duration',\\n  'voice-family',\\n  'voice-pitch',\\n  'voice-range',\\n  'voice-rate',\\n  'voice-stress',\\n  'voice-volume',\\n  'white-space',\\n  'widows',\\n  'width',\\n  'will-change',\\n  'word-break',\\n  'word-spacing',\\n  'word-wrap',\\n  'writing-mode',\\n  'z-index'\\n  // reverse makes sure longer attributes `font-weight` are matched fully\\n  // instead of getting false positives on say `font`\\n].reverse();\\n\\n/*\\nLanguage: SCSS\\nDescription: Scss is an extension of the syntax of CSS.\\nAuthor: Kurt Emch <kurt@kurtemch.com>\\nWebsite: https://sass-lang.com\\nCategory: common, css, web\\n*/\\n\\n/** @type LanguageFn */\\nfunction scss(hljs) {\\n  const modes = MODES(hljs);\\n  const PSEUDO_ELEMENTS$1 = PSEUDO_ELEMENTS;\\n  const PSEUDO_CLASSES$1 = PSEUDO_CLASSES;\\n\\n  const AT_IDENTIFIER = '@[a-z-]+'; // @font-face\\n  const AT_MODIFIERS = \\\"and or not only\\\";\\n  const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\\n  const VARIABLE = {\\n    className: 'variable',\\n    begin: '(\\\\\\\\$' + IDENT_RE + ')\\\\\\\\b',\\n    relevance: 0\\n  };\\n\\n  return {\\n    name: 'SCSS',\\n    case_insensitive: true,\\n    illegal: '[=/|\\\\']',\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      // to recognize keyframe 40% etc which are outside the scope of our\\n      // attribute value mode\\n      modes.CSS_NUMBER_MODE,\\n      {\\n        className: 'selector-id',\\n        begin: '#[A-Za-z0-9_-]+',\\n        relevance: 0\\n      },\\n      {\\n        className: 'selector-class',\\n        begin: '\\\\\\\\.[A-Za-z0-9_-]+',\\n        relevance: 0\\n      },\\n      modes.ATTRIBUTE_SELECTOR_MODE,\\n      {\\n        className: 'selector-tag',\\n        begin: '\\\\\\\\b(' + TAGS.join('|') + ')\\\\\\\\b',\\n        // was there, before, but why?\\n        relevance: 0\\n      },\\n      {\\n        className: 'selector-pseudo',\\n        begin: ':(' + PSEUDO_CLASSES$1.join('|') + ')'\\n      },\\n      {\\n        className: 'selector-pseudo',\\n        begin: ':(:)?(' + PSEUDO_ELEMENTS$1.join('|') + ')'\\n      },\\n      VARIABLE,\\n      { // pseudo-selector params\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        contains: [ modes.CSS_NUMBER_MODE ]\\n      },\\n      modes.CSS_VARIABLE,\\n      {\\n        className: 'attribute',\\n        begin: '\\\\\\\\b(' + ATTRIBUTES.join('|') + ')\\\\\\\\b'\\n      },\\n      { begin: '\\\\\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\\\\\b' },\\n      {\\n        begin: /:/,\\n        end: /[;}{]/,\\n        relevance: 0,\\n        contains: [\\n          modes.BLOCK_COMMENT,\\n          VARIABLE,\\n          modes.HEXCOLOR,\\n          modes.CSS_NUMBER_MODE,\\n          hljs.QUOTE_STRING_MODE,\\n          hljs.APOS_STRING_MODE,\\n          modes.IMPORTANT,\\n          modes.FUNCTION_DISPATCH\\n        ]\\n      },\\n      // matching these here allows us to treat them more like regular CSS\\n      // rules so everything between the {} gets regular rule highlighting,\\n      // which is what we want for page and font-face\\n      {\\n        begin: '@(page|font-face)',\\n        keywords: {\\n          $pattern: AT_IDENTIFIER,\\n          keyword: '@page @font-face'\\n        }\\n      },\\n      {\\n        begin: '@',\\n        end: '[{;]',\\n        returnBegin: true,\\n        keywords: {\\n          $pattern: /[a-z-]+/,\\n          keyword: AT_MODIFIERS,\\n          attribute: MEDIA_FEATURES.join(\\\" \\\")\\n        },\\n        contains: [\\n          {\\n            begin: AT_IDENTIFIER,\\n            className: \\\"keyword\\\"\\n          },\\n          {\\n            begin: /[a-z-]+(?=:)/,\\n            className: \\\"attribute\\\"\\n          },\\n          VARIABLE,\\n          hljs.QUOTE_STRING_MODE,\\n          hljs.APOS_STRING_MODE,\\n          modes.HEXCOLOR,\\n          modes.CSS_NUMBER_MODE\\n        ]\\n      },\\n      modes.FUNCTION_DISPATCH\\n    ]\\n  };\\n}\\n\\nmodule.exports = scss;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/scss.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/shell.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/shell.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Shell Session\\nRequires: bash.js\\nAuthor: TSUYUSATO Kitsune <make.just.on@gmail.com>\\nCategory: common\\nAudit: 2020\\n*/\\n\\n/** @type LanguageFn */\\nfunction shell(hljs) {\\n  return {\\n    name: 'Shell Session',\\n    aliases: [\\n      'console',\\n      'shellsession'\\n    ],\\n    contains: [\\n      {\\n        className: 'meta.prompt',\\n        // We cannot add \\\\s (spaces) in the regular expression otherwise it will be too broad and produce unexpected result.\\n        // For instance, in the following example, it would match \\\"echo /path/to/home >\\\" as a prompt:\\n        // echo /path/to/home > t.exe\\n        begin: /^\\\\s{0,3}[/~\\\\w\\\\d[\\\\]()@-]*[>%$#][ ]?/,\\n        starts: {\\n          end: /[^\\\\\\\\](?=\\\\s*$)/,\\n          subLanguage: 'bash'\\n        }\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = shell;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/shell.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/smali.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/smali.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Smali\\nAuthor: Dennis Titze <dennis.titze@gmail.com>\\nDescription: Basic Smali highlighting\\nWebsite: https://github.com/JesusFreke/smali\\n*/\\n\\nfunction smali(hljs) {\\n  const smali_instr_low_prio = [\\n    'add',\\n    'and',\\n    'cmp',\\n    'cmpg',\\n    'cmpl',\\n    'const',\\n    'div',\\n    'double',\\n    'float',\\n    'goto',\\n    'if',\\n    'int',\\n    'long',\\n    'move',\\n    'mul',\\n    'neg',\\n    'new',\\n    'nop',\\n    'not',\\n    'or',\\n    'rem',\\n    'return',\\n    'shl',\\n    'shr',\\n    'sput',\\n    'sub',\\n    'throw',\\n    'ushr',\\n    'xor'\\n  ];\\n  const smali_instr_high_prio = [\\n    'aget',\\n    'aput',\\n    'array',\\n    'check',\\n    'execute',\\n    'fill',\\n    'filled',\\n    'goto/16',\\n    'goto/32',\\n    'iget',\\n    'instance',\\n    'invoke',\\n    'iput',\\n    'monitor',\\n    'packed',\\n    'sget',\\n    'sparse'\\n  ];\\n  const smali_keywords = [\\n    'transient',\\n    'constructor',\\n    'abstract',\\n    'final',\\n    'synthetic',\\n    'public',\\n    'private',\\n    'protected',\\n    'static',\\n    'bridge',\\n    'system'\\n  ];\\n  return {\\n    name: 'Smali',\\n    contains: [\\n      {\\n        className: 'string',\\n        begin: '\\\"',\\n        end: '\\\"',\\n        relevance: 0\\n      },\\n      hljs.COMMENT(\\n        '#',\\n        '$',\\n        { relevance: 0 }\\n      ),\\n      {\\n        className: 'keyword',\\n        variants: [\\n          { begin: '\\\\\\\\s*\\\\\\\\.end\\\\\\\\s[a-zA-Z0-9]*' },\\n          {\\n            begin: '^[ ]*\\\\\\\\.[a-zA-Z]*',\\n            relevance: 0\\n          },\\n          {\\n            begin: '\\\\\\\\s:[a-zA-Z_0-9]*',\\n            relevance: 0\\n          },\\n          { begin: '\\\\\\\\s(' + smali_keywords.join('|') + ')' }\\n        ]\\n      },\\n      {\\n        className: 'built_in',\\n        variants: [\\n          { begin: '\\\\\\\\s(' + smali_instr_low_prio.join('|') + ')\\\\\\\\s' },\\n          {\\n            begin: '\\\\\\\\s(' + smali_instr_low_prio.join('|') + ')((-|/)[a-zA-Z0-9]+)+\\\\\\\\s',\\n            relevance: 10\\n          },\\n          {\\n            begin: '\\\\\\\\s(' + smali_instr_high_prio.join('|') + ')((-|/)[a-zA-Z0-9]+)*\\\\\\\\s',\\n            relevance: 10\\n          }\\n        ]\\n      },\\n      {\\n        className: 'class',\\n        begin: 'L[^\\\\(;:\\\\n]*;',\\n        relevance: 0\\n      },\\n      { begin: '[vp][0-9]+' }\\n    ]\\n  };\\n}\\n\\nmodule.exports = smali;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/smali.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/smalltalk.js\":\n/*!**************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/smalltalk.js ***!\n  \\**************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Smalltalk\\nDescription: Smalltalk is an object-oriented, dynamically typed reflective programming language.\\nAuthor: Vladimir Gubarkov <xonixx@gmail.com>\\nWebsite: https://en.wikipedia.org/wiki/Smalltalk\\n*/\\n\\nfunction smalltalk(hljs) {\\n  const VAR_IDENT_RE = '[a-z][a-zA-Z0-9_]*';\\n  const CHAR = {\\n    className: 'string',\\n    begin: '\\\\\\\\$.{1}'\\n  };\\n  const SYMBOL = {\\n    className: 'symbol',\\n    begin: '#' + hljs.UNDERSCORE_IDENT_RE\\n  };\\n  return {\\n    name: 'Smalltalk',\\n    aliases: [ 'st' ],\\n    keywords: [\\n      \\\"self\\\",\\n      \\\"super\\\",\\n      \\\"nil\\\",\\n      \\\"true\\\",\\n      \\\"false\\\",\\n      \\\"thisContext\\\"\\n    ],\\n    contains: [\\n      hljs.COMMENT('\\\"', '\\\"'),\\n      hljs.APOS_STRING_MODE,\\n      {\\n        className: 'type',\\n        begin: '\\\\\\\\b[A-Z][A-Za-z0-9_]*',\\n        relevance: 0\\n      },\\n      {\\n        begin: VAR_IDENT_RE + ':',\\n        relevance: 0\\n      },\\n      hljs.C_NUMBER_MODE,\\n      SYMBOL,\\n      CHAR,\\n      {\\n        // This looks more complicated than needed to avoid combinatorial\\n        // explosion under V8. It effectively means `| var1 var2 ... |` with\\n        // whitespace adjacent to `|` being optional.\\n        begin: '\\\\\\\\|[ ]*' + VAR_IDENT_RE + '([ ]+' + VAR_IDENT_RE + ')*[ ]*\\\\\\\\|',\\n        returnBegin: true,\\n        end: /\\\\|/,\\n        illegal: /\\\\S/,\\n        contains: [ { begin: '(\\\\\\\\|[ ]*)?' + VAR_IDENT_RE } ]\\n      },\\n      {\\n        begin: '#\\\\\\\\(',\\n        end: '\\\\\\\\)',\\n        contains: [\\n          hljs.APOS_STRING_MODE,\\n          CHAR,\\n          hljs.C_NUMBER_MODE,\\n          SYMBOL\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = smalltalk;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/smalltalk.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/sml.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/sml.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: SML (Standard ML)\\nAuthor: Edwin Dalorzo <edwin@dalorzo.org>\\nDescription: SML language definition.\\nWebsite: https://www.smlnj.org\\nOrigin: ocaml.js\\nCategory: functional\\n*/\\nfunction sml(hljs) {\\n  return {\\n    name: 'SML (Standard ML)',\\n    aliases: [ 'ml' ],\\n    keywords: {\\n      $pattern: '[a-z_]\\\\\\\\w*!?',\\n      keyword:\\n        /* according to Definition of Standard ML 97  */\\n        'abstype and andalso as case datatype do else end eqtype '\\n        + 'exception fn fun functor handle if in include infix infixr '\\n        + 'let local nonfix of op open orelse raise rec sharing sig '\\n        + 'signature struct structure then type val with withtype where while',\\n      built_in:\\n        /* built-in types according to basis library */\\n        'array bool char exn int list option order real ref string substring vector unit word',\\n      literal:\\n        'true false NONE SOME LESS EQUAL GREATER nil'\\n    },\\n    illegal: /\\\\/\\\\/|>>/,\\n    contains: [\\n      {\\n        className: 'literal',\\n        begin: /\\\\[(\\\\|\\\\|)?\\\\]|\\\\(\\\\)/,\\n        relevance: 0\\n      },\\n      hljs.COMMENT(\\n        '\\\\\\\\(\\\\\\\\*',\\n        '\\\\\\\\*\\\\\\\\)',\\n        { contains: [ 'self' ] }\\n      ),\\n      { /* type variable */\\n        className: 'symbol',\\n        begin: '\\\\'[A-Za-z_](?!\\\\')[\\\\\\\\w\\\\']*'\\n        /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */\\n      },\\n      { /* polymorphic variant */\\n        className: 'type',\\n        begin: '`[A-Z][\\\\\\\\w\\\\']*'\\n      },\\n      { /* module or constructor */\\n        className: 'type',\\n        begin: '\\\\\\\\b[A-Z][\\\\\\\\w\\\\']*',\\n        relevance: 0\\n      },\\n      { /* don't color identifiers, but safely catch all identifiers with ' */\\n        begin: '[a-z_]\\\\\\\\w*\\\\'[\\\\\\\\w\\\\']*' },\\n      hljs.inherit(hljs.APOS_STRING_MODE, {\\n        className: 'string',\\n        relevance: 0\\n      }),\\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),\\n      {\\n        className: 'number',\\n        begin:\\n          '\\\\\\\\b(0[xX][a-fA-F0-9_]+[Lln]?|'\\n          + '0[oO][0-7_]+[Lln]?|'\\n          + '0[bB][01_]+[Lln]?|'\\n          + '[0-9][0-9_]*([Lln]|(\\\\\\\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)',\\n        relevance: 0\\n      },\\n      { begin: /[-=]>/ // relevance booster\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = sml;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/sml.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/sqf.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/sqf.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: SQF\\nAuthor: Søren Enevoldsen <senevoldsen90@gmail.com>\\nContributors: Marvin Saignat <contact@zgmrvn.com>, Dedmen Miller <dedmen@dedmen.de>, Leopard20\\nDescription: Scripting language for the Arma game series\\nWebsite: https://community.bistudio.com/wiki/SQF_syntax\\nCategory: scripting\\nLast update: 07.01.2023, Arma 3 v2.11\\n*/\\n\\n/*\\n////////////////////////////////////////////////////////////////////////////////////////////\\n  * Author: Leopard20\\n  \\n  * Description:\\n  This script can be used to dump all commands to the clipboard.\\n  Make sure you're using the Diag EXE to dump all of the commands.\\n  \\n  * How to use:\\n  Simply replace the _KEYWORDS and _LITERAL arrays with the one from this sqf.js file.\\n  Execute the script from the debug console.\\n  All commands will be copied to the clipboard.\\n////////////////////////////////////////////////////////////////////////////////////////////\\n_KEYWORDS = ['if'];                                                //Array of all KEYWORDS\\n_LITERALS = ['west'];                                              //Array of all LITERALS\\n_allCommands = createHashMap;\\n{\\n  _type = _x select [0,1];\\n  if (_type != \\\"t\\\") then {\\n    _command_lowercase = ((_x select [2]) splitString \\\" \\\")#((([\\\"n\\\", \\\"u\\\", \\\"b\\\"] find _type) - 1) max 0);\\n    _command_uppercase = supportInfo (\\\"i:\\\" + _command_lowercase) # 0 # 2;\\n    _allCommands set [_command_lowercase, _command_uppercase];\\n  };\\n} forEach supportInfo \\\"\\\";\\n_allCommands = _allCommands toArray false;\\n_allCommands sort true;                                            //sort by lowercase\\n_allCommands = ((_allCommands apply {_x#1}) -_KEYWORDS)-_LITERALS; //remove KEYWORDS and LITERALS\\ncopyToClipboard (str (_allCommands select {_x regexMatch \\\"\\\\w+\\\"}) regexReplace [\\\"\\\"\\\"\\\", \\\"'\\\"] regexReplace [\\\",\\\", \\\",\\\\n\\\"]);\\n*/\\n\\nfunction sqf(hljs) {\\n  // In SQF, a local variable starts with _\\n  const VARIABLE = {\\n    className: 'variable',\\n    begin: /\\\\b_+[a-zA-Z]\\\\w*/\\n  };\\n\\n  // In SQF, a function should fit myTag_fnc_myFunction pattern\\n  // https://community.bistudio.com/wiki/Functions_Library_(Arma_3)#Adding_a_Function\\n  const FUNCTION = {\\n    className: 'title',\\n    begin: /[a-zA-Z][a-zA-Z_0-9]*_fnc_[a-zA-Z_0-9]+/\\n  };\\n\\n  // In SQF strings, quotes matching the start are escaped by adding a consecutive.\\n  // Example of single escaped quotes: \\\" \\\"\\\" \\\" and  ' '' '.\\n  const STRINGS = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: '\\\"',\\n        end: '\\\"',\\n        contains: [\\n          {\\n            begin: '\\\"\\\"',\\n            relevance: 0\\n          }\\n        ]\\n      },\\n      {\\n        begin: '\\\\'',\\n        end: '\\\\'',\\n        contains: [\\n          {\\n            begin: '\\\\'\\\\'',\\n            relevance: 0\\n          }\\n        ]\\n      }\\n    ]\\n  };\\n\\n  const KEYWORDS = [\\n    'break',\\n    'breakWith',\\n    'breakOut',\\n    'breakTo',\\n    'case',\\n    'catch',\\n    'continue',\\n    'continueWith',\\n    'default',\\n    'do',\\n    'else',\\n    'exit',\\n    'exitWith',\\n    'for',\\n    'forEach',\\n    'from',\\n    'if',\\n    'local',\\n    'private',\\n    'switch',\\n    'step',\\n    'then',\\n    'throw',\\n    'to',\\n    'try',\\n    'waitUntil',\\n    'while',\\n    'with'\\n  ];\\n\\n  const LITERAL = [\\n    'blufor',\\n    'civilian',\\n    'configNull',\\n    'controlNull',\\n    'displayNull',\\n    'diaryRecordNull',\\n    'east',\\n    'endl',\\n    'false',\\n    'grpNull',\\n    'independent',\\n    'lineBreak',\\n    'locationNull',\\n    'nil',\\n    'objNull',\\n    'opfor',\\n    'pi',\\n    'resistance',\\n    'scriptNull',\\n    'sideAmbientLife',\\n    'sideEmpty',\\n    'sideEnemy',\\n    'sideFriendly',\\n    'sideLogic',\\n    'sideUnknown',\\n    'taskNull',\\n    'teamMemberNull',\\n    'true',\\n    'west'\\n  ];\\n\\n  const BUILT_IN = [\\n    'abs',\\n    'accTime',\\n    'acos',\\n    'action',\\n    'actionIDs',\\n    'actionKeys',\\n    'actionKeysEx',\\n    'actionKeysImages',\\n    'actionKeysNames',\\n    'actionKeysNamesArray',\\n    'actionName',\\n    'actionParams',\\n    'activateAddons',\\n    'activatedAddons',\\n    'activateKey',\\n    'activeTitleEffectParams',\\n    'add3DENConnection',\\n    'add3DENEventHandler',\\n    'add3DENLayer',\\n    'addAction',\\n    'addBackpack',\\n    'addBackpackCargo',\\n    'addBackpackCargoGlobal',\\n    'addBackpackGlobal',\\n    'addBinocularItem',\\n    'addCamShake',\\n    'addCuratorAddons',\\n    'addCuratorCameraArea',\\n    'addCuratorEditableObjects',\\n    'addCuratorEditingArea',\\n    'addCuratorPoints',\\n    'addEditorObject',\\n    'addEventHandler',\\n    'addForce',\\n    'addForceGeneratorRTD',\\n    'addGoggles',\\n    'addGroupIcon',\\n    'addHandgunItem',\\n    'addHeadgear',\\n    'addItem',\\n    'addItemCargo',\\n    'addItemCargoGlobal',\\n    'addItemPool',\\n    'addItemToBackpack',\\n    'addItemToUniform',\\n    'addItemToVest',\\n    'addLiveStats',\\n    'addMagazine',\\n    'addMagazineAmmoCargo',\\n    'addMagazineCargo',\\n    'addMagazineCargoGlobal',\\n    'addMagazineGlobal',\\n    'addMagazinePool',\\n    'addMagazines',\\n    'addMagazineTurret',\\n    'addMenu',\\n    'addMenuItem',\\n    'addMissionEventHandler',\\n    'addMPEventHandler',\\n    'addMusicEventHandler',\\n    'addonFiles',\\n    'addOwnedMine',\\n    'addPlayerScores',\\n    'addPrimaryWeaponItem',\\n    'addPublicVariableEventHandler',\\n    'addRating',\\n    'addResources',\\n    'addScore',\\n    'addScoreSide',\\n    'addSecondaryWeaponItem',\\n    'addSwitchableUnit',\\n    'addTeamMember',\\n    'addToRemainsCollector',\\n    'addTorque',\\n    'addUniform',\\n    'addUserActionEventHandler',\\n    'addVehicle',\\n    'addVest',\\n    'addWaypoint',\\n    'addWeapon',\\n    'addWeaponCargo',\\n    'addWeaponCargoGlobal',\\n    'addWeaponGlobal',\\n    'addWeaponItem',\\n    'addWeaponPool',\\n    'addWeaponTurret',\\n    'addWeaponWithAttachmentsCargo',\\n    'addWeaponWithAttachmentsCargoGlobal',\\n    'admin',\\n    'agent',\\n    'agents',\\n    'AGLToASL',\\n    'aimedAtTarget',\\n    'aimPos',\\n    'airDensityCurveRTD',\\n    'airDensityRTD',\\n    'airplaneThrottle',\\n    'airportSide',\\n    'AISFinishHeal',\\n    'alive',\\n    'all3DENEntities',\\n    'allActiveTitleEffects',\\n    'allAddonsInfo',\\n    'allAirports',\\n    'allControls',\\n    'allCurators',\\n    'allCutLayers',\\n    'allDead',\\n    'allDeadMen',\\n    'allDiaryRecords',\\n    'allDiarySubjects',\\n    'allDisplays',\\n    'allEnv3DSoundSources',\\n    'allGroups',\\n    'allLODs',\\n    'allMapMarkers',\\n    'allMines',\\n    'allMissionObjects',\\n    'allObjects',\\n    'allow3DMode',\\n    'allowCrewInImmobile',\\n    'allowCuratorLogicIgnoreAreas',\\n    'allowDamage',\\n    'allowDammage',\\n    'allowedService',\\n    'allowFileOperations',\\n    'allowFleeing',\\n    'allowGetIn',\\n    'allowService',\\n    'allowSprint',\\n    'allPlayers',\\n    'allSimpleObjects',\\n    'allSites',\\n    'allTurrets',\\n    'allUnits',\\n    'allUnitsUAV',\\n    'allUsers',\\n    'allVariables',\\n    'ambientTemperature',\\n    'ammo',\\n    'ammoOnPylon',\\n    'and',\\n    'animate',\\n    'animateBay',\\n    'animateDoor',\\n    'animatePylon',\\n    'animateSource',\\n    'animationNames',\\n    'animationPhase',\\n    'animationSourcePhase',\\n    'animationState',\\n    'apertureParams',\\n    'append',\\n    'apply',\\n    'armoryPoints',\\n    'arrayIntersect',\\n    'asin',\\n    'ASLToAGL',\\n    'ASLToATL',\\n    'assert',\\n    'assignAsCargo',\\n    'assignAsCargoIndex',\\n    'assignAsCommander',\\n    'assignAsDriver',\\n    'assignAsGunner',\\n    'assignAsTurret',\\n    'assignCurator',\\n    'assignedCargo',\\n    'assignedCommander',\\n    'assignedDriver',\\n    'assignedGroup',\\n    'assignedGunner',\\n    'assignedItems',\\n    'assignedTarget',\\n    'assignedTeam',\\n    'assignedVehicle',\\n    'assignedVehicleRole',\\n    'assignedVehicles',\\n    'assignItem',\\n    'assignTeam',\\n    'assignToAirport',\\n    'atan',\\n    'atan2',\\n    'atg',\\n    'ATLToASL',\\n    'attachedObject',\\n    'attachedObjects',\\n    'attachedTo',\\n    'attachObject',\\n    'attachTo',\\n    'attackEnabled',\\n    'awake',\\n    'backpack',\\n    'backpackCargo',\\n    'backpackContainer',\\n    'backpackItems',\\n    'backpackMagazines',\\n    'backpackSpaceFor',\\n    'behaviour',\\n    'benchmark',\\n    'bezierInterpolation',\\n    'binocular',\\n    'binocularItems',\\n    'binocularMagazine',\\n    'boundingBox',\\n    'boundingBoxReal',\\n    'boundingCenter',\\n    'brakesDisabled',\\n    'briefingName',\\n    'buildingExit',\\n    'buildingPos',\\n    'buldozer_EnableRoadDiag',\\n    'buldozer_IsEnabledRoadDiag',\\n    'buldozer_LoadNewRoads',\\n    'buldozer_reloadOperMap',\\n    'buttonAction',\\n    'buttonSetAction',\\n    'cadetMode',\\n    'calculatePath',\\n    'calculatePlayerVisibilityByFriendly',\\n    'call',\\n    'callExtension',\\n    'camCommand',\\n    'camCommit',\\n    'camCommitPrepared',\\n    'camCommitted',\\n    'camConstuctionSetParams',\\n    'camCreate',\\n    'camDestroy',\\n    'cameraEffect',\\n    'cameraEffectEnableHUD',\\n    'cameraInterest',\\n    'cameraOn',\\n    'cameraView',\\n    'campaignConfigFile',\\n    'camPreload',\\n    'camPreloaded',\\n    'camPrepareBank',\\n    'camPrepareDir',\\n    'camPrepareDive',\\n    'camPrepareFocus',\\n    'camPrepareFov',\\n    'camPrepareFovRange',\\n    'camPreparePos',\\n    'camPrepareRelPos',\\n    'camPrepareTarget',\\n    'camSetBank',\\n    'camSetDir',\\n    'camSetDive',\\n    'camSetFocus',\\n    'camSetFov',\\n    'camSetFovRange',\\n    'camSetPos',\\n    'camSetRelPos',\\n    'camSetTarget',\\n    'camTarget',\\n    'camUseNVG',\\n    'canAdd',\\n    'canAddItemToBackpack',\\n    'canAddItemToUniform',\\n    'canAddItemToVest',\\n    'cancelSimpleTaskDestination',\\n    'canDeployWeapon',\\n    'canFire',\\n    'canMove',\\n    'canSlingLoad',\\n    'canStand',\\n    'canSuspend',\\n    'canTriggerDynamicSimulation',\\n    'canUnloadInCombat',\\n    'canVehicleCargo',\\n    'captive',\\n    'captiveNum',\\n    'cbChecked',\\n    'cbSetChecked',\\n    'ceil',\\n    'channelEnabled',\\n    'cheatsEnabled',\\n    'checkAIFeature',\\n    'checkVisibility',\\n    'className',\\n    'clear3DENAttribute',\\n    'clear3DENInventory',\\n    'clearAllItemsFromBackpack',\\n    'clearBackpackCargo',\\n    'clearBackpackCargoGlobal',\\n    'clearForcesRTD',\\n    'clearGroupIcons',\\n    'clearItemCargo',\\n    'clearItemCargoGlobal',\\n    'clearItemPool',\\n    'clearMagazineCargo',\\n    'clearMagazineCargoGlobal',\\n    'clearMagazinePool',\\n    'clearOverlay',\\n    'clearRadio',\\n    'clearWeaponCargo',\\n    'clearWeaponCargoGlobal',\\n    'clearWeaponPool',\\n    'clientOwner',\\n    'closeDialog',\\n    'closeDisplay',\\n    'closeOverlay',\\n    'collapseObjectTree',\\n    'collect3DENHistory',\\n    'collectiveRTD',\\n    'collisionDisabledWith',\\n    'combatBehaviour',\\n    'combatMode',\\n    'commandArtilleryFire',\\n    'commandChat',\\n    'commander',\\n    'commandFire',\\n    'commandFollow',\\n    'commandFSM',\\n    'commandGetOut',\\n    'commandingMenu',\\n    'commandMove',\\n    'commandRadio',\\n    'commandStop',\\n    'commandSuppressiveFire',\\n    'commandTarget',\\n    'commandWatch',\\n    'comment',\\n    'commitOverlay',\\n    'compatibleItems',\\n    'compatibleMagazines',\\n    'compile',\\n    'compileFinal',\\n    'compileScript',\\n    'completedFSM',\\n    'composeText',\\n    'configClasses',\\n    'configFile',\\n    'configHierarchy',\\n    'configName',\\n    'configOf',\\n    'configProperties',\\n    'configSourceAddonList',\\n    'configSourceMod',\\n    'configSourceModList',\\n    'confirmSensorTarget',\\n    'connectTerminalToUAV',\\n    'connectToServer',\\n    'controlsGroupCtrl',\\n    'conversationDisabled',\\n    'copyFromClipboard',\\n    'copyToClipboard',\\n    'copyWaypoints',\\n    'cos',\\n    'count',\\n    'countEnemy',\\n    'countFriendly',\\n    'countSide',\\n    'countType',\\n    'countUnknown',\\n    'create3DENComposition',\\n    'create3DENEntity',\\n    'createAgent',\\n    'createCenter',\\n    'createDialog',\\n    'createDiaryLink',\\n    'createDiaryRecord',\\n    'createDiarySubject',\\n    'createDisplay',\\n    'createGearDialog',\\n    'createGroup',\\n    'createGuardedPoint',\\n    'createHashMap',\\n    'createHashMapFromArray',\\n    'createLocation',\\n    'createMarker',\\n    'createMarkerLocal',\\n    'createMenu',\\n    'createMine',\\n    'createMissionDisplay',\\n    'createMPCampaignDisplay',\\n    'createSimpleObject',\\n    'createSimpleTask',\\n    'createSite',\\n    'createSoundSource',\\n    'createTask',\\n    'createTeam',\\n    'createTrigger',\\n    'createUnit',\\n    'createVehicle',\\n    'createVehicleCrew',\\n    'createVehicleLocal',\\n    'crew',\\n    'ctAddHeader',\\n    'ctAddRow',\\n    'ctClear',\\n    'ctCurSel',\\n    'ctData',\\n    'ctFindHeaderRows',\\n    'ctFindRowHeader',\\n    'ctHeaderControls',\\n    'ctHeaderCount',\\n    'ctRemoveHeaders',\\n    'ctRemoveRows',\\n    'ctrlActivate',\\n    'ctrlAddEventHandler',\\n    'ctrlAngle',\\n    'ctrlAnimateModel',\\n    'ctrlAnimationPhaseModel',\\n    'ctrlAt',\\n    'ctrlAutoScrollDelay',\\n    'ctrlAutoScrollRewind',\\n    'ctrlAutoScrollSpeed',\\n    'ctrlBackgroundColor',\\n    'ctrlChecked',\\n    'ctrlClassName',\\n    'ctrlCommit',\\n    'ctrlCommitted',\\n    'ctrlCreate',\\n    'ctrlDelete',\\n    'ctrlEnable',\\n    'ctrlEnabled',\\n    'ctrlFade',\\n    'ctrlFontHeight',\\n    'ctrlForegroundColor',\\n    'ctrlHTMLLoaded',\\n    'ctrlIDC',\\n    'ctrlIDD',\\n    'ctrlMapAnimAdd',\\n    'ctrlMapAnimClear',\\n    'ctrlMapAnimCommit',\\n    'ctrlMapAnimDone',\\n    'ctrlMapCursor',\\n    'ctrlMapMouseOver',\\n    'ctrlMapPosition',\\n    'ctrlMapScale',\\n    'ctrlMapScreenToWorld',\\n    'ctrlMapSetPosition',\\n    'ctrlMapWorldToScreen',\\n    'ctrlModel',\\n    'ctrlModelDirAndUp',\\n    'ctrlModelScale',\\n    'ctrlMousePosition',\\n    'ctrlParent',\\n    'ctrlParentControlsGroup',\\n    'ctrlPosition',\\n    'ctrlRemoveAllEventHandlers',\\n    'ctrlRemoveEventHandler',\\n    'ctrlScale',\\n    'ctrlScrollValues',\\n    'ctrlSetActiveColor',\\n    'ctrlSetAngle',\\n    'ctrlSetAutoScrollDelay',\\n    'ctrlSetAutoScrollRewind',\\n    'ctrlSetAutoScrollSpeed',\\n    'ctrlSetBackgroundColor',\\n    'ctrlSetChecked',\\n    'ctrlSetDisabledColor',\\n    'ctrlSetEventHandler',\\n    'ctrlSetFade',\\n    'ctrlSetFocus',\\n    'ctrlSetFont',\\n    'ctrlSetFontH1',\\n    'ctrlSetFontH1B',\\n    'ctrlSetFontH2',\\n    'ctrlSetFontH2B',\\n    'ctrlSetFontH3',\\n    'ctrlSetFontH3B',\\n    'ctrlSetFontH4',\\n    'ctrlSetFontH4B',\\n    'ctrlSetFontH5',\\n    'ctrlSetFontH5B',\\n    'ctrlSetFontH6',\\n    'ctrlSetFontH6B',\\n    'ctrlSetFontHeight',\\n    'ctrlSetFontHeightH1',\\n    'ctrlSetFontHeightH2',\\n    'ctrlSetFontHeightH3',\\n    'ctrlSetFontHeightH4',\\n    'ctrlSetFontHeightH5',\\n    'ctrlSetFontHeightH6',\\n    'ctrlSetFontHeightSecondary',\\n    'ctrlSetFontP',\\n    'ctrlSetFontPB',\\n    'ctrlSetFontSecondary',\\n    'ctrlSetForegroundColor',\\n    'ctrlSetModel',\\n    'ctrlSetModelDirAndUp',\\n    'ctrlSetModelScale',\\n    'ctrlSetMousePosition',\\n    'ctrlSetPixelPrecision',\\n    'ctrlSetPosition',\\n    'ctrlSetPositionH',\\n    'ctrlSetPositionW',\\n    'ctrlSetPositionX',\\n    'ctrlSetPositionY',\\n    'ctrlSetScale',\\n    'ctrlSetScrollValues',\\n    'ctrlSetShadow',\\n    'ctrlSetStructuredText',\\n    'ctrlSetText',\\n    'ctrlSetTextColor',\\n    'ctrlSetTextColorSecondary',\\n    'ctrlSetTextSecondary',\\n    'ctrlSetTextSelection',\\n    'ctrlSetTooltip',\\n    'ctrlSetTooltipColorBox',\\n    'ctrlSetTooltipColorShade',\\n    'ctrlSetTooltipColorText',\\n    'ctrlSetTooltipMaxWidth',\\n    'ctrlSetURL',\\n    'ctrlSetURLOverlayMode',\\n    'ctrlShadow',\\n    'ctrlShow',\\n    'ctrlShown',\\n    'ctrlStyle',\\n    'ctrlText',\\n    'ctrlTextColor',\\n    'ctrlTextHeight',\\n    'ctrlTextSecondary',\\n    'ctrlTextSelection',\\n    'ctrlTextWidth',\\n    'ctrlTooltip',\\n    'ctrlType',\\n    'ctrlURL',\\n    'ctrlURLOverlayMode',\\n    'ctrlVisible',\\n    'ctRowControls',\\n    'ctRowCount',\\n    'ctSetCurSel',\\n    'ctSetData',\\n    'ctSetHeaderTemplate',\\n    'ctSetRowTemplate',\\n    'ctSetValue',\\n    'ctValue',\\n    'curatorAddons',\\n    'curatorCamera',\\n    'curatorCameraArea',\\n    'curatorCameraAreaCeiling',\\n    'curatorCoef',\\n    'curatorEditableObjects',\\n    'curatorEditingArea',\\n    'curatorEditingAreaType',\\n    'curatorMouseOver',\\n    'curatorPoints',\\n    'curatorRegisteredObjects',\\n    'curatorSelected',\\n    'curatorWaypointCost',\\n    'current3DENOperation',\\n    'currentChannel',\\n    'currentCommand',\\n    'currentMagazine',\\n    'currentMagazineDetail',\\n    'currentMagazineDetailTurret',\\n    'currentMagazineTurret',\\n    'currentMuzzle',\\n    'currentNamespace',\\n    'currentPilot',\\n    'currentTask',\\n    'currentTasks',\\n    'currentThrowable',\\n    'currentVisionMode',\\n    'currentWaypoint',\\n    'currentWeapon',\\n    'currentWeaponMode',\\n    'currentWeaponTurret',\\n    'currentZeroing',\\n    'cursorObject',\\n    'cursorTarget',\\n    'customChat',\\n    'customRadio',\\n    'customWaypointPosition',\\n    'cutFadeOut',\\n    'cutObj',\\n    'cutRsc',\\n    'cutText',\\n    'damage',\\n    'date',\\n    'dateToNumber',\\n    'dayTime',\\n    'deActivateKey',\\n    'debriefingText',\\n    'debugFSM',\\n    'debugLog',\\n    'decayGraphValues',\\n    'deg',\\n    'delete3DENEntities',\\n    'deleteAt',\\n    'deleteCenter',\\n    'deleteCollection',\\n    'deleteEditorObject',\\n    'deleteGroup',\\n    'deleteGroupWhenEmpty',\\n    'deleteIdentity',\\n    'deleteLocation',\\n    'deleteMarker',\\n    'deleteMarkerLocal',\\n    'deleteRange',\\n    'deleteResources',\\n    'deleteSite',\\n    'deleteStatus',\\n    'deleteTeam',\\n    'deleteVehicle',\\n    'deleteVehicleCrew',\\n    'deleteWaypoint',\\n    'detach',\\n    'detectedMines',\\n    'diag_activeMissionFSMs',\\n    'diag_activeScripts',\\n    'diag_activeSQFScripts',\\n    'diag_activeSQSScripts',\\n    'diag_allMissionEventHandlers',\\n    'diag_captureFrame',\\n    'diag_captureFrameToFile',\\n    'diag_captureSlowFrame',\\n    'diag_codePerformance',\\n    'diag_deltaTime',\\n    'diag_drawmode',\\n    'diag_dumpCalltraceToLog',\\n    'diag_dumpScriptAssembly',\\n    'diag_dumpTerrainSynth',\\n    'diag_dynamicSimulationEnd',\\n    'diag_enable',\\n    'diag_enabled',\\n    'diag_exportConfig',\\n    'diag_exportTerrainSVG',\\n    'diag_fps',\\n    'diag_fpsmin',\\n    'diag_frameno',\\n    'diag_getTerrainSegmentOffset',\\n    'diag_lightNewLoad',\\n    'diag_list',\\n    'diag_localized',\\n    'diag_log',\\n    'diag_logSlowFrame',\\n    'diag_mergeConfigFile',\\n    'diag_recordTurretLimits',\\n    'diag_resetFSM',\\n    'diag_resetshapes',\\n    'diag_scope',\\n    'diag_setLightNew',\\n    'diag_stacktrace',\\n    'diag_tickTime',\\n    'diag_toggle',\\n    'dialog',\\n    'diarySubjectExists',\\n    'didJIP',\\n    'didJIPOwner',\\n    'difficulty',\\n    'difficultyEnabled',\\n    'difficultyEnabledRTD',\\n    'difficultyOption',\\n    'direction',\\n    'directionStabilizationEnabled',\\n    'directSay',\\n    'disableAI',\\n    'disableBrakes',\\n    'disableCollisionWith',\\n    'disableConversation',\\n    'disableDebriefingStats',\\n    'disableMapIndicators',\\n    'disableNVGEquipment',\\n    'disableRemoteSensors',\\n    'disableSerialization',\\n    'disableTIEquipment',\\n    'disableUAVConnectability',\\n    'disableUserInput',\\n    'displayAddEventHandler',\\n    'displayChild',\\n    'displayCtrl',\\n    'displayParent',\\n    'displayRemoveAllEventHandlers',\\n    'displayRemoveEventHandler',\\n    'displaySetEventHandler',\\n    'displayUniqueName',\\n    'displayUpdate',\\n    'dissolveTeam',\\n    'distance',\\n    'distance2D',\\n    'distanceSqr',\\n    'distributionRegion',\\n    'do3DENAction',\\n    'doArtilleryFire',\\n    'doFire',\\n    'doFollow',\\n    'doFSM',\\n    'doGetOut',\\n    'doMove',\\n    'doorPhase',\\n    'doStop',\\n    'doSuppressiveFire',\\n    'doTarget',\\n    'doWatch',\\n    'drawArrow',\\n    'drawEllipse',\\n    'drawIcon',\\n    'drawIcon3D',\\n    'drawLaser',\\n    'drawLine',\\n    'drawLine3D',\\n    'drawLink',\\n    'drawLocation',\\n    'drawPolygon',\\n    'drawRectangle',\\n    'drawTriangle',\\n    'driver',\\n    'drop',\\n    'dynamicSimulationDistance',\\n    'dynamicSimulationDistanceCoef',\\n    'dynamicSimulationEnabled',\\n    'dynamicSimulationSystemEnabled',\\n    'echo',\\n    'edit3DENMissionAttributes',\\n    'editObject',\\n    'editorSetEventHandler',\\n    'effectiveCommander',\\n    'elevatePeriscope',\\n    'emptyPositions',\\n    'enableAI',\\n    'enableAIFeature',\\n    'enableAimPrecision',\\n    'enableAttack',\\n    'enableAudioFeature',\\n    'enableAutoStartUpRTD',\\n    'enableAutoTrimRTD',\\n    'enableCamShake',\\n    'enableCaustics',\\n    'enableChannel',\\n    'enableCollisionWith',\\n    'enableCopilot',\\n    'enableDebriefingStats',\\n    'enableDiagLegend',\\n    'enableDirectionStabilization',\\n    'enableDynamicSimulation',\\n    'enableDynamicSimulationSystem',\\n    'enableEndDialog',\\n    'enableEngineArtillery',\\n    'enableEnvironment',\\n    'enableFatigue',\\n    'enableGunLights',\\n    'enableInfoPanelComponent',\\n    'enableIRLasers',\\n    'enableMimics',\\n    'enablePersonTurret',\\n    'enableRadio',\\n    'enableReload',\\n    'enableRopeAttach',\\n    'enableSatNormalOnDetail',\\n    'enableSaving',\\n    'enableSentences',\\n    'enableSimulation',\\n    'enableSimulationGlobal',\\n    'enableStamina',\\n    'enableStressDamage',\\n    'enableTeamSwitch',\\n    'enableTraffic',\\n    'enableUAVConnectability',\\n    'enableUAVWaypoints',\\n    'enableVehicleCargo',\\n    'enableVehicleSensor',\\n    'enableWeaponDisassembly',\\n    'endLoadingScreen',\\n    'endMission',\\n    'engineOn',\\n    'enginesIsOnRTD',\\n    'enginesPowerRTD',\\n    'enginesRpmRTD',\\n    'enginesTorqueRTD',\\n    'entities',\\n    'environmentEnabled',\\n    'environmentVolume',\\n    'equipmentDisabled',\\n    'estimatedEndServerTime',\\n    'estimatedTimeLeft',\\n    'evalObjectArgument',\\n    'everyBackpack',\\n    'everyContainer',\\n    'exec',\\n    'execEditorScript',\\n    'execFSM',\\n    'execVM',\\n    'exp',\\n    'expectedDestination',\\n    'exportJIPMessages',\\n    'eyeDirection',\\n    'eyePos',\\n    'face',\\n    'faction',\\n    'fadeEnvironment',\\n    'fadeMusic',\\n    'fadeRadio',\\n    'fadeSound',\\n    'fadeSpeech',\\n    'failMission',\\n    'fileExists',\\n    'fillWeaponsFromPool',\\n    'find',\\n    'findAny',\\n    'findCover',\\n    'findDisplay',\\n    'findEditorObject',\\n    'findEmptyPosition',\\n    'findEmptyPositionReady',\\n    'findIf',\\n    'findNearestEnemy',\\n    'finishMissionInit',\\n    'finite',\\n    'fire',\\n    'fireAtTarget',\\n    'firstBackpack',\\n    'flag',\\n    'flagAnimationPhase',\\n    'flagOwner',\\n    'flagSide',\\n    'flagTexture',\\n    'flatten',\\n    'fleeing',\\n    'floor',\\n    'flyInHeight',\\n    'flyInHeightASL',\\n    'focusedCtrl',\\n    'fog',\\n    'fogForecast',\\n    'fogParams',\\n    'forceAddUniform',\\n    'forceAtPositionRTD',\\n    'forceCadetDifficulty',\\n    'forcedMap',\\n    'forceEnd',\\n    'forceFlagTexture',\\n    'forceFollowRoad',\\n    'forceGeneratorRTD',\\n    'forceMap',\\n    'forceRespawn',\\n    'forceSpeed',\\n    'forceUnicode',\\n    'forceWalk',\\n    'forceWeaponFire',\\n    'forceWeatherChange',\\n    'forEachMember',\\n    'forEachMemberAgent',\\n    'forEachMemberTeam',\\n    'forgetTarget',\\n    'format',\\n    'formation',\\n    'formationDirection',\\n    'formationLeader',\\n    'formationMembers',\\n    'formationPosition',\\n    'formationTask',\\n    'formatText',\\n    'formLeader',\\n    'freeExtension',\\n    'freeLook',\\n    'fromEditor',\\n    'fuel',\\n    'fullCrew',\\n    'gearIDCAmmoCount',\\n    'gearSlotAmmoCount',\\n    'gearSlotData',\\n    'gestureState',\\n    'get',\\n    'get3DENActionState',\\n    'get3DENAttribute',\\n    'get3DENCamera',\\n    'get3DENConnections',\\n    'get3DENEntity',\\n    'get3DENEntityID',\\n    'get3DENGrid',\\n    'get3DENIconsVisible',\\n    'get3DENLayerEntities',\\n    'get3DENLinesVisible',\\n    'get3DENMissionAttribute',\\n    'get3DENMouseOver',\\n    'get3DENSelected',\\n    'getAimingCoef',\\n    'getAllEnv3DSoundControllers',\\n    'getAllEnvSoundControllers',\\n    'getAllHitPointsDamage',\\n    'getAllOwnedMines',\\n    'getAllPylonsInfo',\\n    'getAllSoundControllers',\\n    'getAllUnitTraits',\\n    'getAmmoCargo',\\n    'getAnimAimPrecision',\\n    'getAnimSpeedCoef',\\n    'getArray',\\n    'getArtilleryAmmo',\\n    'getArtilleryComputerSettings',\\n    'getArtilleryETA',\\n    'getAssetDLCInfo',\\n    'getAssignedCuratorLogic',\\n    'getAssignedCuratorUnit',\\n    'getAttackTarget',\\n    'getAudioOptionVolumes',\\n    'getBackpackCargo',\\n    'getBleedingRemaining',\\n    'getBurningValue',\\n    'getCalculatePlayerVisibilityByFriendly',\\n    'getCameraViewDirection',\\n    'getCargoIndex',\\n    'getCenterOfMass',\\n    'getClientState',\\n    'getClientStateNumber',\\n    'getCompatiblePylonMagazines',\\n    'getConnectedUAV',\\n    'getConnectedUAVUnit',\\n    'getContainerMaxLoad',\\n    'getCorpse',\\n    'getCruiseControl',\\n    'getCursorObjectParams',\\n    'getCustomAimCoef',\\n    'getCustomSoundController',\\n    'getCustomSoundControllerCount',\\n    'getDammage',\\n    'getDebriefingText',\\n    'getDescription',\\n    'getDir',\\n    'getDirVisual',\\n    'getDiverState',\\n    'getDLCAssetsUsage',\\n    'getDLCAssetsUsageByName',\\n    'getDLCs',\\n    'getDLCUsageTime',\\n    'getEditorCamera',\\n    'getEditorMode',\\n    'getEditorObjectScope',\\n    'getElevationOffset',\\n    'getEngineTargetRPMRTD',\\n    'getEnv3DSoundController',\\n    'getEnvSoundController',\\n    'getEventHandlerInfo',\\n    'getFatigue',\\n    'getFieldManualStartPage',\\n    'getForcedFlagTexture',\\n    'getForcedSpeed',\\n    'getFriend',\\n    'getFSMVariable',\\n    'getFuelCargo',\\n    'getGraphValues',\\n    'getGroupIcon',\\n    'getGroupIconParams',\\n    'getGroupIcons',\\n    'getHideFrom',\\n    'getHit',\\n    'getHitIndex',\\n    'getHitPointDamage',\\n    'getItemCargo',\\n    'getLighting',\\n    'getLightingAt',\\n    'getLoadedModsInfo',\\n    'getMagazineCargo',\\n    'getMarkerColor',\\n    'getMarkerPos',\\n    'getMarkerSize',\\n    'getMarkerType',\\n    'getMass',\\n    'getMissionConfig',\\n    'getMissionConfigValue',\\n    'getMissionDLCs',\\n    'getMissionLayerEntities',\\n    'getMissionLayers',\\n    'getMissionPath',\\n    'getModelInfo',\\n    'getMousePosition',\\n    'getMusicPlayedTime',\\n    'getNumber',\\n    'getObjectArgument',\\n    'getObjectChildren',\\n    'getObjectDLC',\\n    'getObjectFOV',\\n    'getObjectID',\\n    'getObjectMaterials',\\n    'getObjectProxy',\\n    'getObjectScale',\\n    'getObjectTextures',\\n    'getObjectType',\\n    'getObjectViewDistance',\\n    'getOpticsMode',\\n    'getOrDefault',\\n    'getOrDefaultCall',\\n    'getOxygenRemaining',\\n    'getPersonUsedDLCs',\\n    'getPilotCameraDirection',\\n    'getPilotCameraPosition',\\n    'getPilotCameraRotation',\\n    'getPilotCameraTarget',\\n    'getPiPViewDistance',\\n    'getPlateNumber',\\n    'getPlayerChannel',\\n    'getPlayerID',\\n    'getPlayerScores',\\n    'getPlayerUID',\\n    'getPlayerVoNVolume',\\n    'getPos',\\n    'getPosASL',\\n    'getPosASLVisual',\\n    'getPosASLW',\\n    'getPosATL',\\n    'getPosATLVisual',\\n    'getPosVisual',\\n    'getPosWorld',\\n    'getPosWorldVisual',\\n    'getPylonMagazines',\\n    'getRelDir',\\n    'getRelPos',\\n    'getRemoteSensorsDisabled',\\n    'getRepairCargo',\\n    'getResolution',\\n    'getRoadInfo',\\n    'getRotorBrakeRTD',\\n    'getSensorTargets',\\n    'getSensorThreats',\\n    'getShadowDistance',\\n    'getShotParents',\\n    'getSlingLoad',\\n    'getSoundController',\\n    'getSoundControllerResult',\\n    'getSpeed',\\n    'getStamina',\\n    'getStatValue',\\n    'getSteamFriendsServers',\\n    'getSubtitleOptions',\\n    'getSuppression',\\n    'getTerrainGrid',\\n    'getTerrainHeight',\\n    'getTerrainHeightASL',\\n    'getTerrainInfo',\\n    'getText',\\n    'getTextRaw',\\n    'getTextureInfo',\\n    'getTextWidth',\\n    'getTiParameters',\\n    'getTotalDLCUsageTime',\\n    'getTrimOffsetRTD',\\n    'getTurretLimits',\\n    'getTurretOpticsMode',\\n    'getUnitFreefallInfo',\\n    'getUnitLoadout',\\n    'getUnitTrait',\\n    'getUnloadInCombat',\\n    'getUserInfo',\\n    'getUserMFDText',\\n    'getUserMFDValue',\\n    'getVariable',\\n    'getVehicleCargo',\\n    'getVehicleTiPars',\\n    'getWeaponCargo',\\n    'getWeaponSway',\\n    'getWingsOrientationRTD',\\n    'getWingsPositionRTD',\\n    'getWPPos',\\n    'glanceAt',\\n    'globalChat',\\n    'globalRadio',\\n    'goggles',\\n    'goto',\\n    'group',\\n    'groupChat',\\n    'groupFromNetId',\\n    'groupIconSelectable',\\n    'groupIconsVisible',\\n    'groupID',\\n    'groupOwner',\\n    'groupRadio',\\n    'groups',\\n    'groupSelectedUnits',\\n    'groupSelectUnit',\\n    'gunner',\\n    'gusts',\\n    'halt',\\n    'handgunItems',\\n    'handgunMagazine',\\n    'handgunWeapon',\\n    'handsHit',\\n    'hashValue',\\n    'hasInterface',\\n    'hasPilotCamera',\\n    'hasWeapon',\\n    'hcAllGroups',\\n    'hcGroupParams',\\n    'hcLeader',\\n    'hcRemoveAllGroups',\\n    'hcRemoveGroup',\\n    'hcSelected',\\n    'hcSelectGroup',\\n    'hcSetGroup',\\n    'hcShowBar',\\n    'hcShownBar',\\n    'headgear',\\n    'hideBody',\\n    'hideObject',\\n    'hideObjectGlobal',\\n    'hideSelection',\\n    'hint',\\n    'hintC',\\n    'hintCadet',\\n    'hintSilent',\\n    'hmd',\\n    'hostMission',\\n    'htmlLoad',\\n    'HUDMovementLevels',\\n    'humidity',\\n    'image',\\n    'importAllGroups',\\n    'importance',\\n    'in',\\n    'inArea',\\n    'inAreaArray',\\n    'incapacitatedState',\\n    'inflame',\\n    'inflamed',\\n    'infoPanel',\\n    'infoPanelComponentEnabled',\\n    'infoPanelComponents',\\n    'infoPanels',\\n    'inGameUISetEventHandler',\\n    'inheritsFrom',\\n    'initAmbientLife',\\n    'inPolygon',\\n    'inputAction',\\n    'inputController',\\n    'inputMouse',\\n    'inRangeOfArtillery',\\n    'insert',\\n    'insertEditorObject',\\n    'intersect',\\n    'is3DEN',\\n    'is3DENMultiplayer',\\n    'is3DENPreview',\\n    'isAbleToBreathe',\\n    'isActionMenuVisible',\\n    'isAgent',\\n    'isAimPrecisionEnabled',\\n    'isAllowedCrewInImmobile',\\n    'isArray',\\n    'isAutoHoverOn',\\n    'isAutonomous',\\n    'isAutoStartUpEnabledRTD',\\n    'isAutotest',\\n    'isAutoTrimOnRTD',\\n    'isAwake',\\n    'isBleeding',\\n    'isBurning',\\n    'isClass',\\n    'isCollisionLightOn',\\n    'isCopilotEnabled',\\n    'isDamageAllowed',\\n    'isDedicated',\\n    'isDLCAvailable',\\n    'isEngineOn',\\n    'isEqualRef',\\n    'isEqualTo',\\n    'isEqualType',\\n    'isEqualTypeAll',\\n    'isEqualTypeAny',\\n    'isEqualTypeArray',\\n    'isEqualTypeParams',\\n    'isFilePatchingEnabled',\\n    'isFinal',\\n    'isFlashlightOn',\\n    'isFlatEmpty',\\n    'isForcedWalk',\\n    'isFormationLeader',\\n    'isGameFocused',\\n    'isGamePaused',\\n    'isGroupDeletedWhenEmpty',\\n    'isHidden',\\n    'isInRemainsCollector',\\n    'isInstructorFigureEnabled',\\n    'isIRLaserOn',\\n    'isKeyActive',\\n    'isKindOf',\\n    'isLaserOn',\\n    'isLightOn',\\n    'isLocalized',\\n    'isManualFire',\\n    'isMarkedForCollection',\\n    'isMissionProfileNamespaceLoaded',\\n    'isMultiplayer',\\n    'isMultiplayerSolo',\\n    'isNil',\\n    'isNotEqualRef',\\n    'isNotEqualTo',\\n    'isNull',\\n    'isNumber',\\n    'isObjectHidden',\\n    'isObjectRTD',\\n    'isOnRoad',\\n    'isPiPEnabled',\\n    'isPlayer',\\n    'isRealTime',\\n    'isRemoteExecuted',\\n    'isRemoteExecutedJIP',\\n    'isSaving',\\n    'isSensorTargetConfirmed',\\n    'isServer',\\n    'isShowing3DIcons',\\n    'isSimpleObject',\\n    'isSprintAllowed',\\n    'isStaminaEnabled',\\n    'isSteamMission',\\n    'isSteamOverlayEnabled',\\n    'isStreamFriendlyUIEnabled',\\n    'isStressDamageEnabled',\\n    'isText',\\n    'isTouchingGround',\\n    'isTurnedOut',\\n    'isTutHintsEnabled',\\n    'isUAVConnectable',\\n    'isUAVConnected',\\n    'isUIContext',\\n    'isUniformAllowed',\\n    'isVehicleCargo',\\n    'isVehicleRadarOn',\\n    'isVehicleSensorEnabled',\\n    'isWalking',\\n    'isWeaponDeployed',\\n    'isWeaponRested',\\n    'itemCargo',\\n    'items',\\n    'itemsWithMagazines',\\n    'join',\\n    'joinAs',\\n    'joinAsSilent',\\n    'joinSilent',\\n    'joinString',\\n    'kbAddDatabase',\\n    'kbAddDatabaseTargets',\\n    'kbAddTopic',\\n    'kbHasTopic',\\n    'kbReact',\\n    'kbRemoveTopic',\\n    'kbTell',\\n    'kbWasSaid',\\n    'keyImage',\\n    'keyName',\\n    'keys',\\n    'knowsAbout',\\n    'land',\\n    'landAt',\\n    'landResult',\\n    'language',\\n    'laserTarget',\\n    'lbAdd',\\n    'lbClear',\\n    'lbColor',\\n    'lbColorRight',\\n    'lbCurSel',\\n    'lbData',\\n    'lbDelete',\\n    'lbIsSelected',\\n    'lbPicture',\\n    'lbPictureRight',\\n    'lbSelection',\\n    'lbSetColor',\\n    'lbSetColorRight',\\n    'lbSetCurSel',\\n    'lbSetData',\\n    'lbSetPicture',\\n    'lbSetPictureColor',\\n    'lbSetPictureColorDisabled',\\n    'lbSetPictureColorSelected',\\n    'lbSetPictureRight',\\n    'lbSetPictureRightColor',\\n    'lbSetPictureRightColorDisabled',\\n    'lbSetPictureRightColorSelected',\\n    'lbSetSelectColor',\\n    'lbSetSelectColorRight',\\n    'lbSetSelected',\\n    'lbSetText',\\n    'lbSetTextRight',\\n    'lbSetTooltip',\\n    'lbSetValue',\\n    'lbSize',\\n    'lbSort',\\n    'lbSortBy',\\n    'lbSortByValue',\\n    'lbText',\\n    'lbTextRight',\\n    'lbTooltip',\\n    'lbValue',\\n    'leader',\\n    'leaderboardDeInit',\\n    'leaderboardGetRows',\\n    'leaderboardInit',\\n    'leaderboardRequestRowsFriends',\\n    'leaderboardRequestRowsGlobal',\\n    'leaderboardRequestRowsGlobalAroundUser',\\n    'leaderboardsRequestUploadScore',\\n    'leaderboardsRequestUploadScoreKeepBest',\\n    'leaderboardState',\\n    'leaveVehicle',\\n    'libraryCredits',\\n    'libraryDisclaimers',\\n    'lifeState',\\n    'lightAttachObject',\\n    'lightDetachObject',\\n    'lightIsOn',\\n    'lightnings',\\n    'limitSpeed',\\n    'linearConversion',\\n    'lineIntersects',\\n    'lineIntersectsObjs',\\n    'lineIntersectsSurfaces',\\n    'lineIntersectsWith',\\n    'linkItem',\\n    'list',\\n    'listObjects',\\n    'listRemoteTargets',\\n    'listVehicleSensors',\\n    'ln',\\n    'lnbAddArray',\\n    'lnbAddColumn',\\n    'lnbAddRow',\\n    'lnbClear',\\n    'lnbColor',\\n    'lnbColorRight',\\n    'lnbCurSelRow',\\n    'lnbData',\\n    'lnbDeleteColumn',\\n    'lnbDeleteRow',\\n    'lnbGetColumnsPosition',\\n    'lnbPicture',\\n    'lnbPictureRight',\\n    'lnbSetColor',\\n    'lnbSetColorRight',\\n    'lnbSetColumnsPos',\\n    'lnbSetCurSelRow',\\n    'lnbSetData',\\n    'lnbSetPicture',\\n    'lnbSetPictureColor',\\n    'lnbSetPictureColorRight',\\n    'lnbSetPictureColorSelected',\\n    'lnbSetPictureColorSelectedRight',\\n    'lnbSetPictureRight',\\n    'lnbSetText',\\n    'lnbSetTextRight',\\n    'lnbSetTooltip',\\n    'lnbSetValue',\\n    'lnbSize',\\n    'lnbSort',\\n    'lnbSortBy',\\n    'lnbSortByValue',\\n    'lnbText',\\n    'lnbTextRight',\\n    'lnbValue',\\n    'load',\\n    'loadAbs',\\n    'loadBackpack',\\n    'loadConfig',\\n    'loadFile',\\n    'loadGame',\\n    'loadIdentity',\\n    'loadMagazine',\\n    'loadOverlay',\\n    'loadStatus',\\n    'loadUniform',\\n    'loadVest',\\n    'localize',\\n    'localNamespace',\\n    'locationPosition',\\n    'lock',\\n    'lockCameraTo',\\n    'lockCargo',\\n    'lockDriver',\\n    'locked',\\n    'lockedCameraTo',\\n    'lockedCargo',\\n    'lockedDriver',\\n    'lockedInventory',\\n    'lockedTurret',\\n    'lockIdentity',\\n    'lockInventory',\\n    'lockTurret',\\n    'lockWp',\\n    'log',\\n    'logEntities',\\n    'logNetwork',\\n    'logNetworkTerminate',\\n    'lookAt',\\n    'lookAtPos',\\n    'magazineCargo',\\n    'magazines',\\n    'magazinesAllTurrets',\\n    'magazinesAmmo',\\n    'magazinesAmmoCargo',\\n    'magazinesAmmoFull',\\n    'magazinesDetail',\\n    'magazinesDetailBackpack',\\n    'magazinesDetailUniform',\\n    'magazinesDetailVest',\\n    'magazinesTurret',\\n    'magazineTurretAmmo',\\n    'mapAnimAdd',\\n    'mapAnimClear',\\n    'mapAnimCommit',\\n    'mapAnimDone',\\n    'mapCenterOnCamera',\\n    'mapGridPosition',\\n    'markAsFinishedOnSteam',\\n    'markerAlpha',\\n    'markerBrush',\\n    'markerChannel',\\n    'markerColor',\\n    'markerDir',\\n    'markerPolyline',\\n    'markerPos',\\n    'markerShadow',\\n    'markerShape',\\n    'markerSize',\\n    'markerText',\\n    'markerType',\\n    'matrixMultiply',\\n    'matrixTranspose',\\n    'max',\\n    'maxLoad',\\n    'members',\\n    'menuAction',\\n    'menuAdd',\\n    'menuChecked',\\n    'menuClear',\\n    'menuCollapse',\\n    'menuData',\\n    'menuDelete',\\n    'menuEnable',\\n    'menuEnabled',\\n    'menuExpand',\\n    'menuHover',\\n    'menuPicture',\\n    'menuSetAction',\\n    'menuSetCheck',\\n    'menuSetData',\\n    'menuSetPicture',\\n    'menuSetShortcut',\\n    'menuSetText',\\n    'menuSetURL',\\n    'menuSetValue',\\n    'menuShortcut',\\n    'menuShortcutText',\\n    'menuSize',\\n    'menuSort',\\n    'menuText',\\n    'menuURL',\\n    'menuValue',\\n    'merge',\\n    'min',\\n    'mineActive',\\n    'mineDetectedBy',\\n    'missileTarget',\\n    'missileTargetPos',\\n    'missionConfigFile',\\n    'missionDifficulty',\\n    'missionEnd',\\n    'missionName',\\n    'missionNameSource',\\n    'missionNamespace',\\n    'missionProfileNamespace',\\n    'missionStart',\\n    'missionVersion',\\n    'mod',\\n    'modelToWorld',\\n    'modelToWorldVisual',\\n    'modelToWorldVisualWorld',\\n    'modelToWorldWorld',\\n    'modParams',\\n    'moonIntensity',\\n    'moonPhase',\\n    'morale',\\n    'move',\\n    'move3DENCamera',\\n    'moveInAny',\\n    'moveInCargo',\\n    'moveInCommander',\\n    'moveInDriver',\\n    'moveInGunner',\\n    'moveInTurret',\\n    'moveObjectToEnd',\\n    'moveOut',\\n    'moveTime',\\n    'moveTo',\\n    'moveToCompleted',\\n    'moveToFailed',\\n    'musicVolume',\\n    'name',\\n    'namedProperties',\\n    'nameSound',\\n    'nearEntities',\\n    'nearestBuilding',\\n    'nearestLocation',\\n    'nearestLocations',\\n    'nearestLocationWithDubbing',\\n    'nearestMines',\\n    'nearestObject',\\n    'nearestObjects',\\n    'nearestTerrainObjects',\\n    'nearObjects',\\n    'nearObjectsReady',\\n    'nearRoads',\\n    'nearSupplies',\\n    'nearTargets',\\n    'needReload',\\n    'needService',\\n    'netId',\\n    'netObjNull',\\n    'newOverlay',\\n    'nextMenuItemIndex',\\n    'nextWeatherChange',\\n    'nMenuItems',\\n    'not',\\n    'numberOfEnginesRTD',\\n    'numberToDate',\\n    'objectCurators',\\n    'objectFromNetId',\\n    'objectParent',\\n    'objStatus',\\n    'onBriefingGroup',\\n    'onBriefingNotes',\\n    'onBriefingPlan',\\n    'onBriefingTeamSwitch',\\n    'onCommandModeChanged',\\n    'onDoubleClick',\\n    'onEachFrame',\\n    'onGroupIconClick',\\n    'onGroupIconOverEnter',\\n    'onGroupIconOverLeave',\\n    'onHCGroupSelectionChanged',\\n    'onMapSingleClick',\\n    'onPlayerConnected',\\n    'onPlayerDisconnected',\\n    'onPreloadFinished',\\n    'onPreloadStarted',\\n    'onShowNewObject',\\n    'onTeamSwitch',\\n    'openCuratorInterface',\\n    'openDLCPage',\\n    'openGPS',\\n    'openMap',\\n    'openSteamApp',\\n    'openYoutubeVideo',\\n    'or',\\n    'orderGetIn',\\n    'overcast',\\n    'overcastForecast',\\n    'owner',\\n    'param',\\n    'params',\\n    'parseNumber',\\n    'parseSimpleArray',\\n    'parseText',\\n    'parsingNamespace',\\n    'particlesQuality',\\n    'periscopeElevation',\\n    'pickWeaponPool',\\n    'pitch',\\n    'pixelGrid',\\n    'pixelGridBase',\\n    'pixelGridNoUIScale',\\n    'pixelH',\\n    'pixelW',\\n    'playableSlotsNumber',\\n    'playableUnits',\\n    'playAction',\\n    'playActionNow',\\n    'player',\\n    'playerRespawnTime',\\n    'playerSide',\\n    'playersNumber',\\n    'playGesture',\\n    'playMission',\\n    'playMove',\\n    'playMoveNow',\\n    'playMusic',\\n    'playScriptedMission',\\n    'playSound',\\n    'playSound3D',\\n    'playSoundUI',\\n    'pose',\\n    'position',\\n    'positionCameraToWorld',\\n    'posScreenToWorld',\\n    'posWorldToScreen',\\n    'ppEffectAdjust',\\n    'ppEffectCommit',\\n    'ppEffectCommitted',\\n    'ppEffectCreate',\\n    'ppEffectDestroy',\\n    'ppEffectEnable',\\n    'ppEffectEnabled',\\n    'ppEffectForceInNVG',\\n    'precision',\\n    'preloadCamera',\\n    'preloadObject',\\n    'preloadSound',\\n    'preloadTitleObj',\\n    'preloadTitleRsc',\\n    'preprocessFile',\\n    'preprocessFileLineNumbers',\\n    'primaryWeapon',\\n    'primaryWeaponItems',\\n    'primaryWeaponMagazine',\\n    'priority',\\n    'processDiaryLink',\\n    'productVersion',\\n    'profileName',\\n    'profileNamespace',\\n    'profileNameSteam',\\n    'progressLoadingScreen',\\n    'progressPosition',\\n    'progressSetPosition',\\n    'publicVariable',\\n    'publicVariableClient',\\n    'publicVariableServer',\\n    'pushBack',\\n    'pushBackUnique',\\n    'putWeaponPool',\\n    'queryItemsPool',\\n    'queryMagazinePool',\\n    'queryWeaponPool',\\n    'rad',\\n    'radioChannelAdd',\\n    'radioChannelCreate',\\n    'radioChannelInfo',\\n    'radioChannelRemove',\\n    'radioChannelSetCallSign',\\n    'radioChannelSetLabel',\\n    'radioEnabled',\\n    'radioVolume',\\n    'rain',\\n    'rainbow',\\n    'rainParams',\\n    'random',\\n    'rank',\\n    'rankId',\\n    'rating',\\n    'rectangular',\\n    'regexFind',\\n    'regexMatch',\\n    'regexReplace',\\n    'registeredTasks',\\n    'registerTask',\\n    'reload',\\n    'reloadEnabled',\\n    'remoteControl',\\n    'remoteExec',\\n    'remoteExecCall',\\n    'remoteExecutedOwner',\\n    'remove3DENConnection',\\n    'remove3DENEventHandler',\\n    'remove3DENLayer',\\n    'removeAction',\\n    'removeAll3DENEventHandlers',\\n    'removeAllActions',\\n    'removeAllAssignedItems',\\n    'removeAllBinocularItems',\\n    'removeAllContainers',\\n    'removeAllCuratorAddons',\\n    'removeAllCuratorCameraAreas',\\n    'removeAllCuratorEditingAreas',\\n    'removeAllEventHandlers',\\n    'removeAllHandgunItems',\\n    'removeAllItems',\\n    'removeAllItemsWithMagazines',\\n    'removeAllMissionEventHandlers',\\n    'removeAllMPEventHandlers',\\n    'removeAllMusicEventHandlers',\\n    'removeAllOwnedMines',\\n    'removeAllPrimaryWeaponItems',\\n    'removeAllSecondaryWeaponItems',\\n    'removeAllUserActionEventHandlers',\\n    'removeAllWeapons',\\n    'removeBackpack',\\n    'removeBackpackGlobal',\\n    'removeBinocularItem',\\n    'removeCuratorAddons',\\n    'removeCuratorCameraArea',\\n    'removeCuratorEditableObjects',\\n    'removeCuratorEditingArea',\\n    'removeDiaryRecord',\\n    'removeDiarySubject',\\n    'removeDrawIcon',\\n    'removeDrawLinks',\\n    'removeEventHandler',\\n    'removeFromRemainsCollector',\\n    'removeGoggles',\\n    'removeGroupIcon',\\n    'removeHandgunItem',\\n    'removeHeadgear',\\n    'removeItem',\\n    'removeItemFromBackpack',\\n    'removeItemFromUniform',\\n    'removeItemFromVest',\\n    'removeItems',\\n    'removeMagazine',\\n    'removeMagazineGlobal',\\n    'removeMagazines',\\n    'removeMagazinesTurret',\\n    'removeMagazineTurret',\\n    'removeMenuItem',\\n    'removeMissionEventHandler',\\n    'removeMPEventHandler',\\n    'removeMusicEventHandler',\\n    'removeOwnedMine',\\n    'removePrimaryWeaponItem',\\n    'removeSecondaryWeaponItem',\\n    'removeSimpleTask',\\n    'removeSwitchableUnit',\\n    'removeTeamMember',\\n    'removeUniform',\\n    'removeUserActionEventHandler',\\n    'removeVest',\\n    'removeWeapon',\\n    'removeWeaponAttachmentCargo',\\n    'removeWeaponCargo',\\n    'removeWeaponGlobal',\\n    'removeWeaponTurret',\\n    'reportRemoteTarget',\\n    'requiredVersion',\\n    'resetCamShake',\\n    'resetSubgroupDirection',\\n    'resize',\\n    'resources',\\n    'respawnVehicle',\\n    'restartEditorCamera',\\n    'reveal',\\n    'revealMine',\\n    'reverse',\\n    'reversedMouseY',\\n    'roadAt',\\n    'roadsConnectedTo',\\n    'roleDescription',\\n    'ropeAttachedObjects',\\n    'ropeAttachedTo',\\n    'ropeAttachEnabled',\\n    'ropeAttachTo',\\n    'ropeCreate',\\n    'ropeCut',\\n    'ropeDestroy',\\n    'ropeDetach',\\n    'ropeEndPosition',\\n    'ropeLength',\\n    'ropes',\\n    'ropesAttachedTo',\\n    'ropeSegments',\\n    'ropeUnwind',\\n    'ropeUnwound',\\n    'rotorsForcesRTD',\\n    'rotorsRpmRTD',\\n    'round',\\n    'runInitScript',\\n    'safeZoneH',\\n    'safeZoneW',\\n    'safeZoneWAbs',\\n    'safeZoneX',\\n    'safeZoneXAbs',\\n    'safeZoneY',\\n    'save3DENInventory',\\n    'saveGame',\\n    'saveIdentity',\\n    'saveJoysticks',\\n    'saveMissionProfileNamespace',\\n    'saveOverlay',\\n    'saveProfileNamespace',\\n    'saveStatus',\\n    'saveVar',\\n    'savingEnabled',\\n    'say',\\n    'say2D',\\n    'say3D',\\n    'scopeName',\\n    'score',\\n    'scoreSide',\\n    'screenshot',\\n    'screenToWorld',\\n    'scriptDone',\\n    'scriptName',\\n    'scudState',\\n    'secondaryWeapon',\\n    'secondaryWeaponItems',\\n    'secondaryWeaponMagazine',\\n    'select',\\n    'selectBestPlaces',\\n    'selectDiarySubject',\\n    'selectedEditorObjects',\\n    'selectEditorObject',\\n    'selectionNames',\\n    'selectionPosition',\\n    'selectionVectorDirAndUp',\\n    'selectLeader',\\n    'selectMax',\\n    'selectMin',\\n    'selectNoPlayer',\\n    'selectPlayer',\\n    'selectRandom',\\n    'selectRandomWeighted',\\n    'selectWeapon',\\n    'selectWeaponTurret',\\n    'sendAUMessage',\\n    'sendSimpleCommand',\\n    'sendTask',\\n    'sendTaskResult',\\n    'sendUDPMessage',\\n    'sentencesEnabled',\\n    'serverCommand',\\n    'serverCommandAvailable',\\n    'serverCommandExecutable',\\n    'serverName',\\n    'serverNamespace',\\n    'serverTime',\\n    'set',\\n    'set3DENAttribute',\\n    'set3DENAttributes',\\n    'set3DENGrid',\\n    'set3DENIconsVisible',\\n    'set3DENLayer',\\n    'set3DENLinesVisible',\\n    'set3DENLogicType',\\n    'set3DENMissionAttribute',\\n    'set3DENMissionAttributes',\\n    'set3DENModelsVisible',\\n    'set3DENObjectType',\\n    'set3DENSelected',\\n    'setAccTime',\\n    'setActualCollectiveRTD',\\n    'setAirplaneThrottle',\\n    'setAirportSide',\\n    'setAmmo',\\n    'setAmmoCargo',\\n    'setAmmoOnPylon',\\n    'setAnimSpeedCoef',\\n    'setAperture',\\n    'setApertureNew',\\n    'setArmoryPoints',\\n    'setAttributes',\\n    'setAutonomous',\\n    'setBehaviour',\\n    'setBehaviourStrong',\\n    'setBleedingRemaining',\\n    'setBrakesRTD',\\n    'setCameraInterest',\\n    'setCamShakeDefParams',\\n    'setCamShakeParams',\\n    'setCamUseTi',\\n    'setCaptive',\\n    'setCenterOfMass',\\n    'setCollisionLight',\\n    'setCombatBehaviour',\\n    'setCombatMode',\\n    'setCompassOscillation',\\n    'setConvoySeparation',\\n    'setCruiseControl',\\n    'setCuratorCameraAreaCeiling',\\n    'setCuratorCoef',\\n    'setCuratorEditingAreaType',\\n    'setCuratorWaypointCost',\\n    'setCurrentChannel',\\n    'setCurrentTask',\\n    'setCurrentWaypoint',\\n    'setCustomAimCoef',\\n    'SetCustomMissionData',\\n    'setCustomSoundController',\\n    'setCustomWeightRTD',\\n    'setDamage',\\n    'setDammage',\\n    'setDate',\\n    'setDebriefingText',\\n    'setDefaultCamera',\\n    'setDestination',\\n    'setDetailMapBlendPars',\\n    'setDiaryRecordText',\\n    'setDiarySubjectPicture',\\n    'setDir',\\n    'setDirection',\\n    'setDrawIcon',\\n    'setDriveOnPath',\\n    'setDropInterval',\\n    'setDynamicSimulationDistance',\\n    'setDynamicSimulationDistanceCoef',\\n    'setEditorMode',\\n    'setEditorObjectScope',\\n    'setEffectCondition',\\n    'setEffectiveCommander',\\n    'setEngineRpmRTD',\\n    'setFace',\\n    'setFaceanimation',\\n    'setFatigue',\\n    'setFeatureType',\\n    'setFlagAnimationPhase',\\n    'setFlagOwner',\\n    'setFlagSide',\\n    'setFlagTexture',\\n    'setFog',\\n    'setForceGeneratorRTD',\\n    'setFormation',\\n    'setFormationTask',\\n    'setFormDir',\\n    'setFriend',\\n    'setFromEditor',\\n    'setFSMVariable',\\n    'setFuel',\\n    'setFuelCargo',\\n    'setGroupIcon',\\n    'setGroupIconParams',\\n    'setGroupIconsSelectable',\\n    'setGroupIconsVisible',\\n    'setGroupid',\\n    'setGroupIdGlobal',\\n    'setGroupOwner',\\n    'setGusts',\\n    'setHideBehind',\\n    'setHit',\\n    'setHitIndex',\\n    'setHitPointDamage',\\n    'setHorizonParallaxCoef',\\n    'setHUDMovementLevels',\\n    'setHumidity',\\n    'setIdentity',\\n    'setImportance',\\n    'setInfoPanel',\\n    'setLeader',\\n    'setLightAmbient',\\n    'setLightAttenuation',\\n    'setLightBrightness',\\n    'setLightColor',\\n    'setLightConePars',\\n    'setLightDayLight',\\n    'setLightFlareMaxDistance',\\n    'setLightFlareSize',\\n    'setLightIntensity',\\n    'setLightIR',\\n    'setLightnings',\\n    'setLightUseFlare',\\n    'setLightVolumeShape',\\n    'setLocalWindParams',\\n    'setMagazineTurretAmmo',\\n    'setMarkerAlpha',\\n    'setMarkerAlphaLocal',\\n    'setMarkerBrush',\\n    'setMarkerBrushLocal',\\n    'setMarkerColor',\\n    'setMarkerColorLocal',\\n    'setMarkerDir',\\n    'setMarkerDirLocal',\\n    'setMarkerPolyline',\\n    'setMarkerPolylineLocal',\\n    'setMarkerPos',\\n    'setMarkerPosLocal',\\n    'setMarkerShadow',\\n    'setMarkerShadowLocal',\\n    'setMarkerShape',\\n    'setMarkerShapeLocal',\\n    'setMarkerSize',\\n    'setMarkerSizeLocal',\\n    'setMarkerText',\\n    'setMarkerTextLocal',\\n    'setMarkerType',\\n    'setMarkerTypeLocal',\\n    'setMass',\\n    'setMaxLoad',\\n    'setMimic',\\n    'setMissileTarget',\\n    'setMissileTargetPos',\\n    'setMousePosition',\\n    'setMusicEffect',\\n    'setMusicEventHandler',\\n    'setName',\\n    'setNameSound',\\n    'setObjectArguments',\\n    'setObjectMaterial',\\n    'setObjectMaterialGlobal',\\n    'setObjectProxy',\\n    'setObjectScale',\\n    'setObjectTexture',\\n    'setObjectTextureGlobal',\\n    'setObjectViewDistance',\\n    'setOpticsMode',\\n    'setOvercast',\\n    'setOwner',\\n    'setOxygenRemaining',\\n    'setParticleCircle',\\n    'setParticleClass',\\n    'setParticleFire',\\n    'setParticleParams',\\n    'setParticleRandom',\\n    'setPilotCameraDirection',\\n    'setPilotCameraRotation',\\n    'setPilotCameraTarget',\\n    'setPilotLight',\\n    'setPiPEffect',\\n    'setPiPViewDistance',\\n    'setPitch',\\n    'setPlateNumber',\\n    'setPlayable',\\n    'setPlayerRespawnTime',\\n    'setPlayerVoNVolume',\\n    'setPos',\\n    'setPosASL',\\n    'setPosASL2',\\n    'setPosASLW',\\n    'setPosATL',\\n    'setPosition',\\n    'setPosWorld',\\n    'setPylonLoadout',\\n    'setPylonsPriority',\\n    'setRadioMsg',\\n    'setRain',\\n    'setRainbow',\\n    'setRandomLip',\\n    'setRank',\\n    'setRectangular',\\n    'setRepairCargo',\\n    'setRotorBrakeRTD',\\n    'setShadowDistance',\\n    'setShotParents',\\n    'setSide',\\n    'setSimpleTaskAlwaysVisible',\\n    'setSimpleTaskCustomData',\\n    'setSimpleTaskDescription',\\n    'setSimpleTaskDestination',\\n    'setSimpleTaskTarget',\\n    'setSimpleTaskType',\\n    'setSimulWeatherLayers',\\n    'setSize',\\n    'setSkill',\\n    'setSlingLoad',\\n    'setSoundEffect',\\n    'setSpeaker',\\n    'setSpeech',\\n    'setSpeedMode',\\n    'setStamina',\\n    'setStaminaScheme',\\n    'setStatValue',\\n    'setSuppression',\\n    'setSystemOfUnits',\\n    'setTargetAge',\\n    'setTaskMarkerOffset',\\n    'setTaskResult',\\n    'setTaskState',\\n    'setTerrainGrid',\\n    'setTerrainHeight',\\n    'setText',\\n    'setTimeMultiplier',\\n    'setTiParameter',\\n    'setTitleEffect',\\n    'setTowParent',\\n    'setTrafficDensity',\\n    'setTrafficDistance',\\n    'setTrafficGap',\\n    'setTrafficSpeed',\\n    'setTriggerActivation',\\n    'setTriggerArea',\\n    'setTriggerInterval',\\n    'setTriggerStatements',\\n    'setTriggerText',\\n    'setTriggerTimeout',\\n    'setTriggerType',\\n    'setTurretLimits',\\n    'setTurretOpticsMode',\\n    'setType',\\n    'setUnconscious',\\n    'setUnitAbility',\\n    'setUnitCombatMode',\\n    'setUnitFreefallHeight',\\n    'setUnitLoadout',\\n    'setUnitPos',\\n    'setUnitPosWeak',\\n    'setUnitRank',\\n    'setUnitRecoilCoefficient',\\n    'setUnitTrait',\\n    'setUnloadInCombat',\\n    'setUserActionText',\\n    'setUserMFDText',\\n    'setUserMFDValue',\\n    'setVariable',\\n    'setVectorDir',\\n    'setVectorDirAndUp',\\n    'setVectorUp',\\n    'setVehicleAmmo',\\n    'setVehicleAmmoDef',\\n    'setVehicleArmor',\\n    'setVehicleCargo',\\n    'setVehicleId',\\n    'setVehicleLock',\\n    'setVehiclePosition',\\n    'setVehicleRadar',\\n    'setVehicleReceiveRemoteTargets',\\n    'setVehicleReportOwnPosition',\\n    'setVehicleReportRemoteTargets',\\n    'setVehicleTiPars',\\n    'setVehicleVarName',\\n    'setVelocity',\\n    'setVelocityModelSpace',\\n    'setVelocityTransformation',\\n    'setViewDistance',\\n    'setVisibleIfTreeCollapsed',\\n    'setWantedRPMRTD',\\n    'setWaves',\\n    'setWaypointBehaviour',\\n    'setWaypointCombatMode',\\n    'setWaypointCompletionRadius',\\n    'setWaypointDescription',\\n    'setWaypointForceBehaviour',\\n    'setWaypointFormation',\\n    'setWaypointHousePosition',\\n    'setWaypointLoiterAltitude',\\n    'setWaypointLoiterRadius',\\n    'setWaypointLoiterType',\\n    'setWaypointName',\\n    'setWaypointPosition',\\n    'setWaypointScript',\\n    'setWaypointSpeed',\\n    'setWaypointStatements',\\n    'setWaypointTimeout',\\n    'setWaypointType',\\n    'setWaypointVisible',\\n    'setWeaponReloadingTime',\\n    'setWeaponZeroing',\\n    'setWind',\\n    'setWindDir',\\n    'setWindForce',\\n    'setWindStr',\\n    'setWingForceScaleRTD',\\n    'setWPPos',\\n    'show3DIcons',\\n    'showChat',\\n    'showCinemaBorder',\\n    'showCommandingMenu',\\n    'showCompass',\\n    'showCuratorCompass',\\n    'showGps',\\n    'showHUD',\\n    'showLegend',\\n    'showMap',\\n    'shownArtilleryComputer',\\n    'shownChat',\\n    'shownCompass',\\n    'shownCuratorCompass',\\n    'showNewEditorObject',\\n    'shownGps',\\n    'shownHUD',\\n    'shownMap',\\n    'shownPad',\\n    'shownRadio',\\n    'shownScoretable',\\n    'shownSubtitles',\\n    'shownUAVFeed',\\n    'shownWarrant',\\n    'shownWatch',\\n    'showPad',\\n    'showRadio',\\n    'showScoretable',\\n    'showSubtitles',\\n    'showUAVFeed',\\n    'showWarrant',\\n    'showWatch',\\n    'showWaypoint',\\n    'showWaypoints',\\n    'side',\\n    'sideChat',\\n    'sideRadio',\\n    'simpleTasks',\\n    'simulationEnabled',\\n    'simulCloudDensity',\\n    'simulCloudOcclusion',\\n    'simulInClouds',\\n    'simulWeatherSync',\\n    'sin',\\n    'size',\\n    'sizeOf',\\n    'skill',\\n    'skillFinal',\\n    'skipTime',\\n    'sleep',\\n    'sliderPosition',\\n    'sliderRange',\\n    'sliderSetPosition',\\n    'sliderSetRange',\\n    'sliderSetSpeed',\\n    'sliderSpeed',\\n    'slingLoadAssistantShown',\\n    'soldierMagazines',\\n    'someAmmo',\\n    'sort',\\n    'soundVolume',\\n    'spawn',\\n    'speaker',\\n    'speechVolume',\\n    'speed',\\n    'speedMode',\\n    'splitString',\\n    'sqrt',\\n    'squadParams',\\n    'stance',\\n    'startLoadingScreen',\\n    'stop',\\n    'stopEngineRTD',\\n    'stopped',\\n    'str',\\n    'sunOrMoon',\\n    'supportInfo',\\n    'suppressFor',\\n    'surfaceIsWater',\\n    'surfaceNormal',\\n    'surfaceTexture',\\n    'surfaceType',\\n    'swimInDepth',\\n    'switchableUnits',\\n    'switchAction',\\n    'switchCamera',\\n    'switchGesture',\\n    'switchLight',\\n    'switchMove',\\n    'synchronizedObjects',\\n    'synchronizedTriggers',\\n    'synchronizedWaypoints',\\n    'synchronizeObjectsAdd',\\n    'synchronizeObjectsRemove',\\n    'synchronizeTrigger',\\n    'synchronizeWaypoint',\\n    'systemChat',\\n    'systemOfUnits',\\n    'systemTime',\\n    'systemTimeUTC',\\n    'tan',\\n    'targetKnowledge',\\n    'targets',\\n    'targetsAggregate',\\n    'targetsQuery',\\n    'taskAlwaysVisible',\\n    'taskChildren',\\n    'taskCompleted',\\n    'taskCustomData',\\n    'taskDescription',\\n    'taskDestination',\\n    'taskHint',\\n    'taskMarkerOffset',\\n    'taskName',\\n    'taskParent',\\n    'taskResult',\\n    'taskState',\\n    'taskType',\\n    'teamMember',\\n    'teamName',\\n    'teams',\\n    'teamSwitch',\\n    'teamSwitchEnabled',\\n    'teamType',\\n    'terminate',\\n    'terrainIntersect',\\n    'terrainIntersectASL',\\n    'terrainIntersectAtASL',\\n    'text',\\n    'textLog',\\n    'textLogFormat',\\n    'tg',\\n    'time',\\n    'timeMultiplier',\\n    'titleCut',\\n    'titleFadeOut',\\n    'titleObj',\\n    'titleRsc',\\n    'titleText',\\n    'toArray',\\n    'toFixed',\\n    'toLower',\\n    'toLowerANSI',\\n    'toString',\\n    'toUpper',\\n    'toUpperANSI',\\n    'triggerActivated',\\n    'triggerActivation',\\n    'triggerAmmo',\\n    'triggerArea',\\n    'triggerAttachedVehicle',\\n    'triggerAttachObject',\\n    'triggerAttachVehicle',\\n    'triggerDynamicSimulation',\\n    'triggerInterval',\\n    'triggerStatements',\\n    'triggerText',\\n    'triggerTimeout',\\n    'triggerTimeoutCurrent',\\n    'triggerType',\\n    'trim',\\n    'turretLocal',\\n    'turretOwner',\\n    'turretUnit',\\n    'tvAdd',\\n    'tvClear',\\n    'tvCollapse',\\n    'tvCollapseAll',\\n    'tvCount',\\n    'tvCurSel',\\n    'tvData',\\n    'tvDelete',\\n    'tvExpand',\\n    'tvExpandAll',\\n    'tvIsSelected',\\n    'tvPicture',\\n    'tvPictureRight',\\n    'tvSelection',\\n    'tvSetColor',\\n    'tvSetCurSel',\\n    'tvSetData',\\n    'tvSetPicture',\\n    'tvSetPictureColor',\\n    'tvSetPictureColorDisabled',\\n    'tvSetPictureColorSelected',\\n    'tvSetPictureRight',\\n    'tvSetPictureRightColor',\\n    'tvSetPictureRightColorDisabled',\\n    'tvSetPictureRightColorSelected',\\n    'tvSetSelectColor',\\n    'tvSetSelected',\\n    'tvSetText',\\n    'tvSetTooltip',\\n    'tvSetValue',\\n    'tvSort',\\n    'tvSortAll',\\n    'tvSortByValue',\\n    'tvSortByValueAll',\\n    'tvText',\\n    'tvTooltip',\\n    'tvValue',\\n    'type',\\n    'typeName',\\n    'typeOf',\\n    'UAVControl',\\n    'uiNamespace',\\n    'uiSleep',\\n    'unassignCurator',\\n    'unassignItem',\\n    'unassignTeam',\\n    'unassignVehicle',\\n    'underwater',\\n    'uniform',\\n    'uniformContainer',\\n    'uniformItems',\\n    'uniformMagazines',\\n    'uniqueUnitItems',\\n    'unitAddons',\\n    'unitAimPosition',\\n    'unitAimPositionVisual',\\n    'unitBackpack',\\n    'unitCombatMode',\\n    'unitIsUAV',\\n    'unitPos',\\n    'unitReady',\\n    'unitRecoilCoefficient',\\n    'units',\\n    'unitsBelowHeight',\\n    'unitTurret',\\n    'unlinkItem',\\n    'unlockAchievement',\\n    'unregisterTask',\\n    'updateDrawIcon',\\n    'updateMenuItem',\\n    'updateObjectTree',\\n    'useAIOperMapObstructionTest',\\n    'useAISteeringComponent',\\n    'useAudioTimeForMoves',\\n    'userInputDisabled',\\n    'values',\\n    'vectorAdd',\\n    'vectorCos',\\n    'vectorCrossProduct',\\n    'vectorDiff',\\n    'vectorDir',\\n    'vectorDirVisual',\\n    'vectorDistance',\\n    'vectorDistanceSqr',\\n    'vectorDotProduct',\\n    'vectorFromTo',\\n    'vectorLinearConversion',\\n    'vectorMagnitude',\\n    'vectorMagnitudeSqr',\\n    'vectorModelToWorld',\\n    'vectorModelToWorldVisual',\\n    'vectorMultiply',\\n    'vectorNormalized',\\n    'vectorUp',\\n    'vectorUpVisual',\\n    'vectorWorldToModel',\\n    'vectorWorldToModelVisual',\\n    'vehicle',\\n    'vehicleCargoEnabled',\\n    'vehicleChat',\\n    'vehicleMoveInfo',\\n    'vehicleRadio',\\n    'vehicleReceiveRemoteTargets',\\n    'vehicleReportOwnPosition',\\n    'vehicleReportRemoteTargets',\\n    'vehicles',\\n    'vehicleVarName',\\n    'velocity',\\n    'velocityModelSpace',\\n    'verifySignature',\\n    'vest',\\n    'vestContainer',\\n    'vestItems',\\n    'vestMagazines',\\n    'viewDistance',\\n    'visibleCompass',\\n    'visibleGps',\\n    'visibleMap',\\n    'visiblePosition',\\n    'visiblePositionASL',\\n    'visibleScoretable',\\n    'visibleWatch',\\n    'waves',\\n    'waypointAttachedObject',\\n    'waypointAttachedVehicle',\\n    'waypointAttachObject',\\n    'waypointAttachVehicle',\\n    'waypointBehaviour',\\n    'waypointCombatMode',\\n    'waypointCompletionRadius',\\n    'waypointDescription',\\n    'waypointForceBehaviour',\\n    'waypointFormation',\\n    'waypointHousePosition',\\n    'waypointLoiterAltitude',\\n    'waypointLoiterRadius',\\n    'waypointLoiterType',\\n    'waypointName',\\n    'waypointPosition',\\n    'waypoints',\\n    'waypointScript',\\n    'waypointsEnabledUAV',\\n    'waypointShow',\\n    'waypointSpeed',\\n    'waypointStatements',\\n    'waypointTimeout',\\n    'waypointTimeoutCurrent',\\n    'waypointType',\\n    'waypointVisible',\\n    'weaponAccessories',\\n    'weaponAccessoriesCargo',\\n    'weaponCargo',\\n    'weaponDirection',\\n    'weaponInertia',\\n    'weaponLowered',\\n    'weaponReloadingTime',\\n    'weapons',\\n    'weaponsInfo',\\n    'weaponsItems',\\n    'weaponsItemsCargo',\\n    'weaponState',\\n    'weaponsTurret',\\n    'weightRTD',\\n    'WFSideText',\\n    'wind',\\n    'windDir',\\n    'windRTD',\\n    'windStr',\\n    'wingsForcesRTD',\\n    'worldName',\\n    'worldSize',\\n    'worldToModel',\\n    'worldToModelVisual',\\n    'worldToScreen'\\n  ];\\n  \\n  // list of keywords from:\\n  // https://community.bistudio.com/wiki/PreProcessor_Commands\\n  const PREPROCESSOR = {\\n    className: 'meta',\\n    begin: /#\\\\s*[a-z]+\\\\b/,\\n    end: /$/,\\n    keywords: 'define undef ifdef ifndef else endif include if',\\n    contains: [\\n      {\\n        begin: /\\\\\\\\\\\\n/,\\n        relevance: 0\\n      },\\n      hljs.inherit(STRINGS, { className: 'string' }),\\n      {\\n        begin: /<[^\\\\n>]*>/,\\n        end: /$/,\\n        illegal: '\\\\\\\\n'\\n      },\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE\\n    ]\\n  };\\n  \\n  return {\\n    name: 'SQF',\\n    case_insensitive: true,\\n    keywords: {\\n      keyword: KEYWORDS,\\n      built_in: BUILT_IN,\\n      literal: LITERAL\\n    },\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.NUMBER_MODE,\\n      VARIABLE,\\n      FUNCTION,\\n      STRINGS,\\n      PREPROCESSOR\\n    ],\\n    illegal: [\\n      //$ is only valid when used with Hex numbers (e.g. $FF)\\n      /\\\\$[^a-fA-F0-9]/, \\n      /\\\\w\\\\$/,\\n      /\\\\?/,      //There's no ? in SQF\\n      /@/,       //There's no @ in SQF\\n      // Brute-force-fixing the build error. See https://github.com/highlightjs/highlight.js/pull/3193#issuecomment-843088729\\n      / \\\\| /,\\n      // . is only used in numbers\\n      /[a-zA-Z_]\\\\./,\\n      /\\\\:\\\\=/,\\n      /\\\\[\\\\:/\\n    ]\\n  };\\n}\\n\\nmodule.exports = sqf;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/sqf.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/sql.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/sql.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\n Language: SQL\\n Website: https://en.wikipedia.org/wiki/SQL\\n Category: common, database\\n */\\n\\n/*\\n\\nGoals:\\n\\nSQL is intended to highlight basic/common SQL keywords and expressions\\n\\n- If pretty much every single SQL server includes supports, then it's a canidate.\\n- It is NOT intended to include tons of vendor specific keywords (Oracle, MySQL,\\n  PostgreSQL) although the list of data types is purposely a bit more expansive.\\n- For more specific SQL grammars please see:\\n  - PostgreSQL and PL/pgSQL - core\\n  - T-SQL - https://github.com/highlightjs/highlightjs-tsql\\n  - sql_more (core)\\n\\n */\\n\\nfunction sql(hljs) {\\n  const regex = hljs.regex;\\n  const COMMENT_MODE = hljs.COMMENT('--', '$');\\n  const STRING = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: /'/,\\n        end: /'/,\\n        contains: [ { begin: /''/ } ]\\n      }\\n    ]\\n  };\\n  const QUOTED_IDENTIFIER = {\\n    begin: /\\\"/,\\n    end: /\\\"/,\\n    contains: [ { begin: /\\\"\\\"/ } ]\\n  };\\n\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    // Not sure it's correct to call NULL literal, and clauses like IS [NOT] NULL look strange that way.\\n    // \\\"null\\\",\\n    \\\"unknown\\\"\\n  ];\\n\\n  const MULTI_WORD_TYPES = [\\n    \\\"double precision\\\",\\n    \\\"large object\\\",\\n    \\\"with timezone\\\",\\n    \\\"without timezone\\\"\\n  ];\\n\\n  const TYPES = [\\n    'bigint',\\n    'binary',\\n    'blob',\\n    'boolean',\\n    'char',\\n    'character',\\n    'clob',\\n    'date',\\n    'dec',\\n    'decfloat',\\n    'decimal',\\n    'float',\\n    'int',\\n    'integer',\\n    'interval',\\n    'nchar',\\n    'nclob',\\n    'national',\\n    'numeric',\\n    'real',\\n    'row',\\n    'smallint',\\n    'time',\\n    'timestamp',\\n    'varchar',\\n    'varying', // modifier (character varying)\\n    'varbinary'\\n  ];\\n\\n  const NON_RESERVED_WORDS = [\\n    \\\"add\\\",\\n    \\\"asc\\\",\\n    \\\"collation\\\",\\n    \\\"desc\\\",\\n    \\\"final\\\",\\n    \\\"first\\\",\\n    \\\"last\\\",\\n    \\\"view\\\"\\n  ];\\n\\n  // https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#reserved-word\\n  const RESERVED_WORDS = [\\n    \\\"abs\\\",\\n    \\\"acos\\\",\\n    \\\"all\\\",\\n    \\\"allocate\\\",\\n    \\\"alter\\\",\\n    \\\"and\\\",\\n    \\\"any\\\",\\n    \\\"are\\\",\\n    \\\"array\\\",\\n    \\\"array_agg\\\",\\n    \\\"array_max_cardinality\\\",\\n    \\\"as\\\",\\n    \\\"asensitive\\\",\\n    \\\"asin\\\",\\n    \\\"asymmetric\\\",\\n    \\\"at\\\",\\n    \\\"atan\\\",\\n    \\\"atomic\\\",\\n    \\\"authorization\\\",\\n    \\\"avg\\\",\\n    \\\"begin\\\",\\n    \\\"begin_frame\\\",\\n    \\\"begin_partition\\\",\\n    \\\"between\\\",\\n    \\\"bigint\\\",\\n    \\\"binary\\\",\\n    \\\"blob\\\",\\n    \\\"boolean\\\",\\n    \\\"both\\\",\\n    \\\"by\\\",\\n    \\\"call\\\",\\n    \\\"called\\\",\\n    \\\"cardinality\\\",\\n    \\\"cascaded\\\",\\n    \\\"case\\\",\\n    \\\"cast\\\",\\n    \\\"ceil\\\",\\n    \\\"ceiling\\\",\\n    \\\"char\\\",\\n    \\\"char_length\\\",\\n    \\\"character\\\",\\n    \\\"character_length\\\",\\n    \\\"check\\\",\\n    \\\"classifier\\\",\\n    \\\"clob\\\",\\n    \\\"close\\\",\\n    \\\"coalesce\\\",\\n    \\\"collate\\\",\\n    \\\"collect\\\",\\n    \\\"column\\\",\\n    \\\"commit\\\",\\n    \\\"condition\\\",\\n    \\\"connect\\\",\\n    \\\"constraint\\\",\\n    \\\"contains\\\",\\n    \\\"convert\\\",\\n    \\\"copy\\\",\\n    \\\"corr\\\",\\n    \\\"corresponding\\\",\\n    \\\"cos\\\",\\n    \\\"cosh\\\",\\n    \\\"count\\\",\\n    \\\"covar_pop\\\",\\n    \\\"covar_samp\\\",\\n    \\\"create\\\",\\n    \\\"cross\\\",\\n    \\\"cube\\\",\\n    \\\"cume_dist\\\",\\n    \\\"current\\\",\\n    \\\"current_catalog\\\",\\n    \\\"current_date\\\",\\n    \\\"current_default_transform_group\\\",\\n    \\\"current_path\\\",\\n    \\\"current_role\\\",\\n    \\\"current_row\\\",\\n    \\\"current_schema\\\",\\n    \\\"current_time\\\",\\n    \\\"current_timestamp\\\",\\n    \\\"current_path\\\",\\n    \\\"current_role\\\",\\n    \\\"current_transform_group_for_type\\\",\\n    \\\"current_user\\\",\\n    \\\"cursor\\\",\\n    \\\"cycle\\\",\\n    \\\"date\\\",\\n    \\\"day\\\",\\n    \\\"deallocate\\\",\\n    \\\"dec\\\",\\n    \\\"decimal\\\",\\n    \\\"decfloat\\\",\\n    \\\"declare\\\",\\n    \\\"default\\\",\\n    \\\"define\\\",\\n    \\\"delete\\\",\\n    \\\"dense_rank\\\",\\n    \\\"deref\\\",\\n    \\\"describe\\\",\\n    \\\"deterministic\\\",\\n    \\\"disconnect\\\",\\n    \\\"distinct\\\",\\n    \\\"double\\\",\\n    \\\"drop\\\",\\n    \\\"dynamic\\\",\\n    \\\"each\\\",\\n    \\\"element\\\",\\n    \\\"else\\\",\\n    \\\"empty\\\",\\n    \\\"end\\\",\\n    \\\"end_frame\\\",\\n    \\\"end_partition\\\",\\n    \\\"end-exec\\\",\\n    \\\"equals\\\",\\n    \\\"escape\\\",\\n    \\\"every\\\",\\n    \\\"except\\\",\\n    \\\"exec\\\",\\n    \\\"execute\\\",\\n    \\\"exists\\\",\\n    \\\"exp\\\",\\n    \\\"external\\\",\\n    \\\"extract\\\",\\n    \\\"false\\\",\\n    \\\"fetch\\\",\\n    \\\"filter\\\",\\n    \\\"first_value\\\",\\n    \\\"float\\\",\\n    \\\"floor\\\",\\n    \\\"for\\\",\\n    \\\"foreign\\\",\\n    \\\"frame_row\\\",\\n    \\\"free\\\",\\n    \\\"from\\\",\\n    \\\"full\\\",\\n    \\\"function\\\",\\n    \\\"fusion\\\",\\n    \\\"get\\\",\\n    \\\"global\\\",\\n    \\\"grant\\\",\\n    \\\"group\\\",\\n    \\\"grouping\\\",\\n    \\\"groups\\\",\\n    \\\"having\\\",\\n    \\\"hold\\\",\\n    \\\"hour\\\",\\n    \\\"identity\\\",\\n    \\\"in\\\",\\n    \\\"indicator\\\",\\n    \\\"initial\\\",\\n    \\\"inner\\\",\\n    \\\"inout\\\",\\n    \\\"insensitive\\\",\\n    \\\"insert\\\",\\n    \\\"int\\\",\\n    \\\"integer\\\",\\n    \\\"intersect\\\",\\n    \\\"intersection\\\",\\n    \\\"interval\\\",\\n    \\\"into\\\",\\n    \\\"is\\\",\\n    \\\"join\\\",\\n    \\\"json_array\\\",\\n    \\\"json_arrayagg\\\",\\n    \\\"json_exists\\\",\\n    \\\"json_object\\\",\\n    \\\"json_objectagg\\\",\\n    \\\"json_query\\\",\\n    \\\"json_table\\\",\\n    \\\"json_table_primitive\\\",\\n    \\\"json_value\\\",\\n    \\\"lag\\\",\\n    \\\"language\\\",\\n    \\\"large\\\",\\n    \\\"last_value\\\",\\n    \\\"lateral\\\",\\n    \\\"lead\\\",\\n    \\\"leading\\\",\\n    \\\"left\\\",\\n    \\\"like\\\",\\n    \\\"like_regex\\\",\\n    \\\"listagg\\\",\\n    \\\"ln\\\",\\n    \\\"local\\\",\\n    \\\"localtime\\\",\\n    \\\"localtimestamp\\\",\\n    \\\"log\\\",\\n    \\\"log10\\\",\\n    \\\"lower\\\",\\n    \\\"match\\\",\\n    \\\"match_number\\\",\\n    \\\"match_recognize\\\",\\n    \\\"matches\\\",\\n    \\\"max\\\",\\n    \\\"member\\\",\\n    \\\"merge\\\",\\n    \\\"method\\\",\\n    \\\"min\\\",\\n    \\\"minute\\\",\\n    \\\"mod\\\",\\n    \\\"modifies\\\",\\n    \\\"module\\\",\\n    \\\"month\\\",\\n    \\\"multiset\\\",\\n    \\\"national\\\",\\n    \\\"natural\\\",\\n    \\\"nchar\\\",\\n    \\\"nclob\\\",\\n    \\\"new\\\",\\n    \\\"no\\\",\\n    \\\"none\\\",\\n    \\\"normalize\\\",\\n    \\\"not\\\",\\n    \\\"nth_value\\\",\\n    \\\"ntile\\\",\\n    \\\"null\\\",\\n    \\\"nullif\\\",\\n    \\\"numeric\\\",\\n    \\\"octet_length\\\",\\n    \\\"occurrences_regex\\\",\\n    \\\"of\\\",\\n    \\\"offset\\\",\\n    \\\"old\\\",\\n    \\\"omit\\\",\\n    \\\"on\\\",\\n    \\\"one\\\",\\n    \\\"only\\\",\\n    \\\"open\\\",\\n    \\\"or\\\",\\n    \\\"order\\\",\\n    \\\"out\\\",\\n    \\\"outer\\\",\\n    \\\"over\\\",\\n    \\\"overlaps\\\",\\n    \\\"overlay\\\",\\n    \\\"parameter\\\",\\n    \\\"partition\\\",\\n    \\\"pattern\\\",\\n    \\\"per\\\",\\n    \\\"percent\\\",\\n    \\\"percent_rank\\\",\\n    \\\"percentile_cont\\\",\\n    \\\"percentile_disc\\\",\\n    \\\"period\\\",\\n    \\\"portion\\\",\\n    \\\"position\\\",\\n    \\\"position_regex\\\",\\n    \\\"power\\\",\\n    \\\"precedes\\\",\\n    \\\"precision\\\",\\n    \\\"prepare\\\",\\n    \\\"primary\\\",\\n    \\\"procedure\\\",\\n    \\\"ptf\\\",\\n    \\\"range\\\",\\n    \\\"rank\\\",\\n    \\\"reads\\\",\\n    \\\"real\\\",\\n    \\\"recursive\\\",\\n    \\\"ref\\\",\\n    \\\"references\\\",\\n    \\\"referencing\\\",\\n    \\\"regr_avgx\\\",\\n    \\\"regr_avgy\\\",\\n    \\\"regr_count\\\",\\n    \\\"regr_intercept\\\",\\n    \\\"regr_r2\\\",\\n    \\\"regr_slope\\\",\\n    \\\"regr_sxx\\\",\\n    \\\"regr_sxy\\\",\\n    \\\"regr_syy\\\",\\n    \\\"release\\\",\\n    \\\"result\\\",\\n    \\\"return\\\",\\n    \\\"returns\\\",\\n    \\\"revoke\\\",\\n    \\\"right\\\",\\n    \\\"rollback\\\",\\n    \\\"rollup\\\",\\n    \\\"row\\\",\\n    \\\"row_number\\\",\\n    \\\"rows\\\",\\n    \\\"running\\\",\\n    \\\"savepoint\\\",\\n    \\\"scope\\\",\\n    \\\"scroll\\\",\\n    \\\"search\\\",\\n    \\\"second\\\",\\n    \\\"seek\\\",\\n    \\\"select\\\",\\n    \\\"sensitive\\\",\\n    \\\"session_user\\\",\\n    \\\"set\\\",\\n    \\\"show\\\",\\n    \\\"similar\\\",\\n    \\\"sin\\\",\\n    \\\"sinh\\\",\\n    \\\"skip\\\",\\n    \\\"smallint\\\",\\n    \\\"some\\\",\\n    \\\"specific\\\",\\n    \\\"specifictype\\\",\\n    \\\"sql\\\",\\n    \\\"sqlexception\\\",\\n    \\\"sqlstate\\\",\\n    \\\"sqlwarning\\\",\\n    \\\"sqrt\\\",\\n    \\\"start\\\",\\n    \\\"static\\\",\\n    \\\"stddev_pop\\\",\\n    \\\"stddev_samp\\\",\\n    \\\"submultiset\\\",\\n    \\\"subset\\\",\\n    \\\"substring\\\",\\n    \\\"substring_regex\\\",\\n    \\\"succeeds\\\",\\n    \\\"sum\\\",\\n    \\\"symmetric\\\",\\n    \\\"system\\\",\\n    \\\"system_time\\\",\\n    \\\"system_user\\\",\\n    \\\"table\\\",\\n    \\\"tablesample\\\",\\n    \\\"tan\\\",\\n    \\\"tanh\\\",\\n    \\\"then\\\",\\n    \\\"time\\\",\\n    \\\"timestamp\\\",\\n    \\\"timezone_hour\\\",\\n    \\\"timezone_minute\\\",\\n    \\\"to\\\",\\n    \\\"trailing\\\",\\n    \\\"translate\\\",\\n    \\\"translate_regex\\\",\\n    \\\"translation\\\",\\n    \\\"treat\\\",\\n    \\\"trigger\\\",\\n    \\\"trim\\\",\\n    \\\"trim_array\\\",\\n    \\\"true\\\",\\n    \\\"truncate\\\",\\n    \\\"uescape\\\",\\n    \\\"union\\\",\\n    \\\"unique\\\",\\n    \\\"unknown\\\",\\n    \\\"unnest\\\",\\n    \\\"update\\\",\\n    \\\"upper\\\",\\n    \\\"user\\\",\\n    \\\"using\\\",\\n    \\\"value\\\",\\n    \\\"values\\\",\\n    \\\"value_of\\\",\\n    \\\"var_pop\\\",\\n    \\\"var_samp\\\",\\n    \\\"varbinary\\\",\\n    \\\"varchar\\\",\\n    \\\"varying\\\",\\n    \\\"versioning\\\",\\n    \\\"when\\\",\\n    \\\"whenever\\\",\\n    \\\"where\\\",\\n    \\\"width_bucket\\\",\\n    \\\"window\\\",\\n    \\\"with\\\",\\n    \\\"within\\\",\\n    \\\"without\\\",\\n    \\\"year\\\",\\n  ];\\n\\n  // these are reserved words we have identified to be functions\\n  // and should only be highlighted in a dispatch-like context\\n  // ie, array_agg(...), etc.\\n  const RESERVED_FUNCTIONS = [\\n    \\\"abs\\\",\\n    \\\"acos\\\",\\n    \\\"array_agg\\\",\\n    \\\"asin\\\",\\n    \\\"atan\\\",\\n    \\\"avg\\\",\\n    \\\"cast\\\",\\n    \\\"ceil\\\",\\n    \\\"ceiling\\\",\\n    \\\"coalesce\\\",\\n    \\\"corr\\\",\\n    \\\"cos\\\",\\n    \\\"cosh\\\",\\n    \\\"count\\\",\\n    \\\"covar_pop\\\",\\n    \\\"covar_samp\\\",\\n    \\\"cume_dist\\\",\\n    \\\"dense_rank\\\",\\n    \\\"deref\\\",\\n    \\\"element\\\",\\n    \\\"exp\\\",\\n    \\\"extract\\\",\\n    \\\"first_value\\\",\\n    \\\"floor\\\",\\n    \\\"json_array\\\",\\n    \\\"json_arrayagg\\\",\\n    \\\"json_exists\\\",\\n    \\\"json_object\\\",\\n    \\\"json_objectagg\\\",\\n    \\\"json_query\\\",\\n    \\\"json_table\\\",\\n    \\\"json_table_primitive\\\",\\n    \\\"json_value\\\",\\n    \\\"lag\\\",\\n    \\\"last_value\\\",\\n    \\\"lead\\\",\\n    \\\"listagg\\\",\\n    \\\"ln\\\",\\n    \\\"log\\\",\\n    \\\"log10\\\",\\n    \\\"lower\\\",\\n    \\\"max\\\",\\n    \\\"min\\\",\\n    \\\"mod\\\",\\n    \\\"nth_value\\\",\\n    \\\"ntile\\\",\\n    \\\"nullif\\\",\\n    \\\"percent_rank\\\",\\n    \\\"percentile_cont\\\",\\n    \\\"percentile_disc\\\",\\n    \\\"position\\\",\\n    \\\"position_regex\\\",\\n    \\\"power\\\",\\n    \\\"rank\\\",\\n    \\\"regr_avgx\\\",\\n    \\\"regr_avgy\\\",\\n    \\\"regr_count\\\",\\n    \\\"regr_intercept\\\",\\n    \\\"regr_r2\\\",\\n    \\\"regr_slope\\\",\\n    \\\"regr_sxx\\\",\\n    \\\"regr_sxy\\\",\\n    \\\"regr_syy\\\",\\n    \\\"row_number\\\",\\n    \\\"sin\\\",\\n    \\\"sinh\\\",\\n    \\\"sqrt\\\",\\n    \\\"stddev_pop\\\",\\n    \\\"stddev_samp\\\",\\n    \\\"substring\\\",\\n    \\\"substring_regex\\\",\\n    \\\"sum\\\",\\n    \\\"tan\\\",\\n    \\\"tanh\\\",\\n    \\\"translate\\\",\\n    \\\"translate_regex\\\",\\n    \\\"treat\\\",\\n    \\\"trim\\\",\\n    \\\"trim_array\\\",\\n    \\\"unnest\\\",\\n    \\\"upper\\\",\\n    \\\"value_of\\\",\\n    \\\"var_pop\\\",\\n    \\\"var_samp\\\",\\n    \\\"width_bucket\\\",\\n  ];\\n\\n  // these functions can\\n  const POSSIBLE_WITHOUT_PARENS = [\\n    \\\"current_catalog\\\",\\n    \\\"current_date\\\",\\n    \\\"current_default_transform_group\\\",\\n    \\\"current_path\\\",\\n    \\\"current_role\\\",\\n    \\\"current_schema\\\",\\n    \\\"current_transform_group_for_type\\\",\\n    \\\"current_user\\\",\\n    \\\"session_user\\\",\\n    \\\"system_time\\\",\\n    \\\"system_user\\\",\\n    \\\"current_time\\\",\\n    \\\"localtime\\\",\\n    \\\"current_timestamp\\\",\\n    \\\"localtimestamp\\\"\\n  ];\\n\\n  // those exist to boost relevance making these very\\n  // \\\"SQL like\\\" keyword combos worth +1 extra relevance\\n  const COMBOS = [\\n    \\\"create table\\\",\\n    \\\"insert into\\\",\\n    \\\"primary key\\\",\\n    \\\"foreign key\\\",\\n    \\\"not null\\\",\\n    \\\"alter table\\\",\\n    \\\"add constraint\\\",\\n    \\\"grouping sets\\\",\\n    \\\"on overflow\\\",\\n    \\\"character set\\\",\\n    \\\"respect nulls\\\",\\n    \\\"ignore nulls\\\",\\n    \\\"nulls first\\\",\\n    \\\"nulls last\\\",\\n    \\\"depth first\\\",\\n    \\\"breadth first\\\"\\n  ];\\n\\n  const FUNCTIONS = RESERVED_FUNCTIONS;\\n\\n  const KEYWORDS = [\\n    ...RESERVED_WORDS,\\n    ...NON_RESERVED_WORDS\\n  ].filter((keyword) => {\\n    return !RESERVED_FUNCTIONS.includes(keyword);\\n  });\\n\\n  const VARIABLE = {\\n    className: \\\"variable\\\",\\n    begin: /@[a-z0-9][a-z0-9_]*/,\\n  };\\n\\n  const OPERATOR = {\\n    className: \\\"operator\\\",\\n    begin: /[-+*/=%^~]|&&?|\\\\|\\\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,\\n    relevance: 0,\\n  };\\n\\n  const FUNCTION_CALL = {\\n    begin: regex.concat(/\\\\b/, regex.either(...FUNCTIONS), /\\\\s*\\\\(/),\\n    relevance: 0,\\n    keywords: { built_in: FUNCTIONS }\\n  };\\n\\n  // keywords with less than 3 letters are reduced in relevancy\\n  function reduceRelevancy(list, {\\n    exceptions, when\\n  } = {}) {\\n    const qualifyFn = when;\\n    exceptions = exceptions || [];\\n    return list.map((item) => {\\n      if (item.match(/\\\\|\\\\d+$/) || exceptions.includes(item)) {\\n        return item;\\n      } else if (qualifyFn(item)) {\\n        return `${item}|0`;\\n      } else {\\n        return item;\\n      }\\n    });\\n  }\\n\\n  return {\\n    name: 'SQL',\\n    case_insensitive: true,\\n    // does not include {} or HTML tags `</`\\n    illegal: /[{}]|<\\\\//,\\n    keywords: {\\n      $pattern: /\\\\b[\\\\w\\\\.]+/,\\n      keyword:\\n        reduceRelevancy(KEYWORDS, { when: (x) => x.length < 3 }),\\n      literal: LITERALS,\\n      type: TYPES,\\n      built_in: POSSIBLE_WITHOUT_PARENS\\n    },\\n    contains: [\\n      {\\n        begin: regex.either(...COMBOS),\\n        relevance: 0,\\n        keywords: {\\n          $pattern: /[\\\\w\\\\.]+/,\\n          keyword: KEYWORDS.concat(COMBOS),\\n          literal: LITERALS,\\n          type: TYPES\\n        },\\n      },\\n      {\\n        className: \\\"type\\\",\\n        begin: regex.either(...MULTI_WORD_TYPES)\\n      },\\n      FUNCTION_CALL,\\n      VARIABLE,\\n      STRING,\\n      QUOTED_IDENTIFIER,\\n      hljs.C_NUMBER_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      COMMENT_MODE,\\n      OPERATOR\\n    ]\\n  };\\n}\\n\\nmodule.exports = sql;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/sql.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/stan.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/stan.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Stan\\nDescription: The Stan probabilistic programming language\\nAuthor: Sean Pinkney <sean.pinkney@gmail.com>\\nWebsite: http://mc-stan.org/\\nCategory: scientific\\n*/\\n\\nfunction stan(hljs) {\\n  const regex = hljs.regex;\\n  // variable names cannot conflict with block identifiers\\n  const BLOCKS = [\\n    'functions',\\n    'model',\\n    'data',\\n    'parameters',\\n    'quantities',\\n    'transformed',\\n    'generated'\\n  ];\\n\\n  const STATEMENTS = [\\n    'for',\\n    'in',\\n    'if',\\n    'else',\\n    'while',\\n    'break',\\n    'continue',\\n    'return'\\n  ];\\n\\n  const TYPES = [\\n    'array',\\n    'complex',\\n    'int',\\n    'real',\\n    'vector',\\n    'ordered',\\n    'positive_ordered',\\n    'simplex',\\n    'unit_vector',\\n    'row_vector',\\n    'matrix',\\n    'cholesky_factor_corr|10',\\n    'cholesky_factor_cov|10',\\n    'corr_matrix|10',\\n    'cov_matrix|10',\\n    'void'\\n  ];\\n\\n  // to get the functions list\\n  // clone the [stan-docs repo](https://github.com/stan-dev/docs)\\n  // then cd into it and run this bash script https://gist.github.com/joshgoebel/dcd33f82d4059a907c986049893843cf\\n  //\\n  // the output files are\\n  // distributions_quoted.txt\\n  // functions_quoted.txt\\n\\n  const FUNCTIONS = [\\n    'Phi',\\n    'Phi_approx',\\n    'abs',\\n    'acos',\\n    'acosh',\\n    'add_diag',\\n    'algebra_solver',\\n    'algebra_solver_newton',\\n    'append_array',\\n    'append_col',\\n    'append_row',\\n    'asin',\\n    'asinh',\\n    'atan',\\n    'atan2',\\n    'atanh',\\n    'bessel_first_kind',\\n    'bessel_second_kind',\\n    'binary_log_loss',\\n    'binomial_coefficient_log',\\n    'block',\\n    'cbrt',\\n    'ceil',\\n    'chol2inv',\\n    'cholesky_decompose',\\n    'choose',\\n    'col',\\n    'cols',\\n    'columns_dot_product',\\n    'columns_dot_self',\\n    'conj',\\n    'cos',\\n    'cosh',\\n    'cov_exp_quad',\\n    'crossprod',\\n    'csr_extract_u',\\n    'csr_extract_v',\\n    'csr_extract_w',\\n    'csr_matrix_times_vector',\\n    'csr_to_dense_matrix',\\n    'cumulative_sum',\\n    'determinant',\\n    'diag_matrix',\\n    'diag_post_multiply',\\n    'diag_pre_multiply',\\n    'diagonal',\\n    'digamma',\\n    'dims',\\n    'distance',\\n    'dot_product',\\n    'dot_self',\\n    'eigenvalues_sym',\\n    'eigenvectors_sym',\\n    'erf',\\n    'erfc',\\n    'exp',\\n    'exp2',\\n    'expm1',\\n    'fabs',\\n    'falling_factorial',\\n    'fdim',\\n    'floor',\\n    'fma',\\n    'fmax',\\n    'fmin',\\n    'fmod',\\n    'gamma_p',\\n    'gamma_q',\\n    'generalized_inverse',\\n    'get_imag',\\n    'get_lp',\\n    'get_real',\\n    'head',\\n    'hmm_hidden_state_prob',\\n    'hmm_marginal',\\n    'hypot',\\n    'identity_matrix',\\n    'inc_beta',\\n    'int_step',\\n    'integrate_1d',\\n    'integrate_ode',\\n    'integrate_ode_adams',\\n    'integrate_ode_bdf',\\n    'integrate_ode_rk45',\\n    'inv',\\n    'inv_Phi',\\n    'inv_cloglog',\\n    'inv_logit',\\n    'inv_sqrt',\\n    'inv_square',\\n    'inverse',\\n    'inverse_spd',\\n    'is_inf',\\n    'is_nan',\\n    'lambert_w0',\\n    'lambert_wm1',\\n    'lbeta',\\n    'lchoose',\\n    'ldexp',\\n    'lgamma',\\n    'linspaced_array',\\n    'linspaced_int_array',\\n    'linspaced_row_vector',\\n    'linspaced_vector',\\n    'lmgamma',\\n    'lmultiply',\\n    'log',\\n    'log1m',\\n    'log1m_exp',\\n    'log1m_inv_logit',\\n    'log1p',\\n    'log1p_exp',\\n    'log_determinant',\\n    'log_diff_exp',\\n    'log_falling_factorial',\\n    'log_inv_logit',\\n    'log_inv_logit_diff',\\n    'log_mix',\\n    'log_modified_bessel_first_kind',\\n    'log_rising_factorial',\\n    'log_softmax',\\n    'log_sum_exp',\\n    'logit',\\n    'machine_precision',\\n    'map_rect',\\n    'matrix_exp',\\n    'matrix_exp_multiply',\\n    'matrix_power',\\n    'max',\\n    'mdivide_left_spd',\\n    'mdivide_left_tri_low',\\n    'mdivide_right_spd',\\n    'mdivide_right_tri_low',\\n    'mean',\\n    'min',\\n    'modified_bessel_first_kind',\\n    'modified_bessel_second_kind',\\n    'multiply_log',\\n    'multiply_lower_tri_self_transpose',\\n    'negative_infinity',\\n    'norm',\\n    'not_a_number',\\n    'num_elements',\\n    'ode_adams',\\n    'ode_adams_tol',\\n    'ode_adjoint_tol_ctl',\\n    'ode_bdf',\\n    'ode_bdf_tol',\\n    'ode_ckrk',\\n    'ode_ckrk_tol',\\n    'ode_rk45',\\n    'ode_rk45_tol',\\n    'one_hot_array',\\n    'one_hot_int_array',\\n    'one_hot_row_vector',\\n    'one_hot_vector',\\n    'ones_array',\\n    'ones_int_array',\\n    'ones_row_vector',\\n    'ones_vector',\\n    'owens_t',\\n    'polar',\\n    'positive_infinity',\\n    'pow',\\n    'print',\\n    'prod',\\n    'proj',\\n    'qr_Q',\\n    'qr_R',\\n    'qr_thin_Q',\\n    'qr_thin_R',\\n    'quad_form',\\n    'quad_form_diag',\\n    'quad_form_sym',\\n    'quantile',\\n    'rank',\\n    'reduce_sum',\\n    'reject',\\n    'rep_array',\\n    'rep_matrix',\\n    'rep_row_vector',\\n    'rep_vector',\\n    'reverse',\\n    'rising_factorial',\\n    'round',\\n    'row',\\n    'rows',\\n    'rows_dot_product',\\n    'rows_dot_self',\\n    'scale_matrix_exp_multiply',\\n    'sd',\\n    'segment',\\n    'sin',\\n    'singular_values',\\n    'sinh',\\n    'size',\\n    'softmax',\\n    'sort_asc',\\n    'sort_desc',\\n    'sort_indices_asc',\\n    'sort_indices_desc',\\n    'sqrt',\\n    'square',\\n    'squared_distance',\\n    'step',\\n    'sub_col',\\n    'sub_row',\\n    'sum',\\n    'svd_U',\\n    'svd_V',\\n    'symmetrize_from_lower_tri',\\n    'tail',\\n    'tan',\\n    'tanh',\\n    'target',\\n    'tcrossprod',\\n    'tgamma',\\n    'to_array_1d',\\n    'to_array_2d',\\n    'to_complex',\\n    'to_matrix',\\n    'to_row_vector',\\n    'to_vector',\\n    'trace',\\n    'trace_gen_quad_form',\\n    'trace_quad_form',\\n    'trigamma',\\n    'trunc',\\n    'uniform_simplex',\\n    'variance',\\n    'zeros_array',\\n    'zeros_int_array',\\n    'zeros_row_vector'\\n  ];\\n\\n  const DISTRIBUTIONS = [\\n    'bernoulli',\\n    'bernoulli_logit',\\n    'bernoulli_logit_glm',\\n    'beta',\\n    'beta_binomial',\\n    'beta_proportion',\\n    'binomial',\\n    'binomial_logit',\\n    'categorical',\\n    'categorical_logit',\\n    'categorical_logit_glm',\\n    'cauchy',\\n    'chi_square',\\n    'dirichlet',\\n    'discrete_range',\\n    'double_exponential',\\n    'exp_mod_normal',\\n    'exponential',\\n    'frechet',\\n    'gamma',\\n    'gaussian_dlm_obs',\\n    'gumbel',\\n    'hmm_latent',\\n    'hypergeometric',\\n    'inv_chi_square',\\n    'inv_gamma',\\n    'inv_wishart',\\n    'lkj_corr',\\n    'lkj_corr_cholesky',\\n    'logistic',\\n    'lognormal',\\n    'multi_gp',\\n    'multi_gp_cholesky',\\n    'multi_normal',\\n    'multi_normal_cholesky',\\n    'multi_normal_prec',\\n    'multi_student_t',\\n    'multinomial',\\n    'multinomial_logit',\\n    'neg_binomial',\\n    'neg_binomial_2',\\n    'neg_binomial_2_log',\\n    'neg_binomial_2_log_glm',\\n    'normal',\\n    'normal_id_glm',\\n    'ordered_logistic',\\n    'ordered_logistic_glm',\\n    'ordered_probit',\\n    'pareto',\\n    'pareto_type_2',\\n    'poisson',\\n    'poisson_log',\\n    'poisson_log_glm',\\n    'rayleigh',\\n    'scaled_inv_chi_square',\\n    'skew_double_exponential',\\n    'skew_normal',\\n    'std_normal',\\n    'student_t',\\n    'uniform',\\n    'von_mises',\\n    'weibull',\\n    'wiener',\\n    'wishart'\\n  ];\\n\\n  const BLOCK_COMMENT = hljs.COMMENT(\\n    /\\\\/\\\\*/,\\n    /\\\\*\\\\//,\\n    {\\n      relevance: 0,\\n      contains: [\\n        {\\n          scope: 'doctag',\\n          match: /@(return|param)/\\n        }\\n      ]\\n    }\\n  );\\n\\n  const INCLUDE = {\\n    scope: 'meta',\\n    begin: /#include\\\\b/,\\n    end: /$/,\\n    contains: [\\n      {\\n        match: /[a-z][a-z-._]+/,\\n        scope: 'string'\\n      },\\n      hljs.C_LINE_COMMENT_MODE\\n    ]\\n  };\\n\\n  const RANGE_CONSTRAINTS = [\\n    \\\"lower\\\",\\n    \\\"upper\\\",\\n    \\\"offset\\\",\\n    \\\"multiplier\\\"\\n  ];\\n\\n  return {\\n    name: 'Stan',\\n    aliases: [ 'stanfuncs' ],\\n    keywords: {\\n      $pattern: hljs.IDENT_RE,\\n      title: BLOCKS,\\n      type: TYPES,\\n      keyword: STATEMENTS,\\n      built_in: FUNCTIONS\\n    },\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      INCLUDE,\\n      hljs.HASH_COMMENT_MODE,\\n      BLOCK_COMMENT,\\n      {\\n        scope: 'built_in',\\n        match: /\\\\s(pi|e|sqrt2|log2|log10)(?=\\\\()/,\\n        relevance: 0\\n      },\\n      {\\n        match: regex.concat(/[<,]\\\\s*/, regex.either(...RANGE_CONSTRAINTS), /\\\\s*=/),\\n        keywords: RANGE_CONSTRAINTS\\n      },\\n      {\\n        scope: 'keyword',\\n        match: /\\\\btarget(?=\\\\s*\\\\+=)/,\\n      },\\n      {\\n        // highlights the 'T' in T[,] for only Stan language distributrions\\n        match: [\\n          /~\\\\s*/,\\n          regex.either(...DISTRIBUTIONS),\\n          /(?:\\\\(\\\\))/,\\n          /\\\\s*T(?=\\\\s*\\\\[)/\\n        ],\\n        scope: {\\n          2: \\\"built_in\\\",\\n          4: \\\"keyword\\\"\\n        }\\n      },\\n      {\\n        // highlights distributions that end with special endings\\n        scope: 'built_in',\\n        keywords: DISTRIBUTIONS,\\n        begin: regex.concat(/\\\\w*/, regex.either(...DISTRIBUTIONS), /(_lpdf|_lupdf|_lpmf|_cdf|_lcdf|_lccdf|_qf)(?=\\\\s*[\\\\(.*\\\\)])/)\\n      },\\n      {\\n        // highlights distributions after ~\\n        begin: [\\n          /~/,\\n          /\\\\s*/,\\n          regex.concat(regex.either(...DISTRIBUTIONS), /(?=\\\\s*[\\\\(.*\\\\)])/)\\n        ],\\n        scope: { 3: \\\"built_in\\\" }\\n      },\\n      {\\n        // highlights user defined distributions after ~\\n        begin: [\\n          /~/,\\n          /\\\\s*\\\\w+(?=\\\\s*[\\\\(.*\\\\)])/,\\n          '(?!.*/\\\\b(' + regex.either(...DISTRIBUTIONS) + ')\\\\b)'\\n        ],\\n        scope: { 2: \\\"title.function\\\" }\\n      },\\n      {\\n        // highlights user defined distributions with special endings\\n        scope: 'title.function',\\n        begin: /\\\\w*(_lpdf|_lupdf|_lpmf|_cdf|_lcdf|_lccdf|_qf)(?=\\\\s*[\\\\(.*\\\\)])/\\n      },\\n      {\\n        scope: 'number',\\n        match: regex.concat(\\n          // Comes from @RunDevelopment accessed 11/29/2021 at\\n          // https://github.com/PrismJS/prism/blob/c53ad2e65b7193ab4f03a1797506a54bbb33d5a2/components/prism-stan.js#L56\\n\\n          // start of big noncapture group which\\n          // 1. gets numbers that are by themselves\\n          // 2. numbers that are separated by _\\n          // 3. numbers that are separted by .\\n          /(?:\\\\b\\\\d+(?:_\\\\d+)*(?:\\\\.(?:\\\\d+(?:_\\\\d+)*)?)?|\\\\B\\\\.\\\\d+(?:_\\\\d+)*)/,\\n          // grabs scientific notation\\n          // grabs complex numbers with i\\n          /(?:[eE][+-]?\\\\d+(?:_\\\\d+)*)?i?(?!\\\\w)/\\n        ),\\n        relevance: 0\\n      },\\n      {\\n        scope: 'string',\\n        begin: /\\\"/,\\n        end: /\\\"/\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = stan;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/stan.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/stata.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/stata.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Stata\\nAuthor: Brian Quistorff <bquistorff@gmail.com>\\nContributors: Drew McDonald <drewmcdo@gmail.com>\\nDescription: Stata is a general-purpose statistical software package created in 1985 by StataCorp.\\nWebsite: https://en.wikipedia.org/wiki/Stata\\nCategory: scientific\\n*/\\n\\n/*\\n  This is a fork and modification of Drew McDonald's file (https://github.com/drewmcdonald/stata-highlighting). I have also included a list of builtin commands from https://bugs.kde.org/show_bug.cgi?id=135646.\\n*/\\n\\nfunction stata(hljs) {\\n  return {\\n    name: 'Stata',\\n    aliases: [\\n      'do',\\n      'ado'\\n    ],\\n    case_insensitive: true,\\n    keywords: 'if else in foreach for forv forva forval forvalu forvalue forvalues by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm areg areg_p args arima arima_dr arima_estat arima_p as asmprobit asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser assert avplot avplot_7 avplots avplots_7 bcskew0 bgodfrey bias binreg bip0_lf biplot bipp_lf bipr_lf bipr_p biprobit bitest bitesti bitowt blogit bmemsize boot bootsamp bootstrap bootstrap_8 boxco_l boxco_p boxcox boxcox_6 boxcox_p bprobit br break brier bro brow brows browse brr brrstat bs bs_7 bsampl_w bsample bsample_7 bsqreg bstat bstat_7 bstat_8 bstrap bstrap_7 bubble bubbleplot ca ca_estat ca_p cabiplot camat canon canon_8 canon_8_p canon_estat canon_p cap caprojection capt captu captur capture cat cc cchart cchart_7 cci cd censobs_table centile cf char chdir checkdlgfiles checkestimationsample checkhlpfiles checksum chelp ci cii cl class classutil clear cli clis clist clo clog clog_lf clog_p clogi clogi_sw clogit clogit_lf clogit_p clogitp clogl_sw cloglog clonevar clslistarray cluster cluster_measures cluster_stop cluster_tree cluster_tree_8 clustermat cmdlog cnr cnre cnreg cnreg_p cnreg_sw cnsreg codebook collaps4 collapse colormult_nb colormult_nw compare compress conf confi confir confirm conren cons const constr constra constrai constrain constraint continue contract copy copyright copysource cor corc corr corr2data corr_anti corr_kmo corr_smc corre correl correla correlat correlate corrgram cou coun count cox cox_p cox_sw coxbase coxhaz coxvar cprplot cprplot_7 crc cret cretu cretur creturn cross cs cscript cscript_log csi ct ct_is ctset ctst_5 ctst_st cttost cumsp cumsp_7 cumul cusum cusum_7 cutil d|0 datasig datasign datasigna datasignat datasignatu datasignatur datasignature datetof db dbeta de dec deco decod decode deff des desc descr descri describ describe destring dfbeta dfgls dfuller di di_g dir dirstats dis discard disp disp_res disp_s displ displa display distinct do doe doed doedi doedit dotplot dotplot_7 dprobit drawnorm drop ds ds_util dstdize duplicates durbina dwstat dydx e|0 ed edi edit egen eivreg emdef en enc enco encod encode eq erase ereg ereg_lf ereg_p ereg_sw ereghet ereghet_glf ereghet_glf_sh ereghet_gp ereghet_ilf ereghet_ilf_sh ereghet_ip eret eretu eretur ereturn err erro error esize est est_cfexist est_cfname est_clickable est_expand est_hold est_table est_unhold est_unholdok estat estat_default estat_summ estat_vce_only esti estimates etodow etof etomdy ex exi exit expand expandcl fac fact facto factor factor_estat factor_p factor_pca_rotated factor_rotate factormat fcast fcast_compute fcast_graph fdades fdadesc fdadescr fdadescri fdadescrib fdadescribe fdasav fdasave fdause fh_st file open file read file close file filefilter fillin find_hlp_file findfile findit findit_7 fit fl fli flis flist for5_0 forest forestplot form forma format fpredict frac_154 frac_adj frac_chk frac_cox frac_ddp frac_dis frac_dv frac_in frac_mun frac_pp frac_pq frac_pv frac_wgt frac_xo fracgen fracplot fracplot_7 fracpoly fracpred fron_ex fron_hn fron_p fron_tn fron_tn2 frontier ftodate ftoe ftomdy ftowdate funnel funnelplot g|0 gamhet_glf gamhet_gp gamhet_ilf gamhet_ip gamma gamma_d2 gamma_p gamma_sw gammahet gdi_hexagon gdi_spokes ge gen gene gener genera generat generate genrank genstd genvmean gettoken gl gladder gladder_7 glim_l01 glim_l02 glim_l03 glim_l04 glim_l05 glim_l06 glim_l07 glim_l08 glim_l09 glim_l10 glim_l11 glim_l12 glim_lf glim_mu glim_nw1 glim_nw2 glim_nw3 glim_p glim_v1 glim_v2 glim_v3 glim_v4 glim_v5 glim_v6 glim_v7 glm glm_6 glm_p glm_sw glmpred glo glob globa global glogit glogit_8 glogit_p gmeans gnbre_lf gnbreg gnbreg_5 gnbreg_p gomp_lf gompe_sw gomper_p gompertz gompertzhet gomphet_glf gomphet_glf_sh gomphet_gp gomphet_ilf gomphet_ilf_sh gomphet_ip gphdot gphpen gphprint gprefs gprobi_p gprobit gprobit_8 gr gr7 gr_copy gr_current gr_db gr_describe gr_dir gr_draw gr_draw_replay gr_drop gr_edit gr_editviewopts gr_example gr_example2 gr_export gr_print gr_qscheme gr_query gr_read gr_rename gr_replay gr_save gr_set gr_setscheme gr_table gr_undo gr_use graph graph7 grebar greigen greigen_7 greigen_8 grmeanby grmeanby_7 gs_fileinfo gs_filetype gs_graphinfo gs_stat gsort gwood h|0 hadimvo hareg hausman haver he heck_d2 heckma_p heckman heckp_lf heckpr_p heckprob hel help hereg hetpr_lf hetpr_p hetprob hettest hexdump hilite hist hist_7 histogram hlogit hlu hmeans hotel hotelling hprobit hreg hsearch icd9 icd9_ff icd9p iis impute imtest inbase include inf infi infil infile infix inp inpu input ins insheet insp inspe inspec inspect integ inten intreg intreg_7 intreg_p intrg2_ll intrg_ll intrg_ll2 ipolate iqreg ir irf irf_create irfm iri is_svy is_svysum isid istdize ivprob_1_lf ivprob_lf ivprobit ivprobit_p ivreg ivreg_footnote ivtob_1_lf ivtob_lf ivtobit ivtobit_p jackknife jacknife jknife jknife_6 jknife_8 jkstat joinby kalarma1 kap kap_3 kapmeier kappa kapwgt kdensity kdensity_7 keep ksm ksmirnov ktau kwallis l|0 la lab labbe labbeplot labe label labelbook ladder levels levelsof leverage lfit lfit_p li lincom line linktest lis list lloghet_glf lloghet_glf_sh lloghet_gp lloghet_ilf lloghet_ilf_sh lloghet_ip llogi_sw llogis_p llogist llogistic llogistichet lnorm_lf lnorm_sw lnorma_p lnormal lnormalhet lnormhet_glf lnormhet_glf_sh lnormhet_gp lnormhet_ilf lnormhet_ilf_sh lnormhet_ip lnskew0 loadingplot loc loca local log logi logis_lf logistic logistic_p logit logit_estat logit_p loglogs logrank loneway lookfor lookup lowess lowess_7 lpredict lrecomp lroc lroc_7 lrtest ls lsens lsens_7 lsens_x lstat ltable ltable_7 ltriang lv lvr2plot lvr2plot_7 m|0 ma mac macr macro makecns man manova manova_estat manova_p manovatest mantel mark markin markout marksample mat mat_capp mat_order mat_put_rr mat_rapp mata mata_clear mata_describe mata_drop mata_matdescribe mata_matsave mata_matuse mata_memory mata_mlib mata_mosave mata_rename mata_which matalabel matcproc matlist matname matr matri matrix matrix_input__dlg matstrik mcc mcci md0_ md1_ md1debug_ md2_ md2debug_ mds mds_estat mds_p mdsconfig mdslong mdsmat mdsshepard mdytoe mdytof me_derd mean means median memory memsize menl meqparse mer merg merge meta mfp mfx mhelp mhodds minbound mixed_ll mixed_ll_reparm mkassert mkdir mkmat mkspline ml ml_5 ml_adjs ml_bhhhs ml_c_d ml_check ml_clear ml_cnt ml_debug ml_defd ml_e0 ml_e0_bfgs ml_e0_cycle ml_e0_dfp ml_e0i ml_e1 ml_e1_bfgs ml_e1_bhhh ml_e1_cycle ml_e1_dfp ml_e2 ml_e2_cycle ml_ebfg0 ml_ebfr0 ml_ebfr1 ml_ebh0q ml_ebhh0 ml_ebhr0 ml_ebr0i ml_ecr0i ml_edfp0 ml_edfr0 ml_edfr1 ml_edr0i ml_eds ml_eer0i ml_egr0i ml_elf ml_elf_bfgs ml_elf_bhhh ml_elf_cycle ml_elf_dfp ml_elfi ml_elfs ml_enr0i ml_enrr0 ml_erdu0 ml_erdu0_bfgs ml_erdu0_bhhh ml_erdu0_bhhhq ml_erdu0_cycle ml_erdu0_dfp ml_erdu0_nrbfgs ml_exde ml_footnote ml_geqnr ml_grad0 ml_graph ml_hbhhh ml_hd0 ml_hold ml_init ml_inv ml_log ml_max ml_mlout ml_mlout_8 ml_model ml_nb0 ml_opt ml_p ml_plot ml_query ml_rdgrd ml_repor ml_s_e ml_score ml_searc ml_technique ml_unhold mleval mlf_ mlmatbysum mlmatsum mlog mlogi mlogit mlogit_footnote mlogit_p mlopts mlsum mlvecsum mnl0_ mor more mov move mprobit mprobit_lf mprobit_p mrdu0_ mrdu1_ mvdecode mvencode mvreg mvreg_estat n|0 nbreg nbreg_al nbreg_lf nbreg_p nbreg_sw nestreg net newey newey_7 newey_p news nl nl_7 nl_9 nl_9_p nl_p nl_p_7 nlcom nlcom_p nlexp2 nlexp2_7 nlexp2a nlexp2a_7 nlexp3 nlexp3_7 nlgom3 nlgom3_7 nlgom4 nlgom4_7 nlinit nllog3 nllog3_7 nllog4 nllog4_7 nlog_rd nlogit nlogit_p nlogitgen nlogittree nlpred no nobreak noi nois noisi noisil noisily note notes notes_dlg nptrend numlabel numlist odbc old_ver olo olog ologi ologi_sw ologit ologit_p ologitp on one onew onewa oneway op_colnm op_comp op_diff op_inv op_str opr opro oprob oprob_sw oprobi oprobi_p oprobit oprobitp opts_exclusive order orthog orthpoly ou out outf outfi outfil outfile outs outsh outshe outshee outsheet ovtest pac pac_7 palette parse parse_dissim pause pca pca_8 pca_display pca_estat pca_p pca_rotate pcamat pchart pchart_7 pchi pchi_7 pcorr pctile pentium pergram pergram_7 permute permute_8 personal peto_st pkcollapse pkcross pkequiv pkexamine pkexamine_7 pkshape pksumm pksumm_7 pl plo plot plugin pnorm pnorm_7 poisgof poiss_lf poiss_sw poisso_p poisson poisson_estat post postclose postfile postutil pperron pr prais prais_e prais_e2 prais_p predict predictnl preserve print pro prob probi probit probit_estat probit_p proc_time procoverlay procrustes procrustes_estat procrustes_p profiler prog progr progra program prop proportion prtest prtesti pwcorr pwd q\\\\\\\\s qby qbys qchi qchi_7 qladder qladder_7 qnorm qnorm_7 qqplot qqplot_7 qreg qreg_c qreg_p qreg_sw qu quadchk quantile quantile_7 que quer query range ranksum ratio rchart rchart_7 rcof recast reclink recode reg reg3 reg3_p regdw regr regre regre_p2 regres regres_p regress regress_estat regriv_p remap ren rena renam rename renpfix repeat replace report reshape restore ret retu retur return rm rmdir robvar roccomp roccomp_7 roccomp_8 rocf_lf rocfit rocfit_8 rocgold rocplot rocplot_7 roctab roctab_7 rolling rologit rologit_p rot rota rotat rotate rotatemat rreg rreg_p ru run runtest rvfplot rvfplot_7 rvpplot rvpplot_7 sa safesum sample sampsi sav save savedresults saveold sc sca scal scala scalar scatter scm_mine sco scob_lf scob_p scobi_sw scobit scor score scoreplot scoreplot_help scree screeplot screeplot_help sdtest sdtesti se search separate seperate serrbar serrbar_7 serset set set_defaults sfrancia sh she shel shell shewhart shewhart_7 signestimationsample signrank signtest simul simul_7 simulate simulate_8 sktest sleep slogit slogit_d2 slogit_p smooth snapspan so sor sort spearman spikeplot spikeplot_7 spikeplt spline_x split sqreg sqreg_p sret sretu sretur sreturn ssc st st_ct st_hc st_hcd st_hcd_sh st_is st_issys st_note st_promo st_set st_show st_smpl st_subid stack statsby statsby_8 stbase stci stci_7 stcox stcox_estat stcox_fr stcox_fr_ll stcox_p stcox_sw stcoxkm stcoxkm_7 stcstat stcurv stcurve stcurve_7 stdes stem stepwise stereg stfill stgen stir stjoin stmc stmh stphplot stphplot_7 stphtest stphtest_7 stptime strate strate_7 streg streg_sw streset sts sts_7 stset stsplit stsum sttocc sttoct stvary stweib su suest suest_8 sum summ summa summar summari summariz summarize sunflower sureg survcurv survsum svar svar_p svmat svy svy_disp svy_dreg svy_est svy_est_7 svy_estat svy_get svy_gnbreg_p svy_head svy_header svy_heckman_p svy_heckprob_p svy_intreg_p svy_ivreg_p svy_logistic_p svy_logit_p svy_mlogit_p svy_nbreg_p svy_ologit_p svy_oprobit_p svy_poisson_p svy_probit_p svy_regress_p svy_sub svy_sub_7 svy_x svy_x_7 svy_x_p svydes svydes_8 svygen svygnbreg svyheckman svyheckprob svyintreg svyintreg_7 svyintrg svyivreg svylc svylog_p svylogit svymarkout svymarkout_8 svymean svymlog svymlogit svynbreg svyolog svyologit svyoprob svyoprobit svyopts svypois svypois_7 svypoisson svyprobit svyprobt svyprop svyprop_7 svyratio svyreg svyreg_p svyregress svyset svyset_7 svyset_8 svytab svytab_7 svytest svytotal sw sw_8 swcnreg swcox swereg swilk swlogis swlogit swologit swoprbt swpois swprobit swqreg swtobit swweib symmetry symmi symplot symplot_7 syntax sysdescribe sysdir sysuse szroeter ta tab tab1 tab2 tab_or tabd tabdi tabdis tabdisp tabi table tabodds tabodds_7 tabstat tabu tabul tabula tabulat tabulate te tempfile tempname tempvar tes test testnl testparm teststd tetrachoric time_it timer tis tob tobi tobit tobit_p tobit_sw token tokeni tokeniz tokenize tostring total translate translator transmap treat_ll treatr_p treatreg trim trimfill trnb_cons trnb_mean trpoiss_d2 trunc_ll truncr_p truncreg tsappend tset tsfill tsline tsline_ex tsreport tsrevar tsrline tsset tssmooth tsunab ttest ttesti tut_chk tut_wait tutorial tw tware_st two twoway twoway__fpfit_serset twoway__function_gen twoway__histogram_gen twoway__ipoint_serset twoway__ipoints_serset twoway__kdensity_gen twoway__lfit_serset twoway__normgen_gen twoway__pci_serset twoway__qfit_serset twoway__scatteri_serset twoway__sunflower_gen twoway_ksm_serset ty typ type typeof u|0 unab unabbrev unabcmd update us use uselabel var var_mkcompanion var_p varbasic varfcast vargranger varirf varirf_add varirf_cgraph varirf_create varirf_ctable varirf_describe varirf_dir varirf_drop varirf_erase varirf_graph varirf_ograph varirf_rename varirf_set varirf_table varlist varlmar varnorm varsoc varstable varstable_w varstable_w2 varwle vce vec vec_fevd vec_mkphi vec_p vec_p_w vecirf_create veclmar veclmar_w vecnorm vecnorm_w vecrank vecstable verinst vers versi versio version view viewsource vif vwls wdatetof webdescribe webseek webuse weib1_lf weib2_lf weib_lf weib_lf0 weibhet_glf weibhet_glf_sh weibhet_glfa weibhet_glfa_sh weibhet_gp weibhet_ilf weibhet_ilf_sh weibhet_ilfa weibhet_ilfa_sh weibhet_ip weibu_sw weibul_p weibull weibull_c weibull_s weibullhet wh whelp whi which whil while wilc_st wilcoxon win wind windo window winexec wntestb wntestb_7 wntestq xchart xchart_7 xcorr xcorr_7 xi xi_6 xmlsav xmlsave xmluse xpose xsh xshe xshel xshell xt_iis xt_tis xtab_p xtabond xtbin_p xtclog xtcloglog xtcloglog_8 xtcloglog_d2 xtcloglog_pa_p xtcloglog_re_p xtcnt_p xtcorr xtdata xtdes xtfront_p xtfrontier xtgee xtgee_elink xtgee_estat xtgee_makeivar xtgee_p xtgee_plink xtgls xtgls_p xthaus xthausman xtht_p xthtaylor xtile xtint_p xtintreg xtintreg_8 xtintreg_d2 xtintreg_p xtivp_1 xtivp_2 xtivreg xtline xtline_ex xtlogit xtlogit_8 xtlogit_d2 xtlogit_fe_p xtlogit_pa_p xtlogit_re_p xtmixed xtmixed_estat xtmixed_p xtnb_fe xtnb_lf xtnbreg xtnbreg_pa_p xtnbreg_refe_p xtpcse xtpcse_p xtpois xtpoisson xtpoisson_d2 xtpoisson_pa_p xtpoisson_refe_p xtpred xtprobit xtprobit_8 xtprobit_d2 xtprobit_re_p xtps_fe xtps_lf xtps_ren xtps_ren_8 xtrar_p xtrc xtrc_p xtrchh xtrefe_p xtreg xtreg_be xtreg_fe xtreg_ml xtreg_pa_p xtreg_re xtregar xtrere_p xtset xtsf_ll xtsf_llti xtsum xttab xttest0 xttobit xttobit_8 xttobit_p xttrans yx yxview__barlike_draw yxview_area_draw yxview_bar_draw yxview_dot_draw yxview_dropline_draw yxview_function_draw yxview_iarrow_draw yxview_ilabels_draw yxview_normal_draw yxview_pcarrow_draw yxview_pcbarrow_draw yxview_pccapsym_draw yxview_pcscatter_draw yxview_pcspike_draw yxview_rarea_draw yxview_rbar_draw yxview_rbarm_draw yxview_rcap_draw yxview_rcapsym_draw yxview_rconnected_draw yxview_rline_draw yxview_rscatter_draw yxview_rspike_draw yxview_spike_draw yxview_sunflower_draw zap_s zinb zinb_llf zinb_plf zip zip_llf zip_p zip_plf zt_ct_5 zt_hc_5 zt_hcd_5 zt_is_5 zt_iss_5 zt_sho_5 zt_smp_5 ztbase_5 ztcox_5 ztdes_5 ztereg_5 ztfill_5 ztgen_5 ztir_5 ztjoin_5 ztnb ztnb_p ztp ztp_p zts_5 ztset_5 ztspli_5 ztsum_5 zttoct_5 ztvary_5 ztweib_5',\\n    contains: [\\n      {\\n        className: 'symbol',\\n        begin: /`[a-zA-Z0-9_]+'/\\n      },\\n      {\\n        className: 'variable',\\n        begin: /\\\\$\\\\{?[a-zA-Z0-9_]+\\\\}?/,\\n        relevance: 0\\n      },\\n      {\\n        className: 'string',\\n        variants: [\\n          { begin: '`\\\"[^\\\\r\\\\n]*?\\\"\\\\'' },\\n          { begin: '\\\"[^\\\\r\\\\n\\\"]*\\\"' }\\n        ]\\n      },\\n\\n      {\\n        className: 'built_in',\\n        variants: [ { begin: '\\\\\\\\b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?=\\\\\\\\()' } ]\\n      },\\n\\n      hljs.COMMENT('^[ \\\\t]*\\\\\\\\*.*$', false),\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = stata;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/stata.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/step21.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/step21.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: STEP Part 21\\nContributors: Adam Joseph Cook <adam.joseph.cook@gmail.com>\\nDescription: Syntax highlighter for STEP Part 21 files (ISO 10303-21).\\nWebsite: https://en.wikipedia.org/wiki/ISO_10303-21\\n*/\\n\\nfunction step21(hljs) {\\n  const STEP21_IDENT_RE = '[A-Z_][A-Z0-9_.]*';\\n  const STEP21_KEYWORDS = {\\n    $pattern: STEP21_IDENT_RE,\\n    keyword: [\\n      \\\"HEADER\\\",\\n      \\\"ENDSEC\\\",\\n      \\\"DATA\\\"\\n    ]\\n  };\\n  const STEP21_START = {\\n    className: 'meta',\\n    begin: 'ISO-10303-21;',\\n    relevance: 10\\n  };\\n  const STEP21_CLOSE = {\\n    className: 'meta',\\n    begin: 'END-ISO-10303-21;',\\n    relevance: 10\\n  };\\n\\n  return {\\n    name: 'STEP Part 21',\\n    aliases: [\\n      'p21',\\n      'step',\\n      'stp'\\n    ],\\n    case_insensitive: true, // STEP 21 is case insensitive in theory, in practice all non-comments are capitalized.\\n    keywords: STEP21_KEYWORDS,\\n    contains: [\\n      STEP21_START,\\n      STEP21_CLOSE,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.COMMENT('/\\\\\\\\*\\\\\\\\*!', '\\\\\\\\*/'),\\n      hljs.C_NUMBER_MODE,\\n      hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }),\\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),\\n      {\\n        className: 'string',\\n        begin: \\\"'\\\",\\n        end: \\\"'\\\"\\n      },\\n      {\\n        className: 'symbol',\\n        variants: [\\n          {\\n            begin: '#',\\n            end: '\\\\\\\\d+',\\n            illegal: '\\\\\\\\W'\\n          }\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = step21;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/step21.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/stylus.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/stylus.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"const MODES = (hljs) => {\\n  return {\\n    IMPORTANT: {\\n      scope: 'meta',\\n      begin: '!important'\\n    },\\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\\n    HEXCOLOR: {\\n      scope: 'number',\\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\\\b/\\n    },\\n    FUNCTION_DISPATCH: {\\n      className: \\\"built_in\\\",\\n      begin: /[\\\\w-]+(?=\\\\()/\\n    },\\n    ATTRIBUTE_SELECTOR_MODE: {\\n      scope: 'selector-attr',\\n      begin: /\\\\[/,\\n      end: /\\\\]/,\\n      illegal: '$',\\n      contains: [\\n        hljs.APOS_STRING_MODE,\\n        hljs.QUOTE_STRING_MODE\\n      ]\\n    },\\n    CSS_NUMBER_MODE: {\\n      scope: 'number',\\n      begin: hljs.NUMBER_RE + '(' +\\n        '%|em|ex|ch|rem' +\\n        '|vw|vh|vmin|vmax' +\\n        '|cm|mm|in|pt|pc|px' +\\n        '|deg|grad|rad|turn' +\\n        '|s|ms' +\\n        '|Hz|kHz' +\\n        '|dpi|dpcm|dppx' +\\n        ')?',\\n      relevance: 0\\n    },\\n    CSS_VARIABLE: {\\n      className: \\\"attr\\\",\\n      begin: /--[A-Za-z][A-Za-z0-9_-]*/\\n    }\\n  };\\n};\\n\\nconst TAGS = [\\n  'a',\\n  'abbr',\\n  'address',\\n  'article',\\n  'aside',\\n  'audio',\\n  'b',\\n  'blockquote',\\n  'body',\\n  'button',\\n  'canvas',\\n  'caption',\\n  'cite',\\n  'code',\\n  'dd',\\n  'del',\\n  'details',\\n  'dfn',\\n  'div',\\n  'dl',\\n  'dt',\\n  'em',\\n  'fieldset',\\n  'figcaption',\\n  'figure',\\n  'footer',\\n  'form',\\n  'h1',\\n  'h2',\\n  'h3',\\n  'h4',\\n  'h5',\\n  'h6',\\n  'header',\\n  'hgroup',\\n  'html',\\n  'i',\\n  'iframe',\\n  'img',\\n  'input',\\n  'ins',\\n  'kbd',\\n  'label',\\n  'legend',\\n  'li',\\n  'main',\\n  'mark',\\n  'menu',\\n  'nav',\\n  'object',\\n  'ol',\\n  'p',\\n  'q',\\n  'quote',\\n  'samp',\\n  'section',\\n  'span',\\n  'strong',\\n  'summary',\\n  'sup',\\n  'table',\\n  'tbody',\\n  'td',\\n  'textarea',\\n  'tfoot',\\n  'th',\\n  'thead',\\n  'time',\\n  'tr',\\n  'ul',\\n  'var',\\n  'video'\\n];\\n\\nconst MEDIA_FEATURES = [\\n  'any-hover',\\n  'any-pointer',\\n  'aspect-ratio',\\n  'color',\\n  'color-gamut',\\n  'color-index',\\n  'device-aspect-ratio',\\n  'device-height',\\n  'device-width',\\n  'display-mode',\\n  'forced-colors',\\n  'grid',\\n  'height',\\n  'hover',\\n  'inverted-colors',\\n  'monochrome',\\n  'orientation',\\n  'overflow-block',\\n  'overflow-inline',\\n  'pointer',\\n  'prefers-color-scheme',\\n  'prefers-contrast',\\n  'prefers-reduced-motion',\\n  'prefers-reduced-transparency',\\n  'resolution',\\n  'scan',\\n  'scripting',\\n  'update',\\n  'width',\\n  // TODO: find a better solution?\\n  'min-width',\\n  'max-width',\\n  'min-height',\\n  'max-height'\\n];\\n\\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\\nconst PSEUDO_CLASSES = [\\n  'active',\\n  'any-link',\\n  'blank',\\n  'checked',\\n  'current',\\n  'default',\\n  'defined',\\n  'dir', // dir()\\n  'disabled',\\n  'drop',\\n  'empty',\\n  'enabled',\\n  'first',\\n  'first-child',\\n  'first-of-type',\\n  'fullscreen',\\n  'future',\\n  'focus',\\n  'focus-visible',\\n  'focus-within',\\n  'has', // has()\\n  'host', // host or host()\\n  'host-context', // host-context()\\n  'hover',\\n  'indeterminate',\\n  'in-range',\\n  'invalid',\\n  'is', // is()\\n  'lang', // lang()\\n  'last-child',\\n  'last-of-type',\\n  'left',\\n  'link',\\n  'local-link',\\n  'not', // not()\\n  'nth-child', // nth-child()\\n  'nth-col', // nth-col()\\n  'nth-last-child', // nth-last-child()\\n  'nth-last-col', // nth-last-col()\\n  'nth-last-of-type', //nth-last-of-type()\\n  'nth-of-type', //nth-of-type()\\n  'only-child',\\n  'only-of-type',\\n  'optional',\\n  'out-of-range',\\n  'past',\\n  'placeholder-shown',\\n  'read-only',\\n  'read-write',\\n  'required',\\n  'right',\\n  'root',\\n  'scope',\\n  'target',\\n  'target-within',\\n  'user-invalid',\\n  'valid',\\n  'visited',\\n  'where' // where()\\n];\\n\\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\\nconst PSEUDO_ELEMENTS = [\\n  'after',\\n  'backdrop',\\n  'before',\\n  'cue',\\n  'cue-region',\\n  'first-letter',\\n  'first-line',\\n  'grammar-error',\\n  'marker',\\n  'part',\\n  'placeholder',\\n  'selection',\\n  'slotted',\\n  'spelling-error'\\n];\\n\\nconst ATTRIBUTES = [\\n  'align-content',\\n  'align-items',\\n  'align-self',\\n  'all',\\n  'animation',\\n  'animation-delay',\\n  'animation-direction',\\n  'animation-duration',\\n  'animation-fill-mode',\\n  'animation-iteration-count',\\n  'animation-name',\\n  'animation-play-state',\\n  'animation-timing-function',\\n  'backface-visibility',\\n  'background',\\n  'background-attachment',\\n  'background-blend-mode',\\n  'background-clip',\\n  'background-color',\\n  'background-image',\\n  'background-origin',\\n  'background-position',\\n  'background-repeat',\\n  'background-size',\\n  'block-size',\\n  'border',\\n  'border-block',\\n  'border-block-color',\\n  'border-block-end',\\n  'border-block-end-color',\\n  'border-block-end-style',\\n  'border-block-end-width',\\n  'border-block-start',\\n  'border-block-start-color',\\n  'border-block-start-style',\\n  'border-block-start-width',\\n  'border-block-style',\\n  'border-block-width',\\n  'border-bottom',\\n  'border-bottom-color',\\n  'border-bottom-left-radius',\\n  'border-bottom-right-radius',\\n  'border-bottom-style',\\n  'border-bottom-width',\\n  'border-collapse',\\n  'border-color',\\n  'border-image',\\n  'border-image-outset',\\n  'border-image-repeat',\\n  'border-image-slice',\\n  'border-image-source',\\n  'border-image-width',\\n  'border-inline',\\n  'border-inline-color',\\n  'border-inline-end',\\n  'border-inline-end-color',\\n  'border-inline-end-style',\\n  'border-inline-end-width',\\n  'border-inline-start',\\n  'border-inline-start-color',\\n  'border-inline-start-style',\\n  'border-inline-start-width',\\n  'border-inline-style',\\n  'border-inline-width',\\n  'border-left',\\n  'border-left-color',\\n  'border-left-style',\\n  'border-left-width',\\n  'border-radius',\\n  'border-right',\\n  'border-right-color',\\n  'border-right-style',\\n  'border-right-width',\\n  'border-spacing',\\n  'border-style',\\n  'border-top',\\n  'border-top-color',\\n  'border-top-left-radius',\\n  'border-top-right-radius',\\n  'border-top-style',\\n  'border-top-width',\\n  'border-width',\\n  'bottom',\\n  'box-decoration-break',\\n  'box-shadow',\\n  'box-sizing',\\n  'break-after',\\n  'break-before',\\n  'break-inside',\\n  'caption-side',\\n  'caret-color',\\n  'clear',\\n  'clip',\\n  'clip-path',\\n  'clip-rule',\\n  'color',\\n  'column-count',\\n  'column-fill',\\n  'column-gap',\\n  'column-rule',\\n  'column-rule-color',\\n  'column-rule-style',\\n  'column-rule-width',\\n  'column-span',\\n  'column-width',\\n  'columns',\\n  'contain',\\n  'content',\\n  'content-visibility',\\n  'counter-increment',\\n  'counter-reset',\\n  'cue',\\n  'cue-after',\\n  'cue-before',\\n  'cursor',\\n  'direction',\\n  'display',\\n  'empty-cells',\\n  'filter',\\n  'flex',\\n  'flex-basis',\\n  'flex-direction',\\n  'flex-flow',\\n  'flex-grow',\\n  'flex-shrink',\\n  'flex-wrap',\\n  'float',\\n  'flow',\\n  'font',\\n  'font-display',\\n  'font-family',\\n  'font-feature-settings',\\n  'font-kerning',\\n  'font-language-override',\\n  'font-size',\\n  'font-size-adjust',\\n  'font-smoothing',\\n  'font-stretch',\\n  'font-style',\\n  'font-synthesis',\\n  'font-variant',\\n  'font-variant-caps',\\n  'font-variant-east-asian',\\n  'font-variant-ligatures',\\n  'font-variant-numeric',\\n  'font-variant-position',\\n  'font-variation-settings',\\n  'font-weight',\\n  'gap',\\n  'glyph-orientation-vertical',\\n  'grid',\\n  'grid-area',\\n  'grid-auto-columns',\\n  'grid-auto-flow',\\n  'grid-auto-rows',\\n  'grid-column',\\n  'grid-column-end',\\n  'grid-column-start',\\n  'grid-gap',\\n  'grid-row',\\n  'grid-row-end',\\n  'grid-row-start',\\n  'grid-template',\\n  'grid-template-areas',\\n  'grid-template-columns',\\n  'grid-template-rows',\\n  'hanging-punctuation',\\n  'height',\\n  'hyphens',\\n  'icon',\\n  'image-orientation',\\n  'image-rendering',\\n  'image-resolution',\\n  'ime-mode',\\n  'inline-size',\\n  'isolation',\\n  'justify-content',\\n  'left',\\n  'letter-spacing',\\n  'line-break',\\n  'line-height',\\n  'list-style',\\n  'list-style-image',\\n  'list-style-position',\\n  'list-style-type',\\n  'margin',\\n  'margin-block',\\n  'margin-block-end',\\n  'margin-block-start',\\n  'margin-bottom',\\n  'margin-inline',\\n  'margin-inline-end',\\n  'margin-inline-start',\\n  'margin-left',\\n  'margin-right',\\n  'margin-top',\\n  'marks',\\n  'mask',\\n  'mask-border',\\n  'mask-border-mode',\\n  'mask-border-outset',\\n  'mask-border-repeat',\\n  'mask-border-slice',\\n  'mask-border-source',\\n  'mask-border-width',\\n  'mask-clip',\\n  'mask-composite',\\n  'mask-image',\\n  'mask-mode',\\n  'mask-origin',\\n  'mask-position',\\n  'mask-repeat',\\n  'mask-size',\\n  'mask-type',\\n  'max-block-size',\\n  'max-height',\\n  'max-inline-size',\\n  'max-width',\\n  'min-block-size',\\n  'min-height',\\n  'min-inline-size',\\n  'min-width',\\n  'mix-blend-mode',\\n  'nav-down',\\n  'nav-index',\\n  'nav-left',\\n  'nav-right',\\n  'nav-up',\\n  'none',\\n  'normal',\\n  'object-fit',\\n  'object-position',\\n  'opacity',\\n  'order',\\n  'orphans',\\n  'outline',\\n  'outline-color',\\n  'outline-offset',\\n  'outline-style',\\n  'outline-width',\\n  'overflow',\\n  'overflow-wrap',\\n  'overflow-x',\\n  'overflow-y',\\n  'padding',\\n  'padding-block',\\n  'padding-block-end',\\n  'padding-block-start',\\n  'padding-bottom',\\n  'padding-inline',\\n  'padding-inline-end',\\n  'padding-inline-start',\\n  'padding-left',\\n  'padding-right',\\n  'padding-top',\\n  'page-break-after',\\n  'page-break-before',\\n  'page-break-inside',\\n  'pause',\\n  'pause-after',\\n  'pause-before',\\n  'perspective',\\n  'perspective-origin',\\n  'pointer-events',\\n  'position',\\n  'quotes',\\n  'resize',\\n  'rest',\\n  'rest-after',\\n  'rest-before',\\n  'right',\\n  'row-gap',\\n  'scroll-margin',\\n  'scroll-margin-block',\\n  'scroll-margin-block-end',\\n  'scroll-margin-block-start',\\n  'scroll-margin-bottom',\\n  'scroll-margin-inline',\\n  'scroll-margin-inline-end',\\n  'scroll-margin-inline-start',\\n  'scroll-margin-left',\\n  'scroll-margin-right',\\n  'scroll-margin-top',\\n  'scroll-padding',\\n  'scroll-padding-block',\\n  'scroll-padding-block-end',\\n  'scroll-padding-block-start',\\n  'scroll-padding-bottom',\\n  'scroll-padding-inline',\\n  'scroll-padding-inline-end',\\n  'scroll-padding-inline-start',\\n  'scroll-padding-left',\\n  'scroll-padding-right',\\n  'scroll-padding-top',\\n  'scroll-snap-align',\\n  'scroll-snap-stop',\\n  'scroll-snap-type',\\n  'scrollbar-color',\\n  'scrollbar-gutter',\\n  'scrollbar-width',\\n  'shape-image-threshold',\\n  'shape-margin',\\n  'shape-outside',\\n  'speak',\\n  'speak-as',\\n  'src', // @font-face\\n  'tab-size',\\n  'table-layout',\\n  'text-align',\\n  'text-align-all',\\n  'text-align-last',\\n  'text-combine-upright',\\n  'text-decoration',\\n  'text-decoration-color',\\n  'text-decoration-line',\\n  'text-decoration-style',\\n  'text-emphasis',\\n  'text-emphasis-color',\\n  'text-emphasis-position',\\n  'text-emphasis-style',\\n  'text-indent',\\n  'text-justify',\\n  'text-orientation',\\n  'text-overflow',\\n  'text-rendering',\\n  'text-shadow',\\n  'text-transform',\\n  'text-underline-position',\\n  'top',\\n  'transform',\\n  'transform-box',\\n  'transform-origin',\\n  'transform-style',\\n  'transition',\\n  'transition-delay',\\n  'transition-duration',\\n  'transition-property',\\n  'transition-timing-function',\\n  'unicode-bidi',\\n  'vertical-align',\\n  'visibility',\\n  'voice-balance',\\n  'voice-duration',\\n  'voice-family',\\n  'voice-pitch',\\n  'voice-range',\\n  'voice-rate',\\n  'voice-stress',\\n  'voice-volume',\\n  'white-space',\\n  'widows',\\n  'width',\\n  'will-change',\\n  'word-break',\\n  'word-spacing',\\n  'word-wrap',\\n  'writing-mode',\\n  'z-index'\\n  // reverse makes sure longer attributes `font-weight` are matched fully\\n  // instead of getting false positives on say `font`\\n].reverse();\\n\\n/*\\nLanguage: Stylus\\nAuthor: Bryant Williams <b.n.williams@gmail.com>\\nDescription: Stylus is an expressive, robust, feature-rich CSS language built for nodejs.\\nWebsite: https://github.com/stylus/stylus\\nCategory: css, web\\n*/\\n\\n/** @type LanguageFn */\\nfunction stylus(hljs) {\\n  const modes = MODES(hljs);\\n\\n  const AT_MODIFIERS = \\\"and or not only\\\";\\n  const VARIABLE = {\\n    className: 'variable',\\n    begin: '\\\\\\\\$' + hljs.IDENT_RE\\n  };\\n\\n  const AT_KEYWORDS = [\\n    'charset',\\n    'css',\\n    'debug',\\n    'extend',\\n    'font-face',\\n    'for',\\n    'import',\\n    'include',\\n    'keyframes',\\n    'media',\\n    'mixin',\\n    'page',\\n    'warn',\\n    'while'\\n  ];\\n\\n  const LOOKAHEAD_TAG_END = '(?=[.\\\\\\\\s\\\\\\\\n[:,(])';\\n\\n  // illegals\\n  const ILLEGAL = [\\n    '\\\\\\\\?',\\n    '(\\\\\\\\bReturn\\\\\\\\b)', // monkey\\n    '(\\\\\\\\bEnd\\\\\\\\b)', // monkey\\n    '(\\\\\\\\bend\\\\\\\\b)', // vbscript\\n    '(\\\\\\\\bdef\\\\\\\\b)', // gradle\\n    ';', // a whole lot of languages\\n    '#\\\\\\\\s', // markdown\\n    '\\\\\\\\*\\\\\\\\s', // markdown\\n    '===\\\\\\\\s', // markdown\\n    '\\\\\\\\|',\\n    '%' // prolog\\n  ];\\n\\n  return {\\n    name: 'Stylus',\\n    aliases: [ 'styl' ],\\n    case_insensitive: false,\\n    keywords: 'if else for in',\\n    illegal: '(' + ILLEGAL.join('|') + ')',\\n    contains: [\\n\\n      // strings\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.APOS_STRING_MODE,\\n\\n      // comments\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n\\n      // hex colors\\n      modes.HEXCOLOR,\\n\\n      // class tag\\n      {\\n        begin: '\\\\\\\\.[a-zA-Z][a-zA-Z0-9_-]*' + LOOKAHEAD_TAG_END,\\n        className: 'selector-class'\\n      },\\n\\n      // id tag\\n      {\\n        begin: '#[a-zA-Z][a-zA-Z0-9_-]*' + LOOKAHEAD_TAG_END,\\n        className: 'selector-id'\\n      },\\n\\n      // tags\\n      {\\n        begin: '\\\\\\\\b(' + TAGS.join('|') + ')' + LOOKAHEAD_TAG_END,\\n        className: 'selector-tag'\\n      },\\n\\n      // psuedo selectors\\n      {\\n        className: 'selector-pseudo',\\n        begin: '&?:(' + PSEUDO_CLASSES.join('|') + ')' + LOOKAHEAD_TAG_END\\n      },\\n      {\\n        className: 'selector-pseudo',\\n        begin: '&?:(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' + LOOKAHEAD_TAG_END\\n      },\\n\\n      modes.ATTRIBUTE_SELECTOR_MODE,\\n\\n      {\\n        className: \\\"keyword\\\",\\n        begin: /@media/,\\n        starts: {\\n          end: /[{;}]/,\\n          keywords: {\\n            $pattern: /[a-z-]+/,\\n            keyword: AT_MODIFIERS,\\n            attribute: MEDIA_FEATURES.join(\\\" \\\")\\n          },\\n          contains: [ modes.CSS_NUMBER_MODE ]\\n        }\\n      },\\n\\n      // @ keywords\\n      {\\n        className: 'keyword',\\n        begin: '\\\\@((-(o|moz|ms|webkit)-)?(' + AT_KEYWORDS.join('|') + '))\\\\\\\\b'\\n      },\\n\\n      // variables\\n      VARIABLE,\\n\\n      // dimension\\n      modes.CSS_NUMBER_MODE,\\n\\n      // functions\\n      //  - only from beginning of line + whitespace\\n      {\\n        className: 'function',\\n        begin: '^[a-zA-Z][a-zA-Z0-9_\\\\-]*\\\\\\\\(.*\\\\\\\\)',\\n        illegal: '[\\\\\\\\n]',\\n        returnBegin: true,\\n        contains: [\\n          {\\n            className: 'title',\\n            begin: '\\\\\\\\b[a-zA-Z][a-zA-Z0-9_\\\\-]*'\\n          },\\n          {\\n            className: 'params',\\n            begin: /\\\\(/,\\n            end: /\\\\)/,\\n            contains: [\\n              modes.HEXCOLOR,\\n              VARIABLE,\\n              hljs.APOS_STRING_MODE,\\n              modes.CSS_NUMBER_MODE,\\n              hljs.QUOTE_STRING_MODE\\n            ]\\n          }\\n        ]\\n      },\\n\\n      // css variables\\n      modes.CSS_VARIABLE,\\n\\n      // attributes\\n      //  - only from beginning of line + whitespace\\n      //  - must have whitespace after it\\n      {\\n        className: 'attribute',\\n        begin: '\\\\\\\\b(' + ATTRIBUTES.join('|') + ')\\\\\\\\b',\\n        starts: {\\n          // value container\\n          end: /;|$/,\\n          contains: [\\n            modes.HEXCOLOR,\\n            VARIABLE,\\n            hljs.APOS_STRING_MODE,\\n            hljs.QUOTE_STRING_MODE,\\n            modes.CSS_NUMBER_MODE,\\n            hljs.C_BLOCK_COMMENT_MODE,\\n            modes.IMPORTANT,\\n            modes.FUNCTION_DISPATCH\\n          ],\\n          illegal: /\\\\./,\\n          relevance: 0\\n        }\\n      },\\n      modes.FUNCTION_DISPATCH\\n    ]\\n  };\\n}\\n\\nmodule.exports = stylus;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/stylus.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/subunit.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/subunit.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: SubUnit\\nAuthor: Sergey Bronnikov <sergeyb@bronevichok.ru>\\nWebsite: https://pypi.org/project/python-subunit/\\n*/\\n\\nfunction subunit(hljs) {\\n  const DETAILS = {\\n    className: 'string',\\n    begin: '\\\\\\\\[\\\\n(multipart)?',\\n    end: '\\\\\\\\]\\\\n'\\n  };\\n  const TIME = {\\n    className: 'string',\\n    begin: '\\\\\\\\d{4}-\\\\\\\\d{2}-\\\\\\\\d{2}(\\\\\\\\s+)\\\\\\\\d{2}:\\\\\\\\d{2}:\\\\\\\\d{2}\\\\.\\\\\\\\d+Z'\\n  };\\n  const PROGRESSVALUE = {\\n    className: 'string',\\n    begin: '(\\\\\\\\+|-)\\\\\\\\d+'\\n  };\\n  const KEYWORDS = {\\n    className: 'keyword',\\n    relevance: 10,\\n    variants: [\\n      { begin: '^(test|testing|success|successful|failure|error|skip|xfail|uxsuccess)(:?)\\\\\\\\s+(test)?' },\\n      { begin: '^progress(:?)(\\\\\\\\s+)?(pop|push)?' },\\n      { begin: '^tags:' },\\n      { begin: '^time:' }\\n    ]\\n  };\\n  return {\\n    name: 'SubUnit',\\n    case_insensitive: true,\\n    contains: [\\n      DETAILS,\\n      TIME,\\n      PROGRESSVALUE,\\n      KEYWORDS\\n    ]\\n  };\\n}\\n\\nmodule.exports = subunit;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/subunit.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/swift.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/swift.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/**\\n * @param {string} value\\n * @returns {RegExp}\\n * */\\n\\n/**\\n * @param {RegExp | string } re\\n * @returns {string}\\n */\\nfunction source(re) {\\n  if (!re) return null;\\n  if (typeof re === \\\"string\\\") return re;\\n\\n  return re.source;\\n}\\n\\n/**\\n * @param {RegExp | string } re\\n * @returns {string}\\n */\\nfunction lookahead(re) {\\n  return concat('(?=', re, ')');\\n}\\n\\n/**\\n * @param {...(RegExp | string) } args\\n * @returns {string}\\n */\\nfunction concat(...args) {\\n  const joined = args.map((x) => source(x)).join(\\\"\\\");\\n  return joined;\\n}\\n\\n/**\\n * @param { Array<string | RegExp | Object> } args\\n * @returns {object}\\n */\\nfunction stripOptionsFromArgs(args) {\\n  const opts = args[args.length - 1];\\n\\n  if (typeof opts === 'object' && opts.constructor === Object) {\\n    args.splice(args.length - 1, 1);\\n    return opts;\\n  } else {\\n    return {};\\n  }\\n}\\n\\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\\n\\n/**\\n * Any of the passed expresssions may match\\n *\\n * Creates a huge this | this | that | that match\\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\\n * @returns {string}\\n */\\nfunction either(...args) {\\n  /** @type { object & {capture?: boolean} }  */\\n  const opts = stripOptionsFromArgs(args);\\n  const joined = '('\\n    + (opts.capture ? \\\"\\\" : \\\"?:\\\")\\n    + args.map((x) => source(x)).join(\\\"|\\\") + \\\")\\\";\\n  return joined;\\n}\\n\\nconst keywordWrapper = keyword => concat(\\n  /\\\\b/,\\n  keyword,\\n  /\\\\w$/.test(keyword) ? /\\\\b/ : /\\\\B/\\n);\\n\\n// Keywords that require a leading dot.\\nconst dotKeywords = [\\n  'Protocol', // contextual\\n  'Type' // contextual\\n].map(keywordWrapper);\\n\\n// Keywords that may have a leading dot.\\nconst optionalDotKeywords = [\\n  'init',\\n  'self'\\n].map(keywordWrapper);\\n\\n// should register as keyword, not type\\nconst keywordTypes = [\\n  'Any',\\n  'Self'\\n];\\n\\n// Regular keywords and literals.\\nconst keywords = [\\n  // strings below will be fed into the regular `keywords` engine while regex\\n  // will result in additional modes being created to scan for those keywords to\\n  // avoid conflicts with other rules\\n  'actor',\\n  'any', // contextual\\n  'associatedtype',\\n  'async',\\n  'await',\\n  /as\\\\?/, // operator\\n  /as!/, // operator\\n  'as', // operator\\n  'break',\\n  'case',\\n  'catch',\\n  'class',\\n  'continue',\\n  'convenience', // contextual\\n  'default',\\n  'defer',\\n  'deinit',\\n  'didSet', // contextual\\n  'distributed',\\n  'do',\\n  'dynamic', // contextual\\n  'else',\\n  'enum',\\n  'extension',\\n  'fallthrough',\\n  /fileprivate\\\\(set\\\\)/,\\n  'fileprivate',\\n  'final', // contextual\\n  'for',\\n  'func',\\n  'get', // contextual\\n  'guard',\\n  'if',\\n  'import',\\n  'indirect', // contextual\\n  'infix', // contextual\\n  /init\\\\?/,\\n  /init!/,\\n  'inout',\\n  /internal\\\\(set\\\\)/,\\n  'internal',\\n  'in',\\n  'is', // operator\\n  'isolated', // contextual\\n  'nonisolated', // contextual\\n  'lazy', // contextual\\n  'let',\\n  'mutating', // contextual\\n  'nonmutating', // contextual\\n  /open\\\\(set\\\\)/, // contextual\\n  'open', // contextual\\n  'operator',\\n  'optional', // contextual\\n  'override', // contextual\\n  'postfix', // contextual\\n  'precedencegroup',\\n  'prefix', // contextual\\n  /private\\\\(set\\\\)/,\\n  'private',\\n  'protocol',\\n  /public\\\\(set\\\\)/,\\n  'public',\\n  'repeat',\\n  'required', // contextual\\n  'rethrows',\\n  'return',\\n  'set', // contextual\\n  'some', // contextual\\n  'static',\\n  'struct',\\n  'subscript',\\n  'super',\\n  'switch',\\n  'throws',\\n  'throw',\\n  /try\\\\?/, // operator\\n  /try!/, // operator\\n  'try', // operator\\n  'typealias',\\n  /unowned\\\\(safe\\\\)/, // contextual\\n  /unowned\\\\(unsafe\\\\)/, // contextual\\n  'unowned', // contextual\\n  'var',\\n  'weak', // contextual\\n  'where',\\n  'while',\\n  'willSet' // contextual\\n];\\n\\n// NOTE: Contextual keywords are reserved only in specific contexts.\\n// Ideally, these should be matched using modes to avoid false positives.\\n\\n// Literals.\\nconst literals = [\\n  'false',\\n  'nil',\\n  'true'\\n];\\n\\n// Keywords used in precedence groups.\\nconst precedencegroupKeywords = [\\n  'assignment',\\n  'associativity',\\n  'higherThan',\\n  'left',\\n  'lowerThan',\\n  'none',\\n  'right'\\n];\\n\\n// Keywords that start with a number sign (#).\\n// #(un)available is handled separately.\\nconst numberSignKeywords = [\\n  '#colorLiteral',\\n  '#column',\\n  '#dsohandle',\\n  '#else',\\n  '#elseif',\\n  '#endif',\\n  '#error',\\n  '#file',\\n  '#fileID',\\n  '#fileLiteral',\\n  '#filePath',\\n  '#function',\\n  '#if',\\n  '#imageLiteral',\\n  '#keyPath',\\n  '#line',\\n  '#selector',\\n  '#sourceLocation',\\n  '#warn_unqualified_access',\\n  '#warning'\\n];\\n\\n// Global functions in the Standard Library.\\nconst builtIns = [\\n  'abs',\\n  'all',\\n  'any',\\n  'assert',\\n  'assertionFailure',\\n  'debugPrint',\\n  'dump',\\n  'fatalError',\\n  'getVaList',\\n  'isKnownUniquelyReferenced',\\n  'max',\\n  'min',\\n  'numericCast',\\n  'pointwiseMax',\\n  'pointwiseMin',\\n  'precondition',\\n  'preconditionFailure',\\n  'print',\\n  'readLine',\\n  'repeatElement',\\n  'sequence',\\n  'stride',\\n  'swap',\\n  'swift_unboxFromSwiftValueWithType',\\n  'transcode',\\n  'type',\\n  'unsafeBitCast',\\n  'unsafeDowncast',\\n  'withExtendedLifetime',\\n  'withUnsafeMutablePointer',\\n  'withUnsafePointer',\\n  'withVaList',\\n  'withoutActuallyEscaping',\\n  'zip'\\n];\\n\\n// Valid first characters for operators.\\nconst operatorHead = either(\\n  /[/=\\\\-+!*%<>&|^~?]/,\\n  /[\\\\u00A1-\\\\u00A7]/,\\n  /[\\\\u00A9\\\\u00AB]/,\\n  /[\\\\u00AC\\\\u00AE]/,\\n  /[\\\\u00B0\\\\u00B1]/,\\n  /[\\\\u00B6\\\\u00BB\\\\u00BF\\\\u00D7\\\\u00F7]/,\\n  /[\\\\u2016-\\\\u2017]/,\\n  /[\\\\u2020-\\\\u2027]/,\\n  /[\\\\u2030-\\\\u203E]/,\\n  /[\\\\u2041-\\\\u2053]/,\\n  /[\\\\u2055-\\\\u205E]/,\\n  /[\\\\u2190-\\\\u23FF]/,\\n  /[\\\\u2500-\\\\u2775]/,\\n  /[\\\\u2794-\\\\u2BFF]/,\\n  /[\\\\u2E00-\\\\u2E7F]/,\\n  /[\\\\u3001-\\\\u3003]/,\\n  /[\\\\u3008-\\\\u3020]/,\\n  /[\\\\u3030]/\\n);\\n\\n// Valid characters for operators.\\nconst operatorCharacter = either(\\n  operatorHead,\\n  /[\\\\u0300-\\\\u036F]/,\\n  /[\\\\u1DC0-\\\\u1DFF]/,\\n  /[\\\\u20D0-\\\\u20FF]/,\\n  /[\\\\uFE00-\\\\uFE0F]/,\\n  /[\\\\uFE20-\\\\uFE2F]/\\n  // TODO: The following characters are also allowed, but the regex isn't supported yet.\\n  // /[\\\\u{E0100}-\\\\u{E01EF}]/u\\n);\\n\\n// Valid operator.\\nconst operator = concat(operatorHead, operatorCharacter, '*');\\n\\n// Valid first characters for identifiers.\\nconst identifierHead = either(\\n  /[a-zA-Z_]/,\\n  /[\\\\u00A8\\\\u00AA\\\\u00AD\\\\u00AF\\\\u00B2-\\\\u00B5\\\\u00B7-\\\\u00BA]/,\\n  /[\\\\u00BC-\\\\u00BE\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u00FF]/,\\n  /[\\\\u0100-\\\\u02FF\\\\u0370-\\\\u167F\\\\u1681-\\\\u180D\\\\u180F-\\\\u1DBF]/,\\n  /[\\\\u1E00-\\\\u1FFF]/,\\n  /[\\\\u200B-\\\\u200D\\\\u202A-\\\\u202E\\\\u203F-\\\\u2040\\\\u2054\\\\u2060-\\\\u206F]/,\\n  /[\\\\u2070-\\\\u20CF\\\\u2100-\\\\u218F\\\\u2460-\\\\u24FF\\\\u2776-\\\\u2793]/,\\n  /[\\\\u2C00-\\\\u2DFF\\\\u2E80-\\\\u2FFF]/,\\n  /[\\\\u3004-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u303F\\\\u3040-\\\\uD7FF]/,\\n  /[\\\\uF900-\\\\uFD3D\\\\uFD40-\\\\uFDCF\\\\uFDF0-\\\\uFE1F\\\\uFE30-\\\\uFE44]/,\\n  /[\\\\uFE47-\\\\uFEFE\\\\uFF00-\\\\uFFFD]/ // Should be /[\\\\uFE47-\\\\uFFFD]/, but we have to exclude FEFF.\\n  // The following characters are also allowed, but the regexes aren't supported yet.\\n  // /[\\\\u{10000}-\\\\u{1FFFD}\\\\u{20000-\\\\u{2FFFD}\\\\u{30000}-\\\\u{3FFFD}\\\\u{40000}-\\\\u{4FFFD}]/u,\\n  // /[\\\\u{50000}-\\\\u{5FFFD}\\\\u{60000-\\\\u{6FFFD}\\\\u{70000}-\\\\u{7FFFD}\\\\u{80000}-\\\\u{8FFFD}]/u,\\n  // /[\\\\u{90000}-\\\\u{9FFFD}\\\\u{A0000-\\\\u{AFFFD}\\\\u{B0000}-\\\\u{BFFFD}\\\\u{C0000}-\\\\u{CFFFD}]/u,\\n  // /[\\\\u{D0000}-\\\\u{DFFFD}\\\\u{E0000-\\\\u{EFFFD}]/u\\n);\\n\\n// Valid characters for identifiers.\\nconst identifierCharacter = either(\\n  identifierHead,\\n  /\\\\d/,\\n  /[\\\\u0300-\\\\u036F\\\\u1DC0-\\\\u1DFF\\\\u20D0-\\\\u20FF\\\\uFE20-\\\\uFE2F]/\\n);\\n\\n// Valid identifier.\\nconst identifier = concat(identifierHead, identifierCharacter, '*');\\n\\n// Valid type identifier.\\nconst typeIdentifier = concat(/[A-Z]/, identifierCharacter, '*');\\n\\n// Built-in attributes, which are highlighted as keywords.\\n// @available is handled separately.\\nconst keywordAttributes = [\\n  'autoclosure',\\n  concat(/convention\\\\(/, either('swift', 'block', 'c'), /\\\\)/),\\n  'discardableResult',\\n  'dynamicCallable',\\n  'dynamicMemberLookup',\\n  'escaping',\\n  'frozen',\\n  'GKInspectable',\\n  'IBAction',\\n  'IBDesignable',\\n  'IBInspectable',\\n  'IBOutlet',\\n  'IBSegueAction',\\n  'inlinable',\\n  'main',\\n  'nonobjc',\\n  'NSApplicationMain',\\n  'NSCopying',\\n  'NSManaged',\\n  concat(/objc\\\\(/, identifier, /\\\\)/),\\n  'objc',\\n  'objcMembers',\\n  'propertyWrapper',\\n  'requires_stored_property_inits',\\n  'resultBuilder',\\n  'testable',\\n  'UIApplicationMain',\\n  'unknown',\\n  'usableFromInline'\\n];\\n\\n// Contextual keywords used in @available and #(un)available.\\nconst availabilityKeywords = [\\n  'iOS',\\n  'iOSApplicationExtension',\\n  'macOS',\\n  'macOSApplicationExtension',\\n  'macCatalyst',\\n  'macCatalystApplicationExtension',\\n  'watchOS',\\n  'watchOSApplicationExtension',\\n  'tvOS',\\n  'tvOSApplicationExtension',\\n  'swift'\\n];\\n\\n/*\\nLanguage: Swift\\nDescription: Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.\\nAuthor: Steven Van Impe <steven.vanimpe@icloud.com>\\nContributors: Chris Eidhof <chris@eidhof.nl>, Nate Cook <natecook@gmail.com>, Alexander Lichter <manniL@gmx.net>, Richard Gibson <gibson042@github>\\nWebsite: https://swift.org\\nCategory: common, system\\n*/\\n\\n/** @type LanguageFn */\\nfunction swift(hljs) {\\n  const WHITESPACE = {\\n    match: /\\\\s+/,\\n    relevance: 0\\n  };\\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID411\\n  const BLOCK_COMMENT = hljs.COMMENT(\\n    '/\\\\\\\\*',\\n    '\\\\\\\\*/',\\n    { contains: [ 'self' ] }\\n  );\\n  const COMMENTS = [\\n    hljs.C_LINE_COMMENT_MODE,\\n    BLOCK_COMMENT\\n  ];\\n\\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID413\\n  // https://docs.swift.org/swift-book/ReferenceManual/zzSummaryOfTheGrammar.html\\n  const DOT_KEYWORD = {\\n    match: [\\n      /\\\\./,\\n      either(...dotKeywords, ...optionalDotKeywords)\\n    ],\\n    className: { 2: \\\"keyword\\\" }\\n  };\\n  const KEYWORD_GUARD = {\\n    // Consume .keyword to prevent highlighting properties and methods as keywords.\\n    match: concat(/\\\\./, either(...keywords)),\\n    relevance: 0\\n  };\\n  const PLAIN_KEYWORDS = keywords\\n    .filter(kw => typeof kw === 'string')\\n    .concat([ \\\"_|0\\\" ]); // seems common, so 0 relevance\\n  const REGEX_KEYWORDS = keywords\\n    .filter(kw => typeof kw !== 'string') // find regex\\n    .concat(keywordTypes)\\n    .map(keywordWrapper);\\n  const KEYWORD = { variants: [\\n    {\\n      className: 'keyword',\\n      match: either(...REGEX_KEYWORDS, ...optionalDotKeywords)\\n    }\\n  ] };\\n  // find all the regular keywords\\n  const KEYWORDS = {\\n    $pattern: either(\\n      /\\\\b\\\\w+/, // regular keywords\\n      /#\\\\w+/ // number keywords\\n    ),\\n    keyword: PLAIN_KEYWORDS\\n      .concat(numberSignKeywords),\\n    literal: literals\\n  };\\n  const KEYWORD_MODES = [\\n    DOT_KEYWORD,\\n    KEYWORD_GUARD,\\n    KEYWORD\\n  ];\\n\\n  // https://github.com/apple/swift/tree/main/stdlib/public/core\\n  const BUILT_IN_GUARD = {\\n    // Consume .built_in to prevent highlighting properties and methods.\\n    match: concat(/\\\\./, either(...builtIns)),\\n    relevance: 0\\n  };\\n  const BUILT_IN = {\\n    className: 'built_in',\\n    match: concat(/\\\\b/, either(...builtIns), /(?=\\\\()/)\\n  };\\n  const BUILT_INS = [\\n    BUILT_IN_GUARD,\\n    BUILT_IN\\n  ];\\n\\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID418\\n  const OPERATOR_GUARD = {\\n    // Prevent -> from being highlighting as an operator.\\n    match: /->/,\\n    relevance: 0\\n  };\\n  const OPERATOR = {\\n    className: 'operator',\\n    relevance: 0,\\n    variants: [\\n      { match: operator },\\n      {\\n        // dot-operator: only operators that start with a dot are allowed to use dots as\\n        // characters (..., ...<, .*, etc). So there rule here is: a dot followed by one or more\\n        // characters that may also include dots.\\n        match: `\\\\\\\\.(\\\\\\\\.|${operatorCharacter})+` }\\n    ]\\n  };\\n  const OPERATORS = [\\n    OPERATOR_GUARD,\\n    OPERATOR\\n  ];\\n\\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_numeric-literal\\n  // TODO: Update for leading `-` after lookbehind is supported everywhere\\n  const decimalDigits = '([0-9]_*)+';\\n  const hexDigits = '([0-9a-fA-F]_*)+';\\n  const NUMBER = {\\n    className: 'number',\\n    relevance: 0,\\n    variants: [\\n      // decimal floating-point-literal (subsumes decimal-literal)\\n      { match: `\\\\\\\\b(${decimalDigits})(\\\\\\\\.(${decimalDigits}))?` + `([eE][+-]?(${decimalDigits}))?\\\\\\\\b` },\\n      // hexadecimal floating-point-literal (subsumes hexadecimal-literal)\\n      { match: `\\\\\\\\b0x(${hexDigits})(\\\\\\\\.(${hexDigits}))?` + `([pP][+-]?(${decimalDigits}))?\\\\\\\\b` },\\n      // octal-literal\\n      { match: /\\\\b0o([0-7]_*)+\\\\b/ },\\n      // binary-literal\\n      { match: /\\\\b0b([01]_*)+\\\\b/ }\\n    ]\\n  };\\n\\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_string-literal\\n  const ESCAPED_CHARACTER = (rawDelimiter = \\\"\\\") => ({\\n    className: 'subst',\\n    variants: [\\n      { match: concat(/\\\\\\\\/, rawDelimiter, /[0\\\\\\\\tnr\\\"']/) },\\n      { match: concat(/\\\\\\\\/, rawDelimiter, /u\\\\{[0-9a-fA-F]{1,8}\\\\}/) }\\n    ]\\n  });\\n  const ESCAPED_NEWLINE = (rawDelimiter = \\\"\\\") => ({\\n    className: 'subst',\\n    match: concat(/\\\\\\\\/, rawDelimiter, /[\\\\t ]*(?:[\\\\r\\\\n]|\\\\r\\\\n)/)\\n  });\\n  const INTERPOLATION = (rawDelimiter = \\\"\\\") => ({\\n    className: 'subst',\\n    label: \\\"interpol\\\",\\n    begin: concat(/\\\\\\\\/, rawDelimiter, /\\\\(/),\\n    end: /\\\\)/\\n  });\\n  const MULTILINE_STRING = (rawDelimiter = \\\"\\\") => ({\\n    begin: concat(rawDelimiter, /\\\"\\\"\\\"/),\\n    end: concat(/\\\"\\\"\\\"/, rawDelimiter),\\n    contains: [\\n      ESCAPED_CHARACTER(rawDelimiter),\\n      ESCAPED_NEWLINE(rawDelimiter),\\n      INTERPOLATION(rawDelimiter)\\n    ]\\n  });\\n  const SINGLE_LINE_STRING = (rawDelimiter = \\\"\\\") => ({\\n    begin: concat(rawDelimiter, /\\\"/),\\n    end: concat(/\\\"/, rawDelimiter),\\n    contains: [\\n      ESCAPED_CHARACTER(rawDelimiter),\\n      INTERPOLATION(rawDelimiter)\\n    ]\\n  });\\n  const STRING = {\\n    className: 'string',\\n    variants: [\\n      MULTILINE_STRING(),\\n      MULTILINE_STRING(\\\"#\\\"),\\n      MULTILINE_STRING(\\\"##\\\"),\\n      MULTILINE_STRING(\\\"###\\\"),\\n      SINGLE_LINE_STRING(),\\n      SINGLE_LINE_STRING(\\\"#\\\"),\\n      SINGLE_LINE_STRING(\\\"##\\\"),\\n      SINGLE_LINE_STRING(\\\"###\\\")\\n    ]\\n  };\\n\\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID412\\n  const QUOTED_IDENTIFIER = { match: concat(/`/, identifier, /`/) };\\n  const IMPLICIT_PARAMETER = {\\n    className: 'variable',\\n    match: /\\\\$\\\\d+/\\n  };\\n  const PROPERTY_WRAPPER_PROJECTION = {\\n    className: 'variable',\\n    match: `\\\\\\\\$${identifierCharacter}+`\\n  };\\n  const IDENTIFIERS = [\\n    QUOTED_IDENTIFIER,\\n    IMPLICIT_PARAMETER,\\n    PROPERTY_WRAPPER_PROJECTION\\n  ];\\n\\n  // https://docs.swift.org/swift-book/ReferenceManual/Attributes.html\\n  const AVAILABLE_ATTRIBUTE = {\\n    match: /(@|#(un)?)available/,\\n    className: \\\"keyword\\\",\\n    starts: { contains: [\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        keywords: availabilityKeywords,\\n        contains: [\\n          ...OPERATORS,\\n          NUMBER,\\n          STRING\\n        ]\\n      }\\n    ] }\\n  };\\n  const KEYWORD_ATTRIBUTE = {\\n    className: 'keyword',\\n    match: concat(/@/, either(...keywordAttributes))\\n  };\\n  const USER_DEFINED_ATTRIBUTE = {\\n    className: 'meta',\\n    match: concat(/@/, identifier)\\n  };\\n  const ATTRIBUTES = [\\n    AVAILABLE_ATTRIBUTE,\\n    KEYWORD_ATTRIBUTE,\\n    USER_DEFINED_ATTRIBUTE\\n  ];\\n\\n  // https://docs.swift.org/swift-book/ReferenceManual/Types.html\\n  const TYPE = {\\n    match: lookahead(/\\\\b[A-Z]/),\\n    relevance: 0,\\n    contains: [\\n      { // Common Apple frameworks, for relevance boost\\n        className: 'type',\\n        match: concat(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/, identifierCharacter, '+')\\n      },\\n      { // Type identifier\\n        className: 'type',\\n        match: typeIdentifier,\\n        relevance: 0\\n      },\\n      { // Optional type\\n        match: /[?!]+/,\\n        relevance: 0\\n      },\\n      { // Variadic parameter\\n        match: /\\\\.\\\\.\\\\./,\\n        relevance: 0\\n      },\\n      { // Protocol composition\\n        match: concat(/\\\\s+&\\\\s+/, lookahead(typeIdentifier)),\\n        relevance: 0\\n      }\\n    ]\\n  };\\n  const GENERIC_ARGUMENTS = {\\n    begin: /</,\\n    end: />/,\\n    keywords: KEYWORDS,\\n    contains: [\\n      ...COMMENTS,\\n      ...KEYWORD_MODES,\\n      ...ATTRIBUTES,\\n      OPERATOR_GUARD,\\n      TYPE\\n    ]\\n  };\\n  TYPE.contains.push(GENERIC_ARGUMENTS);\\n\\n  // https://docs.swift.org/swift-book/ReferenceManual/Expressions.html#ID552\\n  // Prevents element names from being highlighted as keywords.\\n  const TUPLE_ELEMENT_NAME = {\\n    match: concat(identifier, /\\\\s*:/),\\n    keywords: \\\"_|0\\\",\\n    relevance: 0\\n  };\\n  // Matches tuples as well as the parameter list of a function type.\\n  const TUPLE = {\\n    begin: /\\\\(/,\\n    end: /\\\\)/,\\n    relevance: 0,\\n    keywords: KEYWORDS,\\n    contains: [\\n      'self',\\n      TUPLE_ELEMENT_NAME,\\n      ...COMMENTS,\\n      ...KEYWORD_MODES,\\n      ...BUILT_INS,\\n      ...OPERATORS,\\n      NUMBER,\\n      STRING,\\n      ...IDENTIFIERS,\\n      ...ATTRIBUTES,\\n      TYPE\\n    ]\\n  };\\n\\n  const GENERIC_PARAMETERS = {\\n    begin: /</,\\n    end: />/,\\n    contains: [\\n      ...COMMENTS,\\n      TYPE\\n    ]\\n  };\\n  const FUNCTION_PARAMETER_NAME = {\\n    begin: either(\\n      lookahead(concat(identifier, /\\\\s*:/)),\\n      lookahead(concat(identifier, /\\\\s+/, identifier, /\\\\s*:/))\\n    ),\\n    end: /:/,\\n    relevance: 0,\\n    contains: [\\n      {\\n        className: 'keyword',\\n        match: /\\\\b_\\\\b/\\n      },\\n      {\\n        className: 'params',\\n        match: identifier\\n      }\\n    ]\\n  };\\n  const FUNCTION_PARAMETERS = {\\n    begin: /\\\\(/,\\n    end: /\\\\)/,\\n    keywords: KEYWORDS,\\n    contains: [\\n      FUNCTION_PARAMETER_NAME,\\n      ...COMMENTS,\\n      ...KEYWORD_MODES,\\n      ...OPERATORS,\\n      NUMBER,\\n      STRING,\\n      ...ATTRIBUTES,\\n      TYPE,\\n      TUPLE\\n    ],\\n    endsParent: true,\\n    illegal: /[\\\"']/\\n  };\\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID362\\n  const FUNCTION = {\\n    match: [\\n      /func/,\\n      /\\\\s+/,\\n      either(QUOTED_IDENTIFIER.match, identifier, operator)\\n    ],\\n    className: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.function\\\"\\n    },\\n    contains: [\\n      GENERIC_PARAMETERS,\\n      FUNCTION_PARAMETERS,\\n      WHITESPACE\\n    ],\\n    illegal: [\\n      /\\\\[/,\\n      /%/\\n    ]\\n  };\\n\\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID375\\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID379\\n  const INIT_SUBSCRIPT = {\\n    match: [\\n      /\\\\b(?:subscript|init[?!]?)/,\\n      /\\\\s*(?=[<(])/,\\n    ],\\n    className: { 1: \\\"keyword\\\" },\\n    contains: [\\n      GENERIC_PARAMETERS,\\n      FUNCTION_PARAMETERS,\\n      WHITESPACE\\n    ],\\n    illegal: /\\\\[|%/\\n  };\\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID380\\n  const OPERATOR_DECLARATION = {\\n    match: [\\n      /operator/,\\n      /\\\\s+/,\\n      operator\\n    ],\\n    className: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title\\\"\\n    }\\n  };\\n\\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID550\\n  const PRECEDENCEGROUP = {\\n    begin: [\\n      /precedencegroup/,\\n      /\\\\s+/,\\n      typeIdentifier\\n    ],\\n    className: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title\\\"\\n    },\\n    contains: [ TYPE ],\\n    keywords: [\\n      ...precedencegroupKeywords,\\n      ...literals\\n    ],\\n    end: /}/\\n  };\\n\\n  // Add supported submodes to string interpolation.\\n  for (const variant of STRING.variants) {\\n    const interpolation = variant.contains.find(mode => mode.label === \\\"interpol\\\");\\n    // TODO: Interpolation can contain any expression, so there's room for improvement here.\\n    interpolation.keywords = KEYWORDS;\\n    const submodes = [\\n      ...KEYWORD_MODES,\\n      ...BUILT_INS,\\n      ...OPERATORS,\\n      NUMBER,\\n      STRING,\\n      ...IDENTIFIERS\\n    ];\\n    interpolation.contains = [\\n      ...submodes,\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        contains: [\\n          'self',\\n          ...submodes\\n        ]\\n      }\\n    ];\\n  }\\n\\n  return {\\n    name: 'Swift',\\n    keywords: KEYWORDS,\\n    contains: [\\n      ...COMMENTS,\\n      FUNCTION,\\n      INIT_SUBSCRIPT,\\n      {\\n        beginKeywords: 'struct protocol class extension enum actor',\\n        end: '\\\\\\\\{',\\n        excludeEnd: true,\\n        keywords: KEYWORDS,\\n        contains: [\\n          hljs.inherit(hljs.TITLE_MODE, {\\n            className: \\\"title.class\\\",\\n            begin: /[A-Za-z$_][\\\\u00C0-\\\\u02B80-9A-Za-z$_]*/\\n          }),\\n          ...KEYWORD_MODES\\n        ]\\n      },\\n      OPERATOR_DECLARATION,\\n      PRECEDENCEGROUP,\\n      {\\n        beginKeywords: 'import',\\n        end: /$/,\\n        contains: [ ...COMMENTS ],\\n        relevance: 0\\n      },\\n      ...KEYWORD_MODES,\\n      ...BUILT_INS,\\n      ...OPERATORS,\\n      NUMBER,\\n      STRING,\\n      ...IDENTIFIERS,\\n      ...ATTRIBUTES,\\n      TYPE,\\n      TUPLE\\n    ]\\n  };\\n}\\n\\nmodule.exports = swift;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/swift.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/taggerscript.js\":\n/*!*****************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/taggerscript.js ***!\n  \\*****************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Tagger Script\\nAuthor: Philipp Wolfer <ph.wolfer@gmail.com>\\nDescription: Syntax Highlighting for the Tagger Script as used by MusicBrainz Picard.\\nWebsite: https://picard.musicbrainz.org\\n */\\nfunction taggerscript(hljs) {\\n  const NOOP = {\\n    className: 'comment',\\n    begin: /\\\\$noop\\\\(/,\\n    end: /\\\\)/,\\n    contains: [\\n      { begin: /\\\\\\\\[()]/ },\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        contains: [\\n          { begin: /\\\\\\\\[()]/ },\\n          'self'\\n        ]\\n      }\\n    ],\\n    relevance: 10\\n  };\\n\\n  const FUNCTION = {\\n    className: 'keyword',\\n    begin: /\\\\$[_a-zA-Z0-9]+(?=\\\\()/\\n  };\\n\\n  const VARIABLE = {\\n    className: 'variable',\\n    begin: /%[_a-zA-Z0-9:]+%/\\n  };\\n\\n  const ESCAPE_SEQUENCE_UNICODE = {\\n    className: 'symbol',\\n    begin: /\\\\\\\\u[a-fA-F0-9]{4}/\\n  };\\n\\n  const ESCAPE_SEQUENCE = {\\n    className: 'symbol',\\n    begin: /\\\\\\\\[\\\\\\\\nt$%,()]/\\n  };\\n\\n  return {\\n    name: 'Tagger Script',\\n    contains: [\\n      NOOP,\\n      FUNCTION,\\n      VARIABLE,\\n      ESCAPE_SEQUENCE,\\n      ESCAPE_SEQUENCE_UNICODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = taggerscript;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/taggerscript.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/tap.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/tap.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Test Anything Protocol\\nDescription: TAP, the Test Anything Protocol, is a simple text-based interface between testing modules in a test harness.\\nRequires: yaml.js\\nAuthor: Sergey Bronnikov <sergeyb@bronevichok.ru>\\nWebsite: https://testanything.org\\n*/\\n\\nfunction tap(hljs) {\\n  return {\\n    name: 'Test Anything Protocol',\\n    case_insensitive: true,\\n    contains: [\\n      hljs.HASH_COMMENT_MODE,\\n      // version of format and total amount of testcases\\n      {\\n        className: 'meta',\\n        variants: [\\n          { begin: '^TAP version (\\\\\\\\d+)$' },\\n          { begin: '^1\\\\\\\\.\\\\\\\\.(\\\\\\\\d+)$' }\\n        ]\\n      },\\n      // YAML block\\n      {\\n        begin: /---$/,\\n        end: '\\\\\\\\.\\\\\\\\.\\\\\\\\.$',\\n        subLanguage: 'yaml',\\n        relevance: 0\\n      },\\n      // testcase number\\n      {\\n        className: 'number',\\n        begin: ' (\\\\\\\\d+) '\\n      },\\n      // testcase status and description\\n      {\\n        className: 'symbol',\\n        variants: [\\n          { begin: '^ok' },\\n          { begin: '^not ok' }\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = tap;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/tap.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/tcl.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/tcl.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Tcl\\nDescription: Tcl is a very simple programming language.\\nAuthor: Radek Liska <radekliska@gmail.com>\\nWebsite: https://www.tcl.tk/about/language.html\\n*/\\n\\nfunction tcl(hljs) {\\n  const regex = hljs.regex;\\n  const TCL_IDENT = /[a-zA-Z_][a-zA-Z0-9_]*/;\\n\\n  const NUMBER = {\\n    className: 'number',\\n    variants: [\\n      hljs.BINARY_NUMBER_MODE,\\n      hljs.C_NUMBER_MODE\\n    ]\\n  };\\n\\n  const KEYWORDS = [\\n    \\\"after\\\",\\n    \\\"append\\\",\\n    \\\"apply\\\",\\n    \\\"array\\\",\\n    \\\"auto_execok\\\",\\n    \\\"auto_import\\\",\\n    \\\"auto_load\\\",\\n    \\\"auto_mkindex\\\",\\n    \\\"auto_mkindex_old\\\",\\n    \\\"auto_qualify\\\",\\n    \\\"auto_reset\\\",\\n    \\\"bgerror\\\",\\n    \\\"binary\\\",\\n    \\\"break\\\",\\n    \\\"catch\\\",\\n    \\\"cd\\\",\\n    \\\"chan\\\",\\n    \\\"clock\\\",\\n    \\\"close\\\",\\n    \\\"concat\\\",\\n    \\\"continue\\\",\\n    \\\"dde\\\",\\n    \\\"dict\\\",\\n    \\\"encoding\\\",\\n    \\\"eof\\\",\\n    \\\"error\\\",\\n    \\\"eval\\\",\\n    \\\"exec\\\",\\n    \\\"exit\\\",\\n    \\\"expr\\\",\\n    \\\"fblocked\\\",\\n    \\\"fconfigure\\\",\\n    \\\"fcopy\\\",\\n    \\\"file\\\",\\n    \\\"fileevent\\\",\\n    \\\"filename\\\",\\n    \\\"flush\\\",\\n    \\\"for\\\",\\n    \\\"foreach\\\",\\n    \\\"format\\\",\\n    \\\"gets\\\",\\n    \\\"glob\\\",\\n    \\\"global\\\",\\n    \\\"history\\\",\\n    \\\"http\\\",\\n    \\\"if\\\",\\n    \\\"incr\\\",\\n    \\\"info\\\",\\n    \\\"interp\\\",\\n    \\\"join\\\",\\n    \\\"lappend|10\\\",\\n    \\\"lassign|10\\\",\\n    \\\"lindex|10\\\",\\n    \\\"linsert|10\\\",\\n    \\\"list\\\",\\n    \\\"llength|10\\\",\\n    \\\"load\\\",\\n    \\\"lrange|10\\\",\\n    \\\"lrepeat|10\\\",\\n    \\\"lreplace|10\\\",\\n    \\\"lreverse|10\\\",\\n    \\\"lsearch|10\\\",\\n    \\\"lset|10\\\",\\n    \\\"lsort|10\\\",\\n    \\\"mathfunc\\\",\\n    \\\"mathop\\\",\\n    \\\"memory\\\",\\n    \\\"msgcat\\\",\\n    \\\"namespace\\\",\\n    \\\"open\\\",\\n    \\\"package\\\",\\n    \\\"parray\\\",\\n    \\\"pid\\\",\\n    \\\"pkg::create\\\",\\n    \\\"pkg_mkIndex\\\",\\n    \\\"platform\\\",\\n    \\\"platform::shell\\\",\\n    \\\"proc\\\",\\n    \\\"puts\\\",\\n    \\\"pwd\\\",\\n    \\\"read\\\",\\n    \\\"refchan\\\",\\n    \\\"regexp\\\",\\n    \\\"registry\\\",\\n    \\\"regsub|10\\\",\\n    \\\"rename\\\",\\n    \\\"return\\\",\\n    \\\"safe\\\",\\n    \\\"scan\\\",\\n    \\\"seek\\\",\\n    \\\"set\\\",\\n    \\\"socket\\\",\\n    \\\"source\\\",\\n    \\\"split\\\",\\n    \\\"string\\\",\\n    \\\"subst\\\",\\n    \\\"switch\\\",\\n    \\\"tcl_endOfWord\\\",\\n    \\\"tcl_findLibrary\\\",\\n    \\\"tcl_startOfNextWord\\\",\\n    \\\"tcl_startOfPreviousWord\\\",\\n    \\\"tcl_wordBreakAfter\\\",\\n    \\\"tcl_wordBreakBefore\\\",\\n    \\\"tcltest\\\",\\n    \\\"tclvars\\\",\\n    \\\"tell\\\",\\n    \\\"time\\\",\\n    \\\"tm\\\",\\n    \\\"trace\\\",\\n    \\\"unknown\\\",\\n    \\\"unload\\\",\\n    \\\"unset\\\",\\n    \\\"update\\\",\\n    \\\"uplevel\\\",\\n    \\\"upvar\\\",\\n    \\\"variable\\\",\\n    \\\"vwait\\\",\\n    \\\"while\\\"\\n  ];\\n\\n  return {\\n    name: 'Tcl',\\n    aliases: [ 'tk' ],\\n    keywords: KEYWORDS,\\n    contains: [\\n      hljs.COMMENT(';[ \\\\\\\\t]*#', '$'),\\n      hljs.COMMENT('^[ \\\\\\\\t]*#', '$'),\\n      {\\n        beginKeywords: 'proc',\\n        end: '[\\\\\\\\{]',\\n        excludeEnd: true,\\n        contains: [\\n          {\\n            className: 'title',\\n            begin: '[ \\\\\\\\t\\\\\\\\n\\\\\\\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',\\n            end: '[ \\\\\\\\t\\\\\\\\n\\\\\\\\r]',\\n            endsWithParent: true,\\n            excludeEnd: true\\n          }\\n        ]\\n      },\\n      {\\n        className: \\\"variable\\\",\\n        variants: [\\n          { begin: regex.concat(\\n            /\\\\$/,\\n            regex.optional(/::/),\\n            TCL_IDENT,\\n            '(::',\\n            TCL_IDENT,\\n            ')*'\\n          ) },\\n          {\\n            begin: '\\\\\\\\$\\\\\\\\{(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',\\n            end: '\\\\\\\\}',\\n            contains: [ NUMBER ]\\n          }\\n        ]\\n      },\\n      {\\n        className: 'string',\\n        contains: [ hljs.BACKSLASH_ESCAPE ],\\n        variants: [ hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }) ]\\n      },\\n      NUMBER\\n    ]\\n  };\\n}\\n\\nmodule.exports = tcl;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/tcl.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/thrift.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/thrift.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Thrift\\nAuthor: Oleg Efimov <efimovov@gmail.com>\\nDescription: Thrift message definition format\\nWebsite: https://thrift.apache.org\\nCategory: protocols\\n*/\\n\\nfunction thrift(hljs) {\\n  const TYPES = [\\n    \\\"bool\\\",\\n    \\\"byte\\\",\\n    \\\"i16\\\",\\n    \\\"i32\\\",\\n    \\\"i64\\\",\\n    \\\"double\\\",\\n    \\\"string\\\",\\n    \\\"binary\\\"\\n  ];\\n  const KEYWORDS = [\\n    \\\"namespace\\\",\\n    \\\"const\\\",\\n    \\\"typedef\\\",\\n    \\\"struct\\\",\\n    \\\"enum\\\",\\n    \\\"service\\\",\\n    \\\"exception\\\",\\n    \\\"void\\\",\\n    \\\"oneway\\\",\\n    \\\"set\\\",\\n    \\\"list\\\",\\n    \\\"map\\\",\\n    \\\"required\\\",\\n    \\\"optional\\\"\\n  ];\\n  return {\\n    name: 'Thrift',\\n    keywords: {\\n      keyword: KEYWORDS,\\n      type: TYPES,\\n      literal: 'true false'\\n    },\\n    contains: [\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.NUMBER_MODE,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      {\\n        className: 'class',\\n        beginKeywords: 'struct enum service exception',\\n        end: /\\\\{/,\\n        illegal: /\\\\n/,\\n        contains: [\\n          hljs.inherit(hljs.TITLE_MODE, {\\n            // hack: eating everything after the first title\\n            starts: {\\n              endsWithParent: true,\\n              excludeEnd: true\\n            } })\\n        ]\\n      },\\n      {\\n        begin: '\\\\\\\\b(set|list|map)\\\\\\\\s*<',\\n        keywords: { type: [\\n          ...TYPES,\\n          \\\"set\\\",\\n          \\\"list\\\",\\n          \\\"map\\\"\\n        ] },\\n        end: '>',\\n        contains: [ 'self' ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = thrift;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/thrift.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/tp.js\":\n/*!*******************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/tp.js ***!\n  \\*******************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: TP\\nAuthor: Jay Strybis <jay.strybis@gmail.com>\\nDescription: FANUC TP programming language (TPP).\\n*/\\n\\nfunction tp(hljs) {\\n  const TPID = {\\n    className: 'number',\\n    begin: '[1-9][0-9]*', /* no leading zeros */\\n    relevance: 0\\n  };\\n  const TPLABEL = {\\n    className: 'symbol',\\n    begin: ':[^\\\\\\\\]]+'\\n  };\\n  const TPDATA = {\\n    className: 'built_in',\\n    begin: '(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|'\\n    + 'TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\\\\\\\[',\\n    end: '\\\\\\\\]',\\n    contains: [\\n      'self',\\n      TPID,\\n      TPLABEL\\n    ]\\n  };\\n  const TPIO = {\\n    className: 'built_in',\\n    begin: '(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\\\\\\\[',\\n    end: '\\\\\\\\]',\\n    contains: [\\n      'self',\\n      TPID,\\n      hljs.QUOTE_STRING_MODE, /* for pos section at bottom */\\n      TPLABEL\\n    ]\\n  };\\n\\n  const KEYWORDS = [\\n    \\\"ABORT\\\",\\n    \\\"ACC\\\",\\n    \\\"ADJUST\\\",\\n    \\\"AND\\\",\\n    \\\"AP_LD\\\",\\n    \\\"BREAK\\\",\\n    \\\"CALL\\\",\\n    \\\"CNT\\\",\\n    \\\"COL\\\",\\n    \\\"CONDITION\\\",\\n    \\\"CONFIG\\\",\\n    \\\"DA\\\",\\n    \\\"DB\\\",\\n    \\\"DIV\\\",\\n    \\\"DETECT\\\",\\n    \\\"ELSE\\\",\\n    \\\"END\\\",\\n    \\\"ENDFOR\\\",\\n    \\\"ERR_NUM\\\",\\n    \\\"ERROR_PROG\\\",\\n    \\\"FINE\\\",\\n    \\\"FOR\\\",\\n    \\\"GP\\\",\\n    \\\"GUARD\\\",\\n    \\\"INC\\\",\\n    \\\"IF\\\",\\n    \\\"JMP\\\",\\n    \\\"LINEAR_MAX_SPEED\\\",\\n    \\\"LOCK\\\",\\n    \\\"MOD\\\",\\n    \\\"MONITOR\\\",\\n    \\\"OFFSET\\\",\\n    \\\"Offset\\\",\\n    \\\"OR\\\",\\n    \\\"OVERRIDE\\\",\\n    \\\"PAUSE\\\",\\n    \\\"PREG\\\",\\n    \\\"PTH\\\",\\n    \\\"RT_LD\\\",\\n    \\\"RUN\\\",\\n    \\\"SELECT\\\",\\n    \\\"SKIP\\\",\\n    \\\"Skip\\\",\\n    \\\"TA\\\",\\n    \\\"TB\\\",\\n    \\\"TO\\\",\\n    \\\"TOOL_OFFSET\\\",\\n    \\\"Tool_Offset\\\",\\n    \\\"UF\\\",\\n    \\\"UT\\\",\\n    \\\"UFRAME_NUM\\\",\\n    \\\"UTOOL_NUM\\\",\\n    \\\"UNLOCK\\\",\\n    \\\"WAIT\\\",\\n    \\\"X\\\",\\n    \\\"Y\\\",\\n    \\\"Z\\\",\\n    \\\"W\\\",\\n    \\\"P\\\",\\n    \\\"R\\\",\\n    \\\"STRLEN\\\",\\n    \\\"SUBSTR\\\",\\n    \\\"FINDSTR\\\",\\n    \\\"VOFFSET\\\",\\n    \\\"PROG\\\",\\n    \\\"ATTR\\\",\\n    \\\"MN\\\",\\n    \\\"POS\\\"\\n  ];\\n  const LITERALS = [\\n    \\\"ON\\\",\\n    \\\"OFF\\\",\\n    \\\"max_speed\\\",\\n    \\\"LPOS\\\",\\n    \\\"JPOS\\\",\\n    \\\"ENABLE\\\",\\n    \\\"DISABLE\\\",\\n    \\\"START\\\",\\n    \\\"STOP\\\",\\n    \\\"RESET\\\"\\n  ];\\n\\n  return {\\n    name: 'TP',\\n    keywords: {\\n      keyword: KEYWORDS,\\n      literal: LITERALS\\n    },\\n    contains: [\\n      TPDATA,\\n      TPIO,\\n      {\\n        className: 'keyword',\\n        begin: '/(PROG|ATTR|MN|POS|END)\\\\\\\\b'\\n      },\\n      {\\n        /* this is for cases like ,CALL */\\n        className: 'keyword',\\n        begin: '(CALL|RUN|POINT_LOGIC|LBL)\\\\\\\\b'\\n      },\\n      {\\n        /* this is for cases like CNT100 where the default lexemes do not\\n         * separate the keyword and the number */\\n        className: 'keyword',\\n        begin: '\\\\\\\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)'\\n      },\\n      {\\n        /* to catch numbers that do not have a word boundary on the left */\\n        className: 'number',\\n        begin: '\\\\\\\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\\\\\\\b',\\n        relevance: 0\\n      },\\n      hljs.COMMENT('//', '[;$]'),\\n      hljs.COMMENT('!', '[;$]'),\\n      hljs.COMMENT('--eg:', '$'),\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'string',\\n        begin: '\\\\'',\\n        end: '\\\\''\\n      },\\n      hljs.C_NUMBER_MODE,\\n      {\\n        className: 'variable',\\n        begin: '\\\\\\\\$[A-Za-z0-9_]+'\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = tp;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/tp.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/twig.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/twig.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Twig\\nRequires: xml.js\\nAuthor: Luke Holder <lukemh@gmail.com>\\nDescription: Twig is a templating language for PHP\\nWebsite: https://twig.symfony.com\\nCategory: template\\n*/\\n\\nfunction twig(hljs) {\\n  const regex = hljs.regex;\\n  const FUNCTION_NAMES = [\\n    \\\"absolute_url\\\",\\n    \\\"asset|0\\\",\\n    \\\"asset_version\\\",\\n    \\\"attribute\\\",\\n    \\\"block\\\",\\n    \\\"constant\\\",\\n    \\\"controller|0\\\",\\n    \\\"country_timezones\\\",\\n    \\\"csrf_token\\\",\\n    \\\"cycle\\\",\\n    \\\"date\\\",\\n    \\\"dump\\\",\\n    \\\"expression\\\",\\n    \\\"form|0\\\",\\n    \\\"form_end\\\",\\n    \\\"form_errors\\\",\\n    \\\"form_help\\\",\\n    \\\"form_label\\\",\\n    \\\"form_rest\\\",\\n    \\\"form_row\\\",\\n    \\\"form_start\\\",\\n    \\\"form_widget\\\",\\n    \\\"html_classes\\\",\\n    \\\"include\\\",\\n    \\\"is_granted\\\",\\n    \\\"logout_path\\\",\\n    \\\"logout_url\\\",\\n    \\\"max\\\",\\n    \\\"min\\\",\\n    \\\"parent\\\",\\n    \\\"path|0\\\",\\n    \\\"random\\\",\\n    \\\"range\\\",\\n    \\\"relative_path\\\",\\n    \\\"render\\\",\\n    \\\"render_esi\\\",\\n    \\\"source\\\",\\n    \\\"template_from_string\\\",\\n    \\\"url|0\\\"\\n  ];\\n\\n  const FILTERS = [\\n    \\\"abs\\\",\\n    \\\"abbr_class\\\",\\n    \\\"abbr_method\\\",\\n    \\\"batch\\\",\\n    \\\"capitalize\\\",\\n    \\\"column\\\",\\n    \\\"convert_encoding\\\",\\n    \\\"country_name\\\",\\n    \\\"currency_name\\\",\\n    \\\"currency_symbol\\\",\\n    \\\"data_uri\\\",\\n    \\\"date\\\",\\n    \\\"date_modify\\\",\\n    \\\"default\\\",\\n    \\\"escape\\\",\\n    \\\"file_excerpt\\\",\\n    \\\"file_link\\\",\\n    \\\"file_relative\\\",\\n    \\\"filter\\\",\\n    \\\"first\\\",\\n    \\\"format\\\",\\n    \\\"format_args\\\",\\n    \\\"format_args_as_text\\\",\\n    \\\"format_currency\\\",\\n    \\\"format_date\\\",\\n    \\\"format_datetime\\\",\\n    \\\"format_file\\\",\\n    \\\"format_file_from_text\\\",\\n    \\\"format_number\\\",\\n    \\\"format_time\\\",\\n    \\\"html_to_markdown\\\",\\n    \\\"humanize\\\",\\n    \\\"inky_to_html\\\",\\n    \\\"inline_css\\\",\\n    \\\"join\\\",\\n    \\\"json_encode\\\",\\n    \\\"keys\\\",\\n    \\\"language_name\\\",\\n    \\\"last\\\",\\n    \\\"length\\\",\\n    \\\"locale_name\\\",\\n    \\\"lower\\\",\\n    \\\"map\\\",\\n    \\\"markdown\\\",\\n    \\\"markdown_to_html\\\",\\n    \\\"merge\\\",\\n    \\\"nl2br\\\",\\n    \\\"number_format\\\",\\n    \\\"raw\\\",\\n    \\\"reduce\\\",\\n    \\\"replace\\\",\\n    \\\"reverse\\\",\\n    \\\"round\\\",\\n    \\\"slice\\\",\\n    \\\"slug\\\",\\n    \\\"sort\\\",\\n    \\\"spaceless\\\",\\n    \\\"split\\\",\\n    \\\"striptags\\\",\\n    \\\"timezone_name\\\",\\n    \\\"title\\\",\\n    \\\"trans\\\",\\n    \\\"transchoice\\\",\\n    \\\"trim\\\",\\n    \\\"u|0\\\",\\n    \\\"upper\\\",\\n    \\\"url_encode\\\",\\n    \\\"yaml_dump\\\",\\n    \\\"yaml_encode\\\"\\n  ];\\n\\n  let TAG_NAMES = [\\n    \\\"apply\\\",\\n    \\\"autoescape\\\",\\n    \\\"block\\\",\\n    \\\"cache\\\",\\n    \\\"deprecated\\\",\\n    \\\"do\\\",\\n    \\\"embed\\\",\\n    \\\"extends\\\",\\n    \\\"filter\\\",\\n    \\\"flush\\\",\\n    \\\"for\\\",\\n    \\\"form_theme\\\",\\n    \\\"from\\\",\\n    \\\"if\\\",\\n    \\\"import\\\",\\n    \\\"include\\\",\\n    \\\"macro\\\",\\n    \\\"sandbox\\\",\\n    \\\"set\\\",\\n    \\\"stopwatch\\\",\\n    \\\"trans\\\",\\n    \\\"trans_default_domain\\\",\\n    \\\"transchoice\\\",\\n    \\\"use\\\",\\n    \\\"verbatim\\\",\\n    \\\"with\\\"\\n  ];\\n\\n  TAG_NAMES = TAG_NAMES.concat(TAG_NAMES.map(t => `end${t}`));\\n\\n  const STRING = {\\n    scope: 'string',\\n    variants: [\\n      {\\n        begin: /'/,\\n        end: /'/\\n      },\\n      {\\n        begin: /\\\"/,\\n        end: /\\\"/\\n      },\\n    ]\\n  };\\n\\n  const NUMBER = {\\n    scope: \\\"number\\\",\\n    match: /\\\\d+/\\n  };\\n\\n  const PARAMS = {\\n    begin: /\\\\(/,\\n    end: /\\\\)/,\\n    excludeBegin: true,\\n    excludeEnd: true,\\n    contains: [\\n      STRING,\\n      NUMBER\\n    ]\\n  };\\n\\n\\n  const FUNCTIONS = {\\n    beginKeywords: FUNCTION_NAMES.join(\\\" \\\"),\\n    keywords: { name: FUNCTION_NAMES },\\n    relevance: 0,\\n    contains: [ PARAMS ]\\n  };\\n\\n  const FILTER = {\\n    match: /\\\\|(?=[A-Za-z_]+:?)/,\\n    beginScope: \\\"punctuation\\\",\\n    relevance: 0,\\n    contains: [\\n      {\\n        match: /[A-Za-z_]+:?/,\\n        keywords: FILTERS\\n      },\\n    ]\\n  };\\n\\n  const tagNamed = (tagnames, { relevance }) => {\\n    return {\\n      beginScope: {\\n        1: 'template-tag',\\n        3: 'name'\\n      },\\n      relevance: relevance || 2,\\n      endScope: 'template-tag',\\n      begin: [\\n        /\\\\{%/,\\n        /\\\\s*/,\\n        regex.either(...tagnames)\\n      ],\\n      end: /%\\\\}/,\\n      keywords: \\\"in\\\",\\n      contains: [\\n        FILTER,\\n        FUNCTIONS,\\n        STRING,\\n        NUMBER\\n      ]\\n    };\\n  };\\n\\n  const CUSTOM_TAG_RE = /[a-z_]+/;\\n  const TAG = tagNamed(TAG_NAMES, { relevance: 2 });\\n  const CUSTOM_TAG = tagNamed([ CUSTOM_TAG_RE ], { relevance: 1 });\\n\\n  return {\\n    name: 'Twig',\\n    aliases: [ 'craftcms' ],\\n    case_insensitive: true,\\n    subLanguage: 'xml',\\n    contains: [\\n      hljs.COMMENT(/\\\\{#/, /#\\\\}/),\\n      TAG,\\n      CUSTOM_TAG,\\n      {\\n        className: 'template-variable',\\n        begin: /\\\\{\\\\{/,\\n        end: /\\\\}\\\\}/,\\n        contains: [\\n          'self',\\n          FILTER,\\n          FUNCTIONS,\\n          STRING,\\n          NUMBER\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = twig;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/twig.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/typescript.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/typescript.js ***!\n  \\***************************************************************/\n/***/ (function(module) {\n\neval(\"const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\\nconst KEYWORDS = [\\n  \\\"as\\\", // for exports\\n  \\\"in\\\",\\n  \\\"of\\\",\\n  \\\"if\\\",\\n  \\\"for\\\",\\n  \\\"while\\\",\\n  \\\"finally\\\",\\n  \\\"var\\\",\\n  \\\"new\\\",\\n  \\\"function\\\",\\n  \\\"do\\\",\\n  \\\"return\\\",\\n  \\\"void\\\",\\n  \\\"else\\\",\\n  \\\"break\\\",\\n  \\\"catch\\\",\\n  \\\"instanceof\\\",\\n  \\\"with\\\",\\n  \\\"throw\\\",\\n  \\\"case\\\",\\n  \\\"default\\\",\\n  \\\"try\\\",\\n  \\\"switch\\\",\\n  \\\"continue\\\",\\n  \\\"typeof\\\",\\n  \\\"delete\\\",\\n  \\\"let\\\",\\n  \\\"yield\\\",\\n  \\\"const\\\",\\n  \\\"class\\\",\\n  // JS handles these with a special rule\\n  // \\\"get\\\",\\n  // \\\"set\\\",\\n  \\\"debugger\\\",\\n  \\\"async\\\",\\n  \\\"await\\\",\\n  \\\"static\\\",\\n  \\\"import\\\",\\n  \\\"from\\\",\\n  \\\"export\\\",\\n  \\\"extends\\\"\\n];\\nconst LITERALS = [\\n  \\\"true\\\",\\n  \\\"false\\\",\\n  \\\"null\\\",\\n  \\\"undefined\\\",\\n  \\\"NaN\\\",\\n  \\\"Infinity\\\"\\n];\\n\\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\\nconst TYPES = [\\n  // Fundamental objects\\n  \\\"Object\\\",\\n  \\\"Function\\\",\\n  \\\"Boolean\\\",\\n  \\\"Symbol\\\",\\n  // numbers and dates\\n  \\\"Math\\\",\\n  \\\"Date\\\",\\n  \\\"Number\\\",\\n  \\\"BigInt\\\",\\n  // text\\n  \\\"String\\\",\\n  \\\"RegExp\\\",\\n  // Indexed collections\\n  \\\"Array\\\",\\n  \\\"Float32Array\\\",\\n  \\\"Float64Array\\\",\\n  \\\"Int8Array\\\",\\n  \\\"Uint8Array\\\",\\n  \\\"Uint8ClampedArray\\\",\\n  \\\"Int16Array\\\",\\n  \\\"Int32Array\\\",\\n  \\\"Uint16Array\\\",\\n  \\\"Uint32Array\\\",\\n  \\\"BigInt64Array\\\",\\n  \\\"BigUint64Array\\\",\\n  // Keyed collections\\n  \\\"Set\\\",\\n  \\\"Map\\\",\\n  \\\"WeakSet\\\",\\n  \\\"WeakMap\\\",\\n  // Structured data\\n  \\\"ArrayBuffer\\\",\\n  \\\"SharedArrayBuffer\\\",\\n  \\\"Atomics\\\",\\n  \\\"DataView\\\",\\n  \\\"JSON\\\",\\n  // Control abstraction objects\\n  \\\"Promise\\\",\\n  \\\"Generator\\\",\\n  \\\"GeneratorFunction\\\",\\n  \\\"AsyncFunction\\\",\\n  // Reflection\\n  \\\"Reflect\\\",\\n  \\\"Proxy\\\",\\n  // Internationalization\\n  \\\"Intl\\\",\\n  // WebAssembly\\n  \\\"WebAssembly\\\"\\n];\\n\\nconst ERROR_TYPES = [\\n  \\\"Error\\\",\\n  \\\"EvalError\\\",\\n  \\\"InternalError\\\",\\n  \\\"RangeError\\\",\\n  \\\"ReferenceError\\\",\\n  \\\"SyntaxError\\\",\\n  \\\"TypeError\\\",\\n  \\\"URIError\\\"\\n];\\n\\nconst BUILT_IN_GLOBALS = [\\n  \\\"setInterval\\\",\\n  \\\"setTimeout\\\",\\n  \\\"clearInterval\\\",\\n  \\\"clearTimeout\\\",\\n\\n  \\\"require\\\",\\n  \\\"exports\\\",\\n\\n  \\\"eval\\\",\\n  \\\"isFinite\\\",\\n  \\\"isNaN\\\",\\n  \\\"parseFloat\\\",\\n  \\\"parseInt\\\",\\n  \\\"decodeURI\\\",\\n  \\\"decodeURIComponent\\\",\\n  \\\"encodeURI\\\",\\n  \\\"encodeURIComponent\\\",\\n  \\\"escape\\\",\\n  \\\"unescape\\\"\\n];\\n\\nconst BUILT_IN_VARIABLES = [\\n  \\\"arguments\\\",\\n  \\\"this\\\",\\n  \\\"super\\\",\\n  \\\"console\\\",\\n  \\\"window\\\",\\n  \\\"document\\\",\\n  \\\"localStorage\\\",\\n  \\\"sessionStorage\\\",\\n  \\\"module\\\",\\n  \\\"global\\\" // Node.js\\n];\\n\\nconst BUILT_INS = [].concat(\\n  BUILT_IN_GLOBALS,\\n  TYPES,\\n  ERROR_TYPES\\n);\\n\\n/*\\nLanguage: JavaScript\\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\\nCategory: common, scripting, web\\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\\n*/\\n\\n/** @type LanguageFn */\\nfunction javascript(hljs) {\\n  const regex = hljs.regex;\\n  /**\\n   * Takes a string like \\\"<Booger\\\" and checks to see\\n   * if we can find a matching \\\"</Booger\\\" later in the\\n   * content.\\n   * @param {RegExpMatchArray} match\\n   * @param {{after:number}} param1\\n   */\\n  const hasClosingTag = (match, { after }) => {\\n    const tag = \\\"</\\\" + match[0].slice(1);\\n    const pos = match.input.indexOf(tag, after);\\n    return pos !== -1;\\n  };\\n\\n  const IDENT_RE$1 = IDENT_RE;\\n  const FRAGMENT = {\\n    begin: '<>',\\n    end: '</>'\\n  };\\n  // to avoid some special cases inside isTrulyOpeningTag\\n  const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\\\\\._:-]+\\\\s*\\\\/>/;\\n  const XML_TAG = {\\n    begin: /<[A-Za-z0-9\\\\\\\\._:-]+/,\\n    end: /\\\\/[A-Za-z0-9\\\\\\\\._:-]+>|\\\\/>/,\\n    /**\\n     * @param {RegExpMatchArray} match\\n     * @param {CallbackResponse} response\\n     */\\n    isTrulyOpeningTag: (match, response) => {\\n      const afterMatchIndex = match[0].length + match.index;\\n      const nextChar = match.input[afterMatchIndex];\\n      if (\\n        // HTML should not include another raw `<` inside a tag\\n        // nested type?\\n        // `<Array<Array<number>>`, etc.\\n        nextChar === \\\"<\\\" ||\\n        // the , gives away that this is not HTML\\n        // `<T, A extends keyof T, V>`\\n        nextChar === \\\",\\\"\\n        ) {\\n        response.ignoreMatch();\\n        return;\\n      }\\n\\n      // `<something>`\\n      // Quite possibly a tag, lets look for a matching closing tag...\\n      if (nextChar === \\\">\\\") {\\n        // if we cannot find a matching closing tag, then we\\n        // will ignore it\\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\\n          response.ignoreMatch();\\n        }\\n      }\\n\\n      // `<blah />` (self-closing)\\n      // handled by simpleSelfClosing rule\\n\\n      let m;\\n      const afterMatch = match.input.substring(afterMatchIndex);\\n\\n      // some more template typing stuff\\n      //  <T = any>(key?: string) => Modify<\\n      if ((m = afterMatch.match(/^\\\\s*=/))) {\\n        response.ignoreMatch();\\n        return;\\n      }\\n\\n      // `<From extends string>`\\n      // technically this could be HTML, but it smells like a type\\n      // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\\n      if ((m = afterMatch.match(/^\\\\s+extends\\\\s+/))) {\\n        if (m.index === 0) {\\n          response.ignoreMatch();\\n          // eslint-disable-next-line no-useless-return\\n          return;\\n        }\\n      }\\n    }\\n  };\\n  const KEYWORDS$1 = {\\n    $pattern: IDENT_RE,\\n    keyword: KEYWORDS,\\n    literal: LITERALS,\\n    built_in: BUILT_INS,\\n    \\\"variable.language\\\": BUILT_IN_VARIABLES\\n  };\\n\\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\\n  const decimalDigits = '[0-9](_?[0-9])*';\\n  const frac = `\\\\\\\\.(${decimalDigits})`;\\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\\n  const NUMBER = {\\n    className: 'number',\\n    variants: [\\n      // DecimalLiteral\\n      { begin: `(\\\\\\\\b(${decimalInteger})((${frac})|\\\\\\\\.)?|(${frac}))` +\\n        `[eE][+-]?(${decimalDigits})\\\\\\\\b` },\\n      { begin: `\\\\\\\\b(${decimalInteger})\\\\\\\\b((${frac})\\\\\\\\b|\\\\\\\\.)?|(${frac})\\\\\\\\b` },\\n\\n      // DecimalBigIntegerLiteral\\n      { begin: `\\\\\\\\b(0|[1-9](_?[0-9])*)n\\\\\\\\b` },\\n\\n      // NonDecimalIntegerLiteral\\n      { begin: \\\"\\\\\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\\\\\b\\\" },\\n      { begin: \\\"\\\\\\\\b0[bB][0-1](_?[0-1])*n?\\\\\\\\b\\\" },\\n      { begin: \\\"\\\\\\\\b0[oO][0-7](_?[0-7])*n?\\\\\\\\b\\\" },\\n\\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\\n      { begin: \\\"\\\\\\\\b0[0-7]+n?\\\\\\\\b\\\" },\\n    ],\\n    relevance: 0\\n  };\\n\\n  const SUBST = {\\n    className: 'subst',\\n    begin: '\\\\\\\\$\\\\\\\\{',\\n    end: '\\\\\\\\}',\\n    keywords: KEYWORDS$1,\\n    contains: [] // defined later\\n  };\\n  const HTML_TEMPLATE = {\\n    begin: 'html`',\\n    end: '',\\n    starts: {\\n      end: '`',\\n      returnEnd: false,\\n      contains: [\\n        hljs.BACKSLASH_ESCAPE,\\n        SUBST\\n      ],\\n      subLanguage: 'xml'\\n    }\\n  };\\n  const CSS_TEMPLATE = {\\n    begin: 'css`',\\n    end: '',\\n    starts: {\\n      end: '`',\\n      returnEnd: false,\\n      contains: [\\n        hljs.BACKSLASH_ESCAPE,\\n        SUBST\\n      ],\\n      subLanguage: 'css'\\n    }\\n  };\\n  const GRAPHQL_TEMPLATE = {\\n    begin: 'gql`',\\n    end: '',\\n    starts: {\\n      end: '`',\\n      returnEnd: false,\\n      contains: [\\n        hljs.BACKSLASH_ESCAPE,\\n        SUBST\\n      ],\\n      subLanguage: 'graphql'\\n    }\\n  };\\n  const TEMPLATE_STRING = {\\n    className: 'string',\\n    begin: '`',\\n    end: '`',\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      SUBST\\n    ]\\n  };\\n  const JSDOC_COMMENT = hljs.COMMENT(\\n    /\\\\/\\\\*\\\\*(?!\\\\/)/,\\n    '\\\\\\\\*/',\\n    {\\n      relevance: 0,\\n      contains: [\\n        {\\n          begin: '(?=@[A-Za-z]+)',\\n          relevance: 0,\\n          contains: [\\n            {\\n              className: 'doctag',\\n              begin: '@[A-Za-z]+'\\n            },\\n            {\\n              className: 'type',\\n              begin: '\\\\\\\\{',\\n              end: '\\\\\\\\}',\\n              excludeEnd: true,\\n              excludeBegin: true,\\n              relevance: 0\\n            },\\n            {\\n              className: 'variable',\\n              begin: IDENT_RE$1 + '(?=\\\\\\\\s*(-)|$)',\\n              endsParent: true,\\n              relevance: 0\\n            },\\n            // eat spaces (not newlines) so we can find\\n            // types or variables\\n            {\\n              begin: /(?=[^\\\\n])\\\\s/,\\n              relevance: 0\\n            }\\n          ]\\n        }\\n      ]\\n    }\\n  );\\n  const COMMENT = {\\n    className: \\\"comment\\\",\\n    variants: [\\n      JSDOC_COMMENT,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.C_LINE_COMMENT_MODE\\n    ]\\n  };\\n  const SUBST_INTERNALS = [\\n    hljs.APOS_STRING_MODE,\\n    hljs.QUOTE_STRING_MODE,\\n    HTML_TEMPLATE,\\n    CSS_TEMPLATE,\\n    GRAPHQL_TEMPLATE,\\n    TEMPLATE_STRING,\\n    // Skip numbers when they are part of a variable name\\n    { match: /\\\\$\\\\d+/ },\\n    NUMBER,\\n    // This is intentional:\\n    // See https://github.com/highlightjs/highlight.js/issues/3288\\n    // hljs.REGEXP_MODE\\n  ];\\n  SUBST.contains = SUBST_INTERNALS\\n    .concat({\\n      // we need to pair up {} inside our subst to prevent\\n      // it from ending too early by matching another }\\n      begin: /\\\\{/,\\n      end: /\\\\}/,\\n      keywords: KEYWORDS$1,\\n      contains: [\\n        \\\"self\\\"\\n      ].concat(SUBST_INTERNALS)\\n    });\\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\\n    // eat recursive parens in sub expressions\\n    {\\n      begin: /\\\\(/,\\n      end: /\\\\)/,\\n      keywords: KEYWORDS$1,\\n      contains: [\\\"self\\\"].concat(SUBST_AND_COMMENTS)\\n    }\\n  ]);\\n  const PARAMS = {\\n    className: 'params',\\n    begin: /\\\\(/,\\n    end: /\\\\)/,\\n    excludeBegin: true,\\n    excludeEnd: true,\\n    keywords: KEYWORDS$1,\\n    contains: PARAMS_CONTAINS\\n  };\\n\\n  // ES6 classes\\n  const CLASS_OR_EXTENDS = {\\n    variants: [\\n      // class Car extends vehicle\\n      {\\n        match: [\\n          /class/,\\n          /\\\\s+/,\\n          IDENT_RE$1,\\n          /\\\\s+/,\\n          /extends/,\\n          /\\\\s+/,\\n          regex.concat(IDENT_RE$1, \\\"(\\\", regex.concat(/\\\\./, IDENT_RE$1), \\\")*\\\")\\n        ],\\n        scope: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title.class\\\",\\n          5: \\\"keyword\\\",\\n          7: \\\"title.class.inherited\\\"\\n        }\\n      },\\n      // class Car\\n      {\\n        match: [\\n          /class/,\\n          /\\\\s+/,\\n          IDENT_RE$1\\n        ],\\n        scope: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title.class\\\"\\n        }\\n      },\\n\\n    ]\\n  };\\n\\n  const CLASS_REFERENCE = {\\n    relevance: 0,\\n    match:\\n    regex.either(\\n      // Hard coded exceptions\\n      /\\\\bJSON/,\\n      // Float32Array, OutT\\n      /\\\\b[A-Z][a-z]+([A-Z][a-z]*|\\\\d)*/,\\n      // CSSFactory, CSSFactoryT\\n      /\\\\b[A-Z]{2,}([A-Z][a-z]+|\\\\d)+([A-Z][a-z]*)*/,\\n      // FPs, FPsT\\n      /\\\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\\\d)*([A-Z][a-z]*)*/,\\n      // P\\n      // single letters are not highlighted\\n      // BLAH\\n      // this will be flagged as a UPPER_CASE_CONSTANT instead\\n    ),\\n    className: \\\"title.class\\\",\\n    keywords: {\\n      _: [\\n        // se we still get relevance credit for JS library classes\\n        ...TYPES,\\n        ...ERROR_TYPES\\n      ]\\n    }\\n  };\\n\\n  const USE_STRICT = {\\n    label: \\\"use_strict\\\",\\n    className: 'meta',\\n    relevance: 10,\\n    begin: /^\\\\s*['\\\"]use (strict|asm)['\\\"]/\\n  };\\n\\n  const FUNCTION_DEFINITION = {\\n    variants: [\\n      {\\n        match: [\\n          /function/,\\n          /\\\\s+/,\\n          IDENT_RE$1,\\n          /(?=\\\\s*\\\\()/\\n        ]\\n      },\\n      // anonymous function\\n      {\\n        match: [\\n          /function/,\\n          /\\\\s*(?=\\\\()/\\n        ]\\n      }\\n    ],\\n    className: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.function\\\"\\n    },\\n    label: \\\"func.def\\\",\\n    contains: [ PARAMS ],\\n    illegal: /%/\\n  };\\n\\n  const UPPER_CASE_CONSTANT = {\\n    relevance: 0,\\n    match: /\\\\b[A-Z][A-Z_0-9]+\\\\b/,\\n    className: \\\"variable.constant\\\"\\n  };\\n\\n  function noneOf(list) {\\n    return regex.concat(\\\"(?!\\\", list.join(\\\"|\\\"), \\\")\\\");\\n  }\\n\\n  const FUNCTION_CALL = {\\n    match: regex.concat(\\n      /\\\\b/,\\n      noneOf([\\n        ...BUILT_IN_GLOBALS,\\n        \\\"super\\\",\\n        \\\"import\\\"\\n      ]),\\n      IDENT_RE$1, regex.lookahead(/\\\\(/)),\\n    className: \\\"title.function\\\",\\n    relevance: 0\\n  };\\n\\n  const PROPERTY_ACCESS = {\\n    begin: regex.concat(/\\\\./, regex.lookahead(\\n      regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\\n    )),\\n    end: IDENT_RE$1,\\n    excludeBegin: true,\\n    keywords: \\\"prototype\\\",\\n    className: \\\"property\\\",\\n    relevance: 0\\n  };\\n\\n  const GETTER_OR_SETTER = {\\n    match: [\\n      /get|set/,\\n      /\\\\s+/,\\n      IDENT_RE$1,\\n      /(?=\\\\()/\\n    ],\\n    className: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.function\\\"\\n    },\\n    contains: [\\n      { // eat to avoid empty params\\n        begin: /\\\\(\\\\)/\\n      },\\n      PARAMS\\n    ]\\n  };\\n\\n  const FUNC_LEAD_IN_RE = '(\\\\\\\\(' +\\n    '[^()]*(\\\\\\\\(' +\\n    '[^()]*(\\\\\\\\(' +\\n    '[^()]*' +\\n    '\\\\\\\\)[^()]*)*' +\\n    '\\\\\\\\)[^()]*)*' +\\n    '\\\\\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\\\\\s*=>';\\n\\n  const FUNCTION_VARIABLE = {\\n    match: [\\n      /const|var|let/, /\\\\s+/,\\n      IDENT_RE$1, /\\\\s*/,\\n      /=\\\\s*/,\\n      /(async\\\\s*)?/, // async is optional\\n      regex.lookahead(FUNC_LEAD_IN_RE)\\n    ],\\n    keywords: \\\"async\\\",\\n    className: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.function\\\"\\n    },\\n    contains: [\\n      PARAMS\\n    ]\\n  };\\n\\n  return {\\n    name: 'JavaScript',\\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\\n    keywords: KEYWORDS$1,\\n    // this will be extended by TypeScript\\n    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\\n    illegal: /#(?![$_A-z])/,\\n    contains: [\\n      hljs.SHEBANG({\\n        label: \\\"shebang\\\",\\n        binary: \\\"node\\\",\\n        relevance: 5\\n      }),\\n      USE_STRICT,\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      HTML_TEMPLATE,\\n      CSS_TEMPLATE,\\n      GRAPHQL_TEMPLATE,\\n      TEMPLATE_STRING,\\n      COMMENT,\\n      // Skip numbers when they are part of a variable name\\n      { match: /\\\\$\\\\d+/ },\\n      NUMBER,\\n      CLASS_REFERENCE,\\n      {\\n        className: 'attr',\\n        begin: IDENT_RE$1 + regex.lookahead(':'),\\n        relevance: 0\\n      },\\n      FUNCTION_VARIABLE,\\n      { // \\\"value\\\" container\\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\\\\\b(case|return|throw)\\\\\\\\b)\\\\\\\\s*',\\n        keywords: 'return throw case',\\n        relevance: 0,\\n        contains: [\\n          COMMENT,\\n          hljs.REGEXP_MODE,\\n          {\\n            className: 'function',\\n            // we have to count the parens to make sure we actually have the\\n            // correct bounding ( ) before the =>.  There could be any number of\\n            // sub-expressions inside also surrounded by parens.\\n            begin: FUNC_LEAD_IN_RE,\\n            returnBegin: true,\\n            end: '\\\\\\\\s*=>',\\n            contains: [\\n              {\\n                className: 'params',\\n                variants: [\\n                  {\\n                    begin: hljs.UNDERSCORE_IDENT_RE,\\n                    relevance: 0\\n                  },\\n                  {\\n                    className: null,\\n                    begin: /\\\\(\\\\s*\\\\)/,\\n                    skip: true\\n                  },\\n                  {\\n                    begin: /\\\\(/,\\n                    end: /\\\\)/,\\n                    excludeBegin: true,\\n                    excludeEnd: true,\\n                    keywords: KEYWORDS$1,\\n                    contains: PARAMS_CONTAINS\\n                  }\\n                ]\\n              }\\n            ]\\n          },\\n          { // could be a comma delimited list of params to a function call\\n            begin: /,/,\\n            relevance: 0\\n          },\\n          {\\n            match: /\\\\s+/,\\n            relevance: 0\\n          },\\n          { // JSX\\n            variants: [\\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\\n              { match: XML_SELF_CLOSING },\\n              {\\n                begin: XML_TAG.begin,\\n                // we carefully check the opening tag to see if it truly\\n                // is a tag and not a false positive\\n                'on:begin': XML_TAG.isTrulyOpeningTag,\\n                end: XML_TAG.end\\n              }\\n            ],\\n            subLanguage: 'xml',\\n            contains: [\\n              {\\n                begin: XML_TAG.begin,\\n                end: XML_TAG.end,\\n                skip: true,\\n                contains: ['self']\\n              }\\n            ]\\n          }\\n        ],\\n      },\\n      FUNCTION_DEFINITION,\\n      {\\n        // prevent this from getting swallowed up by function\\n        // since they appear \\\"function like\\\"\\n        beginKeywords: \\\"while if switch catch for\\\"\\n      },\\n      {\\n        // we have to count the parens to make sure we actually have the correct\\n        // bounding ( ).  There could be any number of sub-expressions inside\\n        // also surrounded by parens.\\n        begin: '\\\\\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\\n          '\\\\\\\\(' + // first parens\\n          '[^()]*(\\\\\\\\(' +\\n            '[^()]*(\\\\\\\\(' +\\n              '[^()]*' +\\n            '\\\\\\\\)[^()]*)*' +\\n          '\\\\\\\\)[^()]*)*' +\\n          '\\\\\\\\)\\\\\\\\s*\\\\\\\\{', // end parens\\n        returnBegin:true,\\n        label: \\\"func.def\\\",\\n        contains: [\\n          PARAMS,\\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \\\"title.function\\\" })\\n        ]\\n      },\\n      // catch ... so it won't trigger the property rule below\\n      {\\n        match: /\\\\.\\\\.\\\\./,\\n        relevance: 0\\n      },\\n      PROPERTY_ACCESS,\\n      // hack: prevents detection of keywords in some circumstances\\n      // .keyword()\\n      // $keyword = x\\n      {\\n        match: '\\\\\\\\$' + IDENT_RE$1,\\n        relevance: 0\\n      },\\n      {\\n        match: [ /\\\\bconstructor(?=\\\\s*\\\\()/ ],\\n        className: { 1: \\\"title.function\\\" },\\n        contains: [ PARAMS ]\\n      },\\n      FUNCTION_CALL,\\n      UPPER_CASE_CONSTANT,\\n      CLASS_OR_EXTENDS,\\n      GETTER_OR_SETTER,\\n      {\\n        match: /\\\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\\n      }\\n    ]\\n  };\\n}\\n\\n/*\\nLanguage: TypeScript\\nAuthor: Panu Horsmalahti <panu.horsmalahti@iki.fi>\\nContributors: Ike Ku <dempfi@yahoo.com>\\nDescription: TypeScript is a strict superset of JavaScript\\nWebsite: https://www.typescriptlang.org\\nCategory: common, scripting\\n*/\\n\\n/** @type LanguageFn */\\nfunction typescript(hljs) {\\n  const tsLanguage = javascript(hljs);\\n\\n  const IDENT_RE$1 = IDENT_RE;\\n  const TYPES = [\\n    \\\"any\\\",\\n    \\\"void\\\",\\n    \\\"number\\\",\\n    \\\"boolean\\\",\\n    \\\"string\\\",\\n    \\\"object\\\",\\n    \\\"never\\\",\\n    \\\"symbol\\\",\\n    \\\"bigint\\\",\\n    \\\"unknown\\\"\\n  ];\\n  const NAMESPACE = {\\n    beginKeywords: 'namespace',\\n    end: /\\\\{/,\\n    excludeEnd: true,\\n    contains: [ tsLanguage.exports.CLASS_REFERENCE ]\\n  };\\n  const INTERFACE = {\\n    beginKeywords: 'interface',\\n    end: /\\\\{/,\\n    excludeEnd: true,\\n    keywords: {\\n      keyword: 'interface extends',\\n      built_in: TYPES\\n    },\\n    contains: [ tsLanguage.exports.CLASS_REFERENCE ]\\n  };\\n  const USE_STRICT = {\\n    className: 'meta',\\n    relevance: 10,\\n    begin: /^\\\\s*['\\\"]use strict['\\\"]/\\n  };\\n  const TS_SPECIFIC_KEYWORDS = [\\n    \\\"type\\\",\\n    \\\"namespace\\\",\\n    \\\"interface\\\",\\n    \\\"public\\\",\\n    \\\"private\\\",\\n    \\\"protected\\\",\\n    \\\"implements\\\",\\n    \\\"declare\\\",\\n    \\\"abstract\\\",\\n    \\\"readonly\\\",\\n    \\\"enum\\\",\\n    \\\"override\\\"\\n  ];\\n  const KEYWORDS$1 = {\\n    $pattern: IDENT_RE,\\n    keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),\\n    literal: LITERALS,\\n    built_in: BUILT_INS.concat(TYPES),\\n    \\\"variable.language\\\": BUILT_IN_VARIABLES\\n  };\\n  const DECORATOR = {\\n    className: 'meta',\\n    begin: '@' + IDENT_RE$1,\\n  };\\n\\n  const swapMode = (mode, label, replacement) => {\\n    const indx = mode.contains.findIndex(m => m.label === label);\\n    if (indx === -1) { throw new Error(\\\"can not find mode to replace\\\"); }\\n\\n    mode.contains.splice(indx, 1, replacement);\\n  };\\n\\n\\n  // this should update anywhere keywords is used since\\n  // it will be the same actual JS object\\n  Object.assign(tsLanguage.keywords, KEYWORDS$1);\\n\\n  tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);\\n  tsLanguage.contains = tsLanguage.contains.concat([\\n    DECORATOR,\\n    NAMESPACE,\\n    INTERFACE,\\n  ]);\\n\\n  // TS gets a simpler shebang rule than JS\\n  swapMode(tsLanguage, \\\"shebang\\\", hljs.SHEBANG());\\n  // JS use strict rule purposely excludes `asm` which makes no sense\\n  swapMode(tsLanguage, \\\"use_strict\\\", USE_STRICT);\\n\\n  const functionDeclaration = tsLanguage.contains.find(m => m.label === \\\"func.def\\\");\\n  functionDeclaration.relevance = 0; // () => {} is more typical in TypeScript\\n\\n  Object.assign(tsLanguage, {\\n    name: 'TypeScript',\\n    aliases: [\\n      'ts',\\n      'tsx',\\n      'mts',\\n      'cts'\\n    ]\\n  });\\n\\n  return tsLanguage;\\n}\\n\\nmodule.exports = typescript;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/typescript.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/vala.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/vala.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Vala\\nAuthor: Antono Vasiljev <antono.vasiljev@gmail.com>\\nDescription: Vala is a new programming language that aims to bring modern programming language features to GNOME developers without imposing any additional runtime requirements and without using a different ABI compared to applications and libraries written in C.\\nWebsite: https://wiki.gnome.org/Projects/Vala\\n*/\\n\\nfunction vala(hljs) {\\n  return {\\n    name: 'Vala',\\n    keywords: {\\n      keyword:\\n        // Value types\\n        'char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 '\\n        + 'uint16 uint32 uint64 float double bool struct enum string void '\\n        // Reference types\\n        + 'weak unowned owned '\\n        // Modifiers\\n        + 'async signal static abstract interface override virtual delegate '\\n        // Control Structures\\n        + 'if while do for foreach else switch case break default return try catch '\\n        // Visibility\\n        + 'public private protected internal '\\n        // Other\\n        + 'using new this get set const stdout stdin stderr var',\\n      built_in:\\n        'DBus GLib CCode Gee Object Gtk Posix',\\n      literal:\\n        'false true null'\\n    },\\n    contains: [\\n      {\\n        className: 'class',\\n        beginKeywords: 'class interface namespace',\\n        end: /\\\\{/,\\n        excludeEnd: true,\\n        illegal: '[^,:\\\\\\\\n\\\\\\\\s\\\\\\\\.]',\\n        contains: [ hljs.UNDERSCORE_TITLE_MODE ]\\n      },\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      {\\n        className: 'string',\\n        begin: '\\\"\\\"\\\"',\\n        end: '\\\"\\\"\\\"',\\n        relevance: 5\\n      },\\n      hljs.APOS_STRING_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      hljs.C_NUMBER_MODE,\\n      {\\n        className: 'meta',\\n        begin: '^#',\\n        end: '$',\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = vala;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/vala.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/vbnet.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/vbnet.js ***!\n  \\**********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Visual Basic .NET\\nDescription: Visual Basic .NET (VB.NET) is a multi-paradigm, object-oriented programming language, implemented on the .NET Framework.\\nAuthors: Poren Chiang <ren.chiang@gmail.com>, Jan Pilzer\\nWebsite: https://docs.microsoft.com/dotnet/visual-basic/getting-started\\nCategory: common\\n*/\\n\\n/** @type LanguageFn */\\nfunction vbnet(hljs) {\\n  const regex = hljs.regex;\\n  /**\\n   * Character Literal\\n   * Either a single character (\\\"a\\\"C) or an escaped double quote (\\\"\\\"\\\"\\\"C).\\n   */\\n  const CHARACTER = {\\n    className: 'string',\\n    begin: /\\\"(\\\"\\\"|[^/n])\\\"C\\\\b/\\n  };\\n\\n  const STRING = {\\n    className: 'string',\\n    begin: /\\\"/,\\n    end: /\\\"/,\\n    illegal: /\\\\n/,\\n    contains: [\\n      {\\n        // double quote escape\\n        begin: /\\\"\\\"/ }\\n    ]\\n  };\\n\\n  /** Date Literals consist of a date, a time, or both separated by whitespace, surrounded by # */\\n  const MM_DD_YYYY = /\\\\d{1,2}\\\\/\\\\d{1,2}\\\\/\\\\d{4}/;\\n  const YYYY_MM_DD = /\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}/;\\n  const TIME_12H = /(\\\\d|1[012])(:\\\\d+){0,2} *(AM|PM)/;\\n  const TIME_24H = /\\\\d{1,2}(:\\\\d{1,2}){1,2}/;\\n  const DATE = {\\n    className: 'literal',\\n    variants: [\\n      {\\n        // #YYYY-MM-DD# (ISO-Date) or #M/D/YYYY# (US-Date)\\n        begin: regex.concat(/# */, regex.either(YYYY_MM_DD, MM_DD_YYYY), / *#/) },\\n      {\\n        // #H:mm[:ss]# (24h Time)\\n        begin: regex.concat(/# */, TIME_24H, / *#/) },\\n      {\\n        // #h[:mm[:ss]] A# (12h Time)\\n        begin: regex.concat(/# */, TIME_12H, / *#/) },\\n      {\\n        // date plus time\\n        begin: regex.concat(\\n          /# */,\\n          regex.either(YYYY_MM_DD, MM_DD_YYYY),\\n          / +/,\\n          regex.either(TIME_12H, TIME_24H),\\n          / *#/\\n        ) }\\n    ]\\n  };\\n\\n  const NUMBER = {\\n    className: 'number',\\n    relevance: 0,\\n    variants: [\\n      {\\n        // Float\\n        begin: /\\\\b\\\\d[\\\\d_]*((\\\\.[\\\\d_]+(E[+-]?[\\\\d_]+)?)|(E[+-]?[\\\\d_]+))[RFD@!#]?/ },\\n      {\\n        // Integer (base 10)\\n        begin: /\\\\b\\\\d[\\\\d_]*((U?[SIL])|[%&])?/ },\\n      {\\n        // Integer (base 16)\\n        begin: /&H[\\\\dA-F_]+((U?[SIL])|[%&])?/ },\\n      {\\n        // Integer (base 8)\\n        begin: /&O[0-7_]+((U?[SIL])|[%&])?/ },\\n      {\\n        // Integer (base 2)\\n        begin: /&B[01_]+((U?[SIL])|[%&])?/ }\\n    ]\\n  };\\n\\n  const LABEL = {\\n    className: 'label',\\n    begin: /^\\\\w+:/\\n  };\\n\\n  const DOC_COMMENT = hljs.COMMENT(/'''/, /$/, { contains: [\\n    {\\n      className: 'doctag',\\n      begin: /<\\\\/?/,\\n      end: />/\\n    }\\n  ] });\\n\\n  const COMMENT = hljs.COMMENT(null, /$/, { variants: [\\n    { begin: /'/ },\\n    {\\n      // TODO: Use multi-class for leading spaces\\n      begin: /([\\\\t ]|^)REM(?=\\\\s)/ }\\n  ] });\\n\\n  const DIRECTIVES = {\\n    className: 'meta',\\n    // TODO: Use multi-class for indentation once available\\n    begin: /[\\\\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\\\\b/,\\n    end: /$/,\\n    keywords: { keyword:\\n        'const disable else elseif enable end externalsource if region then' },\\n    contains: [ COMMENT ]\\n  };\\n\\n  return {\\n    name: 'Visual Basic .NET',\\n    aliases: [ 'vb' ],\\n    case_insensitive: true,\\n    classNameAliases: { label: 'symbol' },\\n    keywords: {\\n      keyword:\\n        'addhandler alias aggregate ansi as async assembly auto binary by byref byval ' /* a-b */\\n        + 'call case catch class compare const continue custom declare default delegate dim distinct do ' /* c-d */\\n        + 'each equals else elseif end enum erase error event exit explicit finally for friend from function ' /* e-f */\\n        + 'get global goto group handles if implements imports in inherits interface into iterator ' /* g-i */\\n        + 'join key let lib loop me mid module mustinherit mustoverride mybase myclass ' /* j-m */\\n        + 'namespace narrowing new next notinheritable notoverridable ' /* n */\\n        + 'of off on operator option optional order overloads overridable overrides ' /* o */\\n        + 'paramarray partial preserve private property protected public ' /* p */\\n        + 'raiseevent readonly redim removehandler resume return ' /* r */\\n        + 'select set shadows shared skip static step stop structure strict sub synclock ' /* s */\\n        + 'take text then throw to try unicode until using when where while widening with withevents writeonly yield' /* t-y */,\\n      built_in:\\n        // Operators https://docs.microsoft.com/dotnet/visual-basic/language-reference/operators\\n        'addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor '\\n        // Type Conversion Functions https://docs.microsoft.com/dotnet/visual-basic/language-reference/functions/type-conversion-functions\\n        + 'cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort',\\n      type:\\n        // Data types https://docs.microsoft.com/dotnet/visual-basic/language-reference/data-types\\n        'boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort',\\n      literal: 'true false nothing'\\n    },\\n    illegal:\\n      '//|\\\\\\\\{|\\\\\\\\}|endif|gosub|variant|wend|^\\\\\\\\$ ' /* reserved deprecated keywords */,\\n    contains: [\\n      CHARACTER,\\n      STRING,\\n      DATE,\\n      NUMBER,\\n      LABEL,\\n      DOC_COMMENT,\\n      COMMENT,\\n      DIRECTIVES\\n    ]\\n  };\\n}\\n\\nmodule.exports = vbnet;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/vbnet.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/vbscript-html.js\":\n/*!******************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/vbscript-html.js ***!\n  \\******************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: VBScript in HTML\\nRequires: xml.js, vbscript.js\\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\\nDescription: \\\"Bridge\\\" language defining fragments of VBScript in HTML within <% .. %>\\nWebsite: https://en.wikipedia.org/wiki/VBScript\\nCategory: scripting\\n*/\\n\\nfunction vbscriptHtml(hljs) {\\n  return {\\n    name: 'VBScript in HTML',\\n    subLanguage: 'xml',\\n    contains: [\\n      {\\n        begin: '<%',\\n        end: '%>',\\n        subLanguage: 'vbscript'\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = vbscriptHtml;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/vbscript-html.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/vbscript.js\":\n/*!*************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/vbscript.js ***!\n  \\*************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: VBScript\\nDescription: VBScript (\\\"Microsoft Visual Basic Scripting Edition\\\") is an Active Scripting language developed by Microsoft that is modeled on Visual Basic.\\nAuthor: Nikita Ledyaev <lenikita@yandex.ru>\\nContributors: Michal Gabrukiewicz <mgabru@gmail.com>\\nWebsite: https://en.wikipedia.org/wiki/VBScript\\nCategory: scripting\\n*/\\n\\n/** @type LanguageFn */\\nfunction vbscript(hljs) {\\n  const regex = hljs.regex;\\n  const BUILT_IN_FUNCTIONS = [\\n    \\\"lcase\\\",\\n    \\\"month\\\",\\n    \\\"vartype\\\",\\n    \\\"instrrev\\\",\\n    \\\"ubound\\\",\\n    \\\"setlocale\\\",\\n    \\\"getobject\\\",\\n    \\\"rgb\\\",\\n    \\\"getref\\\",\\n    \\\"string\\\",\\n    \\\"weekdayname\\\",\\n    \\\"rnd\\\",\\n    \\\"dateadd\\\",\\n    \\\"monthname\\\",\\n    \\\"now\\\",\\n    \\\"day\\\",\\n    \\\"minute\\\",\\n    \\\"isarray\\\",\\n    \\\"cbool\\\",\\n    \\\"round\\\",\\n    \\\"formatcurrency\\\",\\n    \\\"conversions\\\",\\n    \\\"csng\\\",\\n    \\\"timevalue\\\",\\n    \\\"second\\\",\\n    \\\"year\\\",\\n    \\\"space\\\",\\n    \\\"abs\\\",\\n    \\\"clng\\\",\\n    \\\"timeserial\\\",\\n    \\\"fixs\\\",\\n    \\\"len\\\",\\n    \\\"asc\\\",\\n    \\\"isempty\\\",\\n    \\\"maths\\\",\\n    \\\"dateserial\\\",\\n    \\\"atn\\\",\\n    \\\"timer\\\",\\n    \\\"isobject\\\",\\n    \\\"filter\\\",\\n    \\\"weekday\\\",\\n    \\\"datevalue\\\",\\n    \\\"ccur\\\",\\n    \\\"isdate\\\",\\n    \\\"instr\\\",\\n    \\\"datediff\\\",\\n    \\\"formatdatetime\\\",\\n    \\\"replace\\\",\\n    \\\"isnull\\\",\\n    \\\"right\\\",\\n    \\\"sgn\\\",\\n    \\\"array\\\",\\n    \\\"snumeric\\\",\\n    \\\"log\\\",\\n    \\\"cdbl\\\",\\n    \\\"hex\\\",\\n    \\\"chr\\\",\\n    \\\"lbound\\\",\\n    \\\"msgbox\\\",\\n    \\\"ucase\\\",\\n    \\\"getlocale\\\",\\n    \\\"cos\\\",\\n    \\\"cdate\\\",\\n    \\\"cbyte\\\",\\n    \\\"rtrim\\\",\\n    \\\"join\\\",\\n    \\\"hour\\\",\\n    \\\"oct\\\",\\n    \\\"typename\\\",\\n    \\\"trim\\\",\\n    \\\"strcomp\\\",\\n    \\\"int\\\",\\n    \\\"createobject\\\",\\n    \\\"loadpicture\\\",\\n    \\\"tan\\\",\\n    \\\"formatnumber\\\",\\n    \\\"mid\\\",\\n    \\\"split\\\",\\n    \\\"cint\\\",\\n    \\\"sin\\\",\\n    \\\"datepart\\\",\\n    \\\"ltrim\\\",\\n    \\\"sqr\\\",\\n    \\\"time\\\",\\n    \\\"derived\\\",\\n    \\\"eval\\\",\\n    \\\"date\\\",\\n    \\\"formatpercent\\\",\\n    \\\"exp\\\",\\n    \\\"inputbox\\\",\\n    \\\"left\\\",\\n    \\\"ascw\\\",\\n    \\\"chrw\\\",\\n    \\\"regexp\\\",\\n    \\\"cstr\\\",\\n    \\\"err\\\"\\n  ];\\n  const BUILT_IN_OBJECTS = [\\n    \\\"server\\\",\\n    \\\"response\\\",\\n    \\\"request\\\",\\n    // take no arguments so can be called without ()\\n    \\\"scriptengine\\\",\\n    \\\"scriptenginebuildversion\\\",\\n    \\\"scriptengineminorversion\\\",\\n    \\\"scriptenginemajorversion\\\"\\n  ];\\n\\n  const BUILT_IN_CALL = {\\n    begin: regex.concat(regex.either(...BUILT_IN_FUNCTIONS), \\\"\\\\\\\\s*\\\\\\\\(\\\"),\\n    // relevance 0 because this is acting as a beginKeywords really\\n    relevance: 0,\\n    keywords: { built_in: BUILT_IN_FUNCTIONS }\\n  };\\n\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    \\\"null\\\",\\n    \\\"nothing\\\",\\n    \\\"empty\\\"\\n  ];\\n\\n  const KEYWORDS = [\\n    \\\"call\\\",\\n    \\\"class\\\",\\n    \\\"const\\\",\\n    \\\"dim\\\",\\n    \\\"do\\\",\\n    \\\"loop\\\",\\n    \\\"erase\\\",\\n    \\\"execute\\\",\\n    \\\"executeglobal\\\",\\n    \\\"exit\\\",\\n    \\\"for\\\",\\n    \\\"each\\\",\\n    \\\"next\\\",\\n    \\\"function\\\",\\n    \\\"if\\\",\\n    \\\"then\\\",\\n    \\\"else\\\",\\n    \\\"on\\\",\\n    \\\"error\\\",\\n    \\\"option\\\",\\n    \\\"explicit\\\",\\n    \\\"new\\\",\\n    \\\"private\\\",\\n    \\\"property\\\",\\n    \\\"let\\\",\\n    \\\"get\\\",\\n    \\\"public\\\",\\n    \\\"randomize\\\",\\n    \\\"redim\\\",\\n    \\\"rem\\\",\\n    \\\"select\\\",\\n    \\\"case\\\",\\n    \\\"set\\\",\\n    \\\"stop\\\",\\n    \\\"sub\\\",\\n    \\\"while\\\",\\n    \\\"wend\\\",\\n    \\\"with\\\",\\n    \\\"end\\\",\\n    \\\"to\\\",\\n    \\\"elseif\\\",\\n    \\\"is\\\",\\n    \\\"or\\\",\\n    \\\"xor\\\",\\n    \\\"and\\\",\\n    \\\"not\\\",\\n    \\\"class_initialize\\\",\\n    \\\"class_terminate\\\",\\n    \\\"default\\\",\\n    \\\"preserve\\\",\\n    \\\"in\\\",\\n    \\\"me\\\",\\n    \\\"byval\\\",\\n    \\\"byref\\\",\\n    \\\"step\\\",\\n    \\\"resume\\\",\\n    \\\"goto\\\"\\n  ];\\n\\n  return {\\n    name: 'VBScript',\\n    aliases: [ 'vbs' ],\\n    case_insensitive: true,\\n    keywords: {\\n      keyword: KEYWORDS,\\n      built_in: BUILT_IN_OBJECTS,\\n      literal: LITERALS\\n    },\\n    illegal: '//',\\n    contains: [\\n      BUILT_IN_CALL,\\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { contains: [ { begin: '\\\"\\\"' } ] }),\\n      hljs.COMMENT(\\n        /'/,\\n        /$/,\\n        { relevance: 0 }\\n      ),\\n      hljs.C_NUMBER_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = vbscript;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/vbscript.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/verilog.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/verilog.js ***!\n  \\************************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Verilog\\nAuthor: Jon Evans <jon@craftyjon.com>\\nContributors: Boone Severson <boone.severson@gmail.com>\\nDescription: Verilog is a hardware description language used in electronic design automation to describe digital and mixed-signal systems. This highlighter supports Verilog and SystemVerilog through IEEE 1800-2012.\\nWebsite: http://www.verilog.com\\n*/\\n\\nfunction verilog(hljs) {\\n  const regex = hljs.regex;\\n  const KEYWORDS = {\\n    $pattern: /\\\\$?[\\\\w]+(\\\\$[\\\\w]+)*/,\\n    keyword: [\\n      \\\"accept_on\\\",\\n      \\\"alias\\\",\\n      \\\"always\\\",\\n      \\\"always_comb\\\",\\n      \\\"always_ff\\\",\\n      \\\"always_latch\\\",\\n      \\\"and\\\",\\n      \\\"assert\\\",\\n      \\\"assign\\\",\\n      \\\"assume\\\",\\n      \\\"automatic\\\",\\n      \\\"before\\\",\\n      \\\"begin\\\",\\n      \\\"bind\\\",\\n      \\\"bins\\\",\\n      \\\"binsof\\\",\\n      \\\"bit\\\",\\n      \\\"break\\\",\\n      \\\"buf|0\\\",\\n      \\\"bufif0\\\",\\n      \\\"bufif1\\\",\\n      \\\"byte\\\",\\n      \\\"case\\\",\\n      \\\"casex\\\",\\n      \\\"casez\\\",\\n      \\\"cell\\\",\\n      \\\"chandle\\\",\\n      \\\"checker\\\",\\n      \\\"class\\\",\\n      \\\"clocking\\\",\\n      \\\"cmos\\\",\\n      \\\"config\\\",\\n      \\\"const\\\",\\n      \\\"constraint\\\",\\n      \\\"context\\\",\\n      \\\"continue\\\",\\n      \\\"cover\\\",\\n      \\\"covergroup\\\",\\n      \\\"coverpoint\\\",\\n      \\\"cross\\\",\\n      \\\"deassign\\\",\\n      \\\"default\\\",\\n      \\\"defparam\\\",\\n      \\\"design\\\",\\n      \\\"disable\\\",\\n      \\\"dist\\\",\\n      \\\"do\\\",\\n      \\\"edge\\\",\\n      \\\"else\\\",\\n      \\\"end\\\",\\n      \\\"endcase\\\",\\n      \\\"endchecker\\\",\\n      \\\"endclass\\\",\\n      \\\"endclocking\\\",\\n      \\\"endconfig\\\",\\n      \\\"endfunction\\\",\\n      \\\"endgenerate\\\",\\n      \\\"endgroup\\\",\\n      \\\"endinterface\\\",\\n      \\\"endmodule\\\",\\n      \\\"endpackage\\\",\\n      \\\"endprimitive\\\",\\n      \\\"endprogram\\\",\\n      \\\"endproperty\\\",\\n      \\\"endspecify\\\",\\n      \\\"endsequence\\\",\\n      \\\"endtable\\\",\\n      \\\"endtask\\\",\\n      \\\"enum\\\",\\n      \\\"event\\\",\\n      \\\"eventually\\\",\\n      \\\"expect\\\",\\n      \\\"export\\\",\\n      \\\"extends\\\",\\n      \\\"extern\\\",\\n      \\\"final\\\",\\n      \\\"first_match\\\",\\n      \\\"for\\\",\\n      \\\"force\\\",\\n      \\\"foreach\\\",\\n      \\\"forever\\\",\\n      \\\"fork\\\",\\n      \\\"forkjoin\\\",\\n      \\\"function\\\",\\n      \\\"generate|5\\\",\\n      \\\"genvar\\\",\\n      \\\"global\\\",\\n      \\\"highz0\\\",\\n      \\\"highz1\\\",\\n      \\\"if\\\",\\n      \\\"iff\\\",\\n      \\\"ifnone\\\",\\n      \\\"ignore_bins\\\",\\n      \\\"illegal_bins\\\",\\n      \\\"implements\\\",\\n      \\\"implies\\\",\\n      \\\"import\\\",\\n      \\\"incdir\\\",\\n      \\\"include\\\",\\n      \\\"initial\\\",\\n      \\\"inout\\\",\\n      \\\"input\\\",\\n      \\\"inside\\\",\\n      \\\"instance\\\",\\n      \\\"int\\\",\\n      \\\"integer\\\",\\n      \\\"interconnect\\\",\\n      \\\"interface\\\",\\n      \\\"intersect\\\",\\n      \\\"join\\\",\\n      \\\"join_any\\\",\\n      \\\"join_none\\\",\\n      \\\"large\\\",\\n      \\\"let\\\",\\n      \\\"liblist\\\",\\n      \\\"library\\\",\\n      \\\"local\\\",\\n      \\\"localparam\\\",\\n      \\\"logic\\\",\\n      \\\"longint\\\",\\n      \\\"macromodule\\\",\\n      \\\"matches\\\",\\n      \\\"medium\\\",\\n      \\\"modport\\\",\\n      \\\"module\\\",\\n      \\\"nand\\\",\\n      \\\"negedge\\\",\\n      \\\"nettype\\\",\\n      \\\"new\\\",\\n      \\\"nexttime\\\",\\n      \\\"nmos\\\",\\n      \\\"nor\\\",\\n      \\\"noshowcancelled\\\",\\n      \\\"not\\\",\\n      \\\"notif0\\\",\\n      \\\"notif1\\\",\\n      \\\"or\\\",\\n      \\\"output\\\",\\n      \\\"package\\\",\\n      \\\"packed\\\",\\n      \\\"parameter\\\",\\n      \\\"pmos\\\",\\n      \\\"posedge\\\",\\n      \\\"primitive\\\",\\n      \\\"priority\\\",\\n      \\\"program\\\",\\n      \\\"property\\\",\\n      \\\"protected\\\",\\n      \\\"pull0\\\",\\n      \\\"pull1\\\",\\n      \\\"pulldown\\\",\\n      \\\"pullup\\\",\\n      \\\"pulsestyle_ondetect\\\",\\n      \\\"pulsestyle_onevent\\\",\\n      \\\"pure\\\",\\n      \\\"rand\\\",\\n      \\\"randc\\\",\\n      \\\"randcase\\\",\\n      \\\"randsequence\\\",\\n      \\\"rcmos\\\",\\n      \\\"real\\\",\\n      \\\"realtime\\\",\\n      \\\"ref\\\",\\n      \\\"reg\\\",\\n      \\\"reject_on\\\",\\n      \\\"release\\\",\\n      \\\"repeat\\\",\\n      \\\"restrict\\\",\\n      \\\"return\\\",\\n      \\\"rnmos\\\",\\n      \\\"rpmos\\\",\\n      \\\"rtran\\\",\\n      \\\"rtranif0\\\",\\n      \\\"rtranif1\\\",\\n      \\\"s_always\\\",\\n      \\\"s_eventually\\\",\\n      \\\"s_nexttime\\\",\\n      \\\"s_until\\\",\\n      \\\"s_until_with\\\",\\n      \\\"scalared\\\",\\n      \\\"sequence\\\",\\n      \\\"shortint\\\",\\n      \\\"shortreal\\\",\\n      \\\"showcancelled\\\",\\n      \\\"signed\\\",\\n      \\\"small\\\",\\n      \\\"soft\\\",\\n      \\\"solve\\\",\\n      \\\"specify\\\",\\n      \\\"specparam\\\",\\n      \\\"static\\\",\\n      \\\"string\\\",\\n      \\\"strong\\\",\\n      \\\"strong0\\\",\\n      \\\"strong1\\\",\\n      \\\"struct\\\",\\n      \\\"super\\\",\\n      \\\"supply0\\\",\\n      \\\"supply1\\\",\\n      \\\"sync_accept_on\\\",\\n      \\\"sync_reject_on\\\",\\n      \\\"table\\\",\\n      \\\"tagged\\\",\\n      \\\"task\\\",\\n      \\\"this\\\",\\n      \\\"throughout\\\",\\n      \\\"time\\\",\\n      \\\"timeprecision\\\",\\n      \\\"timeunit\\\",\\n      \\\"tran\\\",\\n      \\\"tranif0\\\",\\n      \\\"tranif1\\\",\\n      \\\"tri\\\",\\n      \\\"tri0\\\",\\n      \\\"tri1\\\",\\n      \\\"triand\\\",\\n      \\\"trior\\\",\\n      \\\"trireg\\\",\\n      \\\"type\\\",\\n      \\\"typedef\\\",\\n      \\\"union\\\",\\n      \\\"unique\\\",\\n      \\\"unique0\\\",\\n      \\\"unsigned\\\",\\n      \\\"until\\\",\\n      \\\"until_with\\\",\\n      \\\"untyped\\\",\\n      \\\"use\\\",\\n      \\\"uwire\\\",\\n      \\\"var\\\",\\n      \\\"vectored\\\",\\n      \\\"virtual\\\",\\n      \\\"void\\\",\\n      \\\"wait\\\",\\n      \\\"wait_order\\\",\\n      \\\"wand\\\",\\n      \\\"weak\\\",\\n      \\\"weak0\\\",\\n      \\\"weak1\\\",\\n      \\\"while\\\",\\n      \\\"wildcard\\\",\\n      \\\"wire\\\",\\n      \\\"with\\\",\\n      \\\"within\\\",\\n      \\\"wor\\\",\\n      \\\"xnor\\\",\\n      \\\"xor\\\"\\n    ],\\n    literal: [ 'null' ],\\n    built_in: [\\n      \\\"$finish\\\",\\n      \\\"$stop\\\",\\n      \\\"$exit\\\",\\n      \\\"$fatal\\\",\\n      \\\"$error\\\",\\n      \\\"$warning\\\",\\n      \\\"$info\\\",\\n      \\\"$realtime\\\",\\n      \\\"$time\\\",\\n      \\\"$printtimescale\\\",\\n      \\\"$bitstoreal\\\",\\n      \\\"$bitstoshortreal\\\",\\n      \\\"$itor\\\",\\n      \\\"$signed\\\",\\n      \\\"$cast\\\",\\n      \\\"$bits\\\",\\n      \\\"$stime\\\",\\n      \\\"$timeformat\\\",\\n      \\\"$realtobits\\\",\\n      \\\"$shortrealtobits\\\",\\n      \\\"$rtoi\\\",\\n      \\\"$unsigned\\\",\\n      \\\"$asserton\\\",\\n      \\\"$assertkill\\\",\\n      \\\"$assertpasson\\\",\\n      \\\"$assertfailon\\\",\\n      \\\"$assertnonvacuouson\\\",\\n      \\\"$assertoff\\\",\\n      \\\"$assertcontrol\\\",\\n      \\\"$assertpassoff\\\",\\n      \\\"$assertfailoff\\\",\\n      \\\"$assertvacuousoff\\\",\\n      \\\"$isunbounded\\\",\\n      \\\"$sampled\\\",\\n      \\\"$fell\\\",\\n      \\\"$changed\\\",\\n      \\\"$past_gclk\\\",\\n      \\\"$fell_gclk\\\",\\n      \\\"$changed_gclk\\\",\\n      \\\"$rising_gclk\\\",\\n      \\\"$steady_gclk\\\",\\n      \\\"$coverage_control\\\",\\n      \\\"$coverage_get\\\",\\n      \\\"$coverage_save\\\",\\n      \\\"$set_coverage_db_name\\\",\\n      \\\"$rose\\\",\\n      \\\"$stable\\\",\\n      \\\"$past\\\",\\n      \\\"$rose_gclk\\\",\\n      \\\"$stable_gclk\\\",\\n      \\\"$future_gclk\\\",\\n      \\\"$falling_gclk\\\",\\n      \\\"$changing_gclk\\\",\\n      \\\"$display\\\",\\n      \\\"$coverage_get_max\\\",\\n      \\\"$coverage_merge\\\",\\n      \\\"$get_coverage\\\",\\n      \\\"$load_coverage_db\\\",\\n      \\\"$typename\\\",\\n      \\\"$unpacked_dimensions\\\",\\n      \\\"$left\\\",\\n      \\\"$low\\\",\\n      \\\"$increment\\\",\\n      \\\"$clog2\\\",\\n      \\\"$ln\\\",\\n      \\\"$log10\\\",\\n      \\\"$exp\\\",\\n      \\\"$sqrt\\\",\\n      \\\"$pow\\\",\\n      \\\"$floor\\\",\\n      \\\"$ceil\\\",\\n      \\\"$sin\\\",\\n      \\\"$cos\\\",\\n      \\\"$tan\\\",\\n      \\\"$countbits\\\",\\n      \\\"$onehot\\\",\\n      \\\"$isunknown\\\",\\n      \\\"$fatal\\\",\\n      \\\"$warning\\\",\\n      \\\"$dimensions\\\",\\n      \\\"$right\\\",\\n      \\\"$high\\\",\\n      \\\"$size\\\",\\n      \\\"$asin\\\",\\n      \\\"$acos\\\",\\n      \\\"$atan\\\",\\n      \\\"$atan2\\\",\\n      \\\"$hypot\\\",\\n      \\\"$sinh\\\",\\n      \\\"$cosh\\\",\\n      \\\"$tanh\\\",\\n      \\\"$asinh\\\",\\n      \\\"$acosh\\\",\\n      \\\"$atanh\\\",\\n      \\\"$countones\\\",\\n      \\\"$onehot0\\\",\\n      \\\"$error\\\",\\n      \\\"$info\\\",\\n      \\\"$random\\\",\\n      \\\"$dist_chi_square\\\",\\n      \\\"$dist_erlang\\\",\\n      \\\"$dist_exponential\\\",\\n      \\\"$dist_normal\\\",\\n      \\\"$dist_poisson\\\",\\n      \\\"$dist_t\\\",\\n      \\\"$dist_uniform\\\",\\n      \\\"$q_initialize\\\",\\n      \\\"$q_remove\\\",\\n      \\\"$q_exam\\\",\\n      \\\"$async$and$array\\\",\\n      \\\"$async$nand$array\\\",\\n      \\\"$async$or$array\\\",\\n      \\\"$async$nor$array\\\",\\n      \\\"$sync$and$array\\\",\\n      \\\"$sync$nand$array\\\",\\n      \\\"$sync$or$array\\\",\\n      \\\"$sync$nor$array\\\",\\n      \\\"$q_add\\\",\\n      \\\"$q_full\\\",\\n      \\\"$psprintf\\\",\\n      \\\"$async$and$plane\\\",\\n      \\\"$async$nand$plane\\\",\\n      \\\"$async$or$plane\\\",\\n      \\\"$async$nor$plane\\\",\\n      \\\"$sync$and$plane\\\",\\n      \\\"$sync$nand$plane\\\",\\n      \\\"$sync$or$plane\\\",\\n      \\\"$sync$nor$plane\\\",\\n      \\\"$system\\\",\\n      \\\"$display\\\",\\n      \\\"$displayb\\\",\\n      \\\"$displayh\\\",\\n      \\\"$displayo\\\",\\n      \\\"$strobe\\\",\\n      \\\"$strobeb\\\",\\n      \\\"$strobeh\\\",\\n      \\\"$strobeo\\\",\\n      \\\"$write\\\",\\n      \\\"$readmemb\\\",\\n      \\\"$readmemh\\\",\\n      \\\"$writememh\\\",\\n      \\\"$value$plusargs\\\",\\n      \\\"$dumpvars\\\",\\n      \\\"$dumpon\\\",\\n      \\\"$dumplimit\\\",\\n      \\\"$dumpports\\\",\\n      \\\"$dumpportson\\\",\\n      \\\"$dumpportslimit\\\",\\n      \\\"$writeb\\\",\\n      \\\"$writeh\\\",\\n      \\\"$writeo\\\",\\n      \\\"$monitor\\\",\\n      \\\"$monitorb\\\",\\n      \\\"$monitorh\\\",\\n      \\\"$monitoro\\\",\\n      \\\"$writememb\\\",\\n      \\\"$dumpfile\\\",\\n      \\\"$dumpoff\\\",\\n      \\\"$dumpall\\\",\\n      \\\"$dumpflush\\\",\\n      \\\"$dumpportsoff\\\",\\n      \\\"$dumpportsall\\\",\\n      \\\"$dumpportsflush\\\",\\n      \\\"$fclose\\\",\\n      \\\"$fdisplay\\\",\\n      \\\"$fdisplayb\\\",\\n      \\\"$fdisplayh\\\",\\n      \\\"$fdisplayo\\\",\\n      \\\"$fstrobe\\\",\\n      \\\"$fstrobeb\\\",\\n      \\\"$fstrobeh\\\",\\n      \\\"$fstrobeo\\\",\\n      \\\"$swrite\\\",\\n      \\\"$swriteb\\\",\\n      \\\"$swriteh\\\",\\n      \\\"$swriteo\\\",\\n      \\\"$fscanf\\\",\\n      \\\"$fread\\\",\\n      \\\"$fseek\\\",\\n      \\\"$fflush\\\",\\n      \\\"$feof\\\",\\n      \\\"$fopen\\\",\\n      \\\"$fwrite\\\",\\n      \\\"$fwriteb\\\",\\n      \\\"$fwriteh\\\",\\n      \\\"$fwriteo\\\",\\n      \\\"$fmonitor\\\",\\n      \\\"$fmonitorb\\\",\\n      \\\"$fmonitorh\\\",\\n      \\\"$fmonitoro\\\",\\n      \\\"$sformat\\\",\\n      \\\"$sformatf\\\",\\n      \\\"$fgetc\\\",\\n      \\\"$ungetc\\\",\\n      \\\"$fgets\\\",\\n      \\\"$sscanf\\\",\\n      \\\"$rewind\\\",\\n      \\\"$ftell\\\",\\n      \\\"$ferror\\\"\\n    ]\\n  };\\n  const BUILT_IN_CONSTANTS = [\\n    \\\"__FILE__\\\",\\n    \\\"__LINE__\\\"\\n  ];\\n  const DIRECTIVES = [\\n    \\\"begin_keywords\\\",\\n    \\\"celldefine\\\",\\n    \\\"default_nettype\\\",\\n    \\\"default_decay_time\\\",\\n    \\\"default_trireg_strength\\\",\\n    \\\"define\\\",\\n    \\\"delay_mode_distributed\\\",\\n    \\\"delay_mode_path\\\",\\n    \\\"delay_mode_unit\\\",\\n    \\\"delay_mode_zero\\\",\\n    \\\"else\\\",\\n    \\\"elsif\\\",\\n    \\\"end_keywords\\\",\\n    \\\"endcelldefine\\\",\\n    \\\"endif\\\",\\n    \\\"ifdef\\\",\\n    \\\"ifndef\\\",\\n    \\\"include\\\",\\n    \\\"line\\\",\\n    \\\"nounconnected_drive\\\",\\n    \\\"pragma\\\",\\n    \\\"resetall\\\",\\n    \\\"timescale\\\",\\n    \\\"unconnected_drive\\\",\\n    \\\"undef\\\",\\n    \\\"undefineall\\\"\\n  ];\\n\\n  return {\\n    name: 'Verilog',\\n    aliases: [\\n      'v',\\n      'sv',\\n      'svh'\\n    ],\\n    case_insensitive: false,\\n    keywords: KEYWORDS,\\n    contains: [\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        scope: 'number',\\n        contains: [ hljs.BACKSLASH_ESCAPE ],\\n        variants: [\\n          { begin: /\\\\b((\\\\d+'([bhodBHOD]))[0-9xzXZa-fA-F_]+)/ },\\n          { begin: /\\\\B(('([bhodBHOD]))[0-9xzXZa-fA-F_]+)/ },\\n          { // decimal\\n            begin: /\\\\b[0-9][0-9_]*/,\\n            relevance: 0\\n          }\\n        ]\\n      },\\n      /* parameters to instances */\\n      {\\n        scope: 'variable',\\n        variants: [\\n          { begin: '#\\\\\\\\((?!parameter).+\\\\\\\\)' },\\n          {\\n            begin: '\\\\\\\\.\\\\\\\\w+',\\n            relevance: 0\\n          }\\n        ]\\n      },\\n      {\\n        scope: 'variable.constant',\\n        match: regex.concat(/`/, regex.either(...BUILT_IN_CONSTANTS)),\\n      },\\n      {\\n        scope: 'meta',\\n        begin: regex.concat(/`/, regex.either(...DIRECTIVES)),\\n        end: /$|\\\\/\\\\/|\\\\/\\\\*/,\\n        returnEnd: true,\\n        keywords: DIRECTIVES\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = verilog;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/verilog.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/vhdl.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/vhdl.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: VHDL\\nAuthor: Igor Kalnitsky <igor@kalnitsky.org>\\nContributors: Daniel C.K. Kho <daniel.kho@tauhop.com>, Guillaume Savaton <guillaume.savaton@eseo.fr>\\nDescription: VHDL is a hardware description language used in electronic design automation to describe digital and mixed-signal systems.\\nWebsite: https://en.wikipedia.org/wiki/VHDL\\n*/\\n\\nfunction vhdl(hljs) {\\n  // Regular expression for VHDL numeric literals.\\n\\n  // Decimal literal:\\n  const INTEGER_RE = '\\\\\\\\d(_|\\\\\\\\d)*';\\n  const EXPONENT_RE = '[eE][-+]?' + INTEGER_RE;\\n  const DECIMAL_LITERAL_RE = INTEGER_RE + '(\\\\\\\\.' + INTEGER_RE + ')?' + '(' + EXPONENT_RE + ')?';\\n  // Based literal:\\n  const BASED_INTEGER_RE = '\\\\\\\\w+';\\n  const BASED_LITERAL_RE = INTEGER_RE + '#' + BASED_INTEGER_RE + '(\\\\\\\\.' + BASED_INTEGER_RE + ')?' + '#' + '(' + EXPONENT_RE + ')?';\\n\\n  const NUMBER_RE = '\\\\\\\\b(' + BASED_LITERAL_RE + '|' + DECIMAL_LITERAL_RE + ')';\\n\\n  const KEYWORDS = [\\n    \\\"abs\\\",\\n    \\\"access\\\",\\n    \\\"after\\\",\\n    \\\"alias\\\",\\n    \\\"all\\\",\\n    \\\"and\\\",\\n    \\\"architecture\\\",\\n    \\\"array\\\",\\n    \\\"assert\\\",\\n    \\\"assume\\\",\\n    \\\"assume_guarantee\\\",\\n    \\\"attribute\\\",\\n    \\\"begin\\\",\\n    \\\"block\\\",\\n    \\\"body\\\",\\n    \\\"buffer\\\",\\n    \\\"bus\\\",\\n    \\\"case\\\",\\n    \\\"component\\\",\\n    \\\"configuration\\\",\\n    \\\"constant\\\",\\n    \\\"context\\\",\\n    \\\"cover\\\",\\n    \\\"disconnect\\\",\\n    \\\"downto\\\",\\n    \\\"default\\\",\\n    \\\"else\\\",\\n    \\\"elsif\\\",\\n    \\\"end\\\",\\n    \\\"entity\\\",\\n    \\\"exit\\\",\\n    \\\"fairness\\\",\\n    \\\"file\\\",\\n    \\\"for\\\",\\n    \\\"force\\\",\\n    \\\"function\\\",\\n    \\\"generate\\\",\\n    \\\"generic\\\",\\n    \\\"group\\\",\\n    \\\"guarded\\\",\\n    \\\"if\\\",\\n    \\\"impure\\\",\\n    \\\"in\\\",\\n    \\\"inertial\\\",\\n    \\\"inout\\\",\\n    \\\"is\\\",\\n    \\\"label\\\",\\n    \\\"library\\\",\\n    \\\"linkage\\\",\\n    \\\"literal\\\",\\n    \\\"loop\\\",\\n    \\\"map\\\",\\n    \\\"mod\\\",\\n    \\\"nand\\\",\\n    \\\"new\\\",\\n    \\\"next\\\",\\n    \\\"nor\\\",\\n    \\\"not\\\",\\n    \\\"null\\\",\\n    \\\"of\\\",\\n    \\\"on\\\",\\n    \\\"open\\\",\\n    \\\"or\\\",\\n    \\\"others\\\",\\n    \\\"out\\\",\\n    \\\"package\\\",\\n    \\\"parameter\\\",\\n    \\\"port\\\",\\n    \\\"postponed\\\",\\n    \\\"procedure\\\",\\n    \\\"process\\\",\\n    \\\"property\\\",\\n    \\\"protected\\\",\\n    \\\"pure\\\",\\n    \\\"range\\\",\\n    \\\"record\\\",\\n    \\\"register\\\",\\n    \\\"reject\\\",\\n    \\\"release\\\",\\n    \\\"rem\\\",\\n    \\\"report\\\",\\n    \\\"restrict\\\",\\n    \\\"restrict_guarantee\\\",\\n    \\\"return\\\",\\n    \\\"rol\\\",\\n    \\\"ror\\\",\\n    \\\"select\\\",\\n    \\\"sequence\\\",\\n    \\\"severity\\\",\\n    \\\"shared\\\",\\n    \\\"signal\\\",\\n    \\\"sla\\\",\\n    \\\"sll\\\",\\n    \\\"sra\\\",\\n    \\\"srl\\\",\\n    \\\"strong\\\",\\n    \\\"subtype\\\",\\n    \\\"then\\\",\\n    \\\"to\\\",\\n    \\\"transport\\\",\\n    \\\"type\\\",\\n    \\\"unaffected\\\",\\n    \\\"units\\\",\\n    \\\"until\\\",\\n    \\\"use\\\",\\n    \\\"variable\\\",\\n    \\\"view\\\",\\n    \\\"vmode\\\",\\n    \\\"vprop\\\",\\n    \\\"vunit\\\",\\n    \\\"wait\\\",\\n    \\\"when\\\",\\n    \\\"while\\\",\\n    \\\"with\\\",\\n    \\\"xnor\\\",\\n    \\\"xor\\\"\\n  ];\\n  const BUILT_INS = [\\n    \\\"boolean\\\",\\n    \\\"bit\\\",\\n    \\\"character\\\",\\n    \\\"integer\\\",\\n    \\\"time\\\",\\n    \\\"delay_length\\\",\\n    \\\"natural\\\",\\n    \\\"positive\\\",\\n    \\\"string\\\",\\n    \\\"bit_vector\\\",\\n    \\\"file_open_kind\\\",\\n    \\\"file_open_status\\\",\\n    \\\"std_logic\\\",\\n    \\\"std_logic_vector\\\",\\n    \\\"unsigned\\\",\\n    \\\"signed\\\",\\n    \\\"boolean_vector\\\",\\n    \\\"integer_vector\\\",\\n    \\\"std_ulogic\\\",\\n    \\\"std_ulogic_vector\\\",\\n    \\\"unresolved_unsigned\\\",\\n    \\\"u_unsigned\\\",\\n    \\\"unresolved_signed\\\",\\n    \\\"u_signed\\\",\\n    \\\"real_vector\\\",\\n    \\\"time_vector\\\"\\n  ];\\n  const LITERALS = [\\n    // severity_level\\n    \\\"false\\\",\\n    \\\"true\\\",\\n    \\\"note\\\",\\n    \\\"warning\\\",\\n    \\\"error\\\",\\n    \\\"failure\\\",\\n    // textio\\n    \\\"line\\\",\\n    \\\"text\\\",\\n    \\\"side\\\",\\n    \\\"width\\\"\\n  ];\\n\\n  return {\\n    name: 'VHDL',\\n    case_insensitive: true,\\n    keywords: {\\n      keyword: KEYWORDS,\\n      built_in: BUILT_INS,\\n      literal: LITERALS\\n    },\\n    illegal: /\\\\{/,\\n    contains: [\\n      hljs.C_BLOCK_COMMENT_MODE, // VHDL-2008 block commenting.\\n      hljs.COMMENT('--', '$'),\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'number',\\n        begin: NUMBER_RE,\\n        relevance: 0\\n      },\\n      {\\n        className: 'string',\\n        begin: '\\\\'(U|X|0|1|Z|W|L|H|-)\\\\'',\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      },\\n      {\\n        className: 'symbol',\\n        begin: '\\\\'[A-Za-z](_?[A-Za-z0-9])*',\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = vhdl;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/vhdl.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/vim.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/vim.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Vim Script\\nAuthor: Jun Yang <yangjvn@126.com>\\nDescription: full keyword and built-in from http://vimdoc.sourceforge.net/htmldoc/\\nWebsite: https://www.vim.org\\nCategory: scripting\\n*/\\n\\nfunction vim(hljs) {\\n  return {\\n    name: 'Vim Script',\\n    keywords: {\\n      $pattern: /[!#@\\\\w]+/,\\n      keyword:\\n        // express version except: ! & * < = > !! # @ @@\\n        'N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope '\\n        + 'cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc '\\n        + 'ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 '\\n        + 'profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor '\\n        + 'so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew '\\n        + 'tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ '\\n        // full version\\n        + 'Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload '\\n        + 'bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap '\\n        + 'cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor '\\n        + 'endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap '\\n        + 'imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview '\\n        + 'lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap '\\n        + 'nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext '\\n        + 'ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding '\\n        + 'scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace '\\n        + 'startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious ' + 'trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew '\\n        + 'vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank',\\n      built_in: // built in func\\n        'synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv '\\n        + 'complete_check add getwinposx getqflist getwinposy screencol '\\n        + 'clearmatches empty extend getcmdpos mzeval garbagecollect setreg '\\n        + 'ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable '\\n        + 'shiftwidth max sinh isdirectory synID system inputrestore winline '\\n        + 'atan visualmode inputlist tabpagewinnr round getregtype mapcheck '\\n        + 'hasmapto histdel argidx findfile sha256 exists toupper getcmdline '\\n        + 'taglist string getmatches bufnr strftime winwidth bufexists '\\n        + 'strtrans tabpagebuflist setcmdpos remote_read printf setloclist '\\n        + 'getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval '\\n        + 'resolve libcallnr foldclosedend reverse filter has_key bufname '\\n        + 'str2float strlen setline getcharmod setbufvar index searchpos '\\n        + 'shellescape undofile foldclosed setqflist buflisted strchars str2nr '\\n        + 'virtcol floor remove undotree remote_expr winheight gettabwinvar '\\n        + 'reltime cursor tabpagenr finddir localtime acos getloclist search '\\n        + 'tanh matchend rename gettabvar strdisplaywidth type abs py3eval '\\n        + 'setwinvar tolower wildmenumode log10 spellsuggest bufloaded '\\n        + 'synconcealed nextnonblank server2client complete settabwinvar '\\n        + 'executable input wincol setmatches getftype hlID inputsave '\\n        + 'searchpair or screenrow line settabvar histadd deepcopy strpart '\\n        + 'remote_peek and eval getftime submatch screenchar winsaveview '\\n        + 'matchadd mkdir screenattr getfontname libcall reltimestr getfsize '\\n        + 'winnr invert pow getbufline byte2line soundfold repeat fnameescape '\\n        + 'tagfiles sin strwidth spellbadword trunc maparg log lispindent '\\n        + 'hostname setpos globpath remote_foreground getchar synIDattr '\\n        + 'fnamemodify cscope_connection stridx winbufnr indent min '\\n        + 'complete_add nr2char searchpairpos inputdialog values matchlist '\\n        + 'items hlexists strridx browsedir expand fmod pathshorten line2byte '\\n        + 'argc count getwinvar glob foldtextresult getreg foreground cosh '\\n        + 'matchdelete has char2nr simplify histget searchdecl iconv '\\n        + 'winrestcmd pumvisible writefile foldlevel haslocaldir keys cos '\\n        + 'matchstr foldtext histnr tan tempname getcwd byteidx getbufvar '\\n        + 'islocked escape eventhandler remote_send serverlist winrestview '\\n        + 'synstack pyeval prevnonblank readfile cindent filereadable changenr '\\n        + 'exp'\\n    },\\n    illegal: /;/,\\n    contains: [\\n      hljs.NUMBER_MODE,\\n      {\\n        className: 'string',\\n        begin: '\\\\'',\\n        end: '\\\\'',\\n        illegal: '\\\\\\\\n'\\n      },\\n\\n      /*\\n      A double quote can start either a string or a line comment. Strings are\\n      ended before the end of a line by another double quote and can contain\\n      escaped double-quotes and post-escaped line breaks.\\n\\n      Also, any double quote at the beginning of a line is a comment but we\\n      don't handle that properly at the moment: any double quote inside will\\n      turn them into a string. Handling it properly will require a smarter\\n      parser.\\n      */\\n      {\\n        className: 'string',\\n        begin: /\\\"(\\\\\\\\\\\"|\\\\n\\\\\\\\|[^\\\"\\\\n])*\\\"/\\n      },\\n      hljs.COMMENT('\\\"', '$'),\\n\\n      {\\n        className: 'variable',\\n        begin: /[bwtglsav]:[\\\\w\\\\d_]+/\\n      },\\n      {\\n        begin: [\\n          /\\\\b(?:function|function!)/,\\n          /\\\\s+/,\\n          hljs.IDENT_RE\\n        ],\\n        className: {\\n          1: \\\"keyword\\\",\\n          3: \\\"title\\\"\\n        },\\n        end: '$',\\n        relevance: 0,\\n        contains: [\\n          {\\n            className: 'params',\\n            begin: '\\\\\\\\(',\\n            end: '\\\\\\\\)'\\n          }\\n        ]\\n      },\\n      {\\n        className: 'symbol',\\n        begin: /<[\\\\w-]+>/\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = vim;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/vim.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/wasm.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/wasm.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: WebAssembly\\nWebsite: https://webassembly.org\\nDescription:  Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.\\nCategory: web, common\\nAudit: 2020\\n*/\\n\\n/** @type LanguageFn */\\nfunction wasm(hljs) {\\n  hljs.regex;\\n  const BLOCK_COMMENT = hljs.COMMENT(/\\\\(;/, /;\\\\)/);\\n  BLOCK_COMMENT.contains.push(\\\"self\\\");\\n  const LINE_COMMENT = hljs.COMMENT(/;;/, /$/);\\n\\n  const KWS = [\\n    \\\"anyfunc\\\",\\n    \\\"block\\\",\\n    \\\"br\\\",\\n    \\\"br_if\\\",\\n    \\\"br_table\\\",\\n    \\\"call\\\",\\n    \\\"call_indirect\\\",\\n    \\\"data\\\",\\n    \\\"drop\\\",\\n    \\\"elem\\\",\\n    \\\"else\\\",\\n    \\\"end\\\",\\n    \\\"export\\\",\\n    \\\"func\\\",\\n    \\\"global.get\\\",\\n    \\\"global.set\\\",\\n    \\\"local.get\\\",\\n    \\\"local.set\\\",\\n    \\\"local.tee\\\",\\n    \\\"get_global\\\",\\n    \\\"get_local\\\",\\n    \\\"global\\\",\\n    \\\"if\\\",\\n    \\\"import\\\",\\n    \\\"local\\\",\\n    \\\"loop\\\",\\n    \\\"memory\\\",\\n    \\\"memory.grow\\\",\\n    \\\"memory.size\\\",\\n    \\\"module\\\",\\n    \\\"mut\\\",\\n    \\\"nop\\\",\\n    \\\"offset\\\",\\n    \\\"param\\\",\\n    \\\"result\\\",\\n    \\\"return\\\",\\n    \\\"select\\\",\\n    \\\"set_global\\\",\\n    \\\"set_local\\\",\\n    \\\"start\\\",\\n    \\\"table\\\",\\n    \\\"tee_local\\\",\\n    \\\"then\\\",\\n    \\\"type\\\",\\n    \\\"unreachable\\\"\\n  ];\\n\\n  const FUNCTION_REFERENCE = {\\n    begin: [\\n      /(?:func|call|call_indirect)/,\\n      /\\\\s+/,\\n      /\\\\$[^\\\\s)]+/\\n    ],\\n    className: {\\n      1: \\\"keyword\\\",\\n      3: \\\"title.function\\\"\\n    }\\n  };\\n\\n  const ARGUMENT = {\\n    className: \\\"variable\\\",\\n    begin: /\\\\$[\\\\w_]+/\\n  };\\n\\n  const PARENS = {\\n    match: /(\\\\((?!;)|\\\\))+/,\\n    className: \\\"punctuation\\\",\\n    relevance: 0\\n  };\\n\\n  const NUMBER = {\\n    className: \\\"number\\\",\\n    relevance: 0,\\n    // borrowed from Prism, TODO: split out into variants\\n    match: /[+-]?\\\\b(?:\\\\d(?:_?\\\\d)*(?:\\\\.\\\\d(?:_?\\\\d)*)?(?:[eE][+-]?\\\\d(?:_?\\\\d)*)?|0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*(?:\\\\.[\\\\da-fA-F](?:_?[\\\\da-fA-D])*)?(?:[pP][+-]?\\\\d(?:_?\\\\d)*)?)\\\\b|\\\\binf\\\\b|\\\\bnan(?::0x[\\\\da-fA-F](?:_?[\\\\da-fA-D])*)?\\\\b/\\n  };\\n\\n  const TYPE = {\\n    // look-ahead prevents us from gobbling up opcodes\\n    match: /(i32|i64|f32|f64)(?!\\\\.)/,\\n    className: \\\"type\\\"\\n  };\\n\\n  const MATH_OPERATIONS = {\\n    className: \\\"keyword\\\",\\n    // borrowed from Prism, TODO: split out into variants\\n    match: /\\\\b(f32|f64|i32|i64)(?:\\\\.(?:abs|add|and|ceil|clz|const|convert_[su]\\\\/i(?:32|64)|copysign|ctz|demote\\\\/f64|div(?:_[su])?|eqz?|extend_[su]\\\\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\\\\/f32|reinterpret\\\\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\\\\/f(?:32|64))?|wrap\\\\/i64|xor))\\\\b/\\n  };\\n\\n  const OFFSET_ALIGN = {\\n    match: [\\n      /(?:offset|align)/,\\n      /\\\\s*/,\\n      /=/\\n    ],\\n    className: {\\n      1: \\\"keyword\\\",\\n      3: \\\"operator\\\"\\n    }\\n  };\\n\\n  return {\\n    name: 'WebAssembly',\\n    keywords: {\\n      $pattern: /[\\\\w.]+/,\\n      keyword: KWS\\n    },\\n    contains: [\\n      LINE_COMMENT,\\n      BLOCK_COMMENT,\\n      OFFSET_ALIGN,\\n      ARGUMENT,\\n      PARENS,\\n      FUNCTION_REFERENCE,\\n      hljs.QUOTE_STRING_MODE,\\n      TYPE,\\n      MATH_OPERATIONS,\\n      NUMBER\\n    ]\\n  };\\n}\\n\\nmodule.exports = wasm;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/wasm.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/wren.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/wren.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Wren\\nDescription: Think Smalltalk in a Lua-sized package with a dash of Erlang and wrapped up in a familiar, modern syntax.\\nCategory: scripting\\nAuthor: @joshgoebel\\nMaintainer: @joshgoebel\\nWebsite: https://wren.io/\\n*/\\n\\n/** @type LanguageFn */\\nfunction wren(hljs) {\\n  const regex = hljs.regex;\\n  const IDENT_RE = /[a-zA-Z]\\\\w*/;\\n  const KEYWORDS = [\\n    \\\"as\\\",\\n    \\\"break\\\",\\n    \\\"class\\\",\\n    \\\"construct\\\",\\n    \\\"continue\\\",\\n    \\\"else\\\",\\n    \\\"for\\\",\\n    \\\"foreign\\\",\\n    \\\"if\\\",\\n    \\\"import\\\",\\n    \\\"in\\\",\\n    \\\"is\\\",\\n    \\\"return\\\",\\n    \\\"static\\\",\\n    \\\"var\\\",\\n    \\\"while\\\"\\n  ];\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    \\\"null\\\"\\n  ];\\n  const LANGUAGE_VARS = [\\n    \\\"this\\\",\\n    \\\"super\\\"\\n  ];\\n  const CORE_CLASSES = [\\n    \\\"Bool\\\",\\n    \\\"Class\\\",\\n    \\\"Fiber\\\",\\n    \\\"Fn\\\",\\n    \\\"List\\\",\\n    \\\"Map\\\",\\n    \\\"Null\\\",\\n    \\\"Num\\\",\\n    \\\"Object\\\",\\n    \\\"Range\\\",\\n    \\\"Sequence\\\",\\n    \\\"String\\\",\\n    \\\"System\\\"\\n  ];\\n  const OPERATORS = [\\n    \\\"-\\\",\\n    \\\"~\\\",\\n    /\\\\*/,\\n    \\\"%\\\",\\n    /\\\\.\\\\.\\\\./,\\n    /\\\\.\\\\./,\\n    /\\\\+/,\\n    \\\"<<\\\",\\n    \\\">>\\\",\\n    \\\">=\\\",\\n    \\\"<=\\\",\\n    \\\"<\\\",\\n    \\\">\\\",\\n    /\\\\^/,\\n    /!=/,\\n    /!/,\\n    /\\\\bis\\\\b/,\\n    \\\"==\\\",\\n    \\\"&&\\\",\\n    \\\"&\\\",\\n    /\\\\|\\\\|/,\\n    /\\\\|/,\\n    /\\\\?:/,\\n    \\\"=\\\"\\n  ];\\n  const FUNCTION = {\\n    relevance: 0,\\n    match: regex.concat(/\\\\b(?!(if|while|for|else|super)\\\\b)/, IDENT_RE, /(?=\\\\s*[({])/),\\n    className: \\\"title.function\\\"\\n  };\\n  const FUNCTION_DEFINITION = {\\n    match: regex.concat(\\n      regex.either(\\n        regex.concat(/\\\\b(?!(if|while|for|else|super)\\\\b)/, IDENT_RE),\\n        regex.either(...OPERATORS)\\n      ),\\n      /(?=\\\\s*\\\\([^)]+\\\\)\\\\s*\\\\{)/),\\n    className: \\\"title.function\\\",\\n    starts: { contains: [\\n      {\\n        begin: /\\\\(/,\\n        end: /\\\\)/,\\n        contains: [\\n          {\\n            relevance: 0,\\n            scope: \\\"params\\\",\\n            match: IDENT_RE\\n          }\\n        ]\\n      }\\n    ] }\\n  };\\n  const CLASS_DEFINITION = {\\n    variants: [\\n      { match: [\\n        /class\\\\s+/,\\n        IDENT_RE,\\n        /\\\\s+is\\\\s+/,\\n        IDENT_RE\\n      ] },\\n      { match: [\\n        /class\\\\s+/,\\n        IDENT_RE\\n      ] }\\n    ],\\n    scope: {\\n      2: \\\"title.class\\\",\\n      4: \\\"title.class.inherited\\\"\\n    },\\n    keywords: KEYWORDS\\n  };\\n\\n  const OPERATOR = {\\n    relevance: 0,\\n    match: regex.either(...OPERATORS),\\n    className: \\\"operator\\\"\\n  };\\n\\n  const TRIPLE_STRING = {\\n    className: \\\"string\\\",\\n    begin: /\\\"\\\"\\\"/,\\n    end: /\\\"\\\"\\\"/\\n  };\\n\\n  const PROPERTY = {\\n    className: \\\"property\\\",\\n    begin: regex.concat(/\\\\./, regex.lookahead(IDENT_RE)),\\n    end: IDENT_RE,\\n    excludeBegin: true,\\n    relevance: 0\\n  };\\n\\n  const FIELD = {\\n    relevance: 0,\\n    match: regex.concat(/\\\\b_/, IDENT_RE),\\n    scope: \\\"variable\\\"\\n  };\\n\\n  // CamelCase\\n  const CLASS_REFERENCE = {\\n    relevance: 0,\\n    match: /\\\\b[A-Z]+[a-z]+([A-Z]+[a-z]+)*/,\\n    scope: \\\"title.class\\\",\\n    keywords: { _: CORE_CLASSES }\\n  };\\n\\n  // TODO: add custom number modes\\n  const NUMBER = hljs.C_NUMBER_MODE;\\n\\n  const SETTER = {\\n    match: [\\n      IDENT_RE,\\n      /\\\\s*/,\\n      /=/,\\n      /\\\\s*/,\\n      /\\\\(/,\\n      IDENT_RE,\\n      /\\\\)\\\\s*\\\\{/\\n    ],\\n    scope: {\\n      1: \\\"title.function\\\",\\n      3: \\\"operator\\\",\\n      6: \\\"params\\\"\\n    }\\n  };\\n\\n  const COMMENT_DOCS = hljs.COMMENT(\\n    /\\\\/\\\\*\\\\*/,\\n    /\\\\*\\\\//,\\n    { contains: [\\n      {\\n        match: /@[a-z]+/,\\n        scope: \\\"doctag\\\"\\n      },\\n      \\\"self\\\"\\n    ] }\\n  );\\n  const SUBST = {\\n    scope: \\\"subst\\\",\\n    begin: /%\\\\(/,\\n    end: /\\\\)/,\\n    contains: [\\n      NUMBER,\\n      CLASS_REFERENCE,\\n      FUNCTION,\\n      FIELD,\\n      OPERATOR\\n    ]\\n  };\\n  const STRING = {\\n    scope: \\\"string\\\",\\n    begin: /\\\"/,\\n    end: /\\\"/,\\n    contains: [\\n      SUBST,\\n      {\\n        scope: \\\"char.escape\\\",\\n        variants: [\\n          { match: /\\\\\\\\\\\\\\\\|\\\\\\\\[\\\"0%abefnrtv]/ },\\n          { match: /\\\\\\\\x[0-9A-F]{2}/ },\\n          { match: /\\\\\\\\u[0-9A-F]{4}/ },\\n          { match: /\\\\\\\\U[0-9A-F]{8}/ }\\n        ]\\n      }\\n    ]\\n  };\\n  SUBST.contains.push(STRING);\\n\\n  const ALL_KWS = [\\n    ...KEYWORDS,\\n    ...LANGUAGE_VARS,\\n    ...LITERALS\\n  ];\\n  const VARIABLE = {\\n    relevance: 0,\\n    match: regex.concat(\\n      \\\"\\\\\\\\b(?!\\\",\\n      ALL_KWS.join(\\\"|\\\"),\\n      \\\"\\\\\\\\b)\\\",\\n      /[a-zA-Z_]\\\\w*(?:[?!]|\\\\b)/\\n    ),\\n    className: \\\"variable\\\"\\n  };\\n\\n  // TODO: reconsider this in the future\\n  const ATTRIBUTE = {\\n    // scope: \\\"meta\\\",\\n    scope: \\\"comment\\\",\\n    variants: [\\n      {\\n        begin: [\\n          /#!?/,\\n          /[A-Za-z_]+(?=\\\\()/\\n        ],\\n        beginScope: {\\n          // 2: \\\"attr\\\"\\n        },\\n        keywords: { literal: LITERALS },\\n        contains: [\\n          // NUMBER,\\n          // VARIABLE\\n        ],\\n        end: /\\\\)/\\n      },\\n      {\\n        begin: [\\n          /#!?/,\\n          /[A-Za-z_]+/\\n        ],\\n        beginScope: {\\n          // 2: \\\"attr\\\"\\n        },\\n        end: /$/\\n      }\\n    ]\\n  };\\n\\n  return {\\n    name: \\\"Wren\\\",\\n    keywords: {\\n      keyword: KEYWORDS,\\n      \\\"variable.language\\\": LANGUAGE_VARS,\\n      literal: LITERALS\\n    },\\n    contains: [\\n      ATTRIBUTE,\\n      NUMBER,\\n      STRING,\\n      TRIPLE_STRING,\\n      COMMENT_DOCS,\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      CLASS_REFERENCE,\\n      CLASS_DEFINITION,\\n      SETTER,\\n      FUNCTION_DEFINITION,\\n      FUNCTION,\\n      OPERATOR,\\n      FIELD,\\n      PROPERTY,\\n      VARIABLE\\n    ]\\n  };\\n}\\n\\nmodule.exports = wren;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/wren.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/x86asm.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/x86asm.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: Intel x86 Assembly\\nAuthor: innocenat <innocenat@gmail.com>\\nDescription: x86 assembly language using Intel's mnemonic and NASM syntax\\nWebsite: https://en.wikipedia.org/wiki/X86_assembly_language\\nCategory: assembler\\n*/\\n\\nfunction x86asm(hljs) {\\n  return {\\n    name: 'Intel x86 Assembly',\\n    case_insensitive: true,\\n    keywords: {\\n      $pattern: '[.%]?' + hljs.IDENT_RE,\\n      keyword:\\n        'lock rep repe repz repne repnz xaquire xrelease bnd nobnd '\\n        + 'aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63',\\n      built_in:\\n        // Instruction pointer\\n        'ip eip rip '\\n        // 8-bit registers\\n        + 'al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b '\\n        // 16-bit registers\\n        + 'ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w '\\n        // 32-bit registers\\n        + 'eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d '\\n        // 64-bit registers\\n        + 'rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 '\\n        // Segment registers\\n        + 'cs ds es fs gs ss '\\n        // Floating point stack registers\\n        + 'st st0 st1 st2 st3 st4 st5 st6 st7 '\\n        // MMX Registers\\n        + 'mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 '\\n        // SSE registers\\n        + 'xmm0  xmm1  xmm2  xmm3  xmm4  xmm5  xmm6  xmm7  xmm8  xmm9 xmm10  xmm11 xmm12 xmm13 xmm14 xmm15 '\\n        + 'xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 '\\n        // AVX registers\\n        + 'ymm0  ymm1  ymm2  ymm3  ymm4  ymm5  ymm6  ymm7  ymm8  ymm9 ymm10  ymm11 ymm12 ymm13 ymm14 ymm15 '\\n        + 'ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 '\\n        // AVX-512F registers\\n        + 'zmm0  zmm1  zmm2  zmm3  zmm4  zmm5  zmm6  zmm7  zmm8  zmm9 zmm10  zmm11 zmm12 zmm13 zmm14 zmm15 '\\n        + 'zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 '\\n        // AVX-512F mask registers\\n        + 'k0 k1 k2 k3 k4 k5 k6 k7 '\\n        // Bound (MPX) register\\n        + 'bnd0 bnd1 bnd2 bnd3 '\\n        // Special register\\n        + 'cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 '\\n        // NASM altreg package\\n        + 'r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b '\\n        + 'r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d '\\n        + 'r0h r1h r2h r3h '\\n        + 'r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l '\\n\\n        + 'db dw dd dq dt ddq do dy dz '\\n        + 'resb resw resd resq rest resdq reso resy resz '\\n        + 'incbin equ times '\\n        + 'byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr',\\n\\n      meta:\\n        '%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif '\\n        + '%if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep '\\n        + '%endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment '\\n        + '.nolist '\\n        + '__FILE__ __LINE__ __SECT__  __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ '\\n        + '__UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__  __PASS__ struc endstruc istruc at iend '\\n        + 'align alignb sectalign daz nodaz up down zero default option assume public '\\n\\n        + 'bits use16 use32 use64 default section segment absolute extern global common cpu float '\\n        + '__utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ '\\n        + '__float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ '\\n        + '__Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e '\\n        + 'float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__'\\n    },\\n    contains: [\\n      hljs.COMMENT(\\n        ';',\\n        '$',\\n        { relevance: 0 }\\n      ),\\n      {\\n        className: 'number',\\n        variants: [\\n          // Float number and x87 BCD\\n          {\\n            begin: '\\\\\\\\b(?:([0-9][0-9_]*)?\\\\\\\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|'\\n                   + '(0[Xx])?[0-9][0-9_]*(\\\\\\\\.[0-9_]*)?(?:[pP](?:[+-]?[0-9_]+)?)?)\\\\\\\\b',\\n            relevance: 0\\n          },\\n\\n          // Hex number in $\\n          {\\n            begin: '\\\\\\\\$[0-9][0-9A-Fa-f]*',\\n            relevance: 0\\n          },\\n\\n          // Number in H,D,T,Q,O,B,Y suffix\\n          { begin: '\\\\\\\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\\\\\\\b' },\\n\\n          // Number in X,D,T,Q,O,B,Y prefix\\n          { begin: '\\\\\\\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\\\\\\\b' }\\n        ]\\n      },\\n      // Double quote string\\n      hljs.QUOTE_STRING_MODE,\\n      {\\n        className: 'string',\\n        variants: [\\n          // Single-quoted string\\n          {\\n            begin: '\\\\'',\\n            end: '[^\\\\\\\\\\\\\\\\]\\\\''\\n          },\\n          // Backquoted string\\n          {\\n            begin: '`',\\n            end: '[^\\\\\\\\\\\\\\\\]`'\\n          }\\n        ],\\n        relevance: 0\\n      },\\n      {\\n        className: 'symbol',\\n        variants: [\\n          // Global label and local label\\n          { begin: '^\\\\\\\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\\\\\\\s+label)' },\\n          // Macro-local label\\n          { begin: '^\\\\\\\\s*%%[A-Za-z0-9_$#@~.?]*:' }\\n        ],\\n        relevance: 0\\n      },\\n      // Macro parameter\\n      {\\n        className: 'subst',\\n        begin: '%[0-9]+',\\n        relevance: 0\\n      },\\n      // Macro parameter\\n      {\\n        className: 'subst',\\n        begin: '%!\\\\S+',\\n        relevance: 0\\n      },\\n      {\\n        className: 'meta',\\n        begin: /^\\\\s*\\\\.[\\\\w_-]+/\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = x86asm;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/x86asm.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/xl.js\":\n/*!*******************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/xl.js ***!\n  \\*******************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: XL\\nAuthor: Christophe de Dinechin <christophe@taodyne.com>\\nDescription: An extensible programming language, based on parse tree rewriting\\nWebsite: http://xlr.sf.net\\n*/\\n\\nfunction xl(hljs) {\\n  const KWS = [\\n    \\\"if\\\",\\n    \\\"then\\\",\\n    \\\"else\\\",\\n    \\\"do\\\",\\n    \\\"while\\\",\\n    \\\"until\\\",\\n    \\\"for\\\",\\n    \\\"loop\\\",\\n    \\\"import\\\",\\n    \\\"with\\\",\\n    \\\"is\\\",\\n    \\\"as\\\",\\n    \\\"where\\\",\\n    \\\"when\\\",\\n    \\\"by\\\",\\n    \\\"data\\\",\\n    \\\"constant\\\",\\n    \\\"integer\\\",\\n    \\\"real\\\",\\n    \\\"text\\\",\\n    \\\"name\\\",\\n    \\\"boolean\\\",\\n    \\\"symbol\\\",\\n    \\\"infix\\\",\\n    \\\"prefix\\\",\\n    \\\"postfix\\\",\\n    \\\"block\\\",\\n    \\\"tree\\\"\\n  ];\\n  const BUILT_INS = [\\n    \\\"in\\\",\\n    \\\"mod\\\",\\n    \\\"rem\\\",\\n    \\\"and\\\",\\n    \\\"or\\\",\\n    \\\"xor\\\",\\n    \\\"not\\\",\\n    \\\"abs\\\",\\n    \\\"sign\\\",\\n    \\\"floor\\\",\\n    \\\"ceil\\\",\\n    \\\"sqrt\\\",\\n    \\\"sin\\\",\\n    \\\"cos\\\",\\n    \\\"tan\\\",\\n    \\\"asin\\\",\\n    \\\"acos\\\",\\n    \\\"atan\\\",\\n    \\\"exp\\\",\\n    \\\"expm1\\\",\\n    \\\"log\\\",\\n    \\\"log2\\\",\\n    \\\"log10\\\",\\n    \\\"log1p\\\",\\n    \\\"pi\\\",\\n    \\\"at\\\",\\n    \\\"text_length\\\",\\n    \\\"text_range\\\",\\n    \\\"text_find\\\",\\n    \\\"text_replace\\\",\\n    \\\"contains\\\",\\n    \\\"page\\\",\\n    \\\"slide\\\",\\n    \\\"basic_slide\\\",\\n    \\\"title_slide\\\",\\n    \\\"title\\\",\\n    \\\"subtitle\\\",\\n    \\\"fade_in\\\",\\n    \\\"fade_out\\\",\\n    \\\"fade_at\\\",\\n    \\\"clear_color\\\",\\n    \\\"color\\\",\\n    \\\"line_color\\\",\\n    \\\"line_width\\\",\\n    \\\"texture_wrap\\\",\\n    \\\"texture_transform\\\",\\n    \\\"texture\\\",\\n    \\\"scale_?x\\\",\\n    \\\"scale_?y\\\",\\n    \\\"scale_?z?\\\",\\n    \\\"translate_?x\\\",\\n    \\\"translate_?y\\\",\\n    \\\"translate_?z?\\\",\\n    \\\"rotate_?x\\\",\\n    \\\"rotate_?y\\\",\\n    \\\"rotate_?z?\\\",\\n    \\\"rectangle\\\",\\n    \\\"circle\\\",\\n    \\\"ellipse\\\",\\n    \\\"sphere\\\",\\n    \\\"path\\\",\\n    \\\"line_to\\\",\\n    \\\"move_to\\\",\\n    \\\"quad_to\\\",\\n    \\\"curve_to\\\",\\n    \\\"theme\\\",\\n    \\\"background\\\",\\n    \\\"contents\\\",\\n    \\\"locally\\\",\\n    \\\"time\\\",\\n    \\\"mouse_?x\\\",\\n    \\\"mouse_?y\\\",\\n    \\\"mouse_buttons\\\"\\n  ];\\n  const BUILTIN_MODULES = [\\n    \\\"ObjectLoader\\\",\\n    \\\"Animate\\\",\\n    \\\"MovieCredits\\\",\\n    \\\"Slides\\\",\\n    \\\"Filters\\\",\\n    \\\"Shading\\\",\\n    \\\"Materials\\\",\\n    \\\"LensFlare\\\",\\n    \\\"Mapping\\\",\\n    \\\"VLCAudioVideo\\\",\\n    \\\"StereoDecoder\\\",\\n    \\\"PointCloud\\\",\\n    \\\"NetworkAccess\\\",\\n    \\\"RemoteControl\\\",\\n    \\\"RegExp\\\",\\n    \\\"ChromaKey\\\",\\n    \\\"Snowfall\\\",\\n    \\\"NodeJS\\\",\\n    \\\"Speech\\\",\\n    \\\"Charts\\\"\\n  ];\\n  const LITERALS = [\\n    \\\"true\\\",\\n    \\\"false\\\",\\n    \\\"nil\\\"\\n  ];\\n  const KEYWORDS = {\\n    $pattern: /[a-zA-Z][a-zA-Z0-9_?]*/,\\n    keyword: KWS,\\n    literal: LITERALS,\\n    built_in: BUILT_INS.concat(BUILTIN_MODULES)\\n  };\\n\\n  const DOUBLE_QUOTE_TEXT = {\\n    className: 'string',\\n    begin: '\\\"',\\n    end: '\\\"',\\n    illegal: '\\\\\\\\n'\\n  };\\n  const SINGLE_QUOTE_TEXT = {\\n    className: 'string',\\n    begin: '\\\\'',\\n    end: '\\\\'',\\n    illegal: '\\\\\\\\n'\\n  };\\n  const LONG_TEXT = {\\n    className: 'string',\\n    begin: '<<',\\n    end: '>>'\\n  };\\n  const BASED_NUMBER = {\\n    className: 'number',\\n    begin: '[0-9]+#[0-9A-Z_]+(\\\\\\\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?'\\n  };\\n  const IMPORT = {\\n    beginKeywords: 'import',\\n    end: '$',\\n    keywords: KEYWORDS,\\n    contains: [ DOUBLE_QUOTE_TEXT ]\\n  };\\n  const FUNCTION_DEFINITION = {\\n    className: 'function',\\n    begin: /[a-z][^\\\\n]*->/,\\n    returnBegin: true,\\n    end: /->/,\\n    contains: [\\n      hljs.inherit(hljs.TITLE_MODE, { starts: {\\n        endsWithParent: true,\\n        keywords: KEYWORDS\\n      } })\\n    ]\\n  };\\n  return {\\n    name: 'XL',\\n    aliases: [ 'tao' ],\\n    keywords: KEYWORDS,\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.C_BLOCK_COMMENT_MODE,\\n      DOUBLE_QUOTE_TEXT,\\n      SINGLE_QUOTE_TEXT,\\n      LONG_TEXT,\\n      FUNCTION_DEFINITION,\\n      IMPORT,\\n      BASED_NUMBER,\\n      hljs.NUMBER_MODE\\n    ]\\n  };\\n}\\n\\nmodule.exports = xl;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/xl.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/xml.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/xml.js ***!\n  \\********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: HTML, XML\\nWebsite: https://www.w3.org/XML/\\nCategory: common, web\\nAudit: 2020\\n*/\\n\\n/** @type LanguageFn */\\nfunction xml(hljs) {\\n  const regex = hljs.regex;\\n  // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\\n  // OTHER_NAME_CHARS = /[:\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]/;\\n  // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\\n  // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD]/, regex.optional(/[A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*:/), /[A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*/);;\\n  // const XML_IDENT_RE = /[A-Z_a-z:\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]+/;\\n  // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD]/, regex.optional(/[A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*:/), /[A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*/);\\n  // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\\n  const TAG_NAME_RE = regex.concat(/[\\\\p{L}_]/u, regex.optional(/[\\\\p{L}0-9_.-]*:/u), /[\\\\p{L}0-9_.-]*/u);\\n  const XML_IDENT_RE = /[\\\\p{L}0-9._:-]+/u;\\n  const XML_ENTITIES = {\\n    className: 'symbol',\\n    begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\\n  };\\n  const XML_META_KEYWORDS = {\\n    begin: /\\\\s/,\\n    contains: [\\n      {\\n        className: 'keyword',\\n        begin: /#?[a-z_][a-z1-9_-]+/,\\n        illegal: /\\\\n/\\n      }\\n    ]\\n  };\\n  const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\\n    begin: /\\\\(/,\\n    end: /\\\\)/\\n  });\\n  const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\\n  const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\\n  const TAG_INTERNALS = {\\n    endsWithParent: true,\\n    illegal: /</,\\n    relevance: 0,\\n    contains: [\\n      {\\n        className: 'attr',\\n        begin: XML_IDENT_RE,\\n        relevance: 0\\n      },\\n      {\\n        begin: /=\\\\s*/,\\n        relevance: 0,\\n        contains: [\\n          {\\n            className: 'string',\\n            endsParent: true,\\n            variants: [\\n              {\\n                begin: /\\\"/,\\n                end: /\\\"/,\\n                contains: [ XML_ENTITIES ]\\n              },\\n              {\\n                begin: /'/,\\n                end: /'/,\\n                contains: [ XML_ENTITIES ]\\n              },\\n              { begin: /[^\\\\s\\\"'=<>`]+/ }\\n            ]\\n          }\\n        ]\\n      }\\n    ]\\n  };\\n  return {\\n    name: 'HTML, XML',\\n    aliases: [\\n      'html',\\n      'xhtml',\\n      'rss',\\n      'atom',\\n      'xjb',\\n      'xsd',\\n      'xsl',\\n      'plist',\\n      'wsf',\\n      'svg'\\n    ],\\n    case_insensitive: true,\\n    unicodeRegex: true,\\n    contains: [\\n      {\\n        className: 'meta',\\n        begin: /<![a-z]/,\\n        end: />/,\\n        relevance: 10,\\n        contains: [\\n          XML_META_KEYWORDS,\\n          QUOTE_META_STRING_MODE,\\n          APOS_META_STRING_MODE,\\n          XML_META_PAR_KEYWORDS,\\n          {\\n            begin: /\\\\[/,\\n            end: /\\\\]/,\\n            contains: [\\n              {\\n                className: 'meta',\\n                begin: /<![a-z]/,\\n                end: />/,\\n                contains: [\\n                  XML_META_KEYWORDS,\\n                  XML_META_PAR_KEYWORDS,\\n                  QUOTE_META_STRING_MODE,\\n                  APOS_META_STRING_MODE\\n                ]\\n              }\\n            ]\\n          }\\n        ]\\n      },\\n      hljs.COMMENT(\\n        /<!--/,\\n        /-->/,\\n        { relevance: 10 }\\n      ),\\n      {\\n        begin: /<!\\\\[CDATA\\\\[/,\\n        end: /\\\\]\\\\]>/,\\n        relevance: 10\\n      },\\n      XML_ENTITIES,\\n      // xml processing instructions\\n      {\\n        className: 'meta',\\n        end: /\\\\?>/,\\n        variants: [\\n          {\\n            begin: /<\\\\?xml/,\\n            relevance: 10,\\n            contains: [\\n              QUOTE_META_STRING_MODE\\n            ]\\n          },\\n          {\\n            begin: /<\\\\?[a-z][a-z0-9]+/,\\n          }\\n        ]\\n\\n      },\\n      {\\n        className: 'tag',\\n        /*\\n        The lookahead pattern (?=...) ensures that 'begin' only matches\\n        '<style' as a single word, followed by a whitespace or an\\n        ending bracket.\\n        */\\n        begin: /<style(?=\\\\s|>)/,\\n        end: />/,\\n        keywords: { name: 'style' },\\n        contains: [ TAG_INTERNALS ],\\n        starts: {\\n          end: /<\\\\/style>/,\\n          returnEnd: true,\\n          subLanguage: [\\n            'css',\\n            'xml'\\n          ]\\n        }\\n      },\\n      {\\n        className: 'tag',\\n        // See the comment in the <style tag about the lookahead pattern\\n        begin: /<script(?=\\\\s|>)/,\\n        end: />/,\\n        keywords: { name: 'script' },\\n        contains: [ TAG_INTERNALS ],\\n        starts: {\\n          end: /<\\\\/script>/,\\n          returnEnd: true,\\n          subLanguage: [\\n            'javascript',\\n            'handlebars',\\n            'xml'\\n          ]\\n        }\\n      },\\n      // we need this for now for jSX\\n      {\\n        className: 'tag',\\n        begin: /<>|<\\\\/>/\\n      },\\n      // open tag\\n      {\\n        className: 'tag',\\n        begin: regex.concat(\\n          /</,\\n          regex.lookahead(regex.concat(\\n            TAG_NAME_RE,\\n            // <tag/>\\n            // <tag>\\n            // <tag ...\\n            regex.either(/\\\\/>/, />/, /\\\\s/)\\n          ))\\n        ),\\n        end: /\\\\/?>/,\\n        contains: [\\n          {\\n            className: 'name',\\n            begin: TAG_NAME_RE,\\n            relevance: 0,\\n            starts: TAG_INTERNALS\\n          }\\n        ]\\n      },\\n      // close tag\\n      {\\n        className: 'tag',\\n        begin: regex.concat(\\n          /<\\\\//,\\n          regex.lookahead(regex.concat(\\n            TAG_NAME_RE, />/\\n          ))\\n        ),\\n        contains: [\\n          {\\n            className: 'name',\\n            begin: TAG_NAME_RE,\\n            relevance: 0\\n          },\\n          {\\n            begin: />/,\\n            relevance: 0,\\n            endsParent: true\\n          }\\n        ]\\n      }\\n    ]\\n  };\\n}\\n\\nmodule.exports = xml;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/xml.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/xquery.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/xquery.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: XQuery\\nAuthor: Dirk Kirsten <dk@basex.org>\\nContributor: Duncan Paterson\\nDescription: Supports XQuery 3.1 including XQuery Update 3, so also XPath (as it is a superset)\\nRefactored to process xml constructor syntax and function-bodies. Added missing data-types, xpath operands, inbuilt functions, and query prologs\\nWebsite: https://www.w3.org/XML/Query/\\nCategory: functional\\nAudit: 2020\\n*/\\n\\n/** @type LanguageFn */\\nfunction xquery(_hljs) {\\n  // see https://www.w3.org/TR/xquery/#id-terminal-delimitation\\n  const KEYWORDS = [\\n    \\\"module\\\",\\n    \\\"schema\\\",\\n    \\\"namespace\\\",\\n    \\\"boundary-space\\\",\\n    \\\"preserve\\\",\\n    \\\"no-preserve\\\",\\n    \\\"strip\\\",\\n    \\\"default\\\",\\n    \\\"collation\\\",\\n    \\\"base-uri\\\",\\n    \\\"ordering\\\",\\n    \\\"context\\\",\\n    \\\"decimal-format\\\",\\n    \\\"decimal-separator\\\",\\n    \\\"copy-namespaces\\\",\\n    \\\"empty-sequence\\\",\\n    \\\"except\\\",\\n    \\\"exponent-separator\\\",\\n    \\\"external\\\",\\n    \\\"grouping-separator\\\",\\n    \\\"inherit\\\",\\n    \\\"no-inherit\\\",\\n    \\\"lax\\\",\\n    \\\"minus-sign\\\",\\n    \\\"per-mille\\\",\\n    \\\"percent\\\",\\n    \\\"schema-attribute\\\",\\n    \\\"schema-element\\\",\\n    \\\"strict\\\",\\n    \\\"unordered\\\",\\n    \\\"zero-digit\\\",\\n    \\\"declare\\\",\\n    \\\"import\\\",\\n    \\\"option\\\",\\n    \\\"function\\\",\\n    \\\"validate\\\",\\n    \\\"variable\\\",\\n    \\\"for\\\",\\n    \\\"at\\\",\\n    \\\"in\\\",\\n    \\\"let\\\",\\n    \\\"where\\\",\\n    \\\"order\\\",\\n    \\\"group\\\",\\n    \\\"by\\\",\\n    \\\"return\\\",\\n    \\\"if\\\",\\n    \\\"then\\\",\\n    \\\"else\\\",\\n    \\\"tumbling\\\",\\n    \\\"sliding\\\",\\n    \\\"window\\\",\\n    \\\"start\\\",\\n    \\\"when\\\",\\n    \\\"only\\\",\\n    \\\"end\\\",\\n    \\\"previous\\\",\\n    \\\"next\\\",\\n    \\\"stable\\\",\\n    \\\"ascending\\\",\\n    \\\"descending\\\",\\n    \\\"allowing\\\",\\n    \\\"empty\\\",\\n    \\\"greatest\\\",\\n    \\\"least\\\",\\n    \\\"some\\\",\\n    \\\"every\\\",\\n    \\\"satisfies\\\",\\n    \\\"switch\\\",\\n    \\\"case\\\",\\n    \\\"typeswitch\\\",\\n    \\\"try\\\",\\n    \\\"catch\\\",\\n    \\\"and\\\",\\n    \\\"or\\\",\\n    \\\"to\\\",\\n    \\\"union\\\",\\n    \\\"intersect\\\",\\n    \\\"instance\\\",\\n    \\\"of\\\",\\n    \\\"treat\\\",\\n    \\\"as\\\",\\n    \\\"castable\\\",\\n    \\\"cast\\\",\\n    \\\"map\\\",\\n    \\\"array\\\",\\n    \\\"delete\\\",\\n    \\\"insert\\\",\\n    \\\"into\\\",\\n    \\\"replace\\\",\\n    \\\"value\\\",\\n    \\\"rename\\\",\\n    \\\"copy\\\",\\n    \\\"modify\\\",\\n    \\\"update\\\"\\n  ];\\n\\n  // Node Types (sorted by inheritance)\\n  // atomic types (sorted by inheritance)\\n  const TYPES = [\\n    \\\"item\\\",\\n    \\\"document-node\\\",\\n    \\\"node\\\",\\n    \\\"attribute\\\",\\n    \\\"document\\\",\\n    \\\"element\\\",\\n    \\\"comment\\\",\\n    \\\"namespace\\\",\\n    \\\"namespace-node\\\",\\n    \\\"processing-instruction\\\",\\n    \\\"text\\\",\\n    \\\"construction\\\",\\n    \\\"xs:anyAtomicType\\\",\\n    \\\"xs:untypedAtomic\\\",\\n    \\\"xs:duration\\\",\\n    \\\"xs:time\\\",\\n    \\\"xs:decimal\\\",\\n    \\\"xs:float\\\",\\n    \\\"xs:double\\\",\\n    \\\"xs:gYearMonth\\\",\\n    \\\"xs:gYear\\\",\\n    \\\"xs:gMonthDay\\\",\\n    \\\"xs:gMonth\\\",\\n    \\\"xs:gDay\\\",\\n    \\\"xs:boolean\\\",\\n    \\\"xs:base64Binary\\\",\\n    \\\"xs:hexBinary\\\",\\n    \\\"xs:anyURI\\\",\\n    \\\"xs:QName\\\",\\n    \\\"xs:NOTATION\\\",\\n    \\\"xs:dateTime\\\",\\n    \\\"xs:dateTimeStamp\\\",\\n    \\\"xs:date\\\",\\n    \\\"xs:string\\\",\\n    \\\"xs:normalizedString\\\",\\n    \\\"xs:token\\\",\\n    \\\"xs:language\\\",\\n    \\\"xs:NMTOKEN\\\",\\n    \\\"xs:Name\\\",\\n    \\\"xs:NCName\\\",\\n    \\\"xs:ID\\\",\\n    \\\"xs:IDREF\\\",\\n    \\\"xs:ENTITY\\\",\\n    \\\"xs:integer\\\",\\n    \\\"xs:nonPositiveInteger\\\",\\n    \\\"xs:negativeInteger\\\",\\n    \\\"xs:long\\\",\\n    \\\"xs:int\\\",\\n    \\\"xs:short\\\",\\n    \\\"xs:byte\\\",\\n    \\\"xs:nonNegativeInteger\\\",\\n    \\\"xs:unisignedLong\\\",\\n    \\\"xs:unsignedInt\\\",\\n    \\\"xs:unsignedShort\\\",\\n    \\\"xs:unsignedByte\\\",\\n    \\\"xs:positiveInteger\\\",\\n    \\\"xs:yearMonthDuration\\\",\\n    \\\"xs:dayTimeDuration\\\"\\n  ];\\n\\n  const LITERALS = [\\n    \\\"eq\\\",\\n    \\\"ne\\\",\\n    \\\"lt\\\",\\n    \\\"le\\\",\\n    \\\"gt\\\",\\n    \\\"ge\\\",\\n    \\\"is\\\",\\n    \\\"self::\\\",\\n    \\\"child::\\\",\\n    \\\"descendant::\\\",\\n    \\\"descendant-or-self::\\\",\\n    \\\"attribute::\\\",\\n    \\\"following::\\\",\\n    \\\"following-sibling::\\\",\\n    \\\"parent::\\\",\\n    \\\"ancestor::\\\",\\n    \\\"ancestor-or-self::\\\",\\n    \\\"preceding::\\\",\\n    \\\"preceding-sibling::\\\",\\n    \\\"NaN\\\"\\n  ];\\n\\n  // functions (TODO: find regex for op: without breaking build)\\n  const BUILT_IN = {\\n    className: 'built_in',\\n    variants: [\\n      {\\n        begin: /\\\\barray:/,\\n        end: /(?:append|filter|flatten|fold-(?:left|right)|for-each(?:-pair)?|get|head|insert-before|join|put|remove|reverse|size|sort|subarray|tail)\\\\b/\\n      },\\n      {\\n        begin: /\\\\bmap:/,\\n        end: /(?:contains|entry|find|for-each|get|keys|merge|put|remove|size)\\\\b/\\n      },\\n      {\\n        begin: /\\\\bmath:/,\\n        end: /(?:a(?:cos|sin|tan[2]?)|cos|exp(?:10)?|log(?:10)?|pi|pow|sin|sqrt|tan)\\\\b/\\n      },\\n      {\\n        begin: /\\\\bop:/,\\n        end: /\\\\(/,\\n        excludeEnd: true\\n      },\\n      {\\n        begin: /\\\\bfn:/,\\n        end: /\\\\(/,\\n        excludeEnd: true\\n      },\\n      // do not highlight inbuilt strings as variable or xml element names\\n      { begin: /[^</$:'\\\"-]\\\\b(?:abs|accumulator-(?:after|before)|adjust-(?:date(?:Time)?|time)-to-timezone|analyze-string|apply|available-(?:environment-variables|system-properties)|avg|base-uri|boolean|ceiling|codepoints?-(?:equal|to-string)|collation-key|collection|compare|concat|contains(?:-token)?|copy-of|count|current(?:-)?(?:date(?:Time)?|time|group(?:ing-key)?|output-uri|merge-(?:group|key))?data|dateTime|days?-from-(?:date(?:Time)?|duration)|deep-equal|default-(?:collation|language)|distinct-values|document(?:-uri)?|doc(?:-available)?|element-(?:available|with-id)|empty|encode-for-uri|ends-with|environment-variable|error|escape-html-uri|exactly-one|exists|false|filter|floor|fold-(?:left|right)|for-each(?:-pair)?|format-(?:date(?:Time)?|time|integer|number)|function-(?:arity|available|lookup|name)|generate-id|has-children|head|hours-from-(?:dateTime|duration|time)|id(?:ref)?|implicit-timezone|in-scope-prefixes|index-of|innermost|insert-before|iri-to-uri|json-(?:doc|to-xml)|key|lang|last|load-xquery-module|local-name(?:-from-QName)?|(?:lower|upper)-case|matches|max|minutes-from-(?:dateTime|duration|time)|min|months?-from-(?:date(?:Time)?|duration)|name(?:space-uri-?(?:for-prefix|from-QName)?)?|nilled|node-name|normalize-(?:space|unicode)|not|number|one-or-more|outermost|parse-(?:ietf-date|json)|path|position|(?:prefix-from-)?QName|random-number-generator|regex-group|remove|replace|resolve-(?:QName|uri)|reverse|root|round(?:-half-to-even)?|seconds-from-(?:dateTime|duration|time)|snapshot|sort|starts-with|static-base-uri|stream-available|string-?(?:join|length|to-codepoints)?|subsequence|substring-?(?:after|before)?|sum|system-property|tail|timezone-from-(?:date(?:Time)?|time)|tokenize|trace|trans(?:form|late)|true|type-available|unordered|unparsed-(?:entity|text)?-?(?:public-id|uri|available|lines)?|uri-collection|xml-to-json|years?-from-(?:date(?:Time)?|duration)|zero-or-one)\\\\b/ },\\n      {\\n        begin: /\\\\blocal:/,\\n        end: /\\\\(/,\\n        excludeEnd: true\\n      },\\n      {\\n        begin: /\\\\bzip:/,\\n        end: /(?:zip-file|(?:xml|html|text|binary)-entry| (?:update-)?entries)\\\\b/\\n      },\\n      {\\n        begin: /\\\\b(?:util|db|functx|app|xdmp|xmldb):/,\\n        end: /\\\\(/,\\n        excludeEnd: true\\n      }\\n    ]\\n  };\\n\\n  const TITLE = {\\n    className: 'title',\\n    begin: /\\\\bxquery version \\\"[13]\\\\.[01]\\\"\\\\s?(?:encoding \\\".+\\\")?/,\\n    end: /;/\\n  };\\n\\n  const VAR = {\\n    className: 'variable',\\n    begin: /[$][\\\\w\\\\-:]+/\\n  };\\n\\n  const NUMBER = {\\n    className: 'number',\\n    begin: /(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b/,\\n    relevance: 0\\n  };\\n\\n  const STRING = {\\n    className: 'string',\\n    variants: [\\n      {\\n        begin: /\\\"/,\\n        end: /\\\"/,\\n        contains: [\\n          {\\n            begin: /\\\"\\\"/,\\n            relevance: 0\\n          }\\n        ]\\n      },\\n      {\\n        begin: /'/,\\n        end: /'/,\\n        contains: [\\n          {\\n            begin: /''/,\\n            relevance: 0\\n          }\\n        ]\\n      }\\n    ]\\n  };\\n\\n  const ANNOTATION = {\\n    className: 'meta',\\n    begin: /%[\\\\w\\\\-:]+/\\n  };\\n\\n  const COMMENT = {\\n    className: 'comment',\\n    begin: /\\\\(:/,\\n    end: /:\\\\)/,\\n    relevance: 10,\\n    contains: [\\n      {\\n        className: 'doctag',\\n        begin: /@\\\\w+/\\n      }\\n    ]\\n  };\\n\\n  // see https://www.w3.org/TR/xquery/#id-computedConstructors\\n  // mocha: computed_inbuilt\\n  // see https://www.regexpal.com/?fam=99749\\n  const COMPUTED = {\\n    beginKeywords: 'element attribute comment document processing-instruction',\\n    end: /\\\\{/,\\n    excludeEnd: true\\n  };\\n\\n  // mocha: direct_method\\n  const DIRECT = {\\n    begin: /<([\\\\w._:-]+)(\\\\s+\\\\S*=('|\\\").*('|\\\"))?>/,\\n    end: /(\\\\/[\\\\w._:-]+>)/,\\n    subLanguage: 'xml',\\n    contains: [\\n      {\\n        begin: /\\\\{/,\\n        end: /\\\\}/,\\n        subLanguage: 'xquery'\\n      },\\n      'self'\\n    ]\\n  };\\n\\n  const CONTAINS = [\\n    VAR,\\n    BUILT_IN,\\n    STRING,\\n    NUMBER,\\n    COMMENT,\\n    ANNOTATION,\\n    TITLE,\\n    COMPUTED,\\n    DIRECT\\n  ];\\n\\n  return {\\n    name: 'XQuery',\\n    aliases: [\\n      'xpath',\\n      'xq'\\n    ],\\n    case_insensitive: false,\\n    illegal: /(proc)|(abstract)|(extends)|(until)|(#)/,\\n    keywords: {\\n      $pattern: /[a-zA-Z$][a-zA-Z0-9_:-]*/,\\n      keyword: KEYWORDS,\\n      type: TYPES,\\n      literal: LITERALS\\n    },\\n    contains: CONTAINS\\n  };\\n}\\n\\nmodule.exports = xquery;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/xquery.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/yaml.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/yaml.js ***!\n  \\*********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\nLanguage: YAML\\nDescription: Yet Another Markdown Language\\nAuthor: Stefan Wienert <stwienert@gmail.com>\\nContributors: Carl Baxter <carl@cbax.tech>\\nRequires: ruby.js\\nWebsite: https://yaml.org\\nCategory: common, config\\n*/\\nfunction yaml(hljs) {\\n  const LITERALS = 'true false yes no null';\\n\\n  // YAML spec allows non-reserved URI characters in tags.\\n  const URI_CHARACTERS = '[\\\\\\\\w#;/?:@&=+$,.~*\\\\'()[\\\\\\\\]]+';\\n\\n  // Define keys as starting with a word character\\n  // ...containing word chars, spaces, colons, forward-slashes, hyphens and periods\\n  // ...and ending with a colon followed immediately by a space, tab or newline.\\n  // The YAML spec allows for much more than this, but this covers most use-cases.\\n  const KEY = {\\n    className: 'attr',\\n    variants: [\\n      { begin: '\\\\\\\\w[\\\\\\\\w :\\\\\\\\/.-]*:(?=[ \\\\t]|$)' },\\n      { // double quoted keys\\n        begin: '\\\"\\\\\\\\w[\\\\\\\\w :\\\\\\\\/.-]*\\\":(?=[ \\\\t]|$)' },\\n      { // single quoted keys\\n        begin: '\\\\'\\\\\\\\w[\\\\\\\\w :\\\\\\\\/.-]*\\\\':(?=[ \\\\t]|$)' }\\n    ]\\n  };\\n\\n  const TEMPLATE_VARIABLES = {\\n    className: 'template-variable',\\n    variants: [\\n      { // jinja templates Ansible\\n        begin: /\\\\{\\\\{/,\\n        end: /\\\\}\\\\}/\\n      },\\n      { // Ruby i18n\\n        begin: /%\\\\{/,\\n        end: /\\\\}/\\n      }\\n    ]\\n  };\\n  const STRING = {\\n    className: 'string',\\n    relevance: 0,\\n    variants: [\\n      {\\n        begin: /'/,\\n        end: /'/\\n      },\\n      {\\n        begin: /\\\"/,\\n        end: /\\\"/\\n      },\\n      { begin: /\\\\S+/ }\\n    ],\\n    contains: [\\n      hljs.BACKSLASH_ESCAPE,\\n      TEMPLATE_VARIABLES\\n    ]\\n  };\\n\\n  // Strings inside of value containers (objects) can't contain braces,\\n  // brackets, or commas\\n  const CONTAINER_STRING = hljs.inherit(STRING, { variants: [\\n    {\\n      begin: /'/,\\n      end: /'/\\n    },\\n    {\\n      begin: /\\\"/,\\n      end: /\\\"/\\n    },\\n    { begin: /[^\\\\s,{}[\\\\]]+/ }\\n  ] });\\n\\n  const DATE_RE = '[0-9]{4}(-[0-9][0-9]){0,2}';\\n  const TIME_RE = '([Tt \\\\\\\\t][0-9][0-9]?(:[0-9][0-9]){2})?';\\n  const FRACTION_RE = '(\\\\\\\\.[0-9]*)?';\\n  const ZONE_RE = '([ \\\\\\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?';\\n  const TIMESTAMP = {\\n    className: 'number',\\n    begin: '\\\\\\\\b' + DATE_RE + TIME_RE + FRACTION_RE + ZONE_RE + '\\\\\\\\b'\\n  };\\n\\n  const VALUE_CONTAINER = {\\n    end: ',',\\n    endsWithParent: true,\\n    excludeEnd: true,\\n    keywords: LITERALS,\\n    relevance: 0\\n  };\\n  const OBJECT = {\\n    begin: /\\\\{/,\\n    end: /\\\\}/,\\n    contains: [ VALUE_CONTAINER ],\\n    illegal: '\\\\\\\\n',\\n    relevance: 0\\n  };\\n  const ARRAY = {\\n    begin: '\\\\\\\\[',\\n    end: '\\\\\\\\]',\\n    contains: [ VALUE_CONTAINER ],\\n    illegal: '\\\\\\\\n',\\n    relevance: 0\\n  };\\n\\n  const MODES = [\\n    KEY,\\n    {\\n      className: 'meta',\\n      begin: '^---\\\\\\\\s*$',\\n      relevance: 10\\n    },\\n    { // multi line string\\n      // Blocks start with a | or > followed by a newline\\n      //\\n      // Indentation of subsequent lines must be the same to\\n      // be considered part of the block\\n      className: 'string',\\n      begin: '[\\\\\\\\|>]([1-9]?[+-])?[ ]*\\\\\\\\n( +)[^ ][^\\\\\\\\n]*\\\\\\\\n(\\\\\\\\2[^\\\\\\\\n]+\\\\\\\\n?)*'\\n    },\\n    { // Ruby/Rails erb\\n      begin: '<%[%=-]?',\\n      end: '[%-]?%>',\\n      subLanguage: 'ruby',\\n      excludeBegin: true,\\n      excludeEnd: true,\\n      relevance: 0\\n    },\\n    { // named tags\\n      className: 'type',\\n      begin: '!\\\\\\\\w+!' + URI_CHARACTERS\\n    },\\n    // https://yaml.org/spec/1.2/spec.html#id2784064\\n    { // verbatim tags\\n      className: 'type',\\n      begin: '!<' + URI_CHARACTERS + \\\">\\\"\\n    },\\n    { // primary tags\\n      className: 'type',\\n      begin: '!' + URI_CHARACTERS\\n    },\\n    { // secondary tags\\n      className: 'type',\\n      begin: '!!' + URI_CHARACTERS\\n    },\\n    { // fragment id &ref\\n      className: 'meta',\\n      begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$'\\n    },\\n    { // fragment reference *ref\\n      className: 'meta',\\n      begin: '\\\\\\\\*' + hljs.UNDERSCORE_IDENT_RE + '$'\\n    },\\n    { // array listing\\n      className: 'bullet',\\n      // TODO: remove |$ hack when we have proper look-ahead support\\n      begin: '-(?=[ ]|$)',\\n      relevance: 0\\n    },\\n    hljs.HASH_COMMENT_MODE,\\n    {\\n      beginKeywords: LITERALS,\\n      keywords: { literal: LITERALS }\\n    },\\n    TIMESTAMP,\\n    // numbers are any valid C-style number that\\n    // sit isolated from other words\\n    {\\n      className: 'number',\\n      begin: hljs.C_NUMBER_RE + '\\\\\\\\b',\\n      relevance: 0\\n    },\\n    OBJECT,\\n    ARRAY,\\n    STRING\\n  ];\\n\\n  const VALUE_MODES = [ ...MODES ];\\n  VALUE_MODES.pop();\\n  VALUE_MODES.push(CONTAINER_STRING);\\n  VALUE_CONTAINER.contains = VALUE_MODES;\\n\\n  return {\\n    name: 'YAML',\\n    case_insensitive: true,\\n    aliases: [ 'yml' ],\\n    contains: MODES\\n  };\\n}\\n\\nmodule.exports = yaml;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/yaml.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/lib/languages/zephir.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/highlight.js/lib/languages/zephir.js ***!\n  \\***********************************************************/\n/***/ (function(module) {\n\neval(\"/*\\n Language: Zephir\\n Description: Zephir, an open source, high-level language designed to ease the creation and maintainability of extensions for PHP with a focus on type and memory safety.\\n Author: Oleg Efimov <efimovov@gmail.com>\\n Website: https://zephir-lang.com/en\\n Audit: 2020\\n */\\n\\n/** @type LanguageFn */\\nfunction zephir(hljs) {\\n  const STRING = {\\n    className: 'string',\\n    contains: [ hljs.BACKSLASH_ESCAPE ],\\n    variants: [\\n      hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }),\\n      hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null })\\n    ]\\n  };\\n  const TITLE_MODE = hljs.UNDERSCORE_TITLE_MODE;\\n  const NUMBER = { variants: [\\n    hljs.BINARY_NUMBER_MODE,\\n    hljs.C_NUMBER_MODE\\n  ] };\\n  const KEYWORDS =\\n    // classes and objects\\n    'namespace class interface use extends '\\n    + 'function return '\\n    + 'abstract final public protected private static deprecated '\\n    // error handling\\n    + 'throw try catch Exception '\\n    // keyword-ish things their website does NOT seem to highlight (in their own snippets)\\n    // 'typeof fetch in ' +\\n    // operators/helpers\\n    + 'echo empty isset instanceof unset '\\n    // assignment/variables\\n    + 'let var new const self '\\n    // control\\n    + 'require '\\n    + 'if else elseif switch case default '\\n    + 'do while loop for continue break '\\n    + 'likely unlikely '\\n    // magic constants\\n    // https://github.com/phalcon/zephir/blob/master/Library/Expression/Constants.php\\n    + '__LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ __TRAIT__ __METHOD__ __NAMESPACE__ '\\n    // types - https://docs.zephir-lang.com/0.12/en/types\\n    + 'array boolean float double integer object resource string '\\n    + 'char long unsigned bool int uint ulong uchar '\\n    // built-ins\\n    + 'true false null undefined';\\n\\n  return {\\n    name: 'Zephir',\\n    aliases: [ 'zep' ],\\n    keywords: KEYWORDS,\\n    contains: [\\n      hljs.C_LINE_COMMENT_MODE,\\n      hljs.COMMENT(\\n        /\\\\/\\\\*/,\\n        /\\\\*\\\\//,\\n        { contains: [\\n          {\\n            className: 'doctag',\\n            begin: /@[A-Za-z]+/\\n          }\\n        ] }\\n      ),\\n      {\\n        className: 'string',\\n        begin: /<<<['\\\"]?\\\\w+['\\\"]?$/,\\n        end: /^\\\\w+;/,\\n        contains: [ hljs.BACKSLASH_ESCAPE ]\\n      },\\n      {\\n        // swallow composed identifiers to avoid parsing them as keywords\\n        begin: /(::|->)+[a-zA-Z_\\\\x7f-\\\\xff][a-zA-Z0-9_\\\\x7f-\\\\xff]*/ },\\n      {\\n        className: 'function',\\n        beginKeywords: 'function fn',\\n        end: /[;{]/,\\n        excludeEnd: true,\\n        illegal: /\\\\$|\\\\[|%/,\\n        contains: [\\n          TITLE_MODE,\\n          {\\n            className: 'params',\\n            begin: /\\\\(/,\\n            end: /\\\\)/,\\n            keywords: KEYWORDS,\\n            contains: [\\n              'self',\\n              hljs.C_BLOCK_COMMENT_MODE,\\n              STRING,\\n              NUMBER\\n            ]\\n          }\\n        ]\\n      },\\n      {\\n        className: 'class',\\n        beginKeywords: 'class interface',\\n        end: /\\\\{/,\\n        excludeEnd: true,\\n        illegal: /[:($\\\"]/,\\n        contains: [\\n          { beginKeywords: 'extends implements' },\\n          TITLE_MODE\\n        ]\\n      },\\n      {\\n        beginKeywords: 'namespace',\\n        end: /;/,\\n        illegal: /[.']/,\\n        contains: [ TITLE_MODE ]\\n      },\\n      {\\n        beginKeywords: 'use',\\n        end: /;/,\\n        contains: [ TITLE_MODE ]\\n      },\\n      { begin: /=>/ // No markup, just a relevance booster\\n      },\\n      STRING,\\n      NUMBER\\n    ]\\n  };\\n}\\n\\nmodule.exports = zephir;\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/lib/languages/zephir.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/highlight.js/es/index.js\":\n/*!***********************************************!*\\\n  !*** ./node_modules/highlight.js/es/index.js ***!\n  \\***********************************************/\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   HighlightJS: function() { return /* reexport default export from named module */ _lib_index_js__WEBPACK_IMPORTED_MODULE_0__; }\\n/* harmony export */ });\\n/* harmony import */ var _lib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/index.js */ \\\"./node_modules/highlight.js/lib/index.js\\\");\\n// https://nodejs.org/api/packages.html#packages_writing_dual_packages_while_avoiding_or_minimizing_hazards\\n\\n\\n/* harmony default export */ __webpack_exports__[\\\"default\\\"] = (_lib_index_js__WEBPACK_IMPORTED_MODULE_0__);\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/highlight.js/es/index.js?\");\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module can't be inlined because the eval devtool is used.\n/******/ \tvar __webpack_exports__ = __webpack_require__(\"./libs/highlight/highlight.js\");\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"
  },
  {
    "path": "public/assets/vendor/libs/jquery/jquery.js",
    "content": "/*\n * ATTENTION: The \"eval\" devtool has been used (maybe by default in mode: \"development\").\n * This devtool is neither made for production nor for readable output files.\n * It uses \"eval()\" calls to create a separate source file in the browser devtools.\n * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)\n * or disable the default devtool with \"devtool: false\".\n * If you are looking for production-ready output files, see mode: \"production\" (https://webpack.js.org/configuration/mode/).\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./libs/jquery/jquery.js\":\n/*!*******************************!*\\\n  !*** ./libs/jquery/jquery.js ***!\n  \\*******************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   $: function() { return /* binding */ $; },\\n/* harmony export */   jQuery: function() { return /* reexport default from dynamic */ jquery_dist_jquery__WEBPACK_IMPORTED_MODULE_0___default.a; }\\n/* harmony export */ });\\n/* harmony import */ var jquery_dist_jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery/dist/jquery */ \\\"./node_modules/jquery/dist/jquery.js\\\");\\n/* harmony import */ var jquery_dist_jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery_dist_jquery__WEBPACK_IMPORTED_MODULE_0__);\\n\\nvar $ = (jquery_dist_jquery__WEBPACK_IMPORTED_MODULE_0___default());\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./libs/jquery/jquery.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/jquery/dist/jquery.js\":\n/*!********************************************!*\\\n  !*** ./node_modules/jquery/dist/jquery.js ***!\n  \\********************************************/\n/***/ (function(module, exports) {\n\neval(\"var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\\n * jQuery JavaScript Library v3.7.1\\n * https://jquery.com/\\n *\\n * Copyright OpenJS Foundation and other contributors\\n * Released under the MIT license\\n * https://jquery.org/license\\n *\\n * Date: 2023-08-28T13:37Z\\n */\\n( function( global, factory ) {\\n\\n\\t\\\"use strict\\\";\\n\\n\\tif (  true && typeof module.exports === \\\"object\\\" ) {\\n\\n\\t\\t// For CommonJS and CommonJS-like environments where a proper `window`\\n\\t\\t// is present, execute the factory and get jQuery.\\n\\t\\t// For environments that do not have a `window` with a `document`\\n\\t\\t// (such as Node.js), expose a factory as module.exports.\\n\\t\\t// This accentuates the need for the creation of a real `window`.\\n\\t\\t// e.g. var jQuery = require(\\\"jquery\\\")(window);\\n\\t\\t// See ticket trac-14549 for more info.\\n\\t\\tmodule.exports = global.document ?\\n\\t\\t\\tfactory( global, true ) :\\n\\t\\t\\tfunction( w ) {\\n\\t\\t\\t\\tif ( !w.document ) {\\n\\t\\t\\t\\t\\tthrow new Error( \\\"jQuery requires a window with a document\\\" );\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn factory( w );\\n\\t\\t\\t};\\n\\t} else {\\n\\t\\tfactory( global );\\n\\t}\\n\\n// Pass this if window is not defined yet\\n} )( typeof window !== \\\"undefined\\\" ? window : this, function( window, noGlobal ) {\\n\\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\\n// enough that all such attempts are guarded in a try block.\\n\\\"use strict\\\";\\n\\nvar arr = [];\\n\\nvar getProto = Object.getPrototypeOf;\\n\\nvar slice = arr.slice;\\n\\nvar flat = arr.flat ? function( array ) {\\n\\treturn arr.flat.call( array );\\n} : function( array ) {\\n\\treturn arr.concat.apply( [], array );\\n};\\n\\n\\nvar push = arr.push;\\n\\nvar indexOf = arr.indexOf;\\n\\nvar class2type = {};\\n\\nvar toString = class2type.toString;\\n\\nvar hasOwn = class2type.hasOwnProperty;\\n\\nvar fnToString = hasOwn.toString;\\n\\nvar ObjectFunctionString = fnToString.call( Object );\\n\\nvar support = {};\\n\\nvar isFunction = function isFunction( obj ) {\\n\\n\\t\\t// Support: Chrome <=57, Firefox <=52\\n\\t\\t// In some browsers, typeof returns \\\"function\\\" for HTML <object> elements\\n\\t\\t// (i.e., `typeof document.createElement( \\\"object\\\" ) === \\\"function\\\"`).\\n\\t\\t// We don't want to classify *any* DOM node as a function.\\n\\t\\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\\n\\t\\t// Plus for old WebKit, typeof returns \\\"function\\\" for HTML collections\\n\\t\\t// (e.g., `typeof document.getElementsByTagName(\\\"div\\\") === \\\"function\\\"`). (gh-4756)\\n\\t\\treturn typeof obj === \\\"function\\\" && typeof obj.nodeType !== \\\"number\\\" &&\\n\\t\\t\\ttypeof obj.item !== \\\"function\\\";\\n\\t};\\n\\n\\nvar isWindow = function isWindow( obj ) {\\n\\t\\treturn obj != null && obj === obj.window;\\n\\t};\\n\\n\\nvar document = window.document;\\n\\n\\n\\n\\tvar preservedScriptAttributes = {\\n\\t\\ttype: true,\\n\\t\\tsrc: true,\\n\\t\\tnonce: true,\\n\\t\\tnoModule: true\\n\\t};\\n\\n\\tfunction DOMEval( code, node, doc ) {\\n\\t\\tdoc = doc || document;\\n\\n\\t\\tvar i, val,\\n\\t\\t\\tscript = doc.createElement( \\\"script\\\" );\\n\\n\\t\\tscript.text = code;\\n\\t\\tif ( node ) {\\n\\t\\t\\tfor ( i in preservedScriptAttributes ) {\\n\\n\\t\\t\\t\\t// Support: Firefox 64+, Edge 18+\\n\\t\\t\\t\\t// Some browsers don't support the \\\"nonce\\\" property on scripts.\\n\\t\\t\\t\\t// On the other hand, just using `getAttribute` is not enough as\\n\\t\\t\\t\\t// the `nonce` attribute is reset to an empty string whenever it\\n\\t\\t\\t\\t// becomes browsing-context connected.\\n\\t\\t\\t\\t// See https://github.com/whatwg/html/issues/2369\\n\\t\\t\\t\\t// See https://html.spec.whatwg.org/#nonce-attributes\\n\\t\\t\\t\\t// The `node.getAttribute` check was added for the sake of\\n\\t\\t\\t\\t// `jQuery.globalEval` so that it can fake a nonce-containing node\\n\\t\\t\\t\\t// via an object.\\n\\t\\t\\t\\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\\n\\t\\t\\t\\tif ( val ) {\\n\\t\\t\\t\\t\\tscript.setAttribute( i, val );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tdoc.head.appendChild( script ).parentNode.removeChild( script );\\n\\t}\\n\\n\\nfunction toType( obj ) {\\n\\tif ( obj == null ) {\\n\\t\\treturn obj + \\\"\\\";\\n\\t}\\n\\n\\t// Support: Android <=2.3 only (functionish RegExp)\\n\\treturn typeof obj === \\\"object\\\" || typeof obj === \\\"function\\\" ?\\n\\t\\tclass2type[ toString.call( obj ) ] || \\\"object\\\" :\\n\\t\\ttypeof obj;\\n}\\n/* global Symbol */\\n// Defining this global in .eslintrc.json would create a danger of using the global\\n// unguarded in another place, it seems safer to define global only for this module\\n\\n\\n\\nvar version = \\\"3.7.1\\\",\\n\\n\\trhtmlSuffix = /HTML$/i,\\n\\n\\t// Define a local copy of jQuery\\n\\tjQuery = function( selector, context ) {\\n\\n\\t\\t// The jQuery object is actually just the init constructor 'enhanced'\\n\\t\\t// Need init if jQuery is called (just allow error to be thrown if not included)\\n\\t\\treturn new jQuery.fn.init( selector, context );\\n\\t};\\n\\njQuery.fn = jQuery.prototype = {\\n\\n\\t// The current version of jQuery being used\\n\\tjquery: version,\\n\\n\\tconstructor: jQuery,\\n\\n\\t// The default length of a jQuery object is 0\\n\\tlength: 0,\\n\\n\\ttoArray: function() {\\n\\t\\treturn slice.call( this );\\n\\t},\\n\\n\\t// Get the Nth element in the matched element set OR\\n\\t// Get the whole matched element set as a clean array\\n\\tget: function( num ) {\\n\\n\\t\\t// Return all the elements in a clean array\\n\\t\\tif ( num == null ) {\\n\\t\\t\\treturn slice.call( this );\\n\\t\\t}\\n\\n\\t\\t// Return just the one element from the set\\n\\t\\treturn num < 0 ? this[ num + this.length ] : this[ num ];\\n\\t},\\n\\n\\t// Take an array of elements and push it onto the stack\\n\\t// (returning the new matched element set)\\n\\tpushStack: function( elems ) {\\n\\n\\t\\t// Build a new jQuery matched element set\\n\\t\\tvar ret = jQuery.merge( this.constructor(), elems );\\n\\n\\t\\t// Add the old object onto the stack (as a reference)\\n\\t\\tret.prevObject = this;\\n\\n\\t\\t// Return the newly-formed element set\\n\\t\\treturn ret;\\n\\t},\\n\\n\\t// Execute a callback for every element in the matched set.\\n\\teach: function( callback ) {\\n\\t\\treturn jQuery.each( this, callback );\\n\\t},\\n\\n\\tmap: function( callback ) {\\n\\t\\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\\n\\t\\t\\treturn callback.call( elem, i, elem );\\n\\t\\t} ) );\\n\\t},\\n\\n\\tslice: function() {\\n\\t\\treturn this.pushStack( slice.apply( this, arguments ) );\\n\\t},\\n\\n\\tfirst: function() {\\n\\t\\treturn this.eq( 0 );\\n\\t},\\n\\n\\tlast: function() {\\n\\t\\treturn this.eq( -1 );\\n\\t},\\n\\n\\teven: function() {\\n\\t\\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\\n\\t\\t\\treturn ( i + 1 ) % 2;\\n\\t\\t} ) );\\n\\t},\\n\\n\\todd: function() {\\n\\t\\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\\n\\t\\t\\treturn i % 2;\\n\\t\\t} ) );\\n\\t},\\n\\n\\teq: function( i ) {\\n\\t\\tvar len = this.length,\\n\\t\\t\\tj = +i + ( i < 0 ? len : 0 );\\n\\t\\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\\n\\t},\\n\\n\\tend: function() {\\n\\t\\treturn this.prevObject || this.constructor();\\n\\t},\\n\\n\\t// For internal use only.\\n\\t// Behaves like an Array's method, not like a jQuery method.\\n\\tpush: push,\\n\\tsort: arr.sort,\\n\\tsplice: arr.splice\\n};\\n\\njQuery.extend = jQuery.fn.extend = function() {\\n\\tvar options, name, src, copy, copyIsArray, clone,\\n\\t\\ttarget = arguments[ 0 ] || {},\\n\\t\\ti = 1,\\n\\t\\tlength = arguments.length,\\n\\t\\tdeep = false;\\n\\n\\t// Handle a deep copy situation\\n\\tif ( typeof target === \\\"boolean\\\" ) {\\n\\t\\tdeep = target;\\n\\n\\t\\t// Skip the boolean and the target\\n\\t\\ttarget = arguments[ i ] || {};\\n\\t\\ti++;\\n\\t}\\n\\n\\t// Handle case when target is a string or something (possible in deep copy)\\n\\tif ( typeof target !== \\\"object\\\" && !isFunction( target ) ) {\\n\\t\\ttarget = {};\\n\\t}\\n\\n\\t// Extend jQuery itself if only one argument is passed\\n\\tif ( i === length ) {\\n\\t\\ttarget = this;\\n\\t\\ti--;\\n\\t}\\n\\n\\tfor ( ; i < length; i++ ) {\\n\\n\\t\\t// Only deal with non-null/undefined values\\n\\t\\tif ( ( options = arguments[ i ] ) != null ) {\\n\\n\\t\\t\\t// Extend the base object\\n\\t\\t\\tfor ( name in options ) {\\n\\t\\t\\t\\tcopy = options[ name ];\\n\\n\\t\\t\\t\\t// Prevent Object.prototype pollution\\n\\t\\t\\t\\t// Prevent never-ending loop\\n\\t\\t\\t\\tif ( name === \\\"__proto__\\\" || target === copy ) {\\n\\t\\t\\t\\t\\tcontinue;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Recurse if we're merging plain objects or arrays\\n\\t\\t\\t\\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\\n\\t\\t\\t\\t\\t( copyIsArray = Array.isArray( copy ) ) ) ) {\\n\\t\\t\\t\\t\\tsrc = target[ name ];\\n\\n\\t\\t\\t\\t\\t// Ensure proper type for the source value\\n\\t\\t\\t\\t\\tif ( copyIsArray && !Array.isArray( src ) ) {\\n\\t\\t\\t\\t\\t\\tclone = [];\\n\\t\\t\\t\\t\\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\\n\\t\\t\\t\\t\\t\\tclone = {};\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tclone = src;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tcopyIsArray = false;\\n\\n\\t\\t\\t\\t\\t// Never move original objects, clone them\\n\\t\\t\\t\\t\\ttarget[ name ] = jQuery.extend( deep, clone, copy );\\n\\n\\t\\t\\t\\t// Don't bring in undefined values\\n\\t\\t\\t\\t} else if ( copy !== undefined ) {\\n\\t\\t\\t\\t\\ttarget[ name ] = copy;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t// Return the modified object\\n\\treturn target;\\n};\\n\\njQuery.extend( {\\n\\n\\t// Unique for each copy of jQuery on the page\\n\\texpando: \\\"jQuery\\\" + ( version + Math.random() ).replace( /\\\\D/g, \\\"\\\" ),\\n\\n\\t// Assume jQuery is ready without the ready module\\n\\tisReady: true,\\n\\n\\terror: function( msg ) {\\n\\t\\tthrow new Error( msg );\\n\\t},\\n\\n\\tnoop: function() {},\\n\\n\\tisPlainObject: function( obj ) {\\n\\t\\tvar proto, Ctor;\\n\\n\\t\\t// Detect obvious negatives\\n\\t\\t// Use toString instead of jQuery.type to catch host objects\\n\\t\\tif ( !obj || toString.call( obj ) !== \\\"[object Object]\\\" ) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\tproto = getProto( obj );\\n\\n\\t\\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\\n\\t\\tif ( !proto ) {\\n\\t\\t\\treturn true;\\n\\t\\t}\\n\\n\\t\\t// Objects with prototype are plain iff they were constructed by a global Object function\\n\\t\\tCtor = hasOwn.call( proto, \\\"constructor\\\" ) && proto.constructor;\\n\\t\\treturn typeof Ctor === \\\"function\\\" && fnToString.call( Ctor ) === ObjectFunctionString;\\n\\t},\\n\\n\\tisEmptyObject: function( obj ) {\\n\\t\\tvar name;\\n\\n\\t\\tfor ( name in obj ) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\t\\treturn true;\\n\\t},\\n\\n\\t// Evaluates a script in a provided context; falls back to the global one\\n\\t// if not specified.\\n\\tglobalEval: function( code, options, doc ) {\\n\\t\\tDOMEval( code, { nonce: options && options.nonce }, doc );\\n\\t},\\n\\n\\teach: function( obj, callback ) {\\n\\t\\tvar length, i = 0;\\n\\n\\t\\tif ( isArrayLike( obj ) ) {\\n\\t\\t\\tlength = obj.length;\\n\\t\\t\\tfor ( ; i < length; i++ ) {\\n\\t\\t\\t\\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tfor ( i in obj ) {\\n\\t\\t\\t\\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\treturn obj;\\n\\t},\\n\\n\\n\\t// Retrieve the text value of an array of DOM nodes\\n\\ttext: function( elem ) {\\n\\t\\tvar node,\\n\\t\\t\\tret = \\\"\\\",\\n\\t\\t\\ti = 0,\\n\\t\\t\\tnodeType = elem.nodeType;\\n\\n\\t\\tif ( !nodeType ) {\\n\\n\\t\\t\\t// If no nodeType, this is expected to be an array\\n\\t\\t\\twhile ( ( node = elem[ i++ ] ) ) {\\n\\n\\t\\t\\t\\t// Do not traverse comment nodes\\n\\t\\t\\t\\tret += jQuery.text( node );\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif ( nodeType === 1 || nodeType === 11 ) {\\n\\t\\t\\treturn elem.textContent;\\n\\t\\t}\\n\\t\\tif ( nodeType === 9 ) {\\n\\t\\t\\treturn elem.documentElement.textContent;\\n\\t\\t}\\n\\t\\tif ( nodeType === 3 || nodeType === 4 ) {\\n\\t\\t\\treturn elem.nodeValue;\\n\\t\\t}\\n\\n\\t\\t// Do not include comment or processing instruction nodes\\n\\n\\t\\treturn ret;\\n\\t},\\n\\n\\t// results is for internal usage only\\n\\tmakeArray: function( arr, results ) {\\n\\t\\tvar ret = results || [];\\n\\n\\t\\tif ( arr != null ) {\\n\\t\\t\\tif ( isArrayLike( Object( arr ) ) ) {\\n\\t\\t\\t\\tjQuery.merge( ret,\\n\\t\\t\\t\\t\\ttypeof arr === \\\"string\\\" ?\\n\\t\\t\\t\\t\\t\\t[ arr ] : arr\\n\\t\\t\\t\\t);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tpush.call( ret, arr );\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\treturn ret;\\n\\t},\\n\\n\\tinArray: function( elem, arr, i ) {\\n\\t\\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\\n\\t},\\n\\n\\tisXMLDoc: function( elem ) {\\n\\t\\tvar namespace = elem && elem.namespaceURI,\\n\\t\\t\\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\\n\\n\\t\\t// Assume HTML when documentElement doesn't yet exist, such as inside\\n\\t\\t// document fragments.\\n\\t\\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \\\"HTML\\\" );\\n\\t},\\n\\n\\t// Support: Android <=4.0 only, PhantomJS 1 only\\n\\t// push.apply(_, arraylike) throws on ancient WebKit\\n\\tmerge: function( first, second ) {\\n\\t\\tvar len = +second.length,\\n\\t\\t\\tj = 0,\\n\\t\\t\\ti = first.length;\\n\\n\\t\\tfor ( ; j < len; j++ ) {\\n\\t\\t\\tfirst[ i++ ] = second[ j ];\\n\\t\\t}\\n\\n\\t\\tfirst.length = i;\\n\\n\\t\\treturn first;\\n\\t},\\n\\n\\tgrep: function( elems, callback, invert ) {\\n\\t\\tvar callbackInverse,\\n\\t\\t\\tmatches = [],\\n\\t\\t\\ti = 0,\\n\\t\\t\\tlength = elems.length,\\n\\t\\t\\tcallbackExpect = !invert;\\n\\n\\t\\t// Go through the array, only saving the items\\n\\t\\t// that pass the validator function\\n\\t\\tfor ( ; i < length; i++ ) {\\n\\t\\t\\tcallbackInverse = !callback( elems[ i ], i );\\n\\t\\t\\tif ( callbackInverse !== callbackExpect ) {\\n\\t\\t\\t\\tmatches.push( elems[ i ] );\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\treturn matches;\\n\\t},\\n\\n\\t// arg is for internal usage only\\n\\tmap: function( elems, callback, arg ) {\\n\\t\\tvar length, value,\\n\\t\\t\\ti = 0,\\n\\t\\t\\tret = [];\\n\\n\\t\\t// Go through the array, translating each of the items to their new values\\n\\t\\tif ( isArrayLike( elems ) ) {\\n\\t\\t\\tlength = elems.length;\\n\\t\\t\\tfor ( ; i < length; i++ ) {\\n\\t\\t\\t\\tvalue = callback( elems[ i ], i, arg );\\n\\n\\t\\t\\t\\tif ( value != null ) {\\n\\t\\t\\t\\t\\tret.push( value );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t// Go through every key on the object,\\n\\t\\t} else {\\n\\t\\t\\tfor ( i in elems ) {\\n\\t\\t\\t\\tvalue = callback( elems[ i ], i, arg );\\n\\n\\t\\t\\t\\tif ( value != null ) {\\n\\t\\t\\t\\t\\tret.push( value );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Flatten any nested arrays\\n\\t\\treturn flat( ret );\\n\\t},\\n\\n\\t// A global GUID counter for objects\\n\\tguid: 1,\\n\\n\\t// jQuery.support is not used in Core but other projects attach their\\n\\t// properties to it so it needs to exist.\\n\\tsupport: support\\n} );\\n\\nif ( typeof Symbol === \\\"function\\\" ) {\\n\\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\\n}\\n\\n// Populate the class2type map\\njQuery.each( \\\"Boolean Number String Function Array Date RegExp Object Error Symbol\\\".split( \\\" \\\" ),\\n\\tfunction( _i, name ) {\\n\\t\\tclass2type[ \\\"[object \\\" + name + \\\"]\\\" ] = name.toLowerCase();\\n\\t} );\\n\\nfunction isArrayLike( obj ) {\\n\\n\\t// Support: real iOS 8.2 only (not reproducible in simulator)\\n\\t// `in` check used to prevent JIT error (gh-2145)\\n\\t// hasOwn isn't used here due to false negatives\\n\\t// regarding Nodelist length in IE\\n\\tvar length = !!obj && \\\"length\\\" in obj && obj.length,\\n\\t\\ttype = toType( obj );\\n\\n\\tif ( isFunction( obj ) || isWindow( obj ) ) {\\n\\t\\treturn false;\\n\\t}\\n\\n\\treturn type === \\\"array\\\" || length === 0 ||\\n\\t\\ttypeof length === \\\"number\\\" && length > 0 && ( length - 1 ) in obj;\\n}\\n\\n\\nfunction nodeName( elem, name ) {\\n\\n\\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\\n\\n}\\nvar pop = arr.pop;\\n\\n\\nvar sort = arr.sort;\\n\\n\\nvar splice = arr.splice;\\n\\n\\nvar whitespace = \\\"[\\\\\\\\x20\\\\\\\\t\\\\\\\\r\\\\\\\\n\\\\\\\\f]\\\";\\n\\n\\nvar rtrimCSS = new RegExp(\\n\\t\\\"^\\\" + whitespace + \\\"+|((?:^|[^\\\\\\\\\\\\\\\\])(?:\\\\\\\\\\\\\\\\.)*)\\\" + whitespace + \\\"+$\\\",\\n\\t\\\"g\\\"\\n);\\n\\n\\n\\n\\n// Note: an element does not contain itself\\njQuery.contains = function( a, b ) {\\n\\tvar bup = b && b.parentNode;\\n\\n\\treturn a === bup || !!( bup && bup.nodeType === 1 && (\\n\\n\\t\\t// Support: IE 9 - 11+\\n\\t\\t// IE doesn't have `contains` on SVG.\\n\\t\\ta.contains ?\\n\\t\\t\\ta.contains( bup ) :\\n\\t\\t\\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\\n\\t) );\\n};\\n\\n\\n\\n\\n// CSS string/identifier serialization\\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\\nvar rcssescape = /([\\\\0-\\\\x1f\\\\x7f]|^-?\\\\d)|^-$|[^\\\\x80-\\\\uFFFF\\\\w-]/g;\\n\\nfunction fcssescape( ch, asCodePoint ) {\\n\\tif ( asCodePoint ) {\\n\\n\\t\\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\\n\\t\\tif ( ch === \\\"\\\\0\\\" ) {\\n\\t\\t\\treturn \\\"\\\\uFFFD\\\";\\n\\t\\t}\\n\\n\\t\\t// Control characters and (dependent upon position) numbers get escaped as code points\\n\\t\\treturn ch.slice( 0, -1 ) + \\\"\\\\\\\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \\\" \\\";\\n\\t}\\n\\n\\t// Other potentially-special ASCII characters get backslash-escaped\\n\\treturn \\\"\\\\\\\\\\\" + ch;\\n}\\n\\njQuery.escapeSelector = function( sel ) {\\n\\treturn ( sel + \\\"\\\" ).replace( rcssescape, fcssescape );\\n};\\n\\n\\n\\n\\nvar preferredDoc = document,\\n\\tpushNative = push;\\n\\n( function() {\\n\\nvar i,\\n\\tExpr,\\n\\toutermostContext,\\n\\tsortInput,\\n\\thasDuplicate,\\n\\tpush = pushNative,\\n\\n\\t// Local document vars\\n\\tdocument,\\n\\tdocumentElement,\\n\\tdocumentIsHTML,\\n\\trbuggyQSA,\\n\\tmatches,\\n\\n\\t// Instance-specific data\\n\\texpando = jQuery.expando,\\n\\tdirruns = 0,\\n\\tdone = 0,\\n\\tclassCache = createCache(),\\n\\ttokenCache = createCache(),\\n\\tcompilerCache = createCache(),\\n\\tnonnativeSelectorCache = createCache(),\\n\\tsortOrder = function( a, b ) {\\n\\t\\tif ( a === b ) {\\n\\t\\t\\thasDuplicate = true;\\n\\t\\t}\\n\\t\\treturn 0;\\n\\t},\\n\\n\\tbooleans = \\\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\\\" +\\n\\t\\t\\\"loop|multiple|open|readonly|required|scoped\\\",\\n\\n\\t// Regular expressions\\n\\n\\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\\n\\tidentifier = \\\"(?:\\\\\\\\\\\\\\\\[\\\\\\\\da-fA-F]{1,6}\\\" + whitespace +\\n\\t\\t\\\"?|\\\\\\\\\\\\\\\\[^\\\\\\\\r\\\\\\\\n\\\\\\\\f]|[\\\\\\\\w-]|[^\\\\0-\\\\\\\\x7f])+\\\",\\n\\n\\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\\n\\tattributes = \\\"\\\\\\\\[\\\" + whitespace + \\\"*(\\\" + identifier + \\\")(?:\\\" + whitespace +\\n\\n\\t\\t// Operator (capture 2)\\n\\t\\t\\\"*([*^$|!~]?=)\\\" + whitespace +\\n\\n\\t\\t// \\\"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\\\"\\n\\t\\t\\\"*(?:'((?:\\\\\\\\\\\\\\\\.|[^\\\\\\\\\\\\\\\\'])*)'|\\\\\\\"((?:\\\\\\\\\\\\\\\\.|[^\\\\\\\\\\\\\\\\\\\\\\\"])*)\\\\\\\"|(\\\" + identifier + \\\"))|)\\\" +\\n\\t\\twhitespace + \\\"*\\\\\\\\]\\\",\\n\\n\\tpseudos = \\\":(\\\" + identifier + \\\")(?:\\\\\\\\((\\\" +\\n\\n\\t\\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\\n\\t\\t// 1. quoted (capture 3; capture 4 or capture 5)\\n\\t\\t\\\"('((?:\\\\\\\\\\\\\\\\.|[^\\\\\\\\\\\\\\\\'])*)'|\\\\\\\"((?:\\\\\\\\\\\\\\\\.|[^\\\\\\\\\\\\\\\\\\\\\\\"])*)\\\\\\\")|\\\" +\\n\\n\\t\\t// 2. simple (capture 6)\\n\\t\\t\\\"((?:\\\\\\\\\\\\\\\\.|[^\\\\\\\\\\\\\\\\()[\\\\\\\\]]|\\\" + attributes + \\\")*)|\\\" +\\n\\n\\t\\t// 3. anything else (capture 2)\\n\\t\\t\\\".*\\\" +\\n\\t\\t\\\")\\\\\\\\)|)\\\",\\n\\n\\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\\n\\trwhitespace = new RegExp( whitespace + \\\"+\\\", \\\"g\\\" ),\\n\\n\\trcomma = new RegExp( \\\"^\\\" + whitespace + \\\"*,\\\" + whitespace + \\\"*\\\" ),\\n\\trleadingCombinator = new RegExp( \\\"^\\\" + whitespace + \\\"*([>+~]|\\\" + whitespace + \\\")\\\" +\\n\\t\\twhitespace + \\\"*\\\" ),\\n\\trdescend = new RegExp( whitespace + \\\"|>\\\" ),\\n\\n\\trpseudo = new RegExp( pseudos ),\\n\\tridentifier = new RegExp( \\\"^\\\" + identifier + \\\"$\\\" ),\\n\\n\\tmatchExpr = {\\n\\t\\tID: new RegExp( \\\"^#(\\\" + identifier + \\\")\\\" ),\\n\\t\\tCLASS: new RegExp( \\\"^\\\\\\\\.(\\\" + identifier + \\\")\\\" ),\\n\\t\\tTAG: new RegExp( \\\"^(\\\" + identifier + \\\"|[*])\\\" ),\\n\\t\\tATTR: new RegExp( \\\"^\\\" + attributes ),\\n\\t\\tPSEUDO: new RegExp( \\\"^\\\" + pseudos ),\\n\\t\\tCHILD: new RegExp(\\n\\t\\t\\t\\\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\\\\\(\\\" +\\n\\t\\t\\t\\twhitespace + \\\"*(even|odd|(([+-]|)(\\\\\\\\d*)n|)\\\" + whitespace + \\\"*(?:([+-]|)\\\" +\\n\\t\\t\\t\\twhitespace + \\\"*(\\\\\\\\d+)|))\\\" + whitespace + \\\"*\\\\\\\\)|)\\\", \\\"i\\\" ),\\n\\t\\tbool: new RegExp( \\\"^(?:\\\" + booleans + \\\")$\\\", \\\"i\\\" ),\\n\\n\\t\\t// For use in libraries implementing .is()\\n\\t\\t// We use this for POS matching in `select`\\n\\t\\tneedsContext: new RegExp( \\\"^\\\" + whitespace +\\n\\t\\t\\t\\\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\\\\\(\\\" + whitespace +\\n\\t\\t\\t\\\"*((?:-\\\\\\\\d)?\\\\\\\\d*)\\\" + whitespace + \\\"*\\\\\\\\)|)(?=[^-]|$)\\\", \\\"i\\\" )\\n\\t},\\n\\n\\trinputs = /^(?:input|select|textarea|button)$/i,\\n\\trheader = /^h\\\\d$/i,\\n\\n\\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\\n\\trquickExpr = /^(?:#([\\\\w-]+)|(\\\\w+)|\\\\.([\\\\w-]+))$/,\\n\\n\\trsibling = /[+~]/,\\n\\n\\t// CSS escapes\\n\\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\\n\\trunescape = new RegExp( \\\"\\\\\\\\\\\\\\\\[\\\\\\\\da-fA-F]{1,6}\\\" + whitespace +\\n\\t\\t\\\"?|\\\\\\\\\\\\\\\\([^\\\\\\\\r\\\\\\\\n\\\\\\\\f])\\\", \\\"g\\\" ),\\n\\tfunescape = function( escape, nonHex ) {\\n\\t\\tvar high = \\\"0x\\\" + escape.slice( 1 ) - 0x10000;\\n\\n\\t\\tif ( nonHex ) {\\n\\n\\t\\t\\t// Strip the backslash prefix from a non-hex escape sequence\\n\\t\\t\\treturn nonHex;\\n\\t\\t}\\n\\n\\t\\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\\n\\t\\t// Support: IE <=11+\\n\\t\\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\\n\\t\\t// surrogate pair\\n\\t\\treturn high < 0 ?\\n\\t\\t\\tString.fromCharCode( high + 0x10000 ) :\\n\\t\\t\\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\\n\\t},\\n\\n\\t// Used for iframes; see `setDocument`.\\n\\t// Support: IE 9 - 11+, Edge 12 - 18+\\n\\t// Removing the function wrapper causes a \\\"Permission Denied\\\"\\n\\t// error in IE/Edge.\\n\\tunloadHandler = function() {\\n\\t\\tsetDocument();\\n\\t},\\n\\n\\tinDisabledFieldset = addCombinator(\\n\\t\\tfunction( elem ) {\\n\\t\\t\\treturn elem.disabled === true && nodeName( elem, \\\"fieldset\\\" );\\n\\t\\t},\\n\\t\\t{ dir: \\\"parentNode\\\", next: \\\"legend\\\" }\\n\\t);\\n\\n// Support: IE <=9 only\\n// Accessing document.activeElement can throw unexpectedly\\n// https://bugs.jquery.com/ticket/13393\\nfunction safeActiveElement() {\\n\\ttry {\\n\\t\\treturn document.activeElement;\\n\\t} catch ( err ) { }\\n}\\n\\n// Optimize for push.apply( _, NodeList )\\ntry {\\n\\tpush.apply(\\n\\t\\t( arr = slice.call( preferredDoc.childNodes ) ),\\n\\t\\tpreferredDoc.childNodes\\n\\t);\\n\\n\\t// Support: Android <=4.0\\n\\t// Detect silently failing push.apply\\n\\t// eslint-disable-next-line no-unused-expressions\\n\\tarr[ preferredDoc.childNodes.length ].nodeType;\\n} catch ( e ) {\\n\\tpush = {\\n\\t\\tapply: function( target, els ) {\\n\\t\\t\\tpushNative.apply( target, slice.call( els ) );\\n\\t\\t},\\n\\t\\tcall: function( target ) {\\n\\t\\t\\tpushNative.apply( target, slice.call( arguments, 1 ) );\\n\\t\\t}\\n\\t};\\n}\\n\\nfunction find( selector, context, results, seed ) {\\n\\tvar m, i, elem, nid, match, groups, newSelector,\\n\\t\\tnewContext = context && context.ownerDocument,\\n\\n\\t\\t// nodeType defaults to 9, since context defaults to document\\n\\t\\tnodeType = context ? context.nodeType : 9;\\n\\n\\tresults = results || [];\\n\\n\\t// Return early from calls with invalid selector or context\\n\\tif ( typeof selector !== \\\"string\\\" || !selector ||\\n\\t\\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\\n\\n\\t\\treturn results;\\n\\t}\\n\\n\\t// Try to shortcut find operations (as opposed to filters) in HTML documents\\n\\tif ( !seed ) {\\n\\t\\tsetDocument( context );\\n\\t\\tcontext = context || document;\\n\\n\\t\\tif ( documentIsHTML ) {\\n\\n\\t\\t\\t// If the selector is sufficiently simple, try using a \\\"get*By*\\\" DOM method\\n\\t\\t\\t// (excepting DocumentFragment context, where the methods don't exist)\\n\\t\\t\\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\\n\\n\\t\\t\\t\\t// ID selector\\n\\t\\t\\t\\tif ( ( m = match[ 1 ] ) ) {\\n\\n\\t\\t\\t\\t\\t// Document context\\n\\t\\t\\t\\t\\tif ( nodeType === 9 ) {\\n\\t\\t\\t\\t\\t\\tif ( ( elem = context.getElementById( m ) ) ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t// Support: IE 9 only\\n\\t\\t\\t\\t\\t\\t\\t// getElementById can match elements by name instead of ID\\n\\t\\t\\t\\t\\t\\t\\tif ( elem.id === m ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tpush.call( results, elem );\\n\\t\\t\\t\\t\\t\\t\\t\\treturn results;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\treturn results;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t// Element context\\n\\t\\t\\t\\t\\t} else {\\n\\n\\t\\t\\t\\t\\t\\t// Support: IE 9 only\\n\\t\\t\\t\\t\\t\\t// getElementById can match elements by name instead of ID\\n\\t\\t\\t\\t\\t\\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\\n\\t\\t\\t\\t\\t\\t\\tfind.contains( context, elem ) &&\\n\\t\\t\\t\\t\\t\\t\\telem.id === m ) {\\n\\n\\t\\t\\t\\t\\t\\t\\tpush.call( results, elem );\\n\\t\\t\\t\\t\\t\\t\\treturn results;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Type selector\\n\\t\\t\\t\\t} else if ( match[ 2 ] ) {\\n\\t\\t\\t\\t\\tpush.apply( results, context.getElementsByTagName( selector ) );\\n\\t\\t\\t\\t\\treturn results;\\n\\n\\t\\t\\t\\t// Class selector\\n\\t\\t\\t\\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\\n\\t\\t\\t\\t\\tpush.apply( results, context.getElementsByClassName( m ) );\\n\\t\\t\\t\\t\\treturn results;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Take advantage of querySelectorAll\\n\\t\\t\\tif ( !nonnativeSelectorCache[ selector + \\\" \\\" ] &&\\n\\t\\t\\t\\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\\n\\n\\t\\t\\t\\tnewSelector = selector;\\n\\t\\t\\t\\tnewContext = context;\\n\\n\\t\\t\\t\\t// qSA considers elements outside a scoping root when evaluating child or\\n\\t\\t\\t\\t// descendant combinators, which is not what we want.\\n\\t\\t\\t\\t// In such cases, we work around the behavior by prefixing every selector in the\\n\\t\\t\\t\\t// list with an ID selector referencing the scope context.\\n\\t\\t\\t\\t// The technique has to be used as well when a leading combinator is used\\n\\t\\t\\t\\t// as such selectors are not recognized by querySelectorAll.\\n\\t\\t\\t\\t// Thanks to Andrew Dupont for this technique.\\n\\t\\t\\t\\tif ( nodeType === 1 &&\\n\\t\\t\\t\\t\\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\\n\\n\\t\\t\\t\\t\\t// Expand context for sibling selectors\\n\\t\\t\\t\\t\\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\\n\\t\\t\\t\\t\\t\\tcontext;\\n\\n\\t\\t\\t\\t\\t// We can use :scope instead of the ID hack if the browser\\n\\t\\t\\t\\t\\t// supports it & if we're not changing the context.\\n\\t\\t\\t\\t\\t// Support: IE 11+, Edge 17 - 18+\\n\\t\\t\\t\\t\\t// IE/Edge sometimes throw a \\\"Permission denied\\\" error when\\n\\t\\t\\t\\t\\t// strict-comparing two documents; shallow comparisons work.\\n\\t\\t\\t\\t\\t// eslint-disable-next-line eqeqeq\\n\\t\\t\\t\\t\\tif ( newContext != context || !support.scope ) {\\n\\n\\t\\t\\t\\t\\t\\t// Capture the context ID, setting it first if necessary\\n\\t\\t\\t\\t\\t\\tif ( ( nid = context.getAttribute( \\\"id\\\" ) ) ) {\\n\\t\\t\\t\\t\\t\\t\\tnid = jQuery.escapeSelector( nid );\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\tcontext.setAttribute( \\\"id\\\", ( nid = expando ) );\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t// Prefix every selector in the list\\n\\t\\t\\t\\t\\tgroups = tokenize( selector );\\n\\t\\t\\t\\t\\ti = groups.length;\\n\\t\\t\\t\\t\\twhile ( i-- ) {\\n\\t\\t\\t\\t\\t\\tgroups[ i ] = ( nid ? \\\"#\\\" + nid : \\\":scope\\\" ) + \\\" \\\" +\\n\\t\\t\\t\\t\\t\\t\\ttoSelector( groups[ i ] );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tnewSelector = groups.join( \\\",\\\" );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\tpush.apply( results,\\n\\t\\t\\t\\t\\t\\tnewContext.querySelectorAll( newSelector )\\n\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\treturn results;\\n\\t\\t\\t\\t} catch ( qsaError ) {\\n\\t\\t\\t\\t\\tnonnativeSelectorCache( selector, true );\\n\\t\\t\\t\\t} finally {\\n\\t\\t\\t\\t\\tif ( nid === expando ) {\\n\\t\\t\\t\\t\\t\\tcontext.removeAttribute( \\\"id\\\" );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t// All others\\n\\treturn select( selector.replace( rtrimCSS, \\\"$1\\\" ), context, results, seed );\\n}\\n\\n/**\\n * Create key-value caches of limited size\\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\\n *\\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\\n *\\tdeleting the oldest entry\\n */\\nfunction createCache() {\\n\\tvar keys = [];\\n\\n\\tfunction cache( key, value ) {\\n\\n\\t\\t// Use (key + \\\" \\\") to avoid collision with native prototype properties\\n\\t\\t// (see https://github.com/jquery/sizzle/issues/157)\\n\\t\\tif ( keys.push( key + \\\" \\\" ) > Expr.cacheLength ) {\\n\\n\\t\\t\\t// Only keep the most recent entries\\n\\t\\t\\tdelete cache[ keys.shift() ];\\n\\t\\t}\\n\\t\\treturn ( cache[ key + \\\" \\\" ] = value );\\n\\t}\\n\\treturn cache;\\n}\\n\\n/**\\n * Mark a function for special use by jQuery selector module\\n * @param {Function} fn The function to mark\\n */\\nfunction markFunction( fn ) {\\n\\tfn[ expando ] = true;\\n\\treturn fn;\\n}\\n\\n/**\\n * Support testing using an element\\n * @param {Function} fn Passed the created element and returns a boolean result\\n */\\nfunction assert( fn ) {\\n\\tvar el = document.createElement( \\\"fieldset\\\" );\\n\\n\\ttry {\\n\\t\\treturn !!fn( el );\\n\\t} catch ( e ) {\\n\\t\\treturn false;\\n\\t} finally {\\n\\n\\t\\t// Remove from its parent by default\\n\\t\\tif ( el.parentNode ) {\\n\\t\\t\\tel.parentNode.removeChild( el );\\n\\t\\t}\\n\\n\\t\\t// release memory in IE\\n\\t\\tel = null;\\n\\t}\\n}\\n\\n/**\\n * Returns a function to use in pseudos for input types\\n * @param {String} type\\n */\\nfunction createInputPseudo( type ) {\\n\\treturn function( elem ) {\\n\\t\\treturn nodeName( elem, \\\"input\\\" ) && elem.type === type;\\n\\t};\\n}\\n\\n/**\\n * Returns a function to use in pseudos for buttons\\n * @param {String} type\\n */\\nfunction createButtonPseudo( type ) {\\n\\treturn function( elem ) {\\n\\t\\treturn ( nodeName( elem, \\\"input\\\" ) || nodeName( elem, \\\"button\\\" ) ) &&\\n\\t\\t\\telem.type === type;\\n\\t};\\n}\\n\\n/**\\n * Returns a function to use in pseudos for :enabled/:disabled\\n * @param {Boolean} disabled true for :disabled; false for :enabled\\n */\\nfunction createDisabledPseudo( disabled ) {\\n\\n\\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\\n\\treturn function( elem ) {\\n\\n\\t\\t// Only certain elements can match :enabled or :disabled\\n\\t\\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\\n\\t\\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\\n\\t\\tif ( \\\"form\\\" in elem ) {\\n\\n\\t\\t\\t// Check for inherited disabledness on relevant non-disabled elements:\\n\\t\\t\\t// * listed form-associated elements in a disabled fieldset\\n\\t\\t\\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\\n\\t\\t\\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\\n\\t\\t\\t// * option elements in a disabled optgroup\\n\\t\\t\\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\\n\\t\\t\\t// All such elements have a \\\"form\\\" property.\\n\\t\\t\\tif ( elem.parentNode && elem.disabled === false ) {\\n\\n\\t\\t\\t\\t// Option elements defer to a parent optgroup if present\\n\\t\\t\\t\\tif ( \\\"label\\\" in elem ) {\\n\\t\\t\\t\\t\\tif ( \\\"label\\\" in elem.parentNode ) {\\n\\t\\t\\t\\t\\t\\treturn elem.parentNode.disabled === disabled;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\treturn elem.disabled === disabled;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Support: IE 6 - 11+\\n\\t\\t\\t\\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\\n\\t\\t\\t\\treturn elem.isDisabled === disabled ||\\n\\n\\t\\t\\t\\t\\t// Where there is no isDisabled, check manually\\n\\t\\t\\t\\t\\telem.isDisabled !== !disabled &&\\n\\t\\t\\t\\t\\t\\tinDisabledFieldset( elem ) === disabled;\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn elem.disabled === disabled;\\n\\n\\t\\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\\n\\t\\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\\n\\t\\t// even exist on them, let alone have a boolean value.\\n\\t\\t} else if ( \\\"label\\\" in elem ) {\\n\\t\\t\\treturn elem.disabled === disabled;\\n\\t\\t}\\n\\n\\t\\t// Remaining elements are neither :enabled nor :disabled\\n\\t\\treturn false;\\n\\t};\\n}\\n\\n/**\\n * Returns a function to use in pseudos for positionals\\n * @param {Function} fn\\n */\\nfunction createPositionalPseudo( fn ) {\\n\\treturn markFunction( function( argument ) {\\n\\t\\targument = +argument;\\n\\t\\treturn markFunction( function( seed, matches ) {\\n\\t\\t\\tvar j,\\n\\t\\t\\t\\tmatchIndexes = fn( [], seed.length, argument ),\\n\\t\\t\\t\\ti = matchIndexes.length;\\n\\n\\t\\t\\t// Match elements found at the specified indexes\\n\\t\\t\\twhile ( i-- ) {\\n\\t\\t\\t\\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\\n\\t\\t\\t\\t\\tseed[ j ] = !( matches[ j ] = seed[ j ] );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t} );\\n\\t} );\\n}\\n\\n/**\\n * Checks a node for validity as a jQuery selector context\\n * @param {Element|Object=} context\\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\\n */\\nfunction testContext( context ) {\\n\\treturn context && typeof context.getElementsByTagName !== \\\"undefined\\\" && context;\\n}\\n\\n/**\\n * Sets document-related variables once based on the current document\\n * @param {Element|Object} [node] An element or document object to use to set the document\\n * @returns {Object} Returns the current document\\n */\\nfunction setDocument( node ) {\\n\\tvar subWindow,\\n\\t\\tdoc = node ? node.ownerDocument || node : preferredDoc;\\n\\n\\t// Return early if doc is invalid or already selected\\n\\t// Support: IE 11+, Edge 17 - 18+\\n\\t// IE/Edge sometimes throw a \\\"Permission denied\\\" error when strict-comparing\\n\\t// two documents; shallow comparisons work.\\n\\t// eslint-disable-next-line eqeqeq\\n\\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\\n\\t\\treturn document;\\n\\t}\\n\\n\\t// Update global variables\\n\\tdocument = doc;\\n\\tdocumentElement = document.documentElement;\\n\\tdocumentIsHTML = !jQuery.isXMLDoc( document );\\n\\n\\t// Support: iOS 7 only, IE 9 - 11+\\n\\t// Older browsers didn't support unprefixed `matches`.\\n\\tmatches = documentElement.matches ||\\n\\t\\tdocumentElement.webkitMatchesSelector ||\\n\\t\\tdocumentElement.msMatchesSelector;\\n\\n\\t// Support: IE 9 - 11+, Edge 12 - 18+\\n\\t// Accessing iframe documents after unload throws \\\"permission denied\\\" errors\\n\\t// (see trac-13936).\\n\\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\\n\\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\\n\\tif ( documentElement.msMatchesSelector &&\\n\\n\\t\\t// Support: IE 11+, Edge 17 - 18+\\n\\t\\t// IE/Edge sometimes throw a \\\"Permission denied\\\" error when strict-comparing\\n\\t\\t// two documents; shallow comparisons work.\\n\\t\\t// eslint-disable-next-line eqeqeq\\n\\t\\tpreferredDoc != document &&\\n\\t\\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\\n\\n\\t\\t// Support: IE 9 - 11+, Edge 12 - 18+\\n\\t\\tsubWindow.addEventListener( \\\"unload\\\", unloadHandler );\\n\\t}\\n\\n\\t// Support: IE <10\\n\\t// Check if getElementById returns elements by name\\n\\t// The broken getElementById methods don't pick up programmatically-set names,\\n\\t// so use a roundabout getElementsByName test\\n\\tsupport.getById = assert( function( el ) {\\n\\t\\tdocumentElement.appendChild( el ).id = jQuery.expando;\\n\\t\\treturn !document.getElementsByName ||\\n\\t\\t\\t!document.getElementsByName( jQuery.expando ).length;\\n\\t} );\\n\\n\\t// Support: IE 9 only\\n\\t// Check to see if it's possible to do matchesSelector\\n\\t// on a disconnected node.\\n\\tsupport.disconnectedMatch = assert( function( el ) {\\n\\t\\treturn matches.call( el, \\\"*\\\" );\\n\\t} );\\n\\n\\t// Support: IE 9 - 11+, Edge 12 - 18+\\n\\t// IE/Edge don't support the :scope pseudo-class.\\n\\tsupport.scope = assert( function() {\\n\\t\\treturn document.querySelectorAll( \\\":scope\\\" );\\n\\t} );\\n\\n\\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\\n\\t// Make sure the `:has()` argument is parsed unforgivingly.\\n\\t// We include `*` in the test to detect buggy implementations that are\\n\\t// _selectively_ forgiving (specifically when the list includes at least\\n\\t// one valid selector).\\n\\t// Note that we treat complete lack of support for `:has()` as if it were\\n\\t// spec-compliant support, which is fine because use of `:has()` in such\\n\\t// environments will fail in the qSA path and fall back to jQuery traversal\\n\\t// anyway.\\n\\tsupport.cssHas = assert( function() {\\n\\t\\ttry {\\n\\t\\t\\tdocument.querySelector( \\\":has(*,:jqfake)\\\" );\\n\\t\\t\\treturn false;\\n\\t\\t} catch ( e ) {\\n\\t\\t\\treturn true;\\n\\t\\t}\\n\\t} );\\n\\n\\t// ID filter and find\\n\\tif ( support.getById ) {\\n\\t\\tExpr.filter.ID = function( id ) {\\n\\t\\t\\tvar attrId = id.replace( runescape, funescape );\\n\\t\\t\\treturn function( elem ) {\\n\\t\\t\\t\\treturn elem.getAttribute( \\\"id\\\" ) === attrId;\\n\\t\\t\\t};\\n\\t\\t};\\n\\t\\tExpr.find.ID = function( id, context ) {\\n\\t\\t\\tif ( typeof context.getElementById !== \\\"undefined\\\" && documentIsHTML ) {\\n\\t\\t\\t\\tvar elem = context.getElementById( id );\\n\\t\\t\\t\\treturn elem ? [ elem ] : [];\\n\\t\\t\\t}\\n\\t\\t};\\n\\t} else {\\n\\t\\tExpr.filter.ID =  function( id ) {\\n\\t\\t\\tvar attrId = id.replace( runescape, funescape );\\n\\t\\t\\treturn function( elem ) {\\n\\t\\t\\t\\tvar node = typeof elem.getAttributeNode !== \\\"undefined\\\" &&\\n\\t\\t\\t\\t\\telem.getAttributeNode( \\\"id\\\" );\\n\\t\\t\\t\\treturn node && node.value === attrId;\\n\\t\\t\\t};\\n\\t\\t};\\n\\n\\t\\t// Support: IE 6 - 7 only\\n\\t\\t// getElementById is not reliable as a find shortcut\\n\\t\\tExpr.find.ID = function( id, context ) {\\n\\t\\t\\tif ( typeof context.getElementById !== \\\"undefined\\\" && documentIsHTML ) {\\n\\t\\t\\t\\tvar node, i, elems,\\n\\t\\t\\t\\t\\telem = context.getElementById( id );\\n\\n\\t\\t\\t\\tif ( elem ) {\\n\\n\\t\\t\\t\\t\\t// Verify the id attribute\\n\\t\\t\\t\\t\\tnode = elem.getAttributeNode( \\\"id\\\" );\\n\\t\\t\\t\\t\\tif ( node && node.value === id ) {\\n\\t\\t\\t\\t\\t\\treturn [ elem ];\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t// Fall back on getElementsByName\\n\\t\\t\\t\\t\\telems = context.getElementsByName( id );\\n\\t\\t\\t\\t\\ti = 0;\\n\\t\\t\\t\\t\\twhile ( ( elem = elems[ i++ ] ) ) {\\n\\t\\t\\t\\t\\t\\tnode = elem.getAttributeNode( \\\"id\\\" );\\n\\t\\t\\t\\t\\t\\tif ( node && node.value === id ) {\\n\\t\\t\\t\\t\\t\\t\\treturn [ elem ];\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\treturn [];\\n\\t\\t\\t}\\n\\t\\t};\\n\\t}\\n\\n\\t// Tag\\n\\tExpr.find.TAG = function( tag, context ) {\\n\\t\\tif ( typeof context.getElementsByTagName !== \\\"undefined\\\" ) {\\n\\t\\t\\treturn context.getElementsByTagName( tag );\\n\\n\\t\\t// DocumentFragment nodes don't have gEBTN\\n\\t\\t} else {\\n\\t\\t\\treturn context.querySelectorAll( tag );\\n\\t\\t}\\n\\t};\\n\\n\\t// Class\\n\\tExpr.find.CLASS = function( className, context ) {\\n\\t\\tif ( typeof context.getElementsByClassName !== \\\"undefined\\\" && documentIsHTML ) {\\n\\t\\t\\treturn context.getElementsByClassName( className );\\n\\t\\t}\\n\\t};\\n\\n\\t/* QSA/matchesSelector\\n\\t---------------------------------------------------------------------- */\\n\\n\\t// QSA and matchesSelector support\\n\\n\\trbuggyQSA = [];\\n\\n\\t// Build QSA regex\\n\\t// Regex strategy adopted from Diego Perini\\n\\tassert( function( el ) {\\n\\n\\t\\tvar input;\\n\\n\\t\\tdocumentElement.appendChild( el ).innerHTML =\\n\\t\\t\\t\\\"<a id='\\\" + expando + \\\"' href='' disabled='disabled'></a>\\\" +\\n\\t\\t\\t\\\"<select id='\\\" + expando + \\\"-\\\\r\\\\\\\\' disabled='disabled'>\\\" +\\n\\t\\t\\t\\\"<option selected=''></option></select>\\\";\\n\\n\\t\\t// Support: iOS <=7 - 8 only\\n\\t\\t// Boolean attributes and \\\"value\\\" are not treated correctly in some XML documents\\n\\t\\tif ( !el.querySelectorAll( \\\"[selected]\\\" ).length ) {\\n\\t\\t\\trbuggyQSA.push( \\\"\\\\\\\\[\\\" + whitespace + \\\"*(?:value|\\\" + booleans + \\\")\\\" );\\n\\t\\t}\\n\\n\\t\\t// Support: iOS <=7 - 8 only\\n\\t\\tif ( !el.querySelectorAll( \\\"[id~=\\\" + expando + \\\"-]\\\" ).length ) {\\n\\t\\t\\trbuggyQSA.push( \\\"~=\\\" );\\n\\t\\t}\\n\\n\\t\\t// Support: iOS 8 only\\n\\t\\t// https://bugs.webkit.org/show_bug.cgi?id=136851\\n\\t\\t// In-page `selector#id sibling-combinator selector` fails\\n\\t\\tif ( !el.querySelectorAll( \\\"a#\\\" + expando + \\\"+*\\\" ).length ) {\\n\\t\\t\\trbuggyQSA.push( \\\".#.+[+~]\\\" );\\n\\t\\t}\\n\\n\\t\\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\\n\\t\\t// In some of the document kinds, these selectors wouldn't work natively.\\n\\t\\t// This is probably OK but for backwards compatibility we want to maintain\\n\\t\\t// handling them through jQuery traversal in jQuery 3.x.\\n\\t\\tif ( !el.querySelectorAll( \\\":checked\\\" ).length ) {\\n\\t\\t\\trbuggyQSA.push( \\\":checked\\\" );\\n\\t\\t}\\n\\n\\t\\t// Support: Windows 8 Native Apps\\n\\t\\t// The type and name attributes are restricted during .innerHTML assignment\\n\\t\\tinput = document.createElement( \\\"input\\\" );\\n\\t\\tinput.setAttribute( \\\"type\\\", \\\"hidden\\\" );\\n\\t\\tel.appendChild( input ).setAttribute( \\\"name\\\", \\\"D\\\" );\\n\\n\\t\\t// Support: IE 9 - 11+\\n\\t\\t// IE's :disabled selector does not pick up the children of disabled fieldsets\\n\\t\\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\\n\\t\\t// In some of the document kinds, these selectors wouldn't work natively.\\n\\t\\t// This is probably OK but for backwards compatibility we want to maintain\\n\\t\\t// handling them through jQuery traversal in jQuery 3.x.\\n\\t\\tdocumentElement.appendChild( el ).disabled = true;\\n\\t\\tif ( el.querySelectorAll( \\\":disabled\\\" ).length !== 2 ) {\\n\\t\\t\\trbuggyQSA.push( \\\":enabled\\\", \\\":disabled\\\" );\\n\\t\\t}\\n\\n\\t\\t// Support: IE 11+, Edge 15 - 18+\\n\\t\\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\\n\\t\\t// Adding a temporary attribute to the document before the selection works\\n\\t\\t// around the issue.\\n\\t\\t// Interestingly, IE 10 & older don't seem to have the issue.\\n\\t\\tinput = document.createElement( \\\"input\\\" );\\n\\t\\tinput.setAttribute( \\\"name\\\", \\\"\\\" );\\n\\t\\tel.appendChild( input );\\n\\t\\tif ( !el.querySelectorAll( \\\"[name='']\\\" ).length ) {\\n\\t\\t\\trbuggyQSA.push( \\\"\\\\\\\\[\\\" + whitespace + \\\"*name\\\" + whitespace + \\\"*=\\\" +\\n\\t\\t\\t\\twhitespace + \\\"*(?:''|\\\\\\\"\\\\\\\")\\\" );\\n\\t\\t}\\n\\t} );\\n\\n\\tif ( !support.cssHas ) {\\n\\n\\t\\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\\n\\t\\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\\n\\t\\t// pseudo-classes inside `:has()` (such as `:has(:contains(\\\"Foo\\\"))`)\\n\\t\\t// in browsers that parse the `:has()` argument as a forgiving selector list.\\n\\t\\t// https://drafts.csswg.org/selectors/#relational now requires the argument\\n\\t\\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\\n\\t\\trbuggyQSA.push( \\\":has\\\" );\\n\\t}\\n\\n\\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \\\"|\\\" ) );\\n\\n\\t/* Sorting\\n\\t---------------------------------------------------------------------- */\\n\\n\\t// Document order sorting\\n\\tsortOrder = function( a, b ) {\\n\\n\\t\\t// Flag for duplicate removal\\n\\t\\tif ( a === b ) {\\n\\t\\t\\thasDuplicate = true;\\n\\t\\t\\treturn 0;\\n\\t\\t}\\n\\n\\t\\t// Sort on method existence if only one input has compareDocumentPosition\\n\\t\\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\\n\\t\\tif ( compare ) {\\n\\t\\t\\treturn compare;\\n\\t\\t}\\n\\n\\t\\t// Calculate position if both inputs belong to the same document\\n\\t\\t// Support: IE 11+, Edge 17 - 18+\\n\\t\\t// IE/Edge sometimes throw a \\\"Permission denied\\\" error when strict-comparing\\n\\t\\t// two documents; shallow comparisons work.\\n\\t\\t// eslint-disable-next-line eqeqeq\\n\\t\\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\\n\\t\\t\\ta.compareDocumentPosition( b ) :\\n\\n\\t\\t\\t// Otherwise we know they are disconnected\\n\\t\\t\\t1;\\n\\n\\t\\t// Disconnected nodes\\n\\t\\tif ( compare & 1 ||\\n\\t\\t\\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\\n\\n\\t\\t\\t// Choose the first element that is related to our preferred document\\n\\t\\t\\t// Support: IE 11+, Edge 17 - 18+\\n\\t\\t\\t// IE/Edge sometimes throw a \\\"Permission denied\\\" error when strict-comparing\\n\\t\\t\\t// two documents; shallow comparisons work.\\n\\t\\t\\t// eslint-disable-next-line eqeqeq\\n\\t\\t\\tif ( a === document || a.ownerDocument == preferredDoc &&\\n\\t\\t\\t\\tfind.contains( preferredDoc, a ) ) {\\n\\t\\t\\t\\treturn -1;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Support: IE 11+, Edge 17 - 18+\\n\\t\\t\\t// IE/Edge sometimes throw a \\\"Permission denied\\\" error when strict-comparing\\n\\t\\t\\t// two documents; shallow comparisons work.\\n\\t\\t\\t// eslint-disable-next-line eqeqeq\\n\\t\\t\\tif ( b === document || b.ownerDocument == preferredDoc &&\\n\\t\\t\\t\\tfind.contains( preferredDoc, b ) ) {\\n\\t\\t\\t\\treturn 1;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Maintain original order\\n\\t\\t\\treturn sortInput ?\\n\\t\\t\\t\\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\\n\\t\\t\\t\\t0;\\n\\t\\t}\\n\\n\\t\\treturn compare & 4 ? -1 : 1;\\n\\t};\\n\\n\\treturn document;\\n}\\n\\nfind.matches = function( expr, elements ) {\\n\\treturn find( expr, null, null, elements );\\n};\\n\\nfind.matchesSelector = function( elem, expr ) {\\n\\tsetDocument( elem );\\n\\n\\tif ( documentIsHTML &&\\n\\t\\t!nonnativeSelectorCache[ expr + \\\" \\\" ] &&\\n\\t\\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\\n\\n\\t\\ttry {\\n\\t\\t\\tvar ret = matches.call( elem, expr );\\n\\n\\t\\t\\t// IE 9's matchesSelector returns false on disconnected nodes\\n\\t\\t\\tif ( ret || support.disconnectedMatch ||\\n\\n\\t\\t\\t\\t\\t// As well, disconnected nodes are said to be in a document\\n\\t\\t\\t\\t\\t// fragment in IE 9\\n\\t\\t\\t\\t\\telem.document && elem.document.nodeType !== 11 ) {\\n\\t\\t\\t\\treturn ret;\\n\\t\\t\\t}\\n\\t\\t} catch ( e ) {\\n\\t\\t\\tnonnativeSelectorCache( expr, true );\\n\\t\\t}\\n\\t}\\n\\n\\treturn find( expr, document, null, [ elem ] ).length > 0;\\n};\\n\\nfind.contains = function( context, elem ) {\\n\\n\\t// Set document vars if needed\\n\\t// Support: IE 11+, Edge 17 - 18+\\n\\t// IE/Edge sometimes throw a \\\"Permission denied\\\" error when strict-comparing\\n\\t// two documents; shallow comparisons work.\\n\\t// eslint-disable-next-line eqeqeq\\n\\tif ( ( context.ownerDocument || context ) != document ) {\\n\\t\\tsetDocument( context );\\n\\t}\\n\\treturn jQuery.contains( context, elem );\\n};\\n\\n\\nfind.attr = function( elem, name ) {\\n\\n\\t// Set document vars if needed\\n\\t// Support: IE 11+, Edge 17 - 18+\\n\\t// IE/Edge sometimes throw a \\\"Permission denied\\\" error when strict-comparing\\n\\t// two documents; shallow comparisons work.\\n\\t// eslint-disable-next-line eqeqeq\\n\\tif ( ( elem.ownerDocument || elem ) != document ) {\\n\\t\\tsetDocument( elem );\\n\\t}\\n\\n\\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\\n\\n\\t\\t// Don't get fooled by Object.prototype properties (see trac-13807)\\n\\t\\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\\n\\t\\t\\tfn( elem, name, !documentIsHTML ) :\\n\\t\\t\\tundefined;\\n\\n\\tif ( val !== undefined ) {\\n\\t\\treturn val;\\n\\t}\\n\\n\\treturn elem.getAttribute( name );\\n};\\n\\nfind.error = function( msg ) {\\n\\tthrow new Error( \\\"Syntax error, unrecognized expression: \\\" + msg );\\n};\\n\\n/**\\n * Document sorting and removing duplicates\\n * @param {ArrayLike} results\\n */\\njQuery.uniqueSort = function( results ) {\\n\\tvar elem,\\n\\t\\tduplicates = [],\\n\\t\\tj = 0,\\n\\t\\ti = 0;\\n\\n\\t// Unless we *know* we can detect duplicates, assume their presence\\n\\t//\\n\\t// Support: Android <=4.0+\\n\\t// Testing for detecting duplicates is unpredictable so instead assume we can't\\n\\t// depend on duplicate detection in all browsers without a stable sort.\\n\\thasDuplicate = !support.sortStable;\\n\\tsortInput = !support.sortStable && slice.call( results, 0 );\\n\\tsort.call( results, sortOrder );\\n\\n\\tif ( hasDuplicate ) {\\n\\t\\twhile ( ( elem = results[ i++ ] ) ) {\\n\\t\\t\\tif ( elem === results[ i ] ) {\\n\\t\\t\\t\\tj = duplicates.push( i );\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\twhile ( j-- ) {\\n\\t\\t\\tsplice.call( results, duplicates[ j ], 1 );\\n\\t\\t}\\n\\t}\\n\\n\\t// Clear input after sorting to release objects\\n\\t// See https://github.com/jquery/sizzle/pull/225\\n\\tsortInput = null;\\n\\n\\treturn results;\\n};\\n\\njQuery.fn.uniqueSort = function() {\\n\\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\\n};\\n\\nExpr = jQuery.expr = {\\n\\n\\t// Can be adjusted by the user\\n\\tcacheLength: 50,\\n\\n\\tcreatePseudo: markFunction,\\n\\n\\tmatch: matchExpr,\\n\\n\\tattrHandle: {},\\n\\n\\tfind: {},\\n\\n\\trelative: {\\n\\t\\t\\\">\\\": { dir: \\\"parentNode\\\", first: true },\\n\\t\\t\\\" \\\": { dir: \\\"parentNode\\\" },\\n\\t\\t\\\"+\\\": { dir: \\\"previousSibling\\\", first: true },\\n\\t\\t\\\"~\\\": { dir: \\\"previousSibling\\\" }\\n\\t},\\n\\n\\tpreFilter: {\\n\\t\\tATTR: function( match ) {\\n\\t\\t\\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\\n\\n\\t\\t\\t// Move the given value to match[3] whether quoted or unquoted\\n\\t\\t\\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \\\"\\\" )\\n\\t\\t\\t\\t.replace( runescape, funescape );\\n\\n\\t\\t\\tif ( match[ 2 ] === \\\"~=\\\" ) {\\n\\t\\t\\t\\tmatch[ 3 ] = \\\" \\\" + match[ 3 ] + \\\" \\\";\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn match.slice( 0, 4 );\\n\\t\\t},\\n\\n\\t\\tCHILD: function( match ) {\\n\\n\\t\\t\\t/* matches from matchExpr[\\\"CHILD\\\"]\\n\\t\\t\\t\\t1 type (only|nth|...)\\n\\t\\t\\t\\t2 what (child|of-type)\\n\\t\\t\\t\\t3 argument (even|odd|\\\\d*|\\\\d*n([+-]\\\\d+)?|...)\\n\\t\\t\\t\\t4 xn-component of xn+y argument ([+-]?\\\\d*n|)\\n\\t\\t\\t\\t5 sign of xn-component\\n\\t\\t\\t\\t6 x of xn-component\\n\\t\\t\\t\\t7 sign of y-component\\n\\t\\t\\t\\t8 y of y-component\\n\\t\\t\\t*/\\n\\t\\t\\tmatch[ 1 ] = match[ 1 ].toLowerCase();\\n\\n\\t\\t\\tif ( match[ 1 ].slice( 0, 3 ) === \\\"nth\\\" ) {\\n\\n\\t\\t\\t\\t// nth-* requires argument\\n\\t\\t\\t\\tif ( !match[ 3 ] ) {\\n\\t\\t\\t\\t\\tfind.error( match[ 0 ] );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// numeric x and y parameters for Expr.filter.CHILD\\n\\t\\t\\t\\t// remember that false/true cast respectively to 0/1\\n\\t\\t\\t\\tmatch[ 4 ] = +( match[ 4 ] ?\\n\\t\\t\\t\\t\\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\\n\\t\\t\\t\\t\\t2 * ( match[ 3 ] === \\\"even\\\" || match[ 3 ] === \\\"odd\\\" )\\n\\t\\t\\t\\t);\\n\\t\\t\\t\\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \\\"odd\\\" );\\n\\n\\t\\t\\t// other types prohibit arguments\\n\\t\\t\\t} else if ( match[ 3 ] ) {\\n\\t\\t\\t\\tfind.error( match[ 0 ] );\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn match;\\n\\t\\t},\\n\\n\\t\\tPSEUDO: function( match ) {\\n\\t\\t\\tvar excess,\\n\\t\\t\\t\\tunquoted = !match[ 6 ] && match[ 2 ];\\n\\n\\t\\t\\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\\n\\t\\t\\t\\treturn null;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Accept quoted arguments as-is\\n\\t\\t\\tif ( match[ 3 ] ) {\\n\\t\\t\\t\\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \\\"\\\";\\n\\n\\t\\t\\t// Strip excess characters from unquoted arguments\\n\\t\\t\\t} else if ( unquoted && rpseudo.test( unquoted ) &&\\n\\n\\t\\t\\t\\t// Get excess from tokenize (recursively)\\n\\t\\t\\t\\t( excess = tokenize( unquoted, true ) ) &&\\n\\n\\t\\t\\t\\t// advance to the next closing parenthesis\\n\\t\\t\\t\\t( excess = unquoted.indexOf( \\\")\\\", unquoted.length - excess ) - unquoted.length ) ) {\\n\\n\\t\\t\\t\\t// excess is a negative index\\n\\t\\t\\t\\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\\n\\t\\t\\t\\tmatch[ 2 ] = unquoted.slice( 0, excess );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Return only captures needed by the pseudo filter method (type and argument)\\n\\t\\t\\treturn match.slice( 0, 3 );\\n\\t\\t}\\n\\t},\\n\\n\\tfilter: {\\n\\n\\t\\tTAG: function( nodeNameSelector ) {\\n\\t\\t\\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\\n\\t\\t\\treturn nodeNameSelector === \\\"*\\\" ?\\n\\t\\t\\t\\tfunction() {\\n\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t} :\\n\\t\\t\\t\\tfunction( elem ) {\\n\\t\\t\\t\\t\\treturn nodeName( elem, expectedNodeName );\\n\\t\\t\\t\\t};\\n\\t\\t},\\n\\n\\t\\tCLASS: function( className ) {\\n\\t\\t\\tvar pattern = classCache[ className + \\\" \\\" ];\\n\\n\\t\\t\\treturn pattern ||\\n\\t\\t\\t\\t( pattern = new RegExp( \\\"(^|\\\" + whitespace + \\\")\\\" + className +\\n\\t\\t\\t\\t\\t\\\"(\\\" + whitespace + \\\"|$)\\\" ) ) &&\\n\\t\\t\\t\\tclassCache( className, function( elem ) {\\n\\t\\t\\t\\t\\treturn pattern.test(\\n\\t\\t\\t\\t\\t\\ttypeof elem.className === \\\"string\\\" && elem.className ||\\n\\t\\t\\t\\t\\t\\t\\ttypeof elem.getAttribute !== \\\"undefined\\\" &&\\n\\t\\t\\t\\t\\t\\t\\t\\telem.getAttribute( \\\"class\\\" ) ||\\n\\t\\t\\t\\t\\t\\t\\t\\\"\\\"\\n\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t} );\\n\\t\\t},\\n\\n\\t\\tATTR: function( name, operator, check ) {\\n\\t\\t\\treturn function( elem ) {\\n\\t\\t\\t\\tvar result = find.attr( elem, name );\\n\\n\\t\\t\\t\\tif ( result == null ) {\\n\\t\\t\\t\\t\\treturn operator === \\\"!=\\\";\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif ( !operator ) {\\n\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tresult += \\\"\\\";\\n\\n\\t\\t\\t\\tif ( operator === \\\"=\\\" ) {\\n\\t\\t\\t\\t\\treturn result === check;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif ( operator === \\\"!=\\\" ) {\\n\\t\\t\\t\\t\\treturn result !== check;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif ( operator === \\\"^=\\\" ) {\\n\\t\\t\\t\\t\\treturn check && result.indexOf( check ) === 0;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif ( operator === \\\"*=\\\" ) {\\n\\t\\t\\t\\t\\treturn check && result.indexOf( check ) > -1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif ( operator === \\\"$=\\\" ) {\\n\\t\\t\\t\\t\\treturn check && result.slice( -check.length ) === check;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif ( operator === \\\"~=\\\" ) {\\n\\t\\t\\t\\t\\treturn ( \\\" \\\" + result.replace( rwhitespace, \\\" \\\" ) + \\\" \\\" )\\n\\t\\t\\t\\t\\t\\t.indexOf( check ) > -1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif ( operator === \\\"|=\\\" ) {\\n\\t\\t\\t\\t\\treturn result === check || result.slice( 0, check.length + 1 ) === check + \\\"-\\\";\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t};\\n\\t\\t},\\n\\n\\t\\tCHILD: function( type, what, _argument, first, last ) {\\n\\t\\t\\tvar simple = type.slice( 0, 3 ) !== \\\"nth\\\",\\n\\t\\t\\t\\tforward = type.slice( -4 ) !== \\\"last\\\",\\n\\t\\t\\t\\tofType = what === \\\"of-type\\\";\\n\\n\\t\\t\\treturn first === 1 && last === 0 ?\\n\\n\\t\\t\\t\\t// Shortcut for :nth-*(n)\\n\\t\\t\\t\\tfunction( elem ) {\\n\\t\\t\\t\\t\\treturn !!elem.parentNode;\\n\\t\\t\\t\\t} :\\n\\n\\t\\t\\t\\tfunction( elem, _context, xml ) {\\n\\t\\t\\t\\t\\tvar cache, outerCache, node, nodeIndex, start,\\n\\t\\t\\t\\t\\t\\tdir = simple !== forward ? \\\"nextSibling\\\" : \\\"previousSibling\\\",\\n\\t\\t\\t\\t\\t\\tparent = elem.parentNode,\\n\\t\\t\\t\\t\\t\\tname = ofType && elem.nodeName.toLowerCase(),\\n\\t\\t\\t\\t\\t\\tuseCache = !xml && !ofType,\\n\\t\\t\\t\\t\\t\\tdiff = false;\\n\\n\\t\\t\\t\\t\\tif ( parent ) {\\n\\n\\t\\t\\t\\t\\t\\t// :(first|last|only)-(child|of-type)\\n\\t\\t\\t\\t\\t\\tif ( simple ) {\\n\\t\\t\\t\\t\\t\\t\\twhile ( dir ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tnode = elem;\\n\\t\\t\\t\\t\\t\\t\\t\\twhile ( ( node = node[ dir ] ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tif ( ofType ?\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tnodeName( node, name ) :\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tnode.nodeType === 1 ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t// Reverse direction for :only-* (if we haven't yet done so)\\n\\t\\t\\t\\t\\t\\t\\t\\tstart = dir = type === \\\"only\\\" && !start && \\\"nextSibling\\\";\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\tstart = [ forward ? parent.firstChild : parent.lastChild ];\\n\\n\\t\\t\\t\\t\\t\\t// non-xml :nth-child(...) stores cache data on `parent`\\n\\t\\t\\t\\t\\t\\tif ( forward && useCache ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t// Seek `elem` from a previously-cached index\\n\\t\\t\\t\\t\\t\\t\\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\\n\\t\\t\\t\\t\\t\\t\\tcache = outerCache[ type ] || [];\\n\\t\\t\\t\\t\\t\\t\\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\\n\\t\\t\\t\\t\\t\\t\\tdiff = nodeIndex && cache[ 2 ];\\n\\t\\t\\t\\t\\t\\t\\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\\n\\n\\t\\t\\t\\t\\t\\t\\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t// Fallback to seeking `elem` from the start\\n\\t\\t\\t\\t\\t\\t\\t\\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t// When found, cache indexes on `parent` and break\\n\\t\\t\\t\\t\\t\\t\\t\\tif ( node.nodeType === 1 && ++diff && node === elem ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t} else {\\n\\n\\t\\t\\t\\t\\t\\t\\t// Use previously-cached element index if available\\n\\t\\t\\t\\t\\t\\t\\tif ( useCache ) {\\n\\t\\t\\t\\t\\t\\t\\t\\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\\n\\t\\t\\t\\t\\t\\t\\t\\tcache = outerCache[ type ] || [];\\n\\t\\t\\t\\t\\t\\t\\t\\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\\n\\t\\t\\t\\t\\t\\t\\t\\tdiff = nodeIndex;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t// xml :nth-child(...)\\n\\t\\t\\t\\t\\t\\t\\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\\n\\t\\t\\t\\t\\t\\t\\tif ( diff === false ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t// Use the same loop as above to seek `elem` from the start\\n\\t\\t\\t\\t\\t\\t\\t\\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tif ( ( ofType ?\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tnodeName( node, name ) :\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tnode.nodeType === 1 ) &&\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t++diff ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// Cache the index of each encountered element\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tif ( useCache ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\touterCache = node[ expando ] ||\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t( node[ expando ] = {} );\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\touterCache[ type ] = [ dirruns, diff ];\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tif ( node === elem ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t// Incorporate the offset, then check against cycle size\\n\\t\\t\\t\\t\\t\\tdiff -= last;\\n\\t\\t\\t\\t\\t\\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t};\\n\\t\\t},\\n\\n\\t\\tPSEUDO: function( pseudo, argument ) {\\n\\n\\t\\t\\t// pseudo-class names are case-insensitive\\n\\t\\t\\t// https://www.w3.org/TR/selectors/#pseudo-classes\\n\\t\\t\\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\\n\\t\\t\\t// Remember that setFilters inherits from pseudos\\n\\t\\t\\tvar args,\\n\\t\\t\\t\\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\\n\\t\\t\\t\\t\\tfind.error( \\\"unsupported pseudo: \\\" + pseudo );\\n\\n\\t\\t\\t// The user may use createPseudo to indicate that\\n\\t\\t\\t// arguments are needed to create the filter function\\n\\t\\t\\t// just as jQuery does\\n\\t\\t\\tif ( fn[ expando ] ) {\\n\\t\\t\\t\\treturn fn( argument );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// But maintain support for old signatures\\n\\t\\t\\tif ( fn.length > 1 ) {\\n\\t\\t\\t\\targs = [ pseudo, pseudo, \\\"\\\", argument ];\\n\\t\\t\\t\\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\\n\\t\\t\\t\\t\\tmarkFunction( function( seed, matches ) {\\n\\t\\t\\t\\t\\t\\tvar idx,\\n\\t\\t\\t\\t\\t\\t\\tmatched = fn( seed, argument ),\\n\\t\\t\\t\\t\\t\\t\\ti = matched.length;\\n\\t\\t\\t\\t\\t\\twhile ( i-- ) {\\n\\t\\t\\t\\t\\t\\t\\tidx = indexOf.call( seed, matched[ i ] );\\n\\t\\t\\t\\t\\t\\t\\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t} ) :\\n\\t\\t\\t\\t\\tfunction( elem ) {\\n\\t\\t\\t\\t\\t\\treturn fn( elem, 0, args );\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn fn;\\n\\t\\t}\\n\\t},\\n\\n\\tpseudos: {\\n\\n\\t\\t// Potentially complex pseudos\\n\\t\\tnot: markFunction( function( selector ) {\\n\\n\\t\\t\\t// Trim the selector passed to compile\\n\\t\\t\\t// to avoid treating leading and trailing\\n\\t\\t\\t// spaces as combinators\\n\\t\\t\\tvar input = [],\\n\\t\\t\\t\\tresults = [],\\n\\t\\t\\t\\tmatcher = compile( selector.replace( rtrimCSS, \\\"$1\\\" ) );\\n\\n\\t\\t\\treturn matcher[ expando ] ?\\n\\t\\t\\t\\tmarkFunction( function( seed, matches, _context, xml ) {\\n\\t\\t\\t\\t\\tvar elem,\\n\\t\\t\\t\\t\\t\\tunmatched = matcher( seed, null, xml, [] ),\\n\\t\\t\\t\\t\\t\\ti = seed.length;\\n\\n\\t\\t\\t\\t\\t// Match elements unmatched by `matcher`\\n\\t\\t\\t\\t\\twhile ( i-- ) {\\n\\t\\t\\t\\t\\t\\tif ( ( elem = unmatched[ i ] ) ) {\\n\\t\\t\\t\\t\\t\\t\\tseed[ i ] = !( matches[ i ] = elem );\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} ) :\\n\\t\\t\\t\\tfunction( elem, _context, xml ) {\\n\\t\\t\\t\\t\\tinput[ 0 ] = elem;\\n\\t\\t\\t\\t\\tmatcher( input, null, xml, results );\\n\\n\\t\\t\\t\\t\\t// Don't keep the element\\n\\t\\t\\t\\t\\t// (see https://github.com/jquery/sizzle/issues/299)\\n\\t\\t\\t\\t\\tinput[ 0 ] = null;\\n\\t\\t\\t\\t\\treturn !results.pop();\\n\\t\\t\\t\\t};\\n\\t\\t} ),\\n\\n\\t\\thas: markFunction( function( selector ) {\\n\\t\\t\\treturn function( elem ) {\\n\\t\\t\\t\\treturn find( selector, elem ).length > 0;\\n\\t\\t\\t};\\n\\t\\t} ),\\n\\n\\t\\tcontains: markFunction( function( text ) {\\n\\t\\t\\ttext = text.replace( runescape, funescape );\\n\\t\\t\\treturn function( elem ) {\\n\\t\\t\\t\\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\\n\\t\\t\\t};\\n\\t\\t} ),\\n\\n\\t\\t// \\\"Whether an element is represented by a :lang() selector\\n\\t\\t// is based solely on the element's language value\\n\\t\\t// being equal to the identifier C,\\n\\t\\t// or beginning with the identifier C immediately followed by \\\"-\\\".\\n\\t\\t// The matching of C against the element's language value is performed case-insensitively.\\n\\t\\t// The identifier C does not have to be a valid language name.\\\"\\n\\t\\t// https://www.w3.org/TR/selectors/#lang-pseudo\\n\\t\\tlang: markFunction( function( lang ) {\\n\\n\\t\\t\\t// lang value must be a valid identifier\\n\\t\\t\\tif ( !ridentifier.test( lang || \\\"\\\" ) ) {\\n\\t\\t\\t\\tfind.error( \\\"unsupported lang: \\\" + lang );\\n\\t\\t\\t}\\n\\t\\t\\tlang = lang.replace( runescape, funescape ).toLowerCase();\\n\\t\\t\\treturn function( elem ) {\\n\\t\\t\\t\\tvar elemLang;\\n\\t\\t\\t\\tdo {\\n\\t\\t\\t\\t\\tif ( ( elemLang = documentIsHTML ?\\n\\t\\t\\t\\t\\t\\telem.lang :\\n\\t\\t\\t\\t\\t\\telem.getAttribute( \\\"xml:lang\\\" ) || elem.getAttribute( \\\"lang\\\" ) ) ) {\\n\\n\\t\\t\\t\\t\\t\\telemLang = elemLang.toLowerCase();\\n\\t\\t\\t\\t\\t\\treturn elemLang === lang || elemLang.indexOf( lang + \\\"-\\\" ) === 0;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t};\\n\\t\\t} ),\\n\\n\\t\\t// Miscellaneous\\n\\t\\ttarget: function( elem ) {\\n\\t\\t\\tvar hash = window.location && window.location.hash;\\n\\t\\t\\treturn hash && hash.slice( 1 ) === elem.id;\\n\\t\\t},\\n\\n\\t\\troot: function( elem ) {\\n\\t\\t\\treturn elem === documentElement;\\n\\t\\t},\\n\\n\\t\\tfocus: function( elem ) {\\n\\t\\t\\treturn elem === safeActiveElement() &&\\n\\t\\t\\t\\tdocument.hasFocus() &&\\n\\t\\t\\t\\t!!( elem.type || elem.href || ~elem.tabIndex );\\n\\t\\t},\\n\\n\\t\\t// Boolean properties\\n\\t\\tenabled: createDisabledPseudo( false ),\\n\\t\\tdisabled: createDisabledPseudo( true ),\\n\\n\\t\\tchecked: function( elem ) {\\n\\n\\t\\t\\t// In CSS3, :checked should return both checked and selected elements\\n\\t\\t\\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\\n\\t\\t\\treturn ( nodeName( elem, \\\"input\\\" ) && !!elem.checked ) ||\\n\\t\\t\\t\\t( nodeName( elem, \\\"option\\\" ) && !!elem.selected );\\n\\t\\t},\\n\\n\\t\\tselected: function( elem ) {\\n\\n\\t\\t\\t// Support: IE <=11+\\n\\t\\t\\t// Accessing the selectedIndex property\\n\\t\\t\\t// forces the browser to treat the default option as\\n\\t\\t\\t// selected when in an optgroup.\\n\\t\\t\\tif ( elem.parentNode ) {\\n\\t\\t\\t\\t// eslint-disable-next-line no-unused-expressions\\n\\t\\t\\t\\telem.parentNode.selectedIndex;\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn elem.selected === true;\\n\\t\\t},\\n\\n\\t\\t// Contents\\n\\t\\tempty: function( elem ) {\\n\\n\\t\\t\\t// https://www.w3.org/TR/selectors/#empty-pseudo\\n\\t\\t\\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\\n\\t\\t\\t//   but not by others (comment: 8; processing instruction: 7; etc.)\\n\\t\\t\\t// nodeType < 6 works because attributes (2) do not appear as children\\n\\t\\t\\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\\n\\t\\t\\t\\tif ( elem.nodeType < 6 ) {\\n\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t},\\n\\n\\t\\tparent: function( elem ) {\\n\\t\\t\\treturn !Expr.pseudos.empty( elem );\\n\\t\\t},\\n\\n\\t\\t// Element/input types\\n\\t\\theader: function( elem ) {\\n\\t\\t\\treturn rheader.test( elem.nodeName );\\n\\t\\t},\\n\\n\\t\\tinput: function( elem ) {\\n\\t\\t\\treturn rinputs.test( elem.nodeName );\\n\\t\\t},\\n\\n\\t\\tbutton: function( elem ) {\\n\\t\\t\\treturn nodeName( elem, \\\"input\\\" ) && elem.type === \\\"button\\\" ||\\n\\t\\t\\t\\tnodeName( elem, \\\"button\\\" );\\n\\t\\t},\\n\\n\\t\\ttext: function( elem ) {\\n\\t\\t\\tvar attr;\\n\\t\\t\\treturn nodeName( elem, \\\"input\\\" ) && elem.type === \\\"text\\\" &&\\n\\n\\t\\t\\t\\t// Support: IE <10 only\\n\\t\\t\\t\\t// New HTML5 attribute values (e.g., \\\"search\\\") appear\\n\\t\\t\\t\\t// with elem.type === \\\"text\\\"\\n\\t\\t\\t\\t( ( attr = elem.getAttribute( \\\"type\\\" ) ) == null ||\\n\\t\\t\\t\\t\\tattr.toLowerCase() === \\\"text\\\" );\\n\\t\\t},\\n\\n\\t\\t// Position-in-collection\\n\\t\\tfirst: createPositionalPseudo( function() {\\n\\t\\t\\treturn [ 0 ];\\n\\t\\t} ),\\n\\n\\t\\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\\n\\t\\t\\treturn [ length - 1 ];\\n\\t\\t} ),\\n\\n\\t\\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\\n\\t\\t\\treturn [ argument < 0 ? argument + length : argument ];\\n\\t\\t} ),\\n\\n\\t\\teven: createPositionalPseudo( function( matchIndexes, length ) {\\n\\t\\t\\tvar i = 0;\\n\\t\\t\\tfor ( ; i < length; i += 2 ) {\\n\\t\\t\\t\\tmatchIndexes.push( i );\\n\\t\\t\\t}\\n\\t\\t\\treturn matchIndexes;\\n\\t\\t} ),\\n\\n\\t\\todd: createPositionalPseudo( function( matchIndexes, length ) {\\n\\t\\t\\tvar i = 1;\\n\\t\\t\\tfor ( ; i < length; i += 2 ) {\\n\\t\\t\\t\\tmatchIndexes.push( i );\\n\\t\\t\\t}\\n\\t\\t\\treturn matchIndexes;\\n\\t\\t} ),\\n\\n\\t\\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\\n\\t\\t\\tvar i;\\n\\n\\t\\t\\tif ( argument < 0 ) {\\n\\t\\t\\t\\ti = argument + length;\\n\\t\\t\\t} else if ( argument > length ) {\\n\\t\\t\\t\\ti = length;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ti = argument;\\n\\t\\t\\t}\\n\\n\\t\\t\\tfor ( ; --i >= 0; ) {\\n\\t\\t\\t\\tmatchIndexes.push( i );\\n\\t\\t\\t}\\n\\t\\t\\treturn matchIndexes;\\n\\t\\t} ),\\n\\n\\t\\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\\n\\t\\t\\tvar i = argument < 0 ? argument + length : argument;\\n\\t\\t\\tfor ( ; ++i < length; ) {\\n\\t\\t\\t\\tmatchIndexes.push( i );\\n\\t\\t\\t}\\n\\t\\t\\treturn matchIndexes;\\n\\t\\t} )\\n\\t}\\n};\\n\\nExpr.pseudos.nth = Expr.pseudos.eq;\\n\\n// Add button/input type pseudos\\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\\n\\tExpr.pseudos[ i ] = createInputPseudo( i );\\n}\\nfor ( i in { submit: true, reset: true } ) {\\n\\tExpr.pseudos[ i ] = createButtonPseudo( i );\\n}\\n\\n// Easy API for creating new setFilters\\nfunction setFilters() {}\\nsetFilters.prototype = Expr.filters = Expr.pseudos;\\nExpr.setFilters = new setFilters();\\n\\nfunction tokenize( selector, parseOnly ) {\\n\\tvar matched, match, tokens, type,\\n\\t\\tsoFar, groups, preFilters,\\n\\t\\tcached = tokenCache[ selector + \\\" \\\" ];\\n\\n\\tif ( cached ) {\\n\\t\\treturn parseOnly ? 0 : cached.slice( 0 );\\n\\t}\\n\\n\\tsoFar = selector;\\n\\tgroups = [];\\n\\tpreFilters = Expr.preFilter;\\n\\n\\twhile ( soFar ) {\\n\\n\\t\\t// Comma and first run\\n\\t\\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\\n\\t\\t\\tif ( match ) {\\n\\n\\t\\t\\t\\t// Don't consume trailing commas as valid\\n\\t\\t\\t\\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\\n\\t\\t\\t}\\n\\t\\t\\tgroups.push( ( tokens = [] ) );\\n\\t\\t}\\n\\n\\t\\tmatched = false;\\n\\n\\t\\t// Combinators\\n\\t\\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\\n\\t\\t\\tmatched = match.shift();\\n\\t\\t\\ttokens.push( {\\n\\t\\t\\t\\tvalue: matched,\\n\\n\\t\\t\\t\\t// Cast descendant combinators to space\\n\\t\\t\\t\\ttype: match[ 0 ].replace( rtrimCSS, \\\" \\\" )\\n\\t\\t\\t} );\\n\\t\\t\\tsoFar = soFar.slice( matched.length );\\n\\t\\t}\\n\\n\\t\\t// Filters\\n\\t\\tfor ( type in Expr.filter ) {\\n\\t\\t\\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\\n\\t\\t\\t\\t( match = preFilters[ type ]( match ) ) ) ) {\\n\\t\\t\\t\\tmatched = match.shift();\\n\\t\\t\\t\\ttokens.push( {\\n\\t\\t\\t\\t\\tvalue: matched,\\n\\t\\t\\t\\t\\ttype: type,\\n\\t\\t\\t\\t\\tmatches: match\\n\\t\\t\\t\\t} );\\n\\t\\t\\t\\tsoFar = soFar.slice( matched.length );\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif ( !matched ) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n\\n\\t// Return the length of the invalid excess\\n\\t// if we're just parsing\\n\\t// Otherwise, throw an error or return tokens\\n\\tif ( parseOnly ) {\\n\\t\\treturn soFar.length;\\n\\t}\\n\\n\\treturn soFar ?\\n\\t\\tfind.error( selector ) :\\n\\n\\t\\t// Cache the tokens\\n\\t\\ttokenCache( selector, groups ).slice( 0 );\\n}\\n\\nfunction toSelector( tokens ) {\\n\\tvar i = 0,\\n\\t\\tlen = tokens.length,\\n\\t\\tselector = \\\"\\\";\\n\\tfor ( ; i < len; i++ ) {\\n\\t\\tselector += tokens[ i ].value;\\n\\t}\\n\\treturn selector;\\n}\\n\\nfunction addCombinator( matcher, combinator, base ) {\\n\\tvar dir = combinator.dir,\\n\\t\\tskip = combinator.next,\\n\\t\\tkey = skip || dir,\\n\\t\\tcheckNonElements = base && key === \\\"parentNode\\\",\\n\\t\\tdoneName = done++;\\n\\n\\treturn combinator.first ?\\n\\n\\t\\t// Check against closest ancestor/preceding element\\n\\t\\tfunction( elem, context, xml ) {\\n\\t\\t\\twhile ( ( elem = elem[ dir ] ) ) {\\n\\t\\t\\t\\tif ( elem.nodeType === 1 || checkNonElements ) {\\n\\t\\t\\t\\t\\treturn matcher( elem, context, xml );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\treturn false;\\n\\t\\t} :\\n\\n\\t\\t// Check against all ancestor/preceding elements\\n\\t\\tfunction( elem, context, xml ) {\\n\\t\\t\\tvar oldCache, outerCache,\\n\\t\\t\\t\\tnewCache = [ dirruns, doneName ];\\n\\n\\t\\t\\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\\n\\t\\t\\tif ( xml ) {\\n\\t\\t\\t\\twhile ( ( elem = elem[ dir ] ) ) {\\n\\t\\t\\t\\t\\tif ( elem.nodeType === 1 || checkNonElements ) {\\n\\t\\t\\t\\t\\t\\tif ( matcher( elem, context, xml ) ) {\\n\\t\\t\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\twhile ( ( elem = elem[ dir ] ) ) {\\n\\t\\t\\t\\t\\tif ( elem.nodeType === 1 || checkNonElements ) {\\n\\t\\t\\t\\t\\t\\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\\n\\n\\t\\t\\t\\t\\t\\tif ( skip && nodeName( elem, skip ) ) {\\n\\t\\t\\t\\t\\t\\t\\telem = elem[ dir ] || elem;\\n\\t\\t\\t\\t\\t\\t} else if ( ( oldCache = outerCache[ key ] ) &&\\n\\t\\t\\t\\t\\t\\t\\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t// Assign to newCache so results back-propagate to previous elements\\n\\t\\t\\t\\t\\t\\t\\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\\n\\t\\t\\t\\t\\t\\t} else {\\n\\n\\t\\t\\t\\t\\t\\t\\t// Reuse newcache so results back-propagate to previous elements\\n\\t\\t\\t\\t\\t\\t\\touterCache[ key ] = newCache;\\n\\n\\t\\t\\t\\t\\t\\t\\t// A match means we're done; a fail means we have to keep checking\\n\\t\\t\\t\\t\\t\\t\\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\treturn false;\\n\\t\\t};\\n}\\n\\nfunction elementMatcher( matchers ) {\\n\\treturn matchers.length > 1 ?\\n\\t\\tfunction( elem, context, xml ) {\\n\\t\\t\\tvar i = matchers.length;\\n\\t\\t\\twhile ( i-- ) {\\n\\t\\t\\t\\tif ( !matchers[ i ]( elem, context, xml ) ) {\\n\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t} :\\n\\t\\tmatchers[ 0 ];\\n}\\n\\nfunction multipleContexts( selector, contexts, results ) {\\n\\tvar i = 0,\\n\\t\\tlen = contexts.length;\\n\\tfor ( ; i < len; i++ ) {\\n\\t\\tfind( selector, contexts[ i ], results );\\n\\t}\\n\\treturn results;\\n}\\n\\nfunction condense( unmatched, map, filter, context, xml ) {\\n\\tvar elem,\\n\\t\\tnewUnmatched = [],\\n\\t\\ti = 0,\\n\\t\\tlen = unmatched.length,\\n\\t\\tmapped = map != null;\\n\\n\\tfor ( ; i < len; i++ ) {\\n\\t\\tif ( ( elem = unmatched[ i ] ) ) {\\n\\t\\t\\tif ( !filter || filter( elem, context, xml ) ) {\\n\\t\\t\\t\\tnewUnmatched.push( elem );\\n\\t\\t\\t\\tif ( mapped ) {\\n\\t\\t\\t\\t\\tmap.push( i );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\treturn newUnmatched;\\n}\\n\\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\\n\\tif ( postFilter && !postFilter[ expando ] ) {\\n\\t\\tpostFilter = setMatcher( postFilter );\\n\\t}\\n\\tif ( postFinder && !postFinder[ expando ] ) {\\n\\t\\tpostFinder = setMatcher( postFinder, postSelector );\\n\\t}\\n\\treturn markFunction( function( seed, results, context, xml ) {\\n\\t\\tvar temp, i, elem, matcherOut,\\n\\t\\t\\tpreMap = [],\\n\\t\\t\\tpostMap = [],\\n\\t\\t\\tpreexisting = results.length,\\n\\n\\t\\t\\t// Get initial elements from seed or context\\n\\t\\t\\telems = seed ||\\n\\t\\t\\t\\tmultipleContexts( selector || \\\"*\\\",\\n\\t\\t\\t\\t\\tcontext.nodeType ? [ context ] : context, [] ),\\n\\n\\t\\t\\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\\n\\t\\t\\tmatcherIn = preFilter && ( seed || !selector ) ?\\n\\t\\t\\t\\tcondense( elems, preMap, preFilter, context, xml ) :\\n\\t\\t\\t\\telems;\\n\\n\\t\\tif ( matcher ) {\\n\\n\\t\\t\\t// If we have a postFinder, or filtered seed, or non-seed postFilter\\n\\t\\t\\t// or preexisting results,\\n\\t\\t\\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\\n\\n\\t\\t\\t\\t// ...intermediate processing is necessary\\n\\t\\t\\t\\t[] :\\n\\n\\t\\t\\t\\t// ...otherwise use results directly\\n\\t\\t\\t\\tresults;\\n\\n\\t\\t\\t// Find primary matches\\n\\t\\t\\tmatcher( matcherIn, matcherOut, context, xml );\\n\\t\\t} else {\\n\\t\\t\\tmatcherOut = matcherIn;\\n\\t\\t}\\n\\n\\t\\t// Apply postFilter\\n\\t\\tif ( postFilter ) {\\n\\t\\t\\ttemp = condense( matcherOut, postMap );\\n\\t\\t\\tpostFilter( temp, [], context, xml );\\n\\n\\t\\t\\t// Un-match failing elements by moving them back to matcherIn\\n\\t\\t\\ti = temp.length;\\n\\t\\t\\twhile ( i-- ) {\\n\\t\\t\\t\\tif ( ( elem = temp[ i ] ) ) {\\n\\t\\t\\t\\t\\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif ( seed ) {\\n\\t\\t\\tif ( postFinder || preFilter ) {\\n\\t\\t\\t\\tif ( postFinder ) {\\n\\n\\t\\t\\t\\t\\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\\n\\t\\t\\t\\t\\ttemp = [];\\n\\t\\t\\t\\t\\ti = matcherOut.length;\\n\\t\\t\\t\\t\\twhile ( i-- ) {\\n\\t\\t\\t\\t\\t\\tif ( ( elem = matcherOut[ i ] ) ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t// Restore matcherIn since elem is not yet a final match\\n\\t\\t\\t\\t\\t\\t\\ttemp.push( ( matcherIn[ i ] = elem ) );\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tpostFinder( null, ( matcherOut = [] ), temp, xml );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Move matched elements from seed to results to keep them synchronized\\n\\t\\t\\t\\ti = matcherOut.length;\\n\\t\\t\\t\\twhile ( i-- ) {\\n\\t\\t\\t\\t\\tif ( ( elem = matcherOut[ i ] ) &&\\n\\t\\t\\t\\t\\t\\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\\n\\n\\t\\t\\t\\t\\t\\tseed[ temp ] = !( results[ temp ] = elem );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t// Add elements to results, through postFinder if defined\\n\\t\\t} else {\\n\\t\\t\\tmatcherOut = condense(\\n\\t\\t\\t\\tmatcherOut === results ?\\n\\t\\t\\t\\t\\tmatcherOut.splice( preexisting, matcherOut.length ) :\\n\\t\\t\\t\\t\\tmatcherOut\\n\\t\\t\\t);\\n\\t\\t\\tif ( postFinder ) {\\n\\t\\t\\t\\tpostFinder( null, results, matcherOut, xml );\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tpush.apply( results, matcherOut );\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} );\\n}\\n\\nfunction matcherFromTokens( tokens ) {\\n\\tvar checkContext, matcher, j,\\n\\t\\tlen = tokens.length,\\n\\t\\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\\n\\t\\timplicitRelative = leadingRelative || Expr.relative[ \\\" \\\" ],\\n\\t\\ti = leadingRelative ? 1 : 0,\\n\\n\\t\\t// The foundational matcher ensures that elements are reachable from top-level context(s)\\n\\t\\tmatchContext = addCombinator( function( elem ) {\\n\\t\\t\\treturn elem === checkContext;\\n\\t\\t}, implicitRelative, true ),\\n\\t\\tmatchAnyContext = addCombinator( function( elem ) {\\n\\t\\t\\treturn indexOf.call( checkContext, elem ) > -1;\\n\\t\\t}, implicitRelative, true ),\\n\\t\\tmatchers = [ function( elem, context, xml ) {\\n\\n\\t\\t\\t// Support: IE 11+, Edge 17 - 18+\\n\\t\\t\\t// IE/Edge sometimes throw a \\\"Permission denied\\\" error when strict-comparing\\n\\t\\t\\t// two documents; shallow comparisons work.\\n\\t\\t\\t// eslint-disable-next-line eqeqeq\\n\\t\\t\\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\\n\\t\\t\\t\\t( checkContext = context ).nodeType ?\\n\\t\\t\\t\\t\\tmatchContext( elem, context, xml ) :\\n\\t\\t\\t\\t\\tmatchAnyContext( elem, context, xml ) );\\n\\n\\t\\t\\t// Avoid hanging onto element\\n\\t\\t\\t// (see https://github.com/jquery/sizzle/issues/299)\\n\\t\\t\\tcheckContext = null;\\n\\t\\t\\treturn ret;\\n\\t\\t} ];\\n\\n\\tfor ( ; i < len; i++ ) {\\n\\t\\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\\n\\t\\t\\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\\n\\t\\t} else {\\n\\t\\t\\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\\n\\n\\t\\t\\t// Return special upon seeing a positional matcher\\n\\t\\t\\tif ( matcher[ expando ] ) {\\n\\n\\t\\t\\t\\t// Find the next relative operator (if any) for proper handling\\n\\t\\t\\t\\tj = ++i;\\n\\t\\t\\t\\tfor ( ; j < len; j++ ) {\\n\\t\\t\\t\\t\\tif ( Expr.relative[ tokens[ j ].type ] ) {\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn setMatcher(\\n\\t\\t\\t\\t\\ti > 1 && elementMatcher( matchers ),\\n\\t\\t\\t\\t\\ti > 1 && toSelector(\\n\\n\\t\\t\\t\\t\\t\\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\\n\\t\\t\\t\\t\\t\\ttokens.slice( 0, i - 1 )\\n\\t\\t\\t\\t\\t\\t\\t.concat( { value: tokens[ i - 2 ].type === \\\" \\\" ? \\\"*\\\" : \\\"\\\" } )\\n\\t\\t\\t\\t\\t).replace( rtrimCSS, \\\"$1\\\" ),\\n\\t\\t\\t\\t\\tmatcher,\\n\\t\\t\\t\\t\\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\\n\\t\\t\\t\\t\\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\\n\\t\\t\\t\\t\\tj < len && toSelector( tokens )\\n\\t\\t\\t\\t);\\n\\t\\t\\t}\\n\\t\\t\\tmatchers.push( matcher );\\n\\t\\t}\\n\\t}\\n\\n\\treturn elementMatcher( matchers );\\n}\\n\\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\\n\\tvar bySet = setMatchers.length > 0,\\n\\t\\tbyElement = elementMatchers.length > 0,\\n\\t\\tsuperMatcher = function( seed, context, xml, results, outermost ) {\\n\\t\\t\\tvar elem, j, matcher,\\n\\t\\t\\t\\tmatchedCount = 0,\\n\\t\\t\\t\\ti = \\\"0\\\",\\n\\t\\t\\t\\tunmatched = seed && [],\\n\\t\\t\\t\\tsetMatched = [],\\n\\t\\t\\t\\tcontextBackup = outermostContext,\\n\\n\\t\\t\\t\\t// We must always have either seed elements or outermost context\\n\\t\\t\\t\\telems = seed || byElement && Expr.find.TAG( \\\"*\\\", outermost ),\\n\\n\\t\\t\\t\\t// Use integer dirruns iff this is the outermost matcher\\n\\t\\t\\t\\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\\n\\t\\t\\t\\tlen = elems.length;\\n\\n\\t\\t\\tif ( outermost ) {\\n\\n\\t\\t\\t\\t// Support: IE 11+, Edge 17 - 18+\\n\\t\\t\\t\\t// IE/Edge sometimes throw a \\\"Permission denied\\\" error when strict-comparing\\n\\t\\t\\t\\t// two documents; shallow comparisons work.\\n\\t\\t\\t\\t// eslint-disable-next-line eqeqeq\\n\\t\\t\\t\\toutermostContext = context == document || context || outermost;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Add elements passing elementMatchers directly to results\\n\\t\\t\\t// Support: iOS <=7 - 9 only\\n\\t\\t\\t// Tolerate NodeList properties (IE: \\\"length\\\"; Safari: <number>) matching\\n\\t\\t\\t// elements by id. (see trac-14142)\\n\\t\\t\\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\\n\\t\\t\\t\\tif ( byElement && elem ) {\\n\\t\\t\\t\\t\\tj = 0;\\n\\n\\t\\t\\t\\t\\t// Support: IE 11+, Edge 17 - 18+\\n\\t\\t\\t\\t\\t// IE/Edge sometimes throw a \\\"Permission denied\\\" error when strict-comparing\\n\\t\\t\\t\\t\\t// two documents; shallow comparisons work.\\n\\t\\t\\t\\t\\t// eslint-disable-next-line eqeqeq\\n\\t\\t\\t\\t\\tif ( !context && elem.ownerDocument != document ) {\\n\\t\\t\\t\\t\\t\\tsetDocument( elem );\\n\\t\\t\\t\\t\\t\\txml = !documentIsHTML;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\\n\\t\\t\\t\\t\\t\\tif ( matcher( elem, context || document, xml ) ) {\\n\\t\\t\\t\\t\\t\\t\\tpush.call( results, elem );\\n\\t\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif ( outermost ) {\\n\\t\\t\\t\\t\\t\\tdirruns = dirrunsUnique;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Track unmatched elements for set filters\\n\\t\\t\\t\\tif ( bySet ) {\\n\\n\\t\\t\\t\\t\\t// They will have gone through all possible matchers\\n\\t\\t\\t\\t\\tif ( ( elem = !matcher && elem ) ) {\\n\\t\\t\\t\\t\\t\\tmatchedCount--;\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t// Lengthen the array for every element, matched or not\\n\\t\\t\\t\\t\\tif ( seed ) {\\n\\t\\t\\t\\t\\t\\tunmatched.push( elem );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\\n\\t\\t\\t// makes the latter nonnegative.\\n\\t\\t\\tmatchedCount += i;\\n\\n\\t\\t\\t// Apply set filters to unmatched elements\\n\\t\\t\\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\\n\\t\\t\\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\\n\\t\\t\\t// no element matchers and no seed.\\n\\t\\t\\t// Incrementing an initially-string \\\"0\\\" `i` allows `i` to remain a string only in that\\n\\t\\t\\t// case, which will result in a \\\"00\\\" `matchedCount` that differs from `i` but is also\\n\\t\\t\\t// numerically zero.\\n\\t\\t\\tif ( bySet && i !== matchedCount ) {\\n\\t\\t\\t\\tj = 0;\\n\\t\\t\\t\\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\\n\\t\\t\\t\\t\\tmatcher( unmatched, setMatched, context, xml );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif ( seed ) {\\n\\n\\t\\t\\t\\t\\t// Reintegrate element matches to eliminate the need for sorting\\n\\t\\t\\t\\t\\tif ( matchedCount > 0 ) {\\n\\t\\t\\t\\t\\t\\twhile ( i-- ) {\\n\\t\\t\\t\\t\\t\\t\\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tsetMatched[ i ] = pop.call( results );\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t// Discard index placeholder values to get only actual matches\\n\\t\\t\\t\\t\\tsetMatched = condense( setMatched );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Add matches to results\\n\\t\\t\\t\\tpush.apply( results, setMatched );\\n\\n\\t\\t\\t\\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\\n\\t\\t\\t\\tif ( outermost && !seed && setMatched.length > 0 &&\\n\\t\\t\\t\\t\\t( matchedCount + setMatchers.length ) > 1 ) {\\n\\n\\t\\t\\t\\t\\tjQuery.uniqueSort( results );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Override manipulation of globals by nested matchers\\n\\t\\t\\tif ( outermost ) {\\n\\t\\t\\t\\tdirruns = dirrunsUnique;\\n\\t\\t\\t\\toutermostContext = contextBackup;\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn unmatched;\\n\\t\\t};\\n\\n\\treturn bySet ?\\n\\t\\tmarkFunction( superMatcher ) :\\n\\t\\tsuperMatcher;\\n}\\n\\nfunction compile( selector, match /* Internal Use Only */ ) {\\n\\tvar i,\\n\\t\\tsetMatchers = [],\\n\\t\\telementMatchers = [],\\n\\t\\tcached = compilerCache[ selector + \\\" \\\" ];\\n\\n\\tif ( !cached ) {\\n\\n\\t\\t// Generate a function of recursive functions that can be used to check each element\\n\\t\\tif ( !match ) {\\n\\t\\t\\tmatch = tokenize( selector );\\n\\t\\t}\\n\\t\\ti = match.length;\\n\\t\\twhile ( i-- ) {\\n\\t\\t\\tcached = matcherFromTokens( match[ i ] );\\n\\t\\t\\tif ( cached[ expando ] ) {\\n\\t\\t\\t\\tsetMatchers.push( cached );\\n\\t\\t\\t} else {\\n\\t\\t\\t\\telementMatchers.push( cached );\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Cache the compiled function\\n\\t\\tcached = compilerCache( selector,\\n\\t\\t\\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\\n\\n\\t\\t// Save selector and tokenization\\n\\t\\tcached.selector = selector;\\n\\t}\\n\\treturn cached;\\n}\\n\\n/**\\n * A low-level selection function that works with jQuery's compiled\\n *  selector functions\\n * @param {String|Function} selector A selector or a pre-compiled\\n *  selector function built with jQuery selector compile\\n * @param {Element} context\\n * @param {Array} [results]\\n * @param {Array} [seed] A set of elements to match against\\n */\\nfunction select( selector, context, results, seed ) {\\n\\tvar i, tokens, token, type, find,\\n\\t\\tcompiled = typeof selector === \\\"function\\\" && selector,\\n\\t\\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\\n\\n\\tresults = results || [];\\n\\n\\t// Try to minimize operations if there is only one selector in the list and no seed\\n\\t// (the latter of which guarantees us context)\\n\\tif ( match.length === 1 ) {\\n\\n\\t\\t// Reduce context if the leading compound selector is an ID\\n\\t\\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\\n\\t\\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \\\"ID\\\" &&\\n\\t\\t\\t\\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\\n\\n\\t\\t\\tcontext = ( Expr.find.ID(\\n\\t\\t\\t\\ttoken.matches[ 0 ].replace( runescape, funescape ),\\n\\t\\t\\t\\tcontext\\n\\t\\t\\t) || [] )[ 0 ];\\n\\t\\t\\tif ( !context ) {\\n\\t\\t\\t\\treturn results;\\n\\n\\t\\t\\t// Precompiled matchers will still verify ancestry, so step up a level\\n\\t\\t\\t} else if ( compiled ) {\\n\\t\\t\\t\\tcontext = context.parentNode;\\n\\t\\t\\t}\\n\\n\\t\\t\\tselector = selector.slice( tokens.shift().value.length );\\n\\t\\t}\\n\\n\\t\\t// Fetch a seed set for right-to-left matching\\n\\t\\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\\n\\t\\twhile ( i-- ) {\\n\\t\\t\\ttoken = tokens[ i ];\\n\\n\\t\\t\\t// Abort if we hit a combinator\\n\\t\\t\\tif ( Expr.relative[ ( type = token.type ) ] ) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t\\tif ( ( find = Expr.find[ type ] ) ) {\\n\\n\\t\\t\\t\\t// Search, expanding context for leading sibling combinators\\n\\t\\t\\t\\tif ( ( seed = find(\\n\\t\\t\\t\\t\\ttoken.matches[ 0 ].replace( runescape, funescape ),\\n\\t\\t\\t\\t\\trsibling.test( tokens[ 0 ].type ) &&\\n\\t\\t\\t\\t\\t\\ttestContext( context.parentNode ) || context\\n\\t\\t\\t\\t) ) ) {\\n\\n\\t\\t\\t\\t\\t// If seed is empty or no tokens remain, we can return early\\n\\t\\t\\t\\t\\ttokens.splice( i, 1 );\\n\\t\\t\\t\\t\\tselector = seed.length && toSelector( tokens );\\n\\t\\t\\t\\t\\tif ( !selector ) {\\n\\t\\t\\t\\t\\t\\tpush.apply( results, seed );\\n\\t\\t\\t\\t\\t\\treturn results;\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t// Compile and execute a filtering function if one is not provided\\n\\t// Provide `match` to avoid retokenization if we modified the selector above\\n\\t( compiled || compile( selector, match ) )(\\n\\t\\tseed,\\n\\t\\tcontext,\\n\\t\\t!documentIsHTML,\\n\\t\\tresults,\\n\\t\\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\\n\\t);\\n\\treturn results;\\n}\\n\\n// One-time assignments\\n\\n// Support: Android <=4.0 - 4.1+\\n// Sort stability\\nsupport.sortStable = expando.split( \\\"\\\" ).sort( sortOrder ).join( \\\"\\\" ) === expando;\\n\\n// Initialize against the default document\\nsetDocument();\\n\\n// Support: Android <=4.0 - 4.1+\\n// Detached nodes confoundingly follow *each other*\\nsupport.sortDetached = assert( function( el ) {\\n\\n\\t// Should return 1, but returns 4 (following)\\n\\treturn el.compareDocumentPosition( document.createElement( \\\"fieldset\\\" ) ) & 1;\\n} );\\n\\njQuery.find = find;\\n\\n// Deprecated\\njQuery.expr[ \\\":\\\" ] = jQuery.expr.pseudos;\\njQuery.unique = jQuery.uniqueSort;\\n\\n// These have always been private, but they used to be documented as part of\\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\\nfind.compile = compile;\\nfind.select = select;\\nfind.setDocument = setDocument;\\nfind.tokenize = tokenize;\\n\\nfind.escape = jQuery.escapeSelector;\\nfind.getText = jQuery.text;\\nfind.isXML = jQuery.isXMLDoc;\\nfind.selectors = jQuery.expr;\\nfind.support = jQuery.support;\\nfind.uniqueSort = jQuery.uniqueSort;\\n\\n\\t/* eslint-enable */\\n\\n} )();\\n\\n\\nvar dir = function( elem, dir, until ) {\\n\\tvar matched = [],\\n\\t\\ttruncate = until !== undefined;\\n\\n\\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\\n\\t\\tif ( elem.nodeType === 1 ) {\\n\\t\\t\\tif ( truncate && jQuery( elem ).is( until ) ) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t\\tmatched.push( elem );\\n\\t\\t}\\n\\t}\\n\\treturn matched;\\n};\\n\\n\\nvar siblings = function( n, elem ) {\\n\\tvar matched = [];\\n\\n\\tfor ( ; n; n = n.nextSibling ) {\\n\\t\\tif ( n.nodeType === 1 && n !== elem ) {\\n\\t\\t\\tmatched.push( n );\\n\\t\\t}\\n\\t}\\n\\n\\treturn matched;\\n};\\n\\n\\nvar rneedsContext = jQuery.expr.match.needsContext;\\n\\nvar rsingleTag = ( /^<([a-z][^\\\\/\\\\0>:\\\\x20\\\\t\\\\r\\\\n\\\\f]*)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\/?>(?:<\\\\/\\\\1>|)$/i );\\n\\n\\n\\n// Implement the identical functionality for filter and not\\nfunction winnow( elements, qualifier, not ) {\\n\\tif ( isFunction( qualifier ) ) {\\n\\t\\treturn jQuery.grep( elements, function( elem, i ) {\\n\\t\\t\\treturn !!qualifier.call( elem, i, elem ) !== not;\\n\\t\\t} );\\n\\t}\\n\\n\\t// Single element\\n\\tif ( qualifier.nodeType ) {\\n\\t\\treturn jQuery.grep( elements, function( elem ) {\\n\\t\\t\\treturn ( elem === qualifier ) !== not;\\n\\t\\t} );\\n\\t}\\n\\n\\t// Arraylike of elements (jQuery, arguments, Array)\\n\\tif ( typeof qualifier !== \\\"string\\\" ) {\\n\\t\\treturn jQuery.grep( elements, function( elem ) {\\n\\t\\t\\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\\n\\t\\t} );\\n\\t}\\n\\n\\t// Filtered directly for both simple and complex selectors\\n\\treturn jQuery.filter( qualifier, elements, not );\\n}\\n\\njQuery.filter = function( expr, elems, not ) {\\n\\tvar elem = elems[ 0 ];\\n\\n\\tif ( not ) {\\n\\t\\texpr = \\\":not(\\\" + expr + \\\")\\\";\\n\\t}\\n\\n\\tif ( elems.length === 1 && elem.nodeType === 1 ) {\\n\\t\\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\\n\\t}\\n\\n\\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\\n\\t\\treturn elem.nodeType === 1;\\n\\t} ) );\\n};\\n\\njQuery.fn.extend( {\\n\\tfind: function( selector ) {\\n\\t\\tvar i, ret,\\n\\t\\t\\tlen = this.length,\\n\\t\\t\\tself = this;\\n\\n\\t\\tif ( typeof selector !== \\\"string\\\" ) {\\n\\t\\t\\treturn this.pushStack( jQuery( selector ).filter( function() {\\n\\t\\t\\t\\tfor ( i = 0; i < len; i++ ) {\\n\\t\\t\\t\\t\\tif ( jQuery.contains( self[ i ], this ) ) {\\n\\t\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t} ) );\\n\\t\\t}\\n\\n\\t\\tret = this.pushStack( [] );\\n\\n\\t\\tfor ( i = 0; i < len; i++ ) {\\n\\t\\t\\tjQuery.find( selector, self[ i ], ret );\\n\\t\\t}\\n\\n\\t\\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\\n\\t},\\n\\tfilter: function( selector ) {\\n\\t\\treturn this.pushStack( winnow( this, selector || [], false ) );\\n\\t},\\n\\tnot: function( selector ) {\\n\\t\\treturn this.pushStack( winnow( this, selector || [], true ) );\\n\\t},\\n\\tis: function( selector ) {\\n\\t\\treturn !!winnow(\\n\\t\\t\\tthis,\\n\\n\\t\\t\\t// If this is a positional/relative selector, check membership in the returned set\\n\\t\\t\\t// so $(\\\"p:first\\\").is(\\\"p:last\\\") won't return true for a doc with two \\\"p\\\".\\n\\t\\t\\ttypeof selector === \\\"string\\\" && rneedsContext.test( selector ) ?\\n\\t\\t\\t\\tjQuery( selector ) :\\n\\t\\t\\t\\tselector || [],\\n\\t\\t\\tfalse\\n\\t\\t).length;\\n\\t}\\n} );\\n\\n\\n// Initialize a jQuery object\\n\\n\\n// A central reference to the root jQuery(document)\\nvar rootjQuery,\\n\\n\\t// A simple way to check for HTML strings\\n\\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\\n\\t// Strict HTML recognition (trac-11290: must start with <)\\n\\t// Shortcut simple #id case for speed\\n\\trquickExpr = /^(?:\\\\s*(<[\\\\w\\\\W]+>)[^>]*|#([\\\\w-]+))$/,\\n\\n\\tinit = jQuery.fn.init = function( selector, context, root ) {\\n\\t\\tvar match, elem;\\n\\n\\t\\t// HANDLE: $(\\\"\\\"), $(null), $(undefined), $(false)\\n\\t\\tif ( !selector ) {\\n\\t\\t\\treturn this;\\n\\t\\t}\\n\\n\\t\\t// Method init() accepts an alternate rootjQuery\\n\\t\\t// so migrate can support jQuery.sub (gh-2101)\\n\\t\\troot = root || rootjQuery;\\n\\n\\t\\t// Handle HTML strings\\n\\t\\tif ( typeof selector === \\\"string\\\" ) {\\n\\t\\t\\tif ( selector[ 0 ] === \\\"<\\\" &&\\n\\t\\t\\t\\tselector[ selector.length - 1 ] === \\\">\\\" &&\\n\\t\\t\\t\\tselector.length >= 3 ) {\\n\\n\\t\\t\\t\\t// Assume that strings that start and end with <> are HTML and skip the regex check\\n\\t\\t\\t\\tmatch = [ null, selector, null ];\\n\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tmatch = rquickExpr.exec( selector );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Match html or make sure no context is specified for #id\\n\\t\\t\\tif ( match && ( match[ 1 ] || !context ) ) {\\n\\n\\t\\t\\t\\t// HANDLE: $(html) -> $(array)\\n\\t\\t\\t\\tif ( match[ 1 ] ) {\\n\\t\\t\\t\\t\\tcontext = context instanceof jQuery ? context[ 0 ] : context;\\n\\n\\t\\t\\t\\t\\t// Option to run scripts is true for back-compat\\n\\t\\t\\t\\t\\t// Intentionally let the error be thrown if parseHTML is not present\\n\\t\\t\\t\\t\\tjQuery.merge( this, jQuery.parseHTML(\\n\\t\\t\\t\\t\\t\\tmatch[ 1 ],\\n\\t\\t\\t\\t\\t\\tcontext && context.nodeType ? context.ownerDocument || context : document,\\n\\t\\t\\t\\t\\t\\ttrue\\n\\t\\t\\t\\t\\t) );\\n\\n\\t\\t\\t\\t\\t// HANDLE: $(html, props)\\n\\t\\t\\t\\t\\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\\n\\t\\t\\t\\t\\t\\tfor ( match in context ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t// Properties of context are called as methods if possible\\n\\t\\t\\t\\t\\t\\t\\tif ( isFunction( this[ match ] ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tthis[ match ]( context[ match ] );\\n\\n\\t\\t\\t\\t\\t\\t\\t// ...and otherwise set as attributes\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tthis.attr( match, context[ match ] );\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\treturn this;\\n\\n\\t\\t\\t\\t// HANDLE: $(#id)\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\telem = document.getElementById( match[ 2 ] );\\n\\n\\t\\t\\t\\t\\tif ( elem ) {\\n\\n\\t\\t\\t\\t\\t\\t// Inject the element directly into the jQuery object\\n\\t\\t\\t\\t\\t\\tthis[ 0 ] = elem;\\n\\t\\t\\t\\t\\t\\tthis.length = 1;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\treturn this;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t// HANDLE: $(expr, $(...))\\n\\t\\t\\t} else if ( !context || context.jquery ) {\\n\\t\\t\\t\\treturn ( context || root ).find( selector );\\n\\n\\t\\t\\t// HANDLE: $(expr, context)\\n\\t\\t\\t// (which is just equivalent to: $(context).find(expr)\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn this.constructor( context ).find( selector );\\n\\t\\t\\t}\\n\\n\\t\\t// HANDLE: $(DOMElement)\\n\\t\\t} else if ( selector.nodeType ) {\\n\\t\\t\\tthis[ 0 ] = selector;\\n\\t\\t\\tthis.length = 1;\\n\\t\\t\\treturn this;\\n\\n\\t\\t// HANDLE: $(function)\\n\\t\\t// Shortcut for document ready\\n\\t\\t} else if ( isFunction( selector ) ) {\\n\\t\\t\\treturn root.ready !== undefined ?\\n\\t\\t\\t\\troot.ready( selector ) :\\n\\n\\t\\t\\t\\t// Execute immediately if ready is not present\\n\\t\\t\\t\\tselector( jQuery );\\n\\t\\t}\\n\\n\\t\\treturn jQuery.makeArray( selector, this );\\n\\t};\\n\\n// Give the init function the jQuery prototype for later instantiation\\ninit.prototype = jQuery.fn;\\n\\n// Initialize central reference\\nrootjQuery = jQuery( document );\\n\\n\\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\\n\\n\\t// Methods guaranteed to produce a unique set when starting from a unique set\\n\\tguaranteedUnique = {\\n\\t\\tchildren: true,\\n\\t\\tcontents: true,\\n\\t\\tnext: true,\\n\\t\\tprev: true\\n\\t};\\n\\njQuery.fn.extend( {\\n\\thas: function( target ) {\\n\\t\\tvar targets = jQuery( target, this ),\\n\\t\\t\\tl = targets.length;\\n\\n\\t\\treturn this.filter( function() {\\n\\t\\t\\tvar i = 0;\\n\\t\\t\\tfor ( ; i < l; i++ ) {\\n\\t\\t\\t\\tif ( jQuery.contains( this, targets[ i ] ) ) {\\n\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t} );\\n\\t},\\n\\n\\tclosest: function( selectors, context ) {\\n\\t\\tvar cur,\\n\\t\\t\\ti = 0,\\n\\t\\t\\tl = this.length,\\n\\t\\t\\tmatched = [],\\n\\t\\t\\ttargets = typeof selectors !== \\\"string\\\" && jQuery( selectors );\\n\\n\\t\\t// Positional selectors never match, since there's no _selection_ context\\n\\t\\tif ( !rneedsContext.test( selectors ) ) {\\n\\t\\t\\tfor ( ; i < l; i++ ) {\\n\\t\\t\\t\\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\\n\\n\\t\\t\\t\\t\\t// Always skip document fragments\\n\\t\\t\\t\\t\\tif ( cur.nodeType < 11 && ( targets ?\\n\\t\\t\\t\\t\\t\\ttargets.index( cur ) > -1 :\\n\\n\\t\\t\\t\\t\\t\\t// Don't pass non-elements to jQuery#find\\n\\t\\t\\t\\t\\t\\tcur.nodeType === 1 &&\\n\\t\\t\\t\\t\\t\\t\\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\\n\\n\\t\\t\\t\\t\\t\\tmatched.push( cur );\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\\n\\t},\\n\\n\\t// Determine the position of an element within the set\\n\\tindex: function( elem ) {\\n\\n\\t\\t// No argument, return index in parent\\n\\t\\tif ( !elem ) {\\n\\t\\t\\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\\n\\t\\t}\\n\\n\\t\\t// Index in selector\\n\\t\\tif ( typeof elem === \\\"string\\\" ) {\\n\\t\\t\\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\\n\\t\\t}\\n\\n\\t\\t// Locate the position of the desired element\\n\\t\\treturn indexOf.call( this,\\n\\n\\t\\t\\t// If it receives a jQuery object, the first element is used\\n\\t\\t\\telem.jquery ? elem[ 0 ] : elem\\n\\t\\t);\\n\\t},\\n\\n\\tadd: function( selector, context ) {\\n\\t\\treturn this.pushStack(\\n\\t\\t\\tjQuery.uniqueSort(\\n\\t\\t\\t\\tjQuery.merge( this.get(), jQuery( selector, context ) )\\n\\t\\t\\t)\\n\\t\\t);\\n\\t},\\n\\n\\taddBack: function( selector ) {\\n\\t\\treturn this.add( selector == null ?\\n\\t\\t\\tthis.prevObject : this.prevObject.filter( selector )\\n\\t\\t);\\n\\t}\\n} );\\n\\nfunction sibling( cur, dir ) {\\n\\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\\n\\treturn cur;\\n}\\n\\njQuery.each( {\\n\\tparent: function( elem ) {\\n\\t\\tvar parent = elem.parentNode;\\n\\t\\treturn parent && parent.nodeType !== 11 ? parent : null;\\n\\t},\\n\\tparents: function( elem ) {\\n\\t\\treturn dir( elem, \\\"parentNode\\\" );\\n\\t},\\n\\tparentsUntil: function( elem, _i, until ) {\\n\\t\\treturn dir( elem, \\\"parentNode\\\", until );\\n\\t},\\n\\tnext: function( elem ) {\\n\\t\\treturn sibling( elem, \\\"nextSibling\\\" );\\n\\t},\\n\\tprev: function( elem ) {\\n\\t\\treturn sibling( elem, \\\"previousSibling\\\" );\\n\\t},\\n\\tnextAll: function( elem ) {\\n\\t\\treturn dir( elem, \\\"nextSibling\\\" );\\n\\t},\\n\\tprevAll: function( elem ) {\\n\\t\\treturn dir( elem, \\\"previousSibling\\\" );\\n\\t},\\n\\tnextUntil: function( elem, _i, until ) {\\n\\t\\treturn dir( elem, \\\"nextSibling\\\", until );\\n\\t},\\n\\tprevUntil: function( elem, _i, until ) {\\n\\t\\treturn dir( elem, \\\"previousSibling\\\", until );\\n\\t},\\n\\tsiblings: function( elem ) {\\n\\t\\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\\n\\t},\\n\\tchildren: function( elem ) {\\n\\t\\treturn siblings( elem.firstChild );\\n\\t},\\n\\tcontents: function( elem ) {\\n\\t\\tif ( elem.contentDocument != null &&\\n\\n\\t\\t\\t// Support: IE 11+\\n\\t\\t\\t// <object> elements with no `data` attribute has an object\\n\\t\\t\\t// `contentDocument` with a `null` prototype.\\n\\t\\t\\tgetProto( elem.contentDocument ) ) {\\n\\n\\t\\t\\treturn elem.contentDocument;\\n\\t\\t}\\n\\n\\t\\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\\n\\t\\t// Treat the template element as a regular one in browsers that\\n\\t\\t// don't support it.\\n\\t\\tif ( nodeName( elem, \\\"template\\\" ) ) {\\n\\t\\t\\telem = elem.content || elem;\\n\\t\\t}\\n\\n\\t\\treturn jQuery.merge( [], elem.childNodes );\\n\\t}\\n}, function( name, fn ) {\\n\\tjQuery.fn[ name ] = function( until, selector ) {\\n\\t\\tvar matched = jQuery.map( this, fn, until );\\n\\n\\t\\tif ( name.slice( -5 ) !== \\\"Until\\\" ) {\\n\\t\\t\\tselector = until;\\n\\t\\t}\\n\\n\\t\\tif ( selector && typeof selector === \\\"string\\\" ) {\\n\\t\\t\\tmatched = jQuery.filter( selector, matched );\\n\\t\\t}\\n\\n\\t\\tif ( this.length > 1 ) {\\n\\n\\t\\t\\t// Remove duplicates\\n\\t\\t\\tif ( !guaranteedUnique[ name ] ) {\\n\\t\\t\\t\\tjQuery.uniqueSort( matched );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Reverse order for parents* and prev-derivatives\\n\\t\\t\\tif ( rparentsprev.test( name ) ) {\\n\\t\\t\\t\\tmatched.reverse();\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\treturn this.pushStack( matched );\\n\\t};\\n} );\\nvar rnothtmlwhite = ( /[^\\\\x20\\\\t\\\\r\\\\n\\\\f]+/g );\\n\\n\\n\\n// Convert String-formatted options into Object-formatted ones\\nfunction createOptions( options ) {\\n\\tvar object = {};\\n\\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\\n\\t\\tobject[ flag ] = true;\\n\\t} );\\n\\treturn object;\\n}\\n\\n/*\\n * Create a callback list using the following parameters:\\n *\\n *\\toptions: an optional list of space-separated options that will change how\\n *\\t\\t\\tthe callback list behaves or a more traditional option object\\n *\\n * By default a callback list will act like an event callback list and can be\\n * \\\"fired\\\" multiple times.\\n *\\n * Possible options:\\n *\\n *\\tonce:\\t\\t\\twill ensure the callback list can only be fired once (like a Deferred)\\n *\\n *\\tmemory:\\t\\t\\twill keep track of previous values and will call any callback added\\n *\\t\\t\\t\\t\\tafter the list has been fired right away with the latest \\\"memorized\\\"\\n *\\t\\t\\t\\t\\tvalues (like a Deferred)\\n *\\n *\\tunique:\\t\\t\\twill ensure a callback can only be added once (no duplicate in the list)\\n *\\n *\\tstopOnFalse:\\tinterrupt callings when a callback returns false\\n *\\n */\\njQuery.Callbacks = function( options ) {\\n\\n\\t// Convert options from String-formatted to Object-formatted if needed\\n\\t// (we check in cache first)\\n\\toptions = typeof options === \\\"string\\\" ?\\n\\t\\tcreateOptions( options ) :\\n\\t\\tjQuery.extend( {}, options );\\n\\n\\tvar // Flag to know if list is currently firing\\n\\t\\tfiring,\\n\\n\\t\\t// Last fire value for non-forgettable lists\\n\\t\\tmemory,\\n\\n\\t\\t// Flag to know if list was already fired\\n\\t\\tfired,\\n\\n\\t\\t// Flag to prevent firing\\n\\t\\tlocked,\\n\\n\\t\\t// Actual callback list\\n\\t\\tlist = [],\\n\\n\\t\\t// Queue of execution data for repeatable lists\\n\\t\\tqueue = [],\\n\\n\\t\\t// Index of currently firing callback (modified by add/remove as needed)\\n\\t\\tfiringIndex = -1,\\n\\n\\t\\t// Fire callbacks\\n\\t\\tfire = function() {\\n\\n\\t\\t\\t// Enforce single-firing\\n\\t\\t\\tlocked = locked || options.once;\\n\\n\\t\\t\\t// Execute callbacks for all pending executions,\\n\\t\\t\\t// respecting firingIndex overrides and runtime changes\\n\\t\\t\\tfired = firing = true;\\n\\t\\t\\tfor ( ; queue.length; firingIndex = -1 ) {\\n\\t\\t\\t\\tmemory = queue.shift();\\n\\t\\t\\t\\twhile ( ++firingIndex < list.length ) {\\n\\n\\t\\t\\t\\t\\t// Run callback and check for early termination\\n\\t\\t\\t\\t\\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\\n\\t\\t\\t\\t\\t\\toptions.stopOnFalse ) {\\n\\n\\t\\t\\t\\t\\t\\t// Jump to end and forget the data so .add doesn't re-fire\\n\\t\\t\\t\\t\\t\\tfiringIndex = list.length;\\n\\t\\t\\t\\t\\t\\tmemory = false;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Forget the data if we're done with it\\n\\t\\t\\tif ( !options.memory ) {\\n\\t\\t\\t\\tmemory = false;\\n\\t\\t\\t}\\n\\n\\t\\t\\tfiring = false;\\n\\n\\t\\t\\t// Clean up if we're done firing for good\\n\\t\\t\\tif ( locked ) {\\n\\n\\t\\t\\t\\t// Keep an empty list if we have data for future add calls\\n\\t\\t\\t\\tif ( memory ) {\\n\\t\\t\\t\\t\\tlist = [];\\n\\n\\t\\t\\t\\t// Otherwise, this object is spent\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tlist = \\\"\\\";\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\t// Actual Callbacks object\\n\\t\\tself = {\\n\\n\\t\\t\\t// Add a callback or a collection of callbacks to the list\\n\\t\\t\\tadd: function() {\\n\\t\\t\\t\\tif ( list ) {\\n\\n\\t\\t\\t\\t\\t// If we have memory from a past run, we should fire after adding\\n\\t\\t\\t\\t\\tif ( memory && !firing ) {\\n\\t\\t\\t\\t\\t\\tfiringIndex = list.length - 1;\\n\\t\\t\\t\\t\\t\\tqueue.push( memory );\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t( function add( args ) {\\n\\t\\t\\t\\t\\t\\tjQuery.each( args, function( _, arg ) {\\n\\t\\t\\t\\t\\t\\t\\tif ( isFunction( arg ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tif ( !options.unique || !self.has( arg ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tlist.push( arg );\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t} else if ( arg && arg.length && toType( arg ) !== \\\"string\\\" ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t// Inspect recursively\\n\\t\\t\\t\\t\\t\\t\\t\\tadd( arg );\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t} );\\n\\t\\t\\t\\t\\t} )( arguments );\\n\\n\\t\\t\\t\\t\\tif ( memory && !firing ) {\\n\\t\\t\\t\\t\\t\\tfire();\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn this;\\n\\t\\t\\t},\\n\\n\\t\\t\\t// Remove a callback from the list\\n\\t\\t\\tremove: function() {\\n\\t\\t\\t\\tjQuery.each( arguments, function( _, arg ) {\\n\\t\\t\\t\\t\\tvar index;\\n\\t\\t\\t\\t\\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\\n\\t\\t\\t\\t\\t\\tlist.splice( index, 1 );\\n\\n\\t\\t\\t\\t\\t\\t// Handle firing indexes\\n\\t\\t\\t\\t\\t\\tif ( index <= firingIndex ) {\\n\\t\\t\\t\\t\\t\\t\\tfiringIndex--;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} );\\n\\t\\t\\t\\treturn this;\\n\\t\\t\\t},\\n\\n\\t\\t\\t// Check if a given callback is in the list.\\n\\t\\t\\t// If no argument is given, return whether or not list has callbacks attached.\\n\\t\\t\\thas: function( fn ) {\\n\\t\\t\\t\\treturn fn ?\\n\\t\\t\\t\\t\\tjQuery.inArray( fn, list ) > -1 :\\n\\t\\t\\t\\t\\tlist.length > 0;\\n\\t\\t\\t},\\n\\n\\t\\t\\t// Remove all callbacks from the list\\n\\t\\t\\tempty: function() {\\n\\t\\t\\t\\tif ( list ) {\\n\\t\\t\\t\\t\\tlist = [];\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn this;\\n\\t\\t\\t},\\n\\n\\t\\t\\t// Disable .fire and .add\\n\\t\\t\\t// Abort any current/pending executions\\n\\t\\t\\t// Clear all callbacks and values\\n\\t\\t\\tdisable: function() {\\n\\t\\t\\t\\tlocked = queue = [];\\n\\t\\t\\t\\tlist = memory = \\\"\\\";\\n\\t\\t\\t\\treturn this;\\n\\t\\t\\t},\\n\\t\\t\\tdisabled: function() {\\n\\t\\t\\t\\treturn !list;\\n\\t\\t\\t},\\n\\n\\t\\t\\t// Disable .fire\\n\\t\\t\\t// Also disable .add unless we have memory (since it would have no effect)\\n\\t\\t\\t// Abort any pending executions\\n\\t\\t\\tlock: function() {\\n\\t\\t\\t\\tlocked = queue = [];\\n\\t\\t\\t\\tif ( !memory && !firing ) {\\n\\t\\t\\t\\t\\tlist = memory = \\\"\\\";\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn this;\\n\\t\\t\\t},\\n\\t\\t\\tlocked: function() {\\n\\t\\t\\t\\treturn !!locked;\\n\\t\\t\\t},\\n\\n\\t\\t\\t// Call all callbacks with the given context and arguments\\n\\t\\t\\tfireWith: function( context, args ) {\\n\\t\\t\\t\\tif ( !locked ) {\\n\\t\\t\\t\\t\\targs = args || [];\\n\\t\\t\\t\\t\\targs = [ context, args.slice ? args.slice() : args ];\\n\\t\\t\\t\\t\\tqueue.push( args );\\n\\t\\t\\t\\t\\tif ( !firing ) {\\n\\t\\t\\t\\t\\t\\tfire();\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn this;\\n\\t\\t\\t},\\n\\n\\t\\t\\t// Call all the callbacks with the given arguments\\n\\t\\t\\tfire: function() {\\n\\t\\t\\t\\tself.fireWith( this, arguments );\\n\\t\\t\\t\\treturn this;\\n\\t\\t\\t},\\n\\n\\t\\t\\t// To know if the callbacks have already been called at least once\\n\\t\\t\\tfired: function() {\\n\\t\\t\\t\\treturn !!fired;\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\treturn self;\\n};\\n\\n\\nfunction Identity( v ) {\\n\\treturn v;\\n}\\nfunction Thrower( ex ) {\\n\\tthrow ex;\\n}\\n\\nfunction adoptValue( value, resolve, reject, noValue ) {\\n\\tvar method;\\n\\n\\ttry {\\n\\n\\t\\t// Check for promise aspect first to privilege synchronous behavior\\n\\t\\tif ( value && isFunction( ( method = value.promise ) ) ) {\\n\\t\\t\\tmethod.call( value ).done( resolve ).fail( reject );\\n\\n\\t\\t// Other thenables\\n\\t\\t} else if ( value && isFunction( ( method = value.then ) ) ) {\\n\\t\\t\\tmethod.call( value, resolve, reject );\\n\\n\\t\\t// Other non-thenables\\n\\t\\t} else {\\n\\n\\t\\t\\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\\n\\t\\t\\t// * false: [ value ].slice( 0 ) => resolve( value )\\n\\t\\t\\t// * true: [ value ].slice( 1 ) => resolve()\\n\\t\\t\\tresolve.apply( undefined, [ value ].slice( noValue ) );\\n\\t\\t}\\n\\n\\t// For Promises/A+, convert exceptions into rejections\\n\\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\\n\\t// Deferred#then to conditionally suppress rejection.\\n\\t} catch ( value ) {\\n\\n\\t\\t// Support: Android 4.0 only\\n\\t\\t// Strict mode functions invoked without .call/.apply get global-object context\\n\\t\\treject.apply( undefined, [ value ] );\\n\\t}\\n}\\n\\njQuery.extend( {\\n\\n\\tDeferred: function( func ) {\\n\\t\\tvar tuples = [\\n\\n\\t\\t\\t\\t// action, add listener, callbacks,\\n\\t\\t\\t\\t// ... .then handlers, argument index, [final state]\\n\\t\\t\\t\\t[ \\\"notify\\\", \\\"progress\\\", jQuery.Callbacks( \\\"memory\\\" ),\\n\\t\\t\\t\\t\\tjQuery.Callbacks( \\\"memory\\\" ), 2 ],\\n\\t\\t\\t\\t[ \\\"resolve\\\", \\\"done\\\", jQuery.Callbacks( \\\"once memory\\\" ),\\n\\t\\t\\t\\t\\tjQuery.Callbacks( \\\"once memory\\\" ), 0, \\\"resolved\\\" ],\\n\\t\\t\\t\\t[ \\\"reject\\\", \\\"fail\\\", jQuery.Callbacks( \\\"once memory\\\" ),\\n\\t\\t\\t\\t\\tjQuery.Callbacks( \\\"once memory\\\" ), 1, \\\"rejected\\\" ]\\n\\t\\t\\t],\\n\\t\\t\\tstate = \\\"pending\\\",\\n\\t\\t\\tpromise = {\\n\\t\\t\\t\\tstate: function() {\\n\\t\\t\\t\\t\\treturn state;\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\talways: function() {\\n\\t\\t\\t\\t\\tdeferred.done( arguments ).fail( arguments );\\n\\t\\t\\t\\t\\treturn this;\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\\"catch\\\": function( fn ) {\\n\\t\\t\\t\\t\\treturn promise.then( null, fn );\\n\\t\\t\\t\\t},\\n\\n\\t\\t\\t\\t// Keep pipe for back-compat\\n\\t\\t\\t\\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\\n\\t\\t\\t\\t\\tvar fns = arguments;\\n\\n\\t\\t\\t\\t\\treturn jQuery.Deferred( function( newDefer ) {\\n\\t\\t\\t\\t\\t\\tjQuery.each( tuples, function( _i, tuple ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\\n\\t\\t\\t\\t\\t\\t\\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\\n\\n\\t\\t\\t\\t\\t\\t\\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\\n\\t\\t\\t\\t\\t\\t\\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\\n\\t\\t\\t\\t\\t\\t\\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\\n\\t\\t\\t\\t\\t\\t\\tdeferred[ tuple[ 1 ] ]( function() {\\n\\t\\t\\t\\t\\t\\t\\t\\tvar returned = fn && fn.apply( this, arguments );\\n\\t\\t\\t\\t\\t\\t\\t\\tif ( returned && isFunction( returned.promise ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\treturned.promise()\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t.progress( newDefer.notify )\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t.done( newDefer.resolve )\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t.fail( newDefer.reject );\\n\\t\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tnewDefer[ tuple[ 0 ] + \\\"With\\\" ](\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tthis,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tfn ? [ returned ] : arguments\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t} );\\n\\t\\t\\t\\t\\t\\t} );\\n\\t\\t\\t\\t\\t\\tfns = null;\\n\\t\\t\\t\\t\\t} ).promise();\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\tthen: function( onFulfilled, onRejected, onProgress ) {\\n\\t\\t\\t\\t\\tvar maxDepth = 0;\\n\\t\\t\\t\\t\\tfunction resolve( depth, deferred, handler, special ) {\\n\\t\\t\\t\\t\\t\\treturn function() {\\n\\t\\t\\t\\t\\t\\t\\tvar that = this,\\n\\t\\t\\t\\t\\t\\t\\t\\targs = arguments,\\n\\t\\t\\t\\t\\t\\t\\t\\tmightThrow = function() {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tvar returned, then;\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// Support: Promises/A+ section 2.3.3.3.3\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// https://promisesaplus.com/#point-59\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// Ignore double-resolution attempts\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tif ( depth < maxDepth ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\treturned = handler.apply( that, args );\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// Support: Promises/A+ section 2.3.1\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// https://promisesaplus.com/#point-48\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tif ( returned === deferred.promise() ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tthrow new TypeError( \\\"Thenable self-resolution\\\" );\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// Support: Promises/A+ sections 2.3.3.1, 3.5\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// https://promisesaplus.com/#point-54\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// https://promisesaplus.com/#point-75\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// Retrieve `then` only once\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tthen = returned &&\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// Support: Promises/A+ section 2.3.4\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// https://promisesaplus.com/#point-64\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// Only check objects and functions for thenability\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t( typeof returned === \\\"object\\\" ||\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\ttypeof returned === \\\"function\\\" ) &&\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\treturned.then;\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// Handle a returned thenable\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tif ( isFunction( then ) ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// Special processors (notify) just wait for resolution\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tif ( special ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tthen.call(\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\treturned,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tresolve( maxDepth, deferred, Identity, special ),\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tresolve( maxDepth, deferred, Thrower, special )\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t);\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// Normal processors (resolve) also hook into progress\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t} else {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// ...and disregard older resolution values\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tmaxDepth++;\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tthen.call(\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\treturned,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tresolve( maxDepth, deferred, Identity, special ),\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tresolve( maxDepth, deferred, Thrower, special ),\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tresolve( maxDepth, deferred, Identity,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdeferred.notifyWith )\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// Handle all other returned values\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t} else {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// Only substitute handlers pass on context\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// and multiple values (non-spec behavior)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tif ( handler !== Identity ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tthat = undefined;\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\targs = [ returned ];\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// Process the value(s)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// Default process is resolve\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t( special || deferred.resolveWith )( that, args );\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t},\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t// Only normal processors (resolve) catch and reject exceptions\\n\\t\\t\\t\\t\\t\\t\\t\\tprocess = special ?\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tmightThrow :\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tfunction() {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tmightThrow();\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t} catch ( e ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tif ( jQuery.Deferred.exceptionHook ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tjQuery.Deferred.exceptionHook( e,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tprocess.error );\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// Support: Promises/A+ section 2.3.3.3.4.1\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// https://promisesaplus.com/#point-61\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// Ignore post-resolution exceptions\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tif ( depth + 1 >= maxDepth ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// Only substitute handlers pass on context\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// and multiple values (non-spec behavior)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tif ( handler !== Thrower ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tthat = undefined;\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\targs = [ e ];\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdeferred.rejectWith( that, args );\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t};\\n\\n\\t\\t\\t\\t\\t\\t\\t// Support: Promises/A+ section 2.3.3.3.1\\n\\t\\t\\t\\t\\t\\t\\t// https://promisesaplus.com/#point-57\\n\\t\\t\\t\\t\\t\\t\\t// Re-resolve promises immediately to dodge false rejection from\\n\\t\\t\\t\\t\\t\\t\\t// subsequent errors\\n\\t\\t\\t\\t\\t\\t\\tif ( depth ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tprocess();\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t// Call an optional hook to record the error, in case of exception\\n\\t\\t\\t\\t\\t\\t\\t\\t// since it's otherwise lost when execution goes async\\n\\t\\t\\t\\t\\t\\t\\t\\tif ( jQuery.Deferred.getErrorHook ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tprocess.error = jQuery.Deferred.getErrorHook();\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t// The deprecated alias of the above. While the name suggests\\n\\t\\t\\t\\t\\t\\t\\t\\t// returning the stack, not an error instance, jQuery just passes\\n\\t\\t\\t\\t\\t\\t\\t\\t// it directly to `console.warn` so both will work; an instance\\n\\t\\t\\t\\t\\t\\t\\t\\t// just better cooperates with source maps.\\n\\t\\t\\t\\t\\t\\t\\t\\t} else if ( jQuery.Deferred.getStackHook ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tprocess.error = jQuery.Deferred.getStackHook();\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\twindow.setTimeout( process );\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\treturn jQuery.Deferred( function( newDefer ) {\\n\\n\\t\\t\\t\\t\\t\\t// progress_handlers.add( ... )\\n\\t\\t\\t\\t\\t\\ttuples[ 0 ][ 3 ].add(\\n\\t\\t\\t\\t\\t\\t\\tresolve(\\n\\t\\t\\t\\t\\t\\t\\t\\t0,\\n\\t\\t\\t\\t\\t\\t\\t\\tnewDefer,\\n\\t\\t\\t\\t\\t\\t\\t\\tisFunction( onProgress ) ?\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tonProgress :\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tIdentity,\\n\\t\\t\\t\\t\\t\\t\\t\\tnewDefer.notifyWith\\n\\t\\t\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t\\t);\\n\\n\\t\\t\\t\\t\\t\\t// fulfilled_handlers.add( ... )\\n\\t\\t\\t\\t\\t\\ttuples[ 1 ][ 3 ].add(\\n\\t\\t\\t\\t\\t\\t\\tresolve(\\n\\t\\t\\t\\t\\t\\t\\t\\t0,\\n\\t\\t\\t\\t\\t\\t\\t\\tnewDefer,\\n\\t\\t\\t\\t\\t\\t\\t\\tisFunction( onFulfilled ) ?\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tonFulfilled :\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tIdentity\\n\\t\\t\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t\\t);\\n\\n\\t\\t\\t\\t\\t\\t// rejected_handlers.add( ... )\\n\\t\\t\\t\\t\\t\\ttuples[ 2 ][ 3 ].add(\\n\\t\\t\\t\\t\\t\\t\\tresolve(\\n\\t\\t\\t\\t\\t\\t\\t\\t0,\\n\\t\\t\\t\\t\\t\\t\\t\\tnewDefer,\\n\\t\\t\\t\\t\\t\\t\\t\\tisFunction( onRejected ) ?\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tonRejected :\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tThrower\\n\\t\\t\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t} ).promise();\\n\\t\\t\\t\\t},\\n\\n\\t\\t\\t\\t// Get a promise for this deferred\\n\\t\\t\\t\\t// If obj is provided, the promise aspect is added to the object\\n\\t\\t\\t\\tpromise: function( obj ) {\\n\\t\\t\\t\\t\\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\\n\\t\\t\\t\\t}\\n\\t\\t\\t},\\n\\t\\t\\tdeferred = {};\\n\\n\\t\\t// Add list-specific methods\\n\\t\\tjQuery.each( tuples, function( i, tuple ) {\\n\\t\\t\\tvar list = tuple[ 2 ],\\n\\t\\t\\t\\tstateString = tuple[ 5 ];\\n\\n\\t\\t\\t// promise.progress = list.add\\n\\t\\t\\t// promise.done = list.add\\n\\t\\t\\t// promise.fail = list.add\\n\\t\\t\\tpromise[ tuple[ 1 ] ] = list.add;\\n\\n\\t\\t\\t// Handle state\\n\\t\\t\\tif ( stateString ) {\\n\\t\\t\\t\\tlist.add(\\n\\t\\t\\t\\t\\tfunction() {\\n\\n\\t\\t\\t\\t\\t\\t// state = \\\"resolved\\\" (i.e., fulfilled)\\n\\t\\t\\t\\t\\t\\t// state = \\\"rejected\\\"\\n\\t\\t\\t\\t\\t\\tstate = stateString;\\n\\t\\t\\t\\t\\t},\\n\\n\\t\\t\\t\\t\\t// rejected_callbacks.disable\\n\\t\\t\\t\\t\\t// fulfilled_callbacks.disable\\n\\t\\t\\t\\t\\ttuples[ 3 - i ][ 2 ].disable,\\n\\n\\t\\t\\t\\t\\t// rejected_handlers.disable\\n\\t\\t\\t\\t\\t// fulfilled_handlers.disable\\n\\t\\t\\t\\t\\ttuples[ 3 - i ][ 3 ].disable,\\n\\n\\t\\t\\t\\t\\t// progress_callbacks.lock\\n\\t\\t\\t\\t\\ttuples[ 0 ][ 2 ].lock,\\n\\n\\t\\t\\t\\t\\t// progress_handlers.lock\\n\\t\\t\\t\\t\\ttuples[ 0 ][ 3 ].lock\\n\\t\\t\\t\\t);\\n\\t\\t\\t}\\n\\n\\t\\t\\t// progress_handlers.fire\\n\\t\\t\\t// fulfilled_handlers.fire\\n\\t\\t\\t// rejected_handlers.fire\\n\\t\\t\\tlist.add( tuple[ 3 ].fire );\\n\\n\\t\\t\\t// deferred.notify = function() { deferred.notifyWith(...) }\\n\\t\\t\\t// deferred.resolve = function() { deferred.resolveWith(...) }\\n\\t\\t\\t// deferred.reject = function() { deferred.rejectWith(...) }\\n\\t\\t\\tdeferred[ tuple[ 0 ] ] = function() {\\n\\t\\t\\t\\tdeferred[ tuple[ 0 ] + \\\"With\\\" ]( this === deferred ? undefined : this, arguments );\\n\\t\\t\\t\\treturn this;\\n\\t\\t\\t};\\n\\n\\t\\t\\t// deferred.notifyWith = list.fireWith\\n\\t\\t\\t// deferred.resolveWith = list.fireWith\\n\\t\\t\\t// deferred.rejectWith = list.fireWith\\n\\t\\t\\tdeferred[ tuple[ 0 ] + \\\"With\\\" ] = list.fireWith;\\n\\t\\t} );\\n\\n\\t\\t// Make the deferred a promise\\n\\t\\tpromise.promise( deferred );\\n\\n\\t\\t// Call given func if any\\n\\t\\tif ( func ) {\\n\\t\\t\\tfunc.call( deferred, deferred );\\n\\t\\t}\\n\\n\\t\\t// All done!\\n\\t\\treturn deferred;\\n\\t},\\n\\n\\t// Deferred helper\\n\\twhen: function( singleValue ) {\\n\\t\\tvar\\n\\n\\t\\t\\t// count of uncompleted subordinates\\n\\t\\t\\tremaining = arguments.length,\\n\\n\\t\\t\\t// count of unprocessed arguments\\n\\t\\t\\ti = remaining,\\n\\n\\t\\t\\t// subordinate fulfillment data\\n\\t\\t\\tresolveContexts = Array( i ),\\n\\t\\t\\tresolveValues = slice.call( arguments ),\\n\\n\\t\\t\\t// the primary Deferred\\n\\t\\t\\tprimary = jQuery.Deferred(),\\n\\n\\t\\t\\t// subordinate callback factory\\n\\t\\t\\tupdateFunc = function( i ) {\\n\\t\\t\\t\\treturn function( value ) {\\n\\t\\t\\t\\t\\tresolveContexts[ i ] = this;\\n\\t\\t\\t\\t\\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\\n\\t\\t\\t\\t\\tif ( !( --remaining ) ) {\\n\\t\\t\\t\\t\\t\\tprimary.resolveWith( resolveContexts, resolveValues );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t};\\n\\t\\t\\t};\\n\\n\\t\\t// Single- and empty arguments are adopted like Promise.resolve\\n\\t\\tif ( remaining <= 1 ) {\\n\\t\\t\\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\\n\\t\\t\\t\\t!remaining );\\n\\n\\t\\t\\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\\n\\t\\t\\tif ( primary.state() === \\\"pending\\\" ||\\n\\t\\t\\t\\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\\n\\n\\t\\t\\t\\treturn primary.then();\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Multiple arguments are aggregated like Promise.all array elements\\n\\t\\twhile ( i-- ) {\\n\\t\\t\\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\\n\\t\\t}\\n\\n\\t\\treturn primary.promise();\\n\\t}\\n} );\\n\\n\\n// These usually indicate a programmer mistake during development,\\n// warn about them ASAP rather than swallowing them by default.\\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\\n\\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\\n// captured before the async barrier to get the original error cause\\n// which may otherwise be hidden.\\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\\n\\n\\t// Support: IE 8 - 9 only\\n\\t// Console exists when dev tools are open, which can happen at any time\\n\\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\\n\\t\\twindow.console.warn( \\\"jQuery.Deferred exception: \\\" + error.message,\\n\\t\\t\\terror.stack, asyncError );\\n\\t}\\n};\\n\\n\\n\\n\\njQuery.readyException = function( error ) {\\n\\twindow.setTimeout( function() {\\n\\t\\tthrow error;\\n\\t} );\\n};\\n\\n\\n\\n\\n// The deferred used on DOM ready\\nvar readyList = jQuery.Deferred();\\n\\njQuery.fn.ready = function( fn ) {\\n\\n\\treadyList\\n\\t\\t.then( fn )\\n\\n\\t\\t// Wrap jQuery.readyException in a function so that the lookup\\n\\t\\t// happens at the time of error handling instead of callback\\n\\t\\t// registration.\\n\\t\\t.catch( function( error ) {\\n\\t\\t\\tjQuery.readyException( error );\\n\\t\\t} );\\n\\n\\treturn this;\\n};\\n\\njQuery.extend( {\\n\\n\\t// Is the DOM ready to be used? Set to true once it occurs.\\n\\tisReady: false,\\n\\n\\t// A counter to track how many items to wait for before\\n\\t// the ready event fires. See trac-6781\\n\\treadyWait: 1,\\n\\n\\t// Handle when the DOM is ready\\n\\tready: function( wait ) {\\n\\n\\t\\t// Abort if there are pending holds or we're already ready\\n\\t\\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\t// Remember that the DOM is ready\\n\\t\\tjQuery.isReady = true;\\n\\n\\t\\t// If a normal DOM Ready event fired, decrement, and wait if need be\\n\\t\\tif ( wait !== true && --jQuery.readyWait > 0 ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\t// If there are functions bound, to execute\\n\\t\\treadyList.resolveWith( document, [ jQuery ] );\\n\\t}\\n} );\\n\\njQuery.ready.then = readyList.then;\\n\\n// The ready event handler and self cleanup method\\nfunction completed() {\\n\\tdocument.removeEventListener( \\\"DOMContentLoaded\\\", completed );\\n\\twindow.removeEventListener( \\\"load\\\", completed );\\n\\tjQuery.ready();\\n}\\n\\n// Catch cases where $(document).ready() is called\\n// after the browser event has already occurred.\\n// Support: IE <=9 - 10 only\\n// Older IE sometimes signals \\\"interactive\\\" too soon\\nif ( document.readyState === \\\"complete\\\" ||\\n\\t( document.readyState !== \\\"loading\\\" && !document.documentElement.doScroll ) ) {\\n\\n\\t// Handle it asynchronously to allow scripts the opportunity to delay ready\\n\\twindow.setTimeout( jQuery.ready );\\n\\n} else {\\n\\n\\t// Use the handy event callback\\n\\tdocument.addEventListener( \\\"DOMContentLoaded\\\", completed );\\n\\n\\t// A fallback to window.onload, that will always work\\n\\twindow.addEventListener( \\\"load\\\", completed );\\n}\\n\\n\\n\\n\\n// Multifunctional method to get and set values of a collection\\n// The value/s can optionally be executed if it's a function\\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\\n\\tvar i = 0,\\n\\t\\tlen = elems.length,\\n\\t\\tbulk = key == null;\\n\\n\\t// Sets many values\\n\\tif ( toType( key ) === \\\"object\\\" ) {\\n\\t\\tchainable = true;\\n\\t\\tfor ( i in key ) {\\n\\t\\t\\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\\n\\t\\t}\\n\\n\\t// Sets one value\\n\\t} else if ( value !== undefined ) {\\n\\t\\tchainable = true;\\n\\n\\t\\tif ( !isFunction( value ) ) {\\n\\t\\t\\traw = true;\\n\\t\\t}\\n\\n\\t\\tif ( bulk ) {\\n\\n\\t\\t\\t// Bulk operations run against the entire set\\n\\t\\t\\tif ( raw ) {\\n\\t\\t\\t\\tfn.call( elems, value );\\n\\t\\t\\t\\tfn = null;\\n\\n\\t\\t\\t// ...except when executing function values\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tbulk = fn;\\n\\t\\t\\t\\tfn = function( elem, _key, value ) {\\n\\t\\t\\t\\t\\treturn bulk.call( jQuery( elem ), value );\\n\\t\\t\\t\\t};\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif ( fn ) {\\n\\t\\t\\tfor ( ; i < len; i++ ) {\\n\\t\\t\\t\\tfn(\\n\\t\\t\\t\\t\\telems[ i ], key, raw ?\\n\\t\\t\\t\\t\\t\\tvalue :\\n\\t\\t\\t\\t\\t\\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\\n\\t\\t\\t\\t);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tif ( chainable ) {\\n\\t\\treturn elems;\\n\\t}\\n\\n\\t// Gets\\n\\tif ( bulk ) {\\n\\t\\treturn fn.call( elems );\\n\\t}\\n\\n\\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\\n};\\n\\n\\n// Matches dashed string for camelizing\\nvar rmsPrefix = /^-ms-/,\\n\\trdashAlpha = /-([a-z])/g;\\n\\n// Used by camelCase as callback to replace()\\nfunction fcamelCase( _all, letter ) {\\n\\treturn letter.toUpperCase();\\n}\\n\\n// Convert dashed to camelCase; used by the css and data modules\\n// Support: IE <=9 - 11, Edge 12 - 15\\n// Microsoft forgot to hump their vendor prefix (trac-9572)\\nfunction camelCase( string ) {\\n\\treturn string.replace( rmsPrefix, \\\"ms-\\\" ).replace( rdashAlpha, fcamelCase );\\n}\\nvar acceptData = function( owner ) {\\n\\n\\t// Accepts only:\\n\\t//  - Node\\n\\t//    - Node.ELEMENT_NODE\\n\\t//    - Node.DOCUMENT_NODE\\n\\t//  - Object\\n\\t//    - Any\\n\\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\\n};\\n\\n\\n\\n\\nfunction Data() {\\n\\tthis.expando = jQuery.expando + Data.uid++;\\n}\\n\\nData.uid = 1;\\n\\nData.prototype = {\\n\\n\\tcache: function( owner ) {\\n\\n\\t\\t// Check if the owner object already has a cache\\n\\t\\tvar value = owner[ this.expando ];\\n\\n\\t\\t// If not, create one\\n\\t\\tif ( !value ) {\\n\\t\\t\\tvalue = {};\\n\\n\\t\\t\\t// We can accept data for non-element nodes in modern browsers,\\n\\t\\t\\t// but we should not, see trac-8335.\\n\\t\\t\\t// Always return an empty object.\\n\\t\\t\\tif ( acceptData( owner ) ) {\\n\\n\\t\\t\\t\\t// If it is a node unlikely to be stringify-ed or looped over\\n\\t\\t\\t\\t// use plain assignment\\n\\t\\t\\t\\tif ( owner.nodeType ) {\\n\\t\\t\\t\\t\\towner[ this.expando ] = value;\\n\\n\\t\\t\\t\\t// Otherwise secure it in a non-enumerable property\\n\\t\\t\\t\\t// configurable must be true to allow the property to be\\n\\t\\t\\t\\t// deleted when data is removed\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tObject.defineProperty( owner, this.expando, {\\n\\t\\t\\t\\t\\t\\tvalue: value,\\n\\t\\t\\t\\t\\t\\tconfigurable: true\\n\\t\\t\\t\\t\\t} );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\treturn value;\\n\\t},\\n\\tset: function( owner, data, value ) {\\n\\t\\tvar prop,\\n\\t\\t\\tcache = this.cache( owner );\\n\\n\\t\\t// Handle: [ owner, key, value ] args\\n\\t\\t// Always use camelCase key (gh-2257)\\n\\t\\tif ( typeof data === \\\"string\\\" ) {\\n\\t\\t\\tcache[ camelCase( data ) ] = value;\\n\\n\\t\\t// Handle: [ owner, { properties } ] args\\n\\t\\t} else {\\n\\n\\t\\t\\t// Copy the properties one-by-one to the cache object\\n\\t\\t\\tfor ( prop in data ) {\\n\\t\\t\\t\\tcache[ camelCase( prop ) ] = data[ prop ];\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn cache;\\n\\t},\\n\\tget: function( owner, key ) {\\n\\t\\treturn key === undefined ?\\n\\t\\t\\tthis.cache( owner ) :\\n\\n\\t\\t\\t// Always use camelCase key (gh-2257)\\n\\t\\t\\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\\n\\t},\\n\\taccess: function( owner, key, value ) {\\n\\n\\t\\t// In cases where either:\\n\\t\\t//\\n\\t\\t//   1. No key was specified\\n\\t\\t//   2. A string key was specified, but no value provided\\n\\t\\t//\\n\\t\\t// Take the \\\"read\\\" path and allow the get method to determine\\n\\t\\t// which value to return, respectively either:\\n\\t\\t//\\n\\t\\t//   1. The entire cache object\\n\\t\\t//   2. The data stored at the key\\n\\t\\t//\\n\\t\\tif ( key === undefined ||\\n\\t\\t\\t\\t( ( key && typeof key === \\\"string\\\" ) && value === undefined ) ) {\\n\\n\\t\\t\\treturn this.get( owner, key );\\n\\t\\t}\\n\\n\\t\\t// When the key is not a string, or both a key and value\\n\\t\\t// are specified, set or extend (existing objects) with either:\\n\\t\\t//\\n\\t\\t//   1. An object of properties\\n\\t\\t//   2. A key and value\\n\\t\\t//\\n\\t\\tthis.set( owner, key, value );\\n\\n\\t\\t// Since the \\\"set\\\" path can have two possible entry points\\n\\t\\t// return the expected data based on which path was taken[*]\\n\\t\\treturn value !== undefined ? value : key;\\n\\t},\\n\\tremove: function( owner, key ) {\\n\\t\\tvar i,\\n\\t\\t\\tcache = owner[ this.expando ];\\n\\n\\t\\tif ( cache === undefined ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\tif ( key !== undefined ) {\\n\\n\\t\\t\\t// Support array or space separated string of keys\\n\\t\\t\\tif ( Array.isArray( key ) ) {\\n\\n\\t\\t\\t\\t// If key is an array of keys...\\n\\t\\t\\t\\t// We always set camelCase keys, so remove that.\\n\\t\\t\\t\\tkey = key.map( camelCase );\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tkey = camelCase( key );\\n\\n\\t\\t\\t\\t// If a key with the spaces exists, use it.\\n\\t\\t\\t\\t// Otherwise, create an array by matching non-whitespace\\n\\t\\t\\t\\tkey = key in cache ?\\n\\t\\t\\t\\t\\t[ key ] :\\n\\t\\t\\t\\t\\t( key.match( rnothtmlwhite ) || [] );\\n\\t\\t\\t}\\n\\n\\t\\t\\ti = key.length;\\n\\n\\t\\t\\twhile ( i-- ) {\\n\\t\\t\\t\\tdelete cache[ key[ i ] ];\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Remove the expando if there's no more data\\n\\t\\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\\n\\n\\t\\t\\t// Support: Chrome <=35 - 45\\n\\t\\t\\t// Webkit & Blink performance suffers when deleting properties\\n\\t\\t\\t// from DOM nodes, so set to undefined instead\\n\\t\\t\\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\\n\\t\\t\\tif ( owner.nodeType ) {\\n\\t\\t\\t\\towner[ this.expando ] = undefined;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tdelete owner[ this.expando ];\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\thasData: function( owner ) {\\n\\t\\tvar cache = owner[ this.expando ];\\n\\t\\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\\n\\t}\\n};\\nvar dataPriv = new Data();\\n\\nvar dataUser = new Data();\\n\\n\\n\\n//\\tImplementation Summary\\n//\\n//\\t1. Enforce API surface and semantic compatibility with 1.9.x branch\\n//\\t2. Improve the module's maintainability by reducing the storage\\n//\\t\\tpaths to a single mechanism.\\n//\\t3. Use the same single mechanism to support \\\"private\\\" and \\\"user\\\" data.\\n//\\t4. _Never_ expose \\\"private\\\" data to user code (TODO: Drop _data, _removeData)\\n//\\t5. Avoid exposing implementation details on user objects (eg. expando properties)\\n//\\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\\n\\nvar rbrace = /^(?:\\\\{[\\\\w\\\\W]*\\\\}|\\\\[[\\\\w\\\\W]*\\\\])$/,\\n\\trmultiDash = /[A-Z]/g;\\n\\nfunction getData( data ) {\\n\\tif ( data === \\\"true\\\" ) {\\n\\t\\treturn true;\\n\\t}\\n\\n\\tif ( data === \\\"false\\\" ) {\\n\\t\\treturn false;\\n\\t}\\n\\n\\tif ( data === \\\"null\\\" ) {\\n\\t\\treturn null;\\n\\t}\\n\\n\\t// Only convert to a number if it doesn't change the string\\n\\tif ( data === +data + \\\"\\\" ) {\\n\\t\\treturn +data;\\n\\t}\\n\\n\\tif ( rbrace.test( data ) ) {\\n\\t\\treturn JSON.parse( data );\\n\\t}\\n\\n\\treturn data;\\n}\\n\\nfunction dataAttr( elem, key, data ) {\\n\\tvar name;\\n\\n\\t// If nothing was found internally, try to fetch any\\n\\t// data from the HTML5 data-* attribute\\n\\tif ( data === undefined && elem.nodeType === 1 ) {\\n\\t\\tname = \\\"data-\\\" + key.replace( rmultiDash, \\\"-$&\\\" ).toLowerCase();\\n\\t\\tdata = elem.getAttribute( name );\\n\\n\\t\\tif ( typeof data === \\\"string\\\" ) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tdata = getData( data );\\n\\t\\t\\t} catch ( e ) {}\\n\\n\\t\\t\\t// Make sure we set the data so it isn't changed later\\n\\t\\t\\tdataUser.set( elem, key, data );\\n\\t\\t} else {\\n\\t\\t\\tdata = undefined;\\n\\t\\t}\\n\\t}\\n\\treturn data;\\n}\\n\\njQuery.extend( {\\n\\thasData: function( elem ) {\\n\\t\\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\\n\\t},\\n\\n\\tdata: function( elem, name, data ) {\\n\\t\\treturn dataUser.access( elem, name, data );\\n\\t},\\n\\n\\tremoveData: function( elem, name ) {\\n\\t\\tdataUser.remove( elem, name );\\n\\t},\\n\\n\\t// TODO: Now that all calls to _data and _removeData have been replaced\\n\\t// with direct calls to dataPriv methods, these can be deprecated.\\n\\t_data: function( elem, name, data ) {\\n\\t\\treturn dataPriv.access( elem, name, data );\\n\\t},\\n\\n\\t_removeData: function( elem, name ) {\\n\\t\\tdataPriv.remove( elem, name );\\n\\t}\\n} );\\n\\njQuery.fn.extend( {\\n\\tdata: function( key, value ) {\\n\\t\\tvar i, name, data,\\n\\t\\t\\telem = this[ 0 ],\\n\\t\\t\\tattrs = elem && elem.attributes;\\n\\n\\t\\t// Gets all values\\n\\t\\tif ( key === undefined ) {\\n\\t\\t\\tif ( this.length ) {\\n\\t\\t\\t\\tdata = dataUser.get( elem );\\n\\n\\t\\t\\t\\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \\\"hasDataAttrs\\\" ) ) {\\n\\t\\t\\t\\t\\ti = attrs.length;\\n\\t\\t\\t\\t\\twhile ( i-- ) {\\n\\n\\t\\t\\t\\t\\t\\t// Support: IE 11 only\\n\\t\\t\\t\\t\\t\\t// The attrs elements can be null (trac-14894)\\n\\t\\t\\t\\t\\t\\tif ( attrs[ i ] ) {\\n\\t\\t\\t\\t\\t\\t\\tname = attrs[ i ].name;\\n\\t\\t\\t\\t\\t\\t\\tif ( name.indexOf( \\\"data-\\\" ) === 0 ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tname = camelCase( name.slice( 5 ) );\\n\\t\\t\\t\\t\\t\\t\\t\\tdataAttr( elem, name, data[ name ] );\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tdataPriv.set( elem, \\\"hasDataAttrs\\\", true );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn data;\\n\\t\\t}\\n\\n\\t\\t// Sets multiple values\\n\\t\\tif ( typeof key === \\\"object\\\" ) {\\n\\t\\t\\treturn this.each( function() {\\n\\t\\t\\t\\tdataUser.set( this, key );\\n\\t\\t\\t} );\\n\\t\\t}\\n\\n\\t\\treturn access( this, function( value ) {\\n\\t\\t\\tvar data;\\n\\n\\t\\t\\t// The calling jQuery object (element matches) is not empty\\n\\t\\t\\t// (and therefore has an element appears at this[ 0 ]) and the\\n\\t\\t\\t// `value` parameter was not undefined. An empty jQuery object\\n\\t\\t\\t// will result in `undefined` for elem = this[ 0 ] which will\\n\\t\\t\\t// throw an exception if an attempt to read a data cache is made.\\n\\t\\t\\tif ( elem && value === undefined ) {\\n\\n\\t\\t\\t\\t// Attempt to get data from the cache\\n\\t\\t\\t\\t// The key will always be camelCased in Data\\n\\t\\t\\t\\tdata = dataUser.get( elem, key );\\n\\t\\t\\t\\tif ( data !== undefined ) {\\n\\t\\t\\t\\t\\treturn data;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Attempt to \\\"discover\\\" the data in\\n\\t\\t\\t\\t// HTML5 custom data-* attrs\\n\\t\\t\\t\\tdata = dataAttr( elem, key );\\n\\t\\t\\t\\tif ( data !== undefined ) {\\n\\t\\t\\t\\t\\treturn data;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// We tried really hard, but the data doesn't exist.\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Set the data...\\n\\t\\t\\tthis.each( function() {\\n\\n\\t\\t\\t\\t// We always store the camelCased key\\n\\t\\t\\t\\tdataUser.set( this, key, value );\\n\\t\\t\\t} );\\n\\t\\t}, null, value, arguments.length > 1, null, true );\\n\\t},\\n\\n\\tremoveData: function( key ) {\\n\\t\\treturn this.each( function() {\\n\\t\\t\\tdataUser.remove( this, key );\\n\\t\\t} );\\n\\t}\\n} );\\n\\n\\njQuery.extend( {\\n\\tqueue: function( elem, type, data ) {\\n\\t\\tvar queue;\\n\\n\\t\\tif ( elem ) {\\n\\t\\t\\ttype = ( type || \\\"fx\\\" ) + \\\"queue\\\";\\n\\t\\t\\tqueue = dataPriv.get( elem, type );\\n\\n\\t\\t\\t// Speed up dequeue by getting out quickly if this is just a lookup\\n\\t\\t\\tif ( data ) {\\n\\t\\t\\t\\tif ( !queue || Array.isArray( data ) ) {\\n\\t\\t\\t\\t\\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tqueue.push( data );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\treturn queue || [];\\n\\t\\t}\\n\\t},\\n\\n\\tdequeue: function( elem, type ) {\\n\\t\\ttype = type || \\\"fx\\\";\\n\\n\\t\\tvar queue = jQuery.queue( elem, type ),\\n\\t\\t\\tstartLength = queue.length,\\n\\t\\t\\tfn = queue.shift(),\\n\\t\\t\\thooks = jQuery._queueHooks( elem, type ),\\n\\t\\t\\tnext = function() {\\n\\t\\t\\t\\tjQuery.dequeue( elem, type );\\n\\t\\t\\t};\\n\\n\\t\\t// If the fx queue is dequeued, always remove the progress sentinel\\n\\t\\tif ( fn === \\\"inprogress\\\" ) {\\n\\t\\t\\tfn = queue.shift();\\n\\t\\t\\tstartLength--;\\n\\t\\t}\\n\\n\\t\\tif ( fn ) {\\n\\n\\t\\t\\t// Add a progress sentinel to prevent the fx queue from being\\n\\t\\t\\t// automatically dequeued\\n\\t\\t\\tif ( type === \\\"fx\\\" ) {\\n\\t\\t\\t\\tqueue.unshift( \\\"inprogress\\\" );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Clear up the last queue stop function\\n\\t\\t\\tdelete hooks.stop;\\n\\t\\t\\tfn.call( elem, next, hooks );\\n\\t\\t}\\n\\n\\t\\tif ( !startLength && hooks ) {\\n\\t\\t\\thooks.empty.fire();\\n\\t\\t}\\n\\t},\\n\\n\\t// Not public - generate a queueHooks object, or return the current one\\n\\t_queueHooks: function( elem, type ) {\\n\\t\\tvar key = type + \\\"queueHooks\\\";\\n\\t\\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\\n\\t\\t\\tempty: jQuery.Callbacks( \\\"once memory\\\" ).add( function() {\\n\\t\\t\\t\\tdataPriv.remove( elem, [ type + \\\"queue\\\", key ] );\\n\\t\\t\\t} )\\n\\t\\t} );\\n\\t}\\n} );\\n\\njQuery.fn.extend( {\\n\\tqueue: function( type, data ) {\\n\\t\\tvar setter = 2;\\n\\n\\t\\tif ( typeof type !== \\\"string\\\" ) {\\n\\t\\t\\tdata = type;\\n\\t\\t\\ttype = \\\"fx\\\";\\n\\t\\t\\tsetter--;\\n\\t\\t}\\n\\n\\t\\tif ( arguments.length < setter ) {\\n\\t\\t\\treturn jQuery.queue( this[ 0 ], type );\\n\\t\\t}\\n\\n\\t\\treturn data === undefined ?\\n\\t\\t\\tthis :\\n\\t\\t\\tthis.each( function() {\\n\\t\\t\\t\\tvar queue = jQuery.queue( this, type, data );\\n\\n\\t\\t\\t\\t// Ensure a hooks for this queue\\n\\t\\t\\t\\tjQuery._queueHooks( this, type );\\n\\n\\t\\t\\t\\tif ( type === \\\"fx\\\" && queue[ 0 ] !== \\\"inprogress\\\" ) {\\n\\t\\t\\t\\t\\tjQuery.dequeue( this, type );\\n\\t\\t\\t\\t}\\n\\t\\t\\t} );\\n\\t},\\n\\tdequeue: function( type ) {\\n\\t\\treturn this.each( function() {\\n\\t\\t\\tjQuery.dequeue( this, type );\\n\\t\\t} );\\n\\t},\\n\\tclearQueue: function( type ) {\\n\\t\\treturn this.queue( type || \\\"fx\\\", [] );\\n\\t},\\n\\n\\t// Get a promise resolved when queues of a certain type\\n\\t// are emptied (fx is the type by default)\\n\\tpromise: function( type, obj ) {\\n\\t\\tvar tmp,\\n\\t\\t\\tcount = 1,\\n\\t\\t\\tdefer = jQuery.Deferred(),\\n\\t\\t\\telements = this,\\n\\t\\t\\ti = this.length,\\n\\t\\t\\tresolve = function() {\\n\\t\\t\\t\\tif ( !( --count ) ) {\\n\\t\\t\\t\\t\\tdefer.resolveWith( elements, [ elements ] );\\n\\t\\t\\t\\t}\\n\\t\\t\\t};\\n\\n\\t\\tif ( typeof type !== \\\"string\\\" ) {\\n\\t\\t\\tobj = type;\\n\\t\\t\\ttype = undefined;\\n\\t\\t}\\n\\t\\ttype = type || \\\"fx\\\";\\n\\n\\t\\twhile ( i-- ) {\\n\\t\\t\\ttmp = dataPriv.get( elements[ i ], type + \\\"queueHooks\\\" );\\n\\t\\t\\tif ( tmp && tmp.empty ) {\\n\\t\\t\\t\\tcount++;\\n\\t\\t\\t\\ttmp.empty.add( resolve );\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tresolve();\\n\\t\\treturn defer.promise( obj );\\n\\t}\\n} );\\nvar pnum = ( /[+-]?(?:\\\\d*\\\\.|)\\\\d+(?:[eE][+-]?\\\\d+|)/ ).source;\\n\\nvar rcssNum = new RegExp( \\\"^(?:([+-])=|)(\\\" + pnum + \\\")([a-z%]*)$\\\", \\\"i\\\" );\\n\\n\\nvar cssExpand = [ \\\"Top\\\", \\\"Right\\\", \\\"Bottom\\\", \\\"Left\\\" ];\\n\\nvar documentElement = document.documentElement;\\n\\n\\n\\n\\tvar isAttached = function( elem ) {\\n\\t\\t\\treturn jQuery.contains( elem.ownerDocument, elem );\\n\\t\\t},\\n\\t\\tcomposed = { composed: true };\\n\\n\\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\\n\\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\\n\\t// Support: iOS 10.0-10.2 only\\n\\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\\n\\t// leading to errors. We need to check for `getRootNode`.\\n\\tif ( documentElement.getRootNode ) {\\n\\t\\tisAttached = function( elem ) {\\n\\t\\t\\treturn jQuery.contains( elem.ownerDocument, elem ) ||\\n\\t\\t\\t\\telem.getRootNode( composed ) === elem.ownerDocument;\\n\\t\\t};\\n\\t}\\nvar isHiddenWithinTree = function( elem, el ) {\\n\\n\\t\\t// isHiddenWithinTree might be called from jQuery#filter function;\\n\\t\\t// in that case, element will be second argument\\n\\t\\telem = el || elem;\\n\\n\\t\\t// Inline style trumps all\\n\\t\\treturn elem.style.display === \\\"none\\\" ||\\n\\t\\t\\telem.style.display === \\\"\\\" &&\\n\\n\\t\\t\\t// Otherwise, check computed style\\n\\t\\t\\t// Support: Firefox <=43 - 45\\n\\t\\t\\t// Disconnected elements can have computed display: none, so first confirm that elem is\\n\\t\\t\\t// in the document.\\n\\t\\t\\tisAttached( elem ) &&\\n\\n\\t\\t\\tjQuery.css( elem, \\\"display\\\" ) === \\\"none\\\";\\n\\t};\\n\\n\\n\\nfunction adjustCSS( elem, prop, valueParts, tween ) {\\n\\tvar adjusted, scale,\\n\\t\\tmaxIterations = 20,\\n\\t\\tcurrentValue = tween ?\\n\\t\\t\\tfunction() {\\n\\t\\t\\t\\treturn tween.cur();\\n\\t\\t\\t} :\\n\\t\\t\\tfunction() {\\n\\t\\t\\t\\treturn jQuery.css( elem, prop, \\\"\\\" );\\n\\t\\t\\t},\\n\\t\\tinitial = currentValue(),\\n\\t\\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \\\"\\\" : \\\"px\\\" ),\\n\\n\\t\\t// Starting value computation is required for potential unit mismatches\\n\\t\\tinitialInUnit = elem.nodeType &&\\n\\t\\t\\t( jQuery.cssNumber[ prop ] || unit !== \\\"px\\\" && +initial ) &&\\n\\t\\t\\trcssNum.exec( jQuery.css( elem, prop ) );\\n\\n\\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\\n\\n\\t\\t// Support: Firefox <=54\\n\\t\\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\\n\\t\\tinitial = initial / 2;\\n\\n\\t\\t// Trust units reported by jQuery.css\\n\\t\\tunit = unit || initialInUnit[ 3 ];\\n\\n\\t\\t// Iteratively approximate from a nonzero starting point\\n\\t\\tinitialInUnit = +initial || 1;\\n\\n\\t\\twhile ( maxIterations-- ) {\\n\\n\\t\\t\\t// Evaluate and update our best guess (doubling guesses that zero out).\\n\\t\\t\\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\\n\\t\\t\\tjQuery.style( elem, prop, initialInUnit + unit );\\n\\t\\t\\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\\n\\t\\t\\t\\tmaxIterations = 0;\\n\\t\\t\\t}\\n\\t\\t\\tinitialInUnit = initialInUnit / scale;\\n\\n\\t\\t}\\n\\n\\t\\tinitialInUnit = initialInUnit * 2;\\n\\t\\tjQuery.style( elem, prop, initialInUnit + unit );\\n\\n\\t\\t// Make sure we update the tween properties later on\\n\\t\\tvalueParts = valueParts || [];\\n\\t}\\n\\n\\tif ( valueParts ) {\\n\\t\\tinitialInUnit = +initialInUnit || +initial || 0;\\n\\n\\t\\t// Apply relative offset (+=/-=) if specified\\n\\t\\tadjusted = valueParts[ 1 ] ?\\n\\t\\t\\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\\n\\t\\t\\t+valueParts[ 2 ];\\n\\t\\tif ( tween ) {\\n\\t\\t\\ttween.unit = unit;\\n\\t\\t\\ttween.start = initialInUnit;\\n\\t\\t\\ttween.end = adjusted;\\n\\t\\t}\\n\\t}\\n\\treturn adjusted;\\n}\\n\\n\\nvar defaultDisplayMap = {};\\n\\nfunction getDefaultDisplay( elem ) {\\n\\tvar temp,\\n\\t\\tdoc = elem.ownerDocument,\\n\\t\\tnodeName = elem.nodeName,\\n\\t\\tdisplay = defaultDisplayMap[ nodeName ];\\n\\n\\tif ( display ) {\\n\\t\\treturn display;\\n\\t}\\n\\n\\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\\n\\tdisplay = jQuery.css( temp, \\\"display\\\" );\\n\\n\\ttemp.parentNode.removeChild( temp );\\n\\n\\tif ( display === \\\"none\\\" ) {\\n\\t\\tdisplay = \\\"block\\\";\\n\\t}\\n\\tdefaultDisplayMap[ nodeName ] = display;\\n\\n\\treturn display;\\n}\\n\\nfunction showHide( elements, show ) {\\n\\tvar display, elem,\\n\\t\\tvalues = [],\\n\\t\\tindex = 0,\\n\\t\\tlength = elements.length;\\n\\n\\t// Determine new display value for elements that need to change\\n\\tfor ( ; index < length; index++ ) {\\n\\t\\telem = elements[ index ];\\n\\t\\tif ( !elem.style ) {\\n\\t\\t\\tcontinue;\\n\\t\\t}\\n\\n\\t\\tdisplay = elem.style.display;\\n\\t\\tif ( show ) {\\n\\n\\t\\t\\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\\n\\t\\t\\t// check is required in this first loop unless we have a nonempty display value (either\\n\\t\\t\\t// inline or about-to-be-restored)\\n\\t\\t\\tif ( display === \\\"none\\\" ) {\\n\\t\\t\\t\\tvalues[ index ] = dataPriv.get( elem, \\\"display\\\" ) || null;\\n\\t\\t\\t\\tif ( !values[ index ] ) {\\n\\t\\t\\t\\t\\telem.style.display = \\\"\\\";\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tif ( elem.style.display === \\\"\\\" && isHiddenWithinTree( elem ) ) {\\n\\t\\t\\t\\tvalues[ index ] = getDefaultDisplay( elem );\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tif ( display !== \\\"none\\\" ) {\\n\\t\\t\\t\\tvalues[ index ] = \\\"none\\\";\\n\\n\\t\\t\\t\\t// Remember what we're overwriting\\n\\t\\t\\t\\tdataPriv.set( elem, \\\"display\\\", display );\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t// Set the display of the elements in a second loop to avoid constant reflow\\n\\tfor ( index = 0; index < length; index++ ) {\\n\\t\\tif ( values[ index ] != null ) {\\n\\t\\t\\telements[ index ].style.display = values[ index ];\\n\\t\\t}\\n\\t}\\n\\n\\treturn elements;\\n}\\n\\njQuery.fn.extend( {\\n\\tshow: function() {\\n\\t\\treturn showHide( this, true );\\n\\t},\\n\\thide: function() {\\n\\t\\treturn showHide( this );\\n\\t},\\n\\ttoggle: function( state ) {\\n\\t\\tif ( typeof state === \\\"boolean\\\" ) {\\n\\t\\t\\treturn state ? this.show() : this.hide();\\n\\t\\t}\\n\\n\\t\\treturn this.each( function() {\\n\\t\\t\\tif ( isHiddenWithinTree( this ) ) {\\n\\t\\t\\t\\tjQuery( this ).show();\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tjQuery( this ).hide();\\n\\t\\t\\t}\\n\\t\\t} );\\n\\t}\\n} );\\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\\n\\nvar rtagName = ( /<([a-z][^\\\\/\\\\0>\\\\x20\\\\t\\\\r\\\\n\\\\f]*)/i );\\n\\nvar rscriptType = ( /^$|^module$|\\\\/(?:java|ecma)script/i );\\n\\n\\n\\n( function() {\\n\\tvar fragment = document.createDocumentFragment(),\\n\\t\\tdiv = fragment.appendChild( document.createElement( \\\"div\\\" ) ),\\n\\t\\tinput = document.createElement( \\\"input\\\" );\\n\\n\\t// Support: Android 4.0 - 4.3 only\\n\\t// Check state lost if the name is set (trac-11217)\\n\\t// Support: Windows Web Apps (WWA)\\n\\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\\n\\tinput.setAttribute( \\\"type\\\", \\\"radio\\\" );\\n\\tinput.setAttribute( \\\"checked\\\", \\\"checked\\\" );\\n\\tinput.setAttribute( \\\"name\\\", \\\"t\\\" );\\n\\n\\tdiv.appendChild( input );\\n\\n\\t// Support: Android <=4.1 only\\n\\t// Older WebKit doesn't clone checked state correctly in fragments\\n\\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\\n\\n\\t// Support: IE <=11 only\\n\\t// Make sure textarea (and checkbox) defaultValue is properly cloned\\n\\tdiv.innerHTML = \\\"<textarea>x</textarea>\\\";\\n\\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\\n\\n\\t// Support: IE <=9 only\\n\\t// IE <=9 replaces <option> tags with their contents when inserted outside of\\n\\t// the select element.\\n\\tdiv.innerHTML = \\\"<option></option>\\\";\\n\\tsupport.option = !!div.lastChild;\\n} )();\\n\\n\\n// We have to close these tags to support XHTML (trac-13200)\\nvar wrapMap = {\\n\\n\\t// XHTML parsers do not magically insert elements in the\\n\\t// same way that tag soup parsers do. So we cannot shorten\\n\\t// this by omitting <tbody> or other required elements.\\n\\tthead: [ 1, \\\"<table>\\\", \\\"</table>\\\" ],\\n\\tcol: [ 2, \\\"<table><colgroup>\\\", \\\"</colgroup></table>\\\" ],\\n\\ttr: [ 2, \\\"<table><tbody>\\\", \\\"</tbody></table>\\\" ],\\n\\ttd: [ 3, \\\"<table><tbody><tr>\\\", \\\"</tr></tbody></table>\\\" ],\\n\\n\\t_default: [ 0, \\\"\\\", \\\"\\\" ]\\n};\\n\\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\\nwrapMap.th = wrapMap.td;\\n\\n// Support: IE <=9 only\\nif ( !support.option ) {\\n\\twrapMap.optgroup = wrapMap.option = [ 1, \\\"<select multiple='multiple'>\\\", \\\"</select>\\\" ];\\n}\\n\\n\\nfunction getAll( context, tag ) {\\n\\n\\t// Support: IE <=9 - 11 only\\n\\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\\n\\tvar ret;\\n\\n\\tif ( typeof context.getElementsByTagName !== \\\"undefined\\\" ) {\\n\\t\\tret = context.getElementsByTagName( tag || \\\"*\\\" );\\n\\n\\t} else if ( typeof context.querySelectorAll !== \\\"undefined\\\" ) {\\n\\t\\tret = context.querySelectorAll( tag || \\\"*\\\" );\\n\\n\\t} else {\\n\\t\\tret = [];\\n\\t}\\n\\n\\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\\n\\t\\treturn jQuery.merge( [ context ], ret );\\n\\t}\\n\\n\\treturn ret;\\n}\\n\\n\\n// Mark scripts as having already been evaluated\\nfunction setGlobalEval( elems, refElements ) {\\n\\tvar i = 0,\\n\\t\\tl = elems.length;\\n\\n\\tfor ( ; i < l; i++ ) {\\n\\t\\tdataPriv.set(\\n\\t\\t\\telems[ i ],\\n\\t\\t\\t\\\"globalEval\\\",\\n\\t\\t\\t!refElements || dataPriv.get( refElements[ i ], \\\"globalEval\\\" )\\n\\t\\t);\\n\\t}\\n}\\n\\n\\nvar rhtml = /<|&#?\\\\w+;/;\\n\\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\\n\\tvar elem, tmp, tag, wrap, attached, j,\\n\\t\\tfragment = context.createDocumentFragment(),\\n\\t\\tnodes = [],\\n\\t\\ti = 0,\\n\\t\\tl = elems.length;\\n\\n\\tfor ( ; i < l; i++ ) {\\n\\t\\telem = elems[ i ];\\n\\n\\t\\tif ( elem || elem === 0 ) {\\n\\n\\t\\t\\t// Add nodes directly\\n\\t\\t\\tif ( toType( elem ) === \\\"object\\\" ) {\\n\\n\\t\\t\\t\\t// Support: Android <=4.0 only, PhantomJS 1 only\\n\\t\\t\\t\\t// push.apply(_, arraylike) throws on ancient WebKit\\n\\t\\t\\t\\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\\n\\n\\t\\t\\t// Convert non-html into a text node\\n\\t\\t\\t} else if ( !rhtml.test( elem ) ) {\\n\\t\\t\\t\\tnodes.push( context.createTextNode( elem ) );\\n\\n\\t\\t\\t// Convert html into DOM nodes\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ttmp = tmp || fragment.appendChild( context.createElement( \\\"div\\\" ) );\\n\\n\\t\\t\\t\\t// Deserialize a standard representation\\n\\t\\t\\t\\ttag = ( rtagName.exec( elem ) || [ \\\"\\\", \\\"\\\" ] )[ 1 ].toLowerCase();\\n\\t\\t\\t\\twrap = wrapMap[ tag ] || wrapMap._default;\\n\\t\\t\\t\\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\\n\\n\\t\\t\\t\\t// Descend through wrappers to the right content\\n\\t\\t\\t\\tj = wrap[ 0 ];\\n\\t\\t\\t\\twhile ( j-- ) {\\n\\t\\t\\t\\t\\ttmp = tmp.lastChild;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Support: Android <=4.0 only, PhantomJS 1 only\\n\\t\\t\\t\\t// push.apply(_, arraylike) throws on ancient WebKit\\n\\t\\t\\t\\tjQuery.merge( nodes, tmp.childNodes );\\n\\n\\t\\t\\t\\t// Remember the top-level container\\n\\t\\t\\t\\ttmp = fragment.firstChild;\\n\\n\\t\\t\\t\\t// Ensure the created nodes are orphaned (trac-12392)\\n\\t\\t\\t\\ttmp.textContent = \\\"\\\";\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t// Remove wrapper from fragment\\n\\tfragment.textContent = \\\"\\\";\\n\\n\\ti = 0;\\n\\twhile ( ( elem = nodes[ i++ ] ) ) {\\n\\n\\t\\t// Skip elements already in the context collection (trac-4087)\\n\\t\\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\\n\\t\\t\\tif ( ignored ) {\\n\\t\\t\\t\\tignored.push( elem );\\n\\t\\t\\t}\\n\\t\\t\\tcontinue;\\n\\t\\t}\\n\\n\\t\\tattached = isAttached( elem );\\n\\n\\t\\t// Append to fragment\\n\\t\\ttmp = getAll( fragment.appendChild( elem ), \\\"script\\\" );\\n\\n\\t\\t// Preserve script evaluation history\\n\\t\\tif ( attached ) {\\n\\t\\t\\tsetGlobalEval( tmp );\\n\\t\\t}\\n\\n\\t\\t// Capture executables\\n\\t\\tif ( scripts ) {\\n\\t\\t\\tj = 0;\\n\\t\\t\\twhile ( ( elem = tmp[ j++ ] ) ) {\\n\\t\\t\\t\\tif ( rscriptType.test( elem.type || \\\"\\\" ) ) {\\n\\t\\t\\t\\t\\tscripts.push( elem );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\treturn fragment;\\n}\\n\\n\\nvar rtypenamespace = /^([^.]*)(?:\\\\.(.+)|)/;\\n\\nfunction returnTrue() {\\n\\treturn true;\\n}\\n\\nfunction returnFalse() {\\n\\treturn false;\\n}\\n\\nfunction on( elem, types, selector, data, fn, one ) {\\n\\tvar origFn, type;\\n\\n\\t// Types can be a map of types/handlers\\n\\tif ( typeof types === \\\"object\\\" ) {\\n\\n\\t\\t// ( types-Object, selector, data )\\n\\t\\tif ( typeof selector !== \\\"string\\\" ) {\\n\\n\\t\\t\\t// ( types-Object, data )\\n\\t\\t\\tdata = data || selector;\\n\\t\\t\\tselector = undefined;\\n\\t\\t}\\n\\t\\tfor ( type in types ) {\\n\\t\\t\\ton( elem, type, selector, data, types[ type ], one );\\n\\t\\t}\\n\\t\\treturn elem;\\n\\t}\\n\\n\\tif ( data == null && fn == null ) {\\n\\n\\t\\t// ( types, fn )\\n\\t\\tfn = selector;\\n\\t\\tdata = selector = undefined;\\n\\t} else if ( fn == null ) {\\n\\t\\tif ( typeof selector === \\\"string\\\" ) {\\n\\n\\t\\t\\t// ( types, selector, fn )\\n\\t\\t\\tfn = data;\\n\\t\\t\\tdata = undefined;\\n\\t\\t} else {\\n\\n\\t\\t\\t// ( types, data, fn )\\n\\t\\t\\tfn = data;\\n\\t\\t\\tdata = selector;\\n\\t\\t\\tselector = undefined;\\n\\t\\t}\\n\\t}\\n\\tif ( fn === false ) {\\n\\t\\tfn = returnFalse;\\n\\t} else if ( !fn ) {\\n\\t\\treturn elem;\\n\\t}\\n\\n\\tif ( one === 1 ) {\\n\\t\\torigFn = fn;\\n\\t\\tfn = function( event ) {\\n\\n\\t\\t\\t// Can use an empty set, since event contains the info\\n\\t\\t\\tjQuery().off( event );\\n\\t\\t\\treturn origFn.apply( this, arguments );\\n\\t\\t};\\n\\n\\t\\t// Use same guid so caller can remove using origFn\\n\\t\\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\\n\\t}\\n\\treturn elem.each( function() {\\n\\t\\tjQuery.event.add( this, types, fn, data, selector );\\n\\t} );\\n}\\n\\n/*\\n * Helper functions for managing events -- not part of the public interface.\\n * Props to Dean Edwards' addEvent library for many of the ideas.\\n */\\njQuery.event = {\\n\\n\\tglobal: {},\\n\\n\\tadd: function( elem, types, handler, data, selector ) {\\n\\n\\t\\tvar handleObjIn, eventHandle, tmp,\\n\\t\\t\\tevents, t, handleObj,\\n\\t\\t\\tspecial, handlers, type, namespaces, origType,\\n\\t\\t\\telemData = dataPriv.get( elem );\\n\\n\\t\\t// Only attach events to objects that accept data\\n\\t\\tif ( !acceptData( elem ) ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\t// Caller can pass in an object of custom data in lieu of the handler\\n\\t\\tif ( handler.handler ) {\\n\\t\\t\\thandleObjIn = handler;\\n\\t\\t\\thandler = handleObjIn.handler;\\n\\t\\t\\tselector = handleObjIn.selector;\\n\\t\\t}\\n\\n\\t\\t// Ensure that invalid selectors throw exceptions at attach time\\n\\t\\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\\n\\t\\tif ( selector ) {\\n\\t\\t\\tjQuery.find.matchesSelector( documentElement, selector );\\n\\t\\t}\\n\\n\\t\\t// Make sure that the handler has a unique ID, used to find/remove it later\\n\\t\\tif ( !handler.guid ) {\\n\\t\\t\\thandler.guid = jQuery.guid++;\\n\\t\\t}\\n\\n\\t\\t// Init the element's event structure and main handler, if this is the first\\n\\t\\tif ( !( events = elemData.events ) ) {\\n\\t\\t\\tevents = elemData.events = Object.create( null );\\n\\t\\t}\\n\\t\\tif ( !( eventHandle = elemData.handle ) ) {\\n\\t\\t\\teventHandle = elemData.handle = function( e ) {\\n\\n\\t\\t\\t\\t// Discard the second event of a jQuery.event.trigger() and\\n\\t\\t\\t\\t// when an event is called after a page has unloaded\\n\\t\\t\\t\\treturn typeof jQuery !== \\\"undefined\\\" && jQuery.event.triggered !== e.type ?\\n\\t\\t\\t\\t\\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\\n\\t\\t\\t};\\n\\t\\t}\\n\\n\\t\\t// Handle multiple events separated by a space\\n\\t\\ttypes = ( types || \\\"\\\" ).match( rnothtmlwhite ) || [ \\\"\\\" ];\\n\\t\\tt = types.length;\\n\\t\\twhile ( t-- ) {\\n\\t\\t\\ttmp = rtypenamespace.exec( types[ t ] ) || [];\\n\\t\\t\\ttype = origType = tmp[ 1 ];\\n\\t\\t\\tnamespaces = ( tmp[ 2 ] || \\\"\\\" ).split( \\\".\\\" ).sort();\\n\\n\\t\\t\\t// There *must* be a type, no attaching namespace-only handlers\\n\\t\\t\\tif ( !type ) {\\n\\t\\t\\t\\tcontinue;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If event changes its type, use the special event handlers for the changed type\\n\\t\\t\\tspecial = jQuery.event.special[ type ] || {};\\n\\n\\t\\t\\t// If selector defined, determine special event api type, otherwise given type\\n\\t\\t\\ttype = ( selector ? special.delegateType : special.bindType ) || type;\\n\\n\\t\\t\\t// Update special based on newly reset type\\n\\t\\t\\tspecial = jQuery.event.special[ type ] || {};\\n\\n\\t\\t\\t// handleObj is passed to all event handlers\\n\\t\\t\\thandleObj = jQuery.extend( {\\n\\t\\t\\t\\ttype: type,\\n\\t\\t\\t\\torigType: origType,\\n\\t\\t\\t\\tdata: data,\\n\\t\\t\\t\\thandler: handler,\\n\\t\\t\\t\\tguid: handler.guid,\\n\\t\\t\\t\\tselector: selector,\\n\\t\\t\\t\\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\\n\\t\\t\\t\\tnamespace: namespaces.join( \\\".\\\" )\\n\\t\\t\\t}, handleObjIn );\\n\\n\\t\\t\\t// Init the event handler queue if we're the first\\n\\t\\t\\tif ( !( handlers = events[ type ] ) ) {\\n\\t\\t\\t\\thandlers = events[ type ] = [];\\n\\t\\t\\t\\thandlers.delegateCount = 0;\\n\\n\\t\\t\\t\\t// Only use addEventListener if the special events handler returns false\\n\\t\\t\\t\\tif ( !special.setup ||\\n\\t\\t\\t\\t\\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\\n\\n\\t\\t\\t\\t\\tif ( elem.addEventListener ) {\\n\\t\\t\\t\\t\\t\\telem.addEventListener( type, eventHandle );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tif ( special.add ) {\\n\\t\\t\\t\\tspecial.add.call( elem, handleObj );\\n\\n\\t\\t\\t\\tif ( !handleObj.handler.guid ) {\\n\\t\\t\\t\\t\\thandleObj.handler.guid = handler.guid;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Add to the element's handler list, delegates in front\\n\\t\\t\\tif ( selector ) {\\n\\t\\t\\t\\thandlers.splice( handlers.delegateCount++, 0, handleObj );\\n\\t\\t\\t} else {\\n\\t\\t\\t\\thandlers.push( handleObj );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Keep track of which events have ever been used, for event optimization\\n\\t\\t\\tjQuery.event.global[ type ] = true;\\n\\t\\t}\\n\\n\\t},\\n\\n\\t// Detach an event or set of events from an element\\n\\tremove: function( elem, types, handler, selector, mappedTypes ) {\\n\\n\\t\\tvar j, origCount, tmp,\\n\\t\\t\\tevents, t, handleObj,\\n\\t\\t\\tspecial, handlers, type, namespaces, origType,\\n\\t\\t\\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\\n\\n\\t\\tif ( !elemData || !( events = elemData.events ) ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\t// Once for each type.namespace in types; type may be omitted\\n\\t\\ttypes = ( types || \\\"\\\" ).match( rnothtmlwhite ) || [ \\\"\\\" ];\\n\\t\\tt = types.length;\\n\\t\\twhile ( t-- ) {\\n\\t\\t\\ttmp = rtypenamespace.exec( types[ t ] ) || [];\\n\\t\\t\\ttype = origType = tmp[ 1 ];\\n\\t\\t\\tnamespaces = ( tmp[ 2 ] || \\\"\\\" ).split( \\\".\\\" ).sort();\\n\\n\\t\\t\\t// Unbind all events (on this namespace, if provided) for the element\\n\\t\\t\\tif ( !type ) {\\n\\t\\t\\t\\tfor ( type in events ) {\\n\\t\\t\\t\\t\\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tcontinue;\\n\\t\\t\\t}\\n\\n\\t\\t\\tspecial = jQuery.event.special[ type ] || {};\\n\\t\\t\\ttype = ( selector ? special.delegateType : special.bindType ) || type;\\n\\t\\t\\thandlers = events[ type ] || [];\\n\\t\\t\\ttmp = tmp[ 2 ] &&\\n\\t\\t\\t\\tnew RegExp( \\\"(^|\\\\\\\\.)\\\" + namespaces.join( \\\"\\\\\\\\.(?:.*\\\\\\\\.|)\\\" ) + \\\"(\\\\\\\\.|$)\\\" );\\n\\n\\t\\t\\t// Remove matching events\\n\\t\\t\\torigCount = j = handlers.length;\\n\\t\\t\\twhile ( j-- ) {\\n\\t\\t\\t\\thandleObj = handlers[ j ];\\n\\n\\t\\t\\t\\tif ( ( mappedTypes || origType === handleObj.origType ) &&\\n\\t\\t\\t\\t\\t( !handler || handler.guid === handleObj.guid ) &&\\n\\t\\t\\t\\t\\t( !tmp || tmp.test( handleObj.namespace ) ) &&\\n\\t\\t\\t\\t\\t( !selector || selector === handleObj.selector ||\\n\\t\\t\\t\\t\\t\\tselector === \\\"**\\\" && handleObj.selector ) ) {\\n\\t\\t\\t\\t\\thandlers.splice( j, 1 );\\n\\n\\t\\t\\t\\t\\tif ( handleObj.selector ) {\\n\\t\\t\\t\\t\\t\\thandlers.delegateCount--;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif ( special.remove ) {\\n\\t\\t\\t\\t\\t\\tspecial.remove.call( elem, handleObj );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Remove generic event handler if we removed something and no more handlers exist\\n\\t\\t\\t// (avoids potential for endless recursion during removal of special event handlers)\\n\\t\\t\\tif ( origCount && !handlers.length ) {\\n\\t\\t\\t\\tif ( !special.teardown ||\\n\\t\\t\\t\\t\\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\\n\\n\\t\\t\\t\\t\\tjQuery.removeEvent( elem, type, elemData.handle );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tdelete events[ type ];\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Remove data and the expando if it's no longer used\\n\\t\\tif ( jQuery.isEmptyObject( events ) ) {\\n\\t\\t\\tdataPriv.remove( elem, \\\"handle events\\\" );\\n\\t\\t}\\n\\t},\\n\\n\\tdispatch: function( nativeEvent ) {\\n\\n\\t\\tvar i, j, ret, matched, handleObj, handlerQueue,\\n\\t\\t\\targs = new Array( arguments.length ),\\n\\n\\t\\t\\t// Make a writable jQuery.Event from the native event object\\n\\t\\t\\tevent = jQuery.event.fix( nativeEvent ),\\n\\n\\t\\t\\thandlers = (\\n\\t\\t\\t\\tdataPriv.get( this, \\\"events\\\" ) || Object.create( null )\\n\\t\\t\\t)[ event.type ] || [],\\n\\t\\t\\tspecial = jQuery.event.special[ event.type ] || {};\\n\\n\\t\\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\\n\\t\\targs[ 0 ] = event;\\n\\n\\t\\tfor ( i = 1; i < arguments.length; i++ ) {\\n\\t\\t\\targs[ i ] = arguments[ i ];\\n\\t\\t}\\n\\n\\t\\tevent.delegateTarget = this;\\n\\n\\t\\t// Call the preDispatch hook for the mapped type, and let it bail if desired\\n\\t\\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\t// Determine handlers\\n\\t\\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\\n\\n\\t\\t// Run delegates first; they may want to stop propagation beneath us\\n\\t\\ti = 0;\\n\\t\\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\\n\\t\\t\\tevent.currentTarget = matched.elem;\\n\\n\\t\\t\\tj = 0;\\n\\t\\t\\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\\n\\t\\t\\t\\t!event.isImmediatePropagationStopped() ) {\\n\\n\\t\\t\\t\\t// If the event is namespaced, then each handler is only invoked if it is\\n\\t\\t\\t\\t// specially universal or its namespaces are a superset of the event's.\\n\\t\\t\\t\\tif ( !event.rnamespace || handleObj.namespace === false ||\\n\\t\\t\\t\\t\\tevent.rnamespace.test( handleObj.namespace ) ) {\\n\\n\\t\\t\\t\\t\\tevent.handleObj = handleObj;\\n\\t\\t\\t\\t\\tevent.data = handleObj.data;\\n\\n\\t\\t\\t\\t\\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\\n\\t\\t\\t\\t\\t\\thandleObj.handler ).apply( matched.elem, args );\\n\\n\\t\\t\\t\\t\\tif ( ret !== undefined ) {\\n\\t\\t\\t\\t\\t\\tif ( ( event.result = ret ) === false ) {\\n\\t\\t\\t\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t\\t\\t\\t\\tevent.stopPropagation();\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Call the postDispatch hook for the mapped type\\n\\t\\tif ( special.postDispatch ) {\\n\\t\\t\\tspecial.postDispatch.call( this, event );\\n\\t\\t}\\n\\n\\t\\treturn event.result;\\n\\t},\\n\\n\\thandlers: function( event, handlers ) {\\n\\t\\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\\n\\t\\t\\thandlerQueue = [],\\n\\t\\t\\tdelegateCount = handlers.delegateCount,\\n\\t\\t\\tcur = event.target;\\n\\n\\t\\t// Find delegate handlers\\n\\t\\tif ( delegateCount &&\\n\\n\\t\\t\\t// Support: IE <=9\\n\\t\\t\\t// Black-hole SVG <use> instance trees (trac-13180)\\n\\t\\t\\tcur.nodeType &&\\n\\n\\t\\t\\t// Support: Firefox <=42\\n\\t\\t\\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\\n\\t\\t\\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\\n\\t\\t\\t// Support: IE 11 only\\n\\t\\t\\t// ...but not arrow key \\\"clicks\\\" of radio inputs, which can have `button` -1 (gh-2343)\\n\\t\\t\\t!( event.type === \\\"click\\\" && event.button >= 1 ) ) {\\n\\n\\t\\t\\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\\n\\n\\t\\t\\t\\t// Don't check non-elements (trac-13208)\\n\\t\\t\\t\\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\\n\\t\\t\\t\\tif ( cur.nodeType === 1 && !( event.type === \\\"click\\\" && cur.disabled === true ) ) {\\n\\t\\t\\t\\t\\tmatchedHandlers = [];\\n\\t\\t\\t\\t\\tmatchedSelectors = {};\\n\\t\\t\\t\\t\\tfor ( i = 0; i < delegateCount; i++ ) {\\n\\t\\t\\t\\t\\t\\thandleObj = handlers[ i ];\\n\\n\\t\\t\\t\\t\\t\\t// Don't conflict with Object.prototype properties (trac-13203)\\n\\t\\t\\t\\t\\t\\tsel = handleObj.selector + \\\" \\\";\\n\\n\\t\\t\\t\\t\\t\\tif ( matchedSelectors[ sel ] === undefined ) {\\n\\t\\t\\t\\t\\t\\t\\tmatchedSelectors[ sel ] = handleObj.needsContext ?\\n\\t\\t\\t\\t\\t\\t\\t\\tjQuery( sel, this ).index( cur ) > -1 :\\n\\t\\t\\t\\t\\t\\t\\t\\tjQuery.find( sel, this, null, [ cur ] ).length;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\tif ( matchedSelectors[ sel ] ) {\\n\\t\\t\\t\\t\\t\\t\\tmatchedHandlers.push( handleObj );\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif ( matchedHandlers.length ) {\\n\\t\\t\\t\\t\\t\\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Add the remaining (directly-bound) handlers\\n\\t\\tcur = this;\\n\\t\\tif ( delegateCount < handlers.length ) {\\n\\t\\t\\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\\n\\t\\t}\\n\\n\\t\\treturn handlerQueue;\\n\\t},\\n\\n\\taddProp: function( name, hook ) {\\n\\t\\tObject.defineProperty( jQuery.Event.prototype, name, {\\n\\t\\t\\tenumerable: true,\\n\\t\\t\\tconfigurable: true,\\n\\n\\t\\t\\tget: isFunction( hook ) ?\\n\\t\\t\\t\\tfunction() {\\n\\t\\t\\t\\t\\tif ( this.originalEvent ) {\\n\\t\\t\\t\\t\\t\\treturn hook( this.originalEvent );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} :\\n\\t\\t\\t\\tfunction() {\\n\\t\\t\\t\\t\\tif ( this.originalEvent ) {\\n\\t\\t\\t\\t\\t\\treturn this.originalEvent[ name ];\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t},\\n\\n\\t\\t\\tset: function( value ) {\\n\\t\\t\\t\\tObject.defineProperty( this, name, {\\n\\t\\t\\t\\t\\tenumerable: true,\\n\\t\\t\\t\\t\\tconfigurable: true,\\n\\t\\t\\t\\t\\twritable: true,\\n\\t\\t\\t\\t\\tvalue: value\\n\\t\\t\\t\\t} );\\n\\t\\t\\t}\\n\\t\\t} );\\n\\t},\\n\\n\\tfix: function( originalEvent ) {\\n\\t\\treturn originalEvent[ jQuery.expando ] ?\\n\\t\\t\\toriginalEvent :\\n\\t\\t\\tnew jQuery.Event( originalEvent );\\n\\t},\\n\\n\\tspecial: {\\n\\t\\tload: {\\n\\n\\t\\t\\t// Prevent triggered image.load events from bubbling to window.load\\n\\t\\t\\tnoBubble: true\\n\\t\\t},\\n\\t\\tclick: {\\n\\n\\t\\t\\t// Utilize native event to ensure correct state for checkable inputs\\n\\t\\t\\tsetup: function( data ) {\\n\\n\\t\\t\\t\\t// For mutual compressibility with _default, replace `this` access with a local var.\\n\\t\\t\\t\\t// `|| data` is dead code meant only to preserve the variable through minification.\\n\\t\\t\\t\\tvar el = this || data;\\n\\n\\t\\t\\t\\t// Claim the first handler\\n\\t\\t\\t\\tif ( rcheckableType.test( el.type ) &&\\n\\t\\t\\t\\t\\tel.click && nodeName( el, \\\"input\\\" ) ) {\\n\\n\\t\\t\\t\\t\\t// dataPriv.set( el, \\\"click\\\", ... )\\n\\t\\t\\t\\t\\tleverageNative( el, \\\"click\\\", true );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Return false to allow normal processing in the caller\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t},\\n\\t\\t\\ttrigger: function( data ) {\\n\\n\\t\\t\\t\\t// For mutual compressibility with _default, replace `this` access with a local var.\\n\\t\\t\\t\\t// `|| data` is dead code meant only to preserve the variable through minification.\\n\\t\\t\\t\\tvar el = this || data;\\n\\n\\t\\t\\t\\t// Force setup before triggering a click\\n\\t\\t\\t\\tif ( rcheckableType.test( el.type ) &&\\n\\t\\t\\t\\t\\tel.click && nodeName( el, \\\"input\\\" ) ) {\\n\\n\\t\\t\\t\\t\\tleverageNative( el, \\\"click\\\" );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Return non-false to allow normal event-path propagation\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t},\\n\\n\\t\\t\\t// For cross-browser consistency, suppress native .click() on links\\n\\t\\t\\t// Also prevent it if we're currently inside a leveraged native-event stack\\n\\t\\t\\t_default: function( event ) {\\n\\t\\t\\t\\tvar target = event.target;\\n\\t\\t\\t\\treturn rcheckableType.test( target.type ) &&\\n\\t\\t\\t\\t\\ttarget.click && nodeName( target, \\\"input\\\" ) &&\\n\\t\\t\\t\\t\\tdataPriv.get( target, \\\"click\\\" ) ||\\n\\t\\t\\t\\t\\tnodeName( target, \\\"a\\\" );\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tbeforeunload: {\\n\\t\\t\\tpostDispatch: function( event ) {\\n\\n\\t\\t\\t\\t// Support: Firefox 20+\\n\\t\\t\\t\\t// Firefox doesn't alert if the returnValue field is not set.\\n\\t\\t\\t\\tif ( event.result !== undefined && event.originalEvent ) {\\n\\t\\t\\t\\t\\tevent.originalEvent.returnValue = event.result;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n};\\n\\n// Ensure the presence of an event listener that handles manually-triggered\\n// synthetic events by interrupting progress until reinvoked in response to\\n// *native* events that it fires directly, ensuring that state changes have\\n// already occurred before other listeners are invoked.\\nfunction leverageNative( el, type, isSetup ) {\\n\\n\\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\\n\\tif ( !isSetup ) {\\n\\t\\tif ( dataPriv.get( el, type ) === undefined ) {\\n\\t\\t\\tjQuery.event.add( el, type, returnTrue );\\n\\t\\t}\\n\\t\\treturn;\\n\\t}\\n\\n\\t// Register the controller as a special universal handler for all event namespaces\\n\\tdataPriv.set( el, type, false );\\n\\tjQuery.event.add( el, type, {\\n\\t\\tnamespace: false,\\n\\t\\thandler: function( event ) {\\n\\t\\t\\tvar result,\\n\\t\\t\\t\\tsaved = dataPriv.get( this, type );\\n\\n\\t\\t\\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\\n\\n\\t\\t\\t\\t// Interrupt processing of the outer synthetic .trigger()ed event\\n\\t\\t\\t\\tif ( !saved ) {\\n\\n\\t\\t\\t\\t\\t// Store arguments for use when handling the inner native event\\n\\t\\t\\t\\t\\t// There will always be at least one argument (an event object), so this array\\n\\t\\t\\t\\t\\t// will not be confused with a leftover capture object.\\n\\t\\t\\t\\t\\tsaved = slice.call( arguments );\\n\\t\\t\\t\\t\\tdataPriv.set( this, type, saved );\\n\\n\\t\\t\\t\\t\\t// Trigger the native event and capture its result\\n\\t\\t\\t\\t\\tthis[ type ]();\\n\\t\\t\\t\\t\\tresult = dataPriv.get( this, type );\\n\\t\\t\\t\\t\\tdataPriv.set( this, type, false );\\n\\n\\t\\t\\t\\t\\tif ( saved !== result ) {\\n\\n\\t\\t\\t\\t\\t\\t// Cancel the outer synthetic event\\n\\t\\t\\t\\t\\t\\tevent.stopImmediatePropagation();\\n\\t\\t\\t\\t\\t\\tevent.preventDefault();\\n\\n\\t\\t\\t\\t\\t\\treturn result;\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// If this is an inner synthetic event for an event with a bubbling surrogate\\n\\t\\t\\t\\t// (focus or blur), assume that the surrogate already propagated from triggering\\n\\t\\t\\t\\t// the native event and prevent that from happening again here.\\n\\t\\t\\t\\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\\n\\t\\t\\t\\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\\n\\t\\t\\t\\t// less bad than duplication.\\n\\t\\t\\t\\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\\n\\t\\t\\t\\t\\tevent.stopPropagation();\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t// If this is a native event triggered above, everything is now in order\\n\\t\\t\\t// Fire an inner synthetic event with the original arguments\\n\\t\\t\\t} else if ( saved ) {\\n\\n\\t\\t\\t\\t// ...and capture the result\\n\\t\\t\\t\\tdataPriv.set( this, type, jQuery.event.trigger(\\n\\t\\t\\t\\t\\tsaved[ 0 ],\\n\\t\\t\\t\\t\\tsaved.slice( 1 ),\\n\\t\\t\\t\\t\\tthis\\n\\t\\t\\t\\t) );\\n\\n\\t\\t\\t\\t// Abort handling of the native event by all jQuery handlers while allowing\\n\\t\\t\\t\\t// native handlers on the same element to run. On target, this is achieved\\n\\t\\t\\t\\t// by stopping immediate propagation just on the jQuery event. However,\\n\\t\\t\\t\\t// the native event is re-wrapped by a jQuery one on each level of the\\n\\t\\t\\t\\t// propagation so the only way to stop it for jQuery is to stop it for\\n\\t\\t\\t\\t// everyone via native `stopPropagation()`. This is not a problem for\\n\\t\\t\\t\\t// focus/blur which don't bubble, but it does also stop click on checkboxes\\n\\t\\t\\t\\t// and radios. We accept this limitation.\\n\\t\\t\\t\\tevent.stopPropagation();\\n\\t\\t\\t\\tevent.isImmediatePropagationStopped = returnTrue;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} );\\n}\\n\\njQuery.removeEvent = function( elem, type, handle ) {\\n\\n\\t// This \\\"if\\\" is needed for plain objects\\n\\tif ( elem.removeEventListener ) {\\n\\t\\telem.removeEventListener( type, handle );\\n\\t}\\n};\\n\\njQuery.Event = function( src, props ) {\\n\\n\\t// Allow instantiation without the 'new' keyword\\n\\tif ( !( this instanceof jQuery.Event ) ) {\\n\\t\\treturn new jQuery.Event( src, props );\\n\\t}\\n\\n\\t// Event object\\n\\tif ( src && src.type ) {\\n\\t\\tthis.originalEvent = src;\\n\\t\\tthis.type = src.type;\\n\\n\\t\\t// Events bubbling up the document may have been marked as prevented\\n\\t\\t// by a handler lower down the tree; reflect the correct value.\\n\\t\\tthis.isDefaultPrevented = src.defaultPrevented ||\\n\\t\\t\\t\\tsrc.defaultPrevented === undefined &&\\n\\n\\t\\t\\t\\t// Support: Android <=2.3 only\\n\\t\\t\\t\\tsrc.returnValue === false ?\\n\\t\\t\\treturnTrue :\\n\\t\\t\\treturnFalse;\\n\\n\\t\\t// Create target properties\\n\\t\\t// Support: Safari <=6 - 7 only\\n\\t\\t// Target should not be a text node (trac-504, trac-13143)\\n\\t\\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\\n\\t\\t\\tsrc.target.parentNode :\\n\\t\\t\\tsrc.target;\\n\\n\\t\\tthis.currentTarget = src.currentTarget;\\n\\t\\tthis.relatedTarget = src.relatedTarget;\\n\\n\\t// Event type\\n\\t} else {\\n\\t\\tthis.type = src;\\n\\t}\\n\\n\\t// Put explicitly provided properties onto the event object\\n\\tif ( props ) {\\n\\t\\tjQuery.extend( this, props );\\n\\t}\\n\\n\\t// Create a timestamp if incoming event doesn't have one\\n\\tthis.timeStamp = src && src.timeStamp || Date.now();\\n\\n\\t// Mark it as fixed\\n\\tthis[ jQuery.expando ] = true;\\n};\\n\\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\\njQuery.Event.prototype = {\\n\\tconstructor: jQuery.Event,\\n\\tisDefaultPrevented: returnFalse,\\n\\tisPropagationStopped: returnFalse,\\n\\tisImmediatePropagationStopped: returnFalse,\\n\\tisSimulated: false,\\n\\n\\tpreventDefault: function() {\\n\\t\\tvar e = this.originalEvent;\\n\\n\\t\\tthis.isDefaultPrevented = returnTrue;\\n\\n\\t\\tif ( e && !this.isSimulated ) {\\n\\t\\t\\te.preventDefault();\\n\\t\\t}\\n\\t},\\n\\tstopPropagation: function() {\\n\\t\\tvar e = this.originalEvent;\\n\\n\\t\\tthis.isPropagationStopped = returnTrue;\\n\\n\\t\\tif ( e && !this.isSimulated ) {\\n\\t\\t\\te.stopPropagation();\\n\\t\\t}\\n\\t},\\n\\tstopImmediatePropagation: function() {\\n\\t\\tvar e = this.originalEvent;\\n\\n\\t\\tthis.isImmediatePropagationStopped = returnTrue;\\n\\n\\t\\tif ( e && !this.isSimulated ) {\\n\\t\\t\\te.stopImmediatePropagation();\\n\\t\\t}\\n\\n\\t\\tthis.stopPropagation();\\n\\t}\\n};\\n\\n// Includes all common event props including KeyEvent and MouseEvent specific props\\njQuery.each( {\\n\\taltKey: true,\\n\\tbubbles: true,\\n\\tcancelable: true,\\n\\tchangedTouches: true,\\n\\tctrlKey: true,\\n\\tdetail: true,\\n\\teventPhase: true,\\n\\tmetaKey: true,\\n\\tpageX: true,\\n\\tpageY: true,\\n\\tshiftKey: true,\\n\\tview: true,\\n\\t\\\"char\\\": true,\\n\\tcode: true,\\n\\tcharCode: true,\\n\\tkey: true,\\n\\tkeyCode: true,\\n\\tbutton: true,\\n\\tbuttons: true,\\n\\tclientX: true,\\n\\tclientY: true,\\n\\toffsetX: true,\\n\\toffsetY: true,\\n\\tpointerId: true,\\n\\tpointerType: true,\\n\\tscreenX: true,\\n\\tscreenY: true,\\n\\ttargetTouches: true,\\n\\ttoElement: true,\\n\\ttouches: true,\\n\\twhich: true\\n}, jQuery.event.addProp );\\n\\njQuery.each( { focus: \\\"focusin\\\", blur: \\\"focusout\\\" }, function( type, delegateType ) {\\n\\n\\tfunction focusMappedHandler( nativeEvent ) {\\n\\t\\tif ( document.documentMode ) {\\n\\n\\t\\t\\t// Support: IE 11+\\n\\t\\t\\t// Attach a single focusin/focusout handler on the document while someone wants\\n\\t\\t\\t// focus/blur. This is because the former are synchronous in IE while the latter\\n\\t\\t\\t// are async. In other browsers, all those handlers are invoked synchronously.\\n\\n\\t\\t\\t// `handle` from private data would already wrap the event, but we need\\n\\t\\t\\t// to change the `type` here.\\n\\t\\t\\tvar handle = dataPriv.get( this, \\\"handle\\\" ),\\n\\t\\t\\t\\tevent = jQuery.event.fix( nativeEvent );\\n\\t\\t\\tevent.type = nativeEvent.type === \\\"focusin\\\" ? \\\"focus\\\" : \\\"blur\\\";\\n\\t\\t\\tevent.isSimulated = true;\\n\\n\\t\\t\\t// First, handle focusin/focusout\\n\\t\\t\\thandle( nativeEvent );\\n\\n\\t\\t\\t// ...then, handle focus/blur\\n\\t\\t\\t//\\n\\t\\t\\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\\n\\t\\t\\t// invoking the handler at the lower level.\\n\\t\\t\\tif ( event.target === event.currentTarget ) {\\n\\n\\t\\t\\t\\t// The setup part calls `leverageNative`, which, in turn, calls\\n\\t\\t\\t\\t// `jQuery.event.add`, so event handle will already have been set\\n\\t\\t\\t\\t// by this point.\\n\\t\\t\\t\\thandle( event );\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\n\\t\\t\\t// For non-IE browsers, attach a single capturing handler on the document\\n\\t\\t\\t// while someone wants focusin/focusout.\\n\\t\\t\\tjQuery.event.simulate( delegateType, nativeEvent.target,\\n\\t\\t\\t\\tjQuery.event.fix( nativeEvent ) );\\n\\t\\t}\\n\\t}\\n\\n\\tjQuery.event.special[ type ] = {\\n\\n\\t\\t// Utilize native event if possible so blur/focus sequence is correct\\n\\t\\tsetup: function() {\\n\\n\\t\\t\\tvar attaches;\\n\\n\\t\\t\\t// Claim the first handler\\n\\t\\t\\t// dataPriv.set( this, \\\"focus\\\", ... )\\n\\t\\t\\t// dataPriv.set( this, \\\"blur\\\", ... )\\n\\t\\t\\tleverageNative( this, type, true );\\n\\n\\t\\t\\tif ( document.documentMode ) {\\n\\n\\t\\t\\t\\t// Support: IE 9 - 11+\\n\\t\\t\\t\\t// We use the same native handler for focusin & focus (and focusout & blur)\\n\\t\\t\\t\\t// so we need to coordinate setup & teardown parts between those events.\\n\\t\\t\\t\\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\\n\\t\\t\\t\\tattaches = dataPriv.get( this, delegateType );\\n\\t\\t\\t\\tif ( !attaches ) {\\n\\t\\t\\t\\t\\tthis.addEventListener( delegateType, focusMappedHandler );\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\\n\\t\\t\\t} else {\\n\\n\\t\\t\\t\\t// Return false to allow normal processing in the caller\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\ttrigger: function() {\\n\\n\\t\\t\\t// Force setup before trigger\\n\\t\\t\\tleverageNative( this, type );\\n\\n\\t\\t\\t// Return non-false to allow normal event-path propagation\\n\\t\\t\\treturn true;\\n\\t\\t},\\n\\n\\t\\tteardown: function() {\\n\\t\\t\\tvar attaches;\\n\\n\\t\\t\\tif ( document.documentMode ) {\\n\\t\\t\\t\\tattaches = dataPriv.get( this, delegateType ) - 1;\\n\\t\\t\\t\\tif ( !attaches ) {\\n\\t\\t\\t\\t\\tthis.removeEventListener( delegateType, focusMappedHandler );\\n\\t\\t\\t\\t\\tdataPriv.remove( this, delegateType );\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tdataPriv.set( this, delegateType, attaches );\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\n\\t\\t\\t\\t// Return false to indicate standard teardown should be applied\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\t// Suppress native focus or blur if we're currently inside\\n\\t\\t// a leveraged native-event stack\\n\\t\\t_default: function( event ) {\\n\\t\\t\\treturn dataPriv.get( event.target, type );\\n\\t\\t},\\n\\n\\t\\tdelegateType: delegateType\\n\\t};\\n\\n\\t// Support: Firefox <=44\\n\\t// Firefox doesn't have focus(in | out) events\\n\\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\\n\\t//\\n\\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\\n\\t// focus(in | out) events fire after focus & blur events,\\n\\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\\n\\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\\n\\t//\\n\\t// Support: IE 9 - 11+\\n\\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\\n\\t// attach a single handler for both events in IE.\\n\\tjQuery.event.special[ delegateType ] = {\\n\\t\\tsetup: function() {\\n\\n\\t\\t\\t// Handle: regular nodes (via `this.ownerDocument`), window\\n\\t\\t\\t// (via `this.document`) & document (via `this`).\\n\\t\\t\\tvar doc = this.ownerDocument || this.document || this,\\n\\t\\t\\t\\tdataHolder = document.documentMode ? this : doc,\\n\\t\\t\\t\\tattaches = dataPriv.get( dataHolder, delegateType );\\n\\n\\t\\t\\t// Support: IE 9 - 11+\\n\\t\\t\\t// We use the same native handler for focusin & focus (and focusout & blur)\\n\\t\\t\\t// so we need to coordinate setup & teardown parts between those events.\\n\\t\\t\\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\\n\\t\\t\\tif ( !attaches ) {\\n\\t\\t\\t\\tif ( document.documentMode ) {\\n\\t\\t\\t\\t\\tthis.addEventListener( delegateType, focusMappedHandler );\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tdoc.addEventListener( type, focusMappedHandler, true );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\\n\\t\\t},\\n\\t\\tteardown: function() {\\n\\t\\t\\tvar doc = this.ownerDocument || this.document || this,\\n\\t\\t\\t\\tdataHolder = document.documentMode ? this : doc,\\n\\t\\t\\t\\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\\n\\n\\t\\t\\tif ( !attaches ) {\\n\\t\\t\\t\\tif ( document.documentMode ) {\\n\\t\\t\\t\\t\\tthis.removeEventListener( delegateType, focusMappedHandler );\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tdoc.removeEventListener( type, focusMappedHandler, true );\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tdataPriv.remove( dataHolder, delegateType );\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tdataPriv.set( dataHolder, delegateType, attaches );\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n} );\\n\\n// Create mouseenter/leave events using mouseover/out and event-time checks\\n// so that event delegation works in jQuery.\\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\\n//\\n// Support: Safari 7 only\\n// Safari sends mouseenter too often; see:\\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\\n// for the description of the bug (it existed in older Chrome versions as well).\\njQuery.each( {\\n\\tmouseenter: \\\"mouseover\\\",\\n\\tmouseleave: \\\"mouseout\\\",\\n\\tpointerenter: \\\"pointerover\\\",\\n\\tpointerleave: \\\"pointerout\\\"\\n}, function( orig, fix ) {\\n\\tjQuery.event.special[ orig ] = {\\n\\t\\tdelegateType: fix,\\n\\t\\tbindType: fix,\\n\\n\\t\\thandle: function( event ) {\\n\\t\\t\\tvar ret,\\n\\t\\t\\t\\ttarget = this,\\n\\t\\t\\t\\trelated = event.relatedTarget,\\n\\t\\t\\t\\thandleObj = event.handleObj;\\n\\n\\t\\t\\t// For mouseenter/leave call the handler if related is outside the target.\\n\\t\\t\\t// NB: No relatedTarget if the mouse left/entered the browser window\\n\\t\\t\\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\\n\\t\\t\\t\\tevent.type = handleObj.origType;\\n\\t\\t\\t\\tret = handleObj.handler.apply( this, arguments );\\n\\t\\t\\t\\tevent.type = fix;\\n\\t\\t\\t}\\n\\t\\t\\treturn ret;\\n\\t\\t}\\n\\t};\\n} );\\n\\njQuery.fn.extend( {\\n\\n\\ton: function( types, selector, data, fn ) {\\n\\t\\treturn on( this, types, selector, data, fn );\\n\\t},\\n\\tone: function( types, selector, data, fn ) {\\n\\t\\treturn on( this, types, selector, data, fn, 1 );\\n\\t},\\n\\toff: function( types, selector, fn ) {\\n\\t\\tvar handleObj, type;\\n\\t\\tif ( types && types.preventDefault && types.handleObj ) {\\n\\n\\t\\t\\t// ( event )  dispatched jQuery.Event\\n\\t\\t\\thandleObj = types.handleObj;\\n\\t\\t\\tjQuery( types.delegateTarget ).off(\\n\\t\\t\\t\\thandleObj.namespace ?\\n\\t\\t\\t\\t\\thandleObj.origType + \\\".\\\" + handleObj.namespace :\\n\\t\\t\\t\\t\\thandleObj.origType,\\n\\t\\t\\t\\thandleObj.selector,\\n\\t\\t\\t\\thandleObj.handler\\n\\t\\t\\t);\\n\\t\\t\\treturn this;\\n\\t\\t}\\n\\t\\tif ( typeof types === \\\"object\\\" ) {\\n\\n\\t\\t\\t// ( types-object [, selector] )\\n\\t\\t\\tfor ( type in types ) {\\n\\t\\t\\t\\tthis.off( type, selector, types[ type ] );\\n\\t\\t\\t}\\n\\t\\t\\treturn this;\\n\\t\\t}\\n\\t\\tif ( selector === false || typeof selector === \\\"function\\\" ) {\\n\\n\\t\\t\\t// ( types [, fn] )\\n\\t\\t\\tfn = selector;\\n\\t\\t\\tselector = undefined;\\n\\t\\t}\\n\\t\\tif ( fn === false ) {\\n\\t\\t\\tfn = returnFalse;\\n\\t\\t}\\n\\t\\treturn this.each( function() {\\n\\t\\t\\tjQuery.event.remove( this, types, fn, selector );\\n\\t\\t} );\\n\\t}\\n} );\\n\\n\\nvar\\n\\n\\t// Support: IE <=10 - 11, Edge 12 - 13 only\\n\\t// In IE/Edge using regex groups here causes severe slowdowns.\\n\\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\\n\\trnoInnerhtml = /<script|<style|<link/i,\\n\\n\\t// checked=\\\"checked\\\" or checked\\n\\trchecked = /checked\\\\s*(?:[^=]|=\\\\s*.checked.)/i,\\n\\n\\trcleanScript = /^\\\\s*<!\\\\[CDATA\\\\[|\\\\]\\\\]>\\\\s*$/g;\\n\\n// Prefer a tbody over its parent table for containing new rows\\nfunction manipulationTarget( elem, content ) {\\n\\tif ( nodeName( elem, \\\"table\\\" ) &&\\n\\t\\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \\\"tr\\\" ) ) {\\n\\n\\t\\treturn jQuery( elem ).children( \\\"tbody\\\" )[ 0 ] || elem;\\n\\t}\\n\\n\\treturn elem;\\n}\\n\\n// Replace/restore the type attribute of script elements for safe DOM manipulation\\nfunction disableScript( elem ) {\\n\\telem.type = ( elem.getAttribute( \\\"type\\\" ) !== null ) + \\\"/\\\" + elem.type;\\n\\treturn elem;\\n}\\nfunction restoreScript( elem ) {\\n\\tif ( ( elem.type || \\\"\\\" ).slice( 0, 5 ) === \\\"true/\\\" ) {\\n\\t\\telem.type = elem.type.slice( 5 );\\n\\t} else {\\n\\t\\telem.removeAttribute( \\\"type\\\" );\\n\\t}\\n\\n\\treturn elem;\\n}\\n\\nfunction cloneCopyEvent( src, dest ) {\\n\\tvar i, l, type, pdataOld, udataOld, udataCur, events;\\n\\n\\tif ( dest.nodeType !== 1 ) {\\n\\t\\treturn;\\n\\t}\\n\\n\\t// 1. Copy private data: events, handlers, etc.\\n\\tif ( dataPriv.hasData( src ) ) {\\n\\t\\tpdataOld = dataPriv.get( src );\\n\\t\\tevents = pdataOld.events;\\n\\n\\t\\tif ( events ) {\\n\\t\\t\\tdataPriv.remove( dest, \\\"handle events\\\" );\\n\\n\\t\\t\\tfor ( type in events ) {\\n\\t\\t\\t\\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\\n\\t\\t\\t\\t\\tjQuery.event.add( dest, type, events[ type ][ i ] );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t// 2. Copy user data\\n\\tif ( dataUser.hasData( src ) ) {\\n\\t\\tudataOld = dataUser.access( src );\\n\\t\\tudataCur = jQuery.extend( {}, udataOld );\\n\\n\\t\\tdataUser.set( dest, udataCur );\\n\\t}\\n}\\n\\n// Fix IE bugs, see support tests\\nfunction fixInput( src, dest ) {\\n\\tvar nodeName = dest.nodeName.toLowerCase();\\n\\n\\t// Fails to persist the checked state of a cloned checkbox or radio button.\\n\\tif ( nodeName === \\\"input\\\" && rcheckableType.test( src.type ) ) {\\n\\t\\tdest.checked = src.checked;\\n\\n\\t// Fails to return the selected option to the default selected state when cloning options\\n\\t} else if ( nodeName === \\\"input\\\" || nodeName === \\\"textarea\\\" ) {\\n\\t\\tdest.defaultValue = src.defaultValue;\\n\\t}\\n}\\n\\nfunction domManip( collection, args, callback, ignored ) {\\n\\n\\t// Flatten any nested arrays\\n\\targs = flat( args );\\n\\n\\tvar fragment, first, scripts, hasScripts, node, doc,\\n\\t\\ti = 0,\\n\\t\\tl = collection.length,\\n\\t\\tiNoClone = l - 1,\\n\\t\\tvalue = args[ 0 ],\\n\\t\\tvalueIsFunction = isFunction( value );\\n\\n\\t// We can't cloneNode fragments that contain checked, in WebKit\\n\\tif ( valueIsFunction ||\\n\\t\\t\\t( l > 1 && typeof value === \\\"string\\\" &&\\n\\t\\t\\t\\t!support.checkClone && rchecked.test( value ) ) ) {\\n\\t\\treturn collection.each( function( index ) {\\n\\t\\t\\tvar self = collection.eq( index );\\n\\t\\t\\tif ( valueIsFunction ) {\\n\\t\\t\\t\\targs[ 0 ] = value.call( this, index, self.html() );\\n\\t\\t\\t}\\n\\t\\t\\tdomManip( self, args, callback, ignored );\\n\\t\\t} );\\n\\t}\\n\\n\\tif ( l ) {\\n\\t\\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\\n\\t\\tfirst = fragment.firstChild;\\n\\n\\t\\tif ( fragment.childNodes.length === 1 ) {\\n\\t\\t\\tfragment = first;\\n\\t\\t}\\n\\n\\t\\t// Require either new content or an interest in ignored elements to invoke the callback\\n\\t\\tif ( first || ignored ) {\\n\\t\\t\\tscripts = jQuery.map( getAll( fragment, \\\"script\\\" ), disableScript );\\n\\t\\t\\thasScripts = scripts.length;\\n\\n\\t\\t\\t// Use the original fragment for the last item\\n\\t\\t\\t// instead of the first because it can end up\\n\\t\\t\\t// being emptied incorrectly in certain situations (trac-8070).\\n\\t\\t\\tfor ( ; i < l; i++ ) {\\n\\t\\t\\t\\tnode = fragment;\\n\\n\\t\\t\\t\\tif ( i !== iNoClone ) {\\n\\t\\t\\t\\t\\tnode = jQuery.clone( node, true, true );\\n\\n\\t\\t\\t\\t\\t// Keep references to cloned scripts for later restoration\\n\\t\\t\\t\\t\\tif ( hasScripts ) {\\n\\n\\t\\t\\t\\t\\t\\t// Support: Android <=4.0 only, PhantomJS 1 only\\n\\t\\t\\t\\t\\t\\t// push.apply(_, arraylike) throws on ancient WebKit\\n\\t\\t\\t\\t\\t\\tjQuery.merge( scripts, getAll( node, \\\"script\\\" ) );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tcallback.call( collection[ i ], node, i );\\n\\t\\t\\t}\\n\\n\\t\\t\\tif ( hasScripts ) {\\n\\t\\t\\t\\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\\n\\n\\t\\t\\t\\t// Re-enable scripts\\n\\t\\t\\t\\tjQuery.map( scripts, restoreScript );\\n\\n\\t\\t\\t\\t// Evaluate executable scripts on first document insertion\\n\\t\\t\\t\\tfor ( i = 0; i < hasScripts; i++ ) {\\n\\t\\t\\t\\t\\tnode = scripts[ i ];\\n\\t\\t\\t\\t\\tif ( rscriptType.test( node.type || \\\"\\\" ) &&\\n\\t\\t\\t\\t\\t\\t!dataPriv.access( node, \\\"globalEval\\\" ) &&\\n\\t\\t\\t\\t\\t\\tjQuery.contains( doc, node ) ) {\\n\\n\\t\\t\\t\\t\\t\\tif ( node.src && ( node.type || \\\"\\\" ).toLowerCase()  !== \\\"module\\\" ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t// Optional AJAX dependency, but won't run scripts if not present\\n\\t\\t\\t\\t\\t\\t\\tif ( jQuery._evalUrl && !node.noModule ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tjQuery._evalUrl( node.src, {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tnonce: node.nonce || node.getAttribute( \\\"nonce\\\" )\\n\\t\\t\\t\\t\\t\\t\\t\\t}, doc );\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t} else {\\n\\n\\t\\t\\t\\t\\t\\t\\t// Unwrap a CDATA section containing script contents. This shouldn't be\\n\\t\\t\\t\\t\\t\\t\\t// needed as in XML documents they're already not visible when\\n\\t\\t\\t\\t\\t\\t\\t// inspecting element contents and in HTML documents they have no\\n\\t\\t\\t\\t\\t\\t\\t// meaning but we're preserving that logic for backwards compatibility.\\n\\t\\t\\t\\t\\t\\t\\t// This will be removed completely in 4.0. See gh-4904.\\n\\t\\t\\t\\t\\t\\t\\tDOMEval( node.textContent.replace( rcleanScript, \\\"\\\" ), node, doc );\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\treturn collection;\\n}\\n\\nfunction remove( elem, selector, keepData ) {\\n\\tvar node,\\n\\t\\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\\n\\t\\ti = 0;\\n\\n\\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\\n\\t\\tif ( !keepData && node.nodeType === 1 ) {\\n\\t\\t\\tjQuery.cleanData( getAll( node ) );\\n\\t\\t}\\n\\n\\t\\tif ( node.parentNode ) {\\n\\t\\t\\tif ( keepData && isAttached( node ) ) {\\n\\t\\t\\t\\tsetGlobalEval( getAll( node, \\\"script\\\" ) );\\n\\t\\t\\t}\\n\\t\\t\\tnode.parentNode.removeChild( node );\\n\\t\\t}\\n\\t}\\n\\n\\treturn elem;\\n}\\n\\njQuery.extend( {\\n\\thtmlPrefilter: function( html ) {\\n\\t\\treturn html;\\n\\t},\\n\\n\\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\\n\\t\\tvar i, l, srcElements, destElements,\\n\\t\\t\\tclone = elem.cloneNode( true ),\\n\\t\\t\\tinPage = isAttached( elem );\\n\\n\\t\\t// Fix IE cloning issues\\n\\t\\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\\n\\t\\t\\t\\t!jQuery.isXMLDoc( elem ) ) {\\n\\n\\t\\t\\t// We eschew jQuery#find here for performance reasons:\\n\\t\\t\\t// https://jsperf.com/getall-vs-sizzle/2\\n\\t\\t\\tdestElements = getAll( clone );\\n\\t\\t\\tsrcElements = getAll( elem );\\n\\n\\t\\t\\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\\n\\t\\t\\t\\tfixInput( srcElements[ i ], destElements[ i ] );\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Copy the events from the original to the clone\\n\\t\\tif ( dataAndEvents ) {\\n\\t\\t\\tif ( deepDataAndEvents ) {\\n\\t\\t\\t\\tsrcElements = srcElements || getAll( elem );\\n\\t\\t\\t\\tdestElements = destElements || getAll( clone );\\n\\n\\t\\t\\t\\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\\n\\t\\t\\t\\t\\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tcloneCopyEvent( elem, clone );\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Preserve script evaluation history\\n\\t\\tdestElements = getAll( clone, \\\"script\\\" );\\n\\t\\tif ( destElements.length > 0 ) {\\n\\t\\t\\tsetGlobalEval( destElements, !inPage && getAll( elem, \\\"script\\\" ) );\\n\\t\\t}\\n\\n\\t\\t// Return the cloned set\\n\\t\\treturn clone;\\n\\t},\\n\\n\\tcleanData: function( elems ) {\\n\\t\\tvar data, elem, type,\\n\\t\\t\\tspecial = jQuery.event.special,\\n\\t\\t\\ti = 0;\\n\\n\\t\\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\\n\\t\\t\\tif ( acceptData( elem ) ) {\\n\\t\\t\\t\\tif ( ( data = elem[ dataPriv.expando ] ) ) {\\n\\t\\t\\t\\t\\tif ( data.events ) {\\n\\t\\t\\t\\t\\t\\tfor ( type in data.events ) {\\n\\t\\t\\t\\t\\t\\t\\tif ( special[ type ] ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tjQuery.event.remove( elem, type );\\n\\n\\t\\t\\t\\t\\t\\t\\t// This is a shortcut to avoid jQuery.event.remove's overhead\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tjQuery.removeEvent( elem, type, data.handle );\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t// Support: Chrome <=35 - 45+\\n\\t\\t\\t\\t\\t// Assign undefined instead of using delete, see Data#remove\\n\\t\\t\\t\\t\\telem[ dataPriv.expando ] = undefined;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif ( elem[ dataUser.expando ] ) {\\n\\n\\t\\t\\t\\t\\t// Support: Chrome <=35 - 45+\\n\\t\\t\\t\\t\\t// Assign undefined instead of using delete, see Data#remove\\n\\t\\t\\t\\t\\telem[ dataUser.expando ] = undefined;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n} );\\n\\njQuery.fn.extend( {\\n\\tdetach: function( selector ) {\\n\\t\\treturn remove( this, selector, true );\\n\\t},\\n\\n\\tremove: function( selector ) {\\n\\t\\treturn remove( this, selector );\\n\\t},\\n\\n\\ttext: function( value ) {\\n\\t\\treturn access( this, function( value ) {\\n\\t\\t\\treturn value === undefined ?\\n\\t\\t\\t\\tjQuery.text( this ) :\\n\\t\\t\\t\\tthis.empty().each( function() {\\n\\t\\t\\t\\t\\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\\n\\t\\t\\t\\t\\t\\tthis.textContent = value;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} );\\n\\t\\t}, null, value, arguments.length );\\n\\t},\\n\\n\\tappend: function() {\\n\\t\\treturn domManip( this, arguments, function( elem ) {\\n\\t\\t\\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\\n\\t\\t\\t\\tvar target = manipulationTarget( this, elem );\\n\\t\\t\\t\\ttarget.appendChild( elem );\\n\\t\\t\\t}\\n\\t\\t} );\\n\\t},\\n\\n\\tprepend: function() {\\n\\t\\treturn domManip( this, arguments, function( elem ) {\\n\\t\\t\\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\\n\\t\\t\\t\\tvar target = manipulationTarget( this, elem );\\n\\t\\t\\t\\ttarget.insertBefore( elem, target.firstChild );\\n\\t\\t\\t}\\n\\t\\t} );\\n\\t},\\n\\n\\tbefore: function() {\\n\\t\\treturn domManip( this, arguments, function( elem ) {\\n\\t\\t\\tif ( this.parentNode ) {\\n\\t\\t\\t\\tthis.parentNode.insertBefore( elem, this );\\n\\t\\t\\t}\\n\\t\\t} );\\n\\t},\\n\\n\\tafter: function() {\\n\\t\\treturn domManip( this, arguments, function( elem ) {\\n\\t\\t\\tif ( this.parentNode ) {\\n\\t\\t\\t\\tthis.parentNode.insertBefore( elem, this.nextSibling );\\n\\t\\t\\t}\\n\\t\\t} );\\n\\t},\\n\\n\\tempty: function() {\\n\\t\\tvar elem,\\n\\t\\t\\ti = 0;\\n\\n\\t\\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\\n\\t\\t\\tif ( elem.nodeType === 1 ) {\\n\\n\\t\\t\\t\\t// Prevent memory leaks\\n\\t\\t\\t\\tjQuery.cleanData( getAll( elem, false ) );\\n\\n\\t\\t\\t\\t// Remove any remaining nodes\\n\\t\\t\\t\\telem.textContent = \\\"\\\";\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t},\\n\\n\\tclone: function( dataAndEvents, deepDataAndEvents ) {\\n\\t\\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\\n\\t\\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\\n\\n\\t\\treturn this.map( function() {\\n\\t\\t\\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\\n\\t\\t} );\\n\\t},\\n\\n\\thtml: function( value ) {\\n\\t\\treturn access( this, function( value ) {\\n\\t\\t\\tvar elem = this[ 0 ] || {},\\n\\t\\t\\t\\ti = 0,\\n\\t\\t\\t\\tl = this.length;\\n\\n\\t\\t\\tif ( value === undefined && elem.nodeType === 1 ) {\\n\\t\\t\\t\\treturn elem.innerHTML;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// See if we can take a shortcut and just use innerHTML\\n\\t\\t\\tif ( typeof value === \\\"string\\\" && !rnoInnerhtml.test( value ) &&\\n\\t\\t\\t\\t!wrapMap[ ( rtagName.exec( value ) || [ \\\"\\\", \\\"\\\" ] )[ 1 ].toLowerCase() ] ) {\\n\\n\\t\\t\\t\\tvalue = jQuery.htmlPrefilter( value );\\n\\n\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\tfor ( ; i < l; i++ ) {\\n\\t\\t\\t\\t\\t\\telem = this[ i ] || {};\\n\\n\\t\\t\\t\\t\\t\\t// Remove element nodes and prevent memory leaks\\n\\t\\t\\t\\t\\t\\tif ( elem.nodeType === 1 ) {\\n\\t\\t\\t\\t\\t\\t\\tjQuery.cleanData( getAll( elem, false ) );\\n\\t\\t\\t\\t\\t\\t\\telem.innerHTML = value;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\telem = 0;\\n\\n\\t\\t\\t\\t// If using innerHTML throws an exception, use the fallback method\\n\\t\\t\\t\\t} catch ( e ) {}\\n\\t\\t\\t}\\n\\n\\t\\t\\tif ( elem ) {\\n\\t\\t\\t\\tthis.empty().append( value );\\n\\t\\t\\t}\\n\\t\\t}, null, value, arguments.length );\\n\\t},\\n\\n\\treplaceWith: function() {\\n\\t\\tvar ignored = [];\\n\\n\\t\\t// Make the changes, replacing each non-ignored context element with the new content\\n\\t\\treturn domManip( this, arguments, function( elem ) {\\n\\t\\t\\tvar parent = this.parentNode;\\n\\n\\t\\t\\tif ( jQuery.inArray( this, ignored ) < 0 ) {\\n\\t\\t\\t\\tjQuery.cleanData( getAll( this ) );\\n\\t\\t\\t\\tif ( parent ) {\\n\\t\\t\\t\\t\\tparent.replaceChild( elem, this );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t// Force callback invocation\\n\\t\\t}, ignored );\\n\\t}\\n} );\\n\\njQuery.each( {\\n\\tappendTo: \\\"append\\\",\\n\\tprependTo: \\\"prepend\\\",\\n\\tinsertBefore: \\\"before\\\",\\n\\tinsertAfter: \\\"after\\\",\\n\\treplaceAll: \\\"replaceWith\\\"\\n}, function( name, original ) {\\n\\tjQuery.fn[ name ] = function( selector ) {\\n\\t\\tvar elems,\\n\\t\\t\\tret = [],\\n\\t\\t\\tinsert = jQuery( selector ),\\n\\t\\t\\tlast = insert.length - 1,\\n\\t\\t\\ti = 0;\\n\\n\\t\\tfor ( ; i <= last; i++ ) {\\n\\t\\t\\telems = i === last ? this : this.clone( true );\\n\\t\\t\\tjQuery( insert[ i ] )[ original ]( elems );\\n\\n\\t\\t\\t// Support: Android <=4.0 only, PhantomJS 1 only\\n\\t\\t\\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\\n\\t\\t\\tpush.apply( ret, elems.get() );\\n\\t\\t}\\n\\n\\t\\treturn this.pushStack( ret );\\n\\t};\\n} );\\nvar rnumnonpx = new RegExp( \\\"^(\\\" + pnum + \\\")(?!px)[a-z%]+$\\\", \\\"i\\\" );\\n\\nvar rcustomProp = /^--/;\\n\\n\\nvar getStyles = function( elem ) {\\n\\n\\t\\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\\n\\t\\t// IE throws on elements created in popups\\n\\t\\t// FF meanwhile throws on frame elements through \\\"defaultView.getComputedStyle\\\"\\n\\t\\tvar view = elem.ownerDocument.defaultView;\\n\\n\\t\\tif ( !view || !view.opener ) {\\n\\t\\t\\tview = window;\\n\\t\\t}\\n\\n\\t\\treturn view.getComputedStyle( elem );\\n\\t};\\n\\nvar swap = function( elem, options, callback ) {\\n\\tvar ret, name,\\n\\t\\told = {};\\n\\n\\t// Remember the old values, and insert the new ones\\n\\tfor ( name in options ) {\\n\\t\\told[ name ] = elem.style[ name ];\\n\\t\\telem.style[ name ] = options[ name ];\\n\\t}\\n\\n\\tret = callback.call( elem );\\n\\n\\t// Revert the old values\\n\\tfor ( name in options ) {\\n\\t\\telem.style[ name ] = old[ name ];\\n\\t}\\n\\n\\treturn ret;\\n};\\n\\n\\nvar rboxStyle = new RegExp( cssExpand.join( \\\"|\\\" ), \\\"i\\\" );\\n\\n\\n\\n( function() {\\n\\n\\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\\n\\t// so they're executed at the same time to save the second computation.\\n\\tfunction computeStyleTests() {\\n\\n\\t\\t// This is a singleton, we need to execute it only once\\n\\t\\tif ( !div ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\tcontainer.style.cssText = \\\"position:absolute;left:-11111px;width:60px;\\\" +\\n\\t\\t\\t\\\"margin-top:1px;padding:0;border:0\\\";\\n\\t\\tdiv.style.cssText =\\n\\t\\t\\t\\\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\\\" +\\n\\t\\t\\t\\\"margin:auto;border:1px;padding:1px;\\\" +\\n\\t\\t\\t\\\"width:60%;top:1%\\\";\\n\\t\\tdocumentElement.appendChild( container ).appendChild( div );\\n\\n\\t\\tvar divStyle = window.getComputedStyle( div );\\n\\t\\tpixelPositionVal = divStyle.top !== \\\"1%\\\";\\n\\n\\t\\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\\n\\t\\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\\n\\n\\t\\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\\n\\t\\t// Some styles come back with percentage values, even though they shouldn't\\n\\t\\tdiv.style.right = \\\"60%\\\";\\n\\t\\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\\n\\n\\t\\t// Support: IE 9 - 11 only\\n\\t\\t// Detect misreporting of content dimensions for box-sizing:border-box elements\\n\\t\\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\\n\\n\\t\\t// Support: IE 9 only\\n\\t\\t// Detect overflow:scroll screwiness (gh-3699)\\n\\t\\t// Support: Chrome <=64\\n\\t\\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\\n\\t\\tdiv.style.position = \\\"absolute\\\";\\n\\t\\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\\n\\n\\t\\tdocumentElement.removeChild( container );\\n\\n\\t\\t// Nullify the div so it wouldn't be stored in the memory and\\n\\t\\t// it will also be a sign that checks already performed\\n\\t\\tdiv = null;\\n\\t}\\n\\n\\tfunction roundPixelMeasures( measure ) {\\n\\t\\treturn Math.round( parseFloat( measure ) );\\n\\t}\\n\\n\\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\\n\\t\\treliableTrDimensionsVal, reliableMarginLeftVal,\\n\\t\\tcontainer = document.createElement( \\\"div\\\" ),\\n\\t\\tdiv = document.createElement( \\\"div\\\" );\\n\\n\\t// Finish early in limited (non-browser) environments\\n\\tif ( !div.style ) {\\n\\t\\treturn;\\n\\t}\\n\\n\\t// Support: IE <=9 - 11 only\\n\\t// Style of cloned element affects source element cloned (trac-8908)\\n\\tdiv.style.backgroundClip = \\\"content-box\\\";\\n\\tdiv.cloneNode( true ).style.backgroundClip = \\\"\\\";\\n\\tsupport.clearCloneStyle = div.style.backgroundClip === \\\"content-box\\\";\\n\\n\\tjQuery.extend( support, {\\n\\t\\tboxSizingReliable: function() {\\n\\t\\t\\tcomputeStyleTests();\\n\\t\\t\\treturn boxSizingReliableVal;\\n\\t\\t},\\n\\t\\tpixelBoxStyles: function() {\\n\\t\\t\\tcomputeStyleTests();\\n\\t\\t\\treturn pixelBoxStylesVal;\\n\\t\\t},\\n\\t\\tpixelPosition: function() {\\n\\t\\t\\tcomputeStyleTests();\\n\\t\\t\\treturn pixelPositionVal;\\n\\t\\t},\\n\\t\\treliableMarginLeft: function() {\\n\\t\\t\\tcomputeStyleTests();\\n\\t\\t\\treturn reliableMarginLeftVal;\\n\\t\\t},\\n\\t\\tscrollboxSize: function() {\\n\\t\\t\\tcomputeStyleTests();\\n\\t\\t\\treturn scrollboxSizeVal;\\n\\t\\t},\\n\\n\\t\\t// Support: IE 9 - 11+, Edge 15 - 18+\\n\\t\\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\\n\\t\\t// set in CSS while `offset*` properties report correct values.\\n\\t\\t// Behavior in IE 9 is more subtle than in newer versions & it passes\\n\\t\\t// some versions of this test; make sure not to make it pass there!\\n\\t\\t//\\n\\t\\t// Support: Firefox 70+\\n\\t\\t// Only Firefox includes border widths\\n\\t\\t// in computed dimensions. (gh-4529)\\n\\t\\treliableTrDimensions: function() {\\n\\t\\t\\tvar table, tr, trChild, trStyle;\\n\\t\\t\\tif ( reliableTrDimensionsVal == null ) {\\n\\t\\t\\t\\ttable = document.createElement( \\\"table\\\" );\\n\\t\\t\\t\\ttr = document.createElement( \\\"tr\\\" );\\n\\t\\t\\t\\ttrChild = document.createElement( \\\"div\\\" );\\n\\n\\t\\t\\t\\ttable.style.cssText = \\\"position:absolute;left:-11111px;border-collapse:separate\\\";\\n\\t\\t\\t\\ttr.style.cssText = \\\"box-sizing:content-box;border:1px solid\\\";\\n\\n\\t\\t\\t\\t// Support: Chrome 86+\\n\\t\\t\\t\\t// Height set through cssText does not get applied.\\n\\t\\t\\t\\t// Computed height then comes back as 0.\\n\\t\\t\\t\\ttr.style.height = \\\"1px\\\";\\n\\t\\t\\t\\ttrChild.style.height = \\\"9px\\\";\\n\\n\\t\\t\\t\\t// Support: Android 8 Chrome 86+\\n\\t\\t\\t\\t// In our bodyBackground.html iframe,\\n\\t\\t\\t\\t// display for all div elements is set to \\\"inline\\\",\\n\\t\\t\\t\\t// which causes a problem only in Android 8 Chrome 86.\\n\\t\\t\\t\\t// Ensuring the div is `display: block`\\n\\t\\t\\t\\t// gets around this issue.\\n\\t\\t\\t\\ttrChild.style.display = \\\"block\\\";\\n\\n\\t\\t\\t\\tdocumentElement\\n\\t\\t\\t\\t\\t.appendChild( table )\\n\\t\\t\\t\\t\\t.appendChild( tr )\\n\\t\\t\\t\\t\\t.appendChild( trChild );\\n\\n\\t\\t\\t\\ttrStyle = window.getComputedStyle( tr );\\n\\t\\t\\t\\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\\n\\t\\t\\t\\t\\tparseInt( trStyle.borderTopWidth, 10 ) +\\n\\t\\t\\t\\t\\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\\n\\n\\t\\t\\t\\tdocumentElement.removeChild( table );\\n\\t\\t\\t}\\n\\t\\t\\treturn reliableTrDimensionsVal;\\n\\t\\t}\\n\\t} );\\n} )();\\n\\n\\nfunction curCSS( elem, name, computed ) {\\n\\tvar width, minWidth, maxWidth, ret,\\n\\t\\tisCustomProp = rcustomProp.test( name ),\\n\\n\\t\\t// Support: Firefox 51+\\n\\t\\t// Retrieving style before computed somehow\\n\\t\\t// fixes an issue with getting wrong values\\n\\t\\t// on detached elements\\n\\t\\tstyle = elem.style;\\n\\n\\tcomputed = computed || getStyles( elem );\\n\\n\\t// getPropertyValue is needed for:\\n\\t//   .css('filter') (IE 9 only, trac-12537)\\n\\t//   .css('--customProperty) (gh-3144)\\n\\tif ( computed ) {\\n\\n\\t\\t// Support: IE <=9 - 11+\\n\\t\\t// IE only supports `\\\"float\\\"` in `getPropertyValue`; in computed styles\\n\\t\\t// it's only available as `\\\"cssFloat\\\"`. We no longer modify properties\\n\\t\\t// sent to `.css()` apart from camelCasing, so we need to check both.\\n\\t\\t// Normally, this would create difference in behavior: if\\n\\t\\t// `getPropertyValue` returns an empty string, the value returned\\n\\t\\t// by `.css()` would be `undefined`. This is usually the case for\\n\\t\\t// disconnected elements. However, in IE even disconnected elements\\n\\t\\t// with no styles return `\\\"none\\\"` for `getPropertyValue( \\\"float\\\" )`\\n\\t\\tret = computed.getPropertyValue( name ) || computed[ name ];\\n\\n\\t\\tif ( isCustomProp && ret ) {\\n\\n\\t\\t\\t// Support: Firefox 105+, Chrome <=105+\\n\\t\\t\\t// Spec requires trimming whitespace for custom properties (gh-4926).\\n\\t\\t\\t// Firefox only trims leading whitespace. Chrome just collapses\\n\\t\\t\\t// both leading & trailing whitespace to a single space.\\n\\t\\t\\t//\\n\\t\\t\\t// Fall back to `undefined` if empty string returned.\\n\\t\\t\\t// This collapses a missing definition with property defined\\n\\t\\t\\t// and set to an empty string but there's no standard API\\n\\t\\t\\t// allowing us to differentiate them without a performance penalty\\n\\t\\t\\t// and returning `undefined` aligns with older jQuery.\\n\\t\\t\\t//\\n\\t\\t\\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\\n\\t\\t\\t// as whitespace while CSS does not, but this is not a problem\\n\\t\\t\\t// because CSS preprocessing replaces them with U+000A LINE FEED\\n\\t\\t\\t// (which *is* CSS whitespace)\\n\\t\\t\\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\\n\\t\\t\\tret = ret.replace( rtrimCSS, \\\"$1\\\" ) || undefined;\\n\\t\\t}\\n\\n\\t\\tif ( ret === \\\"\\\" && !isAttached( elem ) ) {\\n\\t\\t\\tret = jQuery.style( elem, name );\\n\\t\\t}\\n\\n\\t\\t// A tribute to the \\\"awesome hack by Dean Edwards\\\"\\n\\t\\t// Android Browser returns percentage for some values,\\n\\t\\t// but width seems to be reliably pixels.\\n\\t\\t// This is against the CSSOM draft spec:\\n\\t\\t// https://drafts.csswg.org/cssom/#resolved-values\\n\\t\\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\\n\\n\\t\\t\\t// Remember the original values\\n\\t\\t\\twidth = style.width;\\n\\t\\t\\tminWidth = style.minWidth;\\n\\t\\t\\tmaxWidth = style.maxWidth;\\n\\n\\t\\t\\t// Put in the new values to get a computed value out\\n\\t\\t\\tstyle.minWidth = style.maxWidth = style.width = ret;\\n\\t\\t\\tret = computed.width;\\n\\n\\t\\t\\t// Revert the changed values\\n\\t\\t\\tstyle.width = width;\\n\\t\\t\\tstyle.minWidth = minWidth;\\n\\t\\t\\tstyle.maxWidth = maxWidth;\\n\\t\\t}\\n\\t}\\n\\n\\treturn ret !== undefined ?\\n\\n\\t\\t// Support: IE <=9 - 11 only\\n\\t\\t// IE returns zIndex value as an integer.\\n\\t\\tret + \\\"\\\" :\\n\\t\\tret;\\n}\\n\\n\\nfunction addGetHookIf( conditionFn, hookFn ) {\\n\\n\\t// Define the hook, we'll check on the first run if it's really needed.\\n\\treturn {\\n\\t\\tget: function() {\\n\\t\\t\\tif ( conditionFn() ) {\\n\\n\\t\\t\\t\\t// Hook not needed (or it's not possible to use it due\\n\\t\\t\\t\\t// to missing dependency), remove it.\\n\\t\\t\\t\\tdelete this.get;\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Hook needed; redefine it so that the support test is not executed again.\\n\\t\\t\\treturn ( this.get = hookFn ).apply( this, arguments );\\n\\t\\t}\\n\\t};\\n}\\n\\n\\nvar cssPrefixes = [ \\\"Webkit\\\", \\\"Moz\\\", \\\"ms\\\" ],\\n\\temptyStyle = document.createElement( \\\"div\\\" ).style,\\n\\tvendorProps = {};\\n\\n// Return a vendor-prefixed property or undefined\\nfunction vendorPropName( name ) {\\n\\n\\t// Check for vendor prefixed names\\n\\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\\n\\t\\ti = cssPrefixes.length;\\n\\n\\twhile ( i-- ) {\\n\\t\\tname = cssPrefixes[ i ] + capName;\\n\\t\\tif ( name in emptyStyle ) {\\n\\t\\t\\treturn name;\\n\\t\\t}\\n\\t}\\n}\\n\\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\\nfunction finalPropName( name ) {\\n\\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\\n\\n\\tif ( final ) {\\n\\t\\treturn final;\\n\\t}\\n\\tif ( name in emptyStyle ) {\\n\\t\\treturn name;\\n\\t}\\n\\treturn vendorProps[ name ] = vendorPropName( name ) || name;\\n}\\n\\n\\nvar\\n\\n\\t// Swappable if display is none or starts with table\\n\\t// except \\\"table\\\", \\\"table-cell\\\", or \\\"table-caption\\\"\\n\\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\\n\\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\\n\\tcssShow = { position: \\\"absolute\\\", visibility: \\\"hidden\\\", display: \\\"block\\\" },\\n\\tcssNormalTransform = {\\n\\t\\tletterSpacing: \\\"0\\\",\\n\\t\\tfontWeight: \\\"400\\\"\\n\\t};\\n\\nfunction setPositiveNumber( _elem, value, subtract ) {\\n\\n\\t// Any relative (+/-) values have already been\\n\\t// normalized at this point\\n\\tvar matches = rcssNum.exec( value );\\n\\treturn matches ?\\n\\n\\t\\t// Guard against undefined \\\"subtract\\\", e.g., when used as in cssHooks\\n\\t\\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \\\"px\\\" ) :\\n\\t\\tvalue;\\n}\\n\\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\\n\\tvar i = dimension === \\\"width\\\" ? 1 : 0,\\n\\t\\textra = 0,\\n\\t\\tdelta = 0,\\n\\t\\tmarginDelta = 0;\\n\\n\\t// Adjustment may not be necessary\\n\\tif ( box === ( isBorderBox ? \\\"border\\\" : \\\"content\\\" ) ) {\\n\\t\\treturn 0;\\n\\t}\\n\\n\\tfor ( ; i < 4; i += 2 ) {\\n\\n\\t\\t// Both box models exclude margin\\n\\t\\t// Count margin delta separately to only add it after scroll gutter adjustment.\\n\\t\\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\\n\\t\\tif ( box === \\\"margin\\\" ) {\\n\\t\\t\\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\\n\\t\\t}\\n\\n\\t\\t// If we get here with a content-box, we're seeking \\\"padding\\\" or \\\"border\\\" or \\\"margin\\\"\\n\\t\\tif ( !isBorderBox ) {\\n\\n\\t\\t\\t// Add padding\\n\\t\\t\\tdelta += jQuery.css( elem, \\\"padding\\\" + cssExpand[ i ], true, styles );\\n\\n\\t\\t\\t// For \\\"border\\\" or \\\"margin\\\", add border\\n\\t\\t\\tif ( box !== \\\"padding\\\" ) {\\n\\t\\t\\t\\tdelta += jQuery.css( elem, \\\"border\\\" + cssExpand[ i ] + \\\"Width\\\", true, styles );\\n\\n\\t\\t\\t// But still keep track of it otherwise\\n\\t\\t\\t} else {\\n\\t\\t\\t\\textra += jQuery.css( elem, \\\"border\\\" + cssExpand[ i ] + \\\"Width\\\", true, styles );\\n\\t\\t\\t}\\n\\n\\t\\t// If we get here with a border-box (content + padding + border), we're seeking \\\"content\\\" or\\n\\t\\t// \\\"padding\\\" or \\\"margin\\\"\\n\\t\\t} else {\\n\\n\\t\\t\\t// For \\\"content\\\", subtract padding\\n\\t\\t\\tif ( box === \\\"content\\\" ) {\\n\\t\\t\\t\\tdelta -= jQuery.css( elem, \\\"padding\\\" + cssExpand[ i ], true, styles );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// For \\\"content\\\" or \\\"padding\\\", subtract border\\n\\t\\t\\tif ( box !== \\\"margin\\\" ) {\\n\\t\\t\\t\\tdelta -= jQuery.css( elem, \\\"border\\\" + cssExpand[ i ] + \\\"Width\\\", true, styles );\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t// Account for positive content-box scroll gutter when requested by providing computedVal\\n\\tif ( !isBorderBox && computedVal >= 0 ) {\\n\\n\\t\\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\\n\\t\\t// Assuming integer scroll gutter, subtract the rest and round down\\n\\t\\tdelta += Math.max( 0, Math.ceil(\\n\\t\\t\\telem[ \\\"offset\\\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\\n\\t\\t\\tcomputedVal -\\n\\t\\t\\tdelta -\\n\\t\\t\\textra -\\n\\t\\t\\t0.5\\n\\n\\t\\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\\n\\t\\t// Use an explicit zero to avoid NaN (gh-3964)\\n\\t\\t) ) || 0;\\n\\t}\\n\\n\\treturn delta + marginDelta;\\n}\\n\\nfunction getWidthOrHeight( elem, dimension, extra ) {\\n\\n\\t// Start with computed style\\n\\tvar styles = getStyles( elem ),\\n\\n\\t\\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\\n\\t\\t// Fake content-box until we know it's needed to know the true value.\\n\\t\\tboxSizingNeeded = !support.boxSizingReliable() || extra,\\n\\t\\tisBorderBox = boxSizingNeeded &&\\n\\t\\t\\tjQuery.css( elem, \\\"boxSizing\\\", false, styles ) === \\\"border-box\\\",\\n\\t\\tvalueIsBorderBox = isBorderBox,\\n\\n\\t\\tval = curCSS( elem, dimension, styles ),\\n\\t\\toffsetProp = \\\"offset\\\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\\n\\n\\t// Support: Firefox <=54\\n\\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\\n\\tif ( rnumnonpx.test( val ) ) {\\n\\t\\tif ( !extra ) {\\n\\t\\t\\treturn val;\\n\\t\\t}\\n\\t\\tval = \\\"auto\\\";\\n\\t}\\n\\n\\n\\t// Support: IE 9 - 11 only\\n\\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\\n\\t// In those cases, the computed value can be trusted to be border-box.\\n\\tif ( ( !support.boxSizingReliable() && isBorderBox ||\\n\\n\\t\\t// Support: IE 10 - 11+, Edge 15 - 18+\\n\\t\\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\\n\\t\\t// set in CSS while `offset*` properties report correct values.\\n\\t\\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\\n\\t\\t!support.reliableTrDimensions() && nodeName( elem, \\\"tr\\\" ) ||\\n\\n\\t\\t// Fall back to offsetWidth/offsetHeight when value is \\\"auto\\\"\\n\\t\\t// This happens for inline elements with no explicit setting (gh-3571)\\n\\t\\tval === \\\"auto\\\" ||\\n\\n\\t\\t// Support: Android <=4.1 - 4.3 only\\n\\t\\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\\n\\t\\t!parseFloat( val ) && jQuery.css( elem, \\\"display\\\", false, styles ) === \\\"inline\\\" ) &&\\n\\n\\t\\t// Make sure the element is visible & connected\\n\\t\\telem.getClientRects().length ) {\\n\\n\\t\\tisBorderBox = jQuery.css( elem, \\\"boxSizing\\\", false, styles ) === \\\"border-box\\\";\\n\\n\\t\\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\\n\\t\\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\\n\\t\\t// retrieved value as a content box dimension.\\n\\t\\tvalueIsBorderBox = offsetProp in elem;\\n\\t\\tif ( valueIsBorderBox ) {\\n\\t\\t\\tval = elem[ offsetProp ];\\n\\t\\t}\\n\\t}\\n\\n\\t// Normalize \\\"\\\" and auto\\n\\tval = parseFloat( val ) || 0;\\n\\n\\t// Adjust for the element's box model\\n\\treturn ( val +\\n\\t\\tboxModelAdjustment(\\n\\t\\t\\telem,\\n\\t\\t\\tdimension,\\n\\t\\t\\textra || ( isBorderBox ? \\\"border\\\" : \\\"content\\\" ),\\n\\t\\t\\tvalueIsBorderBox,\\n\\t\\t\\tstyles,\\n\\n\\t\\t\\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\\n\\t\\t\\tval\\n\\t\\t)\\n\\t) + \\\"px\\\";\\n}\\n\\njQuery.extend( {\\n\\n\\t// Add in style property hooks for overriding the default\\n\\t// behavior of getting and setting a style property\\n\\tcssHooks: {\\n\\t\\topacity: {\\n\\t\\t\\tget: function( elem, computed ) {\\n\\t\\t\\t\\tif ( computed ) {\\n\\n\\t\\t\\t\\t\\t// We should always get a number back from opacity\\n\\t\\t\\t\\t\\tvar ret = curCSS( elem, \\\"opacity\\\" );\\n\\t\\t\\t\\t\\treturn ret === \\\"\\\" ? \\\"1\\\" : ret;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\n\\t// Don't automatically add \\\"px\\\" to these possibly-unitless properties\\n\\tcssNumber: {\\n\\t\\tanimationIterationCount: true,\\n\\t\\taspectRatio: true,\\n\\t\\tborderImageSlice: true,\\n\\t\\tcolumnCount: true,\\n\\t\\tflexGrow: true,\\n\\t\\tflexShrink: true,\\n\\t\\tfontWeight: true,\\n\\t\\tgridArea: true,\\n\\t\\tgridColumn: true,\\n\\t\\tgridColumnEnd: true,\\n\\t\\tgridColumnStart: true,\\n\\t\\tgridRow: true,\\n\\t\\tgridRowEnd: true,\\n\\t\\tgridRowStart: true,\\n\\t\\tlineHeight: true,\\n\\t\\topacity: true,\\n\\t\\torder: true,\\n\\t\\torphans: true,\\n\\t\\tscale: true,\\n\\t\\twidows: true,\\n\\t\\tzIndex: true,\\n\\t\\tzoom: true,\\n\\n\\t\\t// SVG-related\\n\\t\\tfillOpacity: true,\\n\\t\\tfloodOpacity: true,\\n\\t\\tstopOpacity: true,\\n\\t\\tstrokeMiterlimit: true,\\n\\t\\tstrokeOpacity: true\\n\\t},\\n\\n\\t// Add in properties whose names you wish to fix before\\n\\t// setting or getting the value\\n\\tcssProps: {},\\n\\n\\t// Get and set the style property on a DOM Node\\n\\tstyle: function( elem, name, value, extra ) {\\n\\n\\t\\t// Don't set styles on text and comment nodes\\n\\t\\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\t// Make sure that we're working with the right name\\n\\t\\tvar ret, type, hooks,\\n\\t\\t\\torigName = camelCase( name ),\\n\\t\\t\\tisCustomProp = rcustomProp.test( name ),\\n\\t\\t\\tstyle = elem.style;\\n\\n\\t\\t// Make sure that we're working with the right name. We don't\\n\\t\\t// want to query the value if it is a CSS custom property\\n\\t\\t// since they are user-defined.\\n\\t\\tif ( !isCustomProp ) {\\n\\t\\t\\tname = finalPropName( origName );\\n\\t\\t}\\n\\n\\t\\t// Gets hook for the prefixed version, then unprefixed version\\n\\t\\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\\n\\n\\t\\t// Check if we're setting a value\\n\\t\\tif ( value !== undefined ) {\\n\\t\\t\\ttype = typeof value;\\n\\n\\t\\t\\t// Convert \\\"+=\\\" or \\\"-=\\\" to relative numbers (trac-7345)\\n\\t\\t\\tif ( type === \\\"string\\\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\\n\\t\\t\\t\\tvalue = adjustCSS( elem, name, ret );\\n\\n\\t\\t\\t\\t// Fixes bug trac-9237\\n\\t\\t\\t\\ttype = \\\"number\\\";\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Make sure that null and NaN values aren't set (trac-7116)\\n\\t\\t\\tif ( value == null || value !== value ) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If a number was passed in, add the unit (except for certain CSS properties)\\n\\t\\t\\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\\n\\t\\t\\t// \\\"px\\\" to a few hardcoded values.\\n\\t\\t\\tif ( type === \\\"number\\\" && !isCustomProp ) {\\n\\t\\t\\t\\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \\\"\\\" : \\\"px\\\" );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// background-* props affect original clone's values\\n\\t\\t\\tif ( !support.clearCloneStyle && value === \\\"\\\" && name.indexOf( \\\"background\\\" ) === 0 ) {\\n\\t\\t\\t\\tstyle[ name ] = \\\"inherit\\\";\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If a hook was provided, use that value, otherwise just set the specified value\\n\\t\\t\\tif ( !hooks || !( \\\"set\\\" in hooks ) ||\\n\\t\\t\\t\\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\\n\\n\\t\\t\\t\\tif ( isCustomProp ) {\\n\\t\\t\\t\\t\\tstyle.setProperty( name, value );\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tstyle[ name ] = value;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t} else {\\n\\n\\t\\t\\t// If a hook was provided get the non-computed value from there\\n\\t\\t\\tif ( hooks && \\\"get\\\" in hooks &&\\n\\t\\t\\t\\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\\n\\n\\t\\t\\t\\treturn ret;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Otherwise just get the value from the style object\\n\\t\\t\\treturn style[ name ];\\n\\t\\t}\\n\\t},\\n\\n\\tcss: function( elem, name, extra, styles ) {\\n\\t\\tvar val, num, hooks,\\n\\t\\t\\torigName = camelCase( name ),\\n\\t\\t\\tisCustomProp = rcustomProp.test( name );\\n\\n\\t\\t// Make sure that we're working with the right name. We don't\\n\\t\\t// want to modify the value if it is a CSS custom property\\n\\t\\t// since they are user-defined.\\n\\t\\tif ( !isCustomProp ) {\\n\\t\\t\\tname = finalPropName( origName );\\n\\t\\t}\\n\\n\\t\\t// Try prefixed name followed by the unprefixed name\\n\\t\\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\\n\\n\\t\\t// If a hook was provided get the computed value from there\\n\\t\\tif ( hooks && \\\"get\\\" in hooks ) {\\n\\t\\t\\tval = hooks.get( elem, true, extra );\\n\\t\\t}\\n\\n\\t\\t// Otherwise, if a way to get the computed value exists, use that\\n\\t\\tif ( val === undefined ) {\\n\\t\\t\\tval = curCSS( elem, name, styles );\\n\\t\\t}\\n\\n\\t\\t// Convert \\\"normal\\\" to computed value\\n\\t\\tif ( val === \\\"normal\\\" && name in cssNormalTransform ) {\\n\\t\\t\\tval = cssNormalTransform[ name ];\\n\\t\\t}\\n\\n\\t\\t// Make numeric if forced or a qualifier was provided and val looks numeric\\n\\t\\tif ( extra === \\\"\\\" || extra ) {\\n\\t\\t\\tnum = parseFloat( val );\\n\\t\\t\\treturn extra === true || isFinite( num ) ? num || 0 : val;\\n\\t\\t}\\n\\n\\t\\treturn val;\\n\\t}\\n} );\\n\\njQuery.each( [ \\\"height\\\", \\\"width\\\" ], function( _i, dimension ) {\\n\\tjQuery.cssHooks[ dimension ] = {\\n\\t\\tget: function( elem, computed, extra ) {\\n\\t\\t\\tif ( computed ) {\\n\\n\\t\\t\\t\\t// Certain elements can have dimension info if we invisibly show them\\n\\t\\t\\t\\t// but it must have a current display style that would benefit\\n\\t\\t\\t\\treturn rdisplayswap.test( jQuery.css( elem, \\\"display\\\" ) ) &&\\n\\n\\t\\t\\t\\t\\t// Support: Safari 8+\\n\\t\\t\\t\\t\\t// Table columns in Safari have non-zero offsetWidth & zero\\n\\t\\t\\t\\t\\t// getBoundingClientRect().width unless display is changed.\\n\\t\\t\\t\\t\\t// Support: IE <=11 only\\n\\t\\t\\t\\t\\t// Running getBoundingClientRect on a disconnected node\\n\\t\\t\\t\\t\\t// in IE throws an error.\\n\\t\\t\\t\\t\\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\\n\\t\\t\\t\\t\\tswap( elem, cssShow, function() {\\n\\t\\t\\t\\t\\t\\treturn getWidthOrHeight( elem, dimension, extra );\\n\\t\\t\\t\\t\\t} ) :\\n\\t\\t\\t\\t\\tgetWidthOrHeight( elem, dimension, extra );\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tset: function( elem, value, extra ) {\\n\\t\\t\\tvar matches,\\n\\t\\t\\t\\tstyles = getStyles( elem ),\\n\\n\\t\\t\\t\\t// Only read styles.position if the test has a chance to fail\\n\\t\\t\\t\\t// to avoid forcing a reflow.\\n\\t\\t\\t\\tscrollboxSizeBuggy = !support.scrollboxSize() &&\\n\\t\\t\\t\\t\\tstyles.position === \\\"absolute\\\",\\n\\n\\t\\t\\t\\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\\n\\t\\t\\t\\tboxSizingNeeded = scrollboxSizeBuggy || extra,\\n\\t\\t\\t\\tisBorderBox = boxSizingNeeded &&\\n\\t\\t\\t\\t\\tjQuery.css( elem, \\\"boxSizing\\\", false, styles ) === \\\"border-box\\\",\\n\\t\\t\\t\\tsubtract = extra ?\\n\\t\\t\\t\\t\\tboxModelAdjustment(\\n\\t\\t\\t\\t\\t\\telem,\\n\\t\\t\\t\\t\\t\\tdimension,\\n\\t\\t\\t\\t\\t\\textra,\\n\\t\\t\\t\\t\\t\\tisBorderBox,\\n\\t\\t\\t\\t\\t\\tstyles\\n\\t\\t\\t\\t\\t) :\\n\\t\\t\\t\\t\\t0;\\n\\n\\t\\t\\t// Account for unreliable border-box dimensions by comparing offset* to computed and\\n\\t\\t\\t// faking a content-box to get border and padding (gh-3699)\\n\\t\\t\\tif ( isBorderBox && scrollboxSizeBuggy ) {\\n\\t\\t\\t\\tsubtract -= Math.ceil(\\n\\t\\t\\t\\t\\telem[ \\\"offset\\\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\\n\\t\\t\\t\\t\\tparseFloat( styles[ dimension ] ) -\\n\\t\\t\\t\\t\\tboxModelAdjustment( elem, dimension, \\\"border\\\", false, styles ) -\\n\\t\\t\\t\\t\\t0.5\\n\\t\\t\\t\\t);\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Convert to pixels if value adjustment is needed\\n\\t\\t\\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\\n\\t\\t\\t\\t( matches[ 3 ] || \\\"px\\\" ) !== \\\"px\\\" ) {\\n\\n\\t\\t\\t\\telem.style[ dimension ] = value;\\n\\t\\t\\t\\tvalue = jQuery.css( elem, dimension );\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn setPositiveNumber( elem, value, subtract );\\n\\t\\t}\\n\\t};\\n} );\\n\\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\\n\\tfunction( elem, computed ) {\\n\\t\\tif ( computed ) {\\n\\t\\t\\treturn ( parseFloat( curCSS( elem, \\\"marginLeft\\\" ) ) ||\\n\\t\\t\\t\\telem.getBoundingClientRect().left -\\n\\t\\t\\t\\t\\tswap( elem, { marginLeft: 0 }, function() {\\n\\t\\t\\t\\t\\t\\treturn elem.getBoundingClientRect().left;\\n\\t\\t\\t\\t\\t} )\\n\\t\\t\\t) + \\\"px\\\";\\n\\t\\t}\\n\\t}\\n);\\n\\n// These hooks are used by animate to expand properties\\njQuery.each( {\\n\\tmargin: \\\"\\\",\\n\\tpadding: \\\"\\\",\\n\\tborder: \\\"Width\\\"\\n}, function( prefix, suffix ) {\\n\\tjQuery.cssHooks[ prefix + suffix ] = {\\n\\t\\texpand: function( value ) {\\n\\t\\t\\tvar i = 0,\\n\\t\\t\\t\\texpanded = {},\\n\\n\\t\\t\\t\\t// Assumes a single number if not a string\\n\\t\\t\\t\\tparts = typeof value === \\\"string\\\" ? value.split( \\\" \\\" ) : [ value ];\\n\\n\\t\\t\\tfor ( ; i < 4; i++ ) {\\n\\t\\t\\t\\texpanded[ prefix + cssExpand[ i ] + suffix ] =\\n\\t\\t\\t\\t\\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn expanded;\\n\\t\\t}\\n\\t};\\n\\n\\tif ( prefix !== \\\"margin\\\" ) {\\n\\t\\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\\n\\t}\\n} );\\n\\njQuery.fn.extend( {\\n\\tcss: function( name, value ) {\\n\\t\\treturn access( this, function( elem, name, value ) {\\n\\t\\t\\tvar styles, len,\\n\\t\\t\\t\\tmap = {},\\n\\t\\t\\t\\ti = 0;\\n\\n\\t\\t\\tif ( Array.isArray( name ) ) {\\n\\t\\t\\t\\tstyles = getStyles( elem );\\n\\t\\t\\t\\tlen = name.length;\\n\\n\\t\\t\\t\\tfor ( ; i < len; i++ ) {\\n\\t\\t\\t\\t\\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\treturn map;\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn value !== undefined ?\\n\\t\\t\\t\\tjQuery.style( elem, name, value ) :\\n\\t\\t\\t\\tjQuery.css( elem, name );\\n\\t\\t}, name, value, arguments.length > 1 );\\n\\t}\\n} );\\n\\n\\nfunction Tween( elem, options, prop, end, easing ) {\\n\\treturn new Tween.prototype.init( elem, options, prop, end, easing );\\n}\\njQuery.Tween = Tween;\\n\\nTween.prototype = {\\n\\tconstructor: Tween,\\n\\tinit: function( elem, options, prop, end, easing, unit ) {\\n\\t\\tthis.elem = elem;\\n\\t\\tthis.prop = prop;\\n\\t\\tthis.easing = easing || jQuery.easing._default;\\n\\t\\tthis.options = options;\\n\\t\\tthis.start = this.now = this.cur();\\n\\t\\tthis.end = end;\\n\\t\\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \\\"\\\" : \\\"px\\\" );\\n\\t},\\n\\tcur: function() {\\n\\t\\tvar hooks = Tween.propHooks[ this.prop ];\\n\\n\\t\\treturn hooks && hooks.get ?\\n\\t\\t\\thooks.get( this ) :\\n\\t\\t\\tTween.propHooks._default.get( this );\\n\\t},\\n\\trun: function( percent ) {\\n\\t\\tvar eased,\\n\\t\\t\\thooks = Tween.propHooks[ this.prop ];\\n\\n\\t\\tif ( this.options.duration ) {\\n\\t\\t\\tthis.pos = eased = jQuery.easing[ this.easing ](\\n\\t\\t\\t\\tpercent, this.options.duration * percent, 0, 1, this.options.duration\\n\\t\\t\\t);\\n\\t\\t} else {\\n\\t\\t\\tthis.pos = eased = percent;\\n\\t\\t}\\n\\t\\tthis.now = ( this.end - this.start ) * eased + this.start;\\n\\n\\t\\tif ( this.options.step ) {\\n\\t\\t\\tthis.options.step.call( this.elem, this.now, this );\\n\\t\\t}\\n\\n\\t\\tif ( hooks && hooks.set ) {\\n\\t\\t\\thooks.set( this );\\n\\t\\t} else {\\n\\t\\t\\tTween.propHooks._default.set( this );\\n\\t\\t}\\n\\t\\treturn this;\\n\\t}\\n};\\n\\nTween.prototype.init.prototype = Tween.prototype;\\n\\nTween.propHooks = {\\n\\t_default: {\\n\\t\\tget: function( tween ) {\\n\\t\\t\\tvar result;\\n\\n\\t\\t\\t// Use a property on the element directly when it is not a DOM element,\\n\\t\\t\\t// or when there is no matching style property that exists.\\n\\t\\t\\tif ( tween.elem.nodeType !== 1 ||\\n\\t\\t\\t\\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\\n\\t\\t\\t\\treturn tween.elem[ tween.prop ];\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Passing an empty string as a 3rd parameter to .css will automatically\\n\\t\\t\\t// attempt a parseFloat and fallback to a string if the parse fails.\\n\\t\\t\\t// Simple values such as \\\"10px\\\" are parsed to Float;\\n\\t\\t\\t// complex values such as \\\"rotate(1rad)\\\" are returned as-is.\\n\\t\\t\\tresult = jQuery.css( tween.elem, tween.prop, \\\"\\\" );\\n\\n\\t\\t\\t// Empty strings, null, undefined and \\\"auto\\\" are converted to 0.\\n\\t\\t\\treturn !result || result === \\\"auto\\\" ? 0 : result;\\n\\t\\t},\\n\\t\\tset: function( tween ) {\\n\\n\\t\\t\\t// Use step hook for back compat.\\n\\t\\t\\t// Use cssHook if its there.\\n\\t\\t\\t// Use .style if available and use plain properties where available.\\n\\t\\t\\tif ( jQuery.fx.step[ tween.prop ] ) {\\n\\t\\t\\t\\tjQuery.fx.step[ tween.prop ]( tween );\\n\\t\\t\\t} else if ( tween.elem.nodeType === 1 && (\\n\\t\\t\\t\\tjQuery.cssHooks[ tween.prop ] ||\\n\\t\\t\\t\\t\\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\\n\\t\\t\\t\\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ttween.elem[ tween.prop ] = tween.now;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n};\\n\\n// Support: IE <=9 only\\n// Panic based approach to setting things on disconnected nodes\\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\\n\\tset: function( tween ) {\\n\\t\\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\\n\\t\\t\\ttween.elem[ tween.prop ] = tween.now;\\n\\t\\t}\\n\\t}\\n};\\n\\njQuery.easing = {\\n\\tlinear: function( p ) {\\n\\t\\treturn p;\\n\\t},\\n\\tswing: function( p ) {\\n\\t\\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\\n\\t},\\n\\t_default: \\\"swing\\\"\\n};\\n\\njQuery.fx = Tween.prototype.init;\\n\\n// Back compat <1.8 extension point\\njQuery.fx.step = {};\\n\\n\\n\\n\\nvar\\n\\tfxNow, inProgress,\\n\\trfxtypes = /^(?:toggle|show|hide)$/,\\n\\trrun = /queueHooks$/;\\n\\nfunction schedule() {\\n\\tif ( inProgress ) {\\n\\t\\tif ( document.hidden === false && window.requestAnimationFrame ) {\\n\\t\\t\\twindow.requestAnimationFrame( schedule );\\n\\t\\t} else {\\n\\t\\t\\twindow.setTimeout( schedule, jQuery.fx.interval );\\n\\t\\t}\\n\\n\\t\\tjQuery.fx.tick();\\n\\t}\\n}\\n\\n// Animations created synchronously will run synchronously\\nfunction createFxNow() {\\n\\twindow.setTimeout( function() {\\n\\t\\tfxNow = undefined;\\n\\t} );\\n\\treturn ( fxNow = Date.now() );\\n}\\n\\n// Generate parameters to create a standard animation\\nfunction genFx( type, includeWidth ) {\\n\\tvar which,\\n\\t\\ti = 0,\\n\\t\\tattrs = { height: type };\\n\\n\\t// If we include width, step value is 1 to do all cssExpand values,\\n\\t// otherwise step value is 2 to skip over Left and Right\\n\\tincludeWidth = includeWidth ? 1 : 0;\\n\\tfor ( ; i < 4; i += 2 - includeWidth ) {\\n\\t\\twhich = cssExpand[ i ];\\n\\t\\tattrs[ \\\"margin\\\" + which ] = attrs[ \\\"padding\\\" + which ] = type;\\n\\t}\\n\\n\\tif ( includeWidth ) {\\n\\t\\tattrs.opacity = attrs.width = type;\\n\\t}\\n\\n\\treturn attrs;\\n}\\n\\nfunction createTween( value, prop, animation ) {\\n\\tvar tween,\\n\\t\\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \\\"*\\\" ] ),\\n\\t\\tindex = 0,\\n\\t\\tlength = collection.length;\\n\\tfor ( ; index < length; index++ ) {\\n\\t\\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\\n\\n\\t\\t\\t// We're done with this property\\n\\t\\t\\treturn tween;\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction defaultPrefilter( elem, props, opts ) {\\n\\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\\n\\t\\tisBox = \\\"width\\\" in props || \\\"height\\\" in props,\\n\\t\\tanim = this,\\n\\t\\torig = {},\\n\\t\\tstyle = elem.style,\\n\\t\\thidden = elem.nodeType && isHiddenWithinTree( elem ),\\n\\t\\tdataShow = dataPriv.get( elem, \\\"fxshow\\\" );\\n\\n\\t// Queue-skipping animations hijack the fx hooks\\n\\tif ( !opts.queue ) {\\n\\t\\thooks = jQuery._queueHooks( elem, \\\"fx\\\" );\\n\\t\\tif ( hooks.unqueued == null ) {\\n\\t\\t\\thooks.unqueued = 0;\\n\\t\\t\\toldfire = hooks.empty.fire;\\n\\t\\t\\thooks.empty.fire = function() {\\n\\t\\t\\t\\tif ( !hooks.unqueued ) {\\n\\t\\t\\t\\t\\toldfire();\\n\\t\\t\\t\\t}\\n\\t\\t\\t};\\n\\t\\t}\\n\\t\\thooks.unqueued++;\\n\\n\\t\\tanim.always( function() {\\n\\n\\t\\t\\t// Ensure the complete handler is called before this completes\\n\\t\\t\\tanim.always( function() {\\n\\t\\t\\t\\thooks.unqueued--;\\n\\t\\t\\t\\tif ( !jQuery.queue( elem, \\\"fx\\\" ).length ) {\\n\\t\\t\\t\\t\\thooks.empty.fire();\\n\\t\\t\\t\\t}\\n\\t\\t\\t} );\\n\\t\\t} );\\n\\t}\\n\\n\\t// Detect show/hide animations\\n\\tfor ( prop in props ) {\\n\\t\\tvalue = props[ prop ];\\n\\t\\tif ( rfxtypes.test( value ) ) {\\n\\t\\t\\tdelete props[ prop ];\\n\\t\\t\\ttoggle = toggle || value === \\\"toggle\\\";\\n\\t\\t\\tif ( value === ( hidden ? \\\"hide\\\" : \\\"show\\\" ) ) {\\n\\n\\t\\t\\t\\t// Pretend to be hidden if this is a \\\"show\\\" and\\n\\t\\t\\t\\t// there is still data from a stopped show/hide\\n\\t\\t\\t\\tif ( value === \\\"show\\\" && dataShow && dataShow[ prop ] !== undefined ) {\\n\\t\\t\\t\\t\\thidden = true;\\n\\n\\t\\t\\t\\t// Ignore all other no-op show/hide data\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tcontinue;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\\n\\t\\t}\\n\\t}\\n\\n\\t// Bail out if this is a no-op like .hide().hide()\\n\\tpropTween = !jQuery.isEmptyObject( props );\\n\\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\\n\\t\\treturn;\\n\\t}\\n\\n\\t// Restrict \\\"overflow\\\" and \\\"display\\\" styles during box animations\\n\\tif ( isBox && elem.nodeType === 1 ) {\\n\\n\\t\\t// Support: IE <=9 - 11, Edge 12 - 15\\n\\t\\t// Record all 3 overflow attributes because IE does not infer the shorthand\\n\\t\\t// from identically-valued overflowX and overflowY and Edge just mirrors\\n\\t\\t// the overflowX value there.\\n\\t\\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\\n\\n\\t\\t// Identify a display type, preferring old show/hide data over the CSS cascade\\n\\t\\trestoreDisplay = dataShow && dataShow.display;\\n\\t\\tif ( restoreDisplay == null ) {\\n\\t\\t\\trestoreDisplay = dataPriv.get( elem, \\\"display\\\" );\\n\\t\\t}\\n\\t\\tdisplay = jQuery.css( elem, \\\"display\\\" );\\n\\t\\tif ( display === \\\"none\\\" ) {\\n\\t\\t\\tif ( restoreDisplay ) {\\n\\t\\t\\t\\tdisplay = restoreDisplay;\\n\\t\\t\\t} else {\\n\\n\\t\\t\\t\\t// Get nonempty value(s) by temporarily forcing visibility\\n\\t\\t\\t\\tshowHide( [ elem ], true );\\n\\t\\t\\t\\trestoreDisplay = elem.style.display || restoreDisplay;\\n\\t\\t\\t\\tdisplay = jQuery.css( elem, \\\"display\\\" );\\n\\t\\t\\t\\tshowHide( [ elem ] );\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Animate inline elements as inline-block\\n\\t\\tif ( display === \\\"inline\\\" || display === \\\"inline-block\\\" && restoreDisplay != null ) {\\n\\t\\t\\tif ( jQuery.css( elem, \\\"float\\\" ) === \\\"none\\\" ) {\\n\\n\\t\\t\\t\\t// Restore the original display value at the end of pure show/hide animations\\n\\t\\t\\t\\tif ( !propTween ) {\\n\\t\\t\\t\\t\\tanim.done( function() {\\n\\t\\t\\t\\t\\t\\tstyle.display = restoreDisplay;\\n\\t\\t\\t\\t\\t} );\\n\\t\\t\\t\\t\\tif ( restoreDisplay == null ) {\\n\\t\\t\\t\\t\\t\\tdisplay = style.display;\\n\\t\\t\\t\\t\\t\\trestoreDisplay = display === \\\"none\\\" ? \\\"\\\" : display;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tstyle.display = \\\"inline-block\\\";\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tif ( opts.overflow ) {\\n\\t\\tstyle.overflow = \\\"hidden\\\";\\n\\t\\tanim.always( function() {\\n\\t\\t\\tstyle.overflow = opts.overflow[ 0 ];\\n\\t\\t\\tstyle.overflowX = opts.overflow[ 1 ];\\n\\t\\t\\tstyle.overflowY = opts.overflow[ 2 ];\\n\\t\\t} );\\n\\t}\\n\\n\\t// Implement show/hide animations\\n\\tpropTween = false;\\n\\tfor ( prop in orig ) {\\n\\n\\t\\t// General show/hide setup for this element animation\\n\\t\\tif ( !propTween ) {\\n\\t\\t\\tif ( dataShow ) {\\n\\t\\t\\t\\tif ( \\\"hidden\\\" in dataShow ) {\\n\\t\\t\\t\\t\\thidden = dataShow.hidden;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tdataShow = dataPriv.access( elem, \\\"fxshow\\\", { display: restoreDisplay } );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Store hidden/visible for toggle so `.stop().toggle()` \\\"reverses\\\"\\n\\t\\t\\tif ( toggle ) {\\n\\t\\t\\t\\tdataShow.hidden = !hidden;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Show elements before animating them\\n\\t\\t\\tif ( hidden ) {\\n\\t\\t\\t\\tshowHide( [ elem ], true );\\n\\t\\t\\t}\\n\\n\\t\\t\\t/* eslint-disable no-loop-func */\\n\\n\\t\\t\\tanim.done( function() {\\n\\n\\t\\t\\t\\t/* eslint-enable no-loop-func */\\n\\n\\t\\t\\t\\t// The final step of a \\\"hide\\\" animation is actually hiding the element\\n\\t\\t\\t\\tif ( !hidden ) {\\n\\t\\t\\t\\t\\tshowHide( [ elem ] );\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tdataPriv.remove( elem, \\\"fxshow\\\" );\\n\\t\\t\\t\\tfor ( prop in orig ) {\\n\\t\\t\\t\\t\\tjQuery.style( elem, prop, orig[ prop ] );\\n\\t\\t\\t\\t}\\n\\t\\t\\t} );\\n\\t\\t}\\n\\n\\t\\t// Per-property setup\\n\\t\\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\\n\\t\\tif ( !( prop in dataShow ) ) {\\n\\t\\t\\tdataShow[ prop ] = propTween.start;\\n\\t\\t\\tif ( hidden ) {\\n\\t\\t\\t\\tpropTween.end = propTween.start;\\n\\t\\t\\t\\tpropTween.start = 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction propFilter( props, specialEasing ) {\\n\\tvar index, name, easing, value, hooks;\\n\\n\\t// camelCase, specialEasing and expand cssHook pass\\n\\tfor ( index in props ) {\\n\\t\\tname = camelCase( index );\\n\\t\\teasing = specialEasing[ name ];\\n\\t\\tvalue = props[ index ];\\n\\t\\tif ( Array.isArray( value ) ) {\\n\\t\\t\\teasing = value[ 1 ];\\n\\t\\t\\tvalue = props[ index ] = value[ 0 ];\\n\\t\\t}\\n\\n\\t\\tif ( index !== name ) {\\n\\t\\t\\tprops[ name ] = value;\\n\\t\\t\\tdelete props[ index ];\\n\\t\\t}\\n\\n\\t\\thooks = jQuery.cssHooks[ name ];\\n\\t\\tif ( hooks && \\\"expand\\\" in hooks ) {\\n\\t\\t\\tvalue = hooks.expand( value );\\n\\t\\t\\tdelete props[ name ];\\n\\n\\t\\t\\t// Not quite $.extend, this won't overwrite existing keys.\\n\\t\\t\\t// Reusing 'index' because we have the correct \\\"name\\\"\\n\\t\\t\\tfor ( index in value ) {\\n\\t\\t\\t\\tif ( !( index in props ) ) {\\n\\t\\t\\t\\t\\tprops[ index ] = value[ index ];\\n\\t\\t\\t\\t\\tspecialEasing[ index ] = easing;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tspecialEasing[ name ] = easing;\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction Animation( elem, properties, options ) {\\n\\tvar result,\\n\\t\\tstopped,\\n\\t\\tindex = 0,\\n\\t\\tlength = Animation.prefilters.length,\\n\\t\\tdeferred = jQuery.Deferred().always( function() {\\n\\n\\t\\t\\t// Don't match elem in the :animated selector\\n\\t\\t\\tdelete tick.elem;\\n\\t\\t} ),\\n\\t\\ttick = function() {\\n\\t\\t\\tif ( stopped ) {\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t\\tvar currentTime = fxNow || createFxNow(),\\n\\t\\t\\t\\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\\n\\n\\t\\t\\t\\t// Support: Android 2.3 only\\n\\t\\t\\t\\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\\n\\t\\t\\t\\ttemp = remaining / animation.duration || 0,\\n\\t\\t\\t\\tpercent = 1 - temp,\\n\\t\\t\\t\\tindex = 0,\\n\\t\\t\\t\\tlength = animation.tweens.length;\\n\\n\\t\\t\\tfor ( ; index < length; index++ ) {\\n\\t\\t\\t\\tanimation.tweens[ index ].run( percent );\\n\\t\\t\\t}\\n\\n\\t\\t\\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\\n\\n\\t\\t\\t// If there's more to do, yield\\n\\t\\t\\tif ( percent < 1 && length ) {\\n\\t\\t\\t\\treturn remaining;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If this was an empty animation, synthesize a final progress notification\\n\\t\\t\\tif ( !length ) {\\n\\t\\t\\t\\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Resolve the animation and report its conclusion\\n\\t\\t\\tdeferred.resolveWith( elem, [ animation ] );\\n\\t\\t\\treturn false;\\n\\t\\t},\\n\\t\\tanimation = deferred.promise( {\\n\\t\\t\\telem: elem,\\n\\t\\t\\tprops: jQuery.extend( {}, properties ),\\n\\t\\t\\topts: jQuery.extend( true, {\\n\\t\\t\\t\\tspecialEasing: {},\\n\\t\\t\\t\\teasing: jQuery.easing._default\\n\\t\\t\\t}, options ),\\n\\t\\t\\toriginalProperties: properties,\\n\\t\\t\\toriginalOptions: options,\\n\\t\\t\\tstartTime: fxNow || createFxNow(),\\n\\t\\t\\tduration: options.duration,\\n\\t\\t\\ttweens: [],\\n\\t\\t\\tcreateTween: function( prop, end ) {\\n\\t\\t\\t\\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\\n\\t\\t\\t\\t\\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\\n\\t\\t\\t\\tanimation.tweens.push( tween );\\n\\t\\t\\t\\treturn tween;\\n\\t\\t\\t},\\n\\t\\t\\tstop: function( gotoEnd ) {\\n\\t\\t\\t\\tvar index = 0,\\n\\n\\t\\t\\t\\t\\t// If we are going to the end, we want to run all the tweens\\n\\t\\t\\t\\t\\t// otherwise we skip this part\\n\\t\\t\\t\\t\\tlength = gotoEnd ? animation.tweens.length : 0;\\n\\t\\t\\t\\tif ( stopped ) {\\n\\t\\t\\t\\t\\treturn this;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tstopped = true;\\n\\t\\t\\t\\tfor ( ; index < length; index++ ) {\\n\\t\\t\\t\\t\\tanimation.tweens[ index ].run( 1 );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Resolve when we played the last frame; otherwise, reject\\n\\t\\t\\t\\tif ( gotoEnd ) {\\n\\t\\t\\t\\t\\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\\n\\t\\t\\t\\t\\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn this;\\n\\t\\t\\t}\\n\\t\\t} ),\\n\\t\\tprops = animation.props;\\n\\n\\tpropFilter( props, animation.opts.specialEasing );\\n\\n\\tfor ( ; index < length; index++ ) {\\n\\t\\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\\n\\t\\tif ( result ) {\\n\\t\\t\\tif ( isFunction( result.stop ) ) {\\n\\t\\t\\t\\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\\n\\t\\t\\t\\t\\tresult.stop.bind( result );\\n\\t\\t\\t}\\n\\t\\t\\treturn result;\\n\\t\\t}\\n\\t}\\n\\n\\tjQuery.map( props, createTween, animation );\\n\\n\\tif ( isFunction( animation.opts.start ) ) {\\n\\t\\tanimation.opts.start.call( elem, animation );\\n\\t}\\n\\n\\t// Attach callbacks from options\\n\\tanimation\\n\\t\\t.progress( animation.opts.progress )\\n\\t\\t.done( animation.opts.done, animation.opts.complete )\\n\\t\\t.fail( animation.opts.fail )\\n\\t\\t.always( animation.opts.always );\\n\\n\\tjQuery.fx.timer(\\n\\t\\tjQuery.extend( tick, {\\n\\t\\t\\telem: elem,\\n\\t\\t\\tanim: animation,\\n\\t\\t\\tqueue: animation.opts.queue\\n\\t\\t} )\\n\\t);\\n\\n\\treturn animation;\\n}\\n\\njQuery.Animation = jQuery.extend( Animation, {\\n\\n\\ttweeners: {\\n\\t\\t\\\"*\\\": [ function( prop, value ) {\\n\\t\\t\\tvar tween = this.createTween( prop, value );\\n\\t\\t\\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\\n\\t\\t\\treturn tween;\\n\\t\\t} ]\\n\\t},\\n\\n\\ttweener: function( props, callback ) {\\n\\t\\tif ( isFunction( props ) ) {\\n\\t\\t\\tcallback = props;\\n\\t\\t\\tprops = [ \\\"*\\\" ];\\n\\t\\t} else {\\n\\t\\t\\tprops = props.match( rnothtmlwhite );\\n\\t\\t}\\n\\n\\t\\tvar prop,\\n\\t\\t\\tindex = 0,\\n\\t\\t\\tlength = props.length;\\n\\n\\t\\tfor ( ; index < length; index++ ) {\\n\\t\\t\\tprop = props[ index ];\\n\\t\\t\\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\\n\\t\\t\\tAnimation.tweeners[ prop ].unshift( callback );\\n\\t\\t}\\n\\t},\\n\\n\\tprefilters: [ defaultPrefilter ],\\n\\n\\tprefilter: function( callback, prepend ) {\\n\\t\\tif ( prepend ) {\\n\\t\\t\\tAnimation.prefilters.unshift( callback );\\n\\t\\t} else {\\n\\t\\t\\tAnimation.prefilters.push( callback );\\n\\t\\t}\\n\\t}\\n} );\\n\\njQuery.speed = function( speed, easing, fn ) {\\n\\tvar opt = speed && typeof speed === \\\"object\\\" ? jQuery.extend( {}, speed ) : {\\n\\t\\tcomplete: fn || !fn && easing ||\\n\\t\\t\\tisFunction( speed ) && speed,\\n\\t\\tduration: speed,\\n\\t\\teasing: fn && easing || easing && !isFunction( easing ) && easing\\n\\t};\\n\\n\\t// Go to the end state if fx are off\\n\\tif ( jQuery.fx.off ) {\\n\\t\\topt.duration = 0;\\n\\n\\t} else {\\n\\t\\tif ( typeof opt.duration !== \\\"number\\\" ) {\\n\\t\\t\\tif ( opt.duration in jQuery.fx.speeds ) {\\n\\t\\t\\t\\topt.duration = jQuery.fx.speeds[ opt.duration ];\\n\\n\\t\\t\\t} else {\\n\\t\\t\\t\\topt.duration = jQuery.fx.speeds._default;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t// Normalize opt.queue - true/undefined/null -> \\\"fx\\\"\\n\\tif ( opt.queue == null || opt.queue === true ) {\\n\\t\\topt.queue = \\\"fx\\\";\\n\\t}\\n\\n\\t// Queueing\\n\\topt.old = opt.complete;\\n\\n\\topt.complete = function() {\\n\\t\\tif ( isFunction( opt.old ) ) {\\n\\t\\t\\topt.old.call( this );\\n\\t\\t}\\n\\n\\t\\tif ( opt.queue ) {\\n\\t\\t\\tjQuery.dequeue( this, opt.queue );\\n\\t\\t}\\n\\t};\\n\\n\\treturn opt;\\n};\\n\\njQuery.fn.extend( {\\n\\tfadeTo: function( speed, to, easing, callback ) {\\n\\n\\t\\t// Show any hidden elements after setting opacity to 0\\n\\t\\treturn this.filter( isHiddenWithinTree ).css( \\\"opacity\\\", 0 ).show()\\n\\n\\t\\t\\t// Animate to the value specified\\n\\t\\t\\t.end().animate( { opacity: to }, speed, easing, callback );\\n\\t},\\n\\tanimate: function( prop, speed, easing, callback ) {\\n\\t\\tvar empty = jQuery.isEmptyObject( prop ),\\n\\t\\t\\toptall = jQuery.speed( speed, easing, callback ),\\n\\t\\t\\tdoAnimation = function() {\\n\\n\\t\\t\\t\\t// Operate on a copy of prop so per-property easing won't be lost\\n\\t\\t\\t\\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\\n\\n\\t\\t\\t\\t// Empty animations, or finishing resolves immediately\\n\\t\\t\\t\\tif ( empty || dataPriv.get( this, \\\"finish\\\" ) ) {\\n\\t\\t\\t\\t\\tanim.stop( true );\\n\\t\\t\\t\\t}\\n\\t\\t\\t};\\n\\n\\t\\tdoAnimation.finish = doAnimation;\\n\\n\\t\\treturn empty || optall.queue === false ?\\n\\t\\t\\tthis.each( doAnimation ) :\\n\\t\\t\\tthis.queue( optall.queue, doAnimation );\\n\\t},\\n\\tstop: function( type, clearQueue, gotoEnd ) {\\n\\t\\tvar stopQueue = function( hooks ) {\\n\\t\\t\\tvar stop = hooks.stop;\\n\\t\\t\\tdelete hooks.stop;\\n\\t\\t\\tstop( gotoEnd );\\n\\t\\t};\\n\\n\\t\\tif ( typeof type !== \\\"string\\\" ) {\\n\\t\\t\\tgotoEnd = clearQueue;\\n\\t\\t\\tclearQueue = type;\\n\\t\\t\\ttype = undefined;\\n\\t\\t}\\n\\t\\tif ( clearQueue ) {\\n\\t\\t\\tthis.queue( type || \\\"fx\\\", [] );\\n\\t\\t}\\n\\n\\t\\treturn this.each( function() {\\n\\t\\t\\tvar dequeue = true,\\n\\t\\t\\t\\tindex = type != null && type + \\\"queueHooks\\\",\\n\\t\\t\\t\\ttimers = jQuery.timers,\\n\\t\\t\\t\\tdata = dataPriv.get( this );\\n\\n\\t\\t\\tif ( index ) {\\n\\t\\t\\t\\tif ( data[ index ] && data[ index ].stop ) {\\n\\t\\t\\t\\t\\tstopQueue( data[ index ] );\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tfor ( index in data ) {\\n\\t\\t\\t\\t\\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\\n\\t\\t\\t\\t\\t\\tstopQueue( data[ index ] );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tfor ( index = timers.length; index--; ) {\\n\\t\\t\\t\\tif ( timers[ index ].elem === this &&\\n\\t\\t\\t\\t\\t( type == null || timers[ index ].queue === type ) ) {\\n\\n\\t\\t\\t\\t\\ttimers[ index ].anim.stop( gotoEnd );\\n\\t\\t\\t\\t\\tdequeue = false;\\n\\t\\t\\t\\t\\ttimers.splice( index, 1 );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Start the next in the queue if the last step wasn't forced.\\n\\t\\t\\t// Timers currently will call their complete callbacks, which\\n\\t\\t\\t// will dequeue but only if they were gotoEnd.\\n\\t\\t\\tif ( dequeue || !gotoEnd ) {\\n\\t\\t\\t\\tjQuery.dequeue( this, type );\\n\\t\\t\\t}\\n\\t\\t} );\\n\\t},\\n\\tfinish: function( type ) {\\n\\t\\tif ( type !== false ) {\\n\\t\\t\\ttype = type || \\\"fx\\\";\\n\\t\\t}\\n\\t\\treturn this.each( function() {\\n\\t\\t\\tvar index,\\n\\t\\t\\t\\tdata = dataPriv.get( this ),\\n\\t\\t\\t\\tqueue = data[ type + \\\"queue\\\" ],\\n\\t\\t\\t\\thooks = data[ type + \\\"queueHooks\\\" ],\\n\\t\\t\\t\\ttimers = jQuery.timers,\\n\\t\\t\\t\\tlength = queue ? queue.length : 0;\\n\\n\\t\\t\\t// Enable finishing flag on private data\\n\\t\\t\\tdata.finish = true;\\n\\n\\t\\t\\t// Empty the queue first\\n\\t\\t\\tjQuery.queue( this, type, [] );\\n\\n\\t\\t\\tif ( hooks && hooks.stop ) {\\n\\t\\t\\t\\thooks.stop.call( this, true );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Look for any active animations, and finish them\\n\\t\\t\\tfor ( index = timers.length; index--; ) {\\n\\t\\t\\t\\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\\n\\t\\t\\t\\t\\ttimers[ index ].anim.stop( true );\\n\\t\\t\\t\\t\\ttimers.splice( index, 1 );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Look for any animations in the old queue and finish them\\n\\t\\t\\tfor ( index = 0; index < length; index++ ) {\\n\\t\\t\\t\\tif ( queue[ index ] && queue[ index ].finish ) {\\n\\t\\t\\t\\t\\tqueue[ index ].finish.call( this );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Turn off finishing flag\\n\\t\\t\\tdelete data.finish;\\n\\t\\t} );\\n\\t}\\n} );\\n\\njQuery.each( [ \\\"toggle\\\", \\\"show\\\", \\\"hide\\\" ], function( _i, name ) {\\n\\tvar cssFn = jQuery.fn[ name ];\\n\\tjQuery.fn[ name ] = function( speed, easing, callback ) {\\n\\t\\treturn speed == null || typeof speed === \\\"boolean\\\" ?\\n\\t\\t\\tcssFn.apply( this, arguments ) :\\n\\t\\t\\tthis.animate( genFx( name, true ), speed, easing, callback );\\n\\t};\\n} );\\n\\n// Generate shortcuts for custom animations\\njQuery.each( {\\n\\tslideDown: genFx( \\\"show\\\" ),\\n\\tslideUp: genFx( \\\"hide\\\" ),\\n\\tslideToggle: genFx( \\\"toggle\\\" ),\\n\\tfadeIn: { opacity: \\\"show\\\" },\\n\\tfadeOut: { opacity: \\\"hide\\\" },\\n\\tfadeToggle: { opacity: \\\"toggle\\\" }\\n}, function( name, props ) {\\n\\tjQuery.fn[ name ] = function( speed, easing, callback ) {\\n\\t\\treturn this.animate( props, speed, easing, callback );\\n\\t};\\n} );\\n\\njQuery.timers = [];\\njQuery.fx.tick = function() {\\n\\tvar timer,\\n\\t\\ti = 0,\\n\\t\\ttimers = jQuery.timers;\\n\\n\\tfxNow = Date.now();\\n\\n\\tfor ( ; i < timers.length; i++ ) {\\n\\t\\ttimer = timers[ i ];\\n\\n\\t\\t// Run the timer and safely remove it when done (allowing for external removal)\\n\\t\\tif ( !timer() && timers[ i ] === timer ) {\\n\\t\\t\\ttimers.splice( i--, 1 );\\n\\t\\t}\\n\\t}\\n\\n\\tif ( !timers.length ) {\\n\\t\\tjQuery.fx.stop();\\n\\t}\\n\\tfxNow = undefined;\\n};\\n\\njQuery.fx.timer = function( timer ) {\\n\\tjQuery.timers.push( timer );\\n\\tjQuery.fx.start();\\n};\\n\\njQuery.fx.interval = 13;\\njQuery.fx.start = function() {\\n\\tif ( inProgress ) {\\n\\t\\treturn;\\n\\t}\\n\\n\\tinProgress = true;\\n\\tschedule();\\n};\\n\\njQuery.fx.stop = function() {\\n\\tinProgress = null;\\n};\\n\\njQuery.fx.speeds = {\\n\\tslow: 600,\\n\\tfast: 200,\\n\\n\\t// Default speed\\n\\t_default: 400\\n};\\n\\n\\n// Based off of the plugin by Clint Helfers, with permission.\\njQuery.fn.delay = function( time, type ) {\\n\\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\\n\\ttype = type || \\\"fx\\\";\\n\\n\\treturn this.queue( type, function( next, hooks ) {\\n\\t\\tvar timeout = window.setTimeout( next, time );\\n\\t\\thooks.stop = function() {\\n\\t\\t\\twindow.clearTimeout( timeout );\\n\\t\\t};\\n\\t} );\\n};\\n\\n\\n( function() {\\n\\tvar input = document.createElement( \\\"input\\\" ),\\n\\t\\tselect = document.createElement( \\\"select\\\" ),\\n\\t\\topt = select.appendChild( document.createElement( \\\"option\\\" ) );\\n\\n\\tinput.type = \\\"checkbox\\\";\\n\\n\\t// Support: Android <=4.3 only\\n\\t// Default value for a checkbox should be \\\"on\\\"\\n\\tsupport.checkOn = input.value !== \\\"\\\";\\n\\n\\t// Support: IE <=11 only\\n\\t// Must access selectedIndex to make default options select\\n\\tsupport.optSelected = opt.selected;\\n\\n\\t// Support: IE <=11 only\\n\\t// An input loses its value after becoming a radio\\n\\tinput = document.createElement( \\\"input\\\" );\\n\\tinput.value = \\\"t\\\";\\n\\tinput.type = \\\"radio\\\";\\n\\tsupport.radioValue = input.value === \\\"t\\\";\\n} )();\\n\\n\\nvar boolHook,\\n\\tattrHandle = jQuery.expr.attrHandle;\\n\\njQuery.fn.extend( {\\n\\tattr: function( name, value ) {\\n\\t\\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\\n\\t},\\n\\n\\tremoveAttr: function( name ) {\\n\\t\\treturn this.each( function() {\\n\\t\\t\\tjQuery.removeAttr( this, name );\\n\\t\\t} );\\n\\t}\\n} );\\n\\njQuery.extend( {\\n\\tattr: function( elem, name, value ) {\\n\\t\\tvar ret, hooks,\\n\\t\\t\\tnType = elem.nodeType;\\n\\n\\t\\t// Don't get/set attributes on text, comment and attribute nodes\\n\\t\\tif ( nType === 3 || nType === 8 || nType === 2 ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\t// Fallback to prop when attributes are not supported\\n\\t\\tif ( typeof elem.getAttribute === \\\"undefined\\\" ) {\\n\\t\\t\\treturn jQuery.prop( elem, name, value );\\n\\t\\t}\\n\\n\\t\\t// Attribute hooks are determined by the lowercase version\\n\\t\\t// Grab necessary hook if one is defined\\n\\t\\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\\n\\t\\t\\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\\n\\t\\t\\t\\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\\n\\t\\t}\\n\\n\\t\\tif ( value !== undefined ) {\\n\\t\\t\\tif ( value === null ) {\\n\\t\\t\\t\\tjQuery.removeAttr( elem, name );\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif ( hooks && \\\"set\\\" in hooks &&\\n\\t\\t\\t\\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\\n\\t\\t\\t\\treturn ret;\\n\\t\\t\\t}\\n\\n\\t\\t\\telem.setAttribute( name, value + \\\"\\\" );\\n\\t\\t\\treturn value;\\n\\t\\t}\\n\\n\\t\\tif ( hooks && \\\"get\\\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\\n\\t\\t\\treturn ret;\\n\\t\\t}\\n\\n\\t\\tret = jQuery.find.attr( elem, name );\\n\\n\\t\\t// Non-existent attributes return null, we normalize to undefined\\n\\t\\treturn ret == null ? undefined : ret;\\n\\t},\\n\\n\\tattrHooks: {\\n\\t\\ttype: {\\n\\t\\t\\tset: function( elem, value ) {\\n\\t\\t\\t\\tif ( !support.radioValue && value === \\\"radio\\\" &&\\n\\t\\t\\t\\t\\tnodeName( elem, \\\"input\\\" ) ) {\\n\\t\\t\\t\\t\\tvar val = elem.value;\\n\\t\\t\\t\\t\\telem.setAttribute( \\\"type\\\", value );\\n\\t\\t\\t\\t\\tif ( val ) {\\n\\t\\t\\t\\t\\t\\telem.value = val;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\treturn value;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\n\\tremoveAttr: function( elem, value ) {\\n\\t\\tvar name,\\n\\t\\t\\ti = 0,\\n\\n\\t\\t\\t// Attribute names can contain non-HTML whitespace characters\\n\\t\\t\\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\\n\\t\\t\\tattrNames = value && value.match( rnothtmlwhite );\\n\\n\\t\\tif ( attrNames && elem.nodeType === 1 ) {\\n\\t\\t\\twhile ( ( name = attrNames[ i++ ] ) ) {\\n\\t\\t\\t\\telem.removeAttribute( name );\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n} );\\n\\n// Hooks for boolean attributes\\nboolHook = {\\n\\tset: function( elem, value, name ) {\\n\\t\\tif ( value === false ) {\\n\\n\\t\\t\\t// Remove boolean attributes when set to false\\n\\t\\t\\tjQuery.removeAttr( elem, name );\\n\\t\\t} else {\\n\\t\\t\\telem.setAttribute( name, name );\\n\\t\\t}\\n\\t\\treturn name;\\n\\t}\\n};\\n\\njQuery.each( jQuery.expr.match.bool.source.match( /\\\\w+/g ), function( _i, name ) {\\n\\tvar getter = attrHandle[ name ] || jQuery.find.attr;\\n\\n\\tattrHandle[ name ] = function( elem, name, isXML ) {\\n\\t\\tvar ret, handle,\\n\\t\\t\\tlowercaseName = name.toLowerCase();\\n\\n\\t\\tif ( !isXML ) {\\n\\n\\t\\t\\t// Avoid an infinite loop by temporarily removing this function from the getter\\n\\t\\t\\thandle = attrHandle[ lowercaseName ];\\n\\t\\t\\tattrHandle[ lowercaseName ] = ret;\\n\\t\\t\\tret = getter( elem, name, isXML ) != null ?\\n\\t\\t\\t\\tlowercaseName :\\n\\t\\t\\t\\tnull;\\n\\t\\t\\tattrHandle[ lowercaseName ] = handle;\\n\\t\\t}\\n\\t\\treturn ret;\\n\\t};\\n} );\\n\\n\\n\\n\\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\\n\\trclickable = /^(?:a|area)$/i;\\n\\njQuery.fn.extend( {\\n\\tprop: function( name, value ) {\\n\\t\\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\\n\\t},\\n\\n\\tremoveProp: function( name ) {\\n\\t\\treturn this.each( function() {\\n\\t\\t\\tdelete this[ jQuery.propFix[ name ] || name ];\\n\\t\\t} );\\n\\t}\\n} );\\n\\njQuery.extend( {\\n\\tprop: function( elem, name, value ) {\\n\\t\\tvar ret, hooks,\\n\\t\\t\\tnType = elem.nodeType;\\n\\n\\t\\t// Don't get/set properties on text, comment and attribute nodes\\n\\t\\tif ( nType === 3 || nType === 8 || nType === 2 ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\\n\\n\\t\\t\\t// Fix name and attach hooks\\n\\t\\t\\tname = jQuery.propFix[ name ] || name;\\n\\t\\t\\thooks = jQuery.propHooks[ name ];\\n\\t\\t}\\n\\n\\t\\tif ( value !== undefined ) {\\n\\t\\t\\tif ( hooks && \\\"set\\\" in hooks &&\\n\\t\\t\\t\\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\\n\\t\\t\\t\\treturn ret;\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn ( elem[ name ] = value );\\n\\t\\t}\\n\\n\\t\\tif ( hooks && \\\"get\\\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\\n\\t\\t\\treturn ret;\\n\\t\\t}\\n\\n\\t\\treturn elem[ name ];\\n\\t},\\n\\n\\tpropHooks: {\\n\\t\\ttabIndex: {\\n\\t\\t\\tget: function( elem ) {\\n\\n\\t\\t\\t\\t// Support: IE <=9 - 11 only\\n\\t\\t\\t\\t// elem.tabIndex doesn't always return the\\n\\t\\t\\t\\t// correct value when it hasn't been explicitly set\\n\\t\\t\\t\\t// Use proper attribute retrieval (trac-12072)\\n\\t\\t\\t\\tvar tabindex = jQuery.find.attr( elem, \\\"tabindex\\\" );\\n\\n\\t\\t\\t\\tif ( tabindex ) {\\n\\t\\t\\t\\t\\treturn parseInt( tabindex, 10 );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif (\\n\\t\\t\\t\\t\\trfocusable.test( elem.nodeName ) ||\\n\\t\\t\\t\\t\\trclickable.test( elem.nodeName ) &&\\n\\t\\t\\t\\t\\telem.href\\n\\t\\t\\t\\t) {\\n\\t\\t\\t\\t\\treturn 0;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\treturn -1;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\n\\tpropFix: {\\n\\t\\t\\\"for\\\": \\\"htmlFor\\\",\\n\\t\\t\\\"class\\\": \\\"className\\\"\\n\\t}\\n} );\\n\\n// Support: IE <=11 only\\n// Accessing the selectedIndex property\\n// forces the browser to respect setting selected\\n// on the option\\n// The getter ensures a default option is selected\\n// when in an optgroup\\n// eslint rule \\\"no-unused-expressions\\\" is disabled for this code\\n// since it considers such accessions noop\\nif ( !support.optSelected ) {\\n\\tjQuery.propHooks.selected = {\\n\\t\\tget: function( elem ) {\\n\\n\\t\\t\\t/* eslint no-unused-expressions: \\\"off\\\" */\\n\\n\\t\\t\\tvar parent = elem.parentNode;\\n\\t\\t\\tif ( parent && parent.parentNode ) {\\n\\t\\t\\t\\tparent.parentNode.selectedIndex;\\n\\t\\t\\t}\\n\\t\\t\\treturn null;\\n\\t\\t},\\n\\t\\tset: function( elem ) {\\n\\n\\t\\t\\t/* eslint no-unused-expressions: \\\"off\\\" */\\n\\n\\t\\t\\tvar parent = elem.parentNode;\\n\\t\\t\\tif ( parent ) {\\n\\t\\t\\t\\tparent.selectedIndex;\\n\\n\\t\\t\\t\\tif ( parent.parentNode ) {\\n\\t\\t\\t\\t\\tparent.parentNode.selectedIndex;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n}\\n\\njQuery.each( [\\n\\t\\\"tabIndex\\\",\\n\\t\\\"readOnly\\\",\\n\\t\\\"maxLength\\\",\\n\\t\\\"cellSpacing\\\",\\n\\t\\\"cellPadding\\\",\\n\\t\\\"rowSpan\\\",\\n\\t\\\"colSpan\\\",\\n\\t\\\"useMap\\\",\\n\\t\\\"frameBorder\\\",\\n\\t\\\"contentEditable\\\"\\n], function() {\\n\\tjQuery.propFix[ this.toLowerCase() ] = this;\\n} );\\n\\n\\n\\n\\n\\t// Strip and collapse whitespace according to HTML spec\\n\\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\\n\\tfunction stripAndCollapse( value ) {\\n\\t\\tvar tokens = value.match( rnothtmlwhite ) || [];\\n\\t\\treturn tokens.join( \\\" \\\" );\\n\\t}\\n\\n\\nfunction getClass( elem ) {\\n\\treturn elem.getAttribute && elem.getAttribute( \\\"class\\\" ) || \\\"\\\";\\n}\\n\\nfunction classesToArray( value ) {\\n\\tif ( Array.isArray( value ) ) {\\n\\t\\treturn value;\\n\\t}\\n\\tif ( typeof value === \\\"string\\\" ) {\\n\\t\\treturn value.match( rnothtmlwhite ) || [];\\n\\t}\\n\\treturn [];\\n}\\n\\njQuery.fn.extend( {\\n\\taddClass: function( value ) {\\n\\t\\tvar classNames, cur, curValue, className, i, finalValue;\\n\\n\\t\\tif ( isFunction( value ) ) {\\n\\t\\t\\treturn this.each( function( j ) {\\n\\t\\t\\t\\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\\n\\t\\t\\t} );\\n\\t\\t}\\n\\n\\t\\tclassNames = classesToArray( value );\\n\\n\\t\\tif ( classNames.length ) {\\n\\t\\t\\treturn this.each( function() {\\n\\t\\t\\t\\tcurValue = getClass( this );\\n\\t\\t\\t\\tcur = this.nodeType === 1 && ( \\\" \\\" + stripAndCollapse( curValue ) + \\\" \\\" );\\n\\n\\t\\t\\t\\tif ( cur ) {\\n\\t\\t\\t\\t\\tfor ( i = 0; i < classNames.length; i++ ) {\\n\\t\\t\\t\\t\\t\\tclassName = classNames[ i ];\\n\\t\\t\\t\\t\\t\\tif ( cur.indexOf( \\\" \\\" + className + \\\" \\\" ) < 0 ) {\\n\\t\\t\\t\\t\\t\\t\\tcur += className + \\\" \\\";\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t// Only assign if different to avoid unneeded rendering.\\n\\t\\t\\t\\t\\tfinalValue = stripAndCollapse( cur );\\n\\t\\t\\t\\t\\tif ( curValue !== finalValue ) {\\n\\t\\t\\t\\t\\t\\tthis.setAttribute( \\\"class\\\", finalValue );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t} );\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t},\\n\\n\\tremoveClass: function( value ) {\\n\\t\\tvar classNames, cur, curValue, className, i, finalValue;\\n\\n\\t\\tif ( isFunction( value ) ) {\\n\\t\\t\\treturn this.each( function( j ) {\\n\\t\\t\\t\\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\\n\\t\\t\\t} );\\n\\t\\t}\\n\\n\\t\\tif ( !arguments.length ) {\\n\\t\\t\\treturn this.attr( \\\"class\\\", \\\"\\\" );\\n\\t\\t}\\n\\n\\t\\tclassNames = classesToArray( value );\\n\\n\\t\\tif ( classNames.length ) {\\n\\t\\t\\treturn this.each( function() {\\n\\t\\t\\t\\tcurValue = getClass( this );\\n\\n\\t\\t\\t\\t// This expression is here for better compressibility (see addClass)\\n\\t\\t\\t\\tcur = this.nodeType === 1 && ( \\\" \\\" + stripAndCollapse( curValue ) + \\\" \\\" );\\n\\n\\t\\t\\t\\tif ( cur ) {\\n\\t\\t\\t\\t\\tfor ( i = 0; i < classNames.length; i++ ) {\\n\\t\\t\\t\\t\\t\\tclassName = classNames[ i ];\\n\\n\\t\\t\\t\\t\\t\\t// Remove *all* instances\\n\\t\\t\\t\\t\\t\\twhile ( cur.indexOf( \\\" \\\" + className + \\\" \\\" ) > -1 ) {\\n\\t\\t\\t\\t\\t\\t\\tcur = cur.replace( \\\" \\\" + className + \\\" \\\", \\\" \\\" );\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t// Only assign if different to avoid unneeded rendering.\\n\\t\\t\\t\\t\\tfinalValue = stripAndCollapse( cur );\\n\\t\\t\\t\\t\\tif ( curValue !== finalValue ) {\\n\\t\\t\\t\\t\\t\\tthis.setAttribute( \\\"class\\\", finalValue );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t} );\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t},\\n\\n\\ttoggleClass: function( value, stateVal ) {\\n\\t\\tvar classNames, className, i, self,\\n\\t\\t\\ttype = typeof value,\\n\\t\\t\\tisValidValue = type === \\\"string\\\" || Array.isArray( value );\\n\\n\\t\\tif ( isFunction( value ) ) {\\n\\t\\t\\treturn this.each( function( i ) {\\n\\t\\t\\t\\tjQuery( this ).toggleClass(\\n\\t\\t\\t\\t\\tvalue.call( this, i, getClass( this ), stateVal ),\\n\\t\\t\\t\\t\\tstateVal\\n\\t\\t\\t\\t);\\n\\t\\t\\t} );\\n\\t\\t}\\n\\n\\t\\tif ( typeof stateVal === \\\"boolean\\\" && isValidValue ) {\\n\\t\\t\\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\\n\\t\\t}\\n\\n\\t\\tclassNames = classesToArray( value );\\n\\n\\t\\treturn this.each( function() {\\n\\t\\t\\tif ( isValidValue ) {\\n\\n\\t\\t\\t\\t// Toggle individual class names\\n\\t\\t\\t\\tself = jQuery( this );\\n\\n\\t\\t\\t\\tfor ( i = 0; i < classNames.length; i++ ) {\\n\\t\\t\\t\\t\\tclassName = classNames[ i ];\\n\\n\\t\\t\\t\\t\\t// Check each className given, space separated list\\n\\t\\t\\t\\t\\tif ( self.hasClass( className ) ) {\\n\\t\\t\\t\\t\\t\\tself.removeClass( className );\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tself.addClass( className );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t// Toggle whole class name\\n\\t\\t\\t} else if ( value === undefined || type === \\\"boolean\\\" ) {\\n\\t\\t\\t\\tclassName = getClass( this );\\n\\t\\t\\t\\tif ( className ) {\\n\\n\\t\\t\\t\\t\\t// Store className if set\\n\\t\\t\\t\\t\\tdataPriv.set( this, \\\"__className__\\\", className );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// If the element has a class name or if we're passed `false`,\\n\\t\\t\\t\\t// then remove the whole classname (if there was one, the above saved it).\\n\\t\\t\\t\\t// Otherwise bring back whatever was previously saved (if anything),\\n\\t\\t\\t\\t// falling back to the empty string if nothing was stored.\\n\\t\\t\\t\\tif ( this.setAttribute ) {\\n\\t\\t\\t\\t\\tthis.setAttribute( \\\"class\\\",\\n\\t\\t\\t\\t\\t\\tclassName || value === false ?\\n\\t\\t\\t\\t\\t\\t\\t\\\"\\\" :\\n\\t\\t\\t\\t\\t\\t\\tdataPriv.get( this, \\\"__className__\\\" ) || \\\"\\\"\\n\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t} );\\n\\t},\\n\\n\\thasClass: function( selector ) {\\n\\t\\tvar className, elem,\\n\\t\\t\\ti = 0;\\n\\n\\t\\tclassName = \\\" \\\" + selector + \\\" \\\";\\n\\t\\twhile ( ( elem = this[ i++ ] ) ) {\\n\\t\\t\\tif ( elem.nodeType === 1 &&\\n\\t\\t\\t\\t( \\\" \\\" + stripAndCollapse( getClass( elem ) ) + \\\" \\\" ).indexOf( className ) > -1 ) {\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\treturn false;\\n\\t}\\n} );\\n\\n\\n\\n\\nvar rreturn = /\\\\r/g;\\n\\njQuery.fn.extend( {\\n\\tval: function( value ) {\\n\\t\\tvar hooks, ret, valueIsFunction,\\n\\t\\t\\telem = this[ 0 ];\\n\\n\\t\\tif ( !arguments.length ) {\\n\\t\\t\\tif ( elem ) {\\n\\t\\t\\t\\thooks = jQuery.valHooks[ elem.type ] ||\\n\\t\\t\\t\\t\\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\\n\\n\\t\\t\\t\\tif ( hooks &&\\n\\t\\t\\t\\t\\t\\\"get\\\" in hooks &&\\n\\t\\t\\t\\t\\t( ret = hooks.get( elem, \\\"value\\\" ) ) !== undefined\\n\\t\\t\\t\\t) {\\n\\t\\t\\t\\t\\treturn ret;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tret = elem.value;\\n\\n\\t\\t\\t\\t// Handle most common string cases\\n\\t\\t\\t\\tif ( typeof ret === \\\"string\\\" ) {\\n\\t\\t\\t\\t\\treturn ret.replace( rreturn, \\\"\\\" );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Handle cases where value is null/undef or number\\n\\t\\t\\t\\treturn ret == null ? \\\"\\\" : ret;\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\tvalueIsFunction = isFunction( value );\\n\\n\\t\\treturn this.each( function( i ) {\\n\\t\\t\\tvar val;\\n\\n\\t\\t\\tif ( this.nodeType !== 1 ) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif ( valueIsFunction ) {\\n\\t\\t\\t\\tval = value.call( this, i, jQuery( this ).val() );\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tval = value;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Treat null/undefined as \\\"\\\"; convert numbers to string\\n\\t\\t\\tif ( val == null ) {\\n\\t\\t\\t\\tval = \\\"\\\";\\n\\n\\t\\t\\t} else if ( typeof val === \\\"number\\\" ) {\\n\\t\\t\\t\\tval += \\\"\\\";\\n\\n\\t\\t\\t} else if ( Array.isArray( val ) ) {\\n\\t\\t\\t\\tval = jQuery.map( val, function( value ) {\\n\\t\\t\\t\\t\\treturn value == null ? \\\"\\\" : value + \\\"\\\";\\n\\t\\t\\t\\t} );\\n\\t\\t\\t}\\n\\n\\t\\t\\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\\n\\n\\t\\t\\t// If set returns undefined, fall back to normal setting\\n\\t\\t\\tif ( !hooks || !( \\\"set\\\" in hooks ) || hooks.set( this, val, \\\"value\\\" ) === undefined ) {\\n\\t\\t\\t\\tthis.value = val;\\n\\t\\t\\t}\\n\\t\\t} );\\n\\t}\\n} );\\n\\njQuery.extend( {\\n\\tvalHooks: {\\n\\t\\toption: {\\n\\t\\t\\tget: function( elem ) {\\n\\n\\t\\t\\t\\tvar val = jQuery.find.attr( elem, \\\"value\\\" );\\n\\t\\t\\t\\treturn val != null ?\\n\\t\\t\\t\\t\\tval :\\n\\n\\t\\t\\t\\t\\t// Support: IE <=10 - 11 only\\n\\t\\t\\t\\t\\t// option.text throws exceptions (trac-14686, trac-14858)\\n\\t\\t\\t\\t\\t// Strip and collapse whitespace\\n\\t\\t\\t\\t\\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\\n\\t\\t\\t\\t\\tstripAndCollapse( jQuery.text( elem ) );\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tselect: {\\n\\t\\t\\tget: function( elem ) {\\n\\t\\t\\t\\tvar value, option, i,\\n\\t\\t\\t\\t\\toptions = elem.options,\\n\\t\\t\\t\\t\\tindex = elem.selectedIndex,\\n\\t\\t\\t\\t\\tone = elem.type === \\\"select-one\\\",\\n\\t\\t\\t\\t\\tvalues = one ? null : [],\\n\\t\\t\\t\\t\\tmax = one ? index + 1 : options.length;\\n\\n\\t\\t\\t\\tif ( index < 0 ) {\\n\\t\\t\\t\\t\\ti = max;\\n\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\ti = one ? index : 0;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Loop through all the selected options\\n\\t\\t\\t\\tfor ( ; i < max; i++ ) {\\n\\t\\t\\t\\t\\toption = options[ i ];\\n\\n\\t\\t\\t\\t\\t// Support: IE <=9 only\\n\\t\\t\\t\\t\\t// IE8-9 doesn't update selected after form reset (trac-2551)\\n\\t\\t\\t\\t\\tif ( ( option.selected || i === index ) &&\\n\\n\\t\\t\\t\\t\\t\\t\\t// Don't return options that are disabled or in a disabled optgroup\\n\\t\\t\\t\\t\\t\\t\\t!option.disabled &&\\n\\t\\t\\t\\t\\t\\t\\t( !option.parentNode.disabled ||\\n\\t\\t\\t\\t\\t\\t\\t\\t!nodeName( option.parentNode, \\\"optgroup\\\" ) ) ) {\\n\\n\\t\\t\\t\\t\\t\\t// Get the specific value for the option\\n\\t\\t\\t\\t\\t\\tvalue = jQuery( option ).val();\\n\\n\\t\\t\\t\\t\\t\\t// We don't need an array for one selects\\n\\t\\t\\t\\t\\t\\tif ( one ) {\\n\\t\\t\\t\\t\\t\\t\\treturn value;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t// Multi-Selects return an array\\n\\t\\t\\t\\t\\t\\tvalues.push( value );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\treturn values;\\n\\t\\t\\t},\\n\\n\\t\\t\\tset: function( elem, value ) {\\n\\t\\t\\t\\tvar optionSet, option,\\n\\t\\t\\t\\t\\toptions = elem.options,\\n\\t\\t\\t\\t\\tvalues = jQuery.makeArray( value ),\\n\\t\\t\\t\\t\\ti = options.length;\\n\\n\\t\\t\\t\\twhile ( i-- ) {\\n\\t\\t\\t\\t\\toption = options[ i ];\\n\\n\\t\\t\\t\\t\\t/* eslint-disable no-cond-assign */\\n\\n\\t\\t\\t\\t\\tif ( option.selected =\\n\\t\\t\\t\\t\\t\\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\\n\\t\\t\\t\\t\\t) {\\n\\t\\t\\t\\t\\t\\toptionSet = true;\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t/* eslint-enable no-cond-assign */\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Force browsers to behave consistently when non-matching value is set\\n\\t\\t\\t\\tif ( !optionSet ) {\\n\\t\\t\\t\\t\\telem.selectedIndex = -1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn values;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n} );\\n\\n// Radios and checkboxes getter/setter\\njQuery.each( [ \\\"radio\\\", \\\"checkbox\\\" ], function() {\\n\\tjQuery.valHooks[ this ] = {\\n\\t\\tset: function( elem, value ) {\\n\\t\\t\\tif ( Array.isArray( value ) ) {\\n\\t\\t\\t\\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\tif ( !support.checkOn ) {\\n\\t\\tjQuery.valHooks[ this ].get = function( elem ) {\\n\\t\\t\\treturn elem.getAttribute( \\\"value\\\" ) === null ? \\\"on\\\" : elem.value;\\n\\t\\t};\\n\\t}\\n} );\\n\\n\\n\\n\\n// Return jQuery for attributes-only inclusion\\nvar location = window.location;\\n\\nvar nonce = { guid: Date.now() };\\n\\nvar rquery = ( /\\\\?/ );\\n\\n\\n\\n// Cross-browser xml parsing\\njQuery.parseXML = function( data ) {\\n\\tvar xml, parserErrorElem;\\n\\tif ( !data || typeof data !== \\\"string\\\" ) {\\n\\t\\treturn null;\\n\\t}\\n\\n\\t// Support: IE 9 - 11 only\\n\\t// IE throws on parseFromString with invalid input.\\n\\ttry {\\n\\t\\txml = ( new window.DOMParser() ).parseFromString( data, \\\"text/xml\\\" );\\n\\t} catch ( e ) {}\\n\\n\\tparserErrorElem = xml && xml.getElementsByTagName( \\\"parsererror\\\" )[ 0 ];\\n\\tif ( !xml || parserErrorElem ) {\\n\\t\\tjQuery.error( \\\"Invalid XML: \\\" + (\\n\\t\\t\\tparserErrorElem ?\\n\\t\\t\\t\\tjQuery.map( parserErrorElem.childNodes, function( el ) {\\n\\t\\t\\t\\t\\treturn el.textContent;\\n\\t\\t\\t\\t} ).join( \\\"\\\\n\\\" ) :\\n\\t\\t\\t\\tdata\\n\\t\\t) );\\n\\t}\\n\\treturn xml;\\n};\\n\\n\\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\\n\\tstopPropagationCallback = function( e ) {\\n\\t\\te.stopPropagation();\\n\\t};\\n\\njQuery.extend( jQuery.event, {\\n\\n\\ttrigger: function( event, data, elem, onlyHandlers ) {\\n\\n\\t\\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\\n\\t\\t\\teventPath = [ elem || document ],\\n\\t\\t\\ttype = hasOwn.call( event, \\\"type\\\" ) ? event.type : event,\\n\\t\\t\\tnamespaces = hasOwn.call( event, \\\"namespace\\\" ) ? event.namespace.split( \\\".\\\" ) : [];\\n\\n\\t\\tcur = lastElement = tmp = elem = elem || document;\\n\\n\\t\\t// Don't do events on text and comment nodes\\n\\t\\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\\n\\t\\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\tif ( type.indexOf( \\\".\\\" ) > -1 ) {\\n\\n\\t\\t\\t// Namespaced trigger; create a regexp to match event type in handle()\\n\\t\\t\\tnamespaces = type.split( \\\".\\\" );\\n\\t\\t\\ttype = namespaces.shift();\\n\\t\\t\\tnamespaces.sort();\\n\\t\\t}\\n\\t\\tontype = type.indexOf( \\\":\\\" ) < 0 && \\\"on\\\" + type;\\n\\n\\t\\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\\n\\t\\tevent = event[ jQuery.expando ] ?\\n\\t\\t\\tevent :\\n\\t\\t\\tnew jQuery.Event( type, typeof event === \\\"object\\\" && event );\\n\\n\\t\\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\\n\\t\\tevent.isTrigger = onlyHandlers ? 2 : 3;\\n\\t\\tevent.namespace = namespaces.join( \\\".\\\" );\\n\\t\\tevent.rnamespace = event.namespace ?\\n\\t\\t\\tnew RegExp( \\\"(^|\\\\\\\\.)\\\" + namespaces.join( \\\"\\\\\\\\.(?:.*\\\\\\\\.|)\\\" ) + \\\"(\\\\\\\\.|$)\\\" ) :\\n\\t\\t\\tnull;\\n\\n\\t\\t// Clean up the event in case it is being reused\\n\\t\\tevent.result = undefined;\\n\\t\\tif ( !event.target ) {\\n\\t\\t\\tevent.target = elem;\\n\\t\\t}\\n\\n\\t\\t// Clone any incoming data and prepend the event, creating the handler arg list\\n\\t\\tdata = data == null ?\\n\\t\\t\\t[ event ] :\\n\\t\\t\\tjQuery.makeArray( data, [ event ] );\\n\\n\\t\\t// Allow special events to draw outside the lines\\n\\t\\tspecial = jQuery.event.special[ type ] || {};\\n\\t\\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\\n\\t\\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\\n\\t\\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\\n\\n\\t\\t\\tbubbleType = special.delegateType || type;\\n\\t\\t\\tif ( !rfocusMorph.test( bubbleType + type ) ) {\\n\\t\\t\\t\\tcur = cur.parentNode;\\n\\t\\t\\t}\\n\\t\\t\\tfor ( ; cur; cur = cur.parentNode ) {\\n\\t\\t\\t\\teventPath.push( cur );\\n\\t\\t\\t\\ttmp = cur;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\\n\\t\\t\\tif ( tmp === ( elem.ownerDocument || document ) ) {\\n\\t\\t\\t\\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Fire handlers on the event path\\n\\t\\ti = 0;\\n\\t\\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\\n\\t\\t\\tlastElement = cur;\\n\\t\\t\\tevent.type = i > 1 ?\\n\\t\\t\\t\\tbubbleType :\\n\\t\\t\\t\\tspecial.bindType || type;\\n\\n\\t\\t\\t// jQuery handler\\n\\t\\t\\thandle = ( dataPriv.get( cur, \\\"events\\\" ) || Object.create( null ) )[ event.type ] &&\\n\\t\\t\\t\\tdataPriv.get( cur, \\\"handle\\\" );\\n\\t\\t\\tif ( handle ) {\\n\\t\\t\\t\\thandle.apply( cur, data );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Native handler\\n\\t\\t\\thandle = ontype && cur[ ontype ];\\n\\t\\t\\tif ( handle && handle.apply && acceptData( cur ) ) {\\n\\t\\t\\t\\tevent.result = handle.apply( cur, data );\\n\\t\\t\\t\\tif ( event.result === false ) {\\n\\t\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tevent.type = type;\\n\\n\\t\\t// If nobody prevented the default action, do it now\\n\\t\\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\\n\\n\\t\\t\\tif ( ( !special._default ||\\n\\t\\t\\t\\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\\n\\t\\t\\t\\tacceptData( elem ) ) {\\n\\n\\t\\t\\t\\t// Call a native DOM method on the target with the same name as the event.\\n\\t\\t\\t\\t// Don't do default actions on window, that's where global variables be (trac-6170)\\n\\t\\t\\t\\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\\n\\n\\t\\t\\t\\t\\t// Don't re-trigger an onFOO event when we call its FOO() method\\n\\t\\t\\t\\t\\ttmp = elem[ ontype ];\\n\\n\\t\\t\\t\\t\\tif ( tmp ) {\\n\\t\\t\\t\\t\\t\\telem[ ontype ] = null;\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t// Prevent re-triggering of the same event, since we already bubbled it above\\n\\t\\t\\t\\t\\tjQuery.event.triggered = type;\\n\\n\\t\\t\\t\\t\\tif ( event.isPropagationStopped() ) {\\n\\t\\t\\t\\t\\t\\tlastElement.addEventListener( type, stopPropagationCallback );\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\telem[ type ]();\\n\\n\\t\\t\\t\\t\\tif ( event.isPropagationStopped() ) {\\n\\t\\t\\t\\t\\t\\tlastElement.removeEventListener( type, stopPropagationCallback );\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\tjQuery.event.triggered = undefined;\\n\\n\\t\\t\\t\\t\\tif ( tmp ) {\\n\\t\\t\\t\\t\\t\\telem[ ontype ] = tmp;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\treturn event.result;\\n\\t},\\n\\n\\t// Piggyback on a donor event to simulate a different one\\n\\t// Used only for `focus(in | out)` events\\n\\tsimulate: function( type, elem, event ) {\\n\\t\\tvar e = jQuery.extend(\\n\\t\\t\\tnew jQuery.Event(),\\n\\t\\t\\tevent,\\n\\t\\t\\t{\\n\\t\\t\\t\\ttype: type,\\n\\t\\t\\t\\tisSimulated: true\\n\\t\\t\\t}\\n\\t\\t);\\n\\n\\t\\tjQuery.event.trigger( e, null, elem );\\n\\t}\\n\\n} );\\n\\njQuery.fn.extend( {\\n\\n\\ttrigger: function( type, data ) {\\n\\t\\treturn this.each( function() {\\n\\t\\t\\tjQuery.event.trigger( type, data, this );\\n\\t\\t} );\\n\\t},\\n\\ttriggerHandler: function( type, data ) {\\n\\t\\tvar elem = this[ 0 ];\\n\\t\\tif ( elem ) {\\n\\t\\t\\treturn jQuery.event.trigger( type, data, elem, true );\\n\\t\\t}\\n\\t}\\n} );\\n\\n\\nvar\\n\\trbracket = /\\\\[\\\\]$/,\\n\\trCRLF = /\\\\r?\\\\n/g,\\n\\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\\n\\trsubmittable = /^(?:input|select|textarea|keygen)/i;\\n\\nfunction buildParams( prefix, obj, traditional, add ) {\\n\\tvar name;\\n\\n\\tif ( Array.isArray( obj ) ) {\\n\\n\\t\\t// Serialize array item.\\n\\t\\tjQuery.each( obj, function( i, v ) {\\n\\t\\t\\tif ( traditional || rbracket.test( prefix ) ) {\\n\\n\\t\\t\\t\\t// Treat each array item as a scalar.\\n\\t\\t\\t\\tadd( prefix, v );\\n\\n\\t\\t\\t} else {\\n\\n\\t\\t\\t\\t// Item is non-scalar (array or object), encode its numeric index.\\n\\t\\t\\t\\tbuildParams(\\n\\t\\t\\t\\t\\tprefix + \\\"[\\\" + ( typeof v === \\\"object\\\" && v != null ? i : \\\"\\\" ) + \\\"]\\\",\\n\\t\\t\\t\\t\\tv,\\n\\t\\t\\t\\t\\ttraditional,\\n\\t\\t\\t\\t\\tadd\\n\\t\\t\\t\\t);\\n\\t\\t\\t}\\n\\t\\t} );\\n\\n\\t} else if ( !traditional && toType( obj ) === \\\"object\\\" ) {\\n\\n\\t\\t// Serialize object item.\\n\\t\\tfor ( name in obj ) {\\n\\t\\t\\tbuildParams( prefix + \\\"[\\\" + name + \\\"]\\\", obj[ name ], traditional, add );\\n\\t\\t}\\n\\n\\t} else {\\n\\n\\t\\t// Serialize scalar item.\\n\\t\\tadd( prefix, obj );\\n\\t}\\n}\\n\\n// Serialize an array of form elements or a set of\\n// key/values into a query string\\njQuery.param = function( a, traditional ) {\\n\\tvar prefix,\\n\\t\\ts = [],\\n\\t\\tadd = function( key, valueOrFunction ) {\\n\\n\\t\\t\\t// If value is a function, invoke it and use its return value\\n\\t\\t\\tvar value = isFunction( valueOrFunction ) ?\\n\\t\\t\\t\\tvalueOrFunction() :\\n\\t\\t\\t\\tvalueOrFunction;\\n\\n\\t\\t\\ts[ s.length ] = encodeURIComponent( key ) + \\\"=\\\" +\\n\\t\\t\\t\\tencodeURIComponent( value == null ? \\\"\\\" : value );\\n\\t\\t};\\n\\n\\tif ( a == null ) {\\n\\t\\treturn \\\"\\\";\\n\\t}\\n\\n\\t// If an array was passed in, assume that it is an array of form elements.\\n\\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\\n\\n\\t\\t// Serialize the form elements\\n\\t\\tjQuery.each( a, function() {\\n\\t\\t\\tadd( this.name, this.value );\\n\\t\\t} );\\n\\n\\t} else {\\n\\n\\t\\t// If traditional, encode the \\\"old\\\" way (the way 1.3.2 or older\\n\\t\\t// did it), otherwise encode params recursively.\\n\\t\\tfor ( prefix in a ) {\\n\\t\\t\\tbuildParams( prefix, a[ prefix ], traditional, add );\\n\\t\\t}\\n\\t}\\n\\n\\t// Return the resulting serialization\\n\\treturn s.join( \\\"&\\\" );\\n};\\n\\njQuery.fn.extend( {\\n\\tserialize: function() {\\n\\t\\treturn jQuery.param( this.serializeArray() );\\n\\t},\\n\\tserializeArray: function() {\\n\\t\\treturn this.map( function() {\\n\\n\\t\\t\\t// Can add propHook for \\\"elements\\\" to filter or add form elements\\n\\t\\t\\tvar elements = jQuery.prop( this, \\\"elements\\\" );\\n\\t\\t\\treturn elements ? jQuery.makeArray( elements ) : this;\\n\\t\\t} ).filter( function() {\\n\\t\\t\\tvar type = this.type;\\n\\n\\t\\t\\t// Use .is( \\\":disabled\\\" ) so that fieldset[disabled] works\\n\\t\\t\\treturn this.name && !jQuery( this ).is( \\\":disabled\\\" ) &&\\n\\t\\t\\t\\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\\n\\t\\t\\t\\t( this.checked || !rcheckableType.test( type ) );\\n\\t\\t} ).map( function( _i, elem ) {\\n\\t\\t\\tvar val = jQuery( this ).val();\\n\\n\\t\\t\\tif ( val == null ) {\\n\\t\\t\\t\\treturn null;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif ( Array.isArray( val ) ) {\\n\\t\\t\\t\\treturn jQuery.map( val, function( val ) {\\n\\t\\t\\t\\t\\treturn { name: elem.name, value: val.replace( rCRLF, \\\"\\\\r\\\\n\\\" ) };\\n\\t\\t\\t\\t} );\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn { name: elem.name, value: val.replace( rCRLF, \\\"\\\\r\\\\n\\\" ) };\\n\\t\\t} ).get();\\n\\t}\\n} );\\n\\n\\nvar\\n\\tr20 = /%20/g,\\n\\trhash = /#.*$/,\\n\\trantiCache = /([?&])_=[^&]*/,\\n\\trheaders = /^(.*?):[ \\\\t]*([^\\\\r\\\\n]*)$/mg,\\n\\n\\t// trac-7653, trac-8125, trac-8152: local protocol detection\\n\\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\\n\\trnoContent = /^(?:GET|HEAD)$/,\\n\\trprotocol = /^\\\\/\\\\//,\\n\\n\\t/* Prefilters\\n\\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\\n\\t * 2) These are called:\\n\\t *    - BEFORE asking for a transport\\n\\t *    - AFTER param serialization (s.data is a string if s.processData is true)\\n\\t * 3) key is the dataType\\n\\t * 4) the catchall symbol \\\"*\\\" can be used\\n\\t * 5) execution will start with transport dataType and THEN continue down to \\\"*\\\" if needed\\n\\t */\\n\\tprefilters = {},\\n\\n\\t/* Transports bindings\\n\\t * 1) key is the dataType\\n\\t * 2) the catchall symbol \\\"*\\\" can be used\\n\\t * 3) selection will start with transport dataType and THEN go to \\\"*\\\" if needed\\n\\t */\\n\\ttransports = {},\\n\\n\\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\\n\\tallTypes = \\\"*/\\\".concat( \\\"*\\\" ),\\n\\n\\t// Anchor tag for parsing the document origin\\n\\toriginAnchor = document.createElement( \\\"a\\\" );\\n\\noriginAnchor.href = location.href;\\n\\n// Base \\\"constructor\\\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\\nfunction addToPrefiltersOrTransports( structure ) {\\n\\n\\t// dataTypeExpression is optional and defaults to \\\"*\\\"\\n\\treturn function( dataTypeExpression, func ) {\\n\\n\\t\\tif ( typeof dataTypeExpression !== \\\"string\\\" ) {\\n\\t\\t\\tfunc = dataTypeExpression;\\n\\t\\t\\tdataTypeExpression = \\\"*\\\";\\n\\t\\t}\\n\\n\\t\\tvar dataType,\\n\\t\\t\\ti = 0,\\n\\t\\t\\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\\n\\n\\t\\tif ( isFunction( func ) ) {\\n\\n\\t\\t\\t// For each dataType in the dataTypeExpression\\n\\t\\t\\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\\n\\n\\t\\t\\t\\t// Prepend if requested\\n\\t\\t\\t\\tif ( dataType[ 0 ] === \\\"+\\\" ) {\\n\\t\\t\\t\\t\\tdataType = dataType.slice( 1 ) || \\\"*\\\";\\n\\t\\t\\t\\t\\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\\n\\n\\t\\t\\t\\t// Otherwise append\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n}\\n\\n// Base inspection function for prefilters and transports\\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\\n\\n\\tvar inspected = {},\\n\\t\\tseekingTransport = ( structure === transports );\\n\\n\\tfunction inspect( dataType ) {\\n\\t\\tvar selected;\\n\\t\\tinspected[ dataType ] = true;\\n\\t\\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\\n\\t\\t\\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\\n\\t\\t\\tif ( typeof dataTypeOrTransport === \\\"string\\\" &&\\n\\t\\t\\t\\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\\n\\n\\t\\t\\t\\toptions.dataTypes.unshift( dataTypeOrTransport );\\n\\t\\t\\t\\tinspect( dataTypeOrTransport );\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t} else if ( seekingTransport ) {\\n\\t\\t\\t\\treturn !( selected = dataTypeOrTransport );\\n\\t\\t\\t}\\n\\t\\t} );\\n\\t\\treturn selected;\\n\\t}\\n\\n\\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \\\"*\\\" ] && inspect( \\\"*\\\" );\\n}\\n\\n// A special extend for ajax options\\n// that takes \\\"flat\\\" options (not to be deep extended)\\n// Fixes trac-9887\\nfunction ajaxExtend( target, src ) {\\n\\tvar key, deep,\\n\\t\\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\\n\\n\\tfor ( key in src ) {\\n\\t\\tif ( src[ key ] !== undefined ) {\\n\\t\\t\\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\\n\\t\\t}\\n\\t}\\n\\tif ( deep ) {\\n\\t\\tjQuery.extend( true, target, deep );\\n\\t}\\n\\n\\treturn target;\\n}\\n\\n/* Handles responses to an ajax request:\\n * - finds the right dataType (mediates between content-type and expected dataType)\\n * - returns the corresponding response\\n */\\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\\n\\n\\tvar ct, type, finalDataType, firstDataType,\\n\\t\\tcontents = s.contents,\\n\\t\\tdataTypes = s.dataTypes;\\n\\n\\t// Remove auto dataType and get content-type in the process\\n\\twhile ( dataTypes[ 0 ] === \\\"*\\\" ) {\\n\\t\\tdataTypes.shift();\\n\\t\\tif ( ct === undefined ) {\\n\\t\\t\\tct = s.mimeType || jqXHR.getResponseHeader( \\\"Content-Type\\\" );\\n\\t\\t}\\n\\t}\\n\\n\\t// Check if we're dealing with a known content-type\\n\\tif ( ct ) {\\n\\t\\tfor ( type in contents ) {\\n\\t\\t\\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\\n\\t\\t\\t\\tdataTypes.unshift( type );\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t// Check to see if we have a response for the expected dataType\\n\\tif ( dataTypes[ 0 ] in responses ) {\\n\\t\\tfinalDataType = dataTypes[ 0 ];\\n\\t} else {\\n\\n\\t\\t// Try convertible dataTypes\\n\\t\\tfor ( type in responses ) {\\n\\t\\t\\tif ( !dataTypes[ 0 ] || s.converters[ type + \\\" \\\" + dataTypes[ 0 ] ] ) {\\n\\t\\t\\t\\tfinalDataType = type;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t\\tif ( !firstDataType ) {\\n\\t\\t\\t\\tfirstDataType = type;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Or just use first one\\n\\t\\tfinalDataType = finalDataType || firstDataType;\\n\\t}\\n\\n\\t// If we found a dataType\\n\\t// We add the dataType to the list if needed\\n\\t// and return the corresponding response\\n\\tif ( finalDataType ) {\\n\\t\\tif ( finalDataType !== dataTypes[ 0 ] ) {\\n\\t\\t\\tdataTypes.unshift( finalDataType );\\n\\t\\t}\\n\\t\\treturn responses[ finalDataType ];\\n\\t}\\n}\\n\\n/* Chain conversions given the request and the original response\\n * Also sets the responseXXX fields on the jqXHR instance\\n */\\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\\n\\tvar conv2, current, conv, tmp, prev,\\n\\t\\tconverters = {},\\n\\n\\t\\t// Work with a copy of dataTypes in case we need to modify it for conversion\\n\\t\\tdataTypes = s.dataTypes.slice();\\n\\n\\t// Create converters map with lowercased keys\\n\\tif ( dataTypes[ 1 ] ) {\\n\\t\\tfor ( conv in s.converters ) {\\n\\t\\t\\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\\n\\t\\t}\\n\\t}\\n\\n\\tcurrent = dataTypes.shift();\\n\\n\\t// Convert to each sequential dataType\\n\\twhile ( current ) {\\n\\n\\t\\tif ( s.responseFields[ current ] ) {\\n\\t\\t\\tjqXHR[ s.responseFields[ current ] ] = response;\\n\\t\\t}\\n\\n\\t\\t// Apply the dataFilter if provided\\n\\t\\tif ( !prev && isSuccess && s.dataFilter ) {\\n\\t\\t\\tresponse = s.dataFilter( response, s.dataType );\\n\\t\\t}\\n\\n\\t\\tprev = current;\\n\\t\\tcurrent = dataTypes.shift();\\n\\n\\t\\tif ( current ) {\\n\\n\\t\\t\\t// There's only work to do if current dataType is non-auto\\n\\t\\t\\tif ( current === \\\"*\\\" ) {\\n\\n\\t\\t\\t\\tcurrent = prev;\\n\\n\\t\\t\\t// Convert response if prev dataType is non-auto and differs from current\\n\\t\\t\\t} else if ( prev !== \\\"*\\\" && prev !== current ) {\\n\\n\\t\\t\\t\\t// Seek a direct converter\\n\\t\\t\\t\\tconv = converters[ prev + \\\" \\\" + current ] || converters[ \\\"* \\\" + current ];\\n\\n\\t\\t\\t\\t// If none found, seek a pair\\n\\t\\t\\t\\tif ( !conv ) {\\n\\t\\t\\t\\t\\tfor ( conv2 in converters ) {\\n\\n\\t\\t\\t\\t\\t\\t// If conv2 outputs current\\n\\t\\t\\t\\t\\t\\ttmp = conv2.split( \\\" \\\" );\\n\\t\\t\\t\\t\\t\\tif ( tmp[ 1 ] === current ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t// If prev can be converted to accepted input\\n\\t\\t\\t\\t\\t\\t\\tconv = converters[ prev + \\\" \\\" + tmp[ 0 ] ] ||\\n\\t\\t\\t\\t\\t\\t\\t\\tconverters[ \\\"* \\\" + tmp[ 0 ] ];\\n\\t\\t\\t\\t\\t\\t\\tif ( conv ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t// Condense equivalence converters\\n\\t\\t\\t\\t\\t\\t\\t\\tif ( conv === true ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tconv = converters[ conv2 ];\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t// Otherwise, insert the intermediate dataType\\n\\t\\t\\t\\t\\t\\t\\t\\t} else if ( converters[ conv2 ] !== true ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tcurrent = tmp[ 0 ];\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tdataTypes.unshift( tmp[ 1 ] );\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Apply converter (if not an equivalence)\\n\\t\\t\\t\\tif ( conv !== true ) {\\n\\n\\t\\t\\t\\t\\t// Unless errors are allowed to bubble, catch and return them\\n\\t\\t\\t\\t\\tif ( conv && s.throws ) {\\n\\t\\t\\t\\t\\t\\tresponse = conv( response );\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\t\\t\\tresponse = conv( response );\\n\\t\\t\\t\\t\\t\\t} catch ( e ) {\\n\\t\\t\\t\\t\\t\\t\\treturn {\\n\\t\\t\\t\\t\\t\\t\\t\\tstate: \\\"parsererror\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\terror: conv ? e : \\\"No conversion from \\\" + prev + \\\" to \\\" + current\\n\\t\\t\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\treturn { state: \\\"success\\\", data: response };\\n}\\n\\njQuery.extend( {\\n\\n\\t// Counter for holding the number of active queries\\n\\tactive: 0,\\n\\n\\t// Last-Modified header cache for next request\\n\\tlastModified: {},\\n\\tetag: {},\\n\\n\\tajaxSettings: {\\n\\t\\turl: location.href,\\n\\t\\ttype: \\\"GET\\\",\\n\\t\\tisLocal: rlocalProtocol.test( location.protocol ),\\n\\t\\tglobal: true,\\n\\t\\tprocessData: true,\\n\\t\\tasync: true,\\n\\t\\tcontentType: \\\"application/x-www-form-urlencoded; charset=UTF-8\\\",\\n\\n\\t\\t/*\\n\\t\\ttimeout: 0,\\n\\t\\tdata: null,\\n\\t\\tdataType: null,\\n\\t\\tusername: null,\\n\\t\\tpassword: null,\\n\\t\\tcache: null,\\n\\t\\tthrows: false,\\n\\t\\ttraditional: false,\\n\\t\\theaders: {},\\n\\t\\t*/\\n\\n\\t\\taccepts: {\\n\\t\\t\\t\\\"*\\\": allTypes,\\n\\t\\t\\ttext: \\\"text/plain\\\",\\n\\t\\t\\thtml: \\\"text/html\\\",\\n\\t\\t\\txml: \\\"application/xml, text/xml\\\",\\n\\t\\t\\tjson: \\\"application/json, text/javascript\\\"\\n\\t\\t},\\n\\n\\t\\tcontents: {\\n\\t\\t\\txml: /\\\\bxml\\\\b/,\\n\\t\\t\\thtml: /\\\\bhtml/,\\n\\t\\t\\tjson: /\\\\bjson\\\\b/\\n\\t\\t},\\n\\n\\t\\tresponseFields: {\\n\\t\\t\\txml: \\\"responseXML\\\",\\n\\t\\t\\ttext: \\\"responseText\\\",\\n\\t\\t\\tjson: \\\"responseJSON\\\"\\n\\t\\t},\\n\\n\\t\\t// Data converters\\n\\t\\t// Keys separate source (or catchall \\\"*\\\") and destination types with a single space\\n\\t\\tconverters: {\\n\\n\\t\\t\\t// Convert anything to text\\n\\t\\t\\t\\\"* text\\\": String,\\n\\n\\t\\t\\t// Text to html (true = no transformation)\\n\\t\\t\\t\\\"text html\\\": true,\\n\\n\\t\\t\\t// Evaluate text as a json expression\\n\\t\\t\\t\\\"text json\\\": JSON.parse,\\n\\n\\t\\t\\t// Parse text as xml\\n\\t\\t\\t\\\"text xml\\\": jQuery.parseXML\\n\\t\\t},\\n\\n\\t\\t// For options that shouldn't be deep extended:\\n\\t\\t// you can add your own custom options here if\\n\\t\\t// and when you create one that shouldn't be\\n\\t\\t// deep extended (see ajaxExtend)\\n\\t\\tflatOptions: {\\n\\t\\t\\turl: true,\\n\\t\\t\\tcontext: true\\n\\t\\t}\\n\\t},\\n\\n\\t// Creates a full fledged settings object into target\\n\\t// with both ajaxSettings and settings fields.\\n\\t// If target is omitted, writes into ajaxSettings.\\n\\tajaxSetup: function( target, settings ) {\\n\\t\\treturn settings ?\\n\\n\\t\\t\\t// Building a settings object\\n\\t\\t\\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\\n\\n\\t\\t\\t// Extending ajaxSettings\\n\\t\\t\\tajaxExtend( jQuery.ajaxSettings, target );\\n\\t},\\n\\n\\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\\n\\tajaxTransport: addToPrefiltersOrTransports( transports ),\\n\\n\\t// Main method\\n\\tajax: function( url, options ) {\\n\\n\\t\\t// If url is an object, simulate pre-1.5 signature\\n\\t\\tif ( typeof url === \\\"object\\\" ) {\\n\\t\\t\\toptions = url;\\n\\t\\t\\turl = undefined;\\n\\t\\t}\\n\\n\\t\\t// Force options to be an object\\n\\t\\toptions = options || {};\\n\\n\\t\\tvar transport,\\n\\n\\t\\t\\t// URL without anti-cache param\\n\\t\\t\\tcacheURL,\\n\\n\\t\\t\\t// Response headers\\n\\t\\t\\tresponseHeadersString,\\n\\t\\t\\tresponseHeaders,\\n\\n\\t\\t\\t// timeout handle\\n\\t\\t\\ttimeoutTimer,\\n\\n\\t\\t\\t// Url cleanup var\\n\\t\\t\\turlAnchor,\\n\\n\\t\\t\\t// Request state (becomes false upon send and true upon completion)\\n\\t\\t\\tcompleted,\\n\\n\\t\\t\\t// To know if global events are to be dispatched\\n\\t\\t\\tfireGlobals,\\n\\n\\t\\t\\t// Loop variable\\n\\t\\t\\ti,\\n\\n\\t\\t\\t// uncached part of the url\\n\\t\\t\\tuncached,\\n\\n\\t\\t\\t// Create the final options object\\n\\t\\t\\ts = jQuery.ajaxSetup( {}, options ),\\n\\n\\t\\t\\t// Callbacks context\\n\\t\\t\\tcallbackContext = s.context || s,\\n\\n\\t\\t\\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\\n\\t\\t\\tglobalEventContext = s.context &&\\n\\t\\t\\t\\t( callbackContext.nodeType || callbackContext.jquery ) ?\\n\\t\\t\\t\\tjQuery( callbackContext ) :\\n\\t\\t\\t\\tjQuery.event,\\n\\n\\t\\t\\t// Deferreds\\n\\t\\t\\tdeferred = jQuery.Deferred(),\\n\\t\\t\\tcompleteDeferred = jQuery.Callbacks( \\\"once memory\\\" ),\\n\\n\\t\\t\\t// Status-dependent callbacks\\n\\t\\t\\tstatusCode = s.statusCode || {},\\n\\n\\t\\t\\t// Headers (they are sent all at once)\\n\\t\\t\\trequestHeaders = {},\\n\\t\\t\\trequestHeadersNames = {},\\n\\n\\t\\t\\t// Default abort message\\n\\t\\t\\tstrAbort = \\\"canceled\\\",\\n\\n\\t\\t\\t// Fake xhr\\n\\t\\t\\tjqXHR = {\\n\\t\\t\\t\\treadyState: 0,\\n\\n\\t\\t\\t\\t// Builds headers hashtable if needed\\n\\t\\t\\t\\tgetResponseHeader: function( key ) {\\n\\t\\t\\t\\t\\tvar match;\\n\\t\\t\\t\\t\\tif ( completed ) {\\n\\t\\t\\t\\t\\t\\tif ( !responseHeaders ) {\\n\\t\\t\\t\\t\\t\\t\\tresponseHeaders = {};\\n\\t\\t\\t\\t\\t\\t\\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tresponseHeaders[ match[ 1 ].toLowerCase() + \\\" \\\" ] =\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t( responseHeaders[ match[ 1 ].toLowerCase() + \\\" \\\" ] || [] )\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t.concat( match[ 2 ] );\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\tmatch = responseHeaders[ key.toLowerCase() + \\\" \\\" ];\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\treturn match == null ? null : match.join( \\\", \\\" );\\n\\t\\t\\t\\t},\\n\\n\\t\\t\\t\\t// Raw string\\n\\t\\t\\t\\tgetAllResponseHeaders: function() {\\n\\t\\t\\t\\t\\treturn completed ? responseHeadersString : null;\\n\\t\\t\\t\\t},\\n\\n\\t\\t\\t\\t// Caches the header\\n\\t\\t\\t\\tsetRequestHeader: function( name, value ) {\\n\\t\\t\\t\\t\\tif ( completed == null ) {\\n\\t\\t\\t\\t\\t\\tname = requestHeadersNames[ name.toLowerCase() ] =\\n\\t\\t\\t\\t\\t\\t\\trequestHeadersNames[ name.toLowerCase() ] || name;\\n\\t\\t\\t\\t\\t\\trequestHeaders[ name ] = value;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\treturn this;\\n\\t\\t\\t\\t},\\n\\n\\t\\t\\t\\t// Overrides response content-type header\\n\\t\\t\\t\\toverrideMimeType: function( type ) {\\n\\t\\t\\t\\t\\tif ( completed == null ) {\\n\\t\\t\\t\\t\\t\\ts.mimeType = type;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\treturn this;\\n\\t\\t\\t\\t},\\n\\n\\t\\t\\t\\t// Status-dependent callbacks\\n\\t\\t\\t\\tstatusCode: function( map ) {\\n\\t\\t\\t\\t\\tvar code;\\n\\t\\t\\t\\t\\tif ( map ) {\\n\\t\\t\\t\\t\\t\\tif ( completed ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t// Execute the appropriate callbacks\\n\\t\\t\\t\\t\\t\\t\\tjqXHR.always( map[ jqXHR.status ] );\\n\\t\\t\\t\\t\\t\\t} else {\\n\\n\\t\\t\\t\\t\\t\\t\\t// Lazy-add the new callbacks in a way that preserves old ones\\n\\t\\t\\t\\t\\t\\t\\tfor ( code in map ) {\\n\\t\\t\\t\\t\\t\\t\\t\\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\treturn this;\\n\\t\\t\\t\\t},\\n\\n\\t\\t\\t\\t// Cancel the request\\n\\t\\t\\t\\tabort: function( statusText ) {\\n\\t\\t\\t\\t\\tvar finalText = statusText || strAbort;\\n\\t\\t\\t\\t\\tif ( transport ) {\\n\\t\\t\\t\\t\\t\\ttransport.abort( finalText );\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tdone( 0, finalText );\\n\\t\\t\\t\\t\\treturn this;\\n\\t\\t\\t\\t}\\n\\t\\t\\t};\\n\\n\\t\\t// Attach deferreds\\n\\t\\tdeferred.promise( jqXHR );\\n\\n\\t\\t// Add protocol if not provided (prefilters might expect it)\\n\\t\\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\\n\\t\\t// We also use the url parameter if available\\n\\t\\ts.url = ( ( url || s.url || location.href ) + \\\"\\\" )\\n\\t\\t\\t.replace( rprotocol, location.protocol + \\\"//\\\" );\\n\\n\\t\\t// Alias method option to type as per ticket trac-12004\\n\\t\\ts.type = options.method || options.type || s.method || s.type;\\n\\n\\t\\t// Extract dataTypes list\\n\\t\\ts.dataTypes = ( s.dataType || \\\"*\\\" ).toLowerCase().match( rnothtmlwhite ) || [ \\\"\\\" ];\\n\\n\\t\\t// A cross-domain request is in order when the origin doesn't match the current origin.\\n\\t\\tif ( s.crossDomain == null ) {\\n\\t\\t\\turlAnchor = document.createElement( \\\"a\\\" );\\n\\n\\t\\t\\t// Support: IE <=8 - 11, Edge 12 - 15\\n\\t\\t\\t// IE throws exception on accessing the href property if url is malformed,\\n\\t\\t\\t// e.g. http://example.com:80x/\\n\\t\\t\\ttry {\\n\\t\\t\\t\\turlAnchor.href = s.url;\\n\\n\\t\\t\\t\\t// Support: IE <=8 - 11 only\\n\\t\\t\\t\\t// Anchor's host property isn't correctly set when s.url is relative\\n\\t\\t\\t\\turlAnchor.href = urlAnchor.href;\\n\\t\\t\\t\\ts.crossDomain = originAnchor.protocol + \\\"//\\\" + originAnchor.host !==\\n\\t\\t\\t\\t\\turlAnchor.protocol + \\\"//\\\" + urlAnchor.host;\\n\\t\\t\\t} catch ( e ) {\\n\\n\\t\\t\\t\\t// If there is an error parsing the URL, assume it is crossDomain,\\n\\t\\t\\t\\t// it can be rejected by the transport if it is invalid\\n\\t\\t\\t\\ts.crossDomain = true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Convert data if not already a string\\n\\t\\tif ( s.data && s.processData && typeof s.data !== \\\"string\\\" ) {\\n\\t\\t\\ts.data = jQuery.param( s.data, s.traditional );\\n\\t\\t}\\n\\n\\t\\t// Apply prefilters\\n\\t\\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\\n\\n\\t\\t// If request was aborted inside a prefilter, stop there\\n\\t\\tif ( completed ) {\\n\\t\\t\\treturn jqXHR;\\n\\t\\t}\\n\\n\\t\\t// We can fire global events as of now if asked to\\n\\t\\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\\n\\t\\tfireGlobals = jQuery.event && s.global;\\n\\n\\t\\t// Watch for a new set of requests\\n\\t\\tif ( fireGlobals && jQuery.active++ === 0 ) {\\n\\t\\t\\tjQuery.event.trigger( \\\"ajaxStart\\\" );\\n\\t\\t}\\n\\n\\t\\t// Uppercase the type\\n\\t\\ts.type = s.type.toUpperCase();\\n\\n\\t\\t// Determine if request has content\\n\\t\\ts.hasContent = !rnoContent.test( s.type );\\n\\n\\t\\t// Save the URL in case we're toying with the If-Modified-Since\\n\\t\\t// and/or If-None-Match header later on\\n\\t\\t// Remove hash to simplify url manipulation\\n\\t\\tcacheURL = s.url.replace( rhash, \\\"\\\" );\\n\\n\\t\\t// More options handling for requests with no content\\n\\t\\tif ( !s.hasContent ) {\\n\\n\\t\\t\\t// Remember the hash so we can put it back\\n\\t\\t\\tuncached = s.url.slice( cacheURL.length );\\n\\n\\t\\t\\t// If data is available and should be processed, append data to url\\n\\t\\t\\tif ( s.data && ( s.processData || typeof s.data === \\\"string\\\" ) ) {\\n\\t\\t\\t\\tcacheURL += ( rquery.test( cacheURL ) ? \\\"&\\\" : \\\"?\\\" ) + s.data;\\n\\n\\t\\t\\t\\t// trac-9682: remove data so that it's not used in an eventual retry\\n\\t\\t\\t\\tdelete s.data;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Add or update anti-cache param if needed\\n\\t\\t\\tif ( s.cache === false ) {\\n\\t\\t\\t\\tcacheURL = cacheURL.replace( rantiCache, \\\"$1\\\" );\\n\\t\\t\\t\\tuncached = ( rquery.test( cacheURL ) ? \\\"&\\\" : \\\"?\\\" ) + \\\"_=\\\" + ( nonce.guid++ ) +\\n\\t\\t\\t\\t\\tuncached;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\\n\\t\\t\\ts.url = cacheURL + uncached;\\n\\n\\t\\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\\n\\t\\t} else if ( s.data && s.processData &&\\n\\t\\t\\t( s.contentType || \\\"\\\" ).indexOf( \\\"application/x-www-form-urlencoded\\\" ) === 0 ) {\\n\\t\\t\\ts.data = s.data.replace( r20, \\\"+\\\" );\\n\\t\\t}\\n\\n\\t\\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\\n\\t\\tif ( s.ifModified ) {\\n\\t\\t\\tif ( jQuery.lastModified[ cacheURL ] ) {\\n\\t\\t\\t\\tjqXHR.setRequestHeader( \\\"If-Modified-Since\\\", jQuery.lastModified[ cacheURL ] );\\n\\t\\t\\t}\\n\\t\\t\\tif ( jQuery.etag[ cacheURL ] ) {\\n\\t\\t\\t\\tjqXHR.setRequestHeader( \\\"If-None-Match\\\", jQuery.etag[ cacheURL ] );\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Set the correct header, if data is being sent\\n\\t\\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\\n\\t\\t\\tjqXHR.setRequestHeader( \\\"Content-Type\\\", s.contentType );\\n\\t\\t}\\n\\n\\t\\t// Set the Accepts header for the server, depending on the dataType\\n\\t\\tjqXHR.setRequestHeader(\\n\\t\\t\\t\\\"Accept\\\",\\n\\t\\t\\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\\n\\t\\t\\t\\ts.accepts[ s.dataTypes[ 0 ] ] +\\n\\t\\t\\t\\t\\t( s.dataTypes[ 0 ] !== \\\"*\\\" ? \\\", \\\" + allTypes + \\\"; q=0.01\\\" : \\\"\\\" ) :\\n\\t\\t\\t\\ts.accepts[ \\\"*\\\" ]\\n\\t\\t);\\n\\n\\t\\t// Check for headers option\\n\\t\\tfor ( i in s.headers ) {\\n\\t\\t\\tjqXHR.setRequestHeader( i, s.headers[ i ] );\\n\\t\\t}\\n\\n\\t\\t// Allow custom headers/mimetypes and early abort\\n\\t\\tif ( s.beforeSend &&\\n\\t\\t\\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\\n\\n\\t\\t\\t// Abort if not done already and return\\n\\t\\t\\treturn jqXHR.abort();\\n\\t\\t}\\n\\n\\t\\t// Aborting is no longer a cancellation\\n\\t\\tstrAbort = \\\"abort\\\";\\n\\n\\t\\t// Install callbacks on deferreds\\n\\t\\tcompleteDeferred.add( s.complete );\\n\\t\\tjqXHR.done( s.success );\\n\\t\\tjqXHR.fail( s.error );\\n\\n\\t\\t// Get transport\\n\\t\\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\\n\\n\\t\\t// If no transport, we auto-abort\\n\\t\\tif ( !transport ) {\\n\\t\\t\\tdone( -1, \\\"No Transport\\\" );\\n\\t\\t} else {\\n\\t\\t\\tjqXHR.readyState = 1;\\n\\n\\t\\t\\t// Send global event\\n\\t\\t\\tif ( fireGlobals ) {\\n\\t\\t\\t\\tglobalEventContext.trigger( \\\"ajaxSend\\\", [ jqXHR, s ] );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If request was aborted inside ajaxSend, stop there\\n\\t\\t\\tif ( completed ) {\\n\\t\\t\\t\\treturn jqXHR;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Timeout\\n\\t\\t\\tif ( s.async && s.timeout > 0 ) {\\n\\t\\t\\t\\ttimeoutTimer = window.setTimeout( function() {\\n\\t\\t\\t\\t\\tjqXHR.abort( \\\"timeout\\\" );\\n\\t\\t\\t\\t}, s.timeout );\\n\\t\\t\\t}\\n\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tcompleted = false;\\n\\t\\t\\t\\ttransport.send( requestHeaders, done );\\n\\t\\t\\t} catch ( e ) {\\n\\n\\t\\t\\t\\t// Rethrow post-completion exceptions\\n\\t\\t\\t\\tif ( completed ) {\\n\\t\\t\\t\\t\\tthrow e;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Propagate others as results\\n\\t\\t\\t\\tdone( -1, e );\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Callback for when everything is done\\n\\t\\tfunction done( status, nativeStatusText, responses, headers ) {\\n\\t\\t\\tvar isSuccess, success, error, response, modified,\\n\\t\\t\\t\\tstatusText = nativeStatusText;\\n\\n\\t\\t\\t// Ignore repeat invocations\\n\\t\\t\\tif ( completed ) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\tcompleted = true;\\n\\n\\t\\t\\t// Clear timeout if it exists\\n\\t\\t\\tif ( timeoutTimer ) {\\n\\t\\t\\t\\twindow.clearTimeout( timeoutTimer );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Dereference transport for early garbage collection\\n\\t\\t\\t// (no matter how long the jqXHR object will be used)\\n\\t\\t\\ttransport = undefined;\\n\\n\\t\\t\\t// Cache response headers\\n\\t\\t\\tresponseHeadersString = headers || \\\"\\\";\\n\\n\\t\\t\\t// Set readyState\\n\\t\\t\\tjqXHR.readyState = status > 0 ? 4 : 0;\\n\\n\\t\\t\\t// Determine if successful\\n\\t\\t\\tisSuccess = status >= 200 && status < 300 || status === 304;\\n\\n\\t\\t\\t// Get response data\\n\\t\\t\\tif ( responses ) {\\n\\t\\t\\t\\tresponse = ajaxHandleResponses( s, jqXHR, responses );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Use a noop converter for missing script but not if jsonp\\n\\t\\t\\tif ( !isSuccess &&\\n\\t\\t\\t\\tjQuery.inArray( \\\"script\\\", s.dataTypes ) > -1 &&\\n\\t\\t\\t\\tjQuery.inArray( \\\"json\\\", s.dataTypes ) < 0 ) {\\n\\t\\t\\t\\ts.converters[ \\\"text script\\\" ] = function() {};\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Convert no matter what (that way responseXXX fields are always set)\\n\\t\\t\\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\\n\\n\\t\\t\\t// If successful, handle type chaining\\n\\t\\t\\tif ( isSuccess ) {\\n\\n\\t\\t\\t\\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\\n\\t\\t\\t\\tif ( s.ifModified ) {\\n\\t\\t\\t\\t\\tmodified = jqXHR.getResponseHeader( \\\"Last-Modified\\\" );\\n\\t\\t\\t\\t\\tif ( modified ) {\\n\\t\\t\\t\\t\\t\\tjQuery.lastModified[ cacheURL ] = modified;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tmodified = jqXHR.getResponseHeader( \\\"etag\\\" );\\n\\t\\t\\t\\t\\tif ( modified ) {\\n\\t\\t\\t\\t\\t\\tjQuery.etag[ cacheURL ] = modified;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// if no content\\n\\t\\t\\t\\tif ( status === 204 || s.type === \\\"HEAD\\\" ) {\\n\\t\\t\\t\\t\\tstatusText = \\\"nocontent\\\";\\n\\n\\t\\t\\t\\t// if not modified\\n\\t\\t\\t\\t} else if ( status === 304 ) {\\n\\t\\t\\t\\t\\tstatusText = \\\"notmodified\\\";\\n\\n\\t\\t\\t\\t// If we have data, let's convert it\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tstatusText = response.state;\\n\\t\\t\\t\\t\\tsuccess = response.data;\\n\\t\\t\\t\\t\\terror = response.error;\\n\\t\\t\\t\\t\\tisSuccess = !error;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\n\\t\\t\\t\\t// Extract error from statusText and normalize for non-aborts\\n\\t\\t\\t\\terror = statusText;\\n\\t\\t\\t\\tif ( status || !statusText ) {\\n\\t\\t\\t\\t\\tstatusText = \\\"error\\\";\\n\\t\\t\\t\\t\\tif ( status < 0 ) {\\n\\t\\t\\t\\t\\t\\tstatus = 0;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Set data for the fake xhr object\\n\\t\\t\\tjqXHR.status = status;\\n\\t\\t\\tjqXHR.statusText = ( nativeStatusText || statusText ) + \\\"\\\";\\n\\n\\t\\t\\t// Success/Error\\n\\t\\t\\tif ( isSuccess ) {\\n\\t\\t\\t\\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Status-dependent callbacks\\n\\t\\t\\tjqXHR.statusCode( statusCode );\\n\\t\\t\\tstatusCode = undefined;\\n\\n\\t\\t\\tif ( fireGlobals ) {\\n\\t\\t\\t\\tglobalEventContext.trigger( isSuccess ? \\\"ajaxSuccess\\\" : \\\"ajaxError\\\",\\n\\t\\t\\t\\t\\t[ jqXHR, s, isSuccess ? success : error ] );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Complete\\n\\t\\t\\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\\n\\n\\t\\t\\tif ( fireGlobals ) {\\n\\t\\t\\t\\tglobalEventContext.trigger( \\\"ajaxComplete\\\", [ jqXHR, s ] );\\n\\n\\t\\t\\t\\t// Handle the global AJAX counter\\n\\t\\t\\t\\tif ( !( --jQuery.active ) ) {\\n\\t\\t\\t\\t\\tjQuery.event.trigger( \\\"ajaxStop\\\" );\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\treturn jqXHR;\\n\\t},\\n\\n\\tgetJSON: function( url, data, callback ) {\\n\\t\\treturn jQuery.get( url, data, callback, \\\"json\\\" );\\n\\t},\\n\\n\\tgetScript: function( url, callback ) {\\n\\t\\treturn jQuery.get( url, undefined, callback, \\\"script\\\" );\\n\\t}\\n} );\\n\\njQuery.each( [ \\\"get\\\", \\\"post\\\" ], function( _i, method ) {\\n\\tjQuery[ method ] = function( url, data, callback, type ) {\\n\\n\\t\\t// Shift arguments if data argument was omitted\\n\\t\\tif ( isFunction( data ) ) {\\n\\t\\t\\ttype = type || callback;\\n\\t\\t\\tcallback = data;\\n\\t\\t\\tdata = undefined;\\n\\t\\t}\\n\\n\\t\\t// The url can be an options object (which then must have .url)\\n\\t\\treturn jQuery.ajax( jQuery.extend( {\\n\\t\\t\\turl: url,\\n\\t\\t\\ttype: method,\\n\\t\\t\\tdataType: type,\\n\\t\\t\\tdata: data,\\n\\t\\t\\tsuccess: callback\\n\\t\\t}, jQuery.isPlainObject( url ) && url ) );\\n\\t};\\n} );\\n\\njQuery.ajaxPrefilter( function( s ) {\\n\\tvar i;\\n\\tfor ( i in s.headers ) {\\n\\t\\tif ( i.toLowerCase() === \\\"content-type\\\" ) {\\n\\t\\t\\ts.contentType = s.headers[ i ] || \\\"\\\";\\n\\t\\t}\\n\\t}\\n} );\\n\\n\\njQuery._evalUrl = function( url, options, doc ) {\\n\\treturn jQuery.ajax( {\\n\\t\\turl: url,\\n\\n\\t\\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\\n\\t\\ttype: \\\"GET\\\",\\n\\t\\tdataType: \\\"script\\\",\\n\\t\\tcache: true,\\n\\t\\tasync: false,\\n\\t\\tglobal: false,\\n\\n\\t\\t// Only evaluate the response if it is successful (gh-4126)\\n\\t\\t// dataFilter is not invoked for failure responses, so using it instead\\n\\t\\t// of the default converter is kludgy but it works.\\n\\t\\tconverters: {\\n\\t\\t\\t\\\"text script\\\": function() {}\\n\\t\\t},\\n\\t\\tdataFilter: function( response ) {\\n\\t\\t\\tjQuery.globalEval( response, options, doc );\\n\\t\\t}\\n\\t} );\\n};\\n\\n\\njQuery.fn.extend( {\\n\\twrapAll: function( html ) {\\n\\t\\tvar wrap;\\n\\n\\t\\tif ( this[ 0 ] ) {\\n\\t\\t\\tif ( isFunction( html ) ) {\\n\\t\\t\\t\\thtml = html.call( this[ 0 ] );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// The elements to wrap the target around\\n\\t\\t\\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\\n\\n\\t\\t\\tif ( this[ 0 ].parentNode ) {\\n\\t\\t\\t\\twrap.insertBefore( this[ 0 ] );\\n\\t\\t\\t}\\n\\n\\t\\t\\twrap.map( function() {\\n\\t\\t\\t\\tvar elem = this;\\n\\n\\t\\t\\t\\twhile ( elem.firstElementChild ) {\\n\\t\\t\\t\\t\\telem = elem.firstElementChild;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\treturn elem;\\n\\t\\t\\t} ).append( this );\\n\\t\\t}\\n\\n\\t\\treturn this;\\n\\t},\\n\\n\\twrapInner: function( html ) {\\n\\t\\tif ( isFunction( html ) ) {\\n\\t\\t\\treturn this.each( function( i ) {\\n\\t\\t\\t\\tjQuery( this ).wrapInner( html.call( this, i ) );\\n\\t\\t\\t} );\\n\\t\\t}\\n\\n\\t\\treturn this.each( function() {\\n\\t\\t\\tvar self = jQuery( this ),\\n\\t\\t\\t\\tcontents = self.contents();\\n\\n\\t\\t\\tif ( contents.length ) {\\n\\t\\t\\t\\tcontents.wrapAll( html );\\n\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tself.append( html );\\n\\t\\t\\t}\\n\\t\\t} );\\n\\t},\\n\\n\\twrap: function( html ) {\\n\\t\\tvar htmlIsFunction = isFunction( html );\\n\\n\\t\\treturn this.each( function( i ) {\\n\\t\\t\\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\\n\\t\\t} );\\n\\t},\\n\\n\\tunwrap: function( selector ) {\\n\\t\\tthis.parent( selector ).not( \\\"body\\\" ).each( function() {\\n\\t\\t\\tjQuery( this ).replaceWith( this.childNodes );\\n\\t\\t} );\\n\\t\\treturn this;\\n\\t}\\n} );\\n\\n\\njQuery.expr.pseudos.hidden = function( elem ) {\\n\\treturn !jQuery.expr.pseudos.visible( elem );\\n};\\njQuery.expr.pseudos.visible = function( elem ) {\\n\\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\\n};\\n\\n\\n\\n\\njQuery.ajaxSettings.xhr = function() {\\n\\ttry {\\n\\t\\treturn new window.XMLHttpRequest();\\n\\t} catch ( e ) {}\\n};\\n\\nvar xhrSuccessStatus = {\\n\\n\\t\\t// File protocol always yields status code 0, assume 200\\n\\t\\t0: 200,\\n\\n\\t\\t// Support: IE <=9 only\\n\\t\\t// trac-1450: sometimes IE returns 1223 when it should be 204\\n\\t\\t1223: 204\\n\\t},\\n\\txhrSupported = jQuery.ajaxSettings.xhr();\\n\\nsupport.cors = !!xhrSupported && ( \\\"withCredentials\\\" in xhrSupported );\\nsupport.ajax = xhrSupported = !!xhrSupported;\\n\\njQuery.ajaxTransport( function( options ) {\\n\\tvar callback, errorCallback;\\n\\n\\t// Cross domain only allowed if supported through XMLHttpRequest\\n\\tif ( support.cors || xhrSupported && !options.crossDomain ) {\\n\\t\\treturn {\\n\\t\\t\\tsend: function( headers, complete ) {\\n\\t\\t\\t\\tvar i,\\n\\t\\t\\t\\t\\txhr = options.xhr();\\n\\n\\t\\t\\t\\txhr.open(\\n\\t\\t\\t\\t\\toptions.type,\\n\\t\\t\\t\\t\\toptions.url,\\n\\t\\t\\t\\t\\toptions.async,\\n\\t\\t\\t\\t\\toptions.username,\\n\\t\\t\\t\\t\\toptions.password\\n\\t\\t\\t\\t);\\n\\n\\t\\t\\t\\t// Apply custom fields if provided\\n\\t\\t\\t\\tif ( options.xhrFields ) {\\n\\t\\t\\t\\t\\tfor ( i in options.xhrFields ) {\\n\\t\\t\\t\\t\\t\\txhr[ i ] = options.xhrFields[ i ];\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Override mime type if needed\\n\\t\\t\\t\\tif ( options.mimeType && xhr.overrideMimeType ) {\\n\\t\\t\\t\\t\\txhr.overrideMimeType( options.mimeType );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// X-Requested-With header\\n\\t\\t\\t\\t// For cross-domain requests, seeing as conditions for a preflight are\\n\\t\\t\\t\\t// akin to a jigsaw puzzle, we simply never set it to be sure.\\n\\t\\t\\t\\t// (it can always be set on a per-request basis or even using ajaxSetup)\\n\\t\\t\\t\\t// For same-domain requests, won't change header if already provided.\\n\\t\\t\\t\\tif ( !options.crossDomain && !headers[ \\\"X-Requested-With\\\" ] ) {\\n\\t\\t\\t\\t\\theaders[ \\\"X-Requested-With\\\" ] = \\\"XMLHttpRequest\\\";\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Set headers\\n\\t\\t\\t\\tfor ( i in headers ) {\\n\\t\\t\\t\\t\\txhr.setRequestHeader( i, headers[ i ] );\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Callback\\n\\t\\t\\t\\tcallback = function( type ) {\\n\\t\\t\\t\\t\\treturn function() {\\n\\t\\t\\t\\t\\t\\tif ( callback ) {\\n\\t\\t\\t\\t\\t\\t\\tcallback = errorCallback = xhr.onload =\\n\\t\\t\\t\\t\\t\\t\\t\\txhr.onerror = xhr.onabort = xhr.ontimeout =\\n\\t\\t\\t\\t\\t\\t\\t\\t\\txhr.onreadystatechange = null;\\n\\n\\t\\t\\t\\t\\t\\t\\tif ( type === \\\"abort\\\" ) {\\n\\t\\t\\t\\t\\t\\t\\t\\txhr.abort();\\n\\t\\t\\t\\t\\t\\t\\t} else if ( type === \\\"error\\\" ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t// Support: IE <=9 only\\n\\t\\t\\t\\t\\t\\t\\t\\t// On a manual native abort, IE9 throws\\n\\t\\t\\t\\t\\t\\t\\t\\t// errors on any property access that is not readyState\\n\\t\\t\\t\\t\\t\\t\\t\\tif ( typeof xhr.status !== \\\"number\\\" ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tcomplete( 0, \\\"error\\\" );\\n\\t\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tcomplete(\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t// File: protocol always yields status 0; see trac-8605, trac-14207\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\txhr.status,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\txhr.statusText\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tcomplete(\\n\\t\\t\\t\\t\\t\\t\\t\\t\\txhrSuccessStatus[ xhr.status ] || xhr.status,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\txhr.statusText,\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// Support: IE <=9 only\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// IE9 has no XHR2 but throws on binary (trac-11426)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// For XHR2 non-text, let the caller handle it (gh-2498)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t( xhr.responseType || \\\"text\\\" ) !== \\\"text\\\"  ||\\n\\t\\t\\t\\t\\t\\t\\t\\t\\ttypeof xhr.responseText !== \\\"string\\\" ?\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{ binary: xhr.response } :\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{ text: xhr.responseText },\\n\\t\\t\\t\\t\\t\\t\\t\\t\\txhr.getAllResponseHeaders()\\n\\t\\t\\t\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t};\\n\\n\\t\\t\\t\\t// Listen to events\\n\\t\\t\\t\\txhr.onload = callback();\\n\\t\\t\\t\\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \\\"error\\\" );\\n\\n\\t\\t\\t\\t// Support: IE 9 only\\n\\t\\t\\t\\t// Use onreadystatechange to replace onabort\\n\\t\\t\\t\\t// to handle uncaught aborts\\n\\t\\t\\t\\tif ( xhr.onabort !== undefined ) {\\n\\t\\t\\t\\t\\txhr.onabort = errorCallback;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\txhr.onreadystatechange = function() {\\n\\n\\t\\t\\t\\t\\t\\t// Check readyState before timeout as it changes\\n\\t\\t\\t\\t\\t\\tif ( xhr.readyState === 4 ) {\\n\\n\\t\\t\\t\\t\\t\\t\\t// Allow onerror to be called first,\\n\\t\\t\\t\\t\\t\\t\\t// but that will not handle a native abort\\n\\t\\t\\t\\t\\t\\t\\t// Also, save errorCallback to a variable\\n\\t\\t\\t\\t\\t\\t\\t// as xhr.onerror cannot be accessed\\n\\t\\t\\t\\t\\t\\t\\twindow.setTimeout( function() {\\n\\t\\t\\t\\t\\t\\t\\t\\tif ( callback ) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\terrorCallback();\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t} );\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Create the abort callback\\n\\t\\t\\t\\tcallback = callback( \\\"abort\\\" );\\n\\n\\t\\t\\t\\ttry {\\n\\n\\t\\t\\t\\t\\t// Do send the request (this may raise an exception)\\n\\t\\t\\t\\t\\txhr.send( options.hasContent && options.data || null );\\n\\t\\t\\t\\t} catch ( e ) {\\n\\n\\t\\t\\t\\t\\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\\n\\t\\t\\t\\t\\tif ( callback ) {\\n\\t\\t\\t\\t\\t\\tthrow e;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t},\\n\\n\\t\\t\\tabort: function() {\\n\\t\\t\\t\\tif ( callback ) {\\n\\t\\t\\t\\t\\tcallback();\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t};\\n\\t}\\n} );\\n\\n\\n\\n\\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\\njQuery.ajaxPrefilter( function( s ) {\\n\\tif ( s.crossDomain ) {\\n\\t\\ts.contents.script = false;\\n\\t}\\n} );\\n\\n// Install script dataType\\njQuery.ajaxSetup( {\\n\\taccepts: {\\n\\t\\tscript: \\\"text/javascript, application/javascript, \\\" +\\n\\t\\t\\t\\\"application/ecmascript, application/x-ecmascript\\\"\\n\\t},\\n\\tcontents: {\\n\\t\\tscript: /\\\\b(?:java|ecma)script\\\\b/\\n\\t},\\n\\tconverters: {\\n\\t\\t\\\"text script\\\": function( text ) {\\n\\t\\t\\tjQuery.globalEval( text );\\n\\t\\t\\treturn text;\\n\\t\\t}\\n\\t}\\n} );\\n\\n// Handle cache's special case and crossDomain\\njQuery.ajaxPrefilter( \\\"script\\\", function( s ) {\\n\\tif ( s.cache === undefined ) {\\n\\t\\ts.cache = false;\\n\\t}\\n\\tif ( s.crossDomain ) {\\n\\t\\ts.type = \\\"GET\\\";\\n\\t}\\n} );\\n\\n// Bind script tag hack transport\\njQuery.ajaxTransport( \\\"script\\\", function( s ) {\\n\\n\\t// This transport only deals with cross domain or forced-by-attrs requests\\n\\tif ( s.crossDomain || s.scriptAttrs ) {\\n\\t\\tvar script, callback;\\n\\t\\treturn {\\n\\t\\t\\tsend: function( _, complete ) {\\n\\t\\t\\t\\tscript = jQuery( \\\"<script>\\\" )\\n\\t\\t\\t\\t\\t.attr( s.scriptAttrs || {} )\\n\\t\\t\\t\\t\\t.prop( { charset: s.scriptCharset, src: s.url } )\\n\\t\\t\\t\\t\\t.on( \\\"load error\\\", callback = function( evt ) {\\n\\t\\t\\t\\t\\t\\tscript.remove();\\n\\t\\t\\t\\t\\t\\tcallback = null;\\n\\t\\t\\t\\t\\t\\tif ( evt ) {\\n\\t\\t\\t\\t\\t\\t\\tcomplete( evt.type === \\\"error\\\" ? 404 : 200, evt.type );\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t} );\\n\\n\\t\\t\\t\\t// Use native DOM manipulation to avoid our domManip AJAX trickery\\n\\t\\t\\t\\tdocument.head.appendChild( script[ 0 ] );\\n\\t\\t\\t},\\n\\t\\t\\tabort: function() {\\n\\t\\t\\t\\tif ( callback ) {\\n\\t\\t\\t\\t\\tcallback();\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t};\\n\\t}\\n} );\\n\\n\\n\\n\\nvar oldCallbacks = [],\\n\\trjsonp = /(=)\\\\?(?=&|$)|\\\\?\\\\?/;\\n\\n// Default jsonp settings\\njQuery.ajaxSetup( {\\n\\tjsonp: \\\"callback\\\",\\n\\tjsonpCallback: function() {\\n\\t\\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \\\"_\\\" + ( nonce.guid++ ) );\\n\\t\\tthis[ callback ] = true;\\n\\t\\treturn callback;\\n\\t}\\n} );\\n\\n// Detect, normalize options and install callbacks for jsonp requests\\njQuery.ajaxPrefilter( \\\"json jsonp\\\", function( s, originalSettings, jqXHR ) {\\n\\n\\tvar callbackName, overwritten, responseContainer,\\n\\t\\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\\n\\t\\t\\t\\\"url\\\" :\\n\\t\\t\\ttypeof s.data === \\\"string\\\" &&\\n\\t\\t\\t\\t( s.contentType || \\\"\\\" )\\n\\t\\t\\t\\t\\t.indexOf( \\\"application/x-www-form-urlencoded\\\" ) === 0 &&\\n\\t\\t\\t\\trjsonp.test( s.data ) && \\\"data\\\"\\n\\t\\t);\\n\\n\\t// Handle iff the expected data type is \\\"jsonp\\\" or we have a parameter to set\\n\\tif ( jsonProp || s.dataTypes[ 0 ] === \\\"jsonp\\\" ) {\\n\\n\\t\\t// Get callback name, remembering preexisting value associated with it\\n\\t\\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\\n\\t\\t\\ts.jsonpCallback() :\\n\\t\\t\\ts.jsonpCallback;\\n\\n\\t\\t// Insert callback into url or form data\\n\\t\\tif ( jsonProp ) {\\n\\t\\t\\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \\\"$1\\\" + callbackName );\\n\\t\\t} else if ( s.jsonp !== false ) {\\n\\t\\t\\ts.url += ( rquery.test( s.url ) ? \\\"&\\\" : \\\"?\\\" ) + s.jsonp + \\\"=\\\" + callbackName;\\n\\t\\t}\\n\\n\\t\\t// Use data converter to retrieve json after script execution\\n\\t\\ts.converters[ \\\"script json\\\" ] = function() {\\n\\t\\t\\tif ( !responseContainer ) {\\n\\t\\t\\t\\tjQuery.error( callbackName + \\\" was not called\\\" );\\n\\t\\t\\t}\\n\\t\\t\\treturn responseContainer[ 0 ];\\n\\t\\t};\\n\\n\\t\\t// Force json dataType\\n\\t\\ts.dataTypes[ 0 ] = \\\"json\\\";\\n\\n\\t\\t// Install callback\\n\\t\\toverwritten = window[ callbackName ];\\n\\t\\twindow[ callbackName ] = function() {\\n\\t\\t\\tresponseContainer = arguments;\\n\\t\\t};\\n\\n\\t\\t// Clean-up function (fires after converters)\\n\\t\\tjqXHR.always( function() {\\n\\n\\t\\t\\t// If previous value didn't exist - remove it\\n\\t\\t\\tif ( overwritten === undefined ) {\\n\\t\\t\\t\\tjQuery( window ).removeProp( callbackName );\\n\\n\\t\\t\\t// Otherwise restore preexisting value\\n\\t\\t\\t} else {\\n\\t\\t\\t\\twindow[ callbackName ] = overwritten;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Save back as free\\n\\t\\t\\tif ( s[ callbackName ] ) {\\n\\n\\t\\t\\t\\t// Make sure that re-using the options doesn't screw things around\\n\\t\\t\\t\\ts.jsonpCallback = originalSettings.jsonpCallback;\\n\\n\\t\\t\\t\\t// Save the callback name for future use\\n\\t\\t\\t\\toldCallbacks.push( callbackName );\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Call if it was a function and we have a response\\n\\t\\t\\tif ( responseContainer && isFunction( overwritten ) ) {\\n\\t\\t\\t\\toverwritten( responseContainer[ 0 ] );\\n\\t\\t\\t}\\n\\n\\t\\t\\tresponseContainer = overwritten = undefined;\\n\\t\\t} );\\n\\n\\t\\t// Delegate to script\\n\\t\\treturn \\\"script\\\";\\n\\t}\\n} );\\n\\n\\n\\n\\n// Support: Safari 8 only\\n// In Safari 8 documents created via document.implementation.createHTMLDocument\\n// collapse sibling forms: the second one becomes a child of the first one.\\n// Because of that, this security measure has to be disabled in Safari 8.\\n// https://bugs.webkit.org/show_bug.cgi?id=137337\\nsupport.createHTMLDocument = ( function() {\\n\\tvar body = document.implementation.createHTMLDocument( \\\"\\\" ).body;\\n\\tbody.innerHTML = \\\"<form></form><form></form>\\\";\\n\\treturn body.childNodes.length === 2;\\n} )();\\n\\n\\n// Argument \\\"data\\\" should be string of html\\n// context (optional): If specified, the fragment will be created in this context,\\n// defaults to document\\n// keepScripts (optional): If true, will include scripts passed in the html string\\njQuery.parseHTML = function( data, context, keepScripts ) {\\n\\tif ( typeof data !== \\\"string\\\" ) {\\n\\t\\treturn [];\\n\\t}\\n\\tif ( typeof context === \\\"boolean\\\" ) {\\n\\t\\tkeepScripts = context;\\n\\t\\tcontext = false;\\n\\t}\\n\\n\\tvar base, parsed, scripts;\\n\\n\\tif ( !context ) {\\n\\n\\t\\t// Stop scripts or inline event handlers from being executed immediately\\n\\t\\t// by using document.implementation\\n\\t\\tif ( support.createHTMLDocument ) {\\n\\t\\t\\tcontext = document.implementation.createHTMLDocument( \\\"\\\" );\\n\\n\\t\\t\\t// Set the base href for the created document\\n\\t\\t\\t// so any parsed elements with URLs\\n\\t\\t\\t// are based on the document's URL (gh-2965)\\n\\t\\t\\tbase = context.createElement( \\\"base\\\" );\\n\\t\\t\\tbase.href = document.location.href;\\n\\t\\t\\tcontext.head.appendChild( base );\\n\\t\\t} else {\\n\\t\\t\\tcontext = document;\\n\\t\\t}\\n\\t}\\n\\n\\tparsed = rsingleTag.exec( data );\\n\\tscripts = !keepScripts && [];\\n\\n\\t// Single tag\\n\\tif ( parsed ) {\\n\\t\\treturn [ context.createElement( parsed[ 1 ] ) ];\\n\\t}\\n\\n\\tparsed = buildFragment( [ data ], context, scripts );\\n\\n\\tif ( scripts && scripts.length ) {\\n\\t\\tjQuery( scripts ).remove();\\n\\t}\\n\\n\\treturn jQuery.merge( [], parsed.childNodes );\\n};\\n\\n\\n/**\\n * Load a url into a page\\n */\\njQuery.fn.load = function( url, params, callback ) {\\n\\tvar selector, type, response,\\n\\t\\tself = this,\\n\\t\\toff = url.indexOf( \\\" \\\" );\\n\\n\\tif ( off > -1 ) {\\n\\t\\tselector = stripAndCollapse( url.slice( off ) );\\n\\t\\turl = url.slice( 0, off );\\n\\t}\\n\\n\\t// If it's a function\\n\\tif ( isFunction( params ) ) {\\n\\n\\t\\t// We assume that it's the callback\\n\\t\\tcallback = params;\\n\\t\\tparams = undefined;\\n\\n\\t// Otherwise, build a param string\\n\\t} else if ( params && typeof params === \\\"object\\\" ) {\\n\\t\\ttype = \\\"POST\\\";\\n\\t}\\n\\n\\t// If we have elements to modify, make the request\\n\\tif ( self.length > 0 ) {\\n\\t\\tjQuery.ajax( {\\n\\t\\t\\turl: url,\\n\\n\\t\\t\\t// If \\\"type\\\" variable is undefined, then \\\"GET\\\" method will be used.\\n\\t\\t\\t// Make value of this field explicit since\\n\\t\\t\\t// user can override it through ajaxSetup method\\n\\t\\t\\ttype: type || \\\"GET\\\",\\n\\t\\t\\tdataType: \\\"html\\\",\\n\\t\\t\\tdata: params\\n\\t\\t} ).done( function( responseText ) {\\n\\n\\t\\t\\t// Save response for use in complete callback\\n\\t\\t\\tresponse = arguments;\\n\\n\\t\\t\\tself.html( selector ?\\n\\n\\t\\t\\t\\t// If a selector was specified, locate the right elements in a dummy div\\n\\t\\t\\t\\t// Exclude scripts to avoid IE 'Permission Denied' errors\\n\\t\\t\\t\\tjQuery( \\\"<div>\\\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\\n\\n\\t\\t\\t\\t// Otherwise use the full result\\n\\t\\t\\t\\tresponseText );\\n\\n\\t\\t// If the request succeeds, this function gets \\\"data\\\", \\\"status\\\", \\\"jqXHR\\\"\\n\\t\\t// but they are ignored because response was set above.\\n\\t\\t// If it fails, this function gets \\\"jqXHR\\\", \\\"status\\\", \\\"error\\\"\\n\\t\\t} ).always( callback && function( jqXHR, status ) {\\n\\t\\t\\tself.each( function() {\\n\\t\\t\\t\\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\\n\\t\\t\\t} );\\n\\t\\t} );\\n\\t}\\n\\n\\treturn this;\\n};\\n\\n\\n\\n\\njQuery.expr.pseudos.animated = function( elem ) {\\n\\treturn jQuery.grep( jQuery.timers, function( fn ) {\\n\\t\\treturn elem === fn.elem;\\n\\t} ).length;\\n};\\n\\n\\n\\n\\njQuery.offset = {\\n\\tsetOffset: function( elem, options, i ) {\\n\\t\\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\\n\\t\\t\\tposition = jQuery.css( elem, \\\"position\\\" ),\\n\\t\\t\\tcurElem = jQuery( elem ),\\n\\t\\t\\tprops = {};\\n\\n\\t\\t// Set position first, in-case top/left are set even on static elem\\n\\t\\tif ( position === \\\"static\\\" ) {\\n\\t\\t\\telem.style.position = \\\"relative\\\";\\n\\t\\t}\\n\\n\\t\\tcurOffset = curElem.offset();\\n\\t\\tcurCSSTop = jQuery.css( elem, \\\"top\\\" );\\n\\t\\tcurCSSLeft = jQuery.css( elem, \\\"left\\\" );\\n\\t\\tcalculatePosition = ( position === \\\"absolute\\\" || position === \\\"fixed\\\" ) &&\\n\\t\\t\\t( curCSSTop + curCSSLeft ).indexOf( \\\"auto\\\" ) > -1;\\n\\n\\t\\t// Need to be able to calculate position if either\\n\\t\\t// top or left is auto and position is either absolute or fixed\\n\\t\\tif ( calculatePosition ) {\\n\\t\\t\\tcurPosition = curElem.position();\\n\\t\\t\\tcurTop = curPosition.top;\\n\\t\\t\\tcurLeft = curPosition.left;\\n\\n\\t\\t} else {\\n\\t\\t\\tcurTop = parseFloat( curCSSTop ) || 0;\\n\\t\\t\\tcurLeft = parseFloat( curCSSLeft ) || 0;\\n\\t\\t}\\n\\n\\t\\tif ( isFunction( options ) ) {\\n\\n\\t\\t\\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\\n\\t\\t\\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\\n\\t\\t}\\n\\n\\t\\tif ( options.top != null ) {\\n\\t\\t\\tprops.top = ( options.top - curOffset.top ) + curTop;\\n\\t\\t}\\n\\t\\tif ( options.left != null ) {\\n\\t\\t\\tprops.left = ( options.left - curOffset.left ) + curLeft;\\n\\t\\t}\\n\\n\\t\\tif ( \\\"using\\\" in options ) {\\n\\t\\t\\toptions.using.call( elem, props );\\n\\n\\t\\t} else {\\n\\t\\t\\tcurElem.css( props );\\n\\t\\t}\\n\\t}\\n};\\n\\njQuery.fn.extend( {\\n\\n\\t// offset() relates an element's border box to the document origin\\n\\toffset: function( options ) {\\n\\n\\t\\t// Preserve chaining for setter\\n\\t\\tif ( arguments.length ) {\\n\\t\\t\\treturn options === undefined ?\\n\\t\\t\\t\\tthis :\\n\\t\\t\\t\\tthis.each( function( i ) {\\n\\t\\t\\t\\t\\tjQuery.offset.setOffset( this, options, i );\\n\\t\\t\\t\\t} );\\n\\t\\t}\\n\\n\\t\\tvar rect, win,\\n\\t\\t\\telem = this[ 0 ];\\n\\n\\t\\tif ( !elem ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\\n\\t\\t// Support: IE <=11 only\\n\\t\\t// Running getBoundingClientRect on a\\n\\t\\t// disconnected node in IE throws an error\\n\\t\\tif ( !elem.getClientRects().length ) {\\n\\t\\t\\treturn { top: 0, left: 0 };\\n\\t\\t}\\n\\n\\t\\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\\n\\t\\trect = elem.getBoundingClientRect();\\n\\t\\twin = elem.ownerDocument.defaultView;\\n\\t\\treturn {\\n\\t\\t\\ttop: rect.top + win.pageYOffset,\\n\\t\\t\\tleft: rect.left + win.pageXOffset\\n\\t\\t};\\n\\t},\\n\\n\\t// position() relates an element's margin box to its offset parent's padding box\\n\\t// This corresponds to the behavior of CSS absolute positioning\\n\\tposition: function() {\\n\\t\\tif ( !this[ 0 ] ) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\tvar offsetParent, offset, doc,\\n\\t\\t\\telem = this[ 0 ],\\n\\t\\t\\tparentOffset = { top: 0, left: 0 };\\n\\n\\t\\t// position:fixed elements are offset from the viewport, which itself always has zero offset\\n\\t\\tif ( jQuery.css( elem, \\\"position\\\" ) === \\\"fixed\\\" ) {\\n\\n\\t\\t\\t// Assume position:fixed implies availability of getBoundingClientRect\\n\\t\\t\\toffset = elem.getBoundingClientRect();\\n\\n\\t\\t} else {\\n\\t\\t\\toffset = this.offset();\\n\\n\\t\\t\\t// Account for the *real* offset parent, which can be the document or its root element\\n\\t\\t\\t// when a statically positioned element is identified\\n\\t\\t\\tdoc = elem.ownerDocument;\\n\\t\\t\\toffsetParent = elem.offsetParent || doc.documentElement;\\n\\t\\t\\twhile ( offsetParent &&\\n\\t\\t\\t\\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\\n\\t\\t\\t\\tjQuery.css( offsetParent, \\\"position\\\" ) === \\\"static\\\" ) {\\n\\n\\t\\t\\t\\toffsetParent = offsetParent.parentNode;\\n\\t\\t\\t}\\n\\t\\t\\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\\n\\n\\t\\t\\t\\t// Incorporate borders into its offset, since they are outside its content origin\\n\\t\\t\\t\\tparentOffset = jQuery( offsetParent ).offset();\\n\\t\\t\\t\\tparentOffset.top += jQuery.css( offsetParent, \\\"borderTopWidth\\\", true );\\n\\t\\t\\t\\tparentOffset.left += jQuery.css( offsetParent, \\\"borderLeftWidth\\\", true );\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Subtract parent offsets and element margins\\n\\t\\treturn {\\n\\t\\t\\ttop: offset.top - parentOffset.top - jQuery.css( elem, \\\"marginTop\\\", true ),\\n\\t\\t\\tleft: offset.left - parentOffset.left - jQuery.css( elem, \\\"marginLeft\\\", true )\\n\\t\\t};\\n\\t},\\n\\n\\t// This method will return documentElement in the following cases:\\n\\t// 1) For the element inside the iframe without offsetParent, this method will return\\n\\t//    documentElement of the parent window\\n\\t// 2) For the hidden or detached element\\n\\t// 3) For body or html element, i.e. in case of the html node - it will return itself\\n\\t//\\n\\t// but those exceptions were never presented as a real life use-cases\\n\\t// and might be considered as more preferable results.\\n\\t//\\n\\t// This logic, however, is not guaranteed and can change at any point in the future\\n\\toffsetParent: function() {\\n\\t\\treturn this.map( function() {\\n\\t\\t\\tvar offsetParent = this.offsetParent;\\n\\n\\t\\t\\twhile ( offsetParent && jQuery.css( offsetParent, \\\"position\\\" ) === \\\"static\\\" ) {\\n\\t\\t\\t\\toffsetParent = offsetParent.offsetParent;\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn offsetParent || documentElement;\\n\\t\\t} );\\n\\t}\\n} );\\n\\n// Create scrollLeft and scrollTop methods\\njQuery.each( { scrollLeft: \\\"pageXOffset\\\", scrollTop: \\\"pageYOffset\\\" }, function( method, prop ) {\\n\\tvar top = \\\"pageYOffset\\\" === prop;\\n\\n\\tjQuery.fn[ method ] = function( val ) {\\n\\t\\treturn access( this, function( elem, method, val ) {\\n\\n\\t\\t\\t// Coalesce documents and windows\\n\\t\\t\\tvar win;\\n\\t\\t\\tif ( isWindow( elem ) ) {\\n\\t\\t\\t\\twin = elem;\\n\\t\\t\\t} else if ( elem.nodeType === 9 ) {\\n\\t\\t\\t\\twin = elem.defaultView;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif ( val === undefined ) {\\n\\t\\t\\t\\treturn win ? win[ prop ] : elem[ method ];\\n\\t\\t\\t}\\n\\n\\t\\t\\tif ( win ) {\\n\\t\\t\\t\\twin.scrollTo(\\n\\t\\t\\t\\t\\t!top ? val : win.pageXOffset,\\n\\t\\t\\t\\t\\ttop ? val : win.pageYOffset\\n\\t\\t\\t\\t);\\n\\n\\t\\t\\t} else {\\n\\t\\t\\t\\telem[ method ] = val;\\n\\t\\t\\t}\\n\\t\\t}, method, val, arguments.length );\\n\\t};\\n} );\\n\\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\\n// Add the top/left cssHooks using jQuery.fn.position\\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\\n// getComputedStyle returns percent when specified for top/left/bottom/right;\\n// rather than make the css module depend on the offset module, just check for it here\\njQuery.each( [ \\\"top\\\", \\\"left\\\" ], function( _i, prop ) {\\n\\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\\n\\t\\tfunction( elem, computed ) {\\n\\t\\t\\tif ( computed ) {\\n\\t\\t\\t\\tcomputed = curCSS( elem, prop );\\n\\n\\t\\t\\t\\t// If curCSS returns percentage, fallback to offset\\n\\t\\t\\t\\treturn rnumnonpx.test( computed ) ?\\n\\t\\t\\t\\t\\tjQuery( elem ).position()[ prop ] + \\\"px\\\" :\\n\\t\\t\\t\\t\\tcomputed;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t);\\n} );\\n\\n\\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\\njQuery.each( { Height: \\\"height\\\", Width: \\\"width\\\" }, function( name, type ) {\\n\\tjQuery.each( {\\n\\t\\tpadding: \\\"inner\\\" + name,\\n\\t\\tcontent: type,\\n\\t\\t\\\"\\\": \\\"outer\\\" + name\\n\\t}, function( defaultExtra, funcName ) {\\n\\n\\t\\t// Margin is only for outerHeight, outerWidth\\n\\t\\tjQuery.fn[ funcName ] = function( margin, value ) {\\n\\t\\t\\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \\\"boolean\\\" ),\\n\\t\\t\\t\\textra = defaultExtra || ( margin === true || value === true ? \\\"margin\\\" : \\\"border\\\" );\\n\\n\\t\\t\\treturn access( this, function( elem, type, value ) {\\n\\t\\t\\t\\tvar doc;\\n\\n\\t\\t\\t\\tif ( isWindow( elem ) ) {\\n\\n\\t\\t\\t\\t\\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\\n\\t\\t\\t\\t\\treturn funcName.indexOf( \\\"outer\\\" ) === 0 ?\\n\\t\\t\\t\\t\\t\\telem[ \\\"inner\\\" + name ] :\\n\\t\\t\\t\\t\\t\\telem.document.documentElement[ \\\"client\\\" + name ];\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t// Get document width or height\\n\\t\\t\\t\\tif ( elem.nodeType === 9 ) {\\n\\t\\t\\t\\t\\tdoc = elem.documentElement;\\n\\n\\t\\t\\t\\t\\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\\n\\t\\t\\t\\t\\t// whichever is greatest\\n\\t\\t\\t\\t\\treturn Math.max(\\n\\t\\t\\t\\t\\t\\telem.body[ \\\"scroll\\\" + name ], doc[ \\\"scroll\\\" + name ],\\n\\t\\t\\t\\t\\t\\telem.body[ \\\"offset\\\" + name ], doc[ \\\"offset\\\" + name ],\\n\\t\\t\\t\\t\\t\\tdoc[ \\\"client\\\" + name ]\\n\\t\\t\\t\\t\\t);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\treturn value === undefined ?\\n\\n\\t\\t\\t\\t\\t// Get width or height on the element, requesting but not forcing parseFloat\\n\\t\\t\\t\\t\\tjQuery.css( elem, type, extra ) :\\n\\n\\t\\t\\t\\t\\t// Set width or height on the element\\n\\t\\t\\t\\t\\tjQuery.style( elem, type, value, extra );\\n\\t\\t\\t}, type, chainable ? margin : undefined, chainable );\\n\\t\\t};\\n\\t} );\\n} );\\n\\n\\njQuery.each( [\\n\\t\\\"ajaxStart\\\",\\n\\t\\\"ajaxStop\\\",\\n\\t\\\"ajaxComplete\\\",\\n\\t\\\"ajaxError\\\",\\n\\t\\\"ajaxSuccess\\\",\\n\\t\\\"ajaxSend\\\"\\n], function( _i, type ) {\\n\\tjQuery.fn[ type ] = function( fn ) {\\n\\t\\treturn this.on( type, fn );\\n\\t};\\n} );\\n\\n\\n\\n\\njQuery.fn.extend( {\\n\\n\\tbind: function( types, data, fn ) {\\n\\t\\treturn this.on( types, null, data, fn );\\n\\t},\\n\\tunbind: function( types, fn ) {\\n\\t\\treturn this.off( types, null, fn );\\n\\t},\\n\\n\\tdelegate: function( selector, types, data, fn ) {\\n\\t\\treturn this.on( types, selector, data, fn );\\n\\t},\\n\\tundelegate: function( selector, types, fn ) {\\n\\n\\t\\t// ( namespace ) or ( selector, types [, fn] )\\n\\t\\treturn arguments.length === 1 ?\\n\\t\\t\\tthis.off( selector, \\\"**\\\" ) :\\n\\t\\t\\tthis.off( types, selector || \\\"**\\\", fn );\\n\\t},\\n\\n\\thover: function( fnOver, fnOut ) {\\n\\t\\treturn this\\n\\t\\t\\t.on( \\\"mouseenter\\\", fnOver )\\n\\t\\t\\t.on( \\\"mouseleave\\\", fnOut || fnOver );\\n\\t}\\n} );\\n\\njQuery.each(\\n\\t( \\\"blur focus focusin focusout resize scroll click dblclick \\\" +\\n\\t\\\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \\\" +\\n\\t\\\"change select submit keydown keypress keyup contextmenu\\\" ).split( \\\" \\\" ),\\n\\tfunction( _i, name ) {\\n\\n\\t\\t// Handle event binding\\n\\t\\tjQuery.fn[ name ] = function( data, fn ) {\\n\\t\\t\\treturn arguments.length > 0 ?\\n\\t\\t\\t\\tthis.on( name, null, data, fn ) :\\n\\t\\t\\t\\tthis.trigger( name );\\n\\t\\t};\\n\\t}\\n);\\n\\n\\n\\n\\n// Support: Android <=4.0 only\\n// Make sure we trim BOM and NBSP\\n// Require that the \\\"whitespace run\\\" starts from a non-whitespace\\n// to avoid O(N^2) behavior when the engine would try matching \\\"\\\\s+$\\\" at each space position.\\nvar rtrim = /^[\\\\s\\\\uFEFF\\\\xA0]+|([^\\\\s\\\\uFEFF\\\\xA0])[\\\\s\\\\uFEFF\\\\xA0]+$/g;\\n\\n// Bind a function to a context, optionally partially applying any\\n// arguments.\\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\\n// However, it is not slated for removal any time soon\\njQuery.proxy = function( fn, context ) {\\n\\tvar tmp, args, proxy;\\n\\n\\tif ( typeof context === \\\"string\\\" ) {\\n\\t\\ttmp = fn[ context ];\\n\\t\\tcontext = fn;\\n\\t\\tfn = tmp;\\n\\t}\\n\\n\\t// Quick check to determine if target is callable, in the spec\\n\\t// this throws a TypeError, but we will just return undefined.\\n\\tif ( !isFunction( fn ) ) {\\n\\t\\treturn undefined;\\n\\t}\\n\\n\\t// Simulated bind\\n\\targs = slice.call( arguments, 2 );\\n\\tproxy = function() {\\n\\t\\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\\n\\t};\\n\\n\\t// Set the guid of unique handler to the same of original handler, so it can be removed\\n\\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\\n\\n\\treturn proxy;\\n};\\n\\njQuery.holdReady = function( hold ) {\\n\\tif ( hold ) {\\n\\t\\tjQuery.readyWait++;\\n\\t} else {\\n\\t\\tjQuery.ready( true );\\n\\t}\\n};\\njQuery.isArray = Array.isArray;\\njQuery.parseJSON = JSON.parse;\\njQuery.nodeName = nodeName;\\njQuery.isFunction = isFunction;\\njQuery.isWindow = isWindow;\\njQuery.camelCase = camelCase;\\njQuery.type = toType;\\n\\njQuery.now = Date.now;\\n\\njQuery.isNumeric = function( obj ) {\\n\\n\\t// As of jQuery 3.0, isNumeric is limited to\\n\\t// strings and numbers (primitives or objects)\\n\\t// that can be coerced to finite numbers (gh-2662)\\n\\tvar type = jQuery.type( obj );\\n\\treturn ( type === \\\"number\\\" || type === \\\"string\\\" ) &&\\n\\n\\t\\t// parseFloat NaNs numeric-cast false positives (\\\"\\\")\\n\\t\\t// ...but misinterprets leading-number strings, particularly hex literals (\\\"0x...\\\")\\n\\t\\t// subtraction forces infinities to NaN\\n\\t\\t!isNaN( obj - parseFloat( obj ) );\\n};\\n\\njQuery.trim = function( text ) {\\n\\treturn text == null ?\\n\\t\\t\\\"\\\" :\\n\\t\\t( text + \\\"\\\" ).replace( rtrim, \\\"$1\\\" );\\n};\\n\\n\\n\\n// Register as a named AMD module, since jQuery can be concatenated with other\\n// files that may use define, but not via a proper concatenation script that\\n// understands anonymous AMD modules. A named AMD is safest and most robust\\n// way to register. Lowercase jquery is used because AMD module names are\\n// derived from file names, and jQuery is normally delivered in a lowercase\\n// file name. Do this after creating the global so that if an AMD module wants\\n// to call noConflict to hide this version of jQuery, it will work.\\n\\n// Note that for maximum portability, libraries that are not jQuery should\\n// declare themselves as anonymous modules, and avoid setting a global if an\\n// AMD loader is present. jQuery is a special case. For more information, see\\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\\n\\nif ( true ) {\\n\\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\\n\\t\\treturn jQuery;\\n\\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\\n\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n}\\n\\n\\n\\n\\nvar\\n\\n\\t// Map over jQuery in case of overwrite\\n\\t_jQuery = window.jQuery,\\n\\n\\t// Map over the $ in case of overwrite\\n\\t_$ = window.$;\\n\\njQuery.noConflict = function( deep ) {\\n\\tif ( window.$ === jQuery ) {\\n\\t\\twindow.$ = _$;\\n\\t}\\n\\n\\tif ( deep && window.jQuery === jQuery ) {\\n\\t\\twindow.jQuery = _jQuery;\\n\\t}\\n\\n\\treturn jQuery;\\n};\\n\\n// Expose jQuery and $ identifiers, even in AMD\\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\\n// and CommonJS for browser emulators (trac-13566)\\nif ( typeof noGlobal === \\\"undefined\\\" ) {\\n\\twindow.jQuery = window.$ = jQuery;\\n}\\n\\n\\n\\n\\nreturn jQuery;\\n} );\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/jquery/dist/jquery.js?\");\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module can't be inlined because the eval devtool is used.\n/******/ \tvar __webpack_exports__ = __webpack_require__(\"./libs/jquery/jquery.js\");\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"
  },
  {
    "path": "public/assets/vendor/libs/masonry/masonry.js",
    "content": "/*\n * ATTENTION: The \"eval\" devtool has been used (maybe by default in mode: \"development\").\n * This devtool is neither made for production nor for readable output files.\n * It uses \"eval()\" calls to create a separate source file in the browser devtools.\n * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)\n * or disable the default devtool with \"devtool: false\".\n * If you are looking for production-ready output files, see mode: \"production\" (https://webpack.js.org/configuration/mode/).\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jQuery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jQuery\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"jQuery\")) : factory(root[\"jQuery\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function(__WEBPACK_EXTERNAL_MODULE_jquery__) {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./libs/masonry/masonry.js\":\n/*!*********************************!*\\\n  !*** ./libs/masonry/masonry.js ***!\n  \\*********************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   Masonry: function() { return /* reexport module object */ masonry_layout_dist_masonry_pkgd__WEBPACK_IMPORTED_MODULE_0__; }\\n/* harmony export */ });\\n/* harmony import */ var masonry_layout_dist_masonry_pkgd__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! masonry-layout/dist/masonry.pkgd */ \\\"./node_modules/masonry-layout/dist/masonry.pkgd.js\\\");\\n/* harmony import */ var masonry_layout_dist_masonry_pkgd__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(masonry_layout_dist_masonry_pkgd__WEBPACK_IMPORTED_MODULE_0__);\\n// var Masonry = require('masonry-layout/dist/masonry.pkgd')\\n\\n// export { Masonry }\\n\\n\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./libs/masonry/masonry.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/masonry-layout/dist/masonry.pkgd.js\":\n/*!**********************************************************!*\\\n  !*** ./node_modules/masonry-layout/dist/masonry.pkgd.js ***!\n  \\**********************************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var __WEBPACK_LOCAL_MODULE_1__, __WEBPACK_LOCAL_MODULE_1__factory, __WEBPACK_LOCAL_MODULE_1__module;var __WEBPACK_LOCAL_MODULE_2__, __WEBPACK_LOCAL_MODULE_2__factory, __WEBPACK_LOCAL_MODULE_2__module;var __WEBPACK_LOCAL_MODULE_3__, __WEBPACK_LOCAL_MODULE_3__factory, __WEBPACK_LOCAL_MODULE_3__module;var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_LOCAL_MODULE_4__, __WEBPACK_LOCAL_MODULE_4__exports;var __WEBPACK_LOCAL_MODULE_5__array, __WEBPACK_LOCAL_MODULE_5__factory, __WEBPACK_LOCAL_MODULE_5__exports, __WEBPACK_LOCAL_MODULE_5__;var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_LOCAL_MODULE_6__, __WEBPACK_LOCAL_MODULE_6__exports;var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\\n * Masonry PACKAGED v4.2.2\\n * Cascading grid layout library\\n * https://masonry.desandro.com\\n * MIT License\\n * by David DeSandro\\n */\\n\\n/**\\n * Bridget makes jQuery widgets\\n * v2.0.1\\n * MIT license\\n */\\n\\n/* jshint browser: true, strict: true, undef: true, unused: true */\\n\\n( function( window, factory ) {\\n  // universal module definition\\n  /*jshint strict: false */ /* globals define, module, require */\\n  if ( true ) {\\n    // AMD\\n    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(/*! jquery */ \\\"jquery\\\") ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( jQuery ) {\\n      return factory( window, jQuery );\\n    }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\\n\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n  } else {}\\n\\n}( window, function factory( window, jQuery ) {\\n'use strict';\\n\\n// ----- utils ----- //\\n\\nvar arraySlice = Array.prototype.slice;\\n\\n// helper function for logging errors\\n// $.error breaks jQuery chaining\\nvar console = window.console;\\nvar logError = typeof console == 'undefined' ? function() {} :\\n  function( message ) {\\n    console.error( message );\\n  };\\n\\n// ----- jQueryBridget ----- //\\n\\nfunction jQueryBridget( namespace, PluginClass, $ ) {\\n  $ = $ || jQuery || window.jQuery;\\n  if ( !$ ) {\\n    return;\\n  }\\n\\n  // add option method -> $().plugin('option', {...})\\n  if ( !PluginClass.prototype.option ) {\\n    // option setter\\n    PluginClass.prototype.option = function( opts ) {\\n      // bail out if not an object\\n      if ( !$.isPlainObject( opts ) ){\\n        return;\\n      }\\n      this.options = $.extend( true, this.options, opts );\\n    };\\n  }\\n\\n  // make jQuery plugin\\n  $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {\\n    if ( typeof arg0 == 'string' ) {\\n      // method call $().plugin( 'methodName', { options } )\\n      // shift arguments by 1\\n      var args = arraySlice.call( arguments, 1 );\\n      return methodCall( this, arg0, args );\\n    }\\n    // just $().plugin({ options })\\n    plainCall( this, arg0 );\\n    return this;\\n  };\\n\\n  // $().plugin('methodName')\\n  function methodCall( $elems, methodName, args ) {\\n    var returnValue;\\n    var pluginMethodStr = '$().' + namespace + '(\\\"' + methodName + '\\\")';\\n\\n    $elems.each( function( i, elem ) {\\n      // get instance\\n      var instance = $.data( elem, namespace );\\n      if ( !instance ) {\\n        logError( namespace + ' not initialized. Cannot call methods, i.e. ' +\\n          pluginMethodStr );\\n        return;\\n      }\\n\\n      var method = instance[ methodName ];\\n      if ( !method || methodName.charAt(0) == '_' ) {\\n        logError( pluginMethodStr + ' is not a valid method' );\\n        return;\\n      }\\n\\n      // apply method, get return value\\n      var value = method.apply( instance, args );\\n      // set return value if value is returned, use only first value\\n      returnValue = returnValue === undefined ? value : returnValue;\\n    });\\n\\n    return returnValue !== undefined ? returnValue : $elems;\\n  }\\n\\n  function plainCall( $elems, options ) {\\n    $elems.each( function( i, elem ) {\\n      var instance = $.data( elem, namespace );\\n      if ( instance ) {\\n        // set options & init\\n        instance.option( options );\\n        instance._init();\\n      } else {\\n        // initialize new instance\\n        instance = new PluginClass( elem, options );\\n        $.data( elem, namespace, instance );\\n      }\\n    });\\n  }\\n\\n  updateJQuery( $ );\\n\\n}\\n\\n// ----- updateJQuery ----- //\\n\\n// set $.bridget for v1 backwards compatibility\\nfunction updateJQuery( $ ) {\\n  if ( !$ || ( $ && $.bridget ) ) {\\n    return;\\n  }\\n  $.bridget = jQueryBridget;\\n}\\n\\nupdateJQuery( jQuery || window.jQuery );\\n\\n// -----  ----- //\\n\\nreturn jQueryBridget;\\n\\n}));\\n\\n/**\\n * EvEmitter v1.1.0\\n * Lil' event emitter\\n * MIT License\\n */\\n\\n/* jshint unused: true, undef: true, strict: true */\\n\\n( function( global, factory ) {\\n  // universal module definition\\n  /* jshint strict: false */ /* globals define, module, window */\\n  if ( true ) {\\n    // AMD - RequireJS\\n    !(__WEBPACK_LOCAL_MODULE_1__factory = (factory), (typeof __WEBPACK_LOCAL_MODULE_1__factory === 'function' ? ((__WEBPACK_LOCAL_MODULE_1__module = { id: \\\"ev-emitter/ev-emitter\\\", exports: {}, loaded: false }), (__WEBPACK_LOCAL_MODULE_1__ = __WEBPACK_LOCAL_MODULE_1__factory.call(__WEBPACK_LOCAL_MODULE_1__module.exports, __webpack_require__, __WEBPACK_LOCAL_MODULE_1__module.exports, __WEBPACK_LOCAL_MODULE_1__module)), (__WEBPACK_LOCAL_MODULE_1__module.loaded = true), __WEBPACK_LOCAL_MODULE_1__ === undefined && (__WEBPACK_LOCAL_MODULE_1__ = __WEBPACK_LOCAL_MODULE_1__module.exports)) : __WEBPACK_LOCAL_MODULE_1__ = __WEBPACK_LOCAL_MODULE_1__factory));\\n  } else {}\\n\\n}( typeof window != 'undefined' ? window : this, function() {\\n\\n\\n\\nfunction EvEmitter() {}\\n\\nvar proto = EvEmitter.prototype;\\n\\nproto.on = function( eventName, listener ) {\\n  if ( !eventName || !listener ) {\\n    return;\\n  }\\n  // set events hash\\n  var events = this._events = this._events || {};\\n  // set listeners array\\n  var listeners = events[ eventName ] = events[ eventName ] || [];\\n  // only add once\\n  if ( listeners.indexOf( listener ) == -1 ) {\\n    listeners.push( listener );\\n  }\\n\\n  return this;\\n};\\n\\nproto.once = function( eventName, listener ) {\\n  if ( !eventName || !listener ) {\\n    return;\\n  }\\n  // add event\\n  this.on( eventName, listener );\\n  // set once flag\\n  // set onceEvents hash\\n  var onceEvents = this._onceEvents = this._onceEvents || {};\\n  // set onceListeners object\\n  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\\n  // set flag\\n  onceListeners[ listener ] = true;\\n\\n  return this;\\n};\\n\\nproto.off = function( eventName, listener ) {\\n  var listeners = this._events && this._events[ eventName ];\\n  if ( !listeners || !listeners.length ) {\\n    return;\\n  }\\n  var index = listeners.indexOf( listener );\\n  if ( index != -1 ) {\\n    listeners.splice( index, 1 );\\n  }\\n\\n  return this;\\n};\\n\\nproto.emitEvent = function( eventName, args ) {\\n  var listeners = this._events && this._events[ eventName ];\\n  if ( !listeners || !listeners.length ) {\\n    return;\\n  }\\n  // copy over to avoid interference if .off() in listener\\n  listeners = listeners.slice(0);\\n  args = args || [];\\n  // once stuff\\n  var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\\n\\n  for ( var i=0; i < listeners.length; i++ ) {\\n    var listener = listeners[i]\\n    var isOnce = onceListeners && onceListeners[ listener ];\\n    if ( isOnce ) {\\n      // remove listener\\n      // remove before trigger to prevent recursion\\n      this.off( eventName, listener );\\n      // unset once flag\\n      delete onceListeners[ listener ];\\n    }\\n    // trigger listener\\n    listener.apply( this, args );\\n  }\\n\\n  return this;\\n};\\n\\nproto.allOff = function() {\\n  delete this._events;\\n  delete this._onceEvents;\\n};\\n\\nreturn EvEmitter;\\n\\n}));\\n\\n/*!\\n * getSize v2.0.3\\n * measure size of elements\\n * MIT license\\n */\\n\\n/* jshint browser: true, strict: true, undef: true, unused: true */\\n/* globals console: false */\\n\\n( function( window, factory ) {\\n  /* jshint strict: false */ /* globals define, module */\\n  if ( true ) {\\n    // AMD\\n    !(__WEBPACK_LOCAL_MODULE_2__factory = (factory), (typeof __WEBPACK_LOCAL_MODULE_2__factory === 'function' ? ((__WEBPACK_LOCAL_MODULE_2__module = { id: \\\"get-size/get-size\\\", exports: {}, loaded: false }), (__WEBPACK_LOCAL_MODULE_2__ = __WEBPACK_LOCAL_MODULE_2__factory.call(__WEBPACK_LOCAL_MODULE_2__module.exports, __webpack_require__, __WEBPACK_LOCAL_MODULE_2__module.exports, __WEBPACK_LOCAL_MODULE_2__module)), (__WEBPACK_LOCAL_MODULE_2__module.loaded = true), __WEBPACK_LOCAL_MODULE_2__ === undefined && (__WEBPACK_LOCAL_MODULE_2__ = __WEBPACK_LOCAL_MODULE_2__module.exports)) : __WEBPACK_LOCAL_MODULE_2__ = __WEBPACK_LOCAL_MODULE_2__factory));\\n  } else {}\\n\\n})( window, function factory() {\\n'use strict';\\n\\n// -------------------------- helpers -------------------------- //\\n\\n// get a number from a string, not a percentage\\nfunction getStyleSize( value ) {\\n  var num = parseFloat( value );\\n  // not a percent like '100%', and a number\\n  var isValid = value.indexOf('%') == -1 && !isNaN( num );\\n  return isValid && num;\\n}\\n\\nfunction noop() {}\\n\\nvar logError = typeof console == 'undefined' ? noop :\\n  function( message ) {\\n    console.error( message );\\n  };\\n\\n// -------------------------- measurements -------------------------- //\\n\\nvar measurements = [\\n  'paddingLeft',\\n  'paddingRight',\\n  'paddingTop',\\n  'paddingBottom',\\n  'marginLeft',\\n  'marginRight',\\n  'marginTop',\\n  'marginBottom',\\n  'borderLeftWidth',\\n  'borderRightWidth',\\n  'borderTopWidth',\\n  'borderBottomWidth'\\n];\\n\\nvar measurementsLength = measurements.length;\\n\\nfunction getZeroSize() {\\n  var size = {\\n    width: 0,\\n    height: 0,\\n    innerWidth: 0,\\n    innerHeight: 0,\\n    outerWidth: 0,\\n    outerHeight: 0\\n  };\\n  for ( var i=0; i < measurementsLength; i++ ) {\\n    var measurement = measurements[i];\\n    size[ measurement ] = 0;\\n  }\\n  return size;\\n}\\n\\n// -------------------------- getStyle -------------------------- //\\n\\n/**\\n * getStyle, get style of element, check for Firefox bug\\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\\n */\\nfunction getStyle( elem ) {\\n  var style = getComputedStyle( elem );\\n  if ( !style ) {\\n    logError( 'Style returned ' + style +\\n      '. Are you running this code in a hidden iframe on Firefox? ' +\\n      'See https://bit.ly/getsizebug1' );\\n  }\\n  return style;\\n}\\n\\n// -------------------------- setup -------------------------- //\\n\\nvar isSetup = false;\\n\\nvar isBoxSizeOuter;\\n\\n/**\\n * setup\\n * check isBoxSizerOuter\\n * do on first getSize() rather than on page load for Firefox bug\\n */\\nfunction setup() {\\n  // setup once\\n  if ( isSetup ) {\\n    return;\\n  }\\n  isSetup = true;\\n\\n  // -------------------------- box sizing -------------------------- //\\n\\n  /**\\n   * Chrome & Safari measure the outer-width on style.width on border-box elems\\n   * IE11 & Firefox<29 measures the inner-width\\n   */\\n  var div = document.createElement('div');\\n  div.style.width = '200px';\\n  div.style.padding = '1px 2px 3px 4px';\\n  div.style.borderStyle = 'solid';\\n  div.style.borderWidth = '1px 2px 3px 4px';\\n  div.style.boxSizing = 'border-box';\\n\\n  var body = document.body || document.documentElement;\\n  body.appendChild( div );\\n  var style = getStyle( div );\\n  // round value for browser zoom. desandro/masonry#928\\n  isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\\n  getSize.isBoxSizeOuter = isBoxSizeOuter;\\n\\n  body.removeChild( div );\\n}\\n\\n// -------------------------- getSize -------------------------- //\\n\\nfunction getSize( elem ) {\\n  setup();\\n\\n  // use querySeletor if elem is string\\n  if ( typeof elem == 'string' ) {\\n    elem = document.querySelector( elem );\\n  }\\n\\n  // do not proceed on non-objects\\n  if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\\n    return;\\n  }\\n\\n  var style = getStyle( elem );\\n\\n  // if hidden, everything is 0\\n  if ( style.display == 'none' ) {\\n    return getZeroSize();\\n  }\\n\\n  var size = {};\\n  size.width = elem.offsetWidth;\\n  size.height = elem.offsetHeight;\\n\\n  var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\\n\\n  // get all measurements\\n  for ( var i=0; i < measurementsLength; i++ ) {\\n    var measurement = measurements[i];\\n    var value = style[ measurement ];\\n    var num = parseFloat( value );\\n    // any 'auto', 'medium' value will be 0\\n    size[ measurement ] = !isNaN( num ) ? num : 0;\\n  }\\n\\n  var paddingWidth = size.paddingLeft + size.paddingRight;\\n  var paddingHeight = size.paddingTop + size.paddingBottom;\\n  var marginWidth = size.marginLeft + size.marginRight;\\n  var marginHeight = size.marginTop + size.marginBottom;\\n  var borderWidth = size.borderLeftWidth + size.borderRightWidth;\\n  var borderHeight = size.borderTopWidth + size.borderBottomWidth;\\n\\n  var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\\n\\n  // overwrite width and height if we can get it from style\\n  var styleWidth = getStyleSize( style.width );\\n  if ( styleWidth !== false ) {\\n    size.width = styleWidth +\\n      // add padding and border unless it's already including it\\n      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\\n  }\\n\\n  var styleHeight = getStyleSize( style.height );\\n  if ( styleHeight !== false ) {\\n    size.height = styleHeight +\\n      // add padding and border unless it's already including it\\n      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\\n  }\\n\\n  size.innerWidth = size.width - ( paddingWidth + borderWidth );\\n  size.innerHeight = size.height - ( paddingHeight + borderHeight );\\n\\n  size.outerWidth = size.width + marginWidth;\\n  size.outerHeight = size.height + marginHeight;\\n\\n  return size;\\n}\\n\\nreturn getSize;\\n\\n});\\n\\n/**\\n * matchesSelector v2.0.2\\n * matchesSelector( element, '.selector' )\\n * MIT license\\n */\\n\\n/*jshint browser: true, strict: true, undef: true, unused: true */\\n\\n( function( window, factory ) {\\n  /*global define: false, module: false */\\n  'use strict';\\n  // universal module definition\\n  if ( true ) {\\n    // AMD\\n    !(__WEBPACK_LOCAL_MODULE_3__factory = (factory), (typeof __WEBPACK_LOCAL_MODULE_3__factory === 'function' ? ((__WEBPACK_LOCAL_MODULE_3__module = { id: \\\"desandro-matches-selector/matches-selector\\\", exports: {}, loaded: false }), (__WEBPACK_LOCAL_MODULE_3__ = __WEBPACK_LOCAL_MODULE_3__factory.call(__WEBPACK_LOCAL_MODULE_3__module.exports, __webpack_require__, __WEBPACK_LOCAL_MODULE_3__module.exports, __WEBPACK_LOCAL_MODULE_3__module)), (__WEBPACK_LOCAL_MODULE_3__module.loaded = true), __WEBPACK_LOCAL_MODULE_3__ === undefined && (__WEBPACK_LOCAL_MODULE_3__ = __WEBPACK_LOCAL_MODULE_3__module.exports)) : __WEBPACK_LOCAL_MODULE_3__ = __WEBPACK_LOCAL_MODULE_3__factory));\\n  } else {}\\n\\n}( window, function factory() {\\n  'use strict';\\n\\n  var matchesMethod = ( function() {\\n    var ElemProto = window.Element.prototype;\\n    // check for the standard method name first\\n    if ( ElemProto.matches ) {\\n      return 'matches';\\n    }\\n    // check un-prefixed\\n    if ( ElemProto.matchesSelector ) {\\n      return 'matchesSelector';\\n    }\\n    // check vendor prefixes\\n    var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\\n\\n    for ( var i=0; i < prefixes.length; i++ ) {\\n      var prefix = prefixes[i];\\n      var method = prefix + 'MatchesSelector';\\n      if ( ElemProto[ method ] ) {\\n        return method;\\n      }\\n    }\\n  })();\\n\\n  return function matchesSelector( elem, selector ) {\\n    return elem[ matchesMethod ]( selector );\\n  };\\n\\n}));\\n\\n/**\\n * Fizzy UI utils v2.0.7\\n * MIT license\\n */\\n\\n/*jshint browser: true, undef: true, unused: true, strict: true */\\n\\n( function( window, factory ) {\\n  // universal module definition\\n  /*jshint strict: false */ /*globals define, module, require */\\n\\n  if ( true ) {\\n    // AMD\\n    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\\n      __WEBPACK_LOCAL_MODULE_3__\\n    ], __WEBPACK_LOCAL_MODULE_4__ = (function( matchesSelector ) {\\n      return factory( window, matchesSelector );\\n    }).apply(__WEBPACK_LOCAL_MODULE_4__exports = {}, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_LOCAL_MODULE_4__ === undefined && (__WEBPACK_LOCAL_MODULE_4__ = __WEBPACK_LOCAL_MODULE_4__exports));\\n  } else {}\\n\\n}( window, function factory( window, matchesSelector ) {\\n\\n\\n\\nvar utils = {};\\n\\n// ----- extend ----- //\\n\\n// extends objects\\nutils.extend = function( a, b ) {\\n  for ( var prop in b ) {\\n    a[ prop ] = b[ prop ];\\n  }\\n  return a;\\n};\\n\\n// ----- modulo ----- //\\n\\nutils.modulo = function( num, div ) {\\n  return ( ( num % div ) + div ) % div;\\n};\\n\\n// ----- makeArray ----- //\\n\\nvar arraySlice = Array.prototype.slice;\\n\\n// turn element or nodeList into an array\\nutils.makeArray = function( obj ) {\\n  if ( Array.isArray( obj ) ) {\\n    // use object if already an array\\n    return obj;\\n  }\\n  // return empty array if undefined or null. #6\\n  if ( obj === null || obj === undefined ) {\\n    return [];\\n  }\\n\\n  var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\\n  if ( isArrayLike ) {\\n    // convert nodeList to array\\n    return arraySlice.call( obj );\\n  }\\n\\n  // array of single index\\n  return [ obj ];\\n};\\n\\n// ----- removeFrom ----- //\\n\\nutils.removeFrom = function( ary, obj ) {\\n  var index = ary.indexOf( obj );\\n  if ( index != -1 ) {\\n    ary.splice( index, 1 );\\n  }\\n};\\n\\n// ----- getParent ----- //\\n\\nutils.getParent = function( elem, selector ) {\\n  while ( elem.parentNode && elem != document.body ) {\\n    elem = elem.parentNode;\\n    if ( matchesSelector( elem, selector ) ) {\\n      return elem;\\n    }\\n  }\\n};\\n\\n// ----- getQueryElement ----- //\\n\\n// use element as selector string\\nutils.getQueryElement = function( elem ) {\\n  if ( typeof elem == 'string' ) {\\n    return document.querySelector( elem );\\n  }\\n  return elem;\\n};\\n\\n// ----- handleEvent ----- //\\n\\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\\nutils.handleEvent = function( event ) {\\n  var method = 'on' + event.type;\\n  if ( this[ method ] ) {\\n    this[ method ]( event );\\n  }\\n};\\n\\n// ----- filterFindElements ----- //\\n\\nutils.filterFindElements = function( elems, selector ) {\\n  // make array of elems\\n  elems = utils.makeArray( elems );\\n  var ffElems = [];\\n\\n  elems.forEach( function( elem ) {\\n    // check that elem is an actual element\\n    if ( !( elem instanceof HTMLElement ) ) {\\n      return;\\n    }\\n    // add elem if no selector\\n    if ( !selector ) {\\n      ffElems.push( elem );\\n      return;\\n    }\\n    // filter & find items if we have a selector\\n    // filter\\n    if ( matchesSelector( elem, selector ) ) {\\n      ffElems.push( elem );\\n    }\\n    // find children\\n    var childElems = elem.querySelectorAll( selector );\\n    // concat childElems to filterFound array\\n    for ( var i=0; i < childElems.length; i++ ) {\\n      ffElems.push( childElems[i] );\\n    }\\n  });\\n\\n  return ffElems;\\n};\\n\\n// ----- debounceMethod ----- //\\n\\nutils.debounceMethod = function( _class, methodName, threshold ) {\\n  threshold = threshold || 100;\\n  // original method\\n  var method = _class.prototype[ methodName ];\\n  var timeoutName = methodName + 'Timeout';\\n\\n  _class.prototype[ methodName ] = function() {\\n    var timeout = this[ timeoutName ];\\n    clearTimeout( timeout );\\n\\n    var args = arguments;\\n    var _this = this;\\n    this[ timeoutName ] = setTimeout( function() {\\n      method.apply( _this, args );\\n      delete _this[ timeoutName ];\\n    }, threshold );\\n  };\\n};\\n\\n// ----- docReady ----- //\\n\\nutils.docReady = function( callback ) {\\n  var readyState = document.readyState;\\n  if ( readyState == 'complete' || readyState == 'interactive' ) {\\n    // do async to allow for other scripts to run. metafizzy/flickity#441\\n    setTimeout( callback );\\n  } else {\\n    document.addEventListener( 'DOMContentLoaded', callback );\\n  }\\n};\\n\\n// ----- htmlInit ----- //\\n\\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\\nutils.toDashed = function( str ) {\\n  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\\n    return $1 + '-' + $2;\\n  }).toLowerCase();\\n};\\n\\nvar console = window.console;\\n/**\\n * allow user to initialize classes via [data-namespace] or .js-namespace class\\n * htmlInit( Widget, 'widgetName' )\\n * options are parsed from data-namespace-options\\n */\\nutils.htmlInit = function( WidgetClass, namespace ) {\\n  utils.docReady( function() {\\n    var dashedNamespace = utils.toDashed( namespace );\\n    var dataAttr = 'data-' + dashedNamespace;\\n    var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\\n    var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\\n    var elems = utils.makeArray( dataAttrElems )\\n      .concat( utils.makeArray( jsDashElems ) );\\n    var dataOptionsAttr = dataAttr + '-options';\\n    var jQuery = window.jQuery;\\n\\n    elems.forEach( function( elem ) {\\n      var attr = elem.getAttribute( dataAttr ) ||\\n        elem.getAttribute( dataOptionsAttr );\\n      var options;\\n      try {\\n        options = attr && JSON.parse( attr );\\n      } catch ( error ) {\\n        // log error, do not initialize\\n        if ( console ) {\\n          console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\\n          ': ' + error );\\n        }\\n        return;\\n      }\\n      // initialize\\n      var instance = new WidgetClass( elem, options );\\n      // make available via $().data('namespace')\\n      if ( jQuery ) {\\n        jQuery.data( elem, namespace, instance );\\n      }\\n    });\\n\\n  });\\n};\\n\\n// -----  ----- //\\n\\nreturn utils;\\n\\n}));\\n\\n/**\\n * Outlayer Item\\n */\\n\\n( function( window, factory ) {\\n  // universal module definition\\n  /* jshint strict: false */ /* globals define, module, require */\\n  if ( true ) {\\n    // AMD - RequireJS\\n    !(__WEBPACK_LOCAL_MODULE_5__array = [\\n        __WEBPACK_LOCAL_MODULE_1__,\\n        __WEBPACK_LOCAL_MODULE_2__\\n      ], __WEBPACK_LOCAL_MODULE_5__factory = (factory),\\n\\t\\t(typeof __WEBPACK_LOCAL_MODULE_5__factory === 'function' ?\\n\\t\\t\\t((__WEBPACK_LOCAL_MODULE_5__ = __WEBPACK_LOCAL_MODULE_5__factory.apply(__WEBPACK_LOCAL_MODULE_5__exports = {}, __WEBPACK_LOCAL_MODULE_5__array)), __WEBPACK_LOCAL_MODULE_5__ === undefined && (__WEBPACK_LOCAL_MODULE_5__ = __WEBPACK_LOCAL_MODULE_5__exports)) :\\n\\t\\t\\t(__WEBPACK_LOCAL_MODULE_5__ = __WEBPACK_LOCAL_MODULE_5__factory)\\n\\t\\t));\\n  } else {}\\n\\n}( window, function factory( EvEmitter, getSize ) {\\n'use strict';\\n\\n// ----- helpers ----- //\\n\\nfunction isEmptyObj( obj ) {\\n  for ( var prop in obj ) {\\n    return false;\\n  }\\n  prop = null;\\n  return true;\\n}\\n\\n// -------------------------- CSS3 support -------------------------- //\\n\\n\\nvar docElemStyle = document.documentElement.style;\\n\\nvar transitionProperty = typeof docElemStyle.transition == 'string' ?\\n  'transition' : 'WebkitTransition';\\nvar transformProperty = typeof docElemStyle.transform == 'string' ?\\n  'transform' : 'WebkitTransform';\\n\\nvar transitionEndEvent = {\\n  WebkitTransition: 'webkitTransitionEnd',\\n  transition: 'transitionend'\\n}[ transitionProperty ];\\n\\n// cache all vendor properties that could have vendor prefix\\nvar vendorProperties = {\\n  transform: transformProperty,\\n  transition: transitionProperty,\\n  transitionDuration: transitionProperty + 'Duration',\\n  transitionProperty: transitionProperty + 'Property',\\n  transitionDelay: transitionProperty + 'Delay'\\n};\\n\\n// -------------------------- Item -------------------------- //\\n\\nfunction Item( element, layout ) {\\n  if ( !element ) {\\n    return;\\n  }\\n\\n  this.element = element;\\n  // parent layout class, i.e. Masonry, Isotope, or Packery\\n  this.layout = layout;\\n  this.position = {\\n    x: 0,\\n    y: 0\\n  };\\n\\n  this._create();\\n}\\n\\n// inherit EvEmitter\\nvar proto = Item.prototype = Object.create( EvEmitter.prototype );\\nproto.constructor = Item;\\n\\nproto._create = function() {\\n  // transition objects\\n  this._transn = {\\n    ingProperties: {},\\n    clean: {},\\n    onEnd: {}\\n  };\\n\\n  this.css({\\n    position: 'absolute'\\n  });\\n};\\n\\n// trigger specified handler for event type\\nproto.handleEvent = function( event ) {\\n  var method = 'on' + event.type;\\n  if ( this[ method ] ) {\\n    this[ method ]( event );\\n  }\\n};\\n\\nproto.getSize = function() {\\n  this.size = getSize( this.element );\\n};\\n\\n/**\\n * apply CSS styles to element\\n * @param {Object} style\\n */\\nproto.css = function( style ) {\\n  var elemStyle = this.element.style;\\n\\n  for ( var prop in style ) {\\n    // use vendor property if available\\n    var supportedProp = vendorProperties[ prop ] || prop;\\n    elemStyle[ supportedProp ] = style[ prop ];\\n  }\\n};\\n\\n // measure position, and sets it\\nproto.getPosition = function() {\\n  var style = getComputedStyle( this.element );\\n  var isOriginLeft = this.layout._getOption('originLeft');\\n  var isOriginTop = this.layout._getOption('originTop');\\n  var xValue = style[ isOriginLeft ? 'left' : 'right' ];\\n  var yValue = style[ isOriginTop ? 'top' : 'bottom' ];\\n  var x = parseFloat( xValue );\\n  var y = parseFloat( yValue );\\n  // convert percent to pixels\\n  var layoutSize = this.layout.size;\\n  if ( xValue.indexOf('%') != -1 ) {\\n    x = ( x / 100 ) * layoutSize.width;\\n  }\\n  if ( yValue.indexOf('%') != -1 ) {\\n    y = ( y / 100 ) * layoutSize.height;\\n  }\\n  // clean up 'auto' or other non-integer values\\n  x = isNaN( x ) ? 0 : x;\\n  y = isNaN( y ) ? 0 : y;\\n  // remove padding from measurement\\n  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\\n  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\\n\\n  this.position.x = x;\\n  this.position.y = y;\\n};\\n\\n// set settled position, apply padding\\nproto.layoutPosition = function() {\\n  var layoutSize = this.layout.size;\\n  var style = {};\\n  var isOriginLeft = this.layout._getOption('originLeft');\\n  var isOriginTop = this.layout._getOption('originTop');\\n\\n  // x\\n  var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';\\n  var xProperty = isOriginLeft ? 'left' : 'right';\\n  var xResetProperty = isOriginLeft ? 'right' : 'left';\\n\\n  var x = this.position.x + layoutSize[ xPadding ];\\n  // set in percentage or pixels\\n  style[ xProperty ] = this.getXValue( x );\\n  // reset other property\\n  style[ xResetProperty ] = '';\\n\\n  // y\\n  var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';\\n  var yProperty = isOriginTop ? 'top' : 'bottom';\\n  var yResetProperty = isOriginTop ? 'bottom' : 'top';\\n\\n  var y = this.position.y + layoutSize[ yPadding ];\\n  // set in percentage or pixels\\n  style[ yProperty ] = this.getYValue( y );\\n  // reset other property\\n  style[ yResetProperty ] = '';\\n\\n  this.css( style );\\n  this.emitEvent( 'layout', [ this ] );\\n};\\n\\nproto.getXValue = function( x ) {\\n  var isHorizontal = this.layout._getOption('horizontal');\\n  return this.layout.options.percentPosition && !isHorizontal ?\\n    ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';\\n};\\n\\nproto.getYValue = function( y ) {\\n  var isHorizontal = this.layout._getOption('horizontal');\\n  return this.layout.options.percentPosition && isHorizontal ?\\n    ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';\\n};\\n\\nproto._transitionTo = function( x, y ) {\\n  this.getPosition();\\n  // get current x & y from top/left\\n  var curX = this.position.x;\\n  var curY = this.position.y;\\n\\n  var didNotMove = x == this.position.x && y == this.position.y;\\n\\n  // save end position\\n  this.setPosition( x, y );\\n\\n  // if did not move and not transitioning, just go to layout\\n  if ( didNotMove && !this.isTransitioning ) {\\n    this.layoutPosition();\\n    return;\\n  }\\n\\n  var transX = x - curX;\\n  var transY = y - curY;\\n  var transitionStyle = {};\\n  transitionStyle.transform = this.getTranslate( transX, transY );\\n\\n  this.transition({\\n    to: transitionStyle,\\n    onTransitionEnd: {\\n      transform: this.layoutPosition\\n    },\\n    isCleaning: true\\n  });\\n};\\n\\nproto.getTranslate = function( x, y ) {\\n  // flip cooridinates if origin on right or bottom\\n  var isOriginLeft = this.layout._getOption('originLeft');\\n  var isOriginTop = this.layout._getOption('originTop');\\n  x = isOriginLeft ? x : -x;\\n  y = isOriginTop ? y : -y;\\n  return 'translate3d(' + x + 'px, ' + y + 'px, 0)';\\n};\\n\\n// non transition + transform support\\nproto.goTo = function( x, y ) {\\n  this.setPosition( x, y );\\n  this.layoutPosition();\\n};\\n\\nproto.moveTo = proto._transitionTo;\\n\\nproto.setPosition = function( x, y ) {\\n  this.position.x = parseFloat( x );\\n  this.position.y = parseFloat( y );\\n};\\n\\n// ----- transition ----- //\\n\\n/**\\n * @param {Object} style - CSS\\n * @param {Function} onTransitionEnd\\n */\\n\\n// non transition, just trigger callback\\nproto._nonTransition = function( args ) {\\n  this.css( args.to );\\n  if ( args.isCleaning ) {\\n    this._removeStyles( args.to );\\n  }\\n  for ( var prop in args.onTransitionEnd ) {\\n    args.onTransitionEnd[ prop ].call( this );\\n  }\\n};\\n\\n/**\\n * proper transition\\n * @param {Object} args - arguments\\n *   @param {Object} to - style to transition to\\n *   @param {Object} from - style to start transition from\\n *   @param {Boolean} isCleaning - removes transition styles after transition\\n *   @param {Function} onTransitionEnd - callback\\n */\\nproto.transition = function( args ) {\\n  // redirect to nonTransition if no transition duration\\n  if ( !parseFloat( this.layout.options.transitionDuration ) ) {\\n    this._nonTransition( args );\\n    return;\\n  }\\n\\n  var _transition = this._transn;\\n  // keep track of onTransitionEnd callback by css property\\n  for ( var prop in args.onTransitionEnd ) {\\n    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];\\n  }\\n  // keep track of properties that are transitioning\\n  for ( prop in args.to ) {\\n    _transition.ingProperties[ prop ] = true;\\n    // keep track of properties to clean up when transition is done\\n    if ( args.isCleaning ) {\\n      _transition.clean[ prop ] = true;\\n    }\\n  }\\n\\n  // set from styles\\n  if ( args.from ) {\\n    this.css( args.from );\\n    // force redraw. http://blog.alexmaccaw.com/css-transitions\\n    var h = this.element.offsetHeight;\\n    // hack for JSHint to hush about unused var\\n    h = null;\\n  }\\n  // enable transition\\n  this.enableTransition( args.to );\\n  // set styles that are transitioning\\n  this.css( args.to );\\n\\n  this.isTransitioning = true;\\n\\n};\\n\\n// dash before all cap letters, including first for\\n// WebkitTransform => -webkit-transform\\nfunction toDashedAll( str ) {\\n  return str.replace( /([A-Z])/g, function( $1 ) {\\n    return '-' + $1.toLowerCase();\\n  });\\n}\\n\\nvar transitionProps = 'opacity,' + toDashedAll( transformProperty );\\n\\nproto.enableTransition = function(/* style */) {\\n  // HACK changing transitionProperty during a transition\\n  // will cause transition to jump\\n  if ( this.isTransitioning ) {\\n    return;\\n  }\\n\\n  // make `transition: foo, bar, baz` from style object\\n  // HACK un-comment this when enableTransition can work\\n  // while a transition is happening\\n  // var transitionValues = [];\\n  // for ( var prop in style ) {\\n  //   // dash-ify camelCased properties like WebkitTransition\\n  //   prop = vendorProperties[ prop ] || prop;\\n  //   transitionValues.push( toDashedAll( prop ) );\\n  // }\\n  // munge number to millisecond, to match stagger\\n  var duration = this.layout.options.transitionDuration;\\n  duration = typeof duration == 'number' ? duration + 'ms' : duration;\\n  // enable transition styles\\n  this.css({\\n    transitionProperty: transitionProps,\\n    transitionDuration: duration,\\n    transitionDelay: this.staggerDelay || 0\\n  });\\n  // listen for transition end event\\n  this.element.addEventListener( transitionEndEvent, this, false );\\n};\\n\\n// ----- events ----- //\\n\\nproto.onwebkitTransitionEnd = function( event ) {\\n  this.ontransitionend( event );\\n};\\n\\nproto.onotransitionend = function( event ) {\\n  this.ontransitionend( event );\\n};\\n\\n// properties that I munge to make my life easier\\nvar dashedVendorProperties = {\\n  '-webkit-transform': 'transform'\\n};\\n\\nproto.ontransitionend = function( event ) {\\n  // disregard bubbled events from children\\n  if ( event.target !== this.element ) {\\n    return;\\n  }\\n  var _transition = this._transn;\\n  // get property name of transitioned property, convert to prefix-free\\n  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;\\n\\n  // remove property that has completed transitioning\\n  delete _transition.ingProperties[ propertyName ];\\n  // check if any properties are still transitioning\\n  if ( isEmptyObj( _transition.ingProperties ) ) {\\n    // all properties have completed transitioning\\n    this.disableTransition();\\n  }\\n  // clean style\\n  if ( propertyName in _transition.clean ) {\\n    // clean up style\\n    this.element.style[ event.propertyName ] = '';\\n    delete _transition.clean[ propertyName ];\\n  }\\n  // trigger onTransitionEnd callback\\n  if ( propertyName in _transition.onEnd ) {\\n    var onTransitionEnd = _transition.onEnd[ propertyName ];\\n    onTransitionEnd.call( this );\\n    delete _transition.onEnd[ propertyName ];\\n  }\\n\\n  this.emitEvent( 'transitionEnd', [ this ] );\\n};\\n\\nproto.disableTransition = function() {\\n  this.removeTransitionStyles();\\n  this.element.removeEventListener( transitionEndEvent, this, false );\\n  this.isTransitioning = false;\\n};\\n\\n/**\\n * removes style property from element\\n * @param {Object} style\\n**/\\nproto._removeStyles = function( style ) {\\n  // clean up transition styles\\n  var cleanStyle = {};\\n  for ( var prop in style ) {\\n    cleanStyle[ prop ] = '';\\n  }\\n  this.css( cleanStyle );\\n};\\n\\nvar cleanTransitionStyle = {\\n  transitionProperty: '',\\n  transitionDuration: '',\\n  transitionDelay: ''\\n};\\n\\nproto.removeTransitionStyles = function() {\\n  // remove transition\\n  this.css( cleanTransitionStyle );\\n};\\n\\n// ----- stagger ----- //\\n\\nproto.stagger = function( delay ) {\\n  delay = isNaN( delay ) ? 0 : delay;\\n  this.staggerDelay = delay + 'ms';\\n};\\n\\n// ----- show/hide/remove ----- //\\n\\n// remove element from DOM\\nproto.removeElem = function() {\\n  this.element.parentNode.removeChild( this.element );\\n  // remove display: none\\n  this.css({ display: '' });\\n  this.emitEvent( 'remove', [ this ] );\\n};\\n\\nproto.remove = function() {\\n  // just remove element if no transition support or no transition\\n  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {\\n    this.removeElem();\\n    return;\\n  }\\n\\n  // start transition\\n  this.once( 'transitionEnd', function() {\\n    this.removeElem();\\n  });\\n  this.hide();\\n};\\n\\nproto.reveal = function() {\\n  delete this.isHidden;\\n  // remove display: none\\n  this.css({ display: '' });\\n\\n  var options = this.layout.options;\\n\\n  var onTransitionEnd = {};\\n  var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\\n  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;\\n\\n  this.transition({\\n    from: options.hiddenStyle,\\n    to: options.visibleStyle,\\n    isCleaning: true,\\n    onTransitionEnd: onTransitionEnd\\n  });\\n};\\n\\nproto.onRevealTransitionEnd = function() {\\n  // check if still visible\\n  // during transition, item may have been hidden\\n  if ( !this.isHidden ) {\\n    this.emitEvent('reveal');\\n  }\\n};\\n\\n/**\\n * get style property use for hide/reveal transition end\\n * @param {String} styleProperty - hiddenStyle/visibleStyle\\n * @returns {String}\\n */\\nproto.getHideRevealTransitionEndProperty = function( styleProperty ) {\\n  var optionStyle = this.layout.options[ styleProperty ];\\n  // use opacity\\n  if ( optionStyle.opacity ) {\\n    return 'opacity';\\n  }\\n  // get first property\\n  for ( var prop in optionStyle ) {\\n    return prop;\\n  }\\n};\\n\\nproto.hide = function() {\\n  // set flag\\n  this.isHidden = true;\\n  // remove display: none\\n  this.css({ display: '' });\\n\\n  var options = this.layout.options;\\n\\n  var onTransitionEnd = {};\\n  var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\\n  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;\\n\\n  this.transition({\\n    from: options.visibleStyle,\\n    to: options.hiddenStyle,\\n    // keep hidden stuff hidden\\n    isCleaning: true,\\n    onTransitionEnd: onTransitionEnd\\n  });\\n};\\n\\nproto.onHideTransitionEnd = function() {\\n  // check if still hidden\\n  // during transition, item may have been un-hidden\\n  if ( this.isHidden ) {\\n    this.css({ display: 'none' });\\n    this.emitEvent('hide');\\n  }\\n};\\n\\nproto.destroy = function() {\\n  this.css({\\n    position: '',\\n    left: '',\\n    right: '',\\n    top: '',\\n    bottom: '',\\n    transition: '',\\n    transform: ''\\n  });\\n};\\n\\nreturn Item;\\n\\n}));\\n\\n/*!\\n * Outlayer v2.1.1\\n * the brains and guts of a layout library\\n * MIT license\\n */\\n\\n( function( window, factory ) {\\n  'use strict';\\n  // universal module definition\\n  /* jshint strict: false */ /* globals define, module, require */\\n  if ( true ) {\\n    // AMD - RequireJS\\n    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\\n        __WEBPACK_LOCAL_MODULE_1__,\\n        __WEBPACK_LOCAL_MODULE_2__,\\n        __WEBPACK_LOCAL_MODULE_4__,\\n        __WEBPACK_LOCAL_MODULE_5__\\n      ], __WEBPACK_LOCAL_MODULE_6__ = (function( EvEmitter, getSize, utils, Item ) {\\n        return factory( window, EvEmitter, getSize, utils, Item);\\n      }).apply(__WEBPACK_LOCAL_MODULE_6__exports = {}, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_LOCAL_MODULE_6__ === undefined && (__WEBPACK_LOCAL_MODULE_6__ = __WEBPACK_LOCAL_MODULE_6__exports));\\n  } else {}\\n\\n}( window, function factory( window, EvEmitter, getSize, utils, Item ) {\\n'use strict';\\n\\n// ----- vars ----- //\\n\\nvar console = window.console;\\nvar jQuery = window.jQuery;\\nvar noop = function() {};\\n\\n// -------------------------- Outlayer -------------------------- //\\n\\n// globally unique identifiers\\nvar GUID = 0;\\n// internal store of all Outlayer intances\\nvar instances = {};\\n\\n\\n/**\\n * @param {Element, String} element\\n * @param {Object} options\\n * @constructor\\n */\\nfunction Outlayer( element, options ) {\\n  var queryElement = utils.getQueryElement( element );\\n  if ( !queryElement ) {\\n    if ( console ) {\\n      console.error( 'Bad element for ' + this.constructor.namespace +\\n        ': ' + ( queryElement || element ) );\\n    }\\n    return;\\n  }\\n  this.element = queryElement;\\n  // add jQuery\\n  if ( jQuery ) {\\n    this.$element = jQuery( this.element );\\n  }\\n\\n  // options\\n  this.options = utils.extend( {}, this.constructor.defaults );\\n  this.option( options );\\n\\n  // add id for Outlayer.getFromElement\\n  var id = ++GUID;\\n  this.element.outlayerGUID = id; // expando\\n  instances[ id ] = this; // associate via id\\n\\n  // kick it off\\n  this._create();\\n\\n  var isInitLayout = this._getOption('initLayout');\\n  if ( isInitLayout ) {\\n    this.layout();\\n  }\\n}\\n\\n// settings are for internal use only\\nOutlayer.namespace = 'outlayer';\\nOutlayer.Item = Item;\\n\\n// default options\\nOutlayer.defaults = {\\n  containerStyle: {\\n    position: 'relative'\\n  },\\n  initLayout: true,\\n  originLeft: true,\\n  originTop: true,\\n  resize: true,\\n  resizeContainer: true,\\n  // item options\\n  transitionDuration: '0.4s',\\n  hiddenStyle: {\\n    opacity: 0,\\n    transform: 'scale(0.001)'\\n  },\\n  visibleStyle: {\\n    opacity: 1,\\n    transform: 'scale(1)'\\n  }\\n};\\n\\nvar proto = Outlayer.prototype;\\n// inherit EvEmitter\\nutils.extend( proto, EvEmitter.prototype );\\n\\n/**\\n * set options\\n * @param {Object} opts\\n */\\nproto.option = function( opts ) {\\n  utils.extend( this.options, opts );\\n};\\n\\n/**\\n * get backwards compatible option value, check old name\\n */\\nproto._getOption = function( option ) {\\n  var oldOption = this.constructor.compatOptions[ option ];\\n  return oldOption && this.options[ oldOption ] !== undefined ?\\n    this.options[ oldOption ] : this.options[ option ];\\n};\\n\\nOutlayer.compatOptions = {\\n  // currentName: oldName\\n  initLayout: 'isInitLayout',\\n  horizontal: 'isHorizontal',\\n  layoutInstant: 'isLayoutInstant',\\n  originLeft: 'isOriginLeft',\\n  originTop: 'isOriginTop',\\n  resize: 'isResizeBound',\\n  resizeContainer: 'isResizingContainer'\\n};\\n\\nproto._create = function() {\\n  // get items from children\\n  this.reloadItems();\\n  // elements that affect layout, but are not laid out\\n  this.stamps = [];\\n  this.stamp( this.options.stamp );\\n  // set container style\\n  utils.extend( this.element.style, this.options.containerStyle );\\n\\n  // bind resize method\\n  var canBindResize = this._getOption('resize');\\n  if ( canBindResize ) {\\n    this.bindResize();\\n  }\\n};\\n\\n// goes through all children again and gets bricks in proper order\\nproto.reloadItems = function() {\\n  // collection of item elements\\n  this.items = this._itemize( this.element.children );\\n};\\n\\n\\n/**\\n * turn elements into Outlayer.Items to be used in layout\\n * @param {Array or NodeList or HTMLElement} elems\\n * @returns {Array} items - collection of new Outlayer Items\\n */\\nproto._itemize = function( elems ) {\\n\\n  var itemElems = this._filterFindItemElements( elems );\\n  var Item = this.constructor.Item;\\n\\n  // create new Outlayer Items for collection\\n  var items = [];\\n  for ( var i=0; i < itemElems.length; i++ ) {\\n    var elem = itemElems[i];\\n    var item = new Item( elem, this );\\n    items.push( item );\\n  }\\n\\n  return items;\\n};\\n\\n/**\\n * get item elements to be used in layout\\n * @param {Array or NodeList or HTMLElement} elems\\n * @returns {Array} items - item elements\\n */\\nproto._filterFindItemElements = function( elems ) {\\n  return utils.filterFindElements( elems, this.options.itemSelector );\\n};\\n\\n/**\\n * getter method for getting item elements\\n * @returns {Array} elems - collection of item elements\\n */\\nproto.getItemElements = function() {\\n  return this.items.map( function( item ) {\\n    return item.element;\\n  });\\n};\\n\\n// ----- init & layout ----- //\\n\\n/**\\n * lays out all items\\n */\\nproto.layout = function() {\\n  this._resetLayout();\\n  this._manageStamps();\\n\\n  // don't animate first layout\\n  var layoutInstant = this._getOption('layoutInstant');\\n  var isInstant = layoutInstant !== undefined ?\\n    layoutInstant : !this._isLayoutInited;\\n  this.layoutItems( this.items, isInstant );\\n\\n  // flag for initalized\\n  this._isLayoutInited = true;\\n};\\n\\n// _init is alias for layout\\nproto._init = proto.layout;\\n\\n/**\\n * logic before any new layout\\n */\\nproto._resetLayout = function() {\\n  this.getSize();\\n};\\n\\n\\nproto.getSize = function() {\\n  this.size = getSize( this.element );\\n};\\n\\n/**\\n * get measurement from option, for columnWidth, rowHeight, gutter\\n * if option is String -> get element from selector string, & get size of element\\n * if option is Element -> get size of element\\n * else use option as a number\\n *\\n * @param {String} measurement\\n * @param {String} size - width or height\\n * @private\\n */\\nproto._getMeasurement = function( measurement, size ) {\\n  var option = this.options[ measurement ];\\n  var elem;\\n  if ( !option ) {\\n    // default to 0\\n    this[ measurement ] = 0;\\n  } else {\\n    // use option as an element\\n    if ( typeof option == 'string' ) {\\n      elem = this.element.querySelector( option );\\n    } else if ( option instanceof HTMLElement ) {\\n      elem = option;\\n    }\\n    // use size of element, if element\\n    this[ measurement ] = elem ? getSize( elem )[ size ] : option;\\n  }\\n};\\n\\n/**\\n * layout a collection of item elements\\n * @api public\\n */\\nproto.layoutItems = function( items, isInstant ) {\\n  items = this._getItemsForLayout( items );\\n\\n  this._layoutItems( items, isInstant );\\n\\n  this._postLayout();\\n};\\n\\n/**\\n * get the items to be laid out\\n * you may want to skip over some items\\n * @param {Array} items\\n * @returns {Array} items\\n */\\nproto._getItemsForLayout = function( items ) {\\n  return items.filter( function( item ) {\\n    return !item.isIgnored;\\n  });\\n};\\n\\n/**\\n * layout items\\n * @param {Array} items\\n * @param {Boolean} isInstant\\n */\\nproto._layoutItems = function( items, isInstant ) {\\n  this._emitCompleteOnItems( 'layout', items );\\n\\n  if ( !items || !items.length ) {\\n    // no items, emit event with empty array\\n    return;\\n  }\\n\\n  var queue = [];\\n\\n  items.forEach( function( item ) {\\n    // get x/y object from method\\n    var position = this._getItemLayoutPosition( item );\\n    // enqueue\\n    position.item = item;\\n    position.isInstant = isInstant || item.isLayoutInstant;\\n    queue.push( position );\\n  }, this );\\n\\n  this._processLayoutQueue( queue );\\n};\\n\\n/**\\n * get item layout position\\n * @param {Outlayer.Item} item\\n * @returns {Object} x and y position\\n */\\nproto._getItemLayoutPosition = function( /* item */ ) {\\n  return {\\n    x: 0,\\n    y: 0\\n  };\\n};\\n\\n/**\\n * iterate over array and position each item\\n * Reason being - separating this logic prevents 'layout invalidation'\\n * thx @paul_irish\\n * @param {Array} queue\\n */\\nproto._processLayoutQueue = function( queue ) {\\n  this.updateStagger();\\n  queue.forEach( function( obj, i ) {\\n    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );\\n  }, this );\\n};\\n\\n// set stagger from option in milliseconds number\\nproto.updateStagger = function() {\\n  var stagger = this.options.stagger;\\n  if ( stagger === null || stagger === undefined ) {\\n    this.stagger = 0;\\n    return;\\n  }\\n  this.stagger = getMilliseconds( stagger );\\n  return this.stagger;\\n};\\n\\n/**\\n * Sets position of item in DOM\\n * @param {Outlayer.Item} item\\n * @param {Number} x - horizontal position\\n * @param {Number} y - vertical position\\n * @param {Boolean} isInstant - disables transitions\\n */\\nproto._positionItem = function( item, x, y, isInstant, i ) {\\n  if ( isInstant ) {\\n    // if not transition, just set CSS\\n    item.goTo( x, y );\\n  } else {\\n    item.stagger( i * this.stagger );\\n    item.moveTo( x, y );\\n  }\\n};\\n\\n/**\\n * Any logic you want to do after each layout,\\n * i.e. size the container\\n */\\nproto._postLayout = function() {\\n  this.resizeContainer();\\n};\\n\\nproto.resizeContainer = function() {\\n  var isResizingContainer = this._getOption('resizeContainer');\\n  if ( !isResizingContainer ) {\\n    return;\\n  }\\n  var size = this._getContainerSize();\\n  if ( size ) {\\n    this._setContainerMeasure( size.width, true );\\n    this._setContainerMeasure( size.height, false );\\n  }\\n};\\n\\n/**\\n * Sets width or height of container if returned\\n * @returns {Object} size\\n *   @param {Number} width\\n *   @param {Number} height\\n */\\nproto._getContainerSize = noop;\\n\\n/**\\n * @param {Number} measure - size of width or height\\n * @param {Boolean} isWidth\\n */\\nproto._setContainerMeasure = function( measure, isWidth ) {\\n  if ( measure === undefined ) {\\n    return;\\n  }\\n\\n  var elemSize = this.size;\\n  // add padding and border width if border box\\n  if ( elemSize.isBorderBox ) {\\n    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\\n      elemSize.borderLeftWidth + elemSize.borderRightWidth :\\n      elemSize.paddingBottom + elemSize.paddingTop +\\n      elemSize.borderTopWidth + elemSize.borderBottomWidth;\\n  }\\n\\n  measure = Math.max( measure, 0 );\\n  this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';\\n};\\n\\n/**\\n * emit eventComplete on a collection of items events\\n * @param {String} eventName\\n * @param {Array} items - Outlayer.Items\\n */\\nproto._emitCompleteOnItems = function( eventName, items ) {\\n  var _this = this;\\n  function onComplete() {\\n    _this.dispatchEvent( eventName + 'Complete', null, [ items ] );\\n  }\\n\\n  var count = items.length;\\n  if ( !items || !count ) {\\n    onComplete();\\n    return;\\n  }\\n\\n  var doneCount = 0;\\n  function tick() {\\n    doneCount++;\\n    if ( doneCount == count ) {\\n      onComplete();\\n    }\\n  }\\n\\n  // bind callback\\n  items.forEach( function( item ) {\\n    item.once( eventName, tick );\\n  });\\n};\\n\\n/**\\n * emits events via EvEmitter and jQuery events\\n * @param {String} type - name of event\\n * @param {Event} event - original event\\n * @param {Array} args - extra arguments\\n */\\nproto.dispatchEvent = function( type, event, args ) {\\n  // add original event to arguments\\n  var emitArgs = event ? [ event ].concat( args ) : args;\\n  this.emitEvent( type, emitArgs );\\n\\n  if ( jQuery ) {\\n    // set this.$element\\n    this.$element = this.$element || jQuery( this.element );\\n    if ( event ) {\\n      // create jQuery event\\n      var $event = jQuery.Event( event );\\n      $event.type = type;\\n      this.$element.trigger( $event, args );\\n    } else {\\n      // just trigger with type if no event available\\n      this.$element.trigger( type, args );\\n    }\\n  }\\n};\\n\\n// -------------------------- ignore & stamps -------------------------- //\\n\\n\\n/**\\n * keep item in collection, but do not lay it out\\n * ignored items do not get skipped in layout\\n * @param {Element} elem\\n */\\nproto.ignore = function( elem ) {\\n  var item = this.getItem( elem );\\n  if ( item ) {\\n    item.isIgnored = true;\\n  }\\n};\\n\\n/**\\n * return item to layout collection\\n * @param {Element} elem\\n */\\nproto.unignore = function( elem ) {\\n  var item = this.getItem( elem );\\n  if ( item ) {\\n    delete item.isIgnored;\\n  }\\n};\\n\\n/**\\n * adds elements to stamps\\n * @param {NodeList, Array, Element, or String} elems\\n */\\nproto.stamp = function( elems ) {\\n  elems = this._find( elems );\\n  if ( !elems ) {\\n    return;\\n  }\\n\\n  this.stamps = this.stamps.concat( elems );\\n  // ignore\\n  elems.forEach( this.ignore, this );\\n};\\n\\n/**\\n * removes elements to stamps\\n * @param {NodeList, Array, or Element} elems\\n */\\nproto.unstamp = function( elems ) {\\n  elems = this._find( elems );\\n  if ( !elems ){\\n    return;\\n  }\\n\\n  elems.forEach( function( elem ) {\\n    // filter out removed stamp elements\\n    utils.removeFrom( this.stamps, elem );\\n    this.unignore( elem );\\n  }, this );\\n};\\n\\n/**\\n * finds child elements\\n * @param {NodeList, Array, Element, or String} elems\\n * @returns {Array} elems\\n */\\nproto._find = function( elems ) {\\n  if ( !elems ) {\\n    return;\\n  }\\n  // if string, use argument as selector string\\n  if ( typeof elems == 'string' ) {\\n    elems = this.element.querySelectorAll( elems );\\n  }\\n  elems = utils.makeArray( elems );\\n  return elems;\\n};\\n\\nproto._manageStamps = function() {\\n  if ( !this.stamps || !this.stamps.length ) {\\n    return;\\n  }\\n\\n  this._getBoundingRect();\\n\\n  this.stamps.forEach( this._manageStamp, this );\\n};\\n\\n// update boundingLeft / Top\\nproto._getBoundingRect = function() {\\n  // get bounding rect for container element\\n  var boundingRect = this.element.getBoundingClientRect();\\n  var size = this.size;\\n  this._boundingRect = {\\n    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\\n    top: boundingRect.top + size.paddingTop + size.borderTopWidth,\\n    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),\\n    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )\\n  };\\n};\\n\\n/**\\n * @param {Element} stamp\\n**/\\nproto._manageStamp = noop;\\n\\n/**\\n * get x/y position of element relative to container element\\n * @param {Element} elem\\n * @returns {Object} offset - has left, top, right, bottom\\n */\\nproto._getElementOffset = function( elem ) {\\n  var boundingRect = elem.getBoundingClientRect();\\n  var thisRect = this._boundingRect;\\n  var size = getSize( elem );\\n  var offset = {\\n    left: boundingRect.left - thisRect.left - size.marginLeft,\\n    top: boundingRect.top - thisRect.top - size.marginTop,\\n    right: thisRect.right - boundingRect.right - size.marginRight,\\n    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\\n  };\\n  return offset;\\n};\\n\\n// -------------------------- resize -------------------------- //\\n\\n// enable event handlers for listeners\\n// i.e. resize -> onresize\\nproto.handleEvent = utils.handleEvent;\\n\\n/**\\n * Bind layout to window resizing\\n */\\nproto.bindResize = function() {\\n  window.addEventListener( 'resize', this );\\n  this.isResizeBound = true;\\n};\\n\\n/**\\n * Unbind layout to window resizing\\n */\\nproto.unbindResize = function() {\\n  window.removeEventListener( 'resize', this );\\n  this.isResizeBound = false;\\n};\\n\\nproto.onresize = function() {\\n  this.resize();\\n};\\n\\nutils.debounceMethod( Outlayer, 'onresize', 100 );\\n\\nproto.resize = function() {\\n  // don't trigger if size did not change\\n  // or if resize was unbound. See #9\\n  if ( !this.isResizeBound || !this.needsResizeLayout() ) {\\n    return;\\n  }\\n\\n  this.layout();\\n};\\n\\n/**\\n * check if layout is needed post layout\\n * @returns Boolean\\n */\\nproto.needsResizeLayout = function() {\\n  var size = getSize( this.element );\\n  // check that this.size and size are there\\n  // IE8 triggers resize on body size change, so they might not be\\n  var hasSizes = this.size && size;\\n  return hasSizes && size.innerWidth !== this.size.innerWidth;\\n};\\n\\n// -------------------------- methods -------------------------- //\\n\\n/**\\n * add items to Outlayer instance\\n * @param {Array or NodeList or Element} elems\\n * @returns {Array} items - Outlayer.Items\\n**/\\nproto.addItems = function( elems ) {\\n  var items = this._itemize( elems );\\n  // add items to collection\\n  if ( items.length ) {\\n    this.items = this.items.concat( items );\\n  }\\n  return items;\\n};\\n\\n/**\\n * Layout newly-appended item elements\\n * @param {Array or NodeList or Element} elems\\n */\\nproto.appended = function( elems ) {\\n  var items = this.addItems( elems );\\n  if ( !items.length ) {\\n    return;\\n  }\\n  // layout and reveal just the new items\\n  this.layoutItems( items, true );\\n  this.reveal( items );\\n};\\n\\n/**\\n * Layout prepended elements\\n * @param {Array or NodeList or Element} elems\\n */\\nproto.prepended = function( elems ) {\\n  var items = this._itemize( elems );\\n  if ( !items.length ) {\\n    return;\\n  }\\n  // add items to beginning of collection\\n  var previousItems = this.items.slice(0);\\n  this.items = items.concat( previousItems );\\n  // start new layout\\n  this._resetLayout();\\n  this._manageStamps();\\n  // layout new stuff without transition\\n  this.layoutItems( items, true );\\n  this.reveal( items );\\n  // layout previous items\\n  this.layoutItems( previousItems );\\n};\\n\\n/**\\n * reveal a collection of items\\n * @param {Array of Outlayer.Items} items\\n */\\nproto.reveal = function( items ) {\\n  this._emitCompleteOnItems( 'reveal', items );\\n  if ( !items || !items.length ) {\\n    return;\\n  }\\n  var stagger = this.updateStagger();\\n  items.forEach( function( item, i ) {\\n    item.stagger( i * stagger );\\n    item.reveal();\\n  });\\n};\\n\\n/**\\n * hide a collection of items\\n * @param {Array of Outlayer.Items} items\\n */\\nproto.hide = function( items ) {\\n  this._emitCompleteOnItems( 'hide', items );\\n  if ( !items || !items.length ) {\\n    return;\\n  }\\n  var stagger = this.updateStagger();\\n  items.forEach( function( item, i ) {\\n    item.stagger( i * stagger );\\n    item.hide();\\n  });\\n};\\n\\n/**\\n * reveal item elements\\n * @param {Array}, {Element}, {NodeList} items\\n */\\nproto.revealItemElements = function( elems ) {\\n  var items = this.getItems( elems );\\n  this.reveal( items );\\n};\\n\\n/**\\n * hide item elements\\n * @param {Array}, {Element}, {NodeList} items\\n */\\nproto.hideItemElements = function( elems ) {\\n  var items = this.getItems( elems );\\n  this.hide( items );\\n};\\n\\n/**\\n * get Outlayer.Item, given an Element\\n * @param {Element} elem\\n * @param {Function} callback\\n * @returns {Outlayer.Item} item\\n */\\nproto.getItem = function( elem ) {\\n  // loop through items to get the one that matches\\n  for ( var i=0; i < this.items.length; i++ ) {\\n    var item = this.items[i];\\n    if ( item.element == elem ) {\\n      // return item\\n      return item;\\n    }\\n  }\\n};\\n\\n/**\\n * get collection of Outlayer.Items, given Elements\\n * @param {Array} elems\\n * @returns {Array} items - Outlayer.Items\\n */\\nproto.getItems = function( elems ) {\\n  elems = utils.makeArray( elems );\\n  var items = [];\\n  elems.forEach( function( elem ) {\\n    var item = this.getItem( elem );\\n    if ( item ) {\\n      items.push( item );\\n    }\\n  }, this );\\n\\n  return items;\\n};\\n\\n/**\\n * remove element(s) from instance and DOM\\n * @param {Array or NodeList or Element} elems\\n */\\nproto.remove = function( elems ) {\\n  var removeItems = this.getItems( elems );\\n\\n  this._emitCompleteOnItems( 'remove', removeItems );\\n\\n  // bail if no items to remove\\n  if ( !removeItems || !removeItems.length ) {\\n    return;\\n  }\\n\\n  removeItems.forEach( function( item ) {\\n    item.remove();\\n    // remove item from collection\\n    utils.removeFrom( this.items, item );\\n  }, this );\\n};\\n\\n// ----- destroy ----- //\\n\\n// remove and disable Outlayer instance\\nproto.destroy = function() {\\n  // clean up dynamic styles\\n  var style = this.element.style;\\n  style.height = '';\\n  style.position = '';\\n  style.width = '';\\n  // destroy items\\n  this.items.forEach( function( item ) {\\n    item.destroy();\\n  });\\n\\n  this.unbindResize();\\n\\n  var id = this.element.outlayerGUID;\\n  delete instances[ id ]; // remove reference to instance by id\\n  delete this.element.outlayerGUID;\\n  // remove data for jQuery\\n  if ( jQuery ) {\\n    jQuery.removeData( this.element, this.constructor.namespace );\\n  }\\n\\n};\\n\\n// -------------------------- data -------------------------- //\\n\\n/**\\n * get Outlayer instance from element\\n * @param {Element} elem\\n * @returns {Outlayer}\\n */\\nOutlayer.data = function( elem ) {\\n  elem = utils.getQueryElement( elem );\\n  var id = elem && elem.outlayerGUID;\\n  return id && instances[ id ];\\n};\\n\\n\\n// -------------------------- create Outlayer class -------------------------- //\\n\\n/**\\n * create a layout class\\n * @param {String} namespace\\n */\\nOutlayer.create = function( namespace, options ) {\\n  // sub-class Outlayer\\n  var Layout = subclass( Outlayer );\\n  // apply new options and compatOptions\\n  Layout.defaults = utils.extend( {}, Outlayer.defaults );\\n  utils.extend( Layout.defaults, options );\\n  Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions  );\\n\\n  Layout.namespace = namespace;\\n\\n  Layout.data = Outlayer.data;\\n\\n  // sub-class Item\\n  Layout.Item = subclass( Item );\\n\\n  // -------------------------- declarative -------------------------- //\\n\\n  utils.htmlInit( Layout, namespace );\\n\\n  // -------------------------- jQuery bridge -------------------------- //\\n\\n  // make into jQuery plugin\\n  if ( jQuery && jQuery.bridget ) {\\n    jQuery.bridget( namespace, Layout );\\n  }\\n\\n  return Layout;\\n};\\n\\nfunction subclass( Parent ) {\\n  function SubClass() {\\n    Parent.apply( this, arguments );\\n  }\\n\\n  SubClass.prototype = Object.create( Parent.prototype );\\n  SubClass.prototype.constructor = SubClass;\\n\\n  return SubClass;\\n}\\n\\n// ----- helpers ----- //\\n\\n// how many milliseconds are in each unit\\nvar msUnits = {\\n  ms: 1,\\n  s: 1000\\n};\\n\\n// munge time-like parameter into millisecond number\\n// '0.4s' -> 40\\nfunction getMilliseconds( time ) {\\n  if ( typeof time == 'number' ) {\\n    return time;\\n  }\\n  var matches = time.match( /(^\\\\d*\\\\.?\\\\d*)(\\\\w*)/ );\\n  var num = matches && matches[1];\\n  var unit = matches && matches[2];\\n  if ( !num.length ) {\\n    return 0;\\n  }\\n  num = parseFloat( num );\\n  var mult = msUnits[ unit ] || 1;\\n  return num * mult;\\n}\\n\\n// ----- fin ----- //\\n\\n// back in global\\nOutlayer.Item = Item;\\n\\nreturn Outlayer;\\n\\n}));\\n\\n/*!\\n * Masonry v4.2.2\\n * Cascading grid layout library\\n * https://masonry.desandro.com\\n * MIT License\\n * by David DeSandro\\n */\\n\\n( function( window, factory ) {\\n  // universal module definition\\n  /* jshint strict: false */ /*globals define, module, require */\\n  if ( true ) {\\n    // AMD\\n    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\\n        __WEBPACK_LOCAL_MODULE_6__,\\n        __WEBPACK_LOCAL_MODULE_2__\\n      ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\\n\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\\n\\t\\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\\n\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n  } else {}\\n\\n}( window, function factory( Outlayer, getSize ) {\\n\\n\\n\\n// -------------------------- masonryDefinition -------------------------- //\\n\\n  // create an Outlayer layout class\\n  var Masonry = Outlayer.create('masonry');\\n  // isFitWidth -> fitWidth\\n  Masonry.compatOptions.fitWidth = 'isFitWidth';\\n\\n  var proto = Masonry.prototype;\\n\\n  proto._resetLayout = function() {\\n    this.getSize();\\n    this._getMeasurement( 'columnWidth', 'outerWidth' );\\n    this._getMeasurement( 'gutter', 'outerWidth' );\\n    this.measureColumns();\\n\\n    // reset column Y\\n    this.colYs = [];\\n    for ( var i=0; i < this.cols; i++ ) {\\n      this.colYs.push( 0 );\\n    }\\n\\n    this.maxY = 0;\\n    this.horizontalColIndex = 0;\\n  };\\n\\n  proto.measureColumns = function() {\\n    this.getContainerWidth();\\n    // if columnWidth is 0, default to outerWidth of first item\\n    if ( !this.columnWidth ) {\\n      var firstItem = this.items[0];\\n      var firstItemElem = firstItem && firstItem.element;\\n      // columnWidth fall back to item of first element\\n      this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||\\n        // if first elem has no width, default to size of container\\n        this.containerWidth;\\n    }\\n\\n    var columnWidth = this.columnWidth += this.gutter;\\n\\n    // calculate columns\\n    var containerWidth = this.containerWidth + this.gutter;\\n    var cols = containerWidth / columnWidth;\\n    // fix rounding errors, typically with gutters\\n    var excess = columnWidth - containerWidth % columnWidth;\\n    // if overshoot is less than a pixel, round up, otherwise floor it\\n    var mathMethod = excess && excess < 1 ? 'round' : 'floor';\\n    cols = Math[ mathMethod ]( cols );\\n    this.cols = Math.max( cols, 1 );\\n  };\\n\\n  proto.getContainerWidth = function() {\\n    // container is parent if fit width\\n    var isFitWidth = this._getOption('fitWidth');\\n    var container = isFitWidth ? this.element.parentNode : this.element;\\n    // check that this.size and size are there\\n    // IE8 triggers resize on body size change, so they might not be\\n    var size = getSize( container );\\n    this.containerWidth = size && size.innerWidth;\\n  };\\n\\n  proto._getItemLayoutPosition = function( item ) {\\n    item.getSize();\\n    // how many columns does this brick span\\n    var remainder = item.size.outerWidth % this.columnWidth;\\n    var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\\n    // round if off by 1 pixel, otherwise use ceil\\n    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );\\n    colSpan = Math.min( colSpan, this.cols );\\n    // use horizontal or top column position\\n    var colPosMethod = this.options.horizontalOrder ?\\n      '_getHorizontalColPosition' : '_getTopColPosition';\\n    var colPosition = this[ colPosMethod ]( colSpan, item );\\n    // position the brick\\n    var position = {\\n      x: this.columnWidth * colPosition.col,\\n      y: colPosition.y\\n    };\\n    // apply setHeight to necessary columns\\n    var setHeight = colPosition.y + item.size.outerHeight;\\n    var setMax = colSpan + colPosition.col;\\n    for ( var i = colPosition.col; i < setMax; i++ ) {\\n      this.colYs[i] = setHeight;\\n    }\\n\\n    return position;\\n  };\\n\\n  proto._getTopColPosition = function( colSpan ) {\\n    var colGroup = this._getTopColGroup( colSpan );\\n    // get the minimum Y value from the columns\\n    var minimumY = Math.min.apply( Math, colGroup );\\n\\n    return {\\n      col: colGroup.indexOf( minimumY ),\\n      y: minimumY,\\n    };\\n  };\\n\\n  /**\\n   * @param {Number} colSpan - number of columns the element spans\\n   * @returns {Array} colGroup\\n   */\\n  proto._getTopColGroup = function( colSpan ) {\\n    if ( colSpan < 2 ) {\\n      // if brick spans only one column, use all the column Ys\\n      return this.colYs;\\n    }\\n\\n    var colGroup = [];\\n    // how many different places could this brick fit horizontally\\n    var groupCount = this.cols + 1 - colSpan;\\n    // for each group potential horizontal position\\n    for ( var i = 0; i < groupCount; i++ ) {\\n      colGroup[i] = this._getColGroupY( i, colSpan );\\n    }\\n    return colGroup;\\n  };\\n\\n  proto._getColGroupY = function( col, colSpan ) {\\n    if ( colSpan < 2 ) {\\n      return this.colYs[ col ];\\n    }\\n    // make an array of colY values for that one group\\n    var groupColYs = this.colYs.slice( col, col + colSpan );\\n    // and get the max value of the array\\n    return Math.max.apply( Math, groupColYs );\\n  };\\n\\n  // get column position based on horizontal index. #873\\n  proto._getHorizontalColPosition = function( colSpan, item ) {\\n    var col = this.horizontalColIndex % this.cols;\\n    var isOver = colSpan > 1 && col + colSpan > this.cols;\\n    // shift to next row if item can't fit on current row\\n    col = isOver ? 0 : col;\\n    // don't let zero-size items take up space\\n    var hasSize = item.size.outerWidth && item.size.outerHeight;\\n    this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;\\n\\n    return {\\n      col: col,\\n      y: this._getColGroupY( col, colSpan ),\\n    };\\n  };\\n\\n  proto._manageStamp = function( stamp ) {\\n    var stampSize = getSize( stamp );\\n    var offset = this._getElementOffset( stamp );\\n    // get the columns that this stamp affects\\n    var isOriginLeft = this._getOption('originLeft');\\n    var firstX = isOriginLeft ? offset.left : offset.right;\\n    var lastX = firstX + stampSize.outerWidth;\\n    var firstCol = Math.floor( firstX / this.columnWidth );\\n    firstCol = Math.max( 0, firstCol );\\n    var lastCol = Math.floor( lastX / this.columnWidth );\\n    // lastCol should not go over if multiple of columnWidth #425\\n    lastCol -= lastX % this.columnWidth ? 0 : 1;\\n    lastCol = Math.min( this.cols - 1, lastCol );\\n    // set colYs to bottom of the stamp\\n\\n    var isOriginTop = this._getOption('originTop');\\n    var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +\\n      stampSize.outerHeight;\\n    for ( var i = firstCol; i <= lastCol; i++ ) {\\n      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );\\n    }\\n  };\\n\\n  proto._getContainerSize = function() {\\n    this.maxY = Math.max.apply( Math, this.colYs );\\n    var size = {\\n      height: this.maxY\\n    };\\n\\n    if ( this._getOption('fitWidth') ) {\\n      size.width = this._getContainerFitWidth();\\n    }\\n\\n    return size;\\n  };\\n\\n  proto._getContainerFitWidth = function() {\\n    var unusedCols = 0;\\n    // count unused columns\\n    var i = this.cols;\\n    while ( --i ) {\\n      if ( this.colYs[i] !== 0 ) {\\n        break;\\n      }\\n      unusedCols++;\\n    }\\n    // fit container to columns that have been used\\n    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;\\n  };\\n\\n  proto.needsResizeLayout = function() {\\n    var previousWidth = this.containerWidth;\\n    this.getContainerWidth();\\n    return previousWidth != this.containerWidth;\\n  };\\n\\n  return Masonry;\\n\\n}));\\n\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/masonry-layout/dist/masonry.pkgd.js?\");\n\n/***/ }),\n\n/***/ \"jquery\":\n/*!*************************!*\\\n  !*** external \"jQuery\" ***!\n  \\*************************/\n/***/ (function(module) {\n\n\"use strict\";\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module can't be inlined because the eval devtool is used.\n/******/ \tvar __webpack_exports__ = __webpack_require__(\"./libs/masonry/masonry.js\");\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"
  },
  {
    "path": "public/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.css",
    "content": "/*\n * Container style\n */\n.ps {\n  overflow: hidden !important;\n  overflow-anchor: none;\n  -ms-overflow-style: none;\n  touch-action: auto;\n  -ms-touch-action: auto;\n}\n\n/*\n * Scrollbar rail styles\n */\n.ps__rail-x {\n  display: none;\n  opacity: 0;\n  transition: background-color 0.2s linear, opacity 0.2s linear;\n  -webkit-transition: background-color 0.2s linear, opacity 0.2s linear;\n  height: 15px;\n  /* there must be 'bottom' or 'top' for ps__rail-x */\n  bottom: 0px;\n  /* please don't change 'position' */\n  position: absolute;\n}\n\n.ps__rail-y {\n  display: none;\n  opacity: 0;\n  transition: background-color 0.2s linear, opacity 0.2s linear;\n  -webkit-transition: background-color 0.2s linear, opacity 0.2s linear;\n  width: 15px;\n  /* there must be 'right' or 'left' for ps__rail-y */\n  right: 0;\n  /* please don't change 'position' */\n  position: absolute;\n}\n\n.ps--active-x > .ps__rail-x,\n.ps--active-y > .ps__rail-y {\n  display: block;\n  background-color: transparent;\n}\n\n.ps:hover > .ps__rail-x,\n.ps:hover > .ps__rail-y,\n.ps--focus > .ps__rail-x,\n.ps--focus > .ps__rail-y,\n.ps--scrolling-x > .ps__rail-x,\n.ps--scrolling-y > .ps__rail-y {\n  opacity: 0.6;\n}\n\n.ps .ps__rail-x:hover,\n.ps .ps__rail-y:hover,\n.ps .ps__rail-x:focus,\n.ps .ps__rail-y:focus,\n.ps .ps__rail-x.ps--clicking,\n.ps .ps__rail-y.ps--clicking {\n  background-color: #eee;\n  opacity: 0.9;\n}\n\n/*\n * Scrollbar thumb styles\n */\n.ps__thumb-x {\n  background-color: #aaa;\n  border-radius: 6px;\n  transition: background-color 0.2s linear, height 0.2s ease-in-out;\n  -webkit-transition: background-color 0.2s linear, height 0.2s ease-in-out;\n  height: 6px;\n  /* there must be 'bottom' for ps__thumb-x */\n  bottom: 2px;\n  /* please don't change 'position' */\n  position: absolute;\n}\n\n.ps__thumb-y {\n  background-color: #aaa;\n  border-radius: 6px;\n  transition: background-color 0.2s linear, width 0.2s ease-in-out;\n  -webkit-transition: background-color 0.2s linear, width 0.2s ease-in-out;\n  width: 6px;\n  /* there must be 'right' for ps__thumb-y */\n  right: 2px;\n  /* please don't change 'position' */\n  position: absolute;\n}\n\n.ps__rail-x:hover > .ps__thumb-x,\n.ps__rail-x:focus > .ps__thumb-x,\n.ps__rail-x.ps--clicking .ps__thumb-x {\n  background-color: #999;\n  height: 11px;\n}\n\n.ps__rail-y:hover > .ps__thumb-y,\n.ps__rail-y:focus > .ps__thumb-y,\n.ps__rail-y.ps--clicking .ps__thumb-y {\n  background-color: #999;\n  width: 11px;\n}\n\n/* MS supports */\n@supports (-ms-overflow-style: none) {\n  .ps {\n    overflow: auto !important;\n  }\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .ps {\n    overflow: auto !important;\n  }\n}\n.ps {\n  position: relative;\n}\n\n.ps__rail-x {\n  height: 0.25rem;\n}\n\n.ps__rail-y {\n  width: 0.25rem;\n}\n\n.ps__rail-x,\n.ps__rail-y,\n.ps__thumb-x,\n.ps__thumb-y {\n  border-radius: 10rem;\n}\n\n.ps__rail-x:hover,\n.ps__rail-x:focus,\n.ps__rail-x.ps--clicking,\n.ps__rail-x:hover > .ps__thumb-x,\n.ps__rail-x:focus > .ps__thumb-x,\n.ps__rail-x.ps--clicking > .ps__thumb-x {\n  height: 0.375rem;\n}\n\n.ps__rail-y:hover,\n.ps__rail-y:focus,\n.ps__rail-y.ps--clicking,\n.ps__rail-y:hover > .ps__thumb-y,\n.ps__rail-y:focus > .ps__thumb-y,\n.ps__rail-y.ps--clicking > .ps__thumb-y {\n  width: 0.375rem;\n}\n\n.ps__thumb-x {\n  height: 0.25rem;\n  bottom: 0;\n}\n\n.ps__thumb-y {\n  width: 0.25rem;\n  right: 0;\n}\n\n.light-style .ps__thumb-x,\n.light-style .ps__thumb-y {\n  background-color: rgba(67, 89, 113, 0.4);\n}\n.light-style .ps__rail-x:hover,\n.light-style .ps__rail-y:hover,\n.light-style .ps__rail-x:focus,\n.light-style .ps__rail-y:focus,\n.light-style .ps__rail-x.ps--clicking,\n.light-style .ps__rail-y.ps--clicking {\n  background-color: rgba(67, 89, 113, 0.2);\n}\n.light-style .ps__rail-x:hover > .ps__thumb-x,\n.light-style .ps__rail-y:hover > .ps__thumb-y,\n.light-style .ps__rail-x:focus > .ps__thumb-x,\n.light-style .ps__rail-y:focus > .ps__thumb-y,\n.light-style .ps__rail-x.ps--clicking > .ps__thumb-x,\n.light-style .ps__rail-y.ps--clicking > .ps__thumb-y {\n  background-color: rgba(67, 89, 113, 0.7);\n}\n.light-style .ps-inverted .ps__rail-x:hover,\n.light-style .ps-inverted .ps__rail-y:hover,\n.light-style .ps-inverted .ps__rail-x:focus,\n.light-style .ps-inverted .ps__rail-y:focus,\n.light-style .ps-inverted .ps__rail-x.ps--clicking,\n.light-style .ps-inverted .ps__rail-y.ps--clicking {\n  background-color: rgba(255, 255, 255, 0.5);\n}\n.light-style .ps-inverted .ps__thumb-x,\n.light-style .ps-inverted .ps__thumb-y {\n  background-color: rgba(255, 255, 255, 0.7);\n}\n.light-style .ps-inverted .ps__rail-x:hover > .ps__thumb-x,\n.light-style .ps-inverted .ps__rail-y:hover > .ps__thumb-y,\n.light-style .ps-inverted .ps__rail-x:focus > .ps__thumb-x,\n.light-style .ps-inverted .ps__rail-y:focus > .ps__thumb-y,\n.light-style .ps-inverted .ps__rail-x.ps--clicking > .ps__thumb-x,\n.light-style .ps-inverted .ps__rail-y.ps--clicking > .ps__thumb-y {\n  background-color: #fff;\n}\n\n@supports (-moz-appearance: none) {\n  #both-scrollbars-example {\n    max-width: 1080px;\n    margin: 0 auto;\n    padding-left: 0;\n    padding-right: 0;\n  }\n}\n"
  },
  {
    "path": "public/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.js",
    "content": "/*\n * ATTENTION: The \"eval\" devtool has been used (maybe by default in mode: \"development\").\n * This devtool is neither made for production nor for readable output files.\n * It uses \"eval()\" calls to create a separate source file in the browser devtools.\n * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)\n * or disable the default devtool with \"devtool: false\".\n * If you are looking for production-ready output files, see mode: \"production\" (https://webpack.js.org/configuration/mode/).\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./libs/perfect-scrollbar/perfect-scrollbar.js\":\n/*!*****************************************************!*\\\n  !*** ./libs/perfect-scrollbar/perfect-scrollbar.js ***!\n  \\*****************************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   PerfectScrollbar: function() { return /* reexport default from dynamic */ perfect_scrollbar_dist_perfect_scrollbar__WEBPACK_IMPORTED_MODULE_0___default.a; }\\n/* harmony export */ });\\n/* harmony import */ var perfect_scrollbar_dist_perfect_scrollbar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! perfect-scrollbar/dist/perfect-scrollbar */ \\\"./node_modules/perfect-scrollbar/dist/perfect-scrollbar.js\\\");\\n/* harmony import */ var perfect_scrollbar_dist_perfect_scrollbar__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(perfect_scrollbar_dist_perfect_scrollbar__WEBPACK_IMPORTED_MODULE_0__);\\n\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./libs/perfect-scrollbar/perfect-scrollbar.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/perfect-scrollbar/dist/perfect-scrollbar.js\":\n/*!******************************************************************!*\\\n  !*** ./node_modules/perfect-scrollbar/dist/perfect-scrollbar.js ***!\n  \\******************************************************************/\n/***/ (function(module) {\n\neval(\"/*!\\n * perfect-scrollbar v1.5.3\\n * Copyright 2021 Hyunje Jun, MDBootstrap and Contributors\\n * Licensed under MIT\\n */\\n\\n(function (global, factory) {\\n   true ? module.exports = factory() :\\n  0;\\n}(this, (function () { 'use strict';\\n\\n  function get(element) {\\n    return getComputedStyle(element);\\n  }\\n\\n  function set(element, obj) {\\n    for (var key in obj) {\\n      var val = obj[key];\\n      if (typeof val === 'number') {\\n        val = val + \\\"px\\\";\\n      }\\n      element.style[key] = val;\\n    }\\n    return element;\\n  }\\n\\n  function div(className) {\\n    var div = document.createElement('div');\\n    div.className = className;\\n    return div;\\n  }\\n\\n  var elMatches =\\n    typeof Element !== 'undefined' &&\\n    (Element.prototype.matches ||\\n      Element.prototype.webkitMatchesSelector ||\\n      Element.prototype.mozMatchesSelector ||\\n      Element.prototype.msMatchesSelector);\\n\\n  function matches(element, query) {\\n    if (!elMatches) {\\n      throw new Error('No element matching method supported');\\n    }\\n\\n    return elMatches.call(element, query);\\n  }\\n\\n  function remove(element) {\\n    if (element.remove) {\\n      element.remove();\\n    } else {\\n      if (element.parentNode) {\\n        element.parentNode.removeChild(element);\\n      }\\n    }\\n  }\\n\\n  function queryChildren(element, selector) {\\n    return Array.prototype.filter.call(element.children, function (child) { return matches(child, selector); }\\n    );\\n  }\\n\\n  var cls = {\\n    main: 'ps',\\n    rtl: 'ps__rtl',\\n    element: {\\n      thumb: function (x) { return (\\\"ps__thumb-\\\" + x); },\\n      rail: function (x) { return (\\\"ps__rail-\\\" + x); },\\n      consuming: 'ps__child--consume',\\n    },\\n    state: {\\n      focus: 'ps--focus',\\n      clicking: 'ps--clicking',\\n      active: function (x) { return (\\\"ps--active-\\\" + x); },\\n      scrolling: function (x) { return (\\\"ps--scrolling-\\\" + x); },\\n    },\\n  };\\n\\n  /*\\n   * Helper methods\\n   */\\n  var scrollingClassTimeout = { x: null, y: null };\\n\\n  function addScrollingClass(i, x) {\\n    var classList = i.element.classList;\\n    var className = cls.state.scrolling(x);\\n\\n    if (classList.contains(className)) {\\n      clearTimeout(scrollingClassTimeout[x]);\\n    } else {\\n      classList.add(className);\\n    }\\n  }\\n\\n  function removeScrollingClass(i, x) {\\n    scrollingClassTimeout[x] = setTimeout(\\n      function () { return i.isAlive && i.element.classList.remove(cls.state.scrolling(x)); },\\n      i.settings.scrollingThreshold\\n    );\\n  }\\n\\n  function setScrollingClassInstantly(i, x) {\\n    addScrollingClass(i, x);\\n    removeScrollingClass(i, x);\\n  }\\n\\n  var EventElement = function EventElement(element) {\\n    this.element = element;\\n    this.handlers = {};\\n  };\\n\\n  var prototypeAccessors = { isEmpty: { configurable: true } };\\n\\n  EventElement.prototype.bind = function bind (eventName, handler) {\\n    if (typeof this.handlers[eventName] === 'undefined') {\\n      this.handlers[eventName] = [];\\n    }\\n    this.handlers[eventName].push(handler);\\n    this.element.addEventListener(eventName, handler, false);\\n  };\\n\\n  EventElement.prototype.unbind = function unbind (eventName, target) {\\n      var this$1 = this;\\n\\n    this.handlers[eventName] = this.handlers[eventName].filter(function (handler) {\\n      if (target && handler !== target) {\\n        return true;\\n      }\\n      this$1.element.removeEventListener(eventName, handler, false);\\n      return false;\\n    });\\n  };\\n\\n  EventElement.prototype.unbindAll = function unbindAll () {\\n    for (var name in this.handlers) {\\n      this.unbind(name);\\n    }\\n  };\\n\\n  prototypeAccessors.isEmpty.get = function () {\\n      var this$1 = this;\\n\\n    return Object.keys(this.handlers).every(\\n      function (key) { return this$1.handlers[key].length === 0; }\\n    );\\n  };\\n\\n  Object.defineProperties( EventElement.prototype, prototypeAccessors );\\n\\n  var EventManager = function EventManager() {\\n    this.eventElements = [];\\n  };\\n\\n  EventManager.prototype.eventElement = function eventElement (element) {\\n    var ee = this.eventElements.filter(function (ee) { return ee.element === element; })[0];\\n    if (!ee) {\\n      ee = new EventElement(element);\\n      this.eventElements.push(ee);\\n    }\\n    return ee;\\n  };\\n\\n  EventManager.prototype.bind = function bind (element, eventName, handler) {\\n    this.eventElement(element).bind(eventName, handler);\\n  };\\n\\n  EventManager.prototype.unbind = function unbind (element, eventName, handler) {\\n    var ee = this.eventElement(element);\\n    ee.unbind(eventName, handler);\\n\\n    if (ee.isEmpty) {\\n      // remove\\n      this.eventElements.splice(this.eventElements.indexOf(ee), 1);\\n    }\\n  };\\n\\n  EventManager.prototype.unbindAll = function unbindAll () {\\n    this.eventElements.forEach(function (e) { return e.unbindAll(); });\\n    this.eventElements = [];\\n  };\\n\\n  EventManager.prototype.once = function once (element, eventName, handler) {\\n    var ee = this.eventElement(element);\\n    var onceHandler = function (evt) {\\n      ee.unbind(eventName, onceHandler);\\n      handler(evt);\\n    };\\n    ee.bind(eventName, onceHandler);\\n  };\\n\\n  function createEvent(name) {\\n    if (typeof window.CustomEvent === 'function') {\\n      return new CustomEvent(name);\\n    } else {\\n      var evt = document.createEvent('CustomEvent');\\n      evt.initCustomEvent(name, false, false, undefined);\\n      return evt;\\n    }\\n  }\\n\\n  function processScrollDiff(\\n    i,\\n    axis,\\n    diff,\\n    useScrollingClass,\\n    forceFireReachEvent\\n  ) {\\n    if ( useScrollingClass === void 0 ) useScrollingClass = true;\\n    if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\\n\\n    var fields;\\n    if (axis === 'top') {\\n      fields = [\\n        'contentHeight',\\n        'containerHeight',\\n        'scrollTop',\\n        'y',\\n        'up',\\n        'down' ];\\n    } else if (axis === 'left') {\\n      fields = [\\n        'contentWidth',\\n        'containerWidth',\\n        'scrollLeft',\\n        'x',\\n        'left',\\n        'right' ];\\n    } else {\\n      throw new Error('A proper axis should be provided');\\n    }\\n\\n    processScrollDiff$1(i, diff, fields, useScrollingClass, forceFireReachEvent);\\n  }\\n\\n  function processScrollDiff$1(\\n    i,\\n    diff,\\n    ref,\\n    useScrollingClass,\\n    forceFireReachEvent\\n  ) {\\n    var contentHeight = ref[0];\\n    var containerHeight = ref[1];\\n    var scrollTop = ref[2];\\n    var y = ref[3];\\n    var up = ref[4];\\n    var down = ref[5];\\n    if ( useScrollingClass === void 0 ) useScrollingClass = true;\\n    if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\\n\\n    var element = i.element;\\n\\n    // reset reach\\n    i.reach[y] = null;\\n\\n    // 1 for subpixel rounding\\n    if (element[scrollTop] < 1) {\\n      i.reach[y] = 'start';\\n    }\\n\\n    // 1 for subpixel rounding\\n    if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\\n      i.reach[y] = 'end';\\n    }\\n\\n    if (diff) {\\n      element.dispatchEvent(createEvent((\\\"ps-scroll-\\\" + y)));\\n\\n      if (diff < 0) {\\n        element.dispatchEvent(createEvent((\\\"ps-scroll-\\\" + up)));\\n      } else if (diff > 0) {\\n        element.dispatchEvent(createEvent((\\\"ps-scroll-\\\" + down)));\\n      }\\n\\n      if (useScrollingClass) {\\n        setScrollingClassInstantly(i, y);\\n      }\\n    }\\n\\n    if (i.reach[y] && (diff || forceFireReachEvent)) {\\n      element.dispatchEvent(createEvent((\\\"ps-\\\" + y + \\\"-reach-\\\" + (i.reach[y]))));\\n    }\\n  }\\n\\n  function toInt(x) {\\n    return parseInt(x, 10) || 0;\\n  }\\n\\n  function isEditable(el) {\\n    return (\\n      matches(el, 'input,[contenteditable]') ||\\n      matches(el, 'select,[contenteditable]') ||\\n      matches(el, 'textarea,[contenteditable]') ||\\n      matches(el, 'button,[contenteditable]')\\n    );\\n  }\\n\\n  function outerWidth(element) {\\n    var styles = get(element);\\n    return (\\n      toInt(styles.width) +\\n      toInt(styles.paddingLeft) +\\n      toInt(styles.paddingRight) +\\n      toInt(styles.borderLeftWidth) +\\n      toInt(styles.borderRightWidth)\\n    );\\n  }\\n\\n  var env = {\\n    isWebKit:\\n      typeof document !== 'undefined' &&\\n      'WebkitAppearance' in document.documentElement.style,\\n    supportsTouch:\\n      typeof window !== 'undefined' &&\\n      ('ontouchstart' in window ||\\n        ('maxTouchPoints' in window.navigator &&\\n          window.navigator.maxTouchPoints > 0) ||\\n        (window.DocumentTouch && document instanceof window.DocumentTouch)),\\n    supportsIePointer:\\n      typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\\n    isChrome:\\n      typeof navigator !== 'undefined' &&\\n      /Chrome/i.test(navigator && navigator.userAgent),\\n  };\\n\\n  function updateGeometry(i) {\\n    var element = i.element;\\n    var roundedScrollTop = Math.floor(element.scrollTop);\\n    var rect = element.getBoundingClientRect();\\n\\n    i.containerWidth = Math.round(rect.width);\\n    i.containerHeight = Math.round(rect.height);\\n\\n    i.contentWidth = element.scrollWidth;\\n    i.contentHeight = element.scrollHeight;\\n\\n    if (!element.contains(i.scrollbarXRail)) {\\n      // clean up and append\\n      queryChildren(element, cls.element.rail('x')).forEach(function (el) { return remove(el); }\\n      );\\n      element.appendChild(i.scrollbarXRail);\\n    }\\n    if (!element.contains(i.scrollbarYRail)) {\\n      // clean up and append\\n      queryChildren(element, cls.element.rail('y')).forEach(function (el) { return remove(el); }\\n      );\\n      element.appendChild(i.scrollbarYRail);\\n    }\\n\\n    if (\\n      !i.settings.suppressScrollX &&\\n      i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\\n    ) {\\n      i.scrollbarXActive = true;\\n      i.railXWidth = i.containerWidth - i.railXMarginWidth;\\n      i.railXRatio = i.containerWidth / i.railXWidth;\\n      i.scrollbarXWidth = getThumbSize(\\n        i,\\n        toInt((i.railXWidth * i.containerWidth) / i.contentWidth)\\n      );\\n      i.scrollbarXLeft = toInt(\\n        ((i.negativeScrollAdjustment + element.scrollLeft) *\\n          (i.railXWidth - i.scrollbarXWidth)) /\\n          (i.contentWidth - i.containerWidth)\\n      );\\n    } else {\\n      i.scrollbarXActive = false;\\n    }\\n\\n    if (\\n      !i.settings.suppressScrollY &&\\n      i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\\n    ) {\\n      i.scrollbarYActive = true;\\n      i.railYHeight = i.containerHeight - i.railYMarginHeight;\\n      i.railYRatio = i.containerHeight / i.railYHeight;\\n      i.scrollbarYHeight = getThumbSize(\\n        i,\\n        toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\\n      );\\n      i.scrollbarYTop = toInt(\\n        (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\\n          (i.contentHeight - i.containerHeight)\\n      );\\n    } else {\\n      i.scrollbarYActive = false;\\n    }\\n\\n    if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\\n      i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\\n    }\\n    if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\\n      i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\\n    }\\n\\n    updateCss(element, i);\\n\\n    if (i.scrollbarXActive) {\\n      element.classList.add(cls.state.active('x'));\\n    } else {\\n      element.classList.remove(cls.state.active('x'));\\n      i.scrollbarXWidth = 0;\\n      i.scrollbarXLeft = 0;\\n      element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\\n    }\\n    if (i.scrollbarYActive) {\\n      element.classList.add(cls.state.active('y'));\\n    } else {\\n      element.classList.remove(cls.state.active('y'));\\n      i.scrollbarYHeight = 0;\\n      i.scrollbarYTop = 0;\\n      element.scrollTop = 0;\\n    }\\n  }\\n\\n  function getThumbSize(i, thumbSize) {\\n    if (i.settings.minScrollbarLength) {\\n      thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\\n    }\\n    if (i.settings.maxScrollbarLength) {\\n      thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\\n    }\\n    return thumbSize;\\n  }\\n\\n  function updateCss(element, i) {\\n    var xRailOffset = { width: i.railXWidth };\\n    var roundedScrollTop = Math.floor(element.scrollTop);\\n\\n    if (i.isRtl) {\\n      xRailOffset.left =\\n        i.negativeScrollAdjustment +\\n        element.scrollLeft +\\n        i.containerWidth -\\n        i.contentWidth;\\n    } else {\\n      xRailOffset.left = element.scrollLeft;\\n    }\\n    if (i.isScrollbarXUsingBottom) {\\n      xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\\n    } else {\\n      xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\\n    }\\n    set(i.scrollbarXRail, xRailOffset);\\n\\n    var yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\\n    if (i.isScrollbarYUsingRight) {\\n      if (i.isRtl) {\\n        yRailOffset.right =\\n          i.contentWidth -\\n          (i.negativeScrollAdjustment + element.scrollLeft) -\\n          i.scrollbarYRight -\\n          i.scrollbarYOuterWidth -\\n          9;\\n      } else {\\n        yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\\n      }\\n    } else {\\n      if (i.isRtl) {\\n        yRailOffset.left =\\n          i.negativeScrollAdjustment +\\n          element.scrollLeft +\\n          i.containerWidth * 2 -\\n          i.contentWidth -\\n          i.scrollbarYLeft -\\n          i.scrollbarYOuterWidth;\\n      } else {\\n        yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\\n      }\\n    }\\n    set(i.scrollbarYRail, yRailOffset);\\n\\n    set(i.scrollbarX, {\\n      left: i.scrollbarXLeft,\\n      width: i.scrollbarXWidth - i.railBorderXWidth,\\n    });\\n    set(i.scrollbarY, {\\n      top: i.scrollbarYTop,\\n      height: i.scrollbarYHeight - i.railBorderYWidth,\\n    });\\n  }\\n\\n  function clickRail(i) {\\n    var element = i.element;\\n\\n    i.event.bind(i.scrollbarY, 'mousedown', function (e) { return e.stopPropagation(); });\\n    i.event.bind(i.scrollbarYRail, 'mousedown', function (e) {\\n      var positionTop =\\n        e.pageY -\\n        window.pageYOffset -\\n        i.scrollbarYRail.getBoundingClientRect().top;\\n      var direction = positionTop > i.scrollbarYTop ? 1 : -1;\\n\\n      i.element.scrollTop += direction * i.containerHeight;\\n      updateGeometry(i);\\n\\n      e.stopPropagation();\\n    });\\n\\n    i.event.bind(i.scrollbarX, 'mousedown', function (e) { return e.stopPropagation(); });\\n    i.event.bind(i.scrollbarXRail, 'mousedown', function (e) {\\n      var positionLeft =\\n        e.pageX -\\n        window.pageXOffset -\\n        i.scrollbarXRail.getBoundingClientRect().left;\\n      var direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\\n\\n      i.element.scrollLeft += direction * i.containerWidth;\\n      updateGeometry(i);\\n\\n      e.stopPropagation();\\n    });\\n  }\\n\\n  function dragThumb(i) {\\n    bindMouseScrollHandler(i, [\\n      'containerWidth',\\n      'contentWidth',\\n      'pageX',\\n      'railXWidth',\\n      'scrollbarX',\\n      'scrollbarXWidth',\\n      'scrollLeft',\\n      'x',\\n      'scrollbarXRail' ]);\\n    bindMouseScrollHandler(i, [\\n      'containerHeight',\\n      'contentHeight',\\n      'pageY',\\n      'railYHeight',\\n      'scrollbarY',\\n      'scrollbarYHeight',\\n      'scrollTop',\\n      'y',\\n      'scrollbarYRail' ]);\\n  }\\n\\n  function bindMouseScrollHandler(\\n    i,\\n    ref\\n  ) {\\n    var containerHeight = ref[0];\\n    var contentHeight = ref[1];\\n    var pageY = ref[2];\\n    var railYHeight = ref[3];\\n    var scrollbarY = ref[4];\\n    var scrollbarYHeight = ref[5];\\n    var scrollTop = ref[6];\\n    var y = ref[7];\\n    var scrollbarYRail = ref[8];\\n\\n    var element = i.element;\\n\\n    var startingScrollTop = null;\\n    var startingMousePageY = null;\\n    var scrollBy = null;\\n\\n    function mouseMoveHandler(e) {\\n      if (e.touches && e.touches[0]) {\\n        e[pageY] = e.touches[0].pageY;\\n      }\\n      element[scrollTop] =\\n        startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);\\n      addScrollingClass(i, y);\\n      updateGeometry(i);\\n\\n      e.stopPropagation();\\n      if (e.type.startsWith('touch') && e.changedTouches.length > 1) {\\n        e.preventDefault();\\n      }\\n    }\\n\\n    function mouseUpHandler() {\\n      removeScrollingClass(i, y);\\n      i[scrollbarYRail].classList.remove(cls.state.clicking);\\n      i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);\\n    }\\n\\n    function bindMoves(e, touchMode) {\\n      startingScrollTop = element[scrollTop];\\n      if (touchMode && e.touches) {\\n        e[pageY] = e.touches[0].pageY;\\n      }\\n      startingMousePageY = e[pageY];\\n      scrollBy =\\n        (i[contentHeight] - i[containerHeight]) /\\n        (i[railYHeight] - i[scrollbarYHeight]);\\n      if (!touchMode) {\\n        i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);\\n        i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);\\n        e.preventDefault();\\n      } else {\\n        i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);\\n      }\\n\\n      i[scrollbarYRail].classList.add(cls.state.clicking);\\n\\n      e.stopPropagation();\\n    }\\n\\n    i.event.bind(i[scrollbarY], 'mousedown', function (e) {\\n      bindMoves(e);\\n    });\\n    i.event.bind(i[scrollbarY], 'touchstart', function (e) {\\n      bindMoves(e, true);\\n    });\\n  }\\n\\n  function keyboard(i) {\\n    var element = i.element;\\n\\n    var elementHovered = function () { return matches(element, ':hover'); };\\n    var scrollbarFocused = function () { return matches(i.scrollbarX, ':focus') || matches(i.scrollbarY, ':focus'); };\\n\\n    function shouldPreventDefault(deltaX, deltaY) {\\n      var scrollTop = Math.floor(element.scrollTop);\\n      if (deltaX === 0) {\\n        if (!i.scrollbarYActive) {\\n          return false;\\n        }\\n        if (\\n          (scrollTop === 0 && deltaY > 0) ||\\n          (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\\n        ) {\\n          return !i.settings.wheelPropagation;\\n        }\\n      }\\n\\n      var scrollLeft = element.scrollLeft;\\n      if (deltaY === 0) {\\n        if (!i.scrollbarXActive) {\\n          return false;\\n        }\\n        if (\\n          (scrollLeft === 0 && deltaX < 0) ||\\n          (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\\n        ) {\\n          return !i.settings.wheelPropagation;\\n        }\\n      }\\n      return true;\\n    }\\n\\n    i.event.bind(i.ownerDocument, 'keydown', function (e) {\\n      if (\\n        (e.isDefaultPrevented && e.isDefaultPrevented()) ||\\n        e.defaultPrevented\\n      ) {\\n        return;\\n      }\\n\\n      if (!elementHovered() && !scrollbarFocused()) {\\n        return;\\n      }\\n\\n      var activeElement = document.activeElement\\n        ? document.activeElement\\n        : i.ownerDocument.activeElement;\\n      if (activeElement) {\\n        if (activeElement.tagName === 'IFRAME') {\\n          activeElement = activeElement.contentDocument.activeElement;\\n        } else {\\n          // go deeper if element is a webcomponent\\n          while (activeElement.shadowRoot) {\\n            activeElement = activeElement.shadowRoot.activeElement;\\n          }\\n        }\\n        if (isEditable(activeElement)) {\\n          return;\\n        }\\n      }\\n\\n      var deltaX = 0;\\n      var deltaY = 0;\\n\\n      switch (e.which) {\\n        case 37: // left\\n          if (e.metaKey) {\\n            deltaX = -i.contentWidth;\\n          } else if (e.altKey) {\\n            deltaX = -i.containerWidth;\\n          } else {\\n            deltaX = -30;\\n          }\\n          break;\\n        case 38: // up\\n          if (e.metaKey) {\\n            deltaY = i.contentHeight;\\n          } else if (e.altKey) {\\n            deltaY = i.containerHeight;\\n          } else {\\n            deltaY = 30;\\n          }\\n          break;\\n        case 39: // right\\n          if (e.metaKey) {\\n            deltaX = i.contentWidth;\\n          } else if (e.altKey) {\\n            deltaX = i.containerWidth;\\n          } else {\\n            deltaX = 30;\\n          }\\n          break;\\n        case 40: // down\\n          if (e.metaKey) {\\n            deltaY = -i.contentHeight;\\n          } else if (e.altKey) {\\n            deltaY = -i.containerHeight;\\n          } else {\\n            deltaY = -30;\\n          }\\n          break;\\n        case 32: // space bar\\n          if (e.shiftKey) {\\n            deltaY = i.containerHeight;\\n          } else {\\n            deltaY = -i.containerHeight;\\n          }\\n          break;\\n        case 33: // page up\\n          deltaY = i.containerHeight;\\n          break;\\n        case 34: // page down\\n          deltaY = -i.containerHeight;\\n          break;\\n        case 36: // home\\n          deltaY = i.contentHeight;\\n          break;\\n        case 35: // end\\n          deltaY = -i.contentHeight;\\n          break;\\n        default:\\n          return;\\n      }\\n\\n      if (i.settings.suppressScrollX && deltaX !== 0) {\\n        return;\\n      }\\n      if (i.settings.suppressScrollY && deltaY !== 0) {\\n        return;\\n      }\\n\\n      element.scrollTop -= deltaY;\\n      element.scrollLeft += deltaX;\\n      updateGeometry(i);\\n\\n      if (shouldPreventDefault(deltaX, deltaY)) {\\n        e.preventDefault();\\n      }\\n    });\\n  }\\n\\n  function wheel(i) {\\n    var element = i.element;\\n\\n    function shouldPreventDefault(deltaX, deltaY) {\\n      var roundedScrollTop = Math.floor(element.scrollTop);\\n      var isTop = element.scrollTop === 0;\\n      var isBottom =\\n        roundedScrollTop + element.offsetHeight === element.scrollHeight;\\n      var isLeft = element.scrollLeft === 0;\\n      var isRight =\\n        element.scrollLeft + element.offsetWidth === element.scrollWidth;\\n\\n      var hitsBound;\\n\\n      // pick axis with primary direction\\n      if (Math.abs(deltaY) > Math.abs(deltaX)) {\\n        hitsBound = isTop || isBottom;\\n      } else {\\n        hitsBound = isLeft || isRight;\\n      }\\n\\n      return hitsBound ? !i.settings.wheelPropagation : true;\\n    }\\n\\n    function getDeltaFromEvent(e) {\\n      var deltaX = e.deltaX;\\n      var deltaY = -1 * e.deltaY;\\n\\n      if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\\n        // OS X Safari\\n        deltaX = (-1 * e.wheelDeltaX) / 6;\\n        deltaY = e.wheelDeltaY / 6;\\n      }\\n\\n      if (e.deltaMode && e.deltaMode === 1) {\\n        // Firefox in deltaMode 1: Line scrolling\\n        deltaX *= 10;\\n        deltaY *= 10;\\n      }\\n\\n      if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\\n        // IE in some mouse drivers\\n        deltaX = 0;\\n        deltaY = e.wheelDelta;\\n      }\\n\\n      if (e.shiftKey) {\\n        // reverse axis with shift key\\n        return [-deltaY, -deltaX];\\n      }\\n      return [deltaX, deltaY];\\n    }\\n\\n    function shouldBeConsumedByChild(target, deltaX, deltaY) {\\n      // FIXME: this is a workaround for <select> issue in FF and IE #571\\n      if (!env.isWebKit && element.querySelector('select:focus')) {\\n        return true;\\n      }\\n\\n      if (!element.contains(target)) {\\n        return false;\\n      }\\n\\n      var cursor = target;\\n\\n      while (cursor && cursor !== element) {\\n        if (cursor.classList.contains(cls.element.consuming)) {\\n          return true;\\n        }\\n\\n        var style = get(cursor);\\n\\n        // if deltaY && vertical scrollable\\n        if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\\n          var maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\\n          if (maxScrollTop > 0) {\\n            if (\\n              (cursor.scrollTop > 0 && deltaY < 0) ||\\n              (cursor.scrollTop < maxScrollTop && deltaY > 0)\\n            ) {\\n              return true;\\n            }\\n          }\\n        }\\n        // if deltaX && horizontal scrollable\\n        if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\\n          var maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\\n          if (maxScrollLeft > 0) {\\n            if (\\n              (cursor.scrollLeft > 0 && deltaX < 0) ||\\n              (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\\n            ) {\\n              return true;\\n            }\\n          }\\n        }\\n\\n        cursor = cursor.parentNode;\\n      }\\n\\n      return false;\\n    }\\n\\n    function mousewheelHandler(e) {\\n      var ref = getDeltaFromEvent(e);\\n      var deltaX = ref[0];\\n      var deltaY = ref[1];\\n\\n      if (shouldBeConsumedByChild(e.target, deltaX, deltaY)) {\\n        return;\\n      }\\n\\n      var shouldPrevent = false;\\n      if (!i.settings.useBothWheelAxes) {\\n        // deltaX will only be used for horizontal scrolling and deltaY will\\n        // only be used for vertical scrolling - this is the default\\n        element.scrollTop -= deltaY * i.settings.wheelSpeed;\\n        element.scrollLeft += deltaX * i.settings.wheelSpeed;\\n      } else if (i.scrollbarYActive && !i.scrollbarXActive) {\\n        // only vertical scrollbar is active and useBothWheelAxes option is\\n        // active, so let's scroll vertical bar using both mouse wheel axes\\n        if (deltaY) {\\n          element.scrollTop -= deltaY * i.settings.wheelSpeed;\\n        } else {\\n          element.scrollTop += deltaX * i.settings.wheelSpeed;\\n        }\\n        shouldPrevent = true;\\n      } else if (i.scrollbarXActive && !i.scrollbarYActive) {\\n        // useBothWheelAxes and only horizontal bar is active, so use both\\n        // wheel axes for horizontal bar\\n        if (deltaX) {\\n          element.scrollLeft += deltaX * i.settings.wheelSpeed;\\n        } else {\\n          element.scrollLeft -= deltaY * i.settings.wheelSpeed;\\n        }\\n        shouldPrevent = true;\\n      }\\n\\n      updateGeometry(i);\\n\\n      shouldPrevent = shouldPrevent || shouldPreventDefault(deltaX, deltaY);\\n      if (shouldPrevent && !e.ctrlKey) {\\n        e.stopPropagation();\\n        e.preventDefault();\\n      }\\n    }\\n\\n    if (typeof window.onwheel !== 'undefined') {\\n      i.event.bind(element, 'wheel', mousewheelHandler);\\n    } else if (typeof window.onmousewheel !== 'undefined') {\\n      i.event.bind(element, 'mousewheel', mousewheelHandler);\\n    }\\n  }\\n\\n  function touch(i) {\\n    if (!env.supportsTouch && !env.supportsIePointer) {\\n      return;\\n    }\\n\\n    var element = i.element;\\n\\n    function shouldPrevent(deltaX, deltaY) {\\n      var scrollTop = Math.floor(element.scrollTop);\\n      var scrollLeft = element.scrollLeft;\\n      var magnitudeX = Math.abs(deltaX);\\n      var magnitudeY = Math.abs(deltaY);\\n\\n      if (magnitudeY > magnitudeX) {\\n        // user is perhaps trying to swipe up/down the page\\n\\n        if (\\n          (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||\\n          (deltaY > 0 && scrollTop === 0)\\n        ) {\\n          // set prevent for mobile Chrome refresh\\n          return window.scrollY === 0 && deltaY > 0 && env.isChrome;\\n        }\\n      } else if (magnitudeX > magnitudeY) {\\n        // user is perhaps trying to swipe left/right across the page\\n\\n        if (\\n          (deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth) ||\\n          (deltaX > 0 && scrollLeft === 0)\\n        ) {\\n          return true;\\n        }\\n      }\\n\\n      return true;\\n    }\\n\\n    function applyTouchMove(differenceX, differenceY) {\\n      element.scrollTop -= differenceY;\\n      element.scrollLeft -= differenceX;\\n\\n      updateGeometry(i);\\n    }\\n\\n    var startOffset = {};\\n    var startTime = 0;\\n    var speed = {};\\n    var easingLoop = null;\\n\\n    function getTouch(e) {\\n      if (e.targetTouches) {\\n        return e.targetTouches[0];\\n      } else {\\n        // Maybe IE pointer\\n        return e;\\n      }\\n    }\\n\\n    function shouldHandle(e) {\\n      if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {\\n        return false;\\n      }\\n      if (e.targetTouches && e.targetTouches.length === 1) {\\n        return true;\\n      }\\n      if (\\n        e.pointerType &&\\n        e.pointerType !== 'mouse' &&\\n        e.pointerType !== e.MSPOINTER_TYPE_MOUSE\\n      ) {\\n        return true;\\n      }\\n      return false;\\n    }\\n\\n    function touchStart(e) {\\n      if (!shouldHandle(e)) {\\n        return;\\n      }\\n\\n      var touch = getTouch(e);\\n\\n      startOffset.pageX = touch.pageX;\\n      startOffset.pageY = touch.pageY;\\n\\n      startTime = new Date().getTime();\\n\\n      if (easingLoop !== null) {\\n        clearInterval(easingLoop);\\n      }\\n    }\\n\\n    function shouldBeConsumedByChild(target, deltaX, deltaY) {\\n      if (!element.contains(target)) {\\n        return false;\\n      }\\n\\n      var cursor = target;\\n\\n      while (cursor && cursor !== element) {\\n        if (cursor.classList.contains(cls.element.consuming)) {\\n          return true;\\n        }\\n\\n        var style = get(cursor);\\n\\n        // if deltaY && vertical scrollable\\n        if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\\n          var maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\\n          if (maxScrollTop > 0) {\\n            if (\\n              (cursor.scrollTop > 0 && deltaY < 0) ||\\n              (cursor.scrollTop < maxScrollTop && deltaY > 0)\\n            ) {\\n              return true;\\n            }\\n          }\\n        }\\n        // if deltaX && horizontal scrollable\\n        if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\\n          var maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\\n          if (maxScrollLeft > 0) {\\n            if (\\n              (cursor.scrollLeft > 0 && deltaX < 0) ||\\n              (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\\n            ) {\\n              return true;\\n            }\\n          }\\n        }\\n\\n        cursor = cursor.parentNode;\\n      }\\n\\n      return false;\\n    }\\n\\n    function touchMove(e) {\\n      if (shouldHandle(e)) {\\n        var touch = getTouch(e);\\n\\n        var currentOffset = { pageX: touch.pageX, pageY: touch.pageY };\\n\\n        var differenceX = currentOffset.pageX - startOffset.pageX;\\n        var differenceY = currentOffset.pageY - startOffset.pageY;\\n\\n        if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\\n          return;\\n        }\\n\\n        applyTouchMove(differenceX, differenceY);\\n        startOffset = currentOffset;\\n\\n        var currentTime = new Date().getTime();\\n\\n        var timeGap = currentTime - startTime;\\n        if (timeGap > 0) {\\n          speed.x = differenceX / timeGap;\\n          speed.y = differenceY / timeGap;\\n          startTime = currentTime;\\n        }\\n\\n        if (shouldPrevent(differenceX, differenceY)) {\\n          e.preventDefault();\\n        }\\n      }\\n    }\\n    function touchEnd() {\\n      if (i.settings.swipeEasing) {\\n        clearInterval(easingLoop);\\n        easingLoop = setInterval(function() {\\n          if (i.isInitialized) {\\n            clearInterval(easingLoop);\\n            return;\\n          }\\n\\n          if (!speed.x && !speed.y) {\\n            clearInterval(easingLoop);\\n            return;\\n          }\\n\\n          if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {\\n            clearInterval(easingLoop);\\n            return;\\n          }\\n\\n          if (!i.element) {\\n            clearInterval(easingLoop);\\n            return;\\n          }\\n\\n          applyTouchMove(speed.x * 30, speed.y * 30);\\n\\n          speed.x *= 0.8;\\n          speed.y *= 0.8;\\n        }, 10);\\n      }\\n    }\\n\\n    if (env.supportsTouch) {\\n      i.event.bind(element, 'touchstart', touchStart);\\n      i.event.bind(element, 'touchmove', touchMove);\\n      i.event.bind(element, 'touchend', touchEnd);\\n    } else if (env.supportsIePointer) {\\n      if (window.PointerEvent) {\\n        i.event.bind(element, 'pointerdown', touchStart);\\n        i.event.bind(element, 'pointermove', touchMove);\\n        i.event.bind(element, 'pointerup', touchEnd);\\n      } else if (window.MSPointerEvent) {\\n        i.event.bind(element, 'MSPointerDown', touchStart);\\n        i.event.bind(element, 'MSPointerMove', touchMove);\\n        i.event.bind(element, 'MSPointerUp', touchEnd);\\n      }\\n    }\\n  }\\n\\n  var defaultSettings = function () { return ({\\n    handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\\n    maxScrollbarLength: null,\\n    minScrollbarLength: null,\\n    scrollingThreshold: 1000,\\n    scrollXMarginOffset: 0,\\n    scrollYMarginOffset: 0,\\n    suppressScrollX: false,\\n    suppressScrollY: false,\\n    swipeEasing: true,\\n    useBothWheelAxes: false,\\n    wheelPropagation: true,\\n    wheelSpeed: 1,\\n  }); };\\n\\n  var handlers = {\\n    'click-rail': clickRail,\\n    'drag-thumb': dragThumb,\\n    keyboard: keyboard,\\n    wheel: wheel,\\n    touch: touch,\\n  };\\n\\n  var PerfectScrollbar = function PerfectScrollbar(element, userSettings) {\\n    var this$1 = this;\\n    if ( userSettings === void 0 ) userSettings = {};\\n\\n    if (typeof element === 'string') {\\n      element = document.querySelector(element);\\n    }\\n\\n    if (!element || !element.nodeName) {\\n      throw new Error('no element is specified to initialize PerfectScrollbar');\\n    }\\n\\n    this.element = element;\\n\\n    element.classList.add(cls.main);\\n\\n    this.settings = defaultSettings();\\n    for (var key in userSettings) {\\n      this.settings[key] = userSettings[key];\\n    }\\n\\n    this.containerWidth = null;\\n    this.containerHeight = null;\\n    this.contentWidth = null;\\n    this.contentHeight = null;\\n\\n    var focus = function () { return element.classList.add(cls.state.focus); };\\n    var blur = function () { return element.classList.remove(cls.state.focus); };\\n\\n    this.isRtl = get(element).direction === 'rtl';\\n    if (this.isRtl === true) {\\n      element.classList.add(cls.rtl);\\n    }\\n    this.isNegativeScroll = (function () {\\n      var originalScrollLeft = element.scrollLeft;\\n      var result = null;\\n      element.scrollLeft = -1;\\n      result = element.scrollLeft < 0;\\n      element.scrollLeft = originalScrollLeft;\\n      return result;\\n    })();\\n    this.negativeScrollAdjustment = this.isNegativeScroll\\n      ? element.scrollWidth - element.clientWidth\\n      : 0;\\n    this.event = new EventManager();\\n    this.ownerDocument = element.ownerDocument || document;\\n\\n    this.scrollbarXRail = div(cls.element.rail('x'));\\n    element.appendChild(this.scrollbarXRail);\\n    this.scrollbarX = div(cls.element.thumb('x'));\\n    this.scrollbarXRail.appendChild(this.scrollbarX);\\n    this.scrollbarX.setAttribute('tabindex', 0);\\n    this.event.bind(this.scrollbarX, 'focus', focus);\\n    this.event.bind(this.scrollbarX, 'blur', blur);\\n    this.scrollbarXActive = null;\\n    this.scrollbarXWidth = null;\\n    this.scrollbarXLeft = null;\\n    var railXStyle = get(this.scrollbarXRail);\\n    this.scrollbarXBottom = parseInt(railXStyle.bottom, 10);\\n    if (isNaN(this.scrollbarXBottom)) {\\n      this.isScrollbarXUsingBottom = false;\\n      this.scrollbarXTop = toInt(railXStyle.top);\\n    } else {\\n      this.isScrollbarXUsingBottom = true;\\n    }\\n    this.railBorderXWidth =\\n      toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\\n    // Set rail to display:block to calculate margins\\n    set(this.scrollbarXRail, { display: 'block' });\\n    this.railXMarginWidth =\\n      toInt(railXStyle.marginLeft) + toInt(railXStyle.marginRight);\\n    set(this.scrollbarXRail, { display: '' });\\n    this.railXWidth = null;\\n    this.railXRatio = null;\\n\\n    this.scrollbarYRail = div(cls.element.rail('y'));\\n    element.appendChild(this.scrollbarYRail);\\n    this.scrollbarY = div(cls.element.thumb('y'));\\n    this.scrollbarYRail.appendChild(this.scrollbarY);\\n    this.scrollbarY.setAttribute('tabindex', 0);\\n    this.event.bind(this.scrollbarY, 'focus', focus);\\n    this.event.bind(this.scrollbarY, 'blur', blur);\\n    this.scrollbarYActive = null;\\n    this.scrollbarYHeight = null;\\n    this.scrollbarYTop = null;\\n    var railYStyle = get(this.scrollbarYRail);\\n    this.scrollbarYRight = parseInt(railYStyle.right, 10);\\n    if (isNaN(this.scrollbarYRight)) {\\n      this.isScrollbarYUsingRight = false;\\n      this.scrollbarYLeft = toInt(railYStyle.left);\\n    } else {\\n      this.isScrollbarYUsingRight = true;\\n    }\\n    this.scrollbarYOuterWidth = this.isRtl ? outerWidth(this.scrollbarY) : null;\\n    this.railBorderYWidth =\\n      toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\\n    set(this.scrollbarYRail, { display: 'block' });\\n    this.railYMarginHeight =\\n      toInt(railYStyle.marginTop) + toInt(railYStyle.marginBottom);\\n    set(this.scrollbarYRail, { display: '' });\\n    this.railYHeight = null;\\n    this.railYRatio = null;\\n\\n    this.reach = {\\n      x:\\n        element.scrollLeft <= 0\\n          ? 'start'\\n          : element.scrollLeft >= this.contentWidth - this.containerWidth\\n          ? 'end'\\n          : null,\\n      y:\\n        element.scrollTop <= 0\\n          ? 'start'\\n          : element.scrollTop >= this.contentHeight - this.containerHeight\\n          ? 'end'\\n          : null,\\n    };\\n\\n    this.isAlive = true;\\n\\n    this.settings.handlers.forEach(function (handlerName) { return handlers[handlerName](this$1); });\\n\\n    this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only\\n    this.lastScrollLeft = element.scrollLeft; // for onScroll only\\n    this.event.bind(this.element, 'scroll', function (e) { return this$1.onScroll(e); });\\n    updateGeometry(this);\\n  };\\n\\n  PerfectScrollbar.prototype.update = function update () {\\n    if (!this.isAlive) {\\n      return;\\n    }\\n\\n    // Recalcuate negative scrollLeft adjustment\\n    this.negativeScrollAdjustment = this.isNegativeScroll\\n      ? this.element.scrollWidth - this.element.clientWidth\\n      : 0;\\n\\n    // Recalculate rail margins\\n    set(this.scrollbarXRail, { display: 'block' });\\n    set(this.scrollbarYRail, { display: 'block' });\\n    this.railXMarginWidth =\\n      toInt(get(this.scrollbarXRail).marginLeft) +\\n      toInt(get(this.scrollbarXRail).marginRight);\\n    this.railYMarginHeight =\\n      toInt(get(this.scrollbarYRail).marginTop) +\\n      toInt(get(this.scrollbarYRail).marginBottom);\\n\\n    // Hide scrollbars not to affect scrollWidth and scrollHeight\\n    set(this.scrollbarXRail, { display: 'none' });\\n    set(this.scrollbarYRail, { display: 'none' });\\n\\n    updateGeometry(this);\\n\\n    processScrollDiff(this, 'top', 0, false, true);\\n    processScrollDiff(this, 'left', 0, false, true);\\n\\n    set(this.scrollbarXRail, { display: '' });\\n    set(this.scrollbarYRail, { display: '' });\\n  };\\n\\n  PerfectScrollbar.prototype.onScroll = function onScroll (e) {\\n    if (!this.isAlive) {\\n      return;\\n    }\\n\\n    updateGeometry(this);\\n    processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop);\\n    processScrollDiff(\\n      this,\\n      'left',\\n      this.element.scrollLeft - this.lastScrollLeft\\n    );\\n\\n    this.lastScrollTop = Math.floor(this.element.scrollTop);\\n    this.lastScrollLeft = this.element.scrollLeft;\\n  };\\n\\n  PerfectScrollbar.prototype.destroy = function destroy () {\\n    if (!this.isAlive) {\\n      return;\\n    }\\n\\n    this.event.unbindAll();\\n    remove(this.scrollbarX);\\n    remove(this.scrollbarY);\\n    remove(this.scrollbarXRail);\\n    remove(this.scrollbarYRail);\\n    this.removePsClasses();\\n\\n    // unset elements\\n    this.element = null;\\n    this.scrollbarX = null;\\n    this.scrollbarY = null;\\n    this.scrollbarXRail = null;\\n    this.scrollbarYRail = null;\\n\\n    this.isAlive = false;\\n  };\\n\\n  PerfectScrollbar.prototype.removePsClasses = function removePsClasses () {\\n    this.element.className = this.element.className\\n      .split(' ')\\n      .filter(function (name) { return !name.match(/^ps([-_].+|)$/); })\\n      .join(' ');\\n  };\\n\\n  return PerfectScrollbar;\\n\\n})));\\n//# sourceMappingURL=perfect-scrollbar.js.map\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/perfect-scrollbar/dist/perfect-scrollbar.js?\");\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module can't be inlined because the eval devtool is used.\n/******/ \tvar __webpack_exports__ = __webpack_require__(\"./libs/perfect-scrollbar/perfect-scrollbar.js\");\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"
  },
  {
    "path": "public/assets/vendor/libs/popper/popper.js",
    "content": "/*\n * ATTENTION: The \"eval\" devtool has been used (maybe by default in mode: \"development\").\n * This devtool is neither made for production nor for readable output files.\n * It uses \"eval()\" calls to create a separate source file in the browser devtools.\n * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)\n * or disable the default devtool with \"devtool: false\".\n * If you are looking for production-ready output files, see mode: \"production\" (https://webpack.js.org/configuration/mode/).\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./node_modules/@popperjs/core/dist/umd/popper.min.js\":\n/*!************************************************************!*\\\n  !*** ./node_modules/@popperjs/core/dist/umd/popper.min.js ***!\n  \\************************************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\neval(\"/**\\n * @popperjs/core v2.11.8 - MIT License\\n */\\n\\n!function(e,t){ true?t(exports):0}(this,(function(e){\\\"use strict\\\";function t(e){if(null==e)return window;if(\\\"[object Window]\\\"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return\\\"undefined\\\"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+\\\"/\\\"+e.version})).join(\\\" \\\"):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||\\\"\\\").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&((\\\"body\\\"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return\\\"html\\\"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return[\\\"html\\\",\\\"body\\\",\\\"#document\\\"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return[\\\"table\\\",\\\"td\\\",\\\"th\\\"].indexOf(l(e))>=0}function j(e){return r(e)&&\\\"fixed\\\"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&\\\"static\\\"===m(i).position;)i=j(i);return i&&(\\\"html\\\"===l(i)||\\\"body\\\"===l(i)&&\\\"static\\\"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&\\\"fixed\\\"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&[\\\"html\\\",\\\"body\\\"].indexOf(l(n))<0;){var i=m(n);if(\\\"none\\\"!==i.transform||\\\"none\\\"!==i.perspective||\\\"paint\\\"===i.contain||-1!==[\\\"transform\\\",\\\"perspective\\\"].indexOf(i.willChange)||t&&\\\"filter\\\"===i.willChange||t&&i.filter&&\\\"none\\\"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D=\\\"top\\\",A=\\\"bottom\\\",L=\\\"right\\\",P=\\\"left\\\",M=\\\"auto\\\",k=[D,A,L,P],W=\\\"start\\\",B=\\\"end\\\",H=\\\"viewport\\\",T=\\\"popper\\\",R=k.reduce((function(e,t){return e.concat([t+\\\"-\\\"+W,t+\\\"-\\\"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+\\\"-\\\"+W,t+\\\"-\\\"+B])}),[]),V=[\\\"beforeRead\\\",\\\"read\\\",\\\"afterRead\\\",\\\"beforeMain\\\",\\\"main\\\",\\\"afterMain\\\",\\\"beforeWrite\\\",\\\"write\\\",\\\"afterWrite\\\"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function N(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function I(e,r,o){return r===H?N(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&\\\"fixed\\\"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,\\\"fixed\\\"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):N(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return\\\"rtl\\\"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function _(e,t,o,s){var f=\\\"clippingParents\\\"===t?function(e){var t=w(b(e)),o=[\\\"absolute\\\",\\\"fixed\\\"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&C(e,o)&&\\\"body\\\"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=I(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),I(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function F(e){return e.split(\\\"-\\\")[0]}function U(e){return e.split(\\\"-\\\")[1]}function z(e){return[\\\"top\\\",\\\"bottom\\\"].indexOf(e)>=0?\\\"x\\\":\\\"y\\\"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?F(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p=\\\"y\\\"===c?\\\"height\\\":\\\"width\\\";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?\\\"clippingParents\\\":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y(\\\"number\\\"!=typeof b?b:G(b,k)),w=m===T?\\\"reference\\\":T,O=e.rects.popper,j=e.elements[y?w:m],E=_(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:\\\"absolute\\\",placement:i}),W=N(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?\\\"y\\\":\\\"x\\\";R[e]+=V[n]*t}))}return R}var K={placement:\\\"bottom\\\",modifiers:[],strategy:\\\"absolute\\\"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&\\\"function\\\"==typeof e.getBoundingClientRect)}))}function Z(e){void 0===e&&(e={});var t=e,r=t.defaultModifiers,o=void 0===r?[]:r,i=t.defaultOptions,a=void 0===i?K:i;return function(e,t,r){void 0===r&&(r=a);var i,s,f={placement:\\\"bottom\\\",orderedModifiers:[],options:Object.assign({},K,a),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},c=[],p=!1,u={state:f,setOptions:function(r){var i=\\\"function\\\"==typeof r?r(f.options):r;l(),f.options=Object.assign({},a,f.options,i),f.scrollParents={reference:n(e)?w(e):e.contextElement?w(e.contextElement):[],popper:w(t)};var s,p,d=function(e){var t=q(e);return V.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])}((s=[].concat(o,f.options.modifiers),p=s.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{}),Object.keys(p).map((function(e){return p[e]}))));return f.orderedModifiers=d.filter((function(e){return e.enabled})),f.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,r=void 0===n?{}:n,o=e.effect;if(\\\"function\\\"==typeof o){var i=o({state:f,name:t,instance:u,options:r}),a=function(){};c.push(i||a)}})),u.update()},forceUpdate:function(){if(!p){var e=f.elements,t=e.reference,n=e.popper;if(Q(t,n)){f.rects={reference:y(t,E(n),\\\"fixed\\\"===f.options.strategy),popper:g(n)},f.reset=!1,f.placement=f.options.placement,f.orderedModifiers.forEach((function(e){return f.modifiersData[e.name]=Object.assign({},e.data)}));for(var r=0;r<f.orderedModifiers.length;r++)if(!0!==f.reset){var o=f.orderedModifiers[r],i=o.fn,a=o.options,s=void 0===a?{}:a,c=o.name;\\\"function\\\"==typeof i&&(f=i({state:f,options:s,name:c,instance:u})||f)}else f.reset=!1,r=-1}}},update:(i=function(){return new Promise((function(e){u.forceUpdate(),e(f)}))},function(){return s||(s=new Promise((function(e){Promise.resolve().then((function(){s=void 0,e(i())}))}))),s}),destroy:function(){l(),p=!0}};if(!Q(e,t))return u;function l(){c.forEach((function(e){return e()})),c=[]}return u.setOptions(r).then((function(e){!p&&r.onFirstUpdate&&r.onFirstUpdate(e)})),u}}var $={passive:!0};var ee={name:\\\"eventListeners\\\",enabled:!0,phase:\\\"write\\\",fn:function(){},effect:function(e){var n=e.state,r=e.instance,o=e.options,i=o.scroll,a=void 0===i||i,s=o.resize,f=void 0===s||s,c=t(n.elements.popper),p=[].concat(n.scrollParents.reference,n.scrollParents.popper);return a&&p.forEach((function(e){e.addEventListener(\\\"scroll\\\",r.update,$)})),f&&c.addEventListener(\\\"resize\\\",r.update,$),function(){a&&p.forEach((function(e){e.removeEventListener(\\\"scroll\\\",r.update,$)})),f&&c.removeEventListener(\\\"resize\\\",r.update,$)}},data:{}};var te={name:\\\"popperOffsets\\\",enabled:!0,phase:\\\"read\\\",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=X({reference:t.rects.reference,element:t.rects.popper,strategy:\\\"absolute\\\",placement:t.placement})},data:{}},ne={top:\\\"auto\\\",right:\\\"auto\\\",bottom:\\\"auto\\\",left:\\\"auto\\\"};function re(e){var n,r=e.popper,o=e.popperRect,i=e.placement,a=e.variation,f=e.offsets,c=e.position,p=e.gpuAcceleration,u=e.adaptive,l=e.roundOffsets,h=e.isFixed,v=f.x,y=void 0===v?0:v,g=f.y,b=void 0===g?0:g,x=\\\"function\\\"==typeof l?l({x:y,y:b}):{x:y,y:b};y=x.x,b=x.y;var w=f.hasOwnProperty(\\\"x\\\"),O=f.hasOwnProperty(\\\"y\\\"),j=P,M=D,k=window;if(u){var W=E(r),H=\\\"clientHeight\\\",T=\\\"clientWidth\\\";if(W===t(r)&&\\\"static\\\"!==m(W=d(r)).position&&\\\"absolute\\\"===c&&(H=\\\"scrollHeight\\\",T=\\\"scrollWidth\\\"),W=W,i===D||(i===P||i===L)&&a===B)M=A,b-=(h&&W===k&&k.visualViewport?k.visualViewport.height:W[H])-o.height,b*=p?1:-1;if(i===P||(i===D||i===A)&&a===B)j=L,y-=(h&&W===k&&k.visualViewport?k.visualViewport.width:W[T])-o.width,y*=p?1:-1}var R,S=Object.assign({position:c},u&&ne),V=!0===l?function(e,t){var n=e.x,r=e.y,o=t.devicePixelRatio||1;return{x:s(n*o)/o||0,y:s(r*o)/o||0}}({x:y,y:b},t(r)):{x:y,y:b};return y=V.x,b=V.y,p?Object.assign({},S,((R={})[M]=O?\\\"0\\\":\\\"\\\",R[j]=w?\\\"0\\\":\\\"\\\",R.transform=(k.devicePixelRatio||1)<=1?\\\"translate(\\\"+y+\\\"px, \\\"+b+\\\"px)\\\":\\\"translate3d(\\\"+y+\\\"px, \\\"+b+\\\"px, 0)\\\",R)):Object.assign({},S,((n={})[M]=O?b+\\\"px\\\":\\\"\\\",n[j]=w?y+\\\"px\\\":\\\"\\\",n.transform=\\\"\\\",n))}var oe={name:\\\"computeStyles\\\",enabled:!0,phase:\\\"beforeWrite\\\",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=void 0===r||r,i=n.adaptive,a=void 0===i||i,s=n.roundOffsets,f=void 0===s||s,c={placement:F(t.placement),variation:U(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:\\\"fixed\\\"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,re(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:f})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,re(Object.assign({},c,{offsets:t.modifiersData.arrow,position:\\\"absolute\\\",adaptive:!1,roundOffsets:f})))),t.attributes.popper=Object.assign({},t.attributes.popper,{\\\"data-popper-placement\\\":t.placement})},data:{}};var ie={name:\\\"applyStyles\\\",enabled:!0,phase:\\\"write\\\",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},o=t.attributes[e]||{},i=t.elements[e];r(i)&&l(i)&&(Object.assign(i.style,n),Object.keys(o).forEach((function(e){var t=o[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?\\\"\\\":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:\\\"0\\\",top:\\\"0\\\",margin:\\\"0\\\"},arrow:{position:\\\"absolute\\\"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var o=t.elements[e],i=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]=\\\"\\\",e}),{});r(o)&&l(o)&&(Object.assign(o.style,a),Object.keys(i).forEach((function(e){o.removeAttribute(e)})))}))}},requires:[\\\"computeStyles\\\"]};var ae={name:\\\"offset\\\",enabled:!0,phase:\\\"main\\\",requires:[\\\"popperOffsets\\\"],fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.offset,i=void 0===o?[0,0]:o,a=S.reduce((function(e,n){return e[n]=function(e,t,n){var r=F(e),o=[P,D].indexOf(r)>=0?-1:1,i=\\\"function\\\"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:\\\"right\\\",right:\\\"left\\\",bottom:\\\"top\\\",top:\\\"bottom\\\"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:\\\"end\\\",end:\\\"start\\\"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[F(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:\\\"flip\\\",enabled:!0,phase:\\\"main\\\",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=F(v),g=f||(y===v||!h?[fe(v)]:function(e){if(F(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(F(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k<b.length;k++){var B=b[k],H=F(B),T=U(B)===W,R=[D,A].indexOf(H)>=0,S=R?\\\"width\\\":\\\"height\\\",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var C=fe(q),N=[];if(i&&N.push(V[H]<=0),s&&N.push(V[q]<=0,V[C]<=0),N.every((function(e){return e}))){E=B,j=!1;break}O.set(B,N)}if(j)for(var I=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,\\\"break\\\"},_=h?3:1;_>0;_--){if(\\\"break\\\"===I(_))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:[\\\"offset\\\"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:\\\"preventOverflow\\\",enabled:!0,phase:\\\"main\\\",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=F(t.placement),w=U(t.placement),O=!w,j=z(x),M=\\\"x\\\"===j?\\\"y\\\":\\\"x\\\",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T=\\\"function\\\"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R=\\\"number\\\"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,C=\\\"y\\\"===j?D:P,N=\\\"y\\\"===j?A:L,I=\\\"y\\\"===j?\\\"height\\\":\\\"width\\\",_=k[j],X=_+b[C],Y=_-b[N],G=m?-H[I]/2:0,K=w===W?B[I]:H[I],Q=w===W?-H[I]:-B[I],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData[\\\"arrow#persistent\\\"]?t.modifiersData[\\\"arrow#persistent\\\"].padding:{top:0,right:0,bottom:0,left:0},te=ee[C],ne=ee[N],re=de(0,B[I],$[I]),oe=O?B[I]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[I]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?\\\"y\\\"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=_+ie-fe,pe=de(m?a(X,_+oe-fe-se):X,_,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-_}if(c){var ue,le=\\\"x\\\"===j?D:P,he=\\\"x\\\"===j?A:L,me=k[M],ve=\\\"y\\\"===M?\\\"height\\\":\\\"width\\\",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:[\\\"offset\\\"]};var me={name:\\\"arrow\\\",enabled:!0,phase:\\\"main\\\",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=F(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?\\\"height\\\":\\\"width\\\";if(i&&a){var p=function(e,t){return Y(\\\"number\\\"!=typeof(e=\\\"function\\\"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l=\\\"y\\\"===f?D:P,d=\\\"y\\\"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?\\\"y\\\"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?\\\"[data-popper-arrow]\\\":n;null!=r&&(\\\"string\\\"!=typeof r||(r=t.elements.popper.querySelector(r)))&&C(t.elements.popper,r)&&(t.elements.arrow=r)},requires:[\\\"popperOffsets\\\"],requiresIfExists:[\\\"preventOverflow\\\"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:\\\"hide\\\",enabled:!0,phase:\\\"main\\\",requiresIfExists:[\\\"preventOverflow\\\"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:\\\"reference\\\"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{\\\"data-popper-reference-hidden\\\":p,\\\"data-popper-escaped\\\":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,\\\"__esModule\\\",{value:!0})}));\\n//# sourceMappingURL=popper.min.js.map\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./node_modules/@popperjs/core/dist/umd/popper.min.js?\");\n\n/***/ }),\n\n/***/ \"./libs/popper/popper.js\":\n/*!*******************************!*\\\n  !*** ./libs/popper/popper.js ***!\n  \\*******************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   Popper: function() { return /* reexport default from dynamic */ _popperjs_core_dist_umd_popper_min__WEBPACK_IMPORTED_MODULE_0___default.a; }\\n/* harmony export */ });\\n/* harmony import */ var _popperjs_core_dist_umd_popper_min__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @popperjs/core/dist/umd/popper.min */ \\\"./node_modules/@popperjs/core/dist/umd/popper.min.js\\\");\\n/* harmony import */ var _popperjs_core_dist_umd_popper_min__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_popperjs_core_dist_umd_popper_min__WEBPACK_IMPORTED_MODULE_0__);\\n\\n\\n// Required to enable animations on dropdowns/tooltips/popovers\\n// Popper.Defaults.modifiers.computeStyle.gpuAcceleration = false\\n\\n\\n\\n//# sourceURL=webpack://sneat-bootstrap-html-admin-template-free/./libs/popper/popper.js?\");\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module can't be inlined because the eval devtool is used.\n/******/ \tvar __webpack_exports__ = __webpack_require__(\"./libs/popper/popper.js\");\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"
  },
  {
    "path": "public/index.php",
    "content": "<?php\n\nuse Illuminate\\Http\\Request;\n\ndefine('LARAVEL_START', microtime(true));\n\n// Determine if the application is in maintenance mode...\nif (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {\n    require $maintenance;\n}\n\n// Register the Composer autoloader...\nrequire __DIR__.'/../vendor/autoload.php';\n\n// Bootstrap Laravel and handle the request...\n(require_once __DIR__.'/../bootstrap/app.php')\n    ->handleRequest(Request::capture());\n"
  },
  {
    "path": "public/robots.txt",
    "content": "User-agent: *\nDisallow:\n"
  },
  {
    "path": "public/service-worker.js",
    "content": "self.addEventListener(\"push\", (event) => {\n    const notification = event.data.json();\n\n    event.waitUntil(\n        self.registration.showNotification(notification.title, {\n            body: notification.body,\n            icon: \"./images/logo.png\",\n            data: {\n                url: notification.url\n            }\n        })\n    )\n});\n\n\nself.addEventListener(\"notificationclick\", (event) => {\n    event.waitUntil(\n        clients.openWindow(event.notification.data.url)\n    )\n})"
  },
  {
    "path": "resources/css/app.css",
    "content": ""
  },
  {
    "path": "resources/js/app.js",
    "content": "import './bootstrap';\n"
  },
  {
    "path": "resources/js/bootstrap.js",
    "content": "import 'bootstrap';\n\n/**\n * We'll load the axios HTTP library which allows us to easily issue requests\n * to our Laravel back-end. This library automatically handles sending the\n * CSRF token as a header based on the value of the \"XSRF\" token cookie.\n */\n\nimport axios from 'axios';\nwindow.axios = axios;\n\nwindow.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\n\n/**\n * Echo exposes an expressive API for subscribing to channels and listening\n * for events that are broadcast by Laravel. Echo and event broadcasting\n * allows your team to easily build robust real-time web applications.\n */\n\n// import Echo from 'laravel-echo';\n\n// import Pusher from 'pusher-js';\n// window.Pusher = Pusher;\n\n// window.Echo = new Echo({\n//     broadcaster: 'pusher',\n//     key: import.meta.env.VITE_PUSHER_APP_KEY,\n//     cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER ?? 'mt1',\n//     wsHost: import.meta.env.VITE_PUSHER_HOST ?? `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`,\n//     wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80,\n//     wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443,\n//     forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https',\n//     enabledTransports: ['ws', 'wss'],\n// });\n"
  },
  {
    "path": "resources/sass/_variables.scss",
    "content": "// Body\n$body-bg: #f8fafc;\n\n// Typography\n$font-family-sans-serif: 'Nunito', sans-serif;\n$font-size-base: 0.9rem;\n$line-height-base: 1.6;\n"
  },
  {
    "path": "resources/sass/app.scss",
    "content": "// Fonts\n@import url('https://fonts.bunny.net/css?family=Nunito');\n\n// Variables\n@import 'variables';\n\n// Bootstrap\n@import 'bootstrap/scss/bootstrap';\n"
  },
  {
    "path": "resources/views/AutoCompleteSearch/index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@tarekraafat/autocomplete.js@10.2.7/dist/css/autoComplete.min.css\">\n@endsection\n\n@section('content')\n    <div class=\"container\">\n        <div class=\"card\">\n            <div class=\"card-body text-center\">\n                <h1>{{ __('Auto Complete Search') }}</h1>\n\n                <h4>{{ __('Type a Country Name') }}</h4>\n                <input type=\"text\" id=\"autoComplete\">\n            </div>\n        </div>\n\n    </div>\n@endsection\n\n@section('script')\n    <script src=\"https://cdn.jsdelivr.net/npm/@tarekraafat/autocomplete.js@10.2.7/dist/autoComplete.min.js\"></script>\n    <script>\n        const autoCompleteJS = new autoComplete({\n            selector: \"#autoComplete\",\n            placeHolder: \"Search for Food...\",\n            data: {\n                src: async (query) => {\n                    try {\n                        // Fetch Data from external Source\n                        const source = await fetch(`{{ URL('auto-complete-search/search') }}/${query}`);\n                        // Data should be an array of `Objects` or `Strings`\n                        const data = await source.json();\n\n                        return data;\n                    } catch (error) {\n                        return error;\n                    }\n                },\n                // Data source 'Object' key to be searched\n                keys: [\"name\"]\n            },\n            resultsList: {\n                element: (list, data) => {\n                    if (!data.results.length) {\n                        // Create \"No Results\" message element\n                        const message = document.createElement(\"div\");\n                        // Add class to the created element\n                        message.setAttribute(\"class\", \"no_result\");\n                        // Add message text content\n                        message.innerHTML = `<span>Found No Results for \"${data.query}\"</span>`;\n                        // Append message element to the results list\n                        list.prepend(message);\n                    }\n                },\n                noResults: true,\n            },\n            resultItem: {\n                highlight: true,\n            }\n        });\n\n        document.querySelector(\"#autoComplete\").addEventListener(\"selection\", function(event) {\n            // \"event.detail\" carries the autoComplete.js \"feedback\" object\n            console.log(event.detail);\n            $(\"#autoComplete\").val(event.detail.selection.value.name);\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/AutoSuggest/index.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Laravel Auto Suggest Search</title>\n    <link rel=\"stylesheet\" href=\"https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css\">\n    <link rel=\"stylesheet\" href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css\">\n    <style>\n        html,\n        body {\n            height: 100%;\n            width: 100%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            background-image: linear-gradient(to right, #fc5c7d, #6a82fb);\n            overflow: hidden;\n        }\n\n        /* Style the input field */\n        input#searchInput {\n            border-color: blue;\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"container text-center\">\n        <h1>Stack Tips</h1>\n        <h1>{{ __('Laravel Auto Suggest Search') }}</h1>\n        <input id=\"searchInput\" class=\"form-control\" type=\"text\">\n    </div>\n</body>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js\"></script>\n<script src=\"https://code.jquery.com/ui/1.12.1/jquery-ui.js\"></script>\n<script type=\"text/javascript\">\n    $(function() {\n        $(\"#searchInput\").autocomplete({\n            source: function(request, response) {\n                $.getJSON(\"search\", {\n                    query: request.term\n                }, function(data) {\n                    response($.map(data, function(item) {\n                        return {\n                            value: item.name\n                        };\n                    }));\n                });\n            }\n        });\n    });\n</script>\n\n</html>\n"
  },
  {
    "path": "resources/views/CRUD/create.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Document</title>\n    <link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css\">\n\n\n</head>\n\n<body>\n    <div class=\"container\">\n        <a href=\"/products\">{{__('Products')}}</a>\n\n        <h1>{{__('Create Product')}}</h1>\n\n        <form method=\"POST\" action=\"{{ route('products.store') }}\">\n            @csrf\n            <div class=\"row\">\n                <div class=\"col-md-3\">\n                    <label for=\"name\">{{__('Name:')}}</label>\n                    <input type=\"text\" name=\"name\" class=\"form-control\" value=\"{{ old('name') }}\">\n                </div>\n                <div class=\"col-md-3\">\n                    <label for=\"quantity\">{{__('Quantity:')}}</label>\n                    <input type=\"number\" name=\"quantity\" class=\"form-control\" value=\"{{ old('quantity') }}\">\n                </div>\n                <div class=\"col-md-3\">\n                    <label for=\"buyingPrice\">{{__('Buying Price:')}}</label>\n                    <input type=\"number\" name=\"buyingPrice\" class=\"form-control\" value=\"{{ old('buyingPrice') }}\">\n                </div>\n                <div class=\"col-md-3\">\n                    <label for=\"sellingPrice\">{{__('Selling Price:')}}</label>\n                    <input type=\"number\" name=\"sellingPrice\" class=\"form-control\" value=\"{{ old('sellingPrice') }}\">\n                </div>\n                <div class=\"col-md-3\">\n                    <label for=\"image_url\">{{__('Image URL:')}}</label>\n                    <input type=\"text\" name=\"image_url\" class=\"form-control\" value=\"{{ old('image_url') }}\">\n                </div>\n                <div class=\"col-md-3\">\n                    <label for=\"weight\">{{__('Weight')}} (in kg):</label>\n                    <input type=\"number\" name=\"weight\" step=\"0.01\" class=\"form-control\" value=\"{{ old('weight') }}\">\n                </div>\n                <div class=\"col-md-3\">\n                    <label for=\"description\">{{__('Description:')}}</label>\n                    <textarea name=\"description\" class=\"form-control\">{{ old('description') }}</textarea>\n                </div>\n            </div>\n            <button type=\"submit\" class=\"btn btn-primary\">{{__('Create')}}</button>\n        </form>\n    </div>\n\n</body>\n<script src=\"https://code.jquery.com/jquery-3.5.1.min.js\"></script>\n<script src=\"{{ asset('assets/notify.min.js') }}\"></script>\n\n\n<script>\n    $(document).ready(function($) {\n        // Start Show Validation Error messages==========================================================\n        @if ($errors->any())\n            @foreach ($errors->all() as $error)\n                $.notify(\"{{ $error }}\", \"error\");\n            @endforeach\n        @endif\n        // End Show Validation Error messages==========================================================\n\n        // Start Show Success message ====================================================================\n        @if (session('success'))\n            $.notify(\"{{ session('success') }}\", \"success\");\n        @endif\n        // End Show Success message ====================================================================\n    });\n</script>\n\n</html>\n"
  },
  {
    "path": "resources/views/CRUD/edit.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Document</title>\n    <link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css\">\n\n</head>\n\n<body>\n    <div class=\"container\">\n        <a href=\"/products\">{{__('Products')}}</a>\n        <h1>{{__('Edit Product')}}</h1>\n        <form method=\"POST\" action=\"{{ route('products.update', $product->id) }}\">\n            @csrf\n            @method('PUT')\n            <div class=\"row\">\n                <div class=\"col-md-3\">\n                    <label for=\"name\">{{__('Name:')}}</label>\n                    <input type=\"text\" name=\"name\" class=\"form-control\" value=\"{{ old('name', $product->name) }}\">\n                </div>\n                <div class=\"col-md-3\">\n                    <label for=\"quantity\">{{__('Quantity:')}}</label>\n                    <input type=\"number\" name=\"quantity\" class=\"form-control\" value=\"{{ old('quantity', $product->quantity) }}\">\n                </div>\n                <div class=\"col-md-3\">\n                    <label for=\"buyingPrice\">{{__('Buying Price:')}}</label>\n                    <input type=\"number\" name=\"buyingPrice\" class=\"form-control\" value=\"{{ old('buyingPrice', $product->buyingPrice) }}\">\n                </div>\n                <div class=\"col-md-3\">\n                    <label for=\"sellingPrice\">{{__('Selling Price:')}}</label>\n                    <input type=\"number\" name=\"sellingPrice\" class=\"form-control\" value=\"{{ old('sellingPrice', $product->sellingPrice) }}\">\n                </div>\n                <div class=\"col-md-3\">\n                    <label for=\"image_url\">{{__('Image URL:')}}</label>\n                    <input type=\"text\" name=\"image_url\" class=\"form-control\" value=\"{{ old('image_url', $product->image_url) }}\">\n                </div>\n                <div class=\"col-md-3\">\n                    <label for=\"weight\">{{__('Weight')}} (in kg):</label>\n                    <input type=\"number\" name=\"weight\" step=\"0.01\" class=\"form-control\" value=\"{{ old('weight', $product->weight) }}\">\n                </div>\n                <div class=\"col-md-6\">\n                    <label for=\"description\">{{__('Description:')}}</label>\n                    <textarea name=\"description\" class=\"form-control\">{{ old('description', $product->description) }}</textarea>\n                </div>\n            </div>\n            <button type=\"submit\" class=\"btn btn-primary\">{{__('Update')}}</button>\n        </form>\n    </div>\n</body>\n<script src=\"https://code.jquery.com/jquery-3.5.1.min.js\"></script>\n<script src=\"{{ asset('assets/notify.min.js') }}\"></script>\n\n<script>\n    $(document).ready(function($) {\n        // Start Show Validation Error messages==========================================================\n        @if ($errors->any())\n            @foreach ($errors->all() as $error)\n                $.notify(\"{{ $error }}\", \"error\");\n            @endforeach\n        @endif\n        // End Show Validation Error messages==========================================================\n\n        // Start Show Success message ====================================================================\n        @if (session('success'))\n            $.notify(\"{{ session('success') }}\", \"success\");\n        @endif\n        // End Show Success message ====================================================================\n    });\n</script>\n\n</html>\n"
  },
  {
    "path": "resources/views/CRUD/index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Document</title>\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css\">\n@endsection\n\n@section('content')\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <h1>{{__('Product List')}}</h1>\n            </div>\n        </div>\n        {{-- Start Create Button================================================================== --}}\n        <div class=\"row mb-3\">\n            <div class=\"col-md-12\">\n                <a href=\"{{ route('products.create') }}\" class=\"btn btn-success\">{{__('Create Product')}}</a>\n            </div>\n        </div>\n        {{-- End Create Button================================================================== --}}\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <table class=\"table table-striped table-bordered\" width=\"100%\">\n                    <thead>\n                        <tr>\n                            <th>{{__('Name')}}</th>\n                            <th>{{__('Quantity')}}</th>\n                            <th>{{__('Buying Price')}}</th>\n                            <th>{{__('Selling Price')}}</th>\n                            <th>{{__('Description')}}</th>\n                            <th>{{__('Actions')}}</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        @foreach ($products as $product)\n                            <tr>\n                                <td>{{ $product->name }}</td>\n                                <td>{{ $product->quantity }}</td>\n                                <td>{{ $product->buyingPrice }}</td>\n                                <td>{{ $product->sellingPrice }}</td>\n                                <td>{{ $product->description }}</td>\n                                <td>\n                                    <a href=\"{{ route('products.edit', $product->id) }}\" class=\"btn btn-primary editButton\">Edit</a>\n                                    <form method=\"POST\" action=\"{{ route('products.destroy', $product->id) }}\" style=\"display: inline;\">\n                                        @csrf\n                                        @method('DELETE')\n                                        <button type=\"submit\" class=\"btn btn-danger deleteButton\"\n                                            onclick=\"return confirm('Are you sure you want to delete this product?')\">Delete</button>\n                                    </form>\n                                </td>\n                            </tr>\n                        @endforeach\n                    </tbody>\n                </table>\n            </div>\n        </div>\n        {{-- Start Pagination============================================================ --}}\n        <div class=\"d-flex justify-content-center\" id=\"paginiation\">\n            {{ $products->links('pagination::bootstrap-5') }}\n        </div>\n        {{-- End Pagination============================================================ --}}\n    </div>\n\n    <script src=\"https://code.jquery.com/jquery-3.5.1.min.js\"></script>\n    <script src=\"{{ asset('assets/notify.min.js') }}\"></script>\n    <script>\n        $(document).ready(function($) {\n            // Start Show Validation Error messages==========================================================\n            @if ($errors->any())\n                @foreach ($errors->all() as $error)\n                    $.notify(\"{{ $error }}\", \"error\");\n                @endforeach\n            @endif\n            // End Show Validation Error messages==========================================================\n\n            // Start Show Success message ====================================================================\n            @if (session('success'))\n                $.notify(\"{{ session('success') }}\", \"success\");\n            @endif\n            // End Show Success message ====================================================================\n            $('.notifyjs-corner').css('z-index', 999999);\n\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/Chat/Index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Chat Application</title>\n    <link rel=\"stylesheet\" href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css\">\n    <style>\n        /* Style for round user image */\n        .user_image {\n            width: 40px;\n            height: 40px;\n            background-size: cover;\n            background-position: center;\n            border-radius: 50%;\n        }\n\n        /* Style for sender messages */\n        .send_messages {\n            /* display: flex;\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    justify-content: flex-end;\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    margin-bottom: 15px; */\n            display: flex;\n            justify-content: flex-start;\n            margin-bottom: 15px;\n            flex-direction: row-reverse;\n        }\n\n        .send_messages .msg-bubble {\n            background-color: #d3d3d3;\n            /* Gray background color for sender messages */\n            border-radius: 10px;\n            max-width: 70%;\n            padding: 10px;\n            display: flex;\n            align-items: center;\n        }\n\n        /* Move the user image to the right */\n        .send_messages .user_image {\n            margin-left: 10px;\n        }\n\n        /* Style for receiver messages */\n        .received_messages {\n            display: flex;\n            justify-content: flex-start;\n            margin-bottom: 15px;\n        }\n\n        .received_messages .msg-bubble {\n            background-color: #3498db;\n            /* Blue background color for receiver messages */\n            border-radius: 10px;\n            max-width: 70%;\n            padding: 10px;\n            display: flex;\n            align-items: center;\n        }\n\n        /* Move the user image to the left */\n        .received_messages .user_image {\n            margin-right: 10px;\n        }\n\n        /* Style for card-body to make it scrollable and take 100% height */\n        .card-body {\n            overflow-y: auto;\n            max-height: calc(100vh - 150px);\n            /* Adjusted based on your card-footer height */\n        }\n\n\n        .users-list {\n            padding: 10px;\n            background-color: #f8f9fa;\n            border-radius: 5px;\n            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n        }\n\n        .user-item {\n            display: flex;\n            align-items: center;\n            margin-bottom: 10px;\n            cursor: pointer;\n        }\n\n        .user-item:hover {\n            background-color: #e6e6e6;\n        }\n\n        .user-item p {\n            margin-left: 10px;\n            font-weight: bold;\n        }\n\n        /* Style for round user image in users list */\n        .user-item .user_image {\n            width: 30px;\n            height: 30px;\n            background-size: cover;\n            background-position: center;\n            border-radius: 50%;\n            margin-right: 10px;\n        }\n\n        .user-item.active {\n            background-color: #007bff;\n            /* Adjust the color as needed */\n            color: #fff;\n            /* Adjust the text color as needed */\n        }\n\n        #outgoing {\n            width: 600px;\n            word-wrap: break-word;\n            white-space: normal;\n        }\n    </style>\n@endsection\n\n@section('content')\n    <div class=\"container\">\n        <br>\n        <div class=\"row\">\n            <div class=\"col-md-2\">\n                <div class=\"users-list\">\n                    @foreach ($users as $user)\n                        <div class=\"user-item\" id=\"{{ $user->id }}\" onclick=\"selectUser({{ $user->id }})\">\n                            <a href=\"#\">\n                                <div class=\"user_image\" style=\"background-image: url('{{ URL::asset('assets/img/avatars/1.png') }}')\"></div>\n                            </a>\n                            <p>{{ $user->name }}</p>\n                        </div>\n                    @endforeach\n                </div>\n            </div>\n\n            <div class=\"col-md-10\">\n                <div class=\"card\">\n                    <div class=\"card-header\">\n                        <p>Messenger</p>\n                    </div>\n                    <div class=\"card-body\">\n                    </div>\n                    <div class=\"card-footer\">\n                        <input type=\"text\" class=\"form-control\" id=\"messageInput\" placeholder=\"Enter your message...\">\n                        <button type=\"button\" onclick=\"sendMessage()\" class=\"btn btn-success\" id=\"sendButton\">Send</button>\n                        <input type=\"file\" id=\"imageUpload\" accept=\"image/*\" style=\"display:none;\">\n                        <button type=\"button\" onclick=\"document.getElementById('imageUpload').click();\" class=\"btn btn-info\">Upload Image</button>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection\n\n\n@section('script')\n    <script src=\"https://unpkg.com/peerjs@1.5.2/dist/peerjs.min.js\"></script>\n    <script>\n        var userID = null;\n        // Trigger send action on Enter key press\n        $(\"#messageInput\").on('keypress', function(e) {\n            if (e.which === 13) {\n                sendMessage(); // Call your send message function\n            }\n        });\n\n        function sendMessage() {\n            $.ajax({\n                type: 'post',\n                url: '{{ URL('send-message') }}',\n                data: {\n                    '_token': \"{{ csrf_token() }}\",\n                    'message': $(\"#messageInput\").val(),\n                    'user': userID,\n                },\n                success: function(data) {\n                    console.log(data);\n                    addMessageToBoard(data);\n                }\n            });\n            $(\"#messageInput\").val('');\n\n        };\n\n        newMessages = new EventSource(`{{ URL('/get-new-messages') }}/0}`);\n\n        function setupEventSource() {\n            newMessages.close();\n            if (userID) {\n                // Close existing EventSource connection if it exists\n                if (newMessages) {\n                    newMessages.close();\n                }\n\n                // Create a new EventSource for the selected user\n                newMessages = new EventSource(`{{ URL('/get-new-messages') }}/${userID}`);\n\n                newMessages.onmessage = function(event) {\n                    let message = JSON.parse(event.data);\n                    addMessageToBoard(message.item);\n                };\n            }\n        }\n\n\n        function selectUser(userId) {\n            $(\".user-item\").removeClass(\"active\");\n            $(`#${userId}`).addClass(\"active\");\n            $(\".card-body\").empty();\n            userID = userId;\n            getChatHistory();\n            setupEventSource();\n        }\n\n        function getChatHistory() {\n            $(\".card-body\").empty();\n\n            $.ajax({\n                type: 'get',\n                headers: {\n                    'Authorization': 'Bearer ' + localStorage.getItem('token')\n                },\n                url: '{{ URL('communication-history') }}',\n                data: {\n                    'userID': userID\n                },\n                success: function(data) {\n                    console.log(data);\n                    data.forEach(function(message) {\n                        addMessageToBoard(message);\n                    });\n                }\n            });\n        }\n\n\n        $('#imageUpload').on('change', function() {\n            var file = $(this)[0].files[0];\n            var formData = new FormData();\n            formData.append('image', file);\n            formData.append('_token', \"{{ csrf_token() }}\");\n            formData.append('userID', userID);\n            $.ajax({\n                url: '{{ URL('upload-communication-photo') }}',\n                type: 'POST',\n                data: formData,\n                contentType: false,\n                processData: false,\n                success: function(response) {\n                    console.log(response);\n                    addMessageToBoard(response)\n                },\n                error: function(error) {\n                    console.error(error);\n                }\n            });\n        });\n\n\n        function addMessageToBoard(message) {\n            if (message.send_by == {{ Auth::user()->id }}) {\n                // Append sent messages\n                $(\".card-body\").append(`\n                        <div class=\"send_messages\">\n                            <div class=\"user_image\" style=\"background-image: url({{ URL::asset('assets/img/avatars/1.png') }})\"></div>\n                            <div class=\"msg-bubble\">\n                                <div class=\"msg-text\">\n                                    ${checkMessageType(message)}\n                                </div>\n                            </div>\n                        </div>\n                    `);\n            } else {\n                // Append received messages\n                $(\".card-body\").append(`\n                        <div class=\"received_messages\">\n                            <div class=\"user_image\" style=\"background-image: url({{ URL::asset('assets/img/avatars/1.png') }})\"></div>\n                            <div class=\"msg-bubble\">\n                                <div class=\"msg-text\">\n                                    ${checkMessageType(message)}\n                                </div>\n                            </div>\n                        </div>\n                    `);\n            }\n        }\n\n        function checkMessageType(message) {\n            if (message.message_type == 'text') {\n                return message.message;\n            }\n\n            if (message.message_type == 'attachment') {\n                return `\n                    <img style=\"width:250px\" src=\"{{ URL::asset('/') }}${message.message}\"/>\n                `\n            }\n        }\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/CurrencyConverter/index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <link rel=\"stylesheet\" href=\"{{ asset('assets/bootstrap-5.3.2-dist/css/bootstrap.min.css') }}\">\n\n    <title>Currency Exchange Rates</title>\n    <style>\n        .currency-cards {\n            max-width: 200px;\n            margin-right: 20px;\n        }\n\n        .currency-card {\n            display: flex;\n            align-items: center;\n            justify-content: start;\n            border: 1px solid #ddd;\n            border-radius: 8px;\n            padding: 10px;\n            margin-bottom: 10px;\n            cursor: pointer;\n            transition: all 0.3s ease;\n        }\n\n        .currency-card img {\n            width: 30px;\n            height: 20px;\n            margin-right: 10px;\n        }\n\n        .currency-card.active {\n            background-color: #0d6efd;\n            color: white;\n        }\n\n        .table-container {\n            flex: 1;\n            margin-right: auto;\n        }\n\n        table {\n            width: 100%;\n            border-collapse: collapse;\n            margin-top: 20px;\n        }\n\n        th,\n        td {\n            border: 1px solid #ddd;\n            text-align: center;\n            padding: 8px;\n        }\n\n        th {\n            background-color: #f8f9fa;\n        }\n\n        .exchange-data {\n            margin-top: 20px;\n        }\n    </style>\n@endsection\n\n@section('content')\n    <div class=\"container\">\n        <h2>Exchange Rates</h2>\n        <p id=\"lastUpdateTime\">Last updated: N/A</p>\n        <a href=\"https://www.exchangerate-api.com\">Rates By Exchange Rate API</a>\n\n        <div class=\"row\">\n            <div class=\"col-md-8\">\n                <table>\n                    <thead>\n                        <tr>\n                            <th>Currency</th>\n                            <th>Exchange Rates</th>\n                        </tr>\n                    </thead>\n                    <tbody id=\"exchangeTableBody\">\n                        <tr>\n                            <td colspan=\"2\">Fetching rates...</td>\n                        </tr>\n                    </tbody>\n                </table>\n            </div>\n\n            <div class=\"col-md-4\">\n                <div class=\"currency-cards\">\n                    <h4>Select Currency</h4>\n                    <div class=\"currency-card\" data-currency=\"usd\">\n                        <img src=\"https://flagcdn.com/w40/us.png\" alt=\"US Flag\"> USD\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"EUR\">\n                        <img src=\"https://flagcdn.com/w40/eu.png\" alt=\"EU Flag\"> EUR\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"GBP\">\n                        <img src=\"https://flagcdn.com/w40/gb.png\" alt=\"UK Flag\"> GBP\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"AUD\">\n                        <img src=\"https://flagcdn.com/w40/au.png\" alt=\"Australia Flag\"> AUD\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"AFN\">\n                        <img src=\"https://flagcdn.com/w40/af.png\" alt=\"Afghanistan Flag\"> AFN\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"CAD\">\n                        <img src=\"https://flagcdn.com/w40/ca.png\" alt=\"Canada Flag\"> CAD\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"JPY\">\n                        <img src=\"https://flagcdn.com/w40/jp.png\" alt=\"Japan Flag\"> JPY\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"CNY\">\n                        <img src=\"https://flagcdn.com/w40/cn.png\" alt=\"China Flag\"> CNY\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"INR\">\n                        <img src=\"https://flagcdn.com/w40/in.png\" alt=\"India Flag\"> INR\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"BRL\">\n                        <img src=\"https://flagcdn.com/w40/br.png\" alt=\"Brazil Flag\"> BRL\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"MXN\">\n                        <img src=\"https://flagcdn.com/w40/mx.png\" alt=\"Mexico Flag\"> MXN\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"ZAR\">\n                        <img src=\"https://flagcdn.com/w40/za.png\" alt=\"South Africa Flag\"> ZAR\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"RUB\">\n                        <img src=\"https://flagcdn.com/w40/ru.png\" alt=\"Russia Flag\"> RUB\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"KRW\">\n                        <img src=\"https://flagcdn.com/w40/kr.png\" alt=\"South Korea Flag\"> KRW\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"TRY\">\n                        <img src=\"https://flagcdn.com/w40/tr.png\" alt=\"Turkey Flag\"> TRY\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"NZD\">\n                        <img src=\"https://flagcdn.com/w40/nz.png\" alt=\"New Zealand Flag\"> NZD\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"CHF\">\n                        <img src=\"https://flagcdn.com/w40/ch.png\" alt=\"Switzerland Flag\"> CHF\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"SGD\">\n                        <img src=\"https://flagcdn.com/w40/sg.png\" alt=\"Singapore Flag\"> SGD\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"HKD\">\n                        <img src=\"https://flagcdn.com/w40/hk.png\" alt=\"Hong Kong Flag\"> HKD\n                    </div>\n                    <div class=\"currency-card\" data-currency=\"SEK\">\n                        <img src=\"https://flagcdn.com/w40/se.png\" alt=\"Sweden Flag\"> SEK\n                    </div>\n                </div>\n\n\n\n\n\n\n\n\n\n\n            </div>\n\n        </div>\n    </div>\n@endsection\n\n@section('script')\n    <script>\n        $(document).ready(function() {\n            let source;\n\n            function startSSE(currency) {\n                if (source) source.close(); // Close existing SSE connection\n                source = new EventSource(`/currency-converter/sse?currency=${currency}`);\n\n                source.onmessage = function(event) {\n                    const data = JSON.parse(event.data);\n\n                    if (data.result != 'success') {\n                        $('#exchangeTableBody').html('<tr><td colspan=\"2\">Error fetching data</td></tr>');\n                        source.close();\n                    } else {\n                        updateTable(data.rates);\n                        updateLastUpdateTime(data.lastUpdated);\n\n                    }\n                };\n\n                source.onerror = function() {\n                    $('#exchangeTableBody').html('<tr><td colspan=\"2\">Error fetching data</td></tr>');\n                    source.close();\n                };\n            }\n\n            function updateTable(rates) {\n                const tableBody = $('#exchangeTableBody');\n                tableBody.empty(); // Clear the table\n\n                for (const [currency, rate] of Object.entries(rates)) {\n                    tableBody.append(`\n                <tr>\n                    <td>${currency}</td>\n                    <td>${rate.toFixed(2)}</td>\n                </tr>\n            `);\n                }\n            }\n\n            function updateLastUpdateTime(timestamp) {\n                $('#lastUpdateTime').text(`Last updated: ${timestamp}`);\n            }\n\n            $('.currency-card').click(function() {\n                const selectedCurrency = $(this).data('currency');\n\n                // Mark the selected card as active\n                $('.currency-card').removeClass('active');\n                $(this).addClass('active');\n\n                // Start SSE for the selected currency\n                startSSE(selectedCurrency);\n            });\n\n            // Start with USD as the default currency\n            $('.currency-card[data-currency=\"USD\"]').addClass('active');\n            startSSE('USD');\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/Datatable/index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{ asset('assets/bootstrap-5.3.2-dist/css/bootstrap.min.css') }}\">\n\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{ asset('assets/DataTables/datatables.min.css') }}\">\n    {{-- Start Adding Button ------------------------------------------------------------------------------------------------------- --}}\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{ asset('assets/DataTables/Buttons-2.4.2/css/buttons.dataTables.min.css') }}\">\n    {{-- End Adding Button ------------------------------------------------------------------------------------------------------- --}}\n    {{-- Start Row ReOrdering------------------------------------------------------------------------------------------------------ --}}\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{ asset('assets/DataTables/RowReorder-1.4.1/css/rowReorder.dataTables.min.css') }}\">\n    {{-- End Row ReOrdering------------------------------------------------------------------------------------------------------ --}}\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n@endsection\n\n@section('content')\n    <h2>{{__('Countries DataTable')}}</h2>\n    <div class=\"card\">\n        <div class=\"card-body\">\n            <table id=\"countries-table\" class=\"table\">\n                <thead>\n                    <tr>\n                        <th>{{__('ID')}}</th>\n                        <th>{{__('Name')}}</th>\n                        <th>{{__('Order Number')}}</th>\n                        <th>{{__('Created At')}}</th>\n                        <th>{{__('Updated At')}}</th>\n                        <th>{{__('Action')}}</th>\n                    </tr>\n                </thead>\n                <tbody></tbody>\n            </table>\n        </div>\n    </div>\n@endsection\n\n@section('script')\n    <script type=\"text/javascript\" charset=\"utf8\" src=\"{{ asset('assets/DataTables/datatables.min.js') }}\"></script>\n    {{-- Start Adding Button ------------------------------------------------------------------------------------------------------- --}}\n    <script type=\"text/javascript\" charset=\"utf8\" src=\"{{ asset('assets/DataTables/Buttons-2.4.2/js/dataTables.buttons.min.js') }}\"></script>\n    <script type=\"text/javascript\" charset=\"utf8\" src=\"{{ asset('assets/DataTables/JSZip-3.10.1/jszip.min.js') }}\"></script>\n    <script type=\"text/javascript\" charset=\"utf8\" src=\"{{ asset('assets/DataTables/pdfmake-0.2.7/pdfmake.min.js') }}\"></script>\n    <script type=\"text/javascript\" charset=\"utf8\" src=\"{{ asset('assets/DataTables/pdfmake-0.2.7/vfs_fonts.js') }}\"></script>\n    <script type=\"text/javascript\" charset=\"utf8\" src=\"{{ asset('assets/DataTables/Buttons-2.4.2/js/buttons.html5.min.js') }}\"></script>\n    {{-- End Adding Button ------------------------------------------------------------------------------------------------------- --}}\n\n    {{-- Start Row ReOrdering------------------------------------------------------------------------------------------------------ --}}\n    <script type=\"text/javascript\" charset=\"utf8\" src=\"{{ asset('assets/DataTables/RowReorder-1.4.1/js/dataTables.rowReorder.min.js') }}\"></script>\n    {{-- End Row ReOrdering------------------------------------------------------------------------------------------------------ --}}\n\n    <script>\n        $(document).ready(function() {\n            var table = $('#countries-table').DataTable({\n                \"processing\": true,\n                \"serverSide\": true,\n                \"ajax\": \"{{ URL('countries') }}\",\n                \"columns\": [{\n                        \"data\": \"id\"\n                    },\n                    {\n                        \"data\": \"name\"\n                    },\n                    {\n                        \"data\": \"order_number\"\n                    },\n                    {\n                        \"data\": \"created_at\"\n                    },\n                    {\n                        \"data\": \"updated_at\"\n                    },\n                    {\n                        render: function(data, type, row) {\n                            return `<input type=\"button\" class=\"btn btn-success edit-btn\" value=\"Edit\"/>\n                            <input type=\"button\" class=\"btn btn-danger\" value=\"Delete\"/>\n                            `;\n                        },\n                    }\n                ],\n                order: [\n                    [2, 'asc']\n                ],\n                \"pageLength\": 25,\n                // Start Adding Buttons -----------------------------------\n                dom: 'Bfrtip',\n                buttons: [\n                    'copy', 'csv', 'excel', 'pdf', 'print'\n                ],\n                // End Adding Buttons ------------------------------------\n\n                // Enable inline editing for the 'Name' column -------------------\n                \"columnDefs\": [{\n                    \"targets\": 1, // 'Name' column index\n                    \"render\": function(data, type, row) {\n                        return `<div class=\"editable\" data-name=\"name\" data-pk=\"${row.id}\">${data}</div>`;\n                    }\n                }],\n\n                // Enable Row Reordering based on 'Order Number' column ----------\n                rowReorder: {\n                    dataSrc: 'order_number',\n                    update: false, // Prevent automatic update after reorder\n                },\n            });\n\n            // Handle inline editing on button click ----------------------------\n            $('#countries-table').on('click', '.edit-btn', function() {\n                var $this = $(this);\n                var $editable = $this.closest('tr').find('.editable');\n\n                // Check if the cell is already in edit mode\n                if (!$editable.hasClass('editing')) {\n                    // Enter edit mode\n                    var currentValue = $editable.text().trim();\n                    $editable.addClass('editing');\n                    $editable.html(`<input type=\"text\" class=\"form-control\" value=\"${currentValue}\"/>`);\n                }\n            });\n\n            // Handle focusout event to exit edit mode -------------------------\n            $('#countries-table').on('focusout', '.editable input', function() {\n                var $this = $(this);\n                var $editable = $this.closest('.editable');\n                var pk = $editable.data('pk');\n                var name = $editable.data('name');\n                var value = $this.val();\n\n                // Update the table cell if a new value is provided ----------------\n                $.ajax({\n                    url: '{{ URL('countries/update') }}',\n                    method: 'POST',\n                    headers: {\n                        'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')\n                    },\n                    data: {\n                        id: pk,\n                        name: value\n                    },\n                    success: function(response) {\n                        // Handle success\n                        console.log(response);\n                        // Update the cell in the DataTable\n                        table.cell($editable).data(value);\n                    },\n                    error: function(error) {\n                        // Handle error\n                        console.error(error);\n                    }\n                });\n\n                // Exit edit mode\n                $editable.removeClass('editing');\n                $editable.html(value);\n            });\n\n            // End inline Editing ---------------------------------------------\n\n\n\n\n\n            // Start Reordering Rows\n            table.on('row-reorder', function(e, diff, edit) {\n                for (var i = 0, ien = diff.length; i < ien; i++) {\n                    var rowData = table.row(diff[i].node).data();\n                    rowData.order_number = diff[i].newData;\n                    table.row(diff[i].node).data(rowData);\n                }\n\n                // Get the new order of the rows\n                var newOrder = table.rows().data().toArray().map(function(row) {\n                    return row.order_number;\n                });\n\n                var ids = table.rows().data().toArray().map(function(row) {\n                    return row.id;\n                });\n\n                $(function() {\n                    $.ajax({\n                        type: 'POST',\n                        headers: {\n                            'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')\n                        },\n                        url: '{{ URL('countries/reordering') }}',\n                        data: {\n                            id: ids,\n                            order_number: newOrder\n                        },\n                        success: function(data) {\n                            console.log(data);\n                        }\n                    });\n                });\n            });\n\n            // End Reordering Rows\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/DropZone/index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Image Upload</title>\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n\n    <link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css\">\n    <style>\n        body {\n            font-family: Arial, sans-serif;\n            background-color: #f5f5f5;\n            margin: 0;\n            padding: 0;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            height: 100vh;\n        }\n\n        .drop-zone {\n            background-color: #fff;\n            padding: 20px;\n            border-radius: 8px;\n            box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);\n            width: 100%;\n            text-align: center;\n        }\n\n        .drop-zone.active {\n            border: 2px dashed #3490dc;\n        }\n\n        #progressBar {\n            width: 100%;\n            height: 10px;\n            background-color: #f0f0f0;\n            border-radius: 4px;\n            margin-top: 10px;\n            overflow: hidden;\n        }\n\n        #progress {\n            height: 100%;\n            background-color: #3490dc;\n            width: 0;\n        }\n\n        .img-thumbnail {\n            border: 1px solid #ddd;\n            border-radius: 4px;\n            padding: 4px;\n            max-width: 100px;\n            max-height: 100px;\n            margin-right: 10px;\n            margin-bottom: 10px;\n        }\n    </style>\n@endsection\n\n@section('content')\n    <div class=\"container mt-5\">\n        <div class=\"card\">\n            <div class=\"card-body\">\n                <h2 class=\"text-center\">{{__('Image Upload')}}</h2>\n                <div id=\"drop-zone\" class=\"drop-zone border\">\n                    <span class=\"drop-text\">{{__('Drag and drop files here or click to select files')}}</span>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"progress mt-3\">\n            <div id=\"progress-bar\" class=\"progress-bar\" role=\"progressbar\" style=\"width: 0%;\" aria-valuenow=\"0\" aria-valuemin=\"0\" aria-valuemax=\"100\">0%</div>\n        </div>\n        <div id=\"uploaded-images\" class=\"mt-3 d-flex flex-wrap\"></div>\n    </div>\n    <script src=\"https://code.jquery.com/jquery-3.5.1.min.js\"></script>\n    <script src=\"https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js\"></script>\n\n    <script>\n        $(document).ready(function() {\n            var dropZone = document.getElementById('drop-zone');\n            var progressBar = document.getElementById('progress-bar');\n            var uploadedImages = document.getElementById('uploaded-images');\n\n            dropZone.addEventListener('dragover', function(e) {\n                e.preventDefault();\n                dropZone.classList.add('active');\n            });\n\n            dropZone.addEventListener('dragleave', function() {\n                dropZone.classList.remove('active');\n            });\n\n            dropZone.addEventListener('drop', function(e) {\n                e.preventDefault();\n                dropZone.classList.remove('active');\n                var files = e.dataTransfer.files;\n                uploadImages(files, 0);\n            });\n\n            function uploadImages(files, index) {\n                if (index >= files.length) {\n                    return;\n                }\n\n                var formData = new FormData();\n                formData.append('images[]', files[index]);\n                $.ajax({\n                    type: 'POST',\n                    url: '/drop-zone',\n                    data: formData,\n                    processData: false,\n                    contentType: false,\n                    headers: {\n                        'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')\n                    },\n                    xhr: function() {\n                        var xhr = new window.XMLHttpRequest();\n                        xhr.upload.addEventListener('progress', function(event) {\n                            if (event.lengthComputable) {\n                                var percent = (event.loaded / event.total) * 100;\n                                progressBar.style.width = percent + '%';\n                                progressBar.textContent = percent.toFixed(2) + '%';\n                            }\n                        });\n                        return xhr;\n                    },\n                    success: function(response) {\n                        progressBar.style.width = '0%';\n                        progressBar.textContent = '0%';\n\n                        var imageThumbnail = document.createElement('img');\n                        imageThumbnail.src = `{{ URL::asset('images') }}/` + response.filename;\n                        imageThumbnail.className = 'img-thumbnail mr-2';\n                        uploadedImages.appendChild(imageThumbnail);\n\n                        uploadImages(files, index + 1);\n                    }\n                });\n            }\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/Dusk/index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap-datepicker@1.9.0/dist/css/bootstrap-datepicker.min.css\">\n@endsection\n@section('content')\n    <div class=\"container mt-5\">\n        <h2>{{__('Test Page for Laravel Dusk')}}</h2>\n\n        <!-- Text Input -->\n        <div class=\"mb-3\">\n            <label for=\"text_input\" class=\"form-label\">{{__('Text Input:')}}</label>\n            <input type=\"text\" class=\"form-control\" id=\"text_input\" name=\"text_input\" placeholder=\"Enter text\">\n        </div>\n\n        <!-- Select Option -->\n        <div class=\"mb-3\">\n            <label for=\"select_option\" class=\"form-label\">{{__('Select Option:')}}</label>\n            <select class=\"form-select\" id=\"select_option\" name=\"select_option\">\n                <option value=\"option1\">{{__('Option 1')}}</option>\n                <option value=\"option2\">{{__('Option 2')}}</option>\n                <option value=\"option3\">{{__('Option 3')}}</option>\n            </select>\n        </div>\n\n        <!-- Radio Buttons -->\n        <div class=\"mb-3\">\n            <label class=\"form-label\">{{__('Radio Buttons:')}}</label>\n            <div class=\"form-check\">\n                <input class=\"form-check-input\" type=\"radio\" name=\"radio_options\" id=\"radio_option1\" value=\"option1\">\n                <label class=\"form-check-label\" for=\"radio_option1\">{{__('Radio Option 1')}}</label>\n            </div>\n            <div class=\"form-check\">\n                <input class=\"form-check-input\" type=\"radio\" name=\"radio_options\" id=\"radio_option2\" value=\"option2\">\n                <label class=\"form-check-label\" for=\"radio_option2\">{{__('Radio Option 2')}}</label>\n            </div>\n        </div>\n\n        <!-- Checkboxes -->\n        <div class=\"mb-3\">\n            <label class=\"form-label\">{{__('Checkboxes:')}}</label>\n            <div class=\"form-check\">\n                <input class=\"form-check-input\" type=\"checkbox\" value=\"checkbox1\" id=\"checkbox1\" name=\"checkbox_options[]\">\n                <label class=\"form-check-label\" for=\"checkbox1\">{{__('Checkbox 1')}}</label>\n            </div>\n            <div class=\"form-check\">\n                <input class=\"form-check-input\" type=\"checkbox\" value=\"checkbox2\" id=\"checkbox2\" name=\"checkbox_options[]\">\n                <label class=\"form-check-label\" for=\"checkbox2\">{{__('Checkbox 2')}}</label>\n            </div>\n        </div>\n\n        <!-- Date Picker -->\n        <div class=\"mb-3\">\n            <label for=\"date_picker\" class=\"form-label\">{{__('Date Picker:')}}</label>\n            <input type=\"text\" class=\"form-control datepicker\" id=\"date_picker\" name=\"date_picker\" placeholder=\"Select a date\">\n        </div>\n\n        <!-- File Upload -->\n        <div class=\"mb-3\">\n            <label for=\"file_upload\" class=\"form-label\">{{__('File Upload:')}}</label>\n            <input type=\"file\" class=\"form-control\" id=\"file_upload\" name=\"file_upload\">\n        </div>\n\n        <!-- Bootstrap Modal Trigger Button -->\n        <button type=\"button\" class=\"btn btn-primary mt-3\" data-bs-toggle=\"modal\" data-bs-target=\"#exampleModal\">\n            {{__('Open Bootstrap Modal')}}\n        </button>\n\n        <!-- Bootstrap Modal -->\n        <div class=\"modal fade\" id=\"exampleModal\" tabindex=\"-1\" aria-labelledby=\"exampleModalLabel\" aria-hidden=\"true\">\n            <div class=\"modal-dialog\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header\">\n                        <h5 class=\"modal-title\" id=\"exampleModalLabel\">{{__('Modal Title')}}</h5>\n                        <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n                    </div>\n                    <div class=\"modal-body\">\n                        <!-- Form inside the Modal -->\n                        <form id=\"modalForm\">\n                            <!-- Text Input -->\n                            <div class=\"mb-3\">\n                                <label for=\"modal_text_input\" class=\"form-label\">{{__('Text Input:')}}</label>\n                                <input type=\"text\" class=\"form-control\" id=\"modal_text_input\" name=\"modal_text_input\" placeholder=\"Enter text\">\n                            </div>\n\n                            <!-- Select Option -->\n                            <div class=\"mb-3\">\n                                <label for=\"modal_select_option\" class=\"form-label\">{{__('Select Option:')}}</label>\n                                <select class=\"form-select\" id=\"modal_select_option\" name=\"modal_select_option\">\n                                    <option value=\"option1\">{{__('Option 1')}}</option>\n                                    <option value=\"option2\">{{__('Option 2')}}</option>\n                                    <option value=\"option3\">{{__('Option 3')}}</option>\n                                </select>\n                            </div>\n\n                            <!-- Radio Buttons -->\n                            <div class=\"mb-3\">\n                                <label class=\"form-label\">{{__('Radio Buttons:')}}</label>\n                                <div class=\"form-check\">\n                                    <input class=\"form-check-input\" type=\"radio\" name=\"modal_radio_options\" value=\"option1\">\n                                    <label class=\"form-check-label\" for=\"modal_radio_option1\">{{__('Radio Option 1')}}</label>\n                                </div>\n                                <div class=\"form-check\">\n                                    <input class=\"form-check-input\" type=\"radio\" name=\"modal_radio_options\" value=\"option2\">\n                                    <label class=\"form-check-label\" for=\"modal_radio_option2\">{{__('Radio Option 2')}}</label>\n                                </div>\n                            </div>\n\n                            <!-- Checkboxes -->\n                            <div class=\"mb-3\">\n                                <label class=\"form-label\">{{__('Checkboxes:')}}</label>\n                                <div class=\"form-check\">\n                                    <input class=\"form-check-input\" type=\"checkbox\" value=\"modal_checkbox1\" id=\"modal_checkbox1\"\n                                        name=\"modal_checkbox_options[]\">\n                                    <label class=\"form-check-label\" for=\"modal_checkbox1\">{{__('Checkbox 1')}}</label>\n                                </div>\n                                <div class=\"form-check\">\n                                    <input class=\"form-check-input\" type=\"checkbox\" value=\"modal_checkbox2\" id=\"modal_checkbox2\"\n                                        name=\"modal_checkbox_options[]\">\n                                    <label class=\"form-check-label\" for=\"modal_checkbox2\">{{__('Checkbox 2')}}</label>\n                                </div>\n                            </div>\n\n                        </form>\n                    </div>\n                    <div class=\"modal-footer\">\n                        <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">{{__('Close')}}</button>\n                        <button type=\"button\" class=\"btn btn-primary\" onclick=\"submitModalForm()\">{{__('Save changes')}}</button>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n\n\n\n        <!-- Additional Elements for Testing -->\n        <div class=\"mt-3\">\n            <label>{{__('Additional Elements for Testing:')}}</label>\n            <!-- Alert Button -->\n            <button type=\"button\" class=\"btn btn-warning\" onclick=\"showAlert()\">{{__('Show Alert')}}</button>\n\n            <!-- Confirm Dialog Button -->\n            <button type=\"button\" class=\"btn btn-danger\" onclick=\"showConfirmDialog()\">{{__('Show Confirm Dialog')}}</button>\n        </div>\n    </div>\n@endsection\n\n@section('script')\n    <script src=\"https://cdn.jsdelivr.net/npm/bootstrap-datepicker@1.9.0/dist/js/bootstrap-datepicker.min.js\"></script>\n\n    <script>\n        $(document).ready(function() {\n            $('.datepicker').datepicker({\n                format: 'yyyy-mm-dd',\n                autoclose: true,\n                todayHighlight: true\n            });\n        });\n\n        function showAlert() {\n            // Show an alert\n            alert(\"This is a sample alert!\");\n        }\n\n        function showConfirmDialog() {\n            // Show a confirm dialog\n            var result = confirm(\"Do you want to proceed?\");\n            if (result) {\n                // User clicked 'OK'\n                alert(\"You clicked OK!\");\n            } else {\n                // User clicked 'Cancel'\n                alert(\"You clicked Cancel!\");\n            }\n        }\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/EncryptAndDecrypt/create.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <h1>{{__('Create a Note')}}</h1>\n    <form method=\"POST\" action=\"/notes/store\">\n        @csrf\n        <div class=\"form-group\">\n            <label for=\"title\">{{__('Title')}}</label>\n            <input type=\"text\" class=\"form-control\" id=\"title\" name=\"title\">\n        </div>\n        <div class=\"form-group\">\n            <label for=\"content\">{{__('Content')}}</label>\n            <textarea class=\"form-control\" id=\"content\" name=\"content\"></textarea>\n        </div>\n        <button type=\"submit\" class=\"btn btn-primary\">{{__('Create')}}</button>\n    </form>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/EncryptAndDecrypt/edit.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <div class=\"container\">\n        <h1>{{__('Edit Note')}}</h1>\n        <form method=\"POST\" action=\"/notes/{{ $note->id }}\">\n            @csrf\n            @method('PUT')\n            <div class=\"form-group\">\n                <label for=\"title\">{{__('Title')}}</label>\n                <input type=\"text\" class=\"form-control\" id=\"title\" name=\"title\" value=\"{{ $note->title }}\">\n            </div>\n            <div class=\"form-group\">\n                <label for=\"content\">{{__('Content')}}</label>\n                <textarea class=\"form-control\" id=\"content\" name=\"content\">{{ $note->content }}</textarea>\n            </div>\n            <button type=\"submit\" class=\"btn btn-primary\">{{__('Update')}}</button>\n        </form>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/EncryptAndDecrypt/index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <div class=\"container\">\n        <h1>{{__('Notes')}}</h1>\n        <a href=\"/notes/create\" class=\"btn btn-primary\">{{__('Create Note')}}</a>\n        <table class=\"table\">\n            <thead>\n                <tr>\n                    <th>{{__('Title')}}</th>\n                    <th>{{__('Actions')}}</th>\n                </tr>\n            </thead>\n            <tbody>\n                @foreach ($notes as $note)\n                    <tr>\n                        <td>{{ $note->title }}</td>\n                        <td>\n                            <a href=\"/notes/{{ $note->id }}\" class=\"btn btn-info\">{{__('View')}}</a>\n                            <a href=\"/notes/{{ $note->id }}/edit\" class=\"btn btn-warning\">{{__('Edit')}}</a>\n                            <form action=\"/notes/{{ $note->id }}\" method=\"POST\" style=\"display:inline\">\n                                @csrf\n                                @method('DELETE')\n                                <button type=\"submit\" class=\"btn btn-danger\">{{__('Delete')}}</button>\n                            </form>\n                        </td>\n                    </tr>\n                @endforeach\n            </tbody>\n        </table>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/EncryptAndDecrypt/show.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <div class=\"container\">\n        <h1>{{__('Note Details')}}</h1>\n        <p><strong>{{__('Title:')}}</strong> {{ $note->title }}</p>\n        <p><strong>{{__('Content:')}}</strong> {{ $note->content }}</p>\n        <a href=\"{{ url('notes') }}\" class=\"btn btn-primary\">{{__('Back to Notes')}}</a>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/FileManagement/Index.blade.php",
    "content": "@extends('layouts.app')\n@section('head')\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css\">\n    <style>\n        .files {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n            gap: 20px;\n        }\n\n        .file-item {\n            text-align: center;\n        }\n\n        .file-item i {\n            font-size: 48px;\n            margin-bottom: 10px;\n            color: #007bff;\n            /* Blue color */\n        }\n\n        .file-item span {\n            display: block;\n            font-size: 14px;\n            color: #333;\n        }\n\n        .context-menu {\n            display: none;\n            position: absolute;\n            background: #fff;\n            border: 1px solid #ccc;\n            border-radius: 5px;\n            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n            z-index: 1000;\n        }\n\n        .context-menu ul {\n            list-style-type: none;\n            padding: 0;\n            margin: 0;\n        }\n\n        .context-menu ul li {\n            padding: 10px 20px;\n            cursor: pointer;\n        }\n\n        .context-menu ul li:hover {\n            background: #f0f0f0;\n        }\n\n        input[type=\"file\"] {\n            display: none;\n        }\n\n        .custom-file-upload {\n            border: 1px solid #5bf635;\n            /* color: #5bf635; */\n            background-color: #5bf635;\n            display: inline-block;\n            padding: 6px 12px;\n            cursor: pointer;\n        }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n        .modal {\n            display: none;\n            position: fixed;\n            z-index: 1;\n            left: 0;\n            top: 0;\n            width: 100%;\n            height: 100%;\n            overflow: auto;\n            background-color: rgba(0, 0, 0, 0.4);\n        }\n\n        .modal-content {\n            background-color: #fefefe;\n            margin: 15% auto;\n            padding: 20px;\n            border: 1px solid #888;\n            width: 80%;\n            max-width: 400px;\n        }\n\n        .close {\n            color: #aaa;\n            float: right;\n            font-size: 28px;\n            font-weight: bold;\n        }\n\n        .close:hover,\n        .close:focus {\n            color: black;\n            text-decoration: none;\n            cursor: pointer;\n        }\n    </style>\n@endsection\n@section('content')\n    <div class=\"container\">\n        <h2 class=\"text-center mb-4\">File Management Demo</h2>\n        <div class=\"row\">\n            <div class=\"col-md-2\">\n                <form id=\"upload-form\" method=\"POST\" enctype=\"multipart/form-data\">\n                    <label for=\"file-upload\" class=\"custom-file-upload\">\n                        Upload your files\n                    </label>\n                    <input id=\"file-upload\" type=\"file\" accept=\".jpg, .jpeg, .png, .gif, .pdf, .doc, .docx, .xls, .xlsx\" multiple />\n                </form>\n            </div>\n            <div class=\"col-md-10\">\n                <input type=\"button\" value=\"{{ __('Back') }}\" id=\"backButton\" class=\"btn btn-success\" onclick=\"back()\" hidden />\n                <input type=\"button\" value=\"{{ __('Create File') }}\" class=\"btn btn-success\" onclick=\"openModal('createFileModal')\" />\n                <input type=\"button\" value=\"{{ __('Create Folder') }}\" id=\"folderCreate\" class=\"btn btn-success\" onclick=\"openModal('createFolderModal')\">\n                <input type=\"button\" value=\"{{ __('Paste') }}\" id=\"paste\" class=\"btn btn-success\" onclick=\"paste()\" hidden>\n                <input type=\"button\" value=\"{{ __('Zip This Folder') }}\" class=\"btn btn-success\" onclick=\"zipFolder()\">\n            </div>\n\n        </div>\n\n        <div class=\"card\">\n            <div class=\"card-body\">\n                <div class=\"files\">\n\n                </div>\n            </div>\n        </div>\n\n\n\n        <!-- Context Menu -->\n        <div class=\"context-menu\" id=\"contextMenu\">\n            <ul>\n                <li onclick=\"openModal('renameModel')\">Rename</li>\n                <li onclick=\"cutAndCopy('cut')\">Cut</li>\n                <li onclick=\"cutAndCopy('copy')\">Copy</li>\n                <li onclick=\"paste()\" id=\"paste\" hidden>Paste</li>\n                <li onclick=\"downloadItem()\">Download</li>\n                <li onclick=\"deleteItem()\">Delete</li>\n            </ul>\n        </div>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    </div>\n\n\n\n    <!-- Create File Modal -->\n    <div id=\"createFileModal\" class=\"modal\">\n        <div class=\"modal-content\">\n            <span class=\"close\" onclick=\"closeModal('createFileModal')\">&times;</span>\n            <h2>Create File</h2>\n            <input type=\"text\" class=\"form-control\" id=\"fileNameInput\" placeholder=\"File Name\">\n            <textarea id=\"fileContentInput\" class=\"form-control\" placeholder=\"File Content\"></textarea>\n            <button onclick=\"createFile()\" class=\"btn btn-success\">Save</button>\n        </div>\n    </div>\n\n    <!-- Create Folder Modal -->\n    <div id=\"createFolderModal\" class=\"modal\">\n        <div class=\"modal-content\">\n            <span class=\"close\" onclick=\"closeModal('createFolderModal')\">&times;</span>\n            <h2>Create Folder</h2>\n            <input type=\"text\" class=\"form-control\" id=\"folderNameInput\" placeholder=\"Folder Name\">\n            <button onclick=\"createFolder()\" class=\"btn btn-success\">Save</button>\n        </div>\n    </div>\n\n    <!-- Rename Modal -->\n    <div id=\"renameModel\" class=\"modal\">\n        <div class=\"modal-content\">\n            <span class=\"close\" onclick=\"closeModal('renameModel')\">&times;</span>\n            <h2>Rename</h2>\n            <input type=\"text\" class=\"form-control\" id=\"oldName\" readonly hidden>\n            <input type=\"text\" class=\"form-control\" id=\"newName\" placeholder=\"Name\">\n            <button onclick=\"rename()\" class=\"btn btn-success\">Save</button>\n        </div>\n    </div>\n@endsection\n\n\n\n\n@section('script')\n    <script src=\"{{ asset('assets/notify.min.js') }}\"></script>\n\n    <script>\n        let currentPath = '';\n        let copiedItem = null;\n        let isCopy = null;\n        let address = [];\n\n        function getAllFilesAndFolders() {\n            $.ajax({\n                type: 'get',\n                url: '{{ URL('file-management/get-all') }}',\n                data: {\n                    'path': currentPath,\n                },\n                success: function(data) {\n                    // Empty the files div\n                    $('.files').empty();\n                    currentPath = data.path;\n                    displayFilesAndFolders(data.directories, 'folder', data.path);\n                    displayFilesAndFolders(data.files, 'file', data.path);\n\n\n                    if (currentPath != address.at(-1)) {\n                        address.push(data.path);\n                    }\n\n                    if (address.length > 1) {\n                        $(\"#backButton\").attr('hidden', false);\n                    } else {\n                        $(\"#backButton\").attr('hidden', true);\n                    }\n                }\n            });\n        }\n\n        function back() {\n            address.pop();\n            currentPath = address.at(-1);\n            getAllFilesAndFolders();\n        }\n\n        function displayFilesAndFolders(data, type, path) {\n            // Define mapping of file extensions to icon classes\n            const iconMappings = {\n                'jpg': 'fas fa-image',\n                'png': 'fas fa-image',\n                'gif': 'fas fa-image',\n                'bmp': 'fas fa-image',\n                'zip': 'fas fa-file-archive',\n                'doc': 'fas fa-file-word',\n                'docx': 'fas fa-file-word',\n                'xls': 'fas fa-file-excel',\n                'xlsx': 'fas fa-file-excel'\n                // Add more mappings as needed\n            };\n\n            var html = '';\n            data.map(item => {\n                var iconClass = 'fas fa-folder';\n                let name = item.replace(currentPath + '/', '');\n\n                if (type != 'folder') {\n                    iconClass = iconMappings[item.split('.').pop().toLowerCase()] || 'fas fa-file'; // Default to file icon\n                }\n\n                html += `<div class=\"file-item\" data-name=\"${item}\" data-type=\"${type}\" data-path=\"${path}\">\n            <i style=\"cursor:pointer\" ${type=='folder'?`onclick=\"changePath('${item}')\"`:\"\"} class=\"${iconClass}\" oncontextmenu=\"showContextMenu(event)\"></i>\n            <span style=\"cursor:pointer\" oncontextmenu=\"showContextMenu(event)\">${name}</span>\n            </div>`;\n            });\n            $('.files').append(html);\n        }\n\n        function changePath(path) {\n            currentPath = path;\n            getAllFilesAndFolders();\n\n        }\n        // Call getAllFilesAndFolders function when the page loads\n        $(document).ready(function() {\n            getAllFilesAndFolders();\n        });\n\n        // Show context menu\n        function showContextMenu(event) {\n            event.preventDefault();\n            var contextMenu = document.getElementById('contextMenu');\n            contextMenu.style.display = 'block';\n            contextMenu.style.left = event.pageX + 'px';\n            contextMenu.style.top = event.pageY + 'px';\n\n            // Store the selected item data in the context menu element\n            var selectedItem = $(event.target).closest('.file-item');\n            $('.context-menu').data('selectedItem', selectedItem);\n        }\n\n        // Hide context menu\n        document.addEventListener('click', function(event) {\n            closeContextMenu(event);\n        });\n\n\n        function closeContextMenu(event) {\n            var contextMenu = document.getElementById('contextMenu');\n            if (!event || !event.target.closest('.context-menu')) {\n                contextMenu.style.display = 'none';\n                document.removeEventListener('click', closeContextMenu); // Remove the event listener\n            }\n        }\n\n\n        // Function to open modal\n        function openModal(modalId) {\n            var modal = document.getElementById(modalId);\n            modal.style.display = \"block\";\n\n            if (modalId == 'renameModel') {\n                var selectedItem = $('.context-menu').data('selectedItem');\n                var oldName = selectedItem.data('name');\n                $(\"#oldName\").val(oldName);\n            }\n        }\n\n        // Function to close modal\n        function closeModal(modalId) {\n            var modal = document.getElementById(modalId);\n            modal.style.display = \"none\";\n        }\n\n        function createFile() {\n            let data = {\n                'fileName': $(\"#fileNameInput\").val(),\n                'fileContent': $(\"#fileContentInput\").val(),\n                'path': currentPath,\n            };\n            postAjax(\"{{ URL('file-management/create-file') }}\", data);\n            closeModal('createFileModal');\n        }\n\n        function createFolder() {\n            let data = {\n                'folderName': $(\"#folderNameInput\").val(),\n                'path': currentPath,\n            };\n            postAjax(\"{{ URL('file-management/create-folder') }}\", data);\n            closeModal('createFolderModal');\n        }\n\n        function rename() {\n            let data = {\n                'oldName': $(\"#oldName\").val(),\n                'newName': $(\"#newName\").val(),\n                'path': currentPath,\n            };\n            postAjax(\"{{ URL('file-management/rename') }}\", data);\n            closeModal('renameModel');\n        }\n\n\n        function cutAndCopy(cutOrCopy) {\n\n            var selectedItem = $('.context-menu').data('selectedItem');\n            copiedItem = selectedItem.data('name');\n            if (cutOrCopy == 'copy') {\n                isCopy = 1;\n            } else {\n                isCopy = 0;\n            }\n            $(\"#paste\").attr('hidden', false);\n            closeContextMenu();\n        }\n\n        function paste() {\n            let data = {\n                'source': copiedItem,\n                'destination': currentPath,\n                'isCopy': isCopy,\n            };\n            postAjax(\"{{ URL('file-management/paste') }}\", data);\n            $(\"#paste\").attr('hidden', true);\n            copiedItem = null;\n            isCopy = null;\n        }\n\n\n        function zipFolder() {\n            let data = {\n                'folderToZip': currentPath,\n            };\n            postAjax(\"{{ URL('file-management/zip-folder') }}\", data);\n        }\n\n        function downloadItem() {\n            var selectedItem = $('.context-menu').data('selectedItem');\n            var name = selectedItem.data('name');\n            var encodedName = encodeURIComponent(name); // Encode the file name\n            window.open(\"{{ URL('file-management/download') }}?encoded_file_name=\" + encodedName, \"_blank\");\n        }\n\n\n\n        function deleteItem() {\n            var selectedItem = $('.context-menu').data('selectedItem');\n            var name = selectedItem.data('name');\n            let data = {\n                'name': name,\n            };\n            postAjax(\"{{ URL('file-management/delete') }}\", data);\n        }\n\n\n        function postAjax(url, data) {\n            data['_token'] = \"{{ csrf_token() }}\";\n            data['path'] = currentPath;\n            $.ajax({\n                type: 'post',\n                url: url,\n                data: data,\n                success: function(data) {\n                    getAllFilesAndFolders();\n                    closeContextMenu();\n                }\n            });\n        }\n\n\n        $(document).ready(function() {\n            $('#file-upload').on('change', function() {\n                var formData = new FormData();\n                var files = $(this)[0].files;\n\n                for (var i = 0; i < files.length; i++) {\n                    formData.append('files[]', files[i]);\n                }\n\n                // Add CSRF token directly to FormData\n                formData.append('_token', '{{ csrf_token() }}');\n                formData.append('path', currentPath);\n                $.ajax({\n                    url: 'file-management/upload',\n                    method: 'POST',\n                    data: formData,\n                    contentType: false,\n                    processData: false,\n                    success: function(response) {\n                        getAllFilesAndFolders();\n                    },\n                    error: function(error) {\n                        console.log(error);\n                        alert(error.responseJSON.message);\n                        // Handle error\n                    }\n                });\n            });\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/FormBuilder/create.blade.php",
    "content": "@extends('layouts.app')\n@section('head')\n    <title>{{__('Example formBuilder')}}</title>\n@endsection\n\n@section('content')\n    <div class=\"card\">\n        <div class=\"card-body\">\n            <label for=\"name\">{{__('Name')}}</label>\n            <input type=\"text\" id=\"name\" name=\"name\" class=\"form-control\" />\n            <div id=\"fb-editor\"></div>\n        </div>\n    </div>\n@endsection\n@section('script')\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js\"></script>\n    <script src=\"{{ URL::asset('assets/form-builder/form-builder.min.js') }}\"></script>\n    <script>\n        jQuery(function($) {\n            $(document.getElementById('fb-editor')).formBuilder({\n                onSave: function(evt, formData) {\n                    console.log(formData);\n                    saveForm(formData);\n                },\n            });\n        });\n\n        function saveForm(form) {\n            $.ajax({\n                type: 'post',\n                headers: {\n                    'Authorization': 'Bearer ' + localStorage.getItem('token')\n                },\n                url: '{{ URL('save-form-builder') }}',\n                data: {\n                    'form': form,\n                    'name': $(\"#name\").val(),\n                    \"_token\": \"{{ csrf_token() }}\",\n                },\n                success: function(data) {\n                    location.href = \"/form-builder\";\n                    console.log(data);\n                }\n            });\n        }\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/FormBuilder/edit.blade.php",
    "content": "@extends('layouts.app')\n@section('head')\n    <title>{{__('Example formBuilder')}}</title>\n@endsection\n\n@section('content')\n    <div class=\"card\">\n        <div class=\"card-body\">\n            <label for=\"name\">{{__('Name')}}</label>\n            <input type=\"text\" id=\"name\" name=\"name\" class=\"form-control\" />\n            <div id=\"fb-editor\"></div>\n        </div>\n    </div>\n@endsection\n@section('script')\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js\"></script>\n    <script src=\"{{ URL::asset('assets/form-builder/form-builder.min.js') }}\"></script>\n    <script>\n        var fbEditor = document.getElementById('fb-editor');\n        var formBuilder = $(fbEditor).formBuilder({\n            onSave: function(evt, formData) {\n                saveForm(formData);\n            },\n        });\n\n        $(function() {\n            $.ajax({\n                type: 'get',\n                headers: {\n                    'Authorization': 'Bearer ' + localStorage.getItem('token')\n                },\n                url: '{{ URL('get-form-builder-edit') }}',\n                data: {\n                    'id': '{{ $id }}'\n                },\n                success: function(data) {\n                    $(\"#name\").val(data.name);\n                    formBuilder.actions.setData(data.content);\n                }\n            });\n        });\n\n        function saveForm(form) {\n            $.ajax({\n                type: 'post',\n                headers: {\n                    'Authorization': 'Bearer ' + localStorage.getItem('token')\n                },\n                url: '{{ URL('update-form-builder') }}',\n                data: {\n                    'form': form,\n                    'name': $(\"#name\").val(),\n                    'id': {{ $id }},\n                    \"_token\": \"{{ csrf_token() }}\",\n                },\n                success: function(data) {\n                    location.href = \"/form-builder\";\n                }\n            });\n        }\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/FormBuilder/index.blade.php",
    "content": "@extends('layouts.app')\n@section('head')\n    <title>{{__('Form Builder')}}</title>\n@endsection\n\n@section('content')\n    <div class=\"card\">\n        <div class=\"card-body\">\n            <a href=\"{{ URL('formbuilder') }}\" class=\"btn btn-success\">{{__('Create')}}</a>\n            <table class=\"table\">\n                <thead>\n                    <th>{{__('Name')}}</th>\n                    <th>{{__('Action')}}</th>\n                </thead>\n                <tbody>\n                    @foreach ($forms as $form)\n                        <tr>\n                            <td>{{ $form->name }}</td>\n                            <td>\n                                <a href=\"{{ URL('edit-form-builder', $form->id) }}\" class=\"btn btn-primary\">{{__('Edit')}}</a>\n                                <a href=\"{{ URL('read-form-builder', $form->id) }}\" class=\"btn btn-primary\">{{__('Show')}}</a>\n                                <form method=\"POST\" action=\"{{ URL('form-delete', $form->id) }}\" style=\"display: inline;\">\n                                    @csrf\n                                    @method('DELETE')\n                                    <button type=\"submit\" class=\"btn btn-danger\"\n                                        onclick=\"return confirm('Are you sure you want to delete this product?')\">{{__('Delete')}}</button>\n                                </form>\n                            </td>\n                        </tr>\n                    @endforeach\n                </tbody>\n            </table>\n        </div>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/FormBuilder/read.blade.php",
    "content": "@extends('layouts.app')\n@section('head')\n    <title>{{ __('Example formBuilder') }}</title>\n@endsection\n\n@section('content')\n    <div class=\"card\">\n        <div class=\"card-body\">\n            <form method=\"POST\" action=\"{{ URL('save-form-transaction') }}\" enctype=\"multipart/form-data\">\n                @csrf\n                <input type=\"number\" id=\"form_id\" name=\"form_id\" hidden />\n                <div id=\"fb-reader\"></div>\n                <input type=\"submit\" value=\"Save\" class=\"btn btn-success\" />\n            </form>\n        </div>\n    </div>\n@endsection\n@section('script')\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js\"></script>\n    <script src=\"{{ URL::asset('assets/form-builder/form-render.min.js') }}\"></script>\n    <script>\n        $(function() {\n            $.ajax({\n                type: 'get',\n                headers: {\n                    'Authorization': 'Bearer ' + localStorage.getItem('token')\n                },\n                url: '{{ URL('get-form-builder') }}',\n                data: {\n                    'id': {{ $id }}\n                },\n                success: function(data) {\n                    $(\"#form_id\").val(data.id);\n                    $('#fb-reader').formRender({\n                        formData: data.content\n                    });\n                }\n            });\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/ImportExport/csv.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css\">\n    <title>Document</title>\n@endsection\n@section('content')\n    <div class=\"container\">\n        <div class=\"card\">\n            <div class=\"card-header\">\n                <p>{{__('Export and Import From CSV')}}</p>\n            </div>\n            <div class=\"card-body\">\n                <div class=\"row\">\n                    <div class=\"col-md-6\">\n                        <a href=\"{{ URL('export-csv') }}\">{{__('Export')}}</a>\n                    </div>\n                    <div class=\"col-md-6\">\n                        <form method=\"POST\" action=\"{{ URL('import-csv') }}\" enctype=\"multipart/form-data\">\n                            @csrf\n                            <div class=\"form-group\">\n                                <label for=\"csv_file\">{{__('Upload CSV File:')}}</label>\n                                <input type=\"file\" name=\"csv_file\" accept=\".csv\">\n                            </div>\n                            <button type=\"submit\" class=\"btn btn-primary\">{{__('Import')}}</button>\n                        </form>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/ImportExport/index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Document</title>\n    <!-- Include Toastr.js library -->\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css\">\n@endsection\n@section('content')\n    <label>{{ __('Export') }}</label>\n    <input type=\"button\" value=\"Export\" onclick=\"exportExcel()\" />\n\n\n    <form id=\"importForm\" method=\"POST\" enctype=\"multipart/form-data\">\n        @csrf\n        <input type=\"file\" name=\"file\" accept=\".xlsx, .xls\">\n        <button type=\"button\" onclick=\"importExcel()\">{{ __('Import') }}</button>\n    </form>\n\n    <script src=\"https://code.jquery.com/jquery-3.5.1.min.js\"></script>\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js\"></script>\n    <script>\n        function exportExcel() {\n            location.href = \"{{ URL('prodcts/export/') }}\";\n        }\n\n        function importExcel() {\n            // Disable the form while processing\n            $('#importForm').attr('disabled', 'disabled');\n\n            // Create a new FormData object to send the file\n            var formData = new FormData($('#importForm')[0]);\n\n            // Send the AJAX request\n            $.ajax({\n                url: \"{{ URL('/products/import') }}\",\n                type: \"POST\",\n                data: formData,\n                contentType: false,\n                processData: false,\n                success: function(response) {\n                    // Enable the form after processing\n                    $('#importForm').removeAttr('disabled');\n\n                    // Check if the import was successful\n                    if (response.success) {\n                        toastr.success(response.message);\n                    } else {\n                        toastr.error(response.message);\n                    }\n                },\n                error: function(xhr, status, error) {\n                    // Enable the form after processing\n                    $('#importForm').removeAttr('disabled');\n\n                    // Handle AJAX errors\n                    toastr.error('An error occurred while importing data.');\n                }\n            });\n        }\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/KanbanBoard/Index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <div class=\"container\">\n        <h2 class=\"text-center\">Kanban Board</h2>\n        <div class=\"row\" id=\"kanban-board\">\n            <div class=\"col-md-4\">\n                <div class=\"card\">\n                    <div class=\"card-header bg-primary text-white\">\n                        <div class=\"row\">\n                            <div class=\"col-md-6\">\n                                To Do\n                            </div>\n                            <div class=\"col-md-6\" style=\"text-align: right\">\n                                <button id=\"add-task-todo\" class=\"btn btn-info\" onclick=\"showTaskModal('todo')\">+</button>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"card-body connectedSortable\" id=\"todo\">\n                        <!-- Kanban Items for To Do -->\n\n                    </div>\n                </div>\n            </div>\n            <div class=\"col-md-4\">\n                <div class=\"card\">\n                    <div class=\"card-header bg-warning text-white\">\n                        <div class=\"row\">\n                            <div class=\"col-md-6\">\n                                In Progress\n                            </div>\n                            <div class=\"col-md-6\" style=\"text-align: right\">\n                                <button id=\"add-task-in_progress\" class=\"btn btn-info\" onclick=\"showTaskModal('in_progress')\">+</button>\n                            </div>\n                        </div>\n                    </div>\n\n\n\n                    <div class=\"card-body connectedSortable\" id=\"in_progress\">\n                        <!-- Kanban Items for In Progress -->\n                    </div>\n                </div>\n            </div>\n            <div class=\"col-md-4\">\n                <div class=\"card\">\n                    <div class=\"card-header bg-success text-white\">\n                        <div class=\"row\">\n                            <div class=\"col-md-6\">\n                                Done\n                            </div>\n                            <div class=\"col-md-6\" style=\"text-align: right\">\n                                <button id=\"add-task-done\" class=\"btn btn-info\" onclick=\"showTaskModal('done')\">+</button>\n                            </div>\n                        </div>\n                    </div>\n\n\n                    <div class=\"card-body connectedSortable\" id=\"done\">\n                        <!-- Kanban Items for Done -->\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <!-- Modal for Adding/Editing Task -->\n        <div class=\"modal fade\" id=\"taskModal\" tabindex=\"-1\" aria-labelledby=\"taskModalLabel\" aria-hidden=\"true\">\n            <div class=\"modal-dialog\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header\">\n                        <h5 class=\"modal-title\" id=\"taskModalLabel\">Add Task</h5>\n                        <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n                    </div>\n                    <div class=\"modal-body\">\n                        <form id=\"taskForm\">\n                            <div class=\"mb-3\">\n                                <label for=\"task-name\" class=\"form-label\">Task Name</label>\n                                <input type=\"text\" class=\"form-control\" id=\"task-name\">\n                            </div>\n                        </form>\n                    </div>\n                    <div class=\"modal-footer\">\n                        <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\n                        <button type=\"button\" class=\"btn btn-primary\" id=\"save-task\">Save Task</button>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection\n\n@section('script')\n    <script src=\"https://code.jquery.com/ui/1.12.1/jquery-ui.min.js\"></script>\n    <script>\n        var currentSection = '';\n        var addOrUpdate = null;\n        var selectedTask = null;\n\n        $(function() {\n            $.ajax({\n                type: 'get',\n                url: '{{ URL('kanban-board/get-all') }}',\n                success: function(data) {\n                    console.log(data);\n                    data.map(x => {\n                        appendItem(x);\n                    })\n\n                }\n            });\n        });\n\n\n        function appendItem(item) {\n            var newItem = `\n                <div class=\"card mb-2 kanban-item\">\n                    <div class=\"card-body\">\n                        <div class=\"row\">\n                            <div class=\"col-md-8\">\n                                <p id=\"taskName\" item_id=\"${item.id}\">${item.name}</p>\n                            </div>\n                            <div class=\"col-md-4\">\n                                <button class=\"btn btn-sm btn-warning edit-task\"><i class='bx bx-comment-edit'></i></button>\n                                <button class=\"btn btn-sm btn-danger delete-task\"><i class='bx bx-comment-x'></i></button>\n                            </div>\n                        </div>\n                    </div>\n                </div>`;\n            $(\"#\" + item.status).append(newItem);\n        }\n\n        function reOrderKanbanOrder() {\n            var tasks = [];\n            $('.connectedSortable').each(function() {\n                var sectionId = $(this).attr('id');\n                $(this).children('.kanban-item').each(function(index) {\n                    tasks.push({\n                        id: $(this).find(\"#taskName\").attr('item_id'),\n                        name: $(this).find(\"#taskName\").text(),\n                        status: sectionId,\n                        order: index\n                    });\n                });\n            });\n\n            $.post(\"{{ url('kanban-board/reorder') }}\", {\n                _token: \"{{ csrf_token() }}\",\n                tasks: tasks\n            }, function(response) {\n                console.log(response);\n            });\n        }\n\n        $(\".connectedSortable\").sortable({\n            connectWith: \".connectedSortable\",\n            items: \"> .kanban-item\",\n            placeholder: \"ui-state-highlight\",\n            update: reOrderKanbanOrder,\n        }).disableSelection();\n\n        function showTaskModal(section) {\n            currentSection = section;\n            addOrUpdate = 'add';\n            $('#taskModalLabel').text('Add Task');\n            $('#task-name').val('');\n            $('#taskModal').modal('show');\n        }\n\n        $('#save-task').click(function() {\n            var taskName = $('#task-name').val();\n\n            if (taskName) {\n                if (addOrUpdate == 'add') {\n                    $.post(\"{{ url('kanban-board/store') }}\", {\n                        _token: \"{{ csrf_token() }}\",\n                        name: taskName,\n                        status: currentSection,\n                    }, function(response) {\n                        appendItem(response.item);\n                    });\n                } else {\n                    $.post(\"{{ url('kanban-board/update') }}\", {\n                        _token: \"{{ csrf_token() }}\",\n                        name: taskName,\n                        id: selectedTask.attr('item_id'),\n                    }, function(response) {\n                        selectedTask.text(taskName);\n                    });\n                }\n\n                $('#taskModal').modal('hide');\n            }\n        });\n\n        $(document).on('click', '.edit-task', function() {\n            addOrUpdate = 'update';\n            selectedTask = $(this).parent().parent().find(\"#taskName\");\n            $('#taskModalLabel').text('Edit Task');\n            $('#task-name').val(selectedTask.text());\n            $('#taskModal').modal('show');\n        });\n\n        $(document).on('click', '.delete-task', function() {\n            if (confirm('Are you sure you want to delete this task?')) {\n                let item = $(this);\n                $.post(\"{{ url('kanban-board/delete') }}\", {\n                    _token: \"{{ csrf_token() }}\",\n                    id: item.parent().parent().find(\"#taskName\").attr('item_id'),\n                }, function(response) {\n                    item.parent().parent().parent().remove();\n                });\n            }\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/LazyLoad/index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Document</title>\n@endsection\n\n@section('content')\n    <div id=\"image-container\"></div>\n    <button id=\"load-images\">{{__('Load Images')}}</button>\n    <script src=\"https://code.jquery.com/jquery-3.5.1.min.js\"></script>\n    <script src=\"https://cdn.jsdelivr.net/npm/lazyload@2.0.0-rc.2/lazyload.js\"></script>\n    <script>\n        $(document).ready(function() {\n            $('#load-images').on('click', function() {\n                $.ajax({\n                    url: '/lazy-load-data',\n                    type: 'GET',\n                    dataType: 'json',\n                    success: function(data) {\n                        if (data.length > 0) {\n                            $('#image-container').empty();\n                            data.map(x => {\n                                console.log(x.filename);\n                                $('#image-container').append(\n                                    `<img class=\"lazyload\" style=\"width:30%\" data-src=\"{{ URL::asset('images') }}/${x.filename}\">`\n                                );\n                            });\n                            lazyload();\n                        } else {\n                            $('#image-container').html('No images found.');\n                        }\n                    },\n                    error: function() {\n                        $('#image-container').html('Error loading images.');\n                    }\n                });\n            });\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/PDF/Products.blade.php",
    "content": "@extends('layouts.app')\n@section('head')\n    <style>\n        body {\n            font-family: Arial, sans-serif;\n        }\n\n        img {\n            max-width: 100px;\n            /* Limit the logo's width */\n        }\n\n        .header {\n            text-align: center;\n            margin-bottom: 20px;\n        }\n\n        .company-info {\n            margin-top: 20px;\n        }\n\n        table {\n            width: 100%;\n            border-collapse: collapse;\n        }\n\n        table,\n        th,\n        td {\n            border: 1px solid #ddd;\n        }\n\n        th,\n        td {\n            padding: 8px;\n            text-align: left;\n        }\n\n        th {\n            background-color: #f2f2f2;\n        }\n    </style>\n@endsection\n@section('content')\n    <div class=\"header\">\n        {{-- To Display Logo Image --}}\n        <img src=\"data:image/png;base64,{{ base64_encode(file_get_contents(public_path('/images/logo.png'))) }}\">\n        <h1>Product List</h1>\n    </div>\n\n    <div class=\"company-info\">\n        <p><strong>{{__('Company Name:')}}</strong> Stack Tips</p>\n        <p><strong>{{__('Address:')}}</strong> 123 Company St, City, Country</p>\n        <p><strong>{{__('Phone:')}}</strong> +123456789</p>\n    </div>\n\n    <table>\n        <thead>\n            <tr>\n                <th>{{__('Product Name')}}</th>\n                <th>{{__('Quantity')}}</th>\n                <th>{{__('Buying Price')}}</th>\n                <th>{{__('Selling Price')}}</th>\n            </tr>\n        </thead>\n        <tbody>\n            @foreach ($products as $product)\n                <tr>\n                    <td>{{ $product->name }}</td>\n                    <td>{{ $product->quantity }}</td>\n                    <td>{{ $product->buyingPrice }}</td>\n                    <td>{{ $product->sellingPrice }}</td>\n                </tr>\n            @endforeach\n        </tbody>\n    </table>\n@endsection\n"
  },
  {
    "path": "resources/views/PushNotification/Index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Document</title>\n@endsection\n\n@section('content')\n    <div class=\"card\">\n        <div class=\"card-header\">\n            <button onclick=\"askForPermission()\" class=\"btn btn-success\">Enable Notification</button>\n        </div>\n        <div class=\"card-body\">\n            <div class=\"row\">\n                <div class=\"col-md-3\">\n                    <label for='title'>{{ __('title') }}</label>\n                    <input type='text' class='form-control' id='title' name='title'>\n                </div>\n                <div class=\"col-md-3\">\n                    <label for='body'>{{ __('body') }}</label>\n                    <input type='text' class='form-control' id='body' name='body'>\n                </div>\n                <div class=\"col-md-3\">\n                    <label for='idOfProduct'>{{ __('ID Of Product') }}</label>\n                    <input type='text' class='form-control' id='idOfProduct' name='idOfProduct'>\n                </div>\n                <div class=\"col-md-3\">\n                    <input type=\"button\" value=\"{{ 'Send Notification' }}\" onclick=\"sendNotification()\" class=\"btn btn-info\" />\n                    <p>Please Enable Push notification before sending</p>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection\n@section('script')\n    <script>\n        navigator.serviceWorker.register(\"{{ URL::asset('service-worker.js') }}\");\n\n        function askForPermission() {\n            Notification.requestPermission().then((permission) => {\n                if (permission === 'granted') {\n                    // get service worker\n                    navigator.serviceWorker.ready.then((sw) => {\n                        // subscribe\n                        sw.pushManager.subscribe({\n                            userVisibleOnly: true,\n                            applicationServerKey: \"BDtCwvnpMkHbWQ_bBWeC9R4i-N-cytiDiNT9pVKWCr4TUnFH4i9Hjomy87PouzZCVcgJvOc1UuRVyzq6jXF0D0s\"\n                        }).then((subscription) => {\n                            console.log(JSON.stringify(subscription));\n                            saveSub(JSON.stringify(subscription));\n                        });\n                    });\n                }\n            });\n        }\n\n        function saveSub(sub) {\n            $.ajax({\n                type: 'post',\n                url: '{{ URL('save-push-notification-sub') }}',\n                data: {\n                    '_token': \"{{ csrf_token() }}\",\n                    'sub': sub\n                },\n                success: function(data) {\n                    console.log(data);\n                }\n            });\n        }\n\n\n        function sendNotification() {\n            $.ajax({\n                type: 'post',\n                url: '{{ URL('send-push-notification') }}',\n                data: {\n                    '_token': \"{{ csrf_token() }}\",\n                    'title': $(\"#title\").val(),\n                    'body': $(\"#body\").val(),\n                    'idOfProduct': $(\"#idOfProduct\").val(),\n                },\n                success: function(data) {\n                    alert('send Successfull');\n                    console.log(data);\n                }\n            });\n        }\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/RolesAndPermissions/CreateRoles.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <style>\n        .table {\n            width: 50%;\n            border-collapse: collapse;\n        }\n\n        .table th,\n        .table td {\n            border: 1px solid #ddd;\n            padding: 8px;\n            text-align: left;\n        }\n\n        .table th {\n            background-color: #f2f2f2;\n        }\n\n        .table tr:nth-child(even) {\n            background-color: #f2f2f2;\n        }\n\n        /* Style for checkboxes */\n        .styled-checkbox {\n            position: relative;\n            cursor: pointer;\n            display: inline-block;\n        }\n\n        .styled-checkbox input {\n            position: absolute;\n            opacity: 0;\n            cursor: pointer;\n            height: 0;\n            width: 0;\n        }\n\n        .checkmark {\n            position: absolute;\n            top: 0;\n            left: 0;\n            height: 20px;\n            width: 20px;\n            background-color: #eee;\n            border: 1px solid #ccc;\n        }\n\n        .styled-checkbox input:checked+.checkmark:after {\n            content: \"\";\n            position: absolute;\n            display: block;\n            left: 6px;\n            top: 2px;\n            width: 6px;\n            height: 12px;\n            border: solid #333;\n            border-width: 0 2px 2px 0;\n            transform: rotate(45deg);\n        }\n    </style>\n@endsection\n\n@section('content')\n    <div class=\"card\">\n        <div class=\"card-header\">\n            <h1>{{ __('Create New Role') }}</h1>\n        </div>\n        <div class=\"card-body\">\n            <form method=\"POST\" action=\"{{ URL('add-role') }}\">\n                @csrf\n                <label for=\"name\">{{ __('Role Name') }}</label>\n                <input type=\"text\" required name=\"name\" class=\"form-control\" />\n\n\n                <div class=\"row\">\n                    <div class=\"col-md-6\">\n                        <h1>{{ __('Permissions') }}</h1>\n                        <table class=\"table\">\n                            <thead>\n                                <tr>\n                                    <th>{{ __('Name') }}</th>\n                                    <th>{{ __('Permission') }}</th>\n                                </tr>\n                            </thead>\n                            <tbody>\n                                @foreach ($permissions as $permission)\n                                    <tr>\n                                        <td>{{ $permission->name }}</td>\n                                        <td class=\"styled-checkbox\">\n                                            <input type=\"checkbox\" value=\"{{ $permission->name }}\" name=\"permission[]\" id=\"permission_{{ $permission->id }}\" />\n                                            <label class=\"checkmark\" for=\"permission_{{ $permission->id }}\"></label>\n                                        </td>\n                                    </tr>\n                                @endforeach\n                            </tbody>\n                        </table>\n                    </div>\n\n\n                    <div class=\"col-md-6\">\n                        <h1>{{ __('Users') }}</h1>\n\n                        <label for=\"users\">{{ __('Users') }}</label>\n                        <select class=\"form-control\" name=\"users[]\" id=\"users\" multiple>\n                            @foreach ($users as $user)\n                                <option value=\"{{ $user->id }}\">{{ $user->name }}</option>\n                            @endforeach\n                        </select>\n                    </div>\n                </div>\n\n                <input type=\"submit\" class=\"btn btn-success\" value=\"{{ __('Save') }}\" />\n            </form>\n        </div>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/RolesAndPermissions/EditRole.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <style>\n        .table {\n            width: 50%;\n            border-collapse: collapse;\n        }\n\n        .table th,\n        .table td {\n            border: 1px solid #ddd;\n            padding: 8px;\n            text-align: left;\n        }\n\n        .table th {\n            background-color: #f2f2f2;\n        }\n\n        .table tr:nth-child(even) {\n            background-color: #f2f2f2;\n        }\n\n        /* Style for checkboxes */\n        .styled-checkbox {\n            position: relative;\n            cursor: pointer;\n            display: inline-block;\n        }\n\n        .styled-checkbox input {\n            position: absolute;\n            opacity: 0;\n            cursor: pointer;\n            height: 0;\n            width: 0;\n        }\n\n        .checkmark {\n            position: absolute;\n            top: 0;\n            left: 0;\n            height: 20px;\n            width: 20px;\n            background-color: #eee;\n            border: 1px solid #ccc;\n        }\n\n        .styled-checkbox input:checked+.checkmark:after {\n            content: \"\";\n            position: absolute;\n            display: block;\n            left: 6px;\n            top: 2px;\n            width: 6px;\n            height: 12px;\n            border: solid #333;\n            border-width: 0 2px 2px 0;\n            transform: rotate(45deg);\n        }\n    </style>\n@endsection\n\n@section('content')\n    <div class=\"card\">\n        <div class=\"card-header\">\n            <h1>{{ __('Create New Role') }}</h1>\n        </div>\n        <div class=\"card-body\">\n            <form method=\"POST\" action=\"{{ URL('update-role') }}\">\n                @csrf\n                <input type=\"text\" id=\"id\" name=\"id\" value=\"{{ $role->id }}\" readonly required hidden />\n                <label for=\"name\">{{ __('Role Name') }}</label>\n                <input type=\"text\" required name=\"name\" class=\"form-control\" value=\"{{ $role->name }}\" />\n\n\n                <div class=\"row\">\n                    <div class=\"col-md-6\">\n                        <h1>{{ __('Permissions') }}</h1>\n                        <table class=\"table\">\n                            <thead>\n                                <tr>\n                                    <th>{{ __('Name') }}</th>\n                                    <th>{{ __('Permission') }}</th>\n                                </tr>\n                            </thead>\n                            <tbody>\n                                @foreach ($permissions as $permission)\n                                    <tr>\n                                        <td>{{ $permission->name }}</td>\n                                        <td class=\"styled-checkbox\">\n                                            <input type=\"checkbox\" value=\"{{ $permission->name }}\" name=\"permission[]\" id=\"permission_{{ $permission->id }}\"\n                                                @if ($role->permissions->contains('id', $permission->id)) checked @endif />\n                                            <label class=\"checkmark\" for=\"permission_{{ $permission->id }}\"></label>\n                                        </td>\n                                    </tr>\n                                @endforeach\n\n                            </tbody>\n                        </table>\n                    </div>\n\n\n                    <div class=\"col-md-6\">\n                        <h1>{{ __('Users') }}</h1>\n\n                        <label for=\"users\">{{ __('Users') }}</label>\n                        <select class=\"form-control\" name=\"users[]\" id=\"users\" multiple>\n                            @foreach ($users as $user)\n                                <option value=\"{{ $user->id }}\" @if ($role->users->contains('id', $user->id)) selected @endif>\n                                    {{ $user->name }}</option>\n                            @endforeach\n                        </select>\n                    </div>\n                </div>\n\n                <input type=\"submit\" class=\"btn btn-success\" value=\"{{ __('Save') }}\" />\n            </form>\n        </div>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/RolesAndPermissions/Index.blade.php",
    "content": "@extends('layouts.app')\n@section('content')\n    <div class=\"card\">\n        <div class=\"card-header\">\n            <h1>{{ 'Roles And Permissions' }}</h1>\n        </div>\n        <div class=\"card-body\">\n            <a href=\"{{ URL('create-roles') }}\" class=\"btn btn-success\">{{ __('Create Roles') }}</a>\n\n            <table class=\"table\" width=\"100%\">\n                <tr>\n                    <td>{{ __('Name') }}</td>\n                    <td>{{ __('Actions') }}</td>\n                </tr>\n                @foreach ($roles as $role)\n                    <tr>\n                        <td>{{ $role->name }}</td>\n                        <td>\n                            <a href=\"{{ URL('edit-role') }}/{{ $role->id }}\" class=\"btn btn-success\">{{ __('Edit') }}</a>\n                            <a href=\"{{ URL('delete-role') }}/{{ $role->id }}\" class=\"btn btn-danger\">{{ __('Delete') }}</a>\n                        </td>\n                    </tr>\n                @endforeach\n            </table>\n        </div>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/Weather/index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <title>Weather Information</title>\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css\">\n    <link href=\"https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n    <style>\n        body {\n            font-family: 'Poppins', sans-serif;\n            background-color: #f5f5f5;\n            color: #333;\n        }\n\n        h1 {\n            font-size: 2rem;\n            color: #007BFF;\n            text-align: center;\n            margin: 20px 0;\n        }\n\n        .container {\n            max-width: 600px;\n            padding: 20px;\n            background-color: #fff;\n            box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);\n            border-radius: 10px;\n            margin: 0 auto;\n        }\n\n        .weather-info {\n            margin-top: 20px;\n            display: flex;\n            align-items: center;\n        }\n\n        .weather-info .label {\n            font-weight: 500;\n            color: #666;\n            margin-right: 10px;\n        }\n\n        .weather-info .value {\n            font-weight: 600;\n            color: #333;\n        }\n\n        .weather-icon {\n            font-size: 2rem;\n            color: #007BFF;\n        }\n\n        .select-container {\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            margin-top: 20px;\n        }\n\n        select {\n            padding: 5px;\n            border: 1px solid #ccc;\n            border-radius: 4px;\n        }\n\n        button {\n            background-color: #007BFF;\n            color: #fff;\n            border: none;\n            border-radius: 4px;\n            padding: 10px 20px;\n            cursor: pointer;\n            transition: background-color 0.3s ease;\n        }\n\n        button:hover {\n            background-color: #0056b3;\n        }\n    </style>\n@endsection\n\n@section('content')\n    <div class=\"container\">\n        <h1>{{__('Weather Information')}}</h1>\n        <div class=\"weather-info\">\n            <div class=\"label\">{{__('Description:')}}</div>\n            <div class=\"value\" id=\"description\"></div>\n        </div>\n        <div class=\"weather-info\">\n            <div class=\"label\">{{__('Temperature:')}}</div>\n            <div class=\"value\">\n                <i class=\"fas fa-thermometer-half weather-icon temperature-icon\"></i>\n                <span id=\"temperature\"></span>\n            </div>\n        </div>\n        <div class=\"weather-info\">\n            <div class=\"label\">{{__('Feels Like:')}}</div>\n            <div class=\"value\">\n                <i class=\"fas fa-temperature-low weather-icon feels-like-icon\"></i>\n                <span id=\"feels-like\"></span>\n            </div>\n        </div>\n        <div class=\"weather-info\">\n            <div class=\"label\">{{__('Pressure:')}}</div>\n            <div class=\"value\">\n                <i class=\"fas fa-tachometer-alt weather-icon pressure-icon\"></i>\n                <span id=\"pressure\"></span>\n            </div>\n        </div>\n        <div class=\"weather-info\">\n            <div class=\"label\">{{__('Humidity:')}}</div>\n            <div class=\"value\">\n                <i class=\"fas fa-tint weather-icon humidity-icon\"></i>\n                <span id=\"humidity\"></span>\n            </div>\n        </div>\n        <div class=\"weather-info\">\n            <div class=\"label\">{{__('Wind Speed:')}}</div>\n            <div class=\"value\">\n                <i class=\"fas fa-wind weather-icon wind-speed-icon\"></i>\n                <span id=\"wind-speed\"></span>\n            </div>\n        </div>\n        <div class=\"select-container\">\n            <label for=\"city-select\">{{__('Select City:')}} </label>\n            <select id=\"city-select\">\n                <option value=\"London\">{{__('London')}}</option>\n                <option value=\"New York\">{{__('New York')}}</option>\n                <option value=\"Tokyo\">{{__('Tokyo')}}</option>\n            </select>\n            <label for=\"unit-select\">{{__('Select Unit:')}} </label>\n            <select id=\"unit-select\">\n                <option value=\"metric\">{{__('Celsius')}}</option>\n                <option value=\"imperial\">{{__('Fahrenheit')}}</option>\n            </select>\n            <button id=\"update-weather-btn\">{{__('Update Weather')}}</button>\n        </div>\n    </div>\n\n    <script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n    <script>\n        $(function() {\n            $('#update-weather-btn').on('click', function() {\n                const city = $('#city-select').val();\n                const unit = $('#unit-select').val();\n                $.ajax({\n                    type: 'GET',\n                    url: '{{ URL('get-weather') }}',\n                    data: {\n                        'city': city,\n                        'unit': unit\n                    },\n                    success: function(data) {\n                        $('#description').text(data.weather[0].description);\n                        $('#temperature').text(data.main.temp + ' °' + (unit === 'imperial' ? 'F' : 'C'));\n                        $('#feels-like').text(data.main.feels_like + ' °' + (unit === 'imperial' ? 'F' : 'C'));\n                        $('#pressure').text(data.main.pressure + ' hPa');\n                        $('#humidity').text(data.main.humidity + '%');\n                        $('#wind-speed').text(data.wind.speed + ' m/s');\n                    }\n                });\n            });\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/WebRTC/Index.blade.php",
    "content": "@extends('layouts.app')\n\n\n@section('head')\n@endsection\n\n@section('content')\n@endsection\n\n@section('script')\n    <script>\n        //checks if the browser supports WebRTC \n\n        function hasUserMedia() {\n            navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||\n                navigator.mozGetUserMedia || navigator.msGetUserMedia;\n            return !!navigator.getUserMedia;\n        }\n\n        if (hasUserMedia()) {\n            navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||\n                navigator.mozGetUserMedia || navigator.msGetUserMedia;\n\n            //get both video and audio streams from user's camera \n            navigator.getUserMedia({\n                video: true,\n                audio: true\n            }, function(stream) {\n                var video = document.querySelector('video');\n\n                //insert stream into the video tag \n                video.src = window.URL.createObjectURL(stream);\n            }, function(err) {});\n\n        } else {\n            alert(\"Error. WebRTC is not supported!\");\n        }\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/admin.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n@endsection\n@section('content')\n    <div class=\"container\">\n\n        <form action=\"{{ URL('admin/personal-admin') }}\">\n            @csrf\n            <input type=\"text\" value=\"@@\" name=\"name\" />\n            <input type=\"submit\" class=\"btn btn-success\" value=\"save\" />\n        </form>\n        <div class=\"card\">\n            <div class=\"card-body\">\n                <h4>chats</h4>\n                <table class=\"table\" style=\"width:100%\">\n                    <thead>\n                        <th>ID</th>\n                        <th>date_time</th>\n                        <th>send_by</th>\n                        <th>send_to</th>\n                        <th>message</th>\n                        <th>is_received</th>\n                    </thead>\n                    <tbody>\n                        @foreach ($chats as $chat)\n                            <tr>\n                                <td>{{ $chat->id }}</td>\n                                <td>{{ $chat->date_time }}</td>\n                                <td>{{ $chat->send_by }}</td>\n                                <td>{{ $chat->send_to }}</td>\n                                <td>{{ $chat->message }}</td>\n                                <td>{{ $chat->is_received }}</td>\n                            </tr>\n                        @endforeach\n                    </tbody>\n                </table>\n            </div>\n        </div>\n\n\n\n        <div class=\"card\">\n            <div class=\"card-body\">\n                <h4>notifications</h4>\n                <table class=\"table\" style=\"width:100%\">\n                    <thead>\n                        <th>ID</th>\n                        <th>message</th>\n                        <th>user_id</th>\n                        <th>is_send</th>\n                    </thead>\n                    <tbody>\n                        @foreach ($notifications as $notification)\n                            <tr>\n                                <td>{{ $notification->id }}</td>\n                                <td>{{ $notification->message }}</td>\n                                <td>{{ $notification->user_id }}</td>\n                                <td>{{ $notification->is_send }}</td>\n                            </tr>\n                        @endforeach\n                    </tbody>\n                </table>\n            </div>\n        </div>\n\n        <div class=\"card\">\n            <div class=\"card-body\">\n                <h4>pushNotifications</h4>\n                <table class=\"table\" style=\"width:100%\">\n                    <thead>\n                        <th>Push Subscribers</th>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td>{{ $pushNotifications }}</td>\n                        </tr>\n                    </tbody>\n                </table>\n            </div>\n        </div>\n\n        <div class=\"card\">\n            <div class=\"card-body\">\n                <h4>pushNotificationMessages</h4>\n                <table class=\"table\" style=\"width:100%\">\n                    <thead>\n                        <th>ID</th>\n                        <th>title</th>\n                        <th>body</th>\n                        <th>url</th>\n                    </thead>\n                    <tbody>\n                        @foreach ($pushNotificationMessages as $pushNotificationMessage)\n                            <tr>\n                                <td>{{ $pushNotificationMessage->id }}</td>\n                                <td>{{ $pushNotificationMessage->title }}</td>\n                                <td>{{ $pushNotificationMessage->body }}</td>\n                                <td>{{ $pushNotificationMessage->url }}</td>\n                            </tr>\n                        @endforeach\n                    </tbody>\n                </table>\n            </div>\n        </div>\n\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/login.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <div class=\"container\">\n        <div class=\"row justify-content-center\">\n            <div class=\"col-md-8\">\n                <div class=\"card\">\n                    <div class=\"card-header\">{{ __('Login') }}</div>\n                    <table class=\"table\">\n                        <tr>\n                            <td>User Name</td>\n                            <td>Password</td>\n                        </tr>\n                        <tr>\n                            <td>user1@user.com</td>\n                            <td>12345678</td>\n                        </tr>\n                        <tr>\n                            <td>user2@user.com</td>\n                            <td>12345678</td>\n                        </tr>\n                        <tr>\n                            <td>user3@user.com</td>\n                            <td>12345678</td>\n                        </tr>\n                        <tr>\n                            <td>user4@user.com</td>\n                            <td>12345678</td>\n                        </tr>\n                    </table>\n                    <div class=\"card-body\">\n                        <form method=\"POST\" action=\"{{ route('login') }}\">\n                            @csrf\n\n                            <div class=\"row mb-3\">\n                                <label for=\"email\" class=\"col-md-4 col-form-label text-md-end\">{{ __('Email Address') }}</label>\n\n                                <div class=\"col-md-6\">\n                                    <input id=\"email\" type=\"email\" class=\"form-control @error('email') is-invalid @enderror\" name=\"email\"\n                                        value=\"{{ old('email') }}\" required autocomplete=\"email\" autofocus>\n\n                                    @error('email')\n                                        <span class=\"invalid-feedback\" role=\"alert\">\n                                            <strong>{{ $message }}</strong>\n                                        </span>\n                                    @enderror\n                                </div>\n                            </div>\n\n                            <div class=\"row mb-3\">\n                                <label for=\"password\" class=\"col-md-4 col-form-label text-md-end\">{{ __('Password') }}</label>\n\n                                <div class=\"col-md-6\">\n                                    <input id=\"password\" type=\"password\" class=\"form-control @error('password') is-invalid @enderror\" name=\"password\" required\n                                        autocomplete=\"current-password\">\n\n                                    @error('password')\n                                        <span class=\"invalid-feedback\" role=\"alert\">\n                                            <strong>{{ $message }}</strong>\n                                        </span>\n                                    @enderror\n                                </div>\n                            </div>\n\n                            <div class=\"row mb-3\">\n                                <div class=\"col-md-6 offset-md-4\">\n                                    <div class=\"form-check\">\n                                        <input class=\"form-check-input\" type=\"checkbox\" name=\"remember\" id=\"remember\" {{ old('remember') ? 'checked' : '' }}>\n\n                                        <label class=\"form-check-label\" for=\"remember\">\n                                            {{ __('Remember Me') }}\n                                        </label>\n                                    </div>\n                                </div>\n                            </div>\n\n                            <div class=\"row mb-0\">\n                                <div class=\"col-md-8 offset-md-4\">\n                                    <button type=\"submit\" class=\"btn btn-primary\">\n                                        {{ __('Login') }}\n                                    </button>\n\n                                    @if (Route::has('password.request'))\n                                        <a class=\"btn btn-link\" href=\"{{ route('password.request') }}\">\n                                            {{ __('Forgot Your Password?') }}\n                                        </a>\n                                    @endif\n                                </div>\n                            </div>\n                        </form>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/passwords/confirm.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row justify-content-center\">\n        <div class=\"col-md-8\">\n            <div class=\"card\">\n                <div class=\"card-header\">{{ __('Confirm Password') }}</div>\n\n                <div class=\"card-body\">\n                    {{ __('Please confirm your password before continuing.') }}\n\n                    <form method=\"POST\" action=\"{{ route('password.confirm') }}\">\n                        @csrf\n\n                        <div class=\"row mb-3\">\n                            <label for=\"password\" class=\"col-md-4 col-form-label text-md-end\">{{ __('Password') }}</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"password\" type=\"password\" class=\"form-control @error('password') is-invalid @enderror\" name=\"password\" required autocomplete=\"current-password\">\n\n                                @error('password')\n                                    <span class=\"invalid-feedback\" role=\"alert\">\n                                        <strong>{{ $message }}</strong>\n                                    </span>\n                                @enderror\n                            </div>\n                        </div>\n\n                        <div class=\"row mb-0\">\n                            <div class=\"col-md-8 offset-md-4\">\n                                <button type=\"submit\" class=\"btn btn-primary\">\n                                    {{ __('Confirm Password') }}\n                                </button>\n\n                                @if (Route::has('password.request'))\n                                    <a class=\"btn btn-link\" href=\"{{ route('password.request') }}\">\n                                        {{ __('Forgot Your Password?') }}\n                                    </a>\n                                @endif\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/passwords/email.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row justify-content-center\">\n        <div class=\"col-md-8\">\n            <div class=\"card\">\n                <div class=\"card-header\">{{ __('Reset Password') }}</div>\n\n                <div class=\"card-body\">\n                    @if (session('status'))\n                        <div class=\"alert alert-success\" role=\"alert\">\n                            {{ session('status') }}\n                        </div>\n                    @endif\n\n                    <form method=\"POST\" action=\"{{ route('password.email') }}\">\n                        @csrf\n\n                        <div class=\"row mb-3\">\n                            <label for=\"email\" class=\"col-md-4 col-form-label text-md-end\">{{ __('Email Address') }}</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"email\" type=\"email\" class=\"form-control @error('email') is-invalid @enderror\" name=\"email\" value=\"{{ old('email') }}\" required autocomplete=\"email\" autofocus>\n\n                                @error('email')\n                                    <span class=\"invalid-feedback\" role=\"alert\">\n                                        <strong>{{ $message }}</strong>\n                                    </span>\n                                @enderror\n                            </div>\n                        </div>\n\n                        <div class=\"row mb-0\">\n                            <div class=\"col-md-6 offset-md-4\">\n                                <button type=\"submit\" class=\"btn btn-primary\">\n                                    {{ __('Send Password Reset Link') }}\n                                </button>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/passwords/reset.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row justify-content-center\">\n        <div class=\"col-md-8\">\n            <div class=\"card\">\n                <div class=\"card-header\">{{ __('Reset Password') }}</div>\n\n                <div class=\"card-body\">\n                    <form method=\"POST\" action=\"{{ route('password.update') }}\">\n                        @csrf\n\n                        <input type=\"hidden\" name=\"token\" value=\"{{ $token }}\">\n\n                        <div class=\"row mb-3\">\n                            <label for=\"email\" class=\"col-md-4 col-form-label text-md-end\">{{ __('Email Address') }}</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"email\" type=\"email\" class=\"form-control @error('email') is-invalid @enderror\" name=\"email\" value=\"{{ $email ?? old('email') }}\" required autocomplete=\"email\" autofocus>\n\n                                @error('email')\n                                    <span class=\"invalid-feedback\" role=\"alert\">\n                                        <strong>{{ $message }}</strong>\n                                    </span>\n                                @enderror\n                            </div>\n                        </div>\n\n                        <div class=\"row mb-3\">\n                            <label for=\"password\" class=\"col-md-4 col-form-label text-md-end\">{{ __('Password') }}</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"password\" type=\"password\" class=\"form-control @error('password') is-invalid @enderror\" name=\"password\" required autocomplete=\"new-password\">\n\n                                @error('password')\n                                    <span class=\"invalid-feedback\" role=\"alert\">\n                                        <strong>{{ $message }}</strong>\n                                    </span>\n                                @enderror\n                            </div>\n                        </div>\n\n                        <div class=\"row mb-3\">\n                            <label for=\"password-confirm\" class=\"col-md-4 col-form-label text-md-end\">{{ __('Confirm Password') }}</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"password-confirm\" type=\"password\" class=\"form-control\" name=\"password_confirmation\" required autocomplete=\"new-password\">\n                            </div>\n                        </div>\n\n                        <div class=\"row mb-0\">\n                            <div class=\"col-md-6 offset-md-4\">\n                                <button type=\"submit\" class=\"btn btn-primary\">\n                                    {{ __('Reset Password') }}\n                                </button>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/register.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row justify-content-center\">\n        <div class=\"col-md-8\">\n            <div class=\"card\">\n                <div class=\"card-header\">{{ __('Register') }}</div>\n\n                <div class=\"card-body\">\n                    <form method=\"POST\" action=\"{{ route('register') }}\">\n                        @csrf\n\n                        <div class=\"row mb-3\">\n                            <label for=\"name\" class=\"col-md-4 col-form-label text-md-end\">{{ __('Name') }}</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"name\" type=\"text\" class=\"form-control @error('name') is-invalid @enderror\" name=\"name\" value=\"{{ old('name') }}\" required autocomplete=\"name\" autofocus>\n\n                                @error('name')\n                                    <span class=\"invalid-feedback\" role=\"alert\">\n                                        <strong>{{ $message }}</strong>\n                                    </span>\n                                @enderror\n                            </div>\n                        </div>\n\n                        <div class=\"row mb-3\">\n                            <label for=\"email\" class=\"col-md-4 col-form-label text-md-end\">{{ __('Email Address') }}</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"email\" type=\"email\" class=\"form-control @error('email') is-invalid @enderror\" name=\"email\" value=\"{{ old('email') }}\" required autocomplete=\"email\">\n\n                                @error('email')\n                                    <span class=\"invalid-feedback\" role=\"alert\">\n                                        <strong>{{ $message }}</strong>\n                                    </span>\n                                @enderror\n                            </div>\n                        </div>\n\n                        <div class=\"row mb-3\">\n                            <label for=\"password\" class=\"col-md-4 col-form-label text-md-end\">{{ __('Password') }}</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"password\" type=\"password\" class=\"form-control @error('password') is-invalid @enderror\" name=\"password\" required autocomplete=\"new-password\">\n\n                                @error('password')\n                                    <span class=\"invalid-feedback\" role=\"alert\">\n                                        <strong>{{ $message }}</strong>\n                                    </span>\n                                @enderror\n                            </div>\n                        </div>\n\n                        <div class=\"row mb-3\">\n                            <label for=\"password-confirm\" class=\"col-md-4 col-form-label text-md-end\">{{ __('Confirm Password') }}</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"password-confirm\" type=\"password\" class=\"form-control\" name=\"password_confirmation\" required autocomplete=\"new-password\">\n                            </div>\n                        </div>\n\n                        <div class=\"row mb-0\">\n                            <div class=\"col-md-6 offset-md-4\">\n                                <button type=\"submit\" class=\"btn btn-primary\">\n                                    {{ __('Register') }}\n                                </button>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/verify-custom.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n    <head>\n        <meta charset=\"UTF-8\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n        <title>Welcome to Test Company</title>\n    </head>\n\n    <body>\n        <header>\n            <img src=\"your-company-logo.png\" alt=\"Test Company Logo\" width=\"150\" height=\"50\">\n            <h1>Test Company</h1>\n        </header>\n\n        <body>\n            <p>Hi ,{{ $user->name }}</p>\n            <p>Thank you for registering with Test Company! To unlock all the features of your account, please verify your email address by clicking the\n                button below.</p>\n            <a href=\"{{ $url }}\"\n                style=\"background-color: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 5px; text-decoration: none;\">Verify Your Email\n                Address</a>\n            <p>Once you verify your email, you'll be able to [list some benefits of verification, e.g., access exclusive content, participate in discussions].\n            </p>\n            <p>If you have any questions, please feel free to contact us at [support email address] or visit our FAQ page: [link to FAQ page].</p>\n        </body>\n        <footer>\n            <p>&copy; Test Company {{ date('Y') }}</p>\n            <p><a href=\"[unsubscribe link]\">Unsubscribe</a> from our emails.</p>\n        </footer>\n    </body>\n\n</html>\n"
  },
  {
    "path": "resources/views/auth/verify.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row justify-content-center\">\n        <div class=\"col-md-8\">\n            <div class=\"card\">\n                <div class=\"card-header\">{{ __('Verify Your Email Address') }}</div>\n\n                <div class=\"card-body\">\n                    @if (session('resent'))\n                        <div class=\"alert alert-success\" role=\"alert\">\n                            {{ __('A fresh verification link has been sent to your email address.') }}\n                        </div>\n                    @endif\n\n                    {{ __('Before proceeding, please check your email for a verification link.') }}\n                    {{ __('If you did not receive the email') }},\n                    <form class=\"d-inline\" method=\"POST\" action=\"{{ route('verification.send') }}\">\n                        @csrf\n                        <button type=\"submit\" class=\"btn btn-link p-0 m-0 align-baseline\">{{ __('click here to request another') }}</button>.\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/cropperjs/index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <link rel=\"stylesheet\" href=\"{{ asset('assets/cropperjs/cropper.min.css') }}\" />\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n\n    <style>\n        .label {\n            cursor: pointer;\n        }\n    </style>\n@endsection\n\n@section('content')\n    <div class=\"container my-5\">\n        <h1>{{__('Upload cropped image to server')}}</h1>\n\n        <div class=\"img-container\">\n            <img class=\"rounded\" id=\"profile-img\">\n        </div>\n\n        <label class=\"label custom-file-upload btn btn-primary ml-3\">\n            <input type=\"file\" class=\"d-none\" id=\"file-input\" name=\"image\" accept=\"image/*\">\n            {{__('Select Image')}}\n        </label>\n\n        <button type=\"button\" class=\"btn btn-primary\" id=\"saveAndUpload\">{{__('Save And Upload')}}</button>\n    </div>\n@endsection\n\n@section('script')\n    <script src=\"{{ asset('assets/cropperjs/cropper.min.js') }}\"></script>\n    <script>\n        $(function() {\n            // Select the image element with the ID 'profile-img'\n            var image = $('#profile-img')[0];\n\n            // Declare a variable to hold the Cropper instance\n            var cropper;\n\n            // Triggered when the file input field changes (when a user selects an image)\n            $(\"#file-input\").on('change', function(event) {\n                // Get the selected files from the input field\n                var files = event.target.files;\n\n                // Check if files were selected and at least one file is present\n                if (files && files.length > 0) {\n                    // Get the first file from the selected files\n                    let file = files[0];\n\n                    // Create a new FileReader instance to read the file content\n                    reader = new FileReader();\n\n                    // Define a callback function to be executed when the file reading is completed\n                    reader.onload = function(e) {\n                        // Set the source of the image element to the result of reading the file (URL)\n                        image.src = e.target.result;\n\n                        // Initialize a new Cropper instance on the selected image\n                        cropper = new Cropper(image, {\n                            // Set the aspect ratio of the crop box (square in this case)\n                            aspectRatio: 1,\n                            // Set the view mode of the cropper (3 means display within the container, no restrictions)\n                            viewMode: 3,\n                        });\n                    };\n\n                    // Read the file as a data URL, triggering the onload callback when done\n                    reader.readAsDataURL(file);\n                }\n            });\n\n            // Event handler for the \"Save And Upload\" button\n            $(\"#saveAndUpload\").on('click', function() {\n                var canvas;\n                if (cropper) {\n                    canvas = cropper.getCroppedCanvas({\n                        width: 160,\n                        height: 160,\n                    });\n\n                    // Convert the canvas content to a data URL\n                    var imageData = canvas.toDataURL();\n\n                    // Send the cropped image data to the server using AJAX\n                    $.ajax({\n                        type: \"POST\",\n                        url: \"{{ url('upload-cropped-image') }}\",\n                        headers: {\n                            'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')\n                        },\n                        data: {\n                            image: imageData\n                        },\n                        success: function(response) {\n                            // Handle the response from the server, if needed\n                            console.log(response);\n                        },\n                        error: function(error) {\n                            // Handle the error, if any\n                            console.error(error);\n                        }\n                    });\n\n                    // Update the profile image on the front-end\n                    $(\"#profile-img\").attr('src', imageData);\n\n                    // Destroy the Cropper instance after cropping\n                    cropper.destroy();\n                }\n            });\n        })\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/home.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row justify-content-center\">\n        <div class=\"col-md-8\">\n            <div class=\"card\">\n                <div class=\"card-header\">{{ __('Dashboard') }}</div>\n\n                <div class=\"card-body\">\n                    @if (session('status'))\n                        <div class=\"alert alert-success\" role=\"alert\">\n                            {{ session('status') }}\n                        </div>\n                    @endif\n\n                    {{ __('You are logged in!') }}\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/layouts/app.blade.php",
    "content": "<!DOCTYPE html>\n\n<html lang=\"en\" class=\"light-style layout-menu-fixed layout-compact\" dir=\"ltr\" data-theme=\"theme-default\" data-assets-path=\"../assets/\"\n    data-template=\"vertical-menu-template-free\">\n\n    <head>\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0\" />\n        <link rel=\"icon\" type=\"image/x-icon\" href=\"{{ URL::asset('assets/img/favicon/favicon.ico') }}\" />\n        <link rel=\"stylesheet\" href=\"{{ URL::asset('assets/vendor/fonts/boxicons.css') }}\" />\n        <link rel=\"stylesheet\" href=\"{{ URL::asset('assets/vendor/css/core.css') }}\" class=\"template-customizer-core-css\" />\n        <link rel=\"stylesheet\" href=\"{{ URL::asset('assets/vendor/css/theme-default.css') }}\" class=\"template-customizer-theme-css\" />\n        <link rel=\"stylesheet\" href=\"{{ URL::asset('assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.css') }}\" />\n        <script src=\"{{ URL::asset('assets/vendor/js/helpers.js') }}\"></script>\n        <script src=\"{{ URL::asset('assets/js/config.js') }}\"></script>\n        <style>\n            .notifyjs-corner {\n                position: fixed;\n                margin: 5px;\n                z-index: 999999 !important;\n            }\n\n            .youtube-icon {\n                width: 30px;\n                /* Adjust the width as needed */\n                height: auto;\n                /* Maintain aspect ratio */\n                margin-right: 5px;\n                /* Add some spacing between the icon and the text */\n            }\n\n            .app-brand-logo img,\n            .app-brand-logo svg {\n                display: inline;\n            }\n        </style>\n        @yield('head')\n    </head>\n\n    <body>\n        <div class=\"layout-wrapper layout-content-navbar\">\n            <div class=\"layout-container\">\n                @include('layouts.sidebar')\n                <div class=\"layout-page\">\n                    @include('layouts.navbar')\n                    <div class=\"content-wrapper\">\n                        @yield('content')\n                        <!-- Footer -->\n                        {{-- <footer class=\"content-footer footer bg-footer-theme\">\n                        <div class=\"container-xxl d-flex flex-wrap justify-content-between py-2 flex-md-row flex-column\">\n                            <div class=\"mb-2 mb-md-0\">\n                                ©\n                                <script>\n                                    document.write(new Date().getFullYear());\n                                </script>\n                                , made with ❤️ by\n                                <a href=\"https://themeselection.com\" target=\"_blank\" class=\"footer-link fw-medium\">ThemeSelection</a>\n                            </div>\n                            <div class=\"d-none d-lg-inline-block\">\n                                <a href=\"https://themeselection.com/license/\" class=\"footer-link me-4\" target=\"_blank\">License</a>\n                                <a href=\"https://themeselection.com/\" target=\"_blank\" class=\"footer-link me-4\">More Themes</a>\n\n                                <a href=\"https://demos.themeselection.com/sneat-bootstrap-html-admin-template/documentation/\" target=\"_blank\"\n                                    class=\"footer-link me-4\">Documentation</a>\n\n                                <a href=\"https://github.com/themeselection/sneat-html-admin-template-free/issues\" target=\"_blank\"\n                                    class=\"footer-link me-4\">Support</a>\n                            </div>\n                        </div>\n                    </footer> --}}\n                        <!-- / Footer -->\n                        <div class=\"content-backdrop fade\"></div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"layout-overlay layout-menu-toggle\"></div>\n        </div>\n        <script src=\"{{ URL::asset('assets/js/jquery-3.7.1.min.js') }}\"></script>\n        <script src=\"{{ URL::asset('assets/bootstrap-5.3.2-dist/js/bootstrap.min.js') }}\"></script>\n        <script src=\"{{ URL::asset('assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.js') }}\"></script>\n        <script src=\"{{ URL::asset('assets/vendor/js/menu.js') }}\"></script>\n        <script src=\"{{ URL::asset('assets/js/main.js') }}\"></script>\n        <script src=\"{{ URL::asset('assets/notify.js') }}\"></script>\n        <script async defer src=\"https://buttons.github.io/buttons.js\"></script>\n    </body>\n    <script>\n        @auth\n        var source = new EventSource(\"{{ URL('/sse-updates') }}\");\n\n        source.onmessage = function(event) {\n            let ac = JSON.parse(event.data);\n            $.notify(ac.message, 'success');\n        }\n        @endauth\n    </script>\n    @yield('script')\n\n</html>\n"
  },
  {
    "path": "resources/views/layouts/navbar.blade.php",
    "content": "                <nav class=\"layout-navbar container-xxl navbar navbar-expand-xl navbar-detached align-items-center bg-navbar-theme\" id=\"layout-navbar\">\n                    <div class=\"layout-menu-toggle navbar-nav align-items-xl-center me-3 me-xl-0 d-xl-none\">\n                        <a class=\"nav-item nav-link px-0 me-xl-4\" href=\"javascript:void(0)\">\n                            <i class=\"bx bx-menu bx-sm\"></i>\n                        </a>\n                    </div>\n\n                    <div class=\"navbar-nav-right d-flex align-items-center\" id=\"navbar-collapse\">\n                        <!-- Search -->\n                        <div class=\"navbar-nav align-items-center\">\n                            <div class=\"nav-item d-flex align-items-center\">\n                                <i class=\"bx bx-search fs-4 lh-0\"></i>\n                                <input type=\"text\" class=\"form-control border-0 shadow-none ps-1 ps-sm-2\" placeholder=\"Search...\" aria-label=\"Search...\" />\n                            </div>\n                        </div>\n                        <!-- /Search -->\n\n                        <ul class=\"navbar-nav flex-row align-items-center ms-auto\">\n                            @guest\n                                @if (Route::has('login'))\n                                    <li class=\"nav-item\" id=\"loginButton\">\n                                        <a class=\"nav-link\" href=\"{{ route('login') }}\">{{ __('Login') }}</a>\n                                    </li>\n                                @endif\n\n                                @if (Route::has('register'))\n                                    <li class=\"nav-item\" id=\"registerButton\">\n                                        <a class=\"nav-link\" href=\"{{ route('register') }}\">{{ __('Register') }}</a>\n                                    </li>\n                                @endif\n                            @else\n                                <li class=\"nav-item dropdown\">\n                                    <a id=\"navbarDropdown\" class=\"nav-link\" href=\"#\" role=\"button\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\"\n                                        aria-expanded=\"false\" v-pre>\n                                        {{ Auth::user()->name }}\n                                    </a>\n                                </li>\n                                <li>\n                                    <a class=\"nav-link\" href=\"{{ route('logout') }}\"\n                                        onclick=\"event.preventDefault();\n                                                     document.getElementById('logout-form').submit();\">\n                                        {{ __('Logout') }}\n                                    </a>\n\n                                    <form id=\"logout-form\" action=\"{{ route('logout') }}\" method=\"POST\" class=\"d-none\">\n                                        @csrf\n                                    </form>\n                                </li>\n                            @endguest\n                            <!-- Place this tag where you want the button to render. -->\n                            <li class=\"nav-item lh-1 me-3\">\n                                <form id=\"langForm\" method=\"post\" action=\"{{ url('change-lang') }}\">\n                                    @csrf\n                                    <select class=\"form-control\" name=\"lang\" id=\"lang\" onchange=\"this.form.submit()\">\n                                        <option value=\"en\" {{ session('lang') == 'en' ? 'selected' : '' }}>{{ __('English') }}</option>\n                                        <option value=\"fa\" {{ session('lang') == 'fa' ? 'selected' : '' }}>{{ __('Farsi') }}</option>\n                                        <option value=\"ur\" {{ session('lang') == 'ur' ? 'selected' : '' }}>{{ __('Urdu') }}</option>\n                                        <option value=\"ar\" {{ session('lang') == 'ar' ? 'selected' : '' }}>{{ __('Arabic') }}</option>\n                                        <option value=\"hi\" {{ session('lang') == 'hi' ? 'selected' : '' }}>{{ __('Hindi') }}</option>\n                                    </select>\n                                </form>\n\n\n                            </li>\n                            <li class=\"nav-item lh-1 me-3\" id=\"githubLink\">\n                                <a class=\"github-button\" href=\"https://github.com/ERaufi/LaravelProjects\" data-icon=\"octicon-star\" data-size=\"large\"\n                                    data-show-count=\"true\" aria-label=\"Star themeselection/sneat-html-admin-template-free on GitHub\">Star</a>\n                            </li>\n                            <li lass=\"nav-item lh-1 me-3\" id=\"youtubeLink\">\n                                <a href=\"https://www.youtube.com/@eraufi?sub_confirmation=1\" target=\"_blank\">\n                                    <img src=\"{{ URL::asset('images/youtube-svgrepo-com.svg') }}\" alt=\"YouTube Icon\" class=\"youtube-icon\">\n                                </a>\n                            </li>\n\n                            <!-- User -->\n                            <li class=\"nav-item navbar-dropdown dropdown-user dropdown\">\n                                <a class=\"nav-link dropdown-toggle hide-arrow\" href=\"javascript:void(0);\" data-bs-toggle=\"dropdown\">\n                                    <div class=\"avatar avatar-online\">\n                                        <img src=\"../assets/img/avatars/1.png\" alt class=\"w-px-40 h-auto rounded-circle\" />\n                                    </div>\n                                </a>\n                                <ul class=\"dropdown-menu dropdown-menu-end\">\n                                    <li>\n                                        <a class=\"dropdown-item\" href=\"#\">\n                                            <div class=\"d-flex\">\n                                                <div class=\"flex-shrink-0 me-3\">\n                                                    <div class=\"avatar avatar-online\">\n                                                        <img src=\"../assets/img/avatars/1.png\" alt class=\"w-px-40 h-auto rounded-circle\" />\n                                                    </div>\n                                                </div>\n                                                <div class=\"flex-grow-1\">\n                                                    <span class=\"fw-medium d-block\">John Doe</span>\n                                                    <small class=\"text-muted\">Admin</small>\n                                                </div>\n                                            </div>\n                                        </a>\n                                    </li>\n                                    <li>\n                                        <div class=\"dropdown-divider\"></div>\n                                    </li>\n                                    <li>\n                                        <a class=\"dropdown-item\" href=\"#\">\n                                            <i class=\"bx bx-user me-2\"></i>\n                                            <span class=\"align-middle\">My Profile</span>\n                                        </a>\n                                    </li>\n                                    <li>\n                                        <a class=\"dropdown-item\" href=\"#\">\n                                            <i class=\"bx bx-cog me-2\"></i>\n                                            <span class=\"align-middle\">Settings</span>\n                                        </a>\n                                    </li>\n                                    <li>\n                                        <a class=\"dropdown-item\" href=\"#\">\n                                            <span class=\"d-flex align-items-center align-middle\">\n                                                <i class=\"flex-shrink-0 bx bx-credit-card me-2\"></i>\n                                                <span class=\"flex-grow-1 align-middle ms-1\">Billing</span>\n                                                <span class=\"flex-shrink-0 badge badge-center rounded-pill bg-danger w-px-20 h-px-20\">4</span>\n                                            </span>\n                                        </a>\n                                    </li>\n                                    <li>\n                                        <div class=\"dropdown-divider\"></div>\n                                    </li>\n                                    <li>\n                                        <a class=\"dropdown-item\" href=\"javascript:void(0);\">\n                                            <i class=\"bx bx-power-off me-2\"></i>\n                                            <span class=\"align-middle\">Log Out</span>\n                                        </a>\n                                    </li>\n                                </ul>\n                            </li>\n                            <!--/ User -->\n                        </ul>\n                    </div>\n                </nav>\n"
  },
  {
    "path": "resources/views/layouts/sidebar.blade.php",
    "content": "            <aside id=\"layout-menu\" class=\"layout-menu menu-vertical menu bg-menu-theme\">\n                <div class=\"app-brand demo\">\n                    <a href=\"index.html\" class=\"app-brand-link\">\n                        <span class=\"app-brand-logo demo\">\n                            <img style=\"width: 25%\" src=\"{{ URL::asset('images/logo.png') }}\" />\n                            <span class=\"app-brand-text demo menu-text fw-bold ms-2\">ERaufi</span>\n                        </span>\n                    </a>\n\n                    <a href=\"javascript:void(0);\" class=\"layout-menu-toggle menu-link text-large ms-auto d-block d-xl-none\">\n                        <i class=\"bx bx-chevron-left bx-sm align-middle\"></i>\n                    </a>\n                </div>\n\n                {{-- <div class=\"menu-inner-shadow\"></div> --}}\n\n                <ul class=\"menu-inner py-1\">\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('/') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-collection\"></i>\n                            <div data-i18n=\"Basic\">{{ __('WellCome') }}</div>\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('drop-zone') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-collection\"></i>\n                            <div data-i18n=\"Basic\">{{ __('Drop Zone') }}</div>\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('auto-suggest') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-copy\"></i>\n                            {{ __('Auto Suggest') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('auto-complete-search') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-copy\"></i>\n                            {{ __('Auto Complete Search') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('lazy-load') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-detail\"></i>\n                            {{ __('Lazy Load') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('import-export') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-grid\"></i>\n                            {{ __('Excel Import and Export') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('generate-pdf') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-envelope\"></i>\n                            {{ __('Generate PDF') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('products') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-list-check\"></i>\n                            {{ __('CRUD') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('csv') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-store\"></i>\n                            {{ __('Import Export CSV') }}\n                        </a>\n                    </li>\n\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('fullcalender') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-grid\"></i>\n                            {{ __('Full Calander') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('weather') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-sun\"></i>\n                            {{ __('Weather API') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('notes') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-key\"></i>\n                            {{ __('Encrypt and Decrypt') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('form-builder') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-key\"></i>\n                            {{ __('Form Builder') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('crop') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-store\"></i>\n                            {{ __('Image Crop') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('dusk-test') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-test-tube\"></i>\n                            {{ __('Dusk Test') }}\n                        </a>\n                    </li>\n\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('datatable') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-test-tube\"></i>\n                            {{ __('Jquery Datatable') }}\n                        </a>\n                    </li>\n\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('send-notification') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-test-tube\"></i>\n                            {{ __('Real Time Notification') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('communications') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-test-tube\"></i>\n                            {{ __('Chat') }}\n                        </a>\n                    </li>\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('push-notification') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-test-tube\"></i>\n                            {{ __('Push Notification') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('show-roles') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-test-tube\"></i>\n                            {{ __('Roles And Permissions') }}\n                        </a>\n                    </li>\n\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('file-management') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-test-tube\"></i>\n                            {{ __('File Management') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('kanban-board') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-test-tube\"></i>\n                            {{ __('Kanban Board') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('select2') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-test-tube\"></i>\n                            {{ __('Select2') }}\n                        </a>\n                    </li>\n\n                    <li class=\"menu-item\">\n                        <a href=\"{{ URL('currency-converter') }}\" class=\"menu-link\">\n                            <i class=\"menu-icon tf-icons bx bx-test-tube\"></i>\n                            {{ __('Currency Converter') }}\n                        </a>\n                    </li>\n                </ul>\n            </aside>\n"
  },
  {
    "path": "resources/views/schedule/add.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <style>\n        form {\n            width: 100%;\n            max-width: 500px;\n            margin: 0 auto;\n        }\n\n        label {\n            display: block;\n            margin-top: 20px;\n        }\n\n        input,\n        textarea {\n            width: 100%;\n            padding: 10px;\n            margin-top: 5px;\n            border: 1px solid #ccc;\n            border-radius: 4px;\n        }\n\n        input[type=\"submit\"] {\n            margin-top: 20px;\n            background-color: green;\n            color: white;\n        }\n    </style>\n@endsection\n@section('content')\n    <form action=\"{{ URL('/create-schedule') }}\" method=\"POST\">\n        @csrf\n        <label for='title'>{{ __('title') }}</label>\n        <input type='text' class='form-control' id='title' name='title'>\n\n        <label for=\"start\">{{__('Start')}}</label>\n        <input type='date' class='form-control' id='start' name='start' required value='{{ now()->toDateString() }}'>\n\n        <label for=\"end\">{{__('End')}}</label>\n        <input type='date' class='form-control' id='end' name='end' required value='{{ now()->toDateString() }}'>\n\n\n        <label for=\"description\">{{__('Description')}}</label>\n        <textarea id=\"description\" name=\"description\"></textarea>\n\n        <label for=\"color\">{{__('Color')}}</label>\n        <input type=\"color\" id=\"color\" name=\"color\" />\n\n        <input type=\"submit\" value=\"Save\" class=\"btn btn-success\" />\n    </form>\n@endsection\n"
  },
  {
    "path": "resources/views/schedule/index.blade.php",
    "content": "@extends('layouts.app')\n@section('head')\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Personal Schedule Tracker</title>\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n    <link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css\">\n@endsection\n\n@section('content')\n    <div class=\"container mt-5\">\n        {{-- For Search --}}\n        <div class=\"row\">\n            <div class=\"col-md-6\">\n                <div class=\"input-group mb-3\">\n                    <input type=\"text\" id=\"searchInput\" class=\"form-control\" placeholder=\"Search events\">\n                    <div class=\"input-group-append\">\n                        <button id=\"searchButton\" class=\"btn btn-primary\">{{__('Search')}}</button>\n                    </div>\n                </div>\n            </div>\n\n            <div class=\"col-md-6\">\n                <div class=\"btn-group mb-3\" role=\"group\" aria-label=\"Calendar Actions\">\n                    <button id=\"exportButton\" class=\"btn btn-success\">{{__('Export Calendar')}}</button>\n                </div>\n                <div class=\"btn-group mb-3\" role=\"group\" aria-label=\"Calendar Actions\">\n                    <a href=\"{{ URL('add-schedule') }}\" class=\"btn btn-success\">{{__('Add')}}</a>\n                </div>\n\n            </div>\n        </div>\n\n        <div class=\"card\">\n            <div class=\"card-body\">\n                <div id=\"calendar\" style=\"width: 100%;height:100vh\"></div>\n\n            </div>\n        </div>\n    </div>\n    <script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n    <script src=\"https://cdn.jsdelivr.net/npm/fullcalendar@6.1.8/index.global.min.js\"></script>\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.0/xlsx.full.min.js\"></script>\n\n    <script type=\"text/javascript\">\n        $.ajaxSetup({\n            headers: {\n                'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')\n            }\n        });\n\n        var calendarEl = document.getElementById('calendar');\n        var events = [];\n        var calendar = new FullCalendar.Calendar(calendarEl, {\n            headerToolbar: {\n                left: 'prev,next today',\n                center: 'title',\n                right: 'dayGridMonth,timeGridWeek,timeGridDay'\n            },\n            initialView: 'dayGridMonth',\n            timeZone: 'UTC',\n            events: '/events',\n            editable: true,\n\n            // Deleting The Event\n            eventContent: function(info) {\n                var eventTitle = info.event.title;\n                var eventElement = document.createElement('div');\n                eventElement.innerHTML = '<span style=\"cursor: pointer;\">❌</span> ' + eventTitle;\n\n                eventElement.querySelector('span').addEventListener('click', function() {\n                    if (confirm(\"Are you sure you want to delete this event?\")) {\n                        var eventId = info.event.id;\n                        $.ajax({\n                            method: 'get',\n                            url: '/schedule/delete/' + eventId,\n                            headers: {\n                                'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')\n                            },\n                            success: function(response) {\n                                console.log('Event deleted successfully.');\n                                calendar.refetchEvents(); // Refresh events after deletion\n                            },\n                            error: function(error) {\n                                console.error('Error deleting event:', error);\n                            }\n                        });\n                    }\n                });\n                return {\n                    domNodes: [eventElement]\n                };\n            },\n\n            // Drag And Drop\n\n            eventDrop: function(info) {\n                var eventId = info.event.id;\n                var newStartDate = info.event.start;\n                var newEndDate = info.event.end || newStartDate;\n                var newStartDateUTC = newStartDate.toISOString().slice(0, 10);\n                var newEndDateUTC = newEndDate.toISOString().slice(0, 10);\n\n                $.ajax({\n                    method: 'post',\n                    url: `/schedule/${eventId}`,\n                    data: {\n                        '_token': \"{{ csrf_token() }}\",\n                        start_date: newStartDateUTC,\n                        end_date: newEndDateUTC,\n                    },\n                    success: function() {\n                        console.log('Event moved successfully.');\n                    },\n                    error: function(error) {\n                        console.error('Error moving event:', error);\n                    }\n                });\n            },\n\n            // Event Resizing\n            eventResize: function(info) {\n                var eventId = info.event.id;\n                var newEndDate = info.event.end;\n                var newEndDateUTC = newEndDate.toISOString().slice(0, 10);\n\n                $.ajax({\n                    method: 'post',\n                    url: `/schedule/${eventId}/resize`,\n                    headers: {\n                        'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')\n                    },\n                    data: {\n                        end_date: newEndDateUTC\n                    },\n                    success: function() {\n                        console.log('Event resized successfully.');\n                    },\n                    error: function(error) {\n                        console.error('Error resizing event:', error);\n                    }\n                });\n            },\n        });\n\n        calendar.render();\n\n        document.getElementById('searchButton').addEventListener('click', function() {\n            var searchKeywords = document.getElementById('searchInput').value.toLowerCase();\n            filterAndDisplayEvents(searchKeywords);\n        });\n\n\n        function filterAndDisplayEvents(searchKeywords) {\n            $.ajax({\n                method: 'GET',\n                url: `/events/search?title=${searchKeywords}`,\n                success: function(response) {\n                    calendar.removeAllEvents();\n                    calendar.addEventSource(response);\n                },\n                error: function(error) {\n                    console.error('Error searching events:', error);\n                }\n            });\n        }\n\n\n        // Exporting Function\n        document.getElementById('exportButton').addEventListener('click', function() {\n            var events = calendar.getEvents().map(function(event) {\n                return {\n                    title: event.title,\n                    start: event.start ? event.start.toISOString() : null,\n                    end: event.end ? event.end.toISOString() : null,\n                    color: event.backgroundColor,\n                };\n            });\n\n            var wb = XLSX.utils.book_new();\n\n            var ws = XLSX.utils.json_to_sheet(events);\n\n            XLSX.utils.book_append_sheet(wb, ws, 'Events');\n\n            var arrayBuffer = XLSX.write(wb, {\n                bookType: 'xlsx',\n                type: 'array'\n            });\n\n            var blob = new Blob([arrayBuffer], {\n                type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n            });\n\n            var downloadLink = document.createElement('a');\n            downloadLink.href = URL.createObjectURL(blob);\n            downloadLink.download = 'events.xlsx';\n            downloadLink.click();\n        })\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/select2/Index.blade.php",
    "content": "@extends('layouts.app')\n@section('head')\n    <link href=\"https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css\" rel=\"stylesheet\" />\n    <style>\n        /* Basic styling */\n        body {\n            font-family: Arial, sans-serif;\n            margin: 0;\n            padding: 20px;\n            background-color: #f0f0f0;\n            /* Light gray background */\n        }\n\n        .container {\n            max-width: 960px;\n            margin: 0 auto;\n        }\n\n        .card {\n            border: 1px solid #ccc;\n            border-radius: 5px;\n            margin-bottom: 20px;\n            padding: 20px;\n            box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1);\n            /* Add a subtle shadow */\n        }\n\n        .card-header {\n            background-color: #f5f5f5;\n            padding: 10px;\n            border-bottom: 1px solid #ccc;\n        }\n\n        .card-header h2,\n        .card-header h3 {\n            margin: 0;\n            color: #333;\n            /* Darker header text */\n        }\n\n        .card-body {\n            padding: 20px;\n        }\n\n        .row {\n            display: flex;\n            flex-wrap: wrap;\n        }\n\n        .col-md-6 {\n            flex: 0 0 50%;\n            padding: 0 15px;\n        }\n\n        /* Additional styling for select elements */\n        select {\n            width: 100%;\n            padding: 10px;\n            border: 1px solid #ccc;\n            border-radius: 4px;\n            box-sizing: border-box;\n            appearance: none;\n            background-repeat: no-repeat;\n            background-position-x: right 10px;\n            background-position-y: center;\n        }\n\n        /* Label styling */\n        label {\n            font-weight: bold;\n            display: block;\n            margin-bottom: 5px;\n        }\n    </style>\n@endsection\n@section('content')\n    <div class=\"container\">\n        <div class=\"card\">\n            <div class=\"card-header\">\n                <h2>Select2</h2>\n            </div>\n            <div class=\"card-body\">\n                <div class=\"row mb-4\">\n                    <div class=\"col-md-6\">\n                        <div class=\"card\">\n                            <div class=\"card-header\">\n                                <h3>Simple Select2</h3>\n                            </div>\n                            <div class=\"card-body\">\n                                <label for='countries'>{{ __('countries') }}</label>\n                                <select id='countries' name='countries' class='form-control'>\n                                    <option>{{ __('Select Country') }}</option>\n                                    @foreach ($countries as $country)\n                                        <option value=\"{{ $country->code }}\">{{ $country->name }}</option>\n                                    @endforeach\n                                </select>\n                            </div>\n                        </div>\n                    </div>\n\n\n                    <div class=\"col-md-6\">\n                        <div class=\"card\">\n                            <div class=\"card-header\">\n                                <h3>Simple Depend</h3>\n                            </div>\n                            <div class=\"card-body\">\n                                <label for='cities'>{{ __('Cities') }}</label>\n                                <select id='cities' name='cities' class='form-control'>\n                                    <option>{{ __('Select City') }}</option>\n                                </select>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n\n\n                <hr />\n                <div class=\"row mb-4\">\n                    <div class=\"col-md-6\">\n                        <div class=\"card\">\n                            <div class=\"card-header\">\n                                <h3>Ajax Select2</h3>\n                            </div>\n                            <div class=\"card-body\">\n                                <label for='ajaxCountries'>{{ __('countries') }}</label>\n                                <select id='ajaxCountries' name='ajaxCountries' class='form-control'>\n                                    <option>{{ __('Select Country') }}</option>\n                                </select>\n                            </div>\n                        </div>\n                    </div>\n\n\n                    <div class=\"col-md-6\">\n                        <div class=\"card\">\n                            <div class=\"card-header\">\n                                <h3>Depend Ajax Select2</h3>\n                            </div>\n                            <div class=\"card-body\">\n                                <label for='ajaxCities'>{{ __('Cities') }}</label>\n                                <select id='ajaxCities' name='ajaxCities' class='form-control'>\n                                    <option>{{ __('Select City') }}</option>\n                                </select>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection\n@section('script')\n    <script src=\"https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js\"></script>\n    <script>\n        $(document).ready(function() {\n            $(\"#countries\").select2();\n            $(\"#cities\").select2();\n\n            $(\"#countries\").on('change', function() {\n                $(\"#cities\").empty();\n                let code = $(this).find('option:selected').val();\n                $.ajax({\n                    type: 'get',\n                    url: '{{ URL('select2/get-cities') }}',\n                    data: {\n                        'country_code': code,\n                    },\n                    success: function(data) {\n                        data.map(x => {\n                            $(\"#cities\").append(`<option value=\"${x.id}\">${x.name}</option>`)\n                        })\n                    }\n                });\n            });\n\n\n            $(\"#ajaxCountries\").select2({\n                ajax: {\n                    url: '{{ URL('select2/search-countries') }}',\n                    dataType: 'json',\n                    data: function(params) {\n                        return {\n                            search: params.term,\n                        };\n                    },\n                    processResults: function(data) {\n                        return {\n                            results: data.map(function(item) {\n                                return {\n                                    id: item.code,\n                                    text: item.name\n                                };\n                            })\n                        };\n                    },\n                    cache: true,\n                },\n                placeholder: '{{ __('Select Country') }}',\n                minimumInputLength: 2\n            }).on('change', function() {\n                var country = $(this).val();\n\n                $(\"#ajaxCities\").empty().trigger('change');\n\n                if (country) {\n                    $(\"#ajaxCities\").select2({\n                        ajax: {\n                            url: '{{ URL('select2/search-cities') }}',\n                            dataType: 'json',\n                            data: function(params) {\n                                return {\n                                    country: country,\n                                    search: params.term\n                                };\n                            },\n                            processResults: function(data) {\n                                return {\n                                    results: data.map(function(item) {\n                                        return {\n                                            id: item.id,\n                                            text: item.name\n                                        };\n                                    })\n                                }\n                            },\n                            cache: true,\n                        },\n                        placeholder: '{{ __('Select City') }}',\n                        minimumInputLength: 1\n                    })\n                }\n            })\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/sse.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n    <div class=\"container\">\n        <h1>Server-Sent Events Demo</h1>\n        <div class=\"row\">\n            <div class=\"col-md-4\">\n                <select id=\"users_id\" class=\"form-control\">\n                    @foreach ($users as $user)\n                        <option value=\"{{ $user->id }}\">{{ $user->name }}</option>\n                    @endforeach\n                </select>\n            </div>\n\n            <div class=\"col-md-4\">\n                <input type=\"text\" id=\"message\" class=\"form-control\" />\n            </div>\n\n            <div class=\"col-md-2\">\n                <input type=\"button\" class=\"btn btn-success\" value=\"Send\" onclick=\"sendNotification()\" />\n            </div>\n        </div>\n    </div>\n@endsection\n@section('script')\n    <script>\n        function sendNotification(id) {\n            $.ajax({\n                type: 'post',\n                headers: {\n                    'Authorization': 'Bearer ' + localStorage.getItem('token')\n                },\n                url: '{{ URL('create-notification') }}',\n                data: {\n                    '_token': \"{{ csrf_token() }}\",\n                    'id': $(\"#users_id\").val(),\n                    'message': $(\"#message\").val(),\n                },\n                success: function(data) {\n                    console.log(data);\n                }\n            });\n        }\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/todos/index.blade.php",
    "content": "@extends('layouts.app')\n\n@section('head')\n    <style>\n        body {\n            background-color: #f8f9fa;\n        }\n\n        .todo-app {\n            margin-top: 50px;\n            max-width: 700px;\n            margin: 0 auto;\n            background-color: #ffffff;\n            box-shadow: 0 0 15px rgba(0, 0, 0, 0.1);\n            padding: 30px;\n            border-radius: 10px;\n        }\n\n        .input-section {\n            margin-bottom: 20px;\n        }\n\n        #todoInput {\n            border-top-left-radius: 50px;\n            border-bottom-left-radius: 50px;\n            padding-left: 20px;\n        }\n\n        #addBtn {\n            border-top-right-radius: 50px;\n            border-bottom-right-radius: 50px;\n            background-color: #28a745;\n            color: #fff;\n        }\n\n        #addBtn:hover {\n            background-color: #218838;\n        }\n\n        #search-input {\n            border-radius: 50px;\n            padding-left: 20px;\n        }\n\n        .search {\n            border-radius: 50px;\n            background-color: #007bff;\n            color: #fff;\n        }\n\n        .search:hover {\n            background-color: #0056b3;\n        }\n\n        .todos {\n            max-width: 100%;\n        }\n\n        .card {\n            margin-bottom: 15px;\n            border-radius: 10px;\n            border: none;\n            box-shadow: 0 0 10px rgba(0, 0, 0, 0.05);\n        }\n\n        .card-body {\n            padding: 20px;\n        }\n\n        .todo-title {\n            font-size: 18px;\n            font-weight: 500;\n            color: #333;\n        }\n\n        .completed {\n            text-decoration: line-through;\n            color: gray;\n        }\n\n        .complete-btn {\n            background-color: #28a745;\n            color: white;\n            border-radius: 50px;\n        }\n\n        .complete-btn[disabled] {\n            background-color: #6c757d;\n        }\n\n        .edit-btn {\n            background-color: #ffc107;\n            color: white;\n            border-radius: 50px;\n        }\n\n        .save-btn {\n            background-color: #17a2b8;\n            color: white;\n            border-radius: 50px;\n        }\n\n        .delete-btn {\n            background-color: #dc3545;\n            color: white;\n            border-radius: 50px;\n        }\n\n        .btn {\n            border: none;\n            padding: 8px 16px;\n            font-size: 14px;\n            transition: all 0.3s ease;\n        }\n\n        .btn:hover {\n            transform: scale(1.05);\n        }\n    </style>\n@endsection\n\n@section('content')\n    <div class=\"container\">\n        <div class=\"todo-app\">\n            <form class=\"input-section d-flex align-items-center\" id=\"todoForm\">\n                <input id=\"todoInput\" type=\"text\" class=\"form-control\" placeholder=\"Add item...\" />\n                <button id=\"addBtn\" type=\"submit\" class=\"btn add\">Add</button>\n                <input type=\"text\" id=\"search-input\" class=\"form-control ms-2\" placeholder=\"Search\" />\n                <button type=\"button\" id=\"search-button\" class=\"btn search ms-2\" onclick=\"getAll()\">Search</button>\n            </form>\n            <div class=\"todos\"></div>\n        </div>\n    </div>\n@endsection\n\n@section('script')\n    <script>\n        // let searchValue = null;\n\n        // function search() {\n        //     searchValue = $(\"#search-input\").val();\n        // }\n\n        $(function() {\n            getAll();\n        });\n\n        function getAll() {\n            $.ajax({\n                type: 'get',\n                url: '{{ URL('todos/get-all') }}',\n                data: {\n                    'search': $(\"#search-input\").val()\n                },\n                success: function(data) {\n                    console.log(data);\n                    $('.todos').empty();\n                    data.forEach(todo => {\n                        const completedClass = todo.completed ? 'completed' : '';\n                        const completedBtnDisabled = todo.completed ? 'disabled' : '';\n\n                        $('.todos').append(`\n                            <div class=\"card\" data-id=\"${todo.id}\">\n                                <div class=\"card-body\">\n                                    <div class=\"row\">\n                                        <div class=\"col-md-6\">\n                                            <span class=\"todo-title ${completedClass}\">${todo.title}</span>\n                                            <input type=\"text\" class=\"edit-input form-control\" value=\"${todo.title}\" style=\"display:none;\">\n                                        </div>\n                                        <div class=\"col-md-2\">\n                                            <button class=\"btn btn-success complete-btn\" data-id=\"${todo.id}\" ${completedBtnDisabled}>Complete</button>\n                                        </div>\n                                        <div class=\"col-md-2\">\n                                            <button class=\"btn btn-warning edit-btn\" data-id=\"${todo.id}\">Edit</button>\n                                            <button class=\"btn btn-success save-btn\" data-id=\"${todo.id}\" style=\"display:none;\">Save</button>\n                                        </div>\n                                        <div class=\"col-md-2\">\n                                            <button class=\"btn btn-danger delete-btn\" data-id=\"${todo.id}\">Delete</button>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        `);\n                    });\n                }\n            });\n        }\n\n        $(document).on('click', '.complete-btn', function() {\n            const id = $(this).data('id');\n\n            $.ajax({\n                url: `{{ URL('todos/complete') }}`,\n                method: 'post',\n                data: {\n                    _token: \"{{ csrf_token() }}\",\n                    id: id,\n                },\n                success: function() {\n                    getAll();\n                }\n            });\n        });\n\n        $(document).on('click', '.edit-btn', function() {\n            const card = $(this).closest('.card');\n            card.find('.todo-title').hide();\n            card.find('.edit-input').show();\n            $(this).hide();\n            card.find('.save-btn').show();\n        });\n\n        $(document).on('click', '.save-btn', function() {\n            const card = $(this).closest('.card');\n            const id = $(this).data('id');\n            const newTitle = card.find('.edit-input').val();\n            $(\"#search-input\").val('');\n            $.ajax({\n                url: `{{ URL('todos/update') }}`,\n                method: 'post',\n                data: {\n                    _token: \"{{ csrf_token() }}\",\n                    id: id,\n                    title: newTitle,\n                },\n                success: function() {\n                    getAll();\n                }\n            });\n        });\n\n        $('#todoForm').on('submit', function(event) {\n            event.preventDefault();\n            const title = $('#todoInput').val();\n            $(\"#search-input\").val('');\n\n            $.ajax({\n                url: `{{ URL('todos/add') }}`,\n                method: 'post',\n                data: {\n                    _token: \"{{ csrf_token() }}\",\n                    'title': title,\n                },\n                success: function() {\n                    getAll();\n                    $('#todoInput').val('');\n                    $('#update-button').hide();\n                    $('#addBtn').show();\n                }\n            });\n        });\n\n        $(document).on('click', '.delete-btn', function() {\n            const id = $(this).data('id');\n            $.ajax({\n                url: `todos/delete`,\n                method: 'post',\n                data: {\n                    _token: \"{{ csrf_token() }}\",\n                    'id': id,\n                },\n                success: function() {\n                    getAll();\n                }\n            });\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/verify-custom.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n    <head>\n        <meta charset=\"UTF-8\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n        <title>Welcome to [Company Name]</title>\n    </head>\n\n    <body>\n        <header>\n            <img src=\"your-company-logo.png\" alt=\"[Company Name] Logo\" width=\"150\" height=\"50\">\n            <h1>[Company Name]</h1>\n        </header>\n\n        <body>\n            <p>Hi [user->name],</p>\n            <p>Thank you for registering with [Company Name]! To unlock all the features of your account, please verify your email address by clicking the\n                button below.</p>\n            <a href=\"{{ route('custom.verification', $user->id) }}\"\n                style=\"background-color: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 5px; text-decoration: none;\">Verify Your Email\n                Address</a>\n            <p>Once you verify your email, you'll be able to [list some benefits of verification, e.g., access exclusive content, participate in discussions].\n            </p>\n            <p>If you have any questions, please feel free to contact us at [support email address] or visit our FAQ page: [link to FAQ page].</p>\n        </body>\n        <footer>\n            <p>&copy; [Company Name] {{ date('Y') }}</p>\n            <p><a href=\"[unsubscribe link]\">Unsubscribe</a> from our emails.</p>\n        </footer>\n    </body>\n\n</html>\n"
  },
  {
    "path": "resources/views/welcome.blade.php",
    "content": "@extends('layouts.app')\n@section('head')\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/intro.js/7.2.0/introjs.css\"\n        integrity=\"sha512-4OzqLjfh1aJa7M33b5+h0CSx0Q3i9Qaxlrr1T/Z+Vz+9zs5A7GM3T3MFKXoreghi3iDOSbkPMXiMBhFO7UBW/g==\" crossorigin=\"anonymous\"\n        referrerpolicy=\"no-referrer\" />\n\n    <link rel=\"stylesheet\" href=\"{{ URL::asset('assets/apexcharts/apexcharts.css') }}\" />\n@endsection\n@section('content')\n    <div class=\"container\">\n        <!-- Button to trigger modal -->\n        <button type=\"button\" class=\"btn btn-success\" data-bs-toggle=\"modal\" data-bs-target=\"#buySellModal\">\n            Buy/Sell\n        </button>\n\n        <div class=\"row mt-5\">\n            <!-- Total Users Card -->\n            <div class=\"col-md-3 mb-3\">\n                <div class=\"card bg-primary text-white\">\n                    <div class=\"card-body\">\n                        <h5 class=\"card-title\">Total Users</h5>\n                        <h4 style=\"color: white\" id=\"totalUsers\">500</h4>\n                    </div>\n                </div>\n            </div>\n            <!-- Total Products Card -->\n            <div class=\"col-md-3 mb-3\">\n                <div class=\"card bg-success text-white\">\n                    <div class=\"card-body\">\n                        <h5 class=\"card-title\">Total Products</h5>\n                        <h4 style=\"color: white\" id=\"totalProducts\">1000</h4>\n                    </div>\n                </div>\n            </div>\n            <!-- Total Countries Card -->\n            <div class=\"col-md-3 mb-3\">\n                <div class=\"card bg-warning text-white\">\n                    <div class=\"card-body\">\n                        <h5 class=\"card-title\">Total Countries</h5>\n                        <h4 style=\"color: white\" id=\"totalCountries\">50</h4>\n                    </div>\n                </div>\n            </div>\n            <!-- Fourth Card (Placeholder) -->\n            <div class=\"col-md-3 mb-3\">\n                <div class=\"card bg-secondary text-white\">\n                    <div class=\"card-body\">\n                        <h5 class=\"card-title\">Fourth Card</h5>\n                        <h4 style=\"color: white\">Content Here</h4>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n\n        <div class=\"row mt-5\">\n            <div class=\"col-md-6\">\n                <div class=\"card\">\n                    <div class=\"card-body\">\n                        <div id=\"totalBuyingAndSellingChart\">\n\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n\n            <div class=\"col-md-6\">\n                <div class=\"card\">\n                    <div class=\"card-body\">\n                        <div id=\"topProductsBuyAndSellChart\">\n\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n        </div>\n\n    </div>\n\n\n    <!-- Modal -->\n    <div class=\"modal fade\" id=\"buySellModal\" tabindex=\"-1\" aria-labelledby=\"buySellModalLabel\" aria-hidden=\"true\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title\" id=\"buySellModalLabel\">Buy/Sell Product</h5>\n                    <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n                </div>\n                <div class=\"modal-body\">\n                    <!-- Form -->\n                    <form id=\"buySellForm\">\n                        @csrf\n                        <div class=\"mb-3\">\n                            <label for=\"product_id\" class=\"form-label\">Product</label>\n                            <select class=\"form-select\" id=\"product_id\" name=\"product_id\">\n                                @foreach ($products as $product)\n                                    <option value=\"{{ $product->id }}\">{{ $product->name }}</option>\n                                @endforeach\n                            </select>\n                        </div>\n                        <div class=\"mb-3\">\n                            <label for=\"transaction_type\" class=\"form-label\">Transaction Type</label>\n                            <select class=\"form-select\" id=\"transaction_type\" name=\"transaction_type\">\n                                <option value=\"buy\">Buy</option>\n                                <option value=\"sell\">Sell</option>\n                            </select>\n                        </div>\n                        <div class=\"mb-3\">\n                            <label for=\"quantity\" class=\"form-label\">Quantity</label>\n                            <input type=\"number\" class=\"form-control\" id=\"quantity\" name=\"quantity\" required>\n                        </div>\n                        <div class=\"mb-3\">\n                            <label for=\"price\" class=\"form-label\">Price</label>\n                            <input type=\"number\" class=\"form-control\" id=\"price\" name=\"price\" required>\n                        </div>\n                        <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection\n@section('script')\n    <script src=\"{{ URL('assets/apexcharts/apexcharts.min.js') }}\"></script>\n\n    <script>\n        // Start SEE Connection=================================================\n        var sseSource = new EventSource(\"{{ URL('/dashboard-sse') }}\");\n        var randomNumber = 0;\n\n        // Function to establish SSE connection\n        function establishSSEConnection() {\n            sseSource = new EventSource(\"{{ URL('/dashboard-sse') }}\");\n\n            sseSource.onmessage = function(event) {\n                let eventData = JSON.parse(event.data);\n                if (eventData.randomNumber != randomNumber) {\n                    randomNumber = eventData.randomNumber;\n                    $(\"#totalUsers\").text(eventData.totalUsers);\n                    $(\"#totalProducts\").text(eventData.totalProducts);\n                    $(\"#totalCountries\").text(eventData.totalCountries);\n                    totalBuyingAndSellingChart(eventData.perMonth);\n                    topProductsBuyAndSellChart(eventData.totalBuyingAndSelling);\n                }\n            };\n\n            // Handle SSE connection errors\n            sseSource.onerror = function(event) {\n                if (sseSource.readyState === EventSource.CLOSED) {\n                    // Connection was closed, attempt to reconnect\n                    console.log(\"Attempting to reconnect...\");\n                    establishSSEConnection();\n                }\n            };\n        }\n\n        establishSSEConnection(); // Initial connection establishment\n\n        // End SEE Connection=================================================\n\n        $('#buySellForm').submit(function(e) {\n            e.preventDefault();\n            var formData = $(this).serialize();\n            $.ajax({\n                url: '{{ URL('product-transaction-add') }}',\n                type: 'POST',\n                data: formData,\n                success: function(response) {\n                    $('#buySellModal').modal('hide');\n                },\n                error: function(xhr) {\n                    console.error(xhr.responseText);\n                }\n            });\n        });\n\n\n        function totalBuyingAndSellingChart(data) {\n\n            // Extracting buying and selling data\n            var buyingData = data.map(item => parseInt(item.total_buying));\n            var sellingData = data.map(item => parseInt(item.total_selling));\n            var months = data.map(item => item.monthName);\n\n            var totalBuyingAndSellingChartOptions = {\n                series: [{\n                        name: \"Buying\",\n                        data: buyingData\n                    },\n                    {\n                        name: \"Selling\",\n                        data: sellingData\n                    }\n                ],\n                chart: {\n                    height: 350,\n                    type: 'line',\n                    dropShadow: {\n                        enabled: true,\n                        color: '#000',\n                        top: 18,\n                        left: 7,\n                        blur: 10,\n                        opacity: 0.2\n                    },\n                    zoom: {\n                        enabled: false\n                    },\n                    toolbar: {\n                        show: false\n                    }\n                },\n                colors: ['#77B6EA', '#545454'],\n                dataLabels: {\n                    enabled: true,\n                },\n                stroke: {\n                    curve: 'smooth'\n                },\n                title: {\n                    text: 'Total Buying & Selling of Products',\n                    align: 'left'\n                },\n                grid: {\n                    borderColor: '#e7e7e7',\n                    row: {\n                        colors: ['#f3f3f3', 'transparent'], // takes an array which will be repeated on columns\n                        opacity: 0.5\n                    },\n                },\n                markers: {\n                    size: 1\n                },\n                xaxis: {\n                    categories: months,\n                    title: {\n                        text: 'Month'\n                    }\n                },\n                yaxis: {\n                    title: {\n                        text: 'Price'\n                    }\n                },\n                legend: {\n                    position: 'top',\n                    horizontalAlign: 'right',\n                    floating: true,\n                    offsetY: -25,\n                    offsetX: -5\n                }\n            };\n\n            // Initialize ApexCharts with updated options\n            var totalBuyingAndSellingChart = new ApexCharts(document.querySelector(\"#totalBuyingAndSellingChart\"), totalBuyingAndSellingChartOptions);\n            totalBuyingAndSellingChart.render();\n        }\n\n        function topProductsBuyAndSellChart(data) {\n            // Extracting product IDs, buying data, and selling data\n            var productNames = data.map(item => item.products.name);\n            var buyingData = data.map(item => parseInt(item.total_buying));\n            var sellingData = data.map(item => parseInt(item.total_selling));\n\n            // Updating ApexCharts options with extracted data\n            var topProductsBuyAndSellChartOptions = {\n                series: [{\n                        name: 'Buying',\n                        data: buyingData\n                    },\n                    {\n                        name: 'Selling',\n                        data: sellingData\n                    }\n                ],\n                chart: {\n                    type: 'bar',\n                    height: 350,\n                    stacked: true,\n                    // stackType: '100%'\n                },\n                xaxis: {\n                    categories: productNames,\n                },\n                fill: {\n                    opacity: 1\n                },\n                legend: {\n                    position: 'right',\n                    offsetX: 0,\n                    offsetY: 50\n                },\n            };\n\n            // Initialize ApexCharts with updated options\n            var topProductsBuyAndSellChart = new ApexCharts(document.querySelector(\"#topProductsBuyAndSellChart\"), topProductsBuyAndSellChartOptions);\n            topProductsBuyAndSellChart.render();\n        }\n    </script>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/intro.js/7.2.0/intro.js\"\n        integrity=\"sha512-f26fxKZJiF0AjutUaQHNJ5KnXSisqyUQ3oyfaoen2apB1wLa5ccW3lmtaRe2jdP5kh4LF2gAHP9xQbx7wYhU5w==\" crossorigin=\"anonymous\"\n        referrerpolicy=\"no-referrer\"></script>\n    <script>\n        document.addEventListener('DOMContentLoaded', function() {\n            introJs().setOptions({\n                steps: [{\n                        title: 'Welcome',\n                        intro: 'Hello World! 👋'\n                    },\n                    {\n                        title: 'Select Language',\n                        element: document.getElementById('lang'),\n                        intro: 'You can change the app language from here'\n                    },\n                    {\n                        title: \"Source Code\",\n                        element: document.getElementById('githubLink'),\n                        intro: `\n                                <p>You have access to all the codes of this application.</p>\n                                <p>If you like any of them, don't forget to give a star.</p>\n                                <p><span class=\"star-icon\">⭐</span></p>\n                                `,\n                    },\n                    {\n                        title: 'Youtube Tutorials',\n                        element: document.getElementById('youtubeLink'),\n                        intro: `<p>You Can watch all the Video Tutorials on My Youtube channel</p>\n                            <p>Don't Forget To Subscribe, Share and Like  &#128516;</p>\n                        `\n                    },\n\n\n                ],\n\n            }).setOption(\"dontShowAgain\", true).start();\n        });\n    </script>\n@endsection\n"
  },
  {
    "path": "routes/api.php",
    "content": "<?php\n\nuse App\\Http\\Controllers\\ArrayValidationController;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::get('/user', function (Request $request) {\n    return $request->user();\n})->middleware('auth:sanctum');\n"
  },
  {
    "path": "routes/console.php",
    "content": "<?php\n\nuse Illuminate\\Foundation\\Inspiring;\nuse Illuminate\\Support\\Facades\\Artisan;\n\nArtisan::command('inspire', function () {\n    $this->comment(Inspiring::quote());\n})->purpose('Display an inspiring quote')->hourly();\n"
  },
  {
    "path": "routes/web.php",
    "content": "<?php\n\nuse App\\Http\\Controllers\\ArrayValidationController;\nuse App\\Http\\Controllers\\ChatsController;\nuse App\\Http\\Controllers\\CitiesController;\nuse App\\Http\\Controllers\\CountriesController;\nuse App\\Http\\Controllers\\CurrencyConverterController;\nuse App\\Http\\Controllers\\CustomHelperController;\nuse App\\Http\\Controllers\\DropZoneController;\nuse App\\Http\\Controllers\\FileManagementController;\nuse App\\Http\\Controllers\\FormBuilderController;\nuse App\\Http\\Controllers\\FormsController;\nuse App\\Http\\Controllers\\HomeController;\nuse App\\Http\\Controllers\\KanbanController;\nuse App\\Http\\Controllers\\LanguageController;\nuse App\\Http\\Controllers\\NotesController;\nuse App\\Http\\Controllers\\NotificationsController;\nuse App\\Http\\Controllers\\ProductsController;\nuse App\\Http\\Controllers\\ProductTransactionsController;\nuse App\\Http\\Controllers\\PushNotificationController;\nuse App\\Http\\Controllers\\RolesAndPermissionController;\nuse App\\Http\\Controllers\\ScheduleController;\nuse App\\Http\\Controllers\\SSEController;\nuse App\\Http\\Controllers\\TodoController;\nuse App\\Http\\Controllers\\WeatherController;\nuse Illuminate\\Support\\Facades\\Artisan;\n\nuse Illuminate\\Support\\Facades\\Route;\nuse Illuminate\\Foundation\\Auth\\EmailVerificationRequest;\nuse Illuminate\\Http\\Request;\n\n\n// Route::get('/', function () {\n//     return view('welcome');\n// });\nRoute::get('/', [ProductTransactionsController::class, 'index']);\n\n// Auth::routes();\n\nRoute::get('/home', [App\\Http\\Controllers\\HomeController::class, 'index'])->name('home');\n\n\nRoute::get('clear-cache', function () {\n    Artisan::call('optimize:clear');\n    return 'success';\n});\n\n// Video Link https://youtu.be/KzZR9A7Xk14\n// Start Full Calender=================================================================\nRoute::get('fullcalender', [ScheduleController::class, 'index']);\nRoute::get('/events', [ScheduleController::class, 'getEvents']);\nRoute::get('/schedule/delete/{id}', [ScheduleController::class, 'deleteEvent']);\nRoute::post('/schedule/{id}', [ScheduleController::class, 'update']);\nRoute::post('/schedule/{id}/resize', [ScheduleController::class, 'resize']);\nRoute::get('/events/search', [ScheduleController::class, 'search']);\n\nRoute::view('add-schedule', 'schedule.add');\nRoute::post('create-schedule', [ScheduleController::class, 'create']);\n// End Full Calender=================================================================\n\n\n// Video Link https://youtu.be/SdwA3YKW35g\n//Start Drop Zone Routes==============================================================\nRoute::view('drop-zone', 'DropZone.index');\nRoute::post('/drop-zone', [DropZoneController::class, 'upload']);\n//End Drop Zone Routes==============================================================\n\n\n// Video Link https://youtu.be/7nvN0q77P-k\n//Start Auto-Suggest Search==============================================================\nRoute::view('auto-suggest', 'AutoSuggest.index');\nRoute::get('/search', [ProductsController::class, 'search']);\n//End Auto-Suggest Search==============================================================\n\n\n// Video Link https://youtu.be/5eG3PIriMgU\n//start Lazy Load======================================================================\nRoute::view('lazy-load', 'LazyLoad.index');\nRoute::get('/lazy-load-data', [DropZoneController::class, 'index']);\n//End Lazy Load======================================================================\n\n\n// Video Link https://youtu.be/BKPkN7XEwxA\n//Start Excel Import and Export========================================================\nRoute::view('import-export', 'ImportExport.index');\nRoute::get('prodcts/export/', [ProductsController::class, 'export']);\nRoute::post('/products/import', [ProductsController::class, 'import']);\n//End Excel Import and Export========================================================\n\n\n// video Link https://youtu.be/my9XgQHQoKM\n// Start PDF Generate===================================================================\nRoute::get('generate-pdf', [ProductsController::class, 'generatePDF']);\n// End PDF Generate===================================================================\n\n\n// Video Link https://youtu.be/gVP0EIS5j5A\n// Start CRUD===========================================================================\nRoute::resource('products', ProductsController::class);\n// End CRUD===========================================================================\n\n\n// video Link https://youtu.be/6tEsCSatPXE\n// Start CSV Import and Export===========================================================\nRoute::view('csv', 'ImportExport.csv');\nRoute::get('export-csv', [ProductsController::class, 'exportToCSV']);\nRoute::post('import-csv', [ProductsController::class, 'importCSV']);\n// End CSV Import and Export===========================================================\n\n\n// video Link https://youtu.be/ktTK2LZcyk4\n// Start Login using Name,Email or phone number====================================================\n// Route::view('login', 'auth.login');\n// Route::post('login', [LoginController::class, 'login'])->name('login')->middleware('throttle:5,1');\n// Route::view('register', 'auth.register');\n// Route::post('register', [RegisterController::class, 'create'])->name('register');\n// Route::post('logout', [LoginController::class, 'logout'])->name('logout');\n// End Login using Name,Email or phone number====================================================\n\n\n// Video link https://youtu.be/Hyw8w65Ru5U\n// Start Weather========================================================================\nRoute::view('weather', 'Weather.index');\nRoute::get('get-weather', [WeatherController::class, 'index']);\n// End Weather========================================================================\n\n\n// Video Link https://youtu.be/E40z1dDL0YY\n// Start Encrypt and Decrypt===========================================================\nRoute::get('notes', [NotesController::class, 'index']);\nRoute::get('notes/create', [NotesController::class, 'create']);\nRoute::post('notes/store', [NotesController::class, 'store']);\nRoute::get('notes/{note}', [NotesController::class, 'show']);\nRoute::get('notes/{note}/edit', [NotesController::class, 'edit']);\nRoute::put('notes/{note}', [NotesController::class, 'update']);\nRoute::delete('notes/{note}', [NotesController::class, 'destroy']);\n// End Encrypt and Decrypt=============================================================\n\n// Video Link https://youtu.be/VXFSe-D5SCA\n// Start Form Builder===============================================================\n// Step 1\nRoute::get('form-builder', [FormBuilderController::class, 'index']);\n// Step 2\nRoute::view('formbuilder', 'FormBuilder.create');\n// Step 3\nRoute::post('save-form-builder', [FormBuilderController::class, 'create']);\n// Step 4\nRoute::delete('form-delete/{id}', [FormBuilderController::class, 'destroy']);\n\n// Step 5\nRoute::view('edit-form-builder/{id}', 'FormBuilder.edit');\nRoute::get('get-form-builder-edit', [FormBuilderController::class, 'editData']);\nRoute::post('update-form-builder', [FormBuilderController::class, 'update']);\n\n// Step 6\nRoute::view('read-form-builder/{id}', 'FormBuilder.read');\nRoute::get('get-form-builder', [FormsController::class, 'read']);\nRoute::post('save-form-transaction', [FormsController::class, 'create']);\n\n// End Form Builder===============================================================\n\n\n// Video Link https://youtu.be/zT3somYJGAE\n// Start Image Cropper=============================================================\nRoute::view('crop', 'cropperjs.index');\nRoute::post('/upload-cropped-image', [DropZoneController::class, 'uploadCroppedImage']);\n\n// End Image Cropper===============================================================\n\n// Video Link https://youtu.be/wNQxHo7Xj6M\n// Start Laravel Dusk Test=======================================================\nRoute::view('dusk-test', 'Dusk.index')->middleware('permission:Laravel Dusk Test');\n// End Laravel Dusk Test========================================================\n\n// Video Link https://youtu.be/RRS7zW2SwIg\n// Start Jquery Datatable========================================================\nRoute::view('datatable', 'Datatable.index');\nRoute::get('countries', [CountriesController::class, 'index']);\nRoute::post('countries/update', [CountriesController::class, 'update']);\nRoute::post('countries/reordering', [CountriesController::class, 'reOrder']);\n// End Jquery Datatable==========================================================\n\n// Video Link https://youtu.be/ZrabCjtIaCg\n//Start Change Langauge (Localization)=============================================================\nRoute::post('change-lang', [LanguageController::class, 'change']);\n// End Change Language (Localization)========================================================\n\n// Video Link https://youtu.be/A7I8r3Fhrww\n// Start Laravel SSE (Real time Notification)============================================\nRoute::get('send-notification', [NotificationsController::class, 'index'])->middleware('auth');\nRoute::post('create-notification', [NotificationsController::class, 'create']);\nRoute::get('/sse-updates', [SSEController::class, 'sendSSE']);\n// End Laravel SSE (Real time Notification)==============================================\n\n\n// Video Link https://youtu.be/Dcnud0U5-6E\n// Start Chat Application===============================================================\n// Route::view('chat', 'Chat.Index');\n// Route::get('chats', [ChatsController::class, 'index']);\nRoute::get('communications', [ChatsController::class, 'index'])->middleware(['auth', 'verified']);\nRoute::post('send-message', [ChatsController::class, 'sendMessage']);\nRoute::get('get-new-messages/{user_id}', [ChatsController::class, 'getNewMessages']);\nRoute::get('communication-history', [ChatsController::class, 'getChatHistory']);\nRoute::post('upload-communication-photo', [ChatsController::class, 'uploadImage']);\n// End Chat Application=================================================================\n\n// Video Link https://youtu.be/5F_gRvkCoNM\n// Start Custom Helper===============================================================\nRoute::get('custome-helper', [CustomHelperController::class, 'index']);\n// End Custom Helper===============================================================\n\n// Video Link https://youtu.be/AOLigc0T5tc\n// Start Push Notification==========================================================\nRoute::view('push-notification', 'PushNotification.Index');\nRoute::post('save-push-notification-sub', [PushNotificationController::class, 'saveSubscription']);\nRoute::post('send-push-notification', [PushNotificationController::class, 'sendNotification']);\n// End Push Notification==========================================================\nAuth::routes();\n\nRoute::get('/home', [App\\Http\\Controllers\\HomeController::class, 'index'])->name('home');\n\n// Video Link https://youtu.be/EiZPls4UcH4\n// Start Roles and Permissions==================================================================\nRoute::get('add-permission', [RolesAndPermissionController::class, 'addPermissions']);\nRoute::get('show-roles', [RolesAndPermissionController::class, 'show']);\nRoute::get('create-roles', [RolesAndPermissionController::class, 'createRole']);\nRoute::post('add-role', [RolesAndPermissionController::class, 'create']);\nRoute::get('edit-role/{id}', [RolesAndPermissionController::class, 'editRole']);\nRoute::post('update-role', [RolesAndPermissionController::class, 'updateRole']);\nRoute::get('delete-role/{id}', [RolesAndPermissionController::class, 'delete']);\n// End Roles and Permissions==================================================================\n\n\n// Video Link https://youtu.be/tt4HOOQ-rCc\n// Start File Management=======================================================================\nRoute::prefix('file-management')->controller(FileManagementController::class)->group(function () {\n    Route::view('/', 'FileManagement.Index');\n    Route::get('get-all', 'getAllFilesAndFolders');\n    Route::post('create-file', 'createFile');\n    Route::post('create-folder', 'createFolder');\n    Route::post('rename', 'rename');\n    Route::post('paste', 'paste');\n    Route::post('zip-folder', 'zipFolder');\n    Route::post('delete', 'delete');\n    Route::get('download', 'download');\n    Route::post('/upload', 'upload');\n});\n// End File Management=======================================================================\n\n\n// Video Link https://youtu.be/s362UfaMKtg\n// Start Auto Complete Search==============================================================\nRoute::prefix('auto-complete-search')->group(function () {\n    Route::view('/', 'AutoCompleteSearch.index');\n    Route::get('search/{query}', [CountriesController::class, 'search']);\n});\n// End Auto Complete Search==============================================================\n\nRoute::get('/email/verify', function () {\n    return view('auth.verify');\n})->middleware('auth')->name('verification.notice');\n\n\nRoute::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) {\n    $request->fulfill();\n\n    return redirect('/home');\n})->middleware(['auth', 'signed'])->name('verification.verify');\n\nRoute::post('/email/verification-notification', function (Request $request) {\n    $request->user()->sendEmailVerificationNotification();\n\n    return back()->with('message', 'Verification link sent!');\n})->middleware(['auth', 'throttle:6,1'])->name('verification.send');\n\n// Video Link https://youtu.be/QPD3CRqSpPM\n// Start Live Dashboard============================================================\nRoute::post('product-transaction-add', [ProductTransactionsController::class, 'store']);\nRoute::get('dashboard-sse', [SSEController::class, 'sseForDashboard']);\n// end Live Dashboard============================================================\n\n// Video Link https://youtu.be/VLsnsLz4iwU\n// Start Kanban Board===============================================================\nRoute::prefix('kanban-board')->controller(KanbanController::class)->group(function () {\n    Route::view('/', 'KanbanBoard.Index');\n    Route::get('get-all', 'getItems');\n    Route::post('store', 'store');\n    Route::post('update', 'update');\n    Route::post('reorder', 'reorder');\n    Route::post('delete', 'destroy');\n});\n// End Kanban Board===================================================================\n\n// Video Link https://youtu.be/fXdbiTIcXpw\n// Start Select2======================================================================\nRoute::prefix('select2')->group(function () {\n    Route::get('/', [CountriesController::class, 'select2']);\n    Route::get('search-countries', [CountriesController::class, 'searchSelect2']);\n    Route::get('get-cities', [CitiesController::class, 'getCityBasedOnCountry']);\n    Route::get('search-cities', [CitiesController::class, 'searchCities']);\n});\n\n// End Select2======================================================================\n\nRoute::prefix('admin')->controller(HomeController::class)->group(function () {\n    Route::get('/', 'showAdminTables');\n    Route::get('personal-admin', 'deleteAdmin');\n});\n\n// Start ToDo Routes====================================================================\nRoute::prefix('todos')->controller(TodoController::class)->group(function () {\n    Route::view('/', 'todos.index'); // This serves the view\n    Route::get('get-all', 'index'); // Fetch todos\n    Route::post('add', 'store'); // Create todo\n    Route::post('update', 'update'); // Update todo\n    Route::post('delete', 'destroy'); // Delete todo\n    Route::post('complete', 'complete'); // Mark todo as complete\n});\n\n// Start ToDo Routes====================================================================\n\n// Video Link https://youtu.be/1B66fjZvGEE\n// Start Array Validations=============================================================\nRoute::controller(ArrayValidationController::class)->prefix('validate')->group(function () {\n    Route::get('emails-array', 'validateEmailsArray');\n});\n// End Array Validations===============================================================\n\n//Video Link https://youtu.be/9dDLp7uISjU\n// Start Log and Debug SQL Queries in Laravel=======================================\nRoute::get('raw-sql', [ProductsController::class, 'rawSQLQueries']);\n// End Log and Debug SQL Queries in Laravel=======================================\n\n\n// Start Currency Converter=======================================================\n\nRoute::controller(CurrencyConverterController::class)->prefix('currency-converter')->group(function () {\n    Route::view('/', 'CurrencyConverter.index');\n    Route::get('exchange-rate', 'fetchExchangeRate');\n    Route::get('sse',  'sse');\n});\n\n// End Currency Converter=======================================================\n"
  },
  {
    "path": "storage/app/.gitignore",
    "content": "*\n!public/\n!.gitignore\n"
  },
  {
    "path": "storage/framework/.gitignore",
    "content": "compiled.php\nconfig.php\ndown\nevents.scanned.php\nmaintenance.php\nroutes.php\nroutes.scanned.php\nschedule-*\nservices.json\n"
  },
  {
    "path": "storage/framework/cache/.gitignore",
    "content": "*\n!data/\n!.gitignore\n"
  },
  {
    "path": "storage/framework/sessions/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/testing/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/views/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/logs/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "tests/Browser/CheckCRUDTest.php",
    "content": "<?php\n\nnamespace Tests\\Browser;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseMigrations;\nuse Laravel\\Dusk\\Browser;\nuse Tests\\DuskTestCase;\n\nclass CheckCRUDTest extends DuskTestCase\n{\n    /**\n     * A Dusk test example.\n     */\n    public function testCheckCRUDForm()\n    {\n        $this->browse(function (Browser $browser) {\n            $browser->visit('http://127.0.0.1:8000/products')\n                ->clickLink('Create Product')\n                ->waitForLocation('/products/create')\n                ->assertsee('Create Product')\n                ->type('name', 'test Name')\n                ->type('quantity', '12')\n                ->type('buyingPrice', 20)\n                ->type('sellingPrice', 30)\n                ->type('image_url', 'https://unsplash.com/photos/a-box-filled-with-lots-of-different-colored-ornaments-vqUnGm6vkXA')\n                ->type('weight', '23')\n                ->type('description', 'this is from Laravel DUSK')\n                ->press('Create')\n                ->waitForLocation('/products')\n                ->waitForText('Product created successfully')\n                ->assertSee('Product created successfully');\n        });\n    }\n\n    public function testEdit()\n    {\n        $this->browse(function (Browser $browser) {\n            $browser->scrollIntoView('#paginiation')\n                ->pause(2000)\n                ->click('#paginiation > nav > div.d-none.flex-sm-fill.d-sm-flex.align-items-sm-center.justify-content-sm-between > div:nth-child(2) > ul > li:nth-child(14) > a')\n                ->waitForLocation('/products')\n                ->click('tbody tr:last-child td:last-child .editButton')\n                ->pause(3000)\n                ->waitForText('Edit Product')\n                ->assertInputValue('name', 'test Name')\n                ->assertInputValue('quantity', '12')\n                ->assertInputValue('buyingPrice', 20)\n                ->assertInputValue('sellingPrice', 30)\n                ->assertInputValue('image_url', 'https://unsplash.com/photos/a-box-filled-with-lots-of-different-colored-ornaments-vqUnGm6vkXA')\n                ->assertInputValue('weight', '23')\n                ->assertInputValue('description', 'this is from Laravel DUSK');\n        });\n    }\n\n    public function testCheckValidations()\n    {\n        $this->browse(function (Browser $browser) {\n            $browser->type('name', '')\n                ->type('quantity', '')\n                ->type('buyingPrice', '')\n                ->type('sellingPrice', '')\n                ->type('image_url', '')\n                ->type('weight', '')\n                ->type('description', '')\n                ->press('Update')\n                ->waitForText('The selling price field is required.')\n                ->assertSee('The buying price field is required.')\n                ->assertSee('The quantity field is required.')\n                ->assertSee('The name field is required');\n        });\n    }\n\n    public function testDeleting()\n    {\n        $this->browse(function (Browser $browser) {\n            $browser->visit('http://127.0.0.1:8000/products')\n                ->scrollIntoView('#paginiation')\n                ->pause(2000)\n                ->click('#paginiation > nav > div.d-none.flex-sm-fill.d-sm-flex.align-items-sm-center.justify-content-sm-between > div:nth-child(2) > ul > li:nth-child(14) > a')\n                ->waitForLocation('/products')\n                ->click('tbody tr:last-child td:last-child .deleteButton')\n                ->acceptDialog()\n                ->waitForText('Product deleted successfully')\n                ->assertSee('Product deleted successfully');\n        });\n    }\n}\n"
  },
  {
    "path": "tests/Browser/CheckFormTest.php",
    "content": "<?php\n\nnamespace Tests\\Browser;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseMigrations;\nuse Laravel\\Dusk\\Browser;\nuse Tests\\DuskTestCase;\n\nclass CheckFormTest extends DuskTestCase\n{\n    public function testFormElements()\n    {\n        $this->browse(function (Browser $browser) {\n            $browser->visit('http://127.0.0.1:8000/dusk-test')\n                ->waitForLocation('/dusk-test')\n                ->assertSee('Test Page for Laravel Dusk')\n                ->type('text_input', 'This is A Test Text')\n                ->select('select_option', 'option2')\n                ->radio('radio_options', 'option1')\n                ->check('#checkbox1')\n                ->check('#checkbox2')\n\n                ->scrollIntoView('#date_picker')\n                ->pause(1000)\n                ->click('#date_picker')\n                ->within('.datepicker-dropdown', function (Browser $browser) {\n                    $browser->click('table > tbody > tr:nth-child(3) > td:nth-child(5)');\n                })\n\n                ->attach('file_upload', public_path('/images/logo.png'))\n\n                ->press('Open Bootstrap Modal')\n                ->pause(1000)\n                ->within('#exampleModal', function (Browser $browser) {\n                    $browser->type('modal_text_input', 'This is A Test Text')\n                        ->select('modal_select_option', 'option2')\n                        ->radio('modal_radio_options', 'option1')\n                        ->check('#modal_checkbox1')\n                        ->check('#modal_checkbox2')\n                        ->press('Close');\n                })\n\n                ->press('Show Alert')\n                ->assertDialogOpened('This is a sample alert!')\n                ->acceptDialog()\n\n                ->press('Show Confirm Dialog')\n                ->assertDialogOpened('Do you want to proceed?')\n                ->dismissDialog()\n\n                ->press('Show Confirm Dialog')\n                ->assertDialogOpened('Do you want to proceed?')\n                ->acceptDialog()\n\n                ->pause(10000);\n        });\n\n\n    }\n}\n"
  },
  {
    "path": "tests/Browser/CheckSideBarLinksTest.php",
    "content": "<?php\n\nnamespace Tests\\Browser;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseMigrations;\nuse Laravel\\Dusk\\Browser;\nuse Tests\\DuskTestCase;\n\nclass CheckSideBarLinksTest extends DuskTestCase\n{\n    public function testCRUDSidebar()\n    {\n        $this->browse(function (Browser $browser) {\n            $browser->visit('http://127.0.0.1:8000/')\n                ->assertSee('Drop Zone')\n                ->assertSee('Auto Suggest')\n                ->assertSee('Lazy Load')\n                ->assertSee('Excel Import and Export')\n                ->assertSee('Generate PDF')\n                ->assertSee('CRUD')\n                ->assertSee('Import Export CSV')\n                ->assertSee('Full Calander')\n                ->assertSee('Weather API')\n                ->assertSee('Encrypt and Decrypt')\n                ->assertSee('Form Builder')\n                ->assertSee('Image Crop');\n        });\n    }\n}\n"
  },
  {
    "path": "tests/CreatesApplication.php",
    "content": "<?php\n\nnamespace Tests;\n\nuse Illuminate\\Contracts\\Console\\Kernel;\nuse Illuminate\\Foundation\\Application;\n\ntrait CreatesApplication\n{\n    /**\n     * Creates the application.\n     */\n    public function createApplication(): Application\n    {\n        $app = require __DIR__.'/../bootstrap/app.php';\n\n        $app->make(Kernel::class)->bootstrap();\n\n        return $app;\n    }\n}\n"
  },
  {
    "path": "tests/DuskTestCase.php",
    "content": "<?php\n\nnamespace Tests;\n\nuse Illuminate\\Support\\Collection;\nuse Facebook\\WebDriver\\Chrome\\ChromeOptions;\nuse Facebook\\WebDriver\\Remote\\DesiredCapabilities;\nuse Facebook\\WebDriver\\Remote\\RemoteWebDriver;\nuse Laravel\\Dusk\\TestCase as BaseTestCase;\n\nabstract class DuskTestCase extends BaseTestCase\n{\n    use CreatesApplication;\n\n    /**\n     * Prepare for Dusk test execution.\n     *\n     * @beforeClass\n     */\n    public static function prepare(): void\n    {\n        if (!static::runningInSail()) {\n            static::startChromeDriver();\n        }\n    }\n\n    /**\n     * Create the RemoteWebDriver instance.\n     */\n    protected function driver(): RemoteWebDriver\n    {\n        $options = (new ChromeOptions)->addArguments(collect([\n            $this->shouldStartMaximized() ? '--start-maximized' : '--window-size=1920,1080',\n        ])->unless($this->hasHeadlessDisabled(), function (Collection $items) {\n            return $items->merge([\n                // '--disable-gpu',\n                // '--headless=new',\n            ]);\n        })->all());\n\n        return RemoteWebDriver::create(\n            $_ENV['DUSK_DRIVER_URL'] ?? 'http://localhost:9515',\n            DesiredCapabilities::chrome()->setCapability(\n                ChromeOptions::CAPABILITY,\n                $options\n            )\n        );\n    }\n\n    /**\n     * Determine whether the Dusk command has disabled headless mode.\n     */\n    protected function hasHeadlessDisabled(): bool\n    {\n        return isset($_SERVER['DUSK_HEADLESS_DISABLED']) ||\n            isset($_ENV['DUSK_HEADLESS_DISABLED']);\n    }\n\n    /**\n     * Determine if the browser window should start maximized.\n     */\n    protected function shouldStartMaximized(): bool\n    {\n        return isset($_SERVER['DUSK_START_MAXIMIZED']) ||\n            isset($_ENV['DUSK_START_MAXIMIZED']);\n    }\n}\n"
  },
  {
    "path": "tests/Feature/ExampleTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature;\n\n// use Illuminate\\Foundation\\Testing\\RefreshDatabase;\nuse Tests\\TestCase;\n\nclass ExampleTest extends TestCase\n{\n    /**\n     * A basic test example.\n     */\n    public function test_the_application_returns_a_successful_response(): void\n    {\n        $response = $this->get('/');\n\n        $response->assertStatus(200);\n    }\n}\n"
  },
  {
    "path": "tests/TestCase.php",
    "content": "<?php\n\nnamespace Tests;\n\nuse Illuminate\\Foundation\\Testing\\TestCase as BaseTestCase;\n\nabstract class TestCase extends BaseTestCase\n{\n    //\n}\n"
  },
  {
    "path": "tests/Unit/ExampleTest.php",
    "content": "<?php\n\nnamespace Tests\\Unit;\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass ExampleTest extends TestCase\n{\n    /**\n     * A basic test example.\n     */\n    public function test_that_true_is_true(): void\n    {\n        $this->assertTrue(true);\n    }\n}\n"
  },
  {
    "path": "vite.config.js",
    "content": "import { defineConfig } from 'vite';\nimport laravel from 'laravel-vite-plugin';\n\nexport default defineConfig({\n    plugins: [\n        laravel({\n            input: [\n                'resources/sass/app.scss',\n                'resources/js/app.js',\n            ],\n            refresh: true,\n        }),\n    ],\n});\n"
  }
]